From 2ff768b58dbc352f9085d0657af015830608a7c4 Mon Sep 17 00:00:00 2001 From: EspoTek Date: Wed, 7 Sep 2016 16:36:43 +1000 Subject: [PATCH] Code dump Adding the code! --- AVR Code/.vs/USB_BULK_TEST/v14/.atsuo | Bin 0 -> 130048 bytes AVR Code/USB_BULK_TEST.atsln | 20 + AVR Code/USB_BULK_TEST.atsuo | Bin 0 -> 92672 bytes AVR Code/USB_BULK_TEST/Debug/Makefile | 375 + .../USB_BULK_TEST/Debug/USB_BULK_TEST.eep | 1 + .../USB_BULK_TEST/Debug/USB_BULK_TEST.elf | Bin 0 -> 356799 bytes .../USB_BULK_TEST/Debug/USB_BULK_TEST.hex | 662 + .../USB_BULK_TEST/Debug/USB_BULK_TEST.lss | 6988 + .../USB_BULK_TEST/Debug/USB_BULK_TEST.map | 2825 + .../USB_BULK_TEST/Debug/USB_BULK_TEST.srec | 663 + AVR Code/USB_BULK_TEST/Debug/makedep.mk | 42 + .../src/ASF/common/boards/user_board/init.d | 203 + .../src/ASF/common/boards/user_board/init.o | Bin 0 -> 272156 bytes .../components/display/st7565r/st7565r.d | 159 + .../ASF/common/services/clock/xmega/sysclk.d | 124 + .../ASF/common/services/clock/xmega/sysclk.o | Bin 0 -> 266636 bytes .../services/gfx_mono/gfx_mono_c12832_a1z.d | 174 + .../services/gfx_mono/gfx_mono_framebuffer.d | 174 + .../services/gfx_mono/gfx_mono_generic.d | 174 + .../common/services/gfx_mono/gfx_mono_menu.d | 189 + .../services/gfx_mono/gfx_mono_spinctrl.d | 195 + .../common/services/gfx_mono/gfx_mono_text.d | 179 + .../ASF/common/services/gfx_mono/sysfont.d | 186 + .../services/ioport/xmega/ioport_compat.d | 98 + .../services/ioport/xmega/ioport_compat.o | Bin 0 -> 244868 bytes .../common/services/sleepmgr/xmega/sleepmgr.d | 104 + .../common/services/sleepmgr/xmega/sleepmgr.o | Bin 0 -> 244500 bytes .../services/spi/xmega_spi/spi_master.d | 142 + .../services/spi/xmega_usart_spi/usart_spi.d | 145 + .../atxmega256a3bu_xmega_a3bu_xplained/ui.d | 204 + .../atxmega256a3bu_xmega_a3bu_xplained/ui.o | Bin 0 -> 273744 bytes .../usb/class/vendor/device/udi_vendor.d | 135 + .../usb/class/vendor/device/udi_vendor.o | Bin 0 -> 268576 bytes .../usb/class/vendor/device/udi_vendor_desc.d | 126 + .../usb/class/vendor/device/udi_vendor_desc.o | Bin 0 -> 262080 bytes .../src/ASF/common/services/usb/udc/udc.d | 222 + .../src/ASF/common/services/usb/udc/udc.o | Bin 0 -> 319952 bytes .../xmega/boards/xmega_a3bu_xplained/init.d | 110 + .../Debug/src/ASF/xmega/drivers/cpu/ccp.d | 34 + .../Debug/src/ASF/xmega/drivers/cpu/ccp.o | Bin 0 -> 1436 bytes .../Debug/src/ASF/xmega/drivers/nvm/nvm.d | 96 + .../Debug/src/ASF/xmega/drivers/nvm/nvm.o | Bin 0 -> 282556 bytes .../Debug/src/ASF/xmega/drivers/nvm/nvm_asm.d | 35 + .../Debug/src/ASF/xmega/drivers/nvm/nvm_asm.o | Bin 0 -> 2460 bytes .../Debug/src/ASF/xmega/drivers/spi/spi.d | 106 + .../Debug/src/ASF/xmega/drivers/usart/usart.d | 138 + .../src/ASF/xmega/drivers/usb/usb_device.d | 180 + .../src/ASF/xmega/drivers/usb/usb_device.o | Bin 0 -> 346836 bytes AVR Code/USB_BULK_TEST/Debug/src/main.d | 226 + AVR Code/USB_BULK_TEST/Debug/src/main.o | Bin 0 -> 287808 bytes AVR Code/USB_BULK_TEST/Debug/src/tiny_adc.d | 215 + AVR Code/USB_BULK_TEST/Debug/src/tiny_adc.o | Bin 0 -> 287776 bytes AVR Code/USB_BULK_TEST/Debug/src/tiny_dac.d | 213 + AVR Code/USB_BULK_TEST/Debug/src/tiny_dac.o | Bin 0 -> 279144 bytes AVR Code/USB_BULK_TEST/Debug/src/tiny_dig.d | 206 + AVR Code/USB_BULK_TEST/Debug/src/tiny_dig.o | Bin 0 -> 274008 bytes AVR Code/USB_BULK_TEST/Debug/src/tiny_dma.d | 217 + AVR Code/USB_BULK_TEST/Debug/src/tiny_dma.o | Bin 0 -> 305916 bytes AVR Code/USB_BULK_TEST/Debug/src/tiny_timer.d | 213 + AVR Code/USB_BULK_TEST/Debug/src/tiny_timer.o | Bin 0 -> 294776 bytes .../Debug/src/tiny_timercounter.d | 2 + AVR Code/USB_BULK_TEST/Debug/src/tiny_uart.d | 213 + AVR Code/USB_BULK_TEST/Debug/src/tiny_uart.o | Bin 0 -> 278944 bytes AVR Code/USB_BULK_TEST/Release/Makefile | 375 + .../USB_BULK_TEST/Release/USB_BULK_TEST.eep | 1 + .../USB_BULK_TEST/Release/USB_BULK_TEST.elf | Bin 0 -> 21953 bytes .../USB_BULK_TEST/Release/USB_BULK_TEST.hex | 608 + .../USB_BULK_TEST/Release/USB_BULK_TEST.lss | 4388 + .../USB_BULK_TEST/Release/USB_BULK_TEST.map | 1104 + .../USB_BULK_TEST/Release/USB_BULK_TEST.srec | 609 + AVR Code/USB_BULK_TEST/Release/makedep.mk | 42 + .../src/ASF/common/boards/user_board/init.d | 203 + .../src/ASF/common/boards/user_board/init.o | Bin 0 -> 839 bytes .../ASF/common/services/clock/xmega/sysclk.d | 124 + .../ASF/common/services/clock/xmega/sysclk.o | Bin 0 -> 2384 bytes .../services/ioport/xmega/ioport_compat.d | 98 + .../services/ioport/xmega/ioport_compat.o | Bin 0 -> 745 bytes .../common/services/sleepmgr/xmega/sleepmgr.d | 104 + .../common/services/sleepmgr/xmega/sleepmgr.o | Bin 0 -> 950 bytes .../atxmega256a3bu_xmega_a3bu_xplained/ui.d | 204 + .../atxmega256a3bu_xmega_a3bu_xplained/ui.o | Bin 0 -> 1255 bytes .../usb/class/vendor/device/udi_vendor.d | 135 + .../usb/class/vendor/device/udi_vendor.o | Bin 0 -> 3216 bytes .../usb/class/vendor/device/udi_vendor_desc.d | 126 + .../usb/class/vendor/device/udi_vendor_desc.o | Bin 0 -> 1596 bytes .../src/ASF/common/services/usb/udc/udc.d | 222 + .../src/ASF/common/services/usb/udc/udc.o | Bin 0 -> 12556 bytes .../Release/src/ASF/xmega/drivers/cpu/ccp.d | 34 + .../Release/src/ASF/xmega/drivers/cpu/ccp.o | Bin 0 -> 1444 bytes .../Release/src/ASF/xmega/drivers/nvm/nvm.d | 96 + .../Release/src/ASF/xmega/drivers/nvm/nvm.o | Bin 0 -> 8056 bytes .../src/ASF/xmega/drivers/nvm/nvm_asm.d | 35 + .../src/ASF/xmega/drivers/nvm/nvm_asm.o | Bin 0 -> 2476 bytes .../src/ASF/xmega/drivers/usb/usb_device.d | 180 + .../src/ASF/xmega/drivers/usb/usb_device.o | Bin 0 -> 15952 bytes AVR Code/USB_BULK_TEST/Release/src/main.d | 226 + AVR Code/USB_BULK_TEST/Release/src/main.o | Bin 0 -> 4840 bytes AVR Code/USB_BULK_TEST/Release/src/tiny_adc.d | 215 + AVR Code/USB_BULK_TEST/Release/src/tiny_adc.o | Bin 0 -> 1736 bytes AVR Code/USB_BULK_TEST/Release/src/tiny_dac.d | 213 + AVR Code/USB_BULK_TEST/Release/src/tiny_dac.o | Bin 0 -> 1056 bytes AVR Code/USB_BULK_TEST/Release/src/tiny_dig.d | 206 + AVR Code/USB_BULK_TEST/Release/src/tiny_dig.o | Bin 0 -> 863 bytes AVR Code/USB_BULK_TEST/Release/src/tiny_dma.d | 217 + AVR Code/USB_BULK_TEST/Release/src/tiny_dma.o | Bin 0 -> 7684 bytes .../USB_BULK_TEST/Release/src/tiny_timer.d | 213 + .../USB_BULK_TEST/Release/src/tiny_timer.o | Bin 0 -> 1520 bytes .../USB_BULK_TEST/Release/src/tiny_uart.d | 213 + .../USB_BULK_TEST/Release/src/tiny_uart.o | Bin 0 -> 1036 bytes AVR Code/USB_BULK_TEST/USB_BULK_TEST.cproj | 569 + .../src/ASF/common/boards/board.h | 398 + .../src/ASF/common/boards/user_board/init.c | 21 + .../ASF/common/boards/user_board/user_board.h | 40 + .../components/display/st7565r/st7565r.c | 125 + .../components/display/st7565r/st7565r.h | 463 + .../src/ASF/common/services/clock/genclk.h | 191 + .../src/ASF/common/services/clock/osc.h | 177 + .../src/ASF/common/services/clock/pll.h | 333 + .../src/ASF/common/services/clock/sysclk.h | 186 + .../src/ASF/common/services/clock/xmega/osc.h | 507 + .../src/ASF/common/services/clock/xmega/pll.h | 274 + .../ASF/common/services/clock/xmega/sysclk.c | 260 + .../ASF/common/services/clock/xmega/sysclk.h | 1534 + .../src/ASF/common/services/delay/delay.h | 139 + .../services/delay/xmega/cycle_counter.h | 116 + .../gfx_mono/docsrc/gfx_mono_overview.png | Bin 0 -> 128186 bytes .../ASF/common/services/gfx_mono/gfx_mono.h | 306 + .../services/gfx_mono/gfx_mono_c12832_a1z.c | 369 + .../services/gfx_mono/gfx_mono_c12832_a1z.h | 158 + .../services/gfx_mono/gfx_mono_framebuffer.c | 265 + .../services/gfx_mono/gfx_mono_framebuffer.h | 87 + .../services/gfx_mono/gfx_mono_generic.c | 506 + .../services/gfx_mono/gfx_mono_generic.h | 123 + .../common/services/gfx_mono/gfx_mono_menu.c | 188 + .../common/services/gfx_mono/gfx_mono_menu.h | 127 + .../services/gfx_mono/gfx_mono_spinctrl.c | 697 + .../services/gfx_mono/gfx_mono_spinctrl.h | 243 + .../common/services/gfx_mono/gfx_mono_text.c | 428 + .../common/services/gfx_mono/gfx_mono_text.h | 131 + .../ASF/common/services/gfx_mono/sysfont.c | 75 + .../ASF/common/services/gfx_mono/sysfont.h | 70 + .../common/services/gfx_mono/tools/bitmap.py | 58 + .../tools/dump_display_over_serial.py | 133 + .../common/services/gfx_mono/tools/readme.txt | 6 + .../src/ASF/common/services/gpio/gpio.h | 86 + .../services/gpio/xmega_gpio/xmega_gpio.h | 83 + .../src/ASF/common/services/ioport/ioport.h | 541 + .../ASF/common/services/ioport/xmega/ioport.h | 364 + .../services/ioport/xmega/ioport_compat.c | 73 + .../services/ioport/xmega/ioport_compat.h | 321 + .../ASF/common/services/sleepmgr/sleepmgr.h | 271 + .../common/services/sleepmgr/xmega/sleepmgr.c | 61 + .../common/services/sleepmgr/xmega/sleepmgr.h | 117 + .../src/ASF/common/services/spi/spi_master.h | 273 + .../src/ASF/common/services/spi/usart_spi.h | 104 + .../services/spi/xmega_spi/spi_master.c | 195 + .../services/spi/xmega_spi/spi_master.h | 450 + .../services/spi/xmega_usart_spi/usart_spi.c | 140 + .../services/spi/xmega_usart_spi/usart_spi.h | 279 + .../atxmega256a3bu_xmega_a3bu_xplained/ui.c | 84 + .../usb/class/vendor/device/udi_vendor.c | 296 + .../usb/class/vendor/device/udi_vendor.h | 622 + .../usb/class/vendor/device/udi_vendor_conf.h | 123 + .../usb/class/vendor/device/udi_vendor_desc.c | 190 + .../usb/class/vendor/usb_protocol_vendor.h | 69 + .../src/ASF/common/services/usb/udc/udc.c | 1301 + .../src/ASF/common/services/usb/udc/udc.h | 697 + .../ASF/common/services/usb/udc/udc_desc.h | 135 + .../src/ASF/common/services/usb/udc/udd.h | 396 + .../src/ASF/common/services/usb/udc/udi.h | 133 + .../src/ASF/common/services/usb/usb_atmel.h | 190 + .../ASF/common/services/usb/usb_protocol.h | 505 + .../src/ASF/common/utils/interrupt.h | 142 + .../common/utils/interrupt/interrupt_avr8.h | 148 + .../src/ASF/common/utils/make/Makefile.avr.in | 483 + .../src/ASF/common/utils/parts.h | 1292 + .../xmega/boards/xmega_a3bu_xplained/init.c | 163 + .../xmega/boards/xmega_a3bu_xplained/led.h | 83 + .../xmega_a3bu_xplained/xmega_a3bu_xplained.h | 417 + .../src/ASF/xmega/drivers/cpu/ccp.h | 123 + .../src/ASF/xmega/drivers/cpu/ccp.s | 100 + .../ASF/xmega/drivers/cpu/xmega_reset_cause.h | 108 + .../src/ASF/xmega/drivers/nvm/nvm.c | 710 + .../src/ASF/xmega/drivers/nvm/nvm.h | 1078 + .../src/ASF/xmega/drivers/nvm/nvm_asm.s | 197 + .../src/ASF/xmega/drivers/pmic/pmic.h | 352 + .../src/ASF/xmega/drivers/sleep/sleep.h | 169 + .../src/ASF/xmega/drivers/spi/spi.c | 119 + .../src/ASF/xmega/drivers/spi/spi.h | 166 + .../src/ASF/xmega/drivers/usart/usart.c | 467 + .../src/ASF/xmega/drivers/usart/usart.h | 558 + .../src/ASF/xmega/drivers/usb/usb_device.c | 1460 + .../src/ASF/xmega/drivers/usb/usb_device.h | 390 + .../src/ASF/xmega/utils/assembler.h | 159 + .../src/ASF/xmega/utils/assembler/gas.h | 124 + .../ASF/xmega/utils/bit_handling/clz_ctz.h | 215 + .../src/ASF/xmega/utils/compiler.h | 1189 + .../ASF/xmega/utils/preprocessor/mrepeat.h | 338 + .../xmega/utils/preprocessor/preprocessor.h | 54 + .../ASF/xmega/utils/preprocessor/stringz.h | 84 + .../src/ASF/xmega/utils/preprocessor/tpaste.h | 104 + .../src/ASF/xmega/utils/progmem.h | 102 + .../src/ASF/xmega/utils/status_codes.h | 121 + AVR Code/USB_BULK_TEST/src/asf.h | 101 + .../USB_BULK_TEST/src/config/conf_board.h | 14 + .../USB_BULK_TEST/src/config/conf_clock.h | 80 + AVR Code/USB_BULK_TEST/src/config/conf_menu.h | 72 + .../USB_BULK_TEST/src/config/conf_sleepmgr.h | 51 + .../src/config/conf_spi_master.h | 52 + .../USB_BULK_TEST/src/config/conf_spinctrl.h | 75 + .../USB_BULK_TEST/src/config/conf_st7565r.h | 101 + .../USB_BULK_TEST/src/config/conf_sysfont.h | 1170 + .../USB_BULK_TEST/src/config/conf_usart_spi.h | 50 + AVR Code/USB_BULK_TEST/src/config/conf_usb.h | 160 + AVR Code/USB_BULK_TEST/src/globals.h | 49 + AVR Code/USB_BULK_TEST/src/main.c | 143 + AVR Code/USB_BULK_TEST/src/main.h | 91 + AVR Code/USB_BULK_TEST/src/tiny_adc.c | 81 + AVR Code/USB_BULK_TEST/src/tiny_adc.h | 23 + AVR Code/USB_BULK_TEST/src/tiny_dac.c | 38 + AVR Code/USB_BULK_TEST/src/tiny_dac.h | 18 + AVR Code/USB_BULK_TEST/src/tiny_dig.c | 16 + AVR Code/USB_BULK_TEST/src/tiny_dig.h | 18 + AVR Code/USB_BULK_TEST/src/tiny_dma.c | 658 + AVR Code/USB_BULK_TEST/src/tiny_dma.h | 46 + AVR Code/USB_BULK_TEST/src/tiny_timer.c | 79 + AVR Code/USB_BULK_TEST/src/tiny_timer.h | 19 + AVR Code/USB_BULK_TEST/src/tiny_uart.c | 44 + AVR Code/USB_BULK_TEST/src/tiny_uart.h | 19 + AVR Code/USB_BULK_TEST/src/ui.h | 73 + Desktop Interface/Labrador_libusbK.pro | 63 + Desktop Interface/Labrador_libusbK.pro.user | 316 + Desktop Interface/buffer_0.bmp | Bin 0 -> 10422 bytes Desktop Interface/buffer_1.bmp | Bin 0 -> 10422 bytes Desktop Interface/buffer_2.bmp | Bin 0 -> 10422 bytes Desktop Interface/buffercontrol.cpp | 240 + Desktop Interface/buffercontrol.h | 57 + Desktop Interface/cursorenabler.cpp | 22 + Desktop Interface/cursorenabler.h | 26 + Desktop Interface/desktop_settings.cpp | 18 + Desktop Interface/desktop_settings.h | 23 + Desktop Interface/deviceconnecteddisplay.cpp | 18 + Desktop Interface/deviceconnecteddisplay.h | 20 + Desktop Interface/espocombobox.cpp | 27 + Desktop Interface/espocombobox.h | 19 + Desktop Interface/esposlider.cpp | 100 + Desktop Interface/esposlider.h | 35 + Desktop Interface/espospinbox.cpp | 47 + Desktop Interface/espospinbox.h | 25 + Desktop Interface/functiongencontrol.cpp | 143 + Desktop Interface/functiongencontrol.h | 35 + Desktop Interface/isobuffer.cpp | 254 + Desktop Interface/isobuffer.h | 44 + Desktop Interface/isodriver.cpp | 988 + Desktop Interface/isodriver.h | 144 + .../libusbk/bin/dll/amd64/libusbK.dll | Bin 0 -> 99128 bytes .../libusbk/bin/dll/ia64/libusbK.dll | Bin 0 -> 247096 bytes .../libusbk/bin/dll/x86/libusbK.dll | Bin 0 -> 84280 bytes .../libusbk/bin/lib/amd64/libusbK.lib | Bin 0 -> 23804 bytes .../libusbk/bin/lib/ia64/libusbK.lib | Bin 0 -> 28414 bytes .../libusbk/bin/lib/static/amd64/libusbK.lib | Bin 0 -> 1427362 bytes .../libusbk/bin/lib/static/ia64/libusbK.lib | Bin 0 -> 1437590 bytes .../libusbk/bin/lib/static/x86/libusbK.lib | Bin 0 -> 1079964 bytes .../libusbk/bin/lib/x86/libusbK.lib | Bin 0 -> 25672 bytes Desktop Interface/libusbk/includes/libusbk.h | 4000 + .../libusbk/includes/lusbk_dynapi.c | 1915 + .../libusbk/includes/lusbk_shared.h | 309 + Desktop Interface/main.cpp | 11 + Desktop Interface/mainwindow.cpp | 891 + Desktop Interface/mainwindow.h | 131 + Desktop Interface/mainwindow.ui | 3907 + Desktop Interface/noclosemenu.cpp | 22 + Desktop Interface/noclosemenu.h | 19 + Desktop Interface/qcustomplot.cpp | 23553 + Desktop Interface/qcustomplot.h | 3768 + Desktop Interface/resources.qrc | 7 + Desktop Interface/siPrint.cpp | 65 + Desktop Interface/siprint.h | 19 + Desktop Interface/timedtickbox.cpp | 24 + Desktop Interface/timedtickbox.h | 25 + Desktop Interface/usbdriver.h | 18 + Desktop Interface/waveforms/Sawtooth.tlw | 3 + Desktop Interface/waveforms/Sin.tlw | 3 + Desktop Interface/waveforms/Square.tlw | 3 + Desktop Interface/waveforms/Triangle.tlw | 3 + Desktop Interface/waveforms/_list.wfl | 4 + Desktop Interface/waveforms_OLD/Sawtooth.tlw | 3 + Desktop Interface/waveforms_OLD/Sin.tlw | 3 + Desktop Interface/waveforms_OLD/Square.tlw | 3 + Desktop Interface/waveforms_OLD/Triangle.tlw | 3 + Desktop Interface/waveforms_OLD/_list.wfl | 4 + Desktop Interface/winusbdriver.cpp | 512 + Desktop Interface/winusbdriver.h | 78 + Desktop Interface/xmega.h | 28 + Old Matlab Interface/.svn/entries | 1 + Old Matlab Interface/.svn/format | 1 + ...e688114eca60ab3ed8f47af0cbec6bcbe.svn-base | Bin 0 -> 334 bytes ...e444b6e657ced7f4e357f4b61e626deb6.svn-base | 69 + ...8e6695fe91c27b1bdd0ca6444d7e30afa.svn-base | 12 + ...436daea3b23ae2bc025a1fc7e30abbde2.svn-base | 62 + ...25a7b428bd340570efb1a7ffc4095bb68.svn-base | 12 + ...7fbe69172abc51b394d95cb2a5d9db039.svn-base | 68 + ...bc2f1e75f2606006c2c2263929603df87.svn-base | Bin 0 -> 7680 bytes ...2cb300543c1acac3d136e5fad0b012b98.svn-base | Bin 0 -> 9216 bytes ...6867d71236732281e564c26aa234d0492.svn-base | 3 + ...df477a62efb9c0ab6835396973e703d44.svn-base | 87 + ...38390ff5b9e448f4e133ecec897d3a6ed.svn-base | 17 + ...af2b00438c78205c594f66918aaed46be.svn-base | 69 + ...7dacc40a9055f623a3fc40734d684599c.svn-base | Bin 0 -> 9653 bytes ...6a50a8b215a4230940af3da4df02e76e5.svn-base | 198 + ...20176d71310c25719e16eab65ad651680.svn-base | 17 + ...721eb6952fb9d053197d6bf9b002875fd.svn-base | Bin 0 -> 8192 bytes ...7cb26c94273fd8b33b99a2faba6d5722d.svn-base | 66 + ...c039ff9bb68c4a763e940a3fd1ff33679.svn-base | 11 + ...f63173d022f4d6a0ed452a3c74574d9ca.svn-base | 11 + ...0b9aa35cf3c7da49845992102338d0d01.svn-base | Bin 0 -> 322 bytes ...22d62f48741be7b2ca0100de171ded2a6.svn-base | 12 + ...f806ec250fcccd22d8e49fcf18ef6c240.svn-base | Bin 0 -> 25672 bytes ...ba70db42d9fcbfb226f8c185367a019c7.svn-base | 7 + ...1c37be3e4bfa431d9db08559ad4629bf0.svn-base | 49 + ...f20be0023538e6f0c41009aa5f53fd630.svn-base | 160 + ...84f9aaded710f7d05ce5c5d9eafe673d7.svn-base | 3513 + ...d33b62f38495f26e323231de6640f0b3b.svn-base | 25 + ...b7cd5d326b0581de8e57be48ed902a1bf.svn-base | 10 + ...ca057b00006ed90c0ffca5a5971e2adcd.svn-base | 129 + ...eb037bb37f68f7f6d3f68d1137f1fe193.svn-base | 375000 +++++++++++++++ ...21909a8810c7ea800fbf3a98550ceb291.svn-base | 1043 + ...f1af60694c0294df1651788c6e0a3f67d.svn-base | 5 + ...95f80894725f18d2c905e64aa16464d35.svn-base | 97 + ...00a15dd9a71984f677ace3f759b3d176c.svn-base | 52 + ...f32cacda1c505e6fc27fbc7ba69f5aa71.svn-base | 56 + ...60562d879bb9bc425ae0f4d356f78aaf9.svn-base | 40 + ...d51e648387350a4716cb2c2182b540d87.svn-base | 622 + ...876399b9cac7f5c4ed4285c05b25cd206.svn-base | 123 + ...c6e69ca22f81ebf30fba87a8a76bf64b6.svn-base | 130 + ...ba0c928f44218c33b357ee225b210861d.svn-base | 11252 + ...02b7f1cdf9fa687082d023d2095c94195.svn-base | 62 + ...631bf8c322ab56509a78f197f01786957.svn-base | 1 + ...a5ed6b3d0dedf490a9063cb7ab9430790.svn-base | 126 + ...6cb2ab8663296ce2e48e64fb66bb09f3a.svn-base | Bin 0 -> 7168 bytes ...9c725c4146ae2eee3933f4a85f9c2f115.svn-base | Bin 0 -> 14596 bytes ...794648a08cb9406c83d158220c347bb09.svn-base | Bin 0 -> 7680 bytes ...33894c1318342a60513444fea9f79f626.svn-base | 5 + ...ebf9920e390f38d721bd4effaecc3265c.svn-base | 5 + ...c2d02f41769b36f97cc570d5770a32ccc.svn-base | 11 + ...96faed59f9ea33ee9452d0e153ae9d3d5.svn-base | 14 + ...f1d754958f357d474d049774db8f3b9e5.svn-base | Bin 0 -> 28414 bytes ...6346a8cafb643956eb1e4e90c54adeff0.svn-base | 105 + ...f8e0f3fab49d501dac0f56cb63904bbcd.svn-base | 540 + ...0410dd117d147aa7c9feb072a8f3d1c80.svn-base | 29 + ...91d61f24c210253e31673d3f211b79fe6.svn-base | Bin 0 -> 8192 bytes ...ae0acbcf5943de3d37764a402bd7ab863.svn-base | 8 + ...34c140d54d42b87e62b2bd7f4d1725dcb.svn-base | 62 + ...eccf2b62e28cc9c5e8625165149f06afc.svn-base | 83 + ...17d02872cdb3cf169cda0dafbc514c065.svn-base | 91 + ...d02051c93fe0a923037104d7466493cc4.svn-base | 109 + ...01c74e36b3e78d64c045fe1e8c73479ed.svn-base | Bin 0 -> 7680 bytes ...8ecc8e952c5935170090db7c269ce4b4f.svn-base | 117 + ...a9402bb0414597607011113f2852d4dc2.svn-base | Bin 0 -> 247096 bytes ...643aedd8782c700ef93c1dd03fe8d4d6b.svn-base | 11 + ...617fd58cd7638129886ba749e38d74fd0.svn-base | 97 + ...40092ae6c3b97164efd0529b27e935af1.svn-base | 96 + ...7bd8558f7621bbd33ab04891cb2b8811a.svn-base | 31 + ...f885e9ec1c33e31cde43d2a282dbd5a39.svn-base | 24 + ...b6b3d0436eae86a247d4b0dc543e49390.svn-base | Bin 0 -> 2552 bytes ...ab65e01badee44f72848f6375c4712600.svn-base | 30 + ...dfedabdb5a9d3c7981b098e71dca49f0f.svn-base | 30 + ...7f9eb3d89e58a3a4b26364d7e1062255e.svn-base | 71 + ...9f1e12918006f36e0cfd826fc23983e57.svn-base | 148 + ...e648f1942abb804c8fbb9342ecf345a4e.svn-base | Bin 0 -> 7168 bytes ...93c725583f6365f711ff3ba6f6d022b13.svn-base | 118 + ...9ab8afaf758cd327491fedb96f3865d3e.svn-base | 624 + ...e5368816eaa425ac9a876e265bdeb0f1b.svn-base | 66 + ...e66ffcc5dfd813530ab6992e6daaae417.svn-base | 7 + ...07a334d81a70b361ad73b5e8a5e447688.svn-base | 12 + ...98522ce9584f2216a606b11301e8e357a.svn-base | 3 + ...ea5e6b15424f9d7af77a70beb8bcdf153.svn-base | 27 + ...c06d982dcf6562f7b33f057c2000f7a35.svn-base | 96 + ...2f464095a0d6f139f3b99925ffb4003f2.svn-base | 17 + ...1a816b8698bcfe18181d4964d1dc45605.svn-base | Bin 0 -> 7680 bytes ...74eb825895d78773d5fb7e693456cbfaa.svn-base | 125 + ...c477007e9b1bc0d43b4a14c3bc1a3aad5.svn-base | Bin 0 -> 23804 bytes ...c6357cededb5ebe4e63254276d07daea9.svn-base | 1915 + ...984147f1b32fe68dbaa766f3b2000c508.svn-base | Bin 0 -> 1662 bytes ...6b24c37fa7330dcd3d4d2ccb53905f22d.svn-base | 48 + ...e96a933397f034cbb46862b36c3159642.svn-base | Bin 0 -> 7168 bytes ...b3cbe75c885f6d1dd673ae5fab0179fd4.svn-base | 8 + ...0934daa388a7f4bd6b7d3a5e821ab7b79.svn-base | 2 + ...e02fc4a01b9a562c5c015699be31a2269.svn-base | 46 + ...59ad433000d17dce5491f498151cf36a1.svn-base | 35 + ...ff8c546e24e0c1bd4db17cf7b85af8cf2.svn-base | 22 + ...fd8b045e2ac5e42386036bd8a784d7a83.svn-base | 16 + ...9ab65e93b7e2925112c3d7c30b0fadfb3.svn-base | 62 + ...6c26a806eb6fa35fe1be696d8e18b5a55.svn-base | 44 + ...5527df5be676d213528b5ced7955ce2ac.svn-base | Bin 0 -> 31232 bytes ...47806941a97858ca492d13c388b1e12b9.svn-base | 27 + ...4e525727674ae7f5c8c1809f297404050.svn-base | 50 + ...f71ee9ee97d78aa0ce502fbf9ffd1591c.svn-base | Bin 0 -> 9728 bytes ...92aed7f13d9a17497c169cbbc3912b5c1.svn-base | 21 + ...5fb6d2b6bf6bacf3ed8168a4020ffdd34.svn-base | 7 + ...39d77246e52a863a09a61cb13dd66d475.svn-base | 17 + ...bddd831f110af1c74760c826cebb32320.svn-base | 54 + ...a1f62eb33ba16625a6129c21f32c80689.svn-base | 69 + ...d0c1c900867bb3e38b74b8aaf39b05517.svn-base | 99 + ...23878c96ac9ca0a3c0171051d4449cbd5.svn-base | 5 + ...072c56c428c182689f088a4190f73110d.svn-base | 49 + ...3d8d3b7b0509c2b191a294c488a14da87.svn-base | 14 + ...01caf2064c8cfbba9838e98683da95ed3.svn-base | 7 + ...9f0ff6239dde91a79ecea47656acdda7f.svn-base | 19 + ...c3525c8953dc38d3952360b1c6a6fc91f.svn-base | Bin 0 -> 1079964 bytes ...35ed50d8ee116d5081d309a2139cb1f55.svn-base | 37 + ...a31578b2614976a87b55da6b1305c5407.svn-base | 88 + ...52c170d1d1ca460b388ad1b0ab28e6156.svn-base | Bin 0 -> 13684 bytes ...a6a8b5a9b56a42297d8581b70c81bd4e1.svn-base | 12 + ...ea79bdfed87f7af58afb69e3246c362f3.svn-base | 2 + ...d05e3b1d6e19cffdb2a684e984f2f5991.svn-base | 258 + ...caf116493419ad088b481af6a4fc10114.svn-base | Bin 0 -> 9728 bytes ...e0db0983091d41e2f856bf5bf0af3b2f5.svn-base | Bin 0 -> 12040 bytes ...183f36253bc8c454c70e9b8fbefb922ff.svn-base | 28 + ...7054803e545ad8a4f6e6868f608f55f6d.svn-base | 7 + ...237775ea922c9d891e7cc8f1cd019d308.svn-base | 84 + ...7cc0c78f6e1899a1f7eba73bcec65b371.svn-base | Bin 0 -> 7168 bytes ...0208e96952918834c70333658f876cde9.svn-base | 1035 + ...a1888db8f59f1d8f3030ba8b7f50bf3d2.svn-base | Bin 0 -> 8192 bytes ...8c0f551232d080babe816c7e8228aaf53.svn-base | 6 + ...fbeda1076bba948201f50294a85cc61e6.svn-base | 1630 + ...423ee055b8fb4316d524a91bc22870f17.svn-base | 210 + ...32d482cfe17903fdcc469511a417950b0.svn-base | 52 + ...ee2d7f7bedff6fa2bfbe2c6df5b15e349.svn-base | 88 + ...fdb85289e34d2176bcaa511a0bfdb9e3c.svn-base | 20 + ...3e71f5ee633a65b39defaff34912f8456.svn-base | 77 + ...83a4fa1edf6213bca2caa61ec4026cece.svn-base | Bin 0 -> 9216 bytes ...7e7e60a616b3035af99b9ea43979ccf43.svn-base | 187 + ...393e5c9788f977eaf9de0b0d8d9c66ff5.svn-base | Bin 0 -> 8704 bytes ...cec1c59bde87572af9b5c3486e515080a.svn-base | 9 + ...f1bd40c0642728d94c5415ee8a96e5eaa.svn-base | Bin 0 -> 9728 bytes ...335933964727b486c8f69eb99abc78601.svn-base | 11 + ...4b085ad5a93e71bdfbdb675e99e173ecd.svn-base | 309 + ...e485d3552853c661f4cd30ca35a42f08d.svn-base | 4 + ...b93dc0b1921febca0183228564d9eee72.svn-base | 3836 + ...d80434868fb8810b5a3027e0bf5223c40.svn-base | 116 + ...03cbbd024e69f4caec56f8ce9481448f8.svn-base | 10 + ...f3fb8dd91b746e26103b6a5d218317d28.svn-base | 973 + ...703a4d43e494d8342c568fa83052c2a00.svn-base | 142 + ...4c73e98cf9ee73581f26e8ede95d0b5aa.svn-base | 44 + ...b99298141b3f1958ed5af6b2bcec74b77.svn-base | 46 + ...8baf3577ae9168fd267cc8fc08dce9203.svn-base | 3 + ...3697485fc6e7d0811d57341e2477b6f32.svn-base | 69 + ...36f3df7432704d2bf7e1dbe0d0273513e.svn-base | 19 + ...f1a429fc72cfff9a3b4419a4c5886270d.svn-base | 116 + ...5b8edf496c954c87abf9e73f992c0b26d.svn-base | 11250 + ...78c0ca46b2e63aa5ed1a2491f4225ecca.svn-base | 6 + ...a2af354496638140bb68de7d473dd215c.svn-base | 26 + ...1de353254abead31a09f14e0d87a0633f.svn-base | 18 + ...53b27c190f63541df132b4b29f54b9dd9.svn-base | 5 + ...9b44a37e42b34c1561828dd031f37f95a.svn-base | 8 + ...c5ccfc0f4c6ed2ba1fb5cde835ebf53b7.svn-base | 11 + ...8552b3fc8b2a52f6d5c6f5634ba03bcda.svn-base | 136 + ...b191bca8e58fbab3b4e69302308bdd0c3.svn-base | Bin 0 -> 7168 bytes ...7cc2d121a4c984a45dd615e2cc84be5a7.svn-base | 92 + ...a3151a5652537a0cdf85eb2544c2ac2fc.svn-base | Bin 0 -> 7680 bytes ...aa6cded21d2f4c182db3240c8c80f5acd.svn-base | 106 + ...ea160a4acb105a087c4c99a8133cc6ad2.svn-base | Bin 0 -> 9216 bytes ...d2ae53bd4e2a501d2b9e8a465681d039d.svn-base | 69 + ...3bb5e40c85ade2f8bd88314f327f40ec7.svn-base | 6 + ...46a4701590fffc385c7cc9f0f693389fc.svn-base | Bin 0 -> 9728 bytes ...48e4202497c0f72bd16bb87da5ef6f2d1.svn-base | 118 + ...357bb5082e5834e41bfc9d842f114f45b.svn-base | 106 + ...dfa127afcb252a0507c939b2e6d710f4a.svn-base | Bin 0 -> 9728 bytes ...300644013dd8cb6702d7131635f651fd2.svn-base | Bin 0 -> 1427362 bytes ...2121da7330cfaba960c9517632a0ff944.svn-base | 36 + ...14a5bc9b48fad9121b319978f5f34bed8.svn-base | Bin 0 -> 5059 bytes ...7537ccaf079a2064ef3b96519b25f6c85.svn-base | 87 + ...e5e6b4b0d3255bfef95601890afd80709.svn-base | 0 ...0c208578c2c480996b8f954aa1ab590a1.svn-base | 63 + ...d3ea5e048b3e869ea5f3010741accba03.svn-base | Bin 0 -> 9216 bytes ...367858a68e8535d6469dd458b6ba901bd.svn-base | 12 + ...ba87713ec4a22e4bc45c69cb28591c907.svn-base | 13 + ...9e7c16214e15471c54bfb5e6f6a438efd.svn-base | 323 + ...d95849ef82e410e841ad7472895a45c08.svn-base | 69 + ...59ba67ec117dffff180ca1669936f867a.svn-base | Bin 0 -> 8192 bytes ...27c87f1048f63bf5425146ada309e0042.svn-base | 39 + ...62eadfc9c19e1481956d39d3f78bcb631.svn-base | Bin 0 -> 504 bytes ...aaeb4abbbaa963b83ef9b8fc9ff93c944.svn-base | 146 + ...650fefc87ee8e537155c125d24f11c484.svn-base | 10 + ...14ab2a63318d6d6b1fcdde440f5f47cf9.svn-base | 16 + ...3b71c1792e8a9fe2b5896f8a263b73e57.svn-base | 35 + ...f05438060fe1bcbf50fec15e3e5f96514.svn-base | Bin 0 -> 7680 bytes ...bc860418881fc8e3efaef12369b1c858c.svn-base | 14 + ...9f6f8cab74dcb0452c5173d2a1944ce01.svn-base | 12 + ...730f0f3d815f3b0ae22207cb7d9615695.svn-base | 69 + ...940aae62be90eccd5e6da149da079ba7c.svn-base | 65 + ...c3b4b3682712980af8b94ae14cb294d33.svn-base | 44 + ...552567c912a993da851d7016c8481685b.svn-base | 71 + ...70d184c7e3efd7864797fd7b745b6bafc.svn-base | 4000 + ...ffef766d0efe968a17adaac35c87924ff.svn-base | 29 + ...d81d807f7a4be8e690e725d8dd82fdb65.svn-base | 21 + ...4b06f5285a19173c9c4f834ea90ec5363.svn-base | 3 + ...7e49aa4c0b0d16561bfd892e6033fd46d.svn-base | 140 + ...8657521632dd5fb0a70026a6ce407e60d.svn-base | 99 + ...5bb5629016249592d02bc3d60a4b72e50.svn-base | 22 + ...86747a7bb88daf54ea7b7aa914607f5dd.svn-base | 3290 + ...d5cff055dd900dc56988ee4a55c7431e2.svn-base | Bin 0 -> 11809 bytes ...348185cbfa01f7a96be6c925909d79515.svn-base | 52 + ...7c83d2ffcf07fb071e5c135e223413720.svn-base | 67 + ...f8b78f89886bccf09b4b52038dfe1b0db.svn-base | 211 + ...665bc7738d913c722a7dd3991befe68a2.svn-base | 21 + ...bd77fc899b6f8fe81d7957e17659037cd.svn-base | 66 + ...41ac82d22567b5c3d5b494576df54f37d.svn-base | Bin 0 -> 99128 bytes ...a8eb501738d9e4ec41eb60316a3896b12.svn-base | 69 + ...a14cfc57fcfdc9ae090915910e58b90e4.svn-base | 41 + ...407241aa3266ea0297d0973b4109368c7.svn-base | 118 + ...5ab97abde1c3353748e9f3d129bd92023.svn-base | 13 + ...45b0c7bdac7ac35f42b65f5fdfd622464.svn-base | Bin 0 -> 84280 bytes ...0c36a209bcb1a8a7efc73b7bc27c5dec6.svn-base | 13 + ...96c660796ba167efb57158c7afe7d751e.svn-base | Bin 0 -> 1437590 bytes ...fe8e06ff11d5eaaafdea8c28f8c7577ed.svn-base | Bin 0 -> 7168 bytes Old Matlab Interface/.svn/wc.db | Bin 0 -> 159744 bytes Old Matlab Interface/GUIDE/figstate.m | 12 + Old Matlab Interface/GUIDE/figstate.p | Bin 0 -> 334 bytes Old Matlab Interface/GUIDE/figstate_7a.p | Bin 0 -> 1662 bytes Old Matlab Interface/GUIDE/launchgui.m | 0 Old Matlab Interface/GUIDE/maxfig.m | 12 + Old Matlab Interface/GUIDE/maxfig.p | Bin 0 -> 504 bytes Old Matlab Interface/GUIDE/maxfig_7a.p | Bin 0 -> 2552 bytes Old Matlab Interface/GUIDE/minfig.m | 12 + Old Matlab Interface/GUIDE/minfig.p | Bin 0 -> 322 bytes Old Matlab Interface/GUIDE/untitled.fig | Bin 0 -> 5059 bytes Old Matlab Interface/GUIDE/untitled.m | 211 + Old Matlab Interface/HelloWorld.exe | Bin 0 -> 31232 bytes Old Matlab Interface/ISOLOOPTEST.m | 3 + Old Matlab Interface/MYFIRSTWAVEFORM.txt | 11252 + .../MYFIRSTWAVEFORM_CLEANED.txt | 11250 + Old Matlab Interface/USB_CTRL_SEND.c | 79 + Old Matlab Interface/USB_CTRL_SEND.mexw64 | Bin 0 -> 8192 bytes Old Matlab Interface/USB_INIT.c | 96 + Old Matlab Interface/USB_INIT.mexw64 | Bin 0 -> 9728 bytes Old Matlab Interface/USB_ISO_INIT.c | 68 + Old Matlab Interface/USB_ISO_INIT.mexw64 | Bin 0 -> 8704 bytes Old Matlab Interface/USB_ISO_LOOP.c | 67 + Old Matlab Interface/USB_ISO_LOOP.mexw64 | Bin 0 -> 7680 bytes Old Matlab Interface/USB_POOL_FREE.c | 46 + Old Matlab Interface/USB_POOL_FREE.mexw64 | Bin 0 -> 7168 bytes Old Matlab Interface/amp2bin.m | 16 + Old Matlab Interface/autogain.m | 16 + Old Matlab Interface/avrbreak.m | 1 + Old Matlab Interface/avrbreakcl.m | 2 + Old Matlab Interface/axes1_ButtonDownFcn.m | 68 + .../bin/dll/amd64/libusbK.dll | Bin 0 -> 99128 bytes Old Matlab Interface/bin/dll/ia64/libusbK.dll | Bin 0 -> 247096 bytes Old Matlab Interface/bin/dll/x86/libusbK.dll | Bin 0 -> 84280 bytes .../bin/lib/amd64/libusbK.lib | Bin 0 -> 23804 bytes Old Matlab Interface/bin/lib/ia64/libusbK.lib | Bin 0 -> 28414 bytes .../bin/lib/static/amd64/libusbK.lib | Bin 0 -> 1427362 bytes .../bin/lib/static/ia64/libusbK.lib | Bin 0 -> 1437590 bytes .../bin/lib/static/x86/libusbK.lib | Bin 0 -> 1079964 bytes Old Matlab Interface/bin/lib/x86/libusbK.lib | Bin 0 -> 25672 bytes .../examples_csharp/BenchmarkTestDevice.cs | 87 + .../Handle.Test/Handle.Test.csproj | 84 + .../examples_csharp/Handle.Test/Program.cs | 49 + .../Handle.Test/Properties/AssemblyInfo.cs | 69 + .../Properties/Resources.Designer.cs | 71 + .../Handle.Test/Properties/Resources.resx | 117 + .../Properties/Settings.Designer.cs | 30 + .../Handle.Test/Properties/Settings.settings | 7 + .../Handle.Test/TextBoxTraceListener.cs | 160 + .../Handle.Test/fHandleTest.Designer.cs | 198 + .../Handle.Test/fHandleTest.cs | 130 + .../Handle.Test/fHandleTest.resx | 123 + .../bindings/examples_csharp/HiPerfTimer.cs | 126 + .../Hot.Plug.Detect.GUI/Form1.Designer.cs | 118 + .../Hot.Plug.Detect.GUI/Form1.cs | 116 + .../Hot.Plug.Detect.GUI/Form1.resx | 129 + .../Hot.Plug.Detect.GUI.csproj | 83 + .../Hot.Plug.Detect.GUI/Program.cs | 48 + .../Properties/AssemblyInfo.cs | 36 + .../Properties/Resources.Designer.cs | 71 + .../Properties/Resources.resx | 117 + .../Properties/Settings.Designer.cs | 30 + .../Properties/Settings.settings | 7 + .../Hot.Plug.Detect/Hot.Plug.Detect.csproj | 52 + .../Hot.Plug.Detect/Program.cs | 118 + .../Properties/AssemblyInfo.cs | 69 + .../List.Devices/List.Devices.csproj | 52 + .../examples_csharp/List.Devices/Program.cs | 63 + .../List.Devices/Properties/AssemblyInfo.cs | 69 + .../Read.Isochronous/Program.cs | 323 + .../Properties/AssemblyInfo.cs | 69 + .../Read.Isochronous/Read.Isochronous.csproj | 66 + .../Read.Isochronous/app.config | 3 + .../examples_csharp/TestParameters.cs | 540 + .../examples_csharp/Xfer.Async/Program.cs | 210 + .../Xfer.Async/Properties/AssemblyInfo.cs | 69 + .../Xfer.Async/Xfer.Async.csproj | 62 + .../examples_csharp/Xfer.Sync/Program.cs | 109 + .../Xfer.Sync/Properties/AssemblyInfo.cs | 69 + .../Xfer.Sync/Xfer.Sync.csproj | 62 + .../Xfer.Threaded.Stream/Program.cs | 140 + .../Properties/AssemblyInfo.cs | 69 + .../Xfer.Threaded.Stream/Xfer.Stm.csproj | 62 + .../examples_csharp/Xfer.UsbStream/Program.cs | 187 + .../Xfer.UsbStream/Properties/AssemblyInfo.cs | 69 + .../Xfer.UsbStream/UsbStream.cs | 258 + .../Xfer.UsbStream/Xfer.UsbStream.csproj | 106 + .../examples_csharp/libusbK_Examples.sln | 62 + .../bindings/examples_delphi/enumerate.dpr | 99 + .../bindings/examples_delphi/opendevice.dpr | 136 + Old Matlab Interface/bindings/libusbK.boo | 3290 + Old Matlab Interface/bindings/libusbK.cs | 3836 + Old Matlab Interface/bindings/libusbK.pas | 1630 + Old Matlab Interface/bindings/libusbK.vb | 3513 + Old Matlab Interface/cmeasuretest.m | 66 + Old Matlab Interface/compile.m | 6 + Old Matlab Interface/conv_ana.m | 37 + Old Matlab Interface/conv_ana_notrig.m | 28 + Old Matlab Interface/conv_dig.m | 35 + Old Matlab Interface/crash_recover.m | 19 + Old Matlab Interface/displaypacket.m | 78 + Old Matlab Interface/dofrontend.m | 27 + Old Matlab Interface/dotheplot.m | 8 + Old Matlab Interface/draw_triggered.m | 29 + Old Matlab Interface/drawdick.m | 28 + Old Matlab Interface/expected_adc.m | 9 + Old Matlab Interface/findtest.m | 6 + Old Matlab Interface/first_gui.fig | Bin 0 -> 14383 bytes Old Matlab Interface/first_gui.m | 1425 + Old Matlab Interface/first_gui_test.m | 4 + Old Matlab Interface/helloworld.cpp | 19 + Old Matlab Interface/helloworld.mexw64 | Bin 0 -> 7168 bytes Old Matlab Interface/hexoffset.m | 3 + Old Matlab Interface/hs_err_pid1976.log | 272 + Old Matlab Interface/hs_err_pid4968.log | 268 + Old Matlab Interface/includes/libusbk.h | 4000 + Old Matlab Interface/includes/lusbk_dynapi.c | 1915 + Old Matlab Interface/includes/lusbk_shared.h | 309 + Old Matlab Interface/isoLog.txt | 375000 +++++++++++++++ Old Matlab Interface/iso_incoming.m | 5 + Old Matlab Interface/keep_in_sync.m | 11 + Old Matlab Interface/launchgui.m | 73 + Old Matlab Interface/lcdtoggle.m | 7 + Old Matlab Interface/make_waveforms.m | 7 + Old Matlab Interface/mexHW.m | 5 + Old Matlab Interface/mex_usb_init.m | 5 + Old Matlab Interface/mex_usb_iso_init.m | 14 + Old Matlab Interface/mex_usb_iso_loop.m | 117 + Old Matlab Interface/mex_usb_send_control.m | 8 + Old Matlab Interface/plotcursors.m | 50 + Old Matlab Interface/plotiso.m | 17 + Old Matlab Interface/plotmem.m | 21 + Old Matlab Interface/plotspeedtest.m | 17 + Old Matlab Interface/plotyy_test.m | 11 + Old Matlab Interface/printusb.m | 11 + Old Matlab Interface/psucal.m | 25 + Old Matlab Interface/psutest_boost.m | 22 + Old Matlab Interface/resynchronise.m | 5 + Old Matlab Interface/returnempty.m | 2 + .../samplestoshow_not_on_500.PNG | Bin 0 -> 11809 bytes Old Matlab Interface/samplestoshow_on_500.png | Bin 0 -> 12040 bytes Old Matlab Interface/scroll_function.m | 2 + Old Matlab Interface/seconds_recorded.m | 10 + Old Matlab Interface/set_gain_auto.m | 10 + Old Matlab Interface/setpsu.m | 18 + Old Matlab Interface/setpsu_boost.m | 12 + Old Matlab Interface/setscopegain.m | 22 + Old Matlab Interface/setscopemode.m | 44 + Old Matlab Interface/setscopewindowsize.m | 16 + Old Matlab Interface/signal_trip.m | 7 + Old Matlab Interface/sisprintf.m | 83 + Old Matlab Interface/static_draw.m | 0 Old Matlab Interface/test.m | 5 + Old Matlab Interface/test1.m | 29 + Old Matlab Interface/test12bit.m | 26 + Old Matlab Interface/tet.m | 29 + Old Matlab Interface/timer30ms_callback.m | 5 + Old Matlab Interface/timer_strap.m | 31 + Old Matlab Interface/tiny_send_auxwf.m | 36 + Old Matlab Interface/tiny_send_dig.m | 6 + Old Matlab Interface/tiny_send_waveform.m | 66 + Old Matlab Interface/tiny_wave_conv.m | 50 + Old Matlab Interface/tiny_wave_conv_aux.m | 17 + Old Matlab Interface/undofrontend.m | 129 + Old Matlab Interface/updatescopeaxes.m | 168 + Old Matlab Interface/verr.m | 11 + Old Matlab Interface/vexconv.m | 3 + Old Matlab Interface/weave.m | 7 + PCB/.pretty/1pin.kicad_mod | 12 + PCB/.pretty/3M-N7E50.kicad_mod | 113 + PCB/.pretty/AK300-2.kicad_mod | 98 + PCB/.pretty/AK300-3.kicad_mod | 127 + PCB/.pretty/AK300-4.kicad_mod | 150 + PCB/.pretty/BARREL_JACK.kicad_mod | 18 + PCB/.pretty/BUSPCI.kicad_mod | 257 + PCB/.pretty/BUS_AT.kicad_mod | 116 + PCB/.pretty/Banana_Jack_1Pin.kicad_mod | 17 + PCB/.pretty/Banana_Jack_2Pin.kicad_mod | 21 + PCB/.pretty/Banana_Jack_3Pin.kicad_mod | 22 + PCB/.pretty/C96ABCFD.kicad_mod | 123 + PCB/.pretty/C96ABCMD.kicad_mod | 123 + PCB/.pretty/CNT3BRCMS.kicad_mod | 26 + PCB/.pretty/CR1220.kicad_mod | 22 + PCB/.pretty/CR2032H.kicad_mod | 23 + PCB/.pretty/CR2032V.kicad_mod | 19 + PCB/.pretty/DB15FC.kicad_mod | 51 + PCB/.pretty/DB15FD.kicad_mod | 36 + PCB/.pretty/DB15F_CI.kicad_mod | 48 + PCB/.pretty/DB15MC.kicad_mod | 51 + PCB/.pretty/DB15MD.kicad_mod | 36 + PCB/.pretty/DB15M_CI.kicad_mod | 48 + PCB/.pretty/DB25FC.kicad_mod | 62 + PCB/.pretty/DB25FD.kicad_mod | 48 + PCB/.pretty/DB25F_CI.kicad_mod | 59 + PCB/.pretty/DB25MC.kicad_mod | 62 + PCB/.pretty/DB25MD.kicad_mod | 48 + PCB/.pretty/DB25M_CI.kicad_mod | 56 + PCB/.pretty/DB37FC.kicad_mod | 63 + PCB/.pretty/DB37FD.kicad_mod | 53 + PCB/.pretty/DB37MD.kicad_mod | 54 + PCB/.pretty/DB9FC.kicad_mod | 36 + PCB/.pretty/DB9FD.kicad_mod | 30 + PCB/.pretty/DB9F_CI.kicad_mod | 42 + PCB/.pretty/DB9F_CI_INVERT.kicad_mod | 42 + PCB/.pretty/DB9MC.kicad_mod | 36 + PCB/.pretty/DB9MD.kicad_mod | 30 + PCB/.pretty/DB9M_CI.kicad_mod | 42 + PCB/.pretty/DB9M_CI_INVERT.kicad_mod | 42 + PCB/.pretty/FMC_LPC_ASP-134604-01.kicad_mod | 341 + PCB/.pretty/GS2.kicad_mod | 16 + PCB/.pretty/GS3.kicad_mod | 17 + PCB/.pretty/GS_6x2.kicad_mod | 26 + PCB/.pretty/GS_8x2.kicad_mod | 30 + PCB/.pretty/GS_9x2.kicad_mod | 35 + PCB/.pretty/GTK2400-H2.kicad_mod | 19 + PCB/.pretty/GTK2400-V2.kicad_mod | 18 + PCB/.pretty/GoldTek_SCP20GR11.kicad_mod | 71 + PCB/.pretty/GoldTek_SCP20GS11.kicad_mod | 75 + PCB/.pretty/HE10-10C.kicad_mod | 44 + PCB/.pretty/HE10_20D.kicad_mod | 51 + PCB/.pretty/HE10_26D.kicad_mod | 52 + PCB/.pretty/HE10_34D.kicad_mod | 60 + PCB/.pretty/HE10_40D.kicad_mod | 66 + PCB/.pretty/HE10_50D.kicad_mod | 76 + PCB/.pretty/HE10_60D.kicad_mod | 86 + PCB/.pretty/HE10_64D.kicad_mod | 90 + PCB/.pretty/JACK_ALIM.kicad_mod | 25 + .../JWT_Vertical_A3963-RM3.96mm-2.kicad_mod | 31 + PCB/.pretty/NMJ6HCD2.kicad_mod | 41 + PCB/.pretty/PCI-EXPRESS.kicad_mod | 89 + PCB/.pretty/PINHEAD1-2.kicad_mod | 16 + PCB/.pretty/PINHEAD1-3.kicad_mod | 17 + PCB/.pretty/PINHEAD1-6.kicad_mod | 23 + PCB/.pretty/PINTST.kicad_mod | 17 + PCB/.pretty/QMS-1X52-FEMALE-SMD.kicad_mod | 94 + PCB/.pretty/QMS-1X52-SMD.kicad_mod | 89 + PCB/.pretty/QMS-2X52-SMD.kicad_mod | 148 + PCB/.pretty/RJ12_E.kicad_mod | 21 + PCB/.pretty/RJ45_8.kicad_mod | 28 + PCB/.pretty/RJ45_TRANSFO.kicad_mod | 33 + PCB/.pretty/RJ45_TRANSFO_ver2.kicad_mod | 32 + PCB/.pretty/RJHSE538X.kicad_mod | 41 + PCB/.pretty/SAS_mini_1888174.kicad_mod | 66 + PCB/.pretty/SATA-22_SMD.kicad_mod | 64 + PCB/.pretty/SATA-7_SMD.kicad_mod | 127 + PCB/.pretty/SATA-7_THT_VERT_1.kicad_mod | 21 + PCB/.pretty/SATA-7_THT_VERT_2.kicad_mod | 21 + PCB/.pretty/SDS-50J.kicad_mod | 32 + PCB/.pretty/SD_Card_Receptacle.kicad_mod | 39 + PCB/.pretty/SMB_Straight.kicad_mod | 32 + PCB/.pretty/SOC676BR.kicad_mod | 29 + PCB/.pretty/SOC676C.kicad_mod | 45 + PCB/.pretty/SOC676NY.kicad_mod | 27 + PCB/.pretty/SUBCLICK.kicad_mod | 34 + PCB/.pretty/TE_Futurebus+_5536607-1.kicad_mod | 43 + PCB/.pretty/USB_A.kicad_mod | 29 + PCB/.pretty/USB_A_Vertical.kicad_mod | 33 + PCB/.pretty/USB_B.kicad_mod | 31 + PCB/.pretty/USB_Micro-B.kicad_mod | 29 + PCB/.pretty/USB_Micro-B_WIDE.kicad_mod | 29 + PCB/.pretty/USB_Mini-B.kicad_mod | 31 + PCB/.pretty/VASCH10x2.kicad_mod | 49 + PCB/.pretty/VASCH5x2.kicad_mod | 39 + PCB/.pretty/VASCH8x2.kicad_mod | 45 + .../Wafer_Horizontal10x5.8x7RM2.5-3.kicad_mod | 38 + .../Wafer_Horizontal15x5.8x7RM2.5-5.kicad_mod | 45 + ...afer_Horizontal17.5x5.8x7RM2.5-6.kicad_mod | 48 + .../Wafer_Horizontal20x5.8x7RM2.5-7.kicad_mod | 49 + ...afer_Horizontal22.5x5.8x7RM2.5-8.kicad_mod | 51 + .../Wafer_Vertical10x5.8x7RM2.5-3.kicad_mod | 26 + .../Wafer_Vertical15x5.8x7RM2.5-5.kicad_mod | 28 + .../Wafer_Vertical17.5x5.8x7RM2.5-6.kicad_mod | 29 + .../Wafer_Vertical20x5.8x7RM2.5-7.kicad_mod | 30 + .../Wafer_Vertical22.5x5.8x7RM2.5-8.kicad_mod | 35 + PCB/.pretty/XLR3MC.kicad_mod | 32 + PCB/.pretty/XLR5MC.kicad_mod | 31 + PCB/.pretty/bnc-ci.kicad_mod | 19 + PCB/.pretty/bnc.kicad_mod | 21 + PCB/.pretty/bornier2.kicad_mod | 22 + PCB/.pretty/bornier3.kicad_mod | 23 + PCB/.pretty/bornier4.kicad_mod | 24 + PCB/.pretty/bornier5.kicad_mod | 25 + PCB/.pretty/bornier6.kicad_mod | 26 + PCB/.pretty/c64abfd.kicad_mod | 87 + PCB/.pretty/c64abmd.kicad_mod | 87 + PCB/.pretty/c64acfd.kicad_mod | 89 + PCB/.pretty/he10-10d.kicad_mod | 41 + PCB/.pretty/he10-14c.kicad_mod | 48 + PCB/.pretty/he10-14d.kicad_mod | 40 + PCB/.pretty/he10-16c.kicad_mod | 50 + PCB/.pretty/he10-16d.kicad_mod | 42 + PCB/.pretty/he10-20c.kicad_mod | 54 + PCB/.pretty/he10-26c.kicad_mod | 60 + PCB/.pretty/he10-34c.kicad_mod | 68 + PCB/.pretty/he10-40c.kicad_mod | 74 + PCB/BACKUP_OLD_PCB | 1874 + PCB/OUTPUT/OUTPUT.zip | Bin 0 -> 24082 bytes PCB/OUTPUT/Tinylab_proto1-B_Cu.gbl | 480 + PCB/OUTPUT/Tinylab_proto1-B_Mask.gbs | 78 + PCB/OUTPUT/Tinylab_proto1-B_SilkS.gbo | 11 + PCB/OUTPUT/Tinylab_proto1-Edge_Cuts.gm1 | 23 + PCB/OUTPUT/Tinylab_proto1-F_Cu.gtl | 1265 + PCB/OUTPUT/Tinylab_proto1-F_Mask.gts | 250 + PCB/OUTPUT/Tinylab_proto1-F_SilkS.gto | 1883 + PCB/OUTPUT/Tinylab_proto1.drl | 121 + PCB/OUTPUT_V2/OUTPUT.zip | Bin 0 -> 23092 bytes PCB/OUTPUT_V2/Tinylab_proto1-B_Cu.gbr | 305 + PCB/OUTPUT_V2/Tinylab_proto1-B_Mask.gbr | 88 + PCB/OUTPUT_V2/Tinylab_proto1-B_SilkS.gbr | 11 + PCB/OUTPUT_V2/Tinylab_proto1-Edge_Cuts.gbr | 21 + PCB/OUTPUT_V2/Tinylab_proto1-F_Cu.gbr | 1180 + PCB/OUTPUT_V2/Tinylab_proto1-F_Mask.gbr | 262 + PCB/OUTPUT_V2/Tinylab_proto1-F_SilkS.gbr | 2109 + PCB/OUTPUT_V2/Tinylab_proto1.drl | 100 + PCB/OUTPUT_V2/Tinylab_proto1.net | 935 + PCB/OUTPUT_V3/OUTPUT_V3.zip | Bin 0 -> 13887 bytes PCB/OUTPUT_V3/Tinylab_proto1-B_Cu.gbr | 631 + PCB/OUTPUT_V3/Tinylab_proto1-B_Mask.gbr | 91 + PCB/OUTPUT_V3/Tinylab_proto1-Edge_Cuts.gbr | 31 + PCB/OUTPUT_V3/Tinylab_proto1-F_Cu.gbr | 1461 + PCB/OUTPUT_V3/Tinylab_proto1-F_Mask.gbr | 290 + PCB/OUTPUT_V3/Tinylab_proto1.drl | 140 + PCB/OUTPUT_V35/Tinylab_proto1-B_Cu.gbr | 631 + PCB/OUTPUT_V35/Tinylab_proto1-B_Mask.gbr | 91 + PCB/OUTPUT_V35/Tinylab_proto1-Edge_Cuts.gbr | 31 + PCB/OUTPUT_V35/Tinylab_proto1-F_Cu.gbr | 1461 + PCB/OUTPUT_V35/Tinylab_proto1-F_Mask.gbr | 290 + PCB/OUTPUT_V35/Tinylab_proto1.kicad_pcb | 3082 + PCB/OUTPUT_V35/Tinylab_proto1.kicad_pcb-bak | 3082 + PCB/OUTPUT_V35/Tinylab_proto1.net | 925 + PCB/OUTPUT_V35/Tinylab_proto1.pro | 62 + PCB/OUTPUT_V4/BOM/Tinylab_proto1.csv | 67 + PCB/OUTPUT_V4/BOM/Tinylab_proto1_Elecrow.csv | 67 + PCB/OUTPUT_V4/Drill/Tinylab_proto1.drl | 124 + PCB/OUTPUT_V4/Gerber/Tinylab_proto1-B.Cu.gbr | 496 + .../Gerber/Tinylab_proto1-B.Mask.gbr | 85 + .../Gerber/Tinylab_proto1-Edge.Cuts.gbr | 21 + PCB/OUTPUT_V4/Gerber/Tinylab_proto1-F.Cu.gbr | 1495 + .../Gerber/Tinylab_proto1-F.Mask.gbr | 304 + .../Gerber/Tinylab_proto1-F.SilkS.gbr | 2602 + PCB/OUTPUT_V4/OUTPUT_V4.zip | Bin 0 -> 29627 bytes PCB/OUTPUT_V4/Tinylab_proto1.net | 956 + PCB/OUTPUT_V4/itead/ITEAD.zip | Bin 0 -> 13978 bytes PCB/OUTPUT_V4/itead/Tinylab_proto1-B.Cu.gbr | 496 + PCB/OUTPUT_V4/itead/Tinylab_proto1-B.Mask.gbr | 85 + .../itead/Tinylab_proto1-Edge.Cuts.gbr | 21 + PCB/OUTPUT_V4/itead/Tinylab_proto1-F.Cu.gbr | 1504 + PCB/OUTPUT_V4/itead/Tinylab_proto1-F.Mask.gbr | 304 + PCB/OUTPUT_V4/itead/Tinylab_proto1.drl | 124 + PCB/OUTPUT_V4/seeeed/BOM/Seeed BOM Format.ods | Bin 0 -> 18406 bytes PCB/OUTPUT_V4/seeeed/BOM/Seeed BOM Format.xls | Bin 0 -> 22528 bytes .../Gerber + Drill/Tinylab_proto1-B.Cu.gbr | 496 + .../Gerber + Drill/Tinylab_proto1-B.Mask.gbr | 85 + .../Tinylab_proto1-Edge.Cuts.gbr | 21 + .../Gerber + Drill/Tinylab_proto1-F.Cu.gbr | 1504 + .../Gerber + Drill/Tinylab_proto1-F.Mask.gbr | 304 + .../seeeed/Gerber + Drill/Tinylab_proto1.drl | 124 + .../Requirement/PCB Requirement Format.ods | Bin 0 -> 17717 bytes .../Requirement/PCB Requirement Format.xls | Bin 0 -> 18944 bytes PCB/OUTPUT_V4/seeeed/seeed.zip | Bin 0 -> 54561 bytes PCB/OUTPUT_V5/Tinylab_proto1-B.Cu.gbr | 563 + PCB/OUTPUT_V5/Tinylab_proto1-B.Mask.gbr | 89 + PCB/OUTPUT_V5/Tinylab_proto1-Edge.Cuts.gbr | 25 + PCB/OUTPUT_V5/Tinylab_proto1-F.Cu.gbr | 1512 + PCB/OUTPUT_V5/Tinylab_proto1-F.Mask.gbr | 320 + PCB/OUTPUT_V5/Tinylab_proto1.drl | 131 + PCB/Tinylab_proto1-cache.lib | 406 + PCB/Tinylab_proto1-rescue.lib | 45 + PCB/Tinylab_proto1.bak | 1436 + PCB/Tinylab_proto1.csv | 67 + PCB/Tinylab_proto1.dsn | 763 + PCB/Tinylab_proto1.kicad_pcb | 3370 + PCB/Tinylab_proto1.kicad_pcb-bak | 3370 + PCB/Tinylab_proto1.net | 990 + PCB/Tinylab_proto1.pro | 72 + PCB/Tinylab_proto1.sch | 1436 + PCB/Tinylab_proto1.xml | 1152 + PCB/WOT/Tinylab_proto1-B_Cu.gbr | 480 + PCB/WOT/Tinylab_proto1-B_Mask.gbr | 78 + PCB/WOT/Tinylab_proto1-B_Paste.gbr | 11 + PCB/WOT/Tinylab_proto1-B_SilkS.gbr | 11 + PCB/WOT/Tinylab_proto1-Edge_Cuts.gbr | 21 + PCB/WOT/Tinylab_proto1-F_Cu.gbr | 1265 + PCB/WOT/Tinylab_proto1-F_Mask.gbr | 250 + PCB/WOT/Tinylab_proto1-F_Paste.gbr | 176 + PCB/WOT/Tinylab_proto1-F_SilkS.gbr | 1885 + PCB/WOT/Tinylab_proto1-cache.lib | 432 + PCB/WOT/Tinylab_proto1.drl | 121 + PCB/WOT/Tinylab_proto1.kicad_pcb | 2556 + PCB/WOT/Tinylab_proto1.kicad_pcb-bak | 2551 + PCB/WOT/Tinylab_proto1.kicad_pcb.bak | 1945 + PCB/WOT/Tinylab_proto1.kicad_pcb_bak | 2411 + PCB/WOT/Tinylab_proto1.xml | 1045 + PCB/WOT/Tinylab_proto1.zip | Bin 0 -> 24015 bytes 911 files changed, 1028037 insertions(+) create mode 100644 AVR Code/.vs/USB_BULK_TEST/v14/.atsuo create mode 100644 AVR Code/USB_BULK_TEST.atsln create mode 100644 AVR Code/USB_BULK_TEST.atsuo create mode 100644 AVR Code/USB_BULK_TEST/Debug/Makefile create mode 100644 AVR Code/USB_BULK_TEST/Debug/USB_BULK_TEST.eep create mode 100644 AVR Code/USB_BULK_TEST/Debug/USB_BULK_TEST.elf create mode 100644 AVR Code/USB_BULK_TEST/Debug/USB_BULK_TEST.hex create mode 100644 AVR Code/USB_BULK_TEST/Debug/USB_BULK_TEST.lss create mode 100644 AVR Code/USB_BULK_TEST/Debug/USB_BULK_TEST.map create mode 100644 AVR Code/USB_BULK_TEST/Debug/USB_BULK_TEST.srec create mode 100644 AVR Code/USB_BULK_TEST/Debug/makedep.mk create mode 100644 AVR Code/USB_BULK_TEST/Debug/src/ASF/common/boards/user_board/init.d create mode 100644 AVR Code/USB_BULK_TEST/Debug/src/ASF/common/boards/user_board/init.o create mode 100644 AVR Code/USB_BULK_TEST/Debug/src/ASF/common/components/display/st7565r/st7565r.d create mode 100644 AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/clock/xmega/sysclk.d create mode 100644 AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/clock/xmega/sysclk.o create mode 100644 AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/gfx_mono/gfx_mono_c12832_a1z.d create mode 100644 AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/gfx_mono/gfx_mono_framebuffer.d create mode 100644 AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/gfx_mono/gfx_mono_generic.d create mode 100644 AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/gfx_mono/gfx_mono_menu.d create mode 100644 AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/gfx_mono/gfx_mono_spinctrl.d create mode 100644 AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/gfx_mono/gfx_mono_text.d create mode 100644 AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/gfx_mono/sysfont.d create mode 100644 AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/ioport/xmega/ioport_compat.d create mode 100644 AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/ioport/xmega/ioport_compat.o create mode 100644 AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/sleepmgr/xmega/sleepmgr.d create mode 100644 AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/sleepmgr/xmega/sleepmgr.o create mode 100644 AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/spi/xmega_spi/spi_master.d create mode 100644 AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/spi/xmega_usart_spi/usart_spi.d create mode 100644 AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.d create mode 100644 AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o create mode 100644 AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/usb/class/vendor/device/udi_vendor.d create mode 100644 AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/usb/class/vendor/device/udi_vendor.o create mode 100644 AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.d create mode 100644 AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o create mode 100644 AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/usb/udc/udc.d create mode 100644 AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/usb/udc/udc.o create mode 100644 AVR Code/USB_BULK_TEST/Debug/src/ASF/xmega/boards/xmega_a3bu_xplained/init.d create mode 100644 AVR Code/USB_BULK_TEST/Debug/src/ASF/xmega/drivers/cpu/ccp.d create mode 100644 AVR Code/USB_BULK_TEST/Debug/src/ASF/xmega/drivers/cpu/ccp.o create mode 100644 AVR Code/USB_BULK_TEST/Debug/src/ASF/xmega/drivers/nvm/nvm.d create mode 100644 AVR Code/USB_BULK_TEST/Debug/src/ASF/xmega/drivers/nvm/nvm.o create mode 100644 AVR Code/USB_BULK_TEST/Debug/src/ASF/xmega/drivers/nvm/nvm_asm.d create mode 100644 AVR Code/USB_BULK_TEST/Debug/src/ASF/xmega/drivers/nvm/nvm_asm.o create mode 100644 AVR Code/USB_BULK_TEST/Debug/src/ASF/xmega/drivers/spi/spi.d create mode 100644 AVR Code/USB_BULK_TEST/Debug/src/ASF/xmega/drivers/usart/usart.d create mode 100644 AVR Code/USB_BULK_TEST/Debug/src/ASF/xmega/drivers/usb/usb_device.d create mode 100644 AVR Code/USB_BULK_TEST/Debug/src/ASF/xmega/drivers/usb/usb_device.o create mode 100644 AVR Code/USB_BULK_TEST/Debug/src/main.d create mode 100644 AVR Code/USB_BULK_TEST/Debug/src/main.o create mode 100644 AVR Code/USB_BULK_TEST/Debug/src/tiny_adc.d create mode 100644 AVR Code/USB_BULK_TEST/Debug/src/tiny_adc.o create mode 100644 AVR Code/USB_BULK_TEST/Debug/src/tiny_dac.d create mode 100644 AVR Code/USB_BULK_TEST/Debug/src/tiny_dac.o create mode 100644 AVR Code/USB_BULK_TEST/Debug/src/tiny_dig.d create mode 100644 AVR Code/USB_BULK_TEST/Debug/src/tiny_dig.o create mode 100644 AVR Code/USB_BULK_TEST/Debug/src/tiny_dma.d create mode 100644 AVR Code/USB_BULK_TEST/Debug/src/tiny_dma.o create mode 100644 AVR Code/USB_BULK_TEST/Debug/src/tiny_timer.d create mode 100644 AVR Code/USB_BULK_TEST/Debug/src/tiny_timer.o create mode 100644 AVR Code/USB_BULK_TEST/Debug/src/tiny_timercounter.d create mode 100644 AVR Code/USB_BULK_TEST/Debug/src/tiny_uart.d create mode 100644 AVR Code/USB_BULK_TEST/Debug/src/tiny_uart.o create mode 100644 AVR Code/USB_BULK_TEST/Release/Makefile create mode 100644 AVR Code/USB_BULK_TEST/Release/USB_BULK_TEST.eep create mode 100644 AVR Code/USB_BULK_TEST/Release/USB_BULK_TEST.elf create mode 100644 AVR Code/USB_BULK_TEST/Release/USB_BULK_TEST.hex create mode 100644 AVR Code/USB_BULK_TEST/Release/USB_BULK_TEST.lss create mode 100644 AVR Code/USB_BULK_TEST/Release/USB_BULK_TEST.map create mode 100644 AVR Code/USB_BULK_TEST/Release/USB_BULK_TEST.srec create mode 100644 AVR Code/USB_BULK_TEST/Release/makedep.mk create mode 100644 AVR Code/USB_BULK_TEST/Release/src/ASF/common/boards/user_board/init.d create mode 100644 AVR Code/USB_BULK_TEST/Release/src/ASF/common/boards/user_board/init.o create mode 100644 AVR Code/USB_BULK_TEST/Release/src/ASF/common/services/clock/xmega/sysclk.d create mode 100644 AVR Code/USB_BULK_TEST/Release/src/ASF/common/services/clock/xmega/sysclk.o create mode 100644 AVR Code/USB_BULK_TEST/Release/src/ASF/common/services/ioport/xmega/ioport_compat.d create mode 100644 AVR Code/USB_BULK_TEST/Release/src/ASF/common/services/ioport/xmega/ioport_compat.o create mode 100644 AVR Code/USB_BULK_TEST/Release/src/ASF/common/services/sleepmgr/xmega/sleepmgr.d create mode 100644 AVR Code/USB_BULK_TEST/Release/src/ASF/common/services/sleepmgr/xmega/sleepmgr.o create mode 100644 AVR Code/USB_BULK_TEST/Release/src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.d create mode 100644 AVR Code/USB_BULK_TEST/Release/src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o create mode 100644 AVR Code/USB_BULK_TEST/Release/src/ASF/common/services/usb/class/vendor/device/udi_vendor.d create mode 100644 AVR Code/USB_BULK_TEST/Release/src/ASF/common/services/usb/class/vendor/device/udi_vendor.o create mode 100644 AVR Code/USB_BULK_TEST/Release/src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.d create mode 100644 AVR Code/USB_BULK_TEST/Release/src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o create mode 100644 AVR Code/USB_BULK_TEST/Release/src/ASF/common/services/usb/udc/udc.d create mode 100644 AVR Code/USB_BULK_TEST/Release/src/ASF/common/services/usb/udc/udc.o create mode 100644 AVR Code/USB_BULK_TEST/Release/src/ASF/xmega/drivers/cpu/ccp.d create mode 100644 AVR Code/USB_BULK_TEST/Release/src/ASF/xmega/drivers/cpu/ccp.o create mode 100644 AVR Code/USB_BULK_TEST/Release/src/ASF/xmega/drivers/nvm/nvm.d create mode 100644 AVR Code/USB_BULK_TEST/Release/src/ASF/xmega/drivers/nvm/nvm.o create mode 100644 AVR Code/USB_BULK_TEST/Release/src/ASF/xmega/drivers/nvm/nvm_asm.d create mode 100644 AVR Code/USB_BULK_TEST/Release/src/ASF/xmega/drivers/nvm/nvm_asm.o create mode 100644 AVR Code/USB_BULK_TEST/Release/src/ASF/xmega/drivers/usb/usb_device.d create mode 100644 AVR Code/USB_BULK_TEST/Release/src/ASF/xmega/drivers/usb/usb_device.o create mode 100644 AVR Code/USB_BULK_TEST/Release/src/main.d create mode 100644 AVR Code/USB_BULK_TEST/Release/src/main.o create mode 100644 AVR Code/USB_BULK_TEST/Release/src/tiny_adc.d create mode 100644 AVR Code/USB_BULK_TEST/Release/src/tiny_adc.o create mode 100644 AVR Code/USB_BULK_TEST/Release/src/tiny_dac.d create mode 100644 AVR Code/USB_BULK_TEST/Release/src/tiny_dac.o create mode 100644 AVR Code/USB_BULK_TEST/Release/src/tiny_dig.d create mode 100644 AVR Code/USB_BULK_TEST/Release/src/tiny_dig.o create mode 100644 AVR Code/USB_BULK_TEST/Release/src/tiny_dma.d create mode 100644 AVR Code/USB_BULK_TEST/Release/src/tiny_dma.o create mode 100644 AVR Code/USB_BULK_TEST/Release/src/tiny_timer.d create mode 100644 AVR Code/USB_BULK_TEST/Release/src/tiny_timer.o create mode 100644 AVR Code/USB_BULK_TEST/Release/src/tiny_uart.d create mode 100644 AVR Code/USB_BULK_TEST/Release/src/tiny_uart.o create mode 100644 AVR Code/USB_BULK_TEST/USB_BULK_TEST.cproj create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/common/boards/board.h create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/common/boards/user_board/init.c create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/common/boards/user_board/user_board.h create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/common/components/display/st7565r/st7565r.c create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/common/components/display/st7565r/st7565r.h create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/common/services/clock/genclk.h create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/common/services/clock/osc.h create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/common/services/clock/pll.h create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/common/services/clock/sysclk.h create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/common/services/clock/xmega/osc.h create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/common/services/clock/xmega/pll.h create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/common/services/clock/xmega/sysclk.c create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/common/services/clock/xmega/sysclk.h create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/common/services/delay/delay.h create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/common/services/delay/xmega/cycle_counter.h create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/common/services/gfx_mono/docsrc/gfx_mono_overview.png create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/common/services/gfx_mono/gfx_mono.h create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/common/services/gfx_mono/gfx_mono_c12832_a1z.c create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/common/services/gfx_mono/gfx_mono_c12832_a1z.h create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/common/services/gfx_mono/gfx_mono_framebuffer.c create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/common/services/gfx_mono/gfx_mono_framebuffer.h create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/common/services/gfx_mono/gfx_mono_generic.c create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/common/services/gfx_mono/gfx_mono_generic.h create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/common/services/gfx_mono/gfx_mono_menu.c create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/common/services/gfx_mono/gfx_mono_menu.h create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/common/services/gfx_mono/gfx_mono_spinctrl.c create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/common/services/gfx_mono/gfx_mono_spinctrl.h create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/common/services/gfx_mono/gfx_mono_text.c create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/common/services/gfx_mono/gfx_mono_text.h create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/common/services/gfx_mono/sysfont.c create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/common/services/gfx_mono/sysfont.h create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/common/services/gfx_mono/tools/bitmap.py create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/common/services/gfx_mono/tools/dump_display_over_serial.py create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/common/services/gfx_mono/tools/readme.txt create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/common/services/gpio/gpio.h create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/common/services/gpio/xmega_gpio/xmega_gpio.h create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/common/services/ioport/ioport.h create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/common/services/ioport/xmega/ioport.h create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/common/services/ioport/xmega/ioport_compat.c create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/common/services/ioport/xmega/ioport_compat.h create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/common/services/sleepmgr/sleepmgr.h create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/common/services/sleepmgr/xmega/sleepmgr.c create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/common/services/sleepmgr/xmega/sleepmgr.h create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/common/services/spi/spi_master.h create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/common/services/spi/usart_spi.h create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/common/services/spi/xmega_spi/spi_master.c create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/common/services/spi/xmega_spi/spi_master.h create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/common/services/spi/xmega_usart_spi/usart_spi.c create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/common/services/spi/xmega_usart_spi/usart_spi.h create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.c create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/common/services/usb/class/vendor/device/udi_vendor.c create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/common/services/usb/class/vendor/device/udi_vendor.h create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/common/services/usb/class/vendor/device/udi_vendor_conf.h create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.c create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/common/services/usb/class/vendor/usb_protocol_vendor.h create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/common/services/usb/udc/udc.c create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/common/services/usb/udc/udc.h create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/common/services/usb/udc/udc_desc.h create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/common/services/usb/udc/udd.h create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/common/services/usb/udc/udi.h create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/common/services/usb/usb_atmel.h create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/common/services/usb/usb_protocol.h create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/common/utils/interrupt.h create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/common/utils/interrupt/interrupt_avr8.h create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/common/utils/make/Makefile.avr.in create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/common/utils/parts.h create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/xmega/boards/xmega_a3bu_xplained/init.c create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/xmega/boards/xmega_a3bu_xplained/led.h create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/xmega/boards/xmega_a3bu_xplained/xmega_a3bu_xplained.h create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/xmega/drivers/cpu/ccp.h create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/xmega/drivers/cpu/ccp.s create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/xmega/drivers/cpu/xmega_reset_cause.h create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/xmega/drivers/nvm/nvm.c create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/xmega/drivers/nvm/nvm.h create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/xmega/drivers/nvm/nvm_asm.s create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/xmega/drivers/pmic/pmic.h create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/xmega/drivers/sleep/sleep.h create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/xmega/drivers/spi/spi.c create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/xmega/drivers/spi/spi.h create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/xmega/drivers/usart/usart.c create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/xmega/drivers/usart/usart.h create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/xmega/drivers/usb/usb_device.c create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/xmega/drivers/usb/usb_device.h create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/xmega/utils/assembler.h create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/xmega/utils/assembler/gas.h create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/xmega/utils/bit_handling/clz_ctz.h create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/xmega/utils/compiler.h create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/xmega/utils/preprocessor/mrepeat.h create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/xmega/utils/preprocessor/preprocessor.h create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/xmega/utils/preprocessor/stringz.h create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/xmega/utils/preprocessor/tpaste.h create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/xmega/utils/progmem.h create mode 100644 AVR Code/USB_BULK_TEST/src/ASF/xmega/utils/status_codes.h create mode 100644 AVR Code/USB_BULK_TEST/src/asf.h create mode 100644 AVR Code/USB_BULK_TEST/src/config/conf_board.h create mode 100644 AVR Code/USB_BULK_TEST/src/config/conf_clock.h create mode 100644 AVR Code/USB_BULK_TEST/src/config/conf_menu.h create mode 100644 AVR Code/USB_BULK_TEST/src/config/conf_sleepmgr.h create mode 100644 AVR Code/USB_BULK_TEST/src/config/conf_spi_master.h create mode 100644 AVR Code/USB_BULK_TEST/src/config/conf_spinctrl.h create mode 100644 AVR Code/USB_BULK_TEST/src/config/conf_st7565r.h create mode 100644 AVR Code/USB_BULK_TEST/src/config/conf_sysfont.h create mode 100644 AVR Code/USB_BULK_TEST/src/config/conf_usart_spi.h create mode 100644 AVR Code/USB_BULK_TEST/src/config/conf_usb.h create mode 100644 AVR Code/USB_BULK_TEST/src/globals.h create mode 100644 AVR Code/USB_BULK_TEST/src/main.c create mode 100644 AVR Code/USB_BULK_TEST/src/main.h create mode 100644 AVR Code/USB_BULK_TEST/src/tiny_adc.c create mode 100644 AVR Code/USB_BULK_TEST/src/tiny_adc.h create mode 100644 AVR Code/USB_BULK_TEST/src/tiny_dac.c create mode 100644 AVR Code/USB_BULK_TEST/src/tiny_dac.h create mode 100644 AVR Code/USB_BULK_TEST/src/tiny_dig.c create mode 100644 AVR Code/USB_BULK_TEST/src/tiny_dig.h create mode 100644 AVR Code/USB_BULK_TEST/src/tiny_dma.c create mode 100644 AVR Code/USB_BULK_TEST/src/tiny_dma.h create mode 100644 AVR Code/USB_BULK_TEST/src/tiny_timer.c create mode 100644 AVR Code/USB_BULK_TEST/src/tiny_timer.h create mode 100644 AVR Code/USB_BULK_TEST/src/tiny_uart.c create mode 100644 AVR Code/USB_BULK_TEST/src/tiny_uart.h create mode 100644 AVR Code/USB_BULK_TEST/src/ui.h create mode 100644 Desktop Interface/Labrador_libusbK.pro create mode 100644 Desktop Interface/Labrador_libusbK.pro.user create mode 100644 Desktop Interface/buffer_0.bmp create mode 100644 Desktop Interface/buffer_1.bmp create mode 100644 Desktop Interface/buffer_2.bmp create mode 100644 Desktop Interface/buffercontrol.cpp create mode 100644 Desktop Interface/buffercontrol.h create mode 100644 Desktop Interface/cursorenabler.cpp create mode 100644 Desktop Interface/cursorenabler.h create mode 100644 Desktop Interface/desktop_settings.cpp create mode 100644 Desktop Interface/desktop_settings.h create mode 100644 Desktop Interface/deviceconnecteddisplay.cpp create mode 100644 Desktop Interface/deviceconnecteddisplay.h create mode 100644 Desktop Interface/espocombobox.cpp create mode 100644 Desktop Interface/espocombobox.h create mode 100644 Desktop Interface/esposlider.cpp create mode 100644 Desktop Interface/esposlider.h create mode 100644 Desktop Interface/espospinbox.cpp create mode 100644 Desktop Interface/espospinbox.h create mode 100644 Desktop Interface/functiongencontrol.cpp create mode 100644 Desktop Interface/functiongencontrol.h create mode 100644 Desktop Interface/isobuffer.cpp create mode 100644 Desktop Interface/isobuffer.h create mode 100644 Desktop Interface/isodriver.cpp create mode 100644 Desktop Interface/isodriver.h create mode 100644 Desktop Interface/libusbk/bin/dll/amd64/libusbK.dll create mode 100644 Desktop Interface/libusbk/bin/dll/ia64/libusbK.dll create mode 100644 Desktop Interface/libusbk/bin/dll/x86/libusbK.dll create mode 100644 Desktop Interface/libusbk/bin/lib/amd64/libusbK.lib create mode 100644 Desktop Interface/libusbk/bin/lib/ia64/libusbK.lib create mode 100644 Desktop Interface/libusbk/bin/lib/static/amd64/libusbK.lib create mode 100644 Desktop Interface/libusbk/bin/lib/static/ia64/libusbK.lib create mode 100644 Desktop Interface/libusbk/bin/lib/static/x86/libusbK.lib create mode 100644 Desktop Interface/libusbk/bin/lib/x86/libusbK.lib create mode 100644 Desktop Interface/libusbk/includes/libusbk.h create mode 100644 Desktop Interface/libusbk/includes/lusbk_dynapi.c create mode 100644 Desktop Interface/libusbk/includes/lusbk_shared.h create mode 100644 Desktop Interface/main.cpp create mode 100644 Desktop Interface/mainwindow.cpp create mode 100644 Desktop Interface/mainwindow.h create mode 100644 Desktop Interface/mainwindow.ui create mode 100644 Desktop Interface/noclosemenu.cpp create mode 100644 Desktop Interface/noclosemenu.h create mode 100644 Desktop Interface/qcustomplot.cpp create mode 100644 Desktop Interface/qcustomplot.h create mode 100644 Desktop Interface/resources.qrc create mode 100644 Desktop Interface/siPrint.cpp create mode 100644 Desktop Interface/siprint.h create mode 100644 Desktop Interface/timedtickbox.cpp create mode 100644 Desktop Interface/timedtickbox.h create mode 100644 Desktop Interface/usbdriver.h create mode 100644 Desktop Interface/waveforms/Sawtooth.tlw create mode 100644 Desktop Interface/waveforms/Sin.tlw create mode 100644 Desktop Interface/waveforms/Square.tlw create mode 100644 Desktop Interface/waveforms/Triangle.tlw create mode 100644 Desktop Interface/waveforms/_list.wfl create mode 100644 Desktop Interface/waveforms_OLD/Sawtooth.tlw create mode 100644 Desktop Interface/waveforms_OLD/Sin.tlw create mode 100644 Desktop Interface/waveforms_OLD/Square.tlw create mode 100644 Desktop Interface/waveforms_OLD/Triangle.tlw create mode 100644 Desktop Interface/waveforms_OLD/_list.wfl create mode 100644 Desktop Interface/winusbdriver.cpp create mode 100644 Desktop Interface/winusbdriver.h create mode 100644 Desktop Interface/xmega.h create mode 100644 Old Matlab Interface/.svn/entries create mode 100644 Old Matlab Interface/.svn/format create mode 100644 Old Matlab Interface/.svn/pristine/00/000cd9de688114eca60ab3ed8f47af0cbec6bcbe.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/01/018e814e444b6e657ced7f4e357f4b61e626deb6.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/02/02959e28e6695fe91c27b1bdd0ca6444d7e30afa.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/03/034b6e7436daea3b23ae2bc025a1fc7e30abbde2.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/04/0450c9a25a7b428bd340570efb1a7ffc4095bb68.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/04/04e63fc7fbe69172abc51b394d95cb2a5d9db039.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/05/05787edbc2f1e75f2606006c2c2263929603df87.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/06/06807992cb300543c1acac3d136e5fad0b012b98.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/08/08980606867d71236732281e564c26aa234d0492.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/08/08d40aedf477a62efb9c0ab6835396973e703d44.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/09/09558fa38390ff5b9e448f4e133ecec897d3a6ed.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/0a/0abcb49af2b00438c78205c594f66918aaed46be.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/0b/0bbebb77dacc40a9055f623a3fc40734d684599c.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/0b/0bea3176a50a8b215a4230940af3da4df02e76e5.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/0c/0c9396420176d71310c25719e16eab65ad651680.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/0e/0ed0593721eb6952fb9d053197d6bf9b002875fd.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/0f/0f12a5f7cb26c94273fd8b33b99a2faba6d5722d.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/0f/0ffe81cc039ff9bb68c4a763e940a3fd1ff33679.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/10/10de157f63173d022f4d6a0ed452a3c74574d9ca.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/11/11873190b9aa35cf3c7da49845992102338d0d01.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/12/12b094e22d62f48741be7b2ca0100de171ded2a6.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/14/1475a16f806ec250fcccd22d8e49fcf18ef6c240.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/14/148866eba70db42d9fcbfb226f8c185367a019c7.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/15/153f1151c37be3e4bfa431d9db08559ad4629bf0.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/15/1547850f20be0023538e6f0c41009aa5f53fd630.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/16/16bc34a84f9aaded710f7d05ce5c5d9eafe673d7.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/18/1878abed33b62f38495f26e323231de6640f0b3b.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/1b/1bc1bc5b7cd5d326b0581de8e57be48ed902a1bf.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/1c/1c4358dca057b00006ed90c0ffca5a5971e2adcd.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/1d/1d1e0e7eb037bb37f68f7f6d3f68d1137f1fe193.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/21/210ff8921909a8810c7ea800fbf3a98550ceb291.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/23/2336279f1af60694c0294df1651788c6e0a3f67d.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/23/2378d9995f80894725f18d2c905e64aa16464d35.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/23/23880a000a15dd9a71984f677ace3f759b3d176c.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/24/24252c4f32cacda1c505e6fc27fbc7ba69f5aa71.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/28/2829ca960562d879bb9bc425ae0f4d356f78aaf9.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/28/28a638cd51e648387350a4716cb2c2182b540d87.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/29/290c7bf876399b9cac7f5c4ed4285c05b25cd206.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/29/29c64fec6e69ca22f81ebf30fba87a8a76bf64b6.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/2b/2b3e861ba0c928f44218c33b357ee225b210861d.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/2c/2c2cac302b7f1cdf9fa687082d023d2095c94195.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/2e/2edbf56631bf8c322ab56509a78f197f01786957.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/2f/2feca4ba5ed6b3d0dedf490a9063cb7ab9430790.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/32/32ba5d36cb2ab8663296ce2e48e64fb66bb09f3a.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/33/338975c9c725c4146ae2eee3933f4a85f9c2f115.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/36/361d39f794648a08cb9406c83d158220c347bb09.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/36/364d01a33894c1318342a60513444fea9f79f626.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/37/3760526ebf9920e390f38d721bd4effaecc3265c.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/3a/3a88715c2d02f41769b36f97cc570d5770a32ccc.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/3a/3aff65596faed59f9ea33ee9452d0e153ae9d3d5.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/3c/3cc215bf1d754958f357d474d049774db8f3b9e5.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/3e/3e3d3ac6346a8cafb643956eb1e4e90c54adeff0.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/3e/3eabd99f8e0f3fab49d501dac0f56cb63904bbcd.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/3f/3f2ffe70410dd117d147aa7c9feb072a8f3d1c80.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/3f/3fad4e091d61f24c210253e31673d3f211b79fe6.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/40/405594dae0acbcf5943de3d37764a402bd7ab863.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/42/42d93a134c140d54d42b87e62b2bd7f4d1725dcb.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/44/44bc75aeccf2b62e28cc9c5e8625165149f06afc.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/45/45b1a4617d02872cdb3cf169cda0dafbc514c065.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/46/464dd4dd02051c93fe0a923037104d7466493cc4.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/46/46a1ec401c74e36b3e78d64c045fe1e8c73479ed.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/47/47b15748ecc8e952c5935170090db7c269ce4b4f.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/48/48aaf1da9402bb0414597607011113f2852d4dc2.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/4d/4d006a3643aedd8782c700ef93c1dd03fe8d4d6b.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/4f/4f3af4a617fd58cd7638129886ba749e38d74fd0.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/4f/4fb1d6240092ae6c3b97164efd0529b27e935af1.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/51/515fab57bd8558f7621bbd33ab04891cb2b8811a.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/52/52199dbf885e9ec1c33e31cde43d2a282dbd5a39.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/56/56fd215b6b3d0436eae86a247d4b0dc543e49390.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/57/571c8f6ab65e01badee44f72848f6375c4712600.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/57/572bf27dfedabdb5a9d3c7981b098e71dca49f0f.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/58/5813b6b7f9eb3d89e58a3a4b26364d7e1062255e.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/58/58218339f1e12918006f36e0cfd826fc23983e57.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/59/595f27fe648f1942abb804c8fbb9342ecf345a4e.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/59/59a310c93c725583f6365f711ff3ba6f6d022b13.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/5a/5a04bd49ab8afaf758cd327491fedb96f3865d3e.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/5d/5d281d1e5368816eaa425ac9a876e265bdeb0f1b.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/5e/5e1d04de66ffcc5dfd813530ab6992e6daaae417.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/5e/5e58d8a07a334d81a70b361ad73b5e8a5e447688.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/5f/5f04c8e98522ce9584f2216a606b11301e8e357a.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/5f/5f4e17dea5e6b15424f9d7af77a70beb8bcdf153.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/62/625d155c06d982dcf6562f7b33f057c2000f7a35.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/66/668a6732f464095a0d6f139f3b99925ffb4003f2.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/66/668cfaa1a816b8698bcfe18181d4964d1dc45605.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/67/670da6e74eb825895d78773d5fb7e693456cbfaa.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/68/68b6ca4c477007e9b1bc0d43b4a14c3bc1a3aad5.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/69/697b5fbc6357cededb5ebe4e63254276d07daea9.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/6b/6b54b54984147f1b32fe68dbaa766f3b2000c508.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/6b/6bcb7516b24c37fa7330dcd3d4d2ccb53905f22d.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/6c/6c378d3e96a933397f034cbb46862b36c3159642.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/6c/6c6a73ab3cbe75c885f6d1dd673ae5fab0179fd4.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/6c/6c902550934daa388a7f4bd6b7d3a5e821ab7b79.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/6d/6d7787be02fc4a01b9a562c5c015699be31a2269.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/6e/6e7927959ad433000d17dce5491f498151cf36a1.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/74/749166eff8c546e24e0c1bd4db17cf7b85af8cf2.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/74/74ab792fd8b045e2ac5e42386036bd8a784d7a83.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/74/74bb6da9ab65e93b7e2925112c3d7c30b0fadfb3.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/74/74c451a6c26a806eb6fa35fe1be696d8e18b5a55.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/77/77efb475527df5be676d213528b5ced7955ce2ac.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/78/787752147806941a97858ca492d13c388b1e12b9.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/7a/7a574ec4e525727674ae7f5c8c1809f297404050.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/7d/7dd3b89f71ee9ee97d78aa0ce502fbf9ffd1591c.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/7f/7f1789992aed7f13d9a17497c169cbbc3912b5c1.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/81/8155cab5fb6d2b6bf6bacf3ed8168a4020ffdd34.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/81/8161bdf39d77246e52a863a09a61cb13dd66d475.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/83/83fdb95bddd831f110af1c74760c826cebb32320.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/84/84effe1a1f62eb33ba16625a6129c21f32c80689.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/85/854e53ad0c1c900867bb3e38b74b8aaf39b05517.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/86/86eb39f23878c96ac9ca0a3c0171051d4449cbd5.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/87/8772b8f072c56c428c182689f088a4190f73110d.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/87/87c12e93d8d3b7b0509c2b191a294c488a14da87.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/87/87e4a5b01caf2064c8cfbba9838e98683da95ed3.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/89/89196469f0ff6239dde91a79ecea47656acdda7f.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/89/891c79cc3525c8953dc38d3952360b1c6a6fc91f.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/89/891f6ae35ed50d8ee116d5081d309a2139cb1f55.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/8a/8a3d6b9a31578b2614976a87b55da6b1305c5407.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/8a/8add2b852c170d1d1ca460b388ad1b0ab28e6156.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/8c/8cad3faa6a8b5a9b56a42297d8581b70c81bd4e1.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/8c/8cd1937ea79bdfed87f7af58afb69e3246c362f3.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/8d/8d91434d05e3b1d6e19cffdb2a684e984f2f5991.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/8d/8dff77fcaf116493419ad088b481af6a4fc10114.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/8f/8f1132ee0db0983091d41e2f856bf5bf0af3b2f5.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/8f/8f3b546183f36253bc8c454c70e9b8fbefb922ff.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/90/90d475a7054803e545ad8a4f6e6868f608f55f6d.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/91/912bf56237775ea922c9d891e7cc8f1cd019d308.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/94/94015317cc0c78f6e1899a1f7eba73bcec65b371.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/94/94a348c0208e96952918834c70333658f876cde9.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/94/94f8cd2a1888db8f59f1d8f3030ba8b7f50bf3d2.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/95/95632618c0f551232d080babe816c7e8228aaf53.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/98/98a81befbeda1076bba948201f50294a85cc61e6.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/99/99db985423ee055b8fb4316d524a91bc22870f17.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/9a/9a889ec32d482cfe17903fdcc469511a417950b0.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/9b/9b08e8cee2d7f7bedff6fa2bfbe2c6df5b15e349.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/9c/9c530c9fdb85289e34d2176bcaa511a0bfdb9e3c.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/9d/9d464fa3e71f5ee633a65b39defaff34912f8456.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/9d/9db7f1983a4fa1edf6213bca2caa61ec4026cece.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/9e/9e3d03b7e7e60a616b3035af99b9ea43979ccf43.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/a0/a020241393e5c9788f977eaf9de0b0d8d9c66ff5.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/a3/a3023fbcec1c59bde87572af9b5c3486e515080a.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/a3/a3c8e67f1bd40c0642728d94c5415ee8a96e5eaa.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/a3/a3ede89335933964727b486c8f69eb99abc78601.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/a4/a41cc954b085ad5a93e71bdfbdb675e99e173ecd.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/a4/a4d7e09e485d3552853c661f4cd30ca35a42f08d.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/a5/a519965b93dc0b1921febca0183228564d9eee72.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/a5/a58a71ed80434868fb8810b5a3027e0bf5223c40.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/a7/a74754103cbbd024e69f4caec56f8ce9481448f8.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/a7/a794081f3fb8dd91b746e26103b6a5d218317d28.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/aa/aa82fa4703a4d43e494d8342c568fa83052c2a00.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/ab/ab017b74c73e98cf9ee73581f26e8ede95d0b5aa.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/ab/abaa245b99298141b3f1958ed5af6b2bcec74b77.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/ac/ac387008baf3577ae9168fd267cc8fc08dce9203.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/ac/ac771183697485fc6e7d0811d57341e2477b6f32.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/ae/ae0f25c36f3df7432704d2bf7e1dbe0d0273513e.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/b1/b1a26ccf1a429fc72cfff9a3b4419a4c5886270d.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/b4/b44f8b25b8edf496c954c87abf9e73f992c0b26d.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/b5/b5d926b78c0ca46b2e63aa5ed1a2491f4225ecca.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/ba/bab093ba2af354496638140bb68de7d473dd215c.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/bd/bd7bf351de353254abead31a09f14e0d87a0633f.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/bd/bd9cd5c53b27c190f63541df132b4b29f54b9dd9.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/bd/bdf7a339b44a37e42b34c1561828dd031f37f95a.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/c0/c08e2e1c5ccfc0f4c6ed2ba1fb5cde835ebf53b7.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/c1/c16c7b18552b3fc8b2a52f6d5c6f5634ba03bcda.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/c5/c55b35eb191bca8e58fbab3b4e69302308bdd0c3.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/c5/c59f20e7cc2d121a4c984a45dd615e2cc84be5a7.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/c7/c73ee86a3151a5652537a0cdf85eb2544c2ac2fc.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/c8/c8241f8aa6cded21d2f4c182db3240c8c80f5acd.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/c9/c911569ea160a4acb105a087c4c99a8133cc6ad2.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/c9/c9d65d7d2ae53bd4e2a501d2b9e8a465681d039d.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/c9/c9fc3943bb5e40c85ade2f8bd88314f327f40ec7.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/ca/ca5efeb46a4701590fffc385c7cc9f0f693389fc.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/cb/cbd188d48e4202497c0f72bd16bb87da5ef6f2d1.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/ce/ce10b80357bb5082e5834e41bfc9d842f114f45b.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/cf/cfed60fdfa127afcb252a0507c939b2e6d710f4a.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/d0/d050cf2300644013dd8cb6702d7131635f651fd2.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/d2/d25c3322121da7330cfaba960c9517632a0ff944.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/d3/d35431714a5bc9b48fad9121b319978f5f34bed8.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/d6/d6cabc27537ccaf079a2064ef3b96519b25f6c85.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/da/da39a3ee5e6b4b0d3255bfef95601890afd80709.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/da/da866910c208578c2c480996b8f954aa1ab590a1.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/db/db182b0d3ea5e048b3e869ea5f3010741accba03.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/dc/dc51964367858a68e8535d6469dd458b6ba901bd.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/dd/dd80704ba87713ec4a22e4bc45c69cb28591c907.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/dd/dde630d9e7c16214e15471c54bfb5e6f6a438efd.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/de/de51647d95849ef82e410e841ad7472895a45c08.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/de/dee616359ba67ec117dffff180ca1669936f867a.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/df/df65a8a27c87f1048f63bf5425146ada309e0042.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/df/dfc3cbd62eadfc9c19e1481956d39d3f78bcb631.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/e0/e00bd01aaeb4abbbaa963b83ef9b8fc9ff93c944.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/e3/e31bc70650fefc87ee8e537155c125d24f11c484.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/e7/e78c57614ab2a63318d6d6b1fcdde440f5f47cf9.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/e8/e8395bc3b71c1792e8a9fe2b5896f8a263b73e57.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/e9/e9c483bf05438060fe1bcbf50fec15e3e5f96514.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/ea/ea3ef4fbc860418881fc8e3efaef12369b1c858c.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/ea/eac5f5e9f6f8cab74dcb0452c5173d2a1944ce01.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/ed/edbf362730f0f3d815f3b0ae22207cb7d9615695.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/ee/ee3c211940aae62be90eccd5e6da149da079ba7c.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/ef/efe4e6fc3b4b3682712980af8b94ae14cb294d33.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/f0/f09b1f3552567c912a993da851d7016c8481685b.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/f0/f0dcf1670d184c7e3efd7864797fd7b745b6bafc.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/f1/f172784ffef766d0efe968a17adaac35c87924ff.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/f1/f187db5d81d807f7a4be8e690e725d8dd82fdb65.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/f1/f1fb5c24b06f5285a19173c9c4f834ea90ec5363.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/f2/f20e3547e49aa4c0b0d16561bfd892e6033fd46d.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/f2/f28f71d8657521632dd5fb0a70026a6ce407e60d.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/f3/f3685fb5bb5629016249592d02bc3d60a4b72e50.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/f4/f48d51886747a7bb88daf54ea7b7aa914607f5dd.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/f4/f4dda42d5cff055dd900dc56988ee4a55c7431e2.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/f5/f558604348185cbfa01f7a96be6c925909d79515.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/f7/f701f327c83d2ffcf07fb071e5c135e223413720.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/f7/f721594f8b78f89886bccf09b4b52038dfe1b0db.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/f8/f854b5c665bc7738d913c722a7dd3991befe68a2.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/f8/f89ac51bd77fc899b6f8fe81d7957e17659037cd.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/fa/fa8489441ac82d22567b5c3d5b494576df54f37d.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/fb/fb204cea8eb501738d9e4ec41eb60316a3896b12.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/fb/fb57921a14cfc57fcfdc9ae090915910e58b90e4.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/fb/fb80c8c407241aa3266ea0297d0973b4109368c7.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/fb/fbaab675ab97abde1c3353748e9f3d129bd92023.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/fc/fc2350e45b0c7bdac7ac35f42b65f5fdfd622464.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/fc/fc253270c36a209bcb1a8a7efc73b7bc27c5dec6.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/fe/fec3f9b96c660796ba167efb57158c7afe7d751e.svn-base create mode 100644 Old Matlab Interface/.svn/pristine/fe/fed3c95fe8e06ff11d5eaaafdea8c28f8c7577ed.svn-base create mode 100644 Old Matlab Interface/.svn/wc.db create mode 100644 Old Matlab Interface/GUIDE/figstate.m create mode 100644 Old Matlab Interface/GUIDE/figstate.p create mode 100644 Old Matlab Interface/GUIDE/figstate_7a.p create mode 100644 Old Matlab Interface/GUIDE/launchgui.m create mode 100644 Old Matlab Interface/GUIDE/maxfig.m create mode 100644 Old Matlab Interface/GUIDE/maxfig.p create mode 100644 Old Matlab Interface/GUIDE/maxfig_7a.p create mode 100644 Old Matlab Interface/GUIDE/minfig.m create mode 100644 Old Matlab Interface/GUIDE/minfig.p create mode 100644 Old Matlab Interface/GUIDE/untitled.fig create mode 100644 Old Matlab Interface/GUIDE/untitled.m create mode 100644 Old Matlab Interface/HelloWorld.exe create mode 100644 Old Matlab Interface/ISOLOOPTEST.m create mode 100644 Old Matlab Interface/MYFIRSTWAVEFORM.txt create mode 100644 Old Matlab Interface/MYFIRSTWAVEFORM_CLEANED.txt create mode 100644 Old Matlab Interface/USB_CTRL_SEND.c create mode 100644 Old Matlab Interface/USB_CTRL_SEND.mexw64 create mode 100644 Old Matlab Interface/USB_INIT.c create mode 100644 Old Matlab Interface/USB_INIT.mexw64 create mode 100644 Old Matlab Interface/USB_ISO_INIT.c create mode 100644 Old Matlab Interface/USB_ISO_INIT.mexw64 create mode 100644 Old Matlab Interface/USB_ISO_LOOP.c create mode 100644 Old Matlab Interface/USB_ISO_LOOP.mexw64 create mode 100644 Old Matlab Interface/USB_POOL_FREE.c create mode 100644 Old Matlab Interface/USB_POOL_FREE.mexw64 create mode 100644 Old Matlab Interface/amp2bin.m create mode 100644 Old Matlab Interface/autogain.m create mode 100644 Old Matlab Interface/avrbreak.m create mode 100644 Old Matlab Interface/avrbreakcl.m create mode 100644 Old Matlab Interface/axes1_ButtonDownFcn.m create mode 100644 Old Matlab Interface/bin/dll/amd64/libusbK.dll create mode 100644 Old Matlab Interface/bin/dll/ia64/libusbK.dll create mode 100644 Old Matlab Interface/bin/dll/x86/libusbK.dll create mode 100644 Old Matlab Interface/bin/lib/amd64/libusbK.lib create mode 100644 Old Matlab Interface/bin/lib/ia64/libusbK.lib create mode 100644 Old Matlab Interface/bin/lib/static/amd64/libusbK.lib create mode 100644 Old Matlab Interface/bin/lib/static/ia64/libusbK.lib create mode 100644 Old Matlab Interface/bin/lib/static/x86/libusbK.lib create mode 100644 Old Matlab Interface/bin/lib/x86/libusbK.lib create mode 100644 Old Matlab Interface/bindings/examples_csharp/BenchmarkTestDevice.cs create mode 100644 Old Matlab Interface/bindings/examples_csharp/Handle.Test/Handle.Test.csproj create mode 100644 Old Matlab Interface/bindings/examples_csharp/Handle.Test/Program.cs create mode 100644 Old Matlab Interface/bindings/examples_csharp/Handle.Test/Properties/AssemblyInfo.cs create mode 100644 Old Matlab Interface/bindings/examples_csharp/Handle.Test/Properties/Resources.Designer.cs create mode 100644 Old Matlab Interface/bindings/examples_csharp/Handle.Test/Properties/Resources.resx create mode 100644 Old Matlab Interface/bindings/examples_csharp/Handle.Test/Properties/Settings.Designer.cs create mode 100644 Old Matlab Interface/bindings/examples_csharp/Handle.Test/Properties/Settings.settings create mode 100644 Old Matlab Interface/bindings/examples_csharp/Handle.Test/TextBoxTraceListener.cs create mode 100644 Old Matlab Interface/bindings/examples_csharp/Handle.Test/fHandleTest.Designer.cs create mode 100644 Old Matlab Interface/bindings/examples_csharp/Handle.Test/fHandleTest.cs create mode 100644 Old Matlab Interface/bindings/examples_csharp/Handle.Test/fHandleTest.resx create mode 100644 Old Matlab Interface/bindings/examples_csharp/HiPerfTimer.cs create mode 100644 Old Matlab Interface/bindings/examples_csharp/Hot.Plug.Detect.GUI/Form1.Designer.cs create mode 100644 Old Matlab Interface/bindings/examples_csharp/Hot.Plug.Detect.GUI/Form1.cs create mode 100644 Old Matlab Interface/bindings/examples_csharp/Hot.Plug.Detect.GUI/Form1.resx create mode 100644 Old Matlab Interface/bindings/examples_csharp/Hot.Plug.Detect.GUI/Hot.Plug.Detect.GUI.csproj create mode 100644 Old Matlab Interface/bindings/examples_csharp/Hot.Plug.Detect.GUI/Program.cs create mode 100644 Old Matlab Interface/bindings/examples_csharp/Hot.Plug.Detect.GUI/Properties/AssemblyInfo.cs create mode 100644 Old Matlab Interface/bindings/examples_csharp/Hot.Plug.Detect.GUI/Properties/Resources.Designer.cs create mode 100644 Old Matlab Interface/bindings/examples_csharp/Hot.Plug.Detect.GUI/Properties/Resources.resx create mode 100644 Old Matlab Interface/bindings/examples_csharp/Hot.Plug.Detect.GUI/Properties/Settings.Designer.cs create mode 100644 Old Matlab Interface/bindings/examples_csharp/Hot.Plug.Detect.GUI/Properties/Settings.settings create mode 100644 Old Matlab Interface/bindings/examples_csharp/Hot.Plug.Detect/Hot.Plug.Detect.csproj create mode 100644 Old Matlab Interface/bindings/examples_csharp/Hot.Plug.Detect/Program.cs create mode 100644 Old Matlab Interface/bindings/examples_csharp/Hot.Plug.Detect/Properties/AssemblyInfo.cs create mode 100644 Old Matlab Interface/bindings/examples_csharp/List.Devices/List.Devices.csproj create mode 100644 Old Matlab Interface/bindings/examples_csharp/List.Devices/Program.cs create mode 100644 Old Matlab Interface/bindings/examples_csharp/List.Devices/Properties/AssemblyInfo.cs create mode 100644 Old Matlab Interface/bindings/examples_csharp/Read.Isochronous/Program.cs create mode 100644 Old Matlab Interface/bindings/examples_csharp/Read.Isochronous/Properties/AssemblyInfo.cs create mode 100644 Old Matlab Interface/bindings/examples_csharp/Read.Isochronous/Read.Isochronous.csproj create mode 100644 Old Matlab Interface/bindings/examples_csharp/Read.Isochronous/app.config create mode 100644 Old Matlab Interface/bindings/examples_csharp/TestParameters.cs create mode 100644 Old Matlab Interface/bindings/examples_csharp/Xfer.Async/Program.cs create mode 100644 Old Matlab Interface/bindings/examples_csharp/Xfer.Async/Properties/AssemblyInfo.cs create mode 100644 Old Matlab Interface/bindings/examples_csharp/Xfer.Async/Xfer.Async.csproj create mode 100644 Old Matlab Interface/bindings/examples_csharp/Xfer.Sync/Program.cs create mode 100644 Old Matlab Interface/bindings/examples_csharp/Xfer.Sync/Properties/AssemblyInfo.cs create mode 100644 Old Matlab Interface/bindings/examples_csharp/Xfer.Sync/Xfer.Sync.csproj create mode 100644 Old Matlab Interface/bindings/examples_csharp/Xfer.Threaded.Stream/Program.cs create mode 100644 Old Matlab Interface/bindings/examples_csharp/Xfer.Threaded.Stream/Properties/AssemblyInfo.cs create mode 100644 Old Matlab Interface/bindings/examples_csharp/Xfer.Threaded.Stream/Xfer.Stm.csproj create mode 100644 Old Matlab Interface/bindings/examples_csharp/Xfer.UsbStream/Program.cs create mode 100644 Old Matlab Interface/bindings/examples_csharp/Xfer.UsbStream/Properties/AssemblyInfo.cs create mode 100644 Old Matlab Interface/bindings/examples_csharp/Xfer.UsbStream/UsbStream.cs create mode 100644 Old Matlab Interface/bindings/examples_csharp/Xfer.UsbStream/Xfer.UsbStream.csproj create mode 100644 Old Matlab Interface/bindings/examples_csharp/libusbK_Examples.sln create mode 100644 Old Matlab Interface/bindings/examples_delphi/enumerate.dpr create mode 100644 Old Matlab Interface/bindings/examples_delphi/opendevice.dpr create mode 100644 Old Matlab Interface/bindings/libusbK.boo create mode 100644 Old Matlab Interface/bindings/libusbK.cs create mode 100644 Old Matlab Interface/bindings/libusbK.pas create mode 100644 Old Matlab Interface/bindings/libusbK.vb create mode 100644 Old Matlab Interface/cmeasuretest.m create mode 100644 Old Matlab Interface/compile.m create mode 100644 Old Matlab Interface/conv_ana.m create mode 100644 Old Matlab Interface/conv_ana_notrig.m create mode 100644 Old Matlab Interface/conv_dig.m create mode 100644 Old Matlab Interface/crash_recover.m create mode 100644 Old Matlab Interface/displaypacket.m create mode 100644 Old Matlab Interface/dofrontend.m create mode 100644 Old Matlab Interface/dotheplot.m create mode 100644 Old Matlab Interface/draw_triggered.m create mode 100644 Old Matlab Interface/drawdick.m create mode 100644 Old Matlab Interface/expected_adc.m create mode 100644 Old Matlab Interface/findtest.m create mode 100644 Old Matlab Interface/first_gui.fig create mode 100644 Old Matlab Interface/first_gui.m create mode 100644 Old Matlab Interface/first_gui_test.m create mode 100644 Old Matlab Interface/helloworld.cpp create mode 100644 Old Matlab Interface/helloworld.mexw64 create mode 100644 Old Matlab Interface/hexoffset.m create mode 100644 Old Matlab Interface/hs_err_pid1976.log create mode 100644 Old Matlab Interface/hs_err_pid4968.log create mode 100644 Old Matlab Interface/includes/libusbk.h create mode 100644 Old Matlab Interface/includes/lusbk_dynapi.c create mode 100644 Old Matlab Interface/includes/lusbk_shared.h create mode 100644 Old Matlab Interface/isoLog.txt create mode 100644 Old Matlab Interface/iso_incoming.m create mode 100644 Old Matlab Interface/keep_in_sync.m create mode 100644 Old Matlab Interface/launchgui.m create mode 100644 Old Matlab Interface/lcdtoggle.m create mode 100644 Old Matlab Interface/make_waveforms.m create mode 100644 Old Matlab Interface/mexHW.m create mode 100644 Old Matlab Interface/mex_usb_init.m create mode 100644 Old Matlab Interface/mex_usb_iso_init.m create mode 100644 Old Matlab Interface/mex_usb_iso_loop.m create mode 100644 Old Matlab Interface/mex_usb_send_control.m create mode 100644 Old Matlab Interface/plotcursors.m create mode 100644 Old Matlab Interface/plotiso.m create mode 100644 Old Matlab Interface/plotmem.m create mode 100644 Old Matlab Interface/plotspeedtest.m create mode 100644 Old Matlab Interface/plotyy_test.m create mode 100644 Old Matlab Interface/printusb.m create mode 100644 Old Matlab Interface/psucal.m create mode 100644 Old Matlab Interface/psutest_boost.m create mode 100644 Old Matlab Interface/resynchronise.m create mode 100644 Old Matlab Interface/returnempty.m create mode 100644 Old Matlab Interface/samplestoshow_not_on_500.PNG create mode 100644 Old Matlab Interface/samplestoshow_on_500.png create mode 100644 Old Matlab Interface/scroll_function.m create mode 100644 Old Matlab Interface/seconds_recorded.m create mode 100644 Old Matlab Interface/set_gain_auto.m create mode 100644 Old Matlab Interface/setpsu.m create mode 100644 Old Matlab Interface/setpsu_boost.m create mode 100644 Old Matlab Interface/setscopegain.m create mode 100644 Old Matlab Interface/setscopemode.m create mode 100644 Old Matlab Interface/setscopewindowsize.m create mode 100644 Old Matlab Interface/signal_trip.m create mode 100644 Old Matlab Interface/sisprintf.m create mode 100644 Old Matlab Interface/static_draw.m create mode 100644 Old Matlab Interface/test.m create mode 100644 Old Matlab Interface/test1.m create mode 100644 Old Matlab Interface/test12bit.m create mode 100644 Old Matlab Interface/tet.m create mode 100644 Old Matlab Interface/timer30ms_callback.m create mode 100644 Old Matlab Interface/timer_strap.m create mode 100644 Old Matlab Interface/tiny_send_auxwf.m create mode 100644 Old Matlab Interface/tiny_send_dig.m create mode 100644 Old Matlab Interface/tiny_send_waveform.m create mode 100644 Old Matlab Interface/tiny_wave_conv.m create mode 100644 Old Matlab Interface/tiny_wave_conv_aux.m create mode 100644 Old Matlab Interface/undofrontend.m create mode 100644 Old Matlab Interface/updatescopeaxes.m create mode 100644 Old Matlab Interface/verr.m create mode 100644 Old Matlab Interface/vexconv.m create mode 100644 Old Matlab Interface/weave.m create mode 100644 PCB/.pretty/1pin.kicad_mod create mode 100644 PCB/.pretty/3M-N7E50.kicad_mod create mode 100644 PCB/.pretty/AK300-2.kicad_mod create mode 100644 PCB/.pretty/AK300-3.kicad_mod create mode 100644 PCB/.pretty/AK300-4.kicad_mod create mode 100644 PCB/.pretty/BARREL_JACK.kicad_mod create mode 100644 PCB/.pretty/BUSPCI.kicad_mod create mode 100644 PCB/.pretty/BUS_AT.kicad_mod create mode 100644 PCB/.pretty/Banana_Jack_1Pin.kicad_mod create mode 100644 PCB/.pretty/Banana_Jack_2Pin.kicad_mod create mode 100644 PCB/.pretty/Banana_Jack_3Pin.kicad_mod create mode 100644 PCB/.pretty/C96ABCFD.kicad_mod create mode 100644 PCB/.pretty/C96ABCMD.kicad_mod create mode 100644 PCB/.pretty/CNT3BRCMS.kicad_mod create mode 100644 PCB/.pretty/CR1220.kicad_mod create mode 100644 PCB/.pretty/CR2032H.kicad_mod create mode 100644 PCB/.pretty/CR2032V.kicad_mod create mode 100644 PCB/.pretty/DB15FC.kicad_mod create mode 100644 PCB/.pretty/DB15FD.kicad_mod create mode 100644 PCB/.pretty/DB15F_CI.kicad_mod create mode 100644 PCB/.pretty/DB15MC.kicad_mod create mode 100644 PCB/.pretty/DB15MD.kicad_mod create mode 100644 PCB/.pretty/DB15M_CI.kicad_mod create mode 100644 PCB/.pretty/DB25FC.kicad_mod create mode 100644 PCB/.pretty/DB25FD.kicad_mod create mode 100644 PCB/.pretty/DB25F_CI.kicad_mod create mode 100644 PCB/.pretty/DB25MC.kicad_mod create mode 100644 PCB/.pretty/DB25MD.kicad_mod create mode 100644 PCB/.pretty/DB25M_CI.kicad_mod create mode 100644 PCB/.pretty/DB37FC.kicad_mod create mode 100644 PCB/.pretty/DB37FD.kicad_mod create mode 100644 PCB/.pretty/DB37MD.kicad_mod create mode 100644 PCB/.pretty/DB9FC.kicad_mod create mode 100644 PCB/.pretty/DB9FD.kicad_mod create mode 100644 PCB/.pretty/DB9F_CI.kicad_mod create mode 100644 PCB/.pretty/DB9F_CI_INVERT.kicad_mod create mode 100644 PCB/.pretty/DB9MC.kicad_mod create mode 100644 PCB/.pretty/DB9MD.kicad_mod create mode 100644 PCB/.pretty/DB9M_CI.kicad_mod create mode 100644 PCB/.pretty/DB9M_CI_INVERT.kicad_mod create mode 100644 PCB/.pretty/FMC_LPC_ASP-134604-01.kicad_mod create mode 100644 PCB/.pretty/GS2.kicad_mod create mode 100644 PCB/.pretty/GS3.kicad_mod create mode 100644 PCB/.pretty/GS_6x2.kicad_mod create mode 100644 PCB/.pretty/GS_8x2.kicad_mod create mode 100644 PCB/.pretty/GS_9x2.kicad_mod create mode 100644 PCB/.pretty/GTK2400-H2.kicad_mod create mode 100644 PCB/.pretty/GTK2400-V2.kicad_mod create mode 100644 PCB/.pretty/GoldTek_SCP20GR11.kicad_mod create mode 100644 PCB/.pretty/GoldTek_SCP20GS11.kicad_mod create mode 100644 PCB/.pretty/HE10-10C.kicad_mod create mode 100644 PCB/.pretty/HE10_20D.kicad_mod create mode 100644 PCB/.pretty/HE10_26D.kicad_mod create mode 100644 PCB/.pretty/HE10_34D.kicad_mod create mode 100644 PCB/.pretty/HE10_40D.kicad_mod create mode 100644 PCB/.pretty/HE10_50D.kicad_mod create mode 100644 PCB/.pretty/HE10_60D.kicad_mod create mode 100644 PCB/.pretty/HE10_64D.kicad_mod create mode 100644 PCB/.pretty/JACK_ALIM.kicad_mod create mode 100644 PCB/.pretty/JWT_Vertical_A3963-RM3.96mm-2.kicad_mod create mode 100644 PCB/.pretty/NMJ6HCD2.kicad_mod create mode 100644 PCB/.pretty/PCI-EXPRESS.kicad_mod create mode 100644 PCB/.pretty/PINHEAD1-2.kicad_mod create mode 100644 PCB/.pretty/PINHEAD1-3.kicad_mod create mode 100644 PCB/.pretty/PINHEAD1-6.kicad_mod create mode 100644 PCB/.pretty/PINTST.kicad_mod create mode 100644 PCB/.pretty/QMS-1X52-FEMALE-SMD.kicad_mod create mode 100644 PCB/.pretty/QMS-1X52-SMD.kicad_mod create mode 100644 PCB/.pretty/QMS-2X52-SMD.kicad_mod create mode 100644 PCB/.pretty/RJ12_E.kicad_mod create mode 100644 PCB/.pretty/RJ45_8.kicad_mod create mode 100644 PCB/.pretty/RJ45_TRANSFO.kicad_mod create mode 100644 PCB/.pretty/RJ45_TRANSFO_ver2.kicad_mod create mode 100644 PCB/.pretty/RJHSE538X.kicad_mod create mode 100644 PCB/.pretty/SAS_mini_1888174.kicad_mod create mode 100644 PCB/.pretty/SATA-22_SMD.kicad_mod create mode 100644 PCB/.pretty/SATA-7_SMD.kicad_mod create mode 100644 PCB/.pretty/SATA-7_THT_VERT_1.kicad_mod create mode 100644 PCB/.pretty/SATA-7_THT_VERT_2.kicad_mod create mode 100644 PCB/.pretty/SDS-50J.kicad_mod create mode 100644 PCB/.pretty/SD_Card_Receptacle.kicad_mod create mode 100644 PCB/.pretty/SMB_Straight.kicad_mod create mode 100644 PCB/.pretty/SOC676BR.kicad_mod create mode 100644 PCB/.pretty/SOC676C.kicad_mod create mode 100644 PCB/.pretty/SOC676NY.kicad_mod create mode 100644 PCB/.pretty/SUBCLICK.kicad_mod create mode 100644 PCB/.pretty/TE_Futurebus+_5536607-1.kicad_mod create mode 100644 PCB/.pretty/USB_A.kicad_mod create mode 100644 PCB/.pretty/USB_A_Vertical.kicad_mod create mode 100644 PCB/.pretty/USB_B.kicad_mod create mode 100644 PCB/.pretty/USB_Micro-B.kicad_mod create mode 100644 PCB/.pretty/USB_Micro-B_WIDE.kicad_mod create mode 100644 PCB/.pretty/USB_Mini-B.kicad_mod create mode 100644 PCB/.pretty/VASCH10x2.kicad_mod create mode 100644 PCB/.pretty/VASCH5x2.kicad_mod create mode 100644 PCB/.pretty/VASCH8x2.kicad_mod create mode 100644 PCB/.pretty/Wafer_Horizontal10x5.8x7RM2.5-3.kicad_mod create mode 100644 PCB/.pretty/Wafer_Horizontal15x5.8x7RM2.5-5.kicad_mod create mode 100644 PCB/.pretty/Wafer_Horizontal17.5x5.8x7RM2.5-6.kicad_mod create mode 100644 PCB/.pretty/Wafer_Horizontal20x5.8x7RM2.5-7.kicad_mod create mode 100644 PCB/.pretty/Wafer_Horizontal22.5x5.8x7RM2.5-8.kicad_mod create mode 100644 PCB/.pretty/Wafer_Vertical10x5.8x7RM2.5-3.kicad_mod create mode 100644 PCB/.pretty/Wafer_Vertical15x5.8x7RM2.5-5.kicad_mod create mode 100644 PCB/.pretty/Wafer_Vertical17.5x5.8x7RM2.5-6.kicad_mod create mode 100644 PCB/.pretty/Wafer_Vertical20x5.8x7RM2.5-7.kicad_mod create mode 100644 PCB/.pretty/Wafer_Vertical22.5x5.8x7RM2.5-8.kicad_mod create mode 100644 PCB/.pretty/XLR3MC.kicad_mod create mode 100644 PCB/.pretty/XLR5MC.kicad_mod create mode 100644 PCB/.pretty/bnc-ci.kicad_mod create mode 100644 PCB/.pretty/bnc.kicad_mod create mode 100644 PCB/.pretty/bornier2.kicad_mod create mode 100644 PCB/.pretty/bornier3.kicad_mod create mode 100644 PCB/.pretty/bornier4.kicad_mod create mode 100644 PCB/.pretty/bornier5.kicad_mod create mode 100644 PCB/.pretty/bornier6.kicad_mod create mode 100644 PCB/.pretty/c64abfd.kicad_mod create mode 100644 PCB/.pretty/c64abmd.kicad_mod create mode 100644 PCB/.pretty/c64acfd.kicad_mod create mode 100644 PCB/.pretty/he10-10d.kicad_mod create mode 100644 PCB/.pretty/he10-14c.kicad_mod create mode 100644 PCB/.pretty/he10-14d.kicad_mod create mode 100644 PCB/.pretty/he10-16c.kicad_mod create mode 100644 PCB/.pretty/he10-16d.kicad_mod create mode 100644 PCB/.pretty/he10-20c.kicad_mod create mode 100644 PCB/.pretty/he10-26c.kicad_mod create mode 100644 PCB/.pretty/he10-34c.kicad_mod create mode 100644 PCB/.pretty/he10-40c.kicad_mod create mode 100644 PCB/BACKUP_OLD_PCB create mode 100644 PCB/OUTPUT/OUTPUT.zip create mode 100644 PCB/OUTPUT/Tinylab_proto1-B_Cu.gbl create mode 100644 PCB/OUTPUT/Tinylab_proto1-B_Mask.gbs create mode 100644 PCB/OUTPUT/Tinylab_proto1-B_SilkS.gbo create mode 100644 PCB/OUTPUT/Tinylab_proto1-Edge_Cuts.gm1 create mode 100644 PCB/OUTPUT/Tinylab_proto1-F_Cu.gtl create mode 100644 PCB/OUTPUT/Tinylab_proto1-F_Mask.gts create mode 100644 PCB/OUTPUT/Tinylab_proto1-F_SilkS.gto create mode 100644 PCB/OUTPUT/Tinylab_proto1.drl create mode 100644 PCB/OUTPUT_V2/OUTPUT.zip create mode 100644 PCB/OUTPUT_V2/Tinylab_proto1-B_Cu.gbr create mode 100644 PCB/OUTPUT_V2/Tinylab_proto1-B_Mask.gbr create mode 100644 PCB/OUTPUT_V2/Tinylab_proto1-B_SilkS.gbr create mode 100644 PCB/OUTPUT_V2/Tinylab_proto1-Edge_Cuts.gbr create mode 100644 PCB/OUTPUT_V2/Tinylab_proto1-F_Cu.gbr create mode 100644 PCB/OUTPUT_V2/Tinylab_proto1-F_Mask.gbr create mode 100644 PCB/OUTPUT_V2/Tinylab_proto1-F_SilkS.gbr create mode 100644 PCB/OUTPUT_V2/Tinylab_proto1.drl create mode 100644 PCB/OUTPUT_V2/Tinylab_proto1.net create mode 100644 PCB/OUTPUT_V3/OUTPUT_V3.zip create mode 100644 PCB/OUTPUT_V3/Tinylab_proto1-B_Cu.gbr create mode 100644 PCB/OUTPUT_V3/Tinylab_proto1-B_Mask.gbr create mode 100644 PCB/OUTPUT_V3/Tinylab_proto1-Edge_Cuts.gbr create mode 100644 PCB/OUTPUT_V3/Tinylab_proto1-F_Cu.gbr create mode 100644 PCB/OUTPUT_V3/Tinylab_proto1-F_Mask.gbr create mode 100644 PCB/OUTPUT_V3/Tinylab_proto1.drl create mode 100644 PCB/OUTPUT_V35/Tinylab_proto1-B_Cu.gbr create mode 100644 PCB/OUTPUT_V35/Tinylab_proto1-B_Mask.gbr create mode 100644 PCB/OUTPUT_V35/Tinylab_proto1-Edge_Cuts.gbr create mode 100644 PCB/OUTPUT_V35/Tinylab_proto1-F_Cu.gbr create mode 100644 PCB/OUTPUT_V35/Tinylab_proto1-F_Mask.gbr create mode 100644 PCB/OUTPUT_V35/Tinylab_proto1.kicad_pcb create mode 100644 PCB/OUTPUT_V35/Tinylab_proto1.kicad_pcb-bak create mode 100644 PCB/OUTPUT_V35/Tinylab_proto1.net create mode 100644 PCB/OUTPUT_V35/Tinylab_proto1.pro create mode 100644 PCB/OUTPUT_V4/BOM/Tinylab_proto1.csv create mode 100644 PCB/OUTPUT_V4/BOM/Tinylab_proto1_Elecrow.csv create mode 100644 PCB/OUTPUT_V4/Drill/Tinylab_proto1.drl create mode 100644 PCB/OUTPUT_V4/Gerber/Tinylab_proto1-B.Cu.gbr create mode 100644 PCB/OUTPUT_V4/Gerber/Tinylab_proto1-B.Mask.gbr create mode 100644 PCB/OUTPUT_V4/Gerber/Tinylab_proto1-Edge.Cuts.gbr create mode 100644 PCB/OUTPUT_V4/Gerber/Tinylab_proto1-F.Cu.gbr create mode 100644 PCB/OUTPUT_V4/Gerber/Tinylab_proto1-F.Mask.gbr create mode 100644 PCB/OUTPUT_V4/Gerber/Tinylab_proto1-F.SilkS.gbr create mode 100644 PCB/OUTPUT_V4/OUTPUT_V4.zip create mode 100644 PCB/OUTPUT_V4/Tinylab_proto1.net create mode 100644 PCB/OUTPUT_V4/itead/ITEAD.zip create mode 100644 PCB/OUTPUT_V4/itead/Tinylab_proto1-B.Cu.gbr create mode 100644 PCB/OUTPUT_V4/itead/Tinylab_proto1-B.Mask.gbr create mode 100644 PCB/OUTPUT_V4/itead/Tinylab_proto1-Edge.Cuts.gbr create mode 100644 PCB/OUTPUT_V4/itead/Tinylab_proto1-F.Cu.gbr create mode 100644 PCB/OUTPUT_V4/itead/Tinylab_proto1-F.Mask.gbr create mode 100644 PCB/OUTPUT_V4/itead/Tinylab_proto1.drl create mode 100644 PCB/OUTPUT_V4/seeeed/BOM/Seeed BOM Format.ods create mode 100644 PCB/OUTPUT_V4/seeeed/BOM/Seeed BOM Format.xls create mode 100644 PCB/OUTPUT_V4/seeeed/Gerber + Drill/Tinylab_proto1-B.Cu.gbr create mode 100644 PCB/OUTPUT_V4/seeeed/Gerber + Drill/Tinylab_proto1-B.Mask.gbr create mode 100644 PCB/OUTPUT_V4/seeeed/Gerber + Drill/Tinylab_proto1-Edge.Cuts.gbr create mode 100644 PCB/OUTPUT_V4/seeeed/Gerber + Drill/Tinylab_proto1-F.Cu.gbr create mode 100644 PCB/OUTPUT_V4/seeeed/Gerber + Drill/Tinylab_proto1-F.Mask.gbr create mode 100644 PCB/OUTPUT_V4/seeeed/Gerber + Drill/Tinylab_proto1.drl create mode 100644 PCB/OUTPUT_V4/seeeed/Requirement/PCB Requirement Format.ods create mode 100644 PCB/OUTPUT_V4/seeeed/Requirement/PCB Requirement Format.xls create mode 100644 PCB/OUTPUT_V4/seeeed/seeed.zip create mode 100644 PCB/OUTPUT_V5/Tinylab_proto1-B.Cu.gbr create mode 100644 PCB/OUTPUT_V5/Tinylab_proto1-B.Mask.gbr create mode 100644 PCB/OUTPUT_V5/Tinylab_proto1-Edge.Cuts.gbr create mode 100644 PCB/OUTPUT_V5/Tinylab_proto1-F.Cu.gbr create mode 100644 PCB/OUTPUT_V5/Tinylab_proto1-F.Mask.gbr create mode 100644 PCB/OUTPUT_V5/Tinylab_proto1.drl create mode 100644 PCB/Tinylab_proto1-cache.lib create mode 100644 PCB/Tinylab_proto1-rescue.lib create mode 100644 PCB/Tinylab_proto1.bak create mode 100644 PCB/Tinylab_proto1.csv create mode 100644 PCB/Tinylab_proto1.dsn create mode 100644 PCB/Tinylab_proto1.kicad_pcb create mode 100644 PCB/Tinylab_proto1.kicad_pcb-bak create mode 100644 PCB/Tinylab_proto1.net create mode 100644 PCB/Tinylab_proto1.pro create mode 100644 PCB/Tinylab_proto1.sch create mode 100644 PCB/Tinylab_proto1.xml create mode 100644 PCB/WOT/Tinylab_proto1-B_Cu.gbr create mode 100644 PCB/WOT/Tinylab_proto1-B_Mask.gbr create mode 100644 PCB/WOT/Tinylab_proto1-B_Paste.gbr create mode 100644 PCB/WOT/Tinylab_proto1-B_SilkS.gbr create mode 100644 PCB/WOT/Tinylab_proto1-Edge_Cuts.gbr create mode 100644 PCB/WOT/Tinylab_proto1-F_Cu.gbr create mode 100644 PCB/WOT/Tinylab_proto1-F_Mask.gbr create mode 100644 PCB/WOT/Tinylab_proto1-F_Paste.gbr create mode 100644 PCB/WOT/Tinylab_proto1-F_SilkS.gbr create mode 100644 PCB/WOT/Tinylab_proto1-cache.lib create mode 100644 PCB/WOT/Tinylab_proto1.drl create mode 100644 PCB/WOT/Tinylab_proto1.kicad_pcb create mode 100644 PCB/WOT/Tinylab_proto1.kicad_pcb-bak create mode 100644 PCB/WOT/Tinylab_proto1.kicad_pcb.bak create mode 100644 PCB/WOT/Tinylab_proto1.kicad_pcb_bak create mode 100644 PCB/WOT/Tinylab_proto1.xml create mode 100644 PCB/WOT/Tinylab_proto1.zip diff --git a/AVR Code/.vs/USB_BULK_TEST/v14/.atsuo b/AVR Code/.vs/USB_BULK_TEST/v14/.atsuo new file mode 100644 index 0000000000000000000000000000000000000000..0e7b45a74c9833a73c800141e2e0acde60439030 GIT binary patch literal 130048 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 literal 0 HcmV?d00001 diff --git a/AVR Code/USB_BULK_TEST.atsln b/AVR Code/USB_BULK_TEST.atsln new file mode 100644 index 00000000..0b934536 --- /dev/null +++ b/AVR Code/USB_BULK_TEST.atsln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 11.00 +# Atmel Studio Solution File, Format Version 11.00 +Project("{54F91283-7BC4-4236-8FF9-10F437C3AD48}") = "USB_BULK_TEST", "USB_BULK_TEST\USB_BULK_TEST.cproj", "{BD2AA8D9-491B-4ECD-9255-825EAABC7BA4}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|AVR = Debug|AVR + Release|AVR = Release|AVR + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {BD2AA8D9-491B-4ECD-9255-825EAABC7BA4}.Debug|AVR.ActiveCfg = Debug|AVR + {BD2AA8D9-491B-4ECD-9255-825EAABC7BA4}.Debug|AVR.Build.0 = Debug|AVR + {BD2AA8D9-491B-4ECD-9255-825EAABC7BA4}.Release|AVR.ActiveCfg = Debug|AVR + {BD2AA8D9-491B-4ECD-9255-825EAABC7BA4}.Release|AVR.Build.0 = Debug|AVR + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/AVR Code/USB_BULK_TEST.atsuo b/AVR Code/USB_BULK_TEST.atsuo new file mode 100644 index 0000000000000000000000000000000000000000..d20afbd372a73154b5b74452dced748255ec0578 GIT binary patch literal 92672 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 E2S^U#F#rGn literal 0 HcmV?d00001 diff --git a/AVR Code/USB_BULK_TEST/Debug/Makefile b/AVR Code/USB_BULK_TEST/Debug/Makefile new file mode 100644 index 00000000..91c86f36 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/Debug/Makefile @@ -0,0 +1,375 @@ +################################################################################ +# Automatically-generated file. Do not edit! +################################################################################ + +SHELL := cmd.exe +RM := rm -rf + +USER_OBJS := + +LIBS := +PROJ := + +O_SRCS := +C_SRCS := +S_SRCS := +S_UPPER_SRCS := +OBJ_SRCS := +ASM_SRCS := +PREPROCESSING_SRCS := +OBJS := +OBJS_AS_ARGS := +C_DEPS := +C_DEPS_AS_ARGS := +EXECUTABLES := +OUTPUT_FILE_PATH := +OUTPUT_FILE_PATH_AS_ARGS := +AVR_APP_PATH :=$$$AVR_APP_PATH$$$ +QUOTE := " +ADDITIONAL_DEPENDENCIES:= +OUTPUT_FILE_DEP:= +LIB_DEP:= +LINKER_SCRIPT_DEP:= + +# Every subdirectory with source files must be described here +SUBDIRS := \ +../src/ \ +../src/ASF/ \ +../src/ASF/common/ \ +../src/ASF/common/boards/ \ +../src/ASF/common/boards/user_board/ \ +../src/ASF/common/services/ \ +../src/ASF/common/services/clock/ \ +../src/ASF/common/services/clock/xmega/ \ +../src/ASF/common/services/ioport/ \ +../src/ASF/common/services/ioport/xmega/ \ +../src/ASF/common/services/sleepmgr/ \ +../src/ASF/common/services/sleepmgr/xmega/ \ +../src/ASF/common/services/usb/ \ +../src/ASF/common/services/usb/class/ \ +../src/ASF/common/services/usb/class/vendor/ \ +../src/ASF/common/services/usb/class/vendor/device/ \ +../src/ASF/common/services/usb/class/vendor/device/example/ \ +../src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ \ +../src/ASF/common/services/usb/udc/ \ +../src/ASF/common/utils/ \ +../src/ASF/common/utils/interrupt/ \ +../src/ASF/common/utils/make/ \ +../src/ASF/xmega/ \ +../src/ASF/xmega/drivers/ \ +../src/ASF/xmega/drivers/cpu/ \ +../src/ASF/xmega/drivers/nvm/ \ +../src/ASF/xmega/drivers/sleep/ \ +../src/ASF/xmega/drivers/usb/ \ +../src/ASF/xmega/utils/ \ +../src/ASF/xmega/utils/assembler/ \ +../src/ASF/xmega/utils/bit_handling/ \ +../src/ASF/xmega/utils/preprocessor/ \ +../src/config/ + + +# Add inputs and outputs from these tool invocations to the build variables +C_SRCS += \ +../src/tiny_dig.c \ +../src/ASF/common/boards/user_board/init.c \ +../src/ASF/common/services/ioport/xmega/ioport_compat.c \ +../src/main.c \ +../src/tiny_adc.c \ +../src/tiny_dac.c \ +../src/tiny_dma.c \ +../src/tiny_timer.c \ +../src/tiny_uart.c \ +../src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.c \ +../src/ASF/common/services/clock/xmega/sysclk.c \ +../src/ASF/common/services/sleepmgr/xmega/sleepmgr.c \ +../src/ASF/common/services/usb/class/vendor/device/udi_vendor.c \ +../src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.c \ +../src/ASF/common/services/usb/udc/udc.c \ +../src/ASF/xmega/drivers/nvm/nvm.c \ +../src/ASF/xmega/drivers/usb/usb_device.c + + +PREPROCESSING_SRCS += \ +../src/ASF/xmega/drivers/cpu/ccp.s \ +../src/ASF/xmega/drivers/nvm/nvm_asm.s + + +ASM_SRCS += + + +OBJS += \ +src/tiny_dig.o \ +src/ASF/common/boards/user_board/init.o \ +src/ASF/common/services/ioport/xmega/ioport_compat.o \ +src/main.o \ +src/tiny_adc.o \ +src/tiny_dac.o \ +src/tiny_dma.o \ +src/tiny_timer.o \ +src/tiny_uart.o \ +src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o \ +src/ASF/common/services/clock/xmega/sysclk.o \ +src/ASF/common/services/sleepmgr/xmega/sleepmgr.o \ +src/ASF/common/services/usb/class/vendor/device/udi_vendor.o \ +src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o \ +src/ASF/common/services/usb/udc/udc.o \ +src/ASF/xmega/drivers/cpu/ccp.o \ +src/ASF/xmega/drivers/nvm/nvm.o \ +src/ASF/xmega/drivers/nvm/nvm_asm.o \ +src/ASF/xmega/drivers/usb/usb_device.o + +OBJS_AS_ARGS += \ +src/tiny_dig.o \ +src/ASF/common/boards/user_board/init.o \ +src/ASF/common/services/ioport/xmega/ioport_compat.o \ +src/main.o \ +src/tiny_adc.o \ +src/tiny_dac.o \ +src/tiny_dma.o \ +src/tiny_timer.o \ +src/tiny_uart.o \ +src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o \ +src/ASF/common/services/clock/xmega/sysclk.o \ +src/ASF/common/services/sleepmgr/xmega/sleepmgr.o \ +src/ASF/common/services/usb/class/vendor/device/udi_vendor.o \ +src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o \ +src/ASF/common/services/usb/udc/udc.o \ +src/ASF/xmega/drivers/cpu/ccp.o \ +src/ASF/xmega/drivers/nvm/nvm.o \ +src/ASF/xmega/drivers/nvm/nvm_asm.o \ +src/ASF/xmega/drivers/usb/usb_device.o + +C_DEPS += \ +src/tiny_dig.d \ +src/ASF/common/boards/user_board/init.d \ +src/ASF/common/services/ioport/xmega/ioport_compat.d \ +src/main.d \ +src/tiny_adc.d \ +src/tiny_dac.d \ +src/tiny_dma.d \ +src/tiny_timer.d \ +src/tiny_uart.d \ +src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.d \ +src/ASF/common/services/clock/xmega/sysclk.d \ +src/ASF/common/services/sleepmgr/xmega/sleepmgr.d \ +src/ASF/common/services/usb/class/vendor/device/udi_vendor.d \ +src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.d \ +src/ASF/common/services/usb/udc/udc.d \ +src/ASF/xmega/drivers/cpu/ccp.d \ +src/ASF/xmega/drivers/nvm/nvm.d \ +src/ASF/xmega/drivers/nvm/nvm_asm.d \ +src/ASF/xmega/drivers/usb/usb_device.d + +C_DEPS_AS_ARGS += \ +src/tiny_dig.d \ +src/ASF/common/boards/user_board/init.d \ +src/ASF/common/services/ioport/xmega/ioport_compat.d \ +src/main.d \ +src/tiny_adc.d \ +src/tiny_dac.d \ +src/tiny_dma.d \ +src/tiny_timer.d \ +src/tiny_uart.d \ +src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.d \ +src/ASF/common/services/clock/xmega/sysclk.d \ +src/ASF/common/services/sleepmgr/xmega/sleepmgr.d \ +src/ASF/common/services/usb/class/vendor/device/udi_vendor.d \ +src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.d \ +src/ASF/common/services/usb/udc/udc.d \ +src/ASF/xmega/drivers/cpu/ccp.d \ +src/ASF/xmega/drivers/nvm/nvm.d \ +src/ASF/xmega/drivers/nvm/nvm_asm.d \ +src/ASF/xmega/drivers/usb/usb_device.d + +OUTPUT_FILE_PATH +=USB_BULK_TEST.elf + +OUTPUT_FILE_PATH_AS_ARGS +=USB_BULK_TEST.elf + +ADDITIONAL_DEPENDENCIES:= + +OUTPUT_FILE_DEP:= ./makedep.mk + +LIB_DEP+= + +LINKER_SCRIPT_DEP+= + + +# AVR32/GNU C Compiler + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +src/%.o: ../src/%.c + @echo Building file: $< + @echo Invoking: AVR/GNU C Compiler : 4.8.1 + $(QUOTE)C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1061\avr8-gnu-toolchain\bin\avr-gcc.exe$(QUOTE) -x c -DDEBUG -DBOARD=USER_BOARD -I"../common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained" -I"../common/services/usb/class/vendor/device/example" -I"../src/ASF/common/services/usb/udc" -I"../src/ASF/xmega/drivers/nvm" -I"../src/ASF/common/services/sleepmgr" -I"../src/ASF/common/services/clock" -I"../src/ASF/xmega/drivers/sleep" -I"../src/ASF/xmega/drivers/usb" -I"../src/ASF/xmega/drivers/cpu" -I"../src/ASF/common/services/usb/class/vendor" -I"../src/ASF/common/services/usb/class/vendor/device" -I"../src/ASF/common/services/usb" -I"../common/applications/user_application/user_board/config" -I"../src/ASF/xmega/utils" -I"../src/config" -I"../src/ASF/common/boards" -I"../src/ASF/xmega/utils/preprocessor" -I"../src/ASF/common/utils" -I"../src" -I"../src/ASF/common/boards/user_board" -I"../src/ASF/common/services/ioport" -O1 -fdata-sections -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -mrelax -g3 -Wall -mmcu=atxmega32a4u -c -std=gnu99 -fno-strict-aliasing -Wstrict-prototypes -Wmissing-prototypes -Werror-implicit-function-declaration -Wpointer-arith -mrelax -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -o "$@" "$<" + @echo Finished building: $< + + +src/ASF/common/boards/user_board/%.o: ../src/ASF/common/boards/user_board/%.c + @echo Building file: $< + @echo Invoking: AVR/GNU C Compiler : 4.8.1 + $(QUOTE)C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1061\avr8-gnu-toolchain\bin\avr-gcc.exe$(QUOTE) -x c -DDEBUG -DBOARD=USER_BOARD -I"../common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained" -I"../common/services/usb/class/vendor/device/example" -I"../src/ASF/common/services/usb/udc" -I"../src/ASF/xmega/drivers/nvm" -I"../src/ASF/common/services/sleepmgr" -I"../src/ASF/common/services/clock" -I"../src/ASF/xmega/drivers/sleep" -I"../src/ASF/xmega/drivers/usb" -I"../src/ASF/xmega/drivers/cpu" -I"../src/ASF/common/services/usb/class/vendor" -I"../src/ASF/common/services/usb/class/vendor/device" -I"../src/ASF/common/services/usb" -I"../common/applications/user_application/user_board/config" -I"../src/ASF/xmega/utils" -I"../src/config" -I"../src/ASF/common/boards" -I"../src/ASF/xmega/utils/preprocessor" -I"../src/ASF/common/utils" -I"../src" -I"../src/ASF/common/boards/user_board" -I"../src/ASF/common/services/ioport" -O1 -fdata-sections -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -mrelax -g3 -Wall -mmcu=atxmega32a4u -c -std=gnu99 -fno-strict-aliasing -Wstrict-prototypes -Wmissing-prototypes -Werror-implicit-function-declaration -Wpointer-arith -mrelax -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -o "$@" "$<" + @echo Finished building: $< + + +src/ASF/common/services/ioport/xmega/%.o: ../src/ASF/common/services/ioport/xmega/%.c + @echo Building file: $< + @echo Invoking: AVR/GNU C Compiler : 4.8.1 + $(QUOTE)C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1061\avr8-gnu-toolchain\bin\avr-gcc.exe$(QUOTE) -x c -DDEBUG -DBOARD=USER_BOARD -I"../common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained" -I"../common/services/usb/class/vendor/device/example" -I"../src/ASF/common/services/usb/udc" -I"../src/ASF/xmega/drivers/nvm" -I"../src/ASF/common/services/sleepmgr" -I"../src/ASF/common/services/clock" -I"../src/ASF/xmega/drivers/sleep" -I"../src/ASF/xmega/drivers/usb" -I"../src/ASF/xmega/drivers/cpu" -I"../src/ASF/common/services/usb/class/vendor" -I"../src/ASF/common/services/usb/class/vendor/device" -I"../src/ASF/common/services/usb" -I"../common/applications/user_application/user_board/config" -I"../src/ASF/xmega/utils" -I"../src/config" -I"../src/ASF/common/boards" -I"../src/ASF/xmega/utils/preprocessor" -I"../src/ASF/common/utils" -I"../src" -I"../src/ASF/common/boards/user_board" -I"../src/ASF/common/services/ioport" -O1 -fdata-sections -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -mrelax -g3 -Wall -mmcu=atxmega32a4u -c -std=gnu99 -fno-strict-aliasing -Wstrict-prototypes -Wmissing-prototypes -Werror-implicit-function-declaration -Wpointer-arith -mrelax -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -o "$@" "$<" + @echo Finished building: $< + + +src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/%.o: ../src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/%.c + @echo Building file: $< + @echo Invoking: AVR/GNU C Compiler : 4.8.1 + $(QUOTE)C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1061\avr8-gnu-toolchain\bin\avr-gcc.exe$(QUOTE) -x c -DDEBUG -DBOARD=USER_BOARD -I"../common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained" -I"../common/services/usb/class/vendor/device/example" -I"../src/ASF/common/services/usb/udc" -I"../src/ASF/xmega/drivers/nvm" -I"../src/ASF/common/services/sleepmgr" -I"../src/ASF/common/services/clock" -I"../src/ASF/xmega/drivers/sleep" -I"../src/ASF/xmega/drivers/usb" -I"../src/ASF/xmega/drivers/cpu" -I"../src/ASF/common/services/usb/class/vendor" -I"../src/ASF/common/services/usb/class/vendor/device" -I"../src/ASF/common/services/usb" -I"../common/applications/user_application/user_board/config" -I"../src/ASF/xmega/utils" -I"../src/config" -I"../src/ASF/common/boards" -I"../src/ASF/xmega/utils/preprocessor" -I"../src/ASF/common/utils" -I"../src" -I"../src/ASF/common/boards/user_board" -I"../src/ASF/common/services/ioport" -O1 -fdata-sections -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -mrelax -g3 -Wall -mmcu=atxmega32a4u -c -std=gnu99 -fno-strict-aliasing -Wstrict-prototypes -Wmissing-prototypes -Werror-implicit-function-declaration -Wpointer-arith -mrelax -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -o "$@" "$<" + @echo Finished building: $< + + +src/ASF/common/services/clock/xmega/%.o: ../src/ASF/common/services/clock/xmega/%.c + @echo Building file: $< + @echo Invoking: AVR/GNU C Compiler : 4.8.1 + $(QUOTE)C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1061\avr8-gnu-toolchain\bin\avr-gcc.exe$(QUOTE) -x c -DDEBUG -DBOARD=USER_BOARD -I"../common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained" -I"../common/services/usb/class/vendor/device/example" -I"../src/ASF/common/services/usb/udc" -I"../src/ASF/xmega/drivers/nvm" -I"../src/ASF/common/services/sleepmgr" -I"../src/ASF/common/services/clock" -I"../src/ASF/xmega/drivers/sleep" -I"../src/ASF/xmega/drivers/usb" -I"../src/ASF/xmega/drivers/cpu" -I"../src/ASF/common/services/usb/class/vendor" -I"../src/ASF/common/services/usb/class/vendor/device" -I"../src/ASF/common/services/usb" -I"../common/applications/user_application/user_board/config" -I"../src/ASF/xmega/utils" -I"../src/config" -I"../src/ASF/common/boards" -I"../src/ASF/xmega/utils/preprocessor" -I"../src/ASF/common/utils" -I"../src" -I"../src/ASF/common/boards/user_board" -I"../src/ASF/common/services/ioport" -O1 -fdata-sections -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -mrelax -g3 -Wall -mmcu=atxmega32a4u -c -std=gnu99 -fno-strict-aliasing -Wstrict-prototypes -Wmissing-prototypes -Werror-implicit-function-declaration -Wpointer-arith -mrelax -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -o "$@" "$<" + @echo Finished building: $< + + +src/ASF/common/services/sleepmgr/xmega/%.o: ../src/ASF/common/services/sleepmgr/xmega/%.c + @echo Building file: $< + @echo Invoking: AVR/GNU C Compiler : 4.8.1 + $(QUOTE)C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1061\avr8-gnu-toolchain\bin\avr-gcc.exe$(QUOTE) -x c -DDEBUG -DBOARD=USER_BOARD -I"../common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained" -I"../common/services/usb/class/vendor/device/example" -I"../src/ASF/common/services/usb/udc" -I"../src/ASF/xmega/drivers/nvm" -I"../src/ASF/common/services/sleepmgr" -I"../src/ASF/common/services/clock" -I"../src/ASF/xmega/drivers/sleep" -I"../src/ASF/xmega/drivers/usb" -I"../src/ASF/xmega/drivers/cpu" -I"../src/ASF/common/services/usb/class/vendor" -I"../src/ASF/common/services/usb/class/vendor/device" -I"../src/ASF/common/services/usb" -I"../common/applications/user_application/user_board/config" -I"../src/ASF/xmega/utils" -I"../src/config" -I"../src/ASF/common/boards" -I"../src/ASF/xmega/utils/preprocessor" -I"../src/ASF/common/utils" -I"../src" -I"../src/ASF/common/boards/user_board" -I"../src/ASF/common/services/ioport" -O1 -fdata-sections -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -mrelax -g3 -Wall -mmcu=atxmega32a4u -c -std=gnu99 -fno-strict-aliasing -Wstrict-prototypes -Wmissing-prototypes -Werror-implicit-function-declaration -Wpointer-arith -mrelax -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -o "$@" "$<" + @echo Finished building: $< + + +src/ASF/common/services/usb/class/vendor/device/%.o: ../src/ASF/common/services/usb/class/vendor/device/%.c + @echo Building file: $< + @echo Invoking: AVR/GNU C Compiler : 4.8.1 + $(QUOTE)C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1061\avr8-gnu-toolchain\bin\avr-gcc.exe$(QUOTE) -x c -DDEBUG -DBOARD=USER_BOARD -I"../common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained" -I"../common/services/usb/class/vendor/device/example" -I"../src/ASF/common/services/usb/udc" -I"../src/ASF/xmega/drivers/nvm" -I"../src/ASF/common/services/sleepmgr" -I"../src/ASF/common/services/clock" -I"../src/ASF/xmega/drivers/sleep" -I"../src/ASF/xmega/drivers/usb" -I"../src/ASF/xmega/drivers/cpu" -I"../src/ASF/common/services/usb/class/vendor" -I"../src/ASF/common/services/usb/class/vendor/device" -I"../src/ASF/common/services/usb" -I"../common/applications/user_application/user_board/config" -I"../src/ASF/xmega/utils" -I"../src/config" -I"../src/ASF/common/boards" -I"../src/ASF/xmega/utils/preprocessor" -I"../src/ASF/common/utils" -I"../src" -I"../src/ASF/common/boards/user_board" -I"../src/ASF/common/services/ioport" -O1 -fdata-sections -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -mrelax -g3 -Wall -mmcu=atxmega32a4u -c -std=gnu99 -fno-strict-aliasing -Wstrict-prototypes -Wmissing-prototypes -Werror-implicit-function-declaration -Wpointer-arith -mrelax -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -o "$@" "$<" + @echo Finished building: $< + + +src/ASF/common/services/usb/udc/%.o: ../src/ASF/common/services/usb/udc/%.c + @echo Building file: $< + @echo Invoking: AVR/GNU C Compiler : 4.8.1 + $(QUOTE)C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1061\avr8-gnu-toolchain\bin\avr-gcc.exe$(QUOTE) -x c -DDEBUG -DBOARD=USER_BOARD -I"../common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained" -I"../common/services/usb/class/vendor/device/example" -I"../src/ASF/common/services/usb/udc" -I"../src/ASF/xmega/drivers/nvm" -I"../src/ASF/common/services/sleepmgr" -I"../src/ASF/common/services/clock" -I"../src/ASF/xmega/drivers/sleep" -I"../src/ASF/xmega/drivers/usb" -I"../src/ASF/xmega/drivers/cpu" -I"../src/ASF/common/services/usb/class/vendor" -I"../src/ASF/common/services/usb/class/vendor/device" -I"../src/ASF/common/services/usb" -I"../common/applications/user_application/user_board/config" -I"../src/ASF/xmega/utils" -I"../src/config" -I"../src/ASF/common/boards" -I"../src/ASF/xmega/utils/preprocessor" -I"../src/ASF/common/utils" -I"../src" -I"../src/ASF/common/boards/user_board" -I"../src/ASF/common/services/ioport" -O1 -fdata-sections -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -mrelax -g3 -Wall -mmcu=atxmega32a4u -c -std=gnu99 -fno-strict-aliasing -Wstrict-prototypes -Wmissing-prototypes -Werror-implicit-function-declaration -Wpointer-arith -mrelax -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -o "$@" "$<" + @echo Finished building: $< + + +src/ASF/xmega/drivers/nvm/%.o: ../src/ASF/xmega/drivers/nvm/%.c + @echo Building file: $< + @echo Invoking: AVR/GNU C Compiler : 4.8.1 + $(QUOTE)C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1061\avr8-gnu-toolchain\bin\avr-gcc.exe$(QUOTE) -x c -DDEBUG -DBOARD=USER_BOARD -I"../common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained" -I"../common/services/usb/class/vendor/device/example" -I"../src/ASF/common/services/usb/udc" -I"../src/ASF/xmega/drivers/nvm" -I"../src/ASF/common/services/sleepmgr" -I"../src/ASF/common/services/clock" -I"../src/ASF/xmega/drivers/sleep" -I"../src/ASF/xmega/drivers/usb" -I"../src/ASF/xmega/drivers/cpu" -I"../src/ASF/common/services/usb/class/vendor" -I"../src/ASF/common/services/usb/class/vendor/device" -I"../src/ASF/common/services/usb" -I"../common/applications/user_application/user_board/config" -I"../src/ASF/xmega/utils" -I"../src/config" -I"../src/ASF/common/boards" -I"../src/ASF/xmega/utils/preprocessor" -I"../src/ASF/common/utils" -I"../src" -I"../src/ASF/common/boards/user_board" -I"../src/ASF/common/services/ioport" -O1 -fdata-sections -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -mrelax -g3 -Wall -mmcu=atxmega32a4u -c -std=gnu99 -fno-strict-aliasing -Wstrict-prototypes -Wmissing-prototypes -Werror-implicit-function-declaration -Wpointer-arith -mrelax -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -o "$@" "$<" + @echo Finished building: $< + + +src/ASF/xmega/drivers/usb/%.o: ../src/ASF/xmega/drivers/usb/%.c + @echo Building file: $< + @echo Invoking: AVR/GNU C Compiler : 4.8.1 + $(QUOTE)C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1061\avr8-gnu-toolchain\bin\avr-gcc.exe$(QUOTE) -x c -DDEBUG -DBOARD=USER_BOARD -I"../common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained" -I"../common/services/usb/class/vendor/device/example" -I"../src/ASF/common/services/usb/udc" -I"../src/ASF/xmega/drivers/nvm" -I"../src/ASF/common/services/sleepmgr" -I"../src/ASF/common/services/clock" -I"../src/ASF/xmega/drivers/sleep" -I"../src/ASF/xmega/drivers/usb" -I"../src/ASF/xmega/drivers/cpu" -I"../src/ASF/common/services/usb/class/vendor" -I"../src/ASF/common/services/usb/class/vendor/device" -I"../src/ASF/common/services/usb" -I"../common/applications/user_application/user_board/config" -I"../src/ASF/xmega/utils" -I"../src/config" -I"../src/ASF/common/boards" -I"../src/ASF/xmega/utils/preprocessor" -I"../src/ASF/common/utils" -I"../src" -I"../src/ASF/common/boards/user_board" -I"../src/ASF/common/services/ioport" -O1 -fdata-sections -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -mrelax -g3 -Wall -mmcu=atxmega32a4u -c -std=gnu99 -fno-strict-aliasing -Wstrict-prototypes -Wmissing-prototypes -Werror-implicit-function-declaration -Wpointer-arith -mrelax -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -o "$@" "$<" + @echo Finished building: $< + + + + +# AVR32/GNU Preprocessing Assembler + + + +# AVR32/GNU Assembler +src/ASF/xmega/drivers/cpu/ccp.o: ../src/ASF/xmega/drivers/cpu/ccp.s + @echo Building file: $< + @echo Invoking: AVR32/GNU Assembler : 4.8.1 + $(QUOTE)C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1061\avr8-gnu-toolchain\bin\avr-gcc.exe$(QUOTE) -Wa,-gdwarf2 -x assembler-with-cpp -c -mmcu=atxmega32a4u -mrelax -DBOARD=USER_BOARD -I "../common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained" -I "../common/services/usb/class/vendor/device/example" -I "../src/ASF/common/services/usb/udc" -I "../src/ASF/xmega/drivers/nvm" -I "../src/ASF/common/services/sleepmgr" -I "../src/ASF/common/services/clock" -I "../src/ASF/xmega/drivers/sleep" -I "../src/ASF/xmega/drivers/usb" -I "../src/ASF/xmega/drivers/cpu" -I "../src/ASF/common/services/usb/class/vendor" -I "../src/ASF/common/services/usb/class/vendor/device" -I "../src/ASF/common/services/usb" -I "../common/applications/user_application/user_board/config" -I "../src/ASF/xmega/utils" -I "../src/config" -I "../src/ASF/common/boards" -I "../src/ASF/xmega/utils/preprocessor" -I "../src/ASF/common/utils" -I "../src" -I "../src/ASF/common/boards/user_board" -I "../src/ASF/common/services/ioport" -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -mrelax -Wa,-g -o "$@" "$<" + @echo Finished building: $< + + +src/ASF/xmega/drivers/nvm/nvm_asm.o: ../src/ASF/xmega/drivers/nvm/nvm_asm.s + @echo Building file: $< + @echo Invoking: AVR32/GNU Assembler : 4.8.1 + $(QUOTE)C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1061\avr8-gnu-toolchain\bin\avr-gcc.exe$(QUOTE) -Wa,-gdwarf2 -x assembler-with-cpp -c -mmcu=atxmega32a4u -mrelax -DBOARD=USER_BOARD -I "../common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained" -I "../common/services/usb/class/vendor/device/example" -I "../src/ASF/common/services/usb/udc" -I "../src/ASF/xmega/drivers/nvm" -I "../src/ASF/common/services/sleepmgr" -I "../src/ASF/common/services/clock" -I "../src/ASF/xmega/drivers/sleep" -I "../src/ASF/xmega/drivers/usb" -I "../src/ASF/xmega/drivers/cpu" -I "../src/ASF/common/services/usb/class/vendor" -I "../src/ASF/common/services/usb/class/vendor/device" -I "../src/ASF/common/services/usb" -I "../common/applications/user_application/user_board/config" -I "../src/ASF/xmega/utils" -I "../src/config" -I "../src/ASF/common/boards" -I "../src/ASF/xmega/utils/preprocessor" -I "../src/ASF/common/utils" -I "../src" -I "../src/ASF/common/boards/user_board" -I "../src/ASF/common/services/ioport" -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -mrelax -Wa,-g -o "$@" "$<" + @echo Finished building: $< + + + +src/ASF/xmega/drivers/cpu/%.o: ../src/ASF/xmega/drivers/cpu/%.s + @echo Building file: $< + @echo Invoking: AVR32/GNU Assembler : 4.8.1 + $(QUOTE)C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1061\avr8-gnu-toolchain\bin\avr-gcc.exe$(QUOTE) -Wa,-gdwarf2 -x assembler-with-cpp -c -mmcu=atxmega32a4u -mrelax -DBOARD=USER_BOARD -I "../common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained" -I "../common/services/usb/class/vendor/device/example" -I "../src/ASF/common/services/usb/udc" -I "../src/ASF/xmega/drivers/nvm" -I "../src/ASF/common/services/sleepmgr" -I "../src/ASF/common/services/clock" -I "../src/ASF/xmega/drivers/sleep" -I "../src/ASF/xmega/drivers/usb" -I "../src/ASF/xmega/drivers/cpu" -I "../src/ASF/common/services/usb/class/vendor" -I "../src/ASF/common/services/usb/class/vendor/device" -I "../src/ASF/common/services/usb" -I "../common/applications/user_application/user_board/config" -I "../src/ASF/xmega/utils" -I "../src/config" -I "../src/ASF/common/boards" -I "../src/ASF/xmega/utils/preprocessor" -I "../src/ASF/common/utils" -I "../src" -I "../src/ASF/common/boards/user_board" -I "../src/ASF/common/services/ioport" -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -mrelax -Wa,-g -o "$@" "$<" + @echo Finished building: $< + + +src/ASF/xmega/drivers/nvm/%.o: ../src/ASF/xmega/drivers/nvm/%.s + @echo Building file: $< + @echo Invoking: AVR32/GNU Assembler : 4.8.1 + $(QUOTE)C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1061\avr8-gnu-toolchain\bin\avr-gcc.exe$(QUOTE) -Wa,-gdwarf2 -x assembler-with-cpp -c -mmcu=atxmega32a4u -mrelax -DBOARD=USER_BOARD -I "../common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained" -I "../common/services/usb/class/vendor/device/example" -I "../src/ASF/common/services/usb/udc" -I "../src/ASF/xmega/drivers/nvm" -I "../src/ASF/common/services/sleepmgr" -I "../src/ASF/common/services/clock" -I "../src/ASF/xmega/drivers/sleep" -I "../src/ASF/xmega/drivers/usb" -I "../src/ASF/xmega/drivers/cpu" -I "../src/ASF/common/services/usb/class/vendor" -I "../src/ASF/common/services/usb/class/vendor/device" -I "../src/ASF/common/services/usb" -I "../common/applications/user_application/user_board/config" -I "../src/ASF/xmega/utils" -I "../src/config" -I "../src/ASF/common/boards" -I "../src/ASF/xmega/utils/preprocessor" -I "../src/ASF/common/utils" -I "../src" -I "../src/ASF/common/boards/user_board" -I "../src/ASF/common/services/ioport" -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -mrelax -Wa,-g -o "$@" "$<" + @echo Finished building: $< + + + + + +ifneq ($(MAKECMDGOALS),clean) +ifneq ($(strip $(C_DEPS)),) +-include $(C_DEPS) +endif +endif + +# Add inputs and outputs from these tool invocations to the build variables + +# All Target +all: $(OUTPUT_FILE_PATH) $(ADDITIONAL_DEPENDENCIES) + +$(OUTPUT_FILE_PATH): $(OBJS) $(USER_OBJS) $(OUTPUT_FILE_DEP) $(LIB_DEP) $(LINKER_SCRIPT_DEP) + @echo Building target: $@ + @echo Invoking: AVR/GNU Linker : 4.8.1 + $(QUOTE)C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1061\avr8-gnu-toolchain\bin\avr-gcc.exe$(QUOTE) -o$(OUTPUT_FILE_PATH_AS_ARGS) $(OBJS_AS_ARGS) $(USER_OBJS) $(LIBS) -Wl,-Map="USB_BULK_TEST.map" -Wl,--start-group -Wl,-lm -Wl,--end-group -Wl,--gc-sections -mrelax -mmcu=atxmega32a4u -Wl,--relax + @echo Finished building target: $@ + "C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1061\avr8-gnu-toolchain\bin\avr-objcopy.exe" -O ihex -R .eeprom -R .fuse -R .lock -R .signature -R .user_signatures "USB_BULK_TEST.elf" "USB_BULK_TEST.hex" + "C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1061\avr8-gnu-toolchain\bin\avr-objcopy.exe" -j .eeprom --set-section-flags=.eeprom=alloc,load --change-section-lma .eeprom=0 --no-change-warnings -O ihex "USB_BULK_TEST.elf" "USB_BULK_TEST.eep" || exit 0 + "C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1061\avr8-gnu-toolchain\bin\avr-objdump.exe" -h -S "USB_BULK_TEST.elf" > "USB_BULK_TEST.lss" + "C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1061\avr8-gnu-toolchain\bin\avr-objcopy.exe" -O srec -R .eeprom -R .fuse -R .lock -R .signature -R .user_signatures "USB_BULK_TEST.elf" "USB_BULK_TEST.srec" + "C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1061\avr8-gnu-toolchain\bin\avr-size.exe" "USB_BULK_TEST.elf" + + + + + + + +# Other Targets +clean: + -$(RM) $(OBJS_AS_ARGS) $(EXECUTABLES) + -$(RM) $(C_DEPS_AS_ARGS) + rm -rf "USB_BULK_TEST.elf" "USB_BULK_TEST.a" "USB_BULK_TEST.hex" "USB_BULK_TEST.lss" "USB_BULK_TEST.eep" "USB_BULK_TEST.map" "USB_BULK_TEST.srec" "USB_BULK_TEST.usersignatures" + \ No newline at end of file diff --git a/AVR Code/USB_BULK_TEST/Debug/USB_BULK_TEST.eep b/AVR Code/USB_BULK_TEST/Debug/USB_BULK_TEST.eep new file mode 100644 index 00000000..7c166a13 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/Debug/USB_BULK_TEST.eep @@ -0,0 +1 @@ +:00000001FF diff --git a/AVR Code/USB_BULK_TEST/Debug/USB_BULK_TEST.elf b/AVR Code/USB_BULK_TEST/Debug/USB_BULK_TEST.elf new file mode 100644 index 0000000000000000000000000000000000000000..4362bb999f3645e4b2af39e704728fe957e394d6 GIT binary patch literal 356799 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: + 0: 2c c1 rjmp .+600 ; 0x25a <__ctors_end> + 2: 00 00 nop + 4: 46 c1 rjmp .+652 ; 0x292 <__bad_interrupt> + 6: 00 00 nop + 8: 44 c1 rjmp .+648 ; 0x292 <__bad_interrupt> + a: 00 00 nop + c: 42 c1 rjmp .+644 ; 0x292 <__bad_interrupt> + e: 00 00 nop + 10: 40 c1 rjmp .+640 ; 0x292 <__bad_interrupt> + 12: 00 00 nop + 14: 3e c1 rjmp .+636 ; 0x292 <__bad_interrupt> + 16: 00 00 nop + 18: 3c c1 rjmp .+632 ; 0x292 <__bad_interrupt> + 1a: 00 00 nop + 1c: 3a c1 rjmp .+628 ; 0x292 <__bad_interrupt> + 1e: 00 00 nop + 20: 38 c1 rjmp .+624 ; 0x292 <__bad_interrupt> + 22: 00 00 nop + 24: 36 c1 rjmp .+620 ; 0x292 <__bad_interrupt> + 26: 00 00 nop + 28: 34 c1 rjmp .+616 ; 0x292 <__bad_interrupt> + 2a: 00 00 nop + 2c: 32 c1 rjmp .+612 ; 0x292 <__bad_interrupt> + 2e: 00 00 nop + 30: 30 c1 rjmp .+608 ; 0x292 <__bad_interrupt> + 32: 00 00 nop + 34: 2e c1 rjmp .+604 ; 0x292 <__bad_interrupt> + 36: 00 00 nop + 38: 2c c1 rjmp .+600 ; 0x292 <__bad_interrupt> + 3a: 00 00 nop + 3c: 2a c1 rjmp .+596 ; 0x292 <__bad_interrupt> + 3e: 00 00 nop + 40: 28 c1 rjmp .+592 ; 0x292 <__bad_interrupt> + 42: 00 00 nop + 44: 26 c1 rjmp .+588 ; 0x292 <__bad_interrupt> + 46: 00 00 nop + 48: 24 c1 rjmp .+584 ; 0x292 <__bad_interrupt> + 4a: 00 00 nop + 4c: 22 c1 rjmp .+580 ; 0x292 <__bad_interrupt> + 4e: 00 00 nop + 50: 20 c1 rjmp .+576 ; 0x292 <__bad_interrupt> + 52: 00 00 nop + 54: 1e c1 rjmp .+572 ; 0x292 <__bad_interrupt> + 56: 00 00 nop + 58: 1c c1 rjmp .+568 ; 0x292 <__bad_interrupt> + 5a: 00 00 nop + 5c: 1a c1 rjmp .+564 ; 0x292 <__bad_interrupt> + 5e: 00 00 nop + 60: 18 c1 rjmp .+560 ; 0x292 <__bad_interrupt> + 62: 00 00 nop + 64: 16 c1 rjmp .+556 ; 0x292 <__bad_interrupt> + 66: 00 00 nop + 68: 14 c1 rjmp .+552 ; 0x292 <__bad_interrupt> + 6a: 00 00 nop + 6c: 12 c1 rjmp .+548 ; 0x292 <__bad_interrupt> + 6e: 00 00 nop + 70: 10 c1 rjmp .+544 ; 0x292 <__bad_interrupt> + 72: 00 00 nop + 74: 0e c1 rjmp .+540 ; 0x292 <__bad_interrupt> + 76: 00 00 nop + 78: 0c c1 rjmp .+536 ; 0x292 <__bad_interrupt> + 7a: 00 00 nop + 7c: 0a c1 rjmp .+532 ; 0x292 <__bad_interrupt> + 7e: 00 00 nop + 80: 08 c1 rjmp .+528 ; 0x292 <__bad_interrupt> + 82: 00 00 nop + 84: 06 c1 rjmp .+524 ; 0x292 <__bad_interrupt> + 86: 00 00 nop + 88: 04 c1 rjmp .+520 ; 0x292 <__bad_interrupt> + 8a: 00 00 nop + 8c: 02 c1 rjmp .+516 ; 0x292 <__bad_interrupt> + 8e: 00 00 nop + 90: 00 c1 rjmp .+512 ; 0x292 <__bad_interrupt> + 92: 00 00 nop + 94: fe c0 rjmp .+508 ; 0x292 <__bad_interrupt> + 96: 00 00 nop + 98: fc c0 rjmp .+504 ; 0x292 <__bad_interrupt> + 9a: 00 00 nop + 9c: fa c0 rjmp .+500 ; 0x292 <__bad_interrupt> + 9e: 00 00 nop + a0: f8 c0 rjmp .+496 ; 0x292 <__bad_interrupt> + a2: 00 00 nop + a4: f6 c0 rjmp .+492 ; 0x292 <__bad_interrupt> + a6: 00 00 nop + a8: f4 c0 rjmp .+488 ; 0x292 <__bad_interrupt> + aa: 00 00 nop + ac: f2 c0 rjmp .+484 ; 0x292 <__bad_interrupt> + ae: 00 00 nop + b0: f0 c0 rjmp .+480 ; 0x292 <__bad_interrupt> + b2: 00 00 nop + b4: ee c0 rjmp .+476 ; 0x292 <__bad_interrupt> + b6: 00 00 nop + b8: ec c0 rjmp .+472 ; 0x292 <__bad_interrupt> + ba: 00 00 nop + bc: ea c0 rjmp .+468 ; 0x292 <__bad_interrupt> + be: 00 00 nop + c0: e8 c0 rjmp .+464 ; 0x292 <__bad_interrupt> + c2: 00 00 nop + c4: e6 c0 rjmp .+460 ; 0x292 <__bad_interrupt> + c6: 00 00 nop + c8: e4 c0 rjmp .+456 ; 0x292 <__bad_interrupt> + ca: 00 00 nop + cc: e2 c0 rjmp .+452 ; 0x292 <__bad_interrupt> + ce: 00 00 nop + d0: e0 c0 rjmp .+448 ; 0x292 <__bad_interrupt> + d2: 00 00 nop + d4: de c0 rjmp .+444 ; 0x292 <__bad_interrupt> + d6: 00 00 nop + d8: dc c0 rjmp .+440 ; 0x292 <__bad_interrupt> + da: 00 00 nop + dc: da c0 rjmp .+436 ; 0x292 <__bad_interrupt> + de: 00 00 nop + e0: d8 c0 rjmp .+432 ; 0x292 <__bad_interrupt> + e2: 00 00 nop + e4: d6 c0 rjmp .+428 ; 0x292 <__bad_interrupt> + e6: 00 00 nop + e8: d4 c0 rjmp .+424 ; 0x292 <__bad_interrupt> + ea: 00 00 nop + ec: d2 c0 rjmp .+420 ; 0x292 <__bad_interrupt> + ee: 00 00 nop + f0: d0 c0 rjmp .+416 ; 0x292 <__bad_interrupt> + f2: 00 00 nop + f4: ce c0 rjmp .+412 ; 0x292 <__bad_interrupt> + f6: 00 00 nop + f8: cc c0 rjmp .+408 ; 0x292 <__bad_interrupt> + fa: 00 00 nop + fc: ca c0 rjmp .+404 ; 0x292 <__bad_interrupt> + fe: 00 00 nop + 100: c8 c0 rjmp .+400 ; 0x292 <__bad_interrupt> + 102: 00 00 nop + 104: c6 c0 rjmp .+396 ; 0x292 <__bad_interrupt> + 106: 00 00 nop + 108: c4 c0 rjmp .+392 ; 0x292 <__bad_interrupt> + 10a: 00 00 nop + 10c: c2 c0 rjmp .+388 ; 0x292 <__bad_interrupt> + 10e: 00 00 nop + 110: c0 c0 rjmp .+384 ; 0x292 <__bad_interrupt> + 112: 00 00 nop + 114: be c0 rjmp .+380 ; 0x292 <__bad_interrupt> + 116: 00 00 nop + 118: bc c0 rjmp .+376 ; 0x292 <__bad_interrupt> + 11a: 00 00 nop + 11c: ba c0 rjmp .+372 ; 0x292 <__bad_interrupt> + 11e: 00 00 nop + 120: b8 c0 rjmp .+368 ; 0x292 <__bad_interrupt> + 122: 00 00 nop + 124: b6 c0 rjmp .+364 ; 0x292 <__bad_interrupt> + 126: 00 00 nop + 128: b4 c0 rjmp .+360 ; 0x292 <__bad_interrupt> + 12a: 00 00 nop + 12c: b2 c0 rjmp .+356 ; 0x292 <__bad_interrupt> + 12e: 00 00 nop + 130: b0 c0 rjmp .+352 ; 0x292 <__bad_interrupt> + 132: 00 00 nop + 134: ae c0 rjmp .+348 ; 0x292 <__bad_interrupt> + 136: 00 00 nop + 138: ac c0 rjmp .+344 ; 0x292 <__bad_interrupt> + 13a: 00 00 nop + 13c: aa c0 rjmp .+340 ; 0x292 <__bad_interrupt> + 13e: 00 00 nop + 140: a8 c0 rjmp .+336 ; 0x292 <__bad_interrupt> + 142: 00 00 nop + 144: a6 c0 rjmp .+332 ; 0x292 <__bad_interrupt> + 146: 00 00 nop + 148: a4 c0 rjmp .+328 ; 0x292 <__bad_interrupt> + 14a: 00 00 nop + 14c: 39 c6 rjmp .+3186 ; 0xdc0 <__vector_83> + 14e: 00 00 nop + 150: a0 c0 rjmp .+320 ; 0x292 <__bad_interrupt> + 152: 00 00 nop + 154: 9e c0 rjmp .+316 ; 0x292 <__bad_interrupt> + 156: 00 00 nop + 158: 9c c0 rjmp .+312 ; 0x292 <__bad_interrupt> + 15a: 00 00 nop + 15c: 9a c0 rjmp .+308 ; 0x292 <__bad_interrupt> + 15e: 00 00 nop + 160: 98 c0 rjmp .+304 ; 0x292 <__bad_interrupt> + 162: 00 00 nop + 164: 96 c0 rjmp .+300 ; 0x292 <__bad_interrupt> + 166: 00 00 nop + 168: 94 c0 rjmp .+296 ; 0x292 <__bad_interrupt> + 16a: 00 00 nop + 16c: 92 c0 rjmp .+292 ; 0x292 <__bad_interrupt> + 16e: 00 00 nop + 170: 90 c0 rjmp .+288 ; 0x292 <__bad_interrupt> + 172: 00 00 nop + 174: 8e c0 rjmp .+284 ; 0x292 <__bad_interrupt> + 176: 00 00 nop + 178: 8c c0 rjmp .+280 ; 0x292 <__bad_interrupt> + 17a: 00 00 nop + 17c: 8a c0 rjmp .+276 ; 0x292 <__bad_interrupt> + 17e: 00 00 nop + 180: 88 c0 rjmp .+272 ; 0x292 <__bad_interrupt> + 182: 00 00 nop + 184: 86 c0 rjmp .+268 ; 0x292 <__bad_interrupt> + 186: 00 00 nop + 188: 84 c0 rjmp .+264 ; 0x292 <__bad_interrupt> + 18a: 00 00 nop + 18c: 82 c0 rjmp .+260 ; 0x292 <__bad_interrupt> + 18e: 00 00 nop + 190: 80 c0 rjmp .+256 ; 0x292 <__bad_interrupt> + 192: 00 00 nop + 194: 7e c0 rjmp .+252 ; 0x292 <__bad_interrupt> + 196: 00 00 nop + 198: 7c c0 rjmp .+248 ; 0x292 <__bad_interrupt> + 19a: 00 00 nop + 19c: 7a c0 rjmp .+244 ; 0x292 <__bad_interrupt> + 19e: 00 00 nop + 1a0: 78 c0 rjmp .+240 ; 0x292 <__bad_interrupt> + 1a2: 00 00 nop + 1a4: 76 c0 rjmp .+236 ; 0x292 <__bad_interrupt> + 1a6: 00 00 nop + 1a8: 74 c0 rjmp .+232 ; 0x292 <__bad_interrupt> + 1aa: 00 00 nop + 1ac: 72 c0 rjmp .+228 ; 0x292 <__bad_interrupt> + 1ae: 00 00 nop + 1b0: 70 c0 rjmp .+224 ; 0x292 <__bad_interrupt> + 1b2: 00 00 nop + 1b4: 6e c0 rjmp .+220 ; 0x292 <__bad_interrupt> + 1b6: 00 00 nop + 1b8: 6c c0 rjmp .+216 ; 0x292 <__bad_interrupt> + 1ba: 00 00 nop + 1bc: 6a c0 rjmp .+212 ; 0x292 <__bad_interrupt> + 1be: 00 00 nop + 1c0: 68 c0 rjmp .+208 ; 0x292 <__bad_interrupt> + 1c2: 00 00 nop + 1c4: 66 c0 rjmp .+204 ; 0x292 <__bad_interrupt> + 1c6: 00 00 nop + 1c8: 64 c0 rjmp .+200 ; 0x292 <__bad_interrupt> + 1ca: 00 00 nop + 1cc: 62 c0 rjmp .+196 ; 0x292 <__bad_interrupt> + 1ce: 00 00 nop + 1d0: 60 c0 rjmp .+192 ; 0x292 <__bad_interrupt> + 1d2: 00 00 nop + 1d4: 5e c0 rjmp .+188 ; 0x292 <__bad_interrupt> + 1d6: 00 00 nop + 1d8: 5c c0 rjmp .+184 ; 0x292 <__bad_interrupt> + 1da: 00 00 nop + 1dc: 5a c0 rjmp .+180 ; 0x292 <__bad_interrupt> + 1de: 00 00 nop + 1e0: 58 c0 rjmp .+176 ; 0x292 <__bad_interrupt> + 1e2: 00 00 nop + 1e4: 56 c0 rjmp .+172 ; 0x292 <__bad_interrupt> + 1e6: 00 00 nop + 1e8: 54 c0 rjmp .+168 ; 0x292 <__bad_interrupt> + 1ea: 00 00 nop + 1ec: 52 c0 rjmp .+164 ; 0x292 <__bad_interrupt> + 1ee: 00 00 nop + 1f0: 50 c0 rjmp .+160 ; 0x292 <__bad_interrupt> + 1f2: 00 00 nop + 1f4: 0c 94 78 12 jmp 0x24f0 ; 0x24f0 <__vector_125> + 1f8: 0c 94 38 13 jmp 0x2670 ; 0x2670 <__vector_126> + 1fc: 93 01 movw r18, r6 + 1fe: 95 01 movw r18, r10 + 200: 97 01 movw r18, r14 + 202: 99 01 movw r18, r18 + 204: 9b 01 movw r18, r22 + 206: a0 01 movw r20, r0 + 208: 9d 01 movw r18, r26 + 20a: 9f 01 movw r18, r30 + 20c: e0 09 sbc r30, r0 + 20e: e2 09 sbc r30, r2 + 210: 20 0a sbc r2, r16 + 212: 62 0a sbc r6, r18 + 214: 6b 0a sbc r6, r27 + 216: 71 0a sbc r7, r17 + 218: c4 0a sbc r12, r20 + 21a: ca 0a sbc r12, r26 + 21c: 10 0a sbc r1, r16 + 21e: 12 0a sbc r1, r18 + 220: 14 0a sbc r1, r20 + 222: 16 0a sbc r1, r22 + 224: 18 0a sbc r1, r24 + 226: 1a 0a sbc r1, r26 + 228: 1c 0a sbc r1, r28 + 22a: 1e 0a sbc r1, r30 + 22c: 52 0a sbc r5, r18 + 22e: 54 0a sbc r5, r20 + 230: 56 0a sbc r5, r22 + 232: 58 0a sbc r5, r24 + 234: 5a 0a sbc r5, r26 + 236: 5c 0a sbc r5, r28 + 238: 5e 0a sbc r5, r30 + 23a: 60 0a sbc r6, r16 + 23c: 7e 0a sbc r7, r30 + 23e: 89 0a sbc r8, r25 + 240: 93 0a sbc r9, r19 + 242: a1 0a sbc r10, r17 + 244: a3 0a sbc r10, r19 + 246: a5 0a sbc r10, r21 + 248: af 0a sbc r10, r31 + 24a: b9 0a sbc r11, r25 + 24c: 8d 0e add r8, r29 + 24e: 7b 0e add r7, r27 + 250: 7e 0e add r7, r30 + 252: 81 0e add r8, r17 + 254: 84 0e add r8, r20 + 256: 87 0e add r8, r23 + 258: 8a 0e add r8, r26 + +0000025a <__ctors_end>: + 25a: 11 24 eor r1, r1 + 25c: 1f be out 0x3f, r1 ; 63 + 25e: cf ef ldi r28, 0xFF ; 255 + 260: cd bf out 0x3d, r28 ; 61 + 262: df e2 ldi r29, 0x2F ; 47 + 264: de bf out 0x3e, r29 ; 62 + +00000266 <__do_copy_data>: + 266: 10 e2 ldi r17, 0x20 ; 32 + 268: a0 e0 ldi r26, 0x00 ; 0 + 26a: b0 e2 ldi r27, 0x20 ; 32 + 26c: ec e8 ldi r30, 0x8C ; 140 + 26e: f8 e2 ldi r31, 0x28 ; 40 + 270: 02 c0 rjmp .+4 ; 0x276 <__do_copy_data+0x10> + 272: 05 90 lpm r0, Z+ + 274: 0d 92 st X+, r0 + 276: a2 3b cpi r26, 0xB2 ; 178 + 278: b1 07 cpc r27, r17 + 27a: d9 f7 brne .-10 ; 0x272 <__do_copy_data+0xc> + +0000027c <__do_clear_bss>: + 27c: 2c e2 ldi r18, 0x2C ; 44 + 27e: a2 eb ldi r26, 0xB2 ; 178 + 280: b0 e2 ldi r27, 0x20 ; 32 + 282: 01 c0 rjmp .+2 ; 0x286 <.do_clear_bss_start> + +00000284 <.do_clear_bss_loop>: + 284: 1d 92 st X+, r1 + +00000286 <.do_clear_bss_start>: + 286: a8 34 cpi r26, 0x48 ; 72 + 288: b2 07 cpc r27, r18 + 28a: e1 f7 brne .-8 ; 0x284 <.do_clear_bss_loop> + 28c: 1c d0 rcall .+56 ; 0x2c6
+ 28e: 0c 94 44 14 jmp 0x2888 ; 0x2888 <_exit> + +00000292 <__bad_interrupt>: + 292: b6 ce rjmp .-660 ; 0x0 <__vectors> + +00000294 : +#include "tiny_dig.h" +#include "globals.h" + + +void tiny_dig_setup(void){ + PORTE.DIR = 0x0f; + 294: e0 e8 ldi r30, 0x80 ; 128 + 296: f6 e0 ldi r31, 0x06 ; 6 + 298: 8f e0 ldi r24, 0x0F ; 15 + 29a: 80 83 st Z, r24 + PORTE.OUT = 0x05; + 29c: 85 e0 ldi r24, 0x05 ; 5 + 29e: 84 83 std Z+4, r24 ; 0x04 + 2a0: 08 95 ret + +000002a2 : + 2a2: 08 95 ret + +000002a4 : +{ + return true; +} + +void iso_callback(udd_ep_status_t status, iram_size_t nb_transfered, udd_ep_id_t ep){ + udi_vendor_iso_in_run((uint8_t *)&isoBuf[!b1_state * PACKET_SIZE], PACKET_SIZE, iso_callback); + 2a4: 80 91 b4 20 lds r24, 0x20B4 + 2a8: 81 11 cpse r24, r1 + 2aa: 03 c0 rjmp .+6 ; 0x2b2 + 2ac: 8e ee ldi r24, 0xEE ; 238 + 2ae: 92 e0 ldi r25, 0x02 ; 2 + 2b0: 02 c0 rjmp .+4 ; 0x2b6 + 2b2: 80 e0 ldi r24, 0x00 ; 0 + 2b4: 90 e0 ldi r25, 0x00 ; 0 + 2b6: 42 e5 ldi r20, 0x52 ; 82 + 2b8: 51 e0 ldi r21, 0x01 ; 1 + 2ba: 6e ee ldi r22, 0xEE ; 238 + 2bc: 72 e0 ldi r23, 0x02 ; 2 + 2be: 8a 59 subi r24, 0x9A ; 154 + 2c0: 99 4d sbci r25, 0xD9 ; 217 + 2c2: ff c6 rjmp .+3582 ; 0x10c2 + 2c4: 08 95 ret + +000002c6
: +volatile char PSU_target = 0; + +volatile unsigned char test_byte = 123; + +int main(void){ + irq_initialize_vectors(); + 2c6: 87 e0 ldi r24, 0x07 ; 7 + 2c8: e0 ea ldi r30, 0xA0 ; 160 + 2ca: f0 e0 ldi r31, 0x00 ; 0 + 2cc: 82 83 std Z+2, r24 ; 0x02 + cpu_irq_enable(); + 2ce: 78 94 sei + sysclk_init(); + 2d0: 10 d6 rcall .+3104 ; 0xef2 + board_init(); + 2d2: e7 df rcall .-50 ; 0x2a2 + udc_start(); + 2d4: f0 d7 rcall .+4064 ; 0x12b6 + tiny_dac_setup(); + 2d6: ac d0 rcall .+344 ; 0x430 + tiny_dma_setup(); + 2d8: cf d0 rcall .+414 ; 0x478 + tiny_adc_setup(0, 0); + 2da: 60 e0 ldi r22, 0x00 ; 0 + 2dc: 80 e0 ldi r24, 0x00 ; 0 + 2de: 77 d0 rcall .+238 ; 0x3ce + tiny_adc_pid_setup(); + 2e0: 63 d0 rcall .+198 ; 0x3a8 + tiny_adc_ch1setup(12); + 2e2: 8c e0 ldi r24, 0x0C ; 12 + 2e4: 57 d0 rcall .+174 ; 0x394 + tiny_timer_setup(); + 2e6: 31 d5 rcall .+2658 ; 0xd4a + tiny_uart_setup(); + 2e8: df d5 rcall .+3006 ; 0xea8 + tiny_spi_setup(); + 2ea: f6 d5 rcall .+3052 ; 0xed8 + tiny_dig_setup(); + 2ec: d3 df rcall .-90 ; 0x294 + ... + asm("nop"); + asm("nop"); + asm("nop"); + asm("nop"); + asm("nop"); + asm("nop"); + 30a: f1 cf rjmp .-30 ; 0x2ee + +0000030c : +//! Global variable to give and record information about setup request management +udd_ctrl_request_t udd_g_ctrlreq; + +//CALLBACKS: +void main_suspend_action(void) +{ + 30c: 08 95 ret + +0000030e : + return; +} + +void main_resume_action(void) +{ + 30e: 08 95 ret + +00000310 : + return; +} + +void main_sof_action(void) +{ + switch(global_mode){ + 310: 80 91 00 20 lds r24, 0x2000 + 314: 90 e0 ldi r25, 0x00 ; 0 + 316: 88 30 cpi r24, 0x08 ; 8 + 318: 91 05 cpc r25, r1 + 31a: 90 f4 brcc .+36 ; 0x340 + 31c: fc 01 movw r30, r24 + 31e: e2 50 subi r30, 0x02 ; 2 + 320: ff 4f sbci r31, 0xFF ; 255 + 322: 0c 94 35 14 jmp 0x286a ; 0x286a <__tablejump2__> + case 0: + tiny_dma_loop_mode_0(); + 326: 0b d1 rcall .+534 ; 0x53e + break; + 328: 0b c0 rjmp .+22 ; 0x340 + case 1: + tiny_dma_loop_mode_1(); + 32a: 88 d1 rcall .+784 ; 0x63c + break; + 32c: 09 c0 rjmp .+18 ; 0x340 + case 2: + tiny_dma_loop_mode_2(); + 32e: 27 d2 rcall .+1102 ; 0x77e + break; + 330: 07 c0 rjmp .+14 ; 0x340 + case 3: + tiny_dma_loop_mode_3(); + 332: e3 d2 rcall .+1478 ; 0x8fa + break; + 334: 05 c0 rjmp .+10 ; 0x340 + case 4: + tiny_dma_loop_mode_4(); + 336: 78 d3 rcall .+1776 ; 0xa28 + break; + 338: 03 c0 rjmp .+6 ; 0x340 + case 6: + tiny_dma_loop_mode_6(); + 33a: 60 d4 rcall .+2240 ; 0xbfc + break; + 33c: 01 c0 rjmp .+2 ; 0x340 + case 7: + tiny_dma_loop_mode_7(); + 33e: d6 d4 rcall .+2476 ; 0xcec + break; + default: + break; + } + b1_state = !b1_state; + 340: 90 91 b4 20 lds r25, 0x20B4 + 344: 81 e0 ldi r24, 0x01 ; 1 + 346: 91 11 cpse r25, r1 + 348: 80 e0 ldi r24, 0x00 ; 0 + 34a: 80 93 b4 20 sts 0x20B4, r24 + 34e: 08 95 ret + +00000350 : + return; +} + +bool main_vendor_enable(void) +{ + main_b_vendor_enable = true; + 350: 81 e0 ldi r24, 0x01 ; 1 + 352: 80 93 b5 20 sts 0x20B5, r24 + udi_vendor_iso_in_run((uint8_t *)&isoBuf[0], PACKET_SIZE, iso_callback); + 356: 42 e5 ldi r20, 0x52 ; 82 + 358: 51 e0 ldi r21, 0x01 ; 1 + 35a: 6e ee ldi r22, 0xEE ; 238 + 35c: 72 e0 ldi r23, 0x02 ; 2 + 35e: 86 e6 ldi r24, 0x66 ; 102 + 360: 96 e2 ldi r25, 0x26 ; 38 + 362: af d6 rcall .+3422 ; 0x10c2 + return true; +} + 364: 81 e0 ldi r24, 0x01 ; 1 + 366: 08 95 ret + +00000368 : + +void main_vendor_disable(void) +{ + main_b_vendor_enable = false; + 368: 10 92 b5 20 sts 0x20B5, r1 + 36c: 08 95 ret + +0000036e : +} + +bool main_setup_out_received(void) +{ + return 1; +} + 36e: 81 e0 ldi r24, 0x01 ; 1 + 370: 08 95 ret + +00000372 : + +bool main_setup_in_received(void) +{ + return true; +} + 372: 81 e0 ldi r24, 0x01 ; 1 + 374: 08 95 ret + +00000376 : + + return; +} + +void tiny_adc_ch0setup(unsigned char gain_mask){ + ADCA.CH0.CTRL = 0x00; //Reset + 376: e0 e0 ldi r30, 0x00 ; 0 + 378: f2 e0 ldi r31, 0x02 ; 2 + 37a: 10 a2 std Z+32, r1 ; 0x20 + ADCA.CH0.CTRL = ADC_CH_START_bm | (gain_mask&0x1c) | ADC_CH_INPUTMODE_DIFFWGAIN_gc; + 37c: 98 2f mov r25, r24 + 37e: 9c 71 andi r25, 0x1C ; 28 + 380: 93 68 ori r25, 0x83 ; 131 + 382: 90 a3 std Z+32, r25 ; 0x20 + #ifdef VERO + ADCA.CH0.MUXCTRL = ADC_CH_MUXPOS_PIN0_gc | ((gain_mask&0x80) ? ADC_CH_MUXNEG_PIN6_gc : ADC_CH_MUXNEG_PIN4_gc); + 384: 88 1f adc r24, r24 + 386: 88 27 eor r24, r24 + 388: 88 1f adc r24, r24 + 38a: 88 0f add r24, r24 + 38c: 81 a3 std Z+33, r24 ; 0x21 + #else + ADCA.CH0.MUXCTRL = ((gain_mask&0x80) ? ADC_CH_MUXPOS_PIN2_gc : ADC_CH_MUXPOS_PIN0_gc) | ((gain_mask&0x80) ? ADC_CH_MUXNEG_PIN6_gc : ADC_CH_MUXNEG_PIN4_gc); + #endif + ADCA.CH0.INTCTRL = ADC_CH_INTLVL_OFF_gc; + 38e: 12 a2 std Z+34, r1 ; 0x22 + ADCA.CH0.SCAN = 0x00; //Disable scanning + 390: 16 a2 std Z+38, r1 ; 0x26 + 392: 08 95 ret + +00000394 : +} + +void tiny_adc_ch1setup(unsigned char gain_mask){ + ADCA.CH2.CTRL = 0x00; //Reset + 394: e0 e0 ldi r30, 0x00 ; 0 + 396: f2 e0 ldi r31, 0x02 ; 2 + 398: 10 aa std Z+48, r1 ; 0x30 + ADCA.CH2.CTRL = ADC_CH_START_bm | gain_mask | ADC_CH_INPUTMODE_DIFFWGAIN_gc; + 39a: 83 68 ori r24, 0x83 ; 131 + 39c: 80 ab std Z+48, r24 ; 0x30 + ADCA.CH2.MUXCTRL = ADC_CH_MUXPOS_PIN2_gc | ADC_CH_MUXNEG_PIN4_gc; + 39e: 80 e1 ldi r24, 0x10 ; 16 + 3a0: 81 ab std Z+49, r24 ; 0x31 + ADCA.CH2.INTCTRL = ADC_CH_INTLVL_OFF_gc; + 3a2: 12 aa std Z+50, r1 ; 0x32 + ADCA.CH2.SCAN = 0x00; //Disable scanning + 3a4: 16 aa std Z+54, r1 ; 0x36 + 3a6: 08 95 ret + +000003a8 : +} + +void tiny_adc_pid_setup(void){ + ADCA.CH1.CTRL = 0x00; //Reset + 3a8: e0 e0 ldi r30, 0x00 ; 0 + 3aa: f2 e0 ldi r31, 0x02 ; 2 + 3ac: 10 a6 std Z+40, r1 ; 0x28 + ADCA.CH1.CTRL = ADC_CH_START_bm | ADC_CH_GAIN_1X_gc | ADC_CH_INPUTMODE_DIFFWGAIN_gc; + 3ae: 83 e8 ldi r24, 0x83 ; 131 + 3b0: 80 a7 std Z+40, r24 ; 0x28 + ADCA.CH1.MUXCTRL = ADC_CH_MUXPOS_PIN5_gc | 0b00000111; + 3b2: 8f e2 ldi r24, 0x2F ; 47 + 3b4: 81 a7 std Z+41, r24 ; 0x29 + ADCA.CH1.INTCTRL = ADC_CH_INTLVL_OFF_gc; + 3b6: 12 a6 std Z+42, r1 ; 0x2a + ADCA.CH1.SCAN = 0x00; //Disable scanning + 3b8: 16 a6 std Z+46, r1 ; 0x2e + 3ba: 08 95 ret + +000003bc : +//FROM: http://www.avrfreaks.net/forum/xmega-production-signature-row +uint8_t ReadCalibrationByte(uint8_t index){ + uint8_t result; + + /* Load the NVM Command register to read the calibration row. */ + NVM_CMD = NVM_CMD_READ_CALIB_ROW_gc; + 3bc: 92 e0 ldi r25, 0x02 ; 2 + 3be: 90 93 ca 01 sts 0x01CA, r25 + result = pgm_read_byte(index); + 3c2: e8 2f mov r30, r24 + 3c4: f0 e0 ldi r31, 0x00 ; 0 + 3c6: 84 91 lpm r24, Z + + /* Clean up NVM Command register. */ + NVM_CMD = NVM_CMD_NO_OPERATION_gc; + 3c8: 10 92 ca 01 sts 0x01CA, r1 + + return( result ); + 3cc: 08 95 ret + +000003ce : +// These 2 files need to be included in order to read +// the production calibration values from EEPROM +#include +#include + +void tiny_adc_setup(unsigned char ch2_enable, unsigned char seven_fiddy_ksps){ + 3ce: cf 93 push r28 + 3d0: df 93 push r29 + PR.PRPA &=0b11111101; + 3d2: e0 e7 ldi r30, 0x70 ; 112 + 3d4: f0 e0 ldi r31, 0x00 ; 0 + 3d6: 91 81 ldd r25, Z+1 ; 0x01 + 3d8: 9d 7f andi r25, 0xFD ; 253 + 3da: 91 83 std Z+1, r25 ; 0x01 + + ADCA.CTRLA = 0x00; //Turn off + 3dc: 10 92 00 02 sts 0x0200, r1 + ADCA.CTRLB = ADC_FREERUN_bm | (seven_fiddy_ksps == 2 ? ADC_RESOLUTION_LEFT12BIT_gc : ADC_RESOLUTION_8BIT_gc) | ADC_CONMODE_bm ; + 3e0: 62 30 cpi r22, 0x02 ; 2 + 3e2: 11 f4 brne .+4 ; 0x3e8 + 3e4: 9e e1 ldi r25, 0x1E ; 30 + 3e6: 01 c0 rjmp .+2 ; 0x3ea + 3e8: 9c e1 ldi r25, 0x1C ; 28 + 3ea: e0 e0 ldi r30, 0x00 ; 0 + 3ec: f2 e0 ldi r31, 0x02 ; 2 + 3ee: 91 83 std Z+1, r25 ; 0x01 + ADCA.REFCTRL = ADC_REFSEL_INTVCC2_gc; + 3f0: 90 e4 ldi r25, 0x40 ; 64 + 3f2: 92 83 std Z+2, r25 ; 0x02 + ADCA.EVCTRL = ch2_enable ? ADC_SWEEP_0123_gc : ADC_SWEEP_01_gc; //Non-zero causes issues with interrupts! ;.; + 3f4: 88 23 and r24, r24 + 3f6: 11 f0 breq .+4 ; 0x3fc + 3f8: 80 ec ldi r24, 0xC0 ; 192 + 3fa: 01 c0 rjmp .+2 ; 0x3fe + 3fc: 80 e4 ldi r24, 0x40 ; 64 + 3fe: e0 e0 ldi r30, 0x00 ; 0 + 400: f2 e0 ldi r31, 0x02 ; 2 + 402: 83 83 std Z+3, r24 ; 0x03 + + ADCA.PRESCALER = seven_fiddy_ksps == 1 ? ADC_PRESCALER_DIV16_gc : ADC_PRESCALER_DIV32_gc; //ADC Clock = Sysclock/128 + 404: 61 30 cpi r22, 0x01 ; 1 + 406: 11 f4 brne .+4 ; 0x40c + 408: 82 e0 ldi r24, 0x02 ; 2 + 40a: 01 c0 rjmp .+2 ; 0x40e + 40c: 83 e0 ldi r24, 0x03 ; 3 + 40e: c0 e0 ldi r28, 0x00 ; 0 + 410: d2 e0 ldi r29, 0x02 ; 2 + 412: 8c 83 std Y+4, r24 ; 0x04 + ADCA.CALL = ReadCalibrationByte(offsetof(NVM_PROD_SIGNATURES_t, ADCACAL0)); //Load calibration bytes from production row. + 414: 80 e2 ldi r24, 0x20 ; 32 + 416: d2 df rcall .-92 ; 0x3bc + 418: 8c 87 std Y+12, r24 ; 0x0c + ADCA.CALH = ReadCalibrationByte(offsetof(NVM_PROD_SIGNATURES_t, ADCACAL1)); //Load calibration bytes from production row. + 41a: 81 e2 ldi r24, 0x21 ; 33 + 41c: cf df rcall .-98 ; 0x3bc + 41e: 8d 87 std Y+13, r24 ; 0x0d + ADCA.CMP = 0x0000; //No compare used + 420: 18 8e std Y+24, r1 ; 0x18 + 422: 19 8e std Y+25, r1 ; 0x19 + + ADCA.CTRLA = ADC_ENABLE_bm; + 424: 81 e0 ldi r24, 0x01 ; 1 + 426: 88 83 st Y, r24 + + tiny_adc_pid_setup(); + 428: bf df rcall .-130 ; 0x3a8 + + return; +} + 42a: df 91 pop r29 + 42c: cf 91 pop r28 + 42e: 08 95 ret + +00000430 : +#include "tiny_adc.h" + +#include +#include + +void tiny_dac_setup(void){ + 430: cf 93 push r28 + 432: df 93 push r29 + + //Turn on in PR + PR.PRPB &=0b11111011; + 434: e0 e7 ldi r30, 0x70 ; 112 + 436: f0 e0 ldi r31, 0x00 ; 0 + 438: 82 81 ldd r24, Z+2 ; 0x02 + 43a: 8b 7f andi r24, 0xFB ; 251 + 43c: 82 83 std Z+2, r24 ; 0x02 + + DACB.CTRLA = DAC_CH1EN_bm | DAC_CH0EN_bm | DAC_ENABLE_bm; + 43e: c0 e2 ldi r28, 0x20 ; 32 + 440: d3 e0 ldi r29, 0x03 ; 3 + 442: 8d e0 ldi r24, 0x0D ; 13 + 444: 88 83 st Y, r24 + DACB.CTRLB = DAC_CHSEL_DUAL_gc; + 446: 80 e4 ldi r24, 0x40 ; 64 + 448: 89 83 std Y+1, r24 ; 0x01 + DACB.CTRLC = DAC_REFSEL_AVCC_gc | DAC_LEFTADJ_bm; + 44a: 89 e0 ldi r24, 0x09 ; 9 + 44c: 8a 83 std Y+2, r24 ; 0x02 + //EVCTRL unset + //DACB.CH0DATAH = 127;//contains (8-bit) sample, assuming left adjust! + + //TODO: Calibrate + DACB.CH0GAINCAL = ReadCalibrationByte(offsetof(NVM_PROD_SIGNATURES_t, DACB0GAINCAL)); //Load calibration bytes from production row. + 44e: 83 e3 ldi r24, 0x33 ; 51 + 450: b5 df rcall .-150 ; 0x3bc + 452: 88 87 std Y+8, r24 ; 0x08 + DACB.CH0OFFSETCAL = ReadCalibrationByte(offsetof(NVM_PROD_SIGNATURES_t, DACB0OFFCAL)); //Load calibration bytes from production row. + 454: 82 e3 ldi r24, 0x32 ; 50 + 456: b2 df rcall .-156 ; 0x3bc + 458: 89 87 std Y+9, r24 ; 0x09 + + DACB.CH1GAINCAL = ReadCalibrationByte(offsetof(NVM_PROD_SIGNATURES_t, DACB1GAINCAL)); //Load calibration bytes from production row. + 45a: 87 e3 ldi r24, 0x37 ; 55 + 45c: af df rcall .-162 ; 0x3bc + 45e: 8a 87 std Y+10, r24 ; 0x0a + DACB.CH1OFFSETCAL = ReadCalibrationByte(offsetof(NVM_PROD_SIGNATURES_t, DACB1OFFCAL)); //Load calibration bytes from production row. + 460: 86 e3 ldi r24, 0x36 ; 54 + 462: ac df rcall .-168 ; 0x3bc + 464: 8b 87 std Y+11, r24 ; 0x0b + + //Set up for triple mode! + PORTB.DIR |= 0x03; + 466: e0 e2 ldi r30, 0x20 ; 32 + 468: f6 e0 ldi r31, 0x06 ; 6 + 46a: 80 81 ld r24, Z + 46c: 83 60 ori r24, 0x03 ; 3 + 46e: 80 83 st Z, r24 + PORTB.OUT = 0x00; + 470: 14 82 std Z+4, r1 ; 0x04 + + + + 472: df 91 pop r29 + 474: cf 91 pop r28 + 476: 08 95 ret + +00000478 : +#include "globals.h" + + +void tiny_dma_setup(void){ + //Turn on DMA + PR.PRGEN &=0b111111110; //Turn on DMA clk + 478: e0 e7 ldi r30, 0x70 ; 112 + 47a: f0 e0 ldi r31, 0x00 ; 0 + 47c: 80 81 ld r24, Z + 47e: 8e 7f andi r24, 0xFE ; 254 + 480: 80 83 st Z, r24 + DMA.CTRL = DMA_ENABLE_bm | DMA_PRIMODE_RR0123_gc; + 482: 80 e8 ldi r24, 0x80 ; 128 + 484: 80 93 00 01 sts 0x0100, r24 + 488: 08 95 ret + +0000048a : +} +void tiny_dma_flush(void){ + DMA.CH0.CTRLA = 0x00; + 48a: e0 e0 ldi r30, 0x00 ; 0 + 48c: f1 e0 ldi r31, 0x01 ; 1 + 48e: 10 8a std Z+16, r1 ; 0x10 + DMA.CH0.CTRLA = DMA_CH_RESET_bm; + 490: 80 e4 ldi r24, 0x40 ; 64 + 492: 80 8b std Z+16, r24 ; 0x10 + + DMA.CH1.CTRLA = 0x00; + 494: 10 a2 std Z+32, r1 ; 0x20 + DMA.CH1.CTRLA = DMA_CH_RESET_bm; + 496: 80 a3 std Z+32, r24 ; 0x20 + + DMA.CH2.CTRLA = 0x00; + 498: 10 aa std Z+48, r1 ; 0x30 + DMA.CH2.CTRLA = DMA_CH_RESET_bm; + 49a: 80 ab std Z+48, r24 ; 0x30 + + DMA.CH3.CTRLA = 0x00; + 49c: e0 e4 ldi r30, 0x40 ; 64 + 49e: f1 e0 ldi r31, 0x01 ; 1 + 4a0: 10 82 st Z, r1 + DMA.CH3.CTRLA = DMA_CH_RESET_bm; + 4a2: 80 83 st Z, r24 + + b1_state = 0; + 4a4: 10 92 b4 20 sts 0x20B4, r1 + b2_state = 0; + 4a8: 10 92 b3 20 sts 0x20B3, r1 + 4ac: 08 95 ret + +000004ae : +} +void tiny_dma_set_mode_0(void){ + + global_mode = 0; + 4ae: 10 92 00 20 sts 0x2000, r1 + + tiny_dma_flush(); + 4b2: eb df rcall .-42 ; 0x48a + + DMA.CH2.REPCNT = 0; //Repeat forever! + 4b4: e0 e0 ldi r30, 0x00 ; 0 + 4b6: f1 e0 ldi r31, 0x01 ; 1 + 4b8: 16 aa std Z+54, r1 ; 0x36 + DMA.CH2.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm | DMA_CH_REPEAT_bm; + 4ba: 44 e2 ldi r20, 0x24 ; 36 + 4bc: 40 ab std Z+48, r20 ; 0x30 + DMA.CH2.CTRLB = 0x00; //No interrupt for DacBuf!! + 4be: 11 aa std Z+49, r1 ; 0x31 + DMA.CH2.ADDRCTRL = DMA_CH_DESTRELOAD_BURST_gc | DMA_CH_DESTDIR_INC_gc | DMA_CH_SRCRELOAD_BLOCK_gc | DMA_CH_SRCDIR_INC_gc; //Dest reloads after each burst, with byte incrementing. Src reloads at end of block, also incrementing address. + 4c0: 39 e5 ldi r19, 0x59 ; 89 + 4c2: 32 ab std Z+50, r19 ; 0x32 + DMA.CH2.TRIGSRC = DMA_CH_TRIGSRC_EVSYS_CH1_gc; //Triggered from TCC0 when it hits PER + 4c4: 82 e0 ldi r24, 0x02 ; 2 + 4c6: 83 ab std Z+51, r24 ; 0x33 + DMA.CH2.TRFCNT = auxDacBufLen; + 4c8: 80 91 02 20 lds r24, 0x2002 + 4cc: 90 91 03 20 lds r25, 0x2003 + 4d0: 84 ab std Z+52, r24 ; 0x34 + 4d2: 95 ab std Z+53, r25 ; 0x35 + + DMA.CH2.SRCADDR0 = (( (uint16_t) &dacBuf_CH2[0]) >> 0) & 0xFF; //Source address is dacbuf + 4d4: 86 e6 ldi r24, 0x66 ; 102 + 4d6: 94 e2 ldi r25, 0x24 ; 36 + 4d8: 80 af std Z+56, r24 ; 0x38 + DMA.CH2.SRCADDR1 = (( (uint16_t) &dacBuf_CH2[0]) >> 8) & 0xFF; + 4da: 91 af std Z+57, r25 ; 0x39 + DMA.CH2.SRCADDR2 = 0x00; + 4dc: 12 ae std Z+58, r1 ; 0x3a + + DMA.CH2.DESTADDR0 = (( (uint16_t) &DACB.CH1DATAH) >> 0) & 0xFF; //Dest address is high byte of DAC register + 4de: 8b e3 ldi r24, 0x3B ; 59 + 4e0: 84 af std Z+60, r24 ; 0x3c + DMA.CH2.DESTADDR1 = (( (uint16_t) &DACB.CH1DATAH) >> 8) & 0xFF; + 4e2: 23 e0 ldi r18, 0x03 ; 3 + 4e4: 20 93 3d 01 sts 0x013D, r18 + DMA.CH2.DESTADDR2 = 0x00; + 4e8: 10 92 3e 01 sts 0x013E, r1 + + //Must enable last for REPCNT won't work! + DMA.CH2.CTRLA |= DMA_CH_ENABLE_bm; //Enable! + 4ec: 80 a9 ldd r24, Z+48 ; 0x30 + 4ee: 80 68 ori r24, 0x80 ; 128 + 4f0: 80 ab std Z+48, r24 ; 0x30 + + DMA.CH3.REPCNT = 0; //Repeat forever! + 4f2: 10 92 46 01 sts 0x0146, r1 + DMA.CH3.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm | DMA_CH_REPEAT_bm; + 4f6: e0 e4 ldi r30, 0x40 ; 64 + 4f8: f1 e0 ldi r31, 0x01 ; 1 + 4fa: 40 83 st Z, r20 + DMA.CH3.CTRLB = 0x00; //Hi interrupt on block complete + 4fc: 10 92 41 01 sts 0x0141, r1 + DMA.CH3.ADDRCTRL = DMA_CH_DESTRELOAD_BURST_gc | DMA_CH_DESTDIR_INC_gc | DMA_CH_SRCRELOAD_BLOCK_gc | DMA_CH_SRCDIR_INC_gc; //Dest reloads after each burst, with byte incrementing. Src reloads at end of block, also incrementing address. + 500: 30 93 42 01 sts 0x0142, r19 + DMA.CH3.TRIGSRC = DMA_CH_TRIGSRC_EVSYS_CH2_gc; //Triggered from TCC0 when it hits PER + 504: 20 93 43 01 sts 0x0143, r18 + DMA.CH3.TRFCNT = dacBuf_len; + 508: 80 91 04 20 lds r24, 0x2004 + 50c: 90 91 05 20 lds r25, 0x2005 + 510: 80 93 44 01 sts 0x0144, r24 + 514: 90 93 45 01 sts 0x0145, r25 + + DMA.CH3.SRCADDR0 = (( (uint16_t) &dacBuf_CH1[0]) >> 0) & 0xFF; //Source address is dacbuf + 518: 86 e5 ldi r24, 0x56 ; 86 + 51a: 92 e2 ldi r25, 0x22 ; 34 + 51c: 80 93 48 01 sts 0x0148, r24 + DMA.CH3.SRCADDR1 = (( (uint16_t) &dacBuf_CH1[0]) >> 8) & 0xFF; + 520: 90 93 49 01 sts 0x0149, r25 + DMA.CH3.SRCADDR2 = 0x00; + 524: 10 92 4a 01 sts 0x014A, r1 + + DMA.CH3.DESTADDR0 = (( (uint16_t) &DACB.CH0DATAH) >> 0) & 0xFF; //Dest address is high byte of DAC register + 528: 89 e3 ldi r24, 0x39 ; 57 + 52a: 80 93 4c 01 sts 0x014C, r24 + DMA.CH3.DESTADDR1 = (( (uint16_t) &DACB.CH0DATAH) >> 8) & 0xFF; + 52e: 20 93 4d 01 sts 0x014D, r18 + DMA.CH3.DESTADDR2 = 0x00; + 532: 10 92 4e 01 sts 0x014E, r1 + + //Must enable last for REPCNT won't work! + DMA.CH3.CTRLA |= DMA_CH_ENABLE_bm; //Enable! + 536: 80 81 ld r24, Z + 538: 80 68 ori r24, 0x80 ; 128 + 53a: 80 83 st Z, r24 + 53c: 08 95 ret + +0000053e : +} + +void tiny_dma_loop_mode_0(void){ + DMA.CH0.CTRLA = 0x00; + 53e: e0 e0 ldi r30, 0x00 ; 0 + 540: f1 e0 ldi r31, 0x01 ; 1 + 542: 10 8a std Z+16, r1 ; 0x10 + DMA.CH0.CTRLA = DMA_CH_RESET_bm; + 544: 80 e4 ldi r24, 0x40 ; 64 + 546: 80 8b std Z+16, r24 ; 0x10 + + DMA.CH0.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm; //Do not repeat! + 548: 84 e0 ldi r24, 0x04 ; 4 + 54a: 80 8b std Z+16, r24 ; 0x10 + DMA.CH0.CTRLB = 0x00; //No interrupt! + 54c: 11 8a std Z+17, r1 ; 0x11 + DMA.CH0.ADDRCTRL = DMA_CH_SRCRELOAD_BURST_gc | DMA_CH_SRCDIR_INC_gc | DMA_CH_DESTDIR_INC_gc; //Source reloads after each burst, with byte incrementing. Dest does not reload, but does increment address. + 54e: 81 e9 ldi r24, 0x91 ; 145 + 550: 82 8b std Z+18, r24 ; 0x12 + DMA.CH0.TRIGSRC = DMA_CH_TRIGSRC_ADCA_CH0_gc; //Triggered from ADCA channel 0 + 552: 80 e1 ldi r24, 0x10 ; 16 + 554: 83 8b std Z+19, r24 ; 0x13 + DMA.CH0.TRFCNT = HALFPACKET_SIZE; + 556: 87 e7 ldi r24, 0x77 ; 119 + 558: 91 e0 ldi r25, 0x01 ; 1 + 55a: 84 8b std Z+20, r24 ; 0x14 + 55c: 95 8b std Z+21, r25 ; 0x15 + + DMA.CH0.SRCADDR0 = (( (uint16_t) &ADCA.CH0.RESL) >> 0) & 0xFF; //Source address is ADC + 55e: 84 e2 ldi r24, 0x24 ; 36 + 560: 80 8f std Z+24, r24 ; 0x18 + DMA.CH0.SRCADDR1 = (( (uint16_t) &ADCA.CH0.RESL) >> 8) & 0xFF; + 562: 82 e0 ldi r24, 0x02 ; 2 + 564: 81 8f std Z+25, r24 ; 0x19 + DMA.CH0.SRCADDR2 = 0x00; + 566: 12 8e std Z+26, r1 ; 0x1a + + DMA.CH0.DESTADDR0 = (( (uint16_t) &isoBuf[b1_state * PACKET_SIZE]) >> 0) & 0xFF; //Dest address is isoBuf + 568: 40 91 b4 20 lds r20, 0x20B4 + 56c: 8e ee ldi r24, 0xEE ; 238 + 56e: 92 e0 ldi r25, 0x02 ; 2 + 570: 48 9f mul r20, r24 + 572: 90 01 movw r18, r0 + 574: 49 9f mul r20, r25 + 576: 30 0d add r19, r0 + 578: 11 24 eor r1, r1 + 57a: 2a 59 subi r18, 0x9A ; 154 + 57c: 39 4d sbci r19, 0xD9 ; 217 + 57e: 24 8f std Z+28, r18 ; 0x1c + DMA.CH0.DESTADDR1 = (( (uint16_t) &isoBuf[b1_state * PACKET_SIZE]) >> 8) & 0xFF; + 580: 40 91 b4 20 lds r20, 0x20B4 + 584: 48 9f mul r20, r24 + 586: 90 01 movw r18, r0 + 588: 49 9f mul r20, r25 + 58a: 30 0d add r19, r0 + 58c: 11 24 eor r1, r1 + 58e: c9 01 movw r24, r18 + 590: 8a 59 subi r24, 0x9A ; 154 + 592: 99 4d sbci r25, 0xD9 ; 217 + 594: 95 8f std Z+29, r25 ; 0x1d + DMA.CH0.DESTADDR2 = 0x00; + 596: 16 8e std Z+30, r1 ; 0x1e + + //Must enable last for REPCNT won't work! + DMA.CH0.CTRLA |= DMA_CH_ENABLE_bm; //Enable! + 598: 80 89 ldd r24, Z+16 ; 0x10 + 59a: 80 68 ori r24, 0x80 ; 128 + 59c: 80 8b std Z+16, r24 ; 0x10 + 59e: 08 95 ret + +000005a0 : +} + +void tiny_dma_set_mode_1(void){ + + global_mode = 1; + 5a0: 81 e0 ldi r24, 0x01 ; 1 + 5a2: 80 93 00 20 sts 0x2000, r24 + + tiny_dma_flush(); + 5a6: 71 df rcall .-286 ; 0x48a + + //AUX channel (to keep it tx, therefore always rx) + DMA.CH2.CTRLA = 0x00; + 5a8: e0 e0 ldi r30, 0x00 ; 0 + 5aa: f1 e0 ldi r31, 0x01 ; 1 + 5ac: 10 aa std Z+48, r1 ; 0x30 + DMA.CH2.CTRLA = DMA_CH_RESET_bm; + 5ae: 80 e4 ldi r24, 0x40 ; 64 + 5b0: 80 ab std Z+48, r24 ; 0x30 + + DMA.CH2.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm; //Do not repeat! + 5b2: 84 e0 ldi r24, 0x04 ; 4 + 5b4: 80 ab std Z+48, r24 ; 0x30 + DMA.CH2.CTRLB = 0x00; //No int + 5b6: 11 aa std Z+49, r1 ; 0x31 + DMA.CH2.ADDRCTRL = DMA_CH_SRCDIR_FIXED_gc | DMA_CH_DESTDIR_FIXED_gc; //Source and address fixed. + 5b8: 12 aa std Z+50, r1 ; 0x32 + DMA.CH2.TRIGSRC = DMA_CH_TRIGSRC_USARTC0_RXC_gc; + 5ba: 8b e4 ldi r24, 0x4B ; 75 + 5bc: 83 ab std Z+51, r24 ; 0x33 + DMA.CH2.TRFCNT = 0; + 5be: 14 aa std Z+52, r1 ; 0x34 + 5c0: 15 aa std Z+53, r1 ; 0x35 + DMA.CH2.REPCNT = 0; + 5c2: 16 aa std Z+54, r1 ; 0x36 + + DMA.CH2.SRCADDR0 = (( (uint16_t) &dummy) >> 0) & 0xFF; + 5c4: 81 e0 ldi r24, 0x01 ; 1 + 5c6: 90 e2 ldi r25, 0x20 ; 32 + 5c8: 80 af std Z+56, r24 ; 0x38 + DMA.CH2.SRCADDR1 = (( (uint16_t) &dummy) >> 8) & 0xFF; + 5ca: 91 af std Z+57, r25 ; 0x39 + DMA.CH2.SRCADDR2 = 0x00; + 5cc: 12 ae std Z+58, r1 ; 0x3a + + DMA.CH2.DESTADDR0 = (( (uint16_t) &USARTC0.DATA) >> 0) & 0xFF; + 5ce: 80 ea ldi r24, 0xA0 ; 160 + 5d0: 84 af std Z+60, r24 ; 0x3c + DMA.CH2.DESTADDR1 = (( (uint16_t) &USARTC0.DATA) >> 8) & 0xFF; + 5d2: 88 e0 ldi r24, 0x08 ; 8 + 5d4: 80 93 3d 01 sts 0x013D, r24 + DMA.CH2.DESTADDR2 = 0x00; + 5d8: 10 92 3e 01 sts 0x013E, r1 + + //Must enable last for REPCNT won't work! + DMA.CH2.CTRLA |= DMA_CH_REPEAT_bm | DMA_CH_ENABLE_bm; //Enable! + 5dc: 80 a9 ldd r24, Z+48 ; 0x30 + 5de: 80 6a ori r24, 0xA0 ; 160 + 5e0: 80 ab std Z+48, r24 ; 0x30 + + USARTC0.DATA = 0x55; + 5e2: 85 e5 ldi r24, 0x55 ; 85 + 5e4: 80 93 a0 08 sts 0x08A0, r24 + + + DMA.CH3.REPCNT = 0; //Repeat forever! + 5e8: 10 92 46 01 sts 0x0146, r1 + DMA.CH3.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm | DMA_CH_REPEAT_bm; + 5ec: e0 e4 ldi r30, 0x40 ; 64 + 5ee: f1 e0 ldi r31, 0x01 ; 1 + 5f0: 84 e2 ldi r24, 0x24 ; 36 + 5f2: 80 83 st Z, r24 + DMA.CH3.CTRLB = 0x00; //No interrupt for DacBuf!! + 5f4: 10 92 41 01 sts 0x0141, r1 + DMA.CH3.ADDRCTRL = DMA_CH_DESTRELOAD_BURST_gc | DMA_CH_DESTDIR_INC_gc | DMA_CH_SRCRELOAD_BLOCK_gc | DMA_CH_SRCDIR_INC_gc; //Dest reloads after each burst, with byte incrementing. Src reloads at end of block, also incrementing address. + 5f8: 89 e5 ldi r24, 0x59 ; 89 + 5fa: 80 93 42 01 sts 0x0142, r24 + DMA.CH3.TRIGSRC = DMA_CH_TRIGSRC_EVSYS_CH1_gc; //Triggered from TCC0 when it hits PER + 5fe: 82 e0 ldi r24, 0x02 ; 2 + 600: 80 93 43 01 sts 0x0143, r24 + DMA.CH3.TRFCNT = auxDacBufLen; + 604: 80 91 02 20 lds r24, 0x2002 + 608: 90 91 03 20 lds r25, 0x2003 + 60c: 80 93 44 01 sts 0x0144, r24 + 610: 90 93 45 01 sts 0x0145, r25 + + DMA.CH3.SRCADDR0 = (( (uint16_t) &dacBuf_CH2[0]) >> 0) & 0xFF; //Source address is dacbuf + 614: 86 e6 ldi r24, 0x66 ; 102 + 616: 94 e2 ldi r25, 0x24 ; 36 + 618: 80 93 48 01 sts 0x0148, r24 + DMA.CH3.SRCADDR1 = (( (uint16_t) &dacBuf_CH2[0]) >> 8) & 0xFF; + 61c: 90 93 49 01 sts 0x0149, r25 + DMA.CH3.SRCADDR2 = 0x00; + 620: 10 92 4a 01 sts 0x014A, r1 + + DMA.CH3.DESTADDR0 = (( (uint16_t) &DACB.CH1DATAH) >> 0) & 0xFF; //Dest address is high byte of DAC register + 624: 8b e3 ldi r24, 0x3B ; 59 + 626: 80 93 4c 01 sts 0x014C, r24 + DMA.CH3.DESTADDR1 = (( (uint16_t) &DACB.CH1DATAH) >> 8) & 0xFF; + 62a: 83 e0 ldi r24, 0x03 ; 3 + 62c: 80 93 4d 01 sts 0x014D, r24 + DMA.CH3.DESTADDR2 = 0x00; + 630: 10 92 4e 01 sts 0x014E, r1 + + //Must enable last for REPCNT won't work! + DMA.CH3.CTRLA |= DMA_CH_ENABLE_bm; //Enable! + 634: 80 81 ld r24, Z + 636: 80 68 ori r24, 0x80 ; 128 + 638: 80 83 st Z, r24 + 63a: 08 95 ret + +0000063c : + +} + +void tiny_dma_loop_mode_1(void){ + DMA.CH0.CTRLA = 0x00; + 63c: e0 e0 ldi r30, 0x00 ; 0 + 63e: f1 e0 ldi r31, 0x01 ; 1 + 640: 10 8a std Z+16, r1 ; 0x10 + DMA.CH0.CTRLA = DMA_CH_RESET_bm; + 642: a0 e4 ldi r26, 0x40 ; 64 + 644: a0 8b std Z+16, r26 ; 0x10 + + DMA.CH0.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm; //Do not repeat! + 646: 74 e0 ldi r23, 0x04 ; 4 + 648: 70 8b std Z+16, r23 ; 0x10 + DMA.CH0.CTRLB = 0x00; //No interrupt! + 64a: 11 8a std Z+17, r1 ; 0x11 + DMA.CH0.ADDRCTRL = DMA_CH_SRCRELOAD_BURST_gc | DMA_CH_SRCDIR_INC_gc | DMA_CH_DESTDIR_INC_gc; //Source reloads after each burst, with byte incrementing. Dest does not reload, but does increment address. + 64c: 61 e9 ldi r22, 0x91 ; 145 + 64e: 62 8b std Z+18, r22 ; 0x12 + DMA.CH0.TRIGSRC = DMA_CH_TRIGSRC_ADCA_CH0_gc; //Triggered from ADCA channel 0 + 650: 80 e1 ldi r24, 0x10 ; 16 + 652: 83 8b std Z+19, r24 ; 0x13 + DMA.CH0.TRFCNT = HALFPACKET_SIZE; + 654: 27 e7 ldi r18, 0x77 ; 119 + 656: 31 e0 ldi r19, 0x01 ; 1 + 658: 24 8b std Z+20, r18 ; 0x14 + 65a: 35 8b std Z+21, r19 ; 0x15 + + DMA.CH0.SRCADDR0 = (( (uint16_t) &ADCA.CH0.RESL) >> 0) & 0xFF; //Source address is ADC + 65c: 84 e2 ldi r24, 0x24 ; 36 + 65e: 80 8f std Z+24, r24 ; 0x18 + DMA.CH0.SRCADDR1 = (( (uint16_t) &ADCA.CH0.RESL) >> 8) & 0xFF; + 660: 82 e0 ldi r24, 0x02 ; 2 + 662: 81 8f std Z+25, r24 ; 0x19 + DMA.CH0.SRCADDR2 = 0x00; + 664: 12 8e std Z+26, r1 ; 0x1a + + DMA.CH0.DESTADDR0 = (( (uint16_t) &isoBuf[b1_state * PACKET_SIZE]) >> 0) & 0xFF; //Dest address is isoBuf + 666: b0 91 b4 20 lds r27, 0x20B4 + 66a: 8e ee ldi r24, 0xEE ; 238 + 66c: 92 e0 ldi r25, 0x02 ; 2 + 66e: b8 9f mul r27, r24 + 670: a0 01 movw r20, r0 + 672: b9 9f mul r27, r25 + 674: 50 0d add r21, r0 + 676: 11 24 eor r1, r1 + 678: 4a 59 subi r20, 0x9A ; 154 + 67a: 59 4d sbci r21, 0xD9 ; 217 + 67c: 44 8f std Z+28, r20 ; 0x1c + DMA.CH0.DESTADDR1 = (( (uint16_t) &isoBuf[b1_state * PACKET_SIZE]) >> 8) & 0xFF; + 67e: b0 91 b4 20 lds r27, 0x20B4 + 682: b8 9f mul r27, r24 + 684: a0 01 movw r20, r0 + 686: b9 9f mul r27, r25 + 688: 50 0d add r21, r0 + 68a: 11 24 eor r1, r1 + 68c: 4a 59 subi r20, 0x9A ; 154 + 68e: 59 4d sbci r21, 0xD9 ; 217 + 690: 55 8f std Z+29, r21 ; 0x1d + DMA.CH0.DESTADDR2 = 0x00; + 692: 16 8e std Z+30, r1 ; 0x1e + + //Must enable last for REPCNT won't work! + DMA.CH0.CTRLA |= DMA_CH_ENABLE_bm; //Enable! + 694: 40 89 ldd r20, Z+16 ; 0x10 + 696: 40 68 ori r20, 0x80 ; 128 + 698: 40 8b std Z+16, r20 ; 0x10 + + DMA.CH1.CTRLA = 0x00; + 69a: 10 a2 std Z+32, r1 ; 0x20 + DMA.CH1.CTRLA = DMA_CH_RESET_bm; + 69c: a0 a3 std Z+32, r26 ; 0x20 + + DMA.CH1.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm; //Do not repeat! + 69e: 70 a3 std Z+32, r23 ; 0x20 + DMA.CH1.CTRLB = 0x00; //No interrupt + 6a0: 11 a2 std Z+33, r1 ; 0x21 + DMA.CH1.ADDRCTRL = DMA_CH_SRCRELOAD_BURST_gc | DMA_CH_SRCDIR_INC_gc | DMA_CH_DESTDIR_INC_gc; //Source reloads after each burst, with byte incrementing. Dest does not reload, but does increment address. + 6a2: 62 a3 std Z+34, r22 ; 0x22 + DMA.CH1.TRIGSRC = DMA_CH_TRIGSRC_USARTC0_RXC_gc; + 6a4: 4b e4 ldi r20, 0x4B ; 75 + 6a6: 43 a3 std Z+35, r20 ; 0x23 + DMA.CH1.TRFCNT = HALFPACKET_SIZE; + 6a8: 24 a3 std Z+36, r18 ; 0x24 + 6aa: 35 a3 std Z+37, r19 ; 0x25 + + DMA.CH1.SRCADDR0 = (( (uint16_t) &USARTC0.DATA) >> 0) & 0xFF; //Source address is ADC + 6ac: 20 ea ldi r18, 0xA0 ; 160 + 6ae: 20 a7 std Z+40, r18 ; 0x28 + DMA.CH1.SRCADDR1 = (( (uint16_t) &USARTC0.DATA) >> 8) & 0xFF; + 6b0: 28 e0 ldi r18, 0x08 ; 8 + 6b2: 21 a7 std Z+41, r18 ; 0x29 + DMA.CH1.SRCADDR2 = 0x00; + 6b4: 12 a6 std Z+42, r1 ; 0x2a + + DMA.CH1.DESTADDR0 = (( (uint16_t) &isoBuf[b1_state * PACKET_SIZE + HALFPACKET_SIZE]) >> 0) & 0xFF; //Dest address is isoBuf + 6b6: 40 91 b4 20 lds r20, 0x20B4 + 6ba: 48 9f mul r20, r24 + 6bc: 90 01 movw r18, r0 + 6be: 49 9f mul r20, r25 + 6c0: 30 0d add r19, r0 + 6c2: 11 24 eor r1, r1 + 6c4: 23 52 subi r18, 0x23 ; 35 + 6c6: 38 4d sbci r19, 0xD8 ; 216 + 6c8: 24 a7 std Z+44, r18 ; 0x2c + DMA.CH1.DESTADDR1 = (( (uint16_t) &isoBuf[b1_state * PACKET_SIZE + HALFPACKET_SIZE]) >> 8) & 0xFF; + 6ca: 40 91 b4 20 lds r20, 0x20B4 + 6ce: 48 9f mul r20, r24 + 6d0: 90 01 movw r18, r0 + 6d2: 49 9f mul r20, r25 + 6d4: 30 0d add r19, r0 + 6d6: 11 24 eor r1, r1 + 6d8: c9 01 movw r24, r18 + 6da: 83 52 subi r24, 0x23 ; 35 + 6dc: 98 4d sbci r25, 0xD8 ; 216 + 6de: 95 a7 std Z+45, r25 ; 0x2d + DMA.CH1.DESTADDR2 = 0x00; + 6e0: 16 a6 std Z+46, r1 ; 0x2e + + //Must enable last for REPCNT won't work! + DMA.CH1.CTRLA |= DMA_CH_ENABLE_bm; //Enable! + 6e2: 80 a1 ldd r24, Z+32 ; 0x20 + 6e4: 80 68 ori r24, 0x80 ; 128 + 6e6: 80 a3 std Z+32, r24 ; 0x20 + 6e8: 08 95 ret + +000006ea : +} + +void tiny_dma_set_mode_2(void){ + 6ea: cf 93 push r28 + + global_mode = 2; + 6ec: c2 e0 ldi r28, 0x02 ; 2 + 6ee: c0 93 00 20 sts 0x2000, r28 + + tiny_dma_flush(); + 6f2: cb de rcall .-618 ; 0x48a + + DMA.CH2.REPCNT = 0; //Repeat forever! + 6f4: e0 e0 ldi r30, 0x00 ; 0 + 6f6: f1 e0 ldi r31, 0x01 ; 1 + 6f8: 16 aa std Z+54, r1 ; 0x36 + DMA.CH2.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm | DMA_CH_REPEAT_bm; + 6fa: 44 e2 ldi r20, 0x24 ; 36 + 6fc: 40 ab std Z+48, r20 ; 0x30 + DMA.CH2.CTRLB = 0x00; //Hi interrupt on block complete + 6fe: 11 aa std Z+49, r1 ; 0x31 + DMA.CH2.ADDRCTRL = DMA_CH_DESTRELOAD_BURST_gc | DMA_CH_DESTDIR_INC_gc | DMA_CH_SRCRELOAD_BLOCK_gc | DMA_CH_SRCDIR_INC_gc; //Dest reloads after each burst, with byte incrementing. Src reloads at end of block, also incrementing address. + 700: 39 e5 ldi r19, 0x59 ; 89 + 702: 32 ab std Z+50, r19 ; 0x32 + DMA.CH2.TRIGSRC = DMA_CH_TRIGSRC_EVSYS_CH2_gc; //Triggered from TCC0 when it hits PER + 704: 23 e0 ldi r18, 0x03 ; 3 + 706: 23 ab std Z+51, r18 ; 0x33 + DMA.CH2.TRFCNT = dacBuf_len; + 708: 80 91 04 20 lds r24, 0x2004 + 70c: 90 91 05 20 lds r25, 0x2005 + 710: 84 ab std Z+52, r24 ; 0x34 + 712: 95 ab std Z+53, r25 ; 0x35 + + DMA.CH2.SRCADDR0 = (( (uint16_t) &dacBuf_CH1[0]) >> 0) & 0xFF; //Source address is dacbuf + 714: 86 e5 ldi r24, 0x56 ; 86 + 716: 92 e2 ldi r25, 0x22 ; 34 + 718: 80 af std Z+56, r24 ; 0x38 + DMA.CH2.SRCADDR1 = (( (uint16_t) &dacBuf_CH1[0]) >> 8) & 0xFF; + 71a: 91 af std Z+57, r25 ; 0x39 + DMA.CH2.SRCADDR2 = 0x00; + 71c: 12 ae std Z+58, r1 ; 0x3a + + DMA.CH2.DESTADDR0 = (( (uint16_t) &DACB.CH0DATAH) >> 0) & 0xFF; //Dest address is high byte of DAC register + 71e: 89 e3 ldi r24, 0x39 ; 57 + 720: 84 af std Z+60, r24 ; 0x3c + DMA.CH2.DESTADDR1 = (( (uint16_t) &DACB.CH0DATAH) >> 8) & 0xFF; + 722: 20 93 3d 01 sts 0x013D, r18 + DMA.CH2.DESTADDR2 = 0x00; + 726: 10 92 3e 01 sts 0x013E, r1 + + //Must enable last for REPCNT won't work! + DMA.CH2.CTRLA |= DMA_CH_ENABLE_bm; //Enable! + 72a: 80 a9 ldd r24, Z+48 ; 0x30 + 72c: 80 68 ori r24, 0x80 ; 128 + 72e: 80 ab std Z+48, r24 ; 0x30 + + + DMA.CH3.REPCNT = 0; //Repeat forever! + 730: 10 92 46 01 sts 0x0146, r1 + DMA.CH3.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm | DMA_CH_REPEAT_bm; + 734: e0 e4 ldi r30, 0x40 ; 64 + 736: f1 e0 ldi r31, 0x01 ; 1 + 738: 40 83 st Z, r20 + DMA.CH3.CTRLB = 0x00; //No interrupt for DacBuf!! + 73a: 10 92 41 01 sts 0x0141, r1 + DMA.CH3.ADDRCTRL = DMA_CH_DESTRELOAD_BURST_gc | DMA_CH_DESTDIR_INC_gc | DMA_CH_SRCRELOAD_BLOCK_gc | DMA_CH_SRCDIR_INC_gc; //Dest reloads after each burst, with byte incrementing. Src reloads at end of block, also incrementing address. + 73e: 30 93 42 01 sts 0x0142, r19 + DMA.CH3.TRIGSRC = DMA_CH_TRIGSRC_EVSYS_CH1_gc; //Triggered from TCC0 when it hits PER + 742: c0 93 43 01 sts 0x0143, r28 + DMA.CH3.TRFCNT = auxDacBufLen; + 746: 80 91 02 20 lds r24, 0x2002 + 74a: 90 91 03 20 lds r25, 0x2003 + 74e: 80 93 44 01 sts 0x0144, r24 + 752: 90 93 45 01 sts 0x0145, r25 + + DMA.CH3.SRCADDR0 = (( (uint16_t) &dacBuf_CH2[0]) >> 0) & 0xFF; //Source address is dacbuf + 756: 86 e6 ldi r24, 0x66 ; 102 + 758: 94 e2 ldi r25, 0x24 ; 36 + 75a: 80 93 48 01 sts 0x0148, r24 + DMA.CH3.SRCADDR1 = (( (uint16_t) &dacBuf_CH2[0]) >> 8) & 0xFF; + 75e: 90 93 49 01 sts 0x0149, r25 + DMA.CH3.SRCADDR2 = 0x00; + 762: 10 92 4a 01 sts 0x014A, r1 + + DMA.CH3.DESTADDR0 = (( (uint16_t) &DACB.CH1DATAH) >> 0) & 0xFF; //Dest address is high byte of DAC register + 766: 8b e3 ldi r24, 0x3B ; 59 + 768: 80 93 4c 01 sts 0x014C, r24 + DMA.CH3.DESTADDR1 = (( (uint16_t) &DACB.CH1DATAH) >> 8) & 0xFF; + 76c: 20 93 4d 01 sts 0x014D, r18 + DMA.CH3.DESTADDR2 = 0x00; + 770: 10 92 4e 01 sts 0x014E, r1 + + //Must enable last for REPCNT won't work! + DMA.CH3.CTRLA |= DMA_CH_ENABLE_bm; //Enable! + 774: 80 81 ld r24, Z + 776: 80 68 ori r24, 0x80 ; 128 + 778: 80 83 st Z, r24 + +} + 77a: cf 91 pop r28 + 77c: 08 95 ret + +0000077e : + +void tiny_dma_loop_mode_2(void){ + 77e: cf 93 push r28 + DMA.CH0.CTRLA = 0x00; + 780: e0 e0 ldi r30, 0x00 ; 0 + 782: f1 e0 ldi r31, 0x01 ; 1 + 784: 10 8a std Z+16, r1 ; 0x10 + DMA.CH0.CTRLA = DMA_CH_RESET_bm; + 786: b0 e4 ldi r27, 0x40 ; 64 + 788: b0 8b std Z+16, r27 ; 0x10 + + DMA.CH0.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm; //Do not repeat! + 78a: a4 e0 ldi r26, 0x04 ; 4 + 78c: a0 8b std Z+16, r26 ; 0x10 + DMA.CH0.CTRLB = 0x00; //No interrupt! + 78e: 11 8a std Z+17, r1 ; 0x11 + DMA.CH0.ADDRCTRL = DMA_CH_SRCRELOAD_BURST_gc | DMA_CH_SRCDIR_INC_gc | DMA_CH_DESTDIR_INC_gc; //Source reloads after each burst, with byte incrementing. Dest does not reload, but does increment address. + 790: 71 e9 ldi r23, 0x91 ; 145 + 792: 72 8b std Z+18, r23 ; 0x12 + DMA.CH0.TRIGSRC = DMA_CH_TRIGSRC_ADCA_CH0_gc; //Triggered from ADCA channel 0 + 794: 80 e1 ldi r24, 0x10 ; 16 + 796: 83 8b std Z+19, r24 ; 0x13 + DMA.CH0.TRFCNT = HALFPACKET_SIZE; + 798: 27 e7 ldi r18, 0x77 ; 119 + 79a: 31 e0 ldi r19, 0x01 ; 1 + 79c: 24 8b std Z+20, r18 ; 0x14 + 79e: 35 8b std Z+21, r19 ; 0x15 + + DMA.CH0.SRCADDR0 = (( (uint16_t) &ADCA.CH0.RESL) >> 0) & 0xFF; //Source address is ADC + 7a0: 84 e2 ldi r24, 0x24 ; 36 + 7a2: 80 8f std Z+24, r24 ; 0x18 + DMA.CH0.SRCADDR1 = (( (uint16_t) &ADCA.CH0.RESL) >> 8) & 0xFF; + 7a4: 62 e0 ldi r22, 0x02 ; 2 + 7a6: 61 8f std Z+25, r22 ; 0x19 + DMA.CH0.SRCADDR2 = 0x00; + 7a8: 12 8e std Z+26, r1 ; 0x1a + + DMA.CH0.DESTADDR0 = (( (uint16_t) &isoBuf[b1_state * PACKET_SIZE]) >> 0) & 0xFF; //Dest address is isoBuf + 7aa: c0 91 b4 20 lds r28, 0x20B4 + 7ae: 8e ee ldi r24, 0xEE ; 238 + 7b0: 92 e0 ldi r25, 0x02 ; 2 + 7b2: c8 9f mul r28, r24 + 7b4: a0 01 movw r20, r0 + 7b6: c9 9f mul r28, r25 + 7b8: 50 0d add r21, r0 + 7ba: 11 24 eor r1, r1 + 7bc: 4a 59 subi r20, 0x9A ; 154 + 7be: 59 4d sbci r21, 0xD9 ; 217 + 7c0: 44 8f std Z+28, r20 ; 0x1c + DMA.CH0.DESTADDR1 = (( (uint16_t) &isoBuf[b1_state * PACKET_SIZE]) >> 8) & 0xFF; + 7c2: c0 91 b4 20 lds r28, 0x20B4 + 7c6: c8 9f mul r28, r24 + 7c8: a0 01 movw r20, r0 + 7ca: c9 9f mul r28, r25 + 7cc: 50 0d add r21, r0 + 7ce: 11 24 eor r1, r1 + 7d0: 4a 59 subi r20, 0x9A ; 154 + 7d2: 59 4d sbci r21, 0xD9 ; 217 + 7d4: 55 8f std Z+29, r21 ; 0x1d + DMA.CH0.DESTADDR2 = 0x00; + 7d6: 16 8e std Z+30, r1 ; 0x1e + + //Must enable last for REPCNT won't work! + DMA.CH0.CTRLA |= DMA_CH_ENABLE_bm; //Enable! + 7d8: 40 89 ldd r20, Z+16 ; 0x10 + 7da: 40 68 ori r20, 0x80 ; 128 + 7dc: 40 8b std Z+16, r20 ; 0x10 + + DMA.CH1.CTRLA = 0x00; + 7de: 10 a2 std Z+32, r1 ; 0x20 + DMA.CH1.CTRLA = DMA_CH_RESET_bm; + 7e0: b0 a3 std Z+32, r27 ; 0x20 + + DMA.CH1.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm; //Do not repeat! + 7e2: a0 a3 std Z+32, r26 ; 0x20 + DMA.CH1.CTRLB = 0x00; //No interrupt! + 7e4: 11 a2 std Z+33, r1 ; 0x21 + DMA.CH1.ADDRCTRL = DMA_CH_SRCRELOAD_BURST_gc | DMA_CH_SRCDIR_INC_gc | DMA_CH_DESTDIR_INC_gc; //Source reloads after each burst, with byte incrementing. Dest does not reload, but does increment address. + 7e6: 72 a3 std Z+34, r23 ; 0x22 + DMA.CH1.TRIGSRC = DMA_CH_TRIGSRC_ADCA_CH2_gc; //Triggered from ADCA channel 0 + 7e8: 42 e1 ldi r20, 0x12 ; 18 + 7ea: 43 a3 std Z+35, r20 ; 0x23 + DMA.CH1.TRFCNT = HALFPACKET_SIZE; + 7ec: 24 a3 std Z+36, r18 ; 0x24 + 7ee: 35 a3 std Z+37, r19 ; 0x25 + + DMA.CH1.SRCADDR0 = (( (uint16_t) &ADCA.CH2.RESL) >> 0) & 0xFF; //Source address is ADC + 7f0: 24 e3 ldi r18, 0x34 ; 52 + 7f2: 20 a7 std Z+40, r18 ; 0x28 + DMA.CH1.SRCADDR1 = (( (uint16_t) &ADCA.CH2.RESL) >> 8) & 0xFF; + 7f4: 61 a7 std Z+41, r22 ; 0x29 + DMA.CH1.SRCADDR2 = 0x00; + 7f6: 12 a6 std Z+42, r1 ; 0x2a + + DMA.CH1.DESTADDR0 = (( (uint16_t) &isoBuf[b1_state * PACKET_SIZE + HALFPACKET_SIZE]) >> 0) & 0xFF; //Dest address is isoBuf + 7f8: 40 91 b4 20 lds r20, 0x20B4 + 7fc: 48 9f mul r20, r24 + 7fe: 90 01 movw r18, r0 + 800: 49 9f mul r20, r25 + 802: 30 0d add r19, r0 + 804: 11 24 eor r1, r1 + 806: 23 52 subi r18, 0x23 ; 35 + 808: 38 4d sbci r19, 0xD8 ; 216 + 80a: 24 a7 std Z+44, r18 ; 0x2c + DMA.CH1.DESTADDR1 = (( (uint16_t) &isoBuf[b1_state * PACKET_SIZE + HALFPACKET_SIZE]) >> 8) & 0xFF; + 80c: 40 91 b4 20 lds r20, 0x20B4 + 810: 48 9f mul r20, r24 + 812: 90 01 movw r18, r0 + 814: 49 9f mul r20, r25 + 816: 30 0d add r19, r0 + 818: 11 24 eor r1, r1 + 81a: c9 01 movw r24, r18 + 81c: 83 52 subi r24, 0x23 ; 35 + 81e: 98 4d sbci r25, 0xD8 ; 216 + 820: 95 a7 std Z+45, r25 ; 0x2d + DMA.CH1.DESTADDR2 = 0x00; + 822: 16 a6 std Z+46, r1 ; 0x2e + + //Must enable last for REPCNT won't work! + DMA.CH1.CTRLA |= DMA_CH_ENABLE_bm; //Enable! + 824: 80 a1 ldd r24, Z+32 ; 0x20 + 826: 80 68 ori r24, 0x80 ; 128 + 828: 80 a3 std Z+32, r24 ; 0x20 +} + 82a: cf 91 pop r28 + 82c: 08 95 ret + +0000082e : + + + +void tiny_dma_set_mode_3(void){ + 82e: cf 93 push r28 + + global_mode = 3; + 830: c3 e0 ldi r28, 0x03 ; 3 + 832: c0 93 00 20 sts 0x2000, r28 + + tiny_dma_flush(); + 836: 29 de rcall .-942 ; 0x48a + + //AUX channel (to keep it tx, therefore always rx) + DMA.CH1.CTRLA = 0x00; + 838: e0 e0 ldi r30, 0x00 ; 0 + 83a: f1 e0 ldi r31, 0x01 ; 1 + 83c: 10 a2 std Z+32, r1 ; 0x20 + DMA.CH1.CTRLA = DMA_CH_RESET_bm; + 83e: 80 e4 ldi r24, 0x40 ; 64 + 840: 80 a3 std Z+32, r24 ; 0x20 + + DMA.CH1.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm; //Do not repeat! + 842: 84 e0 ldi r24, 0x04 ; 4 + 844: 80 a3 std Z+32, r24 ; 0x20 + DMA.CH1.CTRLB = 0x00; //No int + 846: 11 a2 std Z+33, r1 ; 0x21 + DMA.CH1.ADDRCTRL = DMA_CH_SRCDIR_FIXED_gc | DMA_CH_DESTDIR_FIXED_gc; //Source and address fixed. + 848: 12 a2 std Z+34, r1 ; 0x22 + DMA.CH1.TRIGSRC = DMA_CH_TRIGSRC_USARTC0_RXC_gc; + 84a: 8b e4 ldi r24, 0x4B ; 75 + 84c: 83 a3 std Z+35, r24 ; 0x23 + DMA.CH1.TRFCNT = 0; + 84e: 14 a2 std Z+36, r1 ; 0x24 + 850: 15 a2 std Z+37, r1 ; 0x25 + DMA.CH1.REPCNT = 0; + 852: 16 a2 std Z+38, r1 ; 0x26 + + DMA.CH1.SRCADDR0 = (( (uint16_t) &dummy) >> 0) & 0xFF; + 854: 81 e0 ldi r24, 0x01 ; 1 + 856: 90 e2 ldi r25, 0x20 ; 32 + 858: 80 a7 std Z+40, r24 ; 0x28 + DMA.CH1.SRCADDR1 = (( (uint16_t) &dummy) >> 8) & 0xFF; + 85a: 91 a7 std Z+41, r25 ; 0x29 + DMA.CH1.SRCADDR2 = 0x00; + 85c: 12 a6 std Z+42, r1 ; 0x2a + + DMA.CH1.DESTADDR0 = (( (uint16_t) &USARTC0.DATA) >> 0) & 0xFF; + 85e: 80 ea ldi r24, 0xA0 ; 160 + 860: 84 a7 std Z+44, r24 ; 0x2c + DMA.CH1.DESTADDR1 = (( (uint16_t) &USARTC0.DATA) >> 8) & 0xFF; + 862: 88 e0 ldi r24, 0x08 ; 8 + 864: 85 a7 std Z+45, r24 ; 0x2d + DMA.CH1.DESTADDR2 = 0x00; + 866: 16 a6 std Z+46, r1 ; 0x2e + + //Must enable last for REPCNT won't work! + DMA.CH1.CTRLA |= DMA_CH_REPEAT_bm | DMA_CH_ENABLE_bm; //Enable! + 868: 80 a1 ldd r24, Z+32 ; 0x20 + 86a: 80 6a ori r24, 0xA0 ; 160 + 86c: 80 a3 std Z+32, r24 ; 0x20 + + USARTC0.DATA = 0x55; + 86e: 85 e5 ldi r24, 0x55 ; 85 + 870: 80 93 a0 08 sts 0x08A0, r24 + + DMA.CH2.REPCNT = 0; //Repeat forever! + 874: 16 aa std Z+54, r1 ; 0x36 + DMA.CH2.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm | DMA_CH_REPEAT_bm; + 876: 34 e2 ldi r19, 0x24 ; 36 + 878: 30 ab std Z+48, r19 ; 0x30 + DMA.CH2.CTRLB = 0x00; //No interrupt for DacBuf!! + 87a: 11 aa std Z+49, r1 ; 0x31 + DMA.CH2.ADDRCTRL = DMA_CH_DESTRELOAD_BURST_gc | DMA_CH_DESTDIR_INC_gc | DMA_CH_SRCRELOAD_BLOCK_gc | DMA_CH_SRCDIR_INC_gc; //Dest reloads after each burst, with byte incrementing. Src reloads at end of block, also incrementing address. + 87c: 29 e5 ldi r18, 0x59 ; 89 + 87e: 22 ab std Z+50, r18 ; 0x32 + DMA.CH2.TRIGSRC = DMA_CH_TRIGSRC_EVSYS_CH1_gc; //Triggered from TCC0 when it hits PER + 880: 82 e0 ldi r24, 0x02 ; 2 + 882: 83 ab std Z+51, r24 ; 0x33 + DMA.CH2.TRFCNT = auxDacBufLen; + 884: 80 91 02 20 lds r24, 0x2002 + 888: 90 91 03 20 lds r25, 0x2003 + 88c: 84 ab std Z+52, r24 ; 0x34 + 88e: 95 ab std Z+53, r25 ; 0x35 + + DMA.CH2.SRCADDR0 = (( (uint16_t) &dacBuf_CH2[0]) >> 0) & 0xFF; //Source address is dacbuf + 890: 86 e6 ldi r24, 0x66 ; 102 + 892: 94 e2 ldi r25, 0x24 ; 36 + 894: 80 af std Z+56, r24 ; 0x38 + DMA.CH2.SRCADDR1 = (( (uint16_t) &dacBuf_CH2[0]) >> 8) & 0xFF; + 896: 91 af std Z+57, r25 ; 0x39 + DMA.CH2.SRCADDR2 = 0x00; + 898: 12 ae std Z+58, r1 ; 0x3a + + DMA.CH2.DESTADDR0 = (( (uint16_t) &DACB.CH1DATAH) >> 0) & 0xFF; //Dest address is high byte of DAC register + 89a: 8b e3 ldi r24, 0x3B ; 59 + 89c: 84 af std Z+60, r24 ; 0x3c + DMA.CH2.DESTADDR1 = (( (uint16_t) &DACB.CH1DATAH) >> 8) & 0xFF; + 89e: c0 93 3d 01 sts 0x013D, r28 + DMA.CH2.DESTADDR2 = 0x00; + 8a2: 10 92 3e 01 sts 0x013E, r1 + + //Must enable last for REPCNT won't work! + DMA.CH2.CTRLA |= DMA_CH_ENABLE_bm; //Enable! + 8a6: 80 a9 ldd r24, Z+48 ; 0x30 + 8a8: 80 68 ori r24, 0x80 ; 128 + 8aa: 80 ab std Z+48, r24 ; 0x30 + + DMA.CH3.REPCNT = 0; //Repeat forever! + 8ac: 10 92 46 01 sts 0x0146, r1 + DMA.CH3.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm | DMA_CH_REPEAT_bm; + 8b0: e0 e4 ldi r30, 0x40 ; 64 + 8b2: f1 e0 ldi r31, 0x01 ; 1 + 8b4: 30 83 st Z, r19 + DMA.CH3.CTRLB = 0x00; //Hi interrupt on block complete + 8b6: 10 92 41 01 sts 0x0141, r1 + DMA.CH3.ADDRCTRL = DMA_CH_DESTRELOAD_BURST_gc | DMA_CH_DESTDIR_INC_gc | DMA_CH_SRCRELOAD_BLOCK_gc | DMA_CH_SRCDIR_INC_gc; //Dest reloads after each burst, with byte incrementing. Src reloads at end of block, also incrementing address. + 8ba: 20 93 42 01 sts 0x0142, r18 + DMA.CH3.TRIGSRC = DMA_CH_TRIGSRC_EVSYS_CH2_gc; //Triggered from TCC0 when it hits PER + 8be: c0 93 43 01 sts 0x0143, r28 + DMA.CH3.TRFCNT = dacBuf_len; + 8c2: 80 91 04 20 lds r24, 0x2004 + 8c6: 90 91 05 20 lds r25, 0x2005 + 8ca: 80 93 44 01 sts 0x0144, r24 + 8ce: 90 93 45 01 sts 0x0145, r25 + + DMA.CH3.SRCADDR0 = (( (uint16_t) &dacBuf_CH1[0]) >> 0) & 0xFF; //Source address is dacbuf + 8d2: 86 e5 ldi r24, 0x56 ; 86 + 8d4: 92 e2 ldi r25, 0x22 ; 34 + 8d6: 80 93 48 01 sts 0x0148, r24 + DMA.CH3.SRCADDR1 = (( (uint16_t) &dacBuf_CH1[0]) >> 8) & 0xFF; + 8da: 90 93 49 01 sts 0x0149, r25 + DMA.CH3.SRCADDR2 = 0x00; + 8de: 10 92 4a 01 sts 0x014A, r1 + + DMA.CH3.DESTADDR0 = (( (uint16_t) &DACB.CH0DATAH) >> 0) & 0xFF; //Dest address is high byte of DAC register + 8e2: 89 e3 ldi r24, 0x39 ; 57 + 8e4: 80 93 4c 01 sts 0x014C, r24 + DMA.CH3.DESTADDR1 = (( (uint16_t) &DACB.CH0DATAH) >> 8) & 0xFF; + 8e8: c0 93 4d 01 sts 0x014D, r28 + DMA.CH3.DESTADDR2 = 0x00; + 8ec: 10 92 4e 01 sts 0x014E, r1 + + //Must enable last for REPCNT won't work! + DMA.CH3.CTRLA |= DMA_CH_ENABLE_bm; //Enable! + 8f0: 80 81 ld r24, Z + 8f2: 80 68 ori r24, 0x80 ; 128 + 8f4: 80 83 st Z, r24 + +} + 8f6: cf 91 pop r28 + 8f8: 08 95 ret + +000008fa : + +void tiny_dma_loop_mode_3(void){ + //Actual data being transferred + DMA.CH0.CTRLA = 0x00; + 8fa: e0 e0 ldi r30, 0x00 ; 0 + 8fc: f1 e0 ldi r31, 0x01 ; 1 + 8fe: 10 8a std Z+16, r1 ; 0x10 + DMA.CH0.CTRLA = DMA_CH_RESET_bm; + 900: 80 e4 ldi r24, 0x40 ; 64 + 902: 80 8b std Z+16, r24 ; 0x10 + + DMA.CH0.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm; //Do not repeat! + 904: 84 e0 ldi r24, 0x04 ; 4 + 906: 80 8b std Z+16, r24 ; 0x10 + DMA.CH0.CTRLB = 0x00; //No interrupt + 908: 11 8a std Z+17, r1 ; 0x11 + DMA.CH0.ADDRCTRL = DMA_CH_SRCRELOAD_BURST_gc | DMA_CH_SRCDIR_INC_gc | DMA_CH_DESTDIR_INC_gc; //Source reloads after each burst, with byte incrementing. Dest does not reload, but does increment address. + 90a: 81 e9 ldi r24, 0x91 ; 145 + 90c: 82 8b std Z+18, r24 ; 0x12 + DMA.CH0.TRIGSRC = DMA_CH_TRIGSRC_USARTC0_RXC_gc; + 90e: 8b e4 ldi r24, 0x4B ; 75 + 910: 83 8b std Z+19, r24 ; 0x13 + DMA.CH0.TRFCNT = HALFPACKET_SIZE; + 912: 87 e7 ldi r24, 0x77 ; 119 + 914: 91 e0 ldi r25, 0x01 ; 1 + 916: 84 8b std Z+20, r24 ; 0x14 + 918: 95 8b std Z+21, r25 ; 0x15 + + DMA.CH0.SRCADDR0 = (( (uint16_t) &USARTC0.DATA) >> 0) & 0xFF; //Source address is ADC + 91a: 80 ea ldi r24, 0xA0 ; 160 + 91c: 80 8f std Z+24, r24 ; 0x18 + DMA.CH0.SRCADDR1 = (( (uint16_t) &USARTC0.DATA) >> 8) & 0xFF; + 91e: 88 e0 ldi r24, 0x08 ; 8 + 920: 81 8f std Z+25, r24 ; 0x19 + DMA.CH0.SRCADDR2 = 0x00; + 922: 12 8e std Z+26, r1 ; 0x1a + + DMA.CH0.DESTADDR0 = (( (uint16_t) &isoBuf[b1_state*PACKET_SIZE]) >> 0) & 0xFF; //Dest address is isoBuf + 924: 40 91 b4 20 lds r20, 0x20B4 + 928: 8e ee ldi r24, 0xEE ; 238 + 92a: 92 e0 ldi r25, 0x02 ; 2 + 92c: 48 9f mul r20, r24 + 92e: 90 01 movw r18, r0 + 930: 49 9f mul r20, r25 + 932: 30 0d add r19, r0 + 934: 11 24 eor r1, r1 + 936: 2a 59 subi r18, 0x9A ; 154 + 938: 39 4d sbci r19, 0xD9 ; 217 + 93a: 24 8f std Z+28, r18 ; 0x1c + DMA.CH0.DESTADDR1 = (( (uint16_t) &isoBuf[b1_state*PACKET_SIZE]) >> 8) & 0xFF; + 93c: 40 91 b4 20 lds r20, 0x20B4 + 940: 48 9f mul r20, r24 + 942: 90 01 movw r18, r0 + 944: 49 9f mul r20, r25 + 946: 30 0d add r19, r0 + 948: 11 24 eor r1, r1 + 94a: c9 01 movw r24, r18 + 94c: 8a 59 subi r24, 0x9A ; 154 + 94e: 99 4d sbci r25, 0xD9 ; 217 + 950: 95 8f std Z+29, r25 ; 0x1d + DMA.CH0.DESTADDR2 = 0x00; + 952: 16 8e std Z+30, r1 ; 0x1e + + //Must enable last for REPCNT won't work! + DMA.CH0.CTRLA |= DMA_CH_ENABLE_bm; //Enable! + 954: 80 89 ldd r24, Z+16 ; 0x10 + 956: 80 68 ori r24, 0x80 ; 128 + 958: 80 8b std Z+16, r24 ; 0x10 + 95a: 08 95 ret + +0000095c : +} + +void tiny_dma_set_mode_4(void){ + 95c: cf 93 push r28 + + global_mode = 4; + 95e: c4 e0 ldi r28, 0x04 ; 4 + 960: c0 93 00 20 sts 0x2000, r28 + + tiny_dma_flush(); + 964: 92 dd rcall .-1244 ; 0x48a + + //AUX channel (to keep it tx, therefore always rx) + DMA.CH1.CTRLA = 0x00; + 966: e0 e0 ldi r30, 0x00 ; 0 + 968: f1 e0 ldi r31, 0x01 ; 1 + 96a: 10 a2 std Z+32, r1 ; 0x20 + DMA.CH1.CTRLA = DMA_CH_RESET_bm; + 96c: 80 e4 ldi r24, 0x40 ; 64 + 96e: 80 a3 std Z+32, r24 ; 0x20 + + DMA.CH1.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm; //Do not repeat! + 970: c0 a3 std Z+32, r28 ; 0x20 + DMA.CH1.CTRLB = 0x00; //No int + 972: 11 a2 std Z+33, r1 ; 0x21 + DMA.CH1.ADDRCTRL = DMA_CH_SRCDIR_FIXED_gc | DMA_CH_DESTDIR_FIXED_gc; //Source and address fixed. + 974: 12 a2 std Z+34, r1 ; 0x22 + DMA.CH1.TRIGSRC = DMA_CH_TRIGSRC_USARTC0_RXC_gc; + 976: 8b e4 ldi r24, 0x4B ; 75 + 978: 83 a3 std Z+35, r24 ; 0x23 + DMA.CH1.TRFCNT = 0; + 97a: 14 a2 std Z+36, r1 ; 0x24 + 97c: 15 a2 std Z+37, r1 ; 0x25 + DMA.CH1.REPCNT = 0; + 97e: 16 a2 std Z+38, r1 ; 0x26 + + DMA.CH1.SRCADDR0 = (( (uint16_t) &dummy) >> 0) & 0xFF; + 980: 81 e0 ldi r24, 0x01 ; 1 + 982: 90 e2 ldi r25, 0x20 ; 32 + 984: 80 a7 std Z+40, r24 ; 0x28 + DMA.CH1.SRCADDR1 = (( (uint16_t) &dummy) >> 8) & 0xFF; + 986: 91 a7 std Z+41, r25 ; 0x29 + DMA.CH1.SRCADDR2 = 0x00; + 988: 12 a6 std Z+42, r1 ; 0x2a + + DMA.CH1.DESTADDR0 = (( (uint16_t) &USARTC0.DATA) >> 0) & 0xFF; + 98a: 80 ea ldi r24, 0xA0 ; 160 + 98c: 84 a7 std Z+44, r24 ; 0x2c + DMA.CH1.DESTADDR1 = (( (uint16_t) &USARTC0.DATA) >> 8) & 0xFF; + 98e: 88 e0 ldi r24, 0x08 ; 8 + 990: 85 a7 std Z+45, r24 ; 0x2d + DMA.CH1.DESTADDR2 = 0x00; + 992: 16 a6 std Z+46, r1 ; 0x2e + + //Must enable last for REPCNT won't work! + DMA.CH1.CTRLA |= DMA_CH_REPEAT_bm | DMA_CH_ENABLE_bm; //Enable! + 994: 80 a1 ldd r24, Z+32 ; 0x20 + 996: 80 6a ori r24, 0xA0 ; 160 + 998: 80 a3 std Z+32, r24 ; 0x20 + + USARTC0.DATA = 0x55; + 99a: 85 e5 ldi r24, 0x55 ; 85 + 99c: 80 93 a0 08 sts 0x08A0, r24 + + DMA.CH2.REPCNT = 0; //Repeat forever! + 9a0: 16 aa std Z+54, r1 ; 0x36 + DMA.CH2.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm | DMA_CH_REPEAT_bm; + 9a2: 44 e2 ldi r20, 0x24 ; 36 + 9a4: 40 ab std Z+48, r20 ; 0x30 + DMA.CH2.CTRLB = 0x00; //Hi interrupt on block complete + 9a6: 11 aa std Z+49, r1 ; 0x31 + DMA.CH2.ADDRCTRL = DMA_CH_DESTRELOAD_BURST_gc | DMA_CH_DESTDIR_INC_gc | DMA_CH_SRCRELOAD_BLOCK_gc | DMA_CH_SRCDIR_INC_gc; //Dest reloads after each burst, with byte incrementing. Src reloads at end of block, also incrementing address. + 9a8: 39 e5 ldi r19, 0x59 ; 89 + 9aa: 32 ab std Z+50, r19 ; 0x32 + DMA.CH2.TRIGSRC = DMA_CH_TRIGSRC_EVSYS_CH2_gc; //Triggered from TCC0 when it hits PER + 9ac: 23 e0 ldi r18, 0x03 ; 3 + 9ae: 23 ab std Z+51, r18 ; 0x33 + DMA.CH2.TRFCNT = dacBuf_len; + 9b0: 80 91 04 20 lds r24, 0x2004 + 9b4: 90 91 05 20 lds r25, 0x2005 + 9b8: 84 ab std Z+52, r24 ; 0x34 + 9ba: 95 ab std Z+53, r25 ; 0x35 + + DMA.CH2.SRCADDR0 = (( (uint16_t) &dacBuf_CH1[0]) >> 0) & 0xFF; //Source address is dacbuf + 9bc: 86 e5 ldi r24, 0x56 ; 86 + 9be: 92 e2 ldi r25, 0x22 ; 34 + 9c0: 80 af std Z+56, r24 ; 0x38 + DMA.CH2.SRCADDR1 = (( (uint16_t) &dacBuf_CH1[0]) >> 8) & 0xFF; + 9c2: 91 af std Z+57, r25 ; 0x39 + DMA.CH2.SRCADDR2 = 0x00; + 9c4: 12 ae std Z+58, r1 ; 0x3a + + DMA.CH2.DESTADDR0 = (( (uint16_t) &DACB.CH0DATAH) >> 0) & 0xFF; //Dest address is high byte of DAC register + 9c6: 89 e3 ldi r24, 0x39 ; 57 + 9c8: 84 af std Z+60, r24 ; 0x3c + DMA.CH2.DESTADDR1 = (( (uint16_t) &DACB.CH0DATAH) >> 8) & 0xFF; + 9ca: 20 93 3d 01 sts 0x013D, r18 + DMA.CH2.DESTADDR2 = 0x00; + 9ce: 10 92 3e 01 sts 0x013E, r1 + + //Must enable last for REPCNT won't work! + DMA.CH2.CTRLA |= DMA_CH_ENABLE_bm; //Enable! + 9d2: 80 a9 ldd r24, Z+48 ; 0x30 + 9d4: 80 68 ori r24, 0x80 ; 128 + 9d6: 80 ab std Z+48, r24 ; 0x30 + + + DMA.CH3.REPCNT = 0; //Repeat forever! + 9d8: 10 92 46 01 sts 0x0146, r1 + DMA.CH3.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm | DMA_CH_REPEAT_bm; + 9dc: e0 e4 ldi r30, 0x40 ; 64 + 9de: f1 e0 ldi r31, 0x01 ; 1 + 9e0: 40 83 st Z, r20 + DMA.CH3.CTRLB = 0x00; //No interrupt for DacBuf!! + 9e2: 10 92 41 01 sts 0x0141, r1 + DMA.CH3.ADDRCTRL = DMA_CH_DESTRELOAD_BURST_gc | DMA_CH_DESTDIR_INC_gc | DMA_CH_SRCRELOAD_BLOCK_gc | DMA_CH_SRCDIR_INC_gc; //Dest reloads after each burst, with byte incrementing. Src reloads at end of block, also incrementing address. + 9e6: 30 93 42 01 sts 0x0142, r19 + DMA.CH3.TRIGSRC = DMA_CH_TRIGSRC_EVSYS_CH1_gc; //Triggered from TCC0 when it hits PER + 9ea: 82 e0 ldi r24, 0x02 ; 2 + 9ec: 80 93 43 01 sts 0x0143, r24 + DMA.CH3.TRFCNT = auxDacBufLen; + 9f0: 80 91 02 20 lds r24, 0x2002 + 9f4: 90 91 03 20 lds r25, 0x2003 + 9f8: 80 93 44 01 sts 0x0144, r24 + 9fc: 90 93 45 01 sts 0x0145, r25 + + DMA.CH3.SRCADDR0 = (( (uint16_t) &dacBuf_CH2[0]) >> 0) & 0xFF; //Source address is dacbuf + a00: 86 e6 ldi r24, 0x66 ; 102 + a02: 94 e2 ldi r25, 0x24 ; 36 + a04: 80 93 48 01 sts 0x0148, r24 + DMA.CH3.SRCADDR1 = (( (uint16_t) &dacBuf_CH2[0]) >> 8) & 0xFF; + a08: 90 93 49 01 sts 0x0149, r25 + DMA.CH3.SRCADDR2 = 0x00; + a0c: 10 92 4a 01 sts 0x014A, r1 + + DMA.CH3.DESTADDR0 = (( (uint16_t) &DACB.CH1DATAH) >> 0) & 0xFF; //Dest address is high byte of DAC register + a10: 8b e3 ldi r24, 0x3B ; 59 + a12: 80 93 4c 01 sts 0x014C, r24 + DMA.CH3.DESTADDR1 = (( (uint16_t) &DACB.CH1DATAH) >> 8) & 0xFF; + a16: 20 93 4d 01 sts 0x014D, r18 + DMA.CH3.DESTADDR2 = 0x00; + a1a: 10 92 4e 01 sts 0x014E, r1 + + //Must enable last for REPCNT won't work! + DMA.CH3.CTRLA |= DMA_CH_ENABLE_bm; //Enable! + a1e: 80 81 ld r24, Z + a20: 80 68 ori r24, 0x80 ; 128 + a22: 80 83 st Z, r24 +} + a24: cf 91 pop r28 + a26: 08 95 ret + +00000a28 : + +void tiny_dma_loop_mode_4(void){ + a28: cf 93 push r28 + //Actual data being transferred + DMA.CH0.CTRLA = 0x00; + a2a: e0 e0 ldi r30, 0x00 ; 0 + a2c: f1 e0 ldi r31, 0x01 ; 1 + a2e: 10 8a std Z+16, r1 ; 0x10 + DMA.CH0.CTRLA = DMA_CH_RESET_bm; + a30: b0 e4 ldi r27, 0x40 ; 64 + a32: b0 8b std Z+16, r27 ; 0x10 + + DMA.CH0.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm; //Do not repeat! + a34: a4 e0 ldi r26, 0x04 ; 4 + a36: a0 8b std Z+16, r26 ; 0x10 + DMA.CH0.CTRLB = 0x00; //No interrupt + a38: 11 8a std Z+17, r1 ; 0x11 + DMA.CH0.ADDRCTRL = DMA_CH_SRCRELOAD_BURST_gc | DMA_CH_SRCDIR_INC_gc | DMA_CH_DESTDIR_INC_gc; //Source reloads after each burst, with byte incrementing. Dest does not reload, but does increment address. + a3a: 71 e9 ldi r23, 0x91 ; 145 + a3c: 72 8b std Z+18, r23 ; 0x12 + DMA.CH0.TRIGSRC = DMA_CH_TRIGSRC_USARTC0_RXC_gc; + a3e: 8b e4 ldi r24, 0x4B ; 75 + a40: 83 8b std Z+19, r24 ; 0x13 + DMA.CH0.TRFCNT = HALFPACKET_SIZE; + a42: 27 e7 ldi r18, 0x77 ; 119 + a44: 31 e0 ldi r19, 0x01 ; 1 + a46: 24 8b std Z+20, r18 ; 0x14 + a48: 35 8b std Z+21, r19 ; 0x15 + + DMA.CH0.SRCADDR0 = (( (uint16_t) &USARTC0.DATA) >> 0) & 0xFF; //Source address is ADC + a4a: 80 ea ldi r24, 0xA0 ; 160 + a4c: 80 8f std Z+24, r24 ; 0x18 + DMA.CH0.SRCADDR1 = (( (uint16_t) &USARTC0.DATA) >> 8) & 0xFF; + a4e: 68 e0 ldi r22, 0x08 ; 8 + a50: 61 8f std Z+25, r22 ; 0x19 + DMA.CH0.SRCADDR2 = 0x00; + a52: 12 8e std Z+26, r1 ; 0x1a + + DMA.CH0.DESTADDR0 = (( (uint16_t) &isoBuf[b1_state*PACKET_SIZE]) >> 0) & 0xFF; //Dest address is isoBuf + a54: c0 91 b4 20 lds r28, 0x20B4 + a58: 8e ee ldi r24, 0xEE ; 238 + a5a: 92 e0 ldi r25, 0x02 ; 2 + a5c: c8 9f mul r28, r24 + a5e: a0 01 movw r20, r0 + a60: c9 9f mul r28, r25 + a62: 50 0d add r21, r0 + a64: 11 24 eor r1, r1 + a66: 4a 59 subi r20, 0x9A ; 154 + a68: 59 4d sbci r21, 0xD9 ; 217 + a6a: 44 8f std Z+28, r20 ; 0x1c + DMA.CH0.DESTADDR1 = (( (uint16_t) &isoBuf[b1_state*PACKET_SIZE]) >> 8) & 0xFF; + a6c: c0 91 b4 20 lds r28, 0x20B4 + a70: c8 9f mul r28, r24 + a72: a0 01 movw r20, r0 + a74: c9 9f mul r28, r25 + a76: 50 0d add r21, r0 + a78: 11 24 eor r1, r1 + a7a: 4a 59 subi r20, 0x9A ; 154 + a7c: 59 4d sbci r21, 0xD9 ; 217 + a7e: 55 8f std Z+29, r21 ; 0x1d + DMA.CH0.DESTADDR2 = 0x00; + a80: 16 8e std Z+30, r1 ; 0x1e + + //Must enable last for REPCNT won't work! + DMA.CH0.CTRLA |= DMA_CH_ENABLE_bm; //Enable! + a82: 40 89 ldd r20, Z+16 ; 0x10 + a84: 40 68 ori r20, 0x80 ; 128 + a86: 40 8b std Z+16, r20 ; 0x10 + + DMA.CH2.CTRLA = 0x00; + a88: 10 aa std Z+48, r1 ; 0x30 + DMA.CH2.CTRLA = DMA_CH_RESET_bm; + a8a: b0 ab std Z+48, r27 ; 0x30 + + DMA.CH2.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm; //Do not repeat! + a8c: a0 ab std Z+48, r26 ; 0x30 + DMA.CH2.CTRLB = 0x00; //Hi interrupt on block complete + a8e: 11 aa std Z+49, r1 ; 0x31 + DMA.CH2.ADDRCTRL = DMA_CH_SRCRELOAD_BURST_gc | DMA_CH_SRCDIR_INC_gc | DMA_CH_DESTDIR_INC_gc; //Source reloads after each burst, with byte incrementing. Dest does not reload, but does increment address. + a90: 72 ab std Z+50, r23 ; 0x32 + DMA.CH2.TRIGSRC = DMA_CH_TRIGSRC_SPIC_gc; + a92: 4a e4 ldi r20, 0x4A ; 74 + a94: 43 ab std Z+51, r20 ; 0x33 + DMA.CH2.TRFCNT = HALFPACKET_SIZE; + a96: 24 ab std Z+52, r18 ; 0x34 + a98: 35 ab std Z+53, r19 ; 0x35 + + DMA.CH2.SRCADDR0 = (( (uint16_t) &SPIC.DATA) >> 0) & 0xFF; //Source address is ADC + a9a: 23 ec ldi r18, 0xC3 ; 195 + a9c: 20 af std Z+56, r18 ; 0x38 + DMA.CH2.SRCADDR1 = (( (uint16_t) &SPIC.DATA) >> 8) & 0xFF; + a9e: 61 af std Z+57, r22 ; 0x39 + DMA.CH2.SRCADDR2 = 0x00; + aa0: 12 ae std Z+58, r1 ; 0x3a + + DMA.CH2.DESTADDR0 = (( (uint16_t) &isoBuf[b1_state * PACKET_SIZE + HALFPACKET_SIZE]) >> 0) & 0xFF; //Dest address is isoBuf + aa2: 40 91 b4 20 lds r20, 0x20B4 + aa6: 48 9f mul r20, r24 + aa8: 90 01 movw r18, r0 + aaa: 49 9f mul r20, r25 + aac: 30 0d add r19, r0 + aae: 11 24 eor r1, r1 + ab0: 23 52 subi r18, 0x23 ; 35 + ab2: 38 4d sbci r19, 0xD8 ; 216 + ab4: 24 af std Z+60, r18 ; 0x3c + DMA.CH2.DESTADDR1 = (( (uint16_t) &isoBuf[b1_state * PACKET_SIZE + HALFPACKET_SIZE]) >> 8) & 0xFF; + ab6: 40 91 b4 20 lds r20, 0x20B4 + aba: 48 9f mul r20, r24 + abc: 90 01 movw r18, r0 + abe: 49 9f mul r20, r25 + ac0: 30 0d add r19, r0 + ac2: 11 24 eor r1, r1 + ac4: c9 01 movw r24, r18 + ac6: 83 52 subi r24, 0x23 ; 35 + ac8: 98 4d sbci r25, 0xD8 ; 216 + aca: 90 93 3d 01 sts 0x013D, r25 + DMA.CH2.DESTADDR2 = 0x00; + ace: 10 92 3e 01 sts 0x013E, r1 + + //Must enable last for REPCNT won't work! + DMA.CH2.CTRLA |= DMA_CH_ENABLE_bm; //Enable! + ad2: 80 a9 ldd r24, Z+48 ; 0x30 + ad4: 80 68 ori r24, 0x80 ; 128 + ad6: 80 ab std Z+48, r24 ; 0x30 +} + ad8: cf 91 pop r28 + ada: 08 95 ret + +00000adc : + + +void tiny_dma_set_mode_5(void){ + global_mode = 5; + adc: 85 e0 ldi r24, 0x05 ; 5 + ade: 80 93 00 20 sts 0x2000, r24 + + tiny_dma_flush(); + ae2: d3 dc rcall .-1626 ; 0x48a + + DMA.CH2.REPCNT = 0; //Repeat forever! + ae4: e0 e0 ldi r30, 0x00 ; 0 + ae6: f1 e0 ldi r31, 0x01 ; 1 + ae8: 16 aa std Z+54, r1 ; 0x36 + DMA.CH2.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm | DMA_CH_REPEAT_bm; + aea: 54 e2 ldi r21, 0x24 ; 36 + aec: 50 ab std Z+48, r21 ; 0x30 + DMA.CH2.CTRLB = 0x00; //Hi interrupt on block complete + aee: 11 aa std Z+49, r1 ; 0x31 + DMA.CH2.ADDRCTRL = DMA_CH_DESTRELOAD_BURST_gc | DMA_CH_DESTDIR_INC_gc | DMA_CH_SRCRELOAD_BLOCK_gc | DMA_CH_SRCDIR_INC_gc; //Dest reloads after each burst, with byte incrementing. Src reloads at end of block, also incrementing address. + af0: 49 e5 ldi r20, 0x59 ; 89 + af2: 42 ab std Z+50, r20 ; 0x32 + DMA.CH2.TRIGSRC = DMA_CH_TRIGSRC_EVSYS_CH2_gc; //Triggered from TCC0 when it hits PER + af4: 23 e0 ldi r18, 0x03 ; 3 + af6: 23 ab std Z+51, r18 ; 0x33 + DMA.CH2.TRFCNT = dacBuf_len; + af8: 80 91 04 20 lds r24, 0x2004 + afc: 90 91 05 20 lds r25, 0x2005 + b00: 84 ab std Z+52, r24 ; 0x34 + b02: 95 ab std Z+53, r25 ; 0x35 + + DMA.CH2.SRCADDR0 = (( (uint16_t) &dacBuf_CH1[0]) >> 0) & 0xFF; //Source address is dacbuf + b04: 86 e5 ldi r24, 0x56 ; 86 + b06: 92 e2 ldi r25, 0x22 ; 34 + b08: 80 af std Z+56, r24 ; 0x38 + DMA.CH2.SRCADDR1 = (( (uint16_t) &dacBuf_CH1[0]) >> 8) & 0xFF; + b0a: 91 af std Z+57, r25 ; 0x39 + DMA.CH2.SRCADDR2 = 0x00; + b0c: 12 ae std Z+58, r1 ; 0x3a + + DMA.CH2.DESTADDR0 = (( (uint16_t) &DACB.CH0DATAH) >> 0) & 0xFF; //Dest address is high byte of DAC register + b0e: 39 e3 ldi r19, 0x39 ; 57 + b10: 34 af std Z+60, r19 ; 0x3c + DMA.CH2.DESTADDR1 = (( (uint16_t) &DACB.CH0DATAH) >> 8) & 0xFF; + b12: 20 93 3d 01 sts 0x013D, r18 + DMA.CH2.DESTADDR2 = 0x00; + b16: 10 92 3e 01 sts 0x013E, r1 + + //Must enable last for REPCNT won't work! + DMA.CH2.CTRLA |= DMA_CH_ENABLE_bm; //Enable! + b1a: 80 a9 ldd r24, Z+48 ; 0x30 + b1c: 80 68 ori r24, 0x80 ; 128 + b1e: 80 ab std Z+48, r24 ; 0x30 + + DMA.CH3.REPCNT = 0; //Repeat forever! + b20: 10 92 46 01 sts 0x0146, r1 + DMA.CH3.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm | DMA_CH_REPEAT_bm; + b24: e0 e4 ldi r30, 0x40 ; 64 + b26: f1 e0 ldi r31, 0x01 ; 1 + b28: 50 83 st Z, r21 + DMA.CH3.CTRLB = 0x00; //No interrupt for DacBuf!! + b2a: 10 92 41 01 sts 0x0141, r1 + DMA.CH3.ADDRCTRL = DMA_CH_DESTRELOAD_BURST_gc | DMA_CH_DESTDIR_INC_gc | DMA_CH_SRCRELOAD_BLOCK_gc | DMA_CH_SRCDIR_INC_gc; //Dest reloads after each burst, with byte incrementing. Src reloads at end of block, also incrementing address. + b2e: 40 93 42 01 sts 0x0142, r20 + DMA.CH3.TRIGSRC = DMA_CH_TRIGSRC_EVSYS_CH2_gc; //Triggered from TCC0 when it hits PER + b32: 20 93 43 01 sts 0x0143, r18 + DMA.CH3.TRFCNT = dacBuf_len; + b36: 80 91 04 20 lds r24, 0x2004 + b3a: 90 91 05 20 lds r25, 0x2005 + b3e: 80 93 44 01 sts 0x0144, r24 + b42: 90 93 45 01 sts 0x0145, r25 + + DMA.CH3.SRCADDR0 = (( (uint16_t) &isoBuf[0]) >> 0) & 0xFF; //Source address is dacbuf + b46: 86 e6 ldi r24, 0x66 ; 102 + b48: 96 e2 ldi r25, 0x26 ; 38 + b4a: 80 93 48 01 sts 0x0148, r24 + DMA.CH3.SRCADDR1 = (( (uint16_t) &isoBuf[0]) >> 8) & 0xFF; + b4e: 90 93 49 01 sts 0x0149, r25 + DMA.CH3.SRCADDR2 = 0x00; + b52: 10 92 4a 01 sts 0x014A, r1 + + DMA.CH3.DESTADDR0 = (( (uint16_t) &DACB.CH0DATAH) >> 0) & 0xFF; //Dest address is high byte of DAC register + b56: 30 93 4c 01 sts 0x014C, r19 + DMA.CH3.DESTADDR1 = (( (uint16_t) &DACB.CH0DATAH) >> 8) & 0xFF; + b5a: 20 93 4d 01 sts 0x014D, r18 + DMA.CH3.DESTADDR2 = 0x00; + b5e: 10 92 4e 01 sts 0x014E, r1 + + //Must enable last for REPCNT won't work! + DMA.CH3.CTRLA |= DMA_CH_ENABLE_bm; //Enable! + b62: 80 81 ld r24, Z + b64: 80 68 ori r24, 0x80 ; 128 + b66: 80 83 st Z, r24 + b68: 08 95 ret + +00000b6a : +} + +void tiny_dma_set_mode_6(void){ + + global_mode = 6; + b6a: 86 e0 ldi r24, 0x06 ; 6 + b6c: 80 93 00 20 sts 0x2000, r24 + + tiny_dma_flush(); + b70: 8c dc rcall .-1768 ; 0x48a + + DMA.CH2.REPCNT = 0; //Repeat forever! + b72: e0 e0 ldi r30, 0x00 ; 0 + b74: f1 e0 ldi r31, 0x01 ; 1 + b76: 16 aa std Z+54, r1 ; 0x36 + DMA.CH2.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm | DMA_CH_REPEAT_bm; + b78: 44 e2 ldi r20, 0x24 ; 36 + b7a: 40 ab std Z+48, r20 ; 0x30 + DMA.CH2.CTRLB = 0x00; //Hi interrupt on block complete + b7c: 11 aa std Z+49, r1 ; 0x31 + DMA.CH2.ADDRCTRL = DMA_CH_DESTRELOAD_BURST_gc | DMA_CH_DESTDIR_INC_gc | DMA_CH_SRCRELOAD_BLOCK_gc | DMA_CH_SRCDIR_INC_gc; //Dest reloads after each burst, with byte incrementing. Src reloads at end of block, also incrementing address. + b7e: 39 e5 ldi r19, 0x59 ; 89 + b80: 32 ab std Z+50, r19 ; 0x32 + DMA.CH2.TRIGSRC = DMA_CH_TRIGSRC_EVSYS_CH2_gc; //Triggered from TCC0 when it hits PER + b82: 23 e0 ldi r18, 0x03 ; 3 + b84: 23 ab std Z+51, r18 ; 0x33 + DMA.CH2.TRFCNT = dacBuf_len; + b86: 80 91 04 20 lds r24, 0x2004 + b8a: 90 91 05 20 lds r25, 0x2005 + b8e: 84 ab std Z+52, r24 ; 0x34 + b90: 95 ab std Z+53, r25 ; 0x35 + + DMA.CH2.SRCADDR0 = (( (uint16_t) &dacBuf_CH1[0]) >> 0) & 0xFF; //Source address is dacbuf + b92: 86 e5 ldi r24, 0x56 ; 86 + b94: 92 e2 ldi r25, 0x22 ; 34 + b96: 80 af std Z+56, r24 ; 0x38 + DMA.CH2.SRCADDR1 = (( (uint16_t) &dacBuf_CH1[0]) >> 8) & 0xFF; + b98: 91 af std Z+57, r25 ; 0x39 + DMA.CH2.SRCADDR2 = 0x00; + b9a: 12 ae std Z+58, r1 ; 0x3a + + DMA.CH2.DESTADDR0 = (( (uint16_t) &DACB.CH0DATAH) >> 0) & 0xFF; //Dest address is high byte of DAC register + b9c: 89 e3 ldi r24, 0x39 ; 57 + b9e: 84 af std Z+60, r24 ; 0x3c + DMA.CH2.DESTADDR1 = (( (uint16_t) &DACB.CH0DATAH) >> 8) & 0xFF; + ba0: 20 93 3d 01 sts 0x013D, r18 + DMA.CH2.DESTADDR2 = 0x00; + ba4: 10 92 3e 01 sts 0x013E, r1 + + //Must enable last for REPCNT won't work! + DMA.CH2.CTRLA |= DMA_CH_ENABLE_bm; //Enable! + ba8: 80 a9 ldd r24, Z+48 ; 0x30 + baa: 80 68 ori r24, 0x80 ; 128 + bac: 80 ab std Z+48, r24 ; 0x30 + + DMA.CH3.REPCNT = 0; //Repeat forever! + bae: 10 92 46 01 sts 0x0146, r1 + DMA.CH3.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm | DMA_CH_REPEAT_bm; + bb2: e0 e4 ldi r30, 0x40 ; 64 + bb4: f1 e0 ldi r31, 0x01 ; 1 + bb6: 40 83 st Z, r20 + DMA.CH3.CTRLB = 0x00; //No interrupt for DacBuf!! + bb8: 10 92 41 01 sts 0x0141, r1 + DMA.CH3.ADDRCTRL = DMA_CH_DESTRELOAD_BURST_gc | DMA_CH_DESTDIR_INC_gc | DMA_CH_SRCRELOAD_BLOCK_gc | DMA_CH_SRCDIR_INC_gc; //Dest reloads after each burst, with byte incrementing. Src reloads at end of block, also incrementing address. + bbc: 30 93 42 01 sts 0x0142, r19 + DMA.CH3.TRIGSRC = DMA_CH_TRIGSRC_EVSYS_CH1_gc; //Triggered from TCC0 when it hits PER + bc0: 82 e0 ldi r24, 0x02 ; 2 + bc2: 80 93 43 01 sts 0x0143, r24 + DMA.CH3.TRFCNT = auxDacBufLen; + bc6: 80 91 02 20 lds r24, 0x2002 + bca: 90 91 03 20 lds r25, 0x2003 + bce: 80 93 44 01 sts 0x0144, r24 + bd2: 90 93 45 01 sts 0x0145, r25 + + DMA.CH3.SRCADDR0 = (( (uint16_t) &dacBuf_CH2[0]) >> 0) & 0xFF; //Source address is dacbuf + bd6: 86 e6 ldi r24, 0x66 ; 102 + bd8: 94 e2 ldi r25, 0x24 ; 36 + bda: 80 93 48 01 sts 0x0148, r24 + DMA.CH3.SRCADDR1 = (( (uint16_t) &dacBuf_CH2[0]) >> 8) & 0xFF; + bde: 90 93 49 01 sts 0x0149, r25 + DMA.CH3.SRCADDR2 = 0x00; + be2: 10 92 4a 01 sts 0x014A, r1 + + DMA.CH3.DESTADDR0 = (( (uint16_t) &DACB.CH1DATAH) >> 0) & 0xFF; //Dest address is high byte of DAC register + be6: 8b e3 ldi r24, 0x3B ; 59 + be8: 80 93 4c 01 sts 0x014C, r24 + DMA.CH3.DESTADDR1 = (( (uint16_t) &DACB.CH1DATAH) >> 8) & 0xFF; + bec: 20 93 4d 01 sts 0x014D, r18 + DMA.CH3.DESTADDR2 = 0x00; + bf0: 10 92 4e 01 sts 0x014E, r1 + + //Must enable last for REPCNT won't work! + DMA.CH3.CTRLA |= DMA_CH_ENABLE_bm; //Enable! + bf4: 80 81 ld r24, Z + bf6: 80 68 ori r24, 0x80 ; 128 + bf8: 80 83 st Z, r24 + bfa: 08 95 ret + +00000bfc : + +} + +void tiny_dma_loop_mode_6(void){ + DMA.CH0.CTRLA = 0x00; + bfc: e0 e0 ldi r30, 0x00 ; 0 + bfe: f1 e0 ldi r31, 0x01 ; 1 + c00: 10 8a std Z+16, r1 ; 0x10 + DMA.CH0.CTRLA = DMA_CH_RESET_bm; + c02: 80 e4 ldi r24, 0x40 ; 64 + c04: 80 8b std Z+16, r24 ; 0x10 + + DMA.CH0.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm; //Do not repeat! + c06: 84 e0 ldi r24, 0x04 ; 4 + c08: 80 8b std Z+16, r24 ; 0x10 + DMA.CH0.CTRLB = 0x00; //No interrupt! + c0a: 11 8a std Z+17, r1 ; 0x11 + DMA.CH0.ADDRCTRL = DMA_CH_SRCRELOAD_BURST_gc | DMA_CH_SRCDIR_INC_gc | DMA_CH_DESTDIR_INC_gc; //Source reloads after each burst, with byte incrementing. Dest does not reload, but does increment address. + c0c: 81 e9 ldi r24, 0x91 ; 145 + c0e: 82 8b std Z+18, r24 ; 0x12 + DMA.CH0.TRIGSRC = DMA_CH_TRIGSRC_ADCA_CH0_gc; //Triggered from ADCA channel 0 + c10: 80 e1 ldi r24, 0x10 ; 16 + c12: 83 8b std Z+19, r24 ; 0x13 + DMA.CH0.TRFCNT = PACKET_SIZE; + c14: 8e ee ldi r24, 0xEE ; 238 + c16: 92 e0 ldi r25, 0x02 ; 2 + c18: 84 8b std Z+20, r24 ; 0x14 + c1a: 95 8b std Z+21, r25 ; 0x15 + + DMA.CH0.SRCADDR0 = (( (uint16_t) &ADCA.CH0.RESL) >> 0) & 0xFF; //Source address is ADC + c1c: 24 e2 ldi r18, 0x24 ; 36 + c1e: 20 8f std Z+24, r18 ; 0x18 + DMA.CH0.SRCADDR1 = (( (uint16_t) &ADCA.CH0.RESL) >> 8) & 0xFF; + c20: 22 e0 ldi r18, 0x02 ; 2 + c22: 21 8f std Z+25, r18 ; 0x19 + DMA.CH0.SRCADDR2 = 0x00; + c24: 12 8e std Z+26, r1 ; 0x1a + + DMA.CH0.DESTADDR0 = (( (uint16_t) &isoBuf[b1_state * PACKET_SIZE]) >> 0) & 0xFF; //Dest address is isoBuf + c26: 40 91 b4 20 lds r20, 0x20B4 + c2a: 48 9f mul r20, r24 + c2c: 90 01 movw r18, r0 + c2e: 49 9f mul r20, r25 + c30: 30 0d add r19, r0 + c32: 11 24 eor r1, r1 + c34: 2a 59 subi r18, 0x9A ; 154 + c36: 39 4d sbci r19, 0xD9 ; 217 + c38: 24 8f std Z+28, r18 ; 0x1c + DMA.CH0.DESTADDR1 = (( (uint16_t) &isoBuf[b1_state * PACKET_SIZE]) >> 8) & 0xFF; + c3a: 40 91 b4 20 lds r20, 0x20B4 + c3e: 48 9f mul r20, r24 + c40: 90 01 movw r18, r0 + c42: 49 9f mul r20, r25 + c44: 30 0d add r19, r0 + c46: 11 24 eor r1, r1 + c48: c9 01 movw r24, r18 + c4a: 8a 59 subi r24, 0x9A ; 154 + c4c: 99 4d sbci r25, 0xD9 ; 217 + c4e: 95 8f std Z+29, r25 ; 0x1d + DMA.CH0.DESTADDR2 = 0x00; + c50: 16 8e std Z+30, r1 ; 0x1e + + //Must enable last for REPCNT won't work! + DMA.CH0.CTRLA |= DMA_CH_ENABLE_bm; //Enable! + c52: 80 89 ldd r24, Z+16 ; 0x10 + c54: 80 68 ori r24, 0x80 ; 128 + c56: 80 8b std Z+16, r24 ; 0x10 + c58: 08 95 ret + +00000c5a : +} + +void tiny_dma_set_mode_7(void){ + + global_mode = 7; + c5a: 87 e0 ldi r24, 0x07 ; 7 + c5c: 80 93 00 20 sts 0x2000, r24 + + tiny_dma_flush(); + c60: 14 dc rcall .-2008 ; 0x48a + + DMA.CH2.REPCNT = 0; //Repeat forever! + c62: e0 e0 ldi r30, 0x00 ; 0 + c64: f1 e0 ldi r31, 0x01 ; 1 + c66: 16 aa std Z+54, r1 ; 0x36 + DMA.CH2.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm | DMA_CH_REPEAT_bm; + c68: 44 e2 ldi r20, 0x24 ; 36 + c6a: 40 ab std Z+48, r20 ; 0x30 + DMA.CH2.CTRLB = 0x00; //Hi interrupt on block complete + c6c: 11 aa std Z+49, r1 ; 0x31 + DMA.CH2.ADDRCTRL = DMA_CH_DESTRELOAD_BURST_gc | DMA_CH_DESTDIR_INC_gc | DMA_CH_SRCRELOAD_BLOCK_gc | DMA_CH_SRCDIR_INC_gc; //Dest reloads after each burst, with byte incrementing. Src reloads at end of block, also incrementing address. + c6e: 39 e5 ldi r19, 0x59 ; 89 + c70: 32 ab std Z+50, r19 ; 0x32 + DMA.CH2.TRIGSRC = DMA_CH_TRIGSRC_EVSYS_CH2_gc; //Triggered from TCC0 when it hits PER + c72: 23 e0 ldi r18, 0x03 ; 3 + c74: 23 ab std Z+51, r18 ; 0x33 + DMA.CH2.TRFCNT = dacBuf_len; + c76: 80 91 04 20 lds r24, 0x2004 + c7a: 90 91 05 20 lds r25, 0x2005 + c7e: 84 ab std Z+52, r24 ; 0x34 + c80: 95 ab std Z+53, r25 ; 0x35 + + DMA.CH2.SRCADDR0 = (( (uint16_t) &dacBuf_CH1[0]) >> 0) & 0xFF; //Source address is dacbuf + c82: 86 e5 ldi r24, 0x56 ; 86 + c84: 92 e2 ldi r25, 0x22 ; 34 + c86: 80 af std Z+56, r24 ; 0x38 + DMA.CH2.SRCADDR1 = (( (uint16_t) &dacBuf_CH1[0]) >> 8) & 0xFF; + c88: 91 af std Z+57, r25 ; 0x39 + DMA.CH2.SRCADDR2 = 0x00; + c8a: 12 ae std Z+58, r1 ; 0x3a + + DMA.CH2.DESTADDR0 = (( (uint16_t) &DACB.CH0DATAH) >> 0) & 0xFF; //Dest address is high byte of DAC register + c8c: 89 e3 ldi r24, 0x39 ; 57 + c8e: 84 af std Z+60, r24 ; 0x3c + DMA.CH2.DESTADDR1 = (( (uint16_t) &DACB.CH0DATAH) >> 8) & 0xFF; + c90: 20 93 3d 01 sts 0x013D, r18 + DMA.CH2.DESTADDR2 = 0x00; + c94: 10 92 3e 01 sts 0x013E, r1 + + //Must enable last for REPCNT won't work! + DMA.CH2.CTRLA |= DMA_CH_ENABLE_bm; //Enable! + c98: 80 a9 ldd r24, Z+48 ; 0x30 + c9a: 80 68 ori r24, 0x80 ; 128 + c9c: 80 ab std Z+48, r24 ; 0x30 + + DMA.CH3.REPCNT = 0; //Repeat forever! + c9e: 10 92 46 01 sts 0x0146, r1 + DMA.CH3.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm | DMA_CH_REPEAT_bm; + ca2: e0 e4 ldi r30, 0x40 ; 64 + ca4: f1 e0 ldi r31, 0x01 ; 1 + ca6: 40 83 st Z, r20 + DMA.CH3.CTRLB = 0x00; //No interrupt for DacBuf!! + ca8: 10 92 41 01 sts 0x0141, r1 + DMA.CH3.ADDRCTRL = DMA_CH_DESTRELOAD_BURST_gc | DMA_CH_DESTDIR_INC_gc | DMA_CH_SRCRELOAD_BLOCK_gc | DMA_CH_SRCDIR_INC_gc; //Dest reloads after each burst, with byte incrementing. Src reloads at end of block, also incrementing address. + cac: 30 93 42 01 sts 0x0142, r19 + DMA.CH3.TRIGSRC = DMA_CH_TRIGSRC_EVSYS_CH1_gc; //Triggered from TCC0 when it hits PER + cb0: 82 e0 ldi r24, 0x02 ; 2 + cb2: 80 93 43 01 sts 0x0143, r24 + DMA.CH3.TRFCNT = auxDacBufLen; + cb6: 80 91 02 20 lds r24, 0x2002 + cba: 90 91 03 20 lds r25, 0x2003 + cbe: 80 93 44 01 sts 0x0144, r24 + cc2: 90 93 45 01 sts 0x0145, r25 + + DMA.CH3.SRCADDR0 = (( (uint16_t) &dacBuf_CH2[0]) >> 0) & 0xFF; //Source address is dacbuf + cc6: 86 e6 ldi r24, 0x66 ; 102 + cc8: 94 e2 ldi r25, 0x24 ; 36 + cca: 80 93 48 01 sts 0x0148, r24 + DMA.CH3.SRCADDR1 = (( (uint16_t) &dacBuf_CH2[0]) >> 8) & 0xFF; + cce: 90 93 49 01 sts 0x0149, r25 + DMA.CH3.SRCADDR2 = 0x00; + cd2: 10 92 4a 01 sts 0x014A, r1 + + DMA.CH3.DESTADDR0 = (( (uint16_t) &DACB.CH1DATAH) >> 0) & 0xFF; //Dest address is high byte of DAC register + cd6: 8b e3 ldi r24, 0x3B ; 59 + cd8: 80 93 4c 01 sts 0x014C, r24 + DMA.CH3.DESTADDR1 = (( (uint16_t) &DACB.CH1DATAH) >> 8) & 0xFF; + cdc: 20 93 4d 01 sts 0x014D, r18 + DMA.CH3.DESTADDR2 = 0x00; + ce0: 10 92 4e 01 sts 0x014E, r1 + + //Must enable last for REPCNT won't work! + DMA.CH3.CTRLA |= DMA_CH_ENABLE_bm; //Enable! + ce4: 80 81 ld r24, Z + ce6: 80 68 ori r24, 0x80 ; 128 + ce8: 80 83 st Z, r24 + cea: 08 95 ret + +00000cec : +} + +void tiny_dma_loop_mode_7(void){ + + DMA.CH0.CTRLA = 0x00; + cec: e0 e0 ldi r30, 0x00 ; 0 + cee: f1 e0 ldi r31, 0x01 ; 1 + cf0: 10 8a std Z+16, r1 ; 0x10 + DMA.CH0.CTRLA = DMA_CH_RESET_bm; + cf2: 80 e4 ldi r24, 0x40 ; 64 + cf4: 80 8b std Z+16, r24 ; 0x10 + + DMA.CH0.CTRLA = DMA_CH_BURSTLEN_2BYTE_gc | DMA_CH_SINGLE_bm; //Do not repeat! + cf6: 85 e0 ldi r24, 0x05 ; 5 + cf8: 80 8b std Z+16, r24 ; 0x10 + DMA.CH0.CTRLB = 0x00; //No interrupt! + cfa: 11 8a std Z+17, r1 ; 0x11 + DMA.CH0.ADDRCTRL = DMA_CH_SRCRELOAD_BURST_gc | DMA_CH_SRCDIR_INC_gc | DMA_CH_DESTDIR_INC_gc; //Source reloads after each burst, with byte incrementing. Dest does not reload, but does increment address. + cfc: 81 e9 ldi r24, 0x91 ; 145 + cfe: 82 8b std Z+18, r24 ; 0x12 + DMA.CH0.TRIGSRC = DMA_CH_TRIGSRC_ADCA_CH0_gc; //Triggered from ADCA channel 0 + d00: 80 e1 ldi r24, 0x10 ; 16 + d02: 83 8b std Z+19, r24 ; 0x13 + DMA.CH0.TRFCNT = PACKET_SIZE; + d04: 8e ee ldi r24, 0xEE ; 238 + d06: 92 e0 ldi r25, 0x02 ; 2 + d08: 84 8b std Z+20, r24 ; 0x14 + d0a: 95 8b std Z+21, r25 ; 0x15 + + DMA.CH0.SRCADDR0 = (( (uint16_t) &ADCA.CH0.RESL) >> 0) & 0xFF; //Source address is ADC + d0c: 24 e2 ldi r18, 0x24 ; 36 + d0e: 20 8f std Z+24, r18 ; 0x18 + DMA.CH0.SRCADDR1 = (( (uint16_t) &ADCA.CH0.RESL) >> 8) & 0xFF; + d10: 22 e0 ldi r18, 0x02 ; 2 + d12: 21 8f std Z+25, r18 ; 0x19 + DMA.CH0.SRCADDR2 = 0x00; + d14: 12 8e std Z+26, r1 ; 0x1a + + DMA.CH0.DESTADDR0 = (( (uint16_t) &isoBuf[b1_state * PACKET_SIZE]) >> 0) & 0xFF; //Dest address is isoBuf + d16: 40 91 b4 20 lds r20, 0x20B4 + d1a: 48 9f mul r20, r24 + d1c: 90 01 movw r18, r0 + d1e: 49 9f mul r20, r25 + d20: 30 0d add r19, r0 + d22: 11 24 eor r1, r1 + d24: 2a 59 subi r18, 0x9A ; 154 + d26: 39 4d sbci r19, 0xD9 ; 217 + d28: 24 8f std Z+28, r18 ; 0x1c + DMA.CH0.DESTADDR1 = (( (uint16_t) &isoBuf[b1_state * PACKET_SIZE]) >> 8) & 0xFF; + d2a: 40 91 b4 20 lds r20, 0x20B4 + d2e: 48 9f mul r20, r24 + d30: 90 01 movw r18, r0 + d32: 49 9f mul r20, r25 + d34: 30 0d add r19, r0 + d36: 11 24 eor r1, r1 + d38: c9 01 movw r24, r18 + d3a: 8a 59 subi r24, 0x9A ; 154 + d3c: 99 4d sbci r25, 0xD9 ; 217 + d3e: 95 8f std Z+29, r25 ; 0x1d + DMA.CH0.DESTADDR2 = 0x00; + d40: 16 8e std Z+30, r1 ; 0x1e + + //Must enable last for REPCNT won't work! + DMA.CH0.CTRLA |= DMA_CH_ENABLE_bm; //Enable! + d42: 80 89 ldd r24, Z+16 ; 0x10 + d44: 80 68 ori r24, 0x80 ; 128 + d46: 80 8b std Z+16, r24 ; 0x10 + d48: 08 95 ret + +00000d4a : +#define PSU_PER 3000 +#define jump 6 + +void tiny_timer_setup(void){ + //Turn everything on! + PR.PRPC &= 0b11111100; //Enable TCC0, TCC1 + d4a: e0 e7 ldi r30, 0x70 ; 112 + d4c: f0 e0 ldi r31, 0x00 ; 0 + d4e: 83 81 ldd r24, Z+3 ; 0x03 + d50: 8c 7f andi r24, 0xFC ; 252 + d52: 83 83 std Z+3, r24 ; 0x03 + PR.PRPD &= 0b11111100; //Enable TCD0, TCD1 + d54: 84 81 ldd r24, Z+4 ; 0x04 + d56: 8c 7f andi r24, 0xFC ; 252 + d58: 84 83 std Z+4, r24 ; 0x04 + PR.PRGEN &= 0b11111101; //Enable EVSYS + d5a: 80 81 ld r24, Z + d5c: 8d 7f andi r24, 0xFD ; 253 + d5e: 80 83 st Z, r24 + + //Set up EVSYS + EVSYS.CH2MUX = TCDAC_OVF; + d60: e0 e8 ldi r30, 0x80 ; 128 + d62: f1 e0 ldi r31, 0x01 ; 1 + d64: 80 ec ldi r24, 0xC0 ; 192 + d66: 82 83 std Z+2, r24 ; 0x02 + EVSYS.CH2CTRL = 0x00; //No filtering or Quadrature stuff + d68: 12 86 std Z+10, r1 ; 0x0a + + EVSYS.CH1MUX = TCDAC_AUX_OVF; + d6a: 88 ec ldi r24, 0xC8 ; 200 + d6c: 81 83 std Z+1, r24 ; 0x01 + EVSYS.CH1CTRL = 0x00; //No filtering or Quadrature stuff + d6e: 11 86 std Z+9, r1 ; 0x09 + + //Waveform (50Hz sin wave) + TC_DAC.CTRLA = 0x04; //Some clk setting - not 100% sure since it was SW generated + d70: e0 e0 ldi r30, 0x00 ; 0 + d72: f8 e0 ldi r31, 0x08 ; 8 + d74: 34 e0 ldi r19, 0x04 ; 4 + d76: 30 83 st Z, r19 + TC_DAC.CTRLB = TC_WGMODE_SINGLESLOPE_gc; //No enable is set + d78: 23 e0 ldi r18, 0x03 ; 3 + d7a: 21 83 std Z+1, r18 ; 0x01 + TC_DAC.CTRLE = TC_BYTEM_NORMAL_gc; + d7c: 14 82 std Z+4, r1 ; 0x04 + TC_DAC.PER = 469; + d7e: 85 ed ldi r24, 0xD5 ; 213 + d80: 91 e0 ldi r25, 0x01 ; 1 + d82: 86 a3 std Z+38, r24 ; 0x26 + d84: 97 a3 std Z+39, r25 ; 0x27 + TC_DAC.INTCTRLA = 0x00; + d86: 16 82 std Z+6, r1 ; 0x06 + //Aux channel (blank 50Hz) + TC_AUXDAC.CTRLA = 0x04; //Some clk setting - not 100% sure since it was SW generated + d88: e0 e4 ldi r30, 0x40 ; 64 + d8a: f8 e0 ldi r31, 0x08 ; 8 + d8c: 30 83 st Z, r19 + TC_AUXDAC.CTRLB = TC_WGMODE_SINGLESLOPE_gc; //No enable is set + d8e: 21 83 std Z+1, r18 ; 0x01 + TC_AUXDAC.CTRLE = TC_BYTEM_NORMAL_gc; + d90: 14 82 std Z+4, r1 ; 0x04 + TC_AUXDAC.PER = 469; + d92: 86 a3 std Z+38, r24 ; 0x26 + d94: 97 a3 std Z+39, r25 ; 0x27 + TC_AUXDAC.INTCTRLA = 0x00; + d96: 16 82 std Z+6, r1 ; 0x06 + + //PSU + PORTD.DIR |= 0b00010000; + d98: e0 e6 ldi r30, 0x60 ; 96 + d9a: f6 e0 ldi r31, 0x06 ; 6 + d9c: 80 81 ld r24, Z + d9e: 80 61 ori r24, 0x10 ; 16 + da0: 80 83 st Z, r24 + TC_PSU.CTRLB = 0x10 | TC_WGMODE_SINGLESLOPE_gc; //CCAEN is set + da2: e0 e4 ldi r30, 0x40 ; 64 + da4: f9 e0 ldi r31, 0x09 ; 9 + da6: 83 e1 ldi r24, 0x13 ; 19 + da8: 81 83 std Z+1, r24 ; 0x01 + TC_PSU.CTRLE = TC_BYTEM_NORMAL_gc; + daa: 14 82 std Z+4, r1 ; 0x04 + TC_PSU.INTCTRLA = TC_OVFINTLVL_LO_gc; + dac: 21 e0 ldi r18, 0x01 ; 1 + dae: 26 83 std Z+6, r18 ; 0x06 + TC_PSU.PER = PSU_PER; // Max value of CNT + db0: 88 eb ldi r24, 0xB8 ; 184 + db2: 9b e0 ldi r25, 0x0B ; 11 + db4: 86 a3 std Z+38, r24 ; 0x26 + db6: 97 a3 std Z+39, r25 ; 0x27 + TC_PSU.CCA = 0; //Initial Duty cycle of 0% + db8: 10 a6 std Z+40, r1 ; 0x28 + dba: 11 a6 std Z+41, r1 ; 0x29 + TC_PSU.CTRLA = TC_CLKSEL_DIV1_gc; + dbc: 20 83 st Z, r18 + dbe: 08 95 ret + +00000dc0 <__vector_83>: + TCC1.PER = 1800; // Max value of CNT + TCC1.CTRLA = TC_CLKSEL_DIV1_gc; + */ +} + +ISR(TC_PSU_OVF){ + dc0: 1f 92 push r1 + dc2: 0f 92 push r0 + dc4: 0f b6 in r0, 0x3f ; 63 + dc6: 0f 92 push r0 + dc8: 11 24 eor r1, r1 + dca: 2f 93 push r18 + dcc: 3f 93 push r19 + dce: 4f 93 push r20 + dd0: 8f 93 push r24 + dd2: 9f 93 push r25 + dd4: ef 93 push r30 + dd6: ff 93 push r31 + dd8: cf 93 push r28 + dda: df 93 push r29 + ddc: 1f 92 push r1 + dde: cd b7 in r28, 0x3d ; 61 + de0: de b7 in r29, 0x3e ; 62 + char tempvar; + char err; + volatile char nothing; + if (global_mode == 7){ + de2: 80 91 00 20 lds r24, 0x2000 + de6: 87 30 cpi r24, 0x07 ; 7 + de8: 31 f4 brne .+12 ; 0xdf6 <__vector_83+0x36> + nothing = ADCA.CH1.RESL; + dea: e0 e0 ldi r30, 0x00 ; 0 + dec: f2 e0 ldi r31, 0x02 ; 2 + dee: 84 a5 ldd r24, Z+44 ; 0x2c + df0: 89 83 std Y+1, r24 ; 0x01 + tempvar = ADCA.CH1.RESH; + df2: 85 a5 ldd r24, Z+45 ; 0x2d + df4: 03 c0 rjmp .+6 ; 0xdfc <__vector_83+0x3c> + } + else{ + tempvar = ADCA.CH1.RESL; + df6: e0 e0 ldi r30, 0x00 ; 0 + df8: f2 e0 ldi r31, 0x02 ; 2 + dfa: 84 a5 ldd r24, Z+44 ; 0x2c + } + //tempvar = (global_mode == 7 ? (char) ADCA.CH1.RESH : (char) ADCA.CH1.RESL); + //test_byte = tempvar; + + err = (char) (PSU_target - tempvar); + dfc: 20 91 b2 20 lds r18, 0x20B2 + e00: 28 1b sub r18, r24 + if ((err > 1) & ((unsigned short) TC_PSU.CCA < PSU_PER - jump) ){ + e02: e0 e4 ldi r30, 0x40 ; 64 + e04: f9 e0 ldi r31, 0x09 ; 9 + e06: 80 a5 ldd r24, Z+40 ; 0x28 + e08: 91 a5 ldd r25, Z+41 ; 0x29 + e0a: 31 e0 ldi r19, 0x01 ; 1 + e0c: 22 30 cpi r18, 0x02 ; 2 + e0e: 0c f4 brge .+2 ; 0xe12 <__vector_83+0x52> + e10: 30 e0 ldi r19, 0x00 ; 0 + e12: 33 23 and r19, r19 + e14: c9 f0 breq .+50 ; 0xe48 <__vector_83+0x88> + e16: 31 e0 ldi r19, 0x01 ; 1 + e18: 82 3b cpi r24, 0xB2 ; 178 + e1a: 9b 40 sbci r25, 0x0B ; 11 + e1c: 08 f0 brcs .+2 ; 0xe20 <__vector_83+0x60> + e1e: 30 e0 ldi r19, 0x00 ; 0 + e20: 33 23 and r19, r19 + e22: 91 f0 breq .+36 ; 0xe48 <__vector_83+0x88> + TC_PSU.CCABUF = TC_PSU.CCA + ((err > 8) ? jump : 1); + e24: e0 e4 ldi r30, 0x40 ; 64 + e26: f9 e0 ldi r31, 0x09 ; 9 + e28: 80 a5 ldd r24, Z+40 ; 0x28 + e2a: 91 a5 ldd r25, Z+41 ; 0x29 + e2c: 29 30 cpi r18, 0x09 ; 9 + e2e: 1c f0 brlt .+6 ; 0xe36 <__vector_83+0x76> + e30: 26 e0 ldi r18, 0x06 ; 6 + e32: 30 e0 ldi r19, 0x00 ; 0 + e34: 02 c0 rjmp .+4 ; 0xe3a <__vector_83+0x7a> + e36: 21 e0 ldi r18, 0x01 ; 1 + e38: 30 e0 ldi r19, 0x00 ; 0 + e3a: 82 0f add r24, r18 + e3c: 93 1f adc r25, r19 + e3e: e0 e4 ldi r30, 0x40 ; 64 + e40: f9 e0 ldi r31, 0x09 ; 9 + e42: 80 af std Z+56, r24 ; 0x38 + e44: 91 af std Z+57, r25 ; 0x39 + e46: 21 c0 rjmp .+66 ; 0xe8a <__vector_83+0xca> + } + else if ((err < -1) & ((unsigned short) TC_PSU.CCA > jump)){ + e48: e0 e4 ldi r30, 0x40 ; 64 + e4a: f9 e0 ldi r31, 0x09 ; 9 + e4c: 80 a5 ldd r24, Z+40 ; 0x28 + e4e: 91 a5 ldd r25, Z+41 ; 0x29 + e50: 31 e0 ldi r19, 0x01 ; 1 + e52: 2f 3f cpi r18, 0xFF ; 255 + e54: 0c f0 brlt .+2 ; 0xe58 <__vector_83+0x98> + e56: 30 e0 ldi r19, 0x00 ; 0 + e58: 33 23 and r19, r19 + e5a: b9 f0 breq .+46 ; 0xe8a <__vector_83+0xca> + e5c: 31 e0 ldi r19, 0x01 ; 1 + e5e: 07 97 sbiw r24, 0x07 ; 7 + e60: 08 f4 brcc .+2 ; 0xe64 <__vector_83+0xa4> + e62: 30 e0 ldi r19, 0x00 ; 0 + e64: 33 23 and r19, r19 + e66: 89 f0 breq .+34 ; 0xe8a <__vector_83+0xca> + TC_PSU.CCABUF = TC_PSU.CCA - ((err < -8) ? jump : 1); + e68: e0 e4 ldi r30, 0x40 ; 64 + e6a: f9 e0 ldi r31, 0x09 ; 9 + e6c: 80 a5 ldd r24, Z+40 ; 0x28 + e6e: 91 a5 ldd r25, Z+41 ; 0x29 + e70: 28 3f cpi r18, 0xF8 ; 248 + e72: 1c f4 brge .+6 ; 0xe7a <__vector_83+0xba> + e74: 26 e0 ldi r18, 0x06 ; 6 + e76: 30 e0 ldi r19, 0x00 ; 0 + e78: 02 c0 rjmp .+4 ; 0xe7e <__vector_83+0xbe> + e7a: 21 e0 ldi r18, 0x01 ; 1 + e7c: 30 e0 ldi r19, 0x00 ; 0 + e7e: 82 1b sub r24, r18 + e80: 93 0b sbc r25, r19 + e82: e0 e4 ldi r30, 0x40 ; 64 + e84: f9 e0 ldi r31, 0x09 ; 9 + e86: 80 af std Z+56, r24 ; 0x38 + e88: 91 af std Z+57, r25 ; 0x39 + } + e8a: 0f 90 pop r0 + e8c: df 91 pop r29 + e8e: cf 91 pop r28 + e90: ff 91 pop r31 + e92: ef 91 pop r30 + e94: 9f 91 pop r25 + e96: 8f 91 pop r24 + e98: 4f 91 pop r20 + e9a: 3f 91 pop r19 + e9c: 2f 91 pop r18 + e9e: 0f 90 pop r0 + ea0: 0f be out 0x3f, r0 ; 63 + ea2: 0f 90 pop r0 + ea4: 1f 90 pop r1 + ea6: 18 95 reti + +00000ea8 : +#include "tiny_uart.h" +#include "globals.h" + + +void tiny_uart_setup(void){ + PR.PRPC &= 0b11101111; + ea8: e0 e7 ldi r30, 0x70 ; 112 + eaa: f0 e0 ldi r31, 0x00 ; 0 + eac: 83 81 ldd r24, Z+3 ; 0x03 + eae: 8f 7e andi r24, 0xEF ; 239 + eb0: 83 83 std Z+3, r24 ; 0x03 + //PR.PRPE &= 0b11111110; ??? + + PORTC.DIR |= 0b10101010; + eb2: e0 e4 ldi r30, 0x40 ; 64 + eb4: f6 e0 ldi r31, 0x06 ; 6 + eb6: 80 81 ld r24, Z + eb8: 8a 6a ori r24, 0xAA ; 170 + eba: 80 83 st Z, r24 + PORTC.OUT = 0xff; + ebc: 8f ef ldi r24, 0xFF ; 255 + ebe: 84 83 std Z+4, r24 ; 0x04 + PORTC.PIN2CTRL = PORT_INVEN_bm | PORT_OPC_PULLUP_gc; + ec0: 88 e5 ldi r24, 0x58 ; 88 + ec2: 82 8b std Z+18, r24 ; 0x12 + //PORTC.REMAP = 0x10; //Remap USART to [7:4] + #ifndef VERO + PORTC.REMAP = 0x20; //Swap MOSI and SCK - for small boards only!!! + #endif + + USARTC0.CTRLC = USART_CMODE_MSPI_gc | 0b00000100; //LSB received first, UPCHA disabled + ec4: e0 ea ldi r30, 0xA0 ; 160 + ec6: f8 e0 ldi r31, 0x08 ; 8 + ec8: 84 ec ldi r24, 0xC4 ; 196 + eca: 85 83 std Z+5, r24 ; 0x05 + USARTC0.BAUDCTRLA = 3; //BSEL = fper/(2fbaud) -1; 24/(2*3) - 1 = 3 + ecc: 83 e0 ldi r24, 0x03 ; 3 + ece: 86 83 std Z+6, r24 ; 0x06 + USARTC0.BAUDCTRLB = 0x00;//USART_BSCALE0_bm; + ed0: 17 82 std Z+7, r1 ; 0x07 + USARTC0.CTRLB = USART_RXEN_bm | USART_TXEN_bm; + ed2: 88 e1 ldi r24, 0x18 ; 24 + ed4: 84 83 std Z+4, r24 ; 0x04 + ed6: 08 95 ret + +00000ed8 : +} + + +void tiny_spi_setup(void){ + //Power Reduction disable + PR.PRPC &= 0b11110111; + ed8: e0 e7 ldi r30, 0x70 ; 112 + eda: f0 e0 ldi r31, 0x00 ; 0 + edc: 83 81 ldd r24, Z+3 ; 0x03 + ede: 87 7f andi r24, 0xF7 ; 247 + ee0: 83 83 std Z+3, r24 ; 0x03 + + //SPI enable + SPIC.CTRL = SPI_ENABLE_bm; //Slave mode + ee2: 80 e4 ldi r24, 0x40 ; 64 + ee4: 80 93 c0 08 sts 0x08C0, r24 + #ifdef VERO + PORTC.PIN5CTRL = PORT_INVEN_bm | PORT_OPC_PULLUP_gc; //Pin5 if not swapped + ee8: 88 e5 ldi r24, 0x58 ; 88 + eea: e0 e4 ldi r30, 0x40 ; 64 + eec: f6 e0 ldi r31, 0x06 ; 6 + eee: 85 8b std Z+21, r24 ; 0x15 + ef0: 08 95 ret + +00000ef2 : + ef2: cf 93 push r28 + ef4: df 93 push r29 + ef6: 00 d0 rcall .+0 ; 0xef8 + ef8: 00 d0 rcall .+0 ; 0xefa + efa: cd b7 in r28, 0x3d ; 61 + efc: de b7 in r29, 0x3e ; 62 + efe: 8f ef ldi r24, 0xFF ; 255 + f00: 80 93 70 00 sts 0x0070, r24 + f04: 80 93 71 00 sts 0x0071, r24 + f08: 80 93 72 00 sts 0x0072, r24 + f0c: 80 93 73 00 sts 0x0073, r24 + f10: 80 93 74 00 sts 0x0074, r24 + f14: 80 93 75 00 sts 0x0075, r24 + f18: 80 93 76 00 sts 0x0076, r24 + f1c: 64 e0 ldi r22, 0x04 ; 4 + f1e: 81 e4 ldi r24, 0x41 ; 65 + f20: 90 e0 ldi r25, 0x00 ; 0 + f22: e4 d5 rcall .+3016 ; 0x1aec + f24: 6c e1 ldi r22, 0x1C ; 28 + f26: 70 e0 ldi r23, 0x00 ; 0 + f28: 82 e0 ldi r24, 0x02 ; 2 + f2a: e6 d5 rcall .+3020 ; 0x1af8 + f2c: 8a 83 std Y+2, r24 ; 0x02 + f2e: 6d e1 ldi r22, 0x1D ; 29 + f30: 70 e0 ldi r23, 0x00 ; 0 + f32: 82 e0 ldi r24, 0x02 ; 2 + f34: e1 d5 rcall .+3010 ; 0x1af8 + f36: 89 83 std Y+1, r24 ; 0x01 + f38: 89 81 ldd r24, Y+1 ; 0x01 + f3a: 9a 81 ldd r25, Y+2 ; 0x02 + f3c: 01 96 adiw r24, 0x01 ; 1 + f3e: 21 f4 brne .+8 ; 0xf48 + f40: 80 e4 ldi r24, 0x40 ; 64 + f42: 93 e2 ldi r25, 0x23 ; 35 + f44: 89 83 std Y+1, r24 ; 0x01 + f46: 9a 83 std Y+2, r25 ; 0x02 + f48: 89 81 ldd r24, Y+1 ; 0x01 + f4a: 9a 81 ldd r25, Y+2 ; 0x02 + f4c: 8b 83 std Y+3, r24 ; 0x03 + f4e: 9c 83 std Y+4, r25 ; 0x04 + f50: e0 e6 ldi r30, 0x60 ; 96 + f52: f0 e0 ldi r31, 0x00 ; 0 + f54: 82 83 std Z+2, r24 ; 0x02 + f56: 8c 81 ldd r24, Y+4 ; 0x04 + f58: 83 83 std Z+3, r24 ; 0x03 + f5a: 8f b7 in r24, 0x3f ; 63 + f5c: f8 94 cli + f5e: e0 e5 ldi r30, 0x50 ; 80 + f60: f0 e0 ldi r31, 0x00 ; 0 + f62: 90 81 ld r25, Z + f64: 92 60 ori r25, 0x02 ; 2 + f66: 90 83 st Z, r25 + f68: 8f bf out 0x3f, r24 ; 63 + f6a: 81 81 ldd r24, Z+1 ; 0x01 + f6c: 81 ff sbrs r24, 1 + f6e: fd cf rjmp .-6 ; 0xf6a + f70: 8f b7 in r24, 0x3f ; 63 + f72: f8 94 cli + f74: a0 e5 ldi r26, 0x50 ; 80 + f76: b0 e0 ldi r27, 0x00 ; 0 + f78: 16 96 adiw r26, 0x06 ; 6 + f7a: 9c 91 ld r25, X + f7c: 16 97 sbiw r26, 0x06 ; 6 + f7e: 99 7f andi r25, 0xF9 ; 249 + f80: 16 96 adiw r26, 0x06 ; 6 + f82: 9c 93 st X, r25 + f84: 16 97 sbiw r26, 0x06 ; 6 + f86: e0 e6 ldi r30, 0x60 ; 96 + f88: f0 e0 ldi r31, 0x00 ; 0 + f8a: 90 e8 ldi r25, 0x80 ; 128 + f8c: 95 83 std Z+5, r25 ; 0x05 + f8e: 9b eb ldi r25, 0xBB ; 187 + f90: 96 83 std Z+6, r25 ; 0x06 + f92: 16 96 adiw r26, 0x06 ; 6 + f94: 9c 91 ld r25, X + f96: 16 97 sbiw r26, 0x06 ; 6 + f98: 94 60 ori r25, 0x04 ; 4 + f9a: 16 96 adiw r26, 0x06 ; 6 + f9c: 9c 93 st X, r25 + f9e: 90 81 ld r25, Z + fa0: 91 60 ori r25, 0x01 ; 1 + fa2: 90 83 st Z, r25 + fa4: 8f bf out 0x3f, r24 ; 63 + fa6: 61 e0 ldi r22, 0x01 ; 1 + fa8: 80 e4 ldi r24, 0x40 ; 64 + faa: 90 e0 ldi r25, 0x00 ; 0 + fac: 9f d5 rcall .+2878 ; 0x1aec + fae: 8f b7 in r24, 0x3f ; 63 + fb0: f8 94 cli + fb2: e0 e5 ldi r30, 0x50 ; 80 + fb4: f0 e0 ldi r31, 0x00 ; 0 + fb6: 90 81 ld r25, Z + fb8: 9e 7f andi r25, 0xFE ; 254 + fba: 90 83 st Z, r25 + fbc: 8f bf out 0x3f, r24 ; 63 + fbe: 24 96 adiw r28, 0x04 ; 4 + fc0: cd bf out 0x3d, r28 ; 61 + fc2: de bf out 0x3e, r29 ; 62 + fc4: df 91 pop r29 + fc6: cf 91 pop r28 + fc8: 08 95 ret + +00000fca : + fca: 9f b7 in r25, 0x3f ; 63 + fcc: f8 94 cli + fce: e8 2f mov r30, r24 + fd0: f0 e0 ldi r31, 0x00 ; 0 + fd2: e0 59 subi r30, 0x90 ; 144 + fd4: ff 4f sbci r31, 0xFF ; 255 + fd6: 60 95 com r22 + fd8: 80 81 ld r24, Z + fda: 68 23 and r22, r24 + fdc: 60 83 st Z, r22 + fde: 9f bf out 0x3f, r25 ; 63 + fe0: 08 95 ret + +00000fe2 : + fe2: 86 30 cpi r24, 0x06 ; 6 + fe4: 11 f4 brne .+4 ; 0xfea + fe6: 68 e1 ldi r22, 0x18 ; 24 + fe8: 01 c0 rjmp .+2 ; 0xfec + fea: 60 e0 ldi r22, 0x00 ; 0 + fec: e0 e5 ldi r30, 0x50 ; 80 + fee: f0 e0 ldi r31, 0x00 ; 0 + ff0: 81 81 ldd r24, Z+1 ; 0x01 + ff2: 81 fd sbrc r24, 1 + ff4: 24 c0 rjmp .+72 ; 0x103e + ff6: 8f b7 in r24, 0x3f ; 63 + ff8: f8 94 cli + ffa: 90 81 ld r25, Z + ffc: 92 60 ori r25, 0x02 ; 2 + ffe: 90 83 st Z, r25 + 1000: 8f bf out 0x3f, r24 ; 63 + 1002: 81 81 ldd r24, Z+1 ; 0x01 + 1004: 81 ff sbrs r24, 1 + 1006: fd cf rjmp .-6 ; 0x1002 + 1008: 8f b7 in r24, 0x3f ; 63 + 100a: f8 94 cli + 100c: a0 e5 ldi r26, 0x50 ; 80 + 100e: b0 e0 ldi r27, 0x00 ; 0 + 1010: 16 96 adiw r26, 0x06 ; 6 + 1012: 9c 91 ld r25, X + 1014: 16 97 sbiw r26, 0x06 ; 6 + 1016: 99 7f andi r25, 0xF9 ; 249 + 1018: 16 96 adiw r26, 0x06 ; 6 + 101a: 9c 93 st X, r25 + 101c: 16 97 sbiw r26, 0x06 ; 6 + 101e: e0 e6 ldi r30, 0x60 ; 96 + 1020: f0 e0 ldi r31, 0x00 ; 0 + 1022: 90 e8 ldi r25, 0x80 ; 128 + 1024: 95 83 std Z+5, r25 ; 0x05 + 1026: 9b eb ldi r25, 0xBB ; 187 + 1028: 96 83 std Z+6, r25 ; 0x06 + 102a: 16 96 adiw r26, 0x06 ; 6 + 102c: 9c 91 ld r25, X + 102e: 16 97 sbiw r26, 0x06 ; 6 + 1030: 94 60 ori r25, 0x04 ; 4 + 1032: 16 96 adiw r26, 0x06 ; 6 + 1034: 9c 93 st X, r25 + 1036: 90 81 ld r25, Z + 1038: 91 60 ori r25, 0x01 ; 1 + 103a: 90 83 st Z, r25 + 103c: 8f bf out 0x3f, r24 ; 63 + 103e: 63 60 ori r22, 0x03 ; 3 + 1040: 84 e4 ldi r24, 0x44 ; 68 + 1042: 90 e0 ldi r25, 0x00 ; 0 + 1044: 53 d5 rcall .+2726 ; 0x1aec + 1046: 60 e4 ldi r22, 0x40 ; 64 + 1048: 80 e0 ldi r24, 0x00 ; 0 + 104a: bf cf rjmp .-130 ; 0xfca + 104c: 08 95 ret + +0000104e : + 104e: 80 91 b6 20 lds r24, 0x20B6 + 1052: 08 95 ret + +00001054 : + 1054: 2b d1 rcall .+598 ; 0x12ac + 1056: fc 01 movw r30, r24 + 1058: 83 81 ldd r24, Z+3 ; 0x03 + 105a: 80 93 b6 20 sts 0x20B6, r24 + 105e: 81 11 cpse r24, r1 + 1060: 02 c0 rjmp .+4 ; 0x1066 + 1062: 76 c9 rjmp .-3348 ; 0x350 + 1064: 08 95 ret + 1066: 81 e0 ldi r24, 0x01 ; 1 + 1068: 08 95 ret + +0000106a : + 106a: 80 91 b6 20 lds r24, 0x20B6 + 106e: 81 30 cpi r24, 0x01 ; 1 + 1070: 09 f4 brne .+2 ; 0x1074 + 1072: 7a c9 rjmp .-3340 ; 0x368 + 1074: 08 95 ret + +00001076 : + 1076: 80 91 56 24 lds r24, 0x2456 + 107a: 88 23 and r24, r24 + 107c: 4c f4 brge .+18 ; 0x1090 + 107e: 80 76 andi r24, 0x60 ; 96 + 1080: 80 34 cpi r24, 0x40 ; 64 + 1082: a9 f4 brne .+42 ; 0x10ae + 1084: 80 91 57 24 lds r24, 0x2457 + 1088: 81 11 cpse r24, r1 + 108a: 13 c0 rjmp .+38 ; 0x10b2 + 108c: 72 c9 rjmp .-3356 ; 0x372 + 108e: 08 95 ret + 1090: 80 76 andi r24, 0x60 ; 96 + 1092: 80 34 cpi r24, 0x40 ; 64 + 1094: 81 f4 brne .+32 ; 0x10b6 + 1096: 80 91 57 24 lds r24, 0x2457 + 109a: 81 11 cpse r24, r1 + 109c: 0e c0 rjmp .+28 ; 0x10ba + 109e: 80 91 5c 24 lds r24, 0x245C + 10a2: 90 91 5d 24 lds r25, 0x245D + 10a6: 89 2b or r24, r25 + 10a8: 51 f0 breq .+20 ; 0x10be + 10aa: 61 c9 rjmp .-3390 ; 0x36e + 10ac: 08 95 ret + 10ae: 80 e0 ldi r24, 0x00 ; 0 + 10b0: 08 95 ret + 10b2: 80 e0 ldi r24, 0x00 ; 0 + 10b4: 08 95 ret + 10b6: 80 e0 ldi r24, 0x00 ; 0 + 10b8: 08 95 ret + 10ba: 80 e0 ldi r24, 0x00 ; 0 + 10bc: 08 95 ret + 10be: 80 e0 ldi r24, 0x00 ; 0 + 10c0: 08 95 ret + +000010c2 : + 10c2: 0f 93 push r16 + 10c4: 1f 93 push r17 + 10c6: 9b 01 movw r18, r22 + 10c8: 8a 01 movw r16, r20 + 10ca: ac 01 movw r20, r24 + 10cc: 60 e0 ldi r22, 0x00 ; 0 + 10ce: 83 e8 ldi r24, 0x83 ; 131 + 10d0: 0e 94 7a 11 call 0x22f4 ; 0x22f4 + 10d4: 1f 91 pop r17 + 10d6: 0f 91 pop r16 + 10d8: 08 95 ret + +000010da : +/*! \brief Stop the USB Device stack + */ +void udc_stop(void) +{ + udd_disable(); + udc_reset(); + 10da: e0 91 bb 20 lds r30, 0x20BB + 10de: f0 91 bc 20 lds r31, 0x20BC + 10e2: 01 90 ld r0, Z+ + 10e4: f0 81 ld r31, Z + 10e6: e0 2d mov r30, r0 + 10e8: 22 81 ldd r18, Z+2 ; 0x02 + 10ea: 33 81 ldd r19, Z+3 ; 0x03 + 10ec: 2e 0f add r18, r30 + 10ee: 3f 1f adc r19, r31 + 10f0: fc 01 movw r30, r24 + 10f2: 40 81 ld r20, Z + 10f4: e4 0f add r30, r20 + 10f6: f1 1d adc r31, r1 + 10f8: e2 17 cp r30, r18 + 10fa: f3 07 cpc r31, r19 + 10fc: a0 f4 brcc .+40 ; 0x1126 + 10fe: 81 81 ldd r24, Z+1 ; 0x01 + 1100: 84 30 cpi r24, 0x04 ; 4 + 1102: a1 f0 breq .+40 ; 0x112c + 1104: 86 13 cpse r24, r22 + 1106: 06 c0 rjmp .+12 ; 0x1114 + 1108: 14 c0 rjmp .+40 ; 0x1132 + 110a: 81 81 ldd r24, Z+1 ; 0x01 + 110c: 84 30 cpi r24, 0x04 ; 4 + 110e: a1 f0 breq .+40 ; 0x1138 + 1110: 86 17 cp r24, r22 + 1112: a9 f0 breq .+42 ; 0x113e + 1114: 80 81 ld r24, Z + 1116: e8 0f add r30, r24 + 1118: f1 1d adc r31, r1 + 111a: e2 17 cp r30, r18 + 111c: f3 07 cpc r31, r19 + 111e: a8 f3 brcs .-22 ; 0x110a + 1120: 80 e0 ldi r24, 0x00 ; 0 + 1122: 90 e0 ldi r25, 0x00 ; 0 + 1124: 08 95 ret + 1126: 80 e0 ldi r24, 0x00 ; 0 + 1128: 90 e0 ldi r25, 0x00 ; 0 + 112a: 08 95 ret + 112c: 80 e0 ldi r24, 0x00 ; 0 + 112e: 90 e0 ldi r25, 0x00 ; 0 + 1130: 08 95 ret + 1132: 8e 2f mov r24, r30 + 1134: 9f 2f mov r25, r31 + 1136: 08 95 ret + 1138: 80 e0 ldi r24, 0x00 ; 0 + 113a: 90 e0 ldi r25, 0x00 ; 0 + 113c: 08 95 ret + 113e: 8e 2f mov r24, r30 + 1140: 9f 2f mov r25, r31 + 1142: 08 95 ret + +00001144 : + 1144: 80 91 58 24 lds r24, 0x2458 + 1148: 8f 77 andi r24, 0x7F ; 127 + 114a: 0c 94 d0 10 jmp 0x21a0 ; 0x21a0 + 114e: 08 95 ret + +00001150 : + 1150: 90 91 be 20 lds r25, 0x20BE + 1154: 99 23 and r25, r25 + 1156: 81 f1 breq .+96 ; 0x11b8 + 1158: e0 91 bb 20 lds r30, 0x20BB + 115c: f0 91 bc 20 lds r31, 0x20BC + 1160: 01 90 ld r0, Z+ + 1162: f0 81 ld r31, Z + 1164: e0 2d mov r30, r0 + 1166: 94 81 ldd r25, Z+4 ; 0x04 + 1168: 89 17 cp r24, r25 + 116a: 40 f5 brcc .+80 ; 0x11bc + 116c: e0 93 b9 20 sts 0x20B9, r30 + 1170: f0 93 ba 20 sts 0x20BA, r31 + 1174: 22 81 ldd r18, Z+2 ; 0x02 + 1176: 33 81 ldd r19, Z+3 ; 0x03 + 1178: 2e 0f add r18, r30 + 117a: 3f 1f adc r19, r31 + 117c: e2 17 cp r30, r18 + 117e: f3 07 cpc r31, r19 + 1180: f8 f4 brcc .+62 ; 0x11c0 + 1182: 91 81 ldd r25, Z+1 ; 0x01 + 1184: 94 30 cpi r25, 0x04 ; 4 + 1186: 61 f4 brne .+24 ; 0x11a0 + 1188: 92 81 ldd r25, Z+2 ; 0x02 + 118a: 98 13 cpse r25, r24 + 118c: 09 c0 rjmp .+18 ; 0x11a0 + 118e: 93 81 ldd r25, Z+3 ; 0x03 + 1190: 96 13 cpse r25, r22 + 1192: 06 c0 rjmp .+12 ; 0x11a0 + 1194: e0 93 b9 20 sts 0x20B9, r30 + 1198: f0 93 ba 20 sts 0x20BA, r31 + 119c: 81 e0 ldi r24, 0x01 ; 1 + 119e: 08 95 ret + 11a0: 90 81 ld r25, Z + 11a2: e9 0f add r30, r25 + 11a4: f1 1d adc r31, r1 + 11a6: e2 17 cp r30, r18 + 11a8: f3 07 cpc r31, r19 + 11aa: 58 f3 brcs .-42 ; 0x1182 + 11ac: e0 93 b9 20 sts 0x20B9, r30 + 11b0: f0 93 ba 20 sts 0x20BA, r31 + 11b4: 80 e0 ldi r24, 0x00 ; 0 + 11b6: 08 95 ret + 11b8: 80 e0 ldi r24, 0x00 ; 0 + 11ba: 08 95 ret + 11bc: 80 e0 ldi r24, 0x00 ; 0 + 11be: 08 95 ret + 11c0: 80 e0 ldi r24, 0x00 ; 0 + 11c2: 08 95 ret + +000011c4 : + 11c4: ff 92 push r15 + 11c6: 0f 93 push r16 + 11c8: 1f 93 push r17 + 11ca: cf 93 push r28 + 11cc: df 93 push r29 + 11ce: c8 2f mov r28, r24 + 11d0: 60 e0 ldi r22, 0x00 ; 0 + 11d2: be df rcall .-132 ; 0x1150 + 11d4: f8 2e mov r15, r24 + 11d6: 88 23 and r24, r24 + 11d8: 81 f1 breq .+96 ; 0x123a + 11da: a0 91 bb 20 lds r26, 0x20BB + 11de: b0 91 bc 20 lds r27, 0x20BC + 11e2: ec 2f mov r30, r28 + 11e4: f0 e0 ldi r31, 0x00 ; 0 + 11e6: ee 0f add r30, r30 + 11e8: ff 1f adc r31, r31 + 11ea: 12 96 adiw r26, 0x02 ; 2 + 11ec: 2d 91 ld r18, X+ + 11ee: 3c 91 ld r19, X + 11f0: 13 97 sbiw r26, 0x03 ; 3 + 11f2: e2 0f add r30, r18 + 11f4: f3 1f adc r31, r19 + 11f6: 00 81 ld r16, Z + 11f8: 11 81 ldd r17, Z+1 ; 0x01 + 11fa: d8 01 movw r26, r16 + 11fc: 16 96 adiw r26, 0x06 ; 6 + 11fe: ed 91 ld r30, X+ + 1200: fc 91 ld r31, X + 1202: 17 97 sbiw r26, 0x07 ; 7 + 1204: 09 95 icall + 1206: 68 2f mov r22, r24 + 1208: 8c 2f mov r24, r28 + 120a: a2 df rcall .-188 ; 0x1150 + 120c: f8 2e mov r15, r24 + 120e: 88 23 and r24, r24 + 1210: a1 f0 breq .+40 ; 0x123a + 1212: c0 91 b9 20 lds r28, 0x20B9 + 1216: d0 91 ba 20 lds r29, 0x20BA + 121a: 65 e0 ldi r22, 0x05 ; 5 + 121c: ce 01 movw r24, r28 + 121e: 5d df rcall .-326 ; 0x10da + 1220: ec 01 movw r28, r24 + 1222: 00 97 sbiw r24, 0x00 ; 0 + 1224: 21 f0 breq .+8 ; 0x122e + 1226: 8a 81 ldd r24, Y+2 ; 0x02 + 1228: 0e 94 3a 12 call 0x2474 ; 0x2474 + 122c: f6 cf rjmp .-20 ; 0x121a + 122e: d8 01 movw r26, r16 + 1230: 12 96 adiw r26, 0x02 ; 2 + 1232: ed 91 ld r30, X+ + 1234: fc 91 ld r31, X + 1236: 13 97 sbiw r26, 0x03 ; 3 + 1238: 09 95 icall + 123a: 8f 2d mov r24, r15 + 123c: df 91 pop r29 + 123e: cf 91 pop r28 + 1240: 1f 91 pop r17 + 1242: 0f 91 pop r16 + 1244: ff 90 pop r15 + 1246: 08 95 ret + +00001248 : + 1248: 1f 93 push r17 + 124a: cf 93 push r28 + 124c: df 93 push r29 + 124e: 18 2f mov r17, r24 + 1250: 7f df rcall .-258 ; 0x1150 + 1252: 88 23 and r24, r24 + 1254: 39 f1 breq .+78 ; 0x12a4 + 1256: c0 91 b9 20 lds r28, 0x20B9 + 125a: d0 91 ba 20 lds r29, 0x20BA + 125e: 65 e0 ldi r22, 0x05 ; 5 + 1260: ce 01 movw r24, r28 + 1262: 3b df rcall .-394 ; 0x10da + 1264: ec 01 movw r28, r24 + 1266: 00 97 sbiw r24, 0x00 ; 0 + 1268: 41 f0 breq .+16 ; 0x127a + 126a: 4c 81 ldd r20, Y+4 ; 0x04 + 126c: 5d 81 ldd r21, Y+5 ; 0x05 + 126e: 6b 81 ldd r22, Y+3 ; 0x03 + 1270: 8a 81 ldd r24, Y+2 ; 0x02 + 1272: a5 d7 rcall .+3914 ; 0x21be + 1274: 81 11 cpse r24, r1 + 1276: f3 cf rjmp .-26 ; 0x125e + 1278: 15 c0 rjmp .+42 ; 0x12a4 + 127a: a0 91 bb 20 lds r26, 0x20BB + 127e: b0 91 bc 20 lds r27, 0x20BC + 1282: 81 2f mov r24, r17 + 1284: 90 e0 ldi r25, 0x00 ; 0 + 1286: 88 0f add r24, r24 + 1288: 99 1f adc r25, r25 + 128a: 12 96 adiw r26, 0x02 ; 2 + 128c: ed 91 ld r30, X+ + 128e: fc 91 ld r31, X + 1290: 13 97 sbiw r26, 0x03 ; 3 + 1292: e8 0f add r30, r24 + 1294: f9 1f adc r31, r25 + 1296: 01 90 ld r0, Z+ + 1298: f0 81 ld r31, Z + 129a: e0 2d mov r30, r0 + 129c: 01 90 ld r0, Z+ + 129e: f0 81 ld r31, Z + 12a0: e0 2d mov r30, r0 + 12a2: 09 95 icall + 12a4: df 91 pop r29 + 12a6: cf 91 pop r28 + 12a8: 1f 91 pop r17 + 12aa: 08 95 ret + +000012ac : + 12ac: 80 91 b9 20 lds r24, 0x20B9 + 12b0: 90 91 ba 20 lds r25, 0x20BA + 12b4: 08 95 ret + +000012b6 : + 12b6: ef c6 rjmp .+3550 ; 0x2096 + 12b8: 08 95 ret + +000012ba : + 12ba: cf 93 push r28 + 12bc: 80 91 be 20 lds r24, 0x20BE + 12c0: 88 23 and r24, r24 + 12c2: c1 f0 breq .+48 ; 0x12f4 + 12c4: e0 91 bb 20 lds r30, 0x20BB + 12c8: f0 91 bc 20 lds r31, 0x20BC + 12cc: 01 90 ld r0, Z+ + 12ce: f0 81 ld r31, Z + 12d0: e0 2d mov r30, r0 + 12d2: 84 81 ldd r24, Z+4 ; 0x04 + 12d4: 88 23 and r24, r24 + 12d6: 71 f0 breq .+28 ; 0x12f4 + 12d8: c0 e0 ldi r28, 0x00 ; 0 + 12da: 8c 2f mov r24, r28 + 12dc: 73 df rcall .-282 ; 0x11c4 + 12de: cf 5f subi r28, 0xFF ; 255 + 12e0: e0 91 bb 20 lds r30, 0x20BB + 12e4: f0 91 bc 20 lds r31, 0x20BC + 12e8: 01 90 ld r0, Z+ + 12ea: f0 81 ld r31, Z + 12ec: e0 2d mov r30, r0 + 12ee: 84 81 ldd r24, Z+4 ; 0x04 + 12f0: c8 17 cp r28, r24 + 12f2: 98 f3 brcs .-26 ; 0x12da + 12f4: 10 92 be 20 sts 0x20BE, r1 + 12f8: 10 92 c2 20 sts 0x20C2, r1 + 12fc: 10 92 c3 20 sts 0x20C3, r1 + 1300: cf 91 pop r28 + 1302: 08 95 ret + +00001304 : + CPU_TO_LE16(USB_DEV_STATUS_BUS_POWERED); +#endif +} + +void udc_sof_notify(void) +{ + 1304: cf 93 push r28 + uint8_t iface_num; + + if (udc_num_configuration) { + 1306: 80 91 be 20 lds r24, 0x20BE + 130a: 88 23 and r24, r24 + 130c: 41 f1 breq .+80 ; 0x135e + for (iface_num = 0; + iface_num < udc_ptr_conf->desc->bNumInterfaces; + 130e: e0 91 bb 20 lds r30, 0x20BB + 1312: f0 91 bc 20 lds r31, 0x20BC + 1316: a0 81 ld r26, Z + 1318: b1 81 ldd r27, Z+1 ; 0x01 +void udc_sof_notify(void) +{ + uint8_t iface_num; + + if (udc_num_configuration) { + for (iface_num = 0; + 131a: 14 96 adiw r26, 0x04 ; 4 + 131c: 8c 91 ld r24, X + 131e: 88 23 and r24, r24 + 1320: f1 f0 breq .+60 ; 0x135e + 1322: c0 e0 ldi r28, 0x00 ; 0 + iface_num < udc_ptr_conf->desc->bNumInterfaces; + iface_num++) { + if (udc_ptr_conf->udi_apis[iface_num]->sof_notify != NULL) { + 1324: 8c 2f mov r24, r28 + 1326: 90 e0 ldi r25, 0x00 ; 0 + 1328: 88 0f add r24, r24 + 132a: 99 1f adc r25, r25 + 132c: 02 80 ldd r0, Z+2 ; 0x02 + 132e: f3 81 ldd r31, Z+3 ; 0x03 + 1330: e0 2d mov r30, r0 + 1332: e8 0f add r30, r24 + 1334: f9 1f adc r31, r25 + 1336: 01 90 ld r0, Z+ + 1338: f0 81 ld r31, Z + 133a: e0 2d mov r30, r0 + 133c: 00 84 ldd r0, Z+8 ; 0x08 + 133e: f1 85 ldd r31, Z+9 ; 0x09 + 1340: e0 2d mov r30, r0 + 1342: 30 97 sbiw r30, 0x00 ; 0 + 1344: 09 f0 breq .+2 ; 0x1348 + udc_ptr_conf->udi_apis[iface_num]->sof_notify(); + 1346: 09 95 icall + uint8_t iface_num; + + if (udc_num_configuration) { + for (iface_num = 0; + iface_num < udc_ptr_conf->desc->bNumInterfaces; + iface_num++) { + 1348: cf 5f subi r28, 0xFF ; 255 +{ + uint8_t iface_num; + + if (udc_num_configuration) { + for (iface_num = 0; + iface_num < udc_ptr_conf->desc->bNumInterfaces; + 134a: e0 91 bb 20 lds r30, 0x20BB + 134e: f0 91 bc 20 lds r31, 0x20BC + 1352: a0 81 ld r26, Z + 1354: b1 81 ldd r27, Z+1 ; 0x01 +void udc_sof_notify(void) +{ + uint8_t iface_num; + + if (udc_num_configuration) { + for (iface_num = 0; + 1356: 14 96 adiw r26, 0x04 ; 4 + 1358: 8c 91 ld r24, X + 135a: c8 17 cp r28, r24 + 135c: 18 f3 brcs .-58 ; 0x1324 + if (udc_ptr_conf->udi_apis[iface_num]->sof_notify != NULL) { + udc_ptr_conf->udi_apis[iface_num]->sof_notify(); + } + } + } +} + 135e: cf 91 pop r28 + 1360: 08 95 ret + +00001362 : + * sent to a specific application callback. + * + * \return true if the request is supported, else the request is stalled by UDD + */ +bool udc_process_setup(void) +{ + 1362: ef 92 push r14 + 1364: ff 92 push r15 + 1366: 0f 93 push r16 + 1368: 1f 93 push r17 + 136a: cf 93 push r28 + 136c: df 93 push r29 + // By default no data (receive/send) and no callbacks registered + udd_g_ctrlreq.payload_size = 0; + 136e: 10 92 60 24 sts 0x2460, r1 + 1372: 10 92 61 24 sts 0x2461, r1 + udd_g_ctrlreq.callback = NULL; + 1376: 10 92 62 24 sts 0x2462, r1 + 137a: 10 92 63 24 sts 0x2463, r1 + udd_g_ctrlreq.over_under_run = NULL; + 137e: 10 92 64 24 sts 0x2464, r1 + 1382: 10 92 65 24 sts 0x2465, r1 + + if (Udd_setup_is_in()) { + 1386: 20 91 56 24 lds r18, 0x2456 + 138a: 22 23 and r18, r18 + 138c: 3c f4 brge .+14 ; 0x139c + if (udd_g_ctrlreq.req.wLength == 0) { + 138e: 80 91 5c 24 lds r24, 0x245C + 1392: 90 91 5d 24 lds r25, 0x245D + 1396: 89 2b or r24, r25 + 1398: 09 f4 brne .+2 ; 0x139c + 139a: 9b c3 rjmp .+1846 ; 0x1ad2 + return false; // Error from USB host + } + } + + if (Udd_setup_type() == USB_REQ_TYPE_VENDOR){ + 139c: 20 76 andi r18, 0x60 ; 96 + 139e: 20 34 cpi r18, 0x40 ; 64 + 13a0: 09 f0 breq .+2 ; 0x13a4 + 13a2: 08 c1 rjmp .+528 ; 0x15b4 + } + return false; +} + +static bool udc_reqvend(void){ + switch (udd_g_ctrlreq.req.bRequest){ + 13a4: 80 91 57 24 lds r24, 0x2457 + 13a8: 90 e0 ldi r25, 0x00 ; 0 + 13aa: fc 01 movw r30, r24 + 13ac: e0 5a subi r30, 0xA0 ; 160 + 13ae: f1 09 sbc r31, r1 + 13b0: e8 30 cpi r30, 0x08 ; 8 + 13b2: f1 05 cpc r31, r1 + 13b4: 08 f0 brcs .+2 ; 0x13b8 + 13b6: f5 c0 rjmp .+490 ; 0x15a2 + 13b8: ea 5f subi r30, 0xFA ; 250 + 13ba: fe 4f sbci r31, 0xFE ; 254 + 13bc: 0c 94 35 14 jmp 0x286a ; 0x286a <__tablejump2__> + case 0xa0: //Break! (Debug command) + asm("nop"); + 13c0: 00 00 nop + 13c2: 8b c3 rjmp .+1814 ; 0x1ada + return 1; + case 0xa1: //Receive waveform for signal gen + TC_DAC.CTRLA = 0x00; + 13c4: e0 e0 ldi r30, 0x00 ; 0 + 13c6: f8 e0 ldi r31, 0x08 ; 8 + 13c8: 10 82 st Z, r1 + TC_DAC.PERBUF = udd_g_ctrlreq.req.wValue; + 13ca: 80 91 58 24 lds r24, 0x2458 + 13ce: 90 91 59 24 lds r25, 0x2459 + 13d2: 86 ab std Z+54, r24 ; 0x36 + 13d4: 97 ab std Z+55, r25 ; 0x37 + TC_DAC.CTRLA = (unsigned char) udd_g_ctrlreq.req.wIndex & 0x0F; + 13d6: 80 91 5a 24 lds r24, 0x245A + 13da: 8f 70 andi r24, 0x0F ; 15 + 13dc: 80 83 st Z, r24 + udd_set_setup_payload(dacBuf_CH1, udd_g_ctrlreq.req.wLength); + 13de: cc e5 ldi r28, 0x5C ; 92 + 13e0: d4 e2 ldi r29, 0x24 ; 36 + 13e2: 68 81 ld r22, Y + 13e4: 79 81 ldd r23, Y+1 ; 0x01 + 13e6: 86 e5 ldi r24, 0x56 ; 86 + 13e8: 92 e2 ldi r25, 0x22 ; 34 + 13ea: e0 d6 rcall .+3520 ; 0x21ac + if(dacBuf_len != udd_g_ctrlreq.req.wLength){ + 13ec: 88 81 ld r24, Y + 13ee: 99 81 ldd r25, Y+1 ; 0x01 + 13f0: 20 91 04 20 lds r18, 0x2004 + 13f4: 30 91 05 20 lds r19, 0x2005 + 13f8: 82 17 cp r24, r18 + 13fa: 93 07 cpc r25, r19 + 13fc: 09 f4 brne .+2 ; 0x1400 + 13fe: 6d c3 rjmp .+1754 ; 0x1ada + dacBuf_len = udd_g_ctrlreq.req.wLength; + 1400: 80 93 04 20 sts 0x2004, r24 + 1404: 90 93 05 20 sts 0x2005, r25 + switch(global_mode){ + 1408: 80 91 00 20 lds r24, 0x2000 + 140c: 90 e0 ldi r25, 0x00 ; 0 + 140e: 88 30 cpi r24, 0x08 ; 8 + 1410: 91 05 cpc r25, r1 + 1412: 08 f0 brcs .+2 ; 0x1416 + 1414: c8 c0 rjmp .+400 ; 0x15a6 + 1416: fc 01 movw r30, r24 + 1418: e2 5f subi r30, 0xF2 ; 242 + 141a: fe 4f sbci r31, 0xFE ; 254 + 141c: 0c 94 35 14 jmp 0x286a ; 0x286a <__tablejump2__> + case 0: + tiny_dma_set_mode_0(); + 1420: 46 d8 rcall .-3956 ; 0x4ae + 1422: 5b c3 rjmp .+1718 ; 0x1ada + break; + case 1: + tiny_dma_set_mode_1(); + 1424: bd d8 rcall .-3718 ; 0x5a0 + 1426: 59 c3 rjmp .+1714 ; 0x1ada + break; + case 2: + tiny_dma_set_mode_2(); + 1428: 60 d9 rcall .-3392 ; 0x6ea + 142a: 57 c3 rjmp .+1710 ; 0x1ada + break; + case 3: + tiny_dma_set_mode_3(); + 142c: 00 da rcall .-3072 ; 0x82e + 142e: 55 c3 rjmp .+1706 ; 0x1ada + break; + case 4: + tiny_dma_set_mode_4(); + 1430: 95 da rcall .-2774 ; 0x95c + 1432: 53 c3 rjmp .+1702 ; 0x1ada + break; + case 5: + tiny_dma_set_mode_5(); + 1434: 53 db rcall .-2394 ; 0xadc + 1436: 51 c3 rjmp .+1698 ; 0x1ada + break; + case 6: + tiny_dma_set_mode_6(); + 1438: 98 db rcall .-2256 ; 0xb6a + 143a: 4f c3 rjmp .+1694 ; 0x1ada + break; + case 7: + tiny_dma_set_mode_7(); + 143c: 0e dc rcall .-2020 ; 0xc5a + 143e: 4d c3 rjmp .+1690 ; 0x1ada + break; + } + } + return 1; + case 0xa2: //CH2 waveform + TC_AUXDAC.CTRLA = 0x00; + 1440: e0 e4 ldi r30, 0x40 ; 64 + 1442: f8 e0 ldi r31, 0x08 ; 8 + 1444: 10 82 st Z, r1 + auxDacBufLen = udd_g_ctrlreq.req.wLength; + 1446: cc e5 ldi r28, 0x5C ; 92 + 1448: d4 e2 ldi r29, 0x24 ; 36 + 144a: 68 81 ld r22, Y + 144c: 79 81 ldd r23, Y+1 ; 0x01 + 144e: 60 93 02 20 sts 0x2002, r22 + 1452: 70 93 03 20 sts 0x2003, r23 + TC_AUXDAC.PERBUF = udd_g_ctrlreq.req.wValue; + 1456: 80 91 58 24 lds r24, 0x2458 + 145a: 90 91 59 24 lds r25, 0x2459 + 145e: 86 ab std Z+54, r24 ; 0x36 + 1460: 97 ab std Z+55, r25 ; 0x37 + TC_AUXDAC.CTRLA = (unsigned char) udd_g_ctrlreq.req.wIndex & 0x0F; + 1462: 80 91 5a 24 lds r24, 0x245A + 1466: 8f 70 andi r24, 0x0F ; 15 + 1468: 80 83 st Z, r24 + udd_set_setup_payload(dacBuf_CH2, udd_g_ctrlreq.req.wLength); + 146a: 86 e6 ldi r24, 0x66 ; 102 + 146c: 94 e2 ldi r25, 0x24 ; 36 + 146e: 9e d6 rcall .+3388 ; 0x21ac + if(dacBuf_len != udd_g_ctrlreq.req.wLength){ + 1470: 88 81 ld r24, Y + 1472: 99 81 ldd r25, Y+1 ; 0x01 + 1474: 20 91 04 20 lds r18, 0x2004 + 1478: 30 91 05 20 lds r19, 0x2005 + 147c: 82 17 cp r24, r18 + 147e: 93 07 cpc r25, r19 + 1480: 09 f4 brne .+2 ; 0x1484 + 1482: 2b c3 rjmp .+1622 ; 0x1ada + dacBuf_len = udd_g_ctrlreq.req.wLength; + 1484: 80 93 04 20 sts 0x2004, r24 + 1488: 90 93 05 20 sts 0x2005, r25 + switch(global_mode){ + 148c: 80 91 00 20 lds r24, 0x2000 + 1490: 90 e0 ldi r25, 0x00 ; 0 + 1492: 88 30 cpi r24, 0x08 ; 8 + 1494: 91 05 cpc r25, r1 + 1496: 08 f0 brcs .+2 ; 0x149a + 1498: 88 c0 rjmp .+272 ; 0x15aa + 149a: fc 01 movw r30, r24 + 149c: ea 5e subi r30, 0xEA ; 234 + 149e: fe 4f sbci r31, 0xFE ; 254 + 14a0: 0c 94 35 14 jmp 0x286a ; 0x286a <__tablejump2__> + case 0: + tiny_dma_set_mode_0(); + 14a4: 04 d8 rcall .-4088 ; 0x4ae + 14a6: 19 c3 rjmp .+1586 ; 0x1ada + break; + case 1: + tiny_dma_set_mode_1(); + 14a8: 7b d8 rcall .-3850 ; 0x5a0 + 14aa: 17 c3 rjmp .+1582 ; 0x1ada + break; + case 2: + tiny_dma_set_mode_2(); + 14ac: 1e d9 rcall .-3524 ; 0x6ea + 14ae: 15 c3 rjmp .+1578 ; 0x1ada + break; + case 3: + tiny_dma_set_mode_3(); + 14b0: be d9 rcall .-3204 ; 0x82e + 14b2: 13 c3 rjmp .+1574 ; 0x1ada + break; + case 4: + tiny_dma_set_mode_4(); + 14b4: 53 da rcall .-2906 ; 0x95c + 14b6: 11 c3 rjmp .+1570 ; 0x1ada + break; + case 5: + tiny_dma_set_mode_5(); + 14b8: 11 db rcall .-2526 ; 0xadc + 14ba: 0f c3 rjmp .+1566 ; 0x1ada + break; + case 6: + tiny_dma_set_mode_6(); + 14bc: 56 db rcall .-2388 ; 0xb6a + 14be: 0d c3 rjmp .+1562 ; 0x1ada + break; + case 7: + tiny_dma_set_mode_7(); + 14c0: cc db rcall .-2152 ; 0xc5a + 14c2: 0b c3 rjmp .+1558 ; 0x1ada + break; + } + } + return 1; + case 0xa3: //PSU voltage control + TC_PSU.CCA = 0; + 14c4: e0 e4 ldi r30, 0x40 ; 64 + 14c6: f9 e0 ldi r31, 0x09 ; 9 + 14c8: 10 a6 std Z+40, r1 ; 0x28 + 14ca: 11 a6 std Z+41, r1 ; 0x29 + PSU_target = udd_g_ctrlreq.req.wValue; + 14cc: 80 91 58 24 lds r24, 0x2458 + 14d0: 80 93 b2 20 sts 0x20B2, r24 + 14d4: 02 c3 rjmp .+1540 ; 0x1ada + return 1; + case 0xa4: //Triple mode + PORTB.OUT = udd_g_ctrlreq.req.wValue; + 14d6: 80 91 58 24 lds r24, 0x2458 + 14da: e0 e2 ldi r30, 0x20 ; 32 + 14dc: f6 e0 ldi r31, 0x06 ; 6 + 14de: 84 83 std Z+4, r24 ; 0x04 + 14e0: fc c2 rjmp .+1528 ; 0x1ada + return 1; + case 0xa5: //Control Gain and Scope modes + switch(udd_g_ctrlreq.req.wValue){ + 14e2: 80 91 58 24 lds r24, 0x2458 + 14e6: 90 91 59 24 lds r25, 0x2459 + 14ea: 88 30 cpi r24, 0x08 ; 8 + 14ec: 91 05 cpc r25, r1 + 14ee: 08 f0 brcs .+2 ; 0x14f2 + 14f0: 5e c0 rjmp .+188 ; 0x15ae + 14f2: fc 01 movw r30, r24 + 14f4: e2 5e subi r30, 0xE2 ; 226 + 14f6: fe 4f sbci r31, 0xFE ; 254 + 14f8: 0c 94 35 14 jmp 0x286a ; 0x286a <__tablejump2__> + case 0: //Mode 0 + tiny_adc_setup(0, 0); + 14fc: 60 e0 ldi r22, 0x00 ; 0 + 14fe: 80 e0 ldi r24, 0x00 ; 0 + 1500: 0e 94 e7 01 call 0x3ce ; 0x3ce + tiny_adc_ch0setup(udd_g_ctrlreq.req.wIndex); + 1504: 80 91 5a 24 lds r24, 0x245A + 1508: 0e 94 bb 01 call 0x376 ; 0x376 + tiny_dma_set_mode_0(); + 150c: 0e 94 57 02 call 0x4ae ; 0x4ae + 1510: e4 c2 rjmp .+1480 ; 0x1ada + break; + case 1: //Mode 1 + tiny_adc_setup(0, 0); + 1512: 60 e0 ldi r22, 0x00 ; 0 + 1514: 80 e0 ldi r24, 0x00 ; 0 + 1516: 0e 94 e7 01 call 0x3ce ; 0x3ce + tiny_adc_ch0setup(udd_g_ctrlreq.req.wIndex); + 151a: 80 91 5a 24 lds r24, 0x245A + 151e: 0e 94 bb 01 call 0x376 ; 0x376 + tiny_dma_set_mode_1(); + 1522: 3e d8 rcall .-3972 ; 0x5a0 + 1524: da c2 rjmp .+1460 ; 0x1ada + break; + case 2: //Mode 2 + tiny_adc_setup(1, 1); + 1526: 61 e0 ldi r22, 0x01 ; 1 + 1528: 81 e0 ldi r24, 0x01 ; 1 + 152a: 0e 94 e7 01 call 0x3ce ; 0x3ce + tiny_adc_ch0setup(udd_g_ctrlreq.req.wIndex); + 152e: ca e5 ldi r28, 0x5A ; 90 + 1530: d4 e2 ldi r29, 0x24 ; 36 + 1532: 88 81 ld r24, Y + 1534: 0e 94 bb 01 call 0x376 ; 0x376 + tiny_adc_ch1setup(udd_g_ctrlreq.req.wIndex>>8); + 1538: 89 81 ldd r24, Y+1 ; 0x01 + 153a: 0e 94 ca 01 call 0x394 ; 0x394 + tiny_dma_set_mode_2(); + 153e: d5 d8 rcall .-3670 ; 0x6ea + 1540: cc c2 rjmp .+1432 ; 0x1ada + break; + case 3: //Mode 3 + tiny_dma_set_mode_3(); + 1542: 75 d9 rcall .-3350 ; 0x82e + 1544: ca c2 rjmp .+1428 ; 0x1ada + break; + case 4: //Mode 4 + tiny_dma_set_mode_4(); + 1546: 0a da rcall .-3052 ; 0x95c + 1548: c8 c2 rjmp .+1424 ; 0x1ada + break; + case 5: //Mode 5 + tiny_adc_setup(0, 0); + 154a: 60 e0 ldi r22, 0x00 ; 0 + 154c: 80 e0 ldi r24, 0x00 ; 0 + 154e: 0e 94 e7 01 call 0x3ce ; 0x3ce + tiny_adc_ch0setup(udd_g_ctrlreq.req.wIndex); + 1552: 80 91 5a 24 lds r24, 0x245A + 1556: 0e 94 bb 01 call 0x376 ; 0x376 + tiny_dma_set_mode_5(); + 155a: c0 da rcall .-2688 ; 0xadc + 155c: be c2 rjmp .+1404 ; 0x1ada + break; + case 6: //Mode 6 + tiny_adc_setup(0, 1); + 155e: 61 e0 ldi r22, 0x01 ; 1 + 1560: 80 e0 ldi r24, 0x00 ; 0 + 1562: 0e 94 e7 01 call 0x3ce ; 0x3ce + tiny_adc_ch0setup(udd_g_ctrlreq.req.wIndex); + 1566: 80 91 5a 24 lds r24, 0x245A + 156a: 0e 94 bb 01 call 0x376 ; 0x376 + tiny_dma_set_mode_6(); + 156e: fd da rcall .-2566 ; 0xb6a + 1570: b4 c2 rjmp .+1384 ; 0x1ada + break; + case 7: //Mode 7 + tiny_adc_setup(0, 2); + 1572: 62 e0 ldi r22, 0x02 ; 2 + 1574: 80 e0 ldi r24, 0x00 ; 0 + 1576: 0e 94 e7 01 call 0x3ce ; 0x3ce + tiny_adc_ch0setup(udd_g_ctrlreq.req.wIndex | 0x80); + 157a: 80 91 5a 24 lds r24, 0x245A + 157e: 80 68 ori r24, 0x80 ; 128 + 1580: 0e 94 bb 01 call 0x376 ; 0x376 + tiny_dma_set_mode_7(); + 1584: 6a db rcall .-2348 ; 0xc5a + 1586: a9 c2 rjmp .+1362 ; 0x1ada + default: + return 0; + } + return 1; + case 0xa6: //Digital out??? + PORTE.OUT = udd_g_ctrlreq.req.wValue; + 1588: 80 91 58 24 lds r24, 0x2458 + 158c: e0 e8 ldi r30, 0x80 ; 128 + 158e: f6 e0 ldi r31, 0x06 ; 6 + 1590: 84 83 std Z+4, r24 ; 0x04 + 1592: a3 c2 rjmp .+1350 ; 0x1ada + case 0xa7: //Soft Reset + + //Code here from SprinterSB + //http://www.avrfreaks.net/comment/872674 + //I don't understand it, but it seems to do the job + __asm volatile ("cli" "\n\t" + 1594: e9 e7 ldi r30, 0x79 ; 121 + 1596: f0 e0 ldi r31, 0x00 ; 0 + 1598: 91 e0 ldi r25, 0x01 ; 1 + 159a: 88 ed ldi r24, 0xD8 ; 216 + 159c: f8 94 cli + 159e: 84 bf out 0x34, r24 ; 52 + 15a0: 90 83 st Z, r25 + [swrst] "r" ((uint8_t) RST_SWRST_bm), + [rst] "e" (&RST.CTRL) + : "memory"); + __builtin_unreachable(); + default: + return 0; + 15a2: 00 e0 ldi r16, 0x00 ; 0 + 15a4: 05 c0 rjmp .+10 ; 0x15b0 + case 7: + tiny_dma_set_mode_7(); + break; + } + } + return 1; + 15a6: 01 e0 ldi r16, 0x01 ; 1 + 15a8: 03 c0 rjmp .+6 ; 0x15b0 + case 7: + tiny_dma_set_mode_7(); + break; + } + } + return 1; + 15aa: 01 e0 ldi r16, 0x01 ; 1 + 15ac: 01 c0 rjmp .+2 ; 0x15b0 + tiny_adc_setup(0, 2); + tiny_adc_ch0setup(udd_g_ctrlreq.req.wIndex | 0x80); + tiny_dma_set_mode_7(); + break; + default: + return 0; + 15ae: 00 e0 ldi r16, 0x00 ; 0 + return false; // Error from USB host + } + } + + if (Udd_setup_type() == USB_REQ_TYPE_VENDOR){ + if (udc_reqvend()) { + 15b0: 01 11 cpse r16, r1 + 15b2: 94 c2 rjmp .+1320 ; 0x1adc + return true; + } + } + + // If standard request then try to decode it in UDC + if (Udd_setup_type() == USB_REQ_TYPE_STANDARD) { + 15b4: 20 91 56 24 lds r18, 0x2456 + 15b8: 82 2f mov r24, r18 + 15ba: 80 76 andi r24, 0x60 ; 96 + 15bc: 09 f0 breq .+2 ; 0x15c0 + 15be: 0e c2 rjmp .+1052 ; 0x19dc + * + * \return true if the request is supported + */ +static bool udc_reqstd(void) +{ + if (Udd_setup_is_in()) { + 15c0: 22 23 and r18, r18 + 15c2: 0c f0 brlt .+2 ; 0x15c6 + 15c4: 17 c1 rjmp .+558 ; 0x17f4 + // GET Standard Requests + if (udd_g_ctrlreq.req.wLength == 0) { + 15c6: 80 91 5c 24 lds r24, 0x245C + 15ca: 90 91 5d 24 lds r25, 0x245D + 15ce: 00 97 sbiw r24, 0x00 ; 0 + 15d0: 09 f4 brne .+2 ; 0x15d4 + 15d2: 04 c2 rjmp .+1032 ; 0x19dc + return false; // Error for USB host + } + + if (USB_REQ_RECIP_DEVICE == Udd_setup_recipient()) { + 15d4: 2f 71 andi r18, 0x1F ; 31 + 15d6: 09 f0 breq .+2 ; 0x15da + 15d8: b1 c0 rjmp .+354 ; 0x173c + // Standard Get Device request + switch (udd_g_ctrlreq.req.bRequest) { + 15da: 30 91 57 24 lds r19, 0x2457 + 15de: 36 30 cpi r19, 0x06 ; 6 + 15e0: 81 f0 breq .+32 ; 0x1602 + 15e2: 38 30 cpi r19, 0x08 ; 8 + 15e4: 09 f4 brne .+2 ; 0x15e8 + 15e6: 9f c0 rjmp .+318 ; 0x1726 + 15e8: 31 11 cpse r19, r1 + 15ea: a8 c0 rjmp .+336 ; 0x173c + * + * \return true if success + */ +static bool udc_req_std_dev_get_status(void) +{ + if (udd_g_ctrlreq.req.wLength != sizeof(udc_device_status)) { + 15ec: 02 97 sbiw r24, 0x02 ; 2 + 15ee: 39 f4 brne .+14 ; 0x15fe + return false; + } + + udd_set_setup_payload( (uint8_t *) & udc_device_status, + 15f0: 62 e0 ldi r22, 0x02 ; 2 + 15f2: 70 e0 ldi r23, 0x00 ; 0 + 15f4: 82 ec ldi r24, 0xC2 ; 194 + 15f6: 90 e2 ldi r25, 0x20 ; 32 + 15f8: d9 d5 rcall .+2994 ; 0x21ac + sizeof(udc_device_status)); + return true; + 15fa: 01 e0 ldi r16, 0x01 ; 1 + 15fc: ed c1 rjmp .+986 ; 0x19d8 + * \return true if success + */ +static bool udc_req_std_dev_get_status(void) +{ + if (udd_g_ctrlreq.req.wLength != sizeof(udc_device_status)) { + return false; + 15fe: 00 e0 ldi r16, 0x00 ; 0 + 1600: eb c1 rjmp .+982 ; 0x19d8 + */ +static bool udc_req_std_dev_get_descriptor(void) +{ + uint8_t conf_num; + + conf_num = udd_g_ctrlreq.req.wValue & 0xff; + 1602: 20 91 58 24 lds r18, 0x2458 + 1606: 30 91 59 24 lds r19, 0x2459 + + // Check descriptor ID + switch ((uint8_t) (udd_g_ctrlreq.req.wValue >> 8)) { + 160a: 83 2f mov r24, r19 + 160c: 99 27 eor r25, r25 + 160e: 82 30 cpi r24, 0x02 ; 2 + 1610: 91 05 cpc r25, r1 + 1612: 99 f0 breq .+38 ; 0x163a + 1614: 1c f4 brge .+6 ; 0x161c + 1616: 01 97 sbiw r24, 0x01 ; 1 + 1618: 39 f0 breq .+14 ; 0x1628 + 161a: 7b c0 rjmp .+246 ; 0x1712 + 161c: 83 30 cpi r24, 0x03 ; 3 + 161e: 91 05 cpc r25, r1 + 1620: d9 f1 breq .+118 ; 0x1698 + 1622: 0f 97 sbiw r24, 0x0f ; 15 + 1624: 59 f1 breq .+86 ; 0x167c + 1626: 75 c0 rjmp .+234 ; 0x1712 + } else +#endif + { + udd_set_setup_payload( + (uint8_t *) udc_config.confdev_lsfs, + udc_config.confdev_lsfs->bLength); + 1628: 80 91 10 20 lds r24, 0x2010 + 162c: 90 91 11 20 lds r25, 0x2011 + (uint8_t *) udc_config.confdev_hs, + udc_config.confdev_hs->bLength); + } else +#endif + { + udd_set_setup_payload( + 1630: dc 01 movw r26, r24 + 1632: 6c 91 ld r22, X + 1634: 70 e0 ldi r23, 0x00 ; 0 + 1636: ba d5 rcall .+2932 ; 0x21ac + 1638: 5b c0 rjmp .+182 ; 0x16f0 + le16_to_cpu(udc_config.conf_hs[conf_num].desc->wTotalLength)); + } else +#endif + { + // FS descriptor + if (conf_num >= udc_config.confdev_lsfs-> + 163a: e0 91 10 20 lds r30, 0x2010 + 163e: f0 91 11 20 lds r31, 0x2011 + 1642: 81 89 ldd r24, Z+17 ; 0x11 + 1644: 28 17 cp r18, r24 + 1646: 08 f0 brcs .+2 ; 0x164a + 1648: 66 c0 rjmp .+204 ; 0x1716 + bNumConfigurations) { + return false; + } + udd_set_setup_payload( + (uint8_t *)udc_config.conf_lsfs[conf_num].desc, + le16_to_cpu(udc_config.conf_lsfs[conf_num].desc->wTotalLength)); + 164a: c9 01 movw r24, r18 + 164c: 99 27 eor r25, r25 + 164e: 88 0f add r24, r24 + 1650: 99 1f adc r25, r25 + 1652: 88 0f add r24, r24 + 1654: 99 1f adc r25, r25 + 1656: e0 91 12 20 lds r30, 0x2012 + 165a: f0 91 13 20 lds r31, 0x2013 + 165e: e8 0f add r30, r24 + 1660: f9 1f adc r31, r25 + 1662: 80 81 ld r24, Z + 1664: 91 81 ldd r25, Z+1 ; 0x01 + // FS descriptor + if (conf_num >= udc_config.confdev_lsfs-> + bNumConfigurations) { + return false; + } + udd_set_setup_payload( + 1666: fc 01 movw r30, r24 + 1668: 62 81 ldd r22, Z+2 ; 0x02 + 166a: 73 81 ldd r23, Z+3 ; 0x03 + 166c: 9f d5 rcall .+2878 ; 0x21ac + (uint8_t *)udc_config.conf_lsfs[conf_num].desc, + le16_to_cpu(udc_config.conf_lsfs[conf_num].desc->wTotalLength)); + } + ((usb_conf_desc_t *) udd_g_ctrlreq.payload)->bDescriptorType = + 166e: e0 91 5e 24 lds r30, 0x245E + 1672: f0 91 5f 24 lds r31, 0x245F + 1676: 82 e0 ldi r24, 0x02 ; 2 + 1678: 81 83 std Z+1, r24 ; 0x01 + 167a: 3a c0 rjmp .+116 ; 0x16f0 + break; +#endif + + case USB_DT_BOS: + // Device BOS descriptor requested + if (udc_config.conf_bos == NULL) { + 167c: 80 91 14 20 lds r24, 0x2014 + 1680: 90 91 15 20 lds r25, 0x2015 + 1684: 00 97 sbiw r24, 0x00 ; 0 + 1686: 09 f4 brne .+2 ; 0x168a + 1688: 48 c0 rjmp .+144 ; 0x171a + return false; + } + udd_set_setup_payload( (uint8_t *) udc_config.conf_bos, + 168a: dc 01 movw r26, r24 + 168c: 12 96 adiw r26, 0x02 ; 2 + 168e: 6d 91 ld r22, X+ + 1690: 7c 91 ld r23, X + 1692: 13 97 sbiw r26, 0x03 ; 3 + 1694: 8b d5 rcall .+2838 ; 0x21ac + 1696: 2c c0 rjmp .+88 ; 0x16f0 + uint8_t i; + const uint8_t *str; + uint8_t str_length = 0; + + // Link payload pointer to the string corresponding at request + switch (udd_g_ctrlreq.req.wValue & 0xff) { + 1698: 33 27 eor r19, r19 + 169a: 21 30 cpi r18, 0x01 ; 1 + 169c: 31 05 cpc r19, r1 + 169e: 59 f0 breq .+22 ; 0x16b6 + 16a0: 20 f0 brcs .+8 ; 0x16aa + 16a2: 22 30 cpi r18, 0x02 ; 2 + 16a4: 31 05 cpc r19, r1 + 16a6: 59 f0 breq .+22 ; 0x16be + 16a8: 3a c0 rjmp .+116 ; 0x171e + case 0: + udd_set_setup_payload((uint8_t *) &udc_string_desc_languageid, + 16aa: 64 e0 ldi r22, 0x04 ; 4 + 16ac: 70 e0 ldi r23, 0x00 ; 0 + 16ae: 8e ea ldi r24, 0xAE ; 174 + 16b0: 90 e2 ldi r25, 0x20 ; 32 + 16b2: 7c d5 rcall .+2808 ; 0x21ac + 16b4: 1d c0 rjmp .+58 ; 0x16f0 + break; + +#ifdef USB_DEVICE_MANUFACTURE_NAME + case 1: + str_length = USB_DEVICE_MANUFACTURE_NAME_SIZE; + str = udc_string_manufacturer_name; + 16b6: 83 ea ldi r24, 0xA3 ; 163 + 16b8: 90 e2 ldi r25, 0x20 ; 32 + sizeof(udc_string_desc_languageid)); + break; + +#ifdef USB_DEVICE_MANUFACTURE_NAME + case 1: + str_length = USB_DEVICE_MANUFACTURE_NAME_SIZE; + 16ba: 29 e0 ldi r18, 0x09 ; 9 + 16bc: 03 c0 rjmp .+6 ; 0x16c4 + break; +#endif +#ifdef USB_DEVICE_PRODUCT_NAME + case 2: + str_length = USB_DEVICE_PRODUCT_NAME_SIZE; + str = udc_string_product_name; + 16be: 8a e8 ldi r24, 0x8A ; 138 + 16c0: 90 e2 ldi r25, 0x20 ; 32 + str = udc_string_manufacturer_name; + break; +#endif +#ifdef USB_DEVICE_PRODUCT_NAME + case 2: + str_length = USB_DEVICE_PRODUCT_NAME_SIZE; + 16c2: 28 e1 ldi r18, 0x18 ; 24 + 16c4: 38 2f mov r19, r24 + 16c6: aa e5 ldi r26, 0x5A ; 90 + 16c8: b0 e2 ldi r27, 0x20 ; 32 + 16ca: e8 2f mov r30, r24 + 16cc: f9 2f mov r31, r25 + return false; + } + + if (str_length) { + for(i = 0; i < str_length; i++) { + udc_string_desc.string[i] = cpu_to_le16((le16_t)str[i]); + 16ce: 81 91 ld r24, Z+ + 16d0: 90 e0 ldi r25, 0x00 ; 0 + 16d2: 8d 93 st X+, r24 + 16d4: 9d 93 st X+, r25 + 16d6: 8e 2f mov r24, r30 + 16d8: 83 1b sub r24, r19 +#endif + return false; + } + + if (str_length) { + for(i = 0; i < str_length; i++) { + 16da: 82 17 cp r24, r18 + 16dc: c0 f3 brcs .-16 ; 0x16ce + udc_string_desc.string[i] = cpu_to_le16((le16_t)str[i]); + } + + udc_string_desc.header.bLength = 2 + (str_length) * 2; + 16de: 22 0f add r18, r18 + 16e0: 62 e0 ldi r22, 0x02 ; 2 + 16e2: 62 0f add r22, r18 + 16e4: 60 93 58 20 sts 0x2058, r22 + udd_set_setup_payload( + 16e8: 70 e0 ldi r23, 0x00 ; 0 + 16ea: 88 e5 ldi r24, 0x58 ; 88 + 16ec: 90 e2 ldi r25, 0x20 ; 32 + 16ee: 5e d5 rcall .+2748 ; 0x21ac + default: + // Unknown descriptor requested + return false; + } + // if the descriptor is larger than length requested, then reduce it + if (udd_g_ctrlreq.req.wLength < udd_g_ctrlreq.payload_size) { + 16f0: 80 91 5c 24 lds r24, 0x245C + 16f4: 90 91 5d 24 lds r25, 0x245D + 16f8: 20 91 60 24 lds r18, 0x2460 + 16fc: 30 91 61 24 lds r19, 0x2461 + 1700: 82 17 cp r24, r18 + 1702: 93 07 cpc r25, r19 + 1704: 70 f4 brcc .+28 ; 0x1722 + udd_g_ctrlreq.payload_size = udd_g_ctrlreq.req.wLength; + 1706: 80 93 60 24 sts 0x2460, r24 + 170a: 90 93 61 24 sts 0x2461, r25 + } + return true; + 170e: 01 e0 ldi r16, 0x01 ; 1 + 1710: 63 c1 rjmp .+710 ; 0x19d8 + } + break; + + default: + // Unknown descriptor requested + return false; + 1712: 00 e0 ldi r16, 0x00 ; 0 + 1714: 61 c1 rjmp .+706 ; 0x19d8 +#endif + { + // FS descriptor + if (conf_num >= udc_config.confdev_lsfs-> + bNumConfigurations) { + return false; + 1716: 00 e0 ldi r16, 0x00 ; 0 + 1718: 5f c1 rjmp .+702 ; 0x19d8 +#endif + + case USB_DT_BOS: + // Device BOS descriptor requested + if (udc_config.conf_bos == NULL) { + return false; + 171a: 00 e0 ldi r16, 0x00 ; 0 + 171c: 5d c1 rjmp .+698 ; 0x19d8 + break; + + case USB_DT_STRING: + // String descriptor requested + if (!udc_req_std_dev_get_str_desc()) { + return false; + 171e: 00 e0 ldi r16, 0x00 ; 0 + 1720: 5b c1 rjmp .+694 ; 0x19d8 + } + // if the descriptor is larger than length requested, then reduce it + if (udd_g_ctrlreq.req.wLength < udd_g_ctrlreq.payload_size) { + udd_g_ctrlreq.payload_size = udd_g_ctrlreq.req.wLength; + } + return true; + 1722: 01 e0 ldi r16, 0x01 ; 1 + 1724: 59 c1 rjmp .+690 ; 0x19d8 + * + * \return true if success + */ +static bool udc_req_std_dev_get_configuration(void) +{ + if (udd_g_ctrlreq.req.wLength != 1) { + 1726: 01 97 sbiw r24, 0x01 ; 1 + 1728: 39 f4 brne .+14 ; 0x1738 + return false; + } + + udd_set_setup_payload(&udc_num_configuration,1); + 172a: 61 e0 ldi r22, 0x01 ; 1 + 172c: 70 e0 ldi r23, 0x00 ; 0 + 172e: 8e eb ldi r24, 0xBE ; 190 + 1730: 90 e2 ldi r25, 0x20 ; 32 + 1732: 3c d5 rcall .+2680 ; 0x21ac + return true; + 1734: 01 e0 ldi r16, 0x01 ; 1 + 1736: 50 c1 rjmp .+672 ; 0x19d8 + * \return true if success + */ +static bool udc_req_std_dev_get_configuration(void) +{ + if (udd_g_ctrlreq.req.wLength != 1) { + return false; + 1738: 00 e0 ldi r16, 0x00 ; 0 + 173a: 4e c1 rjmp .+668 ; 0x19d8 + default: + break; + } + } + + if (USB_REQ_RECIP_INTERFACE == Udd_setup_recipient()) { + 173c: 21 30 cpi r18, 0x01 ; 1 + 173e: 09 f0 breq .+2 ; 0x1742 + 1740: 3f c0 rjmp .+126 ; 0x17c0 + // Standard Get Interface request + switch (udd_g_ctrlreq.req.bRequest) { + 1742: 30 91 57 24 lds r19, 0x2457 + 1746: 3a 30 cpi r19, 0x0A ; 10 + 1748: d9 f5 brne .+118 ; 0x17c0 +static bool udc_req_std_iface_get_setting(void) +{ + uint8_t iface_num; + udi_api_t UDC_DESC_STORAGE *udi_api; + + if (udd_g_ctrlreq.req.wLength != 1) { + 174a: 01 97 sbiw r24, 0x01 ; 1 + 174c: 99 f5 brne .+102 ; 0x17b4 + return false; // Error in request + } + if (!udc_num_configuration) { + 174e: 80 91 be 20 lds r24, 0x20BE + 1752: 88 23 and r24, r24 + 1754: 89 f1 breq .+98 ; 0x17b8 + return false; // The device is not is configured state yet + } + + // Check the interface number included in the request + iface_num = udd_g_ctrlreq.req.wIndex & 0xFF; + 1756: c0 91 5a 24 lds r28, 0x245A + 175a: d0 91 5b 24 lds r29, 0x245B + if (iface_num >= udc_ptr_conf->desc->bNumInterfaces) { + 175e: e0 90 bb 20 lds r14, 0x20BB + 1762: f0 90 bc 20 lds r15, 0x20BC + 1766: d7 01 movw r26, r14 + 1768: ed 91 ld r30, X+ + 176a: fc 91 ld r31, X + 176c: 84 81 ldd r24, Z+4 ; 0x04 + 176e: c8 17 cp r28, r24 + 1770: 28 f5 brcc .+74 ; 0x17bc + return false; + } + + // Select first alternate setting of the interface to update udc_ptr_iface + // before call iface->getsetting() + if (!udc_update_iface_desc(iface_num, 0)) { + 1772: 60 e0 ldi r22, 0x00 ; 0 + 1774: 8c 2f mov r24, r28 + 1776: ec dc rcall .-1576 ; 0x1150 + 1778: 08 2f mov r16, r24 + 177a: 88 23 and r24, r24 + 177c: 09 f4 brne .+2 ; 0x1780 + 177e: 2c c1 rjmp .+600 ; 0x19d8 + return false; + } + // Get alternate setting from UDI + udi_api = udc_ptr_conf->udi_apis[iface_num]; + 1780: ce 01 movw r24, r28 + 1782: 99 27 eor r25, r25 + 1784: 88 0f add r24, r24 + 1786: 99 1f adc r25, r25 + 1788: d7 01 movw r26, r14 + 178a: 12 96 adiw r26, 0x02 ; 2 + 178c: ed 91 ld r30, X+ + 178e: fc 91 ld r31, X + 1790: 13 97 sbiw r26, 0x03 ; 3 + 1792: e8 0f add r30, r24 + 1794: f9 1f adc r31, r25 + udc_iface_setting = udi_api->getsetting(); + 1796: 01 90 ld r0, Z+ + 1798: f0 81 ld r31, Z + 179a: e0 2d mov r30, r0 + 179c: 06 80 ldd r0, Z+6 ; 0x06 + 179e: f7 81 ldd r31, Z+7 ; 0x07 + 17a0: e0 2d mov r30, r0 + 17a2: 09 95 icall + 17a4: 80 93 c0 20 sts 0x20C0, r24 + + // Link value to payload pointer of request + udd_set_setup_payload(&udc_iface_setting,1); + 17a8: 61 e0 ldi r22, 0x01 ; 1 + 17aa: 70 e0 ldi r23, 0x00 ; 0 + 17ac: 80 ec ldi r24, 0xC0 ; 192 + 17ae: 90 e2 ldi r25, 0x20 ; 32 + 17b0: fd d4 rcall .+2554 ; 0x21ac + 17b2: 12 c1 rjmp .+548 ; 0x19d8 +{ + uint8_t iface_num; + udi_api_t UDC_DESC_STORAGE *udi_api; + + if (udd_g_ctrlreq.req.wLength != 1) { + return false; // Error in request + 17b4: 00 e0 ldi r16, 0x00 ; 0 + 17b6: 10 c1 rjmp .+544 ; 0x19d8 + } + if (!udc_num_configuration) { + return false; // The device is not is configured state yet + 17b8: 00 e0 ldi r16, 0x00 ; 0 + 17ba: 0e c1 rjmp .+540 ; 0x19d8 + } + + // Check the interface number included in the request + iface_num = udd_g_ctrlreq.req.wIndex & 0xFF; + if (iface_num >= udc_ptr_conf->desc->bNumInterfaces) { + return false; + 17bc: 00 e0 ldi r16, 0x00 ; 0 + 17be: 0c c1 rjmp .+536 ; 0x19d8 + default: + break; + } + } +#if (0!=USB_DEVICE_MAX_EP) + if (USB_REQ_RECIP_ENDPOINT == Udd_setup_recipient()) { + 17c0: 22 30 cpi r18, 0x02 ; 2 + 17c2: 09 f0 breq .+2 ; 0x17c6 + 17c4: 0b c1 rjmp .+534 ; 0x19dc + // Standard Get Endpoint request + switch (udd_g_ctrlreq.req.bRequest) { + 17c6: 20 91 57 24 lds r18, 0x2457 + 17ca: 21 11 cpse r18, r1 + 17cc: 00 c1 rjmp .+512 ; 0x19ce + */ +static bool udc_req_std_ep_get_status(void) +{ + static le16_t udc_ep_status; + + if (udd_g_ctrlreq.req.wLength != sizeof(udc_ep_status)) { + 17ce: 02 97 sbiw r24, 0x02 ; 2 + 17d0: 79 f4 brne .+30 ; 0x17f0 + return false; + } + + udc_ep_status = udd_ep_is_halted(udd_g_ctrlreq.req. + 17d2: 80 91 5a 24 lds r24, 0x245A + 17d6: 49 d5 rcall .+2706 ; 0x226a + 17d8: 90 e0 ldi r25, 0x00 ; 0 + 17da: 80 93 b7 20 sts 0x20B7, r24 + 17de: 90 93 b8 20 sts 0x20B8, r25 + wIndex & 0xFF) ? CPU_TO_LE16(USB_EP_STATUS_HALTED) : 0; + + udd_set_setup_payload( (uint8_t *) & udc_ep_status, + 17e2: 62 e0 ldi r22, 0x02 ; 2 + 17e4: 70 e0 ldi r23, 0x00 ; 0 + 17e6: 87 eb ldi r24, 0xB7 ; 183 + 17e8: 90 e2 ldi r25, 0x20 ; 32 + 17ea: e0 d4 rcall .+2496 ; 0x21ac + sizeof(udc_ep_status)); + return true; + 17ec: 01 e0 ldi r16, 0x01 ; 1 + 17ee: f4 c0 rjmp .+488 ; 0x19d8 +static bool udc_req_std_ep_get_status(void) +{ + static le16_t udc_ep_status; + + if (udd_g_ctrlreq.req.wLength != sizeof(udc_ep_status)) { + return false; + 17f0: 00 e0 ldi r16, 0x00 ; 0 + 17f2: f2 c0 rjmp .+484 ; 0x19d8 + } + } +#endif + } else { + // SET Standard Requests + if (USB_REQ_RECIP_DEVICE == Udd_setup_recipient()) { + 17f4: 2f 71 andi r18, 0x1F ; 31 + 17f6: 09 f0 breq .+2 ; 0x17fa + 17f8: 90 c0 rjmp .+288 ; 0x191a + // Standard Set Device request + switch (udd_g_ctrlreq.req.bRequest) { + 17fa: 80 91 57 24 lds r24, 0x2457 + 17fe: 83 30 cpi r24, 0x03 ; 3 + 1800: 09 f4 brne .+2 ; 0x1804 + 1802: e7 c0 rjmp .+462 ; 0x19d2 + 1804: 18 f4 brcc .+6 ; 0x180c + 1806: 81 30 cpi r24, 0x01 ; 1 + 1808: b1 f0 breq .+44 ; 0x1836 + 180a: 87 c0 rjmp .+270 ; 0x191a + 180c: 85 30 cpi r24, 0x05 ; 5 + 180e: 19 f0 breq .+6 ; 0x1816 + 1810: 89 30 cpi r24, 0x09 ; 9 + 1812: 61 f1 breq .+88 ; 0x186c + 1814: 82 c0 rjmp .+260 ; 0x191a + * + * \return true if success + */ +static bool udc_req_std_dev_set_address(void) +{ + if (udd_g_ctrlreq.req.wLength) { + 1816: 80 91 5c 24 lds r24, 0x245C + 181a: 90 91 5d 24 lds r25, 0x245D + 181e: 89 2b or r24, r25 + 1820: 41 f4 brne .+16 ; 0x1832 + return false; + } + + // The address must be changed at the end of setup request after the handshake + // then we use a callback to change address + udd_g_ctrlreq.callback = udc_valid_address; + 1822: 82 ea ldi r24, 0xA2 ; 162 + 1824: 98 e0 ldi r25, 0x08 ; 8 + 1826: 80 93 62 24 sts 0x2462, r24 + 182a: 90 93 63 24 sts 0x2463, r25 + return true; + 182e: 01 e0 ldi r16, 0x01 ; 1 + 1830: d3 c0 rjmp .+422 ; 0x19d8 + * \return true if success + */ +static bool udc_req_std_dev_set_address(void) +{ + if (udd_g_ctrlreq.req.wLength) { + return false; + 1832: 00 e0 ldi r16, 0x00 ; 0 + 1834: d1 c0 rjmp .+418 ; 0x19d8 + * + * \return true if success + */ +static bool udc_req_std_dev_clear_feature(void) +{ + if (udd_g_ctrlreq.req.wLength) { + 1836: 80 91 5c 24 lds r24, 0x245C + 183a: 90 91 5d 24 lds r25, 0x245D + 183e: 89 2b or r24, r25 + 1840: 89 f4 brne .+34 ; 0x1864 + return false; + } + + if (udd_g_ctrlreq.req.wValue == USB_DEV_FEATURE_REMOTE_WAKEUP) { + 1842: 80 91 58 24 lds r24, 0x2458 + 1846: 90 91 59 24 lds r25, 0x2459 + 184a: 01 97 sbiw r24, 0x01 ; 1 + 184c: 69 f4 brne .+26 ; 0x1868 + udc_device_status &= CPU_TO_LE16(~(uint32_t)USB_DEV_STATUS_REMOTEWAKEUP); + 184e: 80 91 c2 20 lds r24, 0x20C2 + 1852: 90 91 c3 20 lds r25, 0x20C3 + 1856: 8d 7f andi r24, 0xFD ; 253 + 1858: 80 93 c2 20 sts 0x20C2, r24 + 185c: 90 93 c3 20 sts 0x20C3, r25 +#if (USB_CONFIG_ATTR_REMOTE_WAKEUP \ + == (USB_DEVICE_ATTR & USB_CONFIG_ATTR_REMOTE_WAKEUP)) + UDC_REMOTEWAKEUP_DISABLE(); +#endif + return true; + 1860: 01 e0 ldi r16, 0x01 ; 1 + 1862: ba c0 rjmp .+372 ; 0x19d8 + * \return true if success + */ +static bool udc_req_std_dev_clear_feature(void) +{ + if (udd_g_ctrlreq.req.wLength) { + return false; + 1864: 00 e0 ldi r16, 0x00 ; 0 + 1866: b8 c0 rjmp .+368 ; 0x19d8 + == (USB_DEVICE_ATTR & USB_CONFIG_ATTR_REMOTE_WAKEUP)) + UDC_REMOTEWAKEUP_DISABLE(); +#endif + return true; + } + return false; + 1868: 00 e0 ldi r16, 0x00 ; 0 + 186a: b6 c0 rjmp .+364 ; 0x19d8 +static bool udc_req_std_dev_set_configuration(void) +{ + uint8_t iface_num; + + // Check request length + if (udd_g_ctrlreq.req.wLength) { + 186c: 80 91 5c 24 lds r24, 0x245C + 1870: 90 91 5d 24 lds r25, 0x245D + 1874: 89 2b or r24, r25 + 1876: 09 f0 breq .+2 ; 0x187a + 1878: 46 c0 rjmp .+140 ; 0x1906 + return false; + } + // Authorize configuration only if the address is valid + if (!udd_getaddress()) { + 187a: 95 d4 rcall .+2346 ; 0x21a6 + 187c: 88 23 and r24, r24 + 187e: 09 f4 brne .+2 ; 0x1882 + 1880: 44 c0 rjmp .+136 ; 0x190a + } + } else +#endif + { + // FS descriptor + if ((udd_g_ctrlreq.req.wValue & 0xFF) > + 1882: 20 91 58 24 lds r18, 0x2458 + 1886: 30 91 59 24 lds r19, 0x2459 + 188a: 33 27 eor r19, r19 + udc_config.confdev_lsfs->bNumConfigurations) { + 188c: e0 91 10 20 lds r30, 0x2010 + 1890: f0 91 11 20 lds r31, 0x2011 + } + } else +#endif + { + // FS descriptor + if ((udd_g_ctrlreq.req.wValue & 0xFF) > + 1894: 81 89 ldd r24, Z+17 ; 0x11 + 1896: 90 e0 ldi r25, 0x00 ; 0 + 1898: 82 17 cp r24, r18 + 189a: 93 07 cpc r25, r19 + 189c: c0 f1 brcs .+112 ; 0x190e + return false; + } + } + + // Reset current configuration + udc_reset(); + 189e: 0d dd rcall .-1510 ; 0x12ba + + // Enable new configuration + udc_num_configuration = udd_g_ctrlreq.req.wValue & 0xFF; + 18a0: 80 91 58 24 lds r24, 0x2458 + 18a4: 90 91 59 24 lds r25, 0x2459 + 18a8: 80 93 be 20 sts 0x20BE, r24 + if (udc_num_configuration == 0) { + 18ac: 88 23 and r24, r24 + 18ae: 89 f1 breq .+98 ; 0x1912 + udc_ptr_conf = &udc_config.conf_hs[udc_num_configuration - 1]; + } else +#endif + { + // FS descriptor + udc_ptr_conf = &udc_config.conf_lsfs[udc_num_configuration - 1]; + 18b0: 99 27 eor r25, r25 + 18b2: 81 50 subi r24, 0x01 ; 1 + 18b4: 90 4c sbci r25, 0xC0 ; 192 + 18b6: 88 0f add r24, r24 + 18b8: 99 1f adc r25, r25 + 18ba: 88 0f add r24, r24 + 18bc: 99 1f adc r25, r25 + 18be: e0 91 12 20 lds r30, 0x2012 + 18c2: f0 91 13 20 lds r31, 0x2013 + 18c6: e8 0f add r30, r24 + 18c8: f9 1f adc r31, r25 + 18ca: e0 93 bb 20 sts 0x20BB, r30 + 18ce: f0 93 bc 20 sts 0x20BC, r31 + } + // Enable all interfaces of the selected configuration + for (iface_num = 0; iface_num < udc_ptr_conf->desc->bNumInterfaces; + 18d2: 01 90 ld r0, Z+ + 18d4: f0 81 ld r31, Z + 18d6: e0 2d mov r30, r0 + 18d8: 84 81 ldd r24, Z+4 ; 0x04 + 18da: 88 23 and r24, r24 + 18dc: e1 f0 breq .+56 ; 0x1916 + 18de: c0 e0 ldi r28, 0x00 ; 0 + iface_num++) { + if (!udc_iface_enable(iface_num, 0)) { + 18e0: 60 e0 ldi r22, 0x00 ; 0 + 18e2: 8c 2f mov r24, r28 + 18e4: b1 dc rcall .-1694 ; 0x1248 + 18e6: 08 2f mov r16, r24 + 18e8: 88 23 and r24, r24 + 18ea: 09 f4 brne .+2 ; 0x18ee + 18ec: 75 c0 rjmp .+234 ; 0x19d8 + // FS descriptor + udc_ptr_conf = &udc_config.conf_lsfs[udc_num_configuration - 1]; + } + // Enable all interfaces of the selected configuration + for (iface_num = 0; iface_num < udc_ptr_conf->desc->bNumInterfaces; + iface_num++) { + 18ee: cf 5f subi r28, 0xFF ; 255 + { + // FS descriptor + udc_ptr_conf = &udc_config.conf_lsfs[udc_num_configuration - 1]; + } + // Enable all interfaces of the selected configuration + for (iface_num = 0; iface_num < udc_ptr_conf->desc->bNumInterfaces; + 18f0: e0 91 bb 20 lds r30, 0x20BB + 18f4: f0 91 bc 20 lds r31, 0x20BC + 18f8: 01 90 ld r0, Z+ + 18fa: f0 81 ld r31, Z + 18fc: e0 2d mov r30, r0 + 18fe: 84 81 ldd r24, Z+4 ; 0x04 + 1900: c8 17 cp r28, r24 + 1902: 70 f3 brcs .-36 ; 0x18e0 + 1904: 69 c0 rjmp .+210 ; 0x19d8 +{ + uint8_t iface_num; + + // Check request length + if (udd_g_ctrlreq.req.wLength) { + return false; + 1906: 00 e0 ldi r16, 0x00 ; 0 + 1908: 67 c0 rjmp .+206 ; 0x19d8 + } + // Authorize configuration only if the address is valid + if (!udd_getaddress()) { + return false; + 190a: 00 e0 ldi r16, 0x00 ; 0 + 190c: 65 c0 rjmp .+202 ; 0x19d8 +#endif + { + // FS descriptor + if ((udd_g_ctrlreq.req.wValue & 0xFF) > + udc_config.confdev_lsfs->bNumConfigurations) { + return false; + 190e: 00 e0 ldi r16, 0x00 ; 0 + 1910: 63 c0 rjmp .+198 ; 0x19d8 + udc_reset(); + + // Enable new configuration + udc_num_configuration = udd_g_ctrlreq.req.wValue & 0xFF; + if (udc_num_configuration == 0) { + return true; // Default empty configuration requested + 1912: 01 e0 ldi r16, 0x01 ; 1 + 1914: 61 c0 rjmp .+194 ; 0x19d8 + iface_num++) { + if (!udc_iface_enable(iface_num, 0)) { + return false; + } + } + return true; + 1916: 01 e0 ldi r16, 0x01 ; 1 + 1918: 5f c0 rjmp .+190 ; 0x19d8 + default: + break; + } + } + + if (USB_REQ_RECIP_INTERFACE == Udd_setup_recipient()) { + 191a: 21 30 cpi r18, 0x01 ; 1 + 191c: 09 f5 brne .+66 ; 0x1960 + // Standard Set Interface request + switch (udd_g_ctrlreq.req.bRequest) { + 191e: 80 91 57 24 lds r24, 0x2457 + 1922: 8b 30 cpi r24, 0x0B ; 11 + 1924: e9 f4 brne .+58 ; 0x1960 + */ +static bool udc_req_std_iface_set_setting(void) +{ + uint8_t iface_num, setting_num; + + if (udd_g_ctrlreq.req.wLength) { + 1926: 80 91 5c 24 lds r24, 0x245C + 192a: 90 91 5d 24 lds r25, 0x245D + 192e: 89 2b or r24, r25 + 1930: 99 f4 brne .+38 ; 0x1958 + return false; // Error in request + } + if (!udc_num_configuration) { + 1932: 80 91 be 20 lds r24, 0x20BE + 1936: 88 23 and r24, r24 + 1938: 89 f0 breq .+34 ; 0x195c + return false; // The device is not is configured state yet + } + + iface_num = udd_g_ctrlreq.req.wIndex & 0xFF; + 193a: c0 91 5a 24 lds r28, 0x245A + setting_num = udd_g_ctrlreq.req.wValue & 0xFF; + 193e: d0 91 58 24 lds r29, 0x2458 + + // Disable current setting + if (!udc_iface_disable(iface_num)) { + 1942: 8c 2f mov r24, r28 + 1944: 3f dc rcall .-1922 ; 0x11c4 + 1946: 08 2f mov r16, r24 + 1948: 88 23 and r24, r24 + 194a: 09 f4 brne .+2 ; 0x194e + 194c: 45 c0 rjmp .+138 ; 0x19d8 + return false; + } + + // Enable new setting + return udc_iface_enable(iface_num, setting_num); + 194e: 6d 2f mov r22, r29 + 1950: 8c 2f mov r24, r28 + 1952: 7a dc rcall .-1804 ; 0x1248 + 1954: 08 2f mov r16, r24 + 1956: 40 c0 rjmp .+128 ; 0x19d8 +static bool udc_req_std_iface_set_setting(void) +{ + uint8_t iface_num, setting_num; + + if (udd_g_ctrlreq.req.wLength) { + return false; // Error in request + 1958: 00 e0 ldi r16, 0x00 ; 0 + 195a: 3e c0 rjmp .+124 ; 0x19d8 + } + if (!udc_num_configuration) { + return false; // The device is not is configured state yet + 195c: 00 e0 ldi r16, 0x00 ; 0 + 195e: 3c c0 rjmp .+120 ; 0x19d8 + default: + break; + } + } +#if (0!=USB_DEVICE_MAX_EP) + if (USB_REQ_RECIP_ENDPOINT == Udd_setup_recipient()) { + 1960: 22 30 cpi r18, 0x02 ; 2 + 1962: 09 f0 breq .+2 ; 0x1966 + 1964: 3b c0 rjmp .+118 ; 0x19dc + // Standard Set Endpoint request + switch (udd_g_ctrlreq.req.bRequest) { + 1966: 80 91 57 24 lds r24, 0x2457 + 196a: 81 30 cpi r24, 0x01 ; 1 + 196c: 19 f0 breq .+6 ; 0x1974 + 196e: 83 30 cpi r24, 0x03 ; 3 + 1970: b1 f0 breq .+44 ; 0x199e + 1972: 31 c0 rjmp .+98 ; 0x19d6 + * + * \return true if success + */ +static bool udc_req_std_ep_clear_feature(void) +{ + if (udd_g_ctrlreq.req.wLength) { + 1974: 80 91 5c 24 lds r24, 0x245C + 1978: 90 91 5d 24 lds r25, 0x245D + 197c: 89 2b or r24, r25 + 197e: 59 f4 brne .+22 ; 0x1996 + return false; + } + + if (udd_g_ctrlreq.req.wValue == USB_EP_FEATURE_HALT) { + 1980: 80 91 58 24 lds r24, 0x2458 + 1984: 90 91 59 24 lds r25, 0x2459 + 1988: 89 2b or r24, r25 + 198a: 39 f4 brne .+14 ; 0x199a + return udd_ep_clear_halt(udd_g_ctrlreq.req.wIndex & 0xFF); + 198c: 80 91 5a 24 lds r24, 0x245A + 1990: 87 d4 rcall .+2318 ; 0x22a0 + 1992: 08 2f mov r16, r24 + 1994: 21 c0 rjmp .+66 ; 0x19d8 + * \return true if success + */ +static bool udc_req_std_ep_clear_feature(void) +{ + if (udd_g_ctrlreq.req.wLength) { + return false; + 1996: 00 e0 ldi r16, 0x00 ; 0 + 1998: 1f c0 rjmp .+62 ; 0x19d8 + } + + if (udd_g_ctrlreq.req.wValue == USB_EP_FEATURE_HALT) { + return udd_ep_clear_halt(udd_g_ctrlreq.req.wIndex & 0xFF); + } + return false; + 199a: 00 e0 ldi r16, 0x00 ; 0 + 199c: 1d c0 rjmp .+58 ; 0x19d8 + * \return true if success + */ +#if (0!=USB_DEVICE_MAX_EP) +static bool udc_req_std_ep_set_feature(void) +{ + if (udd_g_ctrlreq.req.wLength) { + 199e: 80 91 5c 24 lds r24, 0x245C + 19a2: 90 91 5d 24 lds r25, 0x245D + 19a6: 89 2b or r24, r25 + 19a8: 71 f4 brne .+28 ; 0x19c6 + return false; + } + if (udd_g_ctrlreq.req.wValue == USB_EP_FEATURE_HALT) { + 19aa: 80 91 58 24 lds r24, 0x2458 + 19ae: 90 91 59 24 lds r25, 0x2459 + 19b2: 89 2b or r24, r25 + 19b4: 51 f4 brne .+20 ; 0x19ca + udd_ep_abort(udd_g_ctrlreq.req.wIndex & 0xFF); + 19b6: ca e5 ldi r28, 0x5A ; 90 + 19b8: d4 e2 ldi r29, 0x24 ; 36 + 19ba: 88 81 ld r24, Y + 19bc: 22 d5 rcall .+2628 ; 0x2402 + return udd_ep_set_halt(udd_g_ctrlreq.req.wIndex & 0xFF); + 19be: 88 81 ld r24, Y + 19c0: 76 d5 rcall .+2796 ; 0x24ae + 19c2: 08 2f mov r16, r24 + 19c4: 09 c0 rjmp .+18 ; 0x19d8 + */ +#if (0!=USB_DEVICE_MAX_EP) +static bool udc_req_std_ep_set_feature(void) +{ + if (udd_g_ctrlreq.req.wLength) { + return false; + 19c6: 00 e0 ldi r16, 0x00 ; 0 + 19c8: 07 c0 rjmp .+14 ; 0x19d8 + } + if (udd_g_ctrlreq.req.wValue == USB_EP_FEATURE_HALT) { + udd_ep_abort(udd_g_ctrlreq.req.wIndex & 0xFF); + return udd_ep_set_halt(udd_g_ctrlreq.req.wIndex & 0xFF); + } + return false; + 19ca: 00 e0 ldi r16, 0x00 ; 0 + 19cc: 05 c0 rjmp .+10 ; 0x19d8 + break; + } + } +#endif + } + return false; + 19ce: 00 e0 ldi r16, 0x00 ; 0 + 19d0: 03 c0 rjmp .+6 ; 0x19d8 + case USB_REQ_SET_ADDRESS: + return udc_req_std_dev_set_address(); + case USB_REQ_CLEAR_FEATURE: + return udc_req_std_dev_clear_feature(); + case USB_REQ_SET_FEATURE: + return udc_req_std_dev_set_feature(); + 19d2: 00 e0 ldi r16, 0x00 ; 0 + 19d4: 01 c0 rjmp .+2 ; 0x19d8 + break; + } + } +#endif + } + return false; + 19d6: 00 e0 ldi r16, 0x00 ; 0 + } + } + + // If standard request then try to decode it in UDC + if (Udd_setup_type() == USB_REQ_TYPE_STANDARD) { + if (udc_reqstd()) { + 19d8: 01 11 cpse r16, r1 + 19da: 80 c0 rjmp .+256 ; 0x1adc + return true; + } + } + + // If interface request then try to decode it in UDI + if (Udd_setup_recipient() == USB_REQ_RECIP_INTERFACE) { + 19dc: 80 91 56 24 lds r24, 0x2456 + 19e0: 8f 71 andi r24, 0x1F ; 31 + 19e2: 81 30 cpi r24, 0x01 ; 1 + 19e4: c1 f5 brne .+112 ; 0x1a56 +static bool udc_req_iface(void) +{ + uint8_t iface_num; + udi_api_t UDC_DESC_STORAGE *udi_api; + + if (0 == udc_num_configuration) { + 19e6: 80 91 be 20 lds r24, 0x20BE + 19ea: 88 23 and r24, r24 + 19ec: a1 f1 breq .+104 ; 0x1a56 + return false; // The device is not is configured state yet + } + // Check interface number + iface_num = udd_g_ctrlreq.req.wIndex & 0xFF; + 19ee: c0 91 5a 24 lds r28, 0x245A + 19f2: d0 91 5b 24 lds r29, 0x245B + if (iface_num >= udc_ptr_conf->desc->bNumInterfaces) { + 19f6: 00 91 bb 20 lds r16, 0x20BB + 19fa: 10 91 bc 20 lds r17, 0x20BC + 19fe: d8 01 movw r26, r16 + 1a00: ed 91 ld r30, X+ + 1a02: fc 91 ld r31, X + 1a04: 84 81 ldd r24, Z+4 ; 0x04 + 1a06: c8 17 cp r28, r24 + 1a08: 30 f5 brcc .+76 ; 0x1a56 + } + + //* To update udc_ptr_iface with the selected interface in request + // Select first alternate setting of interface to update udc_ptr_iface + // before calling udi_api->getsetting() + if (!udc_update_iface_desc(iface_num, 0)) { + 1a0a: 60 e0 ldi r22, 0x00 ; 0 + 1a0c: 8c 2f mov r24, r28 + 1a0e: a0 db rcall .-2240 ; 0x1150 + 1a10: 88 23 and r24, r24 + 1a12: 09 f1 breq .+66 ; 0x1a56 + return false; + } + // Select the interface with the current alternate setting + udi_api = udc_ptr_conf->udi_apis[iface_num]; + 1a14: ce 01 movw r24, r28 + 1a16: 99 27 eor r25, r25 + 1a18: 88 0f add r24, r24 + 1a1a: 99 1f adc r25, r25 + 1a1c: d8 01 movw r26, r16 + 1a1e: 12 96 adiw r26, 0x02 ; 2 + 1a20: ed 91 ld r30, X+ + 1a22: fc 91 ld r31, X + 1a24: 13 97 sbiw r26, 0x03 ; 3 + 1a26: e8 0f add r30, r24 + 1a28: f9 1f adc r31, r25 + 1a2a: 00 81 ld r16, Z + 1a2c: 11 81 ldd r17, Z+1 ; 0x01 + if (!udc_update_iface_desc(iface_num, udi_api->getsetting())) { + 1a2e: d8 01 movw r26, r16 + 1a30: 16 96 adiw r26, 0x06 ; 6 + 1a32: ed 91 ld r30, X+ + 1a34: fc 91 ld r31, X + 1a36: 17 97 sbiw r26, 0x07 ; 7 + 1a38: 09 95 icall + 1a3a: 68 2f mov r22, r24 + 1a3c: 8c 2f mov r24, r28 + 1a3e: 88 db rcall .-2288 ; 0x1150 + 1a40: 88 23 and r24, r24 + 1a42: 49 f0 breq .+18 ; 0x1a56 + return false; + } + + // Send the SETUP request to the UDI corresponding to the interface number + return udi_api->setup(); + 1a44: d8 01 movw r26, r16 + 1a46: 14 96 adiw r26, 0x04 ; 4 + 1a48: ed 91 ld r30, X+ + 1a4a: fc 91 ld r31, X + 1a4c: 15 97 sbiw r26, 0x05 ; 5 + 1a4e: 09 95 icall + 1a50: 08 2f mov r16, r24 + } + } + + // If interface request then try to decode it in UDI + if (Udd_setup_recipient() == USB_REQ_RECIP_INTERFACE) { + if (udc_req_iface()) { + 1a52: 81 11 cpse r24, r1 + 1a54: 43 c0 rjmp .+134 ; 0x1adc + return true; + } + } + + // If endpoint request then try to decode it in UDI + if (Udd_setup_recipient() == USB_REQ_RECIP_ENDPOINT) { + 1a56: 80 91 56 24 lds r24, 0x2456 + 1a5a: 8f 71 andi r24, 0x1F ; 31 + 1a5c: 82 30 cpi r24, 0x02 ; 2 + 1a5e: d9 f5 brne .+118 ; 0x1ad6 +static bool udc_req_ep(void) +{ + uint8_t iface_num; + udi_api_t UDC_DESC_STORAGE *udi_api; + + if (0 == udc_num_configuration) { + 1a60: 80 91 be 20 lds r24, 0x20BE + 1a64: 88 23 and r24, r24 + 1a66: 89 f1 breq .+98 ; 0x1aca + return false; // The device is not is configured state yet + } + // Send this request on all enabled interfaces + iface_num = udd_g_ctrlreq.req.wIndex & 0xFF; + for (iface_num = 0; iface_num < udc_ptr_conf->desc->bNumInterfaces; + 1a68: e0 91 bb 20 lds r30, 0x20BB + 1a6c: f0 91 bc 20 lds r31, 0x20BC + 1a70: a0 81 ld r26, Z + 1a72: b1 81 ldd r27, Z+1 ; 0x01 + 1a74: 14 96 adiw r26, 0x04 ; 4 + 1a76: 8c 91 ld r24, X + 1a78: 88 23 and r24, r24 + 1a7a: 49 f1 breq .+82 ; 0x1ace + 1a7c: 10 e0 ldi r17, 0x00 ; 0 + iface_num++) { + // Select the interface with the current alternate setting + udi_api = udc_ptr_conf->udi_apis[iface_num]; + 1a7e: 21 2f mov r18, r17 + 1a80: 30 e0 ldi r19, 0x00 ; 0 + 1a82: 22 0f add r18, r18 + 1a84: 33 1f adc r19, r19 + 1a86: 02 80 ldd r0, Z+2 ; 0x02 + 1a88: f3 81 ldd r31, Z+3 ; 0x03 + 1a8a: e0 2d mov r30, r0 + 1a8c: e2 0f add r30, r18 + 1a8e: f3 1f adc r31, r19 + 1a90: c0 81 ld r28, Z + 1a92: d1 81 ldd r29, Z+1 ; 0x01 + if (!udc_update_iface_desc(iface_num, udi_api->getsetting())) { + 1a94: ee 81 ldd r30, Y+6 ; 0x06 + 1a96: ff 81 ldd r31, Y+7 ; 0x07 + 1a98: 09 95 icall + 1a9a: 68 2f mov r22, r24 + 1a9c: 81 2f mov r24, r17 + 1a9e: 58 db rcall .-2384 ; 0x1150 + 1aa0: 08 2f mov r16, r24 + 1aa2: 88 23 and r24, r24 + 1aa4: d9 f0 breq .+54 ; 0x1adc + return false; + } + + // Send the SETUP request to the UDI + if (udi_api->setup()) { + 1aa6: ec 81 ldd r30, Y+4 ; 0x04 + 1aa8: fd 81 ldd r31, Y+5 ; 0x05 + 1aaa: 09 95 icall + 1aac: 08 2f mov r16, r24 + 1aae: 81 11 cpse r24, r1 + 1ab0: 15 c0 rjmp .+42 ; 0x1adc + return false; // The device is not is configured state yet + } + // Send this request on all enabled interfaces + iface_num = udd_g_ctrlreq.req.wIndex & 0xFF; + for (iface_num = 0; iface_num < udc_ptr_conf->desc->bNumInterfaces; + iface_num++) { + 1ab2: 1f 5f subi r17, 0xFF ; 255 + if (0 == udc_num_configuration) { + return false; // The device is not is configured state yet + } + // Send this request on all enabled interfaces + iface_num = udd_g_ctrlreq.req.wIndex & 0xFF; + for (iface_num = 0; iface_num < udc_ptr_conf->desc->bNumInterfaces; + 1ab4: e0 91 bb 20 lds r30, 0x20BB + 1ab8: f0 91 bc 20 lds r31, 0x20BC + 1abc: a0 81 ld r26, Z + 1abe: b1 81 ldd r27, Z+1 ; 0x01 + 1ac0: 14 96 adiw r26, 0x04 ; 4 + 1ac2: 8c 91 ld r24, X + 1ac4: 18 17 cp r17, r24 + 1ac6: d8 f2 brcs .-74 ; 0x1a7e + 1ac8: 09 c0 rjmp .+18 ; 0x1adc +{ + uint8_t iface_num; + udi_api_t UDC_DESC_STORAGE *udi_api; + + if (0 == udc_num_configuration) { + return false; // The device is not is configured state yet + 1aca: 00 e0 ldi r16, 0x00 ; 0 + 1acc: 07 c0 rjmp .+14 ; 0x1adc + // Send the SETUP request to the UDI + if (udi_api->setup()) { + return true; + } + } + return false; + 1ace: 00 e0 ldi r16, 0x00 ; 0 + 1ad0: 05 c0 rjmp .+10 ; 0x1adc + udd_g_ctrlreq.callback = NULL; + udd_g_ctrlreq.over_under_run = NULL; + + if (Udd_setup_is_in()) { + if (udd_g_ctrlreq.req.wLength == 0) { + return false; // Error from USB host + 1ad2: 00 e0 ldi r16, 0x00 ; 0 + 1ad4: 03 c0 rjmp .+6 ; 0x1adc + // Here SETUP request unknown by UDC and UDIs +#ifdef USB_DEVICE_SPECIFIC_REQUEST + // Try to decode it in specific callback + return USB_DEVICE_SPECIFIC_REQUEST(); // Ex: Vendor request,... +#else + return false; + 1ad6: 00 e0 ldi r16, 0x00 ; 0 + 1ad8: 01 c0 rjmp .+2 ; 0x1adc + } + } + + if (Udd_setup_type() == USB_REQ_TYPE_VENDOR){ + if (udc_reqvend()) { + return true; + 1ada: 01 e0 ldi r16, 0x01 ; 1 + // Try to decode it in specific callback + return USB_DEVICE_SPECIFIC_REQUEST(); // Ex: Vendor request,... +#else + return false; +#endif +} + 1adc: 80 2f mov r24, r16 + 1ade: df 91 pop r29 + 1ae0: cf 91 pop r28 + 1ae2: 1f 91 pop r17 + 1ae4: 0f 91 pop r16 + 1ae6: ff 90 pop r15 + 1ae8: ef 90 pop r14 + 1aea: 08 95 ret + +00001aec : + 1aec: 1b be out 0x3b, r1 ; 59 + 1aee: fc 01 movw r30, r24 + 1af0: 28 ed ldi r18, 0xD8 ; 216 + 1af2: 24 bf out 0x34, r18 ; 52 + 1af4: 60 83 st Z, r22 + 1af6: 08 95 ret + +00001af8 : + 1af8: 40 91 ca 01 lds r20, 0x01CA + 1afc: e6 2f mov r30, r22 + 1afe: f7 2f mov r31, r23 + 1b00: 80 93 ca 01 sts 0x01CA, r24 + 1b04: 84 91 lpm r24, Z + 1b06: 40 93 ca 01 sts 0x01CA, r20 + 1b0a: 08 95 ret + +00001b0c : + } else { + // endpoint not halted then call directly callback + callback(); + } + return true; +} + 1b0c: 81 11 cpse r24, r1 + 1b0e: 22 c0 rjmp .+68 ; 0x1b54 + 1b10: 90 91 54 22 lds r25, 0x2254 + 1b14: 99 23 and r25, r25 + 1b16: d9 f0 breq .+54 ; 0x1b4e + 1b18: 90 91 43 2c lds r25, 0x2C43 + 1b1c: 91 11 cpse r25, r1 + 1b1e: 01 c0 rjmp .+2 ; 0x1b22 + 1b20: ff cf rjmp .-2 ; 0x1b20 + 1b22: 9f b7 in r25, 0x3f ; 63 + 1b24: f8 94 cli + 1b26: e3 e4 ldi r30, 0x43 ; 67 + 1b28: fc e2 ldi r31, 0x2C ; 44 + 1b2a: 20 81 ld r18, Z + 1b2c: 21 50 subi r18, 0x01 ; 1 + 1b2e: 20 83 st Z, r18 + 1b30: 9f bf out 0x3f, r25 ; 63 + 1b32: 0d c0 rjmp .+26 ; 0x1b4e + 1b34: 90 91 43 2c lds r25, 0x2C43 + 1b38: 9f 3f cpi r25, 0xFF ; 255 + 1b3a: 09 f4 brne .+2 ; 0x1b3e + 1b3c: ff cf rjmp .-2 ; 0x1b3c + 1b3e: 9f b7 in r25, 0x3f ; 63 + 1b40: f8 94 cli + 1b42: e3 e4 ldi r30, 0x43 ; 67 + 1b44: fc e2 ldi r31, 0x2C ; 44 + 1b46: 20 81 ld r18, Z + 1b48: 2f 5f subi r18, 0xFF ; 255 + 1b4a: 20 83 st Z, r18 + 1b4c: 9f bf out 0x3f, r25 ; 63 + 1b4e: 80 93 54 22 sts 0x2254, r24 + 1b52: 08 95 ret + 1b54: 90 91 54 22 lds r25, 0x2254 + 1b58: 99 23 and r25, r25 + 1b5a: 61 f3 breq .-40 ; 0x1b34 + 1b5c: f8 cf rjmp .-16 ; 0x1b4e + +00001b5e : + 1b5e: 0f 93 push r16 + 1b60: e8 ec ldi r30, 0xC8 ; 200 + 1b62: f4 e0 ldi r31, 0x04 ; 4 + 1b64: 80 81 ld r24, Z + 1b66: 8f 7d andi r24, 0xDF ; 223 + 1b68: 80 83 st Z, r24 + 1b6a: 80 81 ld r24, Z + 1b6c: 8f 7d andi r24, 0xDF ; 223 + 1b6e: 80 83 st Z, r24 + 1b70: e8 e1 ldi r30, 0x18 ; 24 + 1b72: f2 e2 ldi r31, 0x22 ; 34 + 1b74: 02 e0 ldi r16, 0x02 ; 2 + 1b76: 05 93 las Z, r16 + 1b78: 10 92 1a 22 sts 0x221A, r1 + 1b7c: 10 92 1b 22 sts 0x221B, r1 + 1b80: 00 e2 ldi r16, 0x20 ; 32 + 1b82: 06 93 lac Z, r16 + 1b84: 00 e4 ldi r16, 0x40 ; 64 + 1b86: 06 93 lac Z, r16 + 1b88: e0 e1 ldi r30, 0x10 ; 16 + 1b8a: f2 e2 ldi r31, 0x22 ; 34 + 1b8c: 00 e2 ldi r16, 0x20 ; 32 + 1b8e: 06 93 lac Z, r16 + 1b90: 00 e4 ldi r16, 0x40 ; 64 + 1b92: 06 93 lac Z, r16 + 1b94: 10 92 62 24 sts 0x2462, r1 + 1b98: 10 92 63 24 sts 0x2463, r1 + 1b9c: 10 92 64 24 sts 0x2464, r1 + 1ba0: 10 92 65 24 sts 0x2465, r1 + 1ba4: 10 92 60 24 sts 0x2460, r1 + 1ba8: 10 92 61 24 sts 0x2461, r1 + 1bac: 10 92 ff 21 sts 0x21FF, r1 + 1bb0: 0f 91 pop r16 + 1bb2: 08 95 ret + +00001bb4 : + 1bb4: 0f 93 push r16 + 1bb6: 85 e0 ldi r24, 0x05 ; 5 + 1bb8: 80 93 ff 21 sts 0x21FF, r24 + 1bbc: e9 e1 ldi r30, 0x19 ; 25 + 1bbe: f2 e2 ldi r31, 0x22 ; 34 + 1bc0: 04 e0 ldi r16, 0x04 ; 4 + 1bc2: 05 93 las Z, r16 + 1bc4: e1 e1 ldi r30, 0x11 ; 17 + 1bc6: f2 e2 ldi r31, 0x22 ; 34 + 1bc8: 04 e0 ldi r16, 0x04 ; 4 + 1bca: 05 93 las Z, r16 + 1bcc: 0f 91 pop r16 + 1bce: 08 95 ret + +00001bd0 : + 1bd0: 0f 93 push r16 + 1bd2: 83 e0 ldi r24, 0x03 ; 3 + 1bd4: 80 93 ff 21 sts 0x21FF, r24 + 1bd8: 10 92 1a 22 sts 0x221A, r1 + 1bdc: 10 92 1b 22 sts 0x221B, r1 + 1be0: e8 e1 ldi r30, 0x18 ; 24 + 1be2: f2 e2 ldi r31, 0x22 ; 34 + 1be4: 02 e0 ldi r16, 0x02 ; 2 + 1be6: 06 93 lac Z, r16 + 1be8: 0f 91 pop r16 + 1bea: 08 95 ret + +00001bec : + 1bec: e0 91 62 24 lds r30, 0x2462 + 1bf0: f0 91 63 24 lds r31, 0x2463 + 1bf4: 30 97 sbiw r30, 0x00 ; 0 + 1bf6: 09 f0 breq .+2 ; 0x1bfa + 1bf8: 09 95 icall + 1bfa: 08 95 ret + +00001bfc : + 1bfc: 0f 93 push r16 + 1bfe: cf 93 push r28 + 1c00: df 93 push r29 + 1c02: 80 91 ff 21 lds r24, 0x21FF + 1c06: 83 30 cpi r24, 0x03 ; 3 + 1c08: 19 f4 brne .+6 ; 0x1c10 + 1c0a: f0 df rcall .-32 ; 0x1bec + 1c0c: a8 df rcall .-176 ; 0x1b5e + 1c0e: 60 c0 rjmp .+192 ; 0x1cd0 + 1c10: 80 91 fb 21 lds r24, 0x21FB + 1c14: 90 91 fc 21 lds r25, 0x21FC + 1c18: c0 91 60 24 lds r28, 0x2460 + 1c1c: d0 91 61 24 lds r29, 0x2461 + 1c20: c8 1b sub r28, r24 + 1c22: d9 0b sbc r29, r25 + 1c24: 71 f5 brne .+92 ; 0x1c82 + 1c26: 20 91 fd 21 lds r18, 0x21FD + 1c2a: 30 91 fe 21 lds r19, 0x21FE + 1c2e: 82 0f add r24, r18 + 1c30: 93 1f adc r25, r19 + 1c32: 80 93 fd 21 sts 0x21FD, r24 + 1c36: 90 93 fe 21 sts 0x21FE, r25 + 1c3a: 20 91 5c 24 lds r18, 0x245C + 1c3e: 30 91 5d 24 lds r19, 0x245D + 1c42: 82 17 cp r24, r18 + 1c44: 93 07 cpc r25, r19 + 1c46: 21 f0 breq .+8 ; 0x1c50 + 1c48: 80 91 c4 20 lds r24, 0x20C4 + 1c4c: 88 23 and r24, r24 + 1c4e: 41 f0 breq .+16 ; 0x1c60 + 1c50: 84 e0 ldi r24, 0x04 ; 4 + 1c52: 80 93 ff 21 sts 0x21FF, r24 + 1c56: e0 e1 ldi r30, 0x10 ; 16 + 1c58: f2 e2 ldi r31, 0x22 ; 34 + 1c5a: 02 e0 ldi r16, 0x02 ; 2 + 1c5c: 06 93 lac Z, r16 + 1c5e: 38 c0 rjmp .+112 ; 0x1cd0 + 1c60: e0 91 64 24 lds r30, 0x2464 + 1c64: f0 91 65 24 lds r31, 0x2465 + 1c68: 30 97 sbiw r30, 0x00 ; 0 + 1c6a: 99 f0 breq .+38 ; 0x1c92 + 1c6c: 09 95 icall + 1c6e: 88 23 and r24, r24 + 1c70: 81 f0 breq .+32 ; 0x1c92 + 1c72: 10 92 fb 21 sts 0x21FB, r1 + 1c76: 10 92 fc 21 sts 0x21FC, r1 + 1c7a: c0 91 60 24 lds r28, 0x2460 + 1c7e: d0 91 61 24 lds r29, 0x2461 + 1c82: c0 34 cpi r28, 0x40 ; 64 + 1c84: d1 05 cpc r29, r1 + 1c86: 28 f0 brcs .+10 ; 0x1c92 + 1c88: 10 92 c4 20 sts 0x20C4, r1 + 1c8c: c0 e4 ldi r28, 0x40 ; 64 + 1c8e: d0 e0 ldi r29, 0x00 ; 0 + 1c90: 03 c0 rjmp .+6 ; 0x1c98 + 1c92: 81 e0 ldi r24, 0x01 ; 1 + 1c94: 80 93 c4 20 sts 0x20C4, r24 + 1c98: c0 93 1a 22 sts 0x221A, r28 + 1c9c: d0 93 1b 22 sts 0x221B, r29 + 1ca0: 80 91 fb 21 lds r24, 0x21FB + 1ca4: 90 91 fc 21 lds r25, 0x21FC + 1ca8: 20 91 5e 24 lds r18, 0x245E + 1cac: 30 91 5f 24 lds r19, 0x245F + 1cb0: 28 0f add r18, r24 + 1cb2: 39 1f adc r19, r25 + 1cb4: 20 93 1c 22 sts 0x221C, r18 + 1cb8: 30 93 1d 22 sts 0x221D, r19 + 1cbc: c8 0f add r28, r24 + 1cbe: d9 1f adc r29, r25 + 1cc0: c0 93 fb 21 sts 0x21FB, r28 + 1cc4: d0 93 fc 21 sts 0x21FC, r29 + 1cc8: e8 e1 ldi r30, 0x18 ; 24 + 1cca: f2 e2 ldi r31, 0x22 ; 34 + 1ccc: 02 e0 ldi r16, 0x02 ; 2 + 1cce: 06 93 lac Z, r16 + 1cd0: df 91 pop r29 + 1cd2: cf 91 pop r28 + 1cd4: 0f 91 pop r16 + 1cd6: 08 95 ret + +00001cd8 : + 1cd8: fc 01 movw r30, r24 + 1cda: 81 81 ldd r24, Z+1 ; 0x01 + 1cdc: 87 70 andi r24, 0x07 ; 7 + 1cde: 90 e0 ldi r25, 0x00 ; 0 + 1ce0: fc 01 movw r30, r24 + 1ce2: 31 97 sbiw r30, 0x01 ; 1 + 1ce4: e7 30 cpi r30, 0x07 ; 7 + 1ce6: f1 05 cpc r31, r1 + 1ce8: 18 f4 brcc .+6 ; 0x1cf0 + 1cea: ea 5d subi r30, 0xDA ; 218 + 1cec: fe 4f sbci r31, 0xFE ; 254 + 1cee: bd c5 rjmp .+2938 ; 0x286a <__tablejump2__> + 1cf0: 88 e0 ldi r24, 0x08 ; 8 + 1cf2: 90 e0 ldi r25, 0x00 ; 0 + 1cf4: 08 95 ret + 1cf6: 80 e2 ldi r24, 0x20 ; 32 + 1cf8: 90 e0 ldi r25, 0x00 ; 0 + 1cfa: 08 95 ret + 1cfc: 80 e4 ldi r24, 0x40 ; 64 + 1cfe: 90 e0 ldi r25, 0x00 ; 0 + 1d00: 08 95 ret + 1d02: 80 e8 ldi r24, 0x80 ; 128 + 1d04: 90 e0 ldi r25, 0x00 ; 0 + 1d06: 08 95 ret + 1d08: 80 e0 ldi r24, 0x00 ; 0 + 1d0a: 91 e0 ldi r25, 0x01 ; 1 + 1d0c: 08 95 ret + 1d0e: 80 e0 ldi r24, 0x00 ; 0 + 1d10: 92 e0 ldi r25, 0x02 ; 2 + 1d12: 08 95 ret + 1d14: 8f ef ldi r24, 0xFF ; 255 + 1d16: 93 e0 ldi r25, 0x03 ; 3 + 1d18: 08 95 ret + 1d1a: 80 e1 ldi r24, 0x10 ; 16 + 1d1c: 90 e0 ldi r25, 0x00 ; 0 + 1d1e: 08 95 ret + +00001d20 : + 1d20: 28 2f mov r18, r24 + 1d22: 2f 70 andi r18, 0x0F ; 15 + 1d24: 30 e0 ldi r19, 0x00 ; 0 + 1d26: 22 0f add r18, r18 + 1d28: 33 1f adc r19, r19 + 1d2a: 99 27 eor r25, r25 + 1d2c: 87 fd sbrc r24, 7 + 1d2e: 90 95 com r25 + 1d30: 88 27 eor r24, r24 + 1d32: 99 0f add r25, r25 + 1d34: 88 1f adc r24, r24 + 1d36: 99 27 eor r25, r25 + 1d38: 82 0f add r24, r18 + 1d3a: 93 1f adc r25, r19 + 1d3c: 02 97 sbiw r24, 0x02 ; 2 + 1d3e: 9c 01 movw r18, r24 + 1d40: 22 0f add r18, r18 + 1d42: 33 1f adc r19, r19 + 1d44: 22 0f add r18, r18 + 1d46: 33 1f adc r19, r19 + 1d48: 22 0f add r18, r18 + 1d4a: 33 1f adc r19, r19 + 1d4c: 82 0f add r24, r18 + 1d4e: 93 1f adc r25, r19 + 1d50: 8b 57 subi r24, 0x7B ; 123 + 1d52: 9e 4d sbci r25, 0xDE ; 222 + 1d54: 08 95 ret + +00001d56 : + 1d56: 0f 93 push r16 + 1d58: cf 93 push r28 + 1d5a: 80 91 cc 04 lds r24, 0x04CC + 1d5e: 80 ff sbrs r24, 0 + 1d60: 62 c0 rjmp .+196 ; 0x1e26 + 1d62: 81 e0 ldi r24, 0x01 ; 1 + 1d64: 80 93 cc 04 sts 0x04CC, r24 + 1d68: e0 e1 ldi r30, 0x10 ; 16 + 1d6a: f2 e2 ldi r31, 0x22 ; 34 + 1d6c: 00 e8 ldi r16, 0x80 ; 128 + 1d6e: 06 93 lac Z, r16 + 1d70: e8 e1 ldi r30, 0x18 ; 24 + 1d72: f2 e2 ldi r31, 0x22 ; 34 + 1d74: 00 e8 ldi r16, 0x80 ; 128 + 1d76: 06 93 lac Z, r16 + 1d78: 80 93 ca 04 sts 0x04CA, r24 + 1d7c: e0 e1 ldi r30, 0x10 ; 16 + 1d7e: f2 e2 ldi r31, 0x22 ; 34 + 1d80: 00 e1 ldi r16, 0x10 ; 16 + 1d82: 06 93 lac Z, r16 + 1d84: 80 91 ff 21 lds r24, 0x21FF + 1d88: 88 23 and r24, r24 + 1d8a: 29 f0 breq .+10 ; 0x1d96 + 1d8c: 83 50 subi r24, 0x03 ; 3 + 1d8e: 82 30 cpi r24, 0x02 ; 2 + 1d90: 08 f4 brcc .+2 ; 0x1d94 + 1d92: 2c df rcall .-424 ; 0x1bec + 1d94: e4 de rcall .-568 ; 0x1b5e + 1d96: 80 91 12 22 lds r24, 0x2212 + 1d9a: 90 91 13 22 lds r25, 0x2213 + 1d9e: 08 97 sbiw r24, 0x08 ; 8 + 1da0: 09 f0 breq .+2 ; 0x1da4 + 1da2: 43 c0 rjmp .+134 ; 0x1e2a + 1da4: 88 e0 ldi r24, 0x08 ; 8 + 1da6: eb eb ldi r30, 0xBB ; 187 + 1da8: f1 e2 ldi r31, 0x21 ; 33 + 1daa: a6 e5 ldi r26, 0x56 ; 86 + 1dac: b4 e2 ldi r27, 0x24 ; 36 + 1dae: 01 90 ld r0, Z+ + 1db0: 0d 92 st X+, r0 + 1db2: 8a 95 dec r24 + 1db4: e1 f7 brne .-8 ; 0x1dae + 1db6: e8 ec ldi r30, 0xC8 ; 200 + 1db8: f4 e0 ldi r31, 0x04 ; 4 + 1dba: 80 81 ld r24, Z + 1dbc: 80 62 ori r24, 0x20 ; 32 + 1dbe: 80 83 st Z, r24 + 1dc0: 80 81 ld r24, Z + 1dc2: 80 62 ori r24, 0x20 ; 32 + 1dc4: 80 83 st Z, r24 + 1dc6: cd da rcall .-2662 ; 0x1362 + 1dc8: c8 2f mov r28, r24 + 1dca: 81 11 cpse r24, r1 + 1dcc: 03 c0 rjmp .+6 ; 0x1dd4 + 1dce: f2 de rcall .-540 ; 0x1bb4 + 1dd0: c1 e0 ldi r28, 0x01 ; 1 + 1dd2: 2c c0 rjmp .+88 ; 0x1e2c + 1dd4: 80 91 56 24 lds r24, 0x2456 + 1dd8: 88 23 and r24, r24 + 1dda: 6c f4 brge .+26 ; 0x1df6 + 1ddc: 10 92 fd 21 sts 0x21FD, r1 + 1de0: 10 92 fe 21 sts 0x21FE, r1 + 1de4: 10 92 fb 21 sts 0x21FB, r1 + 1de8: 10 92 fc 21 sts 0x21FC, r1 + 1dec: 82 e0 ldi r24, 0x02 ; 2 + 1dee: 80 93 ff 21 sts 0x21FF, r24 + 1df2: 04 df rcall .-504 ; 0x1bfc + 1df4: 1b c0 rjmp .+54 ; 0x1e2c + 1df6: 20 91 5c 24 lds r18, 0x245C + 1dfa: 30 91 5d 24 lds r19, 0x245D + 1dfe: 23 2b or r18, r19 + 1e00: 11 f4 brne .+4 ; 0x1e06 + 1e02: e6 de rcall .-564 ; 0x1bd0 + 1e04: 13 c0 rjmp .+38 ; 0x1e2c + 1e06: 10 92 fd 21 sts 0x21FD, r1 + 1e0a: 10 92 fe 21 sts 0x21FE, r1 + 1e0e: 10 92 fb 21 sts 0x21FB, r1 + 1e12: 10 92 fc 21 sts 0x21FC, r1 + 1e16: 81 e0 ldi r24, 0x01 ; 1 + 1e18: 80 93 ff 21 sts 0x21FF, r24 + 1e1c: e0 e1 ldi r30, 0x10 ; 16 + 1e1e: f2 e2 ldi r31, 0x22 ; 34 + 1e20: 02 e0 ldi r16, 0x02 ; 2 + 1e22: 06 93 lac Z, r16 + 1e24: 03 c0 rjmp .+6 ; 0x1e2c + 1e26: c0 e0 ldi r28, 0x00 ; 0 + 1e28: 01 c0 rjmp .+2 ; 0x1e2c + 1e2a: c1 e0 ldi r28, 0x01 ; 1 + 1e2c: 8c 2f mov r24, r28 + 1e2e: cf 91 pop r28 + 1e30: 0f 91 pop r16 + 1e32: 08 95 ret + +00001e34 : + 1e34: bf 92 push r11 + 1e36: cf 92 push r12 + 1e38: df 92 push r13 + 1e3a: ef 92 push r14 + 1e3c: ff 92 push r15 + 1e3e: 0f 93 push r16 + 1e40: 1f 93 push r17 + 1e42: cf 93 push r28 + 1e44: df 93 push r29 + 1e46: b8 2e mov r11, r24 + 1e48: 6b df rcall .-298 ; 0x1d20 + 1e4a: ec 01 movw r28, r24 + 1e4c: 1b 2d mov r17, r11 + 1e4e: 11 1f adc r17, r17 + 1e50: 11 27 eor r17, r17 + 1e52: 11 1f adc r17, r17 + 1e54: 8b 2d mov r24, r11 + 1e56: 8f 70 andi r24, 0x0F ; 15 + 1e58: e8 2e mov r14, r24 + 1e5a: f1 2c mov r15, r1 + 1e5c: ee 0c add r14, r14 + 1e5e: ff 1c adc r15, r15 + 1e60: e1 0e add r14, r17 + 1e62: f1 1c adc r15, r1 + 1e64: c7 01 movw r24, r14 + 1e66: 88 0f add r24, r24 + 1e68: 99 1f adc r25, r25 + 1e6a: 88 0f add r24, r24 + 1e6c: 99 1f adc r25, r25 + 1e6e: 88 0f add r24, r24 + 1e70: 99 1f adc r25, r25 + 1e72: 9c 01 movw r18, r24 + 1e74: 20 5f subi r18, 0xF0 ; 240 + 1e76: 3d 4d sbci r19, 0xDD ; 221 + 1e78: 79 01 movw r14, r18 + 1e7a: c9 01 movw r24, r18 + 1e7c: 2d df rcall .-422 ; 0x1cd8 + 1e7e: 6c 01 movw r12, r24 + 1e80: 11 23 and r17, r17 + 1e82: 09 f4 brne .+2 ; 0x1e86 + 1e84: 59 c0 rjmp .+178 ; 0x1f38 + 1e86: d7 01 movw r26, r14 + 1e88: 16 96 adiw r26, 0x06 ; 6 + 1e8a: 2d 91 ld r18, X+ + 1e8c: 3c 91 ld r19, X + 1e8e: 17 97 sbiw r26, 0x07 ; 7 + 1e90: 8d 81 ldd r24, Y+5 ; 0x05 + 1e92: 9e 81 ldd r25, Y+6 ; 0x06 + 1e94: 28 0f add r18, r24 + 1e96: 39 1f adc r19, r25 + 1e98: 2d 83 std Y+5, r18 ; 0x05 + 1e9a: 3e 83 std Y+6, r19 ; 0x06 + 1e9c: 8b 81 ldd r24, Y+3 ; 0x03 + 1e9e: 9c 81 ldd r25, Y+4 ; 0x04 + 1ea0: 28 17 cp r18, r24 + 1ea2: 39 07 cpc r19, r25 + 1ea4: b9 f1 breq .+110 ; 0x1f14 + 1ea6: fc 01 movw r30, r24 + 1ea8: e2 1b sub r30, r18 + 1eaa: f3 0b sbc r31, r19 + 1eac: 9f 01 movw r18, r30 + 1eae: 21 15 cp r18, r1 + 1eb0: f4 e0 ldi r31, 0x04 ; 4 + 1eb2: 3f 07 cpc r19, r31 + 1eb4: 38 f0 brcs .+14 ; 0x1ec4 + 1eb6: 2f ef ldi r18, 0xFF ; 255 + 1eb8: 33 e0 ldi r19, 0x03 ; 3 + 1eba: c9 01 movw r24, r18 + 1ebc: b6 01 movw r22, r12 + 1ebe: c1 d4 rcall .+2434 ; 0x2842 <__udivmodhi4> + 1ec0: 28 1b sub r18, r24 + 1ec2: 39 0b sbc r19, r25 + 1ec4: 88 81 ld r24, Y + 1ec6: 81 ff sbrs r24, 1 + 1ec8: 09 c0 rjmp .+18 ; 0x1edc + 1eca: c9 01 movw r24, r18 + 1ecc: b6 01 movw r22, r12 + 1ece: b9 d4 rcall .+2418 ; 0x2842 <__udivmodhi4> + 1ed0: 41 e0 ldi r20, 0x01 ; 1 + 1ed2: 89 2b or r24, r25 + 1ed4: 09 f0 breq .+2 ; 0x1ed8 + 1ed6: 40 e0 ldi r20, 0x00 ; 0 + 1ed8: 94 2f mov r25, r20 + 1eda: 01 c0 rjmp .+2 ; 0x1ede + 1edc: 90 e0 ldi r25, 0x00 ; 0 + 1ede: 88 81 ld r24, Y + 1ee0: 90 fb bst r25, 0 + 1ee2: 81 f9 bld r24, 1 + 1ee4: 88 83 st Y, r24 + 1ee6: d7 01 movw r26, r14 + 1ee8: 16 96 adiw r26, 0x06 ; 6 + 1eea: 1d 92 st X+, r1 + 1eec: 1c 92 st X, r1 + 1eee: 17 97 sbiw r26, 0x07 ; 7 + 1ef0: 12 96 adiw r26, 0x02 ; 2 + 1ef2: 2d 93 st X+, r18 + 1ef4: 3c 93 st X, r19 + 1ef6: 13 97 sbiw r26, 0x03 ; 3 + 1ef8: 29 81 ldd r18, Y+1 ; 0x01 + 1efa: 3a 81 ldd r19, Y+2 ; 0x02 + 1efc: 8d 81 ldd r24, Y+5 ; 0x05 + 1efe: 9e 81 ldd r25, Y+6 ; 0x06 + 1f00: 82 0f add r24, r18 + 1f02: 93 1f adc r25, r19 + 1f04: 14 96 adiw r26, 0x04 ; 4 + 1f06: 8d 93 st X+, r24 + 1f08: 9c 93 st X, r25 + 1f0a: 15 97 sbiw r26, 0x05 ; 5 + 1f0c: f7 01 movw r30, r14 + 1f0e: 02 e0 ldi r16, 0x02 ; 2 + 1f10: 06 93 lac Z, r16 + 1f12: 94 c0 rjmp .+296 ; 0x203c + 1f14: 88 81 ld r24, Y + 1f16: 81 ff sbrs r24, 1 + 1f18: 83 c0 rjmp .+262 ; 0x2020 + 1f1a: 8d 7f andi r24, 0xFD ; 253 + 1f1c: 88 83 st Y, r24 + 1f1e: d7 01 movw r26, r14 + 1f20: 16 96 adiw r26, 0x06 ; 6 + 1f22: 1d 92 st X+, r1 + 1f24: 1c 92 st X, r1 + 1f26: 17 97 sbiw r26, 0x07 ; 7 + 1f28: 12 96 adiw r26, 0x02 ; 2 + 1f2a: 1d 92 st X+, r1 + 1f2c: 1c 92 st X, r1 + 1f2e: 13 97 sbiw r26, 0x03 ; 3 + 1f30: f7 01 movw r30, r14 + 1f32: 02 e0 ldi r16, 0x02 ; 2 + 1f34: 06 93 lac Z, r16 + 1f36: 82 c0 rjmp .+260 ; 0x203c + 1f38: d7 01 movw r26, r14 + 1f3a: 12 96 adiw r26, 0x02 ; 2 + 1f3c: 0d 91 ld r16, X+ + 1f3e: 1c 91 ld r17, X + 1f40: 13 97 sbiw r26, 0x03 ; 3 + 1f42: 88 81 ld r24, Y + 1f44: 82 ff sbrs r24, 2 + 1f46: 13 c0 rjmp .+38 ; 0x1f6e + 1f48: e9 81 ldd r30, Y+1 ; 0x01 + 1f4a: fa 81 ldd r31, Y+2 ; 0x02 + 1f4c: 2d 81 ldd r18, Y+5 ; 0x05 + 1f4e: 3e 81 ldd r19, Y+6 ; 0x06 + 1f50: 8b 81 ldd r24, Y+3 ; 0x03 + 1f52: 9c 81 ldd r25, Y+4 ; 0x04 + 1f54: b6 01 movw r22, r12 + 1f56: 75 d4 rcall .+2282 ; 0x2842 <__udivmodhi4> + 1f58: b0 e4 ldi r27, 0x40 ; 64 + 1f5a: bb 9e mul r11, r27 + 1f5c: b0 01 movw r22, r0 + 1f5e: 11 24 eor r1, r1 + 1f60: 6b 57 subi r22, 0x7B ; 123 + 1f62: 7f 4d sbci r23, 0xDF ; 223 + 1f64: ac 01 movw r20, r24 + 1f66: cf 01 movw r24, r30 + 1f68: 82 0f add r24, r18 + 1f6a: 93 1f adc r25, r19 + 1f6c: 84 d4 rcall .+2312 ; 0x2876 + 1f6e: 2d 81 ldd r18, Y+5 ; 0x05 + 1f70: 3e 81 ldd r19, Y+6 ; 0x06 + 1f72: 20 0f add r18, r16 + 1f74: 31 1f adc r19, r17 + 1f76: 2d 83 std Y+5, r18 ; 0x05 + 1f78: 3e 83 std Y+6, r19 ; 0x06 + 1f7a: eb 81 ldd r30, Y+3 ; 0x03 + 1f7c: fc 81 ldd r31, Y+4 ; 0x04 + 1f7e: e2 17 cp r30, r18 + 1f80: f3 07 cpc r31, r19 + 1f82: 10 f4 brcc .+4 ; 0x1f88 + 1f84: ed 83 std Y+5, r30 ; 0x05 + 1f86: fe 83 std Y+6, r31 ; 0x06 + 1f88: d7 01 movw r26, r14 + 1f8a: 16 96 adiw r26, 0x06 ; 6 + 1f8c: 8d 91 ld r24, X+ + 1f8e: 9c 91 ld r25, X + 1f90: 17 97 sbiw r26, 0x07 ; 7 + 1f92: 80 17 cp r24, r16 + 1f94: 91 07 cpc r25, r17 + 1f96: 09 f0 breq .+2 ; 0x1f9a + 1f98: 43 c0 rjmp .+134 ; 0x2020 + 1f9a: 8d 81 ldd r24, Y+5 ; 0x05 + 1f9c: 9e 81 ldd r25, Y+6 ; 0x06 + 1f9e: e8 17 cp r30, r24 + 1fa0: f9 07 cpc r31, r25 + 1fa2: 09 f4 brne .+2 ; 0x1fa6 + 1fa4: 3d c0 rjmp .+122 ; 0x2020 + 1fa6: e8 1b sub r30, r24 + 1fa8: f9 0b sbc r31, r25 + 1faa: e1 15 cp r30, r1 + 1fac: b4 e0 ldi r27, 0x04 ; 4 + 1fae: fb 07 cpc r31, r27 + 1fb0: 40 f0 brcs .+16 ; 0x1fc2 + 1fb2: ef ef ldi r30, 0xFF ; 255 + 1fb4: f3 e0 ldi r31, 0x03 ; 3 + 1fb6: cf 01 movw r24, r30 + 1fb8: b6 01 movw r22, r12 + 1fba: 43 d4 rcall .+2182 ; 0x2842 <__udivmodhi4> + 1fbc: e8 1b sub r30, r24 + 1fbe: f9 0b sbc r31, r25 + 1fc0: 05 c0 rjmp .+10 ; 0x1fcc + 1fc2: cf 01 movw r24, r30 + 1fc4: b6 01 movw r22, r12 + 1fc6: 3d d4 rcall .+2170 ; 0x2842 <__udivmodhi4> + 1fc8: e8 1b sub r30, r24 + 1fca: f9 0b sbc r31, r25 + 1fcc: d7 01 movw r26, r14 + 1fce: 12 96 adiw r26, 0x02 ; 2 + 1fd0: 1d 92 st X+, r1 + 1fd2: 1c 92 st X, r1 + 1fd4: 13 97 sbiw r26, 0x03 ; 3 + 1fd6: ec 15 cp r30, r12 + 1fd8: fd 05 cpc r31, r13 + 1fda: 78 f4 brcc .+30 ; 0x1ffa + 1fdc: 88 81 ld r24, Y + 1fde: 84 60 ori r24, 0x04 ; 4 + 1fe0: 88 83 st Y, r24 + 1fe2: b0 e4 ldi r27, 0x40 ; 64 + 1fe4: bb 9e mul r11, r27 + 1fe6: c0 01 movw r24, r0 + 1fe8: 11 24 eor r1, r1 + 1fea: 8b 57 subi r24, 0x7B ; 123 + 1fec: 9f 4d sbci r25, 0xDF ; 223 + 1fee: f7 01 movw r30, r14 + 1ff0: 84 83 std Z+4, r24 ; 0x04 + 1ff2: 95 83 std Z+5, r25 ; 0x05 + 1ff4: c6 82 std Z+6, r12 ; 0x06 + 1ff6: d7 82 std Z+7, r13 ; 0x07 + 1ff8: 0f c0 rjmp .+30 ; 0x2018 + 1ffa: 29 81 ldd r18, Y+1 ; 0x01 + 1ffc: 3a 81 ldd r19, Y+2 ; 0x02 + 1ffe: 8d 81 ldd r24, Y+5 ; 0x05 + 2000: 9e 81 ldd r25, Y+6 ; 0x06 + 2002: 82 0f add r24, r18 + 2004: 93 1f adc r25, r19 + 2006: d7 01 movw r26, r14 + 2008: 14 96 adiw r26, 0x04 ; 4 + 200a: 8d 93 st X+, r24 + 200c: 9c 93 st X, r25 + 200e: 15 97 sbiw r26, 0x05 ; 5 + 2010: 16 96 adiw r26, 0x06 ; 6 + 2012: ed 93 st X+, r30 + 2014: fc 93 st X, r31 + 2016: 17 97 sbiw r26, 0x07 ; 7 + 2018: f7 01 movw r30, r14 + 201a: 02 e0 ldi r16, 0x02 ; 2 + 201c: 06 93 lac Z, r16 + 201e: 0e c0 rjmp .+28 ; 0x203c + 2020: 88 81 ld r24, Y + 2022: 80 ff sbrs r24, 0 + 2024: 0b c0 rjmp .+22 ; 0x203c + 2026: 8e 7f andi r24, 0xFE ; 254 + 2028: 88 83 st Y, r24 + 202a: ef 81 ldd r30, Y+7 ; 0x07 + 202c: f8 85 ldd r31, Y+8 ; 0x08 + 202e: 30 97 sbiw r30, 0x00 ; 0 + 2030: 29 f0 breq .+10 ; 0x203c + 2032: 6d 81 ldd r22, Y+5 ; 0x05 + 2034: 7e 81 ldd r23, Y+6 ; 0x06 + 2036: 4b 2d mov r20, r11 + 2038: 80 e0 ldi r24, 0x00 ; 0 + 203a: 09 95 icall + 203c: df 91 pop r29 + 203e: cf 91 pop r28 + 2040: 1f 91 pop r17 + 2042: 0f 91 pop r16 + 2044: ff 90 pop r15 + 2046: ef 90 pop r14 + 2048: df 90 pop r13 + 204a: cf 90 pop r12 + 204c: bf 90 pop r11 + 204e: 08 95 ret + +00002050 : + 2050: cf 93 push r28 + 2052: cf b7 in r28, 0x3f ; 63 + 2054: f8 94 cli + 2056: 81 e0 ldi r24, 0x01 ; 1 + 2058: 59 dd rcall .-1358 ; 0x1b0c + 205a: ea ec ldi r30, 0xCA ; 202 + 205c: f4 e0 ldi r31, 0x04 ; 4 + 205e: 80 e4 ldi r24, 0x40 ; 64 + 2060: 80 83 st Z, r24 + 2062: 80 e2 ldi r24, 0x20 ; 32 + 2064: 80 83 st Z, r24 + 2066: e1 ec ldi r30, 0xC1 ; 193 + 2068: f4 e0 ldi r31, 0x04 ; 4 + 206a: 80 81 ld r24, Z + 206c: 81 60 ori r24, 0x01 ; 1 + 206e: 80 83 st Z, r24 + 2070: a9 ec ldi r26, 0xC9 ; 201 + 2072: b4 e0 ldi r27, 0x04 ; 4 + 2074: 8c 91 ld r24, X + 2076: 82 60 ori r24, 0x02 ; 2 + 2078: 8c 93 st X, r24 + 207a: e8 ec ldi r30, 0xC8 ; 200 + 207c: f4 e0 ldi r31, 0x04 ; 4 + 207e: 80 81 ld r24, Z + 2080: 80 64 ori r24, 0x40 ; 64 + 2082: 80 83 st Z, r24 + 2084: 8c 91 ld r24, X + 2086: 81 60 ori r24, 0x01 ; 1 + 2088: 8c 93 st X, r24 + 208a: 80 81 ld r24, Z + 208c: 80 68 ori r24, 0x80 ; 128 + 208e: 80 83 st Z, r24 + 2090: cf bf out 0x3f, r28 ; 63 + 2092: cf 91 pop r28 + 2094: 08 95 ret + +00002096 : + 2096: cf 93 push r28 + 2098: df 93 push r29 + 209a: c0 e6 ldi r28, 0x60 ; 96 + 209c: d0 e0 ldi r29, 0x00 ; 0 + 209e: 18 82 st Y, r1 + 20a0: 80 e3 ldi r24, 0x30 ; 48 + 20a2: 0e 94 f1 07 call 0xfe2 ; 0xfe2 + 20a6: e0 ec ldi r30, 0xC0 ; 192 + 20a8: f4 e0 ldi r31, 0x04 ; 4 + 20aa: 80 81 ld r24, Z + 20ac: 80 64 ori r24, 0x40 ; 64 + 20ae: 80 83 st Z, r24 + 20b0: 81 e0 ldi r24, 0x01 ; 1 + 20b2: 88 83 st Y, r24 + 20b4: cf b7 in r28, 0x3f ; 63 + 20b6: f8 94 cli + 20b8: 80 e0 ldi r24, 0x00 ; 0 + 20ba: 90 e0 ldi r25, 0x00 ; 0 + 20bc: fc 01 movw r30, r24 + 20be: ee 0f add r30, r30 + 20c0: ff 1f adc r31, r31 + 20c2: ee 0f add r30, r30 + 20c4: ff 1f adc r31, r31 + 20c6: ee 0f add r30, r30 + 20c8: ff 1f adc r31, r31 + 20ca: ef 5e subi r30, 0xEF ; 239 + 20cc: fd 4d sbci r31, 0xDD ; 221 + 20ce: 10 82 st Z, r1 + 20d0: 01 96 adiw r24, 0x01 ; 1 + 20d2: 88 30 cpi r24, 0x08 ; 8 + 20d4: 91 05 cpc r25, r1 + 20d6: 91 f7 brne .-28 ; 0x20bc + 20d8: e5 e8 ldi r30, 0x85 ; 133 + 20da: f1 e2 ldi r31, 0x21 ; 33 + 20dc: 80 81 ld r24, Z + 20de: 8e 7f andi r24, 0xFE ; 254 + 20e0: 80 83 st Z, r24 + 20e2: ee e8 ldi r30, 0x8E ; 142 + 20e4: f1 e2 ldi r31, 0x21 ; 33 + 20e6: 80 81 ld r24, Z + 20e8: 8e 7f andi r24, 0xFE ; 254 + 20ea: 80 83 st Z, r24 + 20ec: e7 e9 ldi r30, 0x97 ; 151 + 20ee: f1 e2 ldi r31, 0x21 ; 33 + 20f0: 80 81 ld r24, Z + 20f2: 8e 7f andi r24, 0xFE ; 254 + 20f4: 80 83 st Z, r24 + 20f6: e0 ea ldi r30, 0xA0 ; 160 + 20f8: f1 e2 ldi r31, 0x21 ; 33 + 20fa: 80 81 ld r24, Z + 20fc: 8e 7f andi r24, 0xFE ; 254 + 20fe: 80 83 st Z, r24 + 2100: e9 ea ldi r30, 0xA9 ; 169 + 2102: f1 e2 ldi r31, 0x21 ; 33 + 2104: 80 81 ld r24, Z + 2106: 8e 7f andi r24, 0xFE ; 254 + 2108: 80 83 st Z, r24 + 210a: e2 eb ldi r30, 0xB2 ; 178 + 210c: f1 e2 ldi r31, 0x21 ; 33 + 210e: 80 81 ld r24, Z + 2110: 8e 7f andi r24, 0xFE ; 254 + 2112: 80 83 st Z, r24 + 2114: 6a e1 ldi r22, 0x1A ; 26 + 2116: 70 e0 ldi r23, 0x00 ; 0 + 2118: 82 e0 ldi r24, 0x02 ; 2 + 211a: ee dc rcall .-1572 ; 0x1af8 + 211c: 8f 3f cpi r24, 0xFF ; 255 + 211e: 19 f0 breq .+6 ; 0x2126 + 2120: 80 93 fa 04 sts 0x04FA, r24 + 2124: 03 c0 rjmp .+6 ; 0x212c + 2126: 8f e1 ldi r24, 0x1F ; 31 + 2128: 80 93 fa 04 sts 0x04FA, r24 + 212c: 6b e1 ldi r22, 0x1B ; 27 + 212e: 70 e0 ldi r23, 0x00 ; 0 + 2130: 82 e0 ldi r24, 0x02 ; 2 + 2132: e2 dc rcall .-1596 ; 0x1af8 + 2134: 8f 3f cpi r24, 0xFF ; 255 + 2136: 19 f0 breq .+6 ; 0x213e + 2138: 80 93 fb 04 sts 0x04FB, r24 + 213c: 03 c0 rjmp .+6 ; 0x2144 + 213e: 8f e1 ldi r24, 0x1F ; 31 + 2140: 80 93 fb 04 sts 0x04FB, r24 + 2144: e0 ec ldi r30, 0xC0 ; 192 + 2146: f4 e0 ldi r31, 0x04 ; 4 + 2148: 80 81 ld r24, Z + 214a: 83 60 ori r24, 0x03 ; 3 + 214c: 80 83 st Z, r24 + 214e: 80 81 ld r24, Z + 2150: 80 68 ori r24, 0x80 ; 128 + 2152: 80 83 st Z, r24 + 2154: 80 81 ld r24, Z + 2156: 80 61 ori r24, 0x10 ; 16 + 2158: 80 83 st Z, r24 + 215a: 80 e1 ldi r24, 0x10 ; 16 + 215c: 92 e2 ldi r25, 0x22 ; 34 + 215e: 86 83 std Z+6, r24 ; 0x06 + 2160: 97 83 std Z+7, r25 ; 0x07 + 2162: 80 81 ld r24, Z + 2164: 80 62 ori r24, 0x20 ; 32 + 2166: 80 83 st Z, r24 + 2168: 8f ef ldi r24, 0xFF ; 255 + 216a: 80 93 c5 04 sts 0x04C5, r24 + 216e: e8 ec ldi r30, 0xC8 ; 200 + 2170: f4 e0 ldi r31, 0x04 ; 4 + 2172: 80 81 ld r24, Z + 2174: 82 60 ori r24, 0x02 ; 2 + 2176: 80 83 st Z, r24 + 2178: 10 92 54 22 sts 0x2254, r1 + 217c: 80 91 47 2c lds r24, 0x2C47 + 2180: 8f 3f cpi r24, 0xFF ; 255 + 2182: 09 f4 brne .+2 ; 0x2186 + 2184: ff cf rjmp .-2 ; 0x2184 + 2186: 8f b7 in r24, 0x3f ; 63 + 2188: f8 94 cli + 218a: e7 e4 ldi r30, 0x47 ; 71 + 218c: fc e2 ldi r31, 0x2C ; 44 + 218e: 90 81 ld r25, Z + 2190: 9f 5f subi r25, 0xFF ; 255 + 2192: 90 83 st Z, r25 + 2194: 8f bf out 0x3f, r24 ; 63 + 2196: 5c df rcall .-328 ; 0x2050 + 2198: cf bf out 0x3f, r28 ; 63 + 219a: df 91 pop r29 + 219c: cf 91 pop r28 + 219e: 08 95 ret + +000021a0 : + 21a0: 80 93 c3 04 sts 0x04C3, r24 + 21a4: 08 95 ret + +000021a6 : + 21a6: 80 91 c3 04 lds r24, 0x04C3 + 21aa: 08 95 ret + +000021ac : + 21ac: 80 93 5e 24 sts 0x245E, r24 + 21b0: 90 93 5f 24 sts 0x245F, r25 + 21b4: 60 93 60 24 sts 0x2460, r22 + 21b8: 70 93 61 24 sts 0x2461, r23 + 21bc: 08 95 ret + +000021be : + 21be: e8 2f mov r30, r24 + 21c0: ef 70 andi r30, 0x0F ; 15 + 21c2: f0 e0 ldi r31, 0x00 ; 0 + 21c4: ee 0f add r30, r30 + 21c6: ff 1f adc r31, r31 + 21c8: 99 27 eor r25, r25 + 21ca: 87 fd sbrc r24, 7 + 21cc: 90 95 com r25 + 21ce: 88 27 eor r24, r24 + 21d0: 99 0f add r25, r25 + 21d2: 88 1f adc r24, r24 + 21d4: 99 27 eor r25, r25 + 21d6: e8 0f add r30, r24 + 21d8: f9 1f adc r31, r25 + 21da: ee 0f add r30, r30 + 21dc: ff 1f adc r31, r31 + 21de: ee 0f add r30, r30 + 21e0: ff 1f adc r31, r31 + 21e2: ee 0f add r30, r30 + 21e4: ff 1f adc r31, r31 + 21e6: e0 5f subi r30, 0xF0 ; 240 + 21e8: fd 4d sbci r31, 0xDD ; 221 + 21ea: 81 81 ldd r24, Z+1 ; 0x01 + 21ec: 80 7c andi r24, 0xC0 ; 192 + 21ee: d9 f5 brne .+118 ; 0x2266 + 21f0: 63 70 andi r22, 0x03 ; 3 + 21f2: 61 30 cpi r22, 0x01 ; 1 + 21f4: 29 f0 breq .+10 ; 0x2200 + 21f6: 10 f4 brcc .+4 ; 0x21fc + 21f8: 80 e4 ldi r24, 0x40 ; 64 + 21fa: 03 c0 rjmp .+6 ; 0x2202 + 21fc: 80 e8 ldi r24, 0x80 ; 128 + 21fe: 01 c0 rjmp .+2 ; 0x2202 + 2200: 80 ec ldi r24, 0xC0 ; 192 + 2202: 40 38 cpi r20, 0x80 ; 128 + 2204: 51 05 cpc r21, r1 + 2206: e1 f0 breq .+56 ; 0x2240 + 2208: 50 f4 brcc .+20 ; 0x221e + 220a: 40 32 cpi r20, 0x20 ; 32 + 220c: 51 05 cpc r21, r1 + 220e: a1 f0 breq .+40 ; 0x2238 + 2210: 40 34 cpi r20, 0x40 ; 64 + 2212: 51 05 cpc r21, r1 + 2214: 99 f0 breq .+38 ; 0x223c + 2216: 40 31 cpi r20, 0x10 ; 16 + 2218: 51 05 cpc r21, r1 + 221a: 61 f4 brne .+24 ; 0x2234 + 221c: 19 c0 rjmp .+50 ; 0x2250 + 221e: 41 15 cp r20, r1 + 2220: 92 e0 ldi r25, 0x02 ; 2 + 2222: 59 07 cpc r21, r25 + 2224: 89 f0 breq .+34 ; 0x2248 + 2226: 4f 3f cpi r20, 0xFF ; 255 + 2228: 93 e0 ldi r25, 0x03 ; 3 + 222a: 59 07 cpc r21, r25 + 222c: 79 f0 breq .+30 ; 0x224c + 222e: 41 15 cp r20, r1 + 2230: 51 40 sbci r21, 0x01 ; 1 + 2232: 41 f0 breq .+16 ; 0x2244 + 2234: 20 e0 ldi r18, 0x00 ; 0 + 2236: 0d c0 rjmp .+26 ; 0x2252 + 2238: 22 e0 ldi r18, 0x02 ; 2 + 223a: 0b c0 rjmp .+22 ; 0x2252 + 223c: 23 e0 ldi r18, 0x03 ; 3 + 223e: 09 c0 rjmp .+18 ; 0x2252 + 2240: 24 e0 ldi r18, 0x04 ; 4 + 2242: 07 c0 rjmp .+14 ; 0x2252 + 2244: 25 e0 ldi r18, 0x05 ; 5 + 2246: 05 c0 rjmp .+10 ; 0x2252 + 2248: 26 e0 ldi r18, 0x06 ; 6 + 224a: 03 c0 rjmp .+6 ; 0x2252 + 224c: 27 e0 ldi r18, 0x07 ; 7 + 224e: 01 c0 rjmp .+2 ; 0x2252 + 2250: 21 e0 ldi r18, 0x01 ; 1 + 2252: 11 82 std Z+1, r1 ; 0x01 + 2254: 96 e0 ldi r25, 0x06 ; 6 + 2256: 90 83 st Z, r25 + 2258: 82 2b or r24, r18 + 225a: 81 83 std Z+1, r24 ; 0x01 + 225c: 81 81 ldd r24, Z+1 ; 0x01 + 225e: 80 62 ori r24, 0x20 ; 32 + 2260: 81 83 std Z+1, r24 ; 0x01 + 2262: 81 e0 ldi r24, 0x01 ; 1 + 2264: 08 95 ret + 2266: 80 e0 ldi r24, 0x00 ; 0 + 2268: 08 95 ret + +0000226a : + 226a: e8 2f mov r30, r24 + 226c: ef 70 andi r30, 0x0F ; 15 + 226e: f0 e0 ldi r31, 0x00 ; 0 + 2270: ee 0f add r30, r30 + 2272: ff 1f adc r31, r31 + 2274: 99 27 eor r25, r25 + 2276: 87 fd sbrc r24, 7 + 2278: 90 95 com r25 + 227a: 88 27 eor r24, r24 + 227c: 99 0f add r25, r25 + 227e: 88 1f adc r24, r24 + 2280: 99 27 eor r25, r25 + 2282: e8 0f add r30, r24 + 2284: f9 1f adc r31, r25 + 2286: ee 0f add r30, r30 + 2288: ff 1f adc r31, r31 + 228a: ee 0f add r30, r30 + 228c: ff 1f adc r31, r31 + 228e: ee 0f add r30, r30 + 2290: ff 1f adc r31, r31 + 2292: e0 5f subi r30, 0xF0 ; 240 + 2294: fd 4d sbci r31, 0xDD ; 221 + 2296: 81 81 ldd r24, Z+1 ; 0x01 + 2298: 82 fb bst r24, 2 + 229a: 88 27 eor r24, r24 + 229c: 80 f9 bld r24, 0 + 229e: 08 95 ret + +000022a0 : + 22a0: e8 2f mov r30, r24 + 22a2: ef 70 andi r30, 0x0F ; 15 + 22a4: f0 e0 ldi r31, 0x00 ; 0 + 22a6: ee 0f add r30, r30 + 22a8: ff 1f adc r31, r31 + 22aa: 28 2f mov r18, r24 + 22ac: 33 27 eor r19, r19 + 22ae: 27 fd sbrc r18, 7 + 22b0: 30 95 com r19 + 22b2: 22 27 eor r18, r18 + 22b4: 33 0f add r19, r19 + 22b6: 22 1f adc r18, r18 + 22b8: 33 27 eor r19, r19 + 22ba: e2 0f add r30, r18 + 22bc: f3 1f adc r31, r19 + 22be: ee 0f add r30, r30 + 22c0: ff 1f adc r31, r31 + 22c2: ee 0f add r30, r30 + 22c4: ff 1f adc r31, r31 + 22c6: ee 0f add r30, r30 + 22c8: ff 1f adc r31, r31 + 22ca: e0 5f subi r30, 0xF0 ; 240 + 22cc: fd 4d sbci r31, 0xDD ; 221 + 22ce: 91 81 ldd r25, Z+1 ; 0x01 + 22d0: 92 ff sbrs r25, 2 + 22d2: 0e c0 rjmp .+28 ; 0x22f0 + 22d4: 91 81 ldd r25, Z+1 ; 0x01 + 22d6: 9b 7f andi r25, 0xFB ; 251 + 22d8: 91 83 std Z+1, r25 ; 0x01 + 22da: 22 dd rcall .-1468 ; 0x1d20 + 22dc: fc 01 movw r30, r24 + 22de: 80 81 ld r24, Z + 22e0: 80 ff sbrs r24, 0 + 22e2: 06 c0 rjmp .+12 ; 0x22f0 + 22e4: 8e 7f andi r24, 0xFE ; 254 + 22e6: 80 83 st Z, r24 + 22e8: 07 80 ldd r0, Z+7 ; 0x07 + 22ea: f0 85 ldd r31, Z+8 ; 0x08 + 22ec: e0 2d mov r30, r0 + 22ee: 09 95 icall + 22f0: 81 e0 ldi r24, 0x01 ; 1 + 22f2: 08 95 ret + +000022f4 : + 22f4: 7f 92 push r7 + 22f6: 8f 92 push r8 + 22f8: 9f 92 push r9 + 22fa: af 92 push r10 + 22fc: bf 92 push r11 + 22fe: cf 92 push r12 + 2300: df 92 push r13 + 2302: ef 92 push r14 + 2304: ff 92 push r15 + 2306: 0f 93 push r16 + 2308: 1f 93 push r17 + 230a: cf 93 push r28 + 230c: df 93 push r29 + 230e: 98 2e mov r9, r24 + 2310: 86 2e mov r8, r22 + 2312: 5a 01 movw r10, r20 + 2314: 69 01 movw r12, r18 + 2316: 04 dd rcall .-1528 ; 0x1d20 + 2318: 7c 01 movw r14, r24 + 231a: 79 2c mov r7, r9 + 231c: 77 1c adc r7, r7 + 231e: 77 24 eor r7, r7 + 2320: 77 1c adc r7, r7 + 2322: c9 2d mov r28, r9 + 2324: cf 70 andi r28, 0x0F ; 15 + 2326: d0 e0 ldi r29, 0x00 ; 0 + 2328: cc 0f add r28, r28 + 232a: dd 1f adc r29, r29 + 232c: c7 0d add r28, r7 + 232e: d1 1d adc r29, r1 + 2330: cc 0f add r28, r28 + 2332: dd 1f adc r29, r29 + 2334: cc 0f add r28, r28 + 2336: dd 1f adc r29, r29 + 2338: cc 0f add r28, r28 + 233a: dd 1f adc r29, r29 + 233c: c0 5f subi r28, 0xF0 ; 240 + 233e: dd 4d sbci r29, 0xDD ; 221 + 2340: 89 81 ldd r24, Y+1 ; 0x01 + 2342: 80 7c andi r24, 0xC0 ; 192 + 2344: 09 f4 brne .+2 ; 0x2348 + 2346: 4b c0 rjmp .+150 ; 0x23de + 2348: 89 81 ldd r24, Y+1 ; 0x01 + 234a: 80 7c andi r24, 0xC0 ; 192 + 234c: 80 3c cpi r24, 0xC0 ; 192 + 234e: 19 f0 breq .+6 ; 0x2356 + 2350: 89 81 ldd r24, Y+1 ; 0x01 + 2352: 82 fd sbrc r24, 2 + 2354: 46 c0 rjmp .+140 ; 0x23e2 + 2356: 8f b7 in r24, 0x3f ; 63 + 2358: f8 94 cli + 235a: f7 01 movw r30, r14 + 235c: 90 81 ld r25, Z + 235e: 90 ff sbrs r25, 0 + 2360: 03 c0 rjmp .+6 ; 0x2368 + 2362: 8f bf out 0x3f, r24 ; 63 + 2364: 71 2c mov r7, r1 + 2366: 3e c0 rjmp .+124 ; 0x23e4 + 2368: f7 01 movw r30, r14 + 236a: 90 81 ld r25, Z + 236c: 91 60 ori r25, 0x01 ; 1 + 236e: 90 83 st Z, r25 + 2370: 8f bf out 0x3f, r24 ; 63 + 2372: f7 01 movw r30, r14 + 2374: a1 82 std Z+1, r10 ; 0x01 + 2376: b2 82 std Z+2, r11 ; 0x02 + 2378: c3 82 std Z+3, r12 ; 0x03 + 237a: d4 82 std Z+4, r13 ; 0x04 + 237c: 15 82 std Z+5, r1 ; 0x05 + 237e: 16 82 std Z+6, r1 ; 0x06 + 2380: 07 83 std Z+7, r16 ; 0x07 + 2382: 10 87 std Z+8, r17 ; 0x08 + 2384: 81 10 cpse r8, r1 + 2386: 06 c0 rjmp .+12 ; 0x2394 + 2388: 91 e0 ldi r25, 0x01 ; 1 + 238a: c1 14 cp r12, r1 + 238c: d1 04 cpc r13, r1 + 238e: 19 f0 breq .+6 ; 0x2396 + 2390: 90 e0 ldi r25, 0x00 ; 0 + 2392: 01 c0 rjmp .+2 ; 0x2396 + 2394: 91 e0 ldi r25, 0x01 ; 1 + 2396: f7 01 movw r30, r14 + 2398: 80 81 ld r24, Z + 239a: 90 fb bst r25, 0 + 239c: 81 f9 bld r24, 1 + 239e: 8b 7f andi r24, 0xFB ; 251 + 23a0: 80 83 st Z, r24 + 23a2: 77 20 and r7, r7 + 23a4: 19 f0 breq .+6 ; 0x23ac + 23a6: 1e 82 std Y+6, r1 ; 0x06 + 23a8: 1f 82 std Y+7, r1 ; 0x07 + 23aa: 14 c0 rjmp .+40 ; 0x23d4 + 23ac: 89 81 ldd r24, Y+1 ; 0x01 + 23ae: 80 7c andi r24, 0xC0 ; 192 + 23b0: 80 3c cpi r24, 0xC0 ; 192 + 23b2: 61 f4 brne .+24 ; 0x23cc + 23b4: ce 01 movw r24, r28 + 23b6: 90 dc rcall .-1760 ; 0x1cd8 + 23b8: bc 01 movw r22, r24 + 23ba: c6 01 movw r24, r12 + 23bc: 42 d2 rcall .+1156 ; 0x2842 <__udivmodhi4> + 23be: 89 2b or r24, r25 + 23c0: 29 f0 breq .+10 ; 0x23cc + 23c2: f7 01 movw r30, r14 + 23c4: 80 81 ld r24, Z + 23c6: 8e 7f andi r24, 0xFE ; 254 + 23c8: 80 83 st Z, r24 + 23ca: 0c c0 rjmp .+24 ; 0x23e4 + 23cc: 1a 82 std Y+2, r1 ; 0x02 + 23ce: 1b 82 std Y+3, r1 ; 0x03 + 23d0: 1e 82 std Y+6, r1 ; 0x06 + 23d2: 1f 82 std Y+7, r1 ; 0x07 + 23d4: 89 2d mov r24, r9 + 23d6: 2e dd rcall .-1444 ; 0x1e34 + 23d8: 77 24 eor r7, r7 + 23da: 73 94 inc r7 + 23dc: 03 c0 rjmp .+6 ; 0x23e4 + 23de: 71 2c mov r7, r1 + 23e0: 01 c0 rjmp .+2 ; 0x23e4 + 23e2: 71 2c mov r7, r1 + 23e4: 87 2d mov r24, r7 + 23e6: df 91 pop r29 + 23e8: cf 91 pop r28 + 23ea: 1f 91 pop r17 + 23ec: 0f 91 pop r16 + 23ee: ff 90 pop r15 + 23f0: ef 90 pop r14 + 23f2: df 90 pop r13 + 23f4: cf 90 pop r12 + 23f6: bf 90 pop r11 + 23f8: af 90 pop r10 + 23fa: 9f 90 pop r9 + 23fc: 8f 90 pop r8 + 23fe: 7f 90 pop r7 + 2400: 08 95 ret + +00002402 : + 2402: ff 92 push r15 + 2404: 0f 93 push r16 + 2406: 1f 93 push r17 + 2408: cf 93 push r28 + 240a: df 93 push r29 + 240c: 18 2f mov r17, r24 + 240e: f8 2e mov r15, r24 + 2410: ff 1c adc r15, r15 + 2412: ff 24 eor r15, r15 + 2414: ff 1c adc r15, r15 + 2416: c8 2f mov r28, r24 + 2418: cf 70 andi r28, 0x0F ; 15 + 241a: d0 e0 ldi r29, 0x00 ; 0 + 241c: cc 0f add r28, r28 + 241e: dd 1f adc r29, r29 + 2420: cf 0d add r28, r15 + 2422: d1 1d adc r29, r1 + 2424: cc 0f add r28, r28 + 2426: dd 1f adc r29, r29 + 2428: cc 0f add r28, r28 + 242a: dd 1f adc r29, r29 + 242c: cc 0f add r28, r28 + 242e: dd 1f adc r29, r29 + 2430: c0 5f subi r28, 0xF0 ; 240 + 2432: dd 4d sbci r29, 0xDD ; 221 + 2434: 75 dc rcall .-1814 ; 0x1d20 + 2436: dc 01 movw r26, r24 + 2438: fe 01 movw r30, r28 + 243a: 02 e0 ldi r16, 0x02 ; 2 + 243c: 05 93 las Z, r16 + 243e: 8c 91 ld r24, X + 2440: 80 ff sbrs r24, 0 + 2442: 12 c0 rjmp .+36 ; 0x2468 + 2444: 8e 7f andi r24, 0xFE ; 254 + 2446: 8c 93 st X, r24 + 2448: 17 96 adiw r26, 0x07 ; 7 + 244a: ed 91 ld r30, X+ + 244c: fc 91 ld r31, X + 244e: 18 97 sbiw r26, 0x08 ; 8 + 2450: 30 97 sbiw r30, 0x00 ; 0 + 2452: 51 f0 breq .+20 ; 0x2468 + 2454: ff 20 and r15, r15 + 2456: 19 f0 breq .+6 ; 0x245e + 2458: 6e 81 ldd r22, Y+6 ; 0x06 + 245a: 7f 81 ldd r23, Y+7 ; 0x07 + 245c: 02 c0 rjmp .+4 ; 0x2462 + 245e: 6a 81 ldd r22, Y+2 ; 0x02 + 2460: 7b 81 ldd r23, Y+3 ; 0x03 + 2462: 41 2f mov r20, r17 + 2464: 81 e0 ldi r24, 0x01 ; 1 + 2466: 09 95 icall + 2468: df 91 pop r29 + 246a: cf 91 pop r28 + 246c: 1f 91 pop r17 + 246e: 0f 91 pop r16 + 2470: ff 90 pop r15 + 2472: 08 95 ret + +00002474 : + 2474: cf 93 push r28 + 2476: c8 2f mov r28, r24 + 2478: c4 df rcall .-120 ; 0x2402 + 247a: ec 2f mov r30, r28 + 247c: ef 70 andi r30, 0x0F ; 15 + 247e: f0 e0 ldi r31, 0x00 ; 0 + 2480: ee 0f add r30, r30 + 2482: ff 1f adc r31, r31 + 2484: 8c 2f mov r24, r28 + 2486: 99 27 eor r25, r25 + 2488: 87 fd sbrc r24, 7 + 248a: 90 95 com r25 + 248c: 88 27 eor r24, r24 + 248e: 99 0f add r25, r25 + 2490: 88 1f adc r24, r24 + 2492: 99 27 eor r25, r25 + 2494: e8 0f add r30, r24 + 2496: f9 1f adc r31, r25 + 2498: ee 0f add r30, r30 + 249a: ff 1f adc r31, r31 + 249c: ee 0f add r30, r30 + 249e: ff 1f adc r31, r31 + 24a0: ee 0f add r30, r30 + 24a2: ff 1f adc r31, r31 + 24a4: e0 5f subi r30, 0xF0 ; 240 + 24a6: fd 4d sbci r31, 0xDD ; 221 + 24a8: 11 82 std Z+1, r1 ; 0x01 + 24aa: cf 91 pop r28 + 24ac: 08 95 ret + +000024ae : + 24ae: 0f 93 push r16 + 24b0: e8 2f mov r30, r24 + 24b2: ef 70 andi r30, 0x0F ; 15 + 24b4: f0 e0 ldi r31, 0x00 ; 0 + 24b6: ee 0f add r30, r30 + 24b8: ff 1f adc r31, r31 + 24ba: 28 2f mov r18, r24 + 24bc: 33 27 eor r19, r19 + 24be: 27 fd sbrc r18, 7 + 24c0: 30 95 com r19 + 24c2: 22 27 eor r18, r18 + 24c4: 33 0f add r19, r19 + 24c6: 22 1f adc r18, r18 + 24c8: 33 27 eor r19, r19 + 24ca: e2 0f add r30, r18 + 24cc: f3 1f adc r31, r19 + 24ce: ee 0f add r30, r30 + 24d0: ff 1f adc r31, r31 + 24d2: ee 0f add r30, r30 + 24d4: ff 1f adc r31, r31 + 24d6: ee 0f add r30, r30 + 24d8: ff 1f adc r31, r31 + 24da: e0 5f subi r30, 0xF0 ; 240 + 24dc: fd 4d sbci r31, 0xDD ; 221 + 24de: 91 81 ldd r25, Z+1 ; 0x01 + 24e0: 94 60 ori r25, 0x04 ; 4 + 24e2: 91 83 std Z+1, r25 ; 0x01 + 24e4: 01 e0 ldi r16, 0x01 ; 1 + 24e6: 06 93 lac Z, r16 + 24e8: 8c df rcall .-232 ; 0x2402 + 24ea: 81 e0 ldi r24, 0x01 ; 1 + 24ec: 0f 91 pop r16 + 24ee: 08 95 ret + +000024f0 <__vector_125>: + * USB bus event interrupt includes : + * - USB line events SOF, reset, suspend, resume, wakeup + * - endpoint control errors underflow, overflow, stall + */ +ISR(USB_BUSEVENT_vect) +{ + 24f0: 1f 92 push r1 + 24f2: 0f 92 push r0 + 24f4: 0f b6 in r0, 0x3f ; 63 + 24f6: 0f 92 push r0 + 24f8: 11 24 eor r1, r1 + 24fa: 0f 93 push r16 + 24fc: 2f 93 push r18 + 24fe: 3f 93 push r19 + 2500: 4f 93 push r20 + 2502: 5f 93 push r21 + 2504: 6f 93 push r22 + 2506: 7f 93 push r23 + 2508: 8f 93 push r24 + 250a: 9f 93 push r25 + 250c: af 93 push r26 + 250e: bf 93 push r27 + 2510: ef 93 push r30 + 2512: ff 93 push r31 + if (udd_is_start_of_frame_event()) { + 2514: 80 91 cb 04 lds r24, 0x04CB + 2518: 88 23 and r24, r24 + 251a: 44 f4 brge .+16 ; 0x252c <__vector_125+0x3c> + udd_ack_start_of_frame_event(); + 251c: 80 e8 ldi r24, 0x80 ; 128 + 251e: 80 93 ca 04 sts 0x04CA, r24 + udc_sof_notify(); + 2522: 0e 94 82 09 call 0x1304 ; 0x1304 +#ifdef UDC_SOF_EVENT + UDC_SOF_EVENT(); + 2526: 0e 94 88 01 call 0x310 ; 0x310 +#endif + goto udd_interrupt_bus_event_end; + 252a: 90 c0 rjmp .+288 ; 0x264c <__vector_125+0x15c> +} + +static bool udd_ctrl_interrupt_error(void) +{ + // Underflow only managed for control endpoint + if (udd_is_underflow_event()) { + 252c: 80 91 cb 04 lds r24, 0x04CB + 2530: 82 ff sbrs r24, 2 + 2532: 20 c0 rjmp .+64 ; 0x2574 <__vector_125+0x84> + udd_ack_underflow_event(); + 2534: 84 e0 ldi r24, 0x04 ; 4 + 2536: 80 93 ca 04 sts 0x04CA, r24 + if (udd_control_in_underflow()) { + 253a: 80 91 18 22 lds r24, 0x2218 + 253e: 86 ff sbrs r24, 6 + 2540: 85 c0 rjmp .+266 ; 0x264c <__vector_125+0x15c> + udd_control_out_clear_NACK0(); +} + +static void udd_ctrl_underflow(void) +{ + if (udd_is_tc_event() || udd_ctrl_interrupt_tc_setup()) { + 2542: 80 91 cc 04 lds r24, 0x04CC + 2546: 81 fd sbrc r24, 1 + 2548: 81 c0 rjmp .+258 ; 0x264c <__vector_125+0x15c> + 254a: 05 dc rcall .-2038 ; 0x1d56 + 254c: 81 11 cpse r24, r1 + 254e: 7e c0 rjmp .+252 ; 0x264c <__vector_125+0x15c> + return; // underflow ignored if a transfer complete has been no processed + } + if (UDD_EPCTRL_DATA_OUT == udd_ep_control_state) { + 2550: 80 91 ff 21 lds r24, 0x21FF + 2554: 81 30 cpi r24, 0x01 ; 1 + 2556: 11 f4 brne .+4 ; 0x255c <__vector_125+0x6c> + // Host want to stop OUT transaction + // then stop to wait OUT data phase and wait IN ZLP handshake + udd_ctrl_send_zlp_in(); + 2558: 3b db rcall .-2442 ; 0x1bd0 + 255a: 78 c0 rjmp .+240 ; 0x264c <__vector_125+0x15c> + } else if (UDD_EPCTRL_HANDSHAKE_WAIT_OUT_ZLP == udd_ep_control_state) { + 255c: 84 30 cpi r24, 0x04 ; 4 + 255e: 09 f0 breq .+2 ; 0x2562 <__vector_125+0x72> + 2560: 75 c0 rjmp .+234 ; 0x264c <__vector_125+0x15c> + // A OUT handshake is waiting by device, + // but host want extra IN data then stall extra IN data and following status stage + udd_control_in_enable_stall(); + 2562: e9 e1 ldi r30, 0x19 ; 25 + 2564: f2 e2 ldi r31, 0x22 ; 34 + 2566: 04 e0 ldi r16, 0x04 ; 4 + 2568: 05 93 las Z, r16 + udd_control_out_enable_stall(); + 256a: e1 e1 ldi r30, 0x11 ; 17 + 256c: f2 e2 ldi r31, 0x22 ; 34 + 256e: 04 e0 ldi r16, 0x04 ; 4 + 2570: 05 93 las Z, r16 + 2572: 6c c0 rjmp .+216 ; 0x264c <__vector_125+0x15c> + udd_ctrl_underflow(); + } + return true; + } + // Overflow only managed for control endpoint + if (udd_is_overflow_event()) { + 2574: 80 91 cb 04 lds r24, 0x04CB + 2578: 81 ff sbrs r24, 1 + 257a: 63 c0 rjmp .+198 ; 0x2642 <__vector_125+0x152> + udd_ack_overflow_event(); + 257c: 82 e0 ldi r24, 0x02 ; 2 + 257e: 80 93 ca 04 sts 0x04CA, r24 + if (udd_control_out_overflow()) { + 2582: 80 91 10 22 lds r24, 0x2210 + 2586: 86 ff sbrs r24, 6 + 2588: 61 c0 rjmp .+194 ; 0x264c <__vector_125+0x15c> + } +} + +static void udd_ctrl_overflow(void) +{ + if (udd_is_tc_event() || udd_ctrl_interrupt_tc_setup()) { + 258a: 80 91 cc 04 lds r24, 0x04CC + 258e: 81 fd sbrc r24, 1 + 2590: 5d c0 rjmp .+186 ; 0x264c <__vector_125+0x15c> + 2592: e1 db rcall .-2110 ; 0x1d56 + 2594: 81 11 cpse r24, r1 + 2596: 5a c0 rjmp .+180 ; 0x264c <__vector_125+0x15c> + return; // overflow ignored if a transfer complete has been no processed + } + if (UDD_EPCTRL_DATA_IN == udd_ep_control_state) { + 2598: 80 91 ff 21 lds r24, 0x21FF + 259c: 82 30 cpi r24, 0x02 ; 2 + 259e: 41 f4 brne .+16 ; 0x25b0 <__vector_125+0xc0> + udd_control_in_clear_NACK0(); +} + +static void udd_ctrl_send_zlp_out(void) +{ + udd_ep_control_state = UDD_EPCTRL_HANDSHAKE_WAIT_OUT_ZLP; + 25a0: 84 e0 ldi r24, 0x04 ; 4 + 25a2: 80 93 ff 21 sts 0x21FF, r24 + // Valid reception of OUT packet on control endpoint + udd_control_out_clear_NACK0(); + 25a6: e0 e1 ldi r30, 0x10 ; 16 + 25a8: f2 e2 ldi r31, 0x22 ; 34 + 25aa: 02 e0 ldi r16, 0x02 ; 2 + 25ac: 06 93 lac Z, r16 + 25ae: 4e c0 rjmp .+156 ; 0x264c <__vector_125+0x15c> + } + if (UDD_EPCTRL_DATA_IN == udd_ep_control_state) { + // Host want to stop IN transaction + // then stop to wait IN data phase and wait OUT ZLP handshake + udd_ctrl_send_zlp_out(); + } else if (UDD_EPCTRL_HANDSHAKE_WAIT_IN_ZLP == udd_ep_control_state) { + 25b0: 83 30 cpi r24, 0x03 ; 3 + 25b2: 09 f0 breq .+2 ; 0x25b6 <__vector_125+0xc6> + 25b4: 4b c0 rjmp .+150 ; 0x264c <__vector_125+0x15c> + // A IN handshake is waiting by device, + // but host want extra OUT data then stall extra OUT data and following status stage + udd_control_in_enable_stall(); + 25b6: e9 e1 ldi r30, 0x19 ; 25 + 25b8: f2 e2 ldi r31, 0x22 ; 34 + 25ba: 04 e0 ldi r16, 0x04 ; 4 + 25bc: 05 93 las Z, r16 + udd_control_out_enable_stall(); + 25be: e1 e1 ldi r30, 0x11 ; 17 + 25c0: f2 e2 ldi r31, 0x22 ; 34 + 25c2: 04 e0 ldi r16, 0x04 ; 4 + 25c4: 05 93 las Z, r16 + 25c6: 42 c0 rjmp .+132 ; 0x264c <__vector_125+0x15c> + + if (udd_ctrl_interrupt_error()) { + goto udd_interrupt_bus_event_end; + } + if (udd_is_reset_event()) { + udd_ack_reset_event(); + 25c8: 80 e1 ldi r24, 0x10 ; 16 + 25ca: 80 93 ca 04 sts 0x04CA, r24 +#if (0!=USB_DEVICE_MAX_EP) + // Abort all endpoint jobs on going + uint8_t i; + for (i = 1; i < USB_DEVICE_MAX_EP; i++) { + udd_ep_abort(i); + 25ce: 81 e0 ldi r24, 0x01 ; 1 + 25d0: 18 df rcall .-464 ; 0x2402 + udd_ep_abort(i | USB_EP_DIR_IN); + 25d2: 81 e8 ldi r24, 0x81 ; 129 + 25d4: 16 df rcall .-468 ; 0x2402 + udd_ack_reset_event(); +#if (0!=USB_DEVICE_MAX_EP) + // Abort all endpoint jobs on going + uint8_t i; + for (i = 1; i < USB_DEVICE_MAX_EP; i++) { + udd_ep_abort(i); + 25d6: 82 e0 ldi r24, 0x02 ; 2 + 25d8: 14 df rcall .-472 ; 0x2402 + udd_ep_abort(i | USB_EP_DIR_IN); + 25da: 82 e8 ldi r24, 0x82 ; 130 + 25dc: 12 df rcall .-476 ; 0x2402 + } +#endif + udc_reset(); + 25de: 0e 94 5d 09 call 0x12ba ; 0x12ba + + // Reset USB address to 0 + udd_set_device_address(0); + 25e2: 10 92 c3 04 sts 0x04C3, r1 +#endif + } + + // Enable endpoint + ep_ctrl = udd_ep_get_ctrl(ep); + udd_endpoint_disable(ep_ctrl); + 25e6: e1 e1 ldi r30, 0x11 ; 17 + 25e8: f2 e2 ldi r31, 0x22 ; 34 + 25ea: 10 82 st Z, r1 + udd_endpoint_clear_status(ep_ctrl); + 25ec: 96 e0 ldi r25, 0x06 ; 6 + 25ee: 90 93 10 22 sts 0x2210, r25 + udd_endpoint_set_control(ep_ctrl, (uint8_t) type | (uint8_t) size); + 25f2: 83 e4 ldi r24, 0x43 ; 67 + 25f4: 80 83 st Z, r24 +#endif + } + + // Enable endpoint + ep_ctrl = udd_ep_get_ctrl(ep); + udd_endpoint_disable(ep_ctrl); + 25f6: e9 e1 ldi r30, 0x19 ; 25 + 25f8: f2 e2 ldi r31, 0x22 ; 34 + 25fa: 10 82 st Z, r1 + udd_endpoint_clear_status(ep_ctrl); + 25fc: 90 93 18 22 sts 0x2218, r25 + udd_endpoint_set_control(ep_ctrl, (uint8_t) type | (uint8_t) size); + 2600: 80 83 st Z, r24 + udd_set_device_address(0); + // Alloc and configure control endpoint + udd_ep_init(0, USB_EP_TYPE_CONTROL, USB_DEVICE_EP_CTRL_SIZE); + udd_ep_init(0 | USB_EP_DIR_IN, USB_EP_TYPE_CONTROL, + USB_DEVICE_EP_CTRL_SIZE); + udd_control_out_set_buf(&udd_ctrl_buffer); + 2602: 8b eb ldi r24, 0xBB ; 187 + 2604: 91 e2 ldi r25, 0x21 ; 33 + 2606: 80 93 14 22 sts 0x2214, r24 + 260a: 90 93 15 22 sts 0x2215, r25 + // Reset endpoint control management + udd_ctrl_init(); + 260e: a7 da rcall .-2738 ; 0x1b5e + goto udd_interrupt_bus_event_end; + 2610: 1d c0 rjmp .+58 ; 0x264c <__vector_125+0x15c> + } + + if (udd_is_suspend_event()) { + 2612: 80 91 cb 04 lds r24, 0x04CB + 2616: 86 ff sbrs r24, 6 + 2618: 08 c0 rjmp .+16 ; 0x262a <__vector_125+0x13a> + udd_ack_suspend_event(); + 261a: 80 e4 ldi r24, 0x40 ; 64 + 261c: 80 93 ca 04 sts 0x04CA, r24 + udd_sleep_mode(false); // Enter in SUSPEND mode + 2620: 80 e0 ldi r24, 0x00 ; 0 + 2622: 74 da rcall .-2840 ; 0x1b0c +#ifdef UDC_SUSPEND_EVENT + UDC_SUSPEND_EVENT(); + 2624: 0e 94 86 01 call 0x30c ; 0x30c +#endif + goto udd_interrupt_bus_event_end; + 2628: 11 c0 rjmp .+34 ; 0x264c <__vector_125+0x15c> + } + + if (udd_is_resume_event()) { + 262a: 80 91 cb 04 lds r24, 0x04CB + 262e: 85 ff sbrs r24, 5 + 2630: 0d c0 rjmp .+26 ; 0x264c <__vector_125+0x15c> + udd_ack_resume_event(); + 2632: 80 e2 ldi r24, 0x20 ; 32 + 2634: 80 93 ca 04 sts 0x04CA, r24 + udd_sleep_mode(true); // Enter in power reduction mode + 2638: 81 e0 ldi r24, 0x01 ; 1 + 263a: 68 da rcall .-2864 ; 0x1b0c +#ifdef UDC_RESUME_EVENT + UDC_RESUME_EVENT(); + 263c: 0e 94 87 01 call 0x30e ; 0x30e +#endif + goto udd_interrupt_bus_event_end; + 2640: 05 c0 rjmp .+10 ; 0x264c <__vector_125+0x15c> + } + + if (udd_ctrl_interrupt_error()) { + goto udd_interrupt_bus_event_end; + } + if (udd_is_reset_event()) { + 2642: 80 91 cb 04 lds r24, 0x04CB + 2646: 84 fd sbrc r24, 4 + 2648: bf cf rjmp .-130 ; 0x25c8 <__vector_125+0xd8> + 264a: e3 cf rjmp .-58 ; 0x2612 <__vector_125+0x122> + goto udd_interrupt_bus_event_end; + } + +udd_interrupt_bus_event_end: + return; +} + 264c: ff 91 pop r31 + 264e: ef 91 pop r30 + 2650: bf 91 pop r27 + 2652: af 91 pop r26 + 2654: 9f 91 pop r25 + 2656: 8f 91 pop r24 + 2658: 7f 91 pop r23 + 265a: 6f 91 pop r22 + 265c: 5f 91 pop r21 + 265e: 4f 91 pop r20 + 2660: 3f 91 pop r19 + 2662: 2f 91 pop r18 + 2664: 0f 91 pop r16 + 2666: 0f 90 pop r0 + 2668: 0f be out 0x3f, r0 ; 63 + 266a: 0f 90 pop r0 + 266c: 1f 90 pop r1 + 266e: 18 95 reti + +00002670 <__vector_126>: + * \brief Function called by USB transfer complete interrupt + * + * USB transfer complete interrupt includes events about endpoint transfer on all endpoints. + */ +ISR(USB_TRNCOMPL_vect) +{ + 2670: 1f 92 push r1 + 2672: 0f 92 push r0 + 2674: 0f b6 in r0, 0x3f ; 63 + 2676: 0f 92 push r0 + 2678: 11 24 eor r1, r1 + 267a: 0f 93 push r16 + 267c: 1f 93 push r17 + 267e: 2f 93 push r18 + 2680: 3f 93 push r19 + 2682: 4f 93 push r20 + 2684: 5f 93 push r21 + 2686: 6f 93 push r22 + 2688: 7f 93 push r23 + 268a: 8f 93 push r24 + 268c: 9f 93 push r25 + 268e: af 93 push r26 + 2690: bf 93 push r27 + 2692: cf 93 push r28 + 2694: df 93 push r29 + 2696: ef 93 push r30 + 2698: ff 93 push r31 + int8_t rp; + UDD_EP_t *ep_ctrl; + udd_ep_id_t ep; +#endif + + if (!udd_is_tc_event()) { + 269a: 80 91 cc 04 lds r24, 0x04CC + 269e: 81 fd sbrc r24, 1 + 26a0: 03 c0 rjmp .+6 ; 0x26a8 <__vector_126+0x38> + // If no other transfer complete + // then check reception of SETUP packet on control endpoint + if (udd_ctrl_interrupt_tc_setup()) { + 26a2: 59 db rcall .-2382 ; 0x1d56 + 26a4: 81 11 cpse r24, r1 + 26a6: b8 c0 rjmp .+368 ; 0x2818 <__vector_126+0x1a8> + goto udd_interrupt_tc_end; + } + Assert(false); + } + // Check IN/OUT transfer complete on all endpoints + udd_ack_tc_event(); + 26a8: 82 e0 ldi r24, 0x02 ; 2 + 26aa: 80 93 cc 04 sts 0x04CC, r24 + +#if (0!=USB_DEVICE_MAX_EP) + //** Decode TC FIFO + // Compute ep addr + rp = udd_get_fifo_rp(); + 26ae: 80 91 c5 04 lds r24, 0x04C5 + i_fifo = 2 * (1 + ~rp); + 26b2: 81 95 neg r24 + 26b4: 88 0f add r24, r24 + ad = ((uint16_t) udd_sram.ep_ctrl) - i_fifo; + 26b6: e0 e1 ldi r30, 0x10 ; 16 + 26b8: f2 e2 ldi r31, 0x22 ; 34 + 26ba: e8 1b sub r30, r24 + 26bc: f1 09 sbc r31, r1 + p_ad = (uint16_t *) ad; + // Compute ep + ep_index = (((uint16_t) * p_ad - ((uint16_t) udd_sram.ep_ctrl)) >> 3); + 26be: 20 81 ld r18, Z + 26c0: 31 81 ldd r19, Z+1 ; 0x01 + 26c2: 20 51 subi r18, 0x10 ; 16 + 26c4: 32 42 sbci r19, 0x22 ; 34 + 26c6: 36 95 lsr r19 + 26c8: 27 95 ror r18 + 26ca: 36 95 lsr r19 + 26cc: 27 95 ror r18 + 26ce: 36 95 lsr r19 + 26d0: 27 95 ror r18 + ep = (ep_index / 2) + ((ep_index & 1) ? USB_EP_DIR_IN : 0); + 26d2: 82 2f mov r24, r18 + 26d4: 86 95 lsr r24 + 26d6: 20 ff sbrs r18, 0 + 26d8: 02 c0 rjmp .+4 ; 0x26de <__vector_126+0x6e> + 26da: 90 e8 ldi r25, 0x80 ; 128 + 26dc: 01 c0 rjmp .+2 ; 0x26e0 <__vector_126+0x70> + 26de: 90 e0 ldi r25, 0x00 ; 0 + 26e0: 89 0f add r24, r25 + udd_endpoint_set_control(ep_ctrl, (uint8_t) type | (uint8_t) size); +} + +static UDD_EP_t *udd_ep_get_ctrl(udd_ep_id_t ep) +{ + return &udd_sram.ep_ctrl[(2 * (ep & USB_EP_ADDR_MASK) + + 26e2: e8 2f mov r30, r24 + 26e4: ef 70 andi r30, 0x0F ; 15 + 26e6: f0 e0 ldi r31, 0x00 ; 0 + 26e8: ee 0f add r30, r30 + 26ea: ff 1f adc r31, r31 + ((ep & USB_EP_DIR_IN) ? 1 : 0))]; + 26ec: 28 2f mov r18, r24 + 26ee: 33 27 eor r19, r19 + 26f0: 27 fd sbrc r18, 7 + 26f2: 30 95 com r19 + 26f4: 22 27 eor r18, r18 + 26f6: 33 0f add r19, r19 + 26f8: 22 1f adc r18, r18 + 26fa: 33 27 eor r19, r19 + udd_endpoint_set_control(ep_ctrl, (uint8_t) type | (uint8_t) size); +} + +static UDD_EP_t *udd_ep_get_ctrl(udd_ep_id_t ep) +{ + return &udd_sram.ep_ctrl[(2 * (ep & USB_EP_ADDR_MASK) + + 26fc: e2 0f add r30, r18 + 26fe: f3 1f adc r31, r19 + ep_index = (((uint16_t) * p_ad - ((uint16_t) udd_sram.ep_ctrl)) >> 3); + ep = (ep_index / 2) + ((ep_index & 1) ? USB_EP_DIR_IN : 0); + Assert(USB_DEVICE_MAX_EP >= (ep & USB_EP_ADDR_MASK)); + + // Ack IT TC of endpoint + ep_ctrl = udd_ep_get_ctrl(ep); + 2700: ee 0f add r30, r30 + 2702: ff 1f adc r31, r31 + 2704: ee 0f add r30, r30 + 2706: ff 1f adc r31, r31 + 2708: ee 0f add r30, r30 + 270a: ff 1f adc r31, r31 + 270c: e0 5f subi r30, 0xF0 ; 240 + 270e: fd 4d sbci r31, 0xDD ; 221 + if (!udd_endpoint_transfer_complete(ep_ctrl)) { + 2710: 90 81 ld r25, Z + 2712: 95 ff sbrs r25, 5 + 2714: 81 c0 rjmp .+258 ; 0x2818 <__vector_126+0x1a8> + return; // Error, TC is generated by Multipacket transfer + } + udd_endpoint_ack_transfer_complete(ep_ctrl); + 2716: 00 e2 ldi r16, 0x20 ; 32 + 2718: 06 93 lac Z, r16 + + // Check status on control endpoint + if (ep == 0) { + 271a: 81 11 cpse r24, r1 + 271c: 78 c0 rjmp .+240 ; 0x280e <__vector_126+0x19e> + +static void udd_ctrl_out_received(void) +{ + uint16_t nb_data; + + if (UDD_EPCTRL_HANDSHAKE_WAIT_OUT_ZLP == udd_ep_control_state) { + 271e: 80 91 ff 21 lds r24, 0x21FF + 2722: 84 30 cpi r24, 0x04 ; 4 + 2724: 19 f4 brne .+6 ; 0x272c <__vector_126+0xbc> + // Valid end of setup request + udd_ctrl_endofrequest(); + 2726: 62 da rcall .-2876 ; 0x1bec + // Reinitializes control endpoint management + udd_ctrl_init(); + 2728: 1a da rcall .-3020 ; 0x1b5e + 272a: 76 c0 rjmp .+236 ; 0x2818 <__vector_126+0x1a8> + return; + } + Assert(udd_ep_control_state == UDD_EPCTRL_DATA_OUT); + + // Read data received during OUT phase + nb_data = udd_control_out_get_bytecnt(); + 272c: c0 91 12 22 lds r28, 0x2212 + 2730: d0 91 13 22 lds r29, 0x2213 + + if (udd_g_ctrlreq.payload_size < (udd_ctrl_payload_nb_trans + nb_data)) { + 2734: 80 91 60 24 lds r24, 0x2460 + 2738: 90 91 61 24 lds r25, 0x2461 + 273c: 00 91 fb 21 lds r16, 0x21FB + 2740: 10 91 fc 21 lds r17, 0x21FC + 2744: 98 01 movw r18, r16 + 2746: 2c 0f add r18, r28 + 2748: 3d 1f adc r19, r29 + 274a: 82 17 cp r24, r18 + 274c: 93 07 cpc r25, r19 + 274e: 18 f4 brcc .+6 ; 0x2756 <__vector_126+0xe6> + // Payload buffer too small, ignore data remaining + nb_data = udd_g_ctrlreq.payload_size - udd_ctrl_payload_nb_trans; + 2750: ec 01 movw r28, r24 + 2752: c0 1b sub r28, r16 + 2754: d1 0b sbc r29, r17 + } + + memcpy((uint8_t *) (udd_g_ctrlreq.payload + udd_ctrl_payload_nb_trans), + 2756: 80 91 5e 24 lds r24, 0x245E + 275a: 90 91 5f 24 lds r25, 0x245F + 275e: ae 01 movw r20, r28 + 2760: 6b eb ldi r22, 0xBB ; 187 + 2762: 71 e2 ldi r23, 0x21 ; 33 + 2764: 80 0f add r24, r16 + 2766: 91 1f adc r25, r17 + 2768: 86 d0 rcall .+268 ; 0x2876 + udd_ctrl_buffer, nb_data); + udd_ctrl_payload_nb_trans += nb_data; + 276a: 0c 0f add r16, r28 + 276c: 1d 1f adc r17, r29 + 276e: 00 93 fb 21 sts 0x21FB, r16 + 2772: 10 93 fc 21 sts 0x21FC, r17 + + if ((USB_DEVICE_EP_CTRL_SIZE != nb_data) || (udd_g_ctrlreq.req.wLength + 2776: c0 34 cpi r28, 0x40 ; 64 + 2778: d1 05 cpc r29, r1 + 277a: 69 f4 brne .+26 ; 0x2796 <__vector_126+0x126> + <= (udd_ctrl_prev_payload_nb_trans + + udd_ctrl_payload_nb_trans))) { + 277c: 80 91 fd 21 lds r24, 0x21FD + 2780: 90 91 fe 21 lds r25, 0x21FE + 2784: 80 0f add r24, r16 + 2786: 91 1f adc r25, r17 + + memcpy((uint8_t *) (udd_g_ctrlreq.payload + udd_ctrl_payload_nb_trans), + udd_ctrl_buffer, nb_data); + udd_ctrl_payload_nb_trans += nb_data; + + if ((USB_DEVICE_EP_CTRL_SIZE != nb_data) || (udd_g_ctrlreq.req.wLength + 2788: 20 91 5c 24 lds r18, 0x245C + 278c: 30 91 5d 24 lds r19, 0x245D + 2790: 82 17 cp r24, r18 + 2792: 93 07 cpc r25, r19 + 2794: 88 f0 brcs .+34 ; 0x27b8 <__vector_126+0x148> + // End of reception because it is a short packet + // or all data are transfered + + // Before send ZLP, call intermediate callback + // in case of data receive generate a stall + udd_g_ctrlreq.payload_size = udd_ctrl_payload_nb_trans; + 2796: 00 93 60 24 sts 0x2460, r16 + 279a: 10 93 61 24 sts 0x2461, r17 + if (NULL != udd_g_ctrlreq.over_under_run) { + 279e: e0 91 64 24 lds r30, 0x2464 + 27a2: f0 91 65 24 lds r31, 0x2465 + 27a6: 30 97 sbiw r30, 0x00 ; 0 + 27a8: 29 f0 breq .+10 ; 0x27b4 <__vector_126+0x144> + if (!udd_g_ctrlreq.over_under_run()) { + 27aa: 09 95 icall + 27ac: 81 11 cpse r24, r1 + 27ae: 02 c0 rjmp .+4 ; 0x27b4 <__vector_126+0x144> + // Stall ZLP + udd_ctrl_stall_data(); + 27b0: 01 da rcall .-3070 ; 0x1bb4 + 27b2: 32 c0 rjmp .+100 ; 0x2818 <__vector_126+0x1a8> + return; + } + } + // Send IN ZLP to ACK setup request + udd_ctrl_send_zlp_in(); + 27b4: 0d da rcall .-3046 ; 0x1bd0 + 27b6: 30 c0 rjmp .+96 ; 0x2818 <__vector_126+0x1a8> + return; + } + + if (udd_g_ctrlreq.payload_size == udd_ctrl_payload_nb_trans) { + 27b8: 80 91 60 24 lds r24, 0x2460 + 27bc: 90 91 61 24 lds r25, 0x2461 + 27c0: 08 17 cp r16, r24 + 27c2: 19 07 cpc r17, r25 + 27c4: f9 f4 brne .+62 ; 0x2804 <__vector_126+0x194> + // Overrun then request a new payload buffer + if (!udd_g_ctrlreq.over_under_run) { + 27c6: e0 91 64 24 lds r30, 0x2464 + 27ca: f0 91 65 24 lds r31, 0x2465 + 27ce: 30 97 sbiw r30, 0x00 ; 0 + 27d0: 11 f4 brne .+4 ; 0x27d6 <__vector_126+0x166> + // No callback available to request a new payload buffer + udd_ctrl_stall_data(); + 27d2: f0 d9 rcall .-3104 ; 0x1bb4 + 27d4: 21 c0 rjmp .+66 ; 0x2818 <__vector_126+0x1a8> + return; + } + if (!udd_g_ctrlreq.over_under_run()) { + 27d6: 09 95 icall + 27d8: 81 11 cpse r24, r1 + 27da: 02 c0 rjmp .+4 ; 0x27e0 <__vector_126+0x170> + // No new payload buffer delivered + udd_ctrl_stall_data(); + 27dc: eb d9 rcall .-3114 ; 0x1bb4 + 27de: 1c c0 rjmp .+56 ; 0x2818 <__vector_126+0x1a8> + return; + } + // New payload buffer available + // Update number of total data received + udd_ctrl_prev_payload_nb_trans += udd_ctrl_payload_nb_trans; + 27e0: 20 91 fd 21 lds r18, 0x21FD + 27e4: 30 91 fe 21 lds r19, 0x21FE + 27e8: 80 91 fb 21 lds r24, 0x21FB + 27ec: 90 91 fc 21 lds r25, 0x21FC + 27f0: 82 0f add r24, r18 + 27f2: 93 1f adc r25, r19 + 27f4: 80 93 fd 21 sts 0x21FD, r24 + 27f8: 90 93 fe 21 sts 0x21FE, r25 + // Reinit reception on payload buffer + udd_ctrl_payload_nb_trans = 0; + 27fc: 10 92 fb 21 sts 0x21FB, r1 + 2800: 10 92 fc 21 sts 0x21FC, r1 + } + // Free buffer of OUT control endpoint to authorize next reception + udd_control_out_clear_NACK0(); + 2804: e0 e1 ldi r30, 0x10 ; 16 + 2806: f2 e2 ldi r31, 0x22 ; 34 + 2808: 02 e0 ldi r16, 0x02 ; 2 + 280a: 06 93 lac Z, r16 + 280c: 05 c0 rjmp .+10 ; 0x2818 <__vector_126+0x1a8> + // Check status on control endpoint + if (ep == 0) { + udd_ctrl_out_received(); + goto udd_interrupt_tc_end; // Interrupt acked by control endpoint managed + } + if (ep == (0 | USB_EP_DIR_IN)) { + 280e: 80 38 cpi r24, 0x80 ; 128 + 2810: 11 f4 brne .+4 ; 0x2816 <__vector_126+0x1a6> + udd_ctrl_in_sent(); + 2812: f4 d9 rcall .-3096 ; 0x1bfc + goto udd_interrupt_tc_end; // Interrupt acked by control endpoint managed + 2814: 01 c0 rjmp .+2 ; 0x2818 <__vector_126+0x1a8> + } + Assert(udd_ep_is_valid(ep)); + // Manage end of transfer on endpoint bulk/interrupt/isochronous + udd_ep_trans_complet(ep); + 2816: 0e db rcall .-2532 ; 0x1e34 + } +#endif + +udd_interrupt_tc_end: + return; +} + 2818: ff 91 pop r31 + 281a: ef 91 pop r30 + 281c: df 91 pop r29 + 281e: cf 91 pop r28 + 2820: bf 91 pop r27 + 2822: af 91 pop r26 + 2824: 9f 91 pop r25 + 2826: 8f 91 pop r24 + 2828: 7f 91 pop r23 + 282a: 6f 91 pop r22 + 282c: 5f 91 pop r21 + 282e: 4f 91 pop r20 + 2830: 3f 91 pop r19 + 2832: 2f 91 pop r18 + 2834: 1f 91 pop r17 + 2836: 0f 91 pop r16 + 2838: 0f 90 pop r0 + 283a: 0f be out 0x3f, r0 ; 63 + 283c: 0f 90 pop r0 + 283e: 1f 90 pop r1 + 2840: 18 95 reti + +00002842 <__udivmodhi4>: + 2842: aa 1b sub r26, r26 + 2844: bb 1b sub r27, r27 + 2846: 51 e1 ldi r21, 0x11 ; 17 + 2848: 07 c0 rjmp .+14 ; 0x2858 <__udivmodhi4_ep> + +0000284a <__udivmodhi4_loop>: + 284a: aa 1f adc r26, r26 + 284c: bb 1f adc r27, r27 + 284e: a6 17 cp r26, r22 + 2850: b7 07 cpc r27, r23 + 2852: 10 f0 brcs .+4 ; 0x2858 <__udivmodhi4_ep> + 2854: a6 1b sub r26, r22 + 2856: b7 0b sbc r27, r23 + +00002858 <__udivmodhi4_ep>: + 2858: 88 1f adc r24, r24 + 285a: 99 1f adc r25, r25 + 285c: 5a 95 dec r21 + 285e: a9 f7 brne .-22 ; 0x284a <__udivmodhi4_loop> + 2860: 80 95 com r24 + 2862: 90 95 com r25 + 2864: bc 01 movw r22, r24 + 2866: cd 01 movw r24, r26 + 2868: 08 95 ret + +0000286a <__tablejump2__>: + 286a: ee 0f add r30, r30 + 286c: ff 1f adc r31, r31 + +0000286e <__tablejump__>: + 286e: 05 90 lpm r0, Z+ + 2870: f4 91 lpm r31, Z + 2872: e0 2d mov r30, r0 + 2874: 09 94 ijmp + +00002876 : + 2876: fb 01 movw r30, r22 + 2878: dc 01 movw r26, r24 + 287a: 02 c0 rjmp .+4 ; 0x2880 + 287c: 01 90 ld r0, Z+ + 287e: 0d 92 st X+, r0 + 2880: 41 50 subi r20, 0x01 ; 1 + 2882: 50 40 sbci r21, 0x00 ; 0 + 2884: d8 f7 brcc .-10 ; 0x287c + 2886: 08 95 ret + +00002888 <_exit>: + 2888: f8 94 cli + +0000288a <__stop_program>: + 288a: ff cf rjmp .-2 ; 0x288a <__stop_program> diff --git a/AVR Code/USB_BULK_TEST/Debug/USB_BULK_TEST.map b/AVR Code/USB_BULK_TEST/Debug/USB_BULK_TEST.map new file mode 100644 index 00000000..de13dd0f --- /dev/null +++ b/AVR Code/USB_BULK_TEST/Debug/USB_BULK_TEST.map @@ -0,0 +1,2825 @@ +Archive member included because of file (symbol) + +c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_udivmodhi4.o) + src/ASF/xmega/drivers/usb/usb_device.o (__udivmodhi4) +c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_exit.o) + c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avrxmega2/crtx32a4u.o (exit) +c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_tablejump.o) + src/main.o (__tablejump2__) +c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_copy_data.o) + src/main.o (__do_copy_data) +c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_clear_bss.o) + src/main.o (__do_clear_bss) +c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avrxmega2\libc.a(memcpy.o) + src/ASF/xmega/drivers/nvm/nvm.o (memcpy) + +Allocating common symbols +Common symbol size file + +dacBuf_CH1 0x200 src/main.o +udd_g_ctrlreq 0x10 src/main.o +sleepmgr_locks 0x6 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o +dacBuf_CH2 0x200 src/main.o +isoBuf 0x5dc src/main.o + +Discarded input sections + + .data 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avrxmega2/crtx32a4u.o + .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avrxmega2/crtx32a4u.o + .group 0x00000000 0x8 src/tiny_dig.o + .group 0x00000000 0x8 src/tiny_dig.o + .group 0x00000000 0x8 src/tiny_dig.o + .group 0x00000000 0x8 src/tiny_dig.o + .group 0x00000000 0x8 src/tiny_dig.o + .group 0x00000000 0x8 src/tiny_dig.o + .group 0x00000000 0x8 src/tiny_dig.o + .group 0x00000000 0x8 src/tiny_dig.o + .group 0x00000000 0x8 src/tiny_dig.o + .group 0x00000000 0x8 src/tiny_dig.o + .group 0x00000000 0x8 src/tiny_dig.o + .group 0x00000000 0x8 src/tiny_dig.o + .group 0x00000000 0x8 src/tiny_dig.o + .group 0x00000000 0x8 src/tiny_dig.o + .group 0x00000000 0x8 src/tiny_dig.o + .group 0x00000000 0x8 src/tiny_dig.o + .group 0x00000000 0x8 src/tiny_dig.o + .group 0x00000000 0x8 src/tiny_dig.o + .group 0x00000000 0x8 src/tiny_dig.o + .group 0x00000000 0x8 src/tiny_dig.o + .group 0x00000000 0x8 src/tiny_dig.o + .group 0x00000000 0x8 src/tiny_dig.o + .group 0x00000000 0x8 src/tiny_dig.o + .group 0x00000000 0x8 src/tiny_dig.o + .group 0x00000000 0x8 src/tiny_dig.o + .group 0x00000000 0x8 src/tiny_dig.o + .group 0x00000000 0x8 src/tiny_dig.o + .group 0x00000000 0x8 src/tiny_dig.o + .group 0x00000000 0x8 src/tiny_dig.o + .group 0x00000000 0x8 src/tiny_dig.o + .group 0x00000000 0x8 src/tiny_dig.o + .group 0x00000000 0x8 src/tiny_dig.o + .group 0x00000000 0x8 src/tiny_dig.o + .group 0x00000000 0x8 src/tiny_dig.o + .group 0x00000000 0x8 src/tiny_dig.o + .group 0x00000000 0x8 src/tiny_dig.o + .group 0x00000000 0x8 src/tiny_dig.o + .group 0x00000000 0x8 src/tiny_dig.o + .group 0x00000000 0x8 src/tiny_dig.o + .group 0x00000000 0x8 src/tiny_dig.o + .group 0x00000000 0x8 src/tiny_dig.o + .group 0x00000000 0x8 src/tiny_dig.o + .group 0x00000000 0x8 src/tiny_dig.o + .group 0x00000000 0x8 src/tiny_dig.o + .group 0x00000000 0x8 src/tiny_dig.o + .group 0x00000000 0x8 src/tiny_dig.o + .group 0x00000000 0x8 src/tiny_dig.o + .group 0x00000000 0x8 src/tiny_dig.o + .group 0x00000000 0x8 src/tiny_dig.o + .group 0x00000000 0x8 src/tiny_dig.o + .text 0x00000000 0x0 src/tiny_dig.o + .data 0x00000000 0x0 src/tiny_dig.o + .bss 0x00000000 0x0 src/tiny_dig.o + .group 0x00000000 0x8 src/ASF/common/boards/user_board/init.o + .group 0x00000000 0x8 src/ASF/common/boards/user_board/init.o + .group 0x00000000 0x8 src/ASF/common/boards/user_board/init.o + .group 0x00000000 0x8 src/ASF/common/boards/user_board/init.o + .group 0x00000000 0x8 src/ASF/common/boards/user_board/init.o + .group 0x00000000 0x8 src/ASF/common/boards/user_board/init.o + .group 0x00000000 0x8 src/ASF/common/boards/user_board/init.o + .group 0x00000000 0x8 src/ASF/common/boards/user_board/init.o + .group 0x00000000 0x8 src/ASF/common/boards/user_board/init.o + .group 0x00000000 0x8 src/ASF/common/boards/user_board/init.o + .group 0x00000000 0x8 src/ASF/common/boards/user_board/init.o + .group 0x00000000 0x8 src/ASF/common/boards/user_board/init.o + .group 0x00000000 0x8 src/ASF/common/boards/user_board/init.o + .group 0x00000000 0x8 src/ASF/common/boards/user_board/init.o + .group 0x00000000 0x8 src/ASF/common/boards/user_board/init.o + .group 0x00000000 0x8 src/ASF/common/boards/user_board/init.o + .group 0x00000000 0x8 src/ASF/common/boards/user_board/init.o + .group 0x00000000 0x8 src/ASF/common/boards/user_board/init.o + .group 0x00000000 0x8 src/ASF/common/boards/user_board/init.o + .group 0x00000000 0x8 src/ASF/common/boards/user_board/init.o + .group 0x00000000 0x8 src/ASF/common/boards/user_board/init.o + .group 0x00000000 0x8 src/ASF/common/boards/user_board/init.o + .group 0x00000000 0x8 src/ASF/common/boards/user_board/init.o + .group 0x00000000 0x8 src/ASF/common/boards/user_board/init.o + .group 0x00000000 0x8 src/ASF/common/boards/user_board/init.o + .group 0x00000000 0x8 src/ASF/common/boards/user_board/init.o + .group 0x00000000 0x8 src/ASF/common/boards/user_board/init.o + .group 0x00000000 0x8 src/ASF/common/boards/user_board/init.o + .group 0x00000000 0x8 src/ASF/common/boards/user_board/init.o + .group 0x00000000 0x8 src/ASF/common/boards/user_board/init.o + .group 0x00000000 0x8 src/ASF/common/boards/user_board/init.o + .group 0x00000000 0x8 src/ASF/common/boards/user_board/init.o + .group 0x00000000 0x8 src/ASF/common/boards/user_board/init.o + .group 0x00000000 0x8 src/ASF/common/boards/user_board/init.o + .group 0x00000000 0x8 src/ASF/common/boards/user_board/init.o + .group 0x00000000 0x8 src/ASF/common/boards/user_board/init.o + .group 0x00000000 0x8 src/ASF/common/boards/user_board/init.o + .group 0x00000000 0x8 src/ASF/common/boards/user_board/init.o + .group 0x00000000 0x8 src/ASF/common/boards/user_board/init.o + .group 0x00000000 0x8 src/ASF/common/boards/user_board/init.o + .group 0x00000000 0x8 src/ASF/common/boards/user_board/init.o + .group 0x00000000 0x8 src/ASF/common/boards/user_board/init.o + .group 0x00000000 0x8 src/ASF/common/boards/user_board/init.o + .group 0x00000000 0x8 src/ASF/common/boards/user_board/init.o + .group 0x00000000 0x8 src/ASF/common/boards/user_board/init.o + .group 0x00000000 0x8 src/ASF/common/boards/user_board/init.o + .group 0x00000000 0x8 src/ASF/common/boards/user_board/init.o + .group 0x00000000 0x8 src/ASF/common/boards/user_board/init.o + .group 0x00000000 0x8 src/ASF/common/boards/user_board/init.o + .text 0x00000000 0x0 src/ASF/common/boards/user_board/init.o + .data 0x00000000 0x0 src/ASF/common/boards/user_board/init.o + .bss 0x00000000 0x0 src/ASF/common/boards/user_board/init.o + .debug_macro 0x00000000 0xa3c src/ASF/common/boards/user_board/init.o + .debug_macro 0x00000000 0x10 src/ASF/common/boards/user_board/init.o + .debug_macro 0x00000000 0x1ad src/ASF/common/boards/user_board/init.o + .debug_macro 0x00000000 0x293 src/ASF/common/boards/user_board/init.o + .debug_macro 0x00000000 0x9e src/ASF/common/boards/user_board/init.o + .debug_macro 0x00000000 0x5486 src/ASF/common/boards/user_board/init.o + .debug_macro 0x00000000 0x9a src/ASF/common/boards/user_board/init.o + .debug_macro 0x00000000 0xf1 src/ASF/common/boards/user_board/init.o + .debug_macro 0x00000000 0x34 src/ASF/common/boards/user_board/init.o + .debug_macro 0x00000000 0x10 src/ASF/common/boards/user_board/init.o + .debug_macro 0x00000000 0x18 src/ASF/common/boards/user_board/init.o + .debug_macro 0x00000000 0x5e src/ASF/common/boards/user_board/init.o + .debug_macro 0x00000000 0x10 src/ASF/common/boards/user_board/init.o + .debug_macro 0x00000000 0x22 src/ASF/common/boards/user_board/init.o + .debug_macro 0x00000000 0x166 src/ASF/common/boards/user_board/init.o + .debug_macro 0x00000000 0x1c src/ASF/common/boards/user_board/init.o + .debug_macro 0x00000000 0x35 src/ASF/common/boards/user_board/init.o + .debug_macro 0x00000000 0x66 src/ASF/common/boards/user_board/init.o + .debug_macro 0x00000000 0x4d1 src/ASF/common/boards/user_board/init.o + .debug_macro 0x00000000 0x97 src/ASF/common/boards/user_board/init.o + .debug_macro 0x00000000 0x17 src/ASF/common/boards/user_board/init.o + .debug_macro 0x00000000 0x250 src/ASF/common/boards/user_board/init.o + .debug_macro 0x00000000 0x76 src/ASF/common/boards/user_board/init.o + .debug_macro 0x00000000 0x16 src/ASF/common/boards/user_board/init.o + .debug_macro 0x00000000 0x6e3 src/ASF/common/boards/user_board/init.o + .debug_macro 0x00000000 0x10 src/ASF/common/boards/user_board/init.o + .debug_macro 0x00000000 0x175 src/ASF/common/boards/user_board/init.o + .debug_macro 0x00000000 0x40 src/ASF/common/boards/user_board/init.o + .debug_macro 0x00000000 0x69 src/ASF/common/boards/user_board/init.o + .debug_macro 0x00000000 0x32 src/ASF/common/boards/user_board/init.o + .debug_macro 0x00000000 0xe4 src/ASF/common/boards/user_board/init.o + .debug_macro 0x00000000 0x34 src/ASF/common/boards/user_board/init.o + .debug_macro 0x00000000 0x256 src/ASF/common/boards/user_board/init.o + .debug_macro 0x00000000 0x7c src/ASF/common/boards/user_board/init.o + .debug_macro 0x00000000 0x26 src/ASF/common/boards/user_board/init.o + .debug_macro 0x00000000 0x5e src/ASF/common/boards/user_board/init.o + .debug_macro 0x00000000 0x10 src/ASF/common/boards/user_board/init.o + .debug_macro 0x00000000 0x2e src/ASF/common/boards/user_board/init.o + .debug_macro 0x00000000 0x68 src/ASF/common/boards/user_board/init.o + .debug_macro 0x00000000 0x2f src/ASF/common/boards/user_board/init.o + .debug_macro 0x00000000 0x154 src/ASF/common/boards/user_board/init.o + .debug_macro 0x00000000 0x9a src/ASF/common/boards/user_board/init.o + .debug_macro 0x00000000 0x4c src/ASF/common/boards/user_board/init.o + .debug_macro 0x00000000 0x244 src/ASF/common/boards/user_board/init.o + .debug_macro 0x00000000 0x17e src/ASF/common/boards/user_board/init.o + .debug_macro 0x00000000 0x1c src/ASF/common/boards/user_board/init.o + .debug_macro 0x00000000 0x16 src/ASF/common/boards/user_board/init.o + .debug_macro 0x00000000 0x1c src/ASF/common/boards/user_board/init.o + .debug_macro 0x00000000 0x7b src/ASF/common/boards/user_board/init.o + .group 0x00000000 0x8 src/ASF/common/services/ioport/xmega/ioport_compat.o + .group 0x00000000 0x8 src/ASF/common/services/ioport/xmega/ioport_compat.o + .group 0x00000000 0x8 src/ASF/common/services/ioport/xmega/ioport_compat.o + .group 0x00000000 0x8 src/ASF/common/services/ioport/xmega/ioport_compat.o + .group 0x00000000 0x8 src/ASF/common/services/ioport/xmega/ioport_compat.o + .group 0x00000000 0x8 src/ASF/common/services/ioport/xmega/ioport_compat.o + .group 0x00000000 0x8 src/ASF/common/services/ioport/xmega/ioport_compat.o + .group 0x00000000 0x8 src/ASF/common/services/ioport/xmega/ioport_compat.o + .group 0x00000000 0x8 src/ASF/common/services/ioport/xmega/ioport_compat.o + .group 0x00000000 0x8 src/ASF/common/services/ioport/xmega/ioport_compat.o + .group 0x00000000 0x8 src/ASF/common/services/ioport/xmega/ioport_compat.o + .group 0x00000000 0x8 src/ASF/common/services/ioport/xmega/ioport_compat.o + .group 0x00000000 0x8 src/ASF/common/services/ioport/xmega/ioport_compat.o + .group 0x00000000 0x8 src/ASF/common/services/ioport/xmega/ioport_compat.o + .group 0x00000000 0x8 src/ASF/common/services/ioport/xmega/ioport_compat.o + .group 0x00000000 0x8 src/ASF/common/services/ioport/xmega/ioport_compat.o + .group 0x00000000 0x8 src/ASF/common/services/ioport/xmega/ioport_compat.o + .group 0x00000000 0x8 src/ASF/common/services/ioport/xmega/ioport_compat.o + .group 0x00000000 0x8 src/ASF/common/services/ioport/xmega/ioport_compat.o + .group 0x00000000 0x8 src/ASF/common/services/ioport/xmega/ioport_compat.o + .group 0x00000000 0x8 src/ASF/common/services/ioport/xmega/ioport_compat.o + .group 0x00000000 0x8 src/ASF/common/services/ioport/xmega/ioport_compat.o + .group 0x00000000 0x8 src/ASF/common/services/ioport/xmega/ioport_compat.o + .group 0x00000000 0x8 src/ASF/common/services/ioport/xmega/ioport_compat.o + .group 0x00000000 0x8 src/ASF/common/services/ioport/xmega/ioport_compat.o + .group 0x00000000 0x8 src/ASF/common/services/ioport/xmega/ioport_compat.o + .group 0x00000000 0x8 src/ASF/common/services/ioport/xmega/ioport_compat.o + .group 0x00000000 0x8 src/ASF/common/services/ioport/xmega/ioport_compat.o + .group 0x00000000 0x8 src/ASF/common/services/ioport/xmega/ioport_compat.o + .group 0x00000000 0x8 src/ASF/common/services/ioport/xmega/ioport_compat.o + .group 0x00000000 0x8 src/ASF/common/services/ioport/xmega/ioport_compat.o + .group 0x00000000 0x8 src/ASF/common/services/ioport/xmega/ioport_compat.o + .group 0x00000000 0x8 src/ASF/common/services/ioport/xmega/ioport_compat.o + .text 0x00000000 0x0 src/ASF/common/services/ioport/xmega/ioport_compat.o + .data 0x00000000 0x0 src/ASF/common/services/ioport/xmega/ioport_compat.o + .bss 0x00000000 0x0 src/ASF/common/services/ioport/xmega/ioport_compat.o + .debug_info 0x00000000 0x6f src/ASF/common/services/ioport/xmega/ioport_compat.o + .debug_abbrev 0x00000000 0x29 src/ASF/common/services/ioport/xmega/ioport_compat.o + .debug_aranges + 0x00000000 0x18 src/ASF/common/services/ioport/xmega/ioport_compat.o + .debug_macro 0x00000000 0x18f src/ASF/common/services/ioport/xmega/ioport_compat.o + .debug_macro 0x00000000 0xa3c src/ASF/common/services/ioport/xmega/ioport_compat.o + .debug_macro 0x00000000 0x4d1 src/ASF/common/services/ioport/xmega/ioport_compat.o + .debug_macro 0x00000000 0x10 src/ASF/common/services/ioport/xmega/ioport_compat.o + .debug_macro 0x00000000 0x1ad src/ASF/common/services/ioport/xmega/ioport_compat.o + .debug_macro 0x00000000 0x293 src/ASF/common/services/ioport/xmega/ioport_compat.o + .debug_macro 0x00000000 0x9e src/ASF/common/services/ioport/xmega/ioport_compat.o + .debug_macro 0x00000000 0x5486 src/ASF/common/services/ioport/xmega/ioport_compat.o + .debug_macro 0x00000000 0x9a src/ASF/common/services/ioport/xmega/ioport_compat.o + .debug_macro 0x00000000 0xf1 src/ASF/common/services/ioport/xmega/ioport_compat.o + .debug_macro 0x00000000 0x34 src/ASF/common/services/ioport/xmega/ioport_compat.o + .debug_macro 0x00000000 0x10 src/ASF/common/services/ioport/xmega/ioport_compat.o + .debug_macro 0x00000000 0x18 src/ASF/common/services/ioport/xmega/ioport_compat.o + .debug_macro 0x00000000 0x5e src/ASF/common/services/ioport/xmega/ioport_compat.o + .debug_macro 0x00000000 0x10 src/ASF/common/services/ioport/xmega/ioport_compat.o + .debug_macro 0x00000000 0x22 src/ASF/common/services/ioport/xmega/ioport_compat.o + .debug_macro 0x00000000 0x166 src/ASF/common/services/ioport/xmega/ioport_compat.o + .debug_macro 0x00000000 0x1c src/ASF/common/services/ioport/xmega/ioport_compat.o + .debug_macro 0x00000000 0x35 src/ASF/common/services/ioport/xmega/ioport_compat.o + .debug_macro 0x00000000 0x66 src/ASF/common/services/ioport/xmega/ioport_compat.o + .debug_macro 0x00000000 0x97 src/ASF/common/services/ioport/xmega/ioport_compat.o + .debug_macro 0x00000000 0x17 src/ASF/common/services/ioport/xmega/ioport_compat.o + .debug_macro 0x00000000 0x250 src/ASF/common/services/ioport/xmega/ioport_compat.o + .debug_macro 0x00000000 0x76 src/ASF/common/services/ioport/xmega/ioport_compat.o + .debug_macro 0x00000000 0x16 src/ASF/common/services/ioport/xmega/ioport_compat.o + .debug_macro 0x00000000 0x6e3 src/ASF/common/services/ioport/xmega/ioport_compat.o + .debug_macro 0x00000000 0x10 src/ASF/common/services/ioport/xmega/ioport_compat.o + .debug_macro 0x00000000 0x175 src/ASF/common/services/ioport/xmega/ioport_compat.o + .debug_macro 0x00000000 0x40 src/ASF/common/services/ioport/xmega/ioport_compat.o + .debug_macro 0x00000000 0x69 src/ASF/common/services/ioport/xmega/ioport_compat.o + .debug_macro 0x00000000 0x32 src/ASF/common/services/ioport/xmega/ioport_compat.o + .debug_macro 0x00000000 0xe4 src/ASF/common/services/ioport/xmega/ioport_compat.o + .debug_macro 0x00000000 0x7c src/ASF/common/services/ioport/xmega/ioport_compat.o + .debug_macro 0x00000000 0x109 src/ASF/common/services/ioport/xmega/ioport_compat.o + .debug_line 0x00000000 0x424 src/ASF/common/services/ioport/xmega/ioport_compat.o + .debug_str 0x00000000 0x23bac src/ASF/common/services/ioport/xmega/ioport_compat.o + .comment 0x00000000 0x31 src/ASF/common/services/ioport/xmega/ioport_compat.o + .group 0x00000000 0x8 src/main.o + .group 0x00000000 0x8 src/main.o + .group 0x00000000 0x8 src/main.o + .group 0x00000000 0x8 src/main.o + .group 0x00000000 0x8 src/main.o + .group 0x00000000 0x8 src/main.o + .group 0x00000000 0x8 src/main.o + .group 0x00000000 0x8 src/main.o + .group 0x00000000 0x8 src/main.o + .group 0x00000000 0x8 src/main.o + .group 0x00000000 0x8 src/main.o + .group 0x00000000 0x8 src/main.o + .group 0x00000000 0x8 src/main.o + .group 0x00000000 0x8 src/main.o + .group 0x00000000 0x8 src/main.o + .group 0x00000000 0x8 src/main.o + .group 0x00000000 0x8 src/main.o + .group 0x00000000 0x8 src/main.o + .group 0x00000000 0x8 src/main.o + .group 0x00000000 0x8 src/main.o + .group 0x00000000 0x8 src/main.o + .group 0x00000000 0x8 src/main.o + .group 0x00000000 0x8 src/main.o + .group 0x00000000 0x8 src/main.o + .group 0x00000000 0x8 src/main.o + .group 0x00000000 0x8 src/main.o + .group 0x00000000 0x8 src/main.o + .group 0x00000000 0x8 src/main.o + .group 0x00000000 0x8 src/main.o + .group 0x00000000 0x8 src/main.o + .group 0x00000000 0x8 src/main.o + .group 0x00000000 0x8 src/main.o + .group 0x00000000 0x8 src/main.o + .group 0x00000000 0x8 src/main.o + .group 0x00000000 0x8 src/main.o + .group 0x00000000 0x8 src/main.o + .group 0x00000000 0x8 src/main.o + .group 0x00000000 0x8 src/main.o + .group 0x00000000 0x8 src/main.o + .group 0x00000000 0x8 src/main.o + .group 0x00000000 0x8 src/main.o + .group 0x00000000 0x8 src/main.o + .group 0x00000000 0x8 src/main.o + .group 0x00000000 0x8 src/main.o + .group 0x00000000 0x8 src/main.o + .group 0x00000000 0x8 src/main.o + .group 0x00000000 0x8 src/main.o + .group 0x00000000 0x8 src/main.o + .group 0x00000000 0x8 src/main.o + .group 0x00000000 0x8 src/main.o + .group 0x00000000 0x8 src/main.o + .group 0x00000000 0x8 src/main.o + .group 0x00000000 0x8 src/main.o + .text 0x00000000 0x0 src/main.o + .data 0x00000000 0x0 src/main.o + .bss 0x00000000 0x0 src/main.o + .data.test_byte + 0x00000000 0x1 src/main.o + .debug_macro 0x00000000 0xa3c src/main.o + .debug_macro 0x00000000 0x1ad src/main.o + .debug_macro 0x00000000 0x293 src/main.o + .debug_macro 0x00000000 0x5486 src/main.o + .debug_macro 0x00000000 0x9a src/main.o + .debug_macro 0x00000000 0xf1 src/main.o + .debug_macro 0x00000000 0x34 src/main.o + .debug_macro 0x00000000 0x10 src/main.o + .debug_macro 0x00000000 0x18 src/main.o + .debug_macro 0x00000000 0x5e src/main.o + .debug_macro 0x00000000 0x10 src/main.o + .debug_macro 0x00000000 0x22 src/main.o + .debug_macro 0x00000000 0x1c src/main.o + .debug_macro 0x00000000 0x35 src/main.o + .debug_macro 0x00000000 0x66 src/main.o + .debug_macro 0x00000000 0x4d1 src/main.o + .debug_macro 0x00000000 0x97 src/main.o + .debug_macro 0x00000000 0x17 src/main.o + .debug_macro 0x00000000 0x250 src/main.o + .debug_macro 0x00000000 0x76 src/main.o + .debug_macro 0x00000000 0x16 src/main.o + .debug_macro 0x00000000 0x6e3 src/main.o + .debug_macro 0x00000000 0x10 src/main.o + .debug_macro 0x00000000 0x175 src/main.o + .debug_macro 0x00000000 0x40 src/main.o + .debug_macro 0x00000000 0x69 src/main.o + .debug_macro 0x00000000 0x32 src/main.o + .debug_macro 0x00000000 0xe4 src/main.o + .debug_macro 0x00000000 0x34 src/main.o + .debug_macro 0x00000000 0x256 src/main.o + .debug_macro 0x00000000 0x7c src/main.o + .debug_macro 0x00000000 0x26 src/main.o + .debug_macro 0x00000000 0x5e src/main.o + .debug_macro 0x00000000 0x10 src/main.o + .debug_macro 0x00000000 0x2e src/main.o + .debug_macro 0x00000000 0x68 src/main.o + .debug_macro 0x00000000 0x2f src/main.o + .debug_macro 0x00000000 0x154 src/main.o + .debug_macro 0x00000000 0x9a src/main.o + .debug_macro 0x00000000 0x4c src/main.o + .debug_macro 0x00000000 0x244 src/main.o + .debug_macro 0x00000000 0x17e src/main.o + .debug_macro 0x00000000 0x1c src/main.o + .debug_macro 0x00000000 0x16 src/main.o + .debug_macro 0x00000000 0x1c src/main.o + .debug_macro 0x00000000 0x7b src/main.o + .debug_macro 0x00000000 0x58 src/main.o + .group 0x00000000 0x8 src/tiny_adc.o + .group 0x00000000 0x8 src/tiny_adc.o + .group 0x00000000 0x8 src/tiny_adc.o + .group 0x00000000 0x8 src/tiny_adc.o + .group 0x00000000 0x8 src/tiny_adc.o + .group 0x00000000 0x8 src/tiny_adc.o + .group 0x00000000 0x8 src/tiny_adc.o + .group 0x00000000 0x8 src/tiny_adc.o + .group 0x00000000 0x8 src/tiny_adc.o + .group 0x00000000 0x8 src/tiny_adc.o + .group 0x00000000 0x8 src/tiny_adc.o + .group 0x00000000 0x8 src/tiny_adc.o + .group 0x00000000 0x8 src/tiny_adc.o + .group 0x00000000 0x8 src/tiny_adc.o + .group 0x00000000 0x8 src/tiny_adc.o + .group 0x00000000 0x8 src/tiny_adc.o + .group 0x00000000 0x8 src/tiny_adc.o + .group 0x00000000 0x8 src/tiny_adc.o + .group 0x00000000 0x8 src/tiny_adc.o + .group 0x00000000 0x8 src/tiny_adc.o + .group 0x00000000 0x8 src/tiny_adc.o + .group 0x00000000 0x8 src/tiny_adc.o + .group 0x00000000 0x8 src/tiny_adc.o + .group 0x00000000 0x8 src/tiny_adc.o + .group 0x00000000 0x8 src/tiny_adc.o + .group 0x00000000 0x8 src/tiny_adc.o + .group 0x00000000 0x8 src/tiny_adc.o + .group 0x00000000 0x8 src/tiny_adc.o + .group 0x00000000 0x8 src/tiny_adc.o + .group 0x00000000 0x8 src/tiny_adc.o + .group 0x00000000 0x8 src/tiny_adc.o + .group 0x00000000 0x8 src/tiny_adc.o + .group 0x00000000 0x8 src/tiny_adc.o + .group 0x00000000 0x8 src/tiny_adc.o + .group 0x00000000 0x8 src/tiny_adc.o + .group 0x00000000 0x8 src/tiny_adc.o + .group 0x00000000 0x8 src/tiny_adc.o + .group 0x00000000 0x8 src/tiny_adc.o + .group 0x00000000 0x8 src/tiny_adc.o + .group 0x00000000 0x8 src/tiny_adc.o + .group 0x00000000 0x8 src/tiny_adc.o + .group 0x00000000 0x8 src/tiny_adc.o + .group 0x00000000 0x8 src/tiny_adc.o + .group 0x00000000 0x8 src/tiny_adc.o + .group 0x00000000 0x8 src/tiny_adc.o + .group 0x00000000 0x8 src/tiny_adc.o + .group 0x00000000 0x8 src/tiny_adc.o + .group 0x00000000 0x8 src/tiny_adc.o + .group 0x00000000 0x8 src/tiny_adc.o + .group 0x00000000 0x8 src/tiny_adc.o + .group 0x00000000 0x8 src/tiny_adc.o + .group 0x00000000 0x8 src/tiny_adc.o + .group 0x00000000 0x8 src/tiny_adc.o + .group 0x00000000 0x8 src/tiny_adc.o + .text 0x00000000 0x0 src/tiny_adc.o + .data 0x00000000 0x0 src/tiny_adc.o + .bss 0x00000000 0x0 src/tiny_adc.o + .debug_macro 0x00000000 0xa3c src/tiny_adc.o + .debug_macro 0x00000000 0x1ad src/tiny_adc.o + .debug_macro 0x00000000 0x293 src/tiny_adc.o + .debug_macro 0x00000000 0x58 src/tiny_adc.o + .debug_macro 0x00000000 0x10 src/tiny_adc.o + .debug_macro 0x00000000 0x97 src/tiny_adc.o + .debug_macro 0x00000000 0xeb src/tiny_adc.o + .debug_macro 0x00000000 0xaa src/tiny_adc.o + .debug_macro 0x00000000 0x5486 src/tiny_adc.o + .debug_macro 0x00000000 0x9a src/tiny_adc.o + .debug_macro 0x00000000 0xf1 src/tiny_adc.o + .debug_macro 0x00000000 0x34 src/tiny_adc.o + .debug_macro 0x00000000 0x10 src/tiny_adc.o + .debug_macro 0x00000000 0x18 src/tiny_adc.o + .debug_macro 0x00000000 0x5e src/tiny_adc.o + .debug_macro 0x00000000 0x10 src/tiny_adc.o + .debug_macro 0x00000000 0x22 src/tiny_adc.o + .debug_macro 0x00000000 0xef src/tiny_adc.o + .debug_macro 0x00000000 0x1c src/tiny_adc.o + .debug_macro 0x00000000 0x35 src/tiny_adc.o + .debug_macro 0x00000000 0x66 src/tiny_adc.o + .debug_macro 0x00000000 0x4d1 src/tiny_adc.o + .debug_macro 0x00000000 0x97 src/tiny_adc.o + .debug_macro 0x00000000 0x17 src/tiny_adc.o + .debug_macro 0x00000000 0x250 src/tiny_adc.o + .debug_macro 0x00000000 0x76 src/tiny_adc.o + .debug_macro 0x00000000 0x16 src/tiny_adc.o + .debug_macro 0x00000000 0x6e3 src/tiny_adc.o + .debug_macro 0x00000000 0x10 src/tiny_adc.o + .debug_macro 0x00000000 0x175 src/tiny_adc.o + .debug_macro 0x00000000 0x40 src/tiny_adc.o + .debug_macro 0x00000000 0x69 src/tiny_adc.o + .debug_macro 0x00000000 0x32 src/tiny_adc.o + .debug_macro 0x00000000 0xe4 src/tiny_adc.o + .debug_macro 0x00000000 0x34 src/tiny_adc.o + .debug_macro 0x00000000 0x256 src/tiny_adc.o + .debug_macro 0x00000000 0x7c src/tiny_adc.o + .debug_macro 0x00000000 0x26 src/tiny_adc.o + .debug_macro 0x00000000 0x5e src/tiny_adc.o + .debug_macro 0x00000000 0x10 src/tiny_adc.o + .debug_macro 0x00000000 0x2e src/tiny_adc.o + .debug_macro 0x00000000 0x68 src/tiny_adc.o + .debug_macro 0x00000000 0x2f src/tiny_adc.o + .debug_macro 0x00000000 0x154 src/tiny_adc.o + .debug_macro 0x00000000 0x9a src/tiny_adc.o + .debug_macro 0x00000000 0x4c src/tiny_adc.o + .debug_macro 0x00000000 0x244 src/tiny_adc.o + .debug_macro 0x00000000 0x17e src/tiny_adc.o + .debug_macro 0x00000000 0x1c src/tiny_adc.o + .debug_macro 0x00000000 0x16 src/tiny_adc.o + .debug_macro 0x00000000 0x1c src/tiny_adc.o + .debug_macro 0x00000000 0x7b src/tiny_adc.o + .debug_macro 0x00000000 0x58 src/tiny_adc.o + .group 0x00000000 0x8 src/tiny_dac.o + .group 0x00000000 0x8 src/tiny_dac.o + .group 0x00000000 0x8 src/tiny_dac.o + .group 0x00000000 0x8 src/tiny_dac.o + .group 0x00000000 0x8 src/tiny_dac.o + .group 0x00000000 0x8 src/tiny_dac.o + .group 0x00000000 0x8 src/tiny_dac.o + .group 0x00000000 0x8 src/tiny_dac.o + .group 0x00000000 0x8 src/tiny_dac.o + .group 0x00000000 0x8 src/tiny_dac.o + .group 0x00000000 0x8 src/tiny_dac.o + .group 0x00000000 0x8 src/tiny_dac.o + .group 0x00000000 0x8 src/tiny_dac.o + .group 0x00000000 0x8 src/tiny_dac.o + .group 0x00000000 0x8 src/tiny_dac.o + .group 0x00000000 0x8 src/tiny_dac.o + .group 0x00000000 0x8 src/tiny_dac.o + .group 0x00000000 0x8 src/tiny_dac.o + .group 0x00000000 0x8 src/tiny_dac.o + .group 0x00000000 0x8 src/tiny_dac.o + .group 0x00000000 0x8 src/tiny_dac.o + .group 0x00000000 0x8 src/tiny_dac.o + .group 0x00000000 0x8 src/tiny_dac.o + .group 0x00000000 0x8 src/tiny_dac.o + .group 0x00000000 0x8 src/tiny_dac.o + .group 0x00000000 0x8 src/tiny_dac.o + .group 0x00000000 0x8 src/tiny_dac.o + .group 0x00000000 0x8 src/tiny_dac.o + .group 0x00000000 0x8 src/tiny_dac.o + .group 0x00000000 0x8 src/tiny_dac.o + .group 0x00000000 0x8 src/tiny_dac.o + .group 0x00000000 0x8 src/tiny_dac.o + .group 0x00000000 0x8 src/tiny_dac.o + .group 0x00000000 0x8 src/tiny_dac.o + .group 0x00000000 0x8 src/tiny_dac.o + .group 0x00000000 0x8 src/tiny_dac.o + .group 0x00000000 0x8 src/tiny_dac.o + .group 0x00000000 0x8 src/tiny_dac.o + .group 0x00000000 0x8 src/tiny_dac.o + .group 0x00000000 0x8 src/tiny_dac.o + .group 0x00000000 0x8 src/tiny_dac.o + .group 0x00000000 0x8 src/tiny_dac.o + .group 0x00000000 0x8 src/tiny_dac.o + .group 0x00000000 0x8 src/tiny_dac.o + .group 0x00000000 0x8 src/tiny_dac.o + .group 0x00000000 0x8 src/tiny_dac.o + .group 0x00000000 0x8 src/tiny_dac.o + .group 0x00000000 0x8 src/tiny_dac.o + .group 0x00000000 0x8 src/tiny_dac.o + .group 0x00000000 0x8 src/tiny_dac.o + .group 0x00000000 0x8 src/tiny_dac.o + .group 0x00000000 0x8 src/tiny_dac.o + .text 0x00000000 0x0 src/tiny_dac.o + .data 0x00000000 0x0 src/tiny_dac.o + .bss 0x00000000 0x0 src/tiny_dac.o + .debug_macro 0x00000000 0xa3c src/tiny_dac.o + .debug_macro 0x00000000 0x10 src/tiny_dac.o + .debug_macro 0x00000000 0x1ad src/tiny_dac.o + .debug_macro 0x00000000 0x293 src/tiny_dac.o + .debug_macro 0x00000000 0x9e src/tiny_dac.o + .debug_macro 0x00000000 0x5486 src/tiny_dac.o + .debug_macro 0x00000000 0x9a src/tiny_dac.o + .debug_macro 0x00000000 0xf1 src/tiny_dac.o + .debug_macro 0x00000000 0x34 src/tiny_dac.o + .debug_macro 0x00000000 0x10 src/tiny_dac.o + .debug_macro 0x00000000 0x18 src/tiny_dac.o + .debug_macro 0x00000000 0x5e src/tiny_dac.o + .debug_macro 0x00000000 0x10 src/tiny_dac.o + .debug_macro 0x00000000 0x22 src/tiny_dac.o + .debug_macro 0x00000000 0x166 src/tiny_dac.o + .debug_macro 0x00000000 0x1c src/tiny_dac.o + .debug_macro 0x00000000 0x35 src/tiny_dac.o + .debug_macro 0x00000000 0x66 src/tiny_dac.o + .debug_macro 0x00000000 0x4d1 src/tiny_dac.o + .debug_macro 0x00000000 0x97 src/tiny_dac.o + .debug_macro 0x00000000 0x17 src/tiny_dac.o + .debug_macro 0x00000000 0x250 src/tiny_dac.o + .debug_macro 0x00000000 0x76 src/tiny_dac.o + .debug_macro 0x00000000 0x16 src/tiny_dac.o + .debug_macro 0x00000000 0x6e3 src/tiny_dac.o + .debug_macro 0x00000000 0x10 src/tiny_dac.o + .debug_macro 0x00000000 0x175 src/tiny_dac.o + .debug_macro 0x00000000 0x40 src/tiny_dac.o + .debug_macro 0x00000000 0x69 src/tiny_dac.o + .debug_macro 0x00000000 0x32 src/tiny_dac.o + .debug_macro 0x00000000 0xe4 src/tiny_dac.o + .debug_macro 0x00000000 0x34 src/tiny_dac.o + .debug_macro 0x00000000 0x256 src/tiny_dac.o + .debug_macro 0x00000000 0x7c src/tiny_dac.o + .debug_macro 0x00000000 0x26 src/tiny_dac.o + .debug_macro 0x00000000 0x5e src/tiny_dac.o + .debug_macro 0x00000000 0x10 src/tiny_dac.o + .debug_macro 0x00000000 0x2e src/tiny_dac.o + .debug_macro 0x00000000 0x68 src/tiny_dac.o + .debug_macro 0x00000000 0x2f src/tiny_dac.o + .debug_macro 0x00000000 0x154 src/tiny_dac.o + .debug_macro 0x00000000 0x9a src/tiny_dac.o + .debug_macro 0x00000000 0x4c src/tiny_dac.o + .debug_macro 0x00000000 0x244 src/tiny_dac.o + .debug_macro 0x00000000 0x17e src/tiny_dac.o + .debug_macro 0x00000000 0x1c src/tiny_dac.o + .debug_macro 0x00000000 0x16 src/tiny_dac.o + .debug_macro 0x00000000 0x1c src/tiny_dac.o + .debug_macro 0x00000000 0x7b src/tiny_dac.o + .debug_macro 0x00000000 0x58 src/tiny_dac.o + .debug_macro 0x00000000 0x10 src/tiny_dac.o + .debug_macro 0x00000000 0xeb src/tiny_dac.o + .group 0x00000000 0x8 src/tiny_dma.o + .group 0x00000000 0x8 src/tiny_dma.o + .group 0x00000000 0x8 src/tiny_dma.o + .group 0x00000000 0x8 src/tiny_dma.o + .group 0x00000000 0x8 src/tiny_dma.o + .group 0x00000000 0x8 src/tiny_dma.o + .group 0x00000000 0x8 src/tiny_dma.o + .group 0x00000000 0x8 src/tiny_dma.o + .group 0x00000000 0x8 src/tiny_dma.o + .group 0x00000000 0x8 src/tiny_dma.o + .group 0x00000000 0x8 src/tiny_dma.o + .group 0x00000000 0x8 src/tiny_dma.o + .group 0x00000000 0x8 src/tiny_dma.o + .group 0x00000000 0x8 src/tiny_dma.o + .group 0x00000000 0x8 src/tiny_dma.o + .group 0x00000000 0x8 src/tiny_dma.o + .group 0x00000000 0x8 src/tiny_dma.o + .group 0x00000000 0x8 src/tiny_dma.o + .group 0x00000000 0x8 src/tiny_dma.o + .group 0x00000000 0x8 src/tiny_dma.o + .group 0x00000000 0x8 src/tiny_dma.o + .group 0x00000000 0x8 src/tiny_dma.o + .group 0x00000000 0x8 src/tiny_dma.o + .group 0x00000000 0x8 src/tiny_dma.o + .group 0x00000000 0x8 src/tiny_dma.o + .group 0x00000000 0x8 src/tiny_dma.o + .group 0x00000000 0x8 src/tiny_dma.o + .group 0x00000000 0x8 src/tiny_dma.o + .group 0x00000000 0x8 src/tiny_dma.o + .group 0x00000000 0x8 src/tiny_dma.o + .group 0x00000000 0x8 src/tiny_dma.o + .group 0x00000000 0x8 src/tiny_dma.o + .group 0x00000000 0x8 src/tiny_dma.o + .group 0x00000000 0x8 src/tiny_dma.o + .group 0x00000000 0x8 src/tiny_dma.o + .group 0x00000000 0x8 src/tiny_dma.o + .group 0x00000000 0x8 src/tiny_dma.o + .group 0x00000000 0x8 src/tiny_dma.o + .group 0x00000000 0x8 src/tiny_dma.o + .group 0x00000000 0x8 src/tiny_dma.o + .group 0x00000000 0x8 src/tiny_dma.o + .group 0x00000000 0x8 src/tiny_dma.o + .group 0x00000000 0x8 src/tiny_dma.o + .group 0x00000000 0x8 src/tiny_dma.o + .group 0x00000000 0x8 src/tiny_dma.o + .group 0x00000000 0x8 src/tiny_dma.o + .group 0x00000000 0x8 src/tiny_dma.o + .group 0x00000000 0x8 src/tiny_dma.o + .group 0x00000000 0x8 src/tiny_dma.o + .group 0x00000000 0x8 src/tiny_dma.o + .group 0x00000000 0x8 src/tiny_dma.o + .group 0x00000000 0x8 src/tiny_dma.o + .group 0x00000000 0x8 src/tiny_dma.o + .text 0x00000000 0x0 src/tiny_dma.o + .data 0x00000000 0x0 src/tiny_dma.o + .bss 0x00000000 0x0 src/tiny_dma.o + .debug_macro 0x00000000 0xa3c src/tiny_dma.o + .debug_macro 0x00000000 0x1ad src/tiny_dma.o + .debug_macro 0x00000000 0x293 src/tiny_dma.o + .debug_macro 0x00000000 0x58 src/tiny_dma.o + .debug_macro 0x00000000 0x10 src/tiny_dma.o + .debug_macro 0x00000000 0x97 src/tiny_dma.o + .debug_macro 0x00000000 0xeb src/tiny_dma.o + .debug_macro 0x00000000 0xaa src/tiny_dma.o + .debug_macro 0x00000000 0x5486 src/tiny_dma.o + .debug_macro 0x00000000 0x9a src/tiny_dma.o + .debug_macro 0x00000000 0xf1 src/tiny_dma.o + .debug_macro 0x00000000 0x34 src/tiny_dma.o + .debug_macro 0x00000000 0x10 src/tiny_dma.o + .debug_macro 0x00000000 0x18 src/tiny_dma.o + .debug_macro 0x00000000 0x5e src/tiny_dma.o + .debug_macro 0x00000000 0x10 src/tiny_dma.o + .debug_macro 0x00000000 0x22 src/tiny_dma.o + .debug_macro 0x00000000 0xef src/tiny_dma.o + .debug_macro 0x00000000 0x1c src/tiny_dma.o + .debug_macro 0x00000000 0x35 src/tiny_dma.o + .debug_macro 0x00000000 0x66 src/tiny_dma.o + .debug_macro 0x00000000 0x4d1 src/tiny_dma.o + .debug_macro 0x00000000 0x97 src/tiny_dma.o + .debug_macro 0x00000000 0x17 src/tiny_dma.o + .debug_macro 0x00000000 0x250 src/tiny_dma.o + .debug_macro 0x00000000 0x76 src/tiny_dma.o + .debug_macro 0x00000000 0x16 src/tiny_dma.o + .debug_macro 0x00000000 0x6e3 src/tiny_dma.o + .debug_macro 0x00000000 0x10 src/tiny_dma.o + .debug_macro 0x00000000 0x175 src/tiny_dma.o + .debug_macro 0x00000000 0x40 src/tiny_dma.o + .debug_macro 0x00000000 0x69 src/tiny_dma.o + .debug_macro 0x00000000 0x32 src/tiny_dma.o + .debug_macro 0x00000000 0xe4 src/tiny_dma.o + .debug_macro 0x00000000 0x34 src/tiny_dma.o + .debug_macro 0x00000000 0x256 src/tiny_dma.o + .debug_macro 0x00000000 0x7c src/tiny_dma.o + .debug_macro 0x00000000 0x26 src/tiny_dma.o + .debug_macro 0x00000000 0x5e src/tiny_dma.o + .debug_macro 0x00000000 0x10 src/tiny_dma.o + .debug_macro 0x00000000 0x2e src/tiny_dma.o + .debug_macro 0x00000000 0x68 src/tiny_dma.o + .debug_macro 0x00000000 0x2f src/tiny_dma.o + .debug_macro 0x00000000 0x154 src/tiny_dma.o + .debug_macro 0x00000000 0x9a src/tiny_dma.o + .debug_macro 0x00000000 0x4c src/tiny_dma.o + .debug_macro 0x00000000 0x244 src/tiny_dma.o + .debug_macro 0x00000000 0x17e src/tiny_dma.o + .debug_macro 0x00000000 0x1c src/tiny_dma.o + .debug_macro 0x00000000 0x16 src/tiny_dma.o + .debug_macro 0x00000000 0x1c src/tiny_dma.o + .debug_macro 0x00000000 0x7b src/tiny_dma.o + .debug_macro 0x00000000 0x58 src/tiny_dma.o + .group 0x00000000 0x8 src/tiny_timer.o + .group 0x00000000 0x8 src/tiny_timer.o + .group 0x00000000 0x8 src/tiny_timer.o + .group 0x00000000 0x8 src/tiny_timer.o + .group 0x00000000 0x8 src/tiny_timer.o + .group 0x00000000 0x8 src/tiny_timer.o + .group 0x00000000 0x8 src/tiny_timer.o + .group 0x00000000 0x8 src/tiny_timer.o + .group 0x00000000 0x8 src/tiny_timer.o + .group 0x00000000 0x8 src/tiny_timer.o + .group 0x00000000 0x8 src/tiny_timer.o + .group 0x00000000 0x8 src/tiny_timer.o + .group 0x00000000 0x8 src/tiny_timer.o + .group 0x00000000 0x8 src/tiny_timer.o + .group 0x00000000 0x8 src/tiny_timer.o + .group 0x00000000 0x8 src/tiny_timer.o + .group 0x00000000 0x8 src/tiny_timer.o + .group 0x00000000 0x8 src/tiny_timer.o + .group 0x00000000 0x8 src/tiny_timer.o + .group 0x00000000 0x8 src/tiny_timer.o + .group 0x00000000 0x8 src/tiny_timer.o + .group 0x00000000 0x8 src/tiny_timer.o + .group 0x00000000 0x8 src/tiny_timer.o + .group 0x00000000 0x8 src/tiny_timer.o + .group 0x00000000 0x8 src/tiny_timer.o + .group 0x00000000 0x8 src/tiny_timer.o + .group 0x00000000 0x8 src/tiny_timer.o + .group 0x00000000 0x8 src/tiny_timer.o + .group 0x00000000 0x8 src/tiny_timer.o + .group 0x00000000 0x8 src/tiny_timer.o + .group 0x00000000 0x8 src/tiny_timer.o + .group 0x00000000 0x8 src/tiny_timer.o + .group 0x00000000 0x8 src/tiny_timer.o + .group 0x00000000 0x8 src/tiny_timer.o + .group 0x00000000 0x8 src/tiny_timer.o + .group 0x00000000 0x8 src/tiny_timer.o + .group 0x00000000 0x8 src/tiny_timer.o + .group 0x00000000 0x8 src/tiny_timer.o + .group 0x00000000 0x8 src/tiny_timer.o + .group 0x00000000 0x8 src/tiny_timer.o + .group 0x00000000 0x8 src/tiny_timer.o + .group 0x00000000 0x8 src/tiny_timer.o + .group 0x00000000 0x8 src/tiny_timer.o + .group 0x00000000 0x8 src/tiny_timer.o + .group 0x00000000 0x8 src/tiny_timer.o + .group 0x00000000 0x8 src/tiny_timer.o + .group 0x00000000 0x8 src/tiny_timer.o + .group 0x00000000 0x8 src/tiny_timer.o + .group 0x00000000 0x8 src/tiny_timer.o + .group 0x00000000 0x8 src/tiny_timer.o + .group 0x00000000 0x8 src/tiny_timer.o + .group 0x00000000 0x8 src/tiny_timer.o + .group 0x00000000 0x8 src/tiny_timer.o + .text 0x00000000 0x0 src/tiny_timer.o + .data 0x00000000 0x0 src/tiny_timer.o + .bss 0x00000000 0x0 src/tiny_timer.o + .debug_macro 0x00000000 0xa3c src/tiny_timer.o + .debug_macro 0x00000000 0x10 src/tiny_timer.o + .debug_macro 0x00000000 0x1ad src/tiny_timer.o + .debug_macro 0x00000000 0x293 src/tiny_timer.o + .debug_macro 0x00000000 0x9e src/tiny_timer.o + .debug_macro 0x00000000 0x5486 src/tiny_timer.o + .debug_macro 0x00000000 0x9a src/tiny_timer.o + .debug_macro 0x00000000 0xf1 src/tiny_timer.o + .debug_macro 0x00000000 0x34 src/tiny_timer.o + .debug_macro 0x00000000 0x10 src/tiny_timer.o + .debug_macro 0x00000000 0x18 src/tiny_timer.o + .debug_macro 0x00000000 0x5e src/tiny_timer.o + .debug_macro 0x00000000 0x10 src/tiny_timer.o + .debug_macro 0x00000000 0x22 src/tiny_timer.o + .debug_macro 0x00000000 0x166 src/tiny_timer.o + .debug_macro 0x00000000 0x1c src/tiny_timer.o + .debug_macro 0x00000000 0x35 src/tiny_timer.o + .debug_macro 0x00000000 0x66 src/tiny_timer.o + .debug_macro 0x00000000 0x4d1 src/tiny_timer.o + .debug_macro 0x00000000 0x97 src/tiny_timer.o + .debug_macro 0x00000000 0x17 src/tiny_timer.o + .debug_macro 0x00000000 0x250 src/tiny_timer.o + .debug_macro 0x00000000 0x76 src/tiny_timer.o + .debug_macro 0x00000000 0x16 src/tiny_timer.o + .debug_macro 0x00000000 0x6e3 src/tiny_timer.o + .debug_macro 0x00000000 0x10 src/tiny_timer.o + .debug_macro 0x00000000 0x175 src/tiny_timer.o + .debug_macro 0x00000000 0x40 src/tiny_timer.o + .debug_macro 0x00000000 0x69 src/tiny_timer.o + .debug_macro 0x00000000 0x32 src/tiny_timer.o + .debug_macro 0x00000000 0xe4 src/tiny_timer.o + .debug_macro 0x00000000 0x34 src/tiny_timer.o + .debug_macro 0x00000000 0x256 src/tiny_timer.o + .debug_macro 0x00000000 0x7c src/tiny_timer.o + .debug_macro 0x00000000 0x26 src/tiny_timer.o + .debug_macro 0x00000000 0x5e src/tiny_timer.o + .debug_macro 0x00000000 0x10 src/tiny_timer.o + .debug_macro 0x00000000 0x2e src/tiny_timer.o + .debug_macro 0x00000000 0x68 src/tiny_timer.o + .debug_macro 0x00000000 0x2f src/tiny_timer.o + .debug_macro 0x00000000 0x154 src/tiny_timer.o + .debug_macro 0x00000000 0x9a src/tiny_timer.o + .debug_macro 0x00000000 0x4c src/tiny_timer.o + .debug_macro 0x00000000 0x244 src/tiny_timer.o + .debug_macro 0x00000000 0x17e src/tiny_timer.o + .debug_macro 0x00000000 0x1c src/tiny_timer.o + .debug_macro 0x00000000 0x16 src/tiny_timer.o + .debug_macro 0x00000000 0x1c src/tiny_timer.o + .debug_macro 0x00000000 0x7b src/tiny_timer.o + .debug_macro 0x00000000 0x58 src/tiny_timer.o + .debug_macro 0x00000000 0x10 src/tiny_timer.o + .debug_macro 0x00000000 0xeb src/tiny_timer.o + .debug_macro 0x00000000 0x58 src/tiny_timer.o + .group 0x00000000 0x8 src/tiny_uart.o + .group 0x00000000 0x8 src/tiny_uart.o + .group 0x00000000 0x8 src/tiny_uart.o + .group 0x00000000 0x8 src/tiny_uart.o + .group 0x00000000 0x8 src/tiny_uart.o + .group 0x00000000 0x8 src/tiny_uart.o + .group 0x00000000 0x8 src/tiny_uart.o + .group 0x00000000 0x8 src/tiny_uart.o + .group 0x00000000 0x8 src/tiny_uart.o + .group 0x00000000 0x8 src/tiny_uart.o + .group 0x00000000 0x8 src/tiny_uart.o + .group 0x00000000 0x8 src/tiny_uart.o + .group 0x00000000 0x8 src/tiny_uart.o + .group 0x00000000 0x8 src/tiny_uart.o + .group 0x00000000 0x8 src/tiny_uart.o + .group 0x00000000 0x8 src/tiny_uart.o + .group 0x00000000 0x8 src/tiny_uart.o + .group 0x00000000 0x8 src/tiny_uart.o + .group 0x00000000 0x8 src/tiny_uart.o + .group 0x00000000 0x8 src/tiny_uart.o + .group 0x00000000 0x8 src/tiny_uart.o + .group 0x00000000 0x8 src/tiny_uart.o + .group 0x00000000 0x8 src/tiny_uart.o + .group 0x00000000 0x8 src/tiny_uart.o + .group 0x00000000 0x8 src/tiny_uart.o + .group 0x00000000 0x8 src/tiny_uart.o + .group 0x00000000 0x8 src/tiny_uart.o + .group 0x00000000 0x8 src/tiny_uart.o + .group 0x00000000 0x8 src/tiny_uart.o + .group 0x00000000 0x8 src/tiny_uart.o + .group 0x00000000 0x8 src/tiny_uart.o + .group 0x00000000 0x8 src/tiny_uart.o + .group 0x00000000 0x8 src/tiny_uart.o + .group 0x00000000 0x8 src/tiny_uart.o + .group 0x00000000 0x8 src/tiny_uart.o + .group 0x00000000 0x8 src/tiny_uart.o + .group 0x00000000 0x8 src/tiny_uart.o + .group 0x00000000 0x8 src/tiny_uart.o + .group 0x00000000 0x8 src/tiny_uart.o + .group 0x00000000 0x8 src/tiny_uart.o + .group 0x00000000 0x8 src/tiny_uart.o + .group 0x00000000 0x8 src/tiny_uart.o + .group 0x00000000 0x8 src/tiny_uart.o + .group 0x00000000 0x8 src/tiny_uart.o + .group 0x00000000 0x8 src/tiny_uart.o + .group 0x00000000 0x8 src/tiny_uart.o + .group 0x00000000 0x8 src/tiny_uart.o + .group 0x00000000 0x8 src/tiny_uart.o + .group 0x00000000 0x8 src/tiny_uart.o + .group 0x00000000 0x8 src/tiny_uart.o + .group 0x00000000 0x8 src/tiny_uart.o + .group 0x00000000 0x8 src/tiny_uart.o + .group 0x00000000 0x8 src/tiny_uart.o + .text 0x00000000 0x0 src/tiny_uart.o + .data 0x00000000 0x0 src/tiny_uart.o + .bss 0x00000000 0x0 src/tiny_uart.o + .debug_macro 0x00000000 0xa3c src/tiny_uart.o + .debug_macro 0x00000000 0x10 src/tiny_uart.o + .debug_macro 0x00000000 0x1ad src/tiny_uart.o + .debug_macro 0x00000000 0x293 src/tiny_uart.o + .debug_macro 0x00000000 0x9e src/tiny_uart.o + .debug_macro 0x00000000 0x5486 src/tiny_uart.o + .debug_macro 0x00000000 0x9a src/tiny_uart.o + .debug_macro 0x00000000 0xf1 src/tiny_uart.o + .debug_macro 0x00000000 0x34 src/tiny_uart.o + .debug_macro 0x00000000 0x10 src/tiny_uart.o + .debug_macro 0x00000000 0x18 src/tiny_uart.o + .debug_macro 0x00000000 0x5e src/tiny_uart.o + .debug_macro 0x00000000 0x10 src/tiny_uart.o + .debug_macro 0x00000000 0x22 src/tiny_uart.o + .debug_macro 0x00000000 0x166 src/tiny_uart.o + .debug_macro 0x00000000 0x1c src/tiny_uart.o + .debug_macro 0x00000000 0x35 src/tiny_uart.o + .debug_macro 0x00000000 0x66 src/tiny_uart.o + .debug_macro 0x00000000 0x4d1 src/tiny_uart.o + .debug_macro 0x00000000 0x97 src/tiny_uart.o + .debug_macro 0x00000000 0x17 src/tiny_uart.o + .debug_macro 0x00000000 0x250 src/tiny_uart.o + .debug_macro 0x00000000 0x76 src/tiny_uart.o + .debug_macro 0x00000000 0x16 src/tiny_uart.o + .debug_macro 0x00000000 0x6e3 src/tiny_uart.o + .debug_macro 0x00000000 0x10 src/tiny_uart.o + .debug_macro 0x00000000 0x175 src/tiny_uart.o + .debug_macro 0x00000000 0x40 src/tiny_uart.o + .debug_macro 0x00000000 0x69 src/tiny_uart.o + .debug_macro 0x00000000 0x32 src/tiny_uart.o + .debug_macro 0x00000000 0xe4 src/tiny_uart.o + .debug_macro 0x00000000 0x34 src/tiny_uart.o + .debug_macro 0x00000000 0x256 src/tiny_uart.o + .debug_macro 0x00000000 0x7c src/tiny_uart.o + .debug_macro 0x00000000 0x26 src/tiny_uart.o + .debug_macro 0x00000000 0x5e src/tiny_uart.o + .debug_macro 0x00000000 0x10 src/tiny_uart.o + .debug_macro 0x00000000 0x2e src/tiny_uart.o + .debug_macro 0x00000000 0x68 src/tiny_uart.o + .debug_macro 0x00000000 0x2f src/tiny_uart.o + .debug_macro 0x00000000 0x154 src/tiny_uart.o + .debug_macro 0x00000000 0x9a src/tiny_uart.o + .debug_macro 0x00000000 0x4c src/tiny_uart.o + .debug_macro 0x00000000 0x244 src/tiny_uart.o + .debug_macro 0x00000000 0x17e src/tiny_uart.o + .debug_macro 0x00000000 0x1c src/tiny_uart.o + .debug_macro 0x00000000 0x16 src/tiny_uart.o + .debug_macro 0x00000000 0x1c src/tiny_uart.o + .debug_macro 0x00000000 0x7b src/tiny_uart.o + .debug_macro 0x00000000 0x58 src/tiny_uart.o + .debug_macro 0x00000000 0x10 src/tiny_uart.o + .debug_macro 0x00000000 0xeb src/tiny_uart.o + .debug_macro 0x00000000 0x58 src/tiny_uart.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .text 0x00000000 0x0 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .data 0x00000000 0x0 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .bss 0x00000000 0x0 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .text.ui_init 0x00000000 0x2 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .text.ui_powerdown + 0x00000000 0x2 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .text.ui_wakeup + 0x00000000 0x2 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .text.ui_loop_back_state + 0x00000000 0x2 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .text.ui_process + 0x00000000 0x2 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .debug_info 0x00000000 0x18b src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .debug_abbrev 0x00000000 0xb4 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .debug_aranges + 0x00000000 0x40 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .debug_ranges 0x00000000 0x30 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .debug_macro 0x00000000 0x2fe src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .debug_macro 0x00000000 0xa3c src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .debug_macro 0x00000000 0x10 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .debug_macro 0x00000000 0x1ad src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .debug_macro 0x00000000 0x293 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .debug_macro 0x00000000 0x9e src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .debug_macro 0x00000000 0x5486 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .debug_macro 0x00000000 0x9a src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .debug_macro 0x00000000 0xf1 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .debug_macro 0x00000000 0x34 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .debug_macro 0x00000000 0x10 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .debug_macro 0x00000000 0x18 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .debug_macro 0x00000000 0x5e src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .debug_macro 0x00000000 0x10 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .debug_macro 0x00000000 0x22 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .debug_macro 0x00000000 0x166 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .debug_macro 0x00000000 0x1c src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .debug_macro 0x00000000 0x35 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .debug_macro 0x00000000 0x66 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .debug_macro 0x00000000 0x4d1 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .debug_macro 0x00000000 0x97 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .debug_macro 0x00000000 0x17 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .debug_macro 0x00000000 0x250 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .debug_macro 0x00000000 0x76 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .debug_macro 0x00000000 0x16 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .debug_macro 0x00000000 0x6e3 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .debug_macro 0x00000000 0x10 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .debug_macro 0x00000000 0x175 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .debug_macro 0x00000000 0x40 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .debug_macro 0x00000000 0x69 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .debug_macro 0x00000000 0x32 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .debug_macro 0x00000000 0xe4 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .debug_macro 0x00000000 0x34 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .debug_macro 0x00000000 0x256 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .debug_macro 0x00000000 0x7c src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .debug_macro 0x00000000 0x26 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .debug_macro 0x00000000 0x5e src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .debug_macro 0x00000000 0x10 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .debug_macro 0x00000000 0x2e src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .debug_macro 0x00000000 0x68 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .debug_macro 0x00000000 0x2f src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .debug_macro 0x00000000 0x154 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .debug_macro 0x00000000 0x9a src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .debug_macro 0x00000000 0x4c src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .debug_macro 0x00000000 0x244 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .debug_macro 0x00000000 0x17e src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .debug_macro 0x00000000 0x1c src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .debug_macro 0x00000000 0x16 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .debug_macro 0x00000000 0x1c src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .debug_macro 0x00000000 0x7b src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .debug_line 0x00000000 0x806 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .debug_str 0x00000000 0x27393 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .comment 0x00000000 0x31 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .debug_frame 0x00000000 0x64 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .group 0x00000000 0x8 src/ASF/common/services/clock/xmega/sysclk.o + .group 0x00000000 0x8 src/ASF/common/services/clock/xmega/sysclk.o + .group 0x00000000 0x8 src/ASF/common/services/clock/xmega/sysclk.o + .group 0x00000000 0x8 src/ASF/common/services/clock/xmega/sysclk.o + .group 0x00000000 0x8 src/ASF/common/services/clock/xmega/sysclk.o + .group 0x00000000 0x8 src/ASF/common/services/clock/xmega/sysclk.o + .group 0x00000000 0x8 src/ASF/common/services/clock/xmega/sysclk.o + .group 0x00000000 0x8 src/ASF/common/services/clock/xmega/sysclk.o + .group 0x00000000 0x8 src/ASF/common/services/clock/xmega/sysclk.o + .group 0x00000000 0x8 src/ASF/common/services/clock/xmega/sysclk.o + .group 0x00000000 0x8 src/ASF/common/services/clock/xmega/sysclk.o + .group 0x00000000 0x8 src/ASF/common/services/clock/xmega/sysclk.o + .group 0x00000000 0x8 src/ASF/common/services/clock/xmega/sysclk.o + .group 0x00000000 0x8 src/ASF/common/services/clock/xmega/sysclk.o + .group 0x00000000 0x8 src/ASF/common/services/clock/xmega/sysclk.o + .group 0x00000000 0x8 src/ASF/common/services/clock/xmega/sysclk.o + .group 0x00000000 0x8 src/ASF/common/services/clock/xmega/sysclk.o + .group 0x00000000 0x8 src/ASF/common/services/clock/xmega/sysclk.o + .group 0x00000000 0x8 src/ASF/common/services/clock/xmega/sysclk.o + .group 0x00000000 0x8 src/ASF/common/services/clock/xmega/sysclk.o + .group 0x00000000 0x8 src/ASF/common/services/clock/xmega/sysclk.o + .group 0x00000000 0x8 src/ASF/common/services/clock/xmega/sysclk.o + .group 0x00000000 0x8 src/ASF/common/services/clock/xmega/sysclk.o + .group 0x00000000 0x8 src/ASF/common/services/clock/xmega/sysclk.o + .group 0x00000000 0x8 src/ASF/common/services/clock/xmega/sysclk.o + .group 0x00000000 0x8 src/ASF/common/services/clock/xmega/sysclk.o + .group 0x00000000 0x8 src/ASF/common/services/clock/xmega/sysclk.o + .group 0x00000000 0x8 src/ASF/common/services/clock/xmega/sysclk.o + .group 0x00000000 0x8 src/ASF/common/services/clock/xmega/sysclk.o + .group 0x00000000 0x8 src/ASF/common/services/clock/xmega/sysclk.o + .group 0x00000000 0x8 src/ASF/common/services/clock/xmega/sysclk.o + .group 0x00000000 0x8 src/ASF/common/services/clock/xmega/sysclk.o + .group 0x00000000 0x8 src/ASF/common/services/clock/xmega/sysclk.o + .group 0x00000000 0x8 src/ASF/common/services/clock/xmega/sysclk.o + .group 0x00000000 0x8 src/ASF/common/services/clock/xmega/sysclk.o + .group 0x00000000 0x8 src/ASF/common/services/clock/xmega/sysclk.o + .group 0x00000000 0x8 src/ASF/common/services/clock/xmega/sysclk.o + .text 0x00000000 0x0 src/ASF/common/services/clock/xmega/sysclk.o + .data 0x00000000 0x0 src/ASF/common/services/clock/xmega/sysclk.o + .bss 0x00000000 0x0 src/ASF/common/services/clock/xmega/sysclk.o + .text.sysclk_disable_module + 0x00000000 0x16 src/ASF/common/services/clock/xmega/sysclk.o + .text.sysclk_disable_usb + 0x00000000 0x14 src/ASF/common/services/clock/xmega/sysclk.o + .debug_macro 0x00000000 0xa3c src/ASF/common/services/clock/xmega/sysclk.o + .debug_macro 0x00000000 0x10 src/ASF/common/services/clock/xmega/sysclk.o + .debug_macro 0x00000000 0x1ad src/ASF/common/services/clock/xmega/sysclk.o + .debug_macro 0x00000000 0x293 src/ASF/common/services/clock/xmega/sysclk.o + .debug_macro 0x00000000 0x9e src/ASF/common/services/clock/xmega/sysclk.o + .debug_macro 0x00000000 0x5486 src/ASF/common/services/clock/xmega/sysclk.o + .debug_macro 0x00000000 0x9a src/ASF/common/services/clock/xmega/sysclk.o + .debug_macro 0x00000000 0xf1 src/ASF/common/services/clock/xmega/sysclk.o + .debug_macro 0x00000000 0x34 src/ASF/common/services/clock/xmega/sysclk.o + .debug_macro 0x00000000 0x10 src/ASF/common/services/clock/xmega/sysclk.o + .debug_macro 0x00000000 0x18 src/ASF/common/services/clock/xmega/sysclk.o + .debug_macro 0x00000000 0x5e src/ASF/common/services/clock/xmega/sysclk.o + .debug_macro 0x00000000 0x10 src/ASF/common/services/clock/xmega/sysclk.o + .debug_macro 0x00000000 0x22 src/ASF/common/services/clock/xmega/sysclk.o + .debug_macro 0x00000000 0x166 src/ASF/common/services/clock/xmega/sysclk.o + .debug_macro 0x00000000 0x1c src/ASF/common/services/clock/xmega/sysclk.o + .debug_macro 0x00000000 0x35 src/ASF/common/services/clock/xmega/sysclk.o + .debug_macro 0x00000000 0x66 src/ASF/common/services/clock/xmega/sysclk.o + .debug_macro 0x00000000 0x4d1 src/ASF/common/services/clock/xmega/sysclk.o + .debug_macro 0x00000000 0x97 src/ASF/common/services/clock/xmega/sysclk.o + .debug_macro 0x00000000 0x17 src/ASF/common/services/clock/xmega/sysclk.o + .debug_macro 0x00000000 0x250 src/ASF/common/services/clock/xmega/sysclk.o + .debug_macro 0x00000000 0x76 src/ASF/common/services/clock/xmega/sysclk.o + .debug_macro 0x00000000 0x16 src/ASF/common/services/clock/xmega/sysclk.o + .debug_macro 0x00000000 0x6e3 src/ASF/common/services/clock/xmega/sysclk.o + .debug_macro 0x00000000 0x10 src/ASF/common/services/clock/xmega/sysclk.o + .debug_macro 0x00000000 0x175 src/ASF/common/services/clock/xmega/sysclk.o + .debug_macro 0x00000000 0x40 src/ASF/common/services/clock/xmega/sysclk.o + .debug_macro 0x00000000 0x69 src/ASF/common/services/clock/xmega/sysclk.o + .debug_macro 0x00000000 0x32 src/ASF/common/services/clock/xmega/sysclk.o + .debug_macro 0x00000000 0xe4 src/ASF/common/services/clock/xmega/sysclk.o + .debug_macro 0x00000000 0x2e src/ASF/common/services/clock/xmega/sysclk.o + .debug_macro 0x00000000 0x256 src/ASF/common/services/clock/xmega/sysclk.o + .debug_macro 0x00000000 0x68 src/ASF/common/services/clock/xmega/sysclk.o + .debug_macro 0x00000000 0x2f src/ASF/common/services/clock/xmega/sysclk.o + .debug_macro 0x00000000 0x154 src/ASF/common/services/clock/xmega/sysclk.o + .debug_macro 0x00000000 0x26 src/ASF/common/services/clock/xmega/sysclk.o + .group 0x00000000 0x8 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .group 0x00000000 0x8 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .group 0x00000000 0x8 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .group 0x00000000 0x8 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .group 0x00000000 0x8 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .group 0x00000000 0x8 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .group 0x00000000 0x8 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .group 0x00000000 0x8 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .group 0x00000000 0x8 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .group 0x00000000 0x8 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .group 0x00000000 0x8 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .group 0x00000000 0x8 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .group 0x00000000 0x8 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .group 0x00000000 0x8 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .group 0x00000000 0x8 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .group 0x00000000 0x8 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .group 0x00000000 0x8 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .group 0x00000000 0x8 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .group 0x00000000 0x8 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .group 0x00000000 0x8 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .group 0x00000000 0x8 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .group 0x00000000 0x8 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .group 0x00000000 0x8 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .group 0x00000000 0x8 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .group 0x00000000 0x8 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .group 0x00000000 0x8 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .group 0x00000000 0x8 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .group 0x00000000 0x8 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .group 0x00000000 0x8 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .group 0x00000000 0x8 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .group 0x00000000 0x8 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .group 0x00000000 0x8 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .group 0x00000000 0x8 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .text 0x00000000 0x0 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .data 0x00000000 0x0 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .bss 0x00000000 0x0 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .data.sleepmgr_configs + 0x00000000 0x6 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .debug_macro 0x00000000 0xa3c src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .debug_macro 0x00000000 0x10 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .debug_macro 0x00000000 0x1ad src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .debug_macro 0x00000000 0x293 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .debug_macro 0x00000000 0x9e src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .debug_macro 0x00000000 0x5486 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .debug_macro 0x00000000 0x9a src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .debug_macro 0x00000000 0xf1 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .debug_macro 0x00000000 0x34 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .debug_macro 0x00000000 0x10 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .debug_macro 0x00000000 0x18 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .debug_macro 0x00000000 0x5e src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .debug_macro 0x00000000 0x10 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .debug_macro 0x00000000 0x22 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .debug_macro 0x00000000 0x166 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .debug_macro 0x00000000 0x1c src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .debug_macro 0x00000000 0x35 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .debug_macro 0x00000000 0x66 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .debug_macro 0x00000000 0x4d1 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .debug_macro 0x00000000 0x97 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .debug_macro 0x00000000 0x17 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .debug_macro 0x00000000 0x250 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .debug_macro 0x00000000 0x76 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .debug_macro 0x00000000 0x16 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .debug_macro 0x00000000 0x6e3 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .debug_macro 0x00000000 0x10 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .debug_macro 0x00000000 0x175 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .debug_macro 0x00000000 0x40 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .debug_macro 0x00000000 0x69 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .debug_macro 0x00000000 0x32 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .debug_macro 0x00000000 0xe4 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .debug_macro 0x00000000 0x10 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .debug_macro 0x00000000 0x5e src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .text 0x00000000 0x0 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .data 0x00000000 0x0 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .bss 0x00000000 0x0 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .text.udi_vendor_bulk_in_run + 0x00000000 0x18 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .text.udi_vendor_bulk_out_run + 0x00000000 0x18 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .text.udi_vendor_iso_out_run + 0x00000000 0x18 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .debug_macro 0x00000000 0xa3c src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .debug_macro 0x00000000 0x10 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .debug_macro 0x00000000 0x1ad src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .debug_macro 0x00000000 0x293 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .debug_macro 0x00000000 0x9e src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .debug_macro 0x00000000 0x5486 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .debug_macro 0x00000000 0x9a src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .debug_macro 0x00000000 0xf1 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .debug_macro 0x00000000 0x34 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .debug_macro 0x00000000 0x10 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .debug_macro 0x00000000 0x18 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .debug_macro 0x00000000 0x5e src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .debug_macro 0x00000000 0x10 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .debug_macro 0x00000000 0x22 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .debug_macro 0x00000000 0x166 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .debug_macro 0x00000000 0x1c src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .debug_macro 0x00000000 0x35 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .debug_macro 0x00000000 0x66 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .debug_macro 0x00000000 0x4d1 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .debug_macro 0x00000000 0x97 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .debug_macro 0x00000000 0x17 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .debug_macro 0x00000000 0x250 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .debug_macro 0x00000000 0x76 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .debug_macro 0x00000000 0x16 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .debug_macro 0x00000000 0x6e3 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .debug_macro 0x00000000 0x10 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .debug_macro 0x00000000 0x175 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .debug_macro 0x00000000 0x40 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .debug_macro 0x00000000 0x69 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .debug_macro 0x00000000 0x32 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .debug_macro 0x00000000 0xe4 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .debug_macro 0x00000000 0x4c src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .debug_macro 0x00000000 0x244 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .debug_macro 0x00000000 0x17e src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .debug_macro 0x00000000 0x1c src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .debug_macro 0x00000000 0x16 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .debug_macro 0x00000000 0x1c src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .debug_macro 0x00000000 0x7b src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .debug_macro 0x00000000 0x16 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .text 0x00000000 0x0 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .data 0x00000000 0x0 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .bss 0x00000000 0x0 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .debug_macro 0x00000000 0xa3c src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .debug_macro 0x00000000 0x10 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .debug_macro 0x00000000 0x1ad src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .debug_macro 0x00000000 0x293 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .debug_macro 0x00000000 0x9e src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .debug_macro 0x00000000 0x5486 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .debug_macro 0x00000000 0x9a src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .debug_macro 0x00000000 0xf1 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .debug_macro 0x00000000 0x34 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .debug_macro 0x00000000 0x10 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .debug_macro 0x00000000 0x18 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .debug_macro 0x00000000 0x5e src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .debug_macro 0x00000000 0x10 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .debug_macro 0x00000000 0x22 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .debug_macro 0x00000000 0x166 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .debug_macro 0x00000000 0x1c src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .debug_macro 0x00000000 0x35 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .debug_macro 0x00000000 0x66 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .debug_macro 0x00000000 0x4d1 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .debug_macro 0x00000000 0x97 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .debug_macro 0x00000000 0x17 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .debug_macro 0x00000000 0x250 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .debug_macro 0x00000000 0x76 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .debug_macro 0x00000000 0x16 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .debug_macro 0x00000000 0x6e3 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .debug_macro 0x00000000 0x10 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .debug_macro 0x00000000 0x175 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .debug_macro 0x00000000 0x40 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .debug_macro 0x00000000 0x69 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .debug_macro 0x00000000 0x32 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .debug_macro 0x00000000 0xe4 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .debug_macro 0x00000000 0x94 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .debug_macro 0x00000000 0x4c src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .debug_macro 0x00000000 0x244 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .debug_macro 0x00000000 0x17e src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .debug_macro 0x00000000 0x1c src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .debug_macro 0x00000000 0x16 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .debug_macro 0x00000000 0x1c src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .debug_macro 0x00000000 0x7b src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/udc/udc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/udc/udc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/udc/udc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/udc/udc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/udc/udc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/udc/udc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/udc/udc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/udc/udc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/udc/udc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/udc/udc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/udc/udc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/udc/udc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/udc/udc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/udc/udc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/udc/udc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/udc/udc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/udc/udc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/udc/udc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/udc/udc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/udc/udc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/udc/udc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/udc/udc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/udc/udc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/udc/udc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/udc/udc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/udc/udc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/udc/udc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/udc/udc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/udc/udc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/udc/udc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/udc/udc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/udc/udc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/udc/udc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/udc/udc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/udc/udc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/udc/udc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/udc/udc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/udc/udc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/udc/udc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/udc/udc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/udc/udc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/udc/udc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/udc/udc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/udc/udc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/udc/udc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/udc/udc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/udc/udc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/udc/udc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/udc/udc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/udc/udc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/udc/udc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/udc/udc.o + .group 0x00000000 0x8 src/ASF/common/services/usb/udc/udc.o + .text 0x00000000 0x0 src/ASF/common/services/usb/udc/udc.o + .data 0x00000000 0x0 src/ASF/common/services/usb/udc/udc.o + .bss 0x00000000 0x0 src/ASF/common/services/usb/udc/udc.o + .text.udc_stop + 0x00000000 0xa src/ASF/common/services/usb/udc/udc.o + .debug_macro 0x00000000 0xa3c src/ASF/common/services/usb/udc/udc.o + .debug_macro 0x00000000 0x10 src/ASF/common/services/usb/udc/udc.o + .debug_macro 0x00000000 0x1ad src/ASF/common/services/usb/udc/udc.o + .debug_macro 0x00000000 0x293 src/ASF/common/services/usb/udc/udc.o + .debug_macro 0x00000000 0x9e src/ASF/common/services/usb/udc/udc.o + .debug_macro 0x00000000 0x5486 src/ASF/common/services/usb/udc/udc.o + .debug_macro 0x00000000 0x9a src/ASF/common/services/usb/udc/udc.o + .debug_macro 0x00000000 0xf1 src/ASF/common/services/usb/udc/udc.o + .debug_macro 0x00000000 0x34 src/ASF/common/services/usb/udc/udc.o + .debug_macro 0x00000000 0x10 src/ASF/common/services/usb/udc/udc.o + .debug_macro 0x00000000 0x18 src/ASF/common/services/usb/udc/udc.o + .debug_macro 0x00000000 0x5e src/ASF/common/services/usb/udc/udc.o + .debug_macro 0x00000000 0x10 src/ASF/common/services/usb/udc/udc.o + .debug_macro 0x00000000 0x22 src/ASF/common/services/usb/udc/udc.o + .debug_macro 0x00000000 0x166 src/ASF/common/services/usb/udc/udc.o + .debug_macro 0x00000000 0x1c src/ASF/common/services/usb/udc/udc.o + .debug_macro 0x00000000 0x35 src/ASF/common/services/usb/udc/udc.o + .debug_macro 0x00000000 0x66 src/ASF/common/services/usb/udc/udc.o + .debug_macro 0x00000000 0x4d1 src/ASF/common/services/usb/udc/udc.o + .debug_macro 0x00000000 0x97 src/ASF/common/services/usb/udc/udc.o + .debug_macro 0x00000000 0x17 src/ASF/common/services/usb/udc/udc.o + .debug_macro 0x00000000 0x250 src/ASF/common/services/usb/udc/udc.o + .debug_macro 0x00000000 0x76 src/ASF/common/services/usb/udc/udc.o + .debug_macro 0x00000000 0x16 src/ASF/common/services/usb/udc/udc.o + .debug_macro 0x00000000 0x6e3 src/ASF/common/services/usb/udc/udc.o + .debug_macro 0x00000000 0x10 src/ASF/common/services/usb/udc/udc.o + .debug_macro 0x00000000 0x175 src/ASF/common/services/usb/udc/udc.o + .debug_macro 0x00000000 0x40 src/ASF/common/services/usb/udc/udc.o + .debug_macro 0x00000000 0x69 src/ASF/common/services/usb/udc/udc.o + .debug_macro 0x00000000 0x32 src/ASF/common/services/usb/udc/udc.o + .debug_macro 0x00000000 0xe4 src/ASF/common/services/usb/udc/udc.o + .debug_macro 0x00000000 0x94 src/ASF/common/services/usb/udc/udc.o + .debug_macro 0x00000000 0x4c src/ASF/common/services/usb/udc/udc.o + .debug_macro 0x00000000 0x244 src/ASF/common/services/usb/udc/udc.o + .debug_macro 0x00000000 0x17e src/ASF/common/services/usb/udc/udc.o + .debug_macro 0x00000000 0x1c src/ASF/common/services/usb/udc/udc.o + .debug_macro 0x00000000 0x16 src/ASF/common/services/usb/udc/udc.o + .debug_macro 0x00000000 0x1c src/ASF/common/services/usb/udc/udc.o + .debug_macro 0x00000000 0x7b src/ASF/common/services/usb/udc/udc.o + .debug_macro 0x00000000 0x58 src/ASF/common/services/usb/udc/udc.o + .debug_macro 0x00000000 0x58 src/ASF/common/services/usb/udc/udc.o + .debug_macro 0x00000000 0x10 src/ASF/common/services/usb/udc/udc.o + .debug_macro 0x00000000 0xeb src/ASF/common/services/usb/udc/udc.o + .debug_macro 0x00000000 0x34 src/ASF/common/services/usb/udc/udc.o + .debug_macro 0x00000000 0x256 src/ASF/common/services/usb/udc/udc.o + .debug_macro 0x00000000 0x7c src/ASF/common/services/usb/udc/udc.o + .debug_macro 0x00000000 0x26 src/ASF/common/services/usb/udc/udc.o + .debug_macro 0x00000000 0x5e src/ASF/common/services/usb/udc/udc.o + .debug_macro 0x00000000 0x10 src/ASF/common/services/usb/udc/udc.o + .debug_macro 0x00000000 0x2e src/ASF/common/services/usb/udc/udc.o + .debug_macro 0x00000000 0x68 src/ASF/common/services/usb/udc/udc.o + .debug_macro 0x00000000 0x2f src/ASF/common/services/usb/udc/udc.o + .debug_macro 0x00000000 0x154 src/ASF/common/services/usb/udc/udc.o + .text 0x00000000 0x0 src/ASF/xmega/drivers/cpu/ccp.o + .data 0x00000000 0x0 src/ASF/xmega/drivers/cpu/ccp.o + .bss 0x00000000 0x0 src/ASF/xmega/drivers/cpu/ccp.o + .group 0x00000000 0x8 src/ASF/xmega/drivers/nvm/nvm.o + .group 0x00000000 0x8 src/ASF/xmega/drivers/nvm/nvm.o + .group 0x00000000 0x8 src/ASF/xmega/drivers/nvm/nvm.o + .group 0x00000000 0x8 src/ASF/xmega/drivers/nvm/nvm.o + .group 0x00000000 0x8 src/ASF/xmega/drivers/nvm/nvm.o + .group 0x00000000 0x8 src/ASF/xmega/drivers/nvm/nvm.o + .group 0x00000000 0x8 src/ASF/xmega/drivers/nvm/nvm.o + .group 0x00000000 0x8 src/ASF/xmega/drivers/nvm/nvm.o + .group 0x00000000 0x8 src/ASF/xmega/drivers/nvm/nvm.o + .group 0x00000000 0x8 src/ASF/xmega/drivers/nvm/nvm.o + .group 0x00000000 0x8 src/ASF/xmega/drivers/nvm/nvm.o + .group 0x00000000 0x8 src/ASF/xmega/drivers/nvm/nvm.o + .group 0x00000000 0x8 src/ASF/xmega/drivers/nvm/nvm.o + .group 0x00000000 0x8 src/ASF/xmega/drivers/nvm/nvm.o + .group 0x00000000 0x8 src/ASF/xmega/drivers/nvm/nvm.o + .group 0x00000000 0x8 src/ASF/xmega/drivers/nvm/nvm.o + .group 0x00000000 0x8 src/ASF/xmega/drivers/nvm/nvm.o + .group 0x00000000 0x8 src/ASF/xmega/drivers/nvm/nvm.o + .group 0x00000000 0x8 src/ASF/xmega/drivers/nvm/nvm.o + .group 0x00000000 0x8 src/ASF/xmega/drivers/nvm/nvm.o + .group 0x00000000 0x8 src/ASF/xmega/drivers/nvm/nvm.o + .group 0x00000000 0x8 src/ASF/xmega/drivers/nvm/nvm.o + .group 0x00000000 0x8 src/ASF/xmega/drivers/nvm/nvm.o + .group 0x00000000 0x8 src/ASF/xmega/drivers/nvm/nvm.o + .group 0x00000000 0x8 src/ASF/xmega/drivers/nvm/nvm.o + .group 0x00000000 0x8 src/ASF/xmega/drivers/nvm/nvm.o + .group 0x00000000 0x8 src/ASF/xmega/drivers/nvm/nvm.o + .group 0x00000000 0x8 src/ASF/xmega/drivers/nvm/nvm.o + .group 0x00000000 0x8 src/ASF/xmega/drivers/nvm/nvm.o + .group 0x00000000 0x8 src/ASF/xmega/drivers/nvm/nvm.o + .group 0x00000000 0x8 src/ASF/xmega/drivers/nvm/nvm.o + .group 0x00000000 0x8 src/ASF/xmega/drivers/nvm/nvm.o + .group 0x00000000 0x8 src/ASF/xmega/drivers/nvm/nvm.o + .text 0x00000000 0x0 src/ASF/xmega/drivers/nvm/nvm.o + .data 0x00000000 0x0 src/ASF/xmega/drivers/nvm/nvm.o + .bss 0x00000000 0x0 src/ASF/xmega/drivers/nvm/nvm.o + .text.nvm_read_device_serial + 0x00000000 0x90 src/ASF/xmega/drivers/nvm/nvm.o + .text.nvm_eeprom_read_byte + 0x00000000 0x22 src/ASF/xmega/drivers/nvm/nvm.o + .text.nvm_eeprom_read_buffer + 0x00000000 0x30 src/ASF/xmega/drivers/nvm/nvm.o + .text.nvm_eeprom_flush_buffer + 0x00000000 0x24 src/ASF/xmega/drivers/nvm/nvm.o + .text.nvm_eeprom_load_byte_to_buffer + 0x00000000 0x24 src/ASF/xmega/drivers/nvm/nvm.o + .text.nvm_eeprom_write_byte + 0x00000000 0x52 src/ASF/xmega/drivers/nvm/nvm.o + .text.nvm_eeprom_load_page_to_buffer + 0x00000000 0x40 src/ASF/xmega/drivers/nvm/nvm.o + .text.nvm_eeprom_atomic_write_page + 0x00000000 0x3c src/ASF/xmega/drivers/nvm/nvm.o + .text.nvm_eeprom_erase_and_write_buffer + 0x00000000 0x88 src/ASF/xmega/drivers/nvm/nvm.o + .text.nvm_eeprom_split_write_page + 0x00000000 0x3c src/ASF/xmega/drivers/nvm/nvm.o + .text.nvm_eeprom_fill_buffer_with_value + 0x00000000 0x2a src/ASF/xmega/drivers/nvm/nvm.o + .text.nvm_eeprom_erase_bytes_in_page + 0x00000000 0x3c src/ASF/xmega/drivers/nvm/nvm.o + .text.nvm_eeprom_erase_page + 0x00000000 0x14 src/ASF/xmega/drivers/nvm/nvm.o + .text.nvm_eeprom_erase_bytes_in_all_pages + 0x00000000 0x2e src/ASF/xmega/drivers/nvm/nvm.o + .text.nvm_eeprom_erase_all + 0x00000000 0xc src/ASF/xmega/drivers/nvm/nvm.o + .text.nvm_issue_flash_range_crc + 0x00000000 0x2c src/ASF/xmega/drivers/nvm/nvm.o + .text.nvm_flash_read_buffer + 0x00000000 0x36 src/ASF/xmega/drivers/nvm/nvm.o + .text.nvm_user_sig_read_buffer + 0x00000000 0x3e src/ASF/xmega/drivers/nvm/nvm.o + .text.nvm_user_sig_write_buffer + 0x00000000 0x14a src/ASF/xmega/drivers/nvm/nvm.o + .text.nvm_flash_erase_and_write_buffer + 0x00000000 0x15a src/ASF/xmega/drivers/nvm/nvm.o + .text.nvm_fuses_read + 0x00000000 0x32 src/ASF/xmega/drivers/nvm/nvm.o + .debug_info 0x00000000 0x13ae src/ASF/xmega/drivers/nvm/nvm.o + .debug_abbrev 0x00000000 0x3ed src/ASF/xmega/drivers/nvm/nvm.o + .debug_loc 0x00000000 0x113c src/ASF/xmega/drivers/nvm/nvm.o + .debug_aranges + 0x00000000 0xc0 src/ASF/xmega/drivers/nvm/nvm.o + .debug_ranges 0x00000000 0xc8 src/ASF/xmega/drivers/nvm/nvm.o + .debug_macro 0x00000000 0x198 src/ASF/xmega/drivers/nvm/nvm.o + .debug_macro 0x00000000 0xa3c src/ASF/xmega/drivers/nvm/nvm.o + .debug_macro 0x00000000 0x10 src/ASF/xmega/drivers/nvm/nvm.o + .debug_macro 0x00000000 0x1ad src/ASF/xmega/drivers/nvm/nvm.o + .debug_macro 0x00000000 0x293 src/ASF/xmega/drivers/nvm/nvm.o + .debug_macro 0x00000000 0x9e src/ASF/xmega/drivers/nvm/nvm.o + .debug_macro 0x00000000 0x5486 src/ASF/xmega/drivers/nvm/nvm.o + .debug_macro 0x00000000 0x9a src/ASF/xmega/drivers/nvm/nvm.o + .debug_macro 0x00000000 0xf1 src/ASF/xmega/drivers/nvm/nvm.o + .debug_macro 0x00000000 0x34 src/ASF/xmega/drivers/nvm/nvm.o + .debug_macro 0x00000000 0x10 src/ASF/xmega/drivers/nvm/nvm.o + .debug_macro 0x00000000 0x18 src/ASF/xmega/drivers/nvm/nvm.o + .debug_macro 0x00000000 0x5e src/ASF/xmega/drivers/nvm/nvm.o + .debug_macro 0x00000000 0x10 src/ASF/xmega/drivers/nvm/nvm.o + .debug_macro 0x00000000 0x22 src/ASF/xmega/drivers/nvm/nvm.o + .debug_macro 0x00000000 0x166 src/ASF/xmega/drivers/nvm/nvm.o + .debug_macro 0x00000000 0x1c src/ASF/xmega/drivers/nvm/nvm.o + .debug_macro 0x00000000 0x35 src/ASF/xmega/drivers/nvm/nvm.o + .debug_macro 0x00000000 0x66 src/ASF/xmega/drivers/nvm/nvm.o + .debug_macro 0x00000000 0x4d1 src/ASF/xmega/drivers/nvm/nvm.o + .debug_macro 0x00000000 0x97 src/ASF/xmega/drivers/nvm/nvm.o + .debug_macro 0x00000000 0x17 src/ASF/xmega/drivers/nvm/nvm.o + .debug_macro 0x00000000 0x250 src/ASF/xmega/drivers/nvm/nvm.o + .debug_macro 0x00000000 0x76 src/ASF/xmega/drivers/nvm/nvm.o + .debug_macro 0x00000000 0x16 src/ASF/xmega/drivers/nvm/nvm.o + .debug_macro 0x00000000 0x6e3 src/ASF/xmega/drivers/nvm/nvm.o + .debug_macro 0x00000000 0x10 src/ASF/xmega/drivers/nvm/nvm.o + .debug_macro 0x00000000 0x175 src/ASF/xmega/drivers/nvm/nvm.o + .debug_macro 0x00000000 0x40 src/ASF/xmega/drivers/nvm/nvm.o + .debug_macro 0x00000000 0x69 src/ASF/xmega/drivers/nvm/nvm.o + .debug_macro 0x00000000 0x32 src/ASF/xmega/drivers/nvm/nvm.o + .debug_macro 0x00000000 0xe4 src/ASF/xmega/drivers/nvm/nvm.o + .debug_macro 0x00000000 0x26 src/ASF/xmega/drivers/nvm/nvm.o + .debug_macro 0x00000000 0x16 src/ASF/xmega/drivers/nvm/nvm.o + .debug_line 0x00000000 0xb37 src/ASF/xmega/drivers/nvm/nvm.o + .debug_str 0x00000000 0x241a8 src/ASF/xmega/drivers/nvm/nvm.o + .comment 0x00000000 0x31 src/ASF/xmega/drivers/nvm/nvm.o + .debug_frame 0x00000000 0x340 src/ASF/xmega/drivers/nvm/nvm.o + .text 0x00000000 0x0 src/ASF/xmega/drivers/nvm/nvm_asm.o + .data 0x00000000 0x0 src/ASF/xmega/drivers/nvm/nvm_asm.o + .bss 0x00000000 0x0 src/ASF/xmega/drivers/nvm/nvm_asm.o + .BOOT 0x00000000 0x44 src/ASF/xmega/drivers/nvm/nvm_asm.o + .group 0x00000000 0x8 src/ASF/xmega/drivers/usb/usb_device.o + .group 0x00000000 0x8 src/ASF/xmega/drivers/usb/usb_device.o + .group 0x00000000 0x8 src/ASF/xmega/drivers/usb/usb_device.o + .group 0x00000000 0x8 src/ASF/xmega/drivers/usb/usb_device.o + .group 0x00000000 0x8 src/ASF/xmega/drivers/usb/usb_device.o + .group 0x00000000 0x8 src/ASF/xmega/drivers/usb/usb_device.o + .group 0x00000000 0x8 src/ASF/xmega/drivers/usb/usb_device.o + .group 0x00000000 0x8 src/ASF/xmega/drivers/usb/usb_device.o + .group 0x00000000 0x8 src/ASF/xmega/drivers/usb/usb_device.o + .group 0x00000000 0x8 src/ASF/xmega/drivers/usb/usb_device.o + .group 0x00000000 0x8 src/ASF/xmega/drivers/usb/usb_device.o + .group 0x00000000 0x8 src/ASF/xmega/drivers/usb/usb_device.o + .group 0x00000000 0x8 src/ASF/xmega/drivers/usb/usb_device.o + .group 0x00000000 0x8 src/ASF/xmega/drivers/usb/usb_device.o + .group 0x00000000 0x8 src/ASF/xmega/drivers/usb/usb_device.o + .group 0x00000000 0x8 src/ASF/xmega/drivers/usb/usb_device.o + .group 0x00000000 0x8 src/ASF/xmega/drivers/usb/usb_device.o + .group 0x00000000 0x8 src/ASF/xmega/drivers/usb/usb_device.o + .group 0x00000000 0x8 src/ASF/xmega/drivers/usb/usb_device.o + .group 0x00000000 0x8 src/ASF/xmega/drivers/usb/usb_device.o + .group 0x00000000 0x8 src/ASF/xmega/drivers/usb/usb_device.o + .group 0x00000000 0x8 src/ASF/xmega/drivers/usb/usb_device.o + .group 0x00000000 0x8 src/ASF/xmega/drivers/usb/usb_device.o + .group 0x00000000 0x8 src/ASF/xmega/drivers/usb/usb_device.o + .group 0x00000000 0x8 src/ASF/xmega/drivers/usb/usb_device.o + .group 0x00000000 0x8 src/ASF/xmega/drivers/usb/usb_device.o + .group 0x00000000 0x8 src/ASF/xmega/drivers/usb/usb_device.o + .group 0x00000000 0x8 src/ASF/xmega/drivers/usb/usb_device.o + .group 0x00000000 0x8 src/ASF/xmega/drivers/usb/usb_device.o + .group 0x00000000 0x8 src/ASF/xmega/drivers/usb/usb_device.o + .group 0x00000000 0x8 src/ASF/xmega/drivers/usb/usb_device.o + .group 0x00000000 0x8 src/ASF/xmega/drivers/usb/usb_device.o + .group 0x00000000 0x8 src/ASF/xmega/drivers/usb/usb_device.o + .group 0x00000000 0x8 src/ASF/xmega/drivers/usb/usb_device.o + .group 0x00000000 0x8 src/ASF/xmega/drivers/usb/usb_device.o + .group 0x00000000 0x8 src/ASF/xmega/drivers/usb/usb_device.o + .group 0x00000000 0x8 src/ASF/xmega/drivers/usb/usb_device.o + .group 0x00000000 0x8 src/ASF/xmega/drivers/usb/usb_device.o + .group 0x00000000 0x8 src/ASF/xmega/drivers/usb/usb_device.o + .group 0x00000000 0x8 src/ASF/xmega/drivers/usb/usb_device.o + .group 0x00000000 0x8 src/ASF/xmega/drivers/usb/usb_device.o + .group 0x00000000 0x8 src/ASF/xmega/drivers/usb/usb_device.o + .group 0x00000000 0x8 src/ASF/xmega/drivers/usb/usb_device.o + .group 0x00000000 0x8 src/ASF/xmega/drivers/usb/usb_device.o + .group 0x00000000 0x8 src/ASF/xmega/drivers/usb/usb_device.o + .group 0x00000000 0x8 src/ASF/xmega/drivers/usb/usb_device.o + .group 0x00000000 0x8 src/ASF/xmega/drivers/usb/usb_device.o + .group 0x00000000 0x8 src/ASF/xmega/drivers/usb/usb_device.o + .group 0x00000000 0x8 src/ASF/xmega/drivers/usb/usb_device.o + .text 0x00000000 0x0 src/ASF/xmega/drivers/usb/usb_device.o + .data 0x00000000 0x0 src/ASF/xmega/drivers/usb/usb_device.o + .bss 0x00000000 0x0 src/ASF/xmega/drivers/usb/usb_device.o + .text.udd_disable + 0x00000000 0x40 src/ASF/xmega/drivers/usb/usb_device.o + .text.udd_include_vbus_monitoring + 0x00000000 0x4 src/ASF/xmega/drivers/usb/usb_device.o + .text.udd_detach + 0x00000000 0xc src/ASF/xmega/drivers/usb/usb_device.o + .text.udd_is_high_speed + 0x00000000 0x4 src/ASF/xmega/drivers/usb/usb_device.o + .text.udd_get_frame_number + 0x00000000 0xa src/ASF/xmega/drivers/usb/usb_device.o + .text.udd_get_micro_frame_number + 0x00000000 0x6 src/ASF/xmega/drivers/usb/usb_device.o + .text.udd_send_remotewakeup + 0x00000000 0x20 src/ASF/xmega/drivers/usb/usb_device.o + .text.udd_ep_wait_stall_clear + 0x00000000 0x6a src/ASF/xmega/drivers/usb/usb_device.o + .text.udd_ep_is_valid + 0x00000000 0x14 src/ASF/xmega/drivers/usb/usb_device.o + .debug_macro 0x00000000 0xa3c src/ASF/xmega/drivers/usb/usb_device.o + .debug_macro 0x00000000 0x10 src/ASF/xmega/drivers/usb/usb_device.o + .debug_macro 0x00000000 0x1ad src/ASF/xmega/drivers/usb/usb_device.o + .debug_macro 0x00000000 0x293 src/ASF/xmega/drivers/usb/usb_device.o + .debug_macro 0x00000000 0x9e src/ASF/xmega/drivers/usb/usb_device.o + .debug_macro 0x00000000 0x5486 src/ASF/xmega/drivers/usb/usb_device.o + .debug_macro 0x00000000 0x9a src/ASF/xmega/drivers/usb/usb_device.o + .debug_macro 0x00000000 0xf1 src/ASF/xmega/drivers/usb/usb_device.o + .debug_macro 0x00000000 0x34 src/ASF/xmega/drivers/usb/usb_device.o + .debug_macro 0x00000000 0x10 src/ASF/xmega/drivers/usb/usb_device.o + .debug_macro 0x00000000 0x18 src/ASF/xmega/drivers/usb/usb_device.o + .debug_macro 0x00000000 0x5e src/ASF/xmega/drivers/usb/usb_device.o + .debug_macro 0x00000000 0x10 src/ASF/xmega/drivers/usb/usb_device.o + .debug_macro 0x00000000 0x22 src/ASF/xmega/drivers/usb/usb_device.o + .debug_macro 0x00000000 0x166 src/ASF/xmega/drivers/usb/usb_device.o + .debug_macro 0x00000000 0x1c src/ASF/xmega/drivers/usb/usb_device.o + .debug_macro 0x00000000 0x35 src/ASF/xmega/drivers/usb/usb_device.o + .debug_macro 0x00000000 0x66 src/ASF/xmega/drivers/usb/usb_device.o + .debug_macro 0x00000000 0x4d1 src/ASF/xmega/drivers/usb/usb_device.o + .debug_macro 0x00000000 0x97 src/ASF/xmega/drivers/usb/usb_device.o + .debug_macro 0x00000000 0x17 src/ASF/xmega/drivers/usb/usb_device.o + .debug_macro 0x00000000 0x250 src/ASF/xmega/drivers/usb/usb_device.o + .debug_macro 0x00000000 0x76 src/ASF/xmega/drivers/usb/usb_device.o + .debug_macro 0x00000000 0x16 src/ASF/xmega/drivers/usb/usb_device.o + .debug_macro 0x00000000 0x6e3 src/ASF/xmega/drivers/usb/usb_device.o + .debug_macro 0x00000000 0x10 src/ASF/xmega/drivers/usb/usb_device.o + .debug_macro 0x00000000 0x175 src/ASF/xmega/drivers/usb/usb_device.o + .debug_macro 0x00000000 0x40 src/ASF/xmega/drivers/usb/usb_device.o + .debug_macro 0x00000000 0x69 src/ASF/xmega/drivers/usb/usb_device.o + .debug_macro 0x00000000 0x32 src/ASF/xmega/drivers/usb/usb_device.o + .debug_macro 0x00000000 0xe4 src/ASF/xmega/drivers/usb/usb_device.o + .debug_macro 0x00000000 0x94 src/ASF/xmega/drivers/usb/usb_device.o + .debug_macro 0x00000000 0x4c src/ASF/xmega/drivers/usb/usb_device.o + .debug_macro 0x00000000 0x244 src/ASF/xmega/drivers/usb/usb_device.o + .debug_macro 0x00000000 0x17e src/ASF/xmega/drivers/usb/usb_device.o + .debug_macro 0x00000000 0x1c src/ASF/xmega/drivers/usb/usb_device.o + .debug_macro 0x00000000 0x16 src/ASF/xmega/drivers/usb/usb_device.o + .debug_macro 0x00000000 0x1c src/ASF/xmega/drivers/usb/usb_device.o + .debug_macro 0x00000000 0x7b src/ASF/xmega/drivers/usb/usb_device.o + .debug_macro 0x00000000 0x2e src/ASF/xmega/drivers/usb/usb_device.o + .debug_macro 0x00000000 0x256 src/ASF/xmega/drivers/usb/usb_device.o + .debug_macro 0x00000000 0x68 src/ASF/xmega/drivers/usb/usb_device.o + .debug_macro 0x00000000 0x2f src/ASF/xmega/drivers/usb/usb_device.o + .debug_macro 0x00000000 0x154 src/ASF/xmega/drivers/usb/usb_device.o + .debug_macro 0x00000000 0x26 src/ASF/xmega/drivers/usb/usb_device.o + .debug_macro 0x00000000 0x16 src/ASF/xmega/drivers/usb/usb_device.o + .debug_macro 0x00000000 0x10 src/ASF/xmega/drivers/usb/usb_device.o + .debug_macro 0x00000000 0x5e src/ASF/xmega/drivers/usb/usb_device.o + .text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_udivmodhi4.o) + .data 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_udivmodhi4.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_udivmodhi4.o) + .text.libgcc.mul + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_udivmodhi4.o) + .text.libgcc 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_udivmodhi4.o) + .text.libgcc.prologue + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_udivmodhi4.o) + .text.libgcc.builtins + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_udivmodhi4.o) + .text.libgcc.fmul + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_udivmodhi4.o) + .text.libgcc.fixed + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_udivmodhi4.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_exit.o) + .data 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_exit.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_exit.o) + .text.libgcc.mul + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_exit.o) + .text.libgcc.div + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_exit.o) + .text.libgcc 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_exit.o) + .text.libgcc.prologue + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_exit.o) + .text.libgcc.builtins + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_exit.o) + .text.libgcc.fmul + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_exit.o) + .text.libgcc.fixed + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_exit.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_tablejump.o) + .data 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_tablejump.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_tablejump.o) + .text.libgcc.mul + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_tablejump.o) + .text.libgcc.div + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_tablejump.o) + .text.libgcc.prologue + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_tablejump.o) + .text.libgcc.builtins + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_tablejump.o) + .text.libgcc.fmul + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_tablejump.o) + .text.libgcc.fixed + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_tablejump.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_copy_data.o) + .data 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_copy_data.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_copy_data.o) + .text.libgcc.mul + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_copy_data.o) + .text.libgcc.div + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_copy_data.o) + .text.libgcc 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_copy_data.o) + .text.libgcc.prologue + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_copy_data.o) + .text.libgcc.builtins + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_copy_data.o) + .text.libgcc.fmul + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_copy_data.o) + .text.libgcc.fixed + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_copy_data.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_clear_bss.o) + .data 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_clear_bss.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_clear_bss.o) + .text.libgcc.mul + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_clear_bss.o) + .text.libgcc.div + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_clear_bss.o) + .text.libgcc 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_clear_bss.o) + .text.libgcc.prologue + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_clear_bss.o) + .text.libgcc.builtins + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_clear_bss.o) + .text.libgcc.fmul + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_clear_bss.o) + .text.libgcc.fixed + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_clear_bss.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avrxmega2\libc.a(memcpy.o) + .data 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avrxmega2\libc.a(memcpy.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avrxmega2\libc.a(memcpy.o) + +Memory Configuration + +Name Origin Length Attributes +text 0x00000000 0x00100000 xr +data 0x00802000 0x0000ffa0 rw !x +eeprom 0x00810000 0x00010000 rw !x +fuse 0x00820000 0x00000400 rw !x +lock 0x00830000 0x00000400 rw !x +signature 0x00840000 0x00000400 rw !x +user_signatures 0x00850000 0x00000400 rw !x +*default* 0x00000000 0xffffffff + +Linker script and memory map + +LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avrxmega2/crtx32a4u.o +LOAD src/tiny_dig.o +LOAD src/ASF/common/boards/user_board/init.o +LOAD src/ASF/common/services/ioport/xmega/ioport_compat.o +LOAD src/main.o +LOAD src/tiny_adc.o +LOAD src/tiny_dac.o +LOAD src/tiny_dma.o +LOAD src/tiny_timer.o +LOAD src/tiny_uart.o +LOAD src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o +LOAD src/ASF/common/services/clock/xmega/sysclk.o +LOAD src/ASF/common/services/sleepmgr/xmega/sleepmgr.o +LOAD src/ASF/common/services/usb/class/vendor/device/udi_vendor.o +LOAD src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o +LOAD src/ASF/common/services/usb/udc/udc.o +LOAD src/ASF/xmega/drivers/cpu/ccp.o +LOAD src/ASF/xmega/drivers/nvm/nvm.o +LOAD src/ASF/xmega/drivers/nvm/nvm_asm.o +LOAD src/ASF/xmega/drivers/usb/usb_device.o +START GROUP +LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avrxmega2\libm.a +END GROUP +START GROUP +LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a +LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avrxmega2\libm.a +LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avrxmega2\libc.a +END GROUP + +.hash + *(.hash) + +.dynsym + *(.dynsym) + +.dynstr + *(.dynstr) + +.gnu.version + *(.gnu.version) + +.gnu.version_d + *(.gnu.version_d) + +.gnu.version_r + *(.gnu.version_r) + +.rel.init + *(.rel.init) + +.rela.init + *(.rela.init) + +.rel.text + *(.rel.text) + *(.rel.text.*) + *(.rel.gnu.linkonce.t*) + +.rela.text + *(.rela.text) + *(.rela.text.*) + *(.rela.gnu.linkonce.t*) + +.rel.fini + *(.rel.fini) + +.rela.fini + *(.rela.fini) + +.rel.rodata + *(.rel.rodata) + *(.rel.rodata.*) + *(.rel.gnu.linkonce.r*) + +.rela.rodata + *(.rela.rodata) + *(.rela.rodata.*) + *(.rela.gnu.linkonce.r*) + +.rel.data + *(.rel.data) + *(.rel.data.*) + *(.rel.gnu.linkonce.d*) + +.rela.data + *(.rela.data) + *(.rela.data.*) + *(.rela.gnu.linkonce.d*) + +.rel.ctors + *(.rel.ctors) + +.rela.ctors + *(.rela.ctors) + +.rel.dtors + *(.rel.dtors) + +.rela.dtors + *(.rela.dtors) + +.rel.got + *(.rel.got) + +.rela.got + *(.rela.got) + +.rel.bss + *(.rel.bss) + +.rela.bss + *(.rela.bss) + +.rel.plt + *(.rel.plt) + +.rela.plt + *(.rela.plt) + +.text 0x00000000 0x288c + *(.vectors) + .vectors 0x00000000 0x1fc c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avrxmega2/crtx32a4u.o + 0x00000000 __vector_default + 0x00000000 __vectors + *(.vectors) + *(.progmem.gcc*) + .progmem.gcc_sw_table.main_sof_action + 0x000001fc 0x10 src/main.o + .progmem.gcc_sw_table.udc_process_setup + 0x0000020c 0x40 src/ASF/common/services/usb/udc/udc.o + .progmem.gcc_sw_table.udd_ep_get_size + 0x0000024c 0xe src/ASF/xmega/drivers/usb/usb_device.o + 0x0000025a . = ALIGN (0x2) + 0x0000025a __trampolines_start = . + *(.trampolines) + .trampolines 0x0000025a 0x0 linker stubs + *(.trampolines*) + 0x0000025a __trampolines_end = . + *(.progmem*) + 0x0000025a . = ALIGN (0x2) + *(.jumptables) + *(.jumptables*) + *(.lowtext) + *(.lowtext*) + 0x0000025a __ctors_start = . + *(.ctors) + 0x0000025a __ctors_end = . + 0x0000025a __dtors_start = . + *(.dtors) + 0x0000025a __dtors_end = . + SORT(*)(.ctors) + SORT(*)(.dtors) + *(.init0) + .init0 0x0000025a 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avrxmega2/crtx32a4u.o + 0x0000025a __init + *(.init0) + *(.init1) + *(.init1) + *(.init2) + .init2 0x0000025a 0xc c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avrxmega2/crtx32a4u.o + *(.init2) + *(.init3) + *(.init3) + *(.init4) + .init4 0x00000266 0x16 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_copy_data.o) + 0x00000266 __do_copy_data + .init4 0x0000027c 0x10 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_clear_bss.o) + 0x0000027c __do_clear_bss + *(.init4) + *(.init5) + *(.init5) + *(.init6) + *(.init6) + *(.init7) + *(.init7) + *(.init8) + *(.init8) + *(.init9) + .init9 0x0000028c 0x6 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avrxmega2/crtx32a4u.o + *(.init9) + *(.text) + .text 0x00000292 0x2 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avrxmega2/crtx32a4u.o + 0x00000292 __vector_38 + 0x00000292 __vector_104 + 0x00000292 __vector_22 + 0x00000292 __vector_63 + 0x00000292 __vector_28 + 0x00000292 __vector_67 + 0x00000292 __vector_1 + 0x00000292 __vector_119 + 0x00000292 __vector_32 + 0x00000292 __vector_75 + 0x00000292 __vector_71 + 0x00000292 __vector_91 + 0x00000292 __vector_34 + 0x00000292 __vector_62 + 0x00000292 __vector_77 + 0x00000292 __vector_102 + 0x00000292 __vector_24 + 0x00000292 __vector_12 + 0x00000292 __vector_55 + 0x00000292 __vector_69 + 0x00000292 __vector_81 + 0x00000292 __vector_90 + 0x00000292 __vector_46 + 0x00000292 __bad_interrupt + 0x00000292 __vector_122 + 0x00000292 __vector_72 + 0x00000292 __vector_114 + 0x00000292 __vector_6 + 0x00000292 __vector_110 + 0x00000292 __vector_31 + 0x00000292 __vector_92 + 0x00000292 __vector_35 + 0x00000292 __vector_78 + 0x00000292 __vector_74 + 0x00000292 __vector_117 + 0x00000292 __vector_39 + 0x00000292 __vector_107 + 0x00000292 __vector_3 + 0x00000292 __vector_105 + 0x00000292 __vector_98 + 0x00000292 __vector_23 + 0x00000292 __vector_68 + 0x00000292 __vector_30 + 0x00000292 __vector_73 + 0x00000292 __vector_45 + 0x00000292 __vector_25 + 0x00000292 __vector_93 + 0x00000292 __vector_61 + 0x00000292 __vector_11 + 0x00000292 __vector_54 + 0x00000292 __vector_99 + 0x00000292 __vector_13 + 0x00000292 __vector_17 + 0x00000292 __vector_19 + 0x00000292 __vector_56 + 0x00000292 __vector_7 + 0x00000292 __vector_49 + 0x00000292 __vector_123 + 0x00000292 __vector_41 + 0x00000292 __vector_86 + 0x00000292 __vector_100 + 0x00000292 __vector_101 + 0x00000292 __vector_64 + 0x00000292 __vector_88 + 0x00000292 __vector_109 + 0x00000292 __vector_43 + 0x00000292 __vector_27 + 0x00000292 __vector_5 + 0x00000292 __vector_113 + 0x00000292 __vector_33 + 0x00000292 __vector_76 + 0x00000292 __vector_115 + 0x00000292 __vector_47 + 0x00000292 __vector_52 + 0x00000292 __vector_37 + 0x00000292 __vector_95 + 0x00000292 __vector_103 + 0x00000292 __vector_96 + 0x00000292 __vector_89 + 0x00000292 __vector_108 + 0x00000292 __vector_4 + 0x00000292 __vector_44 + 0x00000292 __vector_82 + 0x00000292 __vector_106 + 0x00000292 __vector_118 + 0x00000292 __vector_51 + 0x00000292 __vector_9 + 0x00000292 __vector_2 + 0x00000292 __vector_21 + 0x00000292 __vector_15 + 0x00000292 __vector_66 + 0x00000292 __vector_36 + 0x00000292 __vector_79 + 0x00000292 __vector_58 + 0x00000292 __vector_70 + 0x00000292 __vector_29 + 0x00000292 __vector_60 + 0x00000292 __vector_121 + 0x00000292 __vector_40 + 0x00000292 __vector_85 + 0x00000292 __vector_94 + 0x00000292 __vector_8 + 0x00000292 __vector_26 + 0x00000292 __vector_48 + 0x00000292 __vector_124 + 0x00000292 __vector_116 + 0x00000292 __vector_112 + 0x00000292 __vector_111 + 0x00000292 __vector_80 + 0x00000292 __vector_14 + 0x00000292 __vector_84 + 0x00000292 __vector_57 + 0x00000292 __vector_53 + 0x00000292 __vector_10 + 0x00000292 __vector_50 + 0x00000292 __vector_16 + 0x00000292 __vector_59 + 0x00000292 __vector_18 + 0x00000292 __vector_97 + 0x00000292 __vector_20 + 0x00000292 __vector_42 + 0x00000292 __vector_87 + 0x00000292 __vector_65 + 0x00000292 __vector_120 + 0x00000294 . = ALIGN (0x2) + *(.text.*) + .text.tiny_dig_setup + 0x00000294 0xe src/tiny_dig.o + 0x00000294 tiny_dig_setup + .text.board_init + 0x000002a2 0x2 src/ASF/common/boards/user_board/init.o + 0x000002a2 board_init + .text.iso_callback + 0x000002a4 0x22 src/main.o + 0x000002a4 iso_callback + .text.main 0x000002c6 0x46 src/main.o + 0x000002c6 main + .text.main_suspend_action + 0x0000030c 0x2 src/main.o + 0x0000030c main_suspend_action + .text.main_resume_action + 0x0000030e 0x2 src/main.o + 0x0000030e main_resume_action + .text.main_sof_action + 0x00000310 0x40 src/main.o + 0x00000310 main_sof_action + .text.main_vendor_enable + 0x00000350 0x18 src/main.o + 0x00000350 main_vendor_enable + .text.main_vendor_disable + 0x00000368 0x6 src/main.o + 0x00000368 main_vendor_disable + .text.main_setup_out_received + 0x0000036e 0x4 src/main.o + 0x0000036e main_setup_out_received + .text.main_setup_in_received + 0x00000372 0x4 src/main.o + 0x00000372 main_setup_in_received + .text.tiny_adc_ch0setup + 0x00000376 0x1e src/tiny_adc.o + 0x00000376 tiny_adc_ch0setup + .text.tiny_adc_ch1setup + 0x00000394 0x14 src/tiny_adc.o + 0x00000394 tiny_adc_ch1setup + .text.tiny_adc_pid_setup + 0x000003a8 0x14 src/tiny_adc.o + 0x000003a8 tiny_adc_pid_setup + .text.ReadCalibrationByte + 0x000003bc 0x12 src/tiny_adc.o + 0x000003bc ReadCalibrationByte + .text.tiny_adc_setup + 0x000003ce 0x62 src/tiny_adc.o + 0x000003ce tiny_adc_setup + .text.tiny_dac_setup + 0x00000430 0x48 src/tiny_dac.o + 0x00000430 tiny_dac_setup + .text.tiny_dma_setup + 0x00000478 0x12 src/tiny_dma.o + 0x00000478 tiny_dma_setup + .text.tiny_dma_flush + 0x0000048a 0x24 src/tiny_dma.o + 0x0000048a tiny_dma_flush + .text.tiny_dma_set_mode_0 + 0x000004ae 0x90 src/tiny_dma.o + 0x000004ae tiny_dma_set_mode_0 + .text.tiny_dma_loop_mode_0 + 0x0000053e 0x62 src/tiny_dma.o + 0x0000053e tiny_dma_loop_mode_0 + .text.tiny_dma_set_mode_1 + 0x000005a0 0x9c src/tiny_dma.o + 0x000005a0 tiny_dma_set_mode_1 + .text.tiny_dma_loop_mode_1 + 0x0000063c 0xae src/tiny_dma.o + 0x0000063c tiny_dma_loop_mode_1 + .text.tiny_dma_set_mode_2 + 0x000006ea 0x94 src/tiny_dma.o + 0x000006ea tiny_dma_set_mode_2 + .text.tiny_dma_loop_mode_2 + 0x0000077e 0xb0 src/tiny_dma.o + 0x0000077e tiny_dma_loop_mode_2 + .text.tiny_dma_set_mode_3 + 0x0000082e 0xcc src/tiny_dma.o + 0x0000082e tiny_dma_set_mode_3 + .text.tiny_dma_loop_mode_3 + 0x000008fa 0x62 src/tiny_dma.o + 0x000008fa tiny_dma_loop_mode_3 + .text.tiny_dma_set_mode_4 + 0x0000095c 0xcc src/tiny_dma.o + 0x0000095c tiny_dma_set_mode_4 + .text.tiny_dma_loop_mode_4 + 0x00000a28 0xb4 src/tiny_dma.o + 0x00000a28 tiny_dma_loop_mode_4 + .text.tiny_dma_set_mode_5 + 0x00000adc 0x8e src/tiny_dma.o + 0x00000adc tiny_dma_set_mode_5 + .text.tiny_dma_set_mode_6 + 0x00000b6a 0x92 src/tiny_dma.o + 0x00000b6a tiny_dma_set_mode_6 + .text.tiny_dma_loop_mode_6 + 0x00000bfc 0x5e src/tiny_dma.o + 0x00000bfc tiny_dma_loop_mode_6 + .text.tiny_dma_set_mode_7 + 0x00000c5a 0x92 src/tiny_dma.o + 0x00000c5a tiny_dma_set_mode_7 + .text.tiny_dma_loop_mode_7 + 0x00000cec 0x5e src/tiny_dma.o + 0x00000cec tiny_dma_loop_mode_7 + .text.tiny_timer_setup + 0x00000d4a 0x76 src/tiny_timer.o + 0x00000d4a tiny_timer_setup + .text.__vector_83 + 0x00000dc0 0xe8 src/tiny_timer.o + 0x00000dc0 __vector_83 + .text.tiny_uart_setup + 0x00000ea8 0x30 src/tiny_uart.o + 0x00000ea8 tiny_uart_setup + .text.tiny_spi_setup + 0x00000ed8 0x1a src/tiny_uart.o + 0x00000ed8 tiny_spi_setup + .text.sysclk_init + 0x00000ef2 0xd8 src/ASF/common/services/clock/xmega/sysclk.o + 0x00000ef2 sysclk_init + .text.sysclk_enable_module + 0x00000fca 0x18 src/ASF/common/services/clock/xmega/sysclk.o + 0x00000fca sysclk_enable_module + .text.sysclk_enable_usb + 0x00000fe2 0x6c src/ASF/common/services/clock/xmega/sysclk.o + 0x00000fe2 sysclk_enable_usb + .text.udi_vendor_getsetting + 0x0000104e 0x6 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + 0x0000104e udi_vendor_getsetting + .text.udi_vendor_enable + 0x00001054 0x16 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + 0x00001054 udi_vendor_enable + .text.udi_vendor_disable + 0x0000106a 0xc src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + 0x0000106a udi_vendor_disable + .text.udi_vendor_setup + 0x00001076 0x4c src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + 0x00001076 udi_vendor_setup + .text.udi_vendor_iso_in_run + 0x000010c2 0x18 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + 0x000010c2 udi_vendor_iso_in_run + .text.udc_next_desc_in_iface + 0x000010da 0x6a src/ASF/common/services/usb/udc/udc.o + .text.udc_valid_address + 0x00001144 0xc src/ASF/common/services/usb/udc/udc.o + .text.udc_update_iface_desc + 0x00001150 0x74 src/ASF/common/services/usb/udc/udc.o + .text.udc_iface_disable + 0x000011c4 0x84 src/ASF/common/services/usb/udc/udc.o + .text.udc_iface_enable + 0x00001248 0x64 src/ASF/common/services/usb/udc/udc.o + .text.udc_get_interface_desc + 0x000012ac 0xa src/ASF/common/services/usb/udc/udc.o + 0x000012ac udc_get_interface_desc + .text.udc_start + 0x000012b6 0x4 src/ASF/common/services/usb/udc/udc.o + 0x000012b6 udc_start + .text.udc_reset + 0x000012ba 0x4a src/ASF/common/services/usb/udc/udc.o + 0x000012ba udc_reset + .text.udc_sof_notify + 0x00001304 0x5e src/ASF/common/services/usb/udc/udc.o + 0x00001304 udc_sof_notify + .text.udc_process_setup + 0x00001362 0x78a src/ASF/common/services/usb/udc/udc.o + 0x00001362 udc_process_setup + .text.ccp_write_io + 0x00001aec 0xc src/ASF/xmega/drivers/cpu/ccp.o + 0x00001aec ccp_write_io + .text.nvm_read_byte + 0x00001af8 0x14 src/ASF/xmega/drivers/nvm/nvm_asm.o + 0x00001af8 nvm_read_byte + .text.udd_sleep_mode + 0x00001b0c 0x52 src/ASF/xmega/drivers/usb/usb_device.o + .text.udd_ctrl_init + 0x00001b5e 0x56 src/ASF/xmega/drivers/usb/usb_device.o + .text.udd_ctrl_stall_data + 0x00001bb4 0x1c src/ASF/xmega/drivers/usb/usb_device.o + .text.udd_ctrl_send_zlp_in + 0x00001bd0 0x1c src/ASF/xmega/drivers/usb/usb_device.o + .text.udd_ctrl_endofrequest + 0x00001bec 0x10 src/ASF/xmega/drivers/usb/usb_device.o + .text.udd_ctrl_in_sent + 0x00001bfc 0xdc src/ASF/xmega/drivers/usb/usb_device.o + .text.udd_ep_get_size + 0x00001cd8 0x48 src/ASF/xmega/drivers/usb/usb_device.o + .text.udd_ep_get_job + 0x00001d20 0x36 src/ASF/xmega/drivers/usb/usb_device.o + .text.udd_ctrl_interrupt_tc_setup + 0x00001d56 0xde src/ASF/xmega/drivers/usb/usb_device.o + .text.udd_ep_trans_complet + 0x00001e34 0x21c src/ASF/xmega/drivers/usb/usb_device.o + .text.udd_attach + 0x00002050 0x46 src/ASF/xmega/drivers/usb/usb_device.o + 0x00002050 udd_attach + .text.udd_enable + 0x00002096 0x10a src/ASF/xmega/drivers/usb/usb_device.o + 0x00002096 udd_enable + .text.udd_set_address + 0x000021a0 0x6 src/ASF/xmega/drivers/usb/usb_device.o + 0x000021a0 udd_set_address + .text.udd_getaddress + 0x000021a6 0x6 src/ASF/xmega/drivers/usb/usb_device.o + 0x000021a6 udd_getaddress + .text.udd_set_setup_payload + 0x000021ac 0x12 src/ASF/xmega/drivers/usb/usb_device.o + 0x000021ac udd_set_setup_payload + .text.udd_ep_alloc + 0x000021be 0xac src/ASF/xmega/drivers/usb/usb_device.o + 0x000021be udd_ep_alloc + .text.udd_ep_is_halted + 0x0000226a 0x36 src/ASF/xmega/drivers/usb/usb_device.o + 0x0000226a udd_ep_is_halted + .text.udd_ep_clear_halt + 0x000022a0 0x54 src/ASF/xmega/drivers/usb/usb_device.o + 0x000022a0 udd_ep_clear_halt + .text.udd_ep_run + 0x000022f4 0x10e src/ASF/xmega/drivers/usb/usb_device.o + 0x000022f4 udd_ep_run + .text.udd_ep_abort + 0x00002402 0x72 src/ASF/xmega/drivers/usb/usb_device.o + 0x00002402 udd_ep_abort + .text.udd_ep_free + 0x00002474 0x3a src/ASF/xmega/drivers/usb/usb_device.o + 0x00002474 udd_ep_free + .text.udd_ep_set_halt + 0x000024ae 0x42 src/ASF/xmega/drivers/usb/usb_device.o + 0x000024ae udd_ep_set_halt + .text.__vector_125 + 0x000024f0 0x180 src/ASF/xmega/drivers/usb/usb_device.o + 0x000024f0 __vector_125 + .text.__vector_126 + 0x00002670 0x1d2 src/ASF/xmega/drivers/usb/usb_device.o + 0x00002670 __vector_126 + .text.libgcc.div + 0x00002842 0x28 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_udivmodhi4.o) + 0x00002842 __udivmodhi4 + .text.libgcc 0x0000286a 0xc c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_tablejump.o) + 0x0000286a __tablejump2__ + 0x0000286e __tablejump__ + .text.avr-libc + 0x00002876 0x12 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avrxmega2\libc.a(memcpy.o) + 0x00002876 memcpy + 0x00002888 . = ALIGN (0x2) + *(.fini9) + .fini9 0x00002888 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_exit.o) + 0x00002888 _exit + 0x00002888 exit + *(.fini9) + *(.fini8) + *(.fini8) + *(.fini7) + *(.fini7) + *(.fini6) + *(.fini6) + *(.fini5) + *(.fini5) + *(.fini4) + *(.fini4) + *(.fini3) + *(.fini3) + *(.fini2) + *(.fini2) + *(.fini1) + *(.fini1) + *(.fini0) + .fini0 0x00002888 0x4 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_exit.o) + *(.fini0) + 0x0000288c _etext = . + +.data 0x00802000 0xb2 load address 0x0000288c + 0x00802000 PROVIDE (__data_start, .) + *(.data) + *(.data*) + .data.global_mode + 0x00802000 0x1 src/main.o + 0x00802000 global_mode + .data.dummy 0x00802001 0x1 src/main.o + 0x00802001 dummy + .data.auxDacBufLen + 0x00802002 0x2 src/main.o + 0x00802002 auxDacBufLen + .data.dacBuf_len + 0x00802004 0x2 src/main.o + 0x00802004 dacBuf_len + .data.udi_api_vendor + 0x00802006 0xa src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + 0x00802006 udi_api_vendor + .data.udc_config + 0x00802010 0x6 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + 0x00802010 udc_config + .data.udc_config_lsfs + 0x00802016 0x4 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + 0x00802016 udc_config_lsfs + .data.udi_apis + 0x0080201a 0x2 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + 0x0080201a udi_apis + .data.udc_desc_fs + 0x0080201c 0x28 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + 0x0080201c udc_desc_fs + .data.udc_device_desc + 0x00802044 0x14 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + 0x00802044 udc_device_desc + .data.udc_string_desc + 0x00802058 0x32 src/ASF/common/services/usb/udc/udc.o + .data.udc_string_product_name + 0x0080208a 0x19 src/ASF/common/services/usb/udc/udc.o + .data.udc_string_manufacturer_name + 0x008020a3 0xa src/ASF/common/services/usb/udc/udc.o + *fill* 0x008020ad 0x1 + .data.udc_string_desc_languageid + 0x008020ae 0x4 src/ASF/common/services/usb/udc/udc.o + *(.rodata) + *(.rodata*) + *(.gnu.linkonce.d*) + 0x008020b2 . = ALIGN (0x2) + 0x008020b2 _edata = . + 0x008020b2 PROVIDE (__data_end, .) + +.bss 0x008020b2 0xb96 + 0x008020b2 PROVIDE (__bss_start, .) + *(.bss) + *(.bss*) + .bss.PSU_target + 0x008020b2 0x1 src/main.o + 0x008020b2 PSU_target + .bss.b2_state 0x008020b3 0x1 src/main.o + 0x008020b3 b2_state + .bss.b1_state 0x008020b4 0x1 src/main.o + 0x008020b4 b1_state + .bss.main_b_vendor_enable + 0x008020b5 0x1 src/main.o + 0x008020b5 main_b_vendor_enable + .bss.udi_vendor_alternate_setting + 0x008020b6 0x1 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .bss.udc_ep_status.5441 + 0x008020b7 0x2 src/ASF/common/services/usb/udc/udc.o + .bss.udc_ptr_iface + 0x008020b9 0x2 src/ASF/common/services/usb/udc/udc.o + .bss.udc_ptr_conf + 0x008020bb 0x2 src/ASF/common/services/usb/udc/udc.o + *fill* 0x008020bd 0x1 + .bss.udc_num_configuration + 0x008020be 0x2 src/ASF/common/services/usb/udc/udc.o + .bss.udc_iface_setting + 0x008020c0 0x2 src/ASF/common/services/usb/udc/udc.o + .bss.udc_device_status + 0x008020c2 0x2 src/ASF/common/services/usb/udc/udc.o + .bss.b_shortpacket.5230 + 0x008020c4 0x1 src/ASF/xmega/drivers/usb/usb_device.o + .bss.udd_ep_out_cache_buffer + 0x008020c5 0xc0 src/ASF/xmega/drivers/usb/usb_device.o + .bss.udd_ep_job + 0x00802185 0x36 src/ASF/xmega/drivers/usb/usb_device.o + .bss.udd_ctrl_buffer + 0x008021bb 0x40 src/ASF/xmega/drivers/usb/usb_device.o + .bss.udd_ctrl_payload_nb_trans + 0x008021fb 0x2 src/ASF/xmega/drivers/usb/usb_device.o + .bss.udd_ctrl_prev_payload_nb_trans + 0x008021fd 0x2 src/ASF/xmega/drivers/usb/usb_device.o + .bss.udd_ep_control_state + 0x008021ff 0x1 src/ASF/xmega/drivers/usb/usb_device.o + .bss.udd_sram 0x00802200 0x54 src/ASF/xmega/drivers/usb/usb_device.o + .bss.udd_b_idle + 0x00802254 0x1 src/ASF/xmega/drivers/usb/usb_device.o + *(COMMON) + *fill* 0x00802255 0x1 + COMMON 0x00802256 0x9ec src/main.o + 0x00802256 dacBuf_CH1 + 0x00802456 udd_g_ctrlreq + 0x00802466 dacBuf_CH2 + 0x00802666 isoBuf + COMMON 0x00802c42 0x6 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + 0x00802c42 sleepmgr_locks + 0x00802c48 PROVIDE (__bss_end, .) + 0x0000288c __data_load_start = LOADADDR (.data) + 0x0000293e __data_load_end = (__data_load_start + SIZEOF (.data)) + +.noinit 0x00802c48 0x0 + 0x00802c48 PROVIDE (__noinit_start, .) + *(.noinit*) + 0x00802c48 PROVIDE (__noinit_end, .) + 0x00802c48 _end = . + 0x00802c48 PROVIDE (__heap_start, .) + +.eeprom 0x00810000 0x0 + *(.eeprom*) + 0x00810000 __eeprom_end = . + +.fuse + *(.fuse) + *(.lfuse) + *(.hfuse) + *(.efuse) + +.lock + *(.lock*) + +.signature + *(.signature*) + +.user_signatures + *(.user_signatures*) + +.stab + *(.stab) + +.stabstr + *(.stabstr) + +.stab.excl + *(.stab.excl) + +.stab.exclstr + *(.stab.exclstr) + +.stab.index + *(.stab.index) + +.stab.indexstr + *(.stab.indexstr) + +.comment 0x00000000 0x30 + *(.comment) + .comment 0x00000000 0x30 src/tiny_dig.o + 0x31 (size before relaxing) + .comment 0x00000000 0x31 src/ASF/common/boards/user_board/init.o + .comment 0x00000000 0x31 src/main.o + .comment 0x00000000 0x31 src/tiny_adc.o + .comment 0x00000000 0x31 src/tiny_dac.o + .comment 0x00000000 0x31 src/tiny_dma.o + .comment 0x00000000 0x31 src/tiny_timer.o + .comment 0x00000000 0x31 src/tiny_uart.o + .comment 0x00000000 0x31 src/ASF/common/services/clock/xmega/sysclk.o + .comment 0x00000000 0x31 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .comment 0x00000000 0x31 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .comment 0x00000000 0x31 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .comment 0x00000000 0x31 src/ASF/common/services/usb/udc/udc.o + .comment 0x00000000 0x31 src/ASF/xmega/drivers/usb/usb_device.o + +.note.gnu.build-id + *(.note.gnu.build-id) + +.debug + *(.debug) + +.line + *(.line) + +.debug_srcinfo + *(.debug_srcinfo) + +.debug_sfnames + *(.debug_sfnames) + +.debug_aranges 0x00000000 0x490 + *(.debug_aranges) + .debug_aranges + 0x00000000 0x20 src/tiny_dig.o + .debug_aranges + 0x00000020 0x20 src/ASF/common/boards/user_board/init.o + .debug_aranges + 0x00000040 0x60 src/main.o + .debug_aranges + 0x000000a0 0x40 src/tiny_adc.o + .debug_aranges + 0x000000e0 0x20 src/tiny_dac.o + .debug_aranges + 0x00000100 0xa0 src/tiny_dma.o + .debug_aranges + 0x000001a0 0x28 src/tiny_timer.o + .debug_aranges + 0x000001c8 0x28 src/tiny_uart.o + .debug_aranges + 0x000001f0 0x40 src/ASF/common/services/clock/xmega/sysclk.o + .debug_aranges + 0x00000230 0x18 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .debug_aranges + 0x00000248 0x58 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .debug_aranges + 0x000002a0 0x18 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .debug_aranges + 0x000002b8 0x70 src/ASF/common/services/usb/udc/udc.o + .debug_aranges + 0x00000328 0x20 src/ASF/xmega/drivers/cpu/ccp.o + .debug_aranges + 0x00000348 0x28 src/ASF/xmega/drivers/nvm/nvm_asm.o + .debug_aranges + 0x00000370 0x120 src/ASF/xmega/drivers/usb/usb_device.o + +.debug_pubnames + *(.debug_pubnames) + +.debug_info 0x00000000 0xa25e + *(.debug_info .gnu.linkonce.wi.*) + .debug_info 0x00000000 0x290 src/tiny_dig.o + .debug_info 0x00000290 0xff src/ASF/common/boards/user_board/init.o + .debug_info 0x0000038f 0x7cf src/main.o + .debug_info 0x00000b5e 0x9b6 src/tiny_adc.o + .debug_info 0x00001514 0x5f0 src/tiny_dac.o + .debug_info 0x00001b04 0x10d5 src/tiny_dma.o + .debug_info 0x00002bd9 0x17b4 src/tiny_timer.o + .debug_info 0x0000438d 0x476 src/tiny_uart.o + .debug_info 0x00004803 0xc3d src/ASF/common/services/clock/xmega/sysclk.o + .debug_info 0x00005440 0x121 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .debug_info 0x00005561 0x62f src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .debug_info 0x00005b90 0x5fc src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .debug_info 0x0000618c 0x2152 src/ASF/common/services/usb/udc/udc.o + .debug_info 0x000082de 0x80 src/ASF/xmega/drivers/cpu/ccp.o + .debug_info 0x0000835e 0x80 src/ASF/xmega/drivers/nvm/nvm_asm.o + .debug_info 0x000083de 0x1e80 src/ASF/xmega/drivers/usb/usb_device.o + +.debug_abbrev 0x00000000 0x1b61 + *(.debug_abbrev) + .debug_abbrev 0x00000000 0xcc src/tiny_dig.o + .debug_abbrev 0x000000cc 0x8b src/ASF/common/boards/user_board/init.o + .debug_abbrev 0x00000157 0x22c src/main.o + .debug_abbrev 0x00000383 0x1d8 src/tiny_adc.o + .debug_abbrev 0x0000055b 0x161 src/tiny_dac.o + .debug_abbrev 0x000006bc 0x1f2 src/tiny_dma.o + .debug_abbrev 0x000008ae 0x175 src/tiny_timer.o + .debug_abbrev 0x00000a23 0xea src/tiny_uart.o + .debug_abbrev 0x00000b0d 0x2cd src/ASF/common/services/clock/xmega/sysclk.o + .debug_abbrev 0x00000dda 0x80 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .debug_abbrev 0x00000e5a 0x21d src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .debug_abbrev 0x00001077 0xef src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .debug_abbrev 0x00001166 0x412 src/ASF/common/services/usb/udc/udc.o + .debug_abbrev 0x00001578 0x14 src/ASF/xmega/drivers/cpu/ccp.o + .debug_abbrev 0x0000158c 0x12 src/ASF/xmega/drivers/nvm/nvm_asm.o + .debug_abbrev 0x0000159e 0x5c3 src/ASF/xmega/drivers/usb/usb_device.o + +.debug_line 0x00000000 0x88a1 + *(.debug_line .debug_line.* .debug_line_end) + .debug_line 0x00000000 0x793 src/tiny_dig.o + .debug_line 0x00000793 0x768 src/ASF/common/boards/user_board/init.o + .debug_line 0x00000efb 0x9da src/main.o + .debug_line 0x000018d5 0x8f9 src/tiny_adc.o + .debug_line 0x000021ce 0x7e1 src/tiny_dac.o + .debug_line 0x000029af 0x1289 src/tiny_dma.o + .debug_line 0x00003c38 0x896 src/tiny_timer.o + .debug_line 0x000044ce 0x7f2 src/tiny_uart.o + .debug_line 0x00004cc0 0x713 src/ASF/common/services/clock/xmega/sysclk.o + .debug_line 0x000053d3 0x430 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .debug_line 0x00005803 0x600 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .debug_line 0x00005e03 0x4cc src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .debug_line 0x000062cf 0xf3c src/ASF/common/services/usb/udc/udc.o + .debug_line 0x0000720b 0x6e src/ASF/xmega/drivers/cpu/ccp.o + .debug_line 0x00007279 0x11f src/ASF/xmega/drivers/nvm/nvm_asm.o + .debug_line 0x00007398 0x1509 src/ASF/xmega/drivers/usb/usb_device.o + +.debug_frame 0x00000000 0x9a8 + *(.debug_frame) + .debug_frame 0x00000000 0x24 src/tiny_dig.o + .debug_frame 0x00000024 0x24 src/ASF/common/boards/user_board/init.o + .debug_frame 0x00000048 0xa4 src/main.o + .debug_frame 0x000000ec 0x70 src/tiny_adc.o + .debug_frame 0x0000015c 0x30 src/tiny_dac.o + .debug_frame 0x0000018c 0x14c src/tiny_dma.o + .debug_frame 0x000002d8 0x74 src/tiny_timer.o + .debug_frame 0x0000034c 0x34 src/tiny_uart.o + .debug_frame 0x00000380 0x74 src/ASF/common/services/clock/xmega/sysclk.o + .debug_frame 0x000003f4 0xc4 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .debug_frame 0x000004b8 0x120 src/ASF/common/services/usb/udc/udc.o + .debug_frame 0x000005d8 0x3d0 src/ASF/xmega/drivers/usb/usb_device.o + +.debug_str 0x00000000 0x2ee03 + *(.debug_str) + .debug_str 0x00000000 0x26e7b src/tiny_dig.o + 0x274ee (size before relaxing) + .debug_str 0x00026e7b 0x6d src/ASF/common/boards/user_board/init.o + 0x2730a (size before relaxing) + .debug_str 0x00026ee8 0x948 src/main.o + 0x27ddd (size before relaxing) + .debug_str 0x00027830 0xd0f src/tiny_adc.o + 0x286c3 (size before relaxing) + .debug_str 0x0002853f 0x1a6 src/tiny_dac.o + 0x27b10 (size before relaxing) + .debug_str 0x000286e5 0xcbc src/tiny_dma.o + 0x289cb (size before relaxing) + .debug_str 0x000293a1 0x1166 src/tiny_timer.o + 0x28dba (size before relaxing) + .debug_str 0x0002a507 0x13b src/tiny_uart.o + 0x27b91 (size before relaxing) + .debug_str 0x0002a642 0x41c src/ASF/common/services/clock/xmega/sysclk.o + 0x250dc (size before relaxing) + .debug_str 0x0002aa5e 0x96 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + 0x23a7e (size before relaxing) + .debug_str 0x0002aaf4 0x1ce src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + 0x25e7c (size before relaxing) + .debug_str 0x0002acc2 0x3f7 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + 0x25e7f (size before relaxing) + .debug_str 0x0002b0b9 0x7ee src/ASF/common/services/usb/udc/udc.o + 0x28a41 (size before relaxing) + .debug_str 0x0002b8a7 0x355c src/ASF/xmega/drivers/usb/usb_device.o + 0x2b053 (size before relaxing) + +.debug_loc 0x00000000 0x1e3e + *(.debug_loc) + .debug_loc 0x00000000 0x68 src/main.o + .debug_loc 0x00000068 0x112 src/tiny_adc.o + .debug_loc 0x0000017a 0x2f src/tiny_dac.o + .debug_loc 0x000001a9 0xaa src/tiny_dma.o + .debug_loc 0x00000253 0x10f src/tiny_timer.o + .debug_loc 0x00000362 0x31e src/ASF/common/services/clock/xmega/sysclk.o + .debug_loc 0x00000680 0x344 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .debug_loc 0x000009c4 0x510 src/ASF/common/services/usb/udc/udc.o + .debug_loc 0x00000ed4 0xf6a src/ASF/xmega/drivers/usb/usb_device.o + +.debug_macinfo + *(.debug_macinfo) + +.debug_weaknames + *(.debug_weaknames) + +.debug_funcnames + *(.debug_funcnames) + +.debug_typenames + *(.debug_typenames) + +.debug_varnames + *(.debug_varnames) + +.debug_pubtypes + *(.debug_pubtypes) + +.debug_ranges 0x00000000 0x390 + *(.debug_ranges) + .debug_ranges 0x00000000 0x10 src/tiny_dig.o + .debug_ranges 0x00000010 0x10 src/ASF/common/boards/user_board/init.o + .debug_ranges 0x00000020 0x50 src/main.o + .debug_ranges 0x00000070 0x30 src/tiny_adc.o + .debug_ranges 0x000000a0 0x10 src/tiny_dac.o + .debug_ranges 0x000000b0 0x90 src/tiny_dma.o + .debug_ranges 0x00000140 0x18 src/tiny_timer.o + .debug_ranges 0x00000158 0x18 src/tiny_uart.o + .debug_ranges 0x00000170 0x30 src/ASF/common/services/clock/xmega/sysclk.o + .debug_ranges 0x000001a0 0x48 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .debug_ranges 0x000001e8 0x60 src/ASF/common/services/usb/udc/udc.o + .debug_ranges 0x00000248 0x20 src/ASF/xmega/drivers/nvm/nvm_asm.o + .debug_ranges 0x00000268 0x128 src/ASF/xmega/drivers/usb/usb_device.o + +.debug_macro 0x00000000 0xb6b4 + *(.debug_macro) + .debug_macro 0x00000000 0x311 src/tiny_dig.o + .debug_macro 0x00000311 0xa3c src/tiny_dig.o + .debug_macro 0x00000d4d 0x10 src/tiny_dig.o + .debug_macro 0x00000d5d 0x1ad src/tiny_dig.o + .debug_macro 0x00000f0a 0x293 src/tiny_dig.o + .debug_macro 0x0000119d 0x9e src/tiny_dig.o + .debug_macro 0x0000123b 0x5486 src/tiny_dig.o + .debug_macro 0x000066c1 0x9a src/tiny_dig.o + .debug_macro 0x0000675b 0xf1 src/tiny_dig.o + .debug_macro 0x0000684c 0x34 src/tiny_dig.o + .debug_macro 0x00006880 0x10 src/tiny_dig.o + .debug_macro 0x00006890 0x18 src/tiny_dig.o + .debug_macro 0x000068a8 0x5e src/tiny_dig.o + .debug_macro 0x00006906 0x10 src/tiny_dig.o + .debug_macro 0x00006916 0x22 src/tiny_dig.o + .debug_macro 0x00006938 0x166 src/tiny_dig.o + .debug_macro 0x00006a9e 0x1c src/tiny_dig.o + .debug_macro 0x00006aba 0x35 src/tiny_dig.o + .debug_macro 0x00006aef 0x66 src/tiny_dig.o + .debug_macro 0x00006b55 0x4d1 src/tiny_dig.o + .debug_macro 0x00007026 0x97 src/tiny_dig.o + .debug_macro 0x000070bd 0x17 src/tiny_dig.o + .debug_macro 0x000070d4 0x250 src/tiny_dig.o + .debug_macro 0x00007324 0x76 src/tiny_dig.o + .debug_macro 0x0000739a 0x16 src/tiny_dig.o + .debug_macro 0x000073b0 0x6e3 src/tiny_dig.o + .debug_macro 0x00007a93 0x10 src/tiny_dig.o + .debug_macro 0x00007aa3 0x175 src/tiny_dig.o + .debug_macro 0x00007c18 0x40 src/tiny_dig.o + .debug_macro 0x00007c58 0x69 src/tiny_dig.o + .debug_macro 0x00007cc1 0x32 src/tiny_dig.o + .debug_macro 0x00007cf3 0xe4 src/tiny_dig.o + .debug_macro 0x00007dd7 0x34 src/tiny_dig.o + .debug_macro 0x00007e0b 0x256 src/tiny_dig.o + .debug_macro 0x00008061 0x7c src/tiny_dig.o + .debug_macro 0x000080dd 0x26 src/tiny_dig.o + .debug_macro 0x00008103 0x5e src/tiny_dig.o + .debug_macro 0x00008161 0x10 src/tiny_dig.o + .debug_macro 0x00008171 0x2e src/tiny_dig.o + .debug_macro 0x0000819f 0x68 src/tiny_dig.o + .debug_macro 0x00008207 0x2f src/tiny_dig.o + .debug_macro 0x00008236 0x154 src/tiny_dig.o + .debug_macro 0x0000838a 0x9a src/tiny_dig.o + .debug_macro 0x00008424 0x4c src/tiny_dig.o + .debug_macro 0x00008470 0x244 src/tiny_dig.o + .debug_macro 0x000086b4 0x17e src/tiny_dig.o + .debug_macro 0x00008832 0x1c src/tiny_dig.o + .debug_macro 0x0000884e 0x16 src/tiny_dig.o + .debug_macro 0x00008864 0x1c src/tiny_dig.o + .debug_macro 0x00008880 0x7b src/tiny_dig.o + .debug_macro 0x000088fb 0x58 src/tiny_dig.o + .debug_macro 0x00008953 0x2fe src/ASF/common/boards/user_board/init.o + .debug_macro 0x00008c51 0x368 src/main.o + .debug_macro 0x00008fb9 0x58 src/main.o + .debug_macro 0x00009011 0x10 src/main.o + .debug_macro 0x00009021 0x97 src/main.o + .debug_macro 0x000090b8 0xeb src/main.o + .debug_macro 0x000091a3 0xaa src/main.o + .debug_macro 0x0000924d 0xef src/main.o + .debug_macro 0x0000933c 0x34e src/tiny_adc.o + .debug_macro 0x0000968a 0x16 src/tiny_adc.o + .debug_macro 0x000096a0 0x33c src/tiny_dac.o + .debug_macro 0x000099dc 0x346 src/tiny_dma.o + .debug_macro 0x00009d22 0x343 src/tiny_timer.o + .debug_macro 0x0000a065 0x337 src/tiny_uart.o + .debug_macro 0x0000a39c 0x1e6 src/ASF/common/services/clock/xmega/sysclk.o + .debug_macro 0x0000a582 0x1a3 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .debug_macro 0x0000a725 0x22c src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .debug_macro 0x0000a951 0x94 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .debug_macro 0x0000a9e5 0x20c src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .debug_macro 0x0000abf1 0x362 src/ASF/common/services/usb/udc/udc.o + .debug_macro 0x0000af53 0x2f7 src/ASF/xmega/drivers/usb/usb_device.o + .debug_macro 0x0000b24a 0x46a src/ASF/xmega/drivers/usb/usb_device.o +OUTPUT(USB_BULK_TEST.elf elf32-avr) +LOAD linker stubs diff --git a/AVR Code/USB_BULK_TEST/Debug/USB_BULK_TEST.srec b/AVR Code/USB_BULK_TEST/Debug/USB_BULK_TEST.srec new file mode 100644 index 00000000..30161171 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/Debug/USB_BULK_TEST.srec @@ -0,0 +1,663 @@ +S01500005553425F42554C4B5F544553542E73726563F9 +S11300002CC1000046C1000044C1000042C10000F0 +S113001040C100003EC100003CC100003AC10000E4 +S113002038C1000036C1000034C1000032C10000F4 +S113003030C100002EC100002CC100002AC1000004 +S113004028C1000026C1000024C1000022C1000014 +S113005020C100001EC100001CC100001AC1000024 +S113006018C1000016C1000014C1000012C1000034 +S113007010C100000EC100000CC100000AC1000044 +S113008008C1000006C1000004C1000002C1000054 +S113009000C10000FEC00000FCC00000FAC0000067 +S11300A0F8C00000F6C00000F4C00000F2C0000078 +S11300B0F0C00000EEC00000ECC00000EAC0000088 +S11300C0E8C00000E6C00000E4C00000E2C0000098 +S11300D0E0C00000DEC00000DCC00000DAC00000A8 +S11300E0D8C00000D6C00000D4C00000D2C00000B8 +S11300F0D0C00000CEC00000CCC00000CAC00000C8 +S1130100C8C00000C6C00000C4C00000C2C00000D7 +S1130110C0C00000BEC00000BCC00000BAC00000E7 +S1130120B8C00000B6C00000B4C00000B2C00000F7 +S1130130B0C00000AEC00000ACC00000AAC0000007 +S1130140A8C00000A6C00000A4C0000039C600007A +S1130150A0C000009EC000009CC000009AC0000027 +S113016098C0000096C0000094C0000092C0000037 +S113017090C000008EC000008CC000008AC0000047 +S113018088C0000086C0000084C0000082C0000057 +S113019080C000007EC000007CC000007AC0000067 +S11301A078C0000076C0000074C0000072C0000077 +S11301B070C000006EC000006CC000006AC0000087 +S11301C068C0000066C0000064C0000062C0000097 +S11301D060C000005EC000005CC000005AC00000A7 +S11301E058C0000056C0000054C0000052C00000B7 +S11301F050C000000C9478120C94381393019501AC +S1130200970199019B01A0019D019F01E009E20969 +S1130210200A620A6B0A710AC40ACA0A100A120A7C +S1130220140A160A180A1A0A1C0A1E0A520A540A3E +S1130230560A580A5A0A5C0A5E0A600A7E0A890A41 +S1130240930AA10AA30AA50AAF0AB90A8D0E7B0E66 +S11302507E0E810E840E870E8A0E11241FBECFEFF0 +S1130260CDBFDFE2DEBF10E2A0E0B0E2ECE8F8E2EE +S113027002C005900D92A23BB107D9F72CE2A2EB84 +S1130280B0E201C01D92A834B207E1F71CD00C946F +S11302904414B6CEE0E8F6E08FE0808385E0848302 +S11302A0089508958091B420811103C08EEE92E0E8 +S11302B002C080E090E042E551E06EEE72E08A59BF +S11302C0994DFFC6089587E0E0EAF0E082837894D0 +S11302D010D6E7DFF0D7ACD0CFD060E080E077D0A5 +S11302E063D08CE057D031D5DFD5F6D5D3DF00000D +S11302F000000000000000000000000000000000FA +S113030000000000000000000000F1CF08950895EF +S11303108091002090E08830910590F4FC01E25037 +S1130320FF4F0C9435140BD10BC088D109C027D2D0 +S113033007C0E3D205C078D303C060D401C0D6D4CB +S11303409091B42081E0911180E08093B4200895CD +S113035081E08093B52042E551E06EEE72E086E6DE +S113036096E2AFD681E008951092B520089581E019 +S1130370089581E00895E0E0F2E010A2982F9C71C6 +S1130380936890A3881F8827881F880F81A312A2CF +S113039016A20895E0E0F2E010AA836880AB80E141 +S11303A081AB12AA16AA0895E0E0F2E010A683E851 +S11303B080A78FE281A712A616A6089592E09093D3 +S11303C0CA01E82FF0E084911092CA010895CF93F6 +S11303D0DF93E0E7F0E091819D7F9183109200022A +S11303E0623011F49EE101C09CE1E0E0F2E091830F +S11303F090E49283882311F080EC01C080E4E0E073 +S1130400F2E08383613011F482E001C083E0C0E054 +S1130410D2E08C8380E2D2DF8C8781E2CFDF8D87CC +S1130420188E198E81E08883BFDFDF91CF91089504 +S1130430CF93DF93E0E7F0E082818B7F8283C0E299 +S1130440D3E08DE0888380E4898389E08A8383E331 +S1130450B5DF888782E3B2DF898787E3AFDF8A87E6 +S113046086E3ACDF8B87E0E2F6E080818360808303 +S11304701482DF91CF910895E0E7F0E080818E7FD0 +S1130480808380E8809300010895E0E0F1E0108A21 +S113049080E4808B10A280A310AA80ABE0E4F1E09A +S11304A0108280831092B4201092B3200895109289 +S11304B00020EBDFE0E0F1E016AA44E240AB11AA31 +S11304C039E532AB82E083AB809102209091032026 +S11304D084AB95AB86E694E280AF91AF12AE8BE32A +S11304E084AF23E020933D0110923E0180A98068EF +S11304F080AB10924601E0E4F1E0408310924101A8 +S1130500309342012093430180910420909105206F +S1130510809344019093450186E592E280934801DB +S11305209093490110924A0189E380934C012093EE +S11305304D0110924E018081806880830895E0E02F +S1130540F1E0108A80E4808B84E0808B118A81E959 +S1130550828B80E1838B87E791E0848B958B84E2A7 +S1130560808F82E0818F128E4091B4208EEE92E0D3 +S1130570489F9001499F300D11242A59394D248FE9 +S11305804091B420489F9001499F300D1124C90126 +S11305908A59994D958F168E80898068808B08952D +S11305A081E08093002071DFE0E0F1E010AA80E4B4 +S11305B080AB84E080AB11AA12AA8BE483AB14AAAB +S11305C015AA16AA81E090E280AF91AF12AE80EA3C +S11305D084AF88E080933D0110923E0180A9806A37 +S11305E080AB85E58093A00810924601E0E4F1E039 +S11305F084E280831092410189E58093420182E084 +S113060080934301809102209091032080934401C0 +S11306109093450186E694E28093480190934901C2 +S113062010924A018BE380934C0183E080934D0147 +S113063010924E018081806880830895E0E0F1E0AB +S1130640108AA0E4A08B74E0708B118A61E9628B3C +S113065080E1838B27E731E0248B358B84E2808F24 +S113066082E0818F128EB091B4208EEE92E0B89F1A +S1130670A001B99F500D11244A59594D448FB0918E +S1130680B420B89FA001B99F500D11244A59594D67 +S1130690558F168E40894068408B10A2A0A370A38A +S11306A011A262A34BE443A324A335A320EA20A709 +S11306B028E021A712A64091B420489F9001499FA9 +S11306C0300D11242352384D24A74091B420489F63 +S11306D09001499F300D1124C9018352984D95A76B +S11306E016A680A1806880A30895CF93C2E0C0932A +S11306F00020CBDEE0E0F1E016AA44E240AB11AA10 +S113070039E532AB23E023AB80910420909105209E +S113071084AB95AB86E592E280AF91AF12AE89E3EC +S113072084AF20933D0110923E0180A9806880AB84 +S113073010924601E0E4F1E04083109241013093CD +S11307404201C09343018091022090910320809341 +S113075044019093450186E694E280934801909386 +S1130760490110924A018BE380934C0120934D017F +S113077010924E01808180688083CF910895CF9339 +S1130780E0E0F1E0108AB0E4B08BA4E0A08B118A21 +S113079071E9728B80E1838B27E731E0248B358B01 +S11307A084E2808F62E0618F128EC091B4208EEE5D +S11307B092E0C89FA001C99F500D11244A59594D78 +S11307C0448FC091B420C89FA001C99F500D11242B +S11307D04A59594D558F168E40894068408B10A256 +S11307E0B0A3A0A311A272A342E143A324A335A3FF +S11307F024E320A761A712A64091B420489F90014A +S1130800499F300D11242352384D24A74091B42020 +S1130810489F9001499F300D1124C9018352984D7E +S113082095A716A680A1806880A3CF910895CF9341 +S1130830C3E0C093002029DEE0E0F1E010A280E4F0 +S113084080A384E080A311A212A28BE483A314A248 +S113085015A216A281E090E280A791A712A680EAD1 +S113086084A788E085A716A680A1806A80A385E571 +S11308708093A00816AA34E230AB11AA29E522AB72 +S113088082E083AB809102209091032084AB95ABEE +S113089086E694E280AF91AF12AE8BE384AFC0934F +S11308A03D0110923E0180A9806880AB1092460100 +S11308B0E0E4F1E030831092410120934201C093BF +S11308C043018091042090910520809344019093EA +S11308D0450186E592E28093480190934901109284 +S11308E04A0189E380934C01C0934D0110924E015B +S11308F0808180688083CF910895E0E0F1E0108AE0 +S113090080E4808B84E0808B118A81E9828B8BE484 +S1130910838B87E791E0848B958B80EA808F88E0D6 +S1130920818F128E4091B4208EEE92E0489F900108 +S1130930499F300D11242A59394D248F4091B420F8 +S1130940489F9001499F300D1124C9018A59994D3E +S1130950958F168E80898068808B0895CF93C4E02C +S1130960C093002092DDE0E0F1E010A280E480A3D7 +S1130970C0A311A212A28BE483A314A215A216A2EF +S113098081E090E280A791A712A680EA84A788E07C +S113099085A716A680A1806A80A385E58093A00818 +S11309A016AA44E240AB11AA39E532AB23E023ABEB +S11309B0809104209091052084AB95AB86E592E26A +S11309C080AF91AF12AE89E384AF20933D011092C2 +S11309D03E0180A9806880AB10924601E0E4F1E01A +S11309E04083109241013093420182E0809343019D +S11309F080910220909103208093440190934501BB +S1130A0086E694E2809348019093490110924A014A +S1130A108BE380934C0120934D0110924E01808111 +S1130A2080688083CF910895CF93E0E0F1E0108A4D +S1130A30B0E4B08BA4E0A08B118A71E9728B8BE4D3 +S1130A40838B27E731E0248B358B80EA808F68E045 +S1130A50618F128EC091B4208EEE92E0C89FA001E7 +S1130A60C99F500D11244A59594D448FC091B42047 +S1130A70C89FA001C99F500D11244A59594D558F43 +S1130A80168E40894068408B10AAB0ABA0AB11AA67 +S1130A9072AB4AE443AB24AB35AB23EC20AF61AF7C +S1130AA012AE4091B420489F9001499F300D11240B +S1130AB02352384D24AF4091B420489F9001499F60 +S1130AC0300D1124C9018352984D90933D01109229 +S1130AD03E0180A9806880ABCF91089585E0809322 +S1130AE00020D3DCE0E0F1E016AA54E250AB11AAF6 +S1130AF049E542AB23E023AB80910420909105208B +S1130B0084AB95AB86E592E280AF91AF12AE39E348 +S1130B1034AF20933D0110923E0180A9806880ABE0 +S1130B2010924601E0E4F1E05083109241014093B9 +S1130B3042012093430180910420909105208093E9 +S1130B4044019093450186E696E280934801909390 +S1130B50490110924A0130934C0120934D011092A7 +S1130B604E01808180688083089586E08093002010 +S1130B708CDCE0E0F1E016AA44E240AB11AA39E5CE +S1130B8032AB23E023AB809104209091052084AB09 +S1130B9095AB86E592E280AF91AF12AE89E384AF64 +S1130BA020933D0110923E0180A9806880AB109291 +S1130BB04601E0E4F1E040831092410130934201A8 +S1130BC082E08093430180910220909103208093DE +S1130BD044019093450186E694E280934801909302 +S1130BE0490110924A018BE380934C0120934D01FB +S1130BF010924E018081806880830895E0E0F1E0E6 +S1130C00108A80E4808B84E0808B118A81E9828B56 +S1130C1080E1838B8EEE92E0848B958B24E2208F8F +S1130C2022E0218F128E4091B420489F9001499F69 +S1130C30300D11242A59394D248F4091B420489FF6 +S1130C409001499F300D1124C9018A59994D958FFE +S1130C50168E80898068808B089587E080930020B9 +S1130C6014DCE0E0F1E016AA44E240AB11AA39E555 +S1130C7032AB23E023AB809104209091052084AB18 +S1130C8095AB86E592E280AF91AF12AE89E384AF73 +S1130C9020933D0110923E0180A9806880AB1092A0 +S1130CA04601E0E4F1E040831092410130934201B7 +S1130CB082E08093430180910220909103208093ED +S1130CC044019093450186E694E280934801909311 +S1130CD0490110924A018BE380934C0120934D010A +S1130CE010924E018081806880830895E0E0F1E0F5 +S1130CF0108A80E4808B85E0808B118A81E9828B65 +S1130D0080E1838B8EEE92E0848B958B24E2208F9E +S1130D1022E0218F128E4091B420489F9001499F78 +S1130D20300D11242A59394D248F4091B420489F05 +S1130D309001499F300D1124C9018A59994D958F0D +S1130D40168E80898068808B0895E0E7F0E08381C7 +S1130D508C7F838384818C7F848380818D7F808357 +S1130D60E0E8F1E080EC8283128688EC81831186CE +S1130D70E0E0F8E034E0308323E02183148285ED61 +S1130D8091E086A397A31682E0E4F8E03083218300 +S1130D90148286A397A31682E0E6F6E08081806140 +S1130DA08083E0E4F9E083E18183148221E02683F7 +S1130DB088EB9BE086A397A310A611A62083089531 +S1130DC01F920F920FB60F9211242F933F934F93BC +S1130DD08F939F93EF93FF93CF93DF931F92CDB79E +S1130DE0DEB780910020873031F4E0E0F2E084A5A2 +S1130DF0898385A503C0E0E0F2E084A52091B220B8 +S1130E00281BE0E4F9E080A591A531E022300CF440 +S1130E1030E03323C9F031E0823B9B4008F030E0FE +S1130E20332391F0E0E4F9E080A591A529301CF08A +S1130E3026E030E002C021E030E0820F931FE0E4BE +S1130E40F9E080AF91AF21C0E0E4F9E080A591A57D +S1130E5031E02F3F0CF030E03323B9F031E0079755 +S1130E6008F430E0332389F0E0E4F9E080A591A5AB +S1130E70283F1CF426E030E002C021E030E0821B71 +S1130E80930BE0E4F9E080AF91AF0F90DF91CF9145 +S1130E90FF91EF919F918F914F913F912F910F90DF +S1130EA00FBE0F901F901895E0E7F0E083818F7ECE +S1130EB08383E0E4F6E080818A6A80838FEF848311 +S1130EC088E5828BE0EAF8E084EC858383E086831E +S1130ED0178288E184830895E0E7F0E08381877FC7 +S1130EE0838380E48093C00888E5E0E4F6E0858BA2 +S1130EF00895CF93DF9300D000D0CDB7DEB78FEF46 +S1130F0080937000809371008093720080937300CB +S1130F1080937400809375008093760064E081E48C +S1130F2090E0E4D56CE170E082E0E6D58A836DE17F +S1130F3070E082E0E1D5898389819A81019621F468 +S1130F4080E493E289839A8389819A818B839C8349 +S1130F50E0E6F0E082838C8183838FB7F894E0E548 +S1130F60F0E09081926090838FBF818181FFFDCFFB +S1130F708FB7F894A0E5B0E016969C911697997FE8 +S1130F8016969C931697E0E6F0E090E895839BEB29 +S1130F90968316969C911697946016969C939081CE +S1130FA0916090838FBF61E080E490E09FD58FB71C +S1130FB0F894E0E5F0E090819E7F90838FBF2496C3 +S1130FC0CDBFDEBFDF91CF9108959FB7F894E82F8E +S1130FD0F0E0E059FF4F60958081682360839FBFF4 +S1130FE00895863011F468E101C060E0E0E5F0E0C6 +S1130FF0818181FD24C08FB7F894908192609083A1 +S11310008FBF818181FFFDCF8FB7F894A0E5B0E059 +S113101016969C911697997F16969C931697E0E6E0 +S1131020F0E090E895839BEB968316969C91169737 +S1131030946016969C939081916090838FBF6360B7 +S113104084E490E053D560E480E0BFCF08958091BC +S1131050B62008952BD1FC0183818093B6208111A1 +S113106002C076C9089581E008958091B620813048 +S113107009F47AC908958091562488234CF4807623 +S11310808034A9F480915724811113C072C9089542 +S11310908076803481F48091572481110EC0809130 +S11310A05C2490915D24892B51F061C9089580E0FE +S11310B0089580E0089580E0089580E0089580E038 +S11310C008950F931F939B018A01AC0160E083E8AC +S11310D00E947A111F910F910895E091BB20F09125 +S11310E0BC200190F081E02D228133812E0F3F1F1F +S11310F0FC014081E40FF11DE217F307A0F48181A4 +S11311008430A1F0861306C014C081818430A1F01C +S11311108617A9F08081E80FF11DE217F307A8F301 +S113112080E090E0089580E090E0089580E090E011 +S113113008958E2F9F2F089580E090E008958E2FBC +S11311409F2F0895809158248F770C94D010089580 +S11311509091BE20992381F1E091BB20F091BC20B5 +S11311600190F081E02D9481891740F5E093B92036 +S1131170F093BA20228133812E0F3F1FE217F30729 +S1131180F8F49181943061F49281981309C09381A9 +S1131190961306C0E093B920F093BA2081E0089535 +S11311A09081E90FF11DE217F30758F3E093B9209A +S11311B0F093BA2080E0089580E0089580E00895D7 +S11311C080E00895FF920F931F93CF93DF93C82F6E +S11311D060E0BEDFF82E882381F1A091BB20B0919E +S11311E0BC20EC2FF0E0EE0FFF1F12962D913C91E6 +S11311F01397E20FF31F00811181D8011696ED9128 +S1131200FC9117970995682F8C2FA2DFF82E88235D +S1131210A1F0C091B920D091BA2065E0CE015DDF84 +S1131220EC01009721F08A810E943A12F6CFD8018E +S11312301296ED91FC91139709958F2DDF91CF9123 +S11312401F910F91FF9008951F93CF93DF93182F51 +S11312507FDF882339F1C091B920D091BA2065E0AD +S1131260CE013BDFEC01009741F04C815D816B8145 +S11312708A81A5D78111F3CF15C0A091BB20B0916D +S1131280BC20812F90E0880F991F1296ED91FC915C +S11312901397E80FF91F0190F081E02D0190F08180 +S11312A0E02D0995DF91CF911F9108958091B92088 +S11312B09091BA200895EFC60895CF938091BE20EF +S11312C08823C1F0E091BB20F091BC200190F08113 +S11312D0E02D8481882371F0C0E08C2F73DFCF5F11 +S11312E0E091BB20F091BC200190F081E02D84813D +S11312F0C81798F31092BE201092C2201092C320F7 +S1131300CF910895CF938091BE20882341F1E0913D +S1131310BB20F091BC20A081B18114968C918823CC +S1131320F1F0C0E08C2F90E0880F991F0280F381C8 +S1131330E02DE80FF91F0190F081E02D0084F18584 +S1131340E02D309709F00995CF5FE091BB20F09133 +S1131350BC20A081B18114968C91C81718F3CF9149 +S11313600895EF92FF920F931F93CF93DF93109200 +S113137060241092612410926224109263241092CB +S11313806424109265242091562422233CF48091F5 +S11313905C2490915D24892B09F49BC3207620342E +S11313A009F008C18091572490E0FC01E05AF1094A +S11313B0E830F10508F0F5C0EA5FFE4F0C943514EF +S11313C000008BC3E0E0F8E01082809158249091F3 +S11313D0592486AB97AB80915A248F708083CCE5D7 +S11313E0D4E26881798186E592E2E0D688819981A8 +S11313F020910420309105208217930709F46DC3CE +S113140080930420909305208091002090E0883000 +S1131410910508F0C8C0FC01E25FFE4F0C9435143E +S113142046D85BC3BDD859C360D957C300DA55C386 +S113143095DA53C353DB51C398DB4FC30EDC4DC362 +S1131440E0E4F8E01082CCE5D4E26881798160932D +S1131450022070930320809158249091592486ABE4 +S113146097AB80915A248F70808386E694E29ED64F +S11314708881998120910420309105208217930757 +S113148009F42BC3809304209093052080910020BD +S113149090E08830910508F088C0FC01EA5EFE4FB8 +S11314A00C94351404D819C37BD817C31ED915C39B +S11314B0BED913C353DA11C311DB0FC356DB0DC3FB +S11314C0CCDB0BC3E0E4F9E010A611A6809158240C +S11314D08093B22002C380915824E0E2F6E0848332 +S11314E0FCC280915824909159248830910508F0C9 +S11314F05EC0FC01E25EFE4F0C94351460E080E0B7 +S11315000E94E70180915A240E94BB010E94570265 +S1131510E4C260E080E00E94E70180915A240E94C6 +S1131520BB013ED8DAC261E081E00E94E701CAE56E +S1131530D4E288810E94BB0189810E94CA01D5D866 +S1131540CCC275D9CAC20ADAC8C260E080E00E947F +S1131550E70180915A240E94BB01C0DABEC261E057 +S113156080E00E94E70180915A240E94BB01FDDAC9 +S1131570B4C262E080E00E94E70180915A2480684E +S11315800E94BB016ADBA9C280915824E0E8F6E01E +S11315908483A3C2E9E7F0E091E088EDF89484BF86 +S11315A0908300E005C001E003C001E001C000E059 +S11315B0011194C220915624822F807609F00EC224 +S11315C022230CF017C180915C2490915D24009734 +S11315D009F404C22F7109F0B1C030915724363098 +S11315E081F0383009F49FC03111A8C0029739F452 +S11315F062E070E082EC90E2D9D501E0EDC100E058 +S1131600EBC12091582430915924832F992782309B +S1131610910599F01CF4019739F07BC08330910552 +S1131620D9F10F9759F175C0809110209091112034 +S1131630DC016C9170E0BAD55BC0E0911020F091B0 +S113164011208189281708F066C0C9019927880FDD +S1131650991F880F991FE0911220F0911320E80F31 +S1131660F91F80819181FC01628173819FD5E09192 +S11316705E24F0915F2482E081833AC0809114203B +S113168090911520009709F448C0DC0112966D91E1 +S11316907C9113978BD52CC033272130310559F019 +S11316A020F02230310559F03AC064E070E08EEA4F +S11316B090E27CD51DC083EA90E229E003C08AE869 +S11316C090E228E1382FAAE5B0E2E82FF92F8191C2 +S11316D090E08D939D938E2F831B8217C0F3220F6E +S11316E062E0620F6093582070E088E590E25ED576 +S11316F080915C2490915D24209160243091612438 +S11317008217930770F4809360249093612401E01E +S113171063C100E061C100E05FC100E05DC100E0C1 +S11317205BC101E059C1019739F461E070E08EEBCF +S113173090E23CD501E050C100E04EC1213009F0F7 +S11317403FC0309157243A30D9F5019799F58091EB +S1131750BE20882389F1C0915A24D0915B24E09063 +S1131760BB20F090BC20D701ED91FC918481C81777 +S113177028F560E08C2FECDC082F882309F42CC1B9 +S1131780CE019927880F991FD7011296ED91FC91EC +S11317901397E80FF91F0190F081E02D0680F7817F +S11317A0E02D09958093C02061E070E080EC90E228 +S11317B0FDD412C100E010C100E00EC100E00CC174 +S11317C0223009F00BC120915724211100C1029746 +S11317D079F480915A2449D590E08093B72090936E +S11317E0B82062E070E087EB90E2E0D401E0F4C05E +S11317F000E0F2C02F7109F090C08091572483302B +S113180009F4E7C018F48130B1F087C0853019F0CD +S1131810893061F182C080915C2490915D24892B90 +S113182041F482EA98E0809362249093632401E077 +S1131830D3C000E0D1C080915C2490915D24892BB9 +S113184089F48091582490915924019769F48091E6 +S1131850C2209091C3208D7F8093C2209093C32097 +S113186001E0BAC000E0B8C000E0B6C080915C24DA +S113187090915D24892B09F046C095D4882309F4FE +S113188044C020915824309159243327E0911020EA +S1131890F0911120818990E082179307C0F10DDD4A +S11318A080915824909159248093BE20882389F1F3 +S11318B099278150904C880F991F880F991FE091A8 +S11318C01220F0911320E80FF91FE093BB20F0934E +S11318D0BC200190F081E02D84818823E1F0C0E0F8 +S11318E060E08C2FB1DC082F882309F475C0CF5F2A +S11318F0E091BB20F091BC200190F081E02D848127 +S1131900C81770F369C000E067C000E065C000E07C +S113191063C001E061C001E05FC0213009F580913E +S113192057248B30E9F480915C2490915D24892BB9 +S113193099F48091BE20882389F0C0915A24D091D3 +S113194058248C2F3FDC082F882309F445C06D2FC1 +S11319508C2F7ADC082F40C000E03EC000E03CC081 +S1131960223009F03BC080915724813019F0833034 +S1131970B1F031C080915C2490915D24892B59F49D +S11319808091582490915924892B39F480915A24B8 +S113199087D4082F21C000E01FC000E01DC0809143 +S11319A05C2490915D24892B71F48091582490914A +S11319B05924892B51F4CAE5D4E2888122D588813F +S11319C076D5082F09C000E007C000E005C000E09C +S11319D003C000E001C000E0011180C080915624E2 +S11319E08F718130C1F58091BE208823A1F1C0910F +S11319F05A24D0915B240091BB201091BC20D801C3 +S1131A00ED91FC918481C81730F560E08C2FA0DB48 +S1131A10882309F1CE019927880F991FD8011296BE +S1131A20ED91FC911397E80FF91F00811181D80102 +S1131A301696ED91FC9117970995682F8C2F88DBEA +S1131A40882349F0D8011496ED91FC9115970995D6 +S1131A50082F811143C0809156248F718230D9F5AB +S1131A608091BE20882389F1E091BB20F091BC20B5 +S1131A70A081B18114968C91882349F110E0212F23 +S1131A8030E0220F331F0280F381E02DE20FF31FB9 +S1131A90C081D181EE81FF810995682F812F58DBA8 +S1131AA0082F8823D9F0EC81FD810995082F811135 +S1131AB015C01F5FE091BB20F091BC20A081B181D3 +S1131AC014968C911817D8F209C000E007C000E002 +S1131AD005C000E003C000E001C001E0802FDF91F9 +S1131AE0CF911F910F91FF90EF9008951BBEFC01C1 +S1131AF028ED24BF608308954091CA01E62FF72F93 +S1131B008093CA0184914093CA010895811122C02F +S1131B10909154229923D9F09091432C911101C0B2 +S1131B20FFCF9FB7F894E3E4FCE2208121502083A7 +S1131B309FBF0DC09091432C9F3F09F4FFCF9FB7E7 +S1131B40F894E3E4FCE220812F5F20839FBF80931D +S1131B505422089590915422992361F3F8CF0F935E +S1131B60E8ECF4E080818F7D808380818F7D8083A9 +S1131B70E8E1F2E202E0059310921A2210921B228D +S1131B8000E2069300E40693E0E1F2E200E2069349 +S1131B9000E4069310926224109263241092642449 +S1131BA01092652410926024109261241092FF21F7 +S1131BB00F9108950F9385E08093FF21E9E1F2E20C +S1131BC004E00593E1E1F2E204E005930F91089546 +S1131BD00F9383E08093FF2110921A2210921B220C +S1131BE0E8E1F2E202E006930F910895E0916224A5 +S1131BF0F0916324309709F0099508950F93CF93DA +S1131C00DF938091FF21833019F4F0DFA8DF60C0F7 +S1131C108091FB219091FC21C0916024D09161249A +S1131C20C81BD90B71F52091FD213091FE21820F43 +S1131C30931F8093FD219093FE2120915C24309189 +S1131C405D248217930721F08091C420882341F0FA +S1131C5084E08093FF21E0E1F2E202E0069338C0E1 +S1131C60E0916424F0916524309799F009958823D4 +S1131C7081F01092FB211092FC21C0916024D0913C +S1131C806124C034D10528F01092C420C0E4D0E00F +S1131C9003C081E08093C420C0931A22D0931B22F6 +S1131CA08091FB219091FC2120915E2430915F244E +S1131CB0280F391F20931C2230931D22C80FD91FCF +S1131CC0C093FB21D093FC21E8E1F2E202E0069309 +S1131CD0DF91CF910F910895FC018181877090E08D +S1131CE0FC013197E730F10518F4EA5DFE4FBDC5FC +S1131CF088E090E0089580E290E0089580E490E028 +S1131D00089580E890E0089580E091E0089580E0EF +S1131D1092E008958FEF93E0089580E190E00895B4 +S1131D20282F2F7030E0220F331F992787FD9095BD +S1131D308827990F881F9927820F931F02979C0168 +S1131D40220F331F220F331F220F331F820F931FC3 +S1131D508B579E4D08950F93CF938091CC0480FFB1 +S1131D6062C081E08093CC04E0E1F2E200E80693F3 +S1131D70E8E1F2E200E806938093CA04E0E1F2E2CB +S1131D8000E106938091FF21882329F0835082305B +S1131D9008F42CDFE4DE809112229091132208973C +S1131DA009F043C088E0EBEBF1E2A6E5B4E2019070 +S1131DB00D928A95E1F7E8ECF4E0808180628083FB +S1131DC0808180628083CDDAC82F811103C0F2DE66 +S1131DD0C1E02CC08091562488236CF41092FD211C +S1131DE01092FE211092FB211092FC2182E080933C +S1131DF0FF2104DF1BC020915C2430915D24232B40 +S1131E0011F4E6DE13C01092FD211092FE2110920F +S1131E10FB211092FC2181E08093FF21E0E1F2E2BA +S1131E2002E0069303C0C0E001C0C1E08C2FCF9153 +S1131E300F910895BF92CF92DF92EF92FF920F938A +S1131E401F93CF93DF93B82E6BDFEC011B2D111F73 +S1131E501127111F8B2D8F70E82EF12CEE0CFF1C17 +S1131E60E10EF11CC701880F991F880F991F880F75 +S1131E70991F9C01205F3D4D7901C9012DDF6C0143 +S1131E80112309F459C0D70116962D913C91179747 +S1131E908D819E81280F391F2D833E838B819C81E8 +S1131EA028173907B9F1FC01E21BF30B9F01211537 +S1131EB0F4E03F0738F02FEF33E0C901B601C1D495 +S1131EC0281B390B888181FF09C0C901B601B9D427 +S1131ED041E0892B09F040E0942F01C090E0888113 +S1131EE090FB81F98883D70116961D921C9217974F +S1131EF012962D933C93139729813A818D819E816B +S1131F00820F931F14968D939C931597F70102E00B +S1131F10069394C0888181FF83C08D7F8883D70115 +S1131F2016961D921C92179712961D921C92139747 +S1131F30F70102E0069382C0D70112960D911C911D +S1131F401397888182FF13C0E981FA812D813E8134 +S1131F508B819C81B60175D4B0E4BB9EB001112481 +S1131F606B577F4DAC01CF01820F931F84D42D8119 +S1131F703E81200F311F2D833E83EB81FC81E217CC +S1131F80F30710F4ED83FE83D70116968D919C918F +S1131F9017978017910709F043C08D819E81E81738 +S1131FA0F90709F43DC0E81BF90BE115B4E0FB07A0 +S1131FB040F0EFEFF3E0CF01B60143D4E81BF90B97 +S1131FC005C0CF01B6013DD4E81BF90BD701129629 +S1131FD01D921C921397EC15FD0578F4888184609A +S1131FE08883B0E4BB9EC00111248B579F4DF70139 +S1131FF084839583C682D7820FC029813A818D81DB +S11320009E81820F931FD70114968D939C931597ED +S11320101696ED93FC931797F70102E006930EC012 +S1132020888180FF0BC08E7F8883EF81F88530978D +S113203029F06D817E814B2D80E00995DF91CF9150 +S11320401F910F91FF90EF90DF90CF90BF90089574 +S1132050CF93CFB7F89481E059DDEAECF4E080E463 +S1132060808380E28083E1ECF4E08081816080837E +S1132070A9ECB4E08C9182608C93E8ECF4E080816C +S1132080806480838C9181608C938081806880835C +S1132090CFBFCF910895CF93DF93C0E6D0E01882ED +S11320A080E30E94F107E0ECF4E0808180648083A7 +S11320B081E08883CFB7F89480E090E0FC01EE0FD4 +S11320C0FF1FEE0FFF1FEE0FFF1FEF5EFD4D10828F +S11320D001968830910591F7E5E8F1E280818E7FE1 +S11320E08083EEE8F1E280818E7F8083E7E9F1E28C +S11320F080818E7F8083E0EAF1E280818E7F80831D +S1132100E9EAF1E280818E7F8083E2EBF1E2808173 +S11321108E7F80836AE170E082E0EEDC8F3F19F00D +S11321208093FA0403C08FE18093FA046BE170E0BA +S113213082E0E2DC8F3F19F08093FB0403C08FE15F +S11321408093FB04E0ECF4E08081836080838081F1 +S11321508068808380818061808380E192E28683CD +S113216097838081806280838FEF8093C504E8EC3D +S1132170F4E0808182608083109254228091472C05 +S11321808F3F09F4FFCF8FB7F894E7E4FCE2908126 +S11321909F5F90838FBF5CDFCFBFDF91CF910895A6 +S11321A08093C30408958091C304089580935E24AA +S11321B090935F2460936024709361240895E82FC2 +S11321C0EF70F0E0EE0FFF1F992787FD90958827A9 +S11321D0990F881F9927E80FF91FEE0FFF1FEE0FC5 +S11321E0FF1FEE0FFF1FE05FFD4D8181807CD9F55D +S11321F06370613029F010F480E403C080E801C00A +S113220080EC40385105E1F050F440325105A1F022 +S11322104034510599F04031510561F419C041151C +S113222092E0590789F04F3F93E0590779F041153F +S1132230514041F020E00DC022E00BC023E009C072 +S113224024E007C025E005C026E003C027E001C064 +S113225021E0118296E09083822B818381818062C8 +S1132260818381E0089580E00895E82FEF70F0E025 +S1132270EE0FFF1F992787FD90958827990F881FD8 +S11322809927E80FF91FEE0FFF1FEE0FFF1FEE0F48 +S1132290FF1FE05FFD4D818182FB882780F908954F +S11322A0E82FEF70F0E0EE0FFF1F282F332727FDF4 +S11322B030952227330F221F3327E20FF31FEE0F2F +S11322C0FF1FEE0FFF1FEE0FFF1FE05FFD4D91811B +S11322D092FF0EC091819B7F918322DDFC0180815E +S11322E080FF06C08E7F80830780F085E02D0995EE +S11322F081E008957F928F929F92AF92BF92CF9286 +S1132300DF92EF92FF920F931F93CF93DF93982E58 +S1132310862E5A01690104DD7C01792C771C77240F +S1132320771CC92DCF70D0E0CC0FDD1FC70DD11D98 +S1132330CC0FDD1FCC0FDD1FCC0FDD1FC05FDD4DCB +S11323408981807C09F44BC08981807C803C19F0B0 +S1132350898182FD46C08FB7F894F701908190FF80 +S113236003C08FBF712C3EC0F701908191609083B0 +S11323708FBFF701A182B282C382D48215821682F2 +S113238007831087811006C091E0C114D10419F0AD +S113239090E001C091E0F701808190FB81F98B7F8F +S11323A08083772019F01E821F8214C08981807C6B +S11323B0803C61F4CE0190DCBC01C60142D2892B81 +S11323C029F0F70180818E7F80830CC01A821B82E2 +S11323D01E821F82892D2EDD7724739403C0712CF5 +S11323E001C0712C872DDF91CF911F910F91FF9028 +S11323F0EF90DF90CF90BF90AF909F908F907F90A1 +S11324000895FF920F931F93CF93DF93182FF82E05 +S1132410FF1CFF24FF1CC82FCF70D0E0CC0FDD1FA2 +S1132420CF0DD11DCC0FDD1FCC0FDD1FCC0FDD1F59 +S1132430C05FDD4D75DCDC01FE0102E005938C918B +S113244080FF12C08E7F8C931796ED91FC911897A4 +S1132450309751F0FF2019F06E817F8102C06A81AC +S11324607B81412F81E00995DF91CF911F910F91DD +S1132470FF900895CF93C82FC4DFEC2FEF70F0E0E6 +S1132480EE0FFF1F8C2F992787FD90958827990FB2 +S1132490881F9927E80FF91FEE0FFF1FEE0FFF1F8C +S11324A0EE0FFF1FE05FFD4D1182CF9108950F9352 +S11324B0E82FEF70F0E0EE0FFF1F282F332727FDE2 +S11324C030952227330F221F3327E20FF31FEE0F1D +S11324D0FF1FEE0FFF1FEE0FFF1FE05FFD4D918109 +S11324E09460918301E006938CDF81E00F9108955D +S11324F01F920F920FB60F9211240F932F933F93B5 +S11325004F935F936F937F938F939F93AF93BF93F7 +S1132510EF93FF938091CB04882344F480E8809365 +S1132520CA040E9482090E94880190C08091CB0451 +S113253082FF20C084E08093CA048091182286FF21 +S113254085C08091CC0481FD81C005DC81117EC0F1 +S11325508091FF21813011F43BDB78C0843009F095 +S113256075C0E9E1F2E204E00593E1E1F2E204E09E +S113257005936CC08091CB0481FF63C082E080939B +S1132580CA048091102286FF61C08091CC0481FD31 +S11325905DC0E1DB81115AC08091FF21823041F49A +S11325A084E08093FF21E0E1F2E202E006934EC072 +S11325B0833009F04BC0E9E1F2E204E00593E1E184 +S11325C0F2E204E0059342C080E18093CA0481E012 +S11325D018DF81E816DF82E014DF82E812DF0E9450 +S11325E05D091092C304E1E1F2E2108296E0909357 +S11325F0102283E48083E9E1F2E2108290931822AE +S113260080838BEB91E28093142290931522A7DAB6 +S11326101DC08091CB0486FF08C080E48093CA0467 +S113262080E074DA0E94860111C08091CB0485FF9A +S11326300DC080E28093CA0481E068DA0E948701B9 +S113264005C08091CB0484FDBFCFE3CFFF91EF9110 +S1132650BF91AF919F918F917F916F915F914F91B6 +S11326603F912F910F910F900FBE0F901F901895CF +S11326701F920F920FB60F9211240F931F932F9353 +S11326803F934F935F936F937F938F939F93AF93F6 +S1132690BF93CF93DF93EF93FF938091CC0481FD9D +S11326A003C059DB8111B8C082E08093CC048091CF +S11326B0C5048195880FE0E1F2E2E81BF10920816D +S11326C03181205132423695279536952795369596 +S11326D02795822F869520FF02C090E801C090E0E4 +S11326E0890FE82FEF70F0E0EE0FFF1F282F33273C +S11326F027FD30952227330F221F3327E20FF31FC4 +S1132700EE0FFF1FEE0FFF1FEE0FFF1FE05FFD4DEB +S1132710908195FF81C000E20693811178C0809179 +S1132720FF21843019F462DA1ADA76C0C0911222D9 +S1132730D091132280916024909161240091FB2117 +S11327401091FC2198012C0F3D1F8217930718F458 +S1132750EC01C01BD10B80915E2490915F24AE01EB +S11327606BEB71E2800F911F86D00C0F1D1F00933D +S1132770FB211093FC21C034D10569F48091FD2123 +S11327809091FE21800F911F20915C2430915D2453 +S11327908217930788F00093602410936124E091DA +S11327A06424F0916524309729F00995811102C0C1 +S11327B001DA32C00DDA30C0809160249091612436 +S11327C008171907F9F4E0916424F091652430970F +S11327D011F4F0D921C00995811102C0EBD91CC0B4 +S11327E02091FD213091FE218091FB219091FC21CB +S11327F0820F931F8093FD219093FE211092FB2161 +S11328001092FC21E0E1F2E202E0069305C0803878 +S113281011F4F4D901C00EDBFF91EF91DF91CF9158 +S1132820BF91AF919F918F917F916F915F914F91E4 +S11328303F912F911F910F910F900FBE0F901F90FA +S11328401895AA1BBB1B51E107C0AA1FBB1FA617E3 +S1132850B70710F0A61BB70B881F991F5A95A9F745 +S113286080959095BC01CD010895EE0FFF1F059052 +S1132870F491E02D0994FB01DC0102C001900D925A +S10F288041505040D8F70895F894FFCF61 +S113288CFF55800080002A0835083B082708000003 +S113289C4420162000001C201A20062009022700C0 +S11328AC01010080FA0904000003FFFFFF00070583 +S11328BC8102400000070502024000000705830165 +S11328CCFF0301001201000200000040EB0300A012 +S11328DC00020102000100000003000000000000DF +S11328EC00000000000000000000000000000000D8 +S11328FC00000000000000000000000000000000C8 +S113290C00000000000000000000555342476F62B5 +S113291C696E6461722044756D6D792044657669C5 +S113292C6365005461706972546563680000040344 +S105293C090488 +S9030000FC diff --git a/AVR Code/USB_BULK_TEST/Debug/makedep.mk b/AVR Code/USB_BULK_TEST/Debug/makedep.mk new file mode 100644 index 00000000..4097a0ef --- /dev/null +++ b/AVR Code/USB_BULK_TEST/Debug/makedep.mk @@ -0,0 +1,42 @@ +################################################################################ +# Automatically-generated file. Do not edit or delete the file +################################################################################ + +src\tiny_dig.c + +src\ASF\common\boards\user_board\init.c + +src\ASF\common\services\ioport\xmega\ioport_compat.c + +src\main.c + +src\tiny_adc.c + +src\tiny_dac.c + +src\tiny_dma.c + +src\tiny_timer.c + +src\tiny_uart.c + +src\ASF\common\services\usb\class\vendor\device\example\atxmega256a3bu_xmega_a3bu_xplained\ui.c + +src\ASF\common\services\clock\xmega\sysclk.c + +src\ASF\common\services\sleepmgr\xmega\sleepmgr.c + +src\ASF\common\services\usb\class\vendor\device\udi_vendor.c + +src\ASF\common\services\usb\class\vendor\device\udi_vendor_desc.c + +src\ASF\common\services\usb\udc\udc.c + +src\ASF\xmega\drivers\cpu\ccp.s + +src\ASF\xmega\drivers\nvm\nvm.c + +src\ASF\xmega\drivers\nvm\nvm_asm.s + +src\ASF\xmega\drivers\usb\usb_device.c + diff --git a/AVR Code/USB_BULK_TEST/Debug/src/ASF/common/boards/user_board/init.d b/AVR Code/USB_BULK_TEST/Debug/src/ASF/common/boards/user_board/init.d new file mode 100644 index 00000000..b7fc4d06 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/Debug/src/ASF/common/boards/user_board/init.d @@ -0,0 +1,203 @@ +src/ASF/common/boards/user_board/init.d \ + src/ASF/common/boards/user_board/init.o: \ + ../src/ASF/common/boards/user_board/init.c ../src/asf.h \ + ../src/ASF/xmega/drivers/cpu/ccp.h ../src/ASF/xmega/utils/compiler.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\io.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\inttypes.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\iox32a4u.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\portpins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\common.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\version.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\xmega.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\fuse.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\lock.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\builtins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdlib.h \ + ../src/ASF/common/utils/parts.h \ + ../src/ASF/xmega/utils/bit_handling/clz_ctz.h \ + ../src/ASF/xmega/utils/preprocessor/preprocessor.h \ + ../src/ASF/xmega/utils/preprocessor/tpaste.h \ + ../src/ASF/xmega/utils/preprocessor/stringz.h \ + ../src/ASF/xmega/utils/preprocessor/mrepeat.h \ + ../src/ASF/xmega/utils/preprocessor/preprocessor.h \ + ../src/ASF/xmega/utils/progmem.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\pgmspace.h \ + ../src/ASF/common/utils/interrupt.h \ + ../src/ASF/common/utils/interrupt/interrupt_avr8.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\interrupt.h \ + ../src/ASF/xmega/drivers/cpu/xmega_reset_cause.h \ + ../src/ASF/xmega/drivers/cpu/ccp.h \ + ../src/ASF/common/boards/user_board/user_board.h \ + ../src/config/conf_board.h ../src/ASF/common/boards/board.h \ + ../src/ASF/common/services/ioport/ioport.h \ + ../src/ASF/common/services/ioport/xmega/ioport.h \ + ../src/ASF/xmega/drivers/nvm/nvm.h \ + ../src/ASF/xmega/drivers/sleep/sleep.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sleep.h \ + ../src/ASF/common/services/sleepmgr/sleepmgr.h \ + ../src/ASF/common/services/sleepmgr/xmega/sleepmgr.h \ + ../src/config/conf_sleepmgr.h \ + ../src/ASF/common/services/sleepmgr/xmega/sleepmgr.h \ + ../src/ASF/common/services/clock/sysclk.h ../src/config/conf_clock.h \ + ../src/ASF/common/services/clock/xmega/sysclk.h \ + ../src/ASF/common/services/clock/osc.h \ + ../src/ASF/common/services/clock/xmega/osc.h \ + ../src/ASF/common/services/clock/pll.h \ + ../src/ASF/common/services/clock/xmega/pll.h \ + ../src/ASF/common/services/usb/udc/udc.h ../src/config/conf_usb.h \ + ../src/ASF/common/services/usb/class/vendor/device/udi_vendor_conf.h \ + ../src/ASF/common/services/usb/class/vendor/device/udi_vendor.h \ + ../src/ASF/common/services/usb/usb_protocol.h \ + ../src/ASF/common/services/usb/usb_atmel.h \ + ../src/ASF/common/services/usb/class/vendor/usb_protocol_vendor.h \ + ../src/ASF/common/services/usb/udc/udd.h \ + ../src/ASF/common/services/usb/udc/udc_desc.h \ + ../src/ASF/common/services/usb/udc/udi.h \ + ../src/ASF/common/services/usb/udc/udc_desc.h \ + ../src/ASF/common/services/usb/udc/udi.h ../src/ui.h ../src/main.h \ + ../src/ASF/common/services/usb/udc/udd.h \ + ../src/ASF/common/services/usb/class/vendor/device/udi_vendor.h \ + ../src/ASF/xmega/utils/status_codes.h + +../src/asf.h: + +../src/ASF/xmega/drivers/cpu/ccp.h: + +../src/ASF/xmega/utils/compiler.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\io.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\inttypes.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\iox32a4u.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\portpins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\common.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\version.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\xmega.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\fuse.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\lock.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\builtins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdlib.h: + +../src/ASF/common/utils/parts.h: + +../src/ASF/xmega/utils/bit_handling/clz_ctz.h: + +../src/ASF/xmega/utils/preprocessor/preprocessor.h: + +../src/ASF/xmega/utils/preprocessor/tpaste.h: + +../src/ASF/xmega/utils/preprocessor/stringz.h: + +../src/ASF/xmega/utils/preprocessor/mrepeat.h: + +../src/ASF/xmega/utils/preprocessor/preprocessor.h: + +../src/ASF/xmega/utils/progmem.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\pgmspace.h: + +../src/ASF/common/utils/interrupt.h: + +../src/ASF/common/utils/interrupt/interrupt_avr8.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\interrupt.h: + +../src/ASF/xmega/drivers/cpu/xmega_reset_cause.h: + +../src/ASF/xmega/drivers/cpu/ccp.h: + +../src/ASF/common/boards/user_board/user_board.h: + +../src/config/conf_board.h: + +../src/ASF/common/boards/board.h: + +../src/ASF/common/services/ioport/ioport.h: + +../src/ASF/common/services/ioport/xmega/ioport.h: + +../src/ASF/xmega/drivers/nvm/nvm.h: + +../src/ASF/xmega/drivers/sleep/sleep.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sleep.h: + +../src/ASF/common/services/sleepmgr/sleepmgr.h: + +../src/ASF/common/services/sleepmgr/xmega/sleepmgr.h: + +../src/config/conf_sleepmgr.h: + +../src/ASF/common/services/sleepmgr/xmega/sleepmgr.h: + +../src/ASF/common/services/clock/sysclk.h: + +../src/config/conf_clock.h: + +../src/ASF/common/services/clock/xmega/sysclk.h: + +../src/ASF/common/services/clock/osc.h: + +../src/ASF/common/services/clock/xmega/osc.h: + +../src/ASF/common/services/clock/pll.h: + +../src/ASF/common/services/clock/xmega/pll.h: + +../src/ASF/common/services/usb/udc/udc.h: + +../src/config/conf_usb.h: + +../src/ASF/common/services/usb/class/vendor/device/udi_vendor_conf.h: + +../src/ASF/common/services/usb/class/vendor/device/udi_vendor.h: + +../src/ASF/common/services/usb/usb_protocol.h: + +../src/ASF/common/services/usb/usb_atmel.h: + +../src/ASF/common/services/usb/class/vendor/usb_protocol_vendor.h: + +../src/ASF/common/services/usb/udc/udd.h: + +../src/ASF/common/services/usb/udc/udc_desc.h: + +../src/ASF/common/services/usb/udc/udi.h: + +../src/ASF/common/services/usb/udc/udc_desc.h: + +../src/ASF/common/services/usb/udc/udi.h: + +../src/ui.h: + +../src/main.h: + +../src/ASF/common/services/usb/udc/udd.h: + +../src/ASF/common/services/usb/class/vendor/device/udi_vendor.h: + +../src/ASF/xmega/utils/status_codes.h: diff --git a/AVR Code/USB_BULK_TEST/Debug/src/ASF/common/boards/user_board/init.o b/AVR Code/USB_BULK_TEST/Debug/src/ASF/common/boards/user_board/init.o new file mode 100644 index 0000000000000000000000000000000000000000..f66659ba247b0abb378c1a874eeccba46ba2e0a6 GIT binary patch literal 272156 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
SAGlJDjc(?NC%c0itSRfw9wV` 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

%L@$ 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 literal 0 HcmV?d00001 diff --git a/AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.d b/AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.d new file mode 100644 index 00000000..70b9a853 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.d @@ -0,0 +1,126 @@ +src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.d \ + src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o: \ + ../src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.c \ + ../src/config/conf_usb.h ../src/ASF/xmega/utils/compiler.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\io.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\inttypes.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\iox32a4u.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\portpins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\common.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\version.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\xmega.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\fuse.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\lock.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\builtins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdlib.h \ + ../src/ASF/common/utils/parts.h \ + ../src/ASF/xmega/utils/bit_handling/clz_ctz.h \ + ../src/ASF/xmega/utils/preprocessor/preprocessor.h \ + ../src/ASF/xmega/utils/preprocessor/tpaste.h \ + ../src/ASF/xmega/utils/preprocessor/stringz.h \ + ../src/ASF/xmega/utils/preprocessor/mrepeat.h \ + ../src/ASF/xmega/utils/preprocessor/preprocessor.h \ + ../src/ASF/xmega/utils/progmem.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\pgmspace.h \ + ../src/ASF/common/utils/interrupt.h \ + ../src/ASF/common/utils/interrupt/interrupt_avr8.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\interrupt.h \ + ../src/ASF/common/services/usb/class/vendor/device/udi_vendor_conf.h \ + ../src/ASF/common/services/usb/class/vendor/device/udi_vendor.h \ + ../src/ASF/common/services/usb/usb_protocol.h \ + ../src/ASF/common/services/usb/usb_atmel.h \ + ../src/ASF/common/services/usb/class/vendor/usb_protocol_vendor.h \ + ../src/ASF/common/services/usb/udc/udd.h \ + ../src/ASF/common/services/usb/udc/udc_desc.h \ + ../src/ASF/common/services/usb/udc/udi.h \ + ../src/ASF/common/services/usb/udc/udc_desc.h \ + ../src/ASF/common/services/usb/udc/udi.h ../src/ui.h ../src/main.h + +../src/config/conf_usb.h: + +../src/ASF/xmega/utils/compiler.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\io.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\inttypes.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\iox32a4u.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\portpins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\common.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\version.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\xmega.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\fuse.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\lock.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\builtins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdlib.h: + +../src/ASF/common/utils/parts.h: + +../src/ASF/xmega/utils/bit_handling/clz_ctz.h: + +../src/ASF/xmega/utils/preprocessor/preprocessor.h: + +../src/ASF/xmega/utils/preprocessor/tpaste.h: + +../src/ASF/xmega/utils/preprocessor/stringz.h: + +../src/ASF/xmega/utils/preprocessor/mrepeat.h: + +../src/ASF/xmega/utils/preprocessor/preprocessor.h: + +../src/ASF/xmega/utils/progmem.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\pgmspace.h: + +../src/ASF/common/utils/interrupt.h: + +../src/ASF/common/utils/interrupt/interrupt_avr8.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\interrupt.h: + +../src/ASF/common/services/usb/class/vendor/device/udi_vendor_conf.h: + +../src/ASF/common/services/usb/class/vendor/device/udi_vendor.h: + +../src/ASF/common/services/usb/usb_protocol.h: + +../src/ASF/common/services/usb/usb_atmel.h: + +../src/ASF/common/services/usb/class/vendor/usb_protocol_vendor.h: + +../src/ASF/common/services/usb/udc/udd.h: + +../src/ASF/common/services/usb/udc/udc_desc.h: + +../src/ASF/common/services/usb/udc/udi.h: + +../src/ASF/common/services/usb/udc/udc_desc.h: + +../src/ASF/common/services/usb/udc/udi.h: + +../src/ui.h: + +../src/main.h: diff --git a/AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o b/AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o new file mode 100644 index 0000000000000000000000000000000000000000..a02fcc903d22d5a522f5cf8c77acb6a8a5120c10 GIT binary patch literal 262080 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 Y$edMDM*aUa`adX`^Xp>Xzm5I!f0bK&`v3p{ literal 0 HcmV?d00001 diff --git a/AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/usb/udc/udc.d b/AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/usb/udc/udc.d new file mode 100644 index 00000000..43b66ba8 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/usb/udc/udc.d @@ -0,0 +1,222 @@ +src/ASF/common/services/usb/udc/udc.d \ + src/ASF/common/services/usb/udc/udc.o: \ + ../src/ASF/common/services/usb/udc/udc.c ../src/config/conf_usb.h \ + ../src/ASF/xmega/utils/compiler.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\io.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\inttypes.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\iox32a4u.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\portpins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\common.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\version.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\xmega.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\fuse.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\lock.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\builtins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdlib.h \ + ../src/ASF/common/utils/parts.h \ + ../src/ASF/xmega/utils/bit_handling/clz_ctz.h \ + ../src/ASF/xmega/utils/preprocessor/preprocessor.h \ + ../src/ASF/xmega/utils/preprocessor/tpaste.h \ + ../src/ASF/xmega/utils/preprocessor/stringz.h \ + ../src/ASF/xmega/utils/preprocessor/mrepeat.h \ + ../src/ASF/xmega/utils/preprocessor/preprocessor.h \ + ../src/ASF/xmega/utils/progmem.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\pgmspace.h \ + ../src/ASF/common/utils/interrupt.h \ + ../src/ASF/common/utils/interrupt/interrupt_avr8.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\interrupt.h \ + ../src/ASF/common/services/usb/class/vendor/device/udi_vendor_conf.h \ + ../src/ASF/common/services/usb/class/vendor/device/udi_vendor.h \ + ../src/ASF/common/services/usb/usb_protocol.h \ + ../src/ASF/common/services/usb/usb_atmel.h \ + ../src/ASF/common/services/usb/class/vendor/usb_protocol_vendor.h \ + ../src/ASF/common/services/usb/udc/udd.h \ + ../src/ASF/common/services/usb/udc/udc_desc.h \ + ../src/ASF/common/services/usb/udc/udi.h \ + ../src/ASF/common/services/usb/udc/udc_desc.h \ + ../src/ASF/common/services/usb/udc/udi.h ../src/ui.h ../src/main.h \ + ../src/ASF/common/services/usb/udc/udd.h \ + ../src/ASF/common/services/usb/udc/udc.h ../src/globals.h \ + ../src/tiny_dma.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdio.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdarg.h \ + ../src/asf.h ../src/ASF/xmega/drivers/cpu/ccp.h \ + ../src/ASF/xmega/drivers/cpu/xmega_reset_cause.h \ + ../src/ASF/xmega/drivers/cpu/ccp.h \ + ../src/ASF/common/boards/user_board/user_board.h \ + ../src/config/conf_board.h ../src/ASF/common/boards/board.h \ + ../src/ASF/common/services/ioport/ioport.h \ + ../src/ASF/common/services/ioport/xmega/ioport.h \ + ../src/ASF/xmega/drivers/nvm/nvm.h \ + ../src/ASF/xmega/drivers/sleep/sleep.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sleep.h \ + ../src/ASF/common/services/sleepmgr/sleepmgr.h \ + ../src/ASF/common/services/sleepmgr/xmega/sleepmgr.h \ + ../src/config/conf_sleepmgr.h \ + ../src/ASF/common/services/sleepmgr/xmega/sleepmgr.h \ + ../src/ASF/common/services/clock/sysclk.h ../src/config/conf_clock.h \ + ../src/ASF/common/services/clock/xmega/sysclk.h \ + ../src/ASF/common/services/clock/osc.h \ + ../src/ASF/common/services/clock/xmega/osc.h \ + ../src/ASF/common/services/clock/pll.h \ + ../src/ASF/common/services/clock/xmega/pll.h \ + ../src/ASF/common/services/usb/udc/udc.h \ + ../src/ASF/common/services/usb/class/vendor/device/udi_vendor.h \ + ../src/ASF/xmega/utils/status_codes.h ../src/globals.h ../src/tiny_adc.h + +../src/config/conf_usb.h: + +../src/ASF/xmega/utils/compiler.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\io.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\inttypes.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\iox32a4u.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\portpins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\common.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\version.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\xmega.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\fuse.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\lock.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\builtins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdlib.h: + +../src/ASF/common/utils/parts.h: + +../src/ASF/xmega/utils/bit_handling/clz_ctz.h: + +../src/ASF/xmega/utils/preprocessor/preprocessor.h: + +../src/ASF/xmega/utils/preprocessor/tpaste.h: + +../src/ASF/xmega/utils/preprocessor/stringz.h: + +../src/ASF/xmega/utils/preprocessor/mrepeat.h: + +../src/ASF/xmega/utils/preprocessor/preprocessor.h: + +../src/ASF/xmega/utils/progmem.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\pgmspace.h: + +../src/ASF/common/utils/interrupt.h: + +../src/ASF/common/utils/interrupt/interrupt_avr8.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\interrupt.h: + +../src/ASF/common/services/usb/class/vendor/device/udi_vendor_conf.h: + +../src/ASF/common/services/usb/class/vendor/device/udi_vendor.h: + +../src/ASF/common/services/usb/usb_protocol.h: + +../src/ASF/common/services/usb/usb_atmel.h: + +../src/ASF/common/services/usb/class/vendor/usb_protocol_vendor.h: + +../src/ASF/common/services/usb/udc/udd.h: + +../src/ASF/common/services/usb/udc/udc_desc.h: + +../src/ASF/common/services/usb/udc/udi.h: + +../src/ASF/common/services/usb/udc/udc_desc.h: + +../src/ASF/common/services/usb/udc/udi.h: + +../src/ui.h: + +../src/main.h: + +../src/ASF/common/services/usb/udc/udd.h: + +../src/ASF/common/services/usb/udc/udc.h: + +../src/globals.h: + +../src/tiny_dma.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdio.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdarg.h: + +../src/asf.h: + +../src/ASF/xmega/drivers/cpu/ccp.h: + +../src/ASF/xmega/drivers/cpu/xmega_reset_cause.h: + +../src/ASF/xmega/drivers/cpu/ccp.h: + +../src/ASF/common/boards/user_board/user_board.h: + +../src/config/conf_board.h: + +../src/ASF/common/boards/board.h: + +../src/ASF/common/services/ioport/ioport.h: + +../src/ASF/common/services/ioport/xmega/ioport.h: + +../src/ASF/xmega/drivers/nvm/nvm.h: + +../src/ASF/xmega/drivers/sleep/sleep.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sleep.h: + +../src/ASF/common/services/sleepmgr/sleepmgr.h: + +../src/ASF/common/services/sleepmgr/xmega/sleepmgr.h: + +../src/config/conf_sleepmgr.h: + +../src/ASF/common/services/sleepmgr/xmega/sleepmgr.h: + +../src/ASF/common/services/clock/sysclk.h: + +../src/config/conf_clock.h: + +../src/ASF/common/services/clock/xmega/sysclk.h: + +../src/ASF/common/services/clock/osc.h: + +../src/ASF/common/services/clock/xmega/osc.h: + +../src/ASF/common/services/clock/pll.h: + +../src/ASF/common/services/clock/xmega/pll.h: + +../src/ASF/common/services/usb/udc/udc.h: + +../src/ASF/common/services/usb/class/vendor/device/udi_vendor.h: + +../src/ASF/xmega/utils/status_codes.h: + +../src/globals.h: + +../src/tiny_adc.h: diff --git a/AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/usb/udc/udc.o b/AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/usb/udc/udc.o new file mode 100644 index 0000000000000000000000000000000000000000..6363c22699c0b45a0149088de5307674d3817017 GIT binary patch literal 319952 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 literal 0 HcmV?d00001 diff --git a/AVR Code/USB_BULK_TEST/Debug/src/ASF/xmega/boards/xmega_a3bu_xplained/init.d b/AVR Code/USB_BULK_TEST/Debug/src/ASF/xmega/boards/xmega_a3bu_xplained/init.d new file mode 100644 index 00000000..f257f042 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/Debug/src/ASF/xmega/boards/xmega_a3bu_xplained/init.d @@ -0,0 +1,110 @@ +src/ASF/xmega/boards/xmega_a3bu_xplained/init.d \ + src/ASF/xmega/boards/xmega_a3bu_xplained/init.o: \ + ../src/ASF/xmega/boards/xmega_a3bu_xplained/init.c \ + ../src/config/conf_board.h ../src/ASF/common/boards/board.h \ + ../src/ASF/xmega/utils/compiler.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\io.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\inttypes.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\iox256a3bu.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\portpins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\common.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\version.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\xmega.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\fuse.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\lock.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\builtins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdlib.h \ + ../src/ASF/common/utils/parts.h \ + ../src/ASF/xmega/utils/bit_handling/clz_ctz.h \ + ../src/ASF/xmega/utils/preprocessor/preprocessor.h \ + ../src/ASF/xmega/utils/preprocessor/tpaste.h \ + ../src/ASF/xmega/utils/preprocessor/stringz.h \ + ../src/ASF/xmega/utils/preprocessor/mrepeat.h \ + ../src/ASF/xmega/utils/preprocessor/preprocessor.h \ + ../src/ASF/xmega/utils/progmem.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\pgmspace.h \ + ../src/ASF/common/utils/interrupt.h \ + ../src/ASF/common/utils/interrupt/interrupt_avr8.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\interrupt.h \ + ../src/ASF/xmega/boards/xmega_a3bu_xplained/xmega_a3bu_xplained.h \ + ../src/ASF/common/services/ioport/ioport.h \ + ../src/ASF/common/services/ioport/xmega/ioport.h \ + ../src/ASF/common/services/ioport/xmega/ioport_compat.h \ + ../src/ASF/common/services/ioport/xmega/../ioport.h + +../src/config/conf_board.h: + +../src/ASF/common/boards/board.h: + +../src/ASF/xmega/utils/compiler.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\io.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\inttypes.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\iox256a3bu.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\portpins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\common.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\version.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\xmega.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\fuse.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\lock.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\builtins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdlib.h: + +../src/ASF/common/utils/parts.h: + +../src/ASF/xmega/utils/bit_handling/clz_ctz.h: + +../src/ASF/xmega/utils/preprocessor/preprocessor.h: + +../src/ASF/xmega/utils/preprocessor/tpaste.h: + +../src/ASF/xmega/utils/preprocessor/stringz.h: + +../src/ASF/xmega/utils/preprocessor/mrepeat.h: + +../src/ASF/xmega/utils/preprocessor/preprocessor.h: + +../src/ASF/xmega/utils/progmem.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\pgmspace.h: + +../src/ASF/common/utils/interrupt.h: + +../src/ASF/common/utils/interrupt/interrupt_avr8.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\interrupt.h: + +../src/ASF/xmega/boards/xmega_a3bu_xplained/xmega_a3bu_xplained.h: + +../src/ASF/common/services/ioport/ioport.h: + +../src/ASF/common/services/ioport/xmega/ioport.h: + +../src/ASF/common/services/ioport/xmega/ioport_compat.h: + +../src/ASF/common/services/ioport/xmega/../ioport.h: diff --git a/AVR Code/USB_BULK_TEST/Debug/src/ASF/xmega/drivers/cpu/ccp.d b/AVR Code/USB_BULK_TEST/Debug/src/ASF/xmega/drivers/cpu/ccp.d new file mode 100644 index 00000000..dd28a749 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/Debug/src/ASF/xmega/drivers/cpu/ccp.d @@ -0,0 +1,34 @@ +src/ASF/xmega/drivers/cpu/ccp.d src/ASF/xmega/drivers/cpu/ccp.o: \ + ../src/ASF/xmega/drivers/cpu/ccp.s ../src/ASF/xmega/utils/assembler.h \ + ../src/ASF/xmega/utils/assembler/gas.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\io.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\iox32a4u.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\portpins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\common.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\version.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\xmega.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\fuse.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\lock.h + +../src/ASF/xmega/utils/assembler.h: + +../src/ASF/xmega/utils/assembler/gas.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\io.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\iox32a4u.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\portpins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\common.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\version.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\xmega.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\fuse.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\lock.h: diff --git a/AVR Code/USB_BULK_TEST/Debug/src/ASF/xmega/drivers/cpu/ccp.o b/AVR Code/USB_BULK_TEST/Debug/src/ASF/xmega/drivers/cpu/ccp.o new file mode 100644 index 0000000000000000000000000000000000000000..65a8045540525b24fbfd37f50f6f7c1b796f3f89 GIT binary patch literal 1436 zcmah}!EVz)5S@+Nl2)ZOgYDIjkdivQJ4f?I1oDu z4t%@Amb`*aOxGc>wYorf*82Uzi&ZxVf zW7I9d&5Qx1hkB<3+Kd+W?5$>jDvEyuT!PQTskN+ezTQ^^m}AV;GyGq>HT4&=zq~Se zUV)tI6SLCE<~ci@n3djSp5uRzrku$N>rMTXM7D9Rw9I4RYryQv)tI5@8uKlB8uLB^ jjXC#FW9l$Z>4!_M_#j}MqtW6UARg!A9%+B)RCLZC@^*fM literal 0 HcmV?d00001 diff --git a/AVR Code/USB_BULK_TEST/Debug/src/ASF/xmega/drivers/nvm/nvm.d b/AVR Code/USB_BULK_TEST/Debug/src/ASF/xmega/drivers/nvm/nvm.d new file mode 100644 index 00000000..a3266c33 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/Debug/src/ASF/xmega/drivers/nvm/nvm.d @@ -0,0 +1,96 @@ +src/ASF/xmega/drivers/nvm/nvm.d src/ASF/xmega/drivers/nvm/nvm.o: \ + ../src/ASF/xmega/drivers/nvm/nvm.c ../src/ASF/xmega/utils/compiler.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\io.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\inttypes.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\iox32a4u.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\portpins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\common.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\version.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\xmega.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\fuse.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\lock.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\builtins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdlib.h \ + ../src/ASF/common/utils/parts.h \ + ../src/ASF/xmega/utils/bit_handling/clz_ctz.h \ + ../src/ASF/xmega/utils/preprocessor/preprocessor.h \ + ../src/ASF/xmega/utils/preprocessor/tpaste.h \ + ../src/ASF/xmega/utils/preprocessor/stringz.h \ + ../src/ASF/xmega/utils/preprocessor/mrepeat.h \ + ../src/ASF/xmega/utils/preprocessor/preprocessor.h \ + ../src/ASF/xmega/utils/progmem.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\pgmspace.h \ + ../src/ASF/common/utils/interrupt.h \ + ../src/ASF/common/utils/interrupt/interrupt_avr8.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\interrupt.h \ + ../src/ASF/xmega/drivers/cpu/ccp.h ../src/ASF/xmega/drivers/nvm/nvm.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\string.h + +../src/ASF/xmega/utils/compiler.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\io.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\inttypes.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\iox32a4u.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\portpins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\common.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\version.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\xmega.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\fuse.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\lock.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\builtins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdlib.h: + +../src/ASF/common/utils/parts.h: + +../src/ASF/xmega/utils/bit_handling/clz_ctz.h: + +../src/ASF/xmega/utils/preprocessor/preprocessor.h: + +../src/ASF/xmega/utils/preprocessor/tpaste.h: + +../src/ASF/xmega/utils/preprocessor/stringz.h: + +../src/ASF/xmega/utils/preprocessor/mrepeat.h: + +../src/ASF/xmega/utils/preprocessor/preprocessor.h: + +../src/ASF/xmega/utils/progmem.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\pgmspace.h: + +../src/ASF/common/utils/interrupt.h: + +../src/ASF/common/utils/interrupt/interrupt_avr8.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\interrupt.h: + +../src/ASF/xmega/drivers/cpu/ccp.h: + +../src/ASF/xmega/drivers/nvm/nvm.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\string.h: diff --git a/AVR Code/USB_BULK_TEST/Debug/src/ASF/xmega/drivers/nvm/nvm.o b/AVR Code/USB_BULK_TEST/Debug/src/ASF/xmega/drivers/nvm/nvm.o new file mode 100644 index 0000000000000000000000000000000000000000..6dc2facb184fc52b9a29da43d36ed1e9d09ce29d GIT binary patch literal 282556 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 Df>!I& literal 0 HcmV?d00001 diff --git a/AVR Code/USB_BULK_TEST/Debug/src/ASF/xmega/drivers/spi/spi.d b/AVR Code/USB_BULK_TEST/Debug/src/ASF/xmega/drivers/spi/spi.d new file mode 100644 index 00000000..23888189 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/Debug/src/ASF/xmega/drivers/spi/spi.d @@ -0,0 +1,106 @@ +src/ASF/xmega/drivers/spi/spi.d src/ASF/xmega/drivers/spi/spi.o: \ + ../src/ASF/xmega/drivers/spi/spi.c ../src/ASF/xmega/drivers/spi/spi.h \ + ../src/ASF/xmega/utils/compiler.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\io.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\inttypes.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\iox256a3bu.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\portpins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\common.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\version.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\xmega.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\fuse.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\lock.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\builtins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdlib.h \ + ../src/ASF/common/utils/parts.h \ + ../src/ASF/xmega/utils/bit_handling/clz_ctz.h \ + ../src/ASF/xmega/utils/preprocessor/preprocessor.h \ + ../src/ASF/xmega/utils/preprocessor/tpaste.h \ + ../src/ASF/xmega/utils/preprocessor/stringz.h \ + ../src/ASF/xmega/utils/preprocessor/mrepeat.h \ + ../src/ASF/xmega/utils/preprocessor/preprocessor.h \ + ../src/ASF/xmega/utils/progmem.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\pgmspace.h \ + ../src/ASF/common/utils/interrupt.h \ + ../src/ASF/common/utils/interrupt/interrupt_avr8.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\interrupt.h \ + ../src/ASF/xmega/utils/status_codes.h \ + ../src/ASF/common/services/ioport/ioport.h \ + ../src/ASF/common/services/ioport/xmega/ioport.h \ + ../src/ASF/common/services/ioport/xmega/ioport_compat.h \ + ../src/ASF/common/services/ioport/xmega/../ioport.h + +../src/ASF/xmega/drivers/spi/spi.h: + +../src/ASF/xmega/utils/compiler.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\io.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\inttypes.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\iox256a3bu.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\portpins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\common.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\version.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\xmega.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\fuse.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\lock.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\builtins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdlib.h: + +../src/ASF/common/utils/parts.h: + +../src/ASF/xmega/utils/bit_handling/clz_ctz.h: + +../src/ASF/xmega/utils/preprocessor/preprocessor.h: + +../src/ASF/xmega/utils/preprocessor/tpaste.h: + +../src/ASF/xmega/utils/preprocessor/stringz.h: + +../src/ASF/xmega/utils/preprocessor/mrepeat.h: + +../src/ASF/xmega/utils/preprocessor/preprocessor.h: + +../src/ASF/xmega/utils/progmem.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\pgmspace.h: + +../src/ASF/common/utils/interrupt.h: + +../src/ASF/common/utils/interrupt/interrupt_avr8.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\interrupt.h: + +../src/ASF/xmega/utils/status_codes.h: + +../src/ASF/common/services/ioport/ioport.h: + +../src/ASF/common/services/ioport/xmega/ioport.h: + +../src/ASF/common/services/ioport/xmega/ioport_compat.h: + +../src/ASF/common/services/ioport/xmega/../ioport.h: diff --git a/AVR Code/USB_BULK_TEST/Debug/src/ASF/xmega/drivers/usart/usart.d b/AVR Code/USB_BULK_TEST/Debug/src/ASF/xmega/drivers/usart/usart.d new file mode 100644 index 00000000..1cad2cab --- /dev/null +++ b/AVR Code/USB_BULK_TEST/Debug/src/ASF/xmega/drivers/usart/usart.d @@ -0,0 +1,138 @@ +src/ASF/xmega/drivers/usart/usart.d src/ASF/xmega/drivers/usart/usart.o: \ + ../src/ASF/xmega/drivers/usart/usart.c \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdint.h \ + ../src/ASF/xmega/utils/compiler.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\io.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\inttypes.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\iox256a3bu.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\portpins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\common.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\version.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\xmega.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\fuse.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\lock.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\builtins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdlib.h \ + ../src/ASF/common/utils/parts.h \ + ../src/ASF/xmega/utils/bit_handling/clz_ctz.h \ + ../src/ASF/xmega/utils/preprocessor/preprocessor.h \ + ../src/ASF/xmega/utils/preprocessor/tpaste.h \ + ../src/ASF/xmega/utils/preprocessor/stringz.h \ + ../src/ASF/xmega/utils/preprocessor/mrepeat.h \ + ../src/ASF/xmega/utils/preprocessor/preprocessor.h \ + ../src/ASF/xmega/utils/progmem.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\pgmspace.h \ + ../src/ASF/common/utils/interrupt.h \ + ../src/ASF/common/utils/interrupt/interrupt_avr8.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\interrupt.h \ + ../src/ASF/xmega/drivers/usart/usart.h \ + ../src/ASF/xmega/drivers/pmic/pmic.h ../src/ASF/xmega/drivers/cpu/ccp.h \ + ../src/ASF/common/services/clock/sysclk.h ../src/config/conf_clock.h \ + ../src/ASF/common/services/clock/xmega/sysclk.h \ + ../src/ASF/common/boards/board.h \ + ../src/ASF/xmega/boards/xmega_a3bu_xplained/xmega_a3bu_xplained.h \ + ../src/ASF/common/services/clock/osc.h \ + ../src/ASF/common/services/clock/xmega/osc.h \ + ../src/ASF/common/services/clock/pll.h \ + ../src/ASF/common/services/clock/xmega/pll.h \ + ../src/ASF/common/services/ioport/ioport.h \ + ../src/ASF/common/services/ioport/xmega/ioport.h \ + ../src/ASF/common/services/ioport/xmega/ioport_compat.h \ + ../src/ASF/common/services/ioport/xmega/../ioport.h \ + ../src/ASF/xmega/utils/status_codes.h + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdint.h: + +../src/ASF/xmega/utils/compiler.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\io.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\inttypes.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\iox256a3bu.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\portpins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\common.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\version.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\xmega.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\fuse.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\lock.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\builtins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdlib.h: + +../src/ASF/common/utils/parts.h: + +../src/ASF/xmega/utils/bit_handling/clz_ctz.h: + +../src/ASF/xmega/utils/preprocessor/preprocessor.h: + +../src/ASF/xmega/utils/preprocessor/tpaste.h: + +../src/ASF/xmega/utils/preprocessor/stringz.h: + +../src/ASF/xmega/utils/preprocessor/mrepeat.h: + +../src/ASF/xmega/utils/preprocessor/preprocessor.h: + +../src/ASF/xmega/utils/progmem.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\pgmspace.h: + +../src/ASF/common/utils/interrupt.h: + +../src/ASF/common/utils/interrupt/interrupt_avr8.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\interrupt.h: + +../src/ASF/xmega/drivers/usart/usart.h: + +../src/ASF/xmega/drivers/pmic/pmic.h: + +../src/ASF/xmega/drivers/cpu/ccp.h: + +../src/ASF/common/services/clock/sysclk.h: + +../src/config/conf_clock.h: + +../src/ASF/common/services/clock/xmega/sysclk.h: + +../src/ASF/common/boards/board.h: + +../src/ASF/xmega/boards/xmega_a3bu_xplained/xmega_a3bu_xplained.h: + +../src/ASF/common/services/clock/osc.h: + +../src/ASF/common/services/clock/xmega/osc.h: + +../src/ASF/common/services/clock/pll.h: + +../src/ASF/common/services/clock/xmega/pll.h: + +../src/ASF/common/services/ioport/ioport.h: + +../src/ASF/common/services/ioport/xmega/ioport.h: + +../src/ASF/common/services/ioport/xmega/ioport_compat.h: + +../src/ASF/common/services/ioport/xmega/../ioport.h: + +../src/ASF/xmega/utils/status_codes.h: diff --git a/AVR Code/USB_BULK_TEST/Debug/src/ASF/xmega/drivers/usb/usb_device.d b/AVR Code/USB_BULK_TEST/Debug/src/ASF/xmega/drivers/usb/usb_device.d new file mode 100644 index 00000000..d57ee774 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/Debug/src/ASF/xmega/drivers/usb/usb_device.d @@ -0,0 +1,180 @@ +src/ASF/xmega/drivers/usb/usb_device.d \ + src/ASF/xmega/drivers/usb/usb_device.o: \ + ../src/ASF/xmega/drivers/usb/usb_device.c ../src/config/conf_usb.h \ + ../src/ASF/xmega/utils/compiler.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\io.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\inttypes.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\iox32a4u.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\portpins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\common.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\version.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\xmega.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\fuse.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\lock.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\builtins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdlib.h \ + ../src/ASF/common/utils/parts.h \ + ../src/ASF/xmega/utils/bit_handling/clz_ctz.h \ + ../src/ASF/xmega/utils/preprocessor/preprocessor.h \ + ../src/ASF/xmega/utils/preprocessor/tpaste.h \ + ../src/ASF/xmega/utils/preprocessor/stringz.h \ + ../src/ASF/xmega/utils/preprocessor/mrepeat.h \ + ../src/ASF/xmega/utils/preprocessor/preprocessor.h \ + ../src/ASF/xmega/utils/progmem.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\pgmspace.h \ + ../src/ASF/common/utils/interrupt.h \ + ../src/ASF/common/utils/interrupt/interrupt_avr8.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\interrupt.h \ + ../src/ASF/common/services/usb/class/vendor/device/udi_vendor_conf.h \ + ../src/ASF/common/services/usb/class/vendor/device/udi_vendor.h \ + ../src/ASF/common/services/usb/usb_protocol.h \ + ../src/ASF/common/services/usb/usb_atmel.h \ + ../src/ASF/common/services/usb/class/vendor/usb_protocol_vendor.h \ + ../src/ASF/common/services/usb/udc/udd.h \ + ../src/ASF/common/services/usb/udc/udc_desc.h \ + ../src/ASF/common/services/usb/udc/udi.h \ + ../src/ASF/common/services/usb/udc/udc_desc.h \ + ../src/ASF/common/services/usb/udc/udi.h ../src/ui.h ../src/main.h \ + ../src/ASF/common/services/clock/sysclk.h ../src/config/conf_clock.h \ + ../src/ASF/common/services/clock/xmega/sysclk.h \ + ../src/ASF/common/boards/board.h \ + ../src/ASF/common/boards/user_board/user_board.h \ + ../src/config/conf_board.h ../src/ASF/xmega/drivers/cpu/ccp.h \ + ../src/ASF/common/services/clock/osc.h \ + ../src/ASF/common/services/clock/xmega/osc.h \ + ../src/ASF/common/services/clock/pll.h \ + ../src/ASF/common/services/clock/xmega/pll.h \ + ../src/ASF/xmega/drivers/usb/usb_device.h \ + ../src/ASF/xmega/drivers/nvm/nvm.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\string.h \ + ../src/ASF/common/services/sleepmgr/sleepmgr.h \ + ../src/ASF/common/services/sleepmgr/xmega/sleepmgr.h \ + ../src/config/conf_sleepmgr.h ../src/ASF/xmega/drivers/sleep/sleep.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sleep.h + +../src/config/conf_usb.h: + +../src/ASF/xmega/utils/compiler.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\io.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\inttypes.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\iox32a4u.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\portpins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\common.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\version.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\xmega.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\fuse.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\lock.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\builtins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdlib.h: + +../src/ASF/common/utils/parts.h: + +../src/ASF/xmega/utils/bit_handling/clz_ctz.h: + +../src/ASF/xmega/utils/preprocessor/preprocessor.h: + +../src/ASF/xmega/utils/preprocessor/tpaste.h: + +../src/ASF/xmega/utils/preprocessor/stringz.h: + +../src/ASF/xmega/utils/preprocessor/mrepeat.h: + +../src/ASF/xmega/utils/preprocessor/preprocessor.h: + +../src/ASF/xmega/utils/progmem.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\pgmspace.h: + +../src/ASF/common/utils/interrupt.h: + +../src/ASF/common/utils/interrupt/interrupt_avr8.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\interrupt.h: + +../src/ASF/common/services/usb/class/vendor/device/udi_vendor_conf.h: + +../src/ASF/common/services/usb/class/vendor/device/udi_vendor.h: + +../src/ASF/common/services/usb/usb_protocol.h: + +../src/ASF/common/services/usb/usb_atmel.h: + +../src/ASF/common/services/usb/class/vendor/usb_protocol_vendor.h: + +../src/ASF/common/services/usb/udc/udd.h: + +../src/ASF/common/services/usb/udc/udc_desc.h: + +../src/ASF/common/services/usb/udc/udi.h: + +../src/ASF/common/services/usb/udc/udc_desc.h: + +../src/ASF/common/services/usb/udc/udi.h: + +../src/ui.h: + +../src/main.h: + +../src/ASF/common/services/clock/sysclk.h: + +../src/config/conf_clock.h: + +../src/ASF/common/services/clock/xmega/sysclk.h: + +../src/ASF/common/boards/board.h: + +../src/ASF/common/boards/user_board/user_board.h: + +../src/config/conf_board.h: + +../src/ASF/xmega/drivers/cpu/ccp.h: + +../src/ASF/common/services/clock/osc.h: + +../src/ASF/common/services/clock/xmega/osc.h: + +../src/ASF/common/services/clock/pll.h: + +../src/ASF/common/services/clock/xmega/pll.h: + +../src/ASF/xmega/drivers/usb/usb_device.h: + +../src/ASF/xmega/drivers/nvm/nvm.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\string.h: + +../src/ASF/common/services/sleepmgr/sleepmgr.h: + +../src/ASF/common/services/sleepmgr/xmega/sleepmgr.h: + +../src/config/conf_sleepmgr.h: + +../src/ASF/xmega/drivers/sleep/sleep.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sleep.h: diff --git a/AVR Code/USB_BULK_TEST/Debug/src/ASF/xmega/drivers/usb/usb_device.o b/AVR Code/USB_BULK_TEST/Debug/src/ASF/xmega/drivers/usb/usb_device.o new file mode 100644 index 0000000000000000000000000000000000000000..1c3584d0d67a4f65c3ad5fc85a888065f36c2ba0 GIT binary patch literal 346836 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

  • pK00mX89L&5(No4lmBS<}g1t!nM7g@57Ed5f&Y#;ifU!L6UL*MkvRK$Jg zyP|0Bc--OT%4FhsA!U=CQfJ`#Dp_1SzkZK#dR#-OnLpwRONK}YkXMm=6^62Ov?&bb z+Nb+^uR1sVXrnhB6srkWVe=zOHJ(wP^A86TEl{8^j##N$iVj^$yoN)tw zv7cj!%Izk{mMM3%wQX5aj?utVeT2dV#S%2kHH|`dDaQE4ICN9BNa5^pIEL=bISc59 zaDb{Zvbnz3&gEONc9<5lm44j%q_y~xQl{T;>6h=>FLseG=+F8P2bUr-^Yf(M%_jL? z2})G3_#YRr|JkA6`@NQg%;HCO3`+69xWrmK7V#XCVw19lFU8mp-B@ngifTJ;TW*^o zKgC4+KSe~nta)SA&$Ar2grto)zwd ze-`kEci1*H=Vq5D9xv`%jmqohAI|R{!bX zX=j0dew%;)Z~plk3%~N;|JT3O`j!9fZ!9eQmOcpo9Ps~t7=Pja&-r)w(XamWS8B)q zs}DGyUsvC&zls0+AN*j~9e(s{Kl|0;N5B5_Un}n8Q$ElCewp9@Oa6`j{9pV~{r$qi zC-DRR|Ad?6vw!?6T>GEs+W+*|h9CXSfA;IckN(zQ{LSG*se)O9^ z`;Fm8f9L1F$=~G9{NM6BfB!Q*bAAuMRy%JqJ1@Vt-)2nh@A>|p|7v*+U9W!4{P(|E z`@H_U?)AR&TeZ)Br}q2*Ui)3+nqN=vd!K*fKmUb4%m1XY{GTpZ=ZUM}PM(e{1;BM?d?!!;k*n&p+Z~i}8Z||BindpTE#G zf2wQ#rLOriUGwL9-uzwYy~cNuA0PX1o0lzqj{p1-KXCp}b?v{@wST5-|NPfa;tBl! zul$+*N1gLO{Ob6lU;nAj`RDrnf1zjkD?QV{)HD4nJ=4F|GyNMq)4$a-{X0F=zyE0X z(Qp5Uzc>8o@Bhc&Uic!r_W#*Tl-FBhIdk?{Y25r4X) z|Hi^o8RmtjFK=%bke|9beX65RbIW0K0BMZfsmyPMOu>ZteT-4(U(wabLqccB{R%eQA&@6Ru$U((WK`sVuWB}(eZ zoY()5;HCEUIDuK)l4BuV;15>n}tg!G>hQb~VN>977M zl}aK)N=cGR^?SW$UT5#@{o4I?9y>eF^SKM$S+@{oFeX~0FxJ-M2?xA5+@Ne_?}V(+HKF%A2a>2<>+q@x+}| zwv#s8pT{L8*;9r~oKziTr=3iZW5&ooyGOnToQ&ZM195x-$jzTPr+I~oC>#wB<#4p1 z0Q)KSbFwH%1r={_!a6cnb`p_uyP>$Dp`);4cLR7wlZDF5`DlwNIfdV34IVcdMfbmk zOUoEj)uS8&m&bA#%gtEWXW){m$9B!?-BOAk+c~Q@qZGaF9=(~R==JvK-CBxXe~;d* zQuN{;z1vFB8{yHLU5efWkKXO2=uP$L%_&8Xd291;ZYg@SVfE&fqPM`KcSk9Di#>Yt zOVNA8qjzU1dMiD8ca@^|tVi$eQuJQ-=<%4+wWOBQH#~axl%luAqxZj3^tO5Q?kz=c zhevN=DSCT7diRy0_oGK|Q7L*yJ$m<-qIbfh$8%j${-vWoXv@`-QuHc$^p=*QSIwjM zKq-24JbKGY(QDw*d$1I}<{rI=O3@2>^d2rnueC?-ky7+Jdh{MGMX$R@@3B(!dVBO9 zFGa7vM{jv4dU225ic<7Oc=VnqMQ?&f@5xg1rh4?~8%ipFw|MlPDn)OOM{iXrdJ8;y zt4q;a?9p3Oiryn0y{AjjTj|kTTZ-PZ9=&HgdbPp$$?*D;;blfV!A8%4jEu{6CzPbu z2*0vk|Nrzj=t6tm{c?=O2D{(p5bzw@kiIX?Y)6Fsh+HiEtrC`QSiJU5#UKT**=?}) zIziyIw*&U*r)V!vztLVCi`QNp_Ub@pgS9sh09I4Hj$f4Y1eVO4!>4nGM$7 z1_-!~4b={$nGkeouN@X^Zx`5WZw?AXSIBIz_P&C^Yp=_}G!uY~_RiOD%)h^|a2xE( z37^3p$4_jq@?#Kq?M;Tg-jLDW1^SKl8p0Uu+48p+_QHtUz~30o0eJ0gfjy3C(cXnv z?D4iwu~!Q}9K`Q7SbMEf?CpiU_R7D`P`364r`StJf12ZWHduQFDfSv1N^|Nk({~XT zYwy++dx3Jsw715vw)SpHvA64|Wd5;^S$p@T*c$_T{LKbyZ)1wy1n70KN?2RHmjK@F zLqDfE^_s`g1B>17XDRkxhCPle+F)^OioN!*$2NradSbEm_Cv;PY&qBh=f(121Ak*U zo}#xMdfxO}y(&0IUVA&BXKmAt)oYld_iYJ!EE`^X2cTDxh7_#5R?zdN=h?%_a!NmF zkN2t+dq+yx?~N&X$Dx;LcZ#*$@6?q2Zoz&V;CJTp6DFX)!?7FjV((Bu*WfI8!Vm%J#J&e zEZ8fLA89X!#oB9{VsG*(?)bCa&e}US#oqj1ll~y#vDYER-jA@y?HO^r`T%_d$#=;?y+}o zioMTZk9|NJEZ&u3Z#vTl8IN})7JIy_Q|t{xWO*LzvG+Cf-~x*Jb#d6UHkd}sznw&HBNY^^UIq?4)!xbKTfLL$ zwYSEww)XN)qKB$g6s%s~|EM?RBzo2cjapuC5^l zbxCfpzpaIywas5bIBy3s-EuV*asEa>^m>ZDy;+c?cI#U+N+E_u-nky6`fq4O=hsam4_a;v7vV)-Bg2s z_GV!DKlW7UdR_$o=V_=*vNxo4x*1c=wRdYN_U2r6^8S5l`nLB>FY2G(R*JpFu=kWr z6!a{n+B*z;J8(=q-rGyDcTpc>?)Fr;lI(4{EZs~{{@HOyp5LPLAsag`H-^_PHk4$q zeZTag_RWqvp3L49+~}O?shB0%>vBc9X^sI$9xqlUo?nAO1CE#3P?Eg~2VoCC(w-f6 zJX!h{!QL;{7}h1(TlPb`;n)D}*>T5{*}Huee8PXQ*YQxg83aArv*V5@v$p~Es{99g zkHDV2KC`~8#l8*Of*lPeKrtf|%CDph6us6UO!@4AUyI^lIey2Sz410U*#S-*N%D)}7hXgTw$f6SMeZ29% z`2#j&*8d?1CEEKI_9ogyLC<1peX9w3yvAnwUMj`j<*%K5JSWxOg44>F$*@Cvuasi% zUf3Io-)$%v>tWTw0J-YLaiOYCf#JxJ(TOf4_{YL+n^3ugM>E5+XWxBpxFkzTt@QTy?JDfYI( z-hc52A=qmGJ51k)rPw?8AJf;*lfJE`*ei?7y$-+IP*VQQg1s$JV){P8f>YyM&!qNu zZ-l)p{ANQ*_IlSz){jr2T#~)ju-ErLl$YhO*I(u3^HS`U!9fhMiNm_2^rfFu#%#pz zJl-#`l$5@auy-DQx1l6^Z@`}Q2VX(CBzuctueUVuDxlp``RJfW0;4-2B@O-I9)X`p5sRespY}tRH(yvG+gN zt6~#}bxG+P0(-W7`>qswkHOx5>5or`J=-7O@3D7wnPeK6taMbK3TKeqVAEF%dY)`G zby~nbpXuh`_fWO@*G%>T+P?AuV=h~htRS?8lF%Y;NL<(@Z~XYlA&ru9K-YW)24WHsZwn0{K2Hw8!&U z0gKmO_w8wBePsw0tUVjIYp*=r{PM4rbDdVK1!p|R`!nJp=bl{KBIz&xvJczF6VC*< z^TeBgL!P)duW?lWa@%B@Qqz-LbWgDt^!&KuxI(tLjjx!8W_t6S`?^%=i^Y%lI7Se- zz0XW3+QQxbTIV0R-Z%B#Xm=eD^B|al1&K4pW(##LZ2q?|mni9V)C4PHKd~Qnoj+FSFDe=2g;`gM) z?@fu{mlD4}CB7sj{y<9n!Ib#JDe*^B;*Y1qSER(BOo>005?`GXe>x@pOiKK@l=$;0 zaqB%@ahh{QoK#73u4ujS4ao>7&1_1Ezn&7`oDzR4CH_uI{JoU;`zdkj&0TSt*_!hE zCn@nyQ{tbe#J@<1vqzi^X@))8WJojLBqN|SvpXfeCnf$}N_>Ax{E%7g^NM_i&toKm z-&F8+PO!(8#p3B^WU+V|^I)-fS+lKJyqqbQmbA`0hLK|N3T9Zbctx|QSo{?8PO*3; zbG%r*vT4Q+Q&Bk8TwN@FnweKDUd3!E7O!eB+~^4z2A3C}aJuPLEMCpbC>B4%JYOtc z-TY82Uc=P!jA3!ayhpM4nPz&icrEixv3PB>uUNc}saejGJad-mUMybM%qSK=+q_sT zo@ovhi=Sf}mG|1KXRaz1uW#-u7H?oaDi%N2q*d^4-_Qh$#T%I+#o~?4l49{D=KW&v zrsl6=@n)up=N=q-9pcv|O>ee0g3|tDO1xO*!0*Kh zH{!(#BVxr06XL}R1LDO_CgR0T2I9ps7x7}5fq1clLA=<(AYLgY{gqSVr>4YDONp~r zn+$2i-TYPN;9XY#H*#m&q#?^Pl?w^iSx=d8Pd#|$p|RT)JlohPKmQupA2cJ zAKs8=>UyKFcXmoVGbMgbO1xf5ynaf&K}!7Glz79Gc%zhfWujnPgp?F8t z)#D3%deN}>JAOsFp0|OMGS4f(MZ#k5{T4~>%f3Z||MMCF1!7 zdGYM*!rWL+c0nu{jTx$qFC2#xTR1*zNLEfbE0mXmFTo~a1+jwMcqpC|i6_FbyhLF^ zVJw~#3kTdyCd83oY!Jd1bPKX`3knPJLfP?9b}W>W6Ut6R0(p6nSavXkUz`n~&F@)q zANk>|XkK1!B0Dcu5X_DjMsf?Y^TTmKC_560L=y#hsma2m*jb@)Zhj~nDZtFB;eu#h zVRkeWj7M{VmCm0P)bW;|Jgu?~l!kiE@Ah#epI~**G0nHP6YB3`2~fMV0JjWASW*vEX)f<-IVd&&C#Qn zUAbA&f)JGQauU%f@+VOc!?d!w1&Me#nwy(b5O9wkpG_N&?>1tK+)!35mPjB8*}0Ke zVW==42?=NCMnm~|fgtu13OcEBzP#-oMRs0ZK{TG1pB=^PquJT<++3W+fc%U#5j|9VxI^Js??y5(^h1tPG zb|M%LW*0;QdD%I6`FW8IdE84)_1M(ha5M??LC=8>dhYLeF!R(xZ+(05bk`v31 zQ}8DB6z(Js<*6_pMcvCu1R{BbIXL7{JUbcYC4!M?c77mH5Y5if+2EW4Hd(pZ!9rNW6!zgzB)_mQQka($%8BOU1@SQQ(b;0; zxWt%5lwKs9ot1+m2g1Qbettnt81*POFBFdD=M>^YW^fidftY%D{Fo>jpdne2oGh5k zNrYm#@mL`;7pVzGc0DU5wu}YB_;v@17SswN zc?I!!3@0=%n1{0#3>7Av6tbrfoiH-N+RuuRh=xPCvAk#u^TX%nMDoL-7(7iNRtN_f zi@Ozp+aTj7jE*@@134dvM?={t_%ZkhoQ1q#JO`Da5I!e2KM~G#bKbj|QtR#%o+3LE zFH95^MB)W`sI9R`A`W*|ke?d~MCHgQ#$#yt#>cQpB#?!gg9aiH2nOL}^7C@zaHP37 zx-ha4XT zg6wcC7>j1daI*3O`2}zzv0z?)I4@W2g>$xIa?+@P!EgemBiYde8uUc8ARM6E4aaj) z?)fnlC)W!`N5?U3x!GBH;b0)Z${Ik<6-MIO@XcuQa&v>Ra9$$YP1WlJZgt7vO+z2`X*>ISJIE`p~b5QvrXm$cQ2{gpc zF<{~axG3%>J1a`JnFz;Yu}~ZZI2&gu~gfXknlr2bCs)mMyO^j2=rO zgvP^I^8;}T=phvu9z!zPX#6GWGqCD$^WW=2bhF-+rY@suc4*+tuL3fAl ztT2x8V)MaJ;++YGanBquiWZ;O#R^X{<%?@Bb)FYjnmV})rA0HkD3YAUMFP*z9e+$ME{a ze(al5sp02|BNJBSF|JQVdgg2yI50kXpgtLinRhr6mWFF>UWfDAH=TgM>ta9T9kAwT zQ~Ex4ynxrg)aM8guLa3mb3~`CbU1obPTWvBw8K#kYlkBkv>(KpqZPEnHLstooe0?4 z;dQW0TUQVF0MiafTzX=m9qxRc($xK7~ ze)m}+UYnD7>Dyk+ym8V7IY;4`ebiz8br&N^?z@hi00?EVq>IZl-q|=KWZZ`P8e zu3=!NnTI?|%yT^s3vDjKda{S7f^9xb7xP$dA;S*ydzP5_Fb|8ha~I|9@eg4k7N%ht z)=RNi`9tK+Zhk)|=6QdDto&ak=6=_bv0t9sbz+W4zeBQQ9~<)gXJ9!^!?CP)Rm3bO83*uBp$zo73zkW8Cf4cVhFF&svy3p^ z)CpqEydy`jX89zy#hT@(LI?aqaP-8~Ps8x;4y>6rd#kH$yzH|aJ&zY94VvfG|z(PB{uuFdrm;i)Zuu%Rj*0Zp% zoG{G6LOV}jJs*p$n+wD&4-3gWaD>HJ$do@s=7AzSf+d561YtQAyRVgC?yD@;YsBTS zeijS&`!d!ns~Oes58*{Dc3Y?1$|t-Ax%Cxql9ir!#kSnq^n47tEd$%Yw!VJ}w)S^= zn7hxN@%SSoaO%L8{)QOxt0fpW;e^XG5qo~z#AG;k#(VuIucu)an7Kdf2zGY;Y( z!XhlxXMQZhV&%*?+GL)wUQ=f+*89XY{l>ZDMfnNrt0ERM<+a3}ux^UQ+6;p$oNvrV z%(WT;R}^;uXZ!%e2v>r+-$7W967#vDF<9)rrby0bn5TN=vm{@P^<7x(eiun+Io8WO z@^xVDi}$hL#A4I-HrS?Z8<_h&iuIpj9wVKIJ>E)S+M(R>IftA>aeQ0`oh?E=Eb05; zJFteTNyF`#rdT%?bDf2S{SfK|u#^**2U|PzKN-K^A3_KV%Ld!%Fcy{#a(gWP=I(wv zfXnh90?SW1ad$A~^vU!Cl#}~P&Z^4#PC0oH7V6XI7hs{BJWTQiSdWmL%(6%Q7FbV` zoXm2VaRmPmW@BMG@4}k(Jq^tIy%dYpc?3+Il~_N4g*t1oejAIeQ}2RpojL%veYPLT z%EQB8+Bu3fcTYQ9AID5@0^5D;P{Ta_S8QJT!N#wTR)>zWO9kFij zVJ49}H(}jXJP2zZ59L#^=6NSi!@9qi=WPHM+T=MZlzcYUqr~&DcKi%WADdS=oke*S%3s8K zz2y6_-iU?romjtt#rpg$1ILF9}jzIevWn5+&(xAgO$2oQ|%PGqS z{Xk8uS$C{XKM!9C&Ol#+VGtIp69?P=zz{IgFb3;kSZsg8DL>lpIO!CXCCM45-#ZiQ z$yn(3$kQaJ|DTS9ax&|rO~X8KA&zSyn8#8D>%|_OM?Cx(*dEJDk9-Z-9?P>}9?P3p zv+P>=%V6uDUjkKD35;#agWXj z@lMFu*W$i{SO*YKYwKQHICVtjIU@PX&|zJ(=eH}^o?q5GEAQ)(vz*f=%e+(0!7SrT zvDiAk3~c=X%O3T)uT|nz;I&{|#@2!T(0L8(^;qn+56hm-&y8Sfhh>j>o`E&X9{F^v zS>9}0{E?Vh&GKgZ_S?lsg7fYn_sjD26XpBe_Wg*M?fWq-whSBx+cNME*!FdKO00eM z*U7Y>fq%50g*D5Vy$-4+#>y#I_FBd%S4cxS$XS-SZEvhumh5qb#5^vRE6Ps=w-$43 zp*@(}_Q0BDjQK|Hg2i6Du`JsBhN6yn{PA4See;m6az)VY*jf`152u=sj7=v-@1zizf4Z?3r8 zzF*I8+KacJ>v!I`piakrKId%*@}_*h(+?#7hL=M}O276uKBqoY{vrBaH%R_&)aSH8 zl(W3gmHde|ey2}K`8$2wzLCSo1lDnKt=s)(gZNpTl+EHpD4g$!56r;3{NmTg7{jNg zx$U3XZl8%fwzc1Rx}Q9#uFrX2ihT4HpVL1hzdsy_;~zL5lbKW&-(25s>WFiD`b;x% z&)x8k;`8AIE)qY8N`dTh?372w4i?t~PZDo{9hOP%>%#-?wJQ0?gx@?M`P(?&N5u_M zP@fc6%JZ40#i!w1KQBH96$*#r*v!F;L9dJ7fRlPhT<%i8`B3}}D$A$h74wbxN<15m zeYbdfb)RwO$V1w0ZjE==BoA&f=2vmw>VETwcs>l`BPvcBu0?{&_+1WG!Pu+#%2R!& zs<<{XwuX2Jwmr-8c%MPGJ9csl{icby>u|g`D!y-w&*X}aUuF#Fz+)bE8;m!d#8;sF zbQX6){kd2i-0m~I#jA(;jWaJEj}guXS?buyTj)1K#gG4nx5LDvkx{pacYldI7eA2Y zGh4(bTKLR&;)`kl(p;O%zVI2&(Z+P{M;aQ7Pse0DEyW{l^_kA%n{bZ$idhb)iHF|h zGk1#*eTTXuehK`NxW!(dd0*V_USqx#cRK1b-;0NW`Aj_1!+n)Q-6OZ?<}=mBH^1jI z=ZX)m@)=B7zq zio0KhGA!=X*JnN!$H1I7is>8+J}kZgjOivEdCmSlb7~ovL*TQ-FGB~foH{!1f?HWR zd{kF)!R7FE;xXVM;%VS(#B;zi#f!lAh?j#O5xXPXIR+ z*E%q$e35ebJ00}U3}|2pLs|8d=>b2 zaqd{Z`Ba=!$!ES2U-%=+v$+0f_yzI!cF05V72jcuRon)3wtRUv4U;a#^@BKqvR6mE z;VH~rE4~K)v$?n}d{LhGjm2o!#mz&wju3y|9@nFU*_{@6o+AGla76+m8jrihm7-tbL&4rH=&wLu+=@K`E z&&)(eo97|}8;X{4S zdn`Pz*U+{G(GeuShnK4&;-e2>yife^K%eO-ZVn&YRebwmzv(Hy6zBbN@jq|*%m{I0 z7{(C9+tD`76W0m)%rfzZll*3_xaRvvzc{O-&wMM+y$}5@@$PqhrYt)9PMSBOeHUNW z$8YM3=cAklJo47!!|-nxiQl`?Z+d%l28rAM;xi*XI-I+d`=WimKR}*Xfc8Z^0~g2- zi_b&)`Obh33&SdLFYwFK`Eo7VP088U-YRYk-bL;PK;XLsv_qZm#nkyjTpj$kxE8oP z6sb>nB{Ah^kh{6hGh|BM0CLVtM19&kPdbgjtvvE};tr5^l}=0WB_5s2JUTIP5ITd! zVemMQe3D0g0~u-KCBtmV+k@wcx!?Pw69qp+M*jbby7>f|7nlgE#C^eQr9T0@UivRR zj=Dq6ptdn@i0gpgmj3_1A4vbL{uuuuSEDxiHe%}Uls?A;_DX*PUOfDf%*;nPEUp6n zQ#ub!!F66`=pg-H5BHl&9dYBBe#bTAs~71PF!0_zdHKG z9m%lS4?11ML%==7Jp3!fOlpjb^t^GU&x|IY1tG$CaaZt-(xKnr`x8tXx^HHQ#8ny>xOr) z$<3jFP+43B<)n~-6L>2D?dy4bdz7)8-^^T;pp$or9D6Vnx$nB>!- zKUlmLJl-R}#v`BMk>4hs1^q=HUN2q<`OD&m!0&kYdog{{A#pm6_g{}Z4GxugLiy?9 zqtLG*J`S$ukvH_n&m-d)FTgRjl-v(HZN;>Ck#zb(r;p?uO>#4eBHLJV(WB5wlEw zDINBU4vL@o+GmcD1Frs`V(OQ{06EjP5Djoua<;2;hPWc4nbNubQj}?O(A5cuX{VKR zuG!`@7m#yYozCJ+MEi*07EK`;`~7Gi{1`dp>W>p6iDtTV*#Ey<%>Mu5;wLdkwNX4| zH~g1)F0RG4i+>sEGke8X_Cw!5%r@d5@w8(;QxWZrFV{`Osp6H0HYB5*%);9B-Q$s0oc zjreWwaq*AfiZ$Fk$=QJNLq`9Op}KeixE2{{s}Gx5;%mV)gtNY2YKYcjnPA0Pxg7CPQeUB%}NZTK34?yZyud;HQjA*!Z_aPWZs-Xs3GnMu1&^%hhW?D#IwO6vi93e z`s|ZjBF+R4l>U>@Pe{)4GntHSH(rP9Xfh8FVU~Cpcn%r+-GXhGiO)C%K8MWxqHM2` zJPi4BlJmT5lzar_o2@?1-3~JL1(Rl%xH0&!^q+T`K+S>SOFwI&tVk#Y{s&yc0Z8 z+zWiIcoukucmQ~wcocZCcqw?9n08i**MZlF-vqB0KLLK-qyLr|LpA0LGSdGP3i`K_ zvwyNrTn&6oI$uENU-3`i^5`scTXJPG@`u}26?5BK(&4uC#eQ7#<#=@R#JC(WouyM9 zIz7d_KE6WS4m?2mv|k|Rw!@{vZ6}C(gQrX9AoAgE@nP`e;$z?!#V5cYhz)FhE)IZq zi&@_fid%wz74w>_Y;89m&_yz*iP6O{^~5X>&B-WxBm92TQrrOJZ(YR4aI>i=xh;$% z^cL^Kw*AP+^C38{0_op93*%an^SXAN^nxnA-qkk1i62)fsc`qW^T&|Td9vtO}ZFEn5K$HUd;5x6KI*UH$A!EPizv44B$>?V>oF)0wLBDBArjti#C;6sReWp8Ec@mYp+yJy? zWL`WX+$Q-l+&KOp`FvM?zvSQH{?2mpepkL;@)@_FpDi9d9Q{4<@;SJ+5?A;e=eI7l zMf&UEzJG1;GsAo)B3_$;X9mRE#-p5z%fXSw#4ll7ccl2XZ_p1Dx8==Z1UsghE@oT6 z^FcY90cWw}qKzbPfORu5^;w^-PFpdvsE0U&HT^YpD36NUW1SFF&N^VnFei(d${RgA zL);hZ|B*BB4`C4&GW8$!@Z(|>5$BmDJBIl(%=*r;NIO>fn3(yq+QZL?nFjg- z>XSE$*}ibx(AN-vfX5OXrk$N0{#MLw;r1OJ^3P)C?QsvE5SNGCc`gF>$+)fKY|DH= z^(kW9`f(Udt~uMo&T|pimTs71olGY=Ag%(&tvW|e#$z@PvsmKNxQM%oX~TK`0d^P$ zN{%k6DfBQNlW?}h5SqbdY!Ocs(+9b;==>_44gS}|X=$zw>!|Y#2K33NOa2k~Y!BBL z?}EIU_$KV@Jn=kmD-X95vpinx;Y-DfAdh-DA>IP{Sn+4ziQ=PRjuG4ZoGWJjFYxd} zG4r3}ymlOTl^A04yoa6VLz=kb!yM10KFclVuO`!9e(vF~#O)#H7%O#Jf`9ht9P{v> z9(|6J+HurV#Y|5P57!oVft=%^)W^yM#GSzWz8mG_R$}Tq&!0fv0ep!^hu?X#`p$DH z(4juZKjfbxjV`Xmf@GLRMR5^Z1JN2NmM2zC(KF0z%d4=T6t2G{Wo^OFp zYsg=boV-cQV|m-dTg2TV-{#@%;=YjY^6*~qAjp68u=AV@_B#yn==lCh*?E78m zk#o$Ha*nBv6x03$4^I{|Jsg9x<7somY%lKi@V(-dkaKL#>OUn8LH?|V*Nc}!?mWYj z>%N2YrsTB4F*w=@g1_+Sb3D$Su_#UyjpJ&brxH%yN<~?g-8m zF9vfgkNQ)M}6Y?P*9wDY*o#5fg;(3ry_wX&^yC9z&Hq?o+xI!Kh488iK{_=yNB-(SBHF|hn?r3V815hk4jEnA!b{@ z*2C-Uwy2LBGqw5op7>nof9&DU#H_zxd)Rp<3j1YS&oNeO=XcMx|9IGs45m&7^ecF{ zvY2)_K5OmN7c)KQc{oQ*Khw^`7l>(x+czCF|BJ?ME_*yaTaQxTWxkF4J zc)y1q@aS_~nEH*eujj;Nq0cd2D}P_i{M_bYezTf7+%Ly@$%U}`xN1SK0^4rQuC1*OX6|-&P*tFGmo-u^w&YW_epD9rBA}mbceE{Fa#I?IRCw6SItc?cv>Gma&5# z{z=U8_PdAw60^Le;~;qK*0E0mbYdeK2O{b@`#69iyK3Jp@%OL zH-)^Hhx>|oAH;cn59y3U$9aAaJQK|O987;l@HBBJ@N5sy6L*1}_d=}xqaK}=V*pH8R87SnPG^M`T@NZYM|Z4`CM;+qXPGMt_OnFc#alIZj5q=>(i7`Yr~JU-0}g zuwQP^9plU^9vaUd`6jH(i)Ug@KSlWttZR~W?pXiHy|B(Cqx>;6z(Qub-M>{6VLl# z-46?og`qzd@9%m9R2 zu#lbcB615#(MQ5Uu7ve`vdY^6G3_rTpND@4i?NW)V!ezUz(0gXu#hQVPS*2sE5#MD zUPD&-d{#{T_2eA3`f|8h0N%7vdZ=j zabK)=kt6truonxN*NF$nxUOON5es<&)`!U||3}5Gu|7^_M-kx!7IH^MSmvpKz&-?d z7}%*7sw0&s2eUup)DhJe_90kz*k05m>t1agaW&XU!(!iYE>FgDhz$IV_bZo7z&n8A z-*D5Rq4){xl&9I(3;z(9HPn9!PPqg5GD`8BCl<@a&Jm84uHkSe+UDy_?Vdp zL$UZSchKNAsPXl4`Fb)t-Uzp1@m=Ylxs!aA%lDJ}yZk8mYL{1$2e|w^nL9+-h{ZPu z{}7z=5Ow(jtb7G7e@>3M{53i5@;-9HW#{}Bx_pds9B=*I#{5Gb?8-S->l@;7RWfwC z?D4tx3VF~74JF@%bDTxyiAD&Mqb|254|ll(d4$UslVNil-XZNP-ZUD|NRUUmIzz~# zTz2ji;&+CLl#g-w25nnd+izx($GY-6B~Rag`?KQ57x>-#hT~kF<&^WJAv{f<;4<53 zrfvGSsDt82XFO9Oez7y26(mn|_3=8D@lA4hKlvJ$@kpv;r-|Qh{t;if8P_;|SH2+6 z@4g>B+11A(IQml->YeCoU3m-1KSh}ci?^b3br8RgPDXce{kibN)9&uzb+7EHF-!ZN$E;!w9%D@EA z*CnWXY%?+=hX*ysyXWFr zsC2Ew$Iv-DUp##_-s2Yc!;S2V#ZS)hJ71z?dcKF8?tuKybw1aJfCo(VyU!tjPuu1* ztSZ#m^tc~iL2(rwOFlNoZ*CK(!w23Wz8>4&Bi;o^;rJYE zTN}^LJt+BLykzpYIJ=k6JS84l)o-2=Z}j=i3*w{jiKtdiI(NRAoU38*-sD^j!*}D| zXX)IQ?JJtAq4^wK`$+yFZhY?%Z$gHDFK&th|5@A%<>xo?J6-+eFYzn)VgIUAanuFJ zU*WhOgp;W(`8&9Qe!BS8JABSJRGGK8)$p0KC12DC@4Sn{*WleQ@$M|YL9(4=?7IW) zg?Iqc*+$ImE)Xw7#koklbVG{p$~jVRPxtf!28-_zWXv#JOB=D zym)R4pSe~%wE^bb5MQ37=OtkCw*weYko=;4eq()LOC0;XlKauPE)lOB;WrP9H{%`H z72>74^&ACk&PAEz^$hdv+~0l1`o>!0{AQEnZQsZEzxWBfpYpzVY(1arC$a4(NU-B4 z!Qs|;K2|z6r~A!!;_FbToaZZ`vt|S4?vOmZz-O>)Ck?aEhW#yGf=MLOyTuovZN5)D?>*d)6Hhu1b25mx zZ^Yaq;!8il+#}-jZa(w8crPC2u=8MyKxKJd@>V_YF1*;FEPW`B;h~LB#R+82SK>xb z;9Yp}QZz36#b=>$KP2{{F8?Zi4!-vf@tW>>-UG+m{zp7xljfeI>)`iJ5g$y4{}+F> z9R6S2Fc1Ah@!DnR_lU2=NpB*4>0v$l0sG&flIKbu*r?|~AYU~V&-O|F%FUR2MBH^4 z{J;487I^1Md>9XNTp|8+GyK1}$qu|5BAyRB!^KO3dR7Gc%D_pvM)JCU_{{as-KK>KNRm79gzj{x+AN$=Z-qghJK4*esxfI9ywd93pzxIef!QkNc;>S?-oM%p; z|IMvF^PA*Pe2j4zt3S|Zd^pGSOM9y&=QG)I2JYud9z*>-UHn|wm@~y^!uOsnUiA(9 zn)o2vTz)5%HeYXtdnn>G9GCN43gqqKtlCKaSY^E5B>oNix=4IY2R)+#{jTUh_L2M$ z>hD$J43y!h_^&B`Gg$o0y?8cQ{6l^CfAPx7esisO)QdiIgLv0k_99gWoA z;>PHVrJ?gjo%!?O|HX6RqfQflh{os)aRe7TwZ&6jN4mwQWy1f97vrL!g?L7Pzj2;v zf&JR(Pv%R0pbEyZ#h;_9Rm3wJ;+fOn|HUs{2LCT^gHG(P;y1H=<`1zS$M~=Kub(jYR9UwS+=V)Oia2x> z{$G3yd0RvL7y1%siC=`@s4s5w0p61pca6gTi$6tM>^yIS^RjFk<`I&-W@Y$)@q4() z>MY(_fajvcFMsbdmx&iXi2lEL^=!WxDDGVj{$G5-?HC&u=TC$G7hll;{eSVQgYf@i zKl*hyi&x$R|1U0gs^8op{t_2=_lWb*hq+(e4*i4&#dR)+{}*4{*KeK@KZSbtj5t)o zXI>CjK%ZfQ_$zb*H;XspBGh?42YIy=I$I_G0Y2e#@nsL8|1Uo00-xCIM4QA+lSEyj!Ng%;qd?B5ZcO-c3ZTw@ix?>8RB1lhyNEh zK)?D1 zFYYl1{$D%*ed$lc&!DgSh1icW_Ko=47chUCcvw~R|HXX=!2gTSLEpf676|#)rVjkS z55(=*Rp;^Co@w8|I;s{4`vIo+Iu!)8~BOn(as@_^}p} ze}HQo=NTc$A4fktU-E7d^#8@Jk>(4<+i_go#J@!Fexi6$dH8>E6n%rM#ot|kcO}F( zpmXj#M}&Q?{{sGB@^4n@nIg!0;JVVzzcdBoi8o4TRD1Y;@$YCC=8C_sh36r~e=J4+ zUwj1h&Uw}dHV@!J;8Dq++=KqVxKkIrdoFH^ht;1KZ$jC7MO=9{`bpv~XbYTYlVJ0y z)$sq4pEU^242a*j4E=vGpE21j{&5EUzjy%r-XZbM@$moR@eiW^FJ6eg*1zHx=b-;z z!7T%eMxp;N9)kK+Rs8S`=>LlgPzTQvzxb1$YeJfDz%^PE$wyx7H|L4p$wmKPd;)#f zR^pqN!~cu-oxpQ7R^Ai+fAPJKqW>@cq%+=$6X#%D$j(odj&qlgd?U)$aB&=I8!H}- zyt+pG@~iOw;`L|4|BGwjyxb;Uin`-G?}XzzcO~Ymll(aP9`}pS{1D?m;BcU;HZiLeBG1`29un)jyZK)`NcYwRk`; zjQ@xqL0|5BadY_XpT#qAA@Q3yXL@qJtamUz<3ql%&VJYh{$G46d}d|w67(NV7vG1v zaHcrE7~?hnu+hmMZNP373_BpV*E$)Bg2y8ji*4zjyLv(4!R^xdg@_} z$jTGw17t{k6Uxb%;-@?MOs4pHv>lDatB2}71@=1)3TPG`o2$^Sp-4MC4n7vH!{HUT zVIDB?MwHJ>#b2XM$54Z#(-i%af#TYI+-CuqZ|7nhV5H=)VN7p=_z9HB>%=W^opO`7 z2g>|y;#s|Y?!7bEc>q4-UdeCEcjtMg{k=KpTT0#q{jrteT1!x_#7&3$oVmoQKNHv5 znIjk7tN$VXz%dkCUI>>Z0E${s`MP75mWV&lVqp&qNd8=%4qI z&$JWwYvInf%=DBggs+giZbQsdD$c@q>{a43uE2Z<;y?n|2;%R0`J6fHX{Qgy0Z=8K zeVsJ|^CXCupghbFUx>1YV&mxCaw)D0#9uA+72O}{i5)#C`J3?JxD;~q-^792vb{Pj zS+*a@#Qh89XUBH_qA~UdZcdJ|Z$;ZzUpjYvk8>ujvVS$aZ+Z9=Z;Q}rDtr?dw;Og0cCHAbe6ZpT%h7=qcK;2cqshvTJdfam>0yKp?q!> z|Mr~Eyd{1C$M}I5O|We&?P#<*@2KjWu19~kviK8Rk5?1#Md7b4{_H-y_aYvR0@FnN;p0AMzH#oi9r8R+@>kx) zdkf+^529ZrZiI7z=EFHJzt+P&5%I-~F-Md5s)v)~;a@bxHL&FK+xra;&Dr)t^bID7 z_ucO|*NdOK1@jn)ukPk68UrtU)aQH~i0M3m`*Zh6XX)*J=i5M(k7(gDI2_0R=H7ni zIUdS$&=%m-IP#e&z%PrB!hgPQ?UcuJJmOvp^e!Q`4QFG{8Oc9Gz57PI`FWpnZ=3cT zjKOuTvz-e8~T>$;yUSh;3B`l<(tC|$D-bee~0t0D_)E9 zg`pKk=lw>Q7gSsW*D|=|apZGRmRgGUpgf!}o{GK)x_^$&d${JhM4ST!B*T%PjYiFm zW1q7L&vi-u&2;o(#9dMT(S>&OJMYHzi+E21zk!+~=kpD?JaPEQt(ZSSJRR4txYTpx zS6+fKJ@I;+(`w>tPoS)dXQ1rW6JHL$YW>WRc6tT|dCu$IJn4Lk_Oz||$T*Z$apXzA z`+N)Z*9=AfP4aqO@V=7xGaP$Vd<^$chKTpQkAAzj>1@oqE8dT`?|Sjx4nFs}6s9K~ zWmWQ7I1zV=AK8VnDjtDKXMOMJ&(Ob>ya3}}*7xpSlf1uqI{J8LNoUJ%N#A=JDx=Ml zp2%nGdyk;*Sl`=w3;MU(_Rl)W`xfbDNI zUXZ-MIs2>R{mob5i^j^%apdPU;s&RnUW@k(K>t>}^TA}_qwSkXpS*NG`nS?~Iv3*` z;`_cr{)&fxg8r@ey;qX=H>-b(cTpuTd==x{;-#ySbJ34N9&VO=H|i-|v2*M%%|v|{ zubPebD8&m=2fr5Ye>>@`=fg36FZuKEV?T>G!QgM=UAXS}OT20!`nNuJU-hr|7xhmX z!#7&Lz57W#_adG9DFu~O@-~Q)}q~AW!7-N;vIS=Wve*3wf zF-|4jZtDRJ{dNxyy0BKMgj`t5eTl5^t^ghQ}?`*mCwSik)-j@|n0zrIL5@A3Bx zJntm`_VLW5-@ag$ugGuT**xjDC&1}hzg;Gf^xHe1O#1CA@SoOi?`Y;P^4n+PTv)$7 zqZQ_s*M3LT@D=&(hc_hs_AB);_9&fO(ciXyyWO97zeDmh=+Iif{Z=e_&vAEV(r;fp z8TC>66~|+4ZSmUW81oYEeaLT~5a0eo@;>9^D2MAMZ+{)0F%X}I`y+3P^ZH_ZN&FoO z*fw$h*Yut^&Jo;_`Bw4)f1uup$6tgwK>X*sc*aru<4ClR;#=4GOat+@YccjKu7zuvp!je2-h45gMtgB@G+3R* zU!$+mL)@+cuE)en?#8pPV*f|D*CXBpN8!Amj`Z(72koHbPc8EoeM8}q1<8AS{`R;w zmd?HPaeqf#1MSEHar2%S+YvwTs?R(meggeZdtdL-eDrA~KURRb0>n3>O?*{+CI$^Q zi`j5E@1!H0OD;~{%j>H+U)R-dvc#9(gKJ4~y;XQ` zO5FTGcYaUW&l}?}`UXVvPPiv6omb%}`-v~WaSasT{T9Yd#4XUr7%AS8gE15F!`1yo z_vXGD^xLF!zzTO%P)y;xf4Ch={W= zX4p;~eh6bG;ukR1Wbd!VaDC*w+m8LNL7lxyI@##+6o|h@`#V(J3VrV};ui2r_MX~L zX!xc{K6pp+8yT&B(EIGLKMei+yQPzZi`hluHe1~53g$_}uP|mJdELK#X0>=UItlB< zr}W12GvbSC>D_j0dv-PSEhS&N65l`(e-gyIjpAV_pS#50+=RJ+#BX1d{07JAI2ZPQ z*<*ct=7e<0-iLc7<=k`U!`M_sF}g^msyJK|b5)7!KY%e(@xsP9Ht`D+aDPPn7V44n z&O6fYpNw%E$v-}ZHd6cme5SoG_E1@j+ekhEzT$FmMbxPQ;ss0aZne1D%^0^4w}Tyf zFYL#<7`KtUUOU_e5oe>^+V6eTeiUQilGi?naU1bhFXQdmL(9vElaA^r+udV9pbeT!#V#ec8G zxQ+N#_^adM)zJA@JgFY4U3vH1t!;~O8}Z;Kep5|+(>V11#p#=IEiCSZ>)a;db2nq$ zM%@2SjN6E-@4&c?xD)!8_I_46^t(%57C!tk@y-qyw-LXAvJ@46x)kF!;wI?$*?U;8 z@4>aO&!vdFz`pZ-J>=Jan7k*o2K~mm(kX{yIak~R z*EP+>V_(6Tlz1Teel5i}e8*zzv={Xp;5pO^nbhUWz5cL1WJy3q^ zy{FziFm5CH7pw8yk@)RT(f=3MNBOx`{1+}j=80={!}Dh1ndnd2Z>&^$9M76ce#>xt zGeX=F*St@Q{TP^9FV1X{yvOwVdA_1=tW27L{=anoXp8>8_@Zyn{}m*ixd6ve7?B(JLvzTPtSAL=mESVB<=&BZ|@~N??eAz@^)9E|1bUt z{p!Zz53b_ zPw4-PXWfJTzxV*IH=h!3MHzcm{O==v^OCsXA$$W%d@uI-Gkk*c&OWxCneHq42F=t1I9I2*=W7qrP+ojK27*o#pVt-N zI1_(52lpn#jZr3@clKd(&*ixHC;7pL(f=2}hH{=S9`XbF|Kd-tLjPaTXo7x#xKCr;GZl{?>N69>dGIIKiTU1|^Nv5u)vp-0l>FTlcurCL z;5f{cC-&nSbE)|DAnuup8{o#lO7YKk;#pkrlDX*rivt(no~d}}k3RPsI@s@6T%&y` z`AYb0=NmeZpK%z^-%7p)ZIk_O&fn-4{UG_CJM`{9^xNQi{13^G;+%3Ip1$#R^gYUn zS4_v;4dPWu!x`e{)t{>u_sd)50^#8>Vp$?7_&%oH!HR8D#XP74TW1L}z z_`&J=&JOHf{|ug`k^BSrw?*R9PQ^V_@m`GEEEoT=634#b}t+(!@(*n{^j#e+Ydc=}}Aw-v9v3ik-a=XSvyxnkD2CE{h@@pl(v{9k+&=RHrH zjd7>8;!s2M|HZGMoH+9jAPpnoOD~iBd5i;GDc2U;MiGYV-}>6;FcS*ec$E>+9{}ak%#SMqGX>`v2mVuj9V0co)VPkBWz& zZ2u*mg8qQNihI5W!T(nfH>>M2RmAP)p#Lx4kLxw(J4Ze73`;wV|4V+&VT}Ka5Bo6w zFMeSg`v2l@Zoqw8@#-(p{}(qv`MgB@7|wfN@dmWrSBr0jJT5-b4E=xc3twRTUwi}l zY0kHhdSa{vetx>-HICxGt@w?b@jXHDVf2TcZzT0Z-ygnxvE(5?o;4MxVZ7xD@y&Om z|1Un)8vTFqggemx7oWQt{eSV>7{hsAd?ozkHu2OL`v2nAxEb`Vc-n0A|HZ#-LH}R; z?PqwVRD7%+zW*XV+8p;=QTN!!y)X&=e{nbD|LNj^qtP!H@0gGNzxa;9=>Ln~nv4Fw z`1@TL{};bLl^Z;kPP@jdVlqr|({ zqW>@MaVGlz;@gj5{9n8V*Fm$zr=ve}r+6dk=0fqqxHfq}eAXlA|BH`9|0(gFp7@5Z zc>PL@|BJU=?KiK9bK%pRZ#f}9SK~VCBgwA{qW>>G{e1NQ#iy0Q_`kRx+RY!ur<6ng zU%U=&&7b123vjM7-19XMWwpHcmR9KhioPwQm?m!ksE9}iNUDS&h>ASdoOA8p+^@%f?)Pi%eKvc~tXb=`zO!a_C&t!<>Ee&w+A`#S z-J9zaY4yU))c^I>&&mIKG<|YDy^S_sRR2OhQ${D^{h!iz7L)&Vk2TzvrSB#s|LfZY zssHP;k5K>Dd&kB8-)~eUNX+_tx9_@6{?{MWrT(uUolgBW^p{O|S#jDvsZH{N31wN89F68E5upl^&JGbBkLf9xugms0AJgUSE;cmwjk zUP1jTm##sUE2zIePyW}73sL{q6F9%C>a<+ftD_%hKR4DlvM?s;Wb~!&qdvxSBy_#! z$p3onF!I07w3K@)^%eHR7+ro-Y-F-tJ&*jaw~^oCeusPI%SeqL8*zPwNO&(GRv-HUd0OfRI~`=g#Ull-syo~8b;i!wJ4 zYEQv&$;kNrr(VGr`mdh#5&1tu{A*Tle3R)<*;i@wTmMr3*HzYWkBm;w^|-uxLYLS` z5uJ~@Non1Q>#CKaCZpESEtr4R*G0>a|MiXX+!L)^a*lV<8#%|j>8hOLeRb?s?uF4~ z$ZsR{!v)m;^$#5DX?h)V`8m4vO7g#6agh4I{+54tt$vKQ8vVVn)FsLPZm%_z9H2jb zz`9L6m9gM}{%#@pUmsn<{cd{JEb_nZb%6Y@|Dtcdre7yR-qJ5rjQzjg6gxOHHuBKz zOUX8gGsYjgql=h=>#k(H^!kmV)c^J0DPkiz^|y`4|9VF)^1t3PgzKPsDEpy`F3wk0` z`kDFqj~}T2>!LfU|LY?OsQ>FFQ(3pEKfK2MN_yLN>i_xx?P{<7l}vR=&uhdwE}h_a z>i_zespNmXdjaba>r@TN|N8oDo<*RS_9g%8m4C5LPrqA;>lXSV{Y+E+cz4$S=>A1n|D&HH z19#PVZjk@=!8PQ6eTK2}MO~a@H%?!Blls3N&6qn|Kh})(Kl<#q&|h%twta9 z)fV!<+lNyZ+M$0v$GuOw3mGHsch-3QD#n-n(f3(L{@4F;o#H$FOLFcl(g*41&+F#2 z!>hU=|9ewkSV;X}-&)D~AAP1V`9E{~v3ogbOeBT=D?9mLub@pnrZb-))9CeF7s#*Q zdW1EWI%)5iNLhU-5j8cPbsf*l(qHwW{;yZBX8n)8KbQ4Cx@-5?NGH9wKlxu5pFs^s z-=h97Oy93X{?}cZlTOrMy+Quhw}-L*NAHS>i7e3_nv(zZv$@Fs`lB4&AF7X1+u5n_ zJxl)AEmE_dLtlKH`oGRamiSulpA2(b&wG*jzb?jn zA%+|fjD4FX@|-cf@+9kj^l|>bjC$@I?*G+Kkl}Od&!3_GuX`?xiImjosr6OR&(O}R z=`_^(;(kkx_gezF2b;gLrx_M&i|N3qT?#I-vnOkkqBRLn|*1z7Q{;$jJAph&)yQ%-{YcG@k z^(|^F$Mpg7+i6{ay3;SZ?{xCNZn=;8zrKEy^*_3IQwHqEagaKfqKEinPrp{0Pd{-CALH%E!Egcitr)!U7{f{oldVuI}_AR3g#QkO;pJCb) zwk3J72NltGu&YP&lB;-E@+R*bmNz(|LcDD=oj><7UX~3 z`an!1ubwcP^*=fXbHKRY^5e7JevW$w+`jfO>woke`l$N4>}#z5(OJmqt@UZLZU?=d zbD^6q$=KaD`WotHLv)5mssHPXCCLB!6m{cix@->W|IyblZC#|_yG{Prqc4WP4_GTV z^?$cdCbPYztNlm**Qe-nKGRK8bI-f(&OGRdZo^pry7vt39`en||oVqjTR{?!EHThqk zn8Y&;^gNDx72SckUTr;+u|Dp%2sysR7`t1zJy%`wzg{z!{I56WB>(Hey;=XG>$A^? z>!puz|8ms*$p88VHI^B=GoNj~9>10RuN%|eR_f#<$p3n7JL>i=$EMlJLoJuwaW|H=5{ zm17F|U+?9-i~g=+n$gt%-Tv@5*8l5W(|I0+9z!2hShr(tQc72+PpGJOQd_I8Z!m7w z(+ShE{zngDuG&gB=U6|dTk&1G>a|12|9Sz(ajwomAW#oT-aUS_! zccj1VulIH!|Lgbu<98x-LiXoGy(KUCU;lJ~`oGTGk@f%juVg$UNT=butk=6Xvi@Ix zSc>|;&PIRxk$y8H>wom@sa(I;)jnnYzy6n8_k;et8NauvCsZZ>>n}OJzv<&dkK6hU z^5@_B9&?$P?D5BIi;@RS=RsPRg9tM^hS>L72TL|?S?+wiS<8vCUc?(I#WmTKY1v~)l&pWzX=A(fV~coZg8sY-`CkuWj(J??pw4_+kL5f5q6<93 z`hT68`SlqotvxzEq~$Q9QA=-8yOk?VR|m{&iOnDsw8MPAnb=$C#W|LbGS1#0ND zg~|VVE1&skJ@ZfUzy6%O*FhH>LjKp4vQhunA5CEWkIuT5`oA9Ap7lTa>sQJDy4(xo zf8DkY`Cr!?!}=e+?Ev{-&!GPBhMu~b=Qijf&-2^{-Hd+zGu`f0>i@bSpZ|!S-+=W$ zI?X)tzy6PXbwOY4OZ{K($Uy$r4d|0mYq((*wjwvpeEB< zXQ;yZe|?xa>;N5mo&2vG-68+$hB;XOqpvZZ&(O1(%goo4RpO zCinm9^^6zq=&p?WAL}*8d2WNQT016kNS9kk{@2e|=eZ5~em?5|dLU!yC4G)@{CAy# zfA@|qHJJ53I)6s;f1dc`bq+tGuhk&`>vp-g|5q<5PW@kJ%sG>|Ld9^$p5;~ zQ`G-;ny0A$>x0aXeu}ym`Clh$K>pX853~M9fBKO6zrKk7)BkK_{eRy0V>g{PkV5x- zj@qT37aJRSOy{DX%%RV6zUS9J<=`1&dg^%A|LYy^@%&ibfy_`#cWul1AD!l3>i;@5 z_3E}d_)&~bI%!GrzpmJr{IAQLCI9QrGpYaUWVFwTx^2tY$aFpDQ}VyQQ;hXLx;mNX zb-jW*%zE899r-`Ho%X&{zg?X5|9S_xYmbg?L;lxYyHWqwQ^^TG=xy^^|D$&@H@~RM zpCbS3S!KxoI^Ra}zaCHj8N+c3`o_DX$p3l;$1#;|L7UI0&uk(8>s^nM|8>D%$p8A* zXVm}ohx8j2bS3)aYWm;KS-tpu*8l69d%2%bZ)cwj(t|I@ zL|)K`=I~59{X<{Y|L7K{S^uNA)2}YjSKIUK3w`KO*8l7B{Ou-Pq80Uj9Xp%#|9bIg z>i>EN=iTRe#0u{J)vwj2{;$gw=Kf!uxDWYXpZkIQulI7^-OyWTt9NxKu5mxmCl`_b z^T!{%$;>yC>)@dlY4s<=$^ZJl8ZnXV`l&OlNz&H}lK*u@GC&z!t_aUe(>IS$|JVKR zlK=Jc9n}AI%I>WH*G)L@I_erVSpTEz@t*zkckNjJqx+CIM(KG?ssHO@Z%okDi*@rswomP@5%rAy`RYcI`?++zkYK!`Cm8e%laQ(r6c)Y7kGsF zzi!Lt@1-lOV*QUk%=?ef%NkMt*H4oFVE6|JQR8 zlmGSPt*rmoZ&K^trIS-T-KYESrT(v9=t2J1>0hV*uSb$Me%1$8lK*ve+Q4UoYb`C*V8@j$M_-tpCv|j#K~FeVMmr)}{H(*>rj4t$Fn;)5-rjDc4_0>yPS@ z|8+{{GBxx;=6Ch=oi(ig(WMw8TI;-I`wqIvSFHcho$0Uo>Q@FvB17~H#-owC8aZdY zp0%F!|GE-=$Q)gVtiDKBCXcKR&XrpkqK|V7U|9ajU^1nW_kNmHPGq#q~W%+lj=)+{r+PXT6Jy2xzuzfQiMXJP51yIKFQzZgRP*EQym|8*YbfRl6|`hgkxjeX>QU8q0xf4%8P z*8k|wY1^=Rr#hjdxK*Ec$266*iDCw=Kz9ZP?H zN&mf_^*{PlzSzhe{nKsg|9Vn|m`H5l_~SKg1NmRS_Zs)>eA@53K*uhaQcMbk%nnQ~%e4 z2XOzd?*9kRZPOnx2949lbCCaa!7Jo{eK;}e|MjcvljXYB7vz6kg7JT|&dQu+hkoM$ z>womNDLjKqe@t%QuP-nLeWf2|`*(UZ`~D~0tqITn(N_-fTv^?F7WrQ{WNv#;XCzbo zr{5uWB`Oks?ATS26gtz-J7WIGqF&RFG9>!cLzdlArEv9=jj+fPW$-0&G!-L%a ztJ^W=Hq;{zQUBM!Hemg~9>;jmNk30!=%IVj9{TIg7>kGL{OrS*bn0rX|Ix!3i>EK^`iCqB4hVf{qyVO|LAL0Q~%e$)MEX={*b=w3w?(A-q(6n zHR}I5cwpKYU34t@Uq3?j`%N$B*xlBBbCLgbo`J0Yp`IA@rF)qpB-Q#d;=Gqx` z(|=h1AALPzbZ&ijA^BfV>&X4Ty8bHizfPVmCQ?mr>cjefy|oMZU*DX^`X7Cde&AW% zXDRi6UHe1o|2jhq>;H9W=6x^dUQ@~c`nP1P|Iz2jFthX*lga;jBm3%A-K0JBe;qsn zX_Ib5U$kA%e4hHhE|oMk@`=t_lIQ>EGPKXbdNDP?Z*|u>tpCv;(r=v8WgC$H^Gn(2mJ$^ZI7G4j7oIG*)C`d}jRzkaV1`Cq@zaUZ33 zQcIbj2az{k)-BjRSHDAjd$C?depsRZdy@LUUjIA!UteiN{?`@TQ~%dH3UL3g4(^#g zs9WEo{;zZGW&OWCLmoV>$1Gy~zkWOk>wk2!gRKA2#~O0~uRcKk7W|-WaIOvQ#rhw; zm;X(vXHY}Spa-NN|LY5*Vgx?n$p3m_N!I`CDrE98dU9KSPeDJ*Tz;m$Np0#CosB+o zneLjL_5XTT9qRx3F4^f#eW@4qf1NoK>;H8Q+Q2?t_A2>bf5tVqWBS~G-2bbma~yxx za~Xdx>;9bk*Y#HZ_fI{1HtYX&gYD%167k3G@%-d}y*DHIU#Gmq`XBwv6`ud2dyz%+ z>L*6B{zornY%Q(R(pOZ{_nssF>rv#-`nuWb*vQj5=>zh=p0$hne|7qrJpV^mq_5~3 zHRtINy@2`7NZp(7GCt}#tdY_Q{~`bDwPfQ(`ZVLlYdVJd;aZ)qC;4BmBHO>EYjE5@ z&})uz|F7OLf%QN7Q8LUC{Sp1x_xc<9w^MpTO4k4A&u)|d^{6(~|D&&;$oe0B{%O|# z=xUsgiRqVv^X}ACp8unJj-dXpW2Uh*PrqJ^`oI3XC(nJ=8(Ei9TnG0Vm(x3{GAGpk zG54&kn?KI|zq(W%^1tp%+i0i1%tZdzG0Y8n>J7aA0Ns!CWw_p4fct;-{+87Lb>XDc z|Mk1{)$?^Gj@?pyj(NdKU4U_OgDyeV-KG<8jNZ|Q29f{u(xv1By_suahx85VwBP7p zedP%~zasU2y`ORUQuOu1SpTC_m16zBu9J`aug@i+{?Gpx9ItE%S^uNo?L+?8>F7T* z>7FTg{*O+6k^6t6+nJjb)~Tsil+yb)lK*wzN#uW>AvN`XowO_YU;oZ^nO6EVZT>l( zkiMv^exD51M=v7t57yPlV=w9t^6}he{c9cazh2M0ezs1{TxOyEcRcxDcP`KKKlOmY ztpCv)IZt=!RIgM2*LNN#|LcM0$^W|LIoAK^+rP2?N56DGCh}ACHDreKdJyB$RlT0` z>!vPKpZu>caDCxFoo^`lpPE8&?CLP?rO@TcW9js&G~EBIJ5kTfp$i@(|Le*0lg0E| zwwKkP1^HjMCtKFiK&dsA8eqaUyjtLY=#sQ>GW z^e0X9fL7#xy^ZttS^e`;>i;@d7xKSO(TM!7FQ20RuQR>E`X8N~JTpbtCC>!cLW1wx zrV#mGZyLsL`|7KgSpTnM9wqs)83|LbJrjZgIK!{mQGmRxaIe^`>||LDPE zsQ>F$^mXU-k(K0sU4mnML;vtH`Cpf1{mcVhEiv`~vhm+#-UIT#eqsgB|Iq`=aR0CV zkMeVNy)8NUU;oS)QB;>>-?!ZWD<>wf21|F6I0^EA^LnJ>4|W$0%*>L0R@ z|MjPXxd%X3-bN1A#hX$8*LN8QC+J8)^1sg8h5WDIXvOn?^k`~LEA+{tJpV^O+kyPA zZzW{?zy9DW^1nWEoch1cO?Ew~*E~!9*Bi*C$Mr*w`)R#CHT8eJc>}+_sHZT;{6n{( zue+}oZX%$QYlF5ogFKK#FMWpmuWOJcGU$&#BLC|ld079W_hqF1uODtE|Lfs9$p89M z73%+b#v`o%*B!am)>uy<(>|jQWTyVFO9lB~C)>gLAN>XyV4$A9jr_0klpz1>Sy@^C zqqjGs{;yNL$@4$;VXl8I)BPv1{zw1#DbN4Wza1z4>-FD~|8-xo$}XLQ&$&;3-;eu$ z^_(}T|LYcA>DTm!ocllP$@CSMb!tB6bv?<}TSqSGrC8U*F~Li|7ycQ2*DvI7ce!R~N=cYUm5y$^UvjZSraT(c9#I zov1GPUoYl7?WR}P;`u*1&wBE|KD;hAGE%?KoOisQHkSIoZdRK6f1|JO78_Zlx3SM( z)4lneYjuh@$^W`UO4k4Ad(@pi&>#Ov{?}DGmk;RDxmo|OhmwcC*Da{4oYF51Aph%k zGn4=I_Z+WVx;g**m#)p+^P#@?D8GeKA^zAUA5Q&Wk4!-QUq8xsd|cn-8fZ>^f>-mg9 z!}YEwssHQNzf%9#pHfquq4QB6o3A%dA^+=t$WANubk2nh`a|ZA+w?mlsQ>Fc2U-8G z7f_4XtLqeH{lA{i8262y)rS19>nA7w>v!mrFX>CysQ>HsjB$5#$dAQ6U zf^+SKzsdi)4Si#3J>V?$e_gCJ^?zN9eU(Sgq}E+nKY5G#zs^O5uc+I6!ulUw@;dAP zbqvR)slNOj>;LsX)N`KGSFiJo5`D8R`Cq@glKih9GA_TU7qw&kk3K>soT@ME;{IPf za1`}_os;jrTxT6e{a@#Mk^HZRT_ykPqAAJ$dchLb|Len}3J(|9bsY*8l6i>B;~4 zD*H2sem+M`B=}9@;BRwq?274j^jBqdOO8=x-Io5RmR>-A*ib)7er~Qu-{byYT`ND& z|Iy8RkpK1Z*Qx*O5rg@?VBPy7`Cs=~%K9H&s5SXtciGMQAKk71^?&{6VxIr0&+r-6 z>uy`P|5x8*&bw33pbrUZAHjETbe#1+dU;jyzaE~Q`oDg0H|u}&Z02rfbV23?7j@4! z$p3mcS^BnamWb#7=*pe=H=m0Ccb_GrCe`z(1EkW+Td`h2NBF*3^%3T(xphXyzCyau z0`kAk^CV{T`VWh|IzO+WBrdlMwT0-OEZqY zpr4~(8mo_zg{J7YpXC|r`c59!|Ld}qSpTDoa|~ANIgDkSbc?*?fBpGp^1ptUdCe#K zMm6%kF8w9-f4!RA_^qx&TRN%Fk%i9bL)22P=#k8|Z|Eef-?*z=k0bx!6hTPRyH~)bAuP>23+DBhcZK{i&o{{>$Uch)U zP*0?rfxQe^*{PM)~GLwzMlQFO7Ct*{a+6_ME=*yxIXx< zKES!ZOLwhE{a+W^MEzgytikhtbe<-x|JP^wQUBK$=>IP3j%1bV`Z)8EKXppZg@1K| zys?o4@ z|F2Kb&(zn!TDhlnijl1UkG_VvVF%rr{M=1%$w~cR?-@k?*KLPV|JS`ZFUISaXt&e! zmF(ny{nxM5|8*Yvlh^b!>3RN-Ud8&oH*_!hsJHawN@u=8{@1P8eogP_N&eUQIe-7suQ5J8)OpWR|EIkM$F9pA^1rT|jQp?f z4Wa(8C#RzRulumQfG)s!TwJft#{Iv#6E(3aI{Q`D|LE!T|BZA3YRfJ32d|O;^>csm z`(Jt`{a8=^@*$r8qsJ~J|Lc6@)zP|EQhv8l|3l4fhHl7tI$w8K!1{k(p4_-nCm|;H9@syzQww_x6SR@Y|yx}=||M*Ux> z%1ixUztx-d|2i94F1C97@!Hma{I3(X;Q2qgH1+LFy7Mm9|Lfb--}30!rjh@3x0~dD zoq_gTQJ>&DR@eK+vHnMQtVjOW8##1{i{=Y86xtXX&{IR=p zk@~-`TbSqn>!Tf5|D)#}j)~;ZuT&uaN6o)gO#i}XD61E6U97SmP@DR{9&?%czy53} z^?yByv8=5w#eVCg`_YDb=uE2>M%L?m52*j^Rv(i8_2moH|Mm0Ch4<*T70CbkYqG)D(bw!?{f}<>AM1bg zucac9i+WOK^1trijQp=t(MSEQQzobWUo-xA1v{crNW z&bg51|LA!&$^ZHj+Cv3>r&c6VP2Xm$ud7dt;`#r2Ph;x;`tyn0|EnJ<#QGoo8vS{1 zy_fTPkbaLg^Fs9XeX0NJvkA%n`ZDLpEPZk^^?w~xo%KI@FJsDTop})Tf8D1m_y6jF zw8QuG_-fSub%k`?|Es4|q5iMmPC)%%FP}~QUoTuh{@351AzSEjV_E;NpQE;XS5IZU zc%U<|uM)CPgK_PCH`f2_bo0pny5|bk|LAPwuI#!5eSSW@<|pd^x>Gjl|9bHR^1lwQ zVb;_a=sz3i*;&Z{y8SEUe?6K0prdX%i~E1|3f{k;E=%Sds_!$u7^OFp2`A{h-?9E* zS1Hc@zj_Ym*J52i1^Hip63hC3eYpeqUq2|u{l9wMXVm}oMf$PeH`RiDxcn8?|Lgr^ z#iM#&4E29~l=1Gg&d>Syi%xii{I7F!T>j7p8?*jL-=U9<&}Rkz*5xLw|JOYZkpJ~? z`pFEs$*bJ|tFNXf|Laa9T`Z|F5^CCI9P{j9>5S!sMb|`rR}<|5JbWko$jiZQ9{6eJc^`|Mj}|-2bb~FmJl7 zze&mSKlPUI|8;u${|>qVYc{&+@%yR&>#el^ zA$kk@YNT#L-#A{UT}u65$GlGd*R$7A|JQBXvi?VZ!)IHoca$an>mQf1{zuRKnf$N2 zr=k9@FOFdSzrMbV^*_obXqnnfebsxS< z;=1w2Zo(~||D(&_;Q2qgDH-o^U3E6M>FZf3SpTn2CF1wL^vTN9|Mi=!rLUs@$in@< zdOLHsM*8kCp8umy(x0@`d2&(z*WX^}{$G8#6!~9gr*9vwFI8gwkFIfv^*=ffZD59e z`Ze;uev0q4RNqQN{a>eJ4Bend{=oVlJ(~049etd!>0^ECE9(EcN^92t>!5!BjUG{+ z`oF%)-0H0Uf_~^<~{a+ug#q)pkH#1rPql4!nH`VL&vHo8tyHEbt1<09Q z^~DwBf4z|XJXqIE!ulVbl5u~W{vtp5Uw3(l{IAm`X8n)u+mQOdPIQ9$zb==9=YQ%P zP6&# zJ!(Dmf8B!dI#K=jW0#0?IfXt(hDoQ_Gyi=|FHA=M*KLRK{2!g}9_xQ}U*^AMbrsrn zWxbtaR77+;f&i%jo2*f4$%h^1og;n)<)4(3AYHOD8A)>&eBr|5smP4BDeB(l)-(-=!q~ z>ulXw|D(TuhWmf@w^PXfx_S@p|JBRpvi?W6*~;(#>g?;u{|(}gSC>-U|EoWKmioW` zy$ShW7h?{aRUhNK`_vuK12OqPaPN&siw=7o=GSZ_=A)Q2*E4i}L(`J^2~#|JAKpQUBLJ+~oJa^ov)i|Lg6{n@;N8e3x^&&Wq%K z{R)43L+|5z-PPAhQvcU4aXuz&7=P^6GOi`pna1(_f1SQ5`Cnh{7!%2^zg|xM*Dt+I z{@3~LkpJ}szWY-;b7|K9>xs-08|W#u$p3l}ZMcnolX0q}Zc7{Mt}l!u|LdHa$p1Rm zBjkU*xG?Mg^%Ly3m-SDb$p3mT*cf6$v9P2w`@)R*VoC< zjrE#Xe*a6CE=m5^3;B1u=xcSU|LgZlu>N1aOZFR~yI&#y>)?9wWc?4i_z^jO2gat18d`)W?4%|Ld0-TleV}9MdoL-yFMRIy>+AqaM+Z z`oC_zne{*ViH_9&_3?z%|8>pkNfy>v^5Y z|N3wG$cMTB<8Sc$yTN&P>@n*9dg_Pdf1PwK^?&_*EcJg~_de@?bT2Y$alL~1U^zW# zIr(2NYft{ykGx6!Uyr0-(Lx_N#PdJ(=*-mr_1ymCf4z@BWPpC;9QA)af||x?y_vcH zBz?6F`Csqo$ohZ1zbpA)XJ<@YsZWrLHt1>0i?`|9A^+=9 zTxa}7f0>=<|LEQ1#3{T-hspnpTfy;a%DMcAzFL+1 zum5X9{?}!`W&Mx7&2h=2Yc!|+udD1M|Ldkp$^Uvd^SkQ$*XODK>!H-dn(D@9SpTn+ zaD1QBIUZ;IkKV|B>!Zs(OZ{J$y1@Ov`b2it|LA*}dH%m1+mH4CdOP)og}OT9>2h78 z7VH1@jUTB0>!+yS?$FPXAKs6?z8ug0(a8!?|JNV$ny+*U`v32A)1|Ec(K(Kh|Mj)r z)c^Go&heZ2&uu*aN1y0P{a=^m*d^k)1;?&6pE-rDIhg#f*L}(QAAP(9`Cos!~9zuRAt4|as|LZdJUA6QI_Ekf@`7ZT;U5o6|R{uqN>!e@ceCeShg?avuJ~@o_ z|9Sx9%S$@=&DDu|3;pnP{mnu0zurX+e2HE@iu|t^Oeg>AOs|svbqsy-PTilm+ef<5 z1oFRLPhatcev5thwa$8*`oErgjrzY%{eb+h(=i|UO~`eM$Wy$GU-?Oj zO?0=3JpV`kU4Z@w;KPMZ!r*FT&`X8Mo56}P6b5oK3b&yvs9$QO{Qj>Vo1grzJHN&HAN}t<^1t46l={CO&cEA0=S{%#e{|Dy+*6_7>O%h4 zcaE_BUq4le_5V6|8t(tqA5t?JrMJ*lC+NJF$^W`5W7%B2u^sh)ontQbe;w@Cb-G$E z^1tr8f&8ztt|b5KPsft~b=?f)fBhzX+EIP&0_%Tt=e(@{(MhLN7n!7*<_?A^urO<|8r%9VRr){1$Bp{rf|$sgdgTD>|GIY_^1uFNEBRk{ zpziUdevN%~O#ef!`%(A!hWxK5e#rXvDGwXkJfo-h+VV)nHYopnp z$@F8{Vk2qvERIWNooGJ!Ul$rh{a=4XRw<(YD@y*??^b60zy9tS*8k}4Ysvq*7qzCR zb>)++|JTpVCjaXn$jRMwmSp6AJ(e~(M312VAE_@grjOStnZG2Wi3Z;>BRPa2FV3%b z<{F27Wih!+C&^ANNZ-EC^QrV>+u|N`75BF<^kE!#`ysw>8Qp?wG;{@VuPJw!docAF zHZrY<+kTsCf<*W@muHT~p@?%LUffnUJjHVc^!?3zcYTvFlz%$z_1h*fM(B2o9V7H8 z#;MUd3E6(4F8?=uj=ug2^B~=rwn51#?mbVFE28_VXl?plw_p1y+*cbIkD~kP8gu06 zz8b;#72Q{JZZf~{ZwKrR_tmpUsCl|QcWKr<>&_|3Jo*xIw1)cA^JE@fhA}$2f2t%V z^SHe(*Zz9w)4!8>bi2jWJoTAXWFGxjBc6Gp`*CfH7!$ug$@%m2pInz;qMx6^nrEH< zah`doUmL`lXI-AU!A>39i#5;sPz}~R=+wE%JbE&(`C7lh+~Eh^y(Vj(_4`v<^Q<3b z&P%r$_c_;bu%gFk_gd;>ZXel%IlIoWKWxuiUgg<_ZvU0>I(m#AvQ{E`jIuM|kGAJ7 z--PeKi))(E_b)vy+`f>xMhf3EVJq%|)t}W5&$UYID zD?5Q&3P8==Ra+!teVd*)O_3>v2sX+UCb3BrEzkS5R+>{_U6KrRctT{FCrl{KH&^E;sIb zEoFSnrql3w^6GB%KSgvx8bE1XhV~QfPkv<1!Xb-$pI4{Tf9mHN^ZW#ziaw#Wo*cvT zll6CBa{rWWJDBUIdO|F}pQ7uHq5ss!r*i#NzfIoe(8v9|b%${MRR8t_>nHW%F4Rx- znpdfx=p(UQKh>)q<@XcyjU8M+)rI;}Khb45a0m4K*SLPFU*shHUQflR^wm++PxLl+ z;5EH(No?enK9_*|r}V%E+&`sPT&I2#6aT%A9pd__PI!m)lRAbMaLUJh_rA%fpXkHS za{W|KWqdELXRYG;ss81A)=%m*ydjY|?tNbB$Mci*<|*|5x-jQB@h|Q*Z5s3YDSGSj zuutAadx*BNJ^#}uzso_7w$C4^r6l${2JL~}9`~NXK1{EJ&+xboK0{6&e1>SB5PXK> zZvWrU@ZXImf^KaSwF_U4Tw9 zdY;zFL7mg>!M&={^K^12>YQ#b$h;ZyW z^gON7pLGuY?EnVW=y{qjS$Lj~VBbd1)49!A=iuxAV~!j>PdoPx&(reNsdM_8`WaZ~ zpx;@|wE=zq0?#?uDX6JN&(qwr&**u&ryA=Ve9iJ{Jm=7JAwB0*^gO-9+%S5c);kfN zr=y?eK1W~wB4b4KJe}T^be&@09Je}JyJWs#9#X4tS zv-r~goTu#Mo^C(0p8Fhi-u|p}(7m}fG+OVXJ}^lK*POWw7uWtX(b(qejnwg2z7n_n z`%hWttaoxvd4rzxHR~L7wj(^}M8Cs;`>{UvHg!(@0oQry?&97v7sr?BL!6(YLtrp6Ymyzeai zm2OO5{iNPcuE?YBPT)BwdTM#YUNnbc&74)?3$6=hRQl zqs|%Ko|kpb`cO93Iq33qm^<`OSy|_-OV4MWv#yeW`yBP0vfSsWmuzR9gWj5yI;S4Y zNqt`5;GkU9yPjvAgYHlLB(( z&Z+$R@xtUcy=euRUl(CKs;qm_;A=%+laM;6u0NK{uSb5voJbG47!&EFYquox>nyif z=b(R@L!DFa89?UOEsrq|()TNo`Sqei)H(H_rqnt0k#y8K^_f1@IrVqrsB`L{Z<6_S z-~MEN-JW^D9zB-M?F)UbBAH+J&q$q9r}>M_ud}u!^Xv1RM8E03n#D$L>tCS?8eNr~hoJuTJJZN4>Qm_c`jr?33QQSTUY+qSqE;or7+;g*vCs zl9P1~dOwr6S^96ruLU|-clN5DO5RwlA0x+Z(go?Xx9bh`8}I4Fxmo9|Kcdt4T;HQ} zKCFi}3A02_I*n)stCTIwKNpy6M)OazXT$u{>XC5HwV_d%B^qxH^Ut@V!u-?zw=nitKkoHka{fm1XOD(q{+u{0 z%%AVFpL6>9)||`Htd+kE&n0tvg^gU7)L)P1x}+Y(02kdqXZc5?`zL9eaQ`Ie7v{q+ z%ZB;ziRnC-!1qc07~{1r$~hI?KgmjlwUkNcxi0Bz4)6~}_fO(&;r>}fU$@lPG}yy< zt;dgGU7{XVm+@MU=EJ|EJ4LuJNjIc#*{iQq=ecCMd}FRl>Qat0= zFG){0!+5RNF({YPA2NVe)K#xg6VsdMXX@$Y_qi^qXIpEk&E~%g1&3#FF`{LLLT|wM;FSd^Bl6oIQsxnnB$5 zOn>rR0)34S`JWz2hD_wx{V3bnEpe~knv8mj&fS6WTEEEq=g_~Tq~4;tl1Yl`ub$?< zB>iN4#%o>m57s5>AItJw0$raklE}973H?>HZ!Aowl*a96^M`$7fotJBt76S?o^_r6 zDthiWyAjq5Z%hp5S*4!}=UKmf8rD|_9S-ZO4LPrA-f{aO9bY8cPi{XK)>pIi;XV#u zGmB8yO{Z@_yV6&8a}SPA)HkdVeUT%aOFl+_9{r9LM~8i5aJ@acAMS8)qpx}X-*CR! zn`4;O_rLphxF3ET819FG?ZZ0QXPkp&eEktVSS3Ag3mI5nAhe;xtdDj;Y(v^s&~l5xSbV_dN14*D>`4 z`s#>%+V}K(NpwvDQc8XDAlETlenbj#2;B zp6i%;WL^5MsE2YLQ|}-QwAZVaavzgk#-yIZ7x!JhpAZ`vs7HRqd8&`mP#HSoUQ>~J z$YlKr1M5tkmQJ4N826gCE4YrS^AF)VrY_At#Gl8#=G#xWj;Y^#oOO&k^CGTe>QNl8 zeY$8ho@1cXWM>_t9{n8GG4-c>;Ggx#QmkXt%kQ&}QGXqrgSt;?u4C$Comt12ApWy` zIfHeKI#^$pMmKn!=NRjxwAF07naJ@g6EA{7`Dx%Z$;yDJodrQ_a>J|5>@9D=1 z^Be=6xF~ga-KaA4Jw2B&)1MjAvDaUn8J?=L3Jze|_?qkxyaT~AilL4mbinNnC zdI|e;k^ZX@^*ud~OtMz5%Ss(yuh>U@Pp_o`2fyDCeD`+wsPF0A1hxZu`D@ho^bQ)y z_qtLZ>U;XcLVm|k&s#tpUZ3J`Z|MPaTz}~Yksoj#015 zL48lZz+jY9R~yBAN>Ag&DXvT9VZNY$d%Dgl<_miNuhjRVuVIdJNPqMy^97w~B=ZHmwL0}Zz3&m$G3r``>fd#h zyv!GLo6ndp=-ZFdO$K8gZRW)y{EmqpN61XA`%mIpfKHK!b&UGKkE~VdjAfhkddAb>nJK}(N?V?FjQVc| zf=~4o29*7JDE-M-I(v1VW2S3WV7{P7k@L^%Klv_K^;qgKH}%Ve|9d(I1NwhDXLfRI z;`q-~IWyO1b@qO&W7J(oFkjGZ8TWJOU$XEV1AUFbsF*HXh3m7rM<=e&>W>-sYw1qZ zxEktnO{nkb>Ga7#jX2mp1uJk(U*BEDI!0ZT_RwEbi4cBRh3X=0qRqar8NR^x~~N$3XvZl=`0j zllT8Yr>74*qfe#^=MhiV4(mw4^*atx+1)=!=^Ss8 z6{D}|Mpo1bhV#rTJ$o-%QKvo<&I{h;_|A2EA12ETyK&zu`ApWl>Hh4Kbvn->vZ7vj zA)E_rB;0=J_D2bCyY)zdF;Ok0=zA68h$| zWJTSOoK{tLzs56fb>3dABhtrc9M9-~+2QSVmk-E_x*=hYNE5eD+P34K7o9nGIB)%T zb2xu*JvN-%-f9tE+s(EqoVSi#$of6^N%xZBdXgmT!+Gl_J^-;N?%yp%wydNx)ClVa zL+^z1utz+LrgrNVvHb!+&U|C$(n=3mx_>pk`+CTIG$6WN|u zKiZz0sgqq~9fBS?C#;wL@OfA-9r!Kz$JaDr2jSWnK)PN?Gc zc8uM%^+s|_Bfa~nuwGh~2Hei=u`R=T@}!Ae-*o$u8)3b4_BUa@G$RwG(Y|KU4`DsI z^sTU7+F>2}$Jf02CHY71>Jo{p)bBEJi`D^haq@0+d(n|$z4WQIVZF3aTJn#td7FtL z-9_B7OSq5gn|d234ySqC_93+4v-&RMVvZvUurSif2{Ic)#?nIK2o|B&Qi{VFFNd$ewof_>81_c`A=tlMn-Jgi?0YZdm% zZ~hS0ZRSm3PT}7^q|P%$U->s&Gtl)`xMm>B_;Ag@`Y*yY1NG=@w-8n|leNy!Ku$I-TP`FRlrV7uy zFW(A3&(lr9&ojANSX-+wAnc>Ik)NZVrzZVL^cWR?JzUGt;PvnrEv8-_{X9t?4?j=E zHDPV7`)lDE&I60XwJ0^-3Xf6k&%-sGPm;B|c`T|P3mtkHJoRQu^!j$ zC(3b;hHgRzep$CI6t2a3GZl4gx7XoVv#aCU`Nie@4v}t8e;YlgHqa-~eZ{?|>?EEc zqwnSpYilp2<{Gry_jKpFn4Y+Xxx8-4ag3f{Ye$6Z7#lJeo%S_#X#*E@*#YELeTLe? z4L#!pey3Sy+rhm6`pY!2k%TevpR+TWnTQhinKKOHdXwHnho40kV_;=E9QT^rjBELH z${aikRA1$yLmB;dU2>6L$Q#zwU-Nky=sW*~HM9zRFydm|`(Gjmb<{)q^DH3Uaskf* z)gQ-lFR*@ZKePVZgf2c>>i1rVg z-w6Aw+>OEvbLD#2Km461?895{4Rgh@>S2FXt#sIjzf~n1TSt`)YwtCg%S3Z^>y%;t zuyiU$5A%Kfiv-u`ID40KXQkUe z%pP8s{Dkbc&F#CdgyZbdJK;FHqC+^&&Y@vP$Jtsmm}oz+Gjll3W~5z2$JqvTs5AKf zZK(DAt{c#Q693|k>7I+>b;%(qXiB!LBfo{$CBIlqox$zdXbhS3{eIzf$v<8WYw6!L z46jR$${SvnEP9@N=-=+U%W>3cUZ>8WpFJC1m(21!`OxjhDu>r4|76VS>h>MXi~Hz% zOT+7u1?lKsbo=K1VOxDZNjR3B{w!>(-z*5*>I>t-v9C zzNYCH;d@@}6=s+sbVSk2xpEUVH}`*YI+OIe7M;oCddN%RHTpS8!ZGv!!8n>Z&rS+6 zXPV048iowid20JU&Dw{VGZ^<o4NEw5{W z@LJxN--J2j?~^UhvU^!H)P(yP#f2-mVU+aWTK``_SR3#;99mmeu{Ng z`Z9TVte*TT>#X#rX<28b(-+}>QavOo*-|H9@LjEwvEMf7T{Bo`rQav-y{9YpV4an& z*^Fzo`Yi_i!#XAB$hZ0;ZI!Pd_r2y_=6N!D)%utShc9k>qGn`Bou7V*Zai-LG>-KH zeS`y=(45ffBIbs)PH&>1N~Je=HxkjP5a%-;>f0 zH*oBtui?8i(9Ii?A@%pP?P%X}?BB5ePud~uud>m`GTA;~=YvK2mYWQ+(Y|H+?l7xN zq!W(zEqf_UMdwzT8KW!tKBeY{^Ub65KheJB$-(?ifv;If<7ufAKgs$%U7Rt9rXKg* z+tLq2KmVjkVShWmdDu5jyB_wp9XLSI&!2Be`1xblR|S2~A@{=Z==0=Z4W#GKVGSfn zPS!a3`Z0OK8pwV+mI7|yMaGDZM}Jlh$D?PdwN~*pb?Sy|#>R6HqcxD`?}z>BOC`fK zWAh2Xo&DQiIZu1)m){K6)V+K@TvNBFbl8{nIT~iO%)`TMmU3^H&CZPuvsr%j=StuI zG{>19}Xf_KL8eQ^z zYI3gquG5nD?&!*`!ff_e_i)YF<7Bx6}2d=5xf9JzT+vIe%6CLCJty%}e`_5+e;rR@1 z&-eoCpmf)%VSbp=FKo|Ac+coq-+e+j)~BF>McZ?59HQsr!zp1qOu)DqJs-O!4Qm~z zX#>&oaXg(ybw5Mr2I2WQ`k&{UBVolj@ZRaqCUgZJRHjoY7D^78xdy4@Gyy^u@kOF0eW zUh@O}-cG%FCf7}L;uVp|9$ksfglHP~`sIXyuXU%c;h27X0MCDLdnyK_i#m2qcrWC? z$$0*Q+aFuU^Plz26ReB2ZB!$JF>J;CTfxATO3!B>2J@5P+S3#UM~3V;=b@v{tvS^H zH+J77{1dt3UUQMQT|sYH6%(QK6t}&9PBNQ5N?>TB$CBToq9W?^E+}d(j`m@j6uo#z($SaEucF#<8>^xm*{w1KW#W(U+3S7j@LiaV4~x7!Bo_Ie4p3HQg_uA zn8(o##(lPypYr@SeUR~ym>Rde@-@~?=}*q^{0Dt{CAnIsu20QJ?|qkRVfq9OhRY>! z?~}d-H6LA<`O6l)?k}!|>8&&P{TKc4I5i*Lyguuu^dK_xQ9XbxbX-^eg_@84C@I!Ae(LLc&v0L)zIlLkQ~J~H{QisX`Z)7hoib;bKOb!rj@SSH{jiA~ z3-*i(=kK4l4s*hrPqSXy*UaTu&|Kr%a85e^$Mh$RxjFRp$5{WM8?Oql9TZ?)L0PwN znjYStev;0%mfPoz=Kdy~>`|WMs#7yDY^yUSpbt#UXGqQl{(CtIP8shjfz!r2O;Vgb z-W3C9jCbq6^o7BHe+Ldi3jfum-N$4H{P$AeT=8y}40Emr|9!~68B-wM)z~R91>@a1 zaG`kb30yed-;wiTip2ZZz(wO7%jb;=f)D>?2^YKzvk@A z80H7Te=9lgF;(Jyn*AD6HQq_t=h-|K=`>9+@`Pr0MDpn15ERnEAt(OCyyzn89t2mFsm=o)Mvt?S|Ox;b7Dn0-o@9a*M>&%aW$J0k0K z@R_&hocJvrG?n*t&^$iT!Drs5gU@+L2fOrZT?Zf6P4Fole72u;D||aJA13&m_ccv9 z@=$Y_BZ=4$ye8PskLV}x6M;E?!QbZ8{7)pm4*s^N4*s^J4*s@w;NT$gUqc=2pQbwa z+b)6mLr&31Pt7ik^w)f($WR@;)kq!uTjO+a`b^P9@l0I<&(}}mrMeA%U3b9ibx*uS z55;fkk@$T*0e_;W<9&KAKBO1muk|u~T(88Z^hSJM@55L0*Z8_Vf&b7y<3#i`+3bIk z>!4kw(b;h(9ki>gI@mwKGjoH#Er|>0^0=4|+Ep1H^skk4JzP~cz|8|^2mIGYC&L|d za9q0TpbhlaPvU{PI3B8lwmmg4{b$e*%+f(Sc|`|pV5tti@9R1zUZ;cayF~|W;4K}z z|NA=lzMtrz%L>+L2LEm~d`Ji1{cGJEAJ<*+Dcv8R*FihEqQ~GHI%p?%^%VTCo{eMK zVZpz<2q)Dma7w)vr`MbDWBOg3U4M-8>V3GdK8#E1W4MAog{$hHaczAb*VotZvw_)} zobr+9b+FHS>0qA^)InPsu7h^+k`B(b3Az=YraR%;x-VX!hvQ{B*oP~1u;13}`8c?) z5PY^^zrCfG;9Yt--mACcL;5ZJwf+zv*TH@}rGx!;UjK}*=u7yzzJl-Q>-cZ|2M%sb z3O?JvFtJWZgioQFQb*G26gacah@aF?;M}?nE~uO1;yRe)merl`Q+hD2p_wX0>gfr% zi6%xxp3y|bNISh8chVbicl{RbtKY|ibufQ@L4S?M=;L^j{tZvpcko>OH(sRw#mjYU zEcX}d#CW4liMQ#@_$|%ylgPoq1>(o1BRV1b{|B8IpVq1I1s$~Qt2!gTp@Vk*m(Gr3 z=!AmzFNl-q!Z@`K`k5>`=v%V=kMrn?Y%labF0G$pdwE?AHw+y7L;TlN2j8Vz;6m}= zv5yY657ohU9I5%A$T%H*$0<7KlV|Fjc)l)-m*}#1g$_R323-Sh{U5)pYq9-99i01L z1uh)lhkvU%Jt9BqVE>=h!G6A?gK;6a|11`f6dpC`EvK2Lfb^c7k4 zG@MJ%#07NFZaTHseH;(fr|?L9 z2~X75@Cz>Y)EQtW)E&fs63w z{C7d8z;^=&4V(Y|)A$@Lv}l{Oz#7&SggF;BUuk{wFe7XU9tdmj?W|LIS9H);uj}A^xub{Uzx7BQVa^qNo}fJ^))R0FJq4%L z({W}!8$YS%CA%H1jjnDZh}+j;C<5S4)}5173a|1 zaY5Y^m(l}qh5vC4J(%tF^l;ovkHM|~$DQ;zws+S-`{}Evr zCtuM)J6WNF_OMZJ$J_Kyyi@7F=!cvzpo$Mku8LSMpX^#5z(jzgm? z12~Sq=@G-m7_mvPVb4T#gwAyvqC?`4F+@hh5pu|~L-&vSBac`^V#PT9ey_X_Ja?Zvf8IU!zR&yI`#kTqMZ94D zgYVeOc*(wp@7g-Qs$-4fan>>FdA`AJ!p-)2++wG3o6RncHrd+OTWlT6UG{Fg!+sX` z+By8Rtv-;m58&r*?e~NBFdmWVz$yHSU5Ag_kK*ID+I-U9h)>zu@EKd}pRjl0^D^r; ztMKQxw#kgGWAdo4&f;!+FYdAT;f$?)(P!uJ9(xEsC$oN~wjH!L<3n~D zAGWm}Ub3|vMs2mZXlpx^Y_<7yJB#16)gRur)rNQN0{*}r!5`VL;!o`ozGR=o`uP&I z{}jGrzk{#Z=kPWA0={8S^pcB>wap(60WnCaf7{r zo9u{Vv&GgqOq;E9l})zJRkqkoxXWhQIND*a!x=l^K6^9nw>xpxPUD>2gZJARJZNkF zHDvF>1-l=Q*etO}qxL>rwDY)R58@LxOYhORUBIX9ar~kDRBf*Dv7KgHeP*kVePL(t z*S7lDclK`lqx}rNZV%#${UTnpHRdea>Q|cds}1^Ic*K4KH{0*w7JCx6*=5{rPvH*x zBJQ@;$9n9qaK`=~_t_ff`|U-XwRPT`vm5Y!Tm50s)_xzdJ8;3?hDYpOc+}>yTU4}l zJ-K9SpPsM};Bor}{FXh8C+wH;`}P~r`_Tl4EH_62;^)?E9VJ&mv1 zf8yJ+*V6yCQ*5id_QUu;yAemtwLFJtl(PBf+TYGCD!>>^jjxXc9GC-Vx!1V-kTV(w zyeu5fj&dRKLs;IvPtZ{gX8fVVSfg8$2Y6z^aa6dzhGnZx7>r`f` z0c)(Ar^cCzypbEq0ySW*QM9tp;!KcPPf*!_1J2;?L}t7Egc8hqmBA_8o5-l|#@CND z9tGA1w7mxsnY^r>M$s4)u*T9OiOi_%IpCNwxSo6|k$Fw-sJ=|~cPIi@drl`ZXXLH5 z%mfZt{ctjoDa-0OlqqGfGV1H`_L-KStVW_4W$+pv&L%Q*a=MoJNg1ryxtYk!%U!ih zMHw7;csr3oH z=Qu$byq8RSBBQ<%Uw7+NW;^FWyg!$lAH2?(?CWvIl)*YyCKH*mtS<}7lrnfHo=Idb z%f5a$s|@ZXb2E{dm-Qbh6=m=cUP)x4)nxdtS4rW3$7yp;&lhXY56FC{sN|Kw8po>F Q;+>gQ#$(!?GPsHSeQl8BQvd(} literal 0 HcmV?d00001 diff --git a/AVR Code/USB_BULK_TEST/Debug/src/main.d b/AVR Code/USB_BULK_TEST/Debug/src/main.d new file mode 100644 index 00000000..206791d6 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/Debug/src/main.d @@ -0,0 +1,226 @@ +src/main.d src/main.o: ../src/main.c \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdio.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\inttypes.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdarg.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h \ + ../src/asf.h ../src/ASF/xmega/drivers/cpu/ccp.h \ + ../src/ASF/xmega/utils/compiler.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\io.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\iox32a4u.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\portpins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\common.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\version.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\xmega.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\fuse.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\lock.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\builtins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdlib.h \ + ../src/ASF/common/utils/parts.h \ + ../src/ASF/xmega/utils/bit_handling/clz_ctz.h \ + ../src/ASF/xmega/utils/preprocessor/preprocessor.h \ + ../src/ASF/xmega/utils/preprocessor/tpaste.h \ + ../src/ASF/xmega/utils/preprocessor/stringz.h \ + ../src/ASF/xmega/utils/preprocessor/mrepeat.h \ + ../src/ASF/xmega/utils/preprocessor/preprocessor.h \ + ../src/ASF/xmega/utils/progmem.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\pgmspace.h \ + ../src/ASF/common/utils/interrupt.h \ + ../src/ASF/common/utils/interrupt/interrupt_avr8.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\interrupt.h \ + ../src/ASF/xmega/drivers/cpu/xmega_reset_cause.h \ + ../src/ASF/xmega/drivers/cpu/ccp.h \ + ../src/ASF/common/boards/user_board/user_board.h \ + ../src/config/conf_board.h ../src/ASF/common/boards/board.h \ + ../src/ASF/common/services/ioport/ioport.h \ + ../src/ASF/common/services/ioport/xmega/ioport.h \ + ../src/ASF/xmega/drivers/nvm/nvm.h \ + ../src/ASF/xmega/drivers/sleep/sleep.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sleep.h \ + ../src/ASF/common/services/sleepmgr/sleepmgr.h \ + ../src/ASF/common/services/sleepmgr/xmega/sleepmgr.h \ + ../src/config/conf_sleepmgr.h \ + ../src/ASF/common/services/sleepmgr/xmega/sleepmgr.h \ + ../src/ASF/common/services/clock/sysclk.h ../src/config/conf_clock.h \ + ../src/ASF/common/services/clock/xmega/sysclk.h \ + ../src/ASF/common/services/clock/osc.h \ + ../src/ASF/common/services/clock/xmega/osc.h \ + ../src/ASF/common/services/clock/pll.h \ + ../src/ASF/common/services/clock/xmega/pll.h \ + ../src/ASF/common/services/usb/udc/udc.h ../src/config/conf_usb.h \ + ../src/ASF/common/services/usb/class/vendor/device/udi_vendor_conf.h \ + ../src/ASF/common/services/usb/class/vendor/device/udi_vendor.h \ + ../src/ASF/common/services/usb/usb_protocol.h \ + ../src/ASF/common/services/usb/usb_atmel.h \ + ../src/ASF/common/services/usb/class/vendor/usb_protocol_vendor.h \ + ../src/ASF/common/services/usb/udc/udd.h \ + ../src/ASF/common/services/usb/udc/udc_desc.h \ + ../src/ASF/common/services/usb/udc/udi.h \ + ../src/ASF/common/services/usb/udc/udc_desc.h \ + ../src/ASF/common/services/usb/udc/udi.h ../src/ui.h ../src/main.h \ + ../src/ASF/common/services/usb/udc/udd.h \ + ../src/ASF/common/services/usb/class/vendor/device/udi_vendor.h \ + ../src/ASF/xmega/utils/status_codes.h ../src/ui.h ../src/globals.h \ + ../src/tiny_adc.h ../src/tiny_dma.h ../src/tiny_timer.h \ + ../src/tiny_dac.h ../src/tiny_uart.h ../src/tiny_dig.h + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdio.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\inttypes.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdarg.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h: + +../src/asf.h: + +../src/ASF/xmega/drivers/cpu/ccp.h: + +../src/ASF/xmega/utils/compiler.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\io.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\iox32a4u.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\portpins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\common.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\version.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\xmega.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\fuse.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\lock.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\builtins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdlib.h: + +../src/ASF/common/utils/parts.h: + +../src/ASF/xmega/utils/bit_handling/clz_ctz.h: + +../src/ASF/xmega/utils/preprocessor/preprocessor.h: + +../src/ASF/xmega/utils/preprocessor/tpaste.h: + +../src/ASF/xmega/utils/preprocessor/stringz.h: + +../src/ASF/xmega/utils/preprocessor/mrepeat.h: + +../src/ASF/xmega/utils/preprocessor/preprocessor.h: + +../src/ASF/xmega/utils/progmem.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\pgmspace.h: + +../src/ASF/common/utils/interrupt.h: + +../src/ASF/common/utils/interrupt/interrupt_avr8.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\interrupt.h: + +../src/ASF/xmega/drivers/cpu/xmega_reset_cause.h: + +../src/ASF/xmega/drivers/cpu/ccp.h: + +../src/ASF/common/boards/user_board/user_board.h: + +../src/config/conf_board.h: + +../src/ASF/common/boards/board.h: + +../src/ASF/common/services/ioport/ioport.h: + +../src/ASF/common/services/ioport/xmega/ioport.h: + +../src/ASF/xmega/drivers/nvm/nvm.h: + +../src/ASF/xmega/drivers/sleep/sleep.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sleep.h: + +../src/ASF/common/services/sleepmgr/sleepmgr.h: + +../src/ASF/common/services/sleepmgr/xmega/sleepmgr.h: + +../src/config/conf_sleepmgr.h: + +../src/ASF/common/services/sleepmgr/xmega/sleepmgr.h: + +../src/ASF/common/services/clock/sysclk.h: + +../src/config/conf_clock.h: + +../src/ASF/common/services/clock/xmega/sysclk.h: + +../src/ASF/common/services/clock/osc.h: + +../src/ASF/common/services/clock/xmega/osc.h: + +../src/ASF/common/services/clock/pll.h: + +../src/ASF/common/services/clock/xmega/pll.h: + +../src/ASF/common/services/usb/udc/udc.h: + +../src/config/conf_usb.h: + +../src/ASF/common/services/usb/class/vendor/device/udi_vendor_conf.h: + +../src/ASF/common/services/usb/class/vendor/device/udi_vendor.h: + +../src/ASF/common/services/usb/usb_protocol.h: + +../src/ASF/common/services/usb/usb_atmel.h: + +../src/ASF/common/services/usb/class/vendor/usb_protocol_vendor.h: + +../src/ASF/common/services/usb/udc/udd.h: + +../src/ASF/common/services/usb/udc/udc_desc.h: + +../src/ASF/common/services/usb/udc/udi.h: + +../src/ASF/common/services/usb/udc/udc_desc.h: + +../src/ASF/common/services/usb/udc/udi.h: + +../src/ui.h: + +../src/main.h: + +../src/ASF/common/services/usb/udc/udd.h: + +../src/ASF/common/services/usb/class/vendor/device/udi_vendor.h: + +../src/ASF/xmega/utils/status_codes.h: + +../src/ui.h: + +../src/globals.h: + +../src/tiny_adc.h: + +../src/tiny_dma.h: + +../src/tiny_timer.h: + +../src/tiny_dac.h: + +../src/tiny_uart.h: + +../src/tiny_dig.h: diff --git a/AVR Code/USB_BULK_TEST/Debug/src/main.o b/AVR Code/USB_BULK_TEST/Debug/src/main.o new file mode 100644 index 0000000000000000000000000000000000000000..81f3fe57ca6597cdf8c02ba8db021f20827aea02 GIT binary patch literal 287808 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

    Y(&l!&FT^*2@3>~f>zy9_ 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 DL=PdG literal 0 HcmV?d00001 diff --git a/AVR Code/USB_BULK_TEST/Debug/src/tiny_dac.d b/AVR Code/USB_BULK_TEST/Debug/src/tiny_dac.d new file mode 100644 index 00000000..6b58ae02 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/Debug/src/tiny_dac.d @@ -0,0 +1,213 @@ +src/tiny_dac.d src/tiny_dac.o: ../src/tiny_dac.c ../src/tiny_dac.h \ + ../src/asf.h ../src/ASF/xmega/drivers/cpu/ccp.h \ + ../src/ASF/xmega/utils/compiler.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\io.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\inttypes.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\iox32a4u.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\portpins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\common.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\version.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\xmega.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\fuse.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\lock.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\builtins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdlib.h \ + ../src/ASF/common/utils/parts.h \ + ../src/ASF/xmega/utils/bit_handling/clz_ctz.h \ + ../src/ASF/xmega/utils/preprocessor/preprocessor.h \ + ../src/ASF/xmega/utils/preprocessor/tpaste.h \ + ../src/ASF/xmega/utils/preprocessor/stringz.h \ + ../src/ASF/xmega/utils/preprocessor/mrepeat.h \ + ../src/ASF/xmega/utils/preprocessor/preprocessor.h \ + ../src/ASF/xmega/utils/progmem.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\pgmspace.h \ + ../src/ASF/common/utils/interrupt.h \ + ../src/ASF/common/utils/interrupt/interrupt_avr8.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\interrupt.h \ + ../src/ASF/xmega/drivers/cpu/xmega_reset_cause.h \ + ../src/ASF/xmega/drivers/cpu/ccp.h \ + ../src/ASF/common/boards/user_board/user_board.h \ + ../src/config/conf_board.h ../src/ASF/common/boards/board.h \ + ../src/ASF/common/services/ioport/ioport.h \ + ../src/ASF/common/services/ioport/xmega/ioport.h \ + ../src/ASF/xmega/drivers/nvm/nvm.h \ + ../src/ASF/xmega/drivers/sleep/sleep.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sleep.h \ + ../src/ASF/common/services/sleepmgr/sleepmgr.h \ + ../src/ASF/common/services/sleepmgr/xmega/sleepmgr.h \ + ../src/config/conf_sleepmgr.h \ + ../src/ASF/common/services/sleepmgr/xmega/sleepmgr.h \ + ../src/ASF/common/services/clock/sysclk.h ../src/config/conf_clock.h \ + ../src/ASF/common/services/clock/xmega/sysclk.h \ + ../src/ASF/common/services/clock/osc.h \ + ../src/ASF/common/services/clock/xmega/osc.h \ + ../src/ASF/common/services/clock/pll.h \ + ../src/ASF/common/services/clock/xmega/pll.h \ + ../src/ASF/common/services/usb/udc/udc.h ../src/config/conf_usb.h \ + ../src/ASF/common/services/usb/class/vendor/device/udi_vendor_conf.h \ + ../src/ASF/common/services/usb/class/vendor/device/udi_vendor.h \ + ../src/ASF/common/services/usb/usb_protocol.h \ + ../src/ASF/common/services/usb/usb_atmel.h \ + ../src/ASF/common/services/usb/class/vendor/usb_protocol_vendor.h \ + ../src/ASF/common/services/usb/udc/udd.h \ + ../src/ASF/common/services/usb/udc/udc_desc.h \ + ../src/ASF/common/services/usb/udc/udi.h \ + ../src/ASF/common/services/usb/udc/udc_desc.h \ + ../src/ASF/common/services/usb/udc/udi.h ../src/ui.h ../src/main.h \ + ../src/ASF/common/services/usb/udc/udd.h \ + ../src/ASF/common/services/usb/class/vendor/device/udi_vendor.h \ + ../src/ASF/xmega/utils/status_codes.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdio.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdarg.h \ + ../src/tiny_adc.h + +../src/tiny_dac.h: + +../src/asf.h: + +../src/ASF/xmega/drivers/cpu/ccp.h: + +../src/ASF/xmega/utils/compiler.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\io.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\inttypes.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\iox32a4u.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\portpins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\common.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\version.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\xmega.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\fuse.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\lock.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\builtins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdlib.h: + +../src/ASF/common/utils/parts.h: + +../src/ASF/xmega/utils/bit_handling/clz_ctz.h: + +../src/ASF/xmega/utils/preprocessor/preprocessor.h: + +../src/ASF/xmega/utils/preprocessor/tpaste.h: + +../src/ASF/xmega/utils/preprocessor/stringz.h: + +../src/ASF/xmega/utils/preprocessor/mrepeat.h: + +../src/ASF/xmega/utils/preprocessor/preprocessor.h: + +../src/ASF/xmega/utils/progmem.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\pgmspace.h: + +../src/ASF/common/utils/interrupt.h: + +../src/ASF/common/utils/interrupt/interrupt_avr8.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\interrupt.h: + +../src/ASF/xmega/drivers/cpu/xmega_reset_cause.h: + +../src/ASF/xmega/drivers/cpu/ccp.h: + +../src/ASF/common/boards/user_board/user_board.h: + +../src/config/conf_board.h: + +../src/ASF/common/boards/board.h: + +../src/ASF/common/services/ioport/ioport.h: + +../src/ASF/common/services/ioport/xmega/ioport.h: + +../src/ASF/xmega/drivers/nvm/nvm.h: + +../src/ASF/xmega/drivers/sleep/sleep.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sleep.h: + +../src/ASF/common/services/sleepmgr/sleepmgr.h: + +../src/ASF/common/services/sleepmgr/xmega/sleepmgr.h: + +../src/config/conf_sleepmgr.h: + +../src/ASF/common/services/sleepmgr/xmega/sleepmgr.h: + +../src/ASF/common/services/clock/sysclk.h: + +../src/config/conf_clock.h: + +../src/ASF/common/services/clock/xmega/sysclk.h: + +../src/ASF/common/services/clock/osc.h: + +../src/ASF/common/services/clock/xmega/osc.h: + +../src/ASF/common/services/clock/pll.h: + +../src/ASF/common/services/clock/xmega/pll.h: + +../src/ASF/common/services/usb/udc/udc.h: + +../src/config/conf_usb.h: + +../src/ASF/common/services/usb/class/vendor/device/udi_vendor_conf.h: + +../src/ASF/common/services/usb/class/vendor/device/udi_vendor.h: + +../src/ASF/common/services/usb/usb_protocol.h: + +../src/ASF/common/services/usb/usb_atmel.h: + +../src/ASF/common/services/usb/class/vendor/usb_protocol_vendor.h: + +../src/ASF/common/services/usb/udc/udd.h: + +../src/ASF/common/services/usb/udc/udc_desc.h: + +../src/ASF/common/services/usb/udc/udi.h: + +../src/ASF/common/services/usb/udc/udc_desc.h: + +../src/ASF/common/services/usb/udc/udi.h: + +../src/ui.h: + +../src/main.h: + +../src/ASF/common/services/usb/udc/udd.h: + +../src/ASF/common/services/usb/class/vendor/device/udi_vendor.h: + +../src/ASF/xmega/utils/status_codes.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdio.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdarg.h: + +../src/tiny_adc.h: diff --git a/AVR Code/USB_BULK_TEST/Debug/src/tiny_dac.o b/AVR Code/USB_BULK_TEST/Debug/src/tiny_dac.o new file mode 100644 index 0000000000000000000000000000000000000000..50f57ee45ef1a87a6d5d51038ceebf9d391a7ed3 GIT binary patch literal 279144 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�V5u$FMC3rSLm^^nG9MGZB}^k8%e)O2`OEDjyUbe6=b zy&h7z3ilvU25H2xgD7iN>4!VBW@6LK#<{s25O!vF%@q2J{iT_p1nxFl?639*#yrs& z^ACJ7rsv9I9-HlXbH&x?N4}=*>74*I0WXfGlyRZTyHe?v@g;h+NK?I&DeE)Pkq<6 zwj12`Nof+DP+%+t8)o zjz~Z5tEHZAA=2-xF8wZ#^qcC^@2W_@=`Q_V8R^G4TI%_3jP%>orQfZQerI>-_vT2y z&0YH45$U(3OTYI;`km9I-^U{T&h66g?nuA$y7ap*(vN#*srmb6q~Ei<^!r|<-#>Nf z_n(n|GhO;U6zO+9;Dnr~vfQ`}-lzPlB0 zbiD6jykRu(`G)kn*mzhkexCR^jQ1D|^IvzbNGTs4)8FPa^E4nTDzE|z&H48d_j?Ye; zzguyjU&n#;;~q8nzJJ`^YaWd+`FxJgP8;u8ha2;fjc&B1pU>>+HLG4_$8&sk+IXJ= zaru{UxFz3rRqqP3N}td1*=ggQ3nKK$K8&|z#R@}Q&i8eEcG`IBK&*=UFy3DuwZfc_ zejLy7*=gfliSg3TTXH?N?zh69U*evn_VaZZkLTQdmRjEhjCTw=@%bE|o%Vch#dzdj z-Dj!sUW@Vg%pA}0*=gfF3PgNg-nY1a_`Z(MP8;vZ81E?eaQJ_z=Nrd(r|9!JK09r^ z3dZZWLAs3hGK|;K^IJ#1rPkxN1!HhT{KpNQT;GQdSmEhbv&(oN#&{(^+S2cP_+wU> zjp)bqaI_`ueg7Ndk-v7IrJip$#^YH0b9{E%cpE`@zQ)PW&r;(ZbKnXy4w}jFX7RVw z{2dE|_Zl}C{$Fam-G{93_{#CwY0vjDj0Y6$KTC~w$&Ah4Eas>S?c*-`P3EWKhcTf0mUsje>Y>ir?|oJ|5D@aJ}i7+9Dyar zdk@C@iDL%4jCUi)!wd5H950ggzOTM&-|)eQjt%j_#a*87jTmpQd&w@(_f?E{xt?Fg zXQw^ip)WD!42x-e!!){q8K|lrOm+pTc-~ zHyHk3YP?HUhWOyhF5~?M<8fcP&r;*vhw+||FZp~gz~2h|rM>UBUb=7ea{R=QUcRWy zc#nCRF=y|?dAkGSZN)?J`Ci;*yz^gf%;osreU^IPN9S;U(TU^Xm6m+p?_s>-++g^B zsqy}Z@lL__9PeuUEj52Vuh=*GTMR<_i=Qkx-ud`)U+C{wF`knbuIVz~Zj9HD@7-sq z_x%ON+lWql-|O(V)cd{;<860?;s2$^J0-uudgg?K$Xb5!U_}+b% zdcOCTSD5S3iR0ajzoo{T!+68{aNf?S;Q25J$GfG=cz5BZ&vOrjehy5|-}xu6Fn8$u z-PUEi;MM!aUp@A;kiU9;m+{tPynUgUr(nEeFb?1M_AcW!_wo78k38R-x{P-v#v^@k zpQYySdW?4;I`R45g1@EK_s z`YtrO@jeNdzsYIGer(()J~uod{EmNL(EnY((+=%5f&Pa7xqknyu={E^`nlh*%{|jM zA~4&B2gCh$r+)WX{C^Psz-Ic-8!+BO{wkac-amY5WByv~HD?@X%=^*)Z}{VVxsC_m zFFM{SXY`soQuHtA7W;5~_gP^c`GQk8fvVWiR)J-u5U0};`&XAYf`N6 z(<>AwdQFNEetHGtN3ZV`-FeuO5t%!@?lEr+F97u#;@9xA!t9p`uZ($=c~Yq9GCOm7s~n#Y(z?D{~{h+RL{yefA6ICFRG`tjy}V%JYF$48MgF!z?& z^+D$4vFn4)M`PEAm|w=OpJbll2#-v|lg(u8`YGnB*!7|2{juw(nxDt64>N~7DmtG} z6Prrd@^o`$?EAybow4g9%ui$2&oIx}FZ{JJ&otAq>#Vshc73GzWbFDV^Xu64(dHQu zo&eS%GZDK!*1RNkeVqAd?D}}~VC=fj917i5_(6(%B+ z5@P@9H#4#8lgz7Q*E#d)*mYq35WCKsz6cFBreLI zxIR2_eMI7#+*J7K#d(T;dQCQZiRU>oaeY+c`sl>LpURj9Vw^*cLbIH+ zKVfFf1^l3x>(4cUQlrzT6oXbVXch~FV$iPUDwS$8$QSXA`~ba~ZQqaepjK`HCDL-pEvaj$){VzpdulsknYC!o{_f^xo7EwtLzTA@^_Bkc<(X*cqU?VjBwZx4Uc zX06_A6mzX|J6CJh8l7rBCb*BeE2subGwI_9U{Xcmw< zu+eUn>!nhmk+W}q5vp0v$}dXA{${h?#v=r!YO_=9)bJqXpj0o`D!DxFQ_Ra#NuqrF z7D1)bsJAM$pbkgTAZV3JSj9%J+UVr+&0?b={X2W-+kBvMe+>f_3!Qeo(yG8m91Box zG~1m*E7xhas;DB!mxe>?1-5&&+zImSpq+2!gGN192?~{3rP^-RI{Bd13G5DO?48|# zeJOKP>(3WjomLK=N|k207F2SjT(eec74ofWP(to=xdU>iHsG_1o8)W#L9^Cwm#d{( zvt12}rB0<}JW|PEHk$U8@eAxiK2;6=xAjh|fS2yH^PNJyT5RQ86lydzwK69&GYn8A~v1FxEt{QaOrCh#T&0~e+nReIr zEO45NRcs}!bFoxvViPulcB4?h@o5(-t!BQA_p>*^R@#k-$vyZ<4Z#-J6$PBvS}~XJ zvOnzQW6$iaZSJv9%(jEkkkO=Etkyc6YNt{t7V4!=r(MQ8 z$}e{AY42{=iABmme*ur2E9cv_TBA_LIVx3(^pwX&g_Y-M%ns~*ak}u*g zCs#AbVe4Zxk&L{OD`3JJxmLAMsMXswoV9YUQED_T2C{`WkS4LcFw?ACWKqds`vkdK zmA5LFTeVI(j}2NZV}M*I58P@uTw|`jr-cVB1^tzBK9}Pz$Th22)K-8)4_sO*<(uV7 zJ8(#tI2Av@*2#5nVjE3NR*!nVi zS*f+kwFU@6wcO|+d7L6siC0E{OmwMJYUj%3pjq$a8ihu^(FWS6bjlzH?IKR5&eyKa zjQnWlHl8y)RU-#dQf{|#{&U>LwOYMaZKD2byIRCHuv3OC@tv8bVoLl7b5qJUszJRC zs@kqM$~oe`a;t>R$COxdGt?{A7q4SUN`+FhhJBE)=i1G36(<5|B9Z;H5tz9nJ4HNyD zJ}u|5+7J2=R9l^Pqfu=&D!|drYP$s@)u@%Kxw?|?y{#tr9a*Sqt{?akYym1N=CPQy zN~s0%S;E_uad>bJEyYLiPuw8Lm4TvxjynP7yj{fJ%vUO)H4W?^a0jKJU{63eiTo9q z7tC3?5tN(xW<6-)h*omg*g>b6$HA+V+{RvL)%R?}FA6wl`DUSBueQMOjg-)Hf zDOSL@wK^T;kidn_@x?3spc{3Z`gWsSu2w6pd=tke-wG;)P7(8;b12&O&lhoY$Ug)D zNM0^z*GsLS1r*;dfSBPSJK#bbAFBD2r`q+_5OVf5_8|Sh+^#_+7!hgU;JYk~OU~TE zh%KJ&FC5O8-P%s= z7&U%ufBF-9#6C=T?W8fU)OPxE&}PNxT!CTvm)@3*DL9Ify#;6%Mr;i(fc<|Ku$zZ^b73a^?q z=46Ghgc!6=;hVEP=3Ir#faewdJ&cjpD*W3Ejk!(Xw*vlv!e7l~%>SqGb$HqP75>~; zGv+@P{`hY)=C=y}0qs3d5%699ju$yd;h*L+2Dg^>(hQzo;U^R_<}`(m0K8t|6IS(@ ztqOneDLv)_g$FP{mnr=FO|Yjce0DKoUaRo;F(GeNcmeGnPX<8S_kqk2^hM`W1c-`b;Q1`83SA!q=RiG20Y= zE*5&H!oN8IYoYKP2Vv_|_`BPB%*z!1CDb3+Dtz5fGv-ExkGLgc{zc&vUzahrEBv%v zkNLR5U$`e@?o;^1c&GnR_=T^@m_I4}szWm7(NNj&9e?=^_)97L>x+6!QQ@oh>oG$L zU$Hi0rWC&Zof%VC`07)P*{v|=|4M}iu%_24%=y1f;V-?|m^&2yDh|a*6@CfE|ANBD z02h2m;s1F|kNJhdhs^buKPdde68zPnV&d~Z@)?{Rg@0IwW>4XdVNaf@@SCwld4=C} zyD>F|KlBr0&QSO`%;BiQn>Y2C^@LT;be6(E4`vf#oLzoqwEY;s^9oZF@lu7UWxGXT zOqKZ{VLWpI2HvkIJkd7h0fqnV30N?E+3|B=P`Als@ee*9!C&S`0S#WwWR9}%eT0v;@HYt`W8v=- zKGwoNA*?E`2MMb>>okdg~m*xbK0NfF>$@)^=ld5zg8E3xop; zKbJ5U6Q7r8{}x{SI>H6pezUf}?sdkzQQ_zP8t0lYH#|O$j-35K#^7~K2IrL@p($z# z{<{9QGX-9OaK-ldk+$CiT>49ekNir;{7&Jszyti1u$pv1`sE#eb3l)I65*O1=Na1m z$;&e4c!ke?5qyORKg;%cmbPE@1!D#YpKRO52=l<=vr+rp^W%)AO{d!Sj<%l!ItbKc zGN;*gOtn1Euigv4IfcJ`evhSDr`tZ)vHc7S3;i0f@Ef)N?Y$ZEPK9p+-G86L+kh)R zLU_>j{}kaN3xApLu!X-%80-E%Ozck;emm&+pA??J^Q`E#eLjO=hQ|^fvA;c-@Ti5K zMp*Y)mhc+ePFobmzx;RL?Gzrs9snAX_K#srfrbRmy&~iT2Yz9FbNSoCFOA`GCHz6G z>Cp;5@Gl{5`R=c*Zx{PK`{0ld-1}khJlcORm>EtV`@Hsoj9AhMSL)y^w0-WJ9`X5S z`-5mdN89h*ni0!2+dpz*F)#ScO0GD9~<&uLENlDEtUss-o}#cuuf$a^H93S%wtevZ2R} zDZKj4#%xgdV?g*=4(Wg8&p>w+K5Unb>*DiY@>=k0+WzCm8L6B+Uy4>o+pyqY8ff1vOmzXx2Q@JGP^INWMN{g#U}<_`-0WyYAlDcrazBld63RnL7H15_;c zx*z=N6BPakaN3g<-u^?#T?)VQ5@Ybn(*I2GD-Kr|{tNuKw$FYzBldKTU-@>%)U^E% zAOxo?eD9AkW<=qWO~$NK`0{IwIZNT2u0vd(!Y51vrzrgCb26r>@G2bSS%t5~a|&+9 zeP0P4a<8_p18+%}Fh0*yUYPNC{=;w1n3rn%Z8)>nDEtge)C~$hrv-mZg>xS>=Jg7f zKoH-e@a*eD{Qp*LfIGGQUf{_ODtyClGv?#2|3Mk^S%v3v8FR0~&&0%jMd9DvpE36< z{8gOa|4{g$t25?D3ZI4v`MJVxK09N6rSRc6%fD6ljX*w*j_d+G_=mRt?mNK$y>?EX zir*fn@Ifnp{}sODHsF7SFL`>#9HH>F|7^_B3g0tl%u0n{b2IS2!YAGe{IBpIz{s7f z@azKkDuv&PgT0M2d|0H5rH4r3H-0{DPMsuNZ}dKT)6j3pI3rcgKN3KMZ6c>kOl61Dq~Jn_-}sz z{#W=`+-pqXBTohXSNQrjX3Qpqci{YFTBkA7T|wv|6)(Zyh7myaL%g~{uR!}YZQJ35VDhtSI=h5o3#CFn9sK>{4ZO8 z{}sM=CGfw(uLSSwWasw{0{?6KDy-u@3eVwvzohU7@I2p8`1eQkc=@_q%a|W%`$>NW z{#W=2yyGtw&I9>BqVSE-p*b1+HsFoFY5RjE$d6$DxCh>i4R?UTmtdSHD162{f&Uf$ z#7}_#75?@&fd3U@UbsY z_zQ0Z{#SS{=I0uPp9@@cgThz8CSz_^`1#N5F|Swn%g+J+SNMK76ZZi zD|{pH#?cBt7rgOGh0i+=_+Q~Sffkn(e(1d!bF#uG9SHod@Sjcs{#UpcICH(i$9^s& z{$t#qKYt*-+~wYy~1w=KKYBnSFXqX_qWgRj2{92EBqPkrN=4!$$v8D5QU!uhVw9m&x5k} znF{BiZ#-7vcRt&g6BT|0I51H7#v<^)!XF&!F{diL|1}vir0_L6!2c`!<+CzogTli& zJDU`K>(9aeD?C&I{#W?dUk3lL@SDK1?NqpNHgvWMzwk)le}%t-bA6@4dC8SwuKXCPO;N8vjk5B#t2e_sjyU*Y2~ z&X`XteAPmaxkus7PT+sn{-816P`Gd|_`>DdUCqOT(@Xh@_<`IS4 zPXYc{cx(mmzry3d=e@uq+=oy5G4Q{_2K(U&3cvWm9`j^{*MZl4y29^(!tF?f-`#<( zM&Z9<@2yt2e-QXz;Z0TW{|dhy`r*?RJ`m45qVV7FUh5P-=7@|rOW_UBS8R6uPX+(4 z@VlV9X)1hAyT{BbeD=M-{|bNmjfgu{_;YW9OsMeBHv<1F{O~cr{|cXpJ#&r1-#-+x zw8Gzm9^ht${|o2t^$On)W5-(*zU33({}nz8dayeczVR2p{|fIM2mV+1+UFbdS%nKY zoA)aG=<71(D+(V0Ty(#}^<%*QD|`?B|B=Gqn+E<@__M%!zf$=5JAnTc-tZdm{|cAD zYyCsvU%e3gKh6O6z>S!n0~KBeL(f49zw09K{|bNm=g|Kse9{BJ{|bK-{L)H=zXLpW zlEP1U8u)*OFa8klzrr)O0skxf;4hG5P~k7!$$F+ZHWvGYz^4%Hn;^qFl9sA@k?f-_pjL9mz6}01cg(tC& zQ0d5+^GDd64E*h#plehO6TTEU7O!mkOd4~h!Y5;Yf|N`9nb3uTgbBO_{0Y=10zbIH z=4IeG_mI|T`^S$m1|qHWIq_KVnF>EL3LCb+3f;R+wQAN0lwUx449pzue)O9TpUeK2FH3O{@Y^hFBy_8Bv(@YB}~skYj;Qp2$cXEZd)o{qSOK zZ(;AfQsH|FkP8%k+7DpcRrq(qzzGT;2^@}LWz4Uy0FSNnMtzUl^B4XPZ0_3r^MiWC zyPWrZ{biw!edq6hW8Iv88#q?sDJ{7^93g7&}jO3JIpRJHh+S>l5%X$n*iS++>@Ivzn{{(mmk1FlkzyrKM;XeY` zy-eY|!OLBz@OS^sn15FI4D3A|2l?$VHp810esG(O6Xi490X&SKNS`l0Ce)w55Bu{| z+P?CpjJZeQqwtPjRv6pL+^_Iu(AR++$T$~+5B!P3->mkS|5Et4s zdAGtBKPBV!-gjd@Kc?-s0{MJa;nVj=Jg&lbz8v&U;TNswG5@accW~}7)%IThoH0LB zc;^)4T!o*~7up%`!-M@r+pl^xGL8eH;9|!lz^J9i{NbwV^F9cvk4sb?uw6SGCViK~KSc%lQ9v0rslG z?}Dxs(x zJ+yBQt_`H|OzyvMF@LcgJX zo`S=8lfr*L4Eha)5B;L%48;7O{8^h@fb-dNYiQqG{WZ`M?SKAzq2E?`0vq*{3V#fT z`g00@73UPg%JVnzkodX4$GyOK`{oO=c^=UAul#F>t5+Qj{kFCr4m|d-8wa@k_X>|g zFZUOPe}Dr8v?=4y!Kmc;lk?Yyc>Cx#AU~w`>BS%pZ-1cEoF z``57E4sXBb3D8w)`#7G*;q4cF5qc_Z|JO^5$J_1y2=Vqs*Bg(w*JJZLynWwBCsik?TNl+FLG%Pn5#7PlpAK*DH9a10KX`A5w-3r@Jl=jkm;q;he9oOA-hL5i9N2i-Ctt>7I=p@TQ9T}S zKlnG}@%9sN-W}fl))67zu0MqHsN?(+de>VOzV8vMvcogxs|w$}HM9x-;}040eQkgFkD(7# z`0KTdc}U^e6JZNh_>>nI^Jj%$3OwNKfZv4v&H0yJbUAE5E9`pRhV^=i!jC!?^iknY zfcHK|;lEx8-LJwQhb)7%O>!0t_=K9m_01V`hQdFagU(0cOMeDmT!nuKp3vF*s=%?# z6~=k~%pI`xD16kqjCqd2>kj}ORQNqRddwvXA8<)%<9p55;1{RuFMJH_I|^UE7qXwi z>yCtON8wozmp3Z>vpMK>6@GWonD;7t#k1l6r0|Dsfxn!>FPVZqN8x*bGw)OQcF=TZ z%WGrI?`r#(KMXs*!v6&P?EGd&L608R_8*KH^FIn-eLDO%6#f->xfPGH^K%WDgaZ{G z0uOVr!oxTtjPd6jzT#+OvI?K_0CcwhKU4PscVqqkas1rJ-a9*+B-x|v%#fLpkv&3I z$%+t?l}&_fl}$#2jHv9r$!LgBwvzwr++OE*{U4A2|Izbz9>=-QeU0z;{ry~@>$>$} z^6>L|))>~3I^TTyoOD9+LuFmBLO4`Y&#p+HhOWst*;N0*?-ko;%g-&nk(!CG_smGm zL{DMteOp&s6Llt+V>l;E`9aBK9Y6HRoy&6IP|w3 z)h4*^mS#KQgis#Y7f&UpW}<)pnVN|%Q<|EIeu23=i{5cQxYqU@HOXhA?}#3Re`im!GLM!#v4fLk!FLKi} zugjK ztG?ccz#NCMDYEaH{2miZtkbbeQ|XbRm{10Nc?dO9-9Hb{9@JglsLZ=>{!J*k1~!tBRsx(H)k^!it$!#w9a`W}wAFLbjxJgZ7KXCH0S&04FuVztGUgsxUMz3dG zoKODu^~*K5mZ9sVqi&;LxWauIdgB!8Hu`DS&e3aFYd5nN_Vo-^$^W|D$Mn4FI8QUa z>#F3XNxIi3yt1%%N=`Ui4IO5J8l za7`-D8S=lcPv&>Yqr26iZllMo426p6C1k%Bb*inwb*N`QhzZs3^?&nHyo(nJ%}MI+57-yo_k}9&k z$mHwGSOezJ7q5h3pMMki%=FX`3;Fs>4`V_l^?%H9<@C1cF3sy$=;oG{{rDqcioU0MIU{Oaq?aL{u*j2`lat;LZkJK$MlKmv%hd(n_kK~ zVy@m#7G10t7vlP$F3x&$oqn3}_G`WVhnUbd{UY=Ak9rKBc|aeg2jjSYn&17LUQ2HL zMVClI{?|t+a^BK;Z<7D@6|z(0zM{xB5Az)o>iHAt0nq=j?t4lne4lF*dN{{qZr$z$ zuKnpO!mx%|9Wm+^1rUn8o7>6@*({mdfHy{zfSNK`Cq^J5&2)A?ag&w zJ*7PPUpJ#x{GMLMyg5?$X8szd+bksi>w^>lX6dQjV?y)wl*;t=>Cf7d|Mg?$oelcM zZS+v;68x<1^?-(<&>lUTZGKo!;2b}tr~gI%*A0(^Lci-`T${L|N3yQJtJfr@e?wOt zN&ZjzWZxAhGbGWuSp%llos)3iuD-;WlU+Yz`{dJe@^j5pH)b3zq0e26+~@G*^S3Z= zSJrW}lK=Ivr1a_OE)>k0>R0Pg!_>=5kpJ~V)*x@{1gzuU){PlY2I@tO6~pxG3)C(3 zpgEz?1f8ra&)d~?YK22{^nS*TMY=o3%rgDa>-6I4m6^h!ukVj)w?++-_S3!J$vewjksp2lfB3_Q{9OJieI;4xfM*i2I{}&4Vtf#ZT ze$$J|NY{0t_SBPgvjpUS9iRLhhc#Pd-#y@5POL9nBme7>hqz{}7j33TT34som{mICkn&<+%cow;C)Q0P}dgBE83w8A( zS>4Rb=S99KmMVQ93=niHspc( z`Vjwpth=)=h@axgcRt6solGArOZ{J;y+r+Azs=e$r+%g=*M0Q%8r1)F=uhhZ`f2J; z<#lfIMpfPWFP{0WA2OCU)a|!(ElhX%nEbE58A$zK-(*|$(EV0X|JTP@rw`I$zUOeg zBy%`4MlZb(6Plz;EhYc!Mpw!I`UP_A65WA%;0j$i57%vVOXllubn{N((009I3t*ZmSayBLC~7jmZBxHF+SM^2z>sp7B4Cjvi@b6`@OO5 z#oXOe*W&f|`avr4zs~a|^?#kMCG~&(dSB}QdNaS*2m0(H?z`75*$z|na>n*gbjjY`|j&_NhpGSTq>MSE^>^f%iTW<*<_z6*20fxWJe>TmJLe|<>jj+S>vX%Z)c^JK z&xb?X^k#C}k2-O|aOi+;!dmaRu1a6QIX(C+^?#lG7WrS#=UVeE{eaJZs1J;0U!{Js zzaF!uNT{opB>(Fda*+RZO&Wf(>g9Zg$a5bebHNPuT>+i83HRUX{JE(A>mftQ|N2@f zdj9oy9G`XcnKR^nefC-Mzy6{dy}o)yCGx*M-J1Hp?n*tapUzo|dpvci-(o@|b!U$4 zak}YM^1tptj-91DF?P+@`wo%+^#OA7Dm|AP#ReUD2F7OHn>q1&eS>x79)0K;^1trL z9C1qjoh%%>pzCq2{jTFvcf6q!UL*hOTSdwL`b+A}aoP5f?ccUA`Cq?PoM-&#UqaOX z^)BjH+4V`rc5hj5_n* zIw`sLfo^q_LTB11`|EmFdJ^=ehM`b${WW!@bb3}n^1uFSCHY@>E<*m-nKzUFbviP9 zX}y9>RY8~Hx?VM%hVA@{zRa59Regi{K=bH(7*E>jA#Be#bb%)1e_ekQ^?zNHYcYfM za`NN|9ltmEU%zvh{IAdEpk|~yvmNH?gN)lt_23-g&`OFryeeBcg`bHJ$&-vhSW{?ntb^ z+D87@`;Jrp*Da}~WYZ^JBme6eMZ=+jx?5BJHiG_~d8&+l%zW{ZUU`JRO?|Bp`Cs2J zM*i1}I6hz3BRR)A=vkcO-SmpS+zX@6Pvp5w`sFdy|8)w!&nSI`>ntDXqQl7ldgNm2 z|2kI;`CtF~9QA)a^*Qo?^mWGVO*;GseVe-JQ1ZWidMx>0hdOY-oBr;7^1n{Lk^HYe zu0{UWhuo8;Kef?~ea47P}DI#Ozd9qD>j`fId@UxQXjbz=l`o+f7|8=ro$p5+m z_0{~ke+BZt&cN?gO7CF%m)B)#heK6$9*)D>`f5$`zfSc$`CrFRLH^hO-lzVrJ0Bze z>-RQM|JQw(M+WJ-Ve0?-cz^nT^e0ED|Law2$^W|TWb(hh$iH2pXL5~og`R(c`;~OY z1=RobB95!=x)sOjPr7b(`nYuJ)71ZUufc40otOIOulmbM^#ABGtgUbBR$SBkM|WyX z{!jm8e{~@PC(`8@w^Qo0)ww58e>I5wuQRr#{;%t&Aph$ooXf@ZygKB6{m&8l^mNI* z^lj=NMw9<_ks8$h^*}ayOWk`-OsKuS#lG&Ur@l}A*IzML_SZG@k^gnokEs9a_n31d z_g6%Y&lbh#|IsB@k^gne2i$9>`*SXTuCH&W|3`-phC&;412V=Io%PjFXr~@Lg8Z*@ zXD9#bdzWHDr*&P%`HT7jwSp`9J;uVDx*+G#J-v4t{XaTEVe)^5C%;Si+vI=!(_Qkv zZp<;6N$;a}kwX`XA^+>hHM&CjGtT#t`W>=XIsKq6^?yC+1@0ZwgJ;nHqbIYzcufy0 z84k7959^Wt_0pj{TS>=1LI02b{TcGV{+IdaeZ6W7`Cs2+oSCS9q$V&!4`+^^tJ@_e z|Lbx0=>O60P}^Cjk5(Z6>xY~d+w_XR$^UxzLhAqeD&POO{yGWue|>F0IP^>Ob?Rf+ zbPC3(Te@)bn9xH#hxJ0_d0mlX?=!M}LcNM}IfcGhi+%;Ym-8sAzCec0ty7eu{;%I4 zhZNNdf1v)a8*`jj)Zg!={;ywV4OK^1=2&f{kC5kE=-(?-|JN&0*y# zLj82=D%Ah=wUXq2eR5bRG)_MgHyoOxPf?GZrGI36n6F>2&vwyoaou*6E|iY?zkZc5 zXR}_locymJQZw13YjB-J=c`g+%o+%u(L<(O=x_pp6B>O+0W|GMnYr%`$AL_=`u_x#; z%n{S|S=JPD^xy2$Mfw7HV43d4xv*BJI8XnNUcnrlK*v1e%3L4jr?|2 zKSfr*tcUadtNPZL)c^I0Wz_%m{OnBwK*Y#Ua|JSdj;hrhI zm;BRHU#&*{Uw@r|`oI1;G5KGwZW9iT)y-cg|Lcx>ssHPl`KbTvGt5m(^#$gml{yaj zbG^PemHNNVN#@_7zhz9@t>>O5|Lda3$^UvvT=Kte6yly)eJL^dUuS(t|Brrl3eSDj zgU{0cljX_28_ZmnSch72AAufunfkv@Lp>~8^!`ce|_g0 z>i_x$j^~$kq4&6NOV@8g{?`?lgI?F=&XfQ3R_5+*`o>M_|GL{f^1tr#9Qj`-zDWIF z&reAGUo$<1rsuD2WLThv%GXEyMhcV|neSmRqm;RzD`CmV% z#q*AI>ow$m{e4&RzrM#Buc)?%-s$3b~11?y|pL# zU;mVd`oBIyp6Q{t?I-{1M2zi&^qP+3f4!0#%NSjO?>0%_9ZUY#FLJznsweg!|LaH0 zxhwQnrK$f%or(It{)_o>yME~c{Xe=7+xejWyde2szsg*5UXMvj{*S(&eu+PIsm|2@ z_49m(fAq=UcrNkNPxjZCj^uwG$+ju=+_$O!>yOA7PwUT`@H`5Alric#J@s@bR7~$? zUU*U8yh{GpSs5Q{=%K6~>gtz(N{XIiS-VVI>Q|MlW6p-@F#Yby7|>9)hj|9W6|>i_!cNY=x;I@fyI>5pnq|JOU` z(Ep?3a}4*>=$OdsGLy=oKne|@|#{XaVY5%Rw-!M^@o4`p7vq2FU)+|`R%6Ft&D zRU-fAc(U(?ry~FBX?w{3`qoMEzy5>qJiBhj+>|f+`Wf=S{&fNQUuUaI{?}h8qW@p- zNe~mNsqauOMWQ)^wMH|(SSuYV&SuGJM%lmB%~>H}MK{~P3geYG(8Uq8zl z^Ozp-Fa1AyCBNfk9ltL1f4!s`^?&^?bI=3blw&NE^U3~d&KQ+I=b|N3V~=-*nK0SyPD`{2QI~S#P|-X{xtAp#MiNEI|I(9hq}W>8IJJ<#o+f+zYS!a9-Ee zV;Xa>w=Tup)J%^fC%4i47~dlO0g-)O=?wLMeTcQmJ9_s4^1t4Ykp3TiJ`4T-`gPtv zN%x(`z3_T?n^5Re{U{yJZO||0r{dqmTJ@^0WlNsp$*Kzr|xAogy$p5++<6bz=lkMOd{RhPuNw|U zuFXWY;fvGA|N37tLlvE*4E;a4@bA?Bb^jjp|Ld1S-2bcVKSlo6|5Ydd>*M>#|N5=? z{EZ=9i{tbC=zH>nL!)(kve`u4J`VjqIy;$Xt}b|t{IB*?3X z|GGy5^1r^aocn+EPZ_EI>j$sX|D%7tK>v?Eyqo;5Ymqr`>1*VKhk6ZTX-vK++qOYX z^1mLyeoUd?FCPv)rAPNA|Le5OmAQ5K!{mQGY%YJdMR(iDb6<5G#^j26T@~`b&eV|n zuM6HH|LdZS$^Sb0bn5?lJnPCX`Y83`Uiy!1)c^Id5%mA)TD)hZzPXY9A3g3T^1r^q zdT^GG^yAOh%jkRmOgGL;{a@!9&i%hpGbe7=%{lMB*JsOf|F0g#y5q1uz?^QwuT|Z`x zmQOF{+i_!sA@aX|w1E1*ewOQNP4x!OyHO4e$gYtG zctyssABS@PuTEN&{(rrM^+G!RJ=rOX?#6b`rQc0W{?~~gkpK0(HuV4K(i_PC`U2mf zny&aM`Cs4X*n3s?VeDO5L@cDgp@-?B*V119wIYO7}Oa9lL zUm^eNCgiJ``bCcId3yaS^1uFs^K_+tx?ec7UZ<);{?|2nlK*ww`PBdQE6lBjbb9)W zPU_y|jh}TpewW|$0oI$>^#F3<9lhiR{XcpT=S!StpX|HsoOg+Jjy2T(bwWNTgWk(H znN80vMgG@cbfy1aSNw$hum51ZRz~kBLH%EUo0a|_eSq9vPp4##XrlABrT<57VUF&g zM>1YT{w_%5c>A|Af9pzTVm=z6+wk3n>dYgl|Lb&*ct((3!}@ocu0b}Nty4@U|LdO^ zGr!Px22lUk!;+Ez^|mtPe_h}p`Coqi@bWjG8RxYkNmG| z?IHi`A^ctkb=y(Y|8+XX((^i7P4d5P!Z`M)uE=`-wr<9{<{!NwEBXJqC;RI%19u{Q zn&T~{9<_}8uNTCp{;vmcJm=BR(4+gD?w2SODyG*JrT(wKJi%H^mmfs`kFNhN{XaU{ zCF=jW$U5r(y3;S@fBj5h>i@cByilmOKDLkNw&}eL|3maDj@1wJ2gk_&x)=X8(mxkD zXVbDxKGFG>kpFeDs^ouNw+H?I`rsA%fApePc?Op*$e6HGFJTVatJ{3W{l7XVdGNFz z|1!`2(PO^mxw87qo8*6;lC|wUy_T{1KfQ4T`M=n6>}|9bi;^1qIsll~vQldM}#|F)R^A6+&L`CngPTQ$%*v(W#q=kz51>pgFTLY?$` z91q=f3XZ)#Is@DAT|F-~{XaU(UF!dOOnvgdKF4>Sp|51(Zv^O{dWAxZb)^4#x!yOG z{IBEgp#HBHpDhB_{vt z!Hg}Dzd;u{-iES9NT|35#yZ@1~S9jO27A7@bi*E#;A{;wPU&h=e=mvi|&eee$T z|LE(($p5-vNAkZO$F`cK&lRBluXDwr{;!uZ7Om1p$YvY#26E|Uy@d1Nd!3czbB~VG zjrzZ?&A56>Un<1?zd8ly_3ygFL-N0V@95(*LhJ%%lFV zYyHYIlXXnIP$;{;(v|$L`!feUuhTPsmC)5X#DvP~Zy%HY^)l)VHTBHeIQd_% zrM}ck$L&Y|kFI@={vX|iwe#CLC;NS%?nEtRn4Ze<{Gon^*C*)8CjaXbhpGSTO>EC&x=%vB&A?kGj(6))_Hn9wZWx2K{4+C)fw7T z|JPMni+!s{K1=@Ba~VH(>mh&9|D*r;gZqDVc5>0rx+BNoZ+h-p^1m+1zPO`rGiLs) zn}0^t&m!`_E=0ZV zC0&j4=w-eC&2Xrm&V7RC|LD(Fa{sSBQ;z5V=yw<^y6G3&QvcU^ds6?`8B_4wX8q;} z`v3L7W7Pk3J+kpMJ?a_i|N3L1X)BE~*E&6|Se$L1EMW5`umZf<9k3QFy zjHPD}rv9(TQ>V?T+tj4~umAgv=l|$L$;khDz>C!XbvZt>s@@%k{vW+5Klxvu*-rk~ zx5%q)bjGgq|LBeUzCH9p&X;#|zW>Po`fw@g|9WqH^1r^p`zPt`waNeb5Xb+gx&-s) z65WBUyCVAjFUbEoX{B)J8-4vF^1p7;gZqE=)_dfCy)-@fUzcJHdtU#@y!@*k*M$3j zbtJ#s)(JVM{?Q$nPs5!5k@2S(<8vat?GXL{dOP_uy&ia({I4_dyX4VpSerbjr>&>{ zuU~kZ{2zV)K=QwSmHk^ox2s0}*KfbT{l9u)^O#UeU4*fyy>7Ud=YQ%H`>Fryiu4ln z*I8Nb4AG@4k^l9ukIDb~!}#?7>wnvj|8*C}v<14}tMvcqzd27=>jOim|LX_Lty}c> z-;)1z-vgo0UL8J7|Bs${l>UFcgS>H3FJL~pqTi>N>88$@nf$Lay+-|C|47b>SNzGo z`zt^BUw=;?OQTz);Q2rL59*mYblh#^e?7Z5{r~zDub0$GSeuvArO1|5^t{gW|LDhw z$p3l*bJlD6ANEUY{rpz)zfQ&2*j;xeXZF#XYtsLtbN1r?U%iL%d9+?KmHe-tCHKzI zm3LDA*A-abE!K%slmGP&GUqy7lnnE=o=qOxrUz5+`cWS`MgG@!nRAcpvaRU<*OPM7 z|D)Sy;r?Hpo$>0H{%0`xU$-EOM*hxolxMQ|JO0!kYn_2 zu9p?i@3KxQs?)wf|Br6NHms;ijHmvuyE2~C(YNZ6|Mh*&-xfMsYwG`cR~7QVp7}iY z|LV4^L;LAo6~m$T^gj)#|LZ*DnQ^*ND)PU6vpav=SNAJT|G&|Q5=o?+A|Lcrg zlX|4@{6+p}zKneS2G;&bbT;}1Q|mPu>HpC!!{mP*dG1#}{U7uD^ZGQ~wnX%Gj{mZ{ zN;mSq9)6Jie?6A(Q(wntz1&pqPfGsRd!8cy>jGVQ{*QiXKK(zscQNY!IypaUm>$G@ z_n|J!I(>pJRG<5Q^|Ne;Ir>pr^1n`BiTtlypQZmtC)rH?*F(5IwN-!Gko>PdszCnN zW67n*^t^rKe?2TY^?#lDE&ledK01v0zm7ad*?K-$p5+lS>koQl5?kn?oxs0|LC`wmINy%^D=|-H( zyL6;4b)Q~#o%+8%P7XYyOLZat>&Sh*f9Uh-l`2_?%af^X@X^ zd@?up@Ac4;=g+;POOg)<>Cj2)|2p43?*G+a%pm{k&TOlXbv3fn zr_t9r7nbN_E9w8&jaVCgsgo_H{;zA^Bme8?!`%O?`*JKD)QK2BPw0uvFX#0P#^hi1 zz7y2{^{>ovx1;8I**`kxvpkECu_Lm-5|D2b=^XqwrQY!s^?yAp1NmP!XItgb^{90} zr;D5qg^KB~S+~BZCwxNxj}HGt{@0DzFLiaX)zts>+thPf>etVb|8<+k2rN<2l-!@yifgK$N7l< ze_d-P`CqrFMEze6UQhnlX&8G?>tAP*|MhBW{#W$EMb!Uw_B-_d=%>lv|LJA@=>O-~ zjqJNGQpbdn>ZSC(q|qOzBLC~QY|k8ee?t2I^)F5N8-luD6Z(I2QT9z{bNlitoX;_iAA+ozBI`!M-mf5Y~CU(cvd{?{+@drj0i zSgX#^?Z@-{PrZSkwOFU(IA5-FGXAgAo7(WVp>>-zJpWS{OiljRKPMpn>%^bZ|DzXh zoSf5RSr`1GYmFiQ>+i_YxAbo24Jue0;}KBa$HL;YX3 zW8TlL_wxM<=+%A6|N33VjTiJu*0UA$=?mQdtMhP<)X|yK(f_0GB_{vtI%TN;>)#KM z|8=@T)cCoQ(Xh z=>)jmtoAnv4Q-81DT1x$27a%tt)|Z~A{;&UHA6?L&P)qq;H({-PLvN#YeOITi zL;ly}Hqrl6?#aGu#=M_IKj3?&*6l8k|MiDtq3pWT4f_A}4|%Bn>+A!_|N1w!e_6fb zE&BiUv|i+Y-MuT%|ItNLlK=H8uG6*B^Zup(U+<&#@}|y7&FXEvm1Ab0&d2XHOebx| z^FQ@m#|ccT*rTl z`oCVsypu&Yq;8W-586Wh*RQhvDxxFz(v{Y=Sa(;@lbCa>=`Q51S9Ah$!mD}**`vAM z6^H&Gz2X}AUq8$5)l)~t-M)GQ$H`z_qc8P;{rXArzy7rd^?$vJ`qE6@{66)6-GS?F zOLhLQ$^SY>OY*-?HIe$ij>~m{9s2K4)c^Ieywv~oYlZ3m*SYFZ|JN@Rto~S|IzKZzHn4`WIb|5_aQG`(p$Nv|A)TG@B3Hub=zh2*-{(oJIEElfyWPi0QNdDLRN>KmTkNzV6>p?5&|JPN%CI9O(jmiJ| z!*k?+J$NV2|Iv&19V_V_j9oQ!nM~w=-K;YCUr*zBXsI7op#MiNDMbH|UY?WwpXhtG zk^gl|#{VID<5cp$E?ABHuZNAL{;wxxqyJy;q_(_3FX}=5*Z1hnTdl{W;Q62W!%gIW zJ>nGo|9T;{*}b~iO!|NH^4iq@^+!qQ|JS`)yIs-udH+p4;1T!#>U=GD{=e?Vxf$=J zC;M*X5$gZCN^0)^)uS1^GU@Q=F`*oK7McGU{X0Lakj`9`{vREAws$#QgyW@(e#Dqu zOSec!{a^phdtTF<*lw-$j~v6DbiL=v|9b61`hWDKdi4M3=U$}#uQyL4|LZhAQU8y= zhq~?zy{j|ze_e@vv{=7#h5ElfHG}-G_foI^TK~%$VVnMgy84g0;VAC^)u$HF|D#9$ zLI00l`#jJ8*GEF+f899;&;Qr`7^5EQ;+LrZGp|Q7$?e4S|LA;essHO&lT!cJ32IRP z*9VT$|D!wh3Wly>!x9)cM=z^N{@3L@lK*wFH1z-Ia69t99{L9Lf4%B; z?*EOx&T+UwZ(xnKSx>k^|GzH6wZA=jVkQ&;QhYnWuh_zNZ!Sf4!-9 zICNJRV!n8!v#q86U**ZZD^QKUrLOz-BLC}JQ|SNE@4XZbW!IM&^YiK48>s*5lkv&_ zx?@}Nzplh_Raw{CMgNaJ5kvmhGpR2%)n!?uw9>oYB>(I53F!aP&B>f^>krFLN}9TWFE4&m6Q&?@dSjU%$y3_AA|%>kC_T3~P`d zbP}@Sex2nM{XhB@=DV}{GUNYc-RBGPzy6)|+TXf3WB3D|nqxA=@fSJQj-(;~>+#f8 zlIyn^C)4Sw)FHFzJXfjz>j}Tn|D#XynML%nc-;T1i)RRjD(Hb6FV*x1uhRdcr}QWP z>wlP!n(Mt2c>a%ms}1>Ihv_Nmskav<|Le(&X@hl*Zan`-N3JQ2)ycEb|F6$dKb)zr zm!tl#hmcX1>St1t|MjcPU+eYcCDi|QuN35eJ^L#6|LWl!hlljL=g9v$+?e}+bt2B4 z-}H9YmDhEd_2hs3Z4d7M)opoCoN7<@U8`i|f4!>^^?yD8Px^oKWybt$`u2a+|Mg$B z$^SYn<92bqWDtM^=UtTnpnK^*^Y z={{_$0s1=Q(okKSoIgs(?MnS$&tZ))O&@JY|BwEa@3v59%}oB+hsdI9^osrDf8F#S z`v3L&uhIXnf9Xj7kKRarJF43^42RC>g&bp-bfI$Of1Niw`CqqVF21j~v6gwPoASHF z=bVh3cYo~V`TsipZl3?6H}od|>%POu|N7I*)c^IwzsUc(Txsh6`oBZue;t=xT2{@3ToFzxl! zA>@C3mGQZ^zITECe;s1pAEF!NCjaYnEy@4-2ad6+y7=?d|Me~Q(E^?59{oRh@Pbfi zwJyl^+ZcV%pY;Fe0g0&p>x%Et|Dzl4C;#i>tOrl)%FMqP^`lkv|La~Sxo#bOy)FGe zI?+h_|Md^d*YViak$u;gb2+Il^(Fm3dhUDVe?8_7{r|da74pAs$i6G2*N>t9N4MqJ zE~n43kE-aC9RIcSUB-uk)q6ZO)>)c2M!|t>+)}L|F5p_0sTL^>^%Pdmo7=YG^Xa0{Z%zS_y6jpWSbN^ zO?L9XK9!&PzfRST{vSOn5&b_pC)uN@-mr=OAAO(!^?!Y*2=#xx<^!JpuMe`;Zlr%n zM*Ux38A|@wxi*sj^-$Ihz4Ye;$p1QXV)}pdmJ0O$=sQiw|N0ci)fD~uR{DSRC(H}; z_538%|Mk{x)c>RJC&O&eZR;{l=~MOS|Iz=jHrb=kA1D9o3dgAb>yG>`7j&94pXK_}$CugB%-`^~}W7|8<{d$p88>$8b|!oq4L2?!htEQEzKa{@2srCjaXl3CRDt za18zbdKla7L%p>b`CqT)9G|YAnnnKC#ctF8qu(w?{?~OGTh{8bqsad{?l|iII(shq ze{=`Ng#Ef-D*Au)pEarf>s4K-|Ldn1XRhkbjQ@Y@mdqCq^vMY!0>P90b*(wqw)G^& zgycH)-{gN?yDIr#zd)YJrAtht{;!vfBLC|TPLu!jBz|rMy{$g^UpHDx{?{3J|Es#( zPV&Ew!?@R0*JmtxLoYu||G(b7hWmf@;bY`~-M<9&f1Q(Ya;$!>JN19Pieo8q-$-PR zX!H^JU!R~Ryi_MmOa9lzs2Q%;<#&<)b+Vu7|JTPD-*)Sv?7Krc3!iyXzgw63zkXbV z{vX}&HS)iH6o>vF-G`dMzq&c=-#D*4`Ob+e(*L7hE=v7h-yoA@(EpNEvgt|bssHO2 zIBpB-j_;HIb(Teg|9Wj_{{EL9_!3Ke zJ!(Ale?7f3`Cs??n*JYsmilBH-JuitUpHiq=%Mo+p#HDFqE)Cgy z|Lak!$^W_=bJ?#tP9^fcPQ&`_wyrmb{I7d|M*e3`jf@X*IhPaZH7}C?^GhbE z^#ABz*e`kX_MFuJ^_efp|9W}{^1uF&^<5=hfJWLZ7E0R2DusSNc0 z=ySd3|Ix##GxXN|Ij{TcmpGn>=;|>%|6kAONdLd?&G9f*uVy~|L`SYSF3^j1QUBL% zso$>FtN0EZ^%T~dTlBg-)c^IDoI88Obex z|D#8hrv9%-v+v@Ofg<}Za{V)@9#M(@A6@+$`hRqylGOk8flTCoeZM>TUymifmDDW@ zkpFcW#;z)Q$Z7JwE_RsuzivkMcuiB*3bod^8_@rwYvkqmKhf92)c^IZ^F04wrzP{e zug^0MkJg(OlmGRf{mB3NEpq!@9W#{Y|LA@b$^ZK7H1fZ${XYHwQMV=k>wF7%R*1gM zHawuO{!IN}Z+(mYA6@ba`Cpe{J#tOgE=2#2F3v=(Df$Gp`dK;=YoGag z$*<)9={o6-NTQzoVUubU<#|3_bEy>?jdW?!GumpMK!=;0jmzw0yE zssHP585{5FKJ&Q$SAW-@{vWn!kK021Uw5Rhrlt;2Z>+C(r{wvc`gl?Dzdo^<{(l|0ci~O_)Iaq9 z=#=ccfjS+>>M;G@QS!h3x*E^_(WlB%|JQTsa{sUXk-WA@Z@o|dzy5(^X01-idG}TH z{qKwI;o|LY2e$p3oq zhva|Vu?f%r(Pwhd|D!(`Oa9k;lJfi?-Qy?f|N0a)$-eq;>cfNeU}^;;^uYq$|EurR zq5iL1jidiZ=iwNbr@JseF4a{S&sXZg9JlNBVRGHKdP+a~|8;!o9=mm8w$&lMVUw()Bzh1=nKR{n#P9Lh@<9Cn8AsQJ^&M|i<(aUD@JL(Jr$X)v1EYyN@+h6HV z)7i)d{A#hE)2ajWxbDM?oc^(|PvRO)89jlI2;7t%xD=3W)ugEbnvBKAGs z@DKT)v93!#Y^A$1?(ySdU!TSt+EtHjz#O3`{L6JKoisIBT35#fn_ISJ=rbRT`j#*gl!Rz>Mc@pGze4L-jhSv~ss2L=bPpJlDV5E}cP z=aIQMwPHQ?x!_zYGk~1z>+3k4qwm?Uh&s8ix2{T^TxTNxKcinG)JDHgc8L9CmFsGsOR`ZIp&je8kC z^^&x~crt=D3(N4>fBON)*vtAyj%Rj3?CVJw6PoChr+9vveuni+2OW8?a5sIA_q?TR z(dWZ1i~XEioq2wOo6)%WAlKdGx!rGBFS<0M+BvnAwy3B8exvqsnB z4V(1bGW1XCDz8vK(No{x`l)_6gzKj|AzzHsJofuktx5evzsAAyhrUCt=C7#3+&`s% z$jskQ)M?IAKVjcT=7ndLa{W}_D^2}GujfNpa>l-=?H%eTI$uGapQisx!1ELI8`G(u z=oo4g<@Hs@XEssn=j<%Y^OJRhL5%;pJm)xvQ0#lwAEthy_p+vlp6`ViPol?I#ofV} zoQnfKdVFSL9*pnr7&#u2>Bu%rt0UhbvyOa+oI3IyqGLkjI~4Zy|NkB8Fs??wL#J}V zaen<=aE`29ADkoeE(Y^Lmo34(P_GW#&Cj2_itVNsu${~6S6lLTXY{yC)SdJP6@z*6 zR2=F~z8>b-Yoq7I54PJD4yx#P{`^+(oktf9w%fE%Sp)iSzb+7b=L#c(aWZYEU|c#% z?Ye~TA5D{KwoeRR5Zf=bY;lIp}lN4J%XU)K?M(=jq^j^f~zY)rP@&+J|#CdY+D9 z+eXjRy9|`y`TmqQ>2uJl-k{G}x6ebJQ;)bxol{R_GL4?6i8uzL=V^y_!Fjr9NN}EJ zSxBFQ|MnuEA3aZ7uMW=BY-NJ;H2XT9bLjapzZmy9>g&uA(erda8##KOR{5JgXW!Fd zRdAlR>=T@)LymB~`JQ~+sB`Kv%mvZ&^ypUl9DM!iM4oe^znaB;j=BPU9mLew^ZGpX zZI->UZk8(?8mka%O|LEgw z_&cYJxsh=-UA$0;@@%ZP@&1(h<5Qe>dN5-(Q&{YKl6R!fL4QKleNIm(77DRjW8c$* zeet3$k(fRQ-G#BDhVGx5K4)Eqb!%hYwFPxfJ(%-_A07Ldov0PiP7~`y>~tbWtRwdh z_Sb9JutRi<|LAkjwF`$s<8_yI^f~J@{Gd;CDmKmneVlCYxgN)Wyjl-qV{X*@Igz*M zwWsNG(0?YR&Z$59h&rdPlYlyB)HAuyQ71W0om0o*_`j*Y?oFSw-n@tV9ChURzVSFF zBKs~m`!T8B{4NYRFGc{0ELgcIa_Jt8}GPCaWZnO{%m z+Sv@fl=*tD{)_>6u|Cq5I;UQ-hs>`lb>copJ&Se0Ha+P)nO{eq)p0;?XZs%4#rKl= z^*j##Uvv}p`?cu%*HY)ytI1#w_4L=MbH;tLzv5C)PN+Y+N1wAk&H?yRnH@c z=GIf5q0d3rV*eJ^gB#H2pvMghg(~W}P3UvhJ2KGcpsz6wH`2`+Oj_s`WTAHYJlmv; zPL+x^te%&OI;XzJn)f|jj`?Dw-oodP(?#mj=d3foM4y8$aFIS|U6ld(GhMSReGWPv zBvbDDkksZP_A`C7-Jez-zcsK|V+t6gKh))^UFw(Ch{xh|>SEW~w5 zy@`EsLYHA)N%=*+>=-pM{Uu+lhTfZz`C6wt!gWdA zn|_;?`Vi~W_PPwYsHdR=Makho{yLx$LqMqseS1woJ35` zvF~ZZNwGl3|BCC9IvywfYF#}6^R-UQ@y0L}`)^yMW4_j{8FM%tVqY(ng}+Op<8%Hp zyvM%2fb;I6zRt09MVD;NeM!2*LFQ|HX)t|>Iu#j`Lp1hta`SppeYZOG7JaiK^%k9< zxgdwWlazI@PD1UAWn=8;6kx}d)M3`k#Mju@8~jXPqOO{m`C9K^AJjnVa?D4^#*beO z)~A~Z%+axN()YnSE6jz(AK=s2+JKu}-J+JXBxe9tRnTK;G3zwO5F+f{$MmV0pYaZWl8_1O0;csf{1 zj?Bv6$@2A)Y>?=CI@Ao_^Wx@Uj(G2QupMsk@3Q)DyZ#nzhsVsh(J}DLa>06Y2In9V zBKAAns2XgCa(&6bzFwJZ5Zw+Fj&V)I*AH-jMYls^4u)tQbu05!bURdS8f=Fm)U~49 zAx@*9&Rlg}P-iZ|$;D|B`+agv4(iO0J`L*3&+&Uj*P#^_k&S)-)@EFn)IIidtweu5 zl>QB!i7dKY-&@IZZgu`~^xo*R-FP0j9>@oNucxxO*sW)AvatJNzvoOAo}BWr&a;|( zUUUKG_e;9&Tl5C&u_@_S)JMpccXU=39ntY~Oe7|>*{ML-6$@EC(4t8Jc z>&52MyQtq~;L4`&u`z=8v&-S5@QCH<0tfqT255A%cyvcP;UH41+ z81-p(L|a{WK7EXOUcGRrr{2SUVOWU$K7Vlz4%REFhm6o~GB1qPwNvmMGu@&KeT+I$ zBc5ZRFZ1P>>fN*XJ0|*U9Qqh_4JO}j^;-7V4!trr&oR&gIYAETFPm^3Q}<&d{H%XX z&vi_lgfMemNA8Kgqw^QyI;PItoIb`l?w4-#G3rRKdMaIz!6$=$ontkdPS+tE%BweX zP8HP4If;tvw>as_=mvzYmvq~_{2dd0J%&2GUR#R#p1ww&d0i(V(00&kD2#N|buLif z)4drV2I$DKJXE(jL>*oi-X6wn9sPE~|T2bHAao1Dd(+zJimg+3Y zsqg6>PgCF1b2-5F>5Hr{j_R|VIA?T1_WLD$b2N2$eV%{&m)=TdxUb94ppQ}CNK3ss zGKQw%|FbY=>S_eAv^p7~G_$_&2K8#a?q$|f`ZjB;!ur{ytQYib&ZF}B-z3zNb<+2# z@9AqCV-5A7YOELZ6wcW;xm-Up+laKX+zQa57VZERa4Px%obvPGJ z=pUG9&g&8h>0{J4YtzT5ALU@ZptDmD{zoS!H--s1k^QxkaU+q=$XK0H*XFuIdcEl; z>jmAC8d@HmKP~q$>F;}nLdA5&Zu~tw{aGh6p6;=T^@1)rf%};BE*74Rb-!Ia$596yBOnpxeE5Uj}f6D9Qb-72Z7j*m{LQI}mweNXS?Jva6D zEF$jdyezE#)9JI4W8**BceB!QeO7lVOCO^Szs7n&A7|drp=*Vy@9AdG@fVrK{U&4bYr0r*uIcMT)9GW>?{wrj2Kq7o?W1ScqQ0k} zJwqR(uEh8-TEEwy=a}i<$+)JkAF}A1tIM-EU94XkNaobPG2yP$s(51z&~eO;U}@SL8XELcaRA)`juN|Eb#?4sCnDm^(o`ubdsa}Mv=*B@Oa zH|h#aL!s=^_jeD6^65AJ;cwpQ+k~+aIxZoTGD7U< z$NMAbMfr!{v7@hN`;&WKbfwnxyyLJ_tn-{uAcJ6uCvnKO5ul4D-n3yB~#~AqWEA+hSV-z%)CSqSt|1&*rdf)(_d8ONx zBP;57SICNbImcl%=QrTGVQF8_Lr$xp_kYhbZ*}c<^bzS+m&l6x-~MDpoqh&cQKxu~ zzj>kiQ-Q!E(NzAvpYeO9*T2pV)~)fA2kX|_1%vCPQ%3~r*2YzX zQ5?BchWW6aGgm1%$VO&kA9Q7ldfGQ_|7%v1>gC0{a{;_ zdO@pUuK8 zzpu~d!wc&)3xj%czg_aC)x>}mqCWF6#Jf%^@4qRkwt5C?0t>( zRP;D3NdAu=|HU5#^{e?DGr9bn-8+MQQIV6hkgp#;8I0}EP7IEj??(mov2O|mpFgl~ zaDH9y6ny?+*5lEAU3zTr`4@f;>SG@j4bHE+9JkS9{xNx`y5FaH{-7>2G;Xlp|6)LX z&G*b16O8$DiwC_!$8K{!i0@g#7}!ha8p3^ZIupO|Al;Zr=Y1V!`+ulkrTFlXK2QFc zs?+j;93HXz8;J(SLmr^S`>#6~?!1(5rCcg`h6<^D27ReNRz# z;%@z3WuEb?+pztQ>-vf5h1O|$v98f~7y}uuW53UNcKQw7c1KVbnpA-6;J)6QwNgyX zllT9^4~@^YtIj1$CjB9RC@8eFvYzlpXuCn#UtE>niiOA3?W#E|@P4^a$!g zku`le-;uz=RF!mSA{Mh%*CpWgxiP_HWbeEw#n^aF3N?laf z-^evPeSxw1J^gMc?oHNZQgUxX)Qrhf^fMewv-D!V&wSm8?e>{I+Kp>=I;H`Cn@rcG z4z@XJ2C?sTwg+6Z(^oU_w+Zw|9IL1F@uQ*81zm_Q`Ma)OjC&LGiFiDlR2R(6vx)Sf zmf=ubwr^zKzx^ZUvfj$^oLY}(gRnf0eNReidXzz8y(>NUCg`-a$Z7f}zbvO`?0Yg0 zsEFdR-thtZPPf=bPSaTvk<)aJ)xp>mc@}jNkG+lEgE@32lO2bB>}NioA{e`x%?-wu zox_5$D{qouY{^(Pn7hYwewFca_GAy{)9S3PqGL;Bf+G&a{;UO02V+Ywj;rX{lAG6C z`JNMm)ed?d+o7v2%K;W0Te?u=jgBpO$^7h^*v~K4HRwToZgJ3G+LI5=vO8-ascy6>O6v3?|Xv>y`S!ek{tHqp#m4zeV?NTu#hXeonEUgZ;aT zgEOnIf6F?8VJi0L&R_%P*P}SWqn~;Gcrf1`A!kNE^K-_f=rObUW^l~>u{FqhnLiDV znYK*y(QWeCwO~Hl%fJ#nW>$_2uGd_>NB@A|r&Sl8ldON|cx$B3#A7VdH_4*ybW+Z> z==V>aJlH0Y`+B3_|IwLXn>@EW`2N$z2jBlA&i!Zo%-akU@%3faw#jrczC&95>(lgt z>T)@Q4EFiFVB2P>6lAcbrGpGsiM3vN|LqqXKUMWdUj;plr&%*L^!2s{gADfL7JAHl z{W0f#G=p6pA6(NPI4-!RKZG3-oqr1~3$9u3ImWXz{hWpKc$U7d)+e}Ty(U>W^r^4E z%*hy?a}Tq#R`_}g2F5S-5_WDhgC$}AZuj->oLtciR;p?+&z^iQ$Y9+V+oKt5AN%N6 z|LviFsX^%`O@nLJ^)>}_YhuR#aLkiq`>DtDnCTmwASw0T>l_2RC+l>Eo!E0>N4{V_ zz27>xX8l6B(EqMkuR24IneQ*gK~hQ2;lo+t#ePoY*+|hjv>J0t^q73Ead1w3l{z@5 zKH{2J^qh*zJQY1pZzd0p$z9unb7~utLiC*4(L6Y(9(D-Msr;O4mE2aZ_YBUdlurfY z@PQ6NuSg2=VRRh6L=K6L!!z>+*Zw-K4aVV7T!0{Q$Ns(rSzGnjaZgYy({0IVALxwz zxVEm#EeWpot^PhZXKTg}wojd0!S-pw$sXN4<7WojCn*C$bR6ruH`qQYIDn(uCkflO zgg0q8}SS-lEjWPw>=hCmi_c=2$_&)D+48BkNJi!=vzf+LOt5c7SexG;p2H&UG z!eCy=JT#a$>(vM{`GLQJdGi=^0f$iRwjDh=*k9?{fYEVa!NMSu=UNcVoA0Iz=FN=T zf=s@BV=!;tV!g?*|K#&IhNEM`m7+l=U%4o#$sB(iWb(cYfK&aqZJ8rx>3Gz#=IPyB zgj%9&v+Zo7eXmLA71!ml6u`s5?rTN-^o+j)-ugfVcD zu15a@Q%3Cjv$D+@3Syn@L2ymBcm?WgzCM?E{|8-vT5wJF6>6l%e7#zCuCwdIb9uI; zzWQcxP4*BU@^|!enAh0Uu|IbRb8hsSY%_i?CFR)Hdob@X^~X8^V?{ds->1~s^sL9^ zTU~+k{aJmD>wQIZK6X}Vy`246K}Y_MR&+d{O!#M7iTzn`aGXao#@~5@@v0^#Y;-)& zbT7!&x5?j1Qgn1mk(poIx)~uGT>>$K(Gi;%q{qjG{0+!cY;>P>6|Gse}bn;X>(; zs1PwK!%ePAus;!zq(v=Kq81f1E&7{+h_axlg)%0)r{wa`o==x7l zew@QQF!1tu`M!JaIp;m^Io}hLT1>dLLEgKo^w_*|KC-#U6t?*GR(YfN)q_sq~^@q8WMF8#a*@*#ah z`%rmO`nmUvdYH8=w#LTP;kRC!%))^K=Z57{KH{746j0;xPJb_IgovJeJQ!@fZ-x`@wK1E4?Xr@@6y^!e``PAUsmkDBi39S ze1j-_T|dxB9{X#^HPA>jw;}W!R2Ja`F}uO=z!7Pc>{n@n=3cFF?=;Ob{1(jT8Qvwa zrO`d7a2U761LDYQnM6{x%z5J7ZLy4C^f@nrf7}**Ii0^9K|^{ilj@NzF4C0PV$Xfb z8r>ER?5Eq}K5^u>n7Ari3?EZJIZKXqTTDJvKlwsYyc8#p)Ap?IPt;FdutNRh$w%U) z>$vW?$a3)FLjaooR@Bus-Ij~tA6t5f_Q0uoobnbXdCCH!3=YojxB<5 z_*?=n1Vd4=YldfoZyGKGXAM_??-~wiFmJdPTr`YSi9Iw-%8ETU9PIPl@J8@k!<)dP YhFihqd`rRrK9ziZo>kx~<{8HP2jqNh1ONa4 literal 0 HcmV?d00001 diff --git a/AVR Code/USB_BULK_TEST/Debug/src/tiny_dig.d b/AVR Code/USB_BULK_TEST/Debug/src/tiny_dig.d new file mode 100644 index 00000000..07144266 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/Debug/src/tiny_dig.d @@ -0,0 +1,206 @@ +src/tiny_dig.d src/tiny_dig.o: ../src/tiny_dig.c ../src/tiny_dig.h \ + ../src/asf.h ../src/ASF/xmega/drivers/cpu/ccp.h \ + ../src/ASF/xmega/utils/compiler.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\io.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\inttypes.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\iox32a4u.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\portpins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\common.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\version.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\xmega.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\fuse.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\lock.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\builtins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdlib.h \ + ../src/ASF/common/utils/parts.h \ + ../src/ASF/xmega/utils/bit_handling/clz_ctz.h \ + ../src/ASF/xmega/utils/preprocessor/preprocessor.h \ + ../src/ASF/xmega/utils/preprocessor/tpaste.h \ + ../src/ASF/xmega/utils/preprocessor/stringz.h \ + ../src/ASF/xmega/utils/preprocessor/mrepeat.h \ + ../src/ASF/xmega/utils/preprocessor/preprocessor.h \ + ../src/ASF/xmega/utils/progmem.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\pgmspace.h \ + ../src/ASF/common/utils/interrupt.h \ + ../src/ASF/common/utils/interrupt/interrupt_avr8.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\interrupt.h \ + ../src/ASF/xmega/drivers/cpu/xmega_reset_cause.h \ + ../src/ASF/xmega/drivers/cpu/ccp.h \ + ../src/ASF/common/boards/user_board/user_board.h \ + ../src/config/conf_board.h ../src/ASF/common/boards/board.h \ + ../src/ASF/common/services/ioport/ioport.h \ + ../src/ASF/common/services/ioport/xmega/ioport.h \ + ../src/ASF/xmega/drivers/nvm/nvm.h \ + ../src/ASF/xmega/drivers/sleep/sleep.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sleep.h \ + ../src/ASF/common/services/sleepmgr/sleepmgr.h \ + ../src/ASF/common/services/sleepmgr/xmega/sleepmgr.h \ + ../src/config/conf_sleepmgr.h \ + ../src/ASF/common/services/sleepmgr/xmega/sleepmgr.h \ + ../src/ASF/common/services/clock/sysclk.h ../src/config/conf_clock.h \ + ../src/ASF/common/services/clock/xmega/sysclk.h \ + ../src/ASF/common/services/clock/osc.h \ + ../src/ASF/common/services/clock/xmega/osc.h \ + ../src/ASF/common/services/clock/pll.h \ + ../src/ASF/common/services/clock/xmega/pll.h \ + ../src/ASF/common/services/usb/udc/udc.h ../src/config/conf_usb.h \ + ../src/ASF/common/services/usb/class/vendor/device/udi_vendor_conf.h \ + ../src/ASF/common/services/usb/class/vendor/device/udi_vendor.h \ + ../src/ASF/common/services/usb/usb_protocol.h \ + ../src/ASF/common/services/usb/usb_atmel.h \ + ../src/ASF/common/services/usb/class/vendor/usb_protocol_vendor.h \ + ../src/ASF/common/services/usb/udc/udd.h \ + ../src/ASF/common/services/usb/udc/udc_desc.h \ + ../src/ASF/common/services/usb/udc/udi.h \ + ../src/ASF/common/services/usb/udc/udc_desc.h \ + ../src/ASF/common/services/usb/udc/udi.h ../src/ui.h ../src/main.h \ + ../src/ASF/common/services/usb/udc/udd.h \ + ../src/ASF/common/services/usb/class/vendor/device/udi_vendor.h \ + ../src/ASF/xmega/utils/status_codes.h ../src/globals.h + +../src/tiny_dig.h: + +../src/asf.h: + +../src/ASF/xmega/drivers/cpu/ccp.h: + +../src/ASF/xmega/utils/compiler.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\io.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\inttypes.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\iox32a4u.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\portpins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\common.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\version.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\xmega.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\fuse.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\lock.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\builtins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdlib.h: + +../src/ASF/common/utils/parts.h: + +../src/ASF/xmega/utils/bit_handling/clz_ctz.h: + +../src/ASF/xmega/utils/preprocessor/preprocessor.h: + +../src/ASF/xmega/utils/preprocessor/tpaste.h: + +../src/ASF/xmega/utils/preprocessor/stringz.h: + +../src/ASF/xmega/utils/preprocessor/mrepeat.h: + +../src/ASF/xmega/utils/preprocessor/preprocessor.h: + +../src/ASF/xmega/utils/progmem.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\pgmspace.h: + +../src/ASF/common/utils/interrupt.h: + +../src/ASF/common/utils/interrupt/interrupt_avr8.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\interrupt.h: + +../src/ASF/xmega/drivers/cpu/xmega_reset_cause.h: + +../src/ASF/xmega/drivers/cpu/ccp.h: + +../src/ASF/common/boards/user_board/user_board.h: + +../src/config/conf_board.h: + +../src/ASF/common/boards/board.h: + +../src/ASF/common/services/ioport/ioport.h: + +../src/ASF/common/services/ioport/xmega/ioport.h: + +../src/ASF/xmega/drivers/nvm/nvm.h: + +../src/ASF/xmega/drivers/sleep/sleep.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sleep.h: + +../src/ASF/common/services/sleepmgr/sleepmgr.h: + +../src/ASF/common/services/sleepmgr/xmega/sleepmgr.h: + +../src/config/conf_sleepmgr.h: + +../src/ASF/common/services/sleepmgr/xmega/sleepmgr.h: + +../src/ASF/common/services/clock/sysclk.h: + +../src/config/conf_clock.h: + +../src/ASF/common/services/clock/xmega/sysclk.h: + +../src/ASF/common/services/clock/osc.h: + +../src/ASF/common/services/clock/xmega/osc.h: + +../src/ASF/common/services/clock/pll.h: + +../src/ASF/common/services/clock/xmega/pll.h: + +../src/ASF/common/services/usb/udc/udc.h: + +../src/config/conf_usb.h: + +../src/ASF/common/services/usb/class/vendor/device/udi_vendor_conf.h: + +../src/ASF/common/services/usb/class/vendor/device/udi_vendor.h: + +../src/ASF/common/services/usb/usb_protocol.h: + +../src/ASF/common/services/usb/usb_atmel.h: + +../src/ASF/common/services/usb/class/vendor/usb_protocol_vendor.h: + +../src/ASF/common/services/usb/udc/udd.h: + +../src/ASF/common/services/usb/udc/udc_desc.h: + +../src/ASF/common/services/usb/udc/udi.h: + +../src/ASF/common/services/usb/udc/udc_desc.h: + +../src/ASF/common/services/usb/udc/udi.h: + +../src/ui.h: + +../src/main.h: + +../src/ASF/common/services/usb/udc/udd.h: + +../src/ASF/common/services/usb/class/vendor/device/udi_vendor.h: + +../src/ASF/xmega/utils/status_codes.h: + +../src/globals.h: diff --git a/AVR Code/USB_BULK_TEST/Debug/src/tiny_dig.o b/AVR Code/USB_BULK_TEST/Debug/src/tiny_dig.o new file mode 100644 index 0000000000000000000000000000000000000000..36009b408720597c14fc4a641b07da68e11f43a4 GIT binary patch literal 274008 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

    i><1 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 literal 0 HcmV?d00001 diff --git a/AVR Code/USB_BULK_TEST/Debug/src/tiny_dma.d b/AVR Code/USB_BULK_TEST/Debug/src/tiny_dma.d new file mode 100644 index 00000000..da0ed9e3 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/Debug/src/tiny_dma.d @@ -0,0 +1,217 @@ +src/tiny_dma.d src/tiny_dma.o: ../src/tiny_dma.c ../src/tiny_dma.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdio.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\inttypes.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdarg.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h \ + ../src/asf.h ../src/ASF/xmega/drivers/cpu/ccp.h \ + ../src/ASF/xmega/utils/compiler.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\io.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\iox32a4u.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\portpins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\common.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\version.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\xmega.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\fuse.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\lock.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\builtins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdlib.h \ + ../src/ASF/common/utils/parts.h \ + ../src/ASF/xmega/utils/bit_handling/clz_ctz.h \ + ../src/ASF/xmega/utils/preprocessor/preprocessor.h \ + ../src/ASF/xmega/utils/preprocessor/tpaste.h \ + ../src/ASF/xmega/utils/preprocessor/stringz.h \ + ../src/ASF/xmega/utils/preprocessor/mrepeat.h \ + ../src/ASF/xmega/utils/preprocessor/preprocessor.h \ + ../src/ASF/xmega/utils/progmem.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\pgmspace.h \ + ../src/ASF/common/utils/interrupt.h \ + ../src/ASF/common/utils/interrupt/interrupt_avr8.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\interrupt.h \ + ../src/ASF/xmega/drivers/cpu/xmega_reset_cause.h \ + ../src/ASF/xmega/drivers/cpu/ccp.h \ + ../src/ASF/common/boards/user_board/user_board.h \ + ../src/config/conf_board.h ../src/ASF/common/boards/board.h \ + ../src/ASF/common/services/ioport/ioport.h \ + ../src/ASF/common/services/ioport/xmega/ioport.h \ + ../src/ASF/xmega/drivers/nvm/nvm.h \ + ../src/ASF/xmega/drivers/sleep/sleep.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sleep.h \ + ../src/ASF/common/services/sleepmgr/sleepmgr.h \ + ../src/ASF/common/services/sleepmgr/xmega/sleepmgr.h \ + ../src/config/conf_sleepmgr.h \ + ../src/ASF/common/services/sleepmgr/xmega/sleepmgr.h \ + ../src/ASF/common/services/clock/sysclk.h ../src/config/conf_clock.h \ + ../src/ASF/common/services/clock/xmega/sysclk.h \ + ../src/ASF/common/services/clock/osc.h \ + ../src/ASF/common/services/clock/xmega/osc.h \ + ../src/ASF/common/services/clock/pll.h \ + ../src/ASF/common/services/clock/xmega/pll.h \ + ../src/ASF/common/services/usb/udc/udc.h ../src/config/conf_usb.h \ + ../src/ASF/common/services/usb/class/vendor/device/udi_vendor_conf.h \ + ../src/ASF/common/services/usb/class/vendor/device/udi_vendor.h \ + ../src/ASF/common/services/usb/usb_protocol.h \ + ../src/ASF/common/services/usb/usb_atmel.h \ + ../src/ASF/common/services/usb/class/vendor/usb_protocol_vendor.h \ + ../src/ASF/common/services/usb/udc/udd.h \ + ../src/ASF/common/services/usb/udc/udc_desc.h \ + ../src/ASF/common/services/usb/udc/udi.h \ + ../src/ASF/common/services/usb/udc/udc_desc.h \ + ../src/ASF/common/services/usb/udc/udi.h ../src/ui.h ../src/main.h \ + ../src/ASF/common/services/usb/udc/udd.h \ + ../src/ASF/common/services/usb/class/vendor/device/udi_vendor.h \ + ../src/ASF/xmega/utils/status_codes.h ../src/globals.h ../src/tiny_adc.h \ + ../src/tiny_uart.h + +../src/tiny_dma.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdio.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\inttypes.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdarg.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h: + +../src/asf.h: + +../src/ASF/xmega/drivers/cpu/ccp.h: + +../src/ASF/xmega/utils/compiler.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\io.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\iox32a4u.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\portpins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\common.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\version.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\xmega.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\fuse.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\lock.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\builtins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdlib.h: + +../src/ASF/common/utils/parts.h: + +../src/ASF/xmega/utils/bit_handling/clz_ctz.h: + +../src/ASF/xmega/utils/preprocessor/preprocessor.h: + +../src/ASF/xmega/utils/preprocessor/tpaste.h: + +../src/ASF/xmega/utils/preprocessor/stringz.h: + +../src/ASF/xmega/utils/preprocessor/mrepeat.h: + +../src/ASF/xmega/utils/preprocessor/preprocessor.h: + +../src/ASF/xmega/utils/progmem.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\pgmspace.h: + +../src/ASF/common/utils/interrupt.h: + +../src/ASF/common/utils/interrupt/interrupt_avr8.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\interrupt.h: + +../src/ASF/xmega/drivers/cpu/xmega_reset_cause.h: + +../src/ASF/xmega/drivers/cpu/ccp.h: + +../src/ASF/common/boards/user_board/user_board.h: + +../src/config/conf_board.h: + +../src/ASF/common/boards/board.h: + +../src/ASF/common/services/ioport/ioport.h: + +../src/ASF/common/services/ioport/xmega/ioport.h: + +../src/ASF/xmega/drivers/nvm/nvm.h: + +../src/ASF/xmega/drivers/sleep/sleep.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sleep.h: + +../src/ASF/common/services/sleepmgr/sleepmgr.h: + +../src/ASF/common/services/sleepmgr/xmega/sleepmgr.h: + +../src/config/conf_sleepmgr.h: + +../src/ASF/common/services/sleepmgr/xmega/sleepmgr.h: + +../src/ASF/common/services/clock/sysclk.h: + +../src/config/conf_clock.h: + +../src/ASF/common/services/clock/xmega/sysclk.h: + +../src/ASF/common/services/clock/osc.h: + +../src/ASF/common/services/clock/xmega/osc.h: + +../src/ASF/common/services/clock/pll.h: + +../src/ASF/common/services/clock/xmega/pll.h: + +../src/ASF/common/services/usb/udc/udc.h: + +../src/config/conf_usb.h: + +../src/ASF/common/services/usb/class/vendor/device/udi_vendor_conf.h: + +../src/ASF/common/services/usb/class/vendor/device/udi_vendor.h: + +../src/ASF/common/services/usb/usb_protocol.h: + +../src/ASF/common/services/usb/usb_atmel.h: + +../src/ASF/common/services/usb/class/vendor/usb_protocol_vendor.h: + +../src/ASF/common/services/usb/udc/udd.h: + +../src/ASF/common/services/usb/udc/udc_desc.h: + +../src/ASF/common/services/usb/udc/udi.h: + +../src/ASF/common/services/usb/udc/udc_desc.h: + +../src/ASF/common/services/usb/udc/udi.h: + +../src/ui.h: + +../src/main.h: + +../src/ASF/common/services/usb/udc/udd.h: + +../src/ASF/common/services/usb/class/vendor/device/udi_vendor.h: + +../src/ASF/xmega/utils/status_codes.h: + +../src/globals.h: + +../src/tiny_adc.h: + +../src/tiny_uart.h: diff --git a/AVR Code/USB_BULK_TEST/Debug/src/tiny_dma.o b/AVR Code/USB_BULK_TEST/Debug/src/tiny_dma.o new file mode 100644 index 0000000000000000000000000000000000000000..e572eb4e4cd27c245d7f27ca16243bbf45fbec8a GIT binary patch literal 305916 zcmeF)2Ygi5o#^pVBM_HhJ8^n;0!|_&E;Eu4!gdmmMk7!xAw|W;j(2AT$b^Iz5RQ}0 zzKC8#7ovAjCA#QE^xk_1Aw=)J!~37}J2RRQ0y i;P%&&T(B&z(EBoO}8`BmdQv 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

    %!PTd02aa$D2Ao543@(RSP83OHLQWPunyM4 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�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 z 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 literal 0 HcmV?d00001 diff --git a/AVR Code/USB_BULK_TEST/Debug/src/tiny_timercounter.d b/AVR Code/USB_BULK_TEST/Debug/src/tiny_timercounter.d new file mode 100644 index 00000000..a91e5c93 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/Debug/src/tiny_timercounter.d @@ -0,0 +1,2 @@ +src/tiny_timercounter.d src/tiny_timercounter.o: \ + ../src/tiny_timercounter.c diff --git a/AVR Code/USB_BULK_TEST/Debug/src/tiny_uart.d b/AVR Code/USB_BULK_TEST/Debug/src/tiny_uart.d new file mode 100644 index 00000000..b4c4f273 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/Debug/src/tiny_uart.d @@ -0,0 +1,213 @@ +src/tiny_uart.d src/tiny_uart.o: ../src/tiny_uart.c ../src/tiny_uart.h \ + ../src/asf.h ../src/ASF/xmega/drivers/cpu/ccp.h \ + ../src/ASF/xmega/utils/compiler.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\io.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\inttypes.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\iox32a4u.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\portpins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\common.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\version.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\xmega.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\fuse.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\lock.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\builtins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdlib.h \ + ../src/ASF/common/utils/parts.h \ + ../src/ASF/xmega/utils/bit_handling/clz_ctz.h \ + ../src/ASF/xmega/utils/preprocessor/preprocessor.h \ + ../src/ASF/xmega/utils/preprocessor/tpaste.h \ + ../src/ASF/xmega/utils/preprocessor/stringz.h \ + ../src/ASF/xmega/utils/preprocessor/mrepeat.h \ + ../src/ASF/xmega/utils/preprocessor/preprocessor.h \ + ../src/ASF/xmega/utils/progmem.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\pgmspace.h \ + ../src/ASF/common/utils/interrupt.h \ + ../src/ASF/common/utils/interrupt/interrupt_avr8.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\interrupt.h \ + ../src/ASF/xmega/drivers/cpu/xmega_reset_cause.h \ + ../src/ASF/xmega/drivers/cpu/ccp.h \ + ../src/ASF/common/boards/user_board/user_board.h \ + ../src/config/conf_board.h ../src/ASF/common/boards/board.h \ + ../src/ASF/common/services/ioport/ioport.h \ + ../src/ASF/common/services/ioport/xmega/ioport.h \ + ../src/ASF/xmega/drivers/nvm/nvm.h \ + ../src/ASF/xmega/drivers/sleep/sleep.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sleep.h \ + ../src/ASF/common/services/sleepmgr/sleepmgr.h \ + ../src/ASF/common/services/sleepmgr/xmega/sleepmgr.h \ + ../src/config/conf_sleepmgr.h \ + ../src/ASF/common/services/sleepmgr/xmega/sleepmgr.h \ + ../src/ASF/common/services/clock/sysclk.h ../src/config/conf_clock.h \ + ../src/ASF/common/services/clock/xmega/sysclk.h \ + ../src/ASF/common/services/clock/osc.h \ + ../src/ASF/common/services/clock/xmega/osc.h \ + ../src/ASF/common/services/clock/pll.h \ + ../src/ASF/common/services/clock/xmega/pll.h \ + ../src/ASF/common/services/usb/udc/udc.h ../src/config/conf_usb.h \ + ../src/ASF/common/services/usb/class/vendor/device/udi_vendor_conf.h \ + ../src/ASF/common/services/usb/class/vendor/device/udi_vendor.h \ + ../src/ASF/common/services/usb/usb_protocol.h \ + ../src/ASF/common/services/usb/usb_atmel.h \ + ../src/ASF/common/services/usb/class/vendor/usb_protocol_vendor.h \ + ../src/ASF/common/services/usb/udc/udd.h \ + ../src/ASF/common/services/usb/udc/udc_desc.h \ + ../src/ASF/common/services/usb/udc/udi.h \ + ../src/ASF/common/services/usb/udc/udc_desc.h \ + ../src/ASF/common/services/usb/udc/udi.h ../src/ui.h ../src/main.h \ + ../src/ASF/common/services/usb/udc/udd.h \ + ../src/ASF/common/services/usb/class/vendor/device/udi_vendor.h \ + ../src/ASF/xmega/utils/status_codes.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdio.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdarg.h \ + ../src/globals.h + +../src/tiny_uart.h: + +../src/asf.h: + +../src/ASF/xmega/drivers/cpu/ccp.h: + +../src/ASF/xmega/utils/compiler.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\io.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\inttypes.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\iox32a4u.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\portpins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\common.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\version.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\xmega.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\fuse.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\lock.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\builtins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdlib.h: + +../src/ASF/common/utils/parts.h: + +../src/ASF/xmega/utils/bit_handling/clz_ctz.h: + +../src/ASF/xmega/utils/preprocessor/preprocessor.h: + +../src/ASF/xmega/utils/preprocessor/tpaste.h: + +../src/ASF/xmega/utils/preprocessor/stringz.h: + +../src/ASF/xmega/utils/preprocessor/mrepeat.h: + +../src/ASF/xmega/utils/preprocessor/preprocessor.h: + +../src/ASF/xmega/utils/progmem.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\pgmspace.h: + +../src/ASF/common/utils/interrupt.h: + +../src/ASF/common/utils/interrupt/interrupt_avr8.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\interrupt.h: + +../src/ASF/xmega/drivers/cpu/xmega_reset_cause.h: + +../src/ASF/xmega/drivers/cpu/ccp.h: + +../src/ASF/common/boards/user_board/user_board.h: + +../src/config/conf_board.h: + +../src/ASF/common/boards/board.h: + +../src/ASF/common/services/ioport/ioport.h: + +../src/ASF/common/services/ioport/xmega/ioport.h: + +../src/ASF/xmega/drivers/nvm/nvm.h: + +../src/ASF/xmega/drivers/sleep/sleep.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sleep.h: + +../src/ASF/common/services/sleepmgr/sleepmgr.h: + +../src/ASF/common/services/sleepmgr/xmega/sleepmgr.h: + +../src/config/conf_sleepmgr.h: + +../src/ASF/common/services/sleepmgr/xmega/sleepmgr.h: + +../src/ASF/common/services/clock/sysclk.h: + +../src/config/conf_clock.h: + +../src/ASF/common/services/clock/xmega/sysclk.h: + +../src/ASF/common/services/clock/osc.h: + +../src/ASF/common/services/clock/xmega/osc.h: + +../src/ASF/common/services/clock/pll.h: + +../src/ASF/common/services/clock/xmega/pll.h: + +../src/ASF/common/services/usb/udc/udc.h: + +../src/config/conf_usb.h: + +../src/ASF/common/services/usb/class/vendor/device/udi_vendor_conf.h: + +../src/ASF/common/services/usb/class/vendor/device/udi_vendor.h: + +../src/ASF/common/services/usb/usb_protocol.h: + +../src/ASF/common/services/usb/usb_atmel.h: + +../src/ASF/common/services/usb/class/vendor/usb_protocol_vendor.h: + +../src/ASF/common/services/usb/udc/udd.h: + +../src/ASF/common/services/usb/udc/udc_desc.h: + +../src/ASF/common/services/usb/udc/udi.h: + +../src/ASF/common/services/usb/udc/udc_desc.h: + +../src/ASF/common/services/usb/udc/udi.h: + +../src/ui.h: + +../src/main.h: + +../src/ASF/common/services/usb/udc/udd.h: + +../src/ASF/common/services/usb/class/vendor/device/udi_vendor.h: + +../src/ASF/xmega/utils/status_codes.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdio.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdarg.h: + +../src/globals.h: diff --git a/AVR Code/USB_BULK_TEST/Debug/src/tiny_uart.o b/AVR Code/USB_BULK_TEST/Debug/src/tiny_uart.o new file mode 100644 index 0000000000000000000000000000000000000000..ff188672ad5ecf97d0d39660d068f5bdeda3b5f1 GIT binary patch literal 278944 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 literal 0 HcmV?d00001 diff --git a/AVR Code/USB_BULK_TEST/Release/Makefile b/AVR Code/USB_BULK_TEST/Release/Makefile new file mode 100644 index 00000000..fc53567b --- /dev/null +++ b/AVR Code/USB_BULK_TEST/Release/Makefile @@ -0,0 +1,375 @@ +################################################################################ +# Automatically-generated file. Do not edit! +################################################################################ + +SHELL := cmd.exe +RM := rm -rf + +USER_OBJS := + +LIBS := +PROJ := + +O_SRCS := +C_SRCS := +S_SRCS := +S_UPPER_SRCS := +OBJ_SRCS := +ASM_SRCS := +PREPROCESSING_SRCS := +OBJS := +OBJS_AS_ARGS := +C_DEPS := +C_DEPS_AS_ARGS := +EXECUTABLES := +OUTPUT_FILE_PATH := +OUTPUT_FILE_PATH_AS_ARGS := +AVR_APP_PATH :=$$$AVR_APP_PATH$$$ +QUOTE := " +ADDITIONAL_DEPENDENCIES:= +OUTPUT_FILE_DEP:= +LIB_DEP:= +LINKER_SCRIPT_DEP:= + +# Every subdirectory with source files must be described here +SUBDIRS := \ +../src/ \ +../src/ASF/ \ +../src/ASF/common/ \ +../src/ASF/common/boards/ \ +../src/ASF/common/boards/user_board/ \ +../src/ASF/common/services/ \ +../src/ASF/common/services/clock/ \ +../src/ASF/common/services/clock/xmega/ \ +../src/ASF/common/services/ioport/ \ +../src/ASF/common/services/ioport/xmega/ \ +../src/ASF/common/services/sleepmgr/ \ +../src/ASF/common/services/sleepmgr/xmega/ \ +../src/ASF/common/services/usb/ \ +../src/ASF/common/services/usb/class/ \ +../src/ASF/common/services/usb/class/vendor/ \ +../src/ASF/common/services/usb/class/vendor/device/ \ +../src/ASF/common/services/usb/class/vendor/device/example/ \ +../src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ \ +../src/ASF/common/services/usb/udc/ \ +../src/ASF/common/utils/ \ +../src/ASF/common/utils/interrupt/ \ +../src/ASF/common/utils/make/ \ +../src/ASF/xmega/ \ +../src/ASF/xmega/drivers/ \ +../src/ASF/xmega/drivers/cpu/ \ +../src/ASF/xmega/drivers/nvm/ \ +../src/ASF/xmega/drivers/sleep/ \ +../src/ASF/xmega/drivers/usb/ \ +../src/ASF/xmega/utils/ \ +../src/ASF/xmega/utils/assembler/ \ +../src/ASF/xmega/utils/bit_handling/ \ +../src/ASF/xmega/utils/preprocessor/ \ +../src/config/ + + +# Add inputs and outputs from these tool invocations to the build variables +C_SRCS += \ +../src/tiny_dig.c \ +../src/ASF/common/boards/user_board/init.c \ +../src/ASF/common/services/ioport/xmega/ioport_compat.c \ +../src/main.c \ +../src/tiny_adc.c \ +../src/tiny_dac.c \ +../src/tiny_dma.c \ +../src/tiny_timer.c \ +../src/tiny_uart.c \ +../src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.c \ +../src/ASF/common/services/clock/xmega/sysclk.c \ +../src/ASF/common/services/sleepmgr/xmega/sleepmgr.c \ +../src/ASF/common/services/usb/class/vendor/device/udi_vendor.c \ +../src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.c \ +../src/ASF/common/services/usb/udc/udc.c \ +../src/ASF/xmega/drivers/nvm/nvm.c \ +../src/ASF/xmega/drivers/usb/usb_device.c + + +PREPROCESSING_SRCS += \ +../src/ASF/xmega/drivers/cpu/ccp.s \ +../src/ASF/xmega/drivers/nvm/nvm_asm.s + + +ASM_SRCS += + + +OBJS += \ +src/tiny_dig.o \ +src/ASF/common/boards/user_board/init.o \ +src/ASF/common/services/ioport/xmega/ioport_compat.o \ +src/main.o \ +src/tiny_adc.o \ +src/tiny_dac.o \ +src/tiny_dma.o \ +src/tiny_timer.o \ +src/tiny_uart.o \ +src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o \ +src/ASF/common/services/clock/xmega/sysclk.o \ +src/ASF/common/services/sleepmgr/xmega/sleepmgr.o \ +src/ASF/common/services/usb/class/vendor/device/udi_vendor.o \ +src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o \ +src/ASF/common/services/usb/udc/udc.o \ +src/ASF/xmega/drivers/cpu/ccp.o \ +src/ASF/xmega/drivers/nvm/nvm.o \ +src/ASF/xmega/drivers/nvm/nvm_asm.o \ +src/ASF/xmega/drivers/usb/usb_device.o + +OBJS_AS_ARGS += \ +src/tiny_dig.o \ +src/ASF/common/boards/user_board/init.o \ +src/ASF/common/services/ioport/xmega/ioport_compat.o \ +src/main.o \ +src/tiny_adc.o \ +src/tiny_dac.o \ +src/tiny_dma.o \ +src/tiny_timer.o \ +src/tiny_uart.o \ +src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o \ +src/ASF/common/services/clock/xmega/sysclk.o \ +src/ASF/common/services/sleepmgr/xmega/sleepmgr.o \ +src/ASF/common/services/usb/class/vendor/device/udi_vendor.o \ +src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o \ +src/ASF/common/services/usb/udc/udc.o \ +src/ASF/xmega/drivers/cpu/ccp.o \ +src/ASF/xmega/drivers/nvm/nvm.o \ +src/ASF/xmega/drivers/nvm/nvm_asm.o \ +src/ASF/xmega/drivers/usb/usb_device.o + +C_DEPS += \ +src/tiny_dig.d \ +src/ASF/common/boards/user_board/init.d \ +src/ASF/common/services/ioport/xmega/ioport_compat.d \ +src/main.d \ +src/tiny_adc.d \ +src/tiny_dac.d \ +src/tiny_dma.d \ +src/tiny_timer.d \ +src/tiny_uart.d \ +src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.d \ +src/ASF/common/services/clock/xmega/sysclk.d \ +src/ASF/common/services/sleepmgr/xmega/sleepmgr.d \ +src/ASF/common/services/usb/class/vendor/device/udi_vendor.d \ +src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.d \ +src/ASF/common/services/usb/udc/udc.d \ +src/ASF/xmega/drivers/cpu/ccp.d \ +src/ASF/xmega/drivers/nvm/nvm.d \ +src/ASF/xmega/drivers/nvm/nvm_asm.d \ +src/ASF/xmega/drivers/usb/usb_device.d + +C_DEPS_AS_ARGS += \ +src/tiny_dig.d \ +src/ASF/common/boards/user_board/init.d \ +src/ASF/common/services/ioport/xmega/ioport_compat.d \ +src/main.d \ +src/tiny_adc.d \ +src/tiny_dac.d \ +src/tiny_dma.d \ +src/tiny_timer.d \ +src/tiny_uart.d \ +src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.d \ +src/ASF/common/services/clock/xmega/sysclk.d \ +src/ASF/common/services/sleepmgr/xmega/sleepmgr.d \ +src/ASF/common/services/usb/class/vendor/device/udi_vendor.d \ +src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.d \ +src/ASF/common/services/usb/udc/udc.d \ +src/ASF/xmega/drivers/cpu/ccp.d \ +src/ASF/xmega/drivers/nvm/nvm.d \ +src/ASF/xmega/drivers/nvm/nvm_asm.d \ +src/ASF/xmega/drivers/usb/usb_device.d + +OUTPUT_FILE_PATH +=USB_BULK_TEST.elf + +OUTPUT_FILE_PATH_AS_ARGS +=USB_BULK_TEST.elf + +ADDITIONAL_DEPENDENCIES:= + +OUTPUT_FILE_DEP:= ./makedep.mk + +LIB_DEP+= + +LINKER_SCRIPT_DEP+= + + +# AVR32/GNU C Compiler + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +src/%.o: ../src/%.c + @echo Building file: $< + @echo Invoking: AVR/GNU C Compiler : 4.8.1 + $(QUOTE)C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1061\avr8-gnu-toolchain\bin\avr-gcc.exe$(QUOTE) -x c -DNDEBUG -DBOARD=USER_BOARD -I"../common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained" -I"../common/services/usb/class/vendor/device/example" -I"../src/ASF/common/services/usb/udc" -I"../src/ASF/xmega/drivers/nvm" -I"../src/ASF/common/services/sleepmgr" -I"../src/ASF/common/services/clock" -I"../src/ASF/xmega/drivers/sleep" -I"../src/ASF/xmega/drivers/usb" -I"../src/ASF/xmega/drivers/cpu" -I"../src/ASF/common/services/usb/class/vendor" -I"../src/ASF/common/services/usb/class/vendor/device" -I"../src/ASF/common/services/usb" -I"../common/applications/user_application/user_board/config" -I"../src/ASF/xmega/utils" -I"../src/config" -I"../src/ASF/common/boards" -I"../src/ASF/xmega/utils/preprocessor" -I"../src/ASF/common/utils" -I"../src" -I"../src/ASF/common/boards/user_board" -I"../src/ASF/common/services/ioport" -Os -fdata-sections -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -mrelax -Wall -mmcu=atxmega32a4u -c -std=gnu99 -fno-strict-aliasing -Wstrict-prototypes -Wmissing-prototypes -Werror-implicit-function-declaration -Wpointer-arith -mrelax -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -o "$@" "$<" + @echo Finished building: $< + + +src/ASF/common/boards/user_board/%.o: ../src/ASF/common/boards/user_board/%.c + @echo Building file: $< + @echo Invoking: AVR/GNU C Compiler : 4.8.1 + $(QUOTE)C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1061\avr8-gnu-toolchain\bin\avr-gcc.exe$(QUOTE) -x c -DNDEBUG -DBOARD=USER_BOARD -I"../common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained" -I"../common/services/usb/class/vendor/device/example" -I"../src/ASF/common/services/usb/udc" -I"../src/ASF/xmega/drivers/nvm" -I"../src/ASF/common/services/sleepmgr" -I"../src/ASF/common/services/clock" -I"../src/ASF/xmega/drivers/sleep" -I"../src/ASF/xmega/drivers/usb" -I"../src/ASF/xmega/drivers/cpu" -I"../src/ASF/common/services/usb/class/vendor" -I"../src/ASF/common/services/usb/class/vendor/device" -I"../src/ASF/common/services/usb" -I"../common/applications/user_application/user_board/config" -I"../src/ASF/xmega/utils" -I"../src/config" -I"../src/ASF/common/boards" -I"../src/ASF/xmega/utils/preprocessor" -I"../src/ASF/common/utils" -I"../src" -I"../src/ASF/common/boards/user_board" -I"../src/ASF/common/services/ioport" -Os -fdata-sections -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -mrelax -Wall -mmcu=atxmega32a4u -c -std=gnu99 -fno-strict-aliasing -Wstrict-prototypes -Wmissing-prototypes -Werror-implicit-function-declaration -Wpointer-arith -mrelax -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -o "$@" "$<" + @echo Finished building: $< + + +src/ASF/common/services/ioport/xmega/%.o: ../src/ASF/common/services/ioport/xmega/%.c + @echo Building file: $< + @echo Invoking: AVR/GNU C Compiler : 4.8.1 + $(QUOTE)C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1061\avr8-gnu-toolchain\bin\avr-gcc.exe$(QUOTE) -x c -DNDEBUG -DBOARD=USER_BOARD -I"../common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained" -I"../common/services/usb/class/vendor/device/example" -I"../src/ASF/common/services/usb/udc" -I"../src/ASF/xmega/drivers/nvm" -I"../src/ASF/common/services/sleepmgr" -I"../src/ASF/common/services/clock" -I"../src/ASF/xmega/drivers/sleep" -I"../src/ASF/xmega/drivers/usb" -I"../src/ASF/xmega/drivers/cpu" -I"../src/ASF/common/services/usb/class/vendor" -I"../src/ASF/common/services/usb/class/vendor/device" -I"../src/ASF/common/services/usb" -I"../common/applications/user_application/user_board/config" -I"../src/ASF/xmega/utils" -I"../src/config" -I"../src/ASF/common/boards" -I"../src/ASF/xmega/utils/preprocessor" -I"../src/ASF/common/utils" -I"../src" -I"../src/ASF/common/boards/user_board" -I"../src/ASF/common/services/ioport" -Os -fdata-sections -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -mrelax -Wall -mmcu=atxmega32a4u -c -std=gnu99 -fno-strict-aliasing -Wstrict-prototypes -Wmissing-prototypes -Werror-implicit-function-declaration -Wpointer-arith -mrelax -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -o "$@" "$<" + @echo Finished building: $< + + +src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/%.o: ../src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/%.c + @echo Building file: $< + @echo Invoking: AVR/GNU C Compiler : 4.8.1 + $(QUOTE)C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1061\avr8-gnu-toolchain\bin\avr-gcc.exe$(QUOTE) -x c -DNDEBUG -DBOARD=USER_BOARD -I"../common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained" -I"../common/services/usb/class/vendor/device/example" -I"../src/ASF/common/services/usb/udc" -I"../src/ASF/xmega/drivers/nvm" -I"../src/ASF/common/services/sleepmgr" -I"../src/ASF/common/services/clock" -I"../src/ASF/xmega/drivers/sleep" -I"../src/ASF/xmega/drivers/usb" -I"../src/ASF/xmega/drivers/cpu" -I"../src/ASF/common/services/usb/class/vendor" -I"../src/ASF/common/services/usb/class/vendor/device" -I"../src/ASF/common/services/usb" -I"../common/applications/user_application/user_board/config" -I"../src/ASF/xmega/utils" -I"../src/config" -I"../src/ASF/common/boards" -I"../src/ASF/xmega/utils/preprocessor" -I"../src/ASF/common/utils" -I"../src" -I"../src/ASF/common/boards/user_board" -I"../src/ASF/common/services/ioport" -Os -fdata-sections -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -mrelax -Wall -mmcu=atxmega32a4u -c -std=gnu99 -fno-strict-aliasing -Wstrict-prototypes -Wmissing-prototypes -Werror-implicit-function-declaration -Wpointer-arith -mrelax -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -o "$@" "$<" + @echo Finished building: $< + + +src/ASF/common/services/clock/xmega/%.o: ../src/ASF/common/services/clock/xmega/%.c + @echo Building file: $< + @echo Invoking: AVR/GNU C Compiler : 4.8.1 + $(QUOTE)C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1061\avr8-gnu-toolchain\bin\avr-gcc.exe$(QUOTE) -x c -DNDEBUG -DBOARD=USER_BOARD -I"../common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained" -I"../common/services/usb/class/vendor/device/example" -I"../src/ASF/common/services/usb/udc" -I"../src/ASF/xmega/drivers/nvm" -I"../src/ASF/common/services/sleepmgr" -I"../src/ASF/common/services/clock" -I"../src/ASF/xmega/drivers/sleep" -I"../src/ASF/xmega/drivers/usb" -I"../src/ASF/xmega/drivers/cpu" -I"../src/ASF/common/services/usb/class/vendor" -I"../src/ASF/common/services/usb/class/vendor/device" -I"../src/ASF/common/services/usb" -I"../common/applications/user_application/user_board/config" -I"../src/ASF/xmega/utils" -I"../src/config" -I"../src/ASF/common/boards" -I"../src/ASF/xmega/utils/preprocessor" -I"../src/ASF/common/utils" -I"../src" -I"../src/ASF/common/boards/user_board" -I"../src/ASF/common/services/ioport" -Os -fdata-sections -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -mrelax -Wall -mmcu=atxmega32a4u -c -std=gnu99 -fno-strict-aliasing -Wstrict-prototypes -Wmissing-prototypes -Werror-implicit-function-declaration -Wpointer-arith -mrelax -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -o "$@" "$<" + @echo Finished building: $< + + +src/ASF/common/services/sleepmgr/xmega/%.o: ../src/ASF/common/services/sleepmgr/xmega/%.c + @echo Building file: $< + @echo Invoking: AVR/GNU C Compiler : 4.8.1 + $(QUOTE)C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1061\avr8-gnu-toolchain\bin\avr-gcc.exe$(QUOTE) -x c -DNDEBUG -DBOARD=USER_BOARD -I"../common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained" -I"../common/services/usb/class/vendor/device/example" -I"../src/ASF/common/services/usb/udc" -I"../src/ASF/xmega/drivers/nvm" -I"../src/ASF/common/services/sleepmgr" -I"../src/ASF/common/services/clock" -I"../src/ASF/xmega/drivers/sleep" -I"../src/ASF/xmega/drivers/usb" -I"../src/ASF/xmega/drivers/cpu" -I"../src/ASF/common/services/usb/class/vendor" -I"../src/ASF/common/services/usb/class/vendor/device" -I"../src/ASF/common/services/usb" -I"../common/applications/user_application/user_board/config" -I"../src/ASF/xmega/utils" -I"../src/config" -I"../src/ASF/common/boards" -I"../src/ASF/xmega/utils/preprocessor" -I"../src/ASF/common/utils" -I"../src" -I"../src/ASF/common/boards/user_board" -I"../src/ASF/common/services/ioport" -Os -fdata-sections -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -mrelax -Wall -mmcu=atxmega32a4u -c -std=gnu99 -fno-strict-aliasing -Wstrict-prototypes -Wmissing-prototypes -Werror-implicit-function-declaration -Wpointer-arith -mrelax -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -o "$@" "$<" + @echo Finished building: $< + + +src/ASF/common/services/usb/class/vendor/device/%.o: ../src/ASF/common/services/usb/class/vendor/device/%.c + @echo Building file: $< + @echo Invoking: AVR/GNU C Compiler : 4.8.1 + $(QUOTE)C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1061\avr8-gnu-toolchain\bin\avr-gcc.exe$(QUOTE) -x c -DNDEBUG -DBOARD=USER_BOARD -I"../common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained" -I"../common/services/usb/class/vendor/device/example" -I"../src/ASF/common/services/usb/udc" -I"../src/ASF/xmega/drivers/nvm" -I"../src/ASF/common/services/sleepmgr" -I"../src/ASF/common/services/clock" -I"../src/ASF/xmega/drivers/sleep" -I"../src/ASF/xmega/drivers/usb" -I"../src/ASF/xmega/drivers/cpu" -I"../src/ASF/common/services/usb/class/vendor" -I"../src/ASF/common/services/usb/class/vendor/device" -I"../src/ASF/common/services/usb" -I"../common/applications/user_application/user_board/config" -I"../src/ASF/xmega/utils" -I"../src/config" -I"../src/ASF/common/boards" -I"../src/ASF/xmega/utils/preprocessor" -I"../src/ASF/common/utils" -I"../src" -I"../src/ASF/common/boards/user_board" -I"../src/ASF/common/services/ioport" -Os -fdata-sections -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -mrelax -Wall -mmcu=atxmega32a4u -c -std=gnu99 -fno-strict-aliasing -Wstrict-prototypes -Wmissing-prototypes -Werror-implicit-function-declaration -Wpointer-arith -mrelax -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -o "$@" "$<" + @echo Finished building: $< + + +src/ASF/common/services/usb/udc/%.o: ../src/ASF/common/services/usb/udc/%.c + @echo Building file: $< + @echo Invoking: AVR/GNU C Compiler : 4.8.1 + $(QUOTE)C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1061\avr8-gnu-toolchain\bin\avr-gcc.exe$(QUOTE) -x c -DNDEBUG -DBOARD=USER_BOARD -I"../common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained" -I"../common/services/usb/class/vendor/device/example" -I"../src/ASF/common/services/usb/udc" -I"../src/ASF/xmega/drivers/nvm" -I"../src/ASF/common/services/sleepmgr" -I"../src/ASF/common/services/clock" -I"../src/ASF/xmega/drivers/sleep" -I"../src/ASF/xmega/drivers/usb" -I"../src/ASF/xmega/drivers/cpu" -I"../src/ASF/common/services/usb/class/vendor" -I"../src/ASF/common/services/usb/class/vendor/device" -I"../src/ASF/common/services/usb" -I"../common/applications/user_application/user_board/config" -I"../src/ASF/xmega/utils" -I"../src/config" -I"../src/ASF/common/boards" -I"../src/ASF/xmega/utils/preprocessor" -I"../src/ASF/common/utils" -I"../src" -I"../src/ASF/common/boards/user_board" -I"../src/ASF/common/services/ioport" -Os -fdata-sections -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -mrelax -Wall -mmcu=atxmega32a4u -c -std=gnu99 -fno-strict-aliasing -Wstrict-prototypes -Wmissing-prototypes -Werror-implicit-function-declaration -Wpointer-arith -mrelax -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -o "$@" "$<" + @echo Finished building: $< + + +src/ASF/xmega/drivers/nvm/%.o: ../src/ASF/xmega/drivers/nvm/%.c + @echo Building file: $< + @echo Invoking: AVR/GNU C Compiler : 4.8.1 + $(QUOTE)C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1061\avr8-gnu-toolchain\bin\avr-gcc.exe$(QUOTE) -x c -DNDEBUG -DBOARD=USER_BOARD -I"../common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained" -I"../common/services/usb/class/vendor/device/example" -I"../src/ASF/common/services/usb/udc" -I"../src/ASF/xmega/drivers/nvm" -I"../src/ASF/common/services/sleepmgr" -I"../src/ASF/common/services/clock" -I"../src/ASF/xmega/drivers/sleep" -I"../src/ASF/xmega/drivers/usb" -I"../src/ASF/xmega/drivers/cpu" -I"../src/ASF/common/services/usb/class/vendor" -I"../src/ASF/common/services/usb/class/vendor/device" -I"../src/ASF/common/services/usb" -I"../common/applications/user_application/user_board/config" -I"../src/ASF/xmega/utils" -I"../src/config" -I"../src/ASF/common/boards" -I"../src/ASF/xmega/utils/preprocessor" -I"../src/ASF/common/utils" -I"../src" -I"../src/ASF/common/boards/user_board" -I"../src/ASF/common/services/ioport" -Os -fdata-sections -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -mrelax -Wall -mmcu=atxmega32a4u -c -std=gnu99 -fno-strict-aliasing -Wstrict-prototypes -Wmissing-prototypes -Werror-implicit-function-declaration -Wpointer-arith -mrelax -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -o "$@" "$<" + @echo Finished building: $< + + +src/ASF/xmega/drivers/usb/%.o: ../src/ASF/xmega/drivers/usb/%.c + @echo Building file: $< + @echo Invoking: AVR/GNU C Compiler : 4.8.1 + $(QUOTE)C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1061\avr8-gnu-toolchain\bin\avr-gcc.exe$(QUOTE) -x c -DNDEBUG -DBOARD=USER_BOARD -I"../common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained" -I"../common/services/usb/class/vendor/device/example" -I"../src/ASF/common/services/usb/udc" -I"../src/ASF/xmega/drivers/nvm" -I"../src/ASF/common/services/sleepmgr" -I"../src/ASF/common/services/clock" -I"../src/ASF/xmega/drivers/sleep" -I"../src/ASF/xmega/drivers/usb" -I"../src/ASF/xmega/drivers/cpu" -I"../src/ASF/common/services/usb/class/vendor" -I"../src/ASF/common/services/usb/class/vendor/device" -I"../src/ASF/common/services/usb" -I"../common/applications/user_application/user_board/config" -I"../src/ASF/xmega/utils" -I"../src/config" -I"../src/ASF/common/boards" -I"../src/ASF/xmega/utils/preprocessor" -I"../src/ASF/common/utils" -I"../src" -I"../src/ASF/common/boards/user_board" -I"../src/ASF/common/services/ioport" -Os -fdata-sections -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -mrelax -Wall -mmcu=atxmega32a4u -c -std=gnu99 -fno-strict-aliasing -Wstrict-prototypes -Wmissing-prototypes -Werror-implicit-function-declaration -Wpointer-arith -mrelax -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -o "$@" "$<" + @echo Finished building: $< + + + + +# AVR32/GNU Preprocessing Assembler + + + +# AVR32/GNU Assembler +src/ASF/xmega/drivers/cpu/ccp.o: ../src/ASF/xmega/drivers/cpu/ccp.s + @echo Building file: $< + @echo Invoking: AVR32/GNU Assembler : 4.8.1 + $(QUOTE)C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1061\avr8-gnu-toolchain\bin\avr-gcc.exe$(QUOTE) -Wa,-gdwarf2 -x assembler-with-cpp -c -mmcu=atxmega32a4u -mrelax -DBOARD=USER_BOARD -I "../common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained" -I "../common/services/usb/class/vendor/device/example" -I "../src/ASF/common/services/usb/udc" -I "../src/ASF/xmega/drivers/nvm" -I "../src/ASF/common/services/sleepmgr" -I "../src/ASF/common/services/clock" -I "../src/ASF/xmega/drivers/sleep" -I "../src/ASF/xmega/drivers/usb" -I "../src/ASF/xmega/drivers/cpu" -I "../src/ASF/common/services/usb/class/vendor" -I "../src/ASF/common/services/usb/class/vendor/device" -I "../src/ASF/common/services/usb" -I "../common/applications/user_application/user_board/config" -I "../src/ASF/xmega/utils" -I "../src/config" -I "../src/ASF/common/boards" -I "../src/ASF/xmega/utils/preprocessor" -I "../src/ASF/common/utils" -I "../src" -I "../src/ASF/common/boards/user_board" -I "../src/ASF/common/services/ioport" -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -mrelax -o "$@" "$<" + @echo Finished building: $< + + +src/ASF/xmega/drivers/nvm/nvm_asm.o: ../src/ASF/xmega/drivers/nvm/nvm_asm.s + @echo Building file: $< + @echo Invoking: AVR32/GNU Assembler : 4.8.1 + $(QUOTE)C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1061\avr8-gnu-toolchain\bin\avr-gcc.exe$(QUOTE) -Wa,-gdwarf2 -x assembler-with-cpp -c -mmcu=atxmega32a4u -mrelax -DBOARD=USER_BOARD -I "../common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained" -I "../common/services/usb/class/vendor/device/example" -I "../src/ASF/common/services/usb/udc" -I "../src/ASF/xmega/drivers/nvm" -I "../src/ASF/common/services/sleepmgr" -I "../src/ASF/common/services/clock" -I "../src/ASF/xmega/drivers/sleep" -I "../src/ASF/xmega/drivers/usb" -I "../src/ASF/xmega/drivers/cpu" -I "../src/ASF/common/services/usb/class/vendor" -I "../src/ASF/common/services/usb/class/vendor/device" -I "../src/ASF/common/services/usb" -I "../common/applications/user_application/user_board/config" -I "../src/ASF/xmega/utils" -I "../src/config" -I "../src/ASF/common/boards" -I "../src/ASF/xmega/utils/preprocessor" -I "../src/ASF/common/utils" -I "../src" -I "../src/ASF/common/boards/user_board" -I "../src/ASF/common/services/ioport" -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -mrelax -o "$@" "$<" + @echo Finished building: $< + + + +src/ASF/xmega/drivers/cpu/%.o: ../src/ASF/xmega/drivers/cpu/%.s + @echo Building file: $< + @echo Invoking: AVR32/GNU Assembler : 4.8.1 + $(QUOTE)C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1061\avr8-gnu-toolchain\bin\avr-gcc.exe$(QUOTE) -Wa,-gdwarf2 -x assembler-with-cpp -c -mmcu=atxmega32a4u -mrelax -DBOARD=USER_BOARD -I "../common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained" -I "../common/services/usb/class/vendor/device/example" -I "../src/ASF/common/services/usb/udc" -I "../src/ASF/xmega/drivers/nvm" -I "../src/ASF/common/services/sleepmgr" -I "../src/ASF/common/services/clock" -I "../src/ASF/xmega/drivers/sleep" -I "../src/ASF/xmega/drivers/usb" -I "../src/ASF/xmega/drivers/cpu" -I "../src/ASF/common/services/usb/class/vendor" -I "../src/ASF/common/services/usb/class/vendor/device" -I "../src/ASF/common/services/usb" -I "../common/applications/user_application/user_board/config" -I "../src/ASF/xmega/utils" -I "../src/config" -I "../src/ASF/common/boards" -I "../src/ASF/xmega/utils/preprocessor" -I "../src/ASF/common/utils" -I "../src" -I "../src/ASF/common/boards/user_board" -I "../src/ASF/common/services/ioport" -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -mrelax -o "$@" "$<" + @echo Finished building: $< + + +src/ASF/xmega/drivers/nvm/%.o: ../src/ASF/xmega/drivers/nvm/%.s + @echo Building file: $< + @echo Invoking: AVR32/GNU Assembler : 4.8.1 + $(QUOTE)C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1061\avr8-gnu-toolchain\bin\avr-gcc.exe$(QUOTE) -Wa,-gdwarf2 -x assembler-with-cpp -c -mmcu=atxmega32a4u -mrelax -DBOARD=USER_BOARD -I "../common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained" -I "../common/services/usb/class/vendor/device/example" -I "../src/ASF/common/services/usb/udc" -I "../src/ASF/xmega/drivers/nvm" -I "../src/ASF/common/services/sleepmgr" -I "../src/ASF/common/services/clock" -I "../src/ASF/xmega/drivers/sleep" -I "../src/ASF/xmega/drivers/usb" -I "../src/ASF/xmega/drivers/cpu" -I "../src/ASF/common/services/usb/class/vendor" -I "../src/ASF/common/services/usb/class/vendor/device" -I "../src/ASF/common/services/usb" -I "../common/applications/user_application/user_board/config" -I "../src/ASF/xmega/utils" -I "../src/config" -I "../src/ASF/common/boards" -I "../src/ASF/xmega/utils/preprocessor" -I "../src/ASF/common/utils" -I "../src" -I "../src/ASF/common/boards/user_board" -I "../src/ASF/common/services/ioport" -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -mrelax -o "$@" "$<" + @echo Finished building: $< + + + + + +ifneq ($(MAKECMDGOALS),clean) +ifneq ($(strip $(C_DEPS)),) +-include $(C_DEPS) +endif +endif + +# Add inputs and outputs from these tool invocations to the build variables + +# All Target +all: $(OUTPUT_FILE_PATH) $(ADDITIONAL_DEPENDENCIES) + +$(OUTPUT_FILE_PATH): $(OBJS) $(USER_OBJS) $(OUTPUT_FILE_DEP) $(LIB_DEP) $(LINKER_SCRIPT_DEP) + @echo Building target: $@ + @echo Invoking: AVR/GNU Linker : 4.8.1 + $(QUOTE)C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1061\avr8-gnu-toolchain\bin\avr-gcc.exe$(QUOTE) -o$(OUTPUT_FILE_PATH_AS_ARGS) $(OBJS_AS_ARGS) $(USER_OBJS) $(LIBS) -Wl,-Map="USB_BULK_TEST.map" -Wl,--start-group -Wl,-lm -Wl,--end-group -Wl,--gc-sections -mrelax -mmcu=atxmega32a4u -Wl,--relax + @echo Finished building target: $@ + "C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1061\avr8-gnu-toolchain\bin\avr-objcopy.exe" -O ihex -R .eeprom -R .fuse -R .lock -R .signature -R .user_signatures "USB_BULK_TEST.elf" "USB_BULK_TEST.hex" + "C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1061\avr8-gnu-toolchain\bin\avr-objcopy.exe" -j .eeprom --set-section-flags=.eeprom=alloc,load --change-section-lma .eeprom=0 --no-change-warnings -O ihex "USB_BULK_TEST.elf" "USB_BULK_TEST.eep" || exit 0 + "C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1061\avr8-gnu-toolchain\bin\avr-objdump.exe" -h -S "USB_BULK_TEST.elf" > "USB_BULK_TEST.lss" + "C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1061\avr8-gnu-toolchain\bin\avr-objcopy.exe" -O srec -R .eeprom -R .fuse -R .lock -R .signature -R .user_signatures "USB_BULK_TEST.elf" "USB_BULK_TEST.srec" + "C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1061\avr8-gnu-toolchain\bin\avr-size.exe" "USB_BULK_TEST.elf" + + + + + + + +# Other Targets +clean: + -$(RM) $(OBJS_AS_ARGS) $(EXECUTABLES) + -$(RM) $(C_DEPS_AS_ARGS) + rm -rf "USB_BULK_TEST.elf" "USB_BULK_TEST.a" "USB_BULK_TEST.hex" "USB_BULK_TEST.lss" "USB_BULK_TEST.eep" "USB_BULK_TEST.map" "USB_BULK_TEST.srec" "USB_BULK_TEST.usersignatures" + \ No newline at end of file diff --git a/AVR Code/USB_BULK_TEST/Release/USB_BULK_TEST.eep b/AVR Code/USB_BULK_TEST/Release/USB_BULK_TEST.eep new file mode 100644 index 00000000..7c166a13 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/Release/USB_BULK_TEST.eep @@ -0,0 +1 @@ +:00000001FF diff --git a/AVR Code/USB_BULK_TEST/Release/USB_BULK_TEST.elf b/AVR Code/USB_BULK_TEST/Release/USB_BULK_TEST.elf new file mode 100644 index 0000000000000000000000000000000000000000..651efbe01cc1ba6b02e01a3d71308aeb02898411 GIT binary patch literal 21953 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 Y%rc2N<$Mm&)Siw>)WfX@34Oc&8#{XS$N&HU literal 0 HcmV?d00001 diff --git a/AVR Code/USB_BULK_TEST/Release/USB_BULK_TEST.hex b/AVR Code/USB_BULK_TEST/Release/USB_BULK_TEST.hex new file mode 100644 index 00000000..ab9c40a3 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/Release/USB_BULK_TEST.hex @@ -0,0 +1,608 @@ +:100000001DC1000037C1000035C1000033C1000030 +:1000100031C100002FC100002DC100002BC1000024 +:1000200029C1000027C1000025C1000023C1000034 +:1000300021C100001FC100001DC100001BC1000044 +:1000400019C1000017C1000015C1000013C1000054 +:1000500011C100000FC100000DC100000BC1000064 +:1000600009C1000007C1000005C1000003C1000074 +:1000700001C10000FFC00000FDC00000FBC0000087 +:10008000F9C00000F7C00000F5C00000F3C0000098 +:10009000F1C00000EFC00000EDC00000EBC00000A8 +:1000A000E9C00000E7C00000E5C00000E3C00000B8 +:1000B000E1C00000DFC00000DDC00000DBC00000C8 +:1000C000D9C00000D7C00000D5C00000D3C00000D8 +:1000D000D1C00000CFC00000CDC00000CBC00000E8 +:1000E000C9C00000C7C00000C5C00000C3C00000F8 +:1000F000C1C00000BFC00000BDC00000BBC0000008 +:10010000B9C00000B7C00000B5C00000B3C0000017 +:10011000B1C00000AFC00000ADC00000ABC0000027 +:10012000A9C00000A7C00000A5C00000A3C0000037 +:10013000A1C000009FC000009DC000009BC0000047 +:1001400099C0000097C0000095C0000026C60000BE +:1001500091C000008FC000008DC000008BC0000067 +:1001600089C0000087C0000085C0000083C0000077 +:1001700081C000007FC000007DC000007BC0000087 +:1001800079C0000077C0000075C0000073C0000097 +:1001900071C000006FC000006DC000006BC00000A7 +:1001A00069C0000067C0000065C0000063C00000B7 +:1001B00061C000005FC000005DC000005BC00000C7 +:1001C00059C0000057C0000055C0000053C00000D7 +:1001D00051C000004FC000004DC000004BC00000E7 +:1001E00049C0000047C0000045C0000043C00000F7 +:1001F00041C000000C94EB100C94A011820184010A +:10020000860188018A018F018C018E0168096A09C3 +:100210008009B609BF09C409130A180AD709E009F9 +:10022000EE09F009F209FC09060A110AD009D909F8 +:10023000E209F009F209F409FE09080A11241FBEB7 +:10024000CFEFCDBFDFE2DEBF10E2A0E0B0E2EEE232 +:10025000F5E202C005900D92A03CB107D9F72CE25F +:10026000A0ECB0E201C01D92A835B207E1F71BD0A7 +:100270000C949512C5CEE0E8F6E08FE0808385E02F +:100280008483089508958091C220811103C08EEE69 +:1002900092E002C080E090E043E451E06EEE72E054 +:1002A0008A58994DC7C687E08093A200789420D6DB +:1002B000E9DF98D7B1D0D4D060E080E07ED06AD0BA +:1002C0008CE05ED02FD5C8D5E1D5D5DF0000000089 +:1002D000000000000000000000000000000000001E +:1002E0000000000000000000F1CF08950895809103 +:1002F000002090E08830910590F4FC01E250FF4F1F +:100300000C94861210D10BC08CD109C02AD207C020 +:10031000E5D205C079D303C060D401C0D5D4909193 +:10032000C22081E0911180E08093C220089581E095 +:100330008093C32043E451E06EEE72E086E796E2DC +:1003400079D681E008951092C320089581E0089540 +:1003500081E0089510922002982F9C7193689093E9 +:10036000200287FD03C090E080E002C090E182E0BF +:10037000892B809321021092220210922602089566 +:10038000E0E0F2E010AA836880AB80E181AB12AAC2 +:1003900016AA0895E0E0F2E010A683E880A78FE2B5 +:1003A00081A712A616A6089592E09093CA01E82F9D +:1003B000F0E084911092CA010895909171009D7FA0 +:1003C0009093710010920002623011F49EE101C01E +:1003D0009CE19093010290E490930202882311F033 +:1003E00080EC01C080E480930302613011F482E06C +:1003F00001C083E08093040280E2D6DF80930C0288 +:1004000081E2D2DF80930D0210921802109219023D +:1004100081E080930002BECFCF93DF93E0E7F0E06E +:1004200082818B7F8283C0E2D3E08DE0888380E489 +:10043000898389E08A8383E3B7DF888782E3B4DF37 +:10044000898787E3B1DF8A8786E3AEDF8B87E0E2C7 +:10045000F6E08081836080831482DF91CF910895DC +:10046000E0E7F0E080818E7F808380E88093000168 +:100470000895E0E0F1E0108A80E4808B10A280A370 +:1004800010AA80ABE0E4F1E0108280831092C220D9 +:100490001092C120089510920020EBDFE0E0F1E01F +:1004A00016AA44E240AB11AA39E532AB82E083AB35 +:1004B000809102209091032084AB95AB86E794E273 +:1004C00080AF91AF12AE8BE384AF23E020933D0168 +:1004D00010923E0180A9806880AB10924601E0E452 +:1004E000F1E0408310924101309342012093430197 +:1004F00080910420909105208093440190934501C0 +:1005000086E692E2809348019093490110924A0155 +:1005100089E380934C0120934D0110924E0180811C +:10052000806880830895E0E0F1E0108A80E4808BA9 +:1005300084E0808B118A81E9828B80E1838B87E75D +:1005400091E0848B958B84E2808F82E0818F128E84 +:100550004091C2202EEE32E0429FC001439F900D99 +:1005600011248A58994D848F4091C220429FC00126 +:10057000439F900D11248A58994D958F168E80892E +:100580008068808B089581E08093002072DFE0E036 +:10059000F1E010AA80E480AB84E080AB11AA12AA3B +:1005A0008BE483AB14AA15AA16AA81E090E280AF6F +:1005B00091AF12AE80EA84AF88E080933D01109243 +:1005C0003E0180A9806A80AB85E58093A0081092E7 +:1005D0004601E0E4F1E084E280831092410189E584 +:1005E0008093420182E080934301809102209091A8 +:1005F0000320809344019093450186E692E2809324 +:1006000048019093490110924A018BE380934C0179 +:1006100083E080934D0110924E0180818068808339 +:100620000895E0E0F1E0108AA0E4A08B74E0708B04 +:10063000118A61E9628B80E1838B47E751E0448B4B +:10064000558B84E2808F82E0818F128EB091C22020 +:100650008EEE92E0B89F9001B99F300D11242A5878 +:10066000394D248FB091C220B89F9001B99F300DB1 +:1006700011242A58394D358F168E20892068208BF9 +:1006800010A2A0A370A311A262A32BE423A344A3EE +:1006900055A320EA20A728E021A712A64091C22056 +:1006A000489F9001499F300D11242351384D24A7B4 +:1006B0004091C220489F9001499F300D1124235141 +:1006C000384D35A716A680A1806880A30895CF93E2 +:1006D000C2E0C0930020CDDEE0E0F1E016AA44E2E3 +:1006E00040AB11AA39E532AB23E023AB8091042063 +:1006F0009091052084AB95AB86E692E280AF91AFF6 +:1007000012AE89E384AF20933D0110923E0180A98F +:10071000806880AB10924601E0E4F1E040831092E3 +:10072000410130934201C093430180910220909196 +:100730000320809344019093450186E794E28093DF +:1007400048019093490110924A018BE380934C0138 +:1007500020934D0110924E01808180688083CF915B +:100760000895CF93E0E0F1E0108AB0E4B08BA4E00C +:10077000A08B118A71E9728B80E1838B47E751E08E +:10078000448B558B84E2808F62E0618F128EC09122 +:10079000C2208EEE92E0C89F9001C99F300D1124B7 +:1007A0002A58394D248FC091C220C89F9001C99FFB +:1007B000300D11242A58394D358F168E2089206826 +:1007C000208B10A2B0A3A0A311A272A322E123A3A5 +:1007D00044A355A324E320A761A712A64091C220F9 +:1007E000489F9001499F300D11242351384D24A773 +:1007F0004091C220489F9001499F300D1124235100 +:10080000384D35A716A680A1806880A3CF910895A2 +:10081000CF93C3E0C09300202CDEE0E0F1E010A213 +:1008200080E480A384E080A311A212A28BE483A3BE +:1008300014A215A216A281E090E280A791A712A6A9 +:1008400080EA84A788E085A716A680A1806A80A395 +:1008500085E58093A00816AA34E230AB11AA29E5F9 +:1008600022AB82E083AB809102209091032084AB85 +:1008700095AB86E794E280AF91AF12AE8BE384AF85 +:10088000C0933D0110923E0180A9806880AB109218 +:100890004601E0E4F1E030831092410120934201EF +:1008A000C0934301809104209091052080934401DE +:1008B0009093450186E692E2809348019093490126 +:1008C00010924A0189E380934C01C0934D0110922C +:1008D0004E01808180688083CF910895E0E0F1E04F +:1008E000108A80E4808B84E0808B118A81E9828B7E +:1008F0008BE4838B87E791E0848B958B80EA808FF4 +:1009000088E0818F128E4091C2202EEE32E0429F0D +:10091000C001439F900D11248A58994D848F4091B6 +:10092000C220429FC001439F900D11248A58994DC7 +:10093000958F168E80898068808B0895CF93C4E050 +:10094000C093002096DDE0E0F1E010A280E480A3F7 +:10095000C0A311A212A28BE483A314A215A216A213 +:1009600081E090E280A791A712A680EA84A788E0A0 +:1009700085A716A680A1806A80A385E58093A0083C +:1009800016AA44E240AB11AA39E532AB23E023AB0F +:10099000809104209091052084AB95AB86E692E28D +:1009A00080AF91AF12AE89E384AF20933D011092E6 +:1009B0003E0180A9806880AB10924601E0E4F1E03E +:1009C0004083109241013093420182E080934301C1 +:1009D00080910220909103208093440190934501DF +:1009E00086E794E2809348019093490110924A016E +:1009F0008BE380934C0120934D0110924E01808136 +:100A000080688083CF910895CF93E0E0F1E0108A71 +:100A1000B0E4B08BA4E0A08B118A71E9728B8BE4F7 +:100A2000838B47E751E0448B558B80EA808F68E0E9 +:100A3000618F128EC091C2208EEE92E0C89F90010D +:100A4000C99F300D11242A58394D248FC091C220DE +:100A5000C89F9001C99F300D11242A58394D358FF8 +:100A6000168E20892068208B10AAB0ABA0AB11AAEB +:100A700072AB2AE423AB44AB55AB23EC20AF61AFA0 +:100A800012AE4091C220489F9001499F300D112421 +:100A90002351384D24AF4091C220489F9001499F77 +:100AA000300D11242351384D30933D0110923E01F9 +:100AB00080A9806880ABCF91089585E08093002065 +:100AC000D8DCE0E0F1E016AA54E250AB11AA49E507 +:100AD00042AB23E023AB809104209091052084ABAE +:100AE00095AB86E692E280AF91AF12AE39E334AFB8 +:100AF00020933D0110923E0180A9806880AB109246 +:100B00004601E0E4F1E0508310924101409342013C +:100B1000209343018091042090910520809344010B +:100B20009093450186E796E28093480190934901AE +:100B300010924A0130934C0120934D0110924E01C6 +:100B4000808180688083089586E08093002091DC16 +:100B5000E0E0F1E016AA44E240AB11AA39E532AB7D +:100B600023E023AB809104209091052084AB95ABCA +:100B700086E692E280AF91AF12AE89E384AF209314 +:100B80003D0110923E0180A9806880AB1092460121 +:100B9000E0E4F1E04083109241013093420182E0B1 +:100BA000809343018091022090910320809344011F +:100BB0009093450186E794E2809348019093490120 +:100BC00010924A018BE380934C0120934D011092C7 +:100BD0004E018081806880830895E0E0F1E0108A12 +:100BE00080E4808B84E0808B118A81E9828B80E1B4 +:100BF000838B2EEE32E0248B358B84E2808F82E073 +:100C0000818F128E4091C220429FC001439F900D60 +:100C100011248A58994D848F4091C220429FC0016F +:100C2000439F900D11248A58994D958F168E808977 +:100C30008068808B089587E0809300201ADCE0E0D4 +:100C4000F1E016AA44E240AB11AA39E532AB23E049 +:100C500023AB809104209091052084AB95AB86E670 +:100C600092E280AF91AF12AE89E384AF20933D0151 +:100C700010923E0180A9806880AB10924601E0E4AA +:100C8000F1E04083109241013093420182E0809371 +:100C9000430180910220909103208093440190931E +:100CA000450186E794E280934801909349011092B0 +:100CB0004A018BE380934C0120934D0110924E0129 +:100CC0008081806880830895E0E0F1E0108A80E40C +:100CD000808B85E0808B118A81E9828B80E1838B18 +:100CE0002EEE32E0248B358B84E2808F82E0818F80 +:100CF000128E4091C220429FC001439F900D11244B +:100D00008A58994D848F4091C220429FC001439FD1 +:100D1000900D11248A58994D958F168E8089806880 +:100D2000808B0895E0E7F0E083818C7F838384816A +:100D30008C7F848380818D7F8083E0E8F1E080EC8C +:100D40008283128688EC81831186E0E0F8E024E05B +:100D5000208333E03183148285ED91E086A397A34D +:100D60001682E0E4F8E020833183148286A397A3FF +:100D70001682E0E6F6E0808180618083E0E4F9E0BD +:100D800083E18183148281E0868380E090E186A301 +:100D900097A310A611A6208308951F920F920FB655 +:100DA0000F9211242F933F934F935F938F939F93B1 +:100DB000CF93DF931F92CDB7DEB7809100208730AD +:100DC00031F480912C02898380912D0202C08091A0 +:100DD0002C024091C020481B8091680990916909BC +:100DE00042308CF0843F9F4070F42091680930912C +:100DF000690949301CF08CE090E002C081E090E08D +:100E0000820F931F17C080916809909169094F3F25 +:100E1000ACF40D9798F02091680930916909483F2A +:100E20001CF48CE090E002C081E090E0A901481B36 +:100E3000590BCA0180937809909379090F90DF913B +:100E4000CF919F918F915F914F913F912F910F90F3 +:100E50000FBE0F901F901895E0E7F0E083818F7E22 +:100E60008383E0E4F6E080818A6A80838FEF848365 +:100E700088E5828B80E28687E0EAF8E084EC85836F +:100E800083E08683178288E184830895E0E7F0E0B9 +:100E90008381877F838380E48093C00888E5E0E4D2 +:100EA000F6E0878B08959FB7F894E0E5F0E02081A5 +:100EB000822B80839FBF08959FB7F894A0E5B0E090 +:100EC00016968C911697897F16968C931697E0E666 +:100ED000F0E080E885838BEB868316968C911697DD +:100EE000846016968C938081816080839FBF089573 +:100EF000CF93DF9300D000D0CDB7DEB78FEF8093D4 +:100F000070008093710080937200809373008093CF +:100F10007400809375008093760064E081E490E033 +:100F2000D6D46CE170E082E0D8D48C836DE170E0BF +:100F300082E0D3D48B838B819C81019621F480E461 +:100F400093E28B839C838B819C8189839A8380939A +:100F500062008A818093630082E0A5DF8091510066 +:100F600081FFFCCFA9DF61E080E490E0B0D49FB7BF +:100F7000F894809150008E7F809350009FBF2496FC +:100F8000CDBFDEBFDF91CF9108959FB7F894E82FD2 +:100F9000F0E0E059FF4F60958081862380839FBFFA +:100FA0000895CF93863011F4C8E101C0C0E080916C +:100FB000510081FD07C082E076DF8091510081FF02 +:100FC000FCCF7ADF6C2F636084E490E080D460E42F +:100FD00080E0CF91DACF8091C42008958091C42021 +:100FE000813009F4B0C90895F8D0FC018381809361 +:100FF000C420811101C09BC981E0089590916624AD +:10100000892F807697FF07C0803491F48091672400 +:1010100081110EC09DC9803459F4809167248111DB +:1010200007C080916C2490916D24892B09F08EC9A2 +:1010300080E008950F931F939B018A01AC0160E04B +:1010400083E80E9425101F910F91089580916824D4 +:101050008F777AC79091CC20992361F1E091C920D4 +:10106000F091CA200190F081E02D9481891710F54C +:10107000E093C720F093C820228133812E0F3F1FB9 +:10108000E217F30798F49181943061F49281891307 +:1010900009C09381691306C0E093C720F093C8206C +:1010A00081E008959081E90FF11DEACFE093C72018 +:1010B000F093C82080E00895E091C920F091CA2003 +:1010C0000190F081E02D228133812E0F3F1FFC0122 +:1010D0004081E40FF11DE217F30748F48181843069 +:1010E00031F0853039F08081E80FF11DF4CF80E0D8 +:1010F00090E00895CF0108951F93CF93DF93182FA9 +:10110000A9DF882339F1C091C720D091C820CE0132 +:10111000D3DFEC01009741F04C815D816B818A81C6 +:1011200022D78111F4CF16C0E091C920F091CA20D6 +:1011300092818381E92FF82FE10FF11DE10FF11D5D +:101140000190F081E02D0190F081E02DDF91CF91B1 +:101150001F91099480E0DF91CF911F910895FF9234 +:101160000F931F93CF93DF93C82F60E073DFF82EA8 +:10117000882361F1E091C920F091CA209281838196 +:10118000E92FF82FEC0FF11DEC0FF11D00811181FB +:10119000D8011696ED91FC9117970995682F8C2F21 +:1011A00059DFF82E882391F0C091C720D091C82034 +:1011B000CE0182DFEC01009719F08A81F3D7F8CFD6 +:1011C000D8011296ED91FC91139709958F2DDF911F +:1011D000CF911F910F91FF9008958091C72090911A +:1011E000C820089539C6CF938091CC20811108C0C2 +:1011F0001092CC201092D0201092D120CF9108953F +:10120000C0E0E091C920F091CA200190F081E02D6A +:101210008481C81768F78C2FA2DFCF5FF2CFCF93FE +:101220008091CC208823F1F0C0E0E091C920F091BA +:10123000CA20A081B18114968C91C81798F492812C +:101240008381E92FF82FEC0FF11DEC0FF11D0190B8 +:10125000F081E02D0084F185E02D309709F00995AB +:10126000CF5FE3CFCF910895CF92DF92FF920F939C +:101270001F93CF93DF931F92CDB7DEB710927024E8 +:10128000109271241092722410927324109274247C +:10129000109275242091662427FF07C080916C244A +:1012A00090916D24892B09F408C3822F80768034B5 +:1012B00009F0C5C08091672490E0FC01E05AF10973 +:1012C000E830F10508F088C2EA5FFE4F0C94861200 +:1012D0000000F1C210920008809168249091692466 +:1012E000809336089093370880916A248F7080939A +:1012F000000860916C2470916D2486E692E219C01A +:101300001092400860916C2470916D2460930220CB +:1013100070930320809168249091692480937608CB +:101320009093770880916A248F708093400886E7B5 +:1013300094E210D6209104203091052080916C24F5 +:1013400090916D242817390709F4B5C280930420C1 +:10135000909305208091002090E08830910508F05E +:10136000AAC2FC01E25FFE4F0C948612109268093B +:1013700010926909809168248093C0209CC280915A +:1013800068248093240697C2E0916824F091692430 +:10139000E830F10508F020C2EA5EFE4F0C94861298 +:1013A00060E080E00AD880916A240E94AA0173D884 +:1013B00082C260E080E001D880916A240E94AA0184 +:1013C000E2D879C261E081E00E94DD0180916A2467 +:1013D0000E94AA0180916B240E94C00178D96BC23F +:1013E00017DA69C2ABDA67C260E080E00E94DD0113 +:1013F00080916A240E94AA0160DB5DC261E080E006 +:101400000E94DD0180916A240E94AA019DDB53C2E3 +:1014100062E080E00E94DD0180916A2480680E9481 +:10142000AA0109DC48C2809168248093840643C2E3 +:10143000E9E7F0E091E088EDF89484BF90838111B2 +:10144000CBC127FFFBC080916C2490916D24009745 +:1014500009F4C2C12F7109F09BC020916724263086 +:1014600069F0283009F48CC02111B6C1029709F047 +:10147000B3C162E070E080ED90E2DEC020916824AC +:1014800030916924832F99278230910591F05CF483 +:10149000019709F0A1C18091102090911120DC01E9 +:1014A0006C9170E05BC08330910581F10F9709F179 +:1014B00093C1E0911020F09111208189281708F044 +:1014C0008BC13327220F331F220F331FE0911220CD +:1014D000F0911320E20FF31F80819181FC01628162 +:1014E000738138D5E0916E24F0916F2482E081837E +:1014F00036C08091142090911520009709F46CC19A +:10150000DC0112966D917C91139728C0332721300E +:10151000310529F040F02230310551F05DC169E01C +:1015200083EA90E208C064E070E08EEA90E216C0C0 +:1015300068E18AE890E2282FAAE5B0E2FC018191F7 +:1015400090E08D939D938E2F821B8617C0F3660FBC +:101550006E5F6093582070E088E590E2FBD4809144 +:101560006C2490916D242091702430917124821705 +:10157000930708F0A0C180937024909371249BC1BD +:10158000019709F029C161E070E08CEC90E254C051 +:101590002130E1F5209167242A3009F01DC101971F +:1015A00009F01AC18091CC20882309F415C1C0909C +:1015B0006A24D0906B240091C9201091CA20D801D0 +:1015C000ED91FC918481C81608F006C160E08C2D75 +:1015D00041DDF82E882309F4FFC0DD24CC0CDD1C8E +:1015E000D8011296ED91FC911397EC0DFD1D019021 +:1015F000F081E02D0680F781E02D09958093CE20C3 +:1016000061E070E08EEC90E2A5D4E4C0223009F0F5 +:10161000E3C0209167242111DFC0029709F0DCC0EC +:1016200080916A24F2D490E08093C5209093C620E4 +:1016300062E070E085EC90E28DD43DC12F7109F03D +:101640007DC080916724833009F4C6C018F48130CE +:10165000A1F0C2C0853019F0893039F1BDC0809148 +:101660006C2490916D24892B09F0B6C086E298E035 +:1016700080937224909373241EC180916C24909166 +:101680006D24892B09F0A8C0809168249091692469 +:10169000019709F0A1C08091D0209091D1208D7F39 +:1016A0008093D0209093D12006C180916C2490919A +:1016B0006D24892B09F090C04AD4882309F48CC08A +:1016C00080916824909169249927E0911020F091ED +:1016D0001120218930E02817390708F47DC083DD07 +:1016E00020916824309169242093CC20222309F48E +:1016F000E2C033272150304C220F331F220F331FFB +:101700008091122090911320820F931F8093C92003 +:101710009093CA2010E0E091C920F091CA20019076 +:10172000F081E02D8481181708F0C5C060E0812F9A +:10173000E3DC882309F450C01F5FEDCF2130F1F4C2 +:10174000809167248B3009F047C080916C24909180 +:101750006D24892B09F040C08091CC20882309F4A6 +:101760003BC010916A2460916824812F6983F7DC63 +:101770006981882389F1812FBFDC2BC0223061F57C +:1017800080916724813019F0833089F025C08091E1 +:101790006C2490916D24892BF9F4809168249091A8 +:1017A0006924892BC9F480916A2436D412C08091AF +:1017B0006C2490916D24892B79F480916824909108 +:1017C0006924892B49F480916A24C1D480916A24C8 +:1017D000F2D4F82EF1106FC0809166248F718130A1 +:1017E000B9F58091CC20882399F1C0906A24D090DB +:1017F0006B240091C9201091CA20D801ED91FC9171 +:101800008481C81628F560E08C2D24DC882301F142 +:10181000C6019927880F991FD8011296ED91FC9166 +:101820001397E80FF91F00811181D8011696ED91E9 +:10183000FC9117970995682F8C2D0CDC882341F0BB +:10184000D8011496ED91FC9115970995811133C03B +:10185000809166248F71823081F58091CC2088231D +:1018600061F110E0E091C920F091CA20A081B1811E +:1018700014968C91181708F592818381E92FF82F1F +:10188000E10FF11DE10FF11DC080D180D601169648 +:10189000ED91FC9117970995682F812FDBDB882349 +:1018A00061F0D6011496ED91FC911597099581117F +:1018B00002C01F5FD7CF81E001C080E00F90DF91B1 +:1018C000CF911F910F91FF90DF90CF9008951BBE95 +:1018D000FC0128ED24BF608308954091CA01E62FE2 +:1018E000F72F8093CA0184914093CA010895E82F8D +:1018F000F0E0EE5AF34D80818F3F09F4FFCF9FB7A0 +:10190000F89480818F5F80839FBF0895E82FF0E077 +:10191000EE5AF34D8081811101C0FFCF9FB7F8943B +:101920008081815080839FBF0895CF93C82F80917D +:101930006422C11105C0882339F081E0E7DF04C0CB +:10194000811102C081E0D3DFC0936422CF9108955A +:10195000282F2F70992787FD90958827990F881F2A +:101960009927820F911D820F911D43E0880F991FC7 +:101970004A95E1F7805E9D4D08950F93E8ECF4E001 +:1019800080818F7D808380818F7D8083E8E2F2E299 +:1019900002E0059310922A2210922B2200E2069375 +:1019A00000E40693E0E2F2E200E2069300E406932C +:1019B0001092722410927324109274241092752441 +:1019C000109270241092712410920D220F9108959C +:1019D0000F9385E080930D22E9E2F2E204E00593A3 +:1019E000E1E2F2E204E005930F9108950F9383E0A2 +:1019F00080930D2210922A2210922B22E8E2F2E22A +:101A000002E006930F910895E0917224F0917324FF +:101A1000309709F009940895982F9F70282F332745 +:101A200027FD30952227330F221F3327290F311D21 +:101A3000290F311D2250310949E0429FC001439FC7 +:101A4000900D11248D569E4D08958F929F92BF92B6 +:101A5000CF92DF92EF92FF920F931F93CF93DF937A +:101A6000B82EDADFEC018B2D73DF7C01DC011196DF +:101A7000EC91E770E150E73040F4F0E0EE0FFF1F2B +:101A8000EE54FF4D0081118102C008E010E0ED81AD +:101A9000FE818B819C814881D701B7FE4FC016968D +:101AA0002D913C9117972E0F3F1F2D833E832817B2 +:101AB000390799F1FC01E21BF30B9F012115F4E0BA +:101AC0003F0738F02FEF33E0C901B8010BD5281BD1 +:101AD000390B41FF09C0C901B80104D541E0892B88 +:101AE00009F040E0942F01C090E0888190FB81F9DB +:101AF0008883D70116961D921C92179712962D93E4 +:101B00003C93139789819A812D813E81820F931F87 +:101B100014968D939C9315970DC041FF70C04D7F17 +:101B20004883D70116961D921C92179712961D9204 +:101B30001C921397F70102E006937AC01296CD909B +:101B4000DC90139742FF0FC089809A80B801CAD4F5 +:101B5000B0E4BB9EB00111246D567F4DAC01C401B1 +:101B60008E0F9F1FD9D46D817E816C0D7D1D6D837D +:101B70007E832B813C812617370710F42D833E830B +:101B8000F70186819781C816D906C9F58D819E8196 +:101B900082179307A1F1281B390B2115F4E03F07A9 +:101BA00010F02FEF33E0C901B8019CD4281B390B8A +:101BB000D70112961D921C9213972017310778F4C3 +:101BC000888184608883B0E4BB9EC00111248D5657 +:101BD0009F4DF7018483958306831783ABCF89815B +:101BE0009A814D815E81840F951FD70114968D9344 +:101BF0009C93159716962D933C9317979BCF8881AE +:101C000080FF16C08E7F8883EF81F885309781F042 +:101C10006D817E814B2D80E0DF91CF911F910F91DF +:101C2000FF90EF90DF90CF90BF909F908F9009949E +:101C3000DF91CF911F910F91FF90EF90DF90CF90A8 +:101C4000BF909F908F9008950F93CF93DF938091D3 +:101C50000D22833029F4D8DEDF91CF910F918DCE04 +:101C60002091092230910A22C0917024D0917124D0 +:101C7000C21BD30B61F580910B2290910C22820F35 +:101C8000931F80930B2290930C2220916C2430910F +:101C90006D242817390721F08091D220882331F054 +:101CA00084E080930D22E0E2F2E236C0E0917424F9 +:101CB000F0917524309799F00995882381F010925E +:101CC000092210920A22C0917024D0917124C0344C +:101CD000D10528F01092D220C0E4D0E003C081E00A +:101CE0008093D220C0932A22D0932B2220910922C4 +:101CF00030910A2280916E2490916F24820F931F5D +:101D000080932C2290932D22C20FD31FC0930922BF +:101D1000D0930A22E8E2F2E202E00693DF91CF914B +:101D20000F9108950F93CF93DF931F92CDB7DEB736 +:101D30008091CC0480FF65C081E08093CC04E0E218 +:101D4000F2E200E80693E8E2F2E200E8069380930C +:101D5000CA04E0E2F2E200E1069380910D228823BA +:101D600029F08350823008F44FDE07DE8091222272 +:101D700090912322089709F046C088E0E9ECF1E24F +:101D8000A6E6B4E201900D928A95E1F78091C8042D +:101D900080628093C8048091C80480628093C804E4 +:101DA00063DA811102C014DE2EC09091662497FF81 +:101DB0000EC010920B2210920C2210920922109247 +:101DC0000A2292E090930D2289833EDF08C0209181 +:101DD0006C2430916D24232B21F4898307DE8981C3 +:101DE00013C010920B2210920C2210920922109212 +:101DF0000A2291E090930D22E0E2F2E202E00693E3 +:101E000003C080E001C081E00F90DF91CF910F917E +:101E10000895CF93CFB7F89481E087DDEAECF4E042 +:101E200080E4808380E28083E1ECF4E08081816063 +:101E30008083A9ECB4E08C9182608C93E8ECF4E0B0 +:101E40008081806480838C9181608C9380818068A4 +:101E50008083CFBFCF910895CF931092600080E32D +:101E6000A0D88091C00480648093C00481E08093F6 +:101E70006000CFB7F89480E090E0FC0173E0EE0FD3 +:101E8000FF1F7A95E1F7EF5DFD4D108201968830D6 +:101E9000910599F7809193218E7F80939321809172 +:101EA0009C218E7F80939C218091A5218E7F8093A1 +:101EB000A5218091AE218E7F8093AE218091B721A4 +:101EC0008E7F8093B7218091C0218E7F8093C02127 +:101ED0006AE170E082E001DD8F3F09F48FE18093D9 +:101EE000FA046BE170E082E0F8DC8F3F09F48FE1E7 +:101EF0008093FB048091C00483608093C004809130 +:101F0000C00480688093C0048091C0048061809385 +:101F1000C00480E292E28093C6049093C70480914B +:101F2000C00480628093C0048FEF8093C5048091C9 +:101F3000C80482608093C8041092642285E0D7DCD4 +:101F400068DFCFBFCF9108958093C3040895809137 +:101F5000C304089580936E2490936F24609370243B +:101F60007093712408950F931F93CF93DF931F9263 +:101F7000CDB7DEB78A016983EBDCFC018181807C0F +:101F8000698181113BC06370613029F010F490E4E5 +:101F900003C090E801C090EC00381105E1F050F466 +:101FA00000321105A1F00034110599F0003111053E +:101FB00061F419C0011582E0180789F00F3FA3E012 +:101FC0001A0779F00115114041F080E00DC082E060 +:101FD0000BC083E009C084E007C085E005C086E04F +:101FE00003C087E001C081E0118226E02083892BB5 +:101FF000818381818062818381E001C080E00F90D4 +:10200000DF91CF911F910F910895A2DCFC01818196 +:1020100082FB882780F90895CF93C82F99DCFC01B3 +:10202000818182FF0FC091819B7F91838C2FF4DC93 +:10203000FC01808180FF06C08E7F80830780F08551 +:10204000E02D099581E0CF9108958F929F92BF92E4 +:10205000CF92DF92EF92FF920F931F93CF93DF9374 +:102060001F92CDB7DEB7B82E6A0179016983D4DC3F +:102070004C018B2D6DDCFC018181807C6981882382 +:1020800009F457C08181807C803C19F0818182FDF8 +:1020900050C08FB7F894D4019C9190FF02C08FBFBD +:1020A00048C09160D4019C938FBFD4011196CD920A +:1020B000DC9212971396ED92FC92149715961D924E +:1020C0001C92169717960D931C93189791E0611127 +:1020D00004C0E114F10409F090E0D4018C9190FB6C +:1020E00081F98B7F8C93B7FC1EC08181807C803C02 +:1020F000C1F4A181A770A150A73040F4B0E0AA0FAD +:10210000BB1FAE54BF4D6D917C9102C068E070E082 +:10211000C701E8D1892B29F0F40180818E7F80836B +:1021200008C012821382168217828B2D8EDC81E00A +:1021300001C080E00F90DF91CF911F910F91FF9030 +:10214000EF90DF90CF90BF909F908F9008950F9366 +:102150001F93CF93DF93182FFBDBEC01812F5CDC07 +:10216000DC01FE0102E005938C9180FF16C08E7F9A +:102170008C931796ED91FC911897309771F017FF9B +:1021800003C06E817F8102C06A817B81412F81E023 +:10219000DF91CF911F910F910994DF91CF911F9102 +:1021A0000F910895CF93C82FD2DF8C2FD1DBFC0184 +:1021B0001182CF9108950F93CF93C82FC9DBFC01F3 +:1021C00091819460918301E006938C2FC0DF81E0C0 +:1021D000CF910F9108951F920F920FB60F92112475 +:1021E0000F932F933F934F935F936F937F938F93AF +:1021F0009F93AF93BF93EF93FF938091CB0487FF9F +:1022000007C080E88093CA040AD80E94770186C07C +:102210008091CB0482FF18C084E08093CA0480912F +:10222000282286FF7BC08091CC0481FD77C07ADDB7 +:10223000811174C080910D22813011F4D7DB6EC002 +:10224000843009F06BC021C08091CB0481FF26C08F +:1022500082E08093CA048091202286FF5FC0809133 +:10226000CC0481FD5BC05EDD811158C080910D22E0 +:10227000823041F484E080930D22E0E2F2E202E059 +:1022800006934CC0833009F049C0E9E2F2E204E071 +:102290000593E1E2F2E204E0059340C08091CB04B3 +:1022A00084FF25C080E18093CA0481E050DF81E88B +:1022B0004EDF82E04CDF82E84ADF0E94F308109292 +:1022C000C3041092212296E09093202283E480930D +:1022D000212210922922909328228093292289EC8E +:1022E00091E2809324229093252247DB17C08091AE +:1022F000CB0486FF08C080E48093CA0480E015DB2D +:102300000E9475010BC08091CB0485FF07C080E25D +:102310008093CA0481E009DB0E947601FF91EF916E +:10232000BF91AF919F918F917F916F915F914F91ED +:102330003F912F910F910F900FBE0F901F90189506 +:102340001F920F920FB60F9211240F931F932F938A +:102350003F934F935F936F937F938F939F93AF932D +:10236000BF93CF93DF93EF93FF938091CC0481FFD2 +:102370001AC082E08093CC048091C504E0E2F2E2CE +:102380008195880FE81BF10920813181205232426A +:1023900003E0369527950A95E1F7C22FC69520FFF1 +:1023A00006C080E805C0BEDC882319F386C080E043 +:1023B000C80F8C2FCDDAFC01808185FF7EC000E242 +:1023C0000693C11174C080910D22843019F41CDB76 +:1023D000D4DA73C0C0912222D0912322809170243C +:1023E000909171240091092210910A2298012C0FDA +:1023F0003D1F8217930718F4EC01C01BD10B80918D +:102400006E2490916F24AE0169EC71E2800F911FF0 +:1024100083D00C0F1D1F0093092210930A22C03491 +:10242000D10569F480910B2290910C22800F911FAD +:1024300020916C2430916D248217930788F00093CB +:10244000702410937124E0917424F09175243097D6 +:1024500029F00995811102C0BBDA2FC0C7DA2DC05F +:10246000809170249091712480179107D9F4E091A4 +:102470007424F0917524309779F30995882361F3DA +:1024800080910B2290910C222091092230910A22F6 +:10249000820F931F80930B2290930C22109209229B +:1024A00010920A22E0E2F2E202E0069306C0C0388F +:1024B00011F4CADB02C08C2FC8DAFF91EF91DF91D3 +:1024C000CF91BF91AF919F918F917F916F915F91CC +:1024D0004F913F912F911F910F910F900FBE0F9031 +:1024E0001F901895AA1BBB1B51E107C0AA1FBB1F59 +:1024F000A617B70710F0A61BB70B881F991F5A9590 +:10250000A9F780959095BC01CD010895EE0FFF1FAE +:102510000590F491E02D0994FB01DC0102C00190CB +:0E2520000D9241505040D8F70895F894FFCF27 +:10252E00FF5580008000F407EE07FE07EB07000062 +:10253E004420162000001C201A2006200902270025 +:10254E0001010080FA0904000003FFFFFF000705E8 +:10255E0081024000000705020240000007058301CA +:10256E00FF0301001201000200000040EB0300A077 +:10257E000002010200010000000300000000000044 +:10258E00000000000000000000000000000000003D +:10259E00000000000000000000000000000000002D +:1025AE0000000000000000000000555342476F621B +:1025BE00696E6461722044756D6D7920446576692B +:1025CE0063650054617069725465636800000403AA +:1025DE000904100020004000800000010002FF03EB +:00000001FF diff --git a/AVR Code/USB_BULK_TEST/Release/USB_BULK_TEST.lss b/AVR Code/USB_BULK_TEST/Release/USB_BULK_TEST.lss new file mode 100644 index 00000000..00927a7c --- /dev/null +++ b/AVR Code/USB_BULK_TEST/Release/USB_BULK_TEST.lss @@ -0,0 +1,4388 @@ + +USB_BULK_TEST.elf: file format elf32-avr + +Sections: +Idx Name Size VMA LMA File off Algn + 0 .text 0000252e 00000000 00000000 00000094 2**1 + CONTENTS, ALLOC, LOAD, READONLY, CODE + 1 .data 000000c0 00802000 0000252e 000025c4 2**2 + CONTENTS, ALLOC, LOAD, DATA + 2 .bss 00000b98 008020c0 008020c0 00002684 2**2 + ALLOC + 3 .comment 00000030 00000000 00000000 00002684 2**0 + CONTENTS, READONLY + 4 .debug_aranges 00000048 00000000 00000000 000026b8 2**3 + CONTENTS, READONLY, DEBUGGING + 5 .debug_info 0000011a 00000000 00000000 00002700 2**0 + CONTENTS, READONLY, DEBUGGING + 6 .debug_abbrev 00000026 00000000 00000000 0000281a 2**0 + CONTENTS, READONLY, DEBUGGING + 7 .debug_line 0000018d 00000000 00000000 00002840 2**0 + CONTENTS, READONLY, DEBUGGING + 8 .debug_ranges 00000020 00000000 00000000 000029d0 2**3 + CONTENTS, READONLY, DEBUGGING + +Disassembly of section .text: + +00000000 <__vectors>: + 0: 1d c1 rjmp .+570 ; 0x23c <__ctors_end> + 2: 00 00 nop + 4: 37 c1 rjmp .+622 ; 0x274 <__bad_interrupt> + 6: 00 00 nop + 8: 35 c1 rjmp .+618 ; 0x274 <__bad_interrupt> + a: 00 00 nop + c: 33 c1 rjmp .+614 ; 0x274 <__bad_interrupt> + e: 00 00 nop + 10: 31 c1 rjmp .+610 ; 0x274 <__bad_interrupt> + 12: 00 00 nop + 14: 2f c1 rjmp .+606 ; 0x274 <__bad_interrupt> + 16: 00 00 nop + 18: 2d c1 rjmp .+602 ; 0x274 <__bad_interrupt> + 1a: 00 00 nop + 1c: 2b c1 rjmp .+598 ; 0x274 <__bad_interrupt> + 1e: 00 00 nop + 20: 29 c1 rjmp .+594 ; 0x274 <__bad_interrupt> + 22: 00 00 nop + 24: 27 c1 rjmp .+590 ; 0x274 <__bad_interrupt> + 26: 00 00 nop + 28: 25 c1 rjmp .+586 ; 0x274 <__bad_interrupt> + 2a: 00 00 nop + 2c: 23 c1 rjmp .+582 ; 0x274 <__bad_interrupt> + 2e: 00 00 nop + 30: 21 c1 rjmp .+578 ; 0x274 <__bad_interrupt> + 32: 00 00 nop + 34: 1f c1 rjmp .+574 ; 0x274 <__bad_interrupt> + 36: 00 00 nop + 38: 1d c1 rjmp .+570 ; 0x274 <__bad_interrupt> + 3a: 00 00 nop + 3c: 1b c1 rjmp .+566 ; 0x274 <__bad_interrupt> + 3e: 00 00 nop + 40: 19 c1 rjmp .+562 ; 0x274 <__bad_interrupt> + 42: 00 00 nop + 44: 17 c1 rjmp .+558 ; 0x274 <__bad_interrupt> + 46: 00 00 nop + 48: 15 c1 rjmp .+554 ; 0x274 <__bad_interrupt> + 4a: 00 00 nop + 4c: 13 c1 rjmp .+550 ; 0x274 <__bad_interrupt> + 4e: 00 00 nop + 50: 11 c1 rjmp .+546 ; 0x274 <__bad_interrupt> + 52: 00 00 nop + 54: 0f c1 rjmp .+542 ; 0x274 <__bad_interrupt> + 56: 00 00 nop + 58: 0d c1 rjmp .+538 ; 0x274 <__bad_interrupt> + 5a: 00 00 nop + 5c: 0b c1 rjmp .+534 ; 0x274 <__bad_interrupt> + 5e: 00 00 nop + 60: 09 c1 rjmp .+530 ; 0x274 <__bad_interrupt> + 62: 00 00 nop + 64: 07 c1 rjmp .+526 ; 0x274 <__bad_interrupt> + 66: 00 00 nop + 68: 05 c1 rjmp .+522 ; 0x274 <__bad_interrupt> + 6a: 00 00 nop + 6c: 03 c1 rjmp .+518 ; 0x274 <__bad_interrupt> + 6e: 00 00 nop + 70: 01 c1 rjmp .+514 ; 0x274 <__bad_interrupt> + 72: 00 00 nop + 74: ff c0 rjmp .+510 ; 0x274 <__bad_interrupt> + 76: 00 00 nop + 78: fd c0 rjmp .+506 ; 0x274 <__bad_interrupt> + 7a: 00 00 nop + 7c: fb c0 rjmp .+502 ; 0x274 <__bad_interrupt> + 7e: 00 00 nop + 80: f9 c0 rjmp .+498 ; 0x274 <__bad_interrupt> + 82: 00 00 nop + 84: f7 c0 rjmp .+494 ; 0x274 <__bad_interrupt> + 86: 00 00 nop + 88: f5 c0 rjmp .+490 ; 0x274 <__bad_interrupt> + 8a: 00 00 nop + 8c: f3 c0 rjmp .+486 ; 0x274 <__bad_interrupt> + 8e: 00 00 nop + 90: f1 c0 rjmp .+482 ; 0x274 <__bad_interrupt> + 92: 00 00 nop + 94: ef c0 rjmp .+478 ; 0x274 <__bad_interrupt> + 96: 00 00 nop + 98: ed c0 rjmp .+474 ; 0x274 <__bad_interrupt> + 9a: 00 00 nop + 9c: eb c0 rjmp .+470 ; 0x274 <__bad_interrupt> + 9e: 00 00 nop + a0: e9 c0 rjmp .+466 ; 0x274 <__bad_interrupt> + a2: 00 00 nop + a4: e7 c0 rjmp .+462 ; 0x274 <__bad_interrupt> + a6: 00 00 nop + a8: e5 c0 rjmp .+458 ; 0x274 <__bad_interrupt> + aa: 00 00 nop + ac: e3 c0 rjmp .+454 ; 0x274 <__bad_interrupt> + ae: 00 00 nop + b0: e1 c0 rjmp .+450 ; 0x274 <__bad_interrupt> + b2: 00 00 nop + b4: df c0 rjmp .+446 ; 0x274 <__bad_interrupt> + b6: 00 00 nop + b8: dd c0 rjmp .+442 ; 0x274 <__bad_interrupt> + ba: 00 00 nop + bc: db c0 rjmp .+438 ; 0x274 <__bad_interrupt> + be: 00 00 nop + c0: d9 c0 rjmp .+434 ; 0x274 <__bad_interrupt> + c2: 00 00 nop + c4: d7 c0 rjmp .+430 ; 0x274 <__bad_interrupt> + c6: 00 00 nop + c8: d5 c0 rjmp .+426 ; 0x274 <__bad_interrupt> + ca: 00 00 nop + cc: d3 c0 rjmp .+422 ; 0x274 <__bad_interrupt> + ce: 00 00 nop + d0: d1 c0 rjmp .+418 ; 0x274 <__bad_interrupt> + d2: 00 00 nop + d4: cf c0 rjmp .+414 ; 0x274 <__bad_interrupt> + d6: 00 00 nop + d8: cd c0 rjmp .+410 ; 0x274 <__bad_interrupt> + da: 00 00 nop + dc: cb c0 rjmp .+406 ; 0x274 <__bad_interrupt> + de: 00 00 nop + e0: c9 c0 rjmp .+402 ; 0x274 <__bad_interrupt> + e2: 00 00 nop + e4: c7 c0 rjmp .+398 ; 0x274 <__bad_interrupt> + e6: 00 00 nop + e8: c5 c0 rjmp .+394 ; 0x274 <__bad_interrupt> + ea: 00 00 nop + ec: c3 c0 rjmp .+390 ; 0x274 <__bad_interrupt> + ee: 00 00 nop + f0: c1 c0 rjmp .+386 ; 0x274 <__bad_interrupt> + f2: 00 00 nop + f4: bf c0 rjmp .+382 ; 0x274 <__bad_interrupt> + f6: 00 00 nop + f8: bd c0 rjmp .+378 ; 0x274 <__bad_interrupt> + fa: 00 00 nop + fc: bb c0 rjmp .+374 ; 0x274 <__bad_interrupt> + fe: 00 00 nop + 100: b9 c0 rjmp .+370 ; 0x274 <__bad_interrupt> + 102: 00 00 nop + 104: b7 c0 rjmp .+366 ; 0x274 <__bad_interrupt> + 106: 00 00 nop + 108: b5 c0 rjmp .+362 ; 0x274 <__bad_interrupt> + 10a: 00 00 nop + 10c: b3 c0 rjmp .+358 ; 0x274 <__bad_interrupt> + 10e: 00 00 nop + 110: b1 c0 rjmp .+354 ; 0x274 <__bad_interrupt> + 112: 00 00 nop + 114: af c0 rjmp .+350 ; 0x274 <__bad_interrupt> + 116: 00 00 nop + 118: ad c0 rjmp .+346 ; 0x274 <__bad_interrupt> + 11a: 00 00 nop + 11c: ab c0 rjmp .+342 ; 0x274 <__bad_interrupt> + 11e: 00 00 nop + 120: a9 c0 rjmp .+338 ; 0x274 <__bad_interrupt> + 122: 00 00 nop + 124: a7 c0 rjmp .+334 ; 0x274 <__bad_interrupt> + 126: 00 00 nop + 128: a5 c0 rjmp .+330 ; 0x274 <__bad_interrupt> + 12a: 00 00 nop + 12c: a3 c0 rjmp .+326 ; 0x274 <__bad_interrupt> + 12e: 00 00 nop + 130: a1 c0 rjmp .+322 ; 0x274 <__bad_interrupt> + 132: 00 00 nop + 134: 9f c0 rjmp .+318 ; 0x274 <__bad_interrupt> + 136: 00 00 nop + 138: 9d c0 rjmp .+314 ; 0x274 <__bad_interrupt> + 13a: 00 00 nop + 13c: 9b c0 rjmp .+310 ; 0x274 <__bad_interrupt> + 13e: 00 00 nop + 140: 99 c0 rjmp .+306 ; 0x274 <__bad_interrupt> + 142: 00 00 nop + 144: 97 c0 rjmp .+302 ; 0x274 <__bad_interrupt> + 146: 00 00 nop + 148: 95 c0 rjmp .+298 ; 0x274 <__bad_interrupt> + 14a: 00 00 nop + 14c: 26 c6 rjmp .+3148 ; 0xd9a <__vector_83> + 14e: 00 00 nop + 150: 91 c0 rjmp .+290 ; 0x274 <__bad_interrupt> + 152: 00 00 nop + 154: 8f c0 rjmp .+286 ; 0x274 <__bad_interrupt> + 156: 00 00 nop + 158: 8d c0 rjmp .+282 ; 0x274 <__bad_interrupt> + 15a: 00 00 nop + 15c: 8b c0 rjmp .+278 ; 0x274 <__bad_interrupt> + 15e: 00 00 nop + 160: 89 c0 rjmp .+274 ; 0x274 <__bad_interrupt> + 162: 00 00 nop + 164: 87 c0 rjmp .+270 ; 0x274 <__bad_interrupt> + 166: 00 00 nop + 168: 85 c0 rjmp .+266 ; 0x274 <__bad_interrupt> + 16a: 00 00 nop + 16c: 83 c0 rjmp .+262 ; 0x274 <__bad_interrupt> + 16e: 00 00 nop + 170: 81 c0 rjmp .+258 ; 0x274 <__bad_interrupt> + 172: 00 00 nop + 174: 7f c0 rjmp .+254 ; 0x274 <__bad_interrupt> + 176: 00 00 nop + 178: 7d c0 rjmp .+250 ; 0x274 <__bad_interrupt> + 17a: 00 00 nop + 17c: 7b c0 rjmp .+246 ; 0x274 <__bad_interrupt> + 17e: 00 00 nop + 180: 79 c0 rjmp .+242 ; 0x274 <__bad_interrupt> + 182: 00 00 nop + 184: 77 c0 rjmp .+238 ; 0x274 <__bad_interrupt> + 186: 00 00 nop + 188: 75 c0 rjmp .+234 ; 0x274 <__bad_interrupt> + 18a: 00 00 nop + 18c: 73 c0 rjmp .+230 ; 0x274 <__bad_interrupt> + 18e: 00 00 nop + 190: 71 c0 rjmp .+226 ; 0x274 <__bad_interrupt> + 192: 00 00 nop + 194: 6f c0 rjmp .+222 ; 0x274 <__bad_interrupt> + 196: 00 00 nop + 198: 6d c0 rjmp .+218 ; 0x274 <__bad_interrupt> + 19a: 00 00 nop + 19c: 6b c0 rjmp .+214 ; 0x274 <__bad_interrupt> + 19e: 00 00 nop + 1a0: 69 c0 rjmp .+210 ; 0x274 <__bad_interrupt> + 1a2: 00 00 nop + 1a4: 67 c0 rjmp .+206 ; 0x274 <__bad_interrupt> + 1a6: 00 00 nop + 1a8: 65 c0 rjmp .+202 ; 0x274 <__bad_interrupt> + 1aa: 00 00 nop + 1ac: 63 c0 rjmp .+198 ; 0x274 <__bad_interrupt> + 1ae: 00 00 nop + 1b0: 61 c0 rjmp .+194 ; 0x274 <__bad_interrupt> + 1b2: 00 00 nop + 1b4: 5f c0 rjmp .+190 ; 0x274 <__bad_interrupt> + 1b6: 00 00 nop + 1b8: 5d c0 rjmp .+186 ; 0x274 <__bad_interrupt> + 1ba: 00 00 nop + 1bc: 5b c0 rjmp .+182 ; 0x274 <__bad_interrupt> + 1be: 00 00 nop + 1c0: 59 c0 rjmp .+178 ; 0x274 <__bad_interrupt> + 1c2: 00 00 nop + 1c4: 57 c0 rjmp .+174 ; 0x274 <__bad_interrupt> + 1c6: 00 00 nop + 1c8: 55 c0 rjmp .+170 ; 0x274 <__bad_interrupt> + 1ca: 00 00 nop + 1cc: 53 c0 rjmp .+166 ; 0x274 <__bad_interrupt> + 1ce: 00 00 nop + 1d0: 51 c0 rjmp .+162 ; 0x274 <__bad_interrupt> + 1d2: 00 00 nop + 1d4: 4f c0 rjmp .+158 ; 0x274 <__bad_interrupt> + 1d6: 00 00 nop + 1d8: 4d c0 rjmp .+154 ; 0x274 <__bad_interrupt> + 1da: 00 00 nop + 1dc: 4b c0 rjmp .+150 ; 0x274 <__bad_interrupt> + 1de: 00 00 nop + 1e0: 49 c0 rjmp .+146 ; 0x274 <__bad_interrupt> + 1e2: 00 00 nop + 1e4: 47 c0 rjmp .+142 ; 0x274 <__bad_interrupt> + 1e6: 00 00 nop + 1e8: 45 c0 rjmp .+138 ; 0x274 <__bad_interrupt> + 1ea: 00 00 nop + 1ec: 43 c0 rjmp .+134 ; 0x274 <__bad_interrupt> + 1ee: 00 00 nop + 1f0: 41 c0 rjmp .+130 ; 0x274 <__bad_interrupt> + 1f2: 00 00 nop + 1f4: 0c 94 eb 10 jmp 0x21d6 ; 0x21d6 <__vector_125> + 1f8: 0c 94 a0 11 jmp 0x2340 ; 0x2340 <__vector_126> + 1fc: 82 01 movw r16, r4 + 1fe: 84 01 movw r16, r8 + 200: 86 01 movw r16, r12 + 202: 88 01 movw r16, r16 + 204: 8a 01 movw r16, r20 + 206: 8f 01 movw r16, r30 + 208: 8c 01 movw r16, r24 + 20a: 8e 01 movw r16, r28 + 20c: 68 09 sbc r22, r8 + 20e: 6a 09 sbc r22, r10 + 210: 80 09 sbc r24, r0 + 212: b6 09 sbc r27, r6 + 214: bf 09 sbc r27, r15 + 216: c4 09 sbc r28, r4 + 218: 13 0a sbc r1, r19 + 21a: 18 0a sbc r1, r24 + 21c: d7 09 sbc r29, r7 + 21e: e0 09 sbc r30, r0 + 220: ee 09 sbc r30, r14 + 222: f0 09 sbc r31, r0 + 224: f2 09 sbc r31, r2 + 226: fc 09 sbc r31, r12 + 228: 06 0a sbc r0, r22 + 22a: 11 0a sbc r1, r17 + 22c: d0 09 sbc r29, r0 + 22e: d9 09 sbc r29, r9 + 230: e2 09 sbc r30, r2 + 232: f0 09 sbc r31, r0 + 234: f2 09 sbc r31, r2 + 236: f4 09 sbc r31, r4 + 238: fe 09 sbc r31, r14 + 23a: 08 0a sbc r0, r24 + +0000023c <__ctors_end>: + 23c: 11 24 eor r1, r1 + 23e: 1f be out 0x3f, r1 ; 63 + 240: cf ef ldi r28, 0xFF ; 255 + 242: cd bf out 0x3d, r28 ; 61 + 244: df e2 ldi r29, 0x2F ; 47 + 246: de bf out 0x3e, r29 ; 62 + +00000248 <__do_copy_data>: + 248: 10 e2 ldi r17, 0x20 ; 32 + 24a: a0 e0 ldi r26, 0x00 ; 0 + 24c: b0 e2 ldi r27, 0x20 ; 32 + 24e: ee e2 ldi r30, 0x2E ; 46 + 250: f5 e2 ldi r31, 0x25 ; 37 + 252: 02 c0 rjmp .+4 ; 0x258 <__do_copy_data+0x10> + 254: 05 90 lpm r0, Z+ + 256: 0d 92 st X+, r0 + 258: a0 3c cpi r26, 0xC0 ; 192 + 25a: b1 07 cpc r27, r17 + 25c: d9 f7 brne .-10 ; 0x254 <__do_copy_data+0xc> + +0000025e <__do_clear_bss>: + 25e: 2c e2 ldi r18, 0x2C ; 44 + 260: a0 ec ldi r26, 0xC0 ; 192 + 262: b0 e2 ldi r27, 0x20 ; 32 + 264: 01 c0 rjmp .+2 ; 0x268 <.do_clear_bss_start> + +00000266 <.do_clear_bss_loop>: + 266: 1d 92 st X+, r1 + +00000268 <.do_clear_bss_start>: + 268: a8 35 cpi r26, 0x58 ; 88 + 26a: b2 07 cpc r27, r18 + 26c: e1 f7 brne .-8 ; 0x266 <.do_clear_bss_loop> + 26e: 1b d0 rcall .+54 ; 0x2a6

    + 270: 0c 94 95 12 jmp 0x252a ; 0x252a <_exit> + +00000274 <__bad_interrupt>: + 274: c5 ce rjmp .-630 ; 0x0 <__vectors> + +00000276 : + 276: e0 e8 ldi r30, 0x80 ; 128 + 278: f6 e0 ldi r31, 0x06 ; 6 + 27a: 8f e0 ldi r24, 0x0F ; 15 + 27c: 80 83 st Z, r24 + 27e: 85 e0 ldi r24, 0x05 ; 5 + 280: 84 83 std Z+4, r24 ; 0x04 + 282: 08 95 ret + +00000284 : + 284: 08 95 ret + +00000286 : + 286: 80 91 c2 20 lds r24, 0x20C2 + 28a: 81 11 cpse r24, r1 + 28c: 03 c0 rjmp .+6 ; 0x294 + 28e: 8e ee ldi r24, 0xEE ; 238 + 290: 92 e0 ldi r25, 0x02 ; 2 + 292: 02 c0 rjmp .+4 ; 0x298 + 294: 80 e0 ldi r24, 0x00 ; 0 + 296: 90 e0 ldi r25, 0x00 ; 0 + 298: 43 e4 ldi r20, 0x43 ; 67 + 29a: 51 e0 ldi r21, 0x01 ; 1 + 29c: 6e ee ldi r22, 0xEE ; 238 + 29e: 72 e0 ldi r23, 0x02 ; 2 + 2a0: 8a 58 subi r24, 0x8A ; 138 + 2a2: 99 4d sbci r25, 0xD9 ; 217 + 2a4: c7 c6 rjmp .+3470 ; 0x1034 + +000002a6
    : + 2a6: 87 e0 ldi r24, 0x07 ; 7 + 2a8: 80 93 a2 00 sts 0x00A2, r24 + 2ac: 78 94 sei + 2ae: 20 d6 rcall .+3136 ; 0xef0 + 2b0: e9 df rcall .-46 ; 0x284 + 2b2: 98 d7 rcall .+3888 ; 0x11e4 + 2b4: b1 d0 rcall .+354 ; 0x418 + 2b6: d4 d0 rcall .+424 ; 0x460 + 2b8: 60 e0 ldi r22, 0x00 ; 0 + 2ba: 80 e0 ldi r24, 0x00 ; 0 + 2bc: 7e d0 rcall .+252 ; 0x3ba + 2be: 6a d0 rcall .+212 ; 0x394 + 2c0: 8c e0 ldi r24, 0x0C ; 12 + 2c2: 5e d0 rcall .+188 ; 0x380 + 2c4: 2f d5 rcall .+2654 ; 0xd24 + 2c6: c8 d5 rcall .+2960 ; 0xe58 + 2c8: e1 d5 rcall .+3010 ; 0xe8c + 2ca: d5 df rcall .-86 ; 0x276 + ... + 2e8: f1 cf rjmp .-30 ; 0x2cc + +000002ea : + 2ea: 08 95 ret + +000002ec : + 2ec: 08 95 ret + +000002ee : + 2ee: 80 91 00 20 lds r24, 0x2000 + 2f2: 90 e0 ldi r25, 0x00 ; 0 + 2f4: 88 30 cpi r24, 0x08 ; 8 + 2f6: 91 05 cpc r25, r1 + 2f8: 90 f4 brcc .+36 ; 0x31e + 2fa: fc 01 movw r30, r24 + 2fc: e2 50 subi r30, 0x02 ; 2 + 2fe: ff 4f sbci r31, 0xFF ; 255 + 300: 0c 94 86 12 jmp 0x250c ; 0x250c <__tablejump2__> + 304: 10 d1 rcall .+544 ; 0x526 + 306: 0b c0 rjmp .+22 ; 0x31e + 308: 8c d1 rcall .+792 ; 0x622 + 30a: 09 c0 rjmp .+18 ; 0x31e + 30c: 2a d2 rcall .+1108 ; 0x762 + 30e: 07 c0 rjmp .+14 ; 0x31e + 310: e5 d2 rcall .+1482 ; 0x8dc + 312: 05 c0 rjmp .+10 ; 0x31e + 314: 79 d3 rcall .+1778 ; 0xa08 + 316: 03 c0 rjmp .+6 ; 0x31e + 318: 60 d4 rcall .+2240 ; 0xbda + 31a: 01 c0 rjmp .+2 ; 0x31e + 31c: d5 d4 rcall .+2474 ; 0xcc8 + 31e: 90 91 c2 20 lds r25, 0x20C2 + 322: 81 e0 ldi r24, 0x01 ; 1 + 324: 91 11 cpse r25, r1 + 326: 80 e0 ldi r24, 0x00 ; 0 + 328: 80 93 c2 20 sts 0x20C2, r24 + 32c: 08 95 ret + +0000032e : + 32e: 81 e0 ldi r24, 0x01 ; 1 + 330: 80 93 c3 20 sts 0x20C3, r24 + 334: 43 e4 ldi r20, 0x43 ; 67 + 336: 51 e0 ldi r21, 0x01 ; 1 + 338: 6e ee ldi r22, 0xEE ; 238 + 33a: 72 e0 ldi r23, 0x02 ; 2 + 33c: 86 e7 ldi r24, 0x76 ; 118 + 33e: 96 e2 ldi r25, 0x26 ; 38 + 340: 79 d6 rcall .+3314 ; 0x1034 + 342: 81 e0 ldi r24, 0x01 ; 1 + 344: 08 95 ret + +00000346 : + 346: 10 92 c3 20 sts 0x20C3, r1 + 34a: 08 95 ret + +0000034c : + 34c: 81 e0 ldi r24, 0x01 ; 1 + 34e: 08 95 ret + +00000350 : + 350: 81 e0 ldi r24, 0x01 ; 1 + 352: 08 95 ret + +00000354 : + 354: 10 92 20 02 sts 0x0220, r1 + 358: 98 2f mov r25, r24 + 35a: 9c 71 andi r25, 0x1C ; 28 + 35c: 93 68 ori r25, 0x83 ; 131 + 35e: 90 93 20 02 sts 0x0220, r25 + 362: 87 fd sbrc r24, 7 + 364: 03 c0 rjmp .+6 ; 0x36c + 366: 90 e0 ldi r25, 0x00 ; 0 + 368: 80 e0 ldi r24, 0x00 ; 0 + 36a: 02 c0 rjmp .+4 ; 0x370 + 36c: 90 e1 ldi r25, 0x10 ; 16 + 36e: 82 e0 ldi r24, 0x02 ; 2 + 370: 89 2b or r24, r25 + 372: 80 93 21 02 sts 0x0221, r24 + 376: 10 92 22 02 sts 0x0222, r1 + 37a: 10 92 26 02 sts 0x0226, r1 + 37e: 08 95 ret + +00000380 : + 380: e0 e0 ldi r30, 0x00 ; 0 + 382: f2 e0 ldi r31, 0x02 ; 2 + 384: 10 aa std Z+48, r1 ; 0x30 + 386: 83 68 ori r24, 0x83 ; 131 + 388: 80 ab std Z+48, r24 ; 0x30 + 38a: 80 e1 ldi r24, 0x10 ; 16 + 38c: 81 ab std Z+49, r24 ; 0x31 + 38e: 12 aa std Z+50, r1 ; 0x32 + 390: 16 aa std Z+54, r1 ; 0x36 + 392: 08 95 ret + +00000394 : + 394: e0 e0 ldi r30, 0x00 ; 0 + 396: f2 e0 ldi r31, 0x02 ; 2 + 398: 10 a6 std Z+40, r1 ; 0x28 + 39a: 83 e8 ldi r24, 0x83 ; 131 + 39c: 80 a7 std Z+40, r24 ; 0x28 + 39e: 8f e2 ldi r24, 0x2F ; 47 + 3a0: 81 a7 std Z+41, r24 ; 0x29 + 3a2: 12 a6 std Z+42, r1 ; 0x2a + 3a4: 16 a6 std Z+46, r1 ; 0x2e + 3a6: 08 95 ret + +000003a8 : + 3a8: 92 e0 ldi r25, 0x02 ; 2 + 3aa: 90 93 ca 01 sts 0x01CA, r25 + 3ae: e8 2f mov r30, r24 + 3b0: f0 e0 ldi r31, 0x00 ; 0 + 3b2: 84 91 lpm r24, Z + 3b4: 10 92 ca 01 sts 0x01CA, r1 + 3b8: 08 95 ret + +000003ba : + 3ba: 90 91 71 00 lds r25, 0x0071 + 3be: 9d 7f andi r25, 0xFD ; 253 + 3c0: 90 93 71 00 sts 0x0071, r25 + 3c4: 10 92 00 02 sts 0x0200, r1 + 3c8: 62 30 cpi r22, 0x02 ; 2 + 3ca: 11 f4 brne .+4 ; 0x3d0 + 3cc: 9e e1 ldi r25, 0x1E ; 30 + 3ce: 01 c0 rjmp .+2 ; 0x3d2 + 3d0: 9c e1 ldi r25, 0x1C ; 28 + 3d2: 90 93 01 02 sts 0x0201, r25 + 3d6: 90 e4 ldi r25, 0x40 ; 64 + 3d8: 90 93 02 02 sts 0x0202, r25 + 3dc: 88 23 and r24, r24 + 3de: 11 f0 breq .+4 ; 0x3e4 + 3e0: 80 ec ldi r24, 0xC0 ; 192 + 3e2: 01 c0 rjmp .+2 ; 0x3e6 + 3e4: 80 e4 ldi r24, 0x40 ; 64 + 3e6: 80 93 03 02 sts 0x0203, r24 + 3ea: 61 30 cpi r22, 0x01 ; 1 + 3ec: 11 f4 brne .+4 ; 0x3f2 + 3ee: 82 e0 ldi r24, 0x02 ; 2 + 3f0: 01 c0 rjmp .+2 ; 0x3f4 + 3f2: 83 e0 ldi r24, 0x03 ; 3 + 3f4: 80 93 04 02 sts 0x0204, r24 + 3f8: 80 e2 ldi r24, 0x20 ; 32 + 3fa: d6 df rcall .-84 ; 0x3a8 + 3fc: 80 93 0c 02 sts 0x020C, r24 + 400: 81 e2 ldi r24, 0x21 ; 33 + 402: d2 df rcall .-92 ; 0x3a8 + 404: 80 93 0d 02 sts 0x020D, r24 + 408: 10 92 18 02 sts 0x0218, r1 + 40c: 10 92 19 02 sts 0x0219, r1 + 410: 81 e0 ldi r24, 0x01 ; 1 + 412: 80 93 00 02 sts 0x0200, r24 + 416: be cf rjmp .-132 ; 0x394 + +00000418 : + 418: cf 93 push r28 + 41a: df 93 push r29 + 41c: e0 e7 ldi r30, 0x70 ; 112 + 41e: f0 e0 ldi r31, 0x00 ; 0 + 420: 82 81 ldd r24, Z+2 ; 0x02 + 422: 8b 7f andi r24, 0xFB ; 251 + 424: 82 83 std Z+2, r24 ; 0x02 + 426: c0 e2 ldi r28, 0x20 ; 32 + 428: d3 e0 ldi r29, 0x03 ; 3 + 42a: 8d e0 ldi r24, 0x0D ; 13 + 42c: 88 83 st Y, r24 + 42e: 80 e4 ldi r24, 0x40 ; 64 + 430: 89 83 std Y+1, r24 ; 0x01 + 432: 89 e0 ldi r24, 0x09 ; 9 + 434: 8a 83 std Y+2, r24 ; 0x02 + 436: 83 e3 ldi r24, 0x33 ; 51 + 438: b7 df rcall .-146 ; 0x3a8 + 43a: 88 87 std Y+8, r24 ; 0x08 + 43c: 82 e3 ldi r24, 0x32 ; 50 + 43e: b4 df rcall .-152 ; 0x3a8 + 440: 89 87 std Y+9, r24 ; 0x09 + 442: 87 e3 ldi r24, 0x37 ; 55 + 444: b1 df rcall .-158 ; 0x3a8 + 446: 8a 87 std Y+10, r24 ; 0x0a + 448: 86 e3 ldi r24, 0x36 ; 54 + 44a: ae df rcall .-164 ; 0x3a8 + 44c: 8b 87 std Y+11, r24 ; 0x0b + 44e: e0 e2 ldi r30, 0x20 ; 32 + 450: f6 e0 ldi r31, 0x06 ; 6 + 452: 80 81 ld r24, Z + 454: 83 60 ori r24, 0x03 ; 3 + 456: 80 83 st Z, r24 + 458: 14 82 std Z+4, r1 ; 0x04 + 45a: df 91 pop r29 + 45c: cf 91 pop r28 + 45e: 08 95 ret + +00000460 : + 460: e0 e7 ldi r30, 0x70 ; 112 + 462: f0 e0 ldi r31, 0x00 ; 0 + 464: 80 81 ld r24, Z + 466: 8e 7f andi r24, 0xFE ; 254 + 468: 80 83 st Z, r24 + 46a: 80 e8 ldi r24, 0x80 ; 128 + 46c: 80 93 00 01 sts 0x0100, r24 + 470: 08 95 ret + +00000472 : + 472: e0 e0 ldi r30, 0x00 ; 0 + 474: f1 e0 ldi r31, 0x01 ; 1 + 476: 10 8a std Z+16, r1 ; 0x10 + 478: 80 e4 ldi r24, 0x40 ; 64 + 47a: 80 8b std Z+16, r24 ; 0x10 + 47c: 10 a2 std Z+32, r1 ; 0x20 + 47e: 80 a3 std Z+32, r24 ; 0x20 + 480: 10 aa std Z+48, r1 ; 0x30 + 482: 80 ab std Z+48, r24 ; 0x30 + 484: e0 e4 ldi r30, 0x40 ; 64 + 486: f1 e0 ldi r31, 0x01 ; 1 + 488: 10 82 st Z, r1 + 48a: 80 83 st Z, r24 + 48c: 10 92 c2 20 sts 0x20C2, r1 + 490: 10 92 c1 20 sts 0x20C1, r1 + 494: 08 95 ret + +00000496 : + 496: 10 92 00 20 sts 0x2000, r1 + 49a: eb df rcall .-42 ; 0x472 + 49c: e0 e0 ldi r30, 0x00 ; 0 + 49e: f1 e0 ldi r31, 0x01 ; 1 + 4a0: 16 aa std Z+54, r1 ; 0x36 + 4a2: 44 e2 ldi r20, 0x24 ; 36 + 4a4: 40 ab std Z+48, r20 ; 0x30 + 4a6: 11 aa std Z+49, r1 ; 0x31 + 4a8: 39 e5 ldi r19, 0x59 ; 89 + 4aa: 32 ab std Z+50, r19 ; 0x32 + 4ac: 82 e0 ldi r24, 0x02 ; 2 + 4ae: 83 ab std Z+51, r24 ; 0x33 + 4b0: 80 91 02 20 lds r24, 0x2002 + 4b4: 90 91 03 20 lds r25, 0x2003 + 4b8: 84 ab std Z+52, r24 ; 0x34 + 4ba: 95 ab std Z+53, r25 ; 0x35 + 4bc: 86 e7 ldi r24, 0x76 ; 118 + 4be: 94 e2 ldi r25, 0x24 ; 36 + 4c0: 80 af std Z+56, r24 ; 0x38 + 4c2: 91 af std Z+57, r25 ; 0x39 + 4c4: 12 ae std Z+58, r1 ; 0x3a + 4c6: 8b e3 ldi r24, 0x3B ; 59 + 4c8: 84 af std Z+60, r24 ; 0x3c + 4ca: 23 e0 ldi r18, 0x03 ; 3 + 4cc: 20 93 3d 01 sts 0x013D, r18 + 4d0: 10 92 3e 01 sts 0x013E, r1 + 4d4: 80 a9 ldd r24, Z+48 ; 0x30 + 4d6: 80 68 ori r24, 0x80 ; 128 + 4d8: 80 ab std Z+48, r24 ; 0x30 + 4da: 10 92 46 01 sts 0x0146, r1 + 4de: e0 e4 ldi r30, 0x40 ; 64 + 4e0: f1 e0 ldi r31, 0x01 ; 1 + 4e2: 40 83 st Z, r20 + 4e4: 10 92 41 01 sts 0x0141, r1 + 4e8: 30 93 42 01 sts 0x0142, r19 + 4ec: 20 93 43 01 sts 0x0143, r18 + 4f0: 80 91 04 20 lds r24, 0x2004 + 4f4: 90 91 05 20 lds r25, 0x2005 + 4f8: 80 93 44 01 sts 0x0144, r24 + 4fc: 90 93 45 01 sts 0x0145, r25 + 500: 86 e6 ldi r24, 0x66 ; 102 + 502: 92 e2 ldi r25, 0x22 ; 34 + 504: 80 93 48 01 sts 0x0148, r24 + 508: 90 93 49 01 sts 0x0149, r25 + 50c: 10 92 4a 01 sts 0x014A, r1 + 510: 89 e3 ldi r24, 0x39 ; 57 + 512: 80 93 4c 01 sts 0x014C, r24 + 516: 20 93 4d 01 sts 0x014D, r18 + 51a: 10 92 4e 01 sts 0x014E, r1 + 51e: 80 81 ld r24, Z + 520: 80 68 ori r24, 0x80 ; 128 + 522: 80 83 st Z, r24 + 524: 08 95 ret + +00000526 : + 526: e0 e0 ldi r30, 0x00 ; 0 + 528: f1 e0 ldi r31, 0x01 ; 1 + 52a: 10 8a std Z+16, r1 ; 0x10 + 52c: 80 e4 ldi r24, 0x40 ; 64 + 52e: 80 8b std Z+16, r24 ; 0x10 + 530: 84 e0 ldi r24, 0x04 ; 4 + 532: 80 8b std Z+16, r24 ; 0x10 + 534: 11 8a std Z+17, r1 ; 0x11 + 536: 81 e9 ldi r24, 0x91 ; 145 + 538: 82 8b std Z+18, r24 ; 0x12 + 53a: 80 e1 ldi r24, 0x10 ; 16 + 53c: 83 8b std Z+19, r24 ; 0x13 + 53e: 87 e7 ldi r24, 0x77 ; 119 + 540: 91 e0 ldi r25, 0x01 ; 1 + 542: 84 8b std Z+20, r24 ; 0x14 + 544: 95 8b std Z+21, r25 ; 0x15 + 546: 84 e2 ldi r24, 0x24 ; 36 + 548: 80 8f std Z+24, r24 ; 0x18 + 54a: 82 e0 ldi r24, 0x02 ; 2 + 54c: 81 8f std Z+25, r24 ; 0x19 + 54e: 12 8e std Z+26, r1 ; 0x1a + 550: 40 91 c2 20 lds r20, 0x20C2 + 554: 2e ee ldi r18, 0xEE ; 238 + 556: 32 e0 ldi r19, 0x02 ; 2 + 558: 42 9f mul r20, r18 + 55a: c0 01 movw r24, r0 + 55c: 43 9f mul r20, r19 + 55e: 90 0d add r25, r0 + 560: 11 24 eor r1, r1 + 562: 8a 58 subi r24, 0x8A ; 138 + 564: 99 4d sbci r25, 0xD9 ; 217 + 566: 84 8f std Z+28, r24 ; 0x1c + 568: 40 91 c2 20 lds r20, 0x20C2 + 56c: 42 9f mul r20, r18 + 56e: c0 01 movw r24, r0 + 570: 43 9f mul r20, r19 + 572: 90 0d add r25, r0 + 574: 11 24 eor r1, r1 + 576: 8a 58 subi r24, 0x8A ; 138 + 578: 99 4d sbci r25, 0xD9 ; 217 + 57a: 95 8f std Z+29, r25 ; 0x1d + 57c: 16 8e std Z+30, r1 ; 0x1e + 57e: 80 89 ldd r24, Z+16 ; 0x10 + 580: 80 68 ori r24, 0x80 ; 128 + 582: 80 8b std Z+16, r24 ; 0x10 + 584: 08 95 ret + +00000586 : + 586: 81 e0 ldi r24, 0x01 ; 1 + 588: 80 93 00 20 sts 0x2000, r24 + 58c: 72 df rcall .-284 ; 0x472 + 58e: e0 e0 ldi r30, 0x00 ; 0 + 590: f1 e0 ldi r31, 0x01 ; 1 + 592: 10 aa std Z+48, r1 ; 0x30 + 594: 80 e4 ldi r24, 0x40 ; 64 + 596: 80 ab std Z+48, r24 ; 0x30 + 598: 84 e0 ldi r24, 0x04 ; 4 + 59a: 80 ab std Z+48, r24 ; 0x30 + 59c: 11 aa std Z+49, r1 ; 0x31 + 59e: 12 aa std Z+50, r1 ; 0x32 + 5a0: 8b e4 ldi r24, 0x4B ; 75 + 5a2: 83 ab std Z+51, r24 ; 0x33 + 5a4: 14 aa std Z+52, r1 ; 0x34 + 5a6: 15 aa std Z+53, r1 ; 0x35 + 5a8: 16 aa std Z+54, r1 ; 0x36 + 5aa: 81 e0 ldi r24, 0x01 ; 1 + 5ac: 90 e2 ldi r25, 0x20 ; 32 + 5ae: 80 af std Z+56, r24 ; 0x38 + 5b0: 91 af std Z+57, r25 ; 0x39 + 5b2: 12 ae std Z+58, r1 ; 0x3a + 5b4: 80 ea ldi r24, 0xA0 ; 160 + 5b6: 84 af std Z+60, r24 ; 0x3c + 5b8: 88 e0 ldi r24, 0x08 ; 8 + 5ba: 80 93 3d 01 sts 0x013D, r24 + 5be: 10 92 3e 01 sts 0x013E, r1 + 5c2: 80 a9 ldd r24, Z+48 ; 0x30 + 5c4: 80 6a ori r24, 0xA0 ; 160 + 5c6: 80 ab std Z+48, r24 ; 0x30 + 5c8: 85 e5 ldi r24, 0x55 ; 85 + 5ca: 80 93 a0 08 sts 0x08A0, r24 + 5ce: 10 92 46 01 sts 0x0146, r1 + 5d2: e0 e4 ldi r30, 0x40 ; 64 + 5d4: f1 e0 ldi r31, 0x01 ; 1 + 5d6: 84 e2 ldi r24, 0x24 ; 36 + 5d8: 80 83 st Z, r24 + 5da: 10 92 41 01 sts 0x0141, r1 + 5de: 89 e5 ldi r24, 0x59 ; 89 + 5e0: 80 93 42 01 sts 0x0142, r24 + 5e4: 82 e0 ldi r24, 0x02 ; 2 + 5e6: 80 93 43 01 sts 0x0143, r24 + 5ea: 80 91 02 20 lds r24, 0x2002 + 5ee: 90 91 03 20 lds r25, 0x2003 + 5f2: 80 93 44 01 sts 0x0144, r24 + 5f6: 90 93 45 01 sts 0x0145, r25 + 5fa: 86 e6 ldi r24, 0x66 ; 102 + 5fc: 92 e2 ldi r25, 0x22 ; 34 + 5fe: 80 93 48 01 sts 0x0148, r24 + 602: 90 93 49 01 sts 0x0149, r25 + 606: 10 92 4a 01 sts 0x014A, r1 + 60a: 8b e3 ldi r24, 0x3B ; 59 + 60c: 80 93 4c 01 sts 0x014C, r24 + 610: 83 e0 ldi r24, 0x03 ; 3 + 612: 80 93 4d 01 sts 0x014D, r24 + 616: 10 92 4e 01 sts 0x014E, r1 + 61a: 80 81 ld r24, Z + 61c: 80 68 ori r24, 0x80 ; 128 + 61e: 80 83 st Z, r24 + 620: 08 95 ret + +00000622 : + 622: e0 e0 ldi r30, 0x00 ; 0 + 624: f1 e0 ldi r31, 0x01 ; 1 + 626: 10 8a std Z+16, r1 ; 0x10 + 628: a0 e4 ldi r26, 0x40 ; 64 + 62a: a0 8b std Z+16, r26 ; 0x10 + 62c: 74 e0 ldi r23, 0x04 ; 4 + 62e: 70 8b std Z+16, r23 ; 0x10 + 630: 11 8a std Z+17, r1 ; 0x11 + 632: 61 e9 ldi r22, 0x91 ; 145 + 634: 62 8b std Z+18, r22 ; 0x12 + 636: 80 e1 ldi r24, 0x10 ; 16 + 638: 83 8b std Z+19, r24 ; 0x13 + 63a: 47 e7 ldi r20, 0x77 ; 119 + 63c: 51 e0 ldi r21, 0x01 ; 1 + 63e: 44 8b std Z+20, r20 ; 0x14 + 640: 55 8b std Z+21, r21 ; 0x15 + 642: 84 e2 ldi r24, 0x24 ; 36 + 644: 80 8f std Z+24, r24 ; 0x18 + 646: 82 e0 ldi r24, 0x02 ; 2 + 648: 81 8f std Z+25, r24 ; 0x19 + 64a: 12 8e std Z+26, r1 ; 0x1a + 64c: b0 91 c2 20 lds r27, 0x20C2 + 650: 8e ee ldi r24, 0xEE ; 238 + 652: 92 e0 ldi r25, 0x02 ; 2 + 654: b8 9f mul r27, r24 + 656: 90 01 movw r18, r0 + 658: b9 9f mul r27, r25 + 65a: 30 0d add r19, r0 + 65c: 11 24 eor r1, r1 + 65e: 2a 58 subi r18, 0x8A ; 138 + 660: 39 4d sbci r19, 0xD9 ; 217 + 662: 24 8f std Z+28, r18 ; 0x1c + 664: b0 91 c2 20 lds r27, 0x20C2 + 668: b8 9f mul r27, r24 + 66a: 90 01 movw r18, r0 + 66c: b9 9f mul r27, r25 + 66e: 30 0d add r19, r0 + 670: 11 24 eor r1, r1 + 672: 2a 58 subi r18, 0x8A ; 138 + 674: 39 4d sbci r19, 0xD9 ; 217 + 676: 35 8f std Z+29, r19 ; 0x1d + 678: 16 8e std Z+30, r1 ; 0x1e + 67a: 20 89 ldd r18, Z+16 ; 0x10 + 67c: 20 68 ori r18, 0x80 ; 128 + 67e: 20 8b std Z+16, r18 ; 0x10 + 680: 10 a2 std Z+32, r1 ; 0x20 + 682: a0 a3 std Z+32, r26 ; 0x20 + 684: 70 a3 std Z+32, r23 ; 0x20 + 686: 11 a2 std Z+33, r1 ; 0x21 + 688: 62 a3 std Z+34, r22 ; 0x22 + 68a: 2b e4 ldi r18, 0x4B ; 75 + 68c: 23 a3 std Z+35, r18 ; 0x23 + 68e: 44 a3 std Z+36, r20 ; 0x24 + 690: 55 a3 std Z+37, r21 ; 0x25 + 692: 20 ea ldi r18, 0xA0 ; 160 + 694: 20 a7 std Z+40, r18 ; 0x28 + 696: 28 e0 ldi r18, 0x08 ; 8 + 698: 21 a7 std Z+41, r18 ; 0x29 + 69a: 12 a6 std Z+42, r1 ; 0x2a + 69c: 40 91 c2 20 lds r20, 0x20C2 + 6a0: 48 9f mul r20, r24 + 6a2: 90 01 movw r18, r0 + 6a4: 49 9f mul r20, r25 + 6a6: 30 0d add r19, r0 + 6a8: 11 24 eor r1, r1 + 6aa: 23 51 subi r18, 0x13 ; 19 + 6ac: 38 4d sbci r19, 0xD8 ; 216 + 6ae: 24 a7 std Z+44, r18 ; 0x2c + 6b0: 40 91 c2 20 lds r20, 0x20C2 + 6b4: 48 9f mul r20, r24 + 6b6: 90 01 movw r18, r0 + 6b8: 49 9f mul r20, r25 + 6ba: 30 0d add r19, r0 + 6bc: 11 24 eor r1, r1 + 6be: 23 51 subi r18, 0x13 ; 19 + 6c0: 38 4d sbci r19, 0xD8 ; 216 + 6c2: 35 a7 std Z+45, r19 ; 0x2d + 6c4: 16 a6 std Z+46, r1 ; 0x2e + 6c6: 80 a1 ldd r24, Z+32 ; 0x20 + 6c8: 80 68 ori r24, 0x80 ; 128 + 6ca: 80 a3 std Z+32, r24 ; 0x20 + 6cc: 08 95 ret + +000006ce : + 6ce: cf 93 push r28 + 6d0: c2 e0 ldi r28, 0x02 ; 2 + 6d2: c0 93 00 20 sts 0x2000, r28 + 6d6: cd de rcall .-614 ; 0x472 + 6d8: e0 e0 ldi r30, 0x00 ; 0 + 6da: f1 e0 ldi r31, 0x01 ; 1 + 6dc: 16 aa std Z+54, r1 ; 0x36 + 6de: 44 e2 ldi r20, 0x24 ; 36 + 6e0: 40 ab std Z+48, r20 ; 0x30 + 6e2: 11 aa std Z+49, r1 ; 0x31 + 6e4: 39 e5 ldi r19, 0x59 ; 89 + 6e6: 32 ab std Z+50, r19 ; 0x32 + 6e8: 23 e0 ldi r18, 0x03 ; 3 + 6ea: 23 ab std Z+51, r18 ; 0x33 + 6ec: 80 91 04 20 lds r24, 0x2004 + 6f0: 90 91 05 20 lds r25, 0x2005 + 6f4: 84 ab std Z+52, r24 ; 0x34 + 6f6: 95 ab std Z+53, r25 ; 0x35 + 6f8: 86 e6 ldi r24, 0x66 ; 102 + 6fa: 92 e2 ldi r25, 0x22 ; 34 + 6fc: 80 af std Z+56, r24 ; 0x38 + 6fe: 91 af std Z+57, r25 ; 0x39 + 700: 12 ae std Z+58, r1 ; 0x3a + 702: 89 e3 ldi r24, 0x39 ; 57 + 704: 84 af std Z+60, r24 ; 0x3c + 706: 20 93 3d 01 sts 0x013D, r18 + 70a: 10 92 3e 01 sts 0x013E, r1 + 70e: 80 a9 ldd r24, Z+48 ; 0x30 + 710: 80 68 ori r24, 0x80 ; 128 + 712: 80 ab std Z+48, r24 ; 0x30 + 714: 10 92 46 01 sts 0x0146, r1 + 718: e0 e4 ldi r30, 0x40 ; 64 + 71a: f1 e0 ldi r31, 0x01 ; 1 + 71c: 40 83 st Z, r20 + 71e: 10 92 41 01 sts 0x0141, r1 + 722: 30 93 42 01 sts 0x0142, r19 + 726: c0 93 43 01 sts 0x0143, r28 + 72a: 80 91 02 20 lds r24, 0x2002 + 72e: 90 91 03 20 lds r25, 0x2003 + 732: 80 93 44 01 sts 0x0144, r24 + 736: 90 93 45 01 sts 0x0145, r25 + 73a: 86 e7 ldi r24, 0x76 ; 118 + 73c: 94 e2 ldi r25, 0x24 ; 36 + 73e: 80 93 48 01 sts 0x0148, r24 + 742: 90 93 49 01 sts 0x0149, r25 + 746: 10 92 4a 01 sts 0x014A, r1 + 74a: 8b e3 ldi r24, 0x3B ; 59 + 74c: 80 93 4c 01 sts 0x014C, r24 + 750: 20 93 4d 01 sts 0x014D, r18 + 754: 10 92 4e 01 sts 0x014E, r1 + 758: 80 81 ld r24, Z + 75a: 80 68 ori r24, 0x80 ; 128 + 75c: 80 83 st Z, r24 + 75e: cf 91 pop r28 + 760: 08 95 ret + +00000762 : + 762: cf 93 push r28 + 764: e0 e0 ldi r30, 0x00 ; 0 + 766: f1 e0 ldi r31, 0x01 ; 1 + 768: 10 8a std Z+16, r1 ; 0x10 + 76a: b0 e4 ldi r27, 0x40 ; 64 + 76c: b0 8b std Z+16, r27 ; 0x10 + 76e: a4 e0 ldi r26, 0x04 ; 4 + 770: a0 8b std Z+16, r26 ; 0x10 + 772: 11 8a std Z+17, r1 ; 0x11 + 774: 71 e9 ldi r23, 0x91 ; 145 + 776: 72 8b std Z+18, r23 ; 0x12 + 778: 80 e1 ldi r24, 0x10 ; 16 + 77a: 83 8b std Z+19, r24 ; 0x13 + 77c: 47 e7 ldi r20, 0x77 ; 119 + 77e: 51 e0 ldi r21, 0x01 ; 1 + 780: 44 8b std Z+20, r20 ; 0x14 + 782: 55 8b std Z+21, r21 ; 0x15 + 784: 84 e2 ldi r24, 0x24 ; 36 + 786: 80 8f std Z+24, r24 ; 0x18 + 788: 62 e0 ldi r22, 0x02 ; 2 + 78a: 61 8f std Z+25, r22 ; 0x19 + 78c: 12 8e std Z+26, r1 ; 0x1a + 78e: c0 91 c2 20 lds r28, 0x20C2 + 792: 8e ee ldi r24, 0xEE ; 238 + 794: 92 e0 ldi r25, 0x02 ; 2 + 796: c8 9f mul r28, r24 + 798: 90 01 movw r18, r0 + 79a: c9 9f mul r28, r25 + 79c: 30 0d add r19, r0 + 79e: 11 24 eor r1, r1 + 7a0: 2a 58 subi r18, 0x8A ; 138 + 7a2: 39 4d sbci r19, 0xD9 ; 217 + 7a4: 24 8f std Z+28, r18 ; 0x1c + 7a6: c0 91 c2 20 lds r28, 0x20C2 + 7aa: c8 9f mul r28, r24 + 7ac: 90 01 movw r18, r0 + 7ae: c9 9f mul r28, r25 + 7b0: 30 0d add r19, r0 + 7b2: 11 24 eor r1, r1 + 7b4: 2a 58 subi r18, 0x8A ; 138 + 7b6: 39 4d sbci r19, 0xD9 ; 217 + 7b8: 35 8f std Z+29, r19 ; 0x1d + 7ba: 16 8e std Z+30, r1 ; 0x1e + 7bc: 20 89 ldd r18, Z+16 ; 0x10 + 7be: 20 68 ori r18, 0x80 ; 128 + 7c0: 20 8b std Z+16, r18 ; 0x10 + 7c2: 10 a2 std Z+32, r1 ; 0x20 + 7c4: b0 a3 std Z+32, r27 ; 0x20 + 7c6: a0 a3 std Z+32, r26 ; 0x20 + 7c8: 11 a2 std Z+33, r1 ; 0x21 + 7ca: 72 a3 std Z+34, r23 ; 0x22 + 7cc: 22 e1 ldi r18, 0x12 ; 18 + 7ce: 23 a3 std Z+35, r18 ; 0x23 + 7d0: 44 a3 std Z+36, r20 ; 0x24 + 7d2: 55 a3 std Z+37, r21 ; 0x25 + 7d4: 24 e3 ldi r18, 0x34 ; 52 + 7d6: 20 a7 std Z+40, r18 ; 0x28 + 7d8: 61 a7 std Z+41, r22 ; 0x29 + 7da: 12 a6 std Z+42, r1 ; 0x2a + 7dc: 40 91 c2 20 lds r20, 0x20C2 + 7e0: 48 9f mul r20, r24 + 7e2: 90 01 movw r18, r0 + 7e4: 49 9f mul r20, r25 + 7e6: 30 0d add r19, r0 + 7e8: 11 24 eor r1, r1 + 7ea: 23 51 subi r18, 0x13 ; 19 + 7ec: 38 4d sbci r19, 0xD8 ; 216 + 7ee: 24 a7 std Z+44, r18 ; 0x2c + 7f0: 40 91 c2 20 lds r20, 0x20C2 + 7f4: 48 9f mul r20, r24 + 7f6: 90 01 movw r18, r0 + 7f8: 49 9f mul r20, r25 + 7fa: 30 0d add r19, r0 + 7fc: 11 24 eor r1, r1 + 7fe: 23 51 subi r18, 0x13 ; 19 + 800: 38 4d sbci r19, 0xD8 ; 216 + 802: 35 a7 std Z+45, r19 ; 0x2d + 804: 16 a6 std Z+46, r1 ; 0x2e + 806: 80 a1 ldd r24, Z+32 ; 0x20 + 808: 80 68 ori r24, 0x80 ; 128 + 80a: 80 a3 std Z+32, r24 ; 0x20 + 80c: cf 91 pop r28 + 80e: 08 95 ret + +00000810 : + 810: cf 93 push r28 + 812: c3 e0 ldi r28, 0x03 ; 3 + 814: c0 93 00 20 sts 0x2000, r28 + 818: 2c de rcall .-936 ; 0x472 + 81a: e0 e0 ldi r30, 0x00 ; 0 + 81c: f1 e0 ldi r31, 0x01 ; 1 + 81e: 10 a2 std Z+32, r1 ; 0x20 + 820: 80 e4 ldi r24, 0x40 ; 64 + 822: 80 a3 std Z+32, r24 ; 0x20 + 824: 84 e0 ldi r24, 0x04 ; 4 + 826: 80 a3 std Z+32, r24 ; 0x20 + 828: 11 a2 std Z+33, r1 ; 0x21 + 82a: 12 a2 std Z+34, r1 ; 0x22 + 82c: 8b e4 ldi r24, 0x4B ; 75 + 82e: 83 a3 std Z+35, r24 ; 0x23 + 830: 14 a2 std Z+36, r1 ; 0x24 + 832: 15 a2 std Z+37, r1 ; 0x25 + 834: 16 a2 std Z+38, r1 ; 0x26 + 836: 81 e0 ldi r24, 0x01 ; 1 + 838: 90 e2 ldi r25, 0x20 ; 32 + 83a: 80 a7 std Z+40, r24 ; 0x28 + 83c: 91 a7 std Z+41, r25 ; 0x29 + 83e: 12 a6 std Z+42, r1 ; 0x2a + 840: 80 ea ldi r24, 0xA0 ; 160 + 842: 84 a7 std Z+44, r24 ; 0x2c + 844: 88 e0 ldi r24, 0x08 ; 8 + 846: 85 a7 std Z+45, r24 ; 0x2d + 848: 16 a6 std Z+46, r1 ; 0x2e + 84a: 80 a1 ldd r24, Z+32 ; 0x20 + 84c: 80 6a ori r24, 0xA0 ; 160 + 84e: 80 a3 std Z+32, r24 ; 0x20 + 850: 85 e5 ldi r24, 0x55 ; 85 + 852: 80 93 a0 08 sts 0x08A0, r24 + 856: 16 aa std Z+54, r1 ; 0x36 + 858: 34 e2 ldi r19, 0x24 ; 36 + 85a: 30 ab std Z+48, r19 ; 0x30 + 85c: 11 aa std Z+49, r1 ; 0x31 + 85e: 29 e5 ldi r18, 0x59 ; 89 + 860: 22 ab std Z+50, r18 ; 0x32 + 862: 82 e0 ldi r24, 0x02 ; 2 + 864: 83 ab std Z+51, r24 ; 0x33 + 866: 80 91 02 20 lds r24, 0x2002 + 86a: 90 91 03 20 lds r25, 0x2003 + 86e: 84 ab std Z+52, r24 ; 0x34 + 870: 95 ab std Z+53, r25 ; 0x35 + 872: 86 e7 ldi r24, 0x76 ; 118 + 874: 94 e2 ldi r25, 0x24 ; 36 + 876: 80 af std Z+56, r24 ; 0x38 + 878: 91 af std Z+57, r25 ; 0x39 + 87a: 12 ae std Z+58, r1 ; 0x3a + 87c: 8b e3 ldi r24, 0x3B ; 59 + 87e: 84 af std Z+60, r24 ; 0x3c + 880: c0 93 3d 01 sts 0x013D, r28 + 884: 10 92 3e 01 sts 0x013E, r1 + 888: 80 a9 ldd r24, Z+48 ; 0x30 + 88a: 80 68 ori r24, 0x80 ; 128 + 88c: 80 ab std Z+48, r24 ; 0x30 + 88e: 10 92 46 01 sts 0x0146, r1 + 892: e0 e4 ldi r30, 0x40 ; 64 + 894: f1 e0 ldi r31, 0x01 ; 1 + 896: 30 83 st Z, r19 + 898: 10 92 41 01 sts 0x0141, r1 + 89c: 20 93 42 01 sts 0x0142, r18 + 8a0: c0 93 43 01 sts 0x0143, r28 + 8a4: 80 91 04 20 lds r24, 0x2004 + 8a8: 90 91 05 20 lds r25, 0x2005 + 8ac: 80 93 44 01 sts 0x0144, r24 + 8b0: 90 93 45 01 sts 0x0145, r25 + 8b4: 86 e6 ldi r24, 0x66 ; 102 + 8b6: 92 e2 ldi r25, 0x22 ; 34 + 8b8: 80 93 48 01 sts 0x0148, r24 + 8bc: 90 93 49 01 sts 0x0149, r25 + 8c0: 10 92 4a 01 sts 0x014A, r1 + 8c4: 89 e3 ldi r24, 0x39 ; 57 + 8c6: 80 93 4c 01 sts 0x014C, r24 + 8ca: c0 93 4d 01 sts 0x014D, r28 + 8ce: 10 92 4e 01 sts 0x014E, r1 + 8d2: 80 81 ld r24, Z + 8d4: 80 68 ori r24, 0x80 ; 128 + 8d6: 80 83 st Z, r24 + 8d8: cf 91 pop r28 + 8da: 08 95 ret + +000008dc : + 8dc: e0 e0 ldi r30, 0x00 ; 0 + 8de: f1 e0 ldi r31, 0x01 ; 1 + 8e0: 10 8a std Z+16, r1 ; 0x10 + 8e2: 80 e4 ldi r24, 0x40 ; 64 + 8e4: 80 8b std Z+16, r24 ; 0x10 + 8e6: 84 e0 ldi r24, 0x04 ; 4 + 8e8: 80 8b std Z+16, r24 ; 0x10 + 8ea: 11 8a std Z+17, r1 ; 0x11 + 8ec: 81 e9 ldi r24, 0x91 ; 145 + 8ee: 82 8b std Z+18, r24 ; 0x12 + 8f0: 8b e4 ldi r24, 0x4B ; 75 + 8f2: 83 8b std Z+19, r24 ; 0x13 + 8f4: 87 e7 ldi r24, 0x77 ; 119 + 8f6: 91 e0 ldi r25, 0x01 ; 1 + 8f8: 84 8b std Z+20, r24 ; 0x14 + 8fa: 95 8b std Z+21, r25 ; 0x15 + 8fc: 80 ea ldi r24, 0xA0 ; 160 + 8fe: 80 8f std Z+24, r24 ; 0x18 + 900: 88 e0 ldi r24, 0x08 ; 8 + 902: 81 8f std Z+25, r24 ; 0x19 + 904: 12 8e std Z+26, r1 ; 0x1a + 906: 40 91 c2 20 lds r20, 0x20C2 + 90a: 2e ee ldi r18, 0xEE ; 238 + 90c: 32 e0 ldi r19, 0x02 ; 2 + 90e: 42 9f mul r20, r18 + 910: c0 01 movw r24, r0 + 912: 43 9f mul r20, r19 + 914: 90 0d add r25, r0 + 916: 11 24 eor r1, r1 + 918: 8a 58 subi r24, 0x8A ; 138 + 91a: 99 4d sbci r25, 0xD9 ; 217 + 91c: 84 8f std Z+28, r24 ; 0x1c + 91e: 40 91 c2 20 lds r20, 0x20C2 + 922: 42 9f mul r20, r18 + 924: c0 01 movw r24, r0 + 926: 43 9f mul r20, r19 + 928: 90 0d add r25, r0 + 92a: 11 24 eor r1, r1 + 92c: 8a 58 subi r24, 0x8A ; 138 + 92e: 99 4d sbci r25, 0xD9 ; 217 + 930: 95 8f std Z+29, r25 ; 0x1d + 932: 16 8e std Z+30, r1 ; 0x1e + 934: 80 89 ldd r24, Z+16 ; 0x10 + 936: 80 68 ori r24, 0x80 ; 128 + 938: 80 8b std Z+16, r24 ; 0x10 + 93a: 08 95 ret + +0000093c : + 93c: cf 93 push r28 + 93e: c4 e0 ldi r28, 0x04 ; 4 + 940: c0 93 00 20 sts 0x2000, r28 + 944: 96 dd rcall .-1236 ; 0x472 + 946: e0 e0 ldi r30, 0x00 ; 0 + 948: f1 e0 ldi r31, 0x01 ; 1 + 94a: 10 a2 std Z+32, r1 ; 0x20 + 94c: 80 e4 ldi r24, 0x40 ; 64 + 94e: 80 a3 std Z+32, r24 ; 0x20 + 950: c0 a3 std Z+32, r28 ; 0x20 + 952: 11 a2 std Z+33, r1 ; 0x21 + 954: 12 a2 std Z+34, r1 ; 0x22 + 956: 8b e4 ldi r24, 0x4B ; 75 + 958: 83 a3 std Z+35, r24 ; 0x23 + 95a: 14 a2 std Z+36, r1 ; 0x24 + 95c: 15 a2 std Z+37, r1 ; 0x25 + 95e: 16 a2 std Z+38, r1 ; 0x26 + 960: 81 e0 ldi r24, 0x01 ; 1 + 962: 90 e2 ldi r25, 0x20 ; 32 + 964: 80 a7 std Z+40, r24 ; 0x28 + 966: 91 a7 std Z+41, r25 ; 0x29 + 968: 12 a6 std Z+42, r1 ; 0x2a + 96a: 80 ea ldi r24, 0xA0 ; 160 + 96c: 84 a7 std Z+44, r24 ; 0x2c + 96e: 88 e0 ldi r24, 0x08 ; 8 + 970: 85 a7 std Z+45, r24 ; 0x2d + 972: 16 a6 std Z+46, r1 ; 0x2e + 974: 80 a1 ldd r24, Z+32 ; 0x20 + 976: 80 6a ori r24, 0xA0 ; 160 + 978: 80 a3 std Z+32, r24 ; 0x20 + 97a: 85 e5 ldi r24, 0x55 ; 85 + 97c: 80 93 a0 08 sts 0x08A0, r24 + 980: 16 aa std Z+54, r1 ; 0x36 + 982: 44 e2 ldi r20, 0x24 ; 36 + 984: 40 ab std Z+48, r20 ; 0x30 + 986: 11 aa std Z+49, r1 ; 0x31 + 988: 39 e5 ldi r19, 0x59 ; 89 + 98a: 32 ab std Z+50, r19 ; 0x32 + 98c: 23 e0 ldi r18, 0x03 ; 3 + 98e: 23 ab std Z+51, r18 ; 0x33 + 990: 80 91 04 20 lds r24, 0x2004 + 994: 90 91 05 20 lds r25, 0x2005 + 998: 84 ab std Z+52, r24 ; 0x34 + 99a: 95 ab std Z+53, r25 ; 0x35 + 99c: 86 e6 ldi r24, 0x66 ; 102 + 99e: 92 e2 ldi r25, 0x22 ; 34 + 9a0: 80 af std Z+56, r24 ; 0x38 + 9a2: 91 af std Z+57, r25 ; 0x39 + 9a4: 12 ae std Z+58, r1 ; 0x3a + 9a6: 89 e3 ldi r24, 0x39 ; 57 + 9a8: 84 af std Z+60, r24 ; 0x3c + 9aa: 20 93 3d 01 sts 0x013D, r18 + 9ae: 10 92 3e 01 sts 0x013E, r1 + 9b2: 80 a9 ldd r24, Z+48 ; 0x30 + 9b4: 80 68 ori r24, 0x80 ; 128 + 9b6: 80 ab std Z+48, r24 ; 0x30 + 9b8: 10 92 46 01 sts 0x0146, r1 + 9bc: e0 e4 ldi r30, 0x40 ; 64 + 9be: f1 e0 ldi r31, 0x01 ; 1 + 9c0: 40 83 st Z, r20 + 9c2: 10 92 41 01 sts 0x0141, r1 + 9c6: 30 93 42 01 sts 0x0142, r19 + 9ca: 82 e0 ldi r24, 0x02 ; 2 + 9cc: 80 93 43 01 sts 0x0143, r24 + 9d0: 80 91 02 20 lds r24, 0x2002 + 9d4: 90 91 03 20 lds r25, 0x2003 + 9d8: 80 93 44 01 sts 0x0144, r24 + 9dc: 90 93 45 01 sts 0x0145, r25 + 9e0: 86 e7 ldi r24, 0x76 ; 118 + 9e2: 94 e2 ldi r25, 0x24 ; 36 + 9e4: 80 93 48 01 sts 0x0148, r24 + 9e8: 90 93 49 01 sts 0x0149, r25 + 9ec: 10 92 4a 01 sts 0x014A, r1 + 9f0: 8b e3 ldi r24, 0x3B ; 59 + 9f2: 80 93 4c 01 sts 0x014C, r24 + 9f6: 20 93 4d 01 sts 0x014D, r18 + 9fa: 10 92 4e 01 sts 0x014E, r1 + 9fe: 80 81 ld r24, Z + a00: 80 68 ori r24, 0x80 ; 128 + a02: 80 83 st Z, r24 + a04: cf 91 pop r28 + a06: 08 95 ret + +00000a08 : + a08: cf 93 push r28 + a0a: e0 e0 ldi r30, 0x00 ; 0 + a0c: f1 e0 ldi r31, 0x01 ; 1 + a0e: 10 8a std Z+16, r1 ; 0x10 + a10: b0 e4 ldi r27, 0x40 ; 64 + a12: b0 8b std Z+16, r27 ; 0x10 + a14: a4 e0 ldi r26, 0x04 ; 4 + a16: a0 8b std Z+16, r26 ; 0x10 + a18: 11 8a std Z+17, r1 ; 0x11 + a1a: 71 e9 ldi r23, 0x91 ; 145 + a1c: 72 8b std Z+18, r23 ; 0x12 + a1e: 8b e4 ldi r24, 0x4B ; 75 + a20: 83 8b std Z+19, r24 ; 0x13 + a22: 47 e7 ldi r20, 0x77 ; 119 + a24: 51 e0 ldi r21, 0x01 ; 1 + a26: 44 8b std Z+20, r20 ; 0x14 + a28: 55 8b std Z+21, r21 ; 0x15 + a2a: 80 ea ldi r24, 0xA0 ; 160 + a2c: 80 8f std Z+24, r24 ; 0x18 + a2e: 68 e0 ldi r22, 0x08 ; 8 + a30: 61 8f std Z+25, r22 ; 0x19 + a32: 12 8e std Z+26, r1 ; 0x1a + a34: c0 91 c2 20 lds r28, 0x20C2 + a38: 8e ee ldi r24, 0xEE ; 238 + a3a: 92 e0 ldi r25, 0x02 ; 2 + a3c: c8 9f mul r28, r24 + a3e: 90 01 movw r18, r0 + a40: c9 9f mul r28, r25 + a42: 30 0d add r19, r0 + a44: 11 24 eor r1, r1 + a46: 2a 58 subi r18, 0x8A ; 138 + a48: 39 4d sbci r19, 0xD9 ; 217 + a4a: 24 8f std Z+28, r18 ; 0x1c + a4c: c0 91 c2 20 lds r28, 0x20C2 + a50: c8 9f mul r28, r24 + a52: 90 01 movw r18, r0 + a54: c9 9f mul r28, r25 + a56: 30 0d add r19, r0 + a58: 11 24 eor r1, r1 + a5a: 2a 58 subi r18, 0x8A ; 138 + a5c: 39 4d sbci r19, 0xD9 ; 217 + a5e: 35 8f std Z+29, r19 ; 0x1d + a60: 16 8e std Z+30, r1 ; 0x1e + a62: 20 89 ldd r18, Z+16 ; 0x10 + a64: 20 68 ori r18, 0x80 ; 128 + a66: 20 8b std Z+16, r18 ; 0x10 + a68: 10 aa std Z+48, r1 ; 0x30 + a6a: b0 ab std Z+48, r27 ; 0x30 + a6c: a0 ab std Z+48, r26 ; 0x30 + a6e: 11 aa std Z+49, r1 ; 0x31 + a70: 72 ab std Z+50, r23 ; 0x32 + a72: 2a e4 ldi r18, 0x4A ; 74 + a74: 23 ab std Z+51, r18 ; 0x33 + a76: 44 ab std Z+52, r20 ; 0x34 + a78: 55 ab std Z+53, r21 ; 0x35 + a7a: 23 ec ldi r18, 0xC3 ; 195 + a7c: 20 af std Z+56, r18 ; 0x38 + a7e: 61 af std Z+57, r22 ; 0x39 + a80: 12 ae std Z+58, r1 ; 0x3a + a82: 40 91 c2 20 lds r20, 0x20C2 + a86: 48 9f mul r20, r24 + a88: 90 01 movw r18, r0 + a8a: 49 9f mul r20, r25 + a8c: 30 0d add r19, r0 + a8e: 11 24 eor r1, r1 + a90: 23 51 subi r18, 0x13 ; 19 + a92: 38 4d sbci r19, 0xD8 ; 216 + a94: 24 af std Z+60, r18 ; 0x3c + a96: 40 91 c2 20 lds r20, 0x20C2 + a9a: 48 9f mul r20, r24 + a9c: 90 01 movw r18, r0 + a9e: 49 9f mul r20, r25 + aa0: 30 0d add r19, r0 + aa2: 11 24 eor r1, r1 + aa4: 23 51 subi r18, 0x13 ; 19 + aa6: 38 4d sbci r19, 0xD8 ; 216 + aa8: 30 93 3d 01 sts 0x013D, r19 + aac: 10 92 3e 01 sts 0x013E, r1 + ab0: 80 a9 ldd r24, Z+48 ; 0x30 + ab2: 80 68 ori r24, 0x80 ; 128 + ab4: 80 ab std Z+48, r24 ; 0x30 + ab6: cf 91 pop r28 + ab8: 08 95 ret + +00000aba : + aba: 85 e0 ldi r24, 0x05 ; 5 + abc: 80 93 00 20 sts 0x2000, r24 + ac0: d8 dc rcall .-1616 ; 0x472 + ac2: e0 e0 ldi r30, 0x00 ; 0 + ac4: f1 e0 ldi r31, 0x01 ; 1 + ac6: 16 aa std Z+54, r1 ; 0x36 + ac8: 54 e2 ldi r21, 0x24 ; 36 + aca: 50 ab std Z+48, r21 ; 0x30 + acc: 11 aa std Z+49, r1 ; 0x31 + ace: 49 e5 ldi r20, 0x59 ; 89 + ad0: 42 ab std Z+50, r20 ; 0x32 + ad2: 23 e0 ldi r18, 0x03 ; 3 + ad4: 23 ab std Z+51, r18 ; 0x33 + ad6: 80 91 04 20 lds r24, 0x2004 + ada: 90 91 05 20 lds r25, 0x2005 + ade: 84 ab std Z+52, r24 ; 0x34 + ae0: 95 ab std Z+53, r25 ; 0x35 + ae2: 86 e6 ldi r24, 0x66 ; 102 + ae4: 92 e2 ldi r25, 0x22 ; 34 + ae6: 80 af std Z+56, r24 ; 0x38 + ae8: 91 af std Z+57, r25 ; 0x39 + aea: 12 ae std Z+58, r1 ; 0x3a + aec: 39 e3 ldi r19, 0x39 ; 57 + aee: 34 af std Z+60, r19 ; 0x3c + af0: 20 93 3d 01 sts 0x013D, r18 + af4: 10 92 3e 01 sts 0x013E, r1 + af8: 80 a9 ldd r24, Z+48 ; 0x30 + afa: 80 68 ori r24, 0x80 ; 128 + afc: 80 ab std Z+48, r24 ; 0x30 + afe: 10 92 46 01 sts 0x0146, r1 + b02: e0 e4 ldi r30, 0x40 ; 64 + b04: f1 e0 ldi r31, 0x01 ; 1 + b06: 50 83 st Z, r21 + b08: 10 92 41 01 sts 0x0141, r1 + b0c: 40 93 42 01 sts 0x0142, r20 + b10: 20 93 43 01 sts 0x0143, r18 + b14: 80 91 04 20 lds r24, 0x2004 + b18: 90 91 05 20 lds r25, 0x2005 + b1c: 80 93 44 01 sts 0x0144, r24 + b20: 90 93 45 01 sts 0x0145, r25 + b24: 86 e7 ldi r24, 0x76 ; 118 + b26: 96 e2 ldi r25, 0x26 ; 38 + b28: 80 93 48 01 sts 0x0148, r24 + b2c: 90 93 49 01 sts 0x0149, r25 + b30: 10 92 4a 01 sts 0x014A, r1 + b34: 30 93 4c 01 sts 0x014C, r19 + b38: 20 93 4d 01 sts 0x014D, r18 + b3c: 10 92 4e 01 sts 0x014E, r1 + b40: 80 81 ld r24, Z + b42: 80 68 ori r24, 0x80 ; 128 + b44: 80 83 st Z, r24 + b46: 08 95 ret + +00000b48 : + b48: 86 e0 ldi r24, 0x06 ; 6 + b4a: 80 93 00 20 sts 0x2000, r24 + b4e: 91 dc rcall .-1758 ; 0x472 + b50: e0 e0 ldi r30, 0x00 ; 0 + b52: f1 e0 ldi r31, 0x01 ; 1 + b54: 16 aa std Z+54, r1 ; 0x36 + b56: 44 e2 ldi r20, 0x24 ; 36 + b58: 40 ab std Z+48, r20 ; 0x30 + b5a: 11 aa std Z+49, r1 ; 0x31 + b5c: 39 e5 ldi r19, 0x59 ; 89 + b5e: 32 ab std Z+50, r19 ; 0x32 + b60: 23 e0 ldi r18, 0x03 ; 3 + b62: 23 ab std Z+51, r18 ; 0x33 + b64: 80 91 04 20 lds r24, 0x2004 + b68: 90 91 05 20 lds r25, 0x2005 + b6c: 84 ab std Z+52, r24 ; 0x34 + b6e: 95 ab std Z+53, r25 ; 0x35 + b70: 86 e6 ldi r24, 0x66 ; 102 + b72: 92 e2 ldi r25, 0x22 ; 34 + b74: 80 af std Z+56, r24 ; 0x38 + b76: 91 af std Z+57, r25 ; 0x39 + b78: 12 ae std Z+58, r1 ; 0x3a + b7a: 89 e3 ldi r24, 0x39 ; 57 + b7c: 84 af std Z+60, r24 ; 0x3c + b7e: 20 93 3d 01 sts 0x013D, r18 + b82: 10 92 3e 01 sts 0x013E, r1 + b86: 80 a9 ldd r24, Z+48 ; 0x30 + b88: 80 68 ori r24, 0x80 ; 128 + b8a: 80 ab std Z+48, r24 ; 0x30 + b8c: 10 92 46 01 sts 0x0146, r1 + b90: e0 e4 ldi r30, 0x40 ; 64 + b92: f1 e0 ldi r31, 0x01 ; 1 + b94: 40 83 st Z, r20 + b96: 10 92 41 01 sts 0x0141, r1 + b9a: 30 93 42 01 sts 0x0142, r19 + b9e: 82 e0 ldi r24, 0x02 ; 2 + ba0: 80 93 43 01 sts 0x0143, r24 + ba4: 80 91 02 20 lds r24, 0x2002 + ba8: 90 91 03 20 lds r25, 0x2003 + bac: 80 93 44 01 sts 0x0144, r24 + bb0: 90 93 45 01 sts 0x0145, r25 + bb4: 86 e7 ldi r24, 0x76 ; 118 + bb6: 94 e2 ldi r25, 0x24 ; 36 + bb8: 80 93 48 01 sts 0x0148, r24 + bbc: 90 93 49 01 sts 0x0149, r25 + bc0: 10 92 4a 01 sts 0x014A, r1 + bc4: 8b e3 ldi r24, 0x3B ; 59 + bc6: 80 93 4c 01 sts 0x014C, r24 + bca: 20 93 4d 01 sts 0x014D, r18 + bce: 10 92 4e 01 sts 0x014E, r1 + bd2: 80 81 ld r24, Z + bd4: 80 68 ori r24, 0x80 ; 128 + bd6: 80 83 st Z, r24 + bd8: 08 95 ret + +00000bda : + bda: e0 e0 ldi r30, 0x00 ; 0 + bdc: f1 e0 ldi r31, 0x01 ; 1 + bde: 10 8a std Z+16, r1 ; 0x10 + be0: 80 e4 ldi r24, 0x40 ; 64 + be2: 80 8b std Z+16, r24 ; 0x10 + be4: 84 e0 ldi r24, 0x04 ; 4 + be6: 80 8b std Z+16, r24 ; 0x10 + be8: 11 8a std Z+17, r1 ; 0x11 + bea: 81 e9 ldi r24, 0x91 ; 145 + bec: 82 8b std Z+18, r24 ; 0x12 + bee: 80 e1 ldi r24, 0x10 ; 16 + bf0: 83 8b std Z+19, r24 ; 0x13 + bf2: 2e ee ldi r18, 0xEE ; 238 + bf4: 32 e0 ldi r19, 0x02 ; 2 + bf6: 24 8b std Z+20, r18 ; 0x14 + bf8: 35 8b std Z+21, r19 ; 0x15 + bfa: 84 e2 ldi r24, 0x24 ; 36 + bfc: 80 8f std Z+24, r24 ; 0x18 + bfe: 82 e0 ldi r24, 0x02 ; 2 + c00: 81 8f std Z+25, r24 ; 0x19 + c02: 12 8e std Z+26, r1 ; 0x1a + c04: 40 91 c2 20 lds r20, 0x20C2 + c08: 42 9f mul r20, r18 + c0a: c0 01 movw r24, r0 + c0c: 43 9f mul r20, r19 + c0e: 90 0d add r25, r0 + c10: 11 24 eor r1, r1 + c12: 8a 58 subi r24, 0x8A ; 138 + c14: 99 4d sbci r25, 0xD9 ; 217 + c16: 84 8f std Z+28, r24 ; 0x1c + c18: 40 91 c2 20 lds r20, 0x20C2 + c1c: 42 9f mul r20, r18 + c1e: c0 01 movw r24, r0 + c20: 43 9f mul r20, r19 + c22: 90 0d add r25, r0 + c24: 11 24 eor r1, r1 + c26: 8a 58 subi r24, 0x8A ; 138 + c28: 99 4d sbci r25, 0xD9 ; 217 + c2a: 95 8f std Z+29, r25 ; 0x1d + c2c: 16 8e std Z+30, r1 ; 0x1e + c2e: 80 89 ldd r24, Z+16 ; 0x10 + c30: 80 68 ori r24, 0x80 ; 128 + c32: 80 8b std Z+16, r24 ; 0x10 + c34: 08 95 ret + +00000c36 : + c36: 87 e0 ldi r24, 0x07 ; 7 + c38: 80 93 00 20 sts 0x2000, r24 + c3c: 1a dc rcall .-1996 ; 0x472 + c3e: e0 e0 ldi r30, 0x00 ; 0 + c40: f1 e0 ldi r31, 0x01 ; 1 + c42: 16 aa std Z+54, r1 ; 0x36 + c44: 44 e2 ldi r20, 0x24 ; 36 + c46: 40 ab std Z+48, r20 ; 0x30 + c48: 11 aa std Z+49, r1 ; 0x31 + c4a: 39 e5 ldi r19, 0x59 ; 89 + c4c: 32 ab std Z+50, r19 ; 0x32 + c4e: 23 e0 ldi r18, 0x03 ; 3 + c50: 23 ab std Z+51, r18 ; 0x33 + c52: 80 91 04 20 lds r24, 0x2004 + c56: 90 91 05 20 lds r25, 0x2005 + c5a: 84 ab std Z+52, r24 ; 0x34 + c5c: 95 ab std Z+53, r25 ; 0x35 + c5e: 86 e6 ldi r24, 0x66 ; 102 + c60: 92 e2 ldi r25, 0x22 ; 34 + c62: 80 af std Z+56, r24 ; 0x38 + c64: 91 af std Z+57, r25 ; 0x39 + c66: 12 ae std Z+58, r1 ; 0x3a + c68: 89 e3 ldi r24, 0x39 ; 57 + c6a: 84 af std Z+60, r24 ; 0x3c + c6c: 20 93 3d 01 sts 0x013D, r18 + c70: 10 92 3e 01 sts 0x013E, r1 + c74: 80 a9 ldd r24, Z+48 ; 0x30 + c76: 80 68 ori r24, 0x80 ; 128 + c78: 80 ab std Z+48, r24 ; 0x30 + c7a: 10 92 46 01 sts 0x0146, r1 + c7e: e0 e4 ldi r30, 0x40 ; 64 + c80: f1 e0 ldi r31, 0x01 ; 1 + c82: 40 83 st Z, r20 + c84: 10 92 41 01 sts 0x0141, r1 + c88: 30 93 42 01 sts 0x0142, r19 + c8c: 82 e0 ldi r24, 0x02 ; 2 + c8e: 80 93 43 01 sts 0x0143, r24 + c92: 80 91 02 20 lds r24, 0x2002 + c96: 90 91 03 20 lds r25, 0x2003 + c9a: 80 93 44 01 sts 0x0144, r24 + c9e: 90 93 45 01 sts 0x0145, r25 + ca2: 86 e7 ldi r24, 0x76 ; 118 + ca4: 94 e2 ldi r25, 0x24 ; 36 + ca6: 80 93 48 01 sts 0x0148, r24 + caa: 90 93 49 01 sts 0x0149, r25 + cae: 10 92 4a 01 sts 0x014A, r1 + cb2: 8b e3 ldi r24, 0x3B ; 59 + cb4: 80 93 4c 01 sts 0x014C, r24 + cb8: 20 93 4d 01 sts 0x014D, r18 + cbc: 10 92 4e 01 sts 0x014E, r1 + cc0: 80 81 ld r24, Z + cc2: 80 68 ori r24, 0x80 ; 128 + cc4: 80 83 st Z, r24 + cc6: 08 95 ret + +00000cc8 : + cc8: e0 e0 ldi r30, 0x00 ; 0 + cca: f1 e0 ldi r31, 0x01 ; 1 + ccc: 10 8a std Z+16, r1 ; 0x10 + cce: 80 e4 ldi r24, 0x40 ; 64 + cd0: 80 8b std Z+16, r24 ; 0x10 + cd2: 85 e0 ldi r24, 0x05 ; 5 + cd4: 80 8b std Z+16, r24 ; 0x10 + cd6: 11 8a std Z+17, r1 ; 0x11 + cd8: 81 e9 ldi r24, 0x91 ; 145 + cda: 82 8b std Z+18, r24 ; 0x12 + cdc: 80 e1 ldi r24, 0x10 ; 16 + cde: 83 8b std Z+19, r24 ; 0x13 + ce0: 2e ee ldi r18, 0xEE ; 238 + ce2: 32 e0 ldi r19, 0x02 ; 2 + ce4: 24 8b std Z+20, r18 ; 0x14 + ce6: 35 8b std Z+21, r19 ; 0x15 + ce8: 84 e2 ldi r24, 0x24 ; 36 + cea: 80 8f std Z+24, r24 ; 0x18 + cec: 82 e0 ldi r24, 0x02 ; 2 + cee: 81 8f std Z+25, r24 ; 0x19 + cf0: 12 8e std Z+26, r1 ; 0x1a + cf2: 40 91 c2 20 lds r20, 0x20C2 + cf6: 42 9f mul r20, r18 + cf8: c0 01 movw r24, r0 + cfa: 43 9f mul r20, r19 + cfc: 90 0d add r25, r0 + cfe: 11 24 eor r1, r1 + d00: 8a 58 subi r24, 0x8A ; 138 + d02: 99 4d sbci r25, 0xD9 ; 217 + d04: 84 8f std Z+28, r24 ; 0x1c + d06: 40 91 c2 20 lds r20, 0x20C2 + d0a: 42 9f mul r20, r18 + d0c: c0 01 movw r24, r0 + d0e: 43 9f mul r20, r19 + d10: 90 0d add r25, r0 + d12: 11 24 eor r1, r1 + d14: 8a 58 subi r24, 0x8A ; 138 + d16: 99 4d sbci r25, 0xD9 ; 217 + d18: 95 8f std Z+29, r25 ; 0x1d + d1a: 16 8e std Z+30, r1 ; 0x1e + d1c: 80 89 ldd r24, Z+16 ; 0x10 + d1e: 80 68 ori r24, 0x80 ; 128 + d20: 80 8b std Z+16, r24 ; 0x10 + d22: 08 95 ret + +00000d24 : + d24: e0 e7 ldi r30, 0x70 ; 112 + d26: f0 e0 ldi r31, 0x00 ; 0 + d28: 83 81 ldd r24, Z+3 ; 0x03 + d2a: 8c 7f andi r24, 0xFC ; 252 + d2c: 83 83 std Z+3, r24 ; 0x03 + d2e: 84 81 ldd r24, Z+4 ; 0x04 + d30: 8c 7f andi r24, 0xFC ; 252 + d32: 84 83 std Z+4, r24 ; 0x04 + d34: 80 81 ld r24, Z + d36: 8d 7f andi r24, 0xFD ; 253 + d38: 80 83 st Z, r24 + d3a: e0 e8 ldi r30, 0x80 ; 128 + d3c: f1 e0 ldi r31, 0x01 ; 1 + d3e: 80 ec ldi r24, 0xC0 ; 192 + d40: 82 83 std Z+2, r24 ; 0x02 + d42: 12 86 std Z+10, r1 ; 0x0a + d44: 88 ec ldi r24, 0xC8 ; 200 + d46: 81 83 std Z+1, r24 ; 0x01 + d48: 11 86 std Z+9, r1 ; 0x09 + d4a: e0 e0 ldi r30, 0x00 ; 0 + d4c: f8 e0 ldi r31, 0x08 ; 8 + d4e: 24 e0 ldi r18, 0x04 ; 4 + d50: 20 83 st Z, r18 + d52: 33 e0 ldi r19, 0x03 ; 3 + d54: 31 83 std Z+1, r19 ; 0x01 + d56: 14 82 std Z+4, r1 ; 0x04 + d58: 85 ed ldi r24, 0xD5 ; 213 + d5a: 91 e0 ldi r25, 0x01 ; 1 + d5c: 86 a3 std Z+38, r24 ; 0x26 + d5e: 97 a3 std Z+39, r25 ; 0x27 + d60: 16 82 std Z+6, r1 ; 0x06 + d62: e0 e4 ldi r30, 0x40 ; 64 + d64: f8 e0 ldi r31, 0x08 ; 8 + d66: 20 83 st Z, r18 + d68: 31 83 std Z+1, r19 ; 0x01 + d6a: 14 82 std Z+4, r1 ; 0x04 + d6c: 86 a3 std Z+38, r24 ; 0x26 + d6e: 97 a3 std Z+39, r25 ; 0x27 + d70: 16 82 std Z+6, r1 ; 0x06 + d72: e0 e6 ldi r30, 0x60 ; 96 + d74: f6 e0 ldi r31, 0x06 ; 6 + d76: 80 81 ld r24, Z + d78: 80 61 ori r24, 0x10 ; 16 + d7a: 80 83 st Z, r24 + d7c: e0 e4 ldi r30, 0x40 ; 64 + d7e: f9 e0 ldi r31, 0x09 ; 9 + d80: 83 e1 ldi r24, 0x13 ; 19 + d82: 81 83 std Z+1, r24 ; 0x01 + d84: 14 82 std Z+4, r1 ; 0x04 + d86: 81 e0 ldi r24, 0x01 ; 1 + d88: 86 83 std Z+6, r24 ; 0x06 + d8a: 80 e0 ldi r24, 0x00 ; 0 + d8c: 90 e1 ldi r25, 0x10 ; 16 + d8e: 86 a3 std Z+38, r24 ; 0x26 + d90: 97 a3 std Z+39, r25 ; 0x27 + d92: 10 a6 std Z+40, r1 ; 0x28 + d94: 11 a6 std Z+41, r1 ; 0x29 + d96: 20 83 st Z, r18 + d98: 08 95 ret + +00000d9a <__vector_83>: + d9a: 1f 92 push r1 + d9c: 0f 92 push r0 + d9e: 0f b6 in r0, 0x3f ; 63 + da0: 0f 92 push r0 + da2: 11 24 eor r1, r1 + da4: 2f 93 push r18 + da6: 3f 93 push r19 + da8: 4f 93 push r20 + daa: 5f 93 push r21 + dac: 8f 93 push r24 + dae: 9f 93 push r25 + db0: cf 93 push r28 + db2: df 93 push r29 + db4: 1f 92 push r1 + db6: cd b7 in r28, 0x3d ; 61 + db8: de b7 in r29, 0x3e ; 62 + dba: 80 91 00 20 lds r24, 0x2000 + dbe: 87 30 cpi r24, 0x07 ; 7 + dc0: 31 f4 brne .+12 ; 0xdce <__vector_83+0x34> + dc2: 80 91 2c 02 lds r24, 0x022C + dc6: 89 83 std Y+1, r24 ; 0x01 + dc8: 80 91 2d 02 lds r24, 0x022D + dcc: 02 c0 rjmp .+4 ; 0xdd2 <__vector_83+0x38> + dce: 80 91 2c 02 lds r24, 0x022C + dd2: 40 91 c0 20 lds r20, 0x20C0 + dd6: 48 1b sub r20, r24 + dd8: 80 91 68 09 lds r24, 0x0968 + ddc: 90 91 69 09 lds r25, 0x0969 + de0: 42 30 cpi r20, 0x02 ; 2 + de2: 8c f0 brlt .+34 ; 0xe06 <__vector_83+0x6c> + de4: 84 3f cpi r24, 0xF4 ; 244 + de6: 9f 40 sbci r25, 0x0F ; 15 + de8: 70 f4 brcc .+28 ; 0xe06 <__vector_83+0x6c> + dea: 20 91 68 09 lds r18, 0x0968 + dee: 30 91 69 09 lds r19, 0x0969 + df2: 49 30 cpi r20, 0x09 ; 9 + df4: 1c f0 brlt .+6 ; 0xdfc <__vector_83+0x62> + df6: 8c e0 ldi r24, 0x0C ; 12 + df8: 90 e0 ldi r25, 0x00 ; 0 + dfa: 02 c0 rjmp .+4 ; 0xe00 <__vector_83+0x66> + dfc: 81 e0 ldi r24, 0x01 ; 1 + dfe: 90 e0 ldi r25, 0x00 ; 0 + e00: 82 0f add r24, r18 + e02: 93 1f adc r25, r19 + e04: 17 c0 rjmp .+46 ; 0xe34 <__vector_83+0x9a> + e06: 80 91 68 09 lds r24, 0x0968 + e0a: 90 91 69 09 lds r25, 0x0969 + e0e: 4f 3f cpi r20, 0xFF ; 255 + e10: ac f4 brge .+42 ; 0xe3c <__vector_83+0xa2> + e12: 0d 97 sbiw r24, 0x0d ; 13 + e14: 98 f0 brcs .+38 ; 0xe3c <__vector_83+0xa2> + e16: 20 91 68 09 lds r18, 0x0968 + e1a: 30 91 69 09 lds r19, 0x0969 + e1e: 48 3f cpi r20, 0xF8 ; 248 + e20: 1c f4 brge .+6 ; 0xe28 <__vector_83+0x8e> + e22: 8c e0 ldi r24, 0x0C ; 12 + e24: 90 e0 ldi r25, 0x00 ; 0 + e26: 02 c0 rjmp .+4 ; 0xe2c <__vector_83+0x92> + e28: 81 e0 ldi r24, 0x01 ; 1 + e2a: 90 e0 ldi r25, 0x00 ; 0 + e2c: a9 01 movw r20, r18 + e2e: 48 1b sub r20, r24 + e30: 59 0b sbc r21, r25 + e32: ca 01 movw r24, r20 + e34: 80 93 78 09 sts 0x0978, r24 + e38: 90 93 79 09 sts 0x0979, r25 + e3c: 0f 90 pop r0 + e3e: df 91 pop r29 + e40: cf 91 pop r28 + e42: 9f 91 pop r25 + e44: 8f 91 pop r24 + e46: 5f 91 pop r21 + e48: 4f 91 pop r20 + e4a: 3f 91 pop r19 + e4c: 2f 91 pop r18 + e4e: 0f 90 pop r0 + e50: 0f be out 0x3f, r0 ; 63 + e52: 0f 90 pop r0 + e54: 1f 90 pop r1 + e56: 18 95 reti + +00000e58 : + e58: e0 e7 ldi r30, 0x70 ; 112 + e5a: f0 e0 ldi r31, 0x00 ; 0 + e5c: 83 81 ldd r24, Z+3 ; 0x03 + e5e: 8f 7e andi r24, 0xEF ; 239 + e60: 83 83 std Z+3, r24 ; 0x03 + e62: e0 e4 ldi r30, 0x40 ; 64 + e64: f6 e0 ldi r31, 0x06 ; 6 + e66: 80 81 ld r24, Z + e68: 8a 6a ori r24, 0xAA ; 170 + e6a: 80 83 st Z, r24 + e6c: 8f ef ldi r24, 0xFF ; 255 + e6e: 84 83 std Z+4, r24 ; 0x04 + e70: 88 e5 ldi r24, 0x58 ; 88 + e72: 82 8b std Z+18, r24 ; 0x12 + e74: 80 e2 ldi r24, 0x20 ; 32 + e76: 86 87 std Z+14, r24 ; 0x0e + e78: e0 ea ldi r30, 0xA0 ; 160 + e7a: f8 e0 ldi r31, 0x08 ; 8 + e7c: 84 ec ldi r24, 0xC4 ; 196 + e7e: 85 83 std Z+5, r24 ; 0x05 + e80: 83 e0 ldi r24, 0x03 ; 3 + e82: 86 83 std Z+6, r24 ; 0x06 + e84: 17 82 std Z+7, r1 ; 0x07 + e86: 88 e1 ldi r24, 0x18 ; 24 + e88: 84 83 std Z+4, r24 ; 0x04 + e8a: 08 95 ret + +00000e8c : + e8c: e0 e7 ldi r30, 0x70 ; 112 + e8e: f0 e0 ldi r31, 0x00 ; 0 + e90: 83 81 ldd r24, Z+3 ; 0x03 + e92: 87 7f andi r24, 0xF7 ; 247 + e94: 83 83 std Z+3, r24 ; 0x03 + e96: 80 e4 ldi r24, 0x40 ; 64 + e98: 80 93 c0 08 sts 0x08C0, r24 + e9c: 88 e5 ldi r24, 0x58 ; 88 + e9e: e0 e4 ldi r30, 0x40 ; 64 + ea0: f6 e0 ldi r31, 0x06 ; 6 + ea2: 87 8b std Z+23, r24 ; 0x17 + ea4: 08 95 ret + +00000ea6 : + ea6: 9f b7 in r25, 0x3f ; 63 + ea8: f8 94 cli + eaa: e0 e5 ldi r30, 0x50 ; 80 + eac: f0 e0 ldi r31, 0x00 ; 0 + eae: 20 81 ld r18, Z + eb0: 82 2b or r24, r18 + eb2: 80 83 st Z, r24 + eb4: 9f bf out 0x3f, r25 ; 63 + eb6: 08 95 ret + +00000eb8 : + eb8: 9f b7 in r25, 0x3f ; 63 + eba: f8 94 cli + ebc: a0 e5 ldi r26, 0x50 ; 80 + ebe: b0 e0 ldi r27, 0x00 ; 0 + ec0: 16 96 adiw r26, 0x06 ; 6 + ec2: 8c 91 ld r24, X + ec4: 16 97 sbiw r26, 0x06 ; 6 + ec6: 89 7f andi r24, 0xF9 ; 249 + ec8: 16 96 adiw r26, 0x06 ; 6 + eca: 8c 93 st X, r24 + ecc: 16 97 sbiw r26, 0x06 ; 6 + ece: e0 e6 ldi r30, 0x60 ; 96 + ed0: f0 e0 ldi r31, 0x00 ; 0 + ed2: 80 e8 ldi r24, 0x80 ; 128 + ed4: 85 83 std Z+5, r24 ; 0x05 + ed6: 8b eb ldi r24, 0xBB ; 187 + ed8: 86 83 std Z+6, r24 ; 0x06 + eda: 16 96 adiw r26, 0x06 ; 6 + edc: 8c 91 ld r24, X + ede: 16 97 sbiw r26, 0x06 ; 6 + ee0: 84 60 ori r24, 0x04 ; 4 + ee2: 16 96 adiw r26, 0x06 ; 6 + ee4: 8c 93 st X, r24 + ee6: 80 81 ld r24, Z + ee8: 81 60 ori r24, 0x01 ; 1 + eea: 80 83 st Z, r24 + eec: 9f bf out 0x3f, r25 ; 63 + eee: 08 95 ret + +00000ef0 : + ef0: cf 93 push r28 + ef2: df 93 push r29 + ef4: 00 d0 rcall .+0 ; 0xef6 + ef6: 00 d0 rcall .+0 ; 0xef8 + ef8: cd b7 in r28, 0x3d ; 61 + efa: de b7 in r29, 0x3e ; 62 + efc: 8f ef ldi r24, 0xFF ; 255 + efe: 80 93 70 00 sts 0x0070, r24 + f02: 80 93 71 00 sts 0x0071, r24 + f06: 80 93 72 00 sts 0x0072, r24 + f0a: 80 93 73 00 sts 0x0073, r24 + f0e: 80 93 74 00 sts 0x0074, r24 + f12: 80 93 75 00 sts 0x0075, r24 + f16: 80 93 76 00 sts 0x0076, r24 + f1a: 64 e0 ldi r22, 0x04 ; 4 + f1c: 81 e4 ldi r24, 0x41 ; 65 + f1e: 90 e0 ldi r25, 0x00 ; 0 + f20: d6 d4 rcall .+2476 ; 0x18ce + f22: 6c e1 ldi r22, 0x1C ; 28 + f24: 70 e0 ldi r23, 0x00 ; 0 + f26: 82 e0 ldi r24, 0x02 ; 2 + f28: d8 d4 rcall .+2480 ; 0x18da + f2a: 8c 83 std Y+4, r24 ; 0x04 + f2c: 6d e1 ldi r22, 0x1D ; 29 + f2e: 70 e0 ldi r23, 0x00 ; 0 + f30: 82 e0 ldi r24, 0x02 ; 2 + f32: d3 d4 rcall .+2470 ; 0x18da + f34: 8b 83 std Y+3, r24 ; 0x03 + f36: 8b 81 ldd r24, Y+3 ; 0x03 + f38: 9c 81 ldd r25, Y+4 ; 0x04 + f3a: 01 96 adiw r24, 0x01 ; 1 + f3c: 21 f4 brne .+8 ; 0xf46 + f3e: 80 e4 ldi r24, 0x40 ; 64 + f40: 93 e2 ldi r25, 0x23 ; 35 + f42: 8b 83 std Y+3, r24 ; 0x03 + f44: 9c 83 std Y+4, r25 ; 0x04 + f46: 8b 81 ldd r24, Y+3 ; 0x03 + f48: 9c 81 ldd r25, Y+4 ; 0x04 + f4a: 89 83 std Y+1, r24 ; 0x01 + f4c: 9a 83 std Y+2, r25 ; 0x02 + f4e: 80 93 62 00 sts 0x0062, r24 + f52: 8a 81 ldd r24, Y+2 ; 0x02 + f54: 80 93 63 00 sts 0x0063, r24 + f58: 82 e0 ldi r24, 0x02 ; 2 + f5a: a5 df rcall .-182 ; 0xea6 + f5c: 80 91 51 00 lds r24, 0x0051 + f60: 81 ff sbrs r24, 1 + f62: fc cf rjmp .-8 ; 0xf5c + f64: a9 df rcall .-174 ; 0xeb8 + f66: 61 e0 ldi r22, 0x01 ; 1 + f68: 80 e4 ldi r24, 0x40 ; 64 + f6a: 90 e0 ldi r25, 0x00 ; 0 + f6c: b0 d4 rcall .+2400 ; 0x18ce + f6e: 9f b7 in r25, 0x3f ; 63 + f70: f8 94 cli + f72: 80 91 50 00 lds r24, 0x0050 + f76: 8e 7f andi r24, 0xFE ; 254 + f78: 80 93 50 00 sts 0x0050, r24 + f7c: 9f bf out 0x3f, r25 ; 63 + f7e: 24 96 adiw r28, 0x04 ; 4 + f80: cd bf out 0x3d, r28 ; 61 + f82: de bf out 0x3e, r29 ; 62 + f84: df 91 pop r29 + f86: cf 91 pop r28 + f88: 08 95 ret + +00000f8a : + f8a: 9f b7 in r25, 0x3f ; 63 + f8c: f8 94 cli + f8e: e8 2f mov r30, r24 + f90: f0 e0 ldi r31, 0x00 ; 0 + f92: e0 59 subi r30, 0x90 ; 144 + f94: ff 4f sbci r31, 0xFF ; 255 + f96: 60 95 com r22 + f98: 80 81 ld r24, Z + f9a: 86 23 and r24, r22 + f9c: 80 83 st Z, r24 + f9e: 9f bf out 0x3f, r25 ; 63 + fa0: 08 95 ret + +00000fa2 : + fa2: cf 93 push r28 + fa4: 86 30 cpi r24, 0x06 ; 6 + fa6: 11 f4 brne .+4 ; 0xfac + fa8: c8 e1 ldi r28, 0x18 ; 24 + faa: 01 c0 rjmp .+2 ; 0xfae + fac: c0 e0 ldi r28, 0x00 ; 0 + fae: 80 91 51 00 lds r24, 0x0051 + fb2: 81 fd sbrc r24, 1 + fb4: 07 c0 rjmp .+14 ; 0xfc4 + fb6: 82 e0 ldi r24, 0x02 ; 2 + fb8: 76 df rcall .-276 ; 0xea6 + fba: 80 91 51 00 lds r24, 0x0051 + fbe: 81 ff sbrs r24, 1 + fc0: fc cf rjmp .-8 ; 0xfba + fc2: 7a df rcall .-268 ; 0xeb8 + fc4: 6c 2f mov r22, r28 + fc6: 63 60 ori r22, 0x03 ; 3 + fc8: 84 e4 ldi r24, 0x44 ; 68 + fca: 90 e0 ldi r25, 0x00 ; 0 + fcc: 80 d4 rcall .+2304 ; 0x18ce + fce: 60 e4 ldi r22, 0x40 ; 64 + fd0: 80 e0 ldi r24, 0x00 ; 0 + fd2: cf 91 pop r28 + fd4: da cf rjmp .-76 ; 0xf8a + +00000fd6 : + fd6: 80 91 c4 20 lds r24, 0x20C4 + fda: 08 95 ret + +00000fdc : + fdc: 80 91 c4 20 lds r24, 0x20C4 + fe0: 81 30 cpi r24, 0x01 ; 1 + fe2: 09 f4 brne .+2 ; 0xfe6 + fe4: b0 c9 rjmp .-3232 ; 0x346 + fe6: 08 95 ret + +00000fe8 : + fe8: f8 d0 rcall .+496 ; 0x11da + fea: fc 01 movw r30, r24 + fec: 83 81 ldd r24, Z+3 ; 0x03 + fee: 80 93 c4 20 sts 0x20C4, r24 + ff2: 81 11 cpse r24, r1 + ff4: 01 c0 rjmp .+2 ; 0xff8 + ff6: 9b c9 rjmp .-3274 ; 0x32e + ff8: 81 e0 ldi r24, 0x01 ; 1 + ffa: 08 95 ret + +00000ffc : + ffc: 90 91 66 24 lds r25, 0x2466 + 1000: 89 2f mov r24, r25 + 1002: 80 76 andi r24, 0x60 ; 96 + 1004: 97 ff sbrs r25, 7 + 1006: 07 c0 rjmp .+14 ; 0x1016 + 1008: 80 34 cpi r24, 0x40 ; 64 + 100a: 91 f4 brne .+36 ; 0x1030 + 100c: 80 91 67 24 lds r24, 0x2467 + 1010: 81 11 cpse r24, r1 + 1012: 0e c0 rjmp .+28 ; 0x1030 + 1014: 9d c9 rjmp .-3270 ; 0x350 + 1016: 80 34 cpi r24, 0x40 ; 64 + 1018: 59 f4 brne .+22 ; 0x1030 + 101a: 80 91 67 24 lds r24, 0x2467 + 101e: 81 11 cpse r24, r1 + 1020: 07 c0 rjmp .+14 ; 0x1030 + 1022: 80 91 6c 24 lds r24, 0x246C + 1026: 90 91 6d 24 lds r25, 0x246D + 102a: 89 2b or r24, r25 + 102c: 09 f0 breq .+2 ; 0x1030 + 102e: 8e c9 rjmp .-3300 ; 0x34c + 1030: 80 e0 ldi r24, 0x00 ; 0 + 1032: 08 95 ret + +00001034 : + 1034: 0f 93 push r16 + 1036: 1f 93 push r17 + 1038: 9b 01 movw r18, r22 + 103a: 8a 01 movw r16, r20 + 103c: ac 01 movw r20, r24 + 103e: 60 e0 ldi r22, 0x00 ; 0 + 1040: 83 e8 ldi r24, 0x83 ; 131 + 1042: 0e 94 25 10 call 0x204a ; 0x204a + 1046: 1f 91 pop r17 + 1048: 0f 91 pop r16 + 104a: 08 95 ret + +0000104c : + 104c: 80 91 68 24 lds r24, 0x2468 + 1050: 8f 77 andi r24, 0x7F ; 127 + 1052: 7a c7 rjmp .+3828 ; 0x1f48 + +00001054 : + 1054: 90 91 cc 20 lds r25, 0x20CC + 1058: 99 23 and r25, r25 + 105a: 61 f1 breq .+88 ; 0x10b4 + 105c: e0 91 c9 20 lds r30, 0x20C9 + 1060: f0 91 ca 20 lds r31, 0x20CA + 1064: 01 90 ld r0, Z+ + 1066: f0 81 ld r31, Z + 1068: e0 2d mov r30, r0 + 106a: 94 81 ldd r25, Z+4 ; 0x04 + 106c: 89 17 cp r24, r25 + 106e: 10 f5 brcc .+68 ; 0x10b4 + 1070: e0 93 c7 20 sts 0x20C7, r30 + 1074: f0 93 c8 20 sts 0x20C8, r31 + 1078: 22 81 ldd r18, Z+2 ; 0x02 + 107a: 33 81 ldd r19, Z+3 ; 0x03 + 107c: 2e 0f add r18, r30 + 107e: 3f 1f adc r19, r31 + 1080: e2 17 cp r30, r18 + 1082: f3 07 cpc r31, r19 + 1084: 98 f4 brcc .+38 ; 0x10ac + 1086: 91 81 ldd r25, Z+1 ; 0x01 + 1088: 94 30 cpi r25, 0x04 ; 4 + 108a: 61 f4 brne .+24 ; 0x10a4 + 108c: 92 81 ldd r25, Z+2 ; 0x02 + 108e: 89 13 cpse r24, r25 + 1090: 09 c0 rjmp .+18 ; 0x10a4 + 1092: 93 81 ldd r25, Z+3 ; 0x03 + 1094: 69 13 cpse r22, r25 + 1096: 06 c0 rjmp .+12 ; 0x10a4 + 1098: e0 93 c7 20 sts 0x20C7, r30 + 109c: f0 93 c8 20 sts 0x20C8, r31 + 10a0: 81 e0 ldi r24, 0x01 ; 1 + 10a2: 08 95 ret + 10a4: 90 81 ld r25, Z + 10a6: e9 0f add r30, r25 + 10a8: f1 1d adc r31, r1 + 10aa: ea cf rjmp .-44 ; 0x1080 + 10ac: e0 93 c7 20 sts 0x20C7, r30 + 10b0: f0 93 c8 20 sts 0x20C8, r31 + 10b4: 80 e0 ldi r24, 0x00 ; 0 + 10b6: 08 95 ret + +000010b8 : + 10b8: e0 91 c9 20 lds r30, 0x20C9 + 10bc: f0 91 ca 20 lds r31, 0x20CA + 10c0: 01 90 ld r0, Z+ + 10c2: f0 81 ld r31, Z + 10c4: e0 2d mov r30, r0 + 10c6: 22 81 ldd r18, Z+2 ; 0x02 + 10c8: 33 81 ldd r19, Z+3 ; 0x03 + 10ca: 2e 0f add r18, r30 + 10cc: 3f 1f adc r19, r31 + 10ce: fc 01 movw r30, r24 + 10d0: 40 81 ld r20, Z + 10d2: e4 0f add r30, r20 + 10d4: f1 1d adc r31, r1 + 10d6: e2 17 cp r30, r18 + 10d8: f3 07 cpc r31, r19 + 10da: 48 f4 brcc .+18 ; 0x10ee + 10dc: 81 81 ldd r24, Z+1 ; 0x01 + 10de: 84 30 cpi r24, 0x04 ; 4 + 10e0: 31 f0 breq .+12 ; 0x10ee + 10e2: 85 30 cpi r24, 0x05 ; 5 + 10e4: 39 f0 breq .+14 ; 0x10f4 + 10e6: 80 81 ld r24, Z + 10e8: e8 0f add r30, r24 + 10ea: f1 1d adc r31, r1 + 10ec: f4 cf rjmp .-24 ; 0x10d6 + 10ee: 80 e0 ldi r24, 0x00 ; 0 + 10f0: 90 e0 ldi r25, 0x00 ; 0 + 10f2: 08 95 ret + 10f4: cf 01 movw r24, r30 + 10f6: 08 95 ret + +000010f8 : + 10f8: 1f 93 push r17 + 10fa: cf 93 push r28 + 10fc: df 93 push r29 + 10fe: 18 2f mov r17, r24 + 1100: a9 df rcall .-174 ; 0x1054 + 1102: 88 23 and r24, r24 + 1104: 39 f1 breq .+78 ; 0x1154 + 1106: c0 91 c7 20 lds r28, 0x20C7 + 110a: d0 91 c8 20 lds r29, 0x20C8 + 110e: ce 01 movw r24, r28 + 1110: d3 df rcall .-90 ; 0x10b8 + 1112: ec 01 movw r28, r24 + 1114: 00 97 sbiw r24, 0x00 ; 0 + 1116: 41 f0 breq .+16 ; 0x1128 + 1118: 4c 81 ldd r20, Y+4 ; 0x04 + 111a: 5d 81 ldd r21, Y+5 ; 0x05 + 111c: 6b 81 ldd r22, Y+3 ; 0x03 + 111e: 8a 81 ldd r24, Y+2 ; 0x02 + 1120: 22 d7 rcall .+3652 ; 0x1f66 + 1122: 81 11 cpse r24, r1 + 1124: f4 cf rjmp .-24 ; 0x110e + 1126: 16 c0 rjmp .+44 ; 0x1154 + 1128: e0 91 c9 20 lds r30, 0x20C9 + 112c: f0 91 ca 20 lds r31, 0x20CA + 1130: 92 81 ldd r25, Z+2 ; 0x02 + 1132: 83 81 ldd r24, Z+3 ; 0x03 + 1134: e9 2f mov r30, r25 + 1136: f8 2f mov r31, r24 + 1138: e1 0f add r30, r17 + 113a: f1 1d adc r31, r1 + 113c: e1 0f add r30, r17 + 113e: f1 1d adc r31, r1 + 1140: 01 90 ld r0, Z+ + 1142: f0 81 ld r31, Z + 1144: e0 2d mov r30, r0 + 1146: 01 90 ld r0, Z+ + 1148: f0 81 ld r31, Z + 114a: e0 2d mov r30, r0 + 114c: df 91 pop r29 + 114e: cf 91 pop r28 + 1150: 1f 91 pop r17 + 1152: 09 94 ijmp + 1154: 80 e0 ldi r24, 0x00 ; 0 + 1156: df 91 pop r29 + 1158: cf 91 pop r28 + 115a: 1f 91 pop r17 + 115c: 08 95 ret + +0000115e : + 115e: ff 92 push r15 + 1160: 0f 93 push r16 + 1162: 1f 93 push r17 + 1164: cf 93 push r28 + 1166: df 93 push r29 + 1168: c8 2f mov r28, r24 + 116a: 60 e0 ldi r22, 0x00 ; 0 + 116c: 73 df rcall .-282 ; 0x1054 + 116e: f8 2e mov r15, r24 + 1170: 88 23 and r24, r24 + 1172: 61 f1 breq .+88 ; 0x11cc + 1174: e0 91 c9 20 lds r30, 0x20C9 + 1178: f0 91 ca 20 lds r31, 0x20CA + 117c: 92 81 ldd r25, Z+2 ; 0x02 + 117e: 83 81 ldd r24, Z+3 ; 0x03 + 1180: e9 2f mov r30, r25 + 1182: f8 2f mov r31, r24 + 1184: ec 0f add r30, r28 + 1186: f1 1d adc r31, r1 + 1188: ec 0f add r30, r28 + 118a: f1 1d adc r31, r1 + 118c: 00 81 ld r16, Z + 118e: 11 81 ldd r17, Z+1 ; 0x01 + 1190: d8 01 movw r26, r16 + 1192: 16 96 adiw r26, 0x06 ; 6 + 1194: ed 91 ld r30, X+ + 1196: fc 91 ld r31, X + 1198: 17 97 sbiw r26, 0x07 ; 7 + 119a: 09 95 icall + 119c: 68 2f mov r22, r24 + 119e: 8c 2f mov r24, r28 + 11a0: 59 df rcall .-334 ; 0x1054 + 11a2: f8 2e mov r15, r24 + 11a4: 88 23 and r24, r24 + 11a6: 91 f0 breq .+36 ; 0x11cc + 11a8: c0 91 c7 20 lds r28, 0x20C7 + 11ac: d0 91 c8 20 lds r29, 0x20C8 + 11b0: ce 01 movw r24, r28 + 11b2: 82 df rcall .-252 ; 0x10b8 + 11b4: ec 01 movw r28, r24 + 11b6: 00 97 sbiw r24, 0x00 ; 0 + 11b8: 19 f0 breq .+6 ; 0x11c0 + 11ba: 8a 81 ldd r24, Y+2 ; 0x02 + 11bc: f3 d7 rcall .+4070 ; 0x21a4 + 11be: f8 cf rjmp .-16 ; 0x11b0 + 11c0: d8 01 movw r26, r16 + 11c2: 12 96 adiw r26, 0x02 ; 2 + 11c4: ed 91 ld r30, X+ + 11c6: fc 91 ld r31, X + 11c8: 13 97 sbiw r26, 0x03 ; 3 + 11ca: 09 95 icall + 11cc: 8f 2d mov r24, r15 + 11ce: df 91 pop r29 + 11d0: cf 91 pop r28 + 11d2: 1f 91 pop r17 + 11d4: 0f 91 pop r16 + 11d6: ff 90 pop r15 + 11d8: 08 95 ret + +000011da : + 11da: 80 91 c7 20 lds r24, 0x20C7 + 11de: 90 91 c8 20 lds r25, 0x20C8 + 11e2: 08 95 ret + +000011e4 : + 11e4: 39 c6 rjmp .+3186 ; 0x1e58 + +000011e6 : + 11e6: cf 93 push r28 + 11e8: 80 91 cc 20 lds r24, 0x20CC + 11ec: 81 11 cpse r24, r1 + 11ee: 08 c0 rjmp .+16 ; 0x1200 + 11f0: 10 92 cc 20 sts 0x20CC, r1 + 11f4: 10 92 d0 20 sts 0x20D0, r1 + 11f8: 10 92 d1 20 sts 0x20D1, r1 + 11fc: cf 91 pop r28 + 11fe: 08 95 ret + 1200: c0 e0 ldi r28, 0x00 ; 0 + 1202: e0 91 c9 20 lds r30, 0x20C9 + 1206: f0 91 ca 20 lds r31, 0x20CA + 120a: 01 90 ld r0, Z+ + 120c: f0 81 ld r31, Z + 120e: e0 2d mov r30, r0 + 1210: 84 81 ldd r24, Z+4 ; 0x04 + 1212: c8 17 cp r28, r24 + 1214: 68 f7 brcc .-38 ; 0x11f0 + 1216: 8c 2f mov r24, r28 + 1218: a2 df rcall .-188 ; 0x115e + 121a: cf 5f subi r28, 0xFF ; 255 + 121c: f2 cf rjmp .-28 ; 0x1202 + +0000121e : + 121e: cf 93 push r28 + 1220: 80 91 cc 20 lds r24, 0x20CC + 1224: 88 23 and r24, r24 + 1226: f1 f0 breq .+60 ; 0x1264 + 1228: c0 e0 ldi r28, 0x00 ; 0 + 122a: e0 91 c9 20 lds r30, 0x20C9 + 122e: f0 91 ca 20 lds r31, 0x20CA + 1232: a0 81 ld r26, Z + 1234: b1 81 ldd r27, Z+1 ; 0x01 + 1236: 14 96 adiw r26, 0x04 ; 4 + 1238: 8c 91 ld r24, X + 123a: c8 17 cp r28, r24 + 123c: 98 f4 brcc .+38 ; 0x1264 + 123e: 92 81 ldd r25, Z+2 ; 0x02 + 1240: 83 81 ldd r24, Z+3 ; 0x03 + 1242: e9 2f mov r30, r25 + 1244: f8 2f mov r31, r24 + 1246: ec 0f add r30, r28 + 1248: f1 1d adc r31, r1 + 124a: ec 0f add r30, r28 + 124c: f1 1d adc r31, r1 + 124e: 01 90 ld r0, Z+ + 1250: f0 81 ld r31, Z + 1252: e0 2d mov r30, r0 + 1254: 00 84 ldd r0, Z+8 ; 0x08 + 1256: f1 85 ldd r31, Z+9 ; 0x09 + 1258: e0 2d mov r30, r0 + 125a: 30 97 sbiw r30, 0x00 ; 0 + 125c: 09 f0 breq .+2 ; 0x1260 + 125e: 09 95 icall + 1260: cf 5f subi r28, 0xFF ; 255 + 1262: e3 cf rjmp .-58 ; 0x122a + 1264: cf 91 pop r28 + 1266: 08 95 ret + +00001268 : + 1268: cf 92 push r12 + 126a: df 92 push r13 + 126c: ff 92 push r15 + 126e: 0f 93 push r16 + 1270: 1f 93 push r17 + 1272: cf 93 push r28 + 1274: df 93 push r29 + 1276: 1f 92 push r1 + 1278: cd b7 in r28, 0x3d ; 61 + 127a: de b7 in r29, 0x3e ; 62 + 127c: 10 92 70 24 sts 0x2470, r1 + 1280: 10 92 71 24 sts 0x2471, r1 + 1284: 10 92 72 24 sts 0x2472, r1 + 1288: 10 92 73 24 sts 0x2473, r1 + 128c: 10 92 74 24 sts 0x2474, r1 + 1290: 10 92 75 24 sts 0x2475, r1 + 1294: 20 91 66 24 lds r18, 0x2466 + 1298: 27 ff sbrs r18, 7 + 129a: 07 c0 rjmp .+14 ; 0x12aa + 129c: 80 91 6c 24 lds r24, 0x246C + 12a0: 90 91 6d 24 lds r25, 0x246D + 12a4: 89 2b or r24, r25 + 12a6: 09 f4 brne .+2 ; 0x12aa + 12a8: 08 c3 rjmp .+1552 ; 0x18ba + 12aa: 82 2f mov r24, r18 + 12ac: 80 76 andi r24, 0x60 ; 96 + 12ae: 80 34 cpi r24, 0x40 ; 64 + 12b0: 09 f0 breq .+2 ; 0x12b4 + 12b2: c5 c0 rjmp .+394 ; 0x143e + 12b4: 80 91 67 24 lds r24, 0x2467 + 12b8: 90 e0 ldi r25, 0x00 ; 0 + 12ba: fc 01 movw r30, r24 + 12bc: e0 5a subi r30, 0xA0 ; 160 + 12be: f1 09 sbc r31, r1 + 12c0: e8 30 cpi r30, 0x08 ; 8 + 12c2: f1 05 cpc r31, r1 + 12c4: 08 f0 brcs .+2 ; 0x12c8 + 12c6: 88 c2 rjmp .+1296 ; 0x17d8 + 12c8: ea 5f subi r30, 0xFA ; 250 + 12ca: fe 4f sbci r31, 0xFE ; 254 + 12cc: 0c 94 86 12 jmp 0x250c ; 0x250c <__tablejump2__> + 12d0: 00 00 nop + 12d2: f1 c2 rjmp .+1506 ; 0x18b6 + 12d4: 10 92 00 08 sts 0x0800, r1 + 12d8: 80 91 68 24 lds r24, 0x2468 + 12dc: 90 91 69 24 lds r25, 0x2469 + 12e0: 80 93 36 08 sts 0x0836, r24 + 12e4: 90 93 37 08 sts 0x0837, r25 + 12e8: 80 91 6a 24 lds r24, 0x246A + 12ec: 8f 70 andi r24, 0x0F ; 15 + 12ee: 80 93 00 08 sts 0x0800, r24 + 12f2: 60 91 6c 24 lds r22, 0x246C + 12f6: 70 91 6d 24 lds r23, 0x246D + 12fa: 86 e6 ldi r24, 0x66 ; 102 + 12fc: 92 e2 ldi r25, 0x22 ; 34 + 12fe: 19 c0 rjmp .+50 ; 0x1332 + 1300: 10 92 40 08 sts 0x0840, r1 + 1304: 60 91 6c 24 lds r22, 0x246C + 1308: 70 91 6d 24 lds r23, 0x246D + 130c: 60 93 02 20 sts 0x2002, r22 + 1310: 70 93 03 20 sts 0x2003, r23 + 1314: 80 91 68 24 lds r24, 0x2468 + 1318: 90 91 69 24 lds r25, 0x2469 + 131c: 80 93 76 08 sts 0x0876, r24 + 1320: 90 93 77 08 sts 0x0877, r25 + 1324: 80 91 6a 24 lds r24, 0x246A + 1328: 8f 70 andi r24, 0x0F ; 15 + 132a: 80 93 40 08 sts 0x0840, r24 + 132e: 86 e7 ldi r24, 0x76 ; 118 + 1330: 94 e2 ldi r25, 0x24 ; 36 + 1332: 10 d6 rcall .+3104 ; 0x1f54 + 1334: 20 91 04 20 lds r18, 0x2004 + 1338: 30 91 05 20 lds r19, 0x2005 + 133c: 80 91 6c 24 lds r24, 0x246C + 1340: 90 91 6d 24 lds r25, 0x246D + 1344: 28 17 cp r18, r24 + 1346: 39 07 cpc r19, r25 + 1348: 09 f4 brne .+2 ; 0x134c + 134a: b5 c2 rjmp .+1386 ; 0x18b6 + 134c: 80 93 04 20 sts 0x2004, r24 + 1350: 90 93 05 20 sts 0x2005, r25 + 1354: 80 91 00 20 lds r24, 0x2000 + 1358: 90 e0 ldi r25, 0x00 ; 0 + 135a: 88 30 cpi r24, 0x08 ; 8 + 135c: 91 05 cpc r25, r1 + 135e: 08 f0 brcs .+2 ; 0x1362 + 1360: aa c2 rjmp .+1364 ; 0x18b6 + 1362: fc 01 movw r30, r24 + 1364: e2 5f subi r30, 0xF2 ; 242 + 1366: fe 4f sbci r31, 0xFE ; 254 + 1368: 0c 94 86 12 jmp 0x250c ; 0x250c <__tablejump2__> + 136c: 10 92 68 09 sts 0x0968, r1 + 1370: 10 92 69 09 sts 0x0969, r1 + 1374: 80 91 68 24 lds r24, 0x2468 + 1378: 80 93 c0 20 sts 0x20C0, r24 + 137c: 9c c2 rjmp .+1336 ; 0x18b6 + 137e: 80 91 68 24 lds r24, 0x2468 + 1382: 80 93 24 06 sts 0x0624, r24 + 1386: 97 c2 rjmp .+1326 ; 0x18b6 + 1388: e0 91 68 24 lds r30, 0x2468 + 138c: f0 91 69 24 lds r31, 0x2469 + 1390: e8 30 cpi r30, 0x08 ; 8 + 1392: f1 05 cpc r31, r1 + 1394: 08 f0 brcs .+2 ; 0x1398 + 1396: 20 c2 rjmp .+1088 ; 0x17d8 + 1398: ea 5e subi r30, 0xEA ; 234 + 139a: fe 4f sbci r31, 0xFE ; 254 + 139c: 0c 94 86 12 jmp 0x250c ; 0x250c <__tablejump2__> + 13a0: 60 e0 ldi r22, 0x00 ; 0 + 13a2: 80 e0 ldi r24, 0x00 ; 0 + 13a4: 0a d8 rcall .-4076 ; 0x3ba + 13a6: 80 91 6a 24 lds r24, 0x246A + 13aa: 0e 94 aa 01 call 0x354 ; 0x354 + 13ae: 73 d8 rcall .-3866 ; 0x496 + 13b0: 82 c2 rjmp .+1284 ; 0x18b6 + 13b2: 60 e0 ldi r22, 0x00 ; 0 + 13b4: 80 e0 ldi r24, 0x00 ; 0 + 13b6: 01 d8 rcall .-4094 ; 0x3ba + 13b8: 80 91 6a 24 lds r24, 0x246A + 13bc: 0e 94 aa 01 call 0x354 ; 0x354 + 13c0: e2 d8 rcall .-3644 ; 0x586 + 13c2: 79 c2 rjmp .+1266 ; 0x18b6 + 13c4: 61 e0 ldi r22, 0x01 ; 1 + 13c6: 81 e0 ldi r24, 0x01 ; 1 + 13c8: 0e 94 dd 01 call 0x3ba ; 0x3ba + 13cc: 80 91 6a 24 lds r24, 0x246A + 13d0: 0e 94 aa 01 call 0x354 ; 0x354 + 13d4: 80 91 6b 24 lds r24, 0x246B + 13d8: 0e 94 c0 01 call 0x380 ; 0x380 + 13dc: 78 d9 rcall .-3344 ; 0x6ce + 13de: 6b c2 rjmp .+1238 ; 0x18b6 + 13e0: 17 da rcall .-3026 ; 0x810 + 13e2: 69 c2 rjmp .+1234 ; 0x18b6 + 13e4: ab da rcall .-2730 ; 0x93c + 13e6: 67 c2 rjmp .+1230 ; 0x18b6 + 13e8: 60 e0 ldi r22, 0x00 ; 0 + 13ea: 80 e0 ldi r24, 0x00 ; 0 + 13ec: 0e 94 dd 01 call 0x3ba ; 0x3ba + 13f0: 80 91 6a 24 lds r24, 0x246A + 13f4: 0e 94 aa 01 call 0x354 ; 0x354 + 13f8: 60 db rcall .-2368 ; 0xaba + 13fa: 5d c2 rjmp .+1210 ; 0x18b6 + 13fc: 61 e0 ldi r22, 0x01 ; 1 + 13fe: 80 e0 ldi r24, 0x00 ; 0 + 1400: 0e 94 dd 01 call 0x3ba ; 0x3ba + 1404: 80 91 6a 24 lds r24, 0x246A + 1408: 0e 94 aa 01 call 0x354 ; 0x354 + 140c: 9d db rcall .-2246 ; 0xb48 + 140e: 53 c2 rjmp .+1190 ; 0x18b6 + 1410: 62 e0 ldi r22, 0x02 ; 2 + 1412: 80 e0 ldi r24, 0x00 ; 0 + 1414: 0e 94 dd 01 call 0x3ba ; 0x3ba + 1418: 80 91 6a 24 lds r24, 0x246A + 141c: 80 68 ori r24, 0x80 ; 128 + 141e: 0e 94 aa 01 call 0x354 ; 0x354 + 1422: 09 dc rcall .-2030 ; 0xc36 + 1424: 48 c2 rjmp .+1168 ; 0x18b6 + 1426: 80 91 68 24 lds r24, 0x2468 + 142a: 80 93 84 06 sts 0x0684, r24 + 142e: 43 c2 rjmp .+1158 ; 0x18b6 + 1430: e9 e7 ldi r30, 0x79 ; 121 + 1432: f0 e0 ldi r31, 0x00 ; 0 + 1434: 91 e0 ldi r25, 0x01 ; 1 + 1436: 88 ed ldi r24, 0xD8 ; 216 + 1438: f8 94 cli + 143a: 84 bf out 0x34, r24 ; 52 + 143c: 90 83 st Z, r25 + 143e: 81 11 cpse r24, r1 + 1440: cb c1 rjmp .+918 ; 0x17d8 + 1442: 27 ff sbrs r18, 7 + 1444: fb c0 rjmp .+502 ; 0x163c + 1446: 80 91 6c 24 lds r24, 0x246C + 144a: 90 91 6d 24 lds r25, 0x246D + 144e: 00 97 sbiw r24, 0x00 ; 0 + 1450: 09 f4 brne .+2 ; 0x1454 + 1452: c2 c1 rjmp .+900 ; 0x17d8 + 1454: 2f 71 andi r18, 0x1F ; 31 + 1456: 09 f0 breq .+2 ; 0x145a + 1458: 9b c0 rjmp .+310 ; 0x1590 + 145a: 20 91 67 24 lds r18, 0x2467 + 145e: 26 30 cpi r18, 0x06 ; 6 + 1460: 69 f0 breq .+26 ; 0x147c + 1462: 28 30 cpi r18, 0x08 ; 8 + 1464: 09 f4 brne .+2 ; 0x1468 + 1466: 8c c0 rjmp .+280 ; 0x1580 + 1468: 21 11 cpse r18, r1 + 146a: b6 c1 rjmp .+876 ; 0x17d8 + 146c: 02 97 sbiw r24, 0x02 ; 2 + 146e: 09 f0 breq .+2 ; 0x1472 + 1470: b3 c1 rjmp .+870 ; 0x17d8 + 1472: 62 e0 ldi r22, 0x02 ; 2 + 1474: 70 e0 ldi r23, 0x00 ; 0 + 1476: 80 ed ldi r24, 0xD0 ; 208 + 1478: 90 e2 ldi r25, 0x20 ; 32 + 147a: de c0 rjmp .+444 ; 0x1638 + 147c: 20 91 68 24 lds r18, 0x2468 + 1480: 30 91 69 24 lds r19, 0x2469 + 1484: 83 2f mov r24, r19 + 1486: 99 27 eor r25, r25 + 1488: 82 30 cpi r24, 0x02 ; 2 + 148a: 91 05 cpc r25, r1 + 148c: 91 f0 breq .+36 ; 0x14b2 + 148e: 5c f4 brge .+22 ; 0x14a6 + 1490: 01 97 sbiw r24, 0x01 ; 1 + 1492: 09 f0 breq .+2 ; 0x1496 + 1494: a1 c1 rjmp .+834 ; 0x17d8 + 1496: 80 91 10 20 lds r24, 0x2010 + 149a: 90 91 11 20 lds r25, 0x2011 + 149e: dc 01 movw r26, r24 + 14a0: 6c 91 ld r22, X + 14a2: 70 e0 ldi r23, 0x00 ; 0 + 14a4: 5b c0 rjmp .+182 ; 0x155c + 14a6: 83 30 cpi r24, 0x03 ; 3 + 14a8: 91 05 cpc r25, r1 + 14aa: 81 f1 breq .+96 ; 0x150c + 14ac: 0f 97 sbiw r24, 0x0f ; 15 + 14ae: 09 f1 breq .+66 ; 0x14f2 + 14b0: 93 c1 rjmp .+806 ; 0x17d8 + 14b2: e0 91 10 20 lds r30, 0x2010 + 14b6: f0 91 11 20 lds r31, 0x2011 + 14ba: 81 89 ldd r24, Z+17 ; 0x11 + 14bc: 28 17 cp r18, r24 + 14be: 08 f0 brcs .+2 ; 0x14c2 + 14c0: 8b c1 rjmp .+790 ; 0x17d8 + 14c2: 33 27 eor r19, r19 + 14c4: 22 0f add r18, r18 + 14c6: 33 1f adc r19, r19 + 14c8: 22 0f add r18, r18 + 14ca: 33 1f adc r19, r19 + 14cc: e0 91 12 20 lds r30, 0x2012 + 14d0: f0 91 13 20 lds r31, 0x2013 + 14d4: e2 0f add r30, r18 + 14d6: f3 1f adc r31, r19 + 14d8: 80 81 ld r24, Z + 14da: 91 81 ldd r25, Z+1 ; 0x01 + 14dc: fc 01 movw r30, r24 + 14de: 62 81 ldd r22, Z+2 ; 0x02 + 14e0: 73 81 ldd r23, Z+3 ; 0x03 + 14e2: 38 d5 rcall .+2672 ; 0x1f54 + 14e4: e0 91 6e 24 lds r30, 0x246E + 14e8: f0 91 6f 24 lds r31, 0x246F + 14ec: 82 e0 ldi r24, 0x02 ; 2 + 14ee: 81 83 std Z+1, r24 ; 0x01 + 14f0: 36 c0 rjmp .+108 ; 0x155e + 14f2: 80 91 14 20 lds r24, 0x2014 + 14f6: 90 91 15 20 lds r25, 0x2015 + 14fa: 00 97 sbiw r24, 0x00 ; 0 + 14fc: 09 f4 brne .+2 ; 0x1500 + 14fe: 6c c1 rjmp .+728 ; 0x17d8 + 1500: dc 01 movw r26, r24 + 1502: 12 96 adiw r26, 0x02 ; 2 + 1504: 6d 91 ld r22, X+ + 1506: 7c 91 ld r23, X + 1508: 13 97 sbiw r26, 0x03 ; 3 + 150a: 28 c0 rjmp .+80 ; 0x155c + 150c: 33 27 eor r19, r19 + 150e: 21 30 cpi r18, 0x01 ; 1 + 1510: 31 05 cpc r19, r1 + 1512: 29 f0 breq .+10 ; 0x151e + 1514: 40 f0 brcs .+16 ; 0x1526 + 1516: 22 30 cpi r18, 0x02 ; 2 + 1518: 31 05 cpc r19, r1 + 151a: 51 f0 breq .+20 ; 0x1530 + 151c: 5d c1 rjmp .+698 ; 0x17d8 + 151e: 69 e0 ldi r22, 0x09 ; 9 + 1520: 83 ea ldi r24, 0xA3 ; 163 + 1522: 90 e2 ldi r25, 0x20 ; 32 + 1524: 08 c0 rjmp .+16 ; 0x1536 + 1526: 64 e0 ldi r22, 0x04 ; 4 + 1528: 70 e0 ldi r23, 0x00 ; 0 + 152a: 8e ea ldi r24, 0xAE ; 174 + 152c: 90 e2 ldi r25, 0x20 ; 32 + 152e: 16 c0 rjmp .+44 ; 0x155c + 1530: 68 e1 ldi r22, 0x18 ; 24 + 1532: 8a e8 ldi r24, 0x8A ; 138 + 1534: 90 e2 ldi r25, 0x20 ; 32 + 1536: 28 2f mov r18, r24 + 1538: aa e5 ldi r26, 0x5A ; 90 + 153a: b0 e2 ldi r27, 0x20 ; 32 + 153c: fc 01 movw r30, r24 + 153e: 81 91 ld r24, Z+ + 1540: 90 e0 ldi r25, 0x00 ; 0 + 1542: 8d 93 st X+, r24 + 1544: 9d 93 st X+, r25 + 1546: 8e 2f mov r24, r30 + 1548: 82 1b sub r24, r18 + 154a: 86 17 cp r24, r22 + 154c: c0 f3 brcs .-16 ; 0x153e + 154e: 66 0f add r22, r22 + 1550: 6e 5f subi r22, 0xFE ; 254 + 1552: 60 93 58 20 sts 0x2058, r22 + 1556: 70 e0 ldi r23, 0x00 ; 0 + 1558: 88 e5 ldi r24, 0x58 ; 88 + 155a: 90 e2 ldi r25, 0x20 ; 32 + 155c: fb d4 rcall .+2550 ; 0x1f54 + 155e: 80 91 6c 24 lds r24, 0x246C + 1562: 90 91 6d 24 lds r25, 0x246D + 1566: 20 91 70 24 lds r18, 0x2470 + 156a: 30 91 71 24 lds r19, 0x2471 + 156e: 82 17 cp r24, r18 + 1570: 93 07 cpc r25, r19 + 1572: 08 f0 brcs .+2 ; 0x1576 + 1574: a0 c1 rjmp .+832 ; 0x18b6 + 1576: 80 93 70 24 sts 0x2470, r24 + 157a: 90 93 71 24 sts 0x2471, r25 + 157e: 9b c1 rjmp .+822 ; 0x18b6 + 1580: 01 97 sbiw r24, 0x01 ; 1 + 1582: 09 f0 breq .+2 ; 0x1586 + 1584: 29 c1 rjmp .+594 ; 0x17d8 + 1586: 61 e0 ldi r22, 0x01 ; 1 + 1588: 70 e0 ldi r23, 0x00 ; 0 + 158a: 8c ec ldi r24, 0xCC ; 204 + 158c: 90 e2 ldi r25, 0x20 ; 32 + 158e: 54 c0 rjmp .+168 ; 0x1638 + 1590: 21 30 cpi r18, 0x01 ; 1 + 1592: e1 f5 brne .+120 ; 0x160c + 1594: 20 91 67 24 lds r18, 0x2467 + 1598: 2a 30 cpi r18, 0x0A ; 10 + 159a: 09 f0 breq .+2 ; 0x159e + 159c: 1d c1 rjmp .+570 ; 0x17d8 + 159e: 01 97 sbiw r24, 0x01 ; 1 + 15a0: 09 f0 breq .+2 ; 0x15a4 + 15a2: 1a c1 rjmp .+564 ; 0x17d8 + 15a4: 80 91 cc 20 lds r24, 0x20CC + 15a8: 88 23 and r24, r24 + 15aa: 09 f4 brne .+2 ; 0x15ae + 15ac: 15 c1 rjmp .+554 ; 0x17d8 + 15ae: c0 90 6a 24 lds r12, 0x246A + 15b2: d0 90 6b 24 lds r13, 0x246B + 15b6: 00 91 c9 20 lds r16, 0x20C9 + 15ba: 10 91 ca 20 lds r17, 0x20CA + 15be: d8 01 movw r26, r16 + 15c0: ed 91 ld r30, X+ + 15c2: fc 91 ld r31, X + 15c4: 84 81 ldd r24, Z+4 ; 0x04 + 15c6: c8 16 cp r12, r24 + 15c8: 08 f0 brcs .+2 ; 0x15cc + 15ca: 06 c1 rjmp .+524 ; 0x17d8 + 15cc: 60 e0 ldi r22, 0x00 ; 0 + 15ce: 8c 2d mov r24, r12 + 15d0: 41 dd rcall .-1406 ; 0x1054 + 15d2: f8 2e mov r15, r24 + 15d4: 88 23 and r24, r24 + 15d6: 09 f4 brne .+2 ; 0x15da + 15d8: ff c0 rjmp .+510 ; 0x17d8 + 15da: dd 24 eor r13, r13 + 15dc: cc 0c add r12, r12 + 15de: dd 1c adc r13, r13 + 15e0: d8 01 movw r26, r16 + 15e2: 12 96 adiw r26, 0x02 ; 2 + 15e4: ed 91 ld r30, X+ + 15e6: fc 91 ld r31, X + 15e8: 13 97 sbiw r26, 0x03 ; 3 + 15ea: ec 0d add r30, r12 + 15ec: fd 1d adc r31, r13 + 15ee: 01 90 ld r0, Z+ + 15f0: f0 81 ld r31, Z + 15f2: e0 2d mov r30, r0 + 15f4: 06 80 ldd r0, Z+6 ; 0x06 + 15f6: f7 81 ldd r31, Z+7 ; 0x07 + 15f8: e0 2d mov r30, r0 + 15fa: 09 95 icall + 15fc: 80 93 ce 20 sts 0x20CE, r24 + 1600: 61 e0 ldi r22, 0x01 ; 1 + 1602: 70 e0 ldi r23, 0x00 ; 0 + 1604: 8e ec ldi r24, 0xCE ; 206 + 1606: 90 e2 ldi r25, 0x20 ; 32 + 1608: a5 d4 rcall .+2378 ; 0x1f54 + 160a: e4 c0 rjmp .+456 ; 0x17d4 + 160c: 22 30 cpi r18, 0x02 ; 2 + 160e: 09 f0 breq .+2 ; 0x1612 + 1610: e3 c0 rjmp .+454 ; 0x17d8 + 1612: 20 91 67 24 lds r18, 0x2467 + 1616: 21 11 cpse r18, r1 + 1618: df c0 rjmp .+446 ; 0x17d8 + 161a: 02 97 sbiw r24, 0x02 ; 2 + 161c: 09 f0 breq .+2 ; 0x1620 + 161e: dc c0 rjmp .+440 ; 0x17d8 + 1620: 80 91 6a 24 lds r24, 0x246A + 1624: f2 d4 rcall .+2532 ; 0x200a + 1626: 90 e0 ldi r25, 0x00 ; 0 + 1628: 80 93 c5 20 sts 0x20C5, r24 + 162c: 90 93 c6 20 sts 0x20C6, r25 + 1630: 62 e0 ldi r22, 0x02 ; 2 + 1632: 70 e0 ldi r23, 0x00 ; 0 + 1634: 85 ec ldi r24, 0xC5 ; 197 + 1636: 90 e2 ldi r25, 0x20 ; 32 + 1638: 8d d4 rcall .+2330 ; 0x1f54 + 163a: 3d c1 rjmp .+634 ; 0x18b6 + 163c: 2f 71 andi r18, 0x1F ; 31 + 163e: 09 f0 breq .+2 ; 0x1642 + 1640: 7d c0 rjmp .+250 ; 0x173c + 1642: 80 91 67 24 lds r24, 0x2467 + 1646: 83 30 cpi r24, 0x03 ; 3 + 1648: 09 f4 brne .+2 ; 0x164c + 164a: c6 c0 rjmp .+396 ; 0x17d8 + 164c: 18 f4 brcc .+6 ; 0x1654 + 164e: 81 30 cpi r24, 0x01 ; 1 + 1650: a1 f0 breq .+40 ; 0x167a + 1652: c2 c0 rjmp .+388 ; 0x17d8 + 1654: 85 30 cpi r24, 0x05 ; 5 + 1656: 19 f0 breq .+6 ; 0x165e + 1658: 89 30 cpi r24, 0x09 ; 9 + 165a: 39 f1 breq .+78 ; 0x16aa + 165c: bd c0 rjmp .+378 ; 0x17d8 + 165e: 80 91 6c 24 lds r24, 0x246C + 1662: 90 91 6d 24 lds r25, 0x246D + 1666: 89 2b or r24, r25 + 1668: 09 f0 breq .+2 ; 0x166c + 166a: b6 c0 rjmp .+364 ; 0x17d8 + 166c: 86 e2 ldi r24, 0x26 ; 38 + 166e: 98 e0 ldi r25, 0x08 ; 8 + 1670: 80 93 72 24 sts 0x2472, r24 + 1674: 90 93 73 24 sts 0x2473, r25 + 1678: 1e c1 rjmp .+572 ; 0x18b6 + 167a: 80 91 6c 24 lds r24, 0x246C + 167e: 90 91 6d 24 lds r25, 0x246D + 1682: 89 2b or r24, r25 + 1684: 09 f0 breq .+2 ; 0x1688 + 1686: a8 c0 rjmp .+336 ; 0x17d8 + 1688: 80 91 68 24 lds r24, 0x2468 + 168c: 90 91 69 24 lds r25, 0x2469 + 1690: 01 97 sbiw r24, 0x01 ; 1 + 1692: 09 f0 breq .+2 ; 0x1696 + 1694: a1 c0 rjmp .+322 ; 0x17d8 + 1696: 80 91 d0 20 lds r24, 0x20D0 + 169a: 90 91 d1 20 lds r25, 0x20D1 + 169e: 8d 7f andi r24, 0xFD ; 253 + 16a0: 80 93 d0 20 sts 0x20D0, r24 + 16a4: 90 93 d1 20 sts 0x20D1, r25 + 16a8: 06 c1 rjmp .+524 ; 0x18b6 + 16aa: 80 91 6c 24 lds r24, 0x246C + 16ae: 90 91 6d 24 lds r25, 0x246D + 16b2: 89 2b or r24, r25 + 16b4: 09 f0 breq .+2 ; 0x16b8 + 16b6: 90 c0 rjmp .+288 ; 0x17d8 + 16b8: 4a d4 rcall .+2196 ; 0x1f4e + 16ba: 88 23 and r24, r24 + 16bc: 09 f4 brne .+2 ; 0x16c0 + 16be: 8c c0 rjmp .+280 ; 0x17d8 + 16c0: 80 91 68 24 lds r24, 0x2468 + 16c4: 90 91 69 24 lds r25, 0x2469 + 16c8: 99 27 eor r25, r25 + 16ca: e0 91 10 20 lds r30, 0x2010 + 16ce: f0 91 11 20 lds r31, 0x2011 + 16d2: 21 89 ldd r18, Z+17 ; 0x11 + 16d4: 30 e0 ldi r19, 0x00 ; 0 + 16d6: 28 17 cp r18, r24 + 16d8: 39 07 cpc r19, r25 + 16da: 08 f4 brcc .+2 ; 0x16de + 16dc: 7d c0 rjmp .+250 ; 0x17d8 + 16de: 83 dd rcall .-1274 ; 0x11e6 + 16e0: 20 91 68 24 lds r18, 0x2468 + 16e4: 30 91 69 24 lds r19, 0x2469 + 16e8: 20 93 cc 20 sts 0x20CC, r18 + 16ec: 22 23 and r18, r18 + 16ee: 09 f4 brne .+2 ; 0x16f2 + 16f0: e2 c0 rjmp .+452 ; 0x18b6 + 16f2: 33 27 eor r19, r19 + 16f4: 21 50 subi r18, 0x01 ; 1 + 16f6: 30 4c sbci r19, 0xC0 ; 192 + 16f8: 22 0f add r18, r18 + 16fa: 33 1f adc r19, r19 + 16fc: 22 0f add r18, r18 + 16fe: 33 1f adc r19, r19 + 1700: 80 91 12 20 lds r24, 0x2012 + 1704: 90 91 13 20 lds r25, 0x2013 + 1708: 82 0f add r24, r18 + 170a: 93 1f adc r25, r19 + 170c: 80 93 c9 20 sts 0x20C9, r24 + 1710: 90 93 ca 20 sts 0x20CA, r25 + 1714: 10 e0 ldi r17, 0x00 ; 0 + 1716: e0 91 c9 20 lds r30, 0x20C9 + 171a: f0 91 ca 20 lds r31, 0x20CA + 171e: 01 90 ld r0, Z+ + 1720: f0 81 ld r31, Z + 1722: e0 2d mov r30, r0 + 1724: 84 81 ldd r24, Z+4 ; 0x04 + 1726: 18 17 cp r17, r24 + 1728: 08 f0 brcs .+2 ; 0x172c + 172a: c5 c0 rjmp .+394 ; 0x18b6 + 172c: 60 e0 ldi r22, 0x00 ; 0 + 172e: 81 2f mov r24, r17 + 1730: e3 dc rcall .-1594 ; 0x10f8 + 1732: 88 23 and r24, r24 + 1734: 09 f4 brne .+2 ; 0x1738 + 1736: 50 c0 rjmp .+160 ; 0x17d8 + 1738: 1f 5f subi r17, 0xFF ; 255 + 173a: ed cf rjmp .-38 ; 0x1716 + 173c: 21 30 cpi r18, 0x01 ; 1 + 173e: f1 f4 brne .+60 ; 0x177c + 1740: 80 91 67 24 lds r24, 0x2467 + 1744: 8b 30 cpi r24, 0x0B ; 11 + 1746: 09 f0 breq .+2 ; 0x174a + 1748: 47 c0 rjmp .+142 ; 0x17d8 + 174a: 80 91 6c 24 lds r24, 0x246C + 174e: 90 91 6d 24 lds r25, 0x246D + 1752: 89 2b or r24, r25 + 1754: 09 f0 breq .+2 ; 0x1758 + 1756: 40 c0 rjmp .+128 ; 0x17d8 + 1758: 80 91 cc 20 lds r24, 0x20CC + 175c: 88 23 and r24, r24 + 175e: 09 f4 brne .+2 ; 0x1762 + 1760: 3b c0 rjmp .+118 ; 0x17d8 + 1762: 10 91 6a 24 lds r17, 0x246A + 1766: 60 91 68 24 lds r22, 0x2468 + 176a: 81 2f mov r24, r17 + 176c: 69 83 std Y+1, r22 ; 0x01 + 176e: f7 dc rcall .-1554 ; 0x115e + 1770: 69 81 ldd r22, Y+1 ; 0x01 + 1772: 88 23 and r24, r24 + 1774: 89 f1 breq .+98 ; 0x17d8 + 1776: 81 2f mov r24, r17 + 1778: bf dc rcall .-1666 ; 0x10f8 + 177a: 2b c0 rjmp .+86 ; 0x17d2 + 177c: 22 30 cpi r18, 0x02 ; 2 + 177e: 61 f5 brne .+88 ; 0x17d8 + 1780: 80 91 67 24 lds r24, 0x2467 + 1784: 81 30 cpi r24, 0x01 ; 1 + 1786: 19 f0 breq .+6 ; 0x178e + 1788: 83 30 cpi r24, 0x03 ; 3 + 178a: 89 f0 breq .+34 ; 0x17ae + 178c: 25 c0 rjmp .+74 ; 0x17d8 + 178e: 80 91 6c 24 lds r24, 0x246C + 1792: 90 91 6d 24 lds r25, 0x246D + 1796: 89 2b or r24, r25 + 1798: f9 f4 brne .+62 ; 0x17d8 + 179a: 80 91 68 24 lds r24, 0x2468 + 179e: 90 91 69 24 lds r25, 0x2469 + 17a2: 89 2b or r24, r25 + 17a4: c9 f4 brne .+50 ; 0x17d8 + 17a6: 80 91 6a 24 lds r24, 0x246A + 17aa: 36 d4 rcall .+2156 ; 0x2018 + 17ac: 12 c0 rjmp .+36 ; 0x17d2 + 17ae: 80 91 6c 24 lds r24, 0x246C + 17b2: 90 91 6d 24 lds r25, 0x246D + 17b6: 89 2b or r24, r25 + 17b8: 79 f4 brne .+30 ; 0x17d8 + 17ba: 80 91 68 24 lds r24, 0x2468 + 17be: 90 91 69 24 lds r25, 0x2469 + 17c2: 89 2b or r24, r25 + 17c4: 49 f4 brne .+18 ; 0x17d8 + 17c6: 80 91 6a 24 lds r24, 0x246A + 17ca: c1 d4 rcall .+2434 ; 0x214e + 17cc: 80 91 6a 24 lds r24, 0x246A + 17d0: f2 d4 rcall .+2532 ; 0x21b6 + 17d2: f8 2e mov r15, r24 + 17d4: f1 10 cpse r15, r1 + 17d6: 6f c0 rjmp .+222 ; 0x18b6 + 17d8: 80 91 66 24 lds r24, 0x2466 + 17dc: 8f 71 andi r24, 0x1F ; 31 + 17de: 81 30 cpi r24, 0x01 ; 1 + 17e0: b9 f5 brne .+110 ; 0x1850 + 17e2: 80 91 cc 20 lds r24, 0x20CC + 17e6: 88 23 and r24, r24 + 17e8: 99 f1 breq .+102 ; 0x1850 + 17ea: c0 90 6a 24 lds r12, 0x246A + 17ee: d0 90 6b 24 lds r13, 0x246B + 17f2: 00 91 c9 20 lds r16, 0x20C9 + 17f6: 10 91 ca 20 lds r17, 0x20CA + 17fa: d8 01 movw r26, r16 + 17fc: ed 91 ld r30, X+ + 17fe: fc 91 ld r31, X + 1800: 84 81 ldd r24, Z+4 ; 0x04 + 1802: c8 16 cp r12, r24 + 1804: 28 f5 brcc .+74 ; 0x1850 + 1806: 60 e0 ldi r22, 0x00 ; 0 + 1808: 8c 2d mov r24, r12 + 180a: 24 dc rcall .-1976 ; 0x1054 + 180c: 88 23 and r24, r24 + 180e: 01 f1 breq .+64 ; 0x1850 + 1810: c6 01 movw r24, r12 + 1812: 99 27 eor r25, r25 + 1814: 88 0f add r24, r24 + 1816: 99 1f adc r25, r25 + 1818: d8 01 movw r26, r16 + 181a: 12 96 adiw r26, 0x02 ; 2 + 181c: ed 91 ld r30, X+ + 181e: fc 91 ld r31, X + 1820: 13 97 sbiw r26, 0x03 ; 3 + 1822: e8 0f add r30, r24 + 1824: f9 1f adc r31, r25 + 1826: 00 81 ld r16, Z + 1828: 11 81 ldd r17, Z+1 ; 0x01 + 182a: d8 01 movw r26, r16 + 182c: 16 96 adiw r26, 0x06 ; 6 + 182e: ed 91 ld r30, X+ + 1830: fc 91 ld r31, X + 1832: 17 97 sbiw r26, 0x07 ; 7 + 1834: 09 95 icall + 1836: 68 2f mov r22, r24 + 1838: 8c 2d mov r24, r12 + 183a: 0c dc rcall .-2024 ; 0x1054 + 183c: 88 23 and r24, r24 + 183e: 41 f0 breq .+16 ; 0x1850 + 1840: d8 01 movw r26, r16 + 1842: 14 96 adiw r26, 0x04 ; 4 + 1844: ed 91 ld r30, X+ + 1846: fc 91 ld r31, X + 1848: 15 97 sbiw r26, 0x05 ; 5 + 184a: 09 95 icall + 184c: 81 11 cpse r24, r1 + 184e: 33 c0 rjmp .+102 ; 0x18b6 + 1850: 80 91 66 24 lds r24, 0x2466 + 1854: 8f 71 andi r24, 0x1F ; 31 + 1856: 82 30 cpi r24, 0x02 ; 2 + 1858: 81 f5 brne .+96 ; 0x18ba + 185a: 80 91 cc 20 lds r24, 0x20CC + 185e: 88 23 and r24, r24 + 1860: 61 f1 breq .+88 ; 0x18ba + 1862: 10 e0 ldi r17, 0x00 ; 0 + 1864: e0 91 c9 20 lds r30, 0x20C9 + 1868: f0 91 ca 20 lds r31, 0x20CA + 186c: a0 81 ld r26, Z + 186e: b1 81 ldd r27, Z+1 ; 0x01 + 1870: 14 96 adiw r26, 0x04 ; 4 + 1872: 8c 91 ld r24, X + 1874: 18 17 cp r17, r24 + 1876: 08 f5 brcc .+66 ; 0x18ba + 1878: 92 81 ldd r25, Z+2 ; 0x02 + 187a: 83 81 ldd r24, Z+3 ; 0x03 + 187c: e9 2f mov r30, r25 + 187e: f8 2f mov r31, r24 + 1880: e1 0f add r30, r17 + 1882: f1 1d adc r31, r1 + 1884: e1 0f add r30, r17 + 1886: f1 1d adc r31, r1 + 1888: c0 80 ld r12, Z + 188a: d1 80 ldd r13, Z+1 ; 0x01 + 188c: d6 01 movw r26, r12 + 188e: 16 96 adiw r26, 0x06 ; 6 + 1890: ed 91 ld r30, X+ + 1892: fc 91 ld r31, X + 1894: 17 97 sbiw r26, 0x07 ; 7 + 1896: 09 95 icall + 1898: 68 2f mov r22, r24 + 189a: 81 2f mov r24, r17 + 189c: db db rcall .-2122 ; 0x1054 + 189e: 88 23 and r24, r24 + 18a0: 61 f0 breq .+24 ; 0x18ba + 18a2: d6 01 movw r26, r12 + 18a4: 14 96 adiw r26, 0x04 ; 4 + 18a6: ed 91 ld r30, X+ + 18a8: fc 91 ld r31, X + 18aa: 15 97 sbiw r26, 0x05 ; 5 + 18ac: 09 95 icall + 18ae: 81 11 cpse r24, r1 + 18b0: 02 c0 rjmp .+4 ; 0x18b6 + 18b2: 1f 5f subi r17, 0xFF ; 255 + 18b4: d7 cf rjmp .-82 ; 0x1864 + 18b6: 81 e0 ldi r24, 0x01 ; 1 + 18b8: 01 c0 rjmp .+2 ; 0x18bc + 18ba: 80 e0 ldi r24, 0x00 ; 0 + 18bc: 0f 90 pop r0 + 18be: df 91 pop r29 + 18c0: cf 91 pop r28 + 18c2: 1f 91 pop r17 + 18c4: 0f 91 pop r16 + 18c6: ff 90 pop r15 + 18c8: df 90 pop r13 + 18ca: cf 90 pop r12 + 18cc: 08 95 ret + +000018ce : + + PUBLIC_FUNCTION(ccp_write_io) + +#if defined(__GNUC__) + + out RAMPZ, r1 // Reset bits 23:16 of Z + 18ce: 1b be out 0x3b, r1 ; 59 + movw r30, r24 // Load addr into Z + 18d0: fc 01 movw r30, r24 + ldi r18, CCP_IOREG // Load magic CCP value + 18d2: 28 ed ldi r18, 0xD8 ; 216 + out CCP, r18 // Start CCP handshake + 18d4: 24 bf out 0x34, r18 ; 52 + st Z, r22 // Write value to I/O register + 18d6: 60 83 st Z, r22 + ret // Return to caller + 18d8: 08 95 ret + +000018da : +#endif + +#ifndef __DOXYGEN__ + PUBLIC_FUNCTION(nvm_read_byte) +#if defined(__GNUC__) + lds r20, NVM_CMD ; Store NVM command register + 18da: 40 91 ca 01 lds r20, 0x01CA + mov ZL, r22 ; Load byte index into low byte of Z. + 18de: e6 2f mov r30, r22 + mov ZH, r23 ; Load high byte into Z. + 18e0: f7 2f mov r31, r23 + sts NVM_CMD, r24 ; Load prepared command into NVM Command register. + 18e2: 80 93 ca 01 sts 0x01CA, r24 + lpm r24, Z ; Perform an LPM to read out byte + 18e6: 84 91 lpm r24, Z + sts NVM_CMD, r20 ; Restore NVM command register + 18e8: 40 93 ca 01 sts 0x01CA, r20 + sts NVM_CMD, r16 ; Load prepared command into NVM Command register. + lpm r16, Z ; Perform an LPM to read out byte + sts NVM_CMD, r20 ; Restore NVM command register +#endif + + ret + 18ec: 08 95 ret + +000018ee : + 18ee: e8 2f mov r30, r24 + 18f0: f0 e0 ldi r31, 0x00 ; 0 + 18f2: ee 5a subi r30, 0xAE ; 174 + 18f4: f3 4d sbci r31, 0xD3 ; 211 + 18f6: 80 81 ld r24, Z + 18f8: 8f 3f cpi r24, 0xFF ; 255 + 18fa: 09 f4 brne .+2 ; 0x18fe + 18fc: ff cf rjmp .-2 ; 0x18fc + 18fe: 9f b7 in r25, 0x3f ; 63 + 1900: f8 94 cli + 1902: 80 81 ld r24, Z + 1904: 8f 5f subi r24, 0xFF ; 255 + 1906: 80 83 st Z, r24 + 1908: 9f bf out 0x3f, r25 ; 63 + 190a: 08 95 ret + +0000190c : + 190c: e8 2f mov r30, r24 + 190e: f0 e0 ldi r31, 0x00 ; 0 + 1910: ee 5a subi r30, 0xAE ; 174 + 1912: f3 4d sbci r31, 0xD3 ; 211 + 1914: 80 81 ld r24, Z + 1916: 81 11 cpse r24, r1 + 1918: 01 c0 rjmp .+2 ; 0x191c + 191a: ff cf rjmp .-2 ; 0x191a + 191c: 9f b7 in r25, 0x3f ; 63 + 191e: f8 94 cli + 1920: 80 81 ld r24, Z + 1922: 81 50 subi r24, 0x01 ; 1 + 1924: 80 83 st Z, r24 + 1926: 9f bf out 0x3f, r25 ; 63 + 1928: 08 95 ret + +0000192a : + 192a: cf 93 push r28 + 192c: c8 2f mov r28, r24 + 192e: 80 91 64 22 lds r24, 0x2264 + 1932: c1 11 cpse r28, r1 + 1934: 05 c0 rjmp .+10 ; 0x1940 + 1936: 88 23 and r24, r24 + 1938: 39 f0 breq .+14 ; 0x1948 + 193a: 81 e0 ldi r24, 0x01 ; 1 + 193c: e7 df rcall .-50 ; 0x190c + 193e: 04 c0 rjmp .+8 ; 0x1948 + 1940: 81 11 cpse r24, r1 + 1942: 02 c0 rjmp .+4 ; 0x1948 + 1944: 81 e0 ldi r24, 0x01 ; 1 + 1946: d3 df rcall .-90 ; 0x18ee + 1948: c0 93 64 22 sts 0x2264, r28 + 194c: cf 91 pop r28 + 194e: 08 95 ret + +00001950 : + 1950: 28 2f mov r18, r24 + 1952: 2f 70 andi r18, 0x0F ; 15 + 1954: 99 27 eor r25, r25 + 1956: 87 fd sbrc r24, 7 + 1958: 90 95 com r25 + 195a: 88 27 eor r24, r24 + 195c: 99 0f add r25, r25 + 195e: 88 1f adc r24, r24 + 1960: 99 27 eor r25, r25 + 1962: 82 0f add r24, r18 + 1964: 91 1d adc r25, r1 + 1966: 82 0f add r24, r18 + 1968: 91 1d adc r25, r1 + 196a: 43 e0 ldi r20, 0x03 ; 3 + 196c: 88 0f add r24, r24 + 196e: 99 1f adc r25, r25 + 1970: 4a 95 dec r20 + 1972: e1 f7 brne .-8 ; 0x196c + 1974: 80 5e subi r24, 0xE0 ; 224 + 1976: 9d 4d sbci r25, 0xDD ; 221 + 1978: 08 95 ret + +0000197a : + 197a: 0f 93 push r16 + 197c: e8 ec ldi r30, 0xC8 ; 200 + 197e: f4 e0 ldi r31, 0x04 ; 4 + 1980: 80 81 ld r24, Z + 1982: 8f 7d andi r24, 0xDF ; 223 + 1984: 80 83 st Z, r24 + 1986: 80 81 ld r24, Z + 1988: 8f 7d andi r24, 0xDF ; 223 + 198a: 80 83 st Z, r24 + 198c: e8 e2 ldi r30, 0x28 ; 40 + 198e: f2 e2 ldi r31, 0x22 ; 34 + 1990: 02 e0 ldi r16, 0x02 ; 2 + 1992: 05 93 las Z, r16 + 1994: 10 92 2a 22 sts 0x222A, r1 + 1998: 10 92 2b 22 sts 0x222B, r1 + 199c: 00 e2 ldi r16, 0x20 ; 32 + 199e: 06 93 lac Z, r16 + 19a0: 00 e4 ldi r16, 0x40 ; 64 + 19a2: 06 93 lac Z, r16 + 19a4: e0 e2 ldi r30, 0x20 ; 32 + 19a6: f2 e2 ldi r31, 0x22 ; 34 + 19a8: 00 e2 ldi r16, 0x20 ; 32 + 19aa: 06 93 lac Z, r16 + 19ac: 00 e4 ldi r16, 0x40 ; 64 + 19ae: 06 93 lac Z, r16 + 19b0: 10 92 72 24 sts 0x2472, r1 + 19b4: 10 92 73 24 sts 0x2473, r1 + 19b8: 10 92 74 24 sts 0x2474, r1 + 19bc: 10 92 75 24 sts 0x2475, r1 + 19c0: 10 92 70 24 sts 0x2470, r1 + 19c4: 10 92 71 24 sts 0x2471, r1 + 19c8: 10 92 0d 22 sts 0x220D, r1 + 19cc: 0f 91 pop r16 + 19ce: 08 95 ret + +000019d0 : + 19d0: 0f 93 push r16 + 19d2: 85 e0 ldi r24, 0x05 ; 5 + 19d4: 80 93 0d 22 sts 0x220D, r24 + 19d8: e9 e2 ldi r30, 0x29 ; 41 + 19da: f2 e2 ldi r31, 0x22 ; 34 + 19dc: 04 e0 ldi r16, 0x04 ; 4 + 19de: 05 93 las Z, r16 + 19e0: e1 e2 ldi r30, 0x21 ; 33 + 19e2: f2 e2 ldi r31, 0x22 ; 34 + 19e4: 04 e0 ldi r16, 0x04 ; 4 + 19e6: 05 93 las Z, r16 + 19e8: 0f 91 pop r16 + 19ea: 08 95 ret + +000019ec : + 19ec: 0f 93 push r16 + 19ee: 83 e0 ldi r24, 0x03 ; 3 + 19f0: 80 93 0d 22 sts 0x220D, r24 + 19f4: 10 92 2a 22 sts 0x222A, r1 + 19f8: 10 92 2b 22 sts 0x222B, r1 + 19fc: e8 e2 ldi r30, 0x28 ; 40 + 19fe: f2 e2 ldi r31, 0x22 ; 34 + 1a00: 02 e0 ldi r16, 0x02 ; 2 + 1a02: 06 93 lac Z, r16 + 1a04: 0f 91 pop r16 + 1a06: 08 95 ret + +00001a08 : + 1a08: e0 91 72 24 lds r30, 0x2472 + 1a0c: f0 91 73 24 lds r31, 0x2473 + 1a10: 30 97 sbiw r30, 0x00 ; 0 + 1a12: 09 f0 breq .+2 ; 0x1a16 + 1a14: 09 94 ijmp + 1a16: 08 95 ret + +00001a18 : + 1a18: 98 2f mov r25, r24 + 1a1a: 9f 70 andi r25, 0x0F ; 15 + 1a1c: 28 2f mov r18, r24 + 1a1e: 33 27 eor r19, r19 + 1a20: 27 fd sbrc r18, 7 + 1a22: 30 95 com r19 + 1a24: 22 27 eor r18, r18 + 1a26: 33 0f add r19, r19 + 1a28: 22 1f adc r18, r18 + 1a2a: 33 27 eor r19, r19 + 1a2c: 29 0f add r18, r25 + 1a2e: 31 1d adc r19, r1 + 1a30: 29 0f add r18, r25 + 1a32: 31 1d adc r19, r1 + 1a34: 22 50 subi r18, 0x02 ; 2 + 1a36: 31 09 sbc r19, r1 + 1a38: 49 e0 ldi r20, 0x09 ; 9 + 1a3a: 42 9f mul r20, r18 + 1a3c: c0 01 movw r24, r0 + 1a3e: 43 9f mul r20, r19 + 1a40: 90 0d add r25, r0 + 1a42: 11 24 eor r1, r1 + 1a44: 8d 56 subi r24, 0x6D ; 109 + 1a46: 9e 4d sbci r25, 0xDE ; 222 + 1a48: 08 95 ret + +00001a4a : + 1a4a: 8f 92 push r8 + 1a4c: 9f 92 push r9 + 1a4e: bf 92 push r11 + 1a50: cf 92 push r12 + 1a52: df 92 push r13 + 1a54: ef 92 push r14 + 1a56: ff 92 push r15 + 1a58: 0f 93 push r16 + 1a5a: 1f 93 push r17 + 1a5c: cf 93 push r28 + 1a5e: df 93 push r29 + 1a60: b8 2e mov r11, r24 + 1a62: da df rcall .-76 ; 0x1a18 + 1a64: ec 01 movw r28, r24 + 1a66: 8b 2d mov r24, r11 + 1a68: 73 df rcall .-282 ; 0x1950 + 1a6a: 7c 01 movw r14, r24 + 1a6c: dc 01 movw r26, r24 + 1a6e: 11 96 adiw r26, 0x01 ; 1 + 1a70: ec 91 ld r30, X + 1a72: e7 70 andi r30, 0x07 ; 7 + 1a74: e1 50 subi r30, 0x01 ; 1 + 1a76: e7 30 cpi r30, 0x07 ; 7 + 1a78: 40 f4 brcc .+16 ; 0x1a8a + 1a7a: f0 e0 ldi r31, 0x00 ; 0 + 1a7c: ee 0f add r30, r30 + 1a7e: ff 1f adc r31, r31 + 1a80: ee 54 subi r30, 0x4E ; 78 + 1a82: ff 4d sbci r31, 0xDF ; 223 + 1a84: 00 81 ld r16, Z + 1a86: 11 81 ldd r17, Z+1 ; 0x01 + 1a88: 02 c0 rjmp .+4 ; 0x1a8e + 1a8a: 08 e0 ldi r16, 0x08 ; 8 + 1a8c: 10 e0 ldi r17, 0x00 ; 0 + 1a8e: ed 81 ldd r30, Y+5 ; 0x05 + 1a90: fe 81 ldd r31, Y+6 ; 0x06 + 1a92: 8b 81 ldd r24, Y+3 ; 0x03 + 1a94: 9c 81 ldd r25, Y+4 ; 0x04 + 1a96: 48 81 ld r20, Y + 1a98: d7 01 movw r26, r14 + 1a9a: b7 fe sbrs r11, 7 + 1a9c: 4f c0 rjmp .+158 ; 0x1b3c + 1a9e: 16 96 adiw r26, 0x06 ; 6 + 1aa0: 2d 91 ld r18, X+ + 1aa2: 3c 91 ld r19, X + 1aa4: 17 97 sbiw r26, 0x07 ; 7 + 1aa6: 2e 0f add r18, r30 + 1aa8: 3f 1f adc r19, r31 + 1aaa: 2d 83 std Y+5, r18 ; 0x05 + 1aac: 3e 83 std Y+6, r19 ; 0x06 + 1aae: 28 17 cp r18, r24 + 1ab0: 39 07 cpc r19, r25 + 1ab2: 99 f1 breq .+102 ; 0x1b1a + 1ab4: fc 01 movw r30, r24 + 1ab6: e2 1b sub r30, r18 + 1ab8: f3 0b sbc r31, r19 + 1aba: 9f 01 movw r18, r30 + 1abc: 21 15 cp r18, r1 + 1abe: f4 e0 ldi r31, 0x04 ; 4 + 1ac0: 3f 07 cpc r19, r31 + 1ac2: 38 f0 brcs .+14 ; 0x1ad2 + 1ac4: 2f ef ldi r18, 0xFF ; 255 + 1ac6: 33 e0 ldi r19, 0x03 ; 3 + 1ac8: c9 01 movw r24, r18 + 1aca: b8 01 movw r22, r16 + 1acc: 0b d5 rcall .+2582 ; 0x24e4 <__udivmodhi4> + 1ace: 28 1b sub r18, r24 + 1ad0: 39 0b sbc r19, r25 + 1ad2: 41 ff sbrs r20, 1 + 1ad4: 09 c0 rjmp .+18 ; 0x1ae8 + 1ad6: c9 01 movw r24, r18 + 1ad8: b8 01 movw r22, r16 + 1ada: 04 d5 rcall .+2568 ; 0x24e4 <__udivmodhi4> + 1adc: 41 e0 ldi r20, 0x01 ; 1 + 1ade: 89 2b or r24, r25 + 1ae0: 09 f0 breq .+2 ; 0x1ae4 + 1ae2: 40 e0 ldi r20, 0x00 ; 0 + 1ae4: 94 2f mov r25, r20 + 1ae6: 01 c0 rjmp .+2 ; 0x1aea + 1ae8: 90 e0 ldi r25, 0x00 ; 0 + 1aea: 88 81 ld r24, Y + 1aec: 90 fb bst r25, 0 + 1aee: 81 f9 bld r24, 1 + 1af0: 88 83 st Y, r24 + 1af2: d7 01 movw r26, r14 + 1af4: 16 96 adiw r26, 0x06 ; 6 + 1af6: 1d 92 st X+, r1 + 1af8: 1c 92 st X, r1 + 1afa: 17 97 sbiw r26, 0x07 ; 7 + 1afc: 12 96 adiw r26, 0x02 ; 2 + 1afe: 2d 93 st X+, r18 + 1b00: 3c 93 st X, r19 + 1b02: 13 97 sbiw r26, 0x03 ; 3 + 1b04: 89 81 ldd r24, Y+1 ; 0x01 + 1b06: 9a 81 ldd r25, Y+2 ; 0x02 + 1b08: 2d 81 ldd r18, Y+5 ; 0x05 + 1b0a: 3e 81 ldd r19, Y+6 ; 0x06 + 1b0c: 82 0f add r24, r18 + 1b0e: 93 1f adc r25, r19 + 1b10: 14 96 adiw r26, 0x04 ; 4 + 1b12: 8d 93 st X+, r24 + 1b14: 9c 93 st X, r25 + 1b16: 15 97 sbiw r26, 0x05 ; 5 + 1b18: 0d c0 rjmp .+26 ; 0x1b34 + 1b1a: 41 ff sbrs r20, 1 + 1b1c: 70 c0 rjmp .+224 ; 0x1bfe + 1b1e: 4d 7f andi r20, 0xFD ; 253 + 1b20: 48 83 st Y, r20 + 1b22: d7 01 movw r26, r14 + 1b24: 16 96 adiw r26, 0x06 ; 6 + 1b26: 1d 92 st X+, r1 + 1b28: 1c 92 st X, r1 + 1b2a: 17 97 sbiw r26, 0x07 ; 7 + 1b2c: 12 96 adiw r26, 0x02 ; 2 + 1b2e: 1d 92 st X+, r1 + 1b30: 1c 92 st X, r1 + 1b32: 13 97 sbiw r26, 0x03 ; 3 + 1b34: f7 01 movw r30, r14 + 1b36: 02 e0 ldi r16, 0x02 ; 2 + 1b38: 06 93 lac Z, r16 + 1b3a: 7a c0 rjmp .+244 ; 0x1c30 + 1b3c: 12 96 adiw r26, 0x02 ; 2 + 1b3e: cd 90 ld r12, X+ + 1b40: dc 90 ld r13, X + 1b42: 13 97 sbiw r26, 0x03 ; 3 + 1b44: 42 ff sbrs r20, 2 + 1b46: 0f c0 rjmp .+30 ; 0x1b66 + 1b48: 89 80 ldd r8, Y+1 ; 0x01 + 1b4a: 9a 80 ldd r9, Y+2 ; 0x02 + 1b4c: b8 01 movw r22, r16 + 1b4e: ca d4 rcall .+2452 ; 0x24e4 <__udivmodhi4> + 1b50: b0 e4 ldi r27, 0x40 ; 64 + 1b52: bb 9e mul r11, r27 + 1b54: b0 01 movw r22, r0 + 1b56: 11 24 eor r1, r1 + 1b58: 6d 56 subi r22, 0x6D ; 109 + 1b5a: 7f 4d sbci r23, 0xDF ; 223 + 1b5c: ac 01 movw r20, r24 + 1b5e: c4 01 movw r24, r8 + 1b60: 8e 0f add r24, r30 + 1b62: 9f 1f adc r25, r31 + 1b64: d9 d4 rcall .+2482 ; 0x2518 + 1b66: 6d 81 ldd r22, Y+5 ; 0x05 + 1b68: 7e 81 ldd r23, Y+6 ; 0x06 + 1b6a: 6c 0d add r22, r12 + 1b6c: 7d 1d adc r23, r13 + 1b6e: 6d 83 std Y+5, r22 ; 0x05 + 1b70: 7e 83 std Y+6, r23 ; 0x06 + 1b72: 2b 81 ldd r18, Y+3 ; 0x03 + 1b74: 3c 81 ldd r19, Y+4 ; 0x04 + 1b76: 26 17 cp r18, r22 + 1b78: 37 07 cpc r19, r23 + 1b7a: 10 f4 brcc .+4 ; 0x1b80 + 1b7c: 2d 83 std Y+5, r18 ; 0x05 + 1b7e: 3e 83 std Y+6, r19 ; 0x06 + 1b80: f7 01 movw r30, r14 + 1b82: 86 81 ldd r24, Z+6 ; 0x06 + 1b84: 97 81 ldd r25, Z+7 ; 0x07 + 1b86: c8 16 cp r12, r24 + 1b88: d9 06 cpc r13, r25 + 1b8a: c9 f5 brne .+114 ; 0x1bfe + 1b8c: 8d 81 ldd r24, Y+5 ; 0x05 + 1b8e: 9e 81 ldd r25, Y+6 ; 0x06 + 1b90: 82 17 cp r24, r18 + 1b92: 93 07 cpc r25, r19 + 1b94: a1 f1 breq .+104 ; 0x1bfe + 1b96: 28 1b sub r18, r24 + 1b98: 39 0b sbc r19, r25 + 1b9a: 21 15 cp r18, r1 + 1b9c: f4 e0 ldi r31, 0x04 ; 4 + 1b9e: 3f 07 cpc r19, r31 + 1ba0: 10 f0 brcs .+4 ; 0x1ba6 + 1ba2: 2f ef ldi r18, 0xFF ; 255 + 1ba4: 33 e0 ldi r19, 0x03 ; 3 + 1ba6: c9 01 movw r24, r18 + 1ba8: b8 01 movw r22, r16 + 1baa: 9c d4 rcall .+2360 ; 0x24e4 <__udivmodhi4> + 1bac: 28 1b sub r18, r24 + 1bae: 39 0b sbc r19, r25 + 1bb0: d7 01 movw r26, r14 + 1bb2: 12 96 adiw r26, 0x02 ; 2 + 1bb4: 1d 92 st X+, r1 + 1bb6: 1c 92 st X, r1 + 1bb8: 13 97 sbiw r26, 0x03 ; 3 + 1bba: 20 17 cp r18, r16 + 1bbc: 31 07 cpc r19, r17 + 1bbe: 78 f4 brcc .+30 ; 0x1bde + 1bc0: 88 81 ld r24, Y + 1bc2: 84 60 ori r24, 0x04 ; 4 + 1bc4: 88 83 st Y, r24 + 1bc6: b0 e4 ldi r27, 0x40 ; 64 + 1bc8: bb 9e mul r11, r27 + 1bca: c0 01 movw r24, r0 + 1bcc: 11 24 eor r1, r1 + 1bce: 8d 56 subi r24, 0x6D ; 109 + 1bd0: 9f 4d sbci r25, 0xDF ; 223 + 1bd2: f7 01 movw r30, r14 + 1bd4: 84 83 std Z+4, r24 ; 0x04 + 1bd6: 95 83 std Z+5, r25 ; 0x05 + 1bd8: 06 83 std Z+6, r16 ; 0x06 + 1bda: 17 83 std Z+7, r17 ; 0x07 + 1bdc: ab cf rjmp .-170 ; 0x1b34 + 1bde: 89 81 ldd r24, Y+1 ; 0x01 + 1be0: 9a 81 ldd r25, Y+2 ; 0x02 + 1be2: 4d 81 ldd r20, Y+5 ; 0x05 + 1be4: 5e 81 ldd r21, Y+6 ; 0x06 + 1be6: 84 0f add r24, r20 + 1be8: 95 1f adc r25, r21 + 1bea: d7 01 movw r26, r14 + 1bec: 14 96 adiw r26, 0x04 ; 4 + 1bee: 8d 93 st X+, r24 + 1bf0: 9c 93 st X, r25 + 1bf2: 15 97 sbiw r26, 0x05 ; 5 + 1bf4: 16 96 adiw r26, 0x06 ; 6 + 1bf6: 2d 93 st X+, r18 + 1bf8: 3c 93 st X, r19 + 1bfa: 17 97 sbiw r26, 0x07 ; 7 + 1bfc: 9b cf rjmp .-202 ; 0x1b34 + 1bfe: 88 81 ld r24, Y + 1c00: 80 ff sbrs r24, 0 + 1c02: 16 c0 rjmp .+44 ; 0x1c30 + 1c04: 8e 7f andi r24, 0xFE ; 254 + 1c06: 88 83 st Y, r24 + 1c08: ef 81 ldd r30, Y+7 ; 0x07 + 1c0a: f8 85 ldd r31, Y+8 ; 0x08 + 1c0c: 30 97 sbiw r30, 0x00 ; 0 + 1c0e: 81 f0 breq .+32 ; 0x1c30 + 1c10: 6d 81 ldd r22, Y+5 ; 0x05 + 1c12: 7e 81 ldd r23, Y+6 ; 0x06 + 1c14: 4b 2d mov r20, r11 + 1c16: 80 e0 ldi r24, 0x00 ; 0 + 1c18: df 91 pop r29 + 1c1a: cf 91 pop r28 + 1c1c: 1f 91 pop r17 + 1c1e: 0f 91 pop r16 + 1c20: ff 90 pop r15 + 1c22: ef 90 pop r14 + 1c24: df 90 pop r13 + 1c26: cf 90 pop r12 + 1c28: bf 90 pop r11 + 1c2a: 9f 90 pop r9 + 1c2c: 8f 90 pop r8 + 1c2e: 09 94 ijmp + 1c30: df 91 pop r29 + 1c32: cf 91 pop r28 + 1c34: 1f 91 pop r17 + 1c36: 0f 91 pop r16 + 1c38: ff 90 pop r15 + 1c3a: ef 90 pop r14 + 1c3c: df 90 pop r13 + 1c3e: cf 90 pop r12 + 1c40: bf 90 pop r11 + 1c42: 9f 90 pop r9 + 1c44: 8f 90 pop r8 + 1c46: 08 95 ret + +00001c48 : + 1c48: 0f 93 push r16 + 1c4a: cf 93 push r28 + 1c4c: df 93 push r29 + 1c4e: 80 91 0d 22 lds r24, 0x220D + 1c52: 83 30 cpi r24, 0x03 ; 3 + 1c54: 29 f4 brne .+10 ; 0x1c60 + 1c56: d8 de rcall .-592 ; 0x1a08 + 1c58: df 91 pop r29 + 1c5a: cf 91 pop r28 + 1c5c: 0f 91 pop r16 + 1c5e: 8d ce rjmp .-742 ; 0x197a + 1c60: 20 91 09 22 lds r18, 0x2209 + 1c64: 30 91 0a 22 lds r19, 0x220A + 1c68: c0 91 70 24 lds r28, 0x2470 + 1c6c: d0 91 71 24 lds r29, 0x2471 + 1c70: c2 1b sub r28, r18 + 1c72: d3 0b sbc r29, r19 + 1c74: 61 f5 brne .+88 ; 0x1cce + 1c76: 80 91 0b 22 lds r24, 0x220B + 1c7a: 90 91 0c 22 lds r25, 0x220C + 1c7e: 82 0f add r24, r18 + 1c80: 93 1f adc r25, r19 + 1c82: 80 93 0b 22 sts 0x220B, r24 + 1c86: 90 93 0c 22 sts 0x220C, r25 + 1c8a: 20 91 6c 24 lds r18, 0x246C + 1c8e: 30 91 6d 24 lds r19, 0x246D + 1c92: 28 17 cp r18, r24 + 1c94: 39 07 cpc r19, r25 + 1c96: 21 f0 breq .+8 ; 0x1ca0 + 1c98: 80 91 d2 20 lds r24, 0x20D2 + 1c9c: 88 23 and r24, r24 + 1c9e: 31 f0 breq .+12 ; 0x1cac + 1ca0: 84 e0 ldi r24, 0x04 ; 4 + 1ca2: 80 93 0d 22 sts 0x220D, r24 + 1ca6: e0 e2 ldi r30, 0x20 ; 32 + 1ca8: f2 e2 ldi r31, 0x22 ; 34 + 1caa: 36 c0 rjmp .+108 ; 0x1d18 + 1cac: e0 91 74 24 lds r30, 0x2474 + 1cb0: f0 91 75 24 lds r31, 0x2475 + 1cb4: 30 97 sbiw r30, 0x00 ; 0 + 1cb6: 99 f0 breq .+38 ; 0x1cde + 1cb8: 09 95 icall + 1cba: 88 23 and r24, r24 + 1cbc: 81 f0 breq .+32 ; 0x1cde + 1cbe: 10 92 09 22 sts 0x2209, r1 + 1cc2: 10 92 0a 22 sts 0x220A, r1 + 1cc6: c0 91 70 24 lds r28, 0x2470 + 1cca: d0 91 71 24 lds r29, 0x2471 + 1cce: c0 34 cpi r28, 0x40 ; 64 + 1cd0: d1 05 cpc r29, r1 + 1cd2: 28 f0 brcs .+10 ; 0x1cde + 1cd4: 10 92 d2 20 sts 0x20D2, r1 + 1cd8: c0 e4 ldi r28, 0x40 ; 64 + 1cda: d0 e0 ldi r29, 0x00 ; 0 + 1cdc: 03 c0 rjmp .+6 ; 0x1ce4 + 1cde: 81 e0 ldi r24, 0x01 ; 1 + 1ce0: 80 93 d2 20 sts 0x20D2, r24 + 1ce4: c0 93 2a 22 sts 0x222A, r28 + 1ce8: d0 93 2b 22 sts 0x222B, r29 + 1cec: 20 91 09 22 lds r18, 0x2209 + 1cf0: 30 91 0a 22 lds r19, 0x220A + 1cf4: 80 91 6e 24 lds r24, 0x246E + 1cf8: 90 91 6f 24 lds r25, 0x246F + 1cfc: 82 0f add r24, r18 + 1cfe: 93 1f adc r25, r19 + 1d00: 80 93 2c 22 sts 0x222C, r24 + 1d04: 90 93 2d 22 sts 0x222D, r25 + 1d08: c2 0f add r28, r18 + 1d0a: d3 1f adc r29, r19 + 1d0c: c0 93 09 22 sts 0x2209, r28 + 1d10: d0 93 0a 22 sts 0x220A, r29 + 1d14: e8 e2 ldi r30, 0x28 ; 40 + 1d16: f2 e2 ldi r31, 0x22 ; 34 + 1d18: 02 e0 ldi r16, 0x02 ; 2 + 1d1a: 06 93 lac Z, r16 + 1d1c: df 91 pop r29 + 1d1e: cf 91 pop r28 + 1d20: 0f 91 pop r16 + 1d22: 08 95 ret + +00001d24 : + 1d24: 0f 93 push r16 + 1d26: cf 93 push r28 + 1d28: df 93 push r29 + 1d2a: 1f 92 push r1 + 1d2c: cd b7 in r28, 0x3d ; 61 + 1d2e: de b7 in r29, 0x3e ; 62 + 1d30: 80 91 cc 04 lds r24, 0x04CC + 1d34: 80 ff sbrs r24, 0 + 1d36: 65 c0 rjmp .+202 ; 0x1e02 + 1d38: 81 e0 ldi r24, 0x01 ; 1 + 1d3a: 80 93 cc 04 sts 0x04CC, r24 + 1d3e: e0 e2 ldi r30, 0x20 ; 32 + 1d40: f2 e2 ldi r31, 0x22 ; 34 + 1d42: 00 e8 ldi r16, 0x80 ; 128 + 1d44: 06 93 lac Z, r16 + 1d46: e8 e2 ldi r30, 0x28 ; 40 + 1d48: f2 e2 ldi r31, 0x22 ; 34 + 1d4a: 00 e8 ldi r16, 0x80 ; 128 + 1d4c: 06 93 lac Z, r16 + 1d4e: 80 93 ca 04 sts 0x04CA, r24 + 1d52: e0 e2 ldi r30, 0x20 ; 32 + 1d54: f2 e2 ldi r31, 0x22 ; 34 + 1d56: 00 e1 ldi r16, 0x10 ; 16 + 1d58: 06 93 lac Z, r16 + 1d5a: 80 91 0d 22 lds r24, 0x220D + 1d5e: 88 23 and r24, r24 + 1d60: 29 f0 breq .+10 ; 0x1d6c + 1d62: 83 50 subi r24, 0x03 ; 3 + 1d64: 82 30 cpi r24, 0x02 ; 2 + 1d66: 08 f4 brcc .+2 ; 0x1d6a + 1d68: 4f de rcall .-866 ; 0x1a08 + 1d6a: 07 de rcall .-1010 ; 0x197a + 1d6c: 80 91 22 22 lds r24, 0x2222 + 1d70: 90 91 23 22 lds r25, 0x2223 + 1d74: 08 97 sbiw r24, 0x08 ; 8 + 1d76: 09 f0 breq .+2 ; 0x1d7a + 1d78: 46 c0 rjmp .+140 ; 0x1e06 + 1d7a: 88 e0 ldi r24, 0x08 ; 8 + 1d7c: e9 ec ldi r30, 0xC9 ; 201 + 1d7e: f1 e2 ldi r31, 0x21 ; 33 + 1d80: a6 e6 ldi r26, 0x66 ; 102 + 1d82: b4 e2 ldi r27, 0x24 ; 36 + 1d84: 01 90 ld r0, Z+ + 1d86: 0d 92 st X+, r0 + 1d88: 8a 95 dec r24 + 1d8a: e1 f7 brne .-8 ; 0x1d84 + 1d8c: 80 91 c8 04 lds r24, 0x04C8 + 1d90: 80 62 ori r24, 0x20 ; 32 + 1d92: 80 93 c8 04 sts 0x04C8, r24 + 1d96: 80 91 c8 04 lds r24, 0x04C8 + 1d9a: 80 62 ori r24, 0x20 ; 32 + 1d9c: 80 93 c8 04 sts 0x04C8, r24 + 1da0: 63 da rcall .-2874 ; 0x1268 + 1da2: 81 11 cpse r24, r1 + 1da4: 02 c0 rjmp .+4 ; 0x1daa + 1da6: 14 de rcall .-984 ; 0x19d0 + 1da8: 2e c0 rjmp .+92 ; 0x1e06 + 1daa: 90 91 66 24 lds r25, 0x2466 + 1dae: 97 ff sbrs r25, 7 + 1db0: 0e c0 rjmp .+28 ; 0x1dce + 1db2: 10 92 0b 22 sts 0x220B, r1 + 1db6: 10 92 0c 22 sts 0x220C, r1 + 1dba: 10 92 09 22 sts 0x2209, r1 + 1dbe: 10 92 0a 22 sts 0x220A, r1 + 1dc2: 92 e0 ldi r25, 0x02 ; 2 + 1dc4: 90 93 0d 22 sts 0x220D, r25 + 1dc8: 89 83 std Y+1, r24 ; 0x01 + 1dca: 3e df rcall .-388 ; 0x1c48 + 1dcc: 08 c0 rjmp .+16 ; 0x1dde + 1dce: 20 91 6c 24 lds r18, 0x246C + 1dd2: 30 91 6d 24 lds r19, 0x246D + 1dd6: 23 2b or r18, r19 + 1dd8: 21 f4 brne .+8 ; 0x1de2 + 1dda: 89 83 std Y+1, r24 ; 0x01 + 1ddc: 07 de rcall .-1010 ; 0x19ec + 1dde: 89 81 ldd r24, Y+1 ; 0x01 + 1de0: 13 c0 rjmp .+38 ; 0x1e08 + 1de2: 10 92 0b 22 sts 0x220B, r1 + 1de6: 10 92 0c 22 sts 0x220C, r1 + 1dea: 10 92 09 22 sts 0x2209, r1 + 1dee: 10 92 0a 22 sts 0x220A, r1 + 1df2: 91 e0 ldi r25, 0x01 ; 1 + 1df4: 90 93 0d 22 sts 0x220D, r25 + 1df8: e0 e2 ldi r30, 0x20 ; 32 + 1dfa: f2 e2 ldi r31, 0x22 ; 34 + 1dfc: 02 e0 ldi r16, 0x02 ; 2 + 1dfe: 06 93 lac Z, r16 + 1e00: 03 c0 rjmp .+6 ; 0x1e08 + 1e02: 80 e0 ldi r24, 0x00 ; 0 + 1e04: 01 c0 rjmp .+2 ; 0x1e08 + 1e06: 81 e0 ldi r24, 0x01 ; 1 + 1e08: 0f 90 pop r0 + 1e0a: df 91 pop r29 + 1e0c: cf 91 pop r28 + 1e0e: 0f 91 pop r16 + 1e10: 08 95 ret + +00001e12 : + 1e12: cf 93 push r28 + 1e14: cf b7 in r28, 0x3f ; 63 + 1e16: f8 94 cli + 1e18: 81 e0 ldi r24, 0x01 ; 1 + 1e1a: 87 dd rcall .-1266 ; 0x192a + 1e1c: ea ec ldi r30, 0xCA ; 202 + 1e1e: f4 e0 ldi r31, 0x04 ; 4 + 1e20: 80 e4 ldi r24, 0x40 ; 64 + 1e22: 80 83 st Z, r24 + 1e24: 80 e2 ldi r24, 0x20 ; 32 + 1e26: 80 83 st Z, r24 + 1e28: e1 ec ldi r30, 0xC1 ; 193 + 1e2a: f4 e0 ldi r31, 0x04 ; 4 + 1e2c: 80 81 ld r24, Z + 1e2e: 81 60 ori r24, 0x01 ; 1 + 1e30: 80 83 st Z, r24 + 1e32: a9 ec ldi r26, 0xC9 ; 201 + 1e34: b4 e0 ldi r27, 0x04 ; 4 + 1e36: 8c 91 ld r24, X + 1e38: 82 60 ori r24, 0x02 ; 2 + 1e3a: 8c 93 st X, r24 + 1e3c: e8 ec ldi r30, 0xC8 ; 200 + 1e3e: f4 e0 ldi r31, 0x04 ; 4 + 1e40: 80 81 ld r24, Z + 1e42: 80 64 ori r24, 0x40 ; 64 + 1e44: 80 83 st Z, r24 + 1e46: 8c 91 ld r24, X + 1e48: 81 60 ori r24, 0x01 ; 1 + 1e4a: 8c 93 st X, r24 + 1e4c: 80 81 ld r24, Z + 1e4e: 80 68 ori r24, 0x80 ; 128 + 1e50: 80 83 st Z, r24 + 1e52: cf bf out 0x3f, r28 ; 63 + 1e54: cf 91 pop r28 + 1e56: 08 95 ret + +00001e58 : + 1e58: cf 93 push r28 + 1e5a: 10 92 60 00 sts 0x0060, r1 + 1e5e: 80 e3 ldi r24, 0x30 ; 48 + 1e60: a0 d8 rcall .-3776 ; 0xfa2 + 1e62: 80 91 c0 04 lds r24, 0x04C0 + 1e66: 80 64 ori r24, 0x40 ; 64 + 1e68: 80 93 c0 04 sts 0x04C0, r24 + 1e6c: 81 e0 ldi r24, 0x01 ; 1 + 1e6e: 80 93 60 00 sts 0x0060, r24 + 1e72: cf b7 in r28, 0x3f ; 63 + 1e74: f8 94 cli + 1e76: 80 e0 ldi r24, 0x00 ; 0 + 1e78: 90 e0 ldi r25, 0x00 ; 0 + 1e7a: fc 01 movw r30, r24 + 1e7c: 73 e0 ldi r23, 0x03 ; 3 + 1e7e: ee 0f add r30, r30 + 1e80: ff 1f adc r31, r31 + 1e82: 7a 95 dec r23 + 1e84: e1 f7 brne .-8 ; 0x1e7e + 1e86: ef 5d subi r30, 0xDF ; 223 + 1e88: fd 4d sbci r31, 0xDD ; 221 + 1e8a: 10 82 st Z, r1 + 1e8c: 01 96 adiw r24, 0x01 ; 1 + 1e8e: 88 30 cpi r24, 0x08 ; 8 + 1e90: 91 05 cpc r25, r1 + 1e92: 99 f7 brne .-26 ; 0x1e7a + 1e94: 80 91 93 21 lds r24, 0x2193 + 1e98: 8e 7f andi r24, 0xFE ; 254 + 1e9a: 80 93 93 21 sts 0x2193, r24 + 1e9e: 80 91 9c 21 lds r24, 0x219C + 1ea2: 8e 7f andi r24, 0xFE ; 254 + 1ea4: 80 93 9c 21 sts 0x219C, r24 + 1ea8: 80 91 a5 21 lds r24, 0x21A5 + 1eac: 8e 7f andi r24, 0xFE ; 254 + 1eae: 80 93 a5 21 sts 0x21A5, r24 + 1eb2: 80 91 ae 21 lds r24, 0x21AE + 1eb6: 8e 7f andi r24, 0xFE ; 254 + 1eb8: 80 93 ae 21 sts 0x21AE, r24 + 1ebc: 80 91 b7 21 lds r24, 0x21B7 + 1ec0: 8e 7f andi r24, 0xFE ; 254 + 1ec2: 80 93 b7 21 sts 0x21B7, r24 + 1ec6: 80 91 c0 21 lds r24, 0x21C0 + 1eca: 8e 7f andi r24, 0xFE ; 254 + 1ecc: 80 93 c0 21 sts 0x21C0, r24 + 1ed0: 6a e1 ldi r22, 0x1A ; 26 + 1ed2: 70 e0 ldi r23, 0x00 ; 0 + 1ed4: 82 e0 ldi r24, 0x02 ; 2 + 1ed6: 01 dd rcall .-1534 ; 0x18da + 1ed8: 8f 3f cpi r24, 0xFF ; 255 + 1eda: 09 f4 brne .+2 ; 0x1ede + 1edc: 8f e1 ldi r24, 0x1F ; 31 + 1ede: 80 93 fa 04 sts 0x04FA, r24 + 1ee2: 6b e1 ldi r22, 0x1B ; 27 + 1ee4: 70 e0 ldi r23, 0x00 ; 0 + 1ee6: 82 e0 ldi r24, 0x02 ; 2 + 1ee8: f8 dc rcall .-1552 ; 0x18da + 1eea: 8f 3f cpi r24, 0xFF ; 255 + 1eec: 09 f4 brne .+2 ; 0x1ef0 + 1eee: 8f e1 ldi r24, 0x1F ; 31 + 1ef0: 80 93 fb 04 sts 0x04FB, r24 + 1ef4: 80 91 c0 04 lds r24, 0x04C0 + 1ef8: 83 60 ori r24, 0x03 ; 3 + 1efa: 80 93 c0 04 sts 0x04C0, r24 + 1efe: 80 91 c0 04 lds r24, 0x04C0 + 1f02: 80 68 ori r24, 0x80 ; 128 + 1f04: 80 93 c0 04 sts 0x04C0, r24 + 1f08: 80 91 c0 04 lds r24, 0x04C0 + 1f0c: 80 61 ori r24, 0x10 ; 16 + 1f0e: 80 93 c0 04 sts 0x04C0, r24 + 1f12: 80 e2 ldi r24, 0x20 ; 32 + 1f14: 92 e2 ldi r25, 0x22 ; 34 + 1f16: 80 93 c6 04 sts 0x04C6, r24 + 1f1a: 90 93 c7 04 sts 0x04C7, r25 + 1f1e: 80 91 c0 04 lds r24, 0x04C0 + 1f22: 80 62 ori r24, 0x20 ; 32 + 1f24: 80 93 c0 04 sts 0x04C0, r24 + 1f28: 8f ef ldi r24, 0xFF ; 255 + 1f2a: 80 93 c5 04 sts 0x04C5, r24 + 1f2e: 80 91 c8 04 lds r24, 0x04C8 + 1f32: 82 60 ori r24, 0x02 ; 2 + 1f34: 80 93 c8 04 sts 0x04C8, r24 + 1f38: 10 92 64 22 sts 0x2264, r1 + 1f3c: 85 e0 ldi r24, 0x05 ; 5 + 1f3e: d7 dc rcall .-1618 ; 0x18ee + 1f40: 68 df rcall .-304 ; 0x1e12 + 1f42: cf bf out 0x3f, r28 ; 63 + 1f44: cf 91 pop r28 + 1f46: 08 95 ret + +00001f48 : + 1f48: 80 93 c3 04 sts 0x04C3, r24 + 1f4c: 08 95 ret + +00001f4e : + 1f4e: 80 91 c3 04 lds r24, 0x04C3 + 1f52: 08 95 ret + +00001f54 : + 1f54: 80 93 6e 24 sts 0x246E, r24 + 1f58: 90 93 6f 24 sts 0x246F, r25 + 1f5c: 60 93 70 24 sts 0x2470, r22 + 1f60: 70 93 71 24 sts 0x2471, r23 + 1f64: 08 95 ret + +00001f66 : + 1f66: 0f 93 push r16 + 1f68: 1f 93 push r17 + 1f6a: cf 93 push r28 + 1f6c: df 93 push r29 + 1f6e: 1f 92 push r1 + 1f70: cd b7 in r28, 0x3d ; 61 + 1f72: de b7 in r29, 0x3e ; 62 + 1f74: 8a 01 movw r16, r20 + 1f76: 69 83 std Y+1, r22 ; 0x01 + 1f78: eb dc rcall .-1578 ; 0x1950 + 1f7a: fc 01 movw r30, r24 + 1f7c: 81 81 ldd r24, Z+1 ; 0x01 + 1f7e: 80 7c andi r24, 0xC0 ; 192 + 1f80: 69 81 ldd r22, Y+1 ; 0x01 + 1f82: 81 11 cpse r24, r1 + 1f84: 3b c0 rjmp .+118 ; 0x1ffc + 1f86: 63 70 andi r22, 0x03 ; 3 + 1f88: 61 30 cpi r22, 0x01 ; 1 + 1f8a: 29 f0 breq .+10 ; 0x1f96 + 1f8c: 10 f4 brcc .+4 ; 0x1f92 + 1f8e: 90 e4 ldi r25, 0x40 ; 64 + 1f90: 03 c0 rjmp .+6 ; 0x1f98 + 1f92: 90 e8 ldi r25, 0x80 ; 128 + 1f94: 01 c0 rjmp .+2 ; 0x1f98 + 1f96: 90 ec ldi r25, 0xC0 ; 192 + 1f98: 00 38 cpi r16, 0x80 ; 128 + 1f9a: 11 05 cpc r17, r1 + 1f9c: e1 f0 breq .+56 ; 0x1fd6 + 1f9e: 50 f4 brcc .+20 ; 0x1fb4 + 1fa0: 00 32 cpi r16, 0x20 ; 32 + 1fa2: 11 05 cpc r17, r1 + 1fa4: a1 f0 breq .+40 ; 0x1fce + 1fa6: 00 34 cpi r16, 0x40 ; 64 + 1fa8: 11 05 cpc r17, r1 + 1faa: 99 f0 breq .+38 ; 0x1fd2 + 1fac: 00 31 cpi r16, 0x10 ; 16 + 1fae: 11 05 cpc r17, r1 + 1fb0: 61 f4 brne .+24 ; 0x1fca + 1fb2: 19 c0 rjmp .+50 ; 0x1fe6 + 1fb4: 01 15 cp r16, r1 + 1fb6: 82 e0 ldi r24, 0x02 ; 2 + 1fb8: 18 07 cpc r17, r24 + 1fba: 89 f0 breq .+34 ; 0x1fde + 1fbc: 0f 3f cpi r16, 0xFF ; 255 + 1fbe: a3 e0 ldi r26, 0x03 ; 3 + 1fc0: 1a 07 cpc r17, r26 + 1fc2: 79 f0 breq .+30 ; 0x1fe2 + 1fc4: 01 15 cp r16, r1 + 1fc6: 11 40 sbci r17, 0x01 ; 1 + 1fc8: 41 f0 breq .+16 ; 0x1fda + 1fca: 80 e0 ldi r24, 0x00 ; 0 + 1fcc: 0d c0 rjmp .+26 ; 0x1fe8 + 1fce: 82 e0 ldi r24, 0x02 ; 2 + 1fd0: 0b c0 rjmp .+22 ; 0x1fe8 + 1fd2: 83 e0 ldi r24, 0x03 ; 3 + 1fd4: 09 c0 rjmp .+18 ; 0x1fe8 + 1fd6: 84 e0 ldi r24, 0x04 ; 4 + 1fd8: 07 c0 rjmp .+14 ; 0x1fe8 + 1fda: 85 e0 ldi r24, 0x05 ; 5 + 1fdc: 05 c0 rjmp .+10 ; 0x1fe8 + 1fde: 86 e0 ldi r24, 0x06 ; 6 + 1fe0: 03 c0 rjmp .+6 ; 0x1fe8 + 1fe2: 87 e0 ldi r24, 0x07 ; 7 + 1fe4: 01 c0 rjmp .+2 ; 0x1fe8 + 1fe6: 81 e0 ldi r24, 0x01 ; 1 + 1fe8: 11 82 std Z+1, r1 ; 0x01 + 1fea: 26 e0 ldi r18, 0x06 ; 6 + 1fec: 20 83 st Z, r18 + 1fee: 89 2b or r24, r25 + 1ff0: 81 83 std Z+1, r24 ; 0x01 + 1ff2: 81 81 ldd r24, Z+1 ; 0x01 + 1ff4: 80 62 ori r24, 0x20 ; 32 + 1ff6: 81 83 std Z+1, r24 ; 0x01 + 1ff8: 81 e0 ldi r24, 0x01 ; 1 + 1ffa: 01 c0 rjmp .+2 ; 0x1ffe + 1ffc: 80 e0 ldi r24, 0x00 ; 0 + 1ffe: 0f 90 pop r0 + 2000: df 91 pop r29 + 2002: cf 91 pop r28 + 2004: 1f 91 pop r17 + 2006: 0f 91 pop r16 + 2008: 08 95 ret + +0000200a : + 200a: a2 dc rcall .-1724 ; 0x1950 + 200c: fc 01 movw r30, r24 + 200e: 81 81 ldd r24, Z+1 ; 0x01 + 2010: 82 fb bst r24, 2 + 2012: 88 27 eor r24, r24 + 2014: 80 f9 bld r24, 0 + 2016: 08 95 ret + +00002018 : + 2018: cf 93 push r28 + 201a: c8 2f mov r28, r24 + 201c: 99 dc rcall .-1742 ; 0x1950 + 201e: fc 01 movw r30, r24 + 2020: 81 81 ldd r24, Z+1 ; 0x01 + 2022: 82 ff sbrs r24, 2 + 2024: 0f c0 rjmp .+30 ; 0x2044 + 2026: 91 81 ldd r25, Z+1 ; 0x01 + 2028: 9b 7f andi r25, 0xFB ; 251 + 202a: 91 83 std Z+1, r25 ; 0x01 + 202c: 8c 2f mov r24, r28 + 202e: f4 dc rcall .-1560 ; 0x1a18 + 2030: fc 01 movw r30, r24 + 2032: 80 81 ld r24, Z + 2034: 80 ff sbrs r24, 0 + 2036: 06 c0 rjmp .+12 ; 0x2044 + 2038: 8e 7f andi r24, 0xFE ; 254 + 203a: 80 83 st Z, r24 + 203c: 07 80 ldd r0, Z+7 ; 0x07 + 203e: f0 85 ldd r31, Z+8 ; 0x08 + 2040: e0 2d mov r30, r0 + 2042: 09 95 icall + 2044: 81 e0 ldi r24, 0x01 ; 1 + 2046: cf 91 pop r28 + 2048: 08 95 ret + +0000204a : + 204a: 8f 92 push r8 + 204c: 9f 92 push r9 + 204e: bf 92 push r11 + 2050: cf 92 push r12 + 2052: df 92 push r13 + 2054: ef 92 push r14 + 2056: ff 92 push r15 + 2058: 0f 93 push r16 + 205a: 1f 93 push r17 + 205c: cf 93 push r28 + 205e: df 93 push r29 + 2060: 1f 92 push r1 + 2062: cd b7 in r28, 0x3d ; 61 + 2064: de b7 in r29, 0x3e ; 62 + 2066: b8 2e mov r11, r24 + 2068: 6a 01 movw r12, r20 + 206a: 79 01 movw r14, r18 + 206c: 69 83 std Y+1, r22 ; 0x01 + 206e: d4 dc rcall .-1624 ; 0x1a18 + 2070: 4c 01 movw r8, r24 + 2072: 8b 2d mov r24, r11 + 2074: 6d dc rcall .-1830 ; 0x1950 + 2076: fc 01 movw r30, r24 + 2078: 81 81 ldd r24, Z+1 ; 0x01 + 207a: 80 7c andi r24, 0xC0 ; 192 + 207c: 69 81 ldd r22, Y+1 ; 0x01 + 207e: 88 23 and r24, r24 + 2080: 09 f4 brne .+2 ; 0x2084 + 2082: 57 c0 rjmp .+174 ; 0x2132 + 2084: 81 81 ldd r24, Z+1 ; 0x01 + 2086: 80 7c andi r24, 0xC0 ; 192 + 2088: 80 3c cpi r24, 0xC0 ; 192 + 208a: 19 f0 breq .+6 ; 0x2092 + 208c: 81 81 ldd r24, Z+1 ; 0x01 + 208e: 82 fd sbrc r24, 2 + 2090: 50 c0 rjmp .+160 ; 0x2132 + 2092: 8f b7 in r24, 0x3f ; 63 + 2094: f8 94 cli + 2096: d4 01 movw r26, r8 + 2098: 9c 91 ld r25, X + 209a: 90 ff sbrs r25, 0 + 209c: 02 c0 rjmp .+4 ; 0x20a2 + 209e: 8f bf out 0x3f, r24 ; 63 + 20a0: 48 c0 rjmp .+144 ; 0x2132 + 20a2: 91 60 ori r25, 0x01 ; 1 + 20a4: d4 01 movw r26, r8 + 20a6: 9c 93 st X, r25 + 20a8: 8f bf out 0x3f, r24 ; 63 + 20aa: d4 01 movw r26, r8 + 20ac: 11 96 adiw r26, 0x01 ; 1 + 20ae: cd 92 st X+, r12 + 20b0: dc 92 st X, r13 + 20b2: 12 97 sbiw r26, 0x02 ; 2 + 20b4: 13 96 adiw r26, 0x03 ; 3 + 20b6: ed 92 st X+, r14 + 20b8: fc 92 st X, r15 + 20ba: 14 97 sbiw r26, 0x04 ; 4 + 20bc: 15 96 adiw r26, 0x05 ; 5 + 20be: 1d 92 st X+, r1 + 20c0: 1c 92 st X, r1 + 20c2: 16 97 sbiw r26, 0x06 ; 6 + 20c4: 17 96 adiw r26, 0x07 ; 7 + 20c6: 0d 93 st X+, r16 + 20c8: 1c 93 st X, r17 + 20ca: 18 97 sbiw r26, 0x08 ; 8 + 20cc: 91 e0 ldi r25, 0x01 ; 1 + 20ce: 61 11 cpse r22, r1 + 20d0: 04 c0 rjmp .+8 ; 0x20da + 20d2: e1 14 cp r14, r1 + 20d4: f1 04 cpc r15, r1 + 20d6: 09 f0 breq .+2 ; 0x20da + 20d8: 90 e0 ldi r25, 0x00 ; 0 + 20da: d4 01 movw r26, r8 + 20dc: 8c 91 ld r24, X + 20de: 90 fb bst r25, 0 + 20e0: 81 f9 bld r24, 1 + 20e2: 8b 7f andi r24, 0xFB ; 251 + 20e4: 8c 93 st X, r24 + 20e6: b7 fc sbrc r11, 7 + 20e8: 1e c0 rjmp .+60 ; 0x2126 + 20ea: 81 81 ldd r24, Z+1 ; 0x01 + 20ec: 80 7c andi r24, 0xC0 ; 192 + 20ee: 80 3c cpi r24, 0xC0 ; 192 + 20f0: c1 f4 brne .+48 ; 0x2122 + 20f2: a1 81 ldd r26, Z+1 ; 0x01 + 20f4: a7 70 andi r26, 0x07 ; 7 + 20f6: a1 50 subi r26, 0x01 ; 1 + 20f8: a7 30 cpi r26, 0x07 ; 7 + 20fa: 40 f4 brcc .+16 ; 0x210c + 20fc: b0 e0 ldi r27, 0x00 ; 0 + 20fe: aa 0f add r26, r26 + 2100: bb 1f adc r27, r27 + 2102: ae 54 subi r26, 0x4E ; 78 + 2104: bf 4d sbci r27, 0xDF ; 223 + 2106: 6d 91 ld r22, X+ + 2108: 7c 91 ld r23, X + 210a: 02 c0 rjmp .+4 ; 0x2110 + 210c: 68 e0 ldi r22, 0x08 ; 8 + 210e: 70 e0 ldi r23, 0x00 ; 0 + 2110: c7 01 movw r24, r14 + 2112: e8 d1 rcall .+976 ; 0x24e4 <__udivmodhi4> + 2114: 89 2b or r24, r25 + 2116: 29 f0 breq .+10 ; 0x2122 + 2118: f4 01 movw r30, r8 + 211a: 80 81 ld r24, Z + 211c: 8e 7f andi r24, 0xFE ; 254 + 211e: 80 83 st Z, r24 + 2120: 08 c0 rjmp .+16 ; 0x2132 + 2122: 12 82 std Z+2, r1 ; 0x02 + 2124: 13 82 std Z+3, r1 ; 0x03 + 2126: 16 82 std Z+6, r1 ; 0x06 + 2128: 17 82 std Z+7, r1 ; 0x07 + 212a: 8b 2d mov r24, r11 + 212c: 8e dc rcall .-1764 ; 0x1a4a + 212e: 81 e0 ldi r24, 0x01 ; 1 + 2130: 01 c0 rjmp .+2 ; 0x2134 + 2132: 80 e0 ldi r24, 0x00 ; 0 + 2134: 0f 90 pop r0 + 2136: df 91 pop r29 + 2138: cf 91 pop r28 + 213a: 1f 91 pop r17 + 213c: 0f 91 pop r16 + 213e: ff 90 pop r15 + 2140: ef 90 pop r14 + 2142: df 90 pop r13 + 2144: cf 90 pop r12 + 2146: bf 90 pop r11 + 2148: 9f 90 pop r9 + 214a: 8f 90 pop r8 + 214c: 08 95 ret + +0000214e : + 214e: 0f 93 push r16 + 2150: 1f 93 push r17 + 2152: cf 93 push r28 + 2154: df 93 push r29 + 2156: 18 2f mov r17, r24 + 2158: fb db rcall .-2058 ; 0x1950 + 215a: ec 01 movw r28, r24 + 215c: 81 2f mov r24, r17 + 215e: 5c dc rcall .-1864 ; 0x1a18 + 2160: dc 01 movw r26, r24 + 2162: fe 01 movw r30, r28 + 2164: 02 e0 ldi r16, 0x02 ; 2 + 2166: 05 93 las Z, r16 + 2168: 8c 91 ld r24, X + 216a: 80 ff sbrs r24, 0 + 216c: 16 c0 rjmp .+44 ; 0x219a + 216e: 8e 7f andi r24, 0xFE ; 254 + 2170: 8c 93 st X, r24 + 2172: 17 96 adiw r26, 0x07 ; 7 + 2174: ed 91 ld r30, X+ + 2176: fc 91 ld r31, X + 2178: 18 97 sbiw r26, 0x08 ; 8 + 217a: 30 97 sbiw r30, 0x00 ; 0 + 217c: 71 f0 breq .+28 ; 0x219a + 217e: 17 ff sbrs r17, 7 + 2180: 03 c0 rjmp .+6 ; 0x2188 + 2182: 6e 81 ldd r22, Y+6 ; 0x06 + 2184: 7f 81 ldd r23, Y+7 ; 0x07 + 2186: 02 c0 rjmp .+4 ; 0x218c + 2188: 6a 81 ldd r22, Y+2 ; 0x02 + 218a: 7b 81 ldd r23, Y+3 ; 0x03 + 218c: 41 2f mov r20, r17 + 218e: 81 e0 ldi r24, 0x01 ; 1 + 2190: df 91 pop r29 + 2192: cf 91 pop r28 + 2194: 1f 91 pop r17 + 2196: 0f 91 pop r16 + 2198: 09 94 ijmp + 219a: df 91 pop r29 + 219c: cf 91 pop r28 + 219e: 1f 91 pop r17 + 21a0: 0f 91 pop r16 + 21a2: 08 95 ret + +000021a4 : + 21a4: cf 93 push r28 + 21a6: c8 2f mov r28, r24 + 21a8: d2 df rcall .-92 ; 0x214e + 21aa: 8c 2f mov r24, r28 + 21ac: d1 db rcall .-2142 ; 0x1950 + 21ae: fc 01 movw r30, r24 + 21b0: 11 82 std Z+1, r1 ; 0x01 + 21b2: cf 91 pop r28 + 21b4: 08 95 ret + +000021b6 : + 21b6: 0f 93 push r16 + 21b8: cf 93 push r28 + 21ba: c8 2f mov r28, r24 + 21bc: c9 db rcall .-2158 ; 0x1950 + 21be: fc 01 movw r30, r24 + 21c0: 91 81 ldd r25, Z+1 ; 0x01 + 21c2: 94 60 ori r25, 0x04 ; 4 + 21c4: 91 83 std Z+1, r25 ; 0x01 + 21c6: 01 e0 ldi r16, 0x01 ; 1 + 21c8: 06 93 lac Z, r16 + 21ca: 8c 2f mov r24, r28 + 21cc: c0 df rcall .-128 ; 0x214e + 21ce: 81 e0 ldi r24, 0x01 ; 1 + 21d0: cf 91 pop r28 + 21d2: 0f 91 pop r16 + 21d4: 08 95 ret + +000021d6 <__vector_125>: + 21d6: 1f 92 push r1 + 21d8: 0f 92 push r0 + 21da: 0f b6 in r0, 0x3f ; 63 + 21dc: 0f 92 push r0 + 21de: 11 24 eor r1, r1 + 21e0: 0f 93 push r16 + 21e2: 2f 93 push r18 + 21e4: 3f 93 push r19 + 21e6: 4f 93 push r20 + 21e8: 5f 93 push r21 + 21ea: 6f 93 push r22 + 21ec: 7f 93 push r23 + 21ee: 8f 93 push r24 + 21f0: 9f 93 push r25 + 21f2: af 93 push r26 + 21f4: bf 93 push r27 + 21f6: ef 93 push r30 + 21f8: ff 93 push r31 + 21fa: 80 91 cb 04 lds r24, 0x04CB + 21fe: 87 ff sbrs r24, 7 + 2200: 07 c0 rjmp .+14 ; 0x2210 <__vector_125+0x3a> + 2202: 80 e8 ldi r24, 0x80 ; 128 + 2204: 80 93 ca 04 sts 0x04CA, r24 + 2208: 0a d8 rcall .-4076 ; 0x121e + 220a: 0e 94 77 01 call 0x2ee ; 0x2ee + 220e: 86 c0 rjmp .+268 ; 0x231c <__vector_125+0x146> + 2210: 80 91 cb 04 lds r24, 0x04CB + 2214: 82 ff sbrs r24, 2 + 2216: 18 c0 rjmp .+48 ; 0x2248 <__vector_125+0x72> + 2218: 84 e0 ldi r24, 0x04 ; 4 + 221a: 80 93 ca 04 sts 0x04CA, r24 + 221e: 80 91 28 22 lds r24, 0x2228 + 2222: 86 ff sbrs r24, 6 + 2224: 7b c0 rjmp .+246 ; 0x231c <__vector_125+0x146> + 2226: 80 91 cc 04 lds r24, 0x04CC + 222a: 81 fd sbrc r24, 1 + 222c: 77 c0 rjmp .+238 ; 0x231c <__vector_125+0x146> + 222e: 7a dd rcall .-1292 ; 0x1d24 + 2230: 81 11 cpse r24, r1 + 2232: 74 c0 rjmp .+232 ; 0x231c <__vector_125+0x146> + 2234: 80 91 0d 22 lds r24, 0x220D + 2238: 81 30 cpi r24, 0x01 ; 1 + 223a: 11 f4 brne .+4 ; 0x2240 <__vector_125+0x6a> + 223c: d7 db rcall .-2130 ; 0x19ec + 223e: 6e c0 rjmp .+220 ; 0x231c <__vector_125+0x146> + 2240: 84 30 cpi r24, 0x04 ; 4 + 2242: 09 f0 breq .+2 ; 0x2246 <__vector_125+0x70> + 2244: 6b c0 rjmp .+214 ; 0x231c <__vector_125+0x146> + 2246: 21 c0 rjmp .+66 ; 0x228a <__vector_125+0xb4> + 2248: 80 91 cb 04 lds r24, 0x04CB + 224c: 81 ff sbrs r24, 1 + 224e: 26 c0 rjmp .+76 ; 0x229c <__vector_125+0xc6> + 2250: 82 e0 ldi r24, 0x02 ; 2 + 2252: 80 93 ca 04 sts 0x04CA, r24 + 2256: 80 91 20 22 lds r24, 0x2220 + 225a: 86 ff sbrs r24, 6 + 225c: 5f c0 rjmp .+190 ; 0x231c <__vector_125+0x146> + 225e: 80 91 cc 04 lds r24, 0x04CC + 2262: 81 fd sbrc r24, 1 + 2264: 5b c0 rjmp .+182 ; 0x231c <__vector_125+0x146> + 2266: 5e dd rcall .-1348 ; 0x1d24 + 2268: 81 11 cpse r24, r1 + 226a: 58 c0 rjmp .+176 ; 0x231c <__vector_125+0x146> + 226c: 80 91 0d 22 lds r24, 0x220D + 2270: 82 30 cpi r24, 0x02 ; 2 + 2272: 41 f4 brne .+16 ; 0x2284 <__vector_125+0xae> + 2274: 84 e0 ldi r24, 0x04 ; 4 + 2276: 80 93 0d 22 sts 0x220D, r24 + 227a: e0 e2 ldi r30, 0x20 ; 32 + 227c: f2 e2 ldi r31, 0x22 ; 34 + 227e: 02 e0 ldi r16, 0x02 ; 2 + 2280: 06 93 lac Z, r16 + 2282: 4c c0 rjmp .+152 ; 0x231c <__vector_125+0x146> + 2284: 83 30 cpi r24, 0x03 ; 3 + 2286: 09 f0 breq .+2 ; 0x228a <__vector_125+0xb4> + 2288: 49 c0 rjmp .+146 ; 0x231c <__vector_125+0x146> + 228a: e9 e2 ldi r30, 0x29 ; 41 + 228c: f2 e2 ldi r31, 0x22 ; 34 + 228e: 04 e0 ldi r16, 0x04 ; 4 + 2290: 05 93 las Z, r16 + 2292: e1 e2 ldi r30, 0x21 ; 33 + 2294: f2 e2 ldi r31, 0x22 ; 34 + 2296: 04 e0 ldi r16, 0x04 ; 4 + 2298: 05 93 las Z, r16 + 229a: 40 c0 rjmp .+128 ; 0x231c <__vector_125+0x146> + 229c: 80 91 cb 04 lds r24, 0x04CB + 22a0: 84 ff sbrs r24, 4 + 22a2: 25 c0 rjmp .+74 ; 0x22ee <__vector_125+0x118> + 22a4: 80 e1 ldi r24, 0x10 ; 16 + 22a6: 80 93 ca 04 sts 0x04CA, r24 + 22aa: 81 e0 ldi r24, 0x01 ; 1 + 22ac: 50 df rcall .-352 ; 0x214e + 22ae: 81 e8 ldi r24, 0x81 ; 129 + 22b0: 4e df rcall .-356 ; 0x214e + 22b2: 82 e0 ldi r24, 0x02 ; 2 + 22b4: 4c df rcall .-360 ; 0x214e + 22b6: 82 e8 ldi r24, 0x82 ; 130 + 22b8: 4a df rcall .-364 ; 0x214e + 22ba: 0e 94 f3 08 call 0x11e6 ; 0x11e6 + 22be: 10 92 c3 04 sts 0x04C3, r1 + 22c2: 10 92 21 22 sts 0x2221, r1 + 22c6: 96 e0 ldi r25, 0x06 ; 6 + 22c8: 90 93 20 22 sts 0x2220, r25 + 22cc: 83 e4 ldi r24, 0x43 ; 67 + 22ce: 80 93 21 22 sts 0x2221, r24 + 22d2: 10 92 29 22 sts 0x2229, r1 + 22d6: 90 93 28 22 sts 0x2228, r25 + 22da: 80 93 29 22 sts 0x2229, r24 + 22de: 89 ec ldi r24, 0xC9 ; 201 + 22e0: 91 e2 ldi r25, 0x21 ; 33 + 22e2: 80 93 24 22 sts 0x2224, r24 + 22e6: 90 93 25 22 sts 0x2225, r25 + 22ea: 47 db rcall .-2418 ; 0x197a + 22ec: 17 c0 rjmp .+46 ; 0x231c <__vector_125+0x146> + 22ee: 80 91 cb 04 lds r24, 0x04CB + 22f2: 86 ff sbrs r24, 6 + 22f4: 08 c0 rjmp .+16 ; 0x2306 <__vector_125+0x130> + 22f6: 80 e4 ldi r24, 0x40 ; 64 + 22f8: 80 93 ca 04 sts 0x04CA, r24 + 22fc: 80 e0 ldi r24, 0x00 ; 0 + 22fe: 15 db rcall .-2518 ; 0x192a + 2300: 0e 94 75 01 call 0x2ea ; 0x2ea + 2304: 0b c0 rjmp .+22 ; 0x231c <__vector_125+0x146> + 2306: 80 91 cb 04 lds r24, 0x04CB + 230a: 85 ff sbrs r24, 5 + 230c: 07 c0 rjmp .+14 ; 0x231c <__vector_125+0x146> + 230e: 80 e2 ldi r24, 0x20 ; 32 + 2310: 80 93 ca 04 sts 0x04CA, r24 + 2314: 81 e0 ldi r24, 0x01 ; 1 + 2316: 09 db rcall .-2542 ; 0x192a + 2318: 0e 94 76 01 call 0x2ec ; 0x2ec + 231c: ff 91 pop r31 + 231e: ef 91 pop r30 + 2320: bf 91 pop r27 + 2322: af 91 pop r26 + 2324: 9f 91 pop r25 + 2326: 8f 91 pop r24 + 2328: 7f 91 pop r23 + 232a: 6f 91 pop r22 + 232c: 5f 91 pop r21 + 232e: 4f 91 pop r20 + 2330: 3f 91 pop r19 + 2332: 2f 91 pop r18 + 2334: 0f 91 pop r16 + 2336: 0f 90 pop r0 + 2338: 0f be out 0x3f, r0 ; 63 + 233a: 0f 90 pop r0 + 233c: 1f 90 pop r1 + 233e: 18 95 reti + +00002340 <__vector_126>: + 2340: 1f 92 push r1 + 2342: 0f 92 push r0 + 2344: 0f b6 in r0, 0x3f ; 63 + 2346: 0f 92 push r0 + 2348: 11 24 eor r1, r1 + 234a: 0f 93 push r16 + 234c: 1f 93 push r17 + 234e: 2f 93 push r18 + 2350: 3f 93 push r19 + 2352: 4f 93 push r20 + 2354: 5f 93 push r21 + 2356: 6f 93 push r22 + 2358: 7f 93 push r23 + 235a: 8f 93 push r24 + 235c: 9f 93 push r25 + 235e: af 93 push r26 + 2360: bf 93 push r27 + 2362: cf 93 push r28 + 2364: df 93 push r29 + 2366: ef 93 push r30 + 2368: ff 93 push r31 + 236a: 80 91 cc 04 lds r24, 0x04CC + 236e: 81 ff sbrs r24, 1 + 2370: 1a c0 rjmp .+52 ; 0x23a6 <__vector_126+0x66> + 2372: 82 e0 ldi r24, 0x02 ; 2 + 2374: 80 93 cc 04 sts 0x04CC, r24 + 2378: 80 91 c5 04 lds r24, 0x04C5 + 237c: e0 e2 ldi r30, 0x20 ; 32 + 237e: f2 e2 ldi r31, 0x22 ; 34 + 2380: 81 95 neg r24 + 2382: 88 0f add r24, r24 + 2384: e8 1b sub r30, r24 + 2386: f1 09 sbc r31, r1 + 2388: 20 81 ld r18, Z + 238a: 31 81 ldd r19, Z+1 ; 0x01 + 238c: 20 52 subi r18, 0x20 ; 32 + 238e: 32 42 sbci r19, 0x22 ; 34 + 2390: 03 e0 ldi r16, 0x03 ; 3 + 2392: 36 95 lsr r19 + 2394: 27 95 ror r18 + 2396: 0a 95 dec r16 + 2398: e1 f7 brne .-8 ; 0x2392 <__vector_126+0x52> + 239a: c2 2f mov r28, r18 + 239c: c6 95 lsr r28 + 239e: 20 ff sbrs r18, 0 + 23a0: 06 c0 rjmp .+12 ; 0x23ae <__vector_126+0x6e> + 23a2: 80 e8 ldi r24, 0x80 ; 128 + 23a4: 05 c0 rjmp .+10 ; 0x23b0 <__vector_126+0x70> + 23a6: be dc rcall .-1668 ; 0x1d24 + 23a8: 88 23 and r24, r24 + 23aa: 19 f3 breq .-58 ; 0x2372 <__vector_126+0x32> + 23ac: 86 c0 rjmp .+268 ; 0x24ba <__vector_126+0x17a> + 23ae: 80 e0 ldi r24, 0x00 ; 0 + 23b0: c8 0f add r28, r24 + 23b2: 8c 2f mov r24, r28 + 23b4: cd da rcall .-2662 ; 0x1950 + 23b6: fc 01 movw r30, r24 + 23b8: 80 81 ld r24, Z + 23ba: 85 ff sbrs r24, 5 + 23bc: 7e c0 rjmp .+252 ; 0x24ba <__vector_126+0x17a> + 23be: 00 e2 ldi r16, 0x20 ; 32 + 23c0: 06 93 lac Z, r16 + 23c2: c1 11 cpse r28, r1 + 23c4: 74 c0 rjmp .+232 ; 0x24ae <__vector_126+0x16e> + 23c6: 80 91 0d 22 lds r24, 0x220D + 23ca: 84 30 cpi r24, 0x04 ; 4 + 23cc: 19 f4 brne .+6 ; 0x23d4 <__vector_126+0x94> + 23ce: 1c db rcall .-2504 ; 0x1a08 + 23d0: d4 da rcall .-2648 ; 0x197a + 23d2: 73 c0 rjmp .+230 ; 0x24ba <__vector_126+0x17a> + 23d4: c0 91 22 22 lds r28, 0x2222 + 23d8: d0 91 23 22 lds r29, 0x2223 + 23dc: 80 91 70 24 lds r24, 0x2470 + 23e0: 90 91 71 24 lds r25, 0x2471 + 23e4: 00 91 09 22 lds r16, 0x2209 + 23e8: 10 91 0a 22 lds r17, 0x220A + 23ec: 98 01 movw r18, r16 + 23ee: 2c 0f add r18, r28 + 23f0: 3d 1f adc r19, r29 + 23f2: 82 17 cp r24, r18 + 23f4: 93 07 cpc r25, r19 + 23f6: 18 f4 brcc .+6 ; 0x23fe <__vector_126+0xbe> + 23f8: ec 01 movw r28, r24 + 23fa: c0 1b sub r28, r16 + 23fc: d1 0b sbc r29, r17 + 23fe: 80 91 6e 24 lds r24, 0x246E + 2402: 90 91 6f 24 lds r25, 0x246F + 2406: ae 01 movw r20, r28 + 2408: 69 ec ldi r22, 0xC9 ; 201 + 240a: 71 e2 ldi r23, 0x21 ; 33 + 240c: 80 0f add r24, r16 + 240e: 91 1f adc r25, r17 + 2410: 83 d0 rcall .+262 ; 0x2518 + 2412: 0c 0f add r16, r28 + 2414: 1d 1f adc r17, r29 + 2416: 00 93 09 22 sts 0x2209, r16 + 241a: 10 93 0a 22 sts 0x220A, r17 + 241e: c0 34 cpi r28, 0x40 ; 64 + 2420: d1 05 cpc r29, r1 + 2422: 69 f4 brne .+26 ; 0x243e <__vector_126+0xfe> + 2424: 80 91 0b 22 lds r24, 0x220B + 2428: 90 91 0c 22 lds r25, 0x220C + 242c: 80 0f add r24, r16 + 242e: 91 1f adc r25, r17 + 2430: 20 91 6c 24 lds r18, 0x246C + 2434: 30 91 6d 24 lds r19, 0x246D + 2438: 82 17 cp r24, r18 + 243a: 93 07 cpc r25, r19 + 243c: 88 f0 brcs .+34 ; 0x2460 <__vector_126+0x120> + 243e: 00 93 70 24 sts 0x2470, r16 + 2442: 10 93 71 24 sts 0x2471, r17 + 2446: e0 91 74 24 lds r30, 0x2474 + 244a: f0 91 75 24 lds r31, 0x2475 + 244e: 30 97 sbiw r30, 0x00 ; 0 + 2450: 29 f0 breq .+10 ; 0x245c <__vector_126+0x11c> + 2452: 09 95 icall + 2454: 81 11 cpse r24, r1 + 2456: 02 c0 rjmp .+4 ; 0x245c <__vector_126+0x11c> + 2458: bb da rcall .-2698 ; 0x19d0 + 245a: 2f c0 rjmp .+94 ; 0x24ba <__vector_126+0x17a> + 245c: c7 da rcall .-2674 ; 0x19ec + 245e: 2d c0 rjmp .+90 ; 0x24ba <__vector_126+0x17a> + 2460: 80 91 70 24 lds r24, 0x2470 + 2464: 90 91 71 24 lds r25, 0x2471 + 2468: 80 17 cp r24, r16 + 246a: 91 07 cpc r25, r17 + 246c: d9 f4 brne .+54 ; 0x24a4 <__vector_126+0x164> + 246e: e0 91 74 24 lds r30, 0x2474 + 2472: f0 91 75 24 lds r31, 0x2475 + 2476: 30 97 sbiw r30, 0x00 ; 0 + 2478: 79 f3 breq .-34 ; 0x2458 <__vector_126+0x118> + 247a: 09 95 icall + 247c: 88 23 and r24, r24 + 247e: 61 f3 breq .-40 ; 0x2458 <__vector_126+0x118> + 2480: 80 91 0b 22 lds r24, 0x220B + 2484: 90 91 0c 22 lds r25, 0x220C + 2488: 20 91 09 22 lds r18, 0x2209 + 248c: 30 91 0a 22 lds r19, 0x220A + 2490: 82 0f add r24, r18 + 2492: 93 1f adc r25, r19 + 2494: 80 93 0b 22 sts 0x220B, r24 + 2498: 90 93 0c 22 sts 0x220C, r25 + 249c: 10 92 09 22 sts 0x2209, r1 + 24a0: 10 92 0a 22 sts 0x220A, r1 + 24a4: e0 e2 ldi r30, 0x20 ; 32 + 24a6: f2 e2 ldi r31, 0x22 ; 34 + 24a8: 02 e0 ldi r16, 0x02 ; 2 + 24aa: 06 93 lac Z, r16 + 24ac: 06 c0 rjmp .+12 ; 0x24ba <__vector_126+0x17a> + 24ae: c0 38 cpi r28, 0x80 ; 128 + 24b0: 11 f4 brne .+4 ; 0x24b6 <__vector_126+0x176> + 24b2: ca db rcall .-2156 ; 0x1c48 + 24b4: 02 c0 rjmp .+4 ; 0x24ba <__vector_126+0x17a> + 24b6: 8c 2f mov r24, r28 + 24b8: c8 da rcall .-2672 ; 0x1a4a + 24ba: ff 91 pop r31 + 24bc: ef 91 pop r30 + 24be: df 91 pop r29 + 24c0: cf 91 pop r28 + 24c2: bf 91 pop r27 + 24c4: af 91 pop r26 + 24c6: 9f 91 pop r25 + 24c8: 8f 91 pop r24 + 24ca: 7f 91 pop r23 + 24cc: 6f 91 pop r22 + 24ce: 5f 91 pop r21 + 24d0: 4f 91 pop r20 + 24d2: 3f 91 pop r19 + 24d4: 2f 91 pop r18 + 24d6: 1f 91 pop r17 + 24d8: 0f 91 pop r16 + 24da: 0f 90 pop r0 + 24dc: 0f be out 0x3f, r0 ; 63 + 24de: 0f 90 pop r0 + 24e0: 1f 90 pop r1 + 24e2: 18 95 reti + +000024e4 <__udivmodhi4>: + 24e4: aa 1b sub r26, r26 + 24e6: bb 1b sub r27, r27 + 24e8: 51 e1 ldi r21, 0x11 ; 17 + 24ea: 07 c0 rjmp .+14 ; 0x24fa <__udivmodhi4_ep> + +000024ec <__udivmodhi4_loop>: + 24ec: aa 1f adc r26, r26 + 24ee: bb 1f adc r27, r27 + 24f0: a6 17 cp r26, r22 + 24f2: b7 07 cpc r27, r23 + 24f4: 10 f0 brcs .+4 ; 0x24fa <__udivmodhi4_ep> + 24f6: a6 1b sub r26, r22 + 24f8: b7 0b sbc r27, r23 + +000024fa <__udivmodhi4_ep>: + 24fa: 88 1f adc r24, r24 + 24fc: 99 1f adc r25, r25 + 24fe: 5a 95 dec r21 + 2500: a9 f7 brne .-22 ; 0x24ec <__udivmodhi4_loop> + 2502: 80 95 com r24 + 2504: 90 95 com r25 + 2506: bc 01 movw r22, r24 + 2508: cd 01 movw r24, r26 + 250a: 08 95 ret + +0000250c <__tablejump2__>: + 250c: ee 0f add r30, r30 + 250e: ff 1f adc r31, r31 + +00002510 <__tablejump__>: + 2510: 05 90 lpm r0, Z+ + 2512: f4 91 lpm r31, Z + 2514: e0 2d mov r30, r0 + 2516: 09 94 ijmp + +00002518 : + 2518: fb 01 movw r30, r22 + 251a: dc 01 movw r26, r24 + 251c: 02 c0 rjmp .+4 ; 0x2522 + 251e: 01 90 ld r0, Z+ + 2520: 0d 92 st X+, r0 + 2522: 41 50 subi r20, 0x01 ; 1 + 2524: 50 40 sbci r21, 0x00 ; 0 + 2526: d8 f7 brcc .-10 ; 0x251e + 2528: 08 95 ret + +0000252a <_exit>: + 252a: f8 94 cli + +0000252c <__stop_program>: + 252c: ff cf rjmp .-2 ; 0x252c <__stop_program> diff --git a/AVR Code/USB_BULK_TEST/Release/USB_BULK_TEST.map b/AVR Code/USB_BULK_TEST/Release/USB_BULK_TEST.map new file mode 100644 index 00000000..dd7c119b --- /dev/null +++ b/AVR Code/USB_BULK_TEST/Release/USB_BULK_TEST.map @@ -0,0 +1,1104 @@ +Archive member included because of file (symbol) + +c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_udivmodhi4.o) + src/ASF/xmega/drivers/usb/usb_device.o (__udivmodhi4) +c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_exit.o) + c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avrxmega2/crtx32a4u.o (exit) +c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_tablejump.o) + src/main.o (__tablejump2__) +c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_copy_data.o) + src/main.o (__do_copy_data) +c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_clear_bss.o) + src/main.o (__do_clear_bss) +c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avrxmega2\libc.a(memcpy.o) + src/ASF/xmega/drivers/nvm/nvm.o (memcpy) + +Allocating common symbols +Common symbol size file + +dacBuf_CH1 0x200 src/main.o +udd_g_ctrlreq 0x10 src/main.o +sleepmgr_locks 0x6 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o +dacBuf_CH2 0x200 src/main.o +isoBuf 0x5dc src/main.o + +Discarded input sections + + .data 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avrxmega2/crtx32a4u.o + .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avrxmega2/crtx32a4u.o + .text 0x00000000 0x0 src/tiny_dig.o + .data 0x00000000 0x0 src/tiny_dig.o + .bss 0x00000000 0x0 src/tiny_dig.o + .text 0x00000000 0x0 src/ASF/common/boards/user_board/init.o + .data 0x00000000 0x0 src/ASF/common/boards/user_board/init.o + .bss 0x00000000 0x0 src/ASF/common/boards/user_board/init.o + .text 0x00000000 0x0 src/ASF/common/services/ioport/xmega/ioport_compat.o + .data 0x00000000 0x0 src/ASF/common/services/ioport/xmega/ioport_compat.o + .bss 0x00000000 0x0 src/ASF/common/services/ioport/xmega/ioport_compat.o + .comment 0x00000000 0x31 src/ASF/common/services/ioport/xmega/ioport_compat.o + .text 0x00000000 0x0 src/main.o + .data 0x00000000 0x0 src/main.o + .bss 0x00000000 0x0 src/main.o + .data.test_byte + 0x00000000 0x1 src/main.o + .text 0x00000000 0x0 src/tiny_adc.o + .data 0x00000000 0x0 src/tiny_adc.o + .bss 0x00000000 0x0 src/tiny_adc.o + .text 0x00000000 0x0 src/tiny_dac.o + .data 0x00000000 0x0 src/tiny_dac.o + .bss 0x00000000 0x0 src/tiny_dac.o + .text 0x00000000 0x0 src/tiny_dma.o + .data 0x00000000 0x0 src/tiny_dma.o + .bss 0x00000000 0x0 src/tiny_dma.o + .text 0x00000000 0x0 src/tiny_timer.o + .data 0x00000000 0x0 src/tiny_timer.o + .bss 0x00000000 0x0 src/tiny_timer.o + .text 0x00000000 0x0 src/tiny_uart.o + .data 0x00000000 0x0 src/tiny_uart.o + .bss 0x00000000 0x0 src/tiny_uart.o + .text 0x00000000 0x0 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .data 0x00000000 0x0 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .bss 0x00000000 0x0 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .text.ui_init 0x00000000 0x2 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .text.ui_powerdown + 0x00000000 0x2 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .text.ui_wakeup + 0x00000000 0x2 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .text.ui_loop_back_state + 0x00000000 0x2 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .text.ui_process + 0x00000000 0x2 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .comment 0x00000000 0x31 src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o + .text 0x00000000 0x0 src/ASF/common/services/clock/xmega/sysclk.o + .data 0x00000000 0x0 src/ASF/common/services/clock/xmega/sysclk.o + .bss 0x00000000 0x0 src/ASF/common/services/clock/xmega/sysclk.o + .text.sysclk_disable_module + 0x00000000 0x16 src/ASF/common/services/clock/xmega/sysclk.o + .text.sysclk_disable_usb + 0x00000000 0x12 src/ASF/common/services/clock/xmega/sysclk.o + .text 0x00000000 0x0 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .data 0x00000000 0x0 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .bss 0x00000000 0x0 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .data.sleepmgr_configs + 0x00000000 0x6 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .text 0x00000000 0x0 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .data 0x00000000 0x0 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .bss 0x00000000 0x0 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .text.udi_vendor_bulk_in_run + 0x00000000 0x18 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .text.udi_vendor_bulk_out_run + 0x00000000 0x18 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .text.udi_vendor_iso_out_run + 0x00000000 0x18 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .text 0x00000000 0x0 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .data 0x00000000 0x0 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .bss 0x00000000 0x0 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .text 0x00000000 0x0 src/ASF/common/services/usb/udc/udc.o + .data 0x00000000 0x0 src/ASF/common/services/usb/udc/udc.o + .bss 0x00000000 0x0 src/ASF/common/services/usb/udc/udc.o + .text.udc_stop + 0x00000000 0x8 src/ASF/common/services/usb/udc/udc.o + .text 0x00000000 0x0 src/ASF/xmega/drivers/cpu/ccp.o + .data 0x00000000 0x0 src/ASF/xmega/drivers/cpu/ccp.o + .bss 0x00000000 0x0 src/ASF/xmega/drivers/cpu/ccp.o + .text 0x00000000 0x0 src/ASF/xmega/drivers/nvm/nvm.o + .data 0x00000000 0x0 src/ASF/xmega/drivers/nvm/nvm.o + .bss 0x00000000 0x0 src/ASF/xmega/drivers/nvm/nvm.o + .text.nvm_wait_until_ready + 0x00000000 0xa src/ASF/xmega/drivers/nvm/nvm.o + .text.nvm_read_production_signature_row + 0x00000000 0xa src/ASF/xmega/drivers/nvm/nvm.o + .text.nvm_issue_command + 0x00000000 0x22 src/ASF/xmega/drivers/nvm/nvm.o + .text.nvm_read_device_serial + 0x00000000 0x64 src/ASF/xmega/drivers/nvm/nvm.o + .text.nvm_eeprom_read_byte + 0x00000000 0x24 src/ASF/xmega/drivers/nvm/nvm.o + .text.nvm_eeprom_read_buffer + 0x00000000 0x5e src/ASF/xmega/drivers/nvm/nvm.o + .text.nvm_eeprom_flush_buffer + 0x00000000 0x1e src/ASF/xmega/drivers/nvm/nvm.o + .text.nvm_eeprom_load_byte_to_buffer + 0x00000000 0x3c src/ASF/xmega/drivers/nvm/nvm.o + .text.nvm_eeprom_write_byte + 0x00000000 0x62 src/ASF/xmega/drivers/nvm/nvm.o + .text.nvm_eeprom_load_page_to_buffer + 0x00000000 0x24 src/ASF/xmega/drivers/nvm/nvm.o + .text.nvm_eeprom_atomic_write_page + 0x00000000 0x30 src/ASF/xmega/drivers/nvm/nvm.o + .text.nvm_eeprom_erase_and_write_buffer + 0x00000000 0x7e src/ASF/xmega/drivers/nvm/nvm.o + .text.nvm_eeprom_split_write_page + 0x00000000 0x30 src/ASF/xmega/drivers/nvm/nvm.o + .text.nvm_eeprom_fill_buffer_with_value + 0x00000000 0x24 src/ASF/xmega/drivers/nvm/nvm.o + .text.nvm_eeprom_erase_bytes_in_page + 0x00000000 0x30 src/ASF/xmega/drivers/nvm/nvm.o + .text.nvm_eeprom_erase_page + 0x00000000 0x12 src/ASF/xmega/drivers/nvm/nvm.o + .text.nvm_eeprom_erase_bytes_in_all_pages + 0x00000000 0xa src/ASF/xmega/drivers/nvm/nvm.o + .text.nvm_eeprom_erase_all + 0x00000000 0xa src/ASF/xmega/drivers/nvm/nvm.o + .text.nvm_issue_flash_range_crc + 0x00000000 0x2c src/ASF/xmega/drivers/nvm/nvm.o + .text.nvm_flash_read_buffer + 0x00000000 0x48 src/ASF/xmega/drivers/nvm/nvm.o + .text.nvm_user_sig_read_buffer + 0x00000000 0x44 src/ASF/xmega/drivers/nvm/nvm.o + .text.nvm_user_sig_write_buffer + 0x00000000 0x12c src/ASF/xmega/drivers/nvm/nvm.o + .text.nvm_flash_erase_and_write_buffer + 0x00000000 0x12e src/ASF/xmega/drivers/nvm/nvm.o + .text.nvm_fuses_read + 0x00000000 0x34 src/ASF/xmega/drivers/nvm/nvm.o + .comment 0x00000000 0x31 src/ASF/xmega/drivers/nvm/nvm.o + .text 0x00000000 0x0 src/ASF/xmega/drivers/nvm/nvm_asm.o + .data 0x00000000 0x0 src/ASF/xmega/drivers/nvm/nvm_asm.o + .bss 0x00000000 0x0 src/ASF/xmega/drivers/nvm/nvm_asm.o + .BOOT 0x00000000 0x44 src/ASF/xmega/drivers/nvm/nvm_asm.o + .text 0x00000000 0x0 src/ASF/xmega/drivers/usb/usb_device.o + .data 0x00000000 0x0 src/ASF/xmega/drivers/usb/usb_device.o + .bss 0x00000000 0x0 src/ASF/xmega/drivers/usb/usb_device.o + .text.udd_disable + 0x00000000 0x2c src/ASF/xmega/drivers/usb/usb_device.o + .text.udd_include_vbus_monitoring + 0x00000000 0x4 src/ASF/xmega/drivers/usb/usb_device.o + .text.udd_detach + 0x00000000 0xc src/ASF/xmega/drivers/usb/usb_device.o + .text.udd_is_high_speed + 0x00000000 0x4 src/ASF/xmega/drivers/usb/usb_device.o + .text.udd_get_frame_number + 0x00000000 0xa src/ASF/xmega/drivers/usb/usb_device.o + .text.udd_get_micro_frame_number + 0x00000000 0x6 src/ASF/xmega/drivers/usb/usb_device.o + .text.udd_send_remotewakeup + 0x00000000 0x24 src/ASF/xmega/drivers/usb/usb_device.o + .text.udd_ep_wait_stall_clear + 0x00000000 0x4e src/ASF/xmega/drivers/usb/usb_device.o + .text.udd_ep_is_valid + 0x00000000 0x10 src/ASF/xmega/drivers/usb/usb_device.o + .text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_udivmodhi4.o) + .data 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_udivmodhi4.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_udivmodhi4.o) + .text.libgcc.mul + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_udivmodhi4.o) + .text.libgcc 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_udivmodhi4.o) + .text.libgcc.prologue + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_udivmodhi4.o) + .text.libgcc.builtins + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_udivmodhi4.o) + .text.libgcc.fmul + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_udivmodhi4.o) + .text.libgcc.fixed + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_udivmodhi4.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_exit.o) + .data 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_exit.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_exit.o) + .text.libgcc.mul + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_exit.o) + .text.libgcc.div + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_exit.o) + .text.libgcc 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_exit.o) + .text.libgcc.prologue + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_exit.o) + .text.libgcc.builtins + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_exit.o) + .text.libgcc.fmul + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_exit.o) + .text.libgcc.fixed + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_exit.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_tablejump.o) + .data 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_tablejump.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_tablejump.o) + .text.libgcc.mul + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_tablejump.o) + .text.libgcc.div + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_tablejump.o) + .text.libgcc.prologue + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_tablejump.o) + .text.libgcc.builtins + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_tablejump.o) + .text.libgcc.fmul + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_tablejump.o) + .text.libgcc.fixed + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_tablejump.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_copy_data.o) + .data 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_copy_data.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_copy_data.o) + .text.libgcc.mul + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_copy_data.o) + .text.libgcc.div + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_copy_data.o) + .text.libgcc 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_copy_data.o) + .text.libgcc.prologue + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_copy_data.o) + .text.libgcc.builtins + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_copy_data.o) + .text.libgcc.fmul + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_copy_data.o) + .text.libgcc.fixed + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_copy_data.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_clear_bss.o) + .data 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_clear_bss.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_clear_bss.o) + .text.libgcc.mul + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_clear_bss.o) + .text.libgcc.div + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_clear_bss.o) + .text.libgcc 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_clear_bss.o) + .text.libgcc.prologue + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_clear_bss.o) + .text.libgcc.builtins + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_clear_bss.o) + .text.libgcc.fmul + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_clear_bss.o) + .text.libgcc.fixed + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_clear_bss.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avrxmega2\libc.a(memcpy.o) + .data 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avrxmega2\libc.a(memcpy.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avrxmega2\libc.a(memcpy.o) + +Memory Configuration + +Name Origin Length Attributes +text 0x00000000 0x00100000 xr +data 0x00802000 0x0000ffa0 rw !x +eeprom 0x00810000 0x00010000 rw !x +fuse 0x00820000 0x00000400 rw !x +lock 0x00830000 0x00000400 rw !x +signature 0x00840000 0x00000400 rw !x +user_signatures 0x00850000 0x00000400 rw !x +*default* 0x00000000 0xffffffff + +Linker script and memory map + +LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avrxmega2/crtx32a4u.o +LOAD src/tiny_dig.o +LOAD src/ASF/common/boards/user_board/init.o +LOAD src/ASF/common/services/ioport/xmega/ioport_compat.o +LOAD src/main.o +LOAD src/tiny_adc.o +LOAD src/tiny_dac.o +LOAD src/tiny_dma.o +LOAD src/tiny_timer.o +LOAD src/tiny_uart.o +LOAD src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o +LOAD src/ASF/common/services/clock/xmega/sysclk.o +LOAD src/ASF/common/services/sleepmgr/xmega/sleepmgr.o +LOAD src/ASF/common/services/usb/class/vendor/device/udi_vendor.o +LOAD src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o +LOAD src/ASF/common/services/usb/udc/udc.o +LOAD src/ASF/xmega/drivers/cpu/ccp.o +LOAD src/ASF/xmega/drivers/nvm/nvm.o +LOAD src/ASF/xmega/drivers/nvm/nvm_asm.o +LOAD src/ASF/xmega/drivers/usb/usb_device.o +START GROUP +LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avrxmega2\libm.a +END GROUP +START GROUP +LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a +LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avrxmega2\libm.a +LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avrxmega2\libc.a +END GROUP + +.hash + *(.hash) + +.dynsym + *(.dynsym) + +.dynstr + *(.dynstr) + +.gnu.version + *(.gnu.version) + +.gnu.version_d + *(.gnu.version_d) + +.gnu.version_r + *(.gnu.version_r) + +.rel.init + *(.rel.init) + +.rela.init + *(.rela.init) + +.rel.text + *(.rel.text) + *(.rel.text.*) + *(.rel.gnu.linkonce.t*) + +.rela.text + *(.rela.text) + *(.rela.text.*) + *(.rela.gnu.linkonce.t*) + +.rel.fini + *(.rel.fini) + +.rela.fini + *(.rela.fini) + +.rel.rodata + *(.rel.rodata) + *(.rel.rodata.*) + *(.rel.gnu.linkonce.r*) + +.rela.rodata + *(.rela.rodata) + *(.rela.rodata.*) + *(.rela.gnu.linkonce.r*) + +.rel.data + *(.rel.data) + *(.rel.data.*) + *(.rel.gnu.linkonce.d*) + +.rela.data + *(.rela.data) + *(.rela.data.*) + *(.rela.gnu.linkonce.d*) + +.rel.ctors + *(.rel.ctors) + +.rela.ctors + *(.rela.ctors) + +.rel.dtors + *(.rel.dtors) + +.rela.dtors + *(.rela.dtors) + +.rel.got + *(.rel.got) + +.rela.got + *(.rela.got) + +.rel.bss + *(.rel.bss) + +.rela.bss + *(.rela.bss) + +.rel.plt + *(.rel.plt) + +.rela.plt + *(.rela.plt) + +.text 0x00000000 0x252e + *(.vectors) + .vectors 0x00000000 0x1fc c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avrxmega2/crtx32a4u.o + 0x00000000 __vector_default + 0x00000000 __vectors + *(.vectors) + *(.progmem.gcc*) + .progmem.gcc_sw_table.main_sof_action + 0x000001fc 0x10 src/main.o + .progmem.gcc_sw_table.udc_process_setup + 0x0000020c 0x30 src/ASF/common/services/usb/udc/udc.o + 0x0000023c . = ALIGN (0x2) + 0x0000023c __trampolines_start = . + *(.trampolines) + .trampolines 0x0000023c 0x0 linker stubs + *(.trampolines*) + 0x0000023c __trampolines_end = . + *(.progmem*) + 0x0000023c . = ALIGN (0x2) + *(.jumptables) + *(.jumptables*) + *(.lowtext) + *(.lowtext*) + 0x0000023c __ctors_start = . + *(.ctors) + 0x0000023c __ctors_end = . + 0x0000023c __dtors_start = . + *(.dtors) + 0x0000023c __dtors_end = . + SORT(*)(.ctors) + SORT(*)(.dtors) + *(.init0) + .init0 0x0000023c 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avrxmega2/crtx32a4u.o + 0x0000023c __init + *(.init0) + *(.init1) + *(.init1) + *(.init2) + .init2 0x0000023c 0xc c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avrxmega2/crtx32a4u.o + *(.init2) + *(.init3) + *(.init3) + *(.init4) + .init4 0x00000248 0x16 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_copy_data.o) + 0x00000248 __do_copy_data + .init4 0x0000025e 0x10 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_clear_bss.o) + 0x0000025e __do_clear_bss + *(.init4) + *(.init5) + *(.init5) + *(.init6) + *(.init6) + *(.init7) + *(.init7) + *(.init8) + *(.init8) + *(.init9) + .init9 0x0000026e 0x6 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avrxmega2/crtx32a4u.o + *(.init9) + *(.text) + .text 0x00000274 0x2 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avrxmega2/crtx32a4u.o + 0x00000274 __vector_38 + 0x00000274 __vector_104 + 0x00000274 __vector_22 + 0x00000274 __vector_63 + 0x00000274 __vector_28 + 0x00000274 __vector_67 + 0x00000274 __vector_1 + 0x00000274 __vector_119 + 0x00000274 __vector_32 + 0x00000274 __vector_75 + 0x00000274 __vector_71 + 0x00000274 __vector_91 + 0x00000274 __vector_34 + 0x00000274 __vector_62 + 0x00000274 __vector_77 + 0x00000274 __vector_102 + 0x00000274 __vector_24 + 0x00000274 __vector_12 + 0x00000274 __vector_55 + 0x00000274 __vector_69 + 0x00000274 __vector_81 + 0x00000274 __vector_90 + 0x00000274 __vector_46 + 0x00000274 __bad_interrupt + 0x00000274 __vector_122 + 0x00000274 __vector_72 + 0x00000274 __vector_114 + 0x00000274 __vector_6 + 0x00000274 __vector_110 + 0x00000274 __vector_31 + 0x00000274 __vector_92 + 0x00000274 __vector_35 + 0x00000274 __vector_78 + 0x00000274 __vector_74 + 0x00000274 __vector_117 + 0x00000274 __vector_39 + 0x00000274 __vector_107 + 0x00000274 __vector_3 + 0x00000274 __vector_105 + 0x00000274 __vector_98 + 0x00000274 __vector_23 + 0x00000274 __vector_68 + 0x00000274 __vector_30 + 0x00000274 __vector_73 + 0x00000274 __vector_45 + 0x00000274 __vector_25 + 0x00000274 __vector_93 + 0x00000274 __vector_61 + 0x00000274 __vector_11 + 0x00000274 __vector_54 + 0x00000274 __vector_99 + 0x00000274 __vector_13 + 0x00000274 __vector_17 + 0x00000274 __vector_19 + 0x00000274 __vector_56 + 0x00000274 __vector_7 + 0x00000274 __vector_49 + 0x00000274 __vector_123 + 0x00000274 __vector_41 + 0x00000274 __vector_86 + 0x00000274 __vector_100 + 0x00000274 __vector_101 + 0x00000274 __vector_64 + 0x00000274 __vector_88 + 0x00000274 __vector_109 + 0x00000274 __vector_43 + 0x00000274 __vector_27 + 0x00000274 __vector_5 + 0x00000274 __vector_113 + 0x00000274 __vector_33 + 0x00000274 __vector_76 + 0x00000274 __vector_115 + 0x00000274 __vector_47 + 0x00000274 __vector_52 + 0x00000274 __vector_37 + 0x00000274 __vector_95 + 0x00000274 __vector_103 + 0x00000274 __vector_96 + 0x00000274 __vector_89 + 0x00000274 __vector_108 + 0x00000274 __vector_4 + 0x00000274 __vector_44 + 0x00000274 __vector_82 + 0x00000274 __vector_106 + 0x00000274 __vector_118 + 0x00000274 __vector_51 + 0x00000274 __vector_9 + 0x00000274 __vector_2 + 0x00000274 __vector_21 + 0x00000274 __vector_15 + 0x00000274 __vector_66 + 0x00000274 __vector_36 + 0x00000274 __vector_79 + 0x00000274 __vector_58 + 0x00000274 __vector_70 + 0x00000274 __vector_29 + 0x00000274 __vector_60 + 0x00000274 __vector_121 + 0x00000274 __vector_40 + 0x00000274 __vector_85 + 0x00000274 __vector_94 + 0x00000274 __vector_8 + 0x00000274 __vector_26 + 0x00000274 __vector_48 + 0x00000274 __vector_124 + 0x00000274 __vector_116 + 0x00000274 __vector_112 + 0x00000274 __vector_111 + 0x00000274 __vector_80 + 0x00000274 __vector_14 + 0x00000274 __vector_84 + 0x00000274 __vector_57 + 0x00000274 __vector_53 + 0x00000274 __vector_10 + 0x00000274 __vector_50 + 0x00000274 __vector_16 + 0x00000274 __vector_59 + 0x00000274 __vector_18 + 0x00000274 __vector_97 + 0x00000274 __vector_20 + 0x00000274 __vector_42 + 0x00000274 __vector_87 + 0x00000274 __vector_65 + 0x00000274 __vector_120 + 0x00000276 . = ALIGN (0x2) + *(.text.*) + .text.tiny_dig_setup + 0x00000276 0xe src/tiny_dig.o + 0x00000276 tiny_dig_setup + .text.board_init + 0x00000284 0x2 src/ASF/common/boards/user_board/init.o + 0x00000284 board_init + .text.iso_callback + 0x00000286 0x20 src/main.o + 0x00000286 iso_callback + .text.startup.main + 0x000002a6 0x44 src/main.o + 0x000002a6 main + .text.main_suspend_action + 0x000002ea 0x2 src/main.o + 0x000002ea main_suspend_action + .text.main_resume_action + 0x000002ec 0x2 src/main.o + 0x000002ec main_resume_action + .text.main_sof_action + 0x000002ee 0x40 src/main.o + 0x000002ee main_sof_action + .text.main_vendor_enable + 0x0000032e 0x18 src/main.o + 0x0000032e main_vendor_enable + .text.main_vendor_disable + 0x00000346 0x6 src/main.o + 0x00000346 main_vendor_disable + .text.main_setup_out_received + 0x0000034c 0x4 src/main.o + 0x0000034c main_setup_out_received + .text.main_setup_in_received + 0x00000350 0x4 src/main.o + 0x00000350 main_setup_in_received + .text.tiny_adc_ch0setup + 0x00000354 0x2c src/tiny_adc.o + 0x00000354 tiny_adc_ch0setup + .text.tiny_adc_ch1setup + 0x00000380 0x14 src/tiny_adc.o + 0x00000380 tiny_adc_ch1setup + .text.tiny_adc_pid_setup + 0x00000394 0x14 src/tiny_adc.o + 0x00000394 tiny_adc_pid_setup + .text.ReadCalibrationByte + 0x000003a8 0x12 src/tiny_adc.o + 0x000003a8 ReadCalibrationByte + .text.tiny_adc_setup + 0x000003ba 0x5e src/tiny_adc.o + 0x000003ba tiny_adc_setup + .text.tiny_dac_setup + 0x00000418 0x48 src/tiny_dac.o + 0x00000418 tiny_dac_setup + .text.tiny_dma_setup + 0x00000460 0x12 src/tiny_dma.o + 0x00000460 tiny_dma_setup + .text.tiny_dma_flush + 0x00000472 0x24 src/tiny_dma.o + 0x00000472 tiny_dma_flush + .text.tiny_dma_set_mode_0 + 0x00000496 0x90 src/tiny_dma.o + 0x00000496 tiny_dma_set_mode_0 + .text.tiny_dma_loop_mode_0 + 0x00000526 0x60 src/tiny_dma.o + 0x00000526 tiny_dma_loop_mode_0 + .text.tiny_dma_set_mode_1 + 0x00000586 0x9c src/tiny_dma.o + 0x00000586 tiny_dma_set_mode_1 + .text.tiny_dma_loop_mode_1 + 0x00000622 0xac src/tiny_dma.o + 0x00000622 tiny_dma_loop_mode_1 + .text.tiny_dma_set_mode_2 + 0x000006ce 0x94 src/tiny_dma.o + 0x000006ce tiny_dma_set_mode_2 + .text.tiny_dma_loop_mode_2 + 0x00000762 0xae src/tiny_dma.o + 0x00000762 tiny_dma_loop_mode_2 + .text.tiny_dma_set_mode_3 + 0x00000810 0xcc src/tiny_dma.o + 0x00000810 tiny_dma_set_mode_3 + .text.tiny_dma_loop_mode_3 + 0x000008dc 0x60 src/tiny_dma.o + 0x000008dc tiny_dma_loop_mode_3 + .text.tiny_dma_set_mode_4 + 0x0000093c 0xcc src/tiny_dma.o + 0x0000093c tiny_dma_set_mode_4 + .text.tiny_dma_loop_mode_4 + 0x00000a08 0xb2 src/tiny_dma.o + 0x00000a08 tiny_dma_loop_mode_4 + .text.tiny_dma_set_mode_5 + 0x00000aba 0x8e src/tiny_dma.o + 0x00000aba tiny_dma_set_mode_5 + .text.tiny_dma_set_mode_6 + 0x00000b48 0x92 src/tiny_dma.o + 0x00000b48 tiny_dma_set_mode_6 + .text.tiny_dma_loop_mode_6 + 0x00000bda 0x5c src/tiny_dma.o + 0x00000bda tiny_dma_loop_mode_6 + .text.tiny_dma_set_mode_7 + 0x00000c36 0x92 src/tiny_dma.o + 0x00000c36 tiny_dma_set_mode_7 + .text.tiny_dma_loop_mode_7 + 0x00000cc8 0x5c src/tiny_dma.o + 0x00000cc8 tiny_dma_loop_mode_7 + .text.tiny_timer_setup + 0x00000d24 0x76 src/tiny_timer.o + 0x00000d24 tiny_timer_setup + .text.__vector_83 + 0x00000d9a 0xbe src/tiny_timer.o + 0x00000d9a __vector_83 + .text.tiny_uart_setup + 0x00000e58 0x34 src/tiny_uart.o + 0x00000e58 tiny_uart_setup + .text.tiny_spi_setup + 0x00000e8c 0x1a src/tiny_uart.o + 0x00000e8c tiny_spi_setup + .text.osc_enable_internal + 0x00000ea6 0x12 src/ASF/common/services/clock/xmega/sysclk.o + .text.osc_enable_autocalibration.constprop.4 + 0x00000eb8 0x38 src/ASF/common/services/clock/xmega/sysclk.o + .text.sysclk_init + 0x00000ef0 0x9a src/ASF/common/services/clock/xmega/sysclk.o + 0x00000ef0 sysclk_init + .text.sysclk_enable_module + 0x00000f8a 0x18 src/ASF/common/services/clock/xmega/sysclk.o + 0x00000f8a sysclk_enable_module + .text.sysclk_enable_usb + 0x00000fa2 0x34 src/ASF/common/services/clock/xmega/sysclk.o + 0x00000fa2 sysclk_enable_usb + .text.udi_vendor_getsetting + 0x00000fd6 0x6 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + 0x00000fd6 udi_vendor_getsetting + .text.udi_vendor_disable + 0x00000fdc 0xc src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + 0x00000fdc udi_vendor_disable + .text.udi_vendor_enable + 0x00000fe8 0x14 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + 0x00000fe8 udi_vendor_enable + .text.udi_vendor_setup + 0x00000ffc 0x38 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + 0x00000ffc udi_vendor_setup + .text.udi_vendor_iso_in_run + 0x00001034 0x18 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + 0x00001034 udi_vendor_iso_in_run + .text.udc_valid_address + 0x0000104c 0x8 src/ASF/common/services/usb/udc/udc.o + .text.udc_update_iface_desc + 0x00001054 0x64 src/ASF/common/services/usb/udc/udc.o + .text.udc_next_desc_in_iface.constprop.3 + 0x000010b8 0x40 src/ASF/common/services/usb/udc/udc.o + .text.udc_iface_enable + 0x000010f8 0x66 src/ASF/common/services/usb/udc/udc.o + .text.udc_iface_disable + 0x0000115e 0x7c src/ASF/common/services/usb/udc/udc.o + .text.udc_get_interface_desc + 0x000011da 0xa src/ASF/common/services/usb/udc/udc.o + 0x000011da udc_get_interface_desc + .text.udc_start + 0x000011e4 0x2 src/ASF/common/services/usb/udc/udc.o + 0x000011e4 udc_start + .text.udc_reset + 0x000011e6 0x38 src/ASF/common/services/usb/udc/udc.o + 0x000011e6 udc_reset + .text.udc_sof_notify + 0x0000121e 0x4a src/ASF/common/services/usb/udc/udc.o + 0x0000121e udc_sof_notify + .text.udc_process_setup + 0x00001268 0x666 src/ASF/common/services/usb/udc/udc.o + 0x00001268 udc_process_setup + .text.ccp_write_io + 0x000018ce 0xc src/ASF/xmega/drivers/cpu/ccp.o + 0x000018ce ccp_write_io + .text.nvm_read_byte + 0x000018da 0x14 src/ASF/xmega/drivers/nvm/nvm_asm.o + 0x000018da nvm_read_byte + .text.sleepmgr_lock_mode + 0x000018ee 0x1e src/ASF/xmega/drivers/usb/usb_device.o + .text.sleepmgr_unlock_mode + 0x0000190c 0x1e src/ASF/xmega/drivers/usb/usb_device.o + .text.udd_sleep_mode + 0x0000192a 0x26 src/ASF/xmega/drivers/usb/usb_device.o + .text.udd_ep_get_ctrl + 0x00001950 0x2a src/ASF/xmega/drivers/usb/usb_device.o + .text.udd_ctrl_init + 0x0000197a 0x56 src/ASF/xmega/drivers/usb/usb_device.o + .text.udd_ctrl_stall_data + 0x000019d0 0x1c src/ASF/xmega/drivers/usb/usb_device.o + .text.udd_ctrl_send_zlp_in + 0x000019ec 0x1c src/ASF/xmega/drivers/usb/usb_device.o + .text.udd_ctrl_endofrequest + 0x00001a08 0x10 src/ASF/xmega/drivers/usb/usb_device.o + .text.udd_ep_get_job + 0x00001a18 0x32 src/ASF/xmega/drivers/usb/usb_device.o + .text.udd_ep_trans_complet + 0x00001a4a 0x1fe src/ASF/xmega/drivers/usb/usb_device.o + .text.udd_ctrl_in_sent + 0x00001c48 0xdc src/ASF/xmega/drivers/usb/usb_device.o + .text.udd_ctrl_interrupt_tc_setup + 0x00001d24 0xee src/ASF/xmega/drivers/usb/usb_device.o + .text.udd_attach + 0x00001e12 0x46 src/ASF/xmega/drivers/usb/usb_device.o + 0x00001e12 udd_attach + .text.udd_enable + 0x00001e58 0xf0 src/ASF/xmega/drivers/usb/usb_device.o + 0x00001e58 udd_enable + .text.udd_set_address + 0x00001f48 0x6 src/ASF/xmega/drivers/usb/usb_device.o + 0x00001f48 udd_set_address + .text.udd_getaddress + 0x00001f4e 0x6 src/ASF/xmega/drivers/usb/usb_device.o + 0x00001f4e udd_getaddress + .text.udd_set_setup_payload + 0x00001f54 0x12 src/ASF/xmega/drivers/usb/usb_device.o + 0x00001f54 udd_set_setup_payload + .text.udd_ep_alloc + 0x00001f66 0xa4 src/ASF/xmega/drivers/usb/usb_device.o + 0x00001f66 udd_ep_alloc + .text.udd_ep_is_halted + 0x0000200a 0xe src/ASF/xmega/drivers/usb/usb_device.o + 0x0000200a udd_ep_is_halted + .text.udd_ep_clear_halt + 0x00002018 0x32 src/ASF/xmega/drivers/usb/usb_device.o + 0x00002018 udd_ep_clear_halt + .text.udd_ep_run + 0x0000204a 0x104 src/ASF/xmega/drivers/usb/usb_device.o + 0x0000204a udd_ep_run + .text.udd_ep_abort + 0x0000214e 0x56 src/ASF/xmega/drivers/usb/usb_device.o + 0x0000214e udd_ep_abort + .text.udd_ep_free + 0x000021a4 0x12 src/ASF/xmega/drivers/usb/usb_device.o + 0x000021a4 udd_ep_free + .text.udd_ep_set_halt + 0x000021b6 0x20 src/ASF/xmega/drivers/usb/usb_device.o + 0x000021b6 udd_ep_set_halt + .text.__vector_125 + 0x000021d6 0x16a src/ASF/xmega/drivers/usb/usb_device.o + 0x000021d6 __vector_125 + .text.__vector_126 + 0x00002340 0x1a4 src/ASF/xmega/drivers/usb/usb_device.o + 0x00002340 __vector_126 + .text.libgcc.div + 0x000024e4 0x28 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_udivmodhi4.o) + 0x000024e4 __udivmodhi4 + .text.libgcc 0x0000250c 0xc c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_tablejump.o) + 0x0000250c __tablejump2__ + 0x00002510 __tablejump__ + .text.avr-libc + 0x00002518 0x12 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avrxmega2\libc.a(memcpy.o) + 0x00002518 memcpy + 0x0000252a . = ALIGN (0x2) + *(.fini9) + .fini9 0x0000252a 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_exit.o) + 0x0000252a _exit + 0x0000252a exit + *(.fini9) + *(.fini8) + *(.fini8) + *(.fini7) + *(.fini7) + *(.fini6) + *(.fini6) + *(.fini5) + *(.fini5) + *(.fini4) + *(.fini4) + *(.fini3) + *(.fini3) + *(.fini2) + *(.fini2) + *(.fini1) + *(.fini1) + *(.fini0) + .fini0 0x0000252a 0x4 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avrxmega2\libgcc.a(_exit.o) + *(.fini0) + 0x0000252e _etext = . + +.data 0x00802000 0xc0 load address 0x0000252e + 0x00802000 PROVIDE (__data_start, .) + *(.data) + *(.data*) + .data.global_mode + 0x00802000 0x1 src/main.o + 0x00802000 global_mode + .data.dummy 0x00802001 0x1 src/main.o + 0x00802001 dummy + .data.auxDacBufLen + 0x00802002 0x2 src/main.o + 0x00802002 auxDacBufLen + .data.dacBuf_len + 0x00802004 0x2 src/main.o + 0x00802004 dacBuf_len + .data.udi_api_vendor + 0x00802006 0xa src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + 0x00802006 udi_api_vendor + .data.udc_config + 0x00802010 0x6 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + 0x00802010 udc_config + .data.udc_config_lsfs + 0x00802016 0x4 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + 0x00802016 udc_config_lsfs + .data.udi_apis + 0x0080201a 0x2 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + 0x0080201a udi_apis + .data.udc_desc_fs + 0x0080201c 0x28 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + 0x0080201c udc_desc_fs + .data.udc_device_desc + 0x00802044 0x14 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + 0x00802044 udc_device_desc + .data.udc_string_desc + 0x00802058 0x32 src/ASF/common/services/usb/udc/udc.o + .data.udc_string_product_name + 0x0080208a 0x19 src/ASF/common/services/usb/udc/udc.o + .data.udc_string_manufacturer_name + 0x008020a3 0xa src/ASF/common/services/usb/udc/udc.o + *fill* 0x008020ad 0x1 + .data.udc_string_desc_languageid + 0x008020ae 0x4 src/ASF/common/services/usb/udc/udc.o + *(.rodata) + *(.rodata*) + .rodata.CSWTCH.44 + 0x008020b2 0xe src/ASF/xmega/drivers/usb/usb_device.o + *(.gnu.linkonce.d*) + 0x008020c0 . = ALIGN (0x2) + 0x008020c0 _edata = . + 0x008020c0 PROVIDE (__data_end, .) + +.bss 0x008020c0 0xb98 + 0x008020c0 PROVIDE (__bss_start, .) + *(.bss) + *(.bss*) + .bss.PSU_target + 0x008020c0 0x1 src/main.o + 0x008020c0 PSU_target + .bss.b2_state 0x008020c1 0x1 src/main.o + 0x008020c1 b2_state + .bss.b1_state 0x008020c2 0x1 src/main.o + 0x008020c2 b1_state + .bss.main_b_vendor_enable + 0x008020c3 0x1 src/main.o + 0x008020c3 main_b_vendor_enable + .bss.udi_vendor_alternate_setting + 0x008020c4 0x1 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .bss.udc_ep_status.5441 + 0x008020c5 0x2 src/ASF/common/services/usb/udc/udc.o + .bss.udc_ptr_iface + 0x008020c7 0x2 src/ASF/common/services/usb/udc/udc.o + .bss.udc_ptr_conf + 0x008020c9 0x2 src/ASF/common/services/usb/udc/udc.o + *fill* 0x008020cb 0x1 + .bss.udc_num_configuration + 0x008020cc 0x2 src/ASF/common/services/usb/udc/udc.o + .bss.udc_iface_setting + 0x008020ce 0x2 src/ASF/common/services/usb/udc/udc.o + .bss.udc_device_status + 0x008020d0 0x2 src/ASF/common/services/usb/udc/udc.o + .bss.b_shortpacket.5230 + 0x008020d2 0x1 src/ASF/xmega/drivers/usb/usb_device.o + .bss.udd_ep_out_cache_buffer + 0x008020d3 0xc0 src/ASF/xmega/drivers/usb/usb_device.o + .bss.udd_ep_job + 0x00802193 0x36 src/ASF/xmega/drivers/usb/usb_device.o + .bss.udd_ctrl_buffer + 0x008021c9 0x40 src/ASF/xmega/drivers/usb/usb_device.o + .bss.udd_ctrl_payload_nb_trans + 0x00802209 0x2 src/ASF/xmega/drivers/usb/usb_device.o + .bss.udd_ctrl_prev_payload_nb_trans + 0x0080220b 0x2 src/ASF/xmega/drivers/usb/usb_device.o + .bss.udd_ep_control_state + 0x0080220d 0x1 src/ASF/xmega/drivers/usb/usb_device.o + *fill* 0x0080220e 0x2 + .bss.udd_sram 0x00802210 0x54 src/ASF/xmega/drivers/usb/usb_device.o + .bss.udd_b_idle + 0x00802264 0x1 src/ASF/xmega/drivers/usb/usb_device.o + *(COMMON) + *fill* 0x00802265 0x1 + COMMON 0x00802266 0x9ec src/main.o + 0x00802266 dacBuf_CH1 + 0x00802466 udd_g_ctrlreq + 0x00802476 dacBuf_CH2 + 0x00802676 isoBuf + COMMON 0x00802c52 0x6 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + 0x00802c52 sleepmgr_locks + 0x00802c58 PROVIDE (__bss_end, .) + 0x0000252e __data_load_start = LOADADDR (.data) + 0x000025ee __data_load_end = (__data_load_start + SIZEOF (.data)) + +.noinit 0x00802c58 0x0 + 0x00802c58 PROVIDE (__noinit_start, .) + *(.noinit*) + 0x00802c58 PROVIDE (__noinit_end, .) + 0x00802c58 _end = . + 0x00802c58 PROVIDE (__heap_start, .) + +.eeprom 0x00810000 0x0 + *(.eeprom*) + 0x00810000 __eeprom_end = . + +.fuse + *(.fuse) + *(.lfuse) + *(.hfuse) + *(.efuse) + +.lock + *(.lock*) + +.signature + *(.signature*) + +.user_signatures + *(.user_signatures*) + +.stab + *(.stab) + +.stabstr + *(.stabstr) + +.stab.excl + *(.stab.excl) + +.stab.exclstr + *(.stab.exclstr) + +.stab.index + *(.stab.index) + +.stab.indexstr + *(.stab.indexstr) + +.comment 0x00000000 0x30 + *(.comment) + .comment 0x00000000 0x30 src/tiny_dig.o + 0x31 (size before relaxing) + .comment 0x00000000 0x31 src/ASF/common/boards/user_board/init.o + .comment 0x00000000 0x31 src/main.o + .comment 0x00000000 0x31 src/tiny_adc.o + .comment 0x00000000 0x31 src/tiny_dac.o + .comment 0x00000000 0x31 src/tiny_dma.o + .comment 0x00000000 0x31 src/tiny_timer.o + .comment 0x00000000 0x31 src/tiny_uart.o + .comment 0x00000000 0x31 src/ASF/common/services/clock/xmega/sysclk.o + .comment 0x00000000 0x31 src/ASF/common/services/sleepmgr/xmega/sleepmgr.o + .comment 0x00000000 0x31 src/ASF/common/services/usb/class/vendor/device/udi_vendor.o + .comment 0x00000000 0x31 src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.o + .comment 0x00000000 0x31 src/ASF/common/services/usb/udc/udc.o + .comment 0x00000000 0x31 src/ASF/xmega/drivers/usb/usb_device.o + +.note.gnu.build-id + *(.note.gnu.build-id) + +.debug + *(.debug) + +.line + *(.line) + +.debug_srcinfo + *(.debug_srcinfo) + +.debug_sfnames + *(.debug_sfnames) + +.debug_aranges 0x00000000 0x48 + *(.debug_aranges) + .debug_aranges + 0x00000000 0x20 src/ASF/xmega/drivers/cpu/ccp.o + .debug_aranges + 0x00000020 0x28 src/ASF/xmega/drivers/nvm/nvm_asm.o + +.debug_pubnames + *(.debug_pubnames) + +.debug_info 0x00000000 0x11a + *(.debug_info .gnu.linkonce.wi.*) + .debug_info 0x00000000 0x8d src/ASF/xmega/drivers/cpu/ccp.o + .debug_info 0x0000008d 0x8d src/ASF/xmega/drivers/nvm/nvm_asm.o + +.debug_abbrev 0x00000000 0x26 + *(.debug_abbrev) + .debug_abbrev 0x00000000 0x14 src/ASF/xmega/drivers/cpu/ccp.o + .debug_abbrev 0x00000014 0x12 src/ASF/xmega/drivers/nvm/nvm_asm.o + +.debug_line 0x00000000 0x18d + *(.debug_line .debug_line.* .debug_line_end) + .debug_line 0x00000000 0x6e src/ASF/xmega/drivers/cpu/ccp.o + .debug_line 0x0000006e 0x11f src/ASF/xmega/drivers/nvm/nvm_asm.o + +.debug_frame + *(.debug_frame) + +.debug_str + *(.debug_str) + +.debug_loc + *(.debug_loc) + +.debug_macinfo + *(.debug_macinfo) + +.debug_weaknames + *(.debug_weaknames) + +.debug_funcnames + *(.debug_funcnames) + +.debug_typenames + *(.debug_typenames) + +.debug_varnames + *(.debug_varnames) + +.debug_pubtypes + *(.debug_pubtypes) + +.debug_ranges 0x00000000 0x20 + *(.debug_ranges) + .debug_ranges 0x00000000 0x20 src/ASF/xmega/drivers/nvm/nvm_asm.o + +.debug_macro + *(.debug_macro) +OUTPUT(USB_BULK_TEST.elf elf32-avr) +LOAD linker stubs diff --git a/AVR Code/USB_BULK_TEST/Release/USB_BULK_TEST.srec b/AVR Code/USB_BULK_TEST/Release/USB_BULK_TEST.srec new file mode 100644 index 00000000..42ab1b15 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/Release/USB_BULK_TEST.srec @@ -0,0 +1,609 @@ +S01500005553425F42554C4B5F544553542E73726563F9 +S11300001DC1000037C1000035C1000033C100002C +S113001031C100002FC100002DC100002BC1000020 +S113002029C1000027C1000025C1000023C1000030 +S113003021C100001FC100001DC100001BC1000040 +S113004019C1000017C1000015C1000013C1000050 +S113005011C100000FC100000DC100000BC1000060 +S113006009C1000007C1000005C1000003C1000070 +S113007001C10000FFC00000FDC00000FBC0000083 +S1130080F9C00000F7C00000F5C00000F3C0000094 +S1130090F1C00000EFC00000EDC00000EBC00000A4 +S11300A0E9C00000E7C00000E5C00000E3C00000B4 +S11300B0E1C00000DFC00000DDC00000DBC00000C4 +S11300C0D9C00000D7C00000D5C00000D3C00000D4 +S11300D0D1C00000CFC00000CDC00000CBC00000E4 +S11300E0C9C00000C7C00000C5C00000C3C00000F4 +S11300F0C1C00000BFC00000BDC00000BBC0000004 +S1130100B9C00000B7C00000B5C00000B3C0000013 +S1130110B1C00000AFC00000ADC00000ABC0000023 +S1130120A9C00000A7C00000A5C00000A3C0000033 +S1130130A1C000009FC000009DC000009BC0000043 +S113014099C0000097C0000095C0000026C60000BA +S113015091C000008FC000008DC000008BC0000063 +S113016089C0000087C0000085C0000083C0000073 +S113017081C000007FC000007DC000007BC0000083 +S113018079C0000077C0000075C0000073C0000093 +S113019071C000006FC000006DC000006BC00000A3 +S11301A069C0000067C0000065C0000063C00000B3 +S11301B061C000005FC000005DC000005BC00000C3 +S11301C059C0000057C0000055C0000053C00000D3 +S11301D051C000004FC000004DC000004BC00000E3 +S11301E049C0000047C0000045C0000043C00000F3 +S11301F041C000000C94EB100C94A0118201840106 +S1130200860188018A018F018C018E0168096A09BF +S11302108009B609BF09C409130A180AD709E009F5 +S1130220EE09F009F209FC09060A110AD009D909F4 +S1130230E209F009F209F409FE09080A11241FBEB3 +S1130240CFEFCDBFDFE2DEBF10E2A0E0B0E2EEE22E +S1130250F5E202C005900D92A03CB107D9F72CE25B +S1130260A0ECB0E201C01D92A835B207E1F71BD0A3 +S11302700C949512C5CEE0E8F6E08FE0808385E02B +S11302808483089508958091C220811103C08EEE65 +S113029092E002C080E090E043E451E06EEE72E050 +S11302A08A58994DC7C687E08093A200789420D6D7 +S11302B0E9DF98D7B1D0D4D060E080E07ED06AD0B6 +S11302C08CE05ED02FD5C8D5E1D5D5DF0000000085 +S11302D0000000000000000000000000000000001A +S11302E00000000000000000F1CF089508958091FF +S11302F0002090E08830910590F4FC01E250FF4F1B +S11303000C94861210D10BC08CD109C02AD207C01C +S1130310E5D205C079D303C060D401C0D5D490918F +S1130320C22081E0911180E08093C220089581E091 +S11303308093C32043E451E06EEE72E086E796E2D8 +S113034079D681E008951092C320089581E008953C +S113035081E0089510922002982F9C7193689093E5 +S1130360200287FD03C090E080E002C090E182E0BB +S1130370892B809321021092220210922602089562 +S1130380E0E0F2E010AA836880AB80E181AB12AABE +S113039016AA0895E0E0F2E010A683E880A78FE2B1 +S11303A081A712A616A6089592E09093CA01E82F99 +S11303B0F0E084911092CA010895909171009D7F9C +S11303C09093710010920002623011F49EE101C01A +S11303D09CE19093010290E490930202882311F02F +S11303E080EC01C080E480930302613011F482E068 +S11303F001C083E08093040280E2D6DF80930C0284 +S113040081E2D2DF80930D02109218021092190239 +S113041081E080930002BECFCF93DF93E0E7F0E06A +S113042082818B7F8283C0E2D3E08DE0888380E485 +S1130430898389E08A8383E3B7DF888782E3B4DF33 +S1130440898787E3B1DF8A8786E3AEDF8B87E0E2C3 +S1130450F6E08081836080831482DF91CF910895D8 +S1130460E0E7F0E080818E7F808380E88093000164 +S11304700895E0E0F1E0108A80E4808B10A280A36C +S113048010AA80ABE0E4F1E0108280831092C220D5 +S11304901092C120089510920020EBDFE0E0F1E01B +S11304A016AA44E240AB11AA39E532AB82E083AB31 +S11304B0809102209091032084AB95AB86E794E26F +S11304C080AF91AF12AE8BE384AF23E020933D0164 +S11304D010923E0180A9806880AB10924601E0E44E +S11304E0F1E0408310924101309342012093430193 +S11304F080910420909105208093440190934501BC +S113050086E692E2809348019093490110924A0151 +S113051089E380934C0120934D0110924E01808118 +S1130520806880830895E0E0F1E0108A80E4808BA5 +S113053084E0808B118A81E9828B80E1838B87E759 +S113054091E0848B958B84E2808F82E0818F128E80 +S11305504091C2202EEE32E0429FC001439F900D95 +S113056011248A58994D848F4091C220429FC00122 +S1130570439F900D11248A58994D958F168E80892A +S11305808068808B089581E08093002072DFE0E032 +S1130590F1E010AA80E480AB84E080AB11AA12AA37 +S11305A08BE483AB14AA15AA16AA81E090E280AF6B +S11305B091AF12AE80EA84AF88E080933D0110923F +S11305C03E0180A9806A80AB85E58093A0081092E3 +S11305D04601E0E4F1E084E280831092410189E580 +S11305E08093420182E080934301809102209091A4 +S11305F00320809344019093450186E692E2809320 +S113060048019093490110924A018BE380934C0175 +S113061083E080934D0110924E0180818068808335 +S11306200895E0E0F1E0108AA0E4A08B74E0708B00 +S1130630118A61E9628B80E1838B47E751E0448B47 +S1130640558B84E2808F82E0818F128EB091C2201C +S11306508EEE92E0B89F9001B99F300D11242A5874 +S1130660394D248FB091C220B89F9001B99F300DAD +S113067011242A58394D358F168E20892068208BF5 +S113068010A2A0A370A311A262A32BE423A344A3EA +S113069055A320EA20A728E021A712A64091C22052 +S11306A0489F9001499F300D11242351384D24A7B0 +S11306B04091C220489F9001499F300D112423513D +S11306C0384D35A716A680A1806880A30895CF93DE +S11306D0C2E0C0930020CDDEE0E0F1E016AA44E2DF +S11306E040AB11AA39E532AB23E023AB809104205F +S11306F09091052084AB95AB86E692E280AF91AFF2 +S113070012AE89E384AF20933D0110923E0180A98B +S1130710806880AB10924601E0E4F1E040831092DF +S1130720410130934201C093430180910220909192 +S11307300320809344019093450186E794E28093DB +S113074048019093490110924A018BE380934C0134 +S113075020934D0110924E01808180688083CF9157 +S11307600895CF93E0E0F1E0108AB0E4B08BA4E008 +S1130770A08B118A71E9728B80E1838B47E751E08A +S1130780448B558B84E2808F62E0618F128EC0911E +S1130790C2208EEE92E0C89F9001C99F300D1124B3 +S11307A02A58394D248FC091C220C89F9001C99FF7 +S11307B0300D11242A58394D358F168E2089206822 +S11307C0208B10A2B0A3A0A311A272A322E123A3A1 +S11307D044A355A324E320A761A712A64091C220F5 +S11307E0489F9001499F300D11242351384D24A76F +S11307F04091C220489F9001499F300D11242351FC +S1130800384D35A716A680A1806880A3CF9108959E +S1130810CF93C3E0C09300202CDEE0E0F1E010A20F +S113082080E480A384E080A311A212A28BE483A3BA +S113083014A215A216A281E090E280A791A712A6A5 +S113084080EA84A788E085A716A680A1806A80A391 +S113085085E58093A00816AA34E230AB11AA29E5F5 +S113086022AB82E083AB809102209091032084AB81 +S113087095AB86E794E280AF91AF12AE8BE384AF81 +S1130880C0933D0110923E0180A9806880AB109214 +S11308904601E0E4F1E030831092410120934201EB +S11308A0C0934301809104209091052080934401DA +S11308B09093450186E692E2809348019093490122 +S11308C010924A0189E380934C01C0934D01109228 +S11308D04E01808180688083CF910895E0E0F1E04B +S11308E0108A80E4808B84E0808B118A81E9828B7A +S11308F08BE4838B87E791E0848B958B80EA808FF0 +S113090088E0818F128E4091C2202EEE32E0429F09 +S1130910C001439F900D11248A58994D848F4091B2 +S1130920C220429FC001439F900D11248A58994DC3 +S1130930958F168E80898068808B0895CF93C4E04C +S1130940C093002096DDE0E0F1E010A280E480A3F3 +S1130950C0A311A212A28BE483A314A215A216A20F +S113096081E090E280A791A712A680EA84A788E09C +S113097085A716A680A1806A80A385E58093A00838 +S113098016AA44E240AB11AA39E532AB23E023AB0B +S1130990809104209091052084AB95AB86E692E289 +S11309A080AF91AF12AE89E384AF20933D011092E2 +S11309B03E0180A9806880AB10924601E0E4F1E03A +S11309C04083109241013093420182E080934301BD +S11309D080910220909103208093440190934501DB +S11309E086E794E2809348019093490110924A016A +S11309F08BE380934C0120934D0110924E01808132 +S1130A0080688083CF910895CF93E0E0F1E0108A6D +S1130A10B0E4B08BA4E0A08B118A71E9728B8BE4F3 +S1130A20838B47E751E0448B558B80EA808F68E0E5 +S1130A30618F128EC091C2208EEE92E0C89F900109 +S1130A40C99F300D11242A58394D248FC091C220DA +S1130A50C89F9001C99F300D11242A58394D358FF4 +S1130A60168E20892068208B10AAB0ABA0AB11AAE7 +S1130A7072AB2AE423AB44AB55AB23EC20AF61AF9C +S1130A8012AE4091C220489F9001499F300D11241D +S1130A902351384D24AF4091C220489F9001499F73 +S1130AA0300D11242351384D30933D0110923E01F5 +S1130AB080A9806880ABCF91089585E08093002061 +S1130AC0D8DCE0E0F1E016AA54E250AB11AA49E503 +S1130AD042AB23E023AB809104209091052084ABAA +S1130AE095AB86E692E280AF91AF12AE39E334AFB4 +S1130AF020933D0110923E0180A9806880AB109242 +S1130B004601E0E4F1E05083109241014093420138 +S1130B102093430180910420909105208093440107 +S1130B209093450186E796E28093480190934901AA +S1130B3010924A0130934C0120934D0110924E01C2 +S1130B40808180688083089586E08093002091DC12 +S1130B50E0E0F1E016AA44E240AB11AA39E532AB79 +S1130B6023E023AB809104209091052084AB95ABC6 +S1130B7086E692E280AF91AF12AE89E384AF209310 +S1130B803D0110923E0180A9806880AB109246011D +S1130B90E0E4F1E04083109241013093420182E0AD +S1130BA0809343018091022090910320809344011B +S1130BB09093450186E794E280934801909349011C +S1130BC010924A018BE380934C0120934D011092C3 +S1130BD04E018081806880830895E0E0F1E0108A0E +S1130BE080E4808B84E0808B118A81E9828B80E1B0 +S1130BF0838B2EEE32E0248B358B84E2808F82E06F +S1130C00818F128E4091C220429FC001439F900D5C +S1130C1011248A58994D848F4091C220429FC0016B +S1130C20439F900D11248A58994D958F168E808973 +S1130C308068808B089587E0809300201ADCE0E0D0 +S1130C40F1E016AA44E240AB11AA39E532AB23E045 +S1130C5023AB809104209091052084AB95AB86E66C +S1130C6092E280AF91AF12AE89E384AF20933D014D +S1130C7010923E0180A9806880AB10924601E0E4A6 +S1130C80F1E04083109241013093420182E080936D +S1130C90430180910220909103208093440190931A +S1130CA0450186E794E280934801909349011092AC +S1130CB04A018BE380934C0120934D0110924E0125 +S1130CC08081806880830895E0E0F1E0108A80E408 +S1130CD0808B85E0808B118A81E9828B80E1838B14 +S1130CE02EEE32E0248B358B84E2808F82E0818F7C +S1130CF0128E4091C220429FC001439F900D112447 +S1130D008A58994D848F4091C220429FC001439FCD +S1130D10900D11248A58994D958F168E808980687C +S1130D20808B0895E0E7F0E083818C7F8383848166 +S1130D308C7F848380818D7F8083E0E8F1E080EC88 +S1130D408283128688EC81831186E0E0F8E024E057 +S1130D50208333E03183148285ED91E086A397A349 +S1130D601682E0E4F8E020833183148286A397A3FB +S1130D701682E0E6F6E0808180618083E0E4F9E0B9 +S1130D8083E18183148281E0868380E090E186A3FD +S1130D9097A310A611A6208308951F920F920FB651 +S1130DA00F9211242F933F934F935F938F939F93AD +S1130DB0CF93DF931F92CDB7DEB7809100208730A9 +S1130DC031F480912C02898380912D0202C080919C +S1130DD02C024091C020481B8091680990916909B8 +S1130DE042308CF0843F9F4070F420916809309128 +S1130DF0690949301CF08CE090E002C081E090E089 +S1130E00820F931F17C080916809909169094F3F21 +S1130E10ACF40D9798F02091680930916909483F26 +S1130E201CF48CE090E002C081E090E0A901481B32 +S1130E30590BCA0180937809909379090F90DF9137 +S1130E40CF919F918F915F914F913F912F910F90EF +S1130E500FBE0F901F901895E0E7F0E083818F7E1E +S1130E608383E0E4F6E080818A6A80838FEF848361 +S1130E7088E5828B80E28687E0EAF8E084EC85836B +S1130E8083E08683178288E184830895E0E7F0E0B5 +S1130E908381877F838380E48093C00888E5E0E4CE +S1130EA0F6E0878B08959FB7F894E0E5F0E02081A1 +S1130EB0822B80839FBF08959FB7F894A0E5B0E08C +S1130EC016968C911697897F16968C931697E0E662 +S1130ED0F0E080E885838BEB868316968C911697D9 +S1130EE0846016968C938081816080839FBF08956F +S1130EF0CF93DF9300D000D0CDB7DEB78FEF8093D0 +S1130F0070008093710080937200809373008093CB +S1130F107400809375008093760064E081E490E02F +S1130F20D6D46CE170E082E0D8D48C836DE170E0BB +S1130F3082E0D3D48B838B819C81019621F480E45D +S1130F4093E28B839C838B819C8189839A83809396 +S1130F5062008A818093630082E0A5DF8091510062 +S1130F6081FFFCCFA9DF61E080E490E0B0D49FB7BB +S1130F70F894809150008E7F809350009FBF2496F8 +S1130F80CDBFDEBFDF91CF9108959FB7F894E82FCE +S1130F90F0E0E059FF4F60958081862380839FBFF6 +S1130FA00895CF93863011F4C8E101C0C0E0809168 +S1130FB0510081FD07C082E076DF8091510081FFFE +S1130FC0FCCF7ADF6C2F636084E490E080D460E42B +S1130FD080E0CF91DACF8091C42008958091C4201D +S1130FE0813009F4B0C90895F8D0FC01838180935D +S1130FF0C420811101C09BC981E0089590916624A9 +S1131000892F807697FF07C0803491F480916724FC +S113101081110EC09DC9803459F4809167248111D7 +S113102007C080916C2490916D24892B09F08EC99E +S113103080E008950F931F939B018A01AC0160E047 +S113104083E80E9425101F910F91089580916824D0 +S11310508F777AC79091CC20992361F1E091C920D0 +S1131060F091CA200190F081E02D9481891710F548 +S1131070E093C720F093C820228133812E0F3F1FB5 +S1131080E217F30798F49181943061F49281891303 +S113109009C09381691306C0E093C720F093C82068 +S11310A081E008959081E90FF11DEACFE093C72014 +S11310B0F093C82080E00895E091C920F091CA20FF +S11310C00190F081E02D228133812E0F3F1FFC011E +S11310D04081E40FF11DE217F30748F48181843065 +S11310E031F0853039F08081E80FF11DF4CF80E0D4 +S11310F090E00895CF0108951F93CF93DF93182FA5 +S1131100A9DF882339F1C091C720D091C820CE012E +S1131110D3DFEC01009741F04C815D816B818A81C2 +S113112022D78111F4CF16C0E091C920F091CA20D2 +S113113092818381E92FF82FE10FF11DE10FF11D59 +S11311400190F081E02D0190F081E02DDF91CF91AD +S11311501F91099480E0DF91CF911F910895FF9230 +S11311600F931F93CF93DF93C82F60E073DFF82EA4 +S1131170882361F1E091C920F091CA209281838192 +S1131180E92FF82FEC0FF11DEC0FF11D00811181F7 +S1131190D8011696ED91FC9117970995682F8C2F1D +S11311A059DFF82E882391F0C091C720D091C82030 +S11311B0CE0182DFEC01009719F08A81F3D7F8CFD2 +S11311C0D8011296ED91FC91139709958F2DDF911B +S11311D0CF911F910F91FF9008958091C720909116 +S11311E0C820089539C6CF938091CC20811108C0BE +S11311F01092CC201092D0201092D120CF9108953B +S1131200C0E0E091C920F091CA200190F081E02D66 +S11312108481C81768F78C2FA2DFCF5FF2CFCF93FA +S11312208091CC208823F1F0C0E0E091C920F091B6 +S1131230CA20A081B18114968C91C81798F4928128 +S11312408381E92FF82FEC0FF11DEC0FF11D0190B4 +S1131250F081E02D0084F185E02D309709F00995A7 +S1131260CF5FE3CFCF910895CF92DF92FF920F9398 +S11312701F93CF93DF931F92CDB7DEB710927024E4 +S11312801092712410927224109273241092742478 +S1131290109275242091662427FF07C080916C2446 +S11312A090916D24892B09F408C3822F80768034B1 +S11312B009F0C5C08091672490E0FC01E05AF1096F +S11312C0E830F10508F088C2EA5FFE4F0C948612FC +S11312D00000F1C210920008809168249091692462 +S11312E0809336089093370880916A248F70809396 +S11312F0000860916C2470916D2486E692E219C016 +S11313001092400860916C2470916D2460930220C7 +S113131070930320809168249091692480937608C7 +S11313209093770880916A248F708093400886E7B1 +S113133094E210D6209104203091052080916C24F1 +S113134090916D242817390709F4B5C280930420BD +S1131350909305208091002090E08830910508F05A +S1131360AAC2FC01E25FFE4F0C9486121092680937 +S113137010926909809168248093C0209CC2809156 +S113138068248093240697C2E0916824F09169242C +S1131390E830F10508F020C2EA5EFE4F0C94861294 +S11313A060E080E00AD880916A240E94AA0173D880 +S11313B082C260E080E001D880916A240E94AA0180 +S11313C0E2D879C261E081E00E94DD0180916A2463 +S11313D00E94AA0180916B240E94C00178D96BC23B +S11313E017DA69C2ABDA67C260E080E00E94DD010F +S11313F080916A240E94AA0160DB5DC261E080E002 +S11314000E94DD0180916A240E94AA019DDB53C2DF +S113141062E080E00E94DD0180916A2480680E947D +S1131420AA0109DC48C2809168248093840643C2DF +S1131430E9E7F0E091E088EDF89484BF90838111AE +S1131440CBC127FFFBC080916C2490916D24009741 +S113145009F4C2C12F7109F09BC020916724263082 +S113146069F0283009F48CC02111B6C1029709F043 +S1131470B3C162E070E080ED90E2DEC020916824A8 +S113148030916924832F99278230910591F05CF47F +S1131490019709F0A1C18091102090911120DC01E5 +S11314A06C9170E05BC08330910581F10F9709F175 +S11314B093C1E0911020F09111208189281708F040 +S11314C08BC13327220F331F220F331FE0911220C9 +S11314D0F0911320E20FF31F80819181FC0162815E +S11314E0738138D5E0916E24F0916F2482E081837A +S11314F036C08091142090911520009709F46CC196 +S1131500DC0112966D917C91139728C0332721300A +S1131510310529F040F02230310551F05DC169E018 +S113152083EA90E208C064E070E08EEA90E216C0BC +S113153068E18AE890E2282FAAE5B0E2FC018191F3 +S113154090E08D939D938E2F821B8617C0F3660FB8 +S11315506E5F6093582070E088E590E2FBD4809140 +S11315606C2490916D242091702430917124821701 +S1131570930708F0A0C180937024909371249BC1B9 +S1131580019709F029C161E070E08CEC90E254C04D +S11315902130E1F5209167242A3009F01DC101971B +S11315A009F01AC18091CC20882309F415C1C09098 +S11315B06A24D0906B240091C9201091CA20D801CC +S11315C0ED91FC918481C81608F006C160E08C2D71 +S11315D041DDF82E882309F4FFC0DD24CC0CDD1C8A +S11315E0D8011296ED91FC911397EC0DFD1D01901D +S11315F0F081E02D0680F781E02D09958093CE20BF +S113160061E070E08EEC90E2A5D4E4C0223009F0F1 +S1131610E3C0209167242111DFC0029709F0DCC0E8 +S113162080916A24F2D490E08093C5209093C620E0 +S113163062E070E085EC90E28DD43DC12F7109F039 +S11316407DC080916724833009F4C6C018F48130CA +S1131650A1F0C2C0853019F0893039F1BDC0809144 +S11316606C2490916D24892B09F0B6C086E298E031 +S113167080937224909373241EC180916C24909162 +S11316806D24892B09F0A8C0809168249091692465 +S1131690019709F0A1C08091D0209091D1208D7F35 +S11316A08093D0209093D12006C180916C24909196 +S11316B06D24892B09F090C04AD4882309F48CC086 +S11316C080916824909169249927E0911020F091E9 +S11316D01120218930E02817390708F47DC083DD03 +S11316E020916824309169242093CC20222309F48A +S11316F0E2C033272150304C220F331F220F331FF7 +S11317008091122090911320820F931F8093C920FF +S11317109093CA2010E0E091C920F091CA20019072 +S1131720F081E02D8481181708F0C5C060E0812F96 +S1131730E3DC882309F450C01F5FEDCF2130F1F4BE +S1131740809167248B3009F047C080916C2490917C +S11317506D24892B09F040C08091CC20882309F4A2 +S11317603BC010916A2460916824812F6983F7DC5F +S11317706981882389F1812FBFDC2BC0223061F578 +S113178080916724813019F0833089F025C08091DD +S11317906C2490916D24892BF9F4809168249091A4 +S11317A06924892BC9F480916A2436D412C08091AB +S11317B06C2490916D24892B79F480916824909104 +S11317C06924892B49F480916A24C1D480916A24C4 +S11317D0F2D4F82EF1106FC0809166248F7181309D +S11317E0B9F58091CC20882399F1C0906A24D090D7 +S11317F06B240091C9201091CA20D801ED91FC916D +S11318008481C81628F560E08C2D24DC882301F13E +S1131810C6019927880F991FD8011296ED91FC9162 +S11318201397E80FF91F00811181D8011696ED91E5 +S1131830FC9117970995682F8C2D0CDC882341F0B7 +S1131840D8011496ED91FC9115970995811133C037 +S1131850809166248F71823081F58091CC20882319 +S113186061F110E0E091C920F091CA20A081B1811A +S113187014968C91181708F592818381E92FF82F1B +S1131880E10FF11DE10FF11DC080D180D601169644 +S1131890ED91FC9117970995682F812FDBDB882345 +S11318A061F0D6011496ED91FC911597099581117B +S11318B002C01F5FD7CF81E001C080E00F90DF91AD +S11318C0CF911F910F91FF90DF90CF9008951BBE91 +S11318D0FC0128ED24BF608308954091CA01E62FDE +S11318E0F72F8093CA0184914093CA010895E82F89 +S11318F0F0E0EE5AF34D80818F3F09F4FFCF9FB79C +S1131900F89480818F5F80839FBF0895E82FF0E073 +S1131910EE5AF34D8081811101C0FFCF9FB7F89437 +S11319208081815080839FBF0895CF93C82F809179 +S11319306422C11105C0882339F081E0E7DF04C0C7 +S1131940811102C081E0D3DFC0936422CF91089556 +S1131950282F2F70992787FD90958827990F881F26 +S11319609927820F911D820F911D43E0880F991FC3 +S11319704A95E1F7805E9D4D08950F93E8ECF4E0FD +S113198080818F7D808380818F7D8083E8E2F2E295 +S113199002E0059310922A2210922B2200E2069371 +S11319A000E40693E0E2F2E200E2069300E4069328 +S11319B0109272241092732410927424109275243D +S11319C0109270241092712410920D220F91089598 +S11319D00F9385E080930D22E9E2F2E204E005939F +S11319E0E1E2F2E204E005930F9108950F9383E09E +S11319F080930D2210922A2210922B22E8E2F2E226 +S1131A0002E006930F910895E0917224F0917324FB +S1131A10309709F009940895982F9F70282F332741 +S1131A2027FD30952227330F221F3327290F311D1D +S1131A30290F311D2250310949E0429FC001439FC3 +S1131A40900D11248D569E4D08958F929F92BF92B2 +S1131A50CF92DF92EF92FF920F931F93CF93DF9376 +S1131A60B82EDADFEC018B2D73DF7C01DC011196DB +S1131A70EC91E770E150E73040F4F0E0EE0FFF1F27 +S1131A80EE54FF4D0081118102C008E010E0ED81A9 +S1131A90FE818B819C814881D701B7FE4FC0169689 +S1131AA02D913C9117972E0F3F1F2D833E832817AE +S1131AB0390799F1FC01E21BF30B9F012115F4E0B6 +S1131AC03F0738F02FEF33E0C901B8010BD5281BCD +S1131AD0390B41FF09C0C901B80104D541E0892B84 +S1131AE009F040E0942F01C090E0888190FB81F9D7 +S1131AF08883D70116961D921C92179712962D93E0 +S1131B003C93139789819A812D813E81820F931F83 +S1131B1014968D939C9315970DC041FF70C04D7F13 +S1131B204883D70116961D921C92179712961D9200 +S1131B301C921397F70102E006937AC01296CD9097 +S1131B40DC90139742FF0FC089809A80B801CAD4F1 +S1131B50B0E4BB9EB00111246D567F4DAC01C401AD +S1131B608E0F9F1FD9D46D817E816C0D7D1D6D8379 +S1131B707E832B813C812617370710F42D833E8307 +S1131B80F70186819781C816D906C9F58D819E8192 +S1131B9082179307A1F1281B390B2115F4E03F07A5 +S1131BA010F02FEF33E0C901B8019CD4281B390B86 +S1131BB0D70112961D921C9213972017310778F4BF +S1131BC0888184608883B0E4BB9EC00111248D5653 +S1131BD09F4DF7018483958306831783ABCF898157 +S1131BE09A814D815E81840F951FD70114968D9340 +S1131BF09C93159716962D933C9317979BCF8881AA +S1131C0080FF16C08E7F8883EF81F885309781F03E +S1131C106D817E814B2D80E0DF91CF911F910F91DB +S1131C20FF90EF90DF90CF90BF909F908F9009949A +S1131C30DF91CF911F910F91FF90EF90DF90CF90A4 +S1131C40BF909F908F9008950F93CF93DF938091CF +S1131C500D22833029F4D8DEDF91CF910F918DCE00 +S1131C602091092230910A22C0917024D0917124CC +S1131C70C21BD30B61F580910B2290910C22820F31 +S1131C80931F80930B2290930C2220916C2430910B +S1131C906D242817390721F08091D220882331F050 +S1131CA084E080930D22E0E2F2E236C0E0917424F5 +S1131CB0F0917524309799F00995882381F010925A +S1131CC0092210920A22C0917024D0917124C03448 +S1131CD0D10528F01092D220C0E4D0E003C081E006 +S1131CE08093D220C0932A22D0932B2220910922C0 +S1131CF030910A2280916E2490916F24820F931F59 +S1131D0080932C2290932D22C20FD31FC0930922BB +S1131D10D0930A22E8E2F2E202E00693DF91CF9147 +S1131D200F9108950F93CF93DF931F92CDB7DEB732 +S1131D308091CC0480FF65C081E08093CC04E0E214 +S1131D40F2E200E80693E8E2F2E200E80693809308 +S1131D50CA04E0E2F2E200E1069380910D228823B6 +S1131D6029F08350823008F44FDE07DE809122226E +S1131D7090912322089709F046C088E0E9ECF1E24B +S1131D80A6E6B4E201900D928A95E1F78091C80429 +S1131D9080628093C8048091C80480628093C804E0 +S1131DA063DA811102C014DE2EC09091662497FF7D +S1131DB00EC010920B2210920C2210920922109243 +S1131DC00A2292E090930D2289833EDF08C020917D +S1131DD06C2430916D24232B21F4898307DE8981BF +S1131DE013C010920B2210920C221092092210920E +S1131DF00A2291E090930D22E0E2F2E202E00693DF +S1131E0003C080E001C081E00F90DF91CF910F917A +S1131E100895CF93CFB7F89481E087DDEAECF4E03E +S1131E2080E4808380E28083E1ECF4E0808181605F +S1131E308083A9ECB4E08C9182608C93E8ECF4E0AC +S1131E408081806480838C9181608C9380818068A0 +S1131E508083CFBFCF910895CF931092600080E329 +S1131E60A0D88091C00480648093C00481E08093F2 +S1131E706000CFB7F89480E090E0FC0173E0EE0FCF +S1131E80FF1F7A95E1F7EF5DFD4D108201968830D2 +S1131E90910599F7809193218E7F8093932180916E +S1131EA09C218E7F80939C218091A5218E7F80939D +S1131EB0A5218091AE218E7F8093AE218091B721A0 +S1131EC08E7F8093B7218091C0218E7F8093C02123 +S1131ED06AE170E082E001DD8F3F09F48FE18093D5 +S1131EE0FA046BE170E082E0F8DC8F3F09F48FE1E3 +S1131EF08093FB048091C00483608093C00480912C +S1131F00C00480688093C0048091C0048061809381 +S1131F10C00480E292E28093C6049093C704809147 +S1131F20C00480628093C0048FEF8093C5048091C5 +S1131F30C80482608093C8041092642285E0D7DCD0 +S1131F4068DFCFBFCF9108958093C3040895809133 +S1131F50C304089580936E2490936F246093702437 +S1131F607093712408950F931F93CF93DF931F925F +S1131F70CDB7DEB78A016983EBDCFC018181807C0B +S1131F80698181113BC06370613029F010F490E4E1 +S1131F9003C090E801C090EC00381105E1F050F462 +S1131FA000321105A1F00034110599F0003111053A +S1131FB061F419C0011582E0180789F00F3FA3E00E +S1131FC01A0779F00115114041F080E00DC082E05C +S1131FD00BC083E009C084E007C085E005C086E04B +S1131FE003C087E001C081E0118226E02083892BB1 +S1131FF0818381818062818381E001C080E00F90D0 +S1132000DF91CF911F910F910895A2DCFC01818192 +S113201082FB882780F90895CF93C82F99DCFC01AF +S1132020818182FF0FC091819B7F91838C2FF4DC8F +S1132030FC01808180FF06C08E7F80830780F0854D +S1132040E02D099581E0CF9108958F929F92BF92E0 +S1132050CF92DF92EF92FF920F931F93CF93DF9370 +S11320601F92CDB7DEB7B82E6A0179016983D4DC3B +S11320704C018B2D6DDCFC018181807C698188237E +S113208009F457C08181807C803C19F0818182FDF4 +S113209050C08FB7F894D4019C9190FF02C08FBFB9 +S11320A048C09160D4019C938FBFD4011196CD9206 +S11320B0DC9212971396ED92FC92149715961D924A +S11320C01C92169717960D931C93189791E0611123 +S11320D004C0E114F10409F090E0D4018C9190FB68 +S11320E081F98B7F8C93B7FC1EC08181807C803CFE +S11320F0C1F4A181A770A150A73040F4B0E0AA0FA9 +S1132100BB1FAE54BF4D6D917C9102C068E070E07E +S1132110C701E8D1892B29F0F40180818E7F808367 +S113212008C012821382168217828B2D8EDC81E006 +S113213001C080E00F90DF91CF911F910F91FF902C +S1132140EF90DF90CF90BF909F908F9008950F9362 +S11321501F93CF93DF93182FFBDBEC01812F5CDC03 +S1132160DC01FE0102E005938C9180FF16C08E7F96 +S11321708C931796ED91FC911897309771F017FF97 +S113218003C06E817F8102C06A817B81412F81E01F +S1132190DF91CF911F910F910994DF91CF911F91FE +S11321A00F910895CF93C82FD2DF8C2FD1DBFC0180 +S11321B01182CF9108950F93CF93C82FC9DBFC01EF +S11321C091819460918301E006938C2FC0DF81E0BC +S11321D0CF910F9108951F920F920FB60F92112471 +S11321E00F932F933F934F935F936F937F938F93AB +S11321F09F93AF93BF93EF93FF938091CB0487FF9B +S113220007C080E88093CA040AD80E94770186C078 +S11322108091CB0482FF18C084E08093CA0480912B +S1132220282286FF7BC08091CC0481FD77C07ADDB3 +S1132230811174C080910D22813011F4D7DB6EC0FE +S1132240843009F06BC021C08091CB0481FF26C08B +S113225082E08093CA048091202286FF5FC080912F +S1132260CC0481FD5BC05EDD811158C080910D22DC +S1132270823041F484E080930D22E0E2F2E202E055 +S113228006934CC0833009F049C0E9E2F2E204E06D +S11322900593E1E2F2E204E0059340C08091CB04AF +S11322A084FF25C080E18093CA0481E050DF81E887 +S11322B04EDF82E04CDF82E84ADF0E94F30810928E +S11322C0C3041092212296E09093202283E4809309 +S11322D0212210922922909328228093292289EC8A +S11322E091E2809324229093252247DB17C08091AA +S11322F0CB0486FF08C080E48093CA0480E015DB29 +S11323000E9475010BC08091CB0485FF07C080E259 +S11323108093CA0481E009DB0E947601FF91EF916A +S1132320BF91AF919F918F917F916F915F914F91E9 +S11323303F912F910F910F900FBE0F901F90189502 +S11323401F920F920FB60F9211240F931F932F9386 +S11323503F934F935F936F937F938F939F93AF9329 +S1132360BF93CF93DF93EF93FF938091CC0481FFCE +S11323701AC082E08093CC048091C504E0E2F2E2CA +S11323808195880FE81BF109208131812052324266 +S113239003E0369527950A95E1F7C22FC69520FFED +S11323A006C080E805C0BEDC882319F386C080E03F +S11323B0C80F8C2FCDDAFC01808185FF7EC000E23E +S11323C00693C11174C080910D22843019F41CDB72 +S11323D0D4DA73C0C0912222D09123228091702438 +S11323E0909171240091092210910A2298012C0FD6 +S11323F03D1F8217930718F4EC01C01BD10B809189 +S11324006E2490916F24AE0169EC71E2800F911FEC +S113241083D00C0F1D1F0093092210930A22C0348D +S1132420D10569F480910B2290910C22800F911FA9 +S113243020916C2430916D248217930788F00093C7 +S1132440702410937124E0917424F09175243097D2 +S113245029F00995811102C0BBDA2FC0C7DA2DC05B +S1132460809170249091712480179107D9F4E091A0 +S11324707424F0917524309779F30995882361F3D6 +S113248080910B2290910C222091092230910A22F2 +S1132490820F931F80930B2290930C221092092297 +S11324A010920A22E0E2F2E202E0069306C0C0388B +S11324B011F4CADB02C08C2FC8DAFF91EF91DF91CF +S11324C0CF91BF91AF919F918F917F916F915F91C8 +S11324D04F913F912F911F910F910F900FBE0F902D +S11324E01F901895AA1BBB1B51E107C0AA1FBB1F55 +S11324F0A617B70710F0A61BB70B881F991F5A958C +S1132500A9F780959095BC01CD010895EE0FFF1FAA +S11325100590F491E02D0994FB01DC0102C00190C7 +S11125200D9241505040D8F70895F894FFCF23 +S113252EFF5580008000F407EE07FE07EB0700005E +S113253E4420162000001C201A2006200902270021 +S113254E01010080FA0904000003FFFFFF000705E4 +S113255E81024000000705020240000007058301C6 +S113256EFF0301001201000200000040EB0300A073 +S113257E0002010200010000000300000000000040 +S113258E0000000000000000000000000000000039 +S113259E0000000000000000000000000000000029 +S11325AE00000000000000000000555342476F6217 +S11325BE696E6461722044756D6D79204465766927 +S11325CE63650054617069725465636800000403A6 +S11325DE0904100020004000800000010002FF03E7 +S9030000FC diff --git a/AVR Code/USB_BULK_TEST/Release/makedep.mk b/AVR Code/USB_BULK_TEST/Release/makedep.mk new file mode 100644 index 00000000..4097a0ef --- /dev/null +++ b/AVR Code/USB_BULK_TEST/Release/makedep.mk @@ -0,0 +1,42 @@ +################################################################################ +# Automatically-generated file. Do not edit or delete the file +################################################################################ + +src\tiny_dig.c + +src\ASF\common\boards\user_board\init.c + +src\ASF\common\services\ioport\xmega\ioport_compat.c + +src\main.c + +src\tiny_adc.c + +src\tiny_dac.c + +src\tiny_dma.c + +src\tiny_timer.c + +src\tiny_uart.c + +src\ASF\common\services\usb\class\vendor\device\example\atxmega256a3bu_xmega_a3bu_xplained\ui.c + +src\ASF\common\services\clock\xmega\sysclk.c + +src\ASF\common\services\sleepmgr\xmega\sleepmgr.c + +src\ASF\common\services\usb\class\vendor\device\udi_vendor.c + +src\ASF\common\services\usb\class\vendor\device\udi_vendor_desc.c + +src\ASF\common\services\usb\udc\udc.c + +src\ASF\xmega\drivers\cpu\ccp.s + +src\ASF\xmega\drivers\nvm\nvm.c + +src\ASF\xmega\drivers\nvm\nvm_asm.s + +src\ASF\xmega\drivers\usb\usb_device.c + diff --git a/AVR Code/USB_BULK_TEST/Release/src/ASF/common/boards/user_board/init.d b/AVR Code/USB_BULK_TEST/Release/src/ASF/common/boards/user_board/init.d new file mode 100644 index 00000000..b7fc4d06 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/Release/src/ASF/common/boards/user_board/init.d @@ -0,0 +1,203 @@ +src/ASF/common/boards/user_board/init.d \ + src/ASF/common/boards/user_board/init.o: \ + ../src/ASF/common/boards/user_board/init.c ../src/asf.h \ + ../src/ASF/xmega/drivers/cpu/ccp.h ../src/ASF/xmega/utils/compiler.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\io.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\inttypes.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\iox32a4u.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\portpins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\common.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\version.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\xmega.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\fuse.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\lock.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\builtins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdlib.h \ + ../src/ASF/common/utils/parts.h \ + ../src/ASF/xmega/utils/bit_handling/clz_ctz.h \ + ../src/ASF/xmega/utils/preprocessor/preprocessor.h \ + ../src/ASF/xmega/utils/preprocessor/tpaste.h \ + ../src/ASF/xmega/utils/preprocessor/stringz.h \ + ../src/ASF/xmega/utils/preprocessor/mrepeat.h \ + ../src/ASF/xmega/utils/preprocessor/preprocessor.h \ + ../src/ASF/xmega/utils/progmem.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\pgmspace.h \ + ../src/ASF/common/utils/interrupt.h \ + ../src/ASF/common/utils/interrupt/interrupt_avr8.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\interrupt.h \ + ../src/ASF/xmega/drivers/cpu/xmega_reset_cause.h \ + ../src/ASF/xmega/drivers/cpu/ccp.h \ + ../src/ASF/common/boards/user_board/user_board.h \ + ../src/config/conf_board.h ../src/ASF/common/boards/board.h \ + ../src/ASF/common/services/ioport/ioport.h \ + ../src/ASF/common/services/ioport/xmega/ioport.h \ + ../src/ASF/xmega/drivers/nvm/nvm.h \ + ../src/ASF/xmega/drivers/sleep/sleep.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sleep.h \ + ../src/ASF/common/services/sleepmgr/sleepmgr.h \ + ../src/ASF/common/services/sleepmgr/xmega/sleepmgr.h \ + ../src/config/conf_sleepmgr.h \ + ../src/ASF/common/services/sleepmgr/xmega/sleepmgr.h \ + ../src/ASF/common/services/clock/sysclk.h ../src/config/conf_clock.h \ + ../src/ASF/common/services/clock/xmega/sysclk.h \ + ../src/ASF/common/services/clock/osc.h \ + ../src/ASF/common/services/clock/xmega/osc.h \ + ../src/ASF/common/services/clock/pll.h \ + ../src/ASF/common/services/clock/xmega/pll.h \ + ../src/ASF/common/services/usb/udc/udc.h ../src/config/conf_usb.h \ + ../src/ASF/common/services/usb/class/vendor/device/udi_vendor_conf.h \ + ../src/ASF/common/services/usb/class/vendor/device/udi_vendor.h \ + ../src/ASF/common/services/usb/usb_protocol.h \ + ../src/ASF/common/services/usb/usb_atmel.h \ + ../src/ASF/common/services/usb/class/vendor/usb_protocol_vendor.h \ + ../src/ASF/common/services/usb/udc/udd.h \ + ../src/ASF/common/services/usb/udc/udc_desc.h \ + ../src/ASF/common/services/usb/udc/udi.h \ + ../src/ASF/common/services/usb/udc/udc_desc.h \ + ../src/ASF/common/services/usb/udc/udi.h ../src/ui.h ../src/main.h \ + ../src/ASF/common/services/usb/udc/udd.h \ + ../src/ASF/common/services/usb/class/vendor/device/udi_vendor.h \ + ../src/ASF/xmega/utils/status_codes.h + +../src/asf.h: + +../src/ASF/xmega/drivers/cpu/ccp.h: + +../src/ASF/xmega/utils/compiler.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\io.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\inttypes.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\iox32a4u.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\portpins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\common.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\version.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\xmega.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\fuse.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\lock.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\builtins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdlib.h: + +../src/ASF/common/utils/parts.h: + +../src/ASF/xmega/utils/bit_handling/clz_ctz.h: + +../src/ASF/xmega/utils/preprocessor/preprocessor.h: + +../src/ASF/xmega/utils/preprocessor/tpaste.h: + +../src/ASF/xmega/utils/preprocessor/stringz.h: + +../src/ASF/xmega/utils/preprocessor/mrepeat.h: + +../src/ASF/xmega/utils/preprocessor/preprocessor.h: + +../src/ASF/xmega/utils/progmem.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\pgmspace.h: + +../src/ASF/common/utils/interrupt.h: + +../src/ASF/common/utils/interrupt/interrupt_avr8.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\interrupt.h: + +../src/ASF/xmega/drivers/cpu/xmega_reset_cause.h: + +../src/ASF/xmega/drivers/cpu/ccp.h: + +../src/ASF/common/boards/user_board/user_board.h: + +../src/config/conf_board.h: + +../src/ASF/common/boards/board.h: + +../src/ASF/common/services/ioport/ioport.h: + +../src/ASF/common/services/ioport/xmega/ioport.h: + +../src/ASF/xmega/drivers/nvm/nvm.h: + +../src/ASF/xmega/drivers/sleep/sleep.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sleep.h: + +../src/ASF/common/services/sleepmgr/sleepmgr.h: + +../src/ASF/common/services/sleepmgr/xmega/sleepmgr.h: + +../src/config/conf_sleepmgr.h: + +../src/ASF/common/services/sleepmgr/xmega/sleepmgr.h: + +../src/ASF/common/services/clock/sysclk.h: + +../src/config/conf_clock.h: + +../src/ASF/common/services/clock/xmega/sysclk.h: + +../src/ASF/common/services/clock/osc.h: + +../src/ASF/common/services/clock/xmega/osc.h: + +../src/ASF/common/services/clock/pll.h: + +../src/ASF/common/services/clock/xmega/pll.h: + +../src/ASF/common/services/usb/udc/udc.h: + +../src/config/conf_usb.h: + +../src/ASF/common/services/usb/class/vendor/device/udi_vendor_conf.h: + +../src/ASF/common/services/usb/class/vendor/device/udi_vendor.h: + +../src/ASF/common/services/usb/usb_protocol.h: + +../src/ASF/common/services/usb/usb_atmel.h: + +../src/ASF/common/services/usb/class/vendor/usb_protocol_vendor.h: + +../src/ASF/common/services/usb/udc/udd.h: + +../src/ASF/common/services/usb/udc/udc_desc.h: + +../src/ASF/common/services/usb/udc/udi.h: + +../src/ASF/common/services/usb/udc/udc_desc.h: + +../src/ASF/common/services/usb/udc/udi.h: + +../src/ui.h: + +../src/main.h: + +../src/ASF/common/services/usb/udc/udd.h: + +../src/ASF/common/services/usb/class/vendor/device/udi_vendor.h: + +../src/ASF/xmega/utils/status_codes.h: diff --git a/AVR Code/USB_BULK_TEST/Release/src/ASF/common/boards/user_board/init.o b/AVR Code/USB_BULK_TEST/Release/src/ASF/common/boards/user_board/init.o new file mode 100644 index 0000000000000000000000000000000000000000..9c2d043172bed24af21aad81d6692ff290662b64 GIT binary patch literal 839 zcma)4O;3YB5FMm8?ZHGn8NJkautu}7wbjN%jls4a8f{wjx&caB5-A4upkDkH{tthW zC-2<6;SB5oda08<-kT3*XBOVNgPx{opiF}?e&_p-_RMtW{D`$!n>X6c=3cGEI;;V}!WU1N7P1IZo+%}qX8~+t3KN(W zhQKJmEZ+l-H9v&a;=InD(MONG*ytQCuh&`|qI6zgZOTXE_p4 ze1gw>roZ#hwz=uB3|G>nJ6fmPpg)V*!1;K{uQ^Y}AQhu-KM{s8OjvkNJaDFoesuz0 II)z{K2iA31=Kufz literal 0 HcmV?d00001 diff --git a/AVR Code/USB_BULK_TEST/Release/src/ASF/common/services/clock/xmega/sysclk.d b/AVR Code/USB_BULK_TEST/Release/src/ASF/common/services/clock/xmega/sysclk.d new file mode 100644 index 00000000..411bc0ab --- /dev/null +++ b/AVR Code/USB_BULK_TEST/Release/src/ASF/common/services/clock/xmega/sysclk.d @@ -0,0 +1,124 @@ +src/ASF/common/services/clock/xmega/sysclk.d \ + src/ASF/common/services/clock/xmega/sysclk.o: \ + ../src/ASF/common/services/clock/xmega/sysclk.c \ + ../src/ASF/xmega/utils/compiler.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\io.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\inttypes.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\iox32a4u.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\portpins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\common.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\version.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\xmega.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\fuse.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\lock.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\builtins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdlib.h \ + ../src/ASF/common/utils/parts.h \ + ../src/ASF/xmega/utils/bit_handling/clz_ctz.h \ + ../src/ASF/xmega/utils/preprocessor/preprocessor.h \ + ../src/ASF/xmega/utils/preprocessor/tpaste.h \ + ../src/ASF/xmega/utils/preprocessor/stringz.h \ + ../src/ASF/xmega/utils/preprocessor/mrepeat.h \ + ../src/ASF/xmega/utils/preprocessor/preprocessor.h \ + ../src/ASF/xmega/utils/progmem.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\pgmspace.h \ + ../src/ASF/common/utils/interrupt.h \ + ../src/ASF/common/utils/interrupt/interrupt_avr8.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\interrupt.h \ + ../src/ASF/common/services/clock/sysclk.h ../src/config/conf_clock.h \ + ../src/ASF/common/services/clock/xmega/sysclk.h \ + ../src/ASF/common/boards/board.h \ + ../src/ASF/common/boards/user_board/user_board.h \ + ../src/config/conf_board.h ../src/ASF/xmega/drivers/cpu/ccp.h \ + ../src/ASF/common/services/clock/osc.h \ + ../src/ASF/common/services/clock/xmega/osc.h \ + ../src/ASF/common/services/clock/pll.h \ + ../src/ASF/common/services/clock/xmega/pll.h \ + ../src/ASF/xmega/drivers/nvm/nvm.h + +../src/ASF/xmega/utils/compiler.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\io.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\inttypes.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\iox32a4u.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\portpins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\common.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\version.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\xmega.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\fuse.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\lock.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\builtins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdlib.h: + +../src/ASF/common/utils/parts.h: + +../src/ASF/xmega/utils/bit_handling/clz_ctz.h: + +../src/ASF/xmega/utils/preprocessor/preprocessor.h: + +../src/ASF/xmega/utils/preprocessor/tpaste.h: + +../src/ASF/xmega/utils/preprocessor/stringz.h: + +../src/ASF/xmega/utils/preprocessor/mrepeat.h: + +../src/ASF/xmega/utils/preprocessor/preprocessor.h: + +../src/ASF/xmega/utils/progmem.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\pgmspace.h: + +../src/ASF/common/utils/interrupt.h: + +../src/ASF/common/utils/interrupt/interrupt_avr8.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\interrupt.h: + +../src/ASF/common/services/clock/sysclk.h: + +../src/config/conf_clock.h: + +../src/ASF/common/services/clock/xmega/sysclk.h: + +../src/ASF/common/boards/board.h: + +../src/ASF/common/boards/user_board/user_board.h: + +../src/config/conf_board.h: + +../src/ASF/xmega/drivers/cpu/ccp.h: + +../src/ASF/common/services/clock/osc.h: + +../src/ASF/common/services/clock/xmega/osc.h: + +../src/ASF/common/services/clock/pll.h: + +../src/ASF/common/services/clock/xmega/pll.h: + +../src/ASF/xmega/drivers/nvm/nvm.h: diff --git a/AVR Code/USB_BULK_TEST/Release/src/ASF/common/services/clock/xmega/sysclk.o b/AVR Code/USB_BULK_TEST/Release/src/ASF/common/services/clock/xmega/sysclk.o new file mode 100644 index 0000000000000000000000000000000000000000..ac20ffeafd4974d0fa0d4a919d7ea76a45826e60 GIT binary patch literal 2384 zcma)7Piz!r6o1=k6%~t)u^RPI6%nHje_WE4pvE+`9*EW=CJ>X^+1ZKRxVy9NOpy{} zXIN|kMRYSz5<*fg5{}+_GF>jj3n|76r!r_uNIcjk95`s!-<$cq-PtV>U-I_--kRR|8&0KCBq>GvsjU&+=pnidXF3YlN-Axlx%qo%!j;u<&_DLNSDRbdaF#6> zSAGfyW>3`z&YhTo3SrG=aI#d^HEJKI*n z@L={-vBe!0DCX@^yOi^X7id+P2lx2Vwwqgww^V}0e~HZyx%)Xpw@;bMIw`eDR< zWkdF{g+_*kb`NfS|I;x&qvr~)KJwuK{S(_Rn&U>HtiPqDwO#s-T|0NaHkj5j+72Sk znJl?R4$`g0a$F+UI^vR+H(Z0Xoa2zj2F-R%-6|WoqNNwgu2n4?#q}Oz!nIAKSjbfk zw_ukw(=I!1rD|8SG-*|72o-vD0{F)U=91KgXiXVEOLeFDsD*|!mV5}eGp8OpP;Ns{?~ zgdrKX2g-m95n0MpVXyH+IwlODeWwksMEGZ>F9+0O7tz?ZH25gp8|d-p}zq9 zUP6BbxcxTPns2sz4Az=&x!_*e;2TBjTvmFR`F z1C;11CUw3kZBn9>PU`*S3-uDDiu~WT-O;(6@6s;|o!@|p`acVu@4AZmzX_f1w2H60 zB6Qxb%Jt(psF|ee`$zQ;bUg<9VlcLMBmzT2qmgt=6}@VG9^s=_)fUSAMs>pWUqd=M znN72ze^o8G82C1o50{YL$m_XD*Ai{Y{{u0S#acOPJFSW7+!eDSoH?RvGhr z9*nm@MrS8-4hs8okS~E{PK~kXlkcX=j~2xFResE%ez1)B7Z{PY-~a#s literal 0 HcmV?d00001 diff --git a/AVR Code/USB_BULK_TEST/Release/src/ASF/common/services/ioport/xmega/ioport_compat.d b/AVR Code/USB_BULK_TEST/Release/src/ASF/common/services/ioport/xmega/ioport_compat.d new file mode 100644 index 00000000..1e965942 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/Release/src/ASF/common/services/ioport/xmega/ioport_compat.d @@ -0,0 +1,98 @@ +src/ASF/common/services/ioport/xmega/ioport_compat.d \ + src/ASF/common/services/ioport/xmega/ioport_compat.o: \ + ../src/ASF/common/services/ioport/xmega/ioport_compat.c \ + ../src/ASF/common/services/ioport/xmega/ioport_compat.h \ + ../src/ASF/common/services/ioport/xmega/../ioport.h \ + ../src/ASF/common/utils/parts.h ../src/ASF/xmega/utils/compiler.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\io.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\inttypes.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\iox32a4u.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\portpins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\common.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\version.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\xmega.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\fuse.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\lock.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\builtins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdlib.h \ + ../src/ASF/xmega/utils/bit_handling/clz_ctz.h \ + ../src/ASF/xmega/utils/preprocessor/preprocessor.h \ + ../src/ASF/xmega/utils/preprocessor/tpaste.h \ + ../src/ASF/xmega/utils/preprocessor/stringz.h \ + ../src/ASF/xmega/utils/preprocessor/mrepeat.h \ + ../src/ASF/xmega/utils/preprocessor/preprocessor.h \ + ../src/ASF/xmega/utils/progmem.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\pgmspace.h \ + ../src/ASF/common/utils/interrupt.h \ + ../src/ASF/common/utils/interrupt/interrupt_avr8.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\interrupt.h \ + ../src/ASF/common/services/ioport/xmega/../xmega/ioport.h + +../src/ASF/common/services/ioport/xmega/ioport_compat.h: + +../src/ASF/common/services/ioport/xmega/../ioport.h: + +../src/ASF/common/utils/parts.h: + +../src/ASF/xmega/utils/compiler.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\io.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\inttypes.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\iox32a4u.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\portpins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\common.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\version.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\xmega.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\fuse.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\lock.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\builtins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdlib.h: + +../src/ASF/xmega/utils/bit_handling/clz_ctz.h: + +../src/ASF/xmega/utils/preprocessor/preprocessor.h: + +../src/ASF/xmega/utils/preprocessor/tpaste.h: + +../src/ASF/xmega/utils/preprocessor/stringz.h: + +../src/ASF/xmega/utils/preprocessor/mrepeat.h: + +../src/ASF/xmega/utils/preprocessor/preprocessor.h: + +../src/ASF/xmega/utils/progmem.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\pgmspace.h: + +../src/ASF/common/utils/interrupt.h: + +../src/ASF/common/utils/interrupt/interrupt_avr8.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\interrupt.h: + +../src/ASF/common/services/ioport/xmega/../xmega/ioport.h: diff --git a/AVR Code/USB_BULK_TEST/Release/src/ASF/common/services/ioport/xmega/ioport_compat.o b/AVR Code/USB_BULK_TEST/Release/src/ASF/common/services/ioport/xmega/ioport_compat.o new file mode 100644 index 0000000000000000000000000000000000000000..47a3122330067499443841ab0bea2f6d3ff00d94 GIT binary patch literal 745 zcma)4%}#?r5FVszO+4sTFEt*liP_i+Nn_$)NX0`nO{-offW(qWm(V?^7hj|gSu}DjvC?&#I0qn^W9x#740~YW& z4yQs5^bg*p8aeY?Ra?$lA5{D7Rdwc)x&z8L3Crq^s(!~>KU#KS^1Tw<1l3C>LxL?u zWokajD=J9*MS)M^b;2g0LD(W}5cGa?I&@1hWvZX@73=W^WVwn~ilAwWuCliAwF)=G3Bm|?zGzbS`2&jptO(_)!l#;fI;>DZ4$zSBX z{((Bv?UqV3Ofvi4o7v9Je)PTBxm6Seq$$vcl>+$0#20!soKS=eqyhHQ*%Uxa(;9{1 z&0~+(`C#Jl*4+cYx9yoR)+cj*&Z?}&%e6}7q)=sbRt8}1((?2HqUQ)4OXiuc9A(iAD=2ekrn#_24ma%i^JIi!!?rAQ?#XU9;{i^g{b1LjiG4%@LGJY^;%b!oZ{9KH zchEP@JN=`c?17e$>uM1%Q4p;Ep*8`J3t3k&tELryU1owlQ_Ffgc5S`$D1O(#agv6yi(Mo7VOM;>biXbXMsGzFlt2>{+>MzEeMZGW?=ohM?ntH3by}h~CP%X7Zq=vuyHtZtWtcX29 zHvVNv9fvj~)g2B=aYBs}oeUBbgr#O2XUAqd@TqZl8jn)X&x}cRH;hj8(1telg)}o! z%&jBS@5cixyIvfhK*DobanfQQ{yCZ1y3+*~%!G>ue#yX@?3ZJCJ#{?v z6Un>CbB`tX1Nd!txnB>33*^M4pKyug{1Q#3lIIxAre0)&xs`A|$j=Gyv9QVXKEP|C z==T`-O^L4q`!h9}Zq8~9CetSV{hF%l;oW)*XxS5>Vl_S$(5feSoll~-08@MCD9`v2 zrulJ>FVpuqzCz&~UnRL(#q;PtN>oHzA06lqS{Goy0Ec^>9JJd9d9?jhXYomn|HPSb VL_P$F{u2P=EePUE_9;YRyEurNk9Mv^X@;P=hk!yFzz>Phb0^W(eUy>suGx#yGd z%Wr$0XGAdb66TxB%IBU+B(`I?inC=ZeSBAWMJ-2D~;(6b@wX(bpZ@;-i z@5)y9#wt)>yu7^h^^Uo-T=edxqg-6u^rzUDyni`%8Dsm_2iCvwzVv?ZX17-U;tT_8 zeQSIDpKcxOzjX-yGliFTMn5q&c4_eJTklQV5j$5-?8Mb~?X_C1Qd$VhRr^X%3@+LW z7l((>4Hkou;DRwh^X6g_&Y@2lS-&7!5`U1GAPSSv1ar-%2^w)F4CoD7QQ0oV)u`66 z^KsIQlcZdoKLik!o8ep~J|r4fj|hUeRX=3lT&r^3;+-0;>QRVVD>(vEZq|6c^TImrPKqEiT5@L><-9>KTNYzsDS`*anx}e#YSn55T>E zcsJUEa7c-L^U4}Hh0J>%dM6!DijNr61N{j!`q^ktqv`j!1iKeaMEI`2q50kf-*fPh zkMj#(9lGY5gnb%KMEI`5q4^^44Z%k~?t}1s1zq#a!X8Bv5x&pi(0sSS_bq(nJMLn9 z-|x{hA2A25Z_|xIm&yN@y3-Z}9cqLEAfA(`(8eg#L!I&q2@s zLEAfeZw%(=*nHOZ^>mtd92YU3dCXZ^SJ?f_iOmeirLgB@xqcj?lI(4AM|LkmbjNfgux12qS-pBiG zx5f2=a{Q@$b5p*++1Y$OX1pyvwI|+dnBSBPf5Lpc$M(&Jv-u76o0DeK*&M_9e{8c& zUIGLqW9`h8owPPnE@#U0_(ZCVjZLL}vRJo`cs|uXj2ks)XwJa6p3F$|_OGP3#O;b8M@u5&9h(acgoz!(`#-Rcds=r+NN(HB&o78KywYi0d zFSgXGYDI~vKY6a6#c{`PH=~}q<5j#BwY0Lld~2@at$IsD-teHCG+U6#Ad_v;lJIRp zUeHXMls^4t>Q@mSsQkL&XmA z{J7f|)y)0}@I$d6 literal 0 HcmV?d00001 diff --git a/AVR Code/USB_BULK_TEST/Release/src/ASF/common/services/usb/udc/udc.d b/AVR Code/USB_BULK_TEST/Release/src/ASF/common/services/usb/udc/udc.d new file mode 100644 index 00000000..43b66ba8 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/Release/src/ASF/common/services/usb/udc/udc.d @@ -0,0 +1,222 @@ +src/ASF/common/services/usb/udc/udc.d \ + src/ASF/common/services/usb/udc/udc.o: \ + ../src/ASF/common/services/usb/udc/udc.c ../src/config/conf_usb.h \ + ../src/ASF/xmega/utils/compiler.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\io.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\inttypes.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\iox32a4u.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\portpins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\common.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\version.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\xmega.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\fuse.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\lock.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\builtins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdlib.h \ + ../src/ASF/common/utils/parts.h \ + ../src/ASF/xmega/utils/bit_handling/clz_ctz.h \ + ../src/ASF/xmega/utils/preprocessor/preprocessor.h \ + ../src/ASF/xmega/utils/preprocessor/tpaste.h \ + ../src/ASF/xmega/utils/preprocessor/stringz.h \ + ../src/ASF/xmega/utils/preprocessor/mrepeat.h \ + ../src/ASF/xmega/utils/preprocessor/preprocessor.h \ + ../src/ASF/xmega/utils/progmem.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\pgmspace.h \ + ../src/ASF/common/utils/interrupt.h \ + ../src/ASF/common/utils/interrupt/interrupt_avr8.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\interrupt.h \ + ../src/ASF/common/services/usb/class/vendor/device/udi_vendor_conf.h \ + ../src/ASF/common/services/usb/class/vendor/device/udi_vendor.h \ + ../src/ASF/common/services/usb/usb_protocol.h \ + ../src/ASF/common/services/usb/usb_atmel.h \ + ../src/ASF/common/services/usb/class/vendor/usb_protocol_vendor.h \ + ../src/ASF/common/services/usb/udc/udd.h \ + ../src/ASF/common/services/usb/udc/udc_desc.h \ + ../src/ASF/common/services/usb/udc/udi.h \ + ../src/ASF/common/services/usb/udc/udc_desc.h \ + ../src/ASF/common/services/usb/udc/udi.h ../src/ui.h ../src/main.h \ + ../src/ASF/common/services/usb/udc/udd.h \ + ../src/ASF/common/services/usb/udc/udc.h ../src/globals.h \ + ../src/tiny_dma.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdio.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdarg.h \ + ../src/asf.h ../src/ASF/xmega/drivers/cpu/ccp.h \ + ../src/ASF/xmega/drivers/cpu/xmega_reset_cause.h \ + ../src/ASF/xmega/drivers/cpu/ccp.h \ + ../src/ASF/common/boards/user_board/user_board.h \ + ../src/config/conf_board.h ../src/ASF/common/boards/board.h \ + ../src/ASF/common/services/ioport/ioport.h \ + ../src/ASF/common/services/ioport/xmega/ioport.h \ + ../src/ASF/xmega/drivers/nvm/nvm.h \ + ../src/ASF/xmega/drivers/sleep/sleep.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sleep.h \ + ../src/ASF/common/services/sleepmgr/sleepmgr.h \ + ../src/ASF/common/services/sleepmgr/xmega/sleepmgr.h \ + ../src/config/conf_sleepmgr.h \ + ../src/ASF/common/services/sleepmgr/xmega/sleepmgr.h \ + ../src/ASF/common/services/clock/sysclk.h ../src/config/conf_clock.h \ + ../src/ASF/common/services/clock/xmega/sysclk.h \ + ../src/ASF/common/services/clock/osc.h \ + ../src/ASF/common/services/clock/xmega/osc.h \ + ../src/ASF/common/services/clock/pll.h \ + ../src/ASF/common/services/clock/xmega/pll.h \ + ../src/ASF/common/services/usb/udc/udc.h \ + ../src/ASF/common/services/usb/class/vendor/device/udi_vendor.h \ + ../src/ASF/xmega/utils/status_codes.h ../src/globals.h ../src/tiny_adc.h + +../src/config/conf_usb.h: + +../src/ASF/xmega/utils/compiler.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\io.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\inttypes.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\iox32a4u.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\portpins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\common.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\version.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\xmega.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\fuse.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\lock.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\builtins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdlib.h: + +../src/ASF/common/utils/parts.h: + +../src/ASF/xmega/utils/bit_handling/clz_ctz.h: + +../src/ASF/xmega/utils/preprocessor/preprocessor.h: + +../src/ASF/xmega/utils/preprocessor/tpaste.h: + +../src/ASF/xmega/utils/preprocessor/stringz.h: + +../src/ASF/xmega/utils/preprocessor/mrepeat.h: + +../src/ASF/xmega/utils/preprocessor/preprocessor.h: + +../src/ASF/xmega/utils/progmem.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\pgmspace.h: + +../src/ASF/common/utils/interrupt.h: + +../src/ASF/common/utils/interrupt/interrupt_avr8.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\interrupt.h: + +../src/ASF/common/services/usb/class/vendor/device/udi_vendor_conf.h: + +../src/ASF/common/services/usb/class/vendor/device/udi_vendor.h: + +../src/ASF/common/services/usb/usb_protocol.h: + +../src/ASF/common/services/usb/usb_atmel.h: + +../src/ASF/common/services/usb/class/vendor/usb_protocol_vendor.h: + +../src/ASF/common/services/usb/udc/udd.h: + +../src/ASF/common/services/usb/udc/udc_desc.h: + +../src/ASF/common/services/usb/udc/udi.h: + +../src/ASF/common/services/usb/udc/udc_desc.h: + +../src/ASF/common/services/usb/udc/udi.h: + +../src/ui.h: + +../src/main.h: + +../src/ASF/common/services/usb/udc/udd.h: + +../src/ASF/common/services/usb/udc/udc.h: + +../src/globals.h: + +../src/tiny_dma.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdio.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdarg.h: + +../src/asf.h: + +../src/ASF/xmega/drivers/cpu/ccp.h: + +../src/ASF/xmega/drivers/cpu/xmega_reset_cause.h: + +../src/ASF/xmega/drivers/cpu/ccp.h: + +../src/ASF/common/boards/user_board/user_board.h: + +../src/config/conf_board.h: + +../src/ASF/common/boards/board.h: + +../src/ASF/common/services/ioport/ioport.h: + +../src/ASF/common/services/ioport/xmega/ioport.h: + +../src/ASF/xmega/drivers/nvm/nvm.h: + +../src/ASF/xmega/drivers/sleep/sleep.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sleep.h: + +../src/ASF/common/services/sleepmgr/sleepmgr.h: + +../src/ASF/common/services/sleepmgr/xmega/sleepmgr.h: + +../src/config/conf_sleepmgr.h: + +../src/ASF/common/services/sleepmgr/xmega/sleepmgr.h: + +../src/ASF/common/services/clock/sysclk.h: + +../src/config/conf_clock.h: + +../src/ASF/common/services/clock/xmega/sysclk.h: + +../src/ASF/common/services/clock/osc.h: + +../src/ASF/common/services/clock/xmega/osc.h: + +../src/ASF/common/services/clock/pll.h: + +../src/ASF/common/services/clock/xmega/pll.h: + +../src/ASF/common/services/usb/udc/udc.h: + +../src/ASF/common/services/usb/class/vendor/device/udi_vendor.h: + +../src/ASF/xmega/utils/status_codes.h: + +../src/globals.h: + +../src/tiny_adc.h: diff --git a/AVR Code/USB_BULK_TEST/Release/src/ASF/common/services/usb/udc/udc.o b/AVR Code/USB_BULK_TEST/Release/src/ASF/common/services/usb/udc/udc.o new file mode 100644 index 0000000000000000000000000000000000000000..93e9ad8fdcfefed6c4a5ebf92a5fcf1f3c17c1cb GIT binary patch literal 12556 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 literal 0 HcmV?d00001 diff --git a/AVR Code/USB_BULK_TEST/Release/src/ASF/xmega/drivers/cpu/ccp.d b/AVR Code/USB_BULK_TEST/Release/src/ASF/xmega/drivers/cpu/ccp.d new file mode 100644 index 00000000..dd28a749 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/Release/src/ASF/xmega/drivers/cpu/ccp.d @@ -0,0 +1,34 @@ +src/ASF/xmega/drivers/cpu/ccp.d src/ASF/xmega/drivers/cpu/ccp.o: \ + ../src/ASF/xmega/drivers/cpu/ccp.s ../src/ASF/xmega/utils/assembler.h \ + ../src/ASF/xmega/utils/assembler/gas.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\io.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\iox32a4u.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\portpins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\common.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\version.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\xmega.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\fuse.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\lock.h + +../src/ASF/xmega/utils/assembler.h: + +../src/ASF/xmega/utils/assembler/gas.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\io.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\iox32a4u.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\portpins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\common.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\version.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\xmega.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\fuse.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\lock.h: diff --git a/AVR Code/USB_BULK_TEST/Release/src/ASF/xmega/drivers/cpu/ccp.o b/AVR Code/USB_BULK_TEST/Release/src/ASF/xmega/drivers/cpu/ccp.o new file mode 100644 index 0000000000000000000000000000000000000000..fd8d11d09e8f4e217d8bbc3f3cde82a76a9ccdbf GIT binary patch literal 1444 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 ONBdIwloBuZ*#80BtW<3P literal 0 HcmV?d00001 diff --git a/AVR Code/USB_BULK_TEST/Release/src/ASF/xmega/drivers/nvm/nvm_asm.d b/AVR Code/USB_BULK_TEST/Release/src/ASF/xmega/drivers/nvm/nvm_asm.d new file mode 100644 index 00000000..5ccf6387 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/Release/src/ASF/xmega/drivers/nvm/nvm_asm.d @@ -0,0 +1,35 @@ +src/ASF/xmega/drivers/nvm/nvm_asm.d src/ASF/xmega/drivers/nvm/nvm_asm.o: \ + ../src/ASF/xmega/drivers/nvm/nvm_asm.s \ + ../src/ASF/xmega/utils/assembler.h \ + ../src/ASF/xmega/utils/assembler/gas.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\io.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\iox32a4u.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\portpins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\common.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\version.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\xmega.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\fuse.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\lock.h + +../src/ASF/xmega/utils/assembler.h: + +../src/ASF/xmega/utils/assembler/gas.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\io.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\iox32a4u.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\portpins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\common.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\version.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\xmega.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\fuse.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\lock.h: diff --git a/AVR Code/USB_BULK_TEST/Release/src/ASF/xmega/drivers/nvm/nvm_asm.o b/AVR Code/USB_BULK_TEST/Release/src/ASF/xmega/drivers/nvm/nvm_asm.o new file mode 100644 index 0000000000000000000000000000000000000000..92018cac0494adeca1a28fe0f9e7b6443ce6479d GIT binary patch literal 2476 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 TG`&8je9N8xQaBdG?C<{qoPS0{ literal 0 HcmV?d00001 diff --git a/AVR Code/USB_BULK_TEST/Release/src/main.d b/AVR Code/USB_BULK_TEST/Release/src/main.d new file mode 100644 index 00000000..206791d6 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/Release/src/main.d @@ -0,0 +1,226 @@ +src/main.d src/main.o: ../src/main.c \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdio.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\inttypes.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdarg.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h \ + ../src/asf.h ../src/ASF/xmega/drivers/cpu/ccp.h \ + ../src/ASF/xmega/utils/compiler.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\io.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\iox32a4u.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\portpins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\common.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\version.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\xmega.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\fuse.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\lock.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\builtins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdlib.h \ + ../src/ASF/common/utils/parts.h \ + ../src/ASF/xmega/utils/bit_handling/clz_ctz.h \ + ../src/ASF/xmega/utils/preprocessor/preprocessor.h \ + ../src/ASF/xmega/utils/preprocessor/tpaste.h \ + ../src/ASF/xmega/utils/preprocessor/stringz.h \ + ../src/ASF/xmega/utils/preprocessor/mrepeat.h \ + ../src/ASF/xmega/utils/preprocessor/preprocessor.h \ + ../src/ASF/xmega/utils/progmem.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\pgmspace.h \ + ../src/ASF/common/utils/interrupt.h \ + ../src/ASF/common/utils/interrupt/interrupt_avr8.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\interrupt.h \ + ../src/ASF/xmega/drivers/cpu/xmega_reset_cause.h \ + ../src/ASF/xmega/drivers/cpu/ccp.h \ + ../src/ASF/common/boards/user_board/user_board.h \ + ../src/config/conf_board.h ../src/ASF/common/boards/board.h \ + ../src/ASF/common/services/ioport/ioport.h \ + ../src/ASF/common/services/ioport/xmega/ioport.h \ + ../src/ASF/xmega/drivers/nvm/nvm.h \ + ../src/ASF/xmega/drivers/sleep/sleep.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sleep.h \ + ../src/ASF/common/services/sleepmgr/sleepmgr.h \ + ../src/ASF/common/services/sleepmgr/xmega/sleepmgr.h \ + ../src/config/conf_sleepmgr.h \ + ../src/ASF/common/services/sleepmgr/xmega/sleepmgr.h \ + ../src/ASF/common/services/clock/sysclk.h ../src/config/conf_clock.h \ + ../src/ASF/common/services/clock/xmega/sysclk.h \ + ../src/ASF/common/services/clock/osc.h \ + ../src/ASF/common/services/clock/xmega/osc.h \ + ../src/ASF/common/services/clock/pll.h \ + ../src/ASF/common/services/clock/xmega/pll.h \ + ../src/ASF/common/services/usb/udc/udc.h ../src/config/conf_usb.h \ + ../src/ASF/common/services/usb/class/vendor/device/udi_vendor_conf.h \ + ../src/ASF/common/services/usb/class/vendor/device/udi_vendor.h \ + ../src/ASF/common/services/usb/usb_protocol.h \ + ../src/ASF/common/services/usb/usb_atmel.h \ + ../src/ASF/common/services/usb/class/vendor/usb_protocol_vendor.h \ + ../src/ASF/common/services/usb/udc/udd.h \ + ../src/ASF/common/services/usb/udc/udc_desc.h \ + ../src/ASF/common/services/usb/udc/udi.h \ + ../src/ASF/common/services/usb/udc/udc_desc.h \ + ../src/ASF/common/services/usb/udc/udi.h ../src/ui.h ../src/main.h \ + ../src/ASF/common/services/usb/udc/udd.h \ + ../src/ASF/common/services/usb/class/vendor/device/udi_vendor.h \ + ../src/ASF/xmega/utils/status_codes.h ../src/ui.h ../src/globals.h \ + ../src/tiny_adc.h ../src/tiny_dma.h ../src/tiny_timer.h \ + ../src/tiny_dac.h ../src/tiny_uart.h ../src/tiny_dig.h + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdio.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\inttypes.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdarg.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h: + +../src/asf.h: + +../src/ASF/xmega/drivers/cpu/ccp.h: + +../src/ASF/xmega/utils/compiler.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\io.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\iox32a4u.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\portpins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\common.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\version.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\xmega.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\fuse.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\lock.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\builtins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdlib.h: + +../src/ASF/common/utils/parts.h: + +../src/ASF/xmega/utils/bit_handling/clz_ctz.h: + +../src/ASF/xmega/utils/preprocessor/preprocessor.h: + +../src/ASF/xmega/utils/preprocessor/tpaste.h: + +../src/ASF/xmega/utils/preprocessor/stringz.h: + +../src/ASF/xmega/utils/preprocessor/mrepeat.h: + +../src/ASF/xmega/utils/preprocessor/preprocessor.h: + +../src/ASF/xmega/utils/progmem.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\pgmspace.h: + +../src/ASF/common/utils/interrupt.h: + +../src/ASF/common/utils/interrupt/interrupt_avr8.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\interrupt.h: + +../src/ASF/xmega/drivers/cpu/xmega_reset_cause.h: + +../src/ASF/xmega/drivers/cpu/ccp.h: + +../src/ASF/common/boards/user_board/user_board.h: + +../src/config/conf_board.h: + +../src/ASF/common/boards/board.h: + +../src/ASF/common/services/ioport/ioport.h: + +../src/ASF/common/services/ioport/xmega/ioport.h: + +../src/ASF/xmega/drivers/nvm/nvm.h: + +../src/ASF/xmega/drivers/sleep/sleep.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sleep.h: + +../src/ASF/common/services/sleepmgr/sleepmgr.h: + +../src/ASF/common/services/sleepmgr/xmega/sleepmgr.h: + +../src/config/conf_sleepmgr.h: + +../src/ASF/common/services/sleepmgr/xmega/sleepmgr.h: + +../src/ASF/common/services/clock/sysclk.h: + +../src/config/conf_clock.h: + +../src/ASF/common/services/clock/xmega/sysclk.h: + +../src/ASF/common/services/clock/osc.h: + +../src/ASF/common/services/clock/xmega/osc.h: + +../src/ASF/common/services/clock/pll.h: + +../src/ASF/common/services/clock/xmega/pll.h: + +../src/ASF/common/services/usb/udc/udc.h: + +../src/config/conf_usb.h: + +../src/ASF/common/services/usb/class/vendor/device/udi_vendor_conf.h: + +../src/ASF/common/services/usb/class/vendor/device/udi_vendor.h: + +../src/ASF/common/services/usb/usb_protocol.h: + +../src/ASF/common/services/usb/usb_atmel.h: + +../src/ASF/common/services/usb/class/vendor/usb_protocol_vendor.h: + +../src/ASF/common/services/usb/udc/udd.h: + +../src/ASF/common/services/usb/udc/udc_desc.h: + +../src/ASF/common/services/usb/udc/udi.h: + +../src/ASF/common/services/usb/udc/udc_desc.h: + +../src/ASF/common/services/usb/udc/udi.h: + +../src/ui.h: + +../src/main.h: + +../src/ASF/common/services/usb/udc/udd.h: + +../src/ASF/common/services/usb/class/vendor/device/udi_vendor.h: + +../src/ASF/xmega/utils/status_codes.h: + +../src/ui.h: + +../src/globals.h: + +../src/tiny_adc.h: + +../src/tiny_dma.h: + +../src/tiny_timer.h: + +../src/tiny_dac.h: + +../src/tiny_uart.h: + +../src/tiny_dig.h: diff --git a/AVR Code/USB_BULK_TEST/Release/src/main.o b/AVR Code/USB_BULK_TEST/Release/src/main.o new file mode 100644 index 0000000000000000000000000000000000000000..202940baebf45f817490ee4a1f27806bb66e9d49 GIT binary patch literal 4840 zcma)9U2IfE6h38(7DQ+-|0qyU5d^PoDNsRv3sOzR3YG_>x!m1*Sypy?m%Vp^s*&YM z5{VXUeNq#B(GU|7LwqrYJ{o;gUksXk(ZmOlst-O8>-px++&eq8z-gv)zH`o;IcM&f zotZQH`k!uUY9d8Vbcj+!cdlQo(|D~uQr}e{s1IGQ z)N2DHyXK4%y;ZNh_X(XIoy)x0j?`;)B|D#RN`n5jG~P1SGKL67>gPHx%%p#AHq{4i zh*`zh@jL$?LHzX#Z8eUPsAbHY@2rp~IdOjQdA8m%)_M{4;Lu*59IR1|Xn$|-*7mi# z4x)Db0e4RY#5SV@r$kvsa*&IC+8N6SvPlFmxqyCiK=D0#IsRs3f2j$Vc8$@95)vg zf(A{+5340VQKVDEl;%ogxJAnC)_Sot6J=r;bEMS;xpY z7nDl=P-GU@ZSVuE!`{0`+H@PXYG1CBcDywOO=tHgYg@S8$&M@XmU&kT&+$Js?*@j= zn!K--=m_JLQV!i5ZqIPj^Ek}-Wp0X;zr8Hb{e8y%K42OAVGWc&jMe>p!FUEYMathv z7U*_Y7*Az4YS?|r_y9LW%HO*z(Bs?NMs$N^h;O#kA>Yf~FhL_h&OuHO4BTL;p87-QP9# zhw<=-d{lfEkJtTmGtkFD2kJ2FdZw{^PTHwDeM;ikOB&xREZ6IK`!seX!{2mvXAHX? z)A)Pau-nO4eN)89P|!z)-R^1ZF0)+EqgRfTZW4cA-=*DmcWL*loTo!hgn6;|6)_ZZ zbD1Z<8PG+nxDKTx#iG~O;XEfb&V|s{KCLLZ&r;mG+#r|FEH>z11~c0VgoNR@KOWo zzfhPDr&&rFdN2jdWoS9=m6FxmTU;$KNQ^aZt_MaR0D+7OP;GYfrr-8L%5%IL9#Ut=a1LJoYgq$s|mpu)5 z77a>_v&!NV$d?#h8!e&}5;GM3YX%-O@FfFZHSiAx{@uX;8F;?j)2IZCPoOmt!>oV~oYO!uLNf^|8MN^nL?gNFO)g#q_Df=-OxrU1`8e z>1u=hGWv$GNQryQ_dWN*MB-lrU}sE-=??=FE`oNB9Oux0)8{xb(;qVj_w5%G`x1W zBDk`|J12SKNLg=R7bR>b7qiFj&!CJd;@4>mi@sZN@J_{6XqG?m*x#A^;yWnrkKl1S zp)Fw^gwtrLuLm__Q90dF(@LP0Yimg+~t)PAhAz zV5uGax|oLx>#>+eXRVKU8~lct?*jjL%x?w{CDT@J))RsiXH$j)!TmzyE{{u`;xp#O za-7)n5Fit}R>_OCkQWV{y4EIG#CQCR9E+v2Fga5@Hzmh%Sh$EVA#Ei`s#XuAL`Xx) zMP5$|F(EG{$MhBwV!|*b7ddVdV%o)>`lionJhU@8PQ;Gf!6RP$j)O;xr~&YZt3~pN z1?vMj)(zhgJYvCGfyeyt)4ZJjF~N_j8Te5(1N(bqonTq-mAqJ61i*yYl%M|rmuQ~C literal 0 HcmV?d00001 diff --git a/AVR Code/USB_BULK_TEST/Release/src/tiny_adc.d b/AVR Code/USB_BULK_TEST/Release/src/tiny_adc.d new file mode 100644 index 00000000..16dc2e58 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/Release/src/tiny_adc.d @@ -0,0 +1,215 @@ +src/tiny_adc.d src/tiny_adc.o: ../src/tiny_adc.c ../src/tiny_adc.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdio.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\inttypes.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdarg.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h \ + ../src/asf.h ../src/ASF/xmega/drivers/cpu/ccp.h \ + ../src/ASF/xmega/utils/compiler.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\io.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\iox32a4u.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\portpins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\common.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\version.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\xmega.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\fuse.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\lock.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\builtins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdlib.h \ + ../src/ASF/common/utils/parts.h \ + ../src/ASF/xmega/utils/bit_handling/clz_ctz.h \ + ../src/ASF/xmega/utils/preprocessor/preprocessor.h \ + ../src/ASF/xmega/utils/preprocessor/tpaste.h \ + ../src/ASF/xmega/utils/preprocessor/stringz.h \ + ../src/ASF/xmega/utils/preprocessor/mrepeat.h \ + ../src/ASF/xmega/utils/preprocessor/preprocessor.h \ + ../src/ASF/xmega/utils/progmem.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\pgmspace.h \ + ../src/ASF/common/utils/interrupt.h \ + ../src/ASF/common/utils/interrupt/interrupt_avr8.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\interrupt.h \ + ../src/ASF/xmega/drivers/cpu/xmega_reset_cause.h \ + ../src/ASF/xmega/drivers/cpu/ccp.h \ + ../src/ASF/common/boards/user_board/user_board.h \ + ../src/config/conf_board.h ../src/ASF/common/boards/board.h \ + ../src/ASF/common/services/ioport/ioport.h \ + ../src/ASF/common/services/ioport/xmega/ioport.h \ + ../src/ASF/xmega/drivers/nvm/nvm.h \ + ../src/ASF/xmega/drivers/sleep/sleep.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sleep.h \ + ../src/ASF/common/services/sleepmgr/sleepmgr.h \ + ../src/ASF/common/services/sleepmgr/xmega/sleepmgr.h \ + ../src/config/conf_sleepmgr.h \ + ../src/ASF/common/services/sleepmgr/xmega/sleepmgr.h \ + ../src/ASF/common/services/clock/sysclk.h ../src/config/conf_clock.h \ + ../src/ASF/common/services/clock/xmega/sysclk.h \ + ../src/ASF/common/services/clock/osc.h \ + ../src/ASF/common/services/clock/xmega/osc.h \ + ../src/ASF/common/services/clock/pll.h \ + ../src/ASF/common/services/clock/xmega/pll.h \ + ../src/ASF/common/services/usb/udc/udc.h ../src/config/conf_usb.h \ + ../src/ASF/common/services/usb/class/vendor/device/udi_vendor_conf.h \ + ../src/ASF/common/services/usb/class/vendor/device/udi_vendor.h \ + ../src/ASF/common/services/usb/usb_protocol.h \ + ../src/ASF/common/services/usb/usb_atmel.h \ + ../src/ASF/common/services/usb/class/vendor/usb_protocol_vendor.h \ + ../src/ASF/common/services/usb/udc/udd.h \ + ../src/ASF/common/services/usb/udc/udc_desc.h \ + ../src/ASF/common/services/usb/udc/udi.h \ + ../src/ASF/common/services/usb/udc/udc_desc.h \ + ../src/ASF/common/services/usb/udc/udi.h ../src/ui.h ../src/main.h \ + ../src/ASF/common/services/usb/udc/udd.h \ + ../src/ASF/common/services/usb/class/vendor/device/udi_vendor.h \ + ../src/ASF/xmega/utils/status_codes.h ../src/globals.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\string.h + +../src/tiny_adc.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdio.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\inttypes.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdarg.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h: + +../src/asf.h: + +../src/ASF/xmega/drivers/cpu/ccp.h: + +../src/ASF/xmega/utils/compiler.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\io.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\iox32a4u.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\portpins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\common.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\version.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\xmega.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\fuse.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\lock.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\builtins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdlib.h: + +../src/ASF/common/utils/parts.h: + +../src/ASF/xmega/utils/bit_handling/clz_ctz.h: + +../src/ASF/xmega/utils/preprocessor/preprocessor.h: + +../src/ASF/xmega/utils/preprocessor/tpaste.h: + +../src/ASF/xmega/utils/preprocessor/stringz.h: + +../src/ASF/xmega/utils/preprocessor/mrepeat.h: + +../src/ASF/xmega/utils/preprocessor/preprocessor.h: + +../src/ASF/xmega/utils/progmem.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\pgmspace.h: + +../src/ASF/common/utils/interrupt.h: + +../src/ASF/common/utils/interrupt/interrupt_avr8.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\interrupt.h: + +../src/ASF/xmega/drivers/cpu/xmega_reset_cause.h: + +../src/ASF/xmega/drivers/cpu/ccp.h: + +../src/ASF/common/boards/user_board/user_board.h: + +../src/config/conf_board.h: + +../src/ASF/common/boards/board.h: + +../src/ASF/common/services/ioport/ioport.h: + +../src/ASF/common/services/ioport/xmega/ioport.h: + +../src/ASF/xmega/drivers/nvm/nvm.h: + +../src/ASF/xmega/drivers/sleep/sleep.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sleep.h: + +../src/ASF/common/services/sleepmgr/sleepmgr.h: + +../src/ASF/common/services/sleepmgr/xmega/sleepmgr.h: + +../src/config/conf_sleepmgr.h: + +../src/ASF/common/services/sleepmgr/xmega/sleepmgr.h: + +../src/ASF/common/services/clock/sysclk.h: + +../src/config/conf_clock.h: + +../src/ASF/common/services/clock/xmega/sysclk.h: + +../src/ASF/common/services/clock/osc.h: + +../src/ASF/common/services/clock/xmega/osc.h: + +../src/ASF/common/services/clock/pll.h: + +../src/ASF/common/services/clock/xmega/pll.h: + +../src/ASF/common/services/usb/udc/udc.h: + +../src/config/conf_usb.h: + +../src/ASF/common/services/usb/class/vendor/device/udi_vendor_conf.h: + +../src/ASF/common/services/usb/class/vendor/device/udi_vendor.h: + +../src/ASF/common/services/usb/usb_protocol.h: + +../src/ASF/common/services/usb/usb_atmel.h: + +../src/ASF/common/services/usb/class/vendor/usb_protocol_vendor.h: + +../src/ASF/common/services/usb/udc/udd.h: + +../src/ASF/common/services/usb/udc/udc_desc.h: + +../src/ASF/common/services/usb/udc/udi.h: + +../src/ASF/common/services/usb/udc/udc_desc.h: + +../src/ASF/common/services/usb/udc/udi.h: + +../src/ui.h: + +../src/main.h: + +../src/ASF/common/services/usb/udc/udd.h: + +../src/ASF/common/services/usb/class/vendor/device/udi_vendor.h: + +../src/ASF/xmega/utils/status_codes.h: + +../src/globals.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\string.h: diff --git a/AVR Code/USB_BULK_TEST/Release/src/tiny_adc.o b/AVR Code/USB_BULK_TEST/Release/src/tiny_adc.o new file mode 100644 index 0000000000000000000000000000000000000000..172ef0953542b13cfc6224db16e5508a6c965307 GIT binary patch literal 1736 zcma)6%}*0i5TD&esi8pKD8Xn6yRl9B0qvRy7q(y` zo-AER)SxjQAc4fISI+zuTS5#64`941&g{O|u0Vp5%+CCNGo3f@z3H3m9k?e50&o#v z7^(3hMj~~Xaqk5N&i)q`mYD9CrVGh8w z{9=K5_1IA}>It!c86f&G4t)nM$WYf?iu<^1C+RCXrM&%c~EkCN>hkcjAUk9)#5QVmT1fC z#*0zd!?*9tk0#@)H!!4Y@rag6Msu2x%x3P48~VQMu;0Y8>9n3P_~rhGJ&8GV|A$$w zd+*gB^4Vx%dC~!S7clNaJtz;4cF($3SZy+VUE*py{9SCc8F4-1DdtDLkLumW2;yU? zTzEYV32z>q)qZ&syYglb%cxvwQ2R=SeI^a1PbGk7u}#6mqnWBP>Sy_=-yP z+E7XUpwd}!p&02=RDQ-33nBT9943@QLRNG<_tS$-j3C*7kZMp*0aWV2TkrEBfG@~# z;q^G?*2~wx_73OCO3vz4M*61{ic8Mj-K?Z+?;J<}h6kTU|CR^Se1$zYRPo8#-now7 zYEQfS@!kNf&!^rkB0;U|u&?Aya+Q*tQ}W_E=x31TRL0YM$}r88jP>b`NnBhDlP+{- zNyhpX!*R4S)#p!#5(8Bo9#s2P)pZ73XQ;Q&aUzjH#~SHTHK#v!{0TjmWq_BdzCa#^ zy*(AC`s(cW-c-`uN5-8Osm}c$Heui7pF&G>BsKyNNBfn~r~m3X#$Q6)%6K}j4#sz( Yy~g-%v^}UY4JgV3RPK+EPk$JczwWpR7XSbN literal 0 HcmV?d00001 diff --git a/AVR Code/USB_BULK_TEST/Release/src/tiny_dac.d b/AVR Code/USB_BULK_TEST/Release/src/tiny_dac.d new file mode 100644 index 00000000..6b58ae02 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/Release/src/tiny_dac.d @@ -0,0 +1,213 @@ +src/tiny_dac.d src/tiny_dac.o: ../src/tiny_dac.c ../src/tiny_dac.h \ + ../src/asf.h ../src/ASF/xmega/drivers/cpu/ccp.h \ + ../src/ASF/xmega/utils/compiler.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\io.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\inttypes.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\iox32a4u.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\portpins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\common.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\version.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\xmega.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\fuse.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\lock.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\builtins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdlib.h \ + ../src/ASF/common/utils/parts.h \ + ../src/ASF/xmega/utils/bit_handling/clz_ctz.h \ + ../src/ASF/xmega/utils/preprocessor/preprocessor.h \ + ../src/ASF/xmega/utils/preprocessor/tpaste.h \ + ../src/ASF/xmega/utils/preprocessor/stringz.h \ + ../src/ASF/xmega/utils/preprocessor/mrepeat.h \ + ../src/ASF/xmega/utils/preprocessor/preprocessor.h \ + ../src/ASF/xmega/utils/progmem.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\pgmspace.h \ + ../src/ASF/common/utils/interrupt.h \ + ../src/ASF/common/utils/interrupt/interrupt_avr8.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\interrupt.h \ + ../src/ASF/xmega/drivers/cpu/xmega_reset_cause.h \ + ../src/ASF/xmega/drivers/cpu/ccp.h \ + ../src/ASF/common/boards/user_board/user_board.h \ + ../src/config/conf_board.h ../src/ASF/common/boards/board.h \ + ../src/ASF/common/services/ioport/ioport.h \ + ../src/ASF/common/services/ioport/xmega/ioport.h \ + ../src/ASF/xmega/drivers/nvm/nvm.h \ + ../src/ASF/xmega/drivers/sleep/sleep.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sleep.h \ + ../src/ASF/common/services/sleepmgr/sleepmgr.h \ + ../src/ASF/common/services/sleepmgr/xmega/sleepmgr.h \ + ../src/config/conf_sleepmgr.h \ + ../src/ASF/common/services/sleepmgr/xmega/sleepmgr.h \ + ../src/ASF/common/services/clock/sysclk.h ../src/config/conf_clock.h \ + ../src/ASF/common/services/clock/xmega/sysclk.h \ + ../src/ASF/common/services/clock/osc.h \ + ../src/ASF/common/services/clock/xmega/osc.h \ + ../src/ASF/common/services/clock/pll.h \ + ../src/ASF/common/services/clock/xmega/pll.h \ + ../src/ASF/common/services/usb/udc/udc.h ../src/config/conf_usb.h \ + ../src/ASF/common/services/usb/class/vendor/device/udi_vendor_conf.h \ + ../src/ASF/common/services/usb/class/vendor/device/udi_vendor.h \ + ../src/ASF/common/services/usb/usb_protocol.h \ + ../src/ASF/common/services/usb/usb_atmel.h \ + ../src/ASF/common/services/usb/class/vendor/usb_protocol_vendor.h \ + ../src/ASF/common/services/usb/udc/udd.h \ + ../src/ASF/common/services/usb/udc/udc_desc.h \ + ../src/ASF/common/services/usb/udc/udi.h \ + ../src/ASF/common/services/usb/udc/udc_desc.h \ + ../src/ASF/common/services/usb/udc/udi.h ../src/ui.h ../src/main.h \ + ../src/ASF/common/services/usb/udc/udd.h \ + ../src/ASF/common/services/usb/class/vendor/device/udi_vendor.h \ + ../src/ASF/xmega/utils/status_codes.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdio.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdarg.h \ + ../src/tiny_adc.h + +../src/tiny_dac.h: + +../src/asf.h: + +../src/ASF/xmega/drivers/cpu/ccp.h: + +../src/ASF/xmega/utils/compiler.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\io.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\inttypes.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\iox32a4u.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\portpins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\common.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\version.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\xmega.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\fuse.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\lock.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\builtins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdlib.h: + +../src/ASF/common/utils/parts.h: + +../src/ASF/xmega/utils/bit_handling/clz_ctz.h: + +../src/ASF/xmega/utils/preprocessor/preprocessor.h: + +../src/ASF/xmega/utils/preprocessor/tpaste.h: + +../src/ASF/xmega/utils/preprocessor/stringz.h: + +../src/ASF/xmega/utils/preprocessor/mrepeat.h: + +../src/ASF/xmega/utils/preprocessor/preprocessor.h: + +../src/ASF/xmega/utils/progmem.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\pgmspace.h: + +../src/ASF/common/utils/interrupt.h: + +../src/ASF/common/utils/interrupt/interrupt_avr8.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\interrupt.h: + +../src/ASF/xmega/drivers/cpu/xmega_reset_cause.h: + +../src/ASF/xmega/drivers/cpu/ccp.h: + +../src/ASF/common/boards/user_board/user_board.h: + +../src/config/conf_board.h: + +../src/ASF/common/boards/board.h: + +../src/ASF/common/services/ioport/ioport.h: + +../src/ASF/common/services/ioport/xmega/ioport.h: + +../src/ASF/xmega/drivers/nvm/nvm.h: + +../src/ASF/xmega/drivers/sleep/sleep.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sleep.h: + +../src/ASF/common/services/sleepmgr/sleepmgr.h: + +../src/ASF/common/services/sleepmgr/xmega/sleepmgr.h: + +../src/config/conf_sleepmgr.h: + +../src/ASF/common/services/sleepmgr/xmega/sleepmgr.h: + +../src/ASF/common/services/clock/sysclk.h: + +../src/config/conf_clock.h: + +../src/ASF/common/services/clock/xmega/sysclk.h: + +../src/ASF/common/services/clock/osc.h: + +../src/ASF/common/services/clock/xmega/osc.h: + +../src/ASF/common/services/clock/pll.h: + +../src/ASF/common/services/clock/xmega/pll.h: + +../src/ASF/common/services/usb/udc/udc.h: + +../src/config/conf_usb.h: + +../src/ASF/common/services/usb/class/vendor/device/udi_vendor_conf.h: + +../src/ASF/common/services/usb/class/vendor/device/udi_vendor.h: + +../src/ASF/common/services/usb/usb_protocol.h: + +../src/ASF/common/services/usb/usb_atmel.h: + +../src/ASF/common/services/usb/class/vendor/usb_protocol_vendor.h: + +../src/ASF/common/services/usb/udc/udd.h: + +../src/ASF/common/services/usb/udc/udc_desc.h: + +../src/ASF/common/services/usb/udc/udi.h: + +../src/ASF/common/services/usb/udc/udc_desc.h: + +../src/ASF/common/services/usb/udc/udi.h: + +../src/ui.h: + +../src/main.h: + +../src/ASF/common/services/usb/udc/udd.h: + +../src/ASF/common/services/usb/class/vendor/device/udi_vendor.h: + +../src/ASF/xmega/utils/status_codes.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdio.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdarg.h: + +../src/tiny_adc.h: diff --git a/AVR Code/USB_BULK_TEST/Release/src/tiny_dac.o b/AVR Code/USB_BULK_TEST/Release/src/tiny_dac.o new file mode 100644 index 0000000000000000000000000000000000000000..598d724a7e29cfedf531ddc22d47cc188ffa2993 GIT binary patch literal 1056 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 a{CQ990MGlbfpFy6(xUhrP<;O1*Z&_o^C|oQ literal 0 HcmV?d00001 diff --git a/AVR Code/USB_BULK_TEST/Release/src/tiny_timer.d b/AVR Code/USB_BULK_TEST/Release/src/tiny_timer.d new file mode 100644 index 00000000..ddd9d913 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/Release/src/tiny_timer.d @@ -0,0 +1,213 @@ +src/tiny_timer.d src/tiny_timer.o: ../src/tiny_timer.c \ + ../src/tiny_timer.h ../src/asf.h ../src/ASF/xmega/drivers/cpu/ccp.h \ + ../src/ASF/xmega/utils/compiler.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\io.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\inttypes.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\iox32a4u.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\portpins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\common.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\version.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\xmega.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\fuse.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\lock.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\builtins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdlib.h \ + ../src/ASF/common/utils/parts.h \ + ../src/ASF/xmega/utils/bit_handling/clz_ctz.h \ + ../src/ASF/xmega/utils/preprocessor/preprocessor.h \ + ../src/ASF/xmega/utils/preprocessor/tpaste.h \ + ../src/ASF/xmega/utils/preprocessor/stringz.h \ + ../src/ASF/xmega/utils/preprocessor/mrepeat.h \ + ../src/ASF/xmega/utils/preprocessor/preprocessor.h \ + ../src/ASF/xmega/utils/progmem.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\pgmspace.h \ + ../src/ASF/common/utils/interrupt.h \ + ../src/ASF/common/utils/interrupt/interrupt_avr8.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\interrupt.h \ + ../src/ASF/xmega/drivers/cpu/xmega_reset_cause.h \ + ../src/ASF/xmega/drivers/cpu/ccp.h \ + ../src/ASF/common/boards/user_board/user_board.h \ + ../src/config/conf_board.h ../src/ASF/common/boards/board.h \ + ../src/ASF/common/services/ioport/ioport.h \ + ../src/ASF/common/services/ioport/xmega/ioport.h \ + ../src/ASF/xmega/drivers/nvm/nvm.h \ + ../src/ASF/xmega/drivers/sleep/sleep.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sleep.h \ + ../src/ASF/common/services/sleepmgr/sleepmgr.h \ + ../src/ASF/common/services/sleepmgr/xmega/sleepmgr.h \ + ../src/config/conf_sleepmgr.h \ + ../src/ASF/common/services/sleepmgr/xmega/sleepmgr.h \ + ../src/ASF/common/services/clock/sysclk.h ../src/config/conf_clock.h \ + ../src/ASF/common/services/clock/xmega/sysclk.h \ + ../src/ASF/common/services/clock/osc.h \ + ../src/ASF/common/services/clock/xmega/osc.h \ + ../src/ASF/common/services/clock/pll.h \ + ../src/ASF/common/services/clock/xmega/pll.h \ + ../src/ASF/common/services/usb/udc/udc.h ../src/config/conf_usb.h \ + ../src/ASF/common/services/usb/class/vendor/device/udi_vendor_conf.h \ + ../src/ASF/common/services/usb/class/vendor/device/udi_vendor.h \ + ../src/ASF/common/services/usb/usb_protocol.h \ + ../src/ASF/common/services/usb/usb_atmel.h \ + ../src/ASF/common/services/usb/class/vendor/usb_protocol_vendor.h \ + ../src/ASF/common/services/usb/udc/udd.h \ + ../src/ASF/common/services/usb/udc/udc_desc.h \ + ../src/ASF/common/services/usb/udc/udi.h \ + ../src/ASF/common/services/usb/udc/udc_desc.h \ + ../src/ASF/common/services/usb/udc/udi.h ../src/ui.h ../src/main.h \ + ../src/ASF/common/services/usb/udc/udd.h \ + ../src/ASF/common/services/usb/class/vendor/device/udi_vendor.h \ + ../src/ASF/xmega/utils/status_codes.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdio.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdarg.h \ + ../src/globals.h + +../src/tiny_timer.h: + +../src/asf.h: + +../src/ASF/xmega/drivers/cpu/ccp.h: + +../src/ASF/xmega/utils/compiler.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\io.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\inttypes.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\iox32a4u.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\portpins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\common.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\version.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\xmega.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\fuse.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\lock.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\builtins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdlib.h: + +../src/ASF/common/utils/parts.h: + +../src/ASF/xmega/utils/bit_handling/clz_ctz.h: + +../src/ASF/xmega/utils/preprocessor/preprocessor.h: + +../src/ASF/xmega/utils/preprocessor/tpaste.h: + +../src/ASF/xmega/utils/preprocessor/stringz.h: + +../src/ASF/xmega/utils/preprocessor/mrepeat.h: + +../src/ASF/xmega/utils/preprocessor/preprocessor.h: + +../src/ASF/xmega/utils/progmem.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\pgmspace.h: + +../src/ASF/common/utils/interrupt.h: + +../src/ASF/common/utils/interrupt/interrupt_avr8.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\interrupt.h: + +../src/ASF/xmega/drivers/cpu/xmega_reset_cause.h: + +../src/ASF/xmega/drivers/cpu/ccp.h: + +../src/ASF/common/boards/user_board/user_board.h: + +../src/config/conf_board.h: + +../src/ASF/common/boards/board.h: + +../src/ASF/common/services/ioport/ioport.h: + +../src/ASF/common/services/ioport/xmega/ioport.h: + +../src/ASF/xmega/drivers/nvm/nvm.h: + +../src/ASF/xmega/drivers/sleep/sleep.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sleep.h: + +../src/ASF/common/services/sleepmgr/sleepmgr.h: + +../src/ASF/common/services/sleepmgr/xmega/sleepmgr.h: + +../src/config/conf_sleepmgr.h: + +../src/ASF/common/services/sleepmgr/xmega/sleepmgr.h: + +../src/ASF/common/services/clock/sysclk.h: + +../src/config/conf_clock.h: + +../src/ASF/common/services/clock/xmega/sysclk.h: + +../src/ASF/common/services/clock/osc.h: + +../src/ASF/common/services/clock/xmega/osc.h: + +../src/ASF/common/services/clock/pll.h: + +../src/ASF/common/services/clock/xmega/pll.h: + +../src/ASF/common/services/usb/udc/udc.h: + +../src/config/conf_usb.h: + +../src/ASF/common/services/usb/class/vendor/device/udi_vendor_conf.h: + +../src/ASF/common/services/usb/class/vendor/device/udi_vendor.h: + +../src/ASF/common/services/usb/usb_protocol.h: + +../src/ASF/common/services/usb/usb_atmel.h: + +../src/ASF/common/services/usb/class/vendor/usb_protocol_vendor.h: + +../src/ASF/common/services/usb/udc/udd.h: + +../src/ASF/common/services/usb/udc/udc_desc.h: + +../src/ASF/common/services/usb/udc/udi.h: + +../src/ASF/common/services/usb/udc/udc_desc.h: + +../src/ASF/common/services/usb/udc/udi.h: + +../src/ui.h: + +../src/main.h: + +../src/ASF/common/services/usb/udc/udd.h: + +../src/ASF/common/services/usb/class/vendor/device/udi_vendor.h: + +../src/ASF/xmega/utils/status_codes.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdio.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdarg.h: + +../src/globals.h: diff --git a/AVR Code/USB_BULK_TEST/Release/src/tiny_timer.o b/AVR Code/USB_BULK_TEST/Release/src/tiny_timer.o new file mode 100644 index 0000000000000000000000000000000000000000..a204be70dbdbc5dcf4b6d733d0bc18f739db8b50 GIT binary patch literal 1520 zcmah|Ur1A76#w?8a#_tuRN%u_NGaHL{(~XZtYNMY75@a)!`C)%+hTLF-9&xJyIora zmiO)=QUpSRP|uNX;&Twb^qij{)`Niq34_4S+3xk;eDT1!zu!6M_x-uwcfP64?pqd% zh3IA>1H_03`3u1o6kAJzI#Nk02>Y?ar0mR;Bu&G2S`xFbrbLPTEHZIBCspTPY-c4` zp0Pbv%REvGYm(09p8Zl-esO;BT#jw-K^Ajby!D%jSuq4NZ2n==MiwermX|~(Z=j-T z$+hH>D(2h;XTkZ|S#Z@hs(!UsrRuD@psuOws=M%Y`TMe{5c1q>*%g%r>q|*gu3E_| z@(#!cYeXgHkd?UOrq{kR?O*61yB^4RA#)otGfZY=H4ERIQ+4CGvbxuA-#tA~c64nJ zVnh4E60Esb`Nblt;|^J!a5&|4WldR7W)-URDt@I=amvmWr|gz5%#p4@pxsk<<8D9o z(QsU#T|Gl|FqKL~Vxjm5ZQ)wEHrmwI++6Qz<$PQdAzWr6DTKm+Lb{AGoeBK7K)B(M z5F%VSlOY@?I3YeVL4|mdPty!9JQ*cinooqvHA=_$h>%KCUkl+PsbrEL5%eoR5^F$# zJ#k!9mV3b%ruWN5O=mkocLnMd;792iwE4{Ij%jlv=<5a#={`cdf&$HST>xUco&+2` zM#wur2RP7D?G)gBa2(?WM~guK7jj@&LwAAe|A56ekc=SF3^izo))Fg!KEWUlBu_$k z1|0WP1&;eL&-V=qPa&t9KA#@zXwKV7abM3P+DfY%8QXt5!Md%qhwBHD;{JKy*G#bo zxZf1l12=l0xNkli0_)>gV^4?oW4-}gA5Y#e8#zJlXd&KpHJr`^Eyg>o27OeE5%AnH zhhk#91TI1-9q6M$O3S3XO!_;!N+b~IE1{4arD;A|;*)$jr3J=B+LJQBqi7-(4kc(Z zHO!N~fgvh{(or5?)g^E{ZVc=)xD}cT&#M{S2HXeO4sOQ=0>l1AO#-mT#IX-C9|n8~ fj$JflWMqH=MuuPp1doA11ju;?lr#Y=&|u(VU}t#n{KJFh#{RnI<_Ax{J!oj` z%4%rtf8WyF@wBPC;Za-rgI7Nuw7h8rO1CwOH+4L0Y37&;(bHbv+}!Y_Ve$cvj;A2K z?cE$x8Qh(ntrRpI!-C>1;*&B<;@$m1<3sZEbCNR>GxOq&^-T0k;|)!Xj5HNY^eprY z85s16D|1T{lYn$d5rocwu}V@aN*MG~5=#;p^pc8;8T3E`dL@~8mGPyCMJ4gYsU@Wa z$fCssnJ~fR{M_8syb@SQ5T>PpN47@;TJGhdM|HXi8TO__bkZq5|*8s8+;rsDFESw-pKK{1>G7xS;cMr(72*Aw1 zir@fQ%)r#+2^9g^Ap{JaNGKl^S3)55@bs&f%n%dp&Yn5&?FD$BXR%$CgY$$ literal 0 HcmV?d00001 diff --git a/AVR Code/USB_BULK_TEST/USB_BULK_TEST.cproj b/AVR Code/USB_BULK_TEST/USB_BULK_TEST.cproj new file mode 100644 index 00000000..66ffcb4c --- /dev/null +++ b/AVR Code/USB_BULK_TEST/USB_BULK_TEST.cproj @@ -0,0 +1,569 @@ + + + + 2.0 + 6.2 + com.Atmel.AVRGCC8.C + {bd2aa8d9-491b-4ecd-9255-825eaabc7ba4} + atxmega32a4u + xmegaau + Executable + C + $(MSBuildProjectName) + .elf + $(MSBuildProjectDirectory)\$(Configuration) + USB_BULK_TEST + USB_BULK_TEST + USB_BULK_TEST + Native + true + false + true + true + 0x20000000 + + true + exception_table + 2 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + com.atmel.avrdbg.tool.atmelice + + + + 7500000 + 7500000 + + PDI + + com.atmel.avrdbg.tool.atmelice + J41800006314 + Atmel-ICE + + PDI + + + + + PDI + + com.atmel.avrdbg.tool.simulator + + + Simulator + + + + + + True + True + True + True + True + False + + + NDEBUG + BOARD=USER_BOARD + + + + + ../common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained + ../common/services/usb/class/vendor/device/example + ../src/ASF/common/services/usb/udc + ../src/ASF/xmega/drivers/nvm + ../src/ASF/common/services/sleepmgr + ../src/ASF/common/services/clock + ../src/ASF/xmega/drivers/sleep + ../src/ASF/xmega/drivers/usb + ../src/ASF/xmega/drivers/cpu + ../src/ASF/common/services/usb/class/vendor + ../src/ASF/common/services/usb/class/vendor/device + ../src/ASF/common/services/usb + ../common/applications/user_application/user_board/config + ../src/ASF/xmega/utils + ../src/config + ../src/ASF/common/boards + ../src/ASF/xmega/utils/preprocessor + ../src/ASF/common/utils + ../src + ../src/ASF/common/boards/user_board + ../src/ASF/common/services/ioport + + + Optimize for size (-Os) + -fdata-sections + True + True + True + -std=gnu99 -fno-strict-aliasing -Wstrict-prototypes -Wmissing-prototypes -Werror-implicit-function-declaration -Wpointer-arith -mrelax + + + libm + + + -Wl,--relax + -mrelax -DBOARD=USER_BOARD + + + ../common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained + ../common/services/usb/class/vendor/device/example + ../src/ASF/common/services/usb/udc + ../src/ASF/xmega/drivers/nvm + ../src/ASF/common/services/sleepmgr + ../src/ASF/common/services/clock + ../src/ASF/xmega/drivers/sleep + ../src/ASF/xmega/drivers/usb + ../src/ASF/xmega/drivers/cpu + ../src/ASF/common/services/usb/class/vendor + ../src/ASF/common/services/usb/class/vendor/device + ../src/ASF/common/services/usb + ../common/applications/user_application/user_board/config + ../src/ASF/xmega/utils + ../src/config + ../src/ASF/common/boards + ../src/ASF/xmega/utils/preprocessor + ../src/ASF/common/utils + ../src + ../src/ASF/common/boards/user_board + ../src/ASF/common/services/ioport + + + + + + + + + True + True + True + True + True + False + + + DEBUG + BOARD=USER_BOARD + + + + + ../common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained + ../common/services/usb/class/vendor/device/example + ../src/ASF/common/services/usb/udc + ../src/ASF/xmega/drivers/nvm + ../src/ASF/common/services/sleepmgr + ../src/ASF/common/services/clock + ../src/ASF/xmega/drivers/sleep + ../src/ASF/xmega/drivers/usb + ../src/ASF/xmega/drivers/cpu + ../src/ASF/common/services/usb/class/vendor + ../src/ASF/common/services/usb/class/vendor/device + ../src/ASF/common/services/usb + ../common/applications/user_application/user_board/config + ../src/ASF/xmega/utils + ../src/config + ../src/ASF/common/boards + ../src/ASF/xmega/utils/preprocessor + ../src/ASF/common/utils + ../src + ../src/ASF/common/boards/user_board + ../src/ASF/common/services/ioport + + + Optimize (-O1) + -fdata-sections + True + True + Maximum (-g3) + True + -std=gnu99 -fno-strict-aliasing -Wstrict-prototypes -Wmissing-prototypes -Werror-implicit-function-declaration -Wpointer-arith -mrelax + + + libm + + + -Wl,--relax + -mrelax -DBOARD=USER_BOARD + + + ../common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained + ../common/services/usb/class/vendor/device/example + ../src/ASF/common/services/usb/udc + ../src/ASF/xmega/drivers/nvm + ../src/ASF/common/services/sleepmgr + ../src/ASF/common/services/clock + ../src/ASF/xmega/drivers/sleep + ../src/ASF/xmega/drivers/usb + ../src/ASF/xmega/drivers/cpu + ../src/ASF/common/services/usb/class/vendor + ../src/ASF/common/services/usb/class/vendor/device + ../src/ASF/common/services/usb + ../common/applications/user_application/user_board/config + ../src/ASF/xmega/utils + ../src/config + ../src/ASF/common/boards + ../src/ASF/xmega/utils/preprocessor + ../src/ASF/common/utils + ../src + ../src/ASF/common/boards/user_board + ../src/ASF/common/services/ioport + + + Default (-Wa,-g) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + + \ No newline at end of file diff --git a/AVR Code/USB_BULK_TEST/src/ASF/common/boards/board.h b/AVR Code/USB_BULK_TEST/src/ASF/common/boards/board.h new file mode 100644 index 00000000..63d76ae9 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/common/boards/board.h @@ -0,0 +1,398 @@ +/** + * \file + * + * \brief Standard board header file. + * + * This file includes the appropriate board header file according to the + * defined board (parameter BOARD). + * + * Copyright (c) 2009-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ + +#ifndef _BOARD_H_ +#define _BOARD_H_ + +/** + * \defgroup group_common_boards Generic board support + * + * The generic board support module includes board-specific definitions + * and function prototypes, such as the board initialization function. + * + * \{ + */ + +#include "compiler.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +/*! \name Base Boards + */ +//! @{ +#define EVK1100 1 //!< AT32UC3A EVK1100 board. +#define EVK1101 2 //!< AT32UC3B EVK1101 board. +#define UC3C_EK 3 //!< AT32UC3C UC3C-EK board. +#define EVK1104 4 //!< AT32UC3A3 EVK1104 board. +#define EVK1105 5 //!< AT32UC3A EVK1105 board. +#define STK600_RCUC3L0 6 //!< STK600 RCUC3L0 board. +#define UC3L_EK 7 //!< AT32UC3L-EK board. +#define XPLAIN 8 //!< ATxmega128A1 Xplain board. +#define STK600_RC064X 10 //!< ATxmega256A3 STK600 board. +#define STK600_RC100X 11 //!< ATxmega128A1 STK600 board. +#define UC3_A3_XPLAINED 13 //!< ATUC3A3 UC3-A3 Xplained board. +#define UC3_L0_XPLAINED 15 //!< ATUC3L0 UC3-L0 Xplained board. +#define STK600_RCUC3D 16 //!< STK600 RCUC3D board. +#define STK600_RCUC3C0 17 //!< STK600 RCUC3C board. +#define XMEGA_B1_XPLAINED 18 //!< ATxmega128B1 Xplained board. +#define XMEGA_A1_XPLAINED 19 //!< ATxmega128A1 Xplain-A1 board. +#define XMEGA_A1U_XPLAINED_PRO 20 //!< ATxmega128A1U XMEGA-A1U Xplained Pro board. +#define STK600_RCUC3L4 21 //!< ATUCL4 STK600 board. +#define UC3_L0_XPLAINED_BC 22 //!< ATUC3L0 UC3-L0 Xplained board controller board. +#define MEGA1284P_XPLAINED_BC 23 //!< ATmega1284P-Xplained board controller board. +#define STK600_RC044X 24 //!< STK600 with RC044X routing card board. +#define STK600_RCUC3B0 25 //!< STK600 RCUC3B0 board. +#define UC3_L0_QT600 26 //!< QT600 UC3L0 MCU board. +#define XMEGA_A3BU_XPLAINED 27 //!< ATxmega256A3BU Xplained board. +#define STK600_RC064X_LCDX 28 //!< XMEGAB3 STK600 RC064X LCDX board. +#define STK600_RC100X_LCDX 29 //!< XMEGAB1 STK600 RC100X LCDX board. +#define UC3B_BOARD_CONTROLLER 30 //!< AT32UC3B1 board controller for Atmel boards. +#define RZ600 31 //!< AT32UC3A RZ600 MCU board. +#define SAM3S_EK 32 //!< SAM3S-EK board. +#define SAM3U_EK 33 //!< SAM3U-EK board. +#define SAM3X_EK 34 //!< SAM3X-EK board. +#define SAM3N_EK 35 //!< SAM3N-EK board. +#define SAM3S_EK2 36 //!< SAM3S-EK2 board. +#define SAM4S_EK 37 //!< SAM4S-EK board. +#define STK600_RCUC3A0 38 //!< STK600 RCUC3A0 board. +#define STK600_MEGA 39 //!< STK600 MEGA board. +#define MEGA_1284P_XPLAINED 40 //!< ATmega1284P Xplained board. +#define SAM4S_XPLAINED 41 //!< SAM4S Xplained board. +#define ATXMEGA128A1_QT600 42 //!< QT600 ATXMEGA128A1 MCU board. +#define ARDUINO_DUE_X 43 //!< Arduino Due/X board. +#define STK600_RCUC3L3 44 //!< ATUCL3 STK600 board. +#define SAM4L_EK 45 //!< SAM4L-EK board. +#define STK600_MEGA_RF 46 //!< STK600 MEGA RF EVK board. +#define XMEGA_C3_XPLAINED 47 //!< ATxmega384C3 Xplained board. +#define STK600_RC032X 48 //!< STK600 with RC032X routing card board. +#define SAM4S_EK2 49 //!< SAM4S-EK2 board. +#define XMEGA_E5_XPLAINED 50 //!< ATxmega32E5 Xplained board. +#define SAM4E_EK 51 //!< SAM4E-EK board. +#define ATMEGA256RFR2_XPLAINED_PRO 52 //!< ATmega256RFR2 Xplained Pro board. +#define SAM4S_XPLAINED_PRO 53 //!< SAM4S Xplained Pro board. +#define SAM4L_XPLAINED_PRO 54 //!< SAM4L Xplained Pro board. +#define ATMEGA256RFR2_ZIGBIT 55 //!< ATmega256RFR2 zigbit. +#define XMEGA_RF233_ZIGBIT 56 //!< ATxmega256A3U with AT86RF233 Zigbit. +#define XMEGA_RF212B_ZIGBIT 57 //!< ATxmega256A3U with AT86RF212B Zigbit. +#define SAM4S_WPIR_RD 58 //!< SAM4S-WPIR-RD board. +#define SAMD20_XPLAINED_PRO 59 //!< SAM D20 Xplained Pro board. +#define SAM4L8_XPLAINED_PRO 60 //!< SAM4L8 Xplained Pro board. +#define SAM4N_XPLAINED_PRO 61 //!< SAM4N Xplained Pro board. +#define XMEGA_A3_REB_CBB 62 //!< XMEGA REB Controller Base board. +#define ATMEGARFX_RCB 63 //!< RFR2 & RFA1 RCB. +#define SAM4C_EK 64 //!< SAM4C-EK board. +#define RCB256RFR2_XPRO 65 //!< RFR2 RCB Xplained Pro board. +#define SAMG53_XPLAINED_PRO 66 //!< SAMG53 Xplained Pro board. +#define SAM4CP16BMB 67 //!< SAM4CP16BMB board. +#define SAM4E_XPLAINED_PRO 68 //!< SAM4E Xplained Pro board. +#define SAMD21_XPLAINED_PRO 69 //!< SAM D21 Xplained Pro board. +#define SAMR21_XPLAINED_PRO 70 //!< SAM R21 Xplained Pro board. +#define SAM4CMP_DB 71 //!< SAM4CMP demo board. +#define SAM4CMS_DB 72 //!< SAM4CMS demo board. +#define ATPL230AMB 73 //!< ATPL230AMB board. +#define SAMD11_XPLAINED_PRO 74 //!< SAM D11 Xplained Pro board. +#define SAMG55_XPLAINED_PRO 75 //!< SAMG55 Xplained Pro board. +#define SAML21_XPLAINED_PRO 76 //!< SAM L21 Xplained Pro board. +#define SAMD10_XPLAINED_MINI 77 //!< SAM D10 Xplained Mini board. +#define SAMW25_XPLAINED_PRO 79 //!< SAMW25 Xplained Pro board. +#define SIMULATOR_XMEGA_A1 97 //!< Simulator for XMEGA A1 devices. +#define AVR_SIMULATOR_UC3 98 //!< Simulator for the AVR UC3 device family. +#define USER_BOARD 99 //!< User-reserved board (if any). +#define DUMMY_BOARD 100 //!< Dummy board to support board-independent applications (e.g. bootloader). +//! @} + +/*! \name Extension Boards + */ +//! @{ +#define EXT1102 1 //!< AT32UC3B EXT1102 board +#define MC300 2 //!< AT32UC3 MC300 board +#define SENSORS_XPLAINED_INERTIAL_1 3 //!< Xplained inertial sensor board 1 +#define SENSORS_XPLAINED_INERTIAL_2 4 //!< Xplained inertial sensor board 2 +#define SENSORS_XPLAINED_PRESSURE_1 5 //!< Xplained pressure sensor board +#define SENSORS_XPLAINED_LIGHTPROX_1 6 //!< Xplained light & proximity sensor board +#define SENSORS_XPLAINED_INERTIAL_A1 7 //!< Xplained inertial sensor board "A" +#define RZ600_AT86RF231 8 //!< AT86RF231 RF board in RZ600 +#define RZ600_AT86RF230B 9 //!< AT86RF230B RF board in RZ600 +#define RZ600_AT86RF212 10 //!< AT86RF212 RF board in RZ600 +#define SENSORS_XPLAINED_BREADBOARD 11 //!< Xplained sensor development breadboard +#define SECURITY_XPLAINED 12 //!< Xplained ATSHA204 board +#define USER_EXT_BOARD 99 //!< User-reserved extension board (if any). +//! @} + +#if BOARD == EVK1100 +# include "evk1100/evk1100.h" +#elif BOARD == EVK1101 +# include "evk1101/evk1101.h" +#elif BOARD == UC3C_EK +# include "uc3c_ek/uc3c_ek.h" +#elif BOARD == EVK1104 +# include "evk1104/evk1104.h" +#elif BOARD == EVK1105 +# include "evk1105/evk1105.h" +#elif BOARD == STK600_RCUC3L0 +# include "stk600/rcuc3l0/stk600_rcuc3l0.h" +#elif BOARD == UC3L_EK +# include "uc3l_ek/uc3l_ek.h" +#elif BOARD == STK600_RCUC3L4 +# include "stk600/rcuc3l4/stk600_rcuc3l4.h" +#elif BOARD == XPLAIN +# include "xplain/xplain.h" +#elif BOARD == STK600_MEGA + /*No header-file to include*/ +#elif BOARD == STK600_MEGA_RF +# include "stk600.h" +#elif BOARD == ATMEGA256RFR2_XPLAINED_PRO +# include "atmega256rfr2_xplained_pro/atmega256rfr2_xplained_pro.h" +#elif BOARD == ATMEGA256RFR2_ZIGBIT +# include "atmega256rfr2_zigbit/atmega256rfr2_zigbit.h" +#elif BOARD == STK600_RC032X +# include "stk600/rc032x/stk600_rc032x.h" +#elif BOARD == STK600_RC044X +# include "stk600/rc044x/stk600_rc044x.h" +#elif BOARD == STK600_RC064X +# include "stk600/rc064x/stk600_rc064x.h" +#elif BOARD == STK600_RC100X +# include "stk600/rc100x/stk600_rc100x.h" +#elif BOARD == UC3_A3_XPLAINED +# include "uc3_a3_xplained/uc3_a3_xplained.h" +#elif BOARD == UC3_L0_XPLAINED +# include "uc3_l0_xplained/uc3_l0_xplained.h" +#elif BOARD == STK600_RCUC3B0 +# include "stk600/rcuc3b0/stk600_rcuc3b0.h" +#elif BOARD == STK600_RCUC3D +# include "stk600/rcuc3d/stk600_rcuc3d.h" +#elif BOARD == STK600_RCUC3C0 +# include "stk600/rcuc3c0/stk600_rcuc3c0.h" +#elif BOARD == SAMG53_XPLAINED_PRO +# include "samg53_xplained_pro/samg53_xplained_pro.h" +#elif BOARD == SAMG55_XPLAINED_PRO +# include "samg55_xplained_pro/samg55_xplained_pro.h" +#elif BOARD == XMEGA_B1_XPLAINED +# include "xmega_b1_xplained/xmega_b1_xplained.h" +#elif BOARD == STK600_RC064X_LCDX +# include "stk600/rc064x_lcdx/stk600_rc064x_lcdx.h" +#elif BOARD == STK600_RC100X_LCDX +# include "stk600/rc100x_lcdx/stk600_rc100x_lcdx.h" +#elif BOARD == XMEGA_A1_XPLAINED +# include "xmega_a1_xplained/xmega_a1_xplained.h" +#elif BOARD == XMEGA_A1U_XPLAINED_PRO +# include "xmega_a1u_xplained_pro/xmega_a1u_xplained_pro.h" +#elif BOARD == UC3_L0_XPLAINED_BC +# include "uc3_l0_xplained_bc/uc3_l0_xplained_bc.h" +#elif BOARD == SAM3S_EK +# include "sam3s_ek/sam3s_ek.h" +# include "system_sam3s.h" +#elif BOARD == SAM3S_EK2 +# include "sam3s_ek2/sam3s_ek2.h" +# include "system_sam3sd8.h" +#elif BOARD == SAM3U_EK +# include "sam3u_ek/sam3u_ek.h" +# include "system_sam3u.h" +#elif BOARD == SAM3X_EK +# include "sam3x_ek/sam3x_ek.h" +# include "system_sam3x.h" +#elif BOARD == SAM3N_EK +# include "sam3n_ek/sam3n_ek.h" +# include "system_sam3n.h" +#elif BOARD == SAM4S_EK +# include "sam4s_ek/sam4s_ek.h" +# include "system_sam4s.h" +#elif BOARD == SAM4S_WPIR_RD +# include "sam4s_wpir_rd/sam4s_wpir_rd.h" +# include "system_sam4s.h" +#elif BOARD == SAM4S_XPLAINED +# include "sam4s_xplained/sam4s_xplained.h" +# include "system_sam4s.h" +#elif BOARD == SAM4S_EK2 +# include "sam4s_ek2/sam4s_ek2.h" +# include "system_sam4s.h" +#elif BOARD == MEGA_1284P_XPLAINED + /*No header-file to include*/ +#elif BOARD == ARDUINO_DUE_X +# include "arduino_due_x/arduino_due_x.h" +# include "system_sam3x.h" +#elif BOARD == SAM4L_EK +# include "sam4l_ek/sam4l_ek.h" +#elif BOARD == SAM4E_EK +# include "sam4e_ek/sam4e_ek.h" +#elif BOARD == SAMD20_XPLAINED_PRO +# include "samd20_xplained_pro/samd20_xplained_pro.h" +#elif BOARD == SAMD21_XPLAINED_PRO +# include "samd21_xplained_pro/samd21_xplained_pro.h" +#elif BOARD == SAMR21_XPLAINED_PRO +# include "samr21_xplained_pro/samr21_xplained_pro.h" +#elif BOARD == SAMD11_XPLAINED_PRO +# include "samd11_xplained_pro/samd11_xplained_pro.h" +#elif BOARD == SAML21_XPLAINED_PRO +# include "saml21_xplained_pro/saml21_xplained_pro.h" +#elif BOARD == SAMD10_XPLAINED_MINI +# include "samd10_xplained_mini/samd10_xplained_mini.h" +#elif BOARD == SAM4N_XPLAINED_PRO +# include "sam4n_xplained_pro/sam4n_xplained_pro.h" +#elif BOARD == SAMW25_XPLAINED_PRO +# include "samw25_xplained_pro/samw25_xplained_pro.h" +#elif BOARD == MEGA1284P_XPLAINED_BC +# include "mega1284p_xplained_bc/mega1284p_xplained_bc.h" +#elif BOARD == UC3_L0_QT600 +# include "uc3_l0_qt600/uc3_l0_qt600.h" +#elif BOARD == XMEGA_A3BU_XPLAINED +# include "xmega_a3bu_xplained/xmega_a3bu_xplained.h" +#elif BOARD == XMEGA_E5_XPLAINED +# include "xmega_e5_xplained/xmega_e5_xplained.h" +#elif BOARD == UC3B_BOARD_CONTROLLER +# include "uc3b_board_controller/uc3b_board_controller.h" +#elif BOARD == RZ600 +# include "rz600/rz600.h" +#elif BOARD == STK600_RCUC3A0 +# include "stk600/rcuc3a0/stk600_rcuc3a0.h" +#elif BOARD == ATXMEGA128A1_QT600 +# include "atxmega128a1_qt600/atxmega128a1_qt600.h" +#elif BOARD == STK600_RCUC3L3 +# include "stk600/rcuc3l3/stk600_rcuc3l3.h" +#elif BOARD == SAM4S_XPLAINED_PRO +# include "sam4s_xplained_pro/sam4s_xplained_pro.h" +#elif BOARD == SAM4L_XPLAINED_PRO +# include "sam4l_xplained_pro/sam4l_xplained_pro.h" +#elif BOARD == SAM4L8_XPLAINED_PRO +# include "sam4l8_xplained_pro/sam4l8_xplained_pro.h" +#elif BOARD == SAM4C_EK +# include "sam4c_ek/sam4c_ek.h" +#elif BOARD == SAM4CMP_DB +# include "sam4cmp_db/sam4cmp_db.h" +#elif BOARD == SAM4CMS_DB +# include "sam4cms_db/sam4cms_db.h" +#elif BOARD == SAM4CP16BMB +# include "sam4cp16bmb/sam4cp16bmb.h" +#elif BOARD == ATPL230AMB +# include "atpl230amb/atpl230amb.h" +#elif BOARD == SIMULATOR_XMEGA_A1 +# include "simulator/xmega_a1/simulator_xmega_a1.h" +#elif BOARD == XMEGA_C3_XPLAINED +# include "xmega_c3_xplained/xmega_c3_xplained.h" +#elif BOARD == XMEGA_RF233_ZIGBIT +# include "xmega_rf233_zigbit/xmega_rf233_zigbit.h" +#elif BOARD == XMEGA_A3_REB_CBB +# include "xmega_a3_reb_cbb/xmega_a3_reb_cbb.h" +#elif BOARD == ATMEGARFX_RCB +# include "atmegarfx_rcb/atmegarfx_rcb.h" +#elif BOARD == RCB256RFR2_XPRO +# include "atmega256rfr2_rcb_xpro/atmega256rfr2_rcb_xpro.h" +#elif BOARD == XMEGA_RF212B_ZIGBIT +# include "xmega_rf212b_zigbit/xmega_rf212b_zigbit.h" +#elif BOARD == SAM4E_XPLAINED_PRO +# include "sam4e_xplained_pro/sam4e_xplained_pro.h" +#elif BOARD == AVR_SIMULATOR_UC3 +# include "avr_simulator_uc3/avr_simulator_uc3.h" +#elif BOARD == USER_BOARD + // User-reserved area: #include the header file of your board here (if any). +# include "user_board.h" +#elif BOARD == DUMMY_BOARD +# include "dummy/dummy_board.h" +#else +# error No known Atmel board defined +#endif + +#if (defined EXT_BOARD) +# if EXT_BOARD == MC300 +# include "mc300/mc300.h" +# elif (EXT_BOARD == SENSORS_XPLAINED_INERTIAL_1) || \ + (EXT_BOARD == SENSORS_XPLAINED_INERTIAL_2) || \ + (EXT_BOARD == SENSORS_XPLAINED_INERTIAL_A1) || \ + (EXT_BOARD == SENSORS_XPLAINED_PRESSURE_1) || \ + (EXT_BOARD == SENSORS_XPLAINED_LIGHTPROX_1) || \ + (EXT_BOARD == SENSORS_XPLAINED_BREADBOARD) +# include "sensors_xplained/sensors_xplained.h" +# elif EXT_BOARD == RZ600_AT86RF231 +# include "at86rf231/at86rf231.h" +# elif EXT_BOARD == RZ600_AT86RF230B +# include "at86rf230b/at86rf230b.h" +# elif EXT_BOARD == RZ600_AT86RF212 +# include "at86rf212/at86rf212.h" +# elif EXT_BOARD == SECURITY_XPLAINED +# include "security_xplained.h" +# elif EXT_BOARD == USER_EXT_BOARD + // User-reserved area: #include the header file of your extension board here + // (if any). +# endif +#endif + + +#if (defined(__GNUC__) && defined(__AVR32__)) || (defined(__ICCAVR32__) || defined(__AAVR32__)) +#ifdef __AVR32_ABI_COMPILER__ // Automatically defined when compiling for AVR32, not when assembling. + +/*! \brief This function initializes the board target resources + * + * This function should be called to ensure proper initialization of the target + * board hardware connected to the part. + */ +extern void board_init(void); + +#endif // #ifdef __AVR32_ABI_COMPILER__ +#else +/*! \brief This function initializes the board target resources + * + * This function should be called to ensure proper initialization of the target + * board hardware connected to the part. + */ +extern void board_init(void); +#endif + + +#ifdef __cplusplus +} +#endif + +/** + * \} + */ + +#endif // _BOARD_H_ diff --git a/AVR Code/USB_BULK_TEST/src/ASF/common/boards/user_board/init.c b/AVR Code/USB_BULK_TEST/src/ASF/common/boards/user_board/init.c new file mode 100644 index 00000000..32fba369 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/common/boards/user_board/init.c @@ -0,0 +1,21 @@ +/** + * \file + * + * \brief User board initialization template + * + */ +/* + * Support and FAQ: visit Atmel Support + */ + +#include +#include +#include + +void board_init(void) +{ + /* This function is meant to contain board-specific initialization code + * for, e.g., the I/O pins. The initialization can rely on application- + * specific board configuration, found in conf_board.h. + */ +} diff --git a/AVR Code/USB_BULK_TEST/src/ASF/common/boards/user_board/user_board.h b/AVR Code/USB_BULK_TEST/src/ASF/common/boards/user_board/user_board.h new file mode 100644 index 00000000..39980a7d --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/common/boards/user_board/user_board.h @@ -0,0 +1,40 @@ +/** + * \file + * + * \brief User board definition template + * + */ + + /* This file is intended to contain definitions and configuration details for + * features and devices that are available on the board, e.g., frequency and + * startup time for an external crystal, external memory devices, LED and USART + * pins. + */ +/* + * Support and FAQ: visit Atmel Support + */ + +#ifndef USER_BOARD_H +#define USER_BOARD_H + +#include + +// External oscillator settings. +// Uncomment and set correct values if external oscillator is used. + +// External oscillator frequency +//#define BOARD_XOSC_HZ 8000000 + +// External oscillator type. +//!< External clock signal +//#define BOARD_XOSC_TYPE XOSC_TYPE_EXTERNAL +//!< 32.768 kHz resonator on TOSC +//#define BOARD_XOSC_TYPE XOSC_TYPE_32KHZ +//!< 0.4 to 16 MHz resonator on XTALS +//#define BOARD_XOSC_TYPE XOSC_TYPE_XTAL + +// External oscillator startup time +//#define BOARD_XOSC_STARTUP_US 500000 + + +#endif // USER_BOARD_H diff --git a/AVR Code/USB_BULK_TEST/src/ASF/common/components/display/st7565r/st7565r.c b/AVR Code/USB_BULK_TEST/src/ASF/common/components/display/st7565r/st7565r.c new file mode 100644 index 00000000..cb51cfb8 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/common/components/display/st7565r/st7565r.c @@ -0,0 +1,125 @@ +/** + * \file + * + * \brief ST7565R display controller driver. + * + * Copyright (c) 2011-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ +#include "st7565r.h" + +/** + * \internal + * \brief Initialize the hardware interface + * + * Depending on what interface used for interfacing the LCD controller this + * function will initialize the necessary hardware. + */ +static void st7565r_interface_init(void) +{ +#ifdef ST7565R_SERIAL_INTERFACE + spi_flags_t spi_flags = SPI_MODE_3; + board_spi_select_id_t spi_select_id = 0; +#endif + +#if defined(ST7565R_USART_SPI_INTERFACE) + struct usart_spi_device device = { + .id = ST7565R_CS_PIN, + }; + usart_spi_init(ST7565R_USART_SPI); + usart_spi_setup_device(ST7565R_USART_SPI, &device, spi_flags, + ST7565R_CLOCK_SPEED, spi_select_id); +#elif defined(ST7565R_SPI_INTERFACE) + struct spi_device device = { + .id = ST7565R_CS_PIN, + }; + spi_master_init(ST7565R_SPI); + spi_master_setup_device(ST7565R_SPI, &device, spi_flags, + ST7565R_CLOCK_SPEED, spi_select_id); +#endif +} + +/** + * \brief Initialize the LCD controller + * + * Call this function to initialize the hardware interface and the LCD + * controller. When initialization is done the display is turned on and ready + * to receive data. + */ +void st7565r_init(void) +{ + // Do a hard reset of the LCD display controller + st7565r_hard_reset(); + + // Initialize the interface + st7565r_interface_init(); + + // Set the A0 pin to the default state (command) + ioport_set_pin_low(ST7565R_A0_PIN); + + // The column address is set to increasing + st7565r_write_command(ST7565R_CMD_ADC_NORMAL); + + // Non-inverted display + st7565r_display_invert_disable(); + + // The common mode scan direction is reversed COM31->COM0 + st7565r_write_command(ST7565R_CMD_REVERSE_SCAN_DIRECTION); + + // Set the voltage bias ratio to 1/6 + st7565r_write_command(ST7565R_CMD_LCD_BIAS_1_DIV_6_DUTY33); + + // Set booster circuit, voltage regulator and voltage follower all to on + st7565r_write_command(ST7565R_CMD_POWER_CTRL_ALL_ON); + + // Set the booster ratio to 2X,3X,4X + st7565r_write_command(ST7565R_CMD_BOOSTER_RATIO_SET); + st7565r_write_command(ST7565R_CMD_BOOSTER_RATIO_2X_3X_4X); + + // Set voltage resistor ratio to 1 + st7565r_write_command(ST7565R_CMD_VOLTAGE_RESISTOR_RATIO_1); + + /* Set contrast to min value, no need to check return value as the contrast + is set to the defined min*/ + st7565r_set_contrast(ST7565R_DISPLAY_CONTRAST_MIN); + + // Turn on the display + st7565r_display_on(); +} diff --git a/AVR Code/USB_BULK_TEST/src/ASF/common/components/display/st7565r/st7565r.h b/AVR Code/USB_BULK_TEST/src/ASF/common/components/display/st7565r/st7565r.h new file mode 100644 index 00000000..436d354a --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/common/components/display/st7565r/st7565r.h @@ -0,0 +1,463 @@ +/** + * \file + * + * \brief ST7565R display controller driver. + * + * Copyright (c) 2011-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ +#ifndef ST7565R_H_INCLUDED +#define ST7565R_H_INCLUDED + +#include +#include +#include +#include +#include + +// controller and LCD configuration file +#include "conf_st7565r.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \defgroup st7565r_lcd_controller_group ST7565R LCD Controller Low-level\ + * driver + * + * This is a low level driver for the ST7565R LCD controller. It provides basic + * functions for initializing and writing to the LCD controller. In addition to + * hardware control and use of the LCD controller internal functions . + * + * Before writing data to the display call \ref st7565r_init() which will set up + * the physical interface and the LCD. A file named \ref conf_st7565r.h is needed + * to define which interface to use. For more information see the Interface + * selection section. In addition one also need to define the pins + * \ref ST7565R_A0_PIN, \ref ST7565R_CS_PIN and \ref ST7565R_RESET_PIN and the + * display \ref ST7565R_CLOCK_SPEED. + * + * \warning This driver is not reentrant and can not be used in interrupt\ + * service routines without extra care. + * + * As a safety feature one also need to set the max and min contrast levels that + * the \ref st7565r_set_contrast using the defines + * \ref ST7565R_DISPLAY_CONTRAST_MAX and \ref ST7565R_DISPLAY_CONTRAST_MIN to + * protect the display from too high voltage, please see the + * \ref st7565r_set_contrast function for more details. + * + * An example \ref conf_st7565r.h file could look like + * \code + // interface selection + #define ST7565R_USART_SPI_INTERFACE + #define ST7565R_USART_SPI &USARTD0 + + // minimum clock period is 50ns@3.3V -> max frequency is 20MHz + #define ST7565R_CLOCK_SPEED 1000000 + + #define ST7565R_DISPLAY_CONTRAST_MAX 40 + #define ST7565R_DISPLAY_CONTRAST_MIN 30 + + #define ST7565R_A0_PIN NHD_C12832A1Z_REGISTER_SELECT + #define ST7565R_CS_PIN NHD_C12832A1Z_CSN + #define ST7565R_RESET_PIN NHD_C12832A1Z_RESETN +\endcode + * + * \section dependencies Dependencies + * This driver depends on the following modules: + * - \ref ioport_group for IO port control. + * - \ref sysclk_group for getting system clock speeds for init functions. + * - \ref usart_spi_group or \ref spi_group for communication with the LCD + * controller + * @{ + */ + +//! \name Command defines +//@{ +#define ST7565R_CMD_DISPLAY_ON 0xAF +#define ST7565R_CMD_DISPLAY_OFF 0xAE +#define ST7565R_CMD_START_LINE_SET(line) (0x40 | (line)) +#define ST7565R_CMD_PAGE_ADDRESS_SET(page) (0xB0 | (page)) +#define ST7565R_CMD_COLUMN_ADDRESS_SET_MSB(column) (0x10 | (column)) +#define ST7565R_CMD_COLUMN_ADDRESS_SET_LSB(column) (0x00 | (column)) +#define ST7565R_CMD_ADC_NORMAL 0xA0 +#define ST7565R_CMD_ADC_REVERSE 0xA1 +#define ST7565R_CMD_DISPLAY_NORMAL 0xA6 +#define ST7565R_CMD_DISPLAY_REVERSE 0xA7 +#define ST7565R_CMD_DISPLAY_ALL_POINTS_OFF 0xA4 +#define ST7565R_CMD_DISPLAY_ALL_POINTS_ON 0xA5 +#define ST7565R_CMD_LCD_BIAS_1_DIV_5_DUTY33 0xA1 +#define ST7565R_CMD_LCD_BIAS_1_DIV_6_DUTY33 0xA2 +#define ST7565R_CMD_NORMAL_SCAN_DIRECTION 0xC0 +#define ST7565R_CMD_REVERSE_SCAN_DIRECTION 0xC8 +#define ST7565R_CMD_VOLTAGE_RESISTOR_RATIO_0 0x20 +#define ST7565R_CMD_VOLTAGE_RESISTOR_RATIO_1 0x21 +#define ST7565R_CMD_VOLTAGE_RESISTOR_RATIO_2 0x22 +#define ST7565R_CMD_VOLTAGE_RESISTOR_RATIO_3 0x23 +#define ST7565R_CMD_VOLTAGE_RESISTOR_RATIO_4 0x24 +#define ST7565R_CMD_VOLTAGE_RESISTOR_RATIO_5 0x25 +#define ST7565R_CMD_VOLTAGE_RESISTOR_RATIO_6 0x26 +#define ST7565R_CMD_VOLTAGE_RESISTOR_RATIO_7 0x27 +#define ST7565R_CMD_POWER_CTRL_ALL_ON 0x2F +#define ST7565R_CMD_SLEEP_MODE 0xAC +#define ST7565R_CMD_NORMAL_MODE 0xAD +#define ST7565R_CMD_RESET 0xE2 +#define ST7565R_CMD_NOP 0xE3 +#define ST7565R_CMD_ELECTRONIC_VOLUME_MODE_SET 0x81 +#define ST7565R_CMD_ELECTRONIC_VOLUME(volume) (0x3F & (~volume)) +#define ST7565R_CMD_BOOSTER_RATIO_SET 0xF8 +#define ST7565R_CMD_BOOSTER_RATIO_2X_3X_4X 0x00 +#define ST7565R_CMD_BOOSTER_RATIO_5X 0x01 +#define ST7565R_CMD_BOOSTER_RATIO_6X 0x03 +#define ST7565R_CMD_STATUS_READ 0x00 +#define ST7565R_CMD_END 0xEE +#define ST7565R_CMD_READ_MODIFY_WRITE 0xE0 +//@} + +/** + * \name Interface selection + * + * The LCD controller support both serial and parallel mode, that means there + * is a number of possible ways of interfacing the controller using different + * AVR peripherals. The different interfaces can be selected using different + * defines. This driver supports the serial communication mode using an + * USART in Master SPI mode by defining \ref ST7565R_USART_SPI_INTERFACE, and a + * normal SPI in Master Mode by defining \ref ST7565R_SPI_INTERFACE. + * + * \note The current driver only support serial mode. + */ +//@{ +#if defined(__DOXYGEN__) +//! \brief Select the a USART SPI interface. +# define ST7565R_USART_SPI_INTERFACE +//! \brief Select the normal SPI peripheral interface. +# define ST7565R_SPI_INTERFACE +#endif + +#if defined(ST7565R_USART_SPI_INTERFACE) +# include +#elif defined(ST7565R_SPI_INTERFACE) +# include +#else +#error "Interface not supported by the driver" +#endif +//@} + +#if defined(ST7565R_USART_SPI_INTERFACE) || defined(ST7565R_SPI_INTERFACE) +// +# define ST7565R_SERIAL_INTERFACE +#endif + +//! \name LCD controller write and read functions +//@{ +/** + * \brief Writes a command to the display controller + * + * This functions pull pin A0 low before writing to the controller. Different + * data write function is called based on the selected interface. + * + * \param command the command to write + */ +static inline void st7565r_write_command(uint8_t command) +{ +#if defined(ST7565R_USART_SPI_INTERFACE) + struct usart_spi_device device = {.id = ST7565R_CS_PIN}; + usart_spi_select_device(ST7565R_USART_SPI, &device); + ioport_set_pin_low(ST7565R_A0_PIN); + usart_spi_transmit(ST7565R_USART_SPI, command); + usart_spi_deselect_device(ST7565R_USART_SPI, &device); +#elif defined(ST7565R_SPI_INTERFACE) + struct spi_device device = {.id = ST7565R_CS_PIN}; + spi_select_device(ST7565R_SPI, &device); + ioport_set_pin_low(ST7565R_A0_PIN); + spi_write_single(ST7565R_SPI, command); + spi_deselect_device(ST7565R_SPI, &device); +#endif +} + +/** + * \brief Write data to the display controller + * + * This functions sets the pin A0 before writing to the controller. Different + * data write function is called based on the selected interface. + * + * \param data the data to write + */ +static inline void st7565r_write_data(uint8_t data) +{ +#if defined(ST7565R_USART_SPI_INTERFACE) + struct usart_spi_device device = {.id = ST7565R_CS_PIN}; + usart_spi_select_device(ST7565R_USART_SPI, &device); + ioport_set_pin_high(ST7565R_A0_PIN); + usart_spi_transmit(ST7565R_USART_SPI, data); + ioport_set_pin_low(ST7565R_A0_PIN); + usart_spi_deselect_device(ST7565R_USART_SPI, &device); +#elif defined(ST7565R_SPI_INTERFACE) + struct spi_device device = {.id = ST7565R_CS_PIN}; + spi_select_device(ST7565R_SPI, &device); + ioport_set_pin_high(ST7565R_A0_PIN); + spi_write_single(ST7565R_SPI, data); + ioport_set_pin_low(ST7565R_A0_PIN); + spi_deselect_device(ST7565R_SPI, &device); +#endif +} + +/** + * \brief Read data from the controller + * + * \note The controller does not support read in serial mode. + * + * \retval 8 bit data read from the controller + */ +static inline uint8_t st7565r_read_data(void) +{ + return 0; +} + +/** + * \brief Read status from the controller + * + * \note The controller does not support read in serial mode. + * + * \retval 8 bit status read from the controller + */ +static inline uint8_t st7565r_get_status(void) +{ + return 0; +} +//@} + +//! \name LCD Controller reset +//@{ +/** + * \brief Perform a soft reset of the LCD controller + * + * This functions will reset the LCD controller by sending the reset command. + * \note this functions should not be confused with the \ref st7565r_hard_reset() + * function, this command will not control the RST pin. + */ +static inline void st7565r_soft_reset(void) +{ + st7565r_write_command(ST7565R_CMD_RESET); +} + +/** + * \brief Perform a hard reset of the LCD controller + * + * This functions will reset the LCD controller by setting the reset pin low. + * \note this functions should not be confused with the \ref st7565r_soft_reset() + * function, this command will control the RST pin. + */ +static inline void st7565r_hard_reset(void) +{ + ioport_set_pin_low(ST7565R_RESET_PIN); + delay_us(10); + ioport_set_pin_high(ST7565R_RESET_PIN); + delay_us(10); +} +//@} + +//! \name Sleep control +//@{ +/** + * \brief Enable the LCD sleep mode + */ +static inline void st7565r_sleep_enable(void) +{ + st7565r_write_command(ST7565R_CMD_SLEEP_MODE); +} + +/** + * \brief Disable the LCD sleep mode + */ +static inline void st7565r_sleep_disable(void) +{ + st7565r_write_command(ST7565R_CMD_NORMAL_MODE); +} +//@} + +//! \name Address setup for the LCD +//@{ +/** + * \brief Set current page in display RAM + * + * This command is usually followed by the configuration of the column address + * because this scheme will provide access to all locations in the display + * RAM. + * + * \param address the page address + */ +static inline void st7565r_set_page_address(uint8_t address) +{ + // Make sure that the address is 4 bits (only 8 pages) + address &= 0x0F; + st7565r_write_command(ST7565R_CMD_PAGE_ADDRESS_SET(address)); +} + +/** + * \brief Set current column in display RAM + * + * \param address the column address + */ +static inline void st7565r_set_column_address(uint8_t address) +{ + // Make sure the address is 7 bits + address &= 0x7F; + st7565r_write_command(ST7565R_CMD_COLUMN_ADDRESS_SET_MSB(address >> 4)); + st7565r_write_command(ST7565R_CMD_COLUMN_ADDRESS_SET_LSB(address & 0x0F)); +} + +/** + * \brief Set the display start draw line address + * + * This function will set which line should be the start draw line for the LCD. + */ +static inline void st7565r_set_display_start_line_address(uint8_t address) +{ + // Make sure address is 6 bits + address &= 0x3F; + st7565r_write_command(ST7565R_CMD_START_LINE_SET(address)); +} +//@} + +//! \name Display hardware control +//@{ +/** + * \brief Turn the LCD display on + * + * This function will turn on the LCD. + */ +static inline void st7565r_display_on(void) +{ + st7565r_write_command(ST7565R_CMD_DISPLAY_ON); +} + +/** + * \brief Turn the LCD display off + * + * This function will turn off the LCD. + */ +static inline void st7565r_display_off(void) +{ + st7565r_write_command(ST7565R_CMD_DISPLAY_OFF); +} + +/** + * \brief Sets all LCD pixels on + * + * This function can be used to test the LCD by setting all pixels on, this will + * not affect the current LCD RAM. + * + * \param pixels_on if true all the LCD pixels are turned on, false the display + * is back in normal mode displaying what is in the display + * RAM. + */ +static inline void st7565r_set_all_pixels(bool pixels_on) +{ + if (pixels_on) { + st7565r_write_command(ST7565R_CMD_DISPLAY_ALL_POINTS_ON); + } else { + st7565r_write_command(ST7565R_CMD_DISPLAY_ALL_POINTS_OFF); + } +} + +/** + * \brief Set the LCD contrast level + * + * \warning This will set the voltage for the LCD, settings this value too high + * may result in damage to the LCD. Hence the limit for these settings must be + * defined in the \ref conf_st7565r.h file. + * + * Contrast values outside the max and min values will be clipped to the defined + * \ref ST7565R_DISPLAY_CONTRAST_MAX and \ref ST7565R_DISPLAY_CONTRAST_MIN. + * + * \param contrast a number between 0 and 63 where the max values is given by + * the LCD. + * + * \retval contrast the contrast value written to the LCD controller + */ +static inline uint8_t st7565r_set_contrast(uint8_t contrast) +{ + if (contrast < ST7565R_DISPLAY_CONTRAST_MIN) { + contrast = ST7565R_DISPLAY_CONTRAST_MIN; + } + if (contrast > ST7565R_DISPLAY_CONTRAST_MAX) { + contrast = ST7565R_DISPLAY_CONTRAST_MAX; + } + st7565r_write_command(ST7565R_CMD_ELECTRONIC_VOLUME_MODE_SET); + st7565r_write_command(ST7565R_CMD_ELECTRONIC_VOLUME(contrast)); + return contrast; +} + +/** + * \brief Invert all pixels on the device + * + * This function will invert all pixels on the LCD + * + */ +static inline void st7565r_display_invert_enable(void) +{ + st7565r_write_command(ST7565R_CMD_DISPLAY_REVERSE); +} + +/** + * \brief Disable invert of all pixels on the device + * + * This function will disable invert on all pixels on the LCD + * + */ +static inline void st7565r_display_invert_disable(void) +{ + st7565r_write_command(ST7565R_CMD_DISPLAY_NORMAL); +} +//@} + +//! \name Initialization +//@{ +void st7565r_init(void); +//@} + +/** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* ST7565R_H_INCLUDED */ diff --git a/AVR Code/USB_BULK_TEST/src/ASF/common/services/clock/genclk.h b/AVR Code/USB_BULK_TEST/src/ASF/common/services/clock/genclk.h new file mode 100644 index 00000000..f910d8bb --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/common/services/clock/genclk.h @@ -0,0 +1,191 @@ +/** + * \file + * + * \brief Generic clock management + * + * Copyright (c) 2010-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ +#ifndef CLK_GENCLK_H_INCLUDED +#define CLK_GENCLK_H_INCLUDED + +#include "parts.h" + +#if SAM3S +# include "sam3s/genclk.h" +#elif SAM3U +# include "sam3u/genclk.h" +#elif SAM3N +# include "sam3n/genclk.h" +#elif SAM3XA +# include "sam3x/genclk.h" +#elif SAM4S +# include "sam4s/genclk.h" +#elif SAM4L +# include "sam4l/genclk.h" +#elif SAM4E +# include "sam4e/genclk.h" +#elif SAM4N +# include "sam4n/genclk.h" +#elif SAM4C +# include "sam4c/genclk.h" +#elif SAM4CM +# include "sam4cm/genclk.h" +#elif SAM4CP +# include "sam4cp/genclk.h" +#elif SAMG +# include "samg/genclk.h" +#elif (UC3A0 || UC3A1) +# include "uc3a0_a1/genclk.h" +#elif UC3A3 +# include "uc3a3_a4/genclk.h" +#elif UC3B +# include "uc3b0_b1/genclk.h" +#elif UC3C +# include "uc3c/genclk.h" +#elif UC3D +# include "uc3d/genclk.h" +#elif UC3L +# include "uc3l/genclk.h" +#else +# error Unsupported chip type +#endif + +/** + * \ingroup clk_group + * \defgroup genclk_group Generic Clock Management + * + * Generic clocks are configurable clocks which run outside the system + * clock domain. They are often connected to peripherals which have an + * asynchronous component running independently of the bus clock, e.g. + * USB controllers, low-power timers and RTCs, etc. + * + * Note that not all platforms have support for generic clocks; on such + * platforms, this API will not be available. + * + * @{ + */ + +/** + * \def GENCLK_DIV_MAX + * \brief Maximum divider supported by the generic clock implementation + */ +/** + * \enum genclk_source + * \brief Generic clock source ID + * + * Each generic clock may be generated from a different clock source. + * These are the available alternatives provided by the chip. + */ + +//! \name Generic clock configuration +//@{ +/** + * \struct genclk_config + * \brief Hardware representation of a set of generic clock parameters + */ +/** + * \fn void genclk_config_defaults(struct genclk_config *cfg, + * unsigned int id) + * \brief Initialize \a cfg to the default configuration for the clock + * identified by \a id. + */ +/** + * \fn void genclk_config_read(struct genclk_config *cfg, unsigned int id) + * \brief Read the currently active configuration of the clock + * identified by \a id into \a cfg. + */ +/** + * \fn void genclk_config_write(const struct genclk_config *cfg, + * unsigned int id) + * \brief Activate the configuration \a cfg on the clock identified by + * \a id. + */ +/** + * \fn void genclk_config_set_source(struct genclk_config *cfg, + * enum genclk_source src) + * \brief Select a new source clock \a src in configuration \a cfg. + */ +/** + * \fn void genclk_config_set_divider(struct genclk_config *cfg, + * unsigned int divider) + * \brief Set a new \a divider in configuration \a cfg. + */ +/** + * \fn void genclk_enable_source(enum genclk_source src) + * \brief Enable the source clock \a src used by a generic clock. + */ + //@} + +//! \name Enabling and disabling Generic Clocks +//@{ +/** + * \fn void genclk_enable(const struct genclk_config *cfg, unsigned int id) + * \brief Activate the configuration \a cfg on the clock identified by + * \a id and enable it. + */ +/** + * \fn void genclk_disable(unsigned int id) + * \brief Disable the generic clock identified by \a id. + */ +//@} + +/** + * \brief Enable the configuration defined by \a src and \a divider + * for the generic clock identified by \a id. + * + * \param id The ID of the generic clock. + * \param src The source clock of the generic clock. + * \param divider The divider used to generate the generic clock. + */ +static inline void genclk_enable_config(unsigned int id, enum genclk_source src, unsigned int divider) +{ + struct genclk_config gcfg; + + genclk_config_defaults(&gcfg, id); + genclk_enable_source(src); + genclk_config_set_source(&gcfg, src); + genclk_config_set_divider(&gcfg, divider); + genclk_enable(&gcfg, id); +} + +//! @} + +#endif /* CLK_GENCLK_H_INCLUDED */ diff --git a/AVR Code/USB_BULK_TEST/src/ASF/common/services/clock/osc.h b/AVR Code/USB_BULK_TEST/src/ASF/common/services/clock/osc.h new file mode 100644 index 00000000..678f4200 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/common/services/clock/osc.h @@ -0,0 +1,177 @@ +/** + * \file + * + * \brief Oscillator management + * + * Copyright (c) 2010-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ +#ifndef OSC_H_INCLUDED +#define OSC_H_INCLUDED + +#include "parts.h" +#include "conf_clock.h" + +#if SAM3S +# include "sam3s/osc.h" +#elif SAM3XA +# include "sam3x/osc.h" +#elif SAM3U +# include "sam3u/osc.h" +#elif SAM3N +# include "sam3n/osc.h" +#elif SAM4S +# include "sam4s/osc.h" +#elif SAM4E +# include "sam4e/osc.h" +#elif SAM4C +# include "sam4c/osc.h" +#elif SAM4CM +# include "sam4cm/osc.h" +#elif SAM4CP +# include "sam4cp/osc.h" +#elif SAM4L +# include "sam4l/osc.h" +#elif SAM4N +# include "sam4n/osc.h" +#elif SAMG +# include "samg/osc.h" +#elif (UC3A0 || UC3A1) +# include "uc3a0_a1/osc.h" +#elif UC3A3 +# include "uc3a3_a4/osc.h" +#elif UC3B +# include "uc3b0_b1/osc.h" +#elif UC3C +# include "uc3c/osc.h" +#elif UC3D +# include "uc3d/osc.h" +#elif UC3L +# include "uc3l/osc.h" +#elif XMEGA +# include "xmega/osc.h" +#else +# error Unsupported chip type +#endif + +/** + * \ingroup clk_group + * \defgroup osc_group Oscillator Management + * + * This group contains functions and definitions related to configuring + * and enabling/disabling on-chip oscillators. Internal RC-oscillators, + * external crystal oscillators and external clock generators are + * supported by this module. What all of these have in common is that + * they swing at a fixed, nominal frequency which is normally not + * adjustable. + * + * \par Example: Enabling an oscillator + * + * The following example demonstrates how to enable the external + * oscillator on XMEGA A and wait for it to be ready to use. The + * oscillator identifiers are platform-specific, so while the same + * procedure is used on all platforms, the parameter to osc_enable() + * will be different from device to device. + * \code + osc_enable(OSC_ID_XOSC); + osc_wait_ready(OSC_ID_XOSC); \endcode + * + * \section osc_group_board Board-specific Definitions + * If external oscillators are used, the board code must provide the + * following definitions for each of those: + * - \b BOARD__HZ: The nominal frequency of the oscillator. + * - \b BOARD__STARTUP_US: The startup time of the + * oscillator in microseconds. + * - \b BOARD__TYPE: The type of oscillator connected, i.e. + * whether it's a crystal or external clock, and sometimes what kind + * of crystal it is. The meaning of this value is platform-specific. + * + * @{ + */ + +//! \name Oscillator Management +//@{ +/** + * \fn void osc_enable(uint8_t id) + * \brief Enable oscillator \a id + * + * The startup time and mode value is automatically determined based on + * definitions in the board code. + */ +/** + * \fn void osc_disable(uint8_t id) + * \brief Disable oscillator \a id + */ +/** + * \fn osc_is_ready(uint8_t id) + * \brief Determine whether oscillator \a id is ready. + * \retval true Oscillator \a id is running and ready to use as a clock + * source. + * \retval false Oscillator \a id is not running. + */ +/** + * \fn uint32_t osc_get_rate(uint8_t id) + * \brief Return the frequency of oscillator \a id in Hz + */ + +#ifndef __ASSEMBLY__ + +/** + * \brief Wait until the oscillator identified by \a id is ready + * + * This function will busy-wait for the oscillator identified by \a id + * to become stable and ready to use as a clock source. + * + * \param id A number identifying the oscillator to wait for. + */ +static inline void osc_wait_ready(uint8_t id) +{ + while (!osc_is_ready(id)) { + /* Do nothing */ + } +} + +#endif /* __ASSEMBLY__ */ + +//@} + +//! @} + +#endif /* OSC_H_INCLUDED */ diff --git a/AVR Code/USB_BULK_TEST/src/ASF/common/services/clock/pll.h b/AVR Code/USB_BULK_TEST/src/ASF/common/services/clock/pll.h new file mode 100644 index 00000000..ce88b96b --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/common/services/clock/pll.h @@ -0,0 +1,333 @@ +/** + * \file + * + * \brief PLL management + * + * Copyright (c) 2010-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ +#ifndef CLK_PLL_H_INCLUDED +#define CLK_PLL_H_INCLUDED + +#include "parts.h" +#include "conf_clock.h" + +#if SAM3S +# include "sam3s/pll.h" +#elif SAM3XA +# include "sam3x/pll.h" +#elif SAM3U +# include "sam3u/pll.h" +#elif SAM3N +# include "sam3n/pll.h" +#elif SAM4S +# include "sam4s/pll.h" +#elif SAM4E +# include "sam4e/pll.h" +#elif SAM4C +# include "sam4c/pll.h" +#elif SAM4CM +# include "sam4cm/pll.h" +#elif SAM4CP +# include "sam4cp/pll.h" +#elif SAM4L +# include "sam4l/pll.h" +#elif SAM4N +# include "sam4n/pll.h" +#elif SAMG +# include "samg/pll.h" +#elif (UC3A0 || UC3A1) +# include "uc3a0_a1/pll.h" +#elif UC3A3 +# include "uc3a3_a4/pll.h" +#elif UC3B +# include "uc3b0_b1/pll.h" +#elif UC3C +# include "uc3c/pll.h" +#elif UC3D +# include "uc3d/pll.h" +#elif (UC3L0128 || UC3L0256 || UC3L3_L4) +# include "uc3l/pll.h" +#elif XMEGA +# include "xmega/pll.h" +#else +# error Unsupported chip type +#endif + +/** + * \ingroup clk_group + * \defgroup pll_group PLL Management + * + * This group contains functions and definitions related to configuring + * and enabling/disabling on-chip PLLs. A PLL will take an input signal + * (the \em source), optionally divide the frequency by a configurable + * \em divider, and then multiply the frequency by a configurable \em + * multiplier. + * + * Some devices don't support input dividers; specifying any other + * divisor than 1 on these devices will result in an assertion failure. + * Other devices may have various restrictions to the frequency range of + * the input and output signals. + * + * \par Example: Setting up PLL0 with default parameters + * + * The following example shows how to configure and enable PLL0 using + * the default parameters specified using the configuration symbols + * listed above. + * \code + pll_enable_config_defaults(0); \endcode + * + * To configure, enable PLL0 using the default parameters and to disable + * a specific feature like Wide Bandwidth Mode (a UC3A3-specific + * PLL option.), you can use this initialization process. + * \code + struct pll_config pllcfg; + if (pll_is_locked(pll_id)) { + return; // Pll already running + } + pll_enable_source(CONFIG_PLL0_SOURCE); + pll_config_defaults(&pllcfg, 0); + pll_config_set_option(&pllcfg, PLL_OPT_WBM_DISABLE); + pll_enable(&pllcfg, 0); + pll_wait_for_lock(0); \endcode + * + * When the last function call returns, PLL0 is ready to be used as the + * main system clock source. + * + * \section pll_group_config Configuration Symbols + * + * Each PLL has a set of default parameters determined by the following + * configuration symbols in the application's configuration file: + * - \b CONFIG_PLLn_SOURCE: The default clock source connected to the + * input of PLL \a n. Must be one of the values defined by the + * #pll_source enum. + * - \b CONFIG_PLLn_MUL: The default multiplier (loop divider) of PLL + * \a n. + * - \b CONFIG_PLLn_DIV: The default input divider of PLL \a n. + * + * These configuration symbols determine the result of calling + * pll_config_defaults() and pll_get_default_rate(). + * + * @{ + */ + +//! \name Chip-specific PLL characteristics +//@{ +/** + * \def PLL_MAX_STARTUP_CYCLES + * \brief Maximum PLL startup time in number of slow clock cycles + */ +/** + * \def NR_PLLS + * \brief Number of on-chip PLLs + */ + +/** + * \def PLL_MIN_HZ + * \brief Minimum frequency that the PLL can generate + */ +/** + * \def PLL_MAX_HZ + * \brief Maximum frequency that the PLL can generate + */ +/** + * \def PLL_NR_OPTIONS + * \brief Number of PLL option bits + */ +//@} + +/** + * \enum pll_source + * \brief PLL clock source + */ + +//! \name PLL configuration +//@{ + +/** + * \struct pll_config + * \brief Hardware-specific representation of PLL configuration. + * + * This structure contains one or more device-specific values + * representing the current PLL configuration. The contents of this + * structure is typically different from platform to platform, and the + * user should not access any fields except through the PLL + * configuration API. + */ + +/** + * \fn void pll_config_init(struct pll_config *cfg, + * enum pll_source src, unsigned int div, unsigned int mul) + * \brief Initialize PLL configuration from standard parameters. + * + * \note This function may be defined inline because it is assumed to be + * called very few times, and usually with constant parameters. Inlining + * it will in such cases reduce the code size significantly. + * + * \param cfg The PLL configuration to be initialized. + * \param src The oscillator to be used as input to the PLL. + * \param div PLL input divider. + * \param mul PLL loop divider (i.e. multiplier). + * + * \return A configuration which will make the PLL run at + * (\a mul / \a div) times the frequency of \a src + */ +/** + * \def pll_config_defaults(cfg, pll_id) + * \brief Initialize PLL configuration using default parameters. + * + * After this function returns, \a cfg will contain a configuration + * which will make the PLL run at (CONFIG_PLLx_MUL / CONFIG_PLLx_DIV) + * times the frequency of CONFIG_PLLx_SOURCE. + * + * \param cfg The PLL configuration to be initialized. + * \param pll_id Use defaults for this PLL. + */ +/** + * \def pll_get_default_rate(pll_id) + * \brief Get the default rate in Hz of \a pll_id + */ +/** + * \fn void pll_config_set_option(struct pll_config *cfg, + * unsigned int option) + * \brief Set the PLL option bit \a option in the configuration \a cfg. + * + * \param cfg The PLL configuration to be changed. + * \param option The PLL option bit to be set. + */ +/** + * \fn void pll_config_clear_option(struct pll_config *cfg, + * unsigned int option) + * \brief Clear the PLL option bit \a option in the configuration \a cfg. + * + * \param cfg The PLL configuration to be changed. + * \param option The PLL option bit to be cleared. + */ +/** + * \fn void pll_config_read(struct pll_config *cfg, unsigned int pll_id) + * \brief Read the currently active configuration of \a pll_id. + * + * \param cfg The configuration object into which to store the currently + * active configuration. + * \param pll_id The ID of the PLL to be accessed. + */ +/** + * \fn void pll_config_write(const struct pll_config *cfg, + * unsigned int pll_id) + * \brief Activate the configuration \a cfg on \a pll_id + * + * \param cfg The configuration object representing the PLL + * configuration to be activated. + * \param pll_id The ID of the PLL to be updated. + */ + +//@} + +//! \name Interaction with the PLL hardware +//@{ +/** + * \fn void pll_enable(const struct pll_config *cfg, + * unsigned int pll_id) + * \brief Activate the configuration \a cfg and enable PLL \a pll_id. + * + * \param cfg The PLL configuration to be activated. + * \param pll_id The ID of the PLL to be enabled. + */ +/** + * \fn void pll_disable(unsigned int pll_id) + * \brief Disable the PLL identified by \a pll_id. + * + * After this function is called, the PLL identified by \a pll_id will + * be disabled. The PLL configuration stored in hardware may be affected + * by this, so if the caller needs to restore the same configuration + * later, it should either do a pll_config_read() before disabling the + * PLL, or remember the last configuration written to the PLL. + * + * \param pll_id The ID of the PLL to be disabled. + */ +/** + * \fn bool pll_is_locked(unsigned int pll_id) + * \brief Determine whether the PLL is locked or not. + * + * \param pll_id The ID of the PLL to check. + * + * \retval true The PLL is locked and ready to use as a clock source + * \retval false The PLL is not yet locked, or has not been enabled. + */ +/** + * \fn void pll_enable_source(enum pll_source src) + * \brief Enable the source of the pll. + * The source is enabled, if the source is not already running. + * + * \param src The ID of the PLL source to enable. + */ +/** + * \fn void pll_enable_config_defaults(unsigned int pll_id) + * \brief Enable the pll with the default configuration. + * PLL is enabled, if the PLL is not already locked. + * + * \param pll_id The ID of the PLL to enable. + */ + +/** + * \brief Wait for PLL \a pll_id to become locked + * + * \todo Use a timeout to avoid waiting forever and hanging the system + * + * \param pll_id The ID of the PLL to wait for. + * + * \retval STATUS_OK The PLL is now locked. + * \retval ERR_TIMEOUT Timed out waiting for PLL to become locked. + */ +static inline int pll_wait_for_lock(unsigned int pll_id) +{ + Assert(pll_id < NR_PLLS); + + while (!pll_is_locked(pll_id)) { + /* Do nothing */ + } + + return 0; +} + +//@} +//! @} + +#endif /* CLK_PLL_H_INCLUDED */ diff --git a/AVR Code/USB_BULK_TEST/src/ASF/common/services/clock/sysclk.h b/AVR Code/USB_BULK_TEST/src/ASF/common/services/clock/sysclk.h new file mode 100644 index 00000000..cd9457b5 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/common/services/clock/sysclk.h @@ -0,0 +1,186 @@ +/** + * \file + * + * \brief System clock management + * + * Copyright (c) 2010-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ +#ifndef SYSCLK_H_INCLUDED +#define SYSCLK_H_INCLUDED + +#include "parts.h" +#include "conf_clock.h" + +#if SAM3S +# include "sam3s/sysclk.h" +#elif SAM3U +# include "sam3u/sysclk.h" +#elif SAM3N +# include "sam3n/sysclk.h" +#elif SAM3XA +# include "sam3x/sysclk.h" +#elif SAM4S +# include "sam4s/sysclk.h" +#elif SAM4E +# include "sam4e/sysclk.h" +#elif SAM4C +# include "sam4c/sysclk.h" +#elif SAM4CM +# include "sam4cm/sysclk.h" +#elif SAM4CP +# include "sam4cp/sysclk.h" +#elif SAM4L +# include "sam4l/sysclk.h" +#elif SAM4N +# include "sam4n/sysclk.h" +#elif SAMG +# include "samg/sysclk.h" +#elif (UC3A0 || UC3A1) +# include "uc3a0_a1/sysclk.h" +#elif UC3A3 +# include "uc3a3_a4/sysclk.h" +#elif UC3B +# include "uc3b0_b1/sysclk.h" +#elif UC3C +# include "uc3c/sysclk.h" +#elif UC3D +# include "uc3d/sysclk.h" +#elif UC3L +# include "uc3l/sysclk.h" +#elif XMEGA +# include "xmega/sysclk.h" +#elif MEGA +# include "mega/sysclk.h" +#else +# error Unsupported chip type +#endif + +/** + * \defgroup clk_group Clock Management + */ + +/** + * \ingroup clk_group + * \defgroup sysclk_group System Clock Management + * + * See \ref sysclk_quickstart. + * + * The sysclk API covers the system clock and all + * clocks derived from it. The system clock is a chip-internal clock on + * which all synchronous clocks, i.e. CPU and bus/peripheral + * clocks, are based. The system clock is typically generated from one + * of a variety of sources, which may include crystal and RC oscillators + * as well as PLLs. The clocks derived from the system clock are + * sometimes also known as synchronous clocks, since they + * always run synchronously with respect to each other, as opposed to + * generic clocks which may run from different oscillators or + * PLLs. + * + * Most applications should simply call sysclk_init() to initialize + * everything related to the system clock and its source (oscillator, + * PLL or DFLL), and leave it at that. More advanced applications, and + * platform-specific drivers, may require additional services from the + * clock system, some of which may be platform-specific. + * + * \section sysclk_group_platform Platform Dependencies + * + * The sysclk API is partially chip- or platform-specific. While all + * platforms provide mostly the same functionality, there are some + * variations around how different bus types and clock tree structures + * are handled. + * + * The following functions are available on all platforms with the same + * parameters and functionality. These functions may be called freely by + * portable applications, drivers and services: + * - sysclk_init() + * - sysclk_set_source() + * - sysclk_get_main_hz() + * - sysclk_get_cpu_hz() + * - sysclk_get_peripheral_bus_hz() + * + * The following functions are available on all platforms, but there may + * be variations in the function signature (i.e. parameters) and + * behavior. These functions are typically called by platform-specific + * parts of drivers, and applications that aren't intended to be + * portable: + * - sysclk_enable_peripheral_clock() + * - sysclk_disable_peripheral_clock() + * - sysclk_enable_module() + * - sysclk_disable_module() + * - sysclk_module_is_enabled() + * - sysclk_set_prescalers() + * + * All other functions should be considered platform-specific. + * Enabling/disabling clocks to specific peripherals as well as + * determining the speed of these clocks should be done by calling + * functions provided by the driver for that peripheral. + * + * @{ + */ + +//! \name System Clock Initialization +//@{ +/** + * \fn void sysclk_init(void) + * \brief Initialize the synchronous clock system. + * + * This function will initialize the system clock and its source. This + * includes: + * - Mask all synchronous clocks except for any clocks which are + * essential for normal operation (for example internal memory + * clocks). + * - Set up the system clock prescalers as specified by the + * application's configuration file. + * - Enable the clock source specified by the application's + * configuration file (oscillator or PLL) and wait for it to become + * stable. + * - Set the main system clock source to the clock specified by the + * application's configuration file. + * + * Since all non-essential peripheral clocks are initially disabled, it + * is the responsibility of the peripheral driver to re-enable any + * clocks that are needed for normal operation. + */ +//@} + +//! @} + +#endif /* SYSCLK_H_INCLUDED */ diff --git a/AVR Code/USB_BULK_TEST/src/ASF/common/services/clock/xmega/osc.h b/AVR Code/USB_BULK_TEST/src/ASF/common/services/clock/xmega/osc.h new file mode 100644 index 00000000..a37ad2cf --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/common/services/clock/xmega/osc.h @@ -0,0 +1,507 @@ +/** + * \file + * + * \brief Chip-specific oscillator management functions + * + * Copyright (c) 2010-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ +#ifndef XMEGA_OSC_H_INCLUDED +#define XMEGA_OSC_H_INCLUDED + +#include +#include + +/** + * \weakgroup osc_group + * + * \section osc_group_errata Errata + * - Auto-calibration does not work on XMEGA A1 revision H and + * earlier. + * @{ + */ + +//! \name Oscillator identifiers +//@{ +//! 2 MHz Internal RC Oscillator +#define OSC_ID_RC2MHZ OSC_RC2MEN_bm +//! 32 MHz Internal RC Oscillator +#define OSC_ID_RC32MHZ OSC_RC32MEN_bm +//! 32 KHz Internal RC Oscillator +#define OSC_ID_RC32KHZ OSC_RC32KEN_bm +//! External Oscillator +#define OSC_ID_XOSC OSC_XOSCEN_bm +#if XMEGA_E +//! 8 MHz Internal RC Oscillator +# define OSC_ID_RC8MHZ OSC_RC8MEN_bm +#endif + +/** + * \brief Reference from USB Start Of Frame + * \note This cannot be enabled or disabled, but can be used as a reference for + * the autocalibration (DFLL). + */ +#define OSC_ID_USBSOF 0xff +//@} + +//! \name External oscillator types +//@{ +#define XOSC_TYPE_EXTERNAL 0 //!< External clock signal +#define XOSC_TYPE_32KHZ 2 //!< 32.768 kHz resonator on TOSC +#define XOSC_TYPE_XTAL 3 //!< 0.4 to 16 MHz resonator on XTAL +//@} + +/** + * \def CONFIG_XOSC_32KHZ_LPM + * \brief Define for enabling Low Power Mode for 32 kHz external oscillator. + */ +#ifdef __DOXYGEN__ +# define CONFIG_XOSC_32KHZ_LPM +#endif /* __DOXYGEN__ */ + +/** + * \def CONFIG_XOSC_STARTUP + * \brief Board-dependent value that determines the number of start-up cycles + * for external resonators, based on BOARD_XOSC_STARTUP_US. This is written to + * the two MSB of the XOSCSEL field of OSC.XOSCCTRL. + * + * \note This is automatically computed from BOARD_XOSC_HZ and + * BOARD_XOSC_STARTUP_US if it is not manually set. + */ + +//! \name XTAL resonator start-up cycles +//@{ +#define XOSC_STARTUP_256 0 //!< 256 cycle start-up time +#define XOSC_STARTUP_1024 1 //!< 1 k cycle start-up time +#define XOSC_STARTUP_16384 2 //!< 16 k cycle start-up time +//@} + +/** + * \def CONFIG_XOSC_RANGE + * \brief Board-dependent value that sets the frequency range of the external + * oscillator. This is written to the FRQRANGE field of OSC.XOSCCTRL. + * + * \note This is automatically computed from BOARD_XOSC_HZ if it is not manually + * set. + */ + +//! \name XTAL resonator frequency range +//@{ +//! 0.4 to 2 MHz frequency range +#define XOSC_RANGE_04TO2 OSC_FRQRANGE_04TO2_gc +//! 2 to 9 MHz frequency range +#define XOSC_RANGE_2TO9 OSC_FRQRANGE_2TO9_gc +//! 9 to 12 MHz frequency range +#define XOSC_RANGE_9TO12 OSC_FRQRANGE_9TO12_gc +//! 12 to 16 MHz frequency range +#define XOSC_RANGE_12TO16 OSC_FRQRANGE_12TO16_gc +//@} + +/** + * \def XOSC_STARTUP_TIMEOUT + * \brief Number of us to wait for XOSC to start + * + * This is the number of slow clock cycles corresponding to + * OSC0_STARTUP_VALUE with an additional 25% safety margin. If the + * oscillator isn't running when this timeout has expired, it is assumed + * to have failed to start. + */ + +// If application intends to use XOSC. +#ifdef BOARD_XOSC_HZ +// Get start-up config for XOSC, if not manually set. +# ifndef CONFIG_XOSC_STARTUP +# ifndef BOARD_XOSC_STARTUP_US +# error BOARD_XOSC_STARTUP_US must be configured. +# else +//! \internal Number of start-up cycles for the board's XOSC. +# define BOARD_XOSC_STARTUP_CYCLES \ + (BOARD_XOSC_HZ / 1000000 * BOARD_XOSC_STARTUP_US) + +# if (BOARD_XOSC_TYPE == XOSC_TYPE_XTAL) +# if (BOARD_XOSC_STARTUP_CYCLES > 16384) +# error BOARD_XOSC_STARTUP_US is too high for current BOARD_XOSC_HZ. + +# elif (BOARD_XOSC_STARTUP_CYCLES > 1024) +# define CONFIG_XOSC_STARTUP XOSC_STARTUP_16384 +# define XOSC_STARTUP_TIMEOUT (16384*(1000000/BOARD_XOSC_HZ)) + +# elif (BOARD_XOSC_STARTUP_CYCLES > 256) +# define CONFIG_XOSC_STARTUP XOSC_STARTUP_1024 +# define XOSC_STARTUP_TIMEOUT (1024*(1000000/BOARD_XOSC_HZ)) + +# else +# define CONFIG_XOSC_STARTUP XOSC_STARTUP_256 +# define XOSC_STARTUP_TIMEOUT (256*(1000000/BOARD_XOSC_HZ)) +# endif +# else /* BOARD_XOSC_TYPE == XOSC_TYPE_XTAL */ +# define CONFIG_XOSC_STARTUP 0 +# endif +# endif /* BOARD_XOSC_STARTUP_US */ +# endif /* CONFIG_XOSC_STARTUP */ + +// Get frequency range setting for XOSC, if not manually set. +# ifndef CONFIG_XOSC_RANGE +# if (BOARD_XOSC_TYPE == XOSC_TYPE_XTAL) +# if (BOARD_XOSC_HZ < 400000) +# error BOARD_XOSC_HZ is below minimum frequency of 400 kHz. + +# elif (BOARD_XOSC_HZ < 2000000) +# define CONFIG_XOSC_RANGE XOSC_RANGE_04TO2 + +# elif (BOARD_XOSC_HZ < 9000000) +# define CONFIG_XOSC_RANGE XOSC_RANGE_2TO9 + +# elif (BOARD_XOSC_HZ < 12000000) +# define CONFIG_XOSC_RANGE XOSC_RANGE_9TO12 + +# elif (BOARD_XOSC_HZ <= 16000000) +# define CONFIG_XOSC_RANGE XOSC_RANGE_12TO16 + +# else +# error BOARD_XOSC_HZ is above maximum frequency of 16 MHz. +# endif +# else /* BOARD_XOSC_TYPE == XOSC_TYPE_XTAL */ +# define CONFIG_XOSC_RANGE 0 +# endif +# endif /* CONFIG_XOSC_RANGE */ +#endif /* BOARD_XOSC_HZ */ + +#ifndef __ASSEMBLY__ + +/** + * \internal + * \brief Enable internal oscillator \a id + * + * Do not call this function directly. Use osc_enable() instead. + */ +static inline void osc_enable_internal(uint8_t id) +{ + irqflags_t flags; + + Assert(id != OSC_ID_USBSOF); + + flags = cpu_irq_save(); + OSC.CTRL |= id; +#if (XMEGA_E && CONFIG_SYSCLK_RC8MHZ_LPM) + if(id == OSC_ID_RC8MHZ) { + OSC.CTRL |= OSC_RC8MLPM_bm; + } +#endif + cpu_irq_restore(flags); +} + +#if defined(BOARD_XOSC_HZ) || defined(__DOXYGEN__) + +/** + * \internal + * \brief Enable external oscillator \a id + * + * Do not call this function directly. Use osc_enable() instead. Also + * note that this function is only available if the board actually has + * an external oscillator crystal. + */ +static inline void osc_enable_external(uint8_t id) +{ + irqflags_t flags; + + Assert(id == OSC_ID_XOSC); + +#ifndef CONFIG_XOSC_32KHZ_LPM +# if (XMEGA_E && (BOARD_XOSC_TYPE == XOSC_TYPE_EXTERNAL) && defined(CONFIG_XOSC_EXTERNAL_PC4)) + OSC.XOSCCTRL = OSC_XOSCSEL4_bm; +# else + OSC.XOSCCTRL = BOARD_XOSC_TYPE | (CONFIG_XOSC_STARTUP << 2) | + CONFIG_XOSC_RANGE; +# endif +#else + OSC.XOSCCTRL = BOARD_XOSC_TYPE | (CONFIG_XOSC_STARTUP << 2) | + CONFIG_XOSC_RANGE | OSC_X32KLPM_bm; +#endif /* CONFIG_XOSC_32KHZ_LPM */ + + flags = cpu_irq_save(); + OSC.CTRL |= id; + cpu_irq_restore(flags); +} +#else + +static inline void osc_enable_external(uint8_t id) +{ + Assert(false); // No external oscillator on the selected board +} +#endif + +static inline void osc_disable(uint8_t id) +{ + irqflags_t flags; + + Assert(id != OSC_ID_USBSOF); + + flags = cpu_irq_save(); + OSC.CTRL &= ~id; + cpu_irq_restore(flags); +} + +static inline void osc_enable(uint8_t id) +{ + if (id != OSC_ID_XOSC) { + osc_enable_internal(id); + } else { + osc_enable_external(id); + } +} + +static inline bool osc_is_ready(uint8_t id) +{ + Assert(id != OSC_ID_USBSOF); + + return OSC.STATUS & id; +} + +//! \name XMEGA-Specific Oscillator Features +//@{ + +/** + * \brief Enable DFLL-based automatic calibration of an internal + * oscillator. + * + * The XMEGA features two Digital Frequency Locked Loops (DFLLs) which + * can be used to improve the accuracy of the 2 MHz and 32 MHz internal + * RC oscillators. The DFLL compares the oscillator frequency with a + * more accurate reference clock to do automatic run-time calibration of + * the oscillator. + * + * This function enables auto-calibration for either the 2 MHz or 32 MHz + * internal oscillator using either the 32.768 kHz calibrated internal + * oscillator or an external crystal oscillator as a reference. If the + * latter option is used, the crystal must be connected to the TOSC pins + * and run at 32.768 kHz. + * + * \param id The ID of the oscillator for which to enable + * auto-calibration: + * \arg \c OSC_ID_RC2MHZ or \c OSC_ID_RC32MHZ. + * \param ref_id The ID of the oscillator to use as a reference: + * \arg \c OSC_ID_RC32KHZ or \c OSC_ID_XOSC for internal or external 32 kHz + * reference, respectively. + * \arg \c OSC_ID_USBSOF for 32 MHz only when USB is available and running. + */ +static inline void osc_enable_autocalibration(uint8_t id, uint8_t ref_id) +{ + irqflags_t flags; + + flags = cpu_irq_save(); + switch (id) { + case OSC_ID_RC2MHZ: +#if !XMEGA_E + Assert((ref_id == OSC_ID_RC32KHZ) || (ref_id == OSC_ID_XOSC)); + if (ref_id == OSC_ID_XOSC) { + osc_enable(OSC_ID_RC32KHZ); + OSC.DFLLCTRL |= OSC_RC2MCREF_bm; + } else { + OSC.DFLLCTRL &= ~(OSC_RC2MCREF_bm); + } + DFLLRC2M.CTRL |= DFLL_ENABLE_bm; +#endif + break; + + case OSC_ID_RC32MHZ: +#if XMEGA_AU || XMEGA_B || XMEGA_C || XMEGA_E + Assert((ref_id == OSC_ID_RC32KHZ) + || (ref_id == OSC_ID_XOSC) +# if !XMEGA_E + || (ref_id == OSC_ID_USBSOF) +#endif + ); + + OSC.DFLLCTRL &= ~(OSC_RC32MCREF_gm); + + if (ref_id == OSC_ID_XOSC) { + osc_enable(OSC_ID_RC32KHZ); + OSC.DFLLCTRL |= OSC_RC32MCREF_XOSC32K_gc; + } + else if (ref_id == OSC_ID_RC32KHZ) { + OSC.DFLLCTRL |= OSC_RC32MCREF_RC32K_gc; + } +# if !XMEGA_E + else if (ref_id == OSC_ID_USBSOF) { + /* + * Calibrate 32MRC at 48MHz using USB SOF + * 48MHz / 1kHz = 0xBB80 + */ + DFLLRC32M.COMP1 = 0x80; + DFLLRC32M.COMP2 = 0xBB; + OSC.DFLLCTRL |= OSC_RC32MCREF_USBSOF_gc; + } +# endif +#else + Assert((ref_id == OSC_ID_RC32KHZ) || + (ref_id == OSC_ID_XOSC)); + +# if defined(OSC_RC32MCREF_gm) + OSC.DFLLCTRL &= ~(OSC_RC32MCREF_gm); +# endif + + if (ref_id == OSC_ID_XOSC) { + osc_enable(OSC_ID_RC32KHZ); +# if defined(OSC_RC32MCREF_gm) + OSC.DFLLCTRL |= OSC_RC32MCREF_XOSC32K_gc; +# else + OSC.DFLLCTRL |= OSC_RC32MCREF_bm; +# endif + } + else if (ref_id == OSC_ID_RC32KHZ) { +# if defined(OSC_RC32MCREF_gm) + OSC.DFLLCTRL |= OSC_RC32MCREF_RC32K_gc; +# else + OSC.DFLLCTRL &= ~(OSC_RC32MCREF_bm); +# endif + } +#endif + + DFLLRC32M.CTRL |= DFLL_ENABLE_bm; + break; + + default: + Assert(false); + break; + } + cpu_irq_restore(flags); +} + +/** + * \brief Disable DFLL-based automatic calibration of an internal + * oscillator. + * + * \see osc_enable_autocalibration + * + * \param id The ID of the oscillator for which to disable + * auto-calibration: + * \arg \c OSC_ID_RC2MHZ or \c OSC_ID_RC32MHZ. + */ +static inline void osc_disable_autocalibration(uint8_t id) +{ + switch (id) { + case OSC_ID_RC2MHZ: +#if !XMEGA_E + DFLLRC2M.CTRL = 0; +#endif + break; + + case OSC_ID_RC32MHZ: + DFLLRC32M.CTRL = 0; + break; + + default: + Assert(false); + break; + } +} + +/** + * \brief Load a specific calibration value for the specified oscillator. + * + * \param id The ID of the oscillator for which to disable + * auto-calibration: + * \arg \c OSC_ID_RC2MHZ or \c OSC_ID_RC32MHZ. + * \param calib The specific calibration value required: + * + */ +static inline void osc_user_calibration(uint8_t id, uint16_t calib) +{ + switch (id) { + case OSC_ID_RC2MHZ: +#if !XMEGA_E + DFLLRC2M.CALA=LSB(calib); + DFLLRC2M.CALB=MSB(calib); +#endif + break; + + case OSC_ID_RC32MHZ: + DFLLRC32M.CALA=LSB(calib); + DFLLRC32M.CALB=MSB(calib); + break; + +#if XMEGA_E + case OSC_ID_RC8MHZ: + OSC.RC8MCAL=LSB(calib); + break; +#endif + + default: + Assert(false); + break; + } +} +//@} + +static inline uint32_t osc_get_rate(uint8_t id) +{ + Assert(id != OSC_ID_USBSOF); + + switch (id) { + case OSC_ID_RC2MHZ: + return 2000000UL; + + case OSC_ID_RC32MHZ: +#ifdef CONFIG_OSC_RC32_CAL + return CONFIG_OSC_RC32_CAL; +#else + return 32000000UL; +#endif + + case OSC_ID_RC32KHZ: + return 32768UL; + +#ifdef BOARD_XOSC_HZ + case OSC_ID_XOSC: + return BOARD_XOSC_HZ; +#endif + + default: + Assert(false); + return 0; + } +} + +#endif /* __ASSEMBLY__ */ + +//! @} + +#endif /* XMEGA_OSC_H_INCLUDED */ diff --git a/AVR Code/USB_BULK_TEST/src/ASF/common/services/clock/xmega/pll.h b/AVR Code/USB_BULK_TEST/src/ASF/common/services/clock/xmega/pll.h new file mode 100644 index 00000000..b3254c77 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/common/services/clock/xmega/pll.h @@ -0,0 +1,274 @@ +/** + * \file + * + * \brief Chip-specific PLL management functions + * + * Copyright (c) 2010-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ +#ifndef XMEGA_PLL_H_INCLUDED +#define XMEGA_PLL_H_INCLUDED + +#include + +/** + * \weakgroup pll_group + * @{ + */ + +#define NR_PLLS 1 +#define PLL_MIN_HZ 10000000UL +#define PLL_MAX_HZ 200000000UL +#define PLL_NR_OPTIONS 0 + +enum pll_source { + //! 2 MHz Internal RC Oscillator + PLL_SRC_RC2MHZ = OSC_PLLSRC_RC2M_gc, + //! 32 MHz Internal RC Oscillator + PLL_SRC_RC32MHZ = OSC_PLLSRC_RC32M_gc, + //! External Clock Source + PLL_SRC_XOSC = OSC_PLLSRC_XOSC_gc, +}; + +#define pll_get_default_rate(pll_id) \ + pll_get_default_rate_priv(CONFIG_PLL##pll_id##_SOURCE, \ + CONFIG_PLL##pll_id##_MUL, \ + CONFIG_PLL##pll_id##_DIV) + +/** + * \internal + * \brief Return clock rate for specified PLL settings. + * + * \note Due to the hardware implementation of the PLL, \a div must be 4 if the + * 32 MHz RC oscillator is used as reference and 1 otherwise. The reference must + * be above 440 kHz, and the output between 10 and 200 MHz. + * + * \param src ID of the PLL's reference source oscillator. + * \param mul Multiplier for the PLL. + * \param div Divisor for the PLL. + * + * \retval Output clock rate from PLL. + */ +static inline uint32_t pll_get_default_rate_priv(enum pll_source src, + unsigned int mul, unsigned int div) +{ + uint32_t rate; + + switch (src) { + case PLL_SRC_RC2MHZ: + rate = 2000000UL; + Assert(div == 1); + break; + + case PLL_SRC_RC32MHZ: +#ifdef CONFIG_OSC_RC32_CAL //32MHz oscillator is calibrated to another frequency + rate = CONFIG_OSC_RC32_CAL / 4; +#else + rate = 8000000UL; + #endif + Assert(div == 4); + break; + + case PLL_SRC_XOSC: + rate = osc_get_rate(OSC_ID_XOSC); + Assert(div == 1); + break; + + default: + break; + } + + Assert(rate >= 440000UL); + + rate *= mul; + + Assert(rate >= PLL_MIN_HZ); + Assert(rate <= PLL_MAX_HZ); + + return rate; +} + +struct pll_config { + uint8_t ctrl; +}; + +/** + * \note The XMEGA PLL hardware uses hard-wired input dividers, so the + * user must ensure that \a div is set as follows: + * - If \a src is PLL_SRC_32MHZ, \a div must be set to 4. + * - Otherwise, \a div must be set to 1. + */ +static inline void pll_config_init(struct pll_config *cfg, enum pll_source src, + unsigned int div, unsigned int mul) +{ + Assert(mul >= 1 && mul <= 31); + + if (src == PLL_SRC_RC32MHZ) { + Assert(div == 4); + } else { + Assert(div == 1); + } + + /* Initialize the configuration */ + cfg->ctrl = src | (mul << OSC_PLLFAC_gp); +} + +#define pll_config_defaults(cfg, pll_id) \ + pll_config_init(cfg, \ + CONFIG_PLL##pll_id##_SOURCE, \ + CONFIG_PLL##pll_id##_DIV, \ + CONFIG_PLL##pll_id##_MUL) + +static inline void pll_config_read(struct pll_config *cfg, unsigned int pll_id) +{ + Assert(pll_id < NR_PLLS); + + cfg->ctrl = OSC.PLLCTRL; +} + +static inline void pll_config_write(const struct pll_config *cfg, + unsigned int pll_id) +{ + Assert(pll_id < NR_PLLS); + + OSC.PLLCTRL = cfg->ctrl; +} + +/** + * \note If a different PLL reference oscillator than those enabled by + * \ref sysclk_init() is used, the user must ensure that the desired reference + * is enabled prior to calling this function. + */ +static inline void pll_enable(const struct pll_config *cfg, + unsigned int pll_id) +{ + irqflags_t flags; + + Assert(pll_id < NR_PLLS); + + flags = cpu_irq_save(); + pll_config_write(cfg, pll_id); + OSC.CTRL |= OSC_PLLEN_bm; + cpu_irq_restore(flags); +} + +/*! \note This will not automatically disable the reference oscillator that is + * configured for the PLL. + */ +static inline void pll_disable(unsigned int pll_id) +{ + irqflags_t flags; + + Assert(pll_id < NR_PLLS); + + flags = cpu_irq_save(); + OSC.CTRL &= ~OSC_PLLEN_bm; + cpu_irq_restore(flags); +} + +static inline bool pll_is_locked(unsigned int pll_id) +{ + Assert(pll_id < NR_PLLS); + + return OSC.STATUS & OSC_PLLRDY_bm; +} + +static inline void pll_enable_source(enum pll_source src) +{ + switch (src) { + case PLL_SRC_RC2MHZ: + break; + + case PLL_SRC_RC32MHZ: + if (!osc_is_ready(OSC_ID_RC32MHZ)) { + osc_enable(OSC_ID_RC32MHZ); + osc_wait_ready(OSC_ID_RC32MHZ); +#ifdef CONFIG_OSC_AUTOCAL_RC32MHZ_REF_OSC + if (CONFIG_OSC_AUTOCAL_RC32MHZ_REF_OSC + != OSC_ID_USBSOF) { + osc_enable(CONFIG_OSC_AUTOCAL_RC32MHZ_REF_OSC); + osc_wait_ready(CONFIG_OSC_AUTOCAL_RC32MHZ_REF_OSC); + } + osc_enable_autocalibration(OSC_ID_RC32MHZ, + CONFIG_OSC_AUTOCAL_RC32MHZ_REF_OSC); +#endif + } + break; + + case PLL_SRC_XOSC: + if (!osc_is_ready(OSC_ID_XOSC)) { + osc_enable(OSC_ID_XOSC); + osc_wait_ready(OSC_ID_XOSC); + } + break; + default: + Assert(false); + break; + } +} + +static inline void pll_enable_config_defaults(unsigned int pll_id) +{ + struct pll_config pllcfg; + + if (pll_is_locked(pll_id)) { + return; // Pll already running + } + switch (pll_id) { +#ifdef CONFIG_PLL0_SOURCE + case 0: + pll_enable_source(CONFIG_PLL0_SOURCE); + pll_config_init(&pllcfg, + CONFIG_PLL0_SOURCE, + CONFIG_PLL0_DIV, + CONFIG_PLL0_MUL); + break; +#endif + default: + Assert(false); + break; + } + pll_enable(&pllcfg, pll_id); + while (!pll_is_locked(pll_id)); +} + +//! @} + +#endif /* XMEGA_PLL_H_INCLUDED */ diff --git a/AVR Code/USB_BULK_TEST/src/ASF/common/services/clock/xmega/sysclk.c b/AVR Code/USB_BULK_TEST/src/ASF/common/services/clock/xmega/sysclk.c new file mode 100644 index 00000000..103c131b --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/common/services/clock/xmega/sysclk.c @@ -0,0 +1,260 @@ +/** + * \file + * + * \brief Chip-specific system clock management functions + * + * Copyright (c) 2010-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ + +#include + +#include +#include +#include + +#if XMEGA_AU || XMEGA_B || XMEGA_C +# include +#endif + + +void sysclk_init(void) +{ + uint8_t *reg = (uint8_t *)&PR.PRGEN; + uint8_t i; +#ifdef CONFIG_OSC_RC32_CAL + uint16_t cal; + /* avoid Cppcheck Warning */ + UNUSED(cal); +#endif + bool need_rc2mhz = false; + + /* Turn off all peripheral clocks that can be turned off. */ + for (i = 0; i <= SYSCLK_PORT_F; i++) { + *(reg++) = 0xff; + } + + /* Set up system clock prescalers if different from defaults */ + if ((CONFIG_SYSCLK_PSADIV != SYSCLK_PSADIV_1) + || (CONFIG_SYSCLK_PSBCDIV != SYSCLK_PSBCDIV_1_1)) { + sysclk_set_prescalers(CONFIG_SYSCLK_PSADIV, + CONFIG_SYSCLK_PSBCDIV); + } +#if (CONFIG_OSC_RC32_CAL==48000000UL) + MSB(cal) = nvm_read_production_signature_row( + nvm_get_production_signature_row_offset(USBRCOSC)); + LSB(cal) = nvm_read_production_signature_row( + nvm_get_production_signature_row_offset(USBRCOSCA)); + /* + * If a device has an uncalibrated value in the + * production signature row (early sample part), load a + * sane default calibration value. + */ + if (cal == 0xFFFF) { + cal = 0x2340; + } + osc_user_calibration(OSC_ID_RC32MHZ,cal); +#endif + /* + * Switch to the selected initial system clock source, unless + * the default internal 2 MHz oscillator is selected. + */ + if (CONFIG_SYSCLK_SOURCE == SYSCLK_SRC_RC2MHZ) { + need_rc2mhz = true; + } else { + switch (CONFIG_SYSCLK_SOURCE) { + case SYSCLK_SRC_RC32MHZ: + osc_enable(OSC_ID_RC32MHZ); + osc_wait_ready(OSC_ID_RC32MHZ); +#ifdef CONFIG_OSC_AUTOCAL_RC32MHZ_REF_OSC + if (CONFIG_OSC_AUTOCAL_RC32MHZ_REF_OSC + != OSC_ID_USBSOF) { + osc_enable(CONFIG_OSC_AUTOCAL_RC32MHZ_REF_OSC); + osc_wait_ready(CONFIG_OSC_AUTOCAL_RC32MHZ_REF_OSC); + } + osc_enable_autocalibration(OSC_ID_RC32MHZ, + CONFIG_OSC_AUTOCAL_RC32MHZ_REF_OSC); +#endif + break; + + case SYSCLK_SRC_RC32KHZ: + osc_enable(OSC_ID_RC32KHZ); + osc_wait_ready(OSC_ID_RC32KHZ); + break; + + case SYSCLK_SRC_XOSC: + osc_enable(OSC_ID_XOSC); + osc_wait_ready(OSC_ID_XOSC); + break; + +#ifdef CONFIG_PLL0_SOURCE + case SYSCLK_SRC_PLL: + if (CONFIG_PLL0_SOURCE == PLL_SRC_RC2MHZ) { + need_rc2mhz = true; + } + pll_enable_config_defaults(0); + break; +#endif +#if XMEGA_E + case SYSCLK_SRC_RC8MHZ: + osc_enable(OSC_ID_RC8MHZ); + osc_wait_ready(OSC_ID_RC8MHZ); + break; +#endif + default: + //unhandled_case(CONFIG_SYSCLK_SOURCE); + return; + } + + ccp_write_io((uint8_t *)&CLK.CTRL, CONFIG_SYSCLK_SOURCE); + Assert(CLK.CTRL == CONFIG_SYSCLK_SOURCE); + } + + if (need_rc2mhz) { +#ifdef CONFIG_OSC_AUTOCAL_RC2MHZ_REF_OSC + osc_enable(CONFIG_OSC_AUTOCAL_RC2MHZ_REF_OSC); + osc_wait_ready(CONFIG_OSC_AUTOCAL_RC2MHZ_REF_OSC); + osc_enable_autocalibration(OSC_ID_RC2MHZ, + CONFIG_OSC_AUTOCAL_RC2MHZ_REF_OSC); +#endif + } else { + osc_disable(OSC_ID_RC2MHZ); + } + +#ifdef CONFIG_RTC_SOURCE + sysclk_rtcsrc_enable(CONFIG_RTC_SOURCE); +#endif +} + +void sysclk_enable_module(enum sysclk_port_id port, uint8_t id) +{ + irqflags_t flags = cpu_irq_save(); + + *((uint8_t *)&PR.PRGEN + port) &= ~id; + + cpu_irq_restore(flags); +} + +void sysclk_disable_module(enum sysclk_port_id port, uint8_t id) +{ + irqflags_t flags = cpu_irq_save(); + + *((uint8_t *)&PR.PRGEN + port) |= id; + + cpu_irq_restore(flags); +} + +#if XMEGA_AU || XMEGA_B || XMEGA_C || defined(__DOXYGEN__) + +/** + * \brief Enable clock for the USB module + * + * \pre CONFIG_USBCLK_SOURCE must be defined. + * + * \param frequency The required USB clock frequency in MHz: + * \arg \c 6 for 6 MHz + * \arg \c 48 for 48 MHz + */ +void sysclk_enable_usb(uint8_t frequency) +{ + uint8_t prescaler; + + Assert((frequency == 6) || (frequency == 48)); + + /* + * Enable or disable prescaler depending on if the USB frequency is 6 + * MHz or 48 MHz. Only 6 MHz USB frequency requires prescaling. + */ + if (frequency == 6) { + prescaler = CLK_USBPSDIV_8_gc; + } + else { + prescaler = 0; + } + + /* + * Switch to the system clock selected by the user. + */ + switch (CONFIG_USBCLK_SOURCE) { + case USBCLK_SRC_RCOSC: + if (!osc_is_ready(OSC_ID_RC32MHZ)) { + osc_enable(OSC_ID_RC32MHZ); + osc_wait_ready(OSC_ID_RC32MHZ); +#ifdef CONFIG_OSC_AUTOCAL_RC32MHZ_REF_OSC + if (CONFIG_OSC_AUTOCAL_RC32MHZ_REF_OSC + != OSC_ID_USBSOF) { + osc_enable(CONFIG_OSC_AUTOCAL_RC32MHZ_REF_OSC); + osc_wait_ready(CONFIG_OSC_AUTOCAL_RC32MHZ_REF_OSC); + } + osc_enable_autocalibration(OSC_ID_RC32MHZ, + CONFIG_OSC_AUTOCAL_RC32MHZ_REF_OSC); +#endif + } + ccp_write_io((uint8_t *)&CLK.USBCTRL, (prescaler) + | CLK_USBSRC_RC32M_gc + | CLK_USBSEN_bm); + break; + +#ifdef CONFIG_PLL0_SOURCE + case USBCLK_SRC_PLL: + pll_enable_config_defaults(0); + ccp_write_io((uint8_t *)&CLK.USBCTRL, (prescaler) + | CLK_USBSRC_PLL_gc + | CLK_USBSEN_bm); + break; +#endif + + default: + Assert(false); + break; + } + + sysclk_enable_module(SYSCLK_PORT_GEN, SYSCLK_USB); +} + +/** + * \brief Disable clock for the USB module + */ +void sysclk_disable_usb(void) +{ + sysclk_disable_module(SYSCLK_PORT_GEN, SYSCLK_USB); + ccp_write_io((uint8_t *)&CLK.USBCTRL, 0); +} +#endif // XMEGA_AU || XMEGA_B || XMEGA_C diff --git a/AVR Code/USB_BULK_TEST/src/ASF/common/services/clock/xmega/sysclk.h b/AVR Code/USB_BULK_TEST/src/ASF/common/services/clock/xmega/sysclk.h new file mode 100644 index 00000000..062a4462 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/common/services/clock/xmega/sysclk.h @@ -0,0 +1,1534 @@ +/** + * \file + * + * \brief Chip-specific system clock management functions + * + * Copyright (c) 2010-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ +#ifndef XMEGA_SYSCLK_H_INCLUDED +#define XMEGA_SYSCLK_H_INCLUDED + +#include +#include +#include +#include +#include +#include + +// Include clock configuration for the project. +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \page sysclk_quickstart Quick Start Guide for the System Clock Management service (XMEGA) + * + * This is the quick start guide for the \ref sysclk_group "System Clock Management" + * service, with step-by-step instructions on how to configure and use the service for + * specific use cases. + * + * \section sysclk_quickstart_usecases System Clock Management use cases + * - \ref sysclk_quickstart_basic + * - \ref sysclk_quickstart_use_case_2 + * - \ref sysclk_quickstart_use_case_3 + * + * \section sysclk_quickstart_basic Basic usage of the System Clock Management service + * This section will present a basic use case for the System Clock Management service. + * This use case will configure the main system clock to 32MHz, using an internal PLL + * module to multiply the frequency of a crystal attached to the microcontroller. The + * secondary peripheral bus clock and CPU clock are scaled down from the speed of the + * main system clock. + * + * \subsection sysclk_quickstart_use_case_1_prereq Prerequisites + * - None + * + * \subsection sysclk_quickstart_use_case_1_setup_steps Initialization code + * Add to the application initialization code: + * \code + sysclk_init(); +\endcode + * + * \subsection sysclk_quickstart_use_case_1_setup_steps_workflow Workflow + * -# Configure the system clocks according to the settings in conf_clock.h: + * \code sysclk_init(); \endcode + * + * \subsection sysclk_quickstart_use_case_1_example_code Example code + * Add or uncomment the following in your conf_clock.h header file, commenting out all other + * definitions of the same symbol(s): + * \code + #define CONFIG_SYSCLK_SOURCE SYSCLK_SRC_PLL + + // Fpll0 = (Fclk * PLL_mul) / PLL_div + #define CONFIG_PLL0_SOURCE PLL_SRC_XOSC + #define CONFIG_PLL0_MUL (32000000UL / BOARD_XOSC_HZ) + #define CONFIG_PLL0_DIV 1 + + // Fbus = Fsys / (2 ^ BUS_div) + #define CONFIG_SYSCLK_PSADIV SYSCLK_PSADIV_1 + #define CONFIG_SYSCLK_PSBCDIV SYSCLK_PSBCDIV_1_2 +\endcode + * + * \subsection sysclk_quickstart_use_case_1_example_workflow Workflow + * -# Configure the main system clock to use the output of the PLL module as its source: + * \code #define CONFIG_SYSCLK_SOURCE SYSCLK_SRC_PLL \endcode + * -# Configure the PLL0 module to use external crystal oscillator XOSC as its source: + * \code #define CONFIG_PLL0_SOURCE PLL_SRC_XOSC \endcode + * -# Configure the PLL0 module to multiply the external oscillator XOSC frequency up to 32MHz: + * \code + #define CONFIG_PLL0_MUL (32000000UL / BOARD_XOSC_HZ) + #define CONFIG_PLL0_DIV 1 +\endcode + * \note For user boards, \c BOARD_XOSC_HZ should be defined in the board \c conf_board.h configuration + * file as the frequency of the crystal attached to XOSC. + * -# Configure the main CPU clock and slow peripheral bus to run at 16MHz, run the fast peripheral bus + * at the full 32MHz speed: + * \code + #define CONFIG_SYSCLK_PSADIV SYSCLK_PSADIV_1 + #define CONFIG_SYSCLK_PSBCDIV SYSCLK_PSBCDIV_1_2 +\endcode + * \note Some dividers are powers of two, while others are integer division factors. Refer to the + * formulas in the conf_clock.h template commented above each division define. + */ + +/** + * \page sysclk_quickstart_use_case_2 Advanced use case - Peripheral Bus Clock Management (XMEGA) + * + * \section sysclk_quickstart_use_case_2 Advanced use case - Peripheral Bus Clock Management + * This section will present a more advanced use case for the System Clock Management service. + * This use case will configure the main system clock to 32MHz, using an internal PLL + * module to multiply the frequency of a crystal attached to the microcontroller. The peripheral bus + * clocks will run at the same speed as the CPU clock, and the USB clock will be configured to use + * the internal 32MHz (nominal) RC oscillator calibrated to 48MHz with the USB Start-of-Frame as the + * calibration reference. + * + * \subsection sysclk_quickstart_use_case_2_prereq Prerequisites + * - None + * + * \subsection sysclk_quickstart_use_case_2_setup_steps Initialization code + * Add to the application initialization code: + * \code + sysclk_init(); +\endcode + * + * \subsection sysclk_quickstart_use_case_2_setup_steps_workflow Workflow + * -# Configure the system clocks according to the settings in conf_clock.h: + * \code sysclk_init(); \endcode + * + * \subsection sysclk_quickstart_use_case_2_example_code Example code + * Add or uncomment the following in your conf_clock.h header file, commenting out all other + * definitions of the same symbol(s): + * \code + #define CONFIG_SYSCLK_SOURCE SYSCLK_SRC_PLL + + // Fpll0 = (Fclk * PLL_mul) / PLL_div + #define CONFIG_PLL0_SOURCE PLL_SRC_XOSC + #define CONFIG_PLL0_MUL (32000000UL / BOARD_XOSC_HZ) + #define CONFIG_PLL0_DIV 1 + + // Fbus = Fsys / (2 ^ BUS_div) + #define CONFIG_SYSCLK_PSADIV SYSCLK_PSADIV_1 + #define CONFIG_SYSCLK_PSBCDIV SYSCLK_PSBCDIV_1_1 + + #define CONFIG_USBCLK_SOURCE USBCLK_SRC_RCOSC + #define CONFIG_OSC_RC32_CAL 48000000UL + #define CONFIG_OSC_AUTOCAL OSC_ID_RC32MHZ + #define CONFIG_OSC_AUTOCAL_REF_OSC OSC_ID_USBSOF +\endcode + * + * \subsection sysclk_quickstart_use_case_2_example_workflow Workflow + * -# Configure the main system clock to use the output of the PLL module as its source: + * \code #define CONFIG_SYSCLK_SOURCE SYSCLK_SRC_PLL \endcode + * -# Configure the PLL0 module to use external crystal oscillator XOSC as its source: + * \code #define CONFIG_PLL0_SOURCE PLL_SRC_XOSC \endcode + * -# Configure the PLL0 module to multiply the external oscillator XOSC frequency up to 32MHz: + * \code + #define CONFIG_PLL0_MUL (32000000UL / BOARD_XOSC_HZ) + #define CONFIG_PLL0_DIV 1 +\endcode + * \note For user boards, \c BOARD_XOSC_HZ should be defined in the board \c conf_board.h configuration + * file as the frequency of the crystal attached to XOSC. + * -# Configure the main CPU and peripheral bus clocks to run at 32MHz: + * \code + #define CONFIG_SYSCLK_PSADIV SYSCLK_PSADIV_1 + #define CONFIG_SYSCLK_PSBCDIV SYSCLK_PSBCDIV_1_2 +\endcode + * \note Some dividers are powers of two, while others are integer division factors. Refer to the + * formulas in the conf_clock.h template commented above each division define. + * -# Configure the USB module clock to use the internal fast (32MHz) RC oscillator: + * \code + #define CONFIG_USBCLK_SOURCE USBCLK_SRC_RCOSC +\endcode + * \note When the internal RC oscillator is used for the USB module, it must be recalibrated to 48MHz for + * the USB peripheral to function. If this oscillator is then used as the main system clock source, + * the clock must be divided down via the peripheral and CPU bus clock division constants to ensure + * that the maximum allowable CPU frequency is not exceeded. + * -# Configure the internal fast (32MHz) RC oscillator to calibrate to 48MHz using the USB Start of Frame (SOF) + * as the calibration reference: + * \code + #define CONFIG_OSC_RC32_CAL 48000000UL + #define CONFIG_OSC_AUTOCAL OSC_ID_RC32MHZ + #define CONFIG_OSC_AUTOCAL_REF_OSC OSC_ID_USBSOF +\endcode + */ + +/** + * \page sysclk_quickstart_use_case_3 Advanced use case - DFLL auto-calibration (XMEGA) + * + * \section sysclk_quickstart_use_case_3 Advanced use case - DFLL auto-calibration + * This section will present a more advanced use case for the System Clock + * Management service. This use case will configure the main system clock to + * 2MHz, using the internal 2MHz RC oscillator calibrated against the internal + * 32KHz oscillator. The peripheral bus clocks will run at the same speed as + * the CPU clock, and the USB clock will be configured to use the internal + * 32MHz (nominal) RC oscillator calibrated to 48MHz with the USB + * Start-of-Frame as the calibration reference. + * + * \subsection sysclk_quickstart_use_case_3_prereq Prerequisites + * - None + * + * \subsection sysclk_quickstart_use_case_3_setup_steps Initialization code + * Add to the application initialization code: + * \code + sysclk_init(); +\endcode + * + * \subsection sysclk_quickstart_use_case_3_setup_steps_workflow Workflow + * -# Configure the system clocks according to the settings in conf_clock.h: + * \code sysclk_init(); \endcode + * + * \subsection sysclk_quickstart_use_case_3_example_code Example code + * Add or uncomment the following in your conf_clock.h header file, + * commenting out all other definitions of the same symbol(s): + * \code + #define CONFIG_SYSCLK_SOURCE SYSCLK_SRC_RC2MHZ + + #define CONFIG_OSC_AUTOCAL_RC2MHZ_REF_OSC OSC_ID_RC32KHZ + + #define CONFIG_USBCLK_SOURCE USBCLK_SRC_RCOSC + #define CONFIG_OSC_RC32_CAL 48000000UL + #define CONFIG_OSC_AUTOCAL_RC32MHZ_REF_OSC OSC_ID_USBSOF +\endcode + * + * \subsection sysclk_quickstart_use_case_3_example_workflow Workflow + * -# Configure the main system clock to use the internal 2MHz RC oscillator + * as its source: + * \code + #define CONFIG_SYSCLK_SOURCE SYSCLK_SRC_RC2MHZ +\endcode + * -# Configure the 2MHz DFLL auto-calibration to use the internal 32KHz RC + * oscillator: + * \code + #define CONFIG_OSC_AUTOCAL_RC2MHZ_REF_OSC OSC_ID_RC32KHZ +\endcode + * \note For auto-calibration it's typically more relevant to use an external + * 32KHz crystal. So if that's the case use OSC_ID_XOSC instead. + * -# Configure the USB module clock to use the internal fast (32MHz) RC oscillator: + * \code + #define CONFIG_USBCLK_SOURCE USBCLK_SRC_RCOSC +\endcode + * -# Configure the internal fast (32MHz) RC oscillator to calibrate to 48MHz + * using the USB Start of Frame (SOF) as the calibration reference: + * \code + #define CONFIG_USBCLK_SOURCE USBCLK_SRC_RCOSC + #define CONFIG_OSC_RC32_CAL 48000000UL + #define CONFIG_OSC_AUTOCAL_RC32MHZ_REF_OSC OSC_ID_USBSOF +\endcode + */ + +/* Wrap old config into new one */ +#ifdef CONFIG_OSC_AUTOCAL +# if CONFIG_OSC_AUTOCAL == OSC_ID_RC2MHZ +# define CONFIG_OSC_AUTOCAL_RC2MHZ_REF_OSC CONFIG_OSC_AUTOCAL_REF_OSC +# elif CONFIG_OSC_AUTOCAL == OSC_ID_RC32MHZ +# define CONFIG_OSC_AUTOCAL_RC32MHZ_REF_OSC CONFIG_OSC_AUTOCAL_REF_OSC +# else +# error Bad configuration of CONFIG_OSC_AUTOCAL and/or CONFIG_OSC_AUTOCAL_REF_OSC +# endif +#endif + +// Use 2 MHz with no prescaling if config was empty. +#ifndef CONFIG_SYSCLK_SOURCE +# define CONFIG_SYSCLK_SOURCE SYSCLK_SRC_RC2MHZ +#endif /* CONFIG_SYSCLK_SOURCE */ + +#ifndef CONFIG_SYSCLK_PSADIV +# define CONFIG_SYSCLK_PSADIV SYSCLK_PSADIV_1 +#endif /* CONFIG_SYSCLK_PSADIV */ + +#ifndef CONFIG_SYSCLK_PSBCDIV +# define CONFIG_SYSCLK_PSBCDIV SYSCLK_PSBCDIV_1_1 +#endif /* CONFIG_SYSCLK_PSBCDIV */ + +/** + * \weakgroup sysclk_group + * + * \section sysclk_group_config Configuration Symbols + * + * The following configuration symbols may be used to specify the + * initial system clock configuration. If any of the symbols are not + * set, reasonable defaults will be provided. + * - \b CONFIG_SYSCLK_SOURCE: The initial system clock source. + * - \b CONFIG_SYSCLK_PSADIV: The initial Prescaler A setting. + * - \b CONFIG_SYSCLK_PSBCDIV: The initial Prescaler B setting. + * - \b CONFIG_USBCLK_SOURCE: The initial USB clock source. + * + * @{ + */ + +//! \name System Clock Sources +//@{ +//! Internal 2 MHz RC oscillator +#define SYSCLK_SRC_RC2MHZ CLK_SCLKSEL_RC2M_gc +//! Internal 32 MHz RC oscillator +#define SYSCLK_SRC_RC32MHZ CLK_SCLKSEL_RC32M_gc +//! Internal 32 KHz RC oscillator +#define SYSCLK_SRC_RC32KHZ CLK_SCLKSEL_RC32K_gc +//! External oscillator +#define SYSCLK_SRC_XOSC CLK_SCLKSEL_XOSC_gc +//! Phase-Locked Loop +#define SYSCLK_SRC_PLL CLK_SCLKSEL_PLL_gc +#if XMEGA_E +//! Internal 8 MHz RC oscillator +# define SYSCLK_SRC_RC8MHZ CLK_SCLKSEL_RC8M_gc +#endif +//@} + +//! \name Prescaler A Setting (relative to CLKsys) +//@{ +#define SYSCLK_PSADIV_1 CLK_PSADIV_1_gc //!< Do not prescale +#define SYSCLK_PSADIV_2 CLK_PSADIV_2_gc //!< Prescale CLKper4 by 2 +#define SYSCLK_PSADIV_4 CLK_PSADIV_4_gc //!< Prescale CLKper4 by 4 +#define SYSCLK_PSADIV_8 CLK_PSADIV_8_gc //!< Prescale CLKper4 by 8 +#define SYSCLK_PSADIV_16 CLK_PSADIV_16_gc //!< Prescale CLKper4 by 16 +#define SYSCLK_PSADIV_32 CLK_PSADIV_32_gc //!< Prescale CLKper4 by 32 +#define SYSCLK_PSADIV_64 CLK_PSADIV_64_gc //!< Prescale CLKper4 by 64 +#define SYSCLK_PSADIV_128 CLK_PSADIV_128_gc //!< Prescale CLKper4 by 128 +#define SYSCLK_PSADIV_256 CLK_PSADIV_256_gc //!< Prescale CLKper4 by 256 +#define SYSCLK_PSADIV_512 CLK_PSADIV_512_gc //!< Prescale CLKper4 by 512 + +#if XMEGA_E +# define SYSCLK_PSADIV_6 CLK_PSADIV_6_gc //!< Prescale CLKper4 by 6 +# define SYSCLK_PSADIV_10 CLK_PSADIV_10_gc //!< Prescale CLKper4 by 10 +# define SYSCLK_PSADIV_12 CLK_PSADIV_12_gc //!< Prescale CLKper4 by 12 +# define SYSCLK_PSADIV_24 CLK_PSADIV_24_gc //!< Prescale CLKper4 by 24 +# define SYSCLK_PSADIV_48 CLK_PSADIV_48_gc //!< Prescale CLKper4 by 48 +#endif +//@} + +//! \name Prescaler B and C Setting (relative to CLKper4) +//@{ +//! Do not prescale +#define SYSCLK_PSBCDIV_1_1 CLK_PSBCDIV_1_1_gc +//! Prescale CLKper and CLKcpu by 2 +#define SYSCLK_PSBCDIV_1_2 CLK_PSBCDIV_1_2_gc +//! Prescale CLKper2, CLKper and CLKcpu by 4 +#define SYSCLK_PSBCDIV_4_1 CLK_PSBCDIV_4_1_gc +//! Prescale CLKper2 by 2, CLKper and CLKcpu by 4 +#define SYSCLK_PSBCDIV_2_2 CLK_PSBCDIV_2_2_gc +//@} + +//! \name System Clock Port Numbers +enum sysclk_port_id { + SYSCLK_PORT_GEN, //!< Devices not associated with a specific port. + SYSCLK_PORT_A, //!< Devices on PORTA + SYSCLK_PORT_B, //!< Devices on PORTB + SYSCLK_PORT_C, //!< Devices on PORTC + SYSCLK_PORT_D, //!< Devices on PORTD + SYSCLK_PORT_E, //!< Devices on PORTE + SYSCLK_PORT_F, //!< Devices on PORTF +}; + +/*! \name Clocks not associated with any port + * + * \note See the datasheet for available modules in the device. + */ +//@{ +#define SYSCLK_DMA PR_DMA_bm //!< DMA Controller +#define SYSCLK_EDMA PR_EDMA_bm //!< EDMA Controller +#define SYSCLK_EVSYS PR_EVSYS_bm //!< Event System +#define SYSCLK_RTC PR_RTC_bm //!< Real-Time Counter +#define SYSCLK_EBI PR_EBI_bm //!< Ext Bus Interface +#define SYSCLK_AES PR_AES_bm //!< AES Module +#define SYSCLK_USB PR_USB_bm //!< USB Module +#define SYSCLK_XCL PR_XCL_bm //!< USB Module +//@} + +/*! \name Clocks on PORTA and PORTB + * + * \note See the datasheet for available modules in the device. + */ +//@{ +#define SYSCLK_AC PR_AC_bm //!< Analog Comparator +#define SYSCLK_ADC PR_ADC_bm //!< A/D Converter +#define SYSCLK_DAC PR_DAC_bm //!< D/A Converter +//@} + +/*! \name Clocks on PORTC, PORTD, PORTE and PORTF + * + * \note See the datasheet for available modules in the device. + */ +//@{ +#define SYSCLK_TC0 PR_TC0_bm //!< Timer/Counter 0 +#define SYSCLK_TC1 PR_TC1_bm //!< Timer/Counter 1 +#define SYSCLK_TC4 PR_TC4_bm //!< Timer/Counter 0 +#define SYSCLK_TC5 PR_TC5_bm //!< Timer/Counter 1 +#define SYSCLK_HIRES PR_HIRES_bm //!< Hi-Res Extension +#define SYSCLK_SPI PR_SPI_bm //!< SPI controller +#define SYSCLK_USART0 PR_USART0_bm //!< USART 0 +#define SYSCLK_USART1 PR_USART1_bm //!< USART 1 +#define SYSCLK_TWI PR_TWI_bm //!< TWI controller +//@} + +/** + * \name RTC clock source identifiers + * + * @{ + */ + +/** 1kHz from internal ULP oscillator. Low precision */ +#define SYSCLK_RTCSRC_ULP CLK_RTCSRC_ULP_gc +/** 1.024kHz from 32.768kHz crystal oscillator TOSC */ +#define SYSCLK_RTCSRC_TOSC CLK_RTCSRC_TOSC_gc +/** 1.024kHz from 32.768kHz internal RC oscillator */ +#define SYSCLK_RTCSRC_RCOSC CLK_RTCSRC_RCOSC_gc +/** 32.768kHz from crystal oscillator TOSC */ +#define SYSCLK_RTCSRC_TOSC32 CLK_RTCSRC_TOSC32_gc +/** 32.768kHz from internal RC oscillator */ +#define SYSCLK_RTCSRC_RCOSC32 CLK_RTCSRC_RCOSC32_gc +/** External clock on TOSC1 */ +#define SYSCLK_RTCSRC_EXTCLK CLK_RTCSRC_EXTCLK_gc + +/** @} */ + +#if XMEGA_AU || XMEGA_B || XMEGA_C +//! \name USB Clock Sources +//@{ +//! Internal 32 MHz RC oscillator +#define USBCLK_SRC_RCOSC 0 +//! Phase-Locked Loop +#define USBCLK_SRC_PLL 1 +//@} + +/** + * \def CONFIG_USBCLK_SOURCE + * \brief Configuration symbol for the USB clock source + * + * If the device features an USB module, and this is intended to be used, this + * symbol must be defined with the clock source configuration. + * + * Define this as one of the \c USBCLK_SRC_xxx definitions. If the PLL is + * selected, it must be configured to run at 48 MHz. If the 32 MHz RC oscillator + * is selected, it must be tuned to 48 MHz by means of the DFLL. + */ +#ifdef __DOXYGEN__ +# define CONFIG_USBCLK_SOURCE +#endif + +#endif // XMEGA_AU || XMEGA_B || XMEGA_C + +#ifndef __ASSEMBLY__ + +/** + * \name Querying the system clock and its derived clocks + */ +//@{ + +/** + * \brief Return the current rate in Hz of the main system clock + * + * \todo This function assumes that the main clock source never changes + * once it's been set up, and that PLL0 always runs at the compile-time + * configured default rate. While this is probably the most common + * configuration, which we want to support as a special case for + * performance reasons, we will at some point need to support more + * dynamic setups as well. + * + * \return Frequency of the main system clock, in Hz. + */ +static inline uint32_t sysclk_get_main_hz(void) +{ + switch (CONFIG_SYSCLK_SOURCE) { + case SYSCLK_SRC_RC2MHZ: + return 2000000UL; +#if XMEGA_E + case SYSCLK_SRC_RC8MHZ: + return 8000000UL; +#endif + case SYSCLK_SRC_RC32MHZ: +#ifdef CONFIG_OSC_RC32_CAL + return CONFIG_OSC_RC32_CAL; +#else + return 32000000UL; +#endif + + case SYSCLK_SRC_RC32KHZ: + return 32768UL; + +#ifdef BOARD_XOSC_HZ + case SYSCLK_SRC_XOSC: + return BOARD_XOSC_HZ; +#endif + +#ifdef CONFIG_PLL0_SOURCE + case SYSCLK_SRC_PLL: + return pll_get_default_rate(0); +#endif + + default: + //unhandled_case(CONFIG_SYSCLK_SOURCE); + return 0; + } +} + +/** + * \brief Return the current rate in Hz of clk_PER4. + * + * This clock can run up to four times faster than the CPU clock. + * + * \return Frequency of the clk_PER4 clock, in Hz. + */ +static inline uint32_t sysclk_get_per4_hz(void) +{ + uint8_t shift = 0; + +#if XMEGA_E + if (CONFIG_SYSCLK_PSADIV > SYSCLK_PSADIV_512) { + switch (CONFIG_SYSCLK_PSADIV) { + case SYSCLK_PSADIV_6: + return sysclk_get_main_hz() / 6; + case SYSCLK_PSADIV_10: + return sysclk_get_main_hz() / 10; + case SYSCLK_PSADIV_12: + return sysclk_get_main_hz() / 12; + case SYSCLK_PSADIV_24: + return sysclk_get_main_hz() / 24; + case SYSCLK_PSADIV_48: + return sysclk_get_main_hz() / 48; + default: + //unhandled_case; + return 0; + } + } +#endif + if (CONFIG_SYSCLK_PSADIV & (1U << CLK_PSADIV_gp)) { + shift = (CONFIG_SYSCLK_PSADIV >> (1 + CLK_PSADIV_gp)) + 1; + } + + return sysclk_get_main_hz() >> shift; +} + +/** + * \brief Return the current rate in Hz of clk_PER2. + * + * This clock can run up to two times faster than the CPU clock. + * + * \return Frequency of the clk_PER2 clock, in Hz. + */ +static inline uint32_t sysclk_get_per2_hz(void) +{ + switch (CONFIG_SYSCLK_PSBCDIV) { + case SYSCLK_PSBCDIV_1_1: /* Fall through */ + case SYSCLK_PSBCDIV_1_2: + return sysclk_get_per4_hz(); + + case SYSCLK_PSBCDIV_4_1: + return sysclk_get_per4_hz() / 4; + + case SYSCLK_PSBCDIV_2_2: + return sysclk_get_per4_hz() / 2; + + default: + //unhandled_case(CONFIG_SYSCLK_PSBCDIV); + return 0; + } +} + +/** + * \brief Return the current rate in Hz of clk_PER. + * + * This clock always runs at the same rate as the CPU clock unless the divider + * is set. + * + * \return Frequency of the clk_PER clock, in Hz. + */ +static inline uint32_t sysclk_get_per_hz(void) +{ + if (CONFIG_SYSCLK_PSBCDIV & (1U << CLK_PSBCDIV_gp)) + return sysclk_get_per2_hz() / 2; + else + return sysclk_get_per2_hz(); +} + +/** + * \brief Return the current rate in Hz of the CPU clock. + * + * \return Frequency of the CPU clock, in Hz. + */ +static inline uint32_t sysclk_get_cpu_hz(void) +{ + return sysclk_get_per_hz(); +} + +/** + * \brief Retrieves the current rate in Hz of the Peripheral Bus clock attached + * to the specified peripheral. + * + * \param module Pointer to the module's base address. + * + * \return Frequency of the bus attached to the specified peripheral, in Hz. + */ +static inline uint32_t sysclk_get_peripheral_bus_hz(const volatile void *module) +{ + if (module == NULL) { + Assert(false); + return 0; + } +#ifdef AES + else if (module == &AES) { + return sysclk_get_per_hz(); + } +#endif +#ifdef EBI + else if (module == &EBI) { + return sysclk_get_per2_hz(); + } +#endif +#ifdef RTC + else if (module == &RTC) { + return sysclk_get_per_hz(); + } +#endif +#ifdef EVSYS + else if (module == &EVSYS) { + return sysclk_get_per_hz(); + } +#endif +#ifdef DMA + else if (module == &DMA) { + return sysclk_get_per_hz(); + } +#endif +#ifdef EDMA + else if (module == &EDMA) { + return sysclk_get_per_hz(); + } +#endif +#ifdef ACA + else if (module == &ACA) { + return sysclk_get_per_hz(); + } +#endif +#ifdef ACB + else if (module == &ACB) { + return sysclk_get_per_hz(); + } +#endif +#ifdef ADCA + else if (module == &ADCA) { + return sysclk_get_per_hz(); + } +#endif +#ifdef ADCB + else if (module == &ADCB) { + return sysclk_get_per_hz(); + } +#endif +#ifdef DACA + else if (module == &DACA) { + return sysclk_get_per_hz(); + } +#endif +// Workaround for bad XMEGA D header file +#if !XMEGA_D +#ifdef DACB + else if (module == &DACB) { + return sysclk_get_per_hz(); + } +#endif +#endif // Workaround end +#ifdef FAULTC0 + else if (module == &FAULTC0) { + return sysclk_get_per_hz(); + } +#endif +#ifdef FAULTC1 + else if (module == &FAULTC1) { + return sysclk_get_per_hz(); + } +#endif +#ifdef TCC0 + else if (module == &TCC0) { + return sysclk_get_per_hz(); + } +#endif +#ifdef TCD0 + else if (module == &TCD0) { + return sysclk_get_per_hz(); + } +#endif +#ifdef TCE0 + else if (module == &TCE0) { + return sysclk_get_per_hz(); + } +#endif +#ifdef TCF0 + else if (module == &TCF0) { + return sysclk_get_per_hz(); + } +#endif +#ifdef TCC1 + else if (module == &TCC1) { + return sysclk_get_per_hz(); + } +#endif +#ifdef TCD1 + else if (module == &TCD1) { + return sysclk_get_per_hz(); + } +#endif +#ifdef TCE1 + else if (module == &TCE1) { + return sysclk_get_per_hz(); + } +#endif +#ifdef TCF1 + else if (module == &TCF1) { + return sysclk_get_per_hz(); + } +#endif +#ifdef TCC4 + else if (module == &TCC4) { + return sysclk_get_per_hz(); + } +#endif +#ifdef TCC5 + else if (module == &TCC5) { + return sysclk_get_per_hz(); + } +#endif +#ifdef TCD4 + else if (module == &TCD4) { + return sysclk_get_per_hz(); + } +#endif +#ifdef TCD5 + else if (module == &TCD5) { + return sysclk_get_per_hz(); + } +#endif +#ifdef HIRESC + else if (module == &HIRESC) { + return sysclk_get_per4_hz(); + } +#endif +#ifdef HIRESD + else if (module == &HIRESD) { + return sysclk_get_per4_hz(); + } +#endif +#ifdef HIRESE + else if (module == &HIRESE) { + return sysclk_get_per4_hz(); + } +#endif +#ifdef HIRESF + else if (module == &HIRESF) { + return sysclk_get_per4_hz(); + } +#endif +#ifdef SPIC + else if (module == &SPIC) { + return sysclk_get_per_hz(); + } +#endif +#ifdef SPID + else if (module == &SPID) { + return sysclk_get_per_hz(); + } +#endif +#ifdef SPIE + else if (module == &SPIE) { + return sysclk_get_per_hz(); + } +#endif +#ifdef SPIF + else if (module == &SPIF) { + return sysclk_get_per_hz(); + } +#endif +#ifdef USARTC0 + else if (module == &USARTC0) { + return sysclk_get_per_hz(); + } +#endif +#ifdef USARTD0 + else if (module == &USARTD0) { + return sysclk_get_per_hz(); + } +#endif +#ifdef USARTE0 + else if (module == &USARTE0) { + return sysclk_get_per_hz(); + } +#endif +#ifdef USARTF0 + else if (module == &USARTF0) { + return sysclk_get_per_hz(); + } +#endif +#ifdef USARTC1 + else if (module == &USARTC1) { + return sysclk_get_per_hz(); + } +#endif +#ifdef USARTD1 + else if (module == &USARTD1) { + return sysclk_get_per_hz(); + } +#endif +#ifdef USARTE1 + else if (module == &USARTE1) { + return sysclk_get_per_hz(); + } +#endif +#ifdef USARTF1 + else if (module == &USARTF1) { + return sysclk_get_per_hz(); + } +#endif +#ifdef TWIC + else if (module == &TWIC) { + return sysclk_get_per_hz(); + } +#endif +#ifdef TWID + else if (module == &TWID) { + return sysclk_get_per_hz(); + } +#endif +#ifdef TWIE + else if (module == &TWIE) { + return sysclk_get_per_hz(); + } +#endif +#ifdef TWIF + else if (module == &TWIF) { + return sysclk_get_per_hz(); + } +#endif +#ifdef XCL + else if (module == &XCL) { + return sysclk_get_per_hz(); + } +#endif + else { + Assert(false); + return 0; + } +} + +//@} + +//! \name Enabling and disabling synchronous clocks +//@{ + +/** + * \brief Enable the clock to peripheral \a id on port \a port + * + * \param port ID of the port to which the module is connected (one of + * the \c SYSCLK_PORT_* definitions). + * \param id The ID (bitmask) of the peripheral module to be enabled. + */ +extern void sysclk_enable_module(enum sysclk_port_id port, uint8_t id); + +/** + * \brief Disable the clock to peripheral \a id on port \a port + * + * \param port ID of the port to which the module is connected (one of + * the \c SYSCLK_PORT_* definitions). + * \param id The ID (bitmask) of the peripheral module to be disabled. + */ +extern void sysclk_disable_module(enum sysclk_port_id port, uint8_t id); + +/** + * \brief Enable a peripheral's clock from its base address. + * + * Enables the clock to a peripheral, given its base address. If the peripheral + * has an associated clock on the HSB bus, this will be enabled also. + * + * \param module Pointer to the module's base address. + */ +static inline void sysclk_enable_peripheral_clock(const volatile void *module) +{ + if (module == NULL) { + Assert(false); + } +#ifdef AES + else if (module == &AES) { + sysclk_enable_module(SYSCLK_PORT_GEN, SYSCLK_AES); + } +#endif +#ifdef EBI + else if (module == &EBI) { + sysclk_enable_module(SYSCLK_PORT_GEN, SYSCLK_EBI); + } +#endif +#ifdef RTC + else if (module == &RTC) { + sysclk_enable_module(SYSCLK_PORT_GEN, SYSCLK_RTC); + } +#endif +#ifdef EVSYS + else if (module == &EVSYS) { + sysclk_enable_module(SYSCLK_PORT_GEN, SYSCLK_EVSYS); + } +#endif +#ifdef DMA + else if (module == &DMA) { + sysclk_enable_module(SYSCLK_PORT_GEN, SYSCLK_DMA); + } +#endif +#ifdef EDMA + else if (module == &EDMA) { + sysclk_enable_module(SYSCLK_PORT_GEN, SYSCLK_EDMA); + } +#endif +#ifdef ACA + else if (module == &ACA) { + sysclk_enable_module(SYSCLK_PORT_A, SYSCLK_AC); + } +#endif +#ifdef ACB + else if (module == &ACB) { + sysclk_enable_module(SYSCLK_PORT_B, SYSCLK_AC); + } +#endif +#ifdef ADCA + else if (module == &ADCA) { + sysclk_enable_module(SYSCLK_PORT_A, SYSCLK_ADC); + } +#endif +#ifdef ADCB + else if (module == &ADCB) { + sysclk_enable_module(SYSCLK_PORT_B, SYSCLK_ADC); + } +#endif +#ifdef DACA + else if (module == &DACA) { + sysclk_enable_module(SYSCLK_PORT_A, SYSCLK_DAC); + } +#endif +// Workaround for bad XMEGA D header file +#if !XMEGA_D +#ifdef DACB + else if (module == &DACB) { + sysclk_enable_module(SYSCLK_PORT_B, SYSCLK_DAC); + } +#endif +#endif // Workaround end +#ifdef TCC0 + else if (module == &TCC0) { + sysclk_enable_module(SYSCLK_PORT_C, SYSCLK_TC0); + } +#endif +#ifdef TCD0 + else if (module == &TCD0) { + sysclk_enable_module(SYSCLK_PORT_D, SYSCLK_TC0); + } +#endif +#ifdef TCE0 + else if (module == &TCE0) { + sysclk_enable_module(SYSCLK_PORT_E, SYSCLK_TC0); + } +#endif +#ifdef TCF0 + else if (module == &TCF0) { + sysclk_enable_module(SYSCLK_PORT_F, SYSCLK_TC0); + } +#endif +#ifdef TCC1 + else if (module == &TCC1) { + sysclk_enable_module(SYSCLK_PORT_C, SYSCLK_TC1); + } +#endif +#ifdef TCD1 + else if (module == &TCD1) { + sysclk_enable_module(SYSCLK_PORT_D, SYSCLK_TC1); + } +#endif +#ifdef TCE1 + else if (module == &TCE1) { + sysclk_enable_module(SYSCLK_PORT_E, SYSCLK_TC1); + } +#endif +#ifdef TCF1 + else if (module == &TCF1) { + sysclk_enable_module(SYSCLK_PORT_F, SYSCLK_TC1); + } +#endif +#ifdef TCC4 + else if (module == &TCC4) { + sysclk_enable_module(SYSCLK_PORT_C, SYSCLK_TC4); + } +#endif +#ifdef TCC5 + else if (module == &TCC5) { + sysclk_enable_module(SYSCLK_PORT_C, SYSCLK_TC5); + } +#endif +#ifdef TCD4 + else if (module == &TCD4) { + sysclk_enable_module(SYSCLK_PORT_D, SYSCLK_TC4); + } +#endif +#ifdef TCD5 + else if (module == &TCD5) { + sysclk_enable_module(SYSCLK_PORT_D, SYSCLK_TC5); + } +#endif +#ifdef HIRESC + else if (module == &HIRESC) { + sysclk_enable_module(SYSCLK_PORT_C, SYSCLK_HIRES); + } +#endif +#ifdef HIRESD + else if (module == &HIRESD) { + sysclk_enable_module(SYSCLK_PORT_D, SYSCLK_HIRES); + } +#endif +#ifdef HIRESE + else if (module == &HIRESE) { + sysclk_enable_module(SYSCLK_PORT_E, SYSCLK_HIRES); + } +#endif +#ifdef HIRESF + else if (module == &HIRESF) { + sysclk_enable_module(SYSCLK_PORT_F, SYSCLK_HIRES); + } +#endif +#ifdef SPIC + else if (module == &SPIC) { + sysclk_enable_module(SYSCLK_PORT_C, SYSCLK_SPI); + } +#endif +#ifdef SPID + else if (module == &SPID) { + sysclk_enable_module(SYSCLK_PORT_D, SYSCLK_SPI); + } +#endif +#ifdef SPIE + else if (module == &SPIE) { + sysclk_enable_module(SYSCLK_PORT_E, SYSCLK_SPI); + } +#endif +#ifdef SPIF + else if (module == &SPIF) { + sysclk_enable_module(SYSCLK_PORT_F, SYSCLK_SPI); + } +#endif +#ifdef USARTC0 + else if (module == &USARTC0) { + sysclk_enable_module(SYSCLK_PORT_C, SYSCLK_USART0); + } +#endif +#ifdef USARTD0 + else if (module == &USARTD0) { + sysclk_enable_module(SYSCLK_PORT_D, SYSCLK_USART0); + } +#endif +#ifdef USARTE0 + else if (module == &USARTE0) { + sysclk_enable_module(SYSCLK_PORT_E, SYSCLK_USART0); + } +#endif +#ifdef USARTF0 + else if (module == &USARTF0) { + sysclk_enable_module(SYSCLK_PORT_F, SYSCLK_USART0); + } +#endif +#ifdef USARTC1 + else if (module == &USARTC1) { + sysclk_enable_module(SYSCLK_PORT_C, SYSCLK_USART1); + } +#endif +#ifdef USARTD1 + else if (module == &USARTD1) { + sysclk_enable_module(SYSCLK_PORT_D, SYSCLK_USART1); + } +#endif +#ifdef USARTE1 + else if (module == &USARTE1) { + sysclk_enable_module(SYSCLK_PORT_E, SYSCLK_USART1); + } +#endif +#ifdef USARTF1 + else if (module == &USARTF1) { + sysclk_enable_module(SYSCLK_PORT_F, SYSCLK_USART1); + } +#endif +#ifdef TWIC + else if (module == &TWIC) { + sysclk_enable_module(SYSCLK_PORT_C, SYSCLK_TWI); + } +#endif +#ifdef TWID + else if (module == &TWID) { + sysclk_enable_module(SYSCLK_PORT_D, SYSCLK_TWI); + } +#endif +#ifdef TWIE + else if (module == &TWIE) { + sysclk_enable_module(SYSCLK_PORT_E, SYSCLK_TWI); + } +#endif +#ifdef TWIF + else if (module == &TWIF) { + sysclk_enable_module(SYSCLK_PORT_F, SYSCLK_TWI); + } +#endif +#ifdef XCL + else if (module == &XCL) { + sysclk_enable_module(SYSCLK_PORT_GEN, SYSCLK_XCL); + } +#endif + else { + Assert(false); + } +} + +/** + * \brief Disable a peripheral's clock from its base address. + * + * Disables the clock to a peripheral, given its base address. If the peripheral + * has an associated clock on the HSB bus, this will be disabled also. + * + * \param module Pointer to the module's base address. + */ +static inline void sysclk_disable_peripheral_clock(const volatile void *module) +{ + if (module == NULL) { + Assert(false); + } +#ifdef AES + else if (module == &AES) { + sysclk_disable_module(SYSCLK_PORT_GEN, SYSCLK_AES); + } +#endif +#ifdef EBI + else if (module == &EBI) { + sysclk_disable_module(SYSCLK_PORT_GEN, SYSCLK_EBI); + } +#endif +#ifdef RTC + else if (module == &RTC) { + sysclk_disable_module(SYSCLK_PORT_GEN, SYSCLK_RTC); + } +#endif +#ifdef EVSYS + else if (module == &EVSYS) { + sysclk_disable_module(SYSCLK_PORT_GEN, SYSCLK_EVSYS); + } +#endif +#ifdef DMA + else if (module == &DMA) { + sysclk_disable_module(SYSCLK_PORT_GEN, SYSCLK_DMA); + } +#endif +#ifdef EDMA + else if (module == &EDMA) { + sysclk_disable_module(SYSCLK_PORT_GEN, SYSCLK_EDMA); + } +#endif +#ifdef ACA + else if (module == &ACA) { + sysclk_disable_module(SYSCLK_PORT_A, SYSCLK_AC); + } +#endif +#ifdef ACB + else if (module == &ACB) { + sysclk_disable_module(SYSCLK_PORT_B, SYSCLK_AC); + } +#endif +#ifdef ADCA + else if (module == &ADCA) { + sysclk_disable_module(SYSCLK_PORT_A, SYSCLK_ADC); + } +#endif +#ifdef ADCB + else if (module == &ADCB) { + sysclk_disable_module(SYSCLK_PORT_B, SYSCLK_ADC); + } +#endif +#ifdef DACA + else if (module == &DACA) { + sysclk_disable_module(SYSCLK_PORT_A, SYSCLK_DAC); + } +#endif +// Workaround for bad XMEGA D header file +#if !XMEGA_D +#ifdef DACB + else if (module == &DACB) { + sysclk_disable_module(SYSCLK_PORT_B, SYSCLK_DAC); + } +#endif +#endif // Workaround end +#ifdef TCC0 + else if (module == &TCC0) { + sysclk_disable_module(SYSCLK_PORT_C, SYSCLK_TC0); + } +#endif +#ifdef TCD0 + else if (module == &TCD0) { + sysclk_disable_module(SYSCLK_PORT_D, SYSCLK_TC0); + } +#endif +#ifdef TCE0 + else if (module == &TCE0) { + sysclk_disable_module(SYSCLK_PORT_E, SYSCLK_TC0); + } +#endif +#ifdef TCF0 + else if (module == &TCF0) { + sysclk_disable_module(SYSCLK_PORT_F, SYSCLK_TC0); + } +#endif +#ifdef TCC1 + else if (module == &TCC1) { + sysclk_disable_module(SYSCLK_PORT_C, SYSCLK_TC1); + } +#endif +#ifdef TCD1 + else if (module == &TCD1) { + sysclk_disable_module(SYSCLK_PORT_D, SYSCLK_TC1); + } +#endif +#ifdef TCE1 + else if (module == &TCE1) { + sysclk_disable_module(SYSCLK_PORT_E, SYSCLK_TC1); + } +#endif +#ifdef TCF1 + else if (module == &TCF1) { + sysclk_disable_module(SYSCLK_PORT_F, SYSCLK_TC1); + } +#endif +#ifdef TCC4 + else if (module == &TCC4) { + sysclk_disable_module(SYSCLK_PORT_C, SYSCLK_TC4); + } +#endif +#ifdef TCC5 + else if (module == &TCC5) { + sysclk_disable_module(SYSCLK_PORT_C, SYSCLK_TC5); + } +#endif +#ifdef TCD4 + else if (module == &TCD4) { + sysclk_disable_module(SYSCLK_PORT_D, SYSCLK_TC4); + } +#endif +#ifdef TCD5 + else if (module == &TCD5) { + sysclk_disable_module(SYSCLK_PORT_D, SYSCLK_TC5); + } +#endif +#ifdef HIRESC + else if (module == &HIRESC) { + sysclk_disable_module(SYSCLK_PORT_C, SYSCLK_HIRES); + } +#endif +#ifdef HIRESD + else if (module == &HIRESD) { + sysclk_disable_module(SYSCLK_PORT_D, SYSCLK_HIRES); + } +#endif +#ifdef HIRESE + else if (module == &HIRESE) { + sysclk_disable_module(SYSCLK_PORT_E, SYSCLK_HIRES); + } +#endif +#ifdef HIRESF + else if (module == &HIRESF) { + sysclk_disable_module(SYSCLK_PORT_F, SYSCLK_HIRES); + } +#endif +#ifdef SPIC + else if (module == &SPIC) { + sysclk_disable_module(SYSCLK_PORT_C, SYSCLK_SPI); + } +#endif +#ifdef SPID + else if (module == &SPID) { + sysclk_disable_module(SYSCLK_PORT_D, SYSCLK_SPI); + } +#endif +#ifdef SPIE + else if (module == &SPIE) { + sysclk_disable_module(SYSCLK_PORT_E, SYSCLK_SPI); + } +#endif +#ifdef SPIF + else if (module == &SPIF) { + sysclk_disable_module(SYSCLK_PORT_F, SYSCLK_SPI); + } +#endif +#ifdef USARTC0 + else if (module == &USARTC0) { + sysclk_disable_module(SYSCLK_PORT_C, SYSCLK_USART0); + } +#endif +#ifdef USARTD0 + else if (module == &USARTD0) { + sysclk_disable_module(SYSCLK_PORT_D, SYSCLK_USART0); + } +#endif +#ifdef USARTE0 + else if (module == &USARTE0) { + sysclk_disable_module(SYSCLK_PORT_E, SYSCLK_USART0); + } +#endif +#ifdef USARTF0 + else if (module == &USARTF0) { + sysclk_disable_module(SYSCLK_PORT_F, SYSCLK_USART0); + } +#endif +#ifdef USARTC1 + else if (module == &USARTC1) { + sysclk_disable_module(SYSCLK_PORT_C, SYSCLK_USART1); + } +#endif +#ifdef USARTD1 + else if (module == &USARTD1) { + sysclk_disable_module(SYSCLK_PORT_D, SYSCLK_USART1); + } +#endif +#ifdef USARTE1 + else if (module == &USARTE1) { + sysclk_disable_module(SYSCLK_PORT_E, SYSCLK_USART1); + } +#endif +#ifdef USARTF1 + else if (module == &USARTF1) { + sysclk_disable_module(SYSCLK_PORT_F, SYSCLK_USART1); + } +#endif +#ifdef TWIC + else if (module == &TWIC) { + sysclk_disable_module(SYSCLK_PORT_C, SYSCLK_TWI); + } +#endif +#ifdef TWID + else if (module == &TWID) { + sysclk_disable_module(SYSCLK_PORT_D, SYSCLK_TWI); + } +#endif +#ifdef TWIE + else if (module == &TWIE) { + sysclk_disable_module(SYSCLK_PORT_E, SYSCLK_TWI); + } +#endif +#ifdef TWIF + else if (module == &TWIF) { + sysclk_disable_module(SYSCLK_PORT_F, SYSCLK_TWI); + } +#endif +#ifdef XCL + else if (module == &XCL) { + sysclk_disable_module(SYSCLK_PORT_GEN, SYSCLK_XCL); + } +#endif + else { + Assert(false); + } +} + +/** + * \brief Check if the synchronous clock is enabled for a module + * + * \param port ID of the port to which the module is connected (one of + * the \c SYSCLK_PORT_* definitions). + * \param id The ID (bitmask) of the peripheral module to check (one of + * the \c SYSCLK_* module definitions). + * + * \retval true If the clock for module \a id on \a port is enabled. + * \retval false If the clock for module \a id on \a port is disabled. + */ +static inline bool sysclk_module_is_enabled(enum sysclk_port_id port, + uint8_t id) +{ + uint8_t mask = *((uint8_t *)&PR.PRGEN + port); + return (mask & id) == 0; +} + +#if XMEGA_AU || XMEGA_B || XMEGA_C || defined(__DOXYGEN__) +# if defined(CONFIG_USBCLK_SOURCE) || defined(__DOXYGEN__) +# if (CONFIG_USBCLK_SOURCE == USBCLK_SRC_RCOSC) +# define USBCLK_STARTUP_TIMEOUT 1 +# elif (CONFIG_USBCLK_SOURCE == USBCLK_SRC_PLL) +# if (CONFIG_PLL0_SOURCE == PLL_SRC_XOSC) +# define USBCLK_STARTUP_TIMEOUT XOSC_STARTUP_TIMEOUT +# elif (CONFIG_PLL0_SOURCE == PLL_SRC_RC32MHZ) +# define USBCLK_STARTUP_TIMEOUT 1 +# elif (CONFIG_PLL0_SOURCE == PLL_SRC_RC2MHZ) +# define USBCLK_STARTUP_TIMEOUT 1 +# else +# error Unknow value for CONFIG_PLL0_SOURCE, see conf_clock.h. +# endif +# endif +# else /* CONFIG_USBCLK_SOURCE not defined */ +# define CONFIG_USBCLK_SOURCE USBCLK_SRC_RCOSC +# define USBCLK_STARTUP_TIMEOUT 1 +# endif /* CONFIG_USBCLK_SOURCE */ +void sysclk_enable_usb(uint8_t frequency); +void sysclk_disable_usb(void); +#endif /* XMEGA_AU || XMEGA_B || XMEGA_C */ +//@} + +//! \name System Clock Source and Prescaler configuration +//@{ + +/** + * \brief Set system clock prescaler configuration + * + * This function will change the system clock prescaler configuration to + * match the parameters. + * + * \note The parameters to this function are device-specific. + * + * \param psadiv The prescaler A setting (one of the \c SYSCLK_PSADIV_* + * definitions). This determines the clkPER4 frequency. + * \param psbcdiv The prescaler B and C settings (one of the \c SYSCLK_PSBCDIV_* + * definitions). These determine the clkPER2, clkPER and clkCPU frequencies. + */ +static inline void sysclk_set_prescalers(uint8_t psadiv, uint8_t psbcdiv) +{ + ccp_write_io((uint8_t *)&CLK.PSCTRL, psadiv | psbcdiv); +} + +/** + * \brief Change the source of the main system clock. + * + * \param src The new system clock source. Must be one of the constants + * from the System Clock Sources section. + */ +static inline void sysclk_set_source(uint8_t src) +{ + ccp_write_io((uint8_t *)&CLK.CTRL, src); +} + +/** + * \brief Lock the system clock configuration + * + * This function will lock the current system clock source and prescaler + * configuration, preventing any further changes. + */ +static inline void sysclk_lock(void) +{ + ccp_write_io((uint8_t *)&CLK.LOCK, CLK_LOCK_bm); +} + +//@} + +/** + * \name RTC clock source control + * @{ + */ + +/** + * \brief Enable RTC clock with specified clock source + * + * \param id RTC clock source ID. Select from SYSCLK_RTCSRC_ULP, + * SYSCLK_RTCSRC_RCOSC, SYSCLK_RTCSRC_TOSC, SYSCLK_RTCSRC_RCOSC32, + * SYSCLK_RTCSRC_TOSC32 or SYSCLK_RTCSRC_EXTCLK + */ +static inline void sysclk_rtcsrc_enable(uint8_t id) +{ + Assert((id & ~CLK_RTCSRC_gm) == 0); + + switch (id) { + case SYSCLK_RTCSRC_RCOSC: +#if !XMEGA_A && !XMEGA_D + case SYSCLK_RTCSRC_RCOSC32: +#endif + osc_enable(OSC_ID_RC32KHZ); + osc_wait_ready(OSC_ID_RC32KHZ); + break; + case SYSCLK_RTCSRC_TOSC: + case SYSCLK_RTCSRC_TOSC32: +#if !XMEGA_A && !XMEGA_D + case SYSCLK_RTCSRC_EXTCLK: +#endif + osc_enable(OSC_ID_XOSC); + osc_wait_ready(OSC_ID_XOSC); + break; + } + + CLK.RTCCTRL = id | CLK_RTCEN_bm; +} + +/** + * \brief Disable RTC clock + */ +static inline void sysclk_rtcsrc_disable(void) +{ + CLK.RTCCTRL = 0; +} + +/** @} */ + +//! \name System Clock Initialization +//@{ + +extern void sysclk_init(void); + +//@} + +#endif /* !__ASSEMBLY__ */ + +//! @} + +#ifdef __cplusplus +} +#endif + +#endif /* XMEGA_SYSCLK_H_INCLUDED */ diff --git a/AVR Code/USB_BULK_TEST/src/ASF/common/services/delay/delay.h b/AVR Code/USB_BULK_TEST/src/ASF/common/services/delay/delay.h new file mode 100644 index 00000000..c845e44b --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/common/services/delay/delay.h @@ -0,0 +1,139 @@ +/** + * \file + * + * \brief Common Delay Service + * + * Copyright (c) 2014-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ +#ifndef _DELAY_H_ +#define _DELAY_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#if UC3 +# include +#elif XMEGA +# include "xmega/cycle_counter.h" +#elif MEGA +# include "mega/cycle_counter.h" +#elif SAM +# include "sam/cycle_counter.h" +#endif + +/** + * @defgroup group_common_services_delay Busy-Wait Delay Routines + * + * This module provides simple loop-based delay routines for those + * applications requiring a brief wait during execution. Common API + * for UC3, XMEGA, and AVR MEGA. + * + * @{ + */ + +/** + * @def F_CPU + * @brief MCU Clock Frequency (Hertz) + * + * @deprecated + * The \ref F_CPU configuration constant is used for compatibility with the + * \ref group_common_services_delay routines. The common loop-based delay + * routines are designed to use the \ref clk_group modules while anticipating + * support for legacy applications assuming a statically defined clock + * frequency. Applications using a statically configured MCU clock frequency + * can define \ref F_CPU (Hertz), in which case the common delay routines will + * use this value rather than calling sysclk_get_cpu_hz() to get the current + * MCU clock frequency. + */ +#ifndef F_CPU +# define F_CPU sysclk_get_cpu_hz() +#endif + +/** + * @def delay_init + * + * @brief Initialize the delay driver. + * @param fcpu_hz CPU frequency in Hz + * + * @deprecated + * This function is provided for compatibility with ASF applications that + * may not have been updated to configure the system clock via the common + * clock service; e.g. sysclk_init() and a configuration header file are + * used to configure clocks. + * + * The functions in this module call \ref sysclk_get_cpu_hz() function to + * obtain the system clock frequency. + */ +#define delay_init(fcpu_hz) + +/** + * @def delay_s + * @brief Delay in seconds. + * @param delay Delay in seconds + */ +#define delay_s(delay) cpu_delay_ms(1000 * delay, F_CPU) + +/** + * @def delay_ms + * @brief Delay in milliseconds. + * @param delay Delay in milliseconds + */ +#define delay_ms(delay) cpu_delay_ms(delay, F_CPU) + +/** + * @def delay_us + * @brief Delay in microseconds. + * @param delay Delay in microseconds + */ +#define delay_us(delay) cpu_delay_us(delay, F_CPU) + +#ifdef __cplusplus +} +#endif + +/** + * @} + */ + +#endif /* _DELAY_H_ */ diff --git a/AVR Code/USB_BULK_TEST/src/ASF/common/services/delay/xmega/cycle_counter.h b/AVR Code/USB_BULK_TEST/src/ASF/common/services/delay/xmega/cycle_counter.h new file mode 100644 index 00000000..e67e520a --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/common/services/delay/xmega/cycle_counter.h @@ -0,0 +1,116 @@ +/** + * \file + * + * \brief AVR functions for busy-wait delay loops + * + * Copyright (c) 2011-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ +#ifndef _CYCLE_COUNTER_H_ +#define _CYCLE_COUNTER_H_ + +#ifdef __cplusplus +extern "C" { +#endif + + +#include + +/** + * @name Convenience functions for busy-wait delay loops + * + * @def delay_cycles + * @brief Delay program execution for a specified number of CPU cycles. + * @param n number of CPU cycles to wait + * + * @def cpu_delay_ms + * @brief Delay program execution for a specified number of milliseconds. + * @param delay number of milliseconds to wait + * @param f_cpu CPU frequency in Hertz + * + * @def cpu_delay_us + * @brief Delay program execution for a specified number of microseconds. + * @param delay number of microseconds to wait + * @param f_cpu CPU frequency in Hertz + * + * @def cpu_ms_2_cy + * @brief Convert milli-seconds into CPU cycles. + * @param ms number of milliseconds + * @param f_cpu CPU frequency in Hertz + * @return the converted number of CPU cycles + * + * @def cpu_us_2_cy + * @brief Convert micro-seconds into CPU cycles. + * @param ms number of microseconds + * @param f_cpu CPU frequency in Hertz + * @return the converted number of CPU cycles + * + * @{ + */ +__always_optimize +static inline void __portable_avr_delay_cycles(unsigned long n) +{ + do { barrier(); } while (--n); +} + +#if !defined(__DELAY_CYCLE_INTRINSICS__) +# define delay_cycles __portable_avr_delay_cycles +# define cpu_ms_2_cy(ms, f_cpu) (((uint64_t)(ms) * (f_cpu) + 999) / 6e3) +# define cpu_us_2_cy(us, f_cpu) (((uint64_t)(us) * (f_cpu) + 999999ul) / 6e6) +#else +# if defined(__GNUC__) +# define delay_cycles __builtin_avr_delay_cycles +# elif defined(__ICCAVR__) +# define delay_cycles __delay_cycles +# endif +# define cpu_ms_2_cy(ms, f_cpu) (((uint64_t)(ms) * (f_cpu) + 999) / 1e3) +# define cpu_us_2_cy(us, f_cpu) (((uint64_t)(us) * (f_cpu) + 999999ul) / 1e6) +#endif + +#define cpu_delay_ms(delay, f_cpu) delay_cycles((uint64_t)cpu_ms_2_cy(delay, f_cpu)) +#define cpu_delay_us(delay, f_cpu) delay_cycles((uint64_t)cpu_us_2_cy(delay, f_cpu)) +//! @} + + +#ifdef __cplusplus +} +#endif + +#endif /* _CYCLE_COUNTER_H_ */ diff --git a/AVR Code/USB_BULK_TEST/src/ASF/common/services/gfx_mono/docsrc/gfx_mono_overview.png b/AVR Code/USB_BULK_TEST/src/ASF/common/services/gfx_mono/docsrc/gfx_mono_overview.png new file mode 100644 index 0000000000000000000000000000000000000000..1e85b6b922f786034e87b59f33489b4b1849073c GIT binary patch literal 128186 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�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 literal 0 HcmV?d00001 diff --git a/AVR Code/USB_BULK_TEST/src/ASF/common/services/gfx_mono/gfx_mono.h b/AVR Code/USB_BULK_TEST/src/ASF/common/services/gfx_mono/gfx_mono.h new file mode 100644 index 00000000..c5488805 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/common/services/gfx_mono/gfx_mono.h @@ -0,0 +1,306 @@ +/** + * \file + * + * \brief Monochrome graphic library API header file + * + * Copyright (c) 2011-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ +#ifndef GFX_MONO_H +#define GFX_MONO_H + +#include + +#include "compiler.h" +#include "progmem.h" +#ifdef CONFIG_HAVE_HUGEMEM +# include "hugemem.h" +#endif + +/** + * \defgroup gfx_mono Monochrome graphical display system + * + * See \ref gfx_mono_quickstart. + * + * This library provides an interface to drawing graphics on monochrome + * graphical displays + * + * The graphics drivers consists of the following: + * - Display driver interface (gfx_mono.h) + * - General graphics drawing primitives (gfx_mono_generic.h) + * - Display specific implementation (ex. gfx_mono_c12832_a1z.h) + * + * The generic drawing primitives is a library of functions for drawing + * graphics primitives such as lines, rectangles and circles. It uses other + * functions implemented by the display driver for drawing the primitives. The + * implementation of these functions can optionally be used by a display + * driver, but if the hardware of the display allows faster handling of any of + * the primitives, the display driver can implement it directly. + * + * The display specific drivers provides an interface to the graphical display. + * It implements the low level communication with the display hardware, putting + * pixels on the display and drawing primitives such as lines, circles and + * rectangles. Depending on the display driver implementation, drawing the + * graphics primitives might be handled by the generic graphics drawing + * primitives rather than the display driver itself. + * + * \note The functions in the library are not interrupt safe. + * @{ + */ + +typedef uint8_t gfx_mono_color_t; +typedef uint8_t gfx_coord_t; + +/** Pixel operations */ +enum gfx_mono_color { + /** Pixel is cleared */ + GFX_PIXEL_CLR = 0, + /** Pixel is set on screen (OR) */ + GFX_PIXEL_SET = 1, + /** Pixel is XORed */ + GFX_PIXEL_XOR = 2, +}; + +/** Bitmap types */ +enum gfx_mono_bitmap_type { + /** Bitmap stored in SRAM */ + GFX_MONO_BITMAP_RAM, + /** Bitmap stored in progmem */ + GFX_MONO_BITMAP_PROGMEM +}; + +/* Cannot be moved to top, as they use the bitmap and color enums. */ +#ifdef USE_SDL +# include "gfx_mono_sdl.h" +#elif defined(GFX_MONO_C12832_A1Z) +# include "gfx_mono_c12832_a1z.h" +#elif defined(GFX_MONO_UG_2832HSWEG04) +# include "gfx_mono_ug_2832hsweg04.h" +#else +/* NULL driver by default */ +# include "gfx_mono_null.h" +#endif +#include "gfx_mono_generic.h" + +/** \name Circle Sector Definitions */ +/** @{ */ + +/** Bitmask for drawing circle octant 0. */ +#define GFX_OCTANT0 (1 << 0) +/** Bitmask for drawing circle octant 1. */ +#define GFX_OCTANT1 (1 << 1) +/** Bitmask for drawing circle octant 2. */ +#define GFX_OCTANT2 (1 << 2) +/** Bitmask for drawing circle octant 3. */ +#define GFX_OCTANT3 (1 << 3) +/** Bitmask for drawing circle octant 4. */ +#define GFX_OCTANT4 (1 << 4) +/** Bitmask for drawing circle octant 5. */ +#define GFX_OCTANT5 (1 << 5) +/** Bitmask for drawing circle octant 6. */ +#define GFX_OCTANT6 (1 << 6) +/** Bitmask for drawing circle octant 7. */ +#define GFX_OCTANT7 (1 << 7) + +/** Bitmask for drawing circle quadrant 0. */ +#define GFX_QUADRANT0 (GFX_OCTANT0 | GFX_OCTANT1) +/** Bitmask for drawing circle quadrant 1. */ +#define GFX_QUADRANT1 (GFX_OCTANT2 | GFX_OCTANT3) +/** Bitmask for drawing circle quadrant 2. */ +#define GFX_QUADRANT2 (GFX_OCTANT4 | GFX_OCTANT5) +/** Bitmask for drawing circle quadrant 3. */ +#define GFX_QUADRANT3 (GFX_OCTANT6 | GFX_OCTANT7) + +/** Bitmask for drawing left half of circle. */ +#define GFX_LEFTHALF (GFX_QUADRANT3 | GFX_QUADRANT0) +/** Bitmask for drawing top half of circle. */ +#define GFX_TOPHALF (GFX_QUADRANT0 | GFX_QUADRANT1) +/** Bitmask for drawing right half of circle. */ +#define GFX_RIGHTHALF (GFX_QUADRANT1 | GFX_QUADRANT2) +/** Bitmask for drawing bottom half of circle. */ +#define GFX_BOTTOMHALF (GFX_QUADRANT2 | GFX_QUADRANT3) + +/** Bitmask for drawing whole circle. */ +#define GFX_WHOLE 0xFF + +/** @} */ + +/** \name Graphic Drawing Primitives */ +/** @{ */ + +/** + * \def gfx_mono_draw_horizontal_line(x, y, length, color) + * \brief Draw a horizontal line, one pixel wide. + * + * \param x X coordinate of leftmost pixel. + * \param y Y coordinate of the line. + * \param length Length of the line in pixels. + * \param color Pixel operation of the line. + */ + +/** + * \def gfx_mono_draw_vertical_line(x, y, length, color) + * \brief Draw a vertical line, one pixel wide. + * + * \param x X coordinate of the line. + * \param y Y coordinate of the topmost pixel. + * \param length Length of the line in pixels. + * \param color Pixel operation of the line. + */ + +/** + * \def gfx_mono_draw_line(x1, y1, x2, y2, color) + * \brief Draw a line between two arbitrary points. + * + * \param x1 Start X coordinate. + * \param y1 Start Y coordinate. + * \param x2 End X coordinate. + * \param y2 End Y coordinate. + * \param color Pixel operation of the line. + */ + +/** + * \def gfx_mono_draw_rect(x, y, width, height, color) + * \brief Draw an outline of a rectangle. + * + * \param x X coordinate of the left side. + * \param y Y coordinate of the top side. + * \param width Width of the rectangle. + * \param height Height of the rectangle. + * \param color Pixel operation of the line. + */ + +/** + * \def gfx_mono_draw_filled_rect(x, y, width, height, color) + * \brief Draw a filled rectangle. + * + * \param x X coordinate of the left side. + * \param y Y coordinate of the top side. + * \param width Width of the rectangle. + * \param height Height of the rectangle. + * \param color Pixel operation of the line + */ + +/** + * \def gfx_mono_draw_circle(x, y, radius, color, octant_mask) + * \brief Draw an outline of a circle or arc. + * + * The radius is the distance from the center to the circumference, + * which means that the total width or height of a circle will be + * (radius*2+1). + * + * The octant_mask parameter is a bitmask that decides which octants of + * the circle to draw. Use the GFX_OCTANTn, GFX_QUADRANTn, GFX_xHALF and + * GFX_WHOLE constants and OR them together if required. Radius equal to + * zero gives a single pixel. + * + * \param x X coordinate of center. + * \param y Y coordinate of center. + * \param radius Circle radius in pixels. + * \param color Pixel operation. + * \param octant_mask Bitmask indicating which octants to draw. + */ + +/** + * \def gfx_mono_draw_filled_circle(x, y, radius, color, quadrant_mask) + * \brief Draw a filled circle or sector. + * + * The radius is the distance from the center to the circumference, + * which means that the total width or height of a circle will be + * (radius*2+1). + * + * The quadrant_mask parameter is a bitmask that decides which quadrants + * of the circle to draw. Use the GFX_QUADRANTn, GFX_xHALF and + * GFX_WHOLE constants and OR them together if required. Radius equal to + * zero gives a single pixel. + * + * \note This function only supports quadrants while gfx_draw_circle() + * supports octants. This is to improve performance on drawing + * filled circles. + * + * \param x X coordinate of center. + * \param y Y coordinate of center. + * \param radius Circle radius in pixels. + * \param color Pixel operation. + * \param quadrant_mask Bitmask indicating which quadrants to draw. + */ + +/** @} */ + +/** @} */ + +/** + * \page gfx_mono_quickstart Quick Start Guide for the mono graphics service + * + * This is the quick start guide for the \ref gfx_mono "Monochrome Graphics service", + * with step-by-step instructions on how to configure and use it for a specific + * use case. + * + * \section gfx_mono_quickstart_basic Basic usage of the graphics service + * This use case will demonstrate initializing the mono graphics service and + * then draw a black line on the screen from coordinates X=10, Y=10 to X=20, + * Y=20. + * + * \section gfx_mono_basic_usage Usage steps + * \subsection gfx_mono_basic_usage_code Example code + * Add to, e.g., the main function in the application C-file: + * \code + board_init(); + sysclk_init(); + gfx_mono_init(); + gfx_mono_draw_line(10, 10, 20, 20, GFX_PIXEL_SET); +\endcode + * + * \subsection gfx_mono_basic_usage Workflow + * -# Initialize board IO: + * - \code board_init(); \endcode + * -# Initialize clocks: + * - \code sysclk_init(); \endcode + * -# Initialize monochrome graphics service + * - \code gfx_mono_init(); \endcode + * - \note This will call the init function for the low level display + * controller driver and intialize the screen to a cleared background. + * -# Draw a line from 10,10 to 20,20: + * - \code gfx_mono_draw_line(10, 10, 20, 20, GFX_PIXEL_SET); \endcode + * - \note This uses GFX_PIXEL_SET to set the display pixels on the line; + * other options can be found in \ref gfx_mono_color. + */ + +#endif /* GFX_MONO_H */ diff --git a/AVR Code/USB_BULK_TEST/src/ASF/common/services/gfx_mono/gfx_mono_c12832_a1z.c b/AVR Code/USB_BULK_TEST/src/ASF/common/services/gfx_mono/gfx_mono_c12832_a1z.c new file mode 100644 index 00000000..ba3758c5 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/common/services/gfx_mono/gfx_mono_c12832_a1z.c @@ -0,0 +1,369 @@ +/** + * \file + * + * \brief Haven Display C12832 A1Z display glue code for display controller + * + * Copyright (c) 2011-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ +#include "gfx_mono_c12832_a1z.h" + +/* If we are using a serial interface without readback, use framebuffer */ +#ifdef ST7565R_SERIAL_INTERFACE +# define CONFIG_ST7565R_FRAMEBUFFER +#endif + +#ifdef CONFIG_ST7565R_FRAMEBUFFER +static uint8_t framebuffer[GFX_MONO_LCD_FRAMEBUFFER_SIZE]; +#endif + +/** + * \brief Initialize ST7565R controller and LCD display. + * It will also write the graphic controller RAM to all zeroes. + * + * \note This function will clear the contents of the display. + */ +void gfx_mono_st7565r_init(void) +{ + uint8_t page; + uint8_t column; + +#ifdef CONFIG_ST7565R_FRAMEBUFFER + gfx_mono_set_framebuffer(framebuffer); +#endif + + /* Initialize the low-level display controller. */ + st7565r_init(); + + /* Set display to output data from line 0 */ + st7565r_set_display_start_line_address(0); + + /* Clear the contents of the display. + * If using a framebuffer (SPI interface) it will both clear the + * controller memory and the framebuffer. + */ + for (page = 0; page < GFX_MONO_LCD_PAGES; page++) { + for (column = 0; column < GFX_MONO_LCD_WIDTH; column++) { + gfx_mono_put_byte(page, column, 0x00); + } + } +} + +/** + * \brief Put framebuffer to LCD controller + * + * This function will output the complete framebuffer from RAM to the + * LCD controller. + * + * \note This is done automatically if using the graphic primitives. Only + * needed if you are manipulating the framebuffer directly in your code. + */ +void gfx_mono_st7565r_put_framebuffer(void) +{ + uint8_t page; + + for (page = 0; page < GFX_MONO_LCD_PAGES; page++) { + st7565r_set_page_address(page); + st7565r_set_column_address(0); + gfx_mono_st7565r_put_page(framebuffer + + (page * GFX_MONO_LCD_WIDTH), page, 0, + GFX_MONO_LCD_WIDTH); + } +} + +/** + * \brief Draw pixel to screen + * + * \param x X coordinate of the pixel + * \param y Y coordinate of the pixel + * \param color Pixel operation + * + * The following will set the pixel at x=10,y=10: + * \code + gfx_mono_st7565r_draw_pixel(10, 10, GFX_PIXEL_SET); +\endcode + * The following example will clear the pixel at x=10,y=10: + * \code + gfx_mono_st7565r_draw_pixel(10, 10, GFX_PIXEL_CLR); +\endcode + * And the following will toggle the pixel at x=10,y=10: + * \code + gfx_mono_st7565r_draw_pixel(10, 10, GFX_PIXEL_XOR); +\endcode + */ +void gfx_mono_st7565r_draw_pixel(gfx_coord_t x, gfx_coord_t y, + gfx_coord_t color) +{ + uint8_t page; + uint8_t pixel_mask; + uint8_t pixel_value; + + /* Discard pixels drawn outside the screen */ + if ((x > GFX_MONO_LCD_WIDTH - 1) || (y > GFX_MONO_LCD_HEIGHT - 1)) { + return; + } + + page = y / GFX_MONO_LCD_PIXELS_PER_BYTE; + pixel_mask = (1 << (y - (page * 8))); + + /* + * Read the page containing the pixel in interest, then perform the + * requested action on this pixel before writing the page back to the + * display. + */ + pixel_value = gfx_mono_get_byte(page, x); + + switch (color) { + case GFX_PIXEL_SET: + pixel_value |= pixel_mask; + break; + + case GFX_PIXEL_CLR: + pixel_value &= ~pixel_mask; + break; + + case GFX_PIXEL_XOR: + pixel_value ^= pixel_mask; + break; + + default: + break; + } + + gfx_mono_put_byte(page, x, pixel_value); +} + +/** + * \brief Get the pixel value at x,y + * + * \param x X coordinate of pixel + * \param y Y coordinate of pixel + * \return Non zero value if pixel is set. + * + * The following example will read the pixel value from x=10,y=10: + * \code + pixelval = gfx_mono_st7565r_get_pixel(10,10); +\endcode + */ +uint8_t gfx_mono_st7565r_get_pixel(gfx_coord_t x, gfx_coord_t y) +{ + uint8_t page; + uint8_t pixel_mask; + + if ((x > GFX_MONO_LCD_WIDTH - 1) || (y > GFX_MONO_LCD_HEIGHT - 1)) { + return 0; + } + + page = y / GFX_MONO_LCD_PIXELS_PER_BYTE; + pixel_mask = (1 << (y - (page * 8))); + + return gfx_mono_get_byte(page, x) & pixel_mask; +} + +/** + * \brief Put a page from RAM to display controller. + * + * If the controller is accessed by the SPI interface, we can not read + * back data from the LCD controller RAM. Because of this all data that is + * written to the LCD controller in this mode is also written to a framebuffer + * in MCU RAM. + * + * \param data Pointer to data to be written + * \param page Page address + * \param column Offset into page (x coordinate) + * \param width Number of bytes to be written. + * + * The following example will write 32 bytes from data_buf to the page 0, + * column 10. This will place data_buf in the rectangle x1=10,y1=0,x2=42,y2=8 + * (10 pixels from the upper left corner of the screen): + * \code + gfx_mono_st7565r_put_page(data_buf, 0, 10, 32); +\endcode + */ +void gfx_mono_st7565r_put_page(gfx_mono_color_t *data, gfx_coord_t page, + gfx_coord_t column, gfx_coord_t width) +{ +#ifdef CONFIG_ST7565R_FRAMEBUFFER + gfx_mono_framebuffer_put_page(data, page, column, width); +#endif + st7565r_set_page_address(page); + st7565r_set_column_address(column); + + do { + st7565r_write_data(*data++); + } while (--width); +} + +/** + * \brief Read a page from the LCD controller + * + * If the LCD controller is accessed by the SPI interface we cannot read + * data directly from the controller. In that case we will read the data from + * the local framebuffer instead. + * + * \param data Pointer where to store the read data + * \param page Page address + * \param column Offset into page (x coordinate) + * \param width Number of bytes to be read + * + * The following example will read back the first 128 bytes (first page) from + * the display memory: + * \code + gfx_mono_st7565r_get_page(read_buffer, 0, 0, 128); +\endcode + */ +void gfx_mono_st7565r_get_page(gfx_mono_color_t *data, gfx_coord_t page, + gfx_coord_t column, gfx_coord_t width) +{ +#ifdef CONFIG_ST7565R_FRAMEBUFFER + gfx_mono_framebuffer_get_page(data, page, column, width); +#else + st7565r_set_page_address(page); + st7565r_set_column_address(column); + + do { + *data++ = st7565r_read_data(); + } while (--width); +#endif +} + +/** + * \brief Put a byte to the display controller RAM + * + * If the LCD controller is accessed by the SPI interface we will also put the + * data to the local framebuffer. + * + * \param page Page address + * \param column Page offset (x coordinate) + * \param data Data to be written + * + * This example will put the value 0xFF to the first byte in the display memory + * setting a 8 pixel high column of pixels in the upper left corner of the + * display. + * \code + gfx_mono_st7565r_put_byte(0, 0, 0xFF); +\endcode + */ +void gfx_mono_st7565r_put_byte(gfx_coord_t page, gfx_coord_t column, + uint8_t data) +{ +#ifdef CONFIG_ST7565R_FRAMEBUFFER + gfx_mono_framebuffer_put_byte(page, column, data); +#endif + + st7565r_set_page_address(page); + st7565r_set_column_address(column); + + st7565r_write_data(data); +} + +/** + * \brief Get a byte from the display controller RAM + * + * If the LCD controller is accessed by the SPI interface we cannot read the + * data. In this case return the data from the local framebuffer instead. + * + * \param page Page address + * \param column Page offset (x coordinate) + * \return data from LCD controller or framebuffer. + * + * The following code will read the first byte from the display memory or the + * local framebuffer if direct read is not possible. The data represents the + * pixels from x = 0 and y = 0 to y = 7. + * \code + data = gfx_mono_st7565r_get_byte(0, 0); +\endcode + */ +uint8_t gfx_mono_st7565r_get_byte(gfx_coord_t page, gfx_coord_t column) +{ +#ifdef CONFIG_ST7565R_FRAMEBUFFER + return gfx_mono_framebuffer_get_byte(page, column); + +#else + st7565r_set_page_address(page); + st7565r_set_column_address(column); + + return st7565r_read_data(); + +#endif +} + +/** + * \brief Read/Modify/Write a byte on the display controller + * + * This function will read the byte from the display controller (or the + * framebuffer if we cannot read directly from the controller) and + * do a mask operation on the byte according to the pixel operation selected + * by the color argument and the pixel mask provided. + * + * \param page Page address + * \param column Page offset (x coordinate) + * \param pixel_mask Mask for pixel operation + * \param color Pixel operation + * + * A small example that will XOR the first byte of display memory with 0xAA + * \code + gfx_mono_st7565r_mask_byte(0,0,0xAA,GFX_PIXEL_XOR); +\endcode + */ +void gfx_mono_st7565r_mask_byte(gfx_coord_t page, gfx_coord_t column, + gfx_mono_color_t pixel_mask, gfx_mono_color_t color) +{ + gfx_mono_color_t temp = gfx_mono_get_byte(page, column); + + switch (color) { + case GFX_PIXEL_SET: + temp |= pixel_mask; + break; + + case GFX_PIXEL_CLR: + temp &= ~pixel_mask; + break; + + case GFX_PIXEL_XOR: + temp ^= pixel_mask; + break; + + default: + break; + } + + gfx_mono_put_byte(page, column, temp); +} diff --git a/AVR Code/USB_BULK_TEST/src/ASF/common/services/gfx_mono/gfx_mono_c12832_a1z.h b/AVR Code/USB_BULK_TEST/src/ASF/common/services/gfx_mono/gfx_mono_c12832_a1z.h new file mode 100644 index 00000000..1fe5acff --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/common/services/gfx_mono/gfx_mono_c12832_a1z.h @@ -0,0 +1,158 @@ +/** + * \file + * + * \brief Haven Display C12832 A1Z display glue code for display controller + * + * Copyright (c) 2011-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ + +#ifndef GFX_MONO_C12832_A1Z_H +#define GFX_MONO_C12832_A1Z_H +#include "compiler.h" +#include "st7565r.h" + +#include "gfx_mono.h" +#include "gfx_mono_framebuffer.h" + +/** + * \ingroup gfx_mono + * \defgroup gfx_mono_C12832_A1Z_group C12832_A1Z graphic library abstraction + * + * This module is an abstraction layer between the graphic library and the + * C12832_A1Z monochrome LCD display connected to a ST7565R LCD controller. + * + * As the controller does not provide any hardware accelerated graphic, all the + * graphic primitives are provided by the \ref gfx_mono_generic_group service. + * + * \note Do not call the gfx_mono_st7565r_ functions directly. use the gfx_mono + * names that are defined in this header and documented in \ref gfx_mono . + * Ie. gfx_mono_draw_pixel() should be used, not gfx_mono_st7565r_draw_pixel() + * @{ + */ + +#define GFX_MONO_LCD_WIDTH 128 +#define GFX_MONO_LCD_HEIGHT 32 +#define GFX_MONO_LCD_PIXELS_PER_BYTE 8 +#define GFX_MONO_LCD_PAGES (GFX_MONO_LCD_HEIGHT / \ + GFX_MONO_LCD_PIXELS_PER_BYTE) +#define GFX_MONO_LCD_FRAMEBUFFER_SIZE ((GFX_MONO_LCD_WIDTH * \ + GFX_MONO_LCD_HEIGHT) / GFX_MONO_LCD_PIXELS_PER_BYTE) + +#define gfx_mono_draw_horizontal_line(x, y, length, color) \ + gfx_mono_generic_draw_horizontal_line(x, y, length, color) + +#define gfx_mono_draw_vertical_line(x, y, length, color) \ + gfx_mono_generic_draw_vertical_line(x, y, length, color) + +#define gfx_mono_draw_line(x1, y1, x2, y2, color) \ + gfx_mono_generic_draw_line(x1, y1, x2, y2, color) + +#define gfx_mono_draw_rect(x, y, width, height, color) \ + gfx_mono_generic_draw_rect(x, y, width, height, color) + +#define gfx_mono_draw_filled_rect(x, y, width, height, color) \ + gfx_mono_generic_draw_filled_rect(x, y, width, height, \ + color) + +#define gfx_mono_draw_circle(x, y, radius, color, octant_mask) \ + gfx_mono_generic_draw_circle(x, y, radius, color, \ + octant_mask) + +#define gfx_mono_draw_filled_circle(x, y, radius, color, quadrant_mask) \ + gfx_mono_generic_draw_filled_circle(x, y, radius, \ + color, quadrant_mask) + +#define gfx_mono_put_bitmap(bitmap, x, y) \ + gfx_mono_generic_put_bitmap(bitmap, x, y) + +#define gfx_mono_draw_pixel(x, y, color) \ + gfx_mono_st7565r_draw_pixel(x, y, color) + +#define gfx_mono_get_pixel(x, y) \ + gfx_mono_st7565r_get_pixel(x, y) + +#define gfx_mono_init() \ + gfx_mono_st7565r_init() + +#define gfx_mono_put_page(data, page, column, width) \ + gfx_mono_st7565r_put_page(data, page, column, width) + +#define gfx_mono_get_page(data, page, column, width) \ + gfx_mono_st7565r_get_page(data, page, column, width) + +#define gfx_mono_put_byte(page, column, data) \ + gfx_mono_st7565r_put_byte(page, column, data) + +#define gfx_mono_get_byte(page, column) \ + gfx_mono_st7565r_get_byte(page, column) + +#define gfx_mono_mask_byte(page, column, pixel_mask, color) \ + gfx_mono_st7565r_mask_byte(page, column, pixel_mask, color) + +#define gfx_mono_put_framebuffer() \ + gfx_mono_st7565r_put_framebuffer() + +void gfx_mono_st7565r_put_framebuffer(void); + +void gfx_mono_st7565r_put_page(gfx_mono_color_t *data, gfx_coord_t page, + gfx_coord_t page_offset, gfx_coord_t width); + +void gfx_mono_st7565r_get_page(gfx_mono_color_t *data, gfx_coord_t page, + gfx_coord_t page_offset, gfx_coord_t width); + +void gfx_mono_st7565r_init(void); + +void gfx_mono_st7565r_draw_pixel(gfx_coord_t x, gfx_coord_t y, + gfx_mono_color_t color); + +uint8_t gfx_mono_st7565r_get_pixel(gfx_coord_t x, gfx_coord_t y); + +void gfx_mono_st7565r_put_byte(gfx_coord_t page, gfx_coord_t column, + uint8_t data); + +uint8_t gfx_mono_st7565r_get_byte(gfx_coord_t page, gfx_coord_t column); + +void gfx_mono_st7565r_mask_byte(gfx_coord_t page, gfx_coord_t column, + gfx_mono_color_t pixel_mask, gfx_mono_color_t color); + +/** @} */ + +#endif /* GFX_MONO_C12832_A1Z_H */ diff --git a/AVR Code/USB_BULK_TEST/src/ASF/common/services/gfx_mono/gfx_mono_framebuffer.c b/AVR Code/USB_BULK_TEST/src/ASF/common/services/gfx_mono/gfx_mono_framebuffer.c new file mode 100644 index 00000000..4a1d2939 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/common/services/gfx_mono/gfx_mono_framebuffer.c @@ -0,0 +1,265 @@ +/** + * \file + * + * \brief Local framebuffer + * + * Copyright (c) 2011-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ + +#include "gfx_mono_framebuffer.h" + +/* Pointer to the framebuffer; updated by the gfx_mono_set_framebuffer function */ +static uint8_t *fbpointer; + +/* \brief Set the LCD framebuffer. + * + * \param framebuffer A pointer to an allocated area of RAM that can hold the + * framebuffer. + * + * A small example: + * \code + uint8_t framebuffer[FRAMEBUFFER_SIZE]; + gfx_mono_set_framebuffer(framebuffer); +\endcode + */ +void gfx_mono_set_framebuffer(uint8_t *framebuffer) +{ + fbpointer = framebuffer; +} + +/** + * \brief Put a page from RAM to the framebuffer + * + * \param data Pointer to data to be written + * \param page Page address + * \param column Offset into page (x coordinate) + * \param width Number of bytes to be written. + * + * The following example will write 32 bytes from data_buf to the page 0, + * column 10 (byte 10 to 42 in the framebuffer). + * \code + gfx_mono_framebuffer_put_page(data_buf, 0, 10, 32); +\endcode + */ +void gfx_mono_framebuffer_put_page(gfx_mono_color_t *data, gfx_coord_t page, + gfx_coord_t column, gfx_coord_t width) +{ + gfx_mono_color_t *data_pt = data; + gfx_coord_t *framebuffer_pt = fbpointer + + ((page * GFX_MONO_LCD_WIDTH) + column); + + do { + *framebuffer_pt++ = *data_pt++; + } while (--width > 0); +} + +/** + * \brief Read a page from the framebuffer + * + * \param data Pointer where to store the read data + * \param page Page address + * \param column Offset into page (x coordinate) + * \param width Number of bytes to be read + * + * The following example will read back the first 128 bytes (first page) from + * the framebuffer: + * \code + gfx_mono_framebuffer_get_page(read_buffer, 0, 0, 128); +\endcode + */ +void gfx_mono_framebuffer_get_page(gfx_mono_color_t *data, gfx_coord_t page, \ + gfx_coord_t column, gfx_coord_t width) +{ + gfx_coord_t *framebuffer_pt = fbpointer + + ((page * GFX_MONO_LCD_WIDTH) + column); + do { + *data++ = *framebuffer_pt++; + } while (--width > 0); +} + +/** + * \brief Draw pixel to framebuffer + * + * \param x X coordinate of the pixel + * \param y Y coordinate of the pixel + * \param color Pixel operation + * + */ +void gfx_mono_framebuffer_draw_pixel(gfx_coord_t x, gfx_coord_t y, + gfx_mono_color_t color) +{ + uint8_t page; + uint8_t pixel_mask; + uint8_t pixel_value; + + /* Discard pixels drawn outside the screen */ + if ((x > GFX_MONO_LCD_WIDTH - 1) || (y > GFX_MONO_LCD_HEIGHT - 1)) { + return; + } + + page = y / GFX_MONO_LCD_PIXELS_PER_BYTE; + pixel_mask = (1 << (y - (page * 8))); + + /* + * Read the page containing the pixel in interest, then perform the + * requested action on this pixel before writing the page back to the + * display. + */ + pixel_value = gfx_mono_framebuffer_get_byte(page, x); + + switch (color) { + case GFX_PIXEL_SET: + pixel_value |= pixel_mask; + break; + + case GFX_PIXEL_CLR: + pixel_value &= ~pixel_mask; + break; + + case GFX_PIXEL_XOR: + pixel_value ^= pixel_mask; + break; + + default: + break; + } + + gfx_mono_framebuffer_put_byte(page, x, pixel_value); +} + +/** + * \brief Get the pixel value at x,y in framebuffer + * + * \param x X coordinate of pixel + * \param y Y coordinate of pixel + * \return Non zero value if pixel is set. + * + */ +uint8_t gfx_mono_framebuffer_get_pixel(gfx_coord_t x, gfx_coord_t y) +{ + uint8_t page; + uint8_t pixel_mask; + + if ((x > GFX_MONO_LCD_WIDTH - 1) || (y > GFX_MONO_LCD_HEIGHT - 1)) { + return 0; + } + + page = y / GFX_MONO_LCD_PIXELS_PER_BYTE; + pixel_mask = (1 << (y - (page * 8))); + + return gfx_mono_framebuffer_get_byte(page, x) & pixel_mask; +} + +/** + * \brief Put a byte to the framebuffer + * + * \param page Page address + * \param column Page offset (x coordinate) + * \param data Data to be written + * + * This example will put the value 0xFF to the first byte in the framebuffer + * \code + gfx_mono_framebuffer_put_byte(0, 0, 0xFF); +\endcode + */ +void gfx_mono_framebuffer_put_byte(gfx_coord_t page, gfx_coord_t column, + uint8_t data) +{ + *(fbpointer + (page * GFX_MONO_LCD_WIDTH) + column) = data; +} + +/** + * \brief Get a byte from the framebuffer + * + * \param page Page address + * \param column Page offset (x coordinate) + * \return data from LCD controller or framebuffer. + * + * The following code will read the first byte of the framebuffer + * \code + data = gfx_mono_framebuffer_get_byte(0, 0); +\endcode + */ +uint8_t gfx_mono_framebuffer_get_byte(gfx_coord_t page, gfx_coord_t column) +{ + return *(fbpointer + (page * GFX_MONO_LCD_WIDTH) + column); +} + +/** + * \brief Read/Modify/Write a byte in the framebuffer + * + * This function will read the byte from the framebuffer and + * do a mask operation on the byte according to the pixel operation selected + * by the color argument and the pixel mask provided. + * + * \param page Page address + * \param column Page offset (x coordinate) + * \param pixel_mask Mask for pixel operation + * \param color Pixel operation + * + * A small example that will XOR the first byte of the framebuffer with 0xAA + * \code + gfx_mono_framebuffer_mask_byte(0,0,0xAA,GFX_PIXEL_XOR); +\endcode + */ +void gfx_mono_framebuffer_mask_byte(gfx_coord_t page, gfx_coord_t column, + gfx_mono_color_t pixel_mask, gfx_mono_color_t color) +{ + gfx_mono_color_t temp; + + temp = gfx_mono_get_byte(page, column); + + switch (color) { + case GFX_PIXEL_SET: + temp |= pixel_mask; + break; + + case GFX_PIXEL_CLR: + temp &= ~pixel_mask; + break; + + case GFX_PIXEL_XOR: + temp ^= pixel_mask; + break; + } + + gfx_mono_put_byte(page, column, temp); +} diff --git a/AVR Code/USB_BULK_TEST/src/ASF/common/services/gfx_mono/gfx_mono_framebuffer.h b/AVR Code/USB_BULK_TEST/src/ASF/common/services/gfx_mono/gfx_mono_framebuffer.h new file mode 100644 index 00000000..a3118409 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/common/services/gfx_mono/gfx_mono_framebuffer.h @@ -0,0 +1,87 @@ +/** + * \file + * + * \brief Monochrome graphic library framebuffer device + * + * Copyright (c) 2011-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ +#ifndef GFX_MONO_FRAMEBUFFER +#define GFX_MONO_FRAMEBUFFER + +#include "gfx_mono.h" + +/** + * \ingroup gfx_mono + * \defgroup gfx_mono_framebuffer_group Framebuffer + * + * This module provides read/write from and to a framebuffer in RAM. This is + * needed when using a controller that does not provide a way to read back data + * from the LCD controller memory. In this case we need to buffer the data in + * a local framebuffer to allow manipulation on pixel level. It is generally + * not recommended to access the framebuffer directly; this is handled by the + * graphic driver when needed. + * + * @{ + */ + +void gfx_mono_set_framebuffer(uint8_t *framebuffer); + +void gfx_mono_framebuffer_put_page(gfx_mono_color_t *data, gfx_coord_t page, + gfx_coord_t page_offset, gfx_coord_t width); + +void gfx_mono_framebuffer_get_page(gfx_mono_color_t *data, gfx_coord_t page, + gfx_coord_t page_offset, gfx_coord_t width); + +void gfx_mono_framebuffer_draw_pixel(gfx_coord_t x, gfx_coord_t y, + gfx_mono_color_t color); + +uint8_t gfx_mono_framebuffer_get_pixel(gfx_coord_t x, gfx_coord_t y); + +void gfx_mono_framebuffer_put_byte(gfx_coord_t page, gfx_coord_t column, + uint8_t data); + +uint8_t gfx_mono_framebuffer_get_byte(gfx_coord_t page, gfx_coord_t column); + +void gfx_mono_framebuffer_mask_byte(gfx_coord_t page, gfx_coord_t column, + gfx_mono_color_t pixel_mask, gfx_mono_color_t color); + +/** @} */ +#endif /* GFX_MONO_FRAMEBUFFER */ diff --git a/AVR Code/USB_BULK_TEST/src/ASF/common/services/gfx_mono/gfx_mono_generic.c b/AVR Code/USB_BULK_TEST/src/ASF/common/services/gfx_mono/gfx_mono_generic.c new file mode 100644 index 00000000..38e98345 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/common/services/gfx_mono/gfx_mono_generic.c @@ -0,0 +1,506 @@ +/** + * \file + * + * \brief Generic monochrome LCD graphic primitives + * + * Copyright (c) 2011-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ + +/** + * \ingroup gfx_mono_generic_group + * @{ + */ +/* + * Support and FAQ: visit Atmel Support + */ +#include "gfx_mono_generic.h" + +/** + * \brief Draw a horizontal line, one pixel wide (generic implementation) + * + * \note This function does a very simple bounds checking that does not + * check if the line is placed outside the screen. If you supply an + * x- or y-coordinate outside the display the behaviour is undefined, + * and you risk overwriting portions of internal SRAM. + * + * \param x X coordinate of leftmost pixel. + * \param y Y coordinate of the line. + * \param length Length of the line in pixels. + * \param color Pixel operation of the line. + */ +void gfx_mono_generic_draw_horizontal_line(gfx_coord_t x, gfx_coord_t y, + gfx_coord_t length, enum gfx_mono_color color) +{ + uint8_t page; + uint8_t pixelmask; + uint8_t temp; + + /* Clip line length if too long */ + if (x + length > GFX_MONO_LCD_WIDTH) { + length = GFX_MONO_LCD_WIDTH - x; + } + + page = y / 8; + pixelmask = (1 << (y - (page * 8))); + + if (length == 0) { + /* Nothing to do. Move along. */ + return; + } + + switch (color) { + case GFX_PIXEL_SET: + while (length-- > 0) { + temp = gfx_mono_get_byte(page, x + length); + temp |= pixelmask; + gfx_mono_put_byte(page, x + length, temp); + } + break; + + case GFX_PIXEL_CLR: + while (length-- > 0) { + temp = gfx_mono_get_byte(page, x + length); + temp &= ~pixelmask; + gfx_mono_put_byte(page, x + length, temp); + } + break; + + case GFX_PIXEL_XOR: + while (length-- > 0) { + temp = gfx_mono_get_byte(page, x + length); + temp ^= pixelmask; + gfx_mono_put_byte(page, x + length, temp); + } + break; + + default: + break; + } +} + +/** + * \brief Draw a vertical line, one pixel wide (generic implementation) + * + * \note This function does a very simple bounds checking that does not + * check if the line is placed outside the screen. If you supply an + * x- or y-coordinate outside the display the behaviour is undefined, + * and you risk overwriting portions of internal SRAM. + * + * \param x X coordinate of the line. + * \param y Y coordinate of the topmost pixel. + * \param length Length of the line in pixels. + * \param color Pixel operation of the line. + */ +void gfx_mono_generic_draw_vertical_line(gfx_coord_t x, gfx_coord_t y, + gfx_coord_t length, enum gfx_mono_color color) +{ + if (length == 0) { + return; + } + + gfx_coord_t y2 = y + length - 1; + + if (y == y2) { + gfx_mono_draw_pixel(x, y, color); + return; + } + + if (y2 >= GFX_MONO_LCD_HEIGHT - 1) { + y2 = GFX_MONO_LCD_HEIGHT - 1; + } + + gfx_coord_t y1page = y / 8; + gfx_coord_t y2page = y2 / 8; + + uint8_t y1bitpos = y & 0x07; + uint8_t y2bitpos = y2 & 0x07; + + uint8_t y1pixelmask = 0xFF << y1bitpos; + uint8_t y2pixelmask = 0xFF >> (7 - y2bitpos); + + /* The pixels are on the same page; combine masks */ + if (y1page == y2page) { + uint8_t pixelmask = y1pixelmask & y2pixelmask; + gfx_mono_mask_byte(y1page, x, pixelmask, color); + } else { + gfx_mono_mask_byte(y1page, x, y1pixelmask, color); + + while (++y1page < y2page) { + gfx_mono_mask_byte(y1page, x, 0xFF, color); + } + + gfx_mono_mask_byte(y2page, x, y2pixelmask, color); + } +} + +/** + * \brief Draw a line between two arbitrary points (generic implementation). + * + * \param x1 Start X coordinate. + * \param y1 Start Y coordinate. + * \param x2 End X coordinate. + * \param y2 End Y coordinate. + * \param color Pixel operation of the line. + */ +void gfx_mono_generic_draw_line(gfx_coord_t x1, gfx_coord_t y1, + gfx_coord_t x2, gfx_coord_t y2, + enum gfx_mono_color color) +{ + uint8_t i; + uint8_t x; + uint8_t y; + int8_t xinc; + int8_t yinc; + int8_t dx; + int8_t dy; + int8_t e; + + /* swap x1,y1 with x2,y2 */ + if (x1 > x2) { + dx = x1; + x1 = x2; + x2 = dx; + dy = y1; + y1 = y2; + y2 = dy; + } + + dx = x2 - x1; + dy = y2 - y1; + + x = x1; + y = y1; + + if (dx < 0) { + xinc = -1; + dx = -dx; + } else { + xinc = 1; + } + + if (dy < 0) { + yinc = -1; + dy = -dy; + } else { + yinc = 1; + } + + if (dx > dy) { + e = dy - dx; + for (i = 0; i <= dx; i++) { + gfx_mono_draw_pixel(x, y, color); + if (e >= 0) { + e -= dx; + y += yinc; + } + + e += dy; + x += xinc; + } + } else { + e = dx - dy; + for (i = 0; i <= dy; i++) { + gfx_mono_draw_pixel(x, y, color); + if (e >= 0) { + e -= dy; + x += xinc; + } + + e += dx; + y += yinc; + } + } +} + +/** + * \brief Draw an outline of a rectangle (generic implementation). + * + * \param x X coordinate of the left side. + * \param y Y coordinate of the top side. + * \param width Width of the rectangle. + * \param height Height of the rectangle. + * \param color Pixel operation of the line. + */ +void gfx_mono_generic_draw_rect(gfx_coord_t x, gfx_coord_t y, + gfx_coord_t width, gfx_coord_t height, + enum gfx_mono_color color) +{ + gfx_mono_draw_horizontal_line(x, y, width, color); + gfx_mono_draw_horizontal_line(x, y + height - 1, width, color); + + gfx_mono_draw_vertical_line(x, y, height, color); + gfx_mono_draw_vertical_line(x + width - 1, y, height, color); +} + +/** + * \brief Draw a filled rectangle (generic implementation). + * + * \param x X coordinate of the left side. + * \param y Y coordinate of the top side. + * \param width Width of the rectangle. + * \param height Height of the rectangle. + * \param color Pixel operation of the line + */ +void gfx_mono_generic_draw_filled_rect(gfx_coord_t x, gfx_coord_t y, + gfx_coord_t width, gfx_coord_t height, + enum gfx_mono_color color) +{ + if (height == 0) { + /* Nothing to do. Move along. */ + return; + } + + while (height-- > 0) { + gfx_mono_draw_horizontal_line(x, y + height, width, color); + } +} + +/** + * \brief Draw an outline of a circle or arc (generic implementation). + * + * The radius is the distance from the center to the circumference, + * which means that the total width or height of a circle will be + * (radius*2+1). + * + * The octant_mask parameter is a bitmask that decides which octants of + * the circle to draw. Use the GFX_OCTANTn, GFX_QUADRANTn, GFX_xHALF and + * GFX_WHOLE constants and OR them together if required. Radius equal to + * zero gives a single pixel. + * + * \param x X coordinate of center. + * \param y Y coordinate of center. + * \param radius Circle radius in pixels. + * \param color Pixel operation. + * \param octant_mask Bitmask indicating which octants to draw. + */ +void gfx_mono_generic_draw_circle(gfx_coord_t x, gfx_coord_t y, + gfx_coord_t radius, enum gfx_mono_color color, + uint8_t octant_mask) +{ + gfx_coord_t offset_x; + gfx_coord_t offset_y; + int16_t error; + + /* Draw only a pixel if radius is zero. */ + if (radius == 0) { + gfx_mono_draw_pixel(x, y, color); + return; + } + + /* Set up start iterators. */ + offset_x = 0; + offset_y = radius; + error = 3 - 2 * radius; + + /* Iterate offsetX from 0 to radius. */ + while (offset_x <= offset_y) { + /* Draw one pixel for each octant enabled in octant_mask. */ + if (octant_mask & GFX_OCTANT0) { + gfx_mono_draw_pixel(x + offset_y, y - offset_x, color); + } + + if (octant_mask & GFX_OCTANT1) { + gfx_mono_draw_pixel(x + offset_x, y - offset_y, color); + } + + if (octant_mask & GFX_OCTANT2) { + gfx_mono_draw_pixel(x - offset_x, y - offset_y, color); + } + + if (octant_mask & GFX_OCTANT3) { + gfx_mono_draw_pixel(x - offset_y, y - offset_x, color); + } + + if (octant_mask & GFX_OCTANT4) { + gfx_mono_draw_pixel(x - offset_y, y + offset_x, color); + } + + if (octant_mask & GFX_OCTANT5) { + gfx_mono_draw_pixel(x - offset_x, y + offset_y, color); + } + + if (octant_mask & GFX_OCTANT6) { + gfx_mono_draw_pixel(x + offset_x, y + offset_y, color); + } + + if (octant_mask & GFX_OCTANT7) { + gfx_mono_draw_pixel(x + offset_y, y + offset_x, color); + } + + /* Update error value and step offset_y when required. */ + if (error < 0) { + error += ((offset_x << 2) + 6); + } else { + error += (((offset_x - offset_y) << 2) + 10); + --offset_y; + } + + /* Next X. */ + ++offset_x; + } +} + +/** + * \brief Draw a filled circle or sector (generic implementation). + * + * The radius is the distance from the center to the circumference, + * which means that the total width or height of a circle will be + * (radius*2+1). + * + * The quadrant_mask parameter is a bitmask that decides which quadrants + * of the circle to draw. Use the GFX_QUADRANTn, GFX_xHALF and + * GFX_WHOLE constants and OR them together if required. Radius equal to + * zero gives a single pixel. + * + * \note This function only supports quadrants while gfx_draw_circle() + * supports octants. This is to improve performance on drawing + * filled circles. + * + * \param x X coordinate of center. + * \param y Y coordinate of center. + * \param radius Circle radius in pixels. + * \param color Pixel operation. + * \param quadrant_mask Bitmask indicating which quadrants to draw. + */ +void gfx_mono_generic_draw_filled_circle(gfx_coord_t x, gfx_coord_t y, + gfx_coord_t radius, enum gfx_mono_color color, + uint8_t quadrant_mask) +{ + gfx_coord_t offset_x; + gfx_coord_t offset_y; + int16_t error; + + /* Draw only a pixel if radius is zero. */ + if (radius == 0) { + gfx_mono_draw_pixel(x, y, color); + return; + } + + /* Set up start iterators. */ + offset_x = 0; + offset_y = radius; + error = 3 - 2 * radius; + + /* Iterate offset_x from 0 to radius. */ + while (offset_x <= offset_y) { + /* Draw vertical lines tracking each quadrant. */ + if (quadrant_mask & GFX_QUADRANT0) { + gfx_mono_draw_vertical_line(x + offset_y, + y - offset_x, offset_x + 1, color); + gfx_mono_draw_vertical_line(x + offset_x, + y - offset_y, offset_y + 1, color); + } + + if (quadrant_mask & GFX_QUADRANT1) { + gfx_mono_draw_vertical_line(x - offset_y, + y - offset_x, offset_x + 1, color); + gfx_mono_draw_vertical_line(x - offset_x, + y - offset_y, offset_y + 1, color); + } + + if (quadrant_mask & GFX_QUADRANT2) { + gfx_mono_draw_vertical_line(x - offset_y, + y, offset_x + 1, color); + gfx_mono_draw_vertical_line(x - offset_x, + y, offset_y + 1, color); + } + + if (quadrant_mask & GFX_QUADRANT3) { + gfx_mono_draw_vertical_line(x + offset_y, + y, offset_x + 1, color); + gfx_mono_draw_vertical_line(x + offset_x, + y, offset_y + 1, color); + } + + /* Update error value and step offset_y when required. */ + if (error < 0) { + error += ((offset_x << 2) + 6); + } else { + error += (((offset_x - offset_y) << 2) + 10); + --offset_y; + } + + /* Next X. */ + ++offset_x; + } +} + +/** + * \brief Put bitmap from FLASH or RAM to display + * + * This function will output bitmap data from FLASH or RAM. + * The bitmap y-coordinate will be aligned with display pages, rounded down. + * Ie: placing a bitmap at x=10, y=5 will put the bitmap at x = 10,y = 0 and + * placing a bitmap at x = 10, y = 10 will put the bitmap at x = 10, y = 8 + * + */ +void gfx_mono_generic_put_bitmap(struct gfx_mono_bitmap *bitmap, gfx_coord_t x, + gfx_coord_t y) +{ + gfx_coord_t num_pages = bitmap->height / 8; + gfx_coord_t page = y / 8; + gfx_coord_t column; + gfx_coord_t i; + gfx_mono_color_t temp; + + switch (bitmap->type) { + case GFX_MONO_BITMAP_PROGMEM: + for (i = 0; i < num_pages; i++) { + for (column = 0; column < bitmap->width; column++) { + temp = PROGMEM_READ_BYTE(bitmap->data.progmem + + (i * bitmap->width) + + column); + gfx_mono_put_byte(i + page, column + x, temp); + } + } + break; + + case GFX_MONO_BITMAP_RAM: + for (i = 0; i < num_pages; i++) { + gfx_mono_put_page(bitmap->data.pixmap + + (i * bitmap->width), page + i, x, + bitmap->width); + } + break; + + default: + break; + } +} + +/** @} */ diff --git a/AVR Code/USB_BULK_TEST/src/ASF/common/services/gfx_mono/gfx_mono_generic.h b/AVR Code/USB_BULK_TEST/src/ASF/common/services/gfx_mono/gfx_mono_generic.h new file mode 100644 index 00000000..4701e943 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/common/services/gfx_mono/gfx_mono_generic.h @@ -0,0 +1,123 @@ +/** + * \file + * + * \brief Generic monochrome LCD graphic primitives + * + * Copyright (c) 2011-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ +#ifndef GFX_MONO_GENERIC +#define GFX_MONO_GENERIC +#include "gfx_mono.h" + +/** + * \ingroup gfx_mono + * \defgroup gfx_mono_generic_group Generic monochrome graphic primitives + * + * This is a service providing generic implementations of graphic primitives + * - Horizontal line + * - Vertical line + * - Line + * - Circle (filled/not filled) + * - Rectangle (filled/not filled) + * + * it also provides functionality to draw a bitmap to the graphic memory. + * + * These functions are made available if the graphic hardware being used do + * not implement the functionality in hardware. This is true in most cases. + * + * This service is included as a requirement for a + * hardware specific component that uses these functions, and provides a + * gfx_draw_pixel function. + * + * @{ + */ + +/** + * \brief Storage structure for bitmap pixel data and metadata + */ +struct gfx_mono_bitmap { + /** Width of bitmap */ + gfx_coord_t width; + /** Height of bitmap */ + gfx_coord_t height; + /** Bitmap type */ + enum gfx_mono_bitmap_type type; + union { + /** Pointer to pixels for bitmap stored in RAM */ + gfx_mono_color_t *pixmap; + /** Pointer to pixels for bitmap stored in progmem */ + gfx_mono_color_t PROGMEM_T *progmem; + } + data; +}; + +void gfx_mono_generic_draw_horizontal_line(gfx_coord_t x, gfx_coord_t y, + gfx_coord_t length, enum gfx_mono_color color); + +void gfx_mono_generic_draw_vertical_line(gfx_coord_t x, gfx_coord_t y, + gfx_coord_t length, enum gfx_mono_color color); + +void gfx_mono_generic_draw_line(gfx_coord_t x1, gfx_coord_t y1, + gfx_coord_t x2, gfx_coord_t y2, + enum gfx_mono_color color); + +void gfx_mono_generic_draw_rect(gfx_coord_t x, gfx_coord_t y, + gfx_coord_t width, gfx_coord_t height, + enum gfx_mono_color color); + +void gfx_mono_generic_draw_filled_rect(gfx_coord_t x, gfx_coord_t y, + gfx_coord_t width, gfx_coord_t height, + enum gfx_mono_color color); + +void gfx_mono_generic_draw_circle(gfx_coord_t x, gfx_coord_t y, + gfx_coord_t radius, enum gfx_mono_color color, + uint8_t octant_mask); + +void gfx_mono_generic_draw_filled_circle(gfx_coord_t x, gfx_coord_t y, + gfx_coord_t radius, enum gfx_mono_color color, + uint8_t quadrant_mask); + +void gfx_mono_generic_put_bitmap(struct gfx_mono_bitmap *bitmap, gfx_coord_t x, + gfx_coord_t y); + +/** @} */ + +#endif /* GFX_MONO_GENERIC */ diff --git a/AVR Code/USB_BULK_TEST/src/ASF/common/services/gfx_mono/gfx_mono_menu.c b/AVR Code/USB_BULK_TEST/src/ASF/common/services/gfx_mono/gfx_mono_menu.c new file mode 100644 index 00000000..f278a292 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/common/services/gfx_mono/gfx_mono_menu.c @@ -0,0 +1,188 @@ +/** + * \file + * + * \brief Simple menu system + * Copyright (c) 2011-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ + +#include "sysfont.h" +#include "gfx_mono.h" +#include + +#include "gfx_mono_menu.h" + +/** + * \ingroup gfx_mono_menu + * @{ + */ + +PROGMEM_DECLARE(gfx_mono_color_t, arrow_right_data[]) = { + GFX_MONO_MENU_INDICATOR_BITMAP +}; + +struct gfx_mono_bitmap menu_bitmap_indicator = { + .height = GFX_MONO_MENU_INDICATOR_HEIGHT, + .width = GFX_MONO_MENU_INDICATOR_WIDTH, + .type = GFX_MONO_BITMAP_PROGMEM, + .data.progmem = arrow_right_data +}; + +/** + * \brief Draw menu strings and an icon by the current selection. + * + * \param menu a menu struct with menu settings + * \param redraw clear screen before drawing menu + */ +static void menu_draw(struct gfx_mono_menu *menu, bool redraw) +{ + static bool redraw_state; + uint8_t i; + uint8_t line = 1; + uint8_t menu_page = menu->current_selection / + GFX_MONO_MENU_ELEMENTS_PER_SCREEN; + + if (menu->current_page != menu_page || redraw == true) { + /* clear screen if we have changed the page or menu and prepare + * redraw */ + gfx_mono_draw_filled_rect(0, SYSFONT_LINESPACING, + GFX_MONO_LCD_WIDTH, + GFX_MONO_LCD_HEIGHT - SYSFONT_LINESPACING, + GFX_PIXEL_CLR); + redraw_state = true; + } + + menu->current_page = menu_page; + + /* Clear old indicator icon */ + gfx_mono_draw_filled_rect(0, SYSFONT_LINESPACING, + GFX_MONO_MENU_INDICATOR_WIDTH, GFX_MONO_LCD_HEIGHT - + SYSFONT_LINESPACING, GFX_PIXEL_CLR); + + /* Put indicator icon on current selection */ + gfx_mono_put_bitmap(&menu_bitmap_indicator, 0, + SYSFONT_LINESPACING * ((menu->current_selection % + GFX_MONO_MENU_ELEMENTS_PER_SCREEN) + 1)); + + /* Print visible options if page or menu has changed */ + if (redraw_state == true) { + for (i = menu_page * GFX_MONO_MENU_ELEMENTS_PER_SCREEN; + i < menu_page * + GFX_MONO_MENU_ELEMENTS_PER_SCREEN + + GFX_MONO_MENU_ELEMENTS_PER_SCREEN && + i < menu->num_elements; i++) { + gfx_mono_draw_progmem_string( + (char PROGMEM_PTR_T)menu->strings[i], + GFX_MONO_MENU_INDICATOR_WIDTH + 1, + line * SYSFONT_LINESPACING, &sysfont); + line++; + } + redraw_state = false; + } +} + +/** + * *\brief Initialize the menu handling. Clear screen and draw menu. + * + * \param menu menu struct with menu options + * + */ +void gfx_mono_menu_init(struct gfx_mono_menu *menu) +{ + /* Clear screen */ + gfx_mono_draw_filled_rect(0, 0, + GFX_MONO_LCD_WIDTH, GFX_MONO_LCD_HEIGHT, GFX_PIXEL_CLR); + + /* Draw the menu title on the top of the screen */ + gfx_mono_draw_progmem_string((char PROGMEM_PTR_T)menu->title, + 0, 0, &sysfont); + + /* Draw menu options below */ + menu_draw(menu, true); +} + +/** + * \brief Update menu depending on input. + * + * \param menu menu struct with menu options + * \param keycode keycode to process + * + * \retval selected menu option or status code + */ +uint8_t gfx_mono_menu_process_key(struct gfx_mono_menu *menu, uint8_t keycode) +{ + switch (keycode) { + case GFX_MONO_MENU_KEYCODE_DOWN: + if (menu->current_selection == menu->num_elements - 1) { + menu->current_selection = 0; + } else { + menu->current_selection++; + } + + /* Update menu on display */ + menu_draw(menu, false); + /* Nothing selected yet */ + return GFX_MONO_MENU_EVENT_IDLE; + + case GFX_MONO_MENU_KEYCODE_UP: + if (menu->current_selection) { + menu->current_selection--; + } else { + menu->current_selection = menu->num_elements - 1; + } + + /* Update menu on display */ + menu_draw(menu, false); + /* Nothing selected yet */ + return GFX_MONO_MENU_EVENT_IDLE; + + case GFX_MONO_MENU_KEYCODE_ENTER: + /* Got what we want. Return selection. */ + return menu->current_selection; + + case GFX_MONO_MENU_KEYCODE_BACK: + /* User pressed "back" key, inform user */ + return GFX_MONO_MENU_EVENT_EXIT; + + default: + /* Unknown key event */ + return GFX_MONO_MENU_EVENT_IDLE; + } +} diff --git a/AVR Code/USB_BULK_TEST/src/ASF/common/services/gfx_mono/gfx_mono_menu.h b/AVR Code/USB_BULK_TEST/src/ASF/common/services/gfx_mono/gfx_mono_menu.h new file mode 100644 index 00000000..1536a823 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/common/services/gfx_mono/gfx_mono_menu.h @@ -0,0 +1,127 @@ +/** + * \file + * + * \brief Simple menu system + * + * Copyright (c) 2011-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ +#ifndef GFX_MONO_MENU_H +#define GFX_MONO_MENU_H + +#include "compiler.h" +#include "conf_menu.h" + +/** + * \ingroup gfx_mono + * \defgroup gfx_mono_menu Menu system for monochrome graphical displays + * + * This module provides a simple menu system for monochrome graphical + * displays. + * + * Typical flow of an application using the menu system: + * + * 1) Define menu structure.\n + * 2) Call gfx_mono_menu_init.\n + * 3) Get user input.\n + * 4) Update menu with user input using function \ref + * gfx_mono_menu_process_key.\n + * 5) Interpret \ref gfx_mono_menu_process_key return value.\n + * 6) Go to 3.\n + * + * The menu is declared using the \ref gfx_mono_menu struct. + * + * To start the menu system, call the \ref gfx_mono_menu_init function. + * This function will clear the display and draw the menu. + * + * Before the menu can be updated, you need input from the user. Methods for + * getting input is not part of the menu module. + * + * As soon as input is received, inform the menu system using the + * \ref gfx_mono_menu_process_key function. + * This function will then return a status code and act depending on the given + * keycode: + * + * MENU_KEYCODE_DOWN : Change selection to next menu item (or first if at + * bottom). + * Returns MENU_EVENT_IDLE. + * + * MENU_KEYCODE_UP : Change selection to previous menu item (or last if at top). + * Returns MENU_EVENT_IDLE. + * + * MENU_KEYCODE_ENTER : Nothing changes in menu. Returns the line selected. + * + * MENU_KEYCODE_BACK : Nothing changes in menu. Returns MENU_EVENT_EXIT. + * + * The value of the keycodes used are defined in conf_menu.h. These value can + * be changed if needed. + * + * The graphical indicator used to indicate menu selection is defined in + * conf_menu.h. This indicator can be changed if needed. + * @{ + */ + +/** \name Menu events definitions */ +/** @{ */ +/** Idle. Nothing to report. */ +#define GFX_MONO_MENU_EVENT_IDLE 0xFF +/** Exit. User has pressed the back button. */ +#define GFX_MONO_MENU_EVENT_EXIT 0xFE +/** @} */ + +/** Maximum number of menu elements on display */ +#define GFX_MONO_MENU_ELEMENTS_PER_SCREEN ((GFX_MONO_LCD_HEIGHT / \ + SYSFONT_LINESPACING) - 1) + +/** Menu struct */ +struct gfx_mono_menu { + PROGMEM_STRING_T title; + PROGMEM_STRING_T *strings; + uint8_t num_elements; + uint8_t current_selection; + uint8_t current_page; +}; + +void gfx_mono_menu_init(struct gfx_mono_menu *menu); +uint8_t gfx_mono_menu_process_key(struct gfx_mono_menu *menu, uint8_t keycode); + +/** @} */ + +#endif /* GFX_MONO_MENU_H */ diff --git a/AVR Code/USB_BULK_TEST/src/ASF/common/services/gfx_mono/gfx_mono_spinctrl.c b/AVR Code/USB_BULK_TEST/src/ASF/common/services/gfx_mono/gfx_mono_spinctrl.c new file mode 100644 index 00000000..4c97c1ee --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/common/services/gfx_mono/gfx_mono_spinctrl.c @@ -0,0 +1,697 @@ +/** + * \file + * + * \brief Spin control widget + * Copyright (c) 2011-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ + +#include "sysfont.h" +#include "stdio.h" +#include "gfx_mono.h" +#include "gfx_mono_spinctrl.h" + +PROGMEM_DECLARE(gfx_mono_color_t, spin_indicator_data[]) = { + GFX_MONO_SPINCTRL_SPIN_INDICATOR_BITMAP +}; + +PROGMEM_DECLARE(gfx_mono_color_t, indicator_data[]) = { + GFX_MONO_SPINCTRL_INDICATOR_BITMAP +}; + +struct gfx_mono_bitmap gfx_mono_spinctrl_bitmap_spin_indicator = { + .height = GFX_MONO_SPINCTRL_SPIN_INDICATOR_HEIGHT, + .width = GFX_MONO_SPINCTRL_SPIN_INDICATOR_WIDTH, + .type = GFX_MONO_BITMAP_PROGMEM, + .data.progmem = spin_indicator_data +}; + +struct gfx_mono_bitmap gfx_mono_spinctrl_bitmap_indicator = { + .height = GFX_MONO_SPINCTRL_INDICATOR_HEIGHT, + .width = GFX_MONO_SPINCTRL_INDICATOR_WIDTH, + .type = GFX_MONO_BITMAP_PROGMEM, + .data.progmem = indicator_data +}; + +/** + * \brief Draw or delete indicator arrow in front of spinner + * + * \param *spinner initialized gfx_mono_spinctrl struct + * \param draw true on draw, false on delete + */ +static void gfx_mono_spinctrl_draw_indicator(struct gfx_mono_spinctrl *spinner, + bool draw) +{ + if (draw) { + gfx_mono_put_bitmap(&gfx_mono_spinctrl_bitmap_indicator, 0, + spinner->y); + } else { + gfx_mono_draw_filled_rect(0, spinner->y, + GFX_MONO_SPINCTRL_INDICATOR_WIDTH, + GFX_MONO_SPINCTRL_INDICATOR_HEIGHT, + GFX_PIXEL_CLR); + } +} + +/** + * \brief Draw or delete indicator in front of spinner data + * + * \param spinner pointer to initialized gfx_mono_spinctrl struct + * \param draw true on draw, false on delete + */ +static void gfx_mono_spinctrl_draw_spin_indicator(struct gfx_mono_spinctrl + *spinner, bool draw) +{ + if (draw) { + gfx_mono_put_bitmap(&gfx_mono_spinctrl_bitmap_spin_indicator, + GFX_MONO_LCD_WIDTH - GFX_MONO_SPINCTRL_SPIN_INDICATOR_WIDTH, + spinner->y); + } else { + gfx_mono_draw_filled_rect(GFX_MONO_LCD_WIDTH - + GFX_MONO_SPINCTRL_SPIN_INDICATOR_WIDTH, + spinner->y, + GFX_MONO_SPINCTRL_SPIN_INDICATOR_WIDTH, + GFX_MONO_SPINCTRL_SPIN_INDICATOR_HEIGHT, + GFX_PIXEL_CLR); + } +} + +/** + * \brief Draw OK button at bottom of screen + * + * This function draws an OK button at the bottom of the screen. It will + * also draw an indicator arrow in front of the button if the indicator bool + * is true. If the draw bool is false, the OK button will be deleted, and if + * the indicator bool is false, the indicator will be deleted. + * + * \param draw true on draw, false on delete + * \param indicator true on draw indicator, false on delete + */ +static void gfx_mono_spinctrl_draw_button(bool draw, bool indicator) +{ + uint8_t width; + uint8_t height; + uint8_t offset; + char string_buf[22]; + + /* Clear bottom line */ + gfx_mono_draw_filled_rect(0, + (SYSFONT_HEIGHT + 1) * + GFX_MONO_SPINCTRL_MAX_ELEMENTS_IN_SPINCOLLECTION, + GFX_MONO_LCD_WIDTH, SYSFONT_HEIGHT, GFX_PIXEL_CLR); + + snprintf(string_buf, sizeof(string_buf), "OK"); + gfx_mono_get_string_bounding_box(string_buf, &sysfont, &width, &height); + offset = (GFX_MONO_LCD_WIDTH - width) / 2; + + if (draw) { + /* Draw OK button in the middle of the last line */ + gfx_mono_draw_string(string_buf, offset, + (SYSFONT_HEIGHT + 1) * + GFX_MONO_SPINCTRL_MAX_ELEMENTS_IN_SPINCOLLECTION, + &sysfont); + if (indicator) { + /* Draw indicator arrow in front of button */ + gfx_mono_put_bitmap(&gfx_mono_spinctrl_bitmap_indicator, + offset - GFX_MONO_SPINCTRL_INDICATOR_WIDTH, + (SYSFONT_HEIGHT + 1) * + GFX_MONO_SPINCTRL_MAX_ELEMENTS_IN_SPINCOLLECTION); + } else { + /* Delete indicator */ + gfx_mono_draw_filled_rect(offset - + GFX_MONO_SPINCTRL_INDICATOR_WIDTH, + (SYSFONT_HEIGHT + 1) * + GFX_MONO_SPINCTRL_MAX_ELEMENTS_IN_SPINCOLLECTION, + GFX_MONO_SPINCTRL_INDICATOR_WIDTH, + GFX_MONO_SPINCTRL_INDICATOR_HEIGHT, + GFX_PIXEL_CLR); + } + } else { + /* Delete OK button */ + gfx_mono_draw_filled_rect( + offset - GFX_MONO_SPINCTRL_INDICATOR_WIDTH, + (SYSFONT_HEIGHT + 1) * + GFX_MONO_SPINCTRL_MAX_ELEMENTS_IN_SPINCOLLECTION, 20, + SYSFONT_HEIGHT, GFX_PIXEL_CLR); + } +} + +/** + * \brief Draw spinner at its position. + * + * This function draws a spinner at its position. + * The title of the spinner is only drawn if the redraw option is set. + * If the spinner is in focus, arrows will be drawn next to the spinner value + * to indicate that it is spinnable. + * + * \param spinner pointer to initialized gfx_mono_spinctrl struct + * \param redraw true if title of spinner should be drawn + */ +void gfx_mono_spinctrl_draw(struct gfx_mono_spinctrl *spinner, bool redraw) +{ + char string_buf[GFX_MONO_SPINCTRL_INT_SPINNER_WIDTH]; + uint8_t index; + uint8_t offset; + + if (redraw) { + /* Clear line */ + gfx_mono_draw_filled_rect(0, spinner->y, GFX_MONO_LCD_WIDTH, + SYSFONT_HEIGHT, GFX_PIXEL_CLR); + /* Draw title */ + gfx_mono_draw_progmem_string((char PROGMEM_PTR_T)spinner->title, + GFX_MONO_SPINCTRL_INDICATOR_WIDTH + 1, + spinner->y, &sysfont); + } + + if (spinner->in_focus) { + gfx_mono_spinctrl_draw_spin_indicator(spinner, true); + } else { + gfx_mono_spinctrl_draw_spin_indicator(spinner, false); + } + + if (spinner->datatype == SPINTYPE_INTEGER) { + offset = GFX_MONO_LCD_WIDTH - + (SYSFONT_WIDTH * + GFX_MONO_SPINCTRL_INT_SPINNER_WIDTH); + snprintf(string_buf, sizeof(string_buf), "%d", + spinner->integer_data); + /* Delete previous spinner data */ + gfx_mono_draw_filled_rect(offset, spinner->y, + GFX_MONO_LCD_WIDTH - offset - + GFX_MONO_SPINCTRL_SPIN_INDICATOR_WIDTH, + SYSFONT_HEIGHT, + GFX_PIXEL_CLR); + /* Draw integer data */ + gfx_mono_draw_string(string_buf, offset, spinner->y, &sysfont); + } else if (spinner->datatype == SPINTYPE_STRING) { + index = spinner->strings.index; + offset = GFX_MONO_LCD_WIDTH - + (SYSFONT_WIDTH * + GFX_MONO_SPINCTRL_STRING_SPINNER_WIDTH); + + /* Delete previous spinner data */ + gfx_mono_draw_filled_rect(offset, spinner->y, + GFX_MONO_LCD_WIDTH - offset - + GFX_MONO_SPINCTRL_SPIN_INDICATOR_WIDTH, + SYSFONT_HEIGHT, + GFX_PIXEL_CLR); + + /* Draw string data */ + gfx_mono_draw_progmem_string( + (char PROGMEM_PTR_T)spinner->strings.data[index], offset, + spinner->y, &sysfont); + } +} + +/** + * \brief Initialize a spinner. + * + * This function initializes a spinner to either + * \ref gfx_mono_spinctrl_type_t "SPINTYPE_STRING" spinner that spins through + * the strings in a \ref PROGMEM_STRING_T or a + * \ref gfx_mono_spinctrl_type_t "SPINTYPE_INTEGER" spinner that spins through + * integers. + * If the spinner type is SPINTYPE_INTEGER, it will spin from lower_limit to + * upper_limit. + * If the spinner type is SPINTYPE_STRING, a pointer to a PROGMEM_STRING_T must + * be provided, and the spinner will spin through the strings starting at + * index lower_limit ending at index upper_limit. + * The y parameter specifies where to place the spinner on the screen, but is + * overwritten if the spinner is put in a spincollection. + * + * \param spinner pointer to initialized gfx_mono_spinctrl struct + * \param datatype typer of spinner, integer or string + * \param title title of spinner + * \param data pointer to progmem string array if datatype is string. + * NULL if datatype is integer. + * \param lower_limit lower limit and start value of spinner's data + * \param upper_limit upper limit of spinner's data + * \param y y position of spinner + */ +void gfx_mono_spinctrl_init(struct gfx_mono_spinctrl *spinner, + gfx_mono_spinctrl_type_t datatype, PROGMEM_STRING_T title, + PROGMEM_STRING_T *data, int16_t lower_limit, + int16_t upper_limit, + gfx_coord_t y) +{ + /* Initialization of spinner parameters */ + spinner->title = title; + spinner->datatype = datatype; + spinner->lower_limit = lower_limit; + spinner->upper_limit = upper_limit; + spinner->y = y; + spinner->in_focus = false; + spinner->last_saved_value = spinner->lower_limit; + + if (datatype == SPINTYPE_STRING) { + spinner->strings.data = data; + spinner->strings.index = lower_limit; + } else { + spinner->integer_data = lower_limit; + } +} + +/** + * \brief Initialize a spincollection. + * + * This function initializes a spincollection to which spinners can be added. + * + * \param collection pointer to gfx_mono_spinctrl_spincollection to Initialize + */ +void gfx_mono_spinctrl_spincollection_init(struct + gfx_mono_spinctrl_spincollection *collection) +{ + collection->active_spinner = false; + collection->current_selection = 0; + collection->number_of_spinners = 0; + collection->init = true; +} + +/** + * \brief Add spinner to spincollection + * + * This function adds an initialized spinner to a spincollection and positions + * it below any other spinners in the spincollection on the screen. The + * spinners in the spincollection are linked together and number of spinners is + * updated. + * It is not possible to add more spinners than + * \ref GFX_MONO_SPINCTRL_MAX_ELEMENTS_IN_SPINCOLLECTION "maximum number of + * spinners in a spincollection". + * + * \param spinner pointer to initialized gfx_mono_spinctrl struct to add + * to collection + * \param spinners pointer to initialized gfx_mono_spinctrl_spincollection + * struct + * + */ +void gfx_mono_spinctrl_spincollection_add_spinner(struct + gfx_mono_spinctrl *spinner, + struct gfx_mono_spinctrl_spincollection *spinners) +{ + uint8_t i; + struct gfx_mono_spinctrl *lastspinner; + + /* Do not add more spinner elements than maximum number of spinners */ + if (spinners->number_of_spinners >= + GFX_MONO_SPINCTRL_MAX_ELEMENTS_IN_SPINCOLLECTION) { + return; + } + + /* Place new spinner below previous spinners on screen */ + spinner->y = (SYSFONT_HEIGHT + 1) * spinners->number_of_spinners; + + /* Add pointer to the spinner in spincollection if empty */ + if (spinners->number_of_spinners == 0) { + spinners->collection = spinner; + } else { + lastspinner = spinners->collection; + for (i = 1; i < spinners->number_of_spinners; i++) { + lastspinner = lastspinner->next; + } + /* Link the new spinner to the current last spinner in the + * collection */ + lastspinner->next = spinner; + /* Link the current last spinner as previous spinner for new + * spinner */ + spinner->prev = lastspinner; + } + + /* Set added spinner as last spinner in collection */ + spinners->collection_last = spinner; + /* Update number of spinners in collection */ + spinners->number_of_spinners++; +} + +/** + * \brief Show spincollection + * + * This function draws all the spinners in a spincollection to the screen, + * together with an OK button at the bottom. It also draws an indicator arrow + * in front of the top spinner. + * + * \param spinners pointer to initialized spincollection to display + */ +void gfx_mono_spinctrl_spincollection_show(struct + gfx_mono_spinctrl_spincollection *spinners) +{ + uint8_t i; + struct gfx_mono_spinctrl *iterator; + + /* Clear screen */ + gfx_mono_draw_filled_rect(0, 0, GFX_MONO_LCD_WIDTH, GFX_MONO_LCD_HEIGHT, + GFX_PIXEL_CLR); + + /* Make sure there are spinners in the collection */ + if (spinners->number_of_spinners == 0) { + return; + } + + /* Draw spinners on screen */ + iterator = spinners->collection; + for (i = 0; i < spinners->number_of_spinners; i++) { + gfx_mono_spinctrl_draw(iterator, true); + iterator = iterator->next; + } + /* Draw OK button at bottom of screen */ + gfx_mono_spinctrl_draw_button(true, false); + /* Draw indicator arrow in front of first spinner */ + gfx_mono_spinctrl_draw_indicator(spinners->collection, true); +} + +/** + * \brief Step up spinner data + * + * This function steps up the data, making sure it does not go + * beyond the upper limit. Wraps around if it does. + * + * \param spinner pointer to initialized spinner. + */ +static void gfx_mono_spinctrl_step_up(struct gfx_mono_spinctrl *spinner) +{ + /* Check if spinner type is integer or string, increment integer data or + * move to next string index. + */ + if (spinner->datatype == SPINTYPE_INTEGER) { + if (spinner->integer_data < spinner->upper_limit) { + spinner->integer_data++; + } else { + spinner->integer_data = spinner->lower_limit; + } + } else if (spinner->datatype == SPINTYPE_STRING) { + if (spinner->strings.index < spinner->upper_limit) { + spinner->strings.index++; + } else { + (spinner->strings.index) = spinner->lower_limit; + } + } +} + +/** + * \brief Step down spinner data + * + * * This function steps down the data, making sure it does not go + * below the lower limit. Wraps around if it does. + * + * \param spinner pointer to initialized spinner. + */ +static void gfx_mono_spinctrl_step_down(struct gfx_mono_spinctrl *spinner) +{ + /* Check if spinner type is integer or string, increment integer data, + * move to next string index. + */ + if (spinner->datatype == SPINTYPE_INTEGER) { + if (spinner->integer_data > spinner->lower_limit) { + spinner->integer_data--; + } else { + spinner->integer_data = spinner->upper_limit; + } + } else if (spinner->datatype == SPINTYPE_STRING) { + if (spinner->strings.index > (spinner->lower_limit)) { + spinner->strings.index--; + } else { + spinner->strings.index = spinner->upper_limit; + } + } +} + +/** + * \brief Update single spinner depending on input. + * + * \param spinner pointer to initialized spinner. + * \param keycode keycode to process + * + * \retval selected selected spinner value + * \retval GFX_MONO_SPINCTRL_EVENT_IDLE spinner spinning + * \retval GFX_MONO_SPINCTRL_EVENT_BACK spinner deselected + */ +int16_t gfx_mono_spinctrl_process_key(struct gfx_mono_spinctrl *spinner, + uint8_t keycode) +{ + switch (keycode) { + case GFX_MONO_SPINCTRL_KEYCODE_DOWN: + if (spinner->in_focus) { + gfx_mono_spinctrl_step_down(spinner); + /* Update spinner on display */ + gfx_mono_spinctrl_draw(spinner, false); + } + + /* Nothing selected yet */ + return GFX_MONO_SPINCTRL_EVENT_IDLE; + + case GFX_MONO_SPINCTRL_KEYCODE_UP: + if (spinner->in_focus) { + gfx_mono_spinctrl_step_up(spinner); + /* Update spinner on display */ + gfx_mono_spinctrl_draw(spinner, false); + } + + /* Nothing selected yet */ + return GFX_MONO_SPINCTRL_EVENT_IDLE; + + case GFX_MONO_SPINCTRL_KEYCODE_ENTER: + if (spinner->in_focus) { + if (spinner->datatype == SPINTYPE_INTEGER) { + spinner->in_focus = false; + gfx_mono_spinctrl_draw(spinner, false); + /* Store saved value in case of aborting spinner + * later */ + spinner->last_saved_value + = spinner->integer_data; + /* Got what we want. Return selection. */ + return spinner->integer_data; + } else if (spinner->datatype == SPINTYPE_STRING) { + spinner->in_focus = false; + gfx_mono_spinctrl_draw(spinner, false); + /* Store saved value in case of aborting spinner + * later */ + spinner->last_saved_value + = spinner->strings.index; + /* Got what we want. Return selection. */ + return spinner->strings.index; + } + } else { + /* Spinner selected */ + spinner->in_focus = true; + gfx_mono_spinctrl_draw(spinner, false); + return GFX_MONO_SPINCTRL_EVENT_IDLE; + } + + case GFX_MONO_SPINCTRL_KEYCODE_BACK: + /* User pressed "back" key, */ + spinner->in_focus = false; + /* Spinner choice aborted, show last saved value instead */ + if (spinner->datatype == SPINTYPE_INTEGER) { + spinner->integer_data = spinner->last_saved_value; + } else if (spinner->datatype == SPINTYPE_STRING) { + spinner->strings.index = spinner->last_saved_value; + } + + gfx_mono_spinctrl_draw(spinner, false); + return GFX_MONO_SPINCTRL_EVENT_BACK; + + default: + /* Unknown key event */ + return GFX_MONO_SPINCTRL_EVENT_IDLE; + } +} + +/** + * \brief Update spincollection on screen depending on input + * + * This function returns \ref GFX_MONO_SPINCTRL_EVENT_FINISH if user has + * pressed the OK button. The spinner choices can then be extracted from the + * results array. If a spinner is of type SPINTYPE_STRING, the index of the + * progmem string will be stored in the results array, else the selected + * integer value will be stored. + * The choice from the first spinner added to the spincollection will be stored + * at index 0 in the results array, the second at index 1 and so on. + * If user has pressed the back button, \ref GFX_MONO_SPINCTRL_EVENT_BACK is + * returned, signalling that the application should be cancelled. + * + * \param spinners pointer to initialized + * gfx_mono_spinctrl_spincollection + * \param keycode keycode to process + * \param results array to store results from the spinners, must be of + * same length as number of spinners + * + * \retval GFX_MONO_SPINCTRL_EVENT_FINISH user pressed ok button + * \retval GFX_MONO_SPINCTRL_EVENT_BACK user cancelled + * \retval GFX_MONO_SPINCTRL_EVENT_IDLE user is navigating in spincollection + */ +int16_t gfx_mono_spinctrl_spincollection_process_key(struct + gfx_mono_spinctrl_spincollection *spinners, uint8_t keycode, + int16_t results[]) +{ + uint8_t i; + struct gfx_mono_spinctrl *iterator; + + /* Make sure there are spinners in the collection, if not, cancel */ + if (spinners->number_of_spinners == 0) { + return GFX_MONO_SPINCTRL_EVENT_BACK; + } + + /* Store initial values in results array first time function is run */ + if (spinners->init) { + iterator = spinners->collection; + for (i = 0; i < spinners->number_of_spinners; i++) { + if (iterator->datatype == SPINTYPE_INTEGER) { + results[i] = iterator->integer_data; + } else { + results[i] = iterator->strings.index; + } + + iterator = iterator->next; + } + spinners->init = false; + } + + /* Find current spinner selection */ + iterator = spinners->collection; + if (spinners->current_selection != GFX_MONO_SPINCTRL_BUTTON) { + for (i = 0; i < spinners->current_selection; i++) { + iterator = iterator->next; + } + } + + if (spinners->active_spinner) { + /* Process chosen spinner */ + spinners->selection = gfx_mono_spinctrl_process_key(iterator, + keycode); + if (spinners->selection == GFX_MONO_SPINCTRL_EVENT_BACK) { + /* User has exited spinner without saving the result */ + spinners->active_spinner = false; + } else if (spinners->selection != + GFX_MONO_SPINCTRL_EVENT_IDLE) { + /* Value selected, store in array */ + results[spinners->current_selection] + = spinners->selection; + /* Step out of spinner and into spincollection */ + spinners->active_spinner = false; + } + + return GFX_MONO_SPINCTRL_EVENT_IDLE; + } else { + switch (keycode) { + case GFX_MONO_SPINCTRL_KEYCODE_DOWN: + if (spinners->current_selection == + GFX_MONO_SPINCTRL_BUTTON) { + spinners->current_selection = 0; + /* Delete indicator arrow in front of button */ + gfx_mono_spinctrl_draw_button(true, false); + /* Draw indicator arrow in front of first + * spinner */ + gfx_mono_spinctrl_draw_indicator(iterator, + true); + } else if (spinners->current_selection < + spinners->number_of_spinners - 1) { + /* Delete indicator arrow */ + gfx_mono_spinctrl_draw_indicator(iterator, + false); + spinners->current_selection++; + /* Draw indicator arrow in front of new spinner */ + gfx_mono_spinctrl_draw_indicator(iterator->next, + true); + } else { + /* Delete indicator arrow */ + gfx_mono_spinctrl_draw_indicator(iterator, + false); + spinners->current_selection + = GFX_MONO_SPINCTRL_BUTTON; + /* Draw indicator arrow in front of button */ + gfx_mono_spinctrl_draw_button(true, true); + } + + return GFX_MONO_SPINCTRL_EVENT_IDLE; + + case GFX_MONO_SPINCTRL_KEYCODE_UP: + if (spinners->current_selection == + GFX_MONO_SPINCTRL_BUTTON) { + /* Delete indicator arrow in front of button */ + gfx_mono_spinctrl_draw_button(true, false); + spinners->current_selection + = spinners->number_of_spinners - 1; + /* Draw indicator arrow in front of new spinner */ + gfx_mono_spinctrl_draw_indicator( + spinners->collection_last, + true); + } else if (spinners->current_selection > 0) { + /* Delete indicator arrow */ + gfx_mono_spinctrl_draw_indicator(iterator, + false); + spinners->current_selection--; + /* Draw indicator arrow in front of new spinner */ + gfx_mono_spinctrl_draw_indicator(iterator->prev, + true); + } else { + /* Delete indicator arrow */ + gfx_mono_spinctrl_draw_indicator(iterator, + false); + spinners->current_selection + = GFX_MONO_SPINCTRL_BUTTON; + /* Draw indicator arrow in front of button */ + gfx_mono_spinctrl_draw_button(true, true); + } + + return GFX_MONO_SPINCTRL_EVENT_IDLE; + + case GFX_MONO_SPINCTRL_KEYCODE_ENTER: + if (spinners->current_selection == + GFX_MONO_SPINCTRL_BUTTON) { + /* Finished with all selections, return */ + return GFX_MONO_SPINCTRL_EVENT_FINISH; + } else { + /* Spinner selected, send next keycode directly + * to spinner */ + gfx_mono_spinctrl_process_key(iterator, + keycode); + spinners->active_spinner = true; + return GFX_MONO_SPINCTRL_EVENT_IDLE; + } + + case GFX_MONO_SPINCTRL_KEYCODE_BACK: + /* User pressed "back" key, */ + return GFX_MONO_SPINCTRL_EVENT_BACK; + + default: + /* Unknown key event */ + return GFX_MONO_SPINCTRL_EVENT_IDLE; + } + } +} diff --git a/AVR Code/USB_BULK_TEST/src/ASF/common/services/gfx_mono/gfx_mono_spinctrl.h b/AVR Code/USB_BULK_TEST/src/ASF/common/services/gfx_mono/gfx_mono_spinctrl.h new file mode 100644 index 00000000..98ec70ee --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/common/services/gfx_mono/gfx_mono_spinctrl.h @@ -0,0 +1,243 @@ +/** + * \file + * + * \brief Spin control widget + * + * Copyright (c) 2011-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ +#ifndef GFX_MONO_SPINCTRL_H +#define GFX_MONO_SPINCTRL_H + +#include "gfx_mono.h" +#include "conf_spinctrl.h" + +/** + * \ingroup gfx_mono + * \defgroup gfx_mono_spinctrl Spinner widget for monochrome graphical displays + * + * This module provides a spinner widget system for monochrome graphical + * displays. + * + * There is support for having one single spinner on the screen, or a + * collection of spinners. + * + * Typical flow of an application using the spincollection system: + * + * 1) Define spinners.\n + * 2) Initialize each spinners with \ref gfx_mono_spinctrl_init.\n + * 3) Define a spincollection struct and initialize it with + * \ref gfx_mono_spinctrl_spincollection_init.\n + * 4) Add spinners to spincollection with + * \ref gfx_mono_spinctrl_spincollection_add_spinner.\n + * 5) Draw spincollection to screen with + * \ref gfx_mono_spinctrl_spincollection_show.\n + * 6) Define a result array to store the spinner choices.\n + * 7) Update spinners and result array with user input using function + * \ref gfx_mono_spinctrl_spincollection_process_key.\n + * 8) Interpret \ref gfx_mono_spinctrl_spincollection_process_key return + * value.\n + * 9) Go to 7.\n + * + * Typical flow of an application using a single spinner: + * + * 1) Define spinner.\n + * 2) Initialize the spinners with \ref gfx_mono_spinctrl_init with preferred y + * position on screen.\n + * 3) Draw spinner to screen with \ref gfx_mono_spinctrl_draw.\n + * 4) Update spinner with user input using function + * \ref gfx_mono_spinctrl_process_key.\n + * 5) Interpret \ref gfx_mono_spinctrl_process_key return value.\n + * 6) Go to 4.\n + * + * Before the spinners can be updated, you need input from the user. Methods + * for getting input is not part of the spinner widget. + * + * \note The spinners will be linked together when added to a spincollection, + * and can therefore not be used in two spincollections at the same time. + * + * As soon as input is received, inform the spincollection system or the single + * spinner using the \ref gfx_mono_spinctrl_spincollection_process_key function + * or the \ref gfx_mono_spinctrl_process_key function. + * These functions will then return a status code and act depending on the + * given keycode: + * + * GFX_MONO_SPINCTRL_KEYCODE_DOWN : Change selection to next spinner value or + * to next spinner or OK button in a spincollection. + * + * GFX_MONO_SPINCTRL_KEYCODE_UP : Change selection to previous spinner value + * or to previous spinner or OK button in a spincollection. + * + * GFX_MONO_SPINCTRL_KEYCODE_ENTER : Select spinner value or select spinner or + * OK button in a spincollection. + * + * GFX_MONO_SPINCTRL_KEYCODE_BACK : Deselect spinner or cancel spincollection + * application. + * + * The value of the keycodes used are defined in conf_spinctrl.h. These values + * can be changed if needed. + * + * The graphical indicators used to indicate spinner selections are defined in + * conf_spinctrl.h. These indicators can be changed if needed. + * @{ + */ + +/** Spinner idle event */ +#define GFX_MONO_SPINCTRL_EVENT_IDLE 0xFF +/** Spinner back button pressed event */ +#define GFX_MONO_SPINCTRL_EVENT_BACK 0xFE +/** Spinner ok button pressed event */ +#define GFX_MONO_SPINCTRL_EVENT_FINISH 0xFD + +/** OK button */ +#define GFX_MONO_SPINCTRL_BUTTON 0xFF + +/** Maximum number of spinner elements on display */ +#define GFX_MONO_SPINCTRL_ELEMENTS_PER_SCREEN \ + ((GFX_MONO_LCD_HEIGHT / SYSFONT_LINESPACING) - 1) + +/** + * Maximum numbers of spinner elements in a spincollection - limited to + * one screen. + */ +#define GFX_MONO_SPINCTRL_MAX_ELEMENTS_IN_SPINCOLLECTION \ + GFX_MONO_SPINCTRL_ELEMENTS_PER_SCREEN + +/** Width of string spinner choices */ +#define GFX_MONO_SPINCTRL_STRING_SPINNER_WIDTH 9 +/** Width of integer spinner choices */ +#define GFX_MONO_SPINCTRL_INT_SPINNER_WIDTH 9 + +/** Enum to specify what kind of data spinner should spin */ +typedef enum gfx_mono_spinctrl_type_enum { + SPINTYPE_STRING, + SPINTYPE_INTEGER +} gfx_mono_spinctrl_type_t; + +/** String struct */ +struct gfx_mono_spinctrl_string { + /** Pointer to progmem strings to spin through + * \note Each string must be shorter than + * \ref GFX_MONO_SPINCTRL_STRING_SPINNER_WIDTH characters. + * If not, printing it to the screen will corrupt the spinner + * appearance. + */ + PROGMEM_STRING_T *data; + /** Index in string array */ + uint8_t index; +}; + +/** Spin control struct */ +struct gfx_mono_spinctrl { + /** Spinner title */ + PROGMEM_STRING_T title; + /** Type of data to spin */ + gfx_mono_spinctrl_type_t datatype; + /** Spinner data, depends on spinner datatype. */ + union { + /** Spinner strings and index */ + struct gfx_mono_spinctrl_string strings; + /** Spinner integer data */ + int16_t integer_data; + }; + /** Variable to store the last selected spinner value */ + uint16_t last_saved_value; + + /** + * Lower limit for spinning, must be positive and fit in uin8_t for + * spinner type SPINTYPE_STRING + */ + int16_t lower_limit; + + /** + * Upper limit for spinning, must be positive and fit in uin8_t for + * spinner type SPINTYPE_STRING + */ + int16_t upper_limit; + /** Y coordinate for placement of spinner on screen */ + gfx_coord_t y; + /** Boolean to tell if spinner is in focus or not */ + bool in_focus; + /** Pointer to next spinner in a spincollection */ + struct gfx_mono_spinctrl *next; + /** Pointer to previous spinner in a spincollection */ + struct gfx_mono_spinctrl *prev; +}; + +/** Collection of spinners struct */ +struct gfx_mono_spinctrl_spincollection { + /** Pointer to the first spinner in the collection */ + struct gfx_mono_spinctrl *collection; + /** Pointer to the last spinner in the collection */ + struct gfx_mono_spinctrl *collection_last; + /** Number of spinners in collection */ + uint8_t number_of_spinners; + /** Current spinner/button */ + uint8_t current_selection; + /** Return value from selected spinner */ + uint16_t selection; + /** Boolean to tell if input should be sent directly to a spinner */ + bool active_spinner; + /** Boolean to initialize results array when starting key processing */ + bool init; +}; + +void gfx_mono_spinctrl_init(struct gfx_mono_spinctrl *spinner, + gfx_mono_spinctrl_type_t datatype, PROGMEM_STRING_T title, + PROGMEM_STRING_T *data, int16_t lower_limit, + int16_t upper_limit, + gfx_coord_t y); +void gfx_mono_spinctrl_draw(struct gfx_mono_spinctrl *spinner, bool redraw); +void gfx_mono_spinctrl_spincollection_init(struct + gfx_mono_spinctrl_spincollection *collection); +void gfx_mono_spinctrl_spincollection_add_spinner(struct gfx_mono_spinctrl + *spinner, struct gfx_mono_spinctrl_spincollection *spinners); +void gfx_mono_spinctrl_spincollection_show(struct + gfx_mono_spinctrl_spincollection *spinners); +int16_t gfx_mono_spinctrl_process_key(struct gfx_mono_spinctrl *spinner, + uint8_t keycode); + +int16_t gfx_mono_spinctrl_spincollection_process_key(struct +gfx_mono_spinctrl_spincollection *spinners, uint8_t keycode, +int16_t results[]); + +/** @} */ + +#endif /* GFX_MONO_SPINCTRL_H */ diff --git a/AVR Code/USB_BULK_TEST/src/ASF/common/services/gfx_mono/gfx_mono_text.c b/AVR Code/USB_BULK_TEST/src/ASF/common/services/gfx_mono/gfx_mono_text.c new file mode 100644 index 00000000..1412c5ef --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/common/services/gfx_mono/gfx_mono_text.c @@ -0,0 +1,428 @@ +/** + * \file + * + * \brief Font and text drawing routines + * + * Copyright (c) 2010-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ +#include "stddef.h" +#include "assert.h" +#ifdef CONFIG_HUGEMEM +# include "hugemem.h" +#endif +#include "progmem.h" + +#include "gfx_mono.h" +#include "gfx_mono_text.h" + +#ifndef CONFIG_FONT_PIXELS_PER_BYTE +# define CONFIG_FONT_PIXELS_PER_BYTE 8 +#endif + +#define EXTMEM_BUF_SIZE 20 + +#if defined(CONFIG_HUGEMEM) || defined(__DOXYGEN__) + +/** + * \internal + * \brief Helper function that draws a character from a font in hugemem + * to the display + * + * This function will first calculate the start offset in the font character + * data before iterating over the specific character data. + * + * Only pixels in the character that should be enabled are done so, the caller + * is required to prepare the drawing area before printing a character to it. + * This is done by the gfx_mono_draw_string() and + * gfx_mono_draw_progmem_string() functions. + * + * \param ch Character to be drawn + * \param x X coordinate on screen. + * \param y Y coordinate on screen. + * \param font Font to draw character in + */ +static void gfx_mono_draw_char_hugemem(const char ch, const gfx_coord_t x, + const gfx_coord_t y, const struct font *font) +{ + uint8_t i; + uint8_t char_row_size; + uint8_t glyph_size; + uint16_t glyph_data_offset; + uint8_t char_buff[EXTMEM_BUF_SIZE]; + uint8_t buffer_pos; + uint8_t rows_left; + + /* Sanity check on parameters, assert if font is NULL. */ + Assert(font != NULL); + + gfx_coord_t inc_x = x; + gfx_coord_t inc_y = y; + + char_row_size = font->width / CONFIG_FONT_PIXELS_PER_BYTE; + if (font->width % CONFIG_FONT_PIXELS_PER_BYTE) { + char_row_size++; + } + + glyph_size = char_row_size * font->height; + glyph_data_offset = glyph_size * ((uint8_t)ch - font->first_char); + buffer_pos = EXTMEM_BUF_SIZE; + rows_left = font->height; + + do { + static uint8_t glyph_byte = 0; + uint8_t pixelsToDraw = font->width; + + for (i = 0; i < pixelsToDraw; i++) { + if (i % CONFIG_FONT_PIXELS_PER_BYTE == 0) { + /* Read another byte from hugemem */ + if (buffer_pos >= EXTMEM_BUF_SIZE) { + hugemem_ptr_t source + = font->data.hugemem; + source = (hugemem_ptr_t) + ((uint32_t)source + + glyph_data_offset); + + hugemem_read_block(char_buff, source, + EXTMEM_BUF_SIZE); + + glyph_data_offset += EXTMEM_BUF_SIZE; + buffer_pos = 0; + } + + glyph_byte = char_buff[buffer_pos]; + buffer_pos++; + } + + /* Draw bit of glyph to screen */ + if ((glyph_byte & 0x80)) { + gfx_mono_draw_pixel(inc_x, inc_y, + GFX_PIXEL_SET); + } + + inc_x += 1; + glyph_byte <<= 1; + } + + inc_y += 1; + inc_x = x; + } while (--rows_left > 0); +} + +#endif + +/** + * \internal + * \brief Helper function that draws a character from a font in progmem + * to the display + * + * This function will first calculate the start offset in the font character + * data before iterating over the specific character data. + * + * Only pixels in the character that should be enabled are done so, the caller + * is required to prepare the drawing area before printing a character to it. + * This is done by the gfx_mono_draw_string() and + * gfx_mono_draw_progmem_string() functions. + * + * \param ch Character to be drawn + * \param x X coordinate on screen. + * \param y Y coordinate on screen. + * \param font Font to draw character in + */ +static void gfx_mono_draw_char_progmem(const char ch, const gfx_coord_t x, + const gfx_coord_t y, const struct font *font) +{ + uint8_t PROGMEM_PTR_T glyph_data; + uint16_t glyph_data_offset; + uint8_t char_row_size; + uint8_t rows_left; + uint8_t i; + + /* Sanity check on parameters, assert if font is NULL. */ + Assert(font != NULL); + + gfx_coord_t inc_x = x; + gfx_coord_t inc_y = y; + + char_row_size = font->width / CONFIG_FONT_PIXELS_PER_BYTE; + if (font->width % CONFIG_FONT_PIXELS_PER_BYTE) { + char_row_size++; + } + + glyph_data_offset = char_row_size * font->height * + ((uint8_t)ch - font->first_char); + glyph_data = font->data.progmem + glyph_data_offset; + rows_left = font->height; + + do { + uint8_t glyph_byte = 0; + uint8_t pixelsToDraw = font->width; + + for (i = 0; i < pixelsToDraw; i++) { + if (i % CONFIG_FONT_PIXELS_PER_BYTE == 0) { + glyph_byte = PROGMEM_READ_BYTE(glyph_data); + glyph_data++; + } + + if ((glyph_byte & 0x80)) { + gfx_mono_draw_pixel(inc_x, inc_y, + GFX_PIXEL_SET); + } + + inc_x += 1; + glyph_byte <<= 1; + } + + inc_y += 1; + inc_x = x; + rows_left--; + } while (rows_left > 0); +} + +/** + * \brief Draws a character to the display + * + * \param c Character to be drawn + * \param x X coordinate on screen. + * \param y Y coordinate on screen. + * \param font Font to draw character in + */ +void gfx_mono_draw_char(const char c, const gfx_coord_t x, const gfx_coord_t y, + const struct font *font) +{ + gfx_mono_draw_filled_rect(x, y, font->width, font->height, + GFX_PIXEL_CLR); + + switch (font->type) { + case FONT_LOC_PROGMEM: + gfx_mono_draw_char_progmem(c, x, y, font); + break; + +#ifdef CONFIG_HUGEMEM + case FONT_LOC_HUGEMEM: + gfx_mono_draw_char_hugemem(c, x, y, font); + break; + +#endif + default: + /* Unsupported mode, call assert */ + Assert(false); + break; + } +} + +/** + * \brief Draws a string to the display + * + * This function will draw a string located in memory to the display. + * + * \param str Pointer to string + * \param x X coordinate on screen. + * \param y Y coordinate on screen. + * \param font Font to draw string in + */ +void gfx_mono_draw_string(const char *str, gfx_coord_t x, gfx_coord_t y, + const struct font *font) +{ + /* Save X in order to know where to return to on CR. */ + const gfx_coord_t start_of_string_position_x = x; + + /* Sanity check on parameters, assert if str or font is NULL. */ + Assert(str != NULL); + Assert(font != NULL); + + /* Draw characters until trailing null byte */ + do { + /* Handle '\n' as newline, draw normal characters. */ + if (*str == '\n') { + x = start_of_string_position_x; + y += font->height + 1; + } else if (*str == '\r') { + /* Skip '\r' characters. */ + } else { + gfx_mono_draw_char(*str, x, y, font); + x += font->width; + } + } while (*(++str)); +} + +/** + * \brief Draws a string located in program memory to the display + * + * This function will draw a string located in program memory to the display, + * this differs from gfx_mono_draw_string() by using constant string data from + * the program memory instead of string data in RAM. + * + * Using program memory for constant strings will reduce the applications need + * for RAM, and thus lower the overall size footprint. + * + * \param str Pointer to string located in program memory + * \param x X coordinate on screen. + * \param y Y coordinate on screen. + * \param font Font to draw string in + */ +void gfx_mono_draw_progmem_string(char PROGMEM_PTR_T str, gfx_coord_t x, + gfx_coord_t y, const struct font *font) +{ + char temp_char; + + /* Sanity check on parameters, assert if str or font is NULL. */ + Assert(str != NULL); + Assert(font != NULL); + + /* Save X in order to know where to return to on CR. */ + const gfx_coord_t start_of_string_position_x = x; + + /* Draw characters until trailing null byte */ + temp_char = PROGMEM_READ_BYTE((uint8_t PROGMEM_PTR_T)str); + + while (temp_char) { + /* Handle '\n' as newline, draw normal characters. */ + if (temp_char == '\n') { + x = start_of_string_position_x; + y += font->height + 1; + } else if (temp_char == '\r') { + /* Skip '\r' characters. */ + } else { + gfx_mono_draw_char(temp_char, x, y, font); + x += font->width; + } + + temp_char = PROGMEM_READ_BYTE((uint8_t PROGMEM_PTR_T)(++str)); + } +} + +/** + * \brief Computes the bounding box of a string + * + * \note If string is empty the returned width will be 1 pixel and the height + * equal to the font height. + * + * \param str String to calculate bounding box for + * \param font Font used + * \param width Pointer to width result + * \param height Pointer to height result + */ +void gfx_mono_get_string_bounding_box(const char *str, const struct font *font, + gfx_coord_t *width, gfx_coord_t *height) +{ + gfx_coord_t font_width = font->width; + gfx_coord_t font_height = font->height; + + gfx_coord_t max_width = 1; + gfx_coord_t max_height = font_height; + gfx_coord_t x = 0; + + /* Sanity check on parameters, assert if str or font is NULL. */ + Assert(str != NULL); + Assert(font != NULL); + + /* Handle each character until trailing null byte */ + do { + /* Handle '\n' as newline, draw normal characters. */ + if (*str == '\n') { + x = 0; + max_height += font_height; + } else if (*str == '\r') { + /* Skip '\r' characters. */ + } else { + x += font_width; + if (x > max_width) { + max_width = x; + } + } + } while (*(++str)); + + /* Return values through references */ + *width = max_width; + *height = max_height; +} + +/** + * \brief Computes the bounding box of a string located in program memory + * + * \note If string is empty the returned width will be 1 pixel and the height + * equal to the font height. + * + * \param str String in program memory to calculate bounding box for + * \param font Font used + * \param width Pointer to width result + * \param height Pointer to height result + */ +void gfx_mono_get_progmem_string_bounding_box(char PROGMEM_PTR_T str, + const struct font *font, gfx_coord_t *width, + gfx_coord_t *height) +{ + gfx_coord_t font_width = font->width; + gfx_coord_t font_height = font->height; + + char temp_char; + gfx_coord_t max_width = 1; + gfx_coord_t max_height = font_height; + gfx_coord_t x = 0; + + /* Sanity check on parameters, assert if str or font is NULL. */ + Assert(str != NULL); + Assert(font != NULL); + + /* Handle each character until trailing null byte */ + temp_char = PROGMEM_READ_BYTE((uint8_t PROGMEM_PTR_T)str); + + while (temp_char) { + /* Handle '\n' as newline, draw normal characters. */ + if (temp_char == '\n') { + x = 0; + max_height += font_height; + } else if (*str == '\r') { + /* Skip '\r' characters. */ + } else { + x += font_width; + if (x > max_width) { + max_width = x; + } + } + + temp_char = PROGMEM_READ_BYTE((uint8_t PROGMEM_PTR_T)(++str)); + } + + /* Return values through references */ + *width = max_width; + *height = max_height; +} diff --git a/AVR Code/USB_BULK_TEST/src/ASF/common/services/gfx_mono/gfx_mono_text.h b/AVR Code/USB_BULK_TEST/src/ASF/common/services/gfx_mono/gfx_mono_text.h new file mode 100644 index 00000000..ecbe790c --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/common/services/gfx_mono/gfx_mono_text.h @@ -0,0 +1,131 @@ +/** + * \file + * + * \brief Monochrome graphic library API header file + * + * Copyright (c) 2011-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ +#ifndef GFX_MONO_TEXT_H_INCLUDED +#define GFX_MONO_TEXT_H_INCLUDED + +#include + +#include "compiler.h" +#include "progmem.h" +#ifdef CONFIG_HAVE_HUGEMEM +# include "hugemem.h" +#endif + +/** + * \ingroup gfx_mono + * \defgroup gfx_mono_font Font support + * This modules provides functionality for outputting a monochrome font + * to a display. + * + * @{ + */ + +/** + * \brief Valid storage locations for font data + * + * \todo Add support for fonts in regular ram + */ +enum font_data_type { + /** Font data stored in program/flash memory. */ + FONT_LOC_PROGMEM, +#ifdef CONFIG_HAVE_HUGEMEM + /** Font data stored in HUGEMEM. */ + FONT_LOC_HUGEMEM, +#endif +}; + +/** Storage structure for font meta data. */ +struct font { + /** Type of storage used for binary font data. See \ref font_data_type. */ + enum font_data_type type; + union { + /** + * Pointer to where the binary font data is stored. This + * variable is accessed either through hugemem or progmem + * depending on the value of \a type. + */ +#ifdef CONFIG_HAVE_HUGEMEM + hugemem_ptr_t hugemem; +#endif + uint8_t PROGMEM_PTR_T progmem; + } data; + /** Width of one font character, in pixels. */ + uint8_t width; + /** Height of one font character, in pixels. */ + uint8_t height; + /** ASCII value of first character in font set. */ + uint8_t first_char; + /** ASCII value of last character in the set. */ + uint8_t last_char; +}; + +/** \name Strings and characters located in RAM */ +/** @{ */ +void gfx_mono_draw_char(const char c, const gfx_coord_t x, const gfx_coord_t y, + const struct font *font); + +void gfx_mono_draw_string(const char *str, const gfx_coord_t x, + const gfx_coord_t y, const struct font *font); + +void gfx_mono_get_string_bounding_box(char const *str, const struct font *font, + gfx_coord_t *width, gfx_coord_t *height); + +/** @} */ + +/** \name Strings located in flash */ +/** @{ */ +void gfx_mono_draw_progmem_string(char PROGMEM_PTR_T str, gfx_coord_t x, + gfx_coord_t y, const struct font *font); + +void gfx_mono_get_progmem_string_bounding_box(char PROGMEM_PTR_T str, + const struct font *font, gfx_coord_t *width, + gfx_coord_t *height); + +/** @} */ + +/** @} */ + +#endif /* GFX_MONO_TEXT_H_INCLUDED */ diff --git a/AVR Code/USB_BULK_TEST/src/ASF/common/services/gfx_mono/sysfont.c b/AVR Code/USB_BULK_TEST/src/ASF/common/services/gfx_mono/sysfont.c new file mode 100644 index 00000000..cd0d0275 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/common/services/gfx_mono/sysfont.c @@ -0,0 +1,75 @@ +/** + * \file + * + * \brief Graphical font support + * + * Copyright (c) 2009-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ +#include +#include +#include +#include + +#include "conf_sysfont.h" + +#include "gfx_mono.h" +#include "sysfont.h" + +// Use macro from conf_sysfont.h to define font glyph data. +SYSFONT_DEFINE_GLYPHS; + +/** + * \brief Initialize a basic system font + * + * This initializes a basic system font globally usable by the application. + */ +struct font sysfont = { + .type = FONT_LOC_PROGMEM, + .width = SYSFONT_WIDTH, + .height = SYSFONT_HEIGHT, + .first_char = SYSFONT_FIRSTCHAR, + .last_char = SYSFONT_LASTCHAR, + .data = { + .progmem = sysfont_glyphs, + }, +}; + +/** @} */ diff --git a/AVR Code/USB_BULK_TEST/src/ASF/common/services/gfx_mono/sysfont.h b/AVR Code/USB_BULK_TEST/src/ASF/common/services/gfx_mono/sysfont.h new file mode 100644 index 00000000..8e57567b --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/common/services/gfx_mono/sysfont.h @@ -0,0 +1,70 @@ +/** + * \file + * + * \brief Graphical System Font system + * + * Copyright (c) 2009-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ + +#ifndef SYSFONT_H_INCLUDED +#define SYSFONT_H_INCLUDED + +#include "conf_sysfont.h" +#include "gfx_mono.h" +#include "gfx_mono_text.h" + +/** + * \ingroup gfx_mono_font + * \defgroup gfx_mono_sysfont System font + * + * The system font objects are globally available for a graphical application. + * System fonts are by design read only, hence there are not any functions to + * change them during runtime. If the application needs additional fonts it + * should add additional font objects. + * + * @{ + */ + +extern struct font sysfont; + +/** @} */ + +#endif /* SYSFONT_H_INCLUDED */ diff --git a/AVR Code/USB_BULK_TEST/src/ASF/common/services/gfx_mono/tools/bitmap.py b/AVR Code/USB_BULK_TEST/src/ASF/common/services/gfx_mono/tools/bitmap.py new file mode 100644 index 00000000..fcddb9ca --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/common/services/gfx_mono/tools/bitmap.py @@ -0,0 +1,58 @@ +## +# \file +# +# \brief Output a 2 color bitmap as an uint8_t array +# +# Copyright (C) 2011-2014 Atmel Corporation. All rights reserved. +# +# \page License +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# +# 2. 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. +# +# 3. The name of Atmel may not be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# 4. This software may only be redistributed and used in connection with an +# Atmel microcontroller product. +# +# THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED +# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE +# EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + +from PIL import Image +import sys + +im = Image.open(sys.argv[1]); +new_im = im.load() + +width, height = im.size + +for y in range(0, height) : + for x in range(0, width) : + if 0 < new_im[x, y]: + new_im[x, y] = 1 + sys.stdout.write(str(new_im[x, y])) + sys.stdout.write("\n") + +sys.stdout.write("\n uint8_t image_header[] = {\n") +for y in range(0, height, 8) : + for x in range(0, width) : + first_byte = str(new_im[x, y + 7]) + str(new_im[x, y+6]) + str(new_im[x, y+5]) + str(new_im[x, y+4]) + str(new_im[x, y+3]) + str(new_im[x, y+2]) + str(new_im[x, y+1]) + str(new_im[x, y+0]) + print "0x%x," % int(first_byte, 2), + +sys.stdout.write("};\n") diff --git a/AVR Code/USB_BULK_TEST/src/ASF/common/services/gfx_mono/tools/dump_display_over_serial.py b/AVR Code/USB_BULK_TEST/src/ASF/common/services/gfx_mono/tools/dump_display_over_serial.py new file mode 100644 index 00000000..5b532420 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/common/services/gfx_mono/tools/dump_display_over_serial.py @@ -0,0 +1,133 @@ +## +# \file +# +# \brief Convert display data on a serial line to a graphical representation +# +# Copyright (C) 2011-2014 Atmel Corporation. All rights reserved. +# +# \page License +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# +# 2. 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. +# +# 3. The name of Atmel may not be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# 4. This software may only be redistributed and used in connection with an +# Atmel microcontroller product. +# +# THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED +# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE +# EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. +import sys +import serial +import os.path +import argparse + +def scan_for_ports(): + available_ports = [] + + for index in range(64): + try: + serial_port = serial.Serial(index) + available_ports.append((index, serial_port.portstr)) + serial_port.close() + except serial.SerialException: + pass + except IndexError as Error: + pass + + for port_number, port_name in available_ports: + print "%02d - %s" % (port_number, port_name) + + return available_ports + +def dump_display_data(serial_port, baud_rate, output_file_name): + try: + output_file = open(output_file_name, 'w') + port = serial.Serial(port = serial_port, + baudrate = baud_rate, timeout = 1) + port.close() + port.open() + except ValueError as e: + print "error: invalid serial port parameters. %s" % (str(e)) + output_file.close() + return -1 + except serial.SerialException as e: + print "error: could not open serial port. %s" % (str(e)) + output_file.close() + return -1 + except IOError as e: + print "error: could not open output file. %s" % (str(e)) + return -1 + + print "Display on %s: %u,8,N,1" % (port.name, port.baudrate) + port.write("D") + line = port.readline() + display_data = "" + while(line[:2] != "};") : + display_data = display_data + line[:-1] + line = port.readline() + display_data = display_data + line + port.close() + + print "Writing data to file %s" % (output_file_name) + output_file.write(display_data) + + output_file.close() + +def main(): + parser = argparse.ArgumentParser(description="This script will try to " + "open the given serial port, send a string to " + "instruct the target device to dump the contents of " + "the display to a serial link in XPM format. The " + "received file is then written to 'display.xpm', " + "unless a file is specified by the -o option.") + parser.add_argument("-p", "--port", dest="serial_port", + help="which serial port to open") + parser.add_argument("-b", "--baud", dest="baudrate", type=int, + help="baud rate to use for serial communication", + default=19200) + parser.add_argument("-o", "--output", dest="output_file", + help="write XPM image to FILE. Default is display.xpm.", + metavar="FILE", default="display.xpm") + parser.add_argument("-s", "--scan", action="store_true", + dest="scan_ports", + help="scan for available serial ports and exit", + default=False) + + arguments = parser.parse_args() + + if arguments.scan_ports: + scan_for_ports() + sys.exit() + + if arguments.serial_port is None: + parser.print_usage() + sys.exit() + + if os.path.exists(arguments.output_file): + print "Warning: output file '%s' already exists" % (arguments.output_file) + print "Do you want to write over file '%s'?" % (arguments.output_file) + answer = raw_input("[yes/NO] ") + if answer not in ("yes", "Yes", "YES"): + sys.exit() + + dump_display_data(arguments.serial_port, arguments.baudrate, arguments.output_file) + +if __name__ == "__main__": + main() diff --git a/AVR Code/USB_BULK_TEST/src/ASF/common/services/gfx_mono/tools/readme.txt b/AVR Code/USB_BULK_TEST/src/ASF/common/services/gfx_mono/tools/readme.txt new file mode 100644 index 00000000..ebe2b166 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/common/services/gfx_mono/tools/readme.txt @@ -0,0 +1,6 @@ + +dump_display_over_serial.py + Convert display data on a serial line to a .XPM file + +bitmap.py + Convert an indexed 2 color bitmap to an uint8_t array diff --git a/AVR Code/USB_BULK_TEST/src/ASF/common/services/gpio/gpio.h b/AVR Code/USB_BULK_TEST/src/ASF/common/services/gpio/gpio.h new file mode 100644 index 00000000..2b261aad --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/common/services/gpio/gpio.h @@ -0,0 +1,86 @@ +/** + * \file + * + * \brief Common GPIO API. + * + * Copyright (c) 2010-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ +#ifndef _GPIO_H_ +#define _GPIO_H_ + +#include + +#if (SAM3S || SAM3U || SAM3N || SAM3XA || SAM4S || SAM4E || SAM4N || SAM4C || SAMG || SAM4CP || SAM4CM) +# include "sam_gpio/sam_gpio.h" +#elif XMEGA +# include "xmega_gpio/xmega_gpio.h" +#elif MEGA || MEGA_RF +# include "mega_gpio/mega_gpio.h" +#else +# error Unsupported chip type +#endif + +/** + * \defgroup gpio_group General Purpose Input/Output + * + * This is the common API for GPIO. Additional features are available + * in the documentation of the specific modules. + * + * \section io_group_platform Platform Dependencies + * + * The following functions are available on all platforms, but there may + * be variations in the function signature (i.e. parameters) and + * behaviour. These functions are typically called by platform-specific + * parts of drivers, and applications that aren't intended to be + * portable: + * - gpio_pin_is_low() + * - gpio_pin_is_high() + * - gpio_set_pin_high() + * - gpio_set_pin_group_high() + * - gpio_set_pin_low() + * - gpio_set_pin_group_low() + * - gpio_toggle_pin() + * - gpio_toggle_pin_group() + * - gpio_configure_pin() + * - gpio_configure_group() + */ + +#endif /* _GPIO_H_ */ diff --git a/AVR Code/USB_BULK_TEST/src/ASF/common/services/gpio/xmega_gpio/xmega_gpio.h b/AVR Code/USB_BULK_TEST/src/ASF/common/services/gpio/xmega_gpio/xmega_gpio.h new file mode 100644 index 00000000..110d9c36 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/common/services/gpio/xmega_gpio/xmega_gpio.h @@ -0,0 +1,83 @@ +/** + * \file + * + * \brief Common gpio data/structure for all AVR XMEGA implementations. + * + * Copyright (c) 2010-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ + +#ifndef _XMEGA_GPIO_H_ +#define _XMEGA_GPIO_H_ + +#include "compiler.h" +#include "ioport.h" + +#define gpio_pin_is_low(io_id) \ + ioport_pin_is_low(io_id) + +#define gpio_pin_is_high(io_id) \ + ioport_pin_is_high(io_id) + +#define gpio_set_pin_high(io_id) \ + ioport_set_value(io_id,1) + +#define gpio_set_pin_low(io_id) \ + ioport_set_value(io_id,0) + +#define gpio_toggle_pin(io_id) \ + ioport_toggle_pin(io_id) + +#define gpio_configure_pin(io_id,io_flags) \ + ioport_configure_pin(io_id,io_flags) + +#define gpio_configure_group(port_id,port_mask,io_flags) \ + ioport_configure_group(port_id,port_mask,io_flags) + +#define gpio_set_pin_group_high(port_id,mask) \ + ioport_set_group_high(port_id,mask) + +#define gpio_set_pin_group_low(port_id,mask) \ + ioport_set_group_low(port_id,mask) + +#define gpio_toggle_pin_group(port_id,mask) \ + ioport_tgl_group(port_id,mask) + +#endif // _XMEGA_GPIO_H_ diff --git a/AVR Code/USB_BULK_TEST/src/ASF/common/services/ioport/ioport.h b/AVR Code/USB_BULK_TEST/src/ASF/common/services/ioport/ioport.h new file mode 100644 index 00000000..a0320956 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/common/services/ioport/ioport.h @@ -0,0 +1,541 @@ +/** + * \file + * + * \brief Common IOPORT service main header file for AVR, UC3 and ARM + * architectures. + * + * Copyright (c) 2012-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ +#ifndef IOPORT_H +#define IOPORT_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include + +/** + * \defgroup ioport_group Common IOPORT API + * + * See \ref ioport_quickstart. + * + * This is common IOPORT service for GPIO pin configuration and control in a + * standardized manner across the MEGA, MEGA_RF, XMEGA, UC3 and ARM devices. + * + * Port pin control code is optimized for each platform, and should produce + * both compact and fast execution times when used with constant values. + * + * \section dependencies Dependencies + * This driver depends on the following modules: + * - \ref sysclk_group for clock speed and functions. + * @{ + */ + +/** + * \def IOPORT_CREATE_PIN(port, pin) + * \brief Create IOPORT pin number + * + * Create a IOPORT pin number for use with the IOPORT functions. + * + * \param port IOPORT port (e.g. PORTA, PA or PIOA depending on chosen + * architecture) + * \param pin IOPORT zero-based index of the I/O pin + */ + +/** \brief IOPORT pin directions */ +enum ioport_direction { + IOPORT_DIR_INPUT, /*!< IOPORT input direction */ + IOPORT_DIR_OUTPUT, /*!< IOPORT output direction */ +}; + +/** \brief IOPORT levels */ +enum ioport_value { + IOPORT_PIN_LEVEL_LOW, /*!< IOPORT pin value low */ + IOPORT_PIN_LEVEL_HIGH, /*!< IOPORT pin value high */ +}; + +#if MEGA_RF +/** \brief IOPORT edge sense modes */ +enum ioport_sense { + IOPORT_SENSE_LEVEL, /*!< IOPORT sense low level */ + IOPORT_SENSE_BOTHEDGES, /*!< IOPORT sense both rising and falling edges */ + IOPORT_SENSE_FALLING, /*!< IOPORT sense falling edges */ + IOPORT_SENSE_RISING, /*!< IOPORT sense rising edges */ +}; +#elif SAM && !SAM4L +/** \brief IOPORT edge sense modes */ +enum ioport_sense { + IOPORT_SENSE_BOTHEDGES, /*!< IOPORT sense both rising and falling edges */ + IOPORT_SENSE_FALLING, /*!< IOPORT sense falling edges */ + IOPORT_SENSE_RISING, /*!< IOPORT sense rising edges */ + IOPORT_SENSE_LEVEL_LOW, /*!< IOPORT sense low level */ + IOPORT_SENSE_LEVEL_HIGH,/*!< IOPORT sense High level */ +}; +#else +enum ioport_sense { + IOPORT_SENSE_BOTHEDGES, /*!< IOPORT sense both rising and falling edges */ + IOPORT_SENSE_RISING, /*!< IOPORT sense rising edges */ + IOPORT_SENSE_FALLING, /*!< IOPORT sense falling edges */ +}; +#endif + + +#if XMEGA +# include "xmega/ioport.h" +# if defined(IOPORT_XMEGA_COMPAT) +# include "xmega/ioport_compat.h" +# endif +#elif MEGA +# include "mega/ioport.h" +#elif UC3 +# include "uc3/ioport.h" +#elif SAM +# if SAM4L +# include "sam/ioport_gpio.h" +# elif (SAMD20 | SAMD21) +# include "sam0/ioport.h" +# else +# include "sam/ioport_pio.h" +# endif +#endif + +/** + * \brief Initializes the IOPORT service, ready for use. + * + * This function must be called before using any other functions in the IOPORT + * service. + */ +static inline void ioport_init(void) +{ + arch_ioport_init(); +} + +/** + * \brief Enable an IOPORT pin, based on a pin created with \ref + * IOPORT_CREATE_PIN(). + * + * \param pin IOPORT pin to enable + */ +static inline void ioport_enable_pin(ioport_pin_t pin) +{ + arch_ioport_enable_pin(pin); +} + +/** + * \brief Enable multiple pins in a single IOPORT port. + * + * \param port IOPORT port to enable + * \param mask Mask of pins within the port to enable + */ +static inline void ioport_enable_port(ioport_port_t port, + ioport_port_mask_t mask) +{ + arch_ioport_enable_port(port, mask); +} + +/** + * \brief Disable IOPORT pin, based on a pin created with \ref + * IOPORT_CREATE_PIN(). + * + * \param pin IOPORT pin to disable + */ +static inline void ioport_disable_pin(ioport_pin_t pin) +{ + arch_ioport_disable_pin(pin); +} + +/** + * \brief Disable multiple pins in a single IOPORT port. + * + * \param port IOPORT port to disable + * \param mask Pin mask of pins to disable + */ +static inline void ioport_disable_port(ioport_port_t port, + ioport_port_mask_t mask) +{ + arch_ioport_disable_port(port, mask); +} + +/** + * \brief Set multiple pin modes in a single IOPORT port, such as pull-up, + * pull-down, etc. configuration. + * + * \param port IOPORT port to configure + * \param mask Pin mask of pins to configure + * \param mode Mode masks to configure for the specified pins (\ref + * ioport_modes) + */ +static inline void ioport_set_port_mode(ioport_port_t port, + ioport_port_mask_t mask, ioport_mode_t mode) +{ + arch_ioport_set_port_mode(port, mask, mode); +} + +/** + * \brief Set pin mode for one single IOPORT pin. + * + * \param pin IOPORT pin to configure + * \param mode Mode masks to configure for the specified pin (\ref ioport_modes) + */ +static inline void ioport_set_pin_mode(ioport_pin_t pin, ioport_mode_t mode) +{ + arch_ioport_set_pin_mode(pin, mode); +} + +/** + * \brief Reset multiple pin modes in a specified IOPORT port to defaults. + * + * \param port IOPORT port to configure + * \param mask Mask of pins whose mode configuration is to be reset + */ +static inline void ioport_reset_port_mode(ioport_port_t port, + ioport_port_mask_t mask) +{ + arch_ioport_set_port_mode(port, mask, 0); +} + +/** + * \brief Reset pin mode configuration for a single IOPORT pin + * + * \param pin IOPORT pin to configure + */ +static inline void ioport_reset_pin_mode(ioport_pin_t pin) +{ + arch_ioport_set_pin_mode(pin, 0); +} + +/** + * \brief Set I/O direction for a group of pins in a single IOPORT. + * + * \param port IOPORT port to configure + * \param mask Pin mask of pins to configure + * \param dir Direction to set for the specified pins (\ref ioport_direction) + */ +static inline void ioport_set_port_dir(ioport_port_t port, + ioport_port_mask_t mask, enum ioport_direction dir) +{ + arch_ioport_set_port_dir(port, mask, dir); +} + +/** + * \brief Set direction for a single IOPORT pin. + * + * \param pin IOPORT pin to configure + * \param dir Direction to set for the specified pin (\ref ioport_direction) + */ +static inline void ioport_set_pin_dir(ioport_pin_t pin, + enum ioport_direction dir) +{ + arch_ioport_set_pin_dir(pin, dir); +} + +/** + * \brief Set an IOPORT pin to a specified logical value. + * + * \param pin IOPORT pin to configure + * \param level Logical value of the pin + */ +static inline void ioport_set_pin_level(ioport_pin_t pin, bool level) +{ + arch_ioport_set_pin_level(pin, level); +} + +/** + * \brief Set a group of IOPORT pins in a single port to a specified logical + * value. + * + * \param port IOPORT port to write to + * \param mask Pin mask of pins to modify + * \param level Level of the pins to be modified + */ +static inline void ioport_set_port_level(ioport_port_t port, + ioport_port_mask_t mask, ioport_port_mask_t level) +{ + arch_ioport_set_port_level(port, mask, level); +} + +/** + * \brief Get current value of an IOPORT pin, which has been configured as an + * input. + * + * \param pin IOPORT pin to read + * \return Current logical value of the specified pin + */ +static inline bool ioport_get_pin_level(ioport_pin_t pin) +{ + return arch_ioport_get_pin_level(pin); +} + +/** + * \brief Get current value of several IOPORT pins in a single port, which have + * been configured as an inputs. + * + * \param port IOPORT port to read + * \param mask Pin mask of pins to read + * \return Logical levels of the specified pins from the read port, returned as + * a mask. + */ +static inline ioport_port_mask_t ioport_get_port_level(ioport_pin_t port, + ioport_port_mask_t mask) +{ + return arch_ioport_get_port_level(port, mask); +} + +/** + * \brief Toggle the value of an IOPORT pin, which has previously configured as + * an output. + * + * \param pin IOPORT pin to toggle + */ +static inline void ioport_toggle_pin_level(ioport_pin_t pin) +{ + arch_ioport_toggle_pin_level(pin); +} + +/** + * \brief Toggle the values of several IOPORT pins located in a single port. + * + * \param port IOPORT port to modify + * \param mask Pin mask of pins to toggle + */ +static inline void ioport_toggle_port_level(ioport_port_t port, + ioport_port_mask_t mask) +{ + arch_ioport_toggle_port_level(port, mask); +} + +/** + * \brief Set the pin sense mode of a single IOPORT pin. + * + * \param pin IOPORT pin to configure + * \param pin_sense Edge to sense for the pin (\ref ioport_sense) + */ +static inline void ioport_set_pin_sense_mode(ioport_pin_t pin, + enum ioport_sense pin_sense) +{ + arch_ioport_set_pin_sense_mode(pin, pin_sense); +} + +/** + * \brief Set the pin sense mode of a multiple IOPORT pins on a single port. + * + * \param port IOPORT port to configure + * \param mask Bitmask if pins whose edge sense is to be configured + * \param pin_sense Edge to sense for the pins (\ref ioport_sense) + */ +static inline void ioport_set_port_sense_mode(ioport_port_t port, + ioport_port_mask_t mask, + enum ioport_sense pin_sense) +{ + arch_ioport_set_port_sense_mode(port, mask, pin_sense); +} + +/** + * \brief Convert a pin ID into a its port ID. + * + * \param pin IOPORT pin ID to convert + * \retval Port ID for the given pin ID + */ +static inline ioport_port_t ioport_pin_to_port_id(ioport_pin_t pin) +{ + return arch_ioport_pin_to_port_id(pin); +} + +/** + * \brief Convert a pin ID into a bitmask mask for the given pin on its port. + * + * \param pin IOPORT pin ID to convert + * \retval Bitmask with a bit set that corresponds to the given pin ID in its port + */ +static inline ioport_port_mask_t ioport_pin_to_mask(ioport_pin_t pin) +{ + return arch_ioport_pin_to_mask(pin); +} + +/** @} */ + +/** + * \page ioport_quickstart Quick start guide for the common IOPORT service + * + * This is the quick start guide for the \ref ioport_group, with + * step-by-step instructions on how to configure and use the service in a + * selection of use cases. + * + * The use cases contain several code fragments. The code fragments in the + * steps for setup can be copied into a custom initialization function, while + * the steps for usage can be copied into, e.g., the main application function. + * + * \section ioport_quickstart_basic Basic use case + * In this use case we will configure one IO pin for button input and one for + * LED control. Then it will read the button state and output it on the LED. + * + * \section ioport_quickstart_basic_setup Setup steps + * + * \subsection ioport_quickstart_basic_setup_code Example code + * \code + #define MY_LED IOPORT_CREATE_PIN(PORTA, 5) + #define MY_BUTTON IOPORT_CREATE_PIN(PORTA, 6) + + ioport_init(); + + ioport_set_pin_dir(MY_LED, IOPORT_DIR_OUTPUT); + ioport_set_pin_dir(MY_BUTTON, IOPORT_DIR_INPUT); + ioport_set_pin_mode(MY_BUTTON, IOPORT_MODE_PULLUP); +\endcode + * + * \subsection ioport_quickstart_basic_setup_flow Workflow + * -# It's useful to give the GPIOs symbolic names and this can be done with + * the \ref IOPORT_CREATE_PIN macro. We define one for a LED and one for a + * button. + * - \code + #define MY_LED IOPORT_CREATE_PIN(PORTA, 5) + #define MY_BUTTON IOPORT_CREATE_PIN(PORTA, 6) +\endcode + * - \note The usefulness of the \ref IOPORT_CREATE_PIN macro and port names + * differ between architectures: + * - MEGA, MEGA_RF and XMEGA: Use \ref IOPORT_CREATE_PIN macro with port definitions + * PORTA, PORTB ... + * - UC3: Most convenient to pick up the device header file pin definition + * and us it directly. E.g.: AVR32_PIN_PB06 + * - SAM: Most convenient to pick up the device header file pin definition + * and us it directly. E.g.: PIO_PA5_IDX
    + * \ref IOPORT_CREATE_PIN can also be used with port definitions + * PIOA, PIOB ... + * -# Initialize the ioport service. This typically enables the IO module if + * needed. + * - \code ioport_init(); \endcode + * -# Set the LED GPIO as output: + * - \code ioport_set_pin_dir(MY_LED, IOPORT_DIR_OUTPUT); \endcode + * -# Set the button GPIO as input: + * - \code ioport_set_pin_dir(MY_BUTTON, IOPORT_DIR_INPUT); \endcode + * -# Enable pull-up for the button GPIO: + * - \code ioport_set_pin_mode(MY_BUTTON, IOPORT_MODE_PULLUP); \endcode + * + * \section ioport_quickstart_basic_usage Usage steps + * + * \subsection ioport_quickstart_basic_usage_code Example code + * \code + bool value; + + value = ioport_get_pin_level(MY_BUTTON); + ioport_set_pin_level(MY_LED, value); +\endcode + * + * \subsection ioport_quickstart_basic_usage_flow Workflow + * -# Define a boolean variable for state storage: + * - \code bool value; \endcode + * -# Read out the button level into variable value: + * - \code value = ioport_get_pin_level(MY_BUTTON); \endcode + * -# Set the LED to read out value from the button: + * - \code ioport_set_pin_level(MY_LED, value); \endcode + * + * \section ioport_quickstart_advanced Advanced use cases + * - \subpage ioport_quickstart_use_case_1 : Port access + */ + +/** + * \page ioport_quickstart_use_case_1 Advanced use case doing port access + * + * In this case we will read out the pins from one whole port and write the + * read value to another port. + * + * \section ioport_quickstart_use_case_1_setup Setup steps + * + * \subsection ioport_quickstart_use_case_1_setup_code Example code + * \code + #define IN_PORT IOPORT_PORTA + #define OUT_PORT IOPORT_PORTB + #define MASK 0x00000060 + + ioport_init(); + + ioport_set_port_dir(IN_PORT, MASK, IOPORT_DIR_INPUT); + ioport_set_port_dir(OUT_PORT, MASK, IOPORT_DIR_OUTPUT); +\endcode + * + * \subsection ioport_quickstart_basic_setup_flow Workflow + * -# It's useful to give the ports symbolic names: + * - \code + #define IN_PORT IOPORT_PORTA + #define OUT_PORT IOPORT_PORTB +\endcode + * - \note The port names differ between architectures: + * - MEGA_RF, MEGA and XMEGA: There are predefined names for ports: IOPORT_PORTA, + * IOPORT_PORTB ... + * - UC3: Use the index value of the different IO blocks: 0, 1 ... + * - SAM: There are predefined names for ports: IOPORT_PIOA, IOPORT_PIOB + * ... + * -# Also useful to define a mask for the bits to work with: + * - \code #define MASK 0x00000060 \endcode + * -# Initialize the ioport service. This typically enables the IO module if + * needed. + * - \code ioport_init(); \endcode + * -# Set one of the ports as input: + * - \code ioport_set_pin_dir(IN_PORT, MASK, IOPORT_DIR_INPUT); \endcode + * -# Set the other port as output: + * - \code ioport_set_pin_dir(OUT_PORT, MASK, IOPORT_DIR_OUTPUT); \endcode + * + * \section ioport_quickstart_basic_usage Usage steps + * + * \subsection ioport_quickstart_basic_usage_code Example code + * \code + ioport_port_mask_t value; + + value = ioport_get_port_level(IN_PORT, MASK); + ioport_set_port_level(OUT_PORT, MASK, value); +\endcode + * + * \subsection ioport_quickstart_basic_usage_flow Workflow + * -# Define a variable for port date storage: + * - \code ioport_port_mask_t value; \endcode + * -# Read out from one port: + * - \code value = ioport_get_port_level(IN_PORT, MASK); \endcode + * -# Put the read data out on the other port: + * - \code ioport_set_port_level(OUT_PORT, MASK, value); \endcode + */ + +#ifdef __cplusplus +} +#endif + +#endif /* IOPORT_H */ diff --git a/AVR Code/USB_BULK_TEST/src/ASF/common/services/ioport/xmega/ioport.h b/AVR Code/USB_BULK_TEST/src/ASF/common/services/ioport/xmega/ioport.h new file mode 100644 index 00000000..00b66e8b --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/common/services/ioport/xmega/ioport.h @@ -0,0 +1,364 @@ +/** + * \file + * + * \brief XMEGA architecture specific IOPORT service implementation header file. + * + * Copyright (c) 2012-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ +#ifndef IOPORT_XMEGA_H +#define IOPORT_XMEGA_H + +#define IOPORT_CREATE_PIN(port, pin) ((IOPORT_ ## port) * 8 + (pin)) +#define IOPORT_BASE_ADDRESS 0x600 +#define IOPORT_PORT_OFFSET 0x20 + +/** \name IOPORT port numbers */ +/** @{ */ +#if !XMEGA_B3 +# define IOPORT_PORTA 0 +#endif + +#define IOPORT_PORTB 1 +#define IOPORT_PORTC 2 +#define IOPORT_PORTD 3 + +#if !XMEGA_B3 +# define IOPORT_PORTE 4 +#endif + +#if XMEGA_A1 || XMEGA_A1U || XMEGA_A3 || XMEGA_A3U || XMEGA_A3B || XMEGA_A3BU || \ + XMEGA_C3 || XMEGA_D3 +# define IOPORT_PORTF 5 +#endif + +#if XMEGA_B1 || XMEGA_B3 +# define IOPORT_PORTG 6 +#endif + +#if XMEGA_A1 || XMEGA_A1U +# define IOPORT_PORTH 7 +# define IOPORT_PORTJ 8 +# define IOPORT_PORTK 9 +#endif + +#if XMEGA_B1 || XMEGA_B3 +# define IOPORT_PORTM 11 +#endif + +#if XMEGA_A1 || XMEGA_A1U +# define IOPORT_PORTQ 14 +#endif + +#define IOPORT_PORTR 15 +/** @} */ + +/** + * \weakgroup ioport_group + * \section ioport_modes IOPORT Modes + * + * For details on these please see the XMEGA Manual. + * + * @{ + */ + +/** \name IOPORT Mode bit definitions */ +/** @{ */ +#define IOPORT_MODE_TOTEM (0x00 << 3) /*!< Totem-pole */ +#define IOPORT_MODE_BUSKEEPER (0x01 << 3) /*!< Buskeeper */ +#define IOPORT_MODE_PULLDOWN (0x02 << 3) /*!< Pull-down */ +#define IOPORT_MODE_PULLUP (0x03 << 3) /*!< Pull-up */ +#define IOPORT_MODE_WIREDOR (0x04 << 3) /*!< Wired OR */ +#define IOPORT_MODE_WIREDAND (0x05 << 3) /*!< Wired AND */ +#define IOPORT_MODE_WIREDORPULL (0x06 << 3) /*!< Wired OR with pull-down */ +#define IOPORT_MODE_WIREDANDPULL (0x07 << 3) /*!< Wired AND with pull-up */ +#define IOPORT_MODE_INVERT_PIN (0x01 << 6) /*!< Invert output and input */ +#define IOPORT_MODE_SLEW_RATE_LIMIT (0x01 << 7) /*!< Slew rate limiting */ +/** @} */ + +/** @} */ + +typedef uint8_t ioport_mode_t; +typedef uint8_t ioport_pin_t; +typedef uint8_t ioport_port_t; +typedef uint8_t ioport_port_mask_t; + +__always_inline static ioport_port_t arch_ioport_pin_to_port_id(ioport_pin_t pin) +{ + return pin >> 3; +} + +__always_inline static PORT_t *arch_ioport_port_to_base(ioport_port_t port) +{ + return (PORT_t *)((uintptr_t)IOPORT_BASE_ADDRESS + + (port * IOPORT_PORT_OFFSET)); +} + +__always_inline static PORT_t *arch_ioport_pin_to_base(ioport_pin_t pin) +{ + return arch_ioport_port_to_base(arch_ioport_pin_to_port_id(pin)); +} + +__always_inline static ioport_port_mask_t arch_ioport_pin_to_mask( + ioport_pin_t pin) +{ + return 1U << (pin & 0x07); +} + +__always_inline static ioport_port_mask_t arch_ioport_pin_to_index( + ioport_pin_t pin) +{ + return (pin & 0x07); +} + +__always_inline static void arch_ioport_init(void) +{ +} + +__always_inline static void arch_ioport_enable_port(ioport_port_t port, + ioport_port_mask_t mask) +{ + PORT_t *base = arch_ioport_port_to_base(port); + volatile uint8_t *pin_ctrl = &base->PIN0CTRL; + + uint8_t flags = cpu_irq_save(); + + for (uint8_t i = 0; i < 8; i++) { + if (mask & arch_ioport_pin_to_mask(i)) { + pin_ctrl[i] &= ~PORT_ISC_gm; + } + } + + cpu_irq_restore(flags); +} + +__always_inline static void arch_ioport_enable_pin(ioport_pin_t pin) +{ + PORT_t *base = arch_ioport_pin_to_base(pin); + volatile uint8_t *pin_ctrl + = (&base->PIN0CTRL + arch_ioport_pin_to_index(pin)); + + uint8_t flags = cpu_irq_save(); + + *pin_ctrl &= ~PORT_ISC_gm; + + cpu_irq_restore(flags); +} + +__always_inline static void arch_ioport_disable_port(ioport_port_t port, + ioport_port_mask_t mask) +{ + PORT_t *base = arch_ioport_port_to_base(port); + volatile uint8_t *pin_ctrl = &base->PIN0CTRL; + + uint8_t flags = cpu_irq_save(); + + for (uint8_t i = 0; i < 8; i++) { + if (mask & arch_ioport_pin_to_mask(i)) { + pin_ctrl[i] |= PORT_ISC_INPUT_DISABLE_gc; + } + } + + cpu_irq_restore(flags); +} + +__always_inline static void arch_ioport_disable_pin(ioport_pin_t pin) +{ + PORT_t *base = arch_ioport_pin_to_base(pin); + volatile uint8_t *pin_ctrl + = (&base->PIN0CTRL + arch_ioport_pin_to_index(pin)); + + uint8_t flags = cpu_irq_save(); + + *pin_ctrl |= PORT_ISC_INPUT_DISABLE_gc; + + cpu_irq_restore(flags); +} + +__always_inline static void arch_ioport_set_port_mode(ioport_port_t port, + ioport_port_mask_t mask, ioport_mode_t mode) +{ + PORT_t *base = arch_ioport_port_to_base(port); + volatile uint8_t *pin_ctrl = &base->PIN0CTRL; + uint8_t new_mode_bits = (mode & ~PORT_ISC_gm); + + uint8_t flags = cpu_irq_save(); + + for (uint8_t i = 0; i < 8; i++) { + if (mask & arch_ioport_pin_to_mask(i)) { + pin_ctrl[i] + = (pin_ctrl[i] & + PORT_ISC_gm) | new_mode_bits; + } + } + + cpu_irq_restore(flags); +} + +__always_inline static void arch_ioport_set_pin_mode(ioport_pin_t pin, + ioport_mode_t mode) +{ + PORT_t *base = arch_ioport_pin_to_base(pin); + volatile uint8_t *pin_ctrl + = (&base->PIN0CTRL + arch_ioport_pin_to_index(pin)); + + uint8_t flags = cpu_irq_save(); + + *pin_ctrl &= PORT_ISC_gm; + *pin_ctrl |= mode; + + cpu_irq_restore(flags); +} + +__always_inline static void arch_ioport_set_port_dir(ioport_port_t port, + ioport_port_mask_t mask, enum ioport_direction dir) +{ + PORT_t *base = arch_ioport_port_to_base(port); + + if (dir == IOPORT_DIR_OUTPUT) { + base->DIRSET = mask; + } else if (dir == IOPORT_DIR_INPUT) { + base->DIRCLR = mask; + } +} + +__always_inline static void arch_ioport_set_pin_dir(ioport_pin_t pin, + enum ioport_direction dir) +{ + PORT_t *base = arch_ioport_pin_to_base(pin); + + if (dir == IOPORT_DIR_OUTPUT) { + base->DIRSET = arch_ioport_pin_to_mask(pin); + } else if (dir == IOPORT_DIR_INPUT) { + base->DIRCLR = arch_ioport_pin_to_mask(pin); + } +} + +__always_inline static void arch_ioport_set_pin_level(ioport_pin_t pin, + bool level) +{ + PORT_t *base = arch_ioport_pin_to_base(pin); + + if (level) { + base->OUTSET = arch_ioport_pin_to_mask(pin); + } else { + base->OUTCLR = arch_ioport_pin_to_mask(pin); + } +} + +__always_inline static void arch_ioport_set_port_level(ioport_port_t port, + ioport_port_mask_t mask, ioport_port_mask_t level) +{ + PORT_t *base = arch_ioport_port_to_base(port); + if (level) { + base->OUTSET |= mask; + base->OUTCLR &= ~mask; + } else { + base->OUTSET &= ~mask; + base->OUTCLR |= mask; + } +} + +__always_inline static bool arch_ioport_get_pin_level(ioport_pin_t pin) +{ + PORT_t *base = arch_ioport_pin_to_base(pin); + + return base->IN & arch_ioport_pin_to_mask(pin); +} + +__always_inline static ioport_port_mask_t arch_ioport_get_port_level( + ioport_port_t port, ioport_port_mask_t mask) +{ + PORT_t *base = arch_ioport_port_to_base(port); + + return base->IN & mask; +} + +__always_inline static void arch_ioport_toggle_pin_level(ioport_pin_t pin) +{ + PORT_t *base = arch_ioport_pin_to_base(pin); + + base->OUTTGL = arch_ioport_pin_to_mask(pin); +} + +__always_inline static void arch_ioport_toggle_port_level(ioport_port_t port, + ioport_port_mask_t mask) +{ + PORT_t *base = arch_ioport_port_to_base(port); + + base->OUTTGL = mask; +} + +__always_inline static void arch_ioport_set_pin_sense_mode(ioport_pin_t pin, + enum ioport_sense pin_sense) +{ + PORT_t *base = arch_ioport_pin_to_base(pin); + volatile uint8_t *pin_ctrl + = (&base->PIN0CTRL + arch_ioport_pin_to_index(pin)); + + uint8_t flags = cpu_irq_save(); + + *pin_ctrl &= ~PORT_ISC_gm; + *pin_ctrl |= (pin_sense & PORT_ISC_gm); + + cpu_irq_restore(flags); +} + +__always_inline static void arch_ioport_set_port_sense_mode(ioport_port_t port, + ioport_port_mask_t mask, enum ioport_sense pin_sense) +{ + PORT_t *base = arch_ioport_port_to_base(port); + volatile uint8_t *pin_ctrl = &base->PIN0CTRL; + uint8_t new_sense_bits = (pin_sense & PORT_ISC_gm); + + uint8_t flags = cpu_irq_save(); + + for (uint8_t i = 0; i < 8; i++) { + if (mask & arch_ioport_pin_to_mask(i)) { + pin_ctrl[i] + = (pin_ctrl[i] & + ~PORT_ISC_gm) | new_sense_bits; + } + } + + cpu_irq_restore(flags); +} + +#endif /* IOPORT_XMEGA_H */ diff --git a/AVR Code/USB_BULK_TEST/src/ASF/common/services/ioport/xmega/ioport_compat.c b/AVR Code/USB_BULK_TEST/src/ASF/common/services/ioport/xmega/ioport_compat.c new file mode 100644 index 00000000..ce47189a --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/common/services/ioport/xmega/ioport_compat.c @@ -0,0 +1,73 @@ +/** + * \file + * + * \brief XMEGA legacy IOPORT software compatibility driver interface. + * + * Copyright (c) 2014-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ +#include "ioport_compat.h" + +#if defined(IOPORT_XMEGA_COMPAT) +void ioport_configure_port_pin(void *port, pin_mask_t pin_mask, + port_pin_flags_t flags) +{ + uint8_t pin; + + for (pin = 0; pin < 8; pin++) { + if (pin_mask & (1 << pin)) { + *((uint8_t *)port + PORT_PIN0CTRL + pin) = flags >> 8; + } + } + /* Select direction and initial pin state */ + if (flags & IOPORT_DIR_OUTPUT) { + if (flags & IOPORT_INIT_HIGH) { + *((uint8_t *)port + PORT_OUTSET) = pin_mask; + } else { + *((uint8_t *)port + PORT_OUTCLR) = pin_mask; + } + + *((uint8_t *)port + PORT_DIRSET) = pin_mask; + } else { + *((uint8_t *)port + PORT_DIRCLR) = pin_mask; + } +} + +#endif diff --git a/AVR Code/USB_BULK_TEST/src/ASF/common/services/ioport/xmega/ioport_compat.h b/AVR Code/USB_BULK_TEST/src/ASF/common/services/ioport/xmega/ioport_compat.h new file mode 100644 index 00000000..aaba63f4 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/common/services/ioport/xmega/ioport_compat.h @@ -0,0 +1,321 @@ +/** + * \file + * + * \brief XMEGA legacy IOPORT software compatibility driver interface header + * file. + * + * Copyright (c) 2014-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ +#ifndef IOPORT_XMEGA_COMPAT_H_ +#define IOPORT_XMEGA_COMPAT_H_ + +#include "../ioport.h" + +/** + * \brief A pin mask + * + * This type is used to describe the port pin mask on the part. + */ +typedef uint8_t pin_mask_t; + +/** + * \brief A PORT pin + * + * This type is used to describe the PORT pins on the part. + */ +typedef uint8_t port_pin_t; + +/** + * \brief Pin configuration flags + * + * This is a bitmask containing configuration flags for the pins that shall be + * configured. + */ +typedef uint16_t port_pin_flags_t; + +/** + * \brief A port id + * + * This type is used to describe the port id on the part (0 is PORTA). + */ +typedef uint8_t port_id_t; + +/** \name Initial Output State Flags */ +/** @{ */ +#define IOPORT_INIT_LOW (0 << 1) /*!< Initial Output State Low */ +#define IOPORT_INIT_HIGH (1 << 1) /*!< Initial Output State High */ +/** @} */ + +/** \name Input/Sense Configuration Flags */ +/** @{ */ +#define IOPORT_BOTHEDGES (0 << 8) /*!< Sense Both Edges */ +#define IOPORT_RISING (1 << 8) /*!< Sense Rising Edge */ +#define IOPORT_FALLING (2 << 8) /*!< Sense Falling Edge */ +#define IOPORT_LEVEL (3 << 8) /*!< Sense Low Level */ +#if XMEGA_E +# define IOPORT_FORCE_ENABLE (6 << 8) /*!< Sense Force Input Enable Low Level */ +#endif +#define IOPORT_INPUT_DISABLE (7 << 8) /*!< Input Buffer Disabled */ +/** @} */ + +/** \name Output and Pull Configuration Flags */ +/** @{ */ +#define IOPORT_TOTEM (0 << 11) /*!< Normal push/pull output */ +#define IOPORT_BUSKEEPER (1 << 11) /*!< Bus Keeper */ +#define IOPORT_PULL_DOWN (2 << 11) /*!< Pull-Down (when input) */ +#define IOPORT_PULL_UP (3 << 11) /*!< Pull-Up (when input) */ +#define IOPORT_WIRED_OR (4 << 11) /*!< Wired OR */ +#define IOPORT_WIRED_AND (5 << 11) /*!< Wired AND */ +#define IOPORT_WIRED_OR_PULL_DOWN (6 << 11) /*!< Wired OR and Pull-Down */ +#define IOPORT_WIRED_AND_PULL_UP (7 << 11) /*!< Wired AND and Pull-Up */ +/** @} */ + +/** \name Inverted I/O Configuration Flags */ +/** @{ */ +#define IOPORT_INV_ENABLED (1 << 14) /*!< I/O is Inverted */ +#define IOPORT_INV_DISABLE (0 << 14) /*!< I/O is Not Inverted */ +/** @} */ + +/** \name Slew Rate Limit Configuration Flags */ +/** @{ */ +#define IOPORT_SRL_ENABLED (1 << 15) /*!< Slew Rate Limit Enabled */ +#define IOPORT_SRL_DISABLED (0 << 15) /*!< Slew Rate Limit Disabled */ +/** @} */ + +/** + * \internal + * \name PORT fields structure offset + * + * These macros are used to compute the field offset number with the PORT_t + * structure. + */ +/** @{ */ +#define PORT_DIR 0x00 /*!< Data Direction */ +#define PORT_DIRSET 0x01 /*!< Data Direction Set */ +#define PORT_DIRCLR 0x02 /*!< Data Direction Clear */ +#define PORT_DIRTGL 0x03 /*!< Data Direction Toggle */ +#define PORT_OUT 0x04 /*!< Data Output Value */ +#define PORT_OUTSET 0x05 /*!< Data Output Value Set */ +#define PORT_OUTCLR 0x06 /*!< Data Output Value Clear */ +#define PORT_OUTTGL 0x07 /*!< Data Output Value Toggle */ +#define PORT_IN 0x08 /*!< Data Input Value */ +#define PORT_INTCTRL 0x09 /*!< Interrupt Control */ +#define PORT_INT0MASK 0x0A /*!< Interrupt 0 Mask */ +#define PORT_INT1MASK 0x0B /*!< Interrupt 1 Mask */ +#define PORT_INTFLAGS 0x0C /*!< Interrupt Flags */ +#define PORT_PIN0CTRL 0x10 /*!< Pin 0 Configuration */ +#define PORT_PIN1CTRL 0x11 /*!< Pin 1 Configuration */ +#define PORT_PIN2CTRL 0x12 /*!< Pin 2 Configuration */ +#define PORT_PIN3CTRL 0x13 /*!< Pin 3 Configuration */ +#define PORT_PIN4CTRL 0x14 /*!< Pin 4 Configuration */ +#define PORT_PIN5CTRL 0x15 /*!< Pin 5 Configuration */ +#define PORT_PIN6CTRL 0x16 /*!< Pin 6 Configuration */ +#define PORT_PIN7CTRL 0x17 /*!< Pin 7 Configuration */ +/** @} */ + +static inline PORT_t *ioport_pin_to_port(port_pin_t pin) +{ + return arch_ioport_pin_to_base(pin); +} + +static inline PORT_t *ioport_id_pin_to_port(port_id_t port) +{ + return arch_ioport_port_to_base(port); +} + +/** + * \brief Configure the IO PORT pin function for a set of pins on a port + * + * \param port Pointer to the port + * \param pin_mask Mask containing the pins that should be configured + * \param flags Bitmask of flags specifying additional configuration + * parameters. + */ +void ioport_configure_port_pin(void *port, pin_mask_t pin_mask, + port_pin_flags_t flags); + +/** + * \brief Select the port function for a single pin + * + * \param pin The pin to configure + * \param flags Bitmask of flags specifying additional configuration + * parameters. + */ +static inline void ioport_configure_pin(port_pin_t pin, port_pin_flags_t flags) +{ + ioport_configure_port_pin(arch_ioport_pin_to_base(pin), + arch_ioport_pin_to_mask(pin), flags); +} + +/** + * \brief Configure a group of I/O pins on a specified port number + * + * \param port The port number + * \param pin_mask The pin mask to configure + * \param flags Bitmask of flags specifying additional configuration + * parameters. + */ +static inline void ioport_configure_group(port_id_t port, pin_mask_t pin_mask, + port_pin_flags_t flags) +{ + ioport_configure_port_pin(arch_ioport_port_to_base(port), pin_mask, flags); +} + +/** + * \brief Drive a PORT pin to a given state + * + * This function will only have an effect if \a pin is configured as + * an output. + * + * \param pin A number identifying the pin to act on. + * \param value The desired state of the pin. \a true means drive the + * pin high (towards Vdd), while \a false means drive the pin low + * (towards Vss). + */ +static inline void ioport_set_value(port_pin_t pin, bool value) +{ + arch_ioport_set_pin_level(pin, value); +} + +/** + * \brief Drive a PORT pin to a low level + * + * This function will only have an effect if \a pin is configured as + * an output. + * + * \param pin A number identifying the pin to act on. + */ +static inline void ioport_set_pin_low(port_pin_t pin) +{ + arch_ioport_set_pin_level(pin, false); +} + +/** + * \brief Drive a PORT pin to a high level + * + * This function will only have an effect if \a pin is configured as + * an output. + * + * \param pin A number identifying the pin to act on. + */ +static inline void ioport_set_pin_high(port_pin_t pin) +{ + arch_ioport_set_pin_level(pin, true); +} + +/** + * \brief Read the current state of a PORT pin + * + * \param pin A number identifying the pin to read. + * \retval true The pin is currently high (close to Vdd) + * \retval false The pin is currently low (close to Vss) + */ +static inline bool ioport_get_value(port_pin_t pin) +{ + return arch_ioport_get_pin_level(pin); +} + +/** + * \brief Read the current state of a PORT pin and test high level + * + * \param pin A number identifying the pin to read. + * \retval true The pin is currently high (close to Vdd) + * \retval false The pin is currently low (close to Vss) + */ +static inline bool ioport_pin_is_high(port_pin_t pin) +{ + return (arch_ioport_get_pin_level(pin) == true); +} + +/** + * \brief Read the current state of a PORT pin and test high level + * + * \param pin A number identifying the pin to read. + * \retval true The pin is currently high (close to Vdd) + * \retval false The pin is currently low (close to Vss) + */ +static inline bool ioport_pin_is_low(port_pin_t pin) +{ + return (arch_ioport_get_pin_level(pin) == false); +} + +/** + * \brief Toggle the current state of a PORT pin + * + * \param pin A number identifying the pin to act on. + */ +static inline void ioport_toggle_pin(port_pin_t pin) +{ + arch_ioport_toggle_pin_level(pin); +} + +/*! \brief Drives a group of I/O pin of a port to high level. + * + * \param port_id The port number. + * \param port_mask The mask. + */ +static inline void ioport_set_group_high(port_id_t port_id, + pin_mask_t port_mask) +{ + arch_ioport_set_port_level(port_id, port_mask, port_mask); +} + +/*! \brief Drives a group of I/O pin of a port to low level. + * + * \param port_id The port number. + * \param port_mask The mask. + */ +static inline void ioport_set_group_low(port_id_t port_id, pin_mask_t port_mask) +{ + arch_ioport_set_port_level(port_id, port_mask, 0); +} + +/*! \brief Toggles a group of I/O pin of a port. + * + * \param port_id The port number. + * \param port_mask The mask. + */ +static inline void ioport_tgl_group(port_id_t port_id, pin_mask_t port_mask) +{ + arch_ioport_toggle_port_level(port_id, port_mask); +} + +#endif /* IOPORT_COMPAT_H_ */ diff --git a/AVR Code/USB_BULK_TEST/src/ASF/common/services/sleepmgr/sleepmgr.h b/AVR Code/USB_BULK_TEST/src/ASF/common/services/sleepmgr/sleepmgr.h new file mode 100644 index 00000000..2435d44c --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/common/services/sleepmgr/sleepmgr.h @@ -0,0 +1,271 @@ +/** + * \file + * + * \brief Sleep manager + * + * Copyright (c) 2010-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ +#ifndef SLEEPMGR_H +#define SLEEPMGR_H + +#include +#include + +#if (SAM3S || SAM3U || SAM3N || SAM3XA || SAM4S || SAM4E || SAM4N || SAM4C || SAMG || SAM4CP || SAM4CM) +# include "sam/sleepmgr.h" +#elif XMEGA +# include "xmega/sleepmgr.h" +#elif UC3 +# include "uc3/sleepmgr.h" +#elif SAM4L +# include "sam4l/sleepmgr.h" +#elif MEGA +# include "mega/sleepmgr.h" +#elif (SAMD20 || SAMD21 || SAMR21 || SAMD11) +# include "samd/sleepmgr.h" +#elif (SAML21) +# include "saml/sleepmgr.h" +#else +# error Unsupported device. +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \defgroup sleepmgr_group Sleep manager + * + * The sleep manager is a service for ensuring that the device is not put to + * sleep in deeper sleep modes than the system (e.g., peripheral drivers, + * services or the application) allows at any given time. + * + * It is based on the use of lock counting for the individual sleep modes, and + * will put the device to sleep in the shallowest sleep mode that has a non-zero + * lock count. The drivers/services/application can change these counts by use + * of \ref sleepmgr_lock_mode and \ref sleepmgr_unlock_mode. + * Refer to \ref sleepmgr_mode for a list of the sleep modes available for + * locking, and the device datasheet for information on their effect. + * + * The application must supply the file \ref conf_sleepmgr.h. + * + * For the sleep manager to be enabled, the symbol \ref CONFIG_SLEEPMGR_ENABLE + * must be defined, e.g., in \ref conf_sleepmgr.h. If this symbol is not + * defined, the functions are replaced with dummy functions and no RAM is used. + * + * @{ + */ + +/** + * \def CONFIG_SLEEPMGR_ENABLE + * \brief Configuration symbol for enabling the sleep manager + * + * If this symbol is not defined, the functions of this service are replaced + * with dummy functions. This is useful for reducing code size and execution + * time if the sleep manager is not needed in the application. + * + * This symbol may be defined in \ref conf_sleepmgr.h. + */ +#if defined(__DOXYGEN__) && !defined(CONFIG_SLEEPMGR_ENABLE) +# define CONFIG_SLEEPMGR_ENABLE +#endif + +/** + * \enum sleepmgr_mode + * \brief Sleep mode locks + * + * Identifiers for the different sleep mode locks. + */ + +/** + * \brief Initialize the lock counts + * + * Sets all lock counts to 0, except the very last one, which is set to 1. This + * is done to simplify the algorithm for finding the deepest allowable sleep + * mode in \ref sleepmgr_enter_sleep. + */ +static inline void sleepmgr_init(void) +{ +#ifdef CONFIG_SLEEPMGR_ENABLE + uint8_t i; + + for (i = 0; i < SLEEPMGR_NR_OF_MODES - 1; i++) { + sleepmgr_locks[i] = 0; + } + sleepmgr_locks[SLEEPMGR_NR_OF_MODES - 1] = 1; +#endif /* CONFIG_SLEEPMGR_ENABLE */ +} + +/** + * \brief Increase lock count for a sleep mode + * + * Increases the lock count for \a mode to ensure that the sleep manager does + * not put the device to sleep in the deeper sleep modes. + * + * \param mode Sleep mode to lock. + */ +static inline void sleepmgr_lock_mode(enum sleepmgr_mode mode) +{ +#ifdef CONFIG_SLEEPMGR_ENABLE + irqflags_t flags; + + if(sleepmgr_locks[mode] >= 0xff) { + while (true) { + // Warning: maximum value of sleepmgr_locks buffer is no more than 255. + // Check APP or change the data type to uint16_t. + } + } + + // Enter a critical section + flags = cpu_irq_save(); + + ++sleepmgr_locks[mode]; + + // Leave the critical section + cpu_irq_restore(flags); +#else + UNUSED(mode); +#endif /* CONFIG_SLEEPMGR_ENABLE */ +} + +/** + * \brief Decrease lock count for a sleep mode + * + * Decreases the lock count for \a mode. If the lock count reaches 0, the sleep + * manager can put the device to sleep in the deeper sleep modes. + * + * \param mode Sleep mode to unlock. + */ +static inline void sleepmgr_unlock_mode(enum sleepmgr_mode mode) +{ +#ifdef CONFIG_SLEEPMGR_ENABLE + irqflags_t flags; + + if(sleepmgr_locks[mode] == 0) { + while (true) { + // Warning: minimum value of sleepmgr_locks buffer is no less than 0. + // Check APP. + } + } + + // Enter a critical section + flags = cpu_irq_save(); + + --sleepmgr_locks[mode]; + + // Leave the critical section + cpu_irq_restore(flags); +#else + UNUSED(mode); +#endif /* CONFIG_SLEEPMGR_ENABLE */ +} + + /** + * \brief Retrieves the deepest allowable sleep mode + * + * Searches through the sleep mode lock counts, starting at the shallowest sleep + * mode, until the first non-zero lock count is found. The deepest allowable + * sleep mode is then returned. + */ +static inline enum sleepmgr_mode sleepmgr_get_sleep_mode(void) +{ + enum sleepmgr_mode sleep_mode = SLEEPMGR_ACTIVE; + +#ifdef CONFIG_SLEEPMGR_ENABLE + uint8_t *lock_ptr = sleepmgr_locks; + + // Find first non-zero lock count, starting with the shallowest modes. + while (!(*lock_ptr)) { + lock_ptr++; + sleep_mode = (enum sleepmgr_mode)(sleep_mode + 1); + } + + // Catch the case where one too many sleepmgr_unlock_mode() call has been + // performed on the deepest sleep mode. + Assert((uintptr_t)(lock_ptr - sleepmgr_locks) < SLEEPMGR_NR_OF_MODES); + +#endif /* CONFIG_SLEEPMGR_ENABLE */ + + return sleep_mode; +} + +/** + * \fn sleepmgr_enter_sleep + * \brief Go to sleep in the deepest allowed mode + * + * Searches through the sleep mode lock counts, starting at the shallowest sleep + * mode, until the first non-zero lock count is found. The device is then put to + * sleep in the sleep mode that corresponds to the lock. + * + * \note This function enables interrupts before going to sleep, and will leave + * them enabled upon return. This also applies if sleep is skipped due to ACTIVE + * mode being locked. + */ + +static inline void sleepmgr_enter_sleep(void) +{ +#ifdef CONFIG_SLEEPMGR_ENABLE + enum sleepmgr_mode sleep_mode; + + cpu_irq_disable(); + + // Find the deepest allowable sleep mode + sleep_mode = sleepmgr_get_sleep_mode(); + // Return right away if first mode (ACTIVE) is locked. + if (sleep_mode==SLEEPMGR_ACTIVE) { + cpu_irq_enable(); + return; + } + // Enter the deepest allowable sleep mode with interrupts enabled + sleepmgr_sleep(sleep_mode); +#else + cpu_irq_enable(); +#endif /* CONFIG_SLEEPMGR_ENABLE */ +} + + +//! @} + +#ifdef __cplusplus +} +#endif + +#endif /* SLEEPMGR_H */ diff --git a/AVR Code/USB_BULK_TEST/src/ASF/common/services/sleepmgr/xmega/sleepmgr.c b/AVR Code/USB_BULK_TEST/src/ASF/common/services/sleepmgr/xmega/sleepmgr.c new file mode 100644 index 00000000..0877e284 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/common/services/sleepmgr/xmega/sleepmgr.c @@ -0,0 +1,61 @@ +/** + * \file + * + * \brief Sleep manager + * + * Copyright (c) 2010-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ +#include +#include + +#if defined(CONFIG_SLEEPMGR_ENABLE) || defined(__DOXYGEN__) + +uint8_t sleepmgr_locks[SLEEPMGR_NR_OF_MODES]; + +enum SLEEP_SMODE_enum sleepmgr_configs[SLEEPMGR_NR_OF_MODES] = { + SLEEP_SMODE_IDLE_gc, + SLEEP_SMODE_ESTDBY_gc, + SLEEP_SMODE_PSAVE_gc, + SLEEP_SMODE_STDBY_gc, + SLEEP_SMODE_PDOWN_gc, +}; + +#endif /* CONFIG_SLEEPMGR_ENABLE */ diff --git a/AVR Code/USB_BULK_TEST/src/ASF/common/services/sleepmgr/xmega/sleepmgr.h b/AVR Code/USB_BULK_TEST/src/ASF/common/services/sleepmgr/xmega/sleepmgr.h new file mode 100644 index 00000000..7ca32273 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/common/services/sleepmgr/xmega/sleepmgr.h @@ -0,0 +1,117 @@ +/** + * \file + * + * \brief AVR XMEGA Sleep manager implementation + * + * Copyright (c) 2010-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ +#ifndef XMEGA_SLEEPMGR_H +#define XMEGA_SLEEPMGR_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include + +/** + * \weakgroup sleepmgr_group + * @{ + */ + +enum sleepmgr_mode { + //! Active mode. + SLEEPMGR_ACTIVE = 0, + //! Idle mode. + SLEEPMGR_IDLE, + //! Extended Standby mode. + SLEEPMGR_ESTDBY, + //! Power Save mode. + SLEEPMGR_PSAVE, + //! Standby mode. + SLEEPMGR_STDBY, + //! Power Down mode. + SLEEPMGR_PDOWN, + SLEEPMGR_NR_OF_MODES, +}; + +/** + * \internal + * \name Internal arrays + * @{ + */ +#if defined(CONFIG_SLEEPMGR_ENABLE) || defined(__DOXYGEN__) +//! Sleep mode lock counters +extern uint8_t sleepmgr_locks[]; +/** + * \brief Look-up table with sleep mode configurations + * \note This is located in program memory (Flash) as it is constant. + */ +extern enum SLEEP_SMODE_enum sleepmgr_configs[]; +#endif /* CONFIG_SLEEPMGR_ENABLE */ +//! @} + +static inline void sleepmgr_sleep(const enum sleepmgr_mode sleep_mode) +{ + Assert(sleep_mode != SLEEPMGR_ACTIVE); +#ifdef CONFIG_SLEEPMGR_ENABLE + sleep_set_mode(sleepmgr_configs[sleep_mode-1]); + sleep_enable(); + + cpu_irq_enable(); + sleep_enter(); + + sleep_disable(); +#else + cpu_irq_enable(); +#endif /* CONFIG_SLEEPMGR_ENABLE */ + +} + +//! @} + +#ifdef __cplusplus +} +#endif + +#endif /* XMEGA_SLEEPMGR_H */ diff --git a/AVR Code/USB_BULK_TEST/src/ASF/common/services/spi/spi_master.h b/AVR Code/USB_BULK_TEST/src/ASF/common/services/spi/spi_master.h new file mode 100644 index 00000000..e92f4ca5 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/common/services/spi/spi_master.h @@ -0,0 +1,273 @@ +/** + * \file + * + * \brief SPI Master Mode management + * + * Copyright (c) 2010-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ +#ifndef SPI_MASTER_H_INCLUDED +#define SPI_MASTER_H_INCLUDED + +#include + +#if XMEGA +# include "xmega_spi/spi_master.h" +#elif MEGA_RF +# include "megarf_spi/spi_master.h" +#elif UC3 +# include "uc3_spi/spi_master.h" +#elif SAM +# include "sam_spi/spi_master.h" +#else +# error Unsupported chip type +#endif + +/** + * + * \defgroup spi_group Serial Peripheral Interface (SPI) + * + * This is the common API for SPI interface. Additional features are available + * in the documentation of the specific modules. + * + * \section spi_group_platform Platform Dependencies + * + * The SPI API is partially chip- or platform-specific. While all + * platforms provide mostly the same functionality, there are some + * variations around how different bus types and clock tree structures + * are handled. + * + * The following functions are available on all platforms, but there may + * be variations in the function signature (i.e. parameters) and + * behavior. These functions are typically called by platform-specific + * parts of drivers, and applications that aren't intended to be + * portable: + * - spi_master_init() + * - spi_master_setup_device() + * - spi_select_device() + * - spi_deselect_device() + * - spi_write_single() + * - spi_write_packet() + * - spi_read_single() + * - spi_read_packet() + * - spi_is_tx_empty() + * - spi_is_tx_ready() + * - spi_is_rx_full() + * - spi_is_rx_ready() + * - spi_enable() + * - spi_disable() + * - spi_is_enabled() + * + * \section spi_master_quickstart_section Quick Start Guide + * See \ref common_spi_master_quickstart + * @{ + */ + +//! @} + +/** + * \page common_spi_master_quickstart Quick Start Guide for the SPI Master Driver + * + * This is the quick start guide for the \ref spi_group "SPI Driver", with + * step-by-step instructions on how to configure and use the driver for a + * specific use case. + * + * The use case contain several code fragments. The code fragments in the + * steps for setup can be copied into a custom initialization function, while + * the steps for usage can be copied into, e.g., the main application function. + * + * The steps for setting up the SPI master for XMEGA and UC3 use exactly the + * same approach, but note that there are different names on the peripherals. So + * to use this Quick Start for UC3 please make sure that all the peripheral + * names are updated according to the UC3 datasheet. + * - \subpage spi_master_xmega + * + */ +/** + * \page spi_master_xmega Basic setup for SPI master on XMEGA devices + * + * \section spi_master_xmega_basic Basic setup for XMEGA devices + * The SPI module will be set up as master: + * - SPI on PORTD + * - 1MHz SPI clock speed + * - Slave Chip Select connected on PORTD pin 1 + * - SPI mode 0 (data on rising clock edge) + * + * \section spi_master_xmega_basic_setup Setup steps + * \subsection spi_master_xmega_basic_setup_code Example code + * Add to application C-file (e.g. main.c): + * \code + void spi_init_pins(void) + { + ioport_configure_port_pin(&PORTD, PIN1_bm, IOPORT_INIT_HIGH | IOPORT_DIR_OUTPUT); + + ioport_configure_port_pin(&PORTD, PIN4_bm, IOPORT_PULL_UP | IOPORT_DIR_INPUT); + ioport_configure_port_pin(&PORTD, PIN5_bm, IOPORT_INIT_HIGH | IOPORT_DIR_OUTPUT); + ioport_configure_port_pin(&PORTD, PIN6_bm, IOPORT_DIR_INPUT); + ioport_configure_port_pin(&PORTD, PIN7_bm, IOPORT_INIT_HIGH | IOPORT_DIR_OUTPUT); + } + + void spi_init_module(void) + { + struct spi_device spi_device_conf = { + .id = IOPORT_CREATE_PIN(PORTD, 1) + }; + + spi_master_init(&SPID); + spi_master_setup_device(&SPID, &spi_device_conf, SPI_MODE_0, 1000000, 0); + spi_enable(&SPID); + } +\endcode + * + * \subsection spi_master_xmega_basic_setup Workflow + * -# Ensure that \ref conf_spi_master.h is present for the driver. + * - \note This file is only for the driver and should not be included by the + * user. In this example the file can be left empty. + * -# Initialize the pins used by the SPI interface (this initialization is for + * the ATxmega32A4U device). + * -# Set the pin used for slave select as output high: + * \code + ioport_configure_port_pin(&PORTD, PIN1_bm, IOPORT_INIT_HIGH | IOPORT_DIR_OUTPUT); +\endcode + * -# Enable pull-up on own chip select (SS): + * \code + ioport_configure_port_pin(&PORTD, PIN4_bm, IOPORT_PULL_UP | IOPORT_DIR_INPUT); +\endcode + * \attention If this pin is pulled low the SPI module will go into slave mode. + * -# Set MOSI and SCL as output high, and set MISO as input: + * \code + ioport_configure_port_pin(&PORTD, PIN5_bm, IOPORT_INIT_HIGH | IOPORT_DIR_OUTPUT); + ioport_configure_port_pin(&PORTD, PIN6_bm, IOPORT_DIR_INPUT); + ioport_configure_port_pin(&PORTD, PIN7_bm, IOPORT_INIT_HIGH | IOPORT_DIR_OUTPUT); +\endcode + * -# Define the SPI device configuration struct to describe which pin the + * slave select (slave chip select) is connected to, in this case the slave + * select pin has been connected to PORTD pin 1 (PD1): + * - \code + struct spi_device spi_device_conf = { + .id = IOPORT_CREATE_PIN(PORTD, 1) + }; +\endcode + * -# Initialize the SPI module, in this case SPI on PORTD has been chosen: + * - \code + spi_master_init(&SPID); +\endcode + * -# Setup the SPI master module for a specific device: + * - \code + spi_master_setup_device(&SPID, &spi_device_conf, SPI_MODE_0, 1000000, 0); +\endcode + * - \note The last argument, which is zero in this case, can be ignored and is + * only included for compatibility purposes. + * -# Then enable the SPI: + * - \code + spi_enable(&SPID); +\endcode + * + * \section spi_master_xmega_basic_usage Usage steps + * \subsection spi_master_xmega_basic_usage_code Example code + * Add to, e.g., the main loop in the application C-file: + * \code + uint8_t data_buffer[1] = {0xAA}; + + struct spi_device spi_device_conf = { + .id = IOPORT_CREATE_PIN(PORTD, 1) + }; + + spi_select_device(&SPID, &spi_device_conf); + + spi_write_packet(&SPID, data_buffer, 1); + spi_read_packet(&SPID, data_buffer, 1); + + spi_deselect_device(&SPID, &spi_device_conf); +\endcode + * + * \subsection spi_master_xmega_basic_usage_flow Workflow + * -# Create a buffer for data to be sent/received on the SPI bus, in this case + * a single byte buffer is used. The buffer can be of arbitrary size as long as + * there is space left in SRAM: + * - \code + uint8_t data_buffer[1] = {0xAA}; +\endcode + * -# Define the SPI device configuration struct to describe which pin the + * slave select (slave chip select) is connected to, in this case the slave + * select pin has been connected to PORTD pin 1 (PD1): + * - \code + struct spi_device spi_device_conf = { + .id = IOPORT_CREATE_PIN(PORTD, 1) + }; +\endcode + * - \note As this struct is the same for both the initializing part and the usage + * part it could be a good idea to make the struct global, and hence accessible + * for both the initializing part and usage part. Another solution could be to + * create the struct in the main function and pass the address of the struct to + * the spi_init_module() function, e.g.: + * \code + void spi_init_module(struct spi_device *spi_device_conf) + { + ... + + spi_master_setup_device(&SPID, spi_device_conf, SPI_MODE_0, 1000000, 0); + + ... + } +\endcode + * -# Write data to the SPI slave device, in this case write one byte from the + * data_buffer: + * - \code + spi_write_packet(&SPID, data_buffer, 1); +\endcode + * -# Read data from the SPI slave device, in this case read one byte and put it + * into the data_buffer: + * - \code + spi_read_packet(&SPID, data_buffer, 1); +\endcode + * - \attention As the SPI works as a shift register so that data is shifted in at + * the same time as data is shifted out a read operation will mean that a dummy + * byte \ref CONFIG_SPI_MASTER_DUMMY is written to the SPI bus. \ref CONFIG_SPI_MASTER_DUMMY + * defaults to 0xFF, but can be changed by defining it inside the \ref conf_spi_master.h + * file. + * -# When read and write operations is done de-select the slave: + * - \code + spi_deselect_device(&SPID, &spi_device_conf); +\endcode + * + */ + +#endif /* SPI_MASTER_H_INCLUDED */ diff --git a/AVR Code/USB_BULK_TEST/src/ASF/common/services/spi/usart_spi.h b/AVR Code/USB_BULK_TEST/src/ASF/common/services/spi/usart_spi.h new file mode 100644 index 00000000..92b407ff --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/common/services/spi/usart_spi.h @@ -0,0 +1,104 @@ +/** + * \file + * + * \brief USART in SPI mode driver functions. + * + * Copyright (c) 2010-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ +#ifndef USART_SPI_H_INCLUDED +#define USART_SPI_H_INCLUDED + +#include + +#if XMEGA +# include "xmega_usart_spi/usart_spi.h" +#elif MEGA_RF +# include "megarf_usart_spi/usart_spi.h" +#elif UC3 +# include "uc3_usart_spi/usart_spi.h" +#elif SAM +# include "sam_usart_spi/usart_spi.h" +#else +# error Unsupported chip type +#endif + +/** + * + * \defgroup usart_spi_group USART in SPI (Serial Peripheral Interface) mode + * + * This is the common API for USART in SPI mode. Additional features are available + * in the documentation of the specific modules. + * + * \section spi_group_platform Platform Dependencies + * + * The spi API is partially chip- or platform-specific. While all + * platforms provide mostly the same functionality, there are some + * variations around how different bus types and clock tree structures + * are handled. + * + * The following functions are available on all platforms, but there may + * be variations in the function signature (i.e. parameters) and + * behaviour. These functions are typically called by platform-specific + * parts of drivers, and applications that aren't intended to be + * portable: + * - usart_spi_init() + * - usart_spi_setup_device() + * - usart_spi_select_device() + * - usart_spi_deselect_device() + * - usart_spi_write_single() + * - usart_spi_write_packet() + * - usart_spi_read_single() + * - usart_spi_read_packet() + * - usart_spi_is_tx_empty() + * - usart_spi_is_tx_ready() + * - usart_spi_is_rx_full() + * - usart_spi_is_rx_ready() + * - usart_spi_enable() + * - usart_spi_disable() + * - usart_spi_is_enabled() + * + * + * @{ + */ + +//! @} + +#endif /* USART_SPI_H_INCLUDED */ diff --git a/AVR Code/USB_BULK_TEST/src/ASF/common/services/spi/xmega_spi/spi_master.c b/AVR Code/USB_BULK_TEST/src/ASF/common/services/spi/xmega_spi/spi_master.c new file mode 100644 index 00000000..9feeebcf --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/common/services/spi/xmega_spi/spi_master.c @@ -0,0 +1,195 @@ +/***************************************************************************** + * + * \file + * + * \brief SPI software driver functions. + * + * Copyright (c) 2010-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + *****************************************************************************/ +/* + * Support and FAQ: visit Atmel Support + */ + +#include "spi_master.h" +#include "sysclk.h" + +/*! \brief Initializes the SPI in master mode. + * + * \param spi Base address of the SPI instance. + * + */ +void spi_master_init(SPI_t *spi) +{ +#ifdef SPIA + if ((uint16_t)spi == (uint16_t)&SPIA) { + sysclk_enable_module(SYSCLK_PORT_A, PR_SPI_bm); + } +#endif +#ifdef SPIB + if ((uint16_t)spi == (uint16_t)&SPIB) { + sysclk_enable_module(SYSCLK_PORT_B, PR_SPI_bm); + } +#endif +#ifdef SPIC + if ((uint16_t)spi == (uint16_t)&SPIC) { + sysclk_enable_module(SYSCLK_PORT_C, PR_SPI_bm); + } +#endif +#ifdef SPID + if ((uint16_t)spi == (uint16_t)&SPID) { + sysclk_enable_module(SYSCLK_PORT_D, PR_SPI_bm); + } +#endif +#ifdef SPIE + if ((uint16_t)spi == (uint16_t)&SPIE) { + sysclk_enable_module(SYSCLK_PORT_E, PR_SPI_bm); + } +#endif +#ifdef SPIF + if ((uint16_t)spi == (uint16_t)&SPIF) { + sysclk_enable_module(SYSCLK_PORT_F, PR_SPI_bm); + } +#endif + spi_enable_master_mode(spi); +} + +/** + * \brief Setup a SPI device. + * + * The returned device descriptor structure must be passed to the driver + * whenever that device should be used as current slave device. + * + * \param spi Base address of the SPI instance. + * \param device Pointer to SPI device struct that should be initialized. + * \param flags SPI configuration flags. Common flags for all + * implementations are the SPI modes SPI_MODE_0 ... + * SPI_MODE_3. + * \param baud_rate Baud rate for communication with slave device in Hz. + * \param sel_id Board specific select id + */ +void spi_master_setup_device(SPI_t *spi, struct spi_device *device, + spi_flags_t flags, uint32_t baud_rate, + board_spi_select_id_t sel_id) +{ + if (spi_xmega_set_baud_div(spi, baud_rate, sysclk_get_cpu_hz()) < 0) { + Assert(false); + return; + } + + /* Clear any set SPI mode flags and set them to the user-specified mode */ + spi->CTRL = (spi->CTRL & ~SPI_MODE_gm) | + ((flags << SPI_MODE_gp) & SPI_MODE_gm); +} + +/** + * \brief Send a sequence of bytes to a SPI device + * + * Received bytes on the SPI bus are discarded. + * + * \param spi Base address of the SPI instance. + * \param data data buffer to write + * \param len Length of data + * + * \pre SPI device must be selected with spi_select_device() first + */ +status_code_t spi_write_packet(SPI_t *spi, const uint8_t *data, size_t len) +{ + while (len--) { + spi_write_single(spi, *data++); + + while (!spi_is_rx_full(spi)) { + } + } + + return STATUS_OK; +} + +/** + * \brief Receive a sequence of bytes from a SPI device + * + * All bytes sent out on SPI bus are sent as value 0. + * + * \param spi Base address of the SPI instance. + * \param data data buffer to read + * \param len Length of data + * + * \pre SPI device must be selected with spi_select_device() first + */ +status_code_t spi_read_packet(SPI_t *spi, uint8_t *data, size_t len) +{ + while (len--) { + spi_write_single(spi,CONFIG_SPI_MASTER_DUMMY); //Dummy write + + while (!spi_is_rx_full(spi)) { + } + + spi_read_single(spi, data); + data++; + } + + return STATUS_OK; +} + +/** + * \brief Select given device on the SPI bus + * + * Set device specific setting and calls board chip select. + * + * \param spi Base address of the SPI instance. + * \param device SPI device + * + */ +void spi_select_device(SPI_t *spi, struct spi_device *device) +{ + ioport_set_pin_low(device->id); +} + +/** + * \brief Deselect given device on the SPI bus + * + * Calls board chip deselect. + * + * \param spi Base address of the SPI instance. + * \param device SPI device + * + * \pre SPI device must be selected with spi_select_device() first + */ +void spi_deselect_device(SPI_t *spi, struct spi_device *device) +{ + ioport_set_pin_high(device->id); +} diff --git a/AVR Code/USB_BULK_TEST/src/ASF/common/services/spi/xmega_spi/spi_master.h b/AVR Code/USB_BULK_TEST/src/ASF/common/services/spi/xmega_spi/spi_master.h new file mode 100644 index 00000000..12fc7088 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/common/services/spi/xmega_spi/spi_master.h @@ -0,0 +1,450 @@ +/***************************************************************************** + * + * \file + * + * \brief SPI Master driver for AVR. + * + * This file defines a useful set of functions for the SPI interface on AVR + * devices. + * + * Copyright (c) 2009-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + ******************************************************************************/ +/* + * Support and FAQ: visit Atmel Support + */ + + +#ifndef _SPI_MASTER_H_ +#define _SPI_MASTER_H_ + +#include "compiler.h" +#include "status_codes.h" +#include "ioport.h" +#include "spi.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \defgroup xmega_spi_master_group XMEGA SPI master service. + * + * This is the API for SPI master service on XMEGA. + * + * @{ + * + * \section xmega_spi_master_qucikstart_section Quick Start Guide + * See \ref common_spi_master_quickstart + */ + +/*! \name Spi Master Management Configuration + */ +//! @{ +#include "conf_spi_master.h" + +//! Default Config Spi Master Dummy Field +#ifndef CONFIG_SPI_MASTER_DUMMY +#define CONFIG_SPI_MASTER_DUMMY 0xFF +#endif +//! @} + +/** + * \brief Clock phase + */ +#define SPI_CPHA (1 << 0) + +/** + * \brief Clock polarity + */ +#define SPI_CPOL (1 << 1) + +/** + * \brief SPI mode 0 + */ +#define SPI_MODE_0 0 +/** + * \brief SPI mode 1 + */ +#define SPI_MODE_1 (SPI_CPHA) +/** + * \brief SPI mode 2 + */ +#define SPI_MODE_2 (SPI_CPOL) +/** + * \brief SPI mode 3 + */ +#define SPI_MODE_3 (SPI_CPOL | SPI_CPHA) + +typedef uint8_t spi_flags_t; +typedef uint32_t board_spi_select_id_t; + +//! \brief Polled SPI device definition +struct spi_device { + //! Board specific select id + port_pin_t id; +}; + +/*! \brief Initializes the SPI in master mode. + * + * \param spi Base address of the SPI instance. + * + */ +extern void spi_master_init(SPI_t *spi); + +/** + * \brief Setup a SPI device. + * + * The returned device descriptor structure must be passed to the driver + * whenever that device should be used as current slave device. + * + * \param spi Base address of the SPI instance. + * \param device Pointer to SPI device struct that should be initialized. + * \param flags SPI configuration flags. Common flags for all + * implementations are the SPI modes SPI_MODE_0 ... + * SPI_MODE_3. + * \param baud_rate Baud rate for communication with slave device in Hz. + * \param sel_id Board specific select id + */ +extern void spi_master_setup_device(SPI_t *spi, struct spi_device *device, + spi_flags_t flags, unsigned long baud_rate, + board_spi_select_id_t sel_id); + +/*! \brief Enables the SPI. + * + * \param spi Base address of the SPI instance. + */ +extern void spi_enable(SPI_t *spi); + +/*! \brief Disables the SPI. + * + * Ensures that nothing is transferred while setting up buffers. + * + * \param spi Base address of the SPI instance. + * + * \warning This may cause data loss if used on a slave SPI. + */ +extern void spi_disable(SPI_t *spi); + + +/*! \brief Tests if the SPI is enabled. + * + * \param spi Base address of the SPI instance. + * + * \return \c 1 if the SPI is enabled, otherwise \c 0. + */ +extern bool spi_is_enabled(SPI_t *spi); + +/** + * \brief Select given device on the SPI bus + * + * Set device specific setting and calls board chip select. + * + * \param spi Base address of the SPI instance. + * \param device SPI device + * + */ +extern void spi_select_device(SPI_t *spi, struct spi_device *device); + +/** + * \brief Deselect given device on the SPI bus + * + * Calls board chip deselect. + * + * \param spi Base address of the SPI instance. + * \param device SPI device + * + * \pre SPI device must be selected with spi_select_device() first + */ +extern void spi_deselect_device(SPI_t *spi, struct spi_device *device); + +/*! \brief Write one byte to a SPI device. + * + * \param spi Base address of the SPI instance. + * \param data The data byte to be loaded + * + */ +__always_inline static void spi_write_single(SPI_t *spi, uint8_t data) +{ + spi_put(spi,data); +} + +/** + * \brief Send a sequence of bytes to a SPI device + * + * Received bytes on the SPI bus are discarded. + * + * \param spi Base address of the SPI instance. + * \param data data buffer to write + * \param len Length of data + * + * \pre SPI device must be selected with spi_select_device() first + */ +extern status_code_t spi_write_packet(SPI_t *spi,const uint8_t *data, size_t len); + + +/*! \brief Receive one byte from a SPI device. + * + * \param spi Base address of the SPI instance. + * \param data Pointer to the data byte where to store the received data. + * + */ +inline static void spi_read_single(SPI_t *spi, uint8_t *data) +{ + *data=spi_get(spi); +} + +/** + * \brief Receive a sequence of bytes from a SPI device + * + * All bytes sent out on SPI bus are sent as value 0. + * + * \param spi Base address of the SPI instance. + * \param data data buffer to read + * \param len Length of data + * + * \pre SPI device must be selected with spi_select_device() first + */ +extern status_code_t spi_read_packet(SPI_t *spi, uint8_t *data, size_t len); + +/*! \brief Checks if all transmissions are complete. + * + * \param spi Base address of the SPI instance. + * + * \return Status. + * \retval 1 All transmissions complete. + * \retval 0 Transmissions not complete. + */ +inline static bool spi_is_tx_empty(SPI_t *spi) +{ + return spi_is_tx_ok(spi); +} + +/*! \brief Checks if all transmissions is ready. + * + * \param spi Base address of the SPI instance. + * + * \return Status. + * \retval 1 All transmissions complete. + * \retval 0 Transmissions not complete. + */ +inline static bool spi_is_tx_ready(SPI_t *spi) +{ + return spi_is_tx_ok(spi); +} + +/*! \brief Tests if the SPI contains a received character. + * + * \param spi Base address of the SPI instance. + * + * \return \c 1 if the SPI Receive Holding Register is full, otherwise \c 0. + */ +inline static bool spi_is_rx_full(SPI_t *spi) +{ + return spi_is_tx_ok(spi); +} + +/*! \brief Checks if all reception is ready. + * + * \param spi Base address of the SPI instance. + * + * \return \c 1 if the SPI Receiver is ready, otherwise \c 0. + */ +inline static bool spi_is_rx_ready(SPI_t *spi) +{ + return spi_is_tx_ok(spi); +} + +//! @} + + + +#ifdef __cplusplus +} +#endif + +/** + * \page spi_master_xmega Quick start guide for SPI master on XMEGA devices + * + * \section spi_master_xmega_basic Basic setup for XMEGA devices + * The SPI module will be set up as master: + * - SPI on PORTD + * - 1MHz SPI clock speed + * - Slave Chip Select connected on PORTD pin 1 + * - SPI mode 0 (data on rising clock edge) + * + * \section spi_master_xmega_basic_setup Setup steps + * \subsection spi_master_xmega_basic_setup_code Example code + * Add to application C-file (e.g. main.c): + * \code + void spi_init_pins(void) + { + ioport_configure_port_pin(&PORTD, PIN1_bm, IOPORT_INIT_HIGH | IOPORT_DIR_OUTPUT); + + ioport_configure_port_pin(&PORTD, PIN4_bm, IOPORT_PULL_UP | IOPORT_DIR_INPUT); + ioport_configure_port_pin(&PORTD, PIN5_bm, IOPORT_INIT_HIGH | IOPORT_DIR_OUTPUT); + ioport_configure_port_pin(&PORTD, PIN6_bm, IOPORT_DIR_INPUT); + ioport_configure_port_pin(&PORTD, PIN7_bm, IOPORT_INIT_HIGH | IOPORT_DIR_OUTPUT); + } + + void spi_init_module(void) + { + struct spi_device spi_device_conf = { + .id = IOPORT_CREATE_PIN(PORTD, 1) + }; + + spi_master_init(&SPID); + spi_master_setup_device(&SPID, &spi_device_conf, SPI_MODE_0, 1000000, 0); + spi_enable(&SPID); + } +\endcode + * + * \subsection spi_master_xmega_basic_setup Workflow + * -# Ensure that \ref conf_spi_master.h is present for the driver. + * - \note This file is only for the driver and should not be included by the + * user. In this example the file can be left empty. + * -# Initialize the pins used by the SPI interface (this initialization is for + * the ATxmega32A4U device). + * -# Set the pin used for slave select as output high: + * \code + ioport_configure_port_pin(&PORTD, PIN1_bm, IOPORT_INIT_HIGH | IOPORT_DIR_OUTPUT); +\endcode + * -# Enable pull-up on own chip select (SS): + * \code + ioport_configure_port_pin(&PORTD, PIN4_bm, IOPORT_PULL_UP | IOPORT_DIR_INPUT); +\endcode + * \attention If this pin is pulled low the SPI module will go into slave mode. + * -# Set MOSI and SCL as output high, and set MISO as input: + * \code + ioport_configure_port_pin(&PORTD, PIN5_bm, IOPORT_INIT_HIGH | IOPORT_DIR_OUTPUT); + ioport_configure_port_pin(&PORTD, PIN6_bm, IOPORT_DIR_INPUT); + ioport_configure_port_pin(&PORTD, PIN7_bm, IOPORT_INIT_HIGH | IOPORT_DIR_OUTPUT); +\endcode + * -# Define the SPI device configuration struct to describe which pin the + * slave select (slave chip select) is connected to, in this case the slave + * select pin has been connected to PORTD pin 1 (PD1): + * - \code + struct spi_device spi_device_conf = { + .id = IOPORT_CREATE_PIN(PORTD, 1) + }; +\endcode + * -# Initialize the SPI module, in this case SPI on PORTD has been chosen: + * - \code + spi_master_init(&SPID); +\endcode + * -# Setup the SPI master module for a specific device: + * - \code + spi_master_setup_device(&SPID, &spi_device_conf, SPI_MODE_0, 1000000, 0); +\endcode + * - \note The last argument, which is zero in this case, can be ignored and is + * only included for compatibility purposes. + * -# Then enable the SPI: + * - \code + spi_enable(&SPID); +\endcode + * + * \section spi_master_xmega_basic_usage Usage steps + * \subsection spi_master_xmega_basic_usage_code Example code + * Add to, e.g., the main loop in the application C-file: + * \code + uint8_t data_buffer[1] = {0xAA}; + + struct spi_device spi_device_conf = { + .id = IOPORT_CREATE_PIN(PORTD, 1) + }; + + spi_select_device(&SPID, &spi_device_conf); + + spi_write_packet(&SPID, data_buffer, 1); + spi_read_packet(&SPID, data_buffer, 1); + + spi_deselect_device(&SPID, &spi_device_conf); +\endcode + * + * \subsection spi_master_xmega_basic_usage_flow Workflow + * -# Create a buffer for data to be sent/received on the SPI bus, in this case + * a single byte buffer is used. The buffer can be of arbitrary size as long as + * there is space left in SRAM: + * - \code + uint8_t data_buffer[1] = {0xAA}; +\endcode + * -# Define the SPI device configuration struct to describe which pin the + * slave select (slave chip select) is connected to, in this case the slave + * select pin has been connected to PORTD pin 1 (PD1): + * - \code + struct spi_device spi_device_conf = { + .id = IOPORT_CREATE_PIN(PORTD, 1) + }; +\endcode + * - \note As this struct is the same for both the initializing part and the usage + * part it could be a good idea to make the struct global, and hence accessible + * for both the initializing part and usage part. Another solution could be to + * create the struct in the main function and pass the address of the struct to + * the spi_init_module() function, e.g.: + * \code + void spi_init_module(struct spi_device *spi_device_conf) + { + ... + + spi_master_setup_device(&SPID, spi_device_conf, SPI_MODE_0, 1000000, 0); + + ... + } +\endcode + * -# Write data to the SPI slave device, in this case write one byte from the + * data_buffer: + * - \code + spi_write_packet(&SPID, data_buffer, 1); +\endcode + * -# Read data from the SPI slave device, in this case read one byte and put it + * into the data_buffer: + * - \code + spi_read_packet(&SPID, data_buffer, 1); +\endcode + * - \attention As the SPI works as a shift register so that data is shifted in at + * the same time as data is shifted out a read operation will mean that a dummy + * byte \ref CONFIG_SPI_MASTER_DUMMY is written to the SPI bus. \ref CONFIG_SPI_MASTER_DUMMY + * defaults to 0xFF, but can be changed by defining it inside the \ref conf_spi_master.h + * file. + * -# When read and write operations is done de-select the slave: + * - \code + spi_deselect_device(&SPID, &spi_device_conf); +\endcode + * + */ + +#endif // _SPI_MASTER_H_ diff --git a/AVR Code/USB_BULK_TEST/src/ASF/common/services/spi/xmega_usart_spi/usart_spi.c b/AVR Code/USB_BULK_TEST/src/ASF/common/services/spi/xmega_usart_spi/usart_spi.c new file mode 100644 index 00000000..7a406d70 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/common/services/spi/xmega_usart_spi/usart_spi.c @@ -0,0 +1,140 @@ +/** + * \file + * + * \brief AVR XMEGA USART in SPI mode driver functions. + * + * Copyright (c) 2014-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ +#include "usart_spi.h" +#include "sysclk.h" + +void usart_spi_init(USART_t *usart) +{ +#ifdef USARTC0 + if((uint16_t)usart == (uint16_t)&USARTC0) { + sysclk_enable_module(SYSCLK_PORT_C,PR_USART0_bm); + } +#endif +#ifdef USARTC1 + else + if((uint16_t)usart == (uint16_t)&USARTC1) { + sysclk_enable_module(SYSCLK_PORT_C,PR_USART1_bm); + } +#endif +#ifdef USARTD0 + else + if((uint16_t)usart == (uint16_t)&USARTD0) { + sysclk_enable_module(SYSCLK_PORT_D,PR_USART0_bm); + } +#endif +#ifdef USARTD1 + else + if((uint16_t)usart == (uint16_t)&USARTD1) { + sysclk_enable_module(SYSCLK_PORT_D,PR_USART1_bm); + } +#endif +#ifdef USARTE0 + else + if((uint16_t)usart == (uint16_t)&USARTE0) { + sysclk_enable_module(SYSCLK_PORT_E,PR_USART0_bm); + } +#endif +#ifdef USARTE1 + else + if((uint16_t)usart == (uint16_t)&USARTE1) { + sysclk_enable_module(SYSCLK_PORT_E,PR_USART1_bm); + } +#endif +#ifdef USARTF0 + else + if((uint16_t)usart == (uint16_t)&USARTF0) { + sysclk_enable_module(SYSCLK_PORT_F,PR_USART0_bm); + } +#endif +#ifdef USARTF1 + else + if((uint16_t)usart == (uint16_t)&USARTF1) { + sysclk_enable_module(SYSCLK_PORT_F,PR_USART1_bm); + } +#endif +} + +void usart_spi_setup_device(USART_t *usart, struct usart_spi_device *device, + spi_flags_t flags, unsigned long baud_rate, + board_spi_select_id_t sel_id) +{ + usart_spi_options_t opt; + opt.baudrate=baud_rate; + opt.spimode=flags; + opt.data_order=false; + usart_init_spi(usart, &opt); +} + +status_code_t usart_spi_write_packet(USART_t *usart,const uint8_t *data, size_t len) +{ + size_t i=0; + while(len) { + usart_spi_transmit(usart,*(data+i)); + len--; + i++; + } + return STATUS_OK; +} + +status_code_t usart_spi_read_packet(USART_t *usart, uint8_t *data, size_t len) +{ + while(len) { + *data = usart_spi_transmit(usart, CONFIG_USART_SPI_DUMMY); + len--; + data++; + } + return STATUS_OK; +} + +void usart_spi_select_device(USART_t *usart, struct usart_spi_device *device) +{ + ioport_set_pin_low(device->id); +} + +void usart_spi_deselect_device(USART_t *usart, struct usart_spi_device *device) +{ + ioport_set_pin_high(device->id); +} diff --git a/AVR Code/USB_BULK_TEST/src/ASF/common/services/spi/xmega_usart_spi/usart_spi.h b/AVR Code/USB_BULK_TEST/src/ASF/common/services/spi/xmega_usart_spi/usart_spi.h new file mode 100644 index 00000000..d5d5a95f --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/common/services/spi/xmega_usart_spi/usart_spi.h @@ -0,0 +1,279 @@ +/** + * \file + * + * \brief AVR XMEGA USART in SPI mode driver functions. + * + * Copyright (c) 2010-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ + +#ifndef _USART_SPI_H_ +#define _USART_SPI_H_ + +#include "compiler.h" +#include "status_codes.h" +#include "ioport.h" +#include "usart.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/*! \name USART in SPI mode Management Configuration + */ +//! @{ +#include "conf_usart_spi.h" + +//! Default Config Spi Master Dummy Field +#ifndef CONFIG_USART_SPI_DUMMY + #define CONFIG_USART_SPI_DUMMY 0xFF +#endif +//! @} + +/** + * \brief Clock phase + */ +#define SPI_CPHA (1 << 0) + +/** + * \brief Clock polarity + */ +#define SPI_CPOL (1 << 1) + +/** + * \brief SPI mode 0 + */ +#define SPI_MODE_0 0 +/** + * \brief SPI mode 1 + */ +#define SPI_MODE_1 (SPI_CPHA) +/** + * \brief SPI mode 2 + */ +#define SPI_MODE_2 (SPI_CPOL) +/** + * \brief SPI mode 3 + */ +#define SPI_MODE_3 (SPI_CPOL | SPI_CPHA) + +typedef uint8_t spi_flags_t; +typedef uint32_t board_spi_select_id_t; + +//! \brief Polled SPI device definition +struct usart_spi_device { + //! Board specific select id + port_pin_t id; +}; + +/*! \brief Initializes the USART in SPI master mode. + * + * \param usart Base address of the USART instance. + * + */ +extern void usart_spi_init(USART_t *usart); + +/** + * \brief Setup a USART in SPI mode device. + * + * The returned device descriptor structure must be passed to the driver + * whenever that device should be used as current slave device. + * + * \param usart Base address of the USART instance. + * \param device Pointer to usart device struct that should be initialized. + * \param flags USART configuration flags. Common flags for all + * implementations are the usart modes SPI_MODE_0 ... + * SPI_MODE_3. + * \param baud_rate Baud rate for communication with slave device in Hz. + * \param sel_id Board specific select id + */ +extern void usart_spi_setup_device(USART_t *usart, struct usart_spi_device *device, + spi_flags_t flags, unsigned long baud_rate, + board_spi_select_id_t sel_id); + +/*! \brief Enables the USART for the specified USART in SPI mode. + * + * \param usart Base address of the USART instance. + */ +extern void usart_spi_enable(USART_t *usart); + +/*! \brief Disables the USART. + * + * Ensures that nothing is transferred while setting up buffers. + * + * \param usart Base address of the USART instance. + * + */ +extern void usart_spi_disable(USART_t *usart); + + +/*! \brief Tests if the USART in SPI mode is enabled. + * + * \param usart Base address of the usart instance. + * + * \return \c 1 if the usart is enabled, otherwise \c 0. + */ +extern bool usart_spi_is_enabled(USART_t *usart); + +/** + * \brief Select given device on the SPI bus + * + * Set device specific setting and calls board chip select. + * + * \param usart Base address of the USART instance. + * \param device SPI device + * + */ +extern void usart_spi_select_device(USART_t *usart, struct usart_spi_device *device); + +/** + * \brief Deselect given device on the SPI bus + * + * Calls board chip deselect. + * + * \param usart Base address of the USART instance. + * \param device SPI device + * + * \pre SPI device must be selected with usart_spi_select_device() first + */ +extern void usart_spi_deselect_device(USART_t *usart, struct usart_spi_device *device); + +/*! \brief Write one byte to a SPI device using USART in SPI mode + * + * \param usart Base address of the usart instance. + * \param data The data byte to be loaded + * + */ +__always_inline static void usart_spi_write_single(USART_t *usart, uint8_t data) +{ + usart_spi_transmit(usart, data); +} + +/** + * \brief Send a sequence of bytes to a SPI device using USART in SPI mode + * + * Received bytes on the USART in SPI mode are discarded. + * + * \param usart Base address of the USART instance. + * \param data Data buffer to write + * \param len Length of data + * + * \pre usart device must be selected with usart_spi_select_device() first + */ +extern status_code_t usart_spi_write_packet(USART_t *usart,const uint8_t *data, size_t len); + + +/*! \brief Receive one byte from a SPI device using USART in SPI mode + * + * \param usart Base address of the USART instance. + * \param data Pointer to the data byte where to store the received data. + * + */ +inline static void usart_spi_read_single(USART_t *usart, uint8_t *data) +{ + *data = usart_spi_transmit(usart, CONFIG_USART_SPI_DUMMY); +} + +/** + * \brief Receive a sequence of bytes from a USART in SPI mode device + * + * All bytes sent out on usart bus are sent as value 0. + * + * \param usart Base address of the usart instance. + * \param data data buffer to read + * \param len Length of data + * + * \pre usart device must be selected with usart_spi_select_device() first + */ +extern status_code_t usart_spi_read_packet(USART_t *usart, uint8_t *data, size_t len); + +/*! \brief Check whether there are data in Transmit Holding Register or + * Transmit Shift Register in SPI master mode. + * + * \param usart Base address of the USART instance. + * + * \retval 1 The two registers are empty. + * \retval 0 One of the two registers contains data. + */ +inline static bool usart_spi_is_tx_empty(USART_t *usart) +{ + return usart_data_register_is_empty(usart); +} + +/*! \brief Check whether the USART in SPI master mode contains a received character. + * + * \param usart Base address of the USART instance. + * + * \retval 1 Some data have been received. + * \retval 0 No data has been received. + */ +inline static bool usart_spi_is_rx_ready(USART_t *usart) +{ + return usart_rx_is_complete(usart); +} + +/*! \brief Check if the USART Transmit Register is empty. + * + * \param usart Base address of the USART instance. + * + * \retval 1 There is no data in the Transmit Holding Register. + * \retval 0 There are data in the Transmit Holding Register. + */ +inline static bool usart_spi_is_tx_ready(USART_t *usart) +{ + return usart_data_register_is_empty(usart); +} + +/*! \brief Tests if the USART in SPI mode contains a received character. + * + * \param usart Base address of the USART instance. + * + * \return \c 1 if the USART Receive Holding Register is full, otherwise \c 0. + */ +inline static bool usart_spi_is_rx_full(USART_t *usart) +{ + return usart_rx_is_complete(usart); +} + +#ifdef __cplusplus +} +#endif + +#endif // _USART_SPI_H_ diff --git a/AVR Code/USB_BULK_TEST/src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.c b/AVR Code/USB_BULK_TEST/src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.c new file mode 100644 index 00000000..fd035fe1 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.c @@ -0,0 +1,84 @@ +/** + * \file + * + * \brief User Interface + * + * Copyright (c) 2011-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ + +#include +#include "ui.h" + +void ui_init(void) +{ + return; +} + +void ui_powerdown(void) +{ + return; +} + +void ui_wakeup(void) +{ + return; +} + +void ui_loop_back_state(bool b_started) +{ + return; +} + +void ui_process(uint16_t framenumber) +{ + return; +} + + +/** + * \defgroup UI User Interface + * + * Human interface on XMEGA-A3BU Xplained: + * - Led green (close to USB connector) is on at power on + * - Led 0 is on when USB line is in IDLE mode, and off in SUSPEND mode + * - Led 1 blinks when USB host has checked and enabled vendor interface + * - Red LED (Led 2) close to USB connector is on when loopback is running + */ diff --git a/AVR Code/USB_BULK_TEST/src/ASF/common/services/usb/class/vendor/device/udi_vendor.c b/AVR Code/USB_BULK_TEST/src/ASF/common/services/usb/class/vendor/device/udi_vendor.c new file mode 100644 index 00000000..a4986654 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/common/services/usb/class/vendor/device/udi_vendor.c @@ -0,0 +1,296 @@ +/** + * \file + * + * \brief USB Vendor class interface. + * + * Copyright (c) 2011-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ + +#include "conf_usb.h" +#include "usb_protocol.h" +#include "usb_protocol_vendor.h" +#include "udd.h" +#include "udc.h" +#include "udi_vendor.h" +#include + +// Configuration check +#ifndef UDI_VENDOR_ENABLE_EXT +# error UDI_VENDOR_ENABLE_EXT must be defined in conf_usb.h file. +#endif +#ifndef UDI_VENDOR_DISABLE_EXT +# error UDI_VENDOR_DISABLE_EXT must be defined in conf_usb.h file. +#endif + +/** + * \ingroup udi_vendor_group + * \defgroup udi_vendor_group_udc Interface with USB Device Core (UDC) + * + * Structures and functions required by UDC. + * + * @{ + */ +bool udi_vendor_enable(void); +void udi_vendor_disable(void); +bool udi_vendor_setup(void); +uint8_t udi_vendor_getsetting(void); + +//! Global structure which contains standard UDI API for UDC +UDC_DESC_STORAGE udi_api_t udi_api_vendor = { + .enable = udi_vendor_enable, + .disable = udi_vendor_disable, + .setup = udi_vendor_setup, + .getsetting = udi_vendor_getsetting, + .sof_notify = NULL, +}; +//@} + + +/** + * \ingroup udi_vendor_group + * \defgroup udi_vendor_group_internal Implementation of UDI Vendor Class + * + * Class internal implementation + * @{ + */ + +//! USB descriptor alternate setting used +static uint8_t udi_vendor_alternate_setting = 0; + +/** + * \name Internal routines + */ +//@{ +bool udi_vendor_enable(void) +{ + udi_vendor_alternate_setting = udc_get_interface_desc()->bAlternateSetting; + if (0 == udi_vendor_alternate_setting) { + // Call application callback + // to notify that interface is enabled + if (!UDI_VENDOR_ENABLE_EXT()) { + return false; + } + } + return true; +} + + +void udi_vendor_disable(void) +{ + if (1 == udi_vendor_alternate_setting) { + UDI_VENDOR_DISABLE_EXT(); + } +} + + +bool udi_vendor_setup(void) +{ + if (Udd_setup_is_in()) { + if ((Udd_setup_type() == USB_REQ_TYPE_VENDOR) + && (udd_g_ctrlreq.req.bRequest == 0)) { + return UDI_VENDOR_SETUP_IN_RECEIVED(); + } + } + if (Udd_setup_is_out()) { + if ((Udd_setup_type() == USB_REQ_TYPE_VENDOR) + && (udd_g_ctrlreq.req.bRequest == 0) + && (0 != udd_g_ctrlreq.req.wLength)) { + return UDI_VENDOR_SETUP_OUT_RECEIVED(); + } + } + return false; // Not supported request +} + +uint8_t udi_vendor_getsetting(void) +{ + return udi_vendor_alternate_setting; +} +//@} + +#if UDI_VENDOR_EPS_SIZE_INT_FS +/** + * \brief Start a transfer on interrupt IN + * + * When the transfer is finished or aborted (stall, reset, ...), the \a callback is called. + * The \a callback returns the transfer status and eventually the number of byte transfered. + * + * \param buf Buffer on Internal RAM to send or fill. + * It must be align, then use COMPILER_WORD_ALIGNED. + * \param buf_size Buffer size to send or fill + * \param callback NULL or function to call at the end of transfer + * + * \return \c 1 if function was successfully done, otherwise \c 0. + */ +bool udi_vendor_interrupt_in_run(uint8_t * buf, iram_size_t buf_size, + udd_callback_trans_t callback) +{ + return udd_ep_run(UDI_VENDOR_EP_INTERRUPT_IN, + false, + buf, + buf_size, + callback); +} + + +/** + * \brief Start a transfer on interrupt OUT + * + * When the transfer is finished or aborted (stall, reset, ...), the \a callback is called. + * The \a callback returns the transfer status and eventually the number of byte transfered. + * + * \param buf Buffer on Internal RAM to send or fill. + * It must be align, then use COMPILER_WORD_ALIGNED. + * \param buf_size Buffer size to send or fill + * \param callback NULL or function to call at the end of transfer + * + * \return \c 1 if function was successfully done, otherwise \c 0. + */ +bool udi_vendor_interrupt_out_run(uint8_t * buf, iram_size_t buf_size, + udd_callback_trans_t callback) +{ + return udd_ep_run(UDI_VENDOR_EP_INTERRUPT_OUT, + false, + buf, + buf_size, + callback); +} +#endif + +#if UDI_VENDOR_EPS_SIZE_BULK_FS +/** + * \brief Start a transfer on bulk IN + * + * When the transfer is finished or aborted (stall, reset, ...), the \a callback is called. + * The \a callback returns the transfer status and eventually the number of byte transfered. + * + * \param buf Buffer on Internal RAM to send or fill. + * It must be align, then use COMPILER_WORD_ALIGNED. + * \param buf_size Buffer size to send or fill + * \param callback NULL or function to call at the end of transfer + * + * \return \c 1 if function was successfully done, otherwise \c 0. + */ +bool udi_vendor_bulk_in_run(uint8_t * buf, iram_size_t buf_size, + udd_callback_trans_t callback) +{ + return udd_ep_run(UDI_VENDOR_EP_BULK_IN, + false, + buf, + buf_size, + callback); +} + + +/** + * \brief Start a transfer on bulk OUT + * + * When the transfer is finished or aborted (stall, reset, ...), the \a callback is called. + * The \a callback returns the transfer status and eventually the number of byte transfered. + * + * \param buf Buffer on Internal RAM to send or fill. + * It must be align, then use COMPILER_WORD_ALIGNED. + * \param buf_size Buffer size to send or fill + * \param callback NULL or function to call at the end of transfer + * + * \return \c 1 if function was successfully done, otherwise \c 0. + */ +bool udi_vendor_bulk_out_run(uint8_t * buf, iram_size_t buf_size, + udd_callback_trans_t callback) +{ + return udd_ep_run(UDI_VENDOR_EP_BULK_OUT, + false, + buf, + buf_size, + callback); +} +#endif + + +#if UDI_VENDOR_EPS_SIZE_ISO_FS +/** + * \brief Start a transfer on interrupt IN + * + * When the transfer is finished or aborted (stall, reset, ...), the \a callback is called. + * The \a callback returns the transfer status and eventually the number of byte transfered. + * + * \param buf Buffer on Internal RAM to send or fill. + * It must be align, then use COMPILER_WORD_ALIGNED. + * \param buf_size Buffer size to send or fill + * \param callback NULL or function to call at the end of transfer + * + * \return \c 1 if function was successfully done, otherwise \c 0. + */ +bool udi_vendor_iso_in_run(uint8_t * buf, iram_size_t buf_size, + udd_callback_trans_t callback) +{ + return udd_ep_run(UDI_VENDOR_EP_ISO_IN, + false, + buf, + buf_size, + callback); +} + + +/** + * \brief Start a transfer on interrupt OUT + * + * When the transfer is finished or aborted (stall, reset, ...), the \a callback is called. + * The \a callback returns the transfer status and eventually the number of byte transfered. + * + * \param buf Buffer on Internal RAM to send or fill. + * It must be align, then use COMPILER_WORD_ALIGNED. + * \param buf_size Buffer size to send or fill + * \param callback NULL or function to call at the end of transfer + * + * \return \c 1 if function was successfully done, otherwise \c 0. + */ +bool udi_vendor_iso_out_run(uint8_t * buf, iram_size_t buf_size, + udd_callback_trans_t callback) +{ + return udd_ep_run(UDI_VENDOR_EP_ISO_OUT, + false, + buf, + buf_size, + callback); +} +#endif + +//@} diff --git a/AVR Code/USB_BULK_TEST/src/ASF/common/services/usb/class/vendor/device/udi_vendor.h b/AVR Code/USB_BULK_TEST/src/ASF/common/services/usb/class/vendor/device/udi_vendor.h new file mode 100644 index 00000000..99b72969 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/common/services/usb/class/vendor/device/udi_vendor.h @@ -0,0 +1,622 @@ +/** + * \file + * + * \brief USB Vendor class interface definitions. + * + * Copyright (c) 2011-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ + +#ifndef _UDI_VENDOR_H_ +#define _UDI_VENDOR_H_ + +#include "conf_usb.h" +#include "usb_protocol.h" +#include "usb_protocol_vendor.h" +#include "udd.h" +#include "udc_desc.h" +#include "udi.h" + +#ifdef __cplusplus +extern "C" { +#endif + +// Configuration Full Speed check +#ifndef UDI_VENDOR_EPS_SIZE_INT_FS +# error UDI_VENDOR_EPS_SIZE_INT_FS must be defined in conf_usb.h file. +#endif +#ifndef UDI_VENDOR_EPS_SIZE_BULK_FS +# error UDI_VENDOR_EPS_SIZE_BULK_FS must be defined in conf_usb.h file. +#endif +#ifndef UDI_VENDOR_EPS_SIZE_ISO_FS +# error UDI_VENDOR_EPS_SIZE_ISO_FS must be defined in conf_usb.h file. +#endif + +// Configuration High Speed check +#ifdef USB_DEVICE_HS_SUPPORT +# ifndef UDI_VENDOR_EPS_SIZE_INT_HS +# error UDI_VENDOR_EPS_SIZE_INT_HS must be defined in conf_usb.h file. +# endif +# ifndef UDI_VENDOR_EPS_SIZE_BULK_HS +# error UDI_VENDOR_EPS_SIZE_BULK_HS must be defined in conf_usb.h file. +# endif +# ifndef UDI_VENDOR_EPS_SIZE_ISO_HS +# error UDI_VENDOR_EPS_SIZE_ISO_HS must be defined in conf_usb.h file. +# endif +#endif + +/** + * \addtogroup udi_vendor_group_udc + * @{ + */ +//! Global structure which contains standard UDI interface for UDC +extern UDC_DESC_STORAGE udi_api_t udi_api_vendor; +//@} + +/** + * \ingroup udi_vendor_group + * \defgroup udi_vendor_group_desc USB interface descriptors + * + * The following structures provide predefined USB interface descriptors. + * It must be used to define the final USB descriptors. + */ +//@{ + +/** + * \name Endpoint descriptors + * @{ + */ +#if UDI_VENDOR_EPS_SIZE_INT_FS +# define UDI_VENDOR_EPS_INT_DESC \ + .ep_interrupt_in.bLength = sizeof(usb_ep_desc_t),\ + .ep_interrupt_in.bDescriptorType = USB_DT_ENDPOINT,\ + .ep_interrupt_in.bEndpointAddress = UDI_VENDOR_EP_INTERRUPT_IN,\ + .ep_interrupt_in.bmAttributes = USB_EP_TYPE_INTERRUPT,\ + .ep_interrupt_in.bInterval = 1,\ + .ep_interrupt_out.bLength = sizeof(usb_ep_desc_t),\ + .ep_interrupt_out.bDescriptorType = USB_DT_ENDPOINT,\ + .ep_interrupt_out.bEndpointAddress = UDI_VENDOR_EP_INTERRUPT_OUT,\ + .ep_interrupt_out.bmAttributes = USB_EP_TYPE_INTERRUPT,\ + .ep_interrupt_out.bInterval = 1, + +# define UDI_VENDOR_EPS_INT_DESC_FS \ + .ep_interrupt_in.wMaxPacketSize = LE16(UDI_VENDOR_EPS_SIZE_INT_FS),\ + .ep_interrupt_out.wMaxPacketSize = LE16(UDI_VENDOR_EPS_SIZE_INT_FS), + +# define UDI_VENDOR_EPS_INT_DESC_HS \ + .ep_interrupt_in.wMaxPacketSize = LE16(UDI_VENDOR_EPS_SIZE_INT_HS),\ + .ep_interrupt_out.wMaxPacketSize = LE16(UDI_VENDOR_EPS_SIZE_INT_HS), + +#else +# define UDI_VENDOR_EPS_INT_DESC +# define UDI_VENDOR_EPS_INT_DESC_FS +# define UDI_VENDOR_EPS_INT_DESC_HS +#endif + +#if UDI_VENDOR_EPS_SIZE_BULK_FS +# define UDI_VENDOR_EPS_BULK_DESC \ + .ep_bulk_in.bLength = sizeof(usb_ep_desc_t),\ + .ep_bulk_in.bDescriptorType = USB_DT_ENDPOINT,\ + .ep_bulk_in.bEndpointAddress = UDI_VENDOR_EP_BULK_IN,\ + .ep_bulk_in.bmAttributes = USB_EP_TYPE_BULK,\ + .ep_bulk_in.bInterval = 0,\ + .ep_bulk_out.bLength = sizeof(usb_ep_desc_t),\ + .ep_bulk_out.bDescriptorType = USB_DT_ENDPOINT,\ + .ep_bulk_out.bEndpointAddress = UDI_VENDOR_EP_BULK_OUT,\ + .ep_bulk_out.bmAttributes = USB_EP_TYPE_BULK,\ + .ep_bulk_out.bInterval = 0, + +# define UDI_VENDOR_EPS_BULK_DESC_FS \ + .ep_bulk_in.wMaxPacketSize = LE16(UDI_VENDOR_EPS_SIZE_BULK_FS),\ + .ep_bulk_out.wMaxPacketSize = LE16(UDI_VENDOR_EPS_SIZE_BULK_FS), + +# define UDI_VENDOR_EPS_BULK_DESC_HS \ + .ep_bulk_in.wMaxPacketSize = LE16(UDI_VENDOR_EPS_SIZE_BULK_HS),\ + .ep_bulk_out.wMaxPacketSize = LE16(UDI_VENDOR_EPS_SIZE_BULK_HS), + +#else +# define UDI_VENDOR_EPS_BULK_DESC +# define UDI_VENDOR_EPS_BULK_DESC_FS +# define UDI_VENDOR_EPS_BULK_DESC_HS +#endif + +#if UDI_VENDOR_EPS_SIZE_ISO_FS +# define UDI_VENDOR_EPS_ISO_DESC \ + .ep_iso_in.bLength = sizeof(usb_ep_desc_t),\ + .ep_iso_in.bDescriptorType = USB_DT_ENDPOINT,\ + .ep_iso_in.bEndpointAddress = UDI_VENDOR_EP_ISO_IN,\ + .ep_iso_in.bmAttributes = USB_EP_TYPE_ISOCHRONOUS,\ + .ep_iso_in.bInterval = 1, + //.ep_iso_out.bLength = sizeof(usb_ep_desc_t),\ + //.ep_iso_out.bDescriptorType = USB_DT_ENDPOINT,\ + //.ep_iso_out.bEndpointAddress = UDI_VENDOR_EP_ISO_OUT,\ + //.ep_iso_out.bmAttributes = USB_EP_TYPE_ISOCHRONOUS,\ + //.ep_iso_out.bInterval = 1, + +# define UDI_VENDOR_EPS_ISO_DESC_FS \ + .ep_iso_in.wMaxPacketSize = LE16(UDI_VENDOR_EPS_SIZE_ISO_FS), + //.ep_iso_out.wMaxPacketSize = LE16(UDI_VENDOR_EPS_SIZE_ISO_FS), + +# define UDI_VENDOR_EPS_ISO_DESC_HS \ + .ep_iso_in.wMaxPacketSize = LE16(UDI_VENDOR_EPS_SIZE_ISO_HS), + //.ep_iso_out.wMaxPacketSize = LE16(UDI_VENDOR_EPS_SIZE_ISO_HS), + +#else +# define UDI_VENDOR_EPS_ISO_DESC +# define UDI_VENDOR_EPS_ISO_DESC_FS +# define UDI_VENDOR_EPS_ISO_DESC_HS +#endif + +//@} + +//! Interface descriptor structure for vendor Class interface +typedef struct { + //usb_iface_desc_t iface0; + usb_iface_desc_t iface1; +#if UDI_VENDOR_EPS_SIZE_INT_FS + usb_ep_desc_t ep_interrupt_in; + usb_ep_desc_t ep_interrupt_out; +#endif +#if UDI_VENDOR_EPS_SIZE_BULK_FS + usb_ep_desc_t ep_bulk_in; + usb_ep_desc_t ep_bulk_out; +#endif +#if UDI_VENDOR_EPS_SIZE_ISO_FS + usb_ep_desc_t ep_iso_in; + //usb_ep_desc_t ep_iso_out; +#endif +} udi_vendor_desc_t; + +//! By default no string associated to this interface +#ifndef UDI_VENDOR_STRING_ID +#define UDI_VENDOR_STRING_ID 0 +#endif + +//! Maximum 6 endpoints used by vendor interface +#define UDI_VENDOR_EP_NB_INT ((UDI_VENDOR_EPS_SIZE_INT_FS)?2:0) +#define UDI_VENDOR_EP_NB_BULK ((UDI_VENDOR_EPS_SIZE_BULK_FS)?2:0) +#define UDI_VENDOR_EP_NB_ISO ((UDI_VENDOR_EPS_SIZE_ISO_FS)?1:0) //Used to be 2:0!! +#define UDI_VENDOR_EP_NB (UDI_VENDOR_EP_NB_INT+UDI_VENDOR_EP_NB_BULK+UDI_VENDOR_EP_NB_ISO) + + +//! Content of vendor interface descriptor for all speeds +#define UDI_VENDOR_DESC \ + /*.iface0.bLength = sizeof(usb_iface_desc_t),\ + .iface0.bDescriptorType = USB_DT_INTERFACE,\ + .iface0.bInterfaceNumber = UDI_VENDOR_IFACE_NUMBER,\ + .iface0.bAlternateSetting = 0,\ + .iface0.bNumEndpoints = 0,\ + .iface0.bInterfaceClass = VENDOR_CLASS,\ + .iface0.bInterfaceSubClass = VENDOR_SUBCLASS,\ + .iface0.bInterfaceProtocol = VENDOR_PROTOCOL,\ + .iface0.iInterface = UDI_VENDOR_STRING_ID,\ + */.iface1.bLength = sizeof(usb_iface_desc_t),\ + .iface1.bDescriptorType = USB_DT_INTERFACE,\ + .iface1.bInterfaceNumber = UDI_VENDOR_IFACE_NUMBER,\ + .iface1.bAlternateSetting = 0,\ + .iface1.bNumEndpoints = UDI_VENDOR_EP_NB,\ + .iface1.bInterfaceClass = VENDOR_CLASS,\ + .iface1.bInterfaceSubClass = VENDOR_SUBCLASS,\ + .iface1.bInterfaceProtocol = VENDOR_PROTOCOL,\ + .iface1.iInterface = UDI_VENDOR_STRING_ID,\ + UDI_VENDOR_EPS_INT_DESC \ + UDI_VENDOR_EPS_BULK_DESC \ + UDI_VENDOR_EPS_ISO_DESC \ + +//! Content of vendor interface descriptor for full speed only +#define UDI_VENDOR_DESC_FS {\ + UDI_VENDOR_DESC \ + UDI_VENDOR_EPS_INT_DESC_FS \ + UDI_VENDOR_EPS_BULK_DESC_FS \ + UDI_VENDOR_EPS_ISO_DESC_FS \ + } + +//! Content of vendor interface descriptor for high speed only +#define UDI_VENDOR_DESC_HS {\ + UDI_VENDOR_DESC \ + UDI_VENDOR_EPS_INT_DESC_HS \ + UDI_VENDOR_EPS_BULK_DESC_HS \ + UDI_VENDOR_EPS_ISO_DESC_HS \ + } +//@} + + +/** + * \ingroup udi_group + * \defgroup udi_vendor_group USB Device Interface (UDI) for Vendor Class + * + * Common APIs used by high level application to use this USB class. + * + * These routines are used to transfer data to/from USB VENDOR endpoints. + * + * See \ref udi_vendor_quickstart. + * @{ + */ + +#if UDI_VENDOR_EPS_SIZE_INT_FS || defined(__DOXYGEN__) +/** + * \brief Start a transfer on interrupt IN + * + * When the transfer is finished or aborted (stall, reset, ...), the \a callback is called. + * The \a callback returns the transfer status and eventually the number of byte transfered. + * + * \param buf Buffer on Internal RAM to send or fill. + * It must be align, then use COMPILER_WORD_ALIGNED. + * \param buf_size Buffer size to send or fill + * \param callback NULL or function to call at the end of transfer + * + * \return \c 1 if function was successfully done, otherwise \c 0. + */ +bool udi_vendor_interrupt_in_run(uint8_t * buf, iram_size_t buf_size, + udd_callback_trans_t callback); + +/** + * \brief Start a transfer on interrupt OUT + * + * When the transfer is finished or aborted (stall, reset, ...), the \a callback is called. + * The \a callback returns the transfer status and eventually the number of byte transfered. + * + * \param buf Buffer on Internal RAM to send or fill. + * It must be align, then use COMPILER_WORD_ALIGNED. + * \param buf_size Buffer size to send or fill + * \param callback NULL or function to call at the end of transfer + * + * \return \c 1 if function was successfully done, otherwise \c 0. + */ +bool udi_vendor_interrupt_out_run(uint8_t * buf, iram_size_t buf_size, + udd_callback_trans_t callback); +#endif + +#if UDI_VENDOR_EPS_SIZE_BULK_FS || defined(__DOXYGEN__) +/** + * \brief Start a transfer on bulk IN + * + * When the transfer is finished or aborted (stall, reset, ...), the \a callback is called. + * The \a callback returns the transfer status and eventually the number of byte transfered. + * + * \param buf Buffer on Internal RAM to send or fill. + * It must be align, then use COMPILER_WORD_ALIGNED. + * \param buf_size Buffer size to send or fill + * \param callback NULL or function to call at the end of transfer + * + * \return \c 1 if function was successfully done, otherwise \c 0. + */ +bool udi_vendor_bulk_in_run(uint8_t * buf, iram_size_t buf_size, + udd_callback_trans_t callback); + +/** + * \brief Start a transfer on bulk OUT + * + * When the transfer is finished or aborted (stall, reset, ...), the \a callback is called. + * The \a callback returns the transfer status and eventually the number of byte transfered. + * + * \param buf Buffer on Internal RAM to send or fill. + * It must be align, then use COMPILER_WORD_ALIGNED. + * \param buf_size Buffer size to send or fill + * \param callback NULL or function to call at the end of transfer + * + * \return \c 1 if function was successfully done, otherwise \c 0. + */ +bool udi_vendor_bulk_out_run(uint8_t * buf, iram_size_t buf_size, + udd_callback_trans_t callback); +#endif + + +#if UDI_VENDOR_EPS_SIZE_ISO_FS || defined(__DOXYGEN__) +/** + * \brief Start a transfer on isochronous IN + * + * When the transfer is finished or aborted (stall, reset, ...), the \a callback is called. + * The \a callback returns the transfer status and eventually the number of byte transfered. + * + * \param buf Buffer on Internal RAM to send or fill. + * It must be align, then use COMPILER_WORD_ALIGNED. + * \param buf_size Buffer size to send or fill + * \param callback NULL or function to call at the end of transfer + * + * \return \c 1 if function was successfully done, otherwise \c 0. + */ +bool udi_vendor_iso_in_run(uint8_t * buf, iram_size_t buf_size, + udd_callback_trans_t callback); + +/** + * \brief Start a transfer on isochronous OUT + * + * When the transfer is finished or aborted (stall, reset, ...), the \a callback is called. + * The \a callback returns the transfer status and eventually the number of byte transfered. + * + * \param buf Buffer on Internal RAM to send or fill. + * It must be align, then use COMPILER_WORD_ALIGNED. + * \param buf_size Buffer size to send or fill + * \param callback NULL or function to call at the end of transfer + * + * \return \c 1 if function was successfully done, otherwise \c 0. + */ +bool udi_vendor_iso_out_run(uint8_t * buf, iram_size_t buf_size, + udd_callback_trans_t callback); +#endif + +//@} + +/** + * \page udi_vendor_quickstart Quick start guide for USB Device Vendor module (UDI Vendor) + * + * This is the quick start guide for the \ref udi_vendor_group + * "USB device interface Vendor module (UDI Vendor)" with step-by-step instructions on + * how to configure and use the modules in a selection of use cases. + * + * The use cases contain several code fragments. The code fragments in the + * steps for setup can be copied into a custom initialization function, while + * the steps for usage can be copied into, e.g., the main application function. + * + * Also, you can refer to application note + * + * AVR4901: ASF - USB Device Vendor Class Application. + * + * \section udi_vendor_basic_use_case Basic use case + * In this basic use case, the "USB Vendor (Single Interface Device)" module is used. + * The "USB Vendor (Composite Device)" module usage is described in \ref udi_vendor_use_cases + * "Advanced use cases". + * + * \section udi_vendor_basic_use_case_setup Setup steps + * \subsection udi_vendor_basic_use_case_setup_prereq Prerequisites + * \copydetails udc_basic_use_case_setup_prereq + * \subsection udi_vendor_basic_use_case_setup_code Example code + * \copydetails udc_basic_use_case_setup_code + * \subsection udi_vendor_basic_use_case_setup_flow Workflow + * \copydetails udc_basic_use_case_setup_flow + * + * \section udi_vendor_basic_use_case_usage Usage steps + * + * \subsection udi_vendor_basic_use_case_usage_code Example code + * Content of conf_usb.h: + * \code + * #define UDI_VENDOR_ENABLE_EXT() my_callback_vendor_enable() + * extern bool my_callback_vendor_enable(void); + * #define UDI_VENDOR_DISABLE_EXT() my_callback_vendor_disable() + * extern void my_callback_vendor_disable(void); + * + * #define UDI_VENDOR_SETUP_OUT_RECEIVED() my_vendor_setup_out_received() + * extern bool my_vendor_setup_out_received(void); + * #define UDI_VENDOR_SETUP_IN_RECEIVED() my_vendor_setup_in_received() + * extern bool my_vendor_setup_in_received(void); + * + * #define UDI_VENDOR_EPS_SIZE_INT_FS 64 + * #define UDI_VENDOR_EPS_SIZE_BULK_FS 64 + * #define UDI_VENDOR_EPS_SIZE_ISO_FS 256 + * #define UDI_VENDOR_EPS_SIZE_INT_HS 64 + * #define UDI_VENDOR_EPS_SIZE_BULK_HS 512 + * #define UDI_VENDOR_EPS_SIZE_ISO_HS 64 + + * #include "udi_vendor_conf.h" // At the end of conf_usb.h file +\endcode + * + * Add to application C-file: + * \code + static bool my_flag_autorize_vendor_transfert = false; + bool my_callback_vendor_enable(void) + { + my_flag_autorize_vendor_transfert = true; + return true; + } + void my_callback_vendor_disable(void) + { + my_flag_autorize_vendor_transfert = false; + } + + uint8_t global_buffer[X]; + void task(void) + { + if (my_flag_autorize_vendor_transfert) { + // Enable a transfer on OUT interrupt endpoint + udi_vendor_interrupt_out_run( + global_buffer, + sizeof(global_buffer), + NULL); + // Enable a transfer on IN interrupt endpoint + udi_vendor_interrupt_in_run( + global_buffer, + sizeof(global_buffer), + NULL); + ... + } + } +\endcode + * + * \subsection udi_vendor_basic_use_case_setup_flow Workflow + * -# Ensure that conf_usb.h is available and contains the following configuration + * which is the USB device Vendor configuration: + * - \code #define UDI_VENDOR_ENABLE_EXT() my_callback_vendor_enable() + extern bool my_callback_vendor_enable(void); \endcode + * \note After the device enumeration (detecting and identifying USB devices), + * the USB host starts the device configuration. When the USB Vendor interface + * from the device is accepted by the host, the USB host enables this interface and the + * UDI_VENDOR_ENABLE_EXT() callback function is called and return true. + * Thus, when this event is received, the Vendor transfers can start. + * - \code #define UDI_VENDOR_DISABLE_EXT() my_callback_vendor_disable() + extern void my_callback_vendor_disable(void); \endcode + * \note When the USB device is unplugged or is reset by the USB host, the USB + * interface is disabled and the UDI_VENDOR_DISABLE_EXT() callback function + * is called. Thus, it is recommended to disable the data Vendor transfer. + * - \code #define UDI_VENDOR_SETUP_OUT_RECEIVED() my_vendor_setup_out_received() + extern bool my_vendor_setup_out_received(void); + #define UDI_VENDOR_SETUP_IN_RECEIVED() my_vendor_setup_in_received() + extern bool my_vendor_setup_in_received(void); \endcode + * \note The control requests for the interface Vendor will be processed + * through these both callbacks. + * - \code #define UDI_VENDOR_EPS_SIZE_INT_FS 64 + #define UDI_VENDOR_EPS_SIZE_BULK_FS 64 + #define UDI_VENDOR_EPS_SIZE_ISO_FS 256 + #define UDI_VENDOR_EPS_SIZE_INT_HS 64 + #define UDI_VENDOR_EPS_SIZE_BULK_HS 512 + #define UDI_VENDOR_EPS_SIZE_ISO_HS 64 \endcode + * \note The endpoint size is defined by the final application, and can be + * disabled if the full speed size is zero. + * -# The Vendor transfers on interrupt, bulk and isochronous endpoints are + * done through these functions: + * - \code // Start a transfer on interrupt IN + udi_vendor_interrupt_in_run(); + // Start a transfer on interrupt OUT + udi_vendor_interrupt_out_run(); + // Start a transfer on bulk IN + udi_vendor_bulk_in_run(); + // Start a transfer on bulk OUT + udi_vendor_bulk_out_run(); + // Start a transfer on isochronous IN + udi_vendor_iso_in_run(); + // Start a transfer on isochronous OUT + udi_vendor_iso_out_run(); \endcode + * + * \section udi_vendor_use_cases Advanced use cases + * For more advanced use of the UDI Vendor module, see the following use cases: + * - \subpage udi_vendor_use_case_composite + * - \subpage udc_use_case_1 + * - \subpage udc_use_case_2 + * - \subpage udc_use_case_3 + * - \subpage udc_use_case_5 + * - \subpage udc_use_case_6 + */ + +/** + * \page udi_vendor_use_case_composite Vendor in a composite device + * + * A USB Composite Device is a USB Device which uses more than one USB class. + * In this use case, the "USB Vendor (Composite Device)" module is used to + * create a USB composite device. Thus, this USB module can be associated with + * another "Composite Device" module, like "USB HID Mouse (Composite Device)". + * + * Also, you can refer to application note + * + * AVR4902 ASF - USB Composite Device. + * + * \section udi_vendor_use_case_composite_setup Setup steps + * For the setup code of this use case to work, the + * \ref udi_vendor_basic_use_case "basic use case" must be followed. + * + * \section udi_vendor_use_case_composite_usage Usage steps + * + * \subsection udi_vendor_use_case_composite_usage_code Example code + * Content of conf_usb.h: + * \code + #define USB_DEVICE_EP_CTRL_SIZE 64 + #define USB_DEVICE_NB_INTERFACE (X+1) + #define USB_DEVICE_MAX_EP (X) to (X+6) + + #define UDI_VENDOR_EP_INTERRUPT_IN (1 | USB_EP_DIR_IN) + #define UDI_VENDOR_EP_INTERRUPT_OUT (2 | USB_EP_DIR_OUT) + #define UDI_VENDOR_EP_BULK_IN (3 | USB_EP_DIR_IN) + #define UDI_VENDOR_EP_BULK_OUT (4 | USB_EP_DIR_OUT) + #define UDI_VENDOR_EP_ISO_IN (5 | USB_EP_DIR_IN) + #define UDI_VENDOR_EP_ISO_OUT (6 | USB_EP_DIR_OUT) + + #define UDI_VENDOR_IFACE_NUMBER X + + #define UDI_COMPOSITE_DESC_T \ + udi_vendor_desc_t udi_vendor; \ + ... + #define UDI_COMPOSITE_DESC_FS \ + .udi_vendor = UDI_VENDOR_DESC, \ + ... + #define UDI_COMPOSITE_DESC_HS \ + .udi_vendor = UDI_VENDOR_DESC, \ + ... + #define UDI_COMPOSITE_API \ + &udi_api_vendor, \ + ... +\endcode + * + * \subsection udi_vendor_use_case_composite_usage_flow Workflow + * -# Ensure that conf_usb.h is available and contains the following parameters + * required for a USB composite device configuration: + * - \code // Endpoint control size, This must be: + // - 8, 16, 32 or 64 for full speed device (8 is recommended to save RAM) + // - 64 for a high speed device + #define USB_DEVICE_EP_CTRL_SIZE 64 + // Total Number of interfaces on this USB device. + // Add 1 for Vendor. + #define USB_DEVICE_NB_INTERFACE (X+1) + // Total number of endpoints on this USB device. + // This must include each endpoint for each interface. + // Add 0 to 6 for Vendor interface. + // The number depends on UDI_VENDOR_EPS_SIZE_..._FS defines. + #define USB_DEVICE_MAX_EP (X) to (X+6) \endcode + * -# Ensure that conf_usb.h contains the description of + * composite device: + * - \code // The endpoint numbers chosen by you for the Vendor. + // The endpoint numbers starting from 1. + #define UDI_VENDOR_EP_INTERRUPT_IN (1 | USB_EP_DIR_IN) + #define UDI_VENDOR_EP_INTERRUPT_OUT (2 | USB_EP_DIR_OUT) + #define UDI_VENDOR_EP_BULK_IN (3 | USB_EP_DIR_IN) + #define UDI_VENDOR_EP_BULK_OUT (4 | USB_EP_DIR_OUT) + #define UDI_VENDOR_EP_ISO_IN (5 | USB_EP_DIR_IN) + #define UDI_VENDOR_EP_ISO_OUT (6 | USB_EP_DIR_OUT) + // The interface index of an interface starting from 0 + #define UDI_VENDOR_IFACE_NUMBER X \endcode + * -# Ensure that conf_usb.h contains the following parameters + * required for a USB composite device configuration: + * - \code // USB Interfaces descriptor structure + #define UDI_COMPOSITE_DESC_T \ + ... + udi_vendor_desc_t udi_vendor; \ + ... + // USB Interfaces descriptor value for Full Speed + #define UDI_COMPOSITE_DESC_FS \ + ... + .udi_vendor = UDI_VENDOR_DESC_FS, \ + ... + // USB Interfaces descriptor value for High Speed + #define UDI_COMPOSITE_DESC_HS \ + ... + .udi_vendor = UDI_VENDOR_DESC_HS, \ + ... + // USB Interface APIs + #define UDI_COMPOSITE_API \ + ... + &udi_api_vendor, \ + ... \endcode + * - \note The descriptors order given in the four lists above must be the + * same as the order defined by all interface indexes. The interface index + * orders are defined through UDI_X_IFACE_NUMBER defines. + */ + +#ifdef __cplusplus +} +#endif +#endif // _UDI_VENDOR_H_ diff --git a/AVR Code/USB_BULK_TEST/src/ASF/common/services/usb/class/vendor/device/udi_vendor_conf.h b/AVR Code/USB_BULK_TEST/src/ASF/common/services/usb/class/vendor/device/udi_vendor_conf.h new file mode 100644 index 00000000..e2fef15a --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/common/services/usb/class/vendor/device/udi_vendor_conf.h @@ -0,0 +1,123 @@ +/** + * \file + * + * \brief Default Vendor class configuration for a USB Device + * with a single interface + * + * Copyright (c) 2011-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ + +#ifndef _UDI_VENDOR_CONF_H_ +#define _UDI_VENDOR_CONF_H_ + +#include "conf_usb.h" + +/** + * \addtogroup udi_vendor_group_single_desc + * @{ + */ + +//! Control endpoint size +#define USB_DEVICE_EP_CTRL_SIZE 64 + +//! Endpoint numbers used by vendor interface. +//! Note: The order of endpoint can depend on USB hardware capability +//! when a specific mapping is used on USB DPRAM. +#if SAM3S || SAM4S || SAM4E +# define UDI_VENDOR_EP_INTERRUPT_IN (3 | USB_EP_DIR_IN) +# define UDI_VENDOR_EP_INTERRUPT_OUT (6 | USB_EP_DIR_OUT) +# define UDI_VENDOR_EP_BULK_IN (1 | USB_EP_DIR_IN) +# define UDI_VENDOR_EP_BULK_OUT (2 | USB_EP_DIR_OUT) +# define UDI_VENDOR_EP_ISO_IN (4 | USB_EP_DIR_IN) +# define UDI_VENDOR_EP_ISO_OUT (5 | USB_EP_DIR_OUT) +#elif SAM3U +# define UDI_VENDOR_EP_INTERRUPT_IN (3 | USB_EP_DIR_IN) +# define UDI_VENDOR_EP_INTERRUPT_OUT (4 | USB_EP_DIR_OUT) +# define UDI_VENDOR_EP_BULK_IN (1 | USB_EP_DIR_IN) +# define UDI_VENDOR_EP_BULK_OUT (2 | USB_EP_DIR_OUT) +# define UDI_VENDOR_EP_ISO_IN (5 | USB_EP_DIR_IN) +# define UDI_VENDOR_EP_ISO_OUT (6 | USB_EP_DIR_OUT) +#elif SAM3XA +# define UDI_VENDOR_EP_INTERRUPT_IN (3 | USB_EP_DIR_IN) +# define UDI_VENDOR_EP_INTERRUPT_OUT (4 | USB_EP_DIR_OUT) +# define UDI_VENDOR_EP_BULK_IN (5 | USB_EP_DIR_IN) +# define UDI_VENDOR_EP_BULK_OUT (6 | USB_EP_DIR_OUT) +# define UDI_VENDOR_EP_ISO_IN (1 | USB_EP_DIR_IN) +# define UDI_VENDOR_EP_ISO_OUT (2 | USB_EP_DIR_OUT) +#elif SAMG55 +#define UDI_VENDOR_EP_INTERRUPT_IN (1 | USB_EP_DIR_IN) +#define UDI_VENDOR_EP_INTERRUPT_OUT (2 | USB_EP_DIR_OUT) +#define UDI_VENDOR_EP_BULK_IN (3 | USB_EP_DIR_IN) +#define UDI_VENDOR_EP_BULK_OUT (4 | USB_EP_DIR_OUT) +#else +#define UDI_VENDOR_EP_INTERRUPT_IN (1 | USB_EP_DIR_IN) +#define UDI_VENDOR_EP_INTERRUPT_OUT (2 | USB_EP_DIR_OUT) +#define UDI_VENDOR_EP_BULK_IN ((((UDI_VENDOR_EPS_SIZE_INT_FS)?2:0)+1)\ + | USB_EP_DIR_IN) +#define UDI_VENDOR_EP_BULK_OUT ((((UDI_VENDOR_EPS_SIZE_INT_FS)?2:0)+2)\ + | USB_EP_DIR_OUT) +#define UDI_VENDOR_EP_ISO_IN ((((UDI_VENDOR_EPS_SIZE_INT_FS)?2:0)+ \ + ((UDI_VENDOR_EPS_SIZE_BULK_FS)?2:0)+1)\ + | USB_EP_DIR_IN) +#define UDI_VENDOR_EP_ISO_OUT ((((UDI_VENDOR_EPS_SIZE_INT_FS)?2:0)+ \ + ((UDI_VENDOR_EPS_SIZE_BULK_FS)?2:0)+2)\ + | USB_EP_DIR_OUT) +#endif + +//! Interface number is 0 because it is the unique interface +#define UDI_VENDOR_IFACE_NUMBER 0 + +/** + * \name UDD Configuration + */ +//@{ +//! Maximum 6 endpoints used by vendor interface +#define UDI_VENDOR_EP_NB_INT ((UDI_VENDOR_EPS_SIZE_INT_FS)?2:0) +#define UDI_VENDOR_EP_NB_BULK ((UDI_VENDOR_EPS_SIZE_BULK_FS)?2:0) +#define UDI_VENDOR_EP_NB_ISO ((UDI_VENDOR_EPS_SIZE_ISO_FS)?2:0) +#define USB_DEVICE_MAX_EP (UDI_VENDOR_EP_NB_INT+UDI_VENDOR_EP_NB_BULK+UDI_VENDOR_EP_NB_ISO) +//@} + +//@} + +#include "udi_vendor.h" + +#endif // _UDI_VENDOR_CONF_H_ diff --git a/AVR Code/USB_BULK_TEST/src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.c b/AVR Code/USB_BULK_TEST/src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.c new file mode 100644 index 00000000..ae0cc47d --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/common/services/usb/class/vendor/device/udi_vendor_desc.c @@ -0,0 +1,190 @@ +/** + * \file + * + * \brief Default descriptors for a USB Device with a single vendor class + * interface + * + * Copyright (c) 2011-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ + +#include "conf_usb.h" +#include "udd.h" +#include "udc_desc.h" +#include "udi_vendor.h" + + +/** + * \defgroup udi_vendor_group_single_desc USB device descriptors for a single interface + * + * The following structures provide the USB device descriptors required for + * USB Device with a single interface Vendor Class. + * + * It is ready to use and do not require more definition. + * @{ + */ + +//! Only one interface for this device +#define USB_DEVICE_NB_INTERFACE 1 + +//! USB Device Descriptor +UDC_DATA(4) +UDC_DESC_STORAGE usb_dev_desc_t udc_device_desc = { + .bLength = sizeof(usb_dev_desc_t), + .bDescriptorType = USB_DT_DEVICE, + .bcdUSB = LE16(USB_V2_0), + .bDeviceClass = 0, + .bDeviceSubClass = 0, + .bDeviceProtocol = 0, + .bMaxPacketSize0 = USB_DEVICE_EP_CTRL_SIZE, + .idVendor = LE16(USB_DEVICE_VENDOR_ID), + .idProduct = LE16(USB_DEVICE_PRODUCT_ID), + .bcdDevice = LE16((USB_DEVICE_MAJOR_VERSION << 8) + | USB_DEVICE_MINOR_VERSION), +#ifdef USB_DEVICE_MANUFACTURE_NAME + .iManufacturer = 1, +#else + .iManufacturer = 0, // No manufacture string +#endif +#ifdef USB_DEVICE_PRODUCT_NAME + .iProduct = 2, +#else + .iProduct = 0, // No product string +#endif +#ifdef USB_DEVICE_SERIAL_NAME + .iSerialNumber = 3, +#else + .iSerialNumber = 0, // No serial string +#endif + .bNumConfigurations = 1 +}; + + +#ifdef USB_DEVICE_HS_SUPPORT +//! USB Device Qualifier Descriptor for HS +UDC_DATA(4) +UDC_DESC_STORAGE usb_dev_qual_desc_t udc_device_qual = { + .bLength = sizeof(usb_dev_qual_desc_t), + .bDescriptorType = USB_DT_DEVICE_QUALIFIER, + .bcdUSB = LE16(USB_V2_0), + .bDeviceClass = 0, + .bDeviceSubClass = 0, + .bDeviceProtocol = 0, + .bMaxPacketSize0 = USB_DEVICE_EP_CTRL_SIZE, + .bNumConfigurations = 1 +}; +#endif + +//! Structure for USB Device Configuration Descriptor +COMPILER_PACK_SET(1) +typedef struct { + usb_conf_desc_t conf; + udi_vendor_desc_t udi_vendor; +} udc_desc_t; +COMPILER_PACK_RESET() + +//! USB Device Configuration Descriptor filled for FS +UDC_DATA(4) +UDC_DESC_STORAGE udc_desc_t udc_desc_fs = { + .conf.bLength = sizeof(usb_conf_desc_t), + .conf.bDescriptorType = USB_DT_CONFIGURATION, + .conf.wTotalLength = LE16(sizeof(udc_desc_t)), + .conf.bNumInterfaces = USB_DEVICE_NB_INTERFACE, + .conf.bConfigurationValue = 1, + .conf.iConfiguration = 0, + .conf.bmAttributes = USB_CONFIG_ATTR_MUST_SET | USB_DEVICE_ATTR, + .conf.bMaxPower = USB_CONFIG_MAX_POWER(USB_DEVICE_POWER), + .udi_vendor = UDI_VENDOR_DESC_FS, +}; + +#ifdef USB_DEVICE_HS_SUPPORT +//! USB Device Configuration Descriptor filled for HS +UDC_DATA(4) +UDC_DESC_STORAGE udc_desc_t udc_desc_hs = { + .conf.bLength = sizeof(usb_conf_desc_t), + .conf.bDescriptorType = USB_DT_CONFIGURATION, + .conf.wTotalLength = LE16(sizeof(udc_desc_t)), + .conf.bNumInterfaces = USB_DEVICE_NB_INTERFACE, + .conf.bConfigurationValue = 1, + .conf.iConfiguration = 0, + .conf.bmAttributes = USB_CONFIG_ATTR_MUST_SET | USB_DEVICE_ATTR, + .conf.bMaxPower = USB_CONFIG_MAX_POWER(USB_DEVICE_POWER), + .udi_vendor = UDI_VENDOR_DESC_HS, +}; +#endif + + +/** + * \name UDC structures which contains all USB Device definitions + */ +//@{ + +//! Associate an UDI for each USB interface +UDC_DESC_STORAGE udi_api_t *udi_apis[USB_DEVICE_NB_INTERFACE] = { + &udi_api_vendor, +}; + +//! Add UDI with USB Descriptors FS +UDC_DESC_STORAGE udc_config_speed_t udc_config_lsfs[1] = {{ + .desc = (usb_conf_desc_t UDC_DESC_STORAGE*)&udc_desc_fs, + .udi_apis = udi_apis, +}}; + +#ifdef USB_DEVICE_HS_SUPPORT +//! Add UDI with USB Descriptors HS +UDC_DESC_STORAGE udc_config_speed_t udc_config_hs[1] = {{ + .desc = (usb_conf_desc_t UDC_DESC_STORAGE*)&udc_desc_hs, + .udi_apis = udi_apis, +}}; +#endif + +//! Add all information about USB Device in global structure for UDC +UDC_DESC_STORAGE udc_config_t udc_config = { + .confdev_lsfs = &udc_device_desc, + .conf_lsfs = udc_config_lsfs, +#ifdef USB_DEVICE_HS_SUPPORT + .confdev_hs = &udc_device_desc, + .qualifier = &udc_device_qual, + .conf_hs = udc_config_hs, +#endif +}; + +//@} +//@} diff --git a/AVR Code/USB_BULK_TEST/src/ASF/common/services/usb/class/vendor/usb_protocol_vendor.h b/AVR Code/USB_BULK_TEST/src/ASF/common/services/usb/class/vendor/usb_protocol_vendor.h new file mode 100644 index 00000000..5a2df8bc --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/common/services/usb/class/vendor/usb_protocol_vendor.h @@ -0,0 +1,69 @@ +/** + * \file + * + * \brief USB Vendor class protocol definitions. + * + * Copyright (c) 2014-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ + +#ifndef _USB_PROTOCOL_VENDOR_H_ +#define _USB_PROTOCOL_VENDOR_H_ + +/** + * \ingroup usb_protocol_group + * \defgroup usb_vendor_protocol USB Vendor Class definitions + * + * @{ + */ + +/** + * \name Vendor class values + */ +//@{ +#define VENDOR_CLASS 0xFF +#define VENDOR_SUBCLASS 0xFF +#define VENDOR_PROTOCOL 0xFF +//@} + + +//@} + +#endif // _USB_PROTOCOL_VENDOR_H_ diff --git a/AVR Code/USB_BULK_TEST/src/ASF/common/services/usb/udc/udc.c b/AVR Code/USB_BULK_TEST/src/ASF/common/services/usb/udc/udc.c new file mode 100644 index 00000000..66eb7305 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/common/services/usb/udc/udc.c @@ -0,0 +1,1301 @@ +/** + * \file + * + * \brief USB Device Controller (UDC) + * + * Copyright (c) 2009-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ + +#include "conf_usb.h" +#include "usb_protocol.h" +#include "udd.h" +#include "udc_desc.h" +#include "udi.h" +#include "udc.h" + +#include "globals.h" +#include "tiny_dma.h" +#include "tiny_adc.h" +/** + * \ingroup udc_group + * \defgroup udc_group_interne Implementation of UDC + * + * Internal implementation + * @{ + */ + +//! \name Internal variables to manage the USB device +//! @{ + +//! Device status state (see enum usb_device_status in usb_protocol.h) +static le16_t udc_device_status; + +COMPILER_WORD_ALIGNED +//! Device interface setting value +static uint8_t udc_iface_setting = 0; + +//! Device Configuration number selected by the USB host +COMPILER_WORD_ALIGNED +static uint8_t udc_num_configuration = 0; + +//! Pointer on the selected speed device configuration +static udc_config_speed_t UDC_DESC_STORAGE *udc_ptr_conf; + +//! Pointer on interface descriptor used by SETUP request. +static usb_iface_desc_t UDC_DESC_STORAGE *udc_ptr_iface; + +//! @} + + +//! \name Internal structure to store the USB device main strings +//! @{ + +/** + * \brief Language ID of USB device (US ID by default) + */ +COMPILER_WORD_ALIGNED +static UDC_DESC_STORAGE usb_str_lgid_desc_t udc_string_desc_languageid = { + .desc.bLength = sizeof(usb_str_lgid_desc_t), + .desc.bDescriptorType = USB_DT_STRING, + .string = {LE16(USB_LANGID_EN_US)} +}; + +/** + * \brief USB device manufacture name storage + * String is allocated only if USB_DEVICE_MANUFACTURE_NAME is declared + * by usb application configuration + */ +#ifdef USB_DEVICE_MANUFACTURE_NAME +static uint8_t udc_string_manufacturer_name[] = USB_DEVICE_MANUFACTURE_NAME; +# define USB_DEVICE_MANUFACTURE_NAME_SIZE \ + (sizeof(udc_string_manufacturer_name)-1) +#else +# define USB_DEVICE_MANUFACTURE_NAME_SIZE 0 +#endif + +/** + * \brief USB device product name storage + * String is allocated only if USB_DEVICE_PRODUCT_NAME is declared + * by usb application configuration + */ +#ifdef USB_DEVICE_PRODUCT_NAME +static uint8_t udc_string_product_name[] = USB_DEVICE_PRODUCT_NAME; +# define USB_DEVICE_PRODUCT_NAME_SIZE (sizeof(udc_string_product_name)-1) +#else +# define USB_DEVICE_PRODUCT_NAME_SIZE 0 +#endif + +/** + * \brief Get USB device serial number + * + * Use the define USB_DEVICE_SERIAL_NAME to set static serial number. + * + * For dynamic serial number set the define USB_DEVICE_GET_SERIAL_NAME_POINTER + * to a suitable pointer. This will also require the serial number length + * define USB_DEVICE_GET_SERIAL_NAME_LENGTH. + */ +#if defined USB_DEVICE_GET_SERIAL_NAME_POINTER + static const uint8_t *udc_get_string_serial_name(void) + { + return (const uint8_t *)USB_DEVICE_GET_SERIAL_NAME_POINTER; + } +# define USB_DEVICE_SERIAL_NAME_SIZE \ + USB_DEVICE_GET_SERIAL_NAME_LENGTH +#elif defined USB_DEVICE_SERIAL_NAME + static const uint8_t *udc_get_string_serial_name(void) + { + return (const uint8_t *)USB_DEVICE_SERIAL_NAME; + } +# define USB_DEVICE_SERIAL_NAME_SIZE \ + (sizeof(USB_DEVICE_SERIAL_NAME)-1) +#else +# define USB_DEVICE_SERIAL_NAME_SIZE 0 +#endif + +/** + * \brief USB device string descriptor + * Structure used to transfer ASCII strings to USB String descriptor structure. + */ +struct udc_string_desc_t { + usb_str_desc_t header; + le16_t string[Max(Max(USB_DEVICE_MANUFACTURE_NAME_SIZE, \ + USB_DEVICE_PRODUCT_NAME_SIZE), USB_DEVICE_SERIAL_NAME_SIZE)]; +}; +COMPILER_WORD_ALIGNED +static UDC_DESC_STORAGE struct udc_string_desc_t udc_string_desc = { + .header.bDescriptorType = USB_DT_STRING +}; +//! @} + +usb_iface_desc_t UDC_DESC_STORAGE *udc_get_interface_desc(void) +{ + return udc_ptr_iface; +} + +/** + * \brief Returns a value to check the end of USB Configuration descriptor + * + * \return address after the last byte of USB Configuration descriptor + */ +static usb_conf_desc_t UDC_DESC_STORAGE *udc_get_eof_conf(void) +{ + return (UDC_DESC_STORAGE usb_conf_desc_t *) ((uint8_t *) + udc_ptr_conf->desc + + le16_to_cpu(udc_ptr_conf->desc->wTotalLength)); +} + +#if (0!=USB_DEVICE_MAX_EP) +/** + * \brief Search specific descriptor in global interface descriptor + * + * \param desc Address of interface descriptor + * or previous specific descriptor found + * \param desc_id Descriptor ID to search + * + * \return address of specific descriptor found + * \return NULL if it is the end of global interface descriptor + */ +static usb_conf_desc_t UDC_DESC_STORAGE *udc_next_desc_in_iface(usb_conf_desc_t + UDC_DESC_STORAGE * desc, uint8_t desc_id) +{ + usb_conf_desc_t UDC_DESC_STORAGE *ptr_eof_desc; + + ptr_eof_desc = udc_get_eof_conf(); + // Go to next descriptor + desc = (UDC_DESC_STORAGE usb_conf_desc_t *) ((uint8_t *) desc + + desc->bLength); + // Check the end of configuration descriptor + while (ptr_eof_desc > desc) { + // If new interface descriptor is found, + // then it is the end of the current global interface descriptor + if (USB_DT_INTERFACE == desc->bDescriptorType) { + break; // End of global interface descriptor + } + if (desc_id == desc->bDescriptorType) { + return desc; // Specific descriptor found + } + // Go to next descriptor + desc = (UDC_DESC_STORAGE usb_conf_desc_t *) ((uint8_t *) desc + + desc->bLength); + } + return NULL; // No specific descriptor found +} +#endif + +/** + * \brief Search an interface descriptor + * This routine updates the internal pointer udc_ptr_iface. + * + * \param iface_num Interface number to find in Configuration Descriptor + * \param setting_num Setting number of interface to find + * + * \return 1 if found or 0 if not found + */ +static bool udc_update_iface_desc(uint8_t iface_num, uint8_t setting_num) +{ + usb_conf_desc_t UDC_DESC_STORAGE *ptr_end_desc; + + if (0 == udc_num_configuration) { + return false; + } + + if (iface_num >= udc_ptr_conf->desc->bNumInterfaces) { + return false; + } + + // Start at the beginning of configuration descriptor + udc_ptr_iface = (UDC_DESC_STORAGE usb_iface_desc_t *) + udc_ptr_conf->desc; + + // Check the end of configuration descriptor + ptr_end_desc = udc_get_eof_conf(); + while (ptr_end_desc > + (UDC_DESC_STORAGE usb_conf_desc_t *) udc_ptr_iface) { + if (USB_DT_INTERFACE == udc_ptr_iface->bDescriptorType) { + // A interface descriptor is found + // Check interface and alternate setting number + if ((iface_num == udc_ptr_iface->bInterfaceNumber) && + (setting_num == + udc_ptr_iface->bAlternateSetting)) { + return true; // Interface found + } + } + // Go to next descriptor + udc_ptr_iface = (UDC_DESC_STORAGE usb_iface_desc_t *) ( + (uint8_t *) udc_ptr_iface + + udc_ptr_iface->bLength); + } + return false; // Interface not found +} + +/** + * \brief Disables an usb device interface (UDI) + * This routine call the UDI corresponding to interface number + * + * \param iface_num Interface number to disable + * + * \return 1 if it is done or 0 if interface is not found + */ +static bool udc_iface_disable(uint8_t iface_num) +{ + udi_api_t UDC_DESC_STORAGE *udi_api; + + // Select first alternate setting of the interface + // to update udc_ptr_iface before call iface->getsetting() + if (!udc_update_iface_desc(iface_num, 0)) { + return false; + } + + // Select the interface with the current alternate setting + udi_api = udc_ptr_conf->udi_apis[iface_num]; + +#if (0!=USB_DEVICE_MAX_EP) + if (!udc_update_iface_desc(iface_num, udi_api->getsetting())) { + return false; + } + + // Start at the beginning of interface descriptor + { + usb_ep_desc_t UDC_DESC_STORAGE *ep_desc; + ep_desc = (UDC_DESC_STORAGE usb_ep_desc_t *) udc_ptr_iface; + while (1) { + // Search Endpoint descriptor included in global interface descriptor + ep_desc = (UDC_DESC_STORAGE usb_ep_desc_t *) + udc_next_desc_in_iface((UDC_DESC_STORAGE + usb_conf_desc_t *) + ep_desc, USB_DT_ENDPOINT); + if (NULL == ep_desc) { + break; + } + // Free the endpoint used by the interface + udd_ep_free(ep_desc->bEndpointAddress); + } + } +#endif + + // Disable interface + udi_api->disable(); + return true; +} + +/** + * \brief Enables an usb device interface (UDI) + * This routine calls the UDI corresponding + * to the interface and setting number. + * + * \param iface_num Interface number to enable + * \param setting_num Setting number to enable + * + * \return 1 if it is done or 0 if interface is not found + */ +static bool udc_iface_enable(uint8_t iface_num, uint8_t setting_num) +{ + // Select the interface descriptor + if (!udc_update_iface_desc(iface_num, setting_num)) { + return false; + } + +#if (0!=USB_DEVICE_MAX_EP) + usb_ep_desc_t UDC_DESC_STORAGE *ep_desc; + + // Start at the beginning of the global interface descriptor + ep_desc = (UDC_DESC_STORAGE usb_ep_desc_t *) udc_ptr_iface; + while (1) { + // Search Endpoint descriptor included in the global interface descriptor + ep_desc = (UDC_DESC_STORAGE usb_ep_desc_t *) + udc_next_desc_in_iface((UDC_DESC_STORAGE + usb_conf_desc_t *) ep_desc, + USB_DT_ENDPOINT); + if (NULL == ep_desc) + break; + // Alloc the endpoint used by the interface + if (!udd_ep_alloc(ep_desc->bEndpointAddress, + ep_desc->bmAttributes, + le16_to_cpu + (ep_desc->wMaxPacketSize))) { + return false; + } + } +#endif + // Enable the interface + return udc_ptr_conf->udi_apis[iface_num]->enable(); +} + +/*! \brief Start the USB Device stack + */ +void udc_start(void) +{ + udd_enable(); +} + +/*! \brief Stop the USB Device stack + */ +void udc_stop(void) +{ + udd_disable(); + udc_reset(); +} + +/** + * \brief Reset the current configuration of the USB device, + * This routines can be called by UDD when a RESET on the USB line occurs. + */ +void udc_reset(void) +{ + uint8_t iface_num; + + if (udc_num_configuration) { + for (iface_num = 0; + iface_num < udc_ptr_conf->desc->bNumInterfaces; + iface_num++) { + udc_iface_disable(iface_num); + } + } + udc_num_configuration = 0; +#if (USB_CONFIG_ATTR_REMOTE_WAKEUP \ + == (USB_DEVICE_ATTR & USB_CONFIG_ATTR_REMOTE_WAKEUP)) + if (CPU_TO_LE16(USB_DEV_STATUS_REMOTEWAKEUP) & udc_device_status) { + // Remote wakeup is enabled then disable it + UDC_REMOTEWAKEUP_DISABLE(); + } +#endif + udc_device_status = +#if (USB_DEVICE_ATTR & USB_CONFIG_ATTR_SELF_POWERED) + CPU_TO_LE16(USB_DEV_STATUS_SELF_POWERED); +#else + CPU_TO_LE16(USB_DEV_STATUS_BUS_POWERED); +#endif +} + +void udc_sof_notify(void) +{ + uint8_t iface_num; + + if (udc_num_configuration) { + for (iface_num = 0; + iface_num < udc_ptr_conf->desc->bNumInterfaces; + iface_num++) { + if (udc_ptr_conf->udi_apis[iface_num]->sof_notify != NULL) { + udc_ptr_conf->udi_apis[iface_num]->sof_notify(); + } + } + } +} + +/** + * \brief Standard device request to get device status + * + * \return true if success + */ +static bool udc_req_std_dev_get_status(void) +{ + if (udd_g_ctrlreq.req.wLength != sizeof(udc_device_status)) { + return false; + } + + udd_set_setup_payload( (uint8_t *) & udc_device_status, + sizeof(udc_device_status)); + return true; +} + +#if (0!=USB_DEVICE_MAX_EP) +/** + * \brief Standard endpoint request to get endpoint status + * + * \return true if success + */ +static bool udc_req_std_ep_get_status(void) +{ + static le16_t udc_ep_status; + + if (udd_g_ctrlreq.req.wLength != sizeof(udc_ep_status)) { + return false; + } + + udc_ep_status = udd_ep_is_halted(udd_g_ctrlreq.req. + wIndex & 0xFF) ? CPU_TO_LE16(USB_EP_STATUS_HALTED) : 0; + + udd_set_setup_payload( (uint8_t *) & udc_ep_status, + sizeof(udc_ep_status)); + return true; +} +#endif + +/** + * \brief Standard device request to change device status + * + * \return true if success + */ +static bool udc_req_std_dev_clear_feature(void) +{ + if (udd_g_ctrlreq.req.wLength) { + return false; + } + + if (udd_g_ctrlreq.req.wValue == USB_DEV_FEATURE_REMOTE_WAKEUP) { + udc_device_status &= CPU_TO_LE16(~(uint32_t)USB_DEV_STATUS_REMOTEWAKEUP); +#if (USB_CONFIG_ATTR_REMOTE_WAKEUP \ + == (USB_DEVICE_ATTR & USB_CONFIG_ATTR_REMOTE_WAKEUP)) + UDC_REMOTEWAKEUP_DISABLE(); +#endif + return true; + } + return false; +} + +#if (0!=USB_DEVICE_MAX_EP) +/** + * \brief Standard endpoint request to clear endpoint feature + * + * \return true if success + */ +static bool udc_req_std_ep_clear_feature(void) +{ + if (udd_g_ctrlreq.req.wLength) { + return false; + } + + if (udd_g_ctrlreq.req.wValue == USB_EP_FEATURE_HALT) { + return udd_ep_clear_halt(udd_g_ctrlreq.req.wIndex & 0xFF); + } + return false; +} +#endif + +/** + * \brief Standard device request to set a feature + * + * \return true if success + */ +static bool udc_req_std_dev_set_feature(void) +{ + if (udd_g_ctrlreq.req.wLength) { + return false; + } + + switch (udd_g_ctrlreq.req.wValue) { + + case USB_DEV_FEATURE_REMOTE_WAKEUP: +#if (USB_CONFIG_ATTR_REMOTE_WAKEUP \ + == (USB_DEVICE_ATTR & USB_CONFIG_ATTR_REMOTE_WAKEUP)) + udc_device_status |= CPU_TO_LE16(USB_DEV_STATUS_REMOTEWAKEUP); + UDC_REMOTEWAKEUP_ENABLE(); + return true; +#else + return false; +#endif + +#ifdef USB_DEVICE_HS_SUPPORT + case USB_DEV_FEATURE_TEST_MODE: + if (!udd_is_high_speed()) { + break; + } + if (udd_g_ctrlreq.req.wIndex & 0xff) { + break; + } + // Unconfigure the device, terminating all ongoing requests + udc_reset(); + switch ((udd_g_ctrlreq.req.wIndex >> 8) & 0xFF) { + case USB_DEV_TEST_MODE_J: + udd_g_ctrlreq.callback = udd_test_mode_j; + return true; + + case USB_DEV_TEST_MODE_K: + udd_g_ctrlreq.callback = udd_test_mode_k; + return true; + + case USB_DEV_TEST_MODE_SE0_NAK: + udd_g_ctrlreq.callback = udd_test_mode_se0_nak; + return true; + + case USB_DEV_TEST_MODE_PACKET: + udd_g_ctrlreq.callback = udd_test_mode_packet; + return true; + + case USB_DEV_TEST_MODE_FORCE_ENABLE: // Only for downstream facing hub ports + default: + break; + } + break; +#endif + default: + break; + } + return false; +} + +/** + * \brief Standard endpoint request to halt an endpoint + * + * \return true if success + */ +#if (0!=USB_DEVICE_MAX_EP) +static bool udc_req_std_ep_set_feature(void) +{ + if (udd_g_ctrlreq.req.wLength) { + return false; + } + if (udd_g_ctrlreq.req.wValue == USB_EP_FEATURE_HALT) { + udd_ep_abort(udd_g_ctrlreq.req.wIndex & 0xFF); + return udd_ep_set_halt(udd_g_ctrlreq.req.wIndex & 0xFF); + } + return false; +} +#endif + +/** + * \brief Change the address of device + * Callback called at the end of request set address + */ +static void udc_valid_address(void) +{ + udd_set_address(udd_g_ctrlreq.req.wValue & 0x7F); +} + +/** + * \brief Standard device request to set device address + * + * \return true if success + */ +static bool udc_req_std_dev_set_address(void) +{ + if (udd_g_ctrlreq.req.wLength) { + return false; + } + + // The address must be changed at the end of setup request after the handshake + // then we use a callback to change address + udd_g_ctrlreq.callback = udc_valid_address; + return true; +} + +/** + * \brief Standard device request to get device string descriptor + * + * \return true if success + */ +static bool udc_req_std_dev_get_str_desc(void) +{ + uint8_t i; + const uint8_t *str; + uint8_t str_length = 0; + + // Link payload pointer to the string corresponding at request + switch (udd_g_ctrlreq.req.wValue & 0xff) { + case 0: + udd_set_setup_payload((uint8_t *) &udc_string_desc_languageid, + sizeof(udc_string_desc_languageid)); + break; + +#ifdef USB_DEVICE_MANUFACTURE_NAME + case 1: + str_length = USB_DEVICE_MANUFACTURE_NAME_SIZE; + str = udc_string_manufacturer_name; + break; +#endif +#ifdef USB_DEVICE_PRODUCT_NAME + case 2: + str_length = USB_DEVICE_PRODUCT_NAME_SIZE; + str = udc_string_product_name; + break; +#endif +#if defined USB_DEVICE_SERIAL_NAME || defined USB_DEVICE_GET_SERIAL_NAME_POINTER + case 3: + str_length = USB_DEVICE_SERIAL_NAME_SIZE; + str = udc_get_string_serial_name(); + break; +#endif + default: +#ifdef UDC_GET_EXTRA_STRING + if (UDC_GET_EXTRA_STRING()) { + break; + } +#endif + return false; + } + + if (str_length) { + for(i = 0; i < str_length; i++) { + udc_string_desc.string[i] = cpu_to_le16((le16_t)str[i]); + } + + udc_string_desc.header.bLength = 2 + (str_length) * 2; + udd_set_setup_payload( + (uint8_t *) &udc_string_desc, + udc_string_desc.header.bLength); + } + + return true; +} + +/** + * \brief Standard device request to get descriptors about USB device + * + * \return true if success + */ +static bool udc_req_std_dev_get_descriptor(void) +{ + uint8_t conf_num; + + conf_num = udd_g_ctrlreq.req.wValue & 0xff; + + // Check descriptor ID + switch ((uint8_t) (udd_g_ctrlreq.req.wValue >> 8)) { + case USB_DT_DEVICE: + // Device descriptor requested +#ifdef USB_DEVICE_HS_SUPPORT + if (!udd_is_high_speed()) { + udd_set_setup_payload( + (uint8_t *) udc_config.confdev_hs, + udc_config.confdev_hs->bLength); + } else +#endif + { + udd_set_setup_payload( + (uint8_t *) udc_config.confdev_lsfs, + udc_config.confdev_lsfs->bLength); + } + break; + + case USB_DT_CONFIGURATION: + // Configuration descriptor requested +#ifdef USB_DEVICE_HS_SUPPORT + if (udd_is_high_speed()) { + // HS descriptor + if (conf_num >= udc_config.confdev_hs-> + bNumConfigurations) { + return false; + } + udd_set_setup_payload( + (uint8_t *)udc_config.conf_hs[conf_num].desc, + le16_to_cpu(udc_config.conf_hs[conf_num].desc->wTotalLength)); + } else +#endif + { + // FS descriptor + if (conf_num >= udc_config.confdev_lsfs-> + bNumConfigurations) { + return false; + } + udd_set_setup_payload( + (uint8_t *)udc_config.conf_lsfs[conf_num].desc, + le16_to_cpu(udc_config.conf_lsfs[conf_num].desc->wTotalLength)); + } + ((usb_conf_desc_t *) udd_g_ctrlreq.payload)->bDescriptorType = + USB_DT_CONFIGURATION; + break; + +#ifdef USB_DEVICE_HS_SUPPORT + case USB_DT_DEVICE_QUALIFIER: + // Device qualifier descriptor requested + udd_set_setup_payload( (uint8_t *) udc_config.qualifier, + udc_config.qualifier->bLength); + break; + + case USB_DT_OTHER_SPEED_CONFIGURATION: + // Other configuration descriptor requested + if (!udd_is_high_speed()) { + // HS descriptor + if (conf_num >= udc_config.confdev_hs-> + bNumConfigurations) { + return false; + } + udd_set_setup_payload( + (uint8_t *)udc_config.conf_hs[conf_num].desc, + le16_to_cpu(udc_config.conf_hs[conf_num].desc->wTotalLength)); + } else { + // FS descriptor + if (conf_num >= udc_config.confdev_lsfs-> + bNumConfigurations) { + return false; + } + udd_set_setup_payload( + (uint8_t *)udc_config.conf_lsfs[conf_num].desc, + le16_to_cpu(udc_config.conf_lsfs[conf_num].desc->wTotalLength)); + } + ((usb_conf_desc_t *) udd_g_ctrlreq.payload)->bDescriptorType = + USB_DT_OTHER_SPEED_CONFIGURATION; + break; +#endif + + case USB_DT_BOS: + // Device BOS descriptor requested + if (udc_config.conf_bos == NULL) { + return false; + } + udd_set_setup_payload( (uint8_t *) udc_config.conf_bos, + udc_config.conf_bos->wTotalLength); + break; + + case USB_DT_STRING: + // String descriptor requested + if (!udc_req_std_dev_get_str_desc()) { + return false; + } + break; + + default: + // Unknown descriptor requested + return false; + } + // if the descriptor is larger than length requested, then reduce it + if (udd_g_ctrlreq.req.wLength < udd_g_ctrlreq.payload_size) { + udd_g_ctrlreq.payload_size = udd_g_ctrlreq.req.wLength; + } + return true; +} + +/** + * \brief Standard device request to get configuration number + * + * \return true if success + */ +static bool udc_req_std_dev_get_configuration(void) +{ + if (udd_g_ctrlreq.req.wLength != 1) { + return false; + } + + udd_set_setup_payload(&udc_num_configuration,1); + return true; +} + +/** + * \brief Standard device request to enable a configuration + * + * \return true if success + */ +static bool udc_req_std_dev_set_configuration(void) +{ + uint8_t iface_num; + + // Check request length + if (udd_g_ctrlreq.req.wLength) { + return false; + } + // Authorize configuration only if the address is valid + if (!udd_getaddress()) { + return false; + } + // Check the configuration number requested +#ifdef USB_DEVICE_HS_SUPPORT + if (udd_is_high_speed()) { + // HS descriptor + if ((udd_g_ctrlreq.req.wValue & 0xFF) > + udc_config.confdev_hs->bNumConfigurations) { + return false; + } + } else +#endif + { + // FS descriptor + if ((udd_g_ctrlreq.req.wValue & 0xFF) > + udc_config.confdev_lsfs->bNumConfigurations) { + return false; + } + } + + // Reset current configuration + udc_reset(); + + // Enable new configuration + udc_num_configuration = udd_g_ctrlreq.req.wValue & 0xFF; + if (udc_num_configuration == 0) { + return true; // Default empty configuration requested + } + // Update pointer of the configuration descriptor +#ifdef USB_DEVICE_HS_SUPPORT + if (udd_is_high_speed()) { + // HS descriptor + udc_ptr_conf = &udc_config.conf_hs[udc_num_configuration - 1]; + } else +#endif + { + // FS descriptor + udc_ptr_conf = &udc_config.conf_lsfs[udc_num_configuration - 1]; + } + // Enable all interfaces of the selected configuration + for (iface_num = 0; iface_num < udc_ptr_conf->desc->bNumInterfaces; + iface_num++) { + if (!udc_iface_enable(iface_num, 0)) { + return false; + } + } + return true; +} + +/** + * \brief Standard interface request + * to get the alternate setting number of an interface + * + * \return true if success + */ +static bool udc_req_std_iface_get_setting(void) +{ + uint8_t iface_num; + udi_api_t UDC_DESC_STORAGE *udi_api; + + if (udd_g_ctrlreq.req.wLength != 1) { + return false; // Error in request + } + if (!udc_num_configuration) { + return false; // The device is not is configured state yet + } + + // Check the interface number included in the request + iface_num = udd_g_ctrlreq.req.wIndex & 0xFF; + if (iface_num >= udc_ptr_conf->desc->bNumInterfaces) { + return false; + } + + // Select first alternate setting of the interface to update udc_ptr_iface + // before call iface->getsetting() + if (!udc_update_iface_desc(iface_num, 0)) { + return false; + } + // Get alternate setting from UDI + udi_api = udc_ptr_conf->udi_apis[iface_num]; + udc_iface_setting = udi_api->getsetting(); + + // Link value to payload pointer of request + udd_set_setup_payload(&udc_iface_setting,1); + return true; +} + +/** + * \brief Standard interface request + * to set an alternate setting of an interface + * + * \return true if success + */ +static bool udc_req_std_iface_set_setting(void) +{ + uint8_t iface_num, setting_num; + + if (udd_g_ctrlreq.req.wLength) { + return false; // Error in request + } + if (!udc_num_configuration) { + return false; // The device is not is configured state yet + } + + iface_num = udd_g_ctrlreq.req.wIndex & 0xFF; + setting_num = udd_g_ctrlreq.req.wValue & 0xFF; + + // Disable current setting + if (!udc_iface_disable(iface_num)) { + return false; + } + + // Enable new setting + return udc_iface_enable(iface_num, setting_num); +} + +/** + * \brief Main routine to manage the standard USB SETUP request + * + * \return true if the request is supported + */ +static bool udc_reqstd(void) +{ + if (Udd_setup_is_in()) { + // GET Standard Requests + if (udd_g_ctrlreq.req.wLength == 0) { + return false; // Error for USB host + } + + if (USB_REQ_RECIP_DEVICE == Udd_setup_recipient()) { + // Standard Get Device request + switch (udd_g_ctrlreq.req.bRequest) { + case USB_REQ_GET_STATUS: + return udc_req_std_dev_get_status(); + case USB_REQ_GET_DESCRIPTOR: + return udc_req_std_dev_get_descriptor(); + case USB_REQ_GET_CONFIGURATION: + return udc_req_std_dev_get_configuration(); + default: + break; + } + } + + if (USB_REQ_RECIP_INTERFACE == Udd_setup_recipient()) { + // Standard Get Interface request + switch (udd_g_ctrlreq.req.bRequest) { + case USB_REQ_GET_INTERFACE: + return udc_req_std_iface_get_setting(); + default: + break; + } + } +#if (0!=USB_DEVICE_MAX_EP) + if (USB_REQ_RECIP_ENDPOINT == Udd_setup_recipient()) { + // Standard Get Endpoint request + switch (udd_g_ctrlreq.req.bRequest) { + case USB_REQ_GET_STATUS: + return udc_req_std_ep_get_status(); + default: + break; + } + } +#endif + } else { + // SET Standard Requests + if (USB_REQ_RECIP_DEVICE == Udd_setup_recipient()) { + // Standard Set Device request + switch (udd_g_ctrlreq.req.bRequest) { + case USB_REQ_SET_ADDRESS: + return udc_req_std_dev_set_address(); + case USB_REQ_CLEAR_FEATURE: + return udc_req_std_dev_clear_feature(); + case USB_REQ_SET_FEATURE: + return udc_req_std_dev_set_feature(); + case USB_REQ_SET_CONFIGURATION: + return udc_req_std_dev_set_configuration(); + case USB_REQ_SET_DESCRIPTOR: + /* Not supported (defined as optional by the USB 2.0 spec) */ + break; + default: + break; + } + } + + if (USB_REQ_RECIP_INTERFACE == Udd_setup_recipient()) { + // Standard Set Interface request + switch (udd_g_ctrlreq.req.bRequest) { + case USB_REQ_SET_INTERFACE: + return udc_req_std_iface_set_setting(); + default: + break; + } + } +#if (0!=USB_DEVICE_MAX_EP) + if (USB_REQ_RECIP_ENDPOINT == Udd_setup_recipient()) { + // Standard Set Endpoint request + switch (udd_g_ctrlreq.req.bRequest) { + case USB_REQ_CLEAR_FEATURE: + return udc_req_std_ep_clear_feature(); + case USB_REQ_SET_FEATURE: + return udc_req_std_ep_set_feature(); + default: + break; + } + } +#endif + } + return false; +} + +/** + * \brief Send the SETUP interface request to UDI + * + * \return true if the request is supported + */ +static bool udc_req_iface(void) +{ + uint8_t iface_num; + udi_api_t UDC_DESC_STORAGE *udi_api; + + if (0 == udc_num_configuration) { + return false; // The device is not is configured state yet + } + // Check interface number + iface_num = udd_g_ctrlreq.req.wIndex & 0xFF; + if (iface_num >= udc_ptr_conf->desc->bNumInterfaces) { + return false; + } + + //* To update udc_ptr_iface with the selected interface in request + // Select first alternate setting of interface to update udc_ptr_iface + // before calling udi_api->getsetting() + if (!udc_update_iface_desc(iface_num, 0)) { + return false; + } + // Select the interface with the current alternate setting + udi_api = udc_ptr_conf->udi_apis[iface_num]; + if (!udc_update_iface_desc(iface_num, udi_api->getsetting())) { + return false; + } + + // Send the SETUP request to the UDI corresponding to the interface number + return udi_api->setup(); +} + +/** + * \brief Send the SETUP interface request to UDI + * + * \return true if the request is supported + */ +static bool udc_req_ep(void) +{ + uint8_t iface_num; + udi_api_t UDC_DESC_STORAGE *udi_api; + + if (0 == udc_num_configuration) { + return false; // The device is not is configured state yet + } + // Send this request on all enabled interfaces + iface_num = udd_g_ctrlreq.req.wIndex & 0xFF; + for (iface_num = 0; iface_num < udc_ptr_conf->desc->bNumInterfaces; + iface_num++) { + // Select the interface with the current alternate setting + udi_api = udc_ptr_conf->udi_apis[iface_num]; + if (!udc_update_iface_desc(iface_num, udi_api->getsetting())) { + return false; + } + + // Send the SETUP request to the UDI + if (udi_api->setup()) { + return true; + } + } + return false; +} + +static bool udc_reqvend(void){ + switch (udd_g_ctrlreq.req.bRequest){ + case 0xa0: //Break! (Debug command) + asm("nop"); + return 1; + case 0xa1: //Receive waveform for signal gen + TC_DAC.CTRLA = 0x00; + TC_DAC.PERBUF = udd_g_ctrlreq.req.wValue; + TC_DAC.CTRLA = (unsigned char) udd_g_ctrlreq.req.wIndex & 0x0F; + udd_set_setup_payload(dacBuf_CH1, udd_g_ctrlreq.req.wLength); + if(dacBuf_len != udd_g_ctrlreq.req.wLength){ + dacBuf_len = udd_g_ctrlreq.req.wLength; + switch(global_mode){ + case 0: + tiny_dma_set_mode_0(); + break; + case 1: + tiny_dma_set_mode_1(); + break; + case 2: + tiny_dma_set_mode_2(); + break; + case 3: + tiny_dma_set_mode_3(); + break; + case 4: + tiny_dma_set_mode_4(); + break; + case 5: + tiny_dma_set_mode_5(); + break; + case 6: + tiny_dma_set_mode_6(); + break; + case 7: + tiny_dma_set_mode_7(); + break; + } + } + return 1; + case 0xa2: //CH2 waveform + TC_AUXDAC.CTRLA = 0x00; + auxDacBufLen = udd_g_ctrlreq.req.wLength; + TC_AUXDAC.PERBUF = udd_g_ctrlreq.req.wValue; + TC_AUXDAC.CTRLA = (unsigned char) udd_g_ctrlreq.req.wIndex & 0x0F; + udd_set_setup_payload(dacBuf_CH2, udd_g_ctrlreq.req.wLength); + if(dacBuf_len != udd_g_ctrlreq.req.wLength){ + dacBuf_len = udd_g_ctrlreq.req.wLength; + switch(global_mode){ + case 0: + tiny_dma_set_mode_0(); + break; + case 1: + tiny_dma_set_mode_1(); + break; + case 2: + tiny_dma_set_mode_2(); + break; + case 3: + tiny_dma_set_mode_3(); + break; + case 4: + tiny_dma_set_mode_4(); + break; + case 5: + tiny_dma_set_mode_5(); + break; + case 6: + tiny_dma_set_mode_6(); + break; + case 7: + tiny_dma_set_mode_7(); + break; + } + } + return 1; + case 0xa3: //PSU voltage control + TC_PSU.CCA = 0; + PSU_target = udd_g_ctrlreq.req.wValue; + return 1; + case 0xa4: //Triple mode + PORTB.OUT = udd_g_ctrlreq.req.wValue; + return 1; + case 0xa5: //Control Gain and Scope modes + switch(udd_g_ctrlreq.req.wValue){ + case 0: //Mode 0 + tiny_adc_setup(0, 0); + tiny_adc_ch0setup(udd_g_ctrlreq.req.wIndex); + tiny_dma_set_mode_0(); + break; + case 1: //Mode 1 + tiny_adc_setup(0, 0); + tiny_adc_ch0setup(udd_g_ctrlreq.req.wIndex); + tiny_dma_set_mode_1(); + break; + case 2: //Mode 2 + tiny_adc_setup(1, 1); + tiny_adc_ch0setup(udd_g_ctrlreq.req.wIndex); + tiny_adc_ch1setup(udd_g_ctrlreq.req.wIndex>>8); + tiny_dma_set_mode_2(); + break; + case 3: //Mode 3 + tiny_dma_set_mode_3(); + break; + case 4: //Mode 4 + tiny_dma_set_mode_4(); + break; + case 5: //Mode 5 + tiny_adc_setup(0, 0); + tiny_adc_ch0setup(udd_g_ctrlreq.req.wIndex); + tiny_dma_set_mode_5(); + break; + case 6: //Mode 6 + tiny_adc_setup(0, 1); + tiny_adc_ch0setup(udd_g_ctrlreq.req.wIndex); + tiny_dma_set_mode_6(); + break; + case 7: //Mode 7 + tiny_adc_setup(0, 2); + tiny_adc_ch0setup(udd_g_ctrlreq.req.wIndex | 0x80); + tiny_dma_set_mode_7(); + break; + default: + return 0; + } + return 1; + case 0xa6: //Digital out??? + PORTE.OUT = udd_g_ctrlreq.req.wValue; + return 1; + case 0xa7: //Soft Reset + + //Code here from SprinterSB + //http://www.avrfreaks.net/comment/872674 + //I don't understand it, but it seems to do the job + __asm volatile ("cli" "\n\t" + "out __CCP__, %[ccp]" "\n\t" + "st %a[rst], %[swrst]" + : + : [ccp] "r" ((uint8_t) CCP_IOREG_gc), + [swrst] "r" ((uint8_t) RST_SWRST_bm), + [rst] "e" (&RST.CTRL) + : "memory"); + __builtin_unreachable(); + default: + return 0; + } +} +/** + * \brief Main routine to manage the USB SETUP request. + * + * This function parses a USB SETUP request and submits an appropriate + * response back to the host or, in the case of SETUP OUT requests + * with data, sets up a buffer for receiving the data payload. + * + * The main standard requests defined by the USB 2.0 standard are handled + * internally. The interface requests are sent to UDI, and the specific request + * sent to a specific application callback. + * + * \return true if the request is supported, else the request is stalled by UDD + */ +bool udc_process_setup(void) +{ + // By default no data (receive/send) and no callbacks registered + udd_g_ctrlreq.payload_size = 0; + udd_g_ctrlreq.callback = NULL; + udd_g_ctrlreq.over_under_run = NULL; + + if (Udd_setup_is_in()) { + if (udd_g_ctrlreq.req.wLength == 0) { + return false; // Error from USB host + } + } + + if (Udd_setup_type() == USB_REQ_TYPE_VENDOR){ + if (udc_reqvend()) { + return true; + } + } + + // If standard request then try to decode it in UDC + if (Udd_setup_type() == USB_REQ_TYPE_STANDARD) { + if (udc_reqstd()) { + return true; + } + } + + // If interface request then try to decode it in UDI + if (Udd_setup_recipient() == USB_REQ_RECIP_INTERFACE) { + if (udc_req_iface()) { + return true; + } + } + + // If endpoint request then try to decode it in UDI + if (Udd_setup_recipient() == USB_REQ_RECIP_ENDPOINT) { + if (udc_req_ep()) { + return true; + } + } + + // Here SETUP request unknown by UDC and UDIs +#ifdef USB_DEVICE_SPECIFIC_REQUEST + // Try to decode it in specific callback + return USB_DEVICE_SPECIFIC_REQUEST(); // Ex: Vendor request,... +#else + return false; +#endif +} + +//! @} diff --git a/AVR Code/USB_BULK_TEST/src/ASF/common/services/usb/udc/udc.h b/AVR Code/USB_BULK_TEST/src/ASF/common/services/usb/udc/udc.h new file mode 100644 index 00000000..edfe7078 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/common/services/usb/udc/udc.h @@ -0,0 +1,697 @@ +/** + * \file + * + * \brief Interface of the USB Device Controller (UDC) + * + * Copyright (c) 2009-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ + +#ifndef _UDC_H_ +#define _UDC_H_ + +#include "conf_usb.h" +#include "usb_protocol.h" +#include "udc_desc.h" +#include "udd.h" + +#if USB_DEVICE_VENDOR_ID == 0 +# error USB_DEVICE_VENDOR_ID cannot be equal to 0 +#endif + +#if USB_DEVICE_PRODUCT_ID == 0 +# error USB_DEVICE_PRODUCT_ID cannot be equal to 0 +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \ingroup usb_device_group + * \defgroup udc_group USB Device Controller (UDC) + * + * The UDC provides a high-level abstraction of the usb device. + * You can use these functions to control the main device state + * (start/attach/wakeup). + * + * \section USB_DEVICE_CONF USB Device Custom configuration + * The following USB Device configuration must be included in the conf_usb.h + * file of the application. + * + * USB_DEVICE_VENDOR_ID (Word)
    + * Vendor ID provided by USB org (ATMEL 0x03EB). + * + * USB_DEVICE_PRODUCT_ID (Word)
    + * Product ID (Referenced in usb_atmel.h). + * + * USB_DEVICE_MAJOR_VERSION (Byte)
    + * Major version of the device + * + * USB_DEVICE_MINOR_VERSION (Byte)
    + * Minor version of the device + * + * USB_DEVICE_MANUFACTURE_NAME (string)
    + * ASCII name for the manufacture + * + * USB_DEVICE_PRODUCT_NAME (string)
    + * ASCII name for the product + * + * USB_DEVICE_SERIAL_NAME (string)
    + * ASCII name to enable and set a serial number + * + * USB_DEVICE_POWER (Numeric)
    + * (unit mA) Maximum device power + * + * USB_DEVICE_ATTR (Byte)
    + * USB attributes available: + * - USB_CONFIG_ATTR_SELF_POWERED + * - USB_CONFIG_ATTR_REMOTE_WAKEUP + * Note: if remote wake enabled then defines remotewakeup callbacks, + * see Table 5-2. External API from UDC - Callback + * + * USB_DEVICE_LOW_SPEED (Only defined)
    + * Force the USB Device to run in low speed + * + * USB_DEVICE_HS_SUPPORT (Only defined)
    + * Authorize the USB Device to run in high speed + * + * USB_DEVICE_MAX_EP (Byte)
    + * Define the maximum endpoint number used by the USB Device.
    + * This one is already defined in UDI default configuration. + * Ex: + * - When endpoint control 0x00, endpoint 0x01 and + * endpoint 0x82 is used then USB_DEVICE_MAX_EP=2 + * - When only endpoint control 0x00 is used then USB_DEVICE_MAX_EP=0 + * - When endpoint 0x01 and endpoint 0x81 is used then USB_DEVICE_MAX_EP=1
    + * (configuration not possible on USBB interface) + * @{ + */ + +/** + * \brief Authorizes the VBUS event + * + * \return true, if the VBUS monitoring is possible. + * + * \section udc_vbus_monitoring VBus monitoring used cases + * + * The VBus monitoring is used only for USB SELF Power application. + * + * - By default the USB device is automatically attached when Vbus is high + * or when USB is start for devices without internal Vbus monitoring. + * conf_usb.h file does not contains define USB_DEVICE_ATTACH_AUTO_DISABLE. + * \code //#define USB_DEVICE_ATTACH_AUTO_DISABLE \endcode + * + * - Add custom VBUS monitoring. conf_usb.h file contains define + * USB_DEVICE_ATTACH_AUTO_DISABLE: + * \code #define USB_DEVICE_ATTACH_AUTO_DISABLE \endcode + * User C file contains: + * \code + // Authorize VBUS monitoring + if (!udc_include_vbus_monitoring()) { + // Implement custom VBUS monitoring via GPIO or other + } + Event_VBUS_present() // VBUS interrupt or GPIO interrupt or other + { + // Attach USB Device + udc_attach(); + } +\endcode + * + * - Case of battery charging. conf_usb.h file contains define + * USB_DEVICE_ATTACH_AUTO_DISABLE: + * \code #define USB_DEVICE_ATTACH_AUTO_DISABLE \endcode + * User C file contains: + * \code + Event VBUS present() // VBUS interrupt or GPIO interrupt or .. + { + // Authorize battery charging, but wait key press to start USB. + } + Event Key press() + { + // Stop batteries charging + // Start USB + udc_attach(); + } +\endcode + */ +static inline bool udc_include_vbus_monitoring(void) +{ + return udd_include_vbus_monitoring(); +} + +/*! \brief Start the USB Device stack + */ +void udc_start(void); + +/*! \brief Stop the USB Device stack + */ +void udc_stop(void); + +/** + * \brief Attach device to the bus when possible + * + * \warning If a VBus control is included in driver, + * then it will attach device when an acceptable Vbus + * level from the host is detected. + */ +static inline void udc_attach(void) +{ + udd_attach(); +} + + +/** + * \brief Detaches the device from the bus + * + * The driver must remove pull-up on USB line D- or D+. + */ +static inline void udc_detach(void) +{ + udd_detach(); +} + + +/*! \brief The USB driver sends a resume signal called \e "Upstream Resume" + * This is authorized only when the remote wakeup feature is enabled by host. + */ +static inline void udc_remotewakeup(void) +{ + udd_send_remotewakeup(); +} + + +/** + * \brief Returns a pointer on the current interface descriptor + * + * \return pointer on the current interface descriptor. + */ +usb_iface_desc_t UDC_DESC_STORAGE *udc_get_interface_desc(void); + +//@} + +/** + * \ingroup usb_group + * \defgroup usb_device_group USB Stack Device + * + * This module includes USB Stack Device implementation. + * The stack is divided in three parts: + * - USB Device Controller (UDC) provides USB chapter 9 compliance + * - USB Device Interface (UDI) provides USB Class compliance + * - USB Device Driver (UDD) provides USB Driver for each Atmel MCU + + * Many USB Device applications can be implemented on Atmel MCU. + * Atmel provides many application notes for different applications: + * - AVR4900, provides general information about Device Stack + * - AVR4901, explains how to create a new class + * - AVR4902, explains how to create a composite device + * - AVR49xx, all device classes provided in ASF have an application note + * + * A basic USB knowledge is required to understand the USB Device + * Class application notes (HID,MS,CDC,PHDC,...). + * Then, to create an USB device with + * only one class provided by ASF, refer directly to the application note + * corresponding to this USB class. The USB Device application note for + * New Class and Composite is dedicated to advanced USB users. + * + * @{ + */ + +//! @} + +#ifdef __cplusplus +} +#endif + +/** + * \ingroup udc_group + * \defgroup udc_basic_use_case_setup_prereq USB Device Controller (UDC) - Prerequisites + * Common prerequisites for all USB devices. + * + * This module is based on USB device stack full interrupt driven, and supporting + * \ref sleepmgr_group sleepmgr. For AVR and SAM3/4 devices the \ref clk_group clock services + * is supported. For SAMD devices the \ref asfdoc_sam0_system_clock_group clock driver is supported. + * + * The following procedure must be executed to setup the project correctly: + * - Specify the clock configuration: + * - XMEGA USB devices need 48MHz clock input.\n + * XMEGA USB devices need CPU frequency higher than 12MHz.\n + * You can use either an internal RC48MHz auto calibrated by Start of Frames + * or an external OSC. + * - UC3 and SAM3/4 devices without USB high speed support need 48MHz clock input.\n + * You must use a PLL and an external OSC. + * - UC3 and SAM3/4 devices with USB high speed support need 12MHz clock input.\n + * You must use an external OSC. + * - UC3 devices with USBC hardware need CPU frequency higher than 25MHz. + * - SAMD devices without USB high speed support need 48MHz clock input.\n + * You should use DFLL with USBCRM. + * - In conf_board.h, the define CONF_BOARD_USB_PORT must be added to enable USB lines. + * (Not mandatory for all boards) + * - Enable interrupts + * - Initialize the clock service + * + * The usage of \ref sleepmgr_group sleepmgr service is optional, but recommended to reduce power + * consumption: + * - Initialize the sleep manager service + * - Activate sleep mode when the application is in IDLE state + * + * \subpage udc_conf_clock. + * + * for AVR and SAM3/4 devices, add to the initialization code: + * \code + sysclk_init(); + irq_initialize_vectors(); + cpu_irq_enable(); + board_init(); + sleepmgr_init(); // Optional +\endcode + * + * For SAMD devices, add to the initialization code: + * \code + system_init(); + irq_initialize_vectors(); + cpu_irq_enable(); + sleepmgr_init(); // Optional +\endcode + * Add to the main IDLE loop: + * \code + sleepmgr_enter_sleep(); // Optional +\endcode + * + */ + +/** + * \ingroup udc_group + * \defgroup udc_basic_use_case_setup_code USB Device Controller (UDC) - Example code + * Common example code for all USB devices. + * + * Content of conf_usb.h: + * \code + #define USB_DEVICE_VENDOR_ID 0x03EB + #define USB_DEVICE_PRODUCT_ID 0xXXXX + #define USB_DEVICE_MAJOR_VERSION 1 + #define USB_DEVICE_MINOR_VERSION 0 + #define USB_DEVICE_POWER 100 + #define USB_DEVICE_ATTR USB_CONFIG_ATTR_BUS_POWERED +\endcode + * + * Add to application C-file: + * \code + void usb_init(void) + { + udc_start(); + } +\endcode + */ + +/** + * \ingroup udc_group + * \defgroup udc_basic_use_case_setup_flow USB Device Controller (UDC) - Workflow + * Common workflow for all USB devices. + * + * -# Ensure that conf_usb.h is available and contains the following configuration + * which is the main USB device configuration: + * - \code // Vendor ID provided by USB org (ATMEL 0x03EB) + #define USB_DEVICE_VENDOR_ID 0x03EB // Type Word + // Product ID (Atmel PID referenced in usb_atmel.h) + #define USB_DEVICE_PRODUCT_ID 0xXXXX // Type Word + // Major version of the device + #define USB_DEVICE_MAJOR_VERSION 1 // Type Byte + // Minor version of the device + #define USB_DEVICE_MINOR_VERSION 0 // Type Byte + // Maximum device power (mA) + #define USB_DEVICE_POWER 100 // Type 9-bits + // USB attributes to enable features + #define USB_DEVICE_ATTR USB_CONFIG_ATTR_BUS_POWERED // Flags \endcode + * -# Call the USB device stack start function to enable stack and start USB: + * - \code udc_start(); \endcode + * \note In case of USB dual roles (Device and Host) managed through USB OTG connector + * (USB ID pin), the call of udc_start() must be removed and replaced by uhc_start(). + * SeRefer to "AVR4950 section 6.1 Dual roles" for further information about dual roles. + */ + +/** + * \page udc_conf_clock conf_clock.h examples with USB support + * + * Content of XMEGA conf_clock.h: + * \code + // Configuration based on internal RC: + // USB clock need of 48Mhz + #define CONFIG_USBCLK_SOURCE USBCLK_SRC_RCOSC + #define CONFIG_OSC_RC32_CAL 48000000UL + #define CONFIG_OSC_AUTOCAL_RC32MHZ_REF_OSC OSC_ID_USBSOF + // CPU clock need of clock > 12MHz to run with USB (Here 24MHz) + #define CONFIG_SYSCLK_SOURCE SYSCLK_SRC_RC32MHZ + #define CONFIG_SYSCLK_PSADIV SYSCLK_PSADIV_2 + #define CONFIG_SYSCLK_PSBCDIV SYSCLK_PSBCDIV_1_1 +\endcode + * + * Content of conf_clock.h for AT32UC3A0, AT32UC3A1, AT32UC3B devices (USBB): + * \code + // Configuration based on 12MHz external OSC: + #define CONFIG_PLL1_SOURCE PLL_SRC_OSC0 + #define CONFIG_PLL1_MUL 8 + #define CONFIG_PLL1_DIV 2 + #define CONFIG_USBCLK_SOURCE USBCLK_SRC_PLL1 + #define CONFIG_USBCLK_DIV 1 // Fusb = Fsys/(2 ^ USB_div) +\endcode + * + * Content of conf_clock.h for AT32UC3A3, AT32UC3A4 devices (USBB with high speed support): + * \code + // Configuration based on 12MHz external OSC: + #define CONFIG_USBCLK_SOURCE USBCLK_SRC_OSC0 + #define CONFIG_USBCLK_DIV 1 // Fusb = Fsys/(2 ^ USB_div) +\endcode + * + * Content of conf_clock.h for AT32UC3C, ATUCXXD, ATUCXXL3U, ATUCXXL4U devices (USBC): + * \code + // Configuration based on 12MHz external OSC: + #define CONFIG_PLL1_SOURCE PLL_SRC_OSC0 + #define CONFIG_PLL1_MUL 8 + #define CONFIG_PLL1_DIV 2 + #define CONFIG_USBCLK_SOURCE USBCLK_SRC_PLL1 + #define CONFIG_USBCLK_DIV 1 // Fusb = Fsys/(2 ^ USB_div) + // CPU clock need of clock > 25MHz to run with USBC + #define CONFIG_SYSCLK_SOURCE SYSCLK_SRC_PLL1 +\endcode + * + * Content of conf_clock.h for SAM3S, SAM3SD, SAM4S devices (UPD: USB Peripheral Device): + * \code + // PLL1 (B) Options (Fpll = (Fclk * PLL_mul) / PLL_div) + #define CONFIG_PLL1_SOURCE PLL_SRC_MAINCK_XTAL + #define CONFIG_PLL1_MUL 16 + #define CONFIG_PLL1_DIV 2 + // USB Clock Source Options (Fusb = FpllX / USB_div) + #define CONFIG_USBCLK_SOURCE USBCLK_SRC_PLL1 + #define CONFIG_USBCLK_DIV 2 +\endcode + * + * Content of conf_clock.h for SAM3U device (UPDHS: USB Peripheral Device High Speed): + * \code + // USB Clock Source fixed at UPLL. +\endcode + * + * Content of conf_clock.h for SAM3X, SAM3A devices (UOTGHS: USB OTG High Speed): + * \code + // USB Clock Source fixed at UPLL. + #define CONFIG_USBCLK_SOURCE USBCLK_SRC_UPLL + #define CONFIG_USBCLK_DIV 1 +\endcode + * + * Content of conf_clocks.h for SAMD devices (USB): + * \code + // System clock bus configuration + # define CONF_CLOCK_FLASH_WAIT_STATES 2 + + // USB Clock Source fixed at DFLL. + // SYSTEM_CLOCK_SOURCE_DFLL configuration - Digital Frequency Locked Loop + # define CONF_CLOCK_DFLL_ENABLE true + # define CONF_CLOCK_DFLL_LOOP_MODE SYSTEM_CLOCK_DFLL_LOOP_MODE_USB_RECOVERY + # define CONF_CLOCK_DFLL_ON_DEMAND true + + // Set this to true to configure the GCLK when running clocks_init. + // If set to false, none of the GCLK generators will be configured in clocks_init(). + # define CONF_CLOCK_CONFIGURE_GCLK true + + // Configure GCLK generator 0 (Main Clock) + # define CONF_CLOCK_GCLK_0_ENABLE true + # define CONF_CLOCK_GCLK_0_RUN_IN_STANDBY true + # define CONF_CLOCK_GCLK_0_CLOCK_SOURCE SYSTEM_CLOCK_SOURCE_DFLL + # define CONF_CLOCK_GCLK_0_PRESCALER 1 + # define CONF_CLOCK_GCLK_0_OUTPUT_ENABLE false +\endcode + */ + +/** + * \page udc_use_case_1 Change USB speed + * + * In this use case, the USB device is used with different USB speeds. + * + * \section udc_use_case_1_setup Setup steps + * + * Prior to implement this use case, be sure to have already + * apply the UDI module "basic use case". + * + * \section udc_use_case_1_usage Usage steps + * + * \subsection udc_use_case_1_usage_code Example code + * Content of conf_usb.h: + * \code + #if // Low speed + #define USB_DEVICE_LOW_SPEED + // #define USB_DEVICE_HS_SUPPORT + + #elif // Full speed + // #define USB_DEVICE_LOW_SPEED + // #define USB_DEVICE_HS_SUPPORT + + #elif // High speed + // #define USB_DEVICE_LOW_SPEED + #define USB_DEVICE_HS_SUPPORT + + #endif +\endcode + * + * \subsection udc_use_case_1_usage_flow Workflow + * -# Ensure that conf_usb.h is available and contains the following parameters + * required for a USB device low speed (1.5Mbit/s): + * - \code #define USB_DEVICE_LOW_SPEED + //#define USB_DEVICE_HS_SUPPORT \endcode + * -# Ensure that conf_usb.h contains the following parameters + * required for a USB device full speed (12Mbit/s): + * - \code //#define USB_DEVICE_LOW_SPEED + //#define USB_DEVICE_HS_SUPPORT \endcode + * -# Ensure that conf_usb.h contains the following parameters + * required for a USB device high speed (480Mbit/s): + * - \code //#define USB_DEVICE_LOW_SPEED + #define USB_DEVICE_HS_SUPPORT \endcode + */ + +/** + * \page udc_use_case_2 Use USB strings + * + * In this use case, the usual USB strings is added in the USB device. + * + * \section udc_use_case_2_setup Setup steps + * Prior to implement this use case, be sure to have already + * apply the UDI module "basic use case". + * + * \section udc_use_case_2_usage Usage steps + * + * \subsection udc_use_case_2_usage_code Example code + * Content of conf_usb.h: + * \code + #define USB_DEVICE_MANUFACTURE_NAME "Manufacture name" + #define USB_DEVICE_PRODUCT_NAME "Product name" + #define USB_DEVICE_SERIAL_NAME "12...EF" +\endcode + * + * \subsection udc_use_case_2_usage_flow Workflow + * -# Ensure that conf_usb.h is available and contains the following parameters + * required to enable different USB strings: + * - \code // Static ASCII name for the manufacture + #define USB_DEVICE_MANUFACTURE_NAME "Manufacture name" \endcode + * - \code // Static ASCII name for the product + #define USB_DEVICE_PRODUCT_NAME "Product name" \endcode + * - \code // Static ASCII name to enable and set a serial number + #define USB_DEVICE_SERIAL_NAME "12...EF" \endcode + */ + +/** + * \page udc_use_case_3 Use USB remote wakeup feature + * + * In this use case, the USB remote wakeup feature is enabled. + * + * \section udc_use_case_3_setup Setup steps + * Prior to implement this use case, be sure to have already + * apply the UDI module "basic use case". + * + * \section udc_use_case_3_usage Usage steps + * + * \subsection udc_use_case_3_usage_code Example code + * Content of conf_usb.h: + * \code + #define USB_DEVICE_ATTR \ + (USB_CONFIG_ATTR_REMOTE_WAKEUP | USB_CONFIG_ATTR_..._POWERED) + #define UDC_REMOTEWAKEUP_ENABLE() my_callback_remotewakeup_enable() + extern void my_callback_remotewakeup_enable(void); + #define UDC_REMOTEWAKEUP_DISABLE() my_callback_remotewakeup_disable() + extern void my_callback_remotewakeup_disable(void); +\endcode + * + * Add to application C-file: + * \code + void my_callback_remotewakeup_enable(void) + { + // Enable application wakeup events (e.g. enable GPIO interrupt) + } + void my_callback_remotewakeup_disable(void) + { + // Disable application wakeup events (e.g. disable GPIO interrupt) + } + + void my_interrupt_event(void) + { + udc_remotewakeup(); + } +\endcode + * + * \subsection udc_use_case_3_usage_flow Workflow + * -# Ensure that conf_usb.h is available and contains the following parameters + * required to enable remote wakeup feature: + * - \code // Authorizes the remote wakeup feature + #define USB_DEVICE_ATTR (USB_CONFIG_ATTR_REMOTE_WAKEUP | USB_CONFIG_ATTR_..._POWERED) \endcode + * - \code // Define callback called when the host enables the remotewakeup feature + #define UDC_REMOTEWAKEUP_ENABLE() my_callback_remotewakeup_enable() + extern void my_callback_remotewakeup_enable(void); \endcode + * - \code // Define callback called when the host disables the remotewakeup feature + #define UDC_REMOTEWAKEUP_DISABLE() my_callback_remotewakeup_disable() + extern void my_callback_remotewakeup_disable(void); \endcode + * -# Send a remote wakeup (USB upstream): + * - \code udc_remotewakeup(); \endcode + */ + +/** + * \page udc_use_case_5 Bus power application recommendations + * + * In this use case, the USB device BUS power feature is enabled. + * This feature requires a correct power consumption management. + * + * \section udc_use_case_5_setup Setup steps + * Prior to implement this use case, be sure to have already + * apply the UDI module "basic use case". + * + * \section udc_use_case_5_usage Usage steps + * + * \subsection udc_use_case_5_usage_code Example code + * Content of conf_usb.h: + * \code + #define USB_DEVICE_ATTR (USB_CONFIG_ATTR_BUS_POWERED) + #define UDC_SUSPEND_EVENT() user_callback_suspend_action() + extern void user_callback_suspend_action(void) + #define UDC_RESUME_EVENT() user_callback_resume_action() + extern void user_callback_resume_action(void) +\endcode + * + * Add to application C-file: + * \code + void user_callback_suspend_action(void) + { + // Disable hardware component to reduce power consumption + } + void user_callback_resume_action(void) + { + // Re-enable hardware component + } +\endcode + * + * \subsection udc_use_case_5_usage_flow Workflow + * -# Ensure that conf_usb.h is available and contains the following parameters: + * - \code // Authorizes the BUS power feature + #define USB_DEVICE_ATTR (USB_CONFIG_ATTR_BUS_POWERED) \endcode + * - \code // Define callback called when the host suspend the USB line + #define UDC_SUSPEND_EVENT() user_callback_suspend_action() + extern void user_callback_suspend_action(void); \endcode + * - \code // Define callback called when the host or device resume the USB line + #define UDC_RESUME_EVENT() user_callback_resume_action() + extern void user_callback_resume_action(void); \endcode + * -# Reduce power consumption in suspend mode (max. 2.5mA on Vbus): + * - \code void user_callback_suspend_action(void) + { + turn_off_components(); + } \endcode + */ + +/** + * \page udc_use_case_6 USB dynamic serial number + * + * In this use case, the USB serial strings is dynamic. + * For a static serial string refer to \ref udc_use_case_2. + * + * \section udc_use_case_6_setup Setup steps + * Prior to implement this use case, be sure to have already + * apply the UDI module "basic use case". + * + * \section udc_use_case_6_usage Usage steps + * + * \subsection udc_use_case_6_usage_code Example code + * Content of conf_usb.h: + * \code + #define USB_DEVICE_SERIAL_NAME + #define USB_DEVICE_GET_SERIAL_NAME_POINTER serial_number + #define USB_DEVICE_GET_SERIAL_NAME_LENGTH 12 + extern uint8_t serial_number[]; +\endcode + * + * Add to application C-file: + * \code + uint8_t serial_number[USB_DEVICE_GET_SERIAL_NAME_LENGTH]; + + void init_build_usb_serial_number(void) + { + serial_number[0] = 'A'; + serial_number[1] = 'B'; + ... + serial_number[USB_DEVICE_GET_SERIAL_NAME_LENGTH-1] = 'C'; + } \endcode + * + * \subsection udc_use_case_6_usage_flow Workflow + * -# Ensure that conf_usb.h is available and contains the following parameters + * required to enable a USB serial number strings dynamically: + * - \code #define USB_DEVICE_SERIAL_NAME // Define this empty + #define USB_DEVICE_GET_SERIAL_NAME_POINTER serial_number // Give serial array pointer + #define USB_DEVICE_GET_SERIAL_NAME_LENGTH 12 // Give size of serial array + extern uint8_t serial_number[]; // Declare external serial array \endcode + * -# Before start USB stack, initialize the serial array + * - \code + uint8_t serial_number[USB_DEVICE_GET_SERIAL_NAME_LENGTH]; + + void init_build_usb_serial_number(void) + { + serial_number[0] = 'A'; + serial_number[1] = 'B'; + ... + serial_number[USB_DEVICE_GET_SERIAL_NAME_LENGTH-1] = 'C'; + } \endcode + */ + + + +#endif // _UDC_H_ diff --git a/AVR Code/USB_BULK_TEST/src/ASF/common/services/usb/udc/udc_desc.h b/AVR Code/USB_BULK_TEST/src/ASF/common/services/usb/udc/udc_desc.h new file mode 100644 index 00000000..88ed08a9 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/common/services/usb/udc/udc_desc.h @@ -0,0 +1,135 @@ +/** + * \file + * + * \brief Common API for USB Device Interface + * + * Copyright (c) 2009-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ + +#ifndef _UDC_DESC_H_ +#define _UDC_DESC_H_ + +#include "conf_usb.h" +#include "usb_protocol.h" +#include "udi.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \ingroup udc_group + * \defgroup udc_desc_group USB Device Descriptor + * + * @{ + */ + +/** + * \brief Defines the memory's location of USB descriptors + * + * By default the Descriptor is stored in RAM + * (UDC_DESC_STORAGE is defined empty). + * + * If you have need to free RAM space, + * it is possible to put descriptor in flash in following case: + * - USB driver authorize flash transfer (USBB on UC3 and USB on Mega) + * - USB Device is not high speed (UDC no need to change USB descriptors) + * + * For UC3 application used "const". + * + * For Mega application used "code". + */ +#define UDC_DESC_STORAGE + // Descriptor storage in internal RAM +#if (defined UDC_DATA_USE_HRAM_SUPPORT) +# if defined(__GNUC__) +# define UDC_DATA(x) COMPILER_WORD_ALIGNED __attribute__((__section__(".data_hram0"))) +# define UDC_BSS(x) COMPILER_ALIGNED(x) __attribute__((__section__(".bss_hram0"))) +# elif defined(__ICCAVR32__) +# define UDC_DATA(x) COMPILER_ALIGNED(x) __data32 +# define UDC_BSS(x) COMPILER_ALIGNED(x) __data32 +# endif +#else +# define UDC_DATA(x) COMPILER_ALIGNED(x) +# define UDC_BSS(x) COMPILER_ALIGNED(x) +#endif + + + +/** + * \brief Configuration descriptor and UDI link for one USB speed + */ +typedef struct { + //! USB configuration descriptor + usb_conf_desc_t UDC_DESC_STORAGE *desc; + //! Array of UDI API pointer + udi_api_t UDC_DESC_STORAGE *UDC_DESC_STORAGE * udi_apis; +} udc_config_speed_t; + + +/** + * \brief All information about the USB Device + */ +typedef struct { + //! USB device descriptor for low or full speed + usb_dev_desc_t UDC_DESC_STORAGE *confdev_lsfs; + //! USB configuration descriptor and UDI API pointers for low or full speed + udc_config_speed_t UDC_DESC_STORAGE *conf_lsfs; +#ifdef USB_DEVICE_HS_SUPPORT + //! USB device descriptor for high speed + usb_dev_desc_t UDC_DESC_STORAGE *confdev_hs; + //! USB device qualifier, only use in high speed mode + usb_dev_qual_desc_t UDC_DESC_STORAGE *qualifier; + //! USB configuration descriptor and UDI API pointers for high speed + udc_config_speed_t UDC_DESC_STORAGE *conf_hs; +#endif + usb_dev_bos_desc_t UDC_DESC_STORAGE *conf_bos; +} udc_config_t; + +//! Global variables of USB Device Descriptor and UDI links +extern UDC_DESC_STORAGE udc_config_t udc_config; + +//@} + +#ifdef __cplusplus +} +#endif +#endif // _UDC_DESC_H_ diff --git a/AVR Code/USB_BULK_TEST/src/ASF/common/services/usb/udc/udd.h b/AVR Code/USB_BULK_TEST/src/ASF/common/services/usb/udc/udd.h new file mode 100644 index 00000000..10807f43 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/common/services/usb/udc/udd.h @@ -0,0 +1,396 @@ +/** + * \file + * + * \brief Common API for USB Device Drivers (UDD) + * + * Copyright (c) 2009-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ + +#ifndef _UDD_H_ +#define _UDD_H_ + +#include "usb_protocol.h" +#include "udc_desc.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \ingroup usb_device_group + * \defgroup udd_group USB Device Driver (UDD) + * + * The UDD driver provides a low-level abstraction of the device + * controller hardware. Most events coming from the hardware such as + * interrupts, which may cause the UDD to call into the UDC and UDI. + * + * @{ + */ + +//! \brief Endpoint identifier +typedef uint8_t udd_ep_id_t; + +//! \brief Endpoint transfer status +//! Returned in parameters of callback register via udd_ep_run routine. +typedef enum { + UDD_EP_TRANSFER_OK = 0, + UDD_EP_TRANSFER_ABORT = 1, +} udd_ep_status_t; + +/** + * \brief Global variable to give and record information of the setup request management + * + * This global variable allows to decode and response a setup request. + * It can be updated by udc_process_setup() from UDC or *setup() from UDIs. + */ +typedef struct { + //! Data received in USB SETUP packet + //! Note: The swap of "req.wValues" from uin16_t to le16_t is done by UDD. + usb_setup_req_t req; + + //! Point to buffer to send or fill with data following SETUP packet + //! This buffer must be word align for DATA IN phase (use prefix COMPILER_WORD_ALIGNED for buffer) + uint8_t *payload; + + //! Size of buffer to send or fill, and content the number of byte transfered + uint16_t payload_size; + + //! Callback called after reception of ZLP from setup request + void (*callback) (void); + + //! Callback called when the buffer given (.payload) is full or empty. + //! This one return false to abort data transfer, or true with a new buffer in .payload. + bool(*over_under_run) (void); +} udd_ctrl_request_t; +extern udd_ctrl_request_t udd_g_ctrlreq; + +//! Return true if the setup request \a udd_g_ctrlreq indicates IN data transfer +#define Udd_setup_is_in() \ + (USB_REQ_DIR_IN == (udd_g_ctrlreq.req.bmRequestType & USB_REQ_DIR_MASK)) + +//! Return true if the setup request \a udd_g_ctrlreq indicates OUT data transfer +#define Udd_setup_is_out() \ + (USB_REQ_DIR_OUT == (udd_g_ctrlreq.req.bmRequestType & USB_REQ_DIR_MASK)) + +//! Return the type of the SETUP request \a udd_g_ctrlreq. \see usb_reqtype. +#define Udd_setup_type() \ + (udd_g_ctrlreq.req.bmRequestType & USB_REQ_TYPE_MASK) + +//! Return the recipient of the SETUP request \a udd_g_ctrlreq. \see usb_recipient +#define Udd_setup_recipient() \ + (udd_g_ctrlreq.req.bmRequestType & USB_REQ_RECIP_MASK) + +/** + * \brief End of halt callback function type. + * Registered by routine udd_ep_wait_stall_clear() + * Callback called when endpoint stall is cleared. + */ +typedef void (*udd_callback_halt_cleared_t) (void); + +/** + * \brief End of transfer callback function type. + * Registered by routine udd_ep_run() + * Callback called by USB interrupt after data transfer or abort (reset,...). + * + * \param status UDD_EP_TRANSFER_OK, if transfer is complete + * \param status UDD_EP_TRANSFER_ABORT, if transfer is aborted + * \param n number of data transfered + */ +typedef void (*udd_callback_trans_t) (udd_ep_status_t status, + iram_size_t nb_transfered, udd_ep_id_t ep); + +/** + * \brief Authorizes the VBUS event + * + * \return true, if the VBUS monitoring is possible. + */ +bool udd_include_vbus_monitoring(void); + +/** + * \brief Enables the USB Device mode + */ +void udd_enable(void); + +/** + * \brief Disables the USB Device mode + */ +void udd_disable(void); + +/** + * \brief Attach device to the bus when possible + * + * \warning If a VBus control is included in driver, + * then it will attach device when an acceptable Vbus + * level from the host is detected. + */ +void udd_attach(void); + +/** + * \brief Detaches the device from the bus + * + * The driver must remove pull-up on USB line D- or D+. + */ +void udd_detach(void); + +/** + * \brief Test whether the USB Device Controller is running at high + * speed or not. + * + * \return \c true if the Device is running at high speed mode, otherwise \c false. + */ +bool udd_is_high_speed(void); + +/** + * \brief Changes the USB address of device + * + * \param address New USB address + */ +void udd_set_address(uint8_t address); + +/** + * \brief Returns the USB address of device + * + * \return USB address + */ +uint8_t udd_getaddress(void); + +/** + * \brief Returns the current start of frame number + * + * \return current start of frame number. + */ +uint16_t udd_get_frame_number(void); + +/** + * \brief Returns the current micro start of frame number + * + * \return current micro start of frame number required in high speed mode. + */ +uint16_t udd_get_micro_frame_number(void); + +/*! \brief The USB driver sends a resume signal called Upstream Resume + */ +void udd_send_remotewakeup(void); + +/** + * \brief Load setup payload + * + * \param payload Pointer on payload + * \param payload_size Size of payload + */ +void udd_set_setup_payload( uint8_t *payload, uint16_t payload_size ); + + +/** + * \name Endpoint Management + * + * The following functions allow drivers to create and remove + * endpoints, as well as set, clear and query their "halted" and + * "wedged" states. + */ +//@{ + +#if (USB_DEVICE_MAX_EP != 0) + +/** + * \brief Configures and enables an endpoint + * + * \param ep Endpoint number including direction (USB_EP_DIR_IN/USB_EP_DIR_OUT). + * \param bmAttributes Attributes of endpoint declared in the descriptor. + * \param MaxEndpointSize Endpoint maximum size + * + * \return \c 1 if the endpoint is enabled, otherwise \c 0. + */ +bool udd_ep_alloc(udd_ep_id_t ep, uint8_t bmAttributes, + uint16_t MaxEndpointSize); + +/** + * \brief Disables an endpoint + * + * \param ep Endpoint number including direction (USB_EP_DIR_IN/USB_EP_DIR_OUT). + */ +void udd_ep_free(udd_ep_id_t ep); + +/** + * \brief Check if the endpoint \a ep is halted. + * + * \param ep The ID of the endpoint to check. + * + * \return \c 1 if \a ep is halted, otherwise \c 0. + */ +bool udd_ep_is_halted(udd_ep_id_t ep); + +/** + * \brief Set the halted state of the endpoint \a ep + * + * After calling this function, any transaction on \a ep will result + * in a STALL handshake being sent. Any pending transactions will be + * performed first, however. + * + * \param ep The ID of the endpoint to be halted + * + * \return \c 1 if \a ep is halted, otherwise \c 0. + */ +bool udd_ep_set_halt(udd_ep_id_t ep); + +/** + * \brief Clear the halted state of the endpoint \a ep + * + * After calling this function, any transaction on \a ep will + * be handled normally, i.e. a STALL handshake will not be sent, and + * the data toggle sequence will start at DATA0. + * + * \param ep The ID of the endpoint to be un-halted + * + * \return \c 1 if function was successfully done, otherwise \c 0. + */ +bool udd_ep_clear_halt(udd_ep_id_t ep); + +/** + * \brief Registers a callback to call when endpoint halt is cleared + * + * \param ep The ID of the endpoint to use + * \param callback NULL or function to call when endpoint halt is cleared + * + * \warning if the endpoint is not halted then the \a callback is called immediately. + * + * \return \c 1 if the register is accepted, otherwise \c 0. + */ +bool udd_ep_wait_stall_clear(udd_ep_id_t ep, + udd_callback_halt_cleared_t callback); + +/** + * \brief Allows to receive or send data on an endpoint + * + * The driver uses a specific DMA USB to transfer data + * from internal RAM to endpoint, if this one is available. + * When the transfer is finished or aborted (stall, reset, ...), the \a callback is called. + * The \a callback returns the transfer status and eventually the number of byte transfered. + * Note: The control endpoint is not authorized. + * + * \param ep The ID of the endpoint to use + * \param b_shortpacket Enabled automatic short packet + * \param buf Buffer on Internal RAM to send or fill. + * It must be align, then use COMPILER_WORD_ALIGNED. + * \param buf_size Buffer size to send or fill + * \param callback NULL or function to call at the end of transfer + * + * \warning About \a b_shortpacket, for IN endpoint it means that a short packet + * (or a Zero Length Packet) will be sent to the USB line to properly close the usb + * transfer at the end of the data transfer. + * For Bulk and Interrupt OUT endpoint, it will automatically stop the transfer + * at the end of the data transfer (received short packet). + * + * \return \c 1 if function was successfully done, otherwise \c 0. + */ +bool udd_ep_run(udd_ep_id_t ep, bool b_shortpacket, + uint8_t * buf, iram_size_t buf_size, + udd_callback_trans_t callback); +/** + * \brief Aborts transfer on going on endpoint + * + * If a transfer is on going, then it is stopped and + * the callback registered is called to signal the end of transfer. + * Note: The control endpoint is not authorized. + * + * \param ep Endpoint to abort + */ +void udd_ep_abort(udd_ep_id_t ep); + +#endif + +//@} + + +/** + * \name High speed test mode management + * + * The following functions allow the device to jump to a specific test mode required in high speed mode. + */ +//@{ +void udd_test_mode_j(void); +void udd_test_mode_k(void); +void udd_test_mode_se0_nak(void); +void udd_test_mode_packet(void); +//@} + + +/** + * \name UDC callbacks to provide for UDD + * + * The following callbacks are used by UDD. + */ +//@{ + +/** + * \brief Decodes and manages a setup request + * + * The driver call it when a SETUP packet is received. + * The \c udd_g_ctrlreq contains the data of SETUP packet. + * If this callback accepts the setup request then it must + * return \c 1 and eventually update \c udd_g_ctrlreq to send or receive data. + * + * \return \c 1 if the request is accepted, otherwise \c 0. + */ +extern bool udc_process_setup(void); + +/** + * \brief Reset the UDC + * + * The UDC must reset all configuration. + */ +extern void udc_reset(void); + +/** + * \brief To signal that a SOF is occurred + * + * The UDC must send the signal to all UDIs enabled + */ +extern void udc_sof_notify(void); + +//@} + +//@} + +#ifdef __cplusplus +} +#endif +#endif // _UDD_H_ diff --git a/AVR Code/USB_BULK_TEST/src/ASF/common/services/usb/udc/udi.h b/AVR Code/USB_BULK_TEST/src/ASF/common/services/usb/udc/udi.h new file mode 100644 index 00000000..1fc7ae5d --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/common/services/usb/udc/udi.h @@ -0,0 +1,133 @@ +/** + * \file + * + * \brief Common API for USB Device Interface + * + * Copyright (c) 2009-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ + +#ifndef _UDI_H_ +#define _UDI_H_ + +#include "conf_usb.h" +#include "usb_protocol.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \ingroup usb_device_group + * \defgroup udi_group USB Device Interface (UDI) + * The UDI provides a common API for all classes, + * and this is used by UDC for the main control of USB Device interface. + * @{ + */ + +/** + * \brief UDI API. + * + * The callbacks within this structure are called only by + * USB Device Controller (UDC) + * + * The udc_get_interface_desc() can be use by UDI to know the interface descriptor + * selected by UDC. + */ +typedef struct { + /** + * \brief Enable the interface. + * + * This function is called when the host selects a configuration + * to which this interface belongs through a Set Configuration + * request, and when the host selects an alternate setting of + * this interface through a Set Interface request. + * + * \return \c 1 if function was successfully done, otherwise \c 0. + */ + bool(*enable) (void); + + /** + * \brief Disable the interface. + * + * This function is called when this interface is currently + * active, and + * - the host selects any configuration through a Set + * Configuration request, or + * - the host issues a USB reset, or + * - the device is detached from the host (i.e. Vbus is no + * longer present) + */ + void (*disable) (void); + + /** + * \brief Handle a control request directed at an interface. + * + * This function is called when this interface is currently + * active and the host sends a SETUP request + * with this interface as the recipient. + * + * Use udd_g_ctrlreq to decode and response to SETUP request. + * + * \return \c 1 if this interface supports the SETUP request, otherwise \c 0. + */ + bool(*setup) (void); + + /** + * \brief Returns the current setting of the selected interface. + * + * This function is called when UDC when know alternate setting of selected interface. + * + * \return alternate setting of selected interface + */ + uint8_t(*getsetting) (void); + + /** + * \brief To signal that a SOF is occurred + */ + void(*sof_notify) (void); +} udi_api_t; + +//@} + +#ifdef __cplusplus +} +#endif +#endif // _UDI_H_ diff --git a/AVR Code/USB_BULK_TEST/src/ASF/common/services/usb/usb_atmel.h b/AVR Code/USB_BULK_TEST/src/ASF/common/services/usb/usb_atmel.h new file mode 100644 index 00000000..049459cc --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/common/services/usb/usb_atmel.h @@ -0,0 +1,190 @@ +/** + * \file + * + * \brief All USB VIDs and PIDs from Atmel USB applications + * + * Copyright (c) 2009-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ + +#ifndef _USB_ATMEL_H_ +#define _USB_ATMEL_H_ + +/** + * \defgroup usb_group USB Stack + * + * This stack includes the USB Device Stack, USB Host Stack and common + * definitions. + * @{ + */ + +//! @} + +/** + * \ingroup usb_group + * \defgroup usb_atmel_ids_group Atmel USB Identifiers + * + * This module defines Atmel PID and VIDs constants. + * + * @{ + */ + +//! \name Vendor Identifier assigned by USB org to ATMEL +#define USB_VID_ATMEL 0x03EB + + +//! \name Product Identifier assigned by ATMEL to AVR applications +//! @{ + +//! \name The range from 2000h to 20FFh is reserved to the old PID for C51, MEGA, and others. +//! @{ +#define USB_PID_ATMEL_MEGA_HIDGENERIC 0x2013 +#define USB_PID_ATMEL_MEGA_HIDKEYBOARD 0x2017 +#define USB_PID_ATMEL_MEGA_CDC 0x2018 +#define USB_PID_ATMEL_MEGA_AUDIO_IN 0x2019 +#define USB_PID_ATMEL_MEGA_MS 0x201A +#define USB_PID_ATMEL_MEGA_AUDIO_IN_OUT 0x201B +#define USB_PID_ATMEL_MEGA_HIDMOUSE 0x201C +#define USB_PID_ATMEL_MEGA_HIDMOUSE_CERTIF_U4 0x201D +#define USB_PID_ATMEL_MEGA_CDC_MULTI 0x201E +#define USB_PID_ATMEL_MEGA_MS_HIDMS_HID_USBKEY 0x2022 +#define USB_PID_ATMEL_MEGA_MS_HIDMS_HID_STK525 0x2023 +#define USB_PID_ATMEL_MEGA_MS_2 0x2029 +#define USB_PID_ATMEL_MEGA_MS_HIDMS 0x202A +#define USB_PID_ATMEL_MEGA_MS_3 0x2032 +#define USB_PID_ATMEL_MEGA_LIBUSB 0x2050 +//! @} + +//! \name The range 2100h to 21FFh is reserved to PIDs for AVR Tools. +//! @{ +#define USB_PID_ATMEL_XPLAINED 0x2122 +#define USB_PID_ATMEL_XMEGA_USB_ZIGBIT_2_4GHZ 0x214A +#define USB_PID_ATMEL_XMEGA_USB_ZIGBIT_SUBGHZ 0x214B +//! @} + +//! \name The range 2300h to 23FFh is reserved to PIDs for demo from ASF1.7=> +//! @{ +#define USB_PID_ATMEL_UC3_ENUM 0x2300 +#define USB_PID_ATMEL_UC3_MS 0x2301 +#define USB_PID_ATMEL_UC3_MS_SDRAM_LOADER 0x2302 +#define USB_PID_ATMEL_UC3_EVK1100_CTRLPANEL 0x2303 +#define USB_PID_ATMEL_UC3_HID 0x2304 +#define USB_PID_ATMEL_UC3_EVK1101_CTRLPANEL_HID 0x2305 +#define USB_PID_ATMEL_UC3_EVK1101_CTRLPANEL_HID_MS 0x2306 +#define USB_PID_ATMEL_UC3_CDC 0x2307 +#define USB_PID_ATMEL_UC3_AUDIO_MICRO 0x2308 +#define USB_PID_ATMEL_UC3_CDC_DEBUG 0x2310 // Virtual Com (debug interface) on EVK11xx +#define USB_PID_ATMEL_UC3_AUDIO_SPEAKER_MICRO 0x2311 +#define USB_PID_ATMEL_UC3_CDC_MSC 0x2312 +//! @} + +//! \name The range 2400h to 24FFh is reserved to PIDs for ASF applications +//! @{ +#define USB_PID_ATMEL_ASF_HIDMOUSE 0x2400 +#define USB_PID_ATMEL_ASF_HIDKEYBOARD 0x2401 +#define USB_PID_ATMEL_ASF_HIDGENERIC 0x2402 +#define USB_PID_ATMEL_ASF_MSC 0x2403 +#define USB_PID_ATMEL_ASF_CDC 0x2404 +#define USB_PID_ATMEL_ASF_PHDC 0x2405 +#define USB_PID_ATMEL_ASF_MSC_HIDMOUSE 0x2420 +#define USB_PID_ATMEL_ASF_MSC_HIDS_CDC 0x2421 +#define USB_PID_ATMEL_ASF_MSC_HIDKEYBOARD 0x2422 +#define USB_PID_ATMEL_ASF_VENDOR_CLASS 0x2423 +#define USB_PID_ATMEL_ASF_MSC_CDC 0x2424 +#define USB_PID_ATMEL_ASF_TWO_CDC 0x2425 +#define USB_PID_ATMEL_ASF_SEVEN_CDC 0x2426 +#define USB_PID_ATMEL_ASF_XPLAIN_BC_POWERONLY 0x2430 +#define USB_PID_ATMEL_ASF_XPLAIN_BC_TERMINAL 0x2431 +#define USB_PID_ATMEL_ASF_XPLAIN_BC_TOUCH 0x2432 +#define USB_PID_ATMEL_ASF_AUDIO_SPEAKER 0x2433 +#define USB_PID_ATMEL_ASF_XMEGA_B1_XPLAINED 0x2434 +//! @} + +//! \name The range 2F00h to 2FFFh is reserved to official PIDs for AVR bootloaders +//! Note, !!!! don't use this range for demos or examples !!!! +//! @{ +#define USB_PID_ATMEL_DFU_ATXMEGA64C3 0x2FD6 +#define USB_PID_ATMEL_DFU_ATXMEGA128C3 0x2FD7 +#define USB_PID_ATMEL_DFU_ATXMEGA16C4 0x2FD8 +#define USB_PID_ATMEL_DFU_ATXMEGA32C4 0x2FD9 +#define USB_PID_ATMEL_DFU_ATXMEGA256C3 0x2FDA +#define USB_PID_ATMEL_DFU_ATXMEGA384C3 0x2FDB +#define USB_PID_ATMEL_DFU_ATUCL3_L4 0x2FDC +#define USB_PID_ATMEL_DFU_ATXMEGA64A4U 0x2FDD +#define USB_PID_ATMEL_DFU_ATXMEGA128A4U 0x2FDE + +#define USB_PID_ATMEL_DFU_ATXMEGA64B3 0x2FDF +#define USB_PID_ATMEL_DFU_ATXMEGA128B3 0x2FE0 +#define USB_PID_ATMEL_DFU_ATXMEGA64B1 0x2FE1 +#define USB_PID_ATMEL_DFU_ATXMEGA256A3BU 0x2FE2 +#define USB_PID_ATMEL_DFU_ATXMEGA16A4U 0x2FE3 +#define USB_PID_ATMEL_DFU_ATXMEGA32A4U 0x2FE4 +#define USB_PID_ATMEL_DFU_ATXMEGA64A3U 0x2FE5 +#define USB_PID_ATMEL_DFU_ATXMEGA128A3U 0x2FE6 +#define USB_PID_ATMEL_DFU_ATXMEGA192A3U 0x2FE7 +#define USB_PID_ATMEL_DFU_ATXMEGA64A1U 0x2FE8 +#define USB_PID_ATMEL_DFU_ATUC3D 0x2FE9 +#define USB_PID_ATMEL_DFU_ATXMEGA128B1 0x2FEA +#define USB_PID_ATMEL_DFU_AT32UC3C 0x2FEB +#define USB_PID_ATMEL_DFU_ATXMEGA256A3U 0x2FEC +#define USB_PID_ATMEL_DFU_ATXMEGA128A1U 0x2FED +#define USB_PID_ATMEL_DFU_ATMEGA8U2 0x2FEE +#define USB_PID_ATMEL_DFU_ATMEGA16U2 0x2FEF +#define USB_PID_ATMEL_DFU_ATMEGA32U2 0x2FF0 +#define USB_PID_ATMEL_DFU_AT32UC3A3 0x2FF1 +#define USB_PID_ATMEL_DFU_ATMEGA32U6 0x2FF2 +#define USB_PID_ATMEL_DFU_ATMEGA16U4 0x2FF3 +#define USB_PID_ATMEL_DFU_ATMEGA32U4 0x2FF4 +#define USB_PID_ATMEL_DFU_AT32AP7200 0x2FF5 +#define USB_PID_ATMEL_DFU_AT32UC3B 0x2FF6 +#define USB_PID_ATMEL_DFU_AT90USB82 0x2FF7 +#define USB_PID_ATMEL_DFU_AT32UC3A 0x2FF8 +#define USB_PID_ATMEL_DFU_AT90USB64 0x2FF9 +#define USB_PID_ATMEL_DFU_AT90USB162 0x2FFA +#define USB_PID_ATMEL_DFU_AT90USB128 0x2FFB +// 2FFCh to 2FFFh used by C51 family products +//! @} + +//! @} + +//! @} + + +#endif // _USB_ATMEL_H_ diff --git a/AVR Code/USB_BULK_TEST/src/ASF/common/services/usb/usb_protocol.h b/AVR Code/USB_BULK_TEST/src/ASF/common/services/usb/usb_protocol.h new file mode 100644 index 00000000..0b532938 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/common/services/usb/usb_protocol.h @@ -0,0 +1,505 @@ +/** + * \file + * + * \brief USB protocol definitions. + * + * This file contains the USB definitions and data structures provided by the + * USB 2.0 specification. + * + * Copyright (c) 2009-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ + +#ifndef _USB_PROTOCOL_H_ +#define _USB_PROTOCOL_H_ + +#include "usb_atmel.h" + +/** + * \ingroup usb_group + * \defgroup usb_protocol_group USB Protocol Definitions + * + * This module defines constants and data structures provided by the USB + * 2.0 specification. + * + * @{ + */ + +//! Value for field bcdUSB +#define USB_V2_0 0x0200 //!< USB Specification version 2.00 +#define USB_V2_1 0x0201 //!< USB Specification version 2.01 + +/*! \name Generic definitions (Class, subclass and protocol) + */ +//! @{ +#define NO_CLASS 0x00 +#define CLASS_VENDOR_SPECIFIC 0xFF +#define NO_SUBCLASS 0x00 +#define NO_PROTOCOL 0x00 +//! @} + +//! \name IAD (Interface Association Descriptor) constants +//! @{ +#define CLASS_IAD 0xEF +#define SUB_CLASS_IAD 0x02 +#define PROTOCOL_IAD 0x01 +//! @} + +/** + * \brief USB request data transfer direction (bmRequestType) + */ +#define USB_REQ_DIR_OUT (0<<7) //!< Host to device +#define USB_REQ_DIR_IN (1<<7) //!< Device to host +#define USB_REQ_DIR_MASK (1<<7) //!< Mask + +/** + * \brief USB request types (bmRequestType) + */ +#define USB_REQ_TYPE_STANDARD (0<<5) //!< Standard request +#define USB_REQ_TYPE_CLASS (1<<5) //!< Class-specific request +#define USB_REQ_TYPE_VENDOR (2<<5) //!< Vendor-specific request +#define USB_REQ_TYPE_MASK (3<<5) //!< Mask + +/** + * \brief USB recipient codes (bmRequestType) + */ +#define USB_REQ_RECIP_DEVICE (0<<0) //!< Recipient device +#define USB_REQ_RECIP_INTERFACE (1<<0) //!< Recipient interface +#define USB_REQ_RECIP_ENDPOINT (2<<0) //!< Recipient endpoint +#define USB_REQ_RECIP_OTHER (3<<0) //!< Recipient other +#define USB_REQ_RECIP_MASK (0x1F) //!< Mask + +/** + * \brief Standard USB requests (bRequest) + */ +enum usb_reqid { + USB_REQ_GET_STATUS = 0, + USB_REQ_CLEAR_FEATURE = 1, + USB_REQ_SET_FEATURE = 3, + USB_REQ_SET_ADDRESS = 5, + USB_REQ_GET_DESCRIPTOR = 6, + USB_REQ_SET_DESCRIPTOR = 7, + USB_REQ_GET_CONFIGURATION = 8, + USB_REQ_SET_CONFIGURATION = 9, + USB_REQ_GET_INTERFACE = 10, + USB_REQ_SET_INTERFACE = 11, + USB_REQ_SYNCH_FRAME = 12, +}; + +/** + * \brief Standard USB device status flags + * + */ +enum usb_device_status { + USB_DEV_STATUS_BUS_POWERED = 0, + USB_DEV_STATUS_SELF_POWERED = 1, + USB_DEV_STATUS_REMOTEWAKEUP = 2 +}; + +/** + * \brief Standard USB Interface status flags + * + */ +enum usb_interface_status { + USB_IFACE_STATUS_RESERVED = 0 +}; + +/** + * \brief Standard USB endpoint status flags + * + */ +enum usb_endpoint_status { + USB_EP_STATUS_HALTED = 1, +}; + +/** + * \brief Standard USB device feature flags + * + * \note valid for SetFeature request. + */ +enum usb_device_feature { + USB_DEV_FEATURE_REMOTE_WAKEUP = 1, //!< Remote wakeup enabled + USB_DEV_FEATURE_TEST_MODE = 2, //!< USB test mode + USB_DEV_FEATURE_OTG_B_HNP_ENABLE = 3, + USB_DEV_FEATURE_OTG_A_HNP_SUPPORT = 4, + USB_DEV_FEATURE_OTG_A_ALT_HNP_SUPPORT = 5 +}; + +/** + * \brief Test Mode possible on HS USB device + * + * \note valid for USB_DEV_FEATURE_TEST_MODE request. + */ +enum usb_device_hs_test_mode { + USB_DEV_TEST_MODE_J = 1, + USB_DEV_TEST_MODE_K = 2, + USB_DEV_TEST_MODE_SE0_NAK = 3, + USB_DEV_TEST_MODE_PACKET = 4, + USB_DEV_TEST_MODE_FORCE_ENABLE = 5, +}; + +/** + * \brief Standard USB endpoint feature/status flags + */ +enum usb_endpoint_feature { + USB_EP_FEATURE_HALT = 0, +}; + +/** + * \brief Standard USB Test Mode Selectors + */ +enum usb_test_mode_selector { + USB_TEST_J = 0x01, + USB_TEST_K = 0x02, + USB_TEST_SE0_NAK = 0x03, + USB_TEST_PACKET = 0x04, + USB_TEST_FORCE_ENABLE = 0x05, +}; + +/** + * \brief Standard USB descriptor types + */ +enum usb_descriptor_type { + USB_DT_DEVICE = 1, + USB_DT_CONFIGURATION = 2, + USB_DT_STRING = 3, + USB_DT_INTERFACE = 4, + USB_DT_ENDPOINT = 5, + USB_DT_DEVICE_QUALIFIER = 6, + USB_DT_OTHER_SPEED_CONFIGURATION = 7, + USB_DT_INTERFACE_POWER = 8, + USB_DT_OTG = 9, + USB_DT_IAD = 0x0B, + USB_DT_BOS = 0x0F, + USB_DT_DEVICE_CAPABILITY = 0x10, +}; + +/** + * \brief USB Device Capability types + */ +enum usb_capability_type { + USB_DC_USB20_EXTENSION = 0x02, +}; + +/** + * \brief USB Device Capability - USB 2.0 Extension + * To fill bmAttributes field of usb_capa_ext_desc_t structure. + */ +enum usb_capability_extension_attr { + USB_DC_EXT_LPM = 0x00000002, + USB_DC_EXT_BESL = 0x00000004, + USB_DC_EXT_BESL_BASELINE_VALID = 0x00000008, + USB_DC_EXT_BESL_DEEP_VALID = 0x00000010, +}; +#define USB_DC_EXT_BESL_DEEP_OFFSET 8 +#define USB_DC_EXT_BESL_DEEP(besl) ((besl & 0xF) << USB_DC_EXT_BESL_DEEP_OFFSET) +#define USB_DC_EXT_BESL_BASELINE_OFFSET 12 +#define USB_DC_EXT_BESL_BASELINE(besl) ((besl & 0xF) << USB_DC_EXT_BESL_BASELINE_OFFSET) + +#define BESL_125_US 0 +#define BESL_150_US 1 +#define BESL_200_US 2 +#define BESL_300_US 3 +#define BESL_400_US 4 +#define BESL_500_US 5 +#define BESL_1000_US 6 +#define BESL_2000_US 7 +#define BESL_3000_US 8 +#define BESL_4000_US 9 +#define BESL_5000_US 10 +#define BESL_6000_US 11 +#define BESL_7000_US 12 +#define BESL_8000_US 13 +#define BESL_9000_US 14 +#define BESL_10000_US 15 + +/** Fields definition from a LPM TOKEN */ +#define USB_LPM_ATTRIBUT_BLINKSTATE_MASK (0xF << 0) +#define USB_LPM_ATTRIBUT_BESL_MASK (0xF << 4) +#define USB_LPM_ATTRIBUT_REMOTEWAKE_MASK (1 << 8) +#define USB_LPM_ATTRIBUT_BLINKSTATE(value) ((value & 0xF) << 0) +#define USB_LPM_ATTRIBUT_BESL(value) ((value & 0xF) << 4) +#define USB_LPM_ATTRIBUT_REMOTEWAKE(value) ((value & 1) << 8) +#define USB_LPM_ATTRIBUT_BLINKSTATE_L1 USB_LPM_ATTRIBUT_BLINKSTATE(1) + +/** + * \brief Standard USB endpoint transfer types + */ +enum usb_ep_type { + USB_EP_TYPE_CONTROL = 0x00, + USB_EP_TYPE_ISOCHRONOUS = 0x01, + USB_EP_TYPE_BULK = 0x02, + USB_EP_TYPE_INTERRUPT = 0x03, + USB_EP_TYPE_MASK = 0x03, +}; + +/** + * \brief Standard USB language IDs for string descriptors + */ +enum usb_langid { + USB_LANGID_EN_US = 0x0409, //!< English (United States) +}; + +/** + * \brief Mask selecting the index part of an endpoint address + */ +#define USB_EP_ADDR_MASK 0x0f + +//! \brief USB address identifier +typedef uint8_t usb_add_t; + +/** + * \brief Endpoint transfer direction is IN + */ +#define USB_EP_DIR_IN 0x80 + +/** + * \brief Endpoint transfer direction is OUT + */ +#define USB_EP_DIR_OUT 0x00 + +//! \brief Endpoint identifier +typedef uint8_t usb_ep_t; + +/** + * \brief Maximum length in bytes of a USB descriptor + * + * The maximum length of a USB descriptor is limited by the 8-bit + * bLength field. + */ +#define USB_MAX_DESC_LEN 255 + +/* + * 2-byte alignment requested for all USB structures. + */ +COMPILER_PACK_SET(1) + +/** + * \brief A USB Device SETUP request + * + * The data payload of SETUP packets always follows this structure. + */ +typedef struct { + uint8_t bmRequestType; + uint8_t bRequest; + le16_t wValue; + le16_t wIndex; + le16_t wLength; +} usb_setup_req_t; + +/** + * \brief Standard USB device descriptor structure + */ +typedef struct { + uint8_t bLength; + uint8_t bDescriptorType; + le16_t bcdUSB; + uint8_t bDeviceClass; + uint8_t bDeviceSubClass; + uint8_t bDeviceProtocol; + uint8_t bMaxPacketSize0; + le16_t idVendor; + le16_t idProduct; + le16_t bcdDevice; + uint8_t iManufacturer; + uint8_t iProduct; + uint8_t iSerialNumber; + uint8_t bNumConfigurations; +} usb_dev_desc_t; + +/** + * \brief Standard USB device qualifier descriptor structure + * + * This descriptor contains information about the device when running at + * the "other" speed (i.e. if the device is currently operating at high + * speed, this descriptor can be used to determine what would change if + * the device was operating at full speed.) + */ +typedef struct { + uint8_t bLength; + uint8_t bDescriptorType; + le16_t bcdUSB; + uint8_t bDeviceClass; + uint8_t bDeviceSubClass; + uint8_t bDeviceProtocol; + uint8_t bMaxPacketSize0; + uint8_t bNumConfigurations; + uint8_t bReserved; +} usb_dev_qual_desc_t; + +/** + * \brief USB Device BOS descriptor structure + * + * The BOS descriptor (Binary device Object Store) defines a root + * descriptor that is similar to the configuration descriptor, and is + * the base descriptor for accessing a family of related descriptors. + * A host can read a BOS descriptor and learn from the wTotalLength field + * the entire size of the device-level descriptor set, or it can read in + * the entire BOS descriptor set of device capabilities. + * The host accesses this descriptor using the GetDescriptor() request. + * The descriptor type in the GetDescriptor() request is set to BOS. + */ +typedef struct { + uint8_t bLength; + uint8_t bDescriptorType; + le16_t wTotalLength; + uint8_t bNumDeviceCaps; +} usb_dev_bos_desc_t; + + +/** + * \brief USB Device Capabilities - USB 2.0 Extension Descriptor structure + * + * Defines the set of USB 1.1-specific device level capabilities. + */ +typedef struct { + uint8_t bLength; + uint8_t bDescriptorType; + uint8_t bDevCapabilityType; + le32_t bmAttributes; +} usb_dev_capa_ext_desc_t; + +/** + * \brief USB Device LPM Descriptor structure + * + * The BOS descriptor and capabilities descriptors for LPM. + */ +typedef struct { + usb_dev_bos_desc_t bos; + usb_dev_capa_ext_desc_t capa_ext; +} usb_dev_lpm_desc_t; + +/** + * \brief Standard USB Interface Association Descriptor structure + */ +typedef struct { + uint8_t bLength; //!< size of this descriptor in bytes + uint8_t bDescriptorType; //!< INTERFACE descriptor type + uint8_t bFirstInterface; //!< Number of interface + uint8_t bInterfaceCount; //!< value to select alternate setting + uint8_t bFunctionClass; //!< Class code assigned by the USB + uint8_t bFunctionSubClass;//!< Sub-class code assigned by the USB + uint8_t bFunctionProtocol;//!< Protocol code assigned by the USB + uint8_t iFunction; //!< Index of string descriptor +} usb_association_desc_t; + + +/** + * \brief Standard USB configuration descriptor structure + */ +typedef struct { + uint8_t bLength; + uint8_t bDescriptorType; + le16_t wTotalLength; + uint8_t bNumInterfaces; + uint8_t bConfigurationValue; + uint8_t iConfiguration; + uint8_t bmAttributes; + uint8_t bMaxPower; +} usb_conf_desc_t; + + +#define USB_CONFIG_ATTR_MUST_SET (1 << 7) //!< Must always be set +#define USB_CONFIG_ATTR_BUS_POWERED (0 << 6) //!< Bus-powered +#define USB_CONFIG_ATTR_SELF_POWERED (1 << 6) //!< Self-powered +#define USB_CONFIG_ATTR_REMOTE_WAKEUP (1 << 5) //!< remote wakeup supported + +#define USB_CONFIG_MAX_POWER(ma) (((ma) + 1) / 2) //!< Max power in mA + +/** + * \brief Standard USB association descriptor structure + */ +typedef struct { + uint8_t bLength; //!< Size of this descriptor in bytes + uint8_t bDescriptorType; //!< Interface descriptor type + uint8_t bFirstInterface; //!< Number of interface + uint8_t bInterfaceCount; //!< value to select alternate setting + uint8_t bFunctionClass; //!< Class code assigned by the USB + uint8_t bFunctionSubClass; //!< Sub-class code assigned by the USB + uint8_t bFunctionProtocol; //!< Protocol code assigned by the USB + uint8_t iFunction; //!< Index of string descriptor +} usb_iad_desc_t; + +/** + * \brief Standard USB interface descriptor structure + */ +typedef struct { + uint8_t bLength; + uint8_t bDescriptorType; + uint8_t bInterfaceNumber; + uint8_t bAlternateSetting; + uint8_t bNumEndpoints; + uint8_t bInterfaceClass; + uint8_t bInterfaceSubClass; + uint8_t bInterfaceProtocol; + uint8_t iInterface; +} usb_iface_desc_t; + +/** + * \brief Standard USB endpoint descriptor structure + */ +typedef struct { + uint8_t bLength; + uint8_t bDescriptorType; + uint8_t bEndpointAddress; + uint8_t bmAttributes; + le16_t wMaxPacketSize; + uint8_t bInterval; +} usb_ep_desc_t; + + +/** + * \brief A standard USB string descriptor structure + */ +typedef struct { + uint8_t bLength; + uint8_t bDescriptorType; +} usb_str_desc_t; + +typedef struct { + usb_str_desc_t desc; + le16_t string[1]; +} usb_str_lgid_desc_t; + +COMPILER_PACK_RESET() + +//! @} + +#endif /* _USB_PROTOCOL_H_ */ diff --git a/AVR Code/USB_BULK_TEST/src/ASF/common/utils/interrupt.h b/AVR Code/USB_BULK_TEST/src/ASF/common/utils/interrupt.h new file mode 100644 index 00000000..80401572 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/common/utils/interrupt.h @@ -0,0 +1,142 @@ +/** + * \file + * + * \brief Global interrupt management for 8- and 32-bit AVR + * + * Copyright (c) 2010-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ +#ifndef UTILS_INTERRUPT_H +#define UTILS_INTERRUPT_H + +#include + +#if XMEGA || MEGA || TINY +# include "interrupt/interrupt_avr8.h" +#elif UC3 +# include "interrupt/interrupt_avr32.h" +#elif SAM +# include "interrupt/interrupt_sam_nvic.h" +#else +# error Unsupported device. +#endif + +/** + * \defgroup interrupt_group Global interrupt management + * + * This is a driver for global enabling and disabling of interrupts. + * + * @{ + */ + +#if defined(__DOXYGEN__) +/** + * \def CONFIG_INTERRUPT_FORCE_INTC + * \brief Force usage of the ASF INTC driver + * + * Predefine this symbol when preprocessing to force the use of the ASF INTC driver. + * This is useful to ensure compatibility across compilers and shall be used only when required + * by the application needs. + */ +# define CONFIG_INTERRUPT_FORCE_INTC +#endif + +//! \name Global interrupt flags +//@{ +/** + * \typedef irqflags_t + * \brief Type used for holding state of interrupt flag + */ + +/** + * \def cpu_irq_enable + * \brief Enable interrupts globally + */ + +/** + * \def cpu_irq_disable + * \brief Disable interrupts globally + */ + +/** + * \fn irqflags_t cpu_irq_save(void) + * \brief Get and clear the global interrupt flags + * + * Use in conjunction with \ref cpu_irq_restore. + * + * \return Current state of interrupt flags. + * + * \note This function leaves interrupts disabled. + */ + +/** + * \fn void cpu_irq_restore(irqflags_t flags) + * \brief Restore global interrupt flags + * + * Use in conjunction with \ref cpu_irq_save. + * + * \param flags State to set interrupt flag to. + */ + +/** + * \fn bool cpu_irq_is_enabled_flags(irqflags_t flags) + * \brief Check if interrupts are globally enabled in supplied flags + * + * \param flags Currents state of interrupt flags. + * + * \return True if interrupts are enabled. + */ + +/** + * \def cpu_irq_is_enabled + * \brief Check if interrupts are globally enabled + * + * \return True if interrupts are enabled. + */ +//@} + +//! @} + +/** + * \ingroup interrupt_group + * \defgroup interrupt_deprecated_group Deprecated interrupt definitions + */ + +#endif /* UTILS_INTERRUPT_H */ diff --git a/AVR Code/USB_BULK_TEST/src/ASF/common/utils/interrupt/interrupt_avr8.h b/AVR Code/USB_BULK_TEST/src/ASF/common/utils/interrupt/interrupt_avr8.h new file mode 100644 index 00000000..1c55fb29 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/common/utils/interrupt/interrupt_avr8.h @@ -0,0 +1,148 @@ +/** + * \file + * + * \brief Global interrupt management for 8-bit AVR + * + * Copyright (C) 2010-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ +#ifndef UTILS_INTERRUPT_INTERRUPT_H +#define UTILS_INTERRUPT_INTERRUPT_H + +#include +#include + +/** + * \weakgroup interrupt_group + * + * @{ + */ + +#ifdef ISR_CUSTOM_H +# include ISR_CUSTOM_H +#else + +/** + * \def ISR + * \brief Define service routine for specified interrupt vector + * + * Usage: + * \code + ISR(FOO_vect) + { + ... + } +\endcode + * + * \param vect Interrupt vector name as found in the device header files. + */ +#if defined(__DOXYGEN__) +# define ISR(vect) +#elif defined(__GNUC__) +# include +#elif defined(__ICCAVR__) +# define __ISR(x) _Pragma(#x) +# define ISR(vect) __ISR(vector=vect) __interrupt void handler_##vect(void) +#endif +#endif // ISR_CUSTOM_H + +#if XMEGA +/** + * \brief Initialize interrupt vectors + * Enables all interrupt levels, with vectors located in the application section + * and fixed priority scheduling. + */ +#define irq_initialize_vectors() \ + PMIC.CTRL = PMIC_LOLVLEN_bm | PMIC_MEDLVLEN_bm | PMIC_HILVLEN_bm; +#elif MEGA_RF +#define irq_initialize_vectors() +#endif + +#ifdef __GNUC__ +# define cpu_irq_enable() sei() +# define cpu_irq_disable() cli() +#else +# define cpu_irq_enable() __enable_interrupt() +# define cpu_irq_disable() __disable_interrupt() +#endif + +typedef uint8_t irqflags_t; + +static inline irqflags_t cpu_irq_save(void) +{ + irqflags_t flags = SREG; + cpu_irq_disable(); + return flags; +} + +static inline void cpu_irq_restore(irqflags_t flags) +{ + barrier(); + SREG = flags; +} + +static inline bool cpu_irq_is_enabled_flags(irqflags_t flags) +{ +#if XMEGA +# ifdef __GNUC__ + return flags & CPU_I_bm; +# else + return flags & I_bm; +# endif +#elif MEGA || TINY + return flags & (1 << SREG_I); +#endif +} + +#define cpu_irq_is_enabled() cpu_irq_is_enabled_flags(SREG) + +//! @} + +/** + * \weakgroup interrupt_deprecated_group + * @{ + */ +// Deprecated definitions. +#define Enable_global_interrupt() cpu_irq_enable() +#define Disable_global_interrupt() cpu_irq_disable() +#define Is_global_interrupt_enabled() cpu_irq_is_enabled() +//! @} + +#endif /* UTILS_INTERRUPT_INTERRUPT_H */ diff --git a/AVR Code/USB_BULK_TEST/src/ASF/common/utils/make/Makefile.avr.in b/AVR Code/USB_BULK_TEST/src/ASF/common/utils/make/Makefile.avr.in new file mode 100644 index 00000000..5d9a8375 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/common/utils/make/Makefile.avr.in @@ -0,0 +1,483 @@ +# List of available make goals: +# +# all Default target, builds the project +# clean Clean up the project +# rebuild Rebuild the project +# +# doc Build the documentation +# cleandoc Clean up the documentation +# rebuilddoc Rebuild the documentation +# +# +# Copyright (c) 2009 - 2013 Atmel Corporation. All rights reserved. +# +# \asf_license_start +# +# \page License +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# +# 2. 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. +# +# 3. The name of Atmel may not be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# 4. This software may only be redistributed and used in connection with an +# Atmel microcontroller product. +# +# THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED +# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE +# EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. +# +# \asf_license_stop +# + +# Include the config.mk file from the current working path, e.g., where the +# user called make. +include config.mk + +# Tool to use to generate documentation from the source code +DOCGEN ?= doxygen + +# Look for source files relative to the top-level source directory +VPATH := $(PRJ_PATH) + +# Output target file +target := $(TARGET) + +# Output project name (target name minus suffix) +project := $(basename $(target)) + +# Output target file (typically ELF or static library) +ifeq ($(suffix $(target)),.a) +target_type := lib +else +ifeq ($(suffix $(target)),.elf) +target_type := elf +else +$(error "Target type $(target_type) is not supported") +endif +endif + +# Allow override of operating system detection. The user can add OS=Linux or +# OS=Windows on the command line to explicit set the host OS. +# +# This allows to work around broken uname utility on certain systems. +ifdef OS + ifeq ($(strip $(OS)), Linux) + os_type := Linux + endif + ifeq ($(strip $(OS)), Windows) + os_type := windows32_64 + endif +endif + +os_type ?= $(strip $(shell uname)) + +ifeq ($(os_type),windows32) +os := Windows +else +ifeq ($(os_type),windows64) +os := Windows +else +ifeq ($(os_type),windows32_64) +os ?= Windows +else +ifeq ($(os_type),) +os := Windows +else +# Default to Linux style operating system. Both Cygwin and mingw are fully +# compatible (for this Makefile) with Linux. +os := Linux +endif +endif +endif +endif + +# Output documentation directory and configuration file. +docdir := ../doxygen/html +doccfg := ../doxygen/doxyfile.doxygen + +CROSS ?= avr- +AR := $(CROSS)ar +AS := $(CROSS)as +CC := $(CROSS)gcc +CPP := $(CROSS)gcc -E +CXX := $(CROSS)g++ +LD := $(CROSS)gcc +NM := $(CROSS)nm +OBJCOPY := $(CROSS)objcopy +OBJDUMP := $(CROSS)objdump +SIZE := $(CROSS)size + +RM := rm +ifeq ($(os),Windows) +RMDIR := rmdir /S /Q +else +RMDIR := rmdir -p --ignore-fail-on-non-empty +endif + +# On Windows, we need to override the shell to force the use of cmd.exe +ifeq ($(os),Windows) +SHELL := cmd +endif + +# Strings for beautifying output +MSG_CLEAN_FILES = "RM *.o *.d" +MSG_CLEAN_DIRS = "RMDIR $(strip $(clean-dirs))" +MSG_CLEAN_DOC = "RMDIR $(docdir)" +MSG_MKDIR = "MKDIR $(dir $@)" + +MSG_INFO = "INFO " +MSG_PREBUILD = "PREBUILD $(PREBUILD_CMD)" +MSG_POSTBUILD = "POSTBUILD $(POSTBUILD_CMD)" + +MSG_ARCHIVING = "AR $@" +MSG_ASSEMBLING = "AS $@" +MSG_BINARY_IMAGE = "OBJCOPY $@" +MSG_COMPILING = "CC $@" +MSG_COMPILING_CXX = "CXX $@" +MSG_EEPROM_IMAGE = "OBJCOPY $@" +MSG_EXTENDED_LISTING = "OBJDUMP $@" +MSG_IHEX_IMAGE = "OBJCOPY $@" +MSG_LINKING = "LN $@" +MSG_PREPROCESSING = "CPP $@" +MSG_SIZE = "SIZE $@" +MSG_SYMBOL_TABLE = "NM $@" + +MSG_GENERATING_DOC = "DOXYGEN $(docdir)" + +# Don't use make's built-in rules and variables +MAKEFLAGS += -rR + +# Don't print 'Entering directory ...' +MAKEFLAGS += --no-print-directory + +# Function for reversing the order of a list +reverse = $(if $(1),$(call reverse,$(wordlist 2,$(words $(1)),$(1)))) $(firstword $(1)) + +# Hide command output by default, but allow the user to override this +# by adding V=1 on the command line. +# +# This is inspired by the Kbuild system used by the Linux kernel. +ifdef V + ifeq ("$(origin V)", "command line") + VERBOSE = $(V) + endif +endif +ifndef VERBOSE + VERBOSE = 0 +endif + +ifeq ($(VERBOSE), 1) + Q = +else + Q = @ +endif + +arflags-gnu-y := $(ARFLAGS) +asflags-gnu-y := $(ASFLAGS) +cflags-gnu-y := $(CFLAGS) +cxxflags-gnu-y := $(CXXFLAGS) +cppflags-gnu-y := $(CPPFLAGS) +cpuflags-gnu-y := +dbgflags-gnu-y := $(DBGFLAGS) +libflags-gnu-y := $(foreach LIB,$(LIBS),-l$(LIB)) +ldflags-gnu-y := $(LDFLAGS) +flashflags-gnu-y := $(FLASHFLAGS) +eepromflags-gnu-y := $(EEPROMFLAGS) +clean-files := +clean-dirs := + +clean-files += $(wildcard $(target) $(project).map) +clean-files += $(wildcard $(project).hex $(project).eep) +clean-files += $(wildcard $(project).lss $(project).sym) +clean-files += $(wildcard $(build)) + +# Use pipes instead of temporary files for communication between processes +cflags-gnu-y += -pipe +asflags-gnu-y += -pipe +ldflags-gnu-y += -pipe + +# Archiver flags. +arflags-gnu-y += rcs + +# Always enable warnings. And be very careful about implicit +# declarations. +cflags-gnu-y += -Wall -Wstrict-prototypes -Wmissing-prototypes +cflags-gnu-y += -Werror-implicit-function-declaration +cxxflags-gnu-y += -Wall +# IAR doesn't allow arithmetic on void pointers, so warn about that. +cflags-gnu-y += -Wpointer-arith +cxxflags-gnu-y += -Wpointer-arith + +# Preprocessor flags. +cppflags-gnu-y += $(foreach INC,$(addprefix $(PRJ_PATH)/,$(INC_PATH)),-I$(INC)) +asflags-gnu-y += $(foreach INC,$(addprefix $(PRJ_PATH)/,$(INC_PATH)),'-Wa,-I$(INC)') + +# CPU specific flags. +cpuflags-gnu-y += -mmcu=$(MCU) + +# Dependency file flags. +depflags = -MD -MP -MQ $@ + +# Debug specific flags. +ifdef BUILD_DEBUG_LEVEL +dbgflags-gnu-y += -g$(BUILD_DEBUG_LEVEL) +else +dbgflags-gnu-y += -gdwarf-2 +endif + +# Optimization specific flags. +ifdef BUILD_OPTIMIZATION +optflags-gnu-y = -O$(BUILD_OPTIMIZATION) +else +optflags-gnu-y = $(OPTIMIZATION) +endif + +# Relax compilation and linking. +cflags-gnu-y += -mrelax +cxxflags-gnu-y += -mrelax +asflags-gnu-y += -mrelax +ldflags-gnu-y += -Wl,--relax + +# Always preprocess assembler files. +asflags-gnu-y += -x assembler-with-cpp +# Compile C files using the GNU99 standard. +cflags-gnu-y += -std=gnu99 +# Compile C++ files using the GNU++98 standard. +cxxflags-gnu-y += -std=gnu++98 + +# Use unsigned character type when compiling. +cflags-gnu-y += -funsigned-char +cxxflags-gnu-y += -funsigned-char + +# Don't use strict aliasing (very common in embedded applications). +cflags-gnu-y += -fno-strict-aliasing +cxxflags-gnu-y += -fno-strict-aliasing + +# Separate each function and data into its own separate section to allow +# garbage collection of unused sections. +cflags-gnu-y += -ffunction-sections -fdata-sections +cxxflags-gnu-y += -ffunction-sections -fdata-sections + +# Garbage collect unreferred sections when linking. +ldflags-gnu-y += -Wl,--gc-sections + +# Output a link map file and a cross reference table +ldflags-gnu-y += -Wl,-Map=$(project).map,--cref + +# Add library search paths relative to the top level directory. +ldflags-gnu-y += $(foreach _LIB_PATH,$(addprefix $(PRJ_PATH)/,$(LIB_PATH)),-L$(_LIB_PATH)) + +a_flags = $(cpuflags-gnu-y) $(depflags) $(cppflags-gnu-y) $(asflags-gnu-y) -D__ASSEMBLY__ +c_flags = $(cpuflags-gnu-y) $(dbgflags-gnu-y) $(depflags) $(optflags-gnu-y) $(cppflags-gnu-y) $(cflags-gnu-y) +cxx_flags= $(cpuflags-gnu-y) $(dbgflags-gnu-y) $(depflags) $(optflags-gnu-y) $(cppflags-gnu-y) $(cxxflags-gnu-y) +l_flags = $(cpuflags-gnu-y) $(optflags-gnu-y) $(ldflags-gnu-y) +ar_flags = $(arflags-gnu-y) + +# Intel Hex file production flags +flashflags-gnu-y += -R .eeprom -R .usb_descriptor_table + +# Eeprom file production flags +eepromflags-gnu-y += -j .eeprom +eepromflags-gnu-y += --set-section-flags=.eeprom="alloc,load" +eepromflags-gnu-y += --change-section-lma .eeprom=0 + +# Source files list and part informations must already be included before +# running this makefile + +# If a custom build directory is specified, use it -- force trailing / in directory name. +ifdef BUILD_DIR + build-dir := $(dir $(BUILD_DIR))$(if $(notdir $(BUILD_DIR)),$(notdir $(BUILD_DIR))/) +else + build-dir = +endif + +# Create object files list from source files list. +obj-y := $(addprefix $(build-dir), $(addsuffix .o,$(basename $(CSRCS) $(ASSRCS)))) + +# Create dependency files list from source files list. +dep-files := $(wildcard $(foreach f,$(obj-y),$(basename $(f)).d)) + +clean-files += $(wildcard $(obj-y)) +clean-files += $(dep-files) + +clean-dirs += $(call reverse,$(sort $(wildcard $(dir $(obj-y))))) + +# Default target. +.PHONY: all +ifeq ($(target_type),lib) +all: $(target) $(project).lss $(project).sym +else +ifeq ($(target_type),elf) +all: prebuild $(target) $(project).lss $(project).sym $(project).hex $(project).bin postbuild +endif +endif + +prebuild: +ifneq ($(strip $(PREBUILD_CMD)),) + @echo $(MSG_PREBUILD) + $(Q)$(PREBUILD_CMD) +endif + +postbuild: +ifneq ($(strip $(POSTBUILD_CMD)),) + @echo $(MSG_POSTBUILD) + $(Q)$(POSTBUILD_CMD) +endif + +# Clean up the project. +.PHONY: clean +clean: + @$(if $(strip $(clean-files)),echo $(MSG_CLEAN_FILES)) + $(if $(strip $(clean-files)),$(Q)$(RM) $(clean-files),) + @$(if $(strip $(clean-dirs)),echo $(MSG_CLEAN_DIRS)) +# Remove created directories, and make sure we only remove existing +# directories, since recursive rmdir might help us a bit on the way. +ifeq ($(os),Windows) + $(Q)$(if $(strip $(clean-dirs)), \ + $(RMDIR) $(strip $(subst /,\,$(clean-dirs)))) +else + $(Q)$(if $(strip $(clean-dirs)), \ + for directory in $(strip $(clean-dirs)); do \ + if [ -d "$$directory" ]; then \ + $(RMDIR) $$directory; \ + fi \ + done \ + ) +endif + +# Rebuild the project. +.PHONY: rebuild +rebuild: clean all + +.PHONY: objfiles +objfiles: $(obj-y) + +# Create object files from C source files. +$(build-dir)%.o: %.c $(MAKEFILE_PATH) config.mk + $(Q)test -d $(dir $@) || echo $(MSG_MKDIR) +ifeq ($(os),Windows) + $(Q)test -d $(patsubst %/,%,$(dir $@)) || mkdir $(subst /,\,$(dir $@)) +else + $(Q)test -d $(dir $@) || mkdir -p $(dir $@) +endif + @echo $(MSG_COMPILING) + $(Q)$(CC) $(c_flags) -c $< -o $@ + +# Create object files from C++ source files. +$(build-dir)%.o: %.cpp $(MAKEFILE_PATH) config.mk + $(Q)test -d $(dir $@) || echo $(MSG_MKDIR) +ifeq ($(os),Windows) + $(Q)test -d $(patsubst %/,%,$(dir $@)) || mkdir $(subst /,\,$(dir $@)) +else + $(Q)test -d $(dir $@) || mkdir -p $(dir $@) +endif + @echo $(MSG_COMPILING_CXX) + $(Q)$(CXX) $(cxx_flags) -c $< -o $@ + +# Preprocess and assemble: create object files from assembler source files. +$(build-dir)%.o: %.s $(MAKEFILE_PATH) config.mk + $(Q)test -d $(dir $@) || echo $(MSG_MKDIR) +ifeq ($(os),Windows) + $(Q)test -d $(patsubst %/,%,$(dir $@)) || mkdir $(subst /,\,$(dir $@)) +else + $(Q)test -d $(dir $@) || mkdir -p $(dir $@) +endif + @echo $(MSG_ASSEMBLING) + $(Q)$(CC) $(a_flags) -c $< -o $@ + +# Preprocess and assemble: create object files from assembler source files. +$(build-dir)%.o: %.S $(MAKEFILE_PATH) config.mk + $(Q)test -d $(dir $@) || echo $(MSG_MKDIR) +ifeq ($(os),Windows) + $(Q)test -d $(patsubst %/,%,$(dir $@)) || mkdir $(subst /,\,$(dir $@)) +else + $(Q)test -d $(dir $@) || mkdir -p $(dir $@) +endif + @echo $(MSG_ASSEMBLING) + $(Q)$(CC) $(a_flags) -c $< -o $@ + +# Include all dependency files to add depedency to all header files in use. +include $(dep-files) + +ifeq ($(target_type),lib) +# Archive object files into an archive +$(target): $(MAKEFILE_PATH) config.mk $(obj-y) + @echo $(MSG_ARCHIVING) + $(Q)$(AR) $(ar_flags) $@ $(obj-y) + @echo $(MSG_SIZE) + $(Q)$(SIZE) -Bxt $@ +else +ifeq ($(target_type),elf) +# Link the object files into an ELF file. Also make sure the target is rebuilt +# if the common Makefile.avr.in or project config.mk is changed. +$(target): $(MAKEFILE_PATH) config.mk $(obj-y) + @echo $(MSG_LINKING) + $(Q)$(LD) $(l_flags) $(obj-y) $(libflags-gnu-y) -o $@ + @echo $(MSG_SIZE) + $(Q)$(SIZE) -Ax $@ + $(Q)$(SIZE) -Bx $@ +endif +endif + +# Create extended function listing from target output file. +%.lss: $(target) + @echo $(MSG_EXTENDED_LISTING) + $(Q)$(OBJDUMP) -h -S $< > $@ + +# Create symbol table from target output file. +%.sym: $(target) + @echo $(MSG_SYMBOL_TABLE) + $(Q)$(NM) -n $< > $@ + +# Create Intel HEX image from ELF output file. +%.hex: $(target) + @echo $(MSG_IHEX_IMAGE) + $(Q)$(OBJCOPY) -O ihex $(flashflags-gnu-y) $< $@ + +# Create EEPROM Intel HEX image from ELF output file. +%.eep: $(target) + @echo $(MSG_EEPROM_IMAGE) + $(Q)$(OBJCOPY) $(eepromflags-gnu-y) -O ihex $< $@ || exit 0 + +# Create binary image from ELF output file. +%.bin: $(target) + @echo $(MSG_BINARY_IMAGE) + $(Q)$(OBJCOPY) -O binary $< $@ + +# Provide information about the detected host operating system. +.SECONDARY: info-os +info-os: + @echo $(MSG_INFO)$(os) build host detected + +# Build Doxygen generated documentation. +.PHONY: doc +doc: + @echo $(MSG_GENERATING_DOC) + $(Q)cd $(dir $(doccfg)) && $(DOCGEN) $(notdir $(doccfg)) + +# Clean Doxygen generated documentation. +.PHONY: cleandoc +cleandoc: + @$(if $(wildcard $(docdir)),echo $(MSG_CLEAN_DOC)) + $(Q)$(if $(wildcard $(docdir)),$(RM) --recursive $(docdir)) + +# Rebuild the Doxygen generated documentation. +.PHONY: rebuilddoc +rebuilddoc: cleandoc doc diff --git a/AVR Code/USB_BULK_TEST/src/ASF/common/utils/parts.h b/AVR Code/USB_BULK_TEST/src/ASF/common/utils/parts.h new file mode 100644 index 00000000..b0ddbdf4 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/common/utils/parts.h @@ -0,0 +1,1292 @@ +/** + * \file + * + * \brief Atmel part identification macros + * + * Copyright (C) 2012-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ + +#ifndef ATMEL_PARTS_H +#define ATMEL_PARTS_H + +/** + * \defgroup part_macros_group Atmel part identification macros + * + * This collection of macros identify which series and families that the various + * Atmel parts belong to. These can be used to select part-dependent sections of + * code at compile time. + * + * @{ + */ + +/** + * \name Convenience macros for part checking + * @{ + */ +/* ! Check GCC and IAR part definition for 8-bit AVR */ +#define AVR8_PART_IS_DEFINED(part) \ + (defined(__ ## part ## __) || defined(__AVR_ ## part ## __)) + +/* ! Check GCC and IAR part definition for 32-bit AVR */ +#define AVR32_PART_IS_DEFINED(part) \ + (defined(__AT32 ## part ## __) || defined(__AVR32_ ## part ## __)) + +/* ! Check GCC and IAR part definition for SAM */ +#define SAM_PART_IS_DEFINED(part) (defined(__ ## part ## __)) +/** @} */ + +/** + * \defgroup uc3_part_macros_group AVR UC3 parts + * @{ + */ + +/** + * \name AVR UC3 A series + * @{ + */ +#define UC3A0 ( \ + AVR32_PART_IS_DEFINED(UC3A0128) || \ + AVR32_PART_IS_DEFINED(UC3A0256) || \ + AVR32_PART_IS_DEFINED(UC3A0512) \ + ) + +#define UC3A1 ( \ + AVR32_PART_IS_DEFINED(UC3A1128) || \ + AVR32_PART_IS_DEFINED(UC3A1256) || \ + AVR32_PART_IS_DEFINED(UC3A1512) \ + ) + +#define UC3A3 ( \ + AVR32_PART_IS_DEFINED(UC3A364) || \ + AVR32_PART_IS_DEFINED(UC3A364S) || \ + AVR32_PART_IS_DEFINED(UC3A3128) || \ + AVR32_PART_IS_DEFINED(UC3A3128S) || \ + AVR32_PART_IS_DEFINED(UC3A3256) || \ + AVR32_PART_IS_DEFINED(UC3A3256S) \ + ) + +#define UC3A4 ( \ + AVR32_PART_IS_DEFINED(UC3A464) || \ + AVR32_PART_IS_DEFINED(UC3A464S) || \ + AVR32_PART_IS_DEFINED(UC3A4128) || \ + AVR32_PART_IS_DEFINED(UC3A4128S) || \ + AVR32_PART_IS_DEFINED(UC3A4256) || \ + AVR32_PART_IS_DEFINED(UC3A4256S) \ + ) +/** @} */ + +/** + * \name AVR UC3 B series + * @{ + */ +#define UC3B0 ( \ + AVR32_PART_IS_DEFINED(UC3B064) || \ + AVR32_PART_IS_DEFINED(UC3B0128) || \ + AVR32_PART_IS_DEFINED(UC3B0256) || \ + AVR32_PART_IS_DEFINED(UC3B0512) \ + ) + +#define UC3B1 ( \ + AVR32_PART_IS_DEFINED(UC3B164) || \ + AVR32_PART_IS_DEFINED(UC3B1128) || \ + AVR32_PART_IS_DEFINED(UC3B1256) || \ + AVR32_PART_IS_DEFINED(UC3B1512) \ + ) +/** @} */ + +/** + * \name AVR UC3 C series + * @{ + */ +#define UC3C0 ( \ + AVR32_PART_IS_DEFINED(UC3C064C) || \ + AVR32_PART_IS_DEFINED(UC3C0128C) || \ + AVR32_PART_IS_DEFINED(UC3C0256C) || \ + AVR32_PART_IS_DEFINED(UC3C0512C) \ + ) + +#define UC3C1 ( \ + AVR32_PART_IS_DEFINED(UC3C164C) || \ + AVR32_PART_IS_DEFINED(UC3C1128C) || \ + AVR32_PART_IS_DEFINED(UC3C1256C) || \ + AVR32_PART_IS_DEFINED(UC3C1512C) \ + ) + +#define UC3C2 ( \ + AVR32_PART_IS_DEFINED(UC3C264C) || \ + AVR32_PART_IS_DEFINED(UC3C2128C) || \ + AVR32_PART_IS_DEFINED(UC3C2256C) || \ + AVR32_PART_IS_DEFINED(UC3C2512C) \ + ) +/** @} */ + +/** + * \name AVR UC3 D series + * @{ + */ +#define UC3D3 ( \ + AVR32_PART_IS_DEFINED(UC64D3) || \ + AVR32_PART_IS_DEFINED(UC128D3) \ + ) + +#define UC3D4 ( \ + AVR32_PART_IS_DEFINED(UC64D4) || \ + AVR32_PART_IS_DEFINED(UC128D4) \ + ) +/** @} */ + +/** + * \name AVR UC3 L series + * @{ + */ +#define UC3L0 ( \ + AVR32_PART_IS_DEFINED(UC3L016) || \ + AVR32_PART_IS_DEFINED(UC3L032) || \ + AVR32_PART_IS_DEFINED(UC3L064) \ + ) + +#define UC3L0128 ( \ + AVR32_PART_IS_DEFINED(UC3L0128) \ + ) + +#define UC3L0256 ( \ + AVR32_PART_IS_DEFINED(UC3L0256) \ + ) + +#define UC3L3 ( \ + AVR32_PART_IS_DEFINED(UC64L3U) || \ + AVR32_PART_IS_DEFINED(UC128L3U) || \ + AVR32_PART_IS_DEFINED(UC256L3U) \ + ) + +#define UC3L4 ( \ + AVR32_PART_IS_DEFINED(UC64L4U) || \ + AVR32_PART_IS_DEFINED(UC128L4U) || \ + AVR32_PART_IS_DEFINED(UC256L4U) \ + ) + +#define UC3L3_L4 (UC3L3 || UC3L4) +/** @} */ + +/** + * \name AVR UC3 families + * @{ + */ +/** AVR UC3 A family */ +#define UC3A (UC3A0 || UC3A1 || UC3A3 || UC3A4) + +/** AVR UC3 B family */ +#define UC3B (UC3B0 || UC3B1) + +/** AVR UC3 C family */ +#define UC3C (UC3C0 || UC3C1 || UC3C2) + +/** AVR UC3 D family */ +#define UC3D (UC3D3 || UC3D4) + +/** AVR UC3 L family */ +#define UC3L (UC3L0 || UC3L0128 || UC3L0256 || UC3L3_L4) +/** @} */ + +/** AVR UC3 product line */ +#define UC3 (UC3A || UC3B || UC3C || UC3D || UC3L) + +/** @} */ + +/** + * \defgroup xmega_part_macros_group AVR XMEGA parts + * @{ + */ + +/** + * \name AVR XMEGA A series + * @{ + */ +#define XMEGA_A1 ( \ + AVR8_PART_IS_DEFINED(ATxmega64A1) || \ + AVR8_PART_IS_DEFINED(ATxmega128A1) \ + ) + +#define XMEGA_A3 ( \ + AVR8_PART_IS_DEFINED(ATxmega64A3) || \ + AVR8_PART_IS_DEFINED(ATxmega128A3) || \ + AVR8_PART_IS_DEFINED(ATxmega192A3) || \ + AVR8_PART_IS_DEFINED(ATxmega256A3) \ + ) + +#define XMEGA_A3B ( \ + AVR8_PART_IS_DEFINED(ATxmega256A3B) \ + ) + +#define XMEGA_A4 ( \ + AVR8_PART_IS_DEFINED(ATxmega16A4) || \ + AVR8_PART_IS_DEFINED(ATxmega32A4) \ + ) +/** @} */ + +/** + * \name AVR XMEGA AU series + * @{ + */ +#define XMEGA_A1U ( \ + AVR8_PART_IS_DEFINED(ATxmega64A1U) || \ + AVR8_PART_IS_DEFINED(ATxmega128A1U) \ + ) + +#define XMEGA_A3U ( \ + AVR8_PART_IS_DEFINED(ATxmega64A3U) || \ + AVR8_PART_IS_DEFINED(ATxmega128A3U) || \ + AVR8_PART_IS_DEFINED(ATxmega192A3U) || \ + AVR8_PART_IS_DEFINED(ATxmega256A3U) \ + ) + +#define XMEGA_A3BU ( \ + AVR8_PART_IS_DEFINED(ATxmega256A3BU) \ + ) + +#define XMEGA_A4U ( \ + AVR8_PART_IS_DEFINED(ATxmega16A4U) || \ + AVR8_PART_IS_DEFINED(ATxmega32A4U) || \ + AVR8_PART_IS_DEFINED(ATxmega64A4U) || \ + AVR8_PART_IS_DEFINED(ATxmega128A4U) \ + ) +/** @} */ + +/** + * \name AVR XMEGA B series + * @{ + */ +#define XMEGA_B1 ( \ + AVR8_PART_IS_DEFINED(ATxmega64B1) || \ + AVR8_PART_IS_DEFINED(ATxmega128B1) \ + ) + +#define XMEGA_B3 ( \ + AVR8_PART_IS_DEFINED(ATxmega64B3) || \ + AVR8_PART_IS_DEFINED(ATxmega128B3) \ + ) +/** @} */ + +/** + * \name AVR XMEGA C series + * @{ + */ +#define XMEGA_C3 ( \ + AVR8_PART_IS_DEFINED(ATxmega384C3) || \ + AVR8_PART_IS_DEFINED(ATxmega256C3) || \ + AVR8_PART_IS_DEFINED(ATxmega192C3) || \ + AVR8_PART_IS_DEFINED(ATxmega128C3) || \ + AVR8_PART_IS_DEFINED(ATxmega64C3) || \ + AVR8_PART_IS_DEFINED(ATxmega32C3) \ + ) + +#define XMEGA_C4 ( \ + AVR8_PART_IS_DEFINED(ATxmega32C4) || \ + AVR8_PART_IS_DEFINED(ATxmega16C4) \ + ) +/** @} */ + +/** + * \name AVR XMEGA D series + * @{ + */ +#define XMEGA_D3 ( \ + AVR8_PART_IS_DEFINED(ATxmega32D3) || \ + AVR8_PART_IS_DEFINED(ATxmega64D3) || \ + AVR8_PART_IS_DEFINED(ATxmega128D3) || \ + AVR8_PART_IS_DEFINED(ATxmega192D3) || \ + AVR8_PART_IS_DEFINED(ATxmega256D3) || \ + AVR8_PART_IS_DEFINED(ATxmega384D3) \ + ) + +#define XMEGA_D4 ( \ + AVR8_PART_IS_DEFINED(ATxmega16D4) || \ + AVR8_PART_IS_DEFINED(ATxmega32D4) || \ + AVR8_PART_IS_DEFINED(ATxmega64D4) || \ + AVR8_PART_IS_DEFINED(ATxmega128D4) \ + ) +/** @} */ + +/** + * \name AVR XMEGA E series + * @{ + */ +#define XMEGA_E5 ( \ + AVR8_PART_IS_DEFINED(ATxmega8E5) || \ + AVR8_PART_IS_DEFINED(ATxmega16E5) || \ + AVR8_PART_IS_DEFINED(ATxmega32E5) \ + ) +/** @} */ + + +/** + * \name AVR XMEGA families + * @{ + */ +/** AVR XMEGA A family */ +#define XMEGA_A (XMEGA_A1 || XMEGA_A3 || XMEGA_A3B || XMEGA_A4) + +/** AVR XMEGA AU family */ +#define XMEGA_AU (XMEGA_A1U || XMEGA_A3U || XMEGA_A3BU || XMEGA_A4U) + +/** AVR XMEGA B family */ +#define XMEGA_B (XMEGA_B1 || XMEGA_B3) + +/** AVR XMEGA C family */ +#define XMEGA_C (XMEGA_C3 || XMEGA_C4) + +/** AVR XMEGA D family */ +#define XMEGA_D (XMEGA_D3 || XMEGA_D4) + +/** AVR XMEGA E family */ +#define XMEGA_E (XMEGA_E5) +/** @} */ + + +/** AVR XMEGA product line */ +#define XMEGA (XMEGA_A || XMEGA_AU || XMEGA_B || XMEGA_C || XMEGA_D || XMEGA_E) + +/** @} */ + +/** + * \defgroup mega_part_macros_group megaAVR parts + * + * \note These megaAVR groupings are based on the groups in AVR Libc for the + * part header files. They are not names of official megaAVR device series or + * families. + * + * @{ + */ + +/** + * \name ATmegaxx0/xx1 subgroups + * @{ + */ +#define MEGA_XX0 ( \ + AVR8_PART_IS_DEFINED(ATmega640) || \ + AVR8_PART_IS_DEFINED(ATmega1280) || \ + AVR8_PART_IS_DEFINED(ATmega2560) \ + ) + +#define MEGA_XX1 ( \ + AVR8_PART_IS_DEFINED(ATmega1281) || \ + AVR8_PART_IS_DEFINED(ATmega2561) \ + ) +/** @} */ + +/** + * \name megaAVR groups + * @{ + */ +/** ATmegaxx0/xx1 group */ +#define MEGA_XX0_1 (MEGA_XX0 || MEGA_XX1) + +/** ATmegaxx4 group */ +#define MEGA_XX4 ( \ + AVR8_PART_IS_DEFINED(ATmega164A) || \ + AVR8_PART_IS_DEFINED(ATmega164PA) || \ + AVR8_PART_IS_DEFINED(ATmega324A) || \ + AVR8_PART_IS_DEFINED(ATmega324PA) || \ + AVR8_PART_IS_DEFINED(ATmega644) || \ + AVR8_PART_IS_DEFINED(ATmega644A) || \ + AVR8_PART_IS_DEFINED(ATmega644PA) || \ + AVR8_PART_IS_DEFINED(ATmega1284P) || \ + AVR8_PART_IS_DEFINED(ATmega128RFA1) \ + ) + +/** ATmegaxx4 group */ +#define MEGA_XX4_A ( \ + AVR8_PART_IS_DEFINED(ATmega164A) || \ + AVR8_PART_IS_DEFINED(ATmega164PA) || \ + AVR8_PART_IS_DEFINED(ATmega324A) || \ + AVR8_PART_IS_DEFINED(ATmega324PA) || \ + AVR8_PART_IS_DEFINED(ATmega644A) || \ + AVR8_PART_IS_DEFINED(ATmega644PA) || \ + AVR8_PART_IS_DEFINED(ATmega1284P) \ + ) + +/** ATmegaxx8 group */ +#define MEGA_XX8 ( \ + AVR8_PART_IS_DEFINED(ATmega48) || \ + AVR8_PART_IS_DEFINED(ATmega48A) || \ + AVR8_PART_IS_DEFINED(ATmega48PA) || \ + AVR8_PART_IS_DEFINED(ATmega88) || \ + AVR8_PART_IS_DEFINED(ATmega88A) || \ + AVR8_PART_IS_DEFINED(ATmega88PA) || \ + AVR8_PART_IS_DEFINED(ATmega168) || \ + AVR8_PART_IS_DEFINED(ATmega168A) || \ + AVR8_PART_IS_DEFINED(ATmega168PA) || \ + AVR8_PART_IS_DEFINED(ATmega328) || \ + AVR8_PART_IS_DEFINED(ATmega328P) \ + ) + +/** ATmegaxx8A/P/PA group */ +#define MEGA_XX8_A ( \ + AVR8_PART_IS_DEFINED(ATmega48A) || \ + AVR8_PART_IS_DEFINED(ATmega48PA) || \ + AVR8_PART_IS_DEFINED(ATmega88A) || \ + AVR8_PART_IS_DEFINED(ATmega88PA) || \ + AVR8_PART_IS_DEFINED(ATmega168A) || \ + AVR8_PART_IS_DEFINED(ATmega168PA) || \ + AVR8_PART_IS_DEFINED(ATmega328P) \ + ) + +/** ATmegaxx group */ +#define MEGA_XX ( \ + AVR8_PART_IS_DEFINED(ATmega16) || \ + AVR8_PART_IS_DEFINED(ATmega16A) || \ + AVR8_PART_IS_DEFINED(ATmega32) || \ + AVR8_PART_IS_DEFINED(ATmega32A) || \ + AVR8_PART_IS_DEFINED(ATmega64) || \ + AVR8_PART_IS_DEFINED(ATmega64A) || \ + AVR8_PART_IS_DEFINED(ATmega128) || \ + AVR8_PART_IS_DEFINED(ATmega128A) \ + ) + +/** ATmegaxxA/P/PA group */ +#define MEGA_XX_A ( \ + AVR8_PART_IS_DEFINED(ATmega16A) || \ + AVR8_PART_IS_DEFINED(ATmega32A) || \ + AVR8_PART_IS_DEFINED(ATmega64A) || \ + AVR8_PART_IS_DEFINED(ATmega128A) \ + ) +/** ATmegaxxRFA1 group */ +#define MEGA_RFA1 ( \ + AVR8_PART_IS_DEFINED(ATmega128RFA1) \ + ) + +/** ATmegaxxRFR2 group */ +#define MEGA_RFR2 ( \ + AVR8_PART_IS_DEFINED(ATmega64RFR2) || \ + AVR8_PART_IS_DEFINED(ATmega128RFR2) || \ + AVR8_PART_IS_DEFINED(ATmega256RFR2) || \ + AVR8_PART_IS_DEFINED(ATmega644RFR2) || \ + AVR8_PART_IS_DEFINED(ATmega1284RFR2) || \ + AVR8_PART_IS_DEFINED(ATmega2564RFR2) \ + ) + + +/** ATmegaxxRFxx group */ +#define MEGA_RF (MEGA_RFA1 || MEGA_RFR2) + +/** + * \name ATmegaxx_un0/un1/un2 subgroups + * @{ + */ +#define MEGA_XX_UN0 ( \ + AVR8_PART_IS_DEFINED(ATmega16) || \ + AVR8_PART_IS_DEFINED(ATmega16A) || \ + AVR8_PART_IS_DEFINED(ATmega32) || \ + AVR8_PART_IS_DEFINED(ATmega32A) \ + ) + +/** ATmegaxx group without power reduction and + * And interrupt sense register. + */ +#define MEGA_XX_UN1 ( \ + AVR8_PART_IS_DEFINED(ATmega64) || \ + AVR8_PART_IS_DEFINED(ATmega64A) || \ + AVR8_PART_IS_DEFINED(ATmega128) || \ + AVR8_PART_IS_DEFINED(ATmega128A) \ + ) + +/** ATmegaxx group without power reduction and + * And interrupt sense register. + */ +#define MEGA_XX_UN2 ( \ + AVR8_PART_IS_DEFINED(ATmega169P) || \ + AVR8_PART_IS_DEFINED(ATmega169PA) || \ + AVR8_PART_IS_DEFINED(ATmega329P) || \ + AVR8_PART_IS_DEFINED(ATmega329PA) \ + ) + +/** Devices added to complete megaAVR offering. + * Please do not use this group symbol as it is not intended + * to be permanent: the devices should be regrouped. + */ +#define MEGA_UNCATEGORIZED ( \ + AVR8_PART_IS_DEFINED(AT90CAN128) || \ + AVR8_PART_IS_DEFINED(AT90CAN32) || \ + AVR8_PART_IS_DEFINED(AT90CAN64) || \ + AVR8_PART_IS_DEFINED(AT90PWM1) || \ + AVR8_PART_IS_DEFINED(AT90PWM216) || \ + AVR8_PART_IS_DEFINED(AT90PWM2B) || \ + AVR8_PART_IS_DEFINED(AT90PWM316) || \ + AVR8_PART_IS_DEFINED(AT90PWM3B) || \ + AVR8_PART_IS_DEFINED(AT90PWM81) || \ + AVR8_PART_IS_DEFINED(AT90USB1286) || \ + AVR8_PART_IS_DEFINED(AT90USB1287) || \ + AVR8_PART_IS_DEFINED(AT90USB162) || \ + AVR8_PART_IS_DEFINED(AT90USB646) || \ + AVR8_PART_IS_DEFINED(AT90USB647) || \ + AVR8_PART_IS_DEFINED(AT90USB82) || \ + AVR8_PART_IS_DEFINED(ATmega1284) || \ + AVR8_PART_IS_DEFINED(ATmega162) || \ + AVR8_PART_IS_DEFINED(ATmega164P) || \ + AVR8_PART_IS_DEFINED(ATmega165A) || \ + AVR8_PART_IS_DEFINED(ATmega165P) || \ + AVR8_PART_IS_DEFINED(ATmega165PA) || \ + AVR8_PART_IS_DEFINED(ATmega168P) || \ + AVR8_PART_IS_DEFINED(ATmega169A) || \ + AVR8_PART_IS_DEFINED(ATmega16M1) || \ + AVR8_PART_IS_DEFINED(ATmega16U2) || \ + AVR8_PART_IS_DEFINED(ATmega16U4) || \ + AVR8_PART_IS_DEFINED(ATmega256RFA2) || \ + AVR8_PART_IS_DEFINED(ATmega324P) || \ + AVR8_PART_IS_DEFINED(ATmega325) || \ + AVR8_PART_IS_DEFINED(ATmega3250) || \ + AVR8_PART_IS_DEFINED(ATmega3250A) || \ + AVR8_PART_IS_DEFINED(ATmega3250P) || \ + AVR8_PART_IS_DEFINED(ATmega3250PA) || \ + AVR8_PART_IS_DEFINED(ATmega325A) || \ + AVR8_PART_IS_DEFINED(ATmega325P) || \ + AVR8_PART_IS_DEFINED(ATmega325PA) || \ + AVR8_PART_IS_DEFINED(ATmega329) || \ + AVR8_PART_IS_DEFINED(ATmega3290) || \ + AVR8_PART_IS_DEFINED(ATmega3290A) || \ + AVR8_PART_IS_DEFINED(ATmega3290P) || \ + AVR8_PART_IS_DEFINED(ATmega3290PA) || \ + AVR8_PART_IS_DEFINED(ATmega329A) || \ + AVR8_PART_IS_DEFINED(ATmega32M1) || \ + AVR8_PART_IS_DEFINED(ATmega32U2) || \ + AVR8_PART_IS_DEFINED(ATmega32U4) || \ + AVR8_PART_IS_DEFINED(ATmega48P) || \ + AVR8_PART_IS_DEFINED(ATmega644P) || \ + AVR8_PART_IS_DEFINED(ATmega645) || \ + AVR8_PART_IS_DEFINED(ATmega6450) || \ + AVR8_PART_IS_DEFINED(ATmega6450A) || \ + AVR8_PART_IS_DEFINED(ATmega6450P) || \ + AVR8_PART_IS_DEFINED(ATmega645A) || \ + AVR8_PART_IS_DEFINED(ATmega645P) || \ + AVR8_PART_IS_DEFINED(ATmega649) || \ + AVR8_PART_IS_DEFINED(ATmega6490) || \ + AVR8_PART_IS_DEFINED(ATmega6490A) || \ + AVR8_PART_IS_DEFINED(ATmega6490P) || \ + AVR8_PART_IS_DEFINED(ATmega649A) || \ + AVR8_PART_IS_DEFINED(ATmega649P) || \ + AVR8_PART_IS_DEFINED(ATmega64M1) || \ + AVR8_PART_IS_DEFINED(ATmega64RFA2) || \ + AVR8_PART_IS_DEFINED(ATmega8) || \ + AVR8_PART_IS_DEFINED(ATmega8515) || \ + AVR8_PART_IS_DEFINED(ATmega8535) || \ + AVR8_PART_IS_DEFINED(ATmega88P) || \ + AVR8_PART_IS_DEFINED(ATmega8A) || \ + AVR8_PART_IS_DEFINED(ATmega8U2) \ + ) + +/** Unspecified group */ +#define MEGA_UNSPECIFIED (MEGA_XX_UN0 || MEGA_XX_UN1 || MEGA_XX_UN2 || \ + MEGA_UNCATEGORIZED) + +/** @} */ + +/** megaAVR product line */ +#define MEGA (MEGA_XX0_1 || MEGA_XX4 || MEGA_XX8 || MEGA_XX || MEGA_RF || \ + MEGA_UNSPECIFIED) + +/** @} */ + +/** + * \defgroup tiny_part_macros_group tinyAVR parts + * + * @{ + */ + +/** + * \name tinyAVR groups + * @{ + */ + +/** Devices added to complete tinyAVR offering. + * Please do not use this group symbol as it is not intended + * to be permanent: the devices should be regrouped. + */ +#define TINY_UNCATEGORIZED ( \ + AVR8_PART_IS_DEFINED(ATtiny10) || \ + AVR8_PART_IS_DEFINED(ATtiny13) || \ + AVR8_PART_IS_DEFINED(ATtiny13A) || \ + AVR8_PART_IS_DEFINED(ATtiny1634) || \ + AVR8_PART_IS_DEFINED(ATtiny167) || \ + AVR8_PART_IS_DEFINED(ATtiny20) || \ + AVR8_PART_IS_DEFINED(ATtiny2313) || \ + AVR8_PART_IS_DEFINED(ATtiny2313A) || \ + AVR8_PART_IS_DEFINED(ATtiny24) || \ + AVR8_PART_IS_DEFINED(ATtiny24A) || \ + AVR8_PART_IS_DEFINED(ATtiny25) || \ + AVR8_PART_IS_DEFINED(ATtiny26) || \ + AVR8_PART_IS_DEFINED(ATtiny261) || \ + AVR8_PART_IS_DEFINED(ATtiny261A) || \ + AVR8_PART_IS_DEFINED(ATtiny4) || \ + AVR8_PART_IS_DEFINED(ATtiny40) || \ + AVR8_PART_IS_DEFINED(ATtiny4313) || \ + AVR8_PART_IS_DEFINED(ATtiny43U) || \ + AVR8_PART_IS_DEFINED(ATtiny44) || \ + AVR8_PART_IS_DEFINED(ATtiny44A) || \ + AVR8_PART_IS_DEFINED(ATtiny45) || \ + AVR8_PART_IS_DEFINED(ATtiny461) || \ + AVR8_PART_IS_DEFINED(ATtiny461A) || \ + AVR8_PART_IS_DEFINED(ATtiny48) || \ + AVR8_PART_IS_DEFINED(ATtiny5) || \ + AVR8_PART_IS_DEFINED(ATtiny828) || \ + AVR8_PART_IS_DEFINED(ATtiny84) || \ + AVR8_PART_IS_DEFINED(ATtiny84A) || \ + AVR8_PART_IS_DEFINED(ATtiny85) || \ + AVR8_PART_IS_DEFINED(ATtiny861) || \ + AVR8_PART_IS_DEFINED(ATtiny861A) || \ + AVR8_PART_IS_DEFINED(ATtiny87) || \ + AVR8_PART_IS_DEFINED(ATtiny88) || \ + AVR8_PART_IS_DEFINED(ATtiny9) \ + ) + +/** @} */ + +/** tinyAVR product line */ +#define TINY (TINY_UNCATEGORIZED) + +/** @} */ + +/** + * \defgroup sam_part_macros_group SAM parts + * @{ + */ + +/** + * \name SAM3S series + * @{ + */ +#define SAM3S1 ( \ + SAM_PART_IS_DEFINED(SAM3S1A) || \ + SAM_PART_IS_DEFINED(SAM3S1B) || \ + SAM_PART_IS_DEFINED(SAM3S1C) \ + ) + +#define SAM3S2 ( \ + SAM_PART_IS_DEFINED(SAM3S2A) || \ + SAM_PART_IS_DEFINED(SAM3S2B) || \ + SAM_PART_IS_DEFINED(SAM3S2C) \ + ) + +#define SAM3S4 ( \ + SAM_PART_IS_DEFINED(SAM3S4A) || \ + SAM_PART_IS_DEFINED(SAM3S4B) || \ + SAM_PART_IS_DEFINED(SAM3S4C) \ + ) + +#define SAM3S8 ( \ + SAM_PART_IS_DEFINED(SAM3S8B) || \ + SAM_PART_IS_DEFINED(SAM3S8C) \ + ) + +#define SAM3SD8 ( \ + SAM_PART_IS_DEFINED(SAM3SD8B) || \ + SAM_PART_IS_DEFINED(SAM3SD8C) \ + ) +/** @} */ + +/** + * \name SAM3U series + * @{ + */ +#define SAM3U1 ( \ + SAM_PART_IS_DEFINED(SAM3U1C) || \ + SAM_PART_IS_DEFINED(SAM3U1E) \ + ) + +#define SAM3U2 ( \ + SAM_PART_IS_DEFINED(SAM3U2C) || \ + SAM_PART_IS_DEFINED(SAM3U2E) \ + ) + +#define SAM3U4 ( \ + SAM_PART_IS_DEFINED(SAM3U4C) || \ + SAM_PART_IS_DEFINED(SAM3U4E) \ + ) +/** @} */ + +/** + * \name SAM3N series + * @{ + */ +#define SAM3N00 ( \ + SAM_PART_IS_DEFINED(SAM3N00A) || \ + SAM_PART_IS_DEFINED(SAM3N00B) \ + ) + +#define SAM3N0 ( \ + SAM_PART_IS_DEFINED(SAM3N0A) || \ + SAM_PART_IS_DEFINED(SAM3N0B) || \ + SAM_PART_IS_DEFINED(SAM3N0C) \ + ) + +#define SAM3N1 ( \ + SAM_PART_IS_DEFINED(SAM3N1A) || \ + SAM_PART_IS_DEFINED(SAM3N1B) || \ + SAM_PART_IS_DEFINED(SAM3N1C) \ + ) + +#define SAM3N2 ( \ + SAM_PART_IS_DEFINED(SAM3N2A) || \ + SAM_PART_IS_DEFINED(SAM3N2B) || \ + SAM_PART_IS_DEFINED(SAM3N2C) \ + ) + +#define SAM3N4 ( \ + SAM_PART_IS_DEFINED(SAM3N4A) || \ + SAM_PART_IS_DEFINED(SAM3N4B) || \ + SAM_PART_IS_DEFINED(SAM3N4C) \ + ) +/** @} */ + +/** + * \name SAM3X series + * @{ + */ +#define SAM3X4 ( \ + SAM_PART_IS_DEFINED(SAM3X4C) || \ + SAM_PART_IS_DEFINED(SAM3X4E) \ + ) + +#define SAM3X8 ( \ + SAM_PART_IS_DEFINED(SAM3X8C) || \ + SAM_PART_IS_DEFINED(SAM3X8E) || \ + SAM_PART_IS_DEFINED(SAM3X8H) \ + ) +/** @} */ + +/** + * \name SAM3A series + * @{ + */ +#define SAM3A4 ( \ + SAM_PART_IS_DEFINED(SAM3A4C) \ + ) + +#define SAM3A8 ( \ + SAM_PART_IS_DEFINED(SAM3A8C) \ + ) +/** @} */ + +/** + * \name SAM4S series + * @{ + */ +#define SAM4S2 ( \ + SAM_PART_IS_DEFINED(SAM4S2A) || \ + SAM_PART_IS_DEFINED(SAM4S2B) || \ + SAM_PART_IS_DEFINED(SAM4S2C) \ + ) + +#define SAM4S4 ( \ + SAM_PART_IS_DEFINED(SAM4S4A) || \ + SAM_PART_IS_DEFINED(SAM4S4B) || \ + SAM_PART_IS_DEFINED(SAM4S4C) \ + ) + +#define SAM4S8 ( \ + SAM_PART_IS_DEFINED(SAM4S8B) || \ + SAM_PART_IS_DEFINED(SAM4S8C) \ + ) + +#define SAM4S16 ( \ + SAM_PART_IS_DEFINED(SAM4S16B) || \ + SAM_PART_IS_DEFINED(SAM4S16C) \ + ) + +#define SAM4SA16 ( \ + SAM_PART_IS_DEFINED(SAM4SA16B) || \ + SAM_PART_IS_DEFINED(SAM4SA16C) \ + ) + +#define SAM4SD16 ( \ + SAM_PART_IS_DEFINED(SAM4SD16B) || \ + SAM_PART_IS_DEFINED(SAM4SD16C) \ + ) + +#define SAM4SD32 ( \ + SAM_PART_IS_DEFINED(SAM4SD32B) || \ + SAM_PART_IS_DEFINED(SAM4SD32C) \ + ) +/** @} */ + +/** + * \name SAM4L series + * @{ + */ +#define SAM4LS ( \ + SAM_PART_IS_DEFINED(SAM4LS2A) || \ + SAM_PART_IS_DEFINED(SAM4LS2B) || \ + SAM_PART_IS_DEFINED(SAM4LS2C) || \ + SAM_PART_IS_DEFINED(SAM4LS4A) || \ + SAM_PART_IS_DEFINED(SAM4LS4B) || \ + SAM_PART_IS_DEFINED(SAM4LS4C) || \ + SAM_PART_IS_DEFINED(SAM4LS8A) || \ + SAM_PART_IS_DEFINED(SAM4LS8B) || \ + SAM_PART_IS_DEFINED(SAM4LS8C) \ + ) + +#define SAM4LC ( \ + SAM_PART_IS_DEFINED(SAM4LC2A) || \ + SAM_PART_IS_DEFINED(SAM4LC2B) || \ + SAM_PART_IS_DEFINED(SAM4LC2C) || \ + SAM_PART_IS_DEFINED(SAM4LC4A) || \ + SAM_PART_IS_DEFINED(SAM4LC4B) || \ + SAM_PART_IS_DEFINED(SAM4LC4C) || \ + SAM_PART_IS_DEFINED(SAM4LC8A) || \ + SAM_PART_IS_DEFINED(SAM4LC8B) || \ + SAM_PART_IS_DEFINED(SAM4LC8C) \ + ) +/** @} */ + +/** + * \name SAMD20 series + * @{ + */ +#define SAMD20J ( \ + SAM_PART_IS_DEFINED(SAMD20J14) || \ + SAM_PART_IS_DEFINED(SAMD20J15) || \ + SAM_PART_IS_DEFINED(SAMD20J16) || \ + SAM_PART_IS_DEFINED(SAMD20J17) || \ + SAM_PART_IS_DEFINED(SAMD20J18) \ + ) + +#define SAMD20G ( \ + SAM_PART_IS_DEFINED(SAMD20G14) || \ + SAM_PART_IS_DEFINED(SAMD20G15) || \ + SAM_PART_IS_DEFINED(SAMD20G16) || \ + SAM_PART_IS_DEFINED(SAMD20G17) || \ + SAM_PART_IS_DEFINED(SAMD20G17U) || \ + SAM_PART_IS_DEFINED(SAMD20G18) || \ + SAM_PART_IS_DEFINED(SAMD20G18U) \ + ) + +#define SAMD20E ( \ + SAM_PART_IS_DEFINED(SAMD20E14) || \ + SAM_PART_IS_DEFINED(SAMD20E15) || \ + SAM_PART_IS_DEFINED(SAMD20E16) || \ + SAM_PART_IS_DEFINED(SAMD20E17) || \ + SAM_PART_IS_DEFINED(SAMD20E18) || \ + SAM_PART_IS_DEFINED(SAMD20E1F) \ + ) +/** @} */ + +/** + * \name SAMD21 series + * @{ + */ +#define SAMD21J ( \ + SAM_PART_IS_DEFINED(SAMD21J15A) || \ + SAM_PART_IS_DEFINED(SAMD21J16A) || \ + SAM_PART_IS_DEFINED(SAMD21J17A) || \ + SAM_PART_IS_DEFINED(SAMD21J18A) || \ + SAM_PART_IS_DEFINED(SAMD21J15B) || \ + SAM_PART_IS_DEFINED(SAMD21J16B) \ + ) + +#define SAMD21G ( \ + SAM_PART_IS_DEFINED(SAMD21G15A) || \ + SAM_PART_IS_DEFINED(SAMD21G16A) || \ + SAM_PART_IS_DEFINED(SAMD21G17A) || \ + SAM_PART_IS_DEFINED(SAMD21G17AU) || \ + SAM_PART_IS_DEFINED(SAMD21G18A) || \ + SAM_PART_IS_DEFINED(SAMD21G18AU) || \ + SAM_PART_IS_DEFINED(SAMD21G15B) || \ + SAM_PART_IS_DEFINED(SAMD21G16B) \ + ) + +#define SAMD21E ( \ + SAM_PART_IS_DEFINED(SAMD21E15A) || \ + SAM_PART_IS_DEFINED(SAMD21E16A) || \ + SAM_PART_IS_DEFINED(SAMD21E17A) || \ + SAM_PART_IS_DEFINED(SAMD21E18A) || \ + SAM_PART_IS_DEFINED(SAMD21E15B) || \ + SAM_PART_IS_DEFINED(SAMD21E15BU) || \ + SAM_PART_IS_DEFINED(SAMD21E16B) || \ + SAM_PART_IS_DEFINED(SAMD21E16BU) || \ + SAM_PART_IS_DEFINED(SAMD21E15L) || \ + SAM_PART_IS_DEFINED(SAMD21E16L) \ + ) +/** @} */ + +/** + * \name SAMR21 series + * @{ + */ +#define SAMR21G ( \ + SAM_PART_IS_DEFINED(SAMR21G16A) || \ + SAM_PART_IS_DEFINED(SAMR21G17A) || \ + SAM_PART_IS_DEFINED(SAMR21G18A) \ + ) + +#define SAMR21E ( \ + SAM_PART_IS_DEFINED(SAMR21E16A) || \ + SAM_PART_IS_DEFINED(SAMR21E17A) || \ + SAM_PART_IS_DEFINED(SAMR21E18A) \ + ) +/** @} */ + +/** + * \name SAMD10 series + * @{ + */ +#define SAMD10C ( \ + SAM_PART_IS_DEFINED(SAMD10C12A) || \ + SAM_PART_IS_DEFINED(SAMD10C13A) || \ + SAM_PART_IS_DEFINED(SAMD10C14A) \ + ) + +#define SAMD10DS ( \ + SAM_PART_IS_DEFINED(SAMD10D12AS) || \ + SAM_PART_IS_DEFINED(SAMD10D13AS) || \ + SAM_PART_IS_DEFINED(SAMD10D14AS) \ + ) + +#define SAMD10DM ( \ + SAM_PART_IS_DEFINED(SAMD10D12AM) || \ + SAM_PART_IS_DEFINED(SAMD10D13AM) || \ + SAM_PART_IS_DEFINED(SAMD10D14AM) \ + ) +/** @} */ + +/** + * \name SAMD11 series + * @{ + */ +#define SAMD11C ( \ + SAM_PART_IS_DEFINED(SAMD11C14A) \ + ) + +#define SAMD11DS ( \ + SAM_PART_IS_DEFINED(SAMD11D14AS) \ + ) + +#define SAMD11DM ( \ + SAM_PART_IS_DEFINED(SAMD11D14AM) \ + ) +/** @} */ + +/** + * \name SAML21 series + * @{ + */ +#define SAML21E ( \ + SAM_PART_IS_DEFINED(SAML21E15A) || \ + SAM_PART_IS_DEFINED(SAML21E16A) || \ + SAM_PART_IS_DEFINED(SAML21E17A) || \ + SAM_PART_IS_DEFINED(SAML21E18A) \ + ) + +#define SAML21G ( \ + SAM_PART_IS_DEFINED(SAML21G16A) || \ + SAM_PART_IS_DEFINED(SAML21G17A) || \ + SAM_PART_IS_DEFINED(SAML21G18A) \ + ) + +#define SAML21J ( \ + SAM_PART_IS_DEFINED(SAML21J16A) || \ + SAM_PART_IS_DEFINED(SAML21J17A) || \ + SAM_PART_IS_DEFINED(SAML21J18A) \ + ) +/** @} */ + +/** + * \name SAM4E series + * @{ + */ +#define SAM4E8 ( \ + SAM_PART_IS_DEFINED(SAM4E8C) || \ + SAM_PART_IS_DEFINED(SAM4E8E) \ + ) + +#define SAM4E16 ( \ + SAM_PART_IS_DEFINED(SAM4E16C) || \ + SAM_PART_IS_DEFINED(SAM4E16E) \ + ) +/** @} */ + +/** + * \name SAM4N series + * @{ + */ +#define SAM4N8 ( \ + SAM_PART_IS_DEFINED(SAM4N8A) || \ + SAM_PART_IS_DEFINED(SAM4N8B) || \ + SAM_PART_IS_DEFINED(SAM4N8C) \ + ) + +#define SAM4N16 ( \ + SAM_PART_IS_DEFINED(SAM4N16B) || \ + SAM_PART_IS_DEFINED(SAM4N16C) \ + ) +/** @} */ + +/** + * \name SAM4C series + * @{ + */ +#define SAM4C8_0 ( \ + SAM_PART_IS_DEFINED(SAM4C8C_0) \ + ) + +#define SAM4C8_1 ( \ + SAM_PART_IS_DEFINED(SAM4C8C_1) \ + ) + +#define SAM4C8 (SAM4C8_0 || SAM4C8_1) + +#define SAM4C16_0 ( \ + SAM_PART_IS_DEFINED(SAM4C16C_0) \ + ) + +#define SAM4C16_1 ( \ + SAM_PART_IS_DEFINED(SAM4C16C_1) \ + ) + +#define SAM4C16 (SAM4C16_0 || SAM4C16_1) + +#define SAM4C32_0 ( \ + SAM_PART_IS_DEFINED(SAM4C32C_0) ||\ + SAM_PART_IS_DEFINED(SAM4C32E_0) \ + ) + +#define SAM4C32_1 ( \ + SAM_PART_IS_DEFINED(SAM4C32C_1) ||\ + SAM_PART_IS_DEFINED(SAM4C32E_1) \ + ) + + +#define SAM4C32 (SAM4C32_0 || SAM4C32_1) + +/** @} */ + +/** + * \name SAM4CM series + * @{ + */ +#define SAM4CMP8_0 ( \ + SAM_PART_IS_DEFINED(SAM4CMP8C_0) \ + ) + +#define SAM4CMP8_1 ( \ + SAM_PART_IS_DEFINED(SAM4CMP8C_1) \ + ) + +#define SAM4CMP8 (SAM4CMP8_0 || SAM4CMP8_1) + +#define SAM4CMP16_0 ( \ + SAM_PART_IS_DEFINED(SAM4CMP16C_0) \ + ) + +#define SAM4CMP16_1 ( \ + SAM_PART_IS_DEFINED(SAM4CMP16C_1) \ + ) + +#define SAM4CMP16 (SAM4CMP16_0 || SAM4CMP16_1) + +#define SAM4CMP32_0 ( \ + SAM_PART_IS_DEFINED(SAM4CMP32C_0) \ + ) + +#define SAM4CMP32_1 ( \ + SAM_PART_IS_DEFINED(SAM4CMP32C_1) \ + ) + +#define SAM4CMP32 (SAM4CMP32_0 || SAM4CMP32_1) + +#define SAM4CMS8_0 ( \ + SAM_PART_IS_DEFINED(SAM4CMS8C_0) \ + ) + +#define SAM4CMS8_1 ( \ + SAM_PART_IS_DEFINED(SAM4CMS8C_1) \ + ) + +#define SAM4CMS8 (SAM4CMS8_0 || SAM4CMS8_1) + +#define SAM4CMS16_0 ( \ + SAM_PART_IS_DEFINED(SAM4CMS16C_0) \ + ) + +#define SAM4CMS16_1 ( \ + SAM_PART_IS_DEFINED(SAM4CMS16C_1) \ + ) + +#define SAM4CMS16 (SAM4CMS16_0 || SAM4CMS16_1) + +#define SAM4CMS32_0 ( \ + SAM_PART_IS_DEFINED(SAM4CMS32C_0) \ + ) + +#define SAM4CMS32_1 ( \ + SAM_PART_IS_DEFINED(SAM4CMS32C_1) \ + ) + +#define SAM4CMS32 (SAM4CMS32_0 || SAM4CMS32_1) + +/** @} */ + +/** + * \name SAM4CP series + * @{ + */ +#define SAM4CP16_0 ( \ + SAM_PART_IS_DEFINED(SAM4CP16B_0) \ + ) + +#define SAM4CP16_1 ( \ + SAM_PART_IS_DEFINED(SAM4CP16B_1) \ + ) + +#define SAM4CP16 (SAM4CP16_0 || SAM4CP16_1) +/** @} */ + +/** + * \name SAMG series + * @{ + */ +#define SAMG51 ( \ + SAM_PART_IS_DEFINED(SAMG51G18) \ + ) + +#define SAMG53 ( \ + SAM_PART_IS_DEFINED(SAMG53G19) ||\ + SAM_PART_IS_DEFINED(SAMG53N19) \ + ) + +#define SAMG54 ( \ + SAM_PART_IS_DEFINED(SAMG54G19) ||\ + SAM_PART_IS_DEFINED(SAMG54J19) ||\ + SAM_PART_IS_DEFINED(SAMG54N19) \ + ) + +#define SAMG55 ( \ + SAM_PART_IS_DEFINED(SAMG55G18) ||\ + SAM_PART_IS_DEFINED(SAMG55G19) ||\ + SAM_PART_IS_DEFINED(SAMG55J18) ||\ + SAM_PART_IS_DEFINED(SAMG55J19) ||\ + SAM_PART_IS_DEFINED(SAMG55N19) \ + ) +/** @} */ +/** + * \name SAM families + * @{ + */ +/** SAM3S Family */ +#define SAM3S (SAM3S1 || SAM3S2 || SAM3S4 || SAM3S8 || SAM3SD8) + +/** SAM3U Family */ +#define SAM3U (SAM3U1 || SAM3U2 || SAM3U4) + +/** SAM3N Family */ +#define SAM3N (SAM3N00 || SAM3N0 || SAM3N1 || SAM3N2 || SAM3N4) + +/** SAM3XA Family */ +#define SAM3XA (SAM3X4 || SAM3X8 || SAM3A4 || SAM3A8) + +/** SAM4S Family */ +#define SAM4S (SAM4S2 || SAM4S4 || SAM4S8 || SAM4S16 || SAM4SA16 || SAM4SD16 || SAM4SD32) + +/** SAM4L Family */ +#define SAM4L (SAM4LS || SAM4LC) + +/** SAMD20 Family */ +#define SAMD20 (SAMD20J || SAMD20G || SAMD20E) + +/** SAMD21 Family */ +#define SAMD21 (SAMD21J || SAMD21G || SAMD21E) + +/** SAMD10 Family */ +#define SAMD10 (SAMD10C || SAMD10DS || SAMD10DM) + +/** SAMD11 Family */ +#define SAMD11 (SAMD11C || SAMD11DS || SAMD11DM) + +/** SAMD Family */ +#define SAMD (SAMD20 || SAMD21 || SAMD10 || SAMD11) + +/** SAMR21 Family */ +#define SAMR21 (SAMR21G || SAMR21E) + +/** SAML21 Family */ +#define SAML21 (SAML21J || SAML21G || SAML21E) + +/** SAM4E Family */ +#define SAM4E (SAM4E8 || SAM4E16) + +/** SAM4N Family */ +#define SAM4N (SAM4N8 || SAM4N16) + +/** SAM4C Family */ +#define SAM4C_0 (SAM4C8_0 || SAM4C16_0 || SAM4C32_0) +#define SAM4C_1 (SAM4C8_1 || SAM4C16_1 || SAM4C32_1) +#define SAM4C (SAM4C8 || SAM4C16 || SAM4C32) + +/** SAM4CM Family */ +#define SAM4CM_0 (SAM4CMP8_0 || SAM4CMP16_0 || SAM4CMP32_0 || SAM4CMS8_0 || \ + SAM4CMS16_0 || SAM4CMS32_0) +#define SAM4CM_1 (SAM4CMP8_1 || SAM4CMP16_1 || SAM4CMP32_1 || SAM4CMS8_1 || \ + SAM4CMS16_1 || SAM4CMS32_1) +#define SAM4CM (SAM4CMP8 || SAM4CMP16 || SAM4CMP32 || SAM4CMS8 || \ + SAM4CMS16 || SAM4CMS32) + +/** SAM4CP Family */ +#define SAM4CP_0 (SAM4CP16_0) +#define SAM4CP_1 (SAM4CP16_1) +#define SAM4CP (SAM4CP16) + +/** SAMG Family */ +#define SAMG (SAMG51 || SAMG53 || SAMG54 || SAMG55) + +/** SAM0 product line (cortex-m0+) */ +#define SAM0 (SAMD20 || SAMD21 || SAMR21 || SAMD10 || SAMD11 || SAML21) + +/** @} */ + +/** SAM product line */ +#define SAM (SAM3S || SAM3U || SAM3N || SAM3XA || SAM4S || SAM4L || SAM4E || \ + SAM0 || SAM4N || SAM4C || SAM4CM || SAM4CP || SAMG) + +/** @} */ + +/** @} */ + +/** @} */ + +#endif /* ATMEL_PARTS_H */ diff --git a/AVR Code/USB_BULK_TEST/src/ASF/xmega/boards/xmega_a3bu_xplained/init.c b/AVR Code/USB_BULK_TEST/src/ASF/xmega/boards/xmega_a3bu_xplained/init.c new file mode 100644 index 00000000..571692ee --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/xmega/boards/xmega_a3bu_xplained/init.c @@ -0,0 +1,163 @@ +/** + * \file + * + * \brief XMEGA-A3BU Xplained board init. + * + * This file contains board initialization function. + * + * Copyright (c) 2010-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ +#include +#include +#include + +/** + * \addtogroup xmega_a3bu_xplained_group + * @{ + */ + +void board_init(void) +{ + ioport_configure_pin(LED0_GPIO, IOPORT_DIR_OUTPUT | IOPORT_INIT_HIGH); + ioport_configure_pin(LED1_GPIO, IOPORT_DIR_OUTPUT | IOPORT_INIT_HIGH); + ioport_configure_pin(LED2_GPIO, IOPORT_DIR_OUTPUT | IOPORT_INIT_HIGH); + ioport_configure_pin(LED3_GPIO, IOPORT_DIR_OUTPUT | IOPORT_INIT_LOW + | IOPORT_INV_ENABLED); + + ioport_configure_pin(GPIO_PUSH_BUTTON_0, IOPORT_DIR_INPUT + | IOPORT_LEVEL | IOPORT_PULL_UP); + ioport_configure_pin(GPIO_PUSH_BUTTON_1, IOPORT_DIR_INPUT + | IOPORT_LEVEL | IOPORT_PULL_UP); + ioport_configure_pin(GPIO_PUSH_BUTTON_2, IOPORT_DIR_INPUT + | IOPORT_LEVEL | IOPORT_PULL_UP); + +#ifdef CONF_BOARD_C12832A1Z + ioport_configure_pin(NHD_C12832A1Z_SPI_SCK, IOPORT_DIR_OUTPUT + | IOPORT_INIT_HIGH); + ioport_configure_pin(NHD_C12832A1Z_SPI_MOSI, IOPORT_DIR_OUTPUT + | IOPORT_INIT_HIGH); + ioport_configure_pin(NHD_C12832A1Z_CSN, IOPORT_DIR_OUTPUT + | IOPORT_INIT_HIGH); + ioport_configure_pin(NHD_C12832A1Z_REGISTER_SELECT, IOPORT_DIR_OUTPUT + | IOPORT_INIT_HIGH); + ioport_configure_pin(NHD_C12832A1Z_RESETN, IOPORT_DIR_OUTPUT + | IOPORT_INIT_HIGH); + ioport_configure_pin(NHD_C12832A1Z_BACKLIGHT, IOPORT_DIR_OUTPUT + | IOPORT_INIT_LOW); +#endif + +#ifdef CONF_BOARD_AT45DBX + ioport_configure_pin(AT45DBX_MASTER_SCK, IOPORT_DIR_OUTPUT + | IOPORT_INIT_HIGH); + ioport_configure_pin(AT45DBX_MASTER_MOSI, IOPORT_DIR_OUTPUT + | IOPORT_INIT_HIGH); + ioport_configure_pin(AT45DBX_MASTER_MISO, IOPORT_DIR_INPUT); + ioport_configure_pin(AT45DBX_CS, IOPORT_DIR_OUTPUT | IOPORT_INIT_HIGH); +#endif + +#ifdef CONF_BOARD_ENABLE_MXT143E_XPLAINED + ioport_configure_pin(MXT143E_XPLAINED_SCK, IOPORT_DIR_OUTPUT + | IOPORT_INIT_HIGH); + ioport_configure_pin(MXT143E_XPLAINED_MOSI, IOPORT_DIR_OUTPUT + | IOPORT_INIT_HIGH); + ioport_configure_pin(MXT143E_XPLAINED_MISO, IOPORT_DIR_INPUT); + ioport_configure_pin(MXT143E_XPLAINED_CS, IOPORT_DIR_OUTPUT + | IOPORT_INIT_HIGH); + ioport_configure_pin(MXT143E_XPLAINED_CHG, IOPORT_DIR_INPUT); + ioport_configure_pin(MXT143E_XPLAINED_DC, IOPORT_DIR_OUTPUT + | IOPORT_INIT_LOW); + #ifndef MXT143E_XPLAINED_BACKLIGHT_DISABLE + ioport_configure_pin(MXT143E_XPLAINED_BACKLIGHT, IOPORT_DIR_OUTPUT + | IOPORT_INIT_LOW); + #endif + ioport_configure_pin(MXT143E_XPLAINED_LCD_RESET, IOPORT_DIR_OUTPUT + | IOPORT_INIT_LOW); +#endif + +#ifdef CONF_BOARD_ENABLE_AC_PINS + ioport_configure_pin(IOPORT_CREATE_PIN(PORTA, 0), IOPORT_DIR_INPUT); + ioport_configure_pin(IOPORT_CREATE_PIN(PORTA, 2), IOPORT_DIR_INPUT); + ioport_configure_pin(IOPORT_CREATE_PIN(PORTB, 1), IOPORT_DIR_INPUT); +#endif + +#ifdef CONF_BOARD_ENABLE_USARTC0 + ioport_configure_pin(IOPORT_CREATE_PIN(PORTC, 3), IOPORT_DIR_OUTPUT + | IOPORT_INIT_HIGH); + ioport_configure_pin(IOPORT_CREATE_PIN(PORTC, 2), IOPORT_DIR_INPUT); +#endif + +#ifdef CONF_BOARD_ENABLE_USARTD0 + ioport_configure_pin(IOPORT_CREATE_PIN(PORTD, 3), IOPORT_DIR_OUTPUT + | IOPORT_INIT_HIGH); + ioport_configure_pin(IOPORT_CREATE_PIN(PORTD, 2), IOPORT_DIR_INPUT); +#endif + +#ifdef CONF_BOARD_ENABLE_USARTE0 + ioport_configure_pin(IOPORT_CREATE_PIN(PORTE, 3), IOPORT_DIR_OUTPUT + | IOPORT_INIT_HIGH); + ioport_configure_pin(IOPORT_CREATE_PIN(PORTE, 2), IOPORT_DIR_INPUT); +#endif + +#if defined (SENSORS_XPLAINED_BOARD) + /* Configure the Xplained Sensor extension board, if any, after + * the platform Xplained board has configured basic clock settings, + * GPIO pin mapping, interrupt controller options, etc. + */ + sensor_board_init (); +#endif + +#ifdef CONF_BOARD_AT86RFX + ioport_configure_pin(AT86RFX_SPI_SCK, IOPORT_DIR_OUTPUT + | IOPORT_INIT_HIGH); + ioport_configure_pin(AT86RFX_SPI_MOSI, IOPORT_DIR_OUTPUT + | IOPORT_INIT_HIGH); + ioport_configure_pin(AT86RFX_SPI_MISO, IOPORT_DIR_INPUT); + ioport_configure_pin(AT86RFX_SPI_CS, IOPORT_DIR_OUTPUT | IOPORT_INIT_HIGH); + + /* Initialize TRX_RST and SLP_TR as GPIO. */ + ioport_configure_pin(AT86RFX_RST_PIN, IOPORT_DIR_OUTPUT | IOPORT_INIT_HIGH); + ioport_configure_pin(AT86RFX_SLP_PIN, IOPORT_DIR_OUTPUT | IOPORT_INIT_HIGH); +#endif +} + +/** + * @} + */ diff --git a/AVR Code/USB_BULK_TEST/src/ASF/xmega/boards/xmega_a3bu_xplained/led.h b/AVR Code/USB_BULK_TEST/src/ASF/xmega/boards/xmega_a3bu_xplained/led.h new file mode 100644 index 00000000..702e895f --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/xmega/boards/xmega_a3bu_xplained/led.h @@ -0,0 +1,83 @@ +/** + * \file + * + * \brief XMEGA-A3BU board LEDs support package. + * + * This file contains definitions and services related to the LED features of + * the XMEGA-A3BU Xplained board. + * + * To use this board, define BOARD=XMEGA_A3BU_XPLAINED. + * + * Copyright (c) 2014-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ +#ifndef _LED_H_ +#define _LED_H_ + +#include "gpio.h" + +/** + * \brief Turns off the specified LEDs. + * + * \param led_gpio LED to turn off (LEDx_GPIO). + * + * \note The pins of the specified LEDs are set to GPIO output mode. + */ +#define LED_Off(led_gpio) gpio_set_pin_high(led_gpio) + +/** + * \brief Turns on the specified LEDs. + * + * \param led_gpio LED to turn on (LEDx_GPIO). + * + * \note The pins of the specified LEDs are set to GPIO output mode. + */ +#define LED_On(led_gpio) gpio_set_pin_low(led_gpio) + +/** + * \brief Toggles the specified LEDs. + * + * \param led_gpio LED to toggle (LEDx_GPIO). + * + * \note The pins of the specified LEDs are set to GPIO output mode. + */ +#define LED_Toggle(led_gpio) gpio_toggle_pin(led_gpio) + +#endif /* _LED_H_ */ diff --git a/AVR Code/USB_BULK_TEST/src/ASF/xmega/boards/xmega_a3bu_xplained/xmega_a3bu_xplained.h b/AVR Code/USB_BULK_TEST/src/ASF/xmega/boards/xmega_a3bu_xplained/xmega_a3bu_xplained.h new file mode 100644 index 00000000..e8165188 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/xmega/boards/xmega_a3bu_xplained/xmega_a3bu_xplained.h @@ -0,0 +1,417 @@ +/** + * \file + * + * \brief XMEGA-A3BU-XPLAINED board header file. + * + * This file contains definitions and services related to the features of the + * XMEGA-A3BU Xplained board. + * + * To use this board define BOARD=XMEGA_A3BU_XPLAINED. + * + * Copyright (c) 2011-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ +#ifndef _XMEGA_A3BU_XPLAINED_H_ +#define _XMEGA_A3BU_XPLAINED_H_ + +#include + +#define MCU_SOC_NAME "ATxmega256A3BU" +#define BOARD_NAME "XMEGA-A3BU-XPLAINED" +/** + * \defgroup xmega_a3bu_xplained_group XMEGA-A3BU Xplained board + * @{ + */ + +/** + * \defgroup xmega_a3bu_xplained_feature_group Feature definitions + * @{ + */ + +//! \name Miscellaneous data +//@{ +//! Validate board support for the common sensor service. +#define COMMON_SENSOR_PLATFORM +//@} + +/** + * \name LEDs + * + * LED0 and LED1 are single yellow LEDs that are active low.. + * LED2 and LED3 are inside one package (Led red and green close + * to USB connector) but can be controlled individually. + * LED2 has a red color and is active low. This LED can be + * used for general purposes. + * LED3 has a green color and is active high. By default this + * LED is on since it shall indicate that power is applied to the + * board. By pulling the gate of a N-FET low it is possible to + * turn off the LED if needed. + */ +//@{ +#define LED0_GPIO IOPORT_CREATE_PIN(PORTR, 0) +#define LED1_GPIO IOPORT_CREATE_PIN(PORTR, 1) +#define LED2_GPIO IOPORT_CREATE_PIN(PORTD, 4) +#define LED3_GPIO IOPORT_CREATE_PIN(PORTD, 5) +#define LED0 LED0_GPIO +#define LED1 LED1_GPIO +#define LED2 LED2_GPIO +#define LED3 LED3_GPIO +//! Number of LEDs. +#define LED_COUNT 4 +//@} + +//! \name Push buttons +//@{ +#define GPIO_PUSH_BUTTON_0 IOPORT_CREATE_PIN(PORTE, 5) +#define GPIO_PUSH_BUTTON_1 IOPORT_CREATE_PIN(PORTF, 1) +#define GPIO_PUSH_BUTTON_2 IOPORT_CREATE_PIN(PORTF, 2) +//@} + +//! \name QTouch button +//! This button requires the software QTouch library +//@{ +#define QTOUCH_BUTTON_SNS IOPORT_CREATE_PIN(PORTF, 6) +#define QTOUCH_BUTTON_SNSK IOPORT_CREATE_PIN(PORTF, 7) +//@} + +//! \name Light sensor +//@{ +#define LIGHT_SENSOR_ADC_MODULE ADCA +#define LIGHT_SENSOR_ADC_INPUT ADCCH_POS_PIN0 +#define LIGHT_SENSOR_SIGNAL_PIN IOPORT_CREATE_PIN(PORTA, 0) +//@} + +//! \name Temperature sensor (NTC) +//@{ +#define TEMPERATURE_SENSOR_ADC_MODULE ADCA +#define TEMPERATURE_SENSOR_ADC_INPUT ADCCH_POS_PIN1 +#define TEMPERATURE_SENSOR_SIGNAL_PIN IOPORT_CREATE_PIN(PORTA, 1) +//@} + +//! \name Analog filter (lowpass RC @ 159 Hz) +//@{ +#define FILTER_INPUT_SIGNAL_PIN IOPORT_CREATE_PIN(PORTF, 0) +#define FILTER_OUTPUT_ADC_MODULE ADCA +#define FILTER_OUTPUT_ADC_INPUT ADCCH_POS_PIN2 +#define FILTER_OUTPUT_SIGNAL_PIN IOPORT_CREATE_PIN(PORTA, 2) +//@} + +//! \name LCD backlight +//@{ +#define LCD_BACKLIGHT_ENABLE_PIN IOPORT_CREATE_PIN(PORTE, 4) +#define LCD_BACKLIGHT_ENABLE_LEVEL true +//@} + +//! \name LCD controller (NHD-C12832A1Z-FSW-FBW-3V3) +//@{ +#define NHD_C12832A1Z_SPI &USARTD0 +#define NHD_C12832A1Z_SPI_SCK IOPORT_CREATE_PIN(PORTD, 1) +#define NHD_C12832A1Z_SPI_MOSI IOPORT_CREATE_PIN(PORTD, 3) +#define NHD_C12832A1Z_CSN IOPORT_CREATE_PIN(PORTF, 3) +//! If this signal is set high display data is sent otherwise commands +#define NHD_C12832A1Z_REGISTER_SELECT IOPORT_CREATE_PIN(PORTD, 0) +#define NHD_C12832A1Z_RESETN IOPORT_CREATE_PIN(PORTA, 3) +//! The backlight is active high +#define NHD_C12832A1Z_BACKLIGHT IOPORT_CREATE_PIN(PORTE, 4) +//@} + +//! \name LCD dimensions +//@{ +#define LCD_WIDTH_PIXELS (128) +#define LCD_HEIGHT_PIXELS (32) +//@} + +//! \name DataFlash memory (AT45DBX) +//@{ +#define AT45DBX_SPI &USARTD0 +#define AT45DBX_CS IOPORT_CREATE_PIN(PORTF, 4) +//! SCK pin +#define AT45DBX_MASTER_SCK IOPORT_CREATE_PIN(PORTD, 1) +//! MOSI pin +#define AT45DBX_MASTER_MOSI IOPORT_CREATE_PIN(PORTD, 3) +//! MISO pin +#define AT45DBX_MASTER_MISO IOPORT_CREATE_PIN(PORTD, 2) +//@} + +//! \name MXT143E Xplained top module +//@{ +#define MXT143E_XPLAINED_TWI &TWIC +#define MXT143E_XPLAINED_USART_SPI &USARTC1 +#define MXT143E_XPLAINED_CS IOPORT_CREATE_PIN(PORTC, 4) +#define MXT143E_XPLAINED_SCK IOPORT_CREATE_PIN(PORTC, 7) +#define MXT143E_XPLAINED_MOSI IOPORT_CREATE_PIN(PORTC, 5) +#define MXT143E_XPLAINED_MISO IOPORT_CREATE_PIN(PORTC, 6) +#define MXT143E_XPLAINED_CHG IOPORT_CREATE_PIN(PORTC, 2) +#define MXT143E_XPLAINED_DC IOPORT_CREATE_PIN(PORTC, 3) +#define MXT143E_XPLAINED_BACKLIGHT IOPORT_CREATE_PIN(PORTA, 4) +#define MXT143E_XPLAINED_LCD_RESET IOPORT_CREATE_PIN(PORTA, 6) +//@} + +/** + * \name External oscillator + * + * \todo Need to measure the actual startup time on the hardware. + */ +//@{ +#define BOARD_XOSC_HZ 32768 +#define BOARD_XOSC_TYPE XOSC_TYPE_32KHZ +#define BOARD_XOSC_STARTUP_US 1000000 +//@} + +//! \name Communication interfaces on header J1 +//@{ +#define TWIC_SDA IOPORT_CREATE_PIN(PORTC, 0) +#define TWIC_SCL IOPORT_CREATE_PIN(PORTC, 1) +#define USARTC0_RXD IOPORT_CREATE_PIN(PORTC, 2) +#define USARTC0_TXD IOPORT_CREATE_PIN(PORTC, 3) +#define SPIC_SS IOPORT_CREATE_PIN(PORTC, 4) +#define SPIC_MOSI IOPORT_CREATE_PIN(PORTC, 5) +#define SPIC_MISO IOPORT_CREATE_PIN(PORTC, 6) +#define SPIC_SCK IOPORT_CREATE_PIN(PORTC, 7) +//@} + + +/*! \name Connections of the AT86RFX transceiver + */ +//! @{ +#define AT86RFX_SPI &SPIC +#define AT86RFX_RST_PIN IOPORT_CREATE_PIN(PORTC, 0) +#define AT86RFX_MISC_PIN IOPORT_CREATE_PIN(PORTC, 1) +#define AT86RFX_IRQ_PIN IOPORT_CREATE_PIN(PORTC, 2) +#define AT86RFX_SLP_PIN IOPORT_CREATE_PIN(PORTC, 3) +#define AT86RFX_SPI_CS IOPORT_CREATE_PIN(PORTC, 4) +#define AT86RFX_SPI_MOSI IOPORT_CREATE_PIN(PORTC, 5) +#define AT86RFX_SPI_MISO IOPORT_CREATE_PIN(PORTC, 6) +#define AT86RFX_SPI_SCK IOPORT_CREATE_PIN(PORTC, 7) + +#define AT86RFX_INTC_INIT() ioport_configure_pin(AT86RFX_IRQ_PIN, IOPORT_DIR_INPUT); \ + PORTC.PIN2CTRL = PORT_ISC0_bm; \ + PORTC.INT0MASK = PIN2_bm; \ + PORTC.INTFLAGS = PORT_INT0IF_bm; + +#define AT86RFX_ISR() ISR(PORTC_INT0_vect) + +/** Enables the transceiver main interrupt. */ +#define ENABLE_TRX_IRQ() (PORTC.INTCTRL |= PORT_INT0LVL_gm) + +/** Disables the transceiver main interrupt. */ +#define DISABLE_TRX_IRQ() (PORTC.INTCTRL &= ~PORT_INT0LVL_gm) + +/** Clears the transceiver main interrupt. */ +#define CLEAR_TRX_IRQ() (PORTC.INTFLAGS = PORT_INT0IF_bm) + +/* + * This macro saves the trx interrupt status and disables the trx interrupt. + */ +#define ENTER_TRX_REGION() { uint8_t irq_mask = PORTC.INTCTRL; PORTC.INTCTRL &= ~PORT_INT0LVL_gm + +/* + * This macro restores the transceiver interrupt status + */ +#define LEAVE_TRX_REGION() PORTC.INTCTRL = irq_mask; } + +//! @} + + +/** + * \name Pin connections on header J1 + * + * The whole port C is directly connected to J1. + * + * \note For the TWI lines there are footprints for pull up resistors, which + * are by default not mounted on the board. + */ +//@{ +#define J1_PIN0 IOPORT_CREATE_PIN(PORTC, 0) +#define J1_PIN1 IOPORT_CREATE_PIN(PORTC, 1) +#define J1_PIN2 IOPORT_CREATE_PIN(PORTC, 2) +#define J1_PIN3 IOPORT_CREATE_PIN(PORTC, 3) +#define J1_PIN4 IOPORT_CREATE_PIN(PORTC, 4) +#define J1_PIN5 IOPORT_CREATE_PIN(PORTC, 5) +#define J1_PIN6 IOPORT_CREATE_PIN(PORTC, 6) +#define J1_PIN7 IOPORT_CREATE_PIN(PORTC, 7) +//@} + +/** + * \name Pin connections on header J2 + * + * The lower half of port B is connected to the lower pins of J2 while the + * upper half of port A is connected to the upper pins of J2. + * + * The port pins are connected directly to this header and are not shared with + * any on-board functionality. + */ +//@{ +#define J2_PIN0 IOPORT_CREATE_PIN(PORTB, 0) +#define J2_PIN1 IOPORT_CREATE_PIN(PORTB, 1) +#define J2_PIN2 IOPORT_CREATE_PIN(PORTB, 2) +#define J2_PIN3 IOPORT_CREATE_PIN(PORTB, 3) +#define J2_PIN4 IOPORT_CREATE_PIN(PORTA, 4) +#define J2_PIN5 IOPORT_CREATE_PIN(PORTA, 5) +#define J2_PIN6 IOPORT_CREATE_PIN(PORTA, 6) +#define J2_PIN7 IOPORT_CREATE_PIN(PORTA, 7) +//@} + +/** + * \name Pin connections on header J3 + * + * The lower half of port A is connected to the lower pins of J3 while the + * upper half of port B is connected to the upper pins of J3. + * + * Following pins are shared with on-board functionality: + * - J3_PIN0 Light sensor output (can be disconnected via scratch pad) + * - J3_PIN1 NTC sensor output (can be disconnected via scratch pad) + * - J3_PIN2 Filter output (can be disconnected via scratch pad) + * - J3_PIN3 Display reset input (can't be used when display is in use) + * - J3_PIN4 JTAG TMS (pin can't be used while JTAG device connected) + * - J3_PIN5 JTAG TDI (pin can't be used while JTAG device connected) + * - J3_PIN6 JTAG TCK (pin can't be used while JTAG device connected) + * - J3_PIN7 JTAG TDO & PID DATA (pin can't be used while JTAG/PDI device is + * connected) + */ +//@{ +#define J3_PIN0 IOPORT_CREATE_PIN(PORTA, 0) +#define J3_PIN1 IOPORT_CREATE_PIN(PORTA, 1) +#define J3_PIN2 IOPORT_CREATE_PIN(PORTA, 2) +#define J3_PIN3 IOPORT_CREATE_PIN(PORTA, 3) +#define J3_PIN4 IOPORT_CREATE_PIN(PORTB, 4) +#define J3_PIN5 IOPORT_CREATE_PIN(PORTB, 5) +#define J3_PIN6 IOPORT_CREATE_PIN(PORTB, 6) +#define J3_PIN7 IOPORT_CREATE_PIN(PORTB, 7) +//@} + +/** + * \name Pin connections on header J4 + * + * The lower half of port E is connected to the lower pins of J4 and the lower + * half of port D is connected to the upper pins of J4. + */ +//@{ +#define J4_PIN0 IOPORT_CREATE_PIN(PORTE, 0) +#define J4_PIN1 IOPORT_CREATE_PIN(PORTE, 1) +#define J4_PIN2 IOPORT_CREATE_PIN(PORTE, 2) +#define J4_PIN3 IOPORT_CREATE_PIN(PORTE, 3) +#define J4_PIN4 IOPORT_CREATE_PIN(PORTD, 0) +#define J4_PIN5 IOPORT_CREATE_PIN(PORTD, 3) +#define J4_PIN6 IOPORT_CREATE_PIN(PORTD, 2) +#define J4_PIN7 IOPORT_CREATE_PIN(PORTD, 1) +//@} + +/** + * @} + */ + +/** + * \defgroup xmega_a3bu_xplained_config_group Configuration options + * @{ + */ + +#if defined(__DOXYGEN__) + +/** + * \name Initialization + * \note Define these symbols in \ref conf_board.h to enable the corresponding + * features. + */ +//@{ + +/** + * \def CONF_BOARD_C12832A1Z + * \brief Initialize SPI and control pins for C12832A1Z LCD controller + */ +# if !defined(CONF_BOARD_C12832A1Z) +# define CONF_BOARD_C12832A1Z +# endif + +/** + * \def CONF_BOARD_AT45DBX + * \brief Initialize SPI pins for AT45DBX DataFlash + */ +# if !defined(CONF_BOARD_AT45DBX) +# define CONF_BOARD_AT45DBX +# endif + +/** + * \def CONF_BOARD_ENABLE_AC_PINS + * \brief Initialize IO pins for Analog Comparator + * + * \note This initializes pins PA0, PA2 and PB1 as inputs. + */ +# if !defined(CONF_BOARD_ENABLE_AC_PINS) +# define CONF_BOARD_ENABLE_AC_PINS +# endif + +/** + * \def CONF_BOARD_ENABLE_USARTC0 + * \brief Initialize IO pins for USART 0 on port C + */ +# if !defined(CONF_BOARD_ENABLE_USARTC0) +# define CONF_BOARD_ENABLE_USARTC0 +# endif + +/** + * \def CONF_BOARD_ENABLE_USARTD0 + * \brief Initialize IO pins for USART 0 on port D + */ +# if !defined(CONF_BOARD_ENABLE_USARTD0) +# define CONF_BOARD_ENABLE_USARTD0 +# endif + +/** + * \def CONF_BOARD_ENABLE_USARTE0 + * \brief Initialize IO pins for USART 0 on port E + */ +# if !defined(CONF_BOARD_ENABLE_USARTE0) +# define CONF_BOARD_ENABLE_USARTE0 +# endif + +//@} + +#endif // __DOXYGEN__ + +/** + * @} + */ + +/** + * @} + */ + +#endif /* _XMEGA_A3BU_XPLAINED_H_ */ diff --git a/AVR Code/USB_BULK_TEST/src/ASF/xmega/drivers/cpu/ccp.h b/AVR Code/USB_BULK_TEST/src/ASF/xmega/drivers/cpu/ccp.h new file mode 100644 index 00000000..1e929a4d --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/xmega/drivers/cpu/ccp.h @@ -0,0 +1,123 @@ +/** + * \file + * + * \brief Configuration Change Protection write functions + * + * Copyright (c) 2010-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ +#ifndef CPU_CCP_H +#define CPU_CCP_H +#include + +/** + * \defgroup ccp_group Configuration Change Protection + * + * See \ref xmega_ccp_quickstart. + * + * Function for writing to protected IO registers. + * @{ + */ + +#if defined(__DOXYGEN__) +//! \name IAR Memory Model defines. +//@{ + +/** + * \def CONFIG_MEMORY_MODEL_TINY + * \brief Configuration symbol to enable 8 bit pointers. + * + */ +# define CONFIG_MEMORY_MODEL_TINY + +/** + * \def CONFIG_MEMORY_MODEL_SMALL + * \brief Configuration symbol to enable 16 bit pointers. + * \note If no memory model is defined, SMALL is default. + * + */ +# define CONFIG_MEMORY_MODEL_SMALL + + +/** + * \def CONFIG_MEMORY_MODEL_LARGE + * \brief Configuration symbol to enable 24 bit pointers. + * + */ +# define CONFIG_MEMORY_MODEL_LARGE + +//@} +#endif + + +/** + * \brief Write to a CCP-protected 8-bit I/O register + * + * \param addr Address of the I/O register + * \param value Value to be written + * + * \note Using IAR Embedded workbench, the choice of memory model has an impact + * on calling convention. The memory model is not visible to the + * preprocessor, so it must be defined in the Assembler preprocessor directives. + */ +extern void ccp_write_io(void *addr, uint8_t value); + +/** @} */ + +/** + * \page xmega_ccp_quickstart Quick start guide for CCP driver + * + * This is the quick start guide for the \ref ccp_group + * "Configuration Change Protection (CCP) driver", with step-by-step + * instructions on how to use the driver. + * + * The use case contains a code fragment, and this can be copied into, e.g., + * the main application function. + * + * \section ccp_basic_use_case Basic use case + * In this use case, the CCP is used to write to the protected XMEGA Clock + * Control register. + * + * \subsection ccp_basic_use_case_setup_flow Workflow + * -# call CCP write io to change system clock selection: + * - \code ccp_write_io((uint8_t *)&CLK.CTRL, CLK_SCLKSEL_RC32M_gc); \endcode + */ + +#endif /* CPU_CCP_H */ diff --git a/AVR Code/USB_BULK_TEST/src/ASF/xmega/drivers/cpu/ccp.s b/AVR Code/USB_BULK_TEST/src/ASF/xmega/drivers/cpu/ccp.s new file mode 100644 index 00000000..91f8fb02 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/xmega/drivers/cpu/ccp.s @@ -0,0 +1,100 @@ +/** + * \file + * + * \brief Configuration Change Protection + * + * Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +#include + +//! Value to write to CCP for access to protected IO registers. +#define CCP_IOREG 0xd8 + + /* + * GNU and IAR use different calling conventions. Since this is + * a very small and simple function to begin with, it's easier + * to implement it twice than to deal with the differences + * within a single implementation. + * + * Interrupts are disabled by hardware during the timed + * sequence, so there's no need to save/restore interrupt state. + */ + + PUBLIC_FUNCTION(ccp_write_io) + +#if defined(__GNUC__) + + out RAMPZ, r1 // Reset bits 23:16 of Z + movw r30, r24 // Load addr into Z + ldi r18, CCP_IOREG // Load magic CCP value + out CCP, r18 // Start CCP handshake + st Z, r22 // Write value to I/O register + ret // Return to caller + +#elif defined(__IAR_SYSTEMS_ASM__) + +# if !defined(CONFIG_MEMORY_MODEL_TINY) && !defined(CONFIG_MEMORY_MODEL_SMALL) \ + && !defined(CONFIG_MEMORY_MODEL_LARGE) +# define CONFIG_MEMORY_MODEL_SMALL +# endif + ldi r20, 0 + out RAMPZ, r20 // Reset bits 23:16 of Z +# if defined(CONFIG_MEMORY_MODEL_TINY) + mov r31, r20 // Reset bits 8:15 of Z + mov r30, r16 // Load addr into Z +# else + movw r30, r16 // Load addr into Z +# endif + ldi r21, CCP_IOREG // Load magic CCP value + out CCP, r21 // Start CCP handshake +# if defined(CONFIG_MEMORY_MODEL_TINY) + st Z, r17 // Write value to I/O register +# elif defined(CONFIG_MEMORY_MODEL_SMALL) + st Z, r18 // Write value to I/O register +# elif defined(CONFIG_MEMORY_MODEL_LARGE) + st Z, r19 // Write value to I/O register +# else +# error Unknown memory model in use, no idea how registers should be accessed +# endif + ret +#else +# error Unknown assembler +#endif + + END_FUNC(ccp_write_io) + END_FILE() diff --git a/AVR Code/USB_BULK_TEST/src/ASF/xmega/drivers/cpu/xmega_reset_cause.h b/AVR Code/USB_BULK_TEST/src/ASF/xmega/drivers/cpu/xmega_reset_cause.h new file mode 100644 index 00000000..ff6840a8 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/xmega/drivers/cpu/xmega_reset_cause.h @@ -0,0 +1,108 @@ +/** + * \file + * + * \brief Chip-specific reset cause functions + * + * Copyright (c) 2010-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ +#ifndef XMEGA_DRIVERS_CPU_RESET_CAUSE_H +#define XMEGA_DRIVERS_CPU_RESET_CAUSE_H + +#include "compiler.h" +#include "ccp.h" + +/** + * \ingroup reset_cause_group + * \defgroup xmega_reset_cause_group XMEGA reset cause + * + * See \ref reset_cause_quickstart + * + * @{ + */ + +/** + * \brief Chip-specific reset cause type capable of holding all chip reset + * causes. Typically reflects the size of the reset cause register. + */ +typedef uint8_t reset_cause_t; + +//! \internal \name Chip-specific reset causes +//@{ +//! \internal External reset cause +#define CHIP_RESET_CAUSE_EXTRST RST_EXTRF_bm +//! \internal brown-out detected reset cause, same as for CPU +#define CHIP_RESET_CAUSE_BOD_IO RST_BORF_bm +//! \internal Brown-out detected reset cause, same as for I/O +#define CHIP_RESET_CAUSE_BOD_CPU RST_BORF_bm +//! \internal On-chip debug system reset cause +#define CHIP_RESET_CAUSE_OCD RST_PDIRF_bm +//! \internal Power-on-reset reset cause +#define CHIP_RESET_CAUSE_POR RST_PORF_bm +//! \internal Software reset reset cause +#define CHIP_RESET_CAUSE_SOFT RST_SRF_bm +//! \internal Spike detected reset cause +#define CHIP_RESET_CAUSE_SPIKE RST_SDRF_bm +//! \internal Watchdog timeout reset cause +#define CHIP_RESET_CAUSE_WDT RST_WDRF_bm +//@} + +static inline reset_cause_t reset_cause_get_causes(void) +{ + return (reset_cause_t)RST.STATUS; +} + +static inline void reset_cause_clear_causes(reset_cause_t causes) +{ + RST.STATUS = causes; +} + +static inline void reset_do_soft_reset(void) +{ + ccp_write_io((void *)&RST.CTRL, RST_SWRST_bm); + + while (1) { + /* Intentionally empty. */ + } +} + +//! @} + +#endif /* XMEGA_DRIVERS_CPU_RESET_CAUSE_H */ diff --git a/AVR Code/USB_BULK_TEST/src/ASF/xmega/drivers/nvm/nvm.c b/AVR Code/USB_BULK_TEST/src/ASF/xmega/drivers/nvm/nvm.c new file mode 100644 index 00000000..61455202 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/xmega/drivers/nvm/nvm.c @@ -0,0 +1,710 @@ +/** + * \file + * + * \brief Non Volatile Memory controller driver + * + * Copyright (C) 2010-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ +#include "compiler.h" +#include "ccp.h" +#include "nvm.h" +#include + +/** + * \weakgroup nvm_signature_group + * @{ + */ + +/** + * \brief Read the device serial + * + * This function returns the device serial stored in the device. + * + * \note This function is modifying the NVM.CMD register. + * If the application are using program space access in interrupts + * (__flash pointers in IAR EW or pgm_read_byte in GCC) interrupts + * needs to be disabled when running EEPROM access functions. If not + * the program space reads will be corrupted. + * + * \retval storage Pointer to the structure where to store the device serial + */ +void nvm_read_device_serial(struct nvm_device_serial *storage) +{ + storage->lotnum0 = nvm_read_production_signature_row( + nvm_get_production_signature_row_offset(LOTNUM0)); + storage->lotnum1 = nvm_read_production_signature_row( + nvm_get_production_signature_row_offset(LOTNUM1)); + storage->lotnum2 = nvm_read_production_signature_row( + nvm_get_production_signature_row_offset(LOTNUM2)); + storage->lotnum3 = nvm_read_production_signature_row( + nvm_get_production_signature_row_offset(LOTNUM3)); + storage->lotnum4 = nvm_read_production_signature_row( + nvm_get_production_signature_row_offset(LOTNUM4)); + storage->lotnum5 = nvm_read_production_signature_row( + nvm_get_production_signature_row_offset(LOTNUM5)); + + storage->wafnum = nvm_read_production_signature_row( + nvm_get_production_signature_row_offset(WAFNUM)); + + storage->coordx0 = nvm_read_production_signature_row( + nvm_get_production_signature_row_offset(COORDX0)); + storage->coordx1 = nvm_read_production_signature_row( + nvm_get_production_signature_row_offset(COORDX1)); + storage->coordy0 = nvm_read_production_signature_row( + nvm_get_production_signature_row_offset(COORDY0)); + storage->coordy1 = nvm_read_production_signature_row( + nvm_get_production_signature_row_offset(COORDY1)); +} + +//! @} + +/** + * \weakgroup nvm_eeprom_group + * @{ + */ + +/** + * \brief Read one byte from EEPROM using mapped access. + * + * This function reads one byte from EEPROM using mapped access. + * + * \param addr EEPROM address, between 0 and EEPROM_SIZE + * + * \return Byte value read from EEPROM. + */ +uint8_t nvm_eeprom_read_byte(eeprom_addr_t addr) +{ + uint8_t data; + Assert(addr <= EEPROM_SIZE); + + /* Wait until NVM is ready */ + nvm_wait_until_ready(); + eeprom_enable_mapping(); + data = *(uint8_t*)(addr + MAPPED_EEPROM_START), + eeprom_disable_mapping(); + return data; +} + +/** + * \brief Read buffer within the eeprom + * + * \param address the address to where to read + * \param buf pointer to the data + * \param len the number of bytes to read + */ +void nvm_eeprom_read_buffer(eeprom_addr_t address, void *buf, uint16_t len) +{ + nvm_wait_until_ready(); + eeprom_enable_mapping(); + memcpy( buf,(void*)(address+MAPPED_EEPROM_START), len ); + eeprom_disable_mapping(); +} + + +/** + * \brief Write one byte to EEPROM using IO mapping. + * + * This function writes one byte to EEPROM using IO-mapped access. + * This function will cancel all ongoing EEPROM page buffer loading + * operations, if any. + * + * \param address EEPROM address (max EEPROM_SIZE) + * \param value Byte value to write to EEPROM. + */ +void nvm_eeprom_write_byte(eeprom_addr_t address, uint8_t value) +{ + uint8_t old_cmd; + + Assert(address <= EEPROM_SIZE); + /* Flush buffer to make sure no unintentional data is written and load + * the "Page Load" command into the command register. + */ + old_cmd = NVM.CMD; + nvm_eeprom_flush_buffer(); + // Wait until NVM is ready + nvm_wait_until_ready(); + nvm_eeprom_load_byte_to_buffer(address, value); + + // Set address to write to + NVM.ADDR2 = 0x00; + NVM.ADDR1 = (address >> 8) & 0xFF; + NVM.ADDR0 = address & 0xFF; + + /* Issue EEPROM Atomic Write (Erase&Write) command. Load command, write + * the protection signature and execute command. + */ + NVM.CMD = NVM_CMD_ERASE_WRITE_EEPROM_PAGE_gc; + nvm_exec(); + NVM.CMD = old_cmd; +} + +/** + * \brief Write buffer within the eeprom + * + * \param address the address to where to write + * \param buf pointer to the data + * \param len the number of bytes to write + */ +void nvm_eeprom_erase_and_write_buffer(eeprom_addr_t address, const void *buf, uint16_t len) +{ + while (len) { + if (((address%EEPROM_PAGE_SIZE)==0) && (len>=EEPROM_PAGE_SIZE)) { + // A full page can be written + nvm_eeprom_load_page_to_buffer((uint8_t*)buf); + nvm_eeprom_atomic_write_page(address/EEPROM_PAGE_SIZE); + address += EEPROM_PAGE_SIZE; + buf = (uint8_t*)buf + EEPROM_PAGE_SIZE; + len -= EEPROM_PAGE_SIZE; + } else { + nvm_eeprom_write_byte(address++, *(uint8_t*)buf); + buf = (uint8_t*)buf + 1; + len--; + } + } +} + + +/** + * \brief Flush temporary EEPROM page buffer. + * + * This function flushes the EEPROM page buffers. This function will cancel + * any ongoing EEPROM page buffer loading operations, if any. + * This function also works for memory mapped EEPROM access. + * + * \note An EEPROM write operations will automatically flush the buffer for you. + * \note The function does not preserve the value of the NVM.CMD register + */ +void nvm_eeprom_flush_buffer(void) +{ + // Wait until NVM is ready + nvm_wait_until_ready(); + + // Flush EEPROM page buffer if necessary + if ((NVM.STATUS & NVM_EELOAD_bm) != 0) { + NVM.CMD = NVM_CMD_ERASE_EEPROM_BUFFER_gc; + nvm_exec(); + } +} + +/** + * \brief Load single byte into temporary page buffer. + * + * This function loads one byte into the temporary EEPROM page buffers. + * If memory mapped EEPROM is enabled, this function will not work. + * Make sure that the buffer is flushed before starting to load bytes. + * Also, if multiple bytes are loaded into the same location, they will + * be ANDed together, thus 0x55 and 0xAA will result in 0x00 in the buffer. + * + * \note Only one page buffer exist, thus only one page can be loaded with + * data and programmed into one page. If data needs to be written to + * different pages, the loading and writing needs to be repeated. + * + * \param byte_addr EEPROM Byte address, between 0 and EEPROM_PAGE_SIZE. + * \param value Byte value to write to buffer. + */ +void nvm_eeprom_load_byte_to_buffer(uint8_t byte_addr, uint8_t value) +{ + // Wait until NVM is ready + nvm_wait_until_ready(); + + eeprom_enable_mapping(); + *(uint8_t*)(byte_addr + MAPPED_EEPROM_START) = value; + eeprom_disable_mapping(); +} + + +/** + * \brief Load entire page into temporary EEPROM page buffer. + * + * This function loads an entire EEPROM page from an SRAM buffer to + * the EEPROM page buffers. If memory mapped EEPROM is enabled, this + * function will not work. Make sure that the buffer is flushed before + * starting to load bytes. + * + * \note Only the lower part of the address is used to address the buffer. + * Therefore, no address parameter is needed. In the end, the data + * is written to the EEPROM page given by the address parameter to the + * EEPROM write page operation. + * + * \param values Pointer to SRAM buffer containing an entire page. + */ +void nvm_eeprom_load_page_to_buffer(const uint8_t *values) +{ + // Wait until NVM is ready + nvm_wait_until_ready(); + + // Load multiple bytes into page buffer + uint8_t i; + for (i = 0; i < EEPROM_PAGE_SIZE; ++i) { + nvm_eeprom_load_byte_to_buffer(i, *values); + ++values; + } +} + +/** + * \brief Erase and write bytes from page buffer into EEPROM. + * + * This function writes the contents of an already loaded EEPROM page + * buffer into EEPROM memory. + * + * As this is an atomic write, the page in EEPROM will be erased + * automatically before writing. Note that only the page buffer locations + * that have been loaded will be used when writing to EEPROM. Page buffer + * locations that have not been loaded will be left untouched in EEPROM. + * + * \param page_addr EEPROM Page address, between 0 and EEPROM_SIZE/EEPROM_PAGE_SIZE + */ +void nvm_eeprom_atomic_write_page(uint8_t page_addr) +{ + // Wait until NVM is ready + nvm_wait_until_ready(); + + // Calculate page address + uint16_t address = (uint16_t)(page_addr * EEPROM_PAGE_SIZE); + + Assert(address <= EEPROM_SIZE); + + // Set address + NVM.ADDR2 = 0x00; + NVM.ADDR1 = (address >> 8) & 0xFF; + NVM.ADDR0 = address & 0xFF; + + // Issue EEPROM Atomic Write (Erase&Write) command + nvm_issue_command(NVM_CMD_ERASE_WRITE_EEPROM_PAGE_gc); +} + +/** + * \brief Write (without erasing) EEPROM page. + * + * This function writes the contents of an already loaded EEPROM page + * buffer into EEPROM memory. + * + * As this is a split write, the page in EEPROM will _not_ be erased + * before writing. + * + * \param page_addr EEPROM Page address, between 0 and EEPROM_SIZE/EEPROM_PAGE_SIZE + */ +void nvm_eeprom_split_write_page(uint8_t page_addr) +{ + // Wait until NVM is ready + nvm_wait_until_ready(); + + // Calculate page address + uint16_t address = (uint16_t)(page_addr * EEPROM_PAGE_SIZE); + + Assert(address <= EEPROM_SIZE); + + // Set address + NVM.ADDR2 = 0x00; + NVM.ADDR1 = (address >> 8) & 0xFF; + NVM.ADDR0 = address & 0xFF; + + // Issue EEPROM Split Write command + nvm_issue_command(NVM_CMD_WRITE_EEPROM_PAGE_gc); +} + +/** + * \brief Fill temporary EEPROM page buffer with value. + * + * This fills the the EEPROM page buffers with a given value. + * If memory mapped EEPROM is enabled, this function will not work. + * + * \note Only the lower part of the address is used to address the buffer. + * Therefore, no address parameter is needed. In the end, the data + * is written to the EEPROM page given by the address parameter to the + * EEPROM write page operation. + * + * \param value Value to copy to the page buffer. + */ +void nvm_eeprom_fill_buffer_with_value(uint8_t value) +{ + nvm_eeprom_flush_buffer(); + // Wait until NVM is ready + nvm_wait_until_ready(); + // Load multiple bytes into page buffer + uint8_t i; + for (i = 0; i < EEPROM_PAGE_SIZE; ++i) { + nvm_eeprom_load_byte_to_buffer(i, value); + } +} + +/** + * \brief Erase bytes from EEPROM page. + * + * This function erases bytes from one EEPROM page, so that every location + * written to in the page buffer reads 0xFF. + * + * \param page_addr EEPROM Page address, between 0 and EEPROM_SIZE/EEPROM_PAGE_SIZE + */ +void nvm_eeprom_erase_bytes_in_page(uint8_t page_addr) +{ + // Wait until NVM is ready + nvm_wait_until_ready(); + + // Calculate page address + uint16_t address = (uint16_t)(page_addr * EEPROM_PAGE_SIZE); + + Assert(address <= EEPROM_SIZE); + + // Set address + NVM.ADDR2 = 0x00; + NVM.ADDR1 = (address >> 8) & 0xFF; + NVM.ADDR0 = address & 0xFF; + + // Issue EEPROM Erase command + nvm_issue_command(NVM_CMD_ERASE_EEPROM_PAGE_gc); +} + +/** + * \brief Erase EEPROM page. + * + * This function erases one EEPROM page, so that every location reads 0xFF. + * + * \param page_addr EEPROM Page address, between 0 and EEPROM_SIZE/EEPROM_PAGE_SIZE + */ +void nvm_eeprom_erase_page(uint8_t page_addr) +{ + // Mark all addresses to be deleted + nvm_eeprom_fill_buffer_with_value(0xff); + // Erase bytes + nvm_eeprom_erase_bytes_in_page(page_addr); +} + + +/** + * \brief Erase bytes from all EEPROM pages. + * + * This function erases bytes from all EEPROM pages, so that every location + * written to in the page buffer reads 0xFF. + */ +void nvm_eeprom_erase_bytes_in_all_pages(void) +{ + // Wait until NVM is ready + nvm_wait_until_ready(); + + // Issue EEPROM Erase All command + nvm_issue_command(NVM_CMD_ERASE_EEPROM_gc); +} + +/** + * \brief Erase entire EEPROM memory. + * + * This function erases the entire EEPROM memory block to 0xFF. + */ +void nvm_eeprom_erase_all(void) +{ + // Mark all addresses to be deleted + nvm_eeprom_fill_buffer_with_value(0xff); + // Erase all pages + nvm_eeprom_erase_bytes_in_all_pages(); +} + +//! @} + + +//! @} + + +/** + * \weakgroup nvm_flash_group + * @{ + */ + +/** + * \brief Issue flash range CRC command + * + * This function sets the FLASH range CRC command in the NVM.CMD register. + * It then loads the start and end byte address of the part of FLASH to + * generate a CRC-32 for into the ADDR and DATA registers and finally performs + * the execute command. + * + * \note Should only be called from the CRC module. The function saves and + * restores the NVM.CMD register, but if this + * function is called from an interrupt, interrupts must be disabled + * before this function is called. + * + * \param start_addr end byte address + * \param end_addr start byte address + */ +void nvm_issue_flash_range_crc(flash_addr_t start_addr, flash_addr_t end_addr) +{ + uint8_t old_cmd; + // Save current nvm command + old_cmd = NVM.CMD; + + // Load the NVM CMD register with the Flash Range CRC command + NVM.CMD = NVM_CMD_FLASH_RANGE_CRC_gc; + + // Load the start byte address in the NVM Address Register + NVM.ADDR0 = start_addr & 0xFF; + NVM.ADDR1 = (start_addr >> 8) & 0xFF; +#if (FLASH_SIZE >= 0x10000UL) + NVM.ADDR2 = (start_addr >> 16) & 0xFF; +#endif + + // Load the end byte address in NVM Data Register + NVM.DATA0 = end_addr & 0xFF; + NVM.DATA1 = (end_addr >> 8) & 0xFF; +#if (FLASH_SIZE >= 0x10000UL) + NVM.DATA2 = (end_addr >> 16) & 0xFF; +#endif + + // Execute command + ccp_write_io((uint8_t *)&NVM.CTRLA, NVM_CMDEX_bm); + + // Restore command register + NVM.CMD = old_cmd; +} + +/** + * \brief Read buffer within the application section + * + * \param address the address to where to read + * \param buf pointer to the data + * \param len the number of bytes to read + */ +void nvm_flash_read_buffer(flash_addr_t address, void *buf, uint16_t len) +{ +#if (FLASH_SIZE>0x10000) + uint32_t opt_address = address; +#else + uint16_t opt_address = (uint16_t)address; +#endif + nvm_wait_until_ready(); + while ( len ) { + *(uint8_t*)buf = nvm_flash_read_byte(opt_address); + buf=(uint8_t*)buf+1; + opt_address++; + len--; + } +} + +/** + * \brief Read buffer within the user section + * + * \param address the address to where to read + * \param buf pointer to the data + * \param len the number of bytes to read + */ +void nvm_user_sig_read_buffer(flash_addr_t address, void *buf, uint16_t len) +{ + uint16_t opt_address = (uint16_t)address&(FLASH_PAGE_SIZE-1); + while ( len ) { + *(uint8_t*)buf = nvm_read_user_signature_row(opt_address); + buf=(uint8_t*)buf+1; + opt_address++; + len--; + } +} + +/** + * \brief Write specific parts of user flash section + * + * \param address the address to where to write + * \param buf pointer to the data + * \param len the number of bytes to write + * \param b_blank_check if True then the page flash is checked before write + * to run or not the erase page command. + * + * Set b_blank_check to false if all application flash is erased before. + */ +void nvm_user_sig_write_buffer(flash_addr_t address, const void *buf, + uint16_t len, bool b_blank_check) +{ + uint16_t w_value; + uint16_t page_pos; + uint16_t opt_address = (uint16_t)address; + bool b_flag_erase = false; + + while ( len ) { + for (page_pos=0; page_pos0x10000) + uint32_t page_address; + uint32_t opt_address = address; +#else + uint16_t page_address; + uint16_t opt_address = (uint16_t)address; +#endif + + // Compute the start of the page to be modified + page_address = opt_address-(opt_address%FLASH_PAGE_SIZE); + + // For each page + while ( len ) { + b_flag_erase = false; + + nvm_wait_until_ready(); + for (page_pos=0; page_posAtmel Support + */ +#ifndef NVM_H +#define NVM_H + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \defgroup nvm_group NVM driver + * + * See \ref xmega_nvm_quickstart + * + * \brief Low-level driver implementation for the AVR XMEGA Non Volatile + * Memory Controller (NVM). + * + * The XMEGA NVM controller interfaces the internal non-volatile memories + * in the XMEGA devices. Program memory, EEPROM and signature row is can be + * interfaced by the module. See the documentation of each sub-module for + * more information. + * + * \note If using GCC and the flash sub-module, remember to configure + * the boot section in the make file. More information in the sub-module + * documentation. + * + * \section xmega_nvm_quickstart_section Quick Start Guide + * See \ref xmega_nvm_quickstart + */ + +/** + * \defgroup nvm_generic_group NVM driver generic module handling + * \ingroup nvm_group + * \brief Support functions for the NVM driver. + * + * These functions are helper functions for the functions of the + * \ref nvm_group "NVM driver". + * + * @{ + */ + +/** + * \brief Wait for any NVM access to finish. + * + * This function is blocking and waits for any NVM access to finish. + * Use this function before any NVM accesses, if you are not certain that + * any previous operations are finished yet. + */ +static inline void nvm_wait_until_ready( void ) +{ + do { + // Block execution while waiting for the NVM to be ready + } while ((NVM.STATUS & NVM_NVMBUSY_bm) == NVM_NVMBUSY_bm); +} + +/** + * \brief Non-Volatile Memory Execute Command + * + * This function sets the CCP register before setting the CMDEX bit in the + * NVM.CTRLA register. + * + * \note The correct NVM command must be set in the NVM.CMD register before + * calling this function. + */ +static inline void nvm_exec(void) +{ + ccp_write_io((uint8_t *)&NVM.CTRLA, NVM_CMDEX_bm); +} + +/** + * \brief Non-Volatile Memory Execute Specific Command + * + * This function sets a command in the NVM.CMD register, then performs an + * execute command by writing the CMDEX bit to the NVM.CTRLA register. + * + * \note The function saves and restores the NVM.CMD register, but if this + * function is called from an interrupt, interrupts must be disabled + * before this function is called. + * + * \param nvm_command NVM Command to execute. + */ +static inline void nvm_issue_command(NVM_CMD_t nvm_command) +{ + uint8_t old_cmd; + + old_cmd = NVM.CMD; + NVM.CMD = nvm_command; + ccp_write_io((uint8_t *)&NVM.CTRLA, NVM_CMDEX_bm); + NVM.CMD = old_cmd; +} + +/** + * \brief Read one byte using the LDI instruction + * \internal + * + * This function sets the specified NVM_CMD, reads one byte using at the + * specified byte address with the LPM instruction. NVM_CMD is restored after + * use. + * + * \note Interrupts should be disabled before running this function + * if program memory/NVM controller is accessed from ISRs. + * + * \param nvm_cmd NVM command to load before running LPM + * \param address Byte offset into the signature row + */ +uint8_t nvm_read_byte(uint8_t nvm_cmd, uint16_t address); + + +/** + * \brief Perform SPM write + * \internal + * + * This function sets the specified NVM_CMD, sets CCP and then runs the SPM + * instruction to write to flash. + * + * \note Interrupts should be disabled before running this function + * if program memory/NVM controller is accessed from ISRs. + * + * \param addr Address to perform the SPM on. + * \param nvm_cmd NVM command to use in the NVM_CMD register + */ +void nvm_common_spm(uint32_t addr, uint8_t nvm_cmd); + +//! @} + +/** + * \defgroup nvm_signature_group NVM driver signature handling + * \ingroup nvm_group + * \brief Handling of signature rows + * + * Functions for handling signature rows. The following is supported: + * - Reading values from production and user signature row + * - Reading device id + * - Reading device revision + * - Reading device serial + * + * \note Some of these functions are modifying the NVM.CMD register. + * If the application are using program space access in interrupts + * (__flash pointers in IAR EW or pgm_read_byte in GCC) interrupts + * needs to be disabled when running EEPROM access functions. If not, + * the program space reads will be corrupted. See documentation for + * each individual function. + * \note Do not use the functions of this module in an interrupt service + * routine (ISR), since the functions can take several milliseconds to + * complete and hence block the interrupt for several milliseconds. + * In addition the functions of this module are modifying the page buffer + * which will corrupt any ongoing EEPROM handing used outside an ISR. + * @{ + */ + +/** + * \brief Structure containing the device ID + * + * This structure can be used to store the device ID of a device. + */ +struct nvm_device_id { + union { + struct { + uint8_t devid0; + uint8_t devid1; + uint8_t devid2; + }; + uint8_t byte[3]; + }; +}; + +/** + * \brief Structure containing the device serial + * + * This structure can be used to store the serial number of a device. + */ +struct nvm_device_serial { + union { + struct { + uint8_t lotnum0; + uint8_t lotnum1; + uint8_t lotnum2; + uint8_t lotnum3; + uint8_t lotnum4; + uint8_t lotnum5; + uint8_t wafnum; + uint8_t coordx0; + uint8_t coordx1; + uint8_t coordy0; + uint8_t coordy1; + }; + uint8_t byte[11]; + }; +}; + +/** + * \brief Get offset of calibration bytes in the production signature row + * + * \param regname Name of register within the production signature row + * \retval Offset of register into the production signature row + */ +#if defined(__GNUC__) +# define nvm_get_production_signature_row_offset(regname) \ + offsetof(NVM_PROD_SIGNATURES_t, regname) +#elif defined(__ICCAVR__) +# define nvm_get_production_signature_row_offset(regname) (regname##_offset) +#else +# error Unknown compiler +#endif + + +/** + * \brief Read one byte from the production signature row + * + * This function reads one byte from the production signature row of the device + * at the given address. + * + * \note This function is modifying the NVM.CMD register. + * If the application are using program space access in interrupts + * (__flash pointers in IAR EW or pgm_read_byte in GCC) interrupts + * needs to be disabled when running EEPROM access functions. If not + * the program space reads will be corrupted. + * + * \param address Byte offset into the signature row + */ +static inline uint8_t nvm_read_production_signature_row(uint8_t address) +{ + return nvm_read_byte(NVM_CMD_READ_CALIB_ROW_gc, address); +} + +/** + * \brief Read one byte from the user signature row + * + * This function reads one byte from the user signature row of the device + * at the given address. + * + * \note This function is modifying the NVM.CMD register. + * If the application are using program space access in interrupts + * (__flash pointers in IAR EW or pgm_read_byte in GCC) interrupts + * needs to be disabled when running EEPROM access functions. If not + * the program space reads will be corrupted. + * + * \param address Byte offset into the signature row + */ +static inline uint8_t nvm_read_user_signature_row(uint16_t address) +{ + return nvm_read_byte(NVM_CMD_READ_USER_SIG_ROW_gc, address); +} + +/** + * \brief Read the device id + * + * This function returns the device ID stored in the device. + * + * \retval storage Pointer to the structure where to store the device id + */ +static inline void nvm_read_device_id(struct nvm_device_id *storage) +{ + storage->devid0 = MCU.DEVID0; + storage->devid1 = MCU.DEVID1; + storage->devid2 = MCU.DEVID2; +} + +/** + * \brief Read the device revision + * + * This function returns the device revision stored in the device. + * + * \retval unsigned 8 bit value with the current device revision. + */ +static inline uint8_t nvm_read_device_rev(void) +{ + return MCU.REVID; +} + +void nvm_read_device_serial(struct nvm_device_serial *storage); + +//! @} + + +/** + * \defgroup nvm_eeprom_group NVM driver EEPROM handling + * \ingroup nvm_group + * \brief Functions for handling internal EEPROM memory. + * + * The internal EEPROM can be used to store data that will persist after + * power is removed. This can typically be used to store calibration data, + * application state, encryption keys or other data that need to be preserved + * when power is removed. + * + * The functions in this module uses IO register access to manipulate the + * EEPROM. + * + * \note The functions in this module are modifying the NVM.CMD register. + * If the application are using program space access in interrupts + * (__flash pointers in IAR EW or pgm_read_byte in GCC) interrupts + * needs to be disabled when running EEPROM access functions. If not + * the program space reads will be corrupted. + * @{ + */ + +#ifndef EEPROM_PAGE_SIZE +# if XMEGA_A || XMEGA_AU || XMEGA_B || XMEGA_C || XMEGA_D || XMEGA_E +# define EEPROM_PAGE_SIZE 32 +# else +# error Unknown EEPROM page size +# endif +#endif + +#ifndef CONFIG_NVM_IGNORE_XMEGA_A3_D3_REVB_ERRATA +# if XMEGA_A3 || XMEGA_D3 +# error This NVM driver does not support rev B of XMEGA A3/D3 devices. \ + Set CONFIG_NVM_IGNORE_XMEGA_A3_D3_REVB_ERRATA to disable this message +# endif +#endif + +/** + * Data type for holding eeprom memory addresses. + */ +typedef uint16_t eeprom_addr_t; + + +/*! \brief Enable EEPROM mapping into data space. + * + * This macro enables mapping of EEPROM into data space. + * EEPROM starts at EEPROM_START in data memory. Read access + * can be done similar to ordinary SRAM access. + * + * \note This disables IO-mapped access to EEPROM, although page erase and + * write operations still needs to be done through IO register. + */ +static inline void eeprom_enable_mapping(void) +{ +#if !XMEGA_E + NVM_CTRLB = NVM_CTRLB | NVM_EEMAPEN_bm; +#endif +} + + +/*! \brief Disable EEPROM mapping into data space. + * + * This macro disables mapping of EEPROM into data space. + * IO mapped access is now enabled. + */ +static inline void eeprom_disable_mapping(void) +{ +#if !XMEGA_E + NVM_CTRLB = NVM_CTRLB & ~NVM_EEMAPEN_bm; +#endif +} + + +uint8_t nvm_eeprom_read_byte(eeprom_addr_t addr); +void nvm_eeprom_write_byte(eeprom_addr_t address, uint8_t value); +void nvm_eeprom_read_buffer(eeprom_addr_t address, void *buf, uint16_t len); +void nvm_eeprom_erase_and_write_buffer(eeprom_addr_t address, const void *buf, uint16_t len); + +void nvm_eeprom_flush_buffer(void); +void nvm_eeprom_load_byte_to_buffer(uint8_t byte_addr, uint8_t value); +void nvm_eeprom_load_page_to_buffer(const uint8_t *values); +void nvm_eeprom_atomic_write_page(uint8_t page_addr); +void nvm_eeprom_split_write_page(uint8_t page_addr); +void nvm_eeprom_fill_buffer_with_value(uint8_t value); +void nvm_eeprom_erase_bytes_in_page(uint8_t page_addr); +void nvm_eeprom_erase_page(uint8_t page_addr); +void nvm_eeprom_erase_bytes_in_all_pages(void); +void nvm_eeprom_erase_all(void); + +//! @} + +/** + * \defgroup nvm_flash_group NVM driver flash handling + * \ingroup nvm_group + * \brief Functions for handling internal flash memory. + * + * The internal flash memory on the XMEGA devices consists of the application + * section, the application table section and the bootloader section. + * All these sections can store program code for the MCU, but if there is + * available space, they can be used for storing other persistent data. + * + * Writing the flash memory can only be done one page at a time. It consists + * of loading the data to the internal page buffer and then running one of + * the write commands. If the page has not been erased before writing, the + * data will not be written correctly. + * + * In order to be able to write to flash memory the programming commands need + * to be run from the boot section. + * - When using IAR this is handled automatically by the linker script. + * - When using GCC this needs to be specified manually in the make files. For + * example the ATxmega128A1 has the boot section at the word address 0x10000 + * the corresponding byte address of 0x20000 needs to be added to the + * config.mk makefile: + * LDFLAGS += -Wl,--section-start=.BOOT=0x20000 + * See the device datasheet for the correct address for other devices. + * + * \note If using GCC and the flash sub-module, remember to configure + * the boot section in the make file. + * + * \note The functions in this module are modifying the NVM.CMD register. + * If the application are using program space access in interrupts + * (__flash pointers in IAR EW or pgm_read_byte in GCC) interrupts + * needs to be disabled when running EEPROM access functions. If not + * the program space reads will be corrupted. + * @{ + */ + +/** + * \brief Size of a flash page in bytes + * + * The page size in bytes taken from the toolchain header files. + * + * \note Page size is currently missing from the IAR header files, so it needs + * to be defined in the driver until it is fixed. + */ +#ifdef __DOXYGEN__ +# define FLASH_SIZE +# define FLASH_PAGE_SIZE +#else + +// 8K devices +# if AVR8_PART_IS_DEFINED(ATxmega8E5) +# define FLASH_SIZE (8*1024L) +# define FLASH_PAGE_SIZE (128) + +// 16K devices +# elif AVR8_PART_IS_DEFINED(ATxmega16A4) | \ + AVR8_PART_IS_DEFINED(ATxmega16A4U) | \ + AVR8_PART_IS_DEFINED(ATxmega16D4) | \ + AVR8_PART_IS_DEFINED(ATxmega16C4) +# define FLASH_SIZE (16*1024L) +# define FLASH_PAGE_SIZE (256) + +# elif AVR8_PART_IS_DEFINED(ATxmega16E5) +# define FLASH_SIZE (16*1024L) +# define FLASH_PAGE_SIZE (128) + +// 32K devices +# elif AVR8_PART_IS_DEFINED(ATxmega32A4) | \ + AVR8_PART_IS_DEFINED(ATxmega32A4U) | \ + AVR8_PART_IS_DEFINED(ATxmega32D4) | \ + AVR8_PART_IS_DEFINED(ATxmega32C4) +# define FLASH_SIZE (32*1024L) +# define FLASH_PAGE_SIZE (256) + +# elif AVR8_PART_IS_DEFINED(ATxmega32E5) +# define FLASH_SIZE (32*1024L) +# define FLASH_PAGE_SIZE (128) + +// 64K devices +# elif AVR8_PART_IS_DEFINED(ATxmega64A1) | \ + AVR8_PART_IS_DEFINED(ATxmega64A1U) | \ + AVR8_PART_IS_DEFINED(ATxmega64A3) | \ + AVR8_PART_IS_DEFINED(ATxmega64A3U) | \ + AVR8_PART_IS_DEFINED(ATxmega64A4U) | \ + AVR8_PART_IS_DEFINED(ATxmega64B1) | \ + AVR8_PART_IS_DEFINED(ATxmega64B3) | \ + AVR8_PART_IS_DEFINED(ATxmega64C3) | \ + AVR8_PART_IS_DEFINED(ATxmega64D3) | \ + AVR8_PART_IS_DEFINED(ATxmega64D4) +# define FLASH_SIZE (64*1024L) +# define FLASH_PAGE_SIZE (256) + +// 128K devices +# elif AVR8_PART_IS_DEFINED(ATxmega128A1) | \ + AVR8_PART_IS_DEFINED(ATxmega128A1U) | \ + AVR8_PART_IS_DEFINED(ATxmega128A3) | \ + AVR8_PART_IS_DEFINED(ATxmega128A3U) | \ + AVR8_PART_IS_DEFINED(ATxmega128C3) | \ + AVR8_PART_IS_DEFINED(ATxmega128D3) | \ + AVR8_PART_IS_DEFINED(ATxmega128D4) +# define FLASH_SIZE (128*1024L) +# define FLASH_PAGE_SIZE (512) + +# elif AVR8_PART_IS_DEFINED(ATxmega128A4U) | \ + AVR8_PART_IS_DEFINED(ATxmega128B1) | \ + AVR8_PART_IS_DEFINED(ATxmega128B3) +# define FLASH_SIZE (128*1024L) +# define FLASH_PAGE_SIZE (256) + +// 192K devices +# elif AVR8_PART_IS_DEFINED(ATxmega192A3U) | \ + AVR8_PART_IS_DEFINED(ATxmega192C3) | \ + AVR8_PART_IS_DEFINED(ATxmega192D3) +# define FLASH_SIZE (192*1024L) +# define FLASH_PAGE_SIZE (512) + +// 256K devices +# elif AVR8_PART_IS_DEFINED(ATxmega256A3) | \ + AVR8_PART_IS_DEFINED(ATxmega256A3U) | \ + AVR8_PART_IS_DEFINED(ATxmega256A3B) | \ + AVR8_PART_IS_DEFINED(ATxmega256A3BU) | \ + AVR8_PART_IS_DEFINED(ATxmega256C3) | \ + AVR8_PART_IS_DEFINED(ATxmega256D3) +# define FLASH_SIZE (256*1024L) +# define FLASH_PAGE_SIZE (512) + +// 384K devices +# elif AVR8_PART_IS_DEFINED(ATxmega384C3) +# define FLASH_SIZE (384*1024L) +# define FLASH_PAGE_SIZE (512) +# elif AVR8_PART_IS_DEFINED(ATxmega384D3) +# define FLASH_SIZE (384*1024L) +# define FLASH_PAGE_SIZE (512) +# else +# error Flash page size needs to be defined. +# endif +#endif + +/** + * Data type for holding flash memory addresses. + * + */ +#if (FLASH_SIZE >= 0x10000UL) // Note: Xmega with 64KB of flash have 4KB boot flash +typedef uint32_t flash_addr_t; +#else +typedef uint16_t flash_addr_t; +#endif + +/** + * Flash pointer type to use for accessing flash memory with IAR + */ +#if (FLASH_SIZE >= 0x10000UL) // Note: Xmega with 64KB of flash have 4KB boot flash +# define IAR_FLASH_PTR __farflash +#else +# define IAR_FLASH_PTR __flash +#endif + +/** + * \brief Load byte from flash memory + * + * Load one word of flash using byte addressing. IAR has __flash pointers + * and GCC have pgm_read_byte_xx functions which load data from flash memory. + * This function used for compatibility between the compilers. + * + * \param addr Byte address to load + * \return Byte from program memory + */ +static inline uint8_t nvm_flash_read_byte(flash_addr_t addr) +{ +#if defined(__GNUC__) + return pgm_read_byte_far(addr); +#elif defined(__ICCAVR__) + uint8_t IAR_FLASH_PTR *flashptr = (uint8_t IAR_FLASH_PTR *)addr; + return *flashptr; +#else +# error Unknown compiler +#endif +} + +/** + * \brief Load word from flash memory + * + * Load one word of flash using byte addressing. IAR has __flash pointers + * and GCC have pgm_read_byte_xx functions which load data from flash memory. + * This function used for compatibility between the compilers. + * + * \param addr Byte address to load (last bit is ignored) + * \return Word from program memory + */ +static inline uint16_t nvm_flash_read_word(flash_addr_t addr) +{ +#if defined(__GNUC__) + return pgm_read_word_far(addr); +#elif defined(__ICCAVR__) + uint16_t IAR_FLASH_PTR *flashptr = (uint16_t IAR_FLASH_PTR *)addr; + return *flashptr; +#endif +} + + +/** + * \brief Flush flash page buffer + * + * Clear the NVM controller page buffer for flash. This needs to be called + * before using \ref nvm_flash_load_word_to_buffer if it has not already been + * cleared. + * + */ +static inline void nvm_flash_flush_buffer(void) +{ + nvm_wait_until_ready(); + nvm_common_spm(0, NVM_CMD_ERASE_FLASH_BUFFER_gc); +} + + +/** + * \brief Load word into flash page buffer + * + * Clear the NVM controller page buffer for flash. This needs to be called + * before using \ref nvm_flash_load_word_to_buffer if it has not already been + * cleared. + * + * \param word_addr Address to store data. The upper bits beyond the page size + * is ignored. \ref FLASH_PAGE_SIZE + * \param data Data word to load into the page buffer + */ +void nvm_flash_load_word_to_buffer(uint32_t word_addr, uint16_t data); + + +/** + * \brief Erase entire application section + * + * Erase all of the application section. + */ +static inline void nvm_flash_erase_app(void) +{ + nvm_wait_until_ready(); + nvm_common_spm(0, NVM_CMD_ERASE_APP_gc); +} + +/** + * \brief Erase a page within the application section + * + * Erase one page within the application section + * + * \param page_addr Byte address to the page to delete + */ +static inline void nvm_flash_erase_app_page(flash_addr_t page_addr) +{ + nvm_wait_until_ready(); + nvm_common_spm(page_addr, NVM_CMD_ERASE_APP_PAGE_gc); +} + +/** + * \brief Write a page within the application section + * + * Write a page within the application section with the data stored in the + * page buffer. The page needs to be erased before the write to avoid + * corruption of the data written. + * + * \param page_addr Byte address to the page to delete + */ +static inline void nvm_flash_split_write_app_page(flash_addr_t page_addr) +{ + nvm_wait_until_ready(); + nvm_common_spm(page_addr, NVM_CMD_WRITE_APP_PAGE_gc); +} + +/** + * \brief Erase and write a page within the application section + * + * Erase and the write a page within the application section with the data + * stored in the page buffer. Erase and write is done in an atomic operation. + * + * \param page_addr Byte address to the page to delete + */ +static inline void nvm_flash_atomic_write_app_page(flash_addr_t page_addr) +{ + nvm_wait_until_ready(); + nvm_common_spm(page_addr, NVM_CMD_ERASE_WRITE_APP_PAGE_gc); +} + +void nvm_issue_flash_range_crc(flash_addr_t start_addr, flash_addr_t end_addr); + +void nvm_flash_read_buffer(flash_addr_t address, void *buf, uint16_t len); + +void nvm_flash_erase_and_write_buffer(flash_addr_t address, const void *buf, + uint16_t len, bool b_blank_check); + +/** + * \brief Erase a page within the boot section + * + * Erase one page within the boot section + * + * \param page_addr Byte address to the page to delete + */ +static inline void nvm_flash_erase_boot_page(flash_addr_t page_addr) +{ + nvm_wait_until_ready(); + nvm_common_spm(page_addr, NVM_CMD_ERASE_BOOT_PAGE_gc); +} + +/** + * \brief Write a page within the boot section + * + * Write a page within the boot section with the data stored in the + * page buffer. The page needs to be erased before the write to avoid + * corruption of the data written. + * + * \param page_addr Byte address to the page to delete + */ +static inline void nvm_flash_split_write_boot_page(flash_addr_t page_addr) +{ + nvm_wait_until_ready(); + nvm_common_spm(page_addr, NVM_CMD_WRITE_BOOT_PAGE_gc); +} + +/** + * \brief Erase and write a page within the boot section + * + * Erase and the write a page within the boot section with the data + * stored in the page buffer. Erase and write is done in an atomic operation. + * + * \param page_addr Byte address to the page to delete + */ +static inline void nvm_flash_atomic_write_boot_page(flash_addr_t page_addr) +{ + nvm_wait_until_ready(); + nvm_common_spm(page_addr, NVM_CMD_ERASE_WRITE_BOOT_PAGE_gc); +} + +void nvm_user_sig_read_buffer(flash_addr_t address, void *buf, uint16_t len); +void nvm_user_sig_write_buffer(flash_addr_t address, const void *buf, + uint16_t len, bool b_blank_check); + +/** + * \brief Erase the user calibration section page + * + * Erase the user calibration section page. There is only one page, so no + * parameters are needed. + */ +static inline void nvm_flash_erase_user_section(void) +{ + nvm_wait_until_ready(); + nvm_common_spm(0, NVM_CMD_ERASE_USER_SIG_ROW_gc); +} + +/** + * \brief Write the user calibration section page + * + * Write a the user calibration section page with the data stored in the + * page buffer. The page needs to be erased before the write to avoid + * corruption of the data written. There is only one page, so no + * parameters are needed. + */ +static inline void nvm_flash_write_user_page(void) +{ + nvm_wait_until_ready(); + nvm_common_spm(0, NVM_CMD_WRITE_USER_SIG_ROW_gc); +} + +//! @} + +/** + * \defgroup nvm_fuse_lock_group NVM driver fuse and lock bits handling + * \ingroup nvm_group + * \brief Functions for reading fuses and writing lock bits. + * + * The Fuses are used to set important system functions and can only be written + * from an external programming interface. The application software can read + * the fuses. The fuses are used to configure reset sources such as Brown-out + * Detector and Watchdog, Start-up configuration, JTAG enable and JTAG user ID. + * + * The Lock bits are used to set protection level on the different flash + * sections. They are used to block read and/or write on the different flash + * sections. Lock bits can be written from en external programmer and from the + * application software to set a more strict protection level, but not to set a + * less strict protection level. Chip erase is the only way to erase the lock + * bits. The lock bits are erased after the rest of the flash memory is erased. + * An unprogrammed fuse or lock bit will have the value one, while a programmed + * fuse or lock bit will have the value zero. + * Both fuses and lock bits are reprogrammable like the Flash Program memory. + * + * \note The functions in this module are modifying the NVM.CMD register. + * If the application are using program space access in interrupts + * (__flash pointers in IAR EW or pgm_read_byte in GCC) interrupts + * needs to be disabled when running EEPROM access functions. If not + * the program space reads will be corrupted. + * @{ + */ + +// The different fuse bytes +enum fuse_byte_t { + FUSEBYTE0 = 0, + FUSEBYTE1 = 1, + FUSEBYTE2 = 2, + FUSEBYTE3 = 3, // not used on current devices + FUSEBYTE4 = 4, + FUSEBYTE5 = 5, +}; + +uint8_t nvm_fuses_read(enum fuse_byte_t fuse); + +/** + * \brief Program the lock bits. + * + * Program the lock bits to the given values. Lock bits can only be programmed + * to a more secure setting than previously programmed. To clear lock bits, a + * flash erase has to be issued. + * + * \param blbb_lock Boot loader section lock bits to program + * \param blba_lock Application section lock bits to program + * \param blbat_lock Application table section lock bits to program + * \param lb_lock Flash/eeprom lock bits to program + */ +static inline void nvm_lock_bits_write(enum NVM_BLBB_enum blbb_lock, + enum NVM_BLBA_enum blba_lock, enum NVM_BLBAT_enum blbat_lock, + enum NVM_LB_enum lb_lock) +{ + nvm_wait_until_ready(); + NVM.DATA0 = (uint8_t)blbb_lock | (uint8_t)blba_lock | (uint8_t)blbat_lock | + (uint8_t)lb_lock; + nvm_issue_command(NVM_CMD_WRITE_LOCK_BITS_gc); +} + +/** + * \brief Program the BLBB lock bits. + * + * Program the lock bits for the boot loader section (BLBB). Other lock bits + * (BLBA, BLBAT and LB) are not altered (ie. programmed to NOLOCK). + * + * \param blbb_lock Boot loader section lock bits to program + */ +static inline void nvm_blbb_lock_bits_write(enum NVM_BLBB_enum blbb_lock) +{ + nvm_lock_bits_write(blbb_lock, NVM_BLBA_NOLOCK_gc, NVM_BLBAT_NOLOCK_gc, + NVM_LB_NOLOCK_gc); +} + +/** + * \brief Program the BLBA lock bits. + * + * Program the lock bits for the application section (BLBA). Other lock bits + * (BLBB, BLBAT and LB) are not altered (ie. programmed to NOLOCK). + * + * \param blba_lock Application section lock bits to program + */ +static inline void nvm_blba_lock_bits_write(enum NVM_BLBA_enum blba_lock) +{ + nvm_lock_bits_write(NVM_BLBB_NOLOCK_gc, blba_lock, NVM_BLBAT_NOLOCK_gc, + NVM_LB_NOLOCK_gc); +} + +/** + * \brief Program the BLBAT lock bits. + * + * Program the lock bits for the application table section (BLBAT). Other lock + * bits (BLBB, BLBA and LB) are not altered (ie. programmed to NOLOCK). + * + * \param blbat_lock Application table section lock bits to program + */ +static inline void nvm_blbat_lock_bits_write(enum NVM_BLBAT_enum blbat_lock) +{ + nvm_lock_bits_write(NVM_BLBB_NOLOCK_gc, NVM_BLBA_NOLOCK_gc, blbat_lock, + NVM_LB_NOLOCK_gc); +} + +/** + * \brief Program the LB lock bits. + * + * Program the lock bits for the flash and eeprom (LB). Other lock bits + * (BLBB, BLBA and BLBAT) are not altered (ie. programmed to NOLOCK). + * + * \param lb_lock Flash/eeprom lock bits to program + */ +static inline void nvm_lb_lock_bits_write(enum NVM_LB_enum lb_lock) +{ + nvm_lock_bits_write(NVM_BLBB_NOLOCK_gc, NVM_BLBA_NOLOCK_gc, + NVM_BLBAT_NOLOCK_gc, lb_lock); +} + +//! @} + +/** + * \page xmega_nvm_quickstart Quick Start Guide for the XMEGA NVM Driver + * + * This is the quick start guide for the \ref nvm_group "NVM Driver", with + * step-by-step instructions on how to configure and use the driver for + * specific use cases. + * + * The section described below can be compiled into e.g. the main application + * loop or any other function that will need to interface non-volatile memory. + * + * \section xmega_nvm_quickstart_basic Basic usage of the NVM driver + * This section will present three use cases of the NVM driver. The first will + * write a page to EEPROM and verify that it has been written, the second will + * access the BOD-level fuse to verify that the level is correctly set, and the + * third will read a chunk from the user signature row. + * + * \section xmega_nvm_quickstart_eeprom_case Use case 1: EEPROM + * + * The NVM driver has functions for interfacing many types of non-volatile + * memory, including flash, EEPROM, fuses and lock bits. The example code + * below will write a page to the internal EEPROM, and read it back to verify, + * using memory mapped I/O. + * + * \section xmega_nvm_quickstart_eeprom_case_setup_steps Setup steps + * There are no setup steps required for this use case. + * + * \subsection nvm_quickstart_eeprom_case_example_code Example code + * + * \code + #define EXAMPLE_PAGE 2 + #define EXAMPLE_ADDR EXAMPLE_PAGE * EEPROM_PAGE_SIZE + + uint8_t write_page[EEPROM_PAGE_SIZE]; + uint8_t read_page[EEPROM_PAGE_SIZE]; + + fill_page_with_known_data(write_page); + fill_page_with_zeroes(read_page); + + nvm_eeprom_load_page_to_buffer(write_page); + nvm_eeprom_atomic_write_page(EXAMPLE_PAGE); + + nvm_eeprom_read_buffer(EXAMPLE_ADDR, + read_page, EEPROM_PAGE_SIZE); + + check_if_pages_are_equal(write_page, read_page); +\endcode + * + * \subsection nvm_quickstart_eeprom_case_workflow Workflow + * + * -# We define where we would like to store our data, and we arbitrarily + * choose page 2 of EEPROM: + * - \code + #define EXAMPLE_PAGE 2 + #define EXAMPLE_ADDR EXAMPLE_PAGE * EEPROM_PAGE_SIZE +\endcode + * -# Define two tables, one which contains the data which we will write, + * and one which we will read the data into: + * - \code + uint8_t write_page[EEPROM_PAGE_SIZE]; + uint8_t read_page[EEPROM_PAGE_SIZE]; +\endcode + * -# Fill the tables with our data, and zero out the read table: + * - \code + fill_page_with_known_data(write_page); + fill_page_with_zeroes(read_page); +\endcode + * - \note These functions are undeclared, you should replace them with + * your own appropriate functions. + * -# We load our page into a temporary EEPROM page buffer: + * - \code + nvm_eeprom_load_page_to_buffer(write_page); +\endcode + * - \attention The function used above will not work if memory mapping + * is enabled. + * -# Do an atomic write of the page from buffer into the specified page: + * - \code + nvm_eeprom_atomic_write_page(EXAMPLE_PAGE); +\endcode + * - \note The function \ref nvm_eeprom_atomic_write_page() erases the + * page before writing the new one. For non-atomic (split) + * writing without deleting, see \ref nvm_eeprom_split_write_page() + * -# Read the page back into our read_page[] table: + * - \code + nvm_eeprom_read_buffer(EXAMPLE_ADDR, + read_page, EEPROM_PAGE_SIZE); +\endcode + * -# Verify that the page is equal to the one that was written earlier: + * - \code + check_if_pages_are_equal(write_page, read_page); +\endcode + * - \note This function is not declared, you should replace it with your + * own appropriate function. + * + * \section xmega_nvm_quickstart_fuse_case Use case 2: Fuses + * + * The NVM driver has functions for reading fuses. + * See \ref nvm_fuse_lock_group. + * + * We would like to check whether the Brown-out Detection level is set to + * 2.1V. This is set by programming the fuses when the chip is connected + * to a suitable programmer. The fuse is a part of FUSEBYTE5. If the BODLVL + * is correct, we turn on LED0. + * + * \section xmega_nvm_quickstart_fuse_case_setup_steps Setup steps + * There are no setup steps required for this use case. + * + * \subsection nvm_quickstart_fuse_case_example_code Example code + * \code + uint8_t fuse_value; + fuse_value = nvm_fuses_read(FUSEBYTE5); + + if ((fuse_value & NVM_FUSES_BODLVL_gm) == BODLVL_2V1_gc) { + gpio_set_pin_low(LED0_GPIO); + } +\endcode + * + * \subsection nvm_quickstart_fuse_case_workflow Workflow + * + * -# Create a variable to store the fuse contents: + * - \code + uint8_t fuse_value; +\endcode + * -# The fuse value we are interested in, BODLVL, is stored in FUSEBYTE5. + * We call the function \ref nvm_fuses_read() to read the fuse into our + * variable: + * - \code + fuse_value = nvm_fuses_read(FUSEBYTE5); +\endcode + * -# This ends the reading portion, but we would like to see whether the + * BOD-level is correct, and if it is, light up an LED: + * - \code + if ((fuse_value & NVM_FUSES_BODLVL_gm) == BODLVL_2V1_gc) { + gpio_set_pin_low(LED0_GPIO); + } +\endcode + * + * \section xmega_nvm_quickstart_signature_case Use case 3: Signature row + * + * The NVM driver has functions for reading the signature row of the device. + * Here we will simply read 16 bytes from the user signature row, assuming + * we need what is stored there. + * + * \section xmega_nvm_quickstart_signature_row_setup_steps Setup steps + * There are no setup steps required for this use case. + * + * \subsection xmega_nvm_quickstart_signature_row_example_code Example code + * + * \code + #define START_ADDR 0x10 + #define DATA_LENGTH 16 + + uint8_t values[LENGTH]; + uint8_t i; + + for (i = 0; i < DATA_LENGTH; i++) { + values[i] = nvm_read_user_signature_row(START_ADDR + i); + } +\endcode + * + * \subsection nvm_quickstart_signature_case_workflow Workflow + * + * -# Define starting address and length of data segment, and create + * variables needed to store and process the data: + * - \code + #define START_ADDR 0x10 + #define DATA_LENGTH 16 + + uint8_t values[LENGTH]; + uint8_t i; +\endcode + * -# Iterate through the user signature row, and store our desired data: + * - \code + for (i = 0; i < DATA_LENGTH; i++) { + values[i] = nvm_read_user_signature_row(START_ADDR + i); + } +\endcode + * + */ + +#ifdef __cplusplus +} +#endif + +#endif /* NVM_H */ diff --git a/AVR Code/USB_BULK_TEST/src/ASF/xmega/drivers/nvm/nvm_asm.s b/AVR Code/USB_BULK_TEST/src/ASF/xmega/drivers/nvm/nvm_asm.s new file mode 100644 index 00000000..6d74e08e --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/xmega/drivers/nvm/nvm_asm.s @@ -0,0 +1,197 @@ +/** + * \file + * + * \brief Non Volatile Memory controller driver + * + * Copyright (c) 2010 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +#include + +#if defined(__GNUC__) +//! Value to write to CCP for access to protected IO registers. +# define CCP_SPM_gc 0x9D + +//! NVM busy flag +# define NVM_NVMBUSY_bp 7 + +//! NVM command for loading flash buffer +# define NVM_CMD_LOAD_FLASH_BUFFER_gc 0x23 +#elif defined(__IAR_SYSTEMS_ASM__) +// All values are defined for IAR +#else +# error Unknown assembler +#endif + +#ifndef __DOXYGEN__ + PUBLIC_FUNCTION(nvm_read_byte) +#if defined(__GNUC__) + lds r20, NVM_CMD ; Store NVM command register + mov ZL, r22 ; Load byte index into low byte of Z. + mov ZH, r23 ; Load high byte into Z. + sts NVM_CMD, r24 ; Load prepared command into NVM Command register. + lpm r24, Z ; Perform an LPM to read out byte + sts NVM_CMD, r20 ; Restore NVM command register +#elif defined(__IAR_SYSTEMS_ASM__) + lds r20, NVM_CMD ; Store NVM command register + mov ZL, r18 ; Load byte index into low byte of Z. + mov ZH, r19 ; Load high byte into Z. + sts NVM_CMD, r16 ; Load prepared command into NVM Command register. + lpm r16, Z ; Perform an LPM to read out byte + sts NVM_CMD, r20 ; Restore NVM command register +#endif + + ret + + END_FUNC(nvm_read_byte) + +// IAR forgets about include files after each module, so need to include again +#if defined(__IAR_SYSTEMS_ASM__) +# include +#endif + + /** + * \brief Perform SPM command + */ + PUBLIC_FUNCTION_SEGMENT(nvm_common_spm, BOOT) + +#if defined(__GNUC__) + /** + * For GCC: + * \param address uint32_t r22:r25 + * \param nvm_cmd uint8_t r20 + */ + in r25, RAMPZ ; Store RAMPZ. Highest address byte is ignored, so using that + out RAMPZ, r24 ; Load R24 into RAMPZ + movw ZL, r22 ; Load R22:R23 into Z. + lds r24, NVM_CMD ; Store NVM command register (r24 is no longer needed) + sts NVM_CMD, r20 ; Load prepared command into NVM Command register. + ldi r23, CCP_SPM_gc ; Prepare Protect SPM signature (r23 is no longer needed) + sts CCP, r23 ; Enable SPM operation (this disables interrupts for 4 cycles). + spm ; Self-program. + sts NVM_CMD, r24 ; Restore NVM command register + out RAMPZ, r25 ; Restore RAMPZ register. +#elif defined(__IAR_SYSTEMS_ASM__) + /** + * For IAR: + * \param address uint32_t r16:r19 + * \param nvm_cmd uint8_t r20 + */ + in r19, RAMPZ ; Store RAMPZ. Highest address byte is ignored, so using that + out RAMPZ, r18 ; Load R18 into RAMPZ + movw ZL, r16 ; Load R16:R17 into Z. + lds r18, NVM_CMD ; Store NVM command register (r18 is no longer needed) + sts NVM_CMD, r20 ; Load prepared command into NVM Command register. + ldi r19, CCP_SPM_gc ; Prepare Protect SPM signature (r19 is no longer needed) + sts CCP, r19 ; Enable SPM operation (this disables interrupts for 4 cycles). + spm ; Self-program. + sts NVM_CMD, r18 ; Restore NVM command register + out RAMPZ, r19 ; Restore RAMPZ register. +#endif + + ret + + END_FUNC(nvm_common_spm) + +// IAR forgets about include files after each module, so need to include again +#if defined(__IAR_SYSTEMS_ASM__) +# include +#endif + + /** + * \brief Load byte to page buffer + * + */ + PUBLIC_FUNCTION_SEGMENT(nvm_flash_load_word_to_buffer, BOOT) + +#if defined(__GNUC__) + /** + * For GCC: + * \param word_addr uint32_t r22:r25 + * \param data uint16_t r20:r21 + */ +wait_nvm: + lds r18, NVM_STATUS + sbrc r18, NVM_NVMBUSY_bp + rjmp wait_nvm + + in r25, RAMPZ ; Store RAMPZ. Highest address byte is ignored, so using that + out RAMPZ, r24 ; Load R24 into RAMPZ + movw ZL, r22 ; Load R22:R23 into Z. + + lds r24, NVM_CMD ; Store NVM command register (r24 is no longer needed) + ldi r18, NVM_CMD_LOAD_FLASH_BUFFER_gc + sts NVM_CMD, r18 ; Load prepared command into NVM Command register. + + movw r0, r20 ; Load R20:R21 into R0:R1 + spm ; Self-program. + + clr r1 ; Clear R1 for GCC _zero_reg_ to function properly. + sts NVM_CMD, r24 ; Restore NVM command register + out RAMPZ, r25 ; Restore RAMPZ register. +#elif defined(__IAR_SYSTEMS_ASM__) + /** + * For IAR: + * \param word_addr uint32_t r16:r19 + * \param data uint16_t r20:r21 + */ +wait_nvm: + lds r19, NVM_STATUS + sbrc r19, NVM_NVMBUSY_bp + rjmp wait_nvm + + in r19, RAMPZ ; Store RAMPZ. Highest byte is ignored, so using that + out RAMPZ, r18 ; Load R18 into RAMPZ + movw ZL, r16 ; Load R16:R17 into Z. + + lds r18, NVM_CMD ; Store NVM command register (r18 is no longer needed) + ldi r17, NVM_CMD_LOAD_FLASH_BUFFER_gc + sts NVM_CMD, r17 ; Load prepared command into NVM Command register. + + movw r0, r20 ; Load R20:R21 into R0:R1 + spm ; Self-program. + + sts NVM_CMD, r18 ; Restore NVM command register + out RAMPZ, r19 ; Restore RAMPZ register. +#endif + + ret + + END_FUNC(nvm_flash_load_word_to_buffer) + + END_FILE() +#endif // __DOXYGEN__ diff --git a/AVR Code/USB_BULK_TEST/src/ASF/xmega/drivers/pmic/pmic.h b/AVR Code/USB_BULK_TEST/src/ASF/xmega/drivers/pmic/pmic.h new file mode 100644 index 00000000..81f56157 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/xmega/drivers/pmic/pmic.h @@ -0,0 +1,352 @@ +/** + * \file + * + * \brief Programmable Multilevel Interrupt Controller driver + * + * Copyright (c) 2010-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ +#ifndef PMIC_H +#define PMIC_H + +#include +#include + +/** + * \defgroup pmic_group Programmable Multilevel Interrupt Controller + * + * See \ref xmega_pmic_quickstart. + * + * This is a low-level driver implementation for the AVR XMEGA Programmable + * Multilevel Interrupt Controller. + * + * \note If these functions are used in interrupt service routines (ISRs), any + * non-ISR code or ISR code for lower level interrupts must ensure that the + * operations are atomic, i.e., by disabling interrupts during the function + * calls. + * @{ + */ + +/** + * \brief Interrupt level bitmasks + * + * \note These may be OR'ed, e.g., if multiple levels are to be enabled or + * disabled. + */ +enum pmic_level { + PMIC_LVL_LOW = PMIC_LOLVLEN_bm, //!< Low-level interrupts + PMIC_LVL_MEDIUM = PMIC_MEDLVLEN_bm, //!< Medium-level interrupts + PMIC_LVL_HIGH = PMIC_HILVLEN_bm, //!< High-level interrupts + /** + * \brief Non-maskable interrupts + * \note These cannot be enabled nor disabled. + */ + PMIC_LVL_NMI = PMIC_NMIEX_bp, +}; + +//! Interrupt vector locations +enum pmic_vector { + PMIC_VEC_APPLICATION, //!< Application section + PMIC_VEC_BOOT, //!< Boot section + PMIC_NR_OF_VECTORS, //!< Number of interrupt vector locations +}; + +//! Interrupt scheduling schemes +enum pmic_schedule { + PMIC_SCH_FIXED_PRIORITY, //!< Default, fixed priority scheduling + PMIC_SCH_ROUND_ROBIN, //!< Round-robin scheduling + PMIC_NR_OF_SCHEDULES, //!< Number of interrupt scheduling schemes +}; + +/** + * \brief Initialize the PMIC + * + * Enables all interrupt levels, with vectors located in the application section + * and fixed priority scheduling. + */ +static inline void pmic_init(void) +{ + PMIC.CTRL = PMIC_LVL_LOW | PMIC_LVL_MEDIUM | + PMIC_LVL_HIGH; +} + +/** + * \brief Enable interrupts with specified \a level(s). + * + * \param level Interrupt level(s) to enable. + */ +static inline void pmic_enable_level(enum pmic_level level) +{ + Assert((level & PMIC_LVL_NMI)); + + PMIC.CTRL |= level; +} + +/** + * \brief Disable interrupts with specified \a level(s). + * + * \param level Interrupt level(s) to disable. + */ +static inline void pmic_disable_level(enum pmic_level level) +{ + Assert((level & PMIC_LVL_NMI)); + + PMIC.CTRL &= ~level; +} + +/** + * \brief Check if specified interrupt \a level(s) is enabled. + * + * \param level Interrupt level(s) to check. + * + * \return True if interrupt level(s) is enabled. + */ +static inline bool pmic_level_is_enabled(enum pmic_level level) +{ + Assert((level & PMIC_LVL_NMI)); + + return PMIC.CTRL & level; +} + +/** + * \brief Get currently enabled level(s) + * + * \return Bitmask with currently enabled levels. + */ +static inline enum pmic_level pmic_get_enabled_levels(void) +{ + return (enum pmic_level)(PMIC.CTRL & (PMIC_LVL_LOW | PMIC_LVL_MEDIUM + | PMIC_LVL_HIGH)); +} + +/** + * \brief Check if an interrupt level(s) is currently executing. + * + * \param level Interrupt level(s) to check. + * + * \return True if interrupt level(s) is currently executing. + */ +static inline bool pmic_level_is_executing(enum pmic_level level) +{ + return PMIC.STATUS & level; +} + +/** + * \brief Set interrupt scheduling for low-level interrupts. + * + * \param schedule Interrupt scheduling method to set. + * + * \note The low-priority vector, INTPRI, must be set to 0 when round-robin + * scheduling is disabled to return to default interrupt priority order. + */ +static inline void pmic_set_scheduling(enum pmic_schedule schedule) +{ + Assert(schedule < PMIC_NR_OF_SCHEDULES); + + switch (schedule) { + case PMIC_SCH_FIXED_PRIORITY: + PMIC.CTRL &= ~PMIC_RREN_bm; + PMIC.INTPRI = 0; + break; + + case PMIC_SCH_ROUND_ROBIN: + PMIC.CTRL |= PMIC_RREN_bm; + break; + + default: + break; + }; +} + +/** + * \brief Set location of interrupt vectors. + * + * \param vector Location to use for interrupt vectors. + */ +static inline void pmic_set_vector_location(enum pmic_vector vector) +{ + uint8_t ctrl = PMIC.CTRL; + + Assert(vector < PMIC_NR_OF_VECTORS); + + switch (vector) { + case PMIC_VEC_APPLICATION: + ctrl &= ~PMIC_IVSEL_bm; + break; + + case PMIC_VEC_BOOT: + ctrl |= PMIC_IVSEL_bm; + break; + + default: + break; + } + + ccp_write_io((uint8_t*)&PMIC.CTRL, ctrl); +} + +//! @} + +/** + * \page xmega_pmic_quickstart Quick start guide for PMIC driver + * + * This is the quick start guide for the \ref pmic_group "PMIC driver" and + * the closely related \ref interrupt_group "global interrupt driver", with + * step-by-step instructions on how to configure and use the drivers in a + * selection of use cases. + * + * The use cases contain several code fragments. The code fragments in the + * steps for setup can be copied into a custom initialization function, while + * the steps for usage can be copied into, e.g., the main application function. + * + * \section pmic_basic_use_case Basic use case + * In this basic use case, the PMIC is configured for: + * - all interrupt levels enabled + * - round-robin scheduling + * + * This will allow for interrupts from other modules being used. + * + * \section pmic_basic_use_case_setup Setup steps + * + * \subsection pmic_basic_use_case_setup_prereq Prerequisites + * For the setup code of this use case to work, the following must + * be added to the project: + * -# Interrupts for the module requiring the PMIC module have to be + * enabled. + * -# An Interrupt Service Routine (ISR) for a given interrupt vector has to be + * defined, where the interrupt vectors available are defined by toolchain and + * listed in the subsection 'Interrupt Vector Summary' in the data sheet. + * \code + ISR(interrupt_vector){ + //Interrupt Service Routine + } +\endcode + * + * \subsection pmic_basic_use_case_setup_code Example code + * Add to the initialization code: + * \code + pmic_init(); + pmic_set_scheduling(PMIC_SCH_ROUND_ROBIN); + cpu_irq_enable(); +\endcode + * + * \subsection pmic_basic_use_case_setup_flow Workflow + * -# call the PMIC driver's own init function to enable all interrupt levels: + * - \code pmic_init(); \endcode + * -# enable round-robin instead of fixed priority interrupt scheduling: + * - \code pmic_set_scheduling(PMIC_SCH_ROUND_ROBIN); \endcode + * -# enable interrupts globally: + * - \code cpu_irq_enable(); \endcode + * - \attention Interrupts will not trigger without this step. + * + * \section pmic_use_cases Advanced use cases + * For more advanced use of the PMIC driver, see the following use cases: + * - \subpage pmic_use_case_1 : atomic operations + */ + +/** + * \page pmic_use_case_1 Use case #1 + * + * In this use case, the PMIC is configured for: + * - all interrupt levels enabled + * + * This will allow for interrupts from other modules being used. + * + * This use case shows how to make an operation which consists of multiple + * instructions uninterruptible, i.e., into an atomic operation. This is often + * necessary if there is a risk that data can be accessed by interrupt handlers + * while other code is accessing it, and at least one of them modifies it. + * + * \section pmic_use_case_1_setup Setup steps + * + * \subsection pmic_basic_use_case_setup_prereq Prerequisites + * For the setup code of this use case to work, the following must + * be added to the project: + * -# Interrupts for the module requiring the PMIC module have to be + * enabled. + * -# An Interrupt Service Routine (ISR) for a given interrupt vector has to be + * defined, where the interrupt vectors available are defined by toolchain and + * listed in the subsection 'Interrupt Vector Summary' in the data sheet. + * \code + ISR(interrupt_vector){ + //Interrupt Service Routine + } +\endcode + * + * \subsection pmic_use_case_1_setup_code Example code + * Add to application initialization: + * \code + pmic_init(); + cpu_irq_enable(); +\endcode + * + * \subsection pmic_use_case_1_setup_flow Workflow + * -# call the PMIC driver's own init function to enable all interrupt levels: + * - \code pmic_init(); \endcode + * -# set global interrupt enable flag: + * - \code cpu_irq_enable(); \endcode + * + * \section pmic_use_case_1_usage Usage steps + * + * \subsection pmic_use_case_1_usage_code Example code + * \code + Add to application: + void atomic_operation(void) + { + irqflags_t flags; + + flags = cpu_irq_save(); + + // Uninterruptible block of code + + cpu_irq_restore(flags); + } +\endcode + * + * \subsection pmic_use_case_1_usage_flow Workflow + * -# allocate temporary storage for interrupt enable: + * - \code irqflags_t flags; \endcode + * -# clear global interrupt enable flag while saving its previous state: + * - \code flags = cpu_irq_save(); \endcode + * -# restore the previous state of global interrupt flag after operation: + * - \code cpu_irq_restore(flags); \endcode + */ + +#endif /* PMIC_H */ diff --git a/AVR Code/USB_BULK_TEST/src/ASF/xmega/drivers/sleep/sleep.h b/AVR Code/USB_BULK_TEST/src/ASF/xmega/drivers/sleep/sleep.h new file mode 100644 index 00000000..8a218c41 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/xmega/drivers/sleep/sleep.h @@ -0,0 +1,169 @@ +/** + * \file + * + * \brief Sleep controller driver + * + * Copyright (c) 2010-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ +#ifndef SLEEP_H +#define SLEEP_H + +#include + +/** + * \defgroup sleep_group Sleep controller driver + * + * This is a low-level driver implementation for the AVR XMEGA sleep controller. + * + * \note To minimize the code overhead, these functions do not feature + * interrupt-protected access since they are likely to be called inside + * interrupt handlers or in applications where such protection is not + * necessary. If such protection is needed, it must be ensured by the calling + * code. + * + * \section xmega_sleep_quickstart_section Quick Start Guide + * See \ref xmega_sleep_quickstart + * @{ + */ + +#if defined(__ICCAVR__) || defined(__DOXYGEN__) +# include +//! Macro for issuing the sleep instruction. +# define sleep_enter() __sleep() + +/** + * \brief Enable sleep + */ +static inline void sleep_enable(void) +{ + SLEEP.CTRL |= SLEEP_SEN_bm; +} + +/** + * \brief Disable sleep + */ +static inline void sleep_disable(void) +{ + SLEEP.CTRL &= ~SLEEP_SEN_bm; +} + +#elif defined(__GNUC__) +# include +# define sleep_enter() sleep_cpu() + +#else +# error Unsupported compiler. +#endif + +/** + * \brief Set new sleep mode + * + * \param mode Sleep mode, from the device IO header file. + */ +static inline void sleep_set_mode(enum SLEEP_SMODE_enum mode) +{ + SLEEP.CTRL = mode | (SLEEP.CTRL & ~SLEEP_SMODE_gm); +} + +//! @} + +/** + * \page xmega_sleep_quickstart Quick Start Guide for the XMEGA Sleep Driver + * + * This is the quick start guide for the \ref sleep_group "Sleep Driver", with + * step-by-step instructions on how to configure and use the driver for a + * specific use case. + * + * The section described below can be copied into, e.g. the main application + * loop or any other function that will need to control and execute different + * sleep modes on the device. + * + * \section xmega_sleep_quickstart_basic Basic usage of the sleep driver + * This use case will prepare the device to enter the Power Down sleep mode and + * then enter the sleep mode. After waking up it will disable sleep. + * + * \section xmega_sleep_basic_usage Usage steps + * \subsection xmega_sleep_basic_usage_code Example code + * Add to, e.g., the main loop in the application C-file: + * \code + sleep_set_mode(SLEEP_SMODE_PDOWN_gc); + sleep_enable(); + sleep_enter(); + sleep_disable(); +\endcode + * + * \subsection xmega_sleep_basic_usage Workflow + * -# Set what sleep mode to use, the different sleep modes can be found in the + * device header file under the enum definition SLEEP_SMODE_enum: + * - \code sleep_set_mode(SLEEP_SMODE_PDOWN_gc); \endcode + * -# Enable that the device are allowed to go to sleep: + * - \code sleep_enable(); \endcode + * - \note This function has to be called in order for the device to go to + * sleep. This is a safety feature to stop the device to go to sleep + * unintentionally, even though it is possible to have this enabled at all times + * it is recommended to enable sleep mode only when you intend to go to sleep + * within a few clock cycles. + * -# Enter sleep mode: + * - \code sleep_enter(); \endcode + * - \attention Make sure to enable global interrupt and the interrupt you + * plan to use as wake-up source for your device, do also pay special + * attention to what wake-up sources are available for the different sleep + * modes. Failing to enable interrupts may result in indefinite sleep until + * power is cycled! + * -# When the device is woken from sleep it will execute the interrupt handler + * related to the wakeup-source (interrupt source) and continue on the next line + * of code after the \ref sleep_enter() call. Make sure to disable sleep when + * waking up. + * - \code sleep_disable(); \endcode + * + * \subsection xmega_sleep_basic_sleep_modes Sleep Modes + * Possible sleep modes depend on the device that is used. Please refer to the + * device datasheet and header file to find these definitions. + * + * As an example the ATxmega32A4U device has the following sleep modes: + * - Idle sleep: SLEEP_SMODE_IDLE_gc + * - Power Down: SLEEP_SMODE_PDOWN_gc + * - Power Save: SLEEP_SMODE_PSAVE_gc + * - Standby: SLEEP_SMODE_STDBY_gc + * - Extended standby: SLEEP_SMODE_ESTDBY_gc + */ + +#endif /* SLEEP_H */ diff --git a/AVR Code/USB_BULK_TEST/src/ASF/xmega/drivers/spi/spi.c b/AVR Code/USB_BULK_TEST/src/ASF/xmega/drivers/spi/spi.c new file mode 100644 index 00000000..37511077 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/xmega/drivers/spi/spi.c @@ -0,0 +1,119 @@ +/***************************************************************************** + * + * \file + * + * \brief SPI software driver functions. + * + * Copyright (c) 2014-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + *****************************************************************************/ +/* + * Support and FAQ: visit Atmel Support + */ + +#include "spi.h" + +/*! \brief Calculates the SPI baudrate divider. + * + * \param baudrate The expected baudrate on the SPI. + * \param clkper_hz SPI module input clock frequency (Peripheral clock, Hz). + * \param spi The SPI module address + * + * \return Status of operation. + * \retval >=0 Success. + * \retval <0 Error. + */ +int8_t spi_xmega_set_baud_div(SPI_t *spi, uint32_t baudrate, uint32_t clkper_hz) +{ + uint32_t divisor; + uint8_t divisor_8bit; + uint8_t ctrl; + + // Sanity check, requested baudrate is lower than system clock + Assert(clkper_hz > baudrate); + + /* + * Get wanted divisor rounded up so we don't get speed higher than + * requested baudrate. + */ + divisor = (clkper_hz + baudrate - 1) / baudrate; + + if (divisor > 128) { + /* + * Highest possible divisor is 128 so fail since we can't get + * low enough baudrate. + */ + return -1; + } + + /* + * We now know that the divisor is 128 or lower so move it into a 8-bit + * variable to make sure the following comparison is more optimized. + */ + divisor_8bit = divisor; + + /* + * For divisor values between the possible ones round up to the closest + * higher one to avoid higher baudrate than requested. + */ + if (divisor_8bit > 64) { + ctrl = SPI_PRESCALER_DIV128_gc; + } + else if (divisor_8bit > 32) { + ctrl = SPI_PRESCALER_DIV64_gc; + } + else if (divisor_8bit > 16) { + ctrl = SPI_CLK2X_bm | SPI_PRESCALER_DIV64_gc; + } + else if (divisor_8bit > 8) { + ctrl = SPI_PRESCALER_DIV16_gc; + } + else if (divisor_8bit > 4) { + ctrl = SPI_CLK2X_bm | SPI_PRESCALER_DIV16_gc; + } + else if (divisor_8bit > 2) { + ctrl = SPI_PRESCALER_DIV4_gc; + } + else { + ctrl = SPI_CLK2X_bm | SPI_PRESCALER_DIV4_gc; + } + + // Update register and make sure to clear out any leftover bits + spi->CTRL = (spi->CTRL & ~(SPI_CLK2X_bm | SPI_PRESCALER_gm)) | ctrl; + + return 1; +} diff --git a/AVR Code/USB_BULK_TEST/src/ASF/xmega/drivers/spi/spi.h b/AVR Code/USB_BULK_TEST/src/ASF/xmega/drivers/spi/spi.h new file mode 100644 index 00000000..766f6329 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/xmega/drivers/spi/spi.h @@ -0,0 +1,166 @@ +/***************************************************************************** + * + * \file + * + * \brief SPI driver for AVR. + * + * This file defines a useful set of functions for the SPI interface on AVR + * devices. + * + * Copyright (c) 2014-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + ******************************************************************************/ +/* + * Support and FAQ: visit Atmel Support + */ + + +#ifndef _SPI_H_ +#define _SPI_H_ + +/** + * \defgroup group_xmega_drivers_spi SPI - Serial Peripheral Interface + * + * Driver for the Serial Peripheral Interface (SPI). + * Provides functions for configuring and using the SPI. + * + * \{ + */ + +#include "compiler.h" +#include "status_codes.h" +#include "ioport.h" + +/*! \brief Calculates the SPI baudrate divider. + * + * \param baudrate The expected baudrate on the SPI. + * \param clkper_hz SPI module input clock frequency (Peripheral clock, Hz). + * \param spi The SPI module address + * + * \return Divider or error code. + * \retval >=0 Success. + * \retval <0 Error. + */ +int8_t spi_xmega_set_baud_div(SPI_t *spi, uint32_t baudrate, uint32_t clkper_hz); + +/*! \brief Enables the SPI. + * + * \param spi Base address of the SPI instance. + */ +static inline void spi_enable(SPI_t *spi) +{ + spi->CTRL |= SPI_ENABLE_bm; +} + +/*! \brief Disables the SPI. + * + * Ensures that nothing is transferred while setting up buffers. + * + * \param spi Base address of the SPI instance. + * + * \warning This may cause data loss if used on a slave SPI. + */ +static inline void spi_disable(SPI_t *spi) +{ + spi->CTRL &= ~SPI_ENABLE_bm; +} + +/*! \brief Tests if the SPI is enabled. + * + * \param spi Base address of the SPI instance. + * + * \return \c 1 if the SPI is enabled, otherwise \c 0. + */ +static inline bool spi_is_enabled(SPI_t *spi) +{ + return spi->CTRL & SPI_ENABLE_bm ? true : false; +} + +/*! \brief Put one data byte to a SPI peripheral. + * + * \param spi Base address of the SPI instance. + * \param data The data byte to be loaded + * + */ +static inline void spi_put(SPI_t *spi, uint8_t data) +{ + spi->DATA = data; +} + +/*! \brief Get one data byte to a SPI peripheral. + * + * \param spi Base address of the SPI instance. + * \return The data byte + * + */ +static inline uint8_t spi_get(SPI_t *spi) +{ + return spi->DATA; +} + +/*! \brief Tests if the SPI contains a received character. + * + * \param spi Base address of the SPI instance. + * + * \return \c 1 if the SPI Receive Holding Register is full, otherwise \c 0. + */ +static inline bool spi_is_tx_ok(SPI_t *spi) +{ + return spi->STATUS & SPI_IF_bm ? true : false; +} + +/*! \brief Activate SPI master mode of a SPI peripheral + * + * \param spi Base address of the SPI instance. + * + * \warning This may cause data loss if used on a slave SPI. + */ +static inline void spi_enable_master_mode(SPI_t *spi) +{ + spi->CTRL |= SPI_MASTER_bm; +} + +/*! \name Part Specific SPI Driver + */ +//! @{ +//! @} + +/** + * \} + */ + +#endif // _SPI_H_ diff --git a/AVR Code/USB_BULK_TEST/src/ASF/xmega/drivers/usart/usart.c b/AVR Code/USB_BULK_TEST/src/ASF/xmega/drivers/usart/usart.c new file mode 100644 index 00000000..a4bc1421 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/xmega/drivers/usart/usart.c @@ -0,0 +1,467 @@ +/** + * \file + * + * \brief USART driver for AVR XMEGA. + * + * Copyright (c) 2009-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ +#include +#include "compiler.h" +#include "usart.h" +#include "sysclk.h" +#include "ioport.h" +#include "status_codes.h" + +/* + * Fix XMEGA header files + * USART.CTRLC bit masks and bit positions + */ +#ifndef USART_UCPHA_bm +# define USART_UCPHA_bm 0x02 +#endif +#ifndef USART_DORD_bm +# define USART_DORD_bm 0x04 +#endif + +/** + * \brief Initialize USART in RS232 mode. + * + * This function initializes the USART module in RS232 mode using the + * usart_rs232_options_t configuration structure and CPU frequency. + * + * \param usart The USART module. + * \param opt The RS232 configuration option. + * + * \retval true if the initialization was successfull + * \retval false if the initialization failed (error in baud rate calculation) + */ +bool usart_init_rs232(USART_t *usart, const usart_rs232_options_t *opt) +{ + bool result; + sysclk_enable_peripheral_clock(usart); + usart_set_mode(usart, USART_CMODE_ASYNCHRONOUS_gc); + usart_format_set(usart, opt->charlength, opt->paritytype, + opt->stopbits); + result = usart_set_baudrate(usart, opt->baudrate, sysclk_get_per_hz()); + usart_tx_enable(usart); + usart_rx_enable(usart); + + return result; +} + +/** + * \brief Initialize USART in SPI master mode. + * + * This function initializes the USART module in SPI master mode using the + * usart_spi_options_t configuration structure and CPU frequency. + * + * \param usart The USART module. + * \param opt The RS232 configuration option. + */ +void usart_init_spi(USART_t *usart, const usart_spi_options_t *opt) +{ + ioport_pin_t sck_pin; + bool invert_sck; + + sysclk_enable_peripheral_clock(usart); + + usart_rx_disable(usart); + + /* configure Clock polarity using INVEN bit of the correct SCK I/O port **/ + invert_sck = (opt->spimode == 2) || (opt->spimode == 3); + UNUSED(invert_sck); + +#ifdef USARTC0 + if ((uint16_t)usart == (uint16_t)&USARTC0) { +# ifdef PORT_USART0_bm + if (PORTC.REMAP & PORT_USART0_bm) { + sck_pin = IOPORT_CREATE_PIN(PORTC, 5); + } else { + sck_pin = IOPORT_CREATE_PIN(PORTC, 1); + } +# else + sck_pin = IOPORT_CREATE_PIN(PORTC, 1); +# endif + } +#endif +#ifdef USARTC1 + if ((uint16_t)usart == (uint16_t)&USARTC1) { + sck_pin = IOPORT_CREATE_PIN(PORTC, 5); + } +#endif +#ifdef USARTD0 + if ((uint16_t)usart == (uint16_t)&USARTD0) { +# ifdef PORT_USART0_bm + if (PORTD.REMAP & PORT_USART0_bm) { + sck_pin = IOPORT_CREATE_PIN(PORTD, 5); + } else { + sck_pin = IOPORT_CREATE_PIN(PORTD, 1); + } +# else + sck_pin = IOPORT_CREATE_PIN(PORTD, 1); +# endif + } +#endif +#ifdef USARTD1 + if ((uint16_t)usart == (uint16_t)&USARTD1) { + sck_pin = IOPORT_CREATE_PIN(PORTD, 5); + } +#endif +#ifdef USARTE0 + if ((uint16_t)usart == (uint16_t)&USARTE0) { +# ifdef PORT_USART0_bm + if(PORTE.REMAP & PORT_USART0_bm) { + sck_pin = IOPORT_CREATE_PIN(PORTE, 5); + } else { + sck_pin = IOPORT_CREATE_PIN(PORTE, 1); + } +# else + sck_pin = IOPORT_CREATE_PIN(PORTE, 1); +# endif + } +#endif +#ifdef USARTE1 + if ((uint16_t)usart == (uint16_t)&USARTE1) { + sck_pin = IOPORT_CREATE_PIN(PORTE, 5); + } +#endif +#ifdef USARTF0 + if ((uint16_t)usart == (uint16_t)&USARTF0) { +# ifdef PORT_USART0_bm + if(PORTF.REMAP & PORT_USART0_bm) { + sck_pin = IOPORT_CREATE_PIN(PORTF, 5); + } else { + sck_pin = IOPORT_CREATE_PIN(PORTF, 1); + } +# else + sck_pin = IOPORT_CREATE_PIN(PORTF, 1); +# endif + } +#endif +#ifdef USARTF1 + if ((uint16_t)usart == (uint16_t)&USARTF1) { + sck_pin = IOPORT_CREATE_PIN(PORTF, 5); + } +#endif + + /* Configure the USART output pin */ + ioport_set_pin_dir(sck_pin, IOPORT_DIR_OUTPUT); + ioport_set_pin_mode(sck_pin, + IOPORT_MODE_TOTEM | (invert_sck? IOPORT_MODE_INVERT_PIN : 0)); + ioport_set_pin_level(sck_pin, IOPORT_PIN_LEVEL_HIGH); + + usart_set_mode(usart, USART_CMODE_MSPI_gc); + + if (opt->spimode == 1 || opt->spimode == 3) { + usart->CTRLC |= USART_UCPHA_bm; + } else { + usart->CTRLC &= ~USART_UCPHA_bm; + } + if (opt->data_order) { + (usart)->CTRLC |= USART_DORD_bm; + } else { + (usart)->CTRLC &= ~USART_DORD_bm; + } + + usart_spi_set_baudrate(usart, opt->baudrate, sysclk_get_per_hz()); + usart_tx_enable(usart); + usart_rx_enable(usart); +} + +/** + * \brief Send a data with the USART module + * + * This function outputs a data using the USART module. + * + * \param usart The USART module. + * \param c The data to send. + * + * \return STATUS_OK + */ +enum status_code usart_putchar(USART_t *usart, uint8_t c) +{ + while (usart_data_register_is_empty(usart) == false) { + } + + (usart)->DATA = c; + return STATUS_OK; +} + +/** + * \brief Receive a data with the USART module + * + * This function returns the received data from the USART module. + * + * \param usart The USART module. + * + * \return The received data. + */ +uint8_t usart_getchar(USART_t *usart) +{ + while (usart_rx_is_complete(usart) == false) { + } + + return ((uint8_t)(usart)->DATA); +} + +/** + * \brief Get the offset for lookup in the baudrate table + * + * \param baud The requested baudrate + * + * \return The baudrate offset in PROGMEM table + * \retval USART_BAUD_UNDEFINED for baudrates not in lookup table + */ +static uint8_t usart_get_baud_offset(uint32_t baud) +{ + switch (baud) { + case 1200: + return (uint8_t)USART_BAUD_1200; + + case 2400: + return (uint8_t)USART_BAUD_2400; + + case 4800: + return (uint8_t)USART_BAUD_4800; + + case 9600: + return (uint8_t)USART_BAUD_9600; + + case 19200: + return (uint8_t)USART_BAUD_19200; + + case 38400: + return (uint8_t)USART_BAUD_38400; + + case 57600: + return (uint8_t)USART_BAUD_57600; + + default: + return (uint8_t)USART_BAUD_UNDEFINED; + } +} + +/** + * \brief Set the baudrate by setting the BSEL and BSCALE values in the USART + * + * This function sets the selected BSEL and BSCALE value in the BAUDCTRL + * registers with BSCALE 0. For calculation options, see table 21-1 in XMEGA A + * manual. + * + * \param usart The USART module. + * \param bsel Calculated BSEL value. + * \param bscale Calculated BSEL value. + * + */ +void usart_set_bsel_bscale_value(USART_t *usart, uint16_t bsel, uint8_t bscale) +{ + (usart)->BAUDCTRLA = (uint8_t)(bsel); + (usart)->BAUDCTRLB = (uint8_t)(((bsel >> 8) & 0X0F) | (bscale << 4)); +} + +/** + * \brief Set the baudrate using precalculated BAUDCTRL values from PROGMEM + * + * \note This function only works for cpu_hz 2Mhz or 32Mhz and baudrate values + * 1200, 2400, 4800, 9600, 19200, 38400 and 57600. + * + * \param usart The USART module. + * \param baud The baudrate. + * \param cpu_hz The CPU frequency. + * + */ +void usart_set_baudrate_precalculated(USART_t *usart, uint32_t baud, + uint32_t cpu_hz) +{ + uint8_t baud_offset; + uint16_t baudctrl = 0; + + baud_offset = usart_get_baud_offset(baud); + + if (cpu_hz == 2000000UL) { + baudctrl = PROGMEM_READ_WORD(baudctrl_2mhz + baud_offset); + } else if (cpu_hz == 32000000UL) { + baudctrl = PROGMEM_READ_WORD(baudctrl_32mhz + baud_offset); + } else { + /* Error, system clock speed or USART baud rate is not supported + * by the look-up table */ + Assert(false); + } + + if (baud_offset != USART_BAUD_UNDEFINED) { + (usart)->BAUDCTRLB = (uint8_t)((uint16_t)baudctrl); + (usart)->BAUDCTRLA = (uint8_t)((uint16_t)baudctrl >> 8); + } +} + +/** + * \brief Set the baudrate value in the USART module + * + * This function sets the baudrate register with scaling regarding the CPU + * frequency and makes sure the baud rate is supported by the hardware. + * The function can be used if you don't want to calculate the settings + * yourself or changes to baudrate at runtime is required. + * + * \param usart The USART module. + * \param baud The baudrate. + * \param cpu_hz The CPU frequency. + * + * \retval true if the hardware supports the baud rate + * \retval false if the hardware does not support the baud rate (i.e. it's + * either too high or too low.) + */ +bool usart_set_baudrate(USART_t *usart, uint32_t baud, uint32_t cpu_hz) +{ + int8_t exp; + uint32_t div; + uint32_t limit; + uint32_t ratio; + uint32_t min_rate; + uint32_t max_rate; + + /* + * Check if the hardware supports the given baud rate + */ + /* 8 = (2^0) * 8 * (2^0) = (2^BSCALE_MIN) * 8 * (BSEL_MIN) */ + max_rate = cpu_hz / 8; + /* 4194304 = (2^7) * 8 * (2^12) = (2^BSCALE_MAX) * 8 * (BSEL_MAX+1) */ + min_rate = cpu_hz / 4194304; + + if (!((usart)->CTRLB & USART_CLK2X_bm)) { + max_rate /= 2; + min_rate /= 2; + } + + if ((baud > max_rate) || (baud < min_rate)) { + return false; + } + + /* Check if double speed is enabled. */ + if (!((usart)->CTRLB & USART_CLK2X_bm)) { + baud *= 2; + } + + /* Find the lowest possible exponent. */ + limit = 0xfffU >> 4; + ratio = cpu_hz / baud; + + for (exp = -7; exp < 7; exp++) { + if (ratio < limit) { + break; + } + + limit <<= 1; + + if (exp < -3) { + limit |= 1; + } + } + + /* + * Depending on the value of exp, scale either the input frequency or + * the target baud rate. By always scaling upwards, we never introduce + * any additional inaccuracy. + * + * We are including the final divide-by-8 (aka. right-shift-by-3) in + * this operation as it ensures that we never exceeed 2**32 at any + * point. + * + * The formula for calculating BSEL is slightly different when exp is + * negative than it is when exp is positive. + */ + if (exp < 0) { + /* We are supposed to subtract 1, then apply BSCALE. We want to + * apply BSCALE first, so we need to turn everything inside the + * parenthesis into a single fractional expression. + */ + cpu_hz -= 8 * baud; + + /* If we end up with a left-shift after taking the final + * divide-by-8 into account, do the shift before the divide. + * Otherwise, left-shift the denominator instead (effectively + * resulting in an overall right shift.) + */ + if (exp <= -3) { + div = ((cpu_hz << (-exp - 3)) + baud / 2) / baud; + } else { + baud <<= exp + 3; + div = (cpu_hz + baud / 2) / baud; + } + } else { + /* We will always do a right shift in this case, but we need to + * shift three extra positions because of the divide-by-8. + */ + baud <<= exp + 3; + div = (cpu_hz + baud / 2) / baud - 1; + } + + (usart)->BAUDCTRLB = (uint8_t)(((div >> 8) & 0X0F) | (exp << 4)); + (usart)->BAUDCTRLA = (uint8_t)div; + + return true; +} + +/** + * \brief Set the baudrate value in the USART_SPI module + * + * This function sets the baudrate register regarding the CPU frequency. + * + * \param usart The USART(SPI) module. + * \param baud The baudrate. + * \param cpu_hz The CPU frequency. + */ +void usart_spi_set_baudrate(USART_t *usart, uint32_t baud, uint32_t cpu_hz) +{ + uint16_t bsel_value; + + /* Check if baudrate is less than the maximim limit specified in + * datasheet */ + if (baud < (cpu_hz / 2)) { + bsel_value = (cpu_hz / (baud * 2)) - 1; + } else { + /* If baudrate is not within the specfication in datasheet, + * assign maximum baudrate possible for the current CPU frequency */ + bsel_value = 0; + } + + (usart)->BAUDCTRLB = (uint8_t)((~USART_BSCALE_gm) & (bsel_value >> 8)); + (usart)->BAUDCTRLA = (uint8_t)(bsel_value); +} diff --git a/AVR Code/USB_BULK_TEST/src/ASF/xmega/drivers/usart/usart.h b/AVR Code/USB_BULK_TEST/src/ASF/xmega/drivers/usart/usart.h new file mode 100644 index 00000000..8a3cb986 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/xmega/drivers/usart/usart.h @@ -0,0 +1,558 @@ +/** + * \file + * + * \brief USART driver for AVR XMEGA. + * + * This file contains basic functions for the AVR XMEGA USART, with support for all + * modes, settings and clock speeds. + * + * Copyright (c) 2009-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ +#ifndef _USART_H_ +#define _USART_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include "compiler.h" +#include "pmic.h" + +/** + * \defgroup usart_group USART module (USART) + * + * See \ref xmega_usart_quickstart. + * + * This is a driver for configuring, enabling, disabling and use of the on-chip + * USART. + * + * \section dependencies Dependencies + * + * The USART module depends on the following modules: + * - \ref sysclk_group for peripheral clock control. + * - \ref port_driver_group for peripheral io port control. + * + * @{ + */ + +//! Offset in lookup table for baudrate 1200 +#define USART_BAUD_1200 0x00 +//! Offset in lookup table for baudrate 2400 +#define USART_BAUD_2400 0x01 +//! Offset in lookup table for baudrate 4800 +#define USART_BAUD_4800 0x02 +//! Offset in lookup table for baudrate 9600 +#define USART_BAUD_9600 0x03 +//! Offset in lookup table for baudrate 19200 +#define USART_BAUD_19200 0x04 +//! Offset in lookup table for baudrate 38400 +#define USART_BAUD_38400 0x05 +//! Offset in lookup table for baudrate 57600 +#define USART_BAUD_57600 0x06 +//! Baudrate not in lookup table +#define USART_BAUD_UNDEFINED 0xFF + +//! Lookup table containing baudctrl values for CPU frequency 2 Mhz +static PROGMEM_DECLARE(uint16_t, baudctrl_2mhz[]) = { + 0xE5BC, // Baud: 1200 + 0xC5AC, // Baud: 2400 + 0x859C, // Baud: 4800 + 0x0396, // Baud: 9600 + 0xC192, // Baud: 19200 + 0x2191, // Baud: 38400 + 0x9690, // Baud: 57600 +}; + +//! Lookup table containing baudctrl values for CPU frequency 32 Mhz +static PROGMEM_DECLARE(uint16_t, baudctrl_32mhz[]) = { + 0x031D, // Baud: 1200 + 0x01ED, // Baud: 2400 + 0xFDDC, // Baud: 4800 + 0xF5CC, // Baud: 9600 + 0xE5BC, // Baud: 19200 + 0xC5AC, // Baud: 38400 + 0x6EA8, // Baud: 57600 +}; + + +//! Input parameters when initializing RS232 and similar modes. +typedef struct usart_rs232_options { + //! Set baud rate of the USART (unused in slave modes). + uint32_t baudrate; + + //! Number of bits to transmit as a character (5 to 9). + USART_CHSIZE_t charlength; + + //! Parity type: USART_PMODE_DISABLED_gc, USART_PMODE_EVEN_gc, + //! USART_PMODE_ODD_gc. + USART_PMODE_t paritytype; + + //! Number of stop bits between two characters: + //! true: 2 stop bits + //! false: 1 stop bit + bool stopbits; + +} usart_rs232_options_t; + +//! Input parameters when initializing SPI master mode. +typedef struct usart_spi_options { + //! Set baud rate of the USART in SPI mode. + uint32_t baudrate; + + //! SPI transmission mode. + uint8_t spimode; + + uint8_t data_order; +} usart_spi_options_t; + +//! USART interrupt levels +enum usart_int_level_t { + USART_INT_LVL_OFF = 0x00, + USART_INT_LVL_LO = 0x01, + USART_INT_LVL_MED = 0x02, + USART_INT_LVL_HI = 0x03, +}; + +/** + * \brief Enable USART receiver. + * + * \param usart Pointer to the USART module + */ +static inline void usart_rx_enable(USART_t *usart) +{ + (usart)->CTRLB |= USART_RXEN_bm; +} + +/** + * \brief Disable USART receiver. + * + * \param usart Pointer to the USART module. + */ +static inline void usart_rx_disable(USART_t *usart) +{ + (usart)->CTRLB &= ~USART_RXEN_bm; +} + +/** + * \brief Configure the USART frame format. + * + * Sets the frame format, Frame Size, parity mode and number of stop bits. + * + * \param usart Pointer to the USART module + * \param charSize The character size. Use USART_CHSIZE_t type. + * \param parityMode The parity Mode. Use USART_PMODE_t type. + * \param twoStopBits Enable two stop bit mode. Use bool type. + */ +static inline void usart_format_set(USART_t *usart, USART_CHSIZE_t charSize, + USART_PMODE_t parityMode, bool twoStopBits) +{ + (usart)->CTRLC = (uint8_t)charSize | parityMode + | (twoStopBits ? USART_SBMODE_bm : 0); +} + +/** + * \brief Enable USART transmitter. + * + * \param usart Pointer to the USART module. + */ +static inline void usart_tx_enable(USART_t *usart) +{ + (usart)->CTRLB |= USART_TXEN_bm; +} + +/** + * \brief Disable USART transmitter. + * + * \param usart Pointer to the USART module. + */ +static inline void usart_tx_disable(USART_t *usart) +{ + (usart)->CTRLB &= ~USART_TXEN_bm; +} + +/** + * \brief Set USART RXD interrupt level. + * + * Sets the interrupt level on RX Complete interrupt. + * + * \param usart Pointer to the USART module. + * \param level Interrupt level of the RXD interrupt. + */ +static inline void usart_set_rx_interrupt_level(USART_t *usart, + enum usart_int_level_t level) +{ + (usart)->CTRLA = ((usart)->CTRLA & ~USART_RXCINTLVL_gm) | + (level << USART_RXCINTLVL_gp); +} + +/** + * \brief Set USART TXD interrupt level. + * + * Sets the interrupt level on TX Complete interrupt. + * + * \param usart Pointer to the USART module. + * \param level Interrupt level of the TXD interrupt. + */ +static inline void usart_set_tx_interrupt_level(USART_t *usart, + enum usart_int_level_t level) +{ + (usart)->CTRLA = ((usart)->CTRLA & ~USART_TXCINTLVL_gm) | + (level << USART_TXCINTLVL_gp); +} + +/** + * \brief Set USART DRE interrupt level. + * + * Sets the interrupt level on Data Register interrupt. + * + * \param usart Pointer to the USART module. + * \param level Interrupt level of the DRE interrupt. + * Use USART_DREINTLVL_t type. + */ +static inline void usart_set_dre_interrupt_level(USART_t *usart, + enum usart_int_level_t level) +{ + (usart)->CTRLA = ((usart)->CTRLA & ~USART_DREINTLVL_gm) | + (level << USART_DREINTLVL_gp); +} + +/** + * \brief Set the mode the USART run in. + * + * Set the mode the USART run in. The default mode is asynchronous mode. + * + * \param usart Pointer to the USART module register section. + * \param usartmode Selects the USART mode. Use USART_CMODE_t type. + * + * USART modes: + * - 0x0 : Asynchronous mode. + * - 0x1 : Synchronous mode. + * - 0x2 : IrDA mode. + * - 0x3 : Master SPI mode. + */ +static inline void usart_set_mode(USART_t *usart, USART_CMODE_t usartmode) +{ + (usart)->CTRLC = ((usart)->CTRLC & (~USART_CMODE_gm)) | usartmode; +} + +/** + * \brief Check if data register empty flag is set. + * + * \param usart The USART module. + */ +static inline bool usart_data_register_is_empty(USART_t * usart) +{ + return (usart)->STATUS & USART_DREIF_bm; +} + +/** + * \brief Checks if the RX complete interrupt flag is set. + * + * Checks if the RX complete interrupt flag is set. + * + * \param usart The USART module. + */ +static inline bool usart_rx_is_complete(USART_t * usart) +{ + return (usart)->STATUS & USART_RXCIF_bm; +} + +/** + * \brief Checks if the TX complete interrupt flag is set. + * + * Checks if the TX complete interrupt flag is set. + * + * \param usart The USART module. + */ +static inline bool usart_tx_is_complete(USART_t * usart) +{ + return (usart)->STATUS & USART_TXCIF_bm; +} + +/** + * \brief Clear TX complete interrupt flag. + * + * \param usart The USART module. + */ +static inline void usart_clear_tx_complete(USART_t * usart) +{ + (usart)->STATUS = USART_TXCIF_bm; +} + +/** + * \brief Clear RX complete interrupt flag. + * + * \param usart The USART module. + */ +static inline void usart_clear_rx_complete(USART_t *usart) +{ + (usart)->STATUS = USART_RXCIF_bm; +} + +/** + * \brief Write a data to the USART data register. + * + * \param usart The USART module. + * \param txdata The data to be transmitted. + */ +static inline void usart_put(USART_t * usart, uint8_t txdata) +{ + (usart)->DATA = txdata; +} + +/** + * \brief Read a data to the USART data register. + * + * \param usart The USART module. + * + * \return The received data + */ +static inline uint8_t usart_get(USART_t * usart) +{ + return (usart)->DATA; +} + +/** + * \brief Performs a data transfer on the USART in SPI mode. + * + * \param usart The USART module. + * \param txdata The data to be transmitted. + * + * \return The received data + */ +static inline uint8_t usart_spi_transmit(USART_t * usart, + uint8_t txdata) +{ + while (usart_data_register_is_empty(usart) == false); + usart_put(usart, txdata); + while (!usart_tx_is_complete(usart)); + usart_clear_tx_complete(usart); + return usart_get(usart); +} + +bool usart_init_rs232(USART_t *usart, const usart_rs232_options_t *opt); +void usart_init_spi(USART_t * usart, const usart_spi_options_t * opt); + +enum status_code usart_putchar(USART_t * usart, uint8_t c); +uint8_t usart_getchar(USART_t * usart); + +void usart_set_bsel_bscale_value(USART_t *usart, uint16_t bsel, uint8_t bscale); +void usart_set_baudrate_precalculated(USART_t *usart, uint32_t baud, + uint32_t cpu_hz); +bool usart_set_baudrate(USART_t *usart, uint32_t baud, uint32_t cpu_hz); +void usart_spi_set_baudrate(USART_t * usart, uint32_t baud, uint32_t cpu_hz); +//! @} + +#ifdef __cplusplus +} +#endif + +/** + * \page xmega_usart_quickstart Quick start guide for USART module + * + * This is the quick start guide for the \ref usart_group "USART module", with + * step-by-step instructions on how to configure and use the driver in a + * selection of use cases. + * + * The use cases contain several code fragments. The code fragments in the + * steps for setup can be copied into a custom initialization function, while + * the steps for usage can be copied into, e.g., the main application function. + * + * \section usart_basic_use_case Basic use case + * \section usart_use_cases USART use cases + * - \ref usart_basic_use_case + * - \subpage usart_use_case_1 + * + * \section usart_basic_use_case Basic use case - transmit a character + * In this use case, the USART module is configured for: + * - Using USARTD0 + * - Baudrate: 9600 + * - Character length: 8 bit + * - Parity mode: Disabled + * - Stop bit: None + * - RS232 mode + * + * \section usart_basic_use_case_setup Setup steps + * + * \subsection usart_basic_use_case_setup_prereq Prerequisites + * -# \ref sysclk_group + * \subsection usart_basic_use_case_setup_code Example code + * The following configuration must be added to the project (typically to a + * conf_usart.h file, but it can also be added to your main application file.) + * \code + #define USART_SERIAL &USARTD0 + #define USART_SERIAL_BAUDRATE 9600 + #define USART_SERIAL_CHAR_LENGTH USART_CHSIZE_8BIT_gc + #define USART_SERIAL_PARITY USART_PMODE_DISABLED_gc + #define USART_SERIAL_STOP_BIT false +\endcode + * + * Add to application initialization: + * \code + sysclk_init(); + static usart_rs232_options_t USART_SERIAL_OPTIONS = { + .baudrate = USART_SERIAL_BAUDRATE, + .charlength = USART_SERIAL_CHAR_LENGTH, + .paritytype = USART_SERIAL_PARITY, + .stopbits = USART_SERIAL_STOP_BIT + }; + sysclk_enable_module(SYSCLK_PORT_D, PR_USART0_bm); + usart_init_rs232(USART_SERIAL, &USART_SERIAL_OPTIONS); +\endcode + * + * \subsection usart_basic_use_case_setup_flow Workflow + * -# Initialize system clock: + * - \code sysclk_init(); \endcode + * - \note Not always required, but since the \ref usart_group driver is + * dependent on \ref sysclk_group it is good practise to initialize + * this module. + * -# Create USART options struct: + * - \code + static usart_rs232_options_t USART_SERIAL_OPTIONS = { + .baudrate = USART_SERIAL_BAUDRATE, + .charlength = USART_SERIAL_CHAR_LENGTH, + .paritytype = USART_SERIAL_PARITY, + .stopbits = USART_SERIAL_STOP_BIT + }; +\endcode + * -# Enable the clock for the USART module: + * - \code sysclk_enable_module(SYSCLK_PORT_D, PR_USART0_bm); \endcode + * -# Initialize in RS232 mode: + * - \code usart_init_rs232(USART_SERIAL, &USART_SERIAL_OPTIONS); +\endcode + * + * \section usart_basic_use_case_usage Usage steps + * + * \subsection usart_basic_use_case_usage_code Example code + * Add to application C-file: + * \code + usart_putchar(USART_SERIAL, 'a'); +\endcode + * + * \subsection usart_basic_use_case_usage_flow Workflow + * -# Send an 'a' character via USART + * - \code usart_putchar(USART_SERIAL, 'a'); \endcode + */ + +/** + * \page usart_use_case_1 USART receive character and echo back + * + * In this use case, the USART module is configured for: + * - Using USARTD0 + * - Baudrate: 9600 + * - Character length: 8 bit + * - Parity mode: Disabled + * - Stop bit: None + * - RS232 mode + * + * The use case waits for a received character on the configured USART and + * echoes the character back to the same USART. + * + * \section usart_use_case_1_setup Setup steps + * + * \subsection usart_use_case_1_setup_prereq Prerequisites + * -# \ref sysclk_group + * + * \subsection usart_use_case_1_setup_code Example code + * -# The following configuration must be added to the project (typically to a + * conf_usart.h file, but it can also be added to your main application file.): + * \code + #define USART_SERIAL &USARTD0 + #define USART_SERIAL_BAUDRATE 9600 + #define USART_SERIAL_CHAR_LENGTH USART_CHSIZE_8BIT_gc + #define USART_SERIAL_PARITY USART_PMODE_DISABLED_gc + #define USART_SERIAL_STOP_BIT false +\endcode + * + * A variable for the received byte must be added: + * \code uint8_t received_byte; \endcode + * + * Add to application initialization: + * \code + sysclk_init(); + static usart_rs232_options_t USART_SERIAL_OPTIONS = { + .baudrate = USART_SERIAL_BAUDRATE, + .charlength = USART_SERIAL_CHAR_LENGTH, + .paritytype = USART_SERIAL_PARITY, + .stopbits = USART_SERIAL_STOP_BIT + }; + sysclk_enable_module(SYSCLK_PORT_D, PR_USART0_bm); + usart_init_rs232(USART_SERIAL, &USART_SERIAL_OPTIONS); +\endcode + * + * \subsection usart_use_case_1_setup_flow Workflow + * -# Initialize system clock: + * - \code sysclk_init(); \endcode + * - \note Not always required, but since the \ref usart_group driver is + * dependent on \ref sysclk_group it is good practise to initialize + * this module. + * -# Create USART options struct: + * - \code + static usart_rs232_options_t USART_SERIAL_OPTIONS = { + .baudrate = USART_SERIAL_BAUDRATE, + .charlength = USART_SERIAL_CHAR_LENGTH, + .paritytype = USART_SERIAL_PARITY, + .stopbits = USART_SERIAL_STOP_BIT + }; +\endcode + * -# Enable the clock for the USART module: + * - \code sysclk_enable_module(SYSCLK_PORT_D, PR_USART0_bm); \endcode + * -# Initialize in RS232 mode: + * - \code usart_init_rs232(USART_SERIAL, &USART_SERIAL_OPTIONS); +\endcode + * + * \section usart_use_case_1_usage Usage steps + * + * \subsection usart_use_case_1_usage_code Example code + * Add to, e.g., main loop in application C-file: + * \code + received_byte = usart_getchar(USART_SERIAL); + usart_putchar(USART_SERIAL, received_byte); +\endcode + * + * \subsection usart_use_case_1_usage_flow Workflow + * -# Wait for reception of a character: + * - \code received_byte = usart_getchar(USART_SERIAL); \endcode + * -# Echo the character back: + * - \code usart_putchar(USART_SERIAL, received_byte); \endcode + */ + +#endif // _USART_H_ diff --git a/AVR Code/USB_BULK_TEST/src/ASF/xmega/drivers/usb/usb_device.c b/AVR Code/USB_BULK_TEST/src/ASF/xmega/drivers/usb/usb_device.c new file mode 100644 index 00000000..a0b77ded --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/xmega/drivers/usb/usb_device.c @@ -0,0 +1,1460 @@ +/** + * \file + * + * \brief USB Device driver + * Compliance with common driver UDD + * + * Copyright (c) 2011-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ + +#include "conf_usb.h" + +// Read Modify Write opcode is implemented after IAR AVR 5.51 +#ifdef __ICCAVR__ +# if (__VER__ <= 551 || (__VER__ <= 611 && XMEGA_A1U) ) +# undef USB_WORKAROUND_DO_NOT_USE_RMW +# define USB_WORKAROUND_DO_NOT_USE_RMW +# endif +#endif + +#include "sysclk.h" +#include "udd.h" +#include "usb_device.h" +#include + +#ifndef UDD_NO_SLEEP_MGR +#include "sleepmgr.h" +#endif + +#ifndef UDD_USB_INT_LEVEL +// By default USB interrupt have low priority +# define UDD_USB_INT_LEVEL USB_INTLVL_MED_gc +#endif + + + +#ifdef USB_DEVICE_HS_SUPPORT +#error This product does not support high speed mode, please remove define USB_DEVICE_HS_SUPPORT in conf_usb.h +#endif + +//////////////////////////////////////////////////// +// USBB Device low-level driver (UDD) +//////////////////////////////////////////////////// +/** + * \ingroup udd_group + * \defgroup udd_xmega_usb_group Xmega USB Device Driver + * + * \section USBB_CONF USBB Custom configuration + * The following USBB driver configuration must be included in the conf_usb.h + * file of the application. + * + * UDD_USB_INT_LEVEL
    + * Option to change the interrupt priority (USB_INTLVL_x_gc) + * by default USB_INTLVL_LO_gc (recommended). + * + * \section Callbacks management + * The USB driver is fully managed by interrupt and does not request periodic + * task. Thereby, the USB events use callbacks to transfer the information. + * The callbacks are declared in static during compilation or in variable during + * code execution. + * + * Static declarations defined in conf_usb.h: + * - UDC_VBUS_EVENT(bool b_present)
    + * To signal Vbus level change + * - UDC_SUSPEND_EVENT()
    + * Called when USB bus enter in suspend mode + * - UDC_RESUME_EVENT()
    + * Called when USB bus is wakeup + * - UDC_SOF_EVENT()
    + * Called for each received SOF, Note: Each 1ms in HS/FS mode only. + * + * Dynamic callbacks, called "endpoint job" , are registered + * in udd_ep_job_t structure via the following functions: + * - udd_ep_run()
    + * To call it when a transfer is finish + * - udd_ep_wait_stall_clear()
    + * To call it when a endpoint halt is disabled + * + * \section Power mode management + * The Sleep modes authorized : + * - in USB IDLE state, the USB needs of USB clock and authorizes up to IDLE mode + * - in USB SUSPEND state, the USB no needs USB clock but requests a minimum + * clock restart timing. Thus, it authorizes up to POWER_DOWN or STANDBY mode. + * + * The USB_SLEEP_MODE_USB_IDLE equals SLEEPMGR_IDLE. + * + * The USB_SLEEP_MODE_USB_SUSPEND depends on USB clock startup timing: + * | Clock Startup | Sleep mode authorized | + * | >10ms | SLEEPMGR_STDBY | + * | <=10ms | SLEEPMGR_PDOWN | + * + * @{ + */ + + +// Check USB Device configuration +#ifndef USB_DEVICE_EP_CTRL_SIZE +# error USB_DEVICE_EP_CTRL_SIZE not defined +#endif +#ifndef USB_DEVICE_MAX_EP +# error USB_DEVICE_MAX_EP not defined +#endif + + +/** + * \name Power management routine. + */ +//@{ + + +#ifndef UDD_NO_SLEEP_MGR + +//! Definition of sleep levels +#if ((defined USB_DEVICE_HS_SUPPORT) && (USBCLK_STARTUP_TIMEOUT>3000)) \ + || ((!defined USB_DEVICE_HS_SUPPORT) && (USBCLK_STARTUP_TIMEOUT>10000)) +# define USBC_SLEEP_MODE_USB_SUSPEND SLEEPMGR_IDLE +#else +# define USBC_SLEEP_MODE_USB_SUSPEND SLEEPMGR_PDOWN +#endif +#define USBC_SLEEP_MODE_USB_IDLE SLEEPMGR_IDLE + +//! State of USB line +static bool udd_b_idle; + + +/*! \brief Authorize or not the CPU powerdown mode + * + * \param b_enable true to authorize powerdown mode + */ +static void udd_sleep_mode(bool b_idle) +{ + if (!b_idle && udd_b_idle) { + sleepmgr_unlock_mode(USBC_SLEEP_MODE_USB_IDLE); + } + if (b_idle && !udd_b_idle) { + sleepmgr_lock_mode(USBC_SLEEP_MODE_USB_IDLE); + } + udd_b_idle = b_idle; +} +#else + +static void udd_sleep_mode(bool b_idle) { +} +#endif // UDD_NO_SLEEP_MGR + +//@} + +/** + * \brief USB SRAM data about fifo, endpoint descriptor table and frame number + * + * The content of the USB SRAM can be: + * - modified by USB hardware by interface to signal endpoint status. + * Thereby, it is read by software. + * - modified by USB software to control endpoint. + * Thereby, it is read by hardware. + * This data section is volatile and the specific opcode read/modify/write must be used. + * + * @{ + */ +struct udd_sram_data { +#if XMEGA_A1U +# if (0!=((USB_DEVICE_MAX_EP+1)%4)) + uint8_t padding_align[16 - ((USB_DEVICE_MAX_EP + 1) * + sizeof(uint32_t)) % 16]; +# endif +#endif + uint32_t fifo[USB_DEVICE_MAX_EP + 1]; + USB_EP_t ep_ctrl[2 * (USB_DEVICE_MAX_EP + 1)]; + uint16_t frame_number; +}; +#if XMEGA_A1U +COMPILER_ALIGNED(16) +#else +COMPILER_ALIGNED(4) //! Caution seems GCC does not handle 2 alignment properly +#endif +static volatile struct udd_sram_data udd_sram; +#define UDD_EP_t USB_EP_t volatile + +// @} + +/** + * \name initialization of endpoint + */ +//@{ +/** + * \brief Configures and enables an endpoint + * + * \param ep Endpoint number including direction (USB_EP_DIR_IN/USB_EP_DIR_OUT). + * \param bmAttributes Attribute of endpoint declared in descriptor. + * \param MaxEndpointSize Endpoint size maximum + */ +static void udd_ep_init(udd_ep_id_t ep, uint8_t bmAttributes, + uint16_t MaxEndpointSize); + +/** + * \brief Returns a pointer on endpoint control SRAM corresponding at endpoint number + * + * \param ep Endpoint number including direction (USB_EP_DIR_IN/USB_EP_DIR_OUT). + * + * \return endpoint descriptor index + */ +static UDD_EP_t *udd_ep_get_ctrl(udd_ep_id_t ep); +//@} + + +/** + * \name Control endpoint low level management routine. + * + * This function performs control endpoint management. + * It handle the SETUP/DATA/HANDSHAKE phases of a control transaction. + */ +//@{ + +//! Global variable to give and record information about setup request management +udd_ctrl_request_t udd_g_ctrlreq; + +//! Bit definitions about endpoint control state machine for udd_ep_control_state +typedef enum { + UDD_EPCTRL_SETUP = 0, //!< Wait a SETUP packet + UDD_EPCTRL_DATA_OUT = 1, //!< Wait a OUT data packet + UDD_EPCTRL_DATA_IN = 2, //!< Wait a IN data packet + UDD_EPCTRL_HANDSHAKE_WAIT_IN_ZLP = 3, //!< Wait a IN ZLP packet + UDD_EPCTRL_HANDSHAKE_WAIT_OUT_ZLP = 4, //!< Wait a OUT ZLP packet + UDD_EPCTRL_STALL_REQ = 5, //!< STALL enabled on IN & OUT packet +} udd_ctrl_ep_state_t; + +//! State of the endpoint control management +static udd_ctrl_ep_state_t udd_ep_control_state; +//! Total number of data received/sent during data packet phase with previous payload buffers +static uint16_t udd_ctrl_prev_payload_nb_trans; +//! Number of data received/sent to/from udd_g_ctrlreq.payload buffer +static uint16_t udd_ctrl_payload_nb_trans; + +/** + * \brief Buffer to store the data received on control endpoint (SETUP/OUT endpoint 0) + * + * Used to avoid a RAM buffer overflow in case of the payload buffer + * is smaller than control endpoint size + */ +static uint8_t udd_ctrl_buffer[USB_DEVICE_EP_CTRL_SIZE]; + +/** + * \brief Reset control endpoint management + * + * Called after a USB line reset or at the end of SETUP request (after ZLP) + */ +static void udd_ctrl_init(void); + +//! \brief Managed reception of SETUP packet on control endpoint +static void udd_ctrl_setup_received(void); + +//! \brief Managed reception of IN packet on control endpoint +static void udd_ctrl_in_sent(void); + +//! \brief Managed reception of OUT packet on control endpoint +static void udd_ctrl_out_received(void); + +//! \brief Managed underflow event of IN packet on control endpoint +//! It is used to detect a DATA phase stopped by the host via a ZLP request. +//! This is mandatory for chapter 8 compliance +static void udd_ctrl_underflow(void); + +//! \brief Managed overflow event of OUT packet on control endpoint +//! It is used to detect a DATA phase stopped by the host via a ZLP request. +//! This is mandatory for chapter 8 compliance +static void udd_ctrl_overflow(void); + +//! \brief Managed stall event of IN/OUT packet on control endpoint +static void udd_ctrl_stall_data(void); + +//! \brief Send a ZLP IN on control endpoint +static void udd_ctrl_send_zlp_in(void); + +//! \brief Send a ZLP OUT on control endpoint +static void udd_ctrl_send_zlp_out(void); + +//! \brief Call callback associated to setup request +static void udd_ctrl_endofrequest(void); + +/** + * \brief Sub interrupt routine to manage error on control endpoint + * + * \return \c 1 if an error about control endpoint is occurred, otherwise \c 0. + */ +static bool udd_ctrl_interrupt_error(void); + +/** + * \brief Sub interrupt routine to manage a SETUP transfer complete on control endpoint + * + * \return \c 1 if an SETUP transfer complete about control endpoint is occurred, + * otherwise \c 0. + */ +static bool udd_ctrl_interrupt_tc_setup(void); + +//@} + + +/** + * \name Management of bulk/interrupt/isochronous endpoints + * + * The UDD manages the data transfer on endpoints: + * - Start data transfer on endpoint with USB Device DMA + * - Send a ZLP packet if requested + * - Call callback registered to signal end of transfer + * The transfer abort and stall feature are supported. + */ +//@{ +#if (0!=USB_DEVICE_MAX_EP) + +//! Structure definition about job registered on an endpoint +typedef struct { + //! A job is registered on this endpoint + uint8_t busy:1; + //! A short packet is requested for this job on endpoint IN + uint8_t b_shortpacket:1; + //! The cache buffer is currently used on endpoint OUT + uint8_t b_use_out_cache_buffer:1; + //! Buffer located in internal RAM to send or fill during job + uint8_t *buf; + //! Size of buffer to send or fill + iram_size_t buf_size; + //! Total number of data transfered on endpoint + iram_size_t nb_trans; + union { + //! Callback to call at the end of transfer + udd_callback_trans_t call_trans; + //! Callback to call when the endpoint halt is cleared + udd_callback_halt_cleared_t call_nohalt; + }; +} udd_ep_job_t; + +//! Array to register a job on bulk/interrupt/isochronous endpoint +static udd_ep_job_t udd_ep_job[USB_DEVICE_MAX_EP * 2]; + +/** + * \brief Buffer to store the data received on bulk/interrupt endpoints + * + * Used to avoid a RAM buffer overflow in case of the user buffer + * is smaller than endpoint size + * + * \warning The isochronous endpoint is not protected by this system + * and the user must always use a buffer corresponding at endpoint size + */ +#ifdef USB_DEVICE_LOW_SPEED +static uint8_t udd_ep_out_cache_buffer[USB_DEVICE_MAX_EP][8]; +#else +static uint8_t udd_ep_out_cache_buffer[USB_DEVICE_MAX_EP][64]; +#endif + + +/** + * \brief Checks endpoint number + * + * \param ep endpoint number + */ +bool udd_ep_is_valid(udd_ep_id_t ep); + +/** + * \brief Manages transfer complete on bulk/interrupt/isochronous endpoints + * + * \param ep endpoint number to manage + */ +static void udd_ep_trans_complet(udd_ep_id_t ep); + +/** + * \brief Returns the size of endpoint + * + * \return the size of current selected endpoint + */ +static uint16_t udd_ep_get_size(UDD_EP_t * ep_ctrl); + +/** + * \brief Returns a pointer on endpoint job corresponding at endpoint number + * + * \param ep Endpoint number including direction (USB_EP_DIR_IN/USB_EP_DIR_OUT). + */ +static udd_ep_job_t *udd_ep_get_job(udd_ep_id_t ep); + +#endif // (0!=USB_DEVICE_MAX_EP) +//@} + + +void udd_enable(void) +{ + uint8_t i; + irqflags_t flags; + + // Sanity check Silicon revision +#if AVR8_PART_IS_DEFINED(ATxmega128A1U) + // The part ATxmega128A1U Rev. J is not supported, please use new silicon revision. + Assert(!(MCU_REVID < 0x0A)); +#endif + +#ifdef CONFIG_OSC_AUTOCAL_RC32MHZ_REF_OSC +# if CONFIG_OSC_AUTOCAL_RC32MHZ_REF_OSC == OSC_ID_USBSOF + // RC oscillator calibration via USB Start Of Frame is not available + // in low speed mode. + // Thus, the calibration is disabled + // when USB interface start in low speed mode + DFLLRC32M.CTRL = 0; +# endif +#endif + +#ifdef USB_DEVICE_LOW_SPEED + // The USB hardware need of 6MHz in low speed mode + sysclk_enable_usb(6); + udd_set_low_speed(); +#else + // The USB hardware need of 48MHz in full speed mode + sysclk_enable_usb(48); + udd_set_full_speed(); +#endif + +// The XMEGA_A1U does not support the RC calibration through Keepalive (Low speed). +#if (!defined USB_DEVICE_LOW_SPEED) || (!XMEGA_A1U) +# ifdef CONFIG_OSC_AUTOCAL_RC32MHZ_REF_OSC +# if CONFIG_OSC_AUTOCAL_RC32MHZ_REF_OSC == OSC_ID_USBSOF + // The SOF calibration can be enabled + DFLLRC32M.CTRL = DFLL_ENABLE_bm; +# endif +# endif +#endif + + flags = cpu_irq_save(); + + // Reset endpoints table + for (i = 0; i < ((USB_DEVICE_MAX_EP + 1) * 2); i++) { + udd_sram.ep_ctrl[i].CTRL = 0; + } +#if (0!=USB_DEVICE_MAX_EP) + // Reset internal variables + for (i = 0; i < (USB_DEVICE_MAX_EP * 2); i++) { + udd_ep_job[i].busy = false; + } +#endif + + //** Enable USB hardware + usb_pad_init(); + udd_set_nb_max_ep(USB_DEVICE_MAX_EP); + udd_enable_interface(); + udd_enable_store_frame_number(); +#if XMEGA_A1U + Assert(((uint16_t)(&udd_sram) & 0x0F) == 0); /* check align on 16bit */ +#else + Assert(((uint16_t)(&udd_sram) & 0x01) == 0); /* check align on WORD */ +#endif + udd_set_ep_table_addr(udd_sram.ep_ctrl); + // Enable TC fifo management + udd_enable_fifo(); + udd_reset_fifo(); + // Enable Interrupt USB Device + udd_enable_interrupt(UDD_USB_INT_LEVEL); + +#ifndef UDD_NO_SLEEP_MGR + // Initialize the sleep mode authorized for the USB suspend mode + udd_b_idle = false; + sleepmgr_lock_mode(USBC_SLEEP_MODE_USB_SUSPEND); +#endif + +#ifndef USB_DEVICE_ATTACH_AUTO_DISABLE + udd_attach(); +#endif + cpu_irq_restore(flags); +} + + +void udd_disable(void) +{ + irqflags_t flags; + flags = cpu_irq_save(); + udd_detach_device(); + // Disable interface + USB_CTRLA = 0; + USB_CTRLB = 0; + sysclk_disable_usb(); + udd_sleep_mode(false); +#ifndef UDD_NO_SLEEP_MGR + sleepmgr_unlock_mode(USBC_SLEEP_MODE_USB_SUSPEND); +#endif + cpu_irq_restore(flags); +} + +bool udd_include_vbus_monitoring(void) +{ + return false; // No Vbus monitoring +} + +void udd_attach(void) +{ + irqflags_t flags; + flags = cpu_irq_save(); + + // At startup the USB bus state is unknown, + // therefore the state is considered IDLE to not miss any USB event + udd_sleep_mode(true); + + udd_ack_suspend_event(); + udd_ack_resume_event(); + udd_attach_device(); + // Enable main USB interrupts + udd_enable_tc_interrupt(); + udd_enable_busevt_interrupt(); + udd_enable_setup_interrupt(); + udd_enable_start_of_frame_interrupt(); + + cpu_irq_restore(flags); +} + +void udd_detach(void) +{ + // Detach device from the bus + udd_detach_device(); +} + +bool udd_is_high_speed(void) +{ + return false; +} + +void udd_set_address(uint8_t address) +{ + udd_set_device_address(address); +} + +uint8_t udd_getaddress(void) +{ + return udd_get_device_address(); +} + +uint16_t udd_get_frame_number(void) +{ + return udd_sram.frame_number; +} + +uint16_t udd_get_micro_frame_number(void) +{ + return 0; +} + +void udd_send_remotewakeup(void) +{ +#ifndef UDD_NO_SLEEP_MGR + if (!udd_b_idle) +#endif + { + udd_sleep_mode(true); // Enter in IDLE mode + udd_send_remote_wake_up(); + } +} + +void udd_set_setup_payload( uint8_t *payload, uint16_t payload_size ) +{ + udd_g_ctrlreq.payload = payload; + udd_g_ctrlreq.payload_size = payload_size; +} + +#if (0!=USB_DEVICE_MAX_EP) +bool udd_ep_alloc(udd_ep_id_t ep, uint8_t bmAttributes, + uint16_t MaxEndpointSize) +{ + UDD_EP_t *ep_ctrl; + Assert(udd_ep_is_valid(ep)); + + ep_ctrl = udd_ep_get_ctrl(ep); + if (udd_endpoint_is_enable(ep_ctrl)) { + return false; // Already allocated + } + udd_ep_init(ep, bmAttributes, MaxEndpointSize); + +/* + // Do not use multipacket mode with isochronous 1023 bytes endpoint + if (udd_endpoint_get_type(ep_ctrl)==USB_EP_TYPE_ISOCHRONOUS_gc + && (udd_endpoint_get_size_field(ep_ctrl) + ==USB_EP_BUFSIZE_1023_gc)) { + return true; + }*/ + + udd_endpoint_set_multipacket(ep_ctrl); + return true; +} + +void udd_ep_free(udd_ep_id_t ep) +{ + UDD_EP_t *ep_ctrl; + Assert(udd_ep_is_valid(ep)); + + udd_ep_abort(ep); + ep_ctrl = udd_ep_get_ctrl(ep); + udd_endpoint_disable(ep_ctrl); +} + +bool udd_ep_is_halted(udd_ep_id_t ep) +{ + UDD_EP_t *ep_ctrl; + Assert(udd_ep_is_valid(ep)); + + ep_ctrl = udd_ep_get_ctrl(ep); + return (udd_endpoint_is_stall(ep_ctrl)); +} + +bool udd_ep_set_halt(udd_ep_id_t ep) +{ + UDD_EP_t *ep_ctrl; + Assert(udd_ep_is_valid(ep)); + + ep_ctrl = udd_ep_get_ctrl(ep); + udd_endpoint_enable_stall(ep_ctrl); + udd_endpoint_clear_dtgl(ep_ctrl); + + udd_ep_abort(ep); + return true; +} + +bool udd_ep_clear_halt(udd_ep_id_t ep) +{ + udd_ep_job_t *ptr_job; + UDD_EP_t *ep_ctrl; + Assert(udd_ep_is_valid(ep)); + + ep_ctrl = udd_ep_get_ctrl(ep); + if (!udd_endpoint_is_stall(ep_ctrl)) { + return true; // No stall on going + } + udd_endpoint_disable_stall(ep_ctrl); + + // If a job is register on clear halt action + // then execute callback + ptr_job = udd_ep_get_job(ep); + if (ptr_job->busy == true) { + ptr_job->busy = false; + ptr_job->call_nohalt(); + } + return true; +} + +bool udd_ep_run(udd_ep_id_t ep, bool b_shortpacket, uint8_t * buf, + iram_size_t buf_size, udd_callback_trans_t callback) +{ + udd_ep_job_t *ptr_job; + irqflags_t flags; + UDD_EP_t *ep_ctrl; + + Assert(udd_ep_is_valid(ep)); + + // Get control & job about this endpoint + ptr_job = udd_ep_get_job(ep); + ep_ctrl = udd_ep_get_ctrl(ep); + + if (!udd_endpoint_is_enable(ep_ctrl)) { + return false; // Endpoint not allocated + } + if (udd_endpoint_get_type(ep_ctrl)!=USB_EP_TYPE_ISOCHRONOUS_gc + && udd_endpoint_is_stall(ep_ctrl)) { + return false; // Endpoint is halted + } + flags = cpu_irq_save(); + if (ptr_job->busy == true) { + cpu_irq_restore(flags); + return false; // Job already on going + } + ptr_job->busy = true; + cpu_irq_restore(flags); + + + // Update Job information + ptr_job->buf = buf; + ptr_job->buf_size = buf_size; + ptr_job->nb_trans = 0; + ptr_job->call_trans = callback; + // Need to enable shortpacket to send a ZLP (buf_size==0) + ptr_job->b_shortpacket = b_shortpacket || (buf_size==0); + ptr_job->b_use_out_cache_buffer = false; + + // Initialize value to simulate a empty transfer + if (USB_EP_DIR_IN == (ep & USB_EP_DIR_IN)) { + udd_endpoint_in_reset_nb_sent(ep_ctrl); + } + else + { + if ((USB_EP_TYPE_ISOCHRONOUS_gc == udd_endpoint_get_type(ep_ctrl)) + && (0 != (buf_size % udd_ep_get_size(ep_ctrl)))) { + // The user must use a buffer size modulo endpoint size + ptr_job->busy = false; + return false; + } + udd_endpoint_out_reset_nb_received(ep_ctrl); + udd_endpoint_out_set_nbbyte(ep_ctrl, 0); + } + // Request next transfer + udd_ep_trans_complet(ep); + return true; +} + +void udd_ep_abort(udd_ep_id_t ep) +{ + UDD_EP_t *ep_ctrl; + udd_ep_job_t *ptr_job; + Assert(udd_ep_is_valid(ep)); + + ep_ctrl = udd_ep_get_ctrl(ep); + ptr_job = udd_ep_get_job(ep); + + // Stop transfer + udd_endpoint_set_NACK0(ep_ctrl); + if (ptr_job->busy == false) { + return; // No job on going + } + ptr_job->busy = false; + if (NULL != ptr_job->call_trans) { + ptr_job->call_trans(UDD_EP_TRANSFER_ABORT, + (ep & USB_EP_DIR_IN) ? + udd_endpoint_in_nb_sent(ep_ctrl) + : udd_endpoint_out_nb_receiv(ep_ctrl), + ep); + } +} + +bool udd_ep_wait_stall_clear(udd_ep_id_t ep, + udd_callback_halt_cleared_t callback) +{ + udd_ep_job_t *ptr_job; + UDD_EP_t *ep_ctrl; + Assert(udd_ep_is_valid(ep)); + + ep_ctrl = udd_ep_get_ctrl(ep); + ptr_job = udd_ep_get_job(ep); + + if (udd_endpoint_is_stall(ep_ctrl)) { + // Wait clear halt endpoint + if (ptr_job->busy == true) { + return false; // Job already on going + } + ptr_job->busy = true; + ptr_job->call_nohalt = callback; + } else { + // endpoint not halted then call directly callback + callback(); + } + return true; +} +#endif // (0!=USB_DEVICE_MAX_EP) + +//-------------------------------------------------------- +//--- INTERNAL ROUTINES TO MANAGED GLOBAL EVENTS + +/** + * \internal + * \brief Function called by USB bus event interrupt + * + * USB bus event interrupt includes : + * - USB line events SOF, reset, suspend, resume, wakeup + * - endpoint control errors underflow, overflow, stall + */ +ISR(USB_BUSEVENT_vect) +{ + if (udd_is_start_of_frame_event()) { + udd_ack_start_of_frame_event(); + udc_sof_notify(); +#ifdef UDC_SOF_EVENT + UDC_SOF_EVENT(); +#endif + goto udd_interrupt_bus_event_end; + } + + if (udd_ctrl_interrupt_error()) { + goto udd_interrupt_bus_event_end; + } + if (udd_is_reset_event()) { + udd_ack_reset_event(); +#if (0!=USB_DEVICE_MAX_EP) + // Abort all endpoint jobs on going + uint8_t i; + for (i = 1; i < USB_DEVICE_MAX_EP; i++) { + udd_ep_abort(i); + udd_ep_abort(i | USB_EP_DIR_IN); + } +#endif + udc_reset(); + + // Reset USB address to 0 + udd_set_device_address(0); + // Alloc and configure control endpoint + udd_ep_init(0, USB_EP_TYPE_CONTROL, USB_DEVICE_EP_CTRL_SIZE); + udd_ep_init(0 | USB_EP_DIR_IN, USB_EP_TYPE_CONTROL, + USB_DEVICE_EP_CTRL_SIZE); + udd_control_out_set_buf(&udd_ctrl_buffer); + // Reset endpoint control management + udd_ctrl_init(); + goto udd_interrupt_bus_event_end; + } + + if (udd_is_suspend_event()) { + udd_ack_suspend_event(); + udd_sleep_mode(false); // Enter in SUSPEND mode +#ifdef UDC_SUSPEND_EVENT + UDC_SUSPEND_EVENT(); +#endif + goto udd_interrupt_bus_event_end; + } + + if (udd_is_resume_event()) { + udd_ack_resume_event(); + udd_sleep_mode(true); // Enter in power reduction mode +#ifdef UDC_RESUME_EVENT + UDC_RESUME_EVENT(); +#endif + goto udd_interrupt_bus_event_end; + } + +udd_interrupt_bus_event_end: + return; +} + +/** + * \internal + * \brief Function called by USB transfer complete interrupt + * + * USB transfer complete interrupt includes events about endpoint transfer on all endpoints. + */ +ISR(USB_TRNCOMPL_vect) +{ +#if (0!=USB_DEVICE_MAX_EP) + uint8_t ep_index; + uint8_t i_fifo; + uint16_t ad; + uint16_t *p_ad; + int8_t rp; + UDD_EP_t *ep_ctrl; + udd_ep_id_t ep; +#endif + + if (!udd_is_tc_event()) { + // If no other transfer complete + // then check reception of SETUP packet on control endpoint + if (udd_ctrl_interrupt_tc_setup()) { + // Interrupt acked by control endpoint managed + goto udd_interrupt_tc_end; + } + Assert(false); + } + // Check IN/OUT transfer complete on all endpoints + udd_ack_tc_event(); + +#if (0!=USB_DEVICE_MAX_EP) + //** Decode TC FIFO + // Compute ep addr + rp = udd_get_fifo_rp(); + i_fifo = 2 * (1 + ~rp); + ad = ((uint16_t) udd_sram.ep_ctrl) - i_fifo; + p_ad = (uint16_t *) ad; + // Compute ep + ep_index = (((uint16_t) * p_ad - ((uint16_t) udd_sram.ep_ctrl)) >> 3); + ep = (ep_index / 2) + ((ep_index & 1) ? USB_EP_DIR_IN : 0); + Assert(USB_DEVICE_MAX_EP >= (ep & USB_EP_ADDR_MASK)); + + // Ack IT TC of endpoint + ep_ctrl = udd_ep_get_ctrl(ep); + if (!udd_endpoint_transfer_complete(ep_ctrl)) { + return; // Error, TC is generated by Multipacket transfer + } + udd_endpoint_ack_transfer_complete(ep_ctrl); + + // Check status on control endpoint + if (ep == 0) { + udd_ctrl_out_received(); + goto udd_interrupt_tc_end; // Interrupt acked by control endpoint managed + } + if (ep == (0 | USB_EP_DIR_IN)) { + udd_ctrl_in_sent(); + goto udd_interrupt_tc_end; // Interrupt acked by control endpoint managed + } + Assert(udd_ep_is_valid(ep)); + // Manage end of transfer on endpoint bulk/interrupt/isochronous + udd_ep_trans_complet(ep); + +#else + + udd_get_fifo_rp(); + if (udd_endpoint_transfer_complete(udd_ep_get_ctrl(0))) { + udd_endpoint_ack_transfer_complete(udd_ep_get_ctrl(0)); + udd_ctrl_out_received(); + }else{ + udd_endpoint_ack_transfer_complete(udd_ep_get_ctrl(0 | USB_EP_DIR_IN)); + udd_ctrl_in_sent(); + } +#endif + +udd_interrupt_tc_end: + return; +} + +//-------------------------------------------------------- +//--- INTERNAL ROUTINES TO INITIALIZE ENDPOINT + +static void udd_ep_init(udd_ep_id_t ep, uint8_t bmAttributes, + uint16_t MaxEndpointSize) +{ + USB_EP_TYPE_t type; + USB_EP_BUFSIZE_t size; + UDD_EP_t *ep_ctrl; + +#if (0!=USB_DEVICE_MAX_EP) + // Translate USB attribute to hardware defines + switch (bmAttributes & USB_EP_TYPE_MASK) { + case USB_EP_TYPE_CONTROL: + type = USB_EP_TYPE_CONTROL_gc; + break; + case USB_EP_TYPE_ISOCHRONOUS: + type = USB_EP_TYPE_ISOCHRONOUS_gc; + break; + case USB_EP_TYPE_BULK: + case USB_EP_TYPE_INTERRUPT: //interrupt behaves as bulk + type = USB_EP_TYPE_BULK_gc; + break; + default: + Assert(false); // Wrong value + return; + } +#else + type = USB_EP_TYPE_CONTROL_gc; +#endif + + // Translate USB endpoint size to hardware defines + switch (MaxEndpointSize) { + default: + Assert(false); // Wrong value + case 8: + size = USB_EP_BUFSIZE_8_gc; + break; + case 16: + size = USB_EP_BUFSIZE_16_gc; + break; + case 32: + size = USB_EP_BUFSIZE_32_gc; + break; + case 64: + size = USB_EP_BUFSIZE_64_gc; + break; +#if (0!=USB_DEVICE_MAX_EP) + case 128: + size = USB_EP_BUFSIZE_128_gc; + break; + case 256: + size = USB_EP_BUFSIZE_256_gc; + break; + case 512: + size = USB_EP_BUFSIZE_512_gc; + break; + case 1023: + size =USB_EP_BUFSIZE_1023_gc; + break; +#endif + } + + // Enable endpoint + ep_ctrl = udd_ep_get_ctrl(ep); + udd_endpoint_disable(ep_ctrl); + udd_endpoint_clear_status(ep_ctrl); + udd_endpoint_set_control(ep_ctrl, (uint8_t) type | (uint8_t) size); +} + +static UDD_EP_t *udd_ep_get_ctrl(udd_ep_id_t ep) +{ + return &udd_sram.ep_ctrl[(2 * (ep & USB_EP_ADDR_MASK) + + ((ep & USB_EP_DIR_IN) ? 1 : 0))]; +} + + +//-------------------------------------------------------- +//--- INTERNAL ROUTINES TO MANAGED THE CONTROL ENDPOINT + +static void udd_ctrl_init(void) +{ + udd_disable_overflow_interrupt(); + udd_disable_underflow_interrupt(); + + // Clear status flag from control endpoints + // Mandatory for ATxmega128A1 Rev. K + udd_control_in_set_NACK0(); + udd_control_in_set_bytecnt(0); + udd_control_in_ack_tc(); + udd_control_ack_in_underflow(); + udd_control_out_ack_tc(); + udd_control_ack_out_overflow(); + + udd_g_ctrlreq.callback = NULL; + udd_g_ctrlreq.over_under_run = NULL; + udd_g_ctrlreq.payload_size = 0; + udd_ep_control_state = UDD_EPCTRL_SETUP; +} + +static void udd_ctrl_setup_received(void) +{ + if (UDD_EPCTRL_SETUP != udd_ep_control_state) { + if ((UDD_EPCTRL_HANDSHAKE_WAIT_IN_ZLP == udd_ep_control_state) + || (UDD_EPCTRL_HANDSHAKE_WAIT_OUT_ZLP == udd_ep_control_state)) { + // Accept that ZLP event can be hidden by setup packet event + // in case of setup packet sending quickly after a ZLP + udd_ctrl_endofrequest(); + } + // Reinitializes control endpoint management + udd_ctrl_init(); + } + // Fill setup request structure + if (8 != udd_control_out_get_bytecnt()) + return; // Error data number don't correspond to SETUP packet + memcpy((uint8_t *) & udd_g_ctrlreq.req, udd_ctrl_buffer, 8); + + // To detect a protocol error on setup, enable nak interrupt on IN/OUT of control endpoint + udd_enable_overflow_interrupt(); + udd_enable_underflow_interrupt(); + + // Decode setup request + if (udc_process_setup() == false) { + // Setup request unknown then stall it + udd_ctrl_stall_data(); + return; + } + + if (Udd_setup_is_in()) { + udd_ctrl_prev_payload_nb_trans = 0; + udd_ctrl_payload_nb_trans = 0; + udd_ep_control_state = UDD_EPCTRL_DATA_IN; + udd_ctrl_in_sent(); // Send first data transfer + } else { + if (0 == udd_g_ctrlreq.req.wLength) { + // No data phase requested + // Send IN ZLP to ACK setup request + udd_ctrl_send_zlp_in(); + return; + } + // OUT data phase requested + udd_ctrl_prev_payload_nb_trans = 0; + udd_ctrl_payload_nb_trans = 0; + udd_ep_control_state = UDD_EPCTRL_DATA_OUT; + // Clear packet to receive first packet + udd_control_out_clear_NACK0(); + } +} + +static void udd_ctrl_in_sent(void) +{ + static bool b_shortpacket = false; + uint16_t nb_remain; + + if (UDD_EPCTRL_HANDSHAKE_WAIT_IN_ZLP == udd_ep_control_state) { + // ZLP on IN is sent, then valid end of setup request + udd_ctrl_endofrequest(); + // Reinitializes control endpoint management + udd_ctrl_init(); + return; + } + Assert(udd_ep_control_state == UDD_EPCTRL_DATA_IN); + + nb_remain = udd_g_ctrlreq.payload_size - udd_ctrl_payload_nb_trans; + if (0 == nb_remain) { + // Update number of total data sending by previous playload buffer + udd_ctrl_prev_payload_nb_trans += udd_ctrl_payload_nb_trans; + if ((udd_g_ctrlreq.req.wLength == udd_ctrl_prev_payload_nb_trans) + || b_shortpacket) { + // All data requested are transfered or a short packet has been sent + // then it is the end of data phase. + // Generate an OUT ZLP for handshake phase. + udd_ctrl_send_zlp_out(); + return; + } + // Need of new buffer because the data phase is not complete + if ((!udd_g_ctrlreq.over_under_run) + || (!udd_g_ctrlreq.over_under_run())) { + // Underrun then send zlp on IN + // nb_remain == 0 allows to send a IN ZLP + } else { + // A new payload buffer is given + udd_ctrl_payload_nb_trans = 0; + nb_remain = udd_g_ctrlreq.payload_size; + } + } + // Continue transfer an send next data + if (nb_remain >= USB_DEVICE_EP_CTRL_SIZE) { + nb_remain = USB_DEVICE_EP_CTRL_SIZE; + b_shortpacket = false; + } else { + b_shortpacket = true; + } + udd_control_in_set_bytecnt(nb_remain); + + // Link payload buffer directly on USB hardware + udd_control_in_set_buf(udd_g_ctrlreq.payload + udd_ctrl_payload_nb_trans); + udd_ctrl_payload_nb_trans += nb_remain; + + // Valid and sent the data available in control endpoint buffer + udd_control_in_clear_NACK0(); +} + +static void udd_ctrl_out_received(void) +{ + uint16_t nb_data; + + if (UDD_EPCTRL_HANDSHAKE_WAIT_OUT_ZLP == udd_ep_control_state) { + // Valid end of setup request + udd_ctrl_endofrequest(); + // Reinitializes control endpoint management + udd_ctrl_init(); + return; + } + Assert(udd_ep_control_state == UDD_EPCTRL_DATA_OUT); + + // Read data received during OUT phase + nb_data = udd_control_out_get_bytecnt(); + + if (udd_g_ctrlreq.payload_size < (udd_ctrl_payload_nb_trans + nb_data)) { + // Payload buffer too small, ignore data remaining + nb_data = udd_g_ctrlreq.payload_size - udd_ctrl_payload_nb_trans; + } + + memcpy((uint8_t *) (udd_g_ctrlreq.payload + udd_ctrl_payload_nb_trans), + udd_ctrl_buffer, nb_data); + udd_ctrl_payload_nb_trans += nb_data; + + if ((USB_DEVICE_EP_CTRL_SIZE != nb_data) || (udd_g_ctrlreq.req.wLength + <= (udd_ctrl_prev_payload_nb_trans + + udd_ctrl_payload_nb_trans))) { + // End of reception because it is a short packet + // or all data are transfered + + // Before send ZLP, call intermediate callback + // in case of data receive generate a stall + udd_g_ctrlreq.payload_size = udd_ctrl_payload_nb_trans; + if (NULL != udd_g_ctrlreq.over_under_run) { + if (!udd_g_ctrlreq.over_under_run()) { + // Stall ZLP + udd_ctrl_stall_data(); + return; + } + } + // Send IN ZLP to ACK setup request + udd_ctrl_send_zlp_in(); + return; + } + + if (udd_g_ctrlreq.payload_size == udd_ctrl_payload_nb_trans) { + // Overrun then request a new payload buffer + if (!udd_g_ctrlreq.over_under_run) { + // No callback available to request a new payload buffer + udd_ctrl_stall_data(); + return; + } + if (!udd_g_ctrlreq.over_under_run()) { + // No new payload buffer delivered + udd_ctrl_stall_data(); + return; + } + // New payload buffer available + // Update number of total data received + udd_ctrl_prev_payload_nb_trans += udd_ctrl_payload_nb_trans; + // Reinit reception on payload buffer + udd_ctrl_payload_nb_trans = 0; + } + // Free buffer of OUT control endpoint to authorize next reception + udd_control_out_clear_NACK0(); +} + +static void udd_ctrl_underflow(void) +{ + if (udd_is_tc_event() || udd_ctrl_interrupt_tc_setup()) { + return; // underflow ignored if a transfer complete has been no processed + } + if (UDD_EPCTRL_DATA_OUT == udd_ep_control_state) { + // Host want to stop OUT transaction + // then stop to wait OUT data phase and wait IN ZLP handshake + udd_ctrl_send_zlp_in(); + } else if (UDD_EPCTRL_HANDSHAKE_WAIT_OUT_ZLP == udd_ep_control_state) { + // A OUT handshake is waiting by device, + // but host want extra IN data then stall extra IN data and following status stage + udd_control_in_enable_stall(); + udd_control_out_enable_stall(); + } +} + +static void udd_ctrl_overflow(void) +{ + if (udd_is_tc_event() || udd_ctrl_interrupt_tc_setup()) { + return; // overflow ignored if a transfer complete has been no processed + } + if (UDD_EPCTRL_DATA_IN == udd_ep_control_state) { + // Host want to stop IN transaction + // then stop to wait IN data phase and wait OUT ZLP handshake + udd_ctrl_send_zlp_out(); + } else if (UDD_EPCTRL_HANDSHAKE_WAIT_IN_ZLP == udd_ep_control_state) { + // A IN handshake is waiting by device, + // but host want extra OUT data then stall extra OUT data and following status stage + udd_control_in_enable_stall(); + udd_control_out_enable_stall(); + } +} + +static void udd_ctrl_stall_data(void) +{ + // Stall all packets on IN & OUT control endpoint + udd_ep_control_state = UDD_EPCTRL_STALL_REQ; + udd_control_in_enable_stall(); + udd_control_out_enable_stall(); +} + +static void udd_ctrl_send_zlp_in(void) +{ + udd_ep_control_state = UDD_EPCTRL_HANDSHAKE_WAIT_IN_ZLP; + // Valid and sent empty IN packet on control endpoint + udd_control_in_set_bytecnt(0); + udd_control_in_clear_NACK0(); +} + +static void udd_ctrl_send_zlp_out(void) +{ + udd_ep_control_state = UDD_EPCTRL_HANDSHAKE_WAIT_OUT_ZLP; + // Valid reception of OUT packet on control endpoint + udd_control_out_clear_NACK0(); +} + +static void udd_ctrl_endofrequest(void) +{ + // If a callback is registered then call it + if (udd_g_ctrlreq.callback) { + udd_g_ctrlreq.callback(); + } +} + +static bool udd_ctrl_interrupt_error(void) +{ + // Underflow only managed for control endpoint + if (udd_is_underflow_event()) { + udd_ack_underflow_event(); + if (udd_control_in_underflow()) { + udd_ctrl_underflow(); + } + return true; + } + // Overflow only managed for control endpoint + if (udd_is_overflow_event()) { + udd_ack_overflow_event(); + if (udd_control_out_overflow()) { + udd_ctrl_overflow(); + } + return true; + } + return false; +} + +static bool udd_ctrl_interrupt_tc_setup(void) +{ + if (!udd_is_setup_event()) { + return false; + } + udd_ack_setup_event(); + + // Clear eventually previous stall events + udd_control_out_ack_stall(); + udd_control_in_ack_stall(); + udd_ack_stall_event(); + + Assert(udd_control_setup()); // A setup must be received on control endpoint + + // Ack SETUP packet and decode request + udd_control_ack_setup(); + udd_ctrl_setup_received(); + return true; +} + + +//-------------------------------------------------------- +//--- INTERNAL ROUTINES TO MANAGED THE BULK/INTERRUPT/ISOCHRONOUS ENDPOINTS + +#if (0!=USB_DEVICE_MAX_EP) + +static uint16_t udd_ep_get_size(UDD_EP_t * ep_ctrl) +{ + // Translate hardware defines to USB endpoint size + switch (udd_endpoint_get_size_field(ep_ctrl)) { + default: + case USB_EP_BUFSIZE_8_gc: + return 8; + case USB_EP_BUFSIZE_16_gc: + return 16; + case USB_EP_BUFSIZE_32_gc: + return 32; + case USB_EP_BUFSIZE_64_gc: + return 64; + case USB_EP_BUFSIZE_128_gc: + return 128; + case USB_EP_BUFSIZE_256_gc: + return 256; + case USB_EP_BUFSIZE_512_gc: + return 512; + case USB_EP_BUFSIZE_1023_gc: + return 1023; + } +} + +static udd_ep_job_t *udd_ep_get_job(udd_ep_id_t ep) +{ + return &udd_ep_job[(2 * (ep & USB_EP_ADDR_MASK) + + ((ep & USB_EP_DIR_IN) ? 1 : 0)) - 2]; +} + +bool udd_ep_is_valid(udd_ep_id_t ep) +{ + ep &= USB_EP_ADDR_MASK; + if (ep == 0) { + return false; + } + return (USB_DEVICE_MAX_EP >= ep); +} + +static void udd_ep_trans_complet(udd_ep_id_t ep) +{ + UDD_EP_t *ep_ctrl; + udd_ep_job_t *ptr_job; + uint16_t ep_size, nb_trans; + iram_size_t next_trans; + + ptr_job = udd_ep_get_job(ep); + ep_ctrl = udd_ep_get_ctrl(ep); + ep_size = udd_ep_get_size(ep_ctrl); + + if (USB_EP_DIR_IN == (ep & USB_EP_DIR_IN)) { + // Transfer complete on IN + nb_trans = udd_endpoint_in_nb_sent(ep_ctrl); + + // Update number of data transfered + ptr_job->nb_trans += nb_trans; + + // Need to send other data + if (ptr_job->nb_trans != ptr_job->buf_size) { + next_trans = ptr_job->buf_size - ptr_job->nb_trans; + if (UDD_ENDPOINT_MAX_TRANS < next_trans) { + // The USB hardware support a maximum + // transfer size of UDD_ENDPOINT_MAX_TRANS Bytes + next_trans = UDD_ENDPOINT_MAX_TRANS - + (UDD_ENDPOINT_MAX_TRANS % ep_size); + } + // Need ZLP, if requested and last packet is not a short packet + ptr_job->b_shortpacket = ptr_job->b_shortpacket + && (0==(next_trans % ep_size)); + udd_endpoint_in_reset_nb_sent(ep_ctrl); + udd_endpoint_in_set_bytecnt(ep_ctrl, next_trans); + // Link the user buffer directly on USB hardware DMA + udd_endpoint_set_buf(ep_ctrl, &ptr_job->buf[ptr_job->nb_trans]); + udd_endpoint_clear_NACK0(ep_ctrl); + return; + } + + // Need to send a ZLP after all data transfer + if (ptr_job->b_shortpacket) { + ptr_job->b_shortpacket = false; + udd_endpoint_in_reset_nb_sent(ep_ctrl); + udd_endpoint_in_set_bytecnt(ep_ctrl, 0); + udd_endpoint_clear_NACK0(ep_ctrl); + return; + } + } + else + { + // Transfer complete on OUT + nb_trans = udd_endpoint_out_nb_receiv(ep_ctrl); + + // Can be necessary to copy data receive from cache buffer to user buffer + if (ptr_job->b_use_out_cache_buffer) { + memcpy(&ptr_job->buf[ptr_job->nb_trans] + , udd_ep_out_cache_buffer[ep - 1] + , ptr_job->buf_size % ep_size); + } + + // Update number of data transfered + ptr_job->nb_trans += nb_trans; + if (ptr_job->nb_trans > ptr_job->buf_size) { + ptr_job->nb_trans = ptr_job->buf_size; + } + + // If all previous data requested are received and user buffer not full + // then need to receive other data + if ((nb_trans == udd_endpoint_out_get_nbbyte_requested(ep_ctrl)) + && (ptr_job->nb_trans != ptr_job->buf_size)) { + next_trans = ptr_job->buf_size - ptr_job->nb_trans; + if (UDD_ENDPOINT_MAX_TRANS < next_trans) { + // The USB hardware support a maximum transfer size + // of UDD_ENDPOINT_MAX_TRANS Bytes + next_trans = UDD_ENDPOINT_MAX_TRANS + - (UDD_ENDPOINT_MAX_TRANS % ep_size); + } else { + next_trans -= next_trans % ep_size; + } + + udd_endpoint_out_reset_nb_received(ep_ctrl); + if (next_trans < ep_size) { + // Use the cache buffer for Bulk or Interrupt size endpoint + ptr_job->b_use_out_cache_buffer = true; + udd_endpoint_set_buf( ep_ctrl, + udd_ep_out_cache_buffer[ep - 1]); + udd_endpoint_out_set_nbbyte(ep_ctrl, ep_size); + } else { + // Link the user buffer directly on USB hardware DMA + udd_endpoint_set_buf(ep_ctrl, &ptr_job->buf[ptr_job->nb_trans]); + udd_endpoint_out_set_nbbyte(ep_ctrl, next_trans); + } + // Start transfer + udd_endpoint_clear_NACK0(ep_ctrl); + return; + } + } + + // Job complete then call callback + if (ptr_job->busy) { + ptr_job->busy = false; + if (NULL != ptr_job->call_trans) { + ptr_job->call_trans(UDD_EP_TRANSFER_OK, + ptr_job->nb_trans, + ep); + } + } + return; +} +#endif // (0!=USB_DEVICE_MAX_EP) +//@} diff --git a/AVR Code/USB_BULK_TEST/src/ASF/xmega/drivers/usb/usb_device.h b/AVR Code/USB_BULK_TEST/src/ASF/xmega/drivers/usb/usb_device.h new file mode 100644 index 00000000..351c0ef9 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/xmega/drivers/usb/usb_device.h @@ -0,0 +1,390 @@ +/** + * \file + * + * \brief USB Driver header file for XMEGA products including USB interface. + * + * Copyright (c) 2011-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ + +#ifndef _USB_DEVICE_H_ +#define _USB_DEVICE_H_ + +#include + +/** + * \ingroup udd_group + * \defgroup udd_xmega_usb_group Xmega USB Device Driver + * USBC low-level driver for USB Device mode + * + * + * @{ + */ + +//! @name USB Device main management +//! @{ + +/** + * \brief Initializes the USB DP/DM buffers + * + * This functions initializes the USB buffer using the calibration value + * stored in production raw. + * If the calibration value is not found (0xFF) value, a default typical + * value is applied. + * Alternatively user can force calibration values using USB_PAD_USER_CAL0 + * and USB_PAD_USER_CAL1 + * + */ +static inline void usb_pad_init(void) +{ + uint8_t cal; + +#ifdef USB_PAD_USER_CAL0 + USB_CAL0 = USB_PAD_USER_CAL0; +#else + cal = nvm_read_production_signature_row + (nvm_get_production_signature_row_offset(USBCAL0)); + if (cal != 0xFF) { + USB_CAL0 = cal; + } else { + USB_CAL0 = 0x1F; + } +#endif + +#ifdef USB_PAD_USER_CAL1 + USB_CAL1 = USB_PAD_USER_CAL1; +#else + cal = nvm_read_production_signature_row + (nvm_get_production_signature_row_offset(USBCAL1)); + if (cal != 0xFF) { + USB_CAL1 = cal; + } else { + USB_CAL1 = 0x1F; + } +#endif +} + +#define udd_enable_interface() (USB_CTRLA |= USB_ENABLE_bm) +#define udd_disable_interface() (USB_CTRLA &= ~USB_ENABLE_bm) +#define udd_attach_device() (USB_CTRLB |= USB_ATTACH_bm) +#define udd_detach_device() (USB_CTRLB &= ~USB_ATTACH_bm) +#define udd_gnak_disable() (USB_CTRLB &= ~USB_GNACK_bm) +#define udd_gnak_enable() (USB_CTRLB |= USB_GNACK_bm) +#define udd_gnak_is_enable() (USB_CTRLB & USB_GNACK_bm) +#define udd_set_nb_max_ep(n) (USB_CTRLA |= n) +#define udd_enable_store_frame_number() (USB_CTRLA |= USB_STFRNUM_bm) +#define udd_disable_store_frame_number() (USB_CTRLA &= ~USB_STFRNUM_bm) +#define udd_set_full_speed() (USB_CTRLA |= USB_SPEED_bm) +#define udd_set_low_speed() (USB_CTRLA &= ~USB_SPEED_bm) +#define udd_set_ep_table_addr(n) (USB.EPPTR = (uint16_t)n) +#define udd_get_ep_table_addr() (USB.EPPTR) +#define udd_get_fifo_rp() (USB_FIFORP) +#define udd_reset_fifo() (USB_FIFORP=0xFF) +#define udd_enable_interrupt(level) (USB_INTCTRLA |= level&(USB_INTLVL1_bm|USB_INTLVL0_bm)) + +#define udd_set_device_address(n) (USB_ADDR=n) +#define udd_get_device_address() (USB_ADDR) +#define udd_enable_fifo() (USB_CTRLA |= USB_FIFOEN_bm) +#define udd_disable_fifo() (USB_CTRLA &= ~USB_FIFOEN_bm) + +#define udd_send_remote_wake_up() (USB_CTRLB &= ~USB_RWAKEUP_bm, USB_CTRLB |= USB_RWAKEUP_bm) +#define udd_set_global_nack() (USB_CTRLB |= USB_GNACK_bm) +#define udd_is_crc_event() (USB_INTFLAGSASET & USB_CRCIF_bm ? true : false) +#define udd_ack_crc_event() (USB_INTFLAGSACLR = USB_CRCIF_bm) +#define udd_set_crc_event() (USB_INTFLAGSASET = USB_CRCIF_bm) +#define udd_enable_crc_interrupt() (USB_INTCTRLA |= USB_CRCIE_bm) +#define udd_disable_crc_interrupt() (USB_INTCTRLA &= ~USB_CRCIE_bm) + +#define udd_is_start_of_frame_event() (USB_INTFLAGSASET & USB_SOFIF_bm ? true : false) +#define udd_ack_start_of_frame_event() (USB_INTFLAGSACLR = USB_SOFIF_bm) +#define udd_set_start_of_frame_event() (USB_INTFLAGSASET = USB_SOFIF_bm) +#define udd_enable_start_of_frame_interrupt() (USB_INTCTRLA |= USB_SOFIE_bm) +#define udd_disable_start_of_frame_interrupt() (USB_INTCTRLA &= ~USB_SOFIE_bm) +#define udd_is_enable_start_of_frame_interrupt() (0!=(USB_INTCTRLA|USB_SOFIE_bm)) + +#define udd_is_reset_event() (USB_INTFLAGSASET & USB_RSTIF_bm ? true : false) +#define udd_ack_reset_event() (USB_INTFLAGSACLR = USB_RSTIF_bm) +#define udd_set_reset_event() (USB_INTFLAGSASET = USB_RSTIF_bm) + +#define udd_is_suspend_event() (USB_INTFLAGSASET & USB_SUSPENDIF_bm ? true : false) +#define udd_ack_suspend_event() (USB_INTFLAGSACLR = USB_SUSPENDIF_bm) +#define udd_set_suspend_event() (USB_INTFLAGSASET = USB_SUSPENDIF_bm) + +#define udd_is_resume_event() (USB_INTFLAGSASET & USB_RESUMEIF_bm ? true : false) +#define udd_ack_resume_event() (USB_INTFLAGSACLR = USB_RESUMEIF_bm) +#define udd_set_resume_event() (USB_INTFLAGSASET = USB_RESUMEIF_bm) + +#define udd_enable_busevt_interrupt() (USB_INTCTRLA |= USB_BUSEVIE_bm) +#define udd_disable_busevt_interrupt() (USB_INTCTRLA &= ~USB_BUSEVIE_bm) + +#define udd_is_setup_event() (USB_INTFLAGSBCLR & USB_SETUPIF_bm ? true : false) +#define udd_ack_setup_event() (USB_INTFLAGSBCLR = USB_SETUPIF_bm) +#define udd_set_setup_event() (USB_INTFLAGSBSET = USB_SETUPIF_bm) +#define udd_enable_setup_interrupt() (USB_INTCTRLB |= USB_SETUPIE_bm) +#define udd_disable_setup_interrupt() (USB_INTCTRLB &= ~USB_SETUPIE_bm) + +#define udd_is_tc_event() (USB_INTFLAGSBCLR & USB_TRNIF_bm ? true : false) +#define udd_ack_tc_event() (USB_INTFLAGSBCLR = USB_TRNIF_bm) +#define udd_set_tc_event() (USB_INTFLAGSBSET = USB_TRNIF_bm) +#define udd_enable_tc_interrupt() (USB_INTCTRLB |= USB_TRNIE_bm) +#define udd_disable_tc_interrupt() (USB_INTCTRLB &= ~USB_TRNIE_bm) + +#define udd_is_overflow_event() (USB_INTFLAGSASET & USB_OVFIF_bm ? true : false) +#define udd_ack_overflow_event() (USB_INTFLAGSACLR = USB_OVFIF_bm) +#define udd_set_overflow_event() (USB_INTFLAGSASET = USB_OVFIF_bm) +#define udd_enable_overflow_interrupt() (USB_INTCTRLA |= USB_BUSERRIE_bm) +#define udd_disable_overflow_interrupt() (USB_INTCTRLA &= ~USB_BUSERRIE_bm) +#define udd_is_enable_overflow_interrupt() (USB_INTCTRLA&USB_BUSERRIE_bm ? true : false) + +#define udd_is_underflow_event() (USB_INTFLAGSASET & USB_UNFIF_bm ? true : false) +#define udd_ack_underflow_event() (USB_INTFLAGSACLR = USB_UNFIF_bm) +#define udd_set_underflow_event() (USB_INTFLAGSASET = USB_UNFIF_bm) +#define udd_enable_underflow_interrupt() (USB_INTCTRLA |= USB_BUSERRIE_bm) +#define udd_disable_underflow_interrupt() (USB_INTCTRLA &= ~USB_BUSERRIE_bm) +#define udd_is_enable_underflow_interrupt() (USB_INTCTRLA&USB_BUSERRIE_bm ? true : false) + +#define udd_is_stall_event() (USB_INTFLAGSASET & USB_STALLIF_bm ? true : false) +#define udd_ack_stall_event() (USB_INTFLAGSACLR = USB_STALLIF_bm) +#define udd_set_stall_event() (USB_INTFLAGSASET = USB_STALLIF_bm) +#define udd_enable_stall_interrupt() (USB_INTCTRLA |= USB_STALLIE_bm) +#define udd_disable_stall_interrupt() (USB_INTCTRLA &= ~USB_STALLIE_bm) +#define udd_is_enable_stall_interrupt() (USB_INTCTRLA&USB_STALLIE_bm ? true : false) +//! @} + +//! @name USB Device read/modify/write management +//! @{ +#ifndef USB_WORKAROUND_DO_NOT_USE_RMW +/* + * Read modify write new instructions for Xmega + * inline asm implementation with R16 register. + * This should be removed later on when the new instructions + * will be available within the compiler. + * + */ +// Load and Clear +#ifdef __GNUC__ +#define LACR16(addr,msk) \ + __asm__ __volatile__ ( \ + "ldi r16, %1" "\n\t" \ + ".dc.w 0x9306" "\n\t"\ + ::"z" (addr), "M" (msk):"r16") +#else +#define LACR16(addr,msk) __lac((unsigned char)msk,(unsigned char*)addr) +#endif + +// Load and Set +#ifdef __GNUC__ +#define LASR16(addr,msk) \ + __asm__ __volatile__ ( \ + "ldi r16, %1" "\n\t" \ + ".dc.w 0x9305" "\n\t"\ + ::"z" (addr), "M" (msk):"r16") +#else +#define LASR16(addr,msk) __las((unsigned char)msk,(unsigned char*)addr) +#endif + +// Exchange +#ifdef __GNUC__ +#define XCHR16(addr,msk) \ + __asm__ __volatile__ ( \ + "ldi r16, %1" "\n\t" \ + ".dc.w 0x9304" "\n\t"\ + ::"z" (addr), "M" (msk):"r16") +#else +#define XCHR16(addr,msk) __xch(msk,addr) +#endif + +// Load and toggle +#ifdef __GNUC__ +#define LATR16(addr,msk) \ + __asm__ __volatile__ ( \ + "ldi r16, %1" "\n\t" \ + ".dc.w 0x9307" "\n\t"\ + ::"z" (addr), "M" (msk):"r16") +#else +#define LATR16(addr,msk) __lat(msk,addr) +#endif + +#else + +// Load and Clear +#define LACR16(addr,msk) (*addr &= ~msk) +// Load and Set +#define LASR16(addr,msk)(*addr |= msk) + +#endif +//! @} + + +//! @name USB Device endpoints table management +//! @{ + +#define udd_endpoint_set_control(ep_ctrl,val) (ep_ctrl->CTRL=val) +#define udd_endpoint_get_control(ep_ctrl) (ep_ctrl->CTRL) + +#define udd_endpoint_disable(ep_ctrl) udd_endpoint_set_control(ep_ctrl,0) +#define udd_endpoint_is_enable(ep_ctrl) (USB_EP_TYPE_DISABLE_gc!=udd_endpoint_get_type(ep_ctrl)) + + +#define udd_endpoint_enable_stall(ep_ctrl) (ep_ctrl->CTRL |= USB_EP_STALL_bm) +#define udd_endpoint_disable_stall(ep_ctrl) (ep_ctrl->CTRL &= ~USB_EP_STALL_bm) +#define udd_endpoint_is_stall(ep_ctrl) (ep_ctrl->CTRL &USB_EP_STALL_bm ? true : false) +#define udd_endpoint_set_multipacket(ep_ctrl) (ep_ctrl->CTRL |= USB_EP_MULTIPKT_bm) +#define udd_endpoint_TC_int_disable(ep_ctrl) (ep_ctrl->CTRL |= USB_EP_INTDSBL_bm) +#define udd_endpoint_set_pingpong(ep_ctrl) (ep_ctrl->CTRL |= USB_EP_PINGPONG_bm) +#define udd_endpoint_get_size_field(ep_ctrl) (ep_ctrl->CTRL & USB_EP_BUFSIZE_gm) +#define udd_endpoint_get_type(ep_ctrl) (ep_ctrl->CTRL & USB_EP_TYPE_gm) + +#define udd_endpoint_get_status(ep_ctrl) (ep_ctrl->STATUS) +#define udd_endpoint_clear_status(ep_ctrl) (ep_ctrl->STATUS=USB_EP_BUSNACK0_bm|USB_EP_BUSNACK1_bm) + +#define udd_endpoint_setup_received(ep_ctrl) (ep_ctrl->STATUS&USB_EP_SETUP_bm ? true : false) +#define udd_endpoint_ack_setup_received(ep_ctrl) LACR16(&ep_ctrl->STATUS, USB_EP_SETUP_bm) + +#define udd_endpoint_transfer_complete(ep_ctrl) (ep_ctrl->STATUS&USB_EP_TRNCOMPL0_bm ? true : false) +#define udd_endpoint_ack_transfer_complete(ep_ctrl) LACR16(&(ep_ctrl->STATUS), USB_EP_TRNCOMPL0_bm) +#define udd_endpoint_transfer_complete_bank0(ep_ctrl) (ep_ctrl->STATUS&USB_EP_TRNCOMPL0_bm ? true : false) +#define udd_endpoint_ack_transfer_complete_bankO(ep_ctrl) LACR16(&ep_ctrl->STATUS, USB_EP_TRNCOMPL0_bm) +#define udd_endpoint_transfer_complete_bank1(ep_ctrl) (ep_ctrl->STATUS&USB_EP_SETUP_bm ? true : false) +#define udd_endpoint_ack_transfer_complete_bank1(ep_ctrl) LACR16(&ep_ctrl->STATUS, USB_EP_SETUP_bm) + +#define udd_endpoint_get_bank(ep_ctrl) (ep_ctrl->STATUS & USB_EP_BANK_bm ? true : false) +#define udd_endpoint_set_bank(ep_ctrl) LASR16(&ep_ctrl->STATUS, USB_EP_BANK_bm) +#define udd_endpoint_clear_bank(ep_ctrl) LACR16(&ep_ctrl->STATUS, USB_EP_BANK_bm) + +#define udd_endpoint_set_dtgl(ep_ctrl) LASR16(&ep_ctrl->STATUS,USB_EP_TOGGLE_bm) +#define udd_endpoint_clear_dtgl(ep_ctrl) LACR16(&ep_ctrl->STATUS, USB_EP_TOGGLE_bm ) +#define udd_endpoint_get_dtgl(ep_ctrl) ((ep_ctrl->STATUS)&USB_EP_TOGGLE_bm ? true : false) +#define udd_endpoint_toggle_dtgl(ep_ctrl) LATR16(&ep_ctrl->STATUS, USB_EP_TOGGLE_bm) + +#define udd_endpoint_set_NACK0(ep_ctrl) LASR16(&ep_ctrl->STATUS,USB_EP_BUSNACK0_bm) +#define udd_endpoint_set_NACK1(ep_ctrl) LASR16(&ep_ctrl->STATUS,USB_EP_BUSNACK1_bm) +#define udd_endpoint_clear_NACK0(ep_ctrl) LACR16(&ep_ctrl->STATUS, USB_EP_BUSNACK0_bm) +#define udd_endpoint_clear_NACK1(ep_ctrl) LACR16(&ep_ctrl->STATUS, USB_EP_BUSNACK1_bm) +#define udd_endpoint_get_NACK1(ep_ctrl) ((ep_ctrl->STATUS&USB_EP_BUSNACK1_bm) ? true : false) +#define udd_endpoint_get_NACK0(ep_ctrl) ((ep_ctrl->STATUS&USB_EP_BUSNACK0_bm) ? true : false) +#define udd_endpoint_overflow(ep_ctrl) (ep_ctrl->STATUS&USB_EP_OVF_bm ? true : false) +#define udd_endpoint_underflow(ep_ctrl) (ep_ctrl->STATUS&USB_EP_UNF_bm ? true : false) + +#define UDD_ENDPOINT_MAX_TRANS (0x3FF) + +#define udd_endpoint_out_nb_receiv(ep_ctrl) (ep_ctrl->CNT) +#define udd_endpoint_out_reset_nb_received(ep_ctrl) (ep_ctrl->CNT = 0) +#define udd_endpoint_in_set_bytecnt(ep_ctrl,n) (ep_ctrl->CNT = n) +#define udd_endpoint_set_azlp(ep_ctrl) (ep_ctrl->CNT |= 0x8000) +#define udd_endpoint_clear_azlp(ep_ctrl) (ep_ctrl->CNT &= ~0x8000) + +#define udd_endpoint_set_buf(ep_ctrl,buf) (ep_ctrl->DATAPTR = (uint16_t) buf) + +#define udd_endpoint_in_nb_sent(ep_ctrl) (ep_ctrl->AUXDATA) +#define udd_endpoint_in_reset_nb_sent(ep_ctrl) (ep_ctrl->AUXDATA = 0) +#define udd_endpoint_out_set_nbbyte(ep_ctrl,nb) (ep_ctrl->AUXDATA = nb) +#define udd_endpoint_out_get_nbbyte_requested(ep_ctrl) (ep_ctrl->AUXDATA) +#define udd_endpoint_set_aux(ep_ctrl,buf) (ep_ctrl->AUXDATA = (uint16_t) buf) +//! @} + + +//! @name USB Device endpoint control field management +//! @{ + +//! @name USB Device endpoint control setup field management +//! @{ +#define udd_control_setup() (udd_sram.ep_ctrl[0].STATUS&USB_EP_SETUP_bm ? true : false) +#define udd_control_ack_setup() LACR16(&udd_sram.ep_ctrl[0].STATUS,USB_EP_SETUP_bm) +//! @} + +//! @name USB Device endpoint control OUT field management +//! @{ +#define udd_control_out_is_enable_stall() (udd_sram.ep_ctrl[0].CTRL&USB_EP_STALL_bm ? true : false) +#define udd_control_out_enable_stall() LASR16(&udd_sram.ep_ctrl[0].CTRL,USB_EP_STALL_bm) +#define udd_control_out_disable_stall() LACR16(&udd_sram.ep_ctrl[0].CTRL,USB_EP_STALL_bm) +#define udd_control_out_is_stalled() (udd_sram.ep_ctrl[0].STATUS&USB_EP_STALLF_bm ? true : false) +#define udd_control_out_ack_stall() LACR16(&udd_sram.ep_ctrl[0].STATUS,USB_EP_STALLF_bm) +#define udd_control_out_set_NACK0() LASR16(&udd_sram.ep_ctrl[0].STATUS,USB_EP_BUSNACK0_bm) +#define udd_control_out_clear_NACK0() LACR16(&udd_sram.ep_ctrl[0].STATUS,USB_EP_BUSNACK0_bm) + +#define udd_control_out_overflow() (udd_sram.ep_ctrl[0].STATUS&USB_EP_OVF_bm ? true : false) +#define udd_control_ack_out_overflow() LACR16(&udd_sram.ep_ctrl[0].STATUS,USB_EP_OVF_bm) + +#define udd_control_out_tc() (udd_sram.ep_ctrl[0].STATUS&USB_EP_TRNCOMPL0_bm ? true : false) +#define udd_control_out_ack_tc() LACR16(&udd_sram.ep_ctrl[0].STATUS,USB_EP_TRNCOMPL0_bm) +#define udd_control_out_set_tc() LASR16(&udd_sram.ep_ctrl[0].STATUS,USB_EP_TRNCOMPL0_bm) + +#define udd_control_out_dt_get() (udd_sram.ep_ctrl[0].STATUS&USB_EP_TOGGLE_bm ? true : false) +#define udd_control_out_dt_set() LASR16(&udd_sram.ep_ctrl[0].STATUS,USB_EP_TOGGLE_bm ) +#define udd_control_out_dt_clear() LACR16(&udd_sram.ep_ctrl[0].STATUS,USB_EP_TOGGLE_bm ) +#define udd_control_out_dt_toggle() LATR16(&udd_sram.ep_ctrl[0].STATUS,USB_EP_TOGGLE_bm) + +#define udd_control_out_set_buf(buf) (udd_sram.ep_ctrl[0].DATAPTR = (uint16_t) buf) + +#define udd_control_out_get_bytecnt() (udd_sram.ep_ctrl[0].CNT) +//! @} + +//! @name USB Device endpoint control IN field management +//! @{ +#define udd_control_in_is_enable_stall() (udd_sram.ep_ctrl[1].CTRL&USB_EP_STALL_bm ? true : false) +#define udd_control_in_enable_stall() LASR16(&udd_sram.ep_ctrl[1].CTRL,USB_EP_STALL_bm) +#define udd_control_in_disable_stall() LACR16(&udd_sram.ep_ctrl[1].CTRL,USB_EP_STALL_bm) +#define udd_control_in_is_stalled() (udd_sram.ep_ctrl[1].STATUS&USB_EP_STALLF_bm ? true : false) +#define udd_control_in_ack_stall() LACR16(&udd_sram.ep_ctrl[1].STATUS,USB_EP_STALLF_bm) +#define udd_control_in_set_NACK0() LASR16(&udd_sram.ep_ctrl[1].STATUS,USB_EP_BUSNACK0_bm) +#define udd_control_in_clear_NACK0() LACR16(&udd_sram.ep_ctrl[1].STATUS,USB_EP_BUSNACK0_bm) + +#define udd_control_in_underflow() (udd_sram.ep_ctrl[1].STATUS&USB_EP_UNF_bm ? true : false) +#define udd_control_ack_in_underflow() LACR16(&udd_sram.ep_ctrl[1].STATUS,USB_EP_UNF_bm) + +#define udd_control_in_tc() (udd_sram.ep_ctrl[1].STATUS&USB_EP_TRNCOMPL0_bm ? true : false) +#define udd_control_in_ack_tc() LACR16(&udd_sram.ep_ctrl[1].STATUS,USB_EP_TRNCOMPL0_bm) +#define udd_control_in_set_tc() LASR16(&udd_sram.ep_ctrl[1].STATUS,USB_EP_TRNCOMPL0_bm) + +#define udd_control_in_dt_get() (udd_sram.ep_ctrl[1].STATUS&USB_EP_TOGGLE_bm ? true : false) +#define udd_control_in_dt_set() LASR16(&udd_sram.ep_ctrl[1].STATUS,USB_EP_TOGGLE_bm ) +#define udd_control_in_dt_clear() LACR16(&udd_sram.ep_ctrl[1].STATUS,USB_EP_TOGGLE_bm ) +#define udd_control_in_dt_toggle() LATR16(&udd_sram.ep_ctrl[1].STATUS,USB_EP_TOGGLE_bm) + +#define udd_control_in_set_buf(buf) (udd_sram.ep_ctrl[1].DATAPTR = (uint16_t) buf) + +#define udd_control_in_set_bytecnt(n) (udd_sram.ep_ctrl[1].CNT = n) +//! @} +//! @} + +//! @} + +#endif // _USB_DEVICE_H_ diff --git a/AVR Code/USB_BULK_TEST/src/ASF/xmega/utils/assembler.h b/AVR Code/USB_BULK_TEST/src/ASF/xmega/utils/assembler.h new file mode 100644 index 00000000..8a2dfca0 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/xmega/utils/assembler.h @@ -0,0 +1,159 @@ +/** + * \file + * + * \brief Assembler abstraction layer and utilities + * + * Copyright (c) 2014-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ +#ifndef ASSEMBLER_H_INCLUDED +#define ASSEMBLER_H_INCLUDED + +#if !defined(__ASSEMBLER__) && !defined(__IAR_SYSTEMS_ASM__) \ + && !defined(__DOXYGEN__) +# error This file may only be included from assembly files +#endif + +#if defined(__ASSEMBLER__) +# include "assembler/gas.h" +# include +#elif defined(__IAR_SYSTEMS_ASM__) +# include "assembler/iar.h" +# include +#endif + +/** + * \ingroup group_xmega_utils + * \defgroup assembler_group Assembler Support + * + * This group provides a good handful of macros intended to smooth out + * the differences between various assemblers, similar to what compiler.h does + * for compilers, except that assemblers tend to be much less standardized than + * compilers. + * + * @{ + */ + +//! \name Control Statements +//@{ +/** + * \def REPEAT(count) + * \brief Repeat the following statements \a count times + */ +/** + * \def END_REPEAT() + * \brief Mark the end of the statements to be repeated + */ +/** + * \def SET_LOC(offset) + * \brief Set the location counter to \a offset + */ +/** + * \def END_FILE() + * \brief Mark the end of the file + */ +//@} + +//! \name Data Objects +//@{ +/** + * \def FILL_BYTES(count) + * \brief Allocate space for \a count bytes + */ +//@} + +//! \name Symbol Definition +//@{ +/** + * \def L(name) + * \brief Turn \a name into a local symbol, if possible + */ +/** + * \def EXTERN_SYMBOL(name) + * \brief Declare \a name as an external symbol referenced by this file + */ +/** + * \def FUNCTION(name) + * \brief Define a file-local function called \a name + */ +/** + * \def PUBLIC_FUNCTION(name) + * \brief Define a globally visible function called \a name + */ +/** + * \def WEAK_FUNCTION(name) + * \brief Define a weak function called \a name + * + * Weak functions are only referenced if no strong definitions are found + */ +/** + * \def WEAK_FUNCTION_ALIAS(name, strong_name) + * \brief Define \a name as a weak alias for the function \a strong_name + * \sa WEAK_FUNCTION + */ +/** + * \def END_FUNC(name) + * \brief Mark the end of the function called \a name + */ +//@} + +//! \name Section Definition +//@{ +/** + * \def TEXT_SECTION(name) + * \brief Start a new section containing executable code + */ +/** + * \def RODATA_SECTION(name) + * \brief Start a new section containing read-only data + */ +/** + * \def DATA_SECTION(name) + * \brief Start a new section containing writeable initialized data + */ +/** + * \def BSS_SECTION(name) + * \brief Start a new section containing writeable zero-initialized data + */ +//@} + +//! @} + +#endif /* ASSEMBLER_H_INCLUDED */ diff --git a/AVR Code/USB_BULK_TEST/src/ASF/xmega/utils/assembler/gas.h b/AVR Code/USB_BULK_TEST/src/ASF/xmega/utils/assembler/gas.h new file mode 100644 index 00000000..58a54094 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/xmega/utils/assembler/gas.h @@ -0,0 +1,124 @@ +/** + * \file + * + * \brief Assembler abstraction layer: GNU Assembler specifics + * + * Copyright (c) 2014-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ +#ifndef ASSEMBLER_GAS_H_INCLUDED +#define ASSEMBLER_GAS_H_INCLUDED + +#ifndef __DOXYGEN__ + + /* IAR doesn't accept dots in macro names */ + .macro ld_addr, reg, sym + lda.w \reg, \sym + .endm + + /* Define a function \a name that is either globally visible or only + * file-local. + */ + .macro gas_begin_func name, is_public + .if \is_public + .global \name + .endif + .section .text.\name, "ax", @progbits + .type \name, @function + \name : + .endm + + /* Define a function \a name that is either globally visible or only + * file-local in a given segment. + */ + .macro gas_begin_func_segm name, is_public, segment + .if \is_public + .global \name + .endif + .section .\segment, "ax", @progbits + .type \name, @function + \name : + .endm + + /* Define \a name as a weak alias for the function \a strong_name */ + .macro gas_weak_function_alias name, strong_name + .global \name + .weak \name + .type \name, @function + .set \name, \strong_name + .endm + + /* Define a weak function called \a name */ + .macro gas_weak_function name + .weak \name + gas_begin_func \name 1 + .endm + +#define REPEAT(count) .rept count +#define END_REPEAT() .endr +#define FILL_BYTES(count) .fill count +#define SET_LOC(offset) .org offset +#define L(name) .L##name +#define EXTERN_SYMBOL(name) + +#define TEXT_SECTION(name) \ + .section name, "ax", @progbits +#define RODATA_SECTION(name) \ + .section name, "a", @progbits +#define DATA_SECTION(name) \ + .section name, "aw", @progbits +#define BSS_SECTION(name) \ + .section name, "aw", @nobits + +#define FUNCTION(name) gas_begin_func name 0 +#define PUBLIC_FUNCTION(name) gas_begin_func name 1 +#define PUBLIC_FUNCTION_SEGMENT(name, segment) \ + gas_begin_func_segm name 1 segment +#define WEAK_FUNCTION(name) gas_weak_function name +#define WEAK_FUNCTION_ALIAS(name, strong_name) \ + gas_weak_function_alias name strong_name +#define END_FUNC(name) \ + .size name, . - name + +#define END_FILE() + +#endif /* __DOXYGEN__ */ + +#endif /* ASSEMBLER_GAS_H_INCLUDED */ diff --git a/AVR Code/USB_BULK_TEST/src/ASF/xmega/utils/bit_handling/clz_ctz.h b/AVR Code/USB_BULK_TEST/src/ASF/xmega/utils/bit_handling/clz_ctz.h new file mode 100644 index 00000000..a58f1f4e --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/xmega/utils/bit_handling/clz_ctz.h @@ -0,0 +1,215 @@ +/** + * \file + * + * \brief CLZ/CTZ C implementation. + * + * Copyright (c) 2014-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ +#ifndef CLZ_CTH_H +#define CLZ_CTH_H + +/** + * \brief Count leading zeros in unsigned integer + * + * This macro takes unsigned integers of any size, and evaluates to a call to + * the clz-function for its size. These functions count the number of zeros, + * starting with the MSB, before a one occurs in the integer. + * + * \param x Unsigned integer to count the leading zeros in. + * + * \return The number of leading zeros in \a x. + */ +#define clz(x) compiler_demux_size(sizeof(x), clz, (x)) + +/** + * \internal + * \brief Count leading zeros in unsigned, 8-bit integer + * + * \param x Unsigned byte to count the leading zeros in. + * + * \return The number of leading zeros in \a x. + */ +__always_inline static uint8_t clz8(uint8_t x) +{ + uint8_t bit = 0; + + if (x & 0xf0) { + x >>= 4; + } else { + bit += 4; + } + + if (x & 0x0c) { + x >>= 2; + } else { + bit += 2; + } + + if (!(x & 0x02)) { + bit++; + } + + return bit; + +} + +/** + * \internal + * \brief Count leading zeros in unsigned, 16-bit integer + * + * \param x Unsigned word to count the leading zeros in. + * + * \return The number of leading zeros in \a x. + */ +__always_inline static uint8_t clz16(uint16_t x) +{ + uint8_t bit = 0; + + if (x & 0xff00) { + x >>= 8; + } else { + bit += 8; + } + + return bit + clz8(x); +} + +/** + * \internal + * \brief Count leading zeros in unsigned, 32-bit integer + * + * \param x Unsigned double word to count the leading zeros in. + * + * \return The number of leading zeros in \a x. + */ +__always_inline static uint8_t clz32(uint32_t x) +{ + uint8_t bit = 0; + + if (x & 0xffff0000) { + x >>= 16; + } else { + bit += 16; + } + + return bit + clz16(x); +} + +/** + * \brief Count trailing zeros in unsigned integer + * + * This macro takes unsigned integers of any size, and evaluates to a call to + * the ctz-function for its size. These functions count the number of zeros, + * starting with the LSB, before a one occurs in the integer. + * + * \param x Unsigned integer to count the trailing zeros in. + * + * \return The number of trailing zeros in \a x. + */ +#define ctz(x) compiler_demux_size(sizeof(x), ctz, (x)) + +/** + * \internal + * \brief Count trailing zeros in unsigned, 8-bit integer + * + * \param x Unsigned byte to count the trailing zeros in. + * + * \return The number of leading zeros in \a x. + */ +__always_inline static uint8_t ctz8(uint8_t x) +{ + uint8_t bit = 0; + + if (!(x & 0x0f)) { + bit += 4; + x >>= 4; + } + if (!(x & 0x03)) { + bit += 2; + x >>= 2; + } + if (!(x & 0x01)) + bit++; + + return bit; +} + +/** + * \internal + * \brief Count trailing zeros in unsigned, 16-bit integer + * + * \param x Unsigned word to count the trailing zeros in. + * + * \return The number of trailing zeros in \a x. + */ +__always_inline static uint8_t ctz16(uint16_t x) +{ + uint8_t bit = 0; + + if (!(x & 0x00ff)) { + bit += 8; + x >>= 8; + } + + return bit + ctz8(x); +} + +/** + * \internal + * \brief Count trailing zeros in unsigned, 32-bit integer + * + * \param x Unsigned double word to count the trailing zeros in. + * + * \return The number of trailing zeros in \a x. + */ +__always_inline static uint8_t ctz32(uint32_t x) +{ + uint8_t bit = 0; + + if (!(x & 0x0000ffff)) { + bit += 16; + x >>= 16; + } + + return bit + ctz16(x); +} + +#endif /* CLZ_CTZ_H */ diff --git a/AVR Code/USB_BULK_TEST/src/ASF/xmega/utils/compiler.h b/AVR Code/USB_BULK_TEST/src/ASF/xmega/utils/compiler.h new file mode 100644 index 00000000..5e4f2c43 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/xmega/utils/compiler.h @@ -0,0 +1,1189 @@ +/** + * \file + * + * \brief Commonly used includes, types and macros. + * + * Copyright (c) 2010-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ +#ifndef UTILS_COMPILER_H +#define UTILS_COMPILER_H + +/** + * \defgroup group_xmega_utils XMEGA compiler driver + * + * Compiler abstraction layer and code utilities for 8-bit AVR. + * This module provides various abstraction layers and utilities to make code compatible between different compilers. + * + * \{ + */ + +#if defined(__GNUC__) +# include +# include +#elif defined(__ICCAVR__) +# include +# include +#else +# error Unsupported compiler. +#endif + +#include +#include +#include +#include + +#include + +#ifdef __ICCAVR__ +/*! \name Compiler Keywords + * + * Port of some keywords from GCC to IAR Embedded Workbench. + */ +//! @{ +#define __asm__ asm +#define __inline__ inline +#define __volatile__ +//! @} +#endif + +/** + * \def UNUSED + * \brief Marking \a v as a unused parameter or value. + */ +#define UNUSED(v) (void)(v) + +/** + * \def unused + * \brief Marking \a v as a unused parameter or value. + */ +#define unused(v) do { (void)(v); } while(0) + +/** + * \def barrier + * \brief Memory barrier + */ +#ifdef __GNUC__ +# define barrier() asm volatile("" ::: "memory") +#else +# define barrier() asm ("") +#endif + +/** + * \brief Emit the compiler pragma \a arg. + * + * \param arg The pragma directive as it would appear after \e \#pragma + * (i.e. not stringified). + */ +#define COMPILER_PRAGMA(arg) _Pragma(#arg) + +/* + * AVR arch does not care about alignment anyway. + */ +#define COMPILER_PACK_RESET(alignment) +#define COMPILER_PACK_SET(alignment) + +/** + * \brief Set aligned boundary. + */ +#if (defined __GNUC__) +#define COMPILER_ALIGNED(a) __attribute__((__aligned__(a))) +#elif (defined __ICCAVR__) +#define COMPILER_ALIGNED(a) COMPILER_PRAGMA(data_alignment = a) +#endif + +/** + * \brief Set word-aligned boundary. + */ +#if (defined __GNUC__) +#define COMPILER_WORD_ALIGNED __attribute__((__aligned__(2))) +#elif (defined __ICCAVR__) +#define COMPILER_WORD_ALIGNED COMPILER_PRAGMA(data_alignment = 2) +#endif + +/** + * \name Tag functions as deprecated + * + * Tagging a function as deprecated will produce a warning when and only + * when the function is called. + * + * Usage is to add the __DEPRECATED__ symbol before the function definition. + * E.g.: + * __DEPRECATED__ uint8_t some_deprecated_function (void) + * { + * ... + * } + * + * \note Only supported by GCC 3.1 and above, no IAR support + * @{ + */ +#if ((defined __GNUC__) && (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >=1))) +#define __DEPRECATED__ __attribute__((__deprecated__)) +#else +#define __DEPRECATED__ +#endif +//! @} + +/*! \name Usual Types + */ +//! @{ +typedef unsigned char Bool; //!< Boolean. +#ifndef __cplusplus +#if !defined(__bool_true_false_are_defined) +typedef unsigned char bool; //!< Boolean. +#endif +#endif +typedef int8_t S8 ; //!< 8-bit signed integer. +typedef uint8_t U8 ; //!< 8-bit unsigned integer. +typedef int16_t S16; //!< 16-bit signed integer. +typedef uint16_t U16; //!< 16-bit unsigned integer. +typedef uint16_t le16_t; +typedef uint16_t be16_t; +typedef int32_t S32; //!< 32-bit signed integer. +typedef uint32_t U32; //!< 32-bit unsigned integer. +typedef uint32_t le32_t; +typedef uint32_t be32_t; +typedef int64_t S64; //!< 64-bit signed integer. +typedef uint64_t U64; //!< 64-bit unsigned integer. +typedef float F32; //!< 32-bit floating-point number. +typedef double F64; //!< 64-bit floating-point number. +typedef uint16_t iram_size_t; +//! @} + + +/*! \name Status Types + */ +//! @{ +typedef Bool Status_bool_t; //!< Boolean status. +typedef U8 Status_t; //!< 8-bit-coded status. +//! @} + + +/*! \name Aliasing Aggregate Types + */ +//! @{ + +//! 16-bit union. +typedef union +{ + S16 s16 ; + U16 u16 ; + S8 s8 [2]; + U8 u8 [2]; +} Union16; + +//! 32-bit union. +typedef union +{ + S32 s32 ; + U32 u32 ; + S16 s16[2]; + U16 u16[2]; + S8 s8 [4]; + U8 u8 [4]; +} Union32; + +//! 64-bit union. +typedef union +{ + S64 s64 ; + U64 u64 ; + S32 s32[2]; + U32 u32[2]; + S16 s16[4]; + U16 u16[4]; + S8 s8 [8]; + U8 u8 [8]; +} Union64; + +//! Union of pointers to 64-, 32-, 16- and 8-bit unsigned integers. +typedef union +{ + S64 *s64ptr; + U64 *u64ptr; + S32 *s32ptr; + U32 *u32ptr; + S16 *s16ptr; + U16 *u16ptr; + S8 *s8ptr ; + U8 *u8ptr ; +} UnionPtr; + +//! Union of pointers to volatile 64-, 32-, 16- and 8-bit unsigned integers. +typedef union +{ + volatile S64 *s64ptr; + volatile U64 *u64ptr; + volatile S32 *s32ptr; + volatile U32 *u32ptr; + volatile S16 *s16ptr; + volatile U16 *u16ptr; + volatile S8 *s8ptr ; + volatile U8 *u8ptr ; +} UnionVPtr; + +//! Union of pointers to constant 64-, 32-, 16- and 8-bit unsigned integers. +typedef union +{ + const S64 *s64ptr; + const U64 *u64ptr; + const S32 *s32ptr; + const U32 *u32ptr; + const S16 *s16ptr; + const U16 *u16ptr; + const S8 *s8ptr ; + const U8 *u8ptr ; +} UnionCPtr; + +//! Union of pointers to constant volatile 64-, 32-, 16- and 8-bit unsigned integers. +typedef union +{ + const volatile S64 *s64ptr; + const volatile U64 *u64ptr; + const volatile S32 *s32ptr; + const volatile U32 *u32ptr; + const volatile S16 *s16ptr; + const volatile U16 *u16ptr; + const volatile S8 *s8ptr ; + const volatile U8 *u8ptr ; +} UnionCVPtr; + +//! Structure of pointers to 64-, 32-, 16- and 8-bit unsigned integers. +typedef struct +{ + S64 *s64ptr; + U64 *u64ptr; + S32 *s32ptr; + U32 *u32ptr; + S16 *s16ptr; + U16 *u16ptr; + S8 *s8ptr ; + U8 *u8ptr ; +} StructPtr; + +//! Structure of pointers to volatile 64-, 32-, 16- and 8-bit unsigned integers. +typedef struct +{ + volatile S64 *s64ptr; + volatile U64 *u64ptr; + volatile S32 *s32ptr; + volatile U32 *u32ptr; + volatile S16 *s16ptr; + volatile U16 *u16ptr; + volatile S8 *s8ptr ; + volatile U8 *u8ptr ; +} StructVPtr; + +//! Structure of pointers to constant 64-, 32-, 16- and 8-bit unsigned integers. +typedef struct +{ + const S64 *s64ptr; + const U64 *u64ptr; + const S32 *s32ptr; + const U32 *u32ptr; + const S16 *s16ptr; + const U16 *u16ptr; + const S8 *s8ptr ; + const U8 *u8ptr ; +} StructCPtr; + +//! Structure of pointers to constant volatile 64-, 32-, 16- and 8-bit unsigned integers. +typedef struct +{ + const volatile S64 *s64ptr; + const volatile U64 *u64ptr; + const volatile S32 *s32ptr; + const volatile U32 *u32ptr; + const volatile S16 *s16ptr; + const volatile U16 *u16ptr; + const volatile S8 *s8ptr ; + const volatile U8 *u8ptr ; +} StructCVPtr; + +//! @} + + +//_____ M A C R O S ________________________________________________________ + +/*! \name Usual Constants + */ +//! @{ +#define DISABLE 0 +#define ENABLE 1 +#ifndef __cplusplus +#if !defined(__bool_true_false_are_defined) +#define false 0 +#define true 1 +#endif +#endif +#define PASS 0 +#define FAIL 1 +#define LOW 0 +#define HIGH 1 +//! @} + + +//! \name Compile time error handling +//@{ + +/** + * \internal + * \def ERROR_FUNC(name, msg) + * \brief Fail compilation if function call isn't eliminated + * + * If the compiler fails to optimize away all calls to the function \a + * name, terminate compilation and display \a msg to the user. + * + * \note Not all compilers support this, so this is best-effort only. + * Sometimes, there may be a linker error instead, and when optimization + * is disabled, this mechanism will be completely disabled. + */ +#ifndef ERROR_FUNC +# define ERROR_FUNC(name, msg) \ + extern int name(void) +#endif + +//@} + +//! \name Function call demultiplexing +//@{ + +//! Error function for failed demultiplexing. +ERROR_FUNC(compiler_demux_bad_size, "Invalid parameter size"); + +/** + * \internal + * \brief Demultiplex function call based on size of datatype + * + * Evaluates to a function call to a function name with suffix 8, 16 or 32 + * depending on the size of the datatype. Any number of parameters can be + * passed to the function. + * + * Usage: + * \code + void foo8(uint8_t a, void *b); + void foo16(uint16_t a, void *b); + void foo32(uint32_t a, void *b); + + #define foo(x, y) compiler_demux_size(sizeof(x), foo, x, y) +\endcode + * + * \param size Size of the datatype. + * \param func Base function name. + * \param ... List of parameters to pass to the function. + */ +#define compiler_demux_size(size, func, ...) \ + (((size) == 1) ? func##8(__VA_ARGS__) : \ + ((size) == 2) ? func##16(__VA_ARGS__) : \ + ((size) == 4) ? func##32(__VA_ARGS__) : \ + compiler_demux_bad_size()) + +//@} + +/** + * \def __always_inline + * \brief The function should always be inlined. + * + * This annotation instructs the compiler to ignore its inlining + * heuristics and inline the function no matter how big it thinks it + * becomes. + */ +#if (defined __GNUC__) + #define __always_inline inline __attribute__((__always_inline__)) +#elif (defined __ICCAVR__) + #define __always_inline _Pragma("inline=forced") +#endif + +//! \name Optimization Control +//@{ + +/** + * \def __always_optimize + * \brief The function should always be optimized. + * + * This annotation instructs the compiler to ignore global optimization + * settings and always compile the function with a high level of + * optimization. + */ +#if (defined __GNUC__) + #define __always_optimize __attribute__((optimize(3))) +#elif (defined __ICCAVR__) + #define __always_optimize _Pragma("optimize=high") +#endif + +/** + * \def likely(exp) + * \brief The expression \a exp is likely to be true + */ +#ifndef likely +# define likely(exp) (exp) +#endif + +/** + * \def unlikely(exp) + * \brief The expression \a exp is unlikely to be true + */ +#ifndef unlikely +# define unlikely(exp) (exp) +#endif + +/** + * \def is_constant(exp) + * \brief Determine if an expression evaluates to a constant value. + * + * \param exp Any expression + * + * \return true if \a exp is constant, false otherwise. + */ +#ifdef __GNUC__ +# define is_constant(exp) __builtin_constant_p(exp) +#else +# define is_constant(exp) (0) +#endif + +//! @} + +/*! \name Bit-Field Handling + */ +#include "bit_handling/clz_ctz.h" +//! @{ + +/*! \brief Reads the bits of a value specified by a given bit-mask. + * + * \param value Value to read bits from. + * \param mask Bit-mask indicating bits to read. + * + * \return Read bits. + */ +#define Rd_bits( value, mask) ((value)&(mask)) + +/*! \brief Writes the bits of a C lvalue specified by a given bit-mask. + * + * \param lvalue C lvalue to write bits to. + * \param mask Bit-mask indicating bits to write. + * \param bits Bits to write. + * + * \return Resulting value with written bits. + */ +#define Wr_bits(lvalue, mask, bits) ((lvalue) = ((lvalue) & ~(mask)) |\ + ((bits ) & (mask))) + +/*! \brief Tests the bits of a value specified by a given bit-mask. + * + * \param value Value of which to test bits. + * \param mask Bit-mask indicating bits to test. + * + * \return \c 1 if at least one of the tested bits is set, else \c 0. + */ +#define Tst_bits( value, mask) (Rd_bits(value, mask) != 0) + +/*! \brief Clears the bits of a C lvalue specified by a given bit-mask. + * + * \param lvalue C lvalue of which to clear bits. + * \param mask Bit-mask indicating bits to clear. + * + * \return Resulting value with cleared bits. + */ +#define Clr_bits(lvalue, mask) ((lvalue) &= ~(mask)) + +/*! \brief Sets the bits of a C lvalue specified by a given bit-mask. + * + * \param lvalue C lvalue of which to set bits. + * \param mask Bit-mask indicating bits to set. + * + * \return Resulting value with set bits. + */ +#define Set_bits(lvalue, mask) ((lvalue) |= (mask)) + +/*! \brief Toggles the bits of a C lvalue specified by a given bit-mask. + * + * \param lvalue C lvalue of which to toggle bits. + * \param mask Bit-mask indicating bits to toggle. + * + * \return Resulting value with toggled bits. + */ +#define Tgl_bits(lvalue, mask) ((lvalue) ^= (mask)) + +/*! \brief Reads the bit-field of a value specified by a given bit-mask. + * + * \param value Value to read a bit-field from. + * \param mask Bit-mask indicating the bit-field to read. + * + * \return Read bit-field. + */ +#define Rd_bitfield( value,mask) (Rd_bits( value, (uint32_t)mask) >> ctz(mask)) + +/*! \brief Writes the bit-field of a C lvalue specified by a given bit-mask. + * + * \param lvalue C lvalue to write a bit-field to. + * \param mask Bit-mask indicating the bit-field to write. + * \param bitfield Bit-field to write. + * + * \return Resulting value with written bit-field. + */ +#define Wr_bitfield(lvalue, mask, bitfield) (Wr_bits(lvalue, mask, (uint32_t)(bitfield) << ctz(mask))) + +//! @} + + +/*! \brief This macro is used to test fatal errors. + * + * The macro tests if the expression is false. If it is, a fatal error is + * detected and the application hangs up. If TEST_SUITE_DEFINE_ASSERT_MACRO + * is defined, a unit test version of the macro is used, to allow execution + * of further tests after a false expression. + * + * \param expr Expression to evaluate and supposed to be nonzero. + */ +#if defined(_ASSERT_ENABLE_) +# if defined(TEST_SUITE_DEFINE_ASSERT_MACRO) + // Assert() is defined in unit_test/suite.h +# include "unit_test/suite.h" +# else +# define Assert(expr) \ + {\ + if (!(expr)) while (true);\ + } +# endif +#else +# define Assert(expr) ((void) 0) +#endif + +/*! \name Bit Reversing + */ +//! @{ + +/*! \brief Reverses the bits of \a u8. + * + * \param u8 U8 of which to reverse the bits. + * + * \return Value resulting from \a u8 with reversed bits. + */ +#define bit_reverse8(u8) ((U8)(bit_reverse32((U8)(u8)) >> 24)) + +/*! \brief Reverses the bits of \a u16. + * + * \param u16 U16 of which to reverse the bits. + * + * \return Value resulting from \a u16 with reversed bits. + */ +#define bit_reverse16(u16) ((U16)(bit_reverse32((U16)(u16)) >> 16)) + +/*! \brief Reverses the bits of \a u32. + * + * \param u32 U32 of which to reverse the bits. + * + * \return Value resulting from \a u32 with reversed bits. + */ +#if (defined __GNUC__) + #define bit_reverse32(u32) \ + (\ + {\ + unsigned int __value = (U32)(u32);\ + __asm__ ("brev\t%0" : "+r" (__value) : : "cc");\ + (U32)__value;\ + }\ + ) +#elif (defined __ICCAVR__) + #define bit_reverse32(u32) ((U32)__bit_reverse((U32)(u32))) +#endif + +/*! \brief Reverses the bits of \a u64. + * + * \param u64 U64 of which to reverse the bits. + * + * \return Value resulting from \a u64 with reversed bits. + */ +#define bit_reverse64(u64) ((U64)(((U64)bit_reverse32((U64)(u64) >> 32)) |\ + ((U64)bit_reverse32((U64)(u64)) << 32))) + +//! @} + +//! \name Logarithmic functions +//! @{ + +/** + * \internal + * Undefined function. Will cause a link failure if ilog2() is called + * with an invalid constant value. + */ +int_fast8_t ilog2_undefined(void); + +/** + * \brief Calculate the base-2 logarithm of a number rounded down to + * the nearest integer. + * + * \param x A 32-bit value + * \return The base-2 logarithm of \a x, or -1 if \a x is 0. + */ +static inline int_fast8_t ilog2(uint32_t x) +{ + if (is_constant(x)) + return ((x) & (1ULL << 31) ? 31 : + (x) & (1ULL << 30) ? 30 : + (x) & (1ULL << 29) ? 29 : + (x) & (1ULL << 28) ? 28 : + (x) & (1ULL << 27) ? 27 : + (x) & (1ULL << 26) ? 26 : + (x) & (1ULL << 25) ? 25 : + (x) & (1ULL << 24) ? 24 : + (x) & (1ULL << 23) ? 23 : + (x) & (1ULL << 22) ? 22 : + (x) & (1ULL << 21) ? 21 : + (x) & (1ULL << 20) ? 20 : + (x) & (1ULL << 19) ? 19 : + (x) & (1ULL << 18) ? 18 : + (x) & (1ULL << 17) ? 17 : + (x) & (1ULL << 16) ? 16 : + (x) & (1ULL << 15) ? 15 : + (x) & (1ULL << 14) ? 14 : + (x) & (1ULL << 13) ? 13 : + (x) & (1ULL << 12) ? 12 : + (x) & (1ULL << 11) ? 11 : + (x) & (1ULL << 10) ? 10 : + (x) & (1ULL << 9) ? 9 : + (x) & (1ULL << 8) ? 8 : + (x) & (1ULL << 7) ? 7 : + (x) & (1ULL << 6) ? 6 : + (x) & (1ULL << 5) ? 5 : + (x) & (1ULL << 4) ? 4 : + (x) & (1ULL << 3) ? 3 : + (x) & (1ULL << 2) ? 2 : + (x) & (1ULL << 1) ? 1 : + (x) & (1ULL << 0) ? 0 : + ilog2_undefined()); + + return 31 - clz(x); +} + +//! @} + +/*! \name Alignment + */ +//! @{ + +/*! \brief Tests alignment of the number \a val with the \a n boundary. + * + * \param val Input value. + * \param n Boundary. + * + * \return \c 1 if the number \a val is aligned with the \a n boundary, else \c 0. + */ +#define Test_align(val, n ) (!Tst_bits( val, (n) - 1 ) ) + +/*! \brief Gets alignment of the number \a val with respect to the \a n boundary. + * + * \param val Input value. + * \param n Boundary. + * + * \return Alignment of the number \a val with respect to the \a n boundary. + */ +#define Get_align( val, n ) ( Rd_bits( val, (n) - 1 ) ) + +/*! \brief Sets alignment of the lvalue number \a lval to \a alg with respect to the \a n boundary. + * + * \param lval Input/output lvalue. + * \param n Boundary. + * \param alg Alignment. + * + * \return New value of \a lval resulting from its alignment set to \a alg with respect to the \a n boundary. + */ +#define Set_align(lval, n, alg) ( Wr_bits(lval, (n) - 1, alg) ) + +/*! \brief Aligns the number \a val with the upper \a n boundary. + * + * \param val Input value. + * \param n Boundary. + * + * \return Value resulting from the number \a val aligned with the upper \a n boundary. + */ +#define Align_up( val, n ) (((val) + ((n) - 1)) & ~((n) - 1)) + +/*! \brief Aligns the number \a val with the lower \a n boundary. + * + * \param val Input value. + * \param n Boundary. + * + * \return Value resulting from the number \a val aligned with the lower \a n boundary. + */ +#define Align_down(val, n ) ( (val) & ~((n) - 1)) + +//! @} + + +/*! \name Mathematics + * + * Compiler optimization for non-constant expressions, only for abs under WinAVR + */ +//! @{ + +/*! \brief Takes the absolute value of \a a. + * + * \param a Input value. + * + * \return Absolute value of \a a. + * + * \note More optimized if only used with values known at compile time. + */ +#define Abs(a) (((a) < 0 ) ? -(a) : (a)) +#ifndef abs +#define abs(a) Abs(a) +#endif + +/*! \brief Takes the minimal value of \a a and \a b. + * + * \param a Input value. + * \param b Input value. + * + * \return Minimal value of \a a and \a b. + * + * \note More optimized if only used with values known at compile time. + */ +#define Min(a, b) (((a) < (b)) ? (a) : (b)) +#define min(a, b) Min(a, b) + +/*! \brief Takes the maximal value of \a a and \a b. + * + * \param a Input value. + * \param b Input value. + * + * \return Maximal value of \a a and \a b. + * + * \note More optimized if only used with values known at compile time. + */ +#define Max(a, b) (((a) > (b)) ? (a) : (b)) +#define max(a, b) Max(a, b) + +//! @} + + +/*! \brief Calls the routine at address \a addr. + * + * It generates a long call opcode. + * + * For example, `Long_call(0x80000000)' generates a software reset on a UC3 if + * it is invoked from the CPU supervisor mode. + * + * \param addr Address of the routine to call. + * + * \note It may be used as a long jump opcode in some special cases. + */ +#define Long_call(addr) ((*(void (*)(void))(addr))()) + +/*! \name System Register Access + */ +//! @{ + +/*! \brief Gets the value of the \a sysreg system register. + * + * \param sysreg Address of the system register of which to get the value. + * + * \return Value of the \a sysreg system register. + */ +#if (defined __GNUC__) + #define Get_system_register(sysreg) __builtin_mfsr(sysreg) +#elif (defined __ICCAVR__) + #define Get_system_register(sysreg) __get_system_register(sysreg) +#endif + +/*! \brief Sets the value of the \a sysreg system register to \a value. + * + * \param sysreg Address of the system register of which to set the value. + * \param value Value to set the \a sysreg system register to. + */ +#if (defined __GNUC__) + #define Set_system_register(sysreg, value) __builtin_mtsr(sysreg, value) +#elif (defined __ICCAVR__) + #define Set_system_register(sysreg, value) __set_system_register(sysreg, value) +#endif + +//! @} + +/*! \name Debug Register Access + */ +//! @{ + +/*! \brief Gets the value of the \a dbgreg debug register. + * + * \param dbgreg Address of the debug register of which to get the value. + * + * \return Value of the \a dbgreg debug register. + */ +#if (defined __GNUC__) + #define Get_debug_register(dbgreg) __builtin_mfdr(dbgreg) +#elif (defined __ICCAVR__) + #define Get_debug_register(dbgreg) __get_debug_register(dbgreg) +#endif + +/*! \brief Sets the value of the \a dbgreg debug register to \a value. + * + * \param dbgreg Address of the debug register of which to set the value. + * \param value Value to set the \a dbgreg debug register to. + */ +#if (defined __GNUC__) + #define Set_debug_register(dbgreg, value) __builtin_mtdr(dbgreg, value) +#elif (defined __ICCAVR__) + #define Set_debug_register(dbgreg, value) __set_debug_register(dbgreg, value) +#endif + +//! @} + + +/*! \name MCU Endianism Handling + * xmega is a MCU little endianism. + */ +//! @{ +#define MSB(u16) (((uint8_t* )&u16)[1]) +#define LSB(u16) (((uint8_t* )&u16)[0]) + +#define MSW(u32) (((uint16_t*)&u32)[1]) +#define LSW(u32) (((uint16_t*)&u32)[0]) +#define MSB0W(u32) (((uint8_t*)&(u32))[3]) //!< Most significant byte of 1st rank of \a u32. +#define MSB1W(u32) (((uint8_t*)&(u32))[2]) //!< Most significant byte of 2nd rank of \a u32. +#define MSB2W(u32) (((uint8_t*)&(u32))[1]) //!< Most significant byte of 3rd rank of \a u32. +#define MSB3W(u32) (((uint8_t*)&(u32))[0]) //!< Most significant byte of 4th rank of \a u32. +#define LSB3W(u32) MSB0W(u32) //!< Least significant byte of 4th rank of \a u32. +#define LSB2W(u32) MSB1W(u32) //!< Least significant byte of 3rd rank of \a u32. +#define LSB1W(u32) MSB2W(u32) //!< Least significant byte of 2nd rank of \a u32. +#define LSB0W(u32) MSB3W(u32) //!< Least significant byte of 1st rank of \a u32. + +#define MSB0(u32) (((uint8_t*)&u32)[3]) +#define MSB1(u32) (((uint8_t*)&u32)[2]) +#define MSB2(u32) (((uint8_t*)&u32)[1]) +#define MSB3(u32) (((uint8_t*)&u32)[0]) +#define LSB0(u32) MSB3(u32) +#define LSB1(u32) MSB2(u32) +#define LSB2(u32) MSB1(u32) +#define LSB3(u32) MSB0(u32) + +#define LE16(x) (x) +#define le16_to_cpu(x) (x) +#define cpu_to_le16(x) (x) +#define LE16_TO_CPU(x) (x) +#define CPU_TO_LE16(x) (x) + +#define BE16(x) Swap16(x) +#define be16_to_cpu(x) swap16(x) +#define cpu_to_be16(x) swap16(x) +#define BE16_TO_CPU(x) Swap16(x) +#define CPU_TO_BE16(x) Swap16(x) + +#define LE32(x) (x) +#define le32_to_cpu(x) (x) +#define cpu_to_le32(x) (x) +#define LE32_TO_CPU(x) (x) +#define CPU_TO_LE32(x) (x) + +#define BE32(x) Swap32(x) +#define be32_to_cpu(x) swap32(x) +#define cpu_to_be32(x) swap32(x) +#define BE32_TO_CPU(x) Swap32(x) +#define CPU_TO_BE32(x) Swap32(x) + + + +//! @} + + +/*! \name Endianism Conversion + * + * The same considerations as for clz and ctz apply here but AVR32-GCC's + * __builtin_bswap_16 and __builtin_bswap_32 do not behave like macros when + * applied to constant expressions, so two sets of macros are defined here: + * - Swap16, Swap32 and Swap64 to apply to constant expressions (values known + * at compile time); + * - swap16, swap32 and swap64 to apply to non-constant expressions (values + * unknown at compile time). + */ +//! @{ + +/*! \brief Toggles the endianism of \a u16 (by swapping its bytes). + * + * \param u16 U16 of which to toggle the endianism. + * + * \return Value resulting from \a u16 with toggled endianism. + * + * \note More optimized if only used with values known at compile time. + */ +#define Swap16(u16) ((U16)(((U16)(u16) >> 8) |\ + ((U16)(u16) << 8))) + +/*! \brief Toggles the endianism of \a u32 (by swapping its bytes). + * + * \param u32 U32 of which to toggle the endianism. + * + * \return Value resulting from \a u32 with toggled endianism. + * + * \note More optimized if only used with values known at compile time. + */ +#define Swap32(u32) ((U32)(((U32)Swap16((U32)(u32) >> 16)) |\ + ((U32)Swap16((U32)(u32)) << 16))) + +/*! \brief Toggles the endianism of \a u64 (by swapping its bytes). + * + * \param u64 U64 of which to toggle the endianism. + * + * \return Value resulting from \a u64 with toggled endianism. + * + * \note More optimized if only used with values known at compile time. + */ +#define Swap64(u64) ((U64)(((U64)Swap32((U64)(u64) >> 32)) |\ + ((U64)Swap32((U64)(u64)) << 32))) + +/*! \brief Toggles the endianism of \a u16 (by swapping its bytes). + * + * \param u16 U16 of which to toggle the endianism. + * + * \return Value resulting from \a u16 with toggled endianism. + * + * \note More optimized if only used with values unknown at compile time. + */ +#define swap16(u16) Swap16(u16) + +/*! \brief Toggles the endianism of \a u32 (by swapping its bytes). + * + * \param u32 U32 of which to toggle the endianism. + * + * \return Value resulting from \a u32 with toggled endianism. + * + * \note More optimized if only used with values unknown at compile time. + */ +#define swap32(u32) Swap32(u32) + +/*! \brief Toggles the endianism of \a u64 (by swapping its bytes). + * + * \param u64 U64 of which to toggle the endianism. + * + * \return Value resulting from \a u64 with toggled endianism. + * + * \note More optimized if only used with values unknown at compile time. + */ +#define swap64(u64) ((U64)(((U64)swap32((U64)(u64) >> 32)) |\ + ((U64)swap32((U64)(u64)) << 32))) + +//! @} + + +/*! \name Target Abstraction + */ +//! @{ + +#define _GLOBEXT_ extern //!< extern storage-class specifier. +#define _CONST_TYPE_ const //!< const type qualifier. +#define _MEM_TYPE_SLOW_ //!< Slow memory type. +#define _MEM_TYPE_MEDFAST_ //!< Fairly fast memory type. +#define _MEM_TYPE_FAST_ //!< Fast memory type. + +typedef U8 Byte; //!< 8-bit unsigned integer. + +#define memcmp_ram2ram memcmp //!< Target-specific memcmp of RAM to RAM. +#define memcmp_code2ram memcmp //!< Target-specific memcmp of RAM to NVRAM. +#define memcpy_ram2ram memcpy //!< Target-specific memcpy from RAM to RAM. +#define memcpy_code2ram memcpy //!< Target-specific memcpy from NVRAM to RAM. + +//! @} + +/** + * \brief Calculate \f$ \left\lceil \frac{a}{b} \right\rceil \f$ using + * integer arithmetic. + * + * \param a An integer + * \param b Another integer + * + * \return (\a a / \a b) rounded up to the nearest integer. + */ +#define div_ceil(a, b) (((a) + (b) - 1) / (b)) + +#include "preprocessor.h" +#include "progmem.h" +#include "interrupt.h" + + +#if (defined __GNUC__) + #define SHORTENUM __attribute__ ((packed)) +#elif (defined __ICCAVR__) + #define SHORTENUM /**/ +#endif + +#if (defined __GNUC__) + #define FUNC_PTR void * +#elif (defined __ICCAVR__) +#if (FLASHEND > 0x1FFFF) // Required for program code larger than 128K + #define FUNC_PTR void __farflash * +#else + #define FUNC_PTR void * +#endif /* ENABLE_FAR_FLASH */ +#endif + + +#if (defined __GNUC__) + #define FLASH_DECLARE(x) const x __attribute__((__progmem__)) +#elif (defined __ICCAVR__) + #define FLASH_DECLARE(x) const __flash x +#endif + +#if (defined __GNUC__) + #define FLASH_EXTERN(x) extern const x +#elif (defined __ICCAVR__) + #define FLASH_EXTERN(x) extern const __flash x +#endif + + +/*Defines the Flash Storage for the request and response of MAC*/ +#define CMD_ID_OCTET (0) + +/* Converting of values from CPU endian to little endian. */ +#define CPU_ENDIAN_TO_LE16(x) (x) +#define CPU_ENDIAN_TO_LE32(x) (x) +#define CPU_ENDIAN_TO_LE64(x) (x) + +/* Converting of values from little endian to CPU endian. */ +#define LE16_TO_CPU_ENDIAN(x) (x) +#define LE32_TO_CPU_ENDIAN(x) (x) +#define LE64_TO_CPU_ENDIAN(x) (x) + +/* Converting of constants from little endian to CPU endian. */ +#define CLE16_TO_CPU_ENDIAN(x) (x) +#define CLE32_TO_CPU_ENDIAN(x) (x) +#define CLE64_TO_CPU_ENDIAN(x) (x) + +/* Converting of constants from CPU endian to little endian. */ +#define CCPU_ENDIAN_TO_LE16(x) (x) +#define CCPU_ENDIAN_TO_LE32(x) (x) +#define CCPU_ENDIAN_TO_LE64(x) (x) + +#if (defined __GNUC__) + #define ADDR_COPY_DST_SRC_16(dst, src) memcpy((&(dst)), (&(src)), sizeof(uint16_t)) + #define ADDR_COPY_DST_SRC_64(dst, src) memcpy((&(dst)), (&(src)), sizeof(uint64_t)) + +/* Converts a 2 Byte array into a 16-Bit value */ +#define convert_byte_array_to_16_bit(data) \ + (*(uint16_t *)(data)) + +/* Converts a 4 Byte array into a 32-Bit value */ +#define convert_byte_array_to_32_bit(data) \ + (*(uint32_t *)(data)) + +/* Converts a 8 Byte array into a 64-Bit value */ +#define convert_byte_array_to_64_bit(data) \ + (*(uint64_t *)(data)) + +/* Converts a 16-Bit value into a 2 Byte array */ +#define convert_16_bit_to_byte_array(value, data) \ + ((*(uint16_t *)(data)) = (uint16_t)(value)) + +/* Converts spec 16-Bit value into a 2 Byte array */ +#define convert_spec_16_bit_to_byte_array(value, data) \ + ((*(uint16_t *)(data)) = (uint16_t)(value)) + +/* Converts spec 16-Bit value into a 2 Byte array */ +#define convert_16_bit_to_byte_address(value, data) \ + ((*(uint16_t *)(data)) = (uint16_t)(value)) + +/* Converts a 32-Bit value into a 4 Byte array */ +#define convert_32_bit_to_byte_array(value, data) \ + ((*(uint32_t *)(data)) = (uint32_t)(value)) + +/* Converts a 64-Bit value into a 8 Byte array */ +/* Here memcpy requires much less footprint */ +#define convert_64_bit_to_byte_array(value, data) \ + memcpy((data), (&(value)), sizeof(uint64_t)) + +#elif (defined __ICCAVR__) + #define ADDR_COPY_DST_SRC_16(dst, src) ((dst) = (src)) + #define ADDR_COPY_DST_SRC_64(dst, src) ((dst) = (src)) + +/* Converts a 2 Byte array into a 16-Bit value */ +#define convert_byte_array_to_16_bit(data) \ + (*(uint16_t *)(data)) + +/* Converts a 4 Byte array into a 32-Bit value */ +#define convert_byte_array_to_32_bit(data) \ + (*(uint32_t *)(data)) + +/* Converts a 8 Byte array into a 64-Bit value */ +#define convert_byte_array_to_64_bit(data) \ + (*(uint64_t *)(data)) + +/* Converts a 16-Bit value into a 2 Byte array */ +#define convert_16_bit_to_byte_array(value, data) \ + ((*(uint16_t *)(data)) = (uint16_t)(value)) + +/* Converts spec 16-Bit value into a 2 Byte array */ +#define convert_spec_16_bit_to_byte_array(value, data) \ + ((*(uint16_t *)(data)) = (uint16_t)(value)) + +/* Converts spec 16-Bit value into a 2 Byte array */ +#define convert_16_bit_to_byte_address(value, data) \ + ((*(uint16_t *)(data)) = (uint16_t)(value)) + +/* Converts a 32-Bit value into a 4 Byte array */ +#define convert_32_bit_to_byte_array(value, data) \ + ((*(uint32_t *)(data)) = (uint32_t)(value)) + +/* Converts a 64-Bit value into a 8 Byte array */ +#define convert_64_bit_to_byte_array(value, data) \ + ((*(uint64_t *)(data)) = (uint64_t)(value)) +#endif + +#define MEMCPY_ENDIAN memcpy +#define PGM_READ_BLOCK(dst, src, len) memcpy_P((dst), (src), (len)) + +#if (defined __GNUC__) + #define PGM_READ_BYTE(x) pgm_read_byte(x) + #define PGM_READ_WORD(x) pgm_read_word(x) +#elif (defined __ICCAVR__) + #define PGM_READ_BYTE(x) *(x) + #define PGM_READ_WORD(x) *(x) +#endif + + +#if (defined __GNUC__) + #define nop() do { __asm__ __volatile__ ("nop"); } while (0) +#elif (defined __ICCAVR__) + #define nop() __no_operation() +#endif + + +/** + * \} + */ + +#endif // UTILS_COMPILER_H diff --git a/AVR Code/USB_BULK_TEST/src/ASF/xmega/utils/preprocessor/mrepeat.h b/AVR Code/USB_BULK_TEST/src/ASF/xmega/utils/preprocessor/mrepeat.h new file mode 100644 index 00000000..f4f9c94c --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/xmega/utils/preprocessor/mrepeat.h @@ -0,0 +1,338 @@ +/** + * \file + * + * \brief Preprocessor macro repeating utils. + * + * Copyright (c) 2014-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ +#ifndef _MREPEAT_H_ +#define _MREPEAT_H_ + +/** + * \defgroup group_xmega_utils_mrepeat Macro Repeat + * + * \ingroup group_xmega_utils + * + * \{ + */ + +#include "preprocessor.h" + + +//! Maximal number of repetitions supported by MREPEAT. +#define MREPEAT_LIMIT 256 + +/*! \brief Macro repeat. + * + * This macro represents a horizontal repetition construct. + * + * \param count The number of repetitious calls to macro. Valid values range from 0 to MREPEAT_LIMIT. + * \param macro A binary operation of the form macro(n, data). This macro is expanded by MREPEAT with + * the current repetition number and the auxiliary data argument. + * \param data Auxiliary data passed to macro. + * + * \return macro(0, data) macro(1, data) ... macro(count - 1, data) + */ +#define MREPEAT(count, macro, data) TPASTE2(MREPEAT, count)(macro, data) + +#define MREPEAT0( macro, data) +#define MREPEAT1( macro, data) MREPEAT0( macro, data) macro( 0, data) +#define MREPEAT2( macro, data) MREPEAT1( macro, data) macro( 1, data) +#define MREPEAT3( macro, data) MREPEAT2( macro, data) macro( 2, data) +#define MREPEAT4( macro, data) MREPEAT3( macro, data) macro( 3, data) +#define MREPEAT5( macro, data) MREPEAT4( macro, data) macro( 4, data) +#define MREPEAT6( macro, data) MREPEAT5( macro, data) macro( 5, data) +#define MREPEAT7( macro, data) MREPEAT6( macro, data) macro( 6, data) +#define MREPEAT8( macro, data) MREPEAT7( macro, data) macro( 7, data) +#define MREPEAT9( macro, data) MREPEAT8( macro, data) macro( 8, data) +#define MREPEAT10( macro, data) MREPEAT9( macro, data) macro( 9, data) +#define MREPEAT11( macro, data) MREPEAT10( macro, data) macro( 10, data) +#define MREPEAT12( macro, data) MREPEAT11( macro, data) macro( 11, data) +#define MREPEAT13( macro, data) MREPEAT12( macro, data) macro( 12, data) +#define MREPEAT14( macro, data) MREPEAT13( macro, data) macro( 13, data) +#define MREPEAT15( macro, data) MREPEAT14( macro, data) macro( 14, data) +#define MREPEAT16( macro, data) MREPEAT15( macro, data) macro( 15, data) +#define MREPEAT17( macro, data) MREPEAT16( macro, data) macro( 16, data) +#define MREPEAT18( macro, data) MREPEAT17( macro, data) macro( 17, data) +#define MREPEAT19( macro, data) MREPEAT18( macro, data) macro( 18, data) +#define MREPEAT20( macro, data) MREPEAT19( macro, data) macro( 19, data) +#define MREPEAT21( macro, data) MREPEAT20( macro, data) macro( 20, data) +#define MREPEAT22( macro, data) MREPEAT21( macro, data) macro( 21, data) +#define MREPEAT23( macro, data) MREPEAT22( macro, data) macro( 22, data) +#define MREPEAT24( macro, data) MREPEAT23( macro, data) macro( 23, data) +#define MREPEAT25( macro, data) MREPEAT24( macro, data) macro( 24, data) +#define MREPEAT26( macro, data) MREPEAT25( macro, data) macro( 25, data) +#define MREPEAT27( macro, data) MREPEAT26( macro, data) macro( 26, data) +#define MREPEAT28( macro, data) MREPEAT27( macro, data) macro( 27, data) +#define MREPEAT29( macro, data) MREPEAT28( macro, data) macro( 28, data) +#define MREPEAT30( macro, data) MREPEAT29( macro, data) macro( 29, data) +#define MREPEAT31( macro, data) MREPEAT30( macro, data) macro( 30, data) +#define MREPEAT32( macro, data) MREPEAT31( macro, data) macro( 31, data) +#define MREPEAT33( macro, data) MREPEAT32( macro, data) macro( 32, data) +#define MREPEAT34( macro, data) MREPEAT33( macro, data) macro( 33, data) +#define MREPEAT35( macro, data) MREPEAT34( macro, data) macro( 34, data) +#define MREPEAT36( macro, data) MREPEAT35( macro, data) macro( 35, data) +#define MREPEAT37( macro, data) MREPEAT36( macro, data) macro( 36, data) +#define MREPEAT38( macro, data) MREPEAT37( macro, data) macro( 37, data) +#define MREPEAT39( macro, data) MREPEAT38( macro, data) macro( 38, data) +#define MREPEAT40( macro, data) MREPEAT39( macro, data) macro( 39, data) +#define MREPEAT41( macro, data) MREPEAT40( macro, data) macro( 40, data) +#define MREPEAT42( macro, data) MREPEAT41( macro, data) macro( 41, data) +#define MREPEAT43( macro, data) MREPEAT42( macro, data) macro( 42, data) +#define MREPEAT44( macro, data) MREPEAT43( macro, data) macro( 43, data) +#define MREPEAT45( macro, data) MREPEAT44( macro, data) macro( 44, data) +#define MREPEAT46( macro, data) MREPEAT45( macro, data) macro( 45, data) +#define MREPEAT47( macro, data) MREPEAT46( macro, data) macro( 46, data) +#define MREPEAT48( macro, data) MREPEAT47( macro, data) macro( 47, data) +#define MREPEAT49( macro, data) MREPEAT48( macro, data) macro( 48, data) +#define MREPEAT50( macro, data) MREPEAT49( macro, data) macro( 49, data) +#define MREPEAT51( macro, data) MREPEAT50( macro, data) macro( 50, data) +#define MREPEAT52( macro, data) MREPEAT51( macro, data) macro( 51, data) +#define MREPEAT53( macro, data) MREPEAT52( macro, data) macro( 52, data) +#define MREPEAT54( macro, data) MREPEAT53( macro, data) macro( 53, data) +#define MREPEAT55( macro, data) MREPEAT54( macro, data) macro( 54, data) +#define MREPEAT56( macro, data) MREPEAT55( macro, data) macro( 55, data) +#define MREPEAT57( macro, data) MREPEAT56( macro, data) macro( 56, data) +#define MREPEAT58( macro, data) MREPEAT57( macro, data) macro( 57, data) +#define MREPEAT59( macro, data) MREPEAT58( macro, data) macro( 58, data) +#define MREPEAT60( macro, data) MREPEAT59( macro, data) macro( 59, data) +#define MREPEAT61( macro, data) MREPEAT60( macro, data) macro( 60, data) +#define MREPEAT62( macro, data) MREPEAT61( macro, data) macro( 61, data) +#define MREPEAT63( macro, data) MREPEAT62( macro, data) macro( 62, data) +#define MREPEAT64( macro, data) MREPEAT63( macro, data) macro( 63, data) +#define MREPEAT65( macro, data) MREPEAT64( macro, data) macro( 64, data) +#define MREPEAT66( macro, data) MREPEAT65( macro, data) macro( 65, data) +#define MREPEAT67( macro, data) MREPEAT66( macro, data) macro( 66, data) +#define MREPEAT68( macro, data) MREPEAT67( macro, data) macro( 67, data) +#define MREPEAT69( macro, data) MREPEAT68( macro, data) macro( 68, data) +#define MREPEAT70( macro, data) MREPEAT69( macro, data) macro( 69, data) +#define MREPEAT71( macro, data) MREPEAT70( macro, data) macro( 70, data) +#define MREPEAT72( macro, data) MREPEAT71( macro, data) macro( 71, data) +#define MREPEAT73( macro, data) MREPEAT72( macro, data) macro( 72, data) +#define MREPEAT74( macro, data) MREPEAT73( macro, data) macro( 73, data) +#define MREPEAT75( macro, data) MREPEAT74( macro, data) macro( 74, data) +#define MREPEAT76( macro, data) MREPEAT75( macro, data) macro( 75, data) +#define MREPEAT77( macro, data) MREPEAT76( macro, data) macro( 76, data) +#define MREPEAT78( macro, data) MREPEAT77( macro, data) macro( 77, data) +#define MREPEAT79( macro, data) MREPEAT78( macro, data) macro( 78, data) +#define MREPEAT80( macro, data) MREPEAT79( macro, data) macro( 79, data) +#define MREPEAT81( macro, data) MREPEAT80( macro, data) macro( 80, data) +#define MREPEAT82( macro, data) MREPEAT81( macro, data) macro( 81, data) +#define MREPEAT83( macro, data) MREPEAT82( macro, data) macro( 82, data) +#define MREPEAT84( macro, data) MREPEAT83( macro, data) macro( 83, data) +#define MREPEAT85( macro, data) MREPEAT84( macro, data) macro( 84, data) +#define MREPEAT86( macro, data) MREPEAT85( macro, data) macro( 85, data) +#define MREPEAT87( macro, data) MREPEAT86( macro, data) macro( 86, data) +#define MREPEAT88( macro, data) MREPEAT87( macro, data) macro( 87, data) +#define MREPEAT89( macro, data) MREPEAT88( macro, data) macro( 88, data) +#define MREPEAT90( macro, data) MREPEAT89( macro, data) macro( 89, data) +#define MREPEAT91( macro, data) MREPEAT90( macro, data) macro( 90, data) +#define MREPEAT92( macro, data) MREPEAT91( macro, data) macro( 91, data) +#define MREPEAT93( macro, data) MREPEAT92( macro, data) macro( 92, data) +#define MREPEAT94( macro, data) MREPEAT93( macro, data) macro( 93, data) +#define MREPEAT95( macro, data) MREPEAT94( macro, data) macro( 94, data) +#define MREPEAT96( macro, data) MREPEAT95( macro, data) macro( 95, data) +#define MREPEAT97( macro, data) MREPEAT96( macro, data) macro( 96, data) +#define MREPEAT98( macro, data) MREPEAT97( macro, data) macro( 97, data) +#define MREPEAT99( macro, data) MREPEAT98( macro, data) macro( 98, data) +#define MREPEAT100(macro, data) MREPEAT99( macro, data) macro( 99, data) +#define MREPEAT101(macro, data) MREPEAT100(macro, data) macro(100, data) +#define MREPEAT102(macro, data) MREPEAT101(macro, data) macro(101, data) +#define MREPEAT103(macro, data) MREPEAT102(macro, data) macro(102, data) +#define MREPEAT104(macro, data) MREPEAT103(macro, data) macro(103, data) +#define MREPEAT105(macro, data) MREPEAT104(macro, data) macro(104, data) +#define MREPEAT106(macro, data) MREPEAT105(macro, data) macro(105, data) +#define MREPEAT107(macro, data) MREPEAT106(macro, data) macro(106, data) +#define MREPEAT108(macro, data) MREPEAT107(macro, data) macro(107, data) +#define MREPEAT109(macro, data) MREPEAT108(macro, data) macro(108, data) +#define MREPEAT110(macro, data) MREPEAT109(macro, data) macro(109, data) +#define MREPEAT111(macro, data) MREPEAT110(macro, data) macro(110, data) +#define MREPEAT112(macro, data) MREPEAT111(macro, data) macro(111, data) +#define MREPEAT113(macro, data) MREPEAT112(macro, data) macro(112, data) +#define MREPEAT114(macro, data) MREPEAT113(macro, data) macro(113, data) +#define MREPEAT115(macro, data) MREPEAT114(macro, data) macro(114, data) +#define MREPEAT116(macro, data) MREPEAT115(macro, data) macro(115, data) +#define MREPEAT117(macro, data) MREPEAT116(macro, data) macro(116, data) +#define MREPEAT118(macro, data) MREPEAT117(macro, data) macro(117, data) +#define MREPEAT119(macro, data) MREPEAT118(macro, data) macro(118, data) +#define MREPEAT120(macro, data) MREPEAT119(macro, data) macro(119, data) +#define MREPEAT121(macro, data) MREPEAT120(macro, data) macro(120, data) +#define MREPEAT122(macro, data) MREPEAT121(macro, data) macro(121, data) +#define MREPEAT123(macro, data) MREPEAT122(macro, data) macro(122, data) +#define MREPEAT124(macro, data) MREPEAT123(macro, data) macro(123, data) +#define MREPEAT125(macro, data) MREPEAT124(macro, data) macro(124, data) +#define MREPEAT126(macro, data) MREPEAT125(macro, data) macro(125, data) +#define MREPEAT127(macro, data) MREPEAT126(macro, data) macro(126, data) +#define MREPEAT128(macro, data) MREPEAT127(macro, data) macro(127, data) +#define MREPEAT129(macro, data) MREPEAT128(macro, data) macro(128, data) +#define MREPEAT130(macro, data) MREPEAT129(macro, data) macro(129, data) +#define MREPEAT131(macro, data) MREPEAT130(macro, data) macro(130, data) +#define MREPEAT132(macro, data) MREPEAT131(macro, data) macro(131, data) +#define MREPEAT133(macro, data) MREPEAT132(macro, data) macro(132, data) +#define MREPEAT134(macro, data) MREPEAT133(macro, data) macro(133, data) +#define MREPEAT135(macro, data) MREPEAT134(macro, data) macro(134, data) +#define MREPEAT136(macro, data) MREPEAT135(macro, data) macro(135, data) +#define MREPEAT137(macro, data) MREPEAT136(macro, data) macro(136, data) +#define MREPEAT138(macro, data) MREPEAT137(macro, data) macro(137, data) +#define MREPEAT139(macro, data) MREPEAT138(macro, data) macro(138, data) +#define MREPEAT140(macro, data) MREPEAT139(macro, data) macro(139, data) +#define MREPEAT141(macro, data) MREPEAT140(macro, data) macro(140, data) +#define MREPEAT142(macro, data) MREPEAT141(macro, data) macro(141, data) +#define MREPEAT143(macro, data) MREPEAT142(macro, data) macro(142, data) +#define MREPEAT144(macro, data) MREPEAT143(macro, data) macro(143, data) +#define MREPEAT145(macro, data) MREPEAT144(macro, data) macro(144, data) +#define MREPEAT146(macro, data) MREPEAT145(macro, data) macro(145, data) +#define MREPEAT147(macro, data) MREPEAT146(macro, data) macro(146, data) +#define MREPEAT148(macro, data) MREPEAT147(macro, data) macro(147, data) +#define MREPEAT149(macro, data) MREPEAT148(macro, data) macro(148, data) +#define MREPEAT150(macro, data) MREPEAT149(macro, data) macro(149, data) +#define MREPEAT151(macro, data) MREPEAT150(macro, data) macro(150, data) +#define MREPEAT152(macro, data) MREPEAT151(macro, data) macro(151, data) +#define MREPEAT153(macro, data) MREPEAT152(macro, data) macro(152, data) +#define MREPEAT154(macro, data) MREPEAT153(macro, data) macro(153, data) +#define MREPEAT155(macro, data) MREPEAT154(macro, data) macro(154, data) +#define MREPEAT156(macro, data) MREPEAT155(macro, data) macro(155, data) +#define MREPEAT157(macro, data) MREPEAT156(macro, data) macro(156, data) +#define MREPEAT158(macro, data) MREPEAT157(macro, data) macro(157, data) +#define MREPEAT159(macro, data) MREPEAT158(macro, data) macro(158, data) +#define MREPEAT160(macro, data) MREPEAT159(macro, data) macro(159, data) +#define MREPEAT161(macro, data) MREPEAT160(macro, data) macro(160, data) +#define MREPEAT162(macro, data) MREPEAT161(macro, data) macro(161, data) +#define MREPEAT163(macro, data) MREPEAT162(macro, data) macro(162, data) +#define MREPEAT164(macro, data) MREPEAT163(macro, data) macro(163, data) +#define MREPEAT165(macro, data) MREPEAT164(macro, data) macro(164, data) +#define MREPEAT166(macro, data) MREPEAT165(macro, data) macro(165, data) +#define MREPEAT167(macro, data) MREPEAT166(macro, data) macro(166, data) +#define MREPEAT168(macro, data) MREPEAT167(macro, data) macro(167, data) +#define MREPEAT169(macro, data) MREPEAT168(macro, data) macro(168, data) +#define MREPEAT170(macro, data) MREPEAT169(macro, data) macro(169, data) +#define MREPEAT171(macro, data) MREPEAT170(macro, data) macro(170, data) +#define MREPEAT172(macro, data) MREPEAT171(macro, data) macro(171, data) +#define MREPEAT173(macro, data) MREPEAT172(macro, data) macro(172, data) +#define MREPEAT174(macro, data) MREPEAT173(macro, data) macro(173, data) +#define MREPEAT175(macro, data) MREPEAT174(macro, data) macro(174, data) +#define MREPEAT176(macro, data) MREPEAT175(macro, data) macro(175, data) +#define MREPEAT177(macro, data) MREPEAT176(macro, data) macro(176, data) +#define MREPEAT178(macro, data) MREPEAT177(macro, data) macro(177, data) +#define MREPEAT179(macro, data) MREPEAT178(macro, data) macro(178, data) +#define MREPEAT180(macro, data) MREPEAT179(macro, data) macro(179, data) +#define MREPEAT181(macro, data) MREPEAT180(macro, data) macro(180, data) +#define MREPEAT182(macro, data) MREPEAT181(macro, data) macro(181, data) +#define MREPEAT183(macro, data) MREPEAT182(macro, data) macro(182, data) +#define MREPEAT184(macro, data) MREPEAT183(macro, data) macro(183, data) +#define MREPEAT185(macro, data) MREPEAT184(macro, data) macro(184, data) +#define MREPEAT186(macro, data) MREPEAT185(macro, data) macro(185, data) +#define MREPEAT187(macro, data) MREPEAT186(macro, data) macro(186, data) +#define MREPEAT188(macro, data) MREPEAT187(macro, data) macro(187, data) +#define MREPEAT189(macro, data) MREPEAT188(macro, data) macro(188, data) +#define MREPEAT190(macro, data) MREPEAT189(macro, data) macro(189, data) +#define MREPEAT191(macro, data) MREPEAT190(macro, data) macro(190, data) +#define MREPEAT192(macro, data) MREPEAT191(macro, data) macro(191, data) +#define MREPEAT193(macro, data) MREPEAT192(macro, data) macro(192, data) +#define MREPEAT194(macro, data) MREPEAT193(macro, data) macro(193, data) +#define MREPEAT195(macro, data) MREPEAT194(macro, data) macro(194, data) +#define MREPEAT196(macro, data) MREPEAT195(macro, data) macro(195, data) +#define MREPEAT197(macro, data) MREPEAT196(macro, data) macro(196, data) +#define MREPEAT198(macro, data) MREPEAT197(macro, data) macro(197, data) +#define MREPEAT199(macro, data) MREPEAT198(macro, data) macro(198, data) +#define MREPEAT200(macro, data) MREPEAT199(macro, data) macro(199, data) +#define MREPEAT201(macro, data) MREPEAT200(macro, data) macro(200, data) +#define MREPEAT202(macro, data) MREPEAT201(macro, data) macro(201, data) +#define MREPEAT203(macro, data) MREPEAT202(macro, data) macro(202, data) +#define MREPEAT204(macro, data) MREPEAT203(macro, data) macro(203, data) +#define MREPEAT205(macro, data) MREPEAT204(macro, data) macro(204, data) +#define MREPEAT206(macro, data) MREPEAT205(macro, data) macro(205, data) +#define MREPEAT207(macro, data) MREPEAT206(macro, data) macro(206, data) +#define MREPEAT208(macro, data) MREPEAT207(macro, data) macro(207, data) +#define MREPEAT209(macro, data) MREPEAT208(macro, data) macro(208, data) +#define MREPEAT210(macro, data) MREPEAT209(macro, data) macro(209, data) +#define MREPEAT211(macro, data) MREPEAT210(macro, data) macro(210, data) +#define MREPEAT212(macro, data) MREPEAT211(macro, data) macro(211, data) +#define MREPEAT213(macro, data) MREPEAT212(macro, data) macro(212, data) +#define MREPEAT214(macro, data) MREPEAT213(macro, data) macro(213, data) +#define MREPEAT215(macro, data) MREPEAT214(macro, data) macro(214, data) +#define MREPEAT216(macro, data) MREPEAT215(macro, data) macro(215, data) +#define MREPEAT217(macro, data) MREPEAT216(macro, data) macro(216, data) +#define MREPEAT218(macro, data) MREPEAT217(macro, data) macro(217, data) +#define MREPEAT219(macro, data) MREPEAT218(macro, data) macro(218, data) +#define MREPEAT220(macro, data) MREPEAT219(macro, data) macro(219, data) +#define MREPEAT221(macro, data) MREPEAT220(macro, data) macro(220, data) +#define MREPEAT222(macro, data) MREPEAT221(macro, data) macro(221, data) +#define MREPEAT223(macro, data) MREPEAT222(macro, data) macro(222, data) +#define MREPEAT224(macro, data) MREPEAT223(macro, data) macro(223, data) +#define MREPEAT225(macro, data) MREPEAT224(macro, data) macro(224, data) +#define MREPEAT226(macro, data) MREPEAT225(macro, data) macro(225, data) +#define MREPEAT227(macro, data) MREPEAT226(macro, data) macro(226, data) +#define MREPEAT228(macro, data) MREPEAT227(macro, data) macro(227, data) +#define MREPEAT229(macro, data) MREPEAT228(macro, data) macro(228, data) +#define MREPEAT230(macro, data) MREPEAT229(macro, data) macro(229, data) +#define MREPEAT231(macro, data) MREPEAT230(macro, data) macro(230, data) +#define MREPEAT232(macro, data) MREPEAT231(macro, data) macro(231, data) +#define MREPEAT233(macro, data) MREPEAT232(macro, data) macro(232, data) +#define MREPEAT234(macro, data) MREPEAT233(macro, data) macro(233, data) +#define MREPEAT235(macro, data) MREPEAT234(macro, data) macro(234, data) +#define MREPEAT236(macro, data) MREPEAT235(macro, data) macro(235, data) +#define MREPEAT237(macro, data) MREPEAT236(macro, data) macro(236, data) +#define MREPEAT238(macro, data) MREPEAT237(macro, data) macro(237, data) +#define MREPEAT239(macro, data) MREPEAT238(macro, data) macro(238, data) +#define MREPEAT240(macro, data) MREPEAT239(macro, data) macro(239, data) +#define MREPEAT241(macro, data) MREPEAT240(macro, data) macro(240, data) +#define MREPEAT242(macro, data) MREPEAT241(macro, data) macro(241, data) +#define MREPEAT243(macro, data) MREPEAT242(macro, data) macro(242, data) +#define MREPEAT244(macro, data) MREPEAT243(macro, data) macro(243, data) +#define MREPEAT245(macro, data) MREPEAT244(macro, data) macro(244, data) +#define MREPEAT246(macro, data) MREPEAT245(macro, data) macro(245, data) +#define MREPEAT247(macro, data) MREPEAT246(macro, data) macro(246, data) +#define MREPEAT248(macro, data) MREPEAT247(macro, data) macro(247, data) +#define MREPEAT249(macro, data) MREPEAT248(macro, data) macro(248, data) +#define MREPEAT250(macro, data) MREPEAT249(macro, data) macro(249, data) +#define MREPEAT251(macro, data) MREPEAT250(macro, data) macro(250, data) +#define MREPEAT252(macro, data) MREPEAT251(macro, data) macro(251, data) +#define MREPEAT253(macro, data) MREPEAT252(macro, data) macro(252, data) +#define MREPEAT254(macro, data) MREPEAT253(macro, data) macro(253, data) +#define MREPEAT255(macro, data) MREPEAT254(macro, data) macro(254, data) +#define MREPEAT256(macro, data) MREPEAT255(macro, data) macro(255, data) + +/** + * \} + */ + +#endif // _MREPEAT_H_ diff --git a/AVR Code/USB_BULK_TEST/src/ASF/xmega/utils/preprocessor/preprocessor.h b/AVR Code/USB_BULK_TEST/src/ASF/xmega/utils/preprocessor/preprocessor.h new file mode 100644 index 00000000..b597f58d --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/xmega/utils/preprocessor/preprocessor.h @@ -0,0 +1,54 @@ +/** + * \file + * + * \brief Preprocessor utils. + * + * Copyright (c) 2014-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ +#ifndef _PREPROCESSOR_H_ +#define _PREPROCESSOR_H_ + +#include "tpaste.h" +#include "stringz.h" +#include "mrepeat.h" + + +#endif // _PREPROCESSOR_H_ diff --git a/AVR Code/USB_BULK_TEST/src/ASF/xmega/utils/preprocessor/stringz.h b/AVR Code/USB_BULK_TEST/src/ASF/xmega/utils/preprocessor/stringz.h new file mode 100644 index 00000000..fcb3d93b --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/xmega/utils/preprocessor/stringz.h @@ -0,0 +1,84 @@ +/** + * \file + * + * \brief Preprocessor stringizing utils. + * + * Copyright (c) 2014-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ +#ifndef _STRINGZ_H_ +#define _STRINGZ_H_ + +/** + * \defgroup group_xmega_utils_stringz Stringize + * + * \ingroup group_xmega_utils + * + * \{ + */ + +/*! \brief Stringize. + * + * Stringize a preprocessing token, this token being allowed to be \#defined. + * + * May be used only within macros with the token passed as an argument if the token is \#defined. + * + * For example, writing STRINGZ(PIN) within a macro \#defined by PIN_NAME(PIN) + * and invoked as PIN_NAME(PIN0) with PIN0 \#defined as A0 is equivalent to + * writing "A0". + */ +#define STRINGZ(x) #x + +/*! \brief Absolute stringize. + * + * Stringize a preprocessing token, this token being allowed to be \#defined. + * + * No restriction of use if the token is \#defined. + * + * For example, writing ASTRINGZ(PIN0) anywhere with PIN0 \#defined as A0 is + * equivalent to writing "A0". + */ +#define ASTRINGZ(x) STRINGZ(x) + +/** + * \} + */ + +#endif // _STRINGZ_H_ diff --git a/AVR Code/USB_BULK_TEST/src/ASF/xmega/utils/preprocessor/tpaste.h b/AVR Code/USB_BULK_TEST/src/ASF/xmega/utils/preprocessor/tpaste.h new file mode 100644 index 00000000..168a0cf8 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/xmega/utils/preprocessor/tpaste.h @@ -0,0 +1,104 @@ +/** + * \file + * + * \brief Preprocessor token pasting utils. + * + * Copyright (c) 2014-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ +#ifndef _TPASTE_H_ +#define _TPASTE_H_ + +/** + * \defgroup group_xmega_utils_tpaste Token Paste + * + * \ingroup group_xmega_utils + * + * \{ + */ + +/*! \name Token Paste + * + * Paste N preprocessing tokens together, these tokens being allowed to be \#defined. + * + * May be used only within macros with the tokens passed as arguments if the tokens are \#defined. + * + * For example, writing TPASTE2(U, WIDTH) within a macro \#defined by + * UTYPE(WIDTH) and invoked as UTYPE(UL_WIDTH) with UL_WIDTH \#defined as 32 is + * equivalent to writing U32. + */ +//! @{ +#define TPASTE2( a, b) a##b +#define TPASTE3( a, b, c) a##b##c +#define TPASTE4( a, b, c, d) a##b##c##d +#define TPASTE5( a, b, c, d, e) a##b##c##d##e +#define TPASTE6( a, b, c, d, e, f) a##b##c##d##e##f +#define TPASTE7( a, b, c, d, e, f, g) a##b##c##d##e##f##g +#define TPASTE8( a, b, c, d, e, f, g, h) a##b##c##d##e##f##g##h +#define TPASTE9( a, b, c, d, e, f, g, h, i) a##b##c##d##e##f##g##h##i +#define TPASTE10(a, b, c, d, e, f, g, h, i, j) a##b##c##d##e##f##g##h##i##j +//! @} + +/*! \name Absolute Token Paste + * + * Paste N preprocessing tokens together, these tokens being allowed to be \#defined. + * + * No restriction of use if the tokens are \#defined. + * + * For example, writing ATPASTE2(U, UL_WIDTH) anywhere with UL_WIDTH \#defined + * as 32 is equivalent to writing U32. + */ +//! @{ +#define ATPASTE2( a, b) TPASTE2( a, b) +#define ATPASTE3( a, b, c) TPASTE3( a, b, c) +#define ATPASTE4( a, b, c, d) TPASTE4( a, b, c, d) +#define ATPASTE5( a, b, c, d, e) TPASTE5( a, b, c, d, e) +#define ATPASTE6( a, b, c, d, e, f) TPASTE6( a, b, c, d, e, f) +#define ATPASTE7( a, b, c, d, e, f, g) TPASTE7( a, b, c, d, e, f, g) +#define ATPASTE8( a, b, c, d, e, f, g, h) TPASTE8( a, b, c, d, e, f, g, h) +#define ATPASTE9( a, b, c, d, e, f, g, h, i) TPASTE9( a, b, c, d, e, f, g, h, i) +#define ATPASTE10(a, b, c, d, e, f, g, h, i, j) TPASTE10(a, b, c, d, e, f, g, h, i, j) +//! @} + +/** + * \} + */ + +#endif // _TPASTE_H_ diff --git a/AVR Code/USB_BULK_TEST/src/ASF/xmega/utils/progmem.h b/AVR Code/USB_BULK_TEST/src/ASF/xmega/utils/progmem.h new file mode 100644 index 00000000..fcab5dbb --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/xmega/utils/progmem.h @@ -0,0 +1,102 @@ +/** + * \file + * + * \brief Program memory access + * + * Copyright (c) 2014-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ + +#ifndef UTILS_PROGMEM_H +#define UTILS_PROGMEM_H + +/** + * \defgroup group_xmega_utils_progmem Program memory + * + * \ingroup group_xmega_utils + * + * \{ + */ + +/*! \name Program memory + * + * Macros for locating and accessing data in program memory. + * + * @{ + */ +#if defined(__GNUC__) || defined(__DOXYGEN__) +# include +# define PROGMEM_LOCATION(type, name, loc) \ + type name __attribute__((section (#loc))) +# define PROGMEM_DECLARE(type, name) const type name __attribute__((__progmem__)) +# define PROGMEM_STRING(x) PSTR(x) +# define PROGMEM_STRING_T PGM_P +# define PROGMEM_T const +# define PROGMEM_PTR_T const * +# define PROGMEM_BYTE_ARRAY_T uint8_t* +# define PROGMEM_WORD_ARRAY_T uint16_t* +# define PROGMEM_READ_BYTE(x) pgm_read_byte(x) +# define PROGMEM_READ_WORD(x) pgm_read_word(x) + +#elif defined(__ICCAVR__) +# include +# ifndef __HAS_ELPM__ +# define _MEMATTR_ASF __flash +# else /* __HAS_ELPM__ */ +# define _MEMATTR_ASF __hugeflash +# endif /* __HAS_ELPM__ */ +# define PROGMEM_LOCATION(type, name, loc) const _MEMATTR_ASF type name @ loc +# define PROGMEM_DECLARE(type, name) _MEMATTR_ASF type name +# define PROGMEM_STRING(x) ((_MEMATTR_ASF const char *)(x)) +# define PROGMEM_STRING_T char const _MEMATTR_ASF * +# define PROGMEM_T const _MEMATTR_ASF +# define PROGMEM_PTR_T const _MEMATTR_ASF * +# define PROGMEM_BYTE_ARRAY_T uint8_t const _MEMATTR_ASF * +# define PROGMEM_WORD_ARRAY_T uint16_t const _MEMATTR_ASF * +# define PROGMEM_READ_BYTE(x) *(x) +# define PROGMEM_READ_WORD(x) *(x) +#endif +//! @} + +/** + * \} + */ + +#endif /* UTILS_PROGMEM_H */ diff --git a/AVR Code/USB_BULK_TEST/src/ASF/xmega/utils/status_codes.h b/AVR Code/USB_BULK_TEST/src/ASF/xmega/utils/status_codes.h new file mode 100644 index 00000000..035e6963 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ASF/xmega/utils/status_codes.h @@ -0,0 +1,121 @@ +/** + * \file + * + * \brief Status code definitions. + * + * This file defines various status codes returned by functions, + * indicating success or failure as well as what kind of failure. + * + * Copyright (c) 2009-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ +#ifndef STATUS_CODES_H_INCLUDED +#define STATUS_CODES_H_INCLUDED + +/** + * \defgroup group_xmega_utils_status_codes Status Codes + * + * \ingroup group_xmega_utils + * + * \{ + */ + +/* Note: this is a local workaround to avoid a pre-processor clash due to the + * lwIP macro ERR_TIMEOUT. */ +#if defined(__LWIP_ERR_H__) && defined(ERR_TIMEOUT) +#if (ERR_TIMEOUT != -3) + +/* Internal check to make sure that the later restore of lwIP's ERR_TIMEOUT + * macro is set to the correct value. Note that it is highly improbable that + * this value ever changes in lwIP. */ +#error ASF developers: check lwip err.h new value for ERR_TIMEOUT +#endif +#undef ERR_TIMEOUT +#endif + +/** + * Status code that may be returned by shell commands and protocol + * implementations. + * + * \note Any change to these status codes and the corresponding + * message strings is strictly forbidden. New codes can be added, + * however, but make sure that any message string tables are updated + * at the same time. + */ +enum status_code { + STATUS_OK = 0, //!< Success + ERR_IO_ERROR = -1, //!< I/O error + ERR_FLUSHED = -2, //!< Request flushed from queue + ERR_TIMEOUT = -3, //!< Operation timed out + ERR_BAD_DATA = -4, //!< Data integrity check failed + ERR_PROTOCOL = -5, //!< Protocol error + ERR_UNSUPPORTED_DEV = -6, //!< Unsupported device + ERR_NO_MEMORY = -7, //!< Insufficient memory + ERR_INVALID_ARG = -8, //!< Invalid argument + ERR_BAD_ADDRESS = -9, //!< Bad address + ERR_BUSY = -10, //!< Resource is busy + ERR_BAD_FORMAT = -11, //!< Data format not recognized + ERR_NO_TIMER = -12, //!< No timer available + ERR_TIMER_ALREADY_RUNNING = -13, //!< Timer already running + ERR_TIMER_NOT_RUNNING = -14, //!< Timer not running + + /** + * \brief Operation in progress + * + * This status code is for driver-internal use when an operation + * is currently being performed. + * + * \note Drivers should never return this status code to any + * callers. It is strictly for internal use. + */ + OPERATION_IN_PROGRESS = -128, +}; + +typedef enum status_code status_code_t; + +#if defined(__LWIP_ERR_H__) +#define ERR_TIMEOUT -3 +#endif + +/** + * \} + */ + +#endif /* STATUS_CODES_H_INCLUDED */ diff --git a/AVR Code/USB_BULK_TEST/src/asf.h b/AVR Code/USB_BULK_TEST/src/asf.h new file mode 100644 index 00000000..cd3cf2f2 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/asf.h @@ -0,0 +1,101 @@ +/** + * \file + * + * \brief Autogenerated API include file for the Atmel Software Framework (ASF) + * + * Copyright (c) 2012 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ + +#ifndef ASF_H +#define ASF_H + +/* + * This file includes all API header files for the selected drivers from ASF. + * Note: There might be duplicate includes required by more than one driver. + * + * The file is automatically generated and will be re-written when + * running the ASF driver selector tool. Any changes will be discarded. + */ + +// From module: CPU specific features +#include +#include + +// From module: Common build items for user board support templates +#include + +// From module: Generic board support +#include + +// From module: IOPORT - General purpose I/O service +#include + +// From module: Interrupt management - XMEGA implementation +#include + +// From module: NVM - Non Volatile Memory +#include + +// From module: Part identification macros +#include + +// From module: Sleep Controller driver +#include + +// From module: Sleep manager - XMEGA A/AU/B/D implementation +#include +#include + +// From module: System Clock Control - XMEGA A1U/A3U/A3BU/A4U/B/C implementation +#include + +// From module: USB Device Stack Core (Common API) +#include +#include + +// From module: USB Device Vendor Class (Single Interface Device) +#include + +// From module: USB Vendor Protocol +#include + +// From module: XMEGA compiler driver +#include +#include + +#endif // ASF_H diff --git a/AVR Code/USB_BULK_TEST/src/config/conf_board.h b/AVR Code/USB_BULK_TEST/src/config/conf_board.h new file mode 100644 index 00000000..7b88c97f --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/config/conf_board.h @@ -0,0 +1,14 @@ +/** + * \file + * + * \brief User board configuration template + * + */ +/* + * Support and FAQ: visit Atmel Support + */ + +#ifndef CONF_BOARD_H +#define CONF_BOARD_H + +#endif // CONF_BOARD_H diff --git a/AVR Code/USB_BULK_TEST/src/config/conf_clock.h b/AVR Code/USB_BULK_TEST/src/config/conf_clock.h new file mode 100644 index 00000000..9f74e559 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/config/conf_clock.h @@ -0,0 +1,80 @@ +/** + * \file + * + * \brief Chip-specific system clock manager configuration + * + * Copyright (c) 2011-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ +#ifndef CONF_CLOCK_H_INCLUDED +#define CONF_CLOCK_H_INCLUDED + +//! Configuration using On-Chip RC oscillator at 48MHz +//! The RC oscillator is calibrated via USB Start Of Frame +//! Clk USB = 48MHz (used by USB) +//! Clk sys = 48MHz +//! Clk cpu/per = 24MHz +#define CONFIG_USBCLK_SOURCE USBCLK_SRC_RCOSC +#define CONFIG_OSC_RC32_CAL 48000000UL + +#define CONFIG_OSC_AUTOCAL_RC32MHZ_REF_OSC OSC_ID_USBSOF + +#define CONFIG_SYSCLK_SOURCE SYSCLK_SRC_RC32MHZ +#define CONFIG_SYSCLK_PSADIV SYSCLK_PSADIV_2 +#define CONFIG_SYSCLK_PSBCDIV SYSCLK_PSBCDIV_1_1 + +/* +//! Use external board OSC (8MHz) +//! Clk pll = 48MHz (used by USB) +//! Clk sys = 48MHz +//! Clk cpu/per = 12MHz + +#define CONFIG_PLL0_SOURCE PLL_SRC_XOSC +#define CONFIG_PLL0_MUL 6 +#define CONFIG_PLL0_DIV 1 + +#define CONFIG_USBCLK_SOURCE USBCLK_SRC_PLL + +#define CONFIG_SYSCLK_SOURCE SYSCLK_SRC_PLL +#define CONFIG_SYSCLK_PSADIV SYSCLK_PSADIV_2 +#define CONFIG_SYSCLK_PSBCDIV SYSCLK_PSBCDIV_1_2 +*/ + +#endif /* CONF_CLOCK_H_INCLUDED */ diff --git a/AVR Code/USB_BULK_TEST/src/config/conf_menu.h b/AVR Code/USB_BULK_TEST/src/config/conf_menu.h new file mode 100644 index 00000000..5a765a77 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/config/conf_menu.h @@ -0,0 +1,72 @@ +/** + * \file + * + * \brief Default configurations for menu system + * + * Copyright (c) 2009-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ + +#ifndef DEFAULT_MENU_H_INCLUDED +#define DEFAULT_MENU_H_INCLUDED + +//! \name Indicator icon definitions +//@{ +//! Bitmap data, row by row, MSB is leftmost pixel, one byte per row. +#define GFX_MONO_MENU_INDICATOR_BITMAP 0xFF, 0x7E, 0x3C, 0x18 +//! Height in pixels of indicator icon +#define GFX_MONO_MENU_INDICATOR_HEIGHT 8 +//! Width in pixels of indicator icon +#define GFX_MONO_MENU_INDICATOR_WIDTH 4 +//@} + +//! \name Keyboard codes +//@{ +//! Down +#define GFX_MONO_MENU_KEYCODE_DOWN 40 +//! Up +#define GFX_MONO_MENU_KEYCODE_UP 38 +//! Back/exit +#define GFX_MONO_MENU_KEYCODE_BACK 8 +//! Enter/select +#define GFX_MONO_MENU_KEYCODE_ENTER 13 +//@} + +#endif /* DEFAULT_MENU_H_INCLUDED */ diff --git a/AVR Code/USB_BULK_TEST/src/config/conf_sleepmgr.h b/AVR Code/USB_BULK_TEST/src/config/conf_sleepmgr.h new file mode 100644 index 00000000..4c6708d9 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/config/conf_sleepmgr.h @@ -0,0 +1,51 @@ +/** + * \file + * + * \brief Sleep manager configuration + * + * Copyright (c) 2014-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ +#ifndef CONF_SLEEPMGR_H +#define CONF_SLEEPMGR_H + +#define CONFIG_SLEEPMGR_ENABLE + +#endif /* CONF_SLEEPMGR_H */ diff --git a/AVR Code/USB_BULK_TEST/src/config/conf_spi_master.h b/AVR Code/USB_BULK_TEST/src/config/conf_spi_master.h new file mode 100644 index 00000000..afdc02ed --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/config/conf_spi_master.h @@ -0,0 +1,52 @@ +/** + * \file ********************************************************************* + * + * \brief Spi Master configuration for spi example + * + * Copyright (c) 2014-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ +#ifndef CONF_SPI_MASTER_H_INCLUDED +#define CONF_SPI_MASTER_H_INCLUDED + +//! Default Config Spi Master Dummy Field +// #define CONFIG_SPI_MASTER_DUMMY 0xFF + +#endif /* CONF_SPI_MASTER_H_INCLUDED */ diff --git a/AVR Code/USB_BULK_TEST/src/config/conf_spinctrl.h b/AVR Code/USB_BULK_TEST/src/config/conf_spinctrl.h new file mode 100644 index 00000000..2090b6a1 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/config/conf_spinctrl.h @@ -0,0 +1,75 @@ +/** + * \file + * + * \brief Default configurations for gfx_mono_spinctrl + * + * Copyright (c) 2009-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ + +#ifndef DEFAULT_GFX_MONO_SPINCTRL_H_INCLUDED +#define DEFAULT_GFX_MONO_SPINCTRL_H_INCLUDED + +//! Spinner value indicator +/* Bitmap data, row by row, MSB is leftmost pixel, one byte per row. */ +#define GFX_MONO_SPINCTRL_SPIN_INDICATOR_BITMAP 0x18, 0x3C, 0x7E, 0xFF +//! Height of spinner value indicator +#define GFX_MONO_SPINCTRL_SPIN_INDICATOR_HEIGHT 8 +//! Width of spinner value indicator +#define GFX_MONO_SPINCTRL_SPIN_INDICATOR_WIDTH 4 + +//! Spinner indicator +/* Bitmap data, row by row, MSB is leftmost pixel, one byte per row. */ +#define GFX_MONO_SPINCTRL_INDICATOR_BITMAP 0xFF, 0x7E, 0x3C, 0x18 +//! Height of spinner indicator +#define GFX_MONO_SPINCTRL_INDICATOR_HEIGHT 8 +//! Width of spinner indicator +#define GFX_MONO_SPINCTRL_INDICATOR_WIDTH 4 + +//! Keyboard code down +#define GFX_MONO_SPINCTRL_KEYCODE_DOWN 40 +//! Keyboard code up +#define GFX_MONO_SPINCTRL_KEYCODE_UP 38 +//! Keyboard code back +#define GFX_MONO_SPINCTRL_KEYCODE_BACK 8 +//! Keyboard code enter +#define GFX_MONO_SPINCTRL_KEYCODE_ENTER 13 + +#endif /* DEFAULT_GFX_MONO_SPINCTRL_H_INCLUDED */ diff --git a/AVR Code/USB_BULK_TEST/src/config/conf_st7565r.h b/AVR Code/USB_BULK_TEST/src/config/conf_st7565r.h new file mode 100644 index 00000000..0dd67fd8 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/config/conf_st7565r.h @@ -0,0 +1,101 @@ +/** + * \file + * + * \brief ST7565R display controller driver configuration file. + * + * Copyright (c) 2014-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ +#ifndef CONF_ST7565R_H_INCLUDED +#define CONF_ST7565R_H_INCLUDED + +#include + +#if BOARD == XMEGA_A3BU_XPLAINED +// Interface configuration for XMEGA-A3BU Xplained + +# define ST7565R_USART_SPI_INTERFACE +# define ST7565R_USART_SPI &USARTD0 + +# define ST7565R_A0_PIN NHD_C12832A1Z_REGISTER_SELECT +# define ST7565R_CS_PIN NHD_C12832A1Z_CSN +# define ST7565R_RESET_PIN NHD_C12832A1Z_RESETN + +#else +// Interface configuration for other boards +# warning ST7565R driver must be configured. Please see conf_st7565r.h. + +// Interface possibilities: +// 1) Regular SPI interface +// #define ST7565R_SPI_INTERFACE +// #define ST7565R_SPI &SPID + +// 2) USART SPI interface +// #define ST7565R_USART_SPI_INTERFACE +// #define ST7565R_USART_SPI &USARTD0 + +// Pin mapping: +// - Register select +// #define ST7565R_A0_PIN 0 +// - Chip select +// #define ST7565R_CS_PIN 1 +// - Reset +// #define ST7565R_RESET_PIN 2 + + +// Placeholder setup + +# define ST7565R_SPI_INTERFACE +# define ST7565R_SPI 0 + +# define ST7565R_A0_PIN 0 +# define ST7565R_CS_PIN 1 +# define ST7565R_RESET_PIN 2 + +#endif // BOARD + +// Board independent configuration + +// Minimum clock period is 50ns@3.3V -> max frequency is 20MHz +#define ST7565R_CLOCK_SPEED 1000000 +#define ST7565R_DISPLAY_CONTRAST_MAX 40 +#define ST7565R_DISPLAY_CONTRAST_MIN 30 + +#endif /* CONF_ST7565R_H_INCLUDED */ diff --git a/AVR Code/USB_BULK_TEST/src/config/conf_sysfont.h b/AVR Code/USB_BULK_TEST/src/config/conf_sysfont.h new file mode 100644 index 00000000..05daa73b --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/config/conf_sysfont.h @@ -0,0 +1,1170 @@ +/** + * \file + * + * \brief Default configurations for sysfont + * + * Copyright (c) 2014-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ +#ifndef CONF_SYSFONT_H +#define CONF_SYSFONT_H + +/** + * \weakgroup gfx_mono_sysfont + * @{ + */ + +#include + +/* #define USE_FONT_BPMONO_10x16 */ +/* #define USE_FONT_BPMONO_10x14 */ +/* #define USE_FONT_MONO_MMM_10x12 */ +#define USE_FONT_BASIC_6x7 + +#if defined(USE_FONT_BPMONO_10x16) +/** Width of each glyph, including spacer column. */ +# define SYSFONT_WIDTH 10 +/** Height of each glyph, excluding spacer line. */ +# define SYSFONT_HEIGHT 16 +/** Line height. */ +# define SYSFONT_LINESPACING 8 +/** First character defined. */ +# define SYSFONT_FIRSTCHAR ((uint8_t)' ') +/** Last character defined. */ +# define SYSFONT_LASTCHAR ((uint8_t)'}') + +/** Define variable containing the font */ +# define SYSFONT_DEFINE_GLYPHS \ + /* Glyph data, row by row, MSB is leftmost pixel, one byte per row. */ \ + static PROGMEM_DECLARE(uint8_t, sysfont_glyphs[]) = { \ + /* "BPmono" font (http://www.backpacker.gr) at size 10x16 */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x30, 0x00, \ + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, \ + 0x00, 0x00, 0x30, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* ! */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x6C, 0x00, \ + 0x6C, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* " */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, \ + 0x48, 0x00, 0xFC, 0x00, 0x48, 0x00, 0x48, 0x00, 0x48, 0x00, \ + 0xFC, 0x00, 0x48, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* # */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x10, 0x00, \ + 0x3C, 0x00, 0x40, 0x00, 0x30, 0x00, 0x08, 0x00, 0x04, 0x00, \ + 0x78, 0x00, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* $ */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, \ + 0xA4, 0x00, 0xA8, 0x00, 0x48, 0x00, 0x10, 0x00, 0x14, 0x00, \ + 0x2A, 0x00, 0x4A, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* % */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x88, 0x00, \ + 0x88, 0x00, 0x88, 0x00, 0x70, 0x00, 0x88, 0x00, 0x8A, 0x00, \ + 0x8A, 0x00, 0x8C, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* & */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x10, 0x00, \ + 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* ' */ \ + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x10, 0x00, 0x10, 0x00, \ + 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, \ + 0x20, 0x00, 0x10, 0x00, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* ( */ \ + 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x10, 0x00, 0x10, 0x00, \ + 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, \ + 0x08, 0x00, 0x10, 0x00, 0x10, 0x00, 0x20, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* ) */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x10, 0x00, \ + 0x7C, 0x00, 0x10, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* * */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0xFE, 0x00, \ + 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* + */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, 0x18, 0x00, 0x18, 0x00, 0x30, 0x00, 0x20, 0x00, \ + 0x00, 0x00, /* , */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* - */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, 0x18, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* . */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, \ + 0x08, 0x00, 0x08, 0x00, 0x10, 0x00, 0x10, 0x00, 0x20, 0x00, \ + 0x20, 0x00, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* / */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x84, 0x00, \ + 0x84, 0x00, 0x8C, 0x00, 0x94, 0x00, 0xA4, 0x00, 0xC4, 0x00, \ + 0x84, 0x00, 0x84, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* 0 */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x30, 0x00, \ + 0x50, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, \ + 0x10, 0x00, 0x10, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* 1 */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x88, 0x00, \ + 0x08, 0x00, 0x08, 0x00, 0x10, 0x00, 0x10, 0x00, 0x20, 0x00, \ + 0x20, 0x00, 0x40, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* 2 */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x88, 0x00, \ + 0x08, 0x00, 0x08, 0x00, 0x30, 0x00, 0x08, 0x00, 0x08, 0x00, \ + 0x08, 0x00, 0x88, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* 3 */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x18, 0x00, \ + 0x28, 0x00, 0x28, 0x00, 0x48, 0x00, 0x88, 0x00, 0x88, 0x00, \ + 0xFC, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* 4 */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x80, 0x00, \ + 0x80, 0x00, 0xB8, 0x00, 0xC4, 0x00, 0x04, 0x00, 0x04, 0x00, \ + 0x04, 0x00, 0x84, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* 5 */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x40, 0x00, \ + 0x80, 0x00, 0x80, 0x00, 0xB0, 0x00, 0xC8, 0x00, 0x84, 0x00, \ + 0x84, 0x00, 0x48, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* 6 */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x04, 0x00, \ + 0x04, 0x00, 0x08, 0x00, 0x08, 0x00, 0x10, 0x00, 0x10, 0x00, \ + 0x20, 0x00, 0x20, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* 7 */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x84, 0x00, \ + 0x84, 0x00, 0x84, 0x00, 0x78, 0x00, 0x84, 0x00, 0x84, 0x00, \ + 0x84, 0x00, 0x84, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* 8 */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x84, 0x00, \ + 0x84, 0x00, 0x84, 0x00, 0x8C, 0x00, 0x74, 0x00, 0x04, 0x00, \ + 0x08, 0x00, 0x10, 0x00, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* 9 */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x30, 0x00, 0x00, 0x00, \ + 0x00, 0x00, 0x30, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* : */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x60, 0x00, 0x00, 0x00, \ + 0x00, 0x00, 0x60, 0x00, 0x60, 0x00, 0xC0, 0x00, 0x80, 0x00, \ + 0x00, 0x00, /* ; */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, 0x04, 0x00, 0x18, 0x00, 0x60, 0x00, 0x80, 0x00, \ + 0x60, 0x00, 0x18, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* < */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* = */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, 0x40, 0x00, 0x30, 0x00, 0x0C, 0x00, 0x02, 0x00, \ + 0x0C, 0x00, 0x30, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* > */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x88, 0x00, \ + 0x08, 0x00, 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0x20, 0x00, \ + 0x00, 0x00, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* ? */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x3C, 0x00, 0x42, 0x00, 0xBA, 0x00, 0xAA, 0x00, 0xAA, 0x00, \ + 0xAA, 0x00, 0xBC, 0x00, 0x40, 0x00, 0x3C, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* @ */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x10, 0x00, \ + 0x28, 0x00, 0x28, 0x00, 0x28, 0x00, 0x44, 0x00, 0x7C, 0x00, \ + 0x44, 0x00, 0x82, 0x00, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* A */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x88, 0x00, \ + 0x88, 0x00, 0x88, 0x00, 0xF0, 0x00, 0x88, 0x00, 0x88, 0x00, \ + 0x88, 0x00, 0x88, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* B */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x44, 0x00, \ + 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, \ + 0x80, 0x00, 0x44, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* C */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x88, 0x00, \ + 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, \ + 0x84, 0x00, 0x88, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* D */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x40, 0x00, \ + 0x40, 0x00, 0x40, 0x00, 0x78, 0x00, 0x40, 0x00, 0x40, 0x00, \ + 0x40, 0x00, 0x40, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* E */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x40, 0x00, \ + 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x78, 0x00, 0x40, 0x00, \ + 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* F */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x44, 0x00, \ + 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x9C, 0x00, 0x84, 0x00, \ + 0x84, 0x00, 0x44, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* G */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x84, 0x00, 0x84, 0x00, \ + 0x84, 0x00, 0x84, 0x00, 0xFC, 0x00, 0x84, 0x00, 0x84, 0x00, \ + 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* H */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x10, 0x00, \ + 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, \ + 0x10, 0x00, 0x10, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* I */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x08, 0x00, \ + 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, \ + 0x08, 0x00, 0x10, 0x00, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* J */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x84, 0x00, 0x84, 0x00, \ + 0x88, 0x00, 0x90, 0x00, 0xA0, 0x00, 0xD0, 0x00, 0x88, 0x00, \ + 0x88, 0x00, 0x84, 0x00, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* K */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x00, \ + 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, \ + 0x80, 0x00, 0x80, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* L */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x84, 0x00, 0x84, 0x00, \ + 0xCC, 0x00, 0xCC, 0x00, 0xB4, 0x00, 0xB4, 0x00, 0x84, 0x00, \ + 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* M */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x84, 0x00, 0xC4, 0x00, \ + 0xC4, 0x00, 0xA4, 0x00, 0xA4, 0x00, 0x94, 0x00, 0x94, 0x00, \ + 0x8C, 0x00, 0x8C, 0x00, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* N */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x48, 0x00, \ + 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, \ + 0x84, 0x00, 0x48, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* O */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x88, 0x00, \ + 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, 0x88, 0x00, 0xF0, 0x00, \ + 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* P */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x48, 0x00, \ + 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, \ + 0x84, 0x00, 0x48, 0x00, 0x30, 0x00, 0x20, 0x00, 0x1C, 0x00, \ + 0x00, 0x00, /* Q */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x88, 0x00, \ + 0x84, 0x00, 0x84, 0x00, 0x88, 0x00, 0xF0, 0x00, 0x90, 0x00, \ + 0x88, 0x00, 0x84, 0x00, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* R */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x84, 0x00, \ + 0x80, 0x00, 0x40, 0x00, 0x30, 0x00, 0x08, 0x00, 0x04, 0x00, \ + 0x04, 0x00, 0x84, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* S */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x10, 0x00, \ + 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, \ + 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* T */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x84, 0x00, 0x84, 0x00, \ + 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, \ + 0x84, 0x00, 0x84, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* U */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x00, 0x82, 0x00, \ + 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x28, 0x00, \ + 0x28, 0x00, 0x28, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* V */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x84, 0x00, 0x84, 0x00, \ + 0x84, 0x00, 0x84, 0x00, 0xB4, 0x00, 0xB4, 0x00, 0xB4, 0x00, \ + 0x78, 0x00, 0x48, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* W */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x00, 0x44, 0x00, \ + 0x44, 0x00, 0x28, 0x00, 0x10, 0x00, 0x10, 0x00, 0x28, 0x00, \ + 0x44, 0x00, 0x44, 0x00, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* X */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x00, 0x44, 0x00, \ + 0x44, 0x00, 0x28, 0x00, 0x28, 0x00, 0x28, 0x00, 0x10, 0x00, \ + 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* Y */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x04, 0x00, \ + 0x08, 0x00, 0x08, 0x00, 0x10, 0x00, 0x10, 0x00, 0x20, 0x00, \ + 0x40, 0x00, 0x40, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* Z */ \ + 0x00, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x80, 0x00, 0x80, 0x00, \ + 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, \ + 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0xE0, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* [ */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x40, 0x00, \ + 0x20, 0x00, 0x20, 0x00, 0x10, 0x00, 0x10, 0x00, 0x08, 0x00, \ + 0x08, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* \ */ \ + 0x00, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x20, 0x00, 0x20, 0x00, \ + 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, \ + 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0xE0, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* ] */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x28, 0x00, \ + 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* ^ */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* _ */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x10, 0x00, \ + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* ` */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, 0x78, 0x00, 0x04, 0x00, 0x04, 0x00, 0x7C, 0x00, \ + 0x84, 0x00, 0x8C, 0x00, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* a */ \ + 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, \ + 0x80, 0x00, 0xB8, 0x00, 0xC4, 0x00, 0x84, 0x00, 0x84, 0x00, \ + 0x84, 0x00, 0x88, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* b */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, 0x7C, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, \ + 0x80, 0x00, 0x80, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* c */ \ + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, \ + 0x02, 0x00, 0x3E, 0x00, 0x42, 0x00, 0x82, 0x00, 0x82, 0x00, \ + 0x82, 0x00, 0x42, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* d */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, 0x7C, 0x00, 0x82, 0x00, 0x82, 0x00, 0xFE, 0x00, \ + 0x80, 0x00, 0x80, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* e */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x20, 0x00, \ + 0x20, 0x00, 0xFC, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, \ + 0x20, 0x00, 0x20, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* f */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, 0x7C, 0x00, 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, \ + 0x84, 0x00, 0x8C, 0x00, 0x74, 0x00, 0x04, 0x00, 0x44, 0x00, \ + 0x38, 0x00, /* g */ \ + 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, \ + 0x80, 0x00, 0xB8, 0x00, 0xC4, 0x00, 0x84, 0x00, 0x84, 0x00, \ + 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* h */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, \ + 0x00, 0x00, 0x70, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, \ + 0x10, 0x00, 0x10, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* i */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, \ + 0x00, 0x00, 0x78, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, \ + 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x10, 0x00, \ + 0xE0, 0x00, /* j */ \ + 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, \ + 0x80, 0x00, 0x88, 0x00, 0x90, 0x00, 0xA0, 0x00, 0xE0, 0x00, \ + 0x90, 0x00, 0x88, 0x00, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* k */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x10, 0x00, \ + 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, \ + 0x10, 0x00, 0x10, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* l */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, 0xAC, 0x00, 0xD4, 0x00, 0x94, 0x00, 0x94, 0x00, \ + 0x94, 0x00, 0x94, 0x00, 0x94, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* m */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, 0xB8, 0x00, 0xC4, 0x00, 0x84, 0x00, 0x84, 0x00, \ + 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* n */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, 0x78, 0x00, 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, \ + 0x84, 0x00, 0x84, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* o */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, 0xB8, 0x00, 0xC4, 0x00, 0x84, 0x00, 0x84, 0x00, \ + 0x84, 0x00, 0x84, 0x00, 0xF8, 0x00, 0x80, 0x00, 0x80, 0x00, \ + 0x80, 0x00, /* p */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, 0x7C, 0x00, 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, \ + 0x84, 0x00, 0x84, 0x00, 0x7C, 0x00, 0x04, 0x00, 0x04, 0x00, \ + 0x04, 0x00, /* q */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, 0xCC, 0x00, 0x30, 0x00, 0x20, 0x00, 0x20, 0x00, \ + 0x20, 0x00, 0x20, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* r */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, 0x7C, 0x00, 0x80, 0x00, 0x80, 0x00, 0x78, 0x00, \ + 0x04, 0x00, 0x04, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* s */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x20, 0x00, 0xFC, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, \ + 0x20, 0x00, 0x20, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* t */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, 0x88, 0x00, 0x88, 0x00, 0x88, 0x00, 0x88, 0x00, \ + 0x88, 0x00, 0x88, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* u */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, 0x82, 0x00, 0x44, 0x00, 0x44, 0x00, 0x28, 0x00, \ + 0x28, 0x00, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* v */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, 0x84, 0x00, 0x84, 0x00, 0xB4, 0x00, 0xB4, 0x00, \ + 0x48, 0x00, 0x48, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* w */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, 0x44, 0x00, 0x28, 0x00, 0x28, 0x00, 0x10, 0x00, \ + 0x28, 0x00, 0x44, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* x */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, 0x82, 0x00, 0x44, 0x00, 0x44, 0x00, 0x28, 0x00, \ + 0x28, 0x00, 0x28, 0x00, 0x10, 0x00, 0x10, 0x00, 0x20, 0x00, \ + 0x20, 0x00, /* y */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, 0xFC, 0x00, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, \ + 0x20, 0x00, 0x40, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* z */ \ + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x10, 0x00, 0x10, 0x00, \ + 0x08, 0x00, 0x08, 0x00, 0x10, 0x00, 0x10, 0x00, 0x08, 0x00, \ + 0x08, 0x00, 0x10, 0x00, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* { */ \ + 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, \ + 0x10, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, \ + 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* | */ \ + 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x10, 0x00, 0x10, 0x00, \ + 0x20, 0x00, 0x20, 0x00, 0x10, 0x00, 0x10, 0x00, 0x20, 0x00, \ + 0x20, 0x00, 0x10, 0x00, 0x10, 0x00, 0x20, 0x00, 0x00, 0x00, \ + 0x00, 0x00, /* } */ \ + }; +#elif defined(USE_FONT_BPMONO_10x14) +/** Width of each glyph, including spacer column. */ +# define SYSFONT_WIDTH 10 +/** Height of each glyph, excluding spacer line. */ +# define SYSFONT_HEIGHT 14 +/** Line height. */ +# define SYSFONT_LINESPACING 8 +/** First character defined. */ +# define SYSFONT_FIRSTCHAR ((uint8_t)' ') +/** Last character defined. */ +# define SYSFONT_LASTCHAR ((uint8_t)'}') + +/** Define variable containing the font */ +# define SYSFONT_DEFINE_GLYPHS \ + /* Glyph data, row by row, MSB is leftmost pixel, one byte per row. */ \ + static PROGMEM_DECLARE(uint8_t, sysfont_glyphs[]) = { \ + /* "BPmono" font (http://www.backpacker.gr) at size 10x14 */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* */ \ + 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, \ + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, \ + 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* ! */ \ + 0x00, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x6C, 0x00, \ + 0x6C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* " */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x28, 0x00, \ + 0x7C, 0x00, 0x28, 0x00, 0x28, 0x00, 0x7C, 0x00, 0x28, 0x00, \ + 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* # */ \ + 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x3C, 0x00, 0x40, 0x00, \ + 0x20, 0x00, 0x10, 0x00, 0x08, 0x00, 0x04, 0x00, 0x78, 0x00, \ + 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* $ */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0xA4, 0x00, \ + 0xA8, 0x00, 0x50, 0x00, 0x28, 0x00, 0x54, 0x00, 0x94, 0x00, \ + 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* % */ \ + 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x90, 0x00, 0x90, 0x00, \ + 0x90, 0x00, 0x60, 0x00, 0x94, 0x00, 0x88, 0x00, 0x88, 0x00, \ + 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* & */ \ + 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* ' */ \ + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, \ + 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, \ + 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, /* ( */ \ + 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x10, 0x00, 0x08, 0x00, \ + 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, \ + 0x10, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, /* ) */ \ + 0x00, 0x00, 0x28, 0x00, 0x10, 0x00, 0x7C, 0x00, 0x10, 0x00, \ + 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* * */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, \ + 0x10, 0x00, 0x10, 0x00, 0xFE, 0x00, 0x10, 0x00, 0x10, 0x00, \ + 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* + */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x10, 0x00, 0x30, 0x00, 0x20, 0x00, 0x00, 0x00, /* , */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* - */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, \ + 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* . */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, \ + 0x10, 0x00, 0x10, 0x00, 0x20, 0x00, 0x20, 0x00, 0x40, 0x00, \ + 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* / */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x84, 0x00, \ + 0x8C, 0x00, 0x94, 0x00, 0xA4, 0x00, 0xC4, 0x00, 0x84, 0x00, \ + 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0 */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x30, 0x00, \ + 0x50, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, \ + 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 1 */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x88, 0x00, \ + 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x80, 0x00, \ + 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 2 */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x88, 0x00, \ + 0x08, 0x00, 0x30, 0x00, 0x08, 0x00, 0x08, 0x00, 0x88, 0x00, \ + 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 3 */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x18, 0x00, \ + 0x28, 0x00, 0x48, 0x00, 0x88, 0x00, 0xFC, 0x00, 0x08, 0x00, \ + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 4 */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x80, 0x00, \ + 0x80, 0x00, 0xF0, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, \ + 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 5 */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x40, 0x00, \ + 0x80, 0x00, 0xF0, 0x00, 0x88, 0x00, 0x88, 0x00, 0x88, 0x00, \ + 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 6 */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x08, 0x00, \ + 0x10, 0x00, 0x10, 0x00, 0x20, 0x00, 0x20, 0x00, 0x40, 0x00, \ + 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 7 */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x88, 0x00, \ + 0x88, 0x00, 0x70, 0x00, 0x88, 0x00, 0x88, 0x00, 0x88, 0x00, \ + 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 8 */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x88, 0x00, \ + 0x88, 0x00, 0x88, 0x00, 0x78, 0x00, 0x08, 0x00, 0x10, 0x00, \ + 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 9 */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x30, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, \ + 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* : */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x30, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, \ + 0x30, 0x00, 0x60, 0x00, 0x40, 0x00, 0x00, 0x00, /* ; */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, \ + 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x20, 0x00, 0x10, 0x00, \ + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* < */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* = */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, \ + 0x20, 0x00, 0x10, 0x00, 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, \ + 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* > */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x48, 0x00, \ + 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* ? */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, \ + 0x42, 0x00, 0x9A, 0x00, 0xAA, 0x00, 0xAA, 0x00, 0xBE, 0x00, \ + 0x80, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, /* @ */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x28, 0x00, \ + 0x28, 0x00, 0x44, 0x00, 0x7C, 0x00, 0x44, 0x00, 0x44, 0x00, \ + 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* A */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x84, 0x00, \ + 0x84, 0x00, 0xF8, 0x00, 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, \ + 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* B */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x40, 0x00, \ + 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x40, 0x00, \ + 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x88, 0x00, \ + 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, 0x88, 0x00, \ + 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* D */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x80, 0x00, \ + 0x80, 0x00, 0xF0, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, \ + 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* E */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x80, 0x00, \ + 0x80, 0x00, 0xF8, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, \ + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* F */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x40, 0x00, \ + 0x80, 0x00, 0x80, 0x00, 0x9C, 0x00, 0x84, 0x00, 0x44, 0x00, \ + 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* G */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, 0x88, 0x00, \ + 0x88, 0x00, 0xF8, 0x00, 0x88, 0x00, 0x88, 0x00, 0x88, 0x00, \ + 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* H */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x20, 0x00, \ + 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, \ + 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* I */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x08, 0x00, \ + 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, \ + 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* J */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x84, 0x00, 0x88, 0x00, \ + 0x90, 0x00, 0xA0, 0x00, 0xD0, 0x00, 0x88, 0x00, 0x84, 0x00, \ + 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* K */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x00, \ + 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, \ + 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* L */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x84, 0x00, 0xCC, 0x00, \ + 0xCC, 0x00, 0xB4, 0x00, 0xB4, 0x00, 0x84, 0x00, 0x84, 0x00, \ + 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* M */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x84, 0x00, 0xC4, 0x00, \ + 0xC4, 0x00, 0xA4, 0x00, 0xA4, 0x00, 0x94, 0x00, 0x94, 0x00, \ + 0x8C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* N */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x84, 0x00, \ + 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, \ + 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* O */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x84, 0x00, \ + 0x84, 0x00, 0x84, 0x00, 0xF8, 0x00, 0x80, 0x00, 0x80, 0x00, \ + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* P */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x84, 0x00, \ + 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, \ + 0x78, 0x00, 0x20, 0x00, 0x18, 0x00, 0x00, 0x00, /* Q */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x84, 0x00, \ + 0x84, 0x00, 0x84, 0x00, 0xF8, 0x00, 0x88, 0x00, 0x84, 0x00, \ + 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* R */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x80, 0x00, \ + 0x80, 0x00, 0x60, 0x00, 0x18, 0x00, 0x04, 0x00, 0x04, 0x00, \ + 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* S */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x20, 0x00, \ + 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, \ + 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* T */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x84, 0x00, 0x84, 0x00, \ + 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, \ + 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* U */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x84, 0x00, 0x84, 0x00, \ + 0x84, 0x00, 0x48, 0x00, 0x48, 0x00, 0x48, 0x00, 0x30, 0x00, \ + 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* V */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, 0xA8, 0x00, \ + 0xA8, 0x00, 0xA8, 0x00, 0xA8, 0x00, 0xA8, 0x00, 0x50, 0x00, \ + 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* W */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, 0x88, 0x00, \ + 0x50, 0x00, 0x20, 0x00, 0x20, 0x00, 0x50, 0x00, 0x88, 0x00, \ + 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* X */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, 0x88, 0x00, \ + 0x88, 0x00, 0x50, 0x00, 0x50, 0x00, 0x20, 0x00, 0x20, 0x00, \ + 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* Y */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x04, 0x00, \ + 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x80, 0x00, \ + 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* Z */ \ + 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x40, 0x00, 0x40, 0x00, \ + 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, \ + 0x40, 0x00, 0x40, 0x00, 0x70, 0x00, 0x00, 0x00, /* [ */ \ + 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x40, 0x00, 0x20, 0x00, \ + 0x20, 0x00, 0x20, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, \ + 0x08, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, /* \ */ \ + 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x08, 0x00, 0x08, 0x00, \ + 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, \ + 0x08, 0x00, 0x08, 0x00, 0x38, 0x00, 0x00, 0x00, /* ] */ \ + 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x28, 0x00, 0x44, 0x00, \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* ^ */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* _ */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x10, 0x00, \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* ` */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x70, 0x00, 0x08, 0x00, 0x08, 0x00, 0x78, 0x00, 0x88, 0x00, \ + 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* a */ \ + 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, \ + 0xF8, 0x00, 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, \ + 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* b */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x78, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, \ + 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* c */ \ + 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, \ + 0x7C, 0x00, 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, 0x8C, 0x00, \ + 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* d */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x78, 0x00, 0x84, 0x00, 0xFC, 0x00, 0x80, 0x00, 0x80, 0x00, \ + 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* e */ \ + 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x20, 0x00, 0x20, 0x00, \ + 0xFC, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, \ + 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* f */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x7C, 0x00, 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, \ + 0x7C, 0x00, 0x04, 0x00, 0x78, 0x00, 0x00, 0x00, /* g */ \ + 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, \ + 0xB8, 0x00, 0xC4, 0x00, 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, \ + 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* h */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, \ + 0x70, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, \ + 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* i */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, \ + 0x78, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, \ + 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x70, 0x00, /* j */ \ + 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, \ + 0x88, 0x00, 0x90, 0x00, 0xA0, 0x00, 0xD0, 0x00, 0x88, 0x00, \ + 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* k */ \ + 0x00, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x20, 0x00, 0x20, 0x00, \ + 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, \ + 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* l */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0xA4, 0x00, 0xFC, 0x00, 0xA4, 0x00, 0xA4, 0x00, 0xA4, 0x00, \ + 0xA4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* m */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0xB8, 0x00, 0xC4, 0x00, 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, \ + 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* n */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x78, 0x00, 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, \ + 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* o */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0xB8, 0x00, 0xC4, 0x00, 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, \ + 0xF8, 0x00, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, /* p */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x7C, 0x00, 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, \ + 0x7C, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x00, /* q */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0xD8, 0x00, 0x60, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, \ + 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* r */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x78, 0x00, 0x80, 0x00, 0x40, 0x00, 0x30, 0x00, 0x08, 0x00, \ + 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* s */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, \ + 0xFC, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, \ + 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* t */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x88, 0x00, 0x88, 0x00, 0x88, 0x00, 0x88, 0x00, 0x88, 0x00, \ + 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* u */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, 0x48, 0x00, 0x48, 0x00, \ + 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* v */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x88, 0x00, 0xA8, 0x00, 0xA8, 0x00, 0xA8, 0x00, 0xA8, 0x00, \ + 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* w */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x88, 0x00, 0x50, 0x00, 0x20, 0x00, 0x20, 0x00, 0x50, 0x00, \ + 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* x */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x84, 0x00, 0x84, 0x00, 0x48, 0x00, 0x48, 0x00, 0x30, 0x00, \ + 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x00, 0x00, /* y */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0xF8, 0x00, 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, \ + 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* z */ \ + 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x20, 0x00, 0x20, 0x00, \ + 0x10, 0x00, 0x20, 0x00, 0x20, 0x00, 0x10, 0x00, 0x20, 0x00, \ + 0x20, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, /* { */ \ + 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, \ + 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x10, 0x00, \ + 0x10, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, /* | */ \ + 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x10, 0x00, 0x10, 0x00, \ + 0x20, 0x00, 0x10, 0x00, 0x10, 0x00, 0x20, 0x00, 0x10, 0x00, \ + 0x10, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, /* } */ \ + }; +#elif defined(USE_FONT_MONO_MMM_10x12) +/** Width of each glyph, including spacer column. */ +# define SYSFONT_WIDTH 10 +/** Height of each glyph, excluding spacer line. */ +# define SYSFONT_HEIGHT 12 +/** Line height. */ +# define SYSFONT_LINESPACING 8 +/** First character defined. */ +# define SYSFONT_FIRSTCHAR ((uint8_t)' ') +/** Last character defined. */ +# define SYSFONT_LASTCHAR ((uint8_t)'}') + +/** Define variable containing the font */ +# define SYSFONT_DEFINE_GLYPHS \ + /* Glyph data, row by row, MSB is leftmost pixel, one byte per row. */ \ + static PROGMEM_DECLARE(uint8_t, sysfont_glyphs[]) = { \ + /* "MonoMMM" font (http://www.dafont.com/monommm-5.font) size 10x12 */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, 0x00, 0x00, /* */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x20, 0x00, \ + 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x00, \ + 0x00, 0x00, 0x00, 0x00, /* ! */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x50, 0x00, \ + 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, 0x00, 0x00, /* " */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0xF8, 0x00, \ + 0x50, 0x00, 0xF8, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, 0x00, 0x00, /* # */ \ + 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x70, 0x00, 0xA8, 0x00, \ + 0xA0, 0x00, 0x70, 0x00, 0x28, 0x00, 0xA8, 0x00, 0x70, 0x00, \ + 0x20, 0x00, 0x00, 0x00, /* $ */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC8, 0x00, 0xB0, 0x00, \ + 0x50, 0x00, 0x20, 0x00, 0x50, 0x00, 0x68, 0x00, 0x98, 0x00, \ + 0x00, 0x00, 0x00, 0x00, /* % */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x90, 0x00, \ + 0xA0, 0x00, 0x40, 0x00, 0xA8, 0x00, 0x90, 0x00, 0x68, 0x00, \ + 0x00, 0x00, 0x00, 0x00, /* & */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x20, 0x00, \ + 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, 0x00, 0x00, /* ' */ \ + 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x20, 0x00, 0x20, 0x00, \ + 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, \ + 0x10, 0x00, 0x00, 0x00, /* ( */ \ + 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x20, 0x00, 0x20, 0x00, \ + 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, \ + 0x40, 0x00, 0x00, 0x00, /* ) */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0xF8, 0x00, \ + 0x70, 0x00, 0xF8, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, 0x00, 0x00, /* * */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, \ + 0x20, 0x00, 0xF8, 0x00, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, \ + 0x00, 0x00, 0x00, 0x00, /* + */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x20, 0x00, \ + 0x20, 0x00, 0x40, 0x00, /* , */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, 0x00, 0x00, /* - */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x20, 0x00, \ + 0x00, 0x00, 0x00, 0x00, /* . */ \ + 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x08, 0x00, 0x08, 0x00, \ + 0x10, 0x00, 0x10, 0x00, 0x20, 0x00, 0x60, 0x00, 0x40, 0x00, \ + 0xC0, 0x00, 0x00, 0x00, /* / */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x88, 0x00, \ + 0x98, 0x00, 0xA8, 0x00, 0xC8, 0x00, 0x88, 0x00, 0x70, 0x00, \ + 0x00, 0x00, 0x00, 0x00, /* 0 */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0xE0, 0x00, \ + 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x70, 0x00, \ + 0x00, 0x00, 0x00, 0x00, /* 1 */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x88, 0x00, \ + 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0xF8, 0x00, \ + 0x00, 0x00, 0x00, 0x00, /* 2 */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x88, 0x00, \ + 0x08, 0x00, 0x30, 0x00, 0x08, 0x00, 0x88, 0x00, 0x70, 0x00, \ + 0x00, 0x00, 0x00, 0x00, /* 3 */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x30, 0x00, \ + 0x50, 0x00, 0x90, 0x00, 0xF8, 0x00, 0x10, 0x00, 0x10, 0x00, \ + 0x00, 0x00, 0x00, 0x00, /* 4 */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x80, 0x00, \ + 0xF0, 0x00, 0x08, 0x00, 0x08, 0x00, 0x88, 0x00, 0x70, 0x00, \ + 0x00, 0x00, 0x00, 0x00, /* 5 */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x80, 0x00, \ + 0x80, 0x00, 0xF0, 0x00, 0x88, 0x00, 0x88, 0x00, 0x70, 0x00, \ + 0x00, 0x00, 0x00, 0x00, /* 6 */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x08, 0x00, \ + 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, \ + 0x00, 0x00, 0x00, 0x00, /* 7 */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x88, 0x00, \ + 0x88, 0x00, 0x70, 0x00, 0x88, 0x00, 0x88, 0x00, 0x70, 0x00, \ + 0x00, 0x00, 0x00, 0x00, /* 8 */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x88, 0x00, \ + 0x88, 0x00, 0x78, 0x00, 0x08, 0x00, 0x08, 0x00, 0x70, 0x00, \ + 0x00, 0x00, 0x00, 0x00, /* 9 */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x00, 0x20, 0x00, \ + 0x00, 0x00, 0x00, 0x00, /* : */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x00, 0x20, 0x00, \ + 0x20, 0x00, 0x40, 0x00, /* ; */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x10, 0x00, \ + 0x20, 0x00, 0x40, 0x00, 0x20, 0x00, 0x10, 0x00, 0x08, 0x00, \ + 0x00, 0x00, 0x00, 0x00, /* < */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0xF8, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, 0x00, 0x00, /* = */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x20, 0x00, \ + 0x10, 0x00, 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, \ + 0x00, 0x00, 0x00, 0x00, /* > */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x88, 0x00, \ + 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, \ + 0x00, 0x00, 0x00, 0x00, /* ? */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x88, 0x00, \ + 0xB8, 0x00, 0xA8, 0x00, 0xB8, 0x00, 0x80, 0x00, 0x78, 0x00, \ + 0x00, 0x00, 0x00, 0x00, /* @ */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x88, 0x00, \ + 0x88, 0x00, 0x88, 0x00, 0xF8, 0x00, 0x88, 0x00, 0x88, 0x00, \ + 0x00, 0x00, 0x00, 0x00, /* A */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x88, 0x00, \ + 0x88, 0x00, 0xF0, 0x00, 0x88, 0x00, 0x88, 0x00, 0xF0, 0x00, \ + 0x00, 0x00, 0x00, 0x00, /* B */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x88, 0x00, \ + 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x88, 0x00, 0x70, 0x00, \ + 0x00, 0x00, 0x00, 0x00, /* C */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x88, 0x00, \ + 0x88, 0x00, 0x88, 0x00, 0x88, 0x00, 0x88, 0x00, 0xF0, 0x00, \ + 0x00, 0x00, 0x00, 0x00, /* D */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x80, 0x00, \ + 0x80, 0x00, 0xF0, 0x00, 0x80, 0x00, 0x80, 0x00, 0xF8, 0x00, \ + 0x00, 0x00, 0x00, 0x00, /* E */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x80, 0x00, \ + 0x80, 0x00, 0xF0, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, \ + 0x00, 0x00, 0x00, 0x00, /* F */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x88, 0x00, \ + 0x80, 0x00, 0x98, 0x00, 0x88, 0x00, 0x88, 0x00, 0x70, 0x00, \ + 0x00, 0x00, 0x00, 0x00, /* G */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, 0x88, 0x00, \ + 0x88, 0x00, 0xF8, 0x00, 0x88, 0x00, 0x88, 0x00, 0x88, 0x00, \ + 0x00, 0x00, 0x00, 0x00, /* H */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x20, 0x00, \ + 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0xF8, 0x00, \ + 0x00, 0x00, 0x00, 0x00, /* I */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, \ + 0x08, 0x00, 0x08, 0x00, 0x88, 0x00, 0x88, 0x00, 0x70, 0x00, \ + 0x00, 0x00, 0x00, 0x00, /* J */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0x00, 0xB0, 0x00, \ + 0xE0, 0x00, 0xC0, 0x00, 0xE0, 0x00, 0xB0, 0x00, 0x98, 0x00, \ + 0x00, 0x00, 0x00, 0x00, /* K */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x00, \ + 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0xF8, 0x00, \ + 0x00, 0x00, 0x00, 0x00, /* L */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, 0xD8, 0x00, \ + 0xF8, 0x00, 0xA8, 0x00, 0x88, 0x00, 0x88, 0x00, 0x88, 0x00, \ + 0x00, 0x00, 0x00, 0x00, /* M */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, 0xC8, 0x00, \ + 0xC8, 0x00, 0xA8, 0x00, 0x98, 0x00, 0x98, 0x00, 0x88, 0x00, \ + 0x00, 0x00, 0x00, 0x00, /* N */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x88, 0x00, \ + 0x88, 0x00, 0x88, 0x00, 0x88, 0x00, 0x88, 0x00, 0x70, 0x00, \ + 0x00, 0x00, 0x00, 0x00, /* O */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x88, 0x00, \ + 0x88, 0x00, 0xF0, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, \ + 0x00, 0x00, 0x00, 0x00, /* P */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x88, 0x00, \ + 0x88, 0x00, 0x88, 0x00, 0x88, 0x00, 0xA8, 0x00, 0x70, 0x00, \ + 0x08, 0x00, 0x00, 0x00, /* Q */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x88, 0x00, \ + 0x88, 0x00, 0xF0, 0x00, 0x88, 0x00, 0x88, 0x00, 0x88, 0x00, \ + 0x00, 0x00, 0x00, 0x00, /* R */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x88, 0x00, \ + 0x80, 0x00, 0x70, 0x00, 0x08, 0x00, 0x88, 0x00, 0x70, 0x00, \ + 0x00, 0x00, 0x00, 0x00, /* S */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x20, 0x00, \ + 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, \ + 0x00, 0x00, 0x00, 0x00, /* T */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, 0x88, 0x00, \ + 0x88, 0x00, 0x88, 0x00, 0x88, 0x00, 0x88, 0x00, 0x70, 0x00, \ + 0x00, 0x00, 0x00, 0x00, /* U */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, 0x88, 0x00, \ + 0x50, 0x00, 0x50, 0x00, 0x50, 0x00, 0x20, 0x00, 0x20, 0x00, \ + 0x00, 0x00, 0x00, 0x00, /* V */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, 0x88, 0x00, \ + 0x88, 0x00, 0xA8, 0x00, 0xA8, 0x00, 0xA8, 0x00, 0x50, 0x00, \ + 0x00, 0x00, 0x00, 0x00, /* W */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, 0x50, 0x00, \ + 0x70, 0x00, 0x20, 0x00, 0x70, 0x00, 0x50, 0x00, 0x88, 0x00, \ + 0x00, 0x00, 0x00, 0x00, /* X */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, 0x50, 0x00, \ + 0x70, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, \ + 0x00, 0x00, 0x00, 0x00, /* Y */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x08, 0x00, \ + 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x80, 0x00, 0xF8, 0x00, \ + 0x00, 0x00, 0x00, 0x00, /* Z */ \ + 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x20, 0x00, 0x20, 0x00, \ + 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, \ + 0x30, 0x00, 0x00, 0x00, /* [ */ \ + 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x40, 0x00, 0x60, 0x00, \ + 0x20, 0x00, 0x10, 0x00, 0x10, 0x00, 0x08, 0x00, 0x08, 0x00, \ + 0x04, 0x00, 0x00, 0x00, /* \ */ \ + 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x20, 0x00, 0x20, 0x00, \ + 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, \ + 0x60, 0x00, 0x00, 0x00, /* ] */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x50, 0x00, \ + 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, 0x00, 0x00, /* ^ */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, 0xFC, 0x00, /* _ */ \ + 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x20, 0x00, 0x00, 0x00, \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, 0x00, 0x00, /* ` */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0xF0, 0x00, 0x08, 0x00, 0xF8, 0x00, 0x88, 0x00, 0xF8, 0x00, \ + 0x00, 0x00, 0x00, 0x00, /* a */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x00, \ + 0xF0, 0x00, 0x88, 0x00, 0x88, 0x00, 0x88, 0x00, 0xF0, 0x00, \ + 0x00, 0x00, 0x00, 0x00, /* b */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x70, 0x00, 0x88, 0x00, 0x80, 0x00, 0x88, 0x00, 0x70, 0x00, \ + 0x00, 0x00, 0x00, 0x00, /* c */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, \ + 0x78, 0x00, 0x88, 0x00, 0x88, 0x00, 0x88, 0x00, 0x78, 0x00, \ + 0x00, 0x00, 0x00, 0x00, /* d */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x70, 0x00, 0x88, 0x00, 0xF8, 0x00, 0x80, 0x00, 0x78, 0x00, \ + 0x00, 0x00, 0x00, 0x00, /* e */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x20, 0x00, \ + 0x70, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x70, 0x00, \ + 0x00, 0x00, 0x00, 0x00, /* f */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x78, 0x00, 0x88, 0x00, 0x88, 0x00, 0x88, 0x00, 0x78, 0x00, \ + 0x08, 0x00, 0x70, 0x00, /* g */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x00, \ + 0xF0, 0x00, 0x88, 0x00, 0x88, 0x00, 0x88, 0x00, 0x88, 0x00, \ + 0x00, 0x00, 0x00, 0x00, /* h */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, \ + 0x60, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x70, 0x00, \ + 0x00, 0x00, 0x00, 0x00, /* i */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, \ + 0xE0, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, \ + 0x20, 0x00, 0xC0, 0x00, /* j */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x00, \ + 0x98, 0x00, 0xA0, 0x00, 0xE0, 0x00, 0x90, 0x00, 0x88, 0x00, \ + 0x00, 0x00, 0x00, 0x00, /* k */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x20, 0x00, \ + 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0xF8, 0x00, \ + 0x00, 0x00, 0x00, 0x00, /* l */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0xF8, 0x00, 0xA8, 0x00, 0xA8, 0x00, 0xA8, 0x00, 0xA8, 0x00, \ + 0x00, 0x00, 0x00, 0x00, /* m */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0xF0, 0x00, 0x88, 0x00, 0x88, 0x00, 0x88, 0x00, 0x88, 0x00, \ + 0x00, 0x00, 0x00, 0x00, /* n */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x70, 0x00, 0x88, 0x00, 0x88, 0x00, 0x88, 0x00, 0x70, 0x00, \ + 0x00, 0x00, 0x00, 0x00, /* o */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0xF0, 0x00, 0x88, 0x00, 0x88, 0x00, 0x88, 0x00, 0xF0, 0x00, \ + 0x80, 0x00, 0x80, 0x00, /* p */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x78, 0x00, 0x88, 0x00, 0x88, 0x00, 0x88, 0x00, 0x78, 0x00, \ + 0x08, 0x00, 0x08, 0x00, /* q */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0xF8, 0x00, 0x88, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, \ + 0x00, 0x00, 0x00, 0x00, /* r */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0xF8, 0x00, 0x80, 0x00, 0xF8, 0x00, 0x08, 0x00, 0xF8, 0x00, \ + 0x00, 0x00, 0x00, 0x00, /* s */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x20, 0x00, \ + 0x78, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x18, 0x00, \ + 0x00, 0x00, 0x00, 0x00, /* t */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x88, 0x00, 0x88, 0x00, 0x88, 0x00, 0x88, 0x00, 0x78, 0x00, \ + 0x00, 0x00, 0x00, 0x00, /* u */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x88, 0x00, 0x50, 0x00, 0x50, 0x00, 0x50, 0x00, 0x20, 0x00, \ + 0x00, 0x00, 0x00, 0x00, /* v */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0xA8, 0x00, 0xA8, 0x00, 0xA8, 0x00, 0xA8, 0x00, 0x50, 0x00, \ + 0x00, 0x00, 0x00, 0x00, /* w */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0xD8, 0x00, 0x50, 0x00, 0x20, 0x00, 0x50, 0x00, 0xD8, 0x00, \ + 0x00, 0x00, 0x00, 0x00, /* x */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x88, 0x00, 0x88, 0x00, 0x88, 0x00, 0x88, 0x00, 0x78, 0x00, \ + 0x08, 0x00, 0x70, 0x00, /* y */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0xF8, 0x00, 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0xF8, 0x00, \ + 0x00, 0x00, 0x00, 0x00, /* z */ \ + 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x20, 0x00, 0x20, 0x00, \ + 0x20, 0x00, 0x40, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, \ + 0x10, 0x00, 0x00, 0x00, /* { */ \ + 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, \ + 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, \ + 0x20, 0x00, 0x00, 0x00, /* | */ \ + 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x20, 0x00, 0x20, 0x00, \ + 0x20, 0x00, 0x10, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, \ + 0x40, 0x00, 0x00, 0x00, /* } */ \ + }; +#elif defined(USE_FONT_BASIC_6x7) +/** Width of each glyph, including spacer column. */ +# define SYSFONT_WIDTH 6 +/** Height of each glyph, excluding spacer line. */ +# define SYSFONT_HEIGHT 7 +/** Line height. */ +# define SYSFONT_LINESPACING 8 +/** First character defined. */ +# define SYSFONT_FIRSTCHAR ((uint8_t)' ') +/** Last character defined. */ +# define SYSFONT_LASTCHAR ((uint8_t)'}') + +/** Define variable containing the font */ +# define SYSFONT_DEFINE_GLYPHS \ + /* Glyph data, row by row, MSB is leftmost pixel, one byte per row. */ \ + static PROGMEM_DECLARE(uint8_t, sysfont_glyphs[]) = { \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* " " */ \ + 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x20, /* "!" */ \ + 0x50, 0x50, 0x50, 0x00, 0x00, 0x00, 0x00, /* """ */ \ + 0x50, 0x50, 0xf8, 0x50, 0xf8, 0x50, 0x50, /* "#" */ \ + 0x20, 0x78, 0xa0, 0x70, 0x28, 0xf0, 0x20, /* "$" */ \ + 0xc0, 0xc8, 0x10, 0x20, 0x40, 0x98, 0x18, /* "%" */ \ + 0x60, 0x90, 0xa0, 0x40, 0xa8, 0x90, 0x68, /* "&" */ \ + 0x60, 0x20, 0x40, 0x00, 0x00, 0x00, 0x00, /* "'" */ \ + 0x10, 0x20, 0x40, 0x40, 0x40, 0x20, 0x10, /* "(" */ \ + 0x40, 0x20, 0x10, 0x10, 0x10, 0x20, 0x40, /* ")" */ \ + 0x00, 0x50, 0x20, 0xf8, 0x20, 0x50, 0x00, /* "*" */ \ + 0x00, 0x20, 0x20, 0xf8, 0x20, 0x20, 0x00, /* "+" */ \ + 0x00, 0x00, 0x00, 0x00, 0x60, 0x20, 0x40, /* "," */ \ + 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, /* "-" */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, /* "." */ \ + 0x00, 0x08, 0x10, 0x20, 0x40, 0x80, 0x00, /* "/" */ \ + 0x70, 0x88, 0x98, 0xa8, 0xc8, 0x88, 0x70, /* "0" */ \ + 0x20, 0x60, 0x20, 0x20, 0x20, 0x20, 0x70, /* "1" */ \ + 0x70, 0x88, 0x08, 0x10, 0x20, 0x40, 0xf8, /* "2" */ \ + 0xf8, 0x10, 0x20, 0x10, 0x08, 0x88, 0x70, /* "3" */ \ + 0x10, 0x30, 0x50, 0x90, 0xf8, 0x10, 0x10, /* "4" */ \ + 0xf8, 0x80, 0xf0, 0x08, 0x08, 0x88, 0x70, /* "5" */ \ + 0x30, 0x40, 0x80, 0xf0, 0x88, 0x88, 0x70, /* "6" */ \ + 0xf8, 0x08, 0x10, 0x20, 0x40, 0x40, 0x40, /* "7" */ \ + 0x70, 0x88, 0x88, 0x70, 0x88, 0x88, 0x70, /* "8" */ \ + 0x70, 0x88, 0x88, 0x78, 0x08, 0x10, 0x60, /* "9" */ \ + 0x00, 0x60, 0x60, 0x00, 0x60, 0x60, 0x00, /* ":" */ \ + 0x00, 0x60, 0x60, 0x00, 0x60, 0x20, 0x40, /* ";" */ \ + 0x08, 0x10, 0x20, 0x40, 0x20, 0x10, 0x08, /* "<" */ \ + 0x00, 0x00, 0xf8, 0x00, 0xf8, 0x00, 0x00, /* "=" */ \ + 0x80, 0x40, 0x20, 0x10, 0x20, 0x40, 0x80, /* ">" */ \ + 0x70, 0x88, 0x08, 0x10, 0x20, 0x00, 0x20, /* "?" */ \ + 0x70, 0x88, 0x08, 0x68, 0xa8, 0xa8, 0x70, /* "@" */ \ + 0x70, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x88, /* "A" */ \ + 0xf0, 0x88, 0x88, 0xf0, 0x88, 0x88, 0xf0, /* "B" */ \ + 0x70, 0x88, 0x80, 0x80, 0x80, 0x88, 0x70, /* "C" */ \ + 0xe0, 0x90, 0x88, 0x88, 0x88, 0x90, 0xe0, /* "D" */ \ + 0xf8, 0x80, 0x80, 0xf0, 0x80, 0x80, 0xf8, /* "E" */ \ + 0xf8, 0x80, 0x80, 0xe0, 0x80, 0x80, 0x80, /* "F" */ \ + 0x70, 0x88, 0x80, 0x80, 0x98, 0x88, 0x70, /* "G" */ \ + 0x88, 0x88, 0x88, 0xf8, 0x88, 0x88, 0x88, /* "H" */ \ + 0x70, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, /* "I" */ \ + 0x38, 0x10, 0x10, 0x10, 0x10, 0x90, 0x60, /* "J" */ \ + 0x88, 0x90, 0xa0, 0xc0, 0xa0, 0x90, 0x88, /* "K" */ \ + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xf8, /* "L" */ \ + 0x88, 0xd8, 0xa8, 0x88, 0x88, 0x88, 0x88, /* "M" */ \ + 0x88, 0x88, 0xc8, 0xa8, 0x98, 0x88, 0x88, /* "N" */ \ + 0x70, 0x88, 0x88, 0x88, 0x88, 0x88, 0x70, /* "O" */ \ + 0xf0, 0x88, 0x88, 0xf0, 0x80, 0x80, 0x80, /* "P" */ \ + 0x70, 0x88, 0x88, 0x88, 0xa8, 0x90, 0x68, /* "Q" */ \ + 0xf0, 0x88, 0x88, 0xf0, 0xa0, 0x90, 0x88, /* "R" */ \ + 0x78, 0x80, 0x80, 0x70, 0x08, 0x08, 0xf0, /* "S" */ \ + 0xf8, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, /* "T" */ \ + 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x70, /* "U" */ \ + 0x88, 0x88, 0x88, 0x88, 0x88, 0x50, 0x20, /* "V" */ \ + 0x88, 0x88, 0x88, 0xa8, 0xa8, 0xd8, 0x88, /* "W" */ \ + 0x88, 0x88, 0x50, 0x20, 0x50, 0x88, 0x88, /* "X" */ \ + 0x88, 0x88, 0x50, 0x20, 0x20, 0x20, 0x20, /* "Y" */ \ + 0xf8, 0x08, 0x10, 0x20, 0x40, 0x80, 0xf8, /* "Z" */ \ + 0x38, 0x20, 0x20, 0x20, 0x20, 0x20, 0x38, /* "[" */ \ + 0x00, 0x80, 0x40, 0x20, 0x10, 0x08, 0x00, /* "\" */ \ + 0xe0, 0x20, 0x20, 0x20, 0x20, 0x20, 0xe0, /* "]" */ \ + 0x20, 0x50, 0x88, 0x00, 0x00, 0x00, 0x00, /* "^" */ \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, /* "_" */ \ + 0x40, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, /* "`" */ \ + 0x00, 0x00, 0x70, 0x08, 0x78, 0x88, 0x78, /* "a" */ \ + 0x80, 0x80, 0xb0, 0xc8, 0x88, 0x88, 0xf0, /* "b" */ \ + 0x00, 0x00, 0x70, 0x80, 0x80, 0x88, 0x70, /* "c" */ \ + 0x08, 0x08, 0x68, 0x98, 0x88, 0x88, 0x78, /* "d" */ \ + 0x00, 0x00, 0x70, 0x88, 0xf8, 0x80, 0x70, /* "e" */ \ + 0x30, 0x48, 0x40, 0xe0, 0x40, 0x40, 0x40, /* "f" */ \ + 0x00, 0x00, 0x78, 0x88, 0x78, 0x08, 0x30, /* "g" */ \ + 0x80, 0x80, 0xb0, 0xc8, 0x88, 0x88, 0x88, /* "h" */ \ + 0x20, 0x00, 0x60, 0x20, 0x20, 0x20, 0x70, /* "i" */ \ + 0x10, 0x00, 0x30, 0x10, 0x10, 0x90, 0x60, /* "j" */ \ + 0x40, 0x40, 0x48, 0x50, 0x60, 0x50, 0x48, /* "k" */ \ + 0x60, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, /* "l" */ \ + 0x00, 0x00, 0xd0, 0xa8, 0xa8, 0x88, 0x88, /* "m" */ \ + 0x00, 0x00, 0xb0, 0xc8, 0x88, 0x88, 0x88, /* "n" */ \ + 0x00, 0x00, 0x70, 0x88, 0x88, 0x88, 0x70, /* "o" */ \ + 0x00, 0x00, 0xf0, 0x88, 0xf0, 0x80, 0x80, /* "p" */ \ + 0x00, 0x00, 0x68, 0x98, 0x78, 0x08, 0x08, /* "q" */ \ + 0x00, 0x00, 0xb0, 0xc8, 0x80, 0x80, 0x80, /* "r" */ \ + 0x00, 0x00, 0x70, 0x80, 0x70, 0x08, 0xf0, /* "s" */ \ + 0x40, 0x40, 0xe0, 0x40, 0x40, 0x48, 0x30, /* "t" */ \ + 0x00, 0x00, 0x88, 0x88, 0x88, 0x98, 0x68, /* "u" */ \ + 0x00, 0x00, 0x88, 0x88, 0x88, 0x50, 0x20, /* "v" */ \ + 0x00, 0x00, 0x88, 0x88, 0xa8, 0xa8, 0x50, /* "w" */ \ + 0x00, 0x00, 0x88, 0x50, 0x20, 0x50, 0x88, /* "x" */ \ + 0x00, 0x00, 0x88, 0x88, 0x78, 0x08, 0x70, /* "y" */ \ + 0x00, 0x00, 0xf8, 0x10, 0x20, 0x40, 0xf8, /* "z" */ \ + 0x10, 0x20, 0x20, 0x40, 0x20, 0x20, 0x10, /* "{" */ \ + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, /* "|" */ \ + 0x40, 0x20, 0x20, 0x10, 0x20, 0x20, 0x40, /* "}" */ \ + }; +#endif + +/** @} */ + +#endif /* CONF_SYSFONT_H */ diff --git a/AVR Code/USB_BULK_TEST/src/config/conf_usart_spi.h b/AVR Code/USB_BULK_TEST/src/config/conf_usart_spi.h new file mode 100644 index 00000000..aa9a9718 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/config/conf_usart_spi.h @@ -0,0 +1,50 @@ +/** + * \file ********************************************************************* + * + * \brief Spi Master configuration for spi example + * + * Copyright (c) 2014-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ +#ifndef CONF_USART_SPI_H_INCLUDED +#define CONF_USART_SPI_H_INCLUDED + + +#endif /* CONF_USART_SPI_H_INCLUDED */ diff --git a/AVR Code/USB_BULK_TEST/src/config/conf_usb.h b/AVR Code/USB_BULK_TEST/src/config/conf_usb.h new file mode 100644 index 00000000..ceef6929 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/config/conf_usb.h @@ -0,0 +1,160 @@ +/** + * \file + * + * \brief USB configuration file + * + * Copyright (c) 2011-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ + +#ifndef _CONF_USB_H_ +#define _CONF_USB_H_ + +#include "compiler.h" + + +/** + * USB Device Configuration + * @{ + */ + +//! Device definition (mandatory) +#define USB_DEVICE_VENDOR_ID 0x03eb +#define USB_DEVICE_PRODUCT_ID 0xa000 +#define USB_DEVICE_MAJOR_VERSION 2 +#define USB_DEVICE_MINOR_VERSION 0 +#define USB_DEVICE_POWER 500 // Consumption on Vbus line (mA) +#define USB_DEVICE_ATTR \ + (USB_CONFIG_ATTR_BUS_POWERED) +// (USB_CONFIG_ATTR_SELF_POWERED) +// (USB_CONFIG_ATTR_REMOTE_WAKEUP|USB_CONFIG_ATTR_SELF_POWERED) +// (USB_CONFIG_ATTR_REMOTE_WAKEUP|USB_CONFIG_ATTR_BUS_POWERED) + +//! USB Device string definitions (Optional) +#define USB_DEVICE_MANUFACTURE_NAME "TapirTech" +#define USB_DEVICE_PRODUCT_NAME "USBGobindar Dummy Device" +// #define USB_DEVICE_SERIAL_NAME "123123123123" + +/** + * Device speeds support + * Low speed not supported by this vendor class + * @{ + */ +//! To authorize the High speed +#if (UC3A3||UC3A4) +# define USB_DEVICE_HS_SUPPORT +#elif (SAM3XA||SAM3U) +# define USB_DEVICE_HS_SUPPORT +#endif +//@} + + +/** + * USB Device Callbacks definitions (Optional) + * @{ + */ +#define UDC_VBUS_EVENT(b_vbus_high) +#define UDC_SOF_EVENT() main_sof_action() +#define UDC_SUSPEND_EVENT() main_suspend_action() +#define UDC_RESUME_EVENT() main_resume_action() +//! Mandatory when USB_DEVICE_ATTR authorizes remote wakeup feature +// #define UDC_REMOTEWAKEUP_ENABLE() user_callback_remotewakeup_enable() +// extern void user_callback_remotewakeup_enable(void); +// #define UDC_REMOTEWAKEUP_DISABLE() user_callback_remotewakeup_disable() +// extern void user_callback_remotewakeup_disable(void); +//! When a extra string descriptor must be supported +//! other than manufacturer, product and serial string +// #define UDC_GET_EXTRA_STRING() +//@} + +//@} + + +/** + * USB Interface Configuration + * @{ + */ + +/** + * Configuration of vendor interface + * @{ + */ +//! Interface callback definition +#define UDI_VENDOR_ENABLE_EXT() main_vendor_enable() +#define UDI_VENDOR_DISABLE_EXT() main_vendor_disable() +#define UDI_VENDOR_SETUP_OUT_RECEIVED() main_setup_out_received() +#define UDI_VENDOR_SETUP_IN_RECEIVED() main_setup_in_received() + +//! endpoints size for full speed +//! Note: Disable the endpoints of a type, if size equal 0 +#define UDI_VENDOR_EPS_SIZE_INT_FS 0 +#define UDI_VENDOR_EPS_SIZE_BULK_FS 64 +#if SAMG55 +#define UDI_VENDOR_EPS_SIZE_ISO_FS 0 +#else +#define UDI_VENDOR_EPS_SIZE_ISO_FS 1023 +#endif + +//! endpoints size for high speed +#define UDI_VENDOR_EPS_SIZE_INT_HS 64 +#define UDI_VENDOR_EPS_SIZE_BULK_HS 512 +#define UDI_VENDOR_EPS_SIZE_ISO_HS 64 + +//@} + +//@} + + +/** + * USB Device Driver Configuration + * @{ + */ +//! Limit the isochronous endpoint in singe bank mode for USBB driver +//! to avoid exceeding USB DPRAM. +#define UDD_ISOCHRONOUS_NB_BANK(ep) 1 +//@} + +//! The includes of classes and other headers must be done +//! at the end of this file to avoid compile error +#include "udi_vendor_conf.h" +#include "ui.h" +#include "main.h" + +#endif // _CONF_USB_H_ diff --git a/AVR Code/USB_BULK_TEST/src/globals.h b/AVR Code/USB_BULK_TEST/src/globals.h new file mode 100644 index 00000000..e3c5aafe --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/globals.h @@ -0,0 +1,49 @@ +/* + * globals.h + * + * Created: 18/04/2015 12:44:42 PM + * Author: Esposch + */ + + +#ifndef GLOBALS_H_ +#define GLOBALS_H_ + +#define VERO + +#define TC_SPISLAVE TCD0 +#define TC_PSU TCD1 +#define TC_PSU_OVF TCD1_OVF_vect +#define TC_DAC TCC0 +#define TCDAC_OVF EVSYS_CHMUX_TCC0_OVF_gc +#define TC_AUXDAC TCC1 +#define TCDAC_AUX_OVF EVSYS_CHMUX_TCC1_OVF_gc +#define HALFPACKET_SIZE 375 +#define PACKET_SIZE 750 +#define B2_START 1125 +#define BUFFER_SIZE PACKET_SIZE*2 +#define DACBUF_SIZE 512 + +COMPILER_WORD_ALIGNED +extern volatile unsigned char isoBuf[BUFFER_SIZE]; +COMPILER_WORD_ALIGNED +extern volatile unsigned char dacBuf_CH1[DACBUF_SIZE]; +extern volatile unsigned char dacBuf_CH2[DACBUF_SIZE]; + +extern volatile unsigned char b1_state; +extern volatile unsigned char b2_state; + +extern volatile bool main_b_vendor_enable; + +extern volatile uint16_t dacBuf_len; +extern volatile uint16_t auxDacBufLen; + +extern volatile unsigned char dummy; + +extern volatile unsigned char global_mode; + +extern volatile char PSU_target; + +extern volatile unsigned char test_byte; + +#endif /* GLOBALS_H_ */ \ No newline at end of file diff --git a/AVR Code/USB_BULK_TEST/src/main.c b/AVR Code/USB_BULK_TEST/src/main.c new file mode 100644 index 00000000..3e870e68 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/main.c @@ -0,0 +1,143 @@ +//Include the ASF Licence! + +#include +#include +#include "ui.h" +#include "globals.h" +#include "tiny_adc.h" +#include "tiny_dma.h" +#include "tiny_timer.h" +#include "tiny_dac.h" +#include "tiny_uart.h" +#include "tiny_dig.h" + +volatile bool main_b_vendor_enable = false; + +COMPILER_WORD_ALIGNED +volatile unsigned char isoBuf[BUFFER_SIZE]; +COMPILER_WORD_ALIGNED +volatile unsigned char dacBuf_CH1[DACBUF_SIZE];// = {128, 134, 140, 146, 153, 159, 165, 171, 177, 182, 188, 194, 199, 204, 209, 214, 218, 223, 227, 230, 234, 237, 240, 243, 246, 248, 250, 252, 253, 254, 255, 255, 255, 255, 254, 253, 252, 251, 249, 247, 245, 242, 239, 236, 232, 229, 225, 220, 216, 211, 206, 201, 196, 191, 185, 180, 174, 168, 162, 156, 149, 143, 137, 131, 124, 118, 112, 106, 99, 93, 87, 81, 75, 70, 64, 59, 54, 49, 44, 39, 35, 30, 26, 23, 19, 16, 13, 10, 8, 6, 4, 3, 2, 1, 0, 0, 0, 0, 1, 2, 3, 5, 7, 9, 12, 15, 18, 21, 25, 28, 32, 37, 41, 46, 51, 56, 61, 67, 73, 78, 84, 90, 96, 102, 109, 115, 121, 127}; +volatile unsigned char dacBuf_CH2[DACBUF_SIZE]; + +volatile unsigned char b1_state = 0; +volatile unsigned char b2_state = 0; + +volatile uint16_t dacBuf_len = 128; +volatile uint16_t auxDacBufLen = 128; +volatile unsigned char dummy = 0x55; +volatile unsigned char global_mode = 255; + +volatile char PSU_target = 0; + +volatile unsigned char test_byte = 123; + +int main(void){ + irq_initialize_vectors(); + cpu_irq_enable(); + sysclk_init(); + board_init(); + udc_start(); + tiny_dac_setup(); + tiny_dma_setup(); + tiny_adc_setup(0, 0); + tiny_adc_pid_setup(); + tiny_adc_ch1setup(12); + tiny_timer_setup(); + tiny_uart_setup(); + tiny_spi_setup(); + tiny_dig_setup(); + + //USARTC0.DATA = 0x55; + //asm("nop"); + + while (true) { + asm("nop"); + asm("nop"); + asm("nop"); + asm("nop"); + asm("nop"); + asm("nop"); + asm("nop"); + asm("nop"); + asm("nop"); + asm("nop"); + asm("nop"); + asm("nop"); + asm("nop"); + asm("nop"); + //test_byte = ADCA.CH1.RESH; + //DO NOTHING! + } +} + +//! Global variable to give and record information about setup request management +udd_ctrl_request_t udd_g_ctrlreq; + +//CALLBACKS: +void main_suspend_action(void) +{ + return; +} + +void main_resume_action(void) +{ + return; +} + +void main_sof_action(void) +{ + switch(global_mode){ + case 0: + tiny_dma_loop_mode_0(); + break; + case 1: + tiny_dma_loop_mode_1(); + break; + case 2: + tiny_dma_loop_mode_2(); + break; + case 3: + tiny_dma_loop_mode_3(); + break; + case 4: + tiny_dma_loop_mode_4(); + break; + case 6: + tiny_dma_loop_mode_6(); + break; + case 7: + tiny_dma_loop_mode_7(); + break; + default: + break; + } + b1_state = !b1_state; + return; +} + +bool main_vendor_enable(void) +{ + main_b_vendor_enable = true; + udi_vendor_iso_in_run((uint8_t *)&isoBuf[0], PACKET_SIZE, iso_callback); + return true; +} + +void main_vendor_disable(void) +{ + main_b_vendor_enable = false; +} + +bool main_setup_out_received(void) +{ + return 1; +} + +bool main_setup_in_received(void) +{ + return true; +} + +void iso_callback(udd_ep_status_t status, iram_size_t nb_transfered, udd_ep_id_t ep){ + udi_vendor_iso_in_run((uint8_t *)&isoBuf[!b1_state * PACKET_SIZE], PACKET_SIZE, iso_callback); + return; +} \ No newline at end of file diff --git a/AVR Code/USB_BULK_TEST/src/main.h b/AVR Code/USB_BULK_TEST/src/main.h new file mode 100644 index 00000000..7b7817ed --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/main.h @@ -0,0 +1,91 @@ +/** + * \file + * + * \brief Declaration of main function used by example + * + * Copyright (c) 2014-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ + +#ifndef _MAIN_H_ +#define _MAIN_H_ + +/*! \brief Notify via user interface that enumeration is ok + * This is called by vendor interface when USB Host enable it. + * + * \retval true if vendor startup is successfully done + */ +bool main_vendor_enable(void); + +/*! \brief Notify via user interface that enumeration is disabled + * This is called by vendor interface when USB Host disable it. + */ +void main_vendor_disable(void); + +/*! \brief Manages the leds behaviors + * Called when a start of frame is received on USB line each 1ms. + */ +void main_sof_action(void); + +/*! \brief Enters the application in low power mode + * Callback called when USB host sets USB line in suspend state + */ +void main_suspend_action(void); + +/*! \brief Turn on a led to notify active mode + * Called when the USB line is resumed from the suspend state + */ +void main_resume_action(void); + +/*! \brief Manage the reception of setup request OUT + * + * \retval true if request accepted + */ +bool main_setup_out_received(void); + +/*! \brief Manage the reception of setup request IN + * + * \retval true if request accepted + */ +bool main_setup_in_received(void); + +void iso_callback(udd_ep_status_t status, iram_size_t nb_transfered, udd_ep_id_t ep); + +#endif // _MAIN_H_ diff --git a/AVR Code/USB_BULK_TEST/src/tiny_adc.c b/AVR Code/USB_BULK_TEST/src/tiny_adc.c new file mode 100644 index 00000000..e5cb6b40 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/tiny_adc.c @@ -0,0 +1,81 @@ +/* + * tiny_adc.c + * + * Created: 19/06/2015 7:17:23 PM + * Author: Esposch + */ + +#include "tiny_adc.h" +#include "globals.h" +#include "string.h" +#include +#include +#include + +// These 2 files need to be included in order to read +// the production calibration values from EEPROM +#include +#include + +void tiny_adc_setup(unsigned char ch2_enable, unsigned char seven_fiddy_ksps){ + PR.PRPA &=0b11111101; + + ADCA.CTRLA = 0x00; //Turn off + ADCA.CTRLB = ADC_FREERUN_bm | (seven_fiddy_ksps == 2 ? ADC_RESOLUTION_LEFT12BIT_gc : ADC_RESOLUTION_8BIT_gc) | ADC_CONMODE_bm ; + ADCA.REFCTRL = ADC_REFSEL_INTVCC2_gc; + ADCA.EVCTRL = ch2_enable ? ADC_SWEEP_0123_gc : ADC_SWEEP_01_gc; //Non-zero causes issues with interrupts! ;.; + + ADCA.PRESCALER = seven_fiddy_ksps == 1 ? ADC_PRESCALER_DIV16_gc : ADC_PRESCALER_DIV32_gc; //ADC Clock = Sysclock/128 + ADCA.CALL = ReadCalibrationByte(offsetof(NVM_PROD_SIGNATURES_t, ADCACAL0)); //Load calibration bytes from production row. + ADCA.CALH = ReadCalibrationByte(offsetof(NVM_PROD_SIGNATURES_t, ADCACAL1)); //Load calibration bytes from production row. + ADCA.CMP = 0x0000; //No compare used + + ADCA.CTRLA = ADC_ENABLE_bm; + + tiny_adc_pid_setup(); + + return; +} + +void tiny_adc_ch0setup(unsigned char gain_mask){ + ADCA.CH0.CTRL = 0x00; //Reset + ADCA.CH0.CTRL = ADC_CH_START_bm | (gain_mask&0x1c) | ADC_CH_INPUTMODE_DIFFWGAIN_gc; + #ifdef VERO + ADCA.CH0.MUXCTRL = ADC_CH_MUXPOS_PIN0_gc | ((gain_mask&0x80) ? ADC_CH_MUXNEG_PIN6_gc : ADC_CH_MUXNEG_PIN4_gc); + #else + ADCA.CH0.MUXCTRL = ((gain_mask&0x80) ? ADC_CH_MUXPOS_PIN2_gc : ADC_CH_MUXPOS_PIN0_gc) | ((gain_mask&0x80) ? ADC_CH_MUXNEG_PIN6_gc : ADC_CH_MUXNEG_PIN4_gc); + #endif + ADCA.CH0.INTCTRL = ADC_CH_INTLVL_OFF_gc; + ADCA.CH0.SCAN = 0x00; //Disable scanning +} + +void tiny_adc_ch1setup(unsigned char gain_mask){ + ADCA.CH2.CTRL = 0x00; //Reset + ADCA.CH2.CTRL = ADC_CH_START_bm | gain_mask | ADC_CH_INPUTMODE_DIFFWGAIN_gc; + ADCA.CH2.MUXCTRL = ADC_CH_MUXPOS_PIN2_gc | ADC_CH_MUXNEG_PIN4_gc; + ADCA.CH2.INTCTRL = ADC_CH_INTLVL_OFF_gc; + ADCA.CH2.SCAN = 0x00; //Disable scanning +} + +void tiny_adc_pid_setup(void){ + ADCA.CH1.CTRL = 0x00; //Reset + ADCA.CH1.CTRL = ADC_CH_START_bm | ADC_CH_GAIN_1X_gc | ADC_CH_INPUTMODE_DIFFWGAIN_gc; + ADCA.CH1.MUXCTRL = ADC_CH_MUXPOS_PIN5_gc | 0b00000111; + ADCA.CH1.INTCTRL = ADC_CH_INTLVL_OFF_gc; + ADCA.CH1.SCAN = 0x00; //Disable scanning +} + + +//FROM: http://www.avrfreaks.net/forum/xmega-production-signature-row +uint8_t ReadCalibrationByte(uint8_t index){ + uint8_t result; + + /* Load the NVM Command register to read the calibration row. */ + NVM_CMD = NVM_CMD_READ_CALIB_ROW_gc; + result = pgm_read_byte(index); + + /* Clean up NVM Command register. */ + NVM_CMD = NVM_CMD_NO_OPERATION_gc; + + return( result ); +} \ No newline at end of file diff --git a/AVR Code/USB_BULK_TEST/src/tiny_adc.h b/AVR Code/USB_BULK_TEST/src/tiny_adc.h new file mode 100644 index 00000000..d2b00170 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/tiny_adc.h @@ -0,0 +1,23 @@ +/* + * tiny_adc.h + * + * Created: 19/06/2015 7:15:32 PM + * Author: Esposch + */ + + +#ifndef TINY_ADC_H_ +#define TINY_ADC_H_ + +#include +#include + +void tiny_adc_setup(unsigned char ch2_enable, unsigned char seven_fiddy_ksps); +void tiny_adc_ch0setup(unsigned char gain_mask); +void tiny_adc_ch1setup(unsigned char gain_mask); +uint8_t ReadCalibrationByte(uint8_t index); //FROM: http://www.avrfreaks.net/forum/xmega-production-signature-row +void tiny_adc_pid_setup(void); + + + +#endif /* TINY_ADC_H_ */ \ No newline at end of file diff --git a/AVR Code/USB_BULK_TEST/src/tiny_dac.c b/AVR Code/USB_BULK_TEST/src/tiny_dac.c new file mode 100644 index 00000000..195c6b22 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/tiny_dac.c @@ -0,0 +1,38 @@ +/* + * tiny_dac.c + * + * Created: 3/07/2015 1:06:44 PM + * Author: Esposch + */ + +#include "tiny_dac.h" +#include "tiny_adc.h" + +#include +#include + +void tiny_dac_setup(void){ + + //Turn on in PR + PR.PRPB &=0b11111011; + + DACB.CTRLA = DAC_CH1EN_bm | DAC_CH0EN_bm | DAC_ENABLE_bm; + DACB.CTRLB = DAC_CHSEL_DUAL_gc; + DACB.CTRLC = DAC_REFSEL_AVCC_gc | DAC_LEFTADJ_bm; + //EVCTRL unset + //DACB.CH0DATAH = 127;//contains (8-bit) sample, assuming left adjust! + + //TODO: Calibrate + DACB.CH0GAINCAL = ReadCalibrationByte(offsetof(NVM_PROD_SIGNATURES_t, DACB0GAINCAL)); //Load calibration bytes from production row. + DACB.CH0OFFSETCAL = ReadCalibrationByte(offsetof(NVM_PROD_SIGNATURES_t, DACB0OFFCAL)); //Load calibration bytes from production row. + + DACB.CH1GAINCAL = ReadCalibrationByte(offsetof(NVM_PROD_SIGNATURES_t, DACB1GAINCAL)); //Load calibration bytes from production row. + DACB.CH1OFFSETCAL = ReadCalibrationByte(offsetof(NVM_PROD_SIGNATURES_t, DACB1OFFCAL)); //Load calibration bytes from production row. + + //Set up for triple mode! + PORTB.DIR |= 0x03; + PORTB.OUT = 0x00; + + + +} \ No newline at end of file diff --git a/AVR Code/USB_BULK_TEST/src/tiny_dac.h b/AVR Code/USB_BULK_TEST/src/tiny_dac.h new file mode 100644 index 00000000..59894c9f --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/tiny_dac.h @@ -0,0 +1,18 @@ +/* + * tiny_dac.h + * + * Created: 3/07/2015 1:06:53 PM + * Author: Esposch + */ + +#include +#include + +#ifndef TINY_DAC_H_ +#define TINY_DAC_H_ + +void tiny_dac_setup(void); + + + +#endif /* TINY_DAC_H_ */ \ No newline at end of file diff --git a/AVR Code/USB_BULK_TEST/src/tiny_dig.c b/AVR Code/USB_BULK_TEST/src/tiny_dig.c new file mode 100644 index 00000000..8063205e --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/tiny_dig.c @@ -0,0 +1,16 @@ +/* + * tiny_dig_out.c + * + * Created: 14/10/2015 4:51:19 PM + * Author: Esposch + */ + +#include "tiny_dig.h" +#include "globals.h" + + +void tiny_dig_setup(void){ + PORTE.DIR = 0x0f; + PORTE.OUT = 0x05; + return; +} diff --git a/AVR Code/USB_BULK_TEST/src/tiny_dig.h b/AVR Code/USB_BULK_TEST/src/tiny_dig.h new file mode 100644 index 00000000..57af7a9f --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/tiny_dig.h @@ -0,0 +1,18 @@ +/* + * tiny_dig_out.h + * + * Created: 14/10/2015 4:51:29 PM + * Author: Esposch + */ + + +#ifndef TINY_DIG_OUT_H_ +#define TINY_DIG_OUT_H_ + +#include + +void tiny_dig_setup(void); + + + +#endif /* TINY_DIG_OUT_H_ */ \ No newline at end of file diff --git a/AVR Code/USB_BULK_TEST/src/tiny_dma.c b/AVR Code/USB_BULK_TEST/src/tiny_dma.c new file mode 100644 index 00000000..6e9e9cd7 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/tiny_dma.c @@ -0,0 +1,658 @@ +/* + * tiny_dma.c + * + * Created: 25/06/2015 9:00:42 AM + * Author: Esposch + */ + +#include "tiny_dma.h" +#include "tiny_adc.h" +#include "tiny_uart.h" +#include "globals.h" + + +void tiny_dma_setup(void){ + //Turn on DMA + PR.PRGEN &=0b111111110; //Turn on DMA clk + DMA.CTRL = DMA_ENABLE_bm | DMA_PRIMODE_RR0123_gc; +} +void tiny_dma_flush(void){ + DMA.CH0.CTRLA = 0x00; + DMA.CH0.CTRLA = DMA_CH_RESET_bm; + + DMA.CH1.CTRLA = 0x00; + DMA.CH1.CTRLA = DMA_CH_RESET_bm; + + DMA.CH2.CTRLA = 0x00; + DMA.CH2.CTRLA = DMA_CH_RESET_bm; + + DMA.CH3.CTRLA = 0x00; + DMA.CH3.CTRLA = DMA_CH_RESET_bm; + + b1_state = 0; + b2_state = 0; +} +void tiny_dma_set_mode_0(void){ + + global_mode = 0; + + tiny_dma_flush(); + + DMA.CH2.REPCNT = 0; //Repeat forever! + DMA.CH2.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm | DMA_CH_REPEAT_bm; + DMA.CH2.CTRLB = 0x00; //No interrupt for DacBuf!! + DMA.CH2.ADDRCTRL = DMA_CH_DESTRELOAD_BURST_gc | DMA_CH_DESTDIR_INC_gc | DMA_CH_SRCRELOAD_BLOCK_gc | DMA_CH_SRCDIR_INC_gc; //Dest reloads after each burst, with byte incrementing. Src reloads at end of block, also incrementing address. + DMA.CH2.TRIGSRC = DMA_CH_TRIGSRC_EVSYS_CH1_gc; //Triggered from TCC0 when it hits PER + DMA.CH2.TRFCNT = auxDacBufLen; + + DMA.CH2.SRCADDR0 = (( (uint16_t) &dacBuf_CH2[0]) >> 0) & 0xFF; //Source address is dacbuf + DMA.CH2.SRCADDR1 = (( (uint16_t) &dacBuf_CH2[0]) >> 8) & 0xFF; + DMA.CH2.SRCADDR2 = 0x00; + + DMA.CH2.DESTADDR0 = (( (uint16_t) &DACB.CH1DATAH) >> 0) & 0xFF; //Dest address is high byte of DAC register + DMA.CH2.DESTADDR1 = (( (uint16_t) &DACB.CH1DATAH) >> 8) & 0xFF; + DMA.CH2.DESTADDR2 = 0x00; + + //Must enable last for REPCNT won't work! + DMA.CH2.CTRLA |= DMA_CH_ENABLE_bm; //Enable! + + DMA.CH3.REPCNT = 0; //Repeat forever! + DMA.CH3.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm | DMA_CH_REPEAT_bm; + DMA.CH3.CTRLB = 0x00; //Hi interrupt on block complete + DMA.CH3.ADDRCTRL = DMA_CH_DESTRELOAD_BURST_gc | DMA_CH_DESTDIR_INC_gc | DMA_CH_SRCRELOAD_BLOCK_gc | DMA_CH_SRCDIR_INC_gc; //Dest reloads after each burst, with byte incrementing. Src reloads at end of block, also incrementing address. + DMA.CH3.TRIGSRC = DMA_CH_TRIGSRC_EVSYS_CH2_gc; //Triggered from TCC0 when it hits PER + DMA.CH3.TRFCNT = dacBuf_len; + + DMA.CH3.SRCADDR0 = (( (uint16_t) &dacBuf_CH1[0]) >> 0) & 0xFF; //Source address is dacbuf + DMA.CH3.SRCADDR1 = (( (uint16_t) &dacBuf_CH1[0]) >> 8) & 0xFF; + DMA.CH3.SRCADDR2 = 0x00; + + DMA.CH3.DESTADDR0 = (( (uint16_t) &DACB.CH0DATAH) >> 0) & 0xFF; //Dest address is high byte of DAC register + DMA.CH3.DESTADDR1 = (( (uint16_t) &DACB.CH0DATAH) >> 8) & 0xFF; + DMA.CH3.DESTADDR2 = 0x00; + + //Must enable last for REPCNT won't work! + DMA.CH3.CTRLA |= DMA_CH_ENABLE_bm; //Enable! +} + +void tiny_dma_loop_mode_0(void){ + DMA.CH0.CTRLA = 0x00; + DMA.CH0.CTRLA = DMA_CH_RESET_bm; + + DMA.CH0.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm; //Do not repeat! + DMA.CH0.CTRLB = 0x00; //No interrupt! + DMA.CH0.ADDRCTRL = DMA_CH_SRCRELOAD_BURST_gc | DMA_CH_SRCDIR_INC_gc | DMA_CH_DESTDIR_INC_gc; //Source reloads after each burst, with byte incrementing. Dest does not reload, but does increment address. + DMA.CH0.TRIGSRC = DMA_CH_TRIGSRC_ADCA_CH0_gc; //Triggered from ADCA channel 0 + DMA.CH0.TRFCNT = HALFPACKET_SIZE; + + DMA.CH0.SRCADDR0 = (( (uint16_t) &ADCA.CH0.RESL) >> 0) & 0xFF; //Source address is ADC + DMA.CH0.SRCADDR1 = (( (uint16_t) &ADCA.CH0.RESL) >> 8) & 0xFF; + DMA.CH0.SRCADDR2 = 0x00; + + DMA.CH0.DESTADDR0 = (( (uint16_t) &isoBuf[b1_state * PACKET_SIZE]) >> 0) & 0xFF; //Dest address is isoBuf + DMA.CH0.DESTADDR1 = (( (uint16_t) &isoBuf[b1_state * PACKET_SIZE]) >> 8) & 0xFF; + DMA.CH0.DESTADDR2 = 0x00; + + //Must enable last for REPCNT won't work! + DMA.CH0.CTRLA |= DMA_CH_ENABLE_bm; //Enable! +} + +void tiny_dma_set_mode_1(void){ + + global_mode = 1; + + tiny_dma_flush(); + + //AUX channel (to keep it tx, therefore always rx) + DMA.CH2.CTRLA = 0x00; + DMA.CH2.CTRLA = DMA_CH_RESET_bm; + + DMA.CH2.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm; //Do not repeat! + DMA.CH2.CTRLB = 0x00; //No int + DMA.CH2.ADDRCTRL = DMA_CH_SRCDIR_FIXED_gc | DMA_CH_DESTDIR_FIXED_gc; //Source and address fixed. + DMA.CH2.TRIGSRC = DMA_CH_TRIGSRC_USARTC0_RXC_gc; + DMA.CH2.TRFCNT = 0; + DMA.CH2.REPCNT = 0; + + DMA.CH2.SRCADDR0 = (( (uint16_t) &dummy) >> 0) & 0xFF; + DMA.CH2.SRCADDR1 = (( (uint16_t) &dummy) >> 8) & 0xFF; + DMA.CH2.SRCADDR2 = 0x00; + + DMA.CH2.DESTADDR0 = (( (uint16_t) &USARTC0.DATA) >> 0) & 0xFF; + DMA.CH2.DESTADDR1 = (( (uint16_t) &USARTC0.DATA) >> 8) & 0xFF; + DMA.CH2.DESTADDR2 = 0x00; + + //Must enable last for REPCNT won't work! + DMA.CH2.CTRLA |= DMA_CH_REPEAT_bm | DMA_CH_ENABLE_bm; //Enable! + + USARTC0.DATA = 0x55; + + + DMA.CH3.REPCNT = 0; //Repeat forever! + DMA.CH3.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm | DMA_CH_REPEAT_bm; + DMA.CH3.CTRLB = 0x00; //No interrupt for DacBuf!! + DMA.CH3.ADDRCTRL = DMA_CH_DESTRELOAD_BURST_gc | DMA_CH_DESTDIR_INC_gc | DMA_CH_SRCRELOAD_BLOCK_gc | DMA_CH_SRCDIR_INC_gc; //Dest reloads after each burst, with byte incrementing. Src reloads at end of block, also incrementing address. + DMA.CH3.TRIGSRC = DMA_CH_TRIGSRC_EVSYS_CH1_gc; //Triggered from TCC0 when it hits PER + DMA.CH3.TRFCNT = auxDacBufLen; + + DMA.CH3.SRCADDR0 = (( (uint16_t) &dacBuf_CH2[0]) >> 0) & 0xFF; //Source address is dacbuf + DMA.CH3.SRCADDR1 = (( (uint16_t) &dacBuf_CH2[0]) >> 8) & 0xFF; + DMA.CH3.SRCADDR2 = 0x00; + + DMA.CH3.DESTADDR0 = (( (uint16_t) &DACB.CH1DATAH) >> 0) & 0xFF; //Dest address is high byte of DAC register + DMA.CH3.DESTADDR1 = (( (uint16_t) &DACB.CH1DATAH) >> 8) & 0xFF; + DMA.CH3.DESTADDR2 = 0x00; + + //Must enable last for REPCNT won't work! + DMA.CH3.CTRLA |= DMA_CH_ENABLE_bm; //Enable! + +} + +void tiny_dma_loop_mode_1(void){ + DMA.CH0.CTRLA = 0x00; + DMA.CH0.CTRLA = DMA_CH_RESET_bm; + + DMA.CH0.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm; //Do not repeat! + DMA.CH0.CTRLB = 0x00; //No interrupt! + DMA.CH0.ADDRCTRL = DMA_CH_SRCRELOAD_BURST_gc | DMA_CH_SRCDIR_INC_gc | DMA_CH_DESTDIR_INC_gc; //Source reloads after each burst, with byte incrementing. Dest does not reload, but does increment address. + DMA.CH0.TRIGSRC = DMA_CH_TRIGSRC_ADCA_CH0_gc; //Triggered from ADCA channel 0 + DMA.CH0.TRFCNT = HALFPACKET_SIZE; + + DMA.CH0.SRCADDR0 = (( (uint16_t) &ADCA.CH0.RESL) >> 0) & 0xFF; //Source address is ADC + DMA.CH0.SRCADDR1 = (( (uint16_t) &ADCA.CH0.RESL) >> 8) & 0xFF; + DMA.CH0.SRCADDR2 = 0x00; + + DMA.CH0.DESTADDR0 = (( (uint16_t) &isoBuf[b1_state * PACKET_SIZE]) >> 0) & 0xFF; //Dest address is isoBuf + DMA.CH0.DESTADDR1 = (( (uint16_t) &isoBuf[b1_state * PACKET_SIZE]) >> 8) & 0xFF; + DMA.CH0.DESTADDR2 = 0x00; + + //Must enable last for REPCNT won't work! + DMA.CH0.CTRLA |= DMA_CH_ENABLE_bm; //Enable! + + DMA.CH1.CTRLA = 0x00; + DMA.CH1.CTRLA = DMA_CH_RESET_bm; + + DMA.CH1.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm; //Do not repeat! + DMA.CH1.CTRLB = 0x00; //No interrupt + DMA.CH1.ADDRCTRL = DMA_CH_SRCRELOAD_BURST_gc | DMA_CH_SRCDIR_INC_gc | DMA_CH_DESTDIR_INC_gc; //Source reloads after each burst, with byte incrementing. Dest does not reload, but does increment address. + DMA.CH1.TRIGSRC = DMA_CH_TRIGSRC_USARTC0_RXC_gc; + DMA.CH1.TRFCNT = HALFPACKET_SIZE; + + DMA.CH1.SRCADDR0 = (( (uint16_t) &USARTC0.DATA) >> 0) & 0xFF; //Source address is ADC + DMA.CH1.SRCADDR1 = (( (uint16_t) &USARTC0.DATA) >> 8) & 0xFF; + DMA.CH1.SRCADDR2 = 0x00; + + DMA.CH1.DESTADDR0 = (( (uint16_t) &isoBuf[b1_state * PACKET_SIZE + HALFPACKET_SIZE]) >> 0) & 0xFF; //Dest address is isoBuf + DMA.CH1.DESTADDR1 = (( (uint16_t) &isoBuf[b1_state * PACKET_SIZE + HALFPACKET_SIZE]) >> 8) & 0xFF; + DMA.CH1.DESTADDR2 = 0x00; + + //Must enable last for REPCNT won't work! + DMA.CH1.CTRLA |= DMA_CH_ENABLE_bm; //Enable! +} + +void tiny_dma_set_mode_2(void){ + + global_mode = 2; + + tiny_dma_flush(); + + DMA.CH2.REPCNT = 0; //Repeat forever! + DMA.CH2.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm | DMA_CH_REPEAT_bm; + DMA.CH2.CTRLB = 0x00; //Hi interrupt on block complete + DMA.CH2.ADDRCTRL = DMA_CH_DESTRELOAD_BURST_gc | DMA_CH_DESTDIR_INC_gc | DMA_CH_SRCRELOAD_BLOCK_gc | DMA_CH_SRCDIR_INC_gc; //Dest reloads after each burst, with byte incrementing. Src reloads at end of block, also incrementing address. + DMA.CH2.TRIGSRC = DMA_CH_TRIGSRC_EVSYS_CH2_gc; //Triggered from TCC0 when it hits PER + DMA.CH2.TRFCNT = dacBuf_len; + + DMA.CH2.SRCADDR0 = (( (uint16_t) &dacBuf_CH1[0]) >> 0) & 0xFF; //Source address is dacbuf + DMA.CH2.SRCADDR1 = (( (uint16_t) &dacBuf_CH1[0]) >> 8) & 0xFF; + DMA.CH2.SRCADDR2 = 0x00; + + DMA.CH2.DESTADDR0 = (( (uint16_t) &DACB.CH0DATAH) >> 0) & 0xFF; //Dest address is high byte of DAC register + DMA.CH2.DESTADDR1 = (( (uint16_t) &DACB.CH0DATAH) >> 8) & 0xFF; + DMA.CH2.DESTADDR2 = 0x00; + + //Must enable last for REPCNT won't work! + DMA.CH2.CTRLA |= DMA_CH_ENABLE_bm; //Enable! + + + DMA.CH3.REPCNT = 0; //Repeat forever! + DMA.CH3.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm | DMA_CH_REPEAT_bm; + DMA.CH3.CTRLB = 0x00; //No interrupt for DacBuf!! + DMA.CH3.ADDRCTRL = DMA_CH_DESTRELOAD_BURST_gc | DMA_CH_DESTDIR_INC_gc | DMA_CH_SRCRELOAD_BLOCK_gc | DMA_CH_SRCDIR_INC_gc; //Dest reloads after each burst, with byte incrementing. Src reloads at end of block, also incrementing address. + DMA.CH3.TRIGSRC = DMA_CH_TRIGSRC_EVSYS_CH1_gc; //Triggered from TCC0 when it hits PER + DMA.CH3.TRFCNT = auxDacBufLen; + + DMA.CH3.SRCADDR0 = (( (uint16_t) &dacBuf_CH2[0]) >> 0) & 0xFF; //Source address is dacbuf + DMA.CH3.SRCADDR1 = (( (uint16_t) &dacBuf_CH2[0]) >> 8) & 0xFF; + DMA.CH3.SRCADDR2 = 0x00; + + DMA.CH3.DESTADDR0 = (( (uint16_t) &DACB.CH1DATAH) >> 0) & 0xFF; //Dest address is high byte of DAC register + DMA.CH3.DESTADDR1 = (( (uint16_t) &DACB.CH1DATAH) >> 8) & 0xFF; + DMA.CH3.DESTADDR2 = 0x00; + + //Must enable last for REPCNT won't work! + DMA.CH3.CTRLA |= DMA_CH_ENABLE_bm; //Enable! + +} + +void tiny_dma_loop_mode_2(void){ + DMA.CH0.CTRLA = 0x00; + DMA.CH0.CTRLA = DMA_CH_RESET_bm; + + DMA.CH0.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm; //Do not repeat! + DMA.CH0.CTRLB = 0x00; //No interrupt! + DMA.CH0.ADDRCTRL = DMA_CH_SRCRELOAD_BURST_gc | DMA_CH_SRCDIR_INC_gc | DMA_CH_DESTDIR_INC_gc; //Source reloads after each burst, with byte incrementing. Dest does not reload, but does increment address. + DMA.CH0.TRIGSRC = DMA_CH_TRIGSRC_ADCA_CH0_gc; //Triggered from ADCA channel 0 + DMA.CH0.TRFCNT = HALFPACKET_SIZE; + + DMA.CH0.SRCADDR0 = (( (uint16_t) &ADCA.CH0.RESL) >> 0) & 0xFF; //Source address is ADC + DMA.CH0.SRCADDR1 = (( (uint16_t) &ADCA.CH0.RESL) >> 8) & 0xFF; + DMA.CH0.SRCADDR2 = 0x00; + + DMA.CH0.DESTADDR0 = (( (uint16_t) &isoBuf[b1_state * PACKET_SIZE]) >> 0) & 0xFF; //Dest address is isoBuf + DMA.CH0.DESTADDR1 = (( (uint16_t) &isoBuf[b1_state * PACKET_SIZE]) >> 8) & 0xFF; + DMA.CH0.DESTADDR2 = 0x00; + + //Must enable last for REPCNT won't work! + DMA.CH0.CTRLA |= DMA_CH_ENABLE_bm; //Enable! + + DMA.CH1.CTRLA = 0x00; + DMA.CH1.CTRLA = DMA_CH_RESET_bm; + + DMA.CH1.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm; //Do not repeat! + DMA.CH1.CTRLB = 0x00; //No interrupt! + DMA.CH1.ADDRCTRL = DMA_CH_SRCRELOAD_BURST_gc | DMA_CH_SRCDIR_INC_gc | DMA_CH_DESTDIR_INC_gc; //Source reloads after each burst, with byte incrementing. Dest does not reload, but does increment address. + DMA.CH1.TRIGSRC = DMA_CH_TRIGSRC_ADCA_CH2_gc; //Triggered from ADCA channel 0 + DMA.CH1.TRFCNT = HALFPACKET_SIZE; + + DMA.CH1.SRCADDR0 = (( (uint16_t) &ADCA.CH2.RESL) >> 0) & 0xFF; //Source address is ADC + DMA.CH1.SRCADDR1 = (( (uint16_t) &ADCA.CH2.RESL) >> 8) & 0xFF; + DMA.CH1.SRCADDR2 = 0x00; + + DMA.CH1.DESTADDR0 = (( (uint16_t) &isoBuf[b1_state * PACKET_SIZE + HALFPACKET_SIZE]) >> 0) & 0xFF; //Dest address is isoBuf + DMA.CH1.DESTADDR1 = (( (uint16_t) &isoBuf[b1_state * PACKET_SIZE + HALFPACKET_SIZE]) >> 8) & 0xFF; + DMA.CH1.DESTADDR2 = 0x00; + + //Must enable last for REPCNT won't work! + DMA.CH1.CTRLA |= DMA_CH_ENABLE_bm; //Enable! +} + + + +void tiny_dma_set_mode_3(void){ + + global_mode = 3; + + tiny_dma_flush(); + + //AUX channel (to keep it tx, therefore always rx) + DMA.CH1.CTRLA = 0x00; + DMA.CH1.CTRLA = DMA_CH_RESET_bm; + + DMA.CH1.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm; //Do not repeat! + DMA.CH1.CTRLB = 0x00; //No int + DMA.CH1.ADDRCTRL = DMA_CH_SRCDIR_FIXED_gc | DMA_CH_DESTDIR_FIXED_gc; //Source and address fixed. + DMA.CH1.TRIGSRC = DMA_CH_TRIGSRC_USARTC0_RXC_gc; + DMA.CH1.TRFCNT = 0; + DMA.CH1.REPCNT = 0; + + DMA.CH1.SRCADDR0 = (( (uint16_t) &dummy) >> 0) & 0xFF; + DMA.CH1.SRCADDR1 = (( (uint16_t) &dummy) >> 8) & 0xFF; + DMA.CH1.SRCADDR2 = 0x00; + + DMA.CH1.DESTADDR0 = (( (uint16_t) &USARTC0.DATA) >> 0) & 0xFF; + DMA.CH1.DESTADDR1 = (( (uint16_t) &USARTC0.DATA) >> 8) & 0xFF; + DMA.CH1.DESTADDR2 = 0x00; + + //Must enable last for REPCNT won't work! + DMA.CH1.CTRLA |= DMA_CH_REPEAT_bm | DMA_CH_ENABLE_bm; //Enable! + + USARTC0.DATA = 0x55; + + DMA.CH2.REPCNT = 0; //Repeat forever! + DMA.CH2.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm | DMA_CH_REPEAT_bm; + DMA.CH2.CTRLB = 0x00; //No interrupt for DacBuf!! + DMA.CH2.ADDRCTRL = DMA_CH_DESTRELOAD_BURST_gc | DMA_CH_DESTDIR_INC_gc | DMA_CH_SRCRELOAD_BLOCK_gc | DMA_CH_SRCDIR_INC_gc; //Dest reloads after each burst, with byte incrementing. Src reloads at end of block, also incrementing address. + DMA.CH2.TRIGSRC = DMA_CH_TRIGSRC_EVSYS_CH1_gc; //Triggered from TCC0 when it hits PER + DMA.CH2.TRFCNT = auxDacBufLen; + + DMA.CH2.SRCADDR0 = (( (uint16_t) &dacBuf_CH2[0]) >> 0) & 0xFF; //Source address is dacbuf + DMA.CH2.SRCADDR1 = (( (uint16_t) &dacBuf_CH2[0]) >> 8) & 0xFF; + DMA.CH2.SRCADDR2 = 0x00; + + DMA.CH2.DESTADDR0 = (( (uint16_t) &DACB.CH1DATAH) >> 0) & 0xFF; //Dest address is high byte of DAC register + DMA.CH2.DESTADDR1 = (( (uint16_t) &DACB.CH1DATAH) >> 8) & 0xFF; + DMA.CH2.DESTADDR2 = 0x00; + + //Must enable last for REPCNT won't work! + DMA.CH2.CTRLA |= DMA_CH_ENABLE_bm; //Enable! + + DMA.CH3.REPCNT = 0; //Repeat forever! + DMA.CH3.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm | DMA_CH_REPEAT_bm; + DMA.CH3.CTRLB = 0x00; //Hi interrupt on block complete + DMA.CH3.ADDRCTRL = DMA_CH_DESTRELOAD_BURST_gc | DMA_CH_DESTDIR_INC_gc | DMA_CH_SRCRELOAD_BLOCK_gc | DMA_CH_SRCDIR_INC_gc; //Dest reloads after each burst, with byte incrementing. Src reloads at end of block, also incrementing address. + DMA.CH3.TRIGSRC = DMA_CH_TRIGSRC_EVSYS_CH2_gc; //Triggered from TCC0 when it hits PER + DMA.CH3.TRFCNT = dacBuf_len; + + DMA.CH3.SRCADDR0 = (( (uint16_t) &dacBuf_CH1[0]) >> 0) & 0xFF; //Source address is dacbuf + DMA.CH3.SRCADDR1 = (( (uint16_t) &dacBuf_CH1[0]) >> 8) & 0xFF; + DMA.CH3.SRCADDR2 = 0x00; + + DMA.CH3.DESTADDR0 = (( (uint16_t) &DACB.CH0DATAH) >> 0) & 0xFF; //Dest address is high byte of DAC register + DMA.CH3.DESTADDR1 = (( (uint16_t) &DACB.CH0DATAH) >> 8) & 0xFF; + DMA.CH3.DESTADDR2 = 0x00; + + //Must enable last for REPCNT won't work! + DMA.CH3.CTRLA |= DMA_CH_ENABLE_bm; //Enable! + +} + +void tiny_dma_loop_mode_3(void){ + //Actual data being transferred + DMA.CH0.CTRLA = 0x00; + DMA.CH0.CTRLA = DMA_CH_RESET_bm; + + DMA.CH0.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm; //Do not repeat! + DMA.CH0.CTRLB = 0x00; //No interrupt + DMA.CH0.ADDRCTRL = DMA_CH_SRCRELOAD_BURST_gc | DMA_CH_SRCDIR_INC_gc | DMA_CH_DESTDIR_INC_gc; //Source reloads after each burst, with byte incrementing. Dest does not reload, but does increment address. + DMA.CH0.TRIGSRC = DMA_CH_TRIGSRC_USARTC0_RXC_gc; + DMA.CH0.TRFCNT = HALFPACKET_SIZE; + + DMA.CH0.SRCADDR0 = (( (uint16_t) &USARTC0.DATA) >> 0) & 0xFF; //Source address is ADC + DMA.CH0.SRCADDR1 = (( (uint16_t) &USARTC0.DATA) >> 8) & 0xFF; + DMA.CH0.SRCADDR2 = 0x00; + + DMA.CH0.DESTADDR0 = (( (uint16_t) &isoBuf[b1_state*PACKET_SIZE]) >> 0) & 0xFF; //Dest address is isoBuf + DMA.CH0.DESTADDR1 = (( (uint16_t) &isoBuf[b1_state*PACKET_SIZE]) >> 8) & 0xFF; + DMA.CH0.DESTADDR2 = 0x00; + + //Must enable last for REPCNT won't work! + DMA.CH0.CTRLA |= DMA_CH_ENABLE_bm; //Enable! +} + +void tiny_dma_set_mode_4(void){ + + global_mode = 4; + + tiny_dma_flush(); + + //AUX channel (to keep it tx, therefore always rx) + DMA.CH1.CTRLA = 0x00; + DMA.CH1.CTRLA = DMA_CH_RESET_bm; + + DMA.CH1.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm; //Do not repeat! + DMA.CH1.CTRLB = 0x00; //No int + DMA.CH1.ADDRCTRL = DMA_CH_SRCDIR_FIXED_gc | DMA_CH_DESTDIR_FIXED_gc; //Source and address fixed. + DMA.CH1.TRIGSRC = DMA_CH_TRIGSRC_USARTC0_RXC_gc; + DMA.CH1.TRFCNT = 0; + DMA.CH1.REPCNT = 0; + + DMA.CH1.SRCADDR0 = (( (uint16_t) &dummy) >> 0) & 0xFF; + DMA.CH1.SRCADDR1 = (( (uint16_t) &dummy) >> 8) & 0xFF; + DMA.CH1.SRCADDR2 = 0x00; + + DMA.CH1.DESTADDR0 = (( (uint16_t) &USARTC0.DATA) >> 0) & 0xFF; + DMA.CH1.DESTADDR1 = (( (uint16_t) &USARTC0.DATA) >> 8) & 0xFF; + DMA.CH1.DESTADDR2 = 0x00; + + //Must enable last for REPCNT won't work! + DMA.CH1.CTRLA |= DMA_CH_REPEAT_bm | DMA_CH_ENABLE_bm; //Enable! + + USARTC0.DATA = 0x55; + + DMA.CH2.REPCNT = 0; //Repeat forever! + DMA.CH2.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm | DMA_CH_REPEAT_bm; + DMA.CH2.CTRLB = 0x00; //Hi interrupt on block complete + DMA.CH2.ADDRCTRL = DMA_CH_DESTRELOAD_BURST_gc | DMA_CH_DESTDIR_INC_gc | DMA_CH_SRCRELOAD_BLOCK_gc | DMA_CH_SRCDIR_INC_gc; //Dest reloads after each burst, with byte incrementing. Src reloads at end of block, also incrementing address. + DMA.CH2.TRIGSRC = DMA_CH_TRIGSRC_EVSYS_CH2_gc; //Triggered from TCC0 when it hits PER + DMA.CH2.TRFCNT = dacBuf_len; + + DMA.CH2.SRCADDR0 = (( (uint16_t) &dacBuf_CH1[0]) >> 0) & 0xFF; //Source address is dacbuf + DMA.CH2.SRCADDR1 = (( (uint16_t) &dacBuf_CH1[0]) >> 8) & 0xFF; + DMA.CH2.SRCADDR2 = 0x00; + + DMA.CH2.DESTADDR0 = (( (uint16_t) &DACB.CH0DATAH) >> 0) & 0xFF; //Dest address is high byte of DAC register + DMA.CH2.DESTADDR1 = (( (uint16_t) &DACB.CH0DATAH) >> 8) & 0xFF; + DMA.CH2.DESTADDR2 = 0x00; + + //Must enable last for REPCNT won't work! + DMA.CH2.CTRLA |= DMA_CH_ENABLE_bm; //Enable! + + + DMA.CH3.REPCNT = 0; //Repeat forever! + DMA.CH3.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm | DMA_CH_REPEAT_bm; + DMA.CH3.CTRLB = 0x00; //No interrupt for DacBuf!! + DMA.CH3.ADDRCTRL = DMA_CH_DESTRELOAD_BURST_gc | DMA_CH_DESTDIR_INC_gc | DMA_CH_SRCRELOAD_BLOCK_gc | DMA_CH_SRCDIR_INC_gc; //Dest reloads after each burst, with byte incrementing. Src reloads at end of block, also incrementing address. + DMA.CH3.TRIGSRC = DMA_CH_TRIGSRC_EVSYS_CH1_gc; //Triggered from TCC0 when it hits PER + DMA.CH3.TRFCNT = auxDacBufLen; + + DMA.CH3.SRCADDR0 = (( (uint16_t) &dacBuf_CH2[0]) >> 0) & 0xFF; //Source address is dacbuf + DMA.CH3.SRCADDR1 = (( (uint16_t) &dacBuf_CH2[0]) >> 8) & 0xFF; + DMA.CH3.SRCADDR2 = 0x00; + + DMA.CH3.DESTADDR0 = (( (uint16_t) &DACB.CH1DATAH) >> 0) & 0xFF; //Dest address is high byte of DAC register + DMA.CH3.DESTADDR1 = (( (uint16_t) &DACB.CH1DATAH) >> 8) & 0xFF; + DMA.CH3.DESTADDR2 = 0x00; + + //Must enable last for REPCNT won't work! + DMA.CH3.CTRLA |= DMA_CH_ENABLE_bm; //Enable! +} + +void tiny_dma_loop_mode_4(void){ + //Actual data being transferred + DMA.CH0.CTRLA = 0x00; + DMA.CH0.CTRLA = DMA_CH_RESET_bm; + + DMA.CH0.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm; //Do not repeat! + DMA.CH0.CTRLB = 0x00; //No interrupt + DMA.CH0.ADDRCTRL = DMA_CH_SRCRELOAD_BURST_gc | DMA_CH_SRCDIR_INC_gc | DMA_CH_DESTDIR_INC_gc; //Source reloads after each burst, with byte incrementing. Dest does not reload, but does increment address. + DMA.CH0.TRIGSRC = DMA_CH_TRIGSRC_USARTC0_RXC_gc; + DMA.CH0.TRFCNT = HALFPACKET_SIZE; + + DMA.CH0.SRCADDR0 = (( (uint16_t) &USARTC0.DATA) >> 0) & 0xFF; //Source address is ADC + DMA.CH0.SRCADDR1 = (( (uint16_t) &USARTC0.DATA) >> 8) & 0xFF; + DMA.CH0.SRCADDR2 = 0x00; + + DMA.CH0.DESTADDR0 = (( (uint16_t) &isoBuf[b1_state*PACKET_SIZE]) >> 0) & 0xFF; //Dest address is isoBuf + DMA.CH0.DESTADDR1 = (( (uint16_t) &isoBuf[b1_state*PACKET_SIZE]) >> 8) & 0xFF; + DMA.CH0.DESTADDR2 = 0x00; + + //Must enable last for REPCNT won't work! + DMA.CH0.CTRLA |= DMA_CH_ENABLE_bm; //Enable! + + DMA.CH2.CTRLA = 0x00; + DMA.CH2.CTRLA = DMA_CH_RESET_bm; + + DMA.CH2.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm; //Do not repeat! + DMA.CH2.CTRLB = 0x00; //Hi interrupt on block complete + DMA.CH2.ADDRCTRL = DMA_CH_SRCRELOAD_BURST_gc | DMA_CH_SRCDIR_INC_gc | DMA_CH_DESTDIR_INC_gc; //Source reloads after each burst, with byte incrementing. Dest does not reload, but does increment address. + DMA.CH2.TRIGSRC = DMA_CH_TRIGSRC_SPIC_gc; + DMA.CH2.TRFCNT = HALFPACKET_SIZE; + + DMA.CH2.SRCADDR0 = (( (uint16_t) &SPIC.DATA) >> 0) & 0xFF; //Source address is ADC + DMA.CH2.SRCADDR1 = (( (uint16_t) &SPIC.DATA) >> 8) & 0xFF; + DMA.CH2.SRCADDR2 = 0x00; + + DMA.CH2.DESTADDR0 = (( (uint16_t) &isoBuf[b1_state * PACKET_SIZE + HALFPACKET_SIZE]) >> 0) & 0xFF; //Dest address is isoBuf + DMA.CH2.DESTADDR1 = (( (uint16_t) &isoBuf[b1_state * PACKET_SIZE + HALFPACKET_SIZE]) >> 8) & 0xFF; + DMA.CH2.DESTADDR2 = 0x00; + + //Must enable last for REPCNT won't work! + DMA.CH2.CTRLA |= DMA_CH_ENABLE_bm; //Enable! +} + + +void tiny_dma_set_mode_5(void){ + global_mode = 5; + + tiny_dma_flush(); + + DMA.CH2.REPCNT = 0; //Repeat forever! + DMA.CH2.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm | DMA_CH_REPEAT_bm; + DMA.CH2.CTRLB = 0x00; //Hi interrupt on block complete + DMA.CH2.ADDRCTRL = DMA_CH_DESTRELOAD_BURST_gc | DMA_CH_DESTDIR_INC_gc | DMA_CH_SRCRELOAD_BLOCK_gc | DMA_CH_SRCDIR_INC_gc; //Dest reloads after each burst, with byte incrementing. Src reloads at end of block, also incrementing address. + DMA.CH2.TRIGSRC = DMA_CH_TRIGSRC_EVSYS_CH2_gc; //Triggered from TCC0 when it hits PER + DMA.CH2.TRFCNT = dacBuf_len; + + DMA.CH2.SRCADDR0 = (( (uint16_t) &dacBuf_CH1[0]) >> 0) & 0xFF; //Source address is dacbuf + DMA.CH2.SRCADDR1 = (( (uint16_t) &dacBuf_CH1[0]) >> 8) & 0xFF; + DMA.CH2.SRCADDR2 = 0x00; + + DMA.CH2.DESTADDR0 = (( (uint16_t) &DACB.CH0DATAH) >> 0) & 0xFF; //Dest address is high byte of DAC register + DMA.CH2.DESTADDR1 = (( (uint16_t) &DACB.CH0DATAH) >> 8) & 0xFF; + DMA.CH2.DESTADDR2 = 0x00; + + //Must enable last for REPCNT won't work! + DMA.CH2.CTRLA |= DMA_CH_ENABLE_bm; //Enable! + + DMA.CH3.REPCNT = 0; //Repeat forever! + DMA.CH3.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm | DMA_CH_REPEAT_bm; + DMA.CH3.CTRLB = 0x00; //No interrupt for DacBuf!! + DMA.CH3.ADDRCTRL = DMA_CH_DESTRELOAD_BURST_gc | DMA_CH_DESTDIR_INC_gc | DMA_CH_SRCRELOAD_BLOCK_gc | DMA_CH_SRCDIR_INC_gc; //Dest reloads after each burst, with byte incrementing. Src reloads at end of block, also incrementing address. + DMA.CH3.TRIGSRC = DMA_CH_TRIGSRC_EVSYS_CH2_gc; //Triggered from TCC0 when it hits PER + DMA.CH3.TRFCNT = dacBuf_len; + + DMA.CH3.SRCADDR0 = (( (uint16_t) &isoBuf[0]) >> 0) & 0xFF; //Source address is dacbuf + DMA.CH3.SRCADDR1 = (( (uint16_t) &isoBuf[0]) >> 8) & 0xFF; + DMA.CH3.SRCADDR2 = 0x00; + + DMA.CH3.DESTADDR0 = (( (uint16_t) &DACB.CH0DATAH) >> 0) & 0xFF; //Dest address is high byte of DAC register + DMA.CH3.DESTADDR1 = (( (uint16_t) &DACB.CH0DATAH) >> 8) & 0xFF; + DMA.CH3.DESTADDR2 = 0x00; + + //Must enable last for REPCNT won't work! + DMA.CH3.CTRLA |= DMA_CH_ENABLE_bm; //Enable! +} + +void tiny_dma_set_mode_6(void){ + + global_mode = 6; + + tiny_dma_flush(); + + DMA.CH2.REPCNT = 0; //Repeat forever! + DMA.CH2.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm | DMA_CH_REPEAT_bm; + DMA.CH2.CTRLB = 0x00; //Hi interrupt on block complete + DMA.CH2.ADDRCTRL = DMA_CH_DESTRELOAD_BURST_gc | DMA_CH_DESTDIR_INC_gc | DMA_CH_SRCRELOAD_BLOCK_gc | DMA_CH_SRCDIR_INC_gc; //Dest reloads after each burst, with byte incrementing. Src reloads at end of block, also incrementing address. + DMA.CH2.TRIGSRC = DMA_CH_TRIGSRC_EVSYS_CH2_gc; //Triggered from TCC0 when it hits PER + DMA.CH2.TRFCNT = dacBuf_len; + + DMA.CH2.SRCADDR0 = (( (uint16_t) &dacBuf_CH1[0]) >> 0) & 0xFF; //Source address is dacbuf + DMA.CH2.SRCADDR1 = (( (uint16_t) &dacBuf_CH1[0]) >> 8) & 0xFF; + DMA.CH2.SRCADDR2 = 0x00; + + DMA.CH2.DESTADDR0 = (( (uint16_t) &DACB.CH0DATAH) >> 0) & 0xFF; //Dest address is high byte of DAC register + DMA.CH2.DESTADDR1 = (( (uint16_t) &DACB.CH0DATAH) >> 8) & 0xFF; + DMA.CH2.DESTADDR2 = 0x00; + + //Must enable last for REPCNT won't work! + DMA.CH2.CTRLA |= DMA_CH_ENABLE_bm; //Enable! + + DMA.CH3.REPCNT = 0; //Repeat forever! + DMA.CH3.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm | DMA_CH_REPEAT_bm; + DMA.CH3.CTRLB = 0x00; //No interrupt for DacBuf!! + DMA.CH3.ADDRCTRL = DMA_CH_DESTRELOAD_BURST_gc | DMA_CH_DESTDIR_INC_gc | DMA_CH_SRCRELOAD_BLOCK_gc | DMA_CH_SRCDIR_INC_gc; //Dest reloads after each burst, with byte incrementing. Src reloads at end of block, also incrementing address. + DMA.CH3.TRIGSRC = DMA_CH_TRIGSRC_EVSYS_CH1_gc; //Triggered from TCC0 when it hits PER + DMA.CH3.TRFCNT = auxDacBufLen; + + DMA.CH3.SRCADDR0 = (( (uint16_t) &dacBuf_CH2[0]) >> 0) & 0xFF; //Source address is dacbuf + DMA.CH3.SRCADDR1 = (( (uint16_t) &dacBuf_CH2[0]) >> 8) & 0xFF; + DMA.CH3.SRCADDR2 = 0x00; + + DMA.CH3.DESTADDR0 = (( (uint16_t) &DACB.CH1DATAH) >> 0) & 0xFF; //Dest address is high byte of DAC register + DMA.CH3.DESTADDR1 = (( (uint16_t) &DACB.CH1DATAH) >> 8) & 0xFF; + DMA.CH3.DESTADDR2 = 0x00; + + //Must enable last for REPCNT won't work! + DMA.CH3.CTRLA |= DMA_CH_ENABLE_bm; //Enable! + +} + +void tiny_dma_loop_mode_6(void){ + DMA.CH0.CTRLA = 0x00; + DMA.CH0.CTRLA = DMA_CH_RESET_bm; + + DMA.CH0.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm; //Do not repeat! + DMA.CH0.CTRLB = 0x00; //No interrupt! + DMA.CH0.ADDRCTRL = DMA_CH_SRCRELOAD_BURST_gc | DMA_CH_SRCDIR_INC_gc | DMA_CH_DESTDIR_INC_gc; //Source reloads after each burst, with byte incrementing. Dest does not reload, but does increment address. + DMA.CH0.TRIGSRC = DMA_CH_TRIGSRC_ADCA_CH0_gc; //Triggered from ADCA channel 0 + DMA.CH0.TRFCNT = PACKET_SIZE; + + DMA.CH0.SRCADDR0 = (( (uint16_t) &ADCA.CH0.RESL) >> 0) & 0xFF; //Source address is ADC + DMA.CH0.SRCADDR1 = (( (uint16_t) &ADCA.CH0.RESL) >> 8) & 0xFF; + DMA.CH0.SRCADDR2 = 0x00; + + DMA.CH0.DESTADDR0 = (( (uint16_t) &isoBuf[b1_state * PACKET_SIZE]) >> 0) & 0xFF; //Dest address is isoBuf + DMA.CH0.DESTADDR1 = (( (uint16_t) &isoBuf[b1_state * PACKET_SIZE]) >> 8) & 0xFF; + DMA.CH0.DESTADDR2 = 0x00; + + //Must enable last for REPCNT won't work! + DMA.CH0.CTRLA |= DMA_CH_ENABLE_bm; //Enable! +} + +void tiny_dma_set_mode_7(void){ + + global_mode = 7; + + tiny_dma_flush(); + + DMA.CH2.REPCNT = 0; //Repeat forever! + DMA.CH2.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm | DMA_CH_REPEAT_bm; + DMA.CH2.CTRLB = 0x00; //Hi interrupt on block complete + DMA.CH2.ADDRCTRL = DMA_CH_DESTRELOAD_BURST_gc | DMA_CH_DESTDIR_INC_gc | DMA_CH_SRCRELOAD_BLOCK_gc | DMA_CH_SRCDIR_INC_gc; //Dest reloads after each burst, with byte incrementing. Src reloads at end of block, also incrementing address. + DMA.CH2.TRIGSRC = DMA_CH_TRIGSRC_EVSYS_CH2_gc; //Triggered from TCC0 when it hits PER + DMA.CH2.TRFCNT = dacBuf_len; + + DMA.CH2.SRCADDR0 = (( (uint16_t) &dacBuf_CH1[0]) >> 0) & 0xFF; //Source address is dacbuf + DMA.CH2.SRCADDR1 = (( (uint16_t) &dacBuf_CH1[0]) >> 8) & 0xFF; + DMA.CH2.SRCADDR2 = 0x00; + + DMA.CH2.DESTADDR0 = (( (uint16_t) &DACB.CH0DATAH) >> 0) & 0xFF; //Dest address is high byte of DAC register + DMA.CH2.DESTADDR1 = (( (uint16_t) &DACB.CH0DATAH) >> 8) & 0xFF; + DMA.CH2.DESTADDR2 = 0x00; + + //Must enable last for REPCNT won't work! + DMA.CH2.CTRLA |= DMA_CH_ENABLE_bm; //Enable! + + DMA.CH3.REPCNT = 0; //Repeat forever! + DMA.CH3.CTRLA = DMA_CH_BURSTLEN_1BYTE_gc | DMA_CH_SINGLE_bm | DMA_CH_REPEAT_bm; + DMA.CH3.CTRLB = 0x00; //No interrupt for DacBuf!! + DMA.CH3.ADDRCTRL = DMA_CH_DESTRELOAD_BURST_gc | DMA_CH_DESTDIR_INC_gc | DMA_CH_SRCRELOAD_BLOCK_gc | DMA_CH_SRCDIR_INC_gc; //Dest reloads after each burst, with byte incrementing. Src reloads at end of block, also incrementing address. + DMA.CH3.TRIGSRC = DMA_CH_TRIGSRC_EVSYS_CH1_gc; //Triggered from TCC0 when it hits PER + DMA.CH3.TRFCNT = auxDacBufLen; + + DMA.CH3.SRCADDR0 = (( (uint16_t) &dacBuf_CH2[0]) >> 0) & 0xFF; //Source address is dacbuf + DMA.CH3.SRCADDR1 = (( (uint16_t) &dacBuf_CH2[0]) >> 8) & 0xFF; + DMA.CH3.SRCADDR2 = 0x00; + + DMA.CH3.DESTADDR0 = (( (uint16_t) &DACB.CH1DATAH) >> 0) & 0xFF; //Dest address is high byte of DAC register + DMA.CH3.DESTADDR1 = (( (uint16_t) &DACB.CH1DATAH) >> 8) & 0xFF; + DMA.CH3.DESTADDR2 = 0x00; + + //Must enable last for REPCNT won't work! + DMA.CH3.CTRLA |= DMA_CH_ENABLE_bm; //Enable! +} + +void tiny_dma_loop_mode_7(void){ + + DMA.CH0.CTRLA = 0x00; + DMA.CH0.CTRLA = DMA_CH_RESET_bm; + + DMA.CH0.CTRLA = DMA_CH_BURSTLEN_2BYTE_gc | DMA_CH_SINGLE_bm; //Do not repeat! + DMA.CH0.CTRLB = 0x00; //No interrupt! + DMA.CH0.ADDRCTRL = DMA_CH_SRCRELOAD_BURST_gc | DMA_CH_SRCDIR_INC_gc | DMA_CH_DESTDIR_INC_gc; //Source reloads after each burst, with byte incrementing. Dest does not reload, but does increment address. + DMA.CH0.TRIGSRC = DMA_CH_TRIGSRC_ADCA_CH0_gc; //Triggered from ADCA channel 0 + DMA.CH0.TRFCNT = PACKET_SIZE; + + DMA.CH0.SRCADDR0 = (( (uint16_t) &ADCA.CH0.RESL) >> 0) & 0xFF; //Source address is ADC + DMA.CH0.SRCADDR1 = (( (uint16_t) &ADCA.CH0.RESL) >> 8) & 0xFF; + DMA.CH0.SRCADDR2 = 0x00; + + DMA.CH0.DESTADDR0 = (( (uint16_t) &isoBuf[b1_state * PACKET_SIZE]) >> 0) & 0xFF; //Dest address is isoBuf + DMA.CH0.DESTADDR1 = (( (uint16_t) &isoBuf[b1_state * PACKET_SIZE]) >> 8) & 0xFF; + DMA.CH0.DESTADDR2 = 0x00; + + //Must enable last for REPCNT won't work! + DMA.CH0.CTRLA |= DMA_CH_ENABLE_bm; //Enable! + +} \ No newline at end of file diff --git a/AVR Code/USB_BULK_TEST/src/tiny_dma.h b/AVR Code/USB_BULK_TEST/src/tiny_dma.h new file mode 100644 index 00000000..0531294e --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/tiny_dma.h @@ -0,0 +1,46 @@ +/* + * tiny_dma.h + * + * Created: 25/06/2015 9:01:15 AM + * Author: Esposch + */ + + +#ifndef TINY_DMA_H_ +#define TINY_DMA_H_ + +#include +#include +#include "globals.h" + +void tiny_dma_setup(void); +void tiny_dma_flush(void); + +void tiny_dma_set_mode_0(void); +void tiny_dma_loop_mode_0(void); + +void tiny_dma_set_mode_1(void); +void tiny_dma_loop_mode_1(void); + +void tiny_dma_set_mode_2(void); +void tiny_dma_loop_mode_2(void); + +void tiny_dma_set_mode_3(void); +void tiny_dma_loop_mode_3(void); + +void tiny_dma_set_mode_4(void); +void tiny_dma_loop_mode_4(void); + +void tiny_dma_set_mode_5(void); + +void tiny_dma_set_mode_6(void); +void tiny_dma_loop_mode_6(void); + +void tiny_dma_set_mode_7(void); +void tiny_dma_loop_mode_7(void); + +ISR(DMA_CH3_vect); + + + +#endif /* TINY_DMA_H_ */ \ No newline at end of file diff --git a/AVR Code/USB_BULK_TEST/src/tiny_timer.c b/AVR Code/USB_BULK_TEST/src/tiny_timer.c new file mode 100644 index 00000000..c2a5cddc --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/tiny_timer.c @@ -0,0 +1,79 @@ +/* + * tiny_timercounter.c + * + * Created: 2/07/2015 10:50:11 AM + * Author: Esposch + */ + +#include "tiny_timer.h" +#include "globals.h" + +#define PSU_PER 3000 +#define jump 6 + +void tiny_timer_setup(void){ + //Turn everything on! + PR.PRPC &= 0b11111100; //Enable TCC0, TCC1 + PR.PRPD &= 0b11111100; //Enable TCD0, TCD1 + PR.PRGEN &= 0b11111101; //Enable EVSYS + + //Set up EVSYS + EVSYS.CH2MUX = TCDAC_OVF; + EVSYS.CH2CTRL = 0x00; //No filtering or Quadrature stuff + + EVSYS.CH1MUX = TCDAC_AUX_OVF; + EVSYS.CH1CTRL = 0x00; //No filtering or Quadrature stuff + + //Waveform (50Hz sin wave) + TC_DAC.CTRLA = 0x04; //Some clk setting - not 100% sure since it was SW generated + TC_DAC.CTRLB = TC_WGMODE_SINGLESLOPE_gc; //No enable is set + TC_DAC.CTRLE = TC_BYTEM_NORMAL_gc; + TC_DAC.PER = 469; + TC_DAC.INTCTRLA = 0x00; + //Aux channel (blank 50Hz) + TC_AUXDAC.CTRLA = 0x04; //Some clk setting - not 100% sure since it was SW generated + TC_AUXDAC.CTRLB = TC_WGMODE_SINGLESLOPE_gc; //No enable is set + TC_AUXDAC.CTRLE = TC_BYTEM_NORMAL_gc; + TC_AUXDAC.PER = 469; + TC_AUXDAC.INTCTRLA = 0x00; + + //PSU + PORTD.DIR |= 0b00010000; + TC_PSU.CTRLB = 0x10 | TC_WGMODE_SINGLESLOPE_gc; //CCAEN is set + TC_PSU.CTRLE = TC_BYTEM_NORMAL_gc; + TC_PSU.INTCTRLA = TC_OVFINTLVL_LO_gc; + TC_PSU.PER = PSU_PER; // Max value of CNT + TC_PSU.CCA = 0; //Initial Duty cycle of 0% + TC_PSU.CTRLA = TC_CLKSEL_DIV1_gc; + /* + //PSU "PID"loop + TCC1.CTRLB = 0x00 | TC_WGMODE_SINGLESLOPE_gc; + TCC1.INTCTRLA = TC_OVFINTLVL_LO_gc; + TCC1.CTRLE = TC_BYTEM_NORMAL_gc; + TCC1.PER = 1800; // Max value of CNT + TCC1.CTRLA = TC_CLKSEL_DIV1_gc; + */ +} + +ISR(TC_PSU_OVF){ + char tempvar; + char err; + volatile char nothing; + if (global_mode == 7){ + nothing = ADCA.CH1.RESL; + tempvar = ADCA.CH1.RESH; + } + else{ + tempvar = ADCA.CH1.RESL; + } + //tempvar = (global_mode == 7 ? (char) ADCA.CH1.RESH : (char) ADCA.CH1.RESL); + //test_byte = tempvar; + + err = (char) (PSU_target - tempvar); + if ((err > 1) & ((unsigned short) TC_PSU.CCA < PSU_PER - jump) ){ + TC_PSU.CCABUF = TC_PSU.CCA + ((err > 8) ? jump : 1); + } + else if ((err < -1) & ((unsigned short) TC_PSU.CCA > jump)){ + TC_PSU.CCABUF = TC_PSU.CCA - ((err < -8) ? jump : 1); + } +} \ No newline at end of file diff --git a/AVR Code/USB_BULK_TEST/src/tiny_timer.h b/AVR Code/USB_BULK_TEST/src/tiny_timer.h new file mode 100644 index 00000000..ed5a0ab5 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/tiny_timer.h @@ -0,0 +1,19 @@ +/* + * tiny_timercounter.h + * + * Created: 2/07/2015 10:49:59 AM + * Author: Esposch + */ + +#include +#include + +#ifndef TINY_TIMER_H_ +#define TINY_TIMER_H_ + +void tiny_timer_setup(void); +void tiny_spi_setup(void); + + + +#endif /* TINY_TIMERCOUNTER_H_ */ \ No newline at end of file diff --git a/AVR Code/USB_BULK_TEST/src/tiny_uart.c b/AVR Code/USB_BULK_TEST/src/tiny_uart.c new file mode 100644 index 00000000..be99076e --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/tiny_uart.c @@ -0,0 +1,44 @@ +/* + * tiny_uart.c + * + * Created: 16/07/2015 6:32:52 PM + * Author: Esposch + */ + +#include "tiny_uart.h" +#include "globals.h" + + +void tiny_uart_setup(void){ + PR.PRPC &= 0b11101111; + //PR.PRPE &= 0b11111110; ??? + + PORTC.DIR |= 0b10101010; + PORTC.OUT = 0xff; + PORTC.PIN2CTRL = PORT_INVEN_bm | PORT_OPC_PULLUP_gc; + //PORTC.REMAP = 0x10; //Remap USART to [7:4] + #ifndef VERO + PORTC.REMAP = 0x20; //Swap MOSI and SCK - for small boards only!!! + #endif + + USARTC0.CTRLC = USART_CMODE_MSPI_gc | 0b00000100; //LSB received first, UPCHA disabled + USARTC0.BAUDCTRLA = 3; //BSEL = fper/(2fbaud) -1; 24/(2*3) - 1 = 3 + USARTC0.BAUDCTRLB = 0x00;//USART_BSCALE0_bm; + USARTC0.CTRLB = USART_RXEN_bm | USART_TXEN_bm; +} + + +void tiny_spi_setup(void){ + //Power Reduction disable + PR.PRPC &= 0b11110111; + + //SPI enable + SPIC.CTRL = SPI_ENABLE_bm; //Slave mode + #ifdef VERO + PORTC.PIN5CTRL = PORT_INVEN_bm | PORT_OPC_PULLUP_gc; //Pin5 if not swapped + #else + PORTC.PIN7CTRL = PORT_INVEN_bm | PORT_OPC_PULLUP_gc; //Pin5 if not swapped + #endif + + return; +} \ No newline at end of file diff --git a/AVR Code/USB_BULK_TEST/src/tiny_uart.h b/AVR Code/USB_BULK_TEST/src/tiny_uart.h new file mode 100644 index 00000000..ec38ec38 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/tiny_uart.h @@ -0,0 +1,19 @@ +/* + * tiny_uart.h + * + * Created: 16/07/2015 6:33:02 PM + * Author: Esposch + */ + + +#ifndef TINY_UART_H_ +#define TINY_UART_H_ + +#include +#include + +void tiny_uart_setup(void); +void tiny_spi_setup(void); + + +#endif /* TINY_UART_H_ */ \ No newline at end of file diff --git a/AVR Code/USB_BULK_TEST/src/ui.h b/AVR Code/USB_BULK_TEST/src/ui.h new file mode 100644 index 00000000..2ac4dfa3 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/src/ui.h @@ -0,0 +1,73 @@ +/** + * \file + * + * \brief Common User Interface for USB vendor class application + * + * Copyright (c) 2014-2015 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * + * \asf_license_stop + * + */ +/* + * Support and FAQ: visit Atmel Support + */ + +#ifndef _UI_H_ +#define _UI_H_ + +//! \brief Initializes the user interface +void ui_init(void); + +//! \brief Enters the user interface in power down mode +void ui_powerdown(void); + +//! \brief Exits the user interface of power down mode +void ui_wakeup(void); + +/*! \brief Notify the state of loopback + * It is called when a the loopback is started and stopped. + * + * \param b_started loopback started if true, else stopped + */ +void ui_loop_back_state(bool b_started); + +/*! \brief This process is called each 1ms + * It is called only if the USB interface is enabled. + * + * \param framenumber Current frame number + */ +void ui_process(uint16_t framenumber); + +#endif // _UI_H_ diff --git a/Desktop Interface/Labrador_libusbK.pro b/Desktop Interface/Labrador_libusbK.pro new file mode 100644 index 00000000..920082c9 --- /dev/null +++ b/Desktop Interface/Labrador_libusbK.pro @@ -0,0 +1,63 @@ +#------------------------------------------------- +# +# Project created by QtCreator 2016-03-30T13:27:52 +# +#------------------------------------------------- + +QT += core gui + +greaterThan(QT_MAJOR_VERSION, 4): QT += widgets printsupport + +TARGET = Labrador_libusbk +TEMPLATE = app + + +SOURCES += main.cpp\ + mainwindow.cpp \ + qcustomplot.cpp \ + buffercontrol.cpp \ + esposlider.cpp \ + espospinbox.cpp \ + winusbdriver.cpp \ + espocombobox.cpp \ + functiongencontrol.cpp \ + isodriver.cpp \ + isobuffer.cpp \ + siprint.cpp \ + noclosemenu.cpp \ + cursorenabler.cpp \ + desktop_settings.cpp \ + deviceconnecteddisplay.cpp \ + timedtickbox.cpp + +HEADERS += mainwindow.h \ + qcustomplot.h \ + buffercontrol.h \ + esposlider.h \ + espospinbox.h \ + winusbdriver.h \ + espocombobox.h \ + functiongencontrol.h \ + xmega.h \ + isodriver.h \ + isobuffer.h \ + desktop_settings.h \ + siprint.h \ + noclosemenu.h \ + cursorenabler.h \ + deviceconnecteddisplay.h \ + timedtickbox.h + +FORMS += mainwindow.ui + +RESOURCES += \ + resources.qrc + +win32:CONFIG(release, debug|release): LIBS += -L$$PWD/libusbk/bin/lib/amd64/ -llibusbK +else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/libusbk/bin/lib/amd64/ -llibusbK + +INCLUDEPATH += $$PWD/libusbk/includes +DEPENDPATH += $$PWD/libusbk/includes + + +DESTDIR = bin diff --git a/Desktop Interface/Labrador_libusbK.pro.user b/Desktop Interface/Labrador_libusbK.pro.user new file mode 100644 index 00000000..f068c47f --- /dev/null +++ b/Desktop Interface/Labrador_libusbK.pro.user @@ -0,0 +1,316 @@ + + + + + + EnvironmentId + {a20d7eba-78df-44a5-84f6-66ed3da35499} + + + ProjectExplorer.Project.ActiveTarget + 0 + + + ProjectExplorer.Project.EditorSettings + + true + false + true + + Cpp + + CppGlobal + + + + QmlJS + + QmlJSGlobal + + + 2 + UTF-8 + false + 4 + false + 80 + true + true + 1 + true + false + 0 + true + 0 + 8 + true + 1 + true + true + true + false + + + + ProjectExplorer.Project.PluginSettings + + + + ProjectExplorer.Project.Target.0 + + Desktop Qt 5.6.0 MSVC2013 64bit + Desktop Qt 5.6.0 MSVC2013 64bit + qt.56.win64_msvc2013_64_kit + 1 + 0 + 0 + + C:/Users/Esposch/Documents/Qt Projects/build-kf + + + true + qmake + + QtProjectManager.QMakeBuildStep + true + + false + false + false + + + true + Make + + Qt4ProjectManager.MakeStep + + false + + + + 2 + Build + + ProjectExplorer.BuildSteps.Build + + + + true + Make + + Qt4ProjectManager.MakeStep + + true + clean + + + 1 + Clean + + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Debug + + Qt4ProjectManager.Qt4BuildConfiguration + 2 + true + + + C:/Users/Esposch/Documents/Qt Projects/labrador_libusbK_x64 + + + true + qmake + + QtProjectManager.QMakeBuildStep + false + + false + false + false + + + true + Make + + Qt4ProjectManager.MakeStep + + false + + + + 2 + Build + + ProjectExplorer.BuildSteps.Build + + + + true + Make + + Qt4ProjectManager.MakeStep + + true + clean + + + 1 + Clean + + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Release + + Qt4ProjectManager.Qt4BuildConfiguration + 0 + true + + + C:/Users/Esposch/Documents/Qt Projects/build-Kindiesfirst-Desktop_Qt_5_6_0_MSVC2013_64bit-Profile + + + true + qmake + + QtProjectManager.QMakeBuildStep + true + + false + true + false + + + true + Make + + Qt4ProjectManager.MakeStep + + false + + + + 2 + Build + + ProjectExplorer.BuildSteps.Build + + + + true + Make + + Qt4ProjectManager.MakeStep + + true + clean + + + 1 + Clean + + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Profile + + Qt4ProjectManager.Qt4BuildConfiguration + 0 + true + + 3 + + + 0 + Deploy + + ProjectExplorer.BuildSteps.Deploy + + 1 + Deploy locally + + ProjectExplorer.DefaultDeployConfiguration + + 1 + + + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + 2 + + Labrador_libusbK + + Qt4ProjectManager.Qt4RunConfiguration:C:/Users/Esposch/Documents/qt-code/Labrador_libusbk/Labrador_libusbK.pro + true + + Labrador_libusbK.pro + false + false + + 3768 + false + true + false + false + true + + 1 + + + + ProjectExplorer.Project.TargetCount + 1 + + + ProjectExplorer.Project.Updater.FileVersion + 18 + + + Version + 18 + + diff --git a/Desktop Interface/buffer_0.bmp b/Desktop Interface/buffer_0.bmp new file mode 100644 index 0000000000000000000000000000000000000000..8d8e3b916b46acd000bb5c9c6f61af03771f3aec GIT binary patch literal 10422 zcmeIwu?@m707XHw1p`np0Rzxy2S#Bk)&mozpnA2DE>f(Z*I38DZ?EgvpW8gYpO5)o z=6f3Fd5-Zs`u^iM-pf3{x0>I}+-sGK@acbo51$t3YCn8hpsW4xX@Rcx!>0wh+7F)= z=xRTFTA-`_@M(dr_QR(Iy4nw)7U*g}d|IHZ{qSjluJ*&H1-jY~pBCt9KYUuCtNrk4 Qfv)z$rvVU5Czet3j#t1R6qgb^gt<8MOV}Si{*f5Vj~R#3pB~;-CwtJj(RP5zOQ>e zC7&V2JR^?Q>qk58Zm#dI%J(u|J>1>!-1_i;p^rW+z}5Ze!vb90k3KBG)&1zh0$kmX zJ}ki1{piC2T-}d8EWp+M=)(eB-H$#jz}5Ze!vb90k3KBG)&1zh0$kmXJ}ki1{piC2 UT-}d8EWp+M=)(eB-OnF=9yKk=^8f$< literal 0 HcmV?d00001 diff --git a/Desktop Interface/buffer_2.bmp b/Desktop Interface/buffer_2.bmp new file mode 100644 index 0000000000000000000000000000000000000000..b47a9187b927ceb19c961a76eb48d1ef6a98c99a GIT binary patch literal 10422 zcmeIwu?@m707XHw1qEdaCSU-1c3>2yVk>sQiBeF#I!K3z74#bG`1i;AI=0Vkp6ly# zKFfSg<2=tXUVGnu?8kEX9OV0ZtNDJATOH>beEPrO!>0wh+7F)==xRTFTA-`_@M(dr z_QR(Iy4nw)7U*g}d|IHZ{qSjluJ*&H1-jY~pBCt9KYUuCtNrk4fv)z$rvsetPixmap(bufferImage); + //qDebug() << this->text(); + this->show(); + return; +} + +void bufferControl::scopeIn_CH1(bool state){ //What about DSR!? + scopeState_CH1 = state; + + if (scopeState_CH2){ //Implicitly state is false + scopeState_CH2 = false; + //updateBuffer(0); - Causes issues because the uncheck below called scopeIn_CH2 (but only when toggle)!!! + scopeUncheck(0); + } + + scopeDsrOut(state); + scopeOut_CH2(state); + + updateBuffer(state,1); // Do this last to ensure anything accidentally enabled is immediately switched off + qDebug() << "scopeIn_CH1" << state; + updateMode(); +} + +void bufferControl::scopeIn_CH2(bool state){ + scopeState_CH2 = state; + + updateBuffer(state,1); + qDebug() << "scopeIn_CH2" << state; + updateMode(); +} + +void bufferControl::scopeDsrIn(bool state){ + scopeDsrState = state; + + updateBuffer(state,1); + qDebug() << "scopeDsrIn" << state; + updateMode(); +} + +/*void bufferControl::signalGenIn(bool state){ + signalGenState = state; + + updateBuffer(state,1); + qDebug() << "signalGenIn" << state; + updateMode(); +}*/ + +void bufferControl::busSnifferIn_CH1(bool state){ + busSnifferState_CH1 = state; + + if (busSnifferState_CH2){ //Implicitly state is false + busSnifferState_CH2 = false; + //updateBuffer(0); - Causes issues because the uncheck below called scopeIn_CH2 (but only when toggle)!!! + busSnifferUncheck(0); + } + + busSnifferOut_CH2(state); + + updateBuffer(state,1); + qDebug() << "busSnifferIn_CH1" << state; + updateMode(); +} + +void bufferControl::busSnifferIn_CH2(bool state){ + busSnifferState_CH2 = state; + + updateBuffer(state,1); + qDebug() << "busSnifferIn_CH2" << state; + updateMode(); +} + +void bufferControl::multimeterIn(bool state){ + multimeterState = state; + + updateBuffer(state,2); + qDebug() << "multimeterIn" << state; + updateMode(); +} + + + +void bufferControl::updateBuffer(bool decrement, int amount){ + if(decrement){ + numBuffers-=amount; + } + else{ + numBuffers+=amount; + } + refreshImage(); + + //Write new state + switch(numBuffers){ + case 0: + if(scopeState_CH1 == false) scopeOut_CH1(0); + if(scopeState_CH2 == false) scopeOut_CH2(0); + if(scopeDsrState == false) scopeDsrOut(0); + //if(signalGenState == false) signalGenOut(0); + if(busSnifferState_CH1 == false) busSnifferOut_CH1(0); + if(busSnifferState_CH2 == false) busSnifferOut_CH2(0); + if(multimeterState == false) multimeterOut(0); + break; + case 1: + scopeOut_CH1(1); + if(scopeState_CH1 == true){ + scopeDsrOut(1); + scopeOut_CH2(1); + } + //signalGenOut(1); + busSnifferOut_CH1(1); + if(busSnifferState_CH1 == true){ + busSnifferOut_CH2(1); + } + + //busSnifferOut_CH2(1); + multimeterOut(0); + break; + case 2: + scopeOut_CH1(1); + //scopeOut_CH2(1); + if(scopeState_CH1 == true) scopeDsrOut(1); + //signalGenOut(1); + busSnifferOut_CH1(1); + //busSnifferOut_CH2(1); + multimeterOut(1); + break; + default: + qFatal("numBuffers is not equal to 0, 1 or 2"); + } + +} + +void bufferControl::digIn_CH1(bool state){ + unsigned char mask = 0x01; + if(state){ + digState |= mask; + } + else{ + digState &= (unsigned char) 0xff - mask; + } + updateDig(digState); +} + +void bufferControl::digIn_CH2(bool state){ + unsigned char mask = 0x02; + if(state){ + digState |= mask; + } + else{ + digState &= (unsigned char) 0xff - mask; + } updateDig(digState); +} + +void bufferControl::digIn_CH3(bool state){ + unsigned char mask = 0x04; + if(state){ + digState |= mask; + } + else{ + digState &= (unsigned char) 0xff - mask; + } updateDig(digState); +} + +void bufferControl::digIn_CH4(bool state){ + unsigned char mask = 0x08; + if(state){ + digState |= mask; + } + else{ + digState &= (unsigned char) 0xff - mask; + } updateDig(digState); +} + +void bufferControl::updateMode(void){ + if(multimeterState){ + modeChange(7); + qDebug() << "Changed to mode 7"; + return; + } + if(scopeDsrState){ + modeChange(6); + qDebug() << "Changed to mode 6"; + return; + } + + if (busSnifferState_CH2){ + modeChange(4); + qDebug() << "Changed to mode 4"; + return; + } + if(busSnifferState_CH1 && scopeState_CH1){ + modeChange(1); + qDebug() << "Changed to mode 1"; + return; + } + if (scopeState_CH2){ + modeChange(2); + qDebug() << "Changed to mode 2"; + return; + } + if(busSnifferState_CH1){ + modeChange(3); + qDebug() << "Changed to mode 3"; + return; + } + if(scopeState_CH1){ + modeChange(0); + qDebug() << "Changed to mode 0"; + return; + } + + modeChange(5); + qDebug() << "Changed to mode 5"; + return; + +} + diff --git a/Desktop Interface/buffercontrol.h b/Desktop Interface/buffercontrol.h new file mode 100644 index 00000000..d6faa3fb --- /dev/null +++ b/Desktop Interface/buffercontrol.h @@ -0,0 +1,57 @@ +#ifndef BUFFERCONTROL_H +#define BUFFERCONTROL_H + +#include +#include +#include + +class bufferControl : public QLabel +{ + Q_OBJECT +public: + explicit bufferControl(QWidget *parent = 0); + void refreshImage(void); +private: + QPixmap bufferImage; + int numBuffers = 1; + bool scopeState_CH1 = true; + bool scopeState_CH2 = false; + bool scopeDsrState = false; + //bool signalGenState = false; + bool busSnifferState_CH1 = false; + bool busSnifferState_CH2 = false; + bool multimeterState = false; + unsigned char digState = 0x00; + + void updateBuffer(bool increment, int amount); + void updateMode(void); + +signals: + void scopeOut_CH1(bool state); + void scopeOut_CH2(bool state); + void scopeUncheck(bool state); + void scopeDsrOut(bool state); + void scopeDsrUncheck(bool state); + //void signalGenOut(bool state); + void busSnifferOut_CH1(bool state); + void busSnifferOut_CH2(bool state); + void busSnifferUncheck(bool state); + void multimeterOut(bool state); + void updateDig(int digMask); + void modeChange(int newMode); +public slots: + void scopeIn_CH1(bool state); + void scopeIn_CH2(bool state); + void scopeDsrIn(bool state); + //void signalGenIn(bool state); + void busSnifferIn_CH1(bool state); + void busSnifferIn_CH2(bool state); + void multimeterIn(bool state); + void digIn_CH1(bool state); + void digIn_CH2(bool state); + void digIn_CH3(bool state); + void digIn_CH4(bool state); + +}; + +#endif // BUFFERCONTROL_H diff --git a/Desktop Interface/cursorenabler.cpp b/Desktop Interface/cursorenabler.cpp new file mode 100644 index 00000000..f5aadffa --- /dev/null +++ b/Desktop Interface/cursorenabler.cpp @@ -0,0 +1,22 @@ +#include "cursorenabler.h" + +cursorEnabler::cursorEnabler(QWidget *parent) : QLabel(parent) +{ + this->setVisible(0); +} + +void cursorEnabler::setTurnedOn(bool enabled){ + turnedOn = enabled; +} + +void cursorEnabler::clickDetected(QMouseEvent* event){ + if(turnedOn){ + if (event->button() == Qt::LeftButton){ + tickHori(1); + } + if (event->button() == Qt::RightButton){ + tickVert(1); + } + } + passOnSignal(event); +} diff --git a/Desktop Interface/cursorenabler.h b/Desktop Interface/cursorenabler.h new file mode 100644 index 00000000..446554ff --- /dev/null +++ b/Desktop Interface/cursorenabler.h @@ -0,0 +1,26 @@ +#ifndef CURSORENABLER_H +#define CURSORENABLER_H + +#include +#include +#include + +class cursorEnabler : public QLabel +{ + Q_OBJECT +public: + explicit cursorEnabler(QWidget *parent = 0); +private: + bool turnedOn = true; + +signals: + void tickHori(bool); + void tickVert(bool); + void passOnSignal(QMouseEvent* event); + +public slots: + void setTurnedOn(bool enabled); + void clickDetected(QMouseEvent* event); +}; + +#endif // CURSORENABLER_H diff --git a/Desktop Interface/desktop_settings.cpp b/Desktop Interface/desktop_settings.cpp new file mode 100644 index 00000000..b2cf0f9f --- /dev/null +++ b/Desktop Interface/desktop_settings.cpp @@ -0,0 +1,18 @@ +#include "desktop_settings.h" + +//USB iso stuff +int MAX_TRANSFER_SIZE = 1023; +int MAX_PENDING_TRANSFERS = 16384; +int MAX_PENDING_IO = 32; + +//Plot settings +int GRAPH_SAMPLES = 1024; +int TIMER_PERIOD = 17; +int ISO_RECOVERY_TIME = (200); +int MAX_WINDOW_SIZE = 10; +int TICK_SEPARATION = 96; + +//Multimeter settings +int MULTIMETER_PERIOD = 500; + +double SERIAL_DELAY = 0.01; //100 baud? diff --git a/Desktop Interface/desktop_settings.h b/Desktop Interface/desktop_settings.h new file mode 100644 index 00000000..c371271f --- /dev/null +++ b/Desktop Interface/desktop_settings.h @@ -0,0 +1,23 @@ +#ifndef DESKTOP_SETTINGS_H +#define DESKTOP_SETTINGS_H + +//USB iso stuff +extern int MAX_TRANSFER_SIZE; +extern int MAX_PENDING_TRANSFERS; +extern int MAX_PENDING_IO; + +//Plot settings +extern int GRAPH_SAMPLES; +extern int TIMER_PERIOD; +extern int ISO_RECOVERY_TIME; +extern int MAX_WINDOW_SIZE; +extern int TICK_SEPARATION; +#define TRIGGER_COUNT_THRESH (7 + log10(window)) //Is this the right number? + +//Multimeter settings +extern int MULTIMETER_PERIOD; + +extern double SERIAL_DELAY; + +#endif // DESKTOP_SETTINGS_H + diff --git a/Desktop Interface/deviceconnecteddisplay.cpp b/Desktop Interface/deviceconnecteddisplay.cpp new file mode 100644 index 00000000..9f075f53 --- /dev/null +++ b/Desktop Interface/deviceconnecteddisplay.cpp @@ -0,0 +1,18 @@ +#include "deviceconnecteddisplay.h" + +deviceConnectedDisplay::deviceConnectedDisplay(QWidget *parent) : QLabel(parent) +{ + +} + +void deviceConnectedDisplay::connectedStatusChanged(bool status){ + qDebug() << "deviceConnectedDisplay::connectedStatusChanged running!"; + if(status){ + this->setText("Device Connected"); + this->setStyleSheet("QLabel { color:black; }"); + } + else{ + this->setText("Device Not Detected!"); + this->setStyleSheet("QLabel { color:red; }"); + } +} diff --git a/Desktop Interface/deviceconnecteddisplay.h b/Desktop Interface/deviceconnecteddisplay.h new file mode 100644 index 00000000..1cb3b07c --- /dev/null +++ b/Desktop Interface/deviceconnecteddisplay.h @@ -0,0 +1,20 @@ +#ifndef DEVICECONNECTEDDISPLAY_H +#define DEVICECONNECTEDDISPLAY_H + +#include +#include +#include + +class deviceConnectedDisplay : public QLabel +{ + Q_OBJECT +public: + explicit deviceConnectedDisplay(QWidget *parent = 0); + +signals: + +public slots: + void connectedStatusChanged(bool status); +}; + +#endif // DEVICECONNECTEDDISPLAY_H diff --git a/Desktop Interface/espocombobox.cpp b/Desktop Interface/espocombobox.cpp new file mode 100644 index 00000000..57208f01 --- /dev/null +++ b/Desktop Interface/espocombobox.cpp @@ -0,0 +1,27 @@ +#include "espocombobox.h" + +espoComboBox::espoComboBox(QWidget *parent) : QComboBox(parent) +{ + +} + + +void espoComboBox::readWaveformList(void) +{ + FILE *listPtr = fopen("C:/kfvcc/waveforms/_list.wfl", "r"); + QStringList *newNames = new QStringList(); + char nameBuffer[255]; + + if(listPtr == NULL){ + qFatal("Could not load _list.wfl"); + } + + while (fgets(nameBuffer,256,listPtr) !=NULL){ + qDebug() << "nameBuffer = " << nameBuffer; + strtok(nameBuffer, "\n"); + newNames->append(nameBuffer); + } + this->addItems(*(newNames)); + delete newNames; + fclose(listPtr); +} diff --git a/Desktop Interface/espocombobox.h b/Desktop Interface/espocombobox.h new file mode 100644 index 00000000..e008c1f7 --- /dev/null +++ b/Desktop Interface/espocombobox.h @@ -0,0 +1,19 @@ +#ifndef ESPOCOMBOBOX_H +#define ESPOCOMBOBOX_H + +#include +#include +#include + +class espoComboBox : public QComboBox +{ + Q_OBJECT +public: + explicit espoComboBox(QWidget *parent = 0); + void readWaveformList(void); +signals: + +public slots: +}; + +#endif // ESPOCOMBOBOX_H diff --git a/Desktop Interface/esposlider.cpp b/Desktop Interface/esposlider.cpp new file mode 100644 index 00000000..04b37bd2 --- /dev/null +++ b/Desktop Interface/esposlider.cpp @@ -0,0 +1,100 @@ +//Known issues: +//Memory leak +//Must be called by main window or labels can disappear. + +#include "esposlider.h" + +#define MIN(a,b) (((a)<(b))?(a):(b)) + + +espoSlider::espoSlider(QWidget *parent) : QSlider(parent) +{ + windowPointer = parent; + labelMargin = 3; +} + +bool espoSlider::setTickLabel(QString label, int position) +{ + if (position > maxTick()){ + //qDebug() << "Tried to label tick at position " << position << "but ticks range from 0 to " << maxTick(); + return true; + } + QLabel * working = addressBook.at(position); + working->setText(label); + working->setGeometry(QRect(0, 0, 100, 12)); + //qDebug() << "Set Geometry of QLabel" << working; + working->show(); + + return false; +} + +void espoSlider::resizeEvent(QResizeEvent *event){ + this->debug_var++; + //qDebug() << "move/resize event" << debug_var; + rearrange(); +} + +void espoSlider::moveEvent(QMoveEvent *event){ + this->debug_var++; + //qDebug() << "move/resize event" << debug_var; + rearrange(); +} + + +void espoSlider::setTickInterval(int ti){ + addressBook.resize(maxTick(ti) + 1, NULL); //Leaky, but not significantly. Old qlabels never deleted. + for (int i=0; itickInterval() == 0){ + return 0; + } + return (this->maximum() - this-> minimum() + 1) / (this->tickInterval()); +} + +int espoSlider::maxTick(int ti){ + if (ti == 0){ + return 0; + } + return (this->maximum() - this-> minimum() + 1) / ti; +} + +void espoSlider::rearrange(){ + QLabel *working; + int k = 5; + int c = 5; + + int left = this->geometry().left(); + int right = this->geometry().right(); + int top = this->geometry().top(); + int bottom = this->geometry().bottom(); + int height = bottom - top; + int internalHeight = height-c-k; + int margin = (width()/3) - 6; + + //qDebug() << "left = " << left << "right = " << right << "top = " << top << "bottom = " << bottom << "height = " << height << "internalHeight = " << internalHeight << "margin = " << margin; + //qDebug() << "maxTick() =" << maxTick(); + if (addressBook.size() > 1) + for (int i=addressBook.size()-1; i>0; i--){ + working = addressBook.at(i); + working->setGeometry(QRect(right-margin+labelMargin, top + c + (internalHeight * i * this->tickInterval()) / (this->maximum() - this->minimum()) - 5, 100, 9)); + } + working = addressBook.at(0); + working->setGeometry(QRect(right-margin+labelMargin, top + c - 5, 100, 9)); +} + +void espoSlider::selfMoved(int newval) +{ + QString newstring; + newstring.setNum((double) newval/20, 'f', 2); + //qDebug() << newstring; + voltageChanged(((double) newval) / 20); + lcdOut(newstring); + return; +} diff --git a/Desktop Interface/esposlider.h b/Desktop Interface/esposlider.h new file mode 100644 index 00000000..d2a65db6 --- /dev/null +++ b/Desktop Interface/esposlider.h @@ -0,0 +1,35 @@ +#ifndef ESPOSLIDER_H +#define ESPOSLIDER_H + +#include +#include +//#include +#include +#include +#include + +class espoSlider : public QSlider +{ + Q_OBJECT +public: + explicit espoSlider(QWidget *parent = 0); + bool setTickLabel(QString label, int position); + void resizeEvent(QResizeEvent *event); + void moveEvent(QMoveEvent *event); + void setTickInterval(int ti); + int maxTick(); + int maxTick(int ti); +private: + int debug_var = 0; + void rearrange(); + std::vector addressBook; + QWidget* windowPointer; + int labelMargin; +signals: + void lcdOut(QString values); + void voltageChanged(double newVoltage); +public slots: + void selfMoved(int newval); +}; + +#endif // ESPOSLIDER_H diff --git a/Desktop Interface/espospinbox.cpp b/Desktop Interface/espospinbox.cpp new file mode 100644 index 00000000..f339c37f --- /dev/null +++ b/Desktop Interface/espospinbox.cpp @@ -0,0 +1,47 @@ +#include "espospinbox.h" + +espoSpinBox::espoSpinBox(QWidget *parent) : QDoubleSpinBox(parent) +{ + +} + +QString espoSpinBox::textFromValue(double value) const{ + QString windowText; + if (value == 0){ + QTextStream(&windowText) << value; + return windowText; + } + if (value >= 1000000){ + QTextStream(&windowText) << value/1000000 << "M"; + return windowText; + } + if (value >= 1000){ + QTextStream(&windowText) << value/1000 << "k"; + return windowText; + } + if (value >= 1){ + QTextStream(&windowText) << value; + return windowText; + } + if (value >= 1/1000){ + QTextStream(&windowText) << value * 1000 << "m"; + return windowText; + } + if (value >= 1/1000000){ + QTextStream(&windowText) << value * 1000000 << "u"; + return windowText; + } + return "invalid"; +} + +void espoSpinBox::maximumChanged(double linked){ + this->setMaximum(9.6-linked); +} + +void espoSpinBox::setMax(double newMax){ + this->setMaximum(newMax); +} + +void espoSpinBox::setMin(double newMin){ + this->setMinimum(newMin); +} diff --git a/Desktop Interface/espospinbox.h b/Desktop Interface/espospinbox.h new file mode 100644 index 00000000..5ada4751 --- /dev/null +++ b/Desktop Interface/espospinbox.h @@ -0,0 +1,25 @@ +#ifndef ESPOSPINBOX_H +#define ESPOSPINBOX_H + +#include +#include +#include +#include + +class espoSpinBox : public QDoubleSpinBox +{ + Q_OBJECT +public: + explicit espoSpinBox(QWidget *parent = 0); +private: + QString textFromValue(double value) const; + +signals: + +public slots: + void maximumChanged(double linked); + void setMax(double newMax); + void setMin(double newMin); +}; + +#endif // ESPOSPINBOX_H diff --git a/Desktop Interface/functiongencontrol.cpp b/Desktop Interface/functiongencontrol.cpp new file mode 100644 index 00000000..4308b675 --- /dev/null +++ b/Desktop Interface/functiongencontrol.cpp @@ -0,0 +1,143 @@ +#include "functiongencontrol.h" + +functionGenControl::functionGenControl(QWidget *parent) : QLabel(parent) +{ + this->hide(); + samples_CH1 = (unsigned char *) malloc(0); + samples_CH2 = (unsigned char *) malloc(0); + +} + +void functionGenControl::waveformName_CH1(QString newName) +{ + qDebug() << "newName = " << newName; + newName.append(".tlw"); + + QString *directory = new QString("C:/kfvcc/waveforms/"); + + directory->append(newName); + QByteArray temp = directory->toLatin1(); + char *fileName = temp.data(); + + qDebug() << "opening" << fileName; + FILE *fptr = fopen(fileName, "r"); + if (fptr==NULL){ + qFatal("%s could not be opened!", fileName); + } + + char lengthString[5]; + fgets(lengthString, 5, fptr); + sscanf(lengthString, "%d", &length_CH1); + + char divisibilityString[5]; + fgets(divisibilityString, 5, fptr); + sscanf(divisibilityString, "%d", &divisibility_CH1); + + qDebug() << "Length = " << length_CH1; + qDebug() << "Divisibility = " << divisibility_CH1; + + free(samples_CH1); + samples_CH1 = (unsigned char *) malloc(length_CH1); + + char *dataString = (char *) malloc(length_CH1*5+1); + fgets(dataString, length_CH1*5+1, fptr); + + int dummy; + char *dataStringCurrent = dataString; + for (int i=0;i>(divisibility_CH1-1))); + setMinFreq_CH1((double) CLOCK_FREQ/1024/65535/length_CH1); + functionGenToUpdate(0, this); +} + +void functionGenControl::freqUpdate_CH1(double newFreq){ + qDebug() << "newFreq = " << newFreq; + freq_CH1 = newFreq; + functionGenToUpdate(0, this); +} + +void functionGenControl::amplitudeUpdate_CH1(double newAmplitude){ + qDebug() << "newAmplitude = " << newAmplitude; + amplitude_CH1 = newAmplitude; + functionGenToUpdate(0, this); +} + +void functionGenControl::offsetUpdate_CH1(double newOffset){ + qDebug() << "newOffset = " << newOffset; + offset_CH1 = newOffset; + functionGenToUpdate(0, this); +} + +void functionGenControl::waveformName_CH2(QString newName) +{ + qDebug() << "newName = " << newName; + newName.append(".tlw"); + + QString *directory = new QString("C:/kfvcc/waveforms/"); + + directory->append(newName); + QByteArray temp = directory->toLatin1(); + char *fileName = temp.data(); + + qDebug() << "opening" << fileName; + FILE *fptr = fopen(fileName, "r"); + if (fptr==NULL){ + qFatal("%s could not be opened!", fileName); + } + + char lengthString[5]; + fgets(lengthString, 5, fptr); + sscanf(lengthString, "%d", &length_CH2); + + char divisibilityString[5]; + fgets(divisibilityString, 5, fptr); + sscanf(divisibilityString, "%d", &divisibility_CH2); + + qDebug() << "Length = " << length_CH2; + qDebug() << "Divisibility = " << divisibility_CH2; + + free(samples_CH2); + samples_CH2 = (unsigned char *) malloc(length_CH2); + + char *dataString = (char *) malloc(length_CH2*5+1); + fgets(dataString, length_CH2*5+1, fptr); + + int dummy; + char *dataStringCurrent = dataString; + for (int i=0;i>(divisibility_CH2-1))); + setMinFreq_CH2((double) CLOCK_FREQ/1024/65535/length_CH2); + functionGenToUpdate(1, this); +} + +void functionGenControl::freqUpdate_CH2(double newFreq){ + qDebug() << "newFreq = " << newFreq; + freq_CH2 = newFreq; + functionGenToUpdate(1, this); +} + +void functionGenControl::amplitudeUpdate_CH2(double newAmplitude){ + qDebug() << "newAmplitude = " << newAmplitude; + amplitude_CH2 = newAmplitude; + functionGenToUpdate(1, this); +} + +void functionGenControl::offsetUpdate_CH2(double newOffset){ + qDebug() << "newOffset = " << newOffset; + offset_CH2 = newOffset; + functionGenToUpdate(1, this); +} diff --git a/Desktop Interface/functiongencontrol.h b/Desktop Interface/functiongencontrol.h new file mode 100644 index 00000000..c82abc76 --- /dev/null +++ b/Desktop Interface/functiongencontrol.h @@ -0,0 +1,35 @@ +#ifndef FUNCTIONGENCONTROL_H +#define FUNCTIONGENCONTROL_H + +#include +#include +#include +#include "xmega.h" + +class functionGenControl : public QLabel +{ + Q_OBJECT +public: + explicit functionGenControl(QWidget *parent = 0); + unsigned char *samples_CH1, *samples_CH2; + int length_CH1, divisibility_CH1, length_CH2, divisibility_CH2; + double freq_CH1 = 1000, amplitude_CH1 = 0, offset_CH1 = 0, freq_CH2 = 1000, amplitude_CH2 = 0, offset_CH2 = 0; +private: +signals: + void functionGenToUpdate(int channel, functionGenControl *fGenControl); + void setMaxFreq_CH1(double maxFreq); + void setMinFreq_CH1(double minFreq); + void setMaxFreq_CH2(double maxFreq); + void setMinFreq_CH2(double minFreq); +public slots: + void waveformName_CH1(QString newName); + void freqUpdate_CH1(double newFreq); + void amplitudeUpdate_CH1(double newAmplitude); + void offsetUpdate_CH1(double newOffset); + void waveformName_CH2(QString newName); + void freqUpdate_CH2(double newFreq); + void amplitudeUpdate_CH2(double newAmplitude); + void offsetUpdate_CH2(double newOffset); +}; + +#endif // FUNCTIONGENCONTROL_H diff --git a/Desktop Interface/isobuffer.cpp b/Desktop Interface/isobuffer.cpp new file mode 100644 index 00000000..dfc30b0f --- /dev/null +++ b/Desktop Interface/isobuffer.cpp @@ -0,0 +1,254 @@ +#include "isobuffer.h" + +isoBuffer::isoBuffer(int bufferLen) +{ + buffer = (short *) calloc(bufferLen*2, sizeof(short)); + bufferEnd = bufferLen-1; + samplesPerSecond = (double) bufferLen/(double)21; + samplesPerSecond = samplesPerSecond/375*374; //BABABOOEY +} +void isoBuffer::openFile(QString newFile) +{ + if (fptr != NULL){ + fclose(fptr); + } + if (newFile.isEmpty()){ + fptr = NULL; + } + else { + QByteArray temp = newFile.toLatin1(); + char *fileName = temp.data(); + fptr = fopen(fileName, "w"); + if (fptr == NULL) qFatal("Null fptr in isoBuffer::openFile"); + qDebug() << "opening file" << fileName; + qDebug() << "fptr = " << fptr; + } +} + +void isoBuffer::writeBuffer_char(char* data, int len) +{ + //for (int i=(len-1);i>-1;i--){ + for (int i=0; i (bitPeriod_seconds + SERIAL_DELAY)){ + tempPtr = (unsigned short *) readBuffer(0, 1, false, dist_seconds - bitPeriod_seconds); + tempShort = *(tempPtr); + tempShort = tempShort & 0xff; + tempChar = tempShort & (1 << serialPhase) ? 0 : 1; + if(serialDecodingSymbol){ + //if((tempShort != 0) && (tempShort!= 255)) qDebug() << "tempShort = " << tempShort; + qDebug() << numOnes(tempShort); + decodeSymbol(numOnes(tempShort) > 4); + } + else serialDecodingSymbol = (numOnes(tempShort) < 8); + marchSerialPtr(bitPeriod_seconds * samplesPerSecond); + dist_seconds = (double)serialDistance()/samplesPerSecond; + } +} + +int isoBuffer::serialDistance() +{ + if(back >= serialPtr){ + return back - serialPtr; + }else return bufferEnd - serialPtr + back; +} + +void isoBuffer::serialBegin() +{ + serialPtr = back; +} + + +void isoBuffer::decodeSymbol(unsigned char newBit) //Slow but works. +{ + if(symbolCurrent == symbolMax){ //Last bit in symbol + console -> insertPlainText(QString(QChar((char)symbol))); + if(serialAutoScroll){ + //http://stackoverflow.com/questions/21059678/how-can-i-set-auto-scroll-for-a-qtgui-qtextedit-in-pyqt4 DANKON + QTextCursor c = console->textCursor(); + c.movePosition(QTextCursor::End); + console->setTextCursor(c); + // txtedit.ensureCursorVisible(); // you might need this also + } + symbolCurrent++; + return; + } + if(symbolCurrent > symbolMax){ //Wait for stop bit. Stops over the top calculation when you get a string of zeroes... + if(newBit == 1){ + serialDecodingSymbol = false; + symbolCurrent = 0; + symbol = 0; + } + return; + } + //otherwise + symbol |= newBit << symbolCurrent; + symbolCurrent++; +} + +void isoBuffer::marchSerialPtr(int bitPeriod_samples) +{ + int halfPeriod = bitPeriod_samples * 0.6; + int sampleDistance = -1; + + serialPtr += bitPeriod_samples; + if(serialPtr >= bufferEnd){ + serialPtr -= bufferEnd; + } + if(!serialDecodingSymbol){ + return; + } + + if((serialPtr <= halfPeriod) || (serialPtr > (bufferEnd - halfPeriod))) return; //Don't bother readjusting. Too hard. + + //otherwise... + if(buffer[serialPtr] != buffer[serialPtr - halfPeriod]){ //use LHS to calibrate + for (int i=halfPeriod;i>=0;i--){ + if(buffer[serialPtr] == buffer[serialPtr-i]){ + sampleDistance = i; + break; + } + } + if(sampleDistance != -1) serialPtr += (bitPeriod_samples/2) - sampleDistance; + } + + if(sampleDistance == -1){ + if(buffer[serialPtr] != buffer[serialPtr + halfPeriod]){ //same as above but with RHS + for (int i=halfPeriod;i>=0;i--){ + if(buffer[serialPtr] == buffer[serialPtr+i]){ + sampleDistance = i; + break; + } + } + if(sampleDistance != -1) serialPtr -= (bitPeriod_samples/2) - sampleDistance; + } + } +} + +unsigned char isoBuffer::numOnes(unsigned short var){ + return ((var&0x01) ? 1 : 0) + ((var&0x02) ? 1 : 0) + ((var&0x04) ? 1 : 0) + ((var&0x08) ? 1 : 0) + ((var&0x10) ? 1 : 0) + ((var&0x20) ? 1 : 0) + ((var&0x40) ? 1 : 0) + ((var&0x80) ? 1 : 0); +} diff --git a/Desktop Interface/isobuffer.h b/Desktop Interface/isobuffer.h new file mode 100644 index 00000000..00d260da --- /dev/null +++ b/Desktop Interface/isobuffer.h @@ -0,0 +1,44 @@ +#ifndef ISOBUFFER_H +#define ISOBUFFER_H + +#include +#include +#include +#include +#include "xmega.h" +#include "desktop_settings.h" +#include + +class isoBuffer +{ +public: + isoBuffer(int bufferLen); + void openFile(QString newFile); + void writeBuffer_char(char *data, int len); + void writeBuffer_short(short *data, int len); + short *readBuffer(double sampleWindow, int numSamples, bool singleBit, double delayOffset); + void clearBuffer(); + void gainBuffer(int gain_log); + void glitchInsert(short type); + void serialDecode(double baudRate, unsigned char channel); + int serialDistance(); + void serialBegin(); + QPlainTextEdit *console, *console1, *console2; + bool serialAutoScroll = true; +private: + short *buffer, *readData = NULL; + FILE* fptr = NULL; + int bufferEnd, back = 0, serialPtr = 0; + int samplesPerSecond; + bool firstTime = true; + bool serialDecodingSymbol = false; + unsigned char symbolMax = 7; + unsigned char symbolCurrent = 0; + unsigned short symbol = 0; + void decodeSymbol(unsigned char newBit); + void marchSerialPtr(int bitPeriod_samples); + char serialPhase = 0; + unsigned char numOnes(unsigned short var); +}; + +#endif // ISOBUFFER_H diff --git a/Desktop Interface/isodriver.cpp b/Desktop Interface/isodriver.cpp new file mode 100644 index 00000000..486e0a43 --- /dev/null +++ b/Desktop Interface/isodriver.cpp @@ -0,0 +1,988 @@ +#include "isodriver.h" + +isoDriver::isoDriver(QWidget *parent) : QLabel(parent) +{ + this->hide(); + internalBuffer375_CH1 = new isoBuffer(MAX_WINDOW_SIZE*ADC_SPS/20*21); + internalBuffer375_CH2 = new isoBuffer(MAX_WINDOW_SIZE*ADC_SPS/20*21); + internalBuffer750 = new isoBuffer(MAX_WINDOW_SIZE*ADC_SPS/10*21); + + isoTemp = (char *) malloc(TIMER_PERIOD*ADC_SPF + 8); //8-byte header contains (unsigned long) length + + char volts[2] = "V"; + char seconds[2] = "s"; + char hertz[3] = "Hz"; + + v0 = new siprint(volts, 1234); + v1 = new siprint(volts, 0); + dv = new siprint(volts, 0); + t0 = new siprint(seconds, 0); + t1 = new siprint(seconds, 0); + dt = new siprint(seconds, 0); + f = new siprint(hertz, 0); + + startTimer(); + + slowTimer = new QTimer; + slowTimer->setTimerType(Qt::PreciseTimer); + slowTimer->start(MULTIMETER_PERIOD); + connect(slowTimer, SIGNAL(timeout()), this, SLOT(slowTimerTick())); +} + +void isoDriver::setDriver(winUsbDriver *newDriver){ + driver = newDriver; + qDebug() << "driver = " << driver; +} + +void isoDriver::setAxes(QCustomPlot *newAxes){ + axes = newAxes; + qDebug() << "axes = " << axes; +} + +void isoDriver::setWindow(int newWindow){ + window = pow( (double)10, ( (double)newWindow / 10) ); + windowAtPause = window; + qDebug() << "window = " << window; +} + +void isoDriver::timerTick(void){ + if(firstFrame){ + autoGain(); + firstFrame = false; + } + //qDebug() << "TICK!" << QDateTime::currentMSecsSinceEpoch(); + if (driver->recoveryInProcess){ + //qDebug() << "Recovery in process! Aborting"; + return; + } + + isoTemp = driver->isoRead(TIMER_PERIOD*ADC_SPF*2); + length = *((PUINT)isoTemp); + total_read += length; + + if (driver->recoveryInProcess){ + recoverIsoStream(); + free(isoTemp); + return; + } + + switch(driver->deviceMode){ + case 0: + frameActionGeneric(1,0); + break; + case 1: + frameActionGeneric(1,2); + if(serialDecodeEnabled_CH1){ + internalBuffer375_CH2->serialDecode(baudRate_CH1, 1); + } + break; + case 2: + frameActionGeneric(1,1); + break; + case 3: + frameActionGeneric(2,0); + if(serialDecodeEnabled_CH1){ + internalBuffer375_CH1->serialDecode(baudRate_CH1, 1); + } + break; + case 4: + frameActionGeneric(2,2); + if(serialDecodeEnabled_CH1){ + internalBuffer375_CH1->serialDecode(baudRate_CH1, 1); + } + if(serialDecodeEnabled_CH2){ + internalBuffer375_CH2->serialDecode(baudRate_CH2, 2); + } + break; + case 5: + break; + case 6: + frameActionGeneric(-1,0); + break; + case 7: + multimeterAction(); + break; + default: + qFatal("Error in isoDriver::timerTick. Invalid device mode."); + } + free(isoTemp); +} + +void isoDriver::analogConvert(short *shortPtr, QVector *doublePtr, int TOP, bool AC){ + + double scope_gain = (double)(driver->scopeGain); + double accumulated = 0; + currentVmax = -20; + currentVmin = 20; + + double *data = doublePtr->data(); + for (int i=0;ideviceMode != 7) data[i] += vcc*(R2/(R1+R2)); + #ifdef INVERT_MM + if(driver->deviceMode == 7) data[i] *= -1; + #endif + + accumulated += data[i]; + if (data[i] > currentVmax) currentVmax = data[i]; + if (data[i] < currentVmin) currentVmin = data[i]; + } + currentVmean = accumulated / GRAPH_SAMPLES; + if(AC){ + for (int i=0;i *doublePtr){ + + double *data = doublePtr->data(); + double top = topRange - (topRange - botRange)/10; + double bot = botRange + (topRange - botRange)/10; + for (int i=0;isetTimerType(Qt::PreciseTimer); + isoTimer->start(TIMER_PERIOD); + connect(isoTimer, SIGNAL(timeout()), this, SLOT(timerTick())); + //qFatal("ISO TIMER STARTED"); +} + +void isoDriver::recoverIsoStream(void){ + QTimer::singleShot(ISO_RECOVERY_TIME, this, SLOT(recoveryTick())); +} + +void isoDriver::recoveryTick(void){ + //qDebug() << "(recovery) TICK"; + + //axes->yAxis->setAutoTickCount((axes->height() + TICK_SEPARATION / 2) / TICK_SEPARATION); + //axes->xAxis->setAutoTickCount((axes->width() + TICK_SEPARATION / 2) / TICK_SEPARATION); + + + if(driver->recoverySuccess){ + //isoTimer->start(TIMER_PERIOD); + //connect(isoTimer, SIGNAL(timeout()), this, SLOT(timerTick())); + driver->recoveryInProcess = false; + driver->dutyTemp = 0; + disableWindow(1); + //qDebug() << "recoveryTick() completed successfully"; + } + else{ + driver->reinitialise(1); + QTimer::singleShot(ISO_RECOVERY_TIME, this, SLOT(recoveryTick())); + //qDebug() << "recoveryTick() completed with errors. Retrying..."; + } +} + +void isoDriver::clearBuffers(bool ch3751, bool ch3752, bool ch750){ + if(ch3751) internalBuffer375_CH1->clearBuffer(); + if(ch3752) internalBuffer375_CH2->clearBuffer(); + if(ch750) internalBuffer750->clearBuffer(); +} + +void isoDriver::setVisible_CH2(bool visible){ + axes->graph(1)->setVisible(visible); +} + +void isoDriver::setVoltageRange(QWheelEvent *event){ + if (!(event->modifiers() == Qt::ControlModifier)){ + double c = (topRange - botRange) / (double)400; + + QCPRange range = axes->yAxis->range(); + + double pixPct = (double)100 - ((double)100 * (((double)axes->yAxis->pixelToCoord(event->y())-range.lower) / (double)(range.upper - range.lower))); + if (pixPct<0) pixPct = 0; + if (pixPct>100) pixPct = 100; + + + qDebug() << "WHEEL @ " << pixPct << "%"; + qDebug() << range.upper; + //qDebug() << event->delta(); + + if (event->delta()==120){ + topRange -= c* ((double)pixPct); + botRange += c* ((double)100 - (double)pixPct); + } + else{ + topRange += c* ((double)pixPct); + botRange -= c* ((double)100 - (double)pixPct); + } + + if (topRange > (double)20) topRange = (double)20; + if (botRange <- (double)20) botRange = (double)-20; + if (autoGainEnabled && !properlyPaused()) autoGain(); + } + else if(properlyPaused()){ + double c = (window) / (double)200; + QCPRange range = axes->xAxis->range(); + + double pixPct = (double)100 * (((double)axes->xAxis->pixelToCoord(event->x())-range.lower) / (double)(range.upper - range.lower)); + if (pixPct<0) pixPct = 0; + if (pixPct>100) pixPct = 100; + + qDebug() << "WHEEL @ " << pixPct << "%"; + qDebug() << event->delta(); + + if (event->delta()==120){ + window -= c* ((double)pixPct); + delay += c* ((double)100 - (double)pixPct) * pixPct/100; + } + else{ + window += c* ((double)pixPct); + delay -= c* ((double)100 - (double)pixPct) * pixPct/100; + } + + if (window > (double)MAX_WINDOW_SIZE) window = (double)MAX_WINDOW_SIZE; + if ((window + delay) > MAX_WINDOW_SIZE) delay -= window + delay - (double)MAX_WINDOW_SIZE; + if (delay < 0) delay = 0; + qDebug() << window << delay; + } else { + qDebug() << "TIGGERED"; + double c = (window) / (double)200; + QCPRange range = axes->xAxis->range(); + + double pixPct = (double)100 * (((double)axes->xAxis->pixelToCoord(event->x())-range.lower) / (double)(window)); + if (pixPct<0) pixPct = 0; + if (pixPct>100) pixPct = 100; + + qDebug() << "WHEEL @ " << pixPct << "%"; + qDebug() << event->delta(); + qDebug() << "upper = " << range.upper << "lower = " << range.lower; + qDebug() << "triggerDelay = " << triggerDelay; + qDebug() << "window = " << window; + qDebug() << c* ((double)pixPct); + qDebug() << c* ((double)100 - (double)pixPct) * pixPct/100; + + if (event->delta()==120){ + window -= c* ((double)pixPct); + delay += c* ((double)100 - (double)pixPct) * pixPct/100; + } + else{ + window += c* ((double)pixPct); + delay -= c* ((double)100 - (double)pixPct) * pixPct/100; + } + + if (window > (double)MAX_WINDOW_SIZE) window = (double)MAX_WINDOW_SIZE; + if ((window + delay) > MAX_WINDOW_SIZE) delay -= window + delay - (double)MAX_WINDOW_SIZE; + if (delay < 0) delay = 0; + windowAtPause = window; + qDebug() << window << delay; + } + //changeTimeAxis(event->delta()==-120); + //qDebug() << window; +} + +bool isoDriver::properlyPaused(){ + if(paused_CH1 & paused_CH2){ + qDebug() << "Properly paused"; + return true; + } + if ((driver->deviceMode == 0) || (driver->deviceMode == 3) || (driver->deviceMode == 6)){ + if(paused_CH1) qDebug() << "Properly paused"; else qDebug() << "Not properly paused"; + return paused_CH1; + } + if(paused_multimeter){ + qDebug() << "Properly paused"; + return true; + } + qDebug() << "Not properly paused"; + return false; +} + +void isoDriver::pauseEnable_CH1(bool enabled){ + paused_CH1 = enabled; + + if(!properlyPaused()) { + delay = 0; + window = windowAtPause; + } + + if(!enabled) clearBuffers(1,0,1); + qDebug() << "pauseEnable_CH1" << enabled; +} + + +void isoDriver::pauseEnable_CH2(bool enabled){ + paused_CH2 = enabled; + + if(!properlyPaused()){ + delay = 0; + window = windowAtPause; + } + + if(!enabled) clearBuffers(0,1,0); +} + +void isoDriver::pauseEnable_multimeter(bool enabled){ + paused_multimeter = enabled; + + if(!properlyPaused()) { + delay = 0; + window = windowAtPause; + } + + if(!enabled) clearBuffers(1,0,0); + qDebug() << "pauseEnable_multimeter" << enabled; +} + + +void isoDriver::autoGain(){ + double maxgain = vcc / (2 * ((double)topRange - vref) * R4/(R3+R4)); + double mingain = vcc / (2 * ((double)botRange - vref) * R4/(R3+R4)); + maxgain = std::min(abs(mingain) * 0.98, abs(maxgain) * 0.98); + + double snap[8] = {64, 32, 16, 8, 4, 2, 1, 0.5}; + + for (int i=0;i<8;i++){ + if (maxgain>snap[i]){ + setGain(snap[i]); + return; + } + } +} + +void isoDriver::gainBuffers(double multiplier){ + multi = multiplier; + QTimer::singleShot(TIMER_PERIOD*4, this, SLOT(gainTick())); +} + +void isoDriver::gainTick(void){ + qDebug() << "Multiplying by " << multi; + if (driver->deviceMode <5) internalBuffer375_CH1->gainBuffer(log2(multi)); + if ((driver->deviceMode == 1) | (driver->deviceMode == 2) | (driver->deviceMode == 4)) internalBuffer375_CH2->gainBuffer(log2(multi)); + if ((driver->deviceMode == 6) | (driver->deviceMode == 7)) internalBuffer750->gainBuffer(log2(multi)); +} + +void isoDriver::setAutoGain(bool enabled){ + autoGainEnabled = enabled; + if(enabled){ + autoGain(); + } +} + +void isoDriver::graphMousePress(QMouseEvent *event){ + qDebug() << event->button(); + if (horiCursorEnabled && (event->button() == Qt::LeftButton)){ + placingHoriAxes = true; + y0 = axes->yAxis->pixelToCoord(event->y()); + }else if(vertCursorEnabled && (event->button() == Qt::RightButton)){ + placingVertAxes = true; + x0 = axes->xAxis->pixelToCoord(event->x()); + } + qDebug() << "x0 =" << x0 << "x1 =" << x1 << "y0 =" << y0 << "y1 =" << y1; +} + +void isoDriver::graphMouseRelease(QMouseEvent *event){ + if(horiCursorEnabled && placingHoriAxes && (event->button() == Qt::LeftButton)){ + placingHoriAxes = false; + } else if (vertCursorEnabled && placingVertAxes && (event->button() == Qt::RightButton)){ + placingVertAxes = false; + } + qDebug() << "x0 =" << x0 << "x1 =" << x1 << "y0 =" << y0 << "y1 =" << y1; +} + +void isoDriver::graphMouseMove(QMouseEvent *event){ + if(horiCursorEnabled && placingHoriAxes){ + y1 = axes->yAxis->pixelToCoord(event->y()); + } else if(vertCursorEnabled && placingVertAxes){ + x1 = axes->xAxis->pixelToCoord(event->x()); + } +} + +void isoDriver::cursorEnableHori(bool enabled){ + horiCursorEnabled = enabled; + axes->graph(4)->setVisible(enabled); + axes->graph(5)->setVisible(enabled); +} + +void isoDriver::cursorEnableVert(bool enabled){ + vertCursorEnabled = enabled; + axes->graph(2)->setVisible(enabled); + axes->graph(3)->setVisible(enabled); +} + +void isoDriver::udateCursors(void){ + if(!(vertCursorEnabled || horiCursorEnabled)){ + cursorTextPtr->setVisible(0); + return; + } + + QVector vert0x(2), vert1x(2), hori0x(2), hori1x(2), vert0y(2), vert1y(2), hori0y(2), hori1y(2); + + vert0x[0] = x0; + vert0x[1] = x0; + vert0y[0] = botRange; + vert0y[1] = topRange; + + vert1x[0] = x1; + vert1x[1] = x1; + vert1y[0] = botRange; + vert1y[1] = topRange; + + hori0x[0] = -window - delay; + hori0x[1] = -delay; + hori0y[0] = y0; + hori0y[1] = y0; + + hori1x[0] = -window - delay; + hori1x[1] = -delay; + hori1y[0] = y1; + hori1y[1] = y1; + + if(vertCursorEnabled){ + axes->graph(2)->setData(vert0x, vert0y); + axes->graph(3)->setData(vert1x, vert1y); + } + if(horiCursorEnabled){ + axes->graph(4)->setData(hori0x, hori0y); + axes->graph(5)->setData(hori1x, hori1y); + } + + cursorTextPtr->setVisible(cursorStatsEnabled); + if (!cursorStatsEnabled) return; + + QString *cursorStatsString = new QString(); + + v0->value = y0; + v1->value = y1; + dv->value = y0-y1; + t0->value = x0; + t1->value = x1; + dt->value = abs(x0-x1); + f->value = 1/(x1-x0); + + char temp_hori[64]; + char temp_vert[64]; + char temp_separator[2]; + sprintf(temp_hori, "V0=%s, V1=%s, ΔV=%s", v0->printVal(), v1->printVal(), dv->printVal()); + sprintf(temp_vert, "t0=%s, t1=%s, Δt=%s, f=%s", t0->printVal(), t1->printVal(), dt->printVal(), f->printVal()); + sprintf(temp_separator, "\n"); + + //sprintf(temp, "hello!"); + if(horiCursorEnabled) cursorStatsString->append(temp_hori); + if(horiCursorEnabled && vertCursorEnabled) cursorStatsString->append(temp_separator); + if(vertCursorEnabled) cursorStatsString->append(temp_vert); + //qDebug() << temp; + cursorTextPtr->setText(*(cursorStatsString)); + delete cursorStatsString; +} + +int isoDriver::trigger(void){ + if(driver->deviceMode>2 && driver->deviceMode != 7){ //No scope + return -2; + } + if(triggerType>1 && driver->deviceMode!=2){ //No CH2! + return -1; + } + + bool AC = (triggerType > 1) ? AC_CH2 : AC_CH1; + double offsetMean = AC ? currentVmean : 0; + + short target = (triggerType%2) ? reverseFrontEnd(triggerLevel*1.1 + offsetMean) : reverseFrontEnd(triggerLevel + offsetMean); + short lowThresh = (triggerType%2) ? reverseFrontEnd(triggerLevel + offsetMean) : reverseFrontEnd(triggerLevel*0.9 + offsetMean); + + int location = -1; + + if(driver->deviceMode == 7){ + for (int i=0;i= target){ + triggerCountSeeking = (triggerType % 2) ? 0 : triggerCountSeeking + 1; + triggerCountNotSeeking = (triggerType % 2) ? triggerCountNotSeeking + 1 : 0; + } + else if (isoTemp_short[i+4] < lowThresh){ + triggerCountNotSeeking = (triggerType % 2) ? 0 : triggerCountNotSeeking + 1; + triggerCountSeeking = (triggerType % 2) ? triggerCountSeeking + 1 : 0; + } + else{ + triggerCountSeeking = 0; + triggerCountNotSeeking = 0; + } + + //Check for found + if(triggerSeeking && (triggerCountSeeking > TRIGGER_COUNT_THRESH)){ + if(location == -1) location = i; + triggerSeeking = false; + } + + //Check for lost + if((!triggerSeeking) && (triggerCountNotSeeking > TRIGGER_COUNT_THRESH)){ + triggerSeeking = true; + } + } + } + else{ + for (int i=0;i 374) && (triggerType<2)) || (((i%750 < 375) || (i%750 == 749)) && (triggerType>1))) continue; //Not a valid sample + + //A bit of thresholding... + //Gives DAT STABILITY + + if(isoTemp[i+8] >= target){ + triggerCountSeeking = (triggerType % 2) ? 0 : triggerCountSeeking + 1; + triggerCountNotSeeking = (triggerType % 2) ? triggerCountNotSeeking + 1 : 0; + } + else if (isoTemp[i+8] < lowThresh){ + triggerCountNotSeeking = (triggerType % 2) ? 0 : triggerCountNotSeeking + 1; + triggerCountSeeking = (triggerType % 2) ? triggerCountSeeking + 1 : 0; + } + else{ + triggerCountSeeking = 0; + triggerCountNotSeeking = 0; + } + + //Check for found + if(triggerSeeking && (triggerCountSeeking > TRIGGER_COUNT_THRESH)){ + if(location == -1) location = i; + triggerSeeking = false; + } + + //Check for lost + if((!triggerSeeking) && (triggerCountNotSeeking > TRIGGER_COUNT_THRESH)){ + triggerSeeking = true; + } + } + } + + if(singleShotEnabled && (location != -1)) { + delay = triggerDelay; + singleShotTriggered(1); + } + return location; +} + +short isoDriver::reverseFrontEnd(double voltage){ + //qFatal("reverseFrontEnd driver mode 7"); + #ifdef INVERT_MM + if(driver->deviceMode == 7) voltage *= -1; + #endif + + + double vn = vcc * (R2/(R1+R2)); + double vx = vn + (voltage - vn) * (R4 / (R3+R4)); + double TOP = (driver->deviceMode == 7) ? 2048 : 128; + + if (driver->deviceMode == 7){ + qDebug() << "SEEEKING"; + qDebug() << ((vx - vn)/vref * (double)driver->scopeGain * (double)TOP + (double)0.5); + qDebug() << "SEEEKING"; + return ((vx - vn)/vref * (double)driver->scopeGain * (double)TOP + (double)0.5); + } + + //qDebug() << "seeking" << voltage << "V"; + + + return ((vx - vn)/vref * (double)driver->scopeGain * (double)TOP + (double)0.5); +} + +void isoDriver::setTriggerEnabled(bool enabled){ + triggerEnabled = enabled; +} + +void isoDriver::setTriggerLevel(double level){ + triggerLevel = level; +} + +void isoDriver::setSingleShotEnabled(bool enabled){ + singleShotEnabled = enabled; +} + +void isoDriver::setTriggerMode(int newMode){ + triggerType = (triggerType_enum)newMode; +} + +void isoDriver::frameActionGeneric(char CH1_mode, char CH2_mode) //0 for off, 1 for ana, 2 for dig, -1 for ana750 +{ + if(!paused_CH1 && CH1_mode == - 1){ + for (int i=0;i<(length/ADC_SPF);i++){ + internalBuffer750->writeBuffer_char(&isoTemp[ADC_SPF*i+8], ADC_SPF-2); //Offset because the first 8 bytes of the array contain the length (no samples!!)! + } + } + + if(!paused_CH1 && CH1_mode > 0){ + for (int i=0;i<(length/ADC_SPF);i++){ + internalBuffer375_CH1->writeBuffer_char(&isoTemp[ADC_SPF*i+8], ADC_SPF/2-1); //Offset because the first 8 bytes of the array contain the length (no samples!!)! + } + } + + if(!paused_CH2 && CH2_mode > 0){ + for (int i=0;i<(length/ADC_SPF);i++){ + internalBuffer375_CH2->writeBuffer_char(&isoTemp[ADC_SPF*i+8+ADC_SPF/2], ADC_SPF/2-1); //+375 to get the second half of the packet + } + } + + if(!paused_CH1){ + int offset = -2; //No trigger! + if(triggerEnabled && (triggerWaiting == 0) ){ + offset = trigger(); + } + if(offset == -1){ //Trigger is active but nothing found! + return; + } + + //qDebug() << "offset =" << offset; + + int backLength = length/750; + backLength *= (CH1_mode == -1) ? 748 : 374; + + if(offset>0){ + int temp_offset = offset % 750; + offset /= 750; + offset *= (CH1_mode == -1) ? 748 : 374; + offset += temp_offset; + } + + //qDebug() << "Now offset = " << offset; + + if((!paused_CH1) && triggerEnabled && (triggerWaiting == 0)){ + triggerDelay = backLength - offset; + triggerDelay /= (CH1_mode == -1) ? 748000 : 374000; + triggerDelay += delay; + triggerWaiting = (triggerDelay<(window/2)) * 2; + } + + //qDebug() << "triggerDelay = " << triggerDelay; + + //qDebug() << "triggerWaiting =" << triggerWaiting; + + if(triggerWaiting == 1) triggerWaiting = 0; + + //qDebug() << "triggerWaiting =" << triggerWaiting; + + if(triggerEnabled && triggerWaiting){ + triggerDelay += (double)TIMER_PERIOD/(double)1000; + triggerWaiting = (triggerDelay<(window/2)) + 1; + return; + } + } + + readData375_CH1 = internalBuffer375_CH1->readBuffer(window,GRAPH_SAMPLES,CH1_mode==2, delay + ((triggerEnabled&&!paused_CH1) ? triggerDelay + window/2 : 0)); + if(CH2_mode) readData375_CH2 = internalBuffer375_CH2->readBuffer(window,GRAPH_SAMPLES,CH1_mode==2, delay + (triggerEnabled ? triggerDelay + window/2 : 0)); + if(CH1_mode == -1) readData750 = internalBuffer750->readBuffer(window,GRAPH_SAMPLES,false, delay); + + QVector x(GRAPH_SAMPLES), CH1(GRAPH_SAMPLES), CH2(GRAPH_SAMPLES); + + + if (CH1_mode == 1){ + analogConvert(readData375_CH1, &CH1, 128, AC_CH1); + xmin = (currentVmin < xmin) ? currentVmin : xmin; + xmax = (currentVmax > xmax) ? currentVmax : xmax; + broadcastStats(0); + } + if (CH1_mode == 2) digitalConvert(readData375_CH1, &CH1); + + if (CH2_mode == 1){ + analogConvert(readData375_CH2, &CH2, 128, AC_CH2); + ymin = (currentVmin < ymin) ? currentVmin : ymin; + ymax = (currentVmax > ymax) ? currentVmax : ymax; + broadcastStats(1); + } + if (CH2_mode == 2) digitalConvert(readData375_CH2, &CH2); + + if(CH1_mode == -1) { + analogConvert(readData750, &CH1, 128, AC_CH1); + broadcastStats(0); + } + + for (double i=0; i0) { + CH1[i] = 0; + CH2[i] = 0; + } + } + + udateCursors(); + + if(XYmode){ + axes->graph(0)->setData(CH1,CH2); + axes->xAxis->setRange(xmin, xmax); + axes->yAxis->setRange(ymin, ymax); + }else{ + axes->graph(0)->setData(x,CH1); + if(CH2_mode) axes->graph(1)->setData(x,CH2); + axes->xAxis->setRange(-window-delay,-delay); + axes->yAxis->setRange(topRange, botRange); + } + + axes->replot(); +} + +void isoDriver::multimeterAction(){ + isoTemp_short = (short *)isoTemp; + if(!paused_multimeter){ + for (int i=0;i<(length/ADC_SPF);i++){ + internalBuffer375_CH1->writeBuffer_short(&isoTemp_short[ADC_SPF/2*i+(8/sizeof(short))], ADC_SPF/2-1); //Offset because the first 8 bytes of the array contain the length (no samples!!)! + } + } + + if(!paused_multimeter){ + int offset = -2; //No trigger! + if(triggerEnabled && (triggerWaiting == 0) ){ + offset = trigger(); + } + if(offset == -1){ //Trigger is active but nothing found! + return; + } + + qDebug() << "offset =" << offset; + + int backLength = length/750; + backLength *= 374; + + if(offset>0){ + int temp_offset = offset % 750; + offset /= 750; + offset *= 374; + offset += temp_offset; + } + + qDebug() << "Now offset = " << offset; + + if((!paused_CH1) && triggerEnabled && (triggerWaiting == 0)){ + triggerDelay = backLength - offset; + triggerDelay /= 374000; + triggerDelay += delay; + triggerWaiting = (triggerDelay<(window/2)) * 2; + } + + qDebug() << "triggerDelay = " << triggerDelay; + + qDebug() << "triggerWaiting =" << triggerWaiting; + + if(triggerWaiting == 1) triggerWaiting = 0; + + qDebug() << "triggerWaiting =" << triggerWaiting; + + if(triggerEnabled && triggerWaiting){ + triggerDelay += (double)TIMER_PERIOD/(double)1000; + triggerWaiting = (triggerDelay<(window/2)) + 1; + return; + } + } + + qDebug() << triggerEnabled; + qDebug() << !paused_multimeter; + qDebug() << (triggerEnabled&&!paused_multimeter); + + qDebug() << ((triggerEnabled&&!paused_multimeter) ? triggerDelay + window/2 : 0); + + readData375_CH1 = internalBuffer375_CH1->readBuffer(window,GRAPH_SAMPLES, false, delay + ((triggerEnabled&&!paused_multimeter) ? triggerDelay + window/2 : 0)); + + QVector x(GRAPH_SAMPLES), CH1(GRAPH_SAMPLES); + analogConvert(readData375_CH1, &CH1, 2048, 0); //No AC coupling! + + for (double i=0; i0) { + CH1[i] = 0; + } + } + axes->graph(0)->setData(x,CH1); + + udateCursors(); + + axes->xAxis->setRange(-window-delay,-delay); + axes->yAxis->setRange(topRange, botRange); + + axes->replot(); + multimeterStats(); +} + +void isoDriver::setAC_CH1(bool enabled){ + AC_CH1 = enabled; +} + +void isoDriver::setAC_CH2(bool enabled){ + AC_CH2 = enabled; +} + +void isoDriver::setMultimeterType(int type){ + multimeterType = (multimeterType_enum) type; + qDebug() << "multimeterType = " << multimeterType; +} + +void isoDriver::setSeriesResistance(double resistance){ + seriesResistance = resistance; + qDebug() << "seriesResistance = " << seriesResistance; +} + +void isoDriver::multimeterStats(){ + if (!multimeterShow) return; + + QTimer::singleShot(MULTIMETER_PERIOD, this, SLOT(enableMM())); + + multimeterShow = false; + bool mvMax, mvMin, mvMean, maMax, maMin, maMean; //We'll let the compiler work out this one. + + if(autoMultimeterV){ + mvMax = currentVmax < 1; + mvMin = currentVmin < 1; + mvMean = currentVmean < 1; + } + if(autoMultimeterI){ + maMax = (currentVmax / seriesResistance) < 1; + maMin = (currentVmin / seriesResistance) < 1; + maMean = (currentVmean / seriesResistance) < 1; + } + + if(forceMillivolts){ + mvMax = true; + mvMin = true; + mvMean = true; + } + if(forceMilliamps){ + maMax = true; + maMin = true; + maMean = true; + } + if(forceVolts){ + mvMax = false; + mvMin = false; + mvMean = false; + } + if(forceAmps){ + maMax = false; + maMin = false; + maMean = false; + } + + if(multimeterType == V){ + if(mvMax){ + currentVmax *= 1000; + sendMultimeterLabel1("Max (mV)"); + }else sendMultimeterLabel1("Max (V)"); + + if(mvMin){ + currentVmin *= 1000; + sendMultimeterLabel2("Min (mV)"); + }else sendMultimeterLabel2("Min (V)"); + + if(mvMean){ + currentVmean *= 1000; + sendMultimeterLabel3("Mean (mV)"); + }else sendMultimeterLabel3("Mean (V)"); + + multimeterMax(currentVmax); + multimeterMin(currentVmin); + multimeterMean(currentVmean); + return; + } + + if(multimeterType == I){ + if(maMax){ + currentVmax *= 1000; + sendMultimeterLabel1("Max (mA)"); + }else sendMultimeterLabel1("Max (A)"); + + if(maMin){ + currentVmin *= 1000; + sendMultimeterLabel2("Min (mA)"); + }else sendMultimeterLabel2("Min (A)"); + + if(maMean){ + currentVmean *= 1000; + sendMultimeterLabel3("Mean (mA)"); + }else sendMultimeterLabel3("Mean (A)"); + + multimeterMax(currentVmax / seriesResistance); + multimeterMin(currentVmin / seriesResistance); + multimeterMean(currentVmean / seriesResistance); + return; + } + +} + +void isoDriver::enableMM(){ + multimeterShow = true; +} + + +void isoDriver::setAutoMultimeterV(bool enabled){ + autoMultimeterV = enabled; +} + +void isoDriver::setAutoMultimeterI(bool enabled){ + autoMultimeterI = enabled; +} + + +void isoDriver::setForceMillivolts(bool enabled){ + forceMillivolts = enabled; +} + +void isoDriver::setForceMilliamps(bool enabled){ + forceMilliamps = enabled; +} + +void isoDriver::setForceVolts(bool enabled){ + forceVolts = enabled; +} + +void isoDriver::setForceAmps(bool enabled){ + forceAmps = enabled; +} + +void isoDriver::setSerialDecodeEnabled_CH1(bool enabled){ + serialDecodeEnabled_CH1 = enabled; +} + +void isoDriver::setSerialDecodeEnabled_CH2(bool enabled){ + serialDecodeEnabled_CH2 = enabled; +} + +void isoDriver::setXYmode(bool enabled){ + XYmode = enabled; + if(!enabled){ + xmin = 20; + xmax = -20; + ymin = 20; + ymax = -20; + } + axes->graph(1)->setVisible(!enabled); +} + +void isoDriver::triggerGroupStateChange(bool enabled){ + if(enabled) sendTriggerValue((currentVmax-currentVmin)*0.85 + currentVmin); +} + +void isoDriver::broadcastStats(bool CH2){ + if(CH2){ + if(!update_CH2) return; + update_CH2 = false; + sendVmax_CH2(currentVmax); + sendVmin_CH2(currentVmin); + sendVmean_CH2(currentVmean); + //sendVrms_CH2(currentVrms); + } else{ + if(!update_CH1) return; + update_CH1 = false; + sendVmax_CH1(currentVmax); + sendVmin_CH1(currentVmin); + sendVmean_CH1(currentVmean); + //sendVrms_CH1(currentVrms); + } +} + +void isoDriver::slowTimerTick(){ + update_CH1 = true; + update_CH2 = true; +} diff --git a/Desktop Interface/isodriver.h b/Desktop Interface/isodriver.h new file mode 100644 index 00000000..69dbf351 --- /dev/null +++ b/Desktop Interface/isodriver.h @@ -0,0 +1,144 @@ +#ifndef ISODRIVER_H +#define ISODRIVER_H + +#include +#include +#include +#include +#include "qcustomplot.h" +#include "winusbdriver.h" +#include "isobuffer.h" +#include "desktop_settings.h" +#include "siprint.h" + +class isoDriver : public QLabel +{ + Q_OBJECT +public: + explicit isoDriver(QWidget *parent = 0); + void setDriver(winUsbDriver *newDriver); + void setAxes(QCustomPlot *newAxes); + bool cursorStatsEnabled = true; + isoBuffer *internalBuffer375_CH1, *internalBuffer375_CH2, *internalBuffer750; + int baudRate_CH1 = 9600, baudRate_CH2 = 9600; + double delay = 0, window = 0.01; + QCPItemText *cursorTextPtr; +private: + winUsbDriver *driver; + QCustomPlot *axes; + double windowAtPause = 0.01; + QTimer* isoTimer = NULL, *recoveryTimer = NULL, *slowTimer = NULL; + short *readData375_CH1, *readData375_CH2, *readData750; + long total_read = 0; + void analogConvert(short *shortPtr, QVector *doublePtr, int TOP, bool AC); + void digitalConvert(short *shortPtr, QVector *doublePtr); + double topRange=2.5, botRange=-0.5; + bool paused_CH1 = false, paused_CH2 = false, paused_multimeter = false; + void recoverIsoStream(void); + void frameActionGeneric(char CH1_mode, char CH2_mode); + char *isoTemp = NULL; + short *isoTemp_short = NULL; + bool properlyPaused(); + void autoGain(void); + double multi = 0; + bool autoGainEnabled = true; + bool placingHoriAxes = false, placingVertAxes = false, horiCursorEnabled = false, vertCursorEnabled = false; + double y0=0, y1=0, x0=0, x1=0; + void udateCursors(void); + short reverseFrontEnd(double voltage); + int trigger(void); + bool triggerSeeking = true; + bool triggerEnabled = false; + double triggerLevel = 0; + enum triggerType_enum {rising_ch1 = 0, falling_ch1 = 1, rising_ch2 = 2, falling_ch2 = 3}; + triggerType_enum triggerType = rising_ch1; + int length; + siprint *v0, *v1, *dv, *t0, *t1, *dt, *f; + bool singleShotEnabled = false; + double triggerDelay; + int triggerCountSeeking = 0, triggerCountNotSeeking = 0; + unsigned char triggerWaiting = 0; + bool firstFrame = true; + void multimeterAction(); + bool AC_CH1 = false, AC_CH2 = false; + double currentVmax, currentVmin, currentVmean; + enum multimeterType_enum {V = 0, I = 1, R = 2, C = 3}; + multimeterType_enum multimeterType = V; + double seriesResistance = 0; + bool multimeterShow = false; + bool autoMultimeterV = true; + bool autoMultimeterI = true; + bool forceMillivolts = false; + bool forceMilliamps = false; + bool forceVolts = false; + bool forceAmps = false; + bool serialDecodeEnabled_CH1 = false, serialDecodeEnabled_CH2 = false; + bool XYmode = false; + double xmin = 20, xmax = -20, ymin = 20, ymax = -20; + bool update_CH1 = true, update_CH2 = true; + void broadcastStats(bool CH2); + +signals: + void setGain(double newGain); + void disableWindow(bool enabled); + void setCursorStatsVisible(bool enabled); + void sendCursorStatsText(QString text); + void singleShotTriggered(bool triggered); + void multimeterMax(double); + void multimeterMin(double); + void multimeterMean(double); + void sendMultimeterLabel1(QString); + void sendMultimeterLabel2(QString); + void sendMultimeterLabel3(QString); + void changeTimeAxis(bool positive); + void sendTriggerValue(double); + void sendVmax_CH1(double); + void sendVmin_CH1(double); + void sendVmean_CH1(double); + void sendVmax_CH2(double); + void sendVmin_CH2(double); + void sendVmean_CH2(double); + +public slots: + void setWindow(int newWindow); + void setVoltageRange(QWheelEvent *event); + void timerTick(void); + void recoveryTick(void); + void pauseEnable_CH1(bool enabled); + void pauseEnable_CH2(bool enabled); + void pauseEnable_multimeter(bool enabled); + void startTimer(); + void clearBuffers(bool ch3751, bool ch3752, bool ch750); + void setVisible_CH2(bool visible); + void gainBuffers(double multiplier); + void gainTick(void); + void setAutoGain(bool enabled); + void graphMousePress(QMouseEvent *event); + void graphMouseRelease(QMouseEvent *event); + void graphMouseMove(QMouseEvent *event); + void cursorEnableHori(bool enabled); + void cursorEnableVert(bool enabled); + void setTriggerEnabled(bool enabled); + void setTriggerLevel(double level); + void setSingleShotEnabled(bool enabled); + void setTriggerMode(int newMode); + void setAC_CH1(bool enabled); + void setAC_CH2(bool enabled); + void setMultimeterType(int type); + void setSeriesResistance(double resistance); + void multimeterStats(); + void enableMM(); + void setAutoMultimeterV(bool enabled); + void setAutoMultimeterI(bool enabled); + void setForceMillivolts(bool enabled); + void setForceMilliamps(bool enabled); + void setForceVolts(bool enabled); + void setForceAmps(bool enabled); + void setSerialDecodeEnabled_CH1(bool enabled); + void setSerialDecodeEnabled_CH2(bool enabled); + void setXYmode(bool enabled); + void triggerGroupStateChange(bool enabled); + void slowTimerTick(); +}; + +#endif // ISODRIVER_H diff --git a/Desktop Interface/libusbk/bin/dll/amd64/libusbK.dll b/Desktop Interface/libusbk/bin/dll/amd64/libusbK.dll new file mode 100644 index 0000000000000000000000000000000000000000..d8112b9e825d4ea9ab0ee96685aa18b02ab58e4f GIT binary patch literal 99128 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�n5-%C`_fI{R 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�!|hF?o8X@* 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 literal 0 HcmV?d00001 diff --git a/Desktop Interface/libusbk/bin/dll/x86/libusbK.dll b/Desktop Interface/libusbk/bin/dll/x86/libusbK.dll new file mode 100644 index 0000000000000000000000000000000000000000..0d41062911fabaa111324b1e7887ccee4f491000 GIT binary patch literal 84280 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 IIt$qT3nao=f&c&j literal 0 HcmV?d00001 diff --git a/Desktop Interface/libusbk/bin/lib/amd64/libusbK.lib b/Desktop Interface/libusbk/bin/lib/amd64/libusbK.lib new file mode 100644 index 0000000000000000000000000000000000000000..c8358a402616820ce03836fde9ec66d91c8f0293 GIT binary patch literal 23804 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 UYeC6J?9f^eo6qYGF~jfqKT!rjL;wH) literal 0 HcmV?d00001 diff --git a/Desktop Interface/libusbk/bin/lib/ia64/libusbK.lib b/Desktop Interface/libusbk/bin/lib/ia64/libusbK.lib new file mode 100644 index 0000000000000000000000000000000000000000..b8bdd81676ebb6d619fc044141a7fa6b07465f60 GIT binary patch literal 28414 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

    XvJk=}sBcM6!8EabbBc1bo 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⪙cZuOE0SsRwhVKc6 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%0DaICza6FU$L{#*=rB6OXCZ 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 literal 0 HcmV?d00001 diff --git a/Desktop Interface/libusbk/bin/lib/static/ia64/libusbK.lib b/Desktop Interface/libusbk/bin/lib/static/ia64/libusbK.lib new file mode 100644 index 0000000000000000000000000000000000000000..0e43a803c20310a795d9778dea7ab4827364daaa GIT binary patch literal 1437590 zcmeEv34B~tz5ks_+N4d_=|X9tOK1ZDrlkAAlFXV+GMO1Nla`icNRw$BnvG1-g*9!l z6huK3M38-z#RYjleBc5IJOxEiKokX)MGyr=P!RZkf4_6iz31MUX-as!_x|s-{p8NM zzw_JA@9g*9Gv}z5-qwxBj6Pzv{ojH`E0!-^uw=!uC3bj~yj`$l!GdL+K6$iZxMvu~ z*4zI_|GAph8XxDcsOENKxPQfe*lq0l6FwN(zTEgEe;S6VHkn`~Gr$F!_S>jeURT&tKi% z)tp_I_O0vg?Mt-xWDErfba(ajc6X$DTe`CAGrcA}+|i%iXu}NmW-PMWOrI~C?QU&v z>C3c5y81G`>swlF*@6Dv-b`1YuLF5qz)EKN`r5lTm;%5dn8~*Gw)gaPTVer?Z_e~~ zwDk03+L|)i{*FGKf)q-0ceJ-|vq8JJWO^OoNLPDbdrL?AX_ivQ_Gfyx1v8u5TQiZa z_1(RlEq(3XT_z*WHcgT0X6@NFhcsnc+8lsv#_nBk8Ojep$zv5k^H{aIx4kdJGII)4 z0-WV3!B%l90F|ap7br|Cw~!4MhE|joFsCG~EX`yMs97wbS}{sUfl}0Sa|=<=)!k$z-yxrB{KIece40%zO-s zg~fqW%z#sZUM4}#DM3BIuDefZU?zPX9frsd`b7J)>$Ze?d#QpZTKYCNw)C}bO!j12 zNs(UE=5(q%UEAN@W>i9>)w*Co*M}F zSI_nNYD}tFjlbUS3)K7Kg{T4@E!nJ%DCn<=)iwI-5|M@)Vp+BPxat+0Se%nscpPWo zM_`!uHHK-sl_D=Nn4O^c!0rNv2j&MhW?DBz+t&%#CAzyi>RP(mIx=Zr>#6u=)A`l8M>7`7Tf9P(9wJa8_9JaDrR^5-=edEjhNemFt% z(r`iKp<&B3I7Js%Vh7BrKjG!mUBYcT5X`BwgyrZD-I&~G$eA=2h zHhl%usj&&o(OKj;wHDAkdgu5Tm?F+KpA)Qr#sqijo8w=ihXwg`&G9ecvYzuJ+3tpP zsH?v-(bBpp(}$5ELqsReNsOaJp3D+G0cSO3nzI;*a+(GQ%))sOmW`QCF)UzAT^a*e z7^f^*e9NLZB_wgu5@f&48m5@}#HY8r)z{Y6o5^O={uWZx0gS={RXI@M6?AwFX&Q89 zw)V*ZjSVDxAVEFbg1zk+-un^}V?M(mNfKLtU}k*_#{D^PO-~DXRi-z~qj+W)?QUsv zil8A}N2aB#zbDYr(XkGmm(-LY6t@6Q+2p9Tnci+SR9O%THP-vWH0D@p8;&fjkJbf3 zjloFG(#5un#dU$&ctb;7jE6S%tom5M9}m?x)KJvgvtrSPy1HOpZ4FgpdsaMB*U%Vm zh}KXE*s~J;s6P~nBxW)r4~ znGOfFKTv~#VSQsmw6-SDm`1cv1Az%#Iui8R82J-5(Re5k2{qQ$R4;3YCR6EPXjLQ@ zj#n?Ko*RtOmByV*)@|#{WUH5CT3R{k zhOn77BthDh$+RK8$Q-{0;x&CRVCYNYU0BYC9G3E}mbhTzWBHf{_ zHs{1^0+EKOFB(oLFD6=OaxRcaWvZspZd8q6W?lb=Xl8S!!*H|$+%z~~qGfOZxnZz1 z0^DrbAlxiSh~6qN2>evVRQHa0sla-ZpkS&+;Cp+6z@R+sfeDw*fx34{H5&t({iK8a zw2VTjNH*5r(Gl+rb@udOVFLDJ;?=q-P0bEwPTGBUS4Nbo28FeGmr_hJ(S(|}h1MzT z2t3QRL^Dw`(~)UK7>Byrdb&{?H6@x*?Cl+xcbZ(9GV9SJ@Dfk}bp@uHS%Qx_%f_@) zdL!2vCXMigc5Au91Qzgwna_?e?+W&_GdWN{; zs253C7TSyorwX63MY)P(HqhPK(~;?en;9U-3o?y3qHdY*R=3bfftmDmVVTUCAMa?( zWOb}~uV@(zrjrv=al=|N*r6oDSVxhvROEZ1p-c(|_=fc}Q<{1vOloJ{E9K@#x?B4? z(!T7rF03$!o1`PXy1j2>s=YJQ-QQ>E=o+?_)RE`YIt8s)AV_%~lKR}VuMahKBlT(+ z0}vq4fxy($dR})wRT_aOmN(^HFymlDBezU1`V5H>#@dH}+p2af7^0Ff2N51-Qj;SB zgL5bu+A1mNhHG6{3)X2kzp;CBCWfJxcFSv6@}9jX*Jc();;~q5z#pq=PWo-#!{Tsb zsG%WT7odfd+QtZ$XtdRtC4p#TG!Y1*gGKmP+47cRyb<(88XIa>M`BL4OJlLRcp#97 z)X@5uL*}wzJQxZEYvVQ1h##5uA<43EEtHL7)X>qsuHQM#SytZ=sI80Eg=MZ?r)4pJ zpw<_x_ti9aZR+aY(q+?lSt5`~#Dn3WlxwG59;%PV5^>l=`Yv1*3EF*uQBEl2izn(a zR;XTx|BI^^3Jt5&;!~SVoIhL>49CK?0bd=BE|%9eM}qbxEq_A|5TmjBSbdEU zjb$yYW}#3LtciKcWrRCg$kK``03mT$UIzx%bL*lDs}?O@J`gT4S!fna038Cpx$x6>Ae?&k%eIQ$&0i~AaDp|cMo(Yh%8@{kmx zIG-;_mjGS3s)Z@FfG!+w6e~U-Paqh3kt2sO`NDj7L@j8Tka=)6^A$M^9n0BH-8qL#jTP23 zWOU}sE*3dV&Mes-tTA6$3$uQa?)9N)z~308I%35PlQKU}S&_kNGbhbce9tN{Hsc6A zILW$ODrojvd|6GA!;Gv8v#|J}o;mtVjEm72SBZv<*Zp%KJ|hRTT7kk`lXN-@V$xY4 zMc0rcPlG5r4Fozz*UtB%XSb5v;fh=C*F{ox>wKg2>U?i?>U?YK(*=Y!)y$M7fID=C z%l_O%--C*6P-EVa$nxmvPJWT?apV|ZdV)gc`moAJ+md=-`9ijlJnlV&a)c* zJN7$qwQUsBJ@#MPJFOAFK%z;Seeal1t*u6ZMWgx-F>aB2#DrB~tZ$Nl_j=5mF@zF( zw34RKPNYevZA6-|oP9_$N87oxVA?LE0CMqJ$uuIox22c1ph+vrHFuf`P+*5rU~{IJ zoH4bz11YlQSl;Pr4g-xUXZpdsFtg3$X|c?e<4gh<+@dElfRN)Jg5|hJ+t%D70wvy? zV~5%x^wszq>cX`lELO-}QRM+@6je)KMFXuwT_RM6EkTKAKD*#V3^&x(*9OA@g=hw# z6R|cPZ>X>JiSZ~bG`;FXYzPG#{Ph?kO3|i;cEmtU%pVTMYeN|Risvh=Sg>Pa6xh%Z zON4#(3KQ{fdDn>?3P*#X+B(y8TTwWX8v+d&dRaPvvsDS~$h9@$NL>JnVx|j74XZ$% z*!8uwjdgW(A*Hmv`0dzrHG%p>U1K;HQ`nB?!HyosmTzM`Uf-arl4l*nNmUn)*F`bx zk`B*b*K9->s)xhjP%UOSiVAk*k9{-#KvdgM>u+els;CqNR}DcFt!c#Mpw%;6+d4XI$~4y02P3sXpWiH7ng$9KDhq8Xo~pFL_1cVlaqDP{8O7mifoN6)aSQ&o z=79+bnCC$rm1l2;O=y9JL*-lXXG+d#gB7k-3rt)sA_a^aU?!lH+5Vak+5GZ-{)iBK ztj3p7Rm&qXbDAuPlNB{pAUPXe#z8pcI+kM0)`uz7{6Vxq@zB6R&c2d1;WeBw7bXx7YHyXLb$i3 zGZX9YTt`o?DK)g{GhsR5XXa?}XTdaoTfpA#o=mS?;BDY;U&^#veFeyNo3SP6u>oh5 znE(|CR4vmS1t6B_**WYFvW-?4i+hKxoIqAsh-5K%lzhzoPu@F&ThKY9+l1yTJBs=} zmK_jsJWjA2k8AFtm2?b0^NcFk9ae1fts}H0j8^qT(h=AUwBlOa(m0+|&ZstldD={s zXZMQuRt*N-zB3S{fl3_@JIJWX~ z!`R9rb%m$RAm+@R7?#ki8NwF8;^7Qn#zA!1T4x2!Q%pcD6upYd>0d|eGMeR}!jbEo zdo_1u`+IuubZ&+=VXPZl%dLSOQEnqq?YNHahuU0xj0;5Y~cLr!FQ?YMyPhl#{zRfkBl~dqQ0IIb{_pIjg=R z!1W=x#=y|hTAkFPjw)%-;{Hb~P*`hQJJGSN`e=i4r=+oP)_0W;86{a&sD@#2~^kkZow6U2DPpg6sxD^e0Mu7^LgOXeSa!|Nx z=uorv*@3*NYVxxMAdlSSSk6wA6;;57jo7#MfSP}hS2zkNb1$L*Xa!1&atf4`<>rt7 zChg({Rf}fRzmrFgHw@$Ut%k9-$z|MLQ)KM^L$R^EeWbDU+7jc^s!_()XGR+b)Q&OA zXN)y2m@?j&dEa;=cGg6rZNntv{0k-3`Pxjw!SpQ3m66iku6aF7-eDeRKiSz#$c=zM~cNu&4e=K-Y z*-%O7W#lXw!ch5C+Dao)_Uev)MI=y)^608~jf9s47dw13%5o(CeYz2)^ss(E-53*c ztT=OX+5T^fv@v@bX)e@{F^1!XkD)eKKF*W1R{LDwsawZ5g_f3p>3G0}9`%-wt}nzM}LH7FP^yhuXzX>`zv@52Lq)4ozE2WZr=Ze2ao1!?@n1ywsVS~sTNPMsi)Dz zomf%iXTuQW|1%z%bH4kgy^65!-L9PX)98&93US-ZWb&1kyg>0DhW=ul`J#&xNXsiW zzIZ)j-@9FT{4HN`$#ItT-iz*9!sb_WoIv4k%KC&atM2)UY4J#=`7)_(?r*K`+Q5#< zwj+<9;nXKa&gr%d-AENoAYR< z{Xby+OYH6FRgN|fbLyG^ib}?5$6}UXqgN}!+P7IqUeFe#gq!TE!Hi;G1}0E}CN1un3>WOCCMmMoa92_jC` zViFn*YPCf^+oVU2c#d^J<-!sn6i{C1;~!Ht%NPn-65B-O^BU{3uBmQQyH z&!KnfOn89h=u2>?t^{-HsXa2FX)mBoT?I6swq}k^UjcP$Y(jH%7CBC>1vHP|IsOG^ zj(-VOK;uvE>zKAr57<9Mkn>#v>u~~3aV_K&Eu4yPRPW)#)qD8ZnBy@5edF3%;MSpz zO%i+7z9;tS!~D8WFha>$gm>g?OV-XDZP{AS;^KD#)GKJ#kO?2zvtF99q3fHadPad| z{T!6srTrWfUf$QC<`Tah=-3LfXJQZFf6Ej5)HLZY!O*R=;IhO`AcxeowqkB6OAD7*=~zykpmod{?`wIW&EIYU@Lwb(TQ77yp5&P{#^)*?e}FY`1?W)`R} zR&Jq3Ek^XS&w5*wsheu z-R&()7oWhF4$y5%Z|S8IoqE$-_`5jsfogmTQcms9^k>@A*}mRPOXsI0WMg+7idPmRfbTI^9A>Go{*r^x=(Vx8rWYPWWG&{wSSRk%+}PB%^{5C@QbS`ymnJI9|E z^EUB;{Eqf)-=`-6ABj(I#+L=t_zp8ZE%<2(TDPgI?Ne?uScGiKK2jH*vnM!z*- zW;sWw!-qxFKD$sau%N1H>C&aMXD?a8Km2C3VSMzF3kMb7e8h>#AE$`4_HE9{TVpvAhl7dj-{=X({MPo4x$8HW z;4#2ybKun&6KWW5Lx+jC>S)90!5iE9KNGLL%LEgvhpWw7PMCNZye=;PRRj&=kwSRc zZ3@juPc@7;cAB@GF!{BuGc(?Xe$mU#TN4is^|s;*@9iC#-j(S1&<(b=Z8~Au(yFTY z3zjZgzGVJ_6V{=--MW0K=rvmx&c~&7{G;Lsn%b?#w`Fa>% z52vf=%dP@mZ|`b7p{1w&ge@(-UHHV-{Efy0*I(~lcJ8KcEPLULXUsjV>T%mmUrs0r;VI)-OJ~#y!?er{;<2)^P^Ei5VvBg2{F0VS{`6&+=Y|PG(QZK{ z?&@1VzrCviE!a=L`S_R?&lmoD!0oL+yJYIji07V(dtgBAUvEz0U2NwMK(i*cpJuD`xv z&YD*r|Lq5v#Eswa%$_tvF^f~StX84!j(;%@a5|tJ?O~(`^u``IP$DJJzbNBuwVnea-n=@{Q8l1zx`PIp{H+q z^3j|BbmvshA=8GS?#XWK!O={MS@`s4Vr7TUefq=c@kd_jtA6fWPiRQ;?j9m%>Yu%N z)@Scuf9MfU-!^#QiW^q_(X)N#-U(mGRE96fvQ$d@zu zw#Xruf9{$Er+=~GjGjaO{g!^u&kh=bd{bX11&*kw?(r8rH}iE8E30zv?^k-+Hbrx#x~WuSS3W>fb%D zY#5rlt3#CaNr$~u`jeM`{Jkem`r1=Ry>r9yp0`dJnz$9~D>N34u0QLGUpecciC?+z z{#UNJ_~m-frp}>>Rde3Cd9?f4^Y8kCx9B(bc^Y1Q%F{6vF(`Ynp2(uN?ca0k*Y`W= zYvaGTYwK0d9Gvvb?iyNjZ$>oeuir86hZnY;d*ad8+;Q(qPnO;0ai2N_G1d&T(&)3t zUbZrF>zBT==J#VSeQ4r;eBToqiWr53WzQ|5Wq9wFzrC2LILqhz-L(gFJvw!Mv_w3p_giM_Mm2U0Cg0u+k zUmfz*yLWx#+@`BezV5ym>y`|7&KrsWMmlY+qA~f#abLXh_aC12ui)3e^v5-?ef}`d z6=w_~T@Z_z%J}EcZNIAX)eDTf%U*r?)K%*|=bkk*byrrjC0iHGn!WQMXRJT+seknU z{qZx7^3)EvXr7Pq$XOXsb5sb&H<5ZpGy26h9u4;VsB8Hb4xTxG+Z_-8!&A3c3|g{y z3Y1;H`06X3C@pV#?OUO?$)h?B{gvmK?R%v`wq2ON^XJ>{Df4*$`G?up{%&La#hX3H z?-hMkPP0DxdC`VbzkbrUM?AND_hHvO_LAr5y&~^w6Xs7m@|BM|PP}|=!$;jexbd9B zkM_*jJ*4(qtp3k?(aE>E?rf?#c=hsS;Hsq>%t zMgKV!fAjy!^U%=b-5nXx^Pl$D?SEB(?L_bhI?V@vt1o;UY`c-<-OZDM}<;+f|> zHhI*lzyI<6@e^;ou<1O{BYQ#KqNpdn`Q?XR`RE^ap7`bW`ZkaJ!356__ktP^1@!lc zY0duMJo_`>{a&E4F?igc+CF#B8c*-NLplzYEAg>cW_;#`qD>M1^v9d8KX3kG&#ey( zN#06BJ`UMGZTi7UC$!AFfARMw2;o2tGOcf-MJLw`9K`{{5dv zF74mp+4b;{ve5x=?&F8=*1 zb39dl-y;K_s$cE12u(ez=UZoO{n4}gfAx!JeRaF1QILP^6*25IiakY)73k<^ zE}F)ljy?IxudST__{wMeY5%x>PyFL^M>E^ekA6k6&u+vSxgzeqb$Ml?^A8Wb@c5Bu zz5K$fGv4*YJ_&cRZOUr@Y}G3#xo3QEd2IA^!NY&ubcg3l@3Bumu2b52H>WX3XP$GP z|JIAAwan?Qf9c(x?-t#0hUbIf@f1#Oqw|1mTRjvDb6)wA5!Iw0G0#7(d7VX5M3>zB* zp9PEkH%=&WRj|w(>@2j093*82QC?4!Q^p#`yp0n|T(7Y3+cnAp&m>3|rxJ@TD{y%S zELiwL7Jj#rg?QAE9uV*C6lZ8j7MqF1_?5(GoM9ZWaYC`{NM>=L#$pdoGDtSth|S%^ zW+XO$*!4Bc<^hcjJXz?02+8IQVpDx2E^8H=5VLtqW5Yh-2Q4JkcA|QesO|(6+Yn=_ zXEiGOvlfzaH&J#Ug-Z~rSsN#eaIIm=KWLOtTYE}FQht^w=V7m5;J1phjVb@CQJRm4 zNTQ2~=vPF9PYxU98z+o(oytVUzpS{np7hYEt~mx&A#4CK)mcn6PNQ-@yCZ2YC5fkE zOKV`vBuV==2iate);jn@QgLbeYe4lIP;qJQWQo%?D(gWro$48)I%Kk>+Raq6H7e_2 zBAu$k2dZ90^*N?GRHJe{6C+8lAmdzqT6)4Op);<-h_NmM`9-W0a9ygtcBtmIAl)kCa zm%@3xV7Cj5i>VR|CI#z1Go<=oW{i2oWu*IBHY9va$&fD~8C}bHFUq_~EEQ^sg;L>= zFV)->ibj$t2)mwfYOZ$~AjeU&(Lg-53h*0A32Fv3CGxc(tOU8T%y@fZGh`S>f2lD6 zGFg{&Q#_su#skfbA!H4ZM!Q@_vAYcMl zPDhgI=2$2h@FhZ;#1crXnbaJO$7<7wRFh#GRBF5nQt7mGFp~87qoH)nw<=Q01(r_6 zn`6PG@Fa_y0v-=e3e@>P-c$UUQe#VNwzX$lIt$a;T`6|g;M_zikq$&dzF2c2UE36I zPQad9IPXc3hvM-20uAX_SxTUtvan)fgpx;ZWKii3L;fxW7IWfCni!*rW+YF*U*>7WUYNvw_rxml@y9 zH836U#R8!yeuQOEk!Xm*kfMVlC8+tq1Hun9 zLL4)U;)%o(&8c((0h~zbfiMH=eRL%omfYCihdq(56xLgz!Z%p;10Uf$NR1(|W!AS? zySNPK<`@@CDxSsxaZP$qQ>1?I0yCgOOQuk(lVJUAvb*L8qXWx8t$4m*HA-+aH9bc% z<4G^N3=2QKD%2DSM?yi0qSTs1$hXQDiBg0MMqKz)A?a&~qz0UTEg~%hc10t}i?3+T zSdDrYNGIZn=0u|}=Bo{fI&TKi2=IA&5)KY;UY(?>HEbb*WTBE3j!sF^vPXMof+xID%-@P-a~C4r&P-7mh_J z@a|^e`+>1&!^k;W8&L+S<0EG>g7PYLw>(LydD12z% zz<}Cv&Z9Qr`FYVq9K{~>;aqRB_8xY^-zO$S>pjrV1^YWqXVDy>as}$_Z47zuY*)7Z zv`o5>o60n*F&aKuhoN06=4%Y0PEcKzDwG;0=U}NGLUe%^b`bAUNpQr0W*Nd!%}tTi8mi;I2pnd1MH3-oa1yonOBZ7XP-@Jw^AF&R&`1cjPzOe} zi|r^kir?$y#)T?cN2ZJF83$D@P>Ls-QQh0Ru~)S`G0LLho`^?nY{--}HY_uqnwPef z&ldqLHBPeoEEtN0Qm9~!{!o+VU39JQT3V^<&&;Vtl^IV?N~qd*FDdhpz@`S$u4bt* z!|sM)qzSP`O^4=%nb7P2J6@A-wQ5W>#92UGWJgSfnh=KQ*$cNkOVN^<-rC~~giRD3 z!VkGD4a0-B{wkLdY3skyVTz=$?Tc}ZsMjVY=nep(X)uQ)474=b6rQ{l_N_t%y z2?lM}I4)23T4vnFeN!SHkD{IpaskXiMDj>2*=&x}{+&yBma5q(TG4Wvb(-3_m$V8= zK1(NKk#N{vAB%uD!wmVHNFNWCZ~O{(8MV>4-xrN1Qt41#dX+EQj7n+@+)p7f?Jxtb zj<#g`LbO9?>?j$H=c@)zWcBx(%tH;;0hAdpObo7$H=!LVFEy&{1)OO1V~|-FYRcEC zEP|?j;oCqk6wp0O*3MDRNQI6=wKF|I79L<)h&EKV7-nsr0EEeQJpxf*G8u`Xhm1xo z3bQ8f2d_Lov00S(?Bb20>y$N`drq1d7Soj89RK8dJxEr6S`8>O)={5A{UwjO!@fWW zy;m~O6iKAw)b;fd%cW*7?dYTrR@SR_QS-nk80fJZ$m0}_1k2y$)IjDdUqA?LQoNR_hSy?Z;G!b z3pGj9AHA+&svgOYvAc#g3emGl8@CsjAeI`3JR(N|DoD~afYTy{W=}tulvow#L5&!% z{Yz6IjLDKdT%8X5UrlUI*3m%Im{V%}MMK8GCLT-Y9oLP8VSmz4n?e}gMNnMSz^w`$ zC##-jBNg#fdlA#n3I3v%O|&rR*38n~ADUe~7bS`gBgvCwv^IvFK~qTdQ1*I&!<1-J zZ$_tm9e~4=CaxE*A$91H^O}nLTH(B0_tC) z@B+<4tXV|#UX6*>&JL^un!KhNPMuD)kw?#=eB=I7jM~;30qia`(<@P{FjDq_?iE7l$He@C0cvvmVdhWMS*W%>I2%QMI~} z3PrI{L^E2Rt7y@@KTMnXh-`QwF^nA0xLDmYIqxCFBuY|7CFDHHa>^kmk!(gc81^+s z(Wld>hr^!w`*rr=t>o;Z8emQxMgVVrhclwdNDylZ+{DCE5hgGr;s6l1>;ybfQ?=AF zRii`SuD36|2)+Rt?)(Q^@lVZLShGX7j)t)*jV3%TXW-VN$$k+35oYMxbQ^^iqZu33 z98*oVQT&D&hTB4b>+MoVEi;-Cj~Gk@#cClp^TxnAtkBsMzA5SwX%xos%TAqZ6w_j~ z)$my_8OnhQEni~{?Ap?bz@zyaTKs>Y?5yS_UDpt86itdOs4}Ai1Dm17HMD^u1k0Tk zZe3`nrPMggULL5&Nwk90q{w+zp3Z$f^t=gnBC1krl8F$lx&D~Bwc5i*Og+O`!l1!{ z893Br2V`wc2J*~`OO1E5a!n?q&BtjmKiMdz z6MocYnbfxbLldH^S~OJa!;pqrR`i?Pxmgi36-32$huH$yY>&~4nBhdNkJnDb<1A`8 znlKZwFspz$_Yql{Q3RMCYjv5tcA%XP8ieE41Tpb+hVX3Q)|>5Nj)!TG^s;6=npV_7 z1g#h-phwroAvpZ-5+0K29at$x>x&byw2R49A393AYLVtxLkvB3z9H&?5Z_{tl-dwF zOj;W;gM`*iM%sC5gMhrArlI(&npu7fT~5+yurV%IX^O{~YZKZ4VKs+w z{qNN}`szImRA?RPDO$;s>oPw9aWUBF3f1`BXNph0WkXpOQ$IRKIFSbd-fyv_1H8i88s z^r;1AS>)b}geIubw5o$#rAe_dK(RdoWiu~NoQpUOzSY^g*6x(8r`ezKd!-a?J zy1J>C>?@{SKEVV#A$fKOnGx*{mKp7^22~Q{OF5{03gA-XcFmjEkik+pO;a_OlBE;v z!Jr0XGUBvmd@=+bj^cwLEP&IZpqL371HWJ;o}if%xl-RtO0S~bvm+Sc*{?A%*0`jW z&oKCB@PfWrh~YJy&&><%p2=xl2&?j`CUhLs(r_`-?Cw^}LTh+xMhta^AyLp67Uy&q zl>MQ7;Dm)PnjRv);>{R!Y1Y%|ai-l>v|WJBJ6eX;JH|P{oM?uRnl)f&P_M5e`x_oI{26D;McEXIF08d{8xaN z8fVYJV9uN-Hu~!6ZlM^kvli4KMSm}wYFgkx-yX)&2sAb4V^k{_+BM~Y4Q*ZWwiVS< zbI`B^*yBv!gqtGh`=TgRvymi`F)1>191U}#VRYcNG^ksL zihcY$4Op8H4X7nNh{ju<15{5;hp$60VT>Dr3ske>CVl4ES*wC*PVi95X5U;C!?!0T zBWpuxtZf`rW^`g4o7lrZ_SakzRj5`}r%{6e~>eH-wgx!y_Vxy4qj(Vs&m}jR@p64onh6?+jT5KI+6#vz>DPeAv z(4Iu``=thL(8}FEUT|H@)-JFMp{)x zh#ei#rl3i~vk+EgpbfsUrmHc%jK?BqKM_1yh2WMz6|5LMqdtVO41*nRZSXL{C_YU* z0>B$A+WO)jAwsQJs_8&uL%vxz?e%_dZhDW+IEM0e^K6CE6cRi7W`#c(r&Sy7;(mIN z7OzDbR%-n513_Bx-}i5y2ljbjp9l7NV4nx}d0?Lh_IY5R2lm>Sigz8uM-H@ z1A&rf%FF;~LYQj_%XRG+cRwdkNdrnw5*gE2H&;pAee+1Nl{KW~)cCA{;t8_{;Q!h#uO3oD- zvADaOGd^Af5Y52N5R8JTpA`1i;Tbjxfq`298?2kOd*|T@gu{3F4c{*R$_B#z8gk%u zq=!}XEb*H{VgeFlO5(RjVvHqjheRJF`c@uG67LieksiLpK_PJ!B&L+a?~ugQq?`O~ znJ3Y$b_56%vsizQm`6#Ep=+UP*k0B(8TzY$u7&3W-P$U*d0t#4bqe zP!eAti5;56!_O%?Wx%3aLmBU+SwuYCoiAmDE3y)T|?3HEAByMv^JcA_uO-Mv~_!8d}61PL**-GO3B=Kxb;^F7afoJEe+(A<5^LJaWA@xQjbtOr?k)`?|)oN#N zA*n|SsYnlBs$WR`I;7sNq|)eZ@OHfo+7&<#7FhWWk{T3Jk(N@qGatAb6)5iRn#>(K zb?*Z&7Xk9|x^SlZ>SPY;HB-ah)lMry?JB&rU zcg!jqwQ!fO0SMOs0l5Q}5MQ&)H+Vddn(^B_b@xu4V)lqdySEn?AA)U2j073240Oiq z!*_TL-ww~pwNt_ET5vl)lJb@z4@Pc@2X_jW3thmlFv97@*g-afbq2+jD-kTDXwhKi=tEE+;71H>wt zQ^=4D4A$}@$ zilRB&Su`IZlZ*+=qS*-qDw#9M7>VsD8A7p_%nmZdz+1^M1nJ=$awK@bkn^X8WlMGx z0HofDXh~~!lu(j3K;iBv)sUlw%+H!K-G@xGTGh&Fu-_fhAfIE1j&s5OPMk{^qT@_C zlyJ7sv^XEg5S{avb8rqj+)4ElhUiqk%z=D&K2aS#+mbc$2&aYz=0L{b;fmq(AJ;5o zfB$1n*!#{L@7r^v*RKV*^1V4pxZ7w*6;-}Jhf?$xT=CwV%74v)>#qaO;M;R{`3K*@ z1$mxPZkjCqlQOSICSn2U;m5+*MXcMD^00SOxp!i@)NLHV75kMBPAsQM>P}WjYw7MCgfktG zRME=m<&`taaXXXPkTjYmP9?}JLU30iEv<9^>>#VWp2f#KhEo>b!bdd_`@fhQ_C7UN z8aoKs;8Syj2?y^YOI!v|0MJdA@Zmff#v2>-mq9qSS1W{&ai$PAt)ULkdZJuey@HcZ&f~WEd(|JaQ3io)V9tqL;15)Xz2C1U zw-0{5dY7M;DPgoR$GqbNK={%>p2MVsVU!qS7VYvQfiK|@MF8J^p~cMys}T+Ya`3>AMux~?2}2ISAkL0c#Sk5*D+lKchR6XA z^Z9NL&OdT+Mio0{H86x%!mnf#ZbL5&eIVUUN&W_isUAa~#6o}EeOQL^81ii%M=_JD zn8_;}IFljQFyyUMEXef?+0@C9j?TE7k{((9H*n_cF3xnHiiL9|2OhT6q!n-|bSfi+ zfk4R$NqsA4zSc{bAFq2Nnt|s)j;3OAHth9eWrh6}V1u5lSY4+P2Zqr*j9JU4Wyw9i zMsCHsYwt%#KCqB>Km_Jao^;dTV@eiS&jX7_C)r9t^&6skqnD|cDJrpHBPnR@6oa_w zMEwG#-Id@ptbrL@_BwdLvRSa~z^r$MGVV_R56;LnZeDiqz5 z)C{r8D;u(vf;vppABoBwcT%&lin5j|D;tPQ9i`os;5d9^j|C4DPN~*1JX-i?4SWgU9C@+nOC*lMkANIyZs_4;Ad3Zpw8*HaoZ>ACw$(FK8-0Q_2l70mD86!**u9 z+m&t40z9}q*S61Q2Y2R!CZWzRK~wR*DEZ?_d4VZPUhtCUqifzp20TXw6s`Pxw(_&= zvtJR1QCX`~Ck|A;M9pqcl)q-m%Fh#*=PB*31V`xx@l?hW=qlsx3xR5Hos=8L8<23HupC?nZJf zRNSs{6E_&w()ZPc3{F(W-SowD4RW|CQP2#`97Dzs({ZNVbO%!U+&PnCBTL>a5U2yx zUc}w>L32i+Pm?pXn^W{q3w`rj$c44y22lErI78`s}`V@C8lTgQWq~c$qtNWbeR3454p@GcSfw#fRx=6BtGx z^H#S5>o|`-&&_!PX`q#%O#CL#sOS^g7Q?p~CJU9ZK41tvkc3Cf=zH0WOp`)!GjL-G z=^#lY>^6o0iS&^$4@adPZwABcc$InZ7U#ih%!9W&58jD+@HXVZJ0}m``3xiD5z+Lm zZ#IY?jS@F_PKq)Sne-)Z&ZPSZaW{P(oA2o(+;KPgi&L(Y=__&H$C-p9?osunkHkH1 zS1W!f0_iNle}D!ICV_-)H%koa(Z{qkJ;W^@B$RB#{lKkyU6!!r%$m%>Y?i*C&1~o+ z*Xnkn$!?E<%Xm!G#|&OtWO(JIG0LHQYgQbi!$g+wK>1A|1U*rwk zfnSX02$lBuh&2ygh>ie)AN5JJCiQts5>40-7d$Tnlzng!5|tzf^7*MViSPwNa98r( z@O?nN4ScW!{KMWwxOx}hB7JZPG6(4%J`g{7e6Rxfu!1@%@&P^1n8ydiTKRw{qT~m` zQ~80qGzlUh>i$S{I zy>odreqiA>go@v5@k^H8jNckO^eV8(n&mYD^E!!ny};xUKSpHT08pwJTy8|7lJMEc zo9K?@Q0!2^OLUR}Bl%7ZROkuhDIc>U6U}tkNgt@kQ&hNm&%s3)JEMZW3e5wkHmawT zErw8pV-2Ft!(H5U0QBM1u$)ec%!VQtfLGXiKCVKCITiF_7S>?{=|DM_a!BUX zuq7V?$@J}fJYJ3 zAYjBstSk^OVF@u5DdK9`bR+KKuBEVvQ^U6DDA;s6c!j;U;_AJHE;r#K^gp_SJ|fQg z_mcjEBXlK1p%-CWdfkD$xa%0`#i?QIg%8GE}4gmU2u`nWhN zw}q4=M4=pEixiOvHxr$u<~_KJyK12(r-rR&6l&5L2Vw7baP{7ci%_nyf<8OS%AH2a zQMT|G;aG~?kGr@l21PhEY(is!go}|kYbomJ`Le~uy^idkt^*qv*u!XKfB0`Jk zM2d)o*2KZm`j@ziyEZ~=P7Pb@9%%gs@Cti>hpYDmy8MPNzoyG`xCpIJt)MS=vDO!m z)`TszCK8b%I-xZY3$2NRrS(g=i@SQEHK&HH_36<1uizE-zKN^%&vf|{U0$Qht8{r8 z7oqwY74&suR{aa4I*|y4iB6=5Sg1}M1dP}SBZ!w}#NTj-S94$lr-p3=k9J`Q9kLPj zeh9AKf6?VVy8MGK@6hFKT!bM5Gz_kw&&gQE5SdVyXhn(`2xEwgfDtQU4Dqv!aX~mn zCA-CVgYSlK5Digb5S{-K_Kv~TJDM(~bQwvPV!F6-kp^8%2GRF#*q|>{=@6MvnP^3d z7zl%ii+~ZU9lM%$>>4C~mOPOJ343Sa>OBA#sT7T7E9i4|mQsWwlp;J!sX4fVQuK-u zl;XSLEAkH|!dXf2fw z!yQ!qmQb1RhOhFyLS;HBChT2^tG9|S^XYOpE>h(|Qkgy?%PR9=g^-2HL?Kc{CR8R` zOXVfFgUa6#D)Zg&RsMlcnNFw)dym4^yOJ);>9Q0TsqzD)GJU3sRlb_MOvvJ~SfUUr z6PZX6t)+4`?x6C6LS?>_D)XzE0}mskvB)*IWR~G_jdi(Pb4rYKW6Rb+cYjwOzBp^p zIUBBnT&`JwC;RC0_X0HFf+}O(Ba2*Dlq%ZG@cEZ~w3h;&>}|DZM=IKeNs6{^lCjZ3 zC{qZ>nh3G{2&+wm6d~*)jf)M}z!=5hL=#~xBe*2OScTAPBAh(Q=*go)yNR$qKSH;O z(2*Zuvx$(+k8p;Guq{8r4in+*{0Qfn2)ia3?esw);fHa`%nMC~3nm%;z)+sTo4leR zFEKGLo@8`bEKE;bVIo`x7Qj#}OlMzfVq8UP?xJ9!(wLxR++rf!$fc2k@C_5;_WXvf zovK1+^;E;(-e>CRak-iS!CBH)8G2Z*%YFP*qfg?}$qp_L;&z?MD4oOT#6pZ(^DsKa zWVAsr!sr^1)M%4r1Y8$Yu}RRV*JRY4!>F?mqih~Vr`YaHa#t<$8W^xV&a^c?IY=p|z{Or?$7dzbDYr)tc#0Y8bnV zMWhYPV%{&=kuA{&aQ5%_M)aGe=r`sXzSh3>&HVK(`p9BtD}1Rep2I9(-y4>1n=Iej z8}#=~^mq3L-I%8e=!3aNu%n}{r3>eTSc*~+yIk+@4XcqRtD<>ExV;N!Z=WWtm*s9b zyn@Yl&D)ER7;SPb*&Fn6CVJW4pg&lxqW$~T##XD!a7~+@oyk>Wn)r21$<8v|+|PTm z2D7Q-Z}Qe3GHk(BfB>vk2nW}B1;D$0cxsh_6=a@{FN~Vh>)A=UT z!xU)_(@K?7h-tNCdbId;tu&b~Q=|pdX^@l=Nf|aN16hMU;N8-S6S<9ZsGD;eu2Wqu zUoOXEbg!+J9GfM_CX-{l0LR85IIfo*Tk%WfaFWUKcu;ot_qJ-GPP({UYqADT?&w4K z_TdCw%l4?Q=@!X1EBSVrd^Z*1+iv5V#7BtrmUV+Iw}8|EDfKMz>pI<(x^)OYd|pz1 zR_eRUq}-_}wa^ic*sgN4(6JR)1t#@eL0t2YQdOfIX#*dL?e3*R3a#;l>~3h2Ne~^b z5z+3IK_6z;eL_1}MrWq8yLX%A5YgpuC8K>B!D^|-iZ+3ASkWfX9#|FCC{}LT7ZFU4 zK}s1#+b(pHgssM(tRkWq9UbjbsHS8WVMpjZ`t>+nzNW)&)(wB~YMLstW^>%{a$RL*T6A>whs*U<=HAk^p}%EA z1|MWrEzTU5>vGD^fgZpIPpf088O+ zF8f;u8>l#Z1nta*9Q|(EI|XRXUny`GkqF;e(nwX8>rN|6y44(o2)}<*h%=8vW`C$* zB3%D(CWwKE8MFc+w)i;`#l&JWX3fEPQwG_|mGo;`<{a zp@R(c6QNDEXLE_sioV2g)P{#CXHS;W!hhk$z>FqZQCAv0O(d&YI{LNFNt7k6){C6n z8ba&$7&GI8uiKm@_ylK>i9x*(enMa~UY*T?sTwVtE7fQTKEGd`X0VSS0*stTXyVx+bAq1z!^moL~3(NcX*MH8_{YxjA~ zc$vUMn?cLq%8U<*q_7#Z>OQm?v?5>73|gcwUk@9XbLV9J^4Gj@#R+1_?zfZz9Vxo8c4FD#;!b7c{&wde5- zExhjqCtB`SoM?eO4<}kJ-wRH(My)u}s&*buw8Xs^oM`D-aiRt2{FR#)q-~X3>mF!{ zx)R7<`|amI3kh-e}i^9{jqDzrIyA+C9NQ zn}#(TqimeZ<0d%n4YHB83Ycry@u37@^>j2dynTd6Y;Vbn*<# z1CJt&$7l^+Zo*v?JX*R>OZS^;_XMIHJs@l&e7Cf1qQ-NQ2A`zCdo=hI1+O20FE0#` zJG6g=J{aCyAfu+n_?z(Yev0p*h4}KJrp$;^pyaaIU(p>?h|YfAxzI#E0^QPKhT(=94hCT3fG@kE+0h5=f%-U34EkzvpAj52DD_)R{X+w`RN~GH;)Lj zdsTrgp5=pDjQM1ZviT#YxD8|E;kbA5OXcG?@PMIn zTt%A07@;+-hnAwf!x|}DL5q|VY^$9DPHUUfY;eaasPqDrz-*%l6IQGON*T0Dc}SjR zOtOlW@T&4J^RYf&(o?6DJyt%@|^w9Qouq=!el=>0i^ zR=_Fx>6c=n3cM*=7T{O4P}Is5%hqI(1!sC%t0Q{)CHf_F4|+OePN!F`^e}y>>96Q$ZH#=-DCuH~PU2F&vQ^a~YeqU8gkRFj(!a<^O8k_YT zS9sD#qOLmm78x5Qe!IdicX_Z$#I5UW{LK2yUf_uE*;Rq>J#lb!AEHP0v#>ctZXqU zZ={x&>|ZCcWh+bhC0c%>x4W;q6>YedkK@ctU3naWQW%Bmm4zqNzfpTQRC~x$nCkM- zc#@(>MS(r?ij98h{mshzvKFbxvr5WsY?Zj%^5NPd%x#=5anDe=`NwO8j+|{y7sx?; z@wn?O#aFX&Hf*IoTFSBXE;a_FF54ANZ;{7MJwL7Fwb6l%4EotxU?-Y|^-hQB7d^Yk*#T;aF3q}&uTa!MY zVcy8ZzcEH3ucN!(Q+Z5xc}9R<#SF)qytm3>gmErpQERvxzua=>qeC3oV|0XZzNGuC zqFb1^wTk1c?5Ho1z%f|OY3s&nkv^yBXX42QO<%p0r1c|9=aI&RQualP7H=YnQW5N( z8$+ArXtoR<0LXnYv{L_O8=BGiJdl5;Aj>rwN;M~NYrr@xt{twZ6*x5_lneF?Jn zGWxPWVU(_r(Hr@g~uh zl}H%Q_lgHYbOK^?Odj{fyf7bT9i#H-_)uGqwG3|SuR&?k8MQ2pX65mifwtZbLDec7c(O?KO6rI- zadaIHvJBMG`GHbHjPOIgRC7}(?Koau=DW>&@?W|RCv``OoGd7^=kb}YDzDhgLv_hH ztXM^llD#_Qj|Xt7X`(sN=!@YzPd?m_WQ;WVSf>LMyu^g(JNixV$C0+uw)`i^6Q5Bg zjyibS4--YHjyChuNy}oYS$uzE~2xPAAK_zpNiJ$WM{Wt;G z-xOb+q^J>PHrdP<$B2_2Q%smDYw2Eue>xd&js=r!|I{43Jg0+8z4tS5^B+S`a;KR% zIKz@$Ds|l7ge!egp(xHdwT>PXwoEti!l97VafS)wLqu^#YNDA5apq%E@;|`D;iF-( z=GGibA+O9|GUY(o5?m)+0-UjmQVykLWJGbEsB97P@L4!yvu~@kZ-q7yY11n`u2@gaP zR4E$L;bxq8O&Y-ifYC9u$z&Qw^F}cKBRH%EJQm7xt~YA~FCaf24d$Nvtvo{Xw!>zL zFT4VHs;LieO8;6(r z{P8A=Ba&Mx?LiG}LgO1(aCnvUM7&CPx;c_ggqm0h^fqPTk}3F%0ry5XQ4B)8U^E?} zr*-=}N z1SMwW1##4DijHvhhnl3NC^;)1Lr^LMRnt&vwmdbC5uLd36k^%JQRm)UF>U2VVygM) zh(SqNc_JD1QIjwALY!OqjWUksm+-15jrMMnacm;VNH*^&mfCO7u? zwRLa78n%e)a5o-WYcru#XE3gC%aZ)MkfpMD9L@DchdAmEpU5k1R#F&7r~M*sRSUu} z>sWZ{xgv3*FYhIghQ;DO5cH*dI2>6FZA>o1{CrPy! zRfo^oZfX`xRs1uKI<1|(G|GO;Fqh(JJ4~DmF7+yNBbfW9dd zj5NtiNn5Pb`f)Nf4clVTII0`UM3m+T9Y>9et8wH~9NqrbrW3F&B-Uk|j>BrG)7~vak~dz*V}B*rU|fZESwt4$Owe&)za2yPXrhk8 ze3}zx3Cr^H=r|%*%K4As&K z5BB*?9Y@q`aw6+KOV4Zatv1z=p05tg zruJX*Kggcnh*cpBc;nGXfZFmvD6$G&qQsqR$Bj2cLg}P+9zEMSFCPwCHO#eyZ=`=K z3gQVPl+1$*;>kn5rEZ55#Dml5#CC~SSr8BV^vOCdlS2#QP-|J+t8`p$->C95#iO!}7TEIX(E?k&QjH<|Vxf-9K^!_Rg%j-~F^o+ceJNBxj*mq; zUZUBLDN!BTNwak(8y4$0RFR{;H8d`?uteLiM91R^Db4J8=4OuLmfCPaO=z+(@O3u# zg5NS5ZY&ZGW1L-}|5&c$E?w-8@HDX&OA$#t6Hqc`xg1H{DMk`jqbbIT*1a4jnmfV+ z>x$J#v4QsF!m&s&9qGa&OEQ98h6NAzW-W9M0+ zhsTL0^w%GTW`2`2Jn~mR9^vnzVz+OcGVWvzm;AOT+$kC^>q#4L(uS#89%NFEEMj5f zep)`2u`_>~mfw_V;XOSSzx!)>t9#q~GMe1!S{|3FmN!Go^R4UdWvNo%1GKzwM}Kys zMt7i=hkZj+9V)At_B=}+8Hcm9e9NEVUObN^H?xI5X4~;+`H4924 zo3Stx_BBVwwe`I}QY+-kb*mq#Nzt(OSy)g}(@)fyTw`Bz4Cnf3dk=vI^eBaBhv#4EHfw z9TbwWf0#-~7ILW-ae6VQiz(eC(jz#%oZ%xW9azKZ5=vtltY(O%bnj25)JoMT&R6;i zd7}x28HCzJD`OfwGAi{ML-(tEO%b0p;vP#dH5itqI*wqN`9vDwa|xS3u*d?|Z6ed) zM&^0M{X%s=N!%}1_mi1c*f>SxEmwI{InUB(KamfBuxT3IuZrWX5^=vj-D6mrq$(}t zPbU~=8tQ%q-P1y*uc^r=%jN)r1q6WF!vpD_c0JHML}Jz`bSA;03344~2-d8CLhl-a(HJ#_;hwa`M=%T!{qo*V_Yf5FH8SsjxQ{ns zlS|nav~VySlp8S84aOmYNe1G+e!qV^IMumz|wR z4@pXR;bCTDI`qop&A2JOyVphB;Gbl$XJsl;-JCu0xB1#V{K$_r{Nzrl!{% z*{3>1i1&jBm*Huswm$IV@>Hq$(@Uo4(xeVk5fV6IK2E)vC>=j#g8SZFTku#}-G z&E%4aRSIY7p+(w;SXU|q;pC5>X!5W+#+Nq+bjQl@%%Lqd5gn?eoPD-Z=`yxb=`45H zP^HU4f@xFKTUh1IUYn?e25vswz7k{6Dl8e&FZs1C=mRcIzLlz)T!xoD7^ch2hj@Or zM-RNRKDerKBI0+I7)fegy4bfAFLI@%96MW*&UH3)Rk|Nm)l6x#M-N?V9z(5}T2sFe z%d;EDE^e4Ow*ei$nuglyaWzNR*3~qkDm9m_`V2U(TDRQMow`Lwbd+};%4(L=Gr$Yb z@jCXRD5tnmy7}@R9zMV&2x^7{E8|qJf&mxvN?0$XVu_nB@5bC3g%xoIUfz5HRy!(1W^(Zuu>QLwhWi`a5 z9KfjeSl77y%E}oP<>T>=)kI}%udCA7l3+^1v0BhccP0~beMocC-PsWpYto%`Oh-*X z$ftI#+%)AP;vw2ETRVBG!I9QDGu&nmto)Te(^E=AC7e=F-AjLIle^mJkZI$m&Ok@G zyhKe#s~!%y2Q8Jy=CP`*xC-uzwn^S!iF9c?Ur(qaDq>|2CxW$v>2diCG)`VCorlH; z?TwmMYwe~Xl4AbDX_MPHbc&{M`bHLJICL^}9!eQiYkVcvNlbF`+Uh(kRZ_1AbP2RG z>H2*Hyq*zV=VzLHg;&MUrq&YDF73TM1w#372ZJYr8Atw(o^L4ky#G;r+1bNr2(qbfx|BVf_dfzNecV(yZwX!o%4izj+DUA9PQ?bp zRK*ALtUb#8!eOd2_CwE&%L&wbjurUT=EHH; z4>(@##T!@Y^a@+~aLP*@ja&QD%PKK#Ei1j9i2SnBl0>n>LA{EWk*qg`mLKC-yJAKK zm#YpLAr=f+`gxcdzXs(Qt+B2N_*zE6k2t{M=-ILEtBNl&jdk^dw(i-kb;n^jBcV8E zcUpKijU#S8h%`aVO-E5lvRFIKq_d1*?s9=oH|Zsl%klcCq!J+&{_VyMmmXJBh<|WZ zGspj1l?D!g@>b`G7Q_CMj?F4Xd>LqHPecnXX?lpLeL|&8E*m!uuY9%SDh)lE@l%V7 zT<=E9EcmYPYPx8hC4Fp}yaEs{(JD(?QE5q$6HVIav}scqy_Mf(=rpRzvf`H>)btId zDJ@4jPP?t1s44m-?zc42o=(rsDlZu~xuQg>AeIMUjKFyU(F*H{{dwaL)8*$+NB^p{ zWU^xkf8MyMMa9nOAM1&I^soXB9Ts`5A^fnW*q4u$3T~eW>xzAOoGyYmf`|3RzC2JZ zD|W5r&%^Wp)Kiw+x!Rwn>K#U(1!kqw+pwx1N@m+&-6W~B@(9P9Dry>*)ie~<*JFbX z^^$e8Uf$%ta@cam!#+8zS`U^VPDl+a*VCK$|RQXaZ@O^?j zlwt6YyrJ2izahi&BO`_k&mTG5lZe|Pd3hs7jKFp1hyx;$cN9AMJ9k2Z;I)HiRYd-{ zz5Ug%-#GcEi(b7mCtUIH4>;ziYx_19^FH_-N9Aexy!K`itvxW_4DC8AJ7}8|t{q_J z#=#X@oeRBoC)~utEUS)%qwC$O-9RGLD@Brb~h12$D?#S0HEBEjw;B*-_vmBt=zeb8?D^p zxy!2a^9I#J@Z93XEg@bzXXfHL#~j^IQ?eaK7oEAeVn_F_&%X0Y-_WHg(TxCx zO!_}RU-^DpYt^H7AJA^u$YWm(U6zu}?1dtLHRSz$%m3K6txs9@6T`Y!9TB=bC8kG! zrTEzCXrXh*-K{VEczCOQdVTq=b>^>69ueBSJ9KE#>Lo(x4g26(z5o7nx3kvtJL})u ziv9>)*&HEO`^LG;s^+3lu`vNf6Dp4%|6=sHc3ZDG>Dm`Z7DRrT5xOE3m3Run-m2?= z!@WvF%n;7|PfKjZY_v(Nkd{6Ofc&Z%&hqY~FGIeJiS-9m(z z=l=0*``MwhzTD@g>KD%IzF$e`t}e|GV1R04||4UsjwU8E`Z0vQ-yo0f81Vv_Shj`{{8Al zpRb$KuP}5^bNDQ(nibXcs+uh8{Ko3{rf>e~sKUEfM2~&tz0j+vaAEM-4JsxNYSr%3 zzrH+bP|c1uPrmlT`EQ3_ONG2_w(HtI6t21IiT7- zZM*Wx-lLY@o0<2;s1t7s)pbju!Mvrla~<1RZ$0tT?a$QifBec9pS+m0O|%zM5zC3F8iul~`q?1_(-jDF+f(D;<-i|dIl*e`s2;$QDOdjG+%-Wc0A z|Efbj4XxR4*O(6#^uj*3jkaIE{PA}V`(?rG;C4H7Q1-5&M+ALkN&iiM+dSm>b0(co z-~XT2Ee*ZUI|cfJC5z}ds-gxvo%u$G=lT@BJ$PjA(N9-g8v3z0uhTADrz%>XmH+q6 z;H-y>dmMe-C;vHZ|Ju+4qf@X(h>)FUMe=E1etPWV!?Qi;G76U;QO*?%Fc!lhO}9`62Z2ywuor3sqSkIpCv=e{XyG zf#;9B{-pzdyy}S1H^-z#u3lUxI+q@O;yD+d_-L04@4fHii_YG5aA?7z)W}XaU$m@U zaOeockk7NPb?~W|MGq6p6q@=s5m8hU7gZ-RO{uH*(U`)Y5Q)kid8)h zdNj1XA%)oJt6=rwJXKoPU3cN8zzLo1cnC?0@l{8*Vvy>ZM0raqr%9hDSrE zq#}Tx&fIDhOm3Ne&LtoGaoq3YZa(+Z8QV`E5W47u6xW#?80h^!s zD8vKAQ=`|-RqA&c_3_Syvo;+*Y3JgHu3kUzpb$?NPl3MNw12s09(6NSGA)Y;+0v$6Tb<0&fyZhj7KcAXWdFpGgEL|V|Zp@n@9u1xXeeuE?)$$+rZN<5x z-^e)kgu4!yy=8gM4Iv&_o(g%+F|~8m`1HM1>!0b?_Rt?by{}W38_t+|N{C0Cr$V3Y zV0ZcY{6|0D`SWeF&i{4EveplE4)F~1RM=Q)zI2Hi*6j6<)hFHmz}U%?$4&oy?%(d3 z5#nj-sqr25Q$F7Nq^r^vl#J>5?6fOS8FWC12c)M!uV$A|qQ&P69y)U7?7mwr$k}th zMZewjTkjws`|w^N9`T+6 zduhYMMY>J8I_I6o-?;Clb5>o@>V;DtKKGIkPl8W@4$12s%a8eY-|-cp$FDhK=v%*? z5sQrvJ@Zvcd<3J~#nnrc{KZ|aZq+{g*k|_WtLo4G;NxB)o~ho905Vj;1i&2CAnzF8 z{lNNLPh9cT*1ax1=fsQGgm?ry(06;v3R8n>5|Gmy*mqHiX7Y0#j=JRffZT>UVv0p*;f+}pJ#}8?o%6ea?;30pz zWAX2&fA`IyFZVvBI`oZV(Ny1ukp!U(OYBrxp7!$orD-!Z4%+LV-7BwoYSTlZRh$jn z?LdeC{b|Elr#;q@=fd+?p{kO`DN7eFENd9Qs2(3?YzVYU z&$go612VeL2>d*Z4KlKy%nMi@>-k=*V#%Va3Us!(5gooR!of?mjq_{fmcr1$O~c!> z=)Z{@8jqjhc)=CDHZZYsTH1>J1FsASd^#Y|@luD3^MMs{i^|7ZYuj+GaP%dj&nU&u zs4n>V&6?O5%J&65~Uun+lXA*iXqt`P4zFoR2Zq+^V953l~>cl`Z38d}4;zsmIwB z_z8ByPZyXWkT%&4?lB;dr0|HM&-_qm+%4_Q8Vq(Cdz*ou9Lyp1E8GGXA z#q^1tgRNk$UIPN4^YY*TJtENYLWdZOM!x&vR&?45ooMiVR^#X9o;VZ-GPHs#^cWCW zPj3jaSOXoeaVRK#s18nJffci(1BgFh4Sq)Mji25@P-qJZ&kjzzab%$VA3&!RK^8}V zHVx1?0V){m_@+a5EQ)AJjW(B0w2h~M>TB2@r;z4pOL~+h(D6eTR~_l*xaU9$6#E-~ zI_-y_b#%|PVkwugsPKV~C1{vfIFr=Jk*rXF8$`5`XX57)qTQ1=zjH?BSUWJ;PVX_G z-Me{#QA9q0KPU6&YyQxY1N6-Rr9rW|q~-fcO*)UH|8hBgX69Jd{P{3(j{(7dVY~O> zYKLBsg%s#m<`Sq_GP{8_R)iA@qpt*or$Hh52ex(%w1bh;2e5YZ7?8F~3M-BztsCfA z=^?oo$4DxQLn+f&*W%~C-uO8Q6oZf|Eslhes>&sytEvcf07;y31AbQb!OwB6=67xd zp@KaIw1@A!G9c~k0YP|B97RT#K*wWTicVEFB#(R;)IQ!HKd+~|Br}C%uxXO%EB3c4 zme($+o?p3Gc_~zF$C5n`wItJetFPJY5s8-}F@4nltfFqj%4r87C#jHG|xg&(0{PrwYT zGsviI=X_i92@{+>nI25XEb$wRa9a*8@>Q4 z;;uvd49K(jr2ZN!x*ePZ3r81Ni~C{)Io1nK89TnJ3PxWl+`78Ts$Iu?n+zI_+kik} z*J=19WP*I+WA)Coru~SO==c~K8(PSB8CaiRF?MQ6Ilq0eqTPl3PayB?z=pM4{4l~< zPs}d_^-g3`fFkG~;BynY;*-h_Ep@&hw4$;fsr5)#EQAK>`t*}BtmV~>)%7c@8lfML zY>0BR>P(9#43*25lI11%!eTsI(q#}N(~9*e=N9_jegBcSQu1C@dHBv?4Ay)@AK42X z*~f_vVVoT;=H|LOe){1UT&?Gi{>!m4OYcLE!d!)Jw*NCq1|iRqZWE?qF{%~iUc;Hz zf#6XtOiHE{mm&FhVg0R#TH=OthGJ)sSo0IaWO`nM!Kz0q1adwG>A zJNP{gltm*e26!COt8ZM#@gonc9>yY1^i)6~oh^gxzpoBXsw%2Jc4;jZlCYt1sI(SN ze{pOe-!~_IUya}gxD4xik6lx2!e@*e0^$x2qI@)iZ!o;O(HZEyQ6y(N;+RjAt>`Br z>CQ{Umfp>xpze0b+xH2{^XzMctk02^e&a|>oheYV*a^XmCK*^RhUEgySyvrs@C^_uM zmTdDGAtaJ?ha_KiDa9^2_-+BcWvp1sw615Rr}yfQhMh`(3(~75;X^X#J7M{v!HWJM z0*`m9rhM+nuc^@TQebu=xDhm(dW=@Y8`P)&HFKRU#+}H4@AqNA9?4^B#WZ{s;e1VM z;whK3^9-AEd~9~8BbjQOut?I1ehr$L)(uYa<12J;rNlm_$h{?}9DRAN?*&3Yk`{NX z@>HbhpoWs)vl%GW2ec-o9K}XE1qwrB4rVp4iTNpZ&k=l z6Oh9Y-?=9?7nB#5Oqk|;tKyCFZ2+0x)~(jH@DRtYh2kG2+A+E6-)s+P+!Bp0dw<^Q zT~b$Fg`%6}5c*vR{p!&fi??NONuy;CXlXmNsUGw0XtC} z4=tzOZ_yZzQsq2>FABLcuzwFYi4`JUI?Qqw{1lOVlKag9+8lAuHpo!XV0tkEF7~KJ z+eh!^mgJchkC9Uz66YP6Vv%uIqML&6&x^PdrRr)4OEzwA_bn~=bqPC);lJuqK8~BJ zf<=y0`X9QKtFBp;`!#1+?|W>czQT~Ni1>YzF$`r}9pDkBRam`^e#l>)@+@*UiBM4% z8&9Lf@@yICZe=LVmKHa|Iw}Fm`6xkc6=tAW@1I3w(p8BkXrNQ+FMj|2UZ(K70(4*3 zjohsl^p}sOtJMWOVqF;=@lAo%HN(pC)A#NdWvJ%>>m&64C0yv}?g>cTPa@NLk|8V3 z7doM6(m7U&uY%IL>fRMcviOW1b)&rL9v_dPO8>P%ns~Mr3v24wSV;GbXQ8BbapOb- z=1`oLdy0sbCDD|zPMpyr`dZ0!EKR8)#{6W&avCv_i$N;W zda-M{6CJxyiJc0X{S?2P8P?wZ!tiVyX3AneNVbn3&bx`20n7s6Fh8Jt2cB#tSkGaV+AkifQ;zhr~TWtu;(O7X*^+V{b+G z683LGM`<|N{CM|hvZ6f&;6~{r%PD47bZ<$T>4=Pv5qWNc>cQ+Id1Wv~m5hUklBAQ7 zBVfG{QvAELSkXSnNnby}l1Z^?c;m%M!wqT#&M%WPEgtczIxiI%Q-QJTMleiYA-oOI zL=8z2!%2TYATT-2kMm8KX?Oz2{>T%}WhmtCc5Z?>ch%k74T=e|uoFbR`apDAdofrqg>+gElFA1LmD=#Y=5$o^i=OdBQw~3(MoYRy*Pl%s~@>JbLkE3T; znQ_FpF|6~Mz1bVkkm?9hJjGR!GQC9A_57#E|DsdbAb(sa&4&h=)-sy1G{N`0COt?1 zrxDQ1C3yjg1Ykb|!b#(1VDs?FRjB<{<#B{v$gtY@ z)sNpC*XZ32z}bFa*5PD3dm5zP(6zr)kK(F4MBvO5re8f35uNN|m{03Fo znS@Jm%z=r_ovid{WSUL))!K2c=3p>H?R7&#!oedZL~x?=2M=Rx5aK(#z;Nn{5hUI{ zSXFas=3&LVyi&pkR~v)E@>|i7XM3yuj+xk7A(iGc4-cnPE$2}f25qhMck?Xu9>k3f zMd*JDgZ2`|8~RSv-=$(MQHuUhnAJJBMwrs3_{LNA1F)jg#kBpO&?7LX&Z|$1O(^A5 z@k3q9W$Px@<;bvp_lT^HIWV%aroGu^S_RI4!IX8c^s%-zv1WF?65bKHt%!WAQwb6~ zc1MT?JiXdiOJsC68+qx)iY)emT+*&m$fyX6bj@@5XlWcNqYUy4ecv&AzFYAq>EDMdk zy=xiD2}BMPAaJ=^9ECzcTJwaN{tzc_t z@7xNfKysYuCtEbYBdfSIO4+nZD|#AaXRCJMehM4u?P##YA4ncU;QiWIs3LXfDK}_6c6YihvJ{<6bQ!fwV!h@lXo3JW2zPlD`AU_~21 zCe!+-)3uPd$clKTH50Dl3_Fv=`bLqUM0Lw?rb>LzoOA2nA=t)GmpNU9C4#@*Qv|ZB zlit)R+3X+sRaSc^M#c5r)%08}uFiVq#nXQ}+!~9uZqw?q;pkybqroG4Gp)}sHRm*w zRqhcJoakRFLJsnqIk9i(^zA&o(jlO`qE~afVuAchF~8*$F?*(-jfC;8P4Y{{cawLL zj~4-d^H|Y&qZogdkn!lfP~Y}@LbuWG7>Vyvq(4oIJc^1Bhu2jflCBayIpE{nH&q7J zg2Zvy9RI|Vrp$dR&9oEi`d)G7OtNRa@!5SKO&UXW@(GacVxdDE3(89kJ$^k=L=O0w z$vm_Zp5-VB!-^BbQ=B+dF>TCbyyTE*&qYF+)|LJ@qRx9`7-zL``o&WS$q$1vMX)E# zuoEwq%v&WkX3jAiMx>yX{)L)%^ZBmC+!5lt)8O)O4ezO)*ga7MTFt8N?no(hUCOEt zl({ajyc)HEv&FqKt!x@Ne(^zu^)tM{ME@$;#8p}VUE~;nB69dg0>1a%92;g>1N=pR znS!SFg*S>1f{fQdemJ4tIn0W#0kw3lsqxOrj;l%bVx-#difX!BADd&Gk==k>9M{1> zNADEv-PzcRt|ix(2U~~Du3duDZz`}JYGF;;oMW)kZ~O{p0_j01i>m`m(O0j>8akL2 zlkiiOS@G6h8l6R;lxgiDwVB|oXY8E=CS!%)hGKtDquydq9H8<1fg?6%+uudUeNPJsi+ z^iR_(TGHPhkgRq%b)!EFm0@l3lo3KXLNHg1$fyL1USLnIR}y=sTj}S?Aluu)%n)yU zuM3VC!zBHZOzSnoJy*e`BmACzb0r>mVl1{V1f1;;8O{k^CR(t0sBxMHciurNDPON= zSgrjGJ;RTre$y5xpLncd4yH7=V6o5g3ucZjGoqma&r*X|y$(=Du5)0s3~Rn>1;)VE zs=p^j=1fFyM;RGL=ph6)7{sQzW*ouIYci~#{4IgAZ@Os=7}*|19gSbE;!L`nCbhUP z)Q#IS5Y6Z5l6P$Y-#NJNFZ+090}Q*$nbuxO2f@hZQjPTX?yEG<$mB3F!oeRn>&KED zyk|xtjFewv6^8$f>`PoJpxHm_At*vn(!lI9RYGj`Hl106< z&6DP^=}8xKy&eDYyb)6iwz_&+6917JSe-3p*xoO$v;a+w>pDTbT2;f)@~9o-O;3we z{5ww-=f?6CMcC7t0|t~5=1fgp=R5APj&K+XG<9x;vs&t5r)iEmL&a&B!%m5F`jfj( znh7`t_HFQL#sm!aWM*Ii$4;D8;Woh7KG%w#E7rKtcr;oZ?g(rAnJYujRN5n$tKGU? z?bES*1o?ZTu9%8~6PwH~mQrV=VsLh3f~pvvqdiUC;IN^Gad0^u$J2#q4}CT`rjvoP z9s{U#W!qVSm9FPOr%Y>00N*cBG%#-QAH*%+5Pck#QTvo=Q8H%}*|8?+jT0tX}SE{-V0 z3q`!=ITh#B1!py9)uBTGFjzwC15i<>F`LwI>-9q3*}l<=UL=%XfN{MG1v0H?#9AB{ zBw0q)N|YarvQ(S;VpH6>&2ObW5U=2*WDtdeT^f^i4KEg2HyA^jaX7~cLW8}_o>IU~ z&uk)GIL`0R>_*j;;&|nhn3YKA9dVlO5C0f0{y0U`!{98^Pi}=>T!$Ivh0gabD1%GH zl*d7e^0=AJOGU^1{C=Rei`B=c8795xF>Wn!X5T&agf8{ur|zJRGrVfAY#HB+z1Z6K z_H%O<*T~^$inYh{!qBXvQ}-CQd`B5M!Rnf8#Ce>(GNJNjQEZQ-EqWE^JaPECI(QR1 zaGRNJ*4{51ZV9VmF_m+L@NxI8w4zrCpVhr&_jGk=0s1(4$9tK95xv!_RC&ai-DW{5-3!kBW(bTn~FjcM+w$`q|iiW7c~ZtQ99;TPUL;Lr%&15gW4B@oP< zZFVJ`xvnz@m67K(4E6LiDNipyX~(6^nS6!^rzdXj%026=&oOEn}en|HBl2DnO=$zLrh)j3_A zG2=1qM90-D@?~gpjlc{Bj9Rx6w+`r9WM^15WS2FQj?nnRqi8~0ry&#K6-p#!XixM^ zzOT=;?skHloCIe@uLFbha0jcgv3hph(fZqjLMysZTAlCkb$61jPhr#>h<69@)Q(@U zP`h-XEfciiPASTKUx{-#9HNgpTFi>xC~9wagh6TJwO(~YZT%9gg|VVHAshbgmW3QL zuMTSP%}uZam*wxkB-<9-bYwaMp_Sj)b@PS=n@NX(?2CQxR(SndMok#;tz?GP*H6x= zIueZ$B6(z_sXYBb?KZlMJAt$XMAEI5ru=>sN_{MPaLi$03fn5Z9^zTQQ?VZs~QOzQ{~k)CN!^3I3v_t9VW z7LPgf&WheH*^kiul3F9vYK=U3gD%9?Nu&_`PC?w;q3b!U(2CwAd5<}Hrp@#;MDG#sL)p!3Vo}aN1tN`tG-!j!4yEz zWcEk?C0LJk)vG4DWLoJMHFe8Mi ze318yB;1_TW_%pjn(F{u3yVdQ!Stov znFaf7TINpnRj|^A^u-@IMRu&jSCmz%E;$EO>sPEMS!l>u_{vpS+yb?ZyW( zGt)YCwmM!F+IP(Oj@_|lqbztq003C+*>Ps*7(Nr{h_c`+jf#Fb5-$vt1vlaUBK%*B z|4Y<0kX9DFQ~;S8NG}UsW}Y(3f}7RT<$&gG^lr#51Om}QyoD?aUZDW41ORVW>CCZ` z31)%e!Z)yIS?~=7N(p$|Rb})L*#d3Kg4edDt|B3CyO(7}(>rHJ%d)YnjhG<4M_$hi zj}c~uChptnAjb^EIi#W@+`CP2Zm%}ES#3(ox>S?}riS-xbKl0b7HC;ktXG?jYo~2o z8_R05aox0y>q?6@t}W=(rYulV8MJW?O{ff1S}kB4O^3o@zA2+P_kxVvzh@}sJfOo0 zpO+y5w50$SWGDgto?!&IC6UO4_k zaV!VNDGtY5$#IHsTmz0p;8;{}2sz%SIO4wL9Ak>(q2O5QaJ+{cE4yAZMs(b`&MMlt zuHZ0o{HNlG`<8QjL~)!6j)yxOA0@}byIxZ?a3gfo9A}Z^V~Qj0Th8%W#c>We9_4WS zH#r^^SB}->_?+U1`<8QjRdJjTjz>EjaaxiUJ35YIEjeyg9C6=rj_)Xrb>O(r;rK2& zF7$95xIV`!TAx#}m|WjeTyfuWuAeBbOTo3#;rc1LHpcnuGIHFmIO4wL9KTTsI^{B!lW@xP*`BK5Ro#Aa+>y4QPGVTEjN3&B|;$ zbVJc30Bi;Ta-%lb7j7tu9RZ+exK8W7ah(?>l z8!9-wJE&a_YA9LUx5&n#&@G?=f0_-2s=DXSauoUplEL9NT*B2#p{isG-3|aMG(am< z4WN$HXcjf{pu}lJIKM`7sL>rD2aRywa*ZAa4QNygjplXFt#LGZ1j*p=7%t%j-C^E9 zY+m<`YfwC+Q9K*huy`IvCbik0+H71CTL6G*xYke^4PD5h$#9E?Ael%pMRN=lc>6XRmvEy}WO2MAuOpL+4AhD=0-z%`Swu}Vc$_AL z@oUmRP2K=0XoCBeYw`(bK$DfwWO?`8rH&?_A{iV$!zFyYay%)Ps-mU#S3%VUhy#JNs1R{kNpX=W-B_``v(#0plrjd%iwqk_f1IYI0P^)Xg@X&6?^~Ot2p<^ zUb)}*(pJA5$@Z_kDqwDFQe~R`TQA=6e_Z~rz3kt6!Sq)ECiZ==4P#K8zU98qVVKCaM^15W*PPrgIa;=kNDl9r6YG-0LFzhd=*D&QgziYTd*;Nt z=4@OW**m8KNqZtGwkN^xHs9 z0z)^9p_KP|vNHMs!r0<|PgZAt)&rib9&Xlp5`55;mF;GUaUb$z_4j8z?8(Y=vxMLy zo~(!x-qON9gDhC^)jo~|Tj0Adg9c*7d$89#eRAJ+O!f-7zO76~yTsnXy>^mU72Eg! z4BK}U+fTvv<370`^~wFf;ruQ+f1o(i?6Hpw=l48$w0rF1J{#8$-6(c?UrDw7&q%dh zN%a+^`l3(nXO2jpk?m(nBo$o%!F)%b+}|AjZIB%M zP4Q>diS00E&Ojbq-Rk=%T)nem+p2GIZd%{mKwljlx{z(4uS5sdy;xdb*Qr8^ZR?^VPfzi9!Kms8U?S-QS5M&-6U7Y*iXqr9t;OGrwI86zqtzPbv+#m@j zN@MvHZ!D~eX+Lbk7~ELV_Qc@QRZea`G8+Ey$Y{qOf)p@%@^Dw|i$(0aibU*Bipqk# zjZO#>KzAM_WwNB`Zi%GyM<>n?lP4)&n7Ra*6C_1Sz zFA)`PL@Nv!a1Zh}dLgFuT@*=qQBnrf2%MzcF8wGWa;Xscc%EcR%4SLV<`|Q5rKBua zBq<9Ql?8bl(&c}ZWMCs5@yoKEGPlw-!hCDiyZ$K2}IvI4c z^RY)Gpxy=)dnb*y!uk)fzGx7vkq(x6VWTlPcZyD2Ph!8z`=AXZ9IdQ-Lq3Kw3fn zM!T;V?JH9Fwm~QqITWD2V2c?X%&!I0?oTS5W`!9*vE^pqG$_oF3o{I8%(Wde>_BqN zPE>eUV{AaORGQ%r;Dif3W>ApI42qU9!yqbvC_^)hXtalk87z#C!asS;KngSiu^lrA zW`J{2Y4!+G399)iq_^A*?Lh-($cGt5IyUHlwAjc*Z4VMzITIV6ue2S{B2$n?!vf0I ziL#{?jBd0Q7H4F`zbXwUI#`Zog3(1V?9s#y@jhrHz2%ze`M&YcY;0q0k)xbU`4uH9 zS0c)dqnO9xH6|+YB#JqjkdxrCiYHMnakp_MOg=P zf?(Q{NM$1LgElC(T-ifF1I2gGo<;r43Kb4&YWshjgo#7~p z?QyNx5sAuHH^ycpORa!7R|5yH+}CvtSe@AHm!hF8M7>jF!~z=GSmQ|QajhU)f(WY| z-Dp>fO|L_GI9*v~DqVn-U=5+-SVbt{(?!`&@8PAd2DK4>Go!h3Qljd|0*_nlN8!Enns-zSiZy-GdP%U38sBIsl3hm zpbd)J3~E)z^Jpr|f@c5%7wJZ_3sn|8c9}_eUs5)ylnpDe-UhePeCc2d$~FPG3j++S z-q5pid^)Hsc*+W)bI}RvHhNGyQfFrLT){f|L;;YLze@@a3^r+M0SM0kmNZZgss}9i z(fxh(9NjDe3880%kTV=0vlk@gPTY2Yh-*C5)C2mpJSJH2kQ=)!$b)}9DFa=O3MaZ> zdn!Ys9bLWo1XP~dE2wypr5}bU&?w_YS&--Q3II>o73`qgaZwA8u2p=Yt$IKzkHeKz z9;>Sf1m!*uEf?JtMD!-nRpI5kGOOq48`8m7te`Ycxiw-0s$6gd5k1QzY(K34gO~e; zj`~I)l@uO%E3_ny6(6c2CP*63q;(#nb0m+a%u1dDidIXiAb%|*DxL&u2!11Jx=;mb zhoo>p5|)_p*jEAOpin(TuWmybG>T5UQPKcJd30JxywVT1x1{;u>?CjpB!Qcp1n#gT zaI=!Y%}WBeJ_+2Zl1Am>(LAzN6ynk-^?-F!%!Ft1Kw8PqV_{|-HA8mv4kQw7MY@jYlY>xg9uf1UvBT z*W%n!_|+!hvWpm>H?E6}#swN~CMd3#<4R4h#kCNNUKJFzi4-cxD>USl3Q}DBFDmOQ zBvqz^%GJ2B2`@@s!zc2g@6h2jIC(%xd2%``T!D;*ojfwx31j+Uch~kR644l1OW5EU ze1Tb<`xJh)4emjDjL)#a^SJ2yJa~ml#a$A|ASe|4C#m9kFRtNPw)D@c83tTjm`v4- zF)^NdC{KI~1G0{9+-F2!@#|Lu_ajxz_5f~d@`H_@CEFG`f;Pj$AOVU&XUWf=8J~rxCU0Q7vL9!SlD`7Medsg1A0T;MYmO<243+sCtw51fXJs+PD@I zeNhWE`PV1%1~GLEctuhE7hr9si(KK!wv3C9p%^ZOKoBdk!7&2?H>rKKF`oi03dU|y zp&PuAA~8&n6w$k2Qk?rA z{N}!eA6-r_A~XCxo*_Hl9m=Ammzef}Kka3tp;TT`m)CHKkqVsrV_ae+yK!CqHe75; zP?|;Z z)MpCmEsgXx`F*9*{*yp}B^HchtKU70&Wd~uG(SVY2b+LLTTXb$`Hp7&9oWCalrZ18CBQKjIp%&`(U$727F|pOGe|@e6JWeghF(Q~DJNr1U$nK1?O$(6zGE zV+VmhB5-q+QUm`1;20^d?V>B#?B0>ziR?=}u9qZ=3@E$o&WhDeVA}#seqItgNWzy0 z5=<1yJR|}bHrR2{9^ToJKY$eHEI%$$cVRYE2LGnvT0UWvNfI@=i!O;mFe;n zW_UVqLlIpG%=SNsp$Rvm529O_+S<`Gh>=#n5NYcu*bYg}8d{sx@8mua|!&q8kaO#FBj5KTu$jJWIot+7;$*Fqnk z6*-3}%=RoDIvglAGeG_bMSiBb%u<&l)ujrT@aZHF?tsokVRR8&bqb;TM_AaiaZMX8 zuicQC-nxnOR!yYKTF@kP(wcw|Hjy4^BAur3$=MofdwdD$@d=hn2%ig;(GApQW`|I> z>9b*>7%e2@&djXHdANsF=O7*Km)Ma>$Cv|Ms?O-eNI{Y+%iQ!~<^t6w882Oi@xLk3 zHOPnW$V6Y2D{ybWVuobaWv9o>RuqTE6|TLVlTqp8K&!V-`!#v=-<5m|5wdD2cH zUx#9b^D=?J>NPL~7#_>Dt=6I$v4sm$DS zH>Y%nQv)BY#~!oAxpnx>UC5tf@S_~@=(51P@De<-1yN==CPtVIMUkbrlm!-`eO+j; zP$1C{IdBm3M6v17Bo6RNOk6P$ByN|MEpq@I<2_k>sl3T1&~f!siDtm(%}QX|LaOKj%jZ5bJr z1(t;yaP{bPrqT(+R1TpEPDHM~8b1oI5qB!bW=@RA7+XXMz&xD*zIv<+B6tXl6OgjN za!9qpvA^!_thCnvv%;Wq$sot!ig;FJy<{7+YZ09hYh|l~4S=u-rg4($lNCAH&qs?0 z`DBrzVyB<9{)vQ)m`1}%5Md)lh-07?(bhBJ3*D^RIF@m z6B|7uQGuqcOt;tK0xT<^Wn-_yPg&qN`>(iGcxbQus(l`Q&>Zr0fXoA}$BoV6 zFh)E|g{#OW1t%Wn8Ypyv*36?Utt&b?DfPMj2(%lwJyXigPcC2u%y2y}1b&=xgQE%Jvrg!0cQwYyTha zD`IpCX}iQnbS=AEvRuW4Wimj&A(PTFAh@G3v}q*JG(*!1<_bc5j}zPjF>NJl0wphg zLMBRH%av5-=4A7WU{eHG`A%Fw(aNV$?Yr;;EA!0|W;$4HY*q~<@ud*pq95Rj9bE`tvvM;Jc_5T zmj>V>GypNu5)(R20Z9sYh78j1&E%Mvo2G*wn+%t1M!&V|^45l?tqqwp11F8g?O+_< z1I^AD>^Bdtr5q`;@BcKIp}_7yK5QgUEibEof(pv&RnRQXeHp*GFY@Pk{`?z1+D7*R zEXEvVqx<>DY-OXb@#wM9^|TRb`D{dz0^Z)($W1f48?qi7xvUJF*ysT;PHLmqzzjBe z5c#l?Jhj|LuYd|{^eJfK%P9P6qj0YfFxiSrjLF&qHm>u&;=)u;hRN0PqgqD9UR7CjSeiy{yxRfU-8eH@_1hNtEmYL2zu_tE9YYH=l%x4ZUdY&DXS zBJKa3Qir2_s`HT#s44qz15}*-KSq+ge&^0CHmN4?0tUI7^ro$)yC4u~JIQ?yauo(o zcQhhD`IEIuVAJ2nMuY2gO*(;^$;Mr_kANmD&7bQeeyWCCQeYz*DZ5Q|tAbykf*q#^ zDW{;<6my;4l%#&v1VEeV;hjjJ zW)cB{NU_sA$tnUcIYvN40GE2R5g;8HVDob_c{C+&&4-kcR%H9^KxvlmW|QM`a_WGR zAP&#z`TR#C<(BIBt3>9h(Xpq9BGTx zFrgB%bj49MjGi)1fFTq=$6A$`YKR>p~HmWUUEn`=y}POm-yn zUr`R@yRMWsj+!>%t{Di!Ez-akKvZWDA=G5z0(>izO-ItId{r^!xaWAY5DCQcJ!T-%T0Hz|l_13`$Df?6}# zk^cV`RS}wO${R;5QEwF)cfok5@uY~#E{0%X;)PEyT%fa+Pv5a~@Pm4pMQ7R{_a0|5 z0aV-9*g$7xMRNTp6w2d1gUNv)37959mqJz~&riy5&vqS#au`elq2-g-z^!F|0~ugV zPP@nuir6G;O&I1PRx;KeYRzOvhW=NSgNqEKym8dD2_fY!7zj>58gL3xokawv7=Vj7 z1%1FCh#xpbwl5YLTUc&^@GhC!OxIzmH;9CvR`cM}-*OAc6p6lb+KoOb`DXa|CX=jO z$*6_so04K@jBkx5$tX@#18)7!yuXj4u}DPmg)Q|&gkCWdjiPDIj2xgWYx}U1apUlQ zcjOreiZ-bmBn}zPlM!*EM?`jv)D+eI>ZrqH5BU0vpjt+0&CLh6;9^9uz1AJ-^HbSf@9o zpr5%-=4hkG-~yeke45!FiyxHZfvOy3{#B1Z4q`b5ZFy?>fT|EwFrX?0o8sJq@tZpl zKYCPEgiJ8!h7h=L0|;Ek;}Ro~47Ie1`G+6@nZ?NDw8I1+5aT#higFC71N}tYQcF7K zWQALTByr41xUosluwjXrCy!mhs}$fSk0HxEnUc1UuDaCv&hyfG3Mho9kRdIwVT_is z+((#g2qeZnbn-cd>=5Cap-?w46-pIu5J59=>j!(9PZQk~MGjSv(=;TvdI*;xE&MWe z2*F#Ohd6Bwc3ciX(YUy8j8V)qGy2Zch#m%7G16k&I7Z%cWJRVce$zF-!wKVxuXWQ) z>3lMQ;T0kmH7e`;jC%TM%Bz`K4#KvuPgOre!6`Acv zVV&?qvT9N#NCKuw(A6j_GS^SaaL;fnjWnOGzZeK_gXw0Iuwi3>H96HuD5#-`O|sU6 zVLxJ}pw>)w#VHE0zV3c@;JpJav(?orb*Ct&x+LfNg3`&XUbtP4TP3Y+CA4P z{01_>nw)lu#T2ng)|xQP<#(~9)RIZ2nMLaVE6Twsj-|YD)U*j9}1YI7NLzlnM7zPa;^(jFe0ARGpV`Hf2Q24pfWH~N4WdXv3uUXlQ%MtRW>5Tmp5mx87d zozaf7-oyaFH)>)04f|W?L zwe_P&pipaY^&5^ZrW?Jrf^HKJpzH8tABTHS{LyY5S>;bQ-sAUne=TtO`L0$8*^nh0 zUS$N-gcGBPa%Dfaq`*crQuYMG)wE8W9u%mB%(X5}N$O{AlR2vR@wiA8rJ8#}e} zlpgCNYnAa%2NtW)8MsRM7-q>#ud&5u&&1g*NdW%;!e|nt&xH6fx);7}hJ(OK0{GxU zsmT3+j8-%#eMp<{Y-HL56dRt)Ct4tifE+F6rqd)G@mfk+BeqXhZ5uGqTZTpB-4V^e7IS-^iwutc&6or0tw z+BimNn?j?jb|x-#fqWLLeHMP;Iai{bnaB>(Rk)Xa+BGbEIs|fd)k&`dj|^rfy(08S(TNI(wP^|JuOb=u;zQ1A7y|#nxMJW78z)RHVHLpp@u=6vCckW3#KjR#D3 z<5n*S<%iWVB1u%KM;SASFh7ew_?PXnbaQw&&|{>9PW{EWs8NJ>hcFTUIrm#srr3-5b2(Kgs_CH1M9{sLbd!I1 zDjR^>mjez$c{FF}q+U&Fj+bgzDB|~%xbH*PE0NI@y9WVn6QF=RZPEZ6SqroY_Yn3W zLeMU_e;D_ag6^QRA3+k_L7rOf4%mW_?r;s*6z5)rU+oT0AU%8?p2<}Yex5`cWcio6 zJf$vAtIM;vgl_+6+NCduTi!kg>#4qzFszt(LR3a%qBFghXiK!%VW>lqA z?i=(M$%o6xB@nzp-!KI7w*VAGUIGwf%*zC(5{9A<7FwfM08ntVLV6YV(%f#vjZI3L zGvqMQObwRSM{ZF_uLG8x-ozD`x76i7xP<=!2xUAh^S%ua_U-s_lGP$lCdUYfYNgbq zx%laZjMs~DB6lDYgx}G8-X-N*iDkeyyN$9YrB`cC=O_ERB;Es_K}k?YjQKW=N!n7m zm7!!f;-;}xL|rq4B5wVY9?SdSf;nI6X=}khU=qjM+i+vkYSi#Uh-?Cjq31*tdcwy* z@Kq-!eo88Lf{GUhQyYJmAe9xli&-pj^}<^v0B<|+SWcheYEYeqoBf%)fdqihHQ*Px z`ny(aS)n|Ol(9hBpW!cZk3#)Yqke@ep(yXyxR;6XZ*XH1P@?~Ld?H8tUi^e_;?F+# zN#@iDrg{{DX`A~1R6rb?cVO@XD8-2HLItw&AHcIeF_;y(pIFQR){nrVIdmoja)-_eA827EjfCNKyVnQ?@Ysl~C)Y0J7QzUJ1AAVN7KKcL}BVDy_Nw$aWw-*ziBtK2MClW|{Z(JSH`{3S*`Ozab)ZWRycz-&JbL8!Doj8tbo#k%`n_c(GSOsO?pWQ$ns?g-VyTP z8*UQ|Xj=6~)l<=*Q}puzPIU@!HHOvAtCY7?+~*baC=Gp(588Pj`~rXs4W@#CGmTsb z6q^v?8%K(0vT)AVMNmU}-58N~HgHVSl>Z{IA!?BpVhpY~=p-IccrBQN#SEmPb1hFT?_AFW6?CrO1kK{y*YT@6 z*R#lz&tgOlV!~}HB8E57?LJ|xnPc1iCHK@Q~AA)9a z?)&)F2Ahj?dmElBVoVjY^^o{p6!|nUnO0$qGQdua-0la~$>L}~)9^0!{$d{oLG%pzt zNvTqce4)VS11vlioj6fohfe_$4K9NUb}DPn5vOb(CiG6;gd4h`9#R z5MmEVypS{qZD{0a8ebz75Q_jo-Rf`+7pv`oC6v1)HG)HOF#!G4l%-{8S&vK+{#e}D zWC8E{h@4vPeJ6kvyszX}e(z_k!78smKrr`r{`|_HpZW76f4=9>xA@Txx(cY_G@vNg zlXovCA`SYkRu{nX2_U?zRhM<@auP1#R>+ExuJ7d1laUo8%eAtv8^}kwVR&YKCcu+U zs2nDdjdHN+1_1_FBsAD=BsJ=zCUtTm?RSd`p+V&oQlUXmD-^MuNQd1bL}(EDEA`I6 zefVp~i344b)CNiL0_wn;r_|?%{>nUb5Ix0o8bu)mOfhxDB`$D@_6%Ii1H;qFkkmms zUG@)<&Ev=@E7HlukDH=OYEeRi;u#cxezBn_3E|eH+$Yj`w9`M{K;t0D zMBC6f433=W(j)t`DFDF`-PI*YOz-LnAO>=*Q{M;*ez$`j4C~q0RpyQH`cLe;HfjNYe+)m0la5cY zE$*g62i&pn+|o7up={(bKyWB=M*=7Prb8|p*R}x%r#VVSs|Okpht~grRx%h1{B+Bu zWA>d*Ksw{rWIE~2k*0806BOi2Db*(HvbnnnNNypc9alrfnt+tA!Bi8cA@6Adl3#i0 z)_UmL5bgWVCLm?%hIUcqqqVx%2h9l_6sB{e`TfjfhYXXoIm%BSKvHvl!mzASe7>NE zwobu41Tr>Bn$pt{Af6$4$E86z-!w96yUNw^-6gem@4d zg1*49HR9vVA#&d#BHF}&WKRHCD*C^0V^i#KYy3bJHOmkt;eMWEHOs){7y;4YQhmFe zNPj$n;!_|*ou9@PmuGPa+XQ#@cbXwoI!z?6Q=QQj z)c{U|^)c}YOlBUspCBF6ARP7niD{6}K?Tzwr7{gt2wHlM;|rui;ID9rFz}V zfOAAya4>Fck`M~6DC$%xo4HU&4o_L_GdB6@zH2FNQ}kV(G7z?DHZefZN?P7EjKR(H5vu#49e}v2YIX#yqv28U8gdBFM9}O6IO&6T!HrExn_31IBETE~P=wJ~yHKd6 zW;xJBqtTRq1hOO5id9z-@GX|Xy2H41((C#GU4@ky6XsA5_K$+O! z(8-b1gXCDexZf)keouuj4VK2=8%c;)^3?Kpl?^J0SCta4=0Td=8vN*>)eD)BE=OJZ z;1Xl*E(NXT0aFF7da$VoAA{fB2wJrOm!Q>v8=EAAf-AEQTFix3eW6ZV&>}w_w3gs@ z7lW3tO|yvsvi)c!MF<7Xad?bo-B6@gN!Vn&04Z@ToZ+qO>;5D}Kt!yixFnTEN33PY zM~omCL>LH6$1`)u&hMFq6FqZ~0v6AtCP*5LB%360pO*@Mh{6}o)c8Y@1kaSGmV0Ia zsK7I;#4}ezn%q_VIi5c&`Li59+EGVQ%C&fQyakdUh%{UdV%7$K)@Y_}WE$$PE|)?D zUc{_Z{aIsF);MOJ=4Q#~F5{W@H-B0&(@tj^W;6BBb^_DR^rw{|Ek-4FsXjFin5sVg z9c(Im77_<(zB9N6NK&6Jz>Q53Lcx_;*C*z}&<9f;77V6nH{p`hU;VFxgh853Xb_l0 z0xVt$-&RiKqTQlGXizC76?%%I(kpWDZc!mLs7xjmIvtd`WVZ+q8U)HfATGMlKXr7u zv?-EiT9@U+)jdSz&z$mP36 zh+rVZ^Wf|&h+-r?N{`>KW^(v#)pfDib#ay9WWDV6G{&T9G~J!Sa`9`Ml0LY|P;@5( zQt`Axrfg@7%<@|##Jno%IJ-tnDtbVYt&qk!nE4js;SZ5B z$#fpCMur$p09)fz%h7EIvyn)+Z46z$1X>4_>WS%VdWi4{MMx_^GeQBa6Zk;2k3zK(u%P+k=@>luW}K6Xo(A3+e3BX>0x?yNSB2W! z9|t`6ZrO;9LQWu`XTTulD{5-d^MbK0tT%<5T^5d$kKJy60*#r=zCaO($T&MsAG)&^ zyhwUxQuI&=F{nEW#+d#rzC=9~t?)T~K-Nu^^(Da8Dqg{Z*9CoZ%SlB{ilv-aRE=ZK zE84nwp)L6hF*&dJS7v7Uix=owA2HPH>zH^IBS2`g+g}~RobYcTD%1r7)V4@-Snziy z{R1BZCKgQ57FF~r35K3nkR(?48b7@*t$Ue9Oe*>plT%iw=(=wLS;!Pkrp237^j0b} z?KDtZvK>$etK;tmp!2yIl=C*rN#ps09Mn7CTds!O1@E$Sl{2+(+Rp8FNx6ljhi4L@ zsUf(h*YU;1--lW*{3k!&!-sF#VP1j4=@fk^Nh#bt>+lh3eHuSy4JadtR;pIMIFunW z_{ppwDSjts!AGoyl63$lfBpf9KChlBZ7A7NMJS{QQ1AQr67^E4g&z=^wSZltkhTpU zz-|N|@G`!Hj$OX+&-j23I2k@bJDs9W6zUWYwfSVA>@A3=(_fG%El{PZVWxs-fC|M( zpz2t~@hoO!$47x@le@B{qW>t=IY4nraURJ&0}k1J4tGnIYo8-m>T>N1Vlpk)P|yV| zhy)8*S|KxUJ{upfzAy0wiVL+!7vozeQFSSEY0H_j~W1oF~BC}jf4 zxRs^643shpy8=KVMVo#aJ}8Nvj9!TZM1P2=56|ECvSOwqpioz2o!&MoksIfbN0mlmO^Aq?c-Lb+`5eW>Na?^KgqOSR_= zl*s2Pz5NAgF2zeI8kx#L#wX7yd4wq6=jAgNqDg$N4|D50@Gs0%i1Mlw47DZIK%Rb1 zS%tZv5iPLNg(L6*T8X|-P8E>MDJoj}AbJOD)cRNN^;unN)Qx>q8LgpGm{!%2fxACl;fXW5edJu&l{Q&_2qmnqw#5dXMqc zA<}g2GB0fY7c!>b+f42@Z2niGIT~rS4x9fS=uGToj;#9MiS6j(C1(~_WtCW+@-^wWg_Sb zH5Q9?peQ7n&f~SLA;zM0Qqh5_<)qEbZ5{kG#Q~*yVtS^^-y*4}2x$dqMop%wsx=@4_>G9O-?2iF)20fs+z;ZU2WYm#a-K&ndL8Dpr;MQP_HKL zYP0*}u7`oBP!&w$(IzP)(^@9A<72?c#1w5qMI9sU57I{WdVUT zbuW;GOwswYc)0I7m6>)hs4dwJD1_DV8$RfC4yK@-ewLHQ^9Q-4b>CYq#9i03bd@u; zH?l=!sp#_$4Y`G+N8D9}riS2`y70xu--lW*?B>S?eE8m55E=YrR*)1=le6F`Rzt};fRjJ}fJC1k&y+TlY^fp?QUs`XBfdnv zRBGW7L}o2u*C?cI!w0Y%!3QMpC3Niag{$xZAMkJZ0PS>&j!~$OJk(~+NNn8o6Z#7h zrNshNHOvg*KcGS}5_jdQ3Wa>ijO_S;KO=W#NkvJ8`Wz_E3ctYj^qqmDlzLk8HM1VC za6TuzC2N2akSlc!a3V38)&MB{e=LXu3s_pAWKNUi8_JjNh&GY>Br=v1IvYJjW{S3i zqLWE5v?C%3;-26S;!PEk9AdNr84{f zxvK01XS19%o-XhaLFbm0Z~fEEJK0v7r-^+Ii{SwL;3jUq;JF}^&$W=ThEh9$4g#2}~D zfX-svNG_Gm>=4A)@rPJ&L&g!5kwMNp=B9hmzKylf8+S(`X-Ee)8U&@X6oO~oy2i>VTlN{F_?Yi#d94B7gw4to4zq8N56)?e2uH)|Px|4v9_4PP- z&n2j&iyMSS2eO0iWw|Er#kraDUI=`wr^U;gZSpQ2XYy8#bJlnSd4}LXOHh-UV5uc& zAi*X|9CC2P!*Dpn5*#E1t|l052wE(`%5hG21{vBc!K%yzU6!CdGr>Ab(3_dyNK3FW zGr@6|;F!z=r&xkbdb!S&J_0|;)l1UF}{=s^>V$t<1Vl(zL*Im52o2uxFN z!fV5@lM)3iR4jGJ5O9n=VSw^cBBm6Fi^pSC{n@DH0wU%hD zW&~Q7U2GgA>amQv1~BRvj8Sg}Mn_mi>lGto4$x75IwPZ_A7`lAahB0B10*^sosp^9 z@fjpK4U8N(7y1-3PxJj znBA1ofzd&*+kQ$OoL4Zg-IP(nX2KN1X518~CDn~>HO1-nd$AxS869u~+e~rR=>%zx z8}eTfYi5{&8)3)o~NxH^F_3e)Do#X^$oDcUp7|z=|S9>iw4^?89l1{a& z&N&U=0XOIt*ql3>oO8UarJ{}PP0H-l6w7qJW;$0hooSiwZn6$wT4+)RW4cf?-A{eH z3oO&UP1ZrgS*&wLb(#x=FX?*Cw^#G+ zw0zeN#;SIluXsA3F7LM)Imy3>QawZ-|mlXsT+pT!}r&J$#u8nW;BTC%X{Y zk?82^+2|=m4LQ=u_OYzy`&iA*#A^1?tb)acRbZik-2DNWO6|-1y=gsurLl+*hS6vK zM`h5)o&sci>Jxx<73veKyjryCtl7cfE0U2T@XH2r|0FDwt9gzrG8gRzUet-@{oP{7 zYV_^qupD%Qe`acX0!EDfCx(_C%=#8cX|=3x1cJy}|1(hNYm*xK%0gdS=nFtwJAptj z^tr`-251~-4xvvCF6+M*`VXKyswL|aKr+J!eI%*Ch5ijl@&?}r6m}qU@I63V5emEu zNX<>&0VH_?Zvj$H`Aq}4uK}8b99)3?9k3JYPWYBfY$n(JD-$Z({6m{+KR56?liDN` zW_mKi?Q;YF6s+X%VgE&J%Nju+M`HZ%b^~uHwD7QKj0K_5S?V7wkOf`B*?osw5z>^}sQJl)WAe2p%5wI0}$z{vR7C zc!Y&E0uoyfZUCh6_M24qa6rZtbpm!)wRN`ju1T~mTb1aE_9Z$zy(h)m+l8o$!y9xi ztH?grJ&f2jX%oDYv<3AtaRc}@Bs#hyRi3p7$3P#GdlMZ4?5oG*OV7ip5ITU@39?6L z>kgrD@J7EzZqZ8CJq8Nh4M?;cx(kqKIrJ+)qUG#64PEvx4U~0JXdZ5H~4fkL+c zQk-uFq&VLMNH_;?1SIVj{5c?LgWwH-r2PUv1tgNXR{}B){&K)h>-sv(cF+iBJm;F| zDyC4MvHs?cw!W&iUYY)@9;kGBjUmab@~cg9x@O(LwM_C_QZbd5RH~(_vq$IPUlt+s z=HDTQ5&B-{&M5T#gYgB2CxwHGb3IPF+I5MZ_NMOcM5||h7mN8l%4FK6UiU;hTN9XE zdzScc8iB{)YGLpo)8T6pO&!tBRb5{4sbZ~=<|R-V@ALwx2bbo#w892R^Gq6nSDcdO zk4zs*n$VY^P|oag0|h?=q@2a4fRwZNFCb-X|1ordj{vD*?%#k^*Z&ZZGP@59o%=2z zGt9jO7?T2DzrRg)|3d@ngxA5XoVfn zJ6-GA*@xJ0sxSPKW)$G9tpk){#$@Ri!3tAcu-rg_GC)$zKq(-pW}pO+R5Mg;=t2t( z6x<(>Qp|pUlwy7aNafhq(1jKlD7X(Gm7@rd%CR>fWgYVkU0^SPFj)%BGq})P3(YZ5 zaJGeJS!hoS%`i}44?wDJy8}{n+YOMCw9wFnb~R9N7Yj|d&@>C}Y@omtK#KEZK#Fq# zAmJRCWa)M?kh>!wW6|3I&ScRteuRAEh9Az-c-5qIeVB>|FEj;Yoo}IY4HP;Dkcb&N z8<2<@It!3e{F#O>aE5_Gr&;I}0|ie8q?+#}K&tsR0aBGc(bAn@pulk!I#wVwY48|> z3m#>lz>$EI8h;E(sqqLvit|Q87usN;;Ccgv))^?+Z=pT|1$qq>I^06t1`2jrsMA6n z7Fuhdz+r%td~JY~d}{!Se4*8bF0{%(!GwicE!1M6CIbal0#cmgfE4FL0jZWb#L$IS zSmqvC<_i;q&Y2zAJN9qws ztz>#e$6L#k^-XPk^@-m8c1*#!=0dQ1iW{h7QcG7ycYC5QVUqPqBl&yrR5iYGy{y`G zt2Km}_n;j?O|7!6v*+YXPqXwlX9QfSUW=lXBfbWZ8hNe;q!e_eP5lWVC&Gn1*KdK# zO@ezVATt}ih(z8*M8X+KGo`$YiM{0Iq3 zlfM$9yn&R74Q+iYlH(cl%}h|))6Mx^$$6tL!yAw}KXC&$5#Q0YVJZ4abu87;-Qev^ z<&@bhY1CMLKC=dIV`4jI(RTW#R_f>x%Fa0muotLj^@K12e=TWHrY{W26dmO?B#O@6 zzXCEA&mRmLM7I}N*F;L)bK*|Tc1xWe8Hvx$cbl(7E zCh@NW9zqT%LxrLj;!Ka!BDlYS0{a0{rThqxDrH|lQc6~lq05?YpwM1`Bu8i-AjuJ$ z3rP9qIfgE4mW5^-C^Q3*%DV?3m3MbQD(`NFF0d;g)oXVFq}#a}Dl+^z*726K#5}mDhClRf+*|F&V zDmAg8r>V0SUCb*2G+$^MlPJ+?BLdPtV|ra%cOqKuU{^(uQLh5LRV2Exx4AMcq@dmz zeZo|=YDy>A8do`SjXZ)CZth>#HzsRFff{0CU5(m-x0AY(nnfCtgH z3YxotGLj4;Kcq!*t%h}=1(52E&4ASCywaw|Ep(`b4zbV*K)yb6uuV9~Ldz_)#6WH> zAXA%az{Avrx07aS!8+mxucfqu9yCznb);6)94<-w@u>9OXQ3VobsNZS17u`f4cKW= zlScK5nPZz5?MN^^b5AfWvz8pegs zOAhaaki0qX7%2N~3-Njj#raJO{mVdE{{*BszYa)o=3NrPIrJ(Zsb%ONfJEld-vOyw z{tb|D4*k_Y!B+(0Ebz~Ogmd6!K*Blj5+KF-MWKUnhIkc=;_`xlg3lW$@Ejn;h4-u| zF3$i`t-xDlByZMJ7JAY^p(g-I-q7y>N#4-ofFy7BV}>sKQ3GW?VxfmE^pJ%fFi_}z zK#KG404dJD1*D|9&(i(IK*3)dD74u?!Mg>L88aYR)dhY9NZH1nfJD!sJA{t2XkH^H z^$p%?pwPJ zS6JvL7P{O*ms#ji3teoX3k~ER3&{ALV*op5%?dxQGB zO@%y>4WCm;)Z5pzI*~Fk_q%};O$nJJ=_fO}PtSY|Up=fN_nBVdUd{c}kh494WvE8# z@e#B#b0uxyIfl>T3JhrM_Gw(7LK8^%Kd4D^<;M{_93~%|P7C@X(*w+A> zhBFaG%LNltb4KUlpMsf|AurbJ+>W~w{dg945i4K94adqOai6g2=iEQ6`Z+fcD-Uw6 zq08nDZIzchuNA~S;|k(NYz1+@x3pBOu9})nMqdVg?G;Tj)Rw)mf;{zs3+-m1T@B=N!@3zOwgEi+STUYd z#zA@$*l|P;94odW+Vhwy_*cN{x?`C%^jNVoNd}A+Ji0N=Si#fGnTG)$v60M~hk*hn z4?YY`5x({nx97rnf?^OC&hraf>Y-EpvkK~(1)uTB=39B-OukuO==!~S_9$nhyyC}i z)sA%YyK$AB>wNNY-pD|{gLNhB)yW&*$uX*tFK{}5d%_G;)f=AHDW26s1#p2!kun+F@!TlBvk2m-OvhYJVj7|9e;th52vXZK*(vq^p@kq^*Xnk!>e93I5agc=KV&^|f z$J-dbyA8&-uC}&HF(QPV(l*l{+R}{WmXtL_my|R_QT?*onuf@-29!Jy>6Kkz_*G=&=hthrCe~0= zQx-|nszG}^rx>2PK0D(%y*^WcV|}I>+L2k|DX6KkTMfHxBL(ji09+9akH!yk?1DV- zb6uUQEBZUJNgMk-KPG-x!Pg-=hB$Kq`>4>y#1|@j4|j7XXn*swfOP`937)(h9M1bu ze`jY?N1}BGW~lo+jVX`1Zab;+DW{3_k^k<(r`O4wnLR$>IN5vPIh|iaCVt5W9Y4n< zlpK{&Qgg?AuG&Q}wcs}Pe8;~ZUe%hr-zTQv)Aq@0EwBX&ocgAg1onyRGA1MMt{FDE zvsT>XJuCA@aFJ&Q(u!-c*)P*+|18!=HH9Y$UonsOYxFL2Cpr4A3XCvdC;@52QJ_< zc&l#aOV+~bX3V%Kzw z44syP9-kuuX_Y<$PE^w#U}zzS)uB&*laITnse@{rug2ulv`ja3HMDh__CP}$cEj{$ zlwoIlQ!Y>bpcB*d4TfIp!|-Juw&fB{x75)2>Y2(j;4Ig)2N_z;lRcPaQy%hMq3I6s z=<>TIMU4`1gV%LnUm_3V)s&3{ohHqv+0a9;q|r7jwz-lt)~;M9q4TUVdD6;Yy+u~( z3qfa%rf*B5=j?$0`RDNuI%_q3yP+Qw9N!HZ@}2EqG@G8$^Dk<|+k(b8zf9i@9yUlh97icdCyVpb{x{wmOnM79FON*r;}%%#MkpV-|6m2tb=T*8~RP)1j)mE9DfGZ zW6-)~o@q#ZDobk0t0HkDykU`s_Ug0=GDw@w%xJ@lYfBG^mzKmhWwEg6cMy8EPqe0@ z))Y+Gw8tr?tmGz)+5zgo5uq!pN*2XyYHK2#ZxA0!Qd|DCcwI?-L$sty8b4;}f}nGf z9$jNB5^soBM`{}z9L0w_;JkF57OyUeEtdJ~ZaLCp=zUIubgB&~j=nW z=U!(^J|#;2mdw2l@|TC>X|jR3s;gzKvd|>><#M(ncn_CvaT3-PYbNbP=fM6%KlZ+A zndo`W^~qGQB{HEW*cBUkSIL%P23LE<63Fic52pm9 zw$cB`K-(7}kNLYz+iqG%HwKx8hFy}+oQ!?Gc1fhZs-&(i!qLln(0R~e7olA789U)5 zGz6e73h>Ry2d$T3ckYAs{Cl=@37?VoQj-_sH}%UuGge$~(vrvNSv^N62Q95P=!m9> z%eA=5w$*Et_Q@^Z1Zhw^(}G)ToKR{!CC!JHw4y-jY(Bl8j^;2mQ*Zb(PV=p{h4ft2WA{<)>xj>d2GC%zgM#Hp->rSSfX8 zuTZ{*qY(S-HNN_#j6%c7nmLZp7%N5mpuDaYLr}at5-Y2Z)-}}DLs^5QNWB+iw8X{C zQeGd0LB>n!qBQ1IjO0yzrmcl7=--b)3n&mx>8%?nTJrXbnC{=JErHt2=YA5CASzZC z#k8$c_nL^MT?Z{rbRwOt-83rSt_)q~^++#p%CUk@^sp+FP5MosJh85=C87Ph@FITK zKuYk?;%5bXEr>CABwFyNz7{MBs1YgS7;NXvUVpp+d8IFBo+HH~WsUXGhUM{+hKBlR zX=6hqhE~XcHP(Bh;Wxnz!@8WC@JyZY|4P90396k!&dq#=Pq@Y88Dd`3P+1=-DIYMe zNkc;l=$kxmH9P^cydml+J<;=XzDZ>Y(&K%H;hp@Wwmfcuv0+f%;TsQItpj zC2;w~iQ`umMchQ(oDBwDGfiGL&@&I~OBmy#^E*v{zoFM?1>YtQzd7@JQ0I9l zEstNW^gNH~Jdc_@2c*oe%WA9Zsv-@Mczq<+Sk(|;Qc{JbDfG%YvYsEO(?n|&6;>-b zjL8L9=HuY6XS}H_?Q}Vf4OE+#L9czC*=#oE8UAgJruk9+@5UGyW)z_9qVlm7feb$vq=kI;hbq&km^++2~ zE45VG0~;fak$6PNw8aK9(Zw38OQQ|(NPRsf8yEu?cq_YiAbpCnQsP>hO)0RrSbDf! z7bnlvKA!zGlV7?Dctn}|o7>x3%wzlZeV)YpUJ%Sl(6 zVP3~MV4Zo>2rcBn-{DL_!{^!0xV5>+G*-R8zev+db0J_JwtxPRkY ze4KBVPnwT_XC5=tr@gSRARg&_tn+?i@+QMr)3I%_(yxk^#`QX+VR>C7URm3)*w{#V z8m4(F4K|S>Emm1lA1Pm~?FROcPE!@ryh9n&I6G4Ovj(QuE~!#!*%{OL4ojuy3{1y} zsM2x=rj^w;)-;Ib=jV(cp*`wq{-q*V9|5>^~KIg<@LB3J105a3czfH*>a=z2~ zarJ?o8Kll2XhF2j0Mcol!8E!M@sLN&#Bj(|(`6evt-C4ULTlxJ($kVTQs-*=5r$sN z%=xRtD?znV%dGN*oIIUpl*yxYLmB+K8KddO8aiM66{H{MB`?%I<}o~)Z4mSmzr}N| zqjrrM-|{SQc#EY^Q>pph-+-IQ7*bCk0y1iD_XcnUz;($1Wrh0#aJxFCiB(-a3CjV# zfMsn3>1H`c#4F-$@eT1roO~E-qMr#P&HNRc8GwFUY^GG{F)wOKTHn^LKv*>EWvMEa zIM-?R7EBErag&Fa7I2!)qN=2|wTB0(L|WzxI?Wv=eYljQxxX)=@soiMIqSK&Yie1W z=<~0RnJ3$6mT23h z;@~Sv$}lua*g72tZn6&A*6h3^3Qo!oUh7CxXu`T#m%`y6KIKAr>JH*q*>;Pp$D7t`bSKTG`@i$k+0* zjz4muy=Cn@y{2s(Jd2&`u5}5t7uqNb@=o^2yAr*PZItGihxXU-Yg44c-im8y@RZ)D zXP4}qr1AVzz?lXb`qt@|*6{JtcJ-yHHq)yjlxb!V;_v8NwG8q+-3{YCm&21UEV}?O z^PB&S*)opn$&-tpIHEkM~UDrf=tlp-)vF$~0v$KIzeBIde%n zLA5!@5u7wqcjjpi=%P*b5-j}og>Pw%G-Kz#R4M+ zEMq=+!*&2^cJe62xNEtaA7pW<$EytU;SiG?YVb7Afh)T!WK;$lum~@@0WgMZ?>q;6b z;}!L_)o}``#(rI}*ts3vUOnpabTr5(Ln5im%w852CMyg8`Zj8ZU#b)x3 z)wuH7>XK-UqC<>aWUs0%lPyt(b}N(Lga>sd>MpF){5lw?aaJ?*&U13c!#X9dupg`; zj$K1i8aG?j)^HA-iYYF3^6(QnW<606DQRe|kHld)k+KGuMOkIEW|5H)yE%0FL3po- zktm`zb(!>lO{e~pdu4WIH72j5#cHAz6(%iY^DT|ml-Dk0NClBm5jmz?Cd;FVl-8ET z>uT#7>#9p?N)|=L$XG_Ur74Y6mMn?Z*2kpm9E&fH#!5=@Dz|zum(&flW!OZgtO9T8 zbluo4Rn=1SNE{D~AyJL+8DVLR?U&-suxizjHq8jHHn>HW$xgH?Q%;_xlTc6z0!TFw zbrAvDDC;rG(pX*<(W(gLsH!bdF@VvQrlhe9zi^ocqM9L{M`bU|( z6;@Vkcr1!Eu(olSc${R?PhrT?-E9!9`+yNmWF+gRF)+Iq|mp>e!BsVR?R z=V3#m;y2OKEUT`fO0|sJTD*~`AyQR?>YHZKblX|FibzDuxV^=d(hf17tZS5v2;7){ zv4f?7tF5Q_ToA((l;(`zQG0@g+7qY%Mx;TvLRB=@pglr{6y+IgWU8zzUQrTj;DSU; zj6Gmw@iKVeD%Ar5e6Eg_!Gb{L!)b)_0;DNPp$Rcxtf5?3YmH|SS5aq6RK1&Y%gNl1 zH#t&f-BKln>B%gkZmD065kgn8j4hgn{Rw$mGbPXr93olb&D;`b!}lZ_SYTrMw|hqFxA+Fi<;K{RT|ZsbxPnt1H51ipMDj<4V)p28m>65ynV zjx1N>xxi5;L!w=g4IFvt;p>3k)hVlvFG}>qRd6tlx9gG?L)t8phC5QZwTyX|0bk@) zcJ(b*bSv;&Sz6U=o>$^|Sv{V)$x+j^02fNGsdstfjK-}J+=jzkMkO`wFu|R?!NrZB z?Hbo9xQoBYA&x&Qq49?c{)T+KW9aJuj-wNI7WM#d{zA!nrsq2TIg8Wie-bOy(K8j1 z>hJ9D)%!v*n_={<&(F{CO<)F@&7?<%3q%;TXMy_Tv+H}G%C|`zh3#E9x^32>+m+s zFN)M)s%=*)n7eyvdLIbZ{4%e{Jl#uEU_}WR{Cb{^xw)5KtyeKKbL4yzHF7kx&2@_< z((4%e40GcAahlQAAmagJ;@-|cEH~Ab^9*P`9)Kr%y0jEpKGS;(-<*T-b>E}M<9Ns~ zJoFs+I6R+#|Nc4fiF`(Rn+)wBG3=8y-6@97_kNcaPJMZNgU)H1{&Yict;|b1)1+m1 z=SrR)zmRjb=6B9ed7v|Yp7V5`^G%*9ZWwO}ZA_nKOve8L2@lrU_Z|E$BA)CiAZX26Q~@$FE!1bqEvbJvC^f3|a}F8?x9zE4jguda)iC*=G@ z=ec6AJg8&pIw<5^rSn{E^7z(F)RD(O;9RR|uggT6qQ8LiQ%(CbOKUuh>ll0bxlL22 zo+%sc)L-UJn$OLa*6{Ic=@%v~%`Q`U1)bY8uiFj1udb=I0q2*R_D(~ac|OF(_g+a3 z*hZWw$?Kzc8Qy7f-_5dpedZo5%VtAw)4cZk&44toz3$79X4>a>CN1+WX>G|e&d_(& zS1adiZ9F|i>>NJj0mIj4x3nkze-LS2{X)(|d`6y!O&PN?r5ym3$Vl&`yM^Jc+T+f`3vgJ_zU`q=RxD? zFxz>7&(PtYOkP_jFYP6p=JmJKcZ>n&&zjFGhSt}9ESL1D{yyaVRp*a%rsbObl3Z0F&;>}Bdvodh{2YBl@_L?0dTq*gWK*TM4 z^1g~ZlsDbyy{6@T-N@_P=khk!U&){1?G5K|$AW_AI&ibS%#%;TGvD^(_xR-bR6HY! z-;=;wanhfGXP(e*YQuH-`n|uIf1iakoXW-H#smn!+rMcS@-JKyKuFrer67a(nx zgGqaaw2P5e#5CWOl5$)Qe6hSu?dfVarvo&ovg*3lCwl6-upMxtk?|U&)sbI@ zwCjr$g0H%k^8(TqX7I@8JRo&B5z<`x2U&;dMXgZV+7zP4@`s zZc}CQ*oVmaIB@q!+W@1RhIM!n`1_?@Qt_9eM?MbSHnj>1X^Wo&_l&c&r>!qx`96jG zFRM1NxTk@8)hTK2>glt%XMuYgC)E0T*I3+(zAYHZ?)fO)U{{``0QBwY2fOlNl zf~tQ7esLpF)8EmIi!@o6zau@D>D~`P=(~v(-+v-KpXpfsb|-rJHfp>57w{9^w0&QQ za7=}Vc!On{Kb$O~JMm`SW)q5sfvZ47!ptP}C~BYeC@|A_u_%6MFSe$?ueEDE?w?R^ zDJuAzEv*&{8{vCmO`E0C@NR=AX6hpqk$Su(H0vf+rldjh z>vf{ma>$>z6z_@n8eU#DvrUv8W%+4LG71n1 z%_rMWgIyzr%ukc!r%5S`uU_RfmOYD%^LSpp^^0^A=_6DvI>JxqE7wOT)-lpg*GTi= z7KccAS#6!&-;(F2iGdlY>Lb`PkGG|?uu=Z>vMRhUkCvA#!FruL3$zuE_S0~~15L*x z5?RLhX+#W8HW+j82wC1(Kb`0+wjA%tF-=jHMVfp+4Ma|*P&(SmPa}L9>$si3-!@@C zjY>8xEHaPtr=uJn2T9-BpKji8YaJOo9q*@+H~uI>>kYqO>$SIf#Th9dM1R}(X;m3~ zp;uL9H`b_nPxRBth9R%KZT)Ff29j7DA}2WUUoY*wou5X|Z`L&6J#bxZEXtk@?*V>KCz~-qC3T&ai3T1PduNnxw0@@# zN~bDeY;l)C>FOig0cGg0zuU7*Q%@-uO2cjpLsvK`9q!nQRZ5%eHYg3f<)ZqMay7c` z?x)i_!-35TQ`R0S>2vGil{n0)ZFYt~Ev9y}U@0d$P1pNOKP|jUjGF|ol^~s*er8WU zZ7SawwmetWF7?`TmY-Jq8#_xqiC3#!_r?sf3@j-kEin=ci#ut}0oc>UEXh*vn5R8;rP9OLpSe$n5+S8rdL- zjST7TUh&&Ig_ir@u%BX(@uSF3JAWPzVZqQi_&6N^$m^ z2@kHq^FM|s_+O8;gVbRV{;Y%-)56GrjcEF?dm7r4`7^^mGfx~J0@uay(#3eWAVY!N zWS0r;@%+N@95O1K#!|0ruDQZGi9Nn&nHR%d>tT^|g6k3LWAu zIK(=#{|8+9j_b^K!TnvIqRD)JNOcpgwChpJQ13PsNb}6e#n9hAG#d_a= zT@x;thSd=N2_&mzGyuzXU!XwJ{)@CaC+#?Zev|kq(w3#&1@Jj=EBR&*hj`45EZ+dP z#wq1F7C9He^8q|J_AT({uN%=DTA`W+C?nE08D&80mbSgji(%PQu&~zsjI{#Z9%YH; z+B-Q4r0Bul#WBj7>0R7Tz+*o#7TVseC*-A0Ya6+8O}KopDXuJFxrIP0`JH>1hajb8KKTH4d(u!prM>+ zx~=Fqf3i7b*6*VBikc{{Wnkn^&(n0&QScJM(|GI+V{w8{i{#08h*O+4eLyr%^T26N zOM~!GO5~2?B~EkNbVND^q~k=VKi$`9)wqWfoi-iK(dUoykv~p#+H{ofkLF1oM)=Yh zY4Jq@C4HnX9r*{eILpZM(SS!rno&L)e*}>ENBh#)E;6KeKKwDOYNtDREQJaM$FlYHr(KK)TgRYpN7-GJyL%bJ`@VO@sJ4QG@W7kXSaXmdN*+E7s zzw<~RvHWS?$dw04{UaBj?Z}0*oE*7E`TVmPxx6W!cVNgkZu^4c~)EKZm zXAO9+kH+3%0KA>y0=BawjF2`vp*NIj`ztLa?IOz|2z*v$PlwXd+S}Z zn*9|>IrWLd`xCu=Y3F=hM9~GW+dz%8YLsOA@fo+`*&7u2oNaDuhs9E6?&g{3lR4MQ zyoLJ+?7S%Cn0*f08hzR{eS5}k8CN5VxsOk^qJm7@?FhM~?QjD!tsd|2?3O?8`a{$M zu~+JzmOlx3a5B#947Ar0reIJ&Uh>jGX1+XaI7`oLX~W7^)$DaAa5uBwlAfL>^FDz1 zV%%tacz+vzQiVU;Ei)YAE73~wp3R3Z0KU$5`yOuwSjL&Gob^GU&|TN`JjF zOkHga)6ztnSW8fYI1dWMIB1E)R zxFACUDyv2TyEiNIir8%E!fLp>8ud1N#`HcfKN>9QQ}F(}8!}-e;^2XI9KW_Z_kz`bae{%dv4s-YSxkj=4SGoy1iM zqH)aOQfcI}Q{`E(kQFV@WFJT+lYuoQBl|&emEJwOhgc)-jOf7i>d*~+vRJjN?zDsL z3vLGJ@?A5X)355~CS;XI()FEpDS3ie6ZG~9C3y>7sCw0EJs!w&mg384yOBZg*|9{A z9Lo2VkrUh4(ae|d-Yq;ro2z*E*YT`J{)j5LtXUOpeEY118C%D#M_>}(DF^)JP3xYh z!| zWXdK)c6K%pIy_BR+i1q~Lh;3w=(0FXTY?|rLpJXTxg%!5_CvhEp7$Ew}t#e}!7 ztEH>mSS{0Yoi>{;-Uj0&qdW6`8q_OzZ!$O_wwWnOYtqhG^o}n3tapA6a_6Sc#Pm!i z6=N)D0pye!&3rXJrd!ayNSE6(xaR{?BI;U2+SE|v3yBj{GmG%=vc{wXf?bTkdJsyUKB4UvhKH9cLOUHv>E z$@Bo%4>oUUfBRbX&McUM7v1;tclXJT6*GfuL|quzELS~4Ho{;_V=4w>=joe=mPp;% z*0Lm(QNI9IL0#eppIeRo)QS@qOSN_Mcla)sGHtGJE8@jcAM<7@%Cpq3SGyWb-`fk- z4zeFu`Y&`loUdJua%MR#YAvDdfw&@P4fe1pe?(tPPUJ;(R9f5zleMhmQkaG*Znr zsB=CSkJP`YfU%5yYb9{zuQGM^H27Es|D)_xb`5*edGrrus~#S41YV?2-+7SGM2=0K2%i zE#XV6TwGP{c?&O3<>InNY8x#>i)YKUK{mz$G+VB8yeFucquFX>y?QpYR_de859L!Y z9Qpmf>A`3Fn;wV4so zo+Np$y>Vv=R^xIHtL_(guHpR>#%JR>I!D%^IQI^Cp1>i(^$N}sxJdBXgv*u-oI@C! zyUd=nTt1g#FQn!@LeforRCyzbQ`fzUJb99bKQ*V)NAY<{Nqw}$+v78uIJ5mmTh$oi zu-7VD?VW(jCoVc$WZO#e;6c-e)$<(lJWf5&GtXN~URB5ODy_(*O^`HCo^4dR+=4=j zn8@cPwHTaL9k%5&Hq!9cX2WAU;;^^LJa5luUWHLoUth9ZS=I?#O4}n}cv! zw8o1k>_mK39ThD)oTQ$Y62W{^`HW3CxMWA3r|}t+6@U5DiEA`SC3i7#+!e!{J9J%2 zh{KkYQvF=YXA~4EsTSU4>bVx1Q|&&{a*qZZQ1lf(x*Z~h-b;}>R1nW{(&!fvUsfSy zRSL|#Y^vT-K4T9buRj4hEtRUvcVo#9C?&j<;p7W_8GqP7dU64tefoEbnP)k7KnZ;y z=_G+cLvr7Z(q$m|-FLu6t9Y4@?)_4h#xQJS;zEMwOvc1=rsRyDr+f6_=+Q9qNKIok zdb5VKSF@*u;Nkpp{u?pBmvOsZjn7lWVRfe5%*pwCuG8KfOJH8n*0<3&As25*Z<5b7 z?ivI#%m9wIVI-cOa9ye=v_Vz2hi*IMjy^5@4-N0ru>)GN<}`(jel(a^Oui{vCXvI0bEQ|Yjo z5<3EMQ7CRQk{`QJEgecSRG3DKjfl9KD^l91HXs|>y&HF`OAe^T(;RIr$e)&`tSl8D zt`jeFZ)h- zN2{<;tg;q8gTY4ZVymhWI_}4f@g6?0a=c#?MN^vUXk}dGsb5l}b%YrtoZc=uqL+t$H=;-Z9nt{5sLM?wNFS(+2F; z!!M51>1*w@E@%UmC+}g3SJz5Bj=xZ%?XAF94_rca0Dd0<<4s(YB%UH9`sG$^X(^*; zNAR5a(Nt-En6=mBjGw4``3Cf+`b2j-f=#_;T|JnYVeW>G*Mh5O+B$Lj?b3NeCBq+} zXWFsdJJV|KbxvlR+oO`->DduHz5WdVk=!w8Y;)D)2%6d6Jm%PRxs{GrXW^i~+8>HL z3)J+Bg9moy;xw=Fixw|8McLklb)H9$+ujU)$l`Hx81I%s4$Agc(9rv3Q>V|F{uEsb))>NKKaX!vKw%)0R_=Z}r`k->^JZ7r_l=-iYHm z8plzRKQgOrEMV|vYo_iyL4&t@O_g5?89et~VmM=Mvn)=TlUS4HpKa3AU@9|>yy-de zhK@B(sv0ZdRD~7H5yje%cb+k5=FK)upC8VAcd@8h*1u|(FjkxCC=>))`R?UJ$ikHm zT&mm~3Mha_-yeQVhrjn4?{gY0sPp5L5$Eiizym8!vq_`P+!K8g@JYw}y;w$Pz&voW z(5oWOcQ{laaPWP0QCdBO961lE<)CgIz2}d!4$4Lx=IZ(vc-8XE$Z?ua4!p;fNS}Ak z%D%f|05A=$>z}+-_h;9^c@W&T7g<&pH9KU@Z4LpQ#%Wr-wjvI+R2 z>=6iUO`)`O3AX68ES-i)5avBfb8_VUSm z#>hX$hsR7@df`|x@toAWypr!dfS~QI}o;-nt6>2I5jmlMO zk@YR%fLcSE(^mC34Wf6|+Y?FVl$E5Z!vwP9+nk69>Ydw?4j)us!gaA3KhZom#U*J~ zczxN(X}M}GbGk~>*nP#ps5En`O47^)owk*IJR3_8pIa8GimCF<=_$pt1R=&M%x)A< zb7D%;YSkT<=5&;mArASlj$-SXQ&Ezp>uoI8)ZLtn5*nP3f!WKE17mgORFs#_xsIq$ z$}lIQRQcYm!sY~&;G^j2x;L0pPlA^i6Lk^C?S-kU8gueVmCHp3$xI|g>BF3S5}IYW z-?O$pieqpNcR9eAWaK&<08GeJxbo%RGcC&cDt)iS{>o>nHx9L{R`n)iS0{ZHqn{z) zej9_!X3VJ%5hD6*M7TKfKQGO94H@BrRmY80V>QC|ll2TQXH=(*aBNW38^2s!QqTAs zLmgVL0l`5(`otR|51_H34;jr(WcWg*6A*Zz5B&gbK>p-i_WeF?M&b$D<0s>Ejk8nmwGB8lBJpqTvEhhv zv8p8t#En7fAgG*?^<&uj_{CwRZCq5!0QBtnV%e^vpK(JZ(*yF1*_>_#{LZwZpO0T0 zMr6ro_fl0Z5Rta4oe(vx-vLMt@xm& zw0JbBphdeukDhIbW~mc;{HC(u6UC2XMa!ZMaR2Cwx|Ug9I&U!&J7S!Z8opB1)G$yz z%REuDzI`GMBEBrnb^BrFCpaBe(YB*-)wSh~IGCv=S2+7_NK1wppX9eTuK8ltC-|~j zIjAGG#B5J+xGcTIc)lEsYpmf&qwF(R<5*R;srhx9t5r>@Ir1^{LG{F%+IIAAcDc*6 zBhr*7(KmeJIsNy(t};E}$LB=k&r5D+RwGVbw7fbNm2TgN2>`E3v9Z#$w8&Cz3#oXl z396#iMysi5<@F^MX7?E0_@tDDJB-aiCTS7e3ZIgWv&nYej+^0A(ipylIFb)H#HXZz zYi)(qd}D=$!;mMR0eEHiv^u~sA;QteK!-H z>46!=2rwP-aP1|q#|FP$+1-sjHR=Kf)gPi!?Cv|h5qGf}<94K*dGhdY#LW!_=FS>delJ7b zYE4k(-6`euwRI%A`uivo)-xz4@GHSn7LJDl7B54rXH1y^NA6y-de`^7Eb))M9ZiRI zsaqY?d!3H9PTzB`gIfxFx@1R%dRNog)TwV$;d8#z(bXEqi%6U>;qNUl_P^OD_tuVG zEDc;YLHG7u$n;EatSXmcLc(i^Yv&4E32J8P*@4@j7g})AuOEK~NU)&A`)-@!jd0v0#@?lRQ_y*U z&(Q9JMpJ3@Y&k#u!f3fx5C zd=?}Y;d`b<<%}(E!B2tBY-=5{;dtk}?;wOT6Tg$y(zh-_twB#t(8U?tw7;1x zZS7OByOMu2`=C3Lq$z(wv$|bywBn#!xip0U4?@${DQMIcH0#qz6b*j)kbm$+pxOH+ zdGLJ*pWcmv!8{8z$IkL43n(u)&K=bXX=`@sKt}l&5-a-lm!q!#^G($^U-sf%Q>MorOkV3c z<3{B;OzXVHb+Ck&Kfl6>pt|=+SLeulr3kHb$q1U(G`eCZzu2#M(!Fpn=+c~%rPInM z-FDzrbSNS3&(i4zU`qBG2qwop8bX#%Hv(}d7ho&@`-HqdOQ#!xDQ8{)mozH1BBX;t zXV5y^+7mqsj##i_eOqU1>)I82&!07G=Ir@%i}sp1dqs0w=ZXzQ^H;Pr&7ZfTWzNjj z_Vxnyml>-Zeyad8!{pjpx1+dQMMr)gbV?~1;j{?4^4+VT5uz0GS^ z^!Bu@zzs{yYvXIW`r_U2S~FXm8LeHt&WwuIbuIhMn%NDRXH<0k5Wa2AE4rEwTh)_@ zukXY?zap)Cq?HIFXU0M8&WuGHof%7=dH7g{hnO>?b~XMt&v9lP7_F;_ui^##3heBv z!+LhcL3`tWn=_-j!P#n4&VLhg+?QRbbPoQHb&?}CB%gNfg&j;>G8!)qCnmF8hu^!& z=kD^k2S39Xxr1oBt+QoCQ+L~n^-VpUxTI_58f?`5uby}0)FWm+<@{N3 z4_`bSkKX=n?7Zpi6()Z^`iS>`e9*NoXB{;6<%hO7SBEe8;f%X`+ScJxF%kHnt$#o3%6DhaJL@{@Mg0@y(KN!`BYQh+d?(bzQs_jfz(Q6iv81`s3%4Pmg^0rzigGxxE(@eYre* z&2U`OIn4cQ=dL&2`{YT79nc>7Nnoo7!j}!jp{1v91^z=Ds{Ds$Uw=-)k0U>KHXU@s zj8Cq)GW^PLx!c=1+WJ)H3j&uM``FuW?sd^lcP5W%Zn!yo>2R5Q`&!}rq~=#G9y#mE zqF1I}f8W%TCgfhTG5oXaA>07vR^}|3Z+Z8{iP__?dGnM7m%e(zzfKN?pBOPr=C&@$ z`1}i3UH0C{qgxxcD=KQ8xZ>dO%X!0OgvdJYbx+^%!HLgbcF+*-o zyB?jmvv1YRw$66=uBUH%YE)DBoDX-nx#iglChQaq-@Vlk4CwiKx?4o-sadc6W0!Gr zcHZ1D`tLh0-#0gW&u}?8a&@g&?R4A=kFWjPPbY-yH%$9#(~N&@7v4Nv?%vk5uvl2C zl%93lFYC@NoBiR1*FXGBXY($_;a?AxpG}q6(9*5C$-4Ykj(Kg_RiCdczGp-7@ISp4 zesQ?GPaTA4OZerXGRrsvooP3*p<~{nj!S2)`PY@-E?fQlZyyeSK2&DuRejhrEb1z{p?cM| zizhFC`>B6?lc>A?*WrS3!!+|+EM*eyo>!>6<;!P&`_QZT?;Uk=docRU*zn}xI1K9* zrVPiS8Rr1{dRwIi`~2sTH?Mts=Y9L{&71YXzDM5??%aBq8m#VbYc;xa{`%PGzx+en zZa?1m+~Yrc|BeaaT_+BcySsNyH!cmCCxvhKQcd1&Q(ydcyV}Rz=v(;8N#V$_+3}0P z$S%2`{pje^?pw9no-f|CdB=UOTk=l$*qyel@HvvbcPfsoW+n#&x zyzt4`72(f@vN~D0$>uGmRY`XaOKiVa$ee`u-fAvK8?UG?~>n5Kq z*_W3k>-RaodApOo$~)(RJ2vefzI(XrkbQM)n`Hj_i2MU@Z#%HBiVc$&1@|LvA-Rvbyky^Bb^j#i?px-* zUG>kmKMlXNdidO(?W(O0-TjT+Kfd|o@18mI=gv+E8He|*^RnOnL#rR1trN1u1e z(GPER$-Vczb=kRZ9uQvJF??p@&O6qP47_~mo#)I5{{7zY;R~hcCJ(p&a^qw@iEFtk#nb+3%`b?s?<6yqm&-!-vV- zgG-WirH>hX@q*}$=U=k?pQA5)c&p#vAC3%{8I6Ut&wAw&!Xg_i^FI24wD^%_pVcApFVN*GZ)oQnm9k4b=iR{A6p(ieBCgaJ6bkKOEov$ z^7!c2?hH14+4I=(A6|KO_|oBWwsmw!&I#Kde|6%N5jUOPR)2dmXUrbqO&f+O6Jh6g z3xc@Xk^N=Y%kSEB>q+%jti0yl?VI;XhEExe0cJX_Ey|hPy6n84{PWu*{#X8s^WRzi z?wPxXFFSIW(p6@)QW^WVliIH6c>8qcuDrM3JbX!W_@twU&)wOpe94BnlM0Ui;>cC| zKL17kr%xUEqwu1n%T+zvV?Z3htWHrlZ}?U&;k*wXFYkV$v*?^%cAB~ImPfw`S8fr5 zre2)Q71htX^0H@gr_{fDd!%*i5$(JECA|N!TO>hmo2vftFKoO!FFfPRe-&K)`kDjI zT^Bxhi}LsCW!85u1Xmyai$i~z^-9snyI=K(H^TdEQTEPORsF5@ee1jSLoPjN@poMh zTz|qI`-LZ;JgoHVz433x*(+~!@2D@{Woc2)M`H_q7JlfIVY4Hk(z#ysvwIHM`ioO@ z8%}-cPyHuM|4->(!VeFhy{kPjM-+d=C$aMvzLIv_^t20xZ{wEzUo_-{Xl;BkuAuL zdoB9=)UsyV+m1Q$x4$c^t}b8pe(M=`FAw+JGpyoJb5nfHTic&_U2tu*bi1b-uRUev zyzq?=4x7D&Q$Eq$`)eOKbVbv&TP~im%}yO(-~4p=uHj}ah&kD*L-}(Br?21fn!UDp z(%6T*KOo;*kPKw0f&f6X8j!zUhH#?_ zEHb=-9gd=%>ZeDq{K?N3%zSFWOQrGBG5z7%@6R1>w!I(Yie}#{7a$4u+b=Dw>-g8h zuRgW!(Qm%`_V%BLYyLmnRZLbGKfC0uLj&7?b7{@USIYPJYyBBeKvef8Vr@GL)iWL2g&U#L+NAF?D1{iypVg+T^mn5Zc_1?;S>HpeAhH};u?K5 z3BF~o9Y>bF{L%$aRQ+`IxRxEy4>;$4<2ut8E{vBI$7hw77S~i(msZwA7Z)#_T2?Wu zXxYMj1eiAfn6pe0@TDm1bFp(=wi9w^Uo|b+iOn0>B;Z`(FQdG8aaBoKDR%CojLNDX zT8=JeE{fS8#e}a!DVREZU!zgVZ*S{dn`n)<mDjH;13$uLer~(_h%FD!BaQncMzmLc>p=xb%VWws>bW%*3X(S(V-U%xPDY zF5g^m-}!Hkzw@HD!voG;$ZQ&^w5GW9fYOq(14?R(@$PkTyr!$KZI#|}u~ec^^5Svf z)RGddq#X;UB{xz@0cX>(0gqEvaip|rQ8bG4r-N{cvw8Y`thR@~x5B$?*BLVvM(I@H zb;^1^!O~-ow&O@Wl?9 zLT6e9>5@Cl$H#;CHR}Roa>l&+Kjh#oEb`Jhh7hiy<^>JO$M?atm(q!N*N6Ase_?V6#FFXq5f$5`Nntou+w|tqmMrm>5(kA?PM^7*E z1@WFR`84yrR*sLo@Fp+$C#Nz$kab9*`@)yVc{ef!|Ar6uU;G#|iMs>JFiGg_?~YTS z&T%<-DO!-^ufQhbmH0TE{GI?8*JbXkF`wWQh2!mVq_e*x-q_uWHxT%Ri~2-I7te`{ z90kcHau`*G5AGXSP?;ZesU3IBm#O*F-n;AEEzI3ljgKJSn>8Z0$nIuCV0R3K_ldv? z^zh~y_0u3)6$QxznXIkF2Vd524<^o-<*f0VIF%NcjRjh5OGrDd4j;4etIJ2Bx}gob z1z-j5>@Fo|k73cs8SRCh)Sd#JmG>YgpQ^{l!^oPvkQxuLu0bly9rIqQwDpPA=&^|& zsLb1LpsUSID#;TY@$vZ9_^5Uvb53=ki}r&kPcL<8FwzdAlqOsy)ZjdwZZH?-^Z;czcojab!r7nXSHa5s&^D;l_}x*j;GdVeA1-xwUKZGMnS1{- zch-u~UMqr6!CsZoo`r50_&xL)$YSkt`H_zgQEvgw(WOnf>=hv@BtWxv$NW)=VssNP z>Feq+y<{pCeJkF~Cx5d8KF+6oXDwgmb}n;&g>0%utcyG5Ma8BJQHH)mip}goCg&ZA zkL`BE$HQ#+5#iD9CCl7Lmbv?_a9?i<(BlY8kv5OMEHLIt#j;@ycq%<@3ZU~AB-fDR z2}ykX1{@EEP$Md+rNCQD-2W_bKU?Dd#uz||)pIGFJLcIG5f$5%nud=D%if(FXMZ;T zJ(dRramV}@s+QkvRaf59zk!@TxteS^0Ux&_WAZy^O@1J+Obqd;-Q6>0qwQU3q%YZ0 zx3ZqJ_fZtaWj70q`P?#=J99N-{wi;B!72E7ViG465i049ObCTY@!rcG#)wrqwpP21Qs zDY+?>O>P%!6c=1jP(WNj1b0-tDvB)fQE^2PRFp+QHlgf0-}n2OnX}w`6CnIvuirnm zuiP_d=9y=kXP#Nl3`FnJ9&n!%ClISmk-D)J8^W-)u?{h}Fxv%3@Ma`@rDjpOg0dB? z6saR&q${!AwgVsf)g#BC#EyN$(P#73tZA(`r}L@QSxAfDj1#kQY~(=yIl2`@p$WSC zL8?$a_ae}ZupKP*G{E*jPi`E26}$x zhu!6C5r3}4KR1!zI%7Lhk$N2+6)=a1q@fYkDbKnfp5ENkj$tizO*oG{bd+cAIs z`~@KVexPy`4OPJ&SE?cGD0d5$lS&EM!nGi~s&zRa7YorApsQ=dN2>MsmUT^iEmWeB z2*E-S?4J|9Kv<<#NWM~^S^3lhy9HbEr9bv~*WeWJqd zwl=rp%NK12LUb~Sew}3*oYMq$`F(Vey0sKX@1a549-n_2FBogX)ZKs@au2{^+^PGh z^bZuOv%8XA+t2A>YbzC|4e>>4!rDOYB9)%q($<161nX;7$A~S93^ayMGbJLrnkwSuLUd-8G1R*>%oNqu&r)V;xY-+K5K-8qo%aQ)62wbwlW-Hz1j zRC+wAc66TIp%o9Ci?cXRV#-nL;mVSOC++C56#+gHU0IcSRJ8J3NGr>6+zU+~p8?Bh z2DE+}6|OXrYD`Zd+AV=PUk_!J50|lDwWVDy!@!{#VS73la-KA2MJ+yHU4fmnD)oI4 z?#(MiDdDTkkjCTmi`4WxBrSC77Lw9P!iiX>!nCiJLc|wEHMO|KCsb()RQ#h0q~`Z; z+|g_HPS-#yVx&At7{2U&Ay6wHeZd>H0zdCQjW0b)^}_9TVHejr>oJalri#?_*1gG| zT9sNY?36xWKS?7N9;(pT(3tCDBtb9Qn*wCt0y6B3Y^=2hp~+7HlFgrAu)N#&UdsrAiCcj3@{8$|rse z8PG3BuKy$bjKbipn()hYN;aob*07L`-ls8 zZ&ag^+v@{uqBHhlK-c;gA#aEYQHA(C;Bp zxbQ7w0pJV(E{X!mu`N6|AoIGUAlI?rc*0Aj7ixC5tJJe1$?Z~HN|m4$x)P^kgzvo+ z2XE?Bk^20c6?N@vTJhAb0~fky?;jpwq}G54EmcgG=t}_(eL81H}bw?5#J{;HKjm zFnNVAzje+E_;k(!+%8gHFWrY0o&tr50f}mc)rU?|&#rpBu(e3dMAeHP3$9XsKnm)Y z^>g++(7?mNhL2x|ZeQOS_E~} zYV*O@opoX3VH-Nr7KVIy8dSvm=TT=2H?Y@@eQ!4w>By5jM|Ab7$fqm8=j3oSHx>{i`1bQ zMy*_S^6HMdRUN2y9W9-_@EXZahyn|uLT29i8c25lG*T7?=7-I>F02eP%>n~Q&uNlY z0{w;}_4km0qk9&diLX-s6@K=kir8^7JFD`A9nX4TudS6GG&_6_^&BUFw?A9VzT)xq zTC3OxL5=NV*5)4Bnx9 zOlYMrF$i)hm0~Litj~vJ!J$yKm|Q^nvX0m4hL~qB?Z@qykwD8S6}o;s+nRB}5$9B( z>ezr$XWyXAM&g4SGtRF?dXc&fr5iecS(;d0B2lOw4-vN=yINe^8lub^Hh{)Ve*msh z&x@IUfo-AKskD_RhkDT$i?Zh4Vfx^<((3R11HZ@_noaQIsAn?Nlv9e-&r4h6ltJ4d zTxSa`qoH`guR@tKT<;aZUJD7)6EY>^<)l(s1 zFi!`C*(`gtqQ=UHRsR(YOzp_&q{{yFXg4r=~Ez!CGirnvVMr;7M}D`{PLw@Z=w!fe!W za|)tTXt!0ANcb}D06Y6Hu_z!0L6O_E17P<53L$TY2)w=ltc1MeEMenjTZE>d?3|cz zIvXJIlX1UH-#~c&$Dho6Q3~O|xe9^pg=H&L1Y^PfN;A}z<9VzKaAFcV+AwKOVM;Sd zQKtd59*g5n$V^sDq+DgVmXpxTOiP^%TItU9_2d|{$kp;8De}PR zUrM8M8%64LluC=VUQ*E>h0KNOp^zSVdM?Hd^=r+r*q{8uNBU|NdTel;_8?hsegrr# zRO7M?gEc0&5InF9%raiKUTIgMXZSg%XXdDQ)_Rfp-kk9Kw4=EEga#nADvq{5&oIXe zQ%>p(XvyK?x*O+Okm^7`-FMxlhg>Cc9u;L%#(7z{_6EEz1T!7jQihX8Pw(ClDGbLhGom?GFY`h%gA{yGnB$)lJ5VmYFU@r1ug)UXWf?+7PAmJ!~qX7 zW%uGKst$XL+P81-9$06Kae zJ+Fq;W9R?d>YK0-#G8v{PAudf4uTmUdWUId?TLs%14~8RhI$L@H#HZWG=NTg7FVn` zY3t+)FRVE{HY^7h;Tx=Ev?(UQan6S59EzdKbK8O$6jtP8Wt1;X`xBzwgEF+6TihVV3Q?C6#V8Yu){pW~tWYs=#_!9~#R~t>29@Fs4~6RGkoFsz*Kjz$ z3};xOJ7msy3F)4rrio~|^sJdb!SP>_^i51z2lLhJ8u2P5>CkcJT2$$(_>+3tC}NG` zM2{6L7qTAvha5{qmYlOe`da7gE*LSV6K58wGAb%_&9YFvgu)Mec88oxE`HlD%Oj!+ z9O2&bpk$5&`D?%$%*vd_s8TCwRkyFlt%dz(M;Ae-L*6(S`om-MW!<@!X^)xHWX_Z3 z++kPL%=Bz&Lk(NXkfE{FzS`M=j_-DC@qspG6{$5^8~VCCmGZzFrgp?NaamUy>n4d@ zA>)|@W4p_?zkWvz zYl`|xtzZ#04!{Yljj{-9JLqy2UN9xV35Fg$+a$H^4sebs)%NU>LXmPHan6$?u?8h| z;P=^V=@~VDVVE`LrI2vePw@obI*tQY;Z!5E>{td2)-$FcQ#@*Hk=p9_3ec(Xs|Z$y z{<}`r#QZrd)1&?wN&qWEQl?ow@qa=7LRAr^CPyXGp|8ONTtH$zAZOoUTqx$H8{19} zO)lgkb$S#J-0=F7m*F_$%=%mghF$_gdQcRdnF;qKIe0HrC;IJZmhrIJTg}xLHWcWu zO3wmQF0FNI8e4d*w@S5&^_Hw{YSHVoZBld(hYAH=6ONF_dP_GSg%KVA#Z~+g8RLd~ zZiS-L2PR@&8}kB#=!wA;d}&y&{?&AL7(Okkn?`efeXePb=@7azTBUI+V*MJfuyB1< zToTPaKZ-NdVb5tJV=y(fRxRsEZs!RxzMYu%Y>_DYKOx1`)~~=Rp3Q5*>R>US9_0;= zA4k;H;sCpVJNSds_4v-L^~vCFgE)gN+E>>?-MY&q@)QE`i%}iqarn%qa_Z>%(@0IKZ=j_S3*KP@pV$3t!6bB=y>G|)<(nIH4w|~ z7qG{N?A`{B!OTc2dzir`u)DbWXcn5*3(5)qmexSGcs%+MXnCJYq52xsVonpbD-^o1 z5cP12NrSEkt!l$Pi#OD zr-~wuj#{-$wqv44Pt7jNRbk!(@Ra^SH8x60 zobzx4B2J|BXoKhMsGL3(bWg@0_1RF3)k>wdW8fNJe4487>)g=W9qnh7Nlm{#us1kro;odE6TwC2a}}d3!<@5^(SE;dTlG1uMqqAq1eZAZPg7e4Ok?~Fzh_g znHpFh8G+C6t&i9rV-?df51@474|b{sY_Qf6`$NwXh+L$;;oy_BzJB(7;IlW23D9n{ zdo-NMkKem4G(n*cmkRIWhT6reJtSiMA-gkx(gbE+85;CbILuB<(?{ED#jYcmwm$+y z!3~OuJrnjk9a#sg1>3~1c2zP?CH0XCW^d9`m6{;({v+Hf$wjGp;sSjjC>@RhDm6rHo1P}3xrpO{5RF~kc+ z_@iKG`k-uVIx~}e_P}XrU&Nw0*XP1=aN1~&L&a4pCAh8&6d8l=Q; z5Z68Fih)soR=-6i8HbE+wpXGHZE&aC784*D7xO#YfXIb>czIAl}W z^pI)8xekJ^ZUfGa4R5xh16&xDLIx(>VJO?eSgHNa_c0LRNXu$nZ+~AmxO_smd_nAv z{qAfh!zps?{P7juu%;1RI9zlccsTO9+VEPxz8*JsG&P{7x*SuQ=nu-p&zx0mZVxlh zKHB6c^RfsN9aK*R)K-`ne1JWTS-gN>iW^|VyxL}AsFy~5W=2ul(rs^%u}nlU9Dd(W z%4;(^Fny2lW;d)}rYE_$pF<^j6@MGL^errQ-!Vq}^iPUvS6Gc>5iYoZJ9;%N`fLLG zn)RpRN@ZBPUlLxmZade~NRhf@-3s_=y=;Rr)eG+)dIq7XZ<+ey@|rX`rg4@7wZ$%V=T@3J|}GR+(FmS=Q4ioo7d@n$Tt zY%}M&a*_HWSH-1F`+Cs+rd|~KC&-=}xrj=Y#(%fY-w&GI-1=?#ciA>4(C8(*I{P*S zZCnGF4bGJhYBaliGooE54o~z6@xejzK^Ka< z7_O(420ay!qa_xqyl7Q4jTY*8&hZ~d%g_1#$PT-u1>}lcp_&s#XKS|jZ8Y=P02^|8 zbAfHqoOLptCw2R~v`Bx}=rwBlnaI{Ke@hy7hQ(jS);{b4Gn+7_Cv^(q3)O-s7wk4S z)tt-~>s+0A9AB#P>uIL>cn6uxi5 zz%{x_NaYx;MO8DJXwwA8obLvnX)rSVF^23&8o^ zdF*OESMNFB!u@*w(mECrr3hJ-LPsRSB81mRLEoiZ zDtp8v*3_SfshyAl4g<=2C$@7}BUT=Z)TuDrVeUkQatpvP_Akt7MqAyaZ|%Sdi4wUv zTq5??7Z%6?l6)&IEvEvCR6f#V)i``V4Ho|;zkdBwM+ihCV*FgKz zz_00w1>lDk0A|vRFS>g>u`IGte}V^~i2}5=RK(XF4Gms9`~^83X>#gUU|BEC2+vX> z_lwhfFFWu?gV^|rPYU#{q99i)K`5R>Uu|eAR5|9~g|3=~~f$?hRB4LADlZlI~sZN^zI~%@8y! zhs^y2Cy1`^n$r>CQ#+0r4Qklxe|HXZ6WM1A$xh4H2*o#7AkQ$hdIUgS&Uus~_p+QP zn9lJlaHu*SE=fmP6Bh*pT{GRwJd~-_vh<|Q4CkHVH8uurH>cD18@QJ`MdRxo3|rk1 zLisdH8P^@Pv~cc?n-}Lv+Rb7=!%SXO2*^Vd^|pVkwhdZ42^p{ULm#wEpkslxG^{14 z)I(CT$64yerA-l}T?gQo=F zX_j$p$o20XV+(Yoa5EnS^bjDzrxNOM63aGQqQIAt5vzfHtPN&I|>E1qXENBHh$;5tUQnPP=RBgXFRSv_6! z&BsdOkF6{+gKuL`12SvSImo|9vMP(0%IiP7d%*8dRZ99vHeFf{<2|Y*X|nnl z+Km&eBX#C@0r;g=*BStHCh-BK8A1SshWNQf0ZQ0OfGrg`TLB+TO7?Cmw_olexo*;K zLC(yEIodZV4dJfq@7vU~c?ah4apVjL=n-(8g+Q4MKU&t!@-0>te3jR;EnAYUD2dP= z=b*7fgxF_kh&@GGg`GA_;K#HLzUb5H@56V&y|V3j6TZGwsilJSTv}X)`PN9vcuS5V zWeBYW*>0&C|Hz{bF!766T_OD5l;;1oQd4Ut;!{F5zJrH3;b>kJgybj|6K`3w1`1DQ`%AP20d*rM~^Y1RvnmwTj?%S}+Kus}{4QL*VOMmSgmdAPAw z@iYR*iR(WXvp4w?gRQmy!Lb*Gah;Aa$qWe*8sAo%c)sDUKn^5Pv4e*p*fD1ZE-*MX zwT$0i{_o%aH1IzS{7(b_)4=~U@IMXwPXqtc!2dMxwl&b~e%5JrRP&;7n@SFuU!H$J zy;D>an^3IAf2Cx4ZT|S89-dV!P%baHSbNKr_ z{w~Mg75eGKn%ye}kg-m@+5JNBR@CfXrQf~?Xa-Y11n+{tNi9Wpy4n4b2KX`n7`(tF z)=46WImZZH=fGz7uNssbFj%S+rV4LPL9_eSe99^uGB~AqMk-!hmTE3by`fbQpE`e9 zVMqz5m8_Vax7ezIc}{9=P0T82sF+z$F{7ZVd17m`vnFw9!A(QE6>uq)o>?%oyM1VP zdPc#}p7xsVrP=*T zu^+=Aik%55tgbnG9vNT;xT7z925IH}J{k>4F8GKj># z1ThRwYId10-Q>Dda^0h0UI397@ki8nk{F_#8O?54sc*uU6IUtF2y1=&vCKT1R+PMK2V;ttqyE z;%ZCrJEXW;DDDEq8c?jMK8X~+t0^KpdWvaHaV;peS&Ba*#kSIGYDLDOJ*sACPxU%d z{IRBp@aQStswtiZilSyag(LU8~xIoGAQyGG0Q8(=lwRs9tTUR+H-0LbV1|13!B$sUD}PB0PGkwVLWT zLG|mFDtm9~uZMlmzB;sEb=BV@)n%G0!iK6e=BY2B0yVpRlcYgs^PYMbQ>yQow8_OjgwwCWgl9f-D=U$?iod67VfKA34p5r zfYg)+@=N#Cq)!DX=e-x)tc#hz5o4;*sdm0(ImP=mr2#pd*YxT>u(SiB6|P zp)45^5iTmx21@ijpo2sRk6xl%fCCcsK%&i4D!Q#iw;~!8ZpS0Bbqdt$q&H6)+J)j- zg5nw4#p3w|5-H8$lxApGdMg0h@$9BB26`!rrqC}Mf)pVpD4O?CkUM}0f*?G4LH-OJ z5adh<(m$nQn-%14M1#UTcqEcqkp4_T?nNR6nP&t^0$@BP*+xkWc!nf|iApj+N&X5{ zkObk;OY$G!fF$QYlC!5&?68tNifB-H9FN3#+Q`n%Wn@nPfYQ_(BRda3w6Pr&CX^$? z#t0U*v2!WVlfVXn5FWiiuL1`I+693woKkUt73eiYgTfnlB=+c{xiGV6-b5mWX)r~z z2LLRY3n+|%&L|mzL`!Bj1yPel5QIlB$Z@~{K|VaC!FaOc5kdA&hbLXSyMRG%d4;;0 zSVI+Cxj2f@p7AdAhWGXm{no z<*kT15K-v^0Y=6besUtgrs~}Ex5wy=2Qj9!9FEsHc4#+YrXi*+Rz0oUJGdOLhY}5` zahN!TF*69@dI%fo+&|0;%Ilu@jIJ!cQzi2Ld3Hm^U9*j_X~d=Pnyp1RY#$|Y7VfJh zmp6ry3J(KBpo^b|l8U2AKMN&I^^^7z;mx6>GCxU_`}0uJ+-TA*p``hKk|4Y_lvJsi zSBCjJkpvCiJ=(;DE1q0Q&mp?27xW%Kl8M_i2?;FX?|GY>eb?P4>ZeL-wDV z?4uz2$n1)L&#rjLQof&*AJUYm_Vm94$`6FnsQ2_EvxoLB91=Y}sJVLV-Ej4o=ISYM z_2le|$1O{blkDS~B^F%z$$+ING}))$4cTWk*=Ip^zoq#cY3>hb!Z6=7`hQ-NeD2+l zd`**l86;n{Bwr`V7d1(1X{;)B?+I0yH#G5A-VO2mYO%RDLHzaE6|Y+Q1&B_+s_C=p zq+buzT!=K7x|;JYOubl>&70Fu5t~!t%rV|!BFQ>)#5=I=rDJn^qbkv4^WP2G!!+43 zAX{K*&LzzPP1C5_$x^kai68K8h%eB@$ANf}C0xOoZHp1yg>zFJOGLTEM9f0F>BQg6PAeL@T< z?0y-$XkRS?xZH&~xGjs5o3}23J>0s)+Jj35Qy)CWXZvzt`^Fk!`#&|!E`zD%E&)vE zL1I=(jOmt0%v^NhqA>F%CJfV;1#`Z{m=2HN`Dqr+OIa{u;+eEoN{q~eUm+q~k5(A` zfV#_I>M~60`|L>!PugyFkLVUSiMc`gQG(=3LGs9ENtBqYBxe8nf|xH$%+_rZ)4Q$N zWw6AQ|5qfjtWOf%Gcj?FVCokEo16g$LuU#=0{|FInB3P%;$s6$d}qxQ^Q8WY>}Z}Q zB^xSAlBUA`4RPs`q@G=8j|1K4-D*bV)FjpOccdm>Jmn@d-V{_>R80#+(W`;epin~v)Nn+y!n1049nonoTi`{> z^bxsYsfIU@C$Ti71`Vmzpm7CiIFbUu%TNu+CcQiH?ek6sO9fdgu&f*RgqbubQb>GxzyyI6STOl)F{mbRWnrXd3ftI690@)oOJ zlJs;g&d4TS(Gsq(xvXT8W1{5nmN0h-!>)(;(Mx9L`|2TCU9zIa3MW&3HQB;7ig3%w z=DAqLL?vEHHtUjm%iH&sr*#e^Br0Lbw=?&|q^L@S4d=GPO3t;C(_2R@>lk)D#E)KBeDp_QPlvFlCM!<1!s2Lll|D6F z*sf&yVCQP&!KQ*erH-1wX1@syS|dG4y|%A&Yt67jHAC<%LgkUp5{$i%(xoX~ ztorPvmlPfSn7G3_B5vx4_^gg3=T9W3cQ&!y#IWlje)Kx}1#mz|=R!w2t#FG?r!h2#Yi~zea)>C;zuLUzXel0n? z6m#FnuN$(=j+24p^OfqQHiGk(I+@c1X^Y4<=`xvp@$FS=Gqfvw2 zmGOHtmCf$Q0fC2fBiV&&cF#O3h(Vc?G4hKl=4-)eO1jm8JT_J4x1^rrHey(Xqz-xASop~r`o=;KdNgXuZyfYUzN|Zeoy^XI{2Ctgy!Ad0UJ(-53V6np9nE~m=S=^%U_|Rys6tH zh8KAYE{S8shv@JL633gi?Q3d-r19=-Nz*{7E{T=QPs@mk_ge=D_e-29RDpV3Vz?m* zTg-TwwE%Nas9#c77mx>&#l&4NaR4GeCay%RG75LF#6{t}9B@bHfLoOVZe0$z({sRW z&H=YK2i%7xj>5yD=i}2G5r|u(^b7V$F%g!@Yqlkk@5Rk7udbGN-jLnwQeP5s+I(H< z_d!V{jDAPeH#*YqvRrNPp$Lq!H2xGj41NX^x63avu*aLOLwx90Y$P;j^n2>Ma9uWW zm4ce$U^L6itp$yPj{xoKG%bDUI~<%6Whw=V@bRTvnMN zK_|7F@ObXQGcomun|2qd)O+dLHEjF7T3L?Si)7~GEXN$3^8<)#iy`Yi1U#YxfD;1v zAOT!Yz(>`5i9jC)76^0%@HbR=_^mh$KSrvHkeKE>S`htMggMEwL&yo)WnZK6D5QhU zj}Q@_AH@@Csc+zk{v1KM#z)lBbzwe6XnbswI4AY7fD#An^EA$nBUW^9F#;Y5fxhfI zGXS3;fa}TI=ykx>20Azf_!}w~;kRM|evA$-L1LQk(1CvB&_NZ_Aq5*L>VW$hbLfDm ztqx=$N!@{n(sqrP%bUp(st|QVsbf1NmhQDJFh`PWlR>+Ty@+ zH3A;tMaXOTMmn?|8oU7~4G1Z3wxhxw$f)Og1tDrUY}&lM)4jbKMJkQf5<0jOpFTHK z{0hHD2R}l5n(xrT@9{9<`LGHdi%<^3ASeXZ$IJk{*G#U|WGsR*K&3M&42txAPi4f0U5cpmq2w6=4zEH0u-T|mIp@w#2qA#U@ zlmBK{{*^h65BRgj{7b-kj2FHVt2`MOzmIJA7#tTnvO%#B4mYQMjWT})Tx5*hq@}*| zLX7w@jgEV}eTLK2MNmY)Mt&)bJING9Hvp{6hTq>1#`Waw-4xO9fd@szOTZf{{(;|$ zzvIW0(;tzTco6U49czcOY3VM;Jrs@m6XH-Rf7Xw`;E^U482KZ3q=|NDPu0VCcoLx# zP5ca2&IgbN4EG|dCvcAj8Pnu|+oyJ+&~`c8Y%~8$6DuFnS^kPFG>N~Fs-~1X1J?kK zdt7JwyUBDP={=?6{*i@%CFW+3HERz`W>h|nY*B)McZY#TTTXcJ`AvMQ?YGnyo5L@jh7LqeicYOgXtAS5YubS^{=<$a^Y^- z>hU^(|4rbLDy0E_1Hfrw-aXM&u+CYPuQ78Z^4yscDLkO;%8E6qH<8;DXwnO#c%3LB zkwC#n;Vgv0!LY&0fDX|vt9%2QGR(zg9>!;CH->~v?dBn_EzhG`p~-x_S>q{SN?hI& zbWg|ctDz}@*x`%mnh;pBm}cGN8AC5*j#xEaq-VU~0f-t=(MGK*>}|&qkL!u=eK&2$ z8sI@2@{!lshI|;m6+`$jZAdE;A#t02wBwQZ1X2?h<0rI%Xgw0r%*zhYE~S0EVfwro zm7ii3CWp2Toq{YL6M+6yjs7(KI9)&9s~;VBBtAw2iE-#$EKO}=t4=0N{|FmS0HEN zd)h|Mri~C)rj5+sS3%wgIR*O;wArCBz|Jj#m^^5=k%$c{4^K zUx(tOyDta?#%3I=VaD?+`_B0&{en;Zn23qYgK&b1OxW=Koetrc=WLkN8$i-fF(&1z ziURy-lfq>4InB;_tQ5i21jYllHXwoX5{dE1!3u_1iSy-!3EU$@RCYt$`x89DU&cGT zU~V>3;yzGrAKIJXK`_Y24QrtRTneL#G}+o$Q#k<-=#BG6!{GYYh`9D3qemo(vHT&| zAZSL69L-c0Bg&g-A=2Xz((HRoNi!R|`6UEknu&-Y!Hcs@Kw7<0z_bQH+^5IEuSPSY zatf2fY}f%}TVC~4q^QjyXz867=_pP!q6W*`sN6bhU+P1^f*LpjII+nE zzs8?)ni0vIP)y83wB>QG=1~l`9P!>PCK4jeACW0lS*Tb8P0@RVGpUuc5eDAyooo>6%eLBbmM>t=rS0^%cpfewR7-CUS~KPU|FW2psF*ce++jVGiILO=l$mON_9 zBC?T5DiDRFOrBw}hM`dzW#R#1HmITI`ys(Cx&qa2wZE|?IbiJH32KAENhMKCyh=fSuP>x3!0&z~-W4ugJNxis~^&-e$jODh& zcFX!SsSDCWbVO6-2^tIcbh6rVV`M1nR81Nrf9x-6g!F2aD|NQ-n`}4Y8KSo$Zv6S)swMzdlP4g*2~Zv*a)Qdz+1E&s z8Vt@^;EZl24;-C}cLmm;0;|-epAkJ7LtP?8&&YN&;xlylbLMe9(d_7p{Wf4hv9lkC zLli)0uFLxud?lcM{Xf1ki!PlD-T_H*P z3)0XXBxTRwx`$C*dAb(?k9=A^o}!6y6S8;)?mVvUVpbzCHycx6?u7~SJO9!>RU38Y ze;5$%ANG0>XW`cCUQFft5ciIhFhjC{>iq`w19)aB;Xy_YqlAZ$1|^UikK}>tUj#RP z!f;l#6-oN*weV^+c|8_Wb)r$KmOhl4LSx1pK=yCqr$!$}z@s9t!;X4G)PE3_prKx z0sOS4iAHMOQj}Qb4!i|Xaw?JZ)%0Z7&_n^yD=|Sc=cCZ@x|t)7x;ArHu4(G3&LU0G zI`vAH+VY`UMx*yn>d<8p530V39D0NJ0pI({_t^+%vV1P$!YrfkqAU|&1eOV(#WKeD zmgV!9J)31lgJmKI%RBK9mdT-a4t~J$vt;>vgfm&b5OD#^RJ@%|goc?oEW1myS@rpE zs!B0yHmi&Vt3(V|FTg`sC1>9I@dH+$2df!|@&ck@w_-M>_RpWxFa(su@X5vG@MJHVK5sj34-ib7ZCsoC58*v?$Zr=wr7!M;6N05(z$GqN0 z@q=%Z@oU}97L=~-mRwAbPcV@XY5qtRDGOjc!kCoGPa@3Xl-|-(nTnE0O>_l=*&NG# zfUXcOK-v_rKBMx}KvGRi9z$@9WWZwtY~o{hP{JxQ?tL6T5Va8ESQakP0AaDmP+Aio znqV?4mFeYY4*n7sA+znA@EZWFn9#B{rf25{%hgt8q0v0YOyEd97SQUlVrK2msk#i* z#Q0ZcICL(BH?6Gx9MT~&!GLlC_@Qcp_3wA0S~A6N2}DGo;dC}0dFI>Il28)I4Un_U zBw-WyThg^Ma+XVq(vqQbw+fvML;)auUgCG_WJACWFmx6w#I{9XRZB25-^5{5J0%MZ zthMTLt)v5y$civkGc6V2AcP~6GP+!V($X|7QK%THu4x)a*pd!LlvJQY5b#KoCZvdrmEE#y^y2~2sy zSr|tsXE+*+85T2QbMp`-<&hMu_)0vetSTzW`vQKTwKD3H8|h|Jee{q32`hXS<5>>? zGaF%IU_)#i+8pM0J$W0w%byD@aQP0%G*o;AzsAuYf%r7v(a-p*=3yS9qI1Fq0M;aJ zM(!DAvV4uka3nBz#70qQIXrDBK`K_ca|2tbz83M`*O*8MLkl_WjEk`uk8qaN>ktOs z1;ERyuyAxNleI<2iV+#?{E>!OK|+D(!En_*NDo(65(R;?p)iHyFLPJ@vq zrVy8_NrH(Poh8i{>W>kTuDmtfTfb34KwXalkI3hj-Ya37`6Q zx+`@b^laJd#yEUsED({eJU-hy&lUnM}*j3)C0lS6+ka@Zv>&}+T#g5Fn z7oME!CU?Xb(3-F7T;*>gu{<#W%hQlErNGN9Nd}*r48NNr>_iPcUR3!z&GZ&PCH}ik z20k});G=ot7CRo@q}?kIdxK2}90jzojTEzuz85yE(wVR&>jC!ayFke^|_=F-!=3OK#jWSM=JHR zfVld85b+G9vq@>Rr9Lbrk0c=VPGFY;KL-Jis*nOdmv1ackEJfdhw~W4HV(ZjHsYS? z7+ipO)FbHun~uo)5ry8Byp6thwF_9#yZS%rT|EYh760MS!~FRdeoPl@H^3ms9{t#> zA0NOYu^&Lzr2=9fBoohNE83Q+T&it1DP&D6s`CpczUnuxQ`;7cpl+2 z85-Ih+PwBLCcVHUGCZ^^lyotY(#(Z6LO;M;#>X#JY8M(Rdf&|9bv{b6X(eW`@@s~6 zRX+hV7@rUtyz#@iG>HPUe&oO$9}e?6i+NoLGogX`Qxu14Oypsgjf{K$kFHo|+4tJf z?WakfP@u0LIp~k^>9-~(A92&ZT9x`0P&Lt6`h@c!6ahi{GeAoB984X^<{H^^&pkFN zoIWT2=v%ea?2j4x`)XMEttb5~88oWb0BjOLj;Q{o$=E&iEoeuH>im&e$UDY3D{T$zR9ZPn}7u>Cxq(TL^WNb`VLY37aWAL zvb;d?yGTkiNw1RzpS-MqIh$#9iZg2jpxtt?9jokIC8rV3jC}W3H49v{MtnBamD>-t zhBeX#uTh;qZjUGggU^OGVUMX0;|5AtNKXdLsSLxZno9tNslSzs_YsKG zdA@CiHSiClifN*h??>2b;{k-dDy@wNiQ(;(_`eDGR{T5?qVg!I9H*%~#>}(U2ZIpZ z(V<%lEKK*Iq8=^ebsh%})LE8jf+l?Y&~9Rf(I2pwMTb&DJ|GqeY~$$7U;g zJn~qkICbW=X!%Qq#g+O!_L*sX2V~w?83 zk3dSL*io}XrDQmHb_c500mfU8AKlb)L}fODGsSdnDo-W=(}Hf2?OEyt z0G7%!0R!=wAV_N~C*hG=&shL~>PX%r3FJvI&r>00x9C2$FnbCCPsNWwq@NC$WlEaa zP|;5#0Mkqac;kvtm{Ed&*kOjzxg>h8p8EM06{|5JV`#3m@^qcaGno#@lMw6%9D%S@ zfO!a1zZZa>fvzynM~0w}5@?TL$h!b-_4Cq(%S( z9R`EUGb+2IxQ#BrI;mvQ40q~DDF6tR$W6JMNHzntVcRG?XU?q1%FXYXJ%9V4%EMUjasr@PyO-dZ z;o2jk6xq@`ynA1Y>@v2lMZhBg%i1zV^lM`EB=RmhC=H|(6YL321RcMxme`>gcQIWg z0>z8zVyWR$Xm~L@=X{xpoQtU>zR)=@X3vB#4#s$kIfKL(+|aBRPd6zX{VnEruE{gL zcsVk{tA~3zE69@Tapvb;Y|&l`ESOXKt<0&NNs{`yu_nZ$fL7y?X0-I)i}kl%l{++_ zGQ*cd7=R}M&|`e!WZk&D6f)8l7#G|K>?_S%uLDbKMJ`I8^}$pN+EFCX>=J{(YE5%3 zGDrjy(QAUOwU{j)>q1FpV+eL;%ZcpkLrI0;MWztVoX*Liv|?feVzd4Alu**7Xws>n zB-S%qjf|vblzdtUik>f28&3}<&5b5?gpxREgx@@s$K%Po`8>j-nbuFVB>d-jlUmMD$d7`G4$<7OzhI6t-YLy zxHMt(WJi*(%oi!aLBx7{5DVFMAWV7B!V@Bd?3pt!Fw(M+JsXcZ-)wcHZq7!&M2Y^q zw0I(@ks&Hd<@e%#_C?2M$ zts2=fCN9JH7U#wuOzJY%omu0hh~%RHlMdRGSoZ$oa{Xo=5c_xGK7c9Eps*;U0yh{} zG%dW;E?$2eF=58At1RO+N9kRx^>Z=u(nvpnr`60SO*o{+Pa#UwcnJa?^CoWBF8xrg zdvVI4ZiCs`MmzotvLqJkIi{H!niU{}MeEEztBFg6H)VJ!iMyV>jlRNP4lJnfzm^LB z2}oe-`W1)=msje?7w|}Y#+Zp|DXwCik!>dn-h{U!tULb{^Gk$clPM-S2ZE+aMYn5J zpG6QrUj`7>{S`|lvdUrTU5&)*OLc~85EjLM6#6PYGrA1{k9h$s_1OU2P5{@F zx6y0xSHJ=dK8FENL&deAQgID_j2eH9L~weie*8v1evb!ONj->WA~Y}0&L2&eT+XQc zrWWE4fTgT|#53^?#HC3>R9=iW+Vr6ALTZ|+k|2BCk;pzdRxjr7o>=uQ=JWyhA;YkV z;@GnRz{8&`4=hhZ`EJB{#BNK^bTX^HlM$Er=mKe_8el%w9t@6qh$9S7hnA?*N13f8 zJgd3%xl?K>S{(`IN#mnCL4PG@Unj+H*`Xq2q!Mki_UE! zDd=5{+b|CL0iq>1yEC=8MC8pkXH?#Z_bhf93H<*e{*zN?+J2o?ExIaIKg^Ylk;wLM zWRsfo2m&50Q!^Rf=b_EgZYE+C(5r8z+&G>@fmthIzr{4oyzbM;^PjLhHTd}LCz}4F zh-W2u3{O^^j0LSw#X&FsCY|STljjLM6EAaig5LFHh%8R`Nk(UCg53d0{V!5w?EVx2 z9x;Z$A22Gn?)hoJ&_d~YuG7T#Ge37-Kg;}-!Y?KaL_&biGo3~S*cT9fTk|L{643Z& z+HI&hzJ#OSoVAwdgHxLir-_#EtM`bxPMO<|ofOBpV zNnNaM0vkn)_I?gfe2&B%z{%sN(j@hk%ecb>z11@AFUefu7W`Tzl9%C@al>rJ(I@yd z@_9rd7<^vMGA>ggMw~jil@x}zTzDPQEwB8I&cjo;Xz)C5i`gE`-BPgc!eh9YmqtbX zAxfXKg#b_2@`y6LBa4oo>t7T)Qbjq-le>ym{Xrux%BD4rB$%A0h+2#pm4DRm=) zCYXHWw;16Z^|6%E!`8=1NR|3D83B*jA+j{(M&v03a6Ne&y^$XTEHH9<3wx8~G(=@u z^q)chEiAhFPk@0b6BI%pOe`U9Y03cOX49B)Yh?x*HXl^jAzCydv{PwvUQlW}5>~~W z*#$F{j{>Qe!QK(|v$b z1i&!><19dz4{%1Q+Ma`l9v@&+Zh(Ftpf@+bSw28AH^BKmz&W`AcKZMq<_7qX53sLP z^(gH8(|Q@WHdSCY+r zG!~Xdv88dX4{)`VMi#)ge1Na#7W9-U)@0UAQMEmTKA$Cy(~g+VWOq=8B|_J6Po1I$ z4Xi_kN?^Aed_)~th)y34QCAK`@ADCD)`+mTQmRd<<8)^tnq)ZIY7ha|VHGO{M*}{h z{wze>hC`Ihf#_Tx(b*c2H3#TuMML?wBVCXU2 z*JkG9CFZ^gXT#?!GxL<=#+;XD+M<17rfTcl>>F6Q<2)xZQo7dc%E!6mVnBCrc@dmf z%$-&~R?ti-w`fYsRaexFO)OX2!(J=~PR6;8dtkXb%Opr~q^7W(fZe%!w&vV%?wYOY zI(vIJbarj6?>nn!puaCLw5is>AN0ZhIa{^#_xA=c(*WZ*_q`n~kNH?00eEkBXWx$P z%Ln>*Y_IF=>+0^cY^b5QwzSj?!Ts+ja6tMHNq*?2(0R_9<(e_vgH z-(dGnGzr%K&lHr8za5m%`6&0l9q?Ct@E6|>xSC@N==IrZS#R%(&c2PkAs@gZcAQt= z4yt?~RcwxG=;`b1?KxLVZ^}JTctXT?=DZD)IKanR@OHq*``|@y2mID0*4l4gqIL#V zMrzu$0)zHsa895Q-Q-9m z<2@7_74My}sCdam7AjtHF#@U>?|#sAo%cRyq`c?BBIUIbDw$E^&#)E|M>EQc544T( z?gQ&ndA)+6yQX_nAjL+LH9r>P%>kM;kL%Z@c{aZ#&7=N@A?>(4{hx`;c5D|z)~)Y$ zHp?+5b}v(VyJ5tre`09)u{<6-EmZP&Xtl7M#}lw66z3_^k{ag;-a5q7#dV0MOHWd+ z8;kR-a~;R?rAyg!i1T1|iOb_L?mEO1;fq-H@_0bJ^f2N)sa;d!A=Q#M#`CF56nKvD zAnSGE@2o@TCkBolgi(!(8eT%I_udL&0EmWPU~t}POc4~d*O{Hn}09%-yu=gHHWbsl1D8z7!ht(NcT*_hd~XaRUgvLvtV4E2h(iy=8Kk6>2Gu1@qc zIP?s0%+snRAFa>W2Qs-XkI`0}L65#Vsdnchb)K4;8l=9^b>msOmNy>7o0B)1n&a>| zW1oh&w3KCx$Mp)8CfK3R7VPj4%z=s$@(#A4_%uIskRO`rho;z2Y%)S59E(jtNV>tX zQiP-8brIT8p-j@TRv=gvk*>wOkNTJPluiQb(ugsfYfjEaBmVVP+ zfsnStS^Bz86taeC!|SUhNY2Gaek{Hf5TdR4`w$YFiT5BRHWS-uQ{65bif<4&)Zcig z4|kePbx*Y+=M;o&k*`Bot?TR=Z0H}T-x-?g7?dtGeY5eN*--2Y2nm0&D-ja@VpkxfEC1yd z&ix!hs-E3GdfC`zHX(M24ds2>hT@+@NSFF25Ry`lUyP8{jM&E!(j-5IkS6(2gfz*I zAfzk$kPSH>M93=V0|;juE`5jN>|xsQhPx|B&SkjlQhkUZY&6wA>%NClNg|JZm`U*M zwFCW~8@oESqtJEi`vPzg0XBA@6#xj1GBg20sVe}2?gEXHztVAlTe}Wg5%A#FZ9 zcSM^Hk3P}nbCZRO{lpLb*bn{452Yoo`pIOjVEStWl9 z;cPS0{_z`38{W*W50Z14nd9C-02oSRUvebF~s0jeu&=$2wc1qAt}%J83;*v#<|;F zm*;zZxYKPYb{axbim_7>(ypK1Sm;vZw;DQiy`Q?yPvxF!J#c8Zp?E7oB4wPP#ONW( zN`y3jC;FjAKeWP!tM}uU`Jpzss;cAcdN=~9?z;o=i) zD8^5ub&hce=^SGb($2QXha2OE;(kc^p;uv(!j=0HLL#O6B0?gi^8`ZHJwJx9>TSX7 z&^8sC>HiO-&ozUh+!E(~QTpgMN|@+I>n=hxg#_e+iJ;EtS5R`*ddBNH1O*0QcE|dL&gEC-()W zHum)liWZW=(BZ$r-2NbQkmPrXgO-B>PTh*wr)^X8P}J`=j`P)U1ExU4xxr8^>+kF442Jtz8}EDyA=^>@1Yt(zfO`p5H+rCYM$9tdxR)@2<}JFL zFS=Vyx!g}P#Tq$nbY@D7-12=j(uGIoDuisK#NB@*^1?!iaWjpUkK1B&p>Ug#4soB7 z4t?K--0vY|I(M9+xxpsHzT=0u0qszkw&CU^LEv!1i!DKJPRg)uJyCFql;br_4r-Q8 zI+bRGYRz3>D!HSpt2>zt<`5kB8;sxHIf%;Mx2kinOP0WOh5obDnd=DIdZ^zS7&+IQcz%5o#225KO zjdw~wLUHrKEW(X1Eap=wR{;w7+~Syp1&%Y3VsYfzc!PtR5HfKT7#xKb7C2%d90!Er z%l&w#xFi%F425_2VYirh4@ha*2=5x%CWdg9hT=;@@!Lc3lWqKod6Si*PYwU;Xlv=H zt7&Sgt*KktQNMa^+KJ9Uo}%9zGo2mgeRrjff%Sl(IR<<~w1y ze05FrHLKfOI+m|#Zf`N1grfo;4z{>V8PVYQ$8u&lP;1ix!*V{dFcmMuc7m#EG<<+lf_Z1ftrE0;K4}y4ft%K{08jCV#>>TxH(3ys_9Syz`GZ=-F5UtN9Kb$5~jzL!RMbv5hx4xaP*cFpedB z2acr{7GXc1kv&S+QFSKIGCz;j5m%oB+}L+#;FeoB!v{S+TLi*teY&dAz@BJf!H2KI z5dStG7g4E$RVLqRo6o>9-O6fVTMX<;7PiDGp*JHBv+yKe0sk@8YT(-}ywQin%RDU0 zwFYjTg$v0U#p$Y(4eTiv*5G6fCT;RVoTnMM(*wBT?UJHfi4GfYWMEw)4(rvljl@)^ z!Lz}_L$8D}HY>Jy24Q@=a#Xj;v&rVkph3BXSE&mzwZ*{qWWcj`z(4*A@W<3v1K(@m z$Hyjb2MqBpP-x8(IX(aK_QqwXt$f(J=@$2gaFiJwsQdeiYQuhPS?6Hq0`ZJ90TWkz zU+BN*%ljgEKNI*0<^5kI{AJWHkzN2->(Zg8T)Y{gutbT3d>V{_U6MhZ!bFQTkDnl+tWZKF3hNla1 zz`s8S{DlTSW#MzT)+<*uw{@(jS-q^OzM~PX|C-e`?7HNN4tU;eaUPjl?&jJPJ8ElM z+3c^hVdUOlv@kb3d1$FwQ?sholGbmM2j$??Gp+ev&{ui~qqHj@!25jFvSUMUPnT`M z_c5+;`#|?uy3ONzWg!=vzz1|eyZNBtAugqs7UmS%GL)erql;nWX>YCVXl+~5ff+q$ zAb7L#dwC2H@7u5oE+)~=7<#;j?}zzP9i-2%s#+}gU&5Alh5 zngcueWvz*FA~aJaPOQYGylQ1rW34sXwv$`xJ77R771NyTG^k&vxjEBXSJbSjU$zo0 zGV{l>VZe^gAJ3V_%B|D$veTQ_HtDqdoM{{#==6f@^wzdjI;}7}t**I!b(@SwjxCss z`{`V^CZB+Ip}nYT)Viay;-F6J0qJEviF_PSg+1V>5JwOAX*{(D)Z5q8wBX|7pTS7Y2_UA=gmhMKzi4t#S)S2+@dSOIvt%+d*YVe|m^7o8h! zQ8sSq>gtevMzqRu$QM@udeH8XsTI`>bJVy)Ckt7NLu^qIyl4S^~;ph7}lytdd;$B zHjOnVlD4LPRr6Y;f*aDMWk=F609{>Q*VdsaNR6J53A3uEm9@2KVZme=uUP(7(7N^; zz6jdx!^ok8A{^qaZRAQRC+zsxhQX65Q`Vue&N7Vox(Cpak(T8PfGc+3&1A!XnQE4P zjDwCOtx)4==^We=mZNw~Q+sm5d~99<&y9T>yLak5lyTA+EcW+xW6P$t^Djcisbjbq zCK#U*?vOFHJCdt+Y}4(5bb^mKlb13 z19TaU*dsDMbG9t(1%>_0SNM+le>I-slQMctoI@f!TL|=@)K?AswH6+EKW4-E4yTqv z_?5cez<=Gs7+$!)DbweD)4+bq!iIREPo+;0UQ7@CI|lx{7C!eJkaW8OC#m}n>>Y*U zV8}9`^gW9Ua{1vk+P=wynIAsK%(aR=)29_;ayD$qEZZL-eyZtJ*!MEi>nH-R>@D30 z82fK7>RTpXY`Zh#gx8R6Sf;eMa5<&<4jF!gr<5yt_1V4Y73)?n>*!GJ`e}9W6Pss> zQ^NVsoA6FMU{62Vrp47y4V|CaJg^nQuw}4mKeuUS)MtC)+NKj|0yB zi>uuAg0^Hw7#tl*IJGZm?^#iUrrxy2XzTs>mZtXQ9he{Qkgi3e^fuXMqrDGcYFb-6 zmbIe;ZfA6Lp8)NC0Mm>{xV^Q0O~{k>WULYQY5IJ@|p1o*cbIw*^3L74_ zt_ek2zaG8u=sPH)jyuIK1BYEFdd1>1_32g8LA~P)4xwJ-JLtY{;fC=uEN&U^HNr@m z8e6&kAodf93}k-O;sb8+|1Q?Mz?;8T6zb=eaa@o(*7W+EiR3J>78mb@+&|UCB|2F* zmQrQ>SjKaWJ`_*Miq*QFzK#87*9`V=vpp_)h^b~9kPLZEkFp%_WeQ&jV+R7dOIt9% zA^2H4=c>lR?rpjU6$8Eb2JdPPCro~pWQ*ETvwb@U)10E$`AKiRYTGi<-MKN`y3_j4 zF!8nr`+eZpqI|Oz_SnJ`$9A=%yK{ShbElry@0M749F*92SaMwS2ITmcGPN~QIB!v6 zeyf^u#cV|*y8YV1B@mQ!fs_MF*DdzLxpCC4X>VO2NK8muELIaOjuaO5Wi5zW!Zv{o z@?nnAG~?pf$bAmJ8lZOak*iSkZr{|mu5V+@K!2C%i_>EjBX3=AvVP~_K&LG!#!o^# zpd;}t!KrGCUwp(}2;60e>%!23?_=;jS8b`=F_6TTN|etMR<$mdvd7cb9?#}6<$pNd$s6kn{{lL3b%dca&*p(oW`5gV92vyRs>V@-hfPp- zgqqKH$iBeBAx-zsgS169&De`ABa7o0gX7o?ILoW;b5$C+Dhrp>uAq~aX3SBERwN{P z>C=8h+lB1hkvd2kh4=(4-0xsrDYm=ajIW_gQ|-n$6GvMtQ-eM5{etT_@HHD>VB3Bl zs-1g0;_Scqtg~6=rESIPg#1viCm30mSXmFnXZ=Va9ATCs-iCJ|j%7l=vEHU?Ox{|X z7v&T5ISPxHA)Yk4VG}I7dJ8vP9~S)_2eK@ee9TL~`xgBiGk&Cw$QS>}BY6hrsu8$I z`$S6{VWvs_d2eKfD_4(~Gf)!WxVo;XeOZ0SnwoVoZ)1A9S?S9fTg^Nbd>VSPF~~#v zTLt=hhQsg4+Pp9u_+IekkC9A$YC@jX_-n==c@FABT(uyMc}~Jp`%^oH#Okz3Yqe>n zK1BVHquLGJS_?%G zZtOJBSFwyfGqXI4z#VH6`mL8Tt&1@ zVroMUnCmj|Y|H_}9$%Q&Cc=QWt)t@4jSuHuIBt~-;9b?j_hEeAR;HQycKiQh@5XBHMkpAZ5>L%_VSxjq(=TCH05ec!dM z)?aH{ZR>8WwpOkCzT#5rQY-Gi@Au5iy>nk)2*!V#&nNHRduHaGIcK&rXU@!k4xH81 zK?r)hXM0BXZ%(QR2fqfmN}NzOZc7X(4ki85<%cz`9pC}SGbkjvC@St7SvVF zL*8>t-Yd!l#=a6BEGyNS3W_G%+p!kS;XA{RUO8kRf;!uhShX_2J^iHH23$E#cuj}q zaTUHvle;S!-j46#GN(k{$BHNGWx}Fgf>v)|r^)f1~sxA`7O6&py&(LY=!xfEnk%k5F#=2?~hW(pF5Tf@S&6;X74k@|RJZMeRoEEZPb@Fx;Fm0=UELv`N!>TtBm z+3~8nXpLl2@zqasa5eX!G}D zoXP^J(RD6b>tNl@4?%UvO+J}n#-plmSwmx8IF8yPD;{MP7zJmU9Ktt8haZNe7%U`* zm5ZJU$JO3Cobpp^p-fH=GW=onwUMeS6PD?Q&5P7lM(4%r!dR$|NS5n$$z*wP!sXG5 zcq|%gjMbFY!geE-j5PYVamvH9%jQO+b@f6!+l6D4EGvgoLCu_atS;IRt$<6US@kh_ zXSr0@2SRfXf_D5!?0swR@3!EQK~;^OsXSWsi0(LO5X7#txt z&a5!ZZ)kt0;&Dckc8ZED&D~vz8{)=qC@U`yS8~B&UOj7#Dzl+(czu0!<9x}-E-uWJ zwH7a3N$asfU8(BCurBec!?VgN=x0z9gV^iYTy$@;s~fi}TE}JK%F4PpN*?YMXf6uh za5v8Unrezv=W&D!H~DD@SJ#4lQ!F~(NH<UHp24-vR$vhpOXPG;);Wep zUq!qEJ#e*Z0YQG()K{PeA(jQx0M!dHPMI%GCezh7U(LY*Wl)y-(709w2&gbFC z%lAxYy_1XCSrB-Rw?^F@VoNtWOHS7#F7%*CjE!qfys8n5kTXaUu(FB@R6DHB*G8}y zO*kY9cx`wdOpq9QSS91=PwG+l(#A6+JX&4ZO*kaW^laAPuBsY6s^Eom0dIhDs)2YT zRT%lTt94BbJ$r3Kye5JcfQBY?`bhln{BXQJTwR6Uc^2{zu2X3m(A7s9-BBJT0^E(Y z(n~Z%<7MU1I@U+>13gOkK})VfCmuC$l#U-BZ;Zra;X26#nqh8L_AdQ&iJi#0jOXfOATKGd(YQp-SBm}&DX%*^99Gk zbbO@&d-d^3%@^up5?xZS%j~LD-gJGu+TsoM5j1v!zuNTekBrbevO6Zzg@IG)U#``B z{+N1sT`G^dUS4nU_+#oNoIBI8mImzA%Nq?}!+KwKH+93;%{E`dcB0&p`{>m)j+|Ii z#X2IF$>sLOTKTLCwJnaR5fa~xX-avJR~sm;(pc7qn6R)T_gyISvin)l>K-pm1A-K_8& zOc*(FstMPW8!HO*UN5W?=7a{!xl|9Wv| zg=?X*x-$ppz+PCS)=b7lKZd^Rg{jx7GETrzTd2oE$MwQ%^sHh+w(K6G{qS~3l=BET zlAc$%-w-49xUoiB-K|SthCw^&opuSK?xbB+hW9)3hE2{mKec}O>JGRAU_T*Yu-mM} zNs~)lD0LoKih{t+{Qg$u*914v3t47DHiUV$W-+y5ms4^xR0M`%6oZUV4mtvZzgAtO zywS6ZWhl6)+{|I7`mTUIqzsb`WvoIj8J4BOFe{<4u`XN{u7jN*tV>GKlrXn+1cv!F z=Tn%(h#yd0qe7~1=4g6wQl^Dc==4=EQ;`IJKR+x^zkV}E%}oibsw zI!TES&=S8(NgU>nTFhZQfm;B`8>N&C<*0HEI5fE^g9A(^wUuBDW{PMd3=$?sK|79K z4dNt@Qp~W!u(u#mM=2vvOF7dHFUJgzhBz@du}qYNvg|k}7&s(`#?!}+1G}+_X2;34 z+p^dOgiY)uv;o_VGL*88U5VS4oS~$RtLvtvrju%PtGSH4A*`O_qy_^@3WjDx< zC-S04c@#5bRkIi;&yIsE`(r2>4YuP5p2iprigwwA>^Lgel(6J^h#d|(76u6)YKI#e zmzI$!(_QR1V)FwDEjJuX?$vW;oCsHTBfnkkxQYh1c2`%srgg>la66tX8F=(Y*kKd~ zf=CX1HFlrXNqLX7iP)mU$x4at|0YHJ@`u;Nuo3|!8n!6*<=AXv z?YtP{kE?Js#>5aLYrHRfax6YOjHIg07TaO<%AO4? zm&i0#?i1{|=vC@z-h&Y^H9G6Ves)|x-gyh z=?q0?lkB)siE$=GtQxCouo5aqaA^yZ?Rc@qau~U1qn~tpXYw$`j>CprUADmA>#BZZ ze>tL$Z1JuxIMo+NmIz^jOzrL!z5{%5xdH}DXgA|WsU3Ifl=6re{yF5=<9vqf zT}rhk@q497c%7!w+`MnCYaV2D&E(=tqbZ6drK&bk8K+CBsa5c|riDe|Rqf5q1`Z!< z7Y<*EmK71RVMA#L*rn)(*EM6YKLO*c-qK-kzz5rnQ{UWC){04wiNcb>Zbdg7Q>-rG z*s*AbbCXhg%c>6XP-J@SSaic_bZlSQ+R(nJEwL24g&2;#U2Zt&i}Q4h8<^G`9ncF0 z{Vw7C{OLhrY0I+J?dqs@-J|AOaeyOjoc>lE9QNDXq2`j3#{pIt%LN;lcrdxt?txZV zJ!IUJB0ua)bNQqE5{Z>fEjTP>i6>^klV`=NXypM@Mnmw@AG*4^eZ89w(!!baI4DHY zhphAxPvxI8*!C4l8WL}a6%QETP0DF8iWMg&AzK=$!a3B6OS$bR?k-kbp&x6Jos%r% zVOAIjFhm!z;&E3ioMoIEKHLhggDf~sD92iwrHMe)Hm#_jW%w2uN8XK(XGP}G7J(M!qvPDa93LZchB$~ml%mQxL3%3W{5BYIpikIH2cZA^~t=A?z za9}-Dd*{>}n3vV1zW~4Rj#GJ9uGmTL8X7&ULp?s zE_^n8v84aE;Ey4G%sOl6aeU9GbxUs*$c4?7`&0e~xcNJZK1{u}xlS_k=2$&9aaWZ! zR-5(4phKAP;SfiJXe}I^IIae@gr7h@#8;-i(eFEBzA0Uis46qeGiOzoV|kVuG8byq z1VXoQSh`Zf;k1D*CMp(|)-i3_xwz8iU>VyXzOq_y0}lXtg|WUo32tDKnpGVwFRPBm z8sg#EahSX?qgCocngH;JI)`@Rde-9oB2&llew=x?ycJIXjA^)9A$6{s9i<$kWa&z_ z*?T8a*f3;3=s$08?O>ItthymBzErru`J%xI8>rLu6gKIgVi9a1^RlKtfdTz1d3@R6 zIL!7O3}a7(Y9TKm+}hO&ObY%I;CYU%+8_ux*{WVa*l>pffP&FR%QAcwaPybHGb`g6cjqW1(Dnr!{0j?yNYm&EIF8-t}UKsDq(ZJj^XrJp#FgwYw8=hu*arc<+W z4RjQqVZsv!UbphgR?PC&Roz~(Oas>P#p+GEacYI;MxG}^s@ITcdlB^eB0t!J4nM9td$9KTua)7K>q4(P(|>G^lG_ zJraKK?v58nE8gCfJbJ^nDXVRO=UeBlv7E8LD`EO<6Yo91z1|=D_;p#c?qC+e8~NOF zeP3v)nz&r|&S~VpPCEsxd2zjqwWq-$cH5Z?pIg-qSkK@~>if=dY9c0Y^z!bH9ph^M z8MF$vNz^^Im48`z>>qH;471stJdxs%v~`bl74|N1?!kCcUr`r{HNaoB5x#S2Lrh)# zH}Yf3F163d7g4JGvkvk*0KVAd`28``(v!lS=IFBd1n@lT{2hLqo$~B6*aklZ%>3o+ zHrP|2)>FIr4{(+^O-eP_Wkp!2vmBbTswdE3f}dNoO}j~{5IgqBfY%80W*KI{U=E1A;azp!s@h5^eJijG}a!dt5uO%joPECOXcb=*y|s@MSesk z-HefREl_6)dBY?NARXM)+wTp|Zu(+oys{4VJNQDzBE;s07(6`FVn=ynDsS9}{T2?R z8d(b1<2Pf+IC0z%u+E8>&%vT2ZBFX^&~#uAXO_X4en&7|lbO>Llxd)b?`(q)nkeg$ zT9f9@JF1WCgK&5QcC6FuvpME_9@-I3;6yv>(-*MRoe}9z;C!VU-JVoU@2)24x~l7* zM2&h%_jf1zR%@VN*-Wi5*yp)?huSfldmvx{vHB;`V(20nb5axuy|Nxe*nCHwXTxek z$z%d{6z2l<9oSf^R>}JTh8@EAZWfJ-y*tm8$_3o~twOJs#%ab>?34~imvlF$!_mpX z99CrBO-T*_O{u~5Sp|&bP0t`r&I2-&?3d?QVLU<(2L0;ze5_l#t6CX|=On#&aKDZl zM@og~`|n|gbMfdfxX$93A&zy{Sp|cTySN)wrhz6M7(iT%2Wk2pNkPX~o;6I7F_HN; zoDVjfYdwlO1nxKM;Q6yGxz+f}#EP>Smsy+OU!iVRVm?8e&Go9L4MV&fo)0T<4+f8S4Qps#q4%RR z?r;Ydr`7uO3-CvsV^@p6ozlZ*_Eiyz zw?C->H3O#sVDIS4)g8)_1_uqOo{xDt3Nwxsv}eKc%6w7dTQ0XH=`=d-P~>NoK0UzX zXEDDX(+i02Mh~VkMya76q1Vf9NMrtft=msZhhZ8;3fPnW3!;Vc zTywL3(L3LXTDkNYJ=J7yc=AeL!$3(&nLbvk|M`XPSfN|4TOzZa^3_WrSNl|ge3V{H!=)agF4J;TAbC9zwZ;~PT_W6U1fO%)h=WpO9|_+mFKqUl>KfD-!h?QzMI-w_Ye(!@1x(}aE8!;pie5j$u(ob?4CYE2 z9&xY2`}2ElSzV;eTZEXH;)`5wz} z3_>>jLc$siQ003jVO+hX+M;N^T2D%ba+(u;$IQoY$s z%OPyydm+L@72%|l5`Pxq6;(oOw!G8lLh&8pH|8gM zoc>G8&BwPTe`hAsEZ|DL>XDL85)c$5*N64qp5*u60~V>~wlm$@g_ed;(?e8AFL3$~ znNubUvUi!HTkv?aU{rG~O4OkB>NnksxwE86eJl-7&C|pZAZzkYLn=giCG3gV54iVY zhtB===oMXjc&Gj^J)}NYZ6e|xh4GMMJO3x)o8uxL_{(x8^Bd`=;3?^d5Aoz(?_(hj z!q_uSWqdb%rgMN!Uux3p{o4EE8+X5&byjOCqI8XE2+wh%tD4)~*^Rq5XS$?idiLBq z;a}WtTdSZW(NJ5lsA)MYWE>Gngq8;+>_EZ-6^q$k`Aw_v@PL~a_vE8|M5!>w zM&$@;^6u@~t0_Aqimyq!H$eK7Fx89r;gMS1yO4)E3{iBCu2j4E;3PQ9-LtO3=VFU2 zyAr+MPsda$ITl4EtViN2=kkGCPW%4-QXpc+=p3J;tM7U_DO+5Z+;z z6hSjLHIdmkIge@T=9Xz0;x-0fczCuKhIJ5M7|vmjREQ&u!7VZo9^z8YK3OTac)=(* z%N;UQaJ9d`R_%aRy{jz~z5m~YqZ@93*AQ%0F}=ZFk0`7IE>2E_<25`b5Dr!1qb4%Q zxA?$T_e0_hv!PGKMM#vVlPU7$d391!W|UTN_`c0yRb}-- z8)nd!D^;*$>Z6yEqC!`K7sB6yR znY&Suf>L}p!(`dcoAR?~_%=73N{!@NN+)leNvGgQA)3G0I~sn;-5t@epgtDHK59=J z2{;-?4T^?KT|a{cZrsasyUQ?e*I!QcX_*EN2gO-Xbtt(k7pAJB)I^QHj|o$XmS~~5 zh1oK<aj5+6kIcdo-> z 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®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%0D#;?0njhp9_~3DKn?h97`tPeT_SJL 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 literal 0 HcmV?d00001 diff --git a/Desktop Interface/libusbk/bin/lib/static/x86/libusbK.lib b/Desktop Interface/libusbk/bin/lib/static/x86/libusbK.lib new file mode 100644 index 0000000000000000000000000000000000000000..f5ccfdfb550ef5608c7faac6769f63905ab5b927 GIT binary patch literal 1079964 zcmeEv34GMmwf{{Z5Q0d8fS{sb6HtL9gb+YWW=$qDnHgs$5GXok86c9)ENmiT-IvzA zZgs6%Tcxemw%Vs{wQj9-x2@&Xs;wd}^|?ITs$)!$%`dfo$`>rIt}0)+cyXm2UZ!5l%gPs*^Yd{;w)Hr`ZUYj1l`f440OKtwjAdOMnXdQxq% zRNp{He@%Inl{uv^+TGFKy1AyJ%!cURnCev+OOQZUdw+X#NBb755RM*5^=|g2Hng{< z0$ppmdpn!^+q=80F)@XaL6w6(Yet!ZrDcgNmTGQeScNGwWFzG)1u)DlB@m_0Eg{n9 zc13S{f67QeyuUM;)FsF-B#oK{C@p@Y)Up)$E#BYU+fQY!-nx6J#Q25T66LaGNl#6( z%pI!nxkI&qfUCBquDd^&40rdpuW4^(F+%y;x;G}5&G7gKmd$XvYK&0f8h5?h<*9c? zGKKPVH23w{0(spv;kpKQT{IA^A(my;P0JSZL*<}{iY7+jpQJF}YebThsbyijxH>v& zphf)7vO$hR1AQ$UeZ9TVOb8>|+`q1&xxaN?yeHKv1=0&;PA0mOwFB*K1ObzvNP5<# zTGxl#TbK=aM!UN^>YBUSI#Nkj>j?wxy{RNLF33CwqbLO#P@%qlQqnBwOsL3)jw~oj zU?wz`dWPh{usBiPRBO7t5jai02%I5L3YCt3n!FG-!0GZqs5E&XaGLZ7x>|jkWDZcA zmV%QA&O^=i^t>qWA5R!mxF@w0qQ4_>( zu~cIpH(C5frjq%YVgfCV5o+qV@E~ZA-B&L zh}Mui9jIt+u)ZPWs-eQMp{m^hci8I*`3c1ZWJmi$p;~`^AWW%bV`E2$-1QNE*zK-q zU9+}xZLcHy)eWIg*cJ5!YBsi`b1~4@Zx0;}hr+&K#9gx<{ee`6BedI7gGQmgAsDKy z@iZh+zNEWonUevp%f`qZtqDbZ(SWa^u4dVyU?`qQdVR|SVSi-V!eukOVfv*uXJO0c z{#4(xg{kJ&b&ewRcxr-?`cOl?zrM!1xvRMoZB|Fe=4A`<+l}Tc)rLm|?MkKE@Vvli zyF8JafVa-;@`k#zM}SszsoK{LbPph4XR5Qi7yOKXUSCbHt~Tn9L;^KP zpiUyC6y&mj=v%fxKgQ8fF^HlDmr#ud$*zr{z4bJAwWc}(-M&pW;Y4aYfndlL@<+84 zqs`O{lSJG`Q9TKDx2_iuaLd5jP-;V}Ly*9uz1^*@wzl3>UtiMQjM{^G;Q)uAh-GQu z+WMg33nr;=ncCDZ>l2zl8_;N8C1uZMZ*M!gdah`I*fJ^NR4l9@Z)#05`hgk)!=i~T z>E`OK;mcFKebk@Rq@nKSw!yK%4tP3J&0PaM9+Z9ytc1yga56JCm?J65e5^|Kc2k1m z{k=)=0D9Yqm!1QC;en2hNUyK6r++g6AuM#VTGuBjUhZ93Al+RlsSU)+fI}piI@|^g zOSTg7HXvDguXY-v|7r)vQyr;RR0dyHTTeIYG}~f>BnIti@8GVF1-1t2!=ncesvXO~ zKuUH-Z<<9)CQ5gVD98M+Ej_;=>%I-pU?mmEkHON~qiv9HeV*>lo{m&M$H*X~0Z?y{ zwQLaheMK{Rz|^!DZ>}zkG$auy_1yvk>TR?e9ps`Zjm9@-Rxi z#|OWzXzyQ_XzxsQ4{+yOwKEF>k#M-y;||v}#@)8MTLUgoMj%xGFRbURR(YShFG!cCxJshwCC94=Nmu4;^tX@s>XCUF*BLH+I=lyeR64 zMk8LoSH)`&TkWe4g`*MVhtgZIJm9s<0!@<7=ZZw@Vc3^d;IDF7g-l_Y9woHdqI3Ie zy#BDi*5j(9W|s$mY7|@B81UN19`0Zb2t(oeaD9!88siTPJ5VT5PKoi#WrQ~xaafAV zgGeICc^w!mn^704C|gjuz*Vt$+2Sg%t9;qwO0T?ulaH|V zkvg|88uf8l*Fvwy?Jq~ZsunK5Z+W@5V%g%wW##^5i_6M9WtD!nHEhTe4Ai^pXwXy_ z@-Ox;@cYXvmo0YrDk$D+7dTYADi-3mti0T{$Q-31-iSNu3c7+34qN4^T3l7J2$YK! zR3XL+@1jLW!{RF6vc(G)EU2jPS{gfV4cZ`&+Z~c&sg>KC0h^JLXia@>FyQev)Ela` za7{Z+ELi1S?u$Uq{sbK)2+F-%lV7^dNLNQ?>OFr0G>hAEj5|8VF<%tsdwr9DvR^Z9Ds zE?e4}ABX2;a}xN8nJ|`fCSzl{vtSwROgm$^)HuPG6f!yUWf4mZ2WOTn4o)%ua4L-Y zMQN}1g*@&CFVzuKXE-SH<0n%yIN8j}A}N07BrrA8$aL@{r`=3~CBG(LPNu{#BlCw@ zn0!#rc+P?59?-u~Q)=k+z#x}NV@6XF+&{8|Txnn{449uQlr5+UGJ~2hBWQ4NtQL?F z)B>ZR7zia@{pbj-qoD?O^$6tYKo`jVX2*9ApeKT^0y9w4XU4lXHHaY%CR4rW)XP2` z#o@=?lza2?c1+T>aW8;*>28Pd!tqk?k-``qSN-DKWHKZqcWk-@Doj1bi9 zubzt}<<>Q}j2g^nUDQ{HIXFdU%n~~Z{lU8WTCd-u361$-Ct+m)~l$E=}J4HrzY(7dn2_zbYtX9Hi=oz;@TODppk$a+v`*^!+S-P?x;mdu zG^HaGbzP08K3dn{_l7k!jZ7?4_;%(I%&|5^BK1LQQql||oT2Lck-89?PbKj5Gvu~F z=yLh}eqSwmsyY-6o6=7H8~TSpwZU3xL6%|C4BT%TO0iC>B7Xoi=?}BMtR@v6k zVM|OyO}#fz>vg$}vZYEbNt|QZ6^(r@R5R(nV~vC$n1gQbv=3I8(jj)aazX)&dSNg{ zmazI^;Xz9nL`sNE>n942Xx3mh0d|XqusWF;g(R0%R9I6#&D0@e`Xv<=#;gExK}Ca2 zePp}F$=9aPc%h+qZ*%WvnnX8%mgN>=mR^-irjCUa3ZhL{4KJfe2#?S#BBdoKiRqKI z*pOAa;U<$pJ<}Hp>1|rEXH;lY>>x=eLIS4~p<(i5-q^f}9U88|X*FCU9mQjS9mQk7d%Js5y_m6~Spo)XwKrZ&4VR$4ZkxtxpuMaa znx!(Bc%$^8M6_}$*BwnfWynn3;HU>H5h@D@=ayM^H`Ihw&}^*@Ij5^Y931HxRDm=i zeVHRfdgE@EIn@-S5oQ~tSvo5a!|g()xipyT3>61DY?&iWHg@$5^z>j&JS8Wu%vVS4 zvLMn`G89fwQyja_1A(nYODihskl~*v;Nv~c8#+rQMRUS5Lt#wZHda>5Ly}7tGFdd`kHPd z=%a2cO>}XEccR#okbSiv($;c2KC3F_sPlGCS<09ULzXhO70V~y3%Iyy!NOAh99J|} z2=Rxw5R?8Y#I~w@k$>_qG5hY}V#}2U;^#X@h>E;Iar~H3V(Yb|#O?*7Mg0|{g@5!I zapyVviW`m|E2{E@7=gbc{Lz2?NAK1@qR_Z~@Vt-u8-f4k8$pZ2F#ORI;pkWM83DND zVuu%r;h>`LXnaSAvG{5}!^9~5D-hN{of7+h9naAJ4+GZ`qA=~>Fr?_y{mFEoOpL#g zVkBfR_EY|i5ug5#QsVrhQrVloJTbJtG2p(}3)OqOi@~b z{!cJX^~u(C{&&o44Rxo(Cz=5p`g+zE(`ELBqq0xE!uK!S35lt#f7R69XS37hUo<<2 zS;4*B)AN69b$0LfFnu)u$j`eNN%?N<0= z-COOkr=6EHwIg>iI(OV#cQrbfNu6szpLCm}IcY(&q|SLo+7dq)OluAd#-hA^&7RL2 z=v8Oq1-Tn^7-4Vsn904+|N8CJSP%L?xexS? znulsOzw3I;FR%>%-kVkjooBKf_xR$RlJ)S5I*i1}A!zR0A}ED&o{J$cX+aulfYY6e zp%7`##SoYlyBv&gT;_{&O6kgj&JmIQ87!}KQu|> zaz*rurA~R;-C9v-G1IZj!BX`;$x^4>$ziX>v_UA{P6Y|qTNL;$U4C#Tt=i$AO*1xz#{nofS`k({CNCcGPx;>s>>}%NN^QlY`qWmQI=mi{Z9SIm+h@HtK%ik4DRY zbj;j^mUXwi+#)SS$9uyJ6AbB_`$DZeNZYN!Y#YZEp>aBcW-t^C46|(0G>M$GNhU6x zGDwVF9kOrM%(@4TGWBTD`Wrdo9j3cekZh5A?On z?eA^g(B8KiP7Au$ukPTJRO?sw^|sRU>h6}~*T8Gb#!WrRP1RMa+ZW&mE|OZ-CpY$z zgQDK#Mm~)&4}{_~kK=@a)Ih2&+1KBjYVQ1eqFC46pX})vSo=9~XXiJ4pAT~sL$bZE z`*UOd`7rL|)BmmA9dx`N$2&fsSh@`lTAvU9b~^X|`LJ%2oT{eF6mkF^1U;1R?R|A9>G^f=tS=RLZ2sHO8x=j2w z0r4nkJnr2520*i2(PiRS4a7O1x!;qU-+zN9Cqy;A^vT4JmVl%yz`soTcN=JatmrcF zBYn9KG)Cv;SZ>G;wo6Tfvp%mvM*M@zbFp|3`27QH{s5ZiV!8Ph!OBfgmM$B= zLqKz2A~(MV&@?H!Z2Ve4b8KU7eiwk|Dn*xx-w{CE1e&Lo=jJzTg%JDVOP_4~CV|G= zB&o5&9i`n??w6yvQpdW}o?>B+bBQi8!)E94BxPf{xLQ+Vq6+zoEUg zx4W-N<{0%w!KWKXzdWImaN9`)awnd zUQ|_9Hm|&DLG{9U<*QpT)}uiieOo)``I>y9wX;pk^|$S%Og6MGE}PfW)>1mx-@TVC z(v2s<&Qm%!u$LTZNV?ad_d4L}y$kutL$!Ccb_}$o`VcZhF@s`tTig0i&N|B&KYMJ= zJ?)>8ptZNZbgnnqR9%%ksvJ*Li2M*wc$0896#~o?33~$xI0#GDxx(I1AY987;Y6}A zs-FVkc;cus5X05if{LTiAtturM0peV@(U2*1d}J3hJFDk+f=r&jAF*?a$n4RS5yHX zfvUH=Y3GI^A&jR@+GMmTw4ug~3B zOKJ0lRG0>ts^AJQmaQTU(Ll%-13@_9^#+niQXDx~$ttVhtVH8*6lkE3_}0?7t6G0Hco^pF$Z(z(96KHz+Ht@y2t(T^YB zc3;>- z^>2nt>-G*X_h-{)=-29v&AnZ)lk@NoDkC#$-V|jG!{ujJdsc`6!8R!m6)$+#u_wri9|Hn8281(t_EK+>War#L}E~| zK-}dH`3$DTMu51>?@PJ^VQ(T5ao77i2{BzUEiq^s!=7Z^wcO{WJb3DSo}dx)ID@Fx zhdLMwCB2ab&TG__s7p46ePIv$=Xph`;<}#^AmMVmecq%y7FiL8?udzsV!S~SkB1tY z#9<0P!GNpWB*U)dfm#<^gLtGd?2U`V745`9v>_kdq^#shg(9JPWE9r^2C+X9^Z1e| ziWpbwcmib@7n2mzNd{e0Lx=<|W-H8O1EZ6c@WHifBB_ha$lL)2r5{cO<6?&5aG(K) zi#QK_D}|$t9K0c#h>Izpx)f@aFFck?rD|XWm)NO5=LsrEnQD{)EM>SBnT<3eSK?ss zAfkLL5zJ{AWlrKhMB#^7@iCt_5K{y*6~S;Tf!kM$c$8XuT?vZGA9$0K2 z8k*=zt}aA0+Da4$Ll*4Oji}o~i)DmDRHvvf#!Ao1Lv+PfI;74{rE^+hrDAT4Q8GqcAY_n;)qYkYu(FV7 zKI5$z-GhOieTghcivh-0^q$G5- zldP0pA50HLtK~V_ilwXrNwIQQ!WR=qsN@}Br9%}-Kn+o`qmejwJzR+dR7A{D)Cbw9 zLy&^U6=wAeCjzd7&(M%5R>DAII2cBiFiV{(;58_MeH0lrs7b_`fYFKs17;0A*vd!N zPpbDu4L-z*kGWQ8!5ZpZY9&AkHm&sf5~`MyohC(?YNdgLDPJ@ZbA@Ytan3iTQ)?Zk z(;srxax;=lM3Sl@(H3Qzm6gm(5|t>y)|%p)ZYOAny3k%mBcT8cHmr{?fTqWg;tV@6 zNhTR@j7G_-gG`soq3OtA&tcv zR56-4(xNW2(z8h*or^_62FG$6#UO>$7DQ(RHlKM&*ma3M93n znz3u@MK=CxgHXDIqqq=wWPxRT>Ytc*u}9wX5PW|&YIqgbeCLt%z%3>2mo#_~V~ zFEHRPPZ0e-lB<{u+?6A#J6lZt>E0wNft2)GyONB!h5_gQh$|^M25Cch8?Z2q>d~!Vz`e2 zvKqt;@E8q7pP|8Ju-I3F1F-)jcVaPC0ntN7O*BMXtiVQNMm;s6FVRf2XjMSXZ=Axb ztP}VY1QR06G6^q75qddx0_RDvFC>Q-R0;&nmteGMF}SxzYN;|1VwglEU^%$joXtF< z@kT?_NPUTNxTN$@M*@Z&-AQz=DHDV&P|>0-gmT1ueqRjb>SLCKA7RBCi7iwtBMq!F zRDp z$q`0Z$P^y{C{ZI5pr*z#9!C*}(IewwD&deD;KIHYFw$xkBI#>FvlcfpT&S3;%u!vY zkjNZDM&Mm^P)HpyGD^&8yoz?uk5)f{#Yh<(`2{W!YeX+d_7i1?kH>L5Jb?X0#}l1A z8d6Y<5Cwu@UK6Sq@}L!Mafia`SrsfQ~QO>78boGLqcXf0@dOAa52AkQG+HVb)QE>legfe7*q0haDzQCkH$$8M5j5bCsvn!;06x#@c z&W&Nf@<1eJj>$(FIMg8;#3dVo=7?TT^%NRZWWYmuzK=%nJV!%gcZzA0L8qHaHzp2^ zDTE>et@DGrm_X0BN!cU_sIX)X7$q^oL-iaNhT&eI@bW+m6GzL-(YzFv?1ushMZ&f8 zMGvB|n7&>JPdOOu`)H$?_J=f&J7>DswqhEhcR zaJxb%>ZGquYJD87V_^yPaYz%;%c05#Nl~Rb6HqFkDCq*#oOS?Il3}_Vfk9P7znr2! z0nxAE#E`%!`XH7mrJ3`gFH%@C4isEJNoA+9^b7&FQUW3nUdV;(Eo2r3K;MVkkCOcy z!2pLqy@a7IEI9)KLQzWy(wWnVOORyd4@1mGLI|RSLAj;D8Zv9n8M2mAmkChxHN)5p z%GQD^2@M%vMk8=SVN5FT1Qf$(Z$5&UA* z;qisc@CSmDfi$^z$U=~=u!Trsc7xTCn*AjD z6y8uW;6eTaUD%q~(UB}GD=X*lR2q#WeUd8mrYM6*0=h2C*+i4ACmmwTiP4%`2*9{H z!PbU)_N-$x*iu?XrkyH6rg|X$8?pX}BHPD@LAn&JS<>Pa%HJ@J*eSwVhX%t$X>}e>Sas=BEz`v76y{w0GrIFFE1XX%CJ4 z{h>|ku#spi5>%X*KlXy1W1g5%^Zfip)0aIOzeb3~44?7*?JsRI5~7{qjc>hn!b1xOPP_B%zx-%& zc+QzZT+Hxy?^<-``tL1z@#3vBwv;_4elNs54FCPMEpMK<>YL9MtXlBgFG_Y|W63Ut zuNwc$vTI*2uRQ-oam;gXufIo#Im0MD*9D8puC3lV^QL=eoH?=ZhRs48&G288-*jQ= ziN0@(GgjR)_uU(=#l8fF$J=+^xnWuI(L*XGubS7s{Tv~_#c=oIGkx)K58Zrz#UDO8 z|L(heLOjXvsxzMa!N64)To?a%;&YF^@SB-Je8}+sdVlQ7myWLqoHb=fhv&GHCkinG z#-liI_;5I zUidf_z3C@Hyuxv74kg@6NkMT=VL}f`g{M^{%+! z!$-iUiQx&{+*Gj7p%1<>XW5NC7ybFwspyPhFGz9TP19a@ zXy?7RU3}8z1y7xQ|0P#r6C}gmTz}uOtD9%;xP03F2X}sS+Y@r{NO9iW3y%9v-W{=; zSu3hXzCE_|TS9DS`i3XQ9C!7%m&|)?$?x1r_rB1#hZ+9iE$_XQI&_=M^{49(>Uv~i zCFH>Hrs zIValr@&hkEwshOB7k3}{H*BV3_>R|qJ88s(8+M(&efccN_z{M$^lXnUzNF=V zGd~=C;iY$+fsK&wGW>wwg-0JYf@ zI_(H-#Pl-!)Mq#Uc=WirAG}<8{h!v=U$jApPKFNUv*VqIP2hfn|D0)cXY!T{>1km+oyTlg>M~nTkBJoPCPguL>I#=uf6KY z!fCPBZ}+v0AJuUf?AYZDZ)x7~$e5Sz9M=3n@586Qb?pV%kjn6y8Fwt3^ZV-`dSS%} z>zngmpCiPp4DZ}fl>gj0cV0Mm*dOm17u@{}>{}6~XY=HqqrbcVvELqh@fn-0`Q0pR z{;FnpXw9~Zuh{lL$rbn9`|4E}?Wz~zIEG)Ef5j;e@7}fWvV-s3esW9VHf-Kw_+9nm z|9(zk;+)_8X5h3#-*Y3K-)H!icjK2V+gW(Y)*n|k@7Or)J3{=H;bWgav;CUR-RFrP zjo!WMgyk*RyvgvV-rjcZy=xAe|Jz&dp0fDH<*x}bdo-nU^7l_Z{ii?kG&Fdd-fa8o zk5MmK&?AAJ9VrBwr8fnG6uM!`!j%-XMF z`rU~!f1JK@Dav;LeJDM9o*lOKgzp~vgMyvaXB~dsuU`>j8N?7-+zj@-g*ru5u zo-z031F*@E;RWCSLG&U|`CDJV>47J^T4vS24l{g1@y?T9YP#-k$JN}mY5NJkc}a+$ zF#MTkue<7vqHS%71FEarCas1Z{*mG04-fzC2fuDV?8MDaKk}_N?||JKIfl}6-lVlp zUKTrKQq{PEtByYIVaR7b!~b*kH-2=+_s)!6bKDL09N4mOyAWSyc=*)=Prq^4`hfd@ z#~QzR_B_&@w0_z{%G?#Upb`aYeFoTJP6eE;!OkB0t}fc{LmMR8J3HsC+pFyi z>5lKTW{VEHbyoNFw>9@-J4PgY7b7%4@qPCnmdvtm)tD-QoS3%cEb=T&6Ey-HwlY`&@wcA>>5I? zM5eN*lH;U`o1Ki6#+n(3zjY|_Tfz+Fwl`#J+xSLaF5~QJBI3Tb4ap$~Q1y5K<(Hka zB9uqWvKm~X9O&)n#3{O*bggS?_jFFOji17dqMoU(cQ}1Vw+{~?y7sQFRR6~HlJb+7 z0=+R-A6XqjTwPtQpC%q|H~X;JGL=J)q}9?w|VD04P=0m7Fq`04`;!s=F-ur}R-|9u%|mO>ajL$feeF;L({lXK zI%1Gb?p%N*cxP@mTv70`q%V6*fPZi{KCDANX?? z2F#fMV_G@@hWQ_{NEGt{Febncg&`XHzW@^;@{_khdg(BIl3>TcI0LQ8)PKzV?k`4{ zP_(q(BQKSzV+qy?BxPKa|TqAFFQnx;gBsa_TpB}s~ko}{SgsYu+3UkSTQJry}MZhs)Mi;7Bv zK2A|R4wxs4s1{Sq{L!K!4^o32MSTk4O;-w7ifGbs4qyPZ3AJc+2_=QJG!2nOUx!u< zvsE!1riuYGtXvG3iBrWuPqG;3sR)x{SiE5vofnrdhsI6;I(spog7C*#42591Bug``00*qf1H&0a^)4^fq_(Aq>VR*m^TGgM*1qHaJzP_!g?- zqbOx9q9<8=^i(A3AYlm$si#4;XgUb97hk4Y^dLfJt3|Fs#h2bG)Tby%ZN^KH6nOSi zZl>&&XBm>w*wWrTtuG0*f?RuG)Rg$?Ns6DIiUcXRgzclA z28kb4Fo*cH6rHu_QH0DUe!mVVv=L+R%VvH?cT?opXpm^pL}zdb_gRP*%DUI0#lj@p?M5Zqgc2?6xe_fs zNzu}i6s?4jXeG>{wM&7>uC-c1POT-oU6n;^kJbV0hJ#$`eHM~L?1LmZUKxv0ASoVc z!O6Oh2PA?7NvLVG*klaNXslM^KURtV7$yECU@bM9o}~EcN!o1*Bl96)4)MD{m|gso za{4&M|2SaTdOb~p#82)DA(Uu0_KI%)6h%OmSKA4eC!Io2RvL+t{MmR)qW18`COxlVVx?5wW=6u5Qi)VdXmLJPqOnVVbuAQFh?<YcCS<6@j7DfLi|BQP%+_8EE+WH= z>i^0z8j3MHLlx0ks)){1MHGXqq%or>Sw!?Ci%7z#h$M__(Vl_QJp%{r8JM(ZVEmqe z;ynZV>=`JeW?vk0|3NgVB(NbSL($RTjXtDr^l{d%_W?W7QM)J%OjzaXIYH&B#V)riUhf(lQ43~Ct(g_m;_<=u0bIv=;JJ| zvjNLi(*}b>T)H*EAf8>(tm{#A$nU%g!CjuNKZxL*Z7sNC)Lv+ zW0eBpUnN50Vv7GU5n_Wej}NX_BD_wCunkg>T1Zb)g!CjuC}AW*33F)SdLaH)A~Zbi z|Bs3AW+lQ~lnB42M0h-;AVo+|QiSv*MJQn;LJ4z-kY?1gix8%bKhBDL51>mOc9)hA z$nMhr^*W$2#G*dF>Ei!W$dS4qWOk|7;^@&+r0II}WQ}Py#_Z9*3rHEh`a@}+gzqqX zXDHzJl*n&aBLBV;c@OYX$^T!P8;XpZ}MLT#MGy zd*3^e-=#$U6D9JymB=?hYEtC%Bt=e7QsfdwB9}0S$kEH(OOZc`kTqGfysH=l{LwRz z5V_eUM%y*e(f=8!x}*J{i5fsLQ>US$M^1x9*0?wKr}}iahGyMqEK9}Ek8jJ0=JtN> zq7Oy$?^DI_3snsFt76y+PO=#2NfrY=$sv@4(GW_)kUC)Uim4vtiFe;A68Xint!6ik3%C>xefrc<(w84xu!;yoE3l_|;Qu#9~9 zARsfMCxm2~?x(_iDPuU>i8morVm+W{reT8OrOSt`CVi=VNPZ(xKKm05{7k{SGd~9t4f1n{qAd~y zUw^8r zpURlv(Pjgpms>6eGj4c=%X&I3Gi$x5lh`k*hDvkpYcD!&wg4jomy_z&i zBe(7pe<^Tqf!E%JJxp69R&(U^%>w=)SP`m^7rxqI#!|h(bf=ayjpi9 zU7lE|=xFZ)(Tzj;sGbsCDgN8}4inXio;Cmw{WQ>zw9r$SsrZ&6JlSJvV$5`n6iZcj zTDhk1;q-Mi7E~{m%t4dEg<)Gwe@sk z_ol3a6sEw!5BGcZ^(j3k+z1OUKF}i3%03W&qy-=C?e6c!^(4CP5WY~f8)+ptmBA?J zy$5p8pHW$kuIDO)iO>lYJL{0v0lVG}7d|C>>U5Iqt?flA!kXojFX|L64ekfg+Vm@5 z1Qjim&dLDpwaa$Qye64w;^wO7BVa#;Hg_KIm(JD+Y^edmN zHLbR{(M&lhk(y6J`4SG!uPnGgUw7-e-tMmM0V;pO=iBh^fsXZp;lpfjF5cdOo_0G`98i~*}_U%SqP7mCQ5HGP;=RQ6#SX!lVtrc`iB z6MU1A5yCbdY1ar=EY|Vu=MeD^?<8N^a7O(Jsqd3O+)m0S+|aV@2ArEH3moZ5jRN zDW2)w=gEAfcb+G4HrIKIm&0=&$M0~P$1t1EJQddAGLPv7`O8zZncU@3SvXwfF`xaE z+zjV};6rwPKj8JyC9%BJ6SLwO~O84|I-5zP5-wxMUDt#F}V<~(l$5@p9 zOir-~m)#+jESFsFu!v7OS6Bqk?gmTp&*cP*_+)T^#buG(`<2!&Eo1G_OgjPhv4cm7 zCztPaqRHZSUFo8Z2d+9DPS+{?kR7h8vd!jio%m(-wXS#!+10wD&+KVk%F^j)ozgKB zAL~RnB>(Cv9l6}A6TiW()nyuUJ64x;PPgjBGrLQ58SWs%>l!DU4G;+ce zWe0kd9Z2WUN7{ol7_tjSKb3qoYLAUFUW>;_);EW{NE4>qDN=qMej=I1<|I4uWhlg`;B!LvA;7T9wa3kGPT2# zje#UwMYA(YxE=FD&P7Vj8%X~$xuk*uW zLTvTM=EqmX!7%N_mtliE_$s+s9r%*0(z@w2WGwkQz4S^MTX4`Rf{m0ub(zmH5uI6_`ZQE#aK2A3-=@9k3FR!4R$ zZVQ0x$hbn?mp47(4Z1x;#h2;w49Z8wi!)T%9QS6hd0S**oBLV~S)N0!uB& z(f1v2ng-pnA=8xgjt!Ofan>@H_iN}9<}_!yf`jo{@83{yq`!Vcrg4auZ*W|>Z{CnR z)8D%xak*~YAlVM>#tq5uK&$-VV;>G`W4oXMpA>E##Xmebi!Fio&O|QPLgKy4ISC%OG=DcA; z#hLSh4Mmspeho!8Cu91smKv`UB-6t((vVTDjk&x&raRn9r*0gngOhq{yNS;cHvEEU zvd)K~F%CP|ii^uTr7(ct3rUPyOBA1>UI{{R&dg_~;LN?X5_gaVXKosmxG5GKRtAmakS-r=$C=4dX+6Y(H|6Pv zyNZ-ru9k6>+UW-EMWeW;+G()F+>`3<-^}_t&4SZ&QZ)B6UD>45V3RB!zA+16)KMPO z(3n-Pm(jD{n^d93uUNORT;w9tj4OTs)0Y#_bZRmZ#!WwD3-eXHXHmQ~18z7-S2N=J z9kE|&jFEBOUTw&YyEy3fFbvPM^Kls;<`kTGT!9%$C@M^u;etPrGbW|)J>%Fh*E zDQI2~%R4+iJV)B~biUwuoR|i|vJD&gGd`&qzh(sd<#`PX+4Frqg22vXwYYYU(1y33*(}nc~ zf~(6uBn;~c1T${QqIA;w9HsMoDLW!yzwRtB{f2a2WUPtc?kpcJM_Z}Wh4(OBMx*6{ zcihxP^3&Cy&sgFIkW4(s zA&QyaLpP|9Ttq3}E%FyN6lNujKA1j#yZz=l3X{Km&mK?(LUf(2s_Pt=f;70|L6j7S zXE@z5LO{q57Ya|PRQ2~l)L(u1$BIhzr0k2{o0G5VFxy@zdaW->w>;vKEZkm!c7fAF zHrI+tR*hGb|cw97o=iH&Ub`z*_B%IflIjSlZiT5Z(L9UA(5=baF#D! z9?2!8xv4kPrM*!DfDm4{`N_w;ev zg}%`d_e|juI<~tg$gq({1J9RDK?C@9dCr&7=OAM%FN##UtfS(4)QtLsy>8~klDIG& z7uYcUa08CDP`Y^yAxLho4%773w8=FU!tXZl)M#+3nP2fN9Ztd#g8Mvree3J8FQJI! z;99+~%&56aPU2yvaULB>7=}+y`fX_ zAEEinrUuQ!yYJv~unE}D%X)K#%%8eBihD}(8M(XC*heI`RaN? zY8I0be-es|Hi=iLxLk%QJn!yDGi%(otkO5!f#-{-6s|zw(CDDUAm`3T7%LK)Jy$9hGW z9QjxvD9>^E_O&Fw8(Gd7#S;>mD& zJ&19UILlM7{YZK;14thlW-2ee=EFFZZ>_63?|R*bX{>i&D}B{#J|>>pKNcUyq1St4 z{E(Uor`LBF9zYdUaJ{C(@N{=rD>}WdBjcrR9bNpW&(lbG=ye^YY4XOPu7O&ZZW=%1 zJQM5D)zTK2g=n2iq=3*NvUmENLd>vt=%djF0e!Sam4WS!MwM3VxdbiJ7MF6zxC-ya zFph1n9s^$|(*pu?7^hy?_WsC--+BS6UVfJO&a+*P$_I>8yJHOlTf&#F$}kx&R8{Sd zHJmr0`+o(tc%lJah9hk7NCMYa^E$A$zcr+=SEpYynRo0RxJL%CH$mJhVH4b%XXM(-{9|nSMDhC#9VcttyYDQ4 zOm&~`R>;&&CGQqpQJDq`8CMy)6vsstsb0%{r7XKV5o&MgZSLJ{ML;Jg&U{slJ7hUp zD9kN34j^KD_nn&7?#`Zh?QNqrohtV1!Fd8vvnJKtKd+4ZrYOj~wqC3UY)AosF&b#{ z%IVSena2*BXOQ0;^wo&w=L>BFc$vqi=p+;)5YW&`cj9=>IS)TApR9afpFu+ebTWfJ z)CZLx!qEpO@;E+$i(d7IAlA4jOs=^2EJfbSpwuxG7*9ti#sx-PMHhV>ih&FuD>eI6O6dVk_q9Dv%JU+buK+* z-x;?0wZ9S9p^EeVMqJA>#zht-S6l}$&1&R8>&9f`X}RJ&*@)}-jB%0Ysa$a#G$^hE zjkvZd&IcNCU6?U0?CC~a)A5UBiz!EhKN@U%4`!NmmV8Yy;<{0Bo?^uHvy5?(pQl{; zDrFj~wOWRU7*EeB&W9Lry_qqtsY8fs+Mu|m8gczoah__##mAQsVz7-O>E+7T45qQ> zYq}BF3~B)JnQp{YtssNrnhCmGaUIGuoBIV+Ko9zT;Elk=NNH4W{*quNfKZo4re}-%!ZqQ_`Hq~$w3z# z)Kp^uvacn`+gIA@sDFw;ijMZK)Kn@8{i1N`_eRu|S19rX^Eb z4q>FAPbSU~ps|C*A}?1C;ad3&zOjKx+@l97Aw;`gLpn0l=$#Bdv zefq8eJl-nAJNVLvdLQZdb%0+%n-C|Ym@H%Z?gQPUpgC`?q|21P-JtspXfA4(beYok zYb0nqMxQTsNIKGkbm^->M2B|5y=jl6qb_>7@}O*nP7vaI_|hknKEI6gy#bmh`Xn6< zWzz9`9&}&rhc`iTw1y82)6%8y=SW`>T;2U@3zK0>M|yswe{Y@$_dZ)CU8eFFj(Cp% zO&R%e!zWYyI0m>4pm|2oWh#&D;P(z_PB@v_VTmAp`tCu3UI5KiUy*cFZt3#dkGYX4 zr^4OpnUao%G3n$-X5iejgm@WW`eZ7PN~Ev!Y#|bAz93V6{~J861kKmZWp+4Dl0JQB zAs;i&6XLe7NxCWcmo9x!De?IEaP4@3q|2m#=OKNkfM$#`%$el(YZSnVpsD@301{7eaaT-XO$JZ_3+66R0^RWu|^#<*ig15AHt)`^Yx3y!QugND`JKMxuf7@P)WJBxXvUxpiEv0k)-FwL*om9cj zQ#v=WmmH~J_B!-l2VA{(AwPL2eWNWxW+-O5`yID2esb1)Z;^X<#?h(W@Y^d12mqMrregRG0>ts^AK55R0`9QEXa? zfgqgldINe}p-NU+1!pB1cSTJU65m=ncU9|>jjgzSIN3iJFCF;yRF}@J-HdN1AS){I zZNkfz(z)xp`+J)ETi2D&_0{zO=c{YQZ*7cz{P@O8=SDW+iyIjun*m(42+0XHc>UOP zQBOO(e6cu{2Dax>S+MjZnzq3WLYFNrox8EEl0``WE5NQFj=I{~JHXtZO`D-#t2gR< z<4fl@B!-}E37C*30hJc>=B2gMtpb*7FOBSKZTYA@q4wo{v}D-hQ!*JXOfG*TQx#nn zpCj0s$*lG@+)-dL&f#`szM>hj>k-W~o9~h7ifLB=BRb|GJ0K}lTr+zhnW!k7K1i@G z%Yqn+ACkir?T~zt=)%h7jAW8xI@lq}Y=z0~l0;|D>6B!K;*i}j$rMl>jkOT9tx{Dw zV|yw|=oi%A7r}U<0ec&<7ut*clC;}98A$jVuyc?P2ZkkHZ}eh3wtHgBv?QSP5rZ5a11PUVrZ;!#gX!9D0Pl3BT0%s6mlqSc zeb|_!$te5ScM?v-ac!L>*4w_An715-LP)uVa*m?Zo4}lLTS#>>_1-WhZ6v1=ayy_W z5?#p(K*`jb#F!|KQ}!%aXdgB+X|d={U`(Sob-I?j0wLO7O?x{y$9gXqlW|nEF_bpN znY3gUC|bQgjA>aq@s(jD%qKTv;!K02)BDAkZjcWEom0JA%;YAI`E!9#b3jpMIp(kV zWIgGBkm8g6sQ+Ar9pYhsUGTZj`|D`apZM4E%ys6UEE5S~Xy^XPj1YCs6a894avbTW z3b+m?HsfwXU4t_n``0x%XaA{{B$~|U|0&;;POWvkvoPH*MV+3Et^%|b z7?Q65EyWzp0(7b5^aG#?b26m)9JJdSG7Lzabo&*L5P- zxp`d&bDy2p)+qbwd0oebc79${5A6i~z9@it?xfIZqzY)Ld^gYFjaLx+DZFtCYCR)H z-6iJbIPXMVv6UQ$+Uu`PJx;ty%-|jT#EZf>_wXO6;A!{qQ*D17eTI=Dh*>6m{FHV8 zVyx2;#P+I@C5>R3=70t9bpeGbetDK6=BqW%f>JUGX@nzWT`<%DH+$$oq3Yu{TdNx> z;uaG#V>x!XUGOvFREY!b~^IXDM;(gi*$toW%TAn_IV9zO6DUWG%D%= zMTU*zB|smD7;x^-lf-suPlz)>AdI6t$%eQ`c~T^y8ej#Zf+3j0!y>5=fo)C}NdN?N zdRf%OHcyL0JO#u~7l9PDtQ{n%5T&U?@j5k~kqZ>^N`*j#lUi z8DA3)uEdQDJA63mkXc+O>WGn1Vs7)ESgs=e1RfNrvq5Pck`qNT1Vju`AnwL69ZF6n zB1xAU9-Y|I6Bc>mY~yfc%!l*Z2`pueENKD;qBWfLB~7n|q)~*1EKRgLpV{DRaN~#o zMNAZss7V2T(vD6RsP<=|&vzS4WolaFrfj5>D&+Nn6kSd)-mOBLQE<{F=cQ>O#LrH=k`TBP861qSNC9@;jIFlgu;?XjsJT>;HE z0jXPoY3C&76$(pk(Lthc1BGKqv53p-;RAtg45nlfl4;TaXXYhXFcvsy!RPQP`WuP0 zaiC~4AlIwNILX)HB`MSFin$udz!aAJ4FU>AmWPsb^AVp1M|)gY0;q_?`*;GLwhK!r zq&46qz`jb{=u{fcm!V@NeQlu<7M5HDOq6+|8hAt0UXt)|-hdKmmk5b+J*O)Wr#U1~ z5T{m&Yzak4Fcu}Toy}zS8&FV%JVA2oUUDY-dr=u5I#7irZzBgZ^-uIxr}CJrDJ(gk zm=h+={u&P5rU|@s4jG5uFi#%{`y=p^Tv+lojkGu(+8=O|$RL4GfU|V~mXti%Na}Tt zhSTmK)58v_#eASt>YZ0^aQRF_`849#el1I!CdiUJ$>x~)VilW1SnDlM=A}G>(oM;e z?q)3MBi;Ks>4p-MWmgj>R|-pLCj-ULX`sxU0WLUD={T6dWpf(k6K9mDnoxw*93j;! zthkU^(RJebb}A972+bXWm`f@w`HDuR-vh{X}(@mEK-`#G)@Lm*_=eIXrk2Z^G9H=4Vfc*#CR*=y(_~>PXj4fQf@a);*cWMf3h>7 zD7*Kd8cI7HqNpI8|IJ1@+9Ev^bnQC*;Fw`wAtomZOHQP8Q>M7m`CT3#gdF$80#R~P zK@=a@YP>V=ltfZ4I$fVkaDFPlQkozqaS4dG=!8iZSycBT6u|I11k)J{xEm8_gvpj{ z1`>Lr&tq|o`k7WVv$`?uMoFvBsBvoU)3n%xXLlPm9^3~IBFc6{pXH^Gw)2iUmVU$T^sF2Q4Q@rvUprQYh<_i>C1PNjOq+5?C(+ zLjd|1A@TbstqGjt1cB^e1isD=aAl zNS36kc+8(-Po|Ha61NWrGFwKOIx^>^D;>awq8_Xva&uyojrFlCtu+ko|94#u_$ zrO3XOs15xu5(E_wCN0=mi`CA|0Ks@GFShbdc~Vlwfhx-V8%tY2h!!ApTVS|SqsmM& zPAg){x1ltHoGVgL1M74PNI@rYdZ{bqOeeK>U*>eGMvT;xJZ8xT!n*Jl;>OWuutJ@u z-V9$|)85tJ(~pIHjQt8rR)IukPie5#>l_85c`vAo@-sm)-xm-PxoJ}@ww-Lt1lCl!PAg}kns%|{DY=ms!= zdn=!(F&0RyOj_C_(leSUbWRgum|9pu*J5!c;kFpdWkIswl-`h$Ub7%%Pm~HNNZ3q$ zH!9aUogsD{N+y72OJS$^z%`}Gps>2VB;k<(kj)ZX05YVt2n%^?Uu~>^6DbMY14oJ} z0yhCXjqK8k0=e*RaYV=MATs~YC!AM%m-@^HN7l%r!tVnjnIjt>gq%$w?KVQHCN(XS32Et>Mw`jgC})|h zU)nJnRWmZ>Iyq@AImKM8V@5r-`J^SyApc}iaqZTUbl@Zd$1M#dbgYG!Wn@IrP`5p; zt)RXw8AxuF%!+BTkW^fyRC=t>#EkkjmO;PSwIS_z&oFuk>}^1|Olf&O1+tD_q?T|G zemPQS88&FEK{1o6%T}I@0A-pBk@HNNa5qKAiV&l9YIs;AXrqSe(>BH+Ld8lw#5|-3 zHXx0IOSV^gz(Xd=*=M1^|6pv|-X|sCBcSabLaF(pK}6D=H*nSyhxj7Vs1zTyr0-IE zsPla3G8Mu*0C2|9NgJd%G>%UPvLu_v6FBC258H4WP?K!qIZgpI$9`B9$d3Z zy#i9%l{1wZW`a!-TW7_ZvS6Iwn(2+Q3qJQF~Rr~q4U(6NszjbnO(ipQ9t;tuGb zbDdnaG`Zj$3Smyzm_FsCt^^Sor8s%j!IX}+36wdS^GBNGOg?**p$yRAQD)8{o(=GF z#Yp#zYGaYcDENgvzL3e57#Nn_EIZQ91TipM1~Lbv2doBE`{FtRl|+oc;QAL%ai|bu z8fm?Sp4*WKv*qT6rfX4kh;t9BrQLv<;~$nqrqlQ(hlsn@5@9(C&l?XlYfBlpEgszVw6 z`g0d|-FRB`#`*ua>$Tns&wEgaZide*D0=POXP3@PeLV7!-#vBN^Ejl(@Er@M6uF=K z-KD<@-Mn_c)+v_=v6JEN*PL?W!?Tx(kFOYc+BrYG^*^y}gNTdsHg#6kc3xSw?&WL$ z*|heVpFSYOVGO^cy(_PJ$qBbkduZ(M4{ciK5#nfu=a0Q$=a?sE)I2|b(e!1H#&LM( zM263J{`Qx)G*9iVf8}pIKOMFMhr8}#_)909_UrMZmcReny<Cw01kQl>1+ERSLIjf*!%#9y? z_$wi9Wq9LTubuGF!hzH7eETmynjD^k175#j_`7#4I&=N^7QJ}!))`yM9uvP8f_xbi z=ly=$mN!pa_08uBRxNn$7bQDmLd?dYrQ*C*<9}Ip?d#>0=iexfdG77?_Xx3`;nxL= z%C4>6IrFA_XPh~)@P^GoT+Hxal;3n=>50B?i!)Z;GWXpZuEhaShR54?-ML{|^3g*o zCa;>;z8#0ZUSqiX@tMB(xQA{&zv2%coqzY;KHLQl+gF@db;grF7`W*60zeD1Lq zelt^uBN_f*?~h&i((yHcv!?9m@EmtCoQ14m`0)RDbMv1@iIX0Ye9&aK)@|9RAbWo7y&C{)_u@Fpl9L`z9XQbNjYUzj|)+H!j}xjZ?6qT0rs6*!;tH z<{xsuf6|&QyZ?CJVL13WkKv;HPgA1*+_h^)r1aqh6O%Zk8fW;uWAl&x>Yd&H_}Y8# zEPrICbUj$6ok26}<^gZ60Fy&N=nRO#k|$<1ajA)`gGna{W_? z4;g;vT_dh}bz#9lQ{Q@5T=3x|;6E2XAR*v0!)T&%56j;!cM9OKvLI=gQo{A$ncw{z3|Y^dvCk=q{|DQI{W@huExS5PR|wRy}ACrV^=rN+;RD| z{SWT^=(Z=29){1o;JEMP-4UyqwW50D+ha?=1;fJdh9|}xclEcI%zJFf@7ziEzR=Ha zF#N+?-g_x^=r)(@PuCyR^~l6Z$bsQcEr0dc`~yF}GF-INd&D1NJ5VoRBZ~8uj@Xze zJw0#ts28WkPnvYp1CT$%Z@+R*wDaW$UVLonwp}moKJah2cbMTjUjOZ+5fg6Mb@q}g zU%d3?vrx8IGkm3Idu;I~EeD+W;phu5z2l583Gpz)5BObp^kFl8`_BU+55LmCZ0DIm zyu48tq0z3R!rX|dOD_qB~5)o~c?UMIs_ns+=h=A}D_HGk0i@TqTI zdjSsfGQ4KS9n0qY{`!YrSnOfM?8Rqny5@JY;y6T!)04${p*7nszGB-0C0E>Y@2gi`w5wi-g$%zm|B6!{ z-o0z#We4B6{p6O!Z9*Kw@Vn~A|NWf8#5uqF&A@4gzUM|dPiOd+cjK2V+gW(Y)*n|k z@7Or)JFsI6AN%~7?bmefK2Q8;^zL0JEN>CwS%yFL_O^5HU31v{-`;xnl*KnLe@%#w z89w>@C!hY)pLrS@yiISmef7tv7l-ac>3rk5?|yjSZQqX{boJX~?wNA`WFZ<+`u1(ud_{~eWQ-I;mJbT?$ZxsDM=H3J_uHwiWf0D-1SQ55uWGsvU zVFVarj4zChA<;-0NrQEaHKW5E9?R0$meGYY<0D)m#=vB_k|iV%azGN2&3zI!2QhI1 zf!sh&ve_h%1R}D*gc!0RtMB*guI~3{G_nNy|9|^EdsMHhtGlbatE;QecTI0}(YkfL z6_-K|zo78WuO5Bn3*YNI>&kskeCMMtd>(r8R|T%KgAHN&=>R%PU>JPsO|K;v| z*S+&MKaA|S_%$?tw_t-(lISFm1EbqrRtX$Cd&!_x1 zKCtiYZ#%jAR@fg3|KT5g{?7-VeDB4#-Fj~KyIy#Ap5y!#{r)>k8s$59={R2gGZ zySsbi+oz#ZN5oJ#@$E;Ck93LML&?PSWS1ufcs@-Me!WMAdq;N1kl6Ie-~?=6Z~ydk zBf~v|qceyPB{>q8ikYfZrL=bR&LF^nz3TQ%XSa#;kAi2K5!FXcN<(l&Kh@3g@e<@OBH$8*21_yioC+R3-U=&Bl6wyFWaW%0*Gx~z4zYIzLZ&;;8E8QW%wYdC?SV3OIXKIP5+X zqtlc-V`ZN3eZOgPuWD!yy0yW?_T_zp{nK@#h_!okpAny1v$v7UjUUNdN6{-+u) zLS$xC$68pAUe?So?8lz}p#iRLfr{hHgf={rK^m@H8Z{05_4KRit{c_WsYIvG z9>%+>N~@wPDy!n#hAS@w=o_x2drjq=Dz_*E@I+|GsCKM_FNm9z&+?vak?!5`-nRG- z+^a%-Sm8+oKkTUJ9vEc+=l@nh%*|fm;cRlQQeHmN9f^03^z8KJGb3Bf^y{K^6T&4l zHlhC;W%>U^%D9H-e<{#z3TQs0!i`n6QhpE&0mSg+jJ86ICSu>gUb0|%2uVg1@Uk@Q>SZ&y#G>!agW z?IgJn95|R5Uw!a-tRXq+us_}Cn+U#^YJPRYkCL-e*F?up-B2G*mZUb(C)E-iKQ?ud z53eBI@WW(5x+O}lmhgrjCKjec{!}9!dQg-=MSNg_FQ(MBROH9z+>o&ZSC_#Q+>&VX9>Vws> zEsuTEr4{@YN#VQ*NXnh<5^vY`_(&)bAHX)rl6kL9OiYk?G(J!}l*I121wg(E zB*W|lWi&o8jOFz?&iZ*(!bA(a=sri>%f-E3+#AIm&TpLC(kT9>K>k^UX5c0Z1v>1&HuYKVU83AYc#>D@S7&0S*IR3^)SV4Y&{R zF2J_}J_1O(#{sVf`~lz?{$rKUxgKy9(mw!L26z+TBEU2t>+cpoN*CHN4u@jBLcNtJ zK8Y)K8bHN2d>mfhik(i2yTsylSls0nx5whR46ft5(c;n;#|e3z#(OR9vljP7i&F|F z9rSmmUxilKoAyUK(pOYzt&si&G=gvS#CR1Nu%C^7uW!6UD}w`%CH$ZQa=b9z=ufpm z33LHzHA0us2wkEPx|Bxf+P~H3qz@fPLq}rycaugrw>ywgyuS;OZQ@QqW*5>ph7~BvqG|(JWgfc{ZtM;iV;=4WBx5X( zBIiMQD{?q}!7#hx1xFnTlio#WDMHl8$Lkh^WSeOWf8q?2*Q7C--m=w zoeYfI0IJ|J&oX(DB2xm+O7`K$vcnRtvnH$T7=|>=BM&#|M|UjAZJ1NwcH2p^Y3Kk^ z5LEnryk3TcBMIIe8yeg`gzZQr^C&BOfM(CZGiUL=++|%dk1VqD@Zdw3@ZGE8ViO+( zg?r<>5_MDDSHO#%2%7?*QMhdyB^5YV}g%u%$uK72^vY`mMw%lDA@KvBgzdTvi?XGwb*!#P|PI9sde(o%?$0 zSZ%!ff2)$OouZOoLjIzHrFY6qOgy$ZL+@oI35 z^UIsAV~t}SYq~VLxyp2?EYg|Ao)pJ<__z6+cKIiU7f<|b_0y?(--biUGF{85`o%D= zuLBLjR9CL=D!V4J%h{EOePLDc@b`LWv<&Uy9!MAn@tZyHbs1>3Tohr>3hb z(k-Q_Kn2|L-dN6eARB=!9WTY7RJ}h1!g~Myt>rq&+6`T0SKUkt`I1AF`ZwWMs0?MT zT^iv&OW}O@OC8;dpLrfMF9NBfX-bfmo!zGeZ@|0YpQn5^-6xHQK>C}GmU@c*=V!?< z(_|W7#_#ir9xqfk1F`5%sGQyyt}z_yiM8(TpCriCP4YlnmBOsO0WmCeMiT={kx)zX zIUiWBwMxZ8cfIy@t{3+u;wC*64`p&pa0KMF0zVp=RC0WNA|yWtJOS=s09FA)Cy$*C zh;}=+2Jk-s-wgO$z*fND0d56+29R~|Jm3J}p8%o5oIeAyO#Ty)HF+j}+Nk84HY)j6 z>^v*JCC+p5rsZAJy=rlkca5XG>#(%9HLk+qmRTIWpCNSViOA}w*KhI7y&lG{7PU?c zOCjJVrt5vT_#Rwek%02k%|Ho%!-lB0zG-2!mnq^>F5@Q>uD zVi5I94lxI-@GGPVt_Fi{KgzN-&-=}bK*~4!eII^=cMIMCEx+{D=IH_BAuwCMSvJ{* zBGY8tFu10WZyu6+L*jh~qU3X{h%b}pvs%Pg$?sN$(tpSc<##rIQH`SgFh>5M3&!RE zq7NK91rTyGwhr($Kx&Qu27DXf1mInO*wZ`4JfWvl^0@-G)0M9FCCfM~QD2^(14k;*g;5J8C*Z~`Mm6J_1)mT{CQ8OCRQT75i~9(GwceERQtvfB`y})8!^CIm@_e4 znclQ?|3P1P;)=?NHnf$+7ycdEsoE^zWg}}75zli&eGTo6B3eU#>8gZM! z8#@v-DEpA#3b<(bz987SXh?jW2Ur9+ACMj6g@7f1P|#!LfX4$a6ugQ9ZgxB;0-gkj z&u5OYBg2fu*t-EM0q+IG%*oiN05N78dl2w6z(ar-xv5!>GXc?gIZ*#&Gz>6XHRgcN z)qrf8__D~@dcbo5uK-*N$TgeI&^U6aabL5z?^xXTEbiwPhmKalzG!hTTb!Qls4qh|277JJqxFkv;=@||I4T_4 z1kKs$L_hUtJ<1D$x}_@F`i+BlLyOv#$7xm5$}x#KAHCUe7xGj?qI~_9%H-4I3sYMv zQ`amWFHdb*JYEb35_lG^n7&0wr535M$t#65E48JJ`UcI&M}4F86|_}-89G0Yw$hzn znO9dKsDCD^%I!CqsuS6Nur!=5WFJ~xIq})W;Ko?2l_(DBw{N*-ajNLTXQ+G@T=*!u zy~G@^dK*WnslpkbMaq-Wx1$_huc?~qQbo2DYIxJq^@|cGPn@S%gdQ|XaQ^DYHXNFJ z$HS?jR7)l30!!23@(oWWu26)X9?B>7znYi4I9-SWPd9dL_-^71%sqih)Gj&%rL&-? zTy+QU@neQY#(`Jg5-8ST+}&(oBE#gX1pPP2-$>Qtgk zB`T>zsTRG-NcQ{(p2$@aPpp3Iz(HFQ^_8(pI9o=uHGp5Cb1X!#TD`Giw2A)~ylFjq zHmaE#qtLk!Z`38_&K(wq`kgcY;8&#h(2q~{Oq=<1sPTUS`p;0GhPV5&!fSs&iPS^| zbd>X!EZxmCX^?ye@Ie(Hsr5{n9sr2$4#x+3vHx(A^48Ha5a%p1M*)jGvupT}O&p81 zoO~GR>y4`sK%EMP69Pz>BLXO2_1rCPC{y*A5d)N&dW@ns-}HT-(EmjI?-Tc%q(Ima zF#dODxxXatkHX(GG4(--hH0^UsOMMWcZcAsp;I~85d`GyUIQR!_Zk6D1jOv}SS4T+ z;8MUa;5mS8fRv36z>5Ge_dM1DxCO8cum^B6U=(nRxVHjc40jJ8W~j%u16~Ta6L2fw z0AL(&7;rn_9>86I`vC_49|9Z%{5#+0Ivc>o*eWmW8mGn z7O(~II=~3ve!!anG4DNgH((0zQ-E&={5QZ`0KW}*8{p3XZwLGp;Cld1Lpk0BxDpUE z<6~<9QO;vQ!21Ai2D~5eJ%Aqr&)YTRsjD^}}68izhy`4+Pm7CM%L4vQXEaO`h2j-{f*hAgh#;x=1c+~WEyE@^T5 zEbf5Cr7Vt8r_=bb#bMyrkv=3ug4R%kS;n1-vYKR@aWIj(q2Dv*Oh^)mv z>X-#W@^Pd?H;qC*%f(Gaz~{5#4r-^JT8yfL)$mmf)LSmf%~l z8skzPN}MD3%eP{u9OA3#U^J^Yy;PxbFn9&G#?q~`xH^l2G8MY0#dTR+uf^@OIH)g4 zcg*6H;ko~XWs#1~UB#PMAH3!2r~dkh^ws{=Pv4S!Ds|awsjHuQ4ouU&C`kujOa)(i z{t-CS4NKQ|l_t(uePn%X>ot|>hD+0}OA8Je+hrUnSKcjq zs%1@0x3+ZQ_^$Pry_URceJq+NhS{5bRHcJd6@=;bGF$Pi{jcUH8&)3#8NBAc>tJKp z@N)+Ex$q#ENt}2gjak^dG@6qzh<8m$(=PzS>4s{?^p5ee{jV0xy?!m0iXRQWc1a=h zaYOYkUl^MfH1)1L%SJl*RJv=;{;g{qykV@F#@PJY;&k&<>ClP;k6jZ^qYpW7@Y-UV z(9g{jYQ*FKC3fh#t6wB%$*-&rzM3q0H25m`V~pucGk5%MlqZUExGZtn`aLL5@R6fL z%WR37G?1v-QGu-pQnJC)b2>yVGNOH(?HhV+35)*FVKXgcgHlr^<<7V9repa5-onb4O^{=` z>+v(szr%MK9Q5Pk-Q_?#>_=JtykR0=sL2~+_lBo`o<}`?FNeS8OsmJO@XubXB2QGU zzX0?hKK*!XK$?Kc@MFs6VQ%Gta-8ET$GV}xI5t4&#Vc-xkgX7Acf%5ditp{ig?TUo zPXgUj5LsUOfr;Z-LK~gfk*rlRRj5&c4}ga5eo5ABYZwu?QK3H<_t%8p%num)0P@Ml z_`_byaKr9V&#e+3c8Gc&5;xSMdQ5yQb3PBl->7J)Q2VfasiN7DLp7`C5vW#{`40iv zWuV@bs(u2HrTi2iCskq6j!|}h4#+O}*ML-{zX4=t{ae6Z!EXor1Kcc+KLYLrd>-&R zz;VDE0RIelJK$dd?*aT9;QfIA1pFExGN5*06aao7&RKv@0nP^eHDEE|Zvf{2J_E@3 z#{qFjf9%hI^8sH3TnNZ60fXJKe*&HgSc<&E4jfwuxD@b2z%v0)0bB-n9^i67+Fh^{ z$6!}Gs{liQ=K^j5Tn7ky**PC@2O!2)W3XeLYCu|5^?(Dn#Fy`;=X5b zKexDFS=@6L_kzViGK6QJycIjQ)YpY~`8sxj9hjA-kJ$gMid20gW-ZaXO(Y9256Ky1 zKWLb%LbZE{;~dw3tb)rtlz#7%Jp*|aJkQHA@JyID!7t0etHml-A}*_0lSZ$egrHrG zLATJTENUAxYV~{%FQ#=jdcrYnw(dgwE)e{skRHBX2Dlh-3*Z@mTLG5>#sJAH-ITH} z{PgS`-}LMp--?|Ni*JdVr_(sLQ%!eJ-ekjKM>^@}!q7Eki3Oa8xuy)$WhE24D|Qui zO#CQy4JOkoiCMocQ8cmQIRwVE*g9a$4#sr-Vz`QB>KRjNu`QhPSOdbX_~H9f_)E1^ zsJb}X@@^$k4VlMS@jgMYn`8GyHw%iLD<7}F-npXbI4tJl_4lr2z6XBU`&F1G)1YWs zOI=T8)Z+NVU~+g;^;0J0flTM=YUT@>PK!dAk%p zK0T;-mP0S#>40&-vjKMit_0i(xDId^U_D?zU^Cz#U=(l&komjU&YjBuzc>9n_s=_mA@Z&;u>!> z5kwPF#iv4~f4LakOH#~yv z0asTYnAo@e?ZL9DvAGW%eC6jS97LunUis0fpcS(}Rl5$Ps~_a22Gc)0^*dPED%k(n zL~7#&;{~bFb?IbjN9xKdDTHLj&RdT)!}W+lq5wNl#%O@);T7pCE3s{9|D%i3?G^tv z2HyYr5uo-zT7FCN<&SLt$cNJ#D^q#t>c#xOu`->kOkKxG<#cUjx_L3TG1OM3u)i2y zL98~F;sw0lgt={vxvLVykJfVh42y<+0C~JU%^Id8FPqmYDr$ zK()Z}B6->Hv((k4b8me&LZ*`#J(Z<5URuyxcFU&n)D_E8#i@Ojsm)cXz|zzeSpGxA zl}8#7&DrTIyADhwPDo$tPwiU_2VXjUcu95o_jgw~PkN#X_?|JIsA=gjKjYz%l}bj z!ZQZkk%Zrxoc>Hv4+;JO?#^+_tl>{Qd14F?0v1^x4hc5KNuBN4paia=I*^_n`Z?3 zv(+Gi8dm&ds@jl@VoyrRJa)sG{-IWtdL=x%kyveafB!ZdrW;jzwpm@g4Y$6(dxwtT zWe69qD~k_%J{@4#pAT|w&epr_m>&0WS0Yo}lG}lAjt>lt>{Hzb^TlU5Uf7*J4~P5m72q$5ojLPJxi1Q56whASD~Mw zJlqI)BH&Gcrvat_DWhq?3jr~WI~D-E6|e#DHbBbgI{>c$#0>n{+W_wbq*8u2AoqRT z1^5}jy8-_V@E*W#0lp9LJAfYm{5jwU0e=OErH-*b0e%SZuYex`{4c7{j+>XB>ZbDBNG<4f`(I6oi4k5{9y)KzR=F41a%dUfa?@*H^En$1kIbG` z@fcoS++Dh>(3mgdXLP8B1AC!Jb(v{ZfbI-vyy-XS1l0x90h))V93T4e@y-gBzZc=|Tg``w3A52%i2;`5;m(~1 z>_j43wm2GYXvBo?Sr`o`PLr|K>c`-k`>u!64`ThNxg>QJV$qVya;Iz+s)30%V0OXXs&J&C6cws- z7FVjbd+_&U^>#o0zE!<_4u4rgg=!nAmhx}HeT>3Aj=y?F_78Z|z7(}=Gw5aD_!u$F zZUev9-WmRex(0rq%JTP~GpU8&Cvy6eZ*2xGhq_*oWd@NawxJjC%WgxFME8h34hB#A z==hWqjc7_cXxdiAR@Nr5nx&+R#ceEyVR3V2g7i0t`=8=w$I8bnpMO|8InY(~>~Q&* zc}%t*J}na7SQaL|f7jlQS&Gu8!-Ik)V0p3Km*e+I{P_F>?U(I-0&oQp1$xmbAFzW? zz-@rD0QUnH0UiLH4R|MDF(7kN3ixrrV*tMdcs$@&0T%(Xwax>41aLkeb8;-;PsIH! z;Bj#O32-6ci-0EpvbLyEbl1o?-8J&9SnUnlr*Nd_Td_LBsOe~CXu8wotwdd^s&OG>BdDYosHE!YVV1)|ztsac{Tkr!jhzZk3&BJ$~hC_DCx$ zs;BJ=*KOa7a;XExJOlFL7nrSFIPT-)^*74pF!29|Uv>w}IH?@^2+^eUqsK@Q9FUqc z+eF6Xd0o1JLmx_N0>7xMtpYq7@H9Yn&}RU$EYAeo2zVAC2Q4cAF9Tc&7y~>TFb=pJkY%z8kZh0Pr#o)G z>5iLk#Y!b#r*Kq7d@ELK_+tvk4uWsRP9DUOZzXDDhsJS6O5-Z!O(sG2zp(gT&^jHf zkGS1@3X>JdS5wL7Qpp!m$rn?}mp4q&@n2Jb4P41mY;^7%|I_+p*;TKsPnKWv()wgY z;?LOz!Q<%$wYNBuJjMw2^B9?6`It+x*N&$fI4QJXV$TKAnZsHr-N{wl@gJ|>6HdIW zd-R8RM0|Xn?bgj~Y{xAPP3Ym#Zk|o=2_HC;TqGF8iYaK zKCAr~?!Vffw|m|$$0k1a02Ly3#C4TU1pVtTE5EiNeOYfYP_`I zVZ8>;opYsmmzC}RR_U7#C3kYe;Un1Yy(8?5pNQdyxja#uPCmQg@Z1A$!H{`; zEw}lVrkbDQA^7GOv1jwlE}T8c>++$}(reG$;z#aM%`cz;N_e_QGPldQCDvptuB*$P zYmR@Vp$hkCI*Bq>;JR=zXEnYYe-0d(dp##Nbw$lRP>T1C>|Hc-4?K_3BIyqRr>rDN z6uEvT9ef#VRiypt_7_u|e1tFX_^y*~elFEmiiG#aF{kthiUYZu2$su9-y=Bb`-nd2 zJ3Qq{-xhzm6@}`^N-FBsQszFr=^r;%IDY2;S!`N#bP4eB&JyWtdYB?9Rl$l-7LIGQufS^hQifmGaTllV`_Pj;_Io*4Ic0FU8|dUUU654DnM z^Dy)BAi9}b#GC_U*h=KKMoprr1)4IT*b%mF-;TS`6pF<|R8xF#M`9;RtYjYhHhu)e z%mL!EI`QQ(*%zQ_7=Y7#$zdJ2nn>gp1wVu0XD?tl9!O69MUb=(!Q-{+!UhhKUxXKV z^hSo=bNbQ-MwA%o9vnpoVSvYapOxr1WhnPKoDB4H8GISuB^;yVq$1g1xQIGOtnQ@X zB@?C)`WT-w3pOBaKE`~%T05=#z2eSCEz)dwNZc(*fbPe#=${g|87}-G%l%hzZ<6p- zuzXDXoFC(3{PQ3Vd`x^Nh}-asrF`|6opPKV;$!&3T9|qa{cdra_%J|Fk4X=9je3lK zK-}CNtR_O0mGnX3lBAS%O43UF?hyR>uxcnGAwX(^ivTwPZUp3TrU~#8K(wu~t$?k7 zR{(|qZvxx|cspPe@E?F3fcc2K6Odi_X21o2mjIp)xD{|MU@u?`;10mc0IvkR9q=l^ zF92Q($W2K2I>FfY0s8?tV>tl$Q@{~GZfqC@#HJA^0r&^N-GE#HcpG35O7MC>&P3h- zh)ojC?SPj8;_C)uV}S1hbIK#zX^B?Aa%~?0jU;lz)ug`_@;+# zeA6?UH!9p;@Rx7JYK=tGVZ(+=#_dnsj_`v$z{9?wuBQr^V6o)A8MJ zah!|QxCbomn-=$o#XVthKef2uS==8i?j?&mVsRKqOByU^&GUSVJI>;kSlsCr$398( z$2!nqYb>tb;@T{(!{WAC+;)o_vAEq9hZ>YLAWM>lSw+4Vwd3HHCG5yNq9^3Er9PE) zjxk9t>pa^q|DiF=6Ru(2gaVtnVSX+d`|1>iIi}}enEzB6<_%$h6T%uJhPlTs9sgHj znZKxP^OvW#&F?~rw9S|1vdvR4f@zvZc#vp#*>hwM7P&Uh|9`T}OVY`gVg4SdMX!T( zeAmF{i0CA-uamPdG)hioWOECcF|s-NlEcV;6lfaRp9Gwdk)3?)6j;tQqG>@l`qX7P zIZWuV5661^Y20shF;7|QAxLL9751e&!#IfcB#h`bKNre@tZ|L#hjD!CJ`9eu34JJ0 z5^+svUGodTYPJdecAz{abe}Szd$bAt`Z(+Y+Y1e6U3{ql$6aJG%Yc3uXJX$6Qyznk zS?T6iQ+_-9JIRP<7p9F_c2?Sm9<;cd@y5=n(76wPsa^{m4#~9<{S~}v1NZlM(`GV9 zOgcmWZ`z3FOp*@ED->f-(03Zx=0RxV><7I|KEi-6aUw?&t^&vLWv z@iCU>r?k^riVuq0gg+#1V+sBw%l(YFjpbMjA?9P^e^A^eJnbt!CVpet8q4)0R34ue zv5dLG%g4~K6t{_wRs$cC{@1hoe<^O)a#f~lwXngUlr@^Jr{SkI`T)Y5Ql{&-055?1 z+kip9M*uGZd=#)1@G-!xfR6+20sJl?2i!jZ90&Xn;7fo%2K+C;CjpC)_D=w5^#2lY zDd2wq1_6Hucn#n)fcFCa9`JL3&jUULI1WgY^v{4?EI$Ic5bz&>8vy?aSj#N?u%{U? z5Aa^VS%6&R_5&UQECIxVxKj%FL%?GIX-+X-nCH%40BOj)2nciAc?s|`z`p{rP0j&5 zTimVqY15K#+O*`GUJn!eo#l6Gg-eqz3THHr0?sFFR zC5wC5;=XNhKeo7^Sln+d?)MgV*y8?XaiypsT?S?HR;;u+riaUhQ4@L2ONWb{{4&h> zImKh_Ve;l9FnslR9$!Z;qmJTW4^*hR{IUX}WgHx&nK));#Zj0ejv|S}?}-D9**J?rbu*JCV=&V#|v75qicEZ7Zbs6C;YK~Sbjw)orR=9 z{Zt5TP40C0A;ykCG}PK+KOoy4n~ZeRUL^6==Z?=?uJ-%%nWbvbZk&s=@^d2G+4(t% zG|11%LW>is^Oqp6THfS6k9DNqPs)GkaJ^G7|Cj{@&M63kX@#M|9rejU^)V6WF!4(i zK8&w);HE=>h~so{f)QzS(KdaO%9B zBuvnxr!q^G}N#2b{yP( zM|N#Dj0|DxwxT;8_|go#UI?p|y?dq%SpH>BTX#>quD@T>I00d?HwPt%kN6;Ib8jBg zuY_NPgL__aTm4(LuZdBmdj|X$V^)yu(T}oR3b%PGohh2#wCyod=bVK&skfjb=A+Ya zSnh6{$a9v_A2M{dOP8Vd&Jp~4gl9Wq888kbiwV3JVex&X#IwrA13d^@Z`v#1$Fy~r zJm*{qvsS`nr(tMd6f7794dcbgid!@s=KLs>ChwfF@U8vlvl{u`G&HW5At6L0`k8MX`AvIM&Mle50YopZM}#0VF|w);f=1G1Aq1(EIUH# z%8-P;NWvDP{^4cIw+Qb|LenfXh9A~DiTTMTz~P4H3uRa8OK>p zk!oAiIa|P+E^S8Tbgpq7U|;uXNGu`;57F#QFvkiXS?uZj( zs_oNW^f{qkZ@=PqWRp60HhpW43a42qok8DvaYlOfe(|B6%e8!RjR!Z)$o=3h&TnyQ zl}E`kX-gfsT1$AMj*5GDDw_dMlnK+OPS4Y}$0aI`8hmv~^FV#E*lCP+OMlF(X)7Id zEv@2(JLaoo&pdT&H{46HuOGM6)|fJ68835Wk3RO`la9C*4sH}SYhEfl`u=nJFG10+ znY8ys+YaPuofC-0?d+p0W?LmLuYW8aRQx{iqVn`K;-fvM+G!6{0?lV86R9#Y4` zr7nppb9M%Ii|xy@LEiEc;K@AYj;AI zSf+NxTKH#~`eYSbEi`-Ze!EC53%#B^m#Vg-^$~eR)cJco`Gf7@_DR$5O54?$tTVC1 z5ev4|gsRZeo^C!>sTx$=O>`hUHFhuy>duK6Rh2KlahZsK2W`^|v%%*I%wa z+O@~rws;M~QV&dFLq&qM?QNmx=2##aZ41@3M}ra6K@O~u-7$&pIOqjd$8~VCJoz(Y z0Oqd<()%{jLKp3qFh{d{qK$3AKpjkvXt1p%&}5oV78+cjycy>KiIeY4?M?9oo@Zz!^61RQ_Ax;;BhO9wYTZ65PO@lOMClv6;^Y;SoqGULc?_iQuA!&mG%ek z!DrcI_Fq2doxqd-e<2*>I45&l%rI`BR-i7TBK@60Z_;47FzzLQCJZ6l#Cs%-yRyP~ z`N|ISUI}xLgt-W1>9N0STbsj8!Dukn7L2qvMPnU-CY*jmxspcg=WLo#i>AU@rigPg z`AqZuh+iz?%qXonofQp=*5o;Zf02t1AU@{#gTnv4!oMk3wkxJf8F%HV!1<8Se^}^U zKc8dD;(qZnanTM^<5H<3J=QI7J|=PftI!*}X^GHr6jOv!`h?JZQs_*)pMsn9Y3K<# z-u<-De@5s{yf?t@@|)*;PUt=_bS7SJdAalj&KHILOG0nP@r>8-pk*oF`LfVHm_8_S3@kKd3u4hr4Cu|)zwNLm@)P{MTfC%=h9)c>wHc)xvjsi$LKZAGn8YjFeu|R z)(gi!{KN+J_P5|)m3drF>3z~I&0+slLKc^q-Hj*%>PFbt`QKJNkuQ#mJT_i-kE#q( zgG2@qhpBI)&spzm6OSTJ>bLI@j`3)^I~E|#W56>E-#H$jtni(C0UnpI-<7cQF+LQX z)fB3U$(Sa(IUI~NwnjG^`N;NzF{u3@4>|lIje)jc-A0ia$U-(vQ$*tS<@BQ!rQ@G9 z*}t`;N&6M%^y6xW_Ai?3k2wwP=b!9X+uGg|Wx20~T+SBV`+byCESr5Lm04Lrl^Gqv zvi||XnYKYXWF@@f62CUpOrAbmoTPm$b+|R{wQ?M37vP&cd6qXzEkwe z`{0keV%3e2)Dd^U?Q`_*U87e%3LMruh6aZFy=cgDJA-J85sstC5pz*VP7T%NPd9aKf}VSC}9e)-NeGw=%Z_KwiNRlL#*UHIA4}HDI3n@IRd3b!XapPmo;&^c|0O_fclX2*la`mi z0q=JL{Rvfz;wAF?3j9hP&If>8=~z7n@+$D=naSMdZfT2`sBrFl=3%%o&R1i4(-yY@ zSBd$={&)`>UM!-%bZ>dX?I-N)g+J!8$_b6u_Vdm|ou9uW{8FcRXgAt1>u46_@xN5M zn&Wk7YdMtiQFS%-&JqNt4m9Jk*AORV%Gi`_o1}4dRKD}yq=C##SXvX0>z6mr#A9qo zJ$7O|?Ejf2bsgPCU(<6r?Ie*5xw+~>M@YfA|Ov2G!gjz0SS_qd1H^aER;tosr zdGo?Bu7AE$4F5$4i}KXzA-qY;*eg1nSxzZvkCQrQAA;LmEYi*8^NzH$;_yME6 zNF;tG;@6BdGm~HFK9yD^*oHY(o>fSKAnD4rtsQgTpw@gqj;Id?qU~+L7$hZF8--BRHilXn41al!@xK@=ljwzldfSij&$s?8J>5MsxRx0c zR{2F*LiP2=4{L0aZfB^auCag?5QxvNG%(4C^qnUY`YyBIe*l>kqVoVXE(!zmAq_efHE+$1~>bA_% zM*{W1SPd#F+N#Aw@jTD^x3|>BB7u%z9eGCUfE_Dsa=xW$2u7LP7z8{~kQ@IgFwOCyE}Z5Ivx0 zD1uSpv?&yciayBUL%o2$mhy;xyEaxIh(tLM5q|TCtA+M$((<2AcXOl`@&hUlP7sWz zK+yy;Xne#)qID{2Deqat)rW103|pw^HZyYD*A%Jv!kwB8EfeS;!AH2$%g1bm3v{tQ zxxWGD8kBxqgmQs0WRzI7>p)p}T*&|Vc7CNc6lR0i7^`nb^5h5k2QE;{sW>dywS;6o z4&?xRORy7*Z|E#2MltAs2r5kaPWrbt)lK1#@?dy2MetPL1TCo2Lzw^{ZEKHUGCJ56 zsz+ZfTP~Z!(8gFcYz{$c(Ku8(C@;_lyMkDFYO04uZ2%9!HXX)n2$AweIfAymMYZf` zYb;RH+C~{-K2e_J2QrB`YS5_*9%Y(|kF|$l;b5C$0!^nL<;-;v+ER-te_*e!DHh`5 zN@#F2fsK8!6)RS(qySFgg&JUgmTN488r$e@Hubs?NR7`uZcBK> z`C2_izSem1<)1x$zB+QY7tDepUzi->Ct>iO*%(o(H|89KMev5pI*^q&?qNZE`8A%r`NsT6WBUBH zOd;#c2v-uO%49A-{#wqv- zdHA`hbb5ZylKqJ6qi~88`w!)-bkM`p&BXf@zHT3mHDJL`<4;xT;|zezC7%v=8E*RJ zmMF!j8$F53W?q=)DZgH{E%jwNtJgvHuU8tf3y>b|8rnGXJnxsvyF2&j?!T%KzyEZ{Cs=Z82yVon zl!LS8U~`R`r-7aB`qg2|0!!%HTids=*IoZeFiOkYjIA(U$?!AtR(jG#hljoH(li8H zU}D?x32b)PPj-i3oUiP8*ypaFeytC1kdHP)yBjvS>)))$F3Vw4^V|z%qZ4J#(TXLK z(TjCMm{_JKOIc0T7qE`py@D8G>TT*d(1;MSz&P2?S!b+w^mO@P$Ma;^8k~0Ym>zB% zmx6!BVQk+^;Jyq$x4!e8Eu=wuF`=Dm&bnLZwh5iFcgbfZIAeLa@fJ9}LLV3UTz)&m z&#YB?<6@j{7@yN8@$EWV81Ui^(=TBLB+L@bsdG=SNr!2if?p-VDH}f{e33IG;fE#s z6nhadp~k9&V7G@cw^O?@$X&EKu&9~C-n|GTh}WAo_h-2L7doSoenQgsmXjHiFfVQx zpR-%S?3pSI=(EG@lQ3_UFh*WXIl1xYJ68$q)wyUhc*%FJ71}XNYt~)z93xL}vwr#v zE7PQ$degjK;yGYxO+2og-6($9a+w)dfs>NB-frWXI^COv_7Q~Q|y}-NmjiKbyr)n zR?b$&vwbM%)G2pMyk5Cwo8#}j@bl*39?~Mr`y@=p`WNVP%ljcnL1?}8$8<@bsqcNxmn6&s5{Bbe_OUo?#rA=j zSWH}DzcvTJm=fZIvT$p zk+|$-*$y}C?*8t+0lSiJ?7N-tE64gN7HCH?L5J`DaSwow_j34EU@bo3-5wye{UH1n zJ22RD_+0_NO8R-sN%EZpzDli~jtupivqlo%Uid9#TH&ER@saQlw*BohJYEUEWsEO} z-!<@C!EjiT-QKq&Iik)FYyPi;-x`L?;kO@t>yU5UVkjFB^qA!a;4e^R*~in!al^w+ zz*i$3?n`isNry?puTGW4=;%;SAC9l}x+G#p-wK*W)B$%Yuq^%s?k1ia8`)=RkqhoE zA2n&d3p8O(qj_YNj|}J>O1$p|O;qJSIl{pas)L_yOvEKJ6W3j!>r!QLbh`J0?oyp5 zH-0Ey?*(qFsvBUWYM6%)1K+FaB@=%I+T%`?ZFjGVLXG3D1+L#w_w3ks???DyT?ZET zG2jwTVB640!s0#-++Lh(OOEcexX%E07507%*<^HGd=B_A;@zZF`dC6#4ub{BKry9T^&qk0ka9{_DWsp0&q|a~oCA4-di5 zJ~(SaW#Zc0G?6ngP!yPpFm{CQLtVG-1D0DI7V7PfM|LI?y+eBjjlQZM8tIAmS}bJ5 ztE;{VelT`0-fCxCu) zOO4gOrOO+Ooh?}XaEsf6Kxw~pc)nlvOL-2LSM}l|dZU&)WD84@t?gKRH2mayX|Ph% z!eX>*?Vj-1%NuGFPbp)Zfpg=p!O9R9-PO`EYedV?EH91mMgodL;wkjfV26ky^U@S~ zX)@B{LaSQ1vS*k5URqf;N0J^wU7xePbe?oQgi1Dwy>#sq4sK`&*44I#?Ov7=FHHoI zfvPQtP4QS8rF@lo{cD@BIv%PEbYP^;eFP$d$9QSDy@7(`5-DEhcxeZ15=|#<8-4x}w&`Yb+;1XU_lift4^IhSkQ=5a_ z^p5xXu`uApzurkRa@~(kqZS!0+xAI?+oPYH!)tf@bN8hbr@vyfnIHvl0~VCwu+c0-cr( zX|I)Df7Dmk<~mG=xq9OiuRoWz!_hX*tC{(*C0_s9*4B+7t}eU#yH3sYZ^nEBwkxz^ z4V#+0Hi#3cc5g>jCasREJ*>7~fJ)`{v|KdMuh=Q0%SOug^eO3dCX6heF(qAFko%ns z9nOfja&7Xd(nXLjl@rbq~TtU!tzOEZqgli|d=laaP_m152 zwKP7t*Cf=?F8f0!%@a-KjRc`vIIe#jym3Bvs(EH^%-1K2-1#V4zPa#-RmJ%|iIeeP ziE+cx;%6q@*(~%7`uIc+w9E4kkIpj=2_g8#Sj|Q(E2yqOT|tlw?Z)|IiSy|5u~|{d zES48*%HT_$#-pLp^2Oo!k>#2nwh0C%|Rztd^5ntDeH$nfZvL&djWm~+#2kK-iD((=KhwS0*AK6^D65617(wE z!+r+5c`m@L4P{W<09u6Ptb7i%u4lK6x$|1)j4Nf;oZ~R}aa5|rre1U7d}^*WH=et| zK4%Q7-Fs0Omp+T(?gM`s;mbU0b99%>+8p!Db4I`NamHr%$U-pb2!_M{iv;1<*`l)zuZ78BFX;fy?O`2t7TBl^vV3UoWX{6s0kDpnG;GX7Fq06}L@muIKJ)cO`Vb>t& zfP&JtnmN0ed46>2{)v4t_O)d8#bSRz^jZtPdS8=K4Q#aW`5h{Ru}jUB*#tyRE|Gwv4{DEq+BZKAOlnubYSYafO$1*Zr#Q6=_S+&2ydR z4g|Uj&9|5!qqIl4N9Qjdp8b~Rne7j7?H-@g&oV_>9V>Zo{q)@zXCXZ&$KDX`&C@lf z-%NeIEOo^DZYk$jo3q>a+{+O4JT}XovVH_%aH`Gh_Oq81W?+!O-BZ}L+7T1u^! zPHmh14RITrHZU^MZRYujufqMcS0wxRH7kVDYfQv1MIEX2GY|e1;Fo#s;^W!=6|_^u zKIXbTW&KsqnP-hRS2+w*o4+hSmLfYaK7 zV|^TB=1ZCW7x+*o#3JpPC&r8$iLlevs~lI>Bg7lzAMUymO0EIH#FfadKc%u zcyvRTu#_M6l4bkj=#{$>z8=vajB9S} zd?N1z$?%62&oz;lPC=D7?6pi9b?K?rDeBHbWMvl0SZ`UgY^qK)BOr=kyV(oN3oI~( z9T>nh+9(&wH|4oBPv2VysaH53=*sep;U>%L>gHq}M)}LVb{Sy`&@M(t6(!?VbiU^8 zJER{_?pZos8t8@xg)fZ6M|e@5m$oRfZ(tjj)!qAZ6s=#!;T@kdA7!(fpsZHZ_i;U0 zcP}=N<+EXu52^$DYVEWTd90Wn**Dlz-`|bpYf~1BXV)Z0J!`Ctw{o^l&s;uX@>Vq) zJi`bVaVXQN*lPLAeeNf=u@TJ`=V1f*XfJ}fE`(Bc z!*bhBa^Jl=8+91%TR zsY+nx<8RXAt`Do2O}Ua!`r)pRNm~VspB|r^YeIB=G7QG%Ha;btB46|~_keKs2yR!= z-qJ4UkFmK83&S=s)PvjRJ^p^D&-xS3{*iMw$9T$5#_6uvH)*~ymzOR_*G|#$e!RyrYP9#ovi=Q+Ak@BD9E; z@WOB>6CxbnNym4y=ZkR=NBwsS-rev%XNiPARl=LQC@SH0)P9xhX;R&9RKXu-5peOP z+ibYEFCXQ6nhMMCw6CT=-!USxK>i%wE5R{!ZFkR3*#~xlO3Ou3c25WHdZ%`qkptc@ zb2Dr^>EV=tZ1l$~8r9-_Pwk3C>&Ghpj>EzE3t^kZDO z2Yh5(W3ReN8jVunFF=}Q+-GRWQ9jha98X-R_(4EC9HV+RQ?q~bIFT!ab8QiQ-(ZWa z1KgFtD_3xe-wx?*J$U>YH#RkcU(pqAn8uB@?ZC5MDDSM7YVgJx0Ew1k9M=VQD6eNh zmm4{*7CAO{O|8nC2qJi48PNvte&2&`^L-D_2QlqB6;2fi%2Rjp+4DhzHsAHUOr#^! z7R5O^t?O_H4RK-IQj>wl-7~~vv}w?~911iZ;u#IqO4;DP8Pak$fZ9yJa$!4RxzvL{ zjIl|;<79eZZCof9w~q8Vk$2j=b2=~{SGTB2`+&QJw?&xxfIGBGjYA6@zOPa5KEAi< z_gU(Fox&ILy>_#DFXB5kZkhdNe!6S0%TeNC0LbKP4&*4#i5CQo1_= zZJ~g>f9DwD%+?x_uQ|kFA62N?J=a!7Txg}@ZJr7PhtSX0?p4Nptah(4?s64Y=W&7d zTW9=^Q+_T#3$?$x&xA5vL3c+hI%%E99SCZJEw3G@l9bCv?{}swY!rDhO43*8*Ff0j&h$yH;fi<`ll1u zZjhSqYT~%#h4*ksUIN5nyGf0>Yv@Ko!9cT$yH>kfvF+6E0j+asu(?DoZ`-_tfaJ%paSW04~(TYk8#YtF#2esT(slr0}$8WIksJ z+VdJ|&mpvDhHF$<%{(Qr2#sKFT)(@HoUvH=QIZ{YK3c+ z$O^(|`Dq!;#D`i$_Lzq@C@>!Ut<(4FVB2kjz3)x?ci@643Yy%!BNXH%&ymbfzHrM{ zSFBcjLx+A7D(+Adc7QduqFr#h5&P4cniL&(+D3Sro|18#u~r35Zkj`lF&(C@BOqmn zFNkIM2OC{K*w7h%_})~gR&7l)ajP;>d5Ecc&L}I5SNqB|p7oA0)OdY2UW>jzOt(F6 znaJIF#vhF|ihX$au1HuerxSfc8L)BkMx|JDtD2MJcSuCua7VYz2QJIHC>Cu*Zxd66 z#PW1}s(iW0TGf=%;Tli-kD^NPb1*Mdv;be$Reg3CZK*9j+>a@z(b}OASZJ`}(Cm6} zjZEJlZm{iKb2M*g1F!Ano>MjVG8dYApvES|MuL`?yZ#m5jzMGls`MeKWP5*@WBt|L za*z&QtEcyU=2<`V5!h{u^SN3lTD-dR$+k6&^|aBZN5_`lXYsiIi?>7}1bO>ofuZ;E zrq7ep|2gZ=4p4Ee(l0y1gwuG0Q1+v_()al$0b%{DsC( zccaS2I2|&^wK?kYE}dV^oX)O(M{Zr4&^@1M?$CDq^m*VZ?jBZ!tVY0k?=Qv&*(f9g zUOD!;47@A>Pf({*d~*(;0^xT(V+p6-zUuJHrBB;}I574!+cEmgJu2*w6L%#UYJd3r~$Doih){zRtU+oEn zxo3|xh%EWC{MBTO_{|bO7(cLg^d9j-i$mXt-Mq#oEHd!~TDTcmT@q>9gJ1k0B~X^Z zDDG^u_bkp9KU|us54=cQDR%L4x(3>ceYE(Oxc)j^jGYx!z338r-%gd8N>k6RDqV4m z8&26VhW|MpJS=e42IqR?XvF68*0#;{>N-5GT^B8wEA1_gdgeN`N)c*RVfthXU;|`KXa+3gfnNNbhrR!r2Ja- zy_4pQlcuK%2Y(nbQQw)fP0CO5ZDiHt-JEYyG&tn~L01O{jGURXO|C!f8dZEM4RfwZ zr|;eaY|b$$d8;syQw8kLP&C9jre!a^apVx?xYv<&k+0ma+@uZ)jQ`p-YQB^6+U&Qk(CH$u zTejj*Wy^XtX9QfibMI66gv_(O)AGf|O?9)8+DSoP@*Iof%oH8Mqs5~-6TflJSt zM5TlkJ@%ZNxI_5dRj4);g|bIGlswLI{dohCk|DECVzHV+t` zS0uRh7WOJyHu3#OMaPVCKG1waX0OgC%Z>iV^3yKl)2+jN=Vq~UZ<9KtA9V=7*L4PP zbbkPC-245m-O}d0@oWL@A~WW2!lAn6NJusJc69Z;;>6B{X88p>MGi9Yu>6}s&8AE< z{p#8R^=5w<)^;+|!hOT$7?P?F+~1zzkCVmLKF1yI8Gf9e1v@Gn?sCuYL#(a!w%jxQ zFad|`={lLXHq%eHa{cWoGY%O;{bW+99Z{&K9N3Kd()ZT5<*x5kqMMqR-&=SZb;J2? zt&6#rCO#4v9>(4oef5HFi%osoM!HA#c|9PH{61E`=!64WhCCGR8SpG5IMi!M}EIOs)C-3*zTm$qiOs)aD{(;V8vzb)Sn5H?=qL9A!*x zxO3YQ_Q5q`o01Ak(=mpV*Z2ei&pY!f1l6XnAI_zr*`{g&ch^O`lNS(H@)MC zQKD(M4kd4#lboDSz21!#5`H}t!vG$;l$}-?NJN3WdGCn24E4#qU~XF~aNfi6LD}9V z<&;g&dh^o1SLp8%dX9T5L9+zE7Ydxi?-zNw1O5*8DvUJl!67d-eq>yj4*{+j-!C?)kTS)7}j?&Qf(J(5MERyAwU~P2{_Y_q7f-4kg0I(K1C-#b5G(&7*9cF{wY(GzxzFWI=^(rfx3CI~CEv8gg!$^{o%;xV`Zp@1W^IbZ89f z;rx?+=*NdU@E8|&l)Dc(aGbZe2*nd`<8dENbGeHEjh92FRFHQw{xZ)O{P%4*>c%%O zhvdB=?<$}nr|OwyIoxkChQqrBLy(ykLl@-fd^pZoH#QuZoEE=ORFL-+{+cr2o+!m><;$U@E1Ye<>J(%v|7`0G_mN zoPWwkCZ|=ZXuN5a*tA|`lz2)eI{sx3^AXA)ZZ_ZbFb+B#N^ar=76RjahNikYg2EKnCChs^(`4`A*gdj z2F9B@WxpWrVfZueS6=qpz~t1G^2mD*G$!x!Z0a{i%<~+R`h9|7x;pO%Ct;q*zGO=Us62(zi$%ewhWAyL*}?3 z@86L+W#XT|yz`%vImD_9Xbz%$@O=^WEVLYcQDRJjYuOPZA8VnL6PFU<&ds<6rzX zKK`?pC#SVo(TpK2Y7jmr*tFJ2%qQ5iYBSOzb(h6dW~I*3Ey(*CvdMO_W>I_R+F3zhn(jxU8z-$8VOiP#iy_0Ajv>4Oko}7ev&SFejTp!m@ zcD_yqx*%^e{xZdDAOG|_Cg-bC(X0VyrUp;8`8r)>;L^(BhtCKMXWh0iHA^@}8}Q*7#8z(9?tnL%BKam$Y>v1>9gUU@zh zAq(;b@RvD#@Sm;MP3EUc(cGNp%GjxvpF1SxQ!PLD0@H;MjJYtwDmYEW^F7oR+wjE; zzt}N3tol7dt~+<4C@03O^NtJ7?UV1s2I2!f!}|o2EeU4; zUy!#0{7~-z2e|Vfp!kq;-bn=WoEw1wV`#dDnJblmXAguOM&l zO?>x0`N(MuSGLD^Y-K05+v2Xr`o6)w(VhBqU-imW_;yX-z;G-khx;P&f$rg*_{^)v zOO4C>hj7tEZ*XtV&hEh-@oIcwQiqH5$K%7*IMgT3J$)EyM2Dg~N3aXE8XuNs^5z;$ zZu<;`Yh7|r)OGQmk@x^Eccic48K0mPV&zP38|X{$6m>ObF(o-1MsC7LMSc0!B&I)m ztIjYhO2vR;hmB{bCx*N2T@Gr&XCfZl&08fs5%au)qE_YLiGtS{WX3>JVm&2>bMT{a zJ&R#-qYES^-xR<>^JKi&<-$`Ap+QeMNTJ3Pib0oN9SXNN4|@`S7cT{^v7Gb?ZTiUxYy>K-vU+)4tBHPs#IxLtzENr9jaGzsPe-xDJ#qs zDx7O{tH;WSC$s#RFfKu{V#T0tZkQQ2&oSgFq3RJIN0oHVXBNm-9c~>ZSL@F+zDhQc z5eO?I)m0r6(X{Nuw#9e!4Z1NaQvE4UH*r=nc0u75h}Y%h6Ip0WQodG0@P^R=gEfUj znL@p|g~3`=#iv^Msuix+`qk@A8ad=tD);{o_a^XBR@eLZn-G$a1d>3&pnw5EaRCDX z4B(P&LLym)Oct=n5Rw3aki=w$P0>+;8X|SySKODFDS1VSAEerQ}U+tFQId3QB(1CZDEh3^pevGiP!rnT(fz z3A#@;Z4`)eteox6)|c+tANdbxhOyDaL%NKVl*P`mGV$zBjt0$Gc3to=NjWKqpF=Z1 z{O|ED(=`0%6Uo0cv{PeF!R{qJut!4_(Z2xj^`QAc)3MQue5##sacJhp#f z`N#73ou&~&{7C+VrQKL*_eUPVR!B86Lka32FrbgiQ6EnoJ)x=7O~%E{&m561!%t3bnJCU^6w4!w`M8kg_kS; zI8Munzz5QEZ?vpuS1LL1j^!4~KPuB|Ky#i?(e)O;4$wUeniHU<;luhH$-nCmzjdG) zuDgZ3#qTq?zXvo|uBUI7)mwVU!@s$wTUN^kMVAU7=?&w1j^;+5sc6h^B)(^la~kLt zYTDlF+g{LhfaZ*|lyB6XM9SyefPW1%rw0^WJV3;JLH<1tnq}uGy58#1$*|rAnr}57 zk{{8(tKeVaM({$%{{8zW`rn^`<}bQ$oYRYcO~{B6RFa1-RQ??S5GlPE0Dt1emh~K7 zKE0)PG2(adC6=}RQbpHW{xP^$K~r~`qN5frQvT&2Bi;thAy+E8VE~chHw*YTK{M^bKgXztHu1>2!*5nJ=9ld%n)GA!`5;)fH*1{V-&jAn zsd34;-q6e_3h@%u?0PGT^~_p7YhnB9=2f+g%?p>cw4iHThZC+B`rDUG^0n2jZfsxZ zYx6g+TnKN0Te+~kt&Zk}ElXA`ZENtZS=;Jen>}M;V-|jJtoxFc-sLSmZ!0EUCWFM9 zWgVYtEoM_oAu(v}i#9Cf1Ymp1QeVcziX$`1TQO1DxE_7;40e|rn;P1zI|rVSYSpc& zKfowjbxqbOvlimM&w_%v3y+(TnK^mNjI8YGlcy|Pg2Xb`eCwJfY@BHi;-V>(4#6lDUZdk@z(2^41utp5) zHtfS~uwGIqu#UCLZA_eNJ|PptSP+#p^#pYN>1|o%l=<*iK44K+Ddb!>_GLW|r~Wi=&dUod8qnI0?N>Jj5{vCCX=SUR7~Pfw_y_dxENs za9Zdtm*|zr#u3J?phUYVRk4~|Q@|U7OWjyTUI7A}He66_HZkdFWloi(xIMY;+W$7%EWCgGzAZ){Qm9NDMRx4iz)9!!%8*O~d`Do?PsdVH$8p0ZuPAArG~Q z=3t*S7AAYK^G4E&Wf(=+uPIAOko{l6XS|5T(N|rz(QqI zdM;wE@<1Q0B9Ly=VVNc~8fU60n~}DSiCU$r1nb^;QnnNsPT5eD2iuf|xV79PY(<7S z#Kz0kDXgb)SBZ0M+Vw!wAD7DWEx2zkSn2G&XQ|fU)CJPxVXsGK7+8px0kz-TI>u-s zvjm-~HCF=VrRU5LW2<}le}mZuAi z*%}l)0iKLaugofSA(NGHX1h?3mb^+@vvOT%Biz72F-1DFl3nQbxrM`|)U0C<`sTPr zgEERo!cm_kH7r2{!Vb8zw*dx^?3i9lieDym5r4 z?(X_ zzWYQO7Hz_JiXNiz5qFD@ge8yqim+{$(vUaaF(z1#YabuUGf7<19i{Dl&cI|Bge1Kj zgUO0b>t0X7G!ck=%;iCF&P@n9dclRsOs_gkRqx+*o-)IXr=^`x`LD;Eb?OaT^Jd%T)} zIZA>-nm{_-YQsF@Wo#3)ExYDoNiwwQ%59>yW#o9w07`Rh zFNPR&F^+&SULmefcDsJZ8q+ZSAA#TcKmM$!(^hFzJf2Afs&sWRAxjjg~QJHa@CLOj)pGcJ)h zxRl+(;VwX|8LTqZQ#0<0w80m$boQ^=}#f6Ydq6o7`DA?C3mq^MemvKc_ zzzI~mINhV95T{?v;eAo8iGT_IK*4#YY1t%>KZILF%3}aGw zlLr|lV@}=~i>$@Da&u&Z8HdK$u$YJKjN~XLe3QK?y_(D-|5!zfy?y+y}Ijv6tlQ(K+I;Uslz=!T$sq_-G_Z$qM>Vsr-Co|*PI4>}uL zC6i!Vn?$3+^WdNPT1|jufhx2*T@)WVY48zw5Ox}f@0hj`0JdpOGgQ#@z zsb7GxWXBs;QH9&Z6O7NbM zp+GZ^;=A6`eK2stY|le4**@Iq4I^uxYae<^GZVGLB#PIFgj{A#+mB%z`P7SpV7rHI zJ(Z=RgyWG%JgtZpX(nRu6l=!ReIoSFj`2R12r;v4+wkje#=>%_!%v+c=Y1zEvb~5; zaIf8=z&s61=-IB^G+a^a=3!yX?ROM`^PEzmQyCaj=Bdgn#RYjt7ttvu4zhHM$C=>7 z-uTpHgGOFEuN`6xhQQ8^+R9k$bLJ=`J=i$rdN0X68zUT`HcX)bj87%MgdF6ES=jj0 zvEbz@#mo%w??@4+KOzRmT+RbQXsMw>@k~2f@&IPx*J5yFMPV+qr;wu157RQ%L>1|D z-m`+} zcGpNc(9f9^Nm`v^BT6DDl@a}@JX2(lGdBB$TorQ|eES-{u?*OCiFh63co6k~$h}`G zmckF93O_~}rNB6UK&yRr?oy`hq7AN9s3=jVzA#fpFt}iG3LA2dHd*^;+A%5^#>qi% z=hbu{LZ!Sd1qVT$4Ub?&rB4V{3E<5aXTW#)O{!ZhO#SCN2`&r zQf$8u`-O@l%EhlhtZJ9z2KjNY_{La}Pa<6G#e!gINtNlfxX7qHDa$Qkgx{-&jy!4= z5-Yij4is)7mI89dDtOZr^YcsbjF+7#a(xOIii4HO7XNbaCt2POfmx+Ppg)u<;oPCb z3VGcwm*5Rq%#+vQND?B#R_`0dal~z_)P8shgMTxEIv{57b~~WpDNR!LMPd(EBXDH4QSw;rm z4HuGRutE6haFHi$kA)zZJaq^ah0uq_(s8pKGldm!pZZ4!Zy5)UE&Sx^_Y9uRw>h(G zok)3BSx4nyGTGqt*50sw*~yelITGDLFQzm(+M|?0UB(f*nDDEfB8?y8w9mN$6bv>y zFjBl#(amc`)=2~W8XUQ$i;4SjFwl~A07ug#!yN>m#Z2ZaHTG{H#u+_fMHMD>4&bre7?6#Mg0LCpr5iVdL^kONAnm-F9+kuO`9#kr6kk#BxB2hPeoK)17kZ+ z1!oQvqJMLNirn*|f2_~FRA(lO8Ym>yc?^=sky3>>heA<^wo@`Vuhx-{7envmzAZ*> zzBme2y&#{H9eEsYi8~)-Wa$qchH?{uYs-Qz+c{P(NI9Xj_rq3 z3nRCr#2U4}O9a>sn-!#O@km_9GB(bdWS_votjJ*0 zbSoRuk0+b|8UE=rIar4|V}v;A`4#be6g?O55?%lt2XH0I{*J7b#*fop;gepH8s531 z{6;-v(XrFdZgH@IF@rLeNvs`}pafQZLALUXB^1;`)f8}OBAO9)_Bd4sfgxvmv3^yN zZ_3%cNE-}Wq}m*wFAe2(QkVjz7e5n`UnOU%(-9||xX8)eOF(T9<&cvbrE+DkC98t2 zu|lNM4{+zqjC`&utU|9QPa1Ez)-afSNhk*~EFCr;C}ypSmOc@0b5splIknV5`2g?8 zWdDIZwZ9b@wdPCBU<)ArhZiS1wVbw-1lW^;;)cRX-jPmUk%B^2Ivk3yWd}fY8(2y_DP067sxg_LOrd;>z!iUmWsyF| zjgp#It2#Q6;78^Or3JXdDKO|WMW0Drh~#6n0z*OAN$-#SmnTW<==r#@PqNu35u}_E zHVe-S_Dp!!6$NXsSn*Yy?+UViE_P2VVQJzLQC6}vShgxFLJODuy@>Uj6(s`+QM}7E z|JtOP6$v9~xyH^YEZCk3D~6|prMk_yG>#Mz_CLp`{t9;PzLLqvkpBxruR_+o2hMOh zH3R_9nlfsa+{*G&yFaM|VQ1rRP@@zh+&n2QC8zm9Zxf~Bko`F&)!k^u_USTF@ZSg$ z%3cx(Kk^J|X-Fh(EJ0?}ev6PS!dV2#z0hF@lYJVJT_f^?0kUDSuW1NY3VTU`2-Z^> ztQ4vitjwNk88fi4Q2a$Gq${j08DuFj66(mU&{(i$y$8D@%*cAmDw46jlmq(KPy>HDSsug5gCcTGWqS;`i@4GpW_&a z;t2}ibKy3`Lxy~Xgv@@l+%(NB&1XX8s!B>QwoizforUTUPVyKdEfvd-GZ#OBkJPcO zTq`Fsf)lR5Vy3zb+e+lnJXSd_I{@0V-0#D*QM2G#hQ9<}^|v6V5`fT}NofIiI3qdA z!=o;_E)=rYV_IQO*X1^`a!`o-Dw0OR`y;&o|D(#?#UY zpJyy}^CW&sTt~o$-8lN!iqa6yv>7qjV-m&~3u3#HBC#wpdVoZju3!y5y_nA|DDf8O zBlqNrv!*6*W@hFTX^PocgI=}QEKqh}gD1mDrcDHm>IjAo`WQ)5VbEn`Z4@~%^ z>($wl8-9v==Jl7ZeAlur5&X94qZ9Jpc>VI{N^V~^tZwvWmi0Hmf1Pvotve>3Wc_q? zT*v0$-t)FPswO3B?W$>WR$Y_1{DT{Rp1H0x)cuXkQQ5OjyJy_f$!{J$ ze|bJyEWt-7U-Z`C7suzkd+c$Co%Fm1o4~lCGbL*LyZ61fzIJTe$sc~(`q+SNXIRz) zf`4yA$6wM0Re$}-qsggvUs%zJ&255Tn{{Z$#=U1Oo&CyQ|JN^^aXjXCqv=ogwh4c} zu>QPLPq=B@Lm$4Jcn=QD5d078Q|8^*IIr>A!6gwu zqjlmR??h>C5d0q|JeXd4)w9PRF|cXytv`JKoMqiE_^Qu8Iqm7`{*DK~_}A}7mK}MX zW$hIFmk%9x-pbz`x9id~#;?zO!FtoOz7zbLXRiP3^iytmW8f)SZ#DAF6-P=?ws`H&DaR{j^I6wA3eDGB=7TwP91s5 zwRageeR8s*Ijz%b!X#nl7Uk0>wdfE*h8Nv zOkcWw_unr#3LAyX1aD1wf3*AOk3Je-p0Oiqg!dPa%Ywh))uT!VEI5Di$Uly#y#2Xr z9><15!DruDy7ZR0V;Agx;U7OWxNrM|Wj!hQw~jpd)WfcLKJDVOkGS}+ALagx4Woj8 z@S)fnKAt{s)Y#9zv@ZJo8Tfw`_VcAgWxdlp@$N^SKX1j!O)=L;r^5dl!9RWa%YhdY z-nf0!9WNg@EBm_zIPgyJ8?MWp{oB^-<9@#_Yj?>%cYkeJ_X)l*^|paYhyS_z$dhhu zz2u)Cj|JZf{1kJe|71Gs|LQ*`NU<{gKx2;G9~J>m5(o4SUX|cRpSmCv+9Rm zy@>b-e$qvY?~b~^BIk&j?6@zIGw#5ENbsdE4qklyU9%>?FzfX^Z{85_?bU++{?4!7 zYdHMO+}!uKj%t2p#5ClC;9si#cv18rKV4In@K(Vw?^JBVvKPpXl&IOUYbrA~MeQE6 zYpiEO`Uy{=z6k!lYmRiU`rxTuFU&skqg}fX`PQ=91i$Um*V1E$-~3VMtZQ~%{=xYu z+iL{BAU{ws^RguepZ9&@#h2fI?unN5l;973y)5yl@vr@SaQTi8eJ8zjo@IS5_|(}S z_cWb)%_(zxS{}cx+-l@QaTAF#fL} zJ^!bji|%^m_-}4Sc`Xxs(YEh)KKA6Uli4BsM34Y&ld|dD|zxwk>w>)#$ zZ2u#Png5!7=KVMrLGYLU>zRVq=bE!GK4Q$|b=#iCuI4oCI8BLq@!l7bYKLC@`KVvj zy>$7AF~ydZBlu}IUb{1XT*asNx$4sfH5~#HUSwGp z3O;B2{U;sy=GLeGQS;r(+UQS@#3pgUuUefD{l?}8FP=2u?~e?fyZaT(dQb4{Mz+rT z^+Aj7O1|{mwKu$ega<3C5*eS8rDtAx^_fqlUj4|UA76XPM<=8H3jXrwtIyuC`=jYs zj(IR}){@F!;b0@dKXh{1-p%oqn_vH%zvJ+)@(|B+1i$`E&t)gQ6@S?ozn@mSZOyp5 zE$dFfC%=1M;|;5JUts+%arZ~3RWGrumjwUP7iV@oy7Z`HU%Thw(KBzY{=~Ar7yQV3 z&)W3ZpYlsf3+8`TzvcI+7l&bIGUV`0zyAL5U)}2&b^RBE9~u3`NXt4|@Tp&1`P9cf zd+$H>%I|%vV;@J0cADVtyz}a7qRvQu@Wsv<$7ToSV8ijXf-iVE#XQMue^HGwcQD4)>j^!on4>45PW#A;H`IdeEYy(8jm`C z-OJD1@!9>5lWz+Cg7jrOudFyUea6s%*UnqK1Njq$Qw~$2-kx~f@6P?rc@;M-zWI?u zmP`-epeezZeSFBKTL-Kx&O7*ps#`iIqyAP2{x|b4z5bs+um7>&*Oz^=;L~3ojdn`# z<3HNv{`WQO&c0;Vi=Jh_*z^}{I2Zg`gRh!ZeD`HnFZk!+E1pVycDrSLDfpMpoie=f zr&r_8``xPr2}y(`zsP?8+$1`U>rS75m}XIlBfc zlj>K7?*HY+P;RAbT(xTQ@&nrb7P`~9Zhrw`N9V$JUwv&Gw(R{6VbwNck#4*4qPH|L zsMWRg4NLo=lWl~^mxiVL_m6bG)i^%7Z?cuXRoug<1O9J!l-IYd_9C#pgTXH8#`>nd z>DpTBn%n!~A9Av-K^IJKxvFz(S$#kJYi(cNT3fd=yYCnxv?aJxyI+J2ZEY=W{h%~E zL-)syOijDL75B@wA7EjrZT_ve@COGW?LStU_iKlW~KZK%UZ zR-F6mJLp!dr|K75wbwRznR$JCiDSZ6!`s#UpbW;;;rD-AgH)k3H8$e_J8u(?pxb}I zCNG!tkN2DV@J^VjwvT$rFp(v=;;oM&k;qY+>^}_>s5A3W+;#nlsKbrFZz0Imqh4;e z5}w+BoJibWzuMbx2TTM+fgk*`f1fpBV@sW{k9;PjzpZIiOLN~o)-B_iA<{1GSN#1C zvYn@eDDKqj2>TISV{>zZZ_P?Y`QKCpb0~y4ucRMgH8LYwsi9 z=_}KO6(N13UP@>U8n$NN(#eg@O?@?^@U^xbhmQ80_p9pG_D!S_=g+t?Jj91?gyC-H&|1-8kMl+%#i`ElhuJV@0q`zsguK ztIF&Drsa||homu))4#l{8ynVmG4yKf&*%&1`?j0<`#%J_e-07x=&P5K8ef^2F}`6* zYsLuxjjb8{o|bWR#v(xgPlWntS0CB11#yYkOs-qvsa@SrU(v7(hw2dT7CebyhiTy2 zRqb?O{r?pZQ?pj$fP;Y;^Z$d8r%e673px|$L;W8m8^g6-jT_=E-{2m9e9v&Y%G%yNAZvThsZYdU zd5k)$GZuT}aF{CI@p#R1s5a1!&neKsVOm0H_W-WPn`xzB1~B;04QUR+`#HUrC#nSE zZjGE2jRjRhZM?BpFatW}G%GQcQKw2zbRnD$#WJv&sZb2cGa0UNE@fInh{4(r& zp%bJXrrP8QSXO}XIUA5=wh=H5umcbUg)6|U0OJake}Lu3#Kg&w{4^!X!NfErST}3i zMC*2KO0X~?CN2`K?KV!b+|zYxQguz&hWM;+vYy@4liYD3>^Hrg+<|bc>_p$1&1qu- z-yh|h9r*qv-!YqGW_E1%jh*#`?}+nViO19)KXOe>z?Hab^Alno5O`wOtg1v`0!nUP z;P{!A@0;Ah?#Y2O#zdXup9Tgqe6D!v|Bui=U6>m)t1Mh2iU&Xs~-g0{3mh9g6)U=Iz6a9m#xA=G7 zhG$XMv-nQF>~U|`<6WgcX1yR(&w`5~qp@|J+*yL(3^7&UcQoEKYb}0RCTTXe*W=4P z0T?pz#%lz*9Wz2gOIU+9++NvY=>+WPZeM%l8@c&5ywk$CIRG5}Zo_*{3V!5?@`yUq zTiN2BgO0GUGkrFXi6K%5E={mzrT*B{(=!5Maj0hP9QZ}2)wNAnoRgSpxSKfTxk%cb za8>|PcDM7P*l5?1RXE*kf&&cTEy5dzw*W7n3UCM;6x@mvpy>4iV&=%I1!R6K0VHSE z12TOLfQ-i|ym8i5+LUNrr%eggMDP)96NR^EO0XtmX3w8AA#X~Pz_|m!x(>l*gnZ3i8(6c(d zrn+Zm=b33;zZ^xPzxv}lPoO{DbGMvJXI&|?r}NvN+_{+)UDhpPeN5-YVhw+NLzLsr z^GVP>wCh|U989{-vuR%BWy4De!Mwm37`ADVZCYiUSaTI!3`}gGog7P!;zK(=PWepn z#rn?2X>YzT_h)SuTZ2*V4gZs4*WsONCA0mrABIW4S;Mn!o2Yzs!-SW8o_)kGl5L)7 zHkhi3_ki(m`wHf|qtc`*(u2#=L2pY6&Lv7D4#3v!%4o( z%}G-`p7k9&>v`YU^Gk;XKB*0SCyoEGU7MfRUjqV9?wWP#Fn>bcobD3?$4|BV-ylF~ zwv(*D8FA@Sipd!p-!P1}8UY~0EeSv$^72O!&^%W*j&S+4`HdB`4o$eetfeM1(}X@U*f zvuj`&jm6Xw(OxkMh4qSv_9`@neLLQqFxDiVtk8*fRw{nviCWHGR<36MDsNRQuAOMW z%`g=Wt6Fg7>^_WYQUixzR0>YUXaF)mZPbzjEsQ*!3q}p@s}#`-jI{zkJg%T&txxkY zyAAX4nuqaZ9?|a-jRb=T8(#y+{J9noeO2ogK&IzbK(Myp-vPV<-~R%<36QZq2Cr(S zX;RHJO&EoMaTShh+Z4`b;q5t{Qq-qDkz|=-9uH^cp?v3)q(De9_f`ya!(w0woEWJX zC@b1{g%ft@`eEetT=p0!1CVMo6lm#q?hqzZ%{l3;67+N;>ZdLfaDl|D`0k9 zatGz~=26*fUHp74ggCwbFg5EkaJu^)jjdk|Fj z7lAXf(a^gA(9jpd$DAD1&}XxuFO(qI(9^{WaFJ6OI6m7--qg;P{@LuLYz&vW9+y%7 z>lpPjZMQQG-^}#yP3~ZY!4M58MbMJc=ZTS&LOw!O@R~~J?4SEiXBqre=}Zi!6WWZ> z4ozb6CKhTiod@CTze^{XtRLxoj7d3lFV!!)_Ay5 zILZu#6IrwIv&CCMVU!{%94;i)R4WAsYhyO(x13A40)5HspzNy~g zy4T$^9Z20b=^QZoX+JVS1*JUf&Xx#coIa*2C#^F-O+IOypDxDE`DvZ)>D{TFqnWVI zUnqjk)^rGP=z+Y8vR?SbZiewJy0e1-$Ks8}{uWgdX;vLf8G>uX?`XVfqQz#J#)?W& znYQD5j^NN@>V8ZDN=DhTj9g+n#>TPS$yKq|(Kc?DZDOmW+%3|qSA!}`p6$of12Z%vr}L#QDG#a1ch7~*2k8TYi0(b9qbP+EuE8*0=8YYOZO z!unE-6Wuld=A^P#g996iQCOIv*g@#M-HW!6yAkUfRtIB6ZSYO7;Jz^G!KA6fb3=n>@M->uua!Hg21Zd)UT3YU5tDalFP)g{x#KC$xrRLTfoD z^}CFC^wYlae+X%@h=VLtB=I#C?TF&WSW)Gd;ww$Y7|a9IXq#?|O~<~dqGLTo`(U>z zFxsPf+VOE}N5syA4N@-+_4ahp^JReH_08;aC8p< zRaYDuyX4tVCvT!S-q=NTR&>`!0=BiR3mf-FC3m1Aq07G;!3h3mz^=1mHud-lyW+NV zv2VCJWmc*`z2jwH%4T=eta(xXq@0}G+>V$1AE8q=@R02r-{?V5apKDV99$-SQ#d|4 zx#IzN)m^wE$+V`r8LdiD-gd@!ogB02S>Hij#qpg*{GcH>28Pbu`0hcSc`=!9<>YivxHHB#(?J&#q#I|` zr6ZECaL@DU#=JXLM^M+2x}K6KBAH6#I$w6S>ChuKpD5F@sVju&zAG47RyfIO;N zc($&5LhaQTYZzaQ15!z29>$4r2mnS@T)A=A9Y_8Rm?#O?6_|kF9$a%^?Uhq!#a8Ff zI%cL7g4mYlm%7!-4f|fCzc1DHOZ7LmHYy>Y6U zX2BZ3CP1d+bifUOEaNi)S!@+}RVzo6YUOB3ux5fv;TWF672CK{8;2BXI;2h0A=Vm) zcx&7`8;3Y(++{ZIDjTP?6J4(OjSW9q8#63V7yGJKbw3vM%f=5_xAXP^tgUJd&7?b*tR{|J;)f7m%m2(;rKz1zI#Ph zPfgGC+RP%EjODeTv{BNwm*kLp)zTlxQ4p^P6IZ z{WYikG$7To3snPOj9_mTOVFPeBG?=GMrrmH-mEZ*#yHWfaEC4H&}Yzh$J<&@6KT-e zA`?cGHT%uPz6lwk)-vgHz0E3$A7HV3O>;dK6D7(#^f*x0wfJ$k3uRa?9pm{7Wc)5u zpZ51@`rGuZZ`9xa(e!`S-{0!*cl7u7__oLS7ilB`(@cqm?6+H-mS`o>+5su)Rs)U& zTmwk`=Q_YDKhX68u{ANBZ#jEC! zXi{@XG$mNS)V7IoyoJKuVB>DqrUY4qquf4XDk}Ki2UU@*@*CJ4Qb{>`K)Z!cw`>F z!rd#3Vng;|riaN_6XsUf-A2xr2l7=UqJ>dhA56v7rA1 zgv<*td(Hr4d7cS)BwzslnSf^lvLrSFUJtklka=(}AS1mJubLO4NzDti$0=_0m=EKX=)p`I_(jO@qNnDLq~wd>qtP`n&}^Ke@Lop&ls$sKvhDihPf5FmL|E=V_SNEzx&z;8_Qrt=0ss`*ovBMwe^`bi7$U9Oak zyAynEMZP18d?S1OX(WW!4G#3c`jeAEwj#;??#^D3Xn$;F0d~piFeN>UHaG*)Z@m*zUokeNgNmzZ?HJFy5tM-I6Am7gZ!GE12+G-I*=jaqr zt5EdpSdM()Rxw$&GDE# z^?!Ht)BYr8F()Mtk@PM%Suah2>&fipJ00(>7>e#!Tet z7pn)a&{~*J$U;WUC3lc7m&Y?|6lU5&S$F>mOltXJ@ryu=`xUYCKY1CHUH-I9-(cG2 z=N=@qM!8;5)BV0?q~N4ZqO$vh!W?L{*OPm#5_tn9HeI8@?&3BFaAp%W%FNw8(3&%%$D1!Kx|55AR)`)m`0 zlg4qpp=@7)2@M>Y3ywM1e5J|YLis|GuIRqCO+VQtsxy==RP5T9aWE-gCc;!A{y{Nn zodZ)Wl`Yyu1x#m)E%iCd7pf2fLPy1z!fmomm)NG?*rq?&rtL5lh}*x|xR+o;O+kuY zw{h>S z?19Hx3t{3oB9^O@we4El)M=Zpw@r82rUzjvkuY9^sZxB2!SC02$qVNBCv5ppLh)e- zf@adPlSS8jj6GGBabl|mt1m{dHwpl{c_D(mN{i~C-i@+4HmrleIMMAt053BETj*fa zG}q&5q5bWYVEs2^{EOgJ#`r^Yuhb7eSG6yb&L_R)_Zr#DCnyS37ITwAu~%^(KKXEL z#qTTCr*)V9zBTOo)3EPpNFATwYkCfN`TRkDKc>Ig-=+WW>F@3Od$<06Qh%>P^7uTc zzqvesj~NTTrN3{|_CJQ%r|Z%%^waeB^_u<^{cYU8s=uk54NkOVXkQsJ%Zk!57jK%z zpA8k|Kzwfo%m+LHiUp3OPXb&DmMg*-0U;Aa75gv1Dfk|R@MZyy2BeY#@ejBG#{qIK z=5Ro&T(OKOa2g<_M&NgVQvngSH3N{HuxvoK+cN<_2b=@=6(HU~BGMj(Z-m9;5(AR} zV*!r?#46_i+*qIqoD7%*=ms1DSOK^f?!ACN1J(i#1s+Nt3mw6LACURj0qDZ_MS$Dz zeGTBR0dEGpA8-fY1Au=6{4L-vz~2LY1o#l(XMhg_VkeGu5g>NZSQi711H2UQXh5i0 z0w)1p30MYr9pGZXn*i?zyczHzz}ozk!B*ChF5(SN&Al{-~oD>ApZcIst4TaQN(b-F&- z3IMow<5NknbnkHO%p}79>JHZ%V Q)4!|Jzq`}_*$&qiv10k3PXCXpSC;kcQp{vt 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%0DIcJ6{uJ777^H+ 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�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%0AAsWA?k0u~ce;XczQJrC;)FZ~e&|Kz1K@`;zc zH-dJkr_|F9gGlI2-mVwa#M=u0?@wP=obKdh_`J#cnNHr%0jV|rqLcS+m{s!9q>`5= zmAneax6*C<600o#d?U zRFc!AlANZ1#e`P4FSW_NvVcp?^~!?p%*ujqV^$W-n=Q)4wXy(9HdkhK%*6axzcnA7 z`shbVeVWI09@IG`3+{KkvF@$5fU<(=uMt#Hp*2tTt5P$&ilDw7j~{oe%;QpYXxD#g ztO}Ggp)SPtGQ5MOvva)QPQ;ht8*H71ucERN{|4_`yyiJu8|V@rZ$I%=g%+O--SiV# zsc<%#kFnpF>HN)raTb5^#L|@_*a18n3_(xPXP8*5&cy4toFVR|WU*SnXdAeaxRVPT zx*dD=n=W8;n9o}otdkGPY*oKb6;8F$u8{y%=d)WGfJ~H+@v4fOCRK6M z6p$sYoYqO_5(#O;=`ncm;%ZUGz2vJ3}mftn@s^FZ;}3XGclD^$7#--P~O% zd>X4M2E#g=Sv@tjS?(z1DYB$nmAH%Wugc@)Fm1y-Smxy8m&e<|!*XiM3(F(*0C8jR zo}tZdx+#xyK`Zyrx4FvWF`$Kf=}vj z1K?Od=D`7gOw7;ms&Y(|D#tXba?CD*D#tVhtZL+};;Yl904EMK4pRwYQj3ih-#Qz2 zuFZFWjl0Fh-EQNgY+nWM;*{Wl&dR(`$YvL2y@=$!H793S9c50ByDB;aOP%&PGn8;B zde(cOXN~%H$M!)$4mvY~IQF)I`wDMNZ+rN_dz%xm3`MJhZ)ri-_mqhI7U?koGO zY1D$B!;q$4&A~9yZ%QI>-&2o0uh~U&sL&`b<+7Oni!=v(@1i-ll*GUJFj&XN=#P-+ z|4Prl(I=)k@wTR$=EPU{H+D#3+EKf(iFQ6-J{2hKOwVHhM*_|V%mKvt53&$$0U%qI z)qvC{HGua3)&V{WxCrnGz$U{RO}!fUg491HK2i6p%8v43M=wHodnq503|A zzI=~YwJm5;Z3~(L*5B~`L2&%1DZrUqv5{`Eov--Lw{g@R3U{rIyV1sRAdl2^ivxLz zZ;Oq?Ag0D)_)+t{W8<9mhX3fkd&R2nPJnnTR;M9AW9clF{|^q+>|l*UvA2&-YihxhYw{q zzPO>fxmoWo91S!dQ&wlIU+W{V+QXtDjU-^2FbFJc`FQ!90O4oVehT0LfTsc;0eBkV ze84q;b%1LDnU?DSMTsHJRn=_4q^f3`0$jPn2@>GgDOR`>ZQQ9gj)g_>v9Ktai;xM?7%sMq5Ml zUyy6Fz`!GQV<3$5m!jIxtOw^8<*ts_wVJ}jCDL3dM(K~@T{yeCJ}TowUU4l|!MFYb z7u7;BRu)Wu^Dw?%c|8mAM|s@@NO?UMkn(ySUfb#$^1Y7`k5g_F?8F{MYl_n*x zGzGX`RjBE5ZkfVW*|=l0DPVExRoRW&xSf&LoGy!GI3U{b)T5vDS@X`oHScDmKP4Mo zra(dW>x{0)p_qpu;IZPXb~k1L?>|Bs0fp)-g$Dw8#z2{z<}rhHM%8(HT!z<8H!8Ub zjxbyJ#M0FtRq_pZy{l*GC&jl3uXl{oIVk3*D`TG(j(%MvYBfIW68Wl0hSMu{S3-;^ zcGm(@?5+c(*xdkF19%hQGQgVw8NXWqDR$`)6(x2wDY2s|Ak%~j$9B8I4b-M|snQf~ ztc@FI^Zkd#ZUzGW|AyE(C-3~v6uUbhMijey04a9&0#fYm1EknJ2uQKx$*>f=hXE;e z84wjEb~Gumqe+RK!cpuLj$)^9Y)L5`#ZKWUb_(|&7Q1`|{QnKHbI!^7pDA{aL5wJN zPXbcxwgOV@o(81YJqJj!dmfNt_d7s}-4KY15<8ld*wLiKPT?qa3P-V1IEtOZQS20s zVyAFBBX*^}l`Lx1;T=z5j~?n;j*q@G5Gy87_V|CR2(k{QN1l!kTZ6tGAI3I*$7eXGo+hYYjn0WcK3}?P z^f?MA-*$ZI6H}`gFQ3;Tvy}0-0V(5u1f-1r8IbAy4q!9jdw{C|-v?wmegH^W-yP|# zWSu4@>of%{&JQYFjWz|OE2MC(Hg3Jmcb1L&uaxyEh{gXuWjzh)z7W&ImK%KF~`DeK8)g)CMD}M z1*`@5DqO8Lsg9Duv7@B;DC-JGSywob^=)w8oEhJiI(hRaD?#rF_FMC9|AFT`0NTK{ z*W?uHQNS7XUvLDnib8SH7hz~*1&bUV(iuNevRAW_Ek1v`*O#) z&@s+-jKyoV?G`;^R&>Iw=%`uI!E3f94P5uYKV5Eb-_K#*%P|gijD2k*#`<}X!p1@b zXXhT)k7Mv+R2g4Y7gD!OM7pL}hr@Is-V`}@{6;Zx)}8}Cs+anN;8;C8D<&q$rD8f4 z-)qEl1-`F~=~jF>nwui0DKNKEEY2=+6g5S7Hi?P3`iPjA+xLrU512TxlEO{bvPvUG zLdo1pu{hRG9gXuT@nu&(MV4@~6@uCwU%HfHor*8}W+~jABeI-gaR_UI;5b(_Mod@Y zyRVoy20T_wH{y$p-mrTMz6?c*+{SUBnC`}RyqGvHe1Mo9!k4m~Vr|BEe=%{act0^E zA>`lS&BkkZ0o?dwkT#7mrlYthR#xCA|`nd6TKW0Ct&c%KHUvg4)OdS?D;>) z^FP(|KgIJu+4Db1&VpmweS_wNEB3NolG<<(-h#G9xzQF!3)o`_%pdbGJ%{0EDqiL) zpH65~rZJYKwg&(b0e9gq;O>CQfYSie0CNEQ0u}%c04xI>2v`BQHy{Tw_5oZ7I0aDS*=f&j36O@GQV1051SM67Ukh96*+`TtJr3e84*ZgMjw}&IDvh zngzH8@F>9N0gC`%222Nh3$P#HJAjPGkANcpIh495Aj`|{fP(?|0OXAPP(aoM!vIGD z4hE!D4*{gaX97+I90YhUU>4vEz>$Etfb=H}SOUn}=RiO%w4MOi1UL?G72pAYCjjmX zxCU@Pz;%G50nY{u0aEUd24wzb!>ra%(xlc;(iE^R29;VZT@K8lDZu0Pq~xc|@e0%d z0UnuWu|%hf-k~WVdzo0a(=FB;GzCOkv6QFtbTldNYFR8}pDwF4X$r`!8B2aTkNpuH z5Rij;m|E#_UK&jSIhcnUC*2y3FHHf_J7Wb$w`dAj)9|GhN*A3+Q^1;qFZEG6H|~om zU~Pg)rNQ~ygq`0A0an{&P|^~tuXY5i#0*ZK2HH6XoG=JF094i7A7G_rwBetc0bH<` zn9)b`(v9QEtKHy*CT=%UeB4OYZlt-~=;LxDVB-@rXzmBs=?_b6qV}i1&7xoo^B6&H*#ko0oMUh}>RbhEqX{2hRRT+mcV}|v$N*i{E7_a@}x*IAh zD^?EC1e=nkyJ&ky#I=`K9Ly=L3`J&^msN&zNZcqV3_L5^owj|DiF}zqOutm5&QS6o ze}-w^Tz`La@+u0eaw-ZD{k*c$ir}0I_}mrg_`SP!ufX3uce)mqhAVPP^MamKHE74p z;hy-6z`r*>dy)t7*-P^VtmHwX5LYE{+MK{VQszAqzuHk?^%>M3>SrYEpr_c>xY+1< zYX|Y81Ruh^+PD$Ct})6yCVsTStJ~!vX9pp!NY}({!P70)zK69nHdZgMt34oEz4!>L zGUivsZBOk#!-+bkp?YzvMfb;uJFPgfCuK+?ngV;{-|Jq5k9&{BxL3t+H#H)BbaSw{ z5o&5`P;uK8|7n&!hCS^v|(03Jx(32KS5EAixR$lKp&1l1C~eB#))I` zZ=NhGPO;0=m3W=M(-V{@q=KW<%nrO zH;gPsVNOMLKT*3g$#w^N5WH@`d2t*4R(2AssoKs#+K$%`JFIYreoWK+hj{p@i}~^~ z?jwZObj{C8SCnq(Go%?jbax^eihKK)*O`@Q@>E6$X4pFJNS7N~+70B{j@%ge%dd`B zPn5hL37#a2|C8+h6#1Vl|2c3kP5!4~@;`Y9qL`QqoOv=V2|!FZ23UQDWPyR<9|ylp zdNsqcU;Kj%GxD~;74~Lre=_Wwx@-XGtUs7`gw&OV+U`->E{pd{!v-S&=KyKe|Q=5Kh*QTEB;L!W6N!VRj0$fNQc|-O~F6YLe-rK z))LLf3j^I{+Uwpj&DWs$;?#*nxOXp7h|0CRASW*vL8X{i1X=e(J95(K@w*BC?l3lM zzmM<1@BCm@WL8dTesNF*p)`k$lOi9q<9DlebG)yNM~cdFkBa2xgjuoMX4u|Q<#MYzhx&(G zGAO^iuqs#{$q5zGHHOu}7xv*Ch$t^0)ceS$o&`x|$(r(6Sx6LjrWmr5; z`e02MPtop8(z=DRj1|4nRl07+s&(~Wq}mCmn*Z6>4z^QJHd5Mw>rFf5Puh<*aU-|7 zwNAN7KZjc-)o5(B#2kvO+g+q*X}b4pWVUgr`?K|N%Asl;?WgUngg;~TF__MYg33>B z?;fXb*09}dRkRa9n_%Umombbw45l9}XHzT;jD(|X4N2SOG~lLLxm*j@Sc~*xIqwTS z{4?OqbC~5@sEi1DilE77rHi9*$I-`~iKGzYpqvhC*e0m%_u2}iYsF5n!tMTMrO~_ZnFJtb?w7R_(FxDV8jWU z{&nJewszx~m^w8m`N;h406ob$i5o7dw(dsY)40^u78;PWyqyDDKRKRF;TS%MX5uE` z&6ClK{=tek<%IGuT+6xfa|3W$Sd`dMR}-zPji{?)?6Bc-1zvlg!^d_*w(RNW=>RG| z=feJ2tE6cK$|B_nBUgz(cZGKv*ZnHh3bP3Z;9Uhvc z?Q(X~30tc5OKtxOZU1*VPiPOz-SiP9Dh-KCuogNhM$T7Lw2`1CS}QA>qSX!BlIRZF zNwOAVah;u6ttOvHOSTrqoZqVs^l|*dm~{-@Z8z0gxI8BsZK+?_h9!GSSJBNh=+ISi zR*|Zc+26Vf@iR|ftJ_K!c}_`)S7ocbKNIPc$XdbDm10$4eneMk3?pd?U1<{xEzwO= z^_E3DecX8E-h@a&VKG`yLQitj^U5kqE36&+S*aq=l>2KCPg74LNY?Bru0I4lo-Qd4 zS47Y#Dl9E1qs+U09a+Cl%ZMXC36^OC-k@owO-cC^IYpS*#{U)RC<8ZXzVVP#jv7<; zuf@x-)6VrYcG^Pntd2Jcit$L#><3L|&+7K4bI zw$~Q$TheZliqlm;$_b`2#z9$PU7Er=tbTdhaGz^r<*Ur%?!CiOY!o5u+`jBx5C=N{sh`!i7x?Xo?*IHcK01v$l20x<5(`- z=^}asj%49=@*v521#UAfUL|br+NPvEhrf^Yn&y99^Sj%Wv2G_?f6%;K)lRn?bvjcn zcuqI8Ca)UPH~KhjHS{B5@*vrj2MiC#<8j^>2J@61w&^hzZy!FO4~Ulj9^2<{gKi#- zk;jyROB&DN3bT#TQ$?lQ@|7=^gUma!yjJM#j0@)=<}RtmWClkw;- zKR?%YztDD>*J?c08JphWqS0^nxb@eXM*sin;xl8q98+=JRBZ-RKG+6lyW5ekMC)7p zyW`C8(@#Q&FUk5o9v{-j&G!!vAJdTS4R0F$6L=G@Z(xpX!z9X9TQfhvegWF4>atnL z2KzP%$mc{1!kfoCUgtMYIZDeQ^%1T-$8epapOPSZi?rMDJu%7Uc3LmSI0m6j&GrQP ziRjIl;RQAoBD2aWilhyXexjF#YC+N1fAH7?O=&x}^L3xm%Y&x9vd=z-$3AFmqA7ZE zS9)1hv7%v(o7XOAoYhzK)UNb!MTw%Z@8a=S^;S_H4?-J?}PCbgXNA<1EO|7`}K>X+<{svb>wR~|M82vPD3NAIvp!~IP%vrVT`n&ue zj+BZw_wbsQvji)YQyvatbq6}Bg;?WJcubHwkaCi!X$9qlLClEEHTXUn9}ebKmKRpc zjZ~J)SRd^qXIpm{U<%9*jV0 zWZWPp53{8+P5vcVhJFkNG%$)BR7+tDJ<+B!^_1?Sb)|ERU7>|b3kwPiEy=crhEjgn z>_~YqTv1*q0S@bYNp^UGxn+5gP+6!lRFYGgGczb6Mn6()p4{N9oT|dI^04@wYUA?@ z!#TN_+AArFgv!e*%JQ)ENXbN+&BI(NE|HiABlsyoh)TtszBZ4M{9McwsyxL;TAg+# z@M>95aE?rI7aM=lZN4g$wfvllV5Ag5ok;_W5#!O%=CR$vh+dH4C@#yvl1uRPw|Ou? zguyCTQb_q2VAD-RW8*T=rq8OtBBV;lc4-bWEtC@u&n_#^kLaW_d7EMLhjR*okz8a{ zMVS&42~Va?$ADHOoP%L0h8d*;leb#F2iZI`gB6Tz1Om>%%Ak}|h_MuQdpv6wo4+C_ zHy1ONx#eZE!;~78XM=5eI9yygN5V10#+kg<$;%~MVT^y~E1B4}3tw??W=`H*j`D?& z>|qub9qyqvF9s?wBaIZt3@0WhF*RLLsocX_9-aSlN{X4JI*hy7coUwAU~ws;Z?Z-6 z?QZiG1cN$^d)T;K$|3rFp-Qn>5~?ueVz|u%MO)6`bBLF1*wi5-v>wRRdO-S(@LPwp zxG-Fy^??tCdI9wzWesg63}ohnE4Tzuhc|(^JZRryCI5;1FA3*Ce!%6zX$0NrBRn}V zJg8S8E*1IWv`+72;tE2xkF<;PcEC56j@xxjs<;=Lt%707F~bp>?G8s@;meuB{N&g- z)^&(}+y&_ZWk@G6Qd)(yaQz|vhuUqiyuuI*L{X%m65caBh(B;Sd3g{O41|{!qPIpo z(gFC=;A~8Sqq3kFMW6%1$S^6FNCVKziu2>pksh?qqR0t_VrW5e7ij`~MR_F#mf>z; z0qSbK46!5xZCqLrDJg{1qHu^mNH6dQ=V1Lru($vkbtb|P)awZ@|ngZ2i)1DS*yxv11N9%&kjk5m>$Lcwwg1d2`p(i!9RlFmaYe+XWF zailP>sTNl^wPMz%Au?gYgozZuI3(nNTEk;?naf0u6)}C(0!;TGEJ+`EDEwrbZa>|o z3rSmj$?W>Zik3DE*s$M6T#~gUZ_(nC#VwO3$y`Sw!n_;onx{8ycGLf0|CX=Qk4d!l zU^vjm9InG-`beYT0q5tKQRoQe?bsqO5g?U?yL_91DHd=5Xx|1|$7&Cj`NwokdX zH{M)0IuoXIp$flR=i-A#ilW?bu44?`r~g@K@0fP0>H|4_>1^;|ZCl-Q4{PlsMs;>I%>L z)Skl=PsY)y_GU6=+z0LC{lV~?@k(m9Hlw`#mhmz^%Sm1|S zvznrMJ>EF{=jRl+n*Ry-FFp$Yyf#$xOa?Boz2Z&G+({pW?i?hzdE4NvjXP9uAAC`^ zqQS-;0bEl1XTMIuv1AS0Mxfoy75rZx!u(NmIdGJn0q`adc=IH+pY(K+v zGTRJhEmoX4R89q9Tqab83LH&P&k|7|igC99VPV_I%rj<5z+&fO-1A{G87I`~tu-z6 z&C#Y7)*Vc%An<9fIW7M8({oykH^^TUHoFT=%^A?Yxjr<`6OeXn7n-wHZGIP;GanY|LUZPjt9@u@eM3zbnllet=R-5| zhl{(=oHVQNLUYyvF6%;b(sQ{F&8!J*vT5xeAKa~trE{PeL_=&-ER{0_}oTe7+f%}M(ceP|}_Pwql<)`*(78&AbI25Kg>9+ z1-@4DB^G}=@Jo=k)w1SI<;8m78Z75jA=*C^xMr0HwqIuf7qy&22FZ6eaI3Jlx2<)F z&37JfCt>}4lkJVliwl5nC*JW&%ET{#U+ap0K@0X3yVh1-0{VK=yBrCt+`R(yvm~x9 zP0e*J(bZaBt^|IQbwZ>dQXg3rsf%#k5&O5<&<|IEWlQlZ3 zu(qKtyreB!+qAOL=%a$BmYTX+8w=TT>!NGmAKH0_EGt}OeAD zu4}Z5ojrzoyV#|D>eHV4v|JlX`DFMk&Z$#6^Qvo>XuW&A_~jtUdk1i9t-OV%Ty`Lh z&Vs(tidPl}k}nG`ZgTKy0w4L!wmJJqce=uQzOI3s)>O~?ADwxMQkg4PJq{yhf=3n}(g3h2>0R5VhSTH$4|K zIGh}pDPZP^N}psmk0HYi;n41+xOp%xVA$L|scxPazc?W(6HH+ft~58Vp5BI+E=Cpi zzHUC3zb-~eqkx;QlENX%D?hI+WUo0%ck_hd7`V!VM^|E{fTU$VH$ATyv)GtiuR_n7 z^Zi-|`@4C#41t2F~$pg3t%M>1N(pr;*9iA#NU-hldwB-F9`;)Z}9@ zKTi4$b@M7ec&tfrvAx(u#e0~WPZsew{_WA;2y>h!4w`Scn=h{z5`V$%dLM+fQX*I&lS6EqE zRElEhh=-*4o^BphvZ*XYR`+t#%5!Gh!O-P3%S}gq&6%5z;VY#YC|4uhbWTBsD$2Qq z$c$f&a?|t5%8Cj(3+$}J8XZe7!8&CuD=5QUGc|c$5IeZ-H5l2kyvnW0kSvh^m&A39 z9}n~^RElfL`JhBXp~Z{N6lI4>wXOY&sDxIEOB zGs|=GRo%9~n@^|NEL4BSuW>Q-$)U)sAgn5xJ-|&1t2HL*kV~3+(|x>~7g{CE>3fXx zdf6!t2fBG<-3>=j^vY&C`8mPOEBcLvr`%o#H8F3Ke6W z8&&~eLk|j|$j4+iU#Kz{3r}W2Pukjj=nH#HhmEM@@=96VVTt6l2W9%{1 zgJO7O(H@o-f2 z%i3#6AAo)L{uKV3{V8mxa(~K$z?sMFPx0(d%#6#ot-dDkUMm|Ko^d4BDcNzWAZs>im!h`N~%t#0259^xQffG7<99`&G+w7*t z^hIbNYnyF4mpr&fMM%f`W}6QG-J>58hrTX4{O>}?t*mbQv7;b5j_EEQyVqn!Q8Z6K z7ms_ygkkLOqA_3esELGcfQ#lGIiX$bE49PN^z#`#5qC0Nd};*6w1XV`aYjkVtrlHso72zH1;$^zU8C4P9Aue9=pT)>-CpmFo9y=o`Dvm>4cA3Xs z`Y;#W9tzRsH2261^Lo!%niCuy z*1cSGCq3PxG|G>xSiUZ!HS}v_EDt7{)rbvgqg*sIp3C)pqqQD>82U<$f3R5FW4Zj1 zejIhM*-J(9Q1F}a3o}O=yJxWX=Nn`}Q6^doad1X6_duB~zA}DAS|6XY2u1>*WUb_3 z1agm-Y~nR>F_%tGRp%6-2e9*V!Yg!L#B?}Co6WwNQ3w}O zQXj0P_D3ba?dVj`_dk@ks+RyzEFRROXKef0;9b3ZHA)ZN8Eew+0SQ~Ill88>?jvyB?;L?IASb9LN3u`LTv~e&WEiw=kjpPn>m+ zQTg;N+%{+O|OZhfgk5O1Ce{UCvfkv-bKkd zI@Za*1D|=OxMQU{OKQSSA7W+4&qHI~JV~b?_Jf2gF^f`=Q(0`*dSV|4aAwWBEZi`nvo4^Jptt8_jyZB>3@G+<^iRx-?CKZeU?Rp_)%#XP>3 zj^*yo;>7}tgt*oucgHJjR?Pc%$Ae|vb1kl&#!#im$}5N$#)M`Tm*wUZmxU@K!C4VZ z=wsYLHR^l_h^gAAY0kfhv(K|=7NUW@8960kwwjzj<_FVi4E&}(GVAoba`+nP!>v%; zLY!p4{s;BM>%^t0eZ}TKE3J{oPRe*Aff0ZmO(i^8)y1P*gNmTgZ_te)S2W_A74Ih32~2&`MG6}nuMS2q4XX28=|9f# zvE7r?Jy2$h9aGQIuW;K!MRwJLILF7fiv~fosRqY4xaetCy-g>cx{~SkN0;2|Gku&) zancd8&lL0{Dfy3g{vFpIn?<;)u8PH&a{Xt7gXQ|5IQ7drpv!qyoFjxoOc&0bWXYO3 zbw&|ty2N)~@yUkncl+ikxGc}zkezZpU5AZj+|;d0bvW5pin)eUr}_J^GZ=fl%~`sv zABSPy&eV1$Z$6NCsq^gQd}iBc1+-1OL7(EmfQ{WB-H#z}?*V=c@#J?G{wv^*^r*Ir zbo@^BsJ4xDkZWgO181H|{yK5Anmae!tA68nxDD0E!y7?rzM7*#2lcob!Xa zCWOUtj_IR(kGNIYq|%i&?ht)-#v)vLdH9K1-6 z47wC*O?{!9GUq#pGkd3ha+OnG&P9jQvB)?wBcVHO4ph;Lj>SNniTf`)?q;8>iaT^} z*SD=eAH3PFC=@@4ESPtF5o2M_j48!OT zkus3F1Pw*a>nE@vK+kcZEbDF=`AW7(D_b0*52D2m)5lwFH>_AX3szU z8faCtF3qcLrF4M8EGes4gqgrSJceA$1kPOykoc%ba&Ne6Ln8Cu^{Mi_SD7H|fN~{+ zQ;#%``NH}#6NzAbIbY`q_cMm-)5IZe=ok2nttd~Dz;{Mx9C?g&$>@<82sbI%_YYoe z)XkXW0qL+-)xHcI>Nlr@dVuvJ!84C36F8rQc$X&8IkT&13sG z32G1T5hi&!!gAT=6%-bM?}*2E&2f`gkX->hd6)ePrimMXI2)k7m7$0Ig$!qYAA$U3 ze$zZv=e=o5_LX$%oYFkTK4P@%OaZ@R^_c?B4KeH_SN=eEne+_<=Z2c>bm#IwI&Lf} z$6!v4&!ESExDseO@WVrY0r60TVbCfcq79>sWSHybGqPT zXwF_B=KeHe6M@G1a_4r}P<`v89PFmz^VX{Iil5yWLH1nb6u z{HE3fOqJ!&an@H4BEGPM87+0_VD&wZ2)aw*Hx_%LVnMzS_nSo+M;-&y=dK;FzE@jF|67h?;Qy>}tUp}|6@R^XuX!E5Lp8%aYh@eC(` zeirfBxe`{Mn7L;{r8}SB*ek*V@bFH@N~NVcp8f%)A}?WB2|}Mu9rw&9D;eLe{I@db zW&u~)m2B#;I)Fhza(!3jWn@QpH*oodROO)Sx`d@M>^p;0+zX!jf3*J7QK-L@bp0KU z`U^Jq&Z#Iu-PI;7&;H_)XYM_drXNN*XZoF-Q)Pc;gvcxQPgI+DAimu)j^9Scv5ljQ zJ4oC>nBbv|v%7%3^m`+|0WRKQu-3y=BjGUSTP*($k?5vtoRZ6emPxtj_*&~*Ob ze3L&-ej(Krmu8kK`2xKF{`M%&;yJVA7*+l(RtQzr*sJbOhpjo-UxI^c&{iSK6skO; zJE*rUfEL?Ypnk=hRiU=CnYcTe6^b%v7vpQ9<_WkDuv5I`kI$c@d5mc&g`nc$upFgx z0b9Lh*}8y~eI=BSkfF3z22H`ZL|8g8qMi$fwW?H~nReaccYYyu9pn{*|FLbQ3VR|7 z3o(M5Pr;m7Momk?i&)2(f?{ln^7E>co6^cmorkz_#n0ZG=h)$_fS(=inaIzU?GVOq z$rDLKm6WqzUMalnWl(sQJMvKBmENQ|O1F%vW9~fBdXMI=2rAh(SL<@-5RJUsBeN6@OhJZvPP{}<1C(2XFn!J z&v#oL-MZ%k=`APxRQ_3}&jbZ8UfnjJP;Ff@j=ks^0yj{_lG0!(I0mHjnMgbqunnnUr<)!g$@~~&4{oxj_n+;R@3|wY4Bzf zkFFO{25;|5QZgsn;IR#C78)d`t)GoktRkGE{f{wrsyURt!f5ai`{L}+jaKPXkyFW2 zW~9#PZ#(CgZq;cGGhUHQlryku{}{$Pfhc&4xN)EU5eRz};sDkY9d9s2;?wouG7jEr zR^_uQY@>2NUbjDE;fE!AfJ&(Jy58u%KN9#3%efbg^P2EHa-7hsAg~`DVjuJ2zu`U> zCr{KlC=(CnB~I7K{UPipux%s`eQAB4s2XmXc%-`G0sWh@xxzVf0j5{F=ViIWzIH~? zD*cz*Yg5=K4BbfH`6c=0MjiHy$rq89vSYWZsyMd_0tS5=4EfPzqJ5OMmtiEjY4+Aw z%{$Qn_U^st{j?oAE$FAHeTFeM4s9KFgqglvf8$T)9Byb6gh?!_K5rZkfySkv~YEqY>C2o|Vd$63h~ zv(H}aSY1VcC_A&iUhIqlHSNyqt5@zaarS+_w@~YXGW+O_9kkJ*XQKQxd*{WjSm_uu z`{WfpMKt1vkq-03?2i{aoo>UcChcaAywG5$G#FhrpBg?h`{NyZ_ERMLBn-1RUWM=I zd^CIE1)qS-fft(j(7#q(nvVk! zvIha|BYZRo2C$J+h)PyF-{7GzYw=n`v%0p*`A~9%eR^4&In~h-s^*fNIb^x)eFj6=sK>rh5T& z>inp)LymEI33zpO)E~ba_*C@r+-DStn-p+H@e|n%HDaWvX zi$h&BjwKwHae$AR8g999wxmu>J z0RB-&TOs3(ye-o4XJ0KDu^)wZ4Ekz+)P1j+u*Y5EoJ$v;%EC8v!?Z7LL@m}lk^>yZ zRn3hp4Ru&nlR7*LxPh2U#@xKE|2`kM1mK!mT5Q}L;BdaDZdr3HZnDrmXn%`gH$31x zD`gP-wI#4KPlm~%9@YZ?pwq*7e$1Eq>3|;z405EdX}NR99C0y>KUV?}AM!irHA-FK zvQNiJ{&4FU%-^HHpXB#an?EogLq&t?Tn-M}srDg)Gd5gh;S?>xBQHe?4(*6OBNip! z_LQyP8fpdNg|-8pI8(Oz103udMa4+iNX~X z=TzX(qK>!1$q1i{S9H8E#ufKAH*0?}&J}!iu^eKNG-7-!ILOdU(--WoaTRme+g7|7 zt8q*y*E7ssvnrKN<{SM{=`>$Rrz7(tEu%}u=zCd=JYd_M3}(O{T6?XFIOZYFxCX6@ z5s$dERyVa_&eUJ7aP1iDj8H5|*;0o+accd&25~eG*AngdQqzsp`x|5(P2&)CjIqr= zA*FXSl#DlR?*3-($12IsDJshsaZ`aI8Luz0*Omh8yz?|)`r|PJQP+=S`qj-OrB8U5JkG74)n7*}>Q1T$>O4?XbXs z_hRwx(UulW zV<_byN){B>FKw-EUFWtyePEm-bzN;xJnW)y&UXhO5hFF{$2fRS<-Ht=hns}Q?5%}* z;gW4z4EL7DG{YYI;ANgd=6BS%IiwB->S!GW|GBSfsP_MO@!zNROaM>bhQE=mf>+!P z{{ttB!pBtA}_2N8byDJaJKz|42gPA}wW)!^a5uhLJb2xG>+G5|gQs<%S12tB!)O|X&kD{@@ z$@Lv;LGNK}v-J7Y-iW5^CcWo|-w9S@b8Qt)aHQf}WTxrK3y^3NOY#UXE==Zd!# z{oD90kXM{EMq3jAeDzzVWH4$U%)6U)u_;Rjccm za$=(*CeY~jjIXU*+P*xcjL1m5Q4wzzk=xwQ_@z+SsvovhmW~rg@=cmZ zYrKyKNz_CCq9P8)KjZPD@3nua(A=S8M+|79K>$9JCmJg;#$;f!#8S5PX}iF%(Bp)vlss+tXSJLNxO`du-rcL{#sRD^sn{E&t41m8Fv$aW;jw|a?E4-wE3*M=Xr0GDT?1he6;X?zYhYUSRO42ao9;Y>CLGXgM`5RFZwA_-udp%9 zF+S@x#cg7#)b(5n(O;d~KpK>w%N2-Ru2xNZ_zB0= z-P#pt{9REA1?!u1MqWYCmyx5dQg`{qPMCPA05&?TR%1uJ#AUN!K6lojbyD zb*pwo8h=*@h$|D;2V*9G;<$Q4yCRLhD|n5tD24c(GvIb4-NbN^7Nex`cZEA_;EFuM zXYcC|KnNOFsoE83{9Q3_4o4N{H?MPCE!3_^qkQT#Lfpn&=7(|DLAG~M5tPz=CX8Q= zX4AyyZtaRR3b)Y zdW{`cazI!q;!gqsVyk!8-B;Zl9M+*ib2c)TvVc#D9o7lj=M+1vE@1k@Kl-dJFSbJu zOzCLQs4|5E>&mm9LzdIzZW#{~nxla>DMil~I6k*)pGR9v7oV5xumV%co=8;0k@#mt z8GrLRj|PWzxX>^PCWJAzX}9)yj2%{#=_m-sU4md2S6EMPz3R!}u*M3_H~2SUVV5<& z_;7H*=ZGMm8ULt=M*K568(%&i!Vl5)%dv4nvlVDlTaL7S9;JOgQhWxXHN!6z#FPSq zMh7c?rUa|}Xxu3s51OcmcKkE$g%=fk8XTXagywd{hqZ|h#@)(bt=2w|m-x7SP6dVI z^E}>o{QM z!G=EjhjlbCPFU4h+2|s}Q@{FkjL^8lI@%6vr4H+8JFHW6SoGOHtUri9|G_^q{=D1E zlY_&WDKtle!{cG%gSkm%u+G(C{lO0F4q)CBn!vC!fQ^b^-+-yPD5c?&;IJ}SgP5re1$_es0S6rQge+EAKB5zx;&$EOk8f7sECO)~g&m*tuW$pbbj0@YO{AQV+YajiU~YyB`s^Q8q44N3)y+2!-4TYkPJ*yoBMpUZ8ZOSI4BK|WXd`TW$0 ziJu1hOlcbx;f`~q?ekLYb7hdv?1e-{bl{(5`nQvlUI_MifzZ6?%8mK9&pz$*{2-s% zsyRMy-TK2B!9E`wBW>U{0 z+viKP&x^$8l)^de}$PVaCJ&A8j3R855CgcUWfI zUXTUTX7BUMm>7_9CM~=z+=kKO7Z`E)(?`nC+6IF%6+t^In?d;i+Yp;DGg#Q}Offv+ z#yR^uk%pNwtFkkyQnO}dUa#*r)_m=KLe4DLpTtJ)TX5D z;a83A-x}2%DD|&!nIdgX%9KfyQzw|nu?fLSP;-rl6=_347oZY5CWbxG*zJ(g2rDww zIAalJOhV4sM6{LaS!f;DsBx_ek`OpxTXjUG8LOLRWA6eP(p&Pa^H%ZtJCdX5b_{=J8fr2dfH?sW8FHO{W2}x&VKTIgL4Oz zAJsJU9(9KK>vNVyUD6Kcfl6!Xg(I9o+Ujg;Q|w{a7F)vE7`wT(F{W9Q&XV|Jw}^rw zr#SLZVh^`RO_(rwQnK?*NSl^EWy0iX)7(f{Pe@IjGG$6~^0f5SX;X!KiKj5)SnJ`V zjw?%A7GZfffWYJ4gTQYN4GQ<6$@O>=OkbJYhaf&07NbFP1iS8d`s2+=2=;F*@GYRZOw)z)FBuj$faVzv zjPP)@7s|gwf&X69kd9BN_;JQz1O^dFRYDThKjvR9Xx3;t=1VC5h9iDmpt)`d2=IhU zF9yEWXG<*Wm19Q zuQez-4uwPI-!24nJZO&N1T-Gb$A!zkcR@3Z16Vv5aEJ8ILb#JbGx>NS3!7ffa-Im9 z(={EOh4k-eSZo2!ORdVkaQsaFeg(|{PWa#n=N~Qh1!-}zc)bBZ?!`g%D-=5Jry)#*En>c{JRU*$AMT=_Ek{{+pP6BS*!^m6T~12jjjS9Am-7`&n4cO>|)7BpKr zNTp^IL;1(@{k+4nzQxN2(Fo}u*M7P?u=nRwQiYd)n_yQ5nlD{+q2l)n{7de%tlb;M zyRiIxFRZ7W2APGI59LNE|Ar&IN1cuv;m#B?Svv}q-WOo~XV7e5MDfJp4dq`d{QDo! z{MsdCVe2pRuLBcQU3mHQlz$h3=7r6Qj(iX*e(T}EPoP2o=Ad5x-Geu>br5 zMK>gje{7d`gXYJriY^?#aP54`g_iZ?MT%}f82^3(e#FI)S6H3l6OT7k{5s&@9iSO^ zxsb{1V5sz73G1Dp*>r`X3s*n(A{~!_=H9CmUAXom6Ldd-X8JXXE?oI;LHy1F&HmRb zI;JC3{0;#AF3`NF>EM0H^s@c^2WY;yLHQT1e912d--vz*UOqkfHwiR_Hz~Ss{xNjYGykOM z$XB8G#RvZ`0nMPh6 zgXY#pm4D&t@9D6Pehj>imrpqV&W3-Ff+p{AMHeo9^zR(dByCf4J^7alnpdAtbUpbu z{7J0R;^otmf3JXM(bI}9oPQs|`dZMO{*0oF0SLu^$taH}LG!_Lz56%jdF-!$p?ClC zK(pe-p8fj*)_(%cWiL5&q2f0m@p~UM(_U6|lp~?|nf~1bnys(&?B62z_ZDcTywSWlR~sBLvqV|9JgqUFua%W;P@?&@6B-nMj{ueEx0 zecK{mYkSkGMer85Rg2nMYiM57ymTd|8LHN-ZK+zDK4npT8vbwz@zPaQOIJ13R%!C_ zAj5WyqZ6$qto{^G1J=H5!y+E(X=`5QOCD2tcye(Ij%wAP0G+tWJb7K;P}geR-tU-1 zt7c8D_4}e})ihWOr!T?`YEDkUqN!6-Q^!x3l9oPs{DehIkzmH0Z%xB^?|iRS(^zYb z%dP!=K`mNcGc9#|OYPF+aku=c022#Q3}xj|CTO$E1Q7N6ynG9)sy9dON3l!hHBEAF!BHF62Cx zo;H#HK%}ls#r(H&2%VG8x2DSX5;Y|?&G=n~iyxt=4u|BhA}~ih#KjGT%IB)Aiu}SH zt(dK<>KIiU;WW3TSfV#aR1z|7(Ceby6scGh%*!bd-4#$^Rtf^#otTqv)L`mprB0Nj zl$1fqhi!$(*CdZySTlVMRufvQeBcpZ=nry@E9MLD@RB_}!)m1<5Z=44q&?kQ`k zM>O%Wty8BZk6TkaNwSb|BE0jhgBptZ26&#^6E}mu7OkmnZGxN}kLVVa_kr8WAwuR` zU};s4d@YAsV5%KK#z1EyRm++ClC6=N zZjeofi+aJ*NO`=Uh{lsON(6Gof;4*k9`8OdC zwuxpzH#rnw;WBMpW&k=Io6LhgUr`+ewSmdn*L`gV&<=#T*SA*(CRb+PJ_O~f>yG|?KAh~9#JBsPlAgjlPm123_Z^-bf4Yf7UAEih~ssfni1jwYmmw}`U_F=V4AO^5=n z5jWXl)SwBCQ90?{R!hdFS4JC}kjY7ZqlVIf(SZV5k3Q}=rRx8aapE&yi*q@Jj-`u0o>4tGhoslj0{3ODSGTa%!WMF~7gE%!~~ z6y0Qm@VA9C-HfN87OPuPpajTGq9&Eh5(d%0TNluEC+h8x0OuMIbZz1|y+ ziwz~~`g#es$?EWzYa1W?dcC%he|@-O+ti8PZrL_Ustg&t_`|O~IUmgA$;$&Y1(?AwH)e?{FsjIv{sR3B)IiJ}r8{WN2;r_Q56b3q3akTkj6&)v-Vc^kLJ~qr zG~H28FlH|8>o@E>KA0F<+U|G(h+Oh91UBmW*!MpfhNr8rN?W*ZD77u2*hXAIzfrlZUd?z3?MY&3 zTd?({mr#!+7OEdy1?{@%6PIOYmUyu{L6P8Ab>$Yy#B!keq^wF4unD6d12lnjsg){q z=u9=X9&O9cw^))4t+sL-r)}B&uvk#^5PCo)M7i>y)J6|7X!P-mGHoyRG3b1#IyPR! zYou1tZt@{Pqp6cz)bEnf8DygI#G74Fn$MCgE`pAC+rPouUMHQw@Wxck%S)bU&FBUV zh51Aqt$7Tc)R77eEiR={HI3M^8q*?5S%@Y*R`{=h^S_{$EI`U=MVT!MYpHCXBLyac zmi=_FbIO?lXk*4DI8;(YFKHj+wwI(48>_w4>iQ@~h#sKOHpiG4;9?}E&ES=GJ@N`2 z#RXX69;jI|Tx82ZwT|J{HFFTL3>0A$1t!9J8bZL`3DBjEOIHdd0YqWgkzG|(mW|;g zYLaBCjn+683~^CHnrTSMg+${r01P3^b2x`1vW>`oMCM`>ZCSbC4RMSRFJM@Tm{&<+ z0V%(P^CBTw-D#rT*OKKzn)YM)~g+ksr`51w+M$!(cf!!Q0ZdtWw zC%p5aRJzPgFmz}l!6ox_;*3iq4lYISbf8NUFcM17IrzpvDi>-1%dx9T1&s8D8*o%`JZv1SCdQfVg6g z4C$d88Cz&e%VqRRTcn9G!>AM9WI=|>sB#T#khP+wT&ecU$$?78EGT>=N6{L2=~$~f zE;I!LCIxcTp}-wwOuic0(iXYqXKNT+$p>;hsgQ9F6_imUk%dz4Xo;M2EVXu4>RmTc zL^e70%9xwU`4*93wbE$0w0g2KO@+7EETv~b)YOM4K4cXDkAeSv>2N%3p<`G^NUNJ35Nc*otdI2DsZMJ%v1;zM(Oy-r4nZ9(w=al3}HwE zY&z3aW?{m_o)7WZ*7o!l@A9rhHKSfHRNui?Y$CO1iC!<1T@EIv_5<#6l$G2s>!)=K z#Tc7-6|JbsOEigPXQ3|_o4Cm!McLOdV5m#WUmY(!?SB6Weew8aet z>S9BWJSpYPF$e>yoDzNDOsMIUo1B;_Q$SbZD55kM_b~nR)lor5%q76!A`p1VmMI{Z z;*t^-OdKdLBqj7`N$y^N5BJsKl4ZQ3RW3zyuD2f!hg2`orr{&&@lfE_iYm4v**ml;KU=q`<&CZlX-qkcZkY)K%u zS;fn%%1rK4AzF#1BHvWop4w?5`Y`4V`>OWFSt;fYiJ(yg2tg2=_z5UUXzmL~gH)DX znqR^jst$%dZ)X>uLhJ%Y?=v=W7W@=~z&k5gx^c#}a|8k%U6sE<3Lfcziq=#oJ0FVn zlx9h0-hRd-?)|m5n@gg;L3g_tO;(}0)?py1M}bExa1+!lN#fxksKU&%$swc_H{W4i zwsL|*hG7P&vt(HhaR=&bO~*V}Y~sEMf+0vKj3Lz;LbY;$mQATLYnUiVaTX#|zpn)7 ze`Bu*n0;LVI@|oMQE>Ar5+NBQ+w|pRhFlz8=ksC7p-rm)YWN#M_o&FCLB?yA1iI&l zFtbIxRQ!Z#UFsJ^%f{sR=vQz(BFnTfIb@(h@SX zq=u@5-5gDdJ@kn;YKzVeI7**Kx?=5B% z2Fz7z8o+Ubo?dJst7w=SN~yq+0sM0-@Ro4cc>><3GiUC+C|vETTjD=MuL>PJBlnXe zhs}2=c36r~3QMxFR3^=cT{`yhKdE4c7?~pyfl~c#lj~aZJ0(+#a6i4GfZ4@NA+!1) zRzcq?Hqj0y`~edwM!$;TK8GaC!uCPxsu6zTrryqu!1OXVc%gxrv+yr^W-zBxk>}2J zBO>BPNxE{lo+r66%!DglAC@7EpF3d#W^h(c+-*t($|58b?_!2d|MU-To011PW&6;wGFQ}Ie}T8w28(|mu|R*Vbh z6A^tqYbb%tU?3seK32;EOeUe~xsIe+hro_2ojqNpCv3q<(7-8BjCEBX&}mdn7mz%` zTYXfF9BGPfGFG#h-)Xef>67dtt3n;SOaQTn2AC-GJgQ_jCxamvMH@d^)us@!rP^ev zVyPfR_L!S{rFRo8u_2p*Z`kV}OGI{sT=2?z$+=dpsGCcXIR>KWbypH;?vvTRS76v% zDuQ?n+_`fmn_E;W&^J>9n8WC;lR=Ud?2%CLuo3gSE?b%aw$$G6wvI0|#CRdS2< zL3}~Hh%IF@i4@jit~0h2s3sMD@|2c;H=Gs7m+U3>r%P8?ucW%Q4mYXO9VJ!Bu@Gw! z#jXi4q|~Jk2bz#k4c+G#rK>p1W$79a&>cIrA?r4Kf0SI(A~?x$jd)ld$t)gWSbD}a z0-<-Pl&oUj{|rl2Y5nq(-3iy+f$Hm!jVWBdr=`0oQ7j^?KxS5LC<}{A4w4SD;2>g? zSk)rhXcF5aK67}|?rdxS+0Eh=MyTo-v}9!#;tIMdZyxU)s=$O8t-pbFN$6e@gZP>u z!+A+r1t&}}^~@H9-D!0>dC2}Wll(qN>Uox&BNoG@xXF<%)J}$p3QWhsHwObDsYa9P zSL%{^C_OC(F_j0o;p$o)kIb7V=|hiHzL|kB%69J(}3Hy)R*3!-+!MYl}fLKi1)9p zPI>U(H~ddd+^NN<{^J`sY7+YK{XCy_ZJ#l|?w9`0zw!5r-oc>_!QV0YKu^}2Z(R7- z!W)&X$L2F?mcPQ zjMw(IfBUzSj>ZyMB;&L5jzgb0xAu(Vj=B1d2S0u_?lv3-75q;pB+R|Les29`qnBQg zzvSzWk+Xtdmp|sx%~wx2@q&VrTE;wbGYb3^!9RTHeZ#9Se&OiD`ZWx?{-+=RiUU=G zulVw_cOdJth#gRdl#IPazg6gm}$QV{+}C8*mdH< z>)!0QFzwB!65lGdtiz%h&xJ`Zq+a#;gh}UKZyopM?o~LfwNmg`7kE;yN`LFn8y-tJ zV`%KPIOTS};Gdds!+FUkdT+5#UwHGludclchad%CR{zO;t7lfdc<{vi7LKp)ILpEX z-Sj`}e-8DQ4Sx2;5R0E~eg8#)k^yrqmH>~~ZoBLgU!G_CE!LoKghMThP&wGwK_{rSi%TCzw z@3W7nx2%bRwAX`8JMVu!$@~?EKLvl^gE3cr zI=SD7kzamgZTaze_&|Z(N{z!K4Do41pn-buXeobdGp58 zZhCd<^zk;X?)Vl5Pz9fxctgK|qo3J%_{{5D&j0Y! zk(Tw2;BOf9?z3+_cKZeEFYfpEO;2vU0t=lunU)Z-Yt<8r7gZm6$Hk+D9n|>K?Kq%y zq~OPGS#oQ{J*63k%}ejUJ3jd)49f&x^zxu3SKKmv{NJX(fwB2M;Lpnh|KrVHzh5_c zLuTd&*NkX-e&{6RgW&&O`RU@w1Ae)5j_0kMBmY&31DE|FBN8HJ#H=Y#J}qL$fcHk0 ztsj2O(>RbT_`5GXyrl7?r{DYAj18Z>x8s2CA>sso$LFsPj~R09C!3~U`rd^for$u& zT<{CBJ4&Z*UAq4nKgOMR;XSAS!Lpte{Qhsui8~_Y^}{?&c?M*m&eIQ2a1}@#);Y?t!?$<9_%k`I-+_%sziLx+;QSJoe+*|M}#_$6r}| z%WFq}cRk9hUhsK${P4yJez&(aX+Xmfkb4b+Us`>~^Ml^MFRJ>7*5^9EylM-S;tD<^<(`>` z|MQw>-<|ivs_Mwk4@W%}eB)|QK`?bvd)3C+2#9wgw z+AH5UtPC4?aH20EqHx)U3ohC4bmAqCKKAKl=YKLAN;m|6VdN#JJh$VM$rl}TU&qNy z%W*1ik>DSkowWC?*z&X9_(%K3(O+jFo*M;!!dGQmXTBA?^`r+TRo}5@)UA+Xf{%aa zjQT4ZcbskAAGhO^<13e1)@y?Q`|b^0k1admsMl|M=)h^$SAGU%9fIHQu9Hvu%j4Na zMLF|#)oy+O_2SThjOWg)|McS%x8GGZ;)>ma9zF2M{m{=9eB$nlp8m9Z?>)y|^rLTe z%oAwI+5~^|&6ivnaZ>z!FK?Q1RC>oO93a0!@Hww0pS|Y5YbOtT=Gz};OldzAd?oml ze(%3~*uE1Fd8mBQzYke313a};@ZH;^mLLD8#rO7mEB(x|SHJWz_A=w7VM4^I+n-MA93QkSD(LW*FBJv zZwvnH;mcpSsPy3BQwI0DZ0?fhkUvrTFg|aOx%~dq?>wXQ$|cu6dce}j9cYgPKj+f} zPP;y8Resj~f2+7|(|FY1d4j)l{smWj`0EKj=lp5wXA3?*XRKwNEcld9-YfafrRz>P z|Gk&XmLGfCOHkM$_>%`+JU#!`t(PqLaL^y0PJCe-`UQgj`{@&g)c>+Q_Kf@2optKL z8RtM@2>ufTtDD<>y_2o-HS%nf4*0j8R;_JaU4_7U4+f_%>uVc&r)zDgX=>|(f5^$! zI$bc~a#iQn^4dQ5*V4A41*-4TdygSPTUy;#*C)a{UZvazN^|0@Cw63Ns7w|5$9`vF zsUyTKxUvxA=bmGwc^@;9z0-lVZ=BoKQdiUFYvn?B&%QFLEm()?6UVewH&iiSdiN6d z*R6)PtNTFd#MI^YZ>=0EzcG}9O2wMy2Aux()i*cw96B?e8M?G@yxr7?8jcK7VgA1O zH`F&lb0iL(xAhX1M4hsv=M)MbyYm+uQPYdpfo|G+7lCX)YUOrLVY{B=MB=vE)m43V zzz9JQw1cI3_E{6wH`n<3ApP1~8yb7#5c*iNoZ1MaRq9dr{Vyat^$;iq)~kqp2(G@V zsm`}%m7@GD+-8oN8%+p(2&<{7=6@58^aa{*e7UZdd?Z&Zq1Ah&bR#mM&ykYl6UP@>Unzbh1 zvhnpz4ZSs@@U^;aonfDz>Q7_M+TIID7y88BDG?OvQtxyiYQ=H#-U;DhO>g3YxzhmE zAHF^mIdqXUt?8wKV!1Ro)b$~`$miOcx;}7ZOLGhRUcILm;a0c%ntLZ~Y+Kvd2XWh6 z-M1bFl(jU}FYimnEM3{Rz9I6a_f&w$Zo7M8Q`$AJ=|lOp)viKI*DDW_W$M<}wDi&_ zldQfEg~7I}Pa_tjqiuB`@&$K}SJmJ~YBOl*DR00seJW$ctg1|YOUosiOr$Xpy+T#1 z>+9B3Vc^x$m$6rCU3HtOzyFIsd*&n&kG@(dsg&~63K)VCz_ds6b)vHBG9B4gw0i(gz?*6%U}?~K=!P^0;JuyR%M(!uX}Cr-{bP^bU>k4j736JBNmg7U(!pJs zmQ0jz=@Z-3rX^zLP@eH{9f=r2n={@#g_M7WeHSJTX@@m8c{(hsgYh{9kSXm1Oaj~p zI2`bFK*kko0v(vUMV4VvLT+uODNgRxp~+)it8L?~8@0(}VP#BQ#97;HoMd@rS9|Pf z-}#1h{@U#u+}%EKrB%5D6jtZc1G}Ex8JV_i@o`VaV%LaLS)F8=?9U;QelWc%53_?0 zv!6*LE#XMKeBAcR))Jj_Shm0gk^aR)Kk4=`yeHbl5Mi$Q2`U_hr5+YeqAncnMQE&R zY;IkLeLiuC%r~t4$cB?JMZ<6di{>n3Ipfj=$l~4%m<)*N;Eoi)Er5*Yd4LRp(d}=o z)uuSPmW?=%^`?#cmo{n6@AAf;w#_$qb4kQmu^Ag*X#ZjClfGyd|1)`kTz@EVd`!{< zxxNW@QvZ@eeHGo)Q zu&x6<2=GQg#_uL=kJSOq=`<-$r^#d8g@1*+Pn&dhYOX%GD+al`U+3O#Us4Hz!Sb-x z-4d;&OXp|{yd90r9ZDL-Sd8olypE8`!Iya^XoEYu$rb!IoJtb6z4@XLB0mIjIsK&D zad?ZJ;xKnr1(kyF+p<^+Mg&cQOU325;6X&tA@Gk+8f++nD1b7E&=13S1n!ox~Lr1k1>^M*0K(sVwXUNz%u#2^MS3loEb79UH- zDn^3YxW!ml$I^^d3sZ{V+VIa}O0v$xzoI)ICdGia+qnB}+}~~7+cu62LAkIIuX#Sz z2HNqVT<8zTZ!+6Ec=;InXJ8+pzeq>l`MB+k@IDOqOT;$No~)t7`HO&)EbjMn9>$4& ze~356wuw-e^_W|Hg4kX8DZWHHLVY2aTCGb7uTxa;DFT|!?>zM>ywC5Y`nycqZwauc z=-|V;Li&HIPrL3&;FfKk!hAkiRp>+EKg)YM$j@K=83sKIDPZ8i~z&U^vwk3d! zV<{kO0R^!Vx-==FOOwZXO54U+&uNp#qNr7L@7Xxj!QM4|vvlWm{dLUkS z(6p+uuC)zIS5mBunR!eM@r~9r-cssy@TL0y!(5$6byOu!R>RTdS6#_d5R&nmxE0ljzBn_e-x+vnEdGvOpeB)f#_gtjsrXZ5F(=^4R8tIRKR+`X@E-snZ}iXOfO5K zzjd)T#aWkYlgD}mrc}If)^=_3SVyA5(nXw=s!h7PbPbRe+v62mVOSY!H>O>4Mr_JV z$A8+kX_@K1{+;X6yL}NEQhCX?s@Y->im?pcZ-Qu)$5bNn14Spl3CD`9;Q+-i<||w^ zrk`{>1@GO+arKz;&cbwTT~qDvtHy>wro&si8mF5e02wxk82=;j@@YhQuv(+bEhBPwTVz6!_ct8lEo3iqCk)73Yptn0YguIv$&Y2R&X-`ka!-c>T9 z^Rtf4-bd#>>;2Vw*4u4uDvEX2??=DBt&-LIQM-DV?trh>jA!FFo&z@MS|7Wz-)8T2 zRPb$I-{5w+{p;H{d-uW_Z0Q)mu82*6cxV|RK6LFq%e(zdZybcWr*r*Y%NM%lx@9uui`zGYFwaNQ0UnW8s08ezZ5$DHK5YRmTkS+vu$ND(SH}Wj+p6T8=-+t4* zzxtBS^!~c@k1N=+>IsPNb~eR7;QdmM9bEOI0QF)FJnvjP#%kw4EpKzt-nsD)6n#0j zyJgJgqU|e(&-Dwl{m`ysM|3_l20h0pG>q<^W2If)My7Q=TebMu7tnb`gP>*Xxwh#o z+mwSSDhYf%Osokp*2yrb`gj&hsy;qw)4gHaz7Nv~aX}6a>^$y2G@3VN1;@9 zdTbt6JN$Qp7Q;AMcP1Kt9-3Gi{ivjExcI0x`Oz%7832p0kF1;hZMgB$AMwqr2h6@dEz zUIoZ~?eME(HsEc5rGR$=)&brJxB`&wR{~xGxCZcAz;%ER18xO;1n>&LM**(^d=l_4 zfKLNH3HU7Fr+_a4l4o85Bs(09S9PXoQk`j7JGIGUJ!0b? zw{b7pxR-6*M>cMUjS~re4ZOEDpScKCd0J6ytEXQIGH#kTb~U;3l&*Rr*d3N@vx6E_ zLjs8UMSf=`=Y*Smv`KfD$e$xMxjiS^m(KAkC^yFGHNe9G(Ua+*)O#Ip65tzvEZ1zj zYATc_H9BKi1h; zjL52Nq)BBXO{$NtaHttF-K4W|1wL_$i{D?`wvrM^7XA&~K`YMdv$#g#jS=QNTujU! z_C8~9Mo&q=80Z4Q_yBL{5-|hua3z9v!kQdVDd>i!b_8B3Xi|?V5tp8(o{J^y2#w;1 zwSZ+3D2|*_nY%<7pFqamsY_%RAmjOkE|ChDRf*7~N`xj=A_~V6Q8Z(R~#-7#z(gx4iy?UT&g3+BnQO#0e z2BiOrbN0n?iI2N-M_{Dr4hKexf=dKQ%$D=M2C+3|K$tT?F;s_i^TGc;|MH-4Ax*DGQSE z`UR@H@S$dI*kz&2<72wqOXN#^o2Kzu4Dsa(&nSe2XC4lIm zcL>h{F2i>mAlU=WVn+jDBH$T-=tXyQ0iqY(@khY@0WSp{33xT&D8Oq04+Oj!@E}0u z`yqf#`x3lr{(&Yn|3H(+dI0~5n;y|7kM%rE)p+CBa~6}w8iR&~g=F$R^X zKPusw{dYz^+h4C+v;I`EX=5>{YO_B~sw&NZsTOaN^zf7|vpYv{>%5qLBoQJL@s?*5o5tr-SJk3%DO37)T~F z#{rh&dpzJGz@q@G0aF2M04D%01H@{DRE9}_%#+E0Wa@gnYVwmNHTg-C$KpDO!VS|V z537R4aUDd_k!=-ShK+NEX?Ia4)oo-@H-g}JJM-R;Snyt`mZ=x!ge z$-BF|eK_Wpk~Vq2QM2#h=@p!+GBZ_`Y75L08I-?54h9cu8G7RQ{ah`96M|@vNPtxWJWa-{#z;eeNy67iyoJ?G%iF7$ z*Fn_>=Z%=yWaMO4`!Y=3K!rqHBJ+;CuTX_`P0M{NkfCvj$+Q5iLY2Fwd-~Gugsfwx zyxetcCh7#c)0h~PhQ$R{X#(2 zu_nB#j?tv*7)>5oR%jO7oA{^6V_k=mR&+OM6LucixNSBrV7SeU3q7)668SJHd;*8t zPXX7{aGMHC)uUJ|jNa0oM;Se_lo@CwBNQkKLcfNZQ2j^QuOJc--flfY4)=xb2b(Gt z1#eSS0<0w{5*Bd{AjRoYT|_>ZRX>;})eol0!`_CaaOh`<={NU-%R`B`!1co}??6bl zE^k6fcPgY`cY6|73n0!CT&o3@U3*1}bv;*w4sJp(Qj9F2q}Y0xa_~9~Qj0J1ke68< zO*se3t~DX-jqLKmZe~b(M|NSz7sOx;b055vv_k@9R~RibJqxkEFc>q0*XA*KJOGGtjl}ei|~+o&t#J+z#g3T0mCn6YwheLX(m&GKjpz2@qe?o0mD4D8C*yU5 z^lu#gT>-~@-b9w!%`!{KJSOkad$PASSq=qY!uA8575JA=E=Zbl&2;I%^6 zNg3bSbunOk*VGkUCqwk9bE9RZ#i@`vY;Qu<#t~iK-CackOIRn*j0mWeTyTw*ecWtz zV`Pa;^{;2*o5hpFeL2WR+Fpo%RXwkQDF<(obwB<)@W#mgEQO24_qTXA;x*3;Fu1D^ zt0yZLX%E3`dUmS9VZqB)Jt<9B;&r=sSI=hHnQnu>d#8GS4;pVkPn>Zg{WEw&jW+)e zt0%Id&(%|M22nO6(?Xc}nD6`4r+;;2)iIAL3wm_6MqY;M!@R(vVh1_kTEJrf(XZ{` z^!E*b9Fg7#$W{uy+>Q-^w*X?%(z+Fpa^fC9R?m9@xde4P;2nT>06q-(C%|ohcLFls z?*n8hQS_^7OOvX$G^uLKiJ&-()s`kzZ517>t)gSKRXA2#g*(~CK@4f!#WwD88yC|437-lA^O)-8?v-OjSS0+DfH5F^LKh`jO7+TVQoVATRIgm&*eh2! z$@;l-uK|J8S@$#N#F8*!7TfvkaMhi`W}g{9m>$jE)$z_$^=DJz%e)2zv75T7dD zJGpjan@&HR@@PK-*dapxoo^_QeI#mPXKTFjZs)b^^PpP~2|j$&hS*KH15bM!PSz(` zKFnbxZO$EDrgm2Iu!uLdE5kiQ-aqYyxpU|49Q&PjV0`s{WTkL5@N`Wr!}ui>;!g>|hSK-7Ac2*pMSDZu`mfR1e7az*G(Q zfwMb|6XU>58^eU2Zd7GQ|BjWdq`9HKW}Wo%=(~9a8pChz<#EtM=gD}bI_Dq`dVoZf z1SsPsZopx3+wsbl96evdNgy__95$(~I-H~V8C!CEz_zv5)IfO+`m)m!)9}s5v^I;> zr!^g-g!XKV`5606>eJq1o`Q_wW9*CcH#?VfU#Gv*@a-Cv?NzSipLxv4l1FxF{9hq_ z`osJRU79S+0ByvY7?IQmm361V9VVwShqGb?h4JxfcuQfN z-q{@}iw|8Hyp@+wJn?x{=LZR$@5RTx(iQ#3u8QHCA~(fpG3=7MRXaV-FoAvV zB-uu*q+T(iLQYMR4LcLW^cen?oZJmlj^KW^aj2_7GSP#4XT5OCw0L}zb^zXA@Vf2q zf{ap|mpP*hz6@b+WMUoc$X|i(-7+x=;Rnh@#)*Do>CfUtQtGj1yaQw+eK(K4Ozdg0 z=y!-fWJ&KL@FR#o_r~^cV(}3jWh2&pc70QfeT8rGwRxB)lwo{d(#S;Ab(YaEz)`dV z91FNVU=iQ}fYpEp0#Ym=1h^LPV89arM*?!ld^q41z_EZ_|Ck7P58x!g`v9i_J_MKp z$Ue9i@HxPv0sjZ^4}c#6&IJ4zFawZsb~fNQfCYd*0y3T~(?UR&6vqKdM$x2X6iptB zgJy-puw6_Zi@k4!yV}OxXX75UajJuezF6hFwC>Fz$5 z=+mHkkZVzOXSO)=?=jB!UiBEqnjRw%L)c?XP{i2atj|)K8LpiL-R%jO4o2^AQ*Jam zh^l|cjnYpKoHuV?cl*zkE0SG3JV-s|S)gA?s&vm1^oc@N&?AvBB__xSwRn@{*s~H2 zHMVUtOsb=HDoo0jtf1UdGO~Kbh*ZsiDTzBvbw_PGOiJv$1Cw&`DNM@67ceOos5e1k z=O^HZN24tdyJ8HTI1gUB4zxE1??|^ZguM|vjMLKr_Ph_pEq1U7WK9bgcQH=%n?rwI zDWe{zE9SaUj)N~o&phO2{h-bIO)G8ec+ojK8vz|JW=^P%R}%349WPS)@VYx*`{A39 zkuVF@r~TcizfDK1Bfy?@jSo9k>}auO^RYWx6j4_bqaWrU#S^n`tHzbF%EMd^$h=(u zI2v#v;8?&#fCYfZ0WJls0%Vex0CGs)49MmrFwVh)u}k}Uh= zi0OR%v;3WNPaE-N9+m_-$1M#8;hR;A4cvKn-S(W!GXpcyogKp7NP`mC9UanMRa$b( zzwri21ICGdUy3(y=?Ys*-1kfcE?Fs$;Z8EP=^$Mz%rY*P*sBzc&C51w0v$()<*_8Gxq(76NVrtO7g@khS(Kz*7Lv2HXU= z8ITM$zv@8zbo8IZSq(hHg2PhGXsINZRy^GdGTAfrFBnR zKX7yOX_LUQ=ytDn&#TA5*){OKPfh$_R}-JM?KAdkIxu~M>GiIxNtIo9oehL4D4nc(X~3^wC~z?@7x#IedF(sA+oFjXSMdh1XRuqAUN%&i77!;=SnSa$-3hW-%Tmo3oSkEY8j$ zM7Rk%YhzQVjJfQw6i|0056>SXvHnyJa|`E81U?N#7Z6&d+wJjqf~cukrgLJ>0V)U3kz zKcb8DPMFmi0Znl-mZ8aGkzo{Wmo^0*kohw#LT4`}9G`I6do%2&2S^gSVH61ivp4t( z&~SROEC`XFdIrBef7!shvzPG;%-$z-_C5v3Zuyfsd+&o;WiL%CdudYHt8mO-h4bTP z>;EA)vmOL)@$HG5Lkey95$gGWp5F*0Fv~-6^b0!6{|ZQseo<#R1)$1unpBq4u-5QN?);9ltZD+ui!1G@MB0ak}}cc!c3Y!Fn=^9{ki@Wal^iC!A(XgYVjuVoUK&I80#M}sqV_VFy)Btm-z3%8zYn73KxyusE#5nwlmp5#x$DWmN zZS*_Ww=O62DFUa7j4{p(Nw&^S%Vm1Mo3@lrz<*{Y`-u?Z=0J_X2(d_yFK1fR6y~ z0Q@K5XMpbj?gr#!=N>@LcI^bD9M}c87w`)}mep5)%>T#ns?G>asxv~9N2boV3GPSy z)8w&EMQJO#)3wQCop0l?XGv_KxX{MkXyYEWaocR19xq|fQIh|jBeMQAcrC7->wSQ( zRdd;MWG|HmjEx?IGYS*vC0jG1D|b@Yma~C@FnJZiBrAd^y$N`A{c*vWPliv{Y$Hz-GnNx*iESR zFC~?9J~gn+>|ZjL8F~;zeqr<2+XkkqY`XVhQc`6nOys8|i`>@%Qw+~0X&hxipi~(O zTeno8RG~~D?IC#ogE!FL42KrOj$G-s=Msz=4pqT)cSw6x_xHf=2!tOfRTwA6VK5+X za8-}J#Pa_$se+v9vs5v%+eno{oi_8$I?u;^TgU-E;iZfzKev?m0kxa?ht6vU2hov$ z$M6$y0boDCt$;CroVSbxya#XqAeT-&fNZ1(0)7lQ2=Ft&A%NtEp@3fl#shL*G666K zF--*IkZ3R<%WfFIVgC$XC1q$*QidiaWu6rrr3_6<$|yQY8AV4aqi~cm3P&lUaFj9% zcaM#`-^RUUHK;uy`Lh@37o9_cphs!q=D$u!4CO6*PLY6UQCR{V(zl5XvZdf zEL825?`_L43ugk}Bq|~bsI;}fm}eaftaMVyfPr0s(_z#72OfU5w<03Hu`I3V-j2tda1MZ9X~J56fm zJ53%d1?;A9W3Y}{{T#@Rv47-Hr;fITykUFXr9DRXR_ibe}zrrO3x0@!Ad zLCA1PaxhY{WE;M71cy?Qc7zn>IT;4BB<=VFvLqQg(B4pcVK+IXy~C21!hT8sOEOHd zJa5I zkkBEkx?ZlMO2>lLL!Y=Lmyas)@l{ub{>yyoeKflO_tVgs4} zixBpP>GNQBPk_C<^OO&}yF%KN71UfZ=ez?uPmB{Q#ZPz-36RrzBG#N<45}E)XE^M$ zgyxOc*a_I)QbJvQJ~>t?V=ZKt>sTc-i9*xwbQ6zNGUq}ctK{laGHm~Y5Q=eGNJDi? z3zTd1xkj?&I`Epul+_?0d>Wa9ip2^!8!!#905Auz2#`bKxqxc{%K$G2tN`TF)B?ae z02czXjE)2R5^xFNcYxJ^%>Si;%+r71RUIIjR0oJAk98GFP~ooACXdD4BAU*|ITg3} z-pa(lDodRg*s_s?IbIyxN9|BMYhBd?iXh#S7>7zM*$^BBQ!U;ks|5f5!W$!phnP#w ztR*STW6UTvc~~dnV2Z{|SRq*dX$(^**#5G^%E#^A^mO(B&wTzvKtsSV>Gu-6hX(LG zmO~x(L95W-;1j+Fsr~f5K`?8g0bF?~n3WMGD>t<0Dd%Nb>wI->rm|5p95<%2c98#; z&a1BXp{7nthm>GaQ0pVp7?(ODiX(O3eemsP4i-WcMN|?(nP)~O;j*yqJmKq6^xpwV74aKYzd!n<9r8(K)S%~ia76L6 zf2xOh-a9LqW9vIg$PL2Ye!{3pCac#1@y~|a2Mr?lntw8|C z1y$fwU1lb0;udEXK%@A}n!iyR`R8x*fenn5bB!_xdoo~}z=81*2+kh|#_l1FF#)N6 zln+y2&*{E`TEbfP4Lmug`zD@scs`0}Bc6}rc?O<8!1H1}e}w0yc>WmATk(7f&pYsZ z7SE^g{1u*@_xu{q=kWXuo~(th<4@H>zNuQsH+2|S!QO{5Rj|AD+hpfsF6{rOT6pyT z*R{}Q`2Tt>TtCz^(*3`z8U|NZa@E3@QA=10U&E8N@DF&h7XArO*1|XN zWG(zFo~(s`$CI`2Z9G{E|Ai-O;e;|(3oGzsEu4hsb9h$b$y)el{Ha>VH&qMyR!Nr} zf}Je(Its>GsOVS=70j-MMI2uF9GK@gyfW7rnRxMebJ5)yn>a=E>JQ%6I=^i_`atYI zpFI6*LzVAe@m3Xh*j*paq@dfoO8U$ztUmL~*1cDb{$X1Zqq$d)E+)XXO(2Dlj#&Ur zz3=sx5toyB-(xh;E7U1+5HcBm6P-=?&*D;@;!ox6ITu!jx3}SS3%edXUMv7VsWj~r^PVh7RC@b)F0#W}= z*^ht9-ei0&c|~Do+sdWCY~qac@~}r;mLA36wk}>JQ~lB<9RHe z_u{!2Po7*^jwdVfDm;IO=ka*5d``lXa{mYZ)KV$m)KV$mD&>65KLy5$%eP906B%HNGAEB{tJ zS^2l&$;#i0Co6vlWvMDZ-&E!2Tcz_Ruq6Wfi+-!5cOMBcnf`p_tX?nTPF3d=&F!TGZH%kI%ySv{`V5Tz2;QS7(@W^Ei$gaD%m4 zoN66;@q5aKXKdr%qU8c*vUa$#X8x7sk54QkQlGzvV-w|Jk*oaN6`3ekY^e_VRD7$q z^?2*T-z;Z~3mbFaK7==xT<(?a`+;GU9FXwGIqgI|30r}`5&drC&78IYxJ*vG>a;nh zo(6dbJ7vbnIH(uL20CS$t_=+gb`Omxk0MNm`6;gQg-&_A)9G}lNNwUZaE4u$pGAX6 z_3Y_(_hm{E;rI?ij@HRBdo`y7zPke7T)*MZbiJznU7>*TpYmW6#DU7W0>K^)>H}r8 z6Hk`IE<79X+>K`n&-dclkLP)KvW&*?@g(ny@Z_Q6i}Ab}&r9*V1J5h){3xDR z;(0HgSK&!Xm7|>0D4K6-6wNoa2c%%!15z;V0Vx>wfD~+t3!{mgg6(i&dtBIcF6<^3 z#!`l7tg1mgL(Us}ah#!wDp@&3sf1>txPes*5YwEBDlSBDWCkjPE2%2gwB&IPX*G`t z0Ui@`@F>?jDl8tQ7LQ67UQ)&PDd5g{W=aZFTBo`+Di0+({^=UN&Y3V9WyEY)zf3xj ziG-V)YQvGnOthsfmW;P#+Lk)4c@S&XIB%->xIjbM9Fv!CA|7v2jQEC-BGdhJxcB4@ z7io%yTUryDwaIvELZ`$Ad1;ufd71KI&EX%*hw>{&`Rq>`l+RpETbn!Ha3mdT3#Vhq zek9(Kj&4XJ=4_xB_dLz7J~uyGuCbO>I@}V82Bd1h9?$uK{2YYuV15oJ4f1n{rmb`) z%v^xHDt*)MA(oMPKe*(Lz4cD%%&9mxc__l*AkaYn*80)@PI`WI_7c88;0a!AIXr?( z$ymmOAEw|#Jv-n^6Z*6Yd4*g{77Coa*bbjO+TV}!c3q1{+PA*PY4v@oydA9LXF73~ zuD5;butWZb3!hIm!0U?z-My$bjiS5MgIIVMq{y zffUVDh`4It<~sE~{q4Oydlc4il(0tvKOf7OtdA9twF_vDS5cLGgKf?+ z;K{lPI8VSjl)G0aLe3)Mp+k#3I$yhYoQBUtc-AAzfIN&Yvb8UFN}Z*e&oY+}+Ck9T zar07l#;wAHoRvBZ?~5m0Fb+4Z;KMjpYx)xc^lXdy$DiSk6gnqq`ja*NG^cd-AZW;U zDQ4+M9FHogt(2o1`#+{{-aDY%C_E0`ye7<{xOQ) zJ2O-|vxK$SX>5wsW*WjRbxqMsdSfD*X^5vA9pXaSxYksy!jF#7~be2b+?gafU;=fbByn*KCZyGT_0OCT|7YNuWupe zG)ihE6P5AC5#b=zJoL(5YNtPuJ6dxLfgUr?E}Py}m%)bb@iN-nQKI%sx8t`qNfdHUm}K{(o35D^zu8Rd2G@;$vy%8;BbMs8ati?e3^HR zAUG-bFyIxm;c}G*D6Ma!z)cZ1qzcCLK{ZQu0B(L&MU2CD7{lK&Ov+Tqy22czv46&rXCt%4r_hfx1Y2!b)DrE-SsOp}#EKfZ~`U z3V@Y-?Rg&O-_k!p5S-`j0dMN?d-)vWcqcTIYgVk|Odp>MtS8S4cy*xMfw889KVOH> z-4~(a4r9Qd8F5KQLzrBAz zwF9KDa{30kGCSn1XQqjAya@4_-z>*XNLHG1>v3;S$LMfJW~lp|(e7bn#Q%-l?49RJ zf2Z$?F!IElqU2I54Z$`#*Bmf+ztV#}q@gXCT$$uhvN?cC#uxe0)!pAUH~?BtR%Onh z7yx93xt^xg5=m{deQ=Hy9((Ti&=exV}xnRZgum66>zP%M3*sw+d?ojrp+ zT#{g4smjtQu2;TO992II4a!gMI%k?#R@Yf+DyFPX^yyi48p@n4-R&czLw+6e;-p+} zu;QFjgd7UTsrZ{bRyfelk=jwc_=8_jCT zEmk^;>6d2u($U+!qq`R?_NtxvfW@nrcE;$Z(x*YQkT3eqcI)vI7eHovrhiq>?W~Hs7h`N6n)?`e* z#%QIduX|wB=+b52Rp$8nVA5VLaFov$)n0P!QD(*hI{jA)%->JGUtl=D5mkA(R=&fd zBLg1ndd;i93j-D1hukPIf4g_Hz`S;d>AF>5UERZ-Lp_5dUijNIykm5$$nFmP&AC;^ zt){9hK4{~Hy0>CgdT4hBbx-H(LxRWf1<)>;ohcc7Sm2_UN@+CxM-`mjX)_uj_3<8o zL$-7b2U^w{?5UJ|9B}iS>-fhF5iOj0|C530pH&7KB$|ZoNy~fU30`u6KV5 z`7^&s&bW&)m8E_83GO*X}s*#w_`ofkv59_d> z(_!uM_0yI(U(mE))U;Qj-1Pb?6JM8Xi`8ZH(hFs#*H?qM8iT|7s)tkSE3zhw)kF`j z_|;_UV@+7)6Fk;cJ-k}k+YKuAGcEC!DB2OThVH|)wnQ+gT^p@~UnJByuA}?#;kr75;~KdSmy9;Y z+kn;j!?kQ59#y0z8cAnV45AOygEYxbcK3IB`-7n8SzlaS_~_Fhdc{SVldd{5+zfcPz}^i{f?b2Ouc$j|g; zrA`MH()>3-8l36_u^uOD2dXT{5B;CZPqa|$5pfeOTxzsKp|$=KkN(dMiz7WF1DzO7 zSojL3$Hf!QGT?sG(~yJt>Ao&G%sw8n$7hUBh`aqKveW44~Y(LUu%LzaP?tVcw^KlzBTvAz^Gnp`W<*y zIsH80F7o2{EN5`2dxx`^`xjVSE_o3!^P8(jS6(gkHVJGP_0QHh=^wzP8h^IVy$s%z z#VdS{Wsg}I&Z94NUe)xkY5HZk>kEbv$)<23fx$#;#`{33&@M5)KkD#>*3bV0Ixqfm z=XD+bULD@7)h<9fbvuJ2F-n$%={*p@8hW;F^WYUuTrH*O_LHd~~P(>4^6-1|SV z*1&YKUH!9_w+grZ*(u7OPFoLIo(mv9zh0F&e`R?>FaE~o7(9`oy~I4u-B)=5aLS$K zWOUiTw^HH!L-Y8j=E1d2wskmz!sTyo=!~*eZKnrEPI!VLnaW6R!$VaE9lxqH9 z1ivE;#qDwD81nj_8Fi zai&;!hOdUaZ2Yt!-WPv~*g@OvAj9*I{bV(0S#Ew^FL!2wr(LfMjX!T?&MeT)LtR20 zcE=tNs*Eq)Pb%&(X=>jk>)84!N0IM(8gwac(py+!k8 zeOzMkE@sV{Z7|y&%2VtOu&cxGX2exy(jKW57-=xx*9L#yx_*rnXEE#g<{YwWTkCp; z2M2~ZM_{~*!K=)P?l9}#$KjiCn(^3Dd{<#?jLshCgVa9LGAsW1Xo>Qj6Z@$?^B8gx z;bba`6Yp54iQ(LPY*Uo&HrvG#jjK<_qBs({(ZEYJJQa*A5t=BPSPNZbUC3&JOAI1Yq2;5eGZU9Mr#mPouVnu(<{tt~jQ7RIn%@EGSvy6d6_ zudzDqlQcdNPB);Nj5kXnRlX`U4#`$15pDj97D&ddEuOi#FdIBF;rCXPc^Ve zL$o=pVABjNmUhEV*RZ;Hb2!$b=&CfVDIQTXGab(i6W+*G2V%NrYMd>D{WQ##4ES(P zw4WXetbi_LZ~|RY&x8B%7IsE{2zsNZN=-jl9}TBllhF*cM%K>4k%m~yS|f*$WAK}> zsD~3jQDq)r@Fgyu(ow<;AfG)6o6>h(F)ye z!B`UG_*80rJXx2~qB3P$<iGR%@%3N@C>?yl+X=hCOcwYAZ@Ol>m0K1HojWj4#jr&3L=8zddGU6?6r zEnb?jq;R^qPU*y)EV`!X+HhneSGp4rdy17sr+a^w7KO?uMNrWR!16pN;t=hD?jqdJWTy0BX6Ar>POtrD;~kv8>WzDt9K zHp%4k0QVa>k6%6;wuv$)Sf$$mnR6p?)W%@#r$w8O|vMS-jD-W z1g&qA(*F{EH>V=dA5d8^4Nz?WX~I4l^s7*pbe*u)@}59geZq}V)os#kBy+c~DVI1C z>s2yLJ!Tw<^>#WY30-&t%ad~@*k_7dRzogm49OC^1#OUp^@aSO=-LHDVhL7=#!P)H zqGx)Lf55_#2vh|VhL#vs4+w`G0B?z|$AM*Z7F44Q+JF=aOzLH+;NwkodGL@2!?P-K zldlP_pzwuE08b}du@3>hv3m5?+BB;_~Gvo-~tu0cs)A3BWHlCyo5r^@H>d>6f%vOmjYoL1`tp`jz3+rLMLKSqxUPsKOvqSyEIr-w$dSjO=gVP(#? z$d;|mTZfh}ll{UHTQGZ$;2%SmIJHa%(i7ox%$r9o0B@efHuEEn z&-q@?5u*-Mufv!<2(D!?9O*pzQl~-F$22|9C3AdBd&zv~o*UxnT<27CfR#+ShR_85 zjK3P=B{S|-<9Kh~vJo_}7wX>94u7y5+L|FY%0k9eW6pJ~C;M84t$Fg=X63bHtm3)?xs`P(o~5TwL813KJsa|*XQP##ifIK> z19?!#X}81ljFsCW$c)eeE?*{d;gC})zYd*GxUSphJaz{1XxgYQD~}aZ z3+FFi`N4oMSJrZXRrygbx9EJ0P1*N+ZOxOfZC1Xnm{K@j$LO;Y?CTt-p}Tz$JH(wl z1)$n^!pj6+w;Lx(dpb2dEb+tUSg!@w;k(LFHp(#`-qU@=TEJ&Hk>(8CR%FyMgN!+c zu@1Po2A6*#%eQFo>xnzI2n zzp}A&zgyw~- z^fLj|!Wi>Hq=VxcvoBjMnasbhIY{|nd=NZK*$;SywKvJ{DSB^`GUUF{Ie?iT z_XlJ#zku!1Y_#W0AJaO+dY`M`|LDz;isp5*|W z_RO5AQ~Mc=V-M28a`M)x)m{m4=Vsx&z2Wo6!Hs3%)Y?CJUX%mJ^?u?m$-=2U5aKS& z!l`wA;;zWTsXYneuF8SqehG0`XW>emX&QG;4qTPSU6+OPWOhRquEeR-;cm*pdGfp^ z2hN-w{XiDZJ1cs77S1~xb!Qe%?G-WacV*$cyx*MzXY&4$ESz_yI(oU5$2Q0saPYX7uA&cV?ft8+e|F*rILx-ivRZtHCuKGUq!F-&hkJ z>ehBp7vLNHKF?aoVIUgInZEx*;AUYT2pdhqSZL6ubc)Z#z|G~YIJQZt9$Q=r+UNm!D*<09dq6lVZ>|&3{N4xLQH)E@dMCsN#H8{4z%3%b9Jp(Nt6@0I zd%ctAD*e|3w}Rnv;BEwNHS#^|UaqCaQa1yBvd9vLDro|!$4IvVz6SBomemuJ3UeE9 zbs~#loYCrmou6m6ZNlFHng)~sty?LJ58}JYIgR!QE<5Cc=iS^h^&bLFLeZ#E8H;?V zPtMjGz8?lnTJrB6oAV!9)am~y=r)Kf#;3anbemP2JlG{^{WrkQlCl9r7Y+093BbFg zT>S7)0=^Bh)qcH2Cm#T;*YO+{GW@3j8&qZB#`PdzBaU|;1L-~s*e>||F`n@W`y62B z@?3)(jVg;T06s>z7nQ{SCBQGS@^9b9M}Gef{1wD!-La$ieg*ieC9lRDOu@ej_;t>n zOns&&vn$h`;aNt`(H5f5{~B=auf&|3AKy2_5_fzQ!(qzQw$YKUft~QN#PJ38lLm%5 zySrQ{%9i_AC3<}E4aA4>g+a?fJz1l*As7-YgKq>#3BmZY#&r?w;zXTv5P~2w*ZUUu zFF=SfM~y|(*7)uW{cg@9d>gbifN^fZzsK;+v4%QRI>C7y-)slJ!zUQ>opgLRXCKIe zFpizR=L=uvd|!wEfevr>qQ8r8N6J~+1FHp6<@H10F^3rJ?su!5yAJsy3Cr+oPYch> zc!ra@qvi})e4`de+B>)DcK1<<%L9`33BWFKA|0mwo&y956Gt8bD0Vl~n=dL}Royk)CUbg#q_SU8Q1#@beIzqVAt zWnq~*TBg1u*r^L+DP3)%LQjdCpm11w=O%bES|3ef2P>+_)+$cHx#MYpVdsat23V@c zP!}7Wt%|AQS)t>D83uRGC7wwNW`_R4ALpi+PXiNgMJxlRYjOaGQ(|lFefTK~-xA06 z6}P!q=cej9_Y}$jbq*VIEm*1ds+-inPf zlOC*MdofJ*VAB{hcnF2&Gts8O zeAJNHH03spFD`Bh$|g(7q^rWF)myxX(jru4G0CR0;8K{!c(^|1xF0!0r<0DPj$;Ae98)kIe^VT{z)u!P#Jx@w|M3RL?R8rh3R6k2X`Y@FJFi`M0l-~KkOii6utO-=5B50&q^Hk}+~@!~tc z#!(nRF*?kx;hap_x6QL@WH+oOja|w_JQZWTM%#w|PpAJtn-;~1y})ENfqg!c2TeEM zri(N|gK#oP?UtouIHX`?b&yRLYi((4LACVMLu7uiO`~cy8v@bQLu_0!yxvWQuCLWL z9_6)RV;z=FRMSAcI@HE<8#a+n(v-}sn=G*Lk$Ai@#+^{_EYe|qd^66zVrxB){Z_W* zktjwr?m2{oepfwZ4t_*a4N@k@k%Md4W)C*^ir?`*TAs|pZhxNs13tLCzI@e++L#k7wZH?bE26{N-dgZkD=eCawz(D>%>R9>Db#WJvZSa4 zkJ)J!9{wzCyl=k4@bG8p;(0W{UU?xNcEBzk@!Kmbl7~qaKCl8K_(}_p@cxw+oyW-* zP1b6RrkP^V*sC&3<5UaBa?vX@68|&{7hIiTSlBST`J?=Dtk4LbDvM67(wMQ97e3Ew zjf9_Rg%`T)6&s=3&!VHe@~p-P?JSFyavP6!wnZ!Pv+BBIF)t4+V{f%a<#B&2EXz2E zpKIaW@3+Ju&DBOGt=dJoE+(8!3Uj1QNAMD3@$>v{!;u9MyihtQ8@~b*P^P8?wsVKXD5zoH<{}b99I4w*HrBn^X(PYRwZ}Zu!Vu zu@Zi_tI@6*f86p8f86)^+QuHUW{~M0?d#x~cD9FXH_M#%-jQLom}rp1{TlJYju`%4 zGNZ%ryCcSrkPUIa5gfwhz_BTv#BkcrnhL1G5jWY6Pa$!hQrQ?iM*{tuYVpt>xW@I> z#{SOO67v0I@G^a$*$4I8cNXvCq#9|0{kJjVHfHrA3*un^o#l^2^*=l5kVJgM+5XWO z#@Kk%xRv|9w6Xe~mH%?(s|2&Hcfaqu+3NSZ^t;)!UVylvQF_ywXIa&r^($7~Wv*Rc z@%~r$)A1YwevZ3dD3LKfIX9v#RC$8L^Q-xqE+_hzVts&(o_oZ^Gt^USmmysz{)jM& zqntKzjq!W|Q9Eweb>MWQ4c9of8$Yc)7iavmaulN$%#@D)0lbZm*6`3!yYT@;_(J$# zKWDTDo>slF58+3dJrN83C%_k3zUS#Hp@z2B+VY*}Yd8ja9dzcm!p@bNj4CGy+NrUd zzW|Qol4V+cusKP!;*>yrxV6cgCxxvEVCG!C91f4Sz~qEu$`UQpH;@joUP!h2tr^TW zB4NEcQdUzk|m77FMX311ez>6aXV-h=*x2esa!sZIw9m@lKa07wtT@Xs{UVF?%Bss6j+HB( z6*=kLv}sb+|4%MJi-p2?1dBUd3w{su()fLU8)Yc&rUD{o51&IaqLcajc-!YsRU7Mv z7=3&PaZ(>wbvoIvV}1w6v%T$ugPvd2Qlw)RZ1Tl*7L*21J;Fnc8vth~|ZHQU@AdCCD+c?q8VUZ?Y*_I=u1UzYraJ)iFz{>x$}&GZ{I z1$#O;&5vtB)I8nP{|YOOQ$ntQv366Oe<{}g_gL~Sq!*J#ew}Jcfwqx)L0Gl34g0n{ z^Qh+0Q>=6uy~rUu>O%l*^dMA~K)TFbLes#{=tMe4dbeoVvYmDU?dWubU08{U6}xKP z=Q7>gR6L4s>bM1;0r;Xy&;JI$YbsSc%zDRtw3&dJ-wMBE0?)I`sTe!qeE#8?MhX)C^jdITmH3Ab z!c5xd>$ID*mMZPIm#1fV8^((Ro!ix%>mbm%3m?QTRFzhS0<7_>Du%l)6Jj(B8QMI+l*?R$0PI^Mdy~) zXv56eqy6!{&>9mTfbXNk#yV1K+C9o`k&}QEQJijx#ib7-ti}l^BIX>Bh{UtiUI6u8 z;iQ!xQ*~q+Lo(G)F-@y+9;J_q5xZ5o*!G_6tZ(lb(P1?0fk@99C%tWmts3&o_Tmu0 znjCMue<;2;I~%sZVcSS|pYrELerI_w-~RhFl-B};F~2TddjbuhsS*LOl6^t_l>I5W zLQLwFl&OY+gOuGC-G1Jn+sr>no0;9GE<{?F30=6jZeRe7APaH|b&j^MoX z?62?us5H;zcUv3-NA-OGzp;^+;y!u(yn59c?!7(4zW2x~P!mF_i!aaWLo z5}lVYVc3$Z)!()JMnutYv+$0n?>LU;xO?h#9t}3&v~j(bL)6fF7|BCD;fyChzn1Vw zy~NcZ@7&8*`Ht}$XBcRl40bwIDlhL$CqIBx;w28JO6ViJD~fV*s_|{f-&w;j8@U6l z+NLpQ3=k9~_Z^iiOUB-L2e4QZ&Fpnum$)>9<2aB?c!Bd=iuTXC0QGl;uD?rBf1&2l zmeyv}UHzupvtL;4nSGYej0xE0nK2O8qS$w?l=g~!rRsNA;oENG_-)!a_Hk_Ej+ZcA z8|My33XH)@blW29O{jot;bRI;x>AsetaYh&9Wx{ww|p7)Sb53^C!@4{VDI6li8axk zax$D$?F($S{dg2-yk)JJmBiMvLa4IF8EQWrj*Q^k0}OfKNkEo#Re6++aqT`pi{ln> zjS;PFRmZGM+C8iH=J2{WzLsg7K==So>5?BFYtcH!JS5Rj(O9NV*~8-q(puL~i^8|T zF$5J#Tg+<;rX}R)%utUoOW2T6<2T~o5#F&T?1neQq5n8ek-=VlQWa0T+{l7ag>`6 zIJsDtNjIQZ$%v3BPp3@e%L8XpQl_m|aPCV})v10C{JfUW#;wZI7oUK7ls+4Vo58JHSYK4bEz-lcilHxa z;qcQzZw?4S8NO6%=BWDExbPeMZR9F!po23Rvq;iGiELCAwae8n}B}MzuL*29D!NYtbPw zZxdXYQWen@&3~f7sqRq53P(VPI2Px4?o^dOl{l3>^{)GbZ|J<`nV*Qz#AB>F$Amdf z5Cld@%QV=~)*`M2h!d&?e_N{mhyaFl9ka#UV|@LOA>J{kP2G(JnQ;B71Zl1ldWLZv zoO8}~0U^?m3#`&%;$_}pr6Kp`v0rCjMi|Dv`W|C7#WV5NTk-Pzh^*hb_bNh3l`s1o zU={D}?ixJKo5IgbbVDL$Zj$6kmgQLDC>)1DnRtB$4Fbj>m@Z<7Lwu>m%d`)}D))$` zF6*)YUYz)9+ysroAOqtHbzW_v3q#+8lSO9iRc`o%TX--^oGTf9tG8(IB8orKX z{fOzCq;YUIrVig~U9R-t`lK&f5B8B7KiR{pa2a+M%A+j#VtqtpCUFXdYCEQS;bh~> zq<@+P$4FOXH{IsZfP--Hh&Bg1{Q^4ZgMeP}>AbB|17#9k8D^p(#q3xXn@S)$hM z%=vBZd+2j|?wXuAw=FnzJW{Lr zq#}KonXtUfIcve`d>dUgc{gXRg$5^Xq3Cjm(dd~uXYJuRt`PA_9OjI*ir@2}XU+#PM%vov`FNg6YGm9@u9_B2y&}@J&t9UYogY~l43iXk8 zbsb)yMqVMRw$=NF4skrqwHWrj#>R!~X-y1^wupb;nn#(_Oj?9#87BN?bDUCCJZtOI8^yrZ_ueK~+9&UriaZiN0fW3YW@6o^{I27fi2D4Lc&w6E}*QJ9r z?%0ESY9(5(o4{YMEc;oqmgb5Ia?UARtWPm-r-L7T{%mHtA=@)_`q^JqBlQdLcNF@o zTXcUF2Of8C(ig9+TPE=hUjw5ZeXzEKuCX6U1BS8WK;K|*Hev)k`X1tpQJl45iAdKc++hV6>V>wQD3xz_$;h{#(22C6E+BxnWTZb(I&bX# zyc<7!ztPG_<{ZY{$fUu>iFuJ8KiY7pkQnNyFr|)-Gp0VKef8neW==Q37X}yV>ikah z!Q*KhJ{G$lGmh$3c_dT#CQ#-?VryqZklR`}uW-gj7vM`*NqZJ@^f&xqvEG!(H%8F9 z3`z}t)e7-f4fU0FW~+)9fj!yk50Nc(x%4euDLe=HJ9qf2zU?E#X~l)_gI} z7I-8shr1<@7+(tv?OE9LZRHx)+QQL;(!~l5V@A22YR(AsseDpy$M*G z;h6C?#hOi-`f+v1aJ^YC#h!;RF8G7QBnmx}9s|L@t`84uI(ME1AGABP21WKZeDI~VwIs#T%Au;=@46lLM3l9Nr)lN?a!3uVq;*W81}{Rmah zaW4=~SA+)#aS}aC|_zyr1y0cz?sdNTOHY*?ApcRe*`1N$t=;dsk<>xl8AI;AWNieJSvqCdXVi0O$Vn z`N;9kX_|8L=TdTdX+XPc2J7JstPvKjzGpEmsVv-1}R2<_qgi za>J-ucM@2EyX~A3xgyNH$L@Bft<*0Y?y*BnO75`I?UcPceGBS}mq+xT;A`Wlduuu| zNm#?_2!W+8R6AQ>c{@2G;|35ljHYCe)3C2ZS#RFKvM<+XpH>0R;qr)@y8aN@u^$R z%nWdq* z$c2&EB$smxIQ}LHXTG)apZ=9NnQ$+h@OeLfzTh(&oL|C!#&P256QW9*cD|+v%`Xu< zIy?DIc4Ob>LaI?_{O!>Y$4$@GE`&L=^A7I}h#j_-Qi4Bw;sdW{$39JH=39B6>c;+I z&3P)~Qn7zlLsaZ`Tv$m&T$BV@Ilnslg&VTtVk1x*I@gM8x*ON`fa7nv8y8gDIbI;N zDdF!G`OkmVft*rurJ)n?pQYT^HRqY^*x5XkhGto@&v0X>R`EB(jlB|d=I58{egKz- zUI(6KI{%u=!?NR=B{Z)gF)RcA_H*MpSaaUbjq5l-Ucw(atDK&UuWkuNh%ILfArL#u zlqK?w2VX)U5c_J%9HAlD=<{qh_85uro9$4B{IzLFwp8~AwlqW?Cdpk_J^oa7Tyuqn z={2=-fA_6VbKc)EalKzdvg10Sh`8nn4HIMHI>3ES-MD_HIUnf8_4~YW!J9s0XyQ8Pfx}U3B(__CgN5e5@ZaR?AouN`n)5*t zm#qox1xiDo!GE@KA8mQ)`fSeCLPK3OdU%M-d6FuA=MdoxLT3RWAHkEHl^!ku0Vz}qju4s^$b~7v z!`-)!>bMSfh%MI#T#B9pp1_ThG5`=ZpPnY3NDBWoq}4Zd@;E&PPgIHs_-y z6x(lxdiId}shdufLa2&%Eg;tlO;Co%0$LjSF8;F@ zuejjpFJ;HRNN8%n%INB`ZtQ6t*Rie)cLH)3LXfk+ycP=|<^Uqf(`vCkmWJ%|TI|Mk ziH>Wr8`rHGl3iZM37_*25qqGCqt`u|ov#|9`6u$lwwu4>+_*laIUnc7^=&{{W5{`; z!%IlX301|1uYN5PnyV4}B)svr)Q$Zq9sANO&dWhp z8u|zRvtPe{U3GIdXO6i_Lu25~ev7~5F6UP?=jFngxDbY(mkCXhfa_?TQg|LsmtGCy{2^&X*_53tF_Del`{n)4}Hxj0oq zl^_($Vrt@xQ1T$>HA2&cvM?>csV?U)YR;z$XAn9+2IN9=72qQ{>Mje zJu*A4TA>-S%02AH^=lnh*p2HifV_eb#Isg2MS%+qGt{0jSi*wZFyg+k~W^rCCq29rNwj1C0?R}rf=G-7O zt05ng=Cv;8Rhsi!;S542t|8eP6%#&P_)n78zP8~D*>SBCny(`lEHD0IZd@77Ip)T7 zt{WHo9b00J2w56pD?^e8p85G<*>N=q&DDs@vqk#QR1>WqxrKq|9sK3!?QWJ zWN~hGIp422H)nB<`#3wN9}fT$=c{pvEY5M4^H(+Jcoyf=B-9J|&r-gr<+VGqIVXjt z+A8JKT+UBw&Zh}y5IVorknB=U2_F;J`OlZ$n;lm=E3T9q*FQDqR8}rpCDb4ApXGJ) z%!dES=G-PU8;}dOlKi#0oToGM0x{#3g@9}nNU$!i2edR~;#%tbZgX~A8-!-F71w$< zuBAGz^{&L$>bS_+-)=AkrJ?)rpZR+G-l{{h<(b%U z%V=+Jd??yCII^3;NI(xj9t&DV31sOqC$l}HFYM$k3XLR!a{%nMbt=S=7Yr_DhP%}o zJ%L_8-i<&AEnpQMygFTe+r=?aMxT>IIu}af7p_`SvmE9%v4PH!-b`wDf9INI$b+V? zrMHUyE-!W_8ml)0ooiI8=~O49T=#&;W4Yo4_hV(v3h-y@Tmb}wkG32<}Sk9#bN2VVqSXu@j9?L?uqqlKPyP5xP$gfZG4)> zjNtWpv*#{)4UQeCbTIe19SJdOs$NJEpdQ=1yP~@~x3%|gWjVMBUZw@p$O}XAGxO-7 zM=Ekj95>HQdXy$)fpJ*c_CvI0S&bF@2}?a$y9Y^klg7=V<;IFJxhYw`+K2%u4-iQu zgp2g}P|#PGu+SQ^Vx`H8-{Y4lB&OWwBitZVPV*oeGud&XJrRw9By6u=zWl6YEjN0X zpX&JK9+fUH%j*%#U3gf2w_JUOGTT1Gq*+m|OnBHdGbRC^8x`&U`z8#590^?K|c+BA4y<5bn^ z*^Km-MBjZrRsq-g2}y?}9jE=x;Ar)U3r0tKx|a0zbS%gRE(4Ff_+#h1%?ZsQ%RMJ< z9^TR4*WS~=dF#NyR@4f3NZvd;+_89MsC`Gz@aB=B(f;k5!4|OXn}>%w`M!CeuiD&$I=dOJ-#fNvI=1(BWfXbM5|BA3I&cYf76%fX!cN-tg!^pn=^Ppu z9@sKceN^)3>i8fI3iRxO^>H=N*!A?ndg=ZNr_69VcXsV#GM&y|XVZzBalc_*UE}8C zSJl)kS-NWZ>Xl2DZtg&anR5Ph_AbGll1^t|m$SIOYab=Dqw|ECC4*fZ)r;!~_K`&{ zp@LncdU0$YIkH^#IrKgU+`Mlg-+ic_{?6XfuI^!k%u~#u*xc2%{oS)3N72WRt$ncP zze&(JG*Z2|F0*0vs>~@%@y0@w7u+Z-t{VWup)Z_+!bvve&;#e(g#z{mtqJqSGZd%P zfEWiFmoGa7%^BIYq?c|0U-eD!p$_6^jzIs%E+2 zoq@Yum|@|l2)t>x2tzmmYEqmtwXLzHI&=4Q<`h*M5wt!Lm*lmG!5!09*QCQVt5h|v zufqrvCl_I!lLP@g*4D+0k*7{p%`(YKA{9<}C?vkKdhw>t6L(@@G?W=xjE`RY4X&?y8+yE zJd)GcTvv~?B4QD!Z^eaCBFjRgr_eP1GfAdZs-SC5s9wCYYlVoA&t+gYvKt-Ej=dehm;gs=G?;NV>#<}(zR4y2!!<#HD;!K>jOCB;fde(8`*I5a%ZVvACO|@z?}`RWnZ(8>NQkxN7TOfH zlKL`-qcx?m5DLa^k(y*0!yzFJUev(q!kCQ(kq`xLYA|9k7D7T}tS3E(;M8KWGKNAz zCWlImMWshe#U!mU9unFd7cx+JNN0?Rgbt$iU&>%|YD|edZq}s=Y>>!moO>4xpK-5V zn6LTdzI$P@#uj<|f+_gI7ciJ;b6>$=LRCohHx8p|K3;W-WF4*+s50_E^j zz;J&-KCzwR`hapBO)(iny5Z=BN<2-?2Il<|%y)Mixvi4`IIs*ieYhYd-V%fF2s+K! zUnAkqSCI9|7&;g@@-?AKHNtlF>mqSRS3fKpY^K7{v!p(gja7VBAdC9CleuGvF9(=?#nN8mK*X7&%mFuzQ;j+j-_; zhG7zov?h5anGR_9&D40Eb%L)&Fh^YnX3SL$7#>t8Dr3gT*h!sraT+TF5%$e#tTrD4 z%*B3|B&fG;Bzzg#^PpOa!xL+}8vrWfTB`xc)hksZZ3y6NA7FF|K|F@kYj_h!Y@o zoJcG|w`tfDqo*^9oJ`6k!o+%&;(36Q8kqn!&Esi_5^agWlL>1iamWpDEm62Db|>`F z4e(l!ax)AAW8@;SUT4mPMCK4u92*2fnuw86GKV`E+V9rGE;EgVWEC;;3!FGsVQ@HB zj)-4lSsIZ+KTPoD?me70Q$ZjK1i`8%904`e!@zqjuNl(5EsP6NHU!KVL;>Q~7J49~ z@qM@!S7=E~PAu}olttmOC>gCq8wOWoxAsV#mKFoLWyR2+reS?g?kTBQoDb;U z*2Glq;!ua^m@3oU2vH+22}=cK-dW3X*}E}| zFCy>URmhn|sXihcao*O({;pZfN8#6r$VMVrBwW(6Jede`I+6Z@Ml%j4*bGT;!lpdz zEqM$#D`xQO3d^9DEk(6OpD=#0cH?l9(kB?C=256QprCt3r8#MM2}eH)p;It)ah$_R zKh61Oj6jCaQ1Q~q1hCOd2oo{zH%=L;1x&7B#Qc|~$vcfDcW9^KIRx%rNk{M1aQy}$ z@IGJC{n^l&ZF*4^dcRJ<3u0R))c~iIxMq#c-ozC{AUE+uLgj`cr4wg~6cyYjQf8I6 zoakakKM%cA7rS9tS}}uGpsXs=BGSCuzS2YL*zMFa_YxLq(&r-JPfW&bp9d0Pf60Pq zhHNL?L&)n5vw{7gfCXgWK z-3q>*$35C1{p~2a&IH}VN(q&LMN`5`6mu66zW!Q(+!3`O^N?F}{f#r*uYZ78Ra)!P z_ys`x%OI#-IqrvJ;kZ|Oj#Px8F5nZ8%^2^G5~O!FQF>!m z#w>>vY^Gol;7BE4=--;qmRk%eJ8$zcX|nnWX5d(&;AbZTkEv1VXIQ(fdPFI(Kg`!1 za_H+yL1cC`B$-L06W5I#ga=3B=poydN?w>sRoGTC*@n29!@=0V&hDYa0349)#$F5R zEAmM>^G_=9ufYYLq5@7uM7w?ol;jDjE!xEd`MNaS2>gPCEM7$Dov;)w<|Uwl5-rX; zSSdZ_&q0&JwTg6Wyx`O=NU4;ckyLm!%&U|vqMwqN*B;s9o&O*!s(oz~11-+P^{@ij zV=d+VuZ?vZTQZSmW`qZRdpf%_a2dcMA7>a%332^ReHme^$wrfrva7NhK@%y*>AvxI z?n9q4&iE12%}jayhc$5JNaTaax7SSu8zd%?>O&8=nY85RTW)a$iCM3I$lNkQb=4-D zt{(sdRWPoQup*;c6e06!nKW~}SO~PnJ(NWFdx_9%UA>Z_c+X-Eb9o7sVMzv9rOa9F zHdDJvMQ40&ksq(F$vuu?Kfub9r|vLYT=7EkZBJoRX}Kr>xbd6D2JJ0ZjJ*DePDja~ zv1f8e&&1s$fjF}Y%AN(4MBt`G1ao@Paaf9|#!o6G8-hVmHsYBAHrS%LrX>(*KPypi zAQy~+30Thb<&-u#a&HUS^jsrKI(`j~5|50*C?+l)23>QK`|*UEmcTb~m%4%cU@1ur zTG;Z-06JIG&wl;kpnS9P!?x!kP$f)^ECu!~?2MSvocUxrza+eK+$tq);SvPJa0!hz zS^zeV|8U8{oUJ-{G$1GKs+Wq$b{X&Hg;2O_UYG?NR;2Rg5rd(Dm-m@s498$wMG zKW}Uw-o`glXRe+Qk$nL$HROcI80fDAL|WyB0tVtfjeV;J7j;;r?6Q;wwpzxaSnf+o zr|>6+^HMG8H07MPg_6T)QN|ZUPiqzF0lEXjF#boX*;{wxmOWPMn zrcpUItdjg7J62ux6RMk_G`vxI`|&;xa}K!p!`)X- z`s8&z$p>TQ(_r&|gup-ip0}zO)z(a&Hv2uV{qdw7*E>$Xz?V#@eC2&lpR}a=?eg#Z z?8mpl-uD)PKd|zk%GzgscJud|KE8Fo&Vz1poSzH)tu+^Z?D3;cb>6z9F&KCs!{CSuBVAiCz zw_f?m^cnYEo4nF-ek1T*%MYo(_^;<~Iq4^V9ewME=fY0AyoBj_^?}2`eQnp}XPk2P z17G~zQh|~Fz4W~|Hl90p)W6@0 z>T;pLzkK+^bK5`g-II@;&^z^G|M)w+=-emp)<3>-&SNV_FM0U&KYadxmZL9soTml; z#utyjeEX-5f9}R}7w)O~A%*s~z<+-Jp4Z;H>7&m~*tGnaZ_Ri%={QH0GM$@deYfUA zzhAoI+K)MBJoEbYM;zyDf#2O&S@WUQ&mMlyR~BAAr{W{K9bAD#`fn}0=lbgRMnB

    +VjyJ?EJp{^mapcbt<1{-?L5Z+!mjHL)uWdZ0IQ)&=l% z(=G6_e}8TFZznnDJ^IBJl{=0<=ch2i7x-7Emz?(ghX?+7&6|7Mo<8i#PRIFAfxjJ{ zbMoMW=kNO7GY8yx|{oE~kUjFsf$MnG5U*OKt-yW3s z*NZPMj8{Ltd`<>7mg@!n{)eyn+igeQdF)po+|afA1K;{498L&)^}WqoKH7Nb#+QHi zo430Y_k7uLzAf-)k6w4iVYhsL*7X-2dHs)G4FAh<{wDB;zc}%(msU=gf9N0IaIX9N zcffxUY)Gm?%YWH_)P0Y9|MIif^_G3GWX3mOx+?I;-uu+p6P3?={L+7W>i82^{|(lp zR|)*QJHsb^Zt#QUUwB~o%T53J@>`DcS%KHjxM#wYBfkCW(WicF@P_|<=}?%?3;do1 zzj^H0uiSs*c^{bY<14>;(+9Dm2Yb}2&}-Yjapvas!yov-g8dKf`^WuHAUy(KeBD|1 zg&s<-Idc8#^4F(V{~HDY0&jj|>RBKB#EDCOc;e4$Gquy8pLYoS@Atm>eD@LOhr_@9 z@cjPo%vk|B2>i!wFP&L(;M=#iR6bj`=$FX{P%qF%RE18OxHDaSY3Sui&mEdNZ|*6N zI?iH&KY07miM|&eeeQ=Ro&VxAng)30DcM5!C zWGs2YO&#+t|NG?YZ+_@9_$+u#;PZagGWnQ=KmFId_~XADIrZ7g9p`m{&p7F&cY4pb zeN*E*1K+skl0~P$_9&x@H3D7UB!=H{QlRT zJo6JjIr+~YLwWTGyy1brJ^9sdJy-SWc~|t7#-4;h&MgAZF2`>P{De2Z{o+TzbJ$6v zk4&!l!%62q1QU6I-}r~`)D3>GfA#f89=v4t1CRX`uF@-+o+m!@!zt}Eum9ux`#XPp z^PGcY808Cm#fR>AvSLB<_YX$9W=-ln2JK$2z&qL>_|DYlA1-bG+tA|||M5fD!I_7^ z*DQSK)T4j?;m3Zn{%_mcOMZVe>Z!o{c2t%;bJfGwFE0J{BQqOc{t4=fz;_=oc-p7- zKl2mQZ@g^RT|YY#_TE!qYh4v;+H(Glx1Im!jN2ah%1d|L@ZvhhSt0P7OK!XH@t0p* zdF#Osk6qA_hMn_ffq!w`tiN7Wk-q9@|1o;W5pUKaotFrF&l{87td+yaGakA{Kv1K|GuwmIp(;Ze)3BPo$#@?R~+Y` z0zcq07hL+)uSJ@h>o&aB_5LrQUK~D!>3sF>PyPKH_kSie|AVhjedM5T9)R(Qz-PRE z>!UBd^Vf&Yxb^QNJ0|klk70q|d+%+xht8e;@Do?AI&SsY+7CF+2L)dDRQ1(65BkW; z{lERz-%eUJdJ*(W;0q@_|C=NCTXxu&(o=tZ*v6BfQ?CmAou^B;p7W_QKRe;s)mI#Q z_YZ!Dqpz^#t_ofB^mn%Z>f>`}CU+hF_sbT)Fb~%@3Vgz6KAX59vh66h)+cXG9x`{;%n5g#cGlyNPw6zK=NCua`T5H} zeR=Y(vp(|3fgLNy&>soB<)s5J{aEStSna$Ywtn==C8)pa1^(#`H-7Lx|F!3zb)UNF zm5sl@=2*wMK;R2sd@k{)+jn1h!*frhww`|J4;<$Q0>5DD2TqLLchhYf|8wdskIwk+ z*D)>-_>V7JI=koXrz(23~^WYfK6e14=G*)cFWQkZP}NFVKHbj0u0lCf)OM+T7< zjs})_Jzc$p>4pY7`-h9*2T2Zf>w?KARV}TpT}AL49Nsnv{{gEDrx3Aq;NI<`2)lWq zLJ^e48fiRrWNwB>2XU|F@IDrnGA|v3Gi6*$JbtRQ?!yYTFdb-%)7;^~?#|(nA=q6N zq2_}yI4(+KhTD5Hl*{-D73slMIN0teg3?Q=#rxe>4khnlag5P9&`W!H9HJOMb_$*X z?I=#S`-`aI5Ri&<-_qZU%X7PFkUU%8<-EJMh{{8Sd{-5R-RH<~0lAYa^8_z3 z1#&MXv=iN0|HzglJ^j6fI#FD zuD&9g+ky7tMi_A9(c81N7{PR$UEJ6ZvMHPk5V?IfiaPI%h`52BMU?Mw*LE-|sDo6Q z?p>XO1v+Jt^%PMU?5m2Ju^=DAJBpA?PhWSYvk%MKMPwN&Q&br%WmRSJZh9{9av`0G zcxcP)=;_{>!NhB@n7P+bcl)rZzyFO$$JZoj9!I*Qq_BL3qe`KwK|Di_y3z)luukO| zEs8@ku~ZDKa!`w{HM#bPMg}FM!T(ZCOCH=MGCU>(cudT}qg?Z-uy|mJ*yT~_!b__7 zJ_Q)Y!@VY6iNpA(x-=>e20mTG*Ws!NC+iB9d0ZpEOACTusX>Gjhm5ECGz+ zi`tuORptRcpcnT%&5zf`=HSPCnB6RQ1KuxH1NL~%59H?{d;WLbDG$-=vsfkD6 zJIF7cgWorGeiXkp_sU>iMKeoy&_SQd+Z=qu$_U+K|LEY_p@Gps1wR1rDL#0ly}z@& zH`3nQ+kr0E$bj;%a+0`lyRNqvGGH7BBJ3LrD*ybDqo@}=OpNZu|oP@LMM95i0 zJalNWN9Swzj?-}aY9aD4x;TROa+pvp)qIw@e9#U;UUu9yz_C86Fd=894zo&!3C7{3 z6?_=SYE6GafSzqJ|M)ZfkwWJrO@Fec=e0b8pdsI-j(;}T54r&>$62hz2_BiS*FMup3@Rp z<8m4zYh0EcvWDY|J+b)3`2ZMnxL51tGfkGX<+V%JJad~Rt9<1)N>(_ZNwVe@ut=8p z1LnvA^VuTnumMwKq06#E*0lM|kXaT16J+7DpO%|zv<*JI(t1C%C#+{Nl)apHp(OQj z1a+mgbwB}X{#2>CD$p3%;ba+{)u8K&;M~Mowt?!(K!Xoh9BO<%gF}YRXKYB^_=bim z?m}jUlAF03?teh*ekmO=kjOh+-kt4LRr-zuGsLT;$AJpbbj-C zm9Btwyu>j{Eaq|lF2eB|M{JWz``8S**hjqN+Gca$3;93My{eYh>7IE%)04}HpYU-E z_$4jlnCTmN&=THfqffr?!aiU46lI+6$uWm*zAMjwWxj$#rha&)HO3pn#Yq58!`4I2 zI5r`2j#K~gowb7k=0TwZ*q`N^S7A!!9iD8pzYs{~m!~04jz4pUw@(AMS|11vnQ+{c z(&3NMW4tuJ;n8+|Pk(x76!%ne+(%fMvn{e^YxCA2xESWVs04X#6aA z#?jqd+TlZ*w~v|$7Rre7?*zWWQEuRQ#jcr`b_pNya-5^Wh2@_wUrjIx4ju>A7q$k# zUcR;WZUfs-Pp@lNc0rtwUU*`=I%6-n)K%RUJTKTG& zRv=d**IezNviZqTb~y}jynGGme2tawd%lMA?vS+{U{5d4*ZCTovhVr2AWy!=tbAQDrEtEE z!I+PI3)in;HGun3;Mczs2a3?Y7&xwk2E1-JmOFboHM~vY$J*eqT36hN?|zd+=QsZW=b=XWHf#=E)QNGaU-PNWn~P8U*;w;tPj>C)churS~dm*0Do z3X3_A7q(f=ap25S)|5Ghyb`kH9LFWXZS}ryR71+j>?163WfjArOk)eA*5u%EYGA0d zyUT?l{akMd279&wGQYKT{yRck)uI<(d_MftPVw1wSStMV+unYH9$Tu;_I z&hZ>sQ> zGFGmyO$key$8miv_;LMS>o{_|y;f-~(&@FtRoLUT;+fmuwZawhc1_t9=jmGUJJ6ON zoR-5gQZkx=FFMx)uA(dG4_nKsfIDoFLq1p6OnY88*P8!$UalEFzlUp;kGyWHHUFZ# zR%_Yb0(6P0qE9lo+(;b~ReK`M+ zYLGtbn7lM>RM#fMb*gVW)}~9u;q!B2rUBg_$9gQAMgNDpHvx~cs{Y4sCTk}xO-ox! zDKL}*Wh>n%Ws^>lNi%ekj5C=oSQxUk4WvoP(ghKMAfTYK$qu3-;sVMdqM`yK;DRio zAZ{T0B3j&V<^TDdd++<+cQP{xg~#vj`Oott@4e@oyPb2_bMHMjfM1-5^I)6vTXH1)muZCW$1I|~%U*KXX(A2Mx0}nowr{|QV4t|tzMiWPw zLzD9ep48KF2T#*oJy-~trxVTm&d+nuHjw61r4ybi#(}<`)`7O(!S#3@jIyqB@JQb^ zW+e4xf`do=qwrw|PeYjj1DK|a)ea5f$V)TPp>b_5GLMrSoMUZD^0$+N%QbPyu#+7; z`IpD^nZ#4$&}n-;ntxLqcmV@T5`Jnf-Kf_ob)DGRp(DQv7%Y-Fr#ZCbTQS<{4y|uV zQXCi-V_(bMZ4Byl3gq$aYr;=bJUt@y>E^zAaXb+s(oG*77uNwuAF6 zwrSk%4$gVqQ0np?L7bl*lh-{Ryw6YPkw`N(MuK#sY@@MW?G>c44}fbldZU^9$+StgRgC*^C-*Tq*#SpsBOg**B_21I694(gs6 z|5aw+=`#3n!x{GhwC;!c_1UTkj}>_Ton@{ga87wlq3>v-Hbs1-n(is>SH-`E7jzCK@UPa*e6*Bz24*3Y$bA!AAnGp{?P%gf{1*>nXuWg97!u-#;Xr-P*Z&WnCX!Bad zy?Uq{rLJ6$vOqtR&xDN(%6SkdU7>x_fR$6!Wp2sg>`$~QO}?|faUYKL&FIXkZSQV~WZr1gP{zz3Xk3Pyi49ju@VD>k+D(_|>8&|a#7RA<8hxf(!irHu-H|XV z<3$YUZ&}7Kn>da$?VbIFQnB7n({^tHz6^V!WHvi}sW1Kta5%Gu zAxguTKg#50!0oSQ9D5j>3-m!ZBA(gUm!)Asnf{#>?Fv8hbS>m-4p{S-`#1UI!hK!4!Kp

    m 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 1200 +#pragma warning(push) +#endif +#pragma warning (disable:4201) +#pragma warning(disable:4214) // named type definition in parentheses + +//! User defined handle context space, see \ref LibK_GetContext. +typedef INT_PTR KLIB_USER_CONTEXT; + +//! KUSB control setup packet. +/*! +* This union structure is identical in size to a \ref WINUSB_SETUP_PACKET, +* but provides additional field accessors. (see \ref libusbk.h for structure details) +*/ +typedef union _KUSB_SETUP_PACKET +{ + UCHAR Bytes[8]; + USHORT Words[4]; + struct + { + //! Request value + struct + { + UCHAR Recipient: 2; + UCHAR Reserved: 3; + UCHAR Type: 2; + UCHAR Dir: 1; + } BmRequest; + + //! Request type value + UCHAR Request; + + //! wValue + USHORT Value; + + //! wIndex + USHORT Index; + + //! wLength ushort value + USHORT Length; + }; + struct + { + struct + { + UCHAR b0: 1; + UCHAR b1: 1; + UCHAR b2: 1; + UCHAR b3: 1; + UCHAR b4: 1; + UCHAR b5: 1; + UCHAR b6: 1; + UCHAR b7: 1; + } BmRequestBits; + + struct + { + UCHAR b0: 1; + UCHAR b1: 1; + UCHAR b2: 1; + UCHAR b3: 1; + UCHAR b4: 1; + UCHAR b5: 1; + UCHAR b6: 1; + UCHAR b7: 1; + } RequestBits; + + UCHAR ValueLo; + UCHAR ValueHi; + UCHAR IndexLo; + UCHAR IndexHi; + UCHAR LengthLo; + UCHAR LengthHi; + }; +} KUSB_SETUP_PACKET; +// setup packet is eight bytes -- defined by spec +C_ASSERT(sizeof(KUSB_SETUP_PACKET) == 8); + +#if _MSC_VER >= 1200 +#pragma warning(pop) +#endif + + +//! Base handle type for all library handles, See \ref KLIB_HANDLE_TYPE. +typedef void* KLIB_HANDLE; + +//! Opaque UsbK handle, see \ref UsbK_Init. +typedef KLIB_HANDLE KUSB_HANDLE; + +//! Opaque LstK handle, see \ref LstK_Init. +typedef KLIB_HANDLE KLST_HANDLE; + +//! Opaque HotK handle, see \ref HotK_Init. +typedef KLIB_HANDLE KHOT_HANDLE; + +//! Opaque OvlK handle, see \ref OvlK_Acquire. +typedef KLIB_HANDLE KOVL_HANDLE; + + +//! Opaque OvlPoolK handle, see \ref OvlK_Init. +typedef KLIB_HANDLE KOVL_POOL_HANDLE; + +//! Opaque StmK handle, see \ref StmK_Init. +typedef KLIB_HANDLE KSTM_HANDLE; + +//! Handle type enumeration. +typedef enum _KLIB_HANDLE_TYPE +{ + //! Hot plug handle. \ref KHOT_HANDLE + KLIB_HANDLE_TYPE_HOTK, + + //! USB handle. \ref KUSB_HANDLE + KLIB_HANDLE_TYPE_USBK, + + //! Shared USB handle. \ref KUSB_HANDLE + KLIB_HANDLE_TYPE_USBSHAREDK, + + //! Device list handle. \ref KLST_HANDLE + KLIB_HANDLE_TYPE_LSTK, + + //! Device info handle. \ref KLST_DEVINFO_HANDLE + KLIB_HANDLE_TYPE_LSTINFOK, + + //! Overlapped handle. \ref KOVL_HANDLE + KLIB_HANDLE_TYPE_OVLK, + + //! Overlapped pool handle. \ref KOVL_POOL_HANDLE + KLIB_HANDLE_TYPE_OVLPOOLK, + + //! Pipe stream handle. \ref KSTM_HANDLE + KLIB_HANDLE_TYPE_STMK, + + //! Max handle type count. + KLIB_HANDLE_TYPE_COUNT +} KLIB_HANDLE_TYPE; + +//! Function typedef for \ref LibK_SetCleanupCallback. +typedef INT KUSB_API KLIB_HANDLE_CLEANUP_CB (_in KLIB_HANDLE Handle, _in KLIB_HANDLE_TYPE HandleType, _in KLIB_USER_CONTEXT UserContext); + +//! libusbK verson information structure. +typedef struct _KLIB_VERSION +{ + //! Major version number. + INT Major; + + //! Minor version number. + INT Minor; + + //! Micro version number. + INT Micro; + + //! Nano version number. + INT Nano; +} KLIB_VERSION; +//! Pointer to a \copybrief KLIB_VERSION +typedef KLIB_VERSION* PKLIB_VERSION; + +/*! @} */ +#endif + +#ifndef _LIBUSBK_ISOK_TYPES +/*! \addtogroup isok +* @{ +*/ + + +//! Callback function typedef for \ref IsoK_EnumPackets +typedef BOOL KUSB_API KISO_ENUM_PACKETS_CB (_in UINT PacketIndex, _in PKISO_PACKET IsoPacket, _in PVOID UserState); + +/*! @} */ +#endif + +#ifndef _LIBUSBK_LSTK_TYPES + +/*! \addtogroup lstk +* @{ +*/ + +//! Allocated length for all strings in a \ref KLST_DEVINFO structure. +#define KLST_STRING_MAX_LEN 256 + +//! Device list sync flags. +/*! +* These sync flags are also use by the hot plug module to indicate device +* arrival/removal notifications: +* - \b DeviceArrival = KLST_SYNC_FLAG_ADDED +* - \b DeviceRemoval = KLST_SYNC_FLAG_REMOVED +*/ +typedef enum _KLST_SYNC_FLAG +{ + //! Cleared/invalid state. + KLST_SYNC_FLAG_NONE = 0L, + + //! Unchanged state, + KLST_SYNC_FLAG_UNCHANGED = 0x0001, + + //! Added (Arrival) state, + KLST_SYNC_FLAG_ADDED = 0x0002, + + //! Removed (Unplugged) state, + KLST_SYNC_FLAG_REMOVED = 0x0004, + + //! Connect changed state. + KLST_SYNC_FLAG_CONNECT_CHANGE = 0x0008, + + //! All states. + KLST_SYNC_FLAG_MASK = 0x000F, +} KLST_SYNC_FLAG; + +//! Common usb device information structure +typedef struct _KLST_DEV_COMMON_INFO +{ + //! VendorID parsed from \ref KLST_DEVINFO::DeviceID + INT Vid; + + //! ProductID parsed from \ref KLST_DEVINFO::DeviceID + INT Pid; + + //! Composite interface number parsed from \ref KLST_DEVINFO::DeviceID. Set to \b -1 for devices that do not have the composite parent driver. + INT MI; + + // An ID that uniquely identifies a USB device. + CHAR InstanceID[KLST_STRING_MAX_LEN]; + +} KLST_DEV_COMMON_INFO; +//! Pointer to a \c KLST_DEV_COMMON_INFO structure. +typedef KLST_DEV_COMMON_INFO* PKLST_DEV_COMMON_INFO; + +//! Semi-opaque device information structure of a device list. +/*! +* +* \attention This structure is semi-opaque. +* +*/ +typedef struct _KLST_DEVINFO +{ + //! Common usb device information + KLST_DEV_COMMON_INFO Common; + + //! Driver id this device element is using + INT DriverID; + + //! Device interface GUID + CHAR DeviceInterfaceGUID[KLST_STRING_MAX_LEN]; + + //! Device instance ID. + /*! + * A Device instance ID has the following format: + * [enumerator]\[enumerator-specific-device-ID]\[instance-specific-ID] + * - [enumerator] + * - For USB device, the enumerator is always \c USB + * - [enumerator-specific-device-ID] + * - Contains the vendor and product id (VID_xxxx&PID_xxxx) + * - If present, contains the usbccgp (windows composite device layer) interface number (MI_xx) + * - [instance-specific-ID] + * - If the device is composite, contains a unique interface ID generated by Windows. + * - If the device is not composite and has a serial number, contains the devices serial number. + * - If the device does not have a serial number, contains a unique ID generated by Windows. + */ + CHAR DeviceID[KLST_STRING_MAX_LEN]; + + //! Class GUID. + CHAR ClassGUID[KLST_STRING_MAX_LEN]; + + //! Manufacturer name as specified in the INF file. + CHAR Mfg[KLST_STRING_MAX_LEN]; + + //! Device description as specified in the INF file. + CHAR DeviceDesc[KLST_STRING_MAX_LEN]; + + //! Driver service name. + CHAR Service[KLST_STRING_MAX_LEN]; + + //! Unique identifier. + CHAR SymbolicLink[KLST_STRING_MAX_LEN]; + + //! physical device filename used with the Windows \c CreateFile() + CHAR DevicePath[KLST_STRING_MAX_LEN]; + + //! libusb-win32 filter index id. + INT LUsb0FilterIndex; + + //! Indicates the devices connection state. + BOOL Connected; + + //! Synchronization flags. (internal use only) + KLST_SYNC_FLAG SyncFlags; + + INT BusNumber; + + INT DeviceAddress; + + //! If the the device is serialized, represents the string value of \ref USB_DEVICE_DESCRIPTOR::iSerialNumber. For Devices without a \b iSerialNumber, represents the unique \b InstanceID assigned by \b Windows. + CHAR SerialNumber[KLST_STRING_MAX_LEN]; + +} KLST_DEVINFO; +//! Pointer to a \ref KLST_DEVINFO structure. (semi-opaque) +typedef KLST_DEVINFO* KLST_DEVINFO_HANDLE; + +//! Device list initialization flags. +typedef enum _KLST_FLAG +{ + //! No flags (or 0) + KLST_FLAG_NONE = 0L, + + //! Enable listings for the raw device interface GUID \b only. {A5DCBF10-6530-11D2-901F-00C04FB951ED} + KLST_FLAG_INCLUDE_RAWGUID = 0x0001, + + //! List all libusbK devices including those not currently connected. + KLST_FLAG_INCLUDE_DISCONNECT = 0x0002, + +} KLST_FLAG; + +//! Device list/hot-plug pattern match structure. +/*! +* \fixedstruct{1024} +* +* These ansi char strings are used to specify which devices should be included in a device list. +* All strings file pattern match strings allowing asterisk or question mark chars as wildcards. +* +*/ +typedef struct _KLST_PATTERN_MATCH +{ + //! Pattern match a device instance id. + CHAR DeviceID[KLST_STRING_MAX_LEN]; + + //! Pattern match a device interface guid. + CHAR DeviceInterfaceGUID[KLST_STRING_MAX_LEN]; + + //! Pattern match a symbolic link. + CHAR ClassGUID[KLST_STRING_MAX_LEN]; + + //! fixed structure padding. + UCHAR z_F_i_x_e_d[1024 - KLST_STRING_MAX_LEN * 3]; + +} KLST_PATTERN_MATCH; +C_ASSERT(sizeof(KLST_PATTERN_MATCH) == 1024); + +//! Pointer to a \ref KLST_PATTERN_MATCH structure. +typedef KLST_PATTERN_MATCH* PKLST_PATTERN_MATCH; + +//! Device list enumeration function callback typedef. +/*! +* +* \param DeviceList +* The device list \c DeviceInfo belongs to +* +* \param DeviceInfo +* Device information +* +* \param Context +* User context that was passed into \ref LstK_Enumerate +* +* Use this typedef as a prototype for an enumeration function with \ref LstK_Enumerate. +* +*/ +typedef BOOL KUSB_API KLST_ENUM_DEVINFO_CB ( + _in KLST_HANDLE DeviceList, + _in KLST_DEVINFO_HANDLE DeviceInfo, + _in PVOID Context); + +/*! @} */ + +#endif + +#ifndef __USB_H__ + +#include + +/*! \addtogroup libk +* @{ +*/ + +//! Maximum value that can be added to the current start frame. +#define USBD_ISO_START_FRAME_RANGE 1024 + + +//! bmRequest.Dir +typedef enum _BMREQUEST_DIR +{ + BMREQUEST_DIR_HOST_TO_DEVICE = 0, + BMREQUEST_DIR_DEVICE_TO_HOST = 1, +} BMREQUEST_DIR; + +//! bmRequest.Type +typedef enum _BMREQUEST_TYPE +{ + //! Standard request. See \ref USB_REQUEST_ENUM + BMREQUEST_TYPE_STANDARD = 0, + + //! Class-specific request. + BMREQUEST_TYPE_CLASS = 1, + + //! Vendor-specific request + BMREQUEST_TYPE_VENDOR = 2, +} BMREQUEST_TYPE; + +//! bmRequest.Recipient +typedef enum _BMREQUEST_RECIPIENT +{ + //! Request is for a device. + BMREQUEST_RECIPIENT_DEVICE = 0, + + //! Request is for an interface of a device. + BMREQUEST_RECIPIENT_INTERFACE = 1, + + //! Request is for an endpoint of a device. + BMREQUEST_RECIPIENT_ENDPOINT = 2, + + //! Request is for a vendor-specific purpose. + BMREQUEST_RECIPIENT_OTHER = 3, +} BMREQUEST_RECIPIENT; + +//! Maximum length (in bytes) of a usb string. USB strings are always stored in wide-char format. +#define MAXIMUM_USB_STRING_LENGTH 255 + +//! Values for the bits returned by the \ref USB_REQUEST_GET_STATUS request. +typedef enum _USB_GETSTATUS +{ + //! Device is self powered + USB_GETSTATUS_SELF_POWERED = 0x01, + + //! Device can wake the system from a low power/sleeping state. + USB_GETSTATUS_REMOTE_WAKEUP_ENABLED = 0x02 +} USB_GETSTATUS; + +//! Standard USB descriptor types. For more information, see section 9-5 of the USB 3.0 specifications. +typedef enum _USB_DESCRIPTOR_TYPE +{ + //! Device descriptor type. + USB_DESCRIPTOR_TYPE_DEVICE = 0x01, + + //! Configuration descriptor type. + USB_DESCRIPTOR_TYPE_CONFIGURATION = 0x02, + + //! String descriptor type. + USB_DESCRIPTOR_TYPE_STRING = 0x03, + + //! Interface descriptor type. + USB_DESCRIPTOR_TYPE_INTERFACE = 0x04, + + //! Endpoint descriptor type. + USB_DESCRIPTOR_TYPE_ENDPOINT = 0x05, + + //! Device qualifier descriptor type. + USB_DESCRIPTOR_TYPE_DEVICE_QUALIFIER = 0x06, + + //! Config power descriptor type. + USB_DESCRIPTOR_TYPE_CONFIG_POWER = 0x07, + + //! Interface power descriptor type. + USB_DESCRIPTOR_TYPE_INTERFACE_POWER = 0x08, + + //! Interface association descriptor type. + USB_DESCRIPTOR_TYPE_INTERFACE_ASSOCIATION = 0x0B, +} USB_DESCRIPTOR_TYPE; + +//! Makes \c wValue for a \ref USB_REQUEST_GET_DESCRIPTOR or \ref USB_REQUEST_SET_DESCRIPTOR request. +#define USB_DESCRIPTOR_MAKE_TYPE_AND_INDEX(d, i) \ + ((USHORT)((USHORT)d<<8 | i)) + +//! Endpoint type mask for the \c bmAttributes field of a \ref USB_ENDPOINT_DESCRIPTOR +#define USB_ENDPOINT_TYPE_MASK 0x03 + +//! Indicates a control endpoint +#define USB_ENDPOINT_TYPE_CONTROL 0x00 + +//! Indicates an isochronous endpoint +#define USB_ENDPOINT_TYPE_ISOCHRONOUS 0x01 + +//! Indicates a bulk endpoint +#define USB_ENDPOINT_TYPE_BULK 0x02 + +//! Indicates an interrupt endpoint +#define USB_ENDPOINT_TYPE_INTERRUPT 0x03 + +//! Config power mask for the \c bmAttributes field of a \ref USB_CONFIGURATION_DESCRIPTOR +#define USB_CONFIG_POWERED_MASK 0xc0 + +//! Values used in the \c bmAttributes field of a \ref USB_CONFIGURATION_DESCRIPTOR +enum USB_CONFIG_BM_ATTRIBUTE_ENUM +{ + //! The device is powered by it's host. + USB_CONFIG_BUS_POWERED = 0x80, + + //! The device has an external power source. + USB_CONFIG_SELF_POWERED = 0x40, + + //! The device is capable of waking the the host from a low power/sleeping state. + USB_CONFIG_REMOTE_WAKEUP = 0x20, +}; + +//! Endpoint direction mask for the \c bEndpointAddress field of a \ref USB_ENDPOINT_DESCRIPTOR +#define USB_ENDPOINT_DIRECTION_MASK 0x80 + +//! Endpoint address mask for the \c bEndpointAddress field of a \ref USB_ENDPOINT_DESCRIPTOR +#define USB_ENDPOINT_ADDRESS_MASK 0x0F + +//! Tests the \c bEndpointAddress direction bit. TRUE if the endpoint address is an OUT endpoint. (HostToDevice, PC Write) +/*! +* \param addr \c bEndpointAddress field of a \ref USB_ENDPOINT_DESCRIPTOR +*/ +#define USB_ENDPOINT_DIRECTION_OUT(addr) (!((addr) & USB_ENDPOINT_DIRECTION_MASK)) + +//! Tests the \c bEndpointAddress direction bit. TRUE if the endpoint address is an IN endpoint. (DeviceToHost, PC Read) +/*! +* \param addr \c bEndpointAddress field of a \ref USB_ENDPOINT_DESCRIPTOR +*/ +#define USB_ENDPOINT_DIRECTION_IN(addr) ((addr) & USB_ENDPOINT_DIRECTION_MASK) + +//! USB defined request codes +/* +* see Chapter 9 of the USB 2.0 specification for +* more information. +* +* These are the correct values based on the USB 2.0 specification. +*/ +enum USB_REQUEST_ENUM +{ + //! Request status of the specific recipient + USB_REQUEST_GET_STATUS = 0x00, + + //! Clear or disable a specific feature + USB_REQUEST_CLEAR_FEATURE = 0x01, + + //! Set or enable a specific feature + USB_REQUEST_SET_FEATURE = 0x03, + + //! Set device address for all future accesses + USB_REQUEST_SET_ADDRESS = 0x05, + + //! Get the specified descriptor + USB_REQUEST_GET_DESCRIPTOR = 0x06, + + //! Update existing descriptors or add new descriptors + USB_REQUEST_SET_DESCRIPTOR = 0x07, + + //! Get the current device configuration value + USB_REQUEST_GET_CONFIGURATION = 0x08, + + //! Set device configuration + USB_REQUEST_SET_CONFIGURATION = 0x09, + + //! Return the selected alternate setting for the specified interface + USB_REQUEST_GET_INTERFACE = 0x0A, + + //! Select an alternate interface for the specified interface + USB_REQUEST_SET_INTERFACE = 0x0B, + + //! Set then report an endpoint's synchronization frame + USB_REQUEST_SYNC_FRAME = 0x0C, +}; + +//! USB defined class codes +/*! +* see http://www.usb.org/developers/defined_class for more information. +* +*/ +enum USB_DEVICE_CLASS_ENUM +{ + //! Reserved class + USB_DEVICE_CLASS_RESERVED = 0x00, + + //! Audio class + USB_DEVICE_CLASS_AUDIO = 0x01, + + //! Communications class + USB_DEVICE_CLASS_COMMUNICATIONS = 0x02, + + //! Human Interface Device class + USB_DEVICE_CLASS_HUMAN_INTERFACE = 0x03, + + //! Imaging class + USB_DEVICE_CLASS_IMAGING = 0x06, + + //! Printer class + USB_DEVICE_CLASS_PRINTER = 0x07, + + //! Mass storage class + USB_DEVICE_CLASS_STORAGE = 0x08, + + //! Hub class + USB_DEVICE_CLASS_HUB = 0x09, + + //! vendor-specific class + USB_DEVICE_CLASS_VENDOR_SPECIFIC = 0xFF, +}; + +//! A structure representing the standard USB device descriptor. +/*! +* This descriptor is documented in section 9.6.1 of the USB 2.0 specification. +* All multiple-byte fields are represented in host-endian format. +*/ +typedef struct _USB_DEVICE_DESCRIPTOR +{ + //! Size of this descriptor (in bytes) + UCHAR bLength; + + //! Descriptor type + UCHAR bDescriptorType; + + //! USB specification release number in binary-coded decimal. + /*! + * A value of 0x0200 indicates USB 2.0, 0x0110 indicates USB 1.1, etc. + */ + USHORT bcdUSB; + + //! USB-IF class code for the device + UCHAR bDeviceClass; + + //! USB-IF subclass code for the device + UCHAR bDeviceSubClass; + + //! USB-IF protocol code for the device + UCHAR bDeviceProtocol; + + //! Maximum packet size for control endpoint 0 + UCHAR bMaxPacketSize0; + + //! USB-IF vendor ID + USHORT idVendor; + + //! USB-IF product ID + USHORT idProduct; + + //! Device release number in binary-coded decimal + USHORT bcdDevice; + + //! Index of string descriptor describing manufacturer + UCHAR iManufacturer; + + //! Index of string descriptor describing product + UCHAR iProduct; + + //! Index of string descriptor containing device serial number + UCHAR iSerialNumber; + + //! Number of possible configurations + UCHAR bNumConfigurations; + +} USB_DEVICE_DESCRIPTOR; +//! pointer to a \c USB_DEVICE_DESCRIPTOR +typedef USB_DEVICE_DESCRIPTOR* PUSB_DEVICE_DESCRIPTOR; + +//! A structure representing the standard USB endpoint descriptor. +/*! +* This descriptor is documented in section 9.6.3 of the USB 2.0 specification. +* All multiple-byte fields are represented in host-endian format. +*/ +typedef struct _USB_ENDPOINT_DESCRIPTOR +{ + //! Size of this descriptor (in bytes) + UCHAR bLength; + + //! Descriptor type + UCHAR bDescriptorType; + + //! The address of the endpoint described by this descriptor. + /*! + * - Bits 0:3 are the endpoint number + * - Bits 4:6 are reserved + * - Bit 7 indicates direction + */ + UCHAR bEndpointAddress; + + //! Attributes which apply to the endpoint when it is configured using the bConfigurationValue. + /*! + * - Bits 0:1 determine the transfer type. + * - Bits 2:3 are only used for isochronous endpoints and refer to sync type. + * - Bits 4:5 are also only used for isochronous endpoints and refer to usage type. + * - Bits 6:7 are reserved. + */ + UCHAR bmAttributes; + + //! Maximum packet size this endpoint is capable of sending/receiving. + USHORT wMaxPacketSize; + + //! Interval for polling endpoint for data transfers. + UCHAR bInterval; + +} USB_ENDPOINT_DESCRIPTOR; +//! pointer to a \c USB_ENDPOINT_DESCRIPTOR +typedef USB_ENDPOINT_DESCRIPTOR* PUSB_ENDPOINT_DESCRIPTOR; + +//! A structure representing the standard USB configuration descriptor. +/* +* +* This descriptor is documented in section 9.6.3 of the USB 2.0 specification. +* All multiple-byte fields are represented in host-endian format. +* +*/ +typedef struct _USB_CONFIGURATION_DESCRIPTOR +{ + //! Size of this descriptor (in bytes) + UCHAR bLength; + + //! Descriptor type + UCHAR bDescriptorType; + + //! Total length of data returned for this configuration + USHORT wTotalLength; + + //! Number of interfaces supported by this configuration + UCHAR bNumInterfaces; + + //! Identifier value for this configuration + UCHAR bConfigurationValue; + + //! Index of string descriptor describing this configuration + UCHAR iConfiguration; + + //! Configuration characteristics + UCHAR bmAttributes; + + //! Maximum power consumption of the USB device from this bus in this configuration when the device is fully operation. + /*! + * Expressed in units of 2 mA. + */ + UCHAR MaxPower; +} USB_CONFIGURATION_DESCRIPTOR; +//! pointer to a \c USB_CONFIGURATION_DESCRIPTOR +typedef USB_CONFIGURATION_DESCRIPTOR* PUSB_CONFIGURATION_DESCRIPTOR; + +//! A structure representing the standard USB interface descriptor. +/*! +* This descriptor is documented in section 9.6.5 of the USB 2.0 specification. +* All multiple-byte fields are represented in host-endian format. +*/ +typedef struct _USB_INTERFACE_DESCRIPTOR +{ + //! Size of this descriptor (in bytes) + UCHAR bLength; + + //! Descriptor type + UCHAR bDescriptorType; + + //! Number of this interface + UCHAR bInterfaceNumber; + + //! Value used to select this alternate setting for this interface + UCHAR bAlternateSetting; + + //! Number of endpoints used by this interface (excluding the control endpoint) + UCHAR bNumEndpoints; + + //! USB-IF class code for this interface + UCHAR bInterfaceClass; + + //! USB-IF subclass code for this interface + UCHAR bInterfaceSubClass; + + //! USB-IF protocol code for this interface + UCHAR bInterfaceProtocol; + + //! Index of string descriptor describing this interface + UCHAR iInterface; + +} USB_INTERFACE_DESCRIPTOR; +//! pointer to a \c USB_INTERFACE_DESCRIPTOR +typedef USB_INTERFACE_DESCRIPTOR* PUSB_INTERFACE_DESCRIPTOR; + +//! A structure representing the standard USB string descriptor. +/*! +* This descriptor is documented in section 9.6.5 of the USB 2.0 specification. +* All multiple-byte fields are represented in host-endian format. +*/ +typedef struct _USB_STRING_DESCRIPTOR +{ + //! Size of this descriptor (in bytes) + UCHAR bLength; + + //! Descriptor type + UCHAR bDescriptorType; + + //! Content of the string + WCHAR bString[1]; + +} USB_STRING_DESCRIPTOR; +//! pointer to a \c USB_STRING_DESCRIPTOR +typedef USB_STRING_DESCRIPTOR* PUSB_STRING_DESCRIPTOR; + +//! A structure representing the common USB descriptor. +typedef struct _USB_COMMON_DESCRIPTOR +{ + //! Size of this descriptor (in bytes) + UCHAR bLength; + + //! Descriptor type + UCHAR bDescriptorType; + +} USB_COMMON_DESCRIPTOR; +//! pointer to a \c USB_COMMON_DESCRIPTOR +typedef USB_COMMON_DESCRIPTOR* PUSB_COMMON_DESCRIPTOR; + +#if _MSC_VER >= 1200 +#pragma warning(push) +#endif +#pragma warning (disable:4201) +#pragma warning(disable:4214) // named type definition in parentheses + +//! Allows hardware manufacturers to define groupings of interfaces. +/*! +* +* The ECN specifies a USB descriptor, called the Interface Association +* Descriptor (IAD). +* +* The Universal Serial Bus Specification, revision 2.0, does not support +* grouping more than one interface of a composite device within a single +* function. However, the USB Device Working Group (DWG) created USB device +* classes that allow for functions with multiple interfaces, and the USB +* Implementor's Forum issued an Engineering Change Notification (ECN) that +* defines a mechanism for grouping interfaces. +* +*/ +typedef struct _USB_INTERFACE_ASSOCIATION_DESCRIPTOR +{ + //! Size of this descriptor (in bytes) + UCHAR bLength; + + //! Descriptor type + UCHAR bDescriptorType; + + //! First interface number of the set of interfaces that follow this descriptor + UCHAR bFirstInterface; + + //! The Number of interfaces follow this descriptor that are considered "associated" + UCHAR bInterfaceCount; + + //! \c bInterfaceClass used for this associated interfaces + UCHAR bFunctionClass; + + //! \c bInterfaceSubClass used for the associated interfaces + UCHAR bFunctionSubClass; + + //! \c bInterfaceProtocol used for the associated interfaces + UCHAR bFunctionProtocol; + + //! Index of string descriptor describing the associated interfaces + UCHAR iFunction; + +} USB_INTERFACE_ASSOCIATION_DESCRIPTOR; +//! pointer to a \c USB_INTERFACE_ASSOCIATION_DESCRIPTOR +typedef USB_INTERFACE_ASSOCIATION_DESCRIPTOR* PUSB_INTERFACE_ASSOCIATION_DESCRIPTOR; + +#if _MSC_VER >= 1200 +#pragma warning(pop) +#endif + +/*! @} */ + +#include +#endif // __USB_H__ + +#ifndef _LIBUSBK_LIBK_TYPES + +/*! \addtogroup libk +* @{ +*/ + +//! Usb handle specific properties that can be retrieved with \ref UsbK_GetProperty. +typedef enum _KUSB_PROPERTY +{ + //! Get the internal device file handle used for operations such as GetOverlappedResult or DeviceIoControl. + KUSB_PROPERTY_DEVICE_FILE_HANDLE, + + KUSB_PROPERTY_COUNT + +} KUSB_PROPERTY; + +//! Supported driver id enumeration. +typedef enum _KUSB_DRVID +{ + //! libusbK.sys driver ID + KUSB_DRVID_LIBUSBK, + + //! libusb0.sys driver ID + KUSB_DRVID_LIBUSB0, + + //! WinUSB.sys driver ID + KUSB_DRVID_WINUSB, + + //! libusb0.sys filter driver ID + KUSB_DRVID_LIBUSB0_FILTER, + + //! Supported driver count + KUSB_DRVID_COUNT + +} KUSB_DRVID; + +//! Supported function id enumeration. +typedef enum _KUSB_FNID +{ + //! \ref UsbK_Init dynamic driver function id. + KUSB_FNID_Init, + + //! \ref UsbK_Free dynamic driver function id. + KUSB_FNID_Free, + + //! \ref UsbK_ClaimInterface dynamic driver function id. + KUSB_FNID_ClaimInterface, + + //! \ref UsbK_ReleaseInterface dynamic driver function id. + KUSB_FNID_ReleaseInterface, + + //! \ref UsbK_SetAltInterface dynamic driver function id. + KUSB_FNID_SetAltInterface, + + //! \ref UsbK_GetAltInterface dynamic driver function id. + KUSB_FNID_GetAltInterface, + + //! \ref UsbK_GetDescriptor dynamic driver function id. + KUSB_FNID_GetDescriptor, + + //! \ref UsbK_ControlTransfer dynamic driver function id. + KUSB_FNID_ControlTransfer, + + //! \ref UsbK_SetPowerPolicy dynamic driver function id. + KUSB_FNID_SetPowerPolicy, + + //! \ref UsbK_GetPowerPolicy dynamic driver function id. + KUSB_FNID_GetPowerPolicy, + + //! \ref UsbK_SetConfiguration dynamic driver function id. + KUSB_FNID_SetConfiguration, + + //! \ref UsbK_GetConfiguration dynamic driver function id. + KUSB_FNID_GetConfiguration, + + //! \ref UsbK_ResetDevice dynamic driver function id. + KUSB_FNID_ResetDevice, + + //! \ref UsbK_Initialize dynamic driver function id. + KUSB_FNID_Initialize, + + //! \ref UsbK_SelectInterface dynamic driver function id. + KUSB_FNID_SelectInterface, + + //! \ref UsbK_GetAssociatedInterface dynamic driver function id. + KUSB_FNID_GetAssociatedInterface, + + //! \ref UsbK_Clone dynamic driver function id. + KUSB_FNID_Clone, + + //! \ref UsbK_QueryInterfaceSettings dynamic driver function id. + KUSB_FNID_QueryInterfaceSettings, + + //! \ref UsbK_QueryDeviceInformation dynamic driver function id. + KUSB_FNID_QueryDeviceInformation, + + //! \ref UsbK_SetCurrentAlternateSetting dynamic driver function id. + KUSB_FNID_SetCurrentAlternateSetting, + + //! \ref UsbK_GetCurrentAlternateSetting dynamic driver function id. + KUSB_FNID_GetCurrentAlternateSetting, + + //! \ref UsbK_QueryPipe dynamic driver function id. + KUSB_FNID_QueryPipe, + + //! \ref UsbK_SetPipePolicy dynamic driver function id. + KUSB_FNID_SetPipePolicy, + + //! \ref UsbK_GetPipePolicy dynamic driver function id. + KUSB_FNID_GetPipePolicy, + + //! \ref UsbK_ReadPipe dynamic driver function id. + KUSB_FNID_ReadPipe, + + //! \ref UsbK_WritePipe dynamic driver function id. + KUSB_FNID_WritePipe, + + //! \ref UsbK_ResetPipe dynamic driver function id. + KUSB_FNID_ResetPipe, + + //! \ref UsbK_AbortPipe dynamic driver function id. + KUSB_FNID_AbortPipe, + + //! \ref UsbK_FlushPipe dynamic driver function id. + KUSB_FNID_FlushPipe, + + //! \ref UsbK_IsoReadPipe dynamic driver function id. + KUSB_FNID_IsoReadPipe, + + //! \ref UsbK_IsoWritePipe dynamic driver function id. + KUSB_FNID_IsoWritePipe, + + //! \ref UsbK_GetCurrentFrameNumber dynamic driver function id. + KUSB_FNID_GetCurrentFrameNumber, + + //! \ref UsbK_GetOverlappedResult dynamic driver function id. + KUSB_FNID_GetOverlappedResult, + + //! \ref UsbK_GetProperty dynamic driver function id. + KUSB_FNID_GetProperty, + + + //! Supported function count + KUSB_FNID_COUNT, + +} KUSB_FNID; + +typedef BOOL KUSB_API KUSB_Init ( + _out KUSB_HANDLE* InterfaceHandle, + _in KLST_DEVINFO_HANDLE DevInfo); + +typedef BOOL KUSB_API KUSB_Free ( + _in KUSB_HANDLE InterfaceHandle); + +typedef BOOL KUSB_API KUSB_ClaimInterface ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR NumberOrIndex, + _in BOOL IsIndex); + +typedef BOOL KUSB_API KUSB_ReleaseInterface ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR NumberOrIndex, + _in BOOL IsIndex); + +typedef BOOL KUSB_API KUSB_SetAltInterface ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR NumberOrIndex, + _in BOOL IsIndex, + _in UCHAR AltSettingNumber); + +typedef BOOL KUSB_API KUSB_GetAltInterface ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR NumberOrIndex, + _in BOOL IsIndex, + _out PUCHAR AltSettingNumber); + +typedef BOOL KUSB_API KUSB_GetDescriptor ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR DescriptorType, + _in UCHAR Index, + _in USHORT LanguageID, + _out PUCHAR Buffer, + _in UINT BufferLength, + _outopt PUINT LengthTransferred); + +typedef BOOL KUSB_API KUSB_ControlTransfer ( + _in KUSB_HANDLE InterfaceHandle, + _in WINUSB_SETUP_PACKET SetupPacket, + _refopt PUCHAR Buffer, + _in UINT BufferLength, + _outopt PUINT LengthTransferred, + _inopt LPOVERLAPPED Overlapped); + +typedef BOOL KUSB_API KUSB_SetPowerPolicy ( + _in KUSB_HANDLE InterfaceHandle, + _in UINT PolicyType, + _in UINT ValueLength, + _in PVOID Value); + +typedef BOOL KUSB_API KUSB_GetPowerPolicy ( + _in KUSB_HANDLE InterfaceHandle, + _in UINT PolicyType, + _ref PUINT ValueLength, + _out PVOID Value); + +typedef BOOL KUSB_API KUSB_SetConfiguration ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR ConfigurationNumber); + +typedef BOOL KUSB_API KUSB_GetConfiguration ( + _in KUSB_HANDLE InterfaceHandle, + _out PUCHAR ConfigurationNumber); + +typedef BOOL KUSB_API KUSB_ResetDevice ( + _in KUSB_HANDLE InterfaceHandle); + +typedef BOOL KUSB_API KUSB_Initialize ( + _in HANDLE DeviceHandle, + _out KUSB_HANDLE* InterfaceHandle); + +typedef BOOL KUSB_API KUSB_SelectInterface ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR NumberOrIndex, + _in BOOL IsIndex); + +typedef BOOL KUSB_API KUSB_GetAssociatedInterface ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR AssociatedInterfaceIndex, + _out KUSB_HANDLE* AssociatedInterfaceHandle); + +typedef BOOL KUSB_API KUSB_Clone ( + _in KUSB_HANDLE InterfaceHandle, + _out KUSB_HANDLE* DstInterfaceHandle); + +typedef BOOL KUSB_API KUSB_QueryInterfaceSettings ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR AltSettingIndex, + _out PUSB_INTERFACE_DESCRIPTOR UsbAltInterfaceDescriptor); + +typedef BOOL KUSB_API KUSB_QueryDeviceInformation ( + _in KUSB_HANDLE InterfaceHandle, + _in UINT InformationType, + _ref PUINT BufferLength, + _ref PVOID Buffer); + +typedef BOOL KUSB_API KUSB_SetCurrentAlternateSetting ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR AltSettingNumber); + +typedef BOOL KUSB_API KUSB_GetCurrentAlternateSetting ( + _in KUSB_HANDLE InterfaceHandle, + _out PUCHAR AltSettingNumber); + +typedef BOOL KUSB_API KUSB_QueryPipe ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR AltSettingNumber, + _in UCHAR PipeIndex, + _out PWINUSB_PIPE_INFORMATION PipeInformation); + +typedef BOOL KUSB_API KUSB_SetPipePolicy ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID, + _in UINT PolicyType, + _in UINT ValueLength, + _in PVOID Value); + +typedef BOOL KUSB_API KUSB_GetPipePolicy ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID, + _in UINT PolicyType, + _ref PUINT ValueLength, + _out PVOID Value); + +typedef BOOL KUSB_API KUSB_ReadPipe ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID, + _out PUCHAR Buffer, + _in UINT BufferLength, + _outopt PUINT LengthTransferred, + _inopt LPOVERLAPPED Overlapped); + +typedef BOOL KUSB_API KUSB_WritePipe ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID, + _in PUCHAR Buffer, + _in UINT BufferLength, + _outopt PUINT LengthTransferred, + _inopt LPOVERLAPPED Overlapped); + +typedef BOOL KUSB_API KUSB_ResetPipe ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID); + +typedef BOOL KUSB_API KUSB_AbortPipe ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID); + +typedef BOOL KUSB_API KUSB_FlushPipe ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID); + +typedef BOOL KUSB_API KUSB_IsoReadPipe ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID, + _out PUCHAR Buffer, + _in UINT BufferLength, + _in LPOVERLAPPED Overlapped, + _refopt PKISO_CONTEXT IsoContext); + +typedef BOOL KUSB_API KUSB_IsoWritePipe ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID, + _in PUCHAR Buffer, + _in UINT BufferLength, + _in LPOVERLAPPED Overlapped, + _refopt PKISO_CONTEXT IsoContext); + +typedef BOOL KUSB_API KUSB_GetCurrentFrameNumber ( + _in KUSB_HANDLE InterfaceHandle, + _out PUINT FrameNumber); + +typedef BOOL KUSB_API KUSB_GetOverlappedResult ( + _in KUSB_HANDLE InterfaceHandle, + _in LPOVERLAPPED Overlapped, + _out PUINT lpNumberOfBytesTransferred, + _in BOOL bWait); + +typedef BOOL KUSB_API KUSB_GetProperty ( + _in KUSB_HANDLE InterfaceHandle, + _in KUSB_PROPERTY PropertyType, + _ref PUINT PropertySize, + _out PVOID Value); + + + +//! USB core driver API information structure. +/*! +* This structure is part of \ref KUSB_DRIVER_API and contains +* driver and user specific information. +* +*/ +typedef struct _KUSB_DRIVER_API_INFO +{ + //! \readonly Driver id of the driver api. + INT DriverID; + + //! \readonly Number of valid functions contained in the driver API. + INT FunctionCount; + +} KUSB_DRIVER_API_INFO; + +//! Driver API function set structure. +/* +* Contains the driver specific USB core function pointer set. +* +* \note +* This structure has a fixed 512 byte structure size. +*/ +typedef struct _KUSB_DRIVER_API +{ + //! Driver API information. + KUSB_DRIVER_API_INFO Info; + + /*! \fn BOOL KUSB_API Init (_out KUSB_HANDLE* InterfaceHandle, _in KLST_DEVINFO_HANDLE DevInfo) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_Init + */ + KUSB_Init* Init; + + /*! \fn BOOL KUSB_API Free (_in KUSB_HANDLE InterfaceHandle) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_Free + */ + KUSB_Free* Free; + + /*! \fn BOOL KUSB_API ClaimInterface (_in KUSB_HANDLE InterfaceHandle, _in UCHAR NumberOrIndex, _in BOOL IsIndex) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_ClaimInterface + */ + KUSB_ClaimInterface* ClaimInterface; + + /*! \fn BOOL KUSB_API ReleaseInterface (_in KUSB_HANDLE InterfaceHandle, _in UCHAR NumberOrIndex, _in BOOL IsIndex) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_ReleaseInterface + */ + KUSB_ReleaseInterface* ReleaseInterface; + + /*! \fn BOOL KUSB_API SetAltInterface (_in KUSB_HANDLE InterfaceHandle, _in UCHAR NumberOrIndex, _in BOOL IsIndex, _in UCHAR AltSettingNumber) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_SetAltInterface + */ + KUSB_SetAltInterface* SetAltInterface; + + /*! \fn BOOL KUSB_API GetAltInterface (_in KUSB_HANDLE InterfaceHandle, _in UCHAR NumberOrIndex, _in BOOL IsIndex, _out PUCHAR AltSettingNumber) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_GetAltInterface + */ + KUSB_GetAltInterface* GetAltInterface; + + /*! \fn BOOL KUSB_API GetDescriptor (_in KUSB_HANDLE InterfaceHandle, _in UCHAR DescriptorType, _in UCHAR Index, _in USHORT LanguageID, _out PUCHAR Buffer, _in UINT BufferLength, _outopt PUINT LengthTransferred) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_GetDescriptor + */ + KUSB_GetDescriptor* GetDescriptor; + + /*! \fn BOOL KUSB_API ControlTransfer (_in KUSB_HANDLE InterfaceHandle, _in WINUSB_SETUP_PACKET SetupPacket, _refopt PUCHAR Buffer, _in UINT BufferLength, _outopt PUINT LengthTransferred, _inopt LPOVERLAPPED Overlapped) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_ControlTransfer + */ + KUSB_ControlTransfer* ControlTransfer; + + /*! \fn BOOL KUSB_API SetPowerPolicy (_in KUSB_HANDLE InterfaceHandle, _in UINT PolicyType, _in UINT ValueLength, _in PVOID Value) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_SetPowerPolicy + */ + KUSB_SetPowerPolicy* SetPowerPolicy; + + /*! \fn BOOL KUSB_API GetPowerPolicy (_in KUSB_HANDLE InterfaceHandle, _in UINT PolicyType, _ref PUINT ValueLength, _out PVOID Value) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_GetPowerPolicy + */ + KUSB_GetPowerPolicy* GetPowerPolicy; + + /*! \fn BOOL KUSB_API SetConfiguration (_in KUSB_HANDLE InterfaceHandle, _in UCHAR ConfigurationNumber) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_SetConfiguration + */ + KUSB_SetConfiguration* SetConfiguration; + + /*! \fn BOOL KUSB_API GetConfiguration (_in KUSB_HANDLE InterfaceHandle, _out PUCHAR ConfigurationNumber) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_GetConfiguration + */ + KUSB_GetConfiguration* GetConfiguration; + + /*! \fn BOOL KUSB_API ResetDevice (_in KUSB_HANDLE InterfaceHandle) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_ResetDevice + */ + KUSB_ResetDevice* ResetDevice; + + /*! \fn BOOL KUSB_API Initialize (_in HANDLE DeviceHandle, _out KUSB_HANDLE* InterfaceHandle) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_Initialize + */ + KUSB_Initialize* Initialize; + + /*! \fn BOOL KUSB_API SelectInterface (_in KUSB_HANDLE InterfaceHandle, _in UCHAR NumberOrIndex, _in BOOL IsIndex) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_SelectInterface + */ + KUSB_SelectInterface* SelectInterface; + + /*! \fn BOOL KUSB_API GetAssociatedInterface (_in KUSB_HANDLE InterfaceHandle, _in UCHAR AssociatedInterfaceIndex, _out KUSB_HANDLE* AssociatedInterfaceHandle) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_GetAssociatedInterface + */ + KUSB_GetAssociatedInterface* GetAssociatedInterface; + + /*! \fn BOOL KUSB_API Clone (_in KUSB_HANDLE InterfaceHandle, _out KUSB_HANDLE* DstInterfaceHandle) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_Clone + */ + KUSB_Clone* Clone; + + /*! \fn BOOL KUSB_API QueryInterfaceSettings (_in KUSB_HANDLE InterfaceHandle, _in UCHAR AltSettingIndex, _out PUSB_INTERFACE_DESCRIPTOR UsbAltInterfaceDescriptor) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_QueryInterfaceSettings + */ + KUSB_QueryInterfaceSettings* QueryInterfaceSettings; + + /*! \fn BOOL KUSB_API QueryDeviceInformation (_in KUSB_HANDLE InterfaceHandle, _in UINT InformationType, _ref PUINT BufferLength, _ref PVOID Buffer) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_QueryDeviceInformation + */ + KUSB_QueryDeviceInformation* QueryDeviceInformation; + + /*! \fn BOOL KUSB_API SetCurrentAlternateSetting (_in KUSB_HANDLE InterfaceHandle, _in UCHAR AltSettingNumber) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_SetCurrentAlternateSetting + */ + KUSB_SetCurrentAlternateSetting* SetCurrentAlternateSetting; + + /*! \fn BOOL KUSB_API GetCurrentAlternateSetting (_in KUSB_HANDLE InterfaceHandle, _out PUCHAR AltSettingNumber) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_GetCurrentAlternateSetting + */ + KUSB_GetCurrentAlternateSetting* GetCurrentAlternateSetting; + + /*! \fn BOOL KUSB_API QueryPipe (_in KUSB_HANDLE InterfaceHandle, _in UCHAR AltSettingNumber, _in UCHAR PipeIndex, _out PWINUSB_PIPE_INFORMATION PipeInformation) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_QueryPipe + */ + KUSB_QueryPipe* QueryPipe; + + /*! \fn BOOL KUSB_API SetPipePolicy (_in KUSB_HANDLE InterfaceHandle, _in UCHAR PipeID, _in UINT PolicyType, _in UINT ValueLength, _in PVOID Value) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_SetPipePolicy + */ + KUSB_SetPipePolicy* SetPipePolicy; + + /*! \fn BOOL KUSB_API GetPipePolicy (_in KUSB_HANDLE InterfaceHandle, _in UCHAR PipeID, _in UINT PolicyType, _ref PUINT ValueLength, _out PVOID Value) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_GetPipePolicy + */ + KUSB_GetPipePolicy* GetPipePolicy; + + /*! \fn BOOL KUSB_API ReadPipe (_in KUSB_HANDLE InterfaceHandle, _in UCHAR PipeID, _out PUCHAR Buffer, _in UINT BufferLength, _outopt PUINT LengthTransferred, _inopt LPOVERLAPPED Overlapped) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_ReadPipe + */ + KUSB_ReadPipe* ReadPipe; + + /*! \fn BOOL KUSB_API WritePipe (_in KUSB_HANDLE InterfaceHandle, _in UCHAR PipeID, _in PUCHAR Buffer, _in UINT BufferLength, _outopt PUINT LengthTransferred, _inopt LPOVERLAPPED Overlapped) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_WritePipe + */ + KUSB_WritePipe* WritePipe; + + /*! \fn BOOL KUSB_API ResetPipe (_in KUSB_HANDLE InterfaceHandle, _in UCHAR PipeID) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_ResetPipe + */ + KUSB_ResetPipe* ResetPipe; + + /*! \fn BOOL KUSB_API AbortPipe (_in KUSB_HANDLE InterfaceHandle, _in UCHAR PipeID) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_AbortPipe + */ + KUSB_AbortPipe* AbortPipe; + + /*! \fn BOOL KUSB_API FlushPipe (_in KUSB_HANDLE InterfaceHandle, _in UCHAR PipeID) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_FlushPipe + */ + KUSB_FlushPipe* FlushPipe; + + /*! \fn BOOL KUSB_API IsoReadPipe (_in KUSB_HANDLE InterfaceHandle, _in UCHAR PipeID, _out PUCHAR Buffer, _in UINT BufferLength, _in LPOVERLAPPED Overlapped, _refopt PKISO_CONTEXT IsoContext) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_IsoReadPipe + */ + KUSB_IsoReadPipe* IsoReadPipe; + + /*! \fn BOOL KUSB_API IsoWritePipe (_in KUSB_HANDLE InterfaceHandle, _in UCHAR PipeID, _in PUCHAR Buffer, _in UINT BufferLength, _in LPOVERLAPPED Overlapped, _refopt PKISO_CONTEXT IsoContext) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_IsoWritePipe + */ + KUSB_IsoWritePipe* IsoWritePipe; + + /*! \fn BOOL KUSB_API GetCurrentFrameNumber (_in KUSB_HANDLE InterfaceHandle, _out PUINT FrameNumber) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_GetCurrentFrameNumber + */ + KUSB_GetCurrentFrameNumber* GetCurrentFrameNumber; + + /*! \fn BOOL KUSB_API GetOverlappedResult (_in KUSB_HANDLE InterfaceHandle, _in LPOVERLAPPED Overlapped, _out PUINT lpNumberOfBytesTransferred, _in BOOL bWait) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_GetOverlappedResult + */ + KUSB_GetOverlappedResult* GetOverlappedResult; + + /*! \fn BOOL KUSB_API GetProperty (_in KUSB_HANDLE InterfaceHandle, _in KUSB_PROPERTY PropertyType, _ref PUINT PropertySize, _out PVOID Value) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_GetProperty + */ + KUSB_GetProperty* GetProperty; + + //! fixed structure padding. + UCHAR z_F_i_x_e_d[512 - sizeof(KUSB_DRIVER_API_INFO) - sizeof(UINT_PTR) * KUSB_FNID_COUNT]; + +} KUSB_DRIVER_API; +typedef KUSB_DRIVER_API* PKUSB_DRIVER_API; +C_ASSERT(sizeof(KUSB_DRIVER_API) == 512); +/**@}*/ +#endif + +#ifndef _LIBUSBK_HOTK_TYPES + +/*! \addtogroup hotk +* @{ +*/ + +//! Hot plug config flags. +typedef enum _KHOT_FLAG +{ + //! No flags (or 0) + KHOT_FLAG_NONE, + + //! Notify all devices which match upon a succuessful call to \ref HotK_Init. + KHOT_FLAG_PLUG_ALL_ON_INIT = 0x0001, + + //! Allow other \ref KHOT_HANDLE instances to consume this match. + KHOT_FLAG_PASS_DUPE_INSTANCE = 0x0002, + + //! If a \c UserHwnd is specified, use \c PostMessage instead of \c SendMessage. + KHOT_FLAG_POST_USER_MESSAGE = 0x0004, +} KHOT_FLAG; + +//! Hot plug event function definition. +typedef VOID KUSB_API KHOT_PLUG_CB( + _in KHOT_HANDLE HotHandle, + _in KLST_DEVINFO_HANDLE DeviceInfo, + _in KLST_SYNC_FLAG PlugType); + +//! Power broadcast event function definition. +typedef VOID KUSB_API KHOT_POWER_BROADCAST_CB( + _in KHOT_HANDLE HotHandle, + _in KLST_DEVINFO_HANDLE DeviceInfo, + _in UINT PbtEvent); + +//! Hot plug parameter structure. +/*! +* \fixedstruct{2048} +* +* This structure is intially passed as a parameter to \ref HotK_Init. +* +*/ +typedef struct _KHOT_PARAMS +{ + //! Hot plug event window handle to send/post messages when notifications occur. + HWND UserHwnd; + + //! WM_USER message start offset used when sending/posting messages, See details. + /*! + * \attention The \ref hotk will send UserMessage+1 for arrival notifications and UserMessage+0 for removal notifications. + * + * - WPARAM = \ref KHOT_HANDLE + * - LPARAM = \ref KLST_DEVINFO_HANDLE + */ + UINT UserMessage; + + //! Additional init/config parameters + KHOT_FLAG Flags; + + //! File pattern matches for restricting notifcations to a single/group or all supported usb devices. + KLST_PATTERN_MATCH PatternMatch; + + //! Hot plug event callback function invoked when notifications occur. + /*! \fn VOID KUSB_API OnHotPlug (_in KHOT_HANDLE HotHandle, _in KLST_DEVINFO_HANDLE DeviceInfo, _in KLST_SYNC_FLAG PlugType) + * \memberof KHOT_PARAMS + */ + KHOT_PLUG_CB* OnHotPlug; + + //! \b WM_POWERBROADCAST event callback function invoked when a power-management event has occurred. + /*! \fn VOID KUSB_API OnPowerBroadcast (_in KHOT_HANDLE HotHandle, _in KLST_DEVINFO_HANDLE DeviceInfo, _in UINT PbtEvent) + * \memberof KHOT_PARAMS + */ + KHOT_POWER_BROADCAST_CB* OnPowerBroadcast; + + //! fixed structure padding. + UCHAR z_F_i_x_e_d[2048 - sizeof(KLST_PATTERN_MATCH) - sizeof(UINT_PTR) * 3 - sizeof(UINT) * 2]; + +} KHOT_PARAMS; +C_ASSERT(sizeof(KHOT_PARAMS) == 2048); + +//! Pointer to a \ref KHOT_PARAMS structure. +typedef KHOT_PARAMS* PKHOT_PARAMS; + +/**@}*/ + +#endif + +#ifndef _LIBUSBK_OVLK_TYPES + +/*! \addtogroup ovlk +* @{ +*/ + +//! \c WaitFlags used by \ref OvlK_Wait. +/*! +* +*/ +typedef enum _KOVL_WAIT_FLAG +{ + //! Do not perform any additional actions upon exiting \ref OvlK_Wait. + KOVL_WAIT_FLAG_NONE = 0L, + + //! If the i/o operation completes successfully, release the OverlappedK back to it's pool. + KOVL_WAIT_FLAG_RELEASE_ON_SUCCESS = 0x0001, + + //! If the i/o operation fails, release the OverlappedK back to it's pool. + KOVL_WAIT_FLAG_RELEASE_ON_FAIL = 0x0002, + + //! If the i/o operation fails or completes successfully, release the OverlappedK back to its pool. Perform no actions if it times-out. + KOVL_WAIT_FLAG_RELEASE_ON_SUCCESS_FAIL = 0x0003, + + //! If the i/o operation times-out cancel it, but do not release the OverlappedK back to its pool. + KOVL_WAIT_FLAG_CANCEL_ON_TIMEOUT = 0x0004, + + //! If the i/o operation times-out, cancel it and release the OverlappedK back to its pool. + KOVL_WAIT_FLAG_RELEASE_ON_TIMEOUT = 0x000C, + + //! Always release the OverlappedK back to its pool. If the operation timed-out, cancel it before releasing back to its pool. + KOVL_WAIT_FLAG_RELEASE_ALWAYS = 0x000F, + + //! Uses alterable wait functions. See http://msdn.microsoft.com/en-us/library/windows/desktop/ms687036%28v=vs.85%29.aspx + KOVL_WAIT_FLAG_ALERTABLE = 0x0010, + +} KOVL_WAIT_FLAG; + +//! \c Overlapped pool config flags. +/*! +* \attention Currently not used. +*/ +typedef enum _KOVL_POOL_FLAG +{ + KOVL_POOL_FLAG_NONE = 0L, +} KOVL_POOL_FLAG; + +/**@}*/ + +#endif + +#ifndef _LIBUSBK_STMK_TYPES + +/*! \addtogroup stmk +* @{ +*/ +//! Stream config flags. +/*! +* \attention Currently not used. +*/ +typedef enum _KSTM_FLAG +{ + //! None + KSTM_FLAG_NONE = 0L, + KSTM_FLAG_NO_PARTIAL_XFERS = 0x00100000, + KSTM_FLAG_USE_TIMEOUT = 0x80000000, + KSTM_FLAG_TIMEOUT_MASK = 0x0001FFFF +} KSTM_FLAG; + +//! Stream config flags. +/*! +* \attention Currently not used. +*/ +typedef enum _KSTM_COMPLETE_RESULT +{ + //! Valid + KSTM_COMPLETE_RESULT_VALID = 0L, + //! Invalid + KSTM_COMPLETE_RESULT_INVALID, +} KSTM_COMPLETE_RESULT; + +//! Stream transfer context structure. +/*! +* This structure is passed into the stream callback functions. +* The stream transfer context list is allocated upon a successful call to \ref StmK_Init. There is one +* transfer context for each transfer. (0 to \c MaxPendingTransfers). +* +*/ +typedef struct _KSTM_XFER_CONTEXT +{ + + //! Internal stream buffer. + PUCHAR Buffer; + + //! Size of internal stream buffer. + INT BufferSize; + + //! Number of bytes to write or number of bytes read. + INT TransferLength; + + //! User defined state. + PVOID UserState; + +} KSTM_XFER_CONTEXT; +//! Pointer to a \ref KSTM_XFER_CONTEXT structure. +typedef KSTM_XFER_CONTEXT* PKSTM_XFER_CONTEXT; + +//! Stream information structure. +/*! +* This structure is passed into the stream callback functions. +* The stream context is allocated upon a successful call to \ref StmK_Init. There is only one +* stream context per stream. +* +*/ +typedef struct _KSTM_INFO +{ + //! \ref KUSB_HANDLE this stream uses. + KUSB_HANDLE UsbHandle; + + //! This parameter corresponds to the bEndpointAddress field in the endpoint descriptor. + UCHAR PipeID; + + //! Maximum transfer read/write request allowed pending. + INT MaxPendingTransfers; + + //! Maximum transfer sage size. + INT MaxTransferSize; + + //! Maximum number of I/O request allowed pending. + INT MaxPendingIO; + + //! Populated with the endpoint descriptor for the specified \c PipeID. + USB_ENDPOINT_DESCRIPTOR EndpointDescriptor; + + //! Populated with the driver api for the specified \c UsbHandle. + KUSB_DRIVER_API DriverAPI; + + //! Populated with the device file handle for the specified \c UsbHandle. + HANDLE DeviceHandle; + + //! Stream handle. + KSTM_HANDLE StreamHandle; + + //! Stream info user defined state. + PVOID UserState; + +} KSTM_INFO; +//! Pointer to a \ref KSTM_INFO structure. +typedef KSTM_INFO* PKSTM_INFO; + +//! Function definition for an optional user-defined callback; executed when a transfer error occurs. +/*! \fn INT KUSB_API KSTM_ERROR_CB(_in PKSTM_INFO StreamInfo, _in PKSTM_XFER_CONTEXT XferContext, _in INT XferContextIndex, _in INT ErrorCode) +* \memberof KSTM_CALLBACK +*/ +typedef INT KUSB_API KSTM_ERROR_CB(_in PKSTM_INFO StreamInfo, _in PKSTM_XFER_CONTEXT XferContext, _in INT XferContextIndex, _in INT ErrorCode); + +//! Function definition for an optional user-defined callback; executed to submit a transfer. +/*! \fn INT KUSB_API KSTM_SUBMIT_CB(_in PKSTM_INFO StreamInfo, _in PKSTM_XFER_CONTEXT XferContext, _in INT XferContextIndex, _in LPOVERLAPPED Overlapped) +* \memberof KSTM_CALLBACK +*/ +typedef INT KUSB_API KSTM_SUBMIT_CB(_in PKSTM_INFO StreamInfo, _in PKSTM_XFER_CONTEXT XferContext, _in INT XferContextIndex, _in LPOVERLAPPED Overlapped); + +//! Function definition for an optional user-defined callback; executed for each transfer context when the stream is started with \ref StmK_Start. +/*! \fn INT KUSB_API KSTM_STARTED_CB(_in PKSTM_INFO StreamInfo, _in PKSTM_XFER_CONTEXT XferContext, _in INT XferContextIndex) +* \memberof KSTM_CALLBACK +*/ +typedef INT KUSB_API KSTM_STARTED_CB(_in PKSTM_INFO StreamInfo, _in PKSTM_XFER_CONTEXT XferContext, _in INT XferContextIndex); + +//! Function definition for an optional user-defined callback; executed for each transfer context when the stream is stopped with \ref StmK_Stop. +/*! \fn INT KUSB_API KSTM_STOPPED_CB(_in PKSTM_INFO StreamInfo, _in PKSTM_XFER_CONTEXT XferContext, _in INT XferContextIndex) +* \memberof KSTM_CALLBACK +*/ +typedef INT KUSB_API KSTM_STOPPED_CB(_in PKSTM_INFO StreamInfo, _in PKSTM_XFER_CONTEXT XferContext, _in INT XferContextIndex); + +//! Function definition for an optional user-defined callback; executed when a valid transfer completes. +/*! \fn INT KUSB_API KSTM_COMPLETE_CB(_in PKSTM_INFO StreamInfo, _in PKSTM_XFER_CONTEXT XferContext, _in INT XferContextIndex, _in INT ErrorCode) +* \memberof KSTM_CALLBACK +*/ +typedef INT KUSB_API KSTM_COMPLETE_CB(_in PKSTM_INFO StreamInfo, _in PKSTM_XFER_CONTEXT XferContext, _in INT XferContextIndex, _in INT ErrorCode); + +//! Function definition for an optional user-defined callback; executed immediately after a transfer completes. +/*! \fn KSTM_COMPLETE_RESULT KUSB_API KSTM_BEFORE_COMPLETE_CB(_in PKSTM_INFO StreamInfo, _in PKSTM_XFER_CONTEXT XferContext, _in INT XferContextIndex, _ref PINT ErrorCode) +* \memberof KSTM_CALLBACK +* +* This callback function allows the user to accept or reject the transfer: +* - IN (Read, DeviceToHost) endpoints. +* - KSTM_COMPLETE_RESULT_VALID +* Continue normal processing; add the transfer to the internal complete list and make it available to \ref StmK_Read. +* - KSTM_COMPLETE_RESULT_INVALID +* Ignore this transfer. +* - OUT (Write, HostToDevice) endpoints. +* - KSTM_COMPLETE_RESULT_VALID +* Continue normal processing; add the transfer to the internal complete list and make it available subsequent \ref StmK_Write requests. +* - KSTM_COMPLETE_RESULT_INVALID +* Return this transfer to the internal queued list for automatic resubmission to the device. +* +*/ +typedef KSTM_COMPLETE_RESULT KUSB_API KSTM_BEFORE_COMPLETE_CB(_in PKSTM_INFO StreamInfo, _in PKSTM_XFER_CONTEXT XferContext, _in INT XferContextIndex, _in PINT ErrorCode); + +//! Stream callback structure. +/*! +* \fixedstruct{64} +* +* These optional callback functions are executed from the streams internal thread at various stages of operation. +* +*/ +typedef struct _KSTM_CALLBACK +{ + //! Executed when a transfer error occurs. + KSTM_ERROR_CB* Error; + + //! Executed to submit a transfer. + KSTM_SUBMIT_CB* Submit; + + //! Executed when a valid transfer completes. + KSTM_COMPLETE_CB* Complete; + + //! Executed for every transfer context when the stream is started with \ref StmK_Start. + KSTM_STARTED_CB* Started; + + //! Executed for every transfer context when the stream is stopped with \ref StmK_Stop. + KSTM_STOPPED_CB* Stopped; + + //! Executed immediately after a transfer completes. + KSTM_BEFORE_COMPLETE_CB* BeforeComplete; + + //! fixed structure padding. + UCHAR z_F_i_x_e_d[64 - sizeof(UINT_PTR) * 6]; + +} KSTM_CALLBACK; +//! Pointer to a \ref KSTM_CALLBACK structure. +typedef KSTM_CALLBACK* PKSTM_CALLBACK; +C_ASSERT(sizeof(KSTM_CALLBACK) == 64); + +/**@}*/ + +#endif +/////////////////////////////////////////////////////////////////////// +// L I B U S B K PUBLIC FUNCTIONS //////////////////////////////////// +/////////////////////////////////////////////////////////////////////// + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef _LIBUSBK_LIBK_FUNCTIONS + /*! \addtogroup libk + * @{ + */ + +//! Gets the internal user context for the specified \ref KLIB_HANDLE. + /*! + * + * \param[out] Version + * Receives the libusbK library verson information. + * + * \returns NONE + */ + KUSB_EXP VOID KUSB_API LibK_GetVersion(_out PKLIB_VERSION Version); + +//! Gets the internal user context for the specified \ref KLIB_HANDLE. + /*! + * + * \param[in] Handle + * The handle containg the context to retrieve. + * + * \param[in] HandleType + * Handle type of \c Handle. + * + * \returns + * - on success, The user context value. + * - On failure, returns NULL and sets last error to \c ERROR_INVALID_HANDLE. + * + */ + KUSB_EXP KLIB_USER_CONTEXT KUSB_API LibK_GetContext( + _in KLIB_HANDLE Handle, + _in KLIB_HANDLE_TYPE HandleType); + +//! Sets internal user context for the specified \ref KLIB_HANDLE. + /*! + * + * \param[in] Handle + * The handle containg the context to set. + * + * \param[in] HandleType + * Handle type of \c Handle. + * + * \param[in] ContextValue + * Value to assign to the handle user context space. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP BOOL KUSB_API LibK_SetContext( + _in KLIB_HANDLE Handle, + _in KLIB_HANDLE_TYPE HandleType, + _in KLIB_USER_CONTEXT ContextValue); + +//! Assigns a cleanup callback function to a \ref KLIB_HANDLE. + /*! + * + * \param[in] Handle + * The handle containg the cleanup callback function to set. + * + * \param[in] HandleType + * Handle type of \c Handle. + * + * \param[in] CleanupCB + * User supplied callback function to execute when the handles internal reference count reaches 0. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP BOOL KUSB_API LibK_SetCleanupCallback( + _in KLIB_HANDLE Handle, + _in KLIB_HANDLE_TYPE HandleType, + _in KLIB_HANDLE_CLEANUP_CB* CleanupCB); + +//! Initialize a driver API set. + /*! + * + * \param[out] DriverAPI + * A driver API structure to populate. + * + * \param[in] DriverID + * The driver id of the API set to retrieve. See \ref KUSB_DRVID + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP BOOL KUSB_API LibK_LoadDriverAPI( + _out PKUSB_DRIVER_API DriverAPI, + _in INT DriverID); + +//! Copies the driver API set out of a \ref KUSB_HANDLE + /*! + * + * \param[out] DriverAPI + * A driver API structure to populate. + * + * \param[in] UsbHandle + * Handle containing the desired driver API. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP BOOL KUSB_API LibK_CopyDriverAPI( + _out PKUSB_DRIVER_API DriverAPI, + _in KUSB_HANDLE UsbHandle); + +//! Initialize a driver API function. + /*! + * \param[out] ProcAddress + * Reference to a function pointer that will receive the API function pointer. + * + * \param[in] DriverID + * The driver id of the API to use. See \ref KUSB_DRVID + * + * \param[in] FunctionID + * The function id. See \ref KUSB_FNID + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP BOOL KUSB_API LibK_GetProcAddress( + _out KPROC* ProcAddress, + _in INT DriverID, + _in INT FunctionID); + +//! Sets the default user context for the specified \ref KLIB_HANDLE_TYPE. + /*! + * + * \param[in] HandleType + * The handle type which will be assigned the default ContextValue. + * + * \param[in] ContextValue + * Value assigned to the default user context for the specified \ref KLIB_HANDLE_TYPE. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP BOOL KUSB_API LibK_SetDefaultContext( + _in KLIB_HANDLE_TYPE HandleType, + _in KLIB_USER_CONTEXT ContextValue); + +//! Gets the default user context for the specified \ref KLIB_HANDLE_TYPE. + /*! + * + * \param[in] HandleType + * Handle type used to retrieve the default user context. + * + * \returns + * - on success, The default user context value. + * - On failure, returns NULL and sets last error to \c ERROR_INVALID_HANDLE. + * + */ + KUSB_EXP KLIB_USER_CONTEXT KUSB_API LibK_GetDefaultContext( + _in KLIB_HANDLE_TYPE HandleType); + +//! Initializes the global libusbK process context. + /*! + * + * If this function is not called at startup, libusbK initializes the global libusbK process context automatically. + * + * \param[in] Heap + * A handle to the memory heap libusbK will use for dynamic memory allocation. + * \note The process context itself is always allocated from the proccess heap. + * \note If \b Heap is \b NULL, dynamic memory is allocated from the proccess heap. + * + * \param[in] Reserved + * Reserved for future use. Must set to \b NULL. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP BOOL KUSB_API LibK_Context_Init( + _inopt HANDLE Heap, + _in PVOID Reserved); + +//! Frees the global libusbK process context. + /*! + * + * If this function is not called on exit, libusbK frees the global libusbK process context automatically when it terminates. + * + * \returns NONE. + * + */ + KUSB_EXP VOID KUSB_API LibK_Context_Free(VOID); + + + /**@}*/ +#endif + +#ifndef _LIBUSBK_USBK_FUNCTIONS + /*! \addtogroup usbk + * @{ + */ + +//! Creates/opens a libusbK interface handle from the device list. This is a preferred method. + /*! + * + * \param[out] InterfaceHandle + * Receives a handle configured to the first (default) interface on the device. This handle is required by + * other libusbK routines that perform operations on the default interface. The handle is opaque. To release + * this handle, call the \ref UsbK_Free function. + * + * \param[in] DevInfo + * The device list element to open. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * \c UsbK_Init performs the same tasks as \ref UsbK_Initialize with the following exceptions: + * - Uses a \ref KLST_DEVINFO instead of a file handle created with the Windows CreateFile() API function. + * - File handles are managed internally and are closed when the last \ref KUSB_HANDLE is closed with + * \ref UsbK_Free. To obtain the internal file device handle, See \ref UsbK_GetProperty. + * + * \note + * A \c KUSB_HANDLE is required by other library routines that perform operations on a device. Once + * initialized, it can access all interfaces/endpoints of a device. An initialized handle can be cloned with + * \ref UsbK_Clone or \ref UsbK_GetAssociatedInterface. A Cloned handle will behave just as the orignal + * except in will maintain it's own \b selected interface setting. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_Init ( + _out KUSB_HANDLE* InterfaceHandle, + _in KLST_DEVINFO_HANDLE DevInfo); + +//! Frees a libusbK interface handle. + /*! + * + * \param[in] InterfaceHandle + * Handle to an interface on the device. This handle must be created by a previous call to \ref UsbK_Init, + * \ref UsbK_Initialize, \ref UsbK_GetAssociatedInterface, or \ref UsbK_Clone. + * + * \returns TRUE. + * + * The \ref UsbK_Free function releases resources alocated to the InterfaceHandle. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_Free ( + _in KUSB_HANDLE InterfaceHandle); + +//! Claims the specified interface by number or index. + /*! + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[in] NumberOrIndex + * Interfaces can be claimed or released by a interface index or \c bInterfaceNumber. + * - Interface indexes always start from 0 and continue sequentially for all interfaces of the device. + * - An interface number always represents the actual \ref USB_INTERFACE_DESCRIPTOR::bInterfaceNumber. + * Interface numbers are not guaranteed to be zero based or sequential. + * + * \param[in] IsIndex + * If TRUE, \c NumberOrIndex represents an interface index.\n if FALSE \c NumberOrIndex represents a + * \c bInterfaceNumber. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * Claiming an interface allows applications a way to prevent other applications or multiple instances of the + * same application from using an interface at the same time. + * + * When an interface is claimed with \ref UsbK_ClaimInterface it performs the following actions: + * - Checks if the interface exists. If it does not, returns FALSE and sets last error to + * ERROR_NO_MORE_ITEMS. + * - The default (or current) interface for the device is changed to \c NumberOrIndex. + * - libusb0.sys and libusbK.sys: + * - A request to claim the interface is sent to the driver. If the interface is not claimed or already + * claimed by the application the request succeeds. If the interface is claimed by another application, + * \ref UsbK_ClaimInterface returns FALSE and sets last error to \c ERROR_BUSY. In this case the The + * default (or current) interface for the device is \b still changed to \c NumberOrIndex. + * - WinUSB.sys: All WinUSB device interfaces are claimed when the device is opened. This function performs + * identically to \ref UsbK_SelectInterface + * + */ + KUSB_EXP BOOL KUSB_API UsbK_ClaimInterface ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR NumberOrIndex, + _in BOOL IsIndex); + +//! Releases the specified interface by number or index. + /*! + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[in] NumberOrIndex + * Interfaces can be claimed or released by a interface index or \c bInterfaceNumber. + * - Interface indexes always start from 0 and continue sequentially for all interfaces of the device. + * - An interface number always represents the actual \ref USB_INTERFACE_DESCRIPTOR::bInterfaceNumber. + * Interface numbers are not guaranteed to be zero based or sequential. + * + * \param[in] IsIndex + * If TRUE, \c NumberOrIndex represents an interface index.\n if FALSE \c NumberOrIndex represents a + * \c bInterfaceNumber. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * When an interface is release with \ref UsbK_ReleaseInterface it performs the following actions: + * - Checks if the interface exists. If it does not, returns FALSE and sets last error to + * ERROR_NO_MORE_ITEMS. + * - The default (or current) interface for the device is changed to the previously claimed interface. + * - libusb0.sys and libusbK.sys: + * - A request to release the interface is sent to the driver. If the interface is not claimed by a + * different application the request succeeds. If the interface is claimed by another application, + * \ref UsbK_ReleaseInterface returns FALSE and sets last error to \c ERROR_BUSY. In this case, the + * default/current interface for the device is \b still changed to the previously claimed interface. + * - WinUSB.sys: No other action needed, returns TRUE. + * + * \note + * When an interface is released, it is moved to the bottom if an interface stack making a previously claimed + * interface the current. This will continue to occur regardless of whether the interface is claimed. For + * this reason, \ref UsbK_ReleaseInterface can be used as a means to change the current/default interface of + * an \c InterfaceHandle without claiming the interface. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_ReleaseInterface ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR NumberOrIndex, + _in BOOL IsIndex); + +//! Sets the alternate setting of the specified interface. + /*! + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[in] NumberOrIndex + * Interfaces can be specified by a interface index or \c bInterfaceNumber. + * - Interface indexes always start from 0 and continue sequentially for all interfaces of the device. + * - An interface number always represents the actual \ref USB_INTERFACE_DESCRIPTOR::bInterfaceNumber. + * Interface numbers are not guaranteed to be zero based or sequential. + * + * \param[in] IsIndex + * If TRUE, \c NumberOrIndex represents an interface index.\n if FALSE \c NumberOrIndex represents a + * \c bInterfaceNumber. + * + * \param[in] AltSettingNumber + * The bAlternateSetting to activate. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * \ref UsbK_SetAltInterface performs the same task as \ref UsbK_SetCurrentAlternateSetting except it + * provides the option of specifying which interfaces alternate setting to activate. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_SetAltInterface ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR NumberOrIndex, + _in BOOL IsIndex, + _in UCHAR AltSettingNumber); + +//! Gets the alternate setting for the specified interface. + /*! + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[in] NumberOrIndex + * Interfaces can be specified by a interface index or \c bInterfaceNumber. + * - Interface indexes always start from 0 and continue sequentially for all interfaces of the device. + * - An interface number always represents the actual \ref USB_INTERFACE_DESCRIPTOR::bInterfaceNumber. + * Interface numbers are not guaranteed to be zero based or sequential. + * + * \param[in] IsIndex + * If TRUE, \c NumberOrIndex represents an interface index.\n if FALSE \c NumberOrIndex represents a + * \c bInterfaceNumber. + * + * \param[out] AltSettingNumber + * On success, returns the active bAlternateSetting. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * \ref UsbK_GetAltInterface performs the same task as \ref UsbK_GetCurrentAlternateSetting except it + * provides the option of specifying which interfaces alternate setting is to be retrieved. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_GetAltInterface ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR NumberOrIndex, + _in BOOL IsIndex, + _out PUCHAR AltSettingNumber); + +//! Gets the requested descriptor. This is a synchronous operation. + /*! + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[in] DescriptorType + * A value that specifies the type of descriptor to return. This parameter corresponds to the bDescriptorType + * field of a standard device descriptor, whose values are described in the Universal Serial Bus + * specification. + * + * \param[in] Index + * The descriptor index. For an explanation of the descriptor index, see the Universal Serial Bus + * specification (www.usb.org). + * + * \param[in] LanguageID + * A value that specifies the language identifier, if the requested descriptor is a string descriptor. + * + * \param[out] Buffer + * A caller-allocated buffer that receives the requested descriptor. + * + * \param[in] BufferLength + * The length, in bytes, of Buffer. + * + * \param[out] LengthTransferred + * The number of bytes that were copied into Buffer. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * If the device descriptor or active config descriptor is requested, \ref UsbK_GetDescriptor retrieves + * cached data and this becomes a non-blocking, non I/O request. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_GetDescriptor ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR DescriptorType, + _in UCHAR Index, + _in USHORT LanguageID, + _out PUCHAR Buffer, + _in UINT BufferLength, + _outopt PUINT LengthTransferred); + +//! Transmits control data over a default control endpoint. + /*! + * + * \param[in] InterfaceHandle + * A valid libusbK interface handle returned by: + * - \ref UsbK_Init + * - \ref UsbK_Initialize + * - \ref UsbK_GetAssociatedInterface + * - \ref UsbK_Clone + * + * \param[in] SetupPacket + * The 8-byte setup packet of type WINUSB_SETUP_PACKET. + * + * \param[in,out] Buffer + * A caller-allocated buffer that contains the data to transfer. + * + * \param[in] BufferLength + * The number of bytes to transfer, not including the setup packet. This number must be less than or equal to + * the size, in bytes, of Buffer. + * + * \param[out] LengthTransferred + * A pointer to a UINT variable that receives the actual number of transferred bytes. If the application + * does not expect any data to be transferred during the data phase (BufferLength is zero), LengthTransferred + * can be NULL. + * + * \param[in] Overlapped + * An optional pointer to an OVERLAPPED structure, which is used for asynchronous operations. If this + * parameter is specified, \ref UsbK_ControlTransfer immediately returns, and the event is signaled when the + * operation is complete. If Overlapped is not supplied, the \ref UsbK_ControlTransfer function transfers + * data synchronously. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. If an + * \c Overlapped member is supplied and the operation succeeds this function returns FALSE and sets last + * error to ERROR_IO_PENDING. + * + * A \ref UsbK_ControlTransfer is never cached. These requests always go directly to the usb device. + * + * \attention + * This function should not be used for operations supported by the library.\n e.g. + * \ref UsbK_SetConfiguration, \ref UsbK_SetAltInterface, etc.. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_ControlTransfer ( + _in KUSB_HANDLE InterfaceHandle, + _in WINUSB_SETUP_PACKET SetupPacket, + _refopt PUCHAR Buffer, + _in UINT BufferLength, + _outopt PUINT LengthTransferred, + _inopt LPOVERLAPPED Overlapped); + +//! Sets the power policy for a device. + /*! + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[in] PolicyType + * A value that specifies the power policy to set. The following table describes symbolic constants that are + * defined in \ref lusbk_shared.h. + * + * - AUTO_SUSPEND (0x81) + * - Specifies the auto-suspend policy type; the power policy parameter must be specified by the caller in + * the Value parameter. + * - For auto-suspend, the Value parameter must point to a UCHAR variable. + * - If Value is TRUE (nonzero), the USB stack suspends the device if the device is idle. A device is idle + * if there are no transfers pending, or if the only pending transfers are IN transfers to interrupt or + * bulk endpoints. + * - The default value is determined by the value set in the DefaultIdleState registry setting. By default, + * this value is TRUE. + * + * - SUSPEND_DELAY (0x83) + * - Specifies the suspend-delay policy type; the power policy parameter must be specified by the caller in + * the Value parameter. + * - For suspend-delay, Value must point to a UINT variable. + * - Value specifies the minimum amount of time, in milliseconds, that the driver must wait post transfer + * before it can suspend the device. + * - The default value is determined by the value set in the DefaultIdleTimeout registry setting. By + * default, this value is five seconds. + * + * \param[in] ValueLength + * The size, in bytes, of the buffer at Value. + * + * \param[in] Value + * The new value for the power policy parameter. Data type and value for Value depends on the type of power + * policy passed in PolicyType. For more information, see PolicyType. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * The following list summarizes the effects of changes to power management states: + * - All pipe handles, interface handles, locks, and alternate settings are preserved across power management + * events. + * - Any transfers that are in progress are suspended when a device transfers to a low power state, and they + * are resumed when the device is restored to a working state. + * - The device and system must be in a working state before the client can restore a device-specific + * configuration. Clients can determine whether the device and system are in a working state from the + * WM_POWERBROADCAST message. + * - The client can indicate that an interface is idle by calling \ref UsbK_SetPowerPolicy. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_SetPowerPolicy ( + _in KUSB_HANDLE InterfaceHandle, + _in UINT PolicyType, + _in UINT ValueLength, + _in PVOID Value); + +//! Gets the power policy for a device. + /*! + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[in] PolicyType + * A value that specifies the power policy parameter to retrieve in Value. The following table describes + * symbolic constants that are defined in \ref lusbk_shared.h. + * + * - AUTO_SUSPEND (0x81) + * - If the caller specifies a power policy of AUTO_SUSPEND, \ref UsbK_GetPowerPolicy returns the value of + * the auto suspend policy parameter in the Value parameter. + * - If Value is TRUE (that is, nonzero), the USB stack suspends the device when no transfers are pending + * or the only transfers pending are IN transfers on an interrupt or bulk endpoint. + * - The value of the DefaultIdleState registry value determines the default value of the auto suspend + * policy parameter. + * - The Value parameter must point to a UCHAR variable. + * + * - SUSPEND_DELAY (0x83) + * - If the caller specifies a power policy of SUSPEND_DELAY, \ref UsbK_GetPowerPolicy returns the value of + * the suspend delay policy parameter in Value. + * - The suspend delay policy parameter specifies the minimum amount of time, in milliseconds, that the + * driver must wait after any transfer before it can suspend the device. + * - Value must point to a UINT variable. + * + * \param[in,out] ValueLength + * A pointer to the size of the buffer that Value. On output, ValueLength receives the size of the data that + * was copied into the Value buffer. + * + * \param[out] Value + * A buffer that receives the specified power policy parameter. For more information, see PolicyType. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_GetPowerPolicy ( + _in KUSB_HANDLE InterfaceHandle, + _in UINT PolicyType, + _ref PUINT ValueLength, + _out PVOID Value); + +//! Sets the device configuration number. + /*! + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[in] ConfigurationNumber + * The configuration number to activate. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * \ref UsbK_SetConfiguration is only supported with libusb0.sys. If the driver in not libusb0.sys, this + * function performs the following emulation actions: + * - If the requested configuration number is the current configuration number, returns TRUE. + * - If the requested configuration number is one other than the current configuration number, returns FALSE + * and set last error to \c ERROR_NO_MORE_ITEMS. + * + * This function will fail if there are pending I/O operations or there are other libusbK interface handles + * referencing the device. \sa UsbK_Free + * + */ + KUSB_EXP BOOL KUSB_API UsbK_SetConfiguration ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR ConfigurationNumber); + +//! Gets the device current configuration number. + /*! + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[out] ConfigurationNumber + * On success, receives the active configuration number. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_GetConfiguration ( + _in KUSB_HANDLE InterfaceHandle, + _out PUCHAR ConfigurationNumber); + +//! Resets the usb device of the specified interface handle. (port cycle). + /*! + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_ResetDevice ( + _in KUSB_HANDLE InterfaceHandle); + +//! Creates a libusbK handle for the device specified by a file handle. + /*! + * + * \attention + * This function is supported for WinUSB API compatibility only and is not intended for new development. + * libusbK library users should use \ref UsbK_Init instead. (regardless of the driver they've selected) + * + * \param[in] DeviceHandle + * The handle to the device that CreateFile returned. libusbK uses overlapped I/O, so FILE_FLAG_OVERLAPPED + * must be specified in the dwFlagsAndAttributes parameter of CreateFile call for DeviceHandle to have the + * characteristics necessary for this to function properly. + * + * \param[out] InterfaceHandle + * Receives a handle configured to the first (default) interface on the device. This handle is required by + * other libusbK routines that perform operations on the default interface. The handle is opaque. To release + * this handle, call the \ref UsbK_Free function. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * When \ref UsbK_Initialize is called, the policy settings of the interface are reset to the default values. + * + * The \ref UsbK_Initialize call queries the underlying USB stack for various descriptors and allocates + * enough memory to store the retrieved descriptor data. + * + * \ref UsbK_Initialize first retrieves the device descriptor and then gets the associated configuration + * descriptor. From the configuration descriptor, the call derives the associated interface descriptors and + * stores them in an array. The interfaces in the array are identified by zero-based indexes. An index value + * of 0 indicates the first interface (the default interface), a value of 1 indicates the second associated + * interface, and so on. \ref UsbK_Initialize parses the default interface descriptor for the endpoint + * descriptors and caches information such as the associated pipes or state specific data. The handle + * received in the InterfaceHandle parameter will have its default interface configured to the first + * interface in the array. + * + * If an application wants to use another interface on the device, it can call + * \ref UsbK_GetAssociatedInterface, or \ref UsbK_ClaimInterface. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_Initialize ( + _in HANDLE DeviceHandle, + _out KUSB_HANDLE* InterfaceHandle); + +//! Selects the specified interface by number or index as the current interface. + /*! + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[in] NumberOrIndex + * Interfaces can be claimed or released by a interface index or \c bInterfaceNumber. + * - Interface indexes always start from 0 and continue sequentially for all interfaces of the device. + * - An interface number always represents the actual \ref USB_INTERFACE_DESCRIPTOR::bInterfaceNumber. + * Interface numbers are not guaranteed to be zero based or sequential. + * + * \param[in] IsIndex + * If TRUE, \c NumberOrIndex represents an interface index.\n if FALSE \c NumberOrIndex represents a + * \c bInterfaceNumber. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * \sa UsbK_ClaimInterface + * + */ + KUSB_EXP BOOL KUSB_API UsbK_SelectInterface ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR NumberOrIndex, + _in BOOL IsIndex); + +//! Retrieves a handle for an associated interface. + /*! + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[in] AssociatedInterfaceIndex + * An index that specifies the associated interface to retrieve. A value of 0 indicates the first associated + * interface, a value of 1 indicates the second associated interface, and so on. + * + * \param[out] AssociatedInterfaceHandle + * A handle for the associated interface. Callers must pass this interface handle to libusbK Functions + * exposed by libusbK.dll. To close this handle, call \ref UsbK_Free. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * The \ref UsbK_GetAssociatedInterface function retrieves an opaque handle for an associated interface. This + * is a synchronous operation. + * + * The first associated interface is the interface that immediately follows the current (or default) + * interface of the specified /c InterfaceHandle. + * + * The handle that \ref UsbK_GetAssociatedInterface returns must be released by calling \ref UsbK_Free. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_GetAssociatedInterface ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR AssociatedInterfaceIndex, + _out KUSB_HANDLE* AssociatedInterfaceHandle); + +//! Clones the specified interface handle. + /*! + * + * Each cloned interface handle maintains it's own selected interface. + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[out] DstInterfaceHandle + * On success, the cloned return handle. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_Clone ( + _in KUSB_HANDLE InterfaceHandle, + _out KUSB_HANDLE* DstInterfaceHandle); + +//! Retrieves the interface descriptor for the specified alternate interface settings for a particular interface handle. + /*! + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[in] AltSettingIndex + * A value that indicates which alternate setting index to return. A value of 0 indicates the first alternate + * setting, a value of 1 indicates the second alternate setting, and so on. + * + * \param[out] UsbAltInterfaceDescriptor + * A pointer to a caller-allocated \ref USB_INTERFACE_DESCRIPTOR structure that contains information about + * the interface that AltSettingNumber specified. + * + * The \ref UsbK_QueryInterfaceSettings call searches the current/default interface array for the alternate + * interface specified by the caller in the AltSettingIndex. If the specified alternate interface is found, + * the function populates the caller-allocated USB_INTERFACE_DESCRIPTOR structure. If the specified alternate + * interface is not found, then the call fails with the ERROR_NO_MORE_ITEMS code. + * + * To change the current/default interface, see \ref UsbK_SelectInterface and \ref UsbK_ClaimInterface + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_QueryInterfaceSettings ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR AltSettingIndex, + _out PUSB_INTERFACE_DESCRIPTOR UsbAltInterfaceDescriptor); + +//! Retrieves information about the physical device that is associated with a libusbK handle. + /*! + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[in] InformationType + * A value that specifies which interface information value to retrieve. On input, InformationType must have + * the following value: \c DEVICE_SPEED (0x01). + * + * \param[in,out] BufferLength + * The maximum number of bytes to read. This number must be less than or equal to the size, in bytes, of + * Buffer. On output, BufferLength is set to the actual number of bytes that were copied into Buffer. + * + * \param[in,out] Buffer + * A caller-allocated buffer that receives the requested value. On output, Buffer indicates the device speed: + * - (0x01) low/full speed device. + * - (0x03) high speed device. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_QueryDeviceInformation ( + _in KUSB_HANDLE InterfaceHandle, + _in UINT InformationType, + _ref PUINT BufferLength, + _ref PVOID Buffer); + +//! Sets the alternate setting of an interface. + /*! + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[in] AltSettingNumber + * The value that is contained in the bAlternateSetting member of the \ref USB_INTERFACE_DESCRIPTOR + * structure. This structure can be populated by the \ref UsbK_QueryInterfaceSettings routine. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * Sets the active bAlternateSetting for the current/default interface. + * + * To change the default/current interface see \ref UsbK_ClaimInterface and \ref UsbK_ReleaseInterface + * \sa UsbK_SetAltInterface + * + */ + KUSB_EXP BOOL KUSB_API UsbK_SetCurrentAlternateSetting ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR AltSettingNumber); + +//! Gets the current alternate interface setting for an interface. + /*! + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[out] AltSettingNumber + * A pointer to an unsigned character that receives an integer that indicates the current alternate setting. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * Gets the active bAlternateSetting for the current/default interface. + * + * To change the default/current interface see \ref UsbK_ClaimInterface and \ref UsbK_ReleaseInterface + * \sa UsbK_GetAltInterface + * + */ + KUSB_EXP BOOL KUSB_API UsbK_GetCurrentAlternateSetting ( + _in KUSB_HANDLE InterfaceHandle, + _out PUCHAR AltSettingNumber); + +//! Retrieves information about a pipe that is associated with an interface. + /*! + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[in] AltSettingNumber + * A value that specifies the alternate interface to return the information for. + * + * \param[in] PipeIndex + * A value that specifies the pipe to return information about. This value is not the same as the + * bEndpointAddress field in the endpoint descriptor. A PipeIndex value of 0 signifies the first endpoint + * that is associated with the interface, a value of 1 signifies the second endpoint, and so on. PipeIndex + * must be less than the value in the bNumEndpoints field of the interface descriptor. + * + * \param[out] PipeInformation + * A pointer, on output, to a caller-allocated \ref WINUSB_PIPE_INFORMATION structure that contains pipe + * information. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * The \ref UsbK_QueryPipe function does not retrieve information about the control pipe. + * + * Each interface on the USB device can have multiple endpoints. To communicate with each of these endpoints, + * the bus driver creates pipes for each endpoint on the interface. The pipe indices are zero-based. + * Therefore for n number of endpoints, the pipes' indices are set from n-1. \ref UsbK_QueryPipe parses the + * configuration descriptor to get the interface specified by the caller. It searches the interface + * descriptor for the endpoint descriptor associated with the caller-specified pipe. If the endpoint is + * found, the function populates the caller-allocated \ref WINUSB_PIPE_INFORMATION structure with information + * from the endpoint descriptor. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_QueryPipe ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR AltSettingNumber, + _in UCHAR PipeIndex, + _out PWINUSB_PIPE_INFORMATION PipeInformation); + +//! Sets the policy for a specific pipe associated with an endpoint on the device. This is a synchronous operation. + /*! + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[in] PipeID + * An 8-bit value that consists of a 7-bit address and a direction bit. This parameter corresponds to the + * bEndpointAddress field in the endpoint descriptor. + * + * \param[in] PolicyType + * A UINT variable that specifies the policy parameter to change. The Value parameter contains the new value + * for the policy parameter. See the remarks section for information about each of the pipe policies and the + * resulting behavior. + * + * \param[in] ValueLength + * The size, in bytes, of the buffer at Value. + * + * \param[in] Value + * The new value for the policy parameter that PolicyType specifies. The size of this input parameter depends + * on the policy to change. For information about the size of this parameter, see the description of the + * PolicyType parameter. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * The following list describes symbolic constants that are defined in \ref lusbk_shared.h + * + * - \c SHORT_PACKET_TERMINATE (0x01) + * - The default value is \c FALSE. + * - To enable \c SHORT_PACKET_TERMINATE, in Value pass the address of a caller-allocated \c UCHAR variable + * set to \c TRUE (nonzero). + * - Enabling \c SHORT_PACKET_TERMINATE causes the driver to send a zero-length packet at the end of every + * write request to the host controller. + * + * - \c AUTO_CLEAR_STALL (0x02) + * - The default value is \c FALSE. To enable \c AUTO_CLEAR_STALL, in Value pass the address of a + * caller-allocated \c UCHAR variable set to \c TRUE (nonzero). + * - Enabling \c AUTO_CLEAR_STALL causes libusbK to reset the pipe in order to automatically clear the + * stall condition. Data continues to flow on the bulk and interrupt \c IN endpoints again as soon as a + * new or a queued transfer arrives on the endpoint. This policy parameter does not affect control pipes. + * - Disabling \c AUTO_CLEAR_STALL causes all transfers (that arrive to the endpoint after the stalled + * transfer) to fail until the caller manually resets the endpoint's pipe by calling \ref UsbK_ResetPipe. + * + * - \c PIPE_TRANSFER_TIMEOUT (0x03) + * - The default value is zero. To set a time-out value, in Value pass the address of a caller-allocated + * \c UINT variable that contains the time-out interval. + * - The \c PIPE_TRANSFER_TIMEOUT value specifies the time-out interval, in milliseconds. The host + * controller cancels transfers that do not complete within the specified time-out interval. + * - A value of zero (default) indicates that transfers do not time out because the host controller never + * cancels the transfer. + * + * - \c IGNORE_SHORT_PACKETS (0x04) + * - The default value is \c FALSE. To enable \c IGNORE_SHORT_PACKETS, in Value pass the address of a + * caller-allocated \c UCHAR variable set to \c TRUE (nonzero). + * - Enabling \c IGNORE_SHORT_PACKETS causes the host controller to not complete a read operation after it + * receives a short packet. Instead, the host controller completes the operation only after the host has + * read the specified number of bytes. + * - Disabling \c IGNORE_SHORT_PACKETS causes the host controller to complete a read operation when either + * the host has read the specified number of bytes or the host has received a short packet. + * + * - \c ALLOW_PARTIAL_READS (0x05) + * - The default value is \c TRUE (nonzero). To disable \c ALLOW_PARTIAL_READS, in Value pass the address + * of a caller-allocated \c UCHAR variable set to \c FALSE (zero). + * - Disabling \c ALLOW_PARTIAL_READS causes the read requests to fail whenever the device returns more + * data (on bulk and interrupt \c IN endpoints) than the caller requested. + * - Enabling \c ALLOW_PARTIAL_READS causes libusbK to save or discard the extra data when the device + * returns more data (on bulk and interrupt \c IN endpoints) than the caller requested. This behavior is + * defined by setting the \c AUTO_FLUSH value. + * + * - \c AUTO_FLUSH (0x06) + * - The default value is \c FALSE (zero). To enable \c AUTO_FLUSH, in Value pass the address of a + * caller-allocated \c UCHAR variable set to \c TRUE (nonzero). + * - \c AUTO_FLUSH must be used with \c ALLOW_PARTIAL_READS enabled. If \c ALLOW_PARTIAL_READS is \c TRUE, + * the value of \c AUTO_FLUSH determines the action taken by libusbK when the device returns more data + * than the caller requested. + * - Disabling \c ALLOW_PARTIAL_READS causes libusbK to ignore the \c AUTO_FLUSH value. + * - Disabling \c AUTO_FLUSH with \c ALLOW_PARTIAL_READS enabled causes libusbK to save the extra data, add + * the data to the beginning of the caller's next read request, and send it to the caller in the next + * read operation. + * - Enabling \c AUTO_FLUSH with \c ALLOW_PARTIAL_READS enabled causes libusbK to discard the extra data + * remaining from the read request. + * + * - \c RAW_IO (0x07) + * - The default value is \c FALSE (zero). To enable \c RAW_IO, in Value pass the address of a + * caller-allocated \c UCHAR variable set to \c TRUE (nonzero). + * - Enabling \c RAW_IO causes libusbK to send data directly to the \c USB driver stack, bypassing + * libusbK's queuing and error handling mechanism. + * - The buffers that are passed to \ref UsbK_ReadPipe must be configured by the caller as follows: + * - The buffer length must be a multiple of the maximum endpoint packet size. + * - The length must be less than or equal to the value of \c MAXIMUM_TRANSFER_SIZE retrieved by + * \ref UsbK_GetPipePolicy. + * - Disabling \c RAW_IO (\c FALSE) does not impose any restriction on the buffers that are passed to + * \ref UsbK_ReadPipe. + * + * - \c RESET_PIPE_ON_RESUME (0x09) + * - The default value is \c FALSE (zero). To enable \c RESET_PIPE_ON_RESUME, in Value pass the address of + * a caller-allocated \c UCHAR variable set to \c TRUE (nonzero). + * - \c TRUE (or a nonzero value) indicates that on resume from suspend, libusbK resets the endpoint before + * it allows the caller to send new requests to the endpoint. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_SetPipePolicy ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID, + _in UINT PolicyType, + _in UINT ValueLength, + _in PVOID Value); + +//! Gets the policy for a specific pipe (endpoint). + /*! + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[in] PipeID + * An 8-bit value that consists of a 7-bit address and a direction bit. This parameter corresponds to the + * bEndpointAddress field in the endpoint descriptor. + * + * \param[in] PolicyType + * A UINT variable that specifies the policy parameter to retrieve. The current value for the policy + * parameter is retrieved the Value parameter. + * + * \param[in,out] ValueLength + * A pointer to the size, in bytes, of the buffer that Value points to. On output, ValueLength receives the + * size, in bytes, of the data that was copied into the Value buffer. + * + * \param[out] Value + * A pointer to a buffer that receives the specified pipe policy value. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_GetPipePolicy ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID, + _in UINT PolicyType, + _ref PUINT ValueLength, + _out PVOID Value); + +//! Reads data from the specified pipe. + /*! + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[in] PipeID + * An 8-bit value that consists of a 7-bit address and a direction bit. This parameter corresponds to the + * bEndpointAddress field in the endpoint descriptor. + * + * \param[out] Buffer + * A caller-allocated buffer that receives the data that is read. + * + * \param[in] BufferLength + * The maximum number of bytes to read. This number must be less than or equal to the size, in bytes, of + * Buffer. + * + * \param[out] LengthTransferred + * A pointer to a UINT variable that receives the actual number of bytes that were copied into Buffer. For + * more information, see Remarks. + * + * \param[in] Overlapped + * An optional pointer to an overlapped structure for asynchronous operations. This can be a \ref KOVL_HANDLE + * or a pointer to a standard windows OVERLAPPED structure. If this parameter is specified, \c UsbK_ReadPipe + * returns immediately rather than waiting synchronously for the operation to complete before returning. An + * event is signaled when the operation is complete. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_ReadPipe ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID, + _out PUCHAR Buffer, + _in UINT BufferLength, + _outopt PUINT LengthTransferred, + _inopt LPOVERLAPPED Overlapped); + +//! Writes data to a pipe. + /*! + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[in] PipeID + * An 8-bit value that consists of a 7-bit address and a direction bit. This parameter corresponds to the + * bEndpointAddress field in the endpoint descriptor. + * + * \param[in] Buffer + * A caller-allocated buffer the data is written from. + * + * \param[in] BufferLength + * The maximum number of bytes to write. This number must be less than or equal to the size, in bytes, of + * Buffer. + * + * \param[out] LengthTransferred + * A pointer to a UINT variable that receives the actual number of bytes that were transferred from Buffer. + * For more information, see Remarks. + * + * \param[in] Overlapped + * An optional pointer to an overlapped structure for asynchronous operations. This can be a \ref KOVL_HANDLE + * or a pointer to a standard windows OVERLAPPED structure. If this parameter is specified, \c UsbK_WritePipe + * returns immediately rather than waiting synchronously for the operation to complete before returning. An + * event is signaled when the operation is complete. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_WritePipe ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID, + _in PUCHAR Buffer, + _in UINT BufferLength, + _outopt PUINT LengthTransferred, + _inopt LPOVERLAPPED Overlapped); + +//! Resets the data toggle and clears the stall condition on a pipe. + /*! + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[in] PipeID + * An 8-bit value that consists of a 7-bit address and a direction bit. This parameter corresponds to the + * bEndpointAddress field in the endpoint descriptor. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_ResetPipe ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID); + +//! Aborts all of the pending transfers for a pipe. + /*! + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[in] PipeID + * An 8-bit value that consists of a 7-bit address and a direction bit. This parameter corresponds to the + * bEndpointAddress field in the endpoint descriptor. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_AbortPipe ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID); + +//! Discards any data that is cached in a pipe. + /*! + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[in] PipeID + * An 8-bit value that consists of a 7-bit address and a direction bit. This parameter corresponds to the + * bEndpointAddress field in the endpoint descriptor. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_FlushPipe ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID); + +//! Reads from an isochronous pipe. + /*! + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[in] PipeID + * An 8-bit value that consists of a 7-bit address and a direction bit. This parameter corresponds to the + * bEndpointAddress field in the endpoint descriptor. + * + * \param[out] Buffer + * A caller-allocated buffer that receives the data that is read. + * + * \param[in] BufferLength + * The maximum number of bytes to read. This number must be less than or equal to the size, in bytes, of + * Buffer. + * + * \param[in] Overlapped + * A \b required pointer to an overlapped structure for asynchronous operations. This can be a + * \ref KOVL_HANDLE or a pointer to a standard windows OVERLAPPED structure. If this parameter is specified, + * \c UsbK_IsoReadPipe returns immediately rather than waiting synchronously for the operation to complete + * before returning. An event is signaled when the operation is complete. + * + * \param[in,out] IsoContext + * Pointer to an isochronous transfer context created with \ref IsoK_Init. If \c IsoContext is NULL, + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * \par Overlapped I/O considerations + * If an \c Overlapped parameter is specified and the transfer is submitted successfully, the function + * returns \b FALSE and sets last error to \c ERROR_IO_PENDING. When using overlapped I/O, users may ignore + * the return results of this function and instead use the return results from one of the \ref ovlk wait + * functions or from \ref UsbK_GetOverlappedResult. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_IsoReadPipe ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID, + _out PUCHAR Buffer, + _in UINT BufferLength, + _in LPOVERLAPPED Overlapped, + _refopt PKISO_CONTEXT IsoContext); + +//! Writes to an isochronous pipe. + /*! + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[in] PipeID + * An 8-bit value that consists of a 7-bit address and a direction bit. This parameter corresponds to the + * bEndpointAddress field in the endpoint descriptor. + * + * \param[in] Buffer + * A caller-allocated buffer that receives the data that is read. + * + * \param[in] BufferLength + * The maximum number of bytes to write. This number must be less than or equal to the size, in bytes, of + * Buffer. + * + * \param[in] Overlapped + * An optional pointer to an overlapped structure for asynchronous operations. This can be a \ref KOVL_HANDLE + * or a pointer to a standard windows OVERLAPPED structure. If this parameter is specified, + * \c UsbK_IsoWritePipe returns immediately rather than waiting synchronously for the operation to complete + * before returning. An event is signaled when the operation is complete. + * + * \param[in,out] IsoContext + * Pointer to an isochronous transfer context created with \ref IsoK_Init. See remarks below. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_IsoWritePipe ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID, + _in PUCHAR Buffer, + _in UINT BufferLength, + _in LPOVERLAPPED Overlapped, + _refopt PKISO_CONTEXT IsoContext); + +//! Retrieves the current USB frame number. + /*! + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[out] FrameNumber + * A pointer to a location that receives the current 32-bit frame number on the USB bus (from the host + * controller driver). + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_GetCurrentFrameNumber ( + _in KUSB_HANDLE InterfaceHandle, + _out PUINT FrameNumber); + +//! Retrieves the results of an overlapped operation on the specified libusbK handle. + /*! + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[in] Overlapped + * A pointer to a standard windows OVERLAPPED structure that was specified when the overlapped operation was + * started. + * + * \param[out] lpNumberOfBytesTransferred + * A pointer to a variable that receives the number of bytes that were actually transferred by a read or + * write operation. + * + * \param[in] bWait + * If this parameter is TRUE, the function does not return until the operation has been completed. If this + * parameter is FALSE and the operation is still pending, the function returns FALSE and the GetLastError + * function returns ERROR_IO_INCOMPLETE. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * This function is like the Win32 API routine, GetOverlappedResult, with one difference; instead of passing + * a file handle that is returned from CreateFile, the caller passes an interface handle that is returned + * from \ref UsbK_Initialize, \ref UsbK_Init, or \ref UsbK_GetAssociatedInterface. The caller can use either + * API routine, if the appropriate handle is passed. The \ref UsbK_GetOverlappedResult function extracts the + * file handle from the interface handle and then calls GetOverlappedResult. \n + * + * The results that are reported by the \ref UsbK_GetOverlappedResult function are those from the specified + * handle's last overlapped operation to which the specified standard windows OVERLAPPED structure was + * provided, and for which the operation's results were pending. A pending operation is indicated when the + * function that started the operation returns FALSE, and the GetLastError routine returns ERROR_IO_PENDING. + * When an I/O operation is pending, the function that started the operation resets the hEvent member of the + * standard windows OVERLAPPED structure to the nonsignaled state. Then when the pending operation has been + * completed, the system sets the event object to the signaled state. \n + * + * The caller can specify that an event object is manually reset in the standard windows OVERLAPPED + * structure. If an automatic reset event object is used, the event handle must not be specified in any other + * wait operation in the interval between starting the overlapped operation and the call to + * \ref UsbK_GetOverlappedResult. For example, the event object is sometimes specified in one of the wait + * routines to wait for the operation to be completed. When the wait routine returns, the system sets an + * auto-reset event's state to nonsignaled, and a successive call to \ref UsbK_GetOverlappedResult with the + * bWait parameter set to TRUE causes the function to be blocked indefinitely. + * + * If the bWait parameter is TRUE, \ref UsbK_GetOverlappedResult determines whether the pending operation has + * been completed by waiting for the event object to be in the signaled state. + * + * If the hEvent member of the standard windows OVERLAPPED structure is NULL, the system uses the state of + * the file handle to signal when the operation has been completed. Do not use file handles for this purpose. + * It is better to use an event object because of the confusion that can occur when multiple concurrent + * overlapped operations are performed on the same file. In this situation, you cannot know which operation + * caused the state of the object to be signaled. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_GetOverlappedResult ( + _in KUSB_HANDLE InterfaceHandle, + _in LPOVERLAPPED Overlapped, + _out PUINT lpNumberOfBytesTransferred, + _in BOOL bWait); + +//! Gets a USB device (driver specific) property from usb handle. + /*! + * + * \param[in] InterfaceHandle + * USB handle of the property to retrieve. + * + * \param[in] PropertyType + * The propety type to retrieve. + * + * \param[in,out] PropertySize + * Size in bytes of \c Value. + * + * \param[out] Value + * On success, receives the proprty data. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_GetProperty ( + _in KUSB_HANDLE InterfaceHandle, + _in KUSB_PROPERTY PropertyType, + _ref PUINT PropertySize, + _out PVOID Value); + + /*! @} */ + + +#endif + +#ifndef _LIBUSBK_LSTK_FUNCTIONS + /*! \addtogroup lstk + *@{ + */ + +//! Initializes a new usb device list containing all supported devices. + /*! + * + * \param[out] DeviceList + * Pointer reference that will receive a populated device list. + * + * \param[in] Flags + * Search, filter, and listing options. see \c KLST_FLAG + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * \c LstK_Init populates \c DeviceList with connected usb devices that can be used by libusbK. + * + * \note if \ref LstK_Init returns TRUE, the device list must be freed with \ref LstK_Free when it is no + * longer needed. + * + */ + KUSB_EXP BOOL KUSB_API LstK_Init( + _out KLST_HANDLE* DeviceList, + _in KLST_FLAG Flags); + +//! Initializes a new usb device list containing only devices matching a specific class GUID. + /*! + * + * \param[out] DeviceList + * Pointer reference that will receive a populated device list. + * + * \param[in] Flags + * Search, filter, and listing options. see \c KLST_FLAG + * + * \param[in] PatternMatch + * Pattern Search filter. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * \c LstK_InitEx populates \c DeviceList with usb devices that can be used by libusbK. Only device + * matching the \ref KLST_PATTERN_MATCH string are included in the list. + * + * \note + * This function significantly improves performance when used with a device interface guid pattern patch. + * + * \note if \ref LstK_InitEx returns TRUE, the device list must be freed with \ref LstK_Free when it it's no + * longer needed. + * + */ + KUSB_EXP BOOL KUSB_API LstK_InitEx( + _out KLST_HANDLE* DeviceList, + _in KLST_FLAG Flags, + _in PKLST_PATTERN_MATCH PatternMatch); + + //! Frees a usb device list. + /*! + * + * \note if \ref LstK_Init returns TRUE, the device list must be freed with \ref LstK_Free when it is no + * longer needed. + * + * \param[in] DeviceList + * The \c DeviceList to free. + * + * \returns NONE + * + * Frees all resources that were allocated to \c DeviceList by \ref LstK_Init. + * + */ + KUSB_EXP BOOL KUSB_API LstK_Free( + _in KLST_HANDLE DeviceList); + +//! Enumerates \ref KLST_DEVINFO elements of a \ref KLST_HANDLE. + /*! + * + * \param[in] DeviceList + * The \c DeviceList to enumerate. + * + * \param[in] EnumDevListCB + * Function to call for each iteration. + * + * \param[in] Context + * Optional user context pointer. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * Calls \c EnumDevListCB for each element in the device list or until \c EnumDevListCB returns FALSE. + * + */ + KUSB_EXP BOOL KUSB_API LstK_Enumerate( + _in KLST_HANDLE DeviceList, + _in KLST_ENUM_DEVINFO_CB* EnumDevListCB, + _inopt PVOID Context); + +//! Gets the \ref KLST_DEVINFO element for the current position. + /*! + * + * \param[in] DeviceList + * The \c DeviceList to retrieve a current \ref KLST_DEVINFO for. + * + * \param[out] DeviceInfo + * The device information. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * After a \c DeviceList is created or after the \ref LstK_MoveReset method is called, the \c LstK_MoveNext + * method must be called to advance the device list enumerator to the first element of the \c DeviceList + * before calling \c LstK_Current otherwise, \c DeviceInfo is undefined. + * + * \c LstK_Current returns \c FALSE and sets last error to \c ERROR_NO_MORE_ITEMS if the last call to + * \c LstK_MoveNext returned \c FALSE, which indicates the end of the \c DeviceList. + * + * \c LstK_Current does not move the position of the device list enumerator, and consecutive calls to + * \c LstK_Current return the same object until either \c LstK_MoveNext or \ref LstK_MoveReset is called. + * + */ + KUSB_EXP BOOL KUSB_API LstK_Current( + _in KLST_HANDLE DeviceList, + _out KLST_DEVINFO_HANDLE* DeviceInfo); + +//! Advances the device list current \ref KLST_DEVINFO position. + /*! + * \param[in] DeviceList + * A usb device list returned by \ref LstK_Init + * + * \param[out] DeviceInfo + * On success, contains a pointer to the device information for the current enumerators position. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * After a \c DeviceList is created or after \ref LstK_MoveReset is called, an enumerator is positioned + * before the first element of the \c DeviceList and the \b first call to \c LstK_MoveNext moves the + * enumerator over the first element of the \c DeviceList. + * + * If \c LstK_MoveNext passes the end of the \c DeviceList, the enumerator is positioned after the last + * element in the \c DeviceList and \c LstK_MoveNext returns \c FALSE. When the enumerator is at this + * position, a subsequent call to \c LstK_MoveNext will reset the enumerator and it continues from the + * beginning. + * + */ + KUSB_EXP BOOL KUSB_API LstK_MoveNext( + _in KLST_HANDLE DeviceList, + _outopt KLST_DEVINFO_HANDLE* DeviceInfo); + +//! Sets the device list to its initial position, which is before the first element in the list. + /*! + * + * \param[in] DeviceList + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP VOID KUSB_API LstK_MoveReset( + _in KLST_HANDLE DeviceList); + +//! Find a device by vendor and product id + /*! + * + * \param[in] DeviceList + * The \c DeviceList to retrieve a current \ref KLST_DEVINFO for. + * + * \param[in] Vid + * ID is used in conjunction with the \c Pid to uniquely identify USB devices, providing traceability to the + * OEM. + * + * \param[in] Pid + * ID is used in conjunction with the \c Pid to uniquely identify USB devices, providing traceability to the + * OEM. + * + * \param[out] DeviceInfo + * On success, the device information pointer, otherwise NULL. + * + * \returns + * - TRUE if the device was found + * - FALSE if the device was \b not found or an error occurred. + * - Sets last error to \c ERROR_NO_MORE_ITEMS if the device was \b not found. + * + * Searches all elements in \c DeviceList for usb device matching the specified. + * + */ + KUSB_EXP BOOL KUSB_API LstK_FindByVidPid( + _in KLST_HANDLE DeviceList, + _in INT Vid, + _in INT Pid, + _out KLST_DEVINFO_HANDLE* DeviceInfo); + +//! Counts the number of device info elements in a device list. + /*! + * + * \param[in] DeviceList + * The deice list to count. + * + * \param[in,out] Count + * On success, receives the number of \ref KLST_DEVINFO elements in the list. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP BOOL KUSB_API LstK_Count( + _in KLST_HANDLE DeviceList, + _ref PUINT Count); + + + /**@}*/ + +#endif + +#ifndef _LIBUSBK_HOTK_FUNCTIONS + /*! \addtogroup hotk + * @{ + */ + +//! Creates a new hot-plug handle for USB device arrival/removal event monitoring. + /*! + * + * \param[out] Handle + * Reference to a handle pointer that will receive the initialized hot-plug handle. + * + * \param[in,out] InitParams + * Hot plug handle initialization structure. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP BOOL KUSB_API HotK_Init( + _out KHOT_HANDLE* Handle, + _ref PKHOT_PARAMS InitParams); + +//! Frees the specified hot-plug handle. + /*! + * + * \param[in] Handle + * hot-plug handle pointer to free. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP BOOL KUSB_API HotK_Free( + _in KHOT_HANDLE Handle); + + //! Frees all hot-plug handles initialized with \ref HotK_Init. + /*! + * + */ + KUSB_EXP VOID KUSB_API HotK_FreeAll(VOID); + + /**@}*/ + +#endif + +#ifndef _LIBUSBK_OVLK_FUNCTIONS + /*! \addtogroup ovlk + * @{ + */ + +//! Gets a preallocated \c OverlappedK structure from the specified/default pool. + /*! + * + * \param[out] OverlappedK + * On Success, receives the overlapped handle. + * + * \param[in] PoolHandle + * The overlapped pool used to retrieve the next available \c OverlappedK. + * + * \returns On success, the next unused overlappedK available in the pool. Otherwise NULL. Use + * \c GetLastError() to get extended error information. + * + * After calling \ref OvlK_Acquire or \ref OvlK_ReUse the \c OverlappedK is ready to be used in an I/O + * operation. See one of the \c UsbK core transfer functions such as \ref UsbK_ReadPipe or + * \ref UsbK_WritePipe for more information. + * + * If the pools internal refurbished list (a re-usable list of \c OverlappedK structures) is not empty, the + * \ref OvlK_Acquire function will choose an overlapped from the refurbished list. + * + */ + KUSB_EXP BOOL KUSB_API OvlK_Acquire( + _out KOVL_HANDLE* OverlappedK, + _in KOVL_POOL_HANDLE PoolHandle); + +//! Returns an \c OverlappedK structure to it's pool. + /*! + * + * \param[in] OverlappedK + * The overlappedK to release. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * When an overlapped is returned to pool, it resources are \b not freed. Instead, it is added to an internal + * refurbished list (a re-usable list of \c OverlappedK structures). + * + * \warning This function must not be called when the OverlappedK is in-use. If unsure, consider using + * \ref OvlK_WaitAndRelease instead. + * + */ + KUSB_EXP BOOL KUSB_API OvlK_Release( + _in KOVL_HANDLE OverlappedK); + + +//! Creates a new overlapped pool. + /*! + * + * \param[out] PoolHandle + * On success, receives the new pool handle. + * + * \param[in] UsbHandle + * USB handle to associate with the pool. + * + * \param[in] MaxOverlappedCount + * Maximum number of overkappedK handles allowed in the pool. + * + * \param[in] Flags + * Pool flags. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP BOOL KUSB_API OvlK_Init ( + _out KOVL_POOL_HANDLE* PoolHandle, + _in KUSB_HANDLE UsbHandle, + _in INT MaxOverlappedCount, + _inopt KOVL_POOL_FLAG Flags); + +//! Destroys the specified pool and all resources it created. + /*! + * + * \param[in] PoolHandle + * The overlapped pool to destroy. Once destroyed, the pool and all resources which belong to it can no + * longer be used. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * \warning A pool should not be destroyed until all OverlappedKs acquired from it are no longer in-use. For + * more information see \ref OvlK_WaitAndRelease or \ref OvlK_Release. + * + */ + KUSB_EXP BOOL KUSB_API OvlK_Free( + _in KOVL_POOL_HANDLE PoolHandle); + + +//! Returns the internal event handle used to signal IO operations. + /*! + * + * \param[in] OverlappedK + * The overlappedK used to return the internal event handle. + * + * \returns On success, The manual reset event handle being used by this overlappedK. Otherwise NULL. Use + * \c GetLastError() to get extended error information. + * + * \ref OvlK_GetEventHandle is useful for applications that must to their own event handling. It exposes the + * windows \c OVERLAPPED \c hEvent used for i/o completion signaling. This event handle can be used by the + * standard event wait functions; /c WaitForMultipleObjectsEx for example. + * + * \warning Use \ref OvlK_GetEventHandle with caution. Event handles returned by this function should never + * be used unless the OverlappedK has been \b acquired by the application. + * + */ + KUSB_EXP HANDLE KUSB_API OvlK_GetEventHandle( + _in KOVL_HANDLE OverlappedK); + +//! Waits for overlapped I/O completion, and performs actions specified in \c WaitFlags. + /*! + * + * \param[in] OverlappedK + * The overlappedK to wait on. + * + * \param[in] TimeoutMS + * Number of milliseconds to wait for overlapped completion. + * + * \param[in] WaitFlags + * See /ref KOVL_WAIT_FLAG + * + * \param[out] TransferredLength + * On success, returns the number of bytes transferred by this overlappedK. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. See + * the remarks section below for details on relevant error codes. + * + * \c OvlK_Wait waits the time interval specified in \c TimeoutMS for the overlapped I/O operation to + * complete. Different actions can then taken depending on the flags specified in \c WaitFlags. + * + * \WINERRORTABLE + * + * \WINERROR{ERROR_CANCELLED,1223} + * - The I/O was cancelled by the user. The transfer complete event was not signalled within the alotted + * transfer timeout time and the OvlK_Wait function issued a CancelIoEx/CancelIo request because the + * \ref KOVL_WAIT_FLAG_CANCEL_ON_TIMEOUT flag bit was set. + * \ENDWINERROR + * + * \WINERROR{ERROR_OPERATION_ABORTED,995} + * - The transfer complete event is signalled but the overlapped result was allready cancelled. The + * overlapped I/O may have bee cancelled for one of the following reasons: + * - Driver cancelled because of pipe timeout policy expiration. + * - The device was disconnected. + * - A \ref UsbK_AbortPipe request was issued. + * \ENDWINERROR + * + * \ENDWINERRORTABLE + * + */ + KUSB_EXP BOOL KUSB_API OvlK_Wait( + _in KOVL_HANDLE OverlappedK, + _inopt INT TimeoutMS, + _inopt KOVL_WAIT_FLAG WaitFlags, + _out PUINT TransferredLength); + +//! Waits for overlapped I/O completion on the oldest acquired OverlappedK handle and performs actions specified in \c WaitFlags. + /*! + * + * \param[in] PoolHandle + * The pool handle containing one or more acuired OverlappedKs. + * + * \param[out] OverlappedK + * On success, set to the oldest overlappedK in the acquired list. + * + * \param[in] TimeoutMS + * See /ref OvlK_Wait + * + * \param[in] WaitFlags + * See /ref KOVL_WAIT_FLAG + * + * \param[out] TransferredLength + * See /ref OvlK_Wait + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. See + * See /ref OvlK_Wait + */ + KUSB_EXP BOOL KUSB_API OvlK_WaitOldest( + _in KOVL_POOL_HANDLE PoolHandle, + _outopt KOVL_HANDLE* OverlappedK, + _inopt INT TimeoutMS, + _inopt KOVL_WAIT_FLAG WaitFlags, + _out PUINT TransferredLength); + +//! Waits for overlapped I/O completion, cancels on a timeout error. + /*! + * + * \param[in] OverlappedK + * The overlappedK to wait on. + * + * \param[in] TimeoutMS + * Number of milliseconds to wait for overlapped completion. + * + * \param[out] TransferredLength + * On success, returns the number of bytes transferred by this overlappedK. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. See + * \ref OvlK_Wait for details on relevant win32 error codes. + * + * \note This convenience function calls \ref OvlK_Wait with \ref KOVL_WAIT_FLAG_CANCEL_ON_TIMEOUT. + * + * \c OvlK_WaitOrCancel waits the the time interval specified by \c TimeoutMS for an overlapped result. If + * the \c TimeoutMS interval expires the I/O operation is cancelled. The \c OverlappedK is not released back + * to its pool. + * + */ + KUSB_EXP BOOL KUSB_API OvlK_WaitOrCancel( + _in KOVL_HANDLE OverlappedK, + _inopt INT TimeoutMS, + _out PUINT TransferredLength); + +//! Waits for overlapped I/O completion, cancels on a timeout error and always releases the OvlK handle back to its pool. + /*! + * + * \param[in] OverlappedK + * The overlappedK to wait on. + * + * \param[in] TimeoutMS + * Number of milliseconds to wait for overlapped completion. + * + * \param[out] TransferredLength + * On success, returns the number of bytes transferred by this overlappedK. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. See + * \ref OvlK_Wait for details on relevant win32 error codes. + * + * \note This convenience function calls \ref OvlK_Wait with \ref KOVL_WAIT_FLAG_RELEASE_ALWAYS. + * + * \c OvlK_WaitAndRelease waits the the time interval specified by \c TimeoutMS for an overlapped result. + * When \c OvlK_WaitOrCancel returns, the I/O operation has either been completed or cancelled. The + * \c OverlappedK is always released back to its pool where it can be re-acquired with \ref OvlK_Acquire. + * + */ + KUSB_EXP BOOL KUSB_API OvlK_WaitAndRelease( + _in KOVL_HANDLE OverlappedK, + _inopt INT TimeoutMS, + _out PUINT TransferredLength); + +//! Checks for i/o completion; returns immediately. (polling) + /*! + * + * \param[in] OverlappedK + * The overlappedK to check for completion. + * + * \warning \ref OvlK_IsComplete does \b no validation on the OverlappedK. It's purpose is to check the event + * signal state as fast as possible. + * + * \returns TRUE if the \c OverlappedK has completed, otherwise FALSE. + * + * \c OvlK_IsComplete quickly checks if the \c OverlappedK i/o operation has completed. + */ + KUSB_EXP BOOL KUSB_API OvlK_IsComplete( + _in KOVL_HANDLE OverlappedK); + +//! Initializes an overlappedK for re-use. The overlappedK is not return to its pool. + /*! + * + * \param[in] OverlappedK + * The overlappedK to re-use. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * This function performs the following actions: + * - Resets the overlapped event to non-signaled via ResetEvent(). + * - Clears the internal overlapped information. + * - Clears the 'Internal' and 'InternalHigh' members of the windows overlapped structure. + * + * \note + * Re-using OverlappedKs is the most efficient means of OverlappedK management. When an OverlappedK is + * "re-used" it is not returned to the pool. Instead, the application retains ownership for use in another + * i/o operation. + * + */ + KUSB_EXP BOOL KUSB_API OvlK_ReUse( + _in KOVL_HANDLE OverlappedK); + + /**@}*/ + +#endif + +#ifndef _LIBUSBK_STMK_FUNCTIONS + + /*! \addtogroup stmk + * @{ + */ + +//! Initializes a new uni-directional pipe stream. + /*! + * + * \param[out] StreamHandle + * On success, receives the new stream handle. + * + * \param[in] UsbHandle + * Usb handle to associate with this stream. + * + * \param[in] PipeID + * Endpoint address of USB pipe to associate with this stream. + * + * \param[in] MaxTransferSize + * Maximum number of bytes transferred at once. Larger transfers committed with the stream read/write + * functions are automatically split into multiple smaller chunks. + * + * \param[in] MaxPendingTransfers + * Maximum number of transfers allowed to be outstanding and the total number of transfer contexts that are + * allocated to the stream. + * + * \param[in] MaxPendingIO + * Maximum number of I/O requests the internal stream thread is allowed to have submit at any given time. + * (Pending I/O) + * + * \param[in] Callbacks + * Optional user callback functions. If specified, these callback functions will be executed in real time + * (from within the context of the internal stream thread) as transfers go through the various states. + * + * \param[in] Flags + * Additional stream flags. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * \par + * When a stream is initialized, it validates input parameters and allocates the required memory for the + * transfer context array and transfer lists from a private memory heap. The stream is not started and no I/O + * requests are sent to the device until \ref StmK_Start is executed. + * + */ + KUSB_EXP BOOL KUSB_API StmK_Init( + _out KSTM_HANDLE* StreamHandle, + _in KUSB_HANDLE UsbHandle, + _in UCHAR PipeID, + _in INT MaxTransferSize, + _in INT MaxPendingTransfers, + _in INT MaxPendingIO, + _inopt PKSTM_CALLBACK Callbacks, + _inopt KSTM_FLAG Flags); + +//! Frees resources allocated by a stream handle. + /*! + * + * \param[in] StreamHandle + * The stream handle to free. + * + * \returns TRUE. + * + * If the stream is currently started it is automatically stopped before its resources are freed. + * + */ + KUSB_EXP BOOL KUSB_API StmK_Free( + _in KSTM_HANDLE StreamHandle); + +//! Starts the internal stream thread. + /*! + * + * \param[in] StreamHandle + * The stream to start. A stream handle is created with \ref StmK_Init. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * \par + * When a stream is started, an internal thread is created for managing pipe I/O operations. If a + * \ref KSTM_CALLBACK::Started callback function is assgined, it is executed \b for each transfer context. + * (\b MaxPendingTransfers) See \ref StmK_Init. + * + */ + KUSB_EXP BOOL KUSB_API StmK_Start( + _in KSTM_HANDLE StreamHandle); + +//! Stops the internal stream thread. + /*! + * + * \param[in] StreamHandle + * The stream to stop. + * + * \param[in] TimeoutCancelMS + * Number of milliseconds the internal stream thread should wait for pending I/O to complete before + * cancelling all pending requests. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP BOOL KUSB_API StmK_Stop( + _in KSTM_HANDLE StreamHandle, + _in INT TimeoutCancelMS); + +//! Reads data from the stream buffer. + /*! + * + * \param[in] StreamHandle + * The stream to read. + * + * \param[out] Buffer + * A caller-allocated buffer that receives the data that is read. + * + * \param[in] Offset + * Read start offset of \c Buffer. + * + * \param[in] Length + * Size of \c Buffer. + * + * \param[out] TransferredLength + * On success, receives the actual number of bytes that were copied into \c Buffer. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * - Read Stream Operations: + * -# The internal stream thread will always try and keep reads pending as specified by \b MaxPendingIO in + * \ref StmK_Init. + * -# As the stream submits transfers, it increments the \b PendingIO and \b PendingTransfer counts. As it + * completes transfers, it decrements the \b PendingIO count. As the user processes transfers with + * \ref StmK_Read, it decrements the \b PendingTransfer count and release control of the transfer context + * back to the stream where it is re-used. + * -# When the pending I/O count reaches \c MaxPendingIO, the stream completes the oldest + * \b PendingTransfer and moves it into a FIFO complete where it awaits user processing via the + * \ref StmK_Read function. + * -# If the stream has not exhausted its MaxPendingTransfers count, another read request is submitted + * immediately to satisfy \b MaxPendingIO. + * + */ + KUSB_EXP BOOL KUSB_API StmK_Read( + _in KSTM_HANDLE StreamHandle, + _out PUCHAR Buffer, + _in INT Offset, + _in INT Length, + _out PUINT TransferredLength); + +//! Writes data to the stream buffer. + /*! + * + * \param[in] StreamHandle + * The stream to write. + * + * \param[in] Buffer + * A caller-allocated buffer the data is written from. + * + * \param[in] Offset + * Write start offset of \c Buffer. + * + * \param[in] Length + * Number of bytes to copy into the stream buffer. + * + * \param[out] TransferredLength + * On success, receives the actual number of bytes that were copied into the stream buffer. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * - Write Stream Operations: + * -# The internal stream thread will always try and exhaust all pending transfers submitted by the user + * via \ref StmK_Write. + * -# As the user submits transfers via \ref StmK_Write, the \b PendingTransfer count is inceremented and + * transfers are added to a queued FIFO list where they await processing by the internal stream thread. + * -# While the queued FIFO list is not empty and \b PendingIO count is less than \b MaxPendingIO, The + * \b PendingIO count increments and the request is sent to the device. + * -# When a transfer completes, the internal pending I/O count is decremented and the transfers is moved + * back into the idle list where it can be reused again by subsequent \ref StmK_Write requests. + * + */ + KUSB_EXP BOOL KUSB_API StmK_Write( + _in KSTM_HANDLE StreamHandle, + _in PUCHAR Buffer, + _in INT Offset, + _in INT Length, + _out PUINT TransferredLength); + /**@}*/ + +#endif + +#ifndef _LIBUSBK_ISOK_FUNCTIONS + /*! \addtogroup isok + * @{ + */ + +//! Creates a new isochronous transfer context. + /*! + * + * \param[out] IsoContext + * Receives a new isochronous transfer context. + * + * \param[in] NumberOfPackets + * The number of \ref KISO_PACKET structures allocated to \c IsoContext. Assigned to + * \ref KISO_CONTEXT::NumberOfPackets. The \ref KISO_CONTEXT::NumberOfPackets field is assignable by + * \c IsoK_Init only and must not be changed by the user. + * + * \param[in] StartFrame + * The USB frame number this request must start on (or \b 0 for ASAP) and assigned to + * \ref KISO_CONTEXT::StartFrame. The \ref KISO_CONTEXT::StartFrame may be chamged by the user in subsequent + * request. For more information, see \ref KISO_CONTEXT::StartFrame. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * \c IsoK_Init is performs the following tasks in order: + * -# Allocates the \c IsoContext and the required \ref KISO_PACKET structures. + * -# Zero-initializes all ISO context memory. + * -# Assigns \b NumberOfPackets, \b PipeID, and \b StartFrame to \c IsoContext. + * + */ + KUSB_EXP BOOL KUSB_API IsoK_Init( + _out PKISO_CONTEXT* IsoContext, + _in INT NumberOfPackets, + _inopt INT StartFrame); + +//! Destroys an isochronous transfer context. + /*! + * \param[in] IsoContext + * A pointer to an isochronous transfer context created with \ref IsoK_Init. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + */ + KUSB_EXP BOOL KUSB_API IsoK_Free( + _in PKISO_CONTEXT IsoContext); + +//! Convenience function for setting the offset of all ISO packets of an isochronous transfer context. + /*! + * \param[in] IsoContext + * A pointer to an isochronous transfer context. + * + * \param[in] PacketSize + * The packet size used to calculate and assign the absolute data offset for each \ref KISO_PACKET in + * \c IsoContext. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * \c IsoK_SetPackets updates all \ref KISO_PACKET::Offset fields in a \ref KISO_CONTEXT so all offset are + * \c PacketSize apart. For example: + * - The offset of the first (0-index) packet is 0. + * - The offset of the second (1-index) packet is PacketSize. + * - The offset of the third (2-index) packet is PacketSize*2. + * + * \code + * for (packetIndex = 0; packetIndex < IsoContext->NumberOfPackets; packetIndex++) + * IsoContext->IsoPackets[packetIndex].Offset = packetIndex * PacketSize; + * \endcode + * + */ + KUSB_EXP BOOL KUSB_API IsoK_SetPackets( + _in PKISO_CONTEXT IsoContext, + _in INT PacketSize); + +//! Convenience function for setting all fields of a \ref KISO_PACKET. + /*! + * \param[in] IsoContext + * A pointer to an isochronous transfer context. + * + * \param[in] PacketIndex + * The packet index to set. + * + * \param[in] IsoPacket + * Pointer to a user allocated \c KISO_PACKET which is copied into the PKISO_CONTEXT::IsoPackets array at the + * specified index. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + */ + KUSB_EXP BOOL KUSB_API IsoK_SetPacket( + _in PKISO_CONTEXT IsoContext, + _in INT PacketIndex, + _in PKISO_PACKET IsoPacket); + +//! Convenience function for getting all fields of a \ref KISO_PACKET. + /*! + * \param[in] IsoContext + * A pointer to an isochronous transfer context. + * + * \param[in] PacketIndex + * The packet index to get. + * + * \param[out] IsoPacket + * Pointer to a user allocated \c KISO_PACKET which receives a copy of the ISO packet in the + * PKISO_CONTEXT::IsoPackets array at the specified index. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + */ + KUSB_EXP BOOL KUSB_API IsoK_GetPacket( + _in PKISO_CONTEXT IsoContext, + _in INT PacketIndex, + _out PKISO_PACKET IsoPacket); + +//! Convenience function for enumerating ISO packets of an isochronous transfer context. + /*! + * \param[in] IsoContext + * A pointer to an isochronous transfer context. + * + * \param[in] EnumPackets + * Pointer to a user supplied callback function which is executed for all ISO packets in \c IsoContext or + * until the user supplied callback function returns \c FALSE. + * + * \param[in] StartPacketIndex + * The zero-based ISO packet index to begin enumeration at. + * + * \param[in] UserState + * A user defined value which is passed as a parameter to the user supplied callback function. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + */ + KUSB_EXP BOOL KUSB_API IsoK_EnumPackets( + _in PKISO_CONTEXT IsoContext, + _in KISO_ENUM_PACKETS_CB* EnumPackets, + _inopt INT StartPacketIndex, + _inopt PVOID UserState); + +//! Convenience function for re-using an isochronous transfer context in a subsequent request. + /*! + * \param[in,out] IsoContext + * A pointer to an isochronous transfer context. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * \c IsoK_ReUse does the following: + * -# Zero-initializes the \b Length and \b Status fields of all \ref KISO_PACKET structures. + * -# Zero-initializes the \b StartFrame and \b ErrorCount of the \ref KISO_CONTEXT. + * + */ + KUSB_EXP BOOL KUSB_API IsoK_ReUse( + _ref PKISO_CONTEXT IsoContext); + + /*! @} */ + +#endif + +#ifdef __cplusplus +} +#endif + +#endif // _LIBUSBK_H__ diff --git a/Desktop Interface/libusbk/includes/lusbk_dynapi.c b/Desktop Interface/libusbk/includes/lusbk_dynapi.c new file mode 100644 index 00000000..3b414327 --- /dev/null +++ b/Desktop Interface/libusbk/includes/lusbk_dynapi.c @@ -0,0 +1,1915 @@ +/*!******************************************************************** +libusbK - Multi-driver USB library. +Copyright (C) 2012 Travis Lee Robinson. All Rights Reserved. +libusb-win32.sourceforge.net + +Development : Travis Lee Robinson (libusbdotnet@gmail.com) +Testing : Xiaofan Chen (xiaofanc@gmail.com) + +At the discretion of the user of this library, this software may be +licensed under the terms of the GNU Public License v3 or a BSD-Style +license as outlined in the following files: +* LICENSE-gpl3.txt +* LICENSE-bsd.txt + +License files are located in a license folder at the root of source and +binary distributions. +********************************************************************!*/ + +#include +#include "libusbk.h" + +#define mLoadLibraryExA LoadLibraryExA +#define mFreeLibrary FreeLibrary + +HMODULE mLibusbK_ModuleHandle = NULL; + +VOID LibusbK_DynApi_Free(VOID); +INT LibusbK_DynApi_Init(_inopt LPCSTR DllFullPathName); + +// Function typedefs: + +typedef VOID KUSB_API LibK_GetVersion_T(_out PKLIB_VERSION Version); + +typedef KLIB_USER_CONTEXT KUSB_API LibK_GetContext_T( + _in KLIB_HANDLE Handle, + _in KLIB_HANDLE_TYPE HandleType); + +typedef BOOL KUSB_API LibK_SetContext_T( + _in KLIB_HANDLE Handle, + _in KLIB_HANDLE_TYPE HandleType, + _in KLIB_USER_CONTEXT ContextValue); + +typedef BOOL KUSB_API LibK_SetCleanupCallback_T( + _in KLIB_HANDLE Handle, + _in KLIB_HANDLE_TYPE HandleType, + _in KLIB_HANDLE_CLEANUP_CB* CleanupCB); + +typedef BOOL KUSB_API LibK_LoadDriverAPI_T( + _out PKUSB_DRIVER_API DriverAPI, + _in INT DriverID); + +typedef BOOL KUSB_API LibK_CopyDriverAPI_T( + _out PKUSB_DRIVER_API DriverAPI, + _in KUSB_HANDLE UsbHandle); + +typedef BOOL KUSB_API LibK_GetProcAddress_T( + _out KPROC* ProcAddress, + _in INT DriverID, + _in INT FunctionID); + +typedef BOOL KUSB_API LibK_SetDefaultContext_T( + _in KLIB_HANDLE_TYPE HandleType, + _in KLIB_USER_CONTEXT ContextValue); + +typedef KLIB_USER_CONTEXT KUSB_API LibK_GetDefaultContext_T( + _in KLIB_HANDLE_TYPE HandleType); + +typedef BOOL KUSB_API LibK_Context_Init_T( + _inopt HANDLE Heap, + _in PVOID Reserved); + +typedef VOID KUSB_API LibK_Context_Free_T(VOID); + +typedef BOOL KUSB_API UsbK_Init_T ( + _out KUSB_HANDLE* InterfaceHandle, + _in KLST_DEVINFO_HANDLE DevInfo); + +typedef BOOL KUSB_API UsbK_Free_T ( + _in KUSB_HANDLE InterfaceHandle); + +typedef BOOL KUSB_API UsbK_ClaimInterface_T ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR NumberOrIndex, + _in BOOL IsIndex); + +typedef BOOL KUSB_API UsbK_ReleaseInterface_T ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR NumberOrIndex, + _in BOOL IsIndex); + +typedef BOOL KUSB_API UsbK_SetAltInterface_T ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR NumberOrIndex, + _in BOOL IsIndex, + _in UCHAR AltSettingNumber); + +typedef BOOL KUSB_API UsbK_GetAltInterface_T ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR NumberOrIndex, + _in BOOL IsIndex, + _out PUCHAR AltSettingNumber); + +typedef BOOL KUSB_API UsbK_GetDescriptor_T ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR DescriptorType, + _in UCHAR Index, + _in USHORT LanguageID, + _out PUCHAR Buffer, + _in UINT BufferLength, + _outopt PUINT LengthTransferred); + +typedef BOOL KUSB_API UsbK_ControlTransfer_T ( + _in KUSB_HANDLE InterfaceHandle, + _in WINUSB_SETUP_PACKET SetupPacket, + _refopt PUCHAR Buffer, + _in UINT BufferLength, + _outopt PUINT LengthTransferred, + _inopt LPOVERLAPPED Overlapped); + +typedef BOOL KUSB_API UsbK_SetPowerPolicy_T ( + _in KUSB_HANDLE InterfaceHandle, + _in UINT PolicyType, + _in UINT ValueLength, + _in PVOID Value); + +typedef BOOL KUSB_API UsbK_GetPowerPolicy_T ( + _in KUSB_HANDLE InterfaceHandle, + _in UINT PolicyType, + _ref PUINT ValueLength, + _out PVOID Value); + +typedef BOOL KUSB_API UsbK_SetConfiguration_T ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR ConfigurationNumber); + +typedef BOOL KUSB_API UsbK_GetConfiguration_T ( + _in KUSB_HANDLE InterfaceHandle, + _out PUCHAR ConfigurationNumber); + +typedef BOOL KUSB_API UsbK_ResetDevice_T ( + _in KUSB_HANDLE InterfaceHandle); + +typedef BOOL KUSB_API UsbK_Initialize_T ( + _in HANDLE DeviceHandle, + _out KUSB_HANDLE* InterfaceHandle); + +typedef BOOL KUSB_API UsbK_SelectInterface_T ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR NumberOrIndex, + _in BOOL IsIndex); + +typedef BOOL KUSB_API UsbK_GetAssociatedInterface_T ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR AssociatedInterfaceIndex, + _out KUSB_HANDLE* AssociatedInterfaceHandle); + +typedef BOOL KUSB_API UsbK_Clone_T ( + _in KUSB_HANDLE InterfaceHandle, + _out KUSB_HANDLE* DstInterfaceHandle); + +typedef BOOL KUSB_API UsbK_QueryInterfaceSettings_T ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR AltSettingIndex, + _out PUSB_INTERFACE_DESCRIPTOR UsbAltInterfaceDescriptor); + +typedef BOOL KUSB_API UsbK_QueryDeviceInformation_T ( + _in KUSB_HANDLE InterfaceHandle, + _in UINT InformationType, + _ref PUINT BufferLength, + _ref PVOID Buffer); + +typedef BOOL KUSB_API UsbK_SetCurrentAlternateSetting_T ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR AltSettingNumber); + +typedef BOOL KUSB_API UsbK_GetCurrentAlternateSetting_T ( + _in KUSB_HANDLE InterfaceHandle, + _out PUCHAR AltSettingNumber); + +typedef BOOL KUSB_API UsbK_QueryPipe_T ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR AltSettingNumber, + _in UCHAR PipeIndex, + _out PWINUSB_PIPE_INFORMATION PipeInformation); + +typedef BOOL KUSB_API UsbK_SetPipePolicy_T ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID, + _in UINT PolicyType, + _in UINT ValueLength, + _in PVOID Value); + +typedef BOOL KUSB_API UsbK_GetPipePolicy_T ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID, + _in UINT PolicyType, + _ref PUINT ValueLength, + _out PVOID Value); + +typedef BOOL KUSB_API UsbK_ReadPipe_T ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID, + _out PUCHAR Buffer, + _in UINT BufferLength, + _outopt PUINT LengthTransferred, + _inopt LPOVERLAPPED Overlapped); + +typedef BOOL KUSB_API UsbK_WritePipe_T ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID, + _in PUCHAR Buffer, + _in UINT BufferLength, + _outopt PUINT LengthTransferred, + _inopt LPOVERLAPPED Overlapped); + +typedef BOOL KUSB_API UsbK_ResetPipe_T ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID); + +typedef BOOL KUSB_API UsbK_AbortPipe_T ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID); + +typedef BOOL KUSB_API UsbK_FlushPipe_T ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID); + +typedef BOOL KUSB_API UsbK_IsoReadPipe_T ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID, + _out PUCHAR Buffer, + _in UINT BufferLength, + _in LPOVERLAPPED Overlapped, + _refopt PKISO_CONTEXT IsoContext); + +typedef BOOL KUSB_API UsbK_IsoWritePipe_T ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID, + _in PUCHAR Buffer, + _in UINT BufferLength, + _in LPOVERLAPPED Overlapped, + _refopt PKISO_CONTEXT IsoContext); + +typedef BOOL KUSB_API UsbK_GetCurrentFrameNumber_T ( + _in KUSB_HANDLE InterfaceHandle, + _out PUINT FrameNumber); + +typedef BOOL KUSB_API UsbK_GetOverlappedResult_T ( + _in KUSB_HANDLE InterfaceHandle, + _in LPOVERLAPPED Overlapped, + _out PUINT lpNumberOfBytesTransferred, + _in BOOL bWait); + +typedef BOOL KUSB_API UsbK_GetProperty_T ( + _in KUSB_HANDLE InterfaceHandle, + _in KUSB_PROPERTY PropertyType, + _ref PUINT PropertySize, + _out PVOID Value); + +typedef BOOL KUSB_API LstK_Init_T( + _out KLST_HANDLE* DeviceList, + _in KLST_FLAG Flags); + +typedef BOOL KUSB_API LstK_InitEx_T( + _out KLST_HANDLE* DeviceList, + _in KLST_FLAG Flags, + _in PKLST_PATTERN_MATCH PatternMatch); + +typedef BOOL KUSB_API LstK_Free_T( + _in KLST_HANDLE DeviceList); + +typedef BOOL KUSB_API LstK_Enumerate_T( + _in KLST_HANDLE DeviceList, + _in KLST_ENUM_DEVINFO_CB* EnumDevListCB, + _inopt PVOID Context); + +typedef BOOL KUSB_API LstK_Current_T( + _in KLST_HANDLE DeviceList, + _out KLST_DEVINFO_HANDLE* DeviceInfo); + +typedef BOOL KUSB_API LstK_MoveNext_T( + _in KLST_HANDLE DeviceList, + _outopt KLST_DEVINFO_HANDLE* DeviceInfo); + +typedef VOID KUSB_API LstK_MoveReset_T( + _in KLST_HANDLE DeviceList); + +typedef BOOL KUSB_API LstK_FindByVidPid_T( + _in KLST_HANDLE DeviceList, + _in INT Vid, + _in INT Pid, + _out KLST_DEVINFO_HANDLE* DeviceInfo); + +typedef BOOL KUSB_API LstK_Count_T( + _in KLST_HANDLE DeviceList, + _ref PUINT Count); + +typedef BOOL KUSB_API HotK_Init_T( + _out KHOT_HANDLE* Handle, + _ref PKHOT_PARAMS InitParams); + +typedef BOOL KUSB_API HotK_Free_T( + _in KHOT_HANDLE Handle); + +typedef VOID KUSB_API HotK_FreeAll_T(VOID); + +typedef BOOL KUSB_API OvlK_Acquire_T( + _out KOVL_HANDLE* OverlappedK, + _in KOVL_POOL_HANDLE PoolHandle); + +typedef BOOL KUSB_API OvlK_Release_T( + _in KOVL_HANDLE OverlappedK); + +typedef BOOL KUSB_API OvlK_Init_T ( + _out KOVL_POOL_HANDLE* PoolHandle, + _in KUSB_HANDLE UsbHandle, + _in INT MaxOverlappedCount, + _inopt KOVL_POOL_FLAG Flags); + +typedef BOOL KUSB_API OvlK_Free_T( + _in KOVL_POOL_HANDLE PoolHandle); + +typedef HANDLE KUSB_API OvlK_GetEventHandle_T( + _in KOVL_HANDLE OverlappedK); + +typedef BOOL KUSB_API OvlK_Wait_T( + _in KOVL_HANDLE OverlappedK, + _inopt INT TimeoutMS, + _inopt KOVL_WAIT_FLAG WaitFlags, + _out PUINT TransferredLength); + +typedef BOOL KUSB_API OvlK_WaitOldest_T( + _in KOVL_POOL_HANDLE PoolHandle, + _outopt KOVL_HANDLE* OverlappedK, + _inopt INT TimeoutMS, + _inopt KOVL_WAIT_FLAG WaitFlags, + _out PUINT TransferredLength); + +typedef BOOL KUSB_API OvlK_WaitOrCancel_T( + _in KOVL_HANDLE OverlappedK, + _inopt INT TimeoutMS, + _out PUINT TransferredLength); + +typedef BOOL KUSB_API OvlK_WaitAndRelease_T( + _in KOVL_HANDLE OverlappedK, + _inopt INT TimeoutMS, + _out PUINT TransferredLength); + +typedef BOOL KUSB_API OvlK_IsComplete_T( + _in KOVL_HANDLE OverlappedK); + +typedef BOOL KUSB_API OvlK_ReUse_T( + _in KOVL_HANDLE OverlappedK); + +typedef BOOL KUSB_API StmK_Init_T( + _out KSTM_HANDLE* StreamHandle, + _in KUSB_HANDLE UsbHandle, + _in UCHAR PipeID, + _in INT MaxTransferSize, + _in INT MaxPendingTransfers, + _in INT MaxPendingIO, + _inopt PKSTM_CALLBACK Callbacks, + _inopt KSTM_FLAG Flags); + +typedef BOOL KUSB_API StmK_Free_T( + _in KSTM_HANDLE StreamHandle); + +typedef BOOL KUSB_API StmK_Start_T( + _in KSTM_HANDLE StreamHandle); + +typedef BOOL KUSB_API StmK_Stop_T( + _in KSTM_HANDLE StreamHandle, + _in INT TimeoutCancelMS); + +typedef BOOL KUSB_API StmK_Read_T( + _in KSTM_HANDLE StreamHandle, + _out PUCHAR Buffer, + _in INT Offset, + _in INT Length, + _out PUINT TransferredLength); + +typedef BOOL KUSB_API StmK_Write_T( + _in KSTM_HANDLE StreamHandle, + _in PUCHAR Buffer, + _in INT Offset, + _in INT Length, + _out PUINT TransferredLength); + +typedef BOOL KUSB_API IsoK_Init_T( + _out PKISO_CONTEXT* IsoContext, + _in INT NumberOfPackets, + _inopt INT StartFrame); + +typedef BOOL KUSB_API IsoK_Free_T( + _in PKISO_CONTEXT IsoContext); + +typedef BOOL KUSB_API IsoK_SetPackets_T( + _in PKISO_CONTEXT IsoContext, + _in INT PacketSize); + +typedef BOOL KUSB_API IsoK_SetPacket_T( + _in PKISO_CONTEXT IsoContext, + _in INT PacketIndex, + _in PKISO_PACKET IsoPacket); + +typedef BOOL KUSB_API IsoK_GetPacket_T( + _in PKISO_CONTEXT IsoContext, + _in INT PacketIndex, + _out PKISO_PACKET IsoPacket); + +typedef BOOL KUSB_API IsoK_EnumPackets_T( + _in PKISO_CONTEXT IsoContext, + _in KISO_ENUM_PACKETS_CB* EnumPackets, + _inopt INT StartPacketIndex, + _inopt PVOID UserState); + +typedef BOOL KUSB_API IsoK_ReUse_T( + _ref PKISO_CONTEXT IsoContext); + + + +/////////////////////////////////////////////////////////////////////// + +// Function pointers: + +static LibK_GetVersion_T* pLibK_GetVersion = NULL; + +static LibK_GetContext_T* pLibK_GetContext = NULL; + +static LibK_SetContext_T* pLibK_SetContext = NULL; + +static LibK_SetCleanupCallback_T* pLibK_SetCleanupCallback = NULL; + +static LibK_LoadDriverAPI_T* pLibK_LoadDriverAPI = NULL; + +static LibK_CopyDriverAPI_T* pLibK_CopyDriverAPI = NULL; + +static LibK_GetProcAddress_T* pLibK_GetProcAddress = NULL; + +static LibK_SetDefaultContext_T* pLibK_SetDefaultContext = NULL; + +static LibK_GetDefaultContext_T* pLibK_GetDefaultContext = NULL; + +static LibK_Context_Init_T* pLibK_Context_Init = NULL; + +static LibK_Context_Free_T* pLibK_Context_Free = NULL; + +static UsbK_Init_T* pUsbK_Init = NULL; + +static UsbK_Free_T* pUsbK_Free = NULL; + +static UsbK_ClaimInterface_T* pUsbK_ClaimInterface = NULL; + +static UsbK_ReleaseInterface_T* pUsbK_ReleaseInterface = NULL; + +static UsbK_SetAltInterface_T* pUsbK_SetAltInterface = NULL; + +static UsbK_GetAltInterface_T* pUsbK_GetAltInterface = NULL; + +static UsbK_GetDescriptor_T* pUsbK_GetDescriptor = NULL; + +static UsbK_ControlTransfer_T* pUsbK_ControlTransfer = NULL; + +static UsbK_SetPowerPolicy_T* pUsbK_SetPowerPolicy = NULL; + +static UsbK_GetPowerPolicy_T* pUsbK_GetPowerPolicy = NULL; + +static UsbK_SetConfiguration_T* pUsbK_SetConfiguration = NULL; + +static UsbK_GetConfiguration_T* pUsbK_GetConfiguration = NULL; + +static UsbK_ResetDevice_T* pUsbK_ResetDevice = NULL; + +static UsbK_Initialize_T* pUsbK_Initialize = NULL; + +static UsbK_SelectInterface_T* pUsbK_SelectInterface = NULL; + +static UsbK_GetAssociatedInterface_T* pUsbK_GetAssociatedInterface = NULL; + +static UsbK_Clone_T* pUsbK_Clone = NULL; + +static UsbK_QueryInterfaceSettings_T* pUsbK_QueryInterfaceSettings = NULL; + +static UsbK_QueryDeviceInformation_T* pUsbK_QueryDeviceInformation = NULL; + +static UsbK_SetCurrentAlternateSetting_T* pUsbK_SetCurrentAlternateSetting = NULL; + +static UsbK_GetCurrentAlternateSetting_T* pUsbK_GetCurrentAlternateSetting = NULL; + +static UsbK_QueryPipe_T* pUsbK_QueryPipe = NULL; + +static UsbK_SetPipePolicy_T* pUsbK_SetPipePolicy = NULL; + +static UsbK_GetPipePolicy_T* pUsbK_GetPipePolicy = NULL; + +static UsbK_ReadPipe_T* pUsbK_ReadPipe = NULL; + +static UsbK_WritePipe_T* pUsbK_WritePipe = NULL; + +static UsbK_ResetPipe_T* pUsbK_ResetPipe = NULL; + +static UsbK_AbortPipe_T* pUsbK_AbortPipe = NULL; + +static UsbK_FlushPipe_T* pUsbK_FlushPipe = NULL; + +static UsbK_IsoReadPipe_T* pUsbK_IsoReadPipe = NULL; + +static UsbK_IsoWritePipe_T* pUsbK_IsoWritePipe = NULL; + +static UsbK_GetCurrentFrameNumber_T* pUsbK_GetCurrentFrameNumber = NULL; + +static UsbK_GetOverlappedResult_T* pUsbK_GetOverlappedResult = NULL; + +static UsbK_GetProperty_T* pUsbK_GetProperty = NULL; + +static LstK_Init_T* pLstK_Init = NULL; + +static LstK_InitEx_T* pLstK_InitEx = NULL; + +static LstK_Free_T* pLstK_Free = NULL; + +static LstK_Enumerate_T* pLstK_Enumerate = NULL; + +static LstK_Current_T* pLstK_Current = NULL; + +static LstK_MoveNext_T* pLstK_MoveNext = NULL; + +static LstK_MoveReset_T* pLstK_MoveReset = NULL; + +static LstK_FindByVidPid_T* pLstK_FindByVidPid = NULL; + +static LstK_Count_T* pLstK_Count = NULL; + +static HotK_Init_T* pHotK_Init = NULL; + +static HotK_Free_T* pHotK_Free = NULL; + +static HotK_FreeAll_T* pHotK_FreeAll = NULL; + +static OvlK_Acquire_T* pOvlK_Acquire = NULL; + +static OvlK_Release_T* pOvlK_Release = NULL; + +static OvlK_Init_T* pOvlK_Init = NULL; + +static OvlK_Free_T* pOvlK_Free = NULL; + +static OvlK_GetEventHandle_T* pOvlK_GetEventHandle = NULL; + +static OvlK_Wait_T* pOvlK_Wait = NULL; + +static OvlK_WaitOldest_T* pOvlK_WaitOldest = NULL; + +static OvlK_WaitOrCancel_T* pOvlK_WaitOrCancel = NULL; + +static OvlK_WaitAndRelease_T* pOvlK_WaitAndRelease = NULL; + +static OvlK_IsComplete_T* pOvlK_IsComplete = NULL; + +static OvlK_ReUse_T* pOvlK_ReUse = NULL; + +static StmK_Init_T* pStmK_Init = NULL; + +static StmK_Free_T* pStmK_Free = NULL; + +static StmK_Start_T* pStmK_Start = NULL; + +static StmK_Stop_T* pStmK_Stop = NULL; + +static StmK_Read_T* pStmK_Read = NULL; + +static StmK_Write_T* pStmK_Write = NULL; + +static IsoK_Init_T* pIsoK_Init = NULL; + +static IsoK_Free_T* pIsoK_Free = NULL; + +static IsoK_SetPackets_T* pIsoK_SetPackets = NULL; + +static IsoK_SetPacket_T* pIsoK_SetPacket = NULL; + +static IsoK_GetPacket_T* pIsoK_GetPacket = NULL; + +static IsoK_EnumPackets_T* pIsoK_EnumPackets = NULL; + +static IsoK_ReUse_T* pIsoK_ReUse = NULL; + + + +/////////////////////////////////////////////////////////////////////// + + +VOID LibusbK_DynApi_Free(VOID) +{ + if (mLibusbK_ModuleHandle) + { + mFreeLibrary(mLibusbK_ModuleHandle); + mLibusbK_ModuleHandle = NULL; + + // Set all function pointers to null: + + pLibK_GetVersion = NULL; + + pLibK_GetContext = NULL; + + pLibK_SetContext = NULL; + + pLibK_SetCleanupCallback = NULL; + + pLibK_LoadDriverAPI = NULL; + + pLibK_CopyDriverAPI = NULL; + + pLibK_GetProcAddress = NULL; + + pLibK_SetDefaultContext = NULL; + + pLibK_GetDefaultContext = NULL; + + pLibK_Context_Init = NULL; + + pLibK_Context_Free = NULL; + + pUsbK_Init = NULL; + + pUsbK_Free = NULL; + + pUsbK_ClaimInterface = NULL; + + pUsbK_ReleaseInterface = NULL; + + pUsbK_SetAltInterface = NULL; + + pUsbK_GetAltInterface = NULL; + + pUsbK_GetDescriptor = NULL; + + pUsbK_ControlTransfer = NULL; + + pUsbK_SetPowerPolicy = NULL; + + pUsbK_GetPowerPolicy = NULL; + + pUsbK_SetConfiguration = NULL; + + pUsbK_GetConfiguration = NULL; + + pUsbK_ResetDevice = NULL; + + pUsbK_Initialize = NULL; + + pUsbK_SelectInterface = NULL; + + pUsbK_GetAssociatedInterface = NULL; + + pUsbK_Clone = NULL; + + pUsbK_QueryInterfaceSettings = NULL; + + pUsbK_QueryDeviceInformation = NULL; + + pUsbK_SetCurrentAlternateSetting = NULL; + + pUsbK_GetCurrentAlternateSetting = NULL; + + pUsbK_QueryPipe = NULL; + + pUsbK_SetPipePolicy = NULL; + + pUsbK_GetPipePolicy = NULL; + + pUsbK_ReadPipe = NULL; + + pUsbK_WritePipe = NULL; + + pUsbK_ResetPipe = NULL; + + pUsbK_AbortPipe = NULL; + + pUsbK_FlushPipe = NULL; + + pUsbK_IsoReadPipe = NULL; + + pUsbK_IsoWritePipe = NULL; + + pUsbK_GetCurrentFrameNumber = NULL; + + pUsbK_GetOverlappedResult = NULL; + + pUsbK_GetProperty = NULL; + + pLstK_Init = NULL; + + pLstK_InitEx = NULL; + + pLstK_Free = NULL; + + pLstK_Enumerate = NULL; + + pLstK_Current = NULL; + + pLstK_MoveNext = NULL; + + pLstK_MoveReset = NULL; + + pLstK_FindByVidPid = NULL; + + pLstK_Count = NULL; + + pHotK_Init = NULL; + + pHotK_Free = NULL; + + pHotK_FreeAll = NULL; + + pOvlK_Acquire = NULL; + + pOvlK_Release = NULL; + + pOvlK_Init = NULL; + + pOvlK_Free = NULL; + + pOvlK_GetEventHandle = NULL; + + pOvlK_Wait = NULL; + + pOvlK_WaitOldest = NULL; + + pOvlK_WaitOrCancel = NULL; + + pOvlK_WaitAndRelease = NULL; + + pOvlK_IsComplete = NULL; + + pOvlK_ReUse = NULL; + + pStmK_Init = NULL; + + pStmK_Free = NULL; + + pStmK_Start = NULL; + + pStmK_Stop = NULL; + + pStmK_Read = NULL; + + pStmK_Write = NULL; + + pIsoK_Init = NULL; + + pIsoK_Free = NULL; + + pIsoK_SetPackets = NULL; + + pIsoK_SetPacket = NULL; + + pIsoK_GetPacket = NULL; + + pIsoK_EnumPackets = NULL; + + pIsoK_ReUse = NULL; + + + + /////////////////////////////////////////////////////////////////////// + } +} + +INT LibusbK_DynApi_Init(_inopt LPCSTR DllFullPathName) +{ + LPCSTR dllFullPathName = (DllFullPathName == NULL) ? "libusbK.dll" : DllFullPathName; + INT funcLoadFailCount = 0; + + if (mLibusbK_ModuleHandle) LibusbK_DynApi_Free(); + + if (DllFullPathName) + mLibusbK_ModuleHandle = mLoadLibraryExA(dllFullPathName, NULL, LOAD_WITH_ALTERED_SEARCH_PATH); + else + mLibusbK_ModuleHandle = mLoadLibraryExA(dllFullPathName, NULL, 0); + + if (mLibusbK_ModuleHandle == NULL) return -1; + + + // Function loads: + + if ((pLibK_GetVersion = (LibK_GetVersion_T*)GetProcAddress(mLibusbK_ModuleHandle, "LibK_GetVersion")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function LibK_GetVersion.\n"); + } + + if ((pLibK_GetContext = (LibK_GetContext_T*)GetProcAddress(mLibusbK_ModuleHandle, "LibK_GetContext")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function LibK_GetContext.\n"); + } + + if ((pLibK_SetContext = (LibK_SetContext_T*)GetProcAddress(mLibusbK_ModuleHandle, "LibK_SetContext")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function LibK_SetContext.\n"); + } + + if ((pLibK_SetCleanupCallback = (LibK_SetCleanupCallback_T*)GetProcAddress(mLibusbK_ModuleHandle, "LibK_SetCleanupCallback")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function LibK_SetCleanupCallback.\n"); + } + + if ((pLibK_LoadDriverAPI = (LibK_LoadDriverAPI_T*)GetProcAddress(mLibusbK_ModuleHandle, "LibK_LoadDriverAPI")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function LibK_LoadDriverAPI.\n"); + } + + if ((pLibK_CopyDriverAPI = (LibK_CopyDriverAPI_T*)GetProcAddress(mLibusbK_ModuleHandle, "LibK_CopyDriverAPI")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function LibK_CopyDriverAPI.\n"); + } + + if ((pLibK_GetProcAddress = (LibK_GetProcAddress_T*)GetProcAddress(mLibusbK_ModuleHandle, "LibK_GetProcAddress")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function LibK_GetProcAddress.\n"); + } + + if ((pLibK_SetDefaultContext = (LibK_SetDefaultContext_T*)GetProcAddress(mLibusbK_ModuleHandle, "LibK_SetDefaultContext")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function LibK_SetDefaultContext.\n"); + } + + if ((pLibK_GetDefaultContext = (LibK_GetDefaultContext_T*)GetProcAddress(mLibusbK_ModuleHandle, "LibK_GetDefaultContext")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function LibK_GetDefaultContext.\n"); + } + + if ((pLibK_Context_Init = (LibK_Context_Init_T*)GetProcAddress(mLibusbK_ModuleHandle, "LibK_Context_Init")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function LibK_Context_Init.\n"); + } + + if ((pLibK_Context_Free = (LibK_Context_Free_T*)GetProcAddress(mLibusbK_ModuleHandle, "LibK_Context_Free")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function LibK_Context_Free.\n"); + } + + if ((pUsbK_Init = (UsbK_Init_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_Init")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_Init.\n"); + } + + if ((pUsbK_Free = (UsbK_Free_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_Free")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_Free.\n"); + } + + if ((pUsbK_ClaimInterface = (UsbK_ClaimInterface_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_ClaimInterface")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_ClaimInterface.\n"); + } + + if ((pUsbK_ReleaseInterface = (UsbK_ReleaseInterface_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_ReleaseInterface")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_ReleaseInterface.\n"); + } + + if ((pUsbK_SetAltInterface = (UsbK_SetAltInterface_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_SetAltInterface")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_SetAltInterface.\n"); + } + + if ((pUsbK_GetAltInterface = (UsbK_GetAltInterface_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_GetAltInterface")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_GetAltInterface.\n"); + } + + if ((pUsbK_GetDescriptor = (UsbK_GetDescriptor_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_GetDescriptor")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_GetDescriptor.\n"); + } + + if ((pUsbK_ControlTransfer = (UsbK_ControlTransfer_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_ControlTransfer")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_ControlTransfer.\n"); + } + + if ((pUsbK_SetPowerPolicy = (UsbK_SetPowerPolicy_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_SetPowerPolicy")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_SetPowerPolicy.\n"); + } + + if ((pUsbK_GetPowerPolicy = (UsbK_GetPowerPolicy_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_GetPowerPolicy")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_GetPowerPolicy.\n"); + } + + if ((pUsbK_SetConfiguration = (UsbK_SetConfiguration_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_SetConfiguration")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_SetConfiguration.\n"); + } + + if ((pUsbK_GetConfiguration = (UsbK_GetConfiguration_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_GetConfiguration")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_GetConfiguration.\n"); + } + + if ((pUsbK_ResetDevice = (UsbK_ResetDevice_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_ResetDevice")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_ResetDevice.\n"); + } + + if ((pUsbK_Initialize = (UsbK_Initialize_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_Initialize")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_Initialize.\n"); + } + + if ((pUsbK_SelectInterface = (UsbK_SelectInterface_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_SelectInterface")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_SelectInterface.\n"); + } + + if ((pUsbK_GetAssociatedInterface = (UsbK_GetAssociatedInterface_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_GetAssociatedInterface")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_GetAssociatedInterface.\n"); + } + + if ((pUsbK_Clone = (UsbK_Clone_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_Clone")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_Clone.\n"); + } + + if ((pUsbK_QueryInterfaceSettings = (UsbK_QueryInterfaceSettings_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_QueryInterfaceSettings")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_QueryInterfaceSettings.\n"); + } + + if ((pUsbK_QueryDeviceInformation = (UsbK_QueryDeviceInformation_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_QueryDeviceInformation")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_QueryDeviceInformation.\n"); + } + + if ((pUsbK_SetCurrentAlternateSetting = (UsbK_SetCurrentAlternateSetting_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_SetCurrentAlternateSetting")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_SetCurrentAlternateSetting.\n"); + } + + if ((pUsbK_GetCurrentAlternateSetting = (UsbK_GetCurrentAlternateSetting_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_GetCurrentAlternateSetting")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_GetCurrentAlternateSetting.\n"); + } + + if ((pUsbK_QueryPipe = (UsbK_QueryPipe_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_QueryPipe")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_QueryPipe.\n"); + } + + if ((pUsbK_SetPipePolicy = (UsbK_SetPipePolicy_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_SetPipePolicy")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_SetPipePolicy.\n"); + } + + if ((pUsbK_GetPipePolicy = (UsbK_GetPipePolicy_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_GetPipePolicy")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_GetPipePolicy.\n"); + } + + if ((pUsbK_ReadPipe = (UsbK_ReadPipe_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_ReadPipe")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_ReadPipe.\n"); + } + + if ((pUsbK_WritePipe = (UsbK_WritePipe_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_WritePipe")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_WritePipe.\n"); + } + + if ((pUsbK_ResetPipe = (UsbK_ResetPipe_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_ResetPipe")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_ResetPipe.\n"); + } + + if ((pUsbK_AbortPipe = (UsbK_AbortPipe_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_AbortPipe")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_AbortPipe.\n"); + } + + if ((pUsbK_FlushPipe = (UsbK_FlushPipe_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_FlushPipe")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_FlushPipe.\n"); + } + + if ((pUsbK_IsoReadPipe = (UsbK_IsoReadPipe_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_IsoReadPipe")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_IsoReadPipe.\n"); + } + + if ((pUsbK_IsoWritePipe = (UsbK_IsoWritePipe_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_IsoWritePipe")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_IsoWritePipe.\n"); + } + + if ((pUsbK_GetCurrentFrameNumber = (UsbK_GetCurrentFrameNumber_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_GetCurrentFrameNumber")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_GetCurrentFrameNumber.\n"); + } + + if ((pUsbK_GetOverlappedResult = (UsbK_GetOverlappedResult_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_GetOverlappedResult")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_GetOverlappedResult.\n"); + } + + if ((pUsbK_GetProperty = (UsbK_GetProperty_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_GetProperty")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_GetProperty.\n"); + } + + if ((pLstK_Init = (LstK_Init_T*)GetProcAddress(mLibusbK_ModuleHandle, "LstK_Init")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function LstK_Init.\n"); + } + + if ((pLstK_InitEx = (LstK_InitEx_T*)GetProcAddress(mLibusbK_ModuleHandle, "LstK_InitEx")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function LstK_InitEx.\n"); + } + + if ((pLstK_Free = (LstK_Free_T*)GetProcAddress(mLibusbK_ModuleHandle, "LstK_Free")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function LstK_Free.\n"); + } + + if ((pLstK_Enumerate = (LstK_Enumerate_T*)GetProcAddress(mLibusbK_ModuleHandle, "LstK_Enumerate")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function LstK_Enumerate.\n"); + } + + if ((pLstK_Current = (LstK_Current_T*)GetProcAddress(mLibusbK_ModuleHandle, "LstK_Current")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function LstK_Current.\n"); + } + + if ((pLstK_MoveNext = (LstK_MoveNext_T*)GetProcAddress(mLibusbK_ModuleHandle, "LstK_MoveNext")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function LstK_MoveNext.\n"); + } + + if ((pLstK_MoveReset = (LstK_MoveReset_T*)GetProcAddress(mLibusbK_ModuleHandle, "LstK_MoveReset")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function LstK_MoveReset.\n"); + } + + if ((pLstK_FindByVidPid = (LstK_FindByVidPid_T*)GetProcAddress(mLibusbK_ModuleHandle, "LstK_FindByVidPid")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function LstK_FindByVidPid.\n"); + } + + if ((pLstK_Count = (LstK_Count_T*)GetProcAddress(mLibusbK_ModuleHandle, "LstK_Count")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function LstK_Count.\n"); + } + + if ((pHotK_Init = (HotK_Init_T*)GetProcAddress(mLibusbK_ModuleHandle, "HotK_Init")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function HotK_Init.\n"); + } + + if ((pHotK_Free = (HotK_Free_T*)GetProcAddress(mLibusbK_ModuleHandle, "HotK_Free")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function HotK_Free.\n"); + } + + if ((pHotK_FreeAll = (HotK_FreeAll_T*)GetProcAddress(mLibusbK_ModuleHandle, "HotK_FreeAll")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function HotK_FreeAll.\n"); + } + + if ((pOvlK_Acquire = (OvlK_Acquire_T*)GetProcAddress(mLibusbK_ModuleHandle, "OvlK_Acquire")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function OvlK_Acquire.\n"); + } + + if ((pOvlK_Release = (OvlK_Release_T*)GetProcAddress(mLibusbK_ModuleHandle, "OvlK_Release")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function OvlK_Release.\n"); + } + + if ((pOvlK_Init = (OvlK_Init_T*)GetProcAddress(mLibusbK_ModuleHandle, "OvlK_Init")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function OvlK_Init.\n"); + } + + if ((pOvlK_Free = (OvlK_Free_T*)GetProcAddress(mLibusbK_ModuleHandle, "OvlK_Free")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function OvlK_Free.\n"); + } + + if ((pOvlK_GetEventHandle = (OvlK_GetEventHandle_T*)GetProcAddress(mLibusbK_ModuleHandle, "OvlK_GetEventHandle")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function OvlK_GetEventHandle.\n"); + } + + if ((pOvlK_Wait = (OvlK_Wait_T*)GetProcAddress(mLibusbK_ModuleHandle, "OvlK_Wait")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function OvlK_Wait.\n"); + } + + if ((pOvlK_WaitOldest = (OvlK_WaitOldest_T*)GetProcAddress(mLibusbK_ModuleHandle, "OvlK_WaitOldest")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function OvlK_WaitOldest.\n"); + } + + if ((pOvlK_WaitOrCancel = (OvlK_WaitOrCancel_T*)GetProcAddress(mLibusbK_ModuleHandle, "OvlK_WaitOrCancel")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function OvlK_WaitOrCancel.\n"); + } + + if ((pOvlK_WaitAndRelease = (OvlK_WaitAndRelease_T*)GetProcAddress(mLibusbK_ModuleHandle, "OvlK_WaitAndRelease")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function OvlK_WaitAndRelease.\n"); + } + + if ((pOvlK_IsComplete = (OvlK_IsComplete_T*)GetProcAddress(mLibusbK_ModuleHandle, "OvlK_IsComplete")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function OvlK_IsComplete.\n"); + } + + if ((pOvlK_ReUse = (OvlK_ReUse_T*)GetProcAddress(mLibusbK_ModuleHandle, "OvlK_ReUse")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function OvlK_ReUse.\n"); + } + + if ((pStmK_Init = (StmK_Init_T*)GetProcAddress(mLibusbK_ModuleHandle, "StmK_Init")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function StmK_Init.\n"); + } + + if ((pStmK_Free = (StmK_Free_T*)GetProcAddress(mLibusbK_ModuleHandle, "StmK_Free")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function StmK_Free.\n"); + } + + if ((pStmK_Start = (StmK_Start_T*)GetProcAddress(mLibusbK_ModuleHandle, "StmK_Start")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function StmK_Start.\n"); + } + + if ((pStmK_Stop = (StmK_Stop_T*)GetProcAddress(mLibusbK_ModuleHandle, "StmK_Stop")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function StmK_Stop.\n"); + } + + if ((pStmK_Read = (StmK_Read_T*)GetProcAddress(mLibusbK_ModuleHandle, "StmK_Read")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function StmK_Read.\n"); + } + + if ((pStmK_Write = (StmK_Write_T*)GetProcAddress(mLibusbK_ModuleHandle, "StmK_Write")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function StmK_Write.\n"); + } + + if ((pIsoK_Init = (IsoK_Init_T*)GetProcAddress(mLibusbK_ModuleHandle, "IsoK_Init")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function IsoK_Init.\n"); + } + + if ((pIsoK_Free = (IsoK_Free_T*)GetProcAddress(mLibusbK_ModuleHandle, "IsoK_Free")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function IsoK_Free.\n"); + } + + if ((pIsoK_SetPackets = (IsoK_SetPackets_T*)GetProcAddress(mLibusbK_ModuleHandle, "IsoK_SetPackets")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function IsoK_SetPackets.\n"); + } + + if ((pIsoK_SetPacket = (IsoK_SetPacket_T*)GetProcAddress(mLibusbK_ModuleHandle, "IsoK_SetPacket")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function IsoK_SetPacket.\n"); + } + + if ((pIsoK_GetPacket = (IsoK_GetPacket_T*)GetProcAddress(mLibusbK_ModuleHandle, "IsoK_GetPacket")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function IsoK_GetPacket.\n"); + } + + if ((pIsoK_EnumPackets = (IsoK_EnumPackets_T*)GetProcAddress(mLibusbK_ModuleHandle, "IsoK_EnumPackets")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function IsoK_EnumPackets.\n"); + } + + if ((pIsoK_ReUse = (IsoK_ReUse_T*)GetProcAddress(mLibusbK_ModuleHandle, "IsoK_ReUse")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function IsoK_ReUse.\n"); + } + + + + /////////////////////////////////////////////////////////////////////// + + return funcLoadFailCount; +} + +// Function wrappers: + +KUSB_EXP VOID KUSB_API LibK_GetVersion(_out PKLIB_VERSION Version) +{ + pLibK_GetVersion(Version); +} + +KUSB_EXP KLIB_USER_CONTEXT KUSB_API LibK_GetContext( + _in KLIB_HANDLE Handle, + _in KLIB_HANDLE_TYPE HandleType) +{ + return pLibK_GetContext(Handle, HandleType); +} + +KUSB_EXP BOOL KUSB_API LibK_SetContext( + _in KLIB_HANDLE Handle, + _in KLIB_HANDLE_TYPE HandleType, + _in KLIB_USER_CONTEXT ContextValue) +{ + return pLibK_SetContext(Handle, HandleType, ContextValue); +} + +KUSB_EXP BOOL KUSB_API LibK_SetCleanupCallback( + _in KLIB_HANDLE Handle, + _in KLIB_HANDLE_TYPE HandleType, + _in KLIB_HANDLE_CLEANUP_CB* CleanupCB) +{ + return pLibK_SetCleanupCallback(Handle, HandleType, CleanupCB); +} + +KUSB_EXP BOOL KUSB_API LibK_LoadDriverAPI( + _out PKUSB_DRIVER_API DriverAPI, + _in INT DriverID) +{ + return pLibK_LoadDriverAPI(DriverAPI, DriverID); +} + +KUSB_EXP BOOL KUSB_API LibK_CopyDriverAPI( + _out PKUSB_DRIVER_API DriverAPI, + _in KUSB_HANDLE UsbHandle) +{ + return pLibK_CopyDriverAPI(DriverAPI, UsbHandle); +} + +KUSB_EXP BOOL KUSB_API LibK_GetProcAddress( + _out KPROC* ProcAddress, + _in INT DriverID, + _in INT FunctionID) +{ + return pLibK_GetProcAddress(ProcAddress, DriverID, FunctionID); +} + +KUSB_EXP BOOL KUSB_API LibK_SetDefaultContext( + _in KLIB_HANDLE_TYPE HandleType, + _in KLIB_USER_CONTEXT ContextValue) +{ + return pLibK_SetDefaultContext(HandleType, ContextValue); +} + +KUSB_EXP KLIB_USER_CONTEXT KUSB_API LibK_GetDefaultContext( + _in KLIB_HANDLE_TYPE HandleType) +{ + return pLibK_GetDefaultContext(HandleType); +} + +KUSB_EXP BOOL KUSB_API LibK_Context_Init( + _inopt HANDLE Heap, + _in PVOID Reserved) +{ + return pLibK_Context_Init(Heap, Reserved); +} + +KUSB_EXP VOID KUSB_API LibK_Context_Free(VOID) +{ + pLibK_Context_Free(); +} + +KUSB_EXP BOOL KUSB_API UsbK_Init ( + _out KUSB_HANDLE* InterfaceHandle, + _in KLST_DEVINFO_HANDLE DevInfo) +{ + return pUsbK_Init(InterfaceHandle, DevInfo); +} + +KUSB_EXP BOOL KUSB_API UsbK_Free ( + _in KUSB_HANDLE InterfaceHandle) +{ + return pUsbK_Free(InterfaceHandle); +} + +KUSB_EXP BOOL KUSB_API UsbK_ClaimInterface ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR NumberOrIndex, + _in BOOL IsIndex) +{ + return pUsbK_ClaimInterface(InterfaceHandle, NumberOrIndex, IsIndex); +} + +KUSB_EXP BOOL KUSB_API UsbK_ReleaseInterface ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR NumberOrIndex, + _in BOOL IsIndex) +{ + return pUsbK_ReleaseInterface(InterfaceHandle, NumberOrIndex, IsIndex); +} + +KUSB_EXP BOOL KUSB_API UsbK_SetAltInterface ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR NumberOrIndex, + _in BOOL IsIndex, + _in UCHAR AltSettingNumber) +{ + return pUsbK_SetAltInterface(InterfaceHandle, NumberOrIndex, IsIndex, AltSettingNumber); +} + +KUSB_EXP BOOL KUSB_API UsbK_GetAltInterface ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR NumberOrIndex, + _in BOOL IsIndex, + _out PUCHAR AltSettingNumber) +{ + return pUsbK_GetAltInterface(InterfaceHandle, NumberOrIndex, IsIndex, AltSettingNumber); +} + +KUSB_EXP BOOL KUSB_API UsbK_GetDescriptor ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR DescriptorType, + _in UCHAR Index, + _in USHORT LanguageID, + _out PUCHAR Buffer, + _in UINT BufferLength, + _outopt PUINT LengthTransferred) +{ + return pUsbK_GetDescriptor(InterfaceHandle, DescriptorType, Index, LanguageID, Buffer, BufferLength, LengthTransferred); +} + +KUSB_EXP BOOL KUSB_API UsbK_ControlTransfer ( + _in KUSB_HANDLE InterfaceHandle, + _in WINUSB_SETUP_PACKET SetupPacket, + _refopt PUCHAR Buffer, + _in UINT BufferLength, + _outopt PUINT LengthTransferred, + _inopt LPOVERLAPPED Overlapped) +{ + return pUsbK_ControlTransfer(InterfaceHandle, SetupPacket, Buffer, BufferLength, LengthTransferred, Overlapped); +} + +KUSB_EXP BOOL KUSB_API UsbK_SetPowerPolicy ( + _in KUSB_HANDLE InterfaceHandle, + _in UINT PolicyType, + _in UINT ValueLength, + _in PVOID Value) +{ + return pUsbK_SetPowerPolicy(InterfaceHandle, PolicyType, ValueLength, Value); +} + +KUSB_EXP BOOL KUSB_API UsbK_GetPowerPolicy ( + _in KUSB_HANDLE InterfaceHandle, + _in UINT PolicyType, + _ref PUINT ValueLength, + _out PVOID Value) +{ + return pUsbK_GetPowerPolicy(InterfaceHandle, PolicyType, ValueLength, Value); +} + +KUSB_EXP BOOL KUSB_API UsbK_SetConfiguration ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR ConfigurationNumber) +{ + return pUsbK_SetConfiguration(InterfaceHandle, ConfigurationNumber); +} + +KUSB_EXP BOOL KUSB_API UsbK_GetConfiguration ( + _in KUSB_HANDLE InterfaceHandle, + _out PUCHAR ConfigurationNumber) +{ + return pUsbK_GetConfiguration(InterfaceHandle, ConfigurationNumber); +} + +KUSB_EXP BOOL KUSB_API UsbK_ResetDevice ( + _in KUSB_HANDLE InterfaceHandle) +{ + return pUsbK_ResetDevice(InterfaceHandle); +} + +KUSB_EXP BOOL KUSB_API UsbK_Initialize ( + _in HANDLE DeviceHandle, + _out KUSB_HANDLE* InterfaceHandle) +{ + return pUsbK_Initialize(DeviceHandle, InterfaceHandle); +} + +KUSB_EXP BOOL KUSB_API UsbK_SelectInterface ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR NumberOrIndex, + _in BOOL IsIndex) +{ + return pUsbK_SelectInterface(InterfaceHandle, NumberOrIndex, IsIndex); +} + +KUSB_EXP BOOL KUSB_API UsbK_GetAssociatedInterface ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR AssociatedInterfaceIndex, + _out KUSB_HANDLE* AssociatedInterfaceHandle) +{ + return pUsbK_GetAssociatedInterface(InterfaceHandle, AssociatedInterfaceIndex, AssociatedInterfaceHandle); +} + +KUSB_EXP BOOL KUSB_API UsbK_Clone ( + _in KUSB_HANDLE InterfaceHandle, + _out KUSB_HANDLE* DstInterfaceHandle) +{ + return pUsbK_Clone(InterfaceHandle, DstInterfaceHandle); +} + +KUSB_EXP BOOL KUSB_API UsbK_QueryInterfaceSettings ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR AltSettingIndex, + _out PUSB_INTERFACE_DESCRIPTOR UsbAltInterfaceDescriptor) +{ + return pUsbK_QueryInterfaceSettings(InterfaceHandle, AltSettingIndex, UsbAltInterfaceDescriptor); +} + +KUSB_EXP BOOL KUSB_API UsbK_QueryDeviceInformation ( + _in KUSB_HANDLE InterfaceHandle, + _in UINT InformationType, + _ref PUINT BufferLength, + _ref PVOID Buffer) +{ + return pUsbK_QueryDeviceInformation(InterfaceHandle, InformationType, BufferLength, Buffer); +} + +KUSB_EXP BOOL KUSB_API UsbK_SetCurrentAlternateSetting ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR AltSettingNumber) +{ + return pUsbK_SetCurrentAlternateSetting(InterfaceHandle, AltSettingNumber); +} + +KUSB_EXP BOOL KUSB_API UsbK_GetCurrentAlternateSetting ( + _in KUSB_HANDLE InterfaceHandle, + _out PUCHAR AltSettingNumber) +{ + return pUsbK_GetCurrentAlternateSetting(InterfaceHandle, AltSettingNumber); +} + +KUSB_EXP BOOL KUSB_API UsbK_QueryPipe ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR AltSettingNumber, + _in UCHAR PipeIndex, + _out PWINUSB_PIPE_INFORMATION PipeInformation) +{ + return pUsbK_QueryPipe(InterfaceHandle, AltSettingNumber, PipeIndex, PipeInformation); +} + +KUSB_EXP BOOL KUSB_API UsbK_SetPipePolicy ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID, + _in UINT PolicyType, + _in UINT ValueLength, + _in PVOID Value) +{ + return pUsbK_SetPipePolicy(InterfaceHandle, PipeID, PolicyType, ValueLength, Value); +} + +KUSB_EXP BOOL KUSB_API UsbK_GetPipePolicy ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID, + _in UINT PolicyType, + _ref PUINT ValueLength, + _out PVOID Value) +{ + return pUsbK_GetPipePolicy(InterfaceHandle, PipeID, PolicyType, ValueLength, Value); +} + +KUSB_EXP BOOL KUSB_API UsbK_ReadPipe ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID, + _out PUCHAR Buffer, + _in UINT BufferLength, + _outopt PUINT LengthTransferred, + _inopt LPOVERLAPPED Overlapped) +{ + return pUsbK_ReadPipe(InterfaceHandle, PipeID, Buffer, BufferLength, LengthTransferred, Overlapped); +} + +KUSB_EXP BOOL KUSB_API UsbK_WritePipe ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID, + _in PUCHAR Buffer, + _in UINT BufferLength, + _outopt PUINT LengthTransferred, + _inopt LPOVERLAPPED Overlapped) +{ + return pUsbK_WritePipe(InterfaceHandle, PipeID, Buffer, BufferLength, LengthTransferred, Overlapped); +} + +KUSB_EXP BOOL KUSB_API UsbK_ResetPipe ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID) +{ + return pUsbK_ResetPipe(InterfaceHandle, PipeID); +} + +KUSB_EXP BOOL KUSB_API UsbK_AbortPipe ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID) +{ + return pUsbK_AbortPipe(InterfaceHandle, PipeID); +} + +KUSB_EXP BOOL KUSB_API UsbK_FlushPipe ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID) +{ + return pUsbK_FlushPipe(InterfaceHandle, PipeID); +} + +KUSB_EXP BOOL KUSB_API UsbK_IsoReadPipe ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID, + _out PUCHAR Buffer, + _in UINT BufferLength, + _in LPOVERLAPPED Overlapped, + _refopt PKISO_CONTEXT IsoContext) +{ + return pUsbK_IsoReadPipe(InterfaceHandle, PipeID, Buffer, BufferLength, Overlapped, IsoContext); +} + +KUSB_EXP BOOL KUSB_API UsbK_IsoWritePipe ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID, + _in PUCHAR Buffer, + _in UINT BufferLength, + _in LPOVERLAPPED Overlapped, + _refopt PKISO_CONTEXT IsoContext) +{ + return pUsbK_IsoWritePipe(InterfaceHandle, PipeID, Buffer, BufferLength, Overlapped, IsoContext); +} + +KUSB_EXP BOOL KUSB_API UsbK_GetCurrentFrameNumber ( + _in KUSB_HANDLE InterfaceHandle, + _out PUINT FrameNumber) +{ + return pUsbK_GetCurrentFrameNumber(InterfaceHandle, FrameNumber); +} + +KUSB_EXP BOOL KUSB_API UsbK_GetOverlappedResult ( + _in KUSB_HANDLE InterfaceHandle, + _in LPOVERLAPPED Overlapped, + _out PUINT lpNumberOfBytesTransferred, + _in BOOL bWait) +{ + return pUsbK_GetOverlappedResult(InterfaceHandle, Overlapped, lpNumberOfBytesTransferred, bWait); +} + +KUSB_EXP BOOL KUSB_API UsbK_GetProperty ( + _in KUSB_HANDLE InterfaceHandle, + _in KUSB_PROPERTY PropertyType, + _ref PUINT PropertySize, + _out PVOID Value) +{ + return pUsbK_GetProperty(InterfaceHandle, PropertyType, PropertySize, Value); +} + +KUSB_EXP BOOL KUSB_API LstK_Init( + _out KLST_HANDLE* DeviceList, + _in KLST_FLAG Flags) +{ + return pLstK_Init(DeviceList, Flags); +} + +KUSB_EXP BOOL KUSB_API LstK_InitEx( + _out KLST_HANDLE* DeviceList, + _in KLST_FLAG Flags, + _in PKLST_PATTERN_MATCH PatternMatch) +{ + return pLstK_InitEx(DeviceList, Flags, PatternMatch); +} + +KUSB_EXP BOOL KUSB_API LstK_Free( + _in KLST_HANDLE DeviceList) +{ + return pLstK_Free(DeviceList); +} + +KUSB_EXP BOOL KUSB_API LstK_Enumerate( + _in KLST_HANDLE DeviceList, + _in KLST_ENUM_DEVINFO_CB* EnumDevListCB, + _inopt PVOID Context) +{ + return pLstK_Enumerate(DeviceList, EnumDevListCB, Context); +} + +KUSB_EXP BOOL KUSB_API LstK_Current( + _in KLST_HANDLE DeviceList, + _out KLST_DEVINFO_HANDLE* DeviceInfo) +{ + return pLstK_Current(DeviceList, DeviceInfo); +} + +KUSB_EXP BOOL KUSB_API LstK_MoveNext( + _in KLST_HANDLE DeviceList, + _outopt KLST_DEVINFO_HANDLE* DeviceInfo) +{ + return pLstK_MoveNext(DeviceList, DeviceInfo); +} + +KUSB_EXP VOID KUSB_API LstK_MoveReset( + _in KLST_HANDLE DeviceList) +{ + pLstK_MoveReset(DeviceList); +} + +KUSB_EXP BOOL KUSB_API LstK_FindByVidPid( + _in KLST_HANDLE DeviceList, + _in INT Vid, + _in INT Pid, + _out KLST_DEVINFO_HANDLE* DeviceInfo) +{ + return pLstK_FindByVidPid(DeviceList, Vid, Pid, DeviceInfo); +} + +KUSB_EXP BOOL KUSB_API LstK_Count( + _in KLST_HANDLE DeviceList, + _ref PUINT Count) +{ + return pLstK_Count(DeviceList, Count); +} + +KUSB_EXP BOOL KUSB_API HotK_Init( + _out KHOT_HANDLE* Handle, + _ref PKHOT_PARAMS InitParams) +{ + return pHotK_Init(Handle, InitParams); +} + +KUSB_EXP BOOL KUSB_API HotK_Free( + _in KHOT_HANDLE Handle) +{ + return pHotK_Free(Handle); +} + +KUSB_EXP VOID KUSB_API HotK_FreeAll(VOID) +{ + pHotK_FreeAll(); +} + +KUSB_EXP BOOL KUSB_API OvlK_Acquire( + _out KOVL_HANDLE* OverlappedK, + _in KOVL_POOL_HANDLE PoolHandle) +{ + return pOvlK_Acquire(OverlappedK, PoolHandle); +} + +KUSB_EXP BOOL KUSB_API OvlK_Release( + _in KOVL_HANDLE OverlappedK) +{ + return pOvlK_Release(OverlappedK); +} + +KUSB_EXP BOOL KUSB_API OvlK_Init ( + _out KOVL_POOL_HANDLE* PoolHandle, + _in KUSB_HANDLE UsbHandle, + _in INT MaxOverlappedCount, + _inopt KOVL_POOL_FLAG Flags) +{ + return pOvlK_Init(PoolHandle, UsbHandle, MaxOverlappedCount, Flags); +} + +KUSB_EXP BOOL KUSB_API OvlK_Free( + _in KOVL_POOL_HANDLE PoolHandle) +{ + return pOvlK_Free(PoolHandle); +} + +KUSB_EXP HANDLE KUSB_API OvlK_GetEventHandle( + _in KOVL_HANDLE OverlappedK) +{ + return pOvlK_GetEventHandle(OverlappedK); +} + +KUSB_EXP BOOL KUSB_API OvlK_Wait( + _in KOVL_HANDLE OverlappedK, + _inopt INT TimeoutMS, + _inopt KOVL_WAIT_FLAG WaitFlags, + _out PUINT TransferredLength) +{ + return pOvlK_Wait(OverlappedK, TimeoutMS, WaitFlags, TransferredLength); +} + +KUSB_EXP BOOL KUSB_API OvlK_WaitOldest( + _in KOVL_POOL_HANDLE PoolHandle, + _outopt KOVL_HANDLE* OverlappedK, + _inopt INT TimeoutMS, + _inopt KOVL_WAIT_FLAG WaitFlags, + _out PUINT TransferredLength) +{ + return pOvlK_WaitOldest(PoolHandle, OverlappedK, TimeoutMS, WaitFlags, TransferredLength); +} + +KUSB_EXP BOOL KUSB_API OvlK_WaitOrCancel( + _in KOVL_HANDLE OverlappedK, + _inopt INT TimeoutMS, + _out PUINT TransferredLength) +{ + return pOvlK_WaitOrCancel(OverlappedK, TimeoutMS, TransferredLength); +} + +KUSB_EXP BOOL KUSB_API OvlK_WaitAndRelease( + _in KOVL_HANDLE OverlappedK, + _inopt INT TimeoutMS, + _out PUINT TransferredLength) +{ + return pOvlK_WaitAndRelease(OverlappedK, TimeoutMS, TransferredLength); +} + +KUSB_EXP BOOL KUSB_API OvlK_IsComplete( + _in KOVL_HANDLE OverlappedK) +{ + return pOvlK_IsComplete(OverlappedK); +} + +KUSB_EXP BOOL KUSB_API OvlK_ReUse( + _in KOVL_HANDLE OverlappedK) +{ + return pOvlK_ReUse(OverlappedK); +} + +KUSB_EXP BOOL KUSB_API StmK_Init( + _out KSTM_HANDLE* StreamHandle, + _in KUSB_HANDLE UsbHandle, + _in UCHAR PipeID, + _in INT MaxTransferSize, + _in INT MaxPendingTransfers, + _in INT MaxPendingIO, + _inopt PKSTM_CALLBACK Callbacks, + _inopt KSTM_FLAG Flags) +{ + return pStmK_Init(StreamHandle, UsbHandle, PipeID, MaxTransferSize, MaxPendingTransfers, MaxPendingIO, Callbacks, Flags); +} + +KUSB_EXP BOOL KUSB_API StmK_Free( + _in KSTM_HANDLE StreamHandle) +{ + return pStmK_Free(StreamHandle); +} + +KUSB_EXP BOOL KUSB_API StmK_Start( + _in KSTM_HANDLE StreamHandle) +{ + return pStmK_Start(StreamHandle); +} + +KUSB_EXP BOOL KUSB_API StmK_Stop( + _in KSTM_HANDLE StreamHandle, + _in INT TimeoutCancelMS) +{ + return pStmK_Stop(StreamHandle, TimeoutCancelMS); +} + +KUSB_EXP BOOL KUSB_API StmK_Read( + _in KSTM_HANDLE StreamHandle, + _out PUCHAR Buffer, + _in INT Offset, + _in INT Length, + _out PUINT TransferredLength) +{ + return pStmK_Read(StreamHandle, Buffer, Offset, Length, TransferredLength); +} + +KUSB_EXP BOOL KUSB_API StmK_Write( + _in KSTM_HANDLE StreamHandle, + _in PUCHAR Buffer, + _in INT Offset, + _in INT Length, + _out PUINT TransferredLength) +{ + return pStmK_Write(StreamHandle, Buffer, Offset, Length, TransferredLength); +} + +KUSB_EXP BOOL KUSB_API IsoK_Init( + _out PKISO_CONTEXT* IsoContext, + _in INT NumberOfPackets, + _inopt INT StartFrame) +{ + return pIsoK_Init(IsoContext, NumberOfPackets, StartFrame); +} + +KUSB_EXP BOOL KUSB_API IsoK_Free( + _in PKISO_CONTEXT IsoContext) +{ + return pIsoK_Free(IsoContext); +} + +KUSB_EXP BOOL KUSB_API IsoK_SetPackets( + _in PKISO_CONTEXT IsoContext, + _in INT PacketSize) +{ + return pIsoK_SetPackets(IsoContext, PacketSize); +} + +KUSB_EXP BOOL KUSB_API IsoK_SetPacket( + _in PKISO_CONTEXT IsoContext, + _in INT PacketIndex, + _in PKISO_PACKET IsoPacket) +{ + return pIsoK_SetPacket(IsoContext, PacketIndex, IsoPacket); +} + +KUSB_EXP BOOL KUSB_API IsoK_GetPacket( + _in PKISO_CONTEXT IsoContext, + _in INT PacketIndex, + _out PKISO_PACKET IsoPacket) +{ + return pIsoK_GetPacket(IsoContext, PacketIndex, IsoPacket); +} + +KUSB_EXP BOOL KUSB_API IsoK_EnumPackets( + _in PKISO_CONTEXT IsoContext, + _in KISO_ENUM_PACKETS_CB* EnumPackets, + _inopt INT StartPacketIndex, + _inopt PVOID UserState) +{ + return pIsoK_EnumPackets(IsoContext, EnumPackets, StartPacketIndex, UserState); +} + +KUSB_EXP BOOL KUSB_API IsoK_ReUse( + _ref PKISO_CONTEXT IsoContext) +{ + return pIsoK_ReUse(IsoContext); +} + + + +/////////////////////////////////////////////////////////////////////// diff --git a/Desktop Interface/libusbk/includes/lusbk_shared.h b/Desktop Interface/libusbk/includes/lusbk_shared.h new file mode 100644 index 00000000..ddfa3fa9 --- /dev/null +++ b/Desktop Interface/libusbk/includes/lusbk_shared.h @@ -0,0 +1,309 @@ +/*! \file lusbk_shared.h +* \brief Types and defines shared with the driver. +*/ + +#ifndef __LUSBK_SHARED_H_ +#define __LUSBK_SHARED_H_ + +#ifndef __USB_H__ + +//! Values used in the \c bmAttributes field of a \ref USB_ENDPOINT_DESCRIPTOR +typedef enum _USBD_PIPE_TYPE +{ + //! Indicates a control endpoint + UsbdPipeTypeControl, + + //! Indicates an isochronous endpoint + UsbdPipeTypeIsochronous, + + //! Indicates a bulk endpoint + UsbdPipeTypeBulk, + + //! Indicates an interrupt endpoint + UsbdPipeTypeInterrupt, +} USBD_PIPE_TYPE; + +#endif + +#if !defined(__WINUSB_COMPAT_IO_H__) && !defined(__WUSBIO_H__) + +// pipe policy types /////////////// +#define SHORT_PACKET_TERMINATE 0x01 +#define AUTO_CLEAR_STALL 0x02 +#define PIPE_TRANSFER_TIMEOUT 0x03 +#define IGNORE_SHORT_PACKETS 0x04 +#define ALLOW_PARTIAL_READS 0x05 +#define AUTO_FLUSH 0x06 +#define RAW_IO 0x07 +#define MAXIMUM_TRANSFER_SIZE 0x08 +#define RESET_PIPE_ON_RESUME 0x09 + +// libusbK ISO pipe policy types /// +#define ISO_START_LATENCY 0x20 +#define ISO_ALWAYS_START_ASAP 0x21 +#define ISO_NUM_FIXED_PACKETS 0x22 + +// http://msdn.microsoft.com/en-us/library/windows/hardware/ff552359%28v=vs.85%29.aspx +// Settings.Parallel.NumberOfPresentedRequests +// Maximum number of transfers that can be asynchronously delivered at a +// time. Available in version 1.9 and later versions of KMDF. +#define SIMUL_PARALLEL_REQUESTS 0x30 + +// Power policy types ////////////// +#define AUTO_SUSPEND 0x81 +#define SUSPEND_DELAY 0x83 + +// Device Information types //////// +#define DEVICE_SPEED 0x01 + +// Device Speeds +#define LowSpeed 0x01 +#define FullSpeed 0x02 +#define HighSpeed 0x03 + +//! The \c WINUSB_PIPE_INFORMATION structure contains pipe information that the \ref UsbK_QueryPipe routine retrieves. +typedef struct _WINUSB_PIPE_INFORMATION +{ + //! A \c USBD_PIPE_TYPE enumeration value that specifies the pipe type + USBD_PIPE_TYPE PipeType; + + //! The pipe identifier (ID) + UCHAR PipeId; + + //! The maximum size, in bytes, of the packets that are transmitted on the pipe + USHORT MaximumPacketSize; + + //! The pipe interval + UCHAR Interval; + +} WINUSB_PIPE_INFORMATION; +//! Pointer to a \ref WINUSB_PIPE_INFORMATION structure +typedef WINUSB_PIPE_INFORMATION* PWINUSB_PIPE_INFORMATION; +C_ASSERT(sizeof(WINUSB_PIPE_INFORMATION) == 12); + +#include + +//! The \c WINUSB_SETUP_PACKET structure describes a USB setup packet. +/*! +* It is often more convient to use this structure in combination with a \ref KUSB_SETUP_PACKET. +* For example: +* \code + +* \endcode +*/ +typedef struct _WINUSB_SETUP_PACKET +{ + //! The request type. The values that are assigned to this member are defined in Table 9.2 of section 9.3 of the Universal Serial Bus (USB) specification (www.usb.org). + UCHAR RequestType; + + //! The device request. The values that are assigned to this member are defined in Table 9.3 of section 9.4 of the Universal Serial Bus (USB) specification. + UCHAR Request; + + //! The meaning of this member varies according to the request. For an explanation of this member, see the Universal Serial Bus (USB) specification. + USHORT Value; + + //! The meaning of this member varies according to the request. For an explanation of this member, see the Universal Serial Bus (USB) specification. + USHORT Index; + + //! The number of bytes to transfer. (not including the \c WINUSB_SETUP_PACKET itself) + USHORT Length; + +} WINUSB_SETUP_PACKET; +//! pointer to a \c WINUSB_SETUP_PACKET structure +typedef WINUSB_SETUP_PACKET* PWINUSB_SETUP_PACKET; +C_ASSERT(sizeof(WINUSB_SETUP_PACKET) == 8); + +#include + +#endif // __WUSBIO_H__ __WINUSB_COMPAT_IO_H__ + +#include + +/*! \addtogroup isok +* @{ +*/ + +//! Structure describing an isochronous transfer packet. +typedef struct _KISO_PACKET +{ + //! Specifies the offset, in bytes, of the buffer for this packet from the beginning of the entire isochronous transfer data buffer. + /*! + * \c Offset represents an absolute data offset from the start of the \c Buffer parameter \ref UsbK_IsoReadPipe or \ref UsbK_IsoWritePipe. + * + * \note This field is assigned by the user application only and used by the driver upon transfer submission and completion. + */ + UINT Offset; + + //! Set by the host controller to indicate the actual number of bytes received by the device for isochronous IN transfers. Length not used for isochronous OUT transfers. + /*! + * \note This field is is not user assignable and is updated by the driver upon transfer completion. + */ + USHORT Length; + + //! Contains the 16 least significant USBD status bits, on return from the host controller driver, of this transfer packet. + /*! + * See MSDN for USBD status codes: USBD status code reference + * + * \note This field is is not user assignable and is updated by the driver upon transfer completion. + */ + USHORT Status; + +} KISO_PACKET; +//! pointer to a \c KISO_PACKET structure +typedef KISO_PACKET* PKISO_PACKET; + +#pragma warning(disable:4200) + +//! Additional ISO transfer flags. +typedef enum _KISO_FLAG +{ + KISO_FLAG_NONE = 0, + + //! Do not start the transfer immediately, instead use \ref KISO_CONTEXT::StartFrame. + /*! + * By default, isochronous transfers start on the next frame and \ref KISO_CONTEXT::StartFrame is + * ignored. If this flag is specified, the transfer is postponed until the current usb frame number + * equals that specified by \ref KISO_CONTEXT::StartFrame. + * + * Under certain circumstances, the driver can specify 0 for \ref KISO_CONTEXT::StartFrame, and the bus + * driver will begin the transaction in the next available frame. + * + * Specifing \b 0 for \ref KISO_CONTEXT::StartFrame (start transfer ASAP) is restricted to the first + * transaction on a newly opened or reset pipe. Furthermore, the USB stack contains a bug in Microsoft + * Windows Server 2003 and Windows XP that limits the use of this to an isochronous context with 255 or fewer + * packets. + * + * For more information about resetting pipes, see \ref UsbK_ResetPipe. + */ + KISO_FLAG_SET_START_FRAME = 0x00000001, +} KISO_FLAG; + +//! Structure describing a user defined isochronous transfer. +/*! +* +* \fixedstruct{16} +* +* The \ref KISO_CONTEXT::StartFrame member of the \ref KISO_CONTEXT specifies the starting USB frame number +* for the transaction. The driver can use \ref UsbK_GetCurrentFrameNumber to request the current frame +* number. +* +* In full-speed transmissions, the frame number for any particular packet will be the sum of the start frame +* number and the packet index. For instance, the fourth packet in the \ref KISO_CONTEXT has an index of 3, so +* its frame number will be StartFrame + 3. In a write transfer, the port driver loads this frame with the +* buffer data at the data buffer offset specified by IsoPacket[3].Offset. +* +* When the driver processes the \ref KISO_CONTEXT, it discards all packets in the \ref KISO_CONTEXT whose +* frame numbers are lower than the current frame number. The port driver sets the Status member of the packet +* descriptor for each discarded packet to USBD_STATUS_ISO_NA_LATE_USBPORT, USBD_STATUS_ISO_NOT_ACCESSED_BY_HW +* or USBD_STATUS_ISO_NOT_ACCESSED_LATE. Even if it discards some packets, the port driver attempts to +* transmit those packets in the \ref KISO_CONTEXT whose frame numbers are higher than the current frame +* number. +* +* The check for a valid StartFrame member is slightly more complicated in high-speed transmissions because +* the port driver loads each packet into a high-speed microframe; however, the value in StartFrame refers to +* the 1 millisecond (full-speed) frame number, not the microframe. For example, if the StartFrame value +* recorded in the \ref KISO_CONTEXT is one less than the current frame, the port driver will discard as many +* as eight packets. The exact number of packets that the port driver discards depends on the period +* associated with the isochronous pipe. +* +* High-speed isochronous pipes can have periods of 1, 2, 4, or 8. The period number specifies the frequency +* with which the port driver inserts packets into the data stream. If the period is 2, for example, the port +* driver will insert a packet into the data stream every two microframes. This means that it will only use +* four of the eight microframes available within each 1-millisecond frame for isochronous data transmission. +* +* In general, the higher the period, the fewer packets the port driver will discard when a \ref KISO_CONTEXT +* arrives late. Assume the period on an isochronous pipe is 2. With a period of 2, each 1-millisecond speed +* frame will carry four packets of isochronous data for that pipe. So, for example, if CurrentFrame - +* StartFrame = 3, the port driver will discard 3 * 4 = 12 packets. On the other hand, if the period is 4, +* each 1-millisecond frame carries only two packets of isochronous data for the pipe. Therefore, if the +* \ref KISO_CONTEXT arrives three 1-millisecond frames late, as in the previous example, the port driver will +* discard 3 * 2 = 6 packets, instead of 12 packets. +* +* For all types of isochronous pipe, the distance between the current frame and the StartFrame value +* specified in the \ref KISO_CONTEXT must be less than USBD_ISO_START_FRAME_RANGE. If StartFrame is not +* within the proper range, the driver sets the Status member of the \ref KISO_PACKET +* \c USBD_STATUS_BAD_START_FRAME and discards the entire \ref KISO_CONTEXT. The following code example shows +* the precise check that the port driver does on the \ref KISO_CONTEXT start frame: +* \code +* if (abs((CurrentFrame - StartFrame)) > USBD_ISO_START_FRAME_RANGE) +* { +* // discard the KISO_CONTEXT +* } +* \endcode +* +*/ +typedef struct _KISO_CONTEXT +{ + //! Additional ISO transfer flags. See \ref KISO_FLAG. + KISO_FLAG Flags; + + //! Specifies the frame number that the transfer should begin on (0 for ASAP). + /*! + * This variable must be within a system-defined range of the current frame. The range is specified by the + * constant \ref USBD_ISO_START_FRAME_RANGE. + * + * If /ref KISO_FLAG_SET_START_FRAME was specified, this member contains the frame number that the transfer should begin on. + * When the request is returned by the host controller driver, this member is updated to reflect the frame number this transfer + * did begin on. + * + * \note This field may be assigned by the user application and is updated by the driver upon transfer + * completion. + */ + UINT StartFrame; + + //! Contains the number of packets that completed with an error condition on return from the host controller driver. + /*! + * \note This field is is not user assignable and is updated by the driver upon transfer completion. + */ + SHORT ErrorCount; + + //! Specifies the number of packets that are described by the variable-length array member \c IsoPacket. + /* + * \note This field is assigned by the user application only and used by the driver upon transfer submission + * and completion. + */ + SHORT NumberOfPackets; + + //! Contains the URB Hdr.Status value on return from the host controller driver. + /*! + * \note This field is is not user assignable and is updated by the driver upon transfer completion. + * + * The USB bus driver always returns a value of USBD_STATUS_SUCCESS in + * Hdr.Status, unless every packet in the transfer generated an error or + * the request was not well-formed and could not be executed at all. The + * following table includes possible error codes returned in Hdr.Status: + * - USBD_STATUS_ISOCH_REQUEST_FAILED + * Indicates that every packet of an isochronous request was completed with + * errors. + * - USBD_STATUS_BAD_START_FRAME + * Indicates that the requested start frame is not within + * USBD_ISO_START_FRAME_RANGE of the current USB frame. + * - USBD_ISO_NOT_ACCESSED_LATE + * Indicates that every packet was submitted too late for the packet to be + * sent, based on the requested start frame. + * - USBD_STATUS_INVALID_PARAMETER + * Indicates that one of the URB parameters was incorrect. + */ + UINT UrbHdrStatus; + + //! Contains a variable-length array of \c KISO_PACKET structures that describe the isochronous transfer packets to be transferred on the USB bus. + /* + * \note This field is assigned by the user application, used by the driver upon transfer submission, and + * updated by the driver upon transfer completion. + */ + KISO_PACKET IsoPackets[0]; + +} KISO_CONTEXT; +C_ASSERT(sizeof(KISO_CONTEXT) == 16); + +//! pointer to a \c KISO_CONTEXT structure +typedef KISO_CONTEXT* PKISO_CONTEXT; + +/*! @} */ + +#pragma warning(default:4200) + +#include + +#endif // __LUSBK_SHARED_H_ + diff --git a/Desktop Interface/main.cpp b/Desktop Interface/main.cpp new file mode 100644 index 00000000..b48f94ec --- /dev/null +++ b/Desktop Interface/main.cpp @@ -0,0 +1,11 @@ +#include "mainwindow.h" +#include + +int main(int argc, char *argv[]) +{ + QApplication a(argc, argv); + MainWindow w; + w.show(); + + return a.exec(); +} diff --git a/Desktop Interface/mainwindow.cpp b/Desktop Interface/mainwindow.cpp new file mode 100644 index 00000000..ef021b14 --- /dev/null +++ b/Desktop Interface/mainwindow.cpp @@ -0,0 +1,891 @@ +#include "mainwindow.h" +#include "qcustomplot.h" +#include "ui_mainwindow.h" +#include +#include +#include +#include +#include + +MainWindow::MainWindow(QWidget *parent) : + QMainWindow(parent), + ui(new Ui::MainWindow) +{ + ui->setupUi(this); + ui->psuDisplay->display("4.00"); + ui->bufferDisplay->refreshImage(); + + ui->waveformSelect_CH1->readWaveformList(); + ui->waveformSelect_CH2->readWaveformList(); + + labelPsu(); + + ui->psuDisplay->display("4.50"); + + ui->controller_iso->setDriver(ui->controller_usb); + ui->controller_iso->setAxes(ui->scopeAxes); + + ui->timeBaseSlider->setMaximum(10*log10(MAX_WINDOW_SIZE)); + + ui->controller_usb->setBufferPtr(ui->bufferDisplay); + ui->cursorStatsLabel->hide(); + initialisePlot(); + menuSetup(); + + ui->voltageInfoMaxDisplay_CH1->display(5312); + ui->voltageInfoMinDisplay_CH1->display(0.01); + ui->voltageInfoMeanDisplay_CH1->display(0.02); + ui->voltageInfoRmsDisplay_CH1->display(6.00); + connectDisplaySignals(); + + ui->controller_iso->internalBuffer375_CH1->console1 = ui->console1; + ui->controller_iso->internalBuffer375_CH1->console2 = ui->console2; + + ui->controller_iso->internalBuffer375_CH2->console1 = ui->console1; + ui->controller_iso->internalBuffer375_CH2->console2 = ui->console2; + initShortcuts(); + + ui->console1->setVisible(0); + ui->console2->setVisible(0); + ui->timeBaseSlider->setVisible(0); + + /* + ui->multimeterModeLabel->setVisible(0); + ui->multimeterModeSelect->setVisible(0); + ui->multimeterResistanceLabel->setVisible(0); + ui->multimeterResistanceSelect->setVisible(0); + */ + + /* + ui->multimeterMaxLabel->setVisible(0); + ui->multimeterMinLabel->setVisible(0); + ui->multimeterMeanLabel->setVisible(0); + ui->multimeterRmsLabel->setVisible(0); + + ui->multimeterMaxDisplay->setVisible(0); + ui->multimeterMinDisplay->setVisible(0); + ui->multimeterMeanDisplay->setVisible(0); + ui->multimeterRmsDisplay->setVisible(0); + */ +} + +MainWindow::~MainWindow() +{ + delete ui; +} + +void MainWindow::initialisePlot() +{ + ui->scopeAxes->addGraph(); + ui->scopeAxes->addGraph(); + ui->scopeAxes->addGraph(); + ui->scopeAxes->addGraph(); + ui->scopeAxes->addGraph(); + ui->scopeAxes->addGraph(); + + textLabel = new QCPItemText(ui->scopeAxes); + ui->scopeAxes->addItem(textLabel); + textLabel->setPositionAlignment(Qt::AlignTop|Qt::AlignRight); + textLabel->position->setType(QCPItemPosition::ptAxisRectRatio); + textLabel->position->setCoords(0.99, 0); // place position at center/top of axis rect + textLabel->setText("Cursor Label Here"); + textLabel->setFont(QFont("Courier New", 12)); + textLabel->setColor(Qt::white); + textLabel->setPen(QPen(Qt::white)); + textLabel->setBrush(QBrush(Qt::black)); + + textLabel->setVisible(0); + ui->controller_iso->cursorTextPtr = textLabel; + + + QPen *dashPen = new QPen(Qt::white, 2); + dashPen->setStyle(Qt::DashLine); + + ui->scopeAxes->graph(0)->setPen(QPen(Qt::yellow, 1)); + ui->scopeAxes->graph(1)->setPen(QPen(Qt::cyan, 1)); + ui->scopeAxes->graph(2)->setPen(QPen(Qt::white, 2)); + ui->scopeAxes->graph(3)->setPen(*(dashPen)); + ui->scopeAxes->graph(4)->setPen(QPen(Qt::white, 2)); + ui->scopeAxes->graph(5)->setPen(*(dashPen)); + + ui->scopeAxes->yAxis->setAutoTickCount(9); + ui->scopeAxes->xAxis->setAutoTickCount(9); + + + ui->scopeAxes->xAxis->setBasePen(QPen(Qt::white, 1)); + ui->scopeAxes->yAxis->setBasePen(QPen(Qt::white, 1)); + ui->scopeAxes->xAxis->setTickPen(QPen(Qt::white, 1)); + ui->scopeAxes->yAxis->setTickPen(QPen(Qt::white, 1)); + ui->scopeAxes->xAxis->setSubTickPen(QPen(Qt::white, 1)); + ui->scopeAxes->yAxis->setSubTickPen(QPen(Qt::white, 1)); + ui->scopeAxes->xAxis->setTickLength(6); + ui->scopeAxes->yAxis->setTickLength(6); + ui->scopeAxes->xAxis->setSubTickLength(4); + ui->scopeAxes->yAxis->setSubTickLength(4); + ui->scopeAxes->xAxis->setTickLabelColor(Qt::white); + ui->scopeAxes->yAxis->setTickLabelColor(Qt::white); + + ui->scopeAxes->setBackground(Qt::black); + + + ui->scopeAxes->replot(); +} + +void MainWindow::labelPsu(){ + char tempString[4]; + int tempInt = ui->psuSlider->maximum(); + int tempCounter = 0; + while(tempInt>90){ + sprintf(tempString, "%dV", tempInt/20); + ui->psuSlider->setTickLabel(tempString, tempCounter); + tempInt -= 20; + tempCounter++; + } + ui->psuSlider->setTickLabel("4.5V", 11); +} + +void MainWindow::resizeEvent(QResizeEvent *event){ + //ui->scopeAxes->yAxis->setAutoTickCount((ui->scopeAxes->height() + TICK_SEPARATION / 2) / TICK_SEPARATION); + //ui->scopeAxes->xAxis->setAutoTickCount((ui->scopeAxes->width() + TICK_SEPARATION / 2) / TICK_SEPARATION); + + //ui->scopeAxes->resize(ui->scopeAxes->height(), ui->scopeAxes->height()); + //qDebug() << ui->scopeAxes->yAxis->autoTickCount() << ui->scopeAxes->xAxis->autoTickCount(); + + if(forceSquare){ + int tempHeight = ui->scopeAxes->height(); + int tempWidth = ui->scopeAxes->width(); + int newDims = (tempHeight > tempWidth) ? tempWidth : tempHeight; + ui->scopeAxes->resize(newDims, newDims); + if(tempWidth > tempHeight){ + ui->scopeAxes->move(tempWidth-tempHeight, ui->scopeAxes->y()); + }else{ + ui->scopeAxes->move(ui->scopeAxes->x(), ui->scopeAxes->y() + (tempHeight - tempWidth) / 2); + } + } +} + +void MainWindow::menuSetup(){ + gainGroup = new QActionGroup(this); + gainGroup->addAction(ui->actionGainAuto); + gainGroup->addAction(ui->actionGain0_5); + gainGroup->addAction(ui->actionGain1); + gainGroup->addAction(ui->actionGain2); + gainGroup->addAction(ui->actionGain4); + gainGroup->addAction(ui->actionGain8); + gainGroup->addAction(ui->actionGain16); + gainGroup->addAction(ui->actionGain32); + gainGroup->addAction(ui->actionGain64); + ui->actionGainAuto->setChecked(1); + + rangeGroupV = new QActionGroup(this); + rangeGroupV->addAction(ui->actionAutoV); + rangeGroupV->addAction(ui->actionMV); + rangeGroupV->addAction(ui->actionV); + + rangeGroupI = new QActionGroup(this); + rangeGroupI->addAction(ui->actionAutoI); + rangeGroupI->addAction(ui->actionMA); + rangeGroupI->addAction(ui->actionA); + + fpsGroup = new QActionGroup(this); + fpsGroup->addAction(ui->action60FPS); + fpsGroup->addAction(ui->action30FPS); + fpsGroup->addAction(ui->action20FPS); + fpsGroup->addAction(ui->action15FPS); + fpsGroup->addAction(ui->action10FPS); + fpsGroup->addAction(ui->action5FPS); + + + connect(ui->actionAutoV, SIGNAL(toggled(bool)), ui->controller_iso, SLOT(setAutoMultimeterV(bool))); + connect(ui->actionV, SIGNAL(toggled(bool)), ui->controller_iso, SLOT(setForceVolts(bool))); + connect(ui->actionMV, SIGNAL(toggled(bool)), ui->controller_iso, SLOT(setForceMillivolts(bool))); + connect(ui->actionAutoI, SIGNAL(toggled(bool)), ui->controller_iso, SLOT(setAutoMultimeterI(bool))); + connect(ui->actionA, SIGNAL(toggled(bool)), ui->controller_iso, SLOT(setForceAmps(bool))); + connect(ui->actionMA, SIGNAL(toggled(bool)), ui->controller_iso, SLOT(setForceMilliamps(bool))); + + uartBaudGroup_CH1 = new QActionGroup(this); + uartBaudGroup_CH1->addAction(ui->action300); + uartBaudGroup_CH1->addAction(ui->action600); + uartBaudGroup_CH1->addAction(ui->action1200); + uartBaudGroup_CH1->addAction(ui->action2400); + uartBaudGroup_CH1->addAction(ui->action4800); + uartBaudGroup_CH1->addAction(ui->action9600); + uartBaudGroup_CH1->addAction(ui->action14400); + uartBaudGroup_CH1->addAction(ui->action19200); + uartBaudGroup_CH1->addAction(ui->action28800); + uartBaudGroup_CH1->addAction(ui->action38400); + uartBaudGroup_CH1->addAction(ui->action57600); + uartBaudGroup_CH1->addAction(ui->action115200); + ui->action9600->setChecked(1); + + uartBaudGroup_CH2 = new QActionGroup(this); + uartBaudGroup_CH2->addAction(ui->action300_2); + uartBaudGroup_CH2->addAction(ui->action600_2); + uartBaudGroup_CH2->addAction(ui->action1200_2); + uartBaudGroup_CH2->addAction(ui->action2400_2); + uartBaudGroup_CH2->addAction(ui->action4800_2); + uartBaudGroup_CH2->addAction(ui->action9600_2); + uartBaudGroup_CH2->addAction(ui->action14400_2); + uartBaudGroup_CH2->addAction(ui->action19200_2); + uartBaudGroup_CH2->addAction(ui->action28800_2); + uartBaudGroup_CH2->addAction(ui->action38400_2); + uartBaudGroup_CH2->addAction(ui->action57600_2); + uartBaudGroup_CH2->addAction(ui->action115200_2); + ui->action9600_2->setChecked(1); +} + +void MainWindow::on_actionGain0_5_triggered() +{ + ui->controller_usb->setGain(0.5); + ui->controller_iso->setAutoGain(0); +} + +void MainWindow::on_actionGain1_triggered() +{ + ui->controller_usb->setGain(1); + ui->controller_iso->setAutoGain(0); +} + +void MainWindow::on_actionGain2_triggered() +{ + ui->controller_usb->setGain(2); + ui->controller_iso->setAutoGain(0); +} + +void MainWindow::on_actionGain4_triggered() +{ + ui->controller_usb->setGain(4); + ui->controller_iso->setAutoGain(0); +} + +void MainWindow::on_actionGain8_triggered() +{ + ui->controller_usb->setGain(8); + ui->controller_iso->setAutoGain(0); +} + +void MainWindow::on_actionGain16_triggered() +{ + ui->controller_usb->setGain(16); + ui->controller_iso->setAutoGain(0); +} + +void MainWindow::on_actionGain32_triggered() +{ + ui->controller_usb->setGain(32); + ui->controller_iso->setAutoGain(0); +} + +void MainWindow::on_actionGain64_triggered() +{ + ui->controller_usb->setGain(64); + ui->controller_iso->setAutoGain(0); +} +void MainWindow::on_actionGainAuto_triggered() +{ + ui->controller_iso->setAutoGain(1); +} + +void MainWindow::on_actionCursor_Stats_triggered(bool checked) +{ + ui->controller_iso->cursorStatsEnabled = checked; +} + +void MainWindow::connectDisplaySignals(){ + connect(ui->actionMax, SIGNAL(toggled(bool)), ui->voltageInfoMaxLabel_CH1, SLOT(setVisible(bool))); + connect(ui->actionMax, SIGNAL(toggled(bool)), ui->voltageInfoMaxDisplay_CH1, SLOT(setVisible(bool))); + + connect(ui->actionMin, SIGNAL(toggled(bool)), ui->voltageInfoMinLabel_CH1, SLOT(setVisible(bool))); + connect(ui->actionMin, SIGNAL(toggled(bool)), ui->voltageInfoMinDisplay_CH1, SLOT(setVisible(bool))); + + connect(ui->actionMean, SIGNAL(toggled(bool)), ui->VoltageInfoMeanLabel_CH1, SLOT(setVisible(bool))); + connect(ui->actionMean, SIGNAL(toggled(bool)), ui->voltageInfoMeanDisplay_CH1, SLOT(setVisible(bool))); + + connect(ui->actionRMS, SIGNAL(toggled(bool)), ui->voltageInfoRmsLabel_CH1, SLOT(setVisible(bool))); + connect(ui->actionRMS, SIGNAL(toggled(bool)), ui->voltageInfoRmsDisplay_CH1, SLOT(setVisible(bool))); + + ui->voltageInfoMaxLabel_CH1->setVisible(0); + ui->voltageInfoMaxDisplay_CH1->setVisible(0); + ui->voltageInfoMinLabel_CH1->setVisible(0); + ui->voltageInfoMinDisplay_CH1->setVisible(0); + ui->VoltageInfoMeanLabel_CH1->setVisible(0); + ui->voltageInfoMeanDisplay_CH1->setVisible(0); + ui->voltageInfoRmsLabel_CH1->setVisible(0); + ui->voltageInfoRmsDisplay_CH1->setVisible(0); + + connect(ui->actionMax_2, SIGNAL(toggled(bool)), ui->voltageInfoMaxLabel_CH2, SLOT(setVisible(bool))); + connect(ui->actionMax_2, SIGNAL(toggled(bool)), ui->voltageInfoMaxDisplay_CH2, SLOT(setVisible(bool))); + + connect(ui->actionMin_2, SIGNAL(toggled(bool)), ui->voltageInfoMinLabel_CH2, SLOT(setVisible(bool))); + connect(ui->actionMin_2, SIGNAL(toggled(bool)), ui->voltageInfoMinDisplay_CH2, SLOT(setVisible(bool))); + + connect(ui->actionMean_2, SIGNAL(toggled(bool)), ui->VoltageInfoMeanLabel_CH2, SLOT(setVisible(bool))); + connect(ui->actionMean_2, SIGNAL(toggled(bool)), ui->voltageInfoMeanDisplay_CH2, SLOT(setVisible(bool))); + + connect(ui->actionRMS_2, SIGNAL(toggled(bool)), ui->voltageInfoRmsLabel_CH2, SLOT(setVisible(bool))); + connect(ui->actionRMS_2, SIGNAL(toggled(bool)), ui->voltageInfoRmsDisplay_CH2, SLOT(setVisible(bool))); + + ui->voltageInfoMaxLabel_CH2->setVisible(0); + ui->voltageInfoMaxDisplay_CH2->setVisible(0); + ui->voltageInfoMinLabel_CH2->setVisible(0); + ui->voltageInfoMinDisplay_CH2->setVisible(0); + ui->VoltageInfoMeanLabel_CH2->setVisible(0); + ui->voltageInfoMeanDisplay_CH2->setVisible(0); + ui->voltageInfoRmsLabel_CH2->setVisible(0); + ui->voltageInfoRmsDisplay_CH2->setVisible(0); +} + + + +void MainWindow::on_action300_toggled(bool arg1) +{ + if(arg1){ + ui->controller_iso->baudRate_CH1 = 300; + } +} + +void MainWindow::on_action600_toggled(bool arg1) +{ + if(arg1){ + ui->controller_iso->baudRate_CH1 = 600; + } +} + +void MainWindow::on_action1200_toggled(bool arg1) +{ + if(arg1){ + ui->controller_iso->baudRate_CH1 = 1200; + } +} + +void MainWindow::on_action2400_toggled(bool arg1) +{ + if(arg1){ + ui->controller_iso->baudRate_CH1 = 2400; + } +} + +void MainWindow::on_action4800_toggled(bool arg1) +{ + if(arg1){ + ui->controller_iso->baudRate_CH1 = 4800; + } +} + +void MainWindow::on_action9600_toggled(bool arg1) +{ + if(arg1){ + ui->controller_iso->baudRate_CH1 = 9600; + } +} + +void MainWindow::on_action14400_toggled(bool arg1) +{ + if(arg1){ + ui->controller_iso->baudRate_CH1 = 14400; + } +} + +void MainWindow::on_action19200_toggled(bool arg1) +{ + if(arg1){ + ui->controller_iso->baudRate_CH1 = 19200; + } +} + +void MainWindow::on_action28800_toggled(bool arg1) +{ + if(arg1){ + ui->controller_iso->baudRate_CH1 = 28800; + } +} + +void MainWindow::on_action38400_toggled(bool arg1) +{ + if(arg1){ + ui->controller_iso->baudRate_CH1 = 38400; + } +} + +void MainWindow::on_action57600_toggled(bool arg1) +{ + if(arg1){ + ui->controller_iso->baudRate_CH1 = 57600; + } +} + +void MainWindow::on_action115200_toggled(bool arg1) +{ + if(arg1){ + ui->controller_iso->baudRate_CH1 = 115200; + } +} + +void MainWindow::on_action300_2_toggled(bool arg1) +{ + if(arg1){ + ui->controller_iso->baudRate_CH2 = 300; + } +} + +void MainWindow::on_action600_2_toggled(bool arg1) +{ + if(arg1){ + ui->controller_iso->baudRate_CH2 = 600; + } +} + +void MainWindow::on_action1200_2_toggled(bool arg1) +{ + if(arg1){ + ui->controller_iso->baudRate_CH2 = 1200; + } +} + +void MainWindow::on_action2400_2_toggled(bool arg1) +{ + if(arg1){ + ui->controller_iso->baudRate_CH2 = 2400; + } +} + +void MainWindow::on_action4800_2_toggled(bool arg1) +{ + if(arg1){ + ui->controller_iso->baudRate_CH2 = 4800; + } +} + +void MainWindow::on_action9600_2_toggled(bool arg1) +{ + if(arg1){ + ui->controller_iso->baudRate_CH2 = 9600; + } +} + +void MainWindow::on_action14400_2_toggled(bool arg1) +{ + if(arg1){ + ui->controller_iso->baudRate_CH2 = 14400; + } +} + +void MainWindow::on_action19200_2_toggled(bool arg1) +{ + if(arg1){ + ui->controller_iso->baudRate_CH2 = 19200; + } +} + +void MainWindow::on_action28800_2_toggled(bool arg1) +{ + if(arg1){ + ui->controller_iso->baudRate_CH2 = 28800; + } +} + +void MainWindow::on_action38400_2_toggled(bool arg1) +{ + if(arg1){ + ui->controller_iso->baudRate_CH2 = 38400; + } +} + +void MainWindow::on_action57600_2_toggled(bool arg1) +{ + if(arg1){ + ui->controller_iso->baudRate_CH2 = 57600; + } +} + +void MainWindow::on_action115200_2_toggled(bool arg1) +{ + if(arg1){ + ui->controller_iso->baudRate_CH2 = 115200; + } +} + +void MainWindow::cycleBaudRate_CH1(){ + QAction *currentAction = uartBaudGroup_CH1->checkedAction(); + qDebug() << currentAction; + if(currentAction==ui->action300){ + ui->action600->setChecked(1); + return; + } + if(currentAction==ui->action600){ + ui->action1200->setChecked(1); + return; + } + if(currentAction==ui->action1200){ + ui->action2400->setChecked(1); + return; + } + if(currentAction==ui->action2400){ + ui->action4800->setChecked(1); + return; + } + if(currentAction==ui->action4800){ + ui->action9600->setChecked(1); + return; + } + if(currentAction==ui->action9600){ + ui->action14400->setChecked(1); + return; + } + if(currentAction==ui->action14400){ + ui->action19200->setChecked(1); + return; + } + if(currentAction==ui->action19200){ + ui->action28800->setChecked(1); + return; + } + if(currentAction==ui->action28800){ + ui->action38400->setChecked(1); + return; + } + if(currentAction==ui->action38400){ + ui->action57600->setChecked(1); + return; + } + if(currentAction==ui->action57600){ + ui->action115200->setChecked(1); + return; + } + if(currentAction==ui->action115200){ + ui->action300->setChecked(1); + return; + } + qFatal("Invalid state in MainWindow::cycleBaudRate_CH1()"); +} + +void MainWindow::cycleBaudRateBackwards_CH1(){ + QAction *currentAction = uartBaudGroup_CH1->checkedAction(); + qDebug() << currentAction; + if(currentAction==ui->action1200){ + ui->action600->setChecked(1); + return; + } + if(currentAction==ui->action2400){ + ui->action1200->setChecked(1); + return; + } + if(currentAction==ui->action4800){ + ui->action2400->setChecked(1); + return; + } + if(currentAction==ui->action9600){ + ui->action4800->setChecked(1); + return; + } + if(currentAction==ui->action14400){ + ui->action9600->setChecked(1); + return; + } + if(currentAction==ui->action19200){ + ui->action14400->setChecked(1); + return; + } + if(currentAction==ui->action28800){ + ui->action19200->setChecked(1); + return; + } + if(currentAction==ui->action38400){ + ui->action28800->setChecked(1); + return; + } + if(currentAction==ui->action57600){ + ui->action38400->setChecked(1); + return; + } + if(currentAction==ui->action115200){ + ui->action57600->setChecked(1); + return; + } + if(currentAction==ui->action300){ + ui->action115200->setChecked(1); + return; + } + if(currentAction==ui->action600){ + ui->action300->setChecked(1); + return; + } + qFatal("Invalid state in MainWindow::cycleBaudRateBackwards_CH1()"); +} + +void MainWindow::cycleBaudRate_CH2(){ + QAction *currentAction = uartBaudGroup_CH2->checkedAction(); + qDebug() << currentAction; + if(currentAction==ui->action300_2){ + ui->action600_2->setChecked(1); + return; + } + if(currentAction==ui->action600_2){ + ui->action1200_2->setChecked(1); + return; + } + if(currentAction==ui->action1200_2){ + ui->action2400_2->setChecked(1); + return; + } + if(currentAction==ui->action2400_2){ + ui->action4800_2->setChecked(1); + return; + } + if(currentAction==ui->action4800_2){ + ui->action9600_2->setChecked(1); + return; + } + if(currentAction==ui->action9600_2){ + ui->action14400_2->setChecked(1); + return; + } + if(currentAction==ui->action14400_2){ + ui->action19200_2->setChecked(1); + return; + } + if(currentAction==ui->action19200_2){ + ui->action28800_2->setChecked(1); + return; + } + if(currentAction==ui->action28800_2){ + ui->action38400_2->setChecked(1); + return; + } + if(currentAction==ui->action38400_2){ + ui->action57600_2->setChecked(1); + return; + } + if(currentAction==ui->action57600_2){ + ui->action115200_2->setChecked(1); + return; + } + if(currentAction==ui->action115200_2){ + ui->action300_2->setChecked(1); + return; + } + qFatal("Invalid state in MainWindow::cycleBaudRate_CH2()"); +} + +void MainWindow::cycleBaudRateBackwards_CH2(){ + QAction *currentAction = uartBaudGroup_CH2->checkedAction(); + qDebug() << currentAction; + if(currentAction==ui->action1200_2){ + ui->action600_2->setChecked(1); + return; + } + if(currentAction==ui->action2400_2){ + ui->action1200_2->setChecked(1); + return; + } + if(currentAction==ui->action4800_2){ + ui->action2400_2->setChecked(1); + return; + } + if(currentAction==ui->action9600_2){ + ui->action4800_2->setChecked(1); + return; + } + if(currentAction==ui->action14400_2){ + ui->action9600_2->setChecked(1); + return; + } + if(currentAction==ui->action19200_2){ + ui->action14400_2->setChecked(1); + return; + } + if(currentAction==ui->action28800_2){ + ui->action19200_2->setChecked(1); + return; + } + if(currentAction==ui->action38400_2){ + ui->action28800_2->setChecked(1); + return; + } + if(currentAction==ui->action57600_2){ + ui->action38400_2->setChecked(1); + return; + } + if(currentAction==ui->action115200_2){ + ui->action57600_2->setChecked(1); + return; + } + if(currentAction==ui->action300_2){ + ui->action115200_2->setChecked(1); + return; + } + if(currentAction==ui->action600_2){ + ui->action300_2->setChecked(1); + return; + } + qFatal("Invalid state in MainWindow::cycleBaudRateBackwards_CH2()"); +} + +void MainWindow::initShortcuts(){ + shortcut_cycleBaudRate_CH1 = new QShortcut(QKeySequence("Ctrl+B"), ui->menuBar); + shortcut_cycleBaudRateBackwards_CH1 = new QShortcut(QKeySequence("Ctrl+Shift+B"), ui->menuBar); + shortcut_cycleBaudRate_CH2 = new QShortcut(QKeySequence("Ctrl+Alt+B"), ui->menuBar); + shortcut_cycleBaudRateBackwards_CH2 = new QShortcut(QKeySequence("Ctrl+Shift+Alt+B"), ui->menuBar); + + shortcut_ArrowUp = new QShortcut(QKeySequence("Up"), ui->menuBar); + shortcut_ArrowDown = new QShortcut(QKeySequence("Down"), ui->menuBar); + shortcut_CtrlArrowUp = new QShortcut(QKeySequence("Ctrl+Up"), ui->menuBar); + shortcut_CtrlArrowDown = new QShortcut(QKeySequence("Ctrl+Down"), ui->menuBar); + shortcut_w = new QShortcut(QKeySequence("w"), ui->menuBar); + shortcut_s = new QShortcut(QKeySequence("s"), ui->menuBar); + shortcut_ctrlW = new QShortcut(QKeySequence("Ctrl+w"), ui->menuBar); + shortcut_ctrlS = new QShortcut(QKeySequence("Ctrl+s"), ui->menuBar); + + shortcut_a = new QShortcut(QKeySequence("a"), this); + shortcut_d = new QShortcut(QKeySequence("d"), this); + shortcut_ArrowLeft = new QShortcut(QKeySequence("Left"), this); + shortcut_ArrowRight = new QShortcut(QKeySequence("Right"), this); + + + + connect(shortcut_cycleBaudRate_CH1, SIGNAL(activated()), this, SLOT(cycleBaudRate_CH1())); + connect(shortcut_cycleBaudRateBackwards_CH1, SIGNAL(activated()), this, SLOT(cycleBaudRateBackwards_CH1())); + connect(shortcut_cycleBaudRate_CH2, SIGNAL(activated()), this, SLOT(cycleBaudRate_CH2())); + connect(shortcut_cycleBaudRateBackwards_CH2, SIGNAL(activated()), this, SLOT(cycleBaudRateBackwards_CH2())); + + connect(shortcut_ArrowUp, SIGNAL(activated()), this, SLOT(arrowUpTriggered())); + connect(shortcut_ArrowDown, SIGNAL(activated()), this, SLOT(arrowDownTriggered())); + connect(shortcut_CtrlArrowUp, SIGNAL(activated()), this, SLOT(ctrlArrowUpTriggered())); + connect(shortcut_CtrlArrowDown, SIGNAL(activated()), this, SLOT(ctrlArrowDownTriggered())); + connect(shortcut_w, SIGNAL(activated()), this, SLOT(arrowUpTriggered())); + connect(shortcut_s, SIGNAL(activated()), this, SLOT(arrowDownTriggered())); + connect(shortcut_ctrlW, SIGNAL(activated()), this, SLOT(ctrlArrowUpTriggered())); + connect(shortcut_ctrlS, SIGNAL(activated()), this, SLOT(ctrlArrowDownTriggered())); + + connect(shortcut_a, SIGNAL(activated()), this, SLOT(cycleDelayLeft())); + connect(shortcut_d, SIGNAL(activated()), this, SLOT(cycleDelayRight())); + + connect(shortcut_ArrowLeft, SIGNAL(activated()), this, SLOT(cycleDelayLeft())); + connect(shortcut_ArrowRight, SIGNAL(activated()), this, SLOT(cycleDelayRight())); + + + + + +} + +void MainWindow::timeBaseNeedsChanging(bool positive){ + int tempVal = ui->timeBaseSlider->value(); + tempVal += positive ? 1 : -1; + ui->timeBaseSlider->setValue(tempVal); +} + +void MainWindow::on_actionForce_Square_triggered(bool checked) +{ + forceSquare = checked; + //Force redraw! + int tempHeight = this->height(); + int tempWidth = this->width(); + this->resize(tempWidth+1, tempHeight+1); + this->resize(tempWidth, tempHeight); +} + +void MainWindow::arrowUpTriggered(){ + qDebug() << "Boy UP!"; + if(!(ui->scopeAxes->underMouse())) return; + + QPoint point = ui->scopeAxes->mapFromGlobal(QCursor::pos()); + wheelEmu = new QWheelEvent(point, 120, 0, 0, Qt::Vertical); + ui->controller_iso->setVoltageRange(wheelEmu); +} + +void MainWindow::arrowDownTriggered(){ + qDebug() << "Boy DOWN!"; + if(!(ui->scopeAxes->underMouse())) return; + + QPoint point = ui->scopeAxes->mapFromGlobal(QCursor::pos()); + wheelEmu = new QWheelEvent(point, -120, 0, 0, Qt::Vertical); + ui->controller_iso->setVoltageRange(wheelEmu); +} + +void MainWindow::ctrlArrowUpTriggered(){ + qDebug() << "Boy (ctrl) UP!"; + if(!(ui->scopeAxes->underMouse())) return; + + QPoint point = ui->scopeAxes->mapFromGlobal(QCursor::pos()); + wheelEmu = new QWheelEvent(point, 120, 0, Qt::ControlModifier, Qt::Vertical); + ui->controller_iso->setVoltageRange(wheelEmu); +} + +void MainWindow::ctrlArrowDownTriggered(){ + qDebug() << "Boy (ctrl) DOWN!"; + if(!(ui->scopeAxes->underMouse())) return; + + QPoint point = ui->scopeAxes->mapFromGlobal(QCursor::pos()); + wheelEmu = new QWheelEvent(point, -120, 0, Qt::ControlModifier, Qt::Vertical); + ui->controller_iso->setVoltageRange(wheelEmu); +} + +void MainWindow::cycleDelayRight(){ + qDebug() << "RIGHT"; + ui->controller_iso->delay -= ui->controller_iso->window/10; + if(ui->controller_iso->delay < 0) ui->controller_iso->delay = 0; +} + +void MainWindow::cycleDelayLeft(){ + qDebug() << "LEFT"; + ui->controller_iso->delay += ui->controller_iso->window/10; + if(ui->controller_iso->delay > (MAX_WINDOW_SIZE - ui->controller_iso->window)) ui->controller_iso->delay = (MAX_WINDOW_SIZE - ui->controller_iso->window); +} + +void MainWindow::on_actionAutomatically_Enable_Cursors_toggled(bool enabled) +{ + ui->makeCursorsNicer->setTurnedOn(enabled); +} + +void MainWindow::on_action60FPS_toggled(bool enabled) +{ + if(enabled){ + TIMER_PERIOD = 17; + ui->controller_iso->startTimer(); + } +} +void MainWindow::on_action30FPS_toggled(bool enabled) +{ + if(enabled){ + TIMER_PERIOD = 33; + ui->controller_iso->startTimer(); + } +} +void MainWindow::on_action20FPS_toggled(bool enabled) +{ + if(enabled){ + TIMER_PERIOD = 40; + ui->controller_iso->startTimer(); + } +} +void MainWindow::on_action15FPS_toggled(bool enabled) +{ + if(enabled){ + TIMER_PERIOD = 67; + ui->controller_iso->startTimer(); + } +} +void MainWindow::on_action10FPS_toggled(bool enabled) +{ + if(enabled){ + TIMER_PERIOD = 100; + ui->controller_iso->startTimer(); + } +} +void MainWindow::on_action5FPS_toggled(bool enabled) +{ + qDebug() << "5FPS"; + if(enabled){ + qDebug() << "5FPS is enabled!"; + TIMER_PERIOD = 200; + ui->controller_iso->startTimer(); + } +} + + +void MainWindow::on_actionAuto_Lock_toggled(bool arg1) +{ + ui->lockPsuCheckBox->enableTimer(arg1); + ui->lockPsuCheckBox->timer->start(ui->lockPsuCheckBox->timerLength); +} diff --git a/Desktop Interface/mainwindow.h b/Desktop Interface/mainwindow.h new file mode 100644 index 00000000..9db97bd9 --- /dev/null +++ b/Desktop Interface/mainwindow.h @@ -0,0 +1,131 @@ +#ifndef MAINWINDOW_H +#define MAINWINDOW_H + +#include +#include "isobuffer.h" +#include +#include +#include +#include "qcustomplot.h" +#include + +namespace Ui { +class MainWindow; +} + +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + explicit MainWindow(QWidget *parent = 0); + ~MainWindow(); + void resizeEvent(QResizeEvent *event); + +private slots: + void on_actionGain0_5_triggered(); + void on_actionGain1_triggered(); + void on_actionGain2_triggered(); + void on_actionGain4_triggered(); + void on_actionGain8_triggered(); + void on_actionGain16_triggered(); + void on_actionGain32_triggered(); + void on_actionGain64_triggered(); + void on_actionGainAuto_triggered(); + void on_actionCursor_Stats_triggered(bool checked); + void connectDisplaySignals(); + void on_action300_toggled(bool arg1); + void on_action600_toggled(bool arg1); + void on_action1200_toggled(bool arg1); + void on_action2400_toggled(bool arg1); + void on_action4800_toggled(bool arg1); + void on_action9600_toggled(bool arg1); + void on_action14400_toggled(bool arg1); + void on_action19200_toggled(bool arg1); + void on_action28800_toggled(bool arg1); + void on_action38400_toggled(bool arg1); + void on_action57600_toggled(bool arg1); + void on_action115200_toggled(bool arg1); + + void on_action300_2_toggled(bool arg1); + void on_action600_2_toggled(bool arg1); + void on_action1200_2_toggled(bool arg1); + void on_action2400_2_toggled(bool arg1); + void on_action4800_2_toggled(bool arg1); + void on_action9600_2_toggled(bool arg1); + void on_action14400_2_toggled(bool arg1); + void on_action19200_2_toggled(bool arg1); + void on_action28800_2_toggled(bool arg1); + void on_action38400_2_toggled(bool arg1); + void on_action57600_2_toggled(bool arg1); + void on_action115200_2_toggled(bool arg1); + void cycleBaudRate_CH1(); + void cycleBaudRateBackwards_CH1(); + void cycleBaudRate_CH2(); + void cycleBaudRateBackwards_CH2(); + + void timeBaseNeedsChanging(bool positive); + void on_actionForce_Square_triggered(bool checked); + + void arrowUpTriggered(); + void arrowDownTriggered(); + void ctrlArrowUpTriggered(); + void ctrlArrowDownTriggered(); + + void cycleDelayLeft(); + void cycleDelayRight(); + + + void on_actionAutomatically_Enable_Cursors_toggled(bool arg1); + + void on_action60FPS_toggled(bool enabled); + void on_action30FPS_toggled(bool enabled); + void on_action20FPS_toggled(bool enabled); + void on_action15FPS_toggled(bool enabled); + void on_action10FPS_toggled(bool enabled); + void on_action5FPS_toggled(bool enabled); + + + void on_actionAuto_Lock_toggled(bool arg1); + +private: + Ui::MainWindow *ui; + void initialisePlot(); + void labelPsu(); + void menuSetup(); + void initShortcuts(); + + QActionGroup *gainGroup; + QActionGroup *rangeGroupV; + QActionGroup *rangeGroupI; + QActionGroup *uartBaudGroup_CH1; + QActionGroup *uartBaudGroup_CH2; + QActionGroup *fpsGroup; + QShortcut *shortcut_cycleBaudRate_CH1; + QShortcut *shortcut_cycleBaudRateBackwards_CH1; + QShortcut *shortcut_cycleBaudRate_CH2; + QShortcut *shortcut_cycleBaudRateBackwards_CH2; + QShortcut *shortcut_ArrowUp; + QShortcut *shortcut_ArrowDown; + QShortcut *shortcut_CtrlArrowUp; + QShortcut *shortcut_CtrlArrowDown; + QShortcut *shortcut_w; + QShortcut *shortcut_ctrlW; + QShortcut *shortcut_s; + QShortcut *shortcut_ctrlS; + QShortcut *shortcut_a; + QShortcut *shortcut_d; + QShortcut *shortcut_ArrowLeft; + QShortcut *shortcut_ArrowRight; + + + + QWheelEvent *wheelEmu; + + bool forceSquare = false; + + QCPItemText *textLabel; + +}; + +#endif // MAINWINDOW_H diff --git a/Desktop Interface/mainwindow.ui b/Desktop Interface/mainwindow.ui new file mode 100644 index 00000000..41c5c959 --- /dev/null +++ b/Desktop Interface/mainwindow.ui @@ -0,0 +1,3907 @@ + + + MainWindow + + + true + + + + 0 + 0 + 1136 + 768 + + + + + 1024 + 768 + + + + EspoTek Labrador + + + + + + + QLayout::SetMinAndMaxSize + + + + + + 0 + 0 + + + + + 500 + 400 + + + + Qt::LeftToRight + + + + + + + -60 + + + 10 + + + 10 + + + -20 + + + -20 + + + true + + + Qt::Horizontal + + + QSlider::TicksBelow + + + 10 + + + + + + + true + + + + 0 + 0 + + + + + 16777215 + 48 + + + + true + + + + + + + + 16777215 + 48 + + + + true + + + + + + + + + + + Device disconnected! + + + Qt::AlignCenter + + + + + + + + + + + Oscilloscope CH1 + + + false + + + true + + + true + + + + + + Paused + + + + + + + AC Coupled + + + + + + + Filter + + + + + + + Double Sample Rate + + + + + + + 0 + + + + + Max + + + + + + + + 0 + 24 + + + + QFrame::NoFrame + + + + + + + Min + + + + + + + + 0 + 24 + + + + QFrame::NoFrame + + + + + + + Mean + + + + + + + RMS + + + + + + + + 0 + 24 + + + + QFrame::NoFrame + + + + + + + + 0 + 24 + + + + QFrame::NoFrame + + + + + + + acCoupledLabel_CH1 + filterLabel_CH1 + pausedLabeL_CH1 + doubleSampleLabel + + + + + + true + + + Cursor + + + false + + + false + + + + + + Horizontal + + + + + + + Vertical + + + + + + + CURSOR ENABLER + + + + + + + + + + + + + + true + + + Oscilloscope CH2 + + + false + + + true + + + false + + + + + + Paused + + + + + + + AC Coupled + + + + + + + Filter + + + + + + + X-Y Display + + + + + + + 0 + + + + + Max + + + + + + + + 0 + 24 + + + + QFrame::NoFrame + + + + + + + Min + + + + + + + + 0 + 24 + + + + QFrame::NoFrame + + + + + + + Mean + + + + + + + RMS + + + + + + + + 0 + 24 + + + + QFrame::NoFrame + + + + + + + + 0 + 24 + + + + QFrame::NoFrame + + + + + + + + + + + + true + + + Trigger + + + true + + + false + + + + + + + CH1 (Rising) + + + + + CH1 (Falling) + + + + + CH2 (Rising) + + + + + CH2 (Falling) + + + + + + + + -20.000000000000000 + + + 20.000000000000000 + + + 0.100000000000000 + + + + + + + Single Shot + + + + + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + 16777215 + 48 + + + + cursorStatsLabel + + + Qt::AlignCenter + + + + + + + false + + + Multimeter++ + + + true + + + false + + + + + + + V + + + + + I + + + + + R + + + + + C + + + + + + + + 0 + + + 0 + + + + + Max + + + + + + + Min + + + + + + + + 0 + 24 + + + + QFrame::NoFrame + + + 4 + + + + + + + Mean + + + + + + + + 0 + 24 + + + + QFrame::NoFrame + + + 4 + + + + + + + RMS + + + + + + + + 0 + 24 + + + + QFrame::NoFrame + + + 4 + + + + + + + + 0 + 24 + + + + QFrame::NoFrame + + + 4 + + + + + + + + + Paused + + + + + + + Series Resistance + + + + + + + Mode + + + + + + + Ω + + + 0 + + + 1000000.000000000000000 + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + SALUTON MI ESTAS FUNCTION GENERATOR CONTROLLER + + + + + + + + + true + + + Signal Gen CH1 + + + false + + + false + + + + + + Waveform + + + + + + + + + + Frequency + + + + + + + Hz + + + 4 + + + 0.200000000000000 + + + 1000000.000000000000000 + + + 1000.000000000000000 + + + + + + + Amplitude + + + + + + + V + + + 9.600000000000000 + + + 0.100000000000000 + + + + + + + DC Offset + + + + + + + V + + + 9.600000000000000 + + + 0.100000000000000 + + + + + + + + + + true + + + Signal Gen CH2 + + + false + + + false + + + + + + true + + + Waveform + + + + + + + true + + + + + + + true + + + Frequency + + + + + + + true + + + Hz + + + 2 + + + 1000000.000000000000000 + + + 1000.000000000000000 + + + + + + + true + + + Amplitude + + + + + + + true + + + V + + + 10.000000000000000 + + + 0.100000000000000 + + + + + + + true + + + DC Offset + + + + + + + true + + + V + + + 10.000000000000000 + + + 0.100000000000000 + + + + + + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + SALUTON MI ESTAS ISO DRIVER + + + + + + + + + + + false + + + PSU + + + + + + false + + + 90 + + + 300 + + + 1 + + + Qt::Vertical + + + QSlider::TicksBelow + + + 20 + + + + + + + Lock PSU + + + true + + + + + + + + 108 + 36 + + + + + 108 + 36 + + + + true + + + 4 + + + 5.000000000000000 + + + 5 + + + + + + + + + + SALUTON MI ESTAS USB DRIVER + + + + + + + + + Bus Sniffer CH1 + + + true + + + false + + + + + + Serial Decoding + + + true + + + true + + + false + + + + 0 + + + 0 + + + 6 + + + 0 + + + 0 + + + + + + UART + + + + + SPI + + + + + I2C + + + + + + + + + + + + + + false + + + Bus Sniffer CH2 + + + true + + + false + + + + + + Serial Decoding + + + true + + + true + + + false + + + + 0 + + + 0 + + + 6 + + + 0 + + + 0 + + + + + + UART + + + + + SPI + + + + + I2C + + + + + + + + + + + + + + Digital Output + + + + + + Pin 3 + + + + + + + Pin 2 + + + + + + + Pin 1 + + + + + + + Pin 4 + + + + + digitalOutCheckbox_CH2 + digitalOutCheckbox_CH1 + digitalOutCheckbox_CH3 + digitalOutCheckbox_CH4 + + + + + + Debug! + + + + + + + + 96 + 36 + + + + + 96 + 36 + + + + BUFFER IMAGE HERE + + + Qt::AlignCenter + + + + + + + + + + + + + 0 + 0 + 1136 + 21 + + + + + File + + + + + + Oscilloscope + + + + Gain + + + + + + + + + + + + + + CH1 Stats + + + + + + + + + CH2 Stats + + + + + + + + + Frame rate + + + + + + + + + + + + + + + + + + + + + + + Multimeter + + + + Range (V) + + + + + + + + Range (I) + + + + + + + + + + + + Bus Sniffer + + + + UART 1 + + + + Baud Rate + + + + + + + + + + + + + + + + + Type Here + + + + + Parity Bit + + + + + + Data Bits + + + + + + + + + + + UART 2 + + + + Baud Rate + + + + + + + + + + + + + + + + + Data Bits + + + + + + Parity Bit + + + + + + + + + + + + + Power Supply + + + + + + + + + + + + true + + + Auto + + + + + true + + + 0.5 + + + + + true + + + 1 + + + + + true + + + 2 + + + + + true + + + 4 + + + + + true + + + 8 + + + + + true + + + 16 + + + + + true + + + 32 + + + + + true + + + 64 + + + QAction::TextHeuristicRole + + + + + Calibrate (coming soon!) + + + + + true + + + true + + + Cursor Stats + + + + + true + + + Max + + + + + true + + + Min + + + + + true + + + Mean + + + + + true + + + RMS + + + + + true + + + Max + + + + + true + + + Min + + + + + true + + + Mean + + + + + true + + + RMS + + + + + true + + + false + + + mV + + + + + true + + + false + + + V + + + + + true + + + true + + + Auto + + + + + true + + + true + + + Auto + + + + + true + + + false + + + mA + + + + + true + + + A + + + + + true + + + 300 + + + + + true + + + 600 + + + + + true + + + 1200 + + + + + true + + + 2400 + + + + + true + + + 4800 + + + + + true + + + 9600 + + + + + true + + + 14400 + + + + + true + + + 19200 + + + + + true + + + 28800 + + + + + true + + + 38400 + + + + + true + + + 57600 (Glitchy) + + + + + true + + + 115200 (Glitchy) + + + + + true + + + 8 + + + + + true + + + None + + + + + true + + + 300 + + + + + true + + + 600 + + + + + true + + + 1200 + + + + + true + + + 2400 + + + + + true + + + 4800 + + + + + true + + + 9600 + + + + + true + + + 14400 + + + + + true + + + 19200 + + + + + true + + + 28800 + + + + + true + + + 38400 + + + + + true + + + 57600 (Glitchy) + + + + + true + + + 115200 (Glitchy) + + + + + true + + + 8 + + + + + true + + + None + + + + + Coming Soon! + + + + + true + + + Force Square Display (Not Officially Supported) + + + + + true + + + true + + + Enable Cursors on Click + + + + + true + + + true + + + 60FPS + + + + + true + + + 30FPS + + + + + true + + + 20FPS + + + + + true + + + 15FPS + + + + + true + + + 10FPS + + + + + true + + + 5FPS + + + + + true + + + true + + + Auto Lock + + + + + + + QCustomPlot + QWidget +

    qcustomplot.h
    + 1 + + mouseWheel(QWheelEvent*) + mouseRelease(QMouseEvent*) + mousePress(QMouseEvent*) + mouseMove(QMouseEvent*) + + + + bufferControl + QLabel +
    buffercontrol.h
    + + scopeOut_CH1(bool) + scopeOut_CH2(bool) + scopeUncheck(bool) + signalGenOut(bool) + busSnifferOut_CH1(bool) + busSnifferOut_CH2(bool) + busSnifferUncheck(bool) + multimeterOut(bool) + scopeDsrOut(bool) + scopeDsrUncheck(bool) + updateDig(int) + modeChange(int) + scopeIn_CH1(bool) + scopeIn_CH2(bool) + signalGenIn(bool) + busSnifferIn_CH1(bool) + busSnifferIn_CH2(bool) + multimeterIn(bool) + scopeDsrIn(bool) + digIn_CH1(bool) + digIn_CH2(bool) + digIn_CH3(bool) + digIn_CH4(bool) + +
    + + espoSlider + QSlider +
    esposlider.h
    + + lcdOut(QString) + voltageChanged(double) + selfMoved(int) + +
    + + espoSpinBox + QDoubleSpinBox +
    espospinbox.h
    + + maximumChanged(double) + setMax(double) + setMin(double) + +
    + + winUsbDriver + QLabel +
    winusbdriver.h
    + + startIsoTimer() + sendClearBuffer(bool,bool,bool) + setVisible_CH2(bool) + gainBuffers(double) + disableWindow(bool) + enableMMTimer() + checkXY(bool) + setPsu(double) + setFunctionGen(int,functionGenControl*) + newDig(int) + setDeviceMode(int) + setGain(double) + avrDebug() + +
    + + espoComboBox + QComboBox +
    espocombobox.h
    +
    + + functionGenControl + QLabel +
    functiongencontrol.h
    + + functionGenToUpdate(int,functionGenControl*) + setMaxFreq_CH1(double) + setMinFreq_CH1(double) + setMaxFreq_CH2(double) + setMinFreq_CH2(double) + waveformName_CH1(QString) + waveformName_CH2(QString) + freqUpdate_CH1(double) + amplitudeUpdate_CH1(double) + offsetUpdate_CH1(double) + freqUpdate_CH2(double) + amplitudeUpdate_CH2(double) + offsetUpdate_CH2(double) + +
    + + isoDriver + QLabel +
    isodriver.h
    + + setGain(double) + disableWindow(bool) + setCursorStatsVisible(bool) + sendCursorStatsText(QString) + singleShotTriggered(bool) + multimeterMax(double) + multimeterMin(double) + multimeterMean(double) + sendMultimeterLabel1(QString) + sendMultimeterLabel2(QString) + sendMultimeterLabel3(QString) + changeTimeAxis(bool) + sendTriggerValue(double) + sendVmax_CH1(double) + sendVmin_CH1(double) + sendVmean_CH1(double) + sendVmax_CH2(double) + sendVmin_CH2(double) + sendVmean_CH2(double) + setWindow(int) + setVoltageRange(QWheelEvent*) + pauseEnable_CH1(bool) + pauseEnable_CH2(bool) + startTimer() + clearBuffers(bool,bool,bool) + setVisible_CH2(bool) + gainBuffers(double) + setAutoGain(bool) + graphMousePress(QMouseEvent*) + graphMouseRelease(QMouseEvent*) + cursorEnableHori(bool) + cursorEnableVert(bool) + graphMouseMove(QMouseEvent*) + setTriggerEnabled(bool) + setTriggerLevel(double) + setSingleShotEnabled(bool) + setTriggerMode(int) + setAC_CH1(bool) + setAC_CH2(bool) + setMultimeterType(int) + setSeriesResistance(double) + enableMM() + setSerialDecodeEnabled_CH1(bool) + setSerialDecodeEnabled_CH2(bool) + setXYmode(bool) + triggerGroupStateChange(bool) + pauseEnable_multimeter(bool) + +
    + + noCloseMenu + QMenu +
    noclosemenu.h
    +
    + + cursorEnabler + QLabel +
    cursorenabler.h
    + + tickHori(bool) + tickVert(bool) + passOnSignal(QMouseEvent*) + clickDetected(QMouseEvent*) + setTurnedOn(bool) + +
    + + deviceConnectedDisplay + QLabel +
    deviceconnecteddisplay.h
    + + connectedStatusChanged(bool) + +
    + + timedTickBox + QCheckBox +
    timedtickbox.h
    + + resetTimer() + +
    + + + + + scopeGroup_CH1 + toggled(bool) + bufferDisplay + scopeIn_CH1(bool) + + + 691 + 64 + + + 1065 + 756 + + + + + scopeGroup_CH2 + toggled(bool) + bufferDisplay + scopeIn_CH2(bool) + + + 838 + 54 + + + 1065 + 756 + + + + + signalGenGroup_CH2 + toggled(bool) + bufferDisplay + signalGenIn(bool) + + + 843 + 577 + + + 1065 + 756 + + + + + bufferDisplay + busSnifferOut_CH2(bool) + busSnifferGroup_CH2 + setEnabled(bool) + + + 1065 + 756 + + + 1124 + 606 + + + + + bufferDisplay + signalGenOut(bool) + signalGenGroup_CH2 + setEnabled(bool) + + + 1065 + 756 + + + 843 + 577 + + + + + bufferDisplay + scopeOut_CH1(bool) + scopeGroup_CH1 + setEnabled(bool) + + + 1065 + 756 + + + 818 + 207 + + + + + bufferDisplay + scopeOut_CH2(bool) + scopeGroup_CH2 + setEnabled(bool) + + + 1065 + 756 + + + 958 + 197 + + + + + bufferDisplay + busSnifferUncheck(bool) + busSnifferGroup_CH2 + setChecked(bool) + + + 1065 + 756 + + + 1124 + 606 + + + + + bufferDisplay + scopeUncheck(bool) + scopeGroup_CH2 + setChecked(bool) + + + 1065 + 756 + + + 958 + 197 + + + + + doubleSampleLabel + toggled(bool) + bufferDisplay + scopeDsrIn(bool) + + + 808 + 160 + + + 1065 + 756 + + + + + bufferDisplay + scopeDsrUncheck(bool) + doubleSampleLabel + setChecked(bool) + + + 1065 + 756 + + + 808 + 160 + + + + + bufferDisplay + scopeDsrOut(bool) + doubleSampleLabel + setEnabled(bool) + + + 1065 + 756 + + + 808 + 160 + + + + + psuSlider + valueChanged(int) + psuSlider + selfMoved(int) + + + 979 + 308 + + + 979 + 345 + + + + + psuSlider + lcdOut(QString) + psuDisplay + display(QString) + + + 1002 + 355 + + + 1086 + 420 + + + + + amplitudeValue_CH1 + valueChanged(double) + dcOffsetValue_CH1 + maximumChanged(double) + + + 806 + 668 + + + 806 + 713 + + + + + amplitudeValue_CH2 + valueChanged(double) + dcOffsetValue_CH2 + maximumChanged(double) + + + 949 + 668 + + + 949 + 713 + + + + + dcOffsetValue_CH1 + valueChanged(double) + amplitudeValue_CH1 + maximumChanged(double) + + + 806 + 713 + + + 806 + 668 + + + + + dcOffsetValue_CH2 + valueChanged(double) + amplitudeValue_CH2 + maximumChanged(double) + + + 949 + 713 + + + 949 + 668 + + + + + waveformSelect_CH1 + currentTextChanged(QString) + controller_fg + waveformName_CH1(QString) + + + 806 + 578 + + + 960 + 509 + + + + + waveformSelect_CH2 + currentTextChanged(QString) + controller_fg + waveformName_CH2(QString) + + + 949 + 578 + + + 960 + 509 + + + + + frequencyValue_CH1 + valueChanged(double) + controller_fg + freqUpdate_CH1(double) + + + 806 + 623 + + + 960 + 509 + + + + + amplitudeValue_CH1 + valueChanged(double) + controller_fg + amplitudeUpdate_CH1(double) + + + 806 + 668 + + + 960 + 509 + + + + + dcOffsetValue_CH1 + valueChanged(double) + controller_fg + offsetUpdate_CH1(double) + + + 806 + 713 + + + 960 + 509 + + + + + controller_fg + setMaxFreq_CH1(double) + frequencyValue_CH1 + setMax(double) + + + 960 + 509 + + + 806 + 623 + + + + + controller_fg + setMinFreq_CH1(double) + frequencyValue_CH1 + setMin(double) + + + 960 + 509 + + + 806 + 623 + + + + + bufferDisplay + busSnifferOut_CH1(bool) + busSifferGroup_CH1 + setEnabled(bool) + + + 1065 + 756 + + + 1124 + 528 + + + + + bufferDisplay + busSnifferOut_CH2(bool) + busSnifferGroup_CH2 + setEnabled(bool) + + + 1065 + 756 + + + 1124 + 606 + + + + + busSifferGroup_CH1 + toggled(bool) + bufferDisplay + busSnifferIn_CH1(bool) + + + 1124 + 528 + + + 1065 + 756 + + + + + busSnifferGroup_CH2 + toggled(bool) + bufferDisplay + busSnifferIn_CH2(bool) + + + 1124 + 606 + + + 1065 + 756 + + + + + digitalOutCheckbox_CH1 + toggled(bool) + bufferDisplay + digIn_CH1(bool) + + + 1044 + 652 + + + 1065 + 756 + + + + + digitalOutCheckbox_CH2 + toggled(bool) + bufferDisplay + digIn_CH2(bool) + + + 1114 + 652 + + + 1065 + 756 + + + + + digitalOutCheckbox_CH3 + toggled(bool) + bufferDisplay + digIn_CH3(bool) + + + 1044 + 675 + + + 1065 + 756 + + + + + digitalOutCheckbox_CH4 + toggled(bool) + bufferDisplay + digIn_CH4(bool) + + + 1114 + 675 + + + 1065 + 756 + + + + + controller_fg + setMaxFreq_CH2(double) + frequencyValue_CH2 + setMax(double) + + + 960 + 509 + + + 949 + 623 + + + + + controller_fg + setMinFreq_CH2(double) + frequencyValue_CH2 + setMin(double) + + + 960 + 509 + + + 949 + 623 + + + + + frequencyValue_CH2 + valueChanged(double) + controller_fg + freqUpdate_CH2(double) + + + 949 + 623 + + + 960 + 509 + + + + + amplitudeValue_CH2 + valueChanged(double) + controller_fg + amplitudeUpdate_CH2(double) + + + 949 + 668 + + + 960 + 509 + + + + + dcOffsetValue_CH2 + valueChanged(double) + controller_fg + offsetUpdate_CH2(double) + + + 949 + 713 + + + 960 + 509 + + + + + timeBaseSlider + valueChanged(int) + controller_iso + setWindow(int) + + + 424 + 647 + + + 960 + 757 + + + + + scopeAxes + mouseWheel(QWheelEvent*) + controller_iso + setVoltageRange(QWheelEvent*) + + + 482 + 567 + + + 960 + 757 + + + + + pausedLabeL_CH1 + toggled(bool) + controller_iso + pauseEnable_CH1(bool) + + + 690 + 91 + + + 960 + 757 + + + + + pausedLabel_CH2 + toggled(bool) + controller_iso + pauseEnable_CH2(bool) + + + 837 + 91 + + + 960 + 757 + + + + + pausedLabeL_CH1 + toggled(bool) + pausedLabel_CH2 + setChecked(bool) + + + 690 + 91 + + + 837 + 91 + + + + + pausedLabel_CH2 + toggled(bool) + pausedLabeL_CH1 + setChecked(bool) + + + 837 + 90 + + + 690 + 91 + + + + + controller_iso + disableWindow(bool) + MainWindow + setEnabled(bool) + + + 960 + 757 + + + 1023 + 226 + + + + + scopeAxes + mouseRelease(QMouseEvent*) + controller_iso + graphMouseRelease(QMouseEvent*) + + + 354 + 510 + + + 960 + 757 + + + + + cursorHoriCheck + toggled(bool) + controller_iso + cursorEnableHori(bool) + + + 808 + 253 + + + 960 + 757 + + + + + cursorVertCheck + toggled(bool) + controller_iso + cursorEnableVert(bool) + + + 808 + 276 + + + 960 + 757 + + + + + scopeAxes + mouseMove(QMouseEvent*) + controller_iso + graphMouseMove(QMouseEvent*) + + + 441 + 474 + + + 960 + 757 + + + + + controller_iso + setCursorStatsVisible(bool) + cursorStatsLabel + setVisible(bool) + + + 960 + 757 + + + 960 + 332 + + + + + lockPsuCheckBox + toggled(bool) + psuSlider + setDisabled(bool) + + + 1115 + 378 + + + 1002 + 355 + + + + + triggerGroup + toggled(bool) + controller_iso + setTriggerEnabled(bool) + + + 838 + 280 + + + 960 + 757 + + + + + triggerLevelValue + valueChanged(double) + controller_iso + setTriggerLevel(double) + + + 948 + 272 + + + 960 + 757 + + + + + controller_iso + singleShotTriggered(bool) + pausedLabeL_CH1 + setChecked(bool) + + + 960 + 757 + + + 690 + 91 + + + + + singleShotCheckBox + toggled(bool) + controller_iso + setSingleShotEnabled(bool) + + + 948 + 295 + + + 960 + 757 + + + + + triggerChannelSelect + currentIndexChanged(int) + controller_iso + setTriggerMode(int) + + + 948 + 246 + + + 960 + 757 + + + + + acCoupledLabel_CH1 + toggled(bool) + controller_iso + setAC_CH1(bool) + + + 808 + 114 + + + 960 + 757 + + + + + acCoupledLabel_CH2 + toggled(bool) + controller_iso + setAC_CH2(bool) + + + 948 + 114 + + + 960 + 757 + + + + + controller_usb + gainBuffers(double) + controller_iso + gainBuffers(double) + + + 1125 + 449 + + + 960 + 757 + + + + + controller_iso + setGain(double) + controller_usb + setGain(double) + + + 960 + 757 + + + 1125 + 449 + + + + + controller_usb + disableWindow(bool) + MainWindow + setEnabled(bool) + + + 1125 + 449 + + + 659 + 767 + + + + + psuSlider + voltageChanged(double) + controller_usb + setPsu(double) + + + 1002 + 355 + + + 1125 + 449 + + + + + controller_fg + functionGenToUpdate(int,functionGenControl*) + controller_usb + setFunctionGen(int,functionGenControl*) + + + 960 + 509 + + + 1125 + 449 + + + + + bufferDisplay + updateDig(int) + controller_usb + newDig(int) + + + 1065 + 756 + + + 1125 + 449 + + + + + controller_usb + sendClearBuffer(bool,bool,bool) + controller_iso + clearBuffers(bool,bool,bool) + + + 1125 + 449 + + + 960 + 757 + + + + + controller_usb + startIsoTimer() + controller_iso + startTimer() + + + 1125 + 449 + + + 960 + 757 + + + + + bufferDisplay + modeChange(int) + controller_usb + setDeviceMode(int) + + + 1065 + 756 + + + 1125 + 449 + + + + + controller_usb + setVisible_CH2(bool) + controller_iso + setVisible_CH2(bool) + + + 1125 + 449 + + + 960 + 757 + + + + + multimeterGroup + toggled(bool) + bufferDisplay + multimeterIn(bool) + + + 960 + 484 + + + 1065 + 756 + + + + + bufferDisplay + multimeterOut(bool) + multimeterGroup + setEnabled(bool) + + + 1065 + 756 + + + 960 + 484 + + + + + multimeterModeSelect + currentIndexChanged(int) + controller_iso + setMultimeterType(int) + + + 816 + 400 + + + 960 + 757 + + + + + controller_iso + multimeterMax(double) + multimeterMaxDisplay + display(double) + + + 960 + 757 + + + 949 + 386 + + + + + controller_iso + multimeterMin(double) + multimeterMinDisplay + display(double) + + + 960 + 757 + + + 949 + 410 + + + + + controller_iso + multimeterMean(double) + multimeterMeanDisplay + display(double) + + + 960 + 757 + + + 949 + 434 + + + + + controller_usb + enableMMTimer() + controller_iso + enableMM() + + + 1125 + 449 + + + 960 + 757 + + + + + multimeterResistanceSelect + valueChanged(double) + controller_iso + setSeriesResistance(double) + + + 816 + 445 + + + 960 + 757 + + + + + controller_iso + sendMultimeterLabel1(QString) + multimeterMaxLabel + setText(QString) + + + 960 + 757 + + + 846 + 384 + + + + + controller_iso + sendMultimeterLabel2(QString) + multimeterMinLabel + setText(QString) + + + 960 + 757 + + + 842 + 408 + + + + + controller_iso + sendMultimeterLabel3(QString) + multimeterMeanLabel + setText(QString) + + + 960 + 757 + + + 852 + 432 + + + + + serialDecodingCheck_CH1 + toggled(bool) + controller_iso + setSerialDecodeEnabled_CH1(bool) + + + 1114 + 518 + + + 960 + 757 + + + + + serialDecodingCheck_CH2 + toggled(bool) + controller_iso + setSerialDecodeEnabled_CH2(bool) + + + 1114 + 596 + + + 960 + 757 + + + + + serialDecodingCheck_CH1 + toggled(bool) + console1 + setVisible(bool) + + + 1114 + 518 + + + 384 + 677 + + + + + serialDecodingCheck_CH2 + toggled(bool) + console2 + setVisible(bool) + + + 1114 + 596 + + + 488 + 731 + + + + + controller_iso + changeTimeAxis(bool) + MainWindow + timeBaseNeedsChanging(bool) + + + 960 + 757 + + + 800 + 696 + + + + + controller_usb + checkXY(bool) + xyDisplayLabel + setChecked(bool) + + + 1125 + 449 + + + 876 + 152 + + + + + xyDisplayLabel + toggled(bool) + controller_iso + setXYmode(bool) + + + 863 + 149 + + + 960 + 757 + + + + + busSnifferGroup_CH2 + toggled(bool) + signalGenGroup_CH2 + setDisabled(bool) + + + 1124 + 606 + + + 959 + 723 + + + + + scopeAxes + mousePress(QMouseEvent*) + makeCursorsNicer + clickDetected(QMouseEvent*) + + + 590 + 401 + + + 808 + 295 + + + + + makeCursorsNicer + tickHori(bool) + cursorHoriCheck + setChecked(bool) + + + 808 + 295 + + + 808 + 253 + + + + + makeCursorsNicer + tickVert(bool) + cursorVertCheck + setChecked(bool) + + + 808 + 295 + + + 808 + 276 + + + + + makeCursorsNicer + passOnSignal(QMouseEvent*) + controller_iso + graphMousePress(QMouseEvent*) + + + 808 + 295 + + + 960 + 757 + + + + + controller_iso + sendTriggerValue(double) + triggerLevelValue + setValue(double) + + + 960 + 757 + + + 948 + 272 + + + + + triggerGroup + toggled(bool) + controller_iso + triggerGroupStateChange(bool) + + + 905 + 230 + + + 960 + 757 + + + + + controller_usb + disableWindow(bool) + deviceConnected + connectedStatusChanged(bool) + + + 1125 + 449 + + + 905 + 36 + + + + + controller_iso + disableWindow(bool) + deviceConnected + connectedStatusChanged(bool) + + + 960 + 757 + + + 828 + 35 + + + + + multimeterPauseCheckBox + toggled(bool) + controller_iso + pauseEnable_multimeter(bool) + + + 816 + 474 + + + 960 + 757 + + + + + controller_iso + sendVmax_CH1(double) + voltageInfoMaxDisplay_CH1 + display(double) + + + 960 + 757 + + + 790 + 175 + + + + + controller_iso + sendVmin_CH1(double) + voltageInfoMinDisplay_CH1 + display(double) + + + 960 + 757 + + + 800 + 193 + + + + + controller_iso + sendVmean_CH1(double) + voltageInfoMeanDisplay_CH1 + display(double) + + + 960 + 757 + + + 807 + 206 + + + + + controller_iso + sendVmax_CH2(double) + voltageInfoMaxDisplay_CH2 + display(double) + + + 960 + 757 + + + 929 + 172 + + + + + controller_iso + sendVmin_CH2(double) + voltageInfoMinDisplay_CH2 + display(double) + + + 960 + 757 + + + 943 + 184 + + + + + controller_iso + sendVmean_CH2(double) + voltageInfoMeanDisplay_CH2 + display(double) + + + 960 + 757 + + + 940 + 196 + + + + + pushButton + clicked() + controller_usb + avrDebug() + + + 1023 + 707 + + + 1060 + 444 + + + + + lockPsuCheckBox + toggled(bool) + lockPsuCheckBox + resetTimer(bool) + + + 1036 + 372 + + + 1018 + 371 + + + + + lockPsuCheckBox + toggled(bool) + lockPsuCheckBox + resetTimer() + + + 1054 + 370 + + + 1013 + 371 + + + + + psuSlider + sliderMoved(int) + lockPsuCheckBox + resetTimer() + + + 986 + 113 + + + 1071 + 368 + + + + + + timeBaseNeedsChanging(bool) + + diff --git a/Desktop Interface/noclosemenu.cpp b/Desktop Interface/noclosemenu.cpp new file mode 100644 index 00000000..07cc148d --- /dev/null +++ b/Desktop Interface/noclosemenu.cpp @@ -0,0 +1,22 @@ +#include "noclosemenu.h" + +noCloseMenu::noCloseMenu(QWidget *parent) : QMenu(parent) +{ + +} + +//Dankon, Jakob Leben +//http://stackoverflow.com/questions/2050462/prevent-a-qmenu-from-closing-when-one-of-its-qaction-is-triggered + +void noCloseMenu::mouseReleaseEvent(QMouseEvent *e) +{ + QAction *action = activeAction(); + if (action && action->isEnabled()) { + action->setEnabled(false); + QMenu::mouseReleaseEvent(e); + action->setEnabled(true); + action->trigger(); + } + else + QMenu::mouseReleaseEvent(e); +} diff --git a/Desktop Interface/noclosemenu.h b/Desktop Interface/noclosemenu.h new file mode 100644 index 00000000..b10099ca --- /dev/null +++ b/Desktop Interface/noclosemenu.h @@ -0,0 +1,19 @@ +#ifndef NOCLOSEMENU_H +#define NOCLOSEMENU_H + +#include +#include + +class noCloseMenu : public QMenu +{ + Q_OBJECT +public: + explicit noCloseMenu(QWidget *parent = 0); +private: + void mouseReleaseEvent(QMouseEvent *e); +signals: + +public slots: +}; + +#endif // NOCLOSEMENU_H diff --git a/Desktop Interface/qcustomplot.cpp b/Desktop Interface/qcustomplot.cpp new file mode 100644 index 00000000..30860827 --- /dev/null +++ b/Desktop Interface/qcustomplot.cpp @@ -0,0 +1,23553 @@ +/*************************************************************************** +** ** +** QCustomPlot, an easy to use, modern plotting widget for Qt ** +** Copyright (C) 2011-2015 Emanuel Eichhammer ** +** ** +** This program is free software: you can redistribute it and/or modify ** +** it under the terms of the GNU General Public License as published by ** +** the Free Software Foundation, either version 3 of the License, or ** +** (at your option) any later version. ** +** ** +** This program is distributed in the hope that it will be useful, ** +** but WITHOUT ANY WARRANTY; without even the implied warranty of ** +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** +** GNU General Public License for more details. ** +** ** +** You should have received a copy of the GNU General Public License ** +** along with this program. If not, see http://www.gnu.org/licenses/. ** +** ** +**************************************************************************** +** Author: Emanuel Eichhammer ** +** Website/Contact: http://www.qcustomplot.com/ ** +** Date: 22.12.15 ** +** Version: 1.3.2 ** +****************************************************************************/ + +#include "qcustomplot.h" + + + +//////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////// QCPPainter +//////////////////////////////////////////////////////////////////////////////////////////////////// + +/*! \class QCPPainter + \brief QPainter subclass used internally + + This QPainter subclass is used to provide some extended functionality e.g. for tweaking position + consistency between antialiased and non-antialiased painting. Further it provides workarounds + for QPainter quirks. + + \warning This class intentionally hides non-virtual functions of QPainter, e.g. setPen, save and + restore. So while it is possible to pass a QCPPainter instance to a function that expects a + QPainter pointer, some of the workarounds and tweaks will be unavailable to the function (because + it will call the base class implementations of the functions actually hidden by QCPPainter). +*/ + +/*! + Creates a new QCPPainter instance and sets default values +*/ +QCPPainter::QCPPainter() : + QPainter(), + mModes(pmDefault), + mIsAntialiasing(false) +{ + // don't setRenderHint(QPainter::NonCosmeticDefautPen) here, because painter isn't active yet and + // a call to begin() will follow +} + +/*! + Creates a new QCPPainter instance on the specified paint \a device and sets default values. Just + like the analogous QPainter constructor, begins painting on \a device immediately. + + Like \ref begin, this method sets QPainter::NonCosmeticDefaultPen in Qt versions before Qt5. +*/ +QCPPainter::QCPPainter(QPaintDevice *device) : + QPainter(device), + mModes(pmDefault), + mIsAntialiasing(false) +{ +#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0) // before Qt5, default pens used to be cosmetic if NonCosmeticDefaultPen flag isn't set. So we set it to get consistency across Qt versions. + if (isActive()) + setRenderHint(QPainter::NonCosmeticDefaultPen); +#endif +} + +QCPPainter::~QCPPainter() +{ +} + +/*! + Sets the pen of the painter and applies certain fixes to it, depending on the mode of this + QCPPainter. + + \note this function hides the non-virtual base class implementation. +*/ +void QCPPainter::setPen(const QPen &pen) +{ + QPainter::setPen(pen); + if (mModes.testFlag(pmNonCosmetic)) + makeNonCosmetic(); +} + +/*! \overload + + Sets the pen (by color) of the painter and applies certain fixes to it, depending on the mode of + this QCPPainter. + + \note this function hides the non-virtual base class implementation. +*/ +void QCPPainter::setPen(const QColor &color) +{ + QPainter::setPen(color); + if (mModes.testFlag(pmNonCosmetic)) + makeNonCosmetic(); +} + +/*! \overload + + Sets the pen (by style) of the painter and applies certain fixes to it, depending on the mode of + this QCPPainter. + + \note this function hides the non-virtual base class implementation. +*/ +void QCPPainter::setPen(Qt::PenStyle penStyle) +{ + QPainter::setPen(penStyle); + if (mModes.testFlag(pmNonCosmetic)) + makeNonCosmetic(); +} + +/*! \overload + + Works around a Qt bug introduced with Qt 4.8 which makes drawing QLineF unpredictable when + antialiasing is disabled. Thus when antialiasing is disabled, it rounds the \a line to + integer coordinates and then passes it to the original drawLine. + + \note this function hides the non-virtual base class implementation. +*/ +void QCPPainter::drawLine(const QLineF &line) +{ + if (mIsAntialiasing || mModes.testFlag(pmVectorized)) + QPainter::drawLine(line); + else + QPainter::drawLine(line.toLine()); +} + +/*! + Sets whether painting uses antialiasing or not. Use this method instead of using setRenderHint + with QPainter::Antialiasing directly, as it allows QCPPainter to regain pixel exactness between + antialiased and non-antialiased painting (Since Qt < 5.0 uses slightly different coordinate systems for + AA/Non-AA painting). +*/ +void QCPPainter::setAntialiasing(bool enabled) +{ + setRenderHint(QPainter::Antialiasing, enabled); + if (mIsAntialiasing != enabled) + { + mIsAntialiasing = enabled; + if (!mModes.testFlag(pmVectorized)) // antialiasing half-pixel shift only needed for rasterized outputs + { + if (mIsAntialiasing) + translate(0.5, 0.5); + else + translate(-0.5, -0.5); + } + } +} + +/*! + Sets the mode of the painter. This controls whether the painter shall adjust its + fixes/workarounds optimized for certain output devices. +*/ +void QCPPainter::setModes(QCPPainter::PainterModes modes) +{ + mModes = modes; +} + +/*! + Sets the QPainter::NonCosmeticDefaultPen in Qt versions before Qt5 after beginning painting on \a + device. This is necessary to get cosmetic pen consistency across Qt versions, because since Qt5, + all pens are non-cosmetic by default, and in Qt4 this render hint must be set to get that + behaviour. + + The Constructor \ref QCPPainter(QPaintDevice *device) which directly starts painting also sets + the render hint as appropriate. + + \note this function hides the non-virtual base class implementation. +*/ +bool QCPPainter::begin(QPaintDevice *device) +{ + bool result = QPainter::begin(device); +#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0) // before Qt5, default pens used to be cosmetic if NonCosmeticDefaultPen flag isn't set. So we set it to get consistency across Qt versions. + if (result) + setRenderHint(QPainter::NonCosmeticDefaultPen); +#endif + return result; +} + +/*! \overload + + Sets the mode of the painter. This controls whether the painter shall adjust its + fixes/workarounds optimized for certain output devices. +*/ +void QCPPainter::setMode(QCPPainter::PainterMode mode, bool enabled) +{ + if (!enabled && mModes.testFlag(mode)) + mModes &= ~mode; + else if (enabled && !mModes.testFlag(mode)) + mModes |= mode; +} + +/*! + Saves the painter (see QPainter::save). Since QCPPainter adds some new internal state to + QPainter, the save/restore functions are reimplemented to also save/restore those members. + + \note this function hides the non-virtual base class implementation. + + \see restore +*/ +void QCPPainter::save() +{ + mAntialiasingStack.push(mIsAntialiasing); + QPainter::save(); +} + +/*! + Restores the painter (see QPainter::restore). Since QCPPainter adds some new internal state to + QPainter, the save/restore functions are reimplemented to also save/restore those members. + + \note this function hides the non-virtual base class implementation. + + \see save +*/ +void QCPPainter::restore() +{ + if (!mAntialiasingStack.isEmpty()) + mIsAntialiasing = mAntialiasingStack.pop(); + else + qDebug() << Q_FUNC_INFO << "Unbalanced save/restore"; + QPainter::restore(); +} + +/*! + Changes the pen width to 1 if it currently is 0. This function is called in the \ref setPen + overrides when the \ref pmNonCosmetic mode is set. +*/ +void QCPPainter::makeNonCosmetic() +{ + if (qFuzzyIsNull(pen().widthF())) + { + QPen p = pen(); + p.setWidth(1); + QPainter::setPen(p); + } +} + + +//////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////// QCPScatterStyle +//////////////////////////////////////////////////////////////////////////////////////////////////// + +/*! \class QCPScatterStyle + \brief Represents the visual appearance of scatter points + + This class holds information about shape, color and size of scatter points. In plottables like + QCPGraph it is used to store how scatter points shall be drawn. For example, \ref + QCPGraph::setScatterStyle takes a QCPScatterStyle instance. + + A scatter style consists of a shape (\ref setShape), a line color (\ref setPen) and possibly a + fill (\ref setBrush), if the shape provides a fillable area. Further, the size of the shape can + be controlled with \ref setSize. + + \section QCPScatterStyle-defining Specifying a scatter style + + You can set all these configurations either by calling the respective functions on an instance: + \snippet documentation/doc-code-snippets/mainwindow.cpp qcpscatterstyle-creation-1 + + Or you can use one of the various constructors that take different parameter combinations, making + it easy to specify a scatter style in a single call, like so: + \snippet documentation/doc-code-snippets/mainwindow.cpp qcpscatterstyle-creation-2 + + \section QCPScatterStyle-undefinedpen Leaving the color/pen up to the plottable + + There are two constructors which leave the pen undefined: \ref QCPScatterStyle() and \ref + QCPScatterStyle(ScatterShape shape, double size). If those constructors are used, a call to \ref + isPenDefined will return false. It leads to scatter points that inherit the pen from the + plottable that uses the scatter style. Thus, if such a scatter style is passed to QCPGraph, the line + color of the graph (\ref QCPGraph::setPen) will be used by the scatter points. This makes + it very convenient to set up typical scatter settings: + + \snippet documentation/doc-code-snippets/mainwindow.cpp qcpscatterstyle-shortcreation + + Notice that it wasn't even necessary to explicitly call a QCPScatterStyle constructor. This works + because QCPScatterStyle provides a constructor that can transform a \ref ScatterShape directly + into a QCPScatterStyle instance (that's the \ref QCPScatterStyle(ScatterShape shape, double size) + constructor with a default for \a size). In those cases, C++ allows directly supplying a \ref + ScatterShape, where actually a QCPScatterStyle is expected. + + \section QCPScatterStyle-custompath-and-pixmap Custom shapes and pixmaps + + QCPScatterStyle supports drawing custom shapes and arbitrary pixmaps as scatter points. + + For custom shapes, you can provide a QPainterPath with the desired shape to the \ref + setCustomPath function or call the constructor that takes a painter path. The scatter shape will + automatically be set to \ref ssCustom. + + For pixmaps, you call \ref setPixmap with the desired QPixmap. Alternatively you can use the + constructor that takes a QPixmap. The scatter shape will automatically be set to \ref ssPixmap. + Note that \ref setSize does not influence the appearance of the pixmap. +*/ + +/* start documentation of inline functions */ + +/*! \fn bool QCPScatterStyle::isNone() const + + Returns whether the scatter shape is \ref ssNone. + + \see setShape +*/ + +/*! \fn bool QCPScatterStyle::isPenDefined() const + + Returns whether a pen has been defined for this scatter style. + + The pen is undefined if a constructor is called that does not carry \a pen as parameter. Those are + \ref QCPScatterStyle() and \ref QCPScatterStyle(ScatterShape shape, double size). If the pen is + left undefined, the scatter color will be inherited from the plottable that uses this scatter + style. + + \see setPen +*/ + +/* end documentation of inline functions */ + +/*! + Creates a new QCPScatterStyle instance with size set to 6. No shape, pen or brush is defined. + + Since the pen is undefined (\ref isPenDefined returns false), the scatter color will be inherited + from the plottable that uses this scatter style. +*/ +QCPScatterStyle::QCPScatterStyle() : + mSize(6), + mShape(ssNone), + mPen(Qt::NoPen), + mBrush(Qt::NoBrush), + mPenDefined(false) +{ +} + +/*! + Creates a new QCPScatterStyle instance with shape set to \a shape and size to \a size. No pen or + brush is defined. + + Since the pen is undefined (\ref isPenDefined returns false), the scatter color will be inherited + from the plottable that uses this scatter style. +*/ +QCPScatterStyle::QCPScatterStyle(ScatterShape shape, double size) : + mSize(size), + mShape(shape), + mPen(Qt::NoPen), + mBrush(Qt::NoBrush), + mPenDefined(false) +{ +} + +/*! + Creates a new QCPScatterStyle instance with shape set to \a shape, the pen color set to \a color, + and size to \a size. No brush is defined, i.e. the scatter point will not be filled. +*/ +QCPScatterStyle::QCPScatterStyle(ScatterShape shape, const QColor &color, double size) : + mSize(size), + mShape(shape), + mPen(QPen(color)), + mBrush(Qt::NoBrush), + mPenDefined(true) +{ +} + +/*! + Creates a new QCPScatterStyle instance with shape set to \a shape, the pen color set to \a color, + the brush color to \a fill (with a solid pattern), and size to \a size. +*/ +QCPScatterStyle::QCPScatterStyle(ScatterShape shape, const QColor &color, const QColor &fill, double size) : + mSize(size), + mShape(shape), + mPen(QPen(color)), + mBrush(QBrush(fill)), + mPenDefined(true) +{ +} + +/*! + Creates a new QCPScatterStyle instance with shape set to \a shape, the pen set to \a pen, the + brush to \a brush, and size to \a size. + + \warning In some cases it might be tempting to directly use a pen style like Qt::NoPen as \a pen + and a color like Qt::blue as \a brush. Notice however, that the corresponding call\n + QCPScatterStyle(QCPScatterShape::ssCircle, Qt::NoPen, Qt::blue, 5)\n + doesn't necessarily lead C++ to use this constructor in some cases, but might mistake + Qt::NoPen for a QColor and use the + \ref QCPScatterStyle(ScatterShape shape, const QColor &color, const QColor &fill, double size) + constructor instead (which will lead to an unexpected look of the scatter points). To prevent + this, be more explicit with the parameter types. For example, use QBrush(Qt::blue) + instead of just Qt::blue, to clearly point out to the compiler that this constructor is + wanted. +*/ +QCPScatterStyle::QCPScatterStyle(ScatterShape shape, const QPen &pen, const QBrush &brush, double size) : + mSize(size), + mShape(shape), + mPen(pen), + mBrush(brush), + mPenDefined(pen.style() != Qt::NoPen) +{ +} + +/*! + Creates a new QCPScatterStyle instance which will show the specified \a pixmap. The scatter shape + is set to \ref ssPixmap. +*/ +QCPScatterStyle::QCPScatterStyle(const QPixmap &pixmap) : + mSize(5), + mShape(ssPixmap), + mPen(Qt::NoPen), + mBrush(Qt::NoBrush), + mPixmap(pixmap), + mPenDefined(false) +{ +} + +/*! + Creates a new QCPScatterStyle instance with a custom shape that is defined via \a customPath. The + scatter shape is set to \ref ssCustom. + + The custom shape line will be drawn with \a pen and filled with \a brush. The size has a slightly + different meaning than for built-in scatter points: The custom path will be drawn scaled by a + factor of \a size/6.0. Since the default \a size is 6, the custom path will appear at a its + natural size by default. To double the size of the path for example, set \a size to 12. +*/ +QCPScatterStyle::QCPScatterStyle(const QPainterPath &customPath, const QPen &pen, const QBrush &brush, double size) : + mSize(size), + mShape(ssCustom), + mPen(pen), + mBrush(brush), + mCustomPath(customPath), + mPenDefined(pen.style() != Qt::NoPen) +{ +} + +/*! + Sets the size (pixel diameter) of the drawn scatter points to \a size. + + \see setShape +*/ +void QCPScatterStyle::setSize(double size) +{ + mSize = size; +} + +/*! + Sets the shape to \a shape. + + Note that the calls \ref setPixmap and \ref setCustomPath automatically set the shape to \ref + ssPixmap and \ref ssCustom, respectively. + + \see setSize +*/ +void QCPScatterStyle::setShape(QCPScatterStyle::ScatterShape shape) +{ + mShape = shape; +} + +/*! + Sets the pen that will be used to draw scatter points to \a pen. + + If the pen was previously undefined (see \ref isPenDefined), the pen is considered defined after + a call to this function, even if \a pen is Qt::NoPen. + + \see setBrush +*/ +void QCPScatterStyle::setPen(const QPen &pen) +{ + mPenDefined = true; + mPen = pen; +} + +/*! + Sets the brush that will be used to fill scatter points to \a brush. Note that not all scatter + shapes have fillable areas. For example, \ref ssPlus does not while \ref ssCircle does. + + \see setPen +*/ +void QCPScatterStyle::setBrush(const QBrush &brush) +{ + mBrush = brush; +} + +/*! + Sets the pixmap that will be drawn as scatter point to \a pixmap. + + Note that \ref setSize does not influence the appearance of the pixmap. + + The scatter shape is automatically set to \ref ssPixmap. +*/ +void QCPScatterStyle::setPixmap(const QPixmap &pixmap) +{ + setShape(ssPixmap); + mPixmap = pixmap; +} + +/*! + Sets the custom shape that will be drawn as scatter point to \a customPath. + + The scatter shape is automatically set to \ref ssCustom. +*/ +void QCPScatterStyle::setCustomPath(const QPainterPath &customPath) +{ + setShape(ssCustom); + mCustomPath = customPath; +} + +/*! + Applies the pen and the brush of this scatter style to \a painter. If this scatter style has an + undefined pen (\ref isPenDefined), sets the pen of \a painter to \a defaultPen instead. + + This function is used by plottables (or any class that wants to draw scatters) just before a + number of scatters with this style shall be drawn with the \a painter. + + \see drawShape +*/ +void QCPScatterStyle::applyTo(QCPPainter *painter, const QPen &defaultPen) const +{ + painter->setPen(mPenDefined ? mPen : defaultPen); + painter->setBrush(mBrush); +} + +/*! + Draws the scatter shape with \a painter at position \a pos. + + This function does not modify the pen or the brush on the painter, as \ref applyTo is meant to be + called before scatter points are drawn with \ref drawShape. + + \see applyTo +*/ +void QCPScatterStyle::drawShape(QCPPainter *painter, QPointF pos) const +{ + drawShape(painter, pos.x(), pos.y()); +} + +/*! \overload + Draws the scatter shape with \a painter at position \a x and \a y. +*/ +void QCPScatterStyle::drawShape(QCPPainter *painter, double x, double y) const +{ + double w = mSize/2.0; + switch (mShape) + { + case ssNone: break; + case ssDot: + { + painter->drawLine(QPointF(x, y), QPointF(x+0.0001, y)); + break; + } + case ssCross: + { + painter->drawLine(QLineF(x-w, y-w, x+w, y+w)); + painter->drawLine(QLineF(x-w, y+w, x+w, y-w)); + break; + } + case ssPlus: + { + painter->drawLine(QLineF(x-w, y, x+w, y)); + painter->drawLine(QLineF( x, y+w, x, y-w)); + break; + } + case ssCircle: + { + painter->drawEllipse(QPointF(x , y), w, w); + break; + } + case ssDisc: + { + QBrush b = painter->brush(); + painter->setBrush(painter->pen().color()); + painter->drawEllipse(QPointF(x , y), w, w); + painter->setBrush(b); + break; + } + case ssSquare: + { + painter->drawRect(QRectF(x-w, y-w, mSize, mSize)); + break; + } + case ssDiamond: + { + painter->drawLine(QLineF(x-w, y, x, y-w)); + painter->drawLine(QLineF( x, y-w, x+w, y)); + painter->drawLine(QLineF(x+w, y, x, y+w)); + painter->drawLine(QLineF( x, y+w, x-w, y)); + break; + } + case ssStar: + { + painter->drawLine(QLineF(x-w, y, x+w, y)); + painter->drawLine(QLineF( x, y+w, x, y-w)); + painter->drawLine(QLineF(x-w*0.707, y-w*0.707, x+w*0.707, y+w*0.707)); + painter->drawLine(QLineF(x-w*0.707, y+w*0.707, x+w*0.707, y-w*0.707)); + break; + } + case ssTriangle: + { + painter->drawLine(QLineF(x-w, y+0.755*w, x+w, y+0.755*w)); + painter->drawLine(QLineF(x+w, y+0.755*w, x, y-0.977*w)); + painter->drawLine(QLineF( x, y-0.977*w, x-w, y+0.755*w)); + break; + } + case ssTriangleInverted: + { + painter->drawLine(QLineF(x-w, y-0.755*w, x+w, y-0.755*w)); + painter->drawLine(QLineF(x+w, y-0.755*w, x, y+0.977*w)); + painter->drawLine(QLineF( x, y+0.977*w, x-w, y-0.755*w)); + break; + } + case ssCrossSquare: + { + painter->drawLine(QLineF(x-w, y-w, x+w*0.95, y+w*0.95)); + painter->drawLine(QLineF(x-w, y+w*0.95, x+w*0.95, y-w)); + painter->drawRect(QRectF(x-w, y-w, mSize, mSize)); + break; + } + case ssPlusSquare: + { + painter->drawLine(QLineF(x-w, y, x+w*0.95, y)); + painter->drawLine(QLineF( x, y+w, x, y-w)); + painter->drawRect(QRectF(x-w, y-w, mSize, mSize)); + break; + } + case ssCrossCircle: + { + painter->drawLine(QLineF(x-w*0.707, y-w*0.707, x+w*0.670, y+w*0.670)); + painter->drawLine(QLineF(x-w*0.707, y+w*0.670, x+w*0.670, y-w*0.707)); + painter->drawEllipse(QPointF(x, y), w, w); + break; + } + case ssPlusCircle: + { + painter->drawLine(QLineF(x-w, y, x+w, y)); + painter->drawLine(QLineF( x, y+w, x, y-w)); + painter->drawEllipse(QPointF(x, y), w, w); + break; + } + case ssPeace: + { + painter->drawLine(QLineF(x, y-w, x, y+w)); + painter->drawLine(QLineF(x, y, x-w*0.707, y+w*0.707)); + painter->drawLine(QLineF(x, y, x+w*0.707, y+w*0.707)); + painter->drawEllipse(QPointF(x, y), w, w); + break; + } + case ssPixmap: + { + painter->drawPixmap(x-mPixmap.width()*0.5, y-mPixmap.height()*0.5, mPixmap); + break; + } + case ssCustom: + { + QTransform oldTransform = painter->transform(); + painter->translate(x, y); + painter->scale(mSize/6.0, mSize/6.0); + painter->drawPath(mCustomPath); + painter->setTransform(oldTransform); + break; + } + } +} + + +//////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////// QCPLayer +//////////////////////////////////////////////////////////////////////////////////////////////////// + +/*! \class QCPLayer + \brief A layer that may contain objects, to control the rendering order + + The Layering system of QCustomPlot is the mechanism to control the rendering order of the + elements inside the plot. + + It is based on the two classes QCPLayer and QCPLayerable. QCustomPlot holds an ordered list of + one or more instances of QCPLayer (see QCustomPlot::addLayer, QCustomPlot::layer, + QCustomPlot::moveLayer, etc.). When replotting, QCustomPlot goes through the list of layers + bottom to top and successively draws the layerables of the layers. + + A QCPLayer contains an ordered list of QCPLayerable instances. QCPLayerable is an abstract base + class from which almost all visible objects derive, like axes, grids, graphs, items, etc. + + Initially, QCustomPlot has five layers: "background", "grid", "main", "axes" and "legend" (in + that order). The top two layers "axes" and "legend" contain the default axes and legend, so they + will be drawn on top. In the middle, there is the "main" layer. It is initially empty and set as + the current layer (see QCustomPlot::setCurrentLayer). This means, all new plottables, items etc. + are created on this layer by default. Then comes the "grid" layer which contains the QCPGrid + instances (which belong tightly to QCPAxis, see \ref QCPAxis::grid). The Axis rect background + shall be drawn behind everything else, thus the default QCPAxisRect instance is placed on the + "background" layer. Of course, the layer affiliation of the individual objects can be changed as + required (\ref QCPLayerable::setLayer). + + Controlling the ordering of objects is easy: Create a new layer in the position you want it to + be, e.g. above "main", with QCustomPlot::addLayer. Then set the current layer with + QCustomPlot::setCurrentLayer to that new layer and finally create the objects normally. They will + be placed on the new layer automatically, due to the current layer setting. Alternatively you + could have also ignored the current layer setting and just moved the objects with + QCPLayerable::setLayer to the desired layer after creating them. + + It is also possible to move whole layers. For example, If you want the grid to be shown in front + of all plottables/items on the "main" layer, just move it above "main" with + QCustomPlot::moveLayer. + + The rendering order within one layer is simply by order of creation or insertion. The item + created last (or added last to the layer), is drawn on top of all other objects on that layer. + + When a layer is deleted, the objects on it are not deleted with it, but fall on the layer below + the deleted layer, see QCustomPlot::removeLayer. +*/ + +/* start documentation of inline functions */ + +/*! \fn QList QCPLayer::children() const + + Returns a list of all layerables on this layer. The order corresponds to the rendering order: + layerables with higher indices are drawn above layerables with lower indices. +*/ + +/*! \fn int QCPLayer::index() const + + Returns the index this layer has in the QCustomPlot. The index is the integer number by which this layer can be + accessed via \ref QCustomPlot::layer. + + Layers with higher indices will be drawn above layers with lower indices. +*/ + +/* end documentation of inline functions */ + +/*! + Creates a new QCPLayer instance. + + Normally you shouldn't directly instantiate layers, use \ref QCustomPlot::addLayer instead. + + \warning It is not checked that \a layerName is actually a unique layer name in \a parentPlot. + This check is only performed by \ref QCustomPlot::addLayer. +*/ +QCPLayer::QCPLayer(QCustomPlot *parentPlot, const QString &layerName) : + QObject(parentPlot), + mParentPlot(parentPlot), + mName(layerName), + mIndex(-1), // will be set to a proper value by the QCustomPlot layer creation function + mVisible(true) +{ + // Note: no need to make sure layerName is unique, because layer + // management is done with QCustomPlot functions. +} + +QCPLayer::~QCPLayer() +{ + // If child layerables are still on this layer, detach them, so they don't try to reach back to this + // then invalid layer once they get deleted/moved themselves. This only happens when layers are deleted + // directly, like in the QCustomPlot destructor. (The regular layer removal procedure for the user is to + // call QCustomPlot::removeLayer, which moves all layerables off this layer before deleting it.) + + while (!mChildren.isEmpty()) + mChildren.last()->setLayer(0); // removes itself from mChildren via removeChild() + + if (mParentPlot->currentLayer() == this) + qDebug() << Q_FUNC_INFO << "The parent plot's mCurrentLayer will be a dangling pointer. Should have been set to a valid layer or 0 beforehand."; +} + +/*! + Sets whether this layer is visible or not. If \a visible is set to false, all layerables on this + layer will be invisible. + + This function doesn't change the visibility property of the layerables (\ref + QCPLayerable::setVisible), but the \ref QCPLayerable::realVisibility of each layerable takes the + visibility of the parent layer into account. +*/ +void QCPLayer::setVisible(bool visible) +{ + mVisible = visible; +} + +/*! \internal + + Adds the \a layerable to the list of this layer. If \a prepend is set to true, the layerable will + be prepended to the list, i.e. be drawn beneath the other layerables already in the list. + + This function does not change the \a mLayer member of \a layerable to this layer. (Use + QCPLayerable::setLayer to change the layer of an object, not this function.) + + \see removeChild +*/ +void QCPLayer::addChild(QCPLayerable *layerable, bool prepend) +{ + if (!mChildren.contains(layerable)) + { + if (prepend) + mChildren.prepend(layerable); + else + mChildren.append(layerable); + } else + qDebug() << Q_FUNC_INFO << "layerable is already child of this layer" << reinterpret_cast(layerable); +} + +/*! \internal + + Removes the \a layerable from the list of this layer. + + This function does not change the \a mLayer member of \a layerable. (Use QCPLayerable::setLayer + to change the layer of an object, not this function.) + + \see addChild +*/ +void QCPLayer::removeChild(QCPLayerable *layerable) +{ + if (!mChildren.removeOne(layerable)) + qDebug() << Q_FUNC_INFO << "layerable is not child of this layer" << reinterpret_cast(layerable); +} + + +//////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////// QCPLayerable +//////////////////////////////////////////////////////////////////////////////////////////////////// + +/*! \class QCPLayerable + \brief Base class for all drawable objects + + This is the abstract base class most visible objects derive from, e.g. plottables, axes, grid + etc. + + Every layerable is on a layer (QCPLayer) which allows controlling the rendering order by stacking + the layers accordingly. + + For details about the layering mechanism, see the QCPLayer documentation. +*/ + +/* start documentation of inline functions */ + +/*! \fn QCPLayerable *QCPLayerable::parentLayerable() const + + Returns the parent layerable of this layerable. The parent layerable is used to provide + visibility hierarchies in conjunction with the method \ref realVisibility. This way, layerables + only get drawn if their parent layerables are visible, too. + + Note that a parent layerable is not necessarily also the QObject parent for memory management. + Further, a layerable doesn't always have a parent layerable, so this function may return 0. + + A parent layerable is set implicitly with when placed inside layout elements and doesn't need to be + set manually by the user. +*/ + +/* end documentation of inline functions */ +/* start documentation of pure virtual functions */ + +/*! \fn virtual void QCPLayerable::applyDefaultAntialiasingHint(QCPPainter *painter) const = 0 + \internal + + This function applies the default antialiasing setting to the specified \a painter, using the + function \ref applyAntialiasingHint. It is the antialiasing state the painter is put in, when + \ref draw is called on the layerable. If the layerable has multiple entities whose antialiasing + setting may be specified individually, this function should set the antialiasing state of the + most prominent entity. In this case however, the \ref draw function usually calls the specialized + versions of this function before drawing each entity, effectively overriding the setting of the + default antialiasing hint. + + First example: QCPGraph has multiple entities that have an antialiasing setting: The graph + line, fills, scatters and error bars. Those can be configured via QCPGraph::setAntialiased, + QCPGraph::setAntialiasedFill, QCPGraph::setAntialiasedScatters etc. Consequently, there isn't + only the QCPGraph::applyDefaultAntialiasingHint function (which corresponds to the graph line's + antialiasing), but specialized ones like QCPGraph::applyFillAntialiasingHint and + QCPGraph::applyScattersAntialiasingHint. So before drawing one of those entities, QCPGraph::draw + calls the respective specialized applyAntialiasingHint function. + + Second example: QCPItemLine consists only of a line so there is only one antialiasing + setting which can be controlled with QCPItemLine::setAntialiased. (This function is inherited by + all layerables. The specialized functions, as seen on QCPGraph, must be added explicitly to the + respective layerable subclass.) Consequently it only has the normal + QCPItemLine::applyDefaultAntialiasingHint. The \ref QCPItemLine::draw function doesn't need to + care about setting any antialiasing states, because the default antialiasing hint is already set + on the painter when the \ref draw function is called, and that's the state it wants to draw the + line with. +*/ + +/*! \fn virtual void QCPLayerable::draw(QCPPainter *painter) const = 0 + \internal + + This function draws the layerable with the specified \a painter. It is only called by + QCustomPlot, if the layerable is visible (\ref setVisible). + + Before this function is called, the painter's antialiasing state is set via \ref + applyDefaultAntialiasingHint, see the documentation there. Further, the clipping rectangle was + set to \ref clipRect. +*/ + +/* end documentation of pure virtual functions */ +/* start documentation of signals */ + +/*! \fn void QCPLayerable::layerChanged(QCPLayer *newLayer); + + This signal is emitted when the layer of this layerable changes, i.e. this layerable is moved to + a different layer. + + \see setLayer +*/ + +/* end documentation of signals */ + +/*! + Creates a new QCPLayerable instance. + + Since QCPLayerable is an abstract base class, it can't be instantiated directly. Use one of the + derived classes. + + If \a plot is provided, it automatically places itself on the layer named \a targetLayer. If \a + targetLayer is an empty string, it places itself on the current layer of the plot (see \ref + QCustomPlot::setCurrentLayer). + + It is possible to provide 0 as \a plot. In that case, you should assign a parent plot at a later + time with \ref initializeParentPlot. + + The layerable's parent layerable is set to \a parentLayerable, if provided. Direct layerable + parents are mainly used to control visibility in a hierarchy of layerables. This means a + layerable is only drawn, if all its ancestor layerables are also visible. Note that \a + parentLayerable does not become the QObject-parent (for memory management) of this layerable, \a + plot does. It is not uncommon to set the QObject-parent to something else in the constructors of + QCPLayerable subclasses, to guarantee a working destruction hierarchy. +*/ +QCPLayerable::QCPLayerable(QCustomPlot *plot, QString targetLayer, QCPLayerable *parentLayerable) : + QObject(plot), + mVisible(true), + mParentPlot(plot), + mParentLayerable(parentLayerable), + mLayer(0), + mAntialiased(true) +{ + if (mParentPlot) + { + if (targetLayer.isEmpty()) + setLayer(mParentPlot->currentLayer()); + else if (!setLayer(targetLayer)) + qDebug() << Q_FUNC_INFO << "setting QCPlayerable initial layer to" << targetLayer << "failed."; + } +} + +QCPLayerable::~QCPLayerable() +{ + if (mLayer) + { + mLayer->removeChild(this); + mLayer = 0; + } +} + +/*! + Sets the visibility of this layerable object. If an object is not visible, it will not be drawn + on the QCustomPlot surface, and user interaction with it (e.g. click and selection) is not + possible. +*/ +void QCPLayerable::setVisible(bool on) +{ + mVisible = on; +} + +/*! + Sets the \a layer of this layerable object. The object will be placed on top of the other objects + already on \a layer. + + If \a layer is 0, this layerable will not be on any layer and thus not appear in the plot (or + interact/receive events). + + Returns true if the layer of this layerable was successfully changed to \a layer. +*/ +bool QCPLayerable::setLayer(QCPLayer *layer) +{ + return moveToLayer(layer, false); +} + +/*! \overload + Sets the layer of this layerable object by name + + Returns true on success, i.e. if \a layerName is a valid layer name. +*/ +bool QCPLayerable::setLayer(const QString &layerName) +{ + if (!mParentPlot) + { + qDebug() << Q_FUNC_INFO << "no parent QCustomPlot set"; + return false; + } + if (QCPLayer *layer = mParentPlot->layer(layerName)) + { + return setLayer(layer); + } else + { + qDebug() << Q_FUNC_INFO << "there is no layer with name" << layerName; + return false; + } +} + +/*! + Sets whether this object will be drawn antialiased or not. + + Note that antialiasing settings may be overridden by QCustomPlot::setAntialiasedElements and + QCustomPlot::setNotAntialiasedElements. +*/ +void QCPLayerable::setAntialiased(bool enabled) +{ + mAntialiased = enabled; +} + +/*! + Returns whether this layerable is visible, taking the visibility of the layerable parent and the + visibility of the layer this layerable is on into account. This is the method that is consulted + to decide whether a layerable shall be drawn or not. + + If this layerable has a direct layerable parent (usually set via hierarchies implemented in + subclasses, like in the case of QCPLayoutElement), this function returns true only if this + layerable has its visibility set to true and the parent layerable's \ref realVisibility returns + true. + + If this layerable doesn't have a direct layerable parent, returns the state of this layerable's + visibility. +*/ +bool QCPLayerable::realVisibility() const +{ + return mVisible && (!mLayer || mLayer->visible()) && (!mParentLayerable || mParentLayerable.data()->realVisibility()); +} + +/*! + This function is used to decide whether a click hits a layerable object or not. + + \a pos is a point in pixel coordinates on the QCustomPlot surface. This function returns the + shortest pixel distance of this point to the object. If the object is either invisible or the + distance couldn't be determined, -1.0 is returned. Further, if \a onlySelectable is true and the + object is not selectable, -1.0 is returned, too. + + If the object is represented not by single lines but by an area like a \ref QCPItemText or the + bars of a \ref QCPBars plottable, a click inside the area should also be considered a hit. In + these cases this function thus returns a constant value greater zero but still below the parent + plot's selection tolerance. (typically the selectionTolerance multiplied by 0.99). + + Providing a constant value for area objects allows selecting line objects even when they are + obscured by such area objects, by clicking close to the lines (i.e. closer than + 0.99*selectionTolerance). + + The actual setting of the selection state is not done by this function. This is handled by the + parent QCustomPlot when the mouseReleaseEvent occurs, and the finally selected object is notified + via the selectEvent/deselectEvent methods. + + \a details is an optional output parameter. Every layerable subclass may place any information + in \a details. This information will be passed to \ref selectEvent when the parent QCustomPlot + decides on the basis of this selectTest call, that the object was successfully selected. The + subsequent call to \ref selectEvent will carry the \a details. This is useful for multi-part + objects (like QCPAxis). This way, a possibly complex calculation to decide which part was clicked + is only done once in \ref selectTest. The result (i.e. the actually clicked part) can then be + placed in \a details. So in the subsequent \ref selectEvent, the decision which part was + selected doesn't have to be done a second time for a single selection operation. + + You may pass 0 as \a details to indicate that you are not interested in those selection details. + + \see selectEvent, deselectEvent, QCustomPlot::setInteractions +*/ +double QCPLayerable::selectTest(const QPointF &pos, bool onlySelectable, QVariant *details) const +{ + Q_UNUSED(pos) + Q_UNUSED(onlySelectable) + Q_UNUSED(details) + return -1.0; +} + +/*! \internal + + Sets the parent plot of this layerable. Use this function once to set the parent plot if you have + passed 0 in the constructor. It can not be used to move a layerable from one QCustomPlot to + another one. + + Note that, unlike when passing a non-null parent plot in the constructor, this function does not + make \a parentPlot the QObject-parent of this layerable. If you want this, call + QObject::setParent(\a parentPlot) in addition to this function. + + Further, you will probably want to set a layer (\ref setLayer) after calling this function, to + make the layerable appear on the QCustomPlot. + + The parent plot change will be propagated to subclasses via a call to \ref parentPlotInitialized + so they can react accordingly (e.g. also initialize the parent plot of child layerables, like + QCPLayout does). +*/ +void QCPLayerable::initializeParentPlot(QCustomPlot *parentPlot) +{ + if (mParentPlot) + { + qDebug() << Q_FUNC_INFO << "called with mParentPlot already initialized"; + return; + } + + if (!parentPlot) + qDebug() << Q_FUNC_INFO << "called with parentPlot zero"; + + mParentPlot = parentPlot; + parentPlotInitialized(mParentPlot); +} + +/*! \internal + + Sets the parent layerable of this layerable to \a parentLayerable. Note that \a parentLayerable does not + become the QObject-parent (for memory management) of this layerable. + + The parent layerable has influence on the return value of the \ref realVisibility method. Only + layerables with a fully visible parent tree will return true for \ref realVisibility, and thus be + drawn. + + \see realVisibility +*/ +void QCPLayerable::setParentLayerable(QCPLayerable *parentLayerable) +{ + mParentLayerable = parentLayerable; +} + +/*! \internal + + Moves this layerable object to \a layer. If \a prepend is true, this object will be prepended to + the new layer's list, i.e. it will be drawn below the objects already on the layer. If it is + false, the object will be appended. + + Returns true on success, i.e. if \a layer is a valid layer. +*/ +bool QCPLayerable::moveToLayer(QCPLayer *layer, bool prepend) +{ + if (layer && !mParentPlot) + { + qDebug() << Q_FUNC_INFO << "no parent QCustomPlot set"; + return false; + } + if (layer && layer->parentPlot() != mParentPlot) + { + qDebug() << Q_FUNC_INFO << "layer" << layer->name() << "is not in same QCustomPlot as this layerable"; + return false; + } + + QCPLayer *oldLayer = mLayer; + if (mLayer) + mLayer->removeChild(this); + mLayer = layer; + if (mLayer) + mLayer->addChild(this, prepend); + if (mLayer != oldLayer) + emit layerChanged(mLayer); + return true; +} + +/*! \internal + + Sets the QCPainter::setAntialiasing state on the provided \a painter, depending on the \a + localAntialiased value as well as the overrides \ref QCustomPlot::setAntialiasedElements and \ref + QCustomPlot::setNotAntialiasedElements. Which override enum this function takes into account is + controlled via \a overrideElement. +*/ +void QCPLayerable::applyAntialiasingHint(QCPPainter *painter, bool localAntialiased, QCP::AntialiasedElement overrideElement) const +{ + if (mParentPlot && mParentPlot->notAntialiasedElements().testFlag(overrideElement)) + painter->setAntialiasing(false); + else if (mParentPlot && mParentPlot->antialiasedElements().testFlag(overrideElement)) + painter->setAntialiasing(true); + else + painter->setAntialiasing(localAntialiased); +} + +/*! \internal + + This function is called by \ref initializeParentPlot, to allow subclasses to react on the setting + of a parent plot. This is the case when 0 was passed as parent plot in the constructor, and the + parent plot is set at a later time. + + For example, QCPLayoutElement/QCPLayout hierarchies may be created independently of any + QCustomPlot at first. When they are then added to a layout inside the QCustomPlot, the top level + element of the hierarchy gets its parent plot initialized with \ref initializeParentPlot. To + propagate the parent plot to all the children of the hierarchy, the top level element then uses + this function to pass the parent plot on to its child elements. + + The default implementation does nothing. + + \see initializeParentPlot +*/ +void QCPLayerable::parentPlotInitialized(QCustomPlot *parentPlot) +{ + Q_UNUSED(parentPlot) +} + +/*! \internal + + Returns the selection category this layerable shall belong to. The selection category is used in + conjunction with \ref QCustomPlot::setInteractions to control which objects are selectable and + which aren't. + + Subclasses that don't fit any of the normal \ref QCP::Interaction values can use \ref + QCP::iSelectOther. This is what the default implementation returns. + + \see QCustomPlot::setInteractions +*/ +QCP::Interaction QCPLayerable::selectionCategory() const +{ + return QCP::iSelectOther; +} + +/*! \internal + + Returns the clipping rectangle of this layerable object. By default, this is the viewport of the + parent QCustomPlot. Specific subclasses may reimplement this function to provide different + clipping rects. + + The returned clipping rect is set on the painter before the draw function of the respective + object is called. +*/ +QRect QCPLayerable::clipRect() const +{ + if (mParentPlot) + return mParentPlot->viewport(); + else + return QRect(); +} + +/*! \internal + + This event is called when the layerable shall be selected, as a consequence of a click by the + user. Subclasses should react to it by setting their selection state appropriately. The default + implementation does nothing. + + \a event is the mouse event that caused the selection. \a additive indicates, whether the user + was holding the multi-select-modifier while performing the selection (see \ref + QCustomPlot::setMultiSelectModifier). if \a additive is true, the selection state must be toggled + (i.e. become selected when unselected and unselected when selected). + + Every selectEvent is preceded by a call to \ref selectTest, which has returned positively (i.e. + returned a value greater than 0 and less than the selection tolerance of the parent QCustomPlot). + The \a details data you output from \ref selectTest is fed back via \a details here. You may + use it to transport any kind of information from the selectTest to the possibly subsequent + selectEvent. Usually \a details is used to transfer which part was clicked, if it is a layerable + that has multiple individually selectable parts (like QCPAxis). This way selectEvent doesn't need + to do the calculation again to find out which part was actually clicked. + + \a selectionStateChanged is an output parameter. If the pointer is non-null, this function must + set the value either to true or false, depending on whether the selection state of this layerable + was actually changed. For layerables that only are selectable as a whole and not in parts, this + is simple: if \a additive is true, \a selectionStateChanged must also be set to true, because the + selection toggles. If \a additive is false, \a selectionStateChanged is only set to true, if the + layerable was previously unselected and now is switched to the selected state. + + \see selectTest, deselectEvent +*/ +void QCPLayerable::selectEvent(QMouseEvent *event, bool additive, const QVariant &details, bool *selectionStateChanged) +{ + Q_UNUSED(event) + Q_UNUSED(additive) + Q_UNUSED(details) + Q_UNUSED(selectionStateChanged) +} + +/*! \internal + + This event is called when the layerable shall be deselected, either as consequence of a user + interaction or a call to \ref QCustomPlot::deselectAll. Subclasses should react to it by + unsetting their selection appropriately. + + just as in \ref selectEvent, the output parameter \a selectionStateChanged (if non-null), must + return true or false when the selection state of this layerable has changed or not changed, + respectively. + + \see selectTest, selectEvent +*/ +void QCPLayerable::deselectEvent(bool *selectionStateChanged) +{ + Q_UNUSED(selectionStateChanged) +} + + +//////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////// QCPRange +//////////////////////////////////////////////////////////////////////////////////////////////////// +/*! \class QCPRange + \brief Represents the range an axis is encompassing. + + contains a \a lower and \a upper double value and provides convenience input, output and + modification functions. + + \see QCPAxis::setRange +*/ + +/*! + Minimum range size (\a upper - \a lower) the range changing functions will accept. Smaller + intervals would cause errors due to the 11-bit exponent of double precision numbers, + corresponding to a minimum magnitude of roughly 1e-308. + \see validRange, maxRange +*/ +const double QCPRange::minRange = 1e-280; + +/*! + Maximum values (negative and positive) the range will accept in range-changing functions. + Larger absolute values would cause errors due to the 11-bit exponent of double precision numbers, + corresponding to a maximum magnitude of roughly 1e308. + Since the number of planck-volumes in the entire visible universe is only ~1e183, this should + be enough. + \see validRange, minRange +*/ +const double QCPRange::maxRange = 1e250; + +/*! + Constructs a range with \a lower and \a upper set to zero. +*/ +QCPRange::QCPRange() : + lower(0), + upper(0) +{ +} + +/*! \overload + Constructs a range with the specified \a lower and \a upper values. +*/ +QCPRange::QCPRange(double lower, double upper) : + lower(lower), + upper(upper) +{ + normalize(); +} + +/*! + Returns the size of the range, i.e. \a upper-\a lower +*/ +double QCPRange::size() const +{ + return upper-lower; +} + +/*! + Returns the center of the range, i.e. (\a upper+\a lower)*0.5 +*/ +double QCPRange::center() const +{ + return (upper+lower)*0.5; +} + +/*! + Makes sure \a lower is numerically smaller than \a upper. If this is not the case, the values + are swapped. +*/ +void QCPRange::normalize() +{ + if (lower > upper) + qSwap(lower, upper); +} + +/*! + Expands this range such that \a otherRange is contained in the new range. It is assumed that both + this range and \a otherRange are normalized (see \ref normalize). + + If \a otherRange is already inside the current range, this function does nothing. + + \see expanded +*/ +void QCPRange::expand(const QCPRange &otherRange) +{ + if (lower > otherRange.lower) + lower = otherRange.lower; + if (upper < otherRange.upper) + upper = otherRange.upper; +} + + +/*! + Returns an expanded range that contains this and \a otherRange. It is assumed that both this + range and \a otherRange are normalized (see \ref normalize). + + \see expand +*/ +QCPRange QCPRange::expanded(const QCPRange &otherRange) const +{ + QCPRange result = *this; + result.expand(otherRange); + return result; +} + +/*! + Returns a sanitized version of the range. Sanitized means for logarithmic scales, that + the range won't span the positive and negative sign domain, i.e. contain zero. Further + \a lower will always be numerically smaller (or equal) to \a upper. + + If the original range does span positive and negative sign domains or contains zero, + the returned range will try to approximate the original range as good as possible. + If the positive interval of the original range is wider than the negative interval, the + returned range will only contain the positive interval, with lower bound set to \a rangeFac or + \a rangeFac *\a upper, whichever is closer to zero. Same procedure is used if the negative interval + is wider than the positive interval, this time by changing the \a upper bound. +*/ +QCPRange QCPRange::sanitizedForLogScale() const +{ + double rangeFac = 1e-3; + QCPRange sanitizedRange(lower, upper); + sanitizedRange.normalize(); + // can't have range spanning negative and positive values in log plot, so change range to fix it + //if (qFuzzyCompare(sanitizedRange.lower+1, 1) && !qFuzzyCompare(sanitizedRange.upper+1, 1)) + if (sanitizedRange.lower == 0.0 && sanitizedRange.upper != 0.0) + { + // case lower is 0 + if (rangeFac < sanitizedRange.upper*rangeFac) + sanitizedRange.lower = rangeFac; + else + sanitizedRange.lower = sanitizedRange.upper*rangeFac; + } //else if (!qFuzzyCompare(lower+1, 1) && qFuzzyCompare(upper+1, 1)) + else if (sanitizedRange.lower != 0.0 && sanitizedRange.upper == 0.0) + { + // case upper is 0 + if (-rangeFac > sanitizedRange.lower*rangeFac) + sanitizedRange.upper = -rangeFac; + else + sanitizedRange.upper = sanitizedRange.lower*rangeFac; + } else if (sanitizedRange.lower < 0 && sanitizedRange.upper > 0) + { + // find out whether negative or positive interval is wider to decide which sign domain will be chosen + if (-sanitizedRange.lower > sanitizedRange.upper) + { + // negative is wider, do same as in case upper is 0 + if (-rangeFac > sanitizedRange.lower*rangeFac) + sanitizedRange.upper = -rangeFac; + else + sanitizedRange.upper = sanitizedRange.lower*rangeFac; + } else + { + // positive is wider, do same as in case lower is 0 + if (rangeFac < sanitizedRange.upper*rangeFac) + sanitizedRange.lower = rangeFac; + else + sanitizedRange.lower = sanitizedRange.upper*rangeFac; + } + } + // due to normalization, case lower>0 && upper<0 should never occur, because that implies upper= lower && value <= upper; +} + +/*! + Checks, whether the specified range is within valid bounds, which are defined + as QCPRange::maxRange and QCPRange::minRange. + A valid range means: + \li range bounds within -maxRange and maxRange + \li range size above minRange + \li range size below maxRange +*/ +bool QCPRange::validRange(double lower, double upper) +{ + return (lower > -maxRange && + upper < maxRange && + qAbs(lower-upper) > minRange && + qAbs(lower-upper) < maxRange && + !(lower > 0 && qIsInf(upper/lower)) && + !(upper < 0 && qIsInf(lower/upper))); +} + +/*! + \overload + Checks, whether the specified range is within valid bounds, which are defined + as QCPRange::maxRange and QCPRange::minRange. + A valid range means: + \li range bounds within -maxRange and maxRange + \li range size above minRange + \li range size below maxRange +*/ +bool QCPRange::validRange(const QCPRange &range) +{ + return (range.lower > -maxRange && + range.upper < maxRange && + qAbs(range.lower-range.upper) > minRange && + qAbs(range.lower-range.upper) < maxRange && + !(range.lower > 0 && qIsInf(range.upper/range.lower)) && + !(range.upper < 0 && qIsInf(range.lower/range.upper))); +} + + +//////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////// QCPMarginGroup +//////////////////////////////////////////////////////////////////////////////////////////////////// + +/*! \class QCPMarginGroup + \brief A margin group allows synchronization of margin sides if working with multiple layout elements. + + QCPMarginGroup allows you to tie a margin side of two or more layout elements together, such that + they will all have the same size, based on the largest required margin in the group. + + \n + \image html QCPMarginGroup.png "Demonstration of QCPMarginGroup" + \n + + In certain situations it is desirable that margins at specific sides are synchronized across + layout elements. For example, if one QCPAxisRect is below another one in a grid layout, it will + provide a cleaner look to the user if the left and right margins of the two axis rects are of the + same size. The left axis of the top axis rect will then be at the same horizontal position as the + left axis of the lower axis rect, making them appear aligned. The same applies for the right + axes. This is what QCPMarginGroup makes possible. + + To add/remove a specific side of a layout element to/from a margin group, use the \ref + QCPLayoutElement::setMarginGroup method. To completely break apart the margin group, either call + \ref clear, or just delete the margin group. + + \section QCPMarginGroup-example Example + + First create a margin group: + \snippet documentation/doc-code-snippets/mainwindow.cpp qcpmargingroup-creation-1 + Then set this group on the layout element sides: + \snippet documentation/doc-code-snippets/mainwindow.cpp qcpmargingroup-creation-2 + Here, we've used the first two axis rects of the plot and synchronized their left margins with + each other and their right margins with each other. +*/ + +/* start documentation of inline functions */ + +/*! \fn QList QCPMarginGroup::elements(QCP::MarginSide side) const + + Returns a list of all layout elements that have their margin \a side associated with this margin + group. +*/ + +/* end documentation of inline functions */ + +/*! + Creates a new QCPMarginGroup instance in \a parentPlot. +*/ +QCPMarginGroup::QCPMarginGroup(QCustomPlot *parentPlot) : + QObject(parentPlot), + mParentPlot(parentPlot) +{ + mChildren.insert(QCP::msLeft, QList()); + mChildren.insert(QCP::msRight, QList()); + mChildren.insert(QCP::msTop, QList()); + mChildren.insert(QCP::msBottom, QList()); +} + +QCPMarginGroup::~QCPMarginGroup() +{ + clear(); +} + +/*! + Returns whether this margin group is empty. If this function returns true, no layout elements use + this margin group to synchronize margin sides. +*/ +bool QCPMarginGroup::isEmpty() const +{ + QHashIterator > it(mChildren); + while (it.hasNext()) + { + it.next(); + if (!it.value().isEmpty()) + return false; + } + return true; +} + +/*! + Clears this margin group. The synchronization of the margin sides that use this margin group is + lifted and they will use their individual margin sizes again. +*/ +void QCPMarginGroup::clear() +{ + // make all children remove themselves from this margin group: + QHashIterator > it(mChildren); + while (it.hasNext()) + { + it.next(); + const QList elements = it.value(); + for (int i=elements.size()-1; i>=0; --i) + elements.at(i)->setMarginGroup(it.key(), 0); // removes itself from mChildren via removeChild + } +} + +/*! \internal + + Returns the synchronized common margin for \a side. This is the margin value that will be used by + the layout element on the respective side, if it is part of this margin group. + + The common margin is calculated by requesting the automatic margin (\ref + QCPLayoutElement::calculateAutoMargin) of each element associated with \a side in this margin + group, and choosing the largest returned value. (QCPLayoutElement::minimumMargins is taken into + account, too.) +*/ +int QCPMarginGroup::commonMargin(QCP::MarginSide side) const +{ + // query all automatic margins of the layout elements in this margin group side and find maximum: + int result = 0; + const QList elements = mChildren.value(side); + for (int i=0; iautoMargins().testFlag(side)) + continue; + int m = qMax(elements.at(i)->calculateAutoMargin(side), QCP::getMarginValue(elements.at(i)->minimumMargins(), side)); + if (m > result) + result = m; + } + return result; +} + +/*! \internal + + Adds \a element to the internal list of child elements, for the margin \a side. + + This function does not modify the margin group property of \a element. +*/ +void QCPMarginGroup::addChild(QCP::MarginSide side, QCPLayoutElement *element) +{ + if (!mChildren[side].contains(element)) + mChildren[side].append(element); + else + qDebug() << Q_FUNC_INFO << "element is already child of this margin group side" << reinterpret_cast(element); +} + +/*! \internal + + Removes \a element from the internal list of child elements, for the margin \a side. + + This function does not modify the margin group property of \a element. +*/ +void QCPMarginGroup::removeChild(QCP::MarginSide side, QCPLayoutElement *element) +{ + if (!mChildren[side].removeOne(element)) + qDebug() << Q_FUNC_INFO << "element is not child of this margin group side" << reinterpret_cast(element); +} + + +//////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////// QCPLayoutElement +//////////////////////////////////////////////////////////////////////////////////////////////////// + +/*! \class QCPLayoutElement + \brief The abstract base class for all objects that form \ref thelayoutsystem "the layout system". + + This is an abstract base class. As such, it can't be instantiated directly, rather use one of its subclasses. + + A Layout element is a rectangular object which can be placed in layouts. It has an outer rect + (QCPLayoutElement::outerRect) and an inner rect (\ref QCPLayoutElement::rect). The difference + between outer and inner rect is called its margin. The margin can either be set to automatic or + manual (\ref setAutoMargins) on a per-side basis. If a side is set to manual, that margin can be + set explicitly with \ref setMargins and will stay fixed at that value. If it's set to automatic, + the layout element subclass will control the value itself (via \ref calculateAutoMargin). + + Layout elements can be placed in layouts (base class QCPLayout) like QCPLayoutGrid. The top level + layout is reachable via \ref QCustomPlot::plotLayout, and is a \ref QCPLayoutGrid. Since \ref + QCPLayout itself derives from \ref QCPLayoutElement, layouts can be nested. + + Thus in QCustomPlot one can divide layout elements into two categories: The ones that are + invisible by themselves, because they don't draw anything. Their only purpose is to manage the + position and size of other layout elements. This category of layout elements usually use + QCPLayout as base class. Then there is the category of layout elements which actually draw + something. For example, QCPAxisRect, QCPLegend and QCPPlotTitle are of this category. This does + not necessarily mean that the latter category can't have child layout elements. QCPLegend for + instance, actually derives from QCPLayoutGrid and the individual legend items are child layout + elements in the grid layout. +*/ + +/* start documentation of inline functions */ + +/*! \fn QCPLayout *QCPLayoutElement::layout() const + + Returns the parent layout of this layout element. +*/ + +/*! \fn QRect QCPLayoutElement::rect() const + + Returns the inner rect of this layout element. The inner rect is the outer rect (\ref + setOuterRect) shrinked by the margins (\ref setMargins, \ref setAutoMargins). + + In some cases, the area between outer and inner rect is left blank. In other cases the margin + area is used to display peripheral graphics while the main content is in the inner rect. This is + where automatic margin calculation becomes interesting because it allows the layout element to + adapt the margins to the peripheral graphics it wants to draw. For example, \ref QCPAxisRect + draws the axis labels and tick labels in the margin area, thus needs to adjust the margins (if + \ref setAutoMargins is enabled) according to the space required by the labels of the axes. +*/ + +/*! \fn virtual void QCPLayoutElement::mousePressEvent(QMouseEvent *event) + + This event is called, if the mouse was pressed while being inside the outer rect of this layout + element. +*/ + +/*! \fn virtual void QCPLayoutElement::mouseMoveEvent(QMouseEvent *event) + + This event is called, if the mouse is moved inside the outer rect of this layout element. +*/ + +/*! \fn virtual void QCPLayoutElement::mouseReleaseEvent(QMouseEvent *event) + + This event is called, if the mouse was previously pressed inside the outer rect of this layout + element and is now released. +*/ + +/*! \fn virtual void QCPLayoutElement::mouseDoubleClickEvent(QMouseEvent *event) + + This event is called, if the mouse is double-clicked inside the outer rect of this layout + element. +*/ + +/*! \fn virtual void QCPLayoutElement::wheelEvent(QWheelEvent *event) + + This event is called, if the mouse wheel is scrolled while the cursor is inside the rect of this + layout element. +*/ + +/* end documentation of inline functions */ + +/*! + Creates an instance of QCPLayoutElement and sets default values. +*/ +QCPLayoutElement::QCPLayoutElement(QCustomPlot *parentPlot) : + QCPLayerable(parentPlot), // parenthood is changed as soon as layout element gets inserted into a layout (except for top level layout) + mParentLayout(0), + mMinimumSize(), + mMaximumSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX), + mRect(0, 0, 0, 0), + mOuterRect(0, 0, 0, 0), + mMargins(0, 0, 0, 0), + mMinimumMargins(0, 0, 0, 0), + mAutoMargins(QCP::msAll) +{ +} + +QCPLayoutElement::~QCPLayoutElement() +{ + setMarginGroup(QCP::msAll, 0); // unregister at margin groups, if there are any + // unregister at layout: + if (qobject_cast(mParentLayout)) // the qobject_cast is just a safeguard in case the layout forgets to call clear() in its dtor and this dtor is called by QObject dtor + mParentLayout->take(this); +} + +/*! + Sets the outer rect of this layout element. If the layout element is inside a layout, the layout + sets the position and size of this layout element using this function. + + Calling this function externally has no effect, since the layout will overwrite any changes to + the outer rect upon the next replot. + + The layout element will adapt its inner \ref rect by applying the margins inward to the outer rect. + + \see rect +*/ +void QCPLayoutElement::setOuterRect(const QRect &rect) +{ + if (mOuterRect != rect) + { + mOuterRect = rect; + mRect = mOuterRect.adjusted(mMargins.left(), mMargins.top(), -mMargins.right(), -mMargins.bottom()); + } +} + +/*! + Sets the margins of this layout element. If \ref setAutoMargins is disabled for some or all + sides, this function is used to manually set the margin on those sides. Sides that are still set + to be handled automatically are ignored and may have any value in \a margins. + + The margin is the distance between the outer rect (controlled by the parent layout via \ref + setOuterRect) and the inner \ref rect (which usually contains the main content of this layout + element). + + \see setAutoMargins +*/ +void QCPLayoutElement::setMargins(const QMargins &margins) +{ + if (mMargins != margins) + { + mMargins = margins; + mRect = mOuterRect.adjusted(mMargins.left(), mMargins.top(), -mMargins.right(), -mMargins.bottom()); + } +} + +/*! + If \ref setAutoMargins is enabled on some or all margins, this function is used to provide + minimum values for those margins. + + The minimum values are not enforced on margin sides that were set to be under manual control via + \ref setAutoMargins. + + \see setAutoMargins +*/ +void QCPLayoutElement::setMinimumMargins(const QMargins &margins) +{ + if (mMinimumMargins != margins) + { + mMinimumMargins = margins; + } +} + +/*! + Sets on which sides the margin shall be calculated automatically. If a side is calculated + automatically, a minimum margin value may be provided with \ref setMinimumMargins. If a side is + set to be controlled manually, the value may be specified with \ref setMargins. + + Margin sides that are under automatic control may participate in a \ref QCPMarginGroup (see \ref + setMarginGroup), to synchronize (align) it with other layout elements in the plot. + + \see setMinimumMargins, setMargins +*/ +void QCPLayoutElement::setAutoMargins(QCP::MarginSides sides) +{ + mAutoMargins = sides; +} + +/*! + Sets the minimum size for the inner \ref rect of this layout element. A parent layout tries to + respect the \a size here by changing row/column sizes in the layout accordingly. + + If the parent layout size is not sufficient to satisfy all minimum size constraints of its child + layout elements, the layout may set a size that is actually smaller than \a size. QCustomPlot + propagates the layout's size constraints to the outside by setting its own minimum QWidget size + accordingly, so violations of \a size should be exceptions. +*/ +void QCPLayoutElement::setMinimumSize(const QSize &size) +{ + if (mMinimumSize != size) + { + mMinimumSize = size; + if (mParentLayout) + mParentLayout->sizeConstraintsChanged(); + } +} + +/*! \overload + + Sets the minimum size for the inner \ref rect of this layout element. +*/ +void QCPLayoutElement::setMinimumSize(int width, int height) +{ + setMinimumSize(QSize(width, height)); +} + +/*! + Sets the maximum size for the inner \ref rect of this layout element. A parent layout tries to + respect the \a size here by changing row/column sizes in the layout accordingly. +*/ +void QCPLayoutElement::setMaximumSize(const QSize &size) +{ + if (mMaximumSize != size) + { + mMaximumSize = size; + if (mParentLayout) + mParentLayout->sizeConstraintsChanged(); + } +} + +/*! \overload + + Sets the maximum size for the inner \ref rect of this layout element. +*/ +void QCPLayoutElement::setMaximumSize(int width, int height) +{ + setMaximumSize(QSize(width, height)); +} + +/*! + Sets the margin \a group of the specified margin \a sides. + + Margin groups allow synchronizing specified margins across layout elements, see the documentation + of \ref QCPMarginGroup. + + To unset the margin group of \a sides, set \a group to 0. + + Note that margin groups only work for margin sides that are set to automatic (\ref + setAutoMargins). +*/ +void QCPLayoutElement::setMarginGroup(QCP::MarginSides sides, QCPMarginGroup *group) +{ + QVector sideVector; + if (sides.testFlag(QCP::msLeft)) sideVector.append(QCP::msLeft); + if (sides.testFlag(QCP::msRight)) sideVector.append(QCP::msRight); + if (sides.testFlag(QCP::msTop)) sideVector.append(QCP::msTop); + if (sides.testFlag(QCP::msBottom)) sideVector.append(QCP::msBottom); + + for (int i=0; iremoveChild(side, this); + + if (!group) // if setting to 0, remove hash entry. Else set hash entry to new group and register there + { + mMarginGroups.remove(side); + } else // setting to a new group + { + mMarginGroups[side] = group; + group->addChild(side, this); + } + } + } +} + +/*! + Updates the layout element and sub-elements. This function is automatically called before every + replot by the parent layout element. It is called multiple times, once for every \ref + UpdatePhase. The phases are run through in the order of the enum values. For details about what + happens at the different phases, see the documentation of \ref UpdatePhase. + + Layout elements that have child elements should call the \ref update method of their child + elements, and pass the current \a phase unchanged. + + The default implementation executes the automatic margin mechanism in the \ref upMargins phase. + Subclasses should make sure to call the base class implementation. +*/ +void QCPLayoutElement::update(UpdatePhase phase) +{ + if (phase == upMargins) + { + if (mAutoMargins != QCP::msNone) + { + // set the margins of this layout element according to automatic margin calculation, either directly or via a margin group: + QMargins newMargins = mMargins; + QList allMarginSides = QList() << QCP::msLeft << QCP::msRight << QCP::msTop << QCP::msBottom; + foreach (QCP::MarginSide side, allMarginSides) + { + if (mAutoMargins.testFlag(side)) // this side's margin shall be calculated automatically + { + if (mMarginGroups.contains(side)) + QCP::setMarginValue(newMargins, side, mMarginGroups[side]->commonMargin(side)); // this side is part of a margin group, so get the margin value from that group + else + QCP::setMarginValue(newMargins, side, calculateAutoMargin(side)); // this side is not part of a group, so calculate the value directly + // apply minimum margin restrictions: + if (QCP::getMarginValue(newMargins, side) < QCP::getMarginValue(mMinimumMargins, side)) + QCP::setMarginValue(newMargins, side, QCP::getMarginValue(mMinimumMargins, side)); + } + } + setMargins(newMargins); + } + } +} + +/*! + Returns the minimum size this layout element (the inner \ref rect) may be compressed to. + + if a minimum size (\ref setMinimumSize) was not set manually, parent layouts consult this + function to determine the minimum allowed size of this layout element. (A manual minimum size is + considered set if it is non-zero.) +*/ +QSize QCPLayoutElement::minimumSizeHint() const +{ + return mMinimumSize; +} + +/*! + Returns the maximum size this layout element (the inner \ref rect) may be expanded to. + + if a maximum size (\ref setMaximumSize) was not set manually, parent layouts consult this + function to determine the maximum allowed size of this layout element. (A manual maximum size is + considered set if it is smaller than Qt's QWIDGETSIZE_MAX.) +*/ +QSize QCPLayoutElement::maximumSizeHint() const +{ + return mMaximumSize; +} + +/*! + Returns a list of all child elements in this layout element. If \a recursive is true, all + sub-child elements are included in the list, too. + + \warning There may be entries with value 0 in the returned list. (For example, QCPLayoutGrid may have + empty cells which yield 0 at the respective index.) +*/ +QList QCPLayoutElement::elements(bool recursive) const +{ + Q_UNUSED(recursive) + return QList(); +} + +/*! + Layout elements are sensitive to events inside their outer rect. If \a pos is within the outer + rect, this method returns a value corresponding to 0.99 times the parent plot's selection + tolerance. However, layout elements are not selectable by default. So if \a onlySelectable is + true, -1.0 is returned. + + See \ref QCPLayerable::selectTest for a general explanation of this virtual method. + + QCPLayoutElement subclasses may reimplement this method to provide more specific selection test + behaviour. +*/ +double QCPLayoutElement::selectTest(const QPointF &pos, bool onlySelectable, QVariant *details) const +{ + Q_UNUSED(details) + + if (onlySelectable) + return -1; + + if (QRectF(mOuterRect).contains(pos)) + { + if (mParentPlot) + return mParentPlot->selectionTolerance()*0.99; + else + { + qDebug() << Q_FUNC_INFO << "parent plot not defined"; + return -1; + } + } else + return -1; +} + +/*! \internal + + propagates the parent plot initialization to all child elements, by calling \ref + QCPLayerable::initializeParentPlot on them. +*/ +void QCPLayoutElement::parentPlotInitialized(QCustomPlot *parentPlot) +{ + foreach (QCPLayoutElement* el, elements(false)) + { + if (!el->parentPlot()) + el->initializeParentPlot(parentPlot); + } +} + +/*! \internal + + Returns the margin size for this \a side. It is used if automatic margins is enabled for this \a + side (see \ref setAutoMargins). If a minimum margin was set with \ref setMinimumMargins, the + returned value will not be smaller than the specified minimum margin. + + The default implementation just returns the respective manual margin (\ref setMargins) or the + minimum margin, whichever is larger. +*/ +int QCPLayoutElement::calculateAutoMargin(QCP::MarginSide side) +{ + return qMax(QCP::getMarginValue(mMargins, side), QCP::getMarginValue(mMinimumMargins, side)); +} + +//////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////// QCPLayout +//////////////////////////////////////////////////////////////////////////////////////////////////// + +/*! \class QCPLayout + \brief The abstract base class for layouts + + This is an abstract base class for layout elements whose main purpose is to define the position + and size of other child layout elements. In most cases, layouts don't draw anything themselves + (but there are exceptions to this, e.g. QCPLegend). + + QCPLayout derives from QCPLayoutElement, and thus can itself be nested in other layouts. + + QCPLayout introduces a common interface for accessing and manipulating the child elements. Those + functions are most notably \ref elementCount, \ref elementAt, \ref takeAt, \ref take, \ref + simplify, \ref removeAt, \ref remove and \ref clear. Individual subclasses may add more functions + to this interface which are more specialized to the form of the layout. For example, \ref + QCPLayoutGrid adds functions that take row and column indices to access cells of the layout grid + more conveniently. + + Since this is an abstract base class, you can't instantiate it directly. Rather use one of its + subclasses like QCPLayoutGrid or QCPLayoutInset. + + For a general introduction to the layout system, see the dedicated documentation page \ref + thelayoutsystem "The Layout System". +*/ + +/* start documentation of pure virtual functions */ + +/*! \fn virtual int QCPLayout::elementCount() const = 0 + + Returns the number of elements/cells in the layout. + + \see elements, elementAt +*/ + +/*! \fn virtual QCPLayoutElement* QCPLayout::elementAt(int index) const = 0 + + Returns the element in the cell with the given \a index. If \a index is invalid, returns 0. + + Note that even if \a index is valid, the respective cell may be empty in some layouts (e.g. + QCPLayoutGrid), so this function may return 0 in those cases. You may use this function to check + whether a cell is empty or not. + + \see elements, elementCount, takeAt +*/ + +/*! \fn virtual QCPLayoutElement* QCPLayout::takeAt(int index) = 0 + + Removes the element with the given \a index from the layout and returns it. + + If the \a index is invalid or the cell with that index is empty, returns 0. + + Note that some layouts don't remove the respective cell right away but leave an empty cell after + successful removal of the layout element. To collapse empty cells, use \ref simplify. + + \see elementAt, take +*/ + +/*! \fn virtual bool QCPLayout::take(QCPLayoutElement* element) = 0 + + Removes the specified \a element from the layout and returns true on success. + + If the \a element isn't in this layout, returns false. + + Note that some layouts don't remove the respective cell right away but leave an empty cell after + successful removal of the layout element. To collapse empty cells, use \ref simplify. + + \see takeAt +*/ + +/* end documentation of pure virtual functions */ + +/*! + Creates an instance of QCPLayout and sets default values. Note that since QCPLayout + is an abstract base class, it can't be instantiated directly. +*/ +QCPLayout::QCPLayout() +{ +} + +/*! + First calls the QCPLayoutElement::update base class implementation to update the margins on this + layout. + + Then calls \ref updateLayout which subclasses reimplement to reposition and resize their cells. + + Finally, \ref update is called on all child elements. +*/ +void QCPLayout::update(UpdatePhase phase) +{ + QCPLayoutElement::update(phase); + + // set child element rects according to layout: + if (phase == upLayout) + updateLayout(); + + // propagate update call to child elements: + const int elCount = elementCount(); + for (int i=0; iupdate(phase); + } +} + +/* inherits documentation from base class */ +QList QCPLayout::elements(bool recursive) const +{ + const int c = elementCount(); + QList result; +#if QT_VERSION >= QT_VERSION_CHECK(4, 7, 0) + result.reserve(c); +#endif + for (int i=0; ielements(recursive); + } + } + return result; +} + +/*! + Simplifies the layout by collapsing empty cells. The exact behavior depends on subclasses, the + default implementation does nothing. + + Not all layouts need simplification. For example, QCPLayoutInset doesn't use explicit + simplification while QCPLayoutGrid does. +*/ +void QCPLayout::simplify() +{ +} + +/*! + Removes and deletes the element at the provided \a index. Returns true on success. If \a index is + invalid or points to an empty cell, returns false. + + This function internally uses \ref takeAt to remove the element from the layout and then deletes + the returned element. Note that some layouts don't remove the respective cell right away but leave an + empty cell after successful removal of the layout element. To collapse empty cells, use \ref + simplify. + + \see remove, takeAt +*/ +bool QCPLayout::removeAt(int index) +{ + if (QCPLayoutElement *el = takeAt(index)) + { + delete el; + return true; + } else + return false; +} + +/*! + Removes and deletes the provided \a element. Returns true on success. If \a element is not in the + layout, returns false. + + This function internally uses \ref takeAt to remove the element from the layout and then deletes + the element. Note that some layouts don't remove the respective cell right away but leave an + empty cell after successful removal of the layout element. To collapse empty cells, use \ref + simplify. + + \see removeAt, take +*/ +bool QCPLayout::remove(QCPLayoutElement *element) +{ + if (take(element)) + { + delete element; + return true; + } else + return false; +} + +/*! + Removes and deletes all layout elements in this layout. Finally calls \ref simplify to make sure + all empty cells are collapsed. + + \see remove, removeAt +*/ +void QCPLayout::clear() +{ + for (int i=elementCount()-1; i>=0; --i) + { + if (elementAt(i)) + removeAt(i); + } + simplify(); +} + +/*! + Subclasses call this method to report changed (minimum/maximum) size constraints. + + If the parent of this layout is again a QCPLayout, forwards the call to the parent's \ref + sizeConstraintsChanged. If the parent is a QWidget (i.e. is the \ref QCustomPlot::plotLayout of + QCustomPlot), calls QWidget::updateGeometry, so if the QCustomPlot widget is inside a Qt QLayout, + it may update itself and resize cells accordingly. +*/ +void QCPLayout::sizeConstraintsChanged() const +{ + if (QWidget *w = qobject_cast(parent())) + w->updateGeometry(); + else if (QCPLayout *l = qobject_cast(parent())) + l->sizeConstraintsChanged(); +} + +/*! \internal + + Subclasses reimplement this method to update the position and sizes of the child elements/cells + via calling their \ref QCPLayoutElement::setOuterRect. The default implementation does nothing. + + The geometry used as a reference is the inner \ref rect of this layout. Child elements should stay + within that rect. + + \ref getSectionSizes may help with the reimplementation of this function. + + \see update +*/ +void QCPLayout::updateLayout() +{ +} + + +/*! \internal + + Associates \a el with this layout. This is done by setting the \ref QCPLayoutElement::layout, the + \ref QCPLayerable::parentLayerable and the QObject parent to this layout. + + Further, if \a el didn't previously have a parent plot, calls \ref + QCPLayerable::initializeParentPlot on \a el to set the paret plot. + + This method is used by subclass specific methods that add elements to the layout. Note that this + method only changes properties in \a el. The removal from the old layout and the insertion into + the new layout must be done additionally. +*/ +void QCPLayout::adoptElement(QCPLayoutElement *el) +{ + if (el) + { + el->mParentLayout = this; + el->setParentLayerable(this); + el->setParent(this); + if (!el->parentPlot()) + el->initializeParentPlot(mParentPlot); + } else + qDebug() << Q_FUNC_INFO << "Null element passed"; +} + +/*! \internal + + Disassociates \a el from this layout. This is done by setting the \ref QCPLayoutElement::layout + and the \ref QCPLayerable::parentLayerable to zero. The QObject parent is set to the parent + QCustomPlot. + + This method is used by subclass specific methods that remove elements from the layout (e.g. \ref + take or \ref takeAt). Note that this method only changes properties in \a el. The removal from + the old layout must be done additionally. +*/ +void QCPLayout::releaseElement(QCPLayoutElement *el) +{ + if (el) + { + el->mParentLayout = 0; + el->setParentLayerable(0); + el->setParent(mParentPlot); + // Note: Don't initializeParentPlot(0) here, because layout element will stay in same parent plot + } else + qDebug() << Q_FUNC_INFO << "Null element passed"; +} + +/*! \internal + + This is a helper function for the implementation of \ref updateLayout in subclasses. + + It calculates the sizes of one-dimensional sections with provided constraints on maximum section + sizes, minimum section sizes, relative stretch factors and the final total size of all sections. + + The QVector entries refer to the sections. Thus all QVectors must have the same size. + + \a maxSizes gives the maximum allowed size of each section. If there shall be no maximum size + imposed, set all vector values to Qt's QWIDGETSIZE_MAX. + + \a minSizes gives the minimum allowed size of each section. If there shall be no minimum size + imposed, set all vector values to zero. If the \a minSizes entries add up to a value greater than + \a totalSize, sections will be scaled smaller than the proposed minimum sizes. (In other words, + not exceeding the allowed total size is taken to be more important than not going below minimum + section sizes.) + + \a stretchFactors give the relative proportions of the sections to each other. If all sections + shall be scaled equally, set all values equal. If the first section shall be double the size of + each individual other section, set the first number of \a stretchFactors to double the value of + the other individual values (e.g. {2, 1, 1, 1}). + + \a totalSize is the value that the final section sizes will add up to. Due to rounding, the + actual sum may differ slightly. If you want the section sizes to sum up to exactly that value, + you could distribute the remaining difference on the sections. + + The return value is a QVector containing the section sizes. +*/ +QVector QCPLayout::getSectionSizes(QVector maxSizes, QVector minSizes, QVector stretchFactors, int totalSize) const +{ + if (maxSizes.size() != minSizes.size() || minSizes.size() != stretchFactors.size()) + { + qDebug() << Q_FUNC_INFO << "Passed vector sizes aren't equal:" << maxSizes << minSizes << stretchFactors; + return QVector(); + } + if (stretchFactors.isEmpty()) + return QVector(); + int sectionCount = stretchFactors.size(); + QVector sectionSizes(sectionCount); + // if provided total size is forced smaller than total minimum size, ignore minimum sizes (squeeze sections): + int minSizeSum = 0; + for (int i=0; i minimumLockedSections; + QList unfinishedSections; + for (int i=0; i result(sectionCount); + for (int i=0; i= 0 && row < mElements.size()) + { + if (column >= 0 && column < mElements.first().size()) + { + if (QCPLayoutElement *result = mElements.at(row).at(column)) + return result; + else + qDebug() << Q_FUNC_INFO << "Requested cell is empty. Row:" << row << "Column:" << column; + } else + qDebug() << Q_FUNC_INFO << "Invalid column. Row:" << row << "Column:" << column; + } else + qDebug() << Q_FUNC_INFO << "Invalid row. Row:" << row << "Column:" << column; + return 0; +} + +/*! + Returns the number of rows in the layout. + + \see columnCount +*/ +int QCPLayoutGrid::rowCount() const +{ + return mElements.size(); +} + +/*! + Returns the number of columns in the layout. + + \see rowCount +*/ +int QCPLayoutGrid::columnCount() const +{ + if (mElements.size() > 0) + return mElements.first().size(); + else + return 0; +} + +/*! + Adds the \a element to cell with \a row and \a column. If \a element is already in a layout, it + is first removed from there. If \a row or \a column don't exist yet, the layout is expanded + accordingly. + + Returns true if the element was added successfully, i.e. if the cell at \a row and \a column + didn't already have an element. + + \see element, hasElement, take, remove +*/ +bool QCPLayoutGrid::addElement(int row, int column, QCPLayoutElement *element) +{ + if (element) + { + if (!hasElement(row, column)) + { + if (element->layout()) // remove from old layout first + element->layout()->take(element); + expandTo(row+1, column+1); + mElements[row][column] = element; + adoptElement(element); + return true; + } else + qDebug() << Q_FUNC_INFO << "There is already an element in the specified row/column:" << row << column; + } else + qDebug() << Q_FUNC_INFO << "Can't add null element to row/column:" << row << column; + return false; +} + +/*! + Returns whether the cell at \a row and \a column exists and contains a valid element, i.e. isn't + empty. + + \see element +*/ +bool QCPLayoutGrid::hasElement(int row, int column) +{ + if (row >= 0 && row < rowCount() && column >= 0 && column < columnCount()) + return mElements.at(row).at(column); + else + return false; +} + +/*! + Sets the stretch \a factor of \a column. + + Stretch factors control the relative sizes of rows and columns. Cells will not be resized beyond + their minimum and maximum widths/heights (\ref QCPLayoutElement::setMinimumSize, \ref + QCPLayoutElement::setMaximumSize), regardless of the stretch factor. + + The default stretch factor of newly created rows/columns is 1. + + \see setColumnStretchFactors, setRowStretchFactor +*/ +void QCPLayoutGrid::setColumnStretchFactor(int column, double factor) +{ + if (column >= 0 && column < columnCount()) + { + if (factor > 0) + mColumnStretchFactors[column] = factor; + else + qDebug() << Q_FUNC_INFO << "Invalid stretch factor, must be positive:" << factor; + } else + qDebug() << Q_FUNC_INFO << "Invalid column:" << column; +} + +/*! + Sets the stretch \a factors of all columns. \a factors must have the size \ref columnCount. + + Stretch factors control the relative sizes of rows and columns. Cells will not be resized beyond + their minimum and maximum widths/heights (\ref QCPLayoutElement::setMinimumSize, \ref + QCPLayoutElement::setMaximumSize), regardless of the stretch factor. + + The default stretch factor of newly created rows/columns is 1. + + \see setColumnStretchFactor, setRowStretchFactors +*/ +void QCPLayoutGrid::setColumnStretchFactors(const QList &factors) +{ + if (factors.size() == mColumnStretchFactors.size()) + { + mColumnStretchFactors = factors; + for (int i=0; i= 0 && row < rowCount()) + { + if (factor > 0) + mRowStretchFactors[row] = factor; + else + qDebug() << Q_FUNC_INFO << "Invalid stretch factor, must be positive:" << factor; + } else + qDebug() << Q_FUNC_INFO << "Invalid row:" << row; +} + +/*! + Sets the stretch \a factors of all rows. \a factors must have the size \ref rowCount. + + Stretch factors control the relative sizes of rows and columns. Cells will not be resized beyond + their minimum and maximum widths/heights (\ref QCPLayoutElement::setMinimumSize, \ref + QCPLayoutElement::setMaximumSize), regardless of the stretch factor. + + The default stretch factor of newly created rows/columns is 1. + + \see setRowStretchFactor, setColumnStretchFactors +*/ +void QCPLayoutGrid::setRowStretchFactors(const QList &factors) +{ + if (factors.size() == mRowStretchFactors.size()) + { + mRowStretchFactors = factors; + for (int i=0; i()); + mRowStretchFactors.append(1); + } + // go through rows and expand columns as necessary: + int newColCount = qMax(columnCount(), newColumnCount); + for (int i=0; i rowCount()) + newIndex = rowCount(); + + mRowStretchFactors.insert(newIndex, 1); + QList newRow; + for (int col=0; col columnCount()) + newIndex = columnCount(); + + mColumnStretchFactors.insert(newIndex, 1); + for (int row=0; row minColWidths, minRowHeights, maxColWidths, maxRowHeights; + getMinimumRowColSizes(&minColWidths, &minRowHeights); + getMaximumRowColSizes(&maxColWidths, &maxRowHeights); + + int totalRowSpacing = (rowCount()-1) * mRowSpacing; + int totalColSpacing = (columnCount()-1) * mColumnSpacing; + QVector colWidths = getSectionSizes(maxColWidths, minColWidths, mColumnStretchFactors.toVector(), mRect.width()-totalColSpacing); + QVector rowHeights = getSectionSizes(maxRowHeights, minRowHeights, mRowStretchFactors.toVector(), mRect.height()-totalRowSpacing); + + // go through cells and set rects accordingly: + int yOffset = mRect.top(); + for (int row=0; row 0) + yOffset += rowHeights.at(row-1)+mRowSpacing; + int xOffset = mRect.left(); + for (int col=0; col 0) + xOffset += colWidths.at(col-1)+mColumnSpacing; + if (mElements.at(row).at(col)) + mElements.at(row).at(col)->setOuterRect(QRect(xOffset, yOffset, colWidths.at(col), rowHeights.at(row))); + } + } +} + +/* inherits documentation from base class */ +int QCPLayoutGrid::elementCount() const +{ + return rowCount()*columnCount(); +} + +/* inherits documentation from base class */ +QCPLayoutElement *QCPLayoutGrid::elementAt(int index) const +{ + if (index >= 0 && index < elementCount()) + return mElements.at(index / columnCount()).at(index % columnCount()); + else + return 0; +} + +/* inherits documentation from base class */ +QCPLayoutElement *QCPLayoutGrid::takeAt(int index) +{ + if (QCPLayoutElement *el = elementAt(index)) + { + releaseElement(el); + mElements[index / columnCount()][index % columnCount()] = 0; + return el; + } else + { + qDebug() << Q_FUNC_INFO << "Attempt to take invalid index:" << index; + return 0; + } +} + +/* inherits documentation from base class */ +bool QCPLayoutGrid::take(QCPLayoutElement *element) +{ + if (element) + { + for (int i=0; i QCPLayoutGrid::elements(bool recursive) const +{ + QList result; + int colC = columnCount(); + int rowC = rowCount(); +#if QT_VERSION >= QT_VERSION_CHECK(4, 7, 0) + result.reserve(colC*rowC); +#endif + for (int row=0; rowelements(recursive); + } + } + return result; +} + +/*! + Simplifies the layout by collapsing rows and columns which only contain empty cells. +*/ +void QCPLayoutGrid::simplify() +{ + // remove rows with only empty cells: + for (int row=rowCount()-1; row>=0; --row) + { + bool hasElements = false; + for (int col=0; col=0; --col) + { + bool hasElements = false; + for (int row=0; row minColWidths, minRowHeights; + getMinimumRowColSizes(&minColWidths, &minRowHeights); + QSize result(0, 0); + for (int i=0; i maxColWidths, maxRowHeights; + getMaximumRowColSizes(&maxColWidths, &maxRowHeights); + + QSize result(0, 0); + for (int i=0; i *minColWidths, QVector *minRowHeights) const +{ + *minColWidths = QVector(columnCount(), 0); + *minRowHeights = QVector(rowCount(), 0); + for (int row=0; rowminimumSizeHint(); + QSize min = mElements.at(row).at(col)->minimumSize(); + QSize final(min.width() > 0 ? min.width() : minHint.width(), min.height() > 0 ? min.height() : minHint.height()); + if (minColWidths->at(col) < final.width()) + (*minColWidths)[col] = final.width(); + if (minRowHeights->at(row) < final.height()) + (*minRowHeights)[row] = final.height(); + } + } + } +} + +/*! \internal + + Places the maximum column widths and row heights into \a maxColWidths and \a maxRowHeights + respectively. + + The maximum height of a row is the smallest maximum height of any element in that row. The + maximum width of a column is the smallest maximum width of any element in that column. + + This is a helper function for \ref updateLayout. + + \see getMinimumRowColSizes +*/ +void QCPLayoutGrid::getMaximumRowColSizes(QVector *maxColWidths, QVector *maxRowHeights) const +{ + *maxColWidths = QVector(columnCount(), QWIDGETSIZE_MAX); + *maxRowHeights = QVector(rowCount(), QWIDGETSIZE_MAX); + for (int row=0; rowmaximumSizeHint(); + QSize max = mElements.at(row).at(col)->maximumSize(); + QSize final(max.width() < QWIDGETSIZE_MAX ? max.width() : maxHint.width(), max.height() < QWIDGETSIZE_MAX ? max.height() : maxHint.height()); + if (maxColWidths->at(col) > final.width()) + (*maxColWidths)[col] = final.width(); + if (maxRowHeights->at(row) > final.height()) + (*maxRowHeights)[row] = final.height(); + } + } + } +} + + +//////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////// QCPLayoutInset +//////////////////////////////////////////////////////////////////////////////////////////////////// +/*! \class QCPLayoutInset + \brief A layout that places child elements aligned to the border or arbitrarily positioned + + Elements are placed either aligned to the border or at arbitrary position in the area of the + layout. Which placement applies is controlled with the \ref InsetPlacement (\ref + setInsetPlacement). + + Elements are added via \ref addElement(QCPLayoutElement *element, Qt::Alignment alignment) or + addElement(QCPLayoutElement *element, const QRectF &rect). If the first method is used, the inset + placement will default to \ref ipBorderAligned and the element will be aligned according to the + \a alignment parameter. The second method defaults to \ref ipFree and allows placing elements at + arbitrary position and size, defined by \a rect. + + The alignment or rect can be set via \ref setInsetAlignment or \ref setInsetRect, respectively. + + This is the layout that every QCPAxisRect has as \ref QCPAxisRect::insetLayout. +*/ + +/* start documentation of inline functions */ + +/*! \fn virtual void QCPLayoutInset::simplify() + + The QCPInsetLayout does not need simplification since it can never have empty cells due to its + linear index structure. This method does nothing. +*/ + +/* end documentation of inline functions */ + +/*! + Creates an instance of QCPLayoutInset and sets default values. +*/ +QCPLayoutInset::QCPLayoutInset() +{ +} + +QCPLayoutInset::~QCPLayoutInset() +{ + // clear all child layout elements. This is important because only the specific layouts know how + // to handle removing elements (clear calls virtual removeAt method to do that). + clear(); +} + +/*! + Returns the placement type of the element with the specified \a index. +*/ +QCPLayoutInset::InsetPlacement QCPLayoutInset::insetPlacement(int index) const +{ + if (elementAt(index)) + return mInsetPlacement.at(index); + else + { + qDebug() << Q_FUNC_INFO << "Invalid element index:" << index; + return ipFree; + } +} + +/*! + Returns the alignment of the element with the specified \a index. The alignment only has a + meaning, if the inset placement (\ref setInsetPlacement) is \ref ipBorderAligned. +*/ +Qt::Alignment QCPLayoutInset::insetAlignment(int index) const +{ + if (elementAt(index)) + return mInsetAlignment.at(index); + else + { + qDebug() << Q_FUNC_INFO << "Invalid element index:" << index; + return 0; + } +} + +/*! + Returns the rect of the element with the specified \a index. The rect only has a + meaning, if the inset placement (\ref setInsetPlacement) is \ref ipFree. +*/ +QRectF QCPLayoutInset::insetRect(int index) const +{ + if (elementAt(index)) + return mInsetRect.at(index); + else + { + qDebug() << Q_FUNC_INFO << "Invalid element index:" << index; + return QRectF(); + } +} + +/*! + Sets the inset placement type of the element with the specified \a index to \a placement. + + \see InsetPlacement +*/ +void QCPLayoutInset::setInsetPlacement(int index, QCPLayoutInset::InsetPlacement placement) +{ + if (elementAt(index)) + mInsetPlacement[index] = placement; + else + qDebug() << Q_FUNC_INFO << "Invalid element index:" << index; +} + +/*! + If the inset placement (\ref setInsetPlacement) is \ref ipBorderAligned, this function + is used to set the alignment of the element with the specified \a index to \a alignment. + + \a alignment is an or combination of the following alignment flags: Qt::AlignLeft, + Qt::AlignHCenter, Qt::AlighRight, Qt::AlignTop, Qt::AlignVCenter, Qt::AlignBottom. Any other + alignment flags will be ignored. +*/ +void QCPLayoutInset::setInsetAlignment(int index, Qt::Alignment alignment) +{ + if (elementAt(index)) + mInsetAlignment[index] = alignment; + else + qDebug() << Q_FUNC_INFO << "Invalid element index:" << index; +} + +/*! + If the inset placement (\ref setInsetPlacement) is \ref ipFree, this function is used to set the + position and size of the element with the specified \a index to \a rect. + + \a rect is given in fractions of the whole inset layout rect. So an inset with rect (0, 0, 1, 1) + will span the entire layout. An inset with rect (0.6, 0.1, 0.35, 0.35) will be in the top right + corner of the layout, with 35% width and height of the parent layout. + + Note that the minimum and maximum sizes of the embedded element (\ref + QCPLayoutElement::setMinimumSize, \ref QCPLayoutElement::setMaximumSize) are enforced. +*/ +void QCPLayoutInset::setInsetRect(int index, const QRectF &rect) +{ + if (elementAt(index)) + mInsetRect[index] = rect; + else + qDebug() << Q_FUNC_INFO << "Invalid element index:" << index; +} + +/* inherits documentation from base class */ +void QCPLayoutInset::updateLayout() +{ + for (int i=0; iminimumSizeHint(); + QSize maxSizeHint = mElements.at(i)->maximumSizeHint(); + finalMinSize.setWidth(mElements.at(i)->minimumSize().width() > 0 ? mElements.at(i)->minimumSize().width() : minSizeHint.width()); + finalMinSize.setHeight(mElements.at(i)->minimumSize().height() > 0 ? mElements.at(i)->minimumSize().height() : minSizeHint.height()); + finalMaxSize.setWidth(mElements.at(i)->maximumSize().width() < QWIDGETSIZE_MAX ? mElements.at(i)->maximumSize().width() : maxSizeHint.width()); + finalMaxSize.setHeight(mElements.at(i)->maximumSize().height() < QWIDGETSIZE_MAX ? mElements.at(i)->maximumSize().height() : maxSizeHint.height()); + if (mInsetPlacement.at(i) == ipFree) + { + insetRect = QRect(rect().x()+rect().width()*mInsetRect.at(i).x(), + rect().y()+rect().height()*mInsetRect.at(i).y(), + rect().width()*mInsetRect.at(i).width(), + rect().height()*mInsetRect.at(i).height()); + if (insetRect.size().width() < finalMinSize.width()) + insetRect.setWidth(finalMinSize.width()); + if (insetRect.size().height() < finalMinSize.height()) + insetRect.setHeight(finalMinSize.height()); + if (insetRect.size().width() > finalMaxSize.width()) + insetRect.setWidth(finalMaxSize.width()); + if (insetRect.size().height() > finalMaxSize.height()) + insetRect.setHeight(finalMaxSize.height()); + } else if (mInsetPlacement.at(i) == ipBorderAligned) + { + insetRect.setSize(finalMinSize); + Qt::Alignment al = mInsetAlignment.at(i); + if (al.testFlag(Qt::AlignLeft)) insetRect.moveLeft(rect().x()); + else if (al.testFlag(Qt::AlignRight)) insetRect.moveRight(rect().x()+rect().width()); + else insetRect.moveLeft(rect().x()+rect().width()*0.5-finalMinSize.width()*0.5); // default to Qt::AlignHCenter + if (al.testFlag(Qt::AlignTop)) insetRect.moveTop(rect().y()); + else if (al.testFlag(Qt::AlignBottom)) insetRect.moveBottom(rect().y()+rect().height()); + else insetRect.moveTop(rect().y()+rect().height()*0.5-finalMinSize.height()*0.5); // default to Qt::AlignVCenter + } + mElements.at(i)->setOuterRect(insetRect); + } +} + +/* inherits documentation from base class */ +int QCPLayoutInset::elementCount() const +{ + return mElements.size(); +} + +/* inherits documentation from base class */ +QCPLayoutElement *QCPLayoutInset::elementAt(int index) const +{ + if (index >= 0 && index < mElements.size()) + return mElements.at(index); + else + return 0; +} + +/* inherits documentation from base class */ +QCPLayoutElement *QCPLayoutInset::takeAt(int index) +{ + if (QCPLayoutElement *el = elementAt(index)) + { + releaseElement(el); + mElements.removeAt(index); + mInsetPlacement.removeAt(index); + mInsetAlignment.removeAt(index); + mInsetRect.removeAt(index); + return el; + } else + { + qDebug() << Q_FUNC_INFO << "Attempt to take invalid index:" << index; + return 0; + } +} + +/* inherits documentation from base class */ +bool QCPLayoutInset::take(QCPLayoutElement *element) +{ + if (element) + { + for (int i=0; irealVisibility() && mElements.at(i)->selectTest(pos, onlySelectable) >= 0) + return mParentPlot->selectionTolerance()*0.99; + } + return -1; +} + +/*! + Adds the specified \a element to the layout as an inset aligned at the border (\ref + setInsetAlignment is initialized with \ref ipBorderAligned). The alignment is set to \a + alignment. + + \a alignment is an or combination of the following alignment flags: Qt::AlignLeft, + Qt::AlignHCenter, Qt::AlighRight, Qt::AlignTop, Qt::AlignVCenter, Qt::AlignBottom. Any other + alignment flags will be ignored. + + \see addElement(QCPLayoutElement *element, const QRectF &rect) +*/ +void QCPLayoutInset::addElement(QCPLayoutElement *element, Qt::Alignment alignment) +{ + if (element) + { + if (element->layout()) // remove from old layout first + element->layout()->take(element); + mElements.append(element); + mInsetPlacement.append(ipBorderAligned); + mInsetAlignment.append(alignment); + mInsetRect.append(QRectF(0.6, 0.6, 0.4, 0.4)); + adoptElement(element); + } else + qDebug() << Q_FUNC_INFO << "Can't add null element"; +} + +/*! + Adds the specified \a element to the layout as an inset with free positioning/sizing (\ref + setInsetAlignment is initialized with \ref ipFree). The position and size is set to \a + rect. + + \a rect is given in fractions of the whole inset layout rect. So an inset with rect (0, 0, 1, 1) + will span the entire layout. An inset with rect (0.6, 0.1, 0.35, 0.35) will be in the top right + corner of the layout, with 35% width and height of the parent layout. + + \see addElement(QCPLayoutElement *element, Qt::Alignment alignment) +*/ +void QCPLayoutInset::addElement(QCPLayoutElement *element, const QRectF &rect) +{ + if (element) + { + if (element->layout()) // remove from old layout first + element->layout()->take(element); + mElements.append(element); + mInsetPlacement.append(ipFree); + mInsetAlignment.append(Qt::AlignRight|Qt::AlignTop); + mInsetRect.append(rect); + adoptElement(element); + } else + qDebug() << Q_FUNC_INFO << "Can't add null element"; +} + + +//////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////// QCPLineEnding +//////////////////////////////////////////////////////////////////////////////////////////////////// + +/*! \class QCPLineEnding + \brief Handles the different ending decorations for line-like items + + \image html QCPLineEnding.png "The various ending styles currently supported" + + For every ending a line-like item has, an instance of this class exists. For example, QCPItemLine + has two endings which can be set with QCPItemLine::setHead and QCPItemLine::setTail. + + The styles themselves are defined via the enum QCPLineEnding::EndingStyle. Most decorations can + be modified regarding width and length, see \ref setWidth and \ref setLength. The direction of + the ending decoration (e.g. direction an arrow is pointing) is controlled by the line-like item. + For example, when both endings of a QCPItemLine are set to be arrows, they will point to opposite + directions, e.g. "outward". This can be changed by \ref setInverted, which would make the + respective arrow point inward. + + Note that due to the overloaded QCPLineEnding constructor, you may directly specify a + QCPLineEnding::EndingStyle where actually a QCPLineEnding is expected, e.g. + \snippet documentation/doc-code-snippets/mainwindow.cpp qcplineending-sethead +*/ + +/*! + Creates a QCPLineEnding instance with default values (style \ref esNone). +*/ +QCPLineEnding::QCPLineEnding() : + mStyle(esNone), + mWidth(8), + mLength(10), + mInverted(false) +{ +} + +/*! + Creates a QCPLineEnding instance with the specified values. +*/ +QCPLineEnding::QCPLineEnding(QCPLineEnding::EndingStyle style, double width, double length, bool inverted) : + mStyle(style), + mWidth(width), + mLength(length), + mInverted(inverted) +{ +} + +/*! + Sets the style of the ending decoration. +*/ +void QCPLineEnding::setStyle(QCPLineEnding::EndingStyle style) +{ + mStyle = style; +} + +/*! + Sets the width of the ending decoration, if the style supports it. On arrows, for example, the + width defines the size perpendicular to the arrow's pointing direction. + + \see setLength +*/ +void QCPLineEnding::setWidth(double width) +{ + mWidth = width; +} + +/*! + Sets the length of the ending decoration, if the style supports it. On arrows, for example, the + length defines the size in pointing direction. + + \see setWidth +*/ +void QCPLineEnding::setLength(double length) +{ + mLength = length; +} + +/*! + Sets whether the ending decoration shall be inverted. For example, an arrow decoration will point + inward when \a inverted is set to true. + + Note that also the \a width direction is inverted. For symmetrical ending styles like arrows or + discs, this doesn't make a difference. However, asymmetric styles like \ref esHalfBar are + affected by it, which can be used to control to which side the half bar points to. +*/ +void QCPLineEnding::setInverted(bool inverted) +{ + mInverted = inverted; +} + +/*! \internal + + Returns the maximum pixel radius the ending decoration might cover, starting from the position + the decoration is drawn at (typically a line ending/\ref QCPItemPosition of an item). + + This is relevant for clipping. Only omit painting of the decoration when the position where the + decoration is supposed to be drawn is farther away from the clipping rect than the returned + distance. +*/ +double QCPLineEnding::boundingDistance() const +{ + switch (mStyle) + { + case esNone: + return 0; + + case esFlatArrow: + case esSpikeArrow: + case esLineArrow: + case esSkewedBar: + return qSqrt(mWidth*mWidth+mLength*mLength); // items that have width and length + + case esDisc: + case esSquare: + case esDiamond: + case esBar: + case esHalfBar: + return mWidth*1.42; // items that only have a width -> width*sqrt(2) + + } + return 0; +} + +/*! + Starting from the origin of this line ending (which is style specific), returns the length + covered by the line ending symbol, in backward direction. + + For example, the \ref esSpikeArrow has a shorter real length than a \ref esFlatArrow, even if + both have the same \ref setLength value, because the spike arrow has an inward curved back, which + reduces the length along its center axis (the drawing origin for arrows is at the tip). + + This function is used for precise, style specific placement of line endings, for example in + QCPAxes. +*/ +double QCPLineEnding::realLength() const +{ + switch (mStyle) + { + case esNone: + case esLineArrow: + case esSkewedBar: + case esBar: + case esHalfBar: + return 0; + + case esFlatArrow: + return mLength; + + case esDisc: + case esSquare: + case esDiamond: + return mWidth*0.5; + + case esSpikeArrow: + return mLength*0.8; + } + return 0; +} + +/*! \internal + + Draws the line ending with the specified \a painter at the position \a pos. The direction of the + line ending is controlled with \a dir. +*/ +void QCPLineEnding::draw(QCPPainter *painter, const QVector2D &pos, const QVector2D &dir) const +{ + if (mStyle == esNone) + return; + + QVector2D lengthVec(dir.normalized()); + if (lengthVec.isNull()) + lengthVec = QVector2D(1, 0); + QVector2D widthVec(-lengthVec.y(), lengthVec.x()); + lengthVec *= (float)(mLength*(mInverted ? -1 : 1)); + widthVec *= (float)(mWidth*0.5*(mInverted ? -1 : 1)); + + QPen penBackup = painter->pen(); + QBrush brushBackup = painter->brush(); + QPen miterPen = penBackup; + miterPen.setJoinStyle(Qt::MiterJoin); // to make arrow heads spikey + QBrush brush(painter->pen().color(), Qt::SolidPattern); + switch (mStyle) + { + case esNone: break; + case esFlatArrow: + { + QPointF points[3] = {pos.toPointF(), + (pos-lengthVec+widthVec).toPointF(), + (pos-lengthVec-widthVec).toPointF() + }; + painter->setPen(miterPen); + painter->setBrush(brush); + painter->drawConvexPolygon(points, 3); + painter->setBrush(brushBackup); + painter->setPen(penBackup); + break; + } + case esSpikeArrow: + { + QPointF points[4] = {pos.toPointF(), + (pos-lengthVec+widthVec).toPointF(), + (pos-lengthVec*0.8f).toPointF(), + (pos-lengthVec-widthVec).toPointF() + }; + painter->setPen(miterPen); + painter->setBrush(brush); + painter->drawConvexPolygon(points, 4); + painter->setBrush(brushBackup); + painter->setPen(penBackup); + break; + } + case esLineArrow: + { + QPointF points[3] = {(pos-lengthVec+widthVec).toPointF(), + pos.toPointF(), + (pos-lengthVec-widthVec).toPointF() + }; + painter->setPen(miterPen); + painter->drawPolyline(points, 3); + painter->setPen(penBackup); + break; + } + case esDisc: + { + painter->setBrush(brush); + painter->drawEllipse(pos.toPointF(), mWidth*0.5, mWidth*0.5); + painter->setBrush(brushBackup); + break; + } + case esSquare: + { + QVector2D widthVecPerp(-widthVec.y(), widthVec.x()); + QPointF points[4] = {(pos-widthVecPerp+widthVec).toPointF(), + (pos-widthVecPerp-widthVec).toPointF(), + (pos+widthVecPerp-widthVec).toPointF(), + (pos+widthVecPerp+widthVec).toPointF() + }; + painter->setPen(miterPen); + painter->setBrush(brush); + painter->drawConvexPolygon(points, 4); + painter->setBrush(brushBackup); + painter->setPen(penBackup); + break; + } + case esDiamond: + { + QVector2D widthVecPerp(-widthVec.y(), widthVec.x()); + QPointF points[4] = {(pos-widthVecPerp).toPointF(), + (pos-widthVec).toPointF(), + (pos+widthVecPerp).toPointF(), + (pos+widthVec).toPointF() + }; + painter->setPen(miterPen); + painter->setBrush(brush); + painter->drawConvexPolygon(points, 4); + painter->setBrush(brushBackup); + painter->setPen(penBackup); + break; + } + case esBar: + { + painter->drawLine((pos+widthVec).toPointF(), (pos-widthVec).toPointF()); + break; + } + case esHalfBar: + { + painter->drawLine((pos+widthVec).toPointF(), pos.toPointF()); + break; + } + case esSkewedBar: + { + if (qFuzzyIsNull(painter->pen().widthF()) && !painter->modes().testFlag(QCPPainter::pmNonCosmetic)) + { + // if drawing with cosmetic pen (perfectly thin stroke, happens only in vector exports), draw bar exactly on tip of line + painter->drawLine((pos+widthVec+lengthVec*0.2f*(mInverted?-1:1)).toPointF(), + (pos-widthVec-lengthVec*0.2f*(mInverted?-1:1)).toPointF()); + } else + { + // if drawing with thick (non-cosmetic) pen, shift bar a little in line direction to prevent line from sticking through bar slightly + painter->drawLine((pos+widthVec+lengthVec*0.2f*(mInverted?-1:1)+dir.normalized()*qMax(1.0f, (float)painter->pen().widthF())*0.5f).toPointF(), + (pos-widthVec-lengthVec*0.2f*(mInverted?-1:1)+dir.normalized()*qMax(1.0f, (float)painter->pen().widthF())*0.5f).toPointF()); + } + break; + } + } +} + +/*! \internal + \overload + + Draws the line ending. The direction is controlled with the \a angle parameter in radians. +*/ +void QCPLineEnding::draw(QCPPainter *painter, const QVector2D &pos, double angle) const +{ + draw(painter, pos, QVector2D(qCos(angle), qSin(angle))); +} + + +//////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////// QCPGrid +//////////////////////////////////////////////////////////////////////////////////////////////////// + +/*! \class QCPGrid + \brief Responsible for drawing the grid of a QCPAxis. + + This class is tightly bound to QCPAxis. Every axis owns a grid instance and uses it to draw the + grid lines, sub grid lines and zero-line. You can interact with the grid of an axis via \ref + QCPAxis::grid. Normally, you don't need to create an instance of QCPGrid yourself. + + The axis and grid drawing was split into two classes to allow them to be placed on different + layers (both QCPAxis and QCPGrid inherit from QCPLayerable). Thus it is possible to have the grid + in the background and the axes in the foreground, and any plottables/items in between. This + described situation is the default setup, see the QCPLayer documentation. +*/ + +/*! + Creates a QCPGrid instance and sets default values. + + You shouldn't instantiate grids on their own, since every QCPAxis brings its own QCPGrid. +*/ +QCPGrid::QCPGrid(QCPAxis *parentAxis) : + QCPLayerable(parentAxis->parentPlot(), QString(), parentAxis), + mParentAxis(parentAxis) +{ + // warning: this is called in QCPAxis constructor, so parentAxis members should not be accessed/called + setParent(parentAxis); + setPen(QPen(QColor(200,200,200), 0, Qt::DotLine)); + setSubGridPen(QPen(QColor(220,220,220), 0, Qt::DotLine)); + setZeroLinePen(QPen(QColor(200,200,200), 0, Qt::SolidLine)); + setSubGridVisible(false); + setAntialiased(false); + setAntialiasedSubGrid(false); + setAntialiasedZeroLine(false); +} + +/*! + Sets whether grid lines at sub tick marks are drawn. + + \see setSubGridPen +*/ +void QCPGrid::setSubGridVisible(bool visible) +{ + mSubGridVisible = visible; +} + +/*! + Sets whether sub grid lines are drawn antialiased. +*/ +void QCPGrid::setAntialiasedSubGrid(bool enabled) +{ + mAntialiasedSubGrid = enabled; +} + +/*! + Sets whether zero lines are drawn antialiased. +*/ +void QCPGrid::setAntialiasedZeroLine(bool enabled) +{ + mAntialiasedZeroLine = enabled; +} + +/*! + Sets the pen with which (major) grid lines are drawn. +*/ +void QCPGrid::setPen(const QPen &pen) +{ + mPen = pen; +} + +/*! + Sets the pen with which sub grid lines are drawn. +*/ +void QCPGrid::setSubGridPen(const QPen &pen) +{ + mSubGridPen = pen; +} + +/*! + Sets the pen with which zero lines are drawn. + + Zero lines are lines at value coordinate 0 which may be drawn with a different pen than other grid + lines. To disable zero lines and just draw normal grid lines at zero, set \a pen to Qt::NoPen. +*/ +void QCPGrid::setZeroLinePen(const QPen &pen) +{ + mZeroLinePen = pen; +} + +/*! \internal + + A convenience function to easily set the QPainter::Antialiased hint on the provided \a painter + before drawing the major grid lines. + + This is the antialiasing state the painter passed to the \ref draw method is in by default. + + This function takes into account the local setting of the antialiasing flag as well as the + overrides set with \ref QCustomPlot::setAntialiasedElements and \ref + QCustomPlot::setNotAntialiasedElements. + + \see setAntialiased +*/ +void QCPGrid::applyDefaultAntialiasingHint(QCPPainter *painter) const +{ + applyAntialiasingHint(painter, mAntialiased, QCP::aeGrid); +} + +/*! \internal + + Draws grid lines and sub grid lines at the positions of (sub) ticks of the parent axis, spanning + over the complete axis rect. Also draws the zero line, if appropriate (\ref setZeroLinePen). +*/ +void QCPGrid::draw(QCPPainter *painter) +{ + if (!mParentAxis) { qDebug() << Q_FUNC_INFO << "invalid parent axis"; return; } + + if (mSubGridVisible) + drawSubGridLines(painter); + drawGridLines(painter); +} + +/*! \internal + + Draws the main grid lines and possibly a zero line with the specified painter. + + This is a helper function called by \ref draw. +*/ +void QCPGrid::drawGridLines(QCPPainter *painter) const +{ + if (!mParentAxis) { qDebug() << Q_FUNC_INFO << "invalid parent axis"; return; } + + int lowTick = mParentAxis->mLowestVisibleTick; + int highTick = mParentAxis->mHighestVisibleTick; + double t; // helper variable, result of coordinate-to-pixel transforms + if (mParentAxis->orientation() == Qt::Horizontal) + { + // draw zeroline: + int zeroLineIndex = -1; + if (mZeroLinePen.style() != Qt::NoPen && mParentAxis->mRange.lower < 0 && mParentAxis->mRange.upper > 0) + { + applyAntialiasingHint(painter, mAntialiasedZeroLine, QCP::aeZeroLine); + painter->setPen(mZeroLinePen); + double epsilon = mParentAxis->range().size()*1E-6; // for comparing double to zero + for (int i=lowTick; i <= highTick; ++i) + { + if (qAbs(mParentAxis->mTickVector.at(i)) < epsilon) + { + zeroLineIndex = i; + t = mParentAxis->coordToPixel(mParentAxis->mTickVector.at(i)); // x + painter->drawLine(QLineF(t, mParentAxis->mAxisRect->bottom(), t, mParentAxis->mAxisRect->top())); + break; + } + } + } + // draw grid lines: + applyDefaultAntialiasingHint(painter); + painter->setPen(mPen); + for (int i=lowTick; i <= highTick; ++i) + { + if (i == zeroLineIndex) continue; // don't draw a gridline on top of the zeroline + t = mParentAxis->coordToPixel(mParentAxis->mTickVector.at(i)); // x + painter->drawLine(QLineF(t, mParentAxis->mAxisRect->bottom(), t, mParentAxis->mAxisRect->top())); + } + } else + { + // draw zeroline: + int zeroLineIndex = -1; + if (mZeroLinePen.style() != Qt::NoPen && mParentAxis->mRange.lower < 0 && mParentAxis->mRange.upper > 0) + { + applyAntialiasingHint(painter, mAntialiasedZeroLine, QCP::aeZeroLine); + painter->setPen(mZeroLinePen); + double epsilon = mParentAxis->mRange.size()*1E-6; // for comparing double to zero + for (int i=lowTick; i <= highTick; ++i) + { + if (qAbs(mParentAxis->mTickVector.at(i)) < epsilon) + { + zeroLineIndex = i; + t = mParentAxis->coordToPixel(mParentAxis->mTickVector.at(i)); // y + painter->drawLine(QLineF(mParentAxis->mAxisRect->left(), t, mParentAxis->mAxisRect->right(), t)); + break; + } + } + } + // draw grid lines: + applyDefaultAntialiasingHint(painter); + painter->setPen(mPen); + for (int i=lowTick; i <= highTick; ++i) + { + if (i == zeroLineIndex) continue; // don't draw a gridline on top of the zeroline + t = mParentAxis->coordToPixel(mParentAxis->mTickVector.at(i)); // y + painter->drawLine(QLineF(mParentAxis->mAxisRect->left(), t, mParentAxis->mAxisRect->right(), t)); + } + } +} + +/*! \internal + + Draws the sub grid lines with the specified painter. + + This is a helper function called by \ref draw. +*/ +void QCPGrid::drawSubGridLines(QCPPainter *painter) const +{ + if (!mParentAxis) { qDebug() << Q_FUNC_INFO << "invalid parent axis"; return; } + + applyAntialiasingHint(painter, mAntialiasedSubGrid, QCP::aeSubGrid); + double t; // helper variable, result of coordinate-to-pixel transforms + painter->setPen(mSubGridPen); + if (mParentAxis->orientation() == Qt::Horizontal) + { + for (int i=0; imSubTickVector.size(); ++i) + { + t = mParentAxis->coordToPixel(mParentAxis->mSubTickVector.at(i)); // x + painter->drawLine(QLineF(t, mParentAxis->mAxisRect->bottom(), t, mParentAxis->mAxisRect->top())); + } + } else + { + for (int i=0; imSubTickVector.size(); ++i) + { + t = mParentAxis->coordToPixel(mParentAxis->mSubTickVector.at(i)); // y + painter->drawLine(QLineF(mParentAxis->mAxisRect->left(), t, mParentAxis->mAxisRect->right(), t)); + } + } +} + + +//////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////// QCPAxis +//////////////////////////////////////////////////////////////////////////////////////////////////// + +/*! \class QCPAxis + \brief Manages a single axis inside a QCustomPlot. + + Usually doesn't need to be instantiated externally. Access %QCustomPlot's default four axes via + QCustomPlot::xAxis (bottom), QCustomPlot::yAxis (left), QCustomPlot::xAxis2 (top) and + QCustomPlot::yAxis2 (right). + + Axes are always part of an axis rect, see QCPAxisRect. + \image html AxisNamesOverview.png +
    Naming convention of axis parts
    + \n + + \image html AxisRectSpacingOverview.png +
    Overview of the spacings and paddings that define the geometry of an axis. The dashed gray line + on the left represents the QCustomPlot widget border.
    + +*/ + +/* start of documentation of inline functions */ + +/*! \fn Qt::Orientation QCPAxis::orientation() const + + Returns the orientation of this axis. The axis orientation (horizontal or vertical) is deduced + from the axis type (left, top, right or bottom). + + \see orientation(AxisType type) +*/ + +/*! \fn QCPGrid *QCPAxis::grid() const + + Returns the \ref QCPGrid instance belonging to this axis. Access it to set details about the way the + grid is displayed. +*/ + +/*! \fn static Qt::Orientation QCPAxis::orientation(AxisType type) + + Returns the orientation of the specified axis type + + \see orientation() +*/ + +/* end of documentation of inline functions */ +/* start of documentation of signals */ + +/*! \fn void QCPAxis::ticksRequest() + + This signal is emitted when \ref setAutoTicks is false and the axis is about to generate tick + labels for a replot. + + Modifying the tick positions can be done with \ref setTickVector. If you also want to control the + tick labels, set \ref setAutoTickLabels to false and also provide the labels with \ref + setTickVectorLabels. + + If you only want static ticks you probably don't need this signal, since you can just set the + tick vector (and possibly tick label vector) once. However, if you want to provide ticks (and + maybe labels) dynamically, e.g. depending on the current axis range, connect a slot to this + signal and set the vector/vectors there. +*/ + +/*! \fn void QCPAxis::rangeChanged(const QCPRange &newRange) + + This signal is emitted when the range of this axis has changed. You can connect it to the \ref + setRange slot of another axis to communicate the new range to the other axis, in order for it to + be synchronized. + + You may also manipulate/correct the range with \ref setRange in a slot connected to this signal. + This is useful if for example a maximum range span shall not be exceeded, or if the lower/upper + range shouldn't go beyond certain values. For example, the following slot would limit the x axis + to only positive ranges: + \code + if (newRange.lower < 0) + plot->xAxis->setRange(0, newRange.size()); + \endcode +*/ + +/*! \fn void QCPAxis::rangeChanged(const QCPRange &newRange, const QCPRange &oldRange) + \overload + + Additionally to the new range, this signal also provides the previous range held by the axis as + \a oldRange. +*/ + +/*! \fn void QCPAxis::scaleTypeChanged(QCPAxis::ScaleType scaleType); + + This signal is emitted when the scale type changes, by calls to \ref setScaleType +*/ + +/*! \fn void QCPAxis::selectionChanged(QCPAxis::SelectableParts selection) + + This signal is emitted when the selection state of this axis has changed, either by user interaction + or by a direct call to \ref setSelectedParts. +*/ + +/*! \fn void QCPAxis::selectableChanged(const QCPAxis::SelectableParts &parts); + + This signal is emitted when the selectability changes, by calls to \ref setSelectableParts +*/ + +/* end of documentation of signals */ + +/*! + Constructs an Axis instance of Type \a type for the axis rect \a parent. + + Usually it isn't necessary to instantiate axes directly, because you can let QCustomPlot create + them for you with \ref QCPAxisRect::addAxis. If you want to use own QCPAxis-subclasses however, + create them manually and then inject them also via \ref QCPAxisRect::addAxis. +*/ +QCPAxis::QCPAxis(QCPAxisRect *parent, AxisType type) : + QCPLayerable(parent->parentPlot(), QString(), parent), + // axis base: + mAxisType(type), + mAxisRect(parent), + mPadding(5), + mOrientation(orientation(type)), + mSelectableParts(spAxis | spTickLabels | spAxisLabel), + mSelectedParts(spNone), + mBasePen(QPen(Qt::black, 0, Qt::SolidLine, Qt::SquareCap)), + mSelectedBasePen(QPen(Qt::blue, 2)), + // axis label: + mLabel(), + mLabelFont(mParentPlot->font()), + mSelectedLabelFont(QFont(mLabelFont.family(), mLabelFont.pointSize(), QFont::Bold)), + mLabelColor(Qt::black), + mSelectedLabelColor(Qt::blue), + // tick labels: + mTickLabels(true), + mAutoTickLabels(true), + mTickLabelType(ltNumber), + mTickLabelFont(mParentPlot->font()), + mSelectedTickLabelFont(QFont(mTickLabelFont.family(), mTickLabelFont.pointSize(), QFont::Bold)), + mTickLabelColor(Qt::black), + mSelectedTickLabelColor(Qt::blue), + mDateTimeFormat(QLatin1String("hh:mm:ss\ndd.MM.yy")), + mDateTimeSpec(Qt::LocalTime), + mNumberPrecision(6), + mNumberFormatChar('g'), + mNumberBeautifulPowers(true), + // ticks and subticks: + mTicks(true), + mTickStep(1), + mSubTickCount(4), + mAutoTickCount(6), + mAutoTicks(true), + mAutoTickStep(true), + mAutoSubTicks(true), + mTickPen(QPen(Qt::black, 0, Qt::SolidLine, Qt::SquareCap)), + mSelectedTickPen(QPen(Qt::blue, 2)), + mSubTickPen(QPen(Qt::black, 0, Qt::SolidLine, Qt::SquareCap)), + mSelectedSubTickPen(QPen(Qt::blue, 2)), + // scale and range: + mRange(0, 5), + mRangeReversed(false), + mScaleType(stLinear), + mScaleLogBase(10), + mScaleLogBaseLogInv(1.0/qLn(mScaleLogBase)), + // internal members: + mGrid(new QCPGrid(this)), + mAxisPainter(new QCPAxisPainterPrivate(parent->parentPlot())), + mLowestVisibleTick(0), + mHighestVisibleTick(-1), + mCachedMarginValid(false), + mCachedMargin(0) +{ + setParent(parent); + mGrid->setVisible(false); + setAntialiased(false); + setLayer(mParentPlot->currentLayer()); // it's actually on that layer already, but we want it in front of the grid, so we place it on there again + + if (type == atTop) + { + setTickLabelPadding(3); + setLabelPadding(6); + } else if (type == atRight) + { + setTickLabelPadding(7); + setLabelPadding(12); + } else if (type == atBottom) + { + setTickLabelPadding(3); + setLabelPadding(3); + } else if (type == atLeft) + { + setTickLabelPadding(5); + setLabelPadding(10); + } +} + +QCPAxis::~QCPAxis() +{ + delete mAxisPainter; + delete mGrid; // delete grid here instead of via parent ~QObject for better defined deletion order +} + +/* No documentation as it is a property getter */ +int QCPAxis::tickLabelPadding() const +{ + return mAxisPainter->tickLabelPadding; +} + +/* No documentation as it is a property getter */ +double QCPAxis::tickLabelRotation() const +{ + return mAxisPainter->tickLabelRotation; +} + +/* No documentation as it is a property getter */ +QCPAxis::LabelSide QCPAxis::tickLabelSide() const +{ + return mAxisPainter->tickLabelSide; +} + +/* No documentation as it is a property getter */ +QString QCPAxis::numberFormat() const +{ + QString result; + result.append(mNumberFormatChar); + if (mNumberBeautifulPowers) + { + result.append(QLatin1Char('b')); + if (mAxisPainter->numberMultiplyCross) + result.append(QLatin1Char('c')); + } + return result; +} + +/* No documentation as it is a property getter */ +int QCPAxis::tickLengthIn() const +{ + return mAxisPainter->tickLengthIn; +} + +/* No documentation as it is a property getter */ +int QCPAxis::tickLengthOut() const +{ + return mAxisPainter->tickLengthOut; +} + +/* No documentation as it is a property getter */ +int QCPAxis::subTickLengthIn() const +{ + return mAxisPainter->subTickLengthIn; +} + +/* No documentation as it is a property getter */ +int QCPAxis::subTickLengthOut() const +{ + return mAxisPainter->subTickLengthOut; +} + +/* No documentation as it is a property getter */ +int QCPAxis::labelPadding() const +{ + return mAxisPainter->labelPadding; +} + +/* No documentation as it is a property getter */ +int QCPAxis::offset() const +{ + return mAxisPainter->offset; +} + +/* No documentation as it is a property getter */ +QCPLineEnding QCPAxis::lowerEnding() const +{ + return mAxisPainter->lowerEnding; +} + +/* No documentation as it is a property getter */ +QCPLineEnding QCPAxis::upperEnding() const +{ + return mAxisPainter->upperEnding; +} + +/*! + Sets whether the axis uses a linear scale or a logarithmic scale. If \a type is set to \ref + stLogarithmic, the logarithm base can be set with \ref setScaleLogBase. In logarithmic axis + scaling, major tick marks appear at all powers of the logarithm base. Properties like tick step + (\ref setTickStep) don't apply in logarithmic scaling. If you wish a decimal base but less major + ticks, consider choosing a logarithm base of 100, 1000 or even higher. + + If \a type is \ref stLogarithmic and the number format (\ref setNumberFormat) uses the 'b' option + (beautifully typeset decimal powers), the display usually is "1 [multiplication sign] 10 + [superscript] n", which looks unnatural for logarithmic scaling (the "1 [multiplication sign]" + part). To only display the decimal power, set the number precision to zero with + \ref setNumberPrecision. +*/ +void QCPAxis::setScaleType(QCPAxis::ScaleType type) +{ + if (mScaleType != type) + { + mScaleType = type; + if (mScaleType == stLogarithmic) + setRange(mRange.sanitizedForLogScale()); + mCachedMarginValid = false; + emit scaleTypeChanged(mScaleType); + } +} + +/*! + If \ref setScaleType is set to \ref stLogarithmic, \a base will be the logarithm base of the + scaling. In logarithmic axis scaling, major tick marks appear at all powers of \a base. + + Properties like tick step (\ref setTickStep) don't apply in logarithmic scaling. If you wish a decimal base but + less major ticks, consider choosing \a base 100, 1000 or even higher. +*/ +void QCPAxis::setScaleLogBase(double base) +{ + if (base > 1) + { + mScaleLogBase = base; + mScaleLogBaseLogInv = 1.0/qLn(mScaleLogBase); // buffer for faster baseLog() calculation + mCachedMarginValid = false; + } else + qDebug() << Q_FUNC_INFO << "Invalid logarithmic scale base (must be greater 1):" << base; +} + +/*! + Sets the range of the axis. + + This slot may be connected with the \ref rangeChanged signal of another axis so this axis + is always synchronized with the other axis range, when it changes. + + To invert the direction of an axis, use \ref setRangeReversed. +*/ +void QCPAxis::setRange(const QCPRange &range) +{ + if (range.lower == mRange.lower && range.upper == mRange.upper) + return; + + if (!QCPRange::validRange(range)) return; + QCPRange oldRange = mRange; + if (mScaleType == stLogarithmic) + { + mRange = range.sanitizedForLogScale(); + } else + { + mRange = range.sanitizedForLinScale(); + } + mCachedMarginValid = false; + emit rangeChanged(mRange); + emit rangeChanged(mRange, oldRange); +} + +/*! + Sets whether the user can (de-)select the parts in \a selectable by clicking on the QCustomPlot surface. + (When \ref QCustomPlot::setInteractions contains iSelectAxes.) + + However, even when \a selectable is set to a value not allowing the selection of a specific part, + it is still possible to set the selection of this part manually, by calling \ref setSelectedParts + directly. + + \see SelectablePart, setSelectedParts +*/ +void QCPAxis::setSelectableParts(const SelectableParts &selectable) +{ + if (mSelectableParts != selectable) + { + mSelectableParts = selectable; + emit selectableChanged(mSelectableParts); + } +} + +/*! + Sets the selected state of the respective axis parts described by \ref SelectablePart. When a part + is selected, it uses a different pen/font. + + The entire selection mechanism for axes is handled automatically when \ref + QCustomPlot::setInteractions contains iSelectAxes. You only need to call this function when you + wish to change the selection state manually. + + This function can change the selection state of a part, independent of the \ref setSelectableParts setting. + + emits the \ref selectionChanged signal when \a selected is different from the previous selection state. + + \see SelectablePart, setSelectableParts, selectTest, setSelectedBasePen, setSelectedTickPen, setSelectedSubTickPen, + setSelectedTickLabelFont, setSelectedLabelFont, setSelectedTickLabelColor, setSelectedLabelColor +*/ +void QCPAxis::setSelectedParts(const SelectableParts &selected) +{ + if (mSelectedParts != selected) + { + mSelectedParts = selected; + emit selectionChanged(mSelectedParts); + } +} + +/*! + \overload + + Sets the lower and upper bound of the axis range. + + To invert the direction of an axis, use \ref setRangeReversed. + + There is also a slot to set a range, see \ref setRange(const QCPRange &range). +*/ +void QCPAxis::setRange(double lower, double upper) +{ + if (lower == mRange.lower && upper == mRange.upper) + return; + + if (!QCPRange::validRange(lower, upper)) return; + QCPRange oldRange = mRange; + mRange.lower = lower; + mRange.upper = upper; + if (mScaleType == stLogarithmic) + { + mRange = mRange.sanitizedForLogScale(); + } else + { + mRange = mRange.sanitizedForLinScale(); + } + mCachedMarginValid = false; + emit rangeChanged(mRange); + emit rangeChanged(mRange, oldRange); +} + +/*! + \overload + + Sets the range of the axis. + + The \a position coordinate indicates together with the \a alignment parameter, where the new + range will be positioned. \a size defines the size of the new axis range. \a alignment may be + Qt::AlignLeft, Qt::AlignRight or Qt::AlignCenter. This will cause the left border, right border, + or center of the range to be aligned with \a position. Any other values of \a alignment will + default to Qt::AlignCenter. +*/ +void QCPAxis::setRange(double position, double size, Qt::AlignmentFlag alignment) +{ + if (alignment == Qt::AlignLeft) + setRange(position, position+size); + else if (alignment == Qt::AlignRight) + setRange(position-size, position); + else // alignment == Qt::AlignCenter + setRange(position-size/2.0, position+size/2.0); +} + +/*! + Sets the lower bound of the axis range. The upper bound is not changed. + \see setRange +*/ +void QCPAxis::setRangeLower(double lower) +{ + if (mRange.lower == lower) + return; + + QCPRange oldRange = mRange; + mRange.lower = lower; + if (mScaleType == stLogarithmic) + { + mRange = mRange.sanitizedForLogScale(); + } else + { + mRange = mRange.sanitizedForLinScale(); + } + mCachedMarginValid = false; + emit rangeChanged(mRange); + emit rangeChanged(mRange, oldRange); +} + +/*! + Sets the upper bound of the axis range. The lower bound is not changed. + \see setRange +*/ +void QCPAxis::setRangeUpper(double upper) +{ + if (mRange.upper == upper) + return; + + QCPRange oldRange = mRange; + mRange.upper = upper; + if (mScaleType == stLogarithmic) + { + mRange = mRange.sanitizedForLogScale(); + } else + { + mRange = mRange.sanitizedForLinScale(); + } + mCachedMarginValid = false; + emit rangeChanged(mRange); + emit rangeChanged(mRange, oldRange); +} + +/*! + Sets whether the axis range (direction) is displayed reversed. Normally, the values on horizontal + axes increase left to right, on vertical axes bottom to top. When \a reversed is set to true, the + direction of increasing values is inverted. + + Note that the range and data interface stays the same for reversed axes, e.g. the \a lower part + of the \ref setRange interface will still reference the mathematically smaller number than the \a + upper part. +*/ +void QCPAxis::setRangeReversed(bool reversed) +{ + if (mRangeReversed != reversed) + { + mRangeReversed = reversed; + mCachedMarginValid = false; + } +} + +/*! + Sets whether the tick positions should be calculated automatically (either from an automatically + generated tick step or a tick step provided manually via \ref setTickStep, see \ref setAutoTickStep). + + If \a on is set to false, you must provide the tick positions manually via \ref setTickVector. + For these manual ticks you may let QCPAxis generate the appropriate labels automatically by + leaving \ref setAutoTickLabels set to true. If you also wish to control the displayed labels + manually, set \ref setAutoTickLabels to false and provide the label strings with \ref + setTickVectorLabels. + + If you need dynamically calculated tick vectors (and possibly tick label vectors), set the + vectors in a slot connected to the \ref ticksRequest signal. + + \see setAutoTickLabels, setAutoSubTicks, setAutoTickCount, setAutoTickStep +*/ +void QCPAxis::setAutoTicks(bool on) +{ + if (mAutoTicks != on) + { + mAutoTicks = on; + mCachedMarginValid = false; + } +} + +/*! + When \ref setAutoTickStep is true, \a approximateCount determines how many ticks should be + generated in the visible range, approximately. + + It's not guaranteed that this number of ticks is met exactly, but approximately within a + tolerance of about two. + + Only values greater than zero are accepted as \a approximateCount. + + \see setAutoTickStep, setAutoTicks, setAutoSubTicks +*/ +void QCPAxis::setAutoTickCount(int approximateCount) +{ + if (mAutoTickCount != approximateCount) + { + if (approximateCount > 0) + { + mAutoTickCount = approximateCount; + mCachedMarginValid = false; + } else + qDebug() << Q_FUNC_INFO << "approximateCount must be greater than zero:" << approximateCount; + } +} + +/*! + Sets whether the tick labels are generated automatically. Depending on the tick label type (\ref + ltNumber or \ref ltDateTime), the labels will either show the coordinate as floating point + number (\ref setNumberFormat), or a date/time formatted according to \ref setDateTimeFormat. + + If \a on is set to false, you should provide the tick labels via \ref setTickVectorLabels. This + is usually used in a combination with \ref setAutoTicks set to false for complete control over + tick positions and labels, e.g. when the ticks should be at multiples of pi and show "2pi", "3pi" + etc. as tick labels. + + If you need dynamically calculated tick vectors (and possibly tick label vectors), set the + vectors in a slot connected to the \ref ticksRequest signal. + + \see setAutoTicks +*/ +void QCPAxis::setAutoTickLabels(bool on) +{ + if (mAutoTickLabels != on) + { + mAutoTickLabels = on; + mCachedMarginValid = false; + } +} + +/*! + Sets whether the tick step, i.e. the interval between two (major) ticks, is calculated + automatically. If \a on is set to true, the axis finds a tick step that is reasonable for human + readable plots. + + The number of ticks the algorithm aims for within the visible range can be specified with \ref + setAutoTickCount. + + If \a on is set to false, you may set the tick step manually with \ref setTickStep. + + \see setAutoTicks, setAutoSubTicks, setAutoTickCount +*/ +void QCPAxis::setAutoTickStep(bool on) +{ + if (mAutoTickStep != on) + { + mAutoTickStep = on; + mCachedMarginValid = false; + } +} + +/*! + Sets whether the number of sub ticks in one tick interval is determined automatically. This + works, as long as the tick step mantissa is a multiple of 0.5. When \ref setAutoTickStep is + enabled, this is always the case. + + When \a on is set to false, you may set the sub tick count with \ref setSubTickCount manually. + + \see setAutoTickCount, setAutoTicks, setAutoTickStep +*/ +void QCPAxis::setAutoSubTicks(bool on) +{ + if (mAutoSubTicks != on) + { + mAutoSubTicks = on; + mCachedMarginValid = false; + } +} + +/*! + Sets whether tick marks are displayed. + + Note that setting \a show to false does not imply that tick labels are invisible, too. To achieve + that, see \ref setTickLabels. +*/ +void QCPAxis::setTicks(bool show) +{ + if (mTicks != show) + { + mTicks = show; + mCachedMarginValid = false; + } +} + +/*! + Sets whether tick labels are displayed. Tick labels are the numbers drawn next to tick marks. +*/ +void QCPAxis::setTickLabels(bool show) +{ + if (mTickLabels != show) + { + mTickLabels = show; + mCachedMarginValid = false; + } +} + +/*! + Sets the distance between the axis base line (including any outward ticks) and the tick labels. + \see setLabelPadding, setPadding +*/ +void QCPAxis::setTickLabelPadding(int padding) +{ + if (mAxisPainter->tickLabelPadding != padding) + { + mAxisPainter->tickLabelPadding = padding; + mCachedMarginValid = false; + } +} + +/*! + Sets whether the tick labels display numbers or dates/times. + + If \a type is set to \ref ltNumber, the format specifications of \ref setNumberFormat apply. + + If \a type is set to \ref ltDateTime, the format specifications of \ref setDateTimeFormat apply. + + In QCustomPlot, date/time coordinates are double numbers representing the seconds since + 1970-01-01T00:00:00 UTC. This format can be retrieved from QDateTime objects with the + QDateTime::toTime_t() function. Since this only gives a resolution of one second, there is also + the QDateTime::toMSecsSinceEpoch() function which returns the timespan described above in + milliseconds. Divide its return value by 1000.0 to get a value with the format needed for + date/time plotting, with a resolution of one millisecond. + + Using the toMSecsSinceEpoch function allows dates that go back to 2nd January 4713 B.C. + (represented by a negative number), unlike the toTime_t function, which works with unsigned + integers and thus only goes back to 1st January 1970. So both for range and accuracy, use of + toMSecsSinceEpoch()/1000.0 should be preferred as key coordinate for date/time axes. + + \see setTickLabels +*/ +void QCPAxis::setTickLabelType(LabelType type) +{ + if (mTickLabelType != type) + { + mTickLabelType = type; + mCachedMarginValid = false; + } +} + +/*! + Sets the font of the tick labels. + + \see setTickLabels, setTickLabelColor +*/ +void QCPAxis::setTickLabelFont(const QFont &font) +{ + if (font != mTickLabelFont) + { + mTickLabelFont = font; + mCachedMarginValid = false; + } +} + +/*! + Sets the color of the tick labels. + + \see setTickLabels, setTickLabelFont +*/ +void QCPAxis::setTickLabelColor(const QColor &color) +{ + if (color != mTickLabelColor) + { + mTickLabelColor = color; + mCachedMarginValid = false; + } +} + +/*! + Sets the rotation of the tick labels. If \a degrees is zero, the labels are drawn normally. Else, + the tick labels are drawn rotated by \a degrees clockwise. The specified angle is bound to values + from -90 to 90 degrees. + + If \a degrees is exactly -90, 0 or 90, the tick labels are centered on the tick coordinate. For + other angles, the label is drawn with an offset such that it seems to point toward or away from + the tick mark. +*/ +void QCPAxis::setTickLabelRotation(double degrees) +{ + if (!qFuzzyIsNull(degrees-mAxisPainter->tickLabelRotation)) + { + mAxisPainter->tickLabelRotation = qBound(-90.0, degrees, 90.0); + mCachedMarginValid = false; + } +} + +/*! + Sets whether the tick labels (numbers) shall appear inside or outside the axis rect. + + The usual and default setting is \ref lsOutside. Very compact plots sometimes require tick labels + to be inside the axis rect, to save space. If \a side is set to \ref lsInside, the tick labels + appear on the inside are additionally clipped to the axis rect. +*/ +void QCPAxis::setTickLabelSide(LabelSide side) +{ + mAxisPainter->tickLabelSide = side; + mCachedMarginValid = false; +} + +/*! + Sets the format in which dates and times are displayed as tick labels, if \ref setTickLabelType is \ref ltDateTime. + for details about the \a format string, see the documentation of QDateTime::toString(). + + Newlines can be inserted with "\n". + + \see setDateTimeSpec +*/ +void QCPAxis::setDateTimeFormat(const QString &format) +{ + if (mDateTimeFormat != format) + { + mDateTimeFormat = format; + mCachedMarginValid = false; + } +} + +/*! + Sets the time spec that is used for the date time values when \ref setTickLabelType is \ref + ltDateTime. + + The default value of QDateTime objects (and also QCustomPlot) is Qt::LocalTime. However, + if the date time values passed to QCustomPlot are given in the UTC spec, set \a + timeSpec to Qt::UTC to get the correct axis labels. + + \see setDateTimeFormat +*/ +void QCPAxis::setDateTimeSpec(const Qt::TimeSpec &timeSpec) +{ + mDateTimeSpec = timeSpec; +} + +/*! + Sets the number format for the numbers drawn as tick labels (if tick label type is \ref + ltNumber). This \a formatCode is an extended version of the format code used e.g. by + QString::number() and QLocale::toString(). For reference about that, see the "Argument Formats" + section in the detailed description of the QString class. \a formatCode is a string of one, two + or three characters. The first character is identical to the normal format code used by Qt. In + short, this means: 'e'/'E' scientific format, 'f' fixed format, 'g'/'G' scientific or fixed, + whichever is shorter. + + The second and third characters are optional and specific to QCustomPlot:\n + If the first char was 'e' or 'g', numbers are/might be displayed in the scientific format, e.g. + "5.5e9", which is ugly in a plot. So when the second char of \a formatCode is set to 'b' (for + "beautiful"), those exponential numbers are formatted in a more natural way, i.e. "5.5 + [multiplication sign] 10 [superscript] 9". By default, the multiplication sign is a centered dot. + If instead a cross should be shown (as is usual in the USA), the third char of \a formatCode can + be set to 'c'. The inserted multiplication signs are the UTF-8 characters 215 (0xD7) for the + cross and 183 (0xB7) for the dot. + + If the scale type (\ref setScaleType) is \ref stLogarithmic and the \a formatCode uses the 'b' + option (beautifully typeset decimal powers), the display usually is "1 [multiplication sign] 10 + [superscript] n", which looks unnatural for logarithmic scaling (the "1 [multiplication sign]" + part). To only display the decimal power, set the number precision to zero with \ref + setNumberPrecision. + + Examples for \a formatCode: + \li \c g normal format code behaviour. If number is small, fixed format is used, if number is large, + normal scientific format is used + \li \c gb If number is small, fixed format is used, if number is large, scientific format is used with + beautifully typeset decimal powers and a dot as multiplication sign + \li \c ebc All numbers are in scientific format with beautifully typeset decimal power and a cross as + multiplication sign + \li \c fb illegal format code, since fixed format doesn't support (or need) beautifully typeset decimal + powers. Format code will be reduced to 'f'. + \li \c hello illegal format code, since first char is not 'e', 'E', 'f', 'g' or 'G'. Current format + code will not be changed. +*/ +void QCPAxis::setNumberFormat(const QString &formatCode) +{ + if (formatCode.isEmpty()) + { + qDebug() << Q_FUNC_INFO << "Passed formatCode is empty"; + return; + } + mCachedMarginValid = false; + + // interpret first char as number format char: + QString allowedFormatChars(QLatin1String("eEfgG")); + if (allowedFormatChars.contains(formatCode.at(0))) + { + mNumberFormatChar = QLatin1Char(formatCode.at(0).toLatin1()); + } else + { + qDebug() << Q_FUNC_INFO << "Invalid number format code (first char not in 'eEfgG'):" << formatCode; + return; + } + if (formatCode.length() < 2) + { + mNumberBeautifulPowers = false; + mAxisPainter->numberMultiplyCross = false; + return; + } + + // interpret second char as indicator for beautiful decimal powers: + if (formatCode.at(1) == QLatin1Char('b') && (mNumberFormatChar == QLatin1Char('e') || mNumberFormatChar == QLatin1Char('g'))) + { + mNumberBeautifulPowers = true; + } else + { + qDebug() << Q_FUNC_INFO << "Invalid number format code (second char not 'b' or first char neither 'e' nor 'g'):" << formatCode; + return; + } + if (formatCode.length() < 3) + { + mAxisPainter->numberMultiplyCross = false; + return; + } + + // interpret third char as indicator for dot or cross multiplication symbol: + if (formatCode.at(2) == QLatin1Char('c')) + { + mAxisPainter->numberMultiplyCross = true; + } else if (formatCode.at(2) == QLatin1Char('d')) + { + mAxisPainter->numberMultiplyCross = false; + } else + { + qDebug() << Q_FUNC_INFO << "Invalid number format code (third char neither 'c' nor 'd'):" << formatCode; + return; + } +} + +/*! + Sets the precision of the tick label numbers. See QLocale::toString(double i, char f, int prec) + for details. The effect of precisions are most notably for number Formats starting with 'e', see + \ref setNumberFormat + + If the scale type (\ref setScaleType) is \ref stLogarithmic and the number format (\ref + setNumberFormat) uses the 'b' format code (beautifully typeset decimal powers), the display + usually is "1 [multiplication sign] 10 [superscript] n", which looks unnatural for logarithmic + scaling (the redundant "1 [multiplication sign]" part). To only display the decimal power "10 + [superscript] n", set \a precision to zero. +*/ +void QCPAxis::setNumberPrecision(int precision) +{ + if (mNumberPrecision != precision) + { + mNumberPrecision = precision; + mCachedMarginValid = false; + } +} + +/*! + If \ref setAutoTickStep is set to false, use this function to set the tick step manually. + The tick step is the interval between (major) ticks, in plot coordinates. + \see setSubTickCount +*/ +void QCPAxis::setTickStep(double step) +{ + if (mTickStep != step) + { + mTickStep = step; + mCachedMarginValid = false; + } +} + +/*! + If you want full control over what ticks (and possibly labels) the axes show, this function is + used to set the coordinates at which ticks will appear.\ref setAutoTicks must be disabled, else + the provided tick vector will be overwritten with automatically generated tick coordinates upon + replot. The labels of the ticks can be generated automatically when \ref setAutoTickLabels is + left enabled. If it is disabled, you can set the labels manually with \ref setTickVectorLabels. + + \a vec is a vector containing the positions of the ticks, in plot coordinates. + + \warning \a vec must be sorted in ascending order, no additional checks are made to ensure this. + + \see setTickVectorLabels +*/ +void QCPAxis::setTickVector(const QVector &vec) +{ + // don't check whether mTickVector != vec here, because it takes longer than we would save + mTickVector = vec; + mCachedMarginValid = false; +} + +/*! + If you want full control over what ticks and labels the axes show, this function is used to set a + number of QStrings that will be displayed at the tick positions which you need to provide with + \ref setTickVector. These two vectors should have the same size. (Note that you need to disable + \ref setAutoTicks and \ref setAutoTickLabels first.) + + \a vec is a vector containing the labels of the ticks. The entries correspond to the respective + indices in the tick vector, passed via \ref setTickVector. + + \see setTickVector +*/ +void QCPAxis::setTickVectorLabels(const QVector &vec) +{ + // don't check whether mTickVectorLabels != vec here, because it takes longer than we would save + mTickVectorLabels = vec; + mCachedMarginValid = false; +} + +/*! + Sets the length of the ticks in pixels. \a inside is the length the ticks will reach inside the + plot and \a outside is the length they will reach outside the plot. If \a outside is greater than + zero, the tick labels and axis label will increase their distance to the axis accordingly, so + they won't collide with the ticks. + + \see setSubTickLength, setTickLengthIn, setTickLengthOut +*/ +void QCPAxis::setTickLength(int inside, int outside) +{ + setTickLengthIn(inside); + setTickLengthOut(outside); +} + +/*! + Sets the length of the inward ticks in pixels. \a inside is the length the ticks will reach + inside the plot. + + \see setTickLengthOut, setTickLength, setSubTickLength +*/ +void QCPAxis::setTickLengthIn(int inside) +{ + if (mAxisPainter->tickLengthIn != inside) + { + mAxisPainter->tickLengthIn = inside; + } +} + +/*! + Sets the length of the outward ticks in pixels. \a outside is the length the ticks will reach + outside the plot. If \a outside is greater than zero, the tick labels and axis label will + increase their distance to the axis accordingly, so they won't collide with the ticks. + + \see setTickLengthIn, setTickLength, setSubTickLength +*/ +void QCPAxis::setTickLengthOut(int outside) +{ + if (mAxisPainter->tickLengthOut != outside) + { + mAxisPainter->tickLengthOut = outside; + mCachedMarginValid = false; // only outside tick length can change margin + } +} + +/*! + Sets the number of sub ticks in one (major) tick step. A sub tick count of three for example, + divides the tick intervals in four sub intervals. + + By default, the number of sub ticks is chosen automatically in a reasonable manner as long as the + mantissa of the tick step is a multiple of 0.5. When \ref setAutoTickStep is enabled, this is + always the case. + + If you want to disable automatic sub tick count and use this function to set the count manually, + see \ref setAutoSubTicks. +*/ +void QCPAxis::setSubTickCount(int count) +{ + mSubTickCount = count; +} + +/*! + Sets the length of the subticks in pixels. \a inside is the length the subticks will reach inside + the plot and \a outside is the length they will reach outside the plot. If \a outside is greater + than zero, the tick labels and axis label will increase their distance to the axis accordingly, + so they won't collide with the ticks. + + \see setTickLength, setSubTickLengthIn, setSubTickLengthOut +*/ +void QCPAxis::setSubTickLength(int inside, int outside) +{ + setSubTickLengthIn(inside); + setSubTickLengthOut(outside); +} + +/*! + Sets the length of the inward subticks in pixels. \a inside is the length the subticks will reach inside + the plot. + + \see setSubTickLengthOut, setSubTickLength, setTickLength +*/ +void QCPAxis::setSubTickLengthIn(int inside) +{ + if (mAxisPainter->subTickLengthIn != inside) + { + mAxisPainter->subTickLengthIn = inside; + } +} + +/*! + Sets the length of the outward subticks in pixels. \a outside is the length the subticks will reach + outside the plot. If \a outside is greater than zero, the tick labels will increase their + distance to the axis accordingly, so they won't collide with the ticks. + + \see setSubTickLengthIn, setSubTickLength, setTickLength +*/ +void QCPAxis::setSubTickLengthOut(int outside) +{ + if (mAxisPainter->subTickLengthOut != outside) + { + mAxisPainter->subTickLengthOut = outside; + mCachedMarginValid = false; // only outside tick length can change margin + } +} + +/*! + Sets the pen, the axis base line is drawn with. + + \see setTickPen, setSubTickPen +*/ +void QCPAxis::setBasePen(const QPen &pen) +{ + mBasePen = pen; +} + +/*! + Sets the pen, tick marks will be drawn with. + + \see setTickLength, setBasePen +*/ +void QCPAxis::setTickPen(const QPen &pen) +{ + mTickPen = pen; +} + +/*! + Sets the pen, subtick marks will be drawn with. + + \see setSubTickCount, setSubTickLength, setBasePen +*/ +void QCPAxis::setSubTickPen(const QPen &pen) +{ + mSubTickPen = pen; +} + +/*! + Sets the font of the axis label. + + \see setLabelColor +*/ +void QCPAxis::setLabelFont(const QFont &font) +{ + if (mLabelFont != font) + { + mLabelFont = font; + mCachedMarginValid = false; + } +} + +/*! + Sets the color of the axis label. + + \see setLabelFont +*/ +void QCPAxis::setLabelColor(const QColor &color) +{ + mLabelColor = color; +} + +/*! + Sets the text of the axis label that will be shown below/above or next to the axis, depending on + its orientation. To disable axis labels, pass an empty string as \a str. +*/ +void QCPAxis::setLabel(const QString &str) +{ + if (mLabel != str) + { + mLabel = str; + mCachedMarginValid = false; + } +} + +/*! + Sets the distance between the tick labels and the axis label. + + \see setTickLabelPadding, setPadding +*/ +void QCPAxis::setLabelPadding(int padding) +{ + if (mAxisPainter->labelPadding != padding) + { + mAxisPainter->labelPadding = padding; + mCachedMarginValid = false; + } +} + +/*! + Sets the padding of the axis. + + When \ref QCPAxisRect::setAutoMargins is enabled, the padding is the additional outer most space, + that is left blank. + + The axis padding has no meaning if \ref QCPAxisRect::setAutoMargins is disabled. + + \see setLabelPadding, setTickLabelPadding +*/ +void QCPAxis::setPadding(int padding) +{ + if (mPadding != padding) + { + mPadding = padding; + mCachedMarginValid = false; + } +} + +/*! + Sets the offset the axis has to its axis rect side. + + If an axis rect side has multiple axes and automatic margin calculation is enabled for that side, + only the offset of the inner most axis has meaning (even if it is set to be invisible). The + offset of the other, outer axes is controlled automatically, to place them at appropriate + positions. +*/ +void QCPAxis::setOffset(int offset) +{ + mAxisPainter->offset = offset; +} + +/*! + Sets the font that is used for tick labels when they are selected. + + \see setTickLabelFont, setSelectableParts, setSelectedParts, QCustomPlot::setInteractions +*/ +void QCPAxis::setSelectedTickLabelFont(const QFont &font) +{ + if (font != mSelectedTickLabelFont) + { + mSelectedTickLabelFont = font; + // don't set mCachedMarginValid to false here because margin calculation is always done with non-selected fonts + } +} + +/*! + Sets the font that is used for the axis label when it is selected. + + \see setLabelFont, setSelectableParts, setSelectedParts, QCustomPlot::setInteractions +*/ +void QCPAxis::setSelectedLabelFont(const QFont &font) +{ + mSelectedLabelFont = font; + // don't set mCachedMarginValid to false here because margin calculation is always done with non-selected fonts +} + +/*! + Sets the color that is used for tick labels when they are selected. + + \see setTickLabelColor, setSelectableParts, setSelectedParts, QCustomPlot::setInteractions +*/ +void QCPAxis::setSelectedTickLabelColor(const QColor &color) +{ + if (color != mSelectedTickLabelColor) + { + mSelectedTickLabelColor = color; + } +} + +/*! + Sets the color that is used for the axis label when it is selected. + + \see setLabelColor, setSelectableParts, setSelectedParts, QCustomPlot::setInteractions +*/ +void QCPAxis::setSelectedLabelColor(const QColor &color) +{ + mSelectedLabelColor = color; +} + +/*! + Sets the pen that is used to draw the axis base line when selected. + + \see setBasePen, setSelectableParts, setSelectedParts, QCustomPlot::setInteractions +*/ +void QCPAxis::setSelectedBasePen(const QPen &pen) +{ + mSelectedBasePen = pen; +} + +/*! + Sets the pen that is used to draw the (major) ticks when selected. + + \see setTickPen, setSelectableParts, setSelectedParts, QCustomPlot::setInteractions +*/ +void QCPAxis::setSelectedTickPen(const QPen &pen) +{ + mSelectedTickPen = pen; +} + +/*! + Sets the pen that is used to draw the subticks when selected. + + \see setSubTickPen, setSelectableParts, setSelectedParts, QCustomPlot::setInteractions +*/ +void QCPAxis::setSelectedSubTickPen(const QPen &pen) +{ + mSelectedSubTickPen = pen; +} + +/*! + Sets the style for the lower axis ending. See the documentation of QCPLineEnding for available + styles. + + For horizontal axes, this method refers to the left ending, for vertical axes the bottom ending. + Note that this meaning does not change when the axis range is reversed with \ref + setRangeReversed. + + \see setUpperEnding +*/ +void QCPAxis::setLowerEnding(const QCPLineEnding &ending) +{ + mAxisPainter->lowerEnding = ending; +} + +/*! + Sets the style for the upper axis ending. See the documentation of QCPLineEnding for available + styles. + + For horizontal axes, this method refers to the right ending, for vertical axes the top ending. + Note that this meaning does not change when the axis range is reversed with \ref + setRangeReversed. + + \see setLowerEnding +*/ +void QCPAxis::setUpperEnding(const QCPLineEnding &ending) +{ + mAxisPainter->upperEnding = ending; +} + +/*! + If the scale type (\ref setScaleType) is \ref stLinear, \a diff is added to the lower and upper + bounds of the range. The range is simply moved by \a diff. + + If the scale type is \ref stLogarithmic, the range bounds are multiplied by \a diff. This + corresponds to an apparent "linear" move in logarithmic scaling by a distance of log(diff). +*/ +void QCPAxis::moveRange(double diff) +{ + QCPRange oldRange = mRange; + if (mScaleType == stLinear) + { + mRange.lower += diff; + mRange.upper += diff; + } else // mScaleType == stLogarithmic + { + mRange.lower *= diff; + mRange.upper *= diff; + } + mCachedMarginValid = false; + emit rangeChanged(mRange); + emit rangeChanged(mRange, oldRange); +} + +/*! + Scales the range of this axis by \a factor around the coordinate \a center. For example, if \a + factor is 2.0, \a center is 1.0, then the axis range will double its size, and the point at + coordinate 1.0 won't have changed its position in the QCustomPlot widget (i.e. coordinates + around 1.0 will have moved symmetrically closer to 1.0). +*/ +void QCPAxis::scaleRange(double factor, double center) +{ + QCPRange oldRange = mRange; + if (mScaleType == stLinear) + { + QCPRange newRange; + newRange.lower = (mRange.lower-center)*factor + center; + newRange.upper = (mRange.upper-center)*factor + center; + if (QCPRange::validRange(newRange)) + mRange = newRange.sanitizedForLinScale(); + } else // mScaleType == stLogarithmic + { + if ((mRange.upper < 0 && center < 0) || (mRange.upper > 0 && center > 0)) // make sure center has same sign as range + { + QCPRange newRange; + newRange.lower = qPow(mRange.lower/center, factor)*center; + newRange.upper = qPow(mRange.upper/center, factor)*center; + if (QCPRange::validRange(newRange)) + mRange = newRange.sanitizedForLogScale(); + } else + qDebug() << Q_FUNC_INFO << "Center of scaling operation doesn't lie in same logarithmic sign domain as range:" << center; + } + mCachedMarginValid = false; + emit rangeChanged(mRange); + emit rangeChanged(mRange, oldRange); +} + +/*! + Scales the range of this axis to have a certain scale \a ratio to \a otherAxis. The scaling will + be done around the center of the current axis range. + + For example, if \a ratio is 1, this axis is the \a yAxis and \a otherAxis is \a xAxis, graphs + plotted with those axes will appear in a 1:1 aspect ratio, independent of the aspect ratio the + axis rect has. + + This is an operation that changes the range of this axis once, it doesn't fix the scale ratio + indefinitely. Note that calling this function in the constructor of the QCustomPlot's parent + won't have the desired effect, since the widget dimensions aren't defined yet, and a resizeEvent + will follow. +*/ +void QCPAxis::setScaleRatio(const QCPAxis *otherAxis, double ratio) +{ + int otherPixelSize, ownPixelSize; + + if (otherAxis->orientation() == Qt::Horizontal) + otherPixelSize = otherAxis->axisRect()->width(); + else + otherPixelSize = otherAxis->axisRect()->height(); + + if (orientation() == Qt::Horizontal) + ownPixelSize = axisRect()->width(); + else + ownPixelSize = axisRect()->height(); + + double newRangeSize = ratio*otherAxis->range().size()*ownPixelSize/(double)otherPixelSize; + setRange(range().center(), newRangeSize, Qt::AlignCenter); +} + +/*! + Changes the axis range such that all plottables associated with this axis are fully visible in + that dimension. + + \see QCPAbstractPlottable::rescaleAxes, QCustomPlot::rescaleAxes +*/ +void QCPAxis::rescale(bool onlyVisiblePlottables) +{ + QList p = plottables(); + QCPRange newRange; + bool haveRange = false; + for (int i=0; irealVisibility() && onlyVisiblePlottables) + continue; + QCPRange plottableRange; + bool currentFoundRange; + QCPAbstractPlottable::SignDomain signDomain = QCPAbstractPlottable::sdBoth; + if (mScaleType == stLogarithmic) + signDomain = (mRange.upper < 0 ? QCPAbstractPlottable::sdNegative : QCPAbstractPlottable::sdPositive); + if (p.at(i)->keyAxis() == this) + plottableRange = p.at(i)->getKeyRange(currentFoundRange, signDomain); + else + plottableRange = p.at(i)->getValueRange(currentFoundRange, signDomain); + if (currentFoundRange) + { + if (!haveRange) + newRange = plottableRange; + else + newRange.expand(plottableRange); + haveRange = true; + } + } + if (haveRange) + { + if (!QCPRange::validRange(newRange)) // likely due to range being zero (plottable has only constant data in this axis dimension), shift current range to at least center the plottable + { + double center = (newRange.lower+newRange.upper)*0.5; // upper and lower should be equal anyway, but just to make sure, incase validRange returned false for other reason + if (mScaleType == stLinear) + { + newRange.lower = center-mRange.size()/2.0; + newRange.upper = center+mRange.size()/2.0; + } else // mScaleType == stLogarithmic + { + newRange.lower = center/qSqrt(mRange.upper/mRange.lower); + newRange.upper = center*qSqrt(mRange.upper/mRange.lower); + } + } + setRange(newRange); + } +} + +/*! + Transforms \a value, in pixel coordinates of the QCustomPlot widget, to axis coordinates. +*/ +double QCPAxis::pixelToCoord(double value) const +{ + if (orientation() == Qt::Horizontal) + { + if (mScaleType == stLinear) + { + if (!mRangeReversed) + return (value-mAxisRect->left())/(double)mAxisRect->width()*mRange.size()+mRange.lower; + else + return -(value-mAxisRect->left())/(double)mAxisRect->width()*mRange.size()+mRange.upper; + } else // mScaleType == stLogarithmic + { + if (!mRangeReversed) + return qPow(mRange.upper/mRange.lower, (value-mAxisRect->left())/(double)mAxisRect->width())*mRange.lower; + else + return qPow(mRange.upper/mRange.lower, (mAxisRect->left()-value)/(double)mAxisRect->width())*mRange.upper; + } + } else // orientation() == Qt::Vertical + { + if (mScaleType == stLinear) + { + if (!mRangeReversed) + return (mAxisRect->bottom()-value)/(double)mAxisRect->height()*mRange.size()+mRange.lower; + else + return -(mAxisRect->bottom()-value)/(double)mAxisRect->height()*mRange.size()+mRange.upper; + } else // mScaleType == stLogarithmic + { + if (!mRangeReversed) + return qPow(mRange.upper/mRange.lower, (mAxisRect->bottom()-value)/(double)mAxisRect->height())*mRange.lower; + else + return qPow(mRange.upper/mRange.lower, (value-mAxisRect->bottom())/(double)mAxisRect->height())*mRange.upper; + } + } +} + +/*! + Transforms \a value, in coordinates of the axis, to pixel coordinates of the QCustomPlot widget. +*/ +double QCPAxis::coordToPixel(double value) const +{ + if (orientation() == Qt::Horizontal) + { + if (mScaleType == stLinear) + { + if (!mRangeReversed) + return (value-mRange.lower)/mRange.size()*mAxisRect->width()+mAxisRect->left(); + else + return (mRange.upper-value)/mRange.size()*mAxisRect->width()+mAxisRect->left(); + } else // mScaleType == stLogarithmic + { + if (value >= 0 && mRange.upper < 0) // invalid value for logarithmic scale, just draw it outside visible range + return !mRangeReversed ? mAxisRect->right()+200 : mAxisRect->left()-200; + else if (value <= 0 && mRange.upper > 0) // invalid value for logarithmic scale, just draw it outside visible range + return !mRangeReversed ? mAxisRect->left()-200 : mAxisRect->right()+200; + else + { + if (!mRangeReversed) + return baseLog(value/mRange.lower)/baseLog(mRange.upper/mRange.lower)*mAxisRect->width()+mAxisRect->left(); + else + return baseLog(mRange.upper/value)/baseLog(mRange.upper/mRange.lower)*mAxisRect->width()+mAxisRect->left(); + } + } + } else // orientation() == Qt::Vertical + { + if (mScaleType == stLinear) + { + if (!mRangeReversed) + return mAxisRect->bottom()-(value-mRange.lower)/mRange.size()*mAxisRect->height(); + else + return mAxisRect->bottom()-(mRange.upper-value)/mRange.size()*mAxisRect->height(); + } else // mScaleType == stLogarithmic + { + if (value >= 0 && mRange.upper < 0) // invalid value for logarithmic scale, just draw it outside visible range + return !mRangeReversed ? mAxisRect->top()-200 : mAxisRect->bottom()+200; + else if (value <= 0 && mRange.upper > 0) // invalid value for logarithmic scale, just draw it outside visible range + return !mRangeReversed ? mAxisRect->bottom()+200 : mAxisRect->top()-200; + else + { + if (!mRangeReversed) + return mAxisRect->bottom()-baseLog(value/mRange.lower)/baseLog(mRange.upper/mRange.lower)*mAxisRect->height(); + else + return mAxisRect->bottom()-baseLog(mRange.upper/value)/baseLog(mRange.upper/mRange.lower)*mAxisRect->height(); + } + } + } +} + +/*! + Returns the part of the axis that is hit by \a pos (in pixels). The return value of this function + is independent of the user-selectable parts defined with \ref setSelectableParts. Further, this + function does not change the current selection state of the axis. + + If the axis is not visible (\ref setVisible), this function always returns \ref spNone. + + \see setSelectedParts, setSelectableParts, QCustomPlot::setInteractions +*/ +QCPAxis::SelectablePart QCPAxis::getPartAt(const QPointF &pos) const +{ + if (!mVisible) + return spNone; + + if (mAxisPainter->axisSelectionBox().contains(pos.toPoint())) + return spAxis; + else if (mAxisPainter->tickLabelsSelectionBox().contains(pos.toPoint())) + return spTickLabels; + else if (mAxisPainter->labelSelectionBox().contains(pos.toPoint())) + return spAxisLabel; + else + return spNone; +} + +/* inherits documentation from base class */ +double QCPAxis::selectTest(const QPointF &pos, bool onlySelectable, QVariant *details) const +{ + if (!mParentPlot) return -1; + SelectablePart part = getPartAt(pos); + if ((onlySelectable && !mSelectableParts.testFlag(part)) || part == spNone) + return -1; + + if (details) + details->setValue(part); + return mParentPlot->selectionTolerance()*0.99; +} + +/*! + Returns a list of all the plottables that have this axis as key or value axis. + + If you are only interested in plottables of type QCPGraph, see \ref graphs. + + \see graphs, items +*/ +QList QCPAxis::plottables() const +{ + QList result; + if (!mParentPlot) return result; + + for (int i=0; imPlottables.size(); ++i) + { + if (mParentPlot->mPlottables.at(i)->keyAxis() == this ||mParentPlot->mPlottables.at(i)->valueAxis() == this) + result.append(mParentPlot->mPlottables.at(i)); + } + return result; +} + +/*! + Returns a list of all the graphs that have this axis as key or value axis. + + \see plottables, items +*/ +QList QCPAxis::graphs() const +{ + QList result; + if (!mParentPlot) return result; + + for (int i=0; imGraphs.size(); ++i) + { + if (mParentPlot->mGraphs.at(i)->keyAxis() == this || mParentPlot->mGraphs.at(i)->valueAxis() == this) + result.append(mParentPlot->mGraphs.at(i)); + } + return result; +} + +/*! + Returns a list of all the items that are associated with this axis. An item is considered + associated with an axis if at least one of its positions uses the axis as key or value axis. + + \see plottables, graphs +*/ +QList QCPAxis::items() const +{ + QList result; + if (!mParentPlot) return result; + + for (int itemId=0; itemIdmItems.size(); ++itemId) + { + QList positions = mParentPlot->mItems.at(itemId)->positions(); + for (int posId=0; posIdkeyAxis() == this || positions.at(posId)->valueAxis() == this) + { + result.append(mParentPlot->mItems.at(itemId)); + break; + } + } + } + return result; +} + +/*! + Transforms a margin side to the logically corresponding axis type. (QCP::msLeft to + QCPAxis::atLeft, QCP::msRight to QCPAxis::atRight, etc.) +*/ +QCPAxis::AxisType QCPAxis::marginSideToAxisType(QCP::MarginSide side) +{ + switch (side) + { + case QCP::msLeft: return atLeft; + case QCP::msRight: return atRight; + case QCP::msTop: return atTop; + case QCP::msBottom: return atBottom; + default: break; + } + qDebug() << Q_FUNC_INFO << "Invalid margin side passed:" << (int)side; + return atLeft; +} + +/*! + Returns the axis type that describes the opposite axis of an axis with the specified \a type. +*/ +QCPAxis::AxisType QCPAxis::opposite(QCPAxis::AxisType type) +{ + switch (type) + { + case atLeft: return atRight; break; + case atRight: return atLeft; break; + case atBottom: return atTop; break; + case atTop: return atBottom; break; + default: qDebug() << Q_FUNC_INFO << "invalid axis type"; return atLeft; break; + } +} + +/*! \internal + + This function is called to prepare the tick vector, sub tick vector and tick label vector. If + \ref setAutoTicks is set to true, appropriate tick values are determined automatically via \ref + generateAutoTicks. If it's set to false, the signal ticksRequest is emitted, which can be used to + provide external tick positions. Then the sub tick vectors and tick label vectors are created. +*/ +void QCPAxis::setupTickVectors() +{ + if (!mParentPlot) return; + if ((!mTicks && !mTickLabels && !mGrid->visible()) || mRange.size() <= 0) return; + + // fill tick vectors, either by auto generating or by notifying user to fill the vectors himself + if (mAutoTicks) + { + generateAutoTicks(); + } else + { + emit ticksRequest(); + } + + visibleTickBounds(mLowestVisibleTick, mHighestVisibleTick); + if (mTickVector.isEmpty()) + { + mSubTickVector.clear(); + return; + } + + // generate subticks between ticks: + mSubTickVector.resize((mTickVector.size()-1)*mSubTickCount); + if (mSubTickCount > 0) + { + double subTickStep = 0; + double subTickPosition = 0; + int subTickIndex = 0; + bool done = false; + int lowTick = mLowestVisibleTick > 0 ? mLowestVisibleTick-1 : mLowestVisibleTick; + int highTick = mHighestVisibleTick < mTickVector.size()-1 ? mHighestVisibleTick+1 : mHighestVisibleTick; + for (int i=lowTick+1; i<=highTick; ++i) + { + subTickStep = (mTickVector.at(i)-mTickVector.at(i-1))/(double)(mSubTickCount+1); + for (int k=1; k<=mSubTickCount; ++k) + { + subTickPosition = mTickVector.at(i-1) + k*subTickStep; + if (subTickPosition < mRange.lower) + continue; + if (subTickPosition > mRange.upper) + { + done = true; + break; + } + mSubTickVector[subTickIndex] = subTickPosition; + subTickIndex++; + } + if (done) break; + } + mSubTickVector.resize(subTickIndex); + } + + // generate tick labels according to tick positions: + if (mAutoTickLabels) + { + int vecsize = mTickVector.size(); + mTickVectorLabels.resize(vecsize); + if (mTickLabelType == ltNumber) + { + for (int i=mLowestVisibleTick; i<=mHighestVisibleTick; ++i) + mTickVectorLabels[i] = mParentPlot->locale().toString(mTickVector.at(i), mNumberFormatChar.toLatin1(), mNumberPrecision); + } else if (mTickLabelType == ltDateTime) + { + for (int i=mLowestVisibleTick; i<=mHighestVisibleTick; ++i) + { +#if QT_VERSION < QT_VERSION_CHECK(4, 7, 0) // use fromMSecsSinceEpoch function if available, to gain sub-second accuracy on tick labels (e.g. for format "hh:mm:ss:zzz") + mTickVectorLabels[i] = mParentPlot->locale().toString(QDateTime::fromTime_t(mTickVector.at(i)).toTimeSpec(mDateTimeSpec), mDateTimeFormat); +#else + mTickVectorLabels[i] = mParentPlot->locale().toString(QDateTime::fromMSecsSinceEpoch(mTickVector.at(i)*1000).toTimeSpec(mDateTimeSpec), mDateTimeFormat); +#endif + } + } + } else // mAutoTickLabels == false + { + if (mAutoTicks) // ticks generated automatically, but not ticklabels, so emit ticksRequest here for labels + { + emit ticksRequest(); + } + // make sure provided tick label vector has correct (minimal) length: + if (mTickVectorLabels.size() < mTickVector.size()) + mTickVectorLabels.resize(mTickVector.size()); + } +} + +/*! \internal + + If \ref setAutoTicks is set to true, this function is called by \ref setupTickVectors to + generate reasonable tick positions (and subtick count). The algorithm tries to create + approximately mAutoTickCount ticks (set via \ref setAutoTickCount). + + If the scale is logarithmic, \ref setAutoTickCount is ignored, and one tick is generated at every + power of the current logarithm base, set via \ref setScaleLogBase. +*/ +void QCPAxis::generateAutoTicks() +{ + if (mScaleType == stLinear) + { + if (mAutoTickStep) + { + // Generate tick positions according to linear scaling: + mTickStep = mRange.size()/(double)(mAutoTickCount+1e-10); // mAutoTickCount ticks on average, the small addition is to prevent jitter on exact integers + double magnitudeFactor = qPow(10.0, qFloor(qLn(mTickStep)/qLn(10.0))); // get magnitude factor e.g. 0.01, 1, 10, 1000 etc. + double tickStepMantissa = mTickStep/magnitudeFactor; + if (tickStepMantissa < 5) + { + // round digit after decimal point to 0.5 + mTickStep = (int)(tickStepMantissa*2)/2.0*magnitudeFactor; + } else + { + // round to first digit in multiples of 2 + mTickStep = (int)(tickStepMantissa/2.0)*2.0*magnitudeFactor; + } + } + if (mAutoSubTicks) + mSubTickCount = calculateAutoSubTickCount(mTickStep); + // Generate tick positions according to mTickStep: + qint64 firstStep = floor(mRange.lower/mTickStep); // do not use qFloor here, or we'll lose 64 bit precision + qint64 lastStep = ceil(mRange.upper/mTickStep); // do not use qCeil here, or we'll lose 64 bit precision + int tickcount = lastStep-firstStep+1; + if (tickcount < 0) tickcount = 0; + mTickVector.resize(tickcount); + for (int i=0; i 0 && mRange.upper > 0) // positive range + { + double lowerMag = basePow(qFloor(baseLog(mRange.lower))); + double currentMag = lowerMag; + mTickVector.clear(); + mTickVector.append(currentMag); + while (currentMag < mRange.upper && currentMag > 0) // currentMag might be zero for ranges ~1e-300, just cancel in that case + { + currentMag *= mScaleLogBase; + mTickVector.append(currentMag); + } + } else if (mRange.lower < 0 && mRange.upper < 0) // negative range + { + double lowerMag = -basePow(qCeil(baseLog(-mRange.lower))); + double currentMag = lowerMag; + mTickVector.clear(); + mTickVector.append(currentMag); + while (currentMag < mRange.upper && currentMag < 0) // currentMag might be zero for ranges ~1e-300, just cancel in that case + { + currentMag /= mScaleLogBase; + mTickVector.append(currentMag); + } + } else // invalid range for logarithmic scale, because lower and upper have different sign + { + mTickVector.clear(); + qDebug() << Q_FUNC_INFO << "Invalid range for logarithmic plot: " << mRange.lower << "-" << mRange.upper; + } + } +} + +/*! \internal + + Called by generateAutoTicks when \ref setAutoSubTicks is set to true. Depending on the \a + tickStep between two major ticks on the axis, a different number of sub ticks is appropriate. For + Example taking 4 sub ticks for a \a tickStep of 1 makes more sense than taking 5 sub ticks, + because this corresponds to a sub tick step of 0.2, instead of the less intuitive 0.16667. Note + that a subtick count of 4 means dividing the major tick step into 5 sections. + + This is implemented by a hand made lookup for integer tick steps as well as fractional tick steps + with a fractional part of (approximately) 0.5. If a tick step is different (i.e. has no + fractional part close to 0.5), the currently set sub tick count (\ref setSubTickCount) is + returned. +*/ +int QCPAxis::calculateAutoSubTickCount(double tickStep) const +{ + int result = mSubTickCount; // default to current setting, if no proper value can be found + + // get mantissa of tickstep: + double magnitudeFactor = qPow(10.0, qFloor(qLn(tickStep)/qLn(10.0))); // get magnitude factor e.g. 0.01, 1, 10, 1000 etc. + double tickStepMantissa = tickStep/magnitudeFactor; + + // separate integer and fractional part of mantissa: + double epsilon = 0.01; + double intPartf; + int intPart; + double fracPart = modf(tickStepMantissa, &intPartf); + intPart = intPartf; + + // handle cases with (almost) integer mantissa: + if (fracPart < epsilon || 1.0-fracPart < epsilon) + { + if (1.0-fracPart < epsilon) + ++intPart; + switch (intPart) + { + case 1: result = 4; break; // 1.0 -> 0.2 substep + case 2: result = 3; break; // 2.0 -> 0.5 substep + case 3: result = 2; break; // 3.0 -> 1.0 substep + case 4: result = 3; break; // 4.0 -> 1.0 substep + case 5: result = 4; break; // 5.0 -> 1.0 substep + case 6: result = 2; break; // 6.0 -> 2.0 substep + case 7: result = 6; break; // 7.0 -> 1.0 substep + case 8: result = 3; break; // 8.0 -> 2.0 substep + case 9: result = 2; break; // 9.0 -> 3.0 substep + } + } else + { + // handle cases with significantly fractional mantissa: + if (qAbs(fracPart-0.5) < epsilon) // *.5 mantissa + { + switch (intPart) + { + case 1: result = 2; break; // 1.5 -> 0.5 substep + case 2: result = 4; break; // 2.5 -> 0.5 substep + case 3: result = 4; break; // 3.5 -> 0.7 substep + case 4: result = 2; break; // 4.5 -> 1.5 substep + case 5: result = 4; break; // 5.5 -> 1.1 substep (won't occur with autoTickStep from here on) + case 6: result = 4; break; // 6.5 -> 1.3 substep + case 7: result = 2; break; // 7.5 -> 2.5 substep + case 8: result = 4; break; // 8.5 -> 1.7 substep + case 9: result = 4; break; // 9.5 -> 1.9 substep + } + } + // if mantissa fraction isnt 0.0 or 0.5, don't bother finding good sub tick marks, leave default + } + + return result; +} + +/* inherits documentation from base class */ +void QCPAxis::selectEvent(QMouseEvent *event, bool additive, const QVariant &details, bool *selectionStateChanged) +{ + Q_UNUSED(event) + SelectablePart part = details.value(); + if (mSelectableParts.testFlag(part)) + { + SelectableParts selBefore = mSelectedParts; + setSelectedParts(additive ? mSelectedParts^part : part); + if (selectionStateChanged) + *selectionStateChanged = mSelectedParts != selBefore; + } +} + +/* inherits documentation from base class */ +void QCPAxis::deselectEvent(bool *selectionStateChanged) +{ + SelectableParts selBefore = mSelectedParts; + setSelectedParts(mSelectedParts & ~mSelectableParts); + if (selectionStateChanged) + *selectionStateChanged = mSelectedParts != selBefore; +} + +/*! \internal + + A convenience function to easily set the QPainter::Antialiased hint on the provided \a painter + before drawing axis lines. + + This is the antialiasing state the painter passed to the \ref draw method is in by default. + + This function takes into account the local setting of the antialiasing flag as well as the + overrides set with \ref QCustomPlot::setAntialiasedElements and \ref + QCustomPlot::setNotAntialiasedElements. + + \see setAntialiased +*/ +void QCPAxis::applyDefaultAntialiasingHint(QCPPainter *painter) const +{ + applyAntialiasingHint(painter, mAntialiased, QCP::aeAxes); +} + +/*! \internal + + Draws the axis with the specified \a painter, using the internal QCPAxisPainterPrivate instance. + +*/ +void QCPAxis::draw(QCPPainter *painter) +{ + const int lowTick = mLowestVisibleTick; + const int highTick = mHighestVisibleTick; + QVector subTickPositions; // the final coordToPixel transformed vector passed to QCPAxisPainter + QVector tickPositions; // the final coordToPixel transformed vector passed to QCPAxisPainter + QVector tickLabels; // the final vector passed to QCPAxisPainter + tickPositions.reserve(highTick-lowTick+1); + tickLabels.reserve(highTick-lowTick+1); + subTickPositions.reserve(mSubTickVector.size()); + + if (mTicks) + { + for (int i=lowTick; i<=highTick; ++i) + { + tickPositions.append(coordToPixel(mTickVector.at(i))); + if (mTickLabels) + tickLabels.append(mTickVectorLabels.at(i)); + } + + if (mSubTickCount > 0) + { + const int subTickCount = mSubTickVector.size(); + for (int i=0; itype = mAxisType; + mAxisPainter->basePen = getBasePen(); + mAxisPainter->labelFont = getLabelFont(); + mAxisPainter->labelColor = getLabelColor(); + mAxisPainter->label = mLabel; + mAxisPainter->substituteExponent = mAutoTickLabels && mNumberBeautifulPowers && mTickLabelType == ltNumber; + mAxisPainter->tickPen = getTickPen(); + mAxisPainter->subTickPen = getSubTickPen(); + mAxisPainter->tickLabelFont = getTickLabelFont(); + mAxisPainter->tickLabelColor = getTickLabelColor(); + mAxisPainter->axisRect = mAxisRect->rect(); + mAxisPainter->viewportRect = mParentPlot->viewport(); + mAxisPainter->abbreviateDecimalPowers = mScaleType == stLogarithmic; + mAxisPainter->reversedEndings = mRangeReversed; + mAxisPainter->tickPositions = tickPositions; + mAxisPainter->tickLabels = tickLabels; + mAxisPainter->subTickPositions = subTickPositions; + mAxisPainter->draw(painter); +} + +/*! \internal + + Returns via \a lowIndex and \a highIndex, which ticks in the current tick vector are visible in + the current range. The return values are indices of the tick vector, not the positions of the + ticks themselves. + + The actual use of this function is when an external tick vector is provided, since it might + exceed far beyond the currently displayed range, and would cause unnecessary calculations e.g. of + subticks. + + If all ticks are outside the axis range, an inverted range is returned, i.e. highIndex will be + smaller than lowIndex. There is one case, where this function returns indices that are not really + visible in the current axis range: When the tick spacing is larger than the axis range size and + one tick is below the axis range and the next tick is already above the axis range. Because in + such cases it is usually desirable to know the tick pair, to draw proper subticks. +*/ +void QCPAxis::visibleTickBounds(int &lowIndex, int &highIndex) const +{ + bool lowFound = false; + bool highFound = false; + lowIndex = 0; + highIndex = -1; + + for (int i=0; i < mTickVector.size(); ++i) + { + if (mTickVector.at(i) >= mRange.lower) + { + lowFound = true; + lowIndex = i; + break; + } + } + for (int i=mTickVector.size()-1; i >= 0; --i) + { + if (mTickVector.at(i) <= mRange.upper) + { + highFound = true; + highIndex = i; + break; + } + } + + if (!lowFound && highFound) + lowIndex = highIndex+1; + else if (lowFound && !highFound) + highIndex = lowIndex-1; +} + +/*! \internal + + A log function with the base mScaleLogBase, used mostly for coordinate transforms in logarithmic + scales with arbitrary log base. Uses the buffered mScaleLogBaseLogInv for faster calculation. + This is set to 1.0/qLn(mScaleLogBase) in \ref setScaleLogBase. + + \see basePow, setScaleLogBase, setScaleType +*/ +double QCPAxis::baseLog(double value) const +{ + return qLn(value)*mScaleLogBaseLogInv; +} + +/*! \internal + + A power function with the base mScaleLogBase, used mostly for coordinate transforms in + logarithmic scales with arbitrary log base. + + \see baseLog, setScaleLogBase, setScaleType +*/ +double QCPAxis::basePow(double value) const +{ + return qPow(mScaleLogBase, value); +} + +/*! \internal + + Returns the pen that is used to draw the axis base line. Depending on the selection state, this + is either mSelectedBasePen or mBasePen. +*/ +QPen QCPAxis::getBasePen() const +{ + return mSelectedParts.testFlag(spAxis) ? mSelectedBasePen : mBasePen; +} + +/*! \internal + + Returns the pen that is used to draw the (major) ticks. Depending on the selection state, this + is either mSelectedTickPen or mTickPen. +*/ +QPen QCPAxis::getTickPen() const +{ + return mSelectedParts.testFlag(spAxis) ? mSelectedTickPen : mTickPen; +} + +/*! \internal + + Returns the pen that is used to draw the subticks. Depending on the selection state, this + is either mSelectedSubTickPen or mSubTickPen. +*/ +QPen QCPAxis::getSubTickPen() const +{ + return mSelectedParts.testFlag(spAxis) ? mSelectedSubTickPen : mSubTickPen; +} + +/*! \internal + + Returns the font that is used to draw the tick labels. Depending on the selection state, this + is either mSelectedTickLabelFont or mTickLabelFont. +*/ +QFont QCPAxis::getTickLabelFont() const +{ + return mSelectedParts.testFlag(spTickLabels) ? mSelectedTickLabelFont : mTickLabelFont; +} + +/*! \internal + + Returns the font that is used to draw the axis label. Depending on the selection state, this + is either mSelectedLabelFont or mLabelFont. +*/ +QFont QCPAxis::getLabelFont() const +{ + return mSelectedParts.testFlag(spAxisLabel) ? mSelectedLabelFont : mLabelFont; +} + +/*! \internal + + Returns the color that is used to draw the tick labels. Depending on the selection state, this + is either mSelectedTickLabelColor or mTickLabelColor. +*/ +QColor QCPAxis::getTickLabelColor() const +{ + return mSelectedParts.testFlag(spTickLabels) ? mSelectedTickLabelColor : mTickLabelColor; +} + +/*! \internal + + Returns the color that is used to draw the axis label. Depending on the selection state, this + is either mSelectedLabelColor or mLabelColor. +*/ +QColor QCPAxis::getLabelColor() const +{ + return mSelectedParts.testFlag(spAxisLabel) ? mSelectedLabelColor : mLabelColor; +} + +/*! \internal + + Returns the appropriate outward margin for this axis. It is needed if \ref + QCPAxisRect::setAutoMargins is set to true on the parent axis rect. An axis with axis type \ref + atLeft will return an appropriate left margin, \ref atBottom will return an appropriate bottom + margin and so forth. For the calculation, this function goes through similar steps as \ref draw, + so changing one function likely requires the modification of the other one as well. + + The margin consists of the outward tick length, tick label padding, tick label size, label + padding, label size, and padding. + + The margin is cached internally, so repeated calls while leaving the axis range, fonts, etc. + unchanged are very fast. +*/ +int QCPAxis::calculateMargin() +{ + if (!mVisible) // if not visible, directly return 0, don't cache 0 because we can't react to setVisible in QCPAxis + return 0; + + if (mCachedMarginValid) + return mCachedMargin; + + // run through similar steps as QCPAxis::draw, and caluclate margin needed to fit axis and its labels + int margin = 0; + + int lowTick, highTick; + visibleTickBounds(lowTick, highTick); + QVector tickPositions; // the final coordToPixel transformed vector passed to QCPAxisPainter + QVector tickLabels; // the final vector passed to QCPAxisPainter + tickPositions.reserve(highTick-lowTick+1); + tickLabels.reserve(highTick-lowTick+1); + if (mTicks) + { + for (int i=lowTick; i<=highTick; ++i) + { + tickPositions.append(coordToPixel(mTickVector.at(i))); + if (mTickLabels) + tickLabels.append(mTickVectorLabels.at(i)); + } + } + // transfer all properties of this axis to QCPAxisPainterPrivate which it needs to calculate the size. + // Note that some axis painter properties are already set by direct feed-through with QCPAxis setters + mAxisPainter->type = mAxisType; + mAxisPainter->labelFont = getLabelFont(); + mAxisPainter->label = mLabel; + mAxisPainter->tickLabelFont = mTickLabelFont; + mAxisPainter->axisRect = mAxisRect->rect(); + mAxisPainter->viewportRect = mParentPlot->viewport(); + mAxisPainter->tickPositions = tickPositions; + mAxisPainter->tickLabels = tickLabels; + margin += mAxisPainter->size(); + margin += mPadding; + + mCachedMargin = margin; + mCachedMarginValid = true; + return margin; +} + +/* inherits documentation from base class */ +QCP::Interaction QCPAxis::selectionCategory() const +{ + return QCP::iSelectAxes; +} + + +//////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////// QCPAxisPainterPrivate +//////////////////////////////////////////////////////////////////////////////////////////////////// + +/*! \class QCPAxisPainterPrivate + + \internal + \brief (Private) + + This is a private class and not part of the public QCustomPlot interface. + + It is used by QCPAxis to do the low-level drawing of axis backbone, tick marks, tick labels and + axis label. It also buffers the labels to reduce replot times. The parameters are configured by + directly accessing the public member variables. +*/ + +/*! + Constructs a QCPAxisPainterPrivate instance. Make sure to not create a new instance on every + redraw, to utilize the caching mechanisms. +*/ +QCPAxisPainterPrivate::QCPAxisPainterPrivate(QCustomPlot *parentPlot) : + type(QCPAxis::atLeft), + basePen(QPen(Qt::black, 0, Qt::SolidLine, Qt::SquareCap)), + lowerEnding(QCPLineEnding::esNone), + upperEnding(QCPLineEnding::esNone), + labelPadding(0), + tickLabelPadding(0), + tickLabelRotation(0), + tickLabelSide(QCPAxis::lsOutside), + substituteExponent(true), + numberMultiplyCross(false), + tickLengthIn(5), + tickLengthOut(0), + subTickLengthIn(2), + subTickLengthOut(0), + tickPen(QPen(Qt::black, 0, Qt::SolidLine, Qt::SquareCap)), + subTickPen(QPen(Qt::black, 0, Qt::SolidLine, Qt::SquareCap)), + offset(0), + abbreviateDecimalPowers(false), + reversedEndings(false), + mParentPlot(parentPlot), + mLabelCache(16) // cache at most 16 (tick) labels +{ +} + +QCPAxisPainterPrivate::~QCPAxisPainterPrivate() +{ +} + +/*! \internal + + Draws the axis with the specified \a painter. + + The selection boxes (mAxisSelectionBox, mTickLabelsSelectionBox, mLabelSelectionBox) are set + here, too. +*/ +void QCPAxisPainterPrivate::draw(QCPPainter *painter) +{ + QByteArray newHash = generateLabelParameterHash(); + if (newHash != mLabelParameterHash) + { + mLabelCache.clear(); + mLabelParameterHash = newHash; + } + + QPoint origin; + switch (type) + { + case QCPAxis::atLeft: origin = axisRect.bottomLeft() +QPoint(-offset, 0); break; + case QCPAxis::atRight: origin = axisRect.bottomRight()+QPoint(+offset, 0); break; + case QCPAxis::atTop: origin = axisRect.topLeft() +QPoint(0, -offset); break; + case QCPAxis::atBottom: origin = axisRect.bottomLeft() +QPoint(0, +offset); break; + } + + double xCor = 0, yCor = 0; // paint system correction, for pixel exact matches (affects baselines and ticks of top/right axes) + switch (type) + { + case QCPAxis::atTop: yCor = -1; break; + case QCPAxis::atRight: xCor = 1; break; + default: break; + } + int margin = 0; + // draw baseline: + QLineF baseLine; + painter->setPen(basePen); + if (QCPAxis::orientation(type) == Qt::Horizontal) + baseLine.setPoints(origin+QPointF(xCor, yCor), origin+QPointF(axisRect.width()+xCor, yCor)); + else + baseLine.setPoints(origin+QPointF(xCor, yCor), origin+QPointF(xCor, -axisRect.height()+yCor)); + if (reversedEndings) + baseLine = QLineF(baseLine.p2(), baseLine.p1()); // won't make a difference for line itself, but for line endings later + painter->drawLine(baseLine); + + // draw ticks: + if (!tickPositions.isEmpty()) + { + painter->setPen(tickPen); + int tickDir = (type == QCPAxis::atBottom || type == QCPAxis::atRight) ? -1 : 1; // direction of ticks ("inward" is right for left axis and left for right axis) + if (QCPAxis::orientation(type) == Qt::Horizontal) + { + for (int i=0; idrawLine(QLineF(tickPositions.at(i)+xCor, origin.y()-tickLengthOut*tickDir+yCor, tickPositions.at(i)+xCor, origin.y()+tickLengthIn*tickDir+yCor)); + } else + { + for (int i=0; idrawLine(QLineF(origin.x()-tickLengthOut*tickDir+xCor, tickPositions.at(i)+yCor, origin.x()+tickLengthIn*tickDir+xCor, tickPositions.at(i)+yCor)); + } + } + + // draw subticks: + if (!subTickPositions.isEmpty()) + { + painter->setPen(subTickPen); + // direction of ticks ("inward" is right for left axis and left for right axis) + int tickDir = (type == QCPAxis::atBottom || type == QCPAxis::atRight) ? -1 : 1; + if (QCPAxis::orientation(type) == Qt::Horizontal) + { + for (int i=0; idrawLine(QLineF(subTickPositions.at(i)+xCor, origin.y()-subTickLengthOut*tickDir+yCor, subTickPositions.at(i)+xCor, origin.y()+subTickLengthIn*tickDir+yCor)); + } else + { + for (int i=0; idrawLine(QLineF(origin.x()-subTickLengthOut*tickDir+xCor, subTickPositions.at(i)+yCor, origin.x()+subTickLengthIn*tickDir+xCor, subTickPositions.at(i)+yCor)); + } + } + margin += qMax(0, qMax(tickLengthOut, subTickLengthOut)); + + // draw axis base endings: + bool antialiasingBackup = painter->antialiasing(); + painter->setAntialiasing(true); // always want endings to be antialiased, even if base and ticks themselves aren't + painter->setBrush(QBrush(basePen.color())); + QVector2D baseLineVector(baseLine.dx(), baseLine.dy()); + if (lowerEnding.style() != QCPLineEnding::esNone) + lowerEnding.draw(painter, QVector2D(baseLine.p1())-baseLineVector.normalized()*lowerEnding.realLength()*(lowerEnding.inverted()?-1:1), -baseLineVector); + if (upperEnding.style() != QCPLineEnding::esNone) + upperEnding.draw(painter, QVector2D(baseLine.p2())+baseLineVector.normalized()*upperEnding.realLength()*(upperEnding.inverted()?-1:1), baseLineVector); + painter->setAntialiasing(antialiasingBackup); + + // tick labels: + QRect oldClipRect; + if (tickLabelSide == QCPAxis::lsInside) // if using inside labels, clip them to the axis rect + { + oldClipRect = painter->clipRegion().boundingRect(); + painter->setClipRect(axisRect); + } + QSize tickLabelsSize(0, 0); // size of largest tick label, for offset calculation of axis label + if (!tickLabels.isEmpty()) + { + if (tickLabelSide == QCPAxis::lsOutside) + margin += tickLabelPadding; + painter->setFont(tickLabelFont); + painter->setPen(QPen(tickLabelColor)); + const int maxLabelIndex = qMin(tickPositions.size(), tickLabels.size()); + int distanceToAxis = margin; + if (tickLabelSide == QCPAxis::lsInside) + distanceToAxis = -(qMax(tickLengthIn, subTickLengthIn)+tickLabelPadding); + for (int i=0; isetClipRect(oldClipRect); + + // axis label: + QRect labelBounds; + if (!label.isEmpty()) + { + margin += labelPadding; + painter->setFont(labelFont); + painter->setPen(QPen(labelColor)); + labelBounds = painter->fontMetrics().boundingRect(0, 0, 0, 0, Qt::TextDontClip, label); + if (type == QCPAxis::atLeft) + { + QTransform oldTransform = painter->transform(); + painter->translate((origin.x()-margin-labelBounds.height()), origin.y()); + painter->rotate(-90); + painter->drawText(0, 0, axisRect.height(), labelBounds.height(), Qt::TextDontClip | Qt::AlignCenter, label); + painter->setTransform(oldTransform); + } + else if (type == QCPAxis::atRight) + { + QTransform oldTransform = painter->transform(); + painter->translate((origin.x()+margin+labelBounds.height()), origin.y()-axisRect.height()); + painter->rotate(90); + painter->drawText(0, 0, axisRect.height(), labelBounds.height(), Qt::TextDontClip | Qt::AlignCenter, label); + painter->setTransform(oldTransform); + } + else if (type == QCPAxis::atTop) + painter->drawText(origin.x(), origin.y()-margin-labelBounds.height(), axisRect.width(), labelBounds.height(), Qt::TextDontClip | Qt::AlignCenter, label); + else if (type == QCPAxis::atBottom) + painter->drawText(origin.x(), origin.y()+margin, axisRect.width(), labelBounds.height(), Qt::TextDontClip | Qt::AlignCenter, label); + } + + // set selection boxes: + int selectionTolerance = 0; + if (mParentPlot) + selectionTolerance = mParentPlot->selectionTolerance(); + else + qDebug() << Q_FUNC_INFO << "mParentPlot is null"; + int selAxisOutSize = qMax(qMax(tickLengthOut, subTickLengthOut), selectionTolerance); + int selAxisInSize = selectionTolerance; + int selTickLabelSize; + int selTickLabelOffset; + if (tickLabelSide == QCPAxis::lsOutside) + { + selTickLabelSize = (QCPAxis::orientation(type) == Qt::Horizontal ? tickLabelsSize.height() : tickLabelsSize.width()); + selTickLabelOffset = qMax(tickLengthOut, subTickLengthOut)+tickLabelPadding; + } else + { + selTickLabelSize = -(QCPAxis::orientation(type) == Qt::Horizontal ? tickLabelsSize.height() : tickLabelsSize.width()); + selTickLabelOffset = -(qMax(tickLengthIn, subTickLengthIn)+tickLabelPadding); + } + int selLabelSize = labelBounds.height(); + int selLabelOffset = qMax(tickLengthOut, subTickLengthOut)+(!tickLabels.isEmpty() && tickLabelSide == QCPAxis::lsOutside ? tickLabelPadding+selTickLabelSize : 0)+labelPadding; + if (type == QCPAxis::atLeft) + { + mAxisSelectionBox.setCoords(origin.x()-selAxisOutSize, axisRect.top(), origin.x()+selAxisInSize, axisRect.bottom()); + mTickLabelsSelectionBox.setCoords(origin.x()-selTickLabelOffset-selTickLabelSize, axisRect.top(), origin.x()-selTickLabelOffset, axisRect.bottom()); + mLabelSelectionBox.setCoords(origin.x()-selLabelOffset-selLabelSize, axisRect.top(), origin.x()-selLabelOffset, axisRect.bottom()); + } else if (type == QCPAxis::atRight) + { + mAxisSelectionBox.setCoords(origin.x()-selAxisInSize, axisRect.top(), origin.x()+selAxisOutSize, axisRect.bottom()); + mTickLabelsSelectionBox.setCoords(origin.x()+selTickLabelOffset+selTickLabelSize, axisRect.top(), origin.x()+selTickLabelOffset, axisRect.bottom()); + mLabelSelectionBox.setCoords(origin.x()+selLabelOffset+selLabelSize, axisRect.top(), origin.x()+selLabelOffset, axisRect.bottom()); + } else if (type == QCPAxis::atTop) + { + mAxisSelectionBox.setCoords(axisRect.left(), origin.y()-selAxisOutSize, axisRect.right(), origin.y()+selAxisInSize); + mTickLabelsSelectionBox.setCoords(axisRect.left(), origin.y()-selTickLabelOffset-selTickLabelSize, axisRect.right(), origin.y()-selTickLabelOffset); + mLabelSelectionBox.setCoords(axisRect.left(), origin.y()-selLabelOffset-selLabelSize, axisRect.right(), origin.y()-selLabelOffset); + } else if (type == QCPAxis::atBottom) + { + mAxisSelectionBox.setCoords(axisRect.left(), origin.y()-selAxisInSize, axisRect.right(), origin.y()+selAxisOutSize); + mTickLabelsSelectionBox.setCoords(axisRect.left(), origin.y()+selTickLabelOffset+selTickLabelSize, axisRect.right(), origin.y()+selTickLabelOffset); + mLabelSelectionBox.setCoords(axisRect.left(), origin.y()+selLabelOffset+selLabelSize, axisRect.right(), origin.y()+selLabelOffset); + } + mAxisSelectionBox = mAxisSelectionBox.normalized(); + mTickLabelsSelectionBox = mTickLabelsSelectionBox.normalized(); + mLabelSelectionBox = mLabelSelectionBox.normalized(); + // draw hitboxes for debug purposes: + //painter->setBrush(Qt::NoBrush); + //painter->drawRects(QVector() << mAxisSelectionBox << mTickLabelsSelectionBox << mLabelSelectionBox); +} + +/*! \internal + + Returns the size ("margin" in QCPAxisRect context, so measured perpendicular to the axis backbone + direction) needed to fit the axis. +*/ +int QCPAxisPainterPrivate::size() const +{ + int result = 0; + + // get length of tick marks pointing outwards: + if (!tickPositions.isEmpty()) + result += qMax(0, qMax(tickLengthOut, subTickLengthOut)); + + // calculate size of tick labels: + if (tickLabelSide == QCPAxis::lsOutside) + { + QSize tickLabelsSize(0, 0); + if (!tickLabels.isEmpty()) + { + for (int i=0; iplottingHints().testFlag(QCP::phCacheLabels) && !painter->modes().testFlag(QCPPainter::pmNoCaching)) // label caching enabled + { + CachedLabel *cachedLabel = mLabelCache.take(text); // attempt to get label from cache + if (!cachedLabel) // no cached label existed, create it + { + cachedLabel = new CachedLabel; + TickLabelData labelData = getTickLabelData(painter->font(), text); + cachedLabel->offset = getTickLabelDrawOffset(labelData)+labelData.rotatedTotalBounds.topLeft(); + cachedLabel->pixmap = QPixmap(labelData.rotatedTotalBounds.size()); + cachedLabel->pixmap.fill(Qt::transparent); + QCPPainter cachePainter(&cachedLabel->pixmap); + cachePainter.setPen(painter->pen()); + drawTickLabel(&cachePainter, -labelData.rotatedTotalBounds.topLeft().x(), -labelData.rotatedTotalBounds.topLeft().y(), labelData); + } + // if label would be partly clipped by widget border on sides, don't draw it (only for outside tick labels): + bool labelClippedByBorder = false; + if (tickLabelSide == QCPAxis::lsOutside) + { + if (QCPAxis::orientation(type) == Qt::Horizontal) + labelClippedByBorder = labelAnchor.x()+cachedLabel->offset.x()+cachedLabel->pixmap.width() > viewportRect.right() || labelAnchor.x()+cachedLabel->offset.x() < viewportRect.left(); + else + labelClippedByBorder = labelAnchor.y()+cachedLabel->offset.y()+cachedLabel->pixmap.height() > viewportRect.bottom() || labelAnchor.y()+cachedLabel->offset.y() < viewportRect.top(); + } + if (!labelClippedByBorder) + { + painter->drawPixmap(labelAnchor+cachedLabel->offset, cachedLabel->pixmap); + finalSize = cachedLabel->pixmap.size(); + } + mLabelCache.insert(text, cachedLabel); // return label to cache or insert for the first time if newly created + } else // label caching disabled, draw text directly on surface: + { + TickLabelData labelData = getTickLabelData(painter->font(), text); + QPointF finalPosition = labelAnchor + getTickLabelDrawOffset(labelData); + // if label would be partly clipped by widget border on sides, don't draw it (only for outside tick labels): + bool labelClippedByBorder = false; + if (tickLabelSide == QCPAxis::lsOutside) + { + if (QCPAxis::orientation(type) == Qt::Horizontal) + labelClippedByBorder = finalPosition.x()+(labelData.rotatedTotalBounds.width()+labelData.rotatedTotalBounds.left()) > viewportRect.right() || finalPosition.x()+labelData.rotatedTotalBounds.left() < viewportRect.left(); + else + labelClippedByBorder = finalPosition.y()+(labelData.rotatedTotalBounds.height()+labelData.rotatedTotalBounds.top()) > viewportRect.bottom() || finalPosition.y()+labelData.rotatedTotalBounds.top() < viewportRect.top(); + } + if (!labelClippedByBorder) + { + drawTickLabel(painter, finalPosition.x(), finalPosition.y(), labelData); + finalSize = labelData.rotatedTotalBounds.size(); + } + } + + // expand passed tickLabelsSize if current tick label is larger: + if (finalSize.width() > tickLabelsSize->width()) + tickLabelsSize->setWidth(finalSize.width()); + if (finalSize.height() > tickLabelsSize->height()) + tickLabelsSize->setHeight(finalSize.height()); +} + +/*! \internal + + This is a \ref placeTickLabel helper function. + + Draws the tick label specified in \a labelData with \a painter at the pixel positions \a x and \a + y. This function is used by \ref placeTickLabel to create new tick labels for the cache, or to + directly draw the labels on the QCustomPlot surface when label caching is disabled, i.e. when + QCP::phCacheLabels plotting hint is not set. +*/ +void QCPAxisPainterPrivate::drawTickLabel(QCPPainter *painter, double x, double y, const TickLabelData &labelData) const +{ + // backup painter settings that we're about to change: + QTransform oldTransform = painter->transform(); + QFont oldFont = painter->font(); + + // transform painter to position/rotation: + painter->translate(x, y); + if (!qFuzzyIsNull(tickLabelRotation)) + painter->rotate(tickLabelRotation); + + // draw text: + if (!labelData.expPart.isEmpty()) // indicator that beautiful powers must be used + { + painter->setFont(labelData.baseFont); + painter->drawText(0, 0, 0, 0, Qt::TextDontClip, labelData.basePart); + painter->setFont(labelData.expFont); + painter->drawText(labelData.baseBounds.width()+1, 0, labelData.expBounds.width(), labelData.expBounds.height(), Qt::TextDontClip, labelData.expPart); + } else + { + painter->setFont(labelData.baseFont); + painter->drawText(0, 0, labelData.totalBounds.width(), labelData.totalBounds.height(), Qt::TextDontClip | Qt::AlignHCenter, labelData.basePart); + } + + // reset painter settings to what it was before: + painter->setTransform(oldTransform); + painter->setFont(oldFont); +} + +/*! \internal + + This is a \ref placeTickLabel helper function. + + Transforms the passed \a text and \a font to a tickLabelData structure that can then be further + processed by \ref getTickLabelDrawOffset and \ref drawTickLabel. It splits the text into base and + exponent if necessary (member substituteExponent) and calculates appropriate bounding boxes. +*/ +QCPAxisPainterPrivate::TickLabelData QCPAxisPainterPrivate::getTickLabelData(const QFont &font, const QString &text) const +{ + TickLabelData result; + + // determine whether beautiful decimal powers should be used + bool useBeautifulPowers = false; + int ePos = -1; // first index of exponent part, text before that will be basePart, text until eLast will be expPart + int eLast = -1; // last index of exponent part, rest of text after this will be suffixPart + if (substituteExponent) + { + ePos = text.indexOf(QLatin1Char('e')); + if (ePos > 0 && text.at(ePos-1).isDigit()) + { + eLast = ePos; + while (eLast+1 < text.size() && (text.at(eLast+1) == QLatin1Char('+') || text.at(eLast+1) == QLatin1Char('-') || text.at(eLast+1).isDigit())) + ++eLast; + if (eLast > ePos) // only if also to right of 'e' is a digit/+/- interpret it as beautifiable power + useBeautifulPowers = true; + } + } + + // calculate text bounding rects and do string preparation for beautiful decimal powers: + result.baseFont = font; + if (result.baseFont.pointSizeF() > 0) // might return -1 if specified with setPixelSize, in that case we can't do correction in next line + result.baseFont.setPointSizeF(result.baseFont.pointSizeF()+0.05); // QFontMetrics.boundingRect has a bug for exact point sizes that make the results oscillate due to internal rounding + if (useBeautifulPowers) + { + // split text into parts of number/symbol that will be drawn normally and part that will be drawn as exponent: + result.basePart = text.left(ePos); + // in log scaling, we want to turn "1*10^n" into "10^n", else add multiplication sign and decimal base: + if (abbreviateDecimalPowers && result.basePart == QLatin1String("1")) + result.basePart = QLatin1String("10"); + else + result.basePart += (numberMultiplyCross ? QString(QChar(215)) : QString(QChar(183))) + QLatin1String("10"); + result.expPart = text.mid(ePos+1); + // clip "+" and leading zeros off expPart: + while (result.expPart.length() > 2 && result.expPart.at(1) == QLatin1Char('0')) // length > 2 so we leave one zero when numberFormatChar is 'e' + result.expPart.remove(1, 1); + if (!result.expPart.isEmpty() && result.expPart.at(0) == QLatin1Char('+')) + result.expPart.remove(0, 1); + // prepare smaller font for exponent: + result.expFont = font; + if (result.expFont.pointSize() > 0) + result.expFont.setPointSize(result.expFont.pointSize()*0.75); + else + result.expFont.setPixelSize(result.expFont.pixelSize()*0.75); + // calculate bounding rects of base part, exponent part and total one: + result.baseBounds = QFontMetrics(result.baseFont).boundingRect(0, 0, 0, 0, Qt::TextDontClip, result.basePart); + result.expBounds = QFontMetrics(result.expFont).boundingRect(0, 0, 0, 0, Qt::TextDontClip, result.expPart); + result.totalBounds = result.baseBounds.adjusted(0, 0, result.expBounds.width()+2, 0); // +2 consists of the 1 pixel spacing between base and exponent (see drawTickLabel) and an extra pixel to include AA + } else // useBeautifulPowers == false + { + result.basePart = text; + result.totalBounds = QFontMetrics(result.baseFont).boundingRect(0, 0, 0, 0, Qt::TextDontClip | Qt::AlignHCenter, result.basePart); + } + result.totalBounds.moveTopLeft(QPoint(0, 0)); // want bounding box aligned top left at origin, independent of how it was created, to make further processing simpler + + // calculate possibly different bounding rect after rotation: + result.rotatedTotalBounds = result.totalBounds; + if (!qFuzzyIsNull(tickLabelRotation)) + { + QTransform transform; + transform.rotate(tickLabelRotation); + result.rotatedTotalBounds = transform.mapRect(result.rotatedTotalBounds); + } + + return result; +} + +/*! \internal + + This is a \ref placeTickLabel helper function. + + Calculates the offset at which the top left corner of the specified tick label shall be drawn. + The offset is relative to a point right next to the tick the label belongs to. + + This function is thus responsible for e.g. centering tick labels under ticks and positioning them + appropriately when they are rotated. +*/ +QPointF QCPAxisPainterPrivate::getTickLabelDrawOffset(const TickLabelData &labelData) const +{ + /* + calculate label offset from base point at tick (non-trivial, for best visual appearance): short + explanation for bottom axis: The anchor, i.e. the point in the label that is placed + horizontally under the corresponding tick is always on the label side that is closer to the + axis (e.g. the left side of the text when we're rotating clockwise). On that side, the height + is halved and the resulting point is defined the anchor. This way, a 90 degree rotated text + will be centered under the tick (i.e. displaced horizontally by half its height). At the same + time, a 45 degree rotated text will "point toward" its tick, as is typical for rotated tick + labels. + */ + bool doRotation = !qFuzzyIsNull(tickLabelRotation); + bool flip = qFuzzyCompare(qAbs(tickLabelRotation), 90.0); // perfect +/-90 degree flip. Indicates vertical label centering on vertical axes. + double radians = tickLabelRotation/180.0*M_PI; + int x=0, y=0; + if ((type == QCPAxis::atLeft && tickLabelSide == QCPAxis::lsOutside) || (type == QCPAxis::atRight && tickLabelSide == QCPAxis::lsInside)) // Anchor at right side of tick label + { + if (doRotation) + { + if (tickLabelRotation > 0) + { + x = -qCos(radians)*labelData.totalBounds.width(); + y = flip ? -labelData.totalBounds.width()/2.0 : -qSin(radians)*labelData.totalBounds.width()-qCos(radians)*labelData.totalBounds.height()/2.0; + } else + { + x = -qCos(-radians)*labelData.totalBounds.width()-qSin(-radians)*labelData.totalBounds.height(); + y = flip ? +labelData.totalBounds.width()/2.0 : +qSin(-radians)*labelData.totalBounds.width()-qCos(-radians)*labelData.totalBounds.height()/2.0; + } + } else + { + x = -labelData.totalBounds.width(); + y = -labelData.totalBounds.height()/2.0; + } + } else if ((type == QCPAxis::atRight && tickLabelSide == QCPAxis::lsOutside) || (type == QCPAxis::atLeft && tickLabelSide == QCPAxis::lsInside)) // Anchor at left side of tick label + { + if (doRotation) + { + if (tickLabelRotation > 0) + { + x = +qSin(radians)*labelData.totalBounds.height(); + y = flip ? -labelData.totalBounds.width()/2.0 : -qCos(radians)*labelData.totalBounds.height()/2.0; + } else + { + x = 0; + y = flip ? +labelData.totalBounds.width()/2.0 : -qCos(-radians)*labelData.totalBounds.height()/2.0; + } + } else + { + x = 0; + y = -labelData.totalBounds.height()/2.0; + } + } else if ((type == QCPAxis::atTop && tickLabelSide == QCPAxis::lsOutside) || (type == QCPAxis::atBottom && tickLabelSide == QCPAxis::lsInside)) // Anchor at bottom side of tick label + { + if (doRotation) + { + if (tickLabelRotation > 0) + { + x = -qCos(radians)*labelData.totalBounds.width()+qSin(radians)*labelData.totalBounds.height()/2.0; + y = -qSin(radians)*labelData.totalBounds.width()-qCos(radians)*labelData.totalBounds.height(); + } else + { + x = -qSin(-radians)*labelData.totalBounds.height()/2.0; + y = -qCos(-radians)*labelData.totalBounds.height(); + } + } else + { + x = -labelData.totalBounds.width()/2.0; + y = -labelData.totalBounds.height(); + } + } else if ((type == QCPAxis::atBottom && tickLabelSide == QCPAxis::lsOutside) || (type == QCPAxis::atTop && tickLabelSide == QCPAxis::lsInside)) // Anchor at top side of tick label + { + if (doRotation) + { + if (tickLabelRotation > 0) + { + x = +qSin(radians)*labelData.totalBounds.height()/2.0; + y = 0; + } else + { + x = -qCos(-radians)*labelData.totalBounds.width()-qSin(-radians)*labelData.totalBounds.height()/2.0; + y = +qSin(-radians)*labelData.totalBounds.width(); + } + } else + { + x = -labelData.totalBounds.width()/2.0; + y = 0; + } + } + + return QPointF(x, y); +} + +/*! \internal + + Simulates the steps done by \ref placeTickLabel by calculating bounding boxes of the text label + to be drawn, depending on number format etc. Since only the largest tick label is wanted for the + margin calculation, the passed \a tickLabelsSize is only expanded, if it's currently set to a + smaller width/height. +*/ +void QCPAxisPainterPrivate::getMaxTickLabelSize(const QFont &font, const QString &text, QSize *tickLabelsSize) const +{ + // note: this function must return the same tick label sizes as the placeTickLabel function. + QSize finalSize; + if (mParentPlot->plottingHints().testFlag(QCP::phCacheLabels) && mLabelCache.contains(text)) // label caching enabled and have cached label + { + const CachedLabel *cachedLabel = mLabelCache.object(text); + finalSize = cachedLabel->pixmap.size(); + } else // label caching disabled or no label with this text cached: + { + TickLabelData labelData = getTickLabelData(font, text); + finalSize = labelData.rotatedTotalBounds.size(); + } + + // expand passed tickLabelsSize if current tick label is larger: + if (finalSize.width() > tickLabelsSize->width()) + tickLabelsSize->setWidth(finalSize.width()); + if (finalSize.height() > tickLabelsSize->height()) + tickLabelsSize->setHeight(finalSize.height()); +} + + +//////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////// QCPAbstractPlottable +//////////////////////////////////////////////////////////////////////////////////////////////////// + +/*! \class QCPAbstractPlottable + \brief The abstract base class for all data representing objects in a plot. + + It defines a very basic interface like name, pen, brush, visibility etc. Since this class is + abstract, it can't be instantiated. Use one of the subclasses or create a subclass yourself to + create new ways of displaying data (see "Creating own plottables" below). + + All further specifics are in the subclasses, for example: + \li A normal graph with possibly a line, scatter points and error bars: \ref QCPGraph + (typically created with \ref QCustomPlot::addGraph) + \li A parametric curve: \ref QCPCurve + \li A bar chart: \ref QCPBars + \li A statistical box plot: \ref QCPStatisticalBox + \li A color encoded two-dimensional map: \ref QCPColorMap + \li An OHLC/Candlestick chart: \ref QCPFinancial + + \section plottables-subclassing Creating own plottables + + To create an own plottable, you implement a subclass of QCPAbstractPlottable. These are the pure + virtual functions, you must implement: + \li \ref clearData + \li \ref selectTest + \li \ref draw + \li \ref drawLegendIcon + \li \ref getKeyRange + \li \ref getValueRange + + See the documentation of those functions for what they need to do. + + For drawing your plot, you can use the \ref coordsToPixels functions to translate a point in plot + coordinates to pixel coordinates. This function is quite convenient, because it takes the + orientation of the key and value axes into account for you (x and y are swapped when the key axis + is vertical and the value axis horizontal). If you are worried about performance (i.e. you need + to translate many points in a loop like QCPGraph), you can directly use \ref + QCPAxis::coordToPixel. However, you must then take care about the orientation of the axis + yourself. + + Here are some important members you inherit from QCPAbstractPlottable: + + + + + + + + + + + + + + + + + + + + + + + + + + +
    QCustomPlot *\b mParentPlotA pointer to the parent QCustomPlot instance. The parent plot is inferred from the axes that are passed in the constructor.
    QString \b mNameThe name of the plottable.
    QPen \b mPenThe generic pen of the plottable. You should use this pen for the most prominent data representing lines in the plottable (e.g QCPGraph uses this pen for its graph lines and scatters)
    QPen \b mSelectedPenThe generic pen that should be used when the plottable is selected (hint: \ref mainPen gives you the right pen, depending on selection state).
    QBrush \b mBrushThe generic brush of the plottable. You should use this brush for the most prominent fillable structures in the plottable (e.g. QCPGraph uses this brush to control filling under the graph)
    QBrush \b mSelectedBrushThe generic brush that should be used when the plottable is selected (hint: \ref mainBrush gives you the right brush, depending on selection state).
    QPointer\b mKeyAxis, \b mValueAxisThe key and value axes this plottable is attached to. Call their QCPAxis::coordToPixel functions to translate coordinates to pixels in either the key or value dimension. + Make sure to check whether the pointer is null before using it. If one of the axes is null, don't draw the plottable.
    bool \b mSelectedindicates whether the plottable is selected or not.
    +*/ + +/* start of documentation of pure virtual functions */ + +/*! \fn void QCPAbstractPlottable::clearData() = 0 + Clears all data in the plottable. +*/ + +/*! \fn void QCPAbstractPlottable::drawLegendIcon(QCPPainter *painter, const QRect &rect) const = 0 + \internal + + called by QCPLegend::draw (via QCPPlottableLegendItem::draw) to create a graphical representation + of this plottable inside \a rect, next to the plottable name. + + The passed \a painter has its cliprect set to \a rect, so painting outside of \a rect won't + appear outside the legend icon border. +*/ + +/*! \fn QCPRange QCPAbstractPlottable::getKeyRange(bool &foundRange, SignDomain inSignDomain) const = 0 + \internal + + called by rescaleAxes functions to get the full data key bounds. For logarithmic plots, one can + set \a inSignDomain to either \ref sdNegative or \ref sdPositive in order to restrict the + returned range to that sign domain. E.g. when only negative range is wanted, set \a inSignDomain + to \ref sdNegative and all positive points will be ignored for range calculation. For no + restriction, just set \a inSignDomain to \ref sdBoth (default). \a foundRange is an output + parameter that indicates whether a range could be found or not. If this is false, you shouldn't + use the returned range (e.g. no points in data). + + Note that \a foundRange is not the same as \ref QCPRange::validRange, since the range returned by + this function may have size zero, which wouldn't count as a valid range. + + \see rescaleAxes, getValueRange +*/ + +/*! \fn QCPRange QCPAbstractPlottable::getValueRange(bool &foundRange, SignDomain inSignDomain) const = 0 + \internal + + called by rescaleAxes functions to get the full data value bounds. For logarithmic plots, one can + set \a inSignDomain to either \ref sdNegative or \ref sdPositive in order to restrict the + returned range to that sign domain. E.g. when only negative range is wanted, set \a inSignDomain + to \ref sdNegative and all positive points will be ignored for range calculation. For no + restriction, just set \a inSignDomain to \ref sdBoth (default). \a foundRange is an output + parameter that indicates whether a range could be found or not. If this is false, you shouldn't + use the returned range (e.g. no points in data). + + Note that \a foundRange is not the same as \ref QCPRange::validRange, since the range returned by + this function may have size zero, which wouldn't count as a valid range. + + \see rescaleAxes, getKeyRange +*/ + +/* end of documentation of pure virtual functions */ +/* start of documentation of signals */ + +/*! \fn void QCPAbstractPlottable::selectionChanged(bool selected) + + This signal is emitted when the selection state of this plottable has changed, either by user + interaction or by a direct call to \ref setSelected. +*/ + +/*! \fn void QCPAbstractPlottable::selectableChanged(bool selectable); + + This signal is emitted when the selectability of this plottable has changed. + + \see setSelectable +*/ + +/* end of documentation of signals */ + +/*! + Constructs an abstract plottable which uses \a keyAxis as its key axis ("x") and \a valueAxis as + its value axis ("y"). \a keyAxis and \a valueAxis must reside in the same QCustomPlot instance + and have perpendicular orientations. If either of these restrictions is violated, a corresponding + message is printed to the debug output (qDebug), the construction is not aborted, though. + + Since QCPAbstractPlottable is an abstract class that defines the basic interface to plottables, + it can't be directly instantiated. + + You probably want one of the subclasses like \ref QCPGraph or \ref QCPCurve instead. +*/ +QCPAbstractPlottable::QCPAbstractPlottable(QCPAxis *keyAxis, QCPAxis *valueAxis) : + QCPLayerable(keyAxis->parentPlot(), QString(), keyAxis->axisRect()), + mName(), + mAntialiasedFill(true), + mAntialiasedScatters(true), + mAntialiasedErrorBars(false), + mPen(Qt::black), + mSelectedPen(Qt::black), + mBrush(Qt::NoBrush), + mSelectedBrush(Qt::NoBrush), + mKeyAxis(keyAxis), + mValueAxis(valueAxis), + mSelectable(true), + mSelected(false) +{ + if (keyAxis->parentPlot() != valueAxis->parentPlot()) + qDebug() << Q_FUNC_INFO << "Parent plot of keyAxis is not the same as that of valueAxis."; + if (keyAxis->orientation() == valueAxis->orientation()) + qDebug() << Q_FUNC_INFO << "keyAxis and valueAxis must be orthogonal to each other."; +} + +/*! + The name is the textual representation of this plottable as it is displayed in the legend + (\ref QCPLegend). It may contain any UTF-8 characters, including newlines. +*/ +void QCPAbstractPlottable::setName(const QString &name) +{ + mName = name; +} + +/*! + Sets whether fills of this plottable are drawn antialiased or not. + + Note that this setting may be overridden by \ref QCustomPlot::setAntialiasedElements and \ref + QCustomPlot::setNotAntialiasedElements. +*/ +void QCPAbstractPlottable::setAntialiasedFill(bool enabled) +{ + mAntialiasedFill = enabled; +} + +/*! + Sets whether the scatter symbols of this plottable are drawn antialiased or not. + + Note that this setting may be overridden by \ref QCustomPlot::setAntialiasedElements and \ref + QCustomPlot::setNotAntialiasedElements. +*/ +void QCPAbstractPlottable::setAntialiasedScatters(bool enabled) +{ + mAntialiasedScatters = enabled; +} + +/*! + Sets whether the error bars of this plottable are drawn antialiased or not. + + Note that this setting may be overridden by \ref QCustomPlot::setAntialiasedElements and \ref + QCustomPlot::setNotAntialiasedElements. +*/ +void QCPAbstractPlottable::setAntialiasedErrorBars(bool enabled) +{ + mAntialiasedErrorBars = enabled; +} + + +/*! + The pen is used to draw basic lines that make up the plottable representation in the + plot. + + For example, the \ref QCPGraph subclass draws its graph lines with this pen. + + \see setBrush +*/ +void QCPAbstractPlottable::setPen(const QPen &pen) +{ + mPen = pen; +} + +/*! + When the plottable is selected, this pen is used to draw basic lines instead of the normal + pen set via \ref setPen. + + \see setSelected, setSelectable, setSelectedBrush, selectTest +*/ +void QCPAbstractPlottable::setSelectedPen(const QPen &pen) +{ + mSelectedPen = pen; +} + +/*! + The brush is used to draw basic fills of the plottable representation in the + plot. The Fill can be a color, gradient or texture, see the usage of QBrush. + + For example, the \ref QCPGraph subclass draws the fill under the graph with this brush, when + it's not set to Qt::NoBrush. + + \see setPen +*/ +void QCPAbstractPlottable::setBrush(const QBrush &brush) +{ + mBrush = brush; +} + +/*! + When the plottable is selected, this brush is used to draw fills instead of the normal + brush set via \ref setBrush. + + \see setSelected, setSelectable, setSelectedPen, selectTest +*/ +void QCPAbstractPlottable::setSelectedBrush(const QBrush &brush) +{ + mSelectedBrush = brush; +} + +/*! + The key axis of a plottable can be set to any axis of a QCustomPlot, as long as it is orthogonal + to the plottable's value axis. This function performs no checks to make sure this is the case. + The typical mathematical choice is to use the x-axis (QCustomPlot::xAxis) as key axis and the + y-axis (QCustomPlot::yAxis) as value axis. + + Normally, the key and value axes are set in the constructor of the plottable (or \ref + QCustomPlot::addGraph when working with QCPGraphs through the dedicated graph interface). + + \see setValueAxis +*/ +void QCPAbstractPlottable::setKeyAxis(QCPAxis *axis) +{ + mKeyAxis = axis; +} + +/*! + The value axis of a plottable can be set to any axis of a QCustomPlot, as long as it is + orthogonal to the plottable's key axis. This function performs no checks to make sure this is the + case. The typical mathematical choice is to use the x-axis (QCustomPlot::xAxis) as key axis and + the y-axis (QCustomPlot::yAxis) as value axis. + + Normally, the key and value axes are set in the constructor of the plottable (or \ref + QCustomPlot::addGraph when working with QCPGraphs through the dedicated graph interface). + + \see setKeyAxis +*/ +void QCPAbstractPlottable::setValueAxis(QCPAxis *axis) +{ + mValueAxis = axis; +} + +/*! + Sets whether the user can (de-)select this plottable by clicking on the QCustomPlot surface. + (When \ref QCustomPlot::setInteractions contains iSelectPlottables.) + + However, even when \a selectable was set to false, it is possible to set the selection manually, + by calling \ref setSelected directly. + + \see setSelected +*/ +void QCPAbstractPlottable::setSelectable(bool selectable) +{ + if (mSelectable != selectable) + { + mSelectable = selectable; + emit selectableChanged(mSelectable); + } +} + +/*! + Sets whether this plottable is selected or not. When selected, it uses a different pen and brush + to draw its lines and fills, see \ref setSelectedPen and \ref setSelectedBrush. + + The entire selection mechanism for plottables is handled automatically when \ref + QCustomPlot::setInteractions contains iSelectPlottables. You only need to call this function when + you wish to change the selection state manually. + + This function can change the selection state even when \ref setSelectable was set to false. + + emits the \ref selectionChanged signal when \a selected is different from the previous selection state. + + \see setSelectable, selectTest +*/ +void QCPAbstractPlottable::setSelected(bool selected) +{ + if (mSelected != selected) + { + mSelected = selected; + emit selectionChanged(mSelected); + } +} + +/*! + Rescales the key and value axes associated with this plottable to contain all displayed data, so + the whole plottable is visible. If the scaling of an axis is logarithmic, rescaleAxes will make + sure not to rescale to an illegal range i.e. a range containing different signs and/or zero. + Instead it will stay in the current sign domain and ignore all parts of the plottable that lie + outside of that domain. + + \a onlyEnlarge makes sure the ranges are only expanded, never reduced. So it's possible to show + multiple plottables in their entirety by multiple calls to rescaleAxes where the first call has + \a onlyEnlarge set to false (the default), and all subsequent set to true. + + \see rescaleKeyAxis, rescaleValueAxis, QCustomPlot::rescaleAxes, QCPAxis::rescale +*/ +void QCPAbstractPlottable::rescaleAxes(bool onlyEnlarge) const +{ + rescaleKeyAxis(onlyEnlarge); + rescaleValueAxis(onlyEnlarge); +} + +/*! + Rescales the key axis of the plottable so the whole plottable is visible. + + See \ref rescaleAxes for detailed behaviour. +*/ +void QCPAbstractPlottable::rescaleKeyAxis(bool onlyEnlarge) const +{ + QCPAxis *keyAxis = mKeyAxis.data(); + if (!keyAxis) { qDebug() << Q_FUNC_INFO << "invalid key axis"; return; } + + SignDomain signDomain = sdBoth; + if (keyAxis->scaleType() == QCPAxis::stLogarithmic) + signDomain = (keyAxis->range().upper < 0 ? sdNegative : sdPositive); + + bool foundRange; + QCPRange newRange = getKeyRange(foundRange, signDomain); + if (foundRange) + { + if (onlyEnlarge) + newRange.expand(keyAxis->range()); + if (!QCPRange::validRange(newRange)) // likely due to range being zero (plottable has only constant data in this axis dimension), shift current range to at least center the plottable + { + double center = (newRange.lower+newRange.upper)*0.5; // upper and lower should be equal anyway, but just to make sure, incase validRange returned false for other reason + if (keyAxis->scaleType() == QCPAxis::stLinear) + { + newRange.lower = center-keyAxis->range().size()/2.0; + newRange.upper = center+keyAxis->range().size()/2.0; + } else // scaleType() == stLogarithmic + { + newRange.lower = center/qSqrt(keyAxis->range().upper/keyAxis->range().lower); + newRange.upper = center*qSqrt(keyAxis->range().upper/keyAxis->range().lower); + } + } + keyAxis->setRange(newRange); + } +} + +/*! + Rescales the value axis of the plottable so the whole plottable is visible. + + Returns true if the axis was actually scaled. This might not be the case if this plottable has an + invalid range, e.g. because it has no data points. + + See \ref rescaleAxes for detailed behaviour. +*/ +void QCPAbstractPlottable::rescaleValueAxis(bool onlyEnlarge) const +{ + QCPAxis *valueAxis = mValueAxis.data(); + if (!valueAxis) { qDebug() << Q_FUNC_INFO << "invalid value axis"; return; } + + SignDomain signDomain = sdBoth; + if (valueAxis->scaleType() == QCPAxis::stLogarithmic) + signDomain = (valueAxis->range().upper < 0 ? sdNegative : sdPositive); + + bool foundRange; + QCPRange newRange = getValueRange(foundRange, signDomain); + if (foundRange) + { + if (onlyEnlarge) + newRange.expand(valueAxis->range()); + if (!QCPRange::validRange(newRange)) // likely due to range being zero (plottable has only constant data in this axis dimension), shift current range to at least center the plottable + { + double center = (newRange.lower+newRange.upper)*0.5; // upper and lower should be equal anyway, but just to make sure, incase validRange returned false for other reason + if (valueAxis->scaleType() == QCPAxis::stLinear) + { + newRange.lower = center-valueAxis->range().size()/2.0; + newRange.upper = center+valueAxis->range().size()/2.0; + } else // scaleType() == stLogarithmic + { + newRange.lower = center/qSqrt(valueAxis->range().upper/valueAxis->range().lower); + newRange.upper = center*qSqrt(valueAxis->range().upper/valueAxis->range().lower); + } + } + valueAxis->setRange(newRange); + } +} + +/*! + Adds this plottable to the legend of the parent QCustomPlot (QCustomPlot::legend). + + Normally, a QCPPlottableLegendItem is created and inserted into the legend. If the plottable + needs a more specialized representation in the legend, this function will take this into account + and instead create the specialized subclass of QCPAbstractLegendItem. + + Returns true on success, i.e. when the legend exists and a legend item associated with this plottable isn't already in + the legend. + + \see removeFromLegend, QCPLegend::addItem +*/ +bool QCPAbstractPlottable::addToLegend() +{ + if (!mParentPlot || !mParentPlot->legend) + return false; + + if (!mParentPlot->legend->hasItemWithPlottable(this)) + { + mParentPlot->legend->addItem(new QCPPlottableLegendItem(mParentPlot->legend, this)); + return true; + } else + return false; +} + +/*! + Removes the plottable from the legend of the parent QCustomPlot. This means the + QCPAbstractLegendItem (usually a QCPPlottableLegendItem) that is associated with this plottable + is removed. + + Returns true on success, i.e. if the legend exists and a legend item associated with this + plottable was found and removed. + + \see addToLegend, QCPLegend::removeItem +*/ +bool QCPAbstractPlottable::removeFromLegend() const +{ + if (!mParentPlot->legend) + return false; + + if (QCPPlottableLegendItem *lip = mParentPlot->legend->itemWithPlottable(this)) + return mParentPlot->legend->removeItem(lip); + else + return false; +} + +/* inherits documentation from base class */ +QRect QCPAbstractPlottable::clipRect() const +{ + if (mKeyAxis && mValueAxis) + return mKeyAxis.data()->axisRect()->rect() & mValueAxis.data()->axisRect()->rect(); + else + return QRect(); +} + +/* inherits documentation from base class */ +QCP::Interaction QCPAbstractPlottable::selectionCategory() const +{ + return QCP::iSelectPlottables; +} + +/*! \internal + + Convenience function for transforming a key/value pair to pixels on the QCustomPlot surface, + taking the orientations of the axes associated with this plottable into account (e.g. whether key + represents x or y). + + \a key and \a value are transformed to the coodinates in pixels and are written to \a x and \a y. + + \see pixelsToCoords, QCPAxis::coordToPixel +*/ +void QCPAbstractPlottable::coordsToPixels(double key, double value, double &x, double &y) const +{ + QCPAxis *keyAxis = mKeyAxis.data(); + QCPAxis *valueAxis = mValueAxis.data(); + if (!keyAxis || !valueAxis) { qDebug() << Q_FUNC_INFO << "invalid key or value axis"; return; } + + if (keyAxis->orientation() == Qt::Horizontal) + { + x = keyAxis->coordToPixel(key); + y = valueAxis->coordToPixel(value); + } else + { + y = keyAxis->coordToPixel(key); + x = valueAxis->coordToPixel(value); + } +} + +/*! \internal + \overload + + Returns the input as pixel coordinates in a QPointF. +*/ +const QPointF QCPAbstractPlottable::coordsToPixels(double key, double value) const +{ + QCPAxis *keyAxis = mKeyAxis.data(); + QCPAxis *valueAxis = mValueAxis.data(); + if (!keyAxis || !valueAxis) { qDebug() << Q_FUNC_INFO << "invalid key or value axis"; return QPointF(); } + + if (keyAxis->orientation() == Qt::Horizontal) + return QPointF(keyAxis->coordToPixel(key), valueAxis->coordToPixel(value)); + else + return QPointF(valueAxis->coordToPixel(value), keyAxis->coordToPixel(key)); +} + +/*! \internal + + Convenience function for transforming a x/y pixel pair on the QCustomPlot surface to plot coordinates, + taking the orientations of the axes associated with this plottable into account (e.g. whether key + represents x or y). + + \a x and \a y are transformed to the plot coodinates and are written to \a key and \a value. + + \see coordsToPixels, QCPAxis::coordToPixel +*/ +void QCPAbstractPlottable::pixelsToCoords(double x, double y, double &key, double &value) const +{ + QCPAxis *keyAxis = mKeyAxis.data(); + QCPAxis *valueAxis = mValueAxis.data(); + if (!keyAxis || !valueAxis) { qDebug() << Q_FUNC_INFO << "invalid key or value axis"; return; } + + if (keyAxis->orientation() == Qt::Horizontal) + { + key = keyAxis->pixelToCoord(x); + value = valueAxis->pixelToCoord(y); + } else + { + key = keyAxis->pixelToCoord(y); + value = valueAxis->pixelToCoord(x); + } +} + +/*! \internal + \overload + + Returns the pixel input \a pixelPos as plot coordinates \a key and \a value. +*/ +void QCPAbstractPlottable::pixelsToCoords(const QPointF &pixelPos, double &key, double &value) const +{ + pixelsToCoords(pixelPos.x(), pixelPos.y(), key, value); +} + +/*! \internal + + Returns the pen that should be used for drawing lines of the plottable. Returns mPen when the + graph is not selected and mSelectedPen when it is. +*/ +QPen QCPAbstractPlottable::mainPen() const +{ + return mSelected ? mSelectedPen : mPen; +} + +/*! \internal + + Returns the brush that should be used for drawing fills of the plottable. Returns mBrush when the + graph is not selected and mSelectedBrush when it is. +*/ +QBrush QCPAbstractPlottable::mainBrush() const +{ + return mSelected ? mSelectedBrush : mBrush; +} + +/*! \internal + + A convenience function to easily set the QPainter::Antialiased hint on the provided \a painter + before drawing plottable lines. + + This is the antialiasing state the painter passed to the \ref draw method is in by default. + + This function takes into account the local setting of the antialiasing flag as well as the + overrides set with \ref QCustomPlot::setAntialiasedElements and \ref + QCustomPlot::setNotAntialiasedElements. + + \see setAntialiased, applyFillAntialiasingHint, applyScattersAntialiasingHint, applyErrorBarsAntialiasingHint +*/ +void QCPAbstractPlottable::applyDefaultAntialiasingHint(QCPPainter *painter) const +{ + applyAntialiasingHint(painter, mAntialiased, QCP::aePlottables); +} + +/*! \internal + + A convenience function to easily set the QPainter::Antialiased hint on the provided \a painter + before drawing plottable fills. + + This function takes into account the local setting of the antialiasing flag as well as the + overrides set with \ref QCustomPlot::setAntialiasedElements and \ref + QCustomPlot::setNotAntialiasedElements. + + \see setAntialiased, applyDefaultAntialiasingHint, applyScattersAntialiasingHint, applyErrorBarsAntialiasingHint +*/ +void QCPAbstractPlottable::applyFillAntialiasingHint(QCPPainter *painter) const +{ + applyAntialiasingHint(painter, mAntialiasedFill, QCP::aeFills); +} + +/*! \internal + + A convenience function to easily set the QPainter::Antialiased hint on the provided \a painter + before drawing plottable scatter points. + + This function takes into account the local setting of the antialiasing flag as well as the + overrides set with \ref QCustomPlot::setAntialiasedElements and \ref + QCustomPlot::setNotAntialiasedElements. + + \see setAntialiased, applyFillAntialiasingHint, applyDefaultAntialiasingHint, applyErrorBarsAntialiasingHint +*/ +void QCPAbstractPlottable::applyScattersAntialiasingHint(QCPPainter *painter) const +{ + applyAntialiasingHint(painter, mAntialiasedScatters, QCP::aeScatters); +} + +/*! \internal + + A convenience function to easily set the QPainter::Antialiased hint on the provided \a painter + before drawing plottable error bars. + + This function takes into account the local setting of the antialiasing flag as well as the + overrides set with \ref QCustomPlot::setAntialiasedElements and \ref + QCustomPlot::setNotAntialiasedElements. + + \see setAntialiased, applyFillAntialiasingHint, applyScattersAntialiasingHint, applyDefaultAntialiasingHint +*/ +void QCPAbstractPlottable::applyErrorBarsAntialiasingHint(QCPPainter *painter) const +{ + applyAntialiasingHint(painter, mAntialiasedErrorBars, QCP::aeErrorBars); +} + +/*! \internal + + Finds the shortest squared distance of \a point to the line segment defined by \a start and \a + end. + + This function may be used to help with the implementation of the \ref selectTest function for + specific plottables. + + \note This function is identical to QCPAbstractItem::distSqrToLine +*/ +double QCPAbstractPlottable::distSqrToLine(const QPointF &start, const QPointF &end, const QPointF &point) const +{ + QVector2D a(start); + QVector2D b(end); + QVector2D p(point); + QVector2D v(b-a); + + double vLengthSqr = v.lengthSquared(); + if (!qFuzzyIsNull(vLengthSqr)) + { + double mu = QVector2D::dotProduct(p-a, v)/vLengthSqr; + if (mu < 0) + return (a-p).lengthSquared(); + else if (mu > 1) + return (b-p).lengthSquared(); + else + return ((a + mu*v)-p).lengthSquared(); + } else + return (a-p).lengthSquared(); +} + +/* inherits documentation from base class */ +void QCPAbstractPlottable::selectEvent(QMouseEvent *event, bool additive, const QVariant &details, bool *selectionStateChanged) +{ + Q_UNUSED(event) + Q_UNUSED(details) + if (mSelectable) + { + bool selBefore = mSelected; + setSelected(additive ? !mSelected : true); + if (selectionStateChanged) + *selectionStateChanged = mSelected != selBefore; + } +} + +/* inherits documentation from base class */ +void QCPAbstractPlottable::deselectEvent(bool *selectionStateChanged) +{ + if (mSelectable) + { + bool selBefore = mSelected; + setSelected(false); + if (selectionStateChanged) + *selectionStateChanged = mSelected != selBefore; + } +} + + +//////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////// QCPItemAnchor +//////////////////////////////////////////////////////////////////////////////////////////////////// + +/*! \class QCPItemAnchor + \brief An anchor of an item to which positions can be attached to. + + An item (QCPAbstractItem) may have one or more anchors. Unlike QCPItemPosition, an anchor doesn't + control anything on its item, but provides a way to tie other items via their positions to the + anchor. + + For example, a QCPItemRect is defined by its positions \a topLeft and \a bottomRight. + Additionally it has various anchors like \a top, \a topRight or \a bottomLeft etc. So you can + attach the \a start (which is a QCPItemPosition) of a QCPItemLine to one of the anchors by + calling QCPItemPosition::setParentAnchor on \a start, passing the wanted anchor of the + QCPItemRect. This way the start of the line will now always follow the respective anchor location + on the rect item. + + Note that QCPItemPosition derives from QCPItemAnchor, so every position can also serve as an + anchor to other positions. + + To learn how to provide anchors in your own item subclasses, see the subclassing section of the + QCPAbstractItem documentation. +*/ + +/* start documentation of inline functions */ + +/*! \fn virtual QCPItemPosition *QCPItemAnchor::toQCPItemPosition() + + Returns 0 if this instance is merely a QCPItemAnchor, and a valid pointer of type QCPItemPosition* if + it actually is a QCPItemPosition (which is a subclass of QCPItemAnchor). + + This safe downcast functionality could also be achieved with a dynamic_cast. However, QCustomPlot avoids + dynamic_cast to work with projects that don't have RTTI support enabled (e.g. -fno-rtti flag with + gcc compiler). +*/ + +/* end documentation of inline functions */ + +/*! + Creates a new QCPItemAnchor. You shouldn't create QCPItemAnchor instances directly, even if + you want to make a new item subclass. Use \ref QCPAbstractItem::createAnchor instead, as + explained in the subclassing section of the QCPAbstractItem documentation. +*/ +QCPItemAnchor::QCPItemAnchor(QCustomPlot *parentPlot, QCPAbstractItem *parentItem, const QString name, int anchorId) : + mName(name), + mParentPlot(parentPlot), + mParentItem(parentItem), + mAnchorId(anchorId) +{ +} + +QCPItemAnchor::~QCPItemAnchor() +{ + // unregister as parent at children: + foreach (QCPItemPosition *child, mChildrenX.toList()) + { + if (child->parentAnchorX() == this) + child->setParentAnchorX(0); // this acts back on this anchor and child removes itself from mChildrenX + } + foreach (QCPItemPosition *child, mChildrenY.toList()) + { + if (child->parentAnchorY() == this) + child->setParentAnchorY(0); // this acts back on this anchor and child removes itself from mChildrenY + } +} + +/*! + Returns the final absolute pixel position of the QCPItemAnchor on the QCustomPlot surface. + + The pixel information is internally retrieved via QCPAbstractItem::anchorPixelPosition of the + parent item, QCPItemAnchor is just an intermediary. +*/ +QPointF QCPItemAnchor::pixelPoint() const +{ + if (mParentItem) + { + if (mAnchorId > -1) + { + return mParentItem->anchorPixelPoint(mAnchorId); + } else + { + qDebug() << Q_FUNC_INFO << "no valid anchor id set:" << mAnchorId; + return QPointF(); + } + } else + { + qDebug() << Q_FUNC_INFO << "no parent item set"; + return QPointF(); + } +} + +/*! \internal + + Adds \a pos to the childX list of this anchor, which keeps track of which children use this + anchor as parent anchor for the respective coordinate. This is necessary to notify the children + prior to destruction of the anchor. + + Note that this function does not change the parent setting in \a pos. +*/ +void QCPItemAnchor::addChildX(QCPItemPosition *pos) +{ + if (!mChildrenX.contains(pos)) + mChildrenX.insert(pos); + else + qDebug() << Q_FUNC_INFO << "provided pos is child already" << reinterpret_cast(pos); +} + +/*! \internal + + Removes \a pos from the childX list of this anchor. + + Note that this function does not change the parent setting in \a pos. +*/ +void QCPItemAnchor::removeChildX(QCPItemPosition *pos) +{ + if (!mChildrenX.remove(pos)) + qDebug() << Q_FUNC_INFO << "provided pos isn't child" << reinterpret_cast(pos); +} + +/*! \internal + + Adds \a pos to the childY list of this anchor, which keeps track of which children use this + anchor as parent anchor for the respective coordinate. This is necessary to notify the children + prior to destruction of the anchor. + + Note that this function does not change the parent setting in \a pos. +*/ +void QCPItemAnchor::addChildY(QCPItemPosition *pos) +{ + if (!mChildrenY.contains(pos)) + mChildrenY.insert(pos); + else + qDebug() << Q_FUNC_INFO << "provided pos is child already" << reinterpret_cast(pos); +} + +/*! \internal + + Removes \a pos from the childY list of this anchor. + + Note that this function does not change the parent setting in \a pos. +*/ +void QCPItemAnchor::removeChildY(QCPItemPosition *pos) +{ + if (!mChildrenY.remove(pos)) + qDebug() << Q_FUNC_INFO << "provided pos isn't child" << reinterpret_cast(pos); +} + + +//////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////// QCPItemPosition +//////////////////////////////////////////////////////////////////////////////////////////////////// + +/*! \class QCPItemPosition + \brief Manages the position of an item. + + Every item has at least one public QCPItemPosition member pointer which provides ways to position the + item on the QCustomPlot surface. Some items have multiple positions, for example QCPItemRect has two: + \a topLeft and \a bottomRight. + + QCPItemPosition has a type (\ref PositionType) that can be set with \ref setType. This type + defines how coordinates passed to \ref setCoords are to be interpreted, e.g. as absolute pixel + coordinates, as plot coordinates of certain axes, etc. For more advanced plots it is also + possible to assign different types per X/Y coordinate of the position (see \ref setTypeX, \ref + setTypeY). This way an item could be positioned at a fixed pixel distance from the top in the Y + direction, while following a plot coordinate in the X direction. + + A QCPItemPosition may have a parent QCPItemAnchor, see \ref setParentAnchor. This way you can tie + multiple items together. If the QCPItemPosition has a parent, its coordinates (\ref setCoords) + are considered to be absolute pixels in the reference frame of the parent anchor, where (0, 0) + means directly ontop of the parent anchor. For example, You could attach the \a start position of + a QCPItemLine to the \a bottom anchor of a QCPItemText to make the starting point of the line + always be centered under the text label, no matter where the text is moved to. For more advanced + plots, it is possible to assign different parent anchors per X/Y coordinate of the position, see + \ref setParentAnchorX, \ref setParentAnchorY. This way an item could follow another item in the X + direction but stay at a fixed position in the Y direction. Or even follow item A in X, and item B + in Y. + + Note that every QCPItemPosition inherits from QCPItemAnchor and thus can itself be used as parent + anchor for other positions. + + To set the apparent pixel position on the QCustomPlot surface directly, use \ref setPixelPoint. This + works no matter what type this QCPItemPosition is or what parent-child situation it is in, as \ref + setPixelPoint transforms the coordinates appropriately, to make the position appear at the specified + pixel values. +*/ + +/* start documentation of inline functions */ + +/*! \fn QCPItemPosition::PositionType *QCPItemPosition::type() const + + Returns the current position type. + + If different types were set for X and Y (\ref setTypeX, \ref setTypeY), this method returns the + type of the X coordinate. In that case rather use \a typeX() and \a typeY(). + + \see setType +*/ + +/*! \fn QCPItemAnchor *QCPItemPosition::parentAnchor() const + + Returns the current parent anchor. + + If different parent anchors were set for X and Y (\ref setParentAnchorX, \ref setParentAnchorY), + this method returns the parent anchor of the Y coordinate. In that case rather use \a + parentAnchorX() and \a parentAnchorY(). + + \see setParentAnchor +*/ + +/* end documentation of inline functions */ + +/*! + Creates a new QCPItemPosition. You shouldn't create QCPItemPosition instances directly, even if + you want to make a new item subclass. Use \ref QCPAbstractItem::createPosition instead, as + explained in the subclassing section of the QCPAbstractItem documentation. +*/ +QCPItemPosition::QCPItemPosition(QCustomPlot *parentPlot, QCPAbstractItem *parentItem, const QString name) : + QCPItemAnchor(parentPlot, parentItem, name), + mPositionTypeX(ptAbsolute), + mPositionTypeY(ptAbsolute), + mKey(0), + mValue(0), + mParentAnchorX(0), + mParentAnchorY(0) +{ +} + +QCPItemPosition::~QCPItemPosition() +{ + // unregister as parent at children: + // Note: this is done in ~QCPItemAnchor again, but it's important QCPItemPosition does it itself, because only then + // the setParentAnchor(0) call the correct QCPItemPosition::pixelPoint function instead of QCPItemAnchor::pixelPoint + foreach (QCPItemPosition *child, mChildrenX.toList()) + { + if (child->parentAnchorX() == this) + child->setParentAnchorX(0); // this acts back on this anchor and child removes itself from mChildrenX + } + foreach (QCPItemPosition *child, mChildrenY.toList()) + { + if (child->parentAnchorY() == this) + child->setParentAnchorY(0); // this acts back on this anchor and child removes itself from mChildrenY + } + // unregister as child in parent: + if (mParentAnchorX) + mParentAnchorX->removeChildX(this); + if (mParentAnchorY) + mParentAnchorY->removeChildY(this); +} + +/* can't make this a header inline function, because QPointer breaks with forward declared types, see QTBUG-29588 */ +QCPAxisRect *QCPItemPosition::axisRect() const +{ + return mAxisRect.data(); +} + +/*! + Sets the type of the position. The type defines how the coordinates passed to \ref setCoords + should be handled and how the QCPItemPosition should behave in the plot. + + The possible values for \a type can be separated in two main categories: + + \li The position is regarded as a point in plot coordinates. This corresponds to \ref ptPlotCoords + and requires two axes that define the plot coordinate system. They can be specified with \ref setAxes. + By default, the QCustomPlot's x- and yAxis are used. + + \li The position is fixed on the QCustomPlot surface, i.e. independent of axis ranges. This + corresponds to all other types, i.e. \ref ptAbsolute, \ref ptViewportRatio and \ref + ptAxisRectRatio. They differ only in the way the absolute position is described, see the + documentation of \ref PositionType for details. For \ref ptAxisRectRatio, note that you can specify + the axis rect with \ref setAxisRect. By default this is set to the main axis rect. + + Note that the position type \ref ptPlotCoords is only available (and sensible) when the position + has no parent anchor (\ref setParentAnchor). + + If the type is changed, the apparent pixel position on the plot is preserved. This means + the coordinates as retrieved with coords() and set with \ref setCoords may change in the process. + + This method sets the type for both X and Y directions. It is also possible to set different types + for X and Y, see \ref setTypeX, \ref setTypeY. +*/ +void QCPItemPosition::setType(QCPItemPosition::PositionType type) +{ + setTypeX(type); + setTypeY(type); +} + +/*! + This method sets the position type of the X coordinate to \a type. + + For a detailed description of what a position type is, see the documentation of \ref setType. + + \see setType, setTypeY +*/ +void QCPItemPosition::setTypeX(QCPItemPosition::PositionType type) +{ + if (mPositionTypeX != type) + { + // if switching from or to coordinate type that isn't valid (e.g. because axes or axis rect + // were deleted), don't try to recover the pixelPoint() because it would output a qDebug warning. + bool retainPixelPosition = true; + if ((mPositionTypeX == ptPlotCoords || type == ptPlotCoords) && (!mKeyAxis || !mValueAxis)) + retainPixelPosition = false; + if ((mPositionTypeX == ptAxisRectRatio || type == ptAxisRectRatio) && (!mAxisRect)) + retainPixelPosition = false; + + QPointF pixel; + if (retainPixelPosition) + pixel = pixelPoint(); + + mPositionTypeX = type; + + if (retainPixelPosition) + setPixelPoint(pixel); + } +} + +/*! + This method sets the position type of the Y coordinate to \a type. + + For a detailed description of what a position type is, see the documentation of \ref setType. + + \see setType, setTypeX +*/ +void QCPItemPosition::setTypeY(QCPItemPosition::PositionType type) +{ + if (mPositionTypeY != type) + { + // if switching from or to coordinate type that isn't valid (e.g. because axes or axis rect + // were deleted), don't try to recover the pixelPoint() because it would output a qDebug warning. + bool retainPixelPosition = true; + if ((mPositionTypeY == ptPlotCoords || type == ptPlotCoords) && (!mKeyAxis || !mValueAxis)) + retainPixelPosition = false; + if ((mPositionTypeY == ptAxisRectRatio || type == ptAxisRectRatio) && (!mAxisRect)) + retainPixelPosition = false; + + QPointF pixel; + if (retainPixelPosition) + pixel = pixelPoint(); + + mPositionTypeY = type; + + if (retainPixelPosition) + setPixelPoint(pixel); + } +} + +/*! + Sets the parent of this QCPItemPosition to \a parentAnchor. This means the position will now + follow any position changes of the anchor. The local coordinate system of positions with a parent + anchor always is absolute pixels, with (0, 0) being exactly on top of the parent anchor. (Hence + the type shouldn't be set to \ref ptPlotCoords for positions with parent anchors.) + + if \a keepPixelPosition is true, the current pixel position of the QCPItemPosition is preserved + during reparenting. If it's set to false, the coordinates are set to (0, 0), i.e. the position + will be exactly on top of the parent anchor. + + To remove this QCPItemPosition from any parent anchor, set \a parentAnchor to 0. + + If the QCPItemPosition previously had no parent and the type is \ref ptPlotCoords, the type is + set to \ref ptAbsolute, to keep the position in a valid state. + + This method sets the parent anchor for both X and Y directions. It is also possible to set + different parents for X and Y, see \ref setParentAnchorX, \ref setParentAnchorY. +*/ +bool QCPItemPosition::setParentAnchor(QCPItemAnchor *parentAnchor, bool keepPixelPosition) +{ + bool successX = setParentAnchorX(parentAnchor, keepPixelPosition); + bool successY = setParentAnchorY(parentAnchor, keepPixelPosition); + return successX && successY; +} + +/*! + This method sets the parent anchor of the X coordinate to \a parentAnchor. + + For a detailed description of what a parent anchor is, see the documentation of \ref setParentAnchor. + + \see setParentAnchor, setParentAnchorY +*/ +bool QCPItemPosition::setParentAnchorX(QCPItemAnchor *parentAnchor, bool keepPixelPosition) +{ + // make sure self is not assigned as parent: + if (parentAnchor == this) + { + qDebug() << Q_FUNC_INFO << "can't set self as parent anchor" << reinterpret_cast(parentAnchor); + return false; + } + // make sure no recursive parent-child-relationships are created: + QCPItemAnchor *currentParent = parentAnchor; + while (currentParent) + { + if (QCPItemPosition *currentParentPos = currentParent->toQCPItemPosition()) + { + // is a QCPItemPosition, might have further parent, so keep iterating + if (currentParentPos == this) + { + qDebug() << Q_FUNC_INFO << "can't create recursive parent-child-relationship" << reinterpret_cast(parentAnchor); + return false; + } + currentParent = currentParentPos->parentAnchorX(); + } else + { + // is a QCPItemAnchor, can't have further parent. Now make sure the parent items aren't the + // same, to prevent a position being child of an anchor which itself depends on the position, + // because they're both on the same item: + if (currentParent->mParentItem == mParentItem) + { + qDebug() << Q_FUNC_INFO << "can't set parent to be an anchor which itself depends on this position" << reinterpret_cast(parentAnchor); + return false; + } + break; + } + } + + // if previously no parent set and PosType is still ptPlotCoords, set to ptAbsolute: + if (!mParentAnchorX && mPositionTypeX == ptPlotCoords) + setTypeX(ptAbsolute); + + // save pixel position: + QPointF pixelP; + if (keepPixelPosition) + pixelP = pixelPoint(); + // unregister at current parent anchor: + if (mParentAnchorX) + mParentAnchorX->removeChildX(this); + // register at new parent anchor: + if (parentAnchor) + parentAnchor->addChildX(this); + mParentAnchorX = parentAnchor; + // restore pixel position under new parent: + if (keepPixelPosition) + setPixelPoint(pixelP); + else + setCoords(0, coords().y()); + return true; +} + +/*! + This method sets the parent anchor of the Y coordinate to \a parentAnchor. + + For a detailed description of what a parent anchor is, see the documentation of \ref setParentAnchor. + + \see setParentAnchor, setParentAnchorX +*/ +bool QCPItemPosition::setParentAnchorY(QCPItemAnchor *parentAnchor, bool keepPixelPosition) +{ + // make sure self is not assigned as parent: + if (parentAnchor == this) + { + qDebug() << Q_FUNC_INFO << "can't set self as parent anchor" << reinterpret_cast(parentAnchor); + return false; + } + // make sure no recursive parent-child-relationships are created: + QCPItemAnchor *currentParent = parentAnchor; + while (currentParent) + { + if (QCPItemPosition *currentParentPos = currentParent->toQCPItemPosition()) + { + // is a QCPItemPosition, might have further parent, so keep iterating + if (currentParentPos == this) + { + qDebug() << Q_FUNC_INFO << "can't create recursive parent-child-relationship" << reinterpret_cast(parentAnchor); + return false; + } + currentParent = currentParentPos->parentAnchorY(); + } else + { + // is a QCPItemAnchor, can't have further parent. Now make sure the parent items aren't the + // same, to prevent a position being child of an anchor which itself depends on the position, + // because they're both on the same item: + if (currentParent->mParentItem == mParentItem) + { + qDebug() << Q_FUNC_INFO << "can't set parent to be an anchor which itself depends on this position" << reinterpret_cast(parentAnchor); + return false; + } + break; + } + } + + // if previously no parent set and PosType is still ptPlotCoords, set to ptAbsolute: + if (!mParentAnchorY && mPositionTypeY == ptPlotCoords) + setTypeY(ptAbsolute); + + // save pixel position: + QPointF pixelP; + if (keepPixelPosition) + pixelP = pixelPoint(); + // unregister at current parent anchor: + if (mParentAnchorY) + mParentAnchorY->removeChildY(this); + // register at new parent anchor: + if (parentAnchor) + parentAnchor->addChildY(this); + mParentAnchorY = parentAnchor; + // restore pixel position under new parent: + if (keepPixelPosition) + setPixelPoint(pixelP); + else + setCoords(coords().x(), 0); + return true; +} + +/*! + Sets the coordinates of this QCPItemPosition. What the coordinates mean, is defined by the type + (\ref setType, \ref setTypeX, \ref setTypeY). + + For example, if the type is \ref ptAbsolute, \a key and \a value mean the x and y pixel position + on the QCustomPlot surface. In that case the origin (0, 0) is in the top left corner of the + QCustomPlot viewport. If the type is \ref ptPlotCoords, \a key and \a value mean a point in the + plot coordinate system defined by the axes set by \ref setAxes. By default those are the + QCustomPlot's xAxis and yAxis. See the documentation of \ref setType for other available + coordinate types and their meaning. + + If different types were configured for X and Y (\ref setTypeX, \ref setTypeY), \a key and \a + value must also be provided in the different coordinate systems. Here, the X type refers to \a + key, and the Y type refers to \a value. + + \see setPixelPoint +*/ +void QCPItemPosition::setCoords(double key, double value) +{ + mKey = key; + mValue = value; +} + +/*! \overload + + Sets the coordinates as a QPointF \a pos where pos.x has the meaning of \a key and pos.y the + meaning of \a value of the \ref setCoords(double key, double value) method. +*/ +void QCPItemPosition::setCoords(const QPointF &pos) +{ + setCoords(pos.x(), pos.y()); +} + +/*! + Returns the final absolute pixel position of the QCPItemPosition on the QCustomPlot surface. It + includes all effects of type (\ref setType) and possible parent anchors (\ref setParentAnchor). + + \see setPixelPoint +*/ +QPointF QCPItemPosition::pixelPoint() const +{ + QPointF result; + + // determine X: + switch (mPositionTypeX) + { + case ptAbsolute: + { + result.rx() = mKey; + if (mParentAnchorX) + result.rx() += mParentAnchorX->pixelPoint().x(); + break; + } + case ptViewportRatio: + { + result.rx() = mKey*mParentPlot->viewport().width(); + if (mParentAnchorX) + result.rx() += mParentAnchorX->pixelPoint().x(); + else + result.rx() += mParentPlot->viewport().left(); + break; + } + case ptAxisRectRatio: + { + if (mAxisRect) + { + result.rx() = mKey*mAxisRect.data()->width(); + if (mParentAnchorX) + result.rx() += mParentAnchorX->pixelPoint().x(); + else + result.rx() += mAxisRect.data()->left(); + } else + qDebug() << Q_FUNC_INFO << "Item position type x is ptAxisRectRatio, but no axis rect was defined"; + break; + } + case ptPlotCoords: + { + if (mKeyAxis && mKeyAxis.data()->orientation() == Qt::Horizontal) + result.rx() = mKeyAxis.data()->coordToPixel(mKey); + else if (mValueAxis && mValueAxis.data()->orientation() == Qt::Horizontal) + result.rx() = mValueAxis.data()->coordToPixel(mValue); + else + qDebug() << Q_FUNC_INFO << "Item position type x is ptPlotCoords, but no axes were defined"; + break; + } + } + + // determine Y: + switch (mPositionTypeY) + { + case ptAbsolute: + { + result.ry() = mValue; + if (mParentAnchorY) + result.ry() += mParentAnchorY->pixelPoint().y(); + break; + } + case ptViewportRatio: + { + result.ry() = mValue*mParentPlot->viewport().height(); + if (mParentAnchorY) + result.ry() += mParentAnchorY->pixelPoint().y(); + else + result.ry() += mParentPlot->viewport().top(); + break; + } + case ptAxisRectRatio: + { + if (mAxisRect) + { + result.ry() = mValue*mAxisRect.data()->height(); + if (mParentAnchorY) + result.ry() += mParentAnchorY->pixelPoint().y(); + else + result.ry() += mAxisRect.data()->top(); + } else + qDebug() << Q_FUNC_INFO << "Item position type y is ptAxisRectRatio, but no axis rect was defined"; + break; + } + case ptPlotCoords: + { + if (mKeyAxis && mKeyAxis.data()->orientation() == Qt::Vertical) + result.ry() = mKeyAxis.data()->coordToPixel(mKey); + else if (mValueAxis && mValueAxis.data()->orientation() == Qt::Vertical) + result.ry() = mValueAxis.data()->coordToPixel(mValue); + else + qDebug() << Q_FUNC_INFO << "Item position type y is ptPlotCoords, but no axes were defined"; + break; + } + } + + return result; +} + +/*! + When \ref setType is \ref ptPlotCoords, this function may be used to specify the axes the + coordinates set with \ref setCoords relate to. By default they are set to the initial xAxis and + yAxis of the QCustomPlot. +*/ +void QCPItemPosition::setAxes(QCPAxis *keyAxis, QCPAxis *valueAxis) +{ + mKeyAxis = keyAxis; + mValueAxis = valueAxis; +} + +/*! + When \ref setType is \ref ptAxisRectRatio, this function may be used to specify the axis rect the + coordinates set with \ref setCoords relate to. By default this is set to the main axis rect of + the QCustomPlot. +*/ +void QCPItemPosition::setAxisRect(QCPAxisRect *axisRect) +{ + mAxisRect = axisRect; +} + +/*! + Sets the apparent pixel position. This works no matter what type (\ref setType) this + QCPItemPosition is or what parent-child situation it is in, as coordinates are transformed + appropriately, to make the position finally appear at the specified pixel values. + + Only if the type is \ref ptAbsolute and no parent anchor is set, this function's effect is + identical to that of \ref setCoords. + + \see pixelPoint, setCoords +*/ +void QCPItemPosition::setPixelPoint(const QPointF &pixelPoint) +{ + double x = pixelPoint.x(); + double y = pixelPoint.y(); + + switch (mPositionTypeX) + { + case ptAbsolute: + { + if (mParentAnchorX) + x -= mParentAnchorX->pixelPoint().x(); + break; + } + case ptViewportRatio: + { + if (mParentAnchorX) + x -= mParentAnchorX->pixelPoint().x(); + else + x -= mParentPlot->viewport().left(); + x /= (double)mParentPlot->viewport().width(); + break; + } + case ptAxisRectRatio: + { + if (mAxisRect) + { + if (mParentAnchorX) + x -= mParentAnchorX->pixelPoint().x(); + else + x -= mAxisRect.data()->left(); + x /= (double)mAxisRect.data()->width(); + } else + qDebug() << Q_FUNC_INFO << "Item position type x is ptAxisRectRatio, but no axis rect was defined"; + break; + } + case ptPlotCoords: + { + if (mKeyAxis && mKeyAxis.data()->orientation() == Qt::Horizontal) + x = mKeyAxis.data()->pixelToCoord(x); + else if (mValueAxis && mValueAxis.data()->orientation() == Qt::Horizontal) + y = mValueAxis.data()->pixelToCoord(x); + else + qDebug() << Q_FUNC_INFO << "Item position type x is ptPlotCoords, but no axes were defined"; + break; + } + } + + switch (mPositionTypeY) + { + case ptAbsolute: + { + if (mParentAnchorY) + y -= mParentAnchorY->pixelPoint().y(); + break; + } + case ptViewportRatio: + { + if (mParentAnchorY) + y -= mParentAnchorY->pixelPoint().y(); + else + y -= mParentPlot->viewport().top(); + y /= (double)mParentPlot->viewport().height(); + break; + } + case ptAxisRectRatio: + { + if (mAxisRect) + { + if (mParentAnchorY) + y -= mParentAnchorY->pixelPoint().y(); + else + y -= mAxisRect.data()->top(); + y /= (double)mAxisRect.data()->height(); + } else + qDebug() << Q_FUNC_INFO << "Item position type y is ptAxisRectRatio, but no axis rect was defined"; + break; + } + case ptPlotCoords: + { + if (mKeyAxis && mKeyAxis.data()->orientation() == Qt::Vertical) + x = mKeyAxis.data()->pixelToCoord(y); + else if (mValueAxis && mValueAxis.data()->orientation() == Qt::Vertical) + y = mValueAxis.data()->pixelToCoord(y); + else + qDebug() << Q_FUNC_INFO << "Item position type y is ptPlotCoords, but no axes were defined"; + break; + } + } + + setCoords(x, y); +} + + +//////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////// QCPAbstractItem +//////////////////////////////////////////////////////////////////////////////////////////////////// + +/*! \class QCPAbstractItem + \brief The abstract base class for all items in a plot. + + In QCustomPlot, items are supplemental graphical elements that are neither plottables + (QCPAbstractPlottable) nor axes (QCPAxis). While plottables are always tied to two axes and thus + plot coordinates, items can also be placed in absolute coordinates independent of any axes. Each + specific item has at least one QCPItemPosition member which controls the positioning. Some items + are defined by more than one coordinate and thus have two or more QCPItemPosition members (For + example, QCPItemRect has \a topLeft and \a bottomRight). + + This abstract base class defines a very basic interface like visibility and clipping. Since this + class is abstract, it can't be instantiated. Use one of the subclasses or create a subclass + yourself to create new items. + + The built-in items are: + + + + + + + + + + +
    QCPItemLineA line defined by a start and an end point. May have different ending styles on each side (e.g. arrows).
    QCPItemStraightLineA straight line defined by a start and a direction point. Unlike QCPItemLine, the straight line is infinitely long and has no endings.
    QCPItemCurveA curve defined by start, end and two intermediate control points. May have different ending styles on each side (e.g. arrows).
    QCPItemRectA rectangle
    QCPItemEllipseAn ellipse
    QCPItemPixmapAn arbitrary pixmap
    QCPItemTextA text label
    QCPItemBracketA bracket which may be used to reference/highlight certain parts in the plot.
    QCPItemTracerAn item that can be attached to a QCPGraph and sticks to its data points, given a key coordinate.
    + + \section items-clipping Clipping + + Items are by default clipped to the main axis rect (they are only visible inside the axis rect). + To make an item visible outside that axis rect, disable clipping via \ref setClipToAxisRect + "setClipToAxisRect(false)". + + On the other hand if you want the item to be clipped to a different axis rect, specify it via + \ref setClipAxisRect. This clipAxisRect property of an item is only used for clipping behaviour, and + in principle is independent of the coordinate axes the item might be tied to via its position + members (\ref QCPItemPosition::setAxes). However, it is common that the axis rect for clipping + also contains the axes used for the item positions. + + \section items-using Using items + + First you instantiate the item you want to use and add it to the plot: + \snippet documentation/doc-code-snippets/mainwindow.cpp qcpitemline-creation-1 + by default, the positions of the item are bound to the x- and y-Axis of the plot. So we can just + set the plot coordinates where the line should start/end: + \snippet documentation/doc-code-snippets/mainwindow.cpp qcpitemline-creation-2 + If we don't want the line to be positioned in plot coordinates but a different coordinate system, + e.g. absolute pixel positions on the QCustomPlot surface, we need to change the position type like this: + \snippet documentation/doc-code-snippets/mainwindow.cpp qcpitemline-creation-3 + Then we can set the coordinates, this time in pixels: + \snippet documentation/doc-code-snippets/mainwindow.cpp qcpitemline-creation-4 + and make the line visible on the entire QCustomPlot, by disabling clipping to the axis rect: + \snippet documentation/doc-code-snippets/mainwindow.cpp qcpitemline-creation-5 + + For more advanced plots, it is even possible to set different types and parent anchors per X/Y + coordinate of an item position, using for example \ref QCPItemPosition::setTypeX or \ref + QCPItemPosition::setParentAnchorX. For details, see the documentation of \ref QCPItemPosition. + + \section items-subclassing Creating own items + + To create an own item, you implement a subclass of QCPAbstractItem. These are the pure + virtual functions, you must implement: + \li \ref selectTest + \li \ref draw + + See the documentation of those functions for what they need to do. + + \subsection items-positioning Allowing the item to be positioned + + As mentioned, item positions are represented by QCPItemPosition members. Let's assume the new item shall + have only one point as its position (as opposed to two like a rect or multiple like a polygon). You then add + a public member of type QCPItemPosition like so: + + \code QCPItemPosition * const myPosition;\endcode + + the const makes sure the pointer itself can't be modified from the user of your new item (the QCPItemPosition + instance it points to, can be modified, of course). + The initialization of this pointer is made easy with the \ref createPosition function. Just assign + the return value of this function to each QCPItemPosition in the constructor of your item. \ref createPosition + takes a string which is the name of the position, typically this is identical to the variable name. + For example, the constructor of QCPItemExample could look like this: + + \code + QCPItemExample::QCPItemExample(QCustomPlot *parentPlot) : + QCPAbstractItem(parentPlot), + myPosition(createPosition("myPosition")) + { + // other constructor code + } + \endcode + + \subsection items-drawing The draw function + + To give your item a visual representation, reimplement the \ref draw function and use the passed + QCPPainter to draw the item. You can retrieve the item position in pixel coordinates from the + position member(s) via \ref QCPItemPosition::pixelPoint. + + To optimize performance you should calculate a bounding rect first (don't forget to take the pen + width into account), check whether it intersects the \ref clipRect, and only draw the item at all + if this is the case. + + \subsection items-selection The selectTest function + + Your implementation of the \ref selectTest function may use the helpers \ref distSqrToLine and + \ref rectSelectTest. With these, the implementation of the selection test becomes significantly + simpler for most items. See the documentation of \ref selectTest for what the function parameters + mean and what the function should return. + + \subsection anchors Providing anchors + + Providing anchors (QCPItemAnchor) starts off like adding a position. First you create a public + member, e.g. + + \code QCPItemAnchor * const bottom;\endcode + + and create it in the constructor with the \ref createAnchor function, assigning it a name and an + anchor id (an integer enumerating all anchors on the item, you may create an own enum for this). + Since anchors can be placed anywhere, relative to the item's position(s), your item needs to + provide the position of every anchor with the reimplementation of the \ref anchorPixelPoint(int + anchorId) function. + + In essence the QCPItemAnchor is merely an intermediary that itself asks your item for the pixel + position when anything attached to the anchor needs to know the coordinates. +*/ + +/* start of documentation of inline functions */ + +/*! \fn QList QCPAbstractItem::positions() const + + Returns all positions of the item in a list. + + \see anchors, position +*/ + +/*! \fn QList QCPAbstractItem::anchors() const + + Returns all anchors of the item in a list. Note that since a position (QCPItemPosition) is always + also an anchor, the list will also contain the positions of this item. + + \see positions, anchor +*/ + +/* end of documentation of inline functions */ +/* start documentation of pure virtual functions */ + +/*! \fn void QCPAbstractItem::draw(QCPPainter *painter) = 0 + \internal + + Draws this item with the provided \a painter. + + The cliprect of the provided painter is set to the rect returned by \ref clipRect before this + function is called. The clipRect depends on the clipping settings defined by \ref + setClipToAxisRect and \ref setClipAxisRect. +*/ + +/* end documentation of pure virtual functions */ +/* start documentation of signals */ + +/*! \fn void QCPAbstractItem::selectionChanged(bool selected) + This signal is emitted when the selection state of this item has changed, either by user interaction + or by a direct call to \ref setSelected. +*/ + +/* end documentation of signals */ + +/*! + Base class constructor which initializes base class members. +*/ +QCPAbstractItem::QCPAbstractItem(QCustomPlot *parentPlot) : + QCPLayerable(parentPlot), + mClipToAxisRect(false), + mSelectable(true), + mSelected(false) +{ + QList rects = parentPlot->axisRects(); + if (rects.size() > 0) + { + setClipToAxisRect(true); + setClipAxisRect(rects.first()); + } +} + +QCPAbstractItem::~QCPAbstractItem() +{ + // don't delete mPositions because every position is also an anchor and thus in mAnchors + qDeleteAll(mAnchors); +} + +/* can't make this a header inline function, because QPointer breaks with forward declared types, see QTBUG-29588 */ +QCPAxisRect *QCPAbstractItem::clipAxisRect() const +{ + return mClipAxisRect.data(); +} + +/*! + Sets whether the item shall be clipped to an axis rect or whether it shall be visible on the + entire QCustomPlot. The axis rect can be set with \ref setClipAxisRect. + + \see setClipAxisRect +*/ +void QCPAbstractItem::setClipToAxisRect(bool clip) +{ + mClipToAxisRect = clip; + if (mClipToAxisRect) + setParentLayerable(mClipAxisRect.data()); +} + +/*! + Sets the clip axis rect. It defines the rect that will be used to clip the item when \ref + setClipToAxisRect is set to true. + + \see setClipToAxisRect +*/ +void QCPAbstractItem::setClipAxisRect(QCPAxisRect *rect) +{ + mClipAxisRect = rect; + if (mClipToAxisRect) + setParentLayerable(mClipAxisRect.data()); +} + +/*! + Sets whether the user can (de-)select this item by clicking on the QCustomPlot surface. + (When \ref QCustomPlot::setInteractions contains QCustomPlot::iSelectItems.) + + However, even when \a selectable was set to false, it is possible to set the selection manually, + by calling \ref setSelected. + + \see QCustomPlot::setInteractions, setSelected +*/ +void QCPAbstractItem::setSelectable(bool selectable) +{ + if (mSelectable != selectable) + { + mSelectable = selectable; + emit selectableChanged(mSelectable); + } +} + +/*! + Sets whether this item is selected or not. When selected, it might use a different visual + appearance (e.g. pen and brush), this depends on the specific item though. + + The entire selection mechanism for items is handled automatically when \ref + QCustomPlot::setInteractions contains QCustomPlot::iSelectItems. You only need to call this + function when you wish to change the selection state manually. + + This function can change the selection state even when \ref setSelectable was set to false. + + emits the \ref selectionChanged signal when \a selected is different from the previous selection state. + + \see setSelectable, selectTest +*/ +void QCPAbstractItem::setSelected(bool selected) +{ + if (mSelected != selected) + { + mSelected = selected; + emit selectionChanged(mSelected); + } +} + +/*! + Returns the QCPItemPosition with the specified \a name. If this item doesn't have a position by + that name, returns 0. + + This function provides an alternative way to access item positions. Normally, you access + positions direcly by their member pointers (which typically have the same variable name as \a + name). + + \see positions, anchor +*/ +QCPItemPosition *QCPAbstractItem::position(const QString &name) const +{ + for (int i=0; iname() == name) + return mPositions.at(i); + } + qDebug() << Q_FUNC_INFO << "position with name not found:" << name; + return 0; +} + +/*! + Returns the QCPItemAnchor with the specified \a name. If this item doesn't have an anchor by + that name, returns 0. + + This function provides an alternative way to access item anchors. Normally, you access + anchors direcly by their member pointers (which typically have the same variable name as \a + name). + + \see anchors, position +*/ +QCPItemAnchor *QCPAbstractItem::anchor(const QString &name) const +{ + for (int i=0; iname() == name) + return mAnchors.at(i); + } + qDebug() << Q_FUNC_INFO << "anchor with name not found:" << name; + return 0; +} + +/*! + Returns whether this item has an anchor with the specified \a name. + + Note that you can check for positions with this function, too. This is because every position is + also an anchor (QCPItemPosition inherits from QCPItemAnchor). + + \see anchor, position +*/ +bool QCPAbstractItem::hasAnchor(const QString &name) const +{ + for (int i=0; iname() == name) + return true; + } + return false; +} + +/*! \internal + + Returns the rect the visual representation of this item is clipped to. This depends on the + current setting of \ref setClipToAxisRect as well as the axis rect set with \ref setClipAxisRect. + + If the item is not clipped to an axis rect, the \ref QCustomPlot::viewport rect is returned. + + \see draw +*/ +QRect QCPAbstractItem::clipRect() const +{ + if (mClipToAxisRect && mClipAxisRect) + return mClipAxisRect.data()->rect(); + else + return mParentPlot->viewport(); +} + +/*! \internal + + A convenience function to easily set the QPainter::Antialiased hint on the provided \a painter + before drawing item lines. + + This is the antialiasing state the painter passed to the \ref draw method is in by default. + + This function takes into account the local setting of the antialiasing flag as well as the + overrides set with \ref QCustomPlot::setAntialiasedElements and \ref + QCustomPlot::setNotAntialiasedElements. + + \see setAntialiased +*/ +void QCPAbstractItem::applyDefaultAntialiasingHint(QCPPainter *painter) const +{ + applyAntialiasingHint(painter, mAntialiased, QCP::aeItems); +} + +/*! \internal + + Finds the shortest squared distance of \a point to the line segment defined by \a start and \a + end. + + This function may be used to help with the implementation of the \ref selectTest function for + specific items. + + \note This function is identical to QCPAbstractPlottable::distSqrToLine + + \see rectSelectTest +*/ +double QCPAbstractItem::distSqrToLine(const QPointF &start, const QPointF &end, const QPointF &point) const +{ + QVector2D a(start); + QVector2D b(end); + QVector2D p(point); + QVector2D v(b-a); + + double vLengthSqr = v.lengthSquared(); + if (!qFuzzyIsNull(vLengthSqr)) + { + double mu = QVector2D::dotProduct(p-a, v)/vLengthSqr; + if (mu < 0) + return (a-p).lengthSquared(); + else if (mu > 1) + return (b-p).lengthSquared(); + else + return ((a + mu*v)-p).lengthSquared(); + } else + return (a-p).lengthSquared(); +} + +/*! \internal + + A convenience function which returns the selectTest value for a specified \a rect and a specified + click position \a pos. \a filledRect defines whether a click inside the rect should also be + considered a hit or whether only the rect border is sensitive to hits. + + This function may be used to help with the implementation of the \ref selectTest function for + specific items. + + For example, if your item consists of four rects, call this function four times, once for each + rect, in your \ref selectTest reimplementation. Finally, return the minimum of all four returned + values. + + \see distSqrToLine +*/ +double QCPAbstractItem::rectSelectTest(const QRectF &rect, const QPointF &pos, bool filledRect) const +{ + double result = -1; + + // distance to border: + QList lines; + lines << QLineF(rect.topLeft(), rect.topRight()) << QLineF(rect.bottomLeft(), rect.bottomRight()) + << QLineF(rect.topLeft(), rect.bottomLeft()) << QLineF(rect.topRight(), rect.bottomRight()); + double minDistSqr = std::numeric_limits::max(); + for (int i=0; i mParentPlot->selectionTolerance()*0.99) + { + if (rect.contains(pos)) + result = mParentPlot->selectionTolerance()*0.99; + } + return result; +} + +/*! \internal + + Returns the pixel position of the anchor with Id \a anchorId. This function must be reimplemented in + item subclasses if they want to provide anchors (QCPItemAnchor). + + For example, if the item has two anchors with id 0 and 1, this function takes one of these anchor + ids and returns the respective pixel points of the specified anchor. + + \see createAnchor +*/ +QPointF QCPAbstractItem::anchorPixelPoint(int anchorId) const +{ + qDebug() << Q_FUNC_INFO << "called on item which shouldn't have any anchors (this method not reimplemented). anchorId" << anchorId; + return QPointF(); +} + +/*! \internal + + Creates a QCPItemPosition, registers it with this item and returns a pointer to it. The specified + \a name must be a unique string that is usually identical to the variable name of the position + member (This is needed to provide the name-based \ref position access to positions). + + Don't delete positions created by this function manually, as the item will take care of it. + + Use this function in the constructor (initialization list) of the specific item subclass to + create each position member. Don't create QCPItemPositions with \b new yourself, because they + won't be registered with the item properly. + + \see createAnchor +*/ +QCPItemPosition *QCPAbstractItem::createPosition(const QString &name) +{ + if (hasAnchor(name)) + qDebug() << Q_FUNC_INFO << "anchor/position with name exists already:" << name; + QCPItemPosition *newPosition = new QCPItemPosition(mParentPlot, this, name); + mPositions.append(newPosition); + mAnchors.append(newPosition); // every position is also an anchor + newPosition->setAxes(mParentPlot->xAxis, mParentPlot->yAxis); + newPosition->setType(QCPItemPosition::ptPlotCoords); + if (mParentPlot->axisRect()) + newPosition->setAxisRect(mParentPlot->axisRect()); + newPosition->setCoords(0, 0); + return newPosition; +} + +/*! \internal + + Creates a QCPItemAnchor, registers it with this item and returns a pointer to it. The specified + \a name must be a unique string that is usually identical to the variable name of the anchor + member (This is needed to provide the name based \ref anchor access to anchors). + + The \a anchorId must be a number identifying the created anchor. It is recommended to create an + enum (e.g. "AnchorIndex") for this on each item that uses anchors. This id is used by the anchor + to identify itself when it calls QCPAbstractItem::anchorPixelPoint. That function then returns + the correct pixel coordinates for the passed anchor id. + + Don't delete anchors created by this function manually, as the item will take care of it. + + Use this function in the constructor (initialization list) of the specific item subclass to + create each anchor member. Don't create QCPItemAnchors with \b new yourself, because then they + won't be registered with the item properly. + + \see createPosition +*/ +QCPItemAnchor *QCPAbstractItem::createAnchor(const QString &name, int anchorId) +{ + if (hasAnchor(name)) + qDebug() << Q_FUNC_INFO << "anchor/position with name exists already:" << name; + QCPItemAnchor *newAnchor = new QCPItemAnchor(mParentPlot, this, name, anchorId); + mAnchors.append(newAnchor); + return newAnchor; +} + +/* inherits documentation from base class */ +void QCPAbstractItem::selectEvent(QMouseEvent *event, bool additive, const QVariant &details, bool *selectionStateChanged) +{ + Q_UNUSED(event) + Q_UNUSED(details) + if (mSelectable) + { + bool selBefore = mSelected; + setSelected(additive ? !mSelected : true); + if (selectionStateChanged) + *selectionStateChanged = mSelected != selBefore; + } +} + +/* inherits documentation from base class */ +void QCPAbstractItem::deselectEvent(bool *selectionStateChanged) +{ + if (mSelectable) + { + bool selBefore = mSelected; + setSelected(false); + if (selectionStateChanged) + *selectionStateChanged = mSelected != selBefore; + } +} + +/* inherits documentation from base class */ +QCP::Interaction QCPAbstractItem::selectionCategory() const +{ + return QCP::iSelectItems; +} + + +/*! \file */ + + + +//////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////// QCustomPlot +//////////////////////////////////////////////////////////////////////////////////////////////////// + +/*! \class QCustomPlot + + \brief The central class of the library. This is the QWidget which displays the plot and + interacts with the user. + + For tutorials on how to use QCustomPlot, see the website\n + http://www.qcustomplot.com/ +*/ + +/* start of documentation of inline functions */ + +/*! \fn QRect QCustomPlot::viewport() const + + Returns the viewport rect of this QCustomPlot instance. The viewport is the area the plot is + drawn in, all mechanisms, e.g. margin caluclation take the viewport to be the outer border of the + plot. The viewport normally is the rect() of the QCustomPlot widget, i.e. a rect with top left + (0, 0) and size of the QCustomPlot widget. + + Don't confuse the viewport with the axis rect (QCustomPlot::axisRect). An axis rect is typically + an area enclosed by four axes, where the graphs/plottables are drawn in. The viewport is larger + and contains also the axes themselves, their tick numbers, their labels, the plot title etc. + + Only when saving to a file (see \ref savePng, \ref savePdf etc.) the viewport is temporarily + modified to allow saving plots with sizes independent of the current widget size. +*/ + +/*! \fn QCPLayoutGrid *QCustomPlot::plotLayout() const + + Returns the top level layout of this QCustomPlot instance. It is a \ref QCPLayoutGrid, initially containing just + one cell with the main QCPAxisRect inside. +*/ + +/* end of documentation of inline functions */ +/* start of documentation of signals */ + +/*! \fn void QCustomPlot::mouseDoubleClick(QMouseEvent *event) + + This signal is emitted when the QCustomPlot receives a mouse double click event. +*/ + +/*! \fn void QCustomPlot::mousePress(QMouseEvent *event) + + This signal is emitted when the QCustomPlot receives a mouse press event. + + It is emitted before QCustomPlot handles any other mechanism like range dragging. So a slot + connected to this signal can still influence the behaviour e.g. with \ref QCPAxisRect::setRangeDrag or \ref + QCPAxisRect::setRangeDragAxes. +*/ + +/*! \fn void QCustomPlot::mouseMove(QMouseEvent *event) + + This signal is emitted when the QCustomPlot receives a mouse move event. + + It is emitted before QCustomPlot handles any other mechanism like range dragging. So a slot + connected to this signal can still influence the behaviour e.g. with \ref QCPAxisRect::setRangeDrag or \ref + QCPAxisRect::setRangeDragAxes. + + \warning It is discouraged to change the drag-axes with \ref QCPAxisRect::setRangeDragAxes here, + because the dragging starting point was saved the moment the mouse was pressed. Thus it only has + a meaning for the range drag axes that were set at that moment. If you want to change the drag + axes, consider doing this in the \ref mousePress signal instead. +*/ + +/*! \fn void QCustomPlot::mouseRelease(QMouseEvent *event) + + This signal is emitted when the QCustomPlot receives a mouse release event. + + It is emitted before QCustomPlot handles any other mechanisms like object selection. So a + slot connected to this signal can still influence the behaviour e.g. with \ref setInteractions or + \ref QCPAbstractPlottable::setSelectable. +*/ + +/*! \fn void QCustomPlot::mouseWheel(QMouseEvent *event) + + This signal is emitted when the QCustomPlot receives a mouse wheel event. + + It is emitted before QCustomPlot handles any other mechanisms like range zooming. So a slot + connected to this signal can still influence the behaviour e.g. with \ref QCPAxisRect::setRangeZoom, \ref + QCPAxisRect::setRangeZoomAxes or \ref QCPAxisRect::setRangeZoomFactor. +*/ + +/*! \fn void QCustomPlot::plottableClick(QCPAbstractPlottable *plottable, QMouseEvent *event) + + This signal is emitted when a plottable is clicked. + + \a event is the mouse event that caused the click and \a plottable is the plottable that received + the click. + + \see plottableDoubleClick +*/ + +/*! \fn void QCustomPlot::plottableDoubleClick(QCPAbstractPlottable *plottable, QMouseEvent *event) + + This signal is emitted when a plottable is double clicked. + + \a event is the mouse event that caused the click and \a plottable is the plottable that received + the click. + + \see plottableClick +*/ + +/*! \fn void QCustomPlot::itemClick(QCPAbstractItem *item, QMouseEvent *event) + + This signal is emitted when an item is clicked. + + \a event is the mouse event that caused the click and \a item is the item that received the + click. + + \see itemDoubleClick +*/ + +/*! \fn void QCustomPlot::itemDoubleClick(QCPAbstractItem *item, QMouseEvent *event) + + This signal is emitted when an item is double clicked. + + \a event is the mouse event that caused the click and \a item is the item that received the + click. + + \see itemClick +*/ + +/*! \fn void QCustomPlot::axisClick(QCPAxis *axis, QCPAxis::SelectablePart part, QMouseEvent *event) + + This signal is emitted when an axis is clicked. + + \a event is the mouse event that caused the click, \a axis is the axis that received the click and + \a part indicates the part of the axis that was clicked. + + \see axisDoubleClick +*/ + +/*! \fn void QCustomPlot::axisDoubleClick(QCPAxis *axis, QCPAxis::SelectablePart part, QMouseEvent *event) + + This signal is emitted when an axis is double clicked. + + \a event is the mouse event that caused the click, \a axis is the axis that received the click and + \a part indicates the part of the axis that was clicked. + + \see axisClick +*/ + +/*! \fn void QCustomPlot::legendClick(QCPLegend *legend, QCPAbstractLegendItem *item, QMouseEvent *event) + + This signal is emitted when a legend (item) is clicked. + + \a event is the mouse event that caused the click, \a legend is the legend that received the + click and \a item is the legend item that received the click. If only the legend and no item is + clicked, \a item is 0. This happens for a click inside the legend padding or the space between + two items. + + \see legendDoubleClick +*/ + +/*! \fn void QCustomPlot::legendDoubleClick(QCPLegend *legend, QCPAbstractLegendItem *item, QMouseEvent *event) + + This signal is emitted when a legend (item) is double clicked. + + \a event is the mouse event that caused the click, \a legend is the legend that received the + click and \a item is the legend item that received the click. If only the legend and no item is + clicked, \a item is 0. This happens for a click inside the legend padding or the space between + two items. + + \see legendClick +*/ + +/*! \fn void QCustomPlot:: titleClick(QMouseEvent *event, QCPPlotTitle *title) + + This signal is emitted when a plot title is clicked. + + \a event is the mouse event that caused the click and \a title is the plot title that received + the click. + + \see titleDoubleClick +*/ + +/*! \fn void QCustomPlot::titleDoubleClick(QMouseEvent *event, QCPPlotTitle *title) + + This signal is emitted when a plot title is double clicked. + + \a event is the mouse event that caused the click and \a title is the plot title that received + the click. + + \see titleClick +*/ + +/*! \fn void QCustomPlot::selectionChangedByUser() + + This signal is emitted after the user has changed the selection in the QCustomPlot, e.g. by + clicking. It is not emitted when the selection state of an object has changed programmatically by + a direct call to setSelected() on an object or by calling \ref deselectAll. + + In addition to this signal, selectable objects also provide individual signals, for example + QCPAxis::selectionChanged or QCPAbstractPlottable::selectionChanged. Note that those signals are + emitted even if the selection state is changed programmatically. + + See the documentation of \ref setInteractions for details about the selection mechanism. + + \see selectedPlottables, selectedGraphs, selectedItems, selectedAxes, selectedLegends +*/ + +/*! \fn void QCustomPlot::beforeReplot() + + This signal is emitted immediately before a replot takes place (caused by a call to the slot \ref + replot). + + It is safe to mutually connect the replot slot with this signal on two QCustomPlots to make them + replot synchronously, it won't cause an infinite recursion. + + \see replot, afterReplot +*/ + +/*! \fn void QCustomPlot::afterReplot() + + This signal is emitted immediately after a replot has taken place (caused by a call to the slot \ref + replot). + + It is safe to mutually connect the replot slot with this signal on two QCustomPlots to make them + replot synchronously, it won't cause an infinite recursion. + + \see replot, beforeReplot +*/ + +/* end of documentation of signals */ +/* start of documentation of public members */ + +/*! \var QCPAxis *QCustomPlot::xAxis + + A pointer to the primary x Axis (bottom) of the main axis rect of the plot. + + QCustomPlot offers convenient pointers to the axes (\ref xAxis, \ref yAxis, \ref xAxis2, \ref + yAxis2) and the \ref legend. They make it very easy working with plots that only have a single + axis rect and at most one axis at each axis rect side. If you use \link thelayoutsystem the + layout system\endlink to add multiple axis rects or multiple axes to one side, use the \ref + QCPAxisRect::axis interface to access the new axes. If one of the four default axes or the + default legend is removed due to manipulation of the layout system (e.g. by removing the main + axis rect), the corresponding pointers become 0. +*/ + +/*! \var QCPAxis *QCustomPlot::yAxis + + A pointer to the primary y Axis (left) of the main axis rect of the plot. + + QCustomPlot offers convenient pointers to the axes (\ref xAxis, \ref yAxis, \ref xAxis2, \ref + yAxis2) and the \ref legend. They make it very easy working with plots that only have a single + axis rect and at most one axis at each axis rect side. If you use \link thelayoutsystem the + layout system\endlink to add multiple axis rects or multiple axes to one side, use the \ref + QCPAxisRect::axis interface to access the new axes. If one of the four default axes or the + default legend is removed due to manipulation of the layout system (e.g. by removing the main + axis rect), the corresponding pointers become 0. +*/ + +/*! \var QCPAxis *QCustomPlot::xAxis2 + + A pointer to the secondary x Axis (top) of the main axis rect of the plot. Secondary axes are + invisible by default. Use QCPAxis::setVisible to change this (or use \ref + QCPAxisRect::setupFullAxesBox). + + QCustomPlot offers convenient pointers to the axes (\ref xAxis, \ref yAxis, \ref xAxis2, \ref + yAxis2) and the \ref legend. They make it very easy working with plots that only have a single + axis rect and at most one axis at each axis rect side. If you use \link thelayoutsystem the + layout system\endlink to add multiple axis rects or multiple axes to one side, use the \ref + QCPAxisRect::axis interface to access the new axes. If one of the four default axes or the + default legend is removed due to manipulation of the layout system (e.g. by removing the main + axis rect), the corresponding pointers become 0. +*/ + +/*! \var QCPAxis *QCustomPlot::yAxis2 + + A pointer to the secondary y Axis (right) of the main axis rect of the plot. Secondary axes are + invisible by default. Use QCPAxis::setVisible to change this (or use \ref + QCPAxisRect::setupFullAxesBox). + + QCustomPlot offers convenient pointers to the axes (\ref xAxis, \ref yAxis, \ref xAxis2, \ref + yAxis2) and the \ref legend. They make it very easy working with plots that only have a single + axis rect and at most one axis at each axis rect side. If you use \link thelayoutsystem the + layout system\endlink to add multiple axis rects or multiple axes to one side, use the \ref + QCPAxisRect::axis interface to access the new axes. If one of the four default axes or the + default legend is removed due to manipulation of the layout system (e.g. by removing the main + axis rect), the corresponding pointers become 0. +*/ + +/*! \var QCPLegend *QCustomPlot::legend + + A pointer to the default legend of the main axis rect. The legend is invisible by default. Use + QCPLegend::setVisible to change this. + + QCustomPlot offers convenient pointers to the axes (\ref xAxis, \ref yAxis, \ref xAxis2, \ref + yAxis2) and the \ref legend. They make it very easy working with plots that only have a single + axis rect and at most one axis at each axis rect side. If you use \link thelayoutsystem the + layout system\endlink to add multiple legends to the plot, use the layout system interface to + access the new legend. For example, legends can be placed inside an axis rect's \ref + QCPAxisRect::insetLayout "inset layout", and must then also be accessed via the inset layout. If + the default legend is removed due to manipulation of the layout system (e.g. by removing the main + axis rect), the corresponding pointer becomes 0. +*/ + +/* end of documentation of public members */ + +/*! + Constructs a QCustomPlot and sets reasonable default values. +*/ +QCustomPlot::QCustomPlot(QWidget *parent) : + QWidget(parent), + xAxis(0), + yAxis(0), + xAxis2(0), + yAxis2(0), + legend(0), + mPlotLayout(0), + mAutoAddPlottableToLegend(true), + mAntialiasedElements(QCP::aeNone), + mNotAntialiasedElements(QCP::aeNone), + mInteractions(0), + mSelectionTolerance(8), + mNoAntialiasingOnDrag(false), + mBackgroundBrush(Qt::white, Qt::SolidPattern), + mBackgroundScaled(true), + mBackgroundScaledMode(Qt::KeepAspectRatioByExpanding), + mCurrentLayer(0), + mPlottingHints(QCP::phCacheLabels|QCP::phForceRepaint), + mMultiSelectModifier(Qt::ControlModifier), + mPaintBuffer(size()), + mMouseEventElement(0), + mReplotting(false) +{ + setAttribute(Qt::WA_NoMousePropagation); + setAttribute(Qt::WA_OpaquePaintEvent); + setMouseTracking(true); + QLocale currentLocale = locale(); + currentLocale.setNumberOptions(QLocale::OmitGroupSeparator); + setLocale(currentLocale); + + // create initial layers: + mLayers.append(new QCPLayer(this, QLatin1String("background"))); + mLayers.append(new QCPLayer(this, QLatin1String("grid"))); + mLayers.append(new QCPLayer(this, QLatin1String("main"))); + mLayers.append(new QCPLayer(this, QLatin1String("axes"))); + mLayers.append(new QCPLayer(this, QLatin1String("legend"))); + updateLayerIndices(); + setCurrentLayer(QLatin1String("main")); + + // create initial layout, axis rect and legend: + mPlotLayout = new QCPLayoutGrid; + mPlotLayout->initializeParentPlot(this); + mPlotLayout->setParent(this); // important because if parent is QWidget, QCPLayout::sizeConstraintsChanged will call QWidget::updateGeometry + mPlotLayout->setLayer(QLatin1String("main")); + QCPAxisRect *defaultAxisRect = new QCPAxisRect(this, true); + mPlotLayout->addElement(0, 0, defaultAxisRect); + xAxis = defaultAxisRect->axis(QCPAxis::atBottom); + yAxis = defaultAxisRect->axis(QCPAxis::atLeft); + xAxis2 = defaultAxisRect->axis(QCPAxis::atTop); + yAxis2 = defaultAxisRect->axis(QCPAxis::atRight); + legend = new QCPLegend; + legend->setVisible(false); + defaultAxisRect->insetLayout()->addElement(legend, Qt::AlignRight|Qt::AlignTop); + defaultAxisRect->insetLayout()->setMargins(QMargins(12, 12, 12, 12)); + + defaultAxisRect->setLayer(QLatin1String("background")); + xAxis->setLayer(QLatin1String("axes")); + yAxis->setLayer(QLatin1String("axes")); + xAxis2->setLayer(QLatin1String("axes")); + yAxis2->setLayer(QLatin1String("axes")); + xAxis->grid()->setLayer(QLatin1String("grid")); + yAxis->grid()->setLayer(QLatin1String("grid")); + xAxis2->grid()->setLayer(QLatin1String("grid")); + yAxis2->grid()->setLayer(QLatin1String("grid")); + legend->setLayer(QLatin1String("legend")); + + setViewport(rect()); // needs to be called after mPlotLayout has been created + + replot(); +} + +QCustomPlot::~QCustomPlot() +{ + clearPlottables(); + clearItems(); + + if (mPlotLayout) + { + delete mPlotLayout; + mPlotLayout = 0; + } + + mCurrentLayer = 0; + qDeleteAll(mLayers); // don't use removeLayer, because it would prevent the last layer to be removed + mLayers.clear(); +} + +/*! + Sets which elements are forcibly drawn antialiased as an \a or combination of QCP::AntialiasedElement. + + This overrides the antialiasing settings for whole element groups, normally controlled with the + \a setAntialiasing function on the individual elements. If an element is neither specified in + \ref setAntialiasedElements nor in \ref setNotAntialiasedElements, the antialiasing setting on + each individual element instance is used. + + For example, if \a antialiasedElements contains \ref QCP::aePlottables, all plottables will be + drawn antialiased, no matter what the specific QCPAbstractPlottable::setAntialiased value was set + to. + + if an element in \a antialiasedElements is already set in \ref setNotAntialiasedElements, it is + removed from there. + + \see setNotAntialiasedElements +*/ +void QCustomPlot::setAntialiasedElements(const QCP::AntialiasedElements &antialiasedElements) +{ + mAntialiasedElements = antialiasedElements; + + // make sure elements aren't in mNotAntialiasedElements and mAntialiasedElements simultaneously: + if ((mNotAntialiasedElements & mAntialiasedElements) != 0) + mNotAntialiasedElements |= ~mAntialiasedElements; +} + +/*! + Sets whether the specified \a antialiasedElement is forcibly drawn antialiased. + + See \ref setAntialiasedElements for details. + + \see setNotAntialiasedElement +*/ +void QCustomPlot::setAntialiasedElement(QCP::AntialiasedElement antialiasedElement, bool enabled) +{ + if (!enabled && mAntialiasedElements.testFlag(antialiasedElement)) + mAntialiasedElements &= ~antialiasedElement; + else if (enabled && !mAntialiasedElements.testFlag(antialiasedElement)) + mAntialiasedElements |= antialiasedElement; + + // make sure elements aren't in mNotAntialiasedElements and mAntialiasedElements simultaneously: + if ((mNotAntialiasedElements & mAntialiasedElements) != 0) + mNotAntialiasedElements |= ~mAntialiasedElements; +} + +/*! + Sets which elements are forcibly drawn not antialiased as an \a or combination of + QCP::AntialiasedElement. + + This overrides the antialiasing settings for whole element groups, normally controlled with the + \a setAntialiasing function on the individual elements. If an element is neither specified in + \ref setAntialiasedElements nor in \ref setNotAntialiasedElements, the antialiasing setting on + each individual element instance is used. + + For example, if \a notAntialiasedElements contains \ref QCP::aePlottables, no plottables will be + drawn antialiased, no matter what the specific QCPAbstractPlottable::setAntialiased value was set + to. + + if an element in \a notAntialiasedElements is already set in \ref setAntialiasedElements, it is + removed from there. + + \see setAntialiasedElements +*/ +void QCustomPlot::setNotAntialiasedElements(const QCP::AntialiasedElements ¬AntialiasedElements) +{ + mNotAntialiasedElements = notAntialiasedElements; + + // make sure elements aren't in mNotAntialiasedElements and mAntialiasedElements simultaneously: + if ((mNotAntialiasedElements & mAntialiasedElements) != 0) + mAntialiasedElements |= ~mNotAntialiasedElements; +} + +/*! + Sets whether the specified \a notAntialiasedElement is forcibly drawn not antialiased. + + See \ref setNotAntialiasedElements for details. + + \see setAntialiasedElement +*/ +void QCustomPlot::setNotAntialiasedElement(QCP::AntialiasedElement notAntialiasedElement, bool enabled) +{ + if (!enabled && mNotAntialiasedElements.testFlag(notAntialiasedElement)) + mNotAntialiasedElements &= ~notAntialiasedElement; + else if (enabled && !mNotAntialiasedElements.testFlag(notAntialiasedElement)) + mNotAntialiasedElements |= notAntialiasedElement; + + // make sure elements aren't in mNotAntialiasedElements and mAntialiasedElements simultaneously: + if ((mNotAntialiasedElements & mAntialiasedElements) != 0) + mAntialiasedElements |= ~mNotAntialiasedElements; +} + +/*! + If set to true, adding a plottable (e.g. a graph) to the QCustomPlot automatically also adds the + plottable to the legend (QCustomPlot::legend). + + \see addPlottable, addGraph, QCPLegend::addItem +*/ +void QCustomPlot::setAutoAddPlottableToLegend(bool on) +{ + mAutoAddPlottableToLegend = on; +} + +/*! + Sets the possible interactions of this QCustomPlot as an or-combination of \ref QCP::Interaction + enums. There are the following types of interactions: + + Axis range manipulation is controlled via \ref QCP::iRangeDrag and \ref QCP::iRangeZoom. When the + respective interaction is enabled, the user may drag axes ranges and zoom with the mouse wheel. + For details how to control which axes the user may drag/zoom and in what orientations, see \ref + QCPAxisRect::setRangeDrag, \ref QCPAxisRect::setRangeZoom, \ref QCPAxisRect::setRangeDragAxes, + \ref QCPAxisRect::setRangeZoomAxes. + + Plottable selection is controlled by \ref QCP::iSelectPlottables. If \ref QCP::iSelectPlottables is + set, the user may select plottables (graphs, curves, bars,...) by clicking on them or in their + vicinity (\ref setSelectionTolerance). Whether the user can actually select a plottable can + further be restricted with the \ref QCPAbstractPlottable::setSelectable function on the specific + plottable. To find out whether a specific plottable is selected, call + QCPAbstractPlottable::selected(). To retrieve a list of all currently selected plottables, call + \ref selectedPlottables. If you're only interested in QCPGraphs, you may use the convenience + function \ref selectedGraphs. + + Item selection is controlled by \ref QCP::iSelectItems. If \ref QCP::iSelectItems is set, the user + may select items (QCPItemLine, QCPItemText,...) by clicking on them or in their vicinity. To find + out whether a specific item is selected, call QCPAbstractItem::selected(). To retrieve a list of + all currently selected items, call \ref selectedItems. + + Axis selection is controlled with \ref QCP::iSelectAxes. If \ref QCP::iSelectAxes is set, the user + may select parts of the axes by clicking on them. What parts exactly (e.g. Axis base line, tick + labels, axis label) are selectable can be controlled via \ref QCPAxis::setSelectableParts for + each axis. To retrieve a list of all axes that currently contain selected parts, call \ref + selectedAxes. Which parts of an axis are selected, can be retrieved with QCPAxis::selectedParts(). + + Legend selection is controlled with \ref QCP::iSelectLegend. If this is set, the user may + select the legend itself or individual items by clicking on them. What parts exactly are + selectable can be controlled via \ref QCPLegend::setSelectableParts. To find out whether the + legend or any of its child items are selected, check the value of QCPLegend::selectedParts. To + find out which child items are selected, call \ref QCPLegend::selectedItems. + + All other selectable elements The selection of all other selectable objects (e.g. + QCPPlotTitle, or your own layerable subclasses) is controlled with \ref QCP::iSelectOther. If set, the + user may select those objects by clicking on them. To find out which are currently selected, you + need to check their selected state explicitly. + + If the selection state has changed by user interaction, the \ref selectionChangedByUser signal is + emitted. Each selectable object additionally emits an individual selectionChanged signal whenever + their selection state has changed, i.e. not only by user interaction. + + To allow multiple objects to be selected by holding the selection modifier (\ref + setMultiSelectModifier), set the flag \ref QCP::iMultiSelect. + + \note In addition to the selection mechanism presented here, QCustomPlot always emits + corresponding signals, when an object is clicked or double clicked. see \ref plottableClick and + \ref plottableDoubleClick for example. + + \see setInteraction, setSelectionTolerance +*/ +void QCustomPlot::setInteractions(const QCP::Interactions &interactions) +{ + mInteractions = interactions; +} + +/*! + Sets the single \a interaction of this QCustomPlot to \a enabled. + + For details about the interaction system, see \ref setInteractions. + + \see setInteractions +*/ +void QCustomPlot::setInteraction(const QCP::Interaction &interaction, bool enabled) +{ + if (!enabled && mInteractions.testFlag(interaction)) + mInteractions &= ~interaction; + else if (enabled && !mInteractions.testFlag(interaction)) + mInteractions |= interaction; +} + +/*! + Sets the tolerance that is used to decide whether a click selects an object (e.g. a plottable) or + not. + + If the user clicks in the vicinity of the line of e.g. a QCPGraph, it's only regarded as a + potential selection when the minimum distance between the click position and the graph line is + smaller than \a pixels. Objects that are defined by an area (e.g. QCPBars) only react to clicks + directly inside the area and ignore this selection tolerance. In other words, it only has meaning + for parts of objects that are too thin to exactly hit with a click and thus need such a + tolerance. + + \see setInteractions, QCPLayerable::selectTest +*/ +void QCustomPlot::setSelectionTolerance(int pixels) +{ + mSelectionTolerance = pixels; +} + +/*! + Sets whether antialiasing is disabled for this QCustomPlot while the user is dragging axes + ranges. If many objects, especially plottables, are drawn antialiased, this greatly improves + performance during dragging. Thus it creates a more responsive user experience. As soon as the + user stops dragging, the last replot is done with normal antialiasing, to restore high image + quality. + + \see setAntialiasedElements, setNotAntialiasedElements +*/ +void QCustomPlot::setNoAntialiasingOnDrag(bool enabled) +{ + mNoAntialiasingOnDrag = enabled; +} + +/*! + Sets the plotting hints for this QCustomPlot instance as an \a or combination of QCP::PlottingHint. + + \see setPlottingHint +*/ +void QCustomPlot::setPlottingHints(const QCP::PlottingHints &hints) +{ + mPlottingHints = hints; +} + +/*! + Sets the specified plotting \a hint to \a enabled. + + \see setPlottingHints +*/ +void QCustomPlot::setPlottingHint(QCP::PlottingHint hint, bool enabled) +{ + QCP::PlottingHints newHints = mPlottingHints; + if (!enabled) + newHints &= ~hint; + else + newHints |= hint; + + if (newHints != mPlottingHints) + setPlottingHints(newHints); +} + +/*! + Sets the keyboard modifier that will be recognized as multi-select-modifier. + + If \ref QCP::iMultiSelect is specified in \ref setInteractions, the user may select multiple objects + by clicking on them one after the other while holding down \a modifier. + + By default the multi-select-modifier is set to Qt::ControlModifier. + + \see setInteractions +*/ +void QCustomPlot::setMultiSelectModifier(Qt::KeyboardModifier modifier) +{ + mMultiSelectModifier = modifier; +} + +/*! + Sets the viewport of this QCustomPlot. The Viewport is the area that the top level layout + (QCustomPlot::plotLayout()) uses as its rect. Normally, the viewport is the entire widget rect. + + This function is used to allow arbitrary size exports with \ref toPixmap, \ref savePng, \ref + savePdf, etc. by temporarily changing the viewport size. +*/ +void QCustomPlot::setViewport(const QRect &rect) +{ + mViewport = rect; + if (mPlotLayout) + mPlotLayout->setOuterRect(mViewport); +} + +/*! + Sets \a pm as the viewport background pixmap (see \ref setViewport). The pixmap is always drawn + below all other objects in the plot. + + For cases where the provided pixmap doesn't have the same size as the viewport, scaling can be + enabled with \ref setBackgroundScaled and the scaling mode (whether and how the aspect ratio is + preserved) can be set with \ref setBackgroundScaledMode. To set all these options in one call, + consider using the overloaded version of this function. + + If a background brush was set with \ref setBackground(const QBrush &brush), the viewport will + first be filled with that brush, before drawing the background pixmap. This can be useful for + background pixmaps with translucent areas. + + \see setBackgroundScaled, setBackgroundScaledMode +*/ +void QCustomPlot::setBackground(const QPixmap &pm) +{ + mBackgroundPixmap = pm; + mScaledBackgroundPixmap = QPixmap(); +} + +/*! + Sets the background brush of the viewport (see \ref setViewport). + + Before drawing everything else, the background is filled with \a brush. If a background pixmap + was set with \ref setBackground(const QPixmap &pm), this brush will be used to fill the viewport + before the background pixmap is drawn. This can be useful for background pixmaps with translucent + areas. + + Set \a brush to Qt::NoBrush or Qt::Transparent to leave background transparent. This can be + useful for exporting to image formats which support transparency, e.g. \ref savePng. + + \see setBackgroundScaled, setBackgroundScaledMode +*/ +void QCustomPlot::setBackground(const QBrush &brush) +{ + mBackgroundBrush = brush; +} + +/*! \overload + + Allows setting the background pixmap of the viewport, whether it shall be scaled and how it + shall be scaled in one call. + + \see setBackground(const QPixmap &pm), setBackgroundScaled, setBackgroundScaledMode +*/ +void QCustomPlot::setBackground(const QPixmap &pm, bool scaled, Qt::AspectRatioMode mode) +{ + mBackgroundPixmap = pm; + mScaledBackgroundPixmap = QPixmap(); + mBackgroundScaled = scaled; + mBackgroundScaledMode = mode; +} + +/*! + Sets whether the viewport background pixmap shall be scaled to fit the viewport. If \a scaled is + set to true, control whether and how the aspect ratio of the original pixmap is preserved with + \ref setBackgroundScaledMode. + + Note that the scaled version of the original pixmap is buffered, so there is no performance + penalty on replots. (Except when the viewport dimensions are changed continuously.) + + \see setBackground, setBackgroundScaledMode +*/ +void QCustomPlot::setBackgroundScaled(bool scaled) +{ + mBackgroundScaled = scaled; +} + +/*! + If scaling of the viewport background pixmap is enabled (\ref setBackgroundScaled), use this + function to define whether and how the aspect ratio of the original pixmap is preserved. + + \see setBackground, setBackgroundScaled +*/ +void QCustomPlot::setBackgroundScaledMode(Qt::AspectRatioMode mode) +{ + mBackgroundScaledMode = mode; +} + +/*! + Returns the plottable with \a index. If the index is invalid, returns 0. + + There is an overloaded version of this function with no parameter which returns the last added + plottable, see QCustomPlot::plottable() + + \see plottableCount, addPlottable +*/ +QCPAbstractPlottable *QCustomPlot::plottable(int index) +{ + if (index >= 0 && index < mPlottables.size()) + { + return mPlottables.at(index); + } else + { + qDebug() << Q_FUNC_INFO << "index out of bounds:" << index; + return 0; + } +} + +/*! \overload + + Returns the last plottable that was added with \ref addPlottable. If there are no plottables in + the plot, returns 0. + + \see plottableCount, addPlottable +*/ +QCPAbstractPlottable *QCustomPlot::plottable() +{ + if (!mPlottables.isEmpty()) + { + return mPlottables.last(); + } else + return 0; +} + +/*! + Adds the specified plottable to the plot and, if \ref setAutoAddPlottableToLegend is enabled, to + the legend (QCustomPlot::legend). QCustomPlot takes ownership of the plottable. + + Returns true on success, i.e. when \a plottable isn't already in the plot and the parent plot of + \a plottable is this QCustomPlot (the latter is controlled by what axes were passed in the + plottable's constructor). + + \see plottable, plottableCount, removePlottable, clearPlottables +*/ +bool QCustomPlot::addPlottable(QCPAbstractPlottable *plottable) +{ + if (mPlottables.contains(plottable)) + { + qDebug() << Q_FUNC_INFO << "plottable already added to this QCustomPlot:" << reinterpret_cast(plottable); + return false; + } + if (plottable->parentPlot() != this) + { + qDebug() << Q_FUNC_INFO << "plottable not created with this QCustomPlot as parent:" << reinterpret_cast(plottable); + return false; + } + + mPlottables.append(plottable); + // possibly add plottable to legend: + if (mAutoAddPlottableToLegend) + plottable->addToLegend(); + // special handling for QCPGraphs to maintain the simple graph interface: + if (QCPGraph *graph = qobject_cast(plottable)) + mGraphs.append(graph); + if (!plottable->layer()) // usually the layer is already set in the constructor of the plottable (via QCPLayerable constructor) + plottable->setLayer(currentLayer()); + return true; +} + +/*! + Removes the specified plottable from the plot and, if necessary, from the legend (QCustomPlot::legend). + + Returns true on success. + + \see addPlottable, clearPlottables +*/ +bool QCustomPlot::removePlottable(QCPAbstractPlottable *plottable) +{ + if (!mPlottables.contains(plottable)) + { + qDebug() << Q_FUNC_INFO << "plottable not in list:" << reinterpret_cast(plottable); + return false; + } + + // remove plottable from legend: + plottable->removeFromLegend(); + // special handling for QCPGraphs to maintain the simple graph interface: + if (QCPGraph *graph = qobject_cast(plottable)) + mGraphs.removeOne(graph); + // remove plottable: + delete plottable; + mPlottables.removeOne(plottable); + return true; +} + +/*! \overload + + Removes the plottable by its \a index. +*/ +bool QCustomPlot::removePlottable(int index) +{ + if (index >= 0 && index < mPlottables.size()) + return removePlottable(mPlottables[index]); + else + { + qDebug() << Q_FUNC_INFO << "index out of bounds:" << index; + return false; + } +} + +/*! + Removes all plottables from the plot (and the QCustomPlot::legend, if necessary). + + Returns the number of plottables removed. + + \see removePlottable +*/ +int QCustomPlot::clearPlottables() +{ + int c = mPlottables.size(); + for (int i=c-1; i >= 0; --i) + removePlottable(mPlottables[i]); + return c; +} + +/*! + Returns the number of currently existing plottables in the plot + + \see plottable, addPlottable +*/ +int QCustomPlot::plottableCount() const +{ + return mPlottables.size(); +} + +/*! + Returns a list of the selected plottables. If no plottables are currently selected, the list is empty. + + There is a convenience function if you're only interested in selected graphs, see \ref selectedGraphs. + + \see setInteractions, QCPAbstractPlottable::setSelectable, QCPAbstractPlottable::setSelected +*/ +QList QCustomPlot::selectedPlottables() const +{ + QList result; + foreach (QCPAbstractPlottable *plottable, mPlottables) + { + if (plottable->selected()) + result.append(plottable); + } + return result; +} + +/*! + Returns the plottable at the pixel position \a pos. Plottables that only consist of single lines + (like graphs) have a tolerance band around them, see \ref setSelectionTolerance. If multiple + plottables come into consideration, the one closest to \a pos is returned. + + If \a onlySelectable is true, only plottables that are selectable + (QCPAbstractPlottable::setSelectable) are considered. + + If there is no plottable at \a pos, the return value is 0. + + \see itemAt, layoutElementAt +*/ +QCPAbstractPlottable *QCustomPlot::plottableAt(const QPointF &pos, bool onlySelectable) const +{ + QCPAbstractPlottable *resultPlottable = 0; + double resultDistance = mSelectionTolerance; // only regard clicks with distances smaller than mSelectionTolerance as selections, so initialize with that value + + foreach (QCPAbstractPlottable *plottable, mPlottables) + { + if (onlySelectable && !plottable->selectable()) // we could have also passed onlySelectable to the selectTest function, but checking here is faster, because we have access to QCPabstractPlottable::selectable + continue; + if ((plottable->keyAxis()->axisRect()->rect() & plottable->valueAxis()->axisRect()->rect()).contains(pos.toPoint())) // only consider clicks inside the rect that is spanned by the plottable's key/value axes + { + double currentDistance = plottable->selectTest(pos, false); + if (currentDistance >= 0 && currentDistance < resultDistance) + { + resultPlottable = plottable; + resultDistance = currentDistance; + } + } + } + + return resultPlottable; +} + +/*! + Returns whether this QCustomPlot instance contains the \a plottable. + + \see addPlottable +*/ +bool QCustomPlot::hasPlottable(QCPAbstractPlottable *plottable) const +{ + return mPlottables.contains(plottable); +} + +/*! + Returns the graph with \a index. If the index is invalid, returns 0. + + There is an overloaded version of this function with no parameter which returns the last created + graph, see QCustomPlot::graph() + + \see graphCount, addGraph +*/ +QCPGraph *QCustomPlot::graph(int index) const +{ + if (index >= 0 && index < mGraphs.size()) + { + return mGraphs.at(index); + } else + { + qDebug() << Q_FUNC_INFO << "index out of bounds:" << index; + return 0; + } +} + +/*! \overload + + Returns the last graph, that was created with \ref addGraph. If there are no graphs in the plot, + returns 0. + + \see graphCount, addGraph +*/ +QCPGraph *QCustomPlot::graph() const +{ + if (!mGraphs.isEmpty()) + { + return mGraphs.last(); + } else + return 0; +} + +/*! + Creates a new graph inside the plot. If \a keyAxis and \a valueAxis are left unspecified (0), the + bottom (xAxis) is used as key and the left (yAxis) is used as value axis. If specified, \a + keyAxis and \a valueAxis must reside in this QCustomPlot. + + \a keyAxis will be used as key axis (typically "x") and \a valueAxis as value axis (typically + "y") for the graph. + + Returns a pointer to the newly created graph, or 0 if adding the graph failed. + + \see graph, graphCount, removeGraph, clearGraphs +*/ +QCPGraph *QCustomPlot::addGraph(QCPAxis *keyAxis, QCPAxis *valueAxis) +{ + if (!keyAxis) keyAxis = xAxis; + if (!valueAxis) valueAxis = yAxis; + if (!keyAxis || !valueAxis) + { + qDebug() << Q_FUNC_INFO << "can't use default QCustomPlot xAxis or yAxis, because at least one is invalid (has been deleted)"; + return 0; + } + if (keyAxis->parentPlot() != this || valueAxis->parentPlot() != this) + { + qDebug() << Q_FUNC_INFO << "passed keyAxis or valueAxis doesn't have this QCustomPlot as parent"; + return 0; + } + + QCPGraph *newGraph = new QCPGraph(keyAxis, valueAxis); + if (addPlottable(newGraph)) + { + newGraph->setName(QLatin1String("Graph ")+QString::number(mGraphs.size())); + return newGraph; + } else + { + delete newGraph; + return 0; + } +} + +/*! + Removes the specified \a graph from the plot and, if necessary, from the QCustomPlot::legend. If + any other graphs in the plot have a channel fill set towards the removed graph, the channel fill + property of those graphs is reset to zero (no channel fill). + + Returns true on success. + + \see clearGraphs +*/ +bool QCustomPlot::removeGraph(QCPGraph *graph) +{ + return removePlottable(graph); +} + +/*! \overload + + Removes the graph by its \a index. +*/ +bool QCustomPlot::removeGraph(int index) +{ + if (index >= 0 && index < mGraphs.size()) + return removeGraph(mGraphs[index]); + else + return false; +} + +/*! + Removes all graphs from the plot (and the QCustomPlot::legend, if necessary). + + Returns the number of graphs removed. + + \see removeGraph +*/ +int QCustomPlot::clearGraphs() +{ + int c = mGraphs.size(); + for (int i=c-1; i >= 0; --i) + removeGraph(mGraphs[i]); + return c; +} + +/*! + Returns the number of currently existing graphs in the plot + + \see graph, addGraph +*/ +int QCustomPlot::graphCount() const +{ + return mGraphs.size(); +} + +/*! + Returns a list of the selected graphs. If no graphs are currently selected, the list is empty. + + If you are not only interested in selected graphs but other plottables like QCPCurve, QCPBars, + etc., use \ref selectedPlottables. + + \see setInteractions, selectedPlottables, QCPAbstractPlottable::setSelectable, QCPAbstractPlottable::setSelected +*/ +QList QCustomPlot::selectedGraphs() const +{ + QList result; + foreach (QCPGraph *graph, mGraphs) + { + if (graph->selected()) + result.append(graph); + } + return result; +} + +/*! + Returns the item with \a index. If the index is invalid, returns 0. + + There is an overloaded version of this function with no parameter which returns the last added + item, see QCustomPlot::item() + + \see itemCount, addItem +*/ +QCPAbstractItem *QCustomPlot::item(int index) const +{ + if (index >= 0 && index < mItems.size()) + { + return mItems.at(index); + } else + { + qDebug() << Q_FUNC_INFO << "index out of bounds:" << index; + return 0; + } +} + +/*! \overload + + Returns the last item, that was added with \ref addItem. If there are no items in the plot, + returns 0. + + \see itemCount, addItem +*/ +QCPAbstractItem *QCustomPlot::item() const +{ + if (!mItems.isEmpty()) + { + return mItems.last(); + } else + return 0; +} + +/*! + Adds the specified item to the plot. QCustomPlot takes ownership of the item. + + Returns true on success, i.e. when \a item wasn't already in the plot and the parent plot of \a + item is this QCustomPlot. + + \see item, itemCount, removeItem, clearItems +*/ +bool QCustomPlot::addItem(QCPAbstractItem *item) +{ + if (!mItems.contains(item) && item->parentPlot() == this) + { + mItems.append(item); + return true; + } else + { + qDebug() << Q_FUNC_INFO << "item either already in list or not created with this QCustomPlot as parent:" << reinterpret_cast(item); + return false; + } +} + +/*! + Removes the specified item from the plot. + + Returns true on success. + + \see addItem, clearItems +*/ +bool QCustomPlot::removeItem(QCPAbstractItem *item) +{ + if (mItems.contains(item)) + { + delete item; + mItems.removeOne(item); + return true; + } else + { + qDebug() << Q_FUNC_INFO << "item not in list:" << reinterpret_cast(item); + return false; + } +} + +/*! \overload + + Removes the item by its \a index. +*/ +bool QCustomPlot::removeItem(int index) +{ + if (index >= 0 && index < mItems.size()) + return removeItem(mItems[index]); + else + { + qDebug() << Q_FUNC_INFO << "index out of bounds:" << index; + return false; + } +} + +/*! + Removes all items from the plot. + + Returns the number of items removed. + + \see removeItem +*/ +int QCustomPlot::clearItems() +{ + int c = mItems.size(); + for (int i=c-1; i >= 0; --i) + removeItem(mItems[i]); + return c; +} + +/*! + Returns the number of currently existing items in the plot + + \see item, addItem +*/ +int QCustomPlot::itemCount() const +{ + return mItems.size(); +} + +/*! + Returns a list of the selected items. If no items are currently selected, the list is empty. + + \see setInteractions, QCPAbstractItem::setSelectable, QCPAbstractItem::setSelected +*/ +QList QCustomPlot::selectedItems() const +{ + QList result; + foreach (QCPAbstractItem *item, mItems) + { + if (item->selected()) + result.append(item); + } + return result; +} + +/*! + Returns the item at the pixel position \a pos. Items that only consist of single lines (e.g. \ref + QCPItemLine or \ref QCPItemCurve) have a tolerance band around them, see \ref + setSelectionTolerance. If multiple items come into consideration, the one closest to \a pos is + returned. + + If \a onlySelectable is true, only items that are selectable (QCPAbstractItem::setSelectable) are + considered. + + If there is no item at \a pos, the return value is 0. + + \see plottableAt, layoutElementAt +*/ +QCPAbstractItem *QCustomPlot::itemAt(const QPointF &pos, bool onlySelectable) const +{ + QCPAbstractItem *resultItem = 0; + double resultDistance = mSelectionTolerance; // only regard clicks with distances smaller than mSelectionTolerance as selections, so initialize with that value + + foreach (QCPAbstractItem *item, mItems) + { + if (onlySelectable && !item->selectable()) // we could have also passed onlySelectable to the selectTest function, but checking here is faster, because we have access to QCPAbstractItem::selectable + continue; + if (!item->clipToAxisRect() || item->clipRect().contains(pos.toPoint())) // only consider clicks inside axis cliprect of the item if actually clipped to it + { + double currentDistance = item->selectTest(pos, false); + if (currentDistance >= 0 && currentDistance < resultDistance) + { + resultItem = item; + resultDistance = currentDistance; + } + } + } + + return resultItem; +} + +/*! + Returns whether this QCustomPlot contains the \a item. + + \see addItem +*/ +bool QCustomPlot::hasItem(QCPAbstractItem *item) const +{ + return mItems.contains(item); +} + +/*! + Returns the layer with the specified \a name. If there is no layer with the specified name, 0 is + returned. + + Layer names are case-sensitive. + + \see addLayer, moveLayer, removeLayer +*/ +QCPLayer *QCustomPlot::layer(const QString &name) const +{ + foreach (QCPLayer *layer, mLayers) + { + if (layer->name() == name) + return layer; + } + return 0; +} + +/*! \overload + + Returns the layer by \a index. If the index is invalid, 0 is returned. + + \see addLayer, moveLayer, removeLayer +*/ +QCPLayer *QCustomPlot::layer(int index) const +{ + if (index >= 0 && index < mLayers.size()) + { + return mLayers.at(index); + } else + { + qDebug() << Q_FUNC_INFO << "index out of bounds:" << index; + return 0; + } +} + +/*! + Returns the layer that is set as current layer (see \ref setCurrentLayer). +*/ +QCPLayer *QCustomPlot::currentLayer() const +{ + return mCurrentLayer; +} + +/*! + Sets the layer with the specified \a name to be the current layer. All layerables (\ref + QCPLayerable), e.g. plottables and items, are created on the current layer. + + Returns true on success, i.e. if there is a layer with the specified \a name in the QCustomPlot. + + Layer names are case-sensitive. + + \see addLayer, moveLayer, removeLayer, QCPLayerable::setLayer +*/ +bool QCustomPlot::setCurrentLayer(const QString &name) +{ + if (QCPLayer *newCurrentLayer = layer(name)) + { + return setCurrentLayer(newCurrentLayer); + } else + { + qDebug() << Q_FUNC_INFO << "layer with name doesn't exist:" << name; + return false; + } +} + +/*! \overload + + Sets the provided \a layer to be the current layer. + + Returns true on success, i.e. when \a layer is a valid layer in the QCustomPlot. + + \see addLayer, moveLayer, removeLayer +*/ +bool QCustomPlot::setCurrentLayer(QCPLayer *layer) +{ + if (!mLayers.contains(layer)) + { + qDebug() << Q_FUNC_INFO << "layer not a layer of this QCustomPlot:" << reinterpret_cast(layer); + return false; + } + + mCurrentLayer = layer; + return true; +} + +/*! + Returns the number of currently existing layers in the plot + + \see layer, addLayer +*/ +int QCustomPlot::layerCount() const +{ + return mLayers.size(); +} + +/*! + Adds a new layer to this QCustomPlot instance. The new layer will have the name \a name, which + must be unique. Depending on \a insertMode, it is positioned either below or above \a otherLayer. + + Returns true on success, i.e. if there is no other layer named \a name and \a otherLayer is a + valid layer inside this QCustomPlot. + + If \a otherLayer is 0, the highest layer in the QCustomPlot will be used. + + For an explanation of what layers are in QCustomPlot, see the documentation of \ref QCPLayer. + + \see layer, moveLayer, removeLayer +*/ +bool QCustomPlot::addLayer(const QString &name, QCPLayer *otherLayer, QCustomPlot::LayerInsertMode insertMode) +{ + if (!otherLayer) + otherLayer = mLayers.last(); + if (!mLayers.contains(otherLayer)) + { + qDebug() << Q_FUNC_INFO << "otherLayer not a layer of this QCustomPlot:" << reinterpret_cast(otherLayer); + return false; + } + if (layer(name)) + { + qDebug() << Q_FUNC_INFO << "A layer exists already with the name" << name; + return false; + } + + QCPLayer *newLayer = new QCPLayer(this, name); + mLayers.insert(otherLayer->index() + (insertMode==limAbove ? 1:0), newLayer); + updateLayerIndices(); + return true; +} + +/*! + Removes the specified \a layer and returns true on success. + + All layerables (e.g. plottables and items) on the removed layer will be moved to the layer below + \a layer. If \a layer is the bottom layer, the layerables are moved to the layer above. In both + cases, the total rendering order of all layerables in the QCustomPlot is preserved. + + If \a layer is the current layer (\ref setCurrentLayer), the layer below (or above, if bottom + layer) becomes the new current layer. + + It is not possible to remove the last layer of the plot. + + \see layer, addLayer, moveLayer +*/ +bool QCustomPlot::removeLayer(QCPLayer *layer) +{ + if (!mLayers.contains(layer)) + { + qDebug() << Q_FUNC_INFO << "layer not a layer of this QCustomPlot:" << reinterpret_cast(layer); + return false; + } + if (mLayers.size() < 2) + { + qDebug() << Q_FUNC_INFO << "can't remove last layer"; + return false; + } + + // append all children of this layer to layer below (if this is lowest layer, prepend to layer above) + int removedIndex = layer->index(); + bool isFirstLayer = removedIndex==0; + QCPLayer *targetLayer = isFirstLayer ? mLayers.at(removedIndex+1) : mLayers.at(removedIndex-1); + QList children = layer->children(); + if (isFirstLayer) // prepend in reverse order (so order relative to each other stays the same) + { + for (int i=children.size()-1; i>=0; --i) + children.at(i)->moveToLayer(targetLayer, true); + } else // append normally + { + for (int i=0; imoveToLayer(targetLayer, false); + } + // if removed layer is current layer, change current layer to layer below/above: + if (layer == mCurrentLayer) + setCurrentLayer(targetLayer); + // remove layer: + delete layer; + mLayers.removeOne(layer); + updateLayerIndices(); + return true; +} + +/*! + Moves the specified \a layer either above or below \a otherLayer. Whether it's placed above or + below is controlled with \a insertMode. + + Returns true on success, i.e. when both \a layer and \a otherLayer are valid layers in the + QCustomPlot. + + \see layer, addLayer, moveLayer +*/ +bool QCustomPlot::moveLayer(QCPLayer *layer, QCPLayer *otherLayer, QCustomPlot::LayerInsertMode insertMode) +{ + if (!mLayers.contains(layer)) + { + qDebug() << Q_FUNC_INFO << "layer not a layer of this QCustomPlot:" << reinterpret_cast(layer); + return false; + } + if (!mLayers.contains(otherLayer)) + { + qDebug() << Q_FUNC_INFO << "otherLayer not a layer of this QCustomPlot:" << reinterpret_cast(otherLayer); + return false; + } + + if (layer->index() > otherLayer->index()) + mLayers.move(layer->index(), otherLayer->index() + (insertMode==limAbove ? 1:0)); + else if (layer->index() < otherLayer->index()) + mLayers.move(layer->index(), otherLayer->index() + (insertMode==limAbove ? 0:-1)); + + updateLayerIndices(); + return true; +} + +/*! + Returns the number of axis rects in the plot. + + All axis rects can be accessed via QCustomPlot::axisRect(). + + Initially, only one axis rect exists in the plot. + + \see axisRect, axisRects +*/ +int QCustomPlot::axisRectCount() const +{ + return axisRects().size(); +} + +/*! + Returns the axis rect with \a index. + + Initially, only one axis rect (with index 0) exists in the plot. If multiple axis rects were + added, all of them may be accessed with this function in a linear fashion (even when they are + nested in a layout hierarchy or inside other axis rects via QCPAxisRect::insetLayout). + + \see axisRectCount, axisRects +*/ +QCPAxisRect *QCustomPlot::axisRect(int index) const +{ + const QList rectList = axisRects(); + if (index >= 0 && index < rectList.size()) + { + return rectList.at(index); + } else + { + qDebug() << Q_FUNC_INFO << "invalid axis rect index" << index; + return 0; + } +} + +/*! + Returns all axis rects in the plot. + + \see axisRectCount, axisRect +*/ +QList QCustomPlot::axisRects() const +{ + QList result; + QStack elementStack; + if (mPlotLayout) + elementStack.push(mPlotLayout); + + while (!elementStack.isEmpty()) + { + foreach (QCPLayoutElement *element, elementStack.pop()->elements(false)) + { + if (element) + { + elementStack.push(element); + if (QCPAxisRect *ar = qobject_cast(element)) + result.append(ar); + } + } + } + + return result; +} + +/*! + Returns the layout element at pixel position \a pos. If there is no element at that position, + returns 0. + + Only visible elements are used. If \ref QCPLayoutElement::setVisible on the element itself or on + any of its parent elements is set to false, it will not be considered. + + \see itemAt, plottableAt +*/ +QCPLayoutElement *QCustomPlot::layoutElementAt(const QPointF &pos) const +{ + QCPLayoutElement *currentElement = mPlotLayout; + bool searchSubElements = true; + while (searchSubElements && currentElement) + { + searchSubElements = false; + foreach (QCPLayoutElement *subElement, currentElement->elements(false)) + { + if (subElement && subElement->realVisibility() && subElement->selectTest(pos, false) >= 0) + { + currentElement = subElement; + searchSubElements = true; + break; + } + } + } + return currentElement; +} + +/*! + Returns the axes that currently have selected parts, i.e. whose selection state is not \ref + QCPAxis::spNone. + + \see selectedPlottables, selectedLegends, setInteractions, QCPAxis::setSelectedParts, + QCPAxis::setSelectableParts +*/ +QList QCustomPlot::selectedAxes() const +{ + QList result, allAxes; + foreach (QCPAxisRect *rect, axisRects()) + allAxes << rect->axes(); + + foreach (QCPAxis *axis, allAxes) + { + if (axis->selectedParts() != QCPAxis::spNone) + result.append(axis); + } + + return result; +} + +/*! + Returns the legends that currently have selected parts, i.e. whose selection state is not \ref + QCPLegend::spNone. + + \see selectedPlottables, selectedAxes, setInteractions, QCPLegend::setSelectedParts, + QCPLegend::setSelectableParts, QCPLegend::selectedItems +*/ +QList QCustomPlot::selectedLegends() const +{ + QList result; + + QStack elementStack; + if (mPlotLayout) + elementStack.push(mPlotLayout); + + while (!elementStack.isEmpty()) + { + foreach (QCPLayoutElement *subElement, elementStack.pop()->elements(false)) + { + if (subElement) + { + elementStack.push(subElement); + if (QCPLegend *leg = qobject_cast(subElement)) + { + if (leg->selectedParts() != QCPLegend::spNone) + result.append(leg); + } + } + } + } + + return result; +} + +/*! + Deselects all layerables (plottables, items, axes, legends,...) of the QCustomPlot. + + Since calling this function is not a user interaction, this does not emit the \ref + selectionChangedByUser signal. The individual selectionChanged signals are emitted though, if the + objects were previously selected. + + \see setInteractions, selectedPlottables, selectedItems, selectedAxes, selectedLegends +*/ +void QCustomPlot::deselectAll() +{ + foreach (QCPLayer *layer, mLayers) + { + foreach (QCPLayerable *layerable, layer->children()) + layerable->deselectEvent(0); + } +} + +/*! + Causes a complete replot into the internal buffer. Finally, update() is called, to redraw the + buffer on the QCustomPlot widget surface. This is the method that must be called to make changes, + for example on the axis ranges or data points of graphs, visible. + + Under a few circumstances, QCustomPlot causes a replot by itself. Those are resize events of the + QCustomPlot widget and user interactions (object selection and range dragging/zooming). + + Before the replot happens, the signal \ref beforeReplot is emitted. After the replot, \ref + afterReplot is emitted. It is safe to mutually connect the replot slot with any of those two + signals on two QCustomPlots to make them replot synchronously, it won't cause an infinite + recursion. +*/ +void QCustomPlot::replot(QCustomPlot::RefreshPriority refreshPriority) +{ + if (mReplotting) // incase signals loop back to replot slot + return; + mReplotting = true; + emit beforeReplot(); + + mPaintBuffer.fill(mBackgroundBrush.style() == Qt::SolidPattern ? mBackgroundBrush.color() : Qt::transparent); + QCPPainter painter; + painter.begin(&mPaintBuffer); + if (painter.isActive()) + { + painter.setRenderHint(QPainter::HighQualityAntialiasing); // to make Antialiasing look good if using the OpenGL graphicssystem + if (mBackgroundBrush.style() != Qt::SolidPattern && mBackgroundBrush.style() != Qt::NoBrush) + painter.fillRect(mViewport, mBackgroundBrush); + draw(&painter); + painter.end(); + if ((refreshPriority == rpHint && mPlottingHints.testFlag(QCP::phForceRepaint)) || refreshPriority==rpImmediate) + repaint(); + else + update(); + } else // might happen if QCustomPlot has width or height zero + qDebug() << Q_FUNC_INFO << "Couldn't activate painter on buffer. This usually happens because QCustomPlot has width or height zero."; + + emit afterReplot(); + mReplotting = false; +} + +/*! + Rescales the axes such that all plottables (like graphs) in the plot are fully visible. + + if \a onlyVisiblePlottables is set to true, only the plottables that have their visibility set to true + (QCPLayerable::setVisible), will be used to rescale the axes. + + \see QCPAbstractPlottable::rescaleAxes, QCPAxis::rescale +*/ +void QCustomPlot::rescaleAxes(bool onlyVisiblePlottables) +{ + QList allAxes; + foreach (QCPAxisRect *rect, axisRects()) + allAxes << rect->axes(); + + foreach (QCPAxis *axis, allAxes) + axis->rescale(onlyVisiblePlottables); +} + +/*! + Saves a PDF with the vectorized plot to the file \a fileName. The axis ratio as well as the scale + of texts and lines will be derived from the specified \a width and \a height. This means, the + output will look like the normal on-screen output of a QCustomPlot widget with the corresponding + pixel width and height. If either \a width or \a height is zero, the exported image will have the + same dimensions as the QCustomPlot widget currently has. + + \a noCosmeticPen disables the use of cosmetic pens when drawing to the PDF file. Cosmetic pens + are pens with numerical width 0, which are always drawn as a one pixel wide line, no matter what + zoom factor is set in the PDF-Viewer. For more information about cosmetic pens, see the QPainter + and QPen documentation. + + The objects of the plot will appear in the current selection state. If you don't want any + selected objects to be painted in their selected look, deselect everything with \ref deselectAll + before calling this function. + + Returns true on success. + + \warning + \li If you plan on editing the exported PDF file with a vector graphics editor like + Inkscape, it is advised to set \a noCosmeticPen to true to avoid losing those cosmetic lines + (which might be quite many, because cosmetic pens are the default for e.g. axes and tick marks). + \li If calling this function inside the constructor of the parent of the QCustomPlot widget + (i.e. the MainWindow constructor, if QCustomPlot is inside the MainWindow), always provide + explicit non-zero widths and heights. If you leave \a width or \a height as 0 (default), this + function uses the current width and height of the QCustomPlot widget. However, in Qt, these + aren't defined yet inside the constructor, so you would get an image that has strange + widths/heights. + + \a pdfCreator and \a pdfTitle may be used to set the according metadata fields in the resulting + PDF file. + + \note On Android systems, this method does nothing and issues an according qDebug warning + message. This is also the case if for other reasons the define flag QT_NO_PRINTER is set. + + \see savePng, saveBmp, saveJpg, saveRastered +*/ +bool QCustomPlot::savePdf(const QString &fileName, bool noCosmeticPen, int width, int height, const QString &pdfCreator, const QString &pdfTitle) +{ + bool success = false; +#ifdef QT_NO_PRINTER + Q_UNUSED(fileName) + Q_UNUSED(noCosmeticPen) + Q_UNUSED(width) + Q_UNUSED(height) + Q_UNUSED(pdfCreator) + Q_UNUSED(pdfTitle) + qDebug() << Q_FUNC_INFO << "Qt was built without printer support (QT_NO_PRINTER). PDF not created."; +#else + int newWidth, newHeight; + if (width == 0 || height == 0) + { + newWidth = this->width(); + newHeight = this->height(); + } else + { + newWidth = width; + newHeight = height; + } + + QPrinter printer(QPrinter::ScreenResolution); + printer.setOutputFileName(fileName); + printer.setOutputFormat(QPrinter::PdfFormat); + printer.setColorMode(QPrinter::Color); + printer.printEngine()->setProperty(QPrintEngine::PPK_Creator, pdfCreator); + printer.printEngine()->setProperty(QPrintEngine::PPK_DocumentName, pdfTitle); + QRect oldViewport = viewport(); + setViewport(QRect(0, 0, newWidth, newHeight)); +#if QT_VERSION < QT_VERSION_CHECK(5, 3, 0) + printer.setFullPage(true); + printer.setPaperSize(viewport().size(), QPrinter::DevicePixel); +#else + QPageLayout pageLayout; + pageLayout.setMode(QPageLayout::FullPageMode); + pageLayout.setOrientation(QPageLayout::Portrait); + pageLayout.setMargins(QMarginsF(0, 0, 0, 0)); + pageLayout.setPageSize(QPageSize(viewport().size(), QPageSize::Point, QString(), QPageSize::ExactMatch)); + printer.setPageLayout(pageLayout); +#endif + QCPPainter printpainter; + if (printpainter.begin(&printer)) + { + printpainter.setMode(QCPPainter::pmVectorized); + printpainter.setMode(QCPPainter::pmNoCaching); + printpainter.setMode(QCPPainter::pmNonCosmetic, noCosmeticPen); + printpainter.setWindow(mViewport); + if (mBackgroundBrush.style() != Qt::NoBrush && + mBackgroundBrush.color() != Qt::white && + mBackgroundBrush.color() != Qt::transparent && + mBackgroundBrush.color().alpha() > 0) // draw pdf background color if not white/transparent + printpainter.fillRect(viewport(), mBackgroundBrush); + draw(&printpainter); + printpainter.end(); + success = true; + } + setViewport(oldViewport); +#endif // QT_NO_PRINTER + return success; +} + +/*! + Saves a PNG image file to \a fileName on disc. The output plot will have the dimensions \a width + and \a height in pixels. If either \a width or \a height is zero, the exported image will have + the same dimensions as the QCustomPlot widget currently has. Line widths and texts etc. are not + scaled up when larger widths/heights are used. If you want that effect, use the \a scale parameter. + + For example, if you set both \a width and \a height to 100 and \a scale to 2, you will end up with an + image file of size 200*200 in which all graphical elements are scaled up by factor 2 (line widths, + texts, etc.). This scaling is not done by stretching a 100*100 image, the result will have full + 200*200 pixel resolution. + + If you use a high scaling factor, it is recommended to enable antialiasing for all elements via + temporarily setting \ref QCustomPlot::setAntialiasedElements to \ref QCP::aeAll as this allows + QCustomPlot to place objects with sub-pixel accuracy. + + \warning If calling this function inside the constructor of the parent of the QCustomPlot widget + (i.e. the MainWindow constructor, if QCustomPlot is inside the MainWindow), always provide + explicit non-zero widths and heights. If you leave \a width or \a height as 0 (default), this + function uses the current width and height of the QCustomPlot widget. However, in Qt, these + aren't defined yet inside the constructor, so you would get an image that has strange + widths/heights. + + The objects of the plot will appear in the current selection state. If you don't want any selected + objects to be painted in their selected look, deselect everything with \ref deselectAll before calling + this function. + + If you want the PNG to have a transparent background, call \ref setBackground(const QBrush + &brush) with no brush (Qt::NoBrush) or a transparent color (Qt::transparent), before saving. + + PNG compression can be controlled with the \a quality parameter which must be between 0 and 100 or + -1 to use the default setting. + + Returns true on success. If this function fails, most likely the PNG format isn't supported by + the system, see Qt docs about QImageWriter::supportedImageFormats(). + + \see savePdf, saveBmp, saveJpg, saveRastered +*/ +bool QCustomPlot::savePng(const QString &fileName, int width, int height, double scale, int quality) +{ + return saveRastered(fileName, width, height, scale, "PNG", quality); +} + +/*! + Saves a JPG image file to \a fileName on disc. The output plot will have the dimensions \a width + and \a height in pixels. If either \a width or \a height is zero, the exported image will have + the same dimensions as the QCustomPlot widget currently has. Line widths and texts etc. are not + scaled up when larger widths/heights are used. If you want that effect, use the \a scale parameter. + + For example, if you set both \a width and \a height to 100 and \a scale to 2, you will end up with an + image file of size 200*200 in which all graphical elements are scaled up by factor 2 (line widths, + texts, etc.). This scaling is not done by stretching a 100*100 image, the result will have full + 200*200 pixel resolution. + + If you use a high scaling factor, it is recommended to enable antialiasing for all elements via + temporarily setting \ref QCustomPlot::setAntialiasedElements to \ref QCP::aeAll as this allows + QCustomPlot to place objects with sub-pixel accuracy. + + \warning If calling this function inside the constructor of the parent of the QCustomPlot widget + (i.e. the MainWindow constructor, if QCustomPlot is inside the MainWindow), always provide + explicit non-zero widths and heights. If you leave \a width or \a height as 0 (default), this + function uses the current width and height of the QCustomPlot widget. However, in Qt, these + aren't defined yet inside the constructor, so you would get an image that has strange + widths/heights. + + The objects of the plot will appear in the current selection state. If you don't want any selected + objects to be painted in their selected look, deselect everything with \ref deselectAll before calling + this function. + + JPG compression can be controlled with the \a quality parameter which must be between 0 and 100 or + -1 to use the default setting. + + Returns true on success. If this function fails, most likely the JPG format isn't supported by + the system, see Qt docs about QImageWriter::supportedImageFormats(). + + \see savePdf, savePng, saveBmp, saveRastered +*/ +bool QCustomPlot::saveJpg(const QString &fileName, int width, int height, double scale, int quality) +{ + return saveRastered(fileName, width, height, scale, "JPG", quality); +} + +/*! + Saves a BMP image file to \a fileName on disc. The output plot will have the dimensions \a width + and \a height in pixels. If either \a width or \a height is zero, the exported image will have + the same dimensions as the QCustomPlot widget currently has. Line widths and texts etc. are not + scaled up when larger widths/heights are used. If you want that effect, use the \a scale parameter. + + For example, if you set both \a width and \a height to 100 and \a scale to 2, you will end up with an + image file of size 200*200 in which all graphical elements are scaled up by factor 2 (line widths, + texts, etc.). This scaling is not done by stretching a 100*100 image, the result will have full + 200*200 pixel resolution. + + If you use a high scaling factor, it is recommended to enable antialiasing for all elements via + temporarily setting \ref QCustomPlot::setAntialiasedElements to \ref QCP::aeAll as this allows + QCustomPlot to place objects with sub-pixel accuracy. + + \warning If calling this function inside the constructor of the parent of the QCustomPlot widget + (i.e. the MainWindow constructor, if QCustomPlot is inside the MainWindow), always provide + explicit non-zero widths and heights. If you leave \a width or \a height as 0 (default), this + function uses the current width and height of the QCustomPlot widget. However, in Qt, these + aren't defined yet inside the constructor, so you would get an image that has strange + widths/heights. + + The objects of the plot will appear in the current selection state. If you don't want any selected + objects to be painted in their selected look, deselect everything with \ref deselectAll before calling + this function. + + Returns true on success. If this function fails, most likely the BMP format isn't supported by + the system, see Qt docs about QImageWriter::supportedImageFormats(). + + \see savePdf, savePng, saveJpg, saveRastered +*/ +bool QCustomPlot::saveBmp(const QString &fileName, int width, int height, double scale) +{ + return saveRastered(fileName, width, height, scale, "BMP"); +} + +/*! \internal + + Returns a minimum size hint that corresponds to the minimum size of the top level layout + (\ref plotLayout). To prevent QCustomPlot from being collapsed to size/width zero, set a minimum + size (setMinimumSize) either on the whole QCustomPlot or on any layout elements inside the plot. + This is especially important, when placed in a QLayout where other components try to take in as + much space as possible (e.g. QMdiArea). +*/ +QSize QCustomPlot::minimumSizeHint() const +{ + return mPlotLayout->minimumSizeHint(); +} + +/*! \internal + + Returns a size hint that is the same as \ref minimumSizeHint. + +*/ +QSize QCustomPlot::sizeHint() const +{ + return mPlotLayout->minimumSizeHint(); +} + +/*! \internal + + Event handler for when the QCustomPlot widget needs repainting. This does not cause a \ref replot, but + draws the internal buffer on the widget surface. +*/ +void QCustomPlot::paintEvent(QPaintEvent *event) +{ + Q_UNUSED(event); + QPainter painter(this); + painter.drawPixmap(0, 0, mPaintBuffer); +} + +/*! \internal + + Event handler for a resize of the QCustomPlot widget. Causes the internal buffer to be resized to + the new size. The viewport (which becomes the outer rect of mPlotLayout) is resized + appropriately. Finally a \ref replot is performed. +*/ +void QCustomPlot::resizeEvent(QResizeEvent *event) +{ + // resize and repaint the buffer: + mPaintBuffer = QPixmap(event->size()); + setViewport(rect()); + replot(rpQueued); // queued update is important here, to prevent painting issues in some contexts +} + +/*! \internal + + Event handler for when a double click occurs. Emits the \ref mouseDoubleClick signal, then emits + the specialized signals when certain objecs are clicked (e.g. \ref plottableDoubleClick, \ref + axisDoubleClick, etc.). Finally determines the affected layout element and forwards the event to + it. + + \see mousePressEvent, mouseReleaseEvent +*/ +void QCustomPlot::mouseDoubleClickEvent(QMouseEvent *event) +{ + emit mouseDoubleClick(event); + + QVariant details; + QCPLayerable *clickedLayerable = layerableAt(event->pos(), false, &details); + + // emit specialized object double click signals: + if (QCPAbstractPlottable *ap = qobject_cast(clickedLayerable)) + emit plottableDoubleClick(ap, event); + else if (QCPAxis *ax = qobject_cast(clickedLayerable)) + emit axisDoubleClick(ax, details.value(), event); + else if (QCPAbstractItem *ai = qobject_cast(clickedLayerable)) + emit itemDoubleClick(ai, event); + else if (QCPLegend *lg = qobject_cast(clickedLayerable)) + emit legendDoubleClick(lg, 0, event); + else if (QCPAbstractLegendItem *li = qobject_cast(clickedLayerable)) + emit legendDoubleClick(li->parentLegend(), li, event); + else if (QCPPlotTitle *pt = qobject_cast(clickedLayerable)) + emit titleDoubleClick(event, pt); + + // call double click event of affected layout element: + if (QCPLayoutElement *el = layoutElementAt(event->pos())) + el->mouseDoubleClickEvent(event); + + // call release event of affected layout element (as in mouseReleaseEvent, since the mouseDoubleClick replaces the second release event in double click case): + if (mMouseEventElement) + { + mMouseEventElement->mouseReleaseEvent(event); + mMouseEventElement = 0; + } + + //QWidget::mouseDoubleClickEvent(event); don't call base class implementation because it would just cause a mousePress/ReleaseEvent, which we don't want. +} + +/*! \internal + + Event handler for when a mouse button is pressed. Emits the mousePress signal. Then determines + the affected layout element and forwards the event to it. + + \see mouseMoveEvent, mouseReleaseEvent +*/ +void QCustomPlot::mousePressEvent(QMouseEvent *event) +{ + emit mousePress(event); + mMousePressPos = event->pos(); // need this to determine in releaseEvent whether it was a click (no position change between press and release) + + // call event of affected layout element: + mMouseEventElement = layoutElementAt(event->pos()); + if (mMouseEventElement) + mMouseEventElement->mousePressEvent(event); + + QWidget::mousePressEvent(event); +} + +/*! \internal + + Event handler for when the cursor is moved. Emits the \ref mouseMove signal. + + If a layout element has mouse capture focus (a mousePressEvent happened on top of the layout + element before), the mouseMoveEvent is forwarded to that element. + + \see mousePressEvent, mouseReleaseEvent +*/ +void QCustomPlot::mouseMoveEvent(QMouseEvent *event) +{ + emit mouseMove(event); + + // call event of affected layout element: + if (mMouseEventElement) + mMouseEventElement->mouseMoveEvent(event); + + QWidget::mouseMoveEvent(event); +} + +/*! \internal + + Event handler for when a mouse button is released. Emits the \ref mouseRelease signal. + + If the mouse was moved less than a certain threshold in any direction since the \ref + mousePressEvent, it is considered a click which causes the selection mechanism (if activated via + \ref setInteractions) to possibly change selection states accordingly. Further, specialized mouse + click signals are emitted (e.g. \ref plottableClick, \ref axisClick, etc.) + + If a layout element has mouse capture focus (a \ref mousePressEvent happened on top of the layout + element before), the \ref mouseReleaseEvent is forwarded to that element. + + \see mousePressEvent, mouseMoveEvent +*/ +void QCustomPlot::mouseReleaseEvent(QMouseEvent *event) +{ + emit mouseRelease(event); + bool doReplot = false; + + if ((mMousePressPos-event->pos()).manhattanLength() < 5) // determine whether it was a click operation + { + if (event->button() == Qt::LeftButton) + { + // handle selection mechanism: + QVariant details; + QCPLayerable *clickedLayerable = layerableAt(event->pos(), true, &details); + bool selectionStateChanged = false; + bool additive = mInteractions.testFlag(QCP::iMultiSelect) && event->modifiers().testFlag(mMultiSelectModifier); + // deselect all other layerables if not additive selection: + if (!additive) + { + foreach (QCPLayer *layer, mLayers) + { + foreach (QCPLayerable *layerable, layer->children()) + { + if (layerable != clickedLayerable && mInteractions.testFlag(layerable->selectionCategory())) + { + bool selChanged = false; + layerable->deselectEvent(&selChanged); + selectionStateChanged |= selChanged; + } + } + } + } + if (clickedLayerable && mInteractions.testFlag(clickedLayerable->selectionCategory())) + { + // a layerable was actually clicked, call its selectEvent: + bool selChanged = false; + clickedLayerable->selectEvent(event, additive, details, &selChanged); + selectionStateChanged |= selChanged; + } + if (selectionStateChanged) + { + doReplot = true; + emit selectionChangedByUser(); + } + } + + // emit specialized object click signals: + QVariant details; + QCPLayerable *clickedLayerable = layerableAt(event->pos(), false, &details); // for these signals, selectability is ignored, that's why we call this again with onlySelectable set to false + if (QCPAbstractPlottable *ap = qobject_cast(clickedLayerable)) + emit plottableClick(ap, event); + else if (QCPAxis *ax = qobject_cast(clickedLayerable)) + emit axisClick(ax, details.value(), event); + else if (QCPAbstractItem *ai = qobject_cast(clickedLayerable)) + emit itemClick(ai, event); + else if (QCPLegend *lg = qobject_cast(clickedLayerable)) + emit legendClick(lg, 0, event); + else if (QCPAbstractLegendItem *li = qobject_cast(clickedLayerable)) + emit legendClick(li->parentLegend(), li, event); + else if (QCPPlotTitle *pt = qobject_cast(clickedLayerable)) + emit titleClick(event, pt); + } + + // call event of affected layout element: + if (mMouseEventElement) + { + mMouseEventElement->mouseReleaseEvent(event); + mMouseEventElement = 0; + } + + if (doReplot || noAntialiasingOnDrag()) + replot(); + + QWidget::mouseReleaseEvent(event); +} + +/*! \internal + + Event handler for mouse wheel events. First, the \ref mouseWheel signal is emitted. Then + determines the affected layout element and forwards the event to it. + +*/ +void QCustomPlot::wheelEvent(QWheelEvent *event) +{ + emit mouseWheel(event); + + // call event of affected layout element: + if (QCPLayoutElement *el = layoutElementAt(event->pos())) + el->wheelEvent(event); + + QWidget::wheelEvent(event); +} + +/*! \internal + + This is the main draw function. It draws the entire plot, including background pixmap, with the + specified \a painter. Note that it does not fill the background with the background brush (as the + user may specify with \ref setBackground(const QBrush &brush)), this is up to the respective + functions calling this method (e.g. \ref replot, \ref toPixmap and \ref toPainter). +*/ +void QCustomPlot::draw(QCPPainter *painter) +{ + // run through layout phases: + mPlotLayout->update(QCPLayoutElement::upPreparation); + mPlotLayout->update(QCPLayoutElement::upMargins); + mPlotLayout->update(QCPLayoutElement::upLayout); + + // draw viewport background pixmap: + drawBackground(painter); + + // draw all layered objects (grid, axes, plottables, items, legend,...): + foreach (QCPLayer *layer, mLayers) + { + foreach (QCPLayerable *child, layer->children()) + { + if (child->realVisibility()) + { + painter->save(); + painter->setClipRect(child->clipRect().translated(0, -1)); + child->applyDefaultAntialiasingHint(painter); + child->draw(painter); + painter->restore(); + } + } + } + + /* Debug code to draw all layout element rects + foreach (QCPLayoutElement* el, findChildren()) + { + painter->setBrush(Qt::NoBrush); + painter->setPen(QPen(QColor(0, 0, 0, 100), 0, Qt::DashLine)); + painter->drawRect(el->rect()); + painter->setPen(QPen(QColor(255, 0, 0, 100), 0, Qt::DashLine)); + painter->drawRect(el->outerRect()); + } + */ +} + +/*! \internal + + Draws the viewport background pixmap of the plot. + + If a pixmap was provided via \ref setBackground, this function buffers the scaled version + depending on \ref setBackgroundScaled and \ref setBackgroundScaledMode and then draws it inside + the viewport with the provided \a painter. The scaled version is buffered in + mScaledBackgroundPixmap to prevent expensive rescaling at every redraw. It is only updated, when + the axis rect has changed in a way that requires a rescale of the background pixmap (this is + dependent on the \ref setBackgroundScaledMode), or when a differend axis background pixmap was + set. + + Note that this function does not draw a fill with the background brush (\ref setBackground(const + QBrush &brush)) beneath the pixmap. + + \see setBackground, setBackgroundScaled, setBackgroundScaledMode +*/ +void QCustomPlot::drawBackground(QCPPainter *painter) +{ + // Note: background color is handled in individual replot/save functions + + // draw background pixmap (on top of fill, if brush specified): + if (!mBackgroundPixmap.isNull()) + { + if (mBackgroundScaled) + { + // check whether mScaledBackground needs to be updated: + QSize scaledSize(mBackgroundPixmap.size()); + scaledSize.scale(mViewport.size(), mBackgroundScaledMode); + if (mScaledBackgroundPixmap.size() != scaledSize) + mScaledBackgroundPixmap = mBackgroundPixmap.scaled(mViewport.size(), mBackgroundScaledMode, Qt::SmoothTransformation); + painter->drawPixmap(mViewport.topLeft(), mScaledBackgroundPixmap, QRect(0, 0, mViewport.width(), mViewport.height()) & mScaledBackgroundPixmap.rect()); + } else + { + painter->drawPixmap(mViewport.topLeft(), mBackgroundPixmap, QRect(0, 0, mViewport.width(), mViewport.height())); + } + } +} + + +/*! \internal + + This method is used by \ref QCPAxisRect::removeAxis to report removed axes to the QCustomPlot + so it may clear its QCustomPlot::xAxis, yAxis, xAxis2 and yAxis2 members accordingly. +*/ +void QCustomPlot::axisRemoved(QCPAxis *axis) +{ + if (xAxis == axis) + xAxis = 0; + if (xAxis2 == axis) + xAxis2 = 0; + if (yAxis == axis) + yAxis = 0; + if (yAxis2 == axis) + yAxis2 = 0; + + // Note: No need to take care of range drag axes and range zoom axes, because they are stored in smart pointers +} + +/*! \internal + + This method is used by the QCPLegend destructor to report legend removal to the QCustomPlot so + it may clear its QCustomPlot::legend member accordingly. +*/ +void QCustomPlot::legendRemoved(QCPLegend *legend) +{ + if (this->legend == legend) + this->legend = 0; +} + +/*! \internal + + Assigns all layers their index (QCPLayer::mIndex) in the mLayers list. This method is thus called + after every operation that changes the layer indices, like layer removal, layer creation, layer + moving. +*/ +void QCustomPlot::updateLayerIndices() const +{ + for (int i=0; imIndex = i; +} + +/*! \internal + + Returns the layerable at pixel position \a pos. If \a onlySelectable is set to true, only those + layerables that are selectable will be considered. (Layerable subclasses communicate their + selectability via the QCPLayerable::selectTest method, by returning -1.) + + \a selectionDetails is an output parameter that contains selection specifics of the affected + layerable. This is useful if the respective layerable shall be given a subsequent + QCPLayerable::selectEvent (like in \ref mouseReleaseEvent). \a selectionDetails usually contains + information about which part of the layerable was hit, in multi-part layerables (e.g. + QCPAxis::SelectablePart). +*/ +QCPLayerable *QCustomPlot::layerableAt(const QPointF &pos, bool onlySelectable, QVariant *selectionDetails) const +{ + for (int layerIndex=mLayers.size()-1; layerIndex>=0; --layerIndex) + { + const QList layerables = mLayers.at(layerIndex)->children(); + double minimumDistance = selectionTolerance()*1.1; + QCPLayerable *minimumDistanceLayerable = 0; + for (int i=layerables.size()-1; i>=0; --i) + { + if (!layerables.at(i)->realVisibility()) + continue; + QVariant details; + double dist = layerables.at(i)->selectTest(pos, onlySelectable, &details); + if (dist >= 0 && dist < minimumDistance) + { + minimumDistance = dist; + minimumDistanceLayerable = layerables.at(i); + if (selectionDetails) *selectionDetails = details; + } + } + if (minimumDistance < selectionTolerance()) + return minimumDistanceLayerable; + } + return 0; +} + +/*! + Saves the plot to a rastered image file \a fileName in the image format \a format. The plot is + sized to \a width and \a height in pixels and scaled with \a scale. (width 100 and scale 2.0 lead + to a full resolution file with width 200.) If the \a format supports compression, \a quality may + be between 0 and 100 to control it. + + Returns true on success. If this function fails, most likely the given \a format isn't supported + by the system, see Qt docs about QImageWriter::supportedImageFormats(). + + \see saveBmp, saveJpg, savePng, savePdf +*/ +bool QCustomPlot::saveRastered(const QString &fileName, int width, int height, double scale, const char *format, int quality) +{ + QPixmap buffer = toPixmap(width, height, scale); + if (!buffer.isNull()) + return buffer.save(fileName, format, quality); + else + return false; +} + +/*! + Renders the plot to a pixmap and returns it. + + The plot is sized to \a width and \a height in pixels and scaled with \a scale. (width 100 and + scale 2.0 lead to a full resolution pixmap with width 200.) + + \see toPainter, saveRastered, saveBmp, savePng, saveJpg, savePdf +*/ +QPixmap QCustomPlot::toPixmap(int width, int height, double scale) +{ + // this method is somewhat similar to toPainter. Change something here, and a change in toPainter might be necessary, too. + int newWidth, newHeight; + if (width == 0 || height == 0) + { + newWidth = this->width(); + newHeight = this->height(); + } else + { + newWidth = width; + newHeight = height; + } + int scaledWidth = qRound(scale*newWidth); + int scaledHeight = qRound(scale*newHeight); + + QPixmap result(scaledWidth, scaledHeight); + result.fill(mBackgroundBrush.style() == Qt::SolidPattern ? mBackgroundBrush.color() : Qt::transparent); // if using non-solid pattern, make transparent now and draw brush pattern later + QCPPainter painter; + painter.begin(&result); + if (painter.isActive()) + { + QRect oldViewport = viewport(); + setViewport(QRect(0, 0, newWidth, newHeight)); + painter.setMode(QCPPainter::pmNoCaching); + if (!qFuzzyCompare(scale, 1.0)) + { + if (scale > 1.0) // for scale < 1 we always want cosmetic pens where possible, because else lines might disappear for very small scales + painter.setMode(QCPPainter::pmNonCosmetic); + painter.scale(scale, scale); + } + if (mBackgroundBrush.style() != Qt::SolidPattern && mBackgroundBrush.style() != Qt::NoBrush) // solid fills were done a few lines above with QPixmap::fill + painter.fillRect(mViewport, mBackgroundBrush); + draw(&painter); + setViewport(oldViewport); + painter.end(); + } else // might happen if pixmap has width or height zero + { + qDebug() << Q_FUNC_INFO << "Couldn't activate painter on pixmap"; + return QPixmap(); + } + return result; +} + +/*! + Renders the plot using the passed \a painter. + + The plot is sized to \a width and \a height in pixels. If the \a painter's scale is not 1.0, the resulting plot will + appear scaled accordingly. + + \note If you are restricted to using a QPainter (instead of QCPPainter), create a temporary QPicture and open a QCPPainter + on it. Then call \ref toPainter with this QCPPainter. After ending the paint operation on the picture, draw it with + the QPainter. This will reproduce the painter actions the QCPPainter took, with a QPainter. + + \see toPixmap +*/ +void QCustomPlot::toPainter(QCPPainter *painter, int width, int height) +{ + // this method is somewhat similar to toPixmap. Change something here, and a change in toPixmap might be necessary, too. + int newWidth, newHeight; + if (width == 0 || height == 0) + { + newWidth = this->width(); + newHeight = this->height(); + } else + { + newWidth = width; + newHeight = height; + } + + if (painter->isActive()) + { + QRect oldViewport = viewport(); + setViewport(QRect(0, 0, newWidth, newHeight)); + painter->setMode(QCPPainter::pmNoCaching); + if (mBackgroundBrush.style() != Qt::NoBrush) // unlike in toPixmap, we can't do QPixmap::fill for Qt::SolidPattern brush style, so we also draw solid fills with fillRect here + painter->fillRect(mViewport, mBackgroundBrush); + draw(painter); + setViewport(oldViewport); + } else + qDebug() << Q_FUNC_INFO << "Passed painter is not active"; +} + + +//////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////// QCPColorGradient +//////////////////////////////////////////////////////////////////////////////////////////////////// + +/*! \class QCPColorGradient + \brief Defines a color gradient for use with e.g. \ref QCPColorMap + + This class describes a color gradient which can be used to encode data with color. For example, + QCPColorMap and QCPColorScale have \ref QCPColorMap::setGradient "setGradient" methods which + take an instance of this class. Colors are set with \ref setColorStopAt(double position, const QColor &color) + with a \a position from 0 to 1. In between these defined color positions, the + color will be interpolated linearly either in RGB or HSV space, see \ref setColorInterpolation. + + Alternatively, load one of the preset color gradients shown in the image below, with \ref + loadPreset, or by directly specifying the preset in the constructor. + + \image html QCPColorGradient.png + + The fact that the \ref QCPColorGradient(GradientPreset preset) constructor allows directly + converting a \ref GradientPreset to a QCPColorGradient, you can also directly pass \ref + GradientPreset to all the \a setGradient methods, e.g.: + \snippet documentation/doc-code-snippets/mainwindow.cpp qcpcolorgradient-setgradient + + The total number of levels used in the gradient can be set with \ref setLevelCount. Whether the + color gradient shall be applied periodically (wrapping around) to data values that lie outside + the data range specified on the plottable instance can be controlled with \ref setPeriodic. +*/ + +/*! + Constructs a new QCPColorGradient initialized with the colors and color interpolation according + to \a preset. + + The color level count is initialized to 350. +*/ +QCPColorGradient::QCPColorGradient(GradientPreset preset) : + mLevelCount(350), + mColorInterpolation(ciRGB), + mPeriodic(false), + mColorBufferInvalidated(true) +{ + mColorBuffer.fill(qRgb(0, 0, 0), mLevelCount); + loadPreset(preset); +} + +/* undocumented operator */ +bool QCPColorGradient::operator==(const QCPColorGradient &other) const +{ + return ((other.mLevelCount == this->mLevelCount) && + (other.mColorInterpolation == this->mColorInterpolation) && + (other.mPeriodic == this->mPeriodic) && + (other.mColorStops == this->mColorStops)); +} + +/*! + Sets the number of discretization levels of the color gradient to \a n. The default is 350 which + is typically enough to create a smooth appearance. + + \image html QCPColorGradient-levelcount.png +*/ +void QCPColorGradient::setLevelCount(int n) +{ + if (n < 2) + { + qDebug() << Q_FUNC_INFO << "n must be greater or equal 2 but was" << n; + n = 2; + } + if (n != mLevelCount) + { + mLevelCount = n; + mColorBufferInvalidated = true; + } +} + +/*! + Sets at which positions from 0 to 1 which color shall occur. The positions are the keys, the + colors are the values of the passed QMap \a colorStops. In between these color stops, the color + is interpolated according to \ref setColorInterpolation. + + A more convenient way to create a custom gradient may be to clear all color stops with \ref + clearColorStops and then adding them one by one with \ref setColorStopAt. + + \see clearColorStops +*/ +void QCPColorGradient::setColorStops(const QMap &colorStops) +{ + mColorStops = colorStops; + mColorBufferInvalidated = true; +} + +/*! + Sets the \a color the gradient will have at the specified \a position (from 0 to 1). In between + these color stops, the color is interpolated according to \ref setColorInterpolation. + + \see setColorStops, clearColorStops +*/ +void QCPColorGradient::setColorStopAt(double position, const QColor &color) +{ + mColorStops.insert(position, color); + mColorBufferInvalidated = true; +} + +/*! + Sets whether the colors in between the configured color stops (see \ref setColorStopAt) shall be + interpolated linearly in RGB or in HSV color space. + + For example, a sweep in RGB space from red to green will have a muddy brown intermediate color, + whereas in HSV space the intermediate color is yellow. +*/ +void QCPColorGradient::setColorInterpolation(QCPColorGradient::ColorInterpolation interpolation) +{ + if (interpolation != mColorInterpolation) + { + mColorInterpolation = interpolation; + mColorBufferInvalidated = true; + } +} + +/*! + Sets whether data points that are outside the configured data range (e.g. \ref + QCPColorMap::setDataRange) are colored by periodically repeating the color gradient or whether + they all have the same color, corresponding to the respective gradient boundary color. + + \image html QCPColorGradient-periodic.png + + As shown in the image above, gradients that have the same start and end color are especially + suitable for a periodic gradient mapping, since they produce smooth color transitions throughout + the color map. A preset that has this property is \ref gpHues. + + In practice, using periodic color gradients makes sense when the data corresponds to a periodic + dimension, such as an angle or a phase. If this is not the case, the color encoding might become + ambiguous, because multiple different data values are shown as the same color. +*/ +void QCPColorGradient::setPeriodic(bool enabled) +{ + mPeriodic = enabled; +} + +/*! + This method is used to quickly convert a \a data array to colors. The colors will be output in + the array \a scanLine. Both \a data and \a scanLine must have the length \a n when passed to this + function. The data range that shall be used for mapping the data value to the gradient is passed + in \a range. \a logarithmic indicates whether the data values shall be mapped to colors + logarithmically. + + if \a data actually contains 2D-data linearized via [row*columnCount + column], you can + set \a dataIndexFactor to columnCount to convert a column instead of a row of the data + array, in \a scanLine. \a scanLine will remain a regular (1D) array. This works because \a data + is addressed data[i*dataIndexFactor]. +*/ +void QCPColorGradient::colorize(const double *data, const QCPRange &range, QRgb *scanLine, int n, int dataIndexFactor, bool logarithmic) +{ + // If you change something here, make sure to also adapt ::color() + if (!data) + { + qDebug() << Q_FUNC_INFO << "null pointer given as data"; + return; + } + if (!scanLine) + { + qDebug() << Q_FUNC_INFO << "null pointer given as scanLine"; + return; + } + if (mColorBufferInvalidated) + updateColorBuffer(); + + if (!logarithmic) + { + const double posToIndexFactor = (mLevelCount-1)/range.size(); + if (mPeriodic) + { + for (int i=0; i= mLevelCount) + index = mLevelCount-1; + scanLine[i] = mColorBuffer.at(index); + } + } + } else // logarithmic == true + { + if (mPeriodic) + { + for (int i=0; i= mLevelCount) + index = mLevelCount-1; + scanLine[i] = mColorBuffer.at(index); + } + } + } +} + +/*! \internal + + This method is used to colorize a single data value given in \a position, to colors. The data + range that shall be used for mapping the data value to the gradient is passed in \a range. \a + logarithmic indicates whether the data value shall be mapped to a color logarithmically. + + If an entire array of data values shall be converted, rather use \ref colorize, for better + performance. +*/ +QRgb QCPColorGradient::color(double position, const QCPRange &range, bool logarithmic) +{ + // If you change something here, make sure to also adapt ::colorize() + if (mColorBufferInvalidated) + updateColorBuffer(); + int index = 0; + if (!logarithmic) + index = (position-range.lower)*(mLevelCount-1)/range.size(); + else + index = qLn(position/range.lower)/qLn(range.upper/range.lower)*(mLevelCount-1); + if (mPeriodic) + { + index = index % mLevelCount; + if (index < 0) + index += mLevelCount; + } else + { + if (index < 0) + index = 0; + else if (index >= mLevelCount) + index = mLevelCount-1; + } + return mColorBuffer.at(index); +} + +/*! + Clears the current color stops and loads the specified \a preset. A preset consists of predefined + color stops and the corresponding color interpolation method. + + The available presets are: + \image html QCPColorGradient.png +*/ +void QCPColorGradient::loadPreset(GradientPreset preset) +{ + clearColorStops(); + switch (preset) + { + case gpGrayscale: + setColorInterpolation(ciRGB); + setColorStopAt(0, Qt::black); + setColorStopAt(1, Qt::white); + break; + case gpHot: + setColorInterpolation(ciRGB); + setColorStopAt(0, QColor(50, 0, 0)); + setColorStopAt(0.2, QColor(180, 10, 0)); + setColorStopAt(0.4, QColor(245, 50, 0)); + setColorStopAt(0.6, QColor(255, 150, 10)); + setColorStopAt(0.8, QColor(255, 255, 50)); + setColorStopAt(1, QColor(255, 255, 255)); + break; + case gpCold: + setColorInterpolation(ciRGB); + setColorStopAt(0, QColor(0, 0, 50)); + setColorStopAt(0.2, QColor(0, 10, 180)); + setColorStopAt(0.4, QColor(0, 50, 245)); + setColorStopAt(0.6, QColor(10, 150, 255)); + setColorStopAt(0.8, QColor(50, 255, 255)); + setColorStopAt(1, QColor(255, 255, 255)); + break; + case gpNight: + setColorInterpolation(ciHSV); + setColorStopAt(0, QColor(10, 20, 30)); + setColorStopAt(1, QColor(250, 255, 250)); + break; + case gpCandy: + setColorInterpolation(ciHSV); + setColorStopAt(0, QColor(0, 0, 255)); + setColorStopAt(1, QColor(255, 250, 250)); + break; + case gpGeography: + setColorInterpolation(ciRGB); + setColorStopAt(0, QColor(70, 170, 210)); + setColorStopAt(0.20, QColor(90, 160, 180)); + setColorStopAt(0.25, QColor(45, 130, 175)); + setColorStopAt(0.30, QColor(100, 140, 125)); + setColorStopAt(0.5, QColor(100, 140, 100)); + setColorStopAt(0.6, QColor(130, 145, 120)); + setColorStopAt(0.7, QColor(140, 130, 120)); + setColorStopAt(0.9, QColor(180, 190, 190)); + setColorStopAt(1, QColor(210, 210, 230)); + break; + case gpIon: + setColorInterpolation(ciHSV); + setColorStopAt(0, QColor(50, 10, 10)); + setColorStopAt(0.45, QColor(0, 0, 255)); + setColorStopAt(0.8, QColor(0, 255, 255)); + setColorStopAt(1, QColor(0, 255, 0)); + break; + case gpThermal: + setColorInterpolation(ciRGB); + setColorStopAt(0, QColor(0, 0, 50)); + setColorStopAt(0.15, QColor(20, 0, 120)); + setColorStopAt(0.33, QColor(200, 30, 140)); + setColorStopAt(0.6, QColor(255, 100, 0)); + setColorStopAt(0.85, QColor(255, 255, 40)); + setColorStopAt(1, QColor(255, 255, 255)); + break; + case gpPolar: + setColorInterpolation(ciRGB); + setColorStopAt(0, QColor(50, 255, 255)); + setColorStopAt(0.18, QColor(10, 70, 255)); + setColorStopAt(0.28, QColor(10, 10, 190)); + setColorStopAt(0.5, QColor(0, 0, 0)); + setColorStopAt(0.72, QColor(190, 10, 10)); + setColorStopAt(0.82, QColor(255, 70, 10)); + setColorStopAt(1, QColor(255, 255, 50)); + break; + case gpSpectrum: + setColorInterpolation(ciHSV); + setColorStopAt(0, QColor(50, 0, 50)); + setColorStopAt(0.15, QColor(0, 0, 255)); + setColorStopAt(0.35, QColor(0, 255, 255)); + setColorStopAt(0.6, QColor(255, 255, 0)); + setColorStopAt(0.75, QColor(255, 30, 0)); + setColorStopAt(1, QColor(50, 0, 0)); + break; + case gpJet: + setColorInterpolation(ciRGB); + setColorStopAt(0, QColor(0, 0, 100)); + setColorStopAt(0.15, QColor(0, 50, 255)); + setColorStopAt(0.35, QColor(0, 255, 255)); + setColorStopAt(0.65, QColor(255, 255, 0)); + setColorStopAt(0.85, QColor(255, 30, 0)); + setColorStopAt(1, QColor(100, 0, 0)); + break; + case gpHues: + setColorInterpolation(ciHSV); + setColorStopAt(0, QColor(255, 0, 0)); + setColorStopAt(1.0/3.0, QColor(0, 0, 255)); + setColorStopAt(2.0/3.0, QColor(0, 255, 0)); + setColorStopAt(1, QColor(255, 0, 0)); + break; + } +} + +/*! + Clears all color stops. + + \see setColorStops, setColorStopAt +*/ +void QCPColorGradient::clearColorStops() +{ + mColorStops.clear(); + mColorBufferInvalidated = true; +} + +/*! + Returns an inverted gradient. The inverted gradient has all properties as this \ref + QCPColorGradient, but the order of the color stops is inverted. + + \see setColorStops, setColorStopAt +*/ +QCPColorGradient QCPColorGradient::inverted() const +{ + QCPColorGradient result(*this); + result.clearColorStops(); + for (QMap::const_iterator it=mColorStops.constBegin(); it!=mColorStops.constEnd(); ++it) + result.setColorStopAt(1.0-it.key(), it.value()); + return result; +} + +/*! \internal + + Updates the internal color buffer which will be used by \ref colorize and \ref color, to quickly + convert positions to colors. This is where the interpolation between color stops is calculated. +*/ +void QCPColorGradient::updateColorBuffer() +{ + if (mColorBuffer.size() != mLevelCount) + mColorBuffer.resize(mLevelCount); + if (mColorStops.size() > 1) + { + double indexToPosFactor = 1.0/(double)(mLevelCount-1); + for (int i=0; i::const_iterator it = mColorStops.lowerBound(position); + if (it == mColorStops.constEnd()) // position is on or after last stop, use color of last stop + { + mColorBuffer[i] = (it-1).value().rgb(); + } else if (it == mColorStops.constBegin()) // position is on or before first stop, use color of first stop + { + mColorBuffer[i] = it.value().rgb(); + } else // position is in between stops (or on an intermediate stop), interpolate color + { + QMap::const_iterator high = it; + QMap::const_iterator low = it-1; + double t = (position-low.key())/(high.key()-low.key()); // interpolation factor 0..1 + switch (mColorInterpolation) + { + case ciRGB: + { + mColorBuffer[i] = qRgb((1-t)*low.value().red() + t*high.value().red(), + (1-t)*low.value().green() + t*high.value().green(), + (1-t)*low.value().blue() + t*high.value().blue()); + break; + } + case ciHSV: + { + QColor lowHsv = low.value().toHsv(); + QColor highHsv = high.value().toHsv(); + double hue = 0; + double hueDiff = highHsv.hueF()-lowHsv.hueF(); + if (hueDiff > 0.5) + hue = lowHsv.hueF() - t*(1.0-hueDiff); + else if (hueDiff < -0.5) + hue = lowHsv.hueF() + t*(1.0+hueDiff); + else + hue = lowHsv.hueF() + t*hueDiff; + if (hue < 0) hue += 1.0; + else if (hue >= 1.0) hue -= 1.0; + mColorBuffer[i] = QColor::fromHsvF(hue, (1-t)*lowHsv.saturationF() + t*highHsv.saturationF(), (1-t)*lowHsv.valueF() + t*highHsv.valueF()).rgb(); + break; + } + } + } + } + } else if (mColorStops.size() == 1) + { + mColorBuffer.fill(mColorStops.constBegin().value().rgb()); + } else // mColorStops is empty, fill color buffer with black + { + mColorBuffer.fill(qRgb(0, 0, 0)); + } + mColorBufferInvalidated = false; +} + + +//////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////// QCPAxisRect +//////////////////////////////////////////////////////////////////////////////////////////////////// + +/*! \class QCPAxisRect + \brief Holds multiple axes and arranges them in a rectangular shape. + + This class represents an axis rect, a rectangular area that is bounded on all sides with an + arbitrary number of axes. + + Initially QCustomPlot has one axis rect, accessible via QCustomPlot::axisRect(). However, the + layout system allows to have multiple axis rects, e.g. arranged in a grid layout + (QCustomPlot::plotLayout). + + By default, QCPAxisRect comes with four axes, at bottom, top, left and right. They can be + accessed via \ref axis by providing the respective axis type (\ref QCPAxis::AxisType) and index. + If you need all axes in the axis rect, use \ref axes. The top and right axes are set to be + invisible initially (QCPAxis::setVisible). To add more axes to a side, use \ref addAxis or \ref + addAxes. To remove an axis, use \ref removeAxis. + + The axis rect layerable itself only draws a background pixmap or color, if specified (\ref + setBackground). It is placed on the "background" layer initially (see \ref QCPLayer for an + explanation of the QCustomPlot layer system). The axes that are held by the axis rect can be + placed on other layers, independently of the axis rect. + + Every axis rect has a child layout of type \ref QCPLayoutInset. It is accessible via \ref + insetLayout and can be used to have other layout elements (or even other layouts with multiple + elements) hovering inside the axis rect. + + If an axis rect is clicked and dragged, it processes this by moving certain axis ranges. The + behaviour can be controlled with \ref setRangeDrag and \ref setRangeDragAxes. If the mouse wheel + is scrolled while the cursor is on the axis rect, certain axes are scaled. This is controllable + via \ref setRangeZoom, \ref setRangeZoomAxes and \ref setRangeZoomFactor. These interactions are + only enabled if \ref QCustomPlot::setInteractions contains \ref QCP::iRangeDrag and \ref + QCP::iRangeZoom. + + \image html AxisRectSpacingOverview.png +
    Overview of the spacings and paddings that define the geometry of an axis. The dashed + line on the far left indicates the viewport/widget border.
    +*/ + +/* start documentation of inline functions */ + +/*! \fn QCPLayoutInset *QCPAxisRect::insetLayout() const + + Returns the inset layout of this axis rect. It can be used to place other layout elements (or + even layouts with multiple other elements) inside/on top of an axis rect. + + \see QCPLayoutInset +*/ + +/*! \fn int QCPAxisRect::left() const + + Returns the pixel position of the left border of this axis rect. Margins are not taken into + account here, so the returned value is with respect to the inner \ref rect. +*/ + +/*! \fn int QCPAxisRect::right() const + + Returns the pixel position of the right border of this axis rect. Margins are not taken into + account here, so the returned value is with respect to the inner \ref rect. +*/ + +/*! \fn int QCPAxisRect::top() const + + Returns the pixel position of the top border of this axis rect. Margins are not taken into + account here, so the returned value is with respect to the inner \ref rect. +*/ + +/*! \fn int QCPAxisRect::bottom() const + + Returns the pixel position of the bottom border of this axis rect. Margins are not taken into + account here, so the returned value is with respect to the inner \ref rect. +*/ + +/*! \fn int QCPAxisRect::width() const + + Returns the pixel width of this axis rect. Margins are not taken into account here, so the + returned value is with respect to the inner \ref rect. +*/ + +/*! \fn int QCPAxisRect::height() const + + Returns the pixel height of this axis rect. Margins are not taken into account here, so the + returned value is with respect to the inner \ref rect. +*/ + +/*! \fn QSize QCPAxisRect::size() const + + Returns the pixel size of this axis rect. Margins are not taken into account here, so the + returned value is with respect to the inner \ref rect. +*/ + +/*! \fn QPoint QCPAxisRect::topLeft() const + + Returns the top left corner of this axis rect in pixels. Margins are not taken into account here, + so the returned value is with respect to the inner \ref rect. +*/ + +/*! \fn QPoint QCPAxisRect::topRight() const + + Returns the top right corner of this axis rect in pixels. Margins are not taken into account + here, so the returned value is with respect to the inner \ref rect. +*/ + +/*! \fn QPoint QCPAxisRect::bottomLeft() const + + Returns the bottom left corner of this axis rect in pixels. Margins are not taken into account + here, so the returned value is with respect to the inner \ref rect. +*/ + +/*! \fn QPoint QCPAxisRect::bottomRight() const + + Returns the bottom right corner of this axis rect in pixels. Margins are not taken into account + here, so the returned value is with respect to the inner \ref rect. +*/ + +/*! \fn QPoint QCPAxisRect::center() const + + Returns the center of this axis rect in pixels. Margins are not taken into account here, so the + returned value is with respect to the inner \ref rect. +*/ + +/* end documentation of inline functions */ + +/*! + Creates a QCPAxisRect instance and sets default values. An axis is added for each of the four + sides, the top and right axes are set invisible initially. +*/ +QCPAxisRect::QCPAxisRect(QCustomPlot *parentPlot, bool setupDefaultAxes) : + QCPLayoutElement(parentPlot), + mBackgroundBrush(Qt::NoBrush), + mBackgroundScaled(true), + mBackgroundScaledMode(Qt::KeepAspectRatioByExpanding), + mInsetLayout(new QCPLayoutInset), + mRangeDrag(Qt::Horizontal|Qt::Vertical), + mRangeZoom(Qt::Horizontal|Qt::Vertical), + mRangeZoomFactorHorz(0.85), + mRangeZoomFactorVert(0.85), + mDragging(false) +{ + mInsetLayout->initializeParentPlot(mParentPlot); + mInsetLayout->setParentLayerable(this); + mInsetLayout->setParent(this); + + setMinimumSize(50, 50); + setMinimumMargins(QMargins(15, 15, 15, 15)); + mAxes.insert(QCPAxis::atLeft, QList()); + mAxes.insert(QCPAxis::atRight, QList()); + mAxes.insert(QCPAxis::atTop, QList()); + mAxes.insert(QCPAxis::atBottom, QList()); + + if (setupDefaultAxes) + { + QCPAxis *xAxis = addAxis(QCPAxis::atBottom); + QCPAxis *yAxis = addAxis(QCPAxis::atLeft); + QCPAxis *xAxis2 = addAxis(QCPAxis::atTop); + QCPAxis *yAxis2 = addAxis(QCPAxis::atRight); + setRangeDragAxes(xAxis, yAxis); + setRangeZoomAxes(xAxis, yAxis); + xAxis2->setVisible(false); + yAxis2->setVisible(false); + xAxis->grid()->setVisible(true); + yAxis->grid()->setVisible(true); + xAxis2->grid()->setVisible(false); + yAxis2->grid()->setVisible(false); + xAxis2->grid()->setZeroLinePen(Qt::NoPen); + yAxis2->grid()->setZeroLinePen(Qt::NoPen); + xAxis2->grid()->setVisible(false); + yAxis2->grid()->setVisible(false); + } +} + +QCPAxisRect::~QCPAxisRect() +{ + delete mInsetLayout; + mInsetLayout = 0; + + QList axesList = axes(); + for (int i=0; i ax(mAxes.value(type)); + if (index >= 0 && index < ax.size()) + { + return ax.at(index); + } else + { + qDebug() << Q_FUNC_INFO << "Axis index out of bounds:" << index; + return 0; + } +} + +/*! + Returns all axes on the axis rect sides specified with \a types. + + \a types may be a single \ref QCPAxis::AxisType or an or-combination, to get the axes of + multiple sides. + + \see axis +*/ +QList QCPAxisRect::axes(QCPAxis::AxisTypes types) const +{ + QList result; + if (types.testFlag(QCPAxis::atLeft)) + result << mAxes.value(QCPAxis::atLeft); + if (types.testFlag(QCPAxis::atRight)) + result << mAxes.value(QCPAxis::atRight); + if (types.testFlag(QCPAxis::atTop)) + result << mAxes.value(QCPAxis::atTop); + if (types.testFlag(QCPAxis::atBottom)) + result << mAxes.value(QCPAxis::atBottom); + return result; +} + +/*! \overload + + Returns all axes of this axis rect. +*/ +QList QCPAxisRect::axes() const +{ + QList result; + QHashIterator > it(mAxes); + while (it.hasNext()) + { + it.next(); + result << it.value(); + } + return result; +} + +/*! + Adds a new axis to the axis rect side specified with \a type, and returns it. If \a axis is 0, a + new QCPAxis instance is created internally. + + You may inject QCPAxis instances (or sublasses of QCPAxis) by setting \a axis to an axis that was + previously created outside QCustomPlot. It is important to note that QCustomPlot takes ownership + of the axis, so you may not delete it afterwards. Further, the \a axis must have been created + with this axis rect as parent and with the same axis type as specified in \a type. If this is not + the case, a debug output is generated, the axis is not added, and the method returns 0. + + This method can not be used to move \a axis between axis rects. The same \a axis instance must + not be added multiple times to the same or different axis rects. + + If an axis rect side already contains one or more axes, the lower and upper endings of the new + axis (\ref QCPAxis::setLowerEnding, \ref QCPAxis::setUpperEnding) are set to \ref + QCPLineEnding::esHalfBar. + + \see addAxes, setupFullAxesBox +*/ +QCPAxis *QCPAxisRect::addAxis(QCPAxis::AxisType type, QCPAxis *axis) +{ + QCPAxis *newAxis = axis; + if (!newAxis) + { + newAxis = new QCPAxis(this, type); + } else // user provided existing axis instance, do some sanity checks + { + if (newAxis->axisType() != type) + { + qDebug() << Q_FUNC_INFO << "passed axis has different axis type than specified in type parameter"; + return 0; + } + if (newAxis->axisRect() != this) + { + qDebug() << Q_FUNC_INFO << "passed axis doesn't have this axis rect as parent axis rect"; + return 0; + } + if (axes().contains(newAxis)) + { + qDebug() << Q_FUNC_INFO << "passed axis is already owned by this axis rect"; + return 0; + } + } + if (mAxes[type].size() > 0) // multiple axes on one side, add half-bar axis ending to additional axes with offset + { + bool invert = (type == QCPAxis::atRight) || (type == QCPAxis::atBottom); + newAxis->setLowerEnding(QCPLineEnding(QCPLineEnding::esHalfBar, 6, 10, !invert)); + newAxis->setUpperEnding(QCPLineEnding(QCPLineEnding::esHalfBar, 6, 10, invert)); + } + mAxes[type].append(newAxis); + return newAxis; +} + +/*! + Adds a new axis with \ref addAxis to each axis rect side specified in \a types. This may be an + or-combination of QCPAxis::AxisType, so axes can be added to multiple sides at once. + + Returns a list of the added axes. + + \see addAxis, setupFullAxesBox +*/ +QList QCPAxisRect::addAxes(QCPAxis::AxisTypes types) +{ + QList result; + if (types.testFlag(QCPAxis::atLeft)) + result << addAxis(QCPAxis::atLeft); + if (types.testFlag(QCPAxis::atRight)) + result << addAxis(QCPAxis::atRight); + if (types.testFlag(QCPAxis::atTop)) + result << addAxis(QCPAxis::atTop); + if (types.testFlag(QCPAxis::atBottom)) + result << addAxis(QCPAxis::atBottom); + return result; +} + +/*! + Removes the specified \a axis from the axis rect and deletes it. + + Returns true on success, i.e. if \a axis was a valid axis in this axis rect. + + \see addAxis +*/ +bool QCPAxisRect::removeAxis(QCPAxis *axis) +{ + // don't access axis->axisType() to provide safety when axis is an invalid pointer, rather go through all axis containers: + QHashIterator > it(mAxes); + while (it.hasNext()) + { + it.next(); + if (it.value().contains(axis)) + { + mAxes[it.key()].removeOne(axis); + if (qobject_cast(parentPlot())) // make sure this isn't called from QObject dtor when QCustomPlot is already destructed (happens when the axis rect is not in any layout and thus QObject-child of QCustomPlot) + parentPlot()->axisRemoved(axis); + delete axis; + return true; + } + } + qDebug() << Q_FUNC_INFO << "Axis isn't in axis rect:" << reinterpret_cast(axis); + return false; +} + +/*! + Convenience function to create an axis on each side that doesn't have any axes yet and set their + visibility to true. Further, the top/right axes are assigned the following properties of the + bottom/left axes: + + \li range (\ref QCPAxis::setRange) + \li range reversed (\ref QCPAxis::setRangeReversed) + \li scale type (\ref QCPAxis::setScaleType) + \li scale log base (\ref QCPAxis::setScaleLogBase) + \li ticks (\ref QCPAxis::setTicks) + \li auto (major) tick count (\ref QCPAxis::setAutoTickCount) + \li sub tick count (\ref QCPAxis::setSubTickCount) + \li auto sub ticks (\ref QCPAxis::setAutoSubTicks) + \li tick step (\ref QCPAxis::setTickStep) + \li auto tick step (\ref QCPAxis::setAutoTickStep) + \li number format (\ref QCPAxis::setNumberFormat) + \li number precision (\ref QCPAxis::setNumberPrecision) + \li tick label type (\ref QCPAxis::setTickLabelType) + \li date time format (\ref QCPAxis::setDateTimeFormat) + \li date time spec (\ref QCPAxis::setDateTimeSpec) + + Tick labels (\ref QCPAxis::setTickLabels) of the right and top axes are set to false. + + If \a connectRanges is true, the \ref QCPAxis::rangeChanged "rangeChanged" signals of the bottom + and left axes are connected to the \ref QCPAxis::setRange slots of the top and right axes. +*/ +void QCPAxisRect::setupFullAxesBox(bool connectRanges) +{ + QCPAxis *xAxis, *yAxis, *xAxis2, *yAxis2; + if (axisCount(QCPAxis::atBottom) == 0) + xAxis = addAxis(QCPAxis::atBottom); + else + xAxis = axis(QCPAxis::atBottom); + + if (axisCount(QCPAxis::atLeft) == 0) + yAxis = addAxis(QCPAxis::atLeft); + else + yAxis = axis(QCPAxis::atLeft); + + if (axisCount(QCPAxis::atTop) == 0) + xAxis2 = addAxis(QCPAxis::atTop); + else + xAxis2 = axis(QCPAxis::atTop); + + if (axisCount(QCPAxis::atRight) == 0) + yAxis2 = addAxis(QCPAxis::atRight); + else + yAxis2 = axis(QCPAxis::atRight); + + xAxis->setVisible(true); + yAxis->setVisible(true); + xAxis2->setVisible(true); + yAxis2->setVisible(true); + xAxis2->setTickLabels(false); + yAxis2->setTickLabels(false); + + xAxis2->setRange(xAxis->range()); + xAxis2->setRangeReversed(xAxis->rangeReversed()); + xAxis2->setScaleType(xAxis->scaleType()); + xAxis2->setScaleLogBase(xAxis->scaleLogBase()); + xAxis2->setTicks(xAxis->ticks()); + xAxis2->setAutoTickCount(xAxis->autoTickCount()); + xAxis2->setSubTickCount(xAxis->subTickCount()); + xAxis2->setAutoSubTicks(xAxis->autoSubTicks()); + xAxis2->setTickStep(xAxis->tickStep()); + xAxis2->setAutoTickStep(xAxis->autoTickStep()); + xAxis2->setNumberFormat(xAxis->numberFormat()); + xAxis2->setNumberPrecision(xAxis->numberPrecision()); + xAxis2->setTickLabelType(xAxis->tickLabelType()); + xAxis2->setDateTimeFormat(xAxis->dateTimeFormat()); + xAxis2->setDateTimeSpec(xAxis->dateTimeSpec()); + + yAxis2->setRange(yAxis->range()); + yAxis2->setRangeReversed(yAxis->rangeReversed()); + yAxis2->setScaleType(yAxis->scaleType()); + yAxis2->setScaleLogBase(yAxis->scaleLogBase()); + yAxis2->setTicks(yAxis->ticks()); + yAxis2->setAutoTickCount(yAxis->autoTickCount()); + yAxis2->setSubTickCount(yAxis->subTickCount()); + yAxis2->setAutoSubTicks(yAxis->autoSubTicks()); + yAxis2->setTickStep(yAxis->tickStep()); + yAxis2->setAutoTickStep(yAxis->autoTickStep()); + yAxis2->setNumberFormat(yAxis->numberFormat()); + yAxis2->setNumberPrecision(yAxis->numberPrecision()); + yAxis2->setTickLabelType(yAxis->tickLabelType()); + yAxis2->setDateTimeFormat(yAxis->dateTimeFormat()); + yAxis2->setDateTimeSpec(yAxis->dateTimeSpec()); + + if (connectRanges) + { + connect(xAxis, SIGNAL(rangeChanged(QCPRange)), xAxis2, SLOT(setRange(QCPRange))); + connect(yAxis, SIGNAL(rangeChanged(QCPRange)), yAxis2, SLOT(setRange(QCPRange))); + } +} + +/*! + Returns a list of all the plottables that are associated with this axis rect. + + A plottable is considered associated with an axis rect if its key or value axis (or both) is in + this axis rect. + + \see graphs, items +*/ +QList QCPAxisRect::plottables() const +{ + // Note: don't append all QCPAxis::plottables() into a list, because we might get duplicate entries + QList result; + for (int i=0; imPlottables.size(); ++i) + { + if (mParentPlot->mPlottables.at(i)->keyAxis()->axisRect() == this ||mParentPlot->mPlottables.at(i)->valueAxis()->axisRect() == this) + result.append(mParentPlot->mPlottables.at(i)); + } + return result; +} + +/*! + Returns a list of all the graphs that are associated with this axis rect. + + A graph is considered associated with an axis rect if its key or value axis (or both) is in + this axis rect. + + \see plottables, items +*/ +QList QCPAxisRect::graphs() const +{ + // Note: don't append all QCPAxis::graphs() into a list, because we might get duplicate entries + QList result; + for (int i=0; imGraphs.size(); ++i) + { + if (mParentPlot->mGraphs.at(i)->keyAxis()->axisRect() == this || mParentPlot->mGraphs.at(i)->valueAxis()->axisRect() == this) + result.append(mParentPlot->mGraphs.at(i)); + } + return result; +} + +/*! + Returns a list of all the items that are associated with this axis rect. + + An item is considered associated with an axis rect if any of its positions has key or value axis + set to an axis that is in this axis rect, or if any of its positions has \ref + QCPItemPosition::setAxisRect set to the axis rect, or if the clip axis rect (\ref + QCPAbstractItem::setClipAxisRect) is set to this axis rect. + + \see plottables, graphs +*/ +QList QCPAxisRect::items() const +{ + // Note: don't just append all QCPAxis::items() into a list, because we might get duplicate entries + // and miss those items that have this axis rect as clipAxisRect. + QList result; + for (int itemId=0; itemIdmItems.size(); ++itemId) + { + if (mParentPlot->mItems.at(itemId)->clipAxisRect() == this) + { + result.append(mParentPlot->mItems.at(itemId)); + continue; + } + QList positions = mParentPlot->mItems.at(itemId)->positions(); + for (int posId=0; posIdaxisRect() == this || + positions.at(posId)->keyAxis()->axisRect() == this || + positions.at(posId)->valueAxis()->axisRect() == this) + { + result.append(mParentPlot->mItems.at(itemId)); + break; + } + } + } + return result; +} + +/*! + This method is called automatically upon replot and doesn't need to be called by users of + QCPAxisRect. + + Calls the base class implementation to update the margins (see \ref QCPLayoutElement::update), + and finally passes the \ref rect to the inset layout (\ref insetLayout) and calls its + QCPInsetLayout::update function. +*/ +void QCPAxisRect::update(UpdatePhase phase) +{ + QCPLayoutElement::update(phase); + + switch (phase) + { + case upPreparation: + { + QList allAxes = axes(); + for (int i=0; isetupTickVectors(); + break; + } + case upLayout: + { + mInsetLayout->setOuterRect(rect()); + break; + } + default: break; + } + + // pass update call on to inset layout (doesn't happen automatically, because QCPAxisRect doesn't derive from QCPLayout): + mInsetLayout->update(phase); +} + +/* inherits documentation from base class */ +QList QCPAxisRect::elements(bool recursive) const +{ + QList result; + if (mInsetLayout) + { + result << mInsetLayout; + if (recursive) + result << mInsetLayout->elements(recursive); + } + return result; +} + +/* inherits documentation from base class */ +void QCPAxisRect::applyDefaultAntialiasingHint(QCPPainter *painter) const +{ + painter->setAntialiasing(false); +} + +/* inherits documentation from base class */ +void QCPAxisRect::draw(QCPPainter *painter) +{ + drawBackground(painter); +} + +/*! + Sets \a pm as the axis background pixmap. The axis background pixmap will be drawn inside the + axis rect. Since axis rects place themselves on the "background" layer by default, the axis rect + backgrounds are usually drawn below everything else. + + For cases where the provided pixmap doesn't have the same size as the axis rect, scaling can be + enabled with \ref setBackgroundScaled and the scaling mode (i.e. whether and how the aspect ratio + is preserved) can be set with \ref setBackgroundScaledMode. To set all these options in one call, + consider using the overloaded version of this function. + + Below the pixmap, the axis rect may be optionally filled with a brush, if specified with \ref + setBackground(const QBrush &brush). + + \see setBackgroundScaled, setBackgroundScaledMode, setBackground(const QBrush &brush) +*/ +void QCPAxisRect::setBackground(const QPixmap &pm) +{ + mBackgroundPixmap = pm; + mScaledBackgroundPixmap = QPixmap(); +} + +/*! \overload + + Sets \a brush as the background brush. The axis rect background will be filled with this brush. + Since axis rects place themselves on the "background" layer by default, the axis rect backgrounds + are usually drawn below everything else. + + The brush will be drawn before (under) any background pixmap, which may be specified with \ref + setBackground(const QPixmap &pm). + + To disable drawing of a background brush, set \a brush to Qt::NoBrush. + + \see setBackground(const QPixmap &pm) +*/ +void QCPAxisRect::setBackground(const QBrush &brush) +{ + mBackgroundBrush = brush; +} + +/*! \overload + + Allows setting the background pixmap of the axis rect, whether it shall be scaled and how it + shall be scaled in one call. + + \see setBackground(const QPixmap &pm), setBackgroundScaled, setBackgroundScaledMode +*/ +void QCPAxisRect::setBackground(const QPixmap &pm, bool scaled, Qt::AspectRatioMode mode) +{ + mBackgroundPixmap = pm; + mScaledBackgroundPixmap = QPixmap(); + mBackgroundScaled = scaled; + mBackgroundScaledMode = mode; +} + +/*! + Sets whether the axis background pixmap shall be scaled to fit the axis rect or not. If \a scaled + is set to true, you may control whether and how the aspect ratio of the original pixmap is + preserved with \ref setBackgroundScaledMode. + + Note that the scaled version of the original pixmap is buffered, so there is no performance + penalty on replots. (Except when the axis rect dimensions are changed continuously.) + + \see setBackground, setBackgroundScaledMode +*/ +void QCPAxisRect::setBackgroundScaled(bool scaled) +{ + mBackgroundScaled = scaled; +} + +/*! + If scaling of the axis background pixmap is enabled (\ref setBackgroundScaled), use this function to + define whether and how the aspect ratio of the original pixmap passed to \ref setBackground is preserved. + \see setBackground, setBackgroundScaled +*/ +void QCPAxisRect::setBackgroundScaledMode(Qt::AspectRatioMode mode) +{ + mBackgroundScaledMode = mode; +} + +/*! + Returns the range drag axis of the \a orientation provided. + + \see setRangeDragAxes +*/ +QCPAxis *QCPAxisRect::rangeDragAxis(Qt::Orientation orientation) +{ + return (orientation == Qt::Horizontal ? mRangeDragHorzAxis.data() : mRangeDragVertAxis.data()); +} + +/*! + Returns the range zoom axis of the \a orientation provided. + + \see setRangeZoomAxes +*/ +QCPAxis *QCPAxisRect::rangeZoomAxis(Qt::Orientation orientation) +{ + return (orientation == Qt::Horizontal ? mRangeZoomHorzAxis.data() : mRangeZoomVertAxis.data()); +} + +/*! + Returns the range zoom factor of the \a orientation provided. + + \see setRangeZoomFactor +*/ +double QCPAxisRect::rangeZoomFactor(Qt::Orientation orientation) +{ + return (orientation == Qt::Horizontal ? mRangeZoomFactorHorz : mRangeZoomFactorVert); +} + +/*! + Sets which axis orientation may be range dragged by the user with mouse interaction. + What orientation corresponds to which specific axis can be set with + \ref setRangeDragAxes(QCPAxis *horizontal, QCPAxis *vertical). By + default, the horizontal axis is the bottom axis (xAxis) and the vertical axis + is the left axis (yAxis). + + To disable range dragging entirely, pass 0 as \a orientations or remove \ref QCP::iRangeDrag from \ref + QCustomPlot::setInteractions. To enable range dragging for both directions, pass Qt::Horizontal | + Qt::Vertical as \a orientations. + + In addition to setting \a orientations to a non-zero value, make sure \ref QCustomPlot::setInteractions + contains \ref QCP::iRangeDrag to enable the range dragging interaction. + + \see setRangeZoom, setRangeDragAxes, QCustomPlot::setNoAntialiasingOnDrag +*/ +void QCPAxisRect::setRangeDrag(Qt::Orientations orientations) +{ + mRangeDrag = orientations; +} + +/*! + Sets which axis orientation may be zoomed by the user with the mouse wheel. What orientation + corresponds to which specific axis can be set with \ref setRangeZoomAxes(QCPAxis *horizontal, + QCPAxis *vertical). By default, the horizontal axis is the bottom axis (xAxis) and the vertical + axis is the left axis (yAxis). + + To disable range zooming entirely, pass 0 as \a orientations or remove \ref QCP::iRangeZoom from \ref + QCustomPlot::setInteractions. To enable range zooming for both directions, pass Qt::Horizontal | + Qt::Vertical as \a orientations. + + In addition to setting \a orientations to a non-zero value, make sure \ref QCustomPlot::setInteractions + contains \ref QCP::iRangeZoom to enable the range zooming interaction. + + \see setRangeZoomFactor, setRangeZoomAxes, setRangeDrag +*/ +void QCPAxisRect::setRangeZoom(Qt::Orientations orientations) +{ + mRangeZoom = orientations; +} + +/*! + Sets the axes whose range will be dragged when \ref setRangeDrag enables mouse range dragging + on the QCustomPlot widget. + + \see setRangeZoomAxes +*/ +void QCPAxisRect::setRangeDragAxes(QCPAxis *horizontal, QCPAxis *vertical) +{ + mRangeDragHorzAxis = horizontal; + mRangeDragVertAxis = vertical; +} + +/*! + Sets the axes whose range will be zoomed when \ref setRangeZoom enables mouse wheel zooming on the + QCustomPlot widget. The two axes can be zoomed with different strengths, when different factors + are passed to \ref setRangeZoomFactor(double horizontalFactor, double verticalFactor). + + \see setRangeDragAxes +*/ +void QCPAxisRect::setRangeZoomAxes(QCPAxis *horizontal, QCPAxis *vertical) +{ + mRangeZoomHorzAxis = horizontal; + mRangeZoomVertAxis = vertical; +} + +/*! + Sets how strong one rotation step of the mouse wheel zooms, when range zoom was activated with + \ref setRangeZoom. The two parameters \a horizontalFactor and \a verticalFactor provide a way to + let the horizontal axis zoom at different rates than the vertical axis. Which axis is horizontal + and which is vertical, can be set with \ref setRangeZoomAxes. + + When the zoom factor is greater than one, scrolling the mouse wheel backwards (towards the user) + will zoom in (make the currently visible range smaller). For zoom factors smaller than one, the + same scrolling direction will zoom out. +*/ +void QCPAxisRect::setRangeZoomFactor(double horizontalFactor, double verticalFactor) +{ + mRangeZoomFactorHorz = horizontalFactor; + mRangeZoomFactorVert = verticalFactor; +} + +/*! \overload + + Sets both the horizontal and vertical zoom \a factor. +*/ +void QCPAxisRect::setRangeZoomFactor(double factor) +{ + mRangeZoomFactorHorz = factor; + mRangeZoomFactorVert = factor; +} + +/*! \internal + + Draws the background of this axis rect. It may consist of a background fill (a QBrush) and a + pixmap. + + If a brush was given via \ref setBackground(const QBrush &brush), this function first draws an + according filling inside the axis rect with the provided \a painter. + + Then, if a pixmap was provided via \ref setBackground, this function buffers the scaled version + depending on \ref setBackgroundScaled and \ref setBackgroundScaledMode and then draws it inside + the axis rect with the provided \a painter. The scaled version is buffered in + mScaledBackgroundPixmap to prevent expensive rescaling at every redraw. It is only updated, when + the axis rect has changed in a way that requires a rescale of the background pixmap (this is + dependant on the \ref setBackgroundScaledMode), or when a differend axis backgroud pixmap was + set. + + \see setBackground, setBackgroundScaled, setBackgroundScaledMode +*/ +void QCPAxisRect::drawBackground(QCPPainter *painter) +{ + // draw background fill: + if (mBackgroundBrush != Qt::NoBrush) + painter->fillRect(mRect, mBackgroundBrush); + + // draw background pixmap (on top of fill, if brush specified): + if (!mBackgroundPixmap.isNull()) + { + if (mBackgroundScaled) + { + // check whether mScaledBackground needs to be updated: + QSize scaledSize(mBackgroundPixmap.size()); + scaledSize.scale(mRect.size(), mBackgroundScaledMode); + if (mScaledBackgroundPixmap.size() != scaledSize) + mScaledBackgroundPixmap = mBackgroundPixmap.scaled(mRect.size(), mBackgroundScaledMode, Qt::SmoothTransformation); + painter->drawPixmap(mRect.topLeft()+QPoint(0, -1), mScaledBackgroundPixmap, QRect(0, 0, mRect.width(), mRect.height()) & mScaledBackgroundPixmap.rect()); + } else + { + painter->drawPixmap(mRect.topLeft()+QPoint(0, -1), mBackgroundPixmap, QRect(0, 0, mRect.width(), mRect.height())); + } + } +} + +/*! \internal + + This function makes sure multiple axes on the side specified with \a type don't collide, but are + distributed according to their respective space requirement (QCPAxis::calculateMargin). + + It does this by setting an appropriate offset (\ref QCPAxis::setOffset) on all axes except the + one with index zero. + + This function is called by \ref calculateAutoMargin. +*/ +void QCPAxisRect::updateAxesOffset(QCPAxis::AxisType type) +{ + const QList axesList = mAxes.value(type); + if (axesList.isEmpty()) + return; + + bool isFirstVisible = !axesList.first()->visible(); // if the first axis is visible, the second axis (which is where the loop starts) isn't the first visible axis, so initialize with false + for (int i=1; ioffset() + axesList.at(i-1)->calculateMargin(); + if (axesList.at(i)->visible()) // only add inner tick length to offset if this axis is visible and it's not the first visible one (might happen if true first axis is invisible) + { + if (!isFirstVisible) + offset += axesList.at(i)->tickLengthIn(); + isFirstVisible = false; + } + axesList.at(i)->setOffset(offset); + } +} + +/* inherits documentation from base class */ +int QCPAxisRect::calculateAutoMargin(QCP::MarginSide side) +{ + if (!mAutoMargins.testFlag(side)) + qDebug() << Q_FUNC_INFO << "Called with side that isn't specified as auto margin"; + + updateAxesOffset(QCPAxis::marginSideToAxisType(side)); + + // note: only need to look at the last (outer most) axis to determine the total margin, due to updateAxisOffset call + const QList axesList = mAxes.value(QCPAxis::marginSideToAxisType(side)); + if (axesList.size() > 0) + return axesList.last()->offset() + axesList.last()->calculateMargin(); + else + return 0; +} + +/*! \internal + + Event handler for when a mouse button is pressed on the axis rect. If the left mouse button is + pressed, the range dragging interaction is initialized (the actual range manipulation happens in + the \ref mouseMoveEvent). + + The mDragging flag is set to true and some anchor points are set that are needed to determine the + distance the mouse was dragged in the mouse move/release events later. + + \see mouseMoveEvent, mouseReleaseEvent +*/ +void QCPAxisRect::mousePressEvent(QMouseEvent *event) +{ + mDragStart = event->pos(); // need this even when not LeftButton is pressed, to determine in releaseEvent whether it was a full click (no position change between press and release) + if (event->buttons() & Qt::LeftButton) + { + mDragging = true; + // initialize antialiasing backup in case we start dragging: + if (mParentPlot->noAntialiasingOnDrag()) + { + mAADragBackup = mParentPlot->antialiasedElements(); + mNotAADragBackup = mParentPlot->notAntialiasedElements(); + } + // Mouse range dragging interaction: + if (mParentPlot->interactions().testFlag(QCP::iRangeDrag)) + { + if (mRangeDragHorzAxis) + mDragStartHorzRange = mRangeDragHorzAxis.data()->range(); + if (mRangeDragVertAxis) + mDragStartVertRange = mRangeDragVertAxis.data()->range(); + } + } +} + +/*! \internal + + Event handler for when the mouse is moved on the axis rect. If range dragging was activated in a + preceding \ref mousePressEvent, the range is moved accordingly. + + \see mousePressEvent, mouseReleaseEvent +*/ +void QCPAxisRect::mouseMoveEvent(QMouseEvent *event) +{ + // Mouse range dragging interaction: + if (mDragging && mParentPlot->interactions().testFlag(QCP::iRangeDrag)) + { + if (mRangeDrag.testFlag(Qt::Horizontal)) + { + if (QCPAxis *rangeDragHorzAxis = mRangeDragHorzAxis.data()) + { + if (rangeDragHorzAxis->mScaleType == QCPAxis::stLinear) + { + double diff = rangeDragHorzAxis->pixelToCoord(mDragStart.x()) - rangeDragHorzAxis->pixelToCoord(event->pos().x()); + rangeDragHorzAxis->setRange(mDragStartHorzRange.lower+diff, mDragStartHorzRange.upper+diff); + } else if (rangeDragHorzAxis->mScaleType == QCPAxis::stLogarithmic) + { + double diff = rangeDragHorzAxis->pixelToCoord(mDragStart.x()) / rangeDragHorzAxis->pixelToCoord(event->pos().x()); + rangeDragHorzAxis->setRange(mDragStartHorzRange.lower*diff, mDragStartHorzRange.upper*diff); + } + } + } + if (mRangeDrag.testFlag(Qt::Vertical)) + { + if (QCPAxis *rangeDragVertAxis = mRangeDragVertAxis.data()) + { + if (rangeDragVertAxis->mScaleType == QCPAxis::stLinear) + { + double diff = rangeDragVertAxis->pixelToCoord(mDragStart.y()) - rangeDragVertAxis->pixelToCoord(event->pos().y()); + rangeDragVertAxis->setRange(mDragStartVertRange.lower+diff, mDragStartVertRange.upper+diff); + } else if (rangeDragVertAxis->mScaleType == QCPAxis::stLogarithmic) + { + double diff = rangeDragVertAxis->pixelToCoord(mDragStart.y()) / rangeDragVertAxis->pixelToCoord(event->pos().y()); + rangeDragVertAxis->setRange(mDragStartVertRange.lower*diff, mDragStartVertRange.upper*diff); + } + } + } + if (mRangeDrag != 0) // if either vertical or horizontal drag was enabled, do a replot + { + if (mParentPlot->noAntialiasingOnDrag()) + mParentPlot->setNotAntialiasedElements(QCP::aeAll); + mParentPlot->replot(); + } + } +} + +/* inherits documentation from base class */ +void QCPAxisRect::mouseReleaseEvent(QMouseEvent *event) +{ + Q_UNUSED(event) + mDragging = false; + if (mParentPlot->noAntialiasingOnDrag()) + { + mParentPlot->setAntialiasedElements(mAADragBackup); + mParentPlot->setNotAntialiasedElements(mNotAADragBackup); + } +} + +/*! \internal + + Event handler for mouse wheel events. If rangeZoom is Qt::Horizontal, Qt::Vertical or both, the + ranges of the axes defined as rangeZoomHorzAxis and rangeZoomVertAxis are scaled. The center of + the scaling operation is the current cursor position inside the axis rect. The scaling factor is + dependant on the mouse wheel delta (which direction the wheel was rotated) to provide a natural + zooming feel. The Strength of the zoom can be controlled via \ref setRangeZoomFactor. + + Note, that event->delta() is usually +/-120 for single rotation steps. However, if the mouse + wheel is turned rapidly, many steps may bunch up to one event, so the event->delta() may then be + multiples of 120. This is taken into account here, by calculating \a wheelSteps and using it as + exponent of the range zoom factor. This takes care of the wheel direction automatically, by + inverting the factor, when the wheel step is negative (f^-1 = 1/f). +*/ +void QCPAxisRect::wheelEvent(QWheelEvent *event) +{ + // Mouse range zooming interaction: + if (mParentPlot->interactions().testFlag(QCP::iRangeZoom)) + { + if (mRangeZoom != 0) + { + double factor; + double wheelSteps = event->delta()/120.0; // a single step delta is +/-120 usually + if (mRangeZoom.testFlag(Qt::Horizontal)) + { + factor = qPow(mRangeZoomFactorHorz, wheelSteps); + if (mRangeZoomHorzAxis.data()) + mRangeZoomHorzAxis.data()->scaleRange(factor, mRangeZoomHorzAxis.data()->pixelToCoord(event->pos().x())); + } + if (mRangeZoom.testFlag(Qt::Vertical)) + { + factor = qPow(mRangeZoomFactorVert, wheelSteps); + if (mRangeZoomVertAxis.data()) + mRangeZoomVertAxis.data()->scaleRange(factor, mRangeZoomVertAxis.data()->pixelToCoord(event->pos().y())); + } + mParentPlot->replot(); + } + } +} + + +//////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////// QCPAbstractLegendItem +//////////////////////////////////////////////////////////////////////////////////////////////////// + +/*! \class QCPAbstractLegendItem + \brief The abstract base class for all entries in a QCPLegend. + + It defines a very basic interface for entries in a QCPLegend. For representing plottables in the + legend, the subclass \ref QCPPlottableLegendItem is more suitable. + + Only derive directly from this class when you need absolute freedom (e.g. a custom legend entry + that's not even associated with a plottable). + + You must implement the following pure virtual functions: + \li \ref draw (from QCPLayerable) + + You inherit the following members you may use: + + + + + + + + +
    QCPLegend *\b mParentLegendA pointer to the parent QCPLegend.
    QFont \b mFontThe generic font of the item. You should use this font for all or at least the most prominent text of the item.
    +*/ + +/* start of documentation of signals */ + +/*! \fn void QCPAbstractLegendItem::selectionChanged(bool selected) + + This signal is emitted when the selection state of this legend item has changed, either by user + interaction or by a direct call to \ref setSelected. +*/ + +/* end of documentation of signals */ + +/*! + Constructs a QCPAbstractLegendItem and associates it with the QCPLegend \a parent. This does not + cause the item to be added to \a parent, so \ref QCPLegend::addItem must be called separately. +*/ +QCPAbstractLegendItem::QCPAbstractLegendItem(QCPLegend *parent) : + QCPLayoutElement(parent->parentPlot()), + mParentLegend(parent), + mFont(parent->font()), + mTextColor(parent->textColor()), + mSelectedFont(parent->selectedFont()), + mSelectedTextColor(parent->selectedTextColor()), + mSelectable(true), + mSelected(false) +{ + setLayer(QLatin1String("legend")); + setMargins(QMargins(8, 2, 8, 2)); +} + +/*! + Sets the default font of this specific legend item to \a font. + + \see setTextColor, QCPLegend::setFont +*/ +void QCPAbstractLegendItem::setFont(const QFont &font) +{ + mFont = font; +} + +/*! + Sets the default text color of this specific legend item to \a color. + + \see setFont, QCPLegend::setTextColor +*/ +void QCPAbstractLegendItem::setTextColor(const QColor &color) +{ + mTextColor = color; +} + +/*! + When this legend item is selected, \a font is used to draw generic text, instead of the normal + font set with \ref setFont. + + \see setFont, QCPLegend::setSelectedFont +*/ +void QCPAbstractLegendItem::setSelectedFont(const QFont &font) +{ + mSelectedFont = font; +} + +/*! + When this legend item is selected, \a color is used to draw generic text, instead of the normal + color set with \ref setTextColor. + + \see setTextColor, QCPLegend::setSelectedTextColor +*/ +void QCPAbstractLegendItem::setSelectedTextColor(const QColor &color) +{ + mSelectedTextColor = color; +} + +/*! + Sets whether this specific legend item is selectable. + + \see setSelectedParts, QCustomPlot::setInteractions +*/ +void QCPAbstractLegendItem::setSelectable(bool selectable) +{ + if (mSelectable != selectable) + { + mSelectable = selectable; + emit selectableChanged(mSelectable); + } +} + +/*! + Sets whether this specific legend item is selected. + + It is possible to set the selection state of this item by calling this function directly, even if + setSelectable is set to false. + + \see setSelectableParts, QCustomPlot::setInteractions +*/ +void QCPAbstractLegendItem::setSelected(bool selected) +{ + if (mSelected != selected) + { + mSelected = selected; + emit selectionChanged(mSelected); + } +} + +/* inherits documentation from base class */ +double QCPAbstractLegendItem::selectTest(const QPointF &pos, bool onlySelectable, QVariant *details) const +{ + Q_UNUSED(details) + if (!mParentPlot) return -1; + if (onlySelectable && (!mSelectable || !mParentLegend->selectableParts().testFlag(QCPLegend::spItems))) + return -1; + + if (mRect.contains(pos.toPoint())) + return mParentPlot->selectionTolerance()*0.99; + else + return -1; +} + +/* inherits documentation from base class */ +void QCPAbstractLegendItem::applyDefaultAntialiasingHint(QCPPainter *painter) const +{ + applyAntialiasingHint(painter, mAntialiased, QCP::aeLegendItems); +} + +/* inherits documentation from base class */ +QRect QCPAbstractLegendItem::clipRect() const +{ + return mOuterRect; +} + +/* inherits documentation from base class */ +void QCPAbstractLegendItem::selectEvent(QMouseEvent *event, bool additive, const QVariant &details, bool *selectionStateChanged) +{ + Q_UNUSED(event) + Q_UNUSED(details) + if (mSelectable && mParentLegend->selectableParts().testFlag(QCPLegend::spItems)) + { + bool selBefore = mSelected; + setSelected(additive ? !mSelected : true); + if (selectionStateChanged) + *selectionStateChanged = mSelected != selBefore; + } +} + +/* inherits documentation from base class */ +void QCPAbstractLegendItem::deselectEvent(bool *selectionStateChanged) +{ + if (mSelectable && mParentLegend->selectableParts().testFlag(QCPLegend::spItems)) + { + bool selBefore = mSelected; + setSelected(false); + if (selectionStateChanged) + *selectionStateChanged = mSelected != selBefore; + } +} + +//////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////// QCPPlottableLegendItem +//////////////////////////////////////////////////////////////////////////////////////////////////// + +/*! \class QCPPlottableLegendItem + \brief A legend item representing a plottable with an icon and the plottable name. + + This is the standard legend item for plottables. It displays an icon of the plottable next to the + plottable name. The icon is drawn by the respective plottable itself (\ref + QCPAbstractPlottable::drawLegendIcon), and tries to give an intuitive symbol for the plottable. + For example, the QCPGraph draws a centered horizontal line and/or a single scatter point in the + middle. + + Legend items of this type are always associated with one plottable (retrievable via the + plottable() function and settable with the constructor). You may change the font of the plottable + name with \ref setFont. Icon padding and border pen is taken from the parent QCPLegend, see \ref + QCPLegend::setIconBorderPen and \ref QCPLegend::setIconTextPadding. + + The function \ref QCPAbstractPlottable::addToLegend/\ref QCPAbstractPlottable::removeFromLegend + creates/removes legend items of this type in the default implementation. However, these functions + may be reimplemented such that a different kind of legend item (e.g a direct subclass of + QCPAbstractLegendItem) is used for that plottable. + + Since QCPLegend is based on QCPLayoutGrid, a legend item itself is just a subclass of + QCPLayoutElement. While it could be added to a legend (or any other layout) via the normal layout + interface, QCPLegend has specialized functions for handling legend items conveniently, see the + documentation of \ref QCPLegend. +*/ + +/*! + Creates a new legend item associated with \a plottable. + + Once it's created, it can be added to the legend via \ref QCPLegend::addItem. + + A more convenient way of adding/removing a plottable to/from the legend is via the functions \ref + QCPAbstractPlottable::addToLegend and \ref QCPAbstractPlottable::removeFromLegend. +*/ +QCPPlottableLegendItem::QCPPlottableLegendItem(QCPLegend *parent, QCPAbstractPlottable *plottable) : + QCPAbstractLegendItem(parent), + mPlottable(plottable) +{ +} + +/*! \internal + + Returns the pen that shall be used to draw the icon border, taking into account the selection + state of this item. +*/ +QPen QCPPlottableLegendItem::getIconBorderPen() const +{ + return mSelected ? mParentLegend->selectedIconBorderPen() : mParentLegend->iconBorderPen(); +} + +/*! \internal + + Returns the text color that shall be used to draw text, taking into account the selection state + of this item. +*/ +QColor QCPPlottableLegendItem::getTextColor() const +{ + return mSelected ? mSelectedTextColor : mTextColor; +} + +/*! \internal + + Returns the font that shall be used to draw text, taking into account the selection state of this + item. +*/ +QFont QCPPlottableLegendItem::getFont() const +{ + return mSelected ? mSelectedFont : mFont; +} + +/*! \internal + + Draws the item with \a painter. The size and position of the drawn legend item is defined by the + parent layout (typically a \ref QCPLegend) and the \ref minimumSizeHint and \ref maximumSizeHint + of this legend item. +*/ +void QCPPlottableLegendItem::draw(QCPPainter *painter) +{ + if (!mPlottable) return; + painter->setFont(getFont()); + painter->setPen(QPen(getTextColor())); + QSizeF iconSize = mParentLegend->iconSize(); + QRectF textRect = painter->fontMetrics().boundingRect(0, 0, 0, iconSize.height(), Qt::TextDontClip, mPlottable->name()); + QRectF iconRect(mRect.topLeft(), iconSize); + int textHeight = qMax(textRect.height(), iconSize.height()); // if text has smaller height than icon, center text vertically in icon height, else align tops + painter->drawText(mRect.x()+iconSize.width()+mParentLegend->iconTextPadding(), mRect.y(), textRect.width(), textHeight, Qt::TextDontClip, mPlottable->name()); + // draw icon: + painter->save(); + painter->setClipRect(iconRect, Qt::IntersectClip); + mPlottable->drawLegendIcon(painter, iconRect); + painter->restore(); + // draw icon border: + if (getIconBorderPen().style() != Qt::NoPen) + { + painter->setPen(getIconBorderPen()); + painter->setBrush(Qt::NoBrush); + painter->drawRect(iconRect); + } +} + +/*! \internal + + Calculates and returns the size of this item. This includes the icon, the text and the padding in + between. +*/ +QSize QCPPlottableLegendItem::minimumSizeHint() const +{ + if (!mPlottable) return QSize(); + QSize result(0, 0); + QRect textRect; + QFontMetrics fontMetrics(getFont()); + QSize iconSize = mParentLegend->iconSize(); + textRect = fontMetrics.boundingRect(0, 0, 0, iconSize.height(), Qt::TextDontClip, mPlottable->name()); + result.setWidth(iconSize.width() + mParentLegend->iconTextPadding() + textRect.width() + mMargins.left() + mMargins.right()); + result.setHeight(qMax(textRect.height(), iconSize.height()) + mMargins.top() + mMargins.bottom()); + return result; +} + + +//////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////// QCPLegend +//////////////////////////////////////////////////////////////////////////////////////////////////// + +/*! \class QCPLegend + \brief Manages a legend inside a QCustomPlot. + + A legend is a small box somewhere in the plot which lists plottables with their name and icon. + + Normally, the legend is populated by calling \ref QCPAbstractPlottable::addToLegend. The + respective legend item can be removed with \ref QCPAbstractPlottable::removeFromLegend. However, + QCPLegend also offers an interface to add and manipulate legend items directly: \ref item, \ref + itemWithPlottable, \ref itemCount, \ref addItem, \ref removeItem, etc. + + The QCPLegend derives from QCPLayoutGrid and as such can be placed in any position a + QCPLayoutElement may be positioned. The legend items are themselves QCPLayoutElements which are + placed in the grid layout of the legend. QCPLegend only adds an interface specialized for + handling child elements of type QCPAbstractLegendItem, as mentioned above. In principle, any + other layout elements may also be added to a legend via the normal \ref QCPLayoutGrid interface. + However, the QCPAbstractLegendItem-Interface will ignore those elements (e.g. \ref itemCount will + only return the number of items with QCPAbstractLegendItems type). + + By default, every QCustomPlot has one legend (QCustomPlot::legend) which is placed in the inset + layout of the main axis rect (\ref QCPAxisRect::insetLayout). To move the legend to another + position inside the axis rect, use the methods of the \ref QCPLayoutInset. To move the legend + outside of the axis rect, place it anywhere else with the QCPLayout/QCPLayoutElement interface. +*/ + +/* start of documentation of signals */ + +/*! \fn void QCPLegend::selectionChanged(QCPLegend::SelectableParts selection); + + This signal is emitted when the selection state of this legend has changed. + + \see setSelectedParts, setSelectableParts +*/ + +/* end of documentation of signals */ + +/*! + Constructs a new QCPLegend instance with \a parentPlot as the containing plot and default values. + + Note that by default, QCustomPlot already contains a legend ready to be used as + QCustomPlot::legend +*/ +QCPLegend::QCPLegend() +{ + setRowSpacing(0); + setColumnSpacing(10); + setMargins(QMargins(2, 3, 2, 2)); + setAntialiased(false); + setIconSize(32, 18); + + setIconTextPadding(7); + + setSelectableParts(spLegendBox | spItems); + setSelectedParts(spNone); + + setBorderPen(QPen(Qt::black)); + setSelectedBorderPen(QPen(Qt::blue, 2)); + setIconBorderPen(Qt::NoPen); + setSelectedIconBorderPen(QPen(Qt::blue, 2)); + setBrush(Qt::white); + setSelectedBrush(Qt::white); + setTextColor(Qt::black); + setSelectedTextColor(Qt::blue); +} + +QCPLegend::~QCPLegend() +{ + clearItems(); + if (qobject_cast(mParentPlot)) // make sure this isn't called from QObject dtor when QCustomPlot is already destructed (happens when the legend is not in any layout and thus QObject-child of QCustomPlot) + mParentPlot->legendRemoved(this); +} + +/* no doc for getter, see setSelectedParts */ +QCPLegend::SelectableParts QCPLegend::selectedParts() const +{ + // check whether any legend elements selected, if yes, add spItems to return value + bool hasSelectedItems = false; + for (int i=0; iselected()) + { + hasSelectedItems = true; + break; + } + } + if (hasSelectedItems) + return mSelectedParts | spItems; + else + return mSelectedParts & ~spItems; +} + +/*! + Sets the pen, the border of the entire legend is drawn with. +*/ +void QCPLegend::setBorderPen(const QPen &pen) +{ + mBorderPen = pen; +} + +/*! + Sets the brush of the legend background. +*/ +void QCPLegend::setBrush(const QBrush &brush) +{ + mBrush = brush; +} + +/*! + Sets the default font of legend text. Legend items that draw text (e.g. the name of a graph) will + use this font by default. However, a different font can be specified on a per-item-basis by + accessing the specific legend item. + + This function will also set \a font on all already existing legend items. + + \see QCPAbstractLegendItem::setFont +*/ +void QCPLegend::setFont(const QFont &font) +{ + mFont = font; + for (int i=0; isetFont(mFont); + } +} + +/*! + Sets the default color of legend text. Legend items that draw text (e.g. the name of a graph) + will use this color by default. However, a different colors can be specified on a per-item-basis + by accessing the specific legend item. + + This function will also set \a color on all already existing legend items. + + \see QCPAbstractLegendItem::setTextColor +*/ +void QCPLegend::setTextColor(const QColor &color) +{ + mTextColor = color; + for (int i=0; isetTextColor(color); + } +} + +/*! + Sets the size of legend icons. Legend items that draw an icon (e.g. a visual + representation of the graph) will use this size by default. +*/ +void QCPLegend::setIconSize(const QSize &size) +{ + mIconSize = size; +} + +/*! \overload +*/ +void QCPLegend::setIconSize(int width, int height) +{ + mIconSize.setWidth(width); + mIconSize.setHeight(height); +} + +/*! + Sets the horizontal space in pixels between the legend icon and the text next to it. + Legend items that draw an icon (e.g. a visual representation of the graph) and text (e.g. the + name of the graph) will use this space by default. +*/ +void QCPLegend::setIconTextPadding(int padding) +{ + mIconTextPadding = padding; +} + +/*! + Sets the pen used to draw a border around each legend icon. Legend items that draw an + icon (e.g. a visual representation of the graph) will use this pen by default. + + If no border is wanted, set this to \a Qt::NoPen. +*/ +void QCPLegend::setIconBorderPen(const QPen &pen) +{ + mIconBorderPen = pen; +} + +/*! + Sets whether the user can (de-)select the parts in \a selectable by clicking on the QCustomPlot surface. + (When \ref QCustomPlot::setInteractions contains \ref QCP::iSelectLegend.) + + However, even when \a selectable is set to a value not allowing the selection of a specific part, + it is still possible to set the selection of this part manually, by calling \ref setSelectedParts + directly. + + \see SelectablePart, setSelectedParts +*/ +void QCPLegend::setSelectableParts(const SelectableParts &selectable) +{ + if (mSelectableParts != selectable) + { + mSelectableParts = selectable; + emit selectableChanged(mSelectableParts); + } +} + +/*! + Sets the selected state of the respective legend parts described by \ref SelectablePart. When a part + is selected, it uses a different pen/font and brush. If some legend items are selected and \a selected + doesn't contain \ref spItems, those items become deselected. + + The entire selection mechanism is handled automatically when \ref QCustomPlot::setInteractions + contains iSelectLegend. You only need to call this function when you wish to change the selection + state manually. + + This function can change the selection state of a part even when \ref setSelectableParts was set to a + value that actually excludes the part. + + emits the \ref selectionChanged signal when \a selected is different from the previous selection state. + + Note that it doesn't make sense to set the selected state \ref spItems here when it wasn't set + before, because there's no way to specify which exact items to newly select. Do this by calling + \ref QCPAbstractLegendItem::setSelected directly on the legend item you wish to select. + + \see SelectablePart, setSelectableParts, selectTest, setSelectedBorderPen, setSelectedIconBorderPen, setSelectedBrush, + setSelectedFont +*/ +void QCPLegend::setSelectedParts(const SelectableParts &selected) +{ + SelectableParts newSelected = selected; + mSelectedParts = this->selectedParts(); // update mSelectedParts in case item selection changed + + if (mSelectedParts != newSelected) + { + if (!mSelectedParts.testFlag(spItems) && newSelected.testFlag(spItems)) // attempt to set spItems flag (can't do that) + { + qDebug() << Q_FUNC_INFO << "spItems flag can not be set, it can only be unset with this function"; + newSelected &= ~spItems; + } + if (mSelectedParts.testFlag(spItems) && !newSelected.testFlag(spItems)) // spItems flag was unset, so clear item selection + { + for (int i=0; isetSelected(false); + } + } + mSelectedParts = newSelected; + emit selectionChanged(mSelectedParts); + } +} + +/*! + When the legend box is selected, this pen is used to draw the border instead of the normal pen + set via \ref setBorderPen. + + \see setSelectedParts, setSelectableParts, setSelectedBrush +*/ +void QCPLegend::setSelectedBorderPen(const QPen &pen) +{ + mSelectedBorderPen = pen; +} + +/*! + Sets the pen legend items will use to draw their icon borders, when they are selected. + + \see setSelectedParts, setSelectableParts, setSelectedFont +*/ +void QCPLegend::setSelectedIconBorderPen(const QPen &pen) +{ + mSelectedIconBorderPen = pen; +} + +/*! + When the legend box is selected, this brush is used to draw the legend background instead of the normal brush + set via \ref setBrush. + + \see setSelectedParts, setSelectableParts, setSelectedBorderPen +*/ +void QCPLegend::setSelectedBrush(const QBrush &brush) +{ + mSelectedBrush = brush; +} + +/*! + Sets the default font that is used by legend items when they are selected. + + This function will also set \a font on all already existing legend items. + + \see setFont, QCPAbstractLegendItem::setSelectedFont +*/ +void QCPLegend::setSelectedFont(const QFont &font) +{ + mSelectedFont = font; + for (int i=0; isetSelectedFont(font); + } +} + +/*! + Sets the default text color that is used by legend items when they are selected. + + This function will also set \a color on all already existing legend items. + + \see setTextColor, QCPAbstractLegendItem::setSelectedTextColor +*/ +void QCPLegend::setSelectedTextColor(const QColor &color) +{ + mSelectedTextColor = color; + for (int i=0; isetSelectedTextColor(color); + } +} + +/*! + Returns the item with index \a i. + + \see itemCount +*/ +QCPAbstractLegendItem *QCPLegend::item(int index) const +{ + return qobject_cast(elementAt(index)); +} + +/*! + Returns the QCPPlottableLegendItem which is associated with \a plottable (e.g. a \ref QCPGraph*). + If such an item isn't in the legend, returns 0. + + \see hasItemWithPlottable +*/ +QCPPlottableLegendItem *QCPLegend::itemWithPlottable(const QCPAbstractPlottable *plottable) const +{ + for (int i=0; i(item(i))) + { + if (pli->plottable() == plottable) + return pli; + } + } + return 0; +} + +/*! + Returns the number of items currently in the legend. + \see item +*/ +int QCPLegend::itemCount() const +{ + return elementCount(); +} + +/*! + Returns whether the legend contains \a itm. +*/ +bool QCPLegend::hasItem(QCPAbstractLegendItem *item) const +{ + for (int i=0; iitem(i)) + return true; + } + return false; +} + +/*! + Returns whether the legend contains a QCPPlottableLegendItem which is associated with \a plottable (e.g. a \ref QCPGraph*). + If such an item isn't in the legend, returns false. + + \see itemWithPlottable +*/ +bool QCPLegend::hasItemWithPlottable(const QCPAbstractPlottable *plottable) const +{ + return itemWithPlottable(plottable); +} + +/*! + Adds \a item to the legend, if it's not present already. + + Returns true on sucess, i.e. if the item wasn't in the list already and has been successfuly added. + + The legend takes ownership of the item. +*/ +bool QCPLegend::addItem(QCPAbstractLegendItem *item) +{ + if (!hasItem(item)) + { + return addElement(rowCount(), 0, item); + } else + return false; +} + +/*! + Removes the item with index \a index from the legend. + + Returns true, if successful. + + \see itemCount, clearItems +*/ +bool QCPLegend::removeItem(int index) +{ + if (QCPAbstractLegendItem *ali = item(index)) + { + bool success = remove(ali); + simplify(); + return success; + } else + return false; +} + +/*! \overload + + Removes \a item from the legend. + + Returns true, if successful. + + \see clearItems +*/ +bool QCPLegend::removeItem(QCPAbstractLegendItem *item) +{ + bool success = remove(item); + simplify(); + return success; +} + +/*! + Removes all items from the legend. +*/ +void QCPLegend::clearItems() +{ + for (int i=itemCount()-1; i>=0; --i) + removeItem(i); +} + +/*! + Returns the legend items that are currently selected. If no items are selected, + the list is empty. + + \see QCPAbstractLegendItem::setSelected, setSelectable +*/ +QList QCPLegend::selectedItems() const +{ + QList result; + for (int i=0; iselected()) + result.append(ali); + } + } + return result; +} + +/*! \internal + + A convenience function to easily set the QPainter::Antialiased hint on the provided \a painter + before drawing main legend elements. + + This is the antialiasing state the painter passed to the \ref draw method is in by default. + + This function takes into account the local setting of the antialiasing flag as well as the + overrides set with \ref QCustomPlot::setAntialiasedElements and \ref + QCustomPlot::setNotAntialiasedElements. + + \see setAntialiased +*/ +void QCPLegend::applyDefaultAntialiasingHint(QCPPainter *painter) const +{ + applyAntialiasingHint(painter, mAntialiased, QCP::aeLegend); +} + +/*! \internal + + Returns the pen used to paint the border of the legend, taking into account the selection state + of the legend box. +*/ +QPen QCPLegend::getBorderPen() const +{ + return mSelectedParts.testFlag(spLegendBox) ? mSelectedBorderPen : mBorderPen; +} + +/*! \internal + + Returns the brush used to paint the background of the legend, taking into account the selection + state of the legend box. +*/ +QBrush QCPLegend::getBrush() const +{ + return mSelectedParts.testFlag(spLegendBox) ? mSelectedBrush : mBrush; +} + +/*! \internal + + Draws the legend box with the provided \a painter. The individual legend items are layerables + themselves, thus are drawn independently. +*/ +void QCPLegend::draw(QCPPainter *painter) +{ + // draw background rect: + painter->setBrush(getBrush()); + painter->setPen(getBorderPen()); + painter->drawRect(mOuterRect); +} + +/* inherits documentation from base class */ +double QCPLegend::selectTest(const QPointF &pos, bool onlySelectable, QVariant *details) const +{ + if (!mParentPlot) return -1; + if (onlySelectable && !mSelectableParts.testFlag(spLegendBox)) + return -1; + + if (mOuterRect.contains(pos.toPoint())) + { + if (details) details->setValue(spLegendBox); + return mParentPlot->selectionTolerance()*0.99; + } + return -1; +} + +/* inherits documentation from base class */ +void QCPLegend::selectEvent(QMouseEvent *event, bool additive, const QVariant &details, bool *selectionStateChanged) +{ + Q_UNUSED(event) + mSelectedParts = selectedParts(); // in case item selection has changed + if (details.value() == spLegendBox && mSelectableParts.testFlag(spLegendBox)) + { + SelectableParts selBefore = mSelectedParts; + setSelectedParts(additive ? mSelectedParts^spLegendBox : mSelectedParts|spLegendBox); // no need to unset spItems in !additive case, because they will be deselected by QCustomPlot (they're normal QCPLayerables with own deselectEvent) + if (selectionStateChanged) + *selectionStateChanged = mSelectedParts != selBefore; + } +} + +/* inherits documentation from base class */ +void QCPLegend::deselectEvent(bool *selectionStateChanged) +{ + mSelectedParts = selectedParts(); // in case item selection has changed + if (mSelectableParts.testFlag(spLegendBox)) + { + SelectableParts selBefore = mSelectedParts; + setSelectedParts(selectedParts() & ~spLegendBox); + if (selectionStateChanged) + *selectionStateChanged = mSelectedParts != selBefore; + } +} + +/* inherits documentation from base class */ +QCP::Interaction QCPLegend::selectionCategory() const +{ + return QCP::iSelectLegend; +} + +/* inherits documentation from base class */ +QCP::Interaction QCPAbstractLegendItem::selectionCategory() const +{ + return QCP::iSelectLegend; +} + +/* inherits documentation from base class */ +void QCPLegend::parentPlotInitialized(QCustomPlot *parentPlot) +{ + Q_UNUSED(parentPlot) +} + + +//////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////// QCPPlotTitle +//////////////////////////////////////////////////////////////////////////////////////////////////// + +/*! \class QCPPlotTitle + \brief A layout element displaying a plot title text + + The text may be specified with \ref setText, theformatting can be controlled with \ref setFont + and \ref setTextColor. + + A plot title can be added as follows: + \snippet documentation/doc-code-snippets/mainwindow.cpp qcpplottitle-creation + + Since a plot title is a common requirement, QCustomPlot offers specialized selection signals for + easy interaction with QCPPlotTitle. If a layout element of type QCPPlotTitle is clicked, the + signal \ref QCustomPlot::titleClick is emitted. A double click emits the \ref + QCustomPlot::titleDoubleClick signal. +*/ + +/* start documentation of signals */ + +/*! \fn void QCPPlotTitle::selectionChanged(bool selected) + + This signal is emitted when the selection state has changed to \a selected, either by user + interaction or by a direct call to \ref setSelected. + + \see setSelected, setSelectable +*/ + +/* end documentation of signals */ + +/*! + Creates a new QCPPlotTitle instance and sets default values. The initial text is empty (\ref setText). + + To set the title text in the constructor, rather use \ref QCPPlotTitle(QCustomPlot *parentPlot, const QString &text). +*/ +QCPPlotTitle::QCPPlotTitle(QCustomPlot *parentPlot) : + QCPLayoutElement(parentPlot), + mFont(QFont(QLatin1String("sans serif"), 13*1.5, QFont::Bold)), + mTextColor(Qt::black), + mSelectedFont(QFont(QLatin1String("sans serif"), 13*1.6, QFont::Bold)), + mSelectedTextColor(Qt::blue), + mSelectable(false), + mSelected(false) +{ + if (parentPlot) + { + setLayer(parentPlot->currentLayer()); + mFont = QFont(parentPlot->font().family(), parentPlot->font().pointSize()*1.5, QFont::Bold); + mSelectedFont = QFont(parentPlot->font().family(), parentPlot->font().pointSize()*1.6, QFont::Bold); + } + setMargins(QMargins(5, 5, 5, 0)); +} + +/*! \overload + + Creates a new QCPPlotTitle instance and sets default values. The initial text is set to \a text. +*/ +QCPPlotTitle::QCPPlotTitle(QCustomPlot *parentPlot, const QString &text) : + QCPLayoutElement(parentPlot), + mText(text), + mFont(QFont(parentPlot->font().family(), parentPlot->font().pointSize()*1.5, QFont::Bold)), + mTextColor(Qt::black), + mSelectedFont(QFont(parentPlot->font().family(), parentPlot->font().pointSize()*1.6, QFont::Bold)), + mSelectedTextColor(Qt::blue), + mSelectable(false), + mSelected(false) +{ + setLayer(QLatin1String("axes")); + setMargins(QMargins(5, 5, 5, 0)); +} + +/*! + Sets the text that will be displayed to \a text. Multiple lines can be created by insertion of "\n". + + \see setFont, setTextColor +*/ +void QCPPlotTitle::setText(const QString &text) +{ + mText = text; +} + +/*! + Sets the \a font of the title text. + + \see setTextColor, setSelectedFont +*/ +void QCPPlotTitle::setFont(const QFont &font) +{ + mFont = font; +} + +/*! + Sets the \a color of the title text. + + \see setFont, setSelectedTextColor +*/ +void QCPPlotTitle::setTextColor(const QColor &color) +{ + mTextColor = color; +} + +/*! + Sets the \a font of the title text that will be used if the plot title is selected (\ref setSelected). + + \see setFont +*/ +void QCPPlotTitle::setSelectedFont(const QFont &font) +{ + mSelectedFont = font; +} + +/*! + Sets the \a color of the title text that will be used if the plot title is selected (\ref setSelected). + + \see setTextColor +*/ +void QCPPlotTitle::setSelectedTextColor(const QColor &color) +{ + mSelectedTextColor = color; +} + +/*! + Sets whether the user may select this plot title to \a selectable. + + Note that even when \a selectable is set to false, the selection state may be changed + programmatically via \ref setSelected. +*/ +void QCPPlotTitle::setSelectable(bool selectable) +{ + if (mSelectable != selectable) + { + mSelectable = selectable; + emit selectableChanged(mSelectable); + } +} + +/*! + Sets the selection state of this plot title to \a selected. If the selection has changed, \ref + selectionChanged is emitted. + + Note that this function can change the selection state independently of the current \ref + setSelectable state. +*/ +void QCPPlotTitle::setSelected(bool selected) +{ + if (mSelected != selected) + { + mSelected = selected; + emit selectionChanged(mSelected); + } +} + +/* inherits documentation from base class */ +void QCPPlotTitle::applyDefaultAntialiasingHint(QCPPainter *painter) const +{ + applyAntialiasingHint(painter, mAntialiased, QCP::aeNone); +} + +/* inherits documentation from base class */ +void QCPPlotTitle::draw(QCPPainter *painter) +{ + painter->setFont(mainFont()); + painter->setPen(QPen(mainTextColor())); + painter->drawText(mRect, Qt::AlignCenter, mText, &mTextBoundingRect); +} + +/* inherits documentation from base class */ +QSize QCPPlotTitle::minimumSizeHint() const +{ + QFontMetrics metrics(mFont); + QSize result = metrics.boundingRect(0, 0, 0, 0, Qt::AlignCenter, mText).size(); + result.rwidth() += mMargins.left() + mMargins.right(); + result.rheight() += mMargins.top() + mMargins.bottom(); + return result; +} + +/* inherits documentation from base class */ +QSize QCPPlotTitle::maximumSizeHint() const +{ + QFontMetrics metrics(mFont); + QSize result = metrics.boundingRect(0, 0, 0, 0, Qt::AlignCenter, mText).size(); + result.rheight() += mMargins.top() + mMargins.bottom(); + result.setWidth(QWIDGETSIZE_MAX); + return result; +} + +/* inherits documentation from base class */ +void QCPPlotTitle::selectEvent(QMouseEvent *event, bool additive, const QVariant &details, bool *selectionStateChanged) +{ + Q_UNUSED(event) + Q_UNUSED(details) + if (mSelectable) + { + bool selBefore = mSelected; + setSelected(additive ? !mSelected : true); + if (selectionStateChanged) + *selectionStateChanged = mSelected != selBefore; + } +} + +/* inherits documentation from base class */ +void QCPPlotTitle::deselectEvent(bool *selectionStateChanged) +{ + if (mSelectable) + { + bool selBefore = mSelected; + setSelected(false); + if (selectionStateChanged) + *selectionStateChanged = mSelected != selBefore; + } +} + +/* inherits documentation from base class */ +double QCPPlotTitle::selectTest(const QPointF &pos, bool onlySelectable, QVariant *details) const +{ + Q_UNUSED(details) + if (onlySelectable && !mSelectable) + return -1; + + if (mTextBoundingRect.contains(pos.toPoint())) + return mParentPlot->selectionTolerance()*0.99; + else + return -1; +} + +/*! \internal + + Returns the main font to be used. This is mSelectedFont if \ref setSelected is set to + true, else mFont is returned. +*/ +QFont QCPPlotTitle::mainFont() const +{ + return mSelected ? mSelectedFont : mFont; +} + +/*! \internal + + Returns the main color to be used. This is mSelectedTextColor if \ref setSelected is set to + true, else mTextColor is returned. +*/ +QColor QCPPlotTitle::mainTextColor() const +{ + return mSelected ? mSelectedTextColor : mTextColor; +} + + +//////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////// QCPColorScale +//////////////////////////////////////////////////////////////////////////////////////////////////// + +/*! \class QCPColorScale + \brief A color scale for use with color coding data such as QCPColorMap + + This layout element can be placed on the plot to correlate a color gradient with data values. It + is usually used in combination with one or multiple \ref QCPColorMap "QCPColorMaps". + + \image html QCPColorScale.png + + The color scale can be either horizontal or vertical, as shown in the image above. The + orientation and the side where the numbers appear is controlled with \ref setType. + + Use \ref QCPColorMap::setColorScale to connect a color map with a color scale. Once they are + connected, they share their gradient, data range and data scale type (\ref setGradient, \ref + setDataRange, \ref setDataScaleType). Multiple color maps may be associated with a single color + scale, to make them all synchronize these properties. + + To have finer control over the number display and axis behaviour, you can directly access the + \ref axis. See the documentation of QCPAxis for details about configuring axes. For example, if + you want to change the number of automatically generated ticks, call + \snippet documentation/doc-code-snippets/mainwindow.cpp qcpcolorscale-autotickcount + + Placing a color scale next to the main axis rect works like with any other layout element: + \snippet documentation/doc-code-snippets/mainwindow.cpp qcpcolorscale-creation + In this case we have placed it to the right of the default axis rect, so it wasn't necessary to + call \ref setType, since \ref QCPAxis::atRight is already the default. The text next to the color + scale can be set with \ref setLabel. + + For optimum appearance (like in the image above), it may be desirable to line up the axis rect and + the borders of the color scale. Use a \ref QCPMarginGroup to achieve this: + \snippet documentation/doc-code-snippets/mainwindow.cpp qcpcolorscale-margingroup + + Color scales are initialized with a non-zero minimum top and bottom margin (\ref + setMinimumMargins), because vertical color scales are most common and the minimum top/bottom + margin makes sure it keeps some distance to the top/bottom widget border. So if you change to a + horizontal color scale by setting \ref setType to \ref QCPAxis::atBottom or \ref QCPAxis::atTop, you + might want to also change the minimum margins accordingly, e.g. setMinimumMargins(QMargins(6, 0, 6, 0)). +*/ + +/* start documentation of inline functions */ + +/*! \fn QCPAxis *QCPColorScale::axis() const + + Returns the internal \ref QCPAxis instance of this color scale. You can access it to alter the + appearance and behaviour of the axis. \ref QCPColorScale duplicates some properties in its + interface for convenience. Those are \ref setDataRange (\ref QCPAxis::setRange), \ref + setDataScaleType (\ref QCPAxis::setScaleType), and the method \ref setLabel (\ref + QCPAxis::setLabel). As they each are connected, it does not matter whether you use the method on + the QCPColorScale or on its QCPAxis. + + If the type of the color scale is changed with \ref setType, the axis returned by this method + will change, too, to either the left, right, bottom or top axis, depending on which type was set. +*/ + +/* end documentation of signals */ +/* start documentation of signals */ + +/*! \fn void QCPColorScale::dataRangeChanged(QCPRange newRange); + + This signal is emitted when the data range changes. + + \see setDataRange +*/ + +/*! \fn void QCPColorScale::dataScaleTypeChanged(QCPAxis::ScaleType scaleType); + + This signal is emitted when the data scale type changes. + + \see setDataScaleType +*/ + +/*! \fn void QCPColorScale::gradientChanged(QCPColorGradient newGradient); + + This signal is emitted when the gradient changes. + + \see setGradient +*/ + +/* end documentation of signals */ + +/*! + Constructs a new QCPColorScale. +*/ +QCPColorScale::QCPColorScale(QCustomPlot *parentPlot) : + QCPLayoutElement(parentPlot), + mType(QCPAxis::atTop), // set to atTop such that setType(QCPAxis::atRight) below doesn't skip work because it thinks it's already atRight + mDataScaleType(QCPAxis::stLinear), + mBarWidth(20), + mAxisRect(new QCPColorScaleAxisRectPrivate(this)) +{ + setMinimumMargins(QMargins(0, 6, 0, 6)); // for default right color scale types, keep some room at bottom and top (important if no margin group is used) + setType(QCPAxis::atRight); + setDataRange(QCPRange(0, 6)); +} + +QCPColorScale::~QCPColorScale() +{ + delete mAxisRect; +} + +/* undocumented getter */ +QString QCPColorScale::label() const +{ + if (!mColorAxis) + { + qDebug() << Q_FUNC_INFO << "internal color axis undefined"; + return QString(); + } + + return mColorAxis.data()->label(); +} + +/* undocumented getter */ +bool QCPColorScale::rangeDrag() const +{ + if (!mAxisRect) + { + qDebug() << Q_FUNC_INFO << "internal axis rect was deleted"; + return false; + } + + return mAxisRect.data()->rangeDrag().testFlag(QCPAxis::orientation(mType)) && + mAxisRect.data()->rangeDragAxis(QCPAxis::orientation(mType)) && + mAxisRect.data()->rangeDragAxis(QCPAxis::orientation(mType))->orientation() == QCPAxis::orientation(mType); +} + +/* undocumented getter */ +bool QCPColorScale::rangeZoom() const +{ + if (!mAxisRect) + { + qDebug() << Q_FUNC_INFO << "internal axis rect was deleted"; + return false; + } + + return mAxisRect.data()->rangeZoom().testFlag(QCPAxis::orientation(mType)) && + mAxisRect.data()->rangeZoomAxis(QCPAxis::orientation(mType)) && + mAxisRect.data()->rangeZoomAxis(QCPAxis::orientation(mType))->orientation() == QCPAxis::orientation(mType); +} + +/*! + Sets at which side of the color scale the axis is placed, and thus also its orientation. + + Note that after setting \a type to a different value, the axis returned by \ref axis() will + be a different one. The new axis will adopt the following properties from the previous axis: The + range, scale type, log base and label. +*/ +void QCPColorScale::setType(QCPAxis::AxisType type) +{ + if (!mAxisRect) + { + qDebug() << Q_FUNC_INFO << "internal axis rect was deleted"; + return; + } + if (mType != type) + { + mType = type; + QCPRange rangeTransfer(0, 6); + double logBaseTransfer = 10; + QString labelTransfer; + // revert some settings on old axis: + if (mColorAxis) + { + rangeTransfer = mColorAxis.data()->range(); + labelTransfer = mColorAxis.data()->label(); + logBaseTransfer = mColorAxis.data()->scaleLogBase(); + mColorAxis.data()->setLabel(QString()); + disconnect(mColorAxis.data(), SIGNAL(rangeChanged(QCPRange)), this, SLOT(setDataRange(QCPRange))); + disconnect(mColorAxis.data(), SIGNAL(scaleTypeChanged(QCPAxis::ScaleType)), this, SLOT(setDataScaleType(QCPAxis::ScaleType))); + } + QList allAxisTypes = QList() << QCPAxis::atLeft << QCPAxis::atRight << QCPAxis::atBottom << QCPAxis::atTop; + foreach (QCPAxis::AxisType atype, allAxisTypes) + { + mAxisRect.data()->axis(atype)->setTicks(atype == mType); + mAxisRect.data()->axis(atype)->setTickLabels(atype== mType); + } + // set new mColorAxis pointer: + mColorAxis = mAxisRect.data()->axis(mType); + // transfer settings to new axis: + mColorAxis.data()->setRange(rangeTransfer); // transfer range of old axis to new one (necessary if axis changes from vertical to horizontal or vice versa) + mColorAxis.data()->setLabel(labelTransfer); + mColorAxis.data()->setScaleLogBase(logBaseTransfer); // scaleType is synchronized among axes in realtime via signals (connected in QCPColorScale ctor), so we only need to take care of log base here + connect(mColorAxis.data(), SIGNAL(rangeChanged(QCPRange)), this, SLOT(setDataRange(QCPRange))); + connect(mColorAxis.data(), SIGNAL(scaleTypeChanged(QCPAxis::ScaleType)), this, SLOT(setDataScaleType(QCPAxis::ScaleType))); + mAxisRect.data()->setRangeDragAxes(QCPAxis::orientation(mType) == Qt::Horizontal ? mColorAxis.data() : 0, + QCPAxis::orientation(mType) == Qt::Vertical ? mColorAxis.data() : 0); + } +} + +/*! + Sets the range spanned by the color gradient and that is shown by the axis in the color scale. + + It is equivalent to calling QCPColorMap::setDataRange on any of the connected color maps. It is + also equivalent to directly accessing the \ref axis and setting its range with \ref + QCPAxis::setRange. + + \see setDataScaleType, setGradient, rescaleDataRange +*/ +void QCPColorScale::setDataRange(const QCPRange &dataRange) +{ + if (mDataRange.lower != dataRange.lower || mDataRange.upper != dataRange.upper) + { + mDataRange = dataRange; + if (mColorAxis) + mColorAxis.data()->setRange(mDataRange); + emit dataRangeChanged(mDataRange); + } +} + +/*! + Sets the scale type of the color scale, i.e. whether values are linearly associated with colors + or logarithmically. + + It is equivalent to calling QCPColorMap::setDataScaleType on any of the connected color maps. It is + also equivalent to directly accessing the \ref axis and setting its scale type with \ref + QCPAxis::setScaleType. + + \see setDataRange, setGradient +*/ +void QCPColorScale::setDataScaleType(QCPAxis::ScaleType scaleType) +{ + if (mDataScaleType != scaleType) + { + mDataScaleType = scaleType; + if (mColorAxis) + mColorAxis.data()->setScaleType(mDataScaleType); + if (mDataScaleType == QCPAxis::stLogarithmic) + setDataRange(mDataRange.sanitizedForLogScale()); + emit dataScaleTypeChanged(mDataScaleType); + } +} + +/*! + Sets the color gradient that will be used to represent data values. + + It is equivalent to calling QCPColorMap::setGradient on any of the connected color maps. + + \see setDataRange, setDataScaleType +*/ +void QCPColorScale::setGradient(const QCPColorGradient &gradient) +{ + if (mGradient != gradient) + { + mGradient = gradient; + if (mAxisRect) + mAxisRect.data()->mGradientImageInvalidated = true; + emit gradientChanged(mGradient); + } +} + +/*! + Sets the axis label of the color scale. This is equivalent to calling \ref QCPAxis::setLabel on + the internal \ref axis. +*/ +void QCPColorScale::setLabel(const QString &str) +{ + if (!mColorAxis) + { + qDebug() << Q_FUNC_INFO << "internal color axis undefined"; + return; + } + + mColorAxis.data()->setLabel(str); +} + +/*! + Sets the width (or height, for horizontal color scales) the bar where the gradient is displayed + will have. +*/ +void QCPColorScale::setBarWidth(int width) +{ + mBarWidth = width; +} + +/*! + Sets whether the user can drag the data range (\ref setDataRange). + + Note that \ref QCP::iRangeDrag must be in the QCustomPlot's interactions (\ref + QCustomPlot::setInteractions) to allow range dragging. +*/ +void QCPColorScale::setRangeDrag(bool enabled) +{ + if (!mAxisRect) + { + qDebug() << Q_FUNC_INFO << "internal axis rect was deleted"; + return; + } + + if (enabled) + mAxisRect.data()->setRangeDrag(QCPAxis::orientation(mType)); + else + mAxisRect.data()->setRangeDrag(0); +} + +/*! + Sets whether the user can zoom the data range (\ref setDataRange) by scrolling the mouse wheel. + + Note that \ref QCP::iRangeZoom must be in the QCustomPlot's interactions (\ref + QCustomPlot::setInteractions) to allow range dragging. +*/ +void QCPColorScale::setRangeZoom(bool enabled) +{ + if (!mAxisRect) + { + qDebug() << Q_FUNC_INFO << "internal axis rect was deleted"; + return; + } + + if (enabled) + mAxisRect.data()->setRangeZoom(QCPAxis::orientation(mType)); + else + mAxisRect.data()->setRangeZoom(0); +} + +/*! + Returns a list of all the color maps associated with this color scale. +*/ +QList QCPColorScale::colorMaps() const +{ + QList result; + for (int i=0; iplottableCount(); ++i) + { + if (QCPColorMap *cm = qobject_cast(mParentPlot->plottable(i))) + if (cm->colorScale() == this) + result.append(cm); + } + return result; +} + +/*! + Changes the data range such that all color maps associated with this color scale are fully mapped + to the gradient in the data dimension. + + \see setDataRange +*/ +void QCPColorScale::rescaleDataRange(bool onlyVisibleMaps) +{ + QList maps = colorMaps(); + QCPRange newRange; + bool haveRange = false; + int sign = 0; // TODO: should change this to QCPAbstractPlottable::SignDomain later (currently is protected, maybe move to QCP namespace) + if (mDataScaleType == QCPAxis::stLogarithmic) + sign = (mDataRange.upper < 0 ? -1 : 1); + for (int i=0; irealVisibility() && onlyVisibleMaps) + continue; + QCPRange mapRange; + if (maps.at(i)->colorScale() == this) + { + bool currentFoundRange = true; + mapRange = maps.at(i)->data()->dataBounds(); + if (sign == 1) + { + if (mapRange.lower <= 0 && mapRange.upper > 0) + mapRange.lower = mapRange.upper*1e-3; + else if (mapRange.lower <= 0 && mapRange.upper <= 0) + currentFoundRange = false; + } else if (sign == -1) + { + if (mapRange.upper >= 0 && mapRange.lower < 0) + mapRange.upper = mapRange.lower*1e-3; + else if (mapRange.upper >= 0 && mapRange.lower >= 0) + currentFoundRange = false; + } + if (currentFoundRange) + { + if (!haveRange) + newRange = mapRange; + else + newRange.expand(mapRange); + haveRange = true; + } + } + } + if (haveRange) + { + if (!QCPRange::validRange(newRange)) // likely due to range being zero (plottable has only constant data in this dimension), shift current range to at least center the data + { + double center = (newRange.lower+newRange.upper)*0.5; // upper and lower should be equal anyway, but just to make sure, incase validRange returned false for other reason + if (mDataScaleType == QCPAxis::stLinear) + { + newRange.lower = center-mDataRange.size()/2.0; + newRange.upper = center+mDataRange.size()/2.0; + } else // mScaleType == stLogarithmic + { + newRange.lower = center/qSqrt(mDataRange.upper/mDataRange.lower); + newRange.upper = center*qSqrt(mDataRange.upper/mDataRange.lower); + } + } + setDataRange(newRange); + } +} + +/* inherits documentation from base class */ +void QCPColorScale::update(UpdatePhase phase) +{ + QCPLayoutElement::update(phase); + if (!mAxisRect) + { + qDebug() << Q_FUNC_INFO << "internal axis rect was deleted"; + return; + } + + mAxisRect.data()->update(phase); + + switch (phase) + { + case upMargins: + { + if (mType == QCPAxis::atBottom || mType == QCPAxis::atTop) + { + setMaximumSize(QWIDGETSIZE_MAX, mBarWidth+mAxisRect.data()->margins().top()+mAxisRect.data()->margins().bottom()+margins().top()+margins().bottom()); + setMinimumSize(0, mBarWidth+mAxisRect.data()->margins().top()+mAxisRect.data()->margins().bottom()+margins().top()+margins().bottom()); + } else + { + setMaximumSize(mBarWidth+mAxisRect.data()->margins().left()+mAxisRect.data()->margins().right()+margins().left()+margins().right(), QWIDGETSIZE_MAX); + setMinimumSize(mBarWidth+mAxisRect.data()->margins().left()+mAxisRect.data()->margins().right()+margins().left()+margins().right(), 0); + } + break; + } + case upLayout: + { + mAxisRect.data()->setOuterRect(rect()); + break; + } + default: break; + } +} + +/* inherits documentation from base class */ +void QCPColorScale::applyDefaultAntialiasingHint(QCPPainter *painter) const +{ + painter->setAntialiasing(false); +} + +/* inherits documentation from base class */ +void QCPColorScale::mousePressEvent(QMouseEvent *event) +{ + if (!mAxisRect) + { + qDebug() << Q_FUNC_INFO << "internal axis rect was deleted"; + return; + } + mAxisRect.data()->mousePressEvent(event); +} + +/* inherits documentation from base class */ +void QCPColorScale::mouseMoveEvent(QMouseEvent *event) +{ + if (!mAxisRect) + { + qDebug() << Q_FUNC_INFO << "internal axis rect was deleted"; + return; + } + mAxisRect.data()->mouseMoveEvent(event); +} + +/* inherits documentation from base class */ +void QCPColorScale::mouseReleaseEvent(QMouseEvent *event) +{ + if (!mAxisRect) + { + qDebug() << Q_FUNC_INFO << "internal axis rect was deleted"; + return; + } + mAxisRect.data()->mouseReleaseEvent(event); +} + +/* inherits documentation from base class */ +void QCPColorScale::wheelEvent(QWheelEvent *event) +{ + if (!mAxisRect) + { + qDebug() << Q_FUNC_INFO << "internal axis rect was deleted"; + return; + } + mAxisRect.data()->wheelEvent(event); +} + +//////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////// QCPColorScaleAxisRectPrivate +//////////////////////////////////////////////////////////////////////////////////////////////////// + +/*! \class QCPColorScaleAxisRectPrivate + + \internal + \brief An axis rect subclass for use in a QCPColorScale + + This is a private class and not part of the public QCustomPlot interface. + + It provides the axis rect functionality for the QCPColorScale class. +*/ + + +/*! + Creates a new instance, as a child of \a parentColorScale. +*/ +QCPColorScaleAxisRectPrivate::QCPColorScaleAxisRectPrivate(QCPColorScale *parentColorScale) : + QCPAxisRect(parentColorScale->parentPlot(), true), + mParentColorScale(parentColorScale), + mGradientImageInvalidated(true) +{ + setParentLayerable(parentColorScale); + setMinimumMargins(QMargins(0, 0, 0, 0)); + QList allAxisTypes = QList() << QCPAxis::atBottom << QCPAxis::atTop << QCPAxis::atLeft << QCPAxis::atRight; + foreach (QCPAxis::AxisType type, allAxisTypes) + { + axis(type)->setVisible(true); + axis(type)->grid()->setVisible(false); + axis(type)->setPadding(0); + connect(axis(type), SIGNAL(selectionChanged(QCPAxis::SelectableParts)), this, SLOT(axisSelectionChanged(QCPAxis::SelectableParts))); + connect(axis(type), SIGNAL(selectableChanged(QCPAxis::SelectableParts)), this, SLOT(axisSelectableChanged(QCPAxis::SelectableParts))); + } + + connect(axis(QCPAxis::atLeft), SIGNAL(rangeChanged(QCPRange)), axis(QCPAxis::atRight), SLOT(setRange(QCPRange))); + connect(axis(QCPAxis::atRight), SIGNAL(rangeChanged(QCPRange)), axis(QCPAxis::atLeft), SLOT(setRange(QCPRange))); + connect(axis(QCPAxis::atBottom), SIGNAL(rangeChanged(QCPRange)), axis(QCPAxis::atTop), SLOT(setRange(QCPRange))); + connect(axis(QCPAxis::atTop), SIGNAL(rangeChanged(QCPRange)), axis(QCPAxis::atBottom), SLOT(setRange(QCPRange))); + connect(axis(QCPAxis::atLeft), SIGNAL(scaleTypeChanged(QCPAxis::ScaleType)), axis(QCPAxis::atRight), SLOT(setScaleType(QCPAxis::ScaleType))); + connect(axis(QCPAxis::atRight), SIGNAL(scaleTypeChanged(QCPAxis::ScaleType)), axis(QCPAxis::atLeft), SLOT(setScaleType(QCPAxis::ScaleType))); + connect(axis(QCPAxis::atBottom), SIGNAL(scaleTypeChanged(QCPAxis::ScaleType)), axis(QCPAxis::atTop), SLOT(setScaleType(QCPAxis::ScaleType))); + connect(axis(QCPAxis::atTop), SIGNAL(scaleTypeChanged(QCPAxis::ScaleType)), axis(QCPAxis::atBottom), SLOT(setScaleType(QCPAxis::ScaleType))); + + // make layer transfers of color scale transfer to axis rect and axes + // the axes must be set after axis rect, such that they appear above color gradient drawn by axis rect: + connect(parentColorScale, SIGNAL(layerChanged(QCPLayer*)), this, SLOT(setLayer(QCPLayer*))); + foreach (QCPAxis::AxisType type, allAxisTypes) + connect(parentColorScale, SIGNAL(layerChanged(QCPLayer*)), axis(type), SLOT(setLayer(QCPLayer*))); +} + +/*! \internal + Updates the color gradient image if necessary, by calling \ref updateGradientImage, then draws + it. Then the axes are drawn by calling the \ref QCPAxisRect::draw base class implementation. +*/ +void QCPColorScaleAxisRectPrivate::draw(QCPPainter *painter) +{ + if (mGradientImageInvalidated) + updateGradientImage(); + + bool mirrorHorz = false; + bool mirrorVert = false; + if (mParentColorScale->mColorAxis) + { + mirrorHorz = mParentColorScale->mColorAxis.data()->rangeReversed() && (mParentColorScale->type() == QCPAxis::atBottom || mParentColorScale->type() == QCPAxis::atTop); + mirrorVert = mParentColorScale->mColorAxis.data()->rangeReversed() && (mParentColorScale->type() == QCPAxis::atLeft || mParentColorScale->type() == QCPAxis::atRight); + } + + painter->drawImage(rect().adjusted(0, -1, 0, -1), mGradientImage.mirrored(mirrorHorz, mirrorVert)); + QCPAxisRect::draw(painter); +} + +/*! \internal + + Uses the current gradient of the parent \ref QCPColorScale (specified in the constructor) to + generate a gradient image. This gradient image will be used in the \ref draw method. +*/ +void QCPColorScaleAxisRectPrivate::updateGradientImage() +{ + if (rect().isEmpty()) + return; + + int n = mParentColorScale->mGradient.levelCount(); + int w, h; + QVector data(n); + for (int i=0; imType == QCPAxis::atBottom || mParentColorScale->mType == QCPAxis::atTop) + { + w = n; + h = rect().height(); + mGradientImage = QImage(w, h, QImage::Format_RGB32); + QVector pixels; + for (int y=0; y(mGradientImage.scanLine(y))); + mParentColorScale->mGradient.colorize(data.constData(), QCPRange(0, n-1), pixels.first(), n); + for (int y=1; y(mGradientImage.scanLine(y)); + const QRgb lineColor = mParentColorScale->mGradient.color(data[h-1-y], QCPRange(0, n-1)); + for (int x=0; x allAxisTypes = QList() << QCPAxis::atBottom << QCPAxis::atTop << QCPAxis::atLeft << QCPAxis::atRight; + foreach (QCPAxis::AxisType type, allAxisTypes) + { + if (QCPAxis *senderAxis = qobject_cast(sender())) + if (senderAxis->axisType() == type) + continue; + + if (axis(type)->selectableParts().testFlag(QCPAxis::spAxis)) + { + if (selectedParts.testFlag(QCPAxis::spAxis)) + axis(type)->setSelectedParts(axis(type)->selectedParts() | QCPAxis::spAxis); + else + axis(type)->setSelectedParts(axis(type)->selectedParts() & ~QCPAxis::spAxis); + } + } +} + +/*! \internal + + This slot is connected to the selectableChanged signals of the four axes in the constructor. It + synchronizes the selectability of the axes. +*/ +void QCPColorScaleAxisRectPrivate::axisSelectableChanged(QCPAxis::SelectableParts selectableParts) +{ + // synchronize axis base selectability: + QList allAxisTypes = QList() << QCPAxis::atBottom << QCPAxis::atTop << QCPAxis::atLeft << QCPAxis::atRight; + foreach (QCPAxis::AxisType type, allAxisTypes) + { + if (QCPAxis *senderAxis = qobject_cast(sender())) + if (senderAxis->axisType() == type) + continue; + + if (axis(type)->selectableParts().testFlag(QCPAxis::spAxis)) + { + if (selectableParts.testFlag(QCPAxis::spAxis)) + axis(type)->setSelectableParts(axis(type)->selectableParts() | QCPAxis::spAxis); + else + axis(type)->setSelectableParts(axis(type)->selectableParts() & ~QCPAxis::spAxis); + } + } +} + + +//////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////// QCPData +//////////////////////////////////////////////////////////////////////////////////////////////////// + +/*! \class QCPData + \brief Holds the data of one single data point for QCPGraph. + + The container for storing multiple data points is \ref QCPDataMap. + + The stored data is: + \li \a key: coordinate on the key axis of this data point + \li \a value: coordinate on the value axis of this data point + \li \a keyErrorMinus: negative error in the key dimension (for error bars) + \li \a keyErrorPlus: positive error in the key dimension (for error bars) + \li \a valueErrorMinus: negative error in the value dimension (for error bars) + \li \a valueErrorPlus: positive error in the value dimension (for error bars) + + \see QCPDataMap +*/ + +/*! + Constructs a data point with key, value and all errors set to zero. +*/ +QCPData::QCPData() : + key(0), + value(0), + keyErrorPlus(0), + keyErrorMinus(0), + valueErrorPlus(0), + valueErrorMinus(0) +{ +} + +/*! + Constructs a data point with the specified \a key and \a value. All errors are set to zero. +*/ +QCPData::QCPData(double key, double value) : + key(key), + value(value), + keyErrorPlus(0), + keyErrorMinus(0), + valueErrorPlus(0), + valueErrorMinus(0) +{ +} + + +//////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////// QCPGraph +//////////////////////////////////////////////////////////////////////////////////////////////////// + +/*! \class QCPGraph + \brief A plottable representing a graph in a plot. + + \image html QCPGraph.png + + Usually you create new graphs by calling QCustomPlot::addGraph. The resulting instance can be + accessed via QCustomPlot::graph. + + To plot data, assign it with the \ref setData or \ref addData functions. Alternatively, you can + also access and modify the graph's data via the \ref data method, which returns a pointer to the + internal \ref QCPDataMap. + + Graphs are used to display single-valued data. Single-valued means that there should only be one + data point per unique key coordinate. In other words, the graph can't have \a loops. If you do + want to plot non-single-valued curves, rather use the QCPCurve plottable. + + Gaps in the graph line can be created by adding data points with NaN as value + (qQNaN() or std::numeric_limits::quiet_NaN()) in between the two data points that shall be + separated. + + \section appearance Changing the appearance + + The appearance of the graph is mainly determined by the line style, scatter style, brush and pen + of the graph (\ref setLineStyle, \ref setScatterStyle, \ref setBrush, \ref setPen). + + \subsection filling Filling under or between graphs + + QCPGraph knows two types of fills: Normal graph fills towards the zero-value-line parallel to + the key axis of the graph, and fills between two graphs, called channel fills. To enable a fill, + just set a brush with \ref setBrush which is neither Qt::NoBrush nor fully transparent. + + By default, a normal fill towards the zero-value-line will be drawn. To set up a channel fill + between this graph and another one, call \ref setChannelFillGraph with the other graph as + parameter. + + \see QCustomPlot::addGraph, QCustomPlot::graph +*/ + +/* start of documentation of inline functions */ + +/*! \fn QCPDataMap *QCPGraph::data() const + + Returns a pointer to the internal data storage of type \ref QCPDataMap. You may use it to + directly manipulate the data, which may be more convenient and faster than using the regular \ref + setData or \ref addData methods, in certain situations. +*/ + +/* end of documentation of inline functions */ + +/*! + Constructs a graph which uses \a keyAxis as its key axis ("x") and \a valueAxis as its value + axis ("y"). \a keyAxis and \a valueAxis must reside in the same QCustomPlot instance and not have + the same orientation. If either of these restrictions is violated, a corresponding message is + printed to the debug output (qDebug), the construction is not aborted, though. + + The constructed QCPGraph can be added to the plot with QCustomPlot::addPlottable, QCustomPlot + then takes ownership of the graph. + + To directly create a graph inside a plot, you can also use the simpler QCustomPlot::addGraph function. +*/ +QCPGraph::QCPGraph(QCPAxis *keyAxis, QCPAxis *valueAxis) : + QCPAbstractPlottable(keyAxis, valueAxis) +{ + mData = new QCPDataMap; + + setPen(QPen(Qt::blue, 0)); + setErrorPen(QPen(Qt::black)); + setBrush(Qt::NoBrush); + setSelectedPen(QPen(QColor(80, 80, 255), 2.5)); + setSelectedBrush(Qt::NoBrush); + + setLineStyle(lsLine); + setErrorType(etNone); + setErrorBarSize(6); + setErrorBarSkipSymbol(true); + setChannelFillGraph(0); + setAdaptiveSampling(true); +} + +QCPGraph::~QCPGraph() +{ + delete mData; +} + +/*! + Replaces the current data with the provided \a data. + + If \a copy is set to true, data points in \a data will only be copied. if false, the graph + takes ownership of the passed data and replaces the internal data pointer with it. This is + significantly faster than copying for large datasets. + + Alternatively, you can also access and modify the graph's data via the \ref data method, which + returns a pointer to the internal \ref QCPDataMap. +*/ +void QCPGraph::setData(QCPDataMap *data, bool copy) +{ + if (mData == data) + { + qDebug() << Q_FUNC_INFO << "The data pointer is already in (and owned by) this plottable" << reinterpret_cast(data); + return; + } + if (copy) + { + *mData = *data; + } else + { + delete mData; + mData = data; + } +} + +/*! \overload + + Replaces the current data with the provided points in \a key and \a value pairs. The provided + vectors should have equal length. Else, the number of added points will be the size of the + smallest vector. +*/ +void QCPGraph::setData(const QVector &key, const QVector &value) +{ + mData->clear(); + int n = key.size(); + n = qMin(n, value.size()); + QCPData newData; + for (int i=0; iinsertMulti(newData.key, newData); + } +} + +/*! + Replaces the current data with the provided points in \a key and \a value pairs. Additionally the + symmetrical value error of the data points are set to the values in \a valueError. + For error bars to show appropriately, see \ref setErrorType. + The provided vectors should have equal length. Else, the number of added points will be the size of the + smallest vector. + + For asymmetrical errors (plus different from minus), see the overloaded version of this function. +*/ +void QCPGraph::setDataValueError(const QVector &key, const QVector &value, const QVector &valueError) +{ + mData->clear(); + int n = key.size(); + n = qMin(n, value.size()); + n = qMin(n, valueError.size()); + QCPData newData; + for (int i=0; iinsertMulti(key[i], newData); + } +} + +/*! + \overload + Replaces the current data with the provided points in \a key and \a value pairs. Additionally the + negative value error of the data points are set to the values in \a valueErrorMinus, the positive + value error to \a valueErrorPlus. + For error bars to show appropriately, see \ref setErrorType. + The provided vectors should have equal length. Else, the number of added points will be the size of the + smallest vector. +*/ +void QCPGraph::setDataValueError(const QVector &key, const QVector &value, const QVector &valueErrorMinus, const QVector &valueErrorPlus) +{ + mData->clear(); + int n = key.size(); + n = qMin(n, value.size()); + n = qMin(n, valueErrorMinus.size()); + n = qMin(n, valueErrorPlus.size()); + QCPData newData; + for (int i=0; iinsertMulti(key[i], newData); + } +} + +/*! + Replaces the current data with the provided points in \a key and \a value pairs. Additionally the + symmetrical key error of the data points are set to the values in \a keyError. + For error bars to show appropriately, see \ref setErrorType. + The provided vectors should have equal length. Else, the number of added points will be the size of the + smallest vector. + + For asymmetrical errors (plus different from minus), see the overloaded version of this function. +*/ +void QCPGraph::setDataKeyError(const QVector &key, const QVector &value, const QVector &keyError) +{ + mData->clear(); + int n = key.size(); + n = qMin(n, value.size()); + n = qMin(n, keyError.size()); + QCPData newData; + for (int i=0; iinsertMulti(key[i], newData); + } +} + +/*! + \overload + Replaces the current data with the provided points in \a key and \a value pairs. Additionally the + negative key error of the data points are set to the values in \a keyErrorMinus, the positive + key error to \a keyErrorPlus. + For error bars to show appropriately, see \ref setErrorType. + The provided vectors should have equal length. Else, the number of added points will be the size of the + smallest vector. +*/ +void QCPGraph::setDataKeyError(const QVector &key, const QVector &value, const QVector &keyErrorMinus, const QVector &keyErrorPlus) +{ + mData->clear(); + int n = key.size(); + n = qMin(n, value.size()); + n = qMin(n, keyErrorMinus.size()); + n = qMin(n, keyErrorPlus.size()); + QCPData newData; + for (int i=0; iinsertMulti(key[i], newData); + } +} + +/*! + Replaces the current data with the provided points in \a key and \a value pairs. Additionally the + symmetrical key and value errors of the data points are set to the values in \a keyError and \a valueError. + For error bars to show appropriately, see \ref setErrorType. + The provided vectors should have equal length. Else, the number of added points will be the size of the + smallest vector. + + For asymmetrical errors (plus different from minus), see the overloaded version of this function. +*/ +void QCPGraph::setDataBothError(const QVector &key, const QVector &value, const QVector &keyError, const QVector &valueError) +{ + mData->clear(); + int n = key.size(); + n = qMin(n, value.size()); + n = qMin(n, valueError.size()); + n = qMin(n, keyError.size()); + QCPData newData; + for (int i=0; iinsertMulti(key[i], newData); + } +} + +/*! + \overload + Replaces the current data with the provided points in \a key and \a value pairs. Additionally the + negative key and value errors of the data points are set to the values in \a keyErrorMinus and \a valueErrorMinus. The positive + key and value errors are set to the values in \a keyErrorPlus \a valueErrorPlus. + For error bars to show appropriately, see \ref setErrorType. + The provided vectors should have equal length. Else, the number of added points will be the size of the + smallest vector. +*/ +void QCPGraph::setDataBothError(const QVector &key, const QVector &value, const QVector &keyErrorMinus, const QVector &keyErrorPlus, const QVector &valueErrorMinus, const QVector &valueErrorPlus) +{ + mData->clear(); + int n = key.size(); + n = qMin(n, value.size()); + n = qMin(n, valueErrorMinus.size()); + n = qMin(n, valueErrorPlus.size()); + n = qMin(n, keyErrorMinus.size()); + n = qMin(n, keyErrorPlus.size()); + QCPData newData; + for (int i=0; iinsertMulti(key[i], newData); + } +} + + +/*! + Sets how the single data points are connected in the plot. For scatter-only plots, set \a ls to + \ref lsNone and \ref setScatterStyle to the desired scatter style. + + \see setScatterStyle +*/ +void QCPGraph::setLineStyle(LineStyle ls) +{ + mLineStyle = ls; +} + +/*! + Sets the visual appearance of single data points in the plot. If set to \ref QCPScatterStyle::ssNone, no scatter points + are drawn (e.g. for line-only-plots with appropriate line style). + + \see QCPScatterStyle, setLineStyle +*/ +void QCPGraph::setScatterStyle(const QCPScatterStyle &style) +{ + mScatterStyle = style; +} + +/*! + Sets which kind of error bars (Key Error, Value Error or both) should be drawn on each data + point. If you set \a errorType to something other than \ref etNone, make sure to actually pass + error data via the specific setData functions along with the data points (e.g. \ref + setDataValueError, \ref setDataKeyError, \ref setDataBothError). + + \see ErrorType +*/ +void QCPGraph::setErrorType(ErrorType errorType) +{ + mErrorType = errorType; +} + +/*! + Sets the pen with which the error bars will be drawn. + \see setErrorBarSize, setErrorType +*/ +void QCPGraph::setErrorPen(const QPen &pen) +{ + mErrorPen = pen; +} + +/*! + Sets the width of the handles at both ends of an error bar in pixels. +*/ +void QCPGraph::setErrorBarSize(double size) +{ + mErrorBarSize = size; +} + +/*! + If \a enabled is set to true, the error bar will not be drawn as a solid line under the scatter symbol but + leave some free space around the symbol. + + This feature uses the current scatter size (\ref QCPScatterStyle::setSize) to determine the size + of the area to leave blank. So when drawing Pixmaps as scatter points (\ref + QCPScatterStyle::ssPixmap), the scatter size must be set manually to a value corresponding to the + size of the Pixmap, if the error bars should leave gaps to its boundaries. + + \ref setErrorType, setErrorBarSize, setScatterStyle +*/ +void QCPGraph::setErrorBarSkipSymbol(bool enabled) +{ + mErrorBarSkipSymbol = enabled; +} + +/*! + Sets the target graph for filling the area between this graph and \a targetGraph with the current + brush (\ref setBrush). + + When \a targetGraph is set to 0, a normal graph fill to the zero-value-line will be shown. To + disable any filling, set the brush to Qt::NoBrush. + + \see setBrush +*/ +void QCPGraph::setChannelFillGraph(QCPGraph *targetGraph) +{ + // prevent setting channel target to this graph itself: + if (targetGraph == this) + { + qDebug() << Q_FUNC_INFO << "targetGraph is this graph itself"; + mChannelFillGraph = 0; + return; + } + // prevent setting channel target to a graph not in the plot: + if (targetGraph && targetGraph->mParentPlot != mParentPlot) + { + qDebug() << Q_FUNC_INFO << "targetGraph not in same plot"; + mChannelFillGraph = 0; + return; + } + + mChannelFillGraph = targetGraph; +} + +/*! + Sets whether adaptive sampling shall be used when plotting this graph. QCustomPlot's adaptive + sampling technique can drastically improve the replot performance for graphs with a larger number + of points (e.g. above 10,000), without notably changing the appearance of the graph. + + By default, adaptive sampling is enabled. Even if enabled, QCustomPlot decides whether adaptive + sampling shall actually be used on a per-graph basis. So leaving adaptive sampling enabled has no + disadvantage in almost all cases. + + \image html adaptive-sampling-line.png "A line plot of 500,000 points without and with adaptive sampling" + + As can be seen, line plots experience no visual degradation from adaptive sampling. Outliers are + reproduced reliably, as well as the overall shape of the data set. The replot time reduces + dramatically though. This allows QCustomPlot to display large amounts of data in realtime. + + \image html adaptive-sampling-scatter.png "A scatter plot of 100,000 points without and with adaptive sampling" + + Care must be taken when using high-density scatter plots in combination with adaptive sampling. + The adaptive sampling algorithm treats scatter plots more carefully than line plots which still + gives a significant reduction of replot times, but not quite as much as for line plots. This is + because scatter plots inherently need more data points to be preserved in order to still resemble + the original, non-adaptive-sampling plot. As shown above, the results still aren't quite + identical, as banding occurs for the outer data points. This is in fact intentional, such that + the boundaries of the data cloud stay visible to the viewer. How strong the banding appears, + depends on the point density, i.e. the number of points in the plot. + + For some situations with scatter plots it might thus be desirable to manually turn adaptive + sampling off. For example, when saving the plot to disk. This can be achieved by setting \a + enabled to false before issuing a command like \ref QCustomPlot::savePng, and setting \a enabled + back to true afterwards. +*/ +void QCPGraph::setAdaptiveSampling(bool enabled) +{ + mAdaptiveSampling = enabled; +} + +/*! + Adds the provided data points in \a dataMap to the current data. + + Alternatively, you can also access and modify the graph's data via the \ref data method, which + returns a pointer to the internal \ref QCPDataMap. + + \see removeData +*/ +void QCPGraph::addData(const QCPDataMap &dataMap) +{ + mData->unite(dataMap); +} + +/*! \overload + Adds the provided single data point in \a data to the current data. + + Alternatively, you can also access and modify the graph's data via the \ref data method, which + returns a pointer to the internal \ref QCPDataMap. + + \see removeData +*/ +void QCPGraph::addData(const QCPData &data) +{ + mData->insertMulti(data.key, data); +} + +/*! \overload + Adds the provided single data point as \a key and \a value pair to the current data. + + Alternatively, you can also access and modify the graph's data via the \ref data method, which + returns a pointer to the internal \ref QCPDataMap. + + \see removeData +*/ +void QCPGraph::addData(double key, double value) +{ + QCPData newData; + newData.key = key; + newData.value = value; + mData->insertMulti(newData.key, newData); +} + +/*! \overload + Adds the provided data points as \a key and \a value pairs to the current data. + + Alternatively, you can also access and modify the graph's data via the \ref data method, which + returns a pointer to the internal \ref QCPDataMap. + + \see removeData +*/ +void QCPGraph::addData(const QVector &keys, const QVector &values) +{ + int n = qMin(keys.size(), values.size()); + QCPData newData; + for (int i=0; iinsertMulti(newData.key, newData); + } +} + +/*! + Removes all data points with keys smaller than \a key. + \see addData, clearData +*/ +void QCPGraph::removeDataBefore(double key) +{ + QCPDataMap::iterator it = mData->begin(); + while (it != mData->end() && it.key() < key) + it = mData->erase(it); +} + +/*! + Removes all data points with keys greater than \a key. + \see addData, clearData +*/ +void QCPGraph::removeDataAfter(double key) +{ + if (mData->isEmpty()) return; + QCPDataMap::iterator it = mData->upperBound(key); + while (it != mData->end()) + it = mData->erase(it); +} + +/*! + Removes all data points with keys between \a fromKey and \a toKey. + if \a fromKey is greater or equal to \a toKey, the function does nothing. To remove + a single data point with known key, use \ref removeData(double key). + + \see addData, clearData +*/ +void QCPGraph::removeData(double fromKey, double toKey) +{ + if (fromKey >= toKey || mData->isEmpty()) return; + QCPDataMap::iterator it = mData->upperBound(fromKey); + QCPDataMap::iterator itEnd = mData->upperBound(toKey); + while (it != itEnd) + it = mData->erase(it); +} + +/*! \overload + + Removes a single data point at \a key. If the position is not known with absolute precision, + consider using \ref removeData(double fromKey, double toKey) with a small fuzziness interval around + the suspected position, depeding on the precision with which the key is known. + + \see addData, clearData +*/ +void QCPGraph::removeData(double key) +{ + mData->remove(key); +} + +/*! + Removes all data points. + \see removeData, removeDataAfter, removeDataBefore +*/ +void QCPGraph::clearData() +{ + mData->clear(); +} + +/* inherits documentation from base class */ +double QCPGraph::selectTest(const QPointF &pos, bool onlySelectable, QVariant *details) const +{ + Q_UNUSED(details) + if ((onlySelectable && !mSelectable) || mData->isEmpty()) + return -1; + if (!mKeyAxis || !mValueAxis) { qDebug() << Q_FUNC_INFO << "invalid key or value axis"; return -1; } + + if (mKeyAxis.data()->axisRect()->rect().contains(pos.toPoint())) + return pointDistance(pos); + else + return -1; +} + +/*! \overload + + Allows to define whether error bars are taken into consideration when determining the new axis + range. + + \see rescaleKeyAxis, rescaleValueAxis, QCPAbstractPlottable::rescaleAxes, QCustomPlot::rescaleAxes +*/ +void QCPGraph::rescaleAxes(bool onlyEnlarge, bool includeErrorBars) const +{ + rescaleKeyAxis(onlyEnlarge, includeErrorBars); + rescaleValueAxis(onlyEnlarge, includeErrorBars); +} + +/*! \overload + + Allows to define whether error bars (of kind \ref QCPGraph::etKey) are taken into consideration + when determining the new axis range. + + \see rescaleAxes, QCPAbstractPlottable::rescaleKeyAxis +*/ +void QCPGraph::rescaleKeyAxis(bool onlyEnlarge, bool includeErrorBars) const +{ + // this code is a copy of QCPAbstractPlottable::rescaleKeyAxis with the only change + // that getKeyRange is passed the includeErrorBars value. + if (mData->isEmpty()) return; + + QCPAxis *keyAxis = mKeyAxis.data(); + if (!keyAxis) { qDebug() << Q_FUNC_INFO << "invalid key axis"; return; } + + SignDomain signDomain = sdBoth; + if (keyAxis->scaleType() == QCPAxis::stLogarithmic) + signDomain = (keyAxis->range().upper < 0 ? sdNegative : sdPositive); + + bool foundRange; + QCPRange newRange = getKeyRange(foundRange, signDomain, includeErrorBars); + + if (foundRange) + { + if (onlyEnlarge) + { + if (keyAxis->range().lower < newRange.lower) + newRange.lower = keyAxis->range().lower; + if (keyAxis->range().upper > newRange.upper) + newRange.upper = keyAxis->range().upper; + } + keyAxis->setRange(newRange); + } +} + +/*! \overload + + Allows to define whether error bars (of kind \ref QCPGraph::etValue) are taken into consideration + when determining the new axis range. + + \see rescaleAxes, QCPAbstractPlottable::rescaleValueAxis +*/ +void QCPGraph::rescaleValueAxis(bool onlyEnlarge, bool includeErrorBars) const +{ + // this code is a copy of QCPAbstractPlottable::rescaleValueAxis with the only change + // is that getValueRange is passed the includeErrorBars value. + if (mData->isEmpty()) return; + + QCPAxis *valueAxis = mValueAxis.data(); + if (!valueAxis) { qDebug() << Q_FUNC_INFO << "invalid value axis"; return; } + + SignDomain signDomain = sdBoth; + if (valueAxis->scaleType() == QCPAxis::stLogarithmic) + signDomain = (valueAxis->range().upper < 0 ? sdNegative : sdPositive); + + bool foundRange; + QCPRange newRange = getValueRange(foundRange, signDomain, includeErrorBars); + + if (foundRange) + { + if (onlyEnlarge) + { + if (valueAxis->range().lower < newRange.lower) + newRange.lower = valueAxis->range().lower; + if (valueAxis->range().upper > newRange.upper) + newRange.upper = valueAxis->range().upper; + } + valueAxis->setRange(newRange); + } +} + +/* inherits documentation from base class */ +void QCPGraph::draw(QCPPainter *painter) +{ + if (!mKeyAxis || !mValueAxis) { qDebug() << Q_FUNC_INFO << "invalid key or value axis"; return; } + if (mKeyAxis.data()->range().size() <= 0 || mData->isEmpty()) return; + if (mLineStyle == lsNone && mScatterStyle.isNone()) return; + + // allocate line and (if necessary) point vectors: + QVector *lineData = new QVector; + QVector *scatterData = 0; + if (!mScatterStyle.isNone()) + scatterData = new QVector; + + // fill vectors with data appropriate to plot style: + getPlotData(lineData, scatterData); + + // check data validity if flag set: +#ifdef QCUSTOMPLOT_CHECK_DATA + QCPDataMap::const_iterator it; + for (it = mData->constBegin(); it != mData->constEnd(); ++it) + { + if (QCP::isInvalidData(it.value().key, it.value().value) || + QCP::isInvalidData(it.value().keyErrorPlus, it.value().keyErrorMinus) || + QCP::isInvalidData(it.value().valueErrorPlus, it.value().valueErrorPlus)) + qDebug() << Q_FUNC_INFO << "Data point at" << it.key() << "invalid." << "Plottable name:" << name(); + } +#endif + + // draw fill of graph: + if (mLineStyle != lsNone) + drawFill(painter, lineData); + + // draw line: + if (mLineStyle == lsImpulse) + drawImpulsePlot(painter, lineData); + else if (mLineStyle != lsNone) + drawLinePlot(painter, lineData); // also step plots can be drawn as a line plot + + // draw scatters: + if (scatterData) + drawScatterPlot(painter, scatterData); + + // free allocated line and point vectors: + delete lineData; + if (scatterData) + delete scatterData; +} + +/* inherits documentation from base class */ +void QCPGraph::drawLegendIcon(QCPPainter *painter, const QRectF &rect) const +{ + // draw fill: + if (mBrush.style() != Qt::NoBrush) + { + applyFillAntialiasingHint(painter); + painter->fillRect(QRectF(rect.left(), rect.top()+rect.height()/2.0, rect.width(), rect.height()/3.0), mBrush); + } + // draw line vertically centered: + if (mLineStyle != lsNone) + { + applyDefaultAntialiasingHint(painter); + painter->setPen(mPen); + painter->drawLine(QLineF(rect.left(), rect.top()+rect.height()/2.0, rect.right()+5, rect.top()+rect.height()/2.0)); // +5 on x2 else last segment is missing from dashed/dotted pens + } + // draw scatter symbol: + if (!mScatterStyle.isNone()) + { + applyScattersAntialiasingHint(painter); + // scale scatter pixmap if it's too large to fit in legend icon rect: + if (mScatterStyle.shape() == QCPScatterStyle::ssPixmap && (mScatterStyle.pixmap().size().width() > rect.width() || mScatterStyle.pixmap().size().height() > rect.height())) + { + QCPScatterStyle scaledStyle(mScatterStyle); + scaledStyle.setPixmap(scaledStyle.pixmap().scaled(rect.size().toSize(), Qt::KeepAspectRatio, Qt::SmoothTransformation)); + scaledStyle.applyTo(painter, mPen); + scaledStyle.drawShape(painter, QRectF(rect).center()); + } else + { + mScatterStyle.applyTo(painter, mPen); + mScatterStyle.drawShape(painter, QRectF(rect).center()); + } + } +} + +/*! \internal + + This function branches out to the line style specific "get(...)PlotData" functions, according to + the line style of the graph. + + \a lineData will be filled with raw points that will be drawn with the according draw functions, + e.g. \ref drawLinePlot and \ref drawImpulsePlot. These aren't necessarily the original data + points, since for step plots for example, additional points are needed for drawing lines that + make up steps. If the line style of the graph is \ref lsNone, the \a lineData vector will be left + untouched. + + \a scatterData will be filled with the original data points so \ref drawScatterPlot can draw the + scatter symbols accordingly. If no scatters need to be drawn, i.e. the scatter style's shape is + \ref QCPScatterStyle::ssNone, pass 0 as \a scatterData, and this step will be skipped. + + \see getScatterPlotData, getLinePlotData, getStepLeftPlotData, getStepRightPlotData, + getStepCenterPlotData, getImpulsePlotData +*/ +void QCPGraph::getPlotData(QVector *lineData, QVector *scatterData) const +{ + switch(mLineStyle) + { + case lsNone: getScatterPlotData(scatterData); break; + case lsLine: getLinePlotData(lineData, scatterData); break; + case lsStepLeft: getStepLeftPlotData(lineData, scatterData); break; + case lsStepRight: getStepRightPlotData(lineData, scatterData); break; + case lsStepCenter: getStepCenterPlotData(lineData, scatterData); break; + case lsImpulse: getImpulsePlotData(lineData, scatterData); break; + } +} + +/*! \internal + + If line style is \ref lsNone and the scatter style's shape is not \ref QCPScatterStyle::ssNone, + this function serves at providing the visible data points in \a scatterData, so the \ref + drawScatterPlot function can draw the scatter points accordingly. + + If line style is not \ref lsNone, this function is not called and the data for the scatter points + are (if needed) calculated inside the corresponding other "get(...)PlotData" functions. + + \see drawScatterPlot +*/ +void QCPGraph::getScatterPlotData(QVector *scatterData) const +{ + getPreparedData(0, scatterData); +} + +/*! \internal + + Places the raw data points needed for a normal linearly connected graph in \a linePixelData. + + As for all plot data retrieval functions, \a scatterData just contains all unaltered data (scatter) + points that are visible for drawing scatter points, if necessary. If drawing scatter points is + disabled (i.e. the scatter style's shape is \ref QCPScatterStyle::ssNone), pass 0 as \a + scatterData, and the function will skip filling the vector. + + \see drawLinePlot +*/ +void QCPGraph::getLinePlotData(QVector *linePixelData, QVector *scatterData) const +{ + QCPAxis *keyAxis = mKeyAxis.data(); + QCPAxis *valueAxis = mValueAxis.data(); + if (!keyAxis || !valueAxis) { qDebug() << Q_FUNC_INFO << "invalid key or value axis"; return; } + if (!linePixelData) { qDebug() << Q_FUNC_INFO << "null pointer passed as linePixelData"; return; } + + QVector lineData; + getPreparedData(&lineData, scatterData); + linePixelData->reserve(lineData.size()+2); // added 2 to reserve memory for lower/upper fill base points that might be needed for fill + linePixelData->resize(lineData.size()); + + // transform lineData points to pixels: + if (keyAxis->orientation() == Qt::Vertical) + { + for (int i=0; icoordToPixel(lineData.at(i).value)); + (*linePixelData)[i].setY(keyAxis->coordToPixel(lineData.at(i).key)); + } + } else // key axis is horizontal + { + for (int i=0; icoordToPixel(lineData.at(i).key)); + (*linePixelData)[i].setY(valueAxis->coordToPixel(lineData.at(i).value)); + } + } +} + +/*! + \internal + Places the raw data points needed for a step plot with left oriented steps in \a lineData. + + As for all plot data retrieval functions, \a scatterData just contains all unaltered data (scatter) + points that are visible for drawing scatter points, if necessary. If drawing scatter points is + disabled (i.e. the scatter style's shape is \ref QCPScatterStyle::ssNone), pass 0 as \a + scatterData, and the function will skip filling the vector. + + \see drawLinePlot +*/ +void QCPGraph::getStepLeftPlotData(QVector *linePixelData, QVector *scatterData) const +{ + QCPAxis *keyAxis = mKeyAxis.data(); + QCPAxis *valueAxis = mValueAxis.data(); + if (!keyAxis || !valueAxis) { qDebug() << Q_FUNC_INFO << "invalid key or value axis"; return; } + if (!linePixelData) { qDebug() << Q_FUNC_INFO << "null pointer passed as lineData"; return; } + + QVector lineData; + getPreparedData(&lineData, scatterData); + linePixelData->reserve(lineData.size()*2+2); // added 2 to reserve memory for lower/upper fill base points that might be needed for fill + linePixelData->resize(lineData.size()*2); + + // calculate steps from lineData and transform to pixel coordinates: + if (keyAxis->orientation() == Qt::Vertical) + { + double lastValue = valueAxis->coordToPixel(lineData.first().value); + double key; + for (int i=0; icoordToPixel(lineData.at(i).key); + (*linePixelData)[i*2+0].setX(lastValue); + (*linePixelData)[i*2+0].setY(key); + lastValue = valueAxis->coordToPixel(lineData.at(i).value); + (*linePixelData)[i*2+1].setX(lastValue); + (*linePixelData)[i*2+1].setY(key); + } + } else // key axis is horizontal + { + double lastValue = valueAxis->coordToPixel(lineData.first().value); + double key; + for (int i=0; icoordToPixel(lineData.at(i).key); + (*linePixelData)[i*2+0].setX(key); + (*linePixelData)[i*2+0].setY(lastValue); + lastValue = valueAxis->coordToPixel(lineData.at(i).value); + (*linePixelData)[i*2+1].setX(key); + (*linePixelData)[i*2+1].setY(lastValue); + } + } +} + +/*! + \internal + Places the raw data points needed for a step plot with right oriented steps in \a lineData. + + As for all plot data retrieval functions, \a scatterData just contains all unaltered data (scatter) + points that are visible for drawing scatter points, if necessary. If drawing scatter points is + disabled (i.e. the scatter style's shape is \ref QCPScatterStyle::ssNone), pass 0 as \a + scatterData, and the function will skip filling the vector. + + \see drawLinePlot +*/ +void QCPGraph::getStepRightPlotData(QVector *linePixelData, QVector *scatterData) const +{ + QCPAxis *keyAxis = mKeyAxis.data(); + QCPAxis *valueAxis = mValueAxis.data(); + if (!keyAxis || !valueAxis) { qDebug() << Q_FUNC_INFO << "invalid key or value axis"; return; } + if (!linePixelData) { qDebug() << Q_FUNC_INFO << "null pointer passed as lineData"; return; } + + QVector lineData; + getPreparedData(&lineData, scatterData); + linePixelData->reserve(lineData.size()*2+2); // added 2 to reserve memory for lower/upper fill base points that might be needed for fill + linePixelData->resize(lineData.size()*2); + + // calculate steps from lineData and transform to pixel coordinates: + if (keyAxis->orientation() == Qt::Vertical) + { + double lastKey = keyAxis->coordToPixel(lineData.first().key); + double value; + for (int i=0; icoordToPixel(lineData.at(i).value); + (*linePixelData)[i*2+0].setX(value); + (*linePixelData)[i*2+0].setY(lastKey); + lastKey = keyAxis->coordToPixel(lineData.at(i).key); + (*linePixelData)[i*2+1].setX(value); + (*linePixelData)[i*2+1].setY(lastKey); + } + } else // key axis is horizontal + { + double lastKey = keyAxis->coordToPixel(lineData.first().key); + double value; + for (int i=0; icoordToPixel(lineData.at(i).value); + (*linePixelData)[i*2+0].setX(lastKey); + (*linePixelData)[i*2+0].setY(value); + lastKey = keyAxis->coordToPixel(lineData.at(i).key); + (*linePixelData)[i*2+1].setX(lastKey); + (*linePixelData)[i*2+1].setY(value); + } + } +} + +/*! + \internal + Places the raw data points needed for a step plot with centered steps in \a lineData. + + As for all plot data retrieval functions, \a scatterData just contains all unaltered data (scatter) + points that are visible for drawing scatter points, if necessary. If drawing scatter points is + disabled (i.e. the scatter style's shape is \ref QCPScatterStyle::ssNone), pass 0 as \a + scatterData, and the function will skip filling the vector. + + \see drawLinePlot +*/ +void QCPGraph::getStepCenterPlotData(QVector *linePixelData, QVector *scatterData) const +{ + QCPAxis *keyAxis = mKeyAxis.data(); + QCPAxis *valueAxis = mValueAxis.data(); + if (!keyAxis || !valueAxis) { qDebug() << Q_FUNC_INFO << "invalid key or value axis"; return; } + if (!linePixelData) { qDebug() << Q_FUNC_INFO << "null pointer passed as lineData"; return; } + + QVector lineData; + getPreparedData(&lineData, scatterData); + linePixelData->reserve(lineData.size()*2+2); // added 2 to reserve memory for lower/upper fill base points that might be needed for fill + linePixelData->resize(lineData.size()*2); + // calculate steps from lineData and transform to pixel coordinates: + if (keyAxis->orientation() == Qt::Vertical) + { + double lastKey = keyAxis->coordToPixel(lineData.first().key); + double lastValue = valueAxis->coordToPixel(lineData.first().value); + double key; + (*linePixelData)[0].setX(lastValue); + (*linePixelData)[0].setY(lastKey); + for (int i=1; icoordToPixel(lineData.at(i).key)+lastKey)*0.5; + (*linePixelData)[i*2-1].setX(lastValue); + (*linePixelData)[i*2-1].setY(key); + lastValue = valueAxis->coordToPixel(lineData.at(i).value); + lastKey = keyAxis->coordToPixel(lineData.at(i).key); + (*linePixelData)[i*2+0].setX(lastValue); + (*linePixelData)[i*2+0].setY(key); + } + (*linePixelData)[lineData.size()*2-1].setX(lastValue); + (*linePixelData)[lineData.size()*2-1].setY(lastKey); + } else // key axis is horizontal + { + double lastKey = keyAxis->coordToPixel(lineData.first().key); + double lastValue = valueAxis->coordToPixel(lineData.first().value); + double key; + (*linePixelData)[0].setX(lastKey); + (*linePixelData)[0].setY(lastValue); + for (int i=1; icoordToPixel(lineData.at(i).key)+lastKey)*0.5; + (*linePixelData)[i*2-1].setX(key); + (*linePixelData)[i*2-1].setY(lastValue); + lastValue = valueAxis->coordToPixel(lineData.at(i).value); + lastKey = keyAxis->coordToPixel(lineData.at(i).key); + (*linePixelData)[i*2+0].setX(key); + (*linePixelData)[i*2+0].setY(lastValue); + } + (*linePixelData)[lineData.size()*2-1].setX(lastKey); + (*linePixelData)[lineData.size()*2-1].setY(lastValue); + } + +} + +/*! + \internal + Places the raw data points needed for an impulse plot in \a lineData. + + As for all plot data retrieval functions, \a scatterData just contains all unaltered data (scatter) + points that are visible for drawing scatter points, if necessary. If drawing scatter points is + disabled (i.e. the scatter style's shape is \ref QCPScatterStyle::ssNone), pass 0 as \a + scatterData, and the function will skip filling the vector. + + \see drawImpulsePlot +*/ +void QCPGraph::getImpulsePlotData(QVector *linePixelData, QVector *scatterData) const +{ + QCPAxis *keyAxis = mKeyAxis.data(); + QCPAxis *valueAxis = mValueAxis.data(); + if (!keyAxis || !valueAxis) { qDebug() << Q_FUNC_INFO << "invalid key or value axis"; return; } + if (!linePixelData) { qDebug() << Q_FUNC_INFO << "null pointer passed as linePixelData"; return; } + + QVector lineData; + getPreparedData(&lineData, scatterData); + linePixelData->resize(lineData.size()*2); // no need to reserve 2 extra points because impulse plot has no fill + + // transform lineData points to pixels: + if (keyAxis->orientation() == Qt::Vertical) + { + double zeroPointX = valueAxis->coordToPixel(0); + double key; + for (int i=0; icoordToPixel(lineData.at(i).key); + (*linePixelData)[i*2+0].setX(zeroPointX); + (*linePixelData)[i*2+0].setY(key); + (*linePixelData)[i*2+1].setX(valueAxis->coordToPixel(lineData.at(i).value)); + (*linePixelData)[i*2+1].setY(key); + } + } else // key axis is horizontal + { + double zeroPointY = valueAxis->coordToPixel(0); + double key; + for (int i=0; icoordToPixel(lineData.at(i).key); + (*linePixelData)[i*2+0].setX(key); + (*linePixelData)[i*2+0].setY(zeroPointY); + (*linePixelData)[i*2+1].setX(key); + (*linePixelData)[i*2+1].setY(valueAxis->coordToPixel(lineData.at(i).value)); + } + } +} + +/*! \internal + + Draws the fill of the graph with the specified brush. + + If the fill is a normal fill towards the zero-value-line, only the \a lineData is required (and + two extra points at the zero-value-line, which are added by \ref addFillBasePoints and removed by + \ref removeFillBasePoints after the fill drawing is done). + + If the fill is a channel fill between this QCPGraph and another QCPGraph (mChannelFillGraph), the + more complex polygon is calculated with the \ref getChannelFillPolygon function. + + \see drawLinePlot +*/ +void QCPGraph::drawFill(QCPPainter *painter, QVector *lineData) const +{ + if (mLineStyle == lsImpulse) return; // fill doesn't make sense for impulse plot + if (mainBrush().style() == Qt::NoBrush || mainBrush().color().alpha() == 0) return; + + applyFillAntialiasingHint(painter); + if (!mChannelFillGraph) + { + // draw base fill under graph, fill goes all the way to the zero-value-line: + addFillBasePoints(lineData); + painter->setPen(Qt::NoPen); + painter->setBrush(mainBrush()); + painter->drawPolygon(QPolygonF(*lineData)); + removeFillBasePoints(lineData); + } else + { + // draw channel fill between this graph and mChannelFillGraph: + painter->setPen(Qt::NoPen); + painter->setBrush(mainBrush()); + painter->drawPolygon(getChannelFillPolygon(lineData)); + } +} + +/*! \internal + + Draws scatter symbols at every data point passed in \a scatterData. scatter symbols are independent + of the line style and are always drawn if the scatter style's shape is not \ref + QCPScatterStyle::ssNone. Hence, the \a scatterData vector is outputted by all "get(...)PlotData" + functions, together with the (line style dependent) line data. + + \see drawLinePlot, drawImpulsePlot +*/ +void QCPGraph::drawScatterPlot(QCPPainter *painter, QVector *scatterData) const +{ + QCPAxis *keyAxis = mKeyAxis.data(); + QCPAxis *valueAxis = mValueAxis.data(); + if (!keyAxis || !valueAxis) { qDebug() << Q_FUNC_INFO << "invalid key or value axis"; return; } + + // draw error bars: + if (mErrorType != etNone) + { + applyErrorBarsAntialiasingHint(painter); + painter->setPen(mErrorPen); + if (keyAxis->orientation() == Qt::Vertical) + { + for (int i=0; isize(); ++i) + drawError(painter, valueAxis->coordToPixel(scatterData->at(i).value), keyAxis->coordToPixel(scatterData->at(i).key), scatterData->at(i)); + } else + { + for (int i=0; isize(); ++i) + drawError(painter, keyAxis->coordToPixel(scatterData->at(i).key), valueAxis->coordToPixel(scatterData->at(i).value), scatterData->at(i)); + } + } + + // draw scatter point symbols: + applyScattersAntialiasingHint(painter); + mScatterStyle.applyTo(painter, mPen); + if (keyAxis->orientation() == Qt::Vertical) + { + for (int i=0; isize(); ++i) + if (!qIsNaN(scatterData->at(i).value)) + mScatterStyle.drawShape(painter, valueAxis->coordToPixel(scatterData->at(i).value), keyAxis->coordToPixel(scatterData->at(i).key)); + } else + { + for (int i=0; isize(); ++i) + if (!qIsNaN(scatterData->at(i).value)) + mScatterStyle.drawShape(painter, keyAxis->coordToPixel(scatterData->at(i).key), valueAxis->coordToPixel(scatterData->at(i).value)); + } +} + +/*! \internal + + Draws line graphs from the provided data. It connects all points in \a lineData, which was + created by one of the "get(...)PlotData" functions for line styles that require simple line + connections between the point vector they create. These are for example \ref getLinePlotData, + \ref getStepLeftPlotData, \ref getStepRightPlotData and \ref getStepCenterPlotData. + + \see drawScatterPlot, drawImpulsePlot +*/ +void QCPGraph::drawLinePlot(QCPPainter *painter, QVector *lineData) const +{ + // draw line of graph: + if (mainPen().style() != Qt::NoPen && mainPen().color().alpha() != 0) + { + applyDefaultAntialiasingHint(painter); + painter->setPen(mainPen()); + painter->setBrush(Qt::NoBrush); + + /* Draws polyline in batches, currently not used: + int p = 0; + while (p < lineData->size()) + { + int batch = qMin(25, lineData->size()-p); + if (p != 0) + { + ++batch; + --p; // to draw the connection lines between two batches + } + painter->drawPolyline(lineData->constData()+p, batch); + p += batch; + } + */ + + // if drawing solid line and not in PDF, use much faster line drawing instead of polyline: + if (mParentPlot->plottingHints().testFlag(QCP::phFastPolylines) && + painter->pen().style() == Qt::SolidLine && + !painter->modes().testFlag(QCPPainter::pmVectorized) && + !painter->modes().testFlag(QCPPainter::pmNoCaching)) + { + int i = 0; + bool lastIsNan = false; + const int lineDataSize = lineData->size(); + while (i < lineDataSize && (qIsNaN(lineData->at(i).y()) || qIsNaN(lineData->at(i).x()))) // make sure first point is not NaN + ++i; + ++i; // because drawing works in 1 point retrospect + while (i < lineDataSize) + { + if (!qIsNaN(lineData->at(i).y()) && !qIsNaN(lineData->at(i).x())) // NaNs create a gap in the line + { + if (!lastIsNan) + painter->drawLine(lineData->at(i-1), lineData->at(i)); + else + lastIsNan = false; + } else + lastIsNan = true; + ++i; + } + } else + { + int segmentStart = 0; + int i = 0; + const int lineDataSize = lineData->size(); + while (i < lineDataSize) + { + if (qIsNaN(lineData->at(i).y()) || qIsNaN(lineData->at(i).x()) || qIsInf(lineData->at(i).y())) // NaNs create a gap in the line. Also filter Infs which make drawPolyline block + { + painter->drawPolyline(lineData->constData()+segmentStart, i-segmentStart); // i, because we don't want to include the current NaN point + segmentStart = i+1; + } + ++i; + } + // draw last segment: + painter->drawPolyline(lineData->constData()+segmentStart, lineDataSize-segmentStart); + } + } +} + +/*! \internal + + Draws impulses from the provided data, i.e. it connects all line pairs in \a lineData, which was + created by \ref getImpulsePlotData. + + \see drawScatterPlot, drawLinePlot +*/ +void QCPGraph::drawImpulsePlot(QCPPainter *painter, QVector *lineData) const +{ + // draw impulses: + if (mainPen().style() != Qt::NoPen && mainPen().color().alpha() != 0) + { + applyDefaultAntialiasingHint(painter); + QPen pen = mainPen(); + pen.setCapStyle(Qt::FlatCap); // so impulse line doesn't reach beyond zero-line + painter->setPen(pen); + painter->setBrush(Qt::NoBrush); + painter->drawLines(*lineData); + } +} + +/*! \internal + + Returns the \a lineData and \a scatterData that need to be plotted for this graph taking into + consideration the current axis ranges and, if \ref setAdaptiveSampling is enabled, local point + densities. + + 0 may be passed as \a lineData or \a scatterData to indicate that the respective dataset isn't + needed. For example, if the scatter style (\ref setScatterStyle) is \ref QCPScatterStyle::ssNone, \a + scatterData should be 0 to prevent unnecessary calculations. + + This method is used by the various "get(...)PlotData" methods to get the basic working set of data. +*/ +void QCPGraph::getPreparedData(QVector *lineData, QVector *scatterData) const +{ + QCPAxis *keyAxis = mKeyAxis.data(); + QCPAxis *valueAxis = mValueAxis.data(); + if (!keyAxis || !valueAxis) { qDebug() << Q_FUNC_INFO << "invalid key or value axis"; return; } + // get visible data range: + QCPDataMap::const_iterator lower, upper; // note that upper is the actual upper point, and not 1 step after the upper point + getVisibleDataBounds(lower, upper); + if (lower == mData->constEnd() || upper == mData->constEnd()) + return; + + // count points in visible range, taking into account that we only need to count to the limit maxCount if using adaptive sampling: + int maxCount = std::numeric_limits::max(); + if (mAdaptiveSampling) + { + int keyPixelSpan = qAbs(keyAxis->coordToPixel(lower.key())-keyAxis->coordToPixel(upper.key())); + maxCount = 2*keyPixelSpan+2; + } + int dataCount = countDataInBounds(lower, upper, maxCount); + + if (mAdaptiveSampling && dataCount >= maxCount) // use adaptive sampling only if there are at least two points per pixel on average + { + if (lineData) + { + QCPDataMap::const_iterator it = lower; + QCPDataMap::const_iterator upperEnd = upper+1; + double minValue = it.value().value; + double maxValue = it.value().value; + QCPDataMap::const_iterator currentIntervalFirstPoint = it; + int reversedFactor = keyAxis->rangeReversed() != (keyAxis->orientation()==Qt::Vertical) ? -1 : 1; // is used to calculate keyEpsilon pixel into the correct direction + int reversedRound = keyAxis->rangeReversed() != (keyAxis->orientation()==Qt::Vertical) ? 1 : 0; // is used to switch between floor (normal) and ceil (reversed) rounding of currentIntervalStartKey + double currentIntervalStartKey = keyAxis->pixelToCoord((int)(keyAxis->coordToPixel(lower.key())+reversedRound)); + double lastIntervalEndKey = currentIntervalStartKey; + double keyEpsilon = qAbs(currentIntervalStartKey-keyAxis->pixelToCoord(keyAxis->coordToPixel(currentIntervalStartKey)+1.0*reversedFactor)); // interval of one pixel on screen when mapped to plot key coordinates + bool keyEpsilonVariable = keyAxis->scaleType() == QCPAxis::stLogarithmic; // indicates whether keyEpsilon needs to be updated after every interval (for log axes) + int intervalDataCount = 1; + ++it; // advance iterator to second data point because adaptive sampling works in 1 point retrospect + while (it != upperEnd) + { + if (it.key() < currentIntervalStartKey+keyEpsilon) // data point is still within same pixel, so skip it and expand value span of this cluster if necessary + { + if (it.value().value < minValue) + minValue = it.value().value; + else if (it.value().value > maxValue) + maxValue = it.value().value; + ++intervalDataCount; + } else // new pixel interval started + { + if (intervalDataCount >= 2) // last pixel had multiple data points, consolidate them to a cluster + { + if (lastIntervalEndKey < currentIntervalStartKey-keyEpsilon) // last point is further away, so first point of this cluster must be at a real data point + lineData->append(QCPData(currentIntervalStartKey+keyEpsilon*0.2, currentIntervalFirstPoint.value().value)); + lineData->append(QCPData(currentIntervalStartKey+keyEpsilon*0.25, minValue)); + lineData->append(QCPData(currentIntervalStartKey+keyEpsilon*0.75, maxValue)); + if (it.key() > currentIntervalStartKey+keyEpsilon*2) // new pixel started further away from previous cluster, so make sure the last point of the cluster is at a real data point + lineData->append(QCPData(currentIntervalStartKey+keyEpsilon*0.8, (it-1).value().value)); + } else + lineData->append(QCPData(currentIntervalFirstPoint.key(), currentIntervalFirstPoint.value().value)); + lastIntervalEndKey = (it-1).value().key; + minValue = it.value().value; + maxValue = it.value().value; + currentIntervalFirstPoint = it; + currentIntervalStartKey = keyAxis->pixelToCoord((int)(keyAxis->coordToPixel(it.key())+reversedRound)); + if (keyEpsilonVariable) + keyEpsilon = qAbs(currentIntervalStartKey-keyAxis->pixelToCoord(keyAxis->coordToPixel(currentIntervalStartKey)+1.0*reversedFactor)); + intervalDataCount = 1; + } + ++it; + } + // handle last interval: + if (intervalDataCount >= 2) // last pixel had multiple data points, consolidate them to a cluster + { + if (lastIntervalEndKey < currentIntervalStartKey-keyEpsilon) // last point wasn't a cluster, so first point of this cluster must be at a real data point + lineData->append(QCPData(currentIntervalStartKey+keyEpsilon*0.2, currentIntervalFirstPoint.value().value)); + lineData->append(QCPData(currentIntervalStartKey+keyEpsilon*0.25, minValue)); + lineData->append(QCPData(currentIntervalStartKey+keyEpsilon*0.75, maxValue)); + } else + lineData->append(QCPData(currentIntervalFirstPoint.key(), currentIntervalFirstPoint.value().value)); + } + + if (scatterData) + { + double valueMaxRange = valueAxis->range().upper; + double valueMinRange = valueAxis->range().lower; + QCPDataMap::const_iterator it = lower; + QCPDataMap::const_iterator upperEnd = upper+1; + double minValue = it.value().value; + double maxValue = it.value().value; + QCPDataMap::const_iterator minValueIt = it; + QCPDataMap::const_iterator maxValueIt = it; + QCPDataMap::const_iterator currentIntervalStart = it; + int reversedFactor = keyAxis->rangeReversed() ? -1 : 1; // is used to calculate keyEpsilon pixel into the correct direction + int reversedRound = keyAxis->rangeReversed() ? 1 : 0; // is used to switch between floor (normal) and ceil (reversed) rounding of currentIntervalStartKey + double currentIntervalStartKey = keyAxis->pixelToCoord((int)(keyAxis->coordToPixel(lower.key())+reversedRound)); + double keyEpsilon = qAbs(currentIntervalStartKey-keyAxis->pixelToCoord(keyAxis->coordToPixel(currentIntervalStartKey)+1.0*reversedFactor)); // interval of one pixel on screen when mapped to plot key coordinates + bool keyEpsilonVariable = keyAxis->scaleType() == QCPAxis::stLogarithmic; // indicates whether keyEpsilon needs to be updated after every interval (for log axes) + int intervalDataCount = 1; + ++it; // advance iterator to second data point because adaptive sampling works in 1 point retrospect + while (it != upperEnd) + { + if (it.key() < currentIntervalStartKey+keyEpsilon) // data point is still within same pixel, so skip it and expand value span of this pixel if necessary + { + if (it.value().value < minValue && it.value().value > valueMinRange && it.value().value < valueMaxRange) + { + minValue = it.value().value; + minValueIt = it; + } else if (it.value().value > maxValue && it.value().value > valueMinRange && it.value().value < valueMaxRange) + { + maxValue = it.value().value; + maxValueIt = it; + } + ++intervalDataCount; + } else // new pixel started + { + if (intervalDataCount >= 2) // last pixel had multiple data points, consolidate them + { + // determine value pixel span and add as many points in interval to maintain certain vertical data density (this is specific to scatter plot): + double valuePixelSpan = qAbs(valueAxis->coordToPixel(minValue)-valueAxis->coordToPixel(maxValue)); + int dataModulo = qMax(1, qRound(intervalDataCount/(valuePixelSpan/4.0))); // approximately every 4 value pixels one data point on average + QCPDataMap::const_iterator intervalIt = currentIntervalStart; + int c = 0; + while (intervalIt != it) + { + if ((c % dataModulo == 0 || intervalIt == minValueIt || intervalIt == maxValueIt) && intervalIt.value().value > valueMinRange && intervalIt.value().value < valueMaxRange) + scatterData->append(intervalIt.value()); + ++c; + ++intervalIt; + } + } else if (currentIntervalStart.value().value > valueMinRange && currentIntervalStart.value().value < valueMaxRange) + scatterData->append(currentIntervalStart.value()); + minValue = it.value().value; + maxValue = it.value().value; + currentIntervalStart = it; + currentIntervalStartKey = keyAxis->pixelToCoord((int)(keyAxis->coordToPixel(it.key())+reversedRound)); + if (keyEpsilonVariable) + keyEpsilon = qAbs(currentIntervalStartKey-keyAxis->pixelToCoord(keyAxis->coordToPixel(currentIntervalStartKey)+1.0*reversedFactor)); + intervalDataCount = 1; + } + ++it; + } + // handle last interval: + if (intervalDataCount >= 2) // last pixel had multiple data points, consolidate them + { + // determine value pixel span and add as many points in interval to maintain certain vertical data density (this is specific to scatter plot): + double valuePixelSpan = qAbs(valueAxis->coordToPixel(minValue)-valueAxis->coordToPixel(maxValue)); + int dataModulo = qMax(1, qRound(intervalDataCount/(valuePixelSpan/4.0))); // approximately every 4 value pixels one data point on average + QCPDataMap::const_iterator intervalIt = currentIntervalStart; + int c = 0; + while (intervalIt != it) + { + if ((c % dataModulo == 0 || intervalIt == minValueIt || intervalIt == maxValueIt) && intervalIt.value().value > valueMinRange && intervalIt.value().value < valueMaxRange) + scatterData->append(intervalIt.value()); + ++c; + ++intervalIt; + } + } else if (currentIntervalStart.value().value > valueMinRange && currentIntervalStart.value().value < valueMaxRange) + scatterData->append(currentIntervalStart.value()); + } + } else // don't use adaptive sampling algorithm, transfer points one-to-one from the map into the output parameters + { + QVector *dataVector = 0; + if (lineData) + dataVector = lineData; + else if (scatterData) + dataVector = scatterData; + if (dataVector) + { + QCPDataMap::const_iterator it = lower; + QCPDataMap::const_iterator upperEnd = upper+1; + dataVector->reserve(dataCount+2); // +2 for possible fill end points + while (it != upperEnd) + { + dataVector->append(it.value()); + ++it; + } + } + if (lineData && scatterData) + *scatterData = *dataVector; + } +} + +/*! \internal + + called by the scatter drawing function (\ref drawScatterPlot) to draw the error bars on one data + point. \a x and \a y pixel positions of the data point are passed since they are already known in + pixel coordinates in the drawing function, so we save some extra coordToPixel transforms here. \a + data is therefore only used for the errors, not key and value. +*/ +void QCPGraph::drawError(QCPPainter *painter, double x, double y, const QCPData &data) const +{ + if (qIsNaN(data.value)) + return; + QCPAxis *keyAxis = mKeyAxis.data(); + QCPAxis *valueAxis = mValueAxis.data(); + if (!keyAxis || !valueAxis) { qDebug() << Q_FUNC_INFO << "invalid key or value axis"; return; } + + double a, b; // positions of error bar bounds in pixels + double barWidthHalf = mErrorBarSize*0.5; + double skipSymbolMargin = mScatterStyle.size(); // pixels left blank per side, when mErrorBarSkipSymbol is true + + if (keyAxis->orientation() == Qt::Vertical) + { + // draw key error vertically and value error horizontally + if (mErrorType == etKey || mErrorType == etBoth) + { + a = keyAxis->coordToPixel(data.key-data.keyErrorMinus); + b = keyAxis->coordToPixel(data.key+data.keyErrorPlus); + if (keyAxis->rangeReversed()) + qSwap(a,b); + // draw spine: + if (mErrorBarSkipSymbol) + { + if (a-y > skipSymbolMargin) // don't draw spine if error is so small it's within skipSymbolmargin + painter->drawLine(QLineF(x, a, x, y+skipSymbolMargin)); + if (y-b > skipSymbolMargin) + painter->drawLine(QLineF(x, y-skipSymbolMargin, x, b)); + } else + painter->drawLine(QLineF(x, a, x, b)); + // draw handles: + painter->drawLine(QLineF(x-barWidthHalf, a, x+barWidthHalf, a)); + painter->drawLine(QLineF(x-barWidthHalf, b, x+barWidthHalf, b)); + } + if (mErrorType == etValue || mErrorType == etBoth) + { + a = valueAxis->coordToPixel(data.value-data.valueErrorMinus); + b = valueAxis->coordToPixel(data.value+data.valueErrorPlus); + if (valueAxis->rangeReversed()) + qSwap(a,b); + // draw spine: + if (mErrorBarSkipSymbol) + { + if (x-a > skipSymbolMargin) // don't draw spine if error is so small it's within skipSymbolmargin + painter->drawLine(QLineF(a, y, x-skipSymbolMargin, y)); + if (b-x > skipSymbolMargin) + painter->drawLine(QLineF(x+skipSymbolMargin, y, b, y)); + } else + painter->drawLine(QLineF(a, y, b, y)); + // draw handles: + painter->drawLine(QLineF(a, y-barWidthHalf, a, y+barWidthHalf)); + painter->drawLine(QLineF(b, y-barWidthHalf, b, y+barWidthHalf)); + } + } else // mKeyAxis->orientation() is Qt::Horizontal + { + // draw value error vertically and key error horizontally + if (mErrorType == etKey || mErrorType == etBoth) + { + a = keyAxis->coordToPixel(data.key-data.keyErrorMinus); + b = keyAxis->coordToPixel(data.key+data.keyErrorPlus); + if (keyAxis->rangeReversed()) + qSwap(a,b); + // draw spine: + if (mErrorBarSkipSymbol) + { + if (x-a > skipSymbolMargin) // don't draw spine if error is so small it's within skipSymbolmargin + painter->drawLine(QLineF(a, y, x-skipSymbolMargin, y)); + if (b-x > skipSymbolMargin) + painter->drawLine(QLineF(x+skipSymbolMargin, y, b, y)); + } else + painter->drawLine(QLineF(a, y, b, y)); + // draw handles: + painter->drawLine(QLineF(a, y-barWidthHalf, a, y+barWidthHalf)); + painter->drawLine(QLineF(b, y-barWidthHalf, b, y+barWidthHalf)); + } + if (mErrorType == etValue || mErrorType == etBoth) + { + a = valueAxis->coordToPixel(data.value-data.valueErrorMinus); + b = valueAxis->coordToPixel(data.value+data.valueErrorPlus); + if (valueAxis->rangeReversed()) + qSwap(a,b); + // draw spine: + if (mErrorBarSkipSymbol) + { + if (a-y > skipSymbolMargin) // don't draw spine if error is so small it's within skipSymbolmargin + painter->drawLine(QLineF(x, a, x, y+skipSymbolMargin)); + if (y-b > skipSymbolMargin) + painter->drawLine(QLineF(x, y-skipSymbolMargin, x, b)); + } else + painter->drawLine(QLineF(x, a, x, b)); + // draw handles: + painter->drawLine(QLineF(x-barWidthHalf, a, x+barWidthHalf, a)); + painter->drawLine(QLineF(x-barWidthHalf, b, x+barWidthHalf, b)); + } + } +} + +/*! \internal + + called by \ref getPreparedData to determine which data (key) range is visible at the current key + axis range setting, so only that needs to be processed. + + \a lower returns an iterator to the lowest data point that needs to be taken into account when + plotting. Note that in order to get a clean plot all the way to the edge of the axis rect, \a + lower may still be just outside the visible range. + + \a upper returns an iterator to the highest data point. Same as before, \a upper may also lie + just outside of the visible range. + + if the graph contains no data, both \a lower and \a upper point to constEnd. +*/ +void QCPGraph::getVisibleDataBounds(QCPDataMap::const_iterator &lower, QCPDataMap::const_iterator &upper) const +{ + if (!mKeyAxis) { qDebug() << Q_FUNC_INFO << "invalid key axis"; return; } + if (mData->isEmpty()) + { + lower = mData->constEnd(); + upper = mData->constEnd(); + return; + } + + // get visible data range as QMap iterators + QCPDataMap::const_iterator lbound = mData->lowerBound(mKeyAxis.data()->range().lower); + QCPDataMap::const_iterator ubound = mData->upperBound(mKeyAxis.data()->range().upper); + bool lowoutlier = lbound != mData->constBegin(); // indicates whether there exist points below axis range + bool highoutlier = ubound != mData->constEnd(); // indicates whether there exist points above axis range + + lower = (lowoutlier ? lbound-1 : lbound); // data point range that will be actually drawn + upper = (highoutlier ? ubound : ubound-1); // data point range that will be actually drawn +} + +/*! \internal + + Counts the number of data points between \a lower and \a upper (including them), up to a maximum + of \a maxCount. + + This function is used by \ref getPreparedData to determine whether adaptive sampling shall be + used (if enabled via \ref setAdaptiveSampling) or not. This is also why counting of data points + only needs to be done until \a maxCount is reached, which should be set to the number of data + points at which adaptive sampling sets in. +*/ +int QCPGraph::countDataInBounds(const QCPDataMap::const_iterator &lower, const QCPDataMap::const_iterator &upper, int maxCount) const +{ + if (upper == mData->constEnd() && lower == mData->constEnd()) + return 0; + QCPDataMap::const_iterator it = lower; + int count = 1; + while (it != upper && count < maxCount) + { + ++it; + ++count; + } + return count; +} + +/*! \internal + + The line data vector generated by e.g. getLinePlotData contains only the line that connects the + data points. If the graph needs to be filled, two additional points need to be added at the + value-zero-line in the lower and upper key positions of the graph. This function calculates these + points and adds them to the end of \a lineData. Since the fill is typically drawn before the line + stroke, these added points need to be removed again after the fill is done, with the + removeFillBasePoints function. + + The expanding of \a lineData by two points will not cause unnecessary memory reallocations, + because the data vector generation functions (getLinePlotData etc.) reserve two extra points when + they allocate memory for \a lineData. + + \see removeFillBasePoints, lowerFillBasePoint, upperFillBasePoint +*/ +void QCPGraph::addFillBasePoints(QVector *lineData) const +{ + if (!mKeyAxis) { qDebug() << Q_FUNC_INFO << "invalid key axis"; return; } + if (!lineData) { qDebug() << Q_FUNC_INFO << "passed null as lineData"; return; } + if (lineData->isEmpty()) return; + + // append points that close the polygon fill at the key axis: + if (mKeyAxis.data()->orientation() == Qt::Vertical) + { + *lineData << upperFillBasePoint(lineData->last().y()); + *lineData << lowerFillBasePoint(lineData->first().y()); + } else + { + *lineData << upperFillBasePoint(lineData->last().x()); + *lineData << lowerFillBasePoint(lineData->first().x()); + } +} + +/*! \internal + + removes the two points from \a lineData that were added by \ref addFillBasePoints. + + \see addFillBasePoints, lowerFillBasePoint, upperFillBasePoint +*/ +void QCPGraph::removeFillBasePoints(QVector *lineData) const +{ + if (!lineData) { qDebug() << Q_FUNC_INFO << "passed null as lineData"; return; } + if (lineData->isEmpty()) return; + + lineData->remove(lineData->size()-2, 2); +} + +/*! \internal + + called by \ref addFillBasePoints to conveniently assign the point which closes the fill polygon + on the lower side of the zero-value-line parallel to the key axis. The logarithmic axis scale + case is a bit special, since the zero-value-line in pixel coordinates is in positive or negative + infinity. So this case is handled separately by just closing the fill polygon on the axis which + lies in the direction towards the zero value. + + \a lowerKey will be the the key (in pixels) of the returned point. Depending on whether the key + axis is horizontal or vertical, \a lowerKey will end up as the x or y value of the returned + point, respectively. + + \see upperFillBasePoint, addFillBasePoints +*/ +QPointF QCPGraph::lowerFillBasePoint(double lowerKey) const +{ + QCPAxis *keyAxis = mKeyAxis.data(); + QCPAxis *valueAxis = mValueAxis.data(); + if (!keyAxis || !valueAxis) { qDebug() << Q_FUNC_INFO << "invalid key or value axis"; return QPointF(); } + + QPointF point; + if (valueAxis->scaleType() == QCPAxis::stLinear) + { + if (keyAxis->axisType() == QCPAxis::atLeft) + { + point.setX(valueAxis->coordToPixel(0)); + point.setY(lowerKey); + } else if (keyAxis->axisType() == QCPAxis::atRight) + { + point.setX(valueAxis->coordToPixel(0)); + point.setY(lowerKey); + } else if (keyAxis->axisType() == QCPAxis::atTop) + { + point.setX(lowerKey); + point.setY(valueAxis->coordToPixel(0)); + } else if (keyAxis->axisType() == QCPAxis::atBottom) + { + point.setX(lowerKey); + point.setY(valueAxis->coordToPixel(0)); + } + } else // valueAxis->mScaleType == QCPAxis::stLogarithmic + { + // In logarithmic scaling we can't just draw to value zero so we just fill all the way + // to the axis which is in the direction towards zero + if (keyAxis->orientation() == Qt::Vertical) + { + if ((valueAxis->range().upper < 0 && !valueAxis->rangeReversed()) || + (valueAxis->range().upper > 0 && valueAxis->rangeReversed())) // if range is negative, zero is on opposite side of key axis + point.setX(keyAxis->axisRect()->right()); + else + point.setX(keyAxis->axisRect()->left()); + point.setY(lowerKey); + } else if (keyAxis->axisType() == QCPAxis::atTop || keyAxis->axisType() == QCPAxis::atBottom) + { + point.setX(lowerKey); + if ((valueAxis->range().upper < 0 && !valueAxis->rangeReversed()) || + (valueAxis->range().upper > 0 && valueAxis->rangeReversed())) // if range is negative, zero is on opposite side of key axis + point.setY(keyAxis->axisRect()->top()); + else + point.setY(keyAxis->axisRect()->bottom()); + } + } + return point; +} + +/*! \internal + + called by \ref addFillBasePoints to conveniently assign the point which closes the fill + polygon on the upper side of the zero-value-line parallel to the key axis. The logarithmic axis + scale case is a bit special, since the zero-value-line in pixel coordinates is in positive or + negative infinity. So this case is handled separately by just closing the fill polygon on the + axis which lies in the direction towards the zero value. + + \a upperKey will be the the key (in pixels) of the returned point. Depending on whether the key + axis is horizontal or vertical, \a upperKey will end up as the x or y value of the returned + point, respectively. + + \see lowerFillBasePoint, addFillBasePoints +*/ +QPointF QCPGraph::upperFillBasePoint(double upperKey) const +{ + QCPAxis *keyAxis = mKeyAxis.data(); + QCPAxis *valueAxis = mValueAxis.data(); + if (!keyAxis || !valueAxis) { qDebug() << Q_FUNC_INFO << "invalid key or value axis"; return QPointF(); } + + QPointF point; + if (valueAxis->scaleType() == QCPAxis::stLinear) + { + if (keyAxis->axisType() == QCPAxis::atLeft) + { + point.setX(valueAxis->coordToPixel(0)); + point.setY(upperKey); + } else if (keyAxis->axisType() == QCPAxis::atRight) + { + point.setX(valueAxis->coordToPixel(0)); + point.setY(upperKey); + } else if (keyAxis->axisType() == QCPAxis::atTop) + { + point.setX(upperKey); + point.setY(valueAxis->coordToPixel(0)); + } else if (keyAxis->axisType() == QCPAxis::atBottom) + { + point.setX(upperKey); + point.setY(valueAxis->coordToPixel(0)); + } + } else // valueAxis->mScaleType == QCPAxis::stLogarithmic + { + // In logarithmic scaling we can't just draw to value 0 so we just fill all the way + // to the axis which is in the direction towards 0 + if (keyAxis->orientation() == Qt::Vertical) + { + if ((valueAxis->range().upper < 0 && !valueAxis->rangeReversed()) || + (valueAxis->range().upper > 0 && valueAxis->rangeReversed())) // if range is negative, zero is on opposite side of key axis + point.setX(keyAxis->axisRect()->right()); + else + point.setX(keyAxis->axisRect()->left()); + point.setY(upperKey); + } else if (keyAxis->axisType() == QCPAxis::atTop || keyAxis->axisType() == QCPAxis::atBottom) + { + point.setX(upperKey); + if ((valueAxis->range().upper < 0 && !valueAxis->rangeReversed()) || + (valueAxis->range().upper > 0 && valueAxis->rangeReversed())) // if range is negative, zero is on opposite side of key axis + point.setY(keyAxis->axisRect()->top()); + else + point.setY(keyAxis->axisRect()->bottom()); + } + } + return point; +} + +/*! \internal + + Generates the polygon needed for drawing channel fills between this graph (data passed via \a + lineData) and the graph specified by mChannelFillGraph (data generated by calling its \ref + getPlotData function). May return an empty polygon if the key ranges have no overlap or fill + target graph and this graph don't have same orientation (i.e. both key axes horizontal or both + key axes vertical). For increased performance (due to implicit sharing), keep the returned + QPolygonF const. +*/ +const QPolygonF QCPGraph::getChannelFillPolygon(const QVector *lineData) const +{ + if (!mChannelFillGraph) + return QPolygonF(); + + QCPAxis *keyAxis = mKeyAxis.data(); + QCPAxis *valueAxis = mValueAxis.data(); + if (!keyAxis || !valueAxis) { qDebug() << Q_FUNC_INFO << "invalid key or value axis"; return QPolygonF(); } + if (!mChannelFillGraph.data()->mKeyAxis) { qDebug() << Q_FUNC_INFO << "channel fill target key axis invalid"; return QPolygonF(); } + + if (mChannelFillGraph.data()->mKeyAxis.data()->orientation() != keyAxis->orientation()) + return QPolygonF(); // don't have same axis orientation, can't fill that (Note: if keyAxis fits, valueAxis will fit too, because it's always orthogonal to keyAxis) + + if (lineData->isEmpty()) return QPolygonF(); + QVector otherData; + mChannelFillGraph.data()->getPlotData(&otherData, 0); + if (otherData.isEmpty()) return QPolygonF(); + QVector thisData; + thisData.reserve(lineData->size()+otherData.size()); // because we will join both vectors at end of this function + for (int i=0; isize(); ++i) // don't use the vector<<(vector), it squeezes internally, which ruins the performance tuning with reserve() + thisData << lineData->at(i); + + // pointers to be able to swap them, depending which data range needs cropping: + QVector *staticData = &thisData; + QVector *croppedData = &otherData; + + // crop both vectors to ranges in which the keys overlap (which coord is key, depends on axisType): + if (keyAxis->orientation() == Qt::Horizontal) + { + // x is key + // if an axis range is reversed, the data point keys will be descending. Reverse them, since following algorithm assumes ascending keys: + if (staticData->first().x() > staticData->last().x()) + { + int size = staticData->size(); + for (int i=0; ifirst().x() > croppedData->last().x()) + { + int size = croppedData->size(); + for (int i=0; ifirst().x() < croppedData->first().x()) // other one must be cropped + qSwap(staticData, croppedData); + int lowBound = findIndexBelowX(croppedData, staticData->first().x()); + if (lowBound == -1) return QPolygonF(); // key ranges have no overlap + croppedData->remove(0, lowBound); + // set lowest point of cropped data to fit exactly key position of first static data + // point via linear interpolation: + if (croppedData->size() < 2) return QPolygonF(); // need at least two points for interpolation + double slope; + if (croppedData->at(1).x()-croppedData->at(0).x() != 0) + slope = (croppedData->at(1).y()-croppedData->at(0).y())/(croppedData->at(1).x()-croppedData->at(0).x()); + else + slope = 0; + (*croppedData)[0].setY(croppedData->at(0).y()+slope*(staticData->first().x()-croppedData->at(0).x())); + (*croppedData)[0].setX(staticData->first().x()); + + // crop upper bound: + if (staticData->last().x() > croppedData->last().x()) // other one must be cropped + qSwap(staticData, croppedData); + int highBound = findIndexAboveX(croppedData, staticData->last().x()); + if (highBound == -1) return QPolygonF(); // key ranges have no overlap + croppedData->remove(highBound+1, croppedData->size()-(highBound+1)); + // set highest point of cropped data to fit exactly key position of last static data + // point via linear interpolation: + if (croppedData->size() < 2) return QPolygonF(); // need at least two points for interpolation + int li = croppedData->size()-1; // last index + if (croppedData->at(li).x()-croppedData->at(li-1).x() != 0) + slope = (croppedData->at(li).y()-croppedData->at(li-1).y())/(croppedData->at(li).x()-croppedData->at(li-1).x()); + else + slope = 0; + (*croppedData)[li].setY(croppedData->at(li-1).y()+slope*(staticData->last().x()-croppedData->at(li-1).x())); + (*croppedData)[li].setX(staticData->last().x()); + } else // mKeyAxis->orientation() == Qt::Vertical + { + // y is key + // similar to "x is key" but switched x,y. Further, lower/upper meaning is inverted compared to x, + // because in pixel coordinates, y increases from top to bottom, not bottom to top like data coordinate. + // if an axis range is reversed, the data point keys will be descending. Reverse them, since following algorithm assumes ascending keys: + if (staticData->first().y() < staticData->last().y()) + { + int size = staticData->size(); + for (int i=0; ifirst().y() < croppedData->last().y()) + { + int size = croppedData->size(); + for (int i=0; ifirst().y() > croppedData->first().y()) // other one must be cropped + qSwap(staticData, croppedData); + int lowBound = findIndexAboveY(croppedData, staticData->first().y()); + if (lowBound == -1) return QPolygonF(); // key ranges have no overlap + croppedData->remove(0, lowBound); + // set lowest point of cropped data to fit exactly key position of first static data + // point via linear interpolation: + if (croppedData->size() < 2) return QPolygonF(); // need at least two points for interpolation + double slope; + if (croppedData->at(1).y()-croppedData->at(0).y() != 0) // avoid division by zero in step plots + slope = (croppedData->at(1).x()-croppedData->at(0).x())/(croppedData->at(1).y()-croppedData->at(0).y()); + else + slope = 0; + (*croppedData)[0].setX(croppedData->at(0).x()+slope*(staticData->first().y()-croppedData->at(0).y())); + (*croppedData)[0].setY(staticData->first().y()); + + // crop upper bound: + if (staticData->last().y() < croppedData->last().y()) // other one must be cropped + qSwap(staticData, croppedData); + int highBound = findIndexBelowY(croppedData, staticData->last().y()); + if (highBound == -1) return QPolygonF(); // key ranges have no overlap + croppedData->remove(highBound+1, croppedData->size()-(highBound+1)); + // set highest point of cropped data to fit exactly key position of last static data + // point via linear interpolation: + if (croppedData->size() < 2) return QPolygonF(); // need at least two points for interpolation + int li = croppedData->size()-1; // last index + if (croppedData->at(li).y()-croppedData->at(li-1).y() != 0) // avoid division by zero in step plots + slope = (croppedData->at(li).x()-croppedData->at(li-1).x())/(croppedData->at(li).y()-croppedData->at(li-1).y()); + else + slope = 0; + (*croppedData)[li].setX(croppedData->at(li-1).x()+slope*(staticData->last().y()-croppedData->at(li-1).y())); + (*croppedData)[li].setY(staticData->last().y()); + } + + // return joined: + for (int i=otherData.size()-1; i>=0; --i) // insert reversed, otherwise the polygon will be twisted + thisData << otherData.at(i); + return QPolygonF(thisData); +} + +/*! \internal + + Finds the smallest index of \a data, whose points x value is just above \a x. Assumes x values in + \a data points are ordered ascending, as is the case when plotting with horizontal key axis. + + Used to calculate the channel fill polygon, see \ref getChannelFillPolygon. +*/ +int QCPGraph::findIndexAboveX(const QVector *data, double x) const +{ + for (int i=data->size()-1; i>=0; --i) + { + if (data->at(i).x() < x) + { + if (isize()-1) + return i+1; + else + return data->size()-1; + } + } + return -1; +} + +/*! \internal + + Finds the highest index of \a data, whose points x value is just below \a x. Assumes x values in + \a data points are ordered ascending, as is the case when plotting with horizontal key axis. + + Used to calculate the channel fill polygon, see \ref getChannelFillPolygon. +*/ +int QCPGraph::findIndexBelowX(const QVector *data, double x) const +{ + for (int i=0; isize(); ++i) + { + if (data->at(i).x() > x) + { + if (i>0) + return i-1; + else + return 0; + } + } + return -1; +} + +/*! \internal + + Finds the smallest index of \a data, whose points y value is just above \a y. Assumes y values in + \a data points are ordered descending, as is the case when plotting with vertical key axis. + + Used to calculate the channel fill polygon, see \ref getChannelFillPolygon. +*/ +int QCPGraph::findIndexAboveY(const QVector *data, double y) const +{ + for (int i=0; isize(); ++i) + { + if (data->at(i).y() < y) + { + if (i>0) + return i-1; + else + return 0; + } + } + return -1; +} + +/*! \internal + + Calculates the (minimum) distance (in pixels) the graph's representation has from the given \a + pixelPoint in pixels. This is used to determine whether the graph was clicked or not, e.g. in + \ref selectTest. + + If either the graph has no data or if the line style is \ref lsNone and the scatter style's shape + is \ref QCPScatterStyle::ssNone (i.e. there is no visual representation of the graph), returns -1.0. +*/ +double QCPGraph::pointDistance(const QPointF &pixelPoint) const +{ + if (mData->isEmpty()) + return -1.0; + if (mLineStyle == lsNone && mScatterStyle.isNone()) + return -1.0; + + // calculate minimum distances to graph representation: + if (mLineStyle == lsNone) + { + // no line displayed, only calculate distance to scatter points: + QVector scatterData; + getScatterPlotData(&scatterData); + if (scatterData.size() > 0) + { + double minDistSqr = std::numeric_limits::max(); + for (int i=0; i lineData; + getPlotData(&lineData, 0); // unlike with getScatterPlotData we get pixel coordinates here + if (lineData.size() > 1) // at least one line segment, compare distance to line segments + { + double minDistSqr = std::numeric_limits::max(); + if (mLineStyle == lsImpulse) + { + // impulse plot differs from other line styles in that the lineData points are only pairwise connected: + for (int i=0; i 0) // only single data point, calculate distance to that point + { + return QVector2D(lineData.at(0)-pixelPoint).length(); + } else // no data available in view to calculate distance to + return -1.0; + } +} + +/*! \internal + + Finds the highest index of \a data, whose points y value is just below \a y. Assumes y values in + \a data points are ordered descending, as is the case when plotting with vertical key axis (since + keys are ordered ascending). + + Used to calculate the channel fill polygon, see \ref getChannelFillPolygon. +*/ +int QCPGraph::findIndexBelowY(const QVector *data, double y) const +{ + for (int i=data->size()-1; i>=0; --i) + { + if (data->at(i).y() > y) + { + if (isize()-1) + return i+1; + else + return data->size()-1; + } + } + return -1; +} + +/* inherits documentation from base class */ +QCPRange QCPGraph::getKeyRange(bool &foundRange, SignDomain inSignDomain) const +{ + // just call the specialized version which takes an additional argument whether error bars + // should also be taken into consideration for range calculation. We set this to true here. + return getKeyRange(foundRange, inSignDomain, true); +} + +/* inherits documentation from base class */ +QCPRange QCPGraph::getValueRange(bool &foundRange, SignDomain inSignDomain) const +{ + // just call the specialized version which takes an additional argument whether error bars + // should also be taken into consideration for range calculation. We set this to true here. + return getValueRange(foundRange, inSignDomain, true); +} + +/*! \overload + + Allows to specify whether the error bars should be included in the range calculation. + + \see getKeyRange(bool &foundRange, SignDomain inSignDomain) +*/ +QCPRange QCPGraph::getKeyRange(bool &foundRange, SignDomain inSignDomain, bool includeErrors) const +{ + QCPRange range; + bool haveLower = false; + bool haveUpper = false; + + double current, currentErrorMinus, currentErrorPlus; + + if (inSignDomain == sdBoth) // range may be anywhere + { + QCPDataMap::const_iterator it = mData->constBegin(); + while (it != mData->constEnd()) + { + if (!qIsNaN(it.value().value)) + { + current = it.value().key; + currentErrorMinus = (includeErrors ? it.value().keyErrorMinus : 0); + currentErrorPlus = (includeErrors ? it.value().keyErrorPlus : 0); + if (current-currentErrorMinus < range.lower || !haveLower) + { + range.lower = current-currentErrorMinus; + haveLower = true; + } + if (current+currentErrorPlus > range.upper || !haveUpper) + { + range.upper = current+currentErrorPlus; + haveUpper = true; + } + } + ++it; + } + } else if (inSignDomain == sdNegative) // range may only be in the negative sign domain + { + QCPDataMap::const_iterator it = mData->constBegin(); + while (it != mData->constEnd()) + { + if (!qIsNaN(it.value().value)) + { + current = it.value().key; + currentErrorMinus = (includeErrors ? it.value().keyErrorMinus : 0); + currentErrorPlus = (includeErrors ? it.value().keyErrorPlus : 0); + if ((current-currentErrorMinus < range.lower || !haveLower) && current-currentErrorMinus < 0) + { + range.lower = current-currentErrorMinus; + haveLower = true; + } + if ((current+currentErrorPlus > range.upper || !haveUpper) && current+currentErrorPlus < 0) + { + range.upper = current+currentErrorPlus; + haveUpper = true; + } + if (includeErrors) // in case point is in valid sign domain but errobars stretch beyond it, we still want to geht that point. + { + if ((current < range.lower || !haveLower) && current < 0) + { + range.lower = current; + haveLower = true; + } + if ((current > range.upper || !haveUpper) && current < 0) + { + range.upper = current; + haveUpper = true; + } + } + } + ++it; + } + } else if (inSignDomain == sdPositive) // range may only be in the positive sign domain + { + QCPDataMap::const_iterator it = mData->constBegin(); + while (it != mData->constEnd()) + { + if (!qIsNaN(it.value().value)) + { + current = it.value().key; + currentErrorMinus = (includeErrors ? it.value().keyErrorMinus : 0); + currentErrorPlus = (includeErrors ? it.value().keyErrorPlus : 0); + if ((current-currentErrorMinus < range.lower || !haveLower) && current-currentErrorMinus > 0) + { + range.lower = current-currentErrorMinus; + haveLower = true; + } + if ((current+currentErrorPlus > range.upper || !haveUpper) && current+currentErrorPlus > 0) + { + range.upper = current+currentErrorPlus; + haveUpper = true; + } + if (includeErrors) // in case point is in valid sign domain but errobars stretch beyond it, we still want to get that point. + { + if ((current < range.lower || !haveLower) && current > 0) + { + range.lower = current; + haveLower = true; + } + if ((current > range.upper || !haveUpper) && current > 0) + { + range.upper = current; + haveUpper = true; + } + } + } + ++it; + } + } + + foundRange = haveLower && haveUpper; + return range; +} + +/*! \overload + + Allows to specify whether the error bars should be included in the range calculation. + + \see getValueRange(bool &foundRange, SignDomain inSignDomain) +*/ +QCPRange QCPGraph::getValueRange(bool &foundRange, SignDomain inSignDomain, bool includeErrors) const +{ + QCPRange range; + bool haveLower = false; + bool haveUpper = false; + + double current, currentErrorMinus, currentErrorPlus; + + if (inSignDomain == sdBoth) // range may be anywhere + { + QCPDataMap::const_iterator it = mData->constBegin(); + while (it != mData->constEnd()) + { + current = it.value().value; + if (!qIsNaN(current)) + { + currentErrorMinus = (includeErrors ? it.value().valueErrorMinus : 0); + currentErrorPlus = (includeErrors ? it.value().valueErrorPlus : 0); + if (current-currentErrorMinus < range.lower || !haveLower) + { + range.lower = current-currentErrorMinus; + haveLower = true; + } + if (current+currentErrorPlus > range.upper || !haveUpper) + { + range.upper = current+currentErrorPlus; + haveUpper = true; + } + } + ++it; + } + } else if (inSignDomain == sdNegative) // range may only be in the negative sign domain + { + QCPDataMap::const_iterator it = mData->constBegin(); + while (it != mData->constEnd()) + { + current = it.value().value; + if (!qIsNaN(current)) + { + currentErrorMinus = (includeErrors ? it.value().valueErrorMinus : 0); + currentErrorPlus = (includeErrors ? it.value().valueErrorPlus : 0); + if ((current-currentErrorMinus < range.lower || !haveLower) && current-currentErrorMinus < 0) + { + range.lower = current-currentErrorMinus; + haveLower = true; + } + if ((current+currentErrorPlus > range.upper || !haveUpper) && current+currentErrorPlus < 0) + { + range.upper = current+currentErrorPlus; + haveUpper = true; + } + if (includeErrors) // in case point is in valid sign domain but errobars stretch beyond it, we still want to get that point. + { + if ((current < range.lower || !haveLower) && current < 0) + { + range.lower = current; + haveLower = true; + } + if ((current > range.upper || !haveUpper) && current < 0) + { + range.upper = current; + haveUpper = true; + } + } + } + ++it; + } + } else if (inSignDomain == sdPositive) // range may only be in the positive sign domain + { + QCPDataMap::const_iterator it = mData->constBegin(); + while (it != mData->constEnd()) + { + current = it.value().value; + if (!qIsNaN(current)) + { + currentErrorMinus = (includeErrors ? it.value().valueErrorMinus : 0); + currentErrorPlus = (includeErrors ? it.value().valueErrorPlus : 0); + if ((current-currentErrorMinus < range.lower || !haveLower) && current-currentErrorMinus > 0) + { + range.lower = current-currentErrorMinus; + haveLower = true; + } + if ((current+currentErrorPlus > range.upper || !haveUpper) && current+currentErrorPlus > 0) + { + range.upper = current+currentErrorPlus; + haveUpper = true; + } + if (includeErrors) // in case point is in valid sign domain but errobars stretch beyond it, we still want to geht that point. + { + if ((current < range.lower || !haveLower) && current > 0) + { + range.lower = current; + haveLower = true; + } + if ((current > range.upper || !haveUpper) && current > 0) + { + range.upper = current; + haveUpper = true; + } + } + } + ++it; + } + } + + foundRange = haveLower && haveUpper; + return range; +} + + +//////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////// QCPCurveData +//////////////////////////////////////////////////////////////////////////////////////////////////// + +/*! \class QCPCurveData + \brief Holds the data of one single data point for QCPCurve. + + The container for storing multiple data points is \ref QCPCurveDataMap. + + The stored data is: + \li \a t: the free parameter of the curve at this curve point (cp. the mathematical vector (x(t), y(t))) + \li \a key: coordinate on the key axis of this curve point + \li \a value: coordinate on the value axis of this curve point + + \see QCPCurveDataMap +*/ + +/*! + Constructs a curve data point with t, key and value set to zero. +*/ +QCPCurveData::QCPCurveData() : + t(0), + key(0), + value(0) +{ +} + +/*! + Constructs a curve data point with the specified \a t, \a key and \a value. +*/ +QCPCurveData::QCPCurveData(double t, double key, double value) : + t(t), + key(key), + value(value) +{ +} + + +//////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////// QCPCurve +//////////////////////////////////////////////////////////////////////////////////////////////////// + +/*! \class QCPCurve + \brief A plottable representing a parametric curve in a plot. + + \image html QCPCurve.png + + Unlike QCPGraph, plottables of this type may have multiple points with the same key coordinate, + so their visual representation can have \a loops. This is realized by introducing a third + coordinate \a t, which defines the order of the points described by the other two coordinates \a + x and \a y. + + To plot data, assign it with the \ref setData or \ref addData functions. + + Gaps in the curve can be created by adding data points with NaN as key and value + (qQNaN() or std::numeric_limits::quiet_NaN()) in between the two data points that shall be + separated. + + \section appearance Changing the appearance + + The appearance of the curve is determined by the pen and the brush (\ref setPen, \ref setBrush). + \section usage Usage + + Like all data representing objects in QCustomPlot, the QCPCurve is a plottable (QCPAbstractPlottable). So + the plottable-interface of QCustomPlot applies (QCustomPlot::plottable, QCustomPlot::addPlottable, QCustomPlot::removePlottable, etc.) + + Usually, you first create an instance and add it to the customPlot: + \snippet documentation/doc-code-snippets/mainwindow.cpp qcpcurve-creation-1 + and then modify the properties of the newly created plottable, e.g.: + \snippet documentation/doc-code-snippets/mainwindow.cpp qcpcurve-creation-2 +*/ + +/*! + Constructs a curve which uses \a keyAxis as its key axis ("x") and \a valueAxis as its value + axis ("y"). \a keyAxis and \a valueAxis must reside in the same QCustomPlot instance and not have + the same orientation. If either of these restrictions is violated, a corresponding message is + printed to the debug output (qDebug), the construction is not aborted, though. + + The constructed QCPCurve can be added to the plot with QCustomPlot::addPlottable, QCustomPlot + then takes ownership of the graph. +*/ +QCPCurve::QCPCurve(QCPAxis *keyAxis, QCPAxis *valueAxis) : + QCPAbstractPlottable(keyAxis, valueAxis) +{ + mData = new QCPCurveDataMap; + mPen.setColor(Qt::blue); + mPen.setStyle(Qt::SolidLine); + mBrush.setColor(Qt::blue); + mBrush.setStyle(Qt::NoBrush); + mSelectedPen = mPen; + mSelectedPen.setWidthF(2.5); + mSelectedPen.setColor(QColor(80, 80, 255)); // lighter than Qt::blue of mPen + mSelectedBrush = mBrush; + + setScatterStyle(QCPScatterStyle()); + setLineStyle(lsLine); +} + +QCPCurve::~QCPCurve() +{ + delete mData; +} + +/*! + Replaces the current data with the provided \a data. + + If \a copy is set to true, data points in \a data will only be copied. if false, the plottable + takes ownership of the passed data and replaces the internal data pointer with it. This is + significantly faster than copying for large datasets. +*/ +void QCPCurve::setData(QCPCurveDataMap *data, bool copy) +{ + if (mData == data) + { + qDebug() << Q_FUNC_INFO << "The data pointer is already in (and owned by) this plottable" << reinterpret_cast(data); + return; + } + if (copy) + { + *mData = *data; + } else + { + delete mData; + mData = data; + } +} + +/*! \overload + + Replaces the current data with the provided points in \a t, \a key and \a value tuples. The + provided vectors should have equal length. Else, the number of added points will be the size of + the smallest vector. +*/ +void QCPCurve::setData(const QVector &t, const QVector &key, const QVector &value) +{ + mData->clear(); + int n = t.size(); + n = qMin(n, key.size()); + n = qMin(n, value.size()); + QCPCurveData newData; + for (int i=0; iinsertMulti(newData.t, newData); + } +} + +/*! \overload + + Replaces the current data with the provided \a key and \a value pairs. The t parameter + of each data point will be set to the integer index of the respective key/value pair. +*/ +void QCPCurve::setData(const QVector &key, const QVector &value) +{ + mData->clear(); + int n = key.size(); + n = qMin(n, value.size()); + QCPCurveData newData; + for (int i=0; iinsertMulti(newData.t, newData); + } +} + +/*! + Sets the visual appearance of single data points in the plot. If set to \ref + QCPScatterStyle::ssNone, no scatter points are drawn (e.g. for line-only plots with appropriate + line style). + + \see QCPScatterStyle, setLineStyle +*/ +void QCPCurve::setScatterStyle(const QCPScatterStyle &style) +{ + mScatterStyle = style; +} + +/*! + Sets how the single data points are connected in the plot or how they are represented visually + apart from the scatter symbol. For scatter-only plots, set \a style to \ref lsNone and \ref + setScatterStyle to the desired scatter style. + + \see setScatterStyle +*/ +void QCPCurve::setLineStyle(QCPCurve::LineStyle style) +{ + mLineStyle = style; +} + +/*! + Adds the provided data points in \a dataMap to the current data. + \see removeData +*/ +void QCPCurve::addData(const QCPCurveDataMap &dataMap) +{ + mData->unite(dataMap); +} + +/*! \overload + Adds the provided single data point in \a data to the current data. + \see removeData +*/ +void QCPCurve::addData(const QCPCurveData &data) +{ + mData->insertMulti(data.t, data); +} + +/*! \overload + Adds the provided single data point as \a t, \a key and \a value tuple to the current data + \see removeData +*/ +void QCPCurve::addData(double t, double key, double value) +{ + QCPCurveData newData; + newData.t = t; + newData.key = key; + newData.value = value; + mData->insertMulti(newData.t, newData); +} + +/*! \overload + + Adds the provided single data point as \a key and \a value pair to the current data The t + parameter of the data point is set to the t of the last data point plus 1. If there is no last + data point, t will be set to 0. + + \see removeData +*/ +void QCPCurve::addData(double key, double value) +{ + QCPCurveData newData; + if (!mData->isEmpty()) + newData.t = (mData->constEnd()-1).key()+1; + else + newData.t = 0; + newData.key = key; + newData.value = value; + mData->insertMulti(newData.t, newData); +} + +/*! \overload + Adds the provided data points as \a t, \a key and \a value tuples to the current data. + \see removeData +*/ +void QCPCurve::addData(const QVector &ts, const QVector &keys, const QVector &values) +{ + int n = ts.size(); + n = qMin(n, keys.size()); + n = qMin(n, values.size()); + QCPCurveData newData; + for (int i=0; iinsertMulti(newData.t, newData); + } +} + +/*! + Removes all data points with curve parameter t smaller than \a t. + \see addData, clearData +*/ +void QCPCurve::removeDataBefore(double t) +{ + QCPCurveDataMap::iterator it = mData->begin(); + while (it != mData->end() && it.key() < t) + it = mData->erase(it); +} + +/*! + Removes all data points with curve parameter t greater than \a t. + \see addData, clearData +*/ +void QCPCurve::removeDataAfter(double t) +{ + if (mData->isEmpty()) return; + QCPCurveDataMap::iterator it = mData->upperBound(t); + while (it != mData->end()) + it = mData->erase(it); +} + +/*! + Removes all data points with curve parameter t between \a fromt and \a tot. if \a fromt is + greater or equal to \a tot, the function does nothing. To remove a single data point with known + t, use \ref removeData(double t). + + \see addData, clearData +*/ +void QCPCurve::removeData(double fromt, double tot) +{ + if (fromt >= tot || mData->isEmpty()) return; + QCPCurveDataMap::iterator it = mData->upperBound(fromt); + QCPCurveDataMap::iterator itEnd = mData->upperBound(tot); + while (it != itEnd) + it = mData->erase(it); +} + +/*! \overload + + Removes a single data point at curve parameter \a t. If the position is not known with absolute + precision, consider using \ref removeData(double fromt, double tot) with a small fuzziness + interval around the suspected position, depeding on the precision with which the curve parameter + is known. + + \see addData, clearData +*/ +void QCPCurve::removeData(double t) +{ + mData->remove(t); +} + +/*! + Removes all data points. + \see removeData, removeDataAfter, removeDataBefore +*/ +void QCPCurve::clearData() +{ + mData->clear(); +} + +/* inherits documentation from base class */ +double QCPCurve::selectTest(const QPointF &pos, bool onlySelectable, QVariant *details) const +{ + Q_UNUSED(details) + if ((onlySelectable && !mSelectable) || mData->isEmpty()) + return -1; + if (!mKeyAxis || !mValueAxis) { qDebug() << Q_FUNC_INFO << "invalid key or value axis"; return -1; } + + if (mKeyAxis.data()->axisRect()->rect().contains(pos.toPoint())) + return pointDistance(pos); + else + return -1; +} + +/* inherits documentation from base class */ +void QCPCurve::draw(QCPPainter *painter) +{ + if (mData->isEmpty()) return; + + // allocate line vector: + QVector *lineData = new QVector; + + // fill with curve data: + getCurveData(lineData); + + // check data validity if flag set: +#ifdef QCUSTOMPLOT_CHECK_DATA + QCPCurveDataMap::const_iterator it; + for (it = mData->constBegin(); it != mData->constEnd(); ++it) + { + if (QCP::isInvalidData(it.value().t) || + QCP::isInvalidData(it.value().key, it.value().value)) + qDebug() << Q_FUNC_INFO << "Data point at" << it.key() << "invalid." << "Plottable name:" << name(); + } +#endif + + // draw curve fill: + if (mainBrush().style() != Qt::NoBrush && mainBrush().color().alpha() != 0) + { + applyFillAntialiasingHint(painter); + painter->setPen(Qt::NoPen); + painter->setBrush(mainBrush()); + painter->drawPolygon(QPolygonF(*lineData)); + } + + // draw curve line: + if (mLineStyle != lsNone && mainPen().style() != Qt::NoPen && mainPen().color().alpha() != 0) + { + applyDefaultAntialiasingHint(painter); + painter->setPen(mainPen()); + painter->setBrush(Qt::NoBrush); + // if drawing solid line and not in PDF, use much faster line drawing instead of polyline: + if (mParentPlot->plottingHints().testFlag(QCP::phFastPolylines) && + painter->pen().style() == Qt::SolidLine && + !painter->modes().testFlag(QCPPainter::pmVectorized) && + !painter->modes().testFlag(QCPPainter::pmNoCaching)) + { + int i = 0; + bool lastIsNan = false; + const int lineDataSize = lineData->size(); + while (i < lineDataSize && (qIsNaN(lineData->at(i).y()) || qIsNaN(lineData->at(i).x()))) // make sure first point is not NaN + ++i; + ++i; // because drawing works in 1 point retrospect + while (i < lineDataSize) + { + if (!qIsNaN(lineData->at(i).y()) && !qIsNaN(lineData->at(i).x())) // NaNs create a gap in the line + { + if (!lastIsNan) + painter->drawLine(lineData->at(i-1), lineData->at(i)); + else + lastIsNan = false; + } else + lastIsNan = true; + ++i; + } + } else + { + int segmentStart = 0; + int i = 0; + const int lineDataSize = lineData->size(); + while (i < lineDataSize) + { + if (qIsNaN(lineData->at(i).y()) || qIsNaN(lineData->at(i).x())) // NaNs create a gap in the line + { + painter->drawPolyline(lineData->constData()+segmentStart, i-segmentStart); // i, because we don't want to include the current NaN point + segmentStart = i+1; + } + ++i; + } + // draw last segment: + painter->drawPolyline(lineData->constData()+segmentStart, lineDataSize-segmentStart); + } + } + + // draw scatters: + if (!mScatterStyle.isNone()) + drawScatterPlot(painter, lineData); + + // free allocated line data: + delete lineData; +} + +/* inherits documentation from base class */ +void QCPCurve::drawLegendIcon(QCPPainter *painter, const QRectF &rect) const +{ + // draw fill: + if (mBrush.style() != Qt::NoBrush) + { + applyFillAntialiasingHint(painter); + painter->fillRect(QRectF(rect.left(), rect.top()+rect.height()/2.0, rect.width(), rect.height()/3.0), mBrush); + } + // draw line vertically centered: + if (mLineStyle != lsNone) + { + applyDefaultAntialiasingHint(painter); + painter->setPen(mPen); + painter->drawLine(QLineF(rect.left(), rect.top()+rect.height()/2.0, rect.right()+5, rect.top()+rect.height()/2.0)); // +5 on x2 else last segment is missing from dashed/dotted pens + } + // draw scatter symbol: + if (!mScatterStyle.isNone()) + { + applyScattersAntialiasingHint(painter); + // scale scatter pixmap if it's too large to fit in legend icon rect: + if (mScatterStyle.shape() == QCPScatterStyle::ssPixmap && (mScatterStyle.pixmap().size().width() > rect.width() || mScatterStyle.pixmap().size().height() > rect.height())) + { + QCPScatterStyle scaledStyle(mScatterStyle); + scaledStyle.setPixmap(scaledStyle.pixmap().scaled(rect.size().toSize(), Qt::KeepAspectRatio, Qt::SmoothTransformation)); + scaledStyle.applyTo(painter, mPen); + scaledStyle.drawShape(painter, QRectF(rect).center()); + } else + { + mScatterStyle.applyTo(painter, mPen); + mScatterStyle.drawShape(painter, QRectF(rect).center()); + } + } +} + +/*! \internal + + Draws scatter symbols at every data point passed in \a pointData. scatter symbols are independent of + the line style and are always drawn if scatter shape is not \ref QCPScatterStyle::ssNone. +*/ +void QCPCurve::drawScatterPlot(QCPPainter *painter, const QVector *pointData) const +{ + // draw scatter point symbols: + applyScattersAntialiasingHint(painter); + mScatterStyle.applyTo(painter, mPen); + for (int i=0; isize(); ++i) + if (!qIsNaN(pointData->at(i).x()) && !qIsNaN(pointData->at(i).y())) + mScatterStyle.drawShape(painter, pointData->at(i)); +} + +/*! \internal + + called by QCPCurve::draw to generate a point vector (in pixel coordinates) which represents the + line of the curve. + + Line segments that aren't visible in the current axis rect are handled in an optimized way. They + are projected onto a rectangle slightly larger than the visible axis rect and simplified + regarding point count. The algorithm makes sure to preserve appearance of lines and fills inside + the visible axis rect by generating new temporary points on the outer rect if necessary. + + Methods that are also involved in the algorithm are: \ref getRegion, \ref getOptimizedPoint, \ref + getOptimizedCornerPoints \ref mayTraverse, \ref getTraverse, \ref getTraverseCornerPoints. +*/ +void QCPCurve::getCurveData(QVector *lineData) const +{ + QCPAxis *keyAxis = mKeyAxis.data(); + QCPAxis *valueAxis = mValueAxis.data(); + if (!keyAxis || !valueAxis) { qDebug() << Q_FUNC_INFO << "invalid key or value axis"; return; } + + // add margins to rect to compensate for stroke width + double strokeMargin = qMax(qreal(1.0), qreal(mainPen().widthF()*0.75)); // stroke radius + 50% safety + if (!mScatterStyle.isNone()) + strokeMargin = qMax(strokeMargin, mScatterStyle.size()); + double rectLeft = keyAxis->pixelToCoord(keyAxis->coordToPixel(keyAxis->range().lower)-strokeMargin*((keyAxis->orientation()==Qt::Vertical)!=keyAxis->rangeReversed()?-1:1)); + double rectRight = keyAxis->pixelToCoord(keyAxis->coordToPixel(keyAxis->range().upper)+strokeMargin*((keyAxis->orientation()==Qt::Vertical)!=keyAxis->rangeReversed()?-1:1)); + double rectBottom = valueAxis->pixelToCoord(valueAxis->coordToPixel(valueAxis->range().lower)+strokeMargin*((valueAxis->orientation()==Qt::Horizontal)!=valueAxis->rangeReversed()?-1:1)); + double rectTop = valueAxis->pixelToCoord(valueAxis->coordToPixel(valueAxis->range().upper)-strokeMargin*((valueAxis->orientation()==Qt::Horizontal)!=valueAxis->rangeReversed()?-1:1)); + int currentRegion; + QCPCurveDataMap::const_iterator it = mData->constBegin(); + QCPCurveDataMap::const_iterator prevIt = mData->constEnd()-1; + int prevRegion = getRegion(prevIt.value().key, prevIt.value().value, rectLeft, rectTop, rectRight, rectBottom); + QVector trailingPoints; // points that must be applied after all other points (are generated only when handling first point to get virtual segment between last and first point right) + while (it != mData->constEnd()) + { + currentRegion = getRegion(it.value().key, it.value().value, rectLeft, rectTop, rectRight, rectBottom); + if (currentRegion != prevRegion) // changed region, possibly need to add some optimized edge points or original points if entering R + { + if (currentRegion != 5) // segment doesn't end in R, so it's a candidate for removal + { + QPointF crossA, crossB; + if (prevRegion == 5) // we're coming from R, so add this point optimized + { + lineData->append(getOptimizedPoint(currentRegion, it.value().key, it.value().value, prevIt.value().key, prevIt.value().value, rectLeft, rectTop, rectRight, rectBottom)); + // in the situations 5->1/7/9/3 the segment may leave R and directly cross through two outer regions. In these cases we need to add an additional corner point + *lineData << getOptimizedCornerPoints(prevRegion, currentRegion, prevIt.value().key, prevIt.value().value, it.value().key, it.value().value, rectLeft, rectTop, rectRight, rectBottom); + } else if (mayTraverse(prevRegion, currentRegion) && + getTraverse(prevIt.value().key, prevIt.value().value, it.value().key, it.value().value, rectLeft, rectTop, rectRight, rectBottom, crossA, crossB)) + { + // add the two cross points optimized if segment crosses R and if segment isn't virtual zeroth segment between last and first curve point: + QVector beforeTraverseCornerPoints, afterTraverseCornerPoints; + getTraverseCornerPoints(prevRegion, currentRegion, rectLeft, rectTop, rectRight, rectBottom, beforeTraverseCornerPoints, afterTraverseCornerPoints); + if (it != mData->constBegin()) + { + *lineData << beforeTraverseCornerPoints; + lineData->append(crossA); + lineData->append(crossB); + *lineData << afterTraverseCornerPoints; + } else + { + lineData->append(crossB); + *lineData << afterTraverseCornerPoints; + trailingPoints << beforeTraverseCornerPoints << crossA ; + } + } else // doesn't cross R, line is just moving around in outside regions, so only need to add optimized point(s) at the boundary corner(s) + { + *lineData << getOptimizedCornerPoints(prevRegion, currentRegion, prevIt.value().key, prevIt.value().value, it.value().key, it.value().value, rectLeft, rectTop, rectRight, rectBottom); + } + } else // segment does end in R, so we add previous point optimized and this point at original position + { + if (it == mData->constBegin()) // it is first point in curve and prevIt is last one. So save optimized point for adding it to the lineData in the end + trailingPoints << getOptimizedPoint(prevRegion, prevIt.value().key, prevIt.value().value, it.value().key, it.value().value, rectLeft, rectTop, rectRight, rectBottom); + else + lineData->append(getOptimizedPoint(prevRegion, prevIt.value().key, prevIt.value().value, it.value().key, it.value().value, rectLeft, rectTop, rectRight, rectBottom)); + lineData->append(coordsToPixels(it.value().key, it.value().value)); + } + } else // region didn't change + { + if (currentRegion == 5) // still in R, keep adding original points + { + lineData->append(coordsToPixels(it.value().key, it.value().value)); + } else // still outside R, no need to add anything + { + // see how this is not doing anything? That's the main optimization... + } + } + prevIt = it; + prevRegion = currentRegion; + ++it; + } + *lineData << trailingPoints; +} + +/*! \internal + + This function is part of the curve optimization algorithm of \ref getCurveData. + + It returns the region of the given point (\a x, \a y) with respect to a rectangle defined by \a + rectLeft, \a rectTop, \a rectRight, and \a rectBottom. + + The regions are enumerated from top to bottom and left to right: + + + + + +
    147
    258
    369
    + + With the rectangle being region 5, and the outer regions extending infinitely outwards. In the + curve optimization algorithm, region 5 is considered to be the visible portion of the plot. +*/ +int QCPCurve::getRegion(double x, double y, double rectLeft, double rectTop, double rectRight, double rectBottom) const +{ + if (x < rectLeft) // region 123 + { + if (y > rectTop) + return 1; + else if (y < rectBottom) + return 3; + else + return 2; + } else if (x > rectRight) // region 789 + { + if (y > rectTop) + return 7; + else if (y < rectBottom) + return 9; + else + return 8; + } else // region 456 + { + if (y > rectTop) + return 4; + else if (y < rectBottom) + return 6; + else + return 5; + } +} + +/*! \internal + + This function is part of the curve optimization algorithm of \ref getCurveData. + + This method is used in case the current segment passes from inside the visible rect (region 5, + see \ref getRegion) to any of the outer regions (\a otherRegion). The current segment is given by + the line connecting (\a key, \a value) with (\a otherKey, \a otherValue). + + It returns the intersection point of the segment with the border of region 5. + + For this function it doesn't matter whether (\a key, \a value) is the point inside region 5 or + whether it's (\a otherKey, \a otherValue), i.e. whether the segment is coming from region 5 or + leaving it. It is important though that \a otherRegion correctly identifies the other region not + equal to 5. +*/ +QPointF QCPCurve::getOptimizedPoint(int otherRegion, double otherKey, double otherValue, double key, double value, double rectLeft, double rectTop, double rectRight, double rectBottom) const +{ + double intersectKey = rectLeft; // initial value is just fail-safe + double intersectValue = rectTop; // initial value is just fail-safe + switch (otherRegion) + { + case 1: // top and left edge + { + intersectValue = rectTop; + intersectKey = otherKey + (key-otherKey)/(value-otherValue)*(intersectValue-otherValue); + if (intersectKey < rectLeft || intersectKey > rectRight) // doesn't intersect, so must intersect other: + { + intersectKey = rectLeft; + intersectValue = otherValue + (value-otherValue)/(key-otherKey)*(intersectKey-otherKey); + } + break; + } + case 2: // left edge + { + intersectKey = rectLeft; + intersectValue = otherValue + (value-otherValue)/(key-otherKey)*(intersectKey-otherKey); + break; + } + case 3: // bottom and left edge + { + intersectValue = rectBottom; + intersectKey = otherKey + (key-otherKey)/(value-otherValue)*(intersectValue-otherValue); + if (intersectKey < rectLeft || intersectKey > rectRight) // doesn't intersect, so must intersect other: + { + intersectKey = rectLeft; + intersectValue = otherValue + (value-otherValue)/(key-otherKey)*(intersectKey-otherKey); + } + break; + } + case 4: // top edge + { + intersectValue = rectTop; + intersectKey = otherKey + (key-otherKey)/(value-otherValue)*(intersectValue-otherValue); + break; + } + case 5: + { + break; // case 5 shouldn't happen for this function but we add it anyway to prevent potential discontinuity in branch table + } + case 6: // bottom edge + { + intersectValue = rectBottom; + intersectKey = otherKey + (key-otherKey)/(value-otherValue)*(intersectValue-otherValue); + break; + } + case 7: // top and right edge + { + intersectValue = rectTop; + intersectKey = otherKey + (key-otherKey)/(value-otherValue)*(intersectValue-otherValue); + if (intersectKey < rectLeft || intersectKey > rectRight) // doesn't intersect, so must intersect other: + { + intersectKey = rectRight; + intersectValue = otherValue + (value-otherValue)/(key-otherKey)*(intersectKey-otherKey); + } + break; + } + case 8: // right edge + { + intersectKey = rectRight; + intersectValue = otherValue + (value-otherValue)/(key-otherKey)*(intersectKey-otherKey); + break; + } + case 9: // bottom and right edge + { + intersectValue = rectBottom; + intersectKey = otherKey + (key-otherKey)/(value-otherValue)*(intersectValue-otherValue); + if (intersectKey < rectLeft || intersectKey > rectRight) // doesn't intersect, so must intersect other: + { + intersectKey = rectRight; + intersectValue = otherValue + (value-otherValue)/(key-otherKey)*(intersectKey-otherKey); + } + break; + } + } + return coordsToPixels(intersectKey, intersectValue); +} + +/*! \internal + + This function is part of the curve optimization algorithm of \ref getCurveData. + + In situations where a single segment skips over multiple regions it might become necessary to add + extra points at the corners of region 5 (see \ref getRegion) such that the optimized segment + doesn't unintentionally cut through the visible area of the axis rect and create plot artifacts. + This method provides these points that must be added, assuming the original segment doesn't + start, end, or traverse region 5. (Corner points where region 5 is traversed are calculated by + \ref getTraverseCornerPoints.) + + For example, consider a segment which directly goes from region 4 to 2 but originally is far out + to the top left such that it doesn't cross region 5. Naively optimizing these points by + projecting them on the top and left borders of region 5 will create a segment that surely crosses + 5, creating a visual artifact in the plot. This method prevents this by providing extra points at + the top left corner, making the optimized curve correctly pass from region 4 to 1 to 2 without + traversing 5. +*/ +QVector QCPCurve::getOptimizedCornerPoints(int prevRegion, int currentRegion, double prevKey, double prevValue, double key, double value, double rectLeft, double rectTop, double rectRight, double rectBottom) const +{ + QVector result; + switch (prevRegion) + { + case 1: + { + switch (currentRegion) + { + case 2: { result << coordsToPixels(rectLeft, rectTop); break; } + case 4: { result << coordsToPixels(rectLeft, rectTop); break; } + case 3: { result << coordsToPixels(rectLeft, rectTop) << coordsToPixels(rectLeft, rectBottom); break; } + case 7: { result << coordsToPixels(rectLeft, rectTop) << coordsToPixels(rectRight, rectTop); break; } + case 6: { result << coordsToPixels(rectLeft, rectTop) << coordsToPixels(rectLeft, rectBottom); result.append(result.last()); break; } + case 8: { result << coordsToPixels(rectLeft, rectTop) << coordsToPixels(rectRight, rectTop); result.append(result.last()); break; } + case 9: { // in this case we need another distinction of cases: segment may pass below or above rect, requiring either bottom right or top left corner points + if ((value-prevValue)/(key-prevKey)*(rectLeft-key)+value < rectBottom) // segment passes below R + { result << coordsToPixels(rectLeft, rectTop) << coordsToPixels(rectLeft, rectBottom); result.append(result.last()); result << coordsToPixels(rectRight, rectBottom); } + else + { result << coordsToPixels(rectLeft, rectTop) << coordsToPixels(rectRight, rectTop); result.append(result.last()); result << coordsToPixels(rectRight, rectBottom); } + break; + } + } + break; + } + case 2: + { + switch (currentRegion) + { + case 1: { result << coordsToPixels(rectLeft, rectTop); break; } + case 3: { result << coordsToPixels(rectLeft, rectBottom); break; } + case 4: { result << coordsToPixels(rectLeft, rectTop); result.append(result.last()); break; } + case 6: { result << coordsToPixels(rectLeft, rectBottom); result.append(result.last()); break; } + case 7: { result << coordsToPixels(rectLeft, rectTop); result.append(result.last()); result << coordsToPixels(rectRight, rectTop); break; } + case 9: { result << coordsToPixels(rectLeft, rectBottom); result.append(result.last()); result << coordsToPixels(rectRight, rectBottom); break; } + } + break; + } + case 3: + { + switch (currentRegion) + { + case 2: { result << coordsToPixels(rectLeft, rectBottom); break; } + case 6: { result << coordsToPixels(rectLeft, rectBottom); break; } + case 1: { result << coordsToPixels(rectLeft, rectBottom) << coordsToPixels(rectLeft, rectTop); break; } + case 9: { result << coordsToPixels(rectLeft, rectBottom) << coordsToPixels(rectRight, rectBottom); break; } + case 4: { result << coordsToPixels(rectLeft, rectBottom) << coordsToPixels(rectLeft, rectTop); result.append(result.last()); break; } + case 8: { result << coordsToPixels(rectLeft, rectBottom) << coordsToPixels(rectRight, rectBottom); result.append(result.last()); break; } + case 7: { // in this case we need another distinction of cases: segment may pass below or above rect, requiring either bottom right or top left corner points + if ((value-prevValue)/(key-prevKey)*(rectRight-key)+value < rectBottom) // segment passes below R + { result << coordsToPixels(rectLeft, rectBottom) << coordsToPixels(rectRight, rectBottom); result.append(result.last()); result << coordsToPixels(rectRight, rectTop); } + else + { result << coordsToPixels(rectLeft, rectBottom) << coordsToPixels(rectLeft, rectTop); result.append(result.last()); result << coordsToPixels(rectRight, rectTop); } + break; + } + } + break; + } + case 4: + { + switch (currentRegion) + { + case 1: { result << coordsToPixels(rectLeft, rectTop); break; } + case 7: { result << coordsToPixels(rectRight, rectTop); break; } + case 2: { result << coordsToPixels(rectLeft, rectTop); result.append(result.last()); break; } + case 8: { result << coordsToPixels(rectRight, rectTop); result.append(result.last()); break; } + case 3: { result << coordsToPixels(rectLeft, rectTop); result.append(result.last()); result << coordsToPixels(rectLeft, rectBottom); break; } + case 9: { result << coordsToPixels(rectRight, rectTop); result.append(result.last()); result << coordsToPixels(rectRight, rectBottom); break; } + } + break; + } + case 5: + { + switch (currentRegion) + { + case 1: { result << coordsToPixels(rectLeft, rectTop); break; } + case 7: { result << coordsToPixels(rectRight, rectTop); break; } + case 9: { result << coordsToPixels(rectRight, rectBottom); break; } + case 3: { result << coordsToPixels(rectLeft, rectBottom); break; } + } + break; + } + case 6: + { + switch (currentRegion) + { + case 3: { result << coordsToPixels(rectLeft, rectBottom); break; } + case 9: { result << coordsToPixels(rectRight, rectBottom); break; } + case 2: { result << coordsToPixels(rectLeft, rectBottom); result.append(result.last()); break; } + case 8: { result << coordsToPixels(rectRight, rectBottom); result.append(result.last()); break; } + case 1: { result << coordsToPixels(rectLeft, rectBottom); result.append(result.last()); result << coordsToPixels(rectLeft, rectTop); break; } + case 7: { result << coordsToPixels(rectRight, rectBottom); result.append(result.last()); result << coordsToPixels(rectRight, rectTop); break; } + } + break; + } + case 7: + { + switch (currentRegion) + { + case 4: { result << coordsToPixels(rectRight, rectTop); break; } + case 8: { result << coordsToPixels(rectRight, rectTop); break; } + case 1: { result << coordsToPixels(rectRight, rectTop) << coordsToPixels(rectLeft, rectTop); break; } + case 9: { result << coordsToPixels(rectRight, rectTop) << coordsToPixels(rectRight, rectBottom); break; } + case 2: { result << coordsToPixels(rectRight, rectTop) << coordsToPixels(rectLeft, rectTop); result.append(result.last()); break; } + case 6: { result << coordsToPixels(rectRight, rectTop) << coordsToPixels(rectRight, rectBottom); result.append(result.last()); break; } + case 3: { // in this case we need another distinction of cases: segment may pass below or above rect, requiring either bottom right or top left corner points + if ((value-prevValue)/(key-prevKey)*(rectRight-key)+value < rectBottom) // segment passes below R + { result << coordsToPixels(rectRight, rectTop) << coordsToPixels(rectRight, rectBottom); result.append(result.last()); result << coordsToPixels(rectLeft, rectBottom); } + else + { result << coordsToPixels(rectRight, rectTop) << coordsToPixels(rectLeft, rectTop); result.append(result.last()); result << coordsToPixels(rectLeft, rectBottom); } + break; + } + } + break; + } + case 8: + { + switch (currentRegion) + { + case 7: { result << coordsToPixels(rectRight, rectTop); break; } + case 9: { result << coordsToPixels(rectRight, rectBottom); break; } + case 4: { result << coordsToPixels(rectRight, rectTop); result.append(result.last()); break; } + case 6: { result << coordsToPixels(rectRight, rectBottom); result.append(result.last()); break; } + case 1: { result << coordsToPixels(rectRight, rectTop); result.append(result.last()); result << coordsToPixels(rectLeft, rectTop); break; } + case 3: { result << coordsToPixels(rectRight, rectBottom); result.append(result.last()); result << coordsToPixels(rectLeft, rectBottom); break; } + } + break; + } + case 9: + { + switch (currentRegion) + { + case 6: { result << coordsToPixels(rectRight, rectBottom); break; } + case 8: { result << coordsToPixels(rectRight, rectBottom); break; } + case 3: { result << coordsToPixels(rectRight, rectBottom) << coordsToPixels(rectLeft, rectBottom); break; } + case 7: { result << coordsToPixels(rectRight, rectBottom) << coordsToPixels(rectRight, rectTop); break; } + case 2: { result << coordsToPixels(rectRight, rectBottom) << coordsToPixels(rectLeft, rectBottom); result.append(result.last()); break; } + case 4: { result << coordsToPixels(rectRight, rectBottom) << coordsToPixels(rectRight, rectTop); result.append(result.last()); break; } + case 1: { // in this case we need another distinction of cases: segment may pass below or above rect, requiring either bottom right or top left corner points + if ((value-prevValue)/(key-prevKey)*(rectLeft-key)+value < rectBottom) // segment passes below R + { result << coordsToPixels(rectRight, rectBottom) << coordsToPixels(rectLeft, rectBottom); result.append(result.last()); result << coordsToPixels(rectLeft, rectTop); } + else + { result << coordsToPixels(rectRight, rectBottom) << coordsToPixels(rectRight, rectTop); result.append(result.last()); result << coordsToPixels(rectLeft, rectTop); } + break; + } + } + break; + } + } + return result; +} + +/*! \internal + + This function is part of the curve optimization algorithm of \ref getCurveData. + + This method returns whether a segment going from \a prevRegion to \a currentRegion (see \ref + getRegion) may traverse the visible region 5. This function assumes that neither \a prevRegion + nor \a currentRegion is 5 itself. + + If this method returns false, the segment for sure doesn't pass region 5. If it returns true, the + segment may or may not pass region 5 and a more fine-grained calculation must be used (\ref + getTraverse). +*/ +bool QCPCurve::mayTraverse(int prevRegion, int currentRegion) const +{ + switch (prevRegion) + { + case 1: + { + switch (currentRegion) + { + case 4: + case 7: + case 2: + case 3: return false; + default: return true; + } + } + case 2: + { + switch (currentRegion) + { + case 1: + case 3: return false; + default: return true; + } + } + case 3: + { + switch (currentRegion) + { + case 1: + case 2: + case 6: + case 9: return false; + default: return true; + } + } + case 4: + { + switch (currentRegion) + { + case 1: + case 7: return false; + default: return true; + } + } + case 5: return false; // should never occur + case 6: + { + switch (currentRegion) + { + case 3: + case 9: return false; + default: return true; + } + } + case 7: + { + switch (currentRegion) + { + case 1: + case 4: + case 8: + case 9: return false; + default: return true; + } + } + case 8: + { + switch (currentRegion) + { + case 7: + case 9: return false; + default: return true; + } + } + case 9: + { + switch (currentRegion) + { + case 3: + case 6: + case 8: + case 7: return false; + default: return true; + } + } + default: return true; + } +} + + +/*! \internal + + This function is part of the curve optimization algorithm of \ref getCurveData. + + This method assumes that the \ref mayTraverse test has returned true, so there is a chance the + segment defined by (\a prevKey, \a prevValue) and (\a key, \a value) goes through the visible + region 5. + + The return value of this method indicates whether the segment actually traverses region 5 or not. + + If the segment traverses 5, the output parameters \a crossA and \a crossB indicate the entry and + exit points of region 5. They will become the optimized points for that segment. +*/ +bool QCPCurve::getTraverse(double prevKey, double prevValue, double key, double value, double rectLeft, double rectTop, double rectRight, double rectBottom, QPointF &crossA, QPointF &crossB) const +{ + QList intersections; // x of QPointF corresponds to key and y to value + if (qFuzzyIsNull(key-prevKey)) // line is parallel to value axis + { + // due to region filter in mayTraverseR(), if line is parallel to value or key axis, R is traversed here + intersections.append(QPointF(key, rectBottom)); // direction will be taken care of at end of method + intersections.append(QPointF(key, rectTop)); + } else if (qFuzzyIsNull(value-prevValue)) // line is parallel to key axis + { + // due to region filter in mayTraverseR(), if line is parallel to value or key axis, R is traversed here + intersections.append(QPointF(rectLeft, value)); // direction will be taken care of at end of method + intersections.append(QPointF(rectRight, value)); + } else // line is skewed + { + double gamma; + double keyPerValue = (key-prevKey)/(value-prevValue); + // check top of rect: + gamma = prevKey + (rectTop-prevValue)*keyPerValue; + if (gamma >= rectLeft && gamma <= rectRight) + intersections.append(QPointF(gamma, rectTop)); + // check bottom of rect: + gamma = prevKey + (rectBottom-prevValue)*keyPerValue; + if (gamma >= rectLeft && gamma <= rectRight) + intersections.append(QPointF(gamma, rectBottom)); + double valuePerKey = 1.0/keyPerValue; + // check left of rect: + gamma = prevValue + (rectLeft-prevKey)*valuePerKey; + if (gamma >= rectBottom && gamma <= rectTop) + intersections.append(QPointF(rectLeft, gamma)); + // check right of rect: + gamma = prevValue + (rectRight-prevKey)*valuePerKey; + if (gamma >= rectBottom && gamma <= rectTop) + intersections.append(QPointF(rectRight, gamma)); + } + + // handle cases where found points isn't exactly 2: + if (intersections.size() > 2) + { + // line probably goes through corner of rect, and we got duplicate points there. single out the point pair with greatest distance in between: + double distSqrMax = 0; + QPointF pv1, pv2; + for (int i=0; i distSqrMax) + { + pv1 = intersections.at(i); + pv2 = intersections.at(k); + distSqrMax = distSqr; + } + } + } + intersections = QList() << pv1 << pv2; + } else if (intersections.size() != 2) + { + // one or even zero points found (shouldn't happen unless line perfectly tangent to corner), no need to draw segment + return false; + } + + // possibly re-sort points so optimized point segment has same direction as original segment: + if ((key-prevKey)*(intersections.at(1).x()-intersections.at(0).x()) + (value-prevValue)*(intersections.at(1).y()-intersections.at(0).y()) < 0) // scalar product of both segments < 0 -> opposite direction + intersections.move(0, 1); + crossA = coordsToPixels(intersections.at(0).x(), intersections.at(0).y()); + crossB = coordsToPixels(intersections.at(1).x(), intersections.at(1).y()); + return true; +} + +/*! \internal + + This function is part of the curve optimization algorithm of \ref getCurveData. + + This method assumes that the \ref getTraverse test has returned true, so the segment definitely + traverses the visible region 5 when going from \a prevRegion to \a currentRegion. + + In certain situations it is not sufficient to merely generate the entry and exit points of the + segment into/out of region 5, as \ref getTraverse provides. It may happen that a single segment, in + addition to traversing region 5, skips another region outside of region 5, which makes it + necessary to add an optimized corner point there (very similar to the job \ref + getOptimizedCornerPoints does for segments that are completely in outside regions and don't + traverse 5). + + As an example, consider a segment going from region 1 to region 6, traversing the lower left + corner of region 5. In this configuration, the segment additionally crosses the border between + region 1 and 2 before entering region 5. This makes it necessary to add an additional point in + the top left corner, before adding the optimized traverse points. So in this case, the output + parameter \a beforeTraverse will contain the top left corner point, and \a afterTraverse will be + empty. + + In some cases, such as when going from region 1 to 9, it may even be necessary to add additional + corner points before and after the traverse. Then both \a beforeTraverse and \a afterTraverse + return the respective corner points. +*/ +void QCPCurve::getTraverseCornerPoints(int prevRegion, int currentRegion, double rectLeft, double rectTop, double rectRight, double rectBottom, QVector &beforeTraverse, QVector &afterTraverse) const +{ + switch (prevRegion) + { + case 1: + { + switch (currentRegion) + { + case 6: { beforeTraverse << coordsToPixels(rectLeft, rectTop); break; } + case 9: { beforeTraverse << coordsToPixels(rectLeft, rectTop); afterTraverse << coordsToPixels(rectRight, rectBottom); break; } + case 8: { beforeTraverse << coordsToPixels(rectLeft, rectTop); break; } + } + break; + } + case 2: + { + switch (currentRegion) + { + case 7: { afterTraverse << coordsToPixels(rectRight, rectTop); break; } + case 9: { afterTraverse << coordsToPixels(rectRight, rectBottom); break; } + } + break; + } + case 3: + { + switch (currentRegion) + { + case 4: { beforeTraverse << coordsToPixels(rectLeft, rectBottom); break; } + case 7: { beforeTraverse << coordsToPixels(rectLeft, rectBottom); afterTraverse << coordsToPixels(rectRight, rectTop); break; } + case 8: { beforeTraverse << coordsToPixels(rectLeft, rectBottom); break; } + } + break; + } + case 4: + { + switch (currentRegion) + { + case 3: { afterTraverse << coordsToPixels(rectLeft, rectBottom); break; } + case 9: { afterTraverse << coordsToPixels(rectRight, rectBottom); break; } + } + break; + } + case 5: { break; } // shouldn't happen because this method only handles full traverses + case 6: + { + switch (currentRegion) + { + case 1: { afterTraverse << coordsToPixels(rectLeft, rectTop); break; } + case 7: { afterTraverse << coordsToPixels(rectRight, rectTop); break; } + } + break; + } + case 7: + { + switch (currentRegion) + { + case 2: { beforeTraverse << coordsToPixels(rectRight, rectTop); break; } + case 3: { beforeTraverse << coordsToPixels(rectRight, rectTop); afterTraverse << coordsToPixels(rectLeft, rectBottom); break; } + case 6: { beforeTraverse << coordsToPixels(rectRight, rectTop); break; } + } + break; + } + case 8: + { + switch (currentRegion) + { + case 1: { afterTraverse << coordsToPixels(rectLeft, rectTop); break; } + case 3: { afterTraverse << coordsToPixels(rectLeft, rectBottom); break; } + } + break; + } + case 9: + { + switch (currentRegion) + { + case 2: { beforeTraverse << coordsToPixels(rectRight, rectBottom); break; } + case 1: { beforeTraverse << coordsToPixels(rectRight, rectBottom); afterTraverse << coordsToPixels(rectLeft, rectTop); break; } + case 4: { beforeTraverse << coordsToPixels(rectRight, rectBottom); break; } + } + break; + } + } +} + +/*! \internal + + Calculates the (minimum) distance (in pixels) the curve's representation has from the given \a + pixelPoint in pixels. This is used to determine whether the curve was clicked or not, e.g. in + \ref selectTest. +*/ +double QCPCurve::pointDistance(const QPointF &pixelPoint) const +{ + if (mData->isEmpty()) + { + qDebug() << Q_FUNC_INFO << "requested point distance on curve" << mName << "without data"; + return 500; + } + if (mData->size() == 1) + { + QPointF dataPoint = coordsToPixels(mData->constBegin().key(), mData->constBegin().value().value); + return QVector2D(dataPoint-pixelPoint).length(); + } + + // calculate minimum distance to line segments: + QVector *lineData = new QVector; + getCurveData(lineData); + double minDistSqr = std::numeric_limits::max(); + for (int i=0; isize()-1; ++i) + { + double currentDistSqr = distSqrToLine(lineData->at(i), lineData->at(i+1), pixelPoint); + if (currentDistSqr < minDistSqr) + minDistSqr = currentDistSqr; + } + delete lineData; + return qSqrt(minDistSqr); +} + +/* inherits documentation from base class */ +QCPRange QCPCurve::getKeyRange(bool &foundRange, SignDomain inSignDomain) const +{ + QCPRange range; + bool haveLower = false; + bool haveUpper = false; + + double current; + + QCPCurveDataMap::const_iterator it = mData->constBegin(); + while (it != mData->constEnd()) + { + current = it.value().key; + if (!qIsNaN(current) && !qIsNaN(it.value().value)) + { + if (inSignDomain == sdBoth || (inSignDomain == sdNegative && current < 0) || (inSignDomain == sdPositive && current > 0)) + { + if (current < range.lower || !haveLower) + { + range.lower = current; + haveLower = true; + } + if (current > range.upper || !haveUpper) + { + range.upper = current; + haveUpper = true; + } + } + } + ++it; + } + + foundRange = haveLower && haveUpper; + return range; +} + +/* inherits documentation from base class */ +QCPRange QCPCurve::getValueRange(bool &foundRange, SignDomain inSignDomain) const +{ + QCPRange range; + bool haveLower = false; + bool haveUpper = false; + + double current; + + QCPCurveDataMap::const_iterator it = mData->constBegin(); + while (it != mData->constEnd()) + { + current = it.value().value; + if (!qIsNaN(current) && !qIsNaN(it.value().key)) + { + if (inSignDomain == sdBoth || (inSignDomain == sdNegative && current < 0) || (inSignDomain == sdPositive && current > 0)) + { + if (current < range.lower || !haveLower) + { + range.lower = current; + haveLower = true; + } + if (current > range.upper || !haveUpper) + { + range.upper = current; + haveUpper = true; + } + } + } + ++it; + } + + foundRange = haveLower && haveUpper; + return range; +} + + +//////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////// QCPBarsGroup +//////////////////////////////////////////////////////////////////////////////////////////////////// + +/*! \class QCPBarsGroup + \brief Groups multiple QCPBars together so they appear side by side + + \image html QCPBarsGroup.png + + When showing multiple QCPBars in one plot which have bars at identical keys, it may be desirable + to have them appearing next to each other at each key. This is what adding the respective QCPBars + plottables to a QCPBarsGroup achieves. (An alternative approach is to stack them on top of each + other, see \ref QCPBars::moveAbove.) + + \section qcpbarsgroup-usage Usage + + To add a QCPBars plottable to the group, create a new group and then add the respective bars + intances: + \snippet documentation/doc-code-snippets/mainwindow.cpp qcpbarsgroup-creation + Alternatively to appending to the group like shown above, you can also set the group on the + QCPBars plottable via \ref QCPBars::setBarsGroup. + + The spacing between the bars can be configured via \ref setSpacingType and \ref setSpacing. The + bars in this group appear in the plot in the order they were appended. To insert a bars plottable + at a certain index position, or to reposition a bars plottable which is already in the group, use + \ref insert. + + To remove specific bars from the group, use either \ref remove or call \ref + QCPBars::setBarsGroup "QCPBars::setBarsGroup(0)" on the respective bars plottable. + + To clear the entire group, call \ref clear, or simply delete the group. + + \section qcpbarsgroup-example Example + + The image above is generated with the following code: + \snippet documentation/doc-image-generator/mainwindow.cpp qcpbarsgroup-example +*/ + +/* start of documentation of inline functions */ + +/*! \fn QList QCPBarsGroup::bars() const + + Returns all bars currently in this group. + + \see bars(int index) +*/ + +/*! \fn int QCPBarsGroup::size() const + + Returns the number of QCPBars plottables that are part of this group. + +*/ + +/*! \fn bool QCPBarsGroup::isEmpty() const + + Returns whether this bars group is empty. + + \see size +*/ + +/*! \fn bool QCPBarsGroup::contains(QCPBars *bars) + + Returns whether the specified \a bars plottable is part of this group. + +*/ + +/* end of documentation of inline functions */ + +/*! + Constructs a new bars group for the specified QCustomPlot instance. +*/ +QCPBarsGroup::QCPBarsGroup(QCustomPlot *parentPlot) : + QObject(parentPlot), + mParentPlot(parentPlot), + mSpacingType(stAbsolute), + mSpacing(4) +{ +} + +QCPBarsGroup::~QCPBarsGroup() +{ + clear(); +} + +/*! + Sets how the spacing between adjacent bars is interpreted. See \ref SpacingType. + + The actual spacing can then be specified with \ref setSpacing. + + \see setSpacing +*/ +void QCPBarsGroup::setSpacingType(SpacingType spacingType) +{ + mSpacingType = spacingType; +} + +/*! + Sets the spacing between adjacent bars. What the number passed as \a spacing actually means, is + defined by the current \ref SpacingType, which can be set with \ref setSpacingType. + + \see setSpacingType +*/ +void QCPBarsGroup::setSpacing(double spacing) +{ + mSpacing = spacing; +} + +/*! + Returns the QCPBars instance with the specified \a index in this group. If no such QCPBars + exists, returns 0. + + \see bars(), size +*/ +QCPBars *QCPBarsGroup::bars(int index) const +{ + if (index >= 0 && index < mBars.size()) + { + return mBars.at(index); + } else + { + qDebug() << Q_FUNC_INFO << "index out of bounds:" << index; + return 0; + } +} + +/*! + Removes all QCPBars plottables from this group. + + \see isEmpty +*/ +void QCPBarsGroup::clear() +{ + foreach (QCPBars *bars, mBars) // since foreach takes a copy, removing bars in the loop is okay + bars->setBarsGroup(0); // removes itself via removeBars +} + +/*! + Adds the specified \a bars plottable to this group. Alternatively, you can also use \ref + QCPBars::setBarsGroup on the \a bars instance. + + \see insert, remove +*/ +void QCPBarsGroup::append(QCPBars *bars) +{ + if (!bars) + { + qDebug() << Q_FUNC_INFO << "bars is 0"; + return; + } + + if (!mBars.contains(bars)) + bars->setBarsGroup(this); + else + qDebug() << Q_FUNC_INFO << "bars plottable is already in this bars group:" << reinterpret_cast(bars); +} + +/*! + Inserts the specified \a bars plottable into this group at the specified index position \a i. + This gives you full control over the ordering of the bars. + + \a bars may already be part of this group. In that case, \a bars is just moved to the new index + position. + + \see append, remove +*/ +void QCPBarsGroup::insert(int i, QCPBars *bars) +{ + if (!bars) + { + qDebug() << Q_FUNC_INFO << "bars is 0"; + return; + } + + // first append to bars list normally: + if (!mBars.contains(bars)) + bars->setBarsGroup(this); + // then move to according position: + mBars.move(mBars.indexOf(bars), qBound(0, i, mBars.size()-1)); +} + +/*! + Removes the specified \a bars plottable from this group. + + \see contains, clear +*/ +void QCPBarsGroup::remove(QCPBars *bars) +{ + if (!bars) + { + qDebug() << Q_FUNC_INFO << "bars is 0"; + return; + } + + if (mBars.contains(bars)) + bars->setBarsGroup(0); + else + qDebug() << Q_FUNC_INFO << "bars plottable is not in this bars group:" << reinterpret_cast(bars); +} + +/*! \internal + + Adds the specified \a bars to the internal mBars list of bars. This method does not change the + barsGroup property on \a bars. + + \see unregisterBars +*/ +void QCPBarsGroup::registerBars(QCPBars *bars) +{ + if (!mBars.contains(bars)) + mBars.append(bars); +} + +/*! \internal + + Removes the specified \a bars from the internal mBars list of bars. This method does not change + the barsGroup property on \a bars. + + \see registerBars +*/ +void QCPBarsGroup::unregisterBars(QCPBars *bars) +{ + mBars.removeOne(bars); +} + +/*! \internal + + Returns the pixel offset in the key dimension the specified \a bars plottable should have at the + given key coordinate \a keyCoord. The offset is relative to the pixel position of the key + coordinate \a keyCoord. +*/ +double QCPBarsGroup::keyPixelOffset(const QCPBars *bars, double keyCoord) +{ + // find list of all base bars in case some mBars are stacked: + QList baseBars; + foreach (const QCPBars *b, mBars) + { + while (b->barBelow()) + b = b->barBelow(); + if (!baseBars.contains(b)) + baseBars.append(b); + } + // find base bar this "bars" is stacked on: + const QCPBars *thisBase = bars; + while (thisBase->barBelow()) + thisBase = thisBase->barBelow(); + + // determine key pixel offset of this base bars considering all other base bars in this barsgroup: + double result = 0; + int index = baseBars.indexOf(thisBase); + if (index >= 0) + { + int startIndex; + double lowerPixelWidth, upperPixelWidth; + if (baseBars.size() % 2 == 1 && index == (baseBars.size()-1)/2) // is center bar (int division on purpose) + { + return result; + } else if (index < (baseBars.size()-1)/2.0) // bar is to the left of center + { + if (baseBars.size() % 2 == 0) // even number of bars + { + startIndex = baseBars.size()/2-1; + result -= getPixelSpacing(baseBars.at(startIndex), keyCoord)*0.5; // half of middle spacing + } else // uneven number of bars + { + startIndex = (baseBars.size()-1)/2-1; + baseBars.at((baseBars.size()-1)/2)->getPixelWidth(keyCoord, lowerPixelWidth, upperPixelWidth); + result -= qAbs(upperPixelWidth-lowerPixelWidth)*0.5; // half of center bar + result -= getPixelSpacing(baseBars.at((baseBars.size()-1)/2), keyCoord); // center bar spacing + } + for (int i=startIndex; i>index; --i) // add widths and spacings of bars in between center and our bars + { + baseBars.at(i)->getPixelWidth(keyCoord, lowerPixelWidth, upperPixelWidth); + result -= qAbs(upperPixelWidth-lowerPixelWidth); + result -= getPixelSpacing(baseBars.at(i), keyCoord); + } + // finally half of our bars width: + baseBars.at(index)->getPixelWidth(keyCoord, lowerPixelWidth, upperPixelWidth); + result -= qAbs(upperPixelWidth-lowerPixelWidth)*0.5; + } else // bar is to the right of center + { + if (baseBars.size() % 2 == 0) // even number of bars + { + startIndex = baseBars.size()/2; + result += getPixelSpacing(baseBars.at(startIndex), keyCoord)*0.5; // half of middle spacing + } else // uneven number of bars + { + startIndex = (baseBars.size()-1)/2+1; + baseBars.at((baseBars.size()-1)/2)->getPixelWidth(keyCoord, lowerPixelWidth, upperPixelWidth); + result += qAbs(upperPixelWidth-lowerPixelWidth)*0.5; // half of center bar + result += getPixelSpacing(baseBars.at((baseBars.size()-1)/2), keyCoord); // center bar spacing + } + for (int i=startIndex; igetPixelWidth(keyCoord, lowerPixelWidth, upperPixelWidth); + result += qAbs(upperPixelWidth-lowerPixelWidth); + result += getPixelSpacing(baseBars.at(i), keyCoord); + } + // finally half of our bars width: + baseBars.at(index)->getPixelWidth(keyCoord, lowerPixelWidth, upperPixelWidth); + result += qAbs(upperPixelWidth-lowerPixelWidth)*0.5; + } + } + return result; +} + +/*! \internal + + Returns the spacing in pixels which is between this \a bars and the following one, both at the + key coordinate \a keyCoord. + + \note Typically the returned value doesn't depend on \a bars or \a keyCoord. \a bars is only + needed to get acces to the key axis transformation and axis rect for the modes \ref + stAxisRectRatio and \ref stPlotCoords. The \a keyCoord is only relevant for spacings given in + \ref stPlotCoords on a logarithmic axis. +*/ +double QCPBarsGroup::getPixelSpacing(const QCPBars *bars, double keyCoord) +{ + switch (mSpacingType) + { + case stAbsolute: + { + return mSpacing; + } + case stAxisRectRatio: + { + if (bars->keyAxis()->orientation() == Qt::Horizontal) + return bars->keyAxis()->axisRect()->width()*mSpacing; + else + return bars->keyAxis()->axisRect()->height()*mSpacing; + } + case stPlotCoords: + { + double keyPixel = bars->keyAxis()->coordToPixel(keyCoord); + return bars->keyAxis()->coordToPixel(keyCoord+mSpacing)-keyPixel; + } + } + return 0; +} + + +//////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////// QCPBarData +//////////////////////////////////////////////////////////////////////////////////////////////////// + +/*! \class QCPBarData + \brief Holds the data of one single data point (one bar) for QCPBars. + + The container for storing multiple data points is \ref QCPBarDataMap. + + The stored data is: + \li \a key: coordinate on the key axis of this bar + \li \a value: height coordinate on the value axis of this bar + + \see QCPBarDataaMap +*/ + +/*! + Constructs a bar data point with key and value set to zero. +*/ +QCPBarData::QCPBarData() : + key(0), + value(0) +{ +} + +/*! + Constructs a bar data point with the specified \a key and \a value. +*/ +QCPBarData::QCPBarData(double key, double value) : + key(key), + value(value) +{ +} + + +//////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////// QCPBars +//////////////////////////////////////////////////////////////////////////////////////////////////// + +/*! \class QCPBars + \brief A plottable representing a bar chart in a plot. + + \image html QCPBars.png + + To plot data, assign it with the \ref setData or \ref addData functions. + + \section appearance Changing the appearance + + The appearance of the bars is determined by the pen and the brush (\ref setPen, \ref setBrush). + The width of the individual bars can be controlled with \ref setWidthType and \ref setWidth. + + Bar charts are stackable. This means, two QCPBars plottables can be placed on top of each other + (see \ref QCPBars::moveAbove). So when two bars are at the same key position, they will appear + stacked. + + If you would like to group multiple QCPBars plottables together so they appear side by side as + shown below, use QCPBarsGroup. + + \image html QCPBarsGroup.png + + \section usage Usage + + Like all data representing objects in QCustomPlot, the QCPBars is a plottable + (QCPAbstractPlottable). So the plottable-interface of QCustomPlot applies + (QCustomPlot::plottable, QCustomPlot::addPlottable, QCustomPlot::removePlottable, etc.) + + Usually, you first create an instance: + \snippet documentation/doc-code-snippets/mainwindow.cpp qcpbars-creation-1 + add it to the customPlot with QCustomPlot::addPlottable: + \snippet documentation/doc-code-snippets/mainwindow.cpp qcpbars-creation-2 + and then modify the properties of the newly created plottable, e.g.: + \snippet documentation/doc-code-snippets/mainwindow.cpp qcpbars-creation-3 +*/ + +/* start of documentation of inline functions */ + +/*! \fn QCPBars *QCPBars::barBelow() const + Returns the bars plottable that is directly below this bars plottable. + If there is no such plottable, returns 0. + + \see barAbove, moveBelow, moveAbove +*/ + +/*! \fn QCPBars *QCPBars::barAbove() const + Returns the bars plottable that is directly above this bars plottable. + If there is no such plottable, returns 0. + + \see barBelow, moveBelow, moveAbove +*/ + +/* end of documentation of inline functions */ + +/*! + Constructs a bar chart which uses \a keyAxis as its key axis ("x") and \a valueAxis as its value + axis ("y"). \a keyAxis and \a valueAxis must reside in the same QCustomPlot instance and not have + the same orientation. If either of these restrictions is violated, a corresponding message is + printed to the debug output (qDebug), the construction is not aborted, though. + + The constructed QCPBars can be added to the plot with QCustomPlot::addPlottable, QCustomPlot + then takes ownership of the bar chart. +*/ +QCPBars::QCPBars(QCPAxis *keyAxis, QCPAxis *valueAxis) : + QCPAbstractPlottable(keyAxis, valueAxis), + mData(new QCPBarDataMap), + mWidth(0.75), + mWidthType(wtPlotCoords), + mBarsGroup(0), + mBaseValue(0) +{ + // modify inherited properties from abstract plottable: + mPen.setColor(Qt::blue); + mPen.setStyle(Qt::SolidLine); + mBrush.setColor(QColor(40, 50, 255, 30)); + mBrush.setStyle(Qt::SolidPattern); + mSelectedPen = mPen; + mSelectedPen.setWidthF(2.5); + mSelectedPen.setColor(QColor(80, 80, 255)); // lighter than Qt::blue of mPen + mSelectedBrush = mBrush; +} + +QCPBars::~QCPBars() +{ + setBarsGroup(0); + if (mBarBelow || mBarAbove) + connectBars(mBarBelow.data(), mBarAbove.data()); // take this bar out of any stacking + delete mData; +} + +/*! + Sets the width of the bars. + + How the number passed as \a width is interpreted (e.g. screen pixels, plot coordinates,...), + depends on the currently set width type, see \ref setWidthType and \ref WidthType. +*/ +void QCPBars::setWidth(double width) +{ + mWidth = width; +} + +/*! + Sets how the width of the bars is defined. See the documentation of \ref WidthType for an + explanation of the possible values for \a widthType. + + The default value is \ref wtPlotCoords. + + \see setWidth +*/ +void QCPBars::setWidthType(QCPBars::WidthType widthType) +{ + mWidthType = widthType; +} + +/*! + Sets to which QCPBarsGroup this QCPBars instance belongs to. Alternatively, you can also use \ref + QCPBarsGroup::append. + + To remove this QCPBars from any group, set \a barsGroup to 0. +*/ +void QCPBars::setBarsGroup(QCPBarsGroup *barsGroup) +{ + // deregister at old group: + if (mBarsGroup) + mBarsGroup->unregisterBars(this); + mBarsGroup = barsGroup; + // register at new group: + if (mBarsGroup) + mBarsGroup->registerBars(this); +} + +/*! + Sets the base value of this bars plottable. + + The base value defines where on the value coordinate the bars start. How far the bars extend from + the base value is given by their individual value data. For example, if the base value is set to + 1, a bar with data value 2 will have its lowest point at value coordinate 1 and highest point at + 3. + + For stacked bars, only the base value of the bottom-most QCPBars has meaning. + + The default base value is 0. +*/ +void QCPBars::setBaseValue(double baseValue) +{ + mBaseValue = baseValue; +} + +/*! + Replaces the current data with the provided \a data. + + If \a copy is set to true, data points in \a data will only be copied. if false, the plottable + takes ownership of the passed data and replaces the internal data pointer with it. This is + significantly faster than copying for large datasets. +*/ +void QCPBars::setData(QCPBarDataMap *data, bool copy) +{ + if (mData == data) + { + qDebug() << Q_FUNC_INFO << "The data pointer is already in (and owned by) this plottable" << reinterpret_cast(data); + return; + } + if (copy) + { + *mData = *data; + } else + { + delete mData; + mData = data; + } +} + +/*! \overload + + Replaces the current data with the provided points in \a key and \a value tuples. The + provided vectors should have equal length. Else, the number of added points will be the size of + the smallest vector. +*/ +void QCPBars::setData(const QVector &key, const QVector &value) +{ + mData->clear(); + int n = key.size(); + n = qMin(n, value.size()); + QCPBarData newData; + for (int i=0; iinsertMulti(newData.key, newData); + } +} + +/*! + Moves this bars plottable below \a bars. In other words, the bars of this plottable will appear + below the bars of \a bars. The move target \a bars must use the same key and value axis as this + plottable. + + Inserting into and removing from existing bar stacking is handled gracefully. If \a bars already + has a bars object below itself, this bars object is inserted between the two. If this bars object + is already between two other bars, the two other bars will be stacked on top of each other after + the operation. + + To remove this bars plottable from any stacking, set \a bars to 0. + + \see moveBelow, barAbove, barBelow +*/ +void QCPBars::moveBelow(QCPBars *bars) +{ + if (bars == this) return; + if (bars && (bars->keyAxis() != mKeyAxis.data() || bars->valueAxis() != mValueAxis.data())) + { + qDebug() << Q_FUNC_INFO << "passed QCPBars* doesn't have same key and value axis as this QCPBars"; + return; + } + // remove from stacking: + connectBars(mBarBelow.data(), mBarAbove.data()); // Note: also works if one (or both) of them is 0 + // if new bar given, insert this bar below it: + if (bars) + { + if (bars->mBarBelow) + connectBars(bars->mBarBelow.data(), this); + connectBars(this, bars); + } +} + +/*! + Moves this bars plottable above \a bars. In other words, the bars of this plottable will appear + above the bars of \a bars. The move target \a bars must use the same key and value axis as this + plottable. + + Inserting into and removing from existing bar stacking is handled gracefully. If \a bars already + has a bars object above itself, this bars object is inserted between the two. If this bars object + is already between two other bars, the two other bars will be stacked on top of each other after + the operation. + + To remove this bars plottable from any stacking, set \a bars to 0. + + \see moveBelow, barBelow, barAbove +*/ +void QCPBars::moveAbove(QCPBars *bars) +{ + if (bars == this) return; + if (bars && (bars->keyAxis() != mKeyAxis.data() || bars->valueAxis() != mValueAxis.data())) + { + qDebug() << Q_FUNC_INFO << "passed QCPBars* doesn't have same key and value axis as this QCPBars"; + return; + } + // remove from stacking: + connectBars(mBarBelow.data(), mBarAbove.data()); // Note: also works if one (or both) of them is 0 + // if new bar given, insert this bar above it: + if (bars) + { + if (bars->mBarAbove) + connectBars(this, bars->mBarAbove.data()); + connectBars(bars, this); + } +} + +/*! + Adds the provided data points in \a dataMap to the current data. + \see removeData +*/ +void QCPBars::addData(const QCPBarDataMap &dataMap) +{ + mData->unite(dataMap); +} + +/*! \overload + Adds the provided single data point in \a data to the current data. + \see removeData +*/ +void QCPBars::addData(const QCPBarData &data) +{ + mData->insertMulti(data.key, data); +} + +/*! \overload + Adds the provided single data point as \a key and \a value tuple to the current data + \see removeData +*/ +void QCPBars::addData(double key, double value) +{ + QCPBarData newData; + newData.key = key; + newData.value = value; + mData->insertMulti(newData.key, newData); +} + +/*! \overload + Adds the provided data points as \a key and \a value tuples to the current data. + \see removeData +*/ +void QCPBars::addData(const QVector &keys, const QVector &values) +{ + int n = keys.size(); + n = qMin(n, values.size()); + QCPBarData newData; + for (int i=0; iinsertMulti(newData.key, newData); + } +} + +/*! + Removes all data points with key smaller than \a key. + \see addData, clearData +*/ +void QCPBars::removeDataBefore(double key) +{ + QCPBarDataMap::iterator it = mData->begin(); + while (it != mData->end() && it.key() < key) + it = mData->erase(it); +} + +/*! + Removes all data points with key greater than \a key. + \see addData, clearData +*/ +void QCPBars::removeDataAfter(double key) +{ + if (mData->isEmpty()) return; + QCPBarDataMap::iterator it = mData->upperBound(key); + while (it != mData->end()) + it = mData->erase(it); +} + +/*! + Removes all data points with key between \a fromKey and \a toKey. if \a fromKey is + greater or equal to \a toKey, the function does nothing. To remove a single data point with known + key, use \ref removeData(double key). + + \see addData, clearData +*/ +void QCPBars::removeData(double fromKey, double toKey) +{ + if (fromKey >= toKey || mData->isEmpty()) return; + QCPBarDataMap::iterator it = mData->upperBound(fromKey); + QCPBarDataMap::iterator itEnd = mData->upperBound(toKey); + while (it != itEnd) + it = mData->erase(it); +} + +/*! \overload + + Removes a single data point at \a key. If the position is not known with absolute precision, + consider using \ref removeData(double fromKey, double toKey) with a small fuzziness interval + around the suspected position, depeding on the precision with which the key is known. + + \see addData, clearData +*/ +void QCPBars::removeData(double key) +{ + mData->remove(key); +} + +/*! + Removes all data points. + \see removeData, removeDataAfter, removeDataBefore +*/ +void QCPBars::clearData() +{ + mData->clear(); +} + +/* inherits documentation from base class */ +double QCPBars::selectTest(const QPointF &pos, bool onlySelectable, QVariant *details) const +{ + Q_UNUSED(details) + if (onlySelectable && !mSelectable) + return -1; + if (!mKeyAxis || !mValueAxis) { qDebug() << Q_FUNC_INFO << "invalid key or value axis"; return -1; } + + if (mKeyAxis.data()->axisRect()->rect().contains(pos.toPoint())) + { + QCPBarDataMap::ConstIterator it; + for (it = mData->constBegin(); it != mData->constEnd(); ++it) + { + if (getBarPolygon(it.value().key, it.value().value).boundingRect().contains(pos)) + return mParentPlot->selectionTolerance()*0.99; + } + } + return -1; +} + +/* inherits documentation from base class */ +void QCPBars::draw(QCPPainter *painter) +{ + if (!mKeyAxis || !mValueAxis) { qDebug() << Q_FUNC_INFO << "invalid key or value axis"; return; } + if (mData->isEmpty()) return; + + QCPBarDataMap::const_iterator it, lower, upperEnd; + getVisibleDataBounds(lower, upperEnd); + for (it = lower; it != upperEnd; ++it) + { + // check data validity if flag set: +#ifdef QCUSTOMPLOT_CHECK_DATA + if (QCP::isInvalidData(it.value().key, it.value().value)) + qDebug() << Q_FUNC_INFO << "Data point at" << it.key() << "of drawn range invalid." << "Plottable name:" << name(); +#endif + QPolygonF barPolygon = getBarPolygon(it.key(), it.value().value); + // draw bar fill: + if (mainBrush().style() != Qt::NoBrush && mainBrush().color().alpha() != 0) + { + applyFillAntialiasingHint(painter); + painter->setPen(Qt::NoPen); + painter->setBrush(mainBrush()); + painter->drawPolygon(barPolygon); + } + // draw bar line: + if (mainPen().style() != Qt::NoPen && mainPen().color().alpha() != 0) + { + applyDefaultAntialiasingHint(painter); + painter->setPen(mainPen()); + painter->setBrush(Qt::NoBrush); + painter->drawPolyline(barPolygon); + } + } +} + +/* inherits documentation from base class */ +void QCPBars::drawLegendIcon(QCPPainter *painter, const QRectF &rect) const +{ + // draw filled rect: + applyDefaultAntialiasingHint(painter); + painter->setBrush(mBrush); + painter->setPen(mPen); + QRectF r = QRectF(0, 0, rect.width()*0.67, rect.height()*0.67); + r.moveCenter(rect.center()); + painter->drawRect(r); +} + +/*! \internal + + called by \ref draw to determine which data (key) range is visible at the current key axis range + setting, so only that needs to be processed. It also takes into account the bar width. + + \a lower returns an iterator to the lowest data point that needs to be taken into account when + plotting. Note that in order to get a clean plot all the way to the edge of the axis rect, \a + lower may still be just outside the visible range. + + \a upperEnd returns an iterator one higher than the highest visible data point. Same as before, \a + upperEnd may also lie just outside of the visible range. + + if the bars plottable contains no data, both \a lower and \a upperEnd point to constEnd. +*/ +void QCPBars::getVisibleDataBounds(QCPBarDataMap::const_iterator &lower, QCPBarDataMap::const_iterator &upperEnd) const +{ + if (!mKeyAxis) { qDebug() << Q_FUNC_INFO << "invalid key axis"; return; } + if (mData->isEmpty()) + { + lower = mData->constEnd(); + upperEnd = mData->constEnd(); + return; + } + + // get visible data range as QMap iterators + lower = mData->lowerBound(mKeyAxis.data()->range().lower); + upperEnd = mData->upperBound(mKeyAxis.data()->range().upper); + double lowerPixelBound = mKeyAxis.data()->coordToPixel(mKeyAxis.data()->range().lower); + double upperPixelBound = mKeyAxis.data()->coordToPixel(mKeyAxis.data()->range().upper); + bool isVisible = false; + // walk left from lbound to find lower bar that actually is completely outside visible pixel range: + QCPBarDataMap::const_iterator it = lower; + while (it != mData->constBegin()) + { + --it; + QRectF barBounds = getBarPolygon(it.value().key, it.value().value).boundingRect(); + if (mKeyAxis.data()->orientation() == Qt::Horizontal) + isVisible = ((!mKeyAxis.data()->rangeReversed() && barBounds.right() >= lowerPixelBound) || (mKeyAxis.data()->rangeReversed() && barBounds.left() <= lowerPixelBound)); + else // keyaxis is vertical + isVisible = ((!mKeyAxis.data()->rangeReversed() && barBounds.top() <= lowerPixelBound) || (mKeyAxis.data()->rangeReversed() && barBounds.bottom() >= lowerPixelBound)); + if (isVisible) + lower = it; + else + break; + } + // walk right from ubound to find upper bar that actually is completely outside visible pixel range: + it = upperEnd; + while (it != mData->constEnd()) + { + QRectF barBounds = getBarPolygon(upperEnd.value().key, upperEnd.value().value).boundingRect(); + if (mKeyAxis.data()->orientation() == Qt::Horizontal) + isVisible = ((!mKeyAxis.data()->rangeReversed() && barBounds.left() <= upperPixelBound) || (mKeyAxis.data()->rangeReversed() && barBounds.right() >= upperPixelBound)); + else // keyaxis is vertical + isVisible = ((!mKeyAxis.data()->rangeReversed() && barBounds.bottom() >= upperPixelBound) || (mKeyAxis.data()->rangeReversed() && barBounds.top() <= upperPixelBound)); + if (isVisible) + upperEnd = it+1; + else + break; + ++it; + } +} + +/*! \internal + + Returns the polygon of a single bar with \a key and \a value. The Polygon is open at the bottom + and shifted according to the bar stacking (see \ref moveAbove) and base value (see \ref + setBaseValue). +*/ +QPolygonF QCPBars::getBarPolygon(double key, double value) const +{ + QCPAxis *keyAxis = mKeyAxis.data(); + QCPAxis *valueAxis = mValueAxis.data(); + if (!keyAxis || !valueAxis) { qDebug() << Q_FUNC_INFO << "invalid key or value axis"; return QPolygonF(); } + + QPolygonF result; + double lowerPixelWidth, upperPixelWidth; + getPixelWidth(key, lowerPixelWidth, upperPixelWidth); + double base = getStackedBaseValue(key, value >= 0); + double basePixel = valueAxis->coordToPixel(base); + double valuePixel = valueAxis->coordToPixel(base+value); + double keyPixel = keyAxis->coordToPixel(key); + if (mBarsGroup) + keyPixel += mBarsGroup->keyPixelOffset(this, key); + if (keyAxis->orientation() == Qt::Horizontal) + { + result << QPointF(keyPixel+lowerPixelWidth, basePixel); + result << QPointF(keyPixel+lowerPixelWidth, valuePixel); + result << QPointF(keyPixel+upperPixelWidth, valuePixel); + result << QPointF(keyPixel+upperPixelWidth, basePixel); + } else + { + result << QPointF(basePixel, keyPixel+lowerPixelWidth); + result << QPointF(valuePixel, keyPixel+lowerPixelWidth); + result << QPointF(valuePixel, keyPixel+upperPixelWidth); + result << QPointF(basePixel, keyPixel+upperPixelWidth); + } + return result; +} + +/*! \internal + + This function is used to determine the width of the bar at coordinate \a key, according to the + specified width (\ref setWidth) and width type (\ref setWidthType). + + The output parameters \a lower and \a upper return the number of pixels the bar extends to lower + and higher keys, relative to the \a key coordinate (so with a non-reversed horizontal axis, \a + lower is negative and \a upper positive). +*/ +void QCPBars::getPixelWidth(double key, double &lower, double &upper) const +{ + switch (mWidthType) + { + case wtAbsolute: + { + upper = mWidth*0.5; + lower = -upper; + if (mKeyAxis && (mKeyAxis.data()->rangeReversed() ^ (mKeyAxis.data()->orientation() == Qt::Vertical))) + qSwap(lower, upper); + break; + } + case wtAxisRectRatio: + { + if (mKeyAxis && mKeyAxis.data()->axisRect()) + { + if (mKeyAxis.data()->orientation() == Qt::Horizontal) + upper = mKeyAxis.data()->axisRect()->width()*mWidth*0.5; + else + upper = mKeyAxis.data()->axisRect()->height()*mWidth*0.5; + lower = -upper; + if (mKeyAxis && (mKeyAxis.data()->rangeReversed() ^ (mKeyAxis.data()->orientation() == Qt::Vertical))) + qSwap(lower, upper); + } else + qDebug() << Q_FUNC_INFO << "No key axis or axis rect defined"; + break; + } + case wtPlotCoords: + { + if (mKeyAxis) + { + double keyPixel = mKeyAxis.data()->coordToPixel(key); + upper = mKeyAxis.data()->coordToPixel(key+mWidth*0.5)-keyPixel; + lower = mKeyAxis.data()->coordToPixel(key-mWidth*0.5)-keyPixel; + // no need to qSwap(lower, higher) when range reversed, because higher/lower are gained by + // coordinate transform which includes range direction + } else + qDebug() << Q_FUNC_INFO << "No key axis defined"; + break; + } + } +} + +/*! \internal + + This function is called to find at which value to start drawing the base of a bar at \a key, when + it is stacked on top of another QCPBars (e.g. with \ref moveAbove). + + positive and negative bars are separated per stack (positive are stacked above baseValue upwards, + negative are stacked below baseValue downwards). This can be indicated with \a positive. So if the + bar for which we need the base value is negative, set \a positive to false. +*/ +double QCPBars::getStackedBaseValue(double key, bool positive) const +{ + if (mBarBelow) + { + double max = 0; // don't use mBaseValue here because only base value of bottom-most bar has meaning in a bar stack + // find bars of mBarBelow that are approximately at key and find largest one: + double epsilon = qAbs(key)*1e-6; // should be safe even when changed to use float at some point + if (key == 0) + epsilon = 1e-6; + QCPBarDataMap::const_iterator it = mBarBelow.data()->mData->lowerBound(key-epsilon); + QCPBarDataMap::const_iterator itEnd = mBarBelow.data()->mData->upperBound(key+epsilon); + while (it != itEnd) + { + if ((positive && it.value().value > max) || + (!positive && it.value().value < max)) + max = it.value().value; + ++it; + } + // recurse down the bar-stack to find the total height: + return max + mBarBelow.data()->getStackedBaseValue(key, positive); + } else + return mBaseValue; +} + +/*! \internal + + Connects \a below and \a above to each other via their mBarAbove/mBarBelow properties. The bar(s) + currently above lower and below upper will become disconnected to lower/upper. + + If lower is zero, upper will be disconnected at the bottom. + If upper is zero, lower will be disconnected at the top. +*/ +void QCPBars::connectBars(QCPBars *lower, QCPBars *upper) +{ + if (!lower && !upper) return; + + if (!lower) // disconnect upper at bottom + { + // disconnect old bar below upper: + if (upper->mBarBelow && upper->mBarBelow.data()->mBarAbove.data() == upper) + upper->mBarBelow.data()->mBarAbove = 0; + upper->mBarBelow = 0; + } else if (!upper) // disconnect lower at top + { + // disconnect old bar above lower: + if (lower->mBarAbove && lower->mBarAbove.data()->mBarBelow.data() == lower) + lower->mBarAbove.data()->mBarBelow = 0; + lower->mBarAbove = 0; + } else // connect lower and upper + { + // disconnect old bar above lower: + if (lower->mBarAbove && lower->mBarAbove.data()->mBarBelow.data() == lower) + lower->mBarAbove.data()->mBarBelow = 0; + // disconnect old bar below upper: + if (upper->mBarBelow && upper->mBarBelow.data()->mBarAbove.data() == upper) + upper->mBarBelow.data()->mBarAbove = 0; + lower->mBarAbove = upper; + upper->mBarBelow = lower; + } +} + +/* inherits documentation from base class */ +QCPRange QCPBars::getKeyRange(bool &foundRange, SignDomain inSignDomain) const +{ + QCPRange range; + bool haveLower = false; + bool haveUpper = false; + + double current; + QCPBarDataMap::const_iterator it = mData->constBegin(); + while (it != mData->constEnd()) + { + current = it.value().key; + if (inSignDomain == sdBoth || (inSignDomain == sdNegative && current < 0) || (inSignDomain == sdPositive && current > 0)) + { + if (current < range.lower || !haveLower) + { + range.lower = current; + haveLower = true; + } + if (current > range.upper || !haveUpper) + { + range.upper = current; + haveUpper = true; + } + } + ++it; + } + // determine exact range of bars by including bar width and barsgroup offset: + if (haveLower && mKeyAxis) + { + double lowerPixelWidth, upperPixelWidth, keyPixel; + getPixelWidth(range.lower, lowerPixelWidth, upperPixelWidth); + keyPixel = mKeyAxis.data()->coordToPixel(range.lower) + lowerPixelWidth; + if (mBarsGroup) + keyPixel += mBarsGroup->keyPixelOffset(this, range.lower); + range.lower = mKeyAxis.data()->pixelToCoord(keyPixel); + } + if (haveUpper && mKeyAxis) + { + double lowerPixelWidth, upperPixelWidth, keyPixel; + getPixelWidth(range.upper, lowerPixelWidth, upperPixelWidth); + keyPixel = mKeyAxis.data()->coordToPixel(range.upper) + upperPixelWidth; + if (mBarsGroup) + keyPixel += mBarsGroup->keyPixelOffset(this, range.upper); + range.upper = mKeyAxis.data()->pixelToCoord(keyPixel); + } + foundRange = haveLower && haveUpper; + return range; +} + +/* inherits documentation from base class */ +QCPRange QCPBars::getValueRange(bool &foundRange, SignDomain inSignDomain) const +{ + QCPRange range; + range.lower = mBaseValue; + range.upper = mBaseValue; + bool haveLower = true; // set to true, because baseValue should always be visible in bar charts + bool haveUpper = true; // set to true, because baseValue should always be visible in bar charts + double current; + + QCPBarDataMap::const_iterator it = mData->constBegin(); + while (it != mData->constEnd()) + { + current = it.value().value + getStackedBaseValue(it.value().key, it.value().value >= 0); + if (inSignDomain == sdBoth || (inSignDomain == sdNegative && current < 0) || (inSignDomain == sdPositive && current > 0)) + { + if (current < range.lower || !haveLower) + { + range.lower = current; + haveLower = true; + } + if (current > range.upper || !haveUpper) + { + range.upper = current; + haveUpper = true; + } + } + ++it; + } + + foundRange = true; // return true because bar charts always have the 0-line visible + return range; +} + + +//////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////// QCPStatisticalBox +//////////////////////////////////////////////////////////////////////////////////////////////////// + +/*! \class QCPStatisticalBox + \brief A plottable representing a single statistical box in a plot. + + \image html QCPStatisticalBox.png + + To plot data, assign it with the individual parameter functions or use \ref setData to set all + parameters at once. The individual functions are: + \li \ref setMinimum + \li \ref setLowerQuartile + \li \ref setMedian + \li \ref setUpperQuartile + \li \ref setMaximum + + Additionally you can define a list of outliers, drawn as scatter datapoints: + \li \ref setOutliers + + \section appearance Changing the appearance + + The appearance of the box itself is controlled via \ref setPen and \ref setBrush. You may change + the width of the box with \ref setWidth in plot coordinates (not pixels). + + Analog functions exist for the minimum/maximum-whiskers: \ref setWhiskerPen, \ref + setWhiskerBarPen, \ref setWhiskerWidth. The whisker width is the width of the bar at the top + (maximum) and bottom (minimum). + + The median indicator line has its own pen, \ref setMedianPen. + + If the whisker backbone pen is changed, make sure to set the capStyle to Qt::FlatCap. Else, the + backbone line might exceed the whisker bars by a few pixels due to the pen cap being not + perfectly flat. + + The Outlier data points are drawn as normal scatter points. Their look can be controlled with + \ref setOutlierStyle + + \section usage Usage + + Like all data representing objects in QCustomPlot, the QCPStatisticalBox is a plottable. + Usually, you first create an instance and add it to the customPlot: + \snippet documentation/doc-code-snippets/mainwindow.cpp qcpstatisticalbox-creation-1 + and then modify the properties of the newly created plottable, e.g.: + \snippet documentation/doc-code-snippets/mainwindow.cpp qcpstatisticalbox-creation-2 +*/ + +/*! + Constructs a statistical box which uses \a keyAxis as its key axis ("x") and \a valueAxis as its + value axis ("y"). \a keyAxis and \a valueAxis must reside in the same QCustomPlot instance and + not have the same orientation. If either of these restrictions is violated, a corresponding + message is printed to the debug output (qDebug), the construction is not aborted, though. + + The constructed statistical box can be added to the plot with QCustomPlot::addPlottable, + QCustomPlot then takes ownership of the statistical box. +*/ +QCPStatisticalBox::QCPStatisticalBox(QCPAxis *keyAxis, QCPAxis *valueAxis) : + QCPAbstractPlottable(keyAxis, valueAxis), + mKey(0), + mMinimum(0), + mLowerQuartile(0), + mMedian(0), + mUpperQuartile(0), + mMaximum(0) +{ + setOutlierStyle(QCPScatterStyle(QCPScatterStyle::ssCircle, Qt::blue, 6)); + setWhiskerWidth(0.2); + setWidth(0.5); + + setPen(QPen(Qt::black)); + setSelectedPen(QPen(Qt::blue, 2.5)); + setMedianPen(QPen(Qt::black, 3, Qt::SolidLine, Qt::FlatCap)); + setWhiskerPen(QPen(Qt::black, 0, Qt::DashLine, Qt::FlatCap)); + setWhiskerBarPen(QPen(Qt::black)); + setBrush(Qt::NoBrush); + setSelectedBrush(Qt::NoBrush); +} + +/*! + Sets the key coordinate of the statistical box. +*/ +void QCPStatisticalBox::setKey(double key) +{ + mKey = key; +} + +/*! + Sets the parameter "minimum" of the statistical box plot. This is the position of the lower + whisker, typically the minimum measurement of the sample that's not considered an outlier. + + \see setMaximum, setWhiskerPen, setWhiskerBarPen, setWhiskerWidth +*/ +void QCPStatisticalBox::setMinimum(double value) +{ + mMinimum = value; +} + +/*! + Sets the parameter "lower Quartile" of the statistical box plot. This is the lower end of the + box. The lower and the upper quartiles are the two statistical quartiles around the median of the + sample, they contain 50% of the sample data. + + \see setUpperQuartile, setPen, setBrush, setWidth +*/ +void QCPStatisticalBox::setLowerQuartile(double value) +{ + mLowerQuartile = value; +} + +/*! + Sets the parameter "median" of the statistical box plot. This is the value of the median mark + inside the quartile box. The median separates the sample data in half (50% of the sample data is + below/above the median). + + \see setMedianPen +*/ +void QCPStatisticalBox::setMedian(double value) +{ + mMedian = value; +} + +/*! + Sets the parameter "upper Quartile" of the statistical box plot. This is the upper end of the + box. The lower and the upper quartiles are the two statistical quartiles around the median of the + sample, they contain 50% of the sample data. + + \see setLowerQuartile, setPen, setBrush, setWidth +*/ +void QCPStatisticalBox::setUpperQuartile(double value) +{ + mUpperQuartile = value; +} + +/*! + Sets the parameter "maximum" of the statistical box plot. This is the position of the upper + whisker, typically the maximum measurement of the sample that's not considered an outlier. + + \see setMinimum, setWhiskerPen, setWhiskerBarPen, setWhiskerWidth +*/ +void QCPStatisticalBox::setMaximum(double value) +{ + mMaximum = value; +} + +/*! + Sets a vector of outlier values that will be drawn as scatters. Any data points in the sample + that are not within the whiskers (\ref setMinimum, \ref setMaximum) should be considered outliers + and displayed as such. + + \see setOutlierStyle +*/ +void QCPStatisticalBox::setOutliers(const QVector &values) +{ + mOutliers = values; +} + +/*! + Sets all parameters of the statistical box plot at once. + + \see setKey, setMinimum, setLowerQuartile, setMedian, setUpperQuartile, setMaximum +*/ +void QCPStatisticalBox::setData(double key, double minimum, double lowerQuartile, double median, double upperQuartile, double maximum) +{ + setKey(key); + setMinimum(minimum); + setLowerQuartile(lowerQuartile); + setMedian(median); + setUpperQuartile(upperQuartile); + setMaximum(maximum); +} + +/*! + Sets the width of the box in key coordinates. + + \see setWhiskerWidth +*/ +void QCPStatisticalBox::setWidth(double width) +{ + mWidth = width; +} + +/*! + Sets the width of the whiskers (\ref setMinimum, \ref setMaximum) in key coordinates. + + \see setWidth +*/ +void QCPStatisticalBox::setWhiskerWidth(double width) +{ + mWhiskerWidth = width; +} + +/*! + Sets the pen used for drawing the whisker backbone (That's the line parallel to the value axis). + + Make sure to set the \a pen capStyle to Qt::FlatCap to prevent the whisker backbone from reaching + a few pixels past the whisker bars, when using a non-zero pen width. + + \see setWhiskerBarPen +*/ +void QCPStatisticalBox::setWhiskerPen(const QPen &pen) +{ + mWhiskerPen = pen; +} + +/*! + Sets the pen used for drawing the whisker bars (Those are the lines parallel to the key axis at + each end of the whisker backbone). + + \see setWhiskerPen +*/ +void QCPStatisticalBox::setWhiskerBarPen(const QPen &pen) +{ + mWhiskerBarPen = pen; +} + +/*! + Sets the pen used for drawing the median indicator line inside the statistical box. +*/ +void QCPStatisticalBox::setMedianPen(const QPen &pen) +{ + mMedianPen = pen; +} + +/*! + Sets the appearance of the outlier data points. + + \see setOutliers +*/ +void QCPStatisticalBox::setOutlierStyle(const QCPScatterStyle &style) +{ + mOutlierStyle = style; +} + +/* inherits documentation from base class */ +void QCPStatisticalBox::clearData() +{ + setOutliers(QVector()); + setKey(0); + setMinimum(0); + setLowerQuartile(0); + setMedian(0); + setUpperQuartile(0); + setMaximum(0); +} + +/* inherits documentation from base class */ +double QCPStatisticalBox::selectTest(const QPointF &pos, bool onlySelectable, QVariant *details) const +{ + Q_UNUSED(details) + if (onlySelectable && !mSelectable) + return -1; + if (!mKeyAxis || !mValueAxis) { qDebug() << Q_FUNC_INFO << "invalid key or value axis"; return -1; } + + if (mKeyAxis.data()->axisRect()->rect().contains(pos.toPoint())) + { + double posKey, posValue; + pixelsToCoords(pos, posKey, posValue); + // quartile box: + QCPRange keyRange(mKey-mWidth*0.5, mKey+mWidth*0.5); + QCPRange valueRange(mLowerQuartile, mUpperQuartile); + if (keyRange.contains(posKey) && valueRange.contains(posValue)) + return mParentPlot->selectionTolerance()*0.99; + + // min/max whiskers: + if (QCPRange(mMinimum, mMaximum).contains(posValue)) + return qAbs(mKeyAxis.data()->coordToPixel(mKey)-mKeyAxis.data()->coordToPixel(posKey)); + } + return -1; +} + +/* inherits documentation from base class */ +void QCPStatisticalBox::draw(QCPPainter *painter) +{ + if (!mKeyAxis || !mValueAxis) { qDebug() << Q_FUNC_INFO << "invalid key or value axis"; return; } + + // check data validity if flag set: +#ifdef QCUSTOMPLOT_CHECK_DATA + if (QCP::isInvalidData(mKey, mMedian) || + QCP::isInvalidData(mLowerQuartile, mUpperQuartile) || + QCP::isInvalidData(mMinimum, mMaximum)) + qDebug() << Q_FUNC_INFO << "Data point at" << mKey << "of drawn range has invalid data." << "Plottable name:" << name(); + for (int i=0; isave(); + painter->setClipRect(quartileBox, Qt::IntersectClip); + drawMedian(painter); + painter->restore(); + + drawWhiskers(painter); + drawOutliers(painter); +} + +/* inherits documentation from base class */ +void QCPStatisticalBox::drawLegendIcon(QCPPainter *painter, const QRectF &rect) const +{ + // draw filled rect: + applyDefaultAntialiasingHint(painter); + painter->setPen(mPen); + painter->setBrush(mBrush); + QRectF r = QRectF(0, 0, rect.width()*0.67, rect.height()*0.67); + r.moveCenter(rect.center()); + painter->drawRect(r); +} + +/*! \internal + + Draws the quartile box. \a box is an output parameter that returns the quartile box (in pixel + coordinates) which is used to set the clip rect of the painter before calling \ref drawMedian (so + the median doesn't draw outside the quartile box). +*/ +void QCPStatisticalBox::drawQuartileBox(QCPPainter *painter, QRectF *quartileBox) const +{ + QRectF box; + box.setTopLeft(coordsToPixels(mKey-mWidth*0.5, mUpperQuartile)); + box.setBottomRight(coordsToPixels(mKey+mWidth*0.5, mLowerQuartile)); + applyDefaultAntialiasingHint(painter); + painter->setPen(mainPen()); + painter->setBrush(mainBrush()); + painter->drawRect(box); + if (quartileBox) + *quartileBox = box; +} + +/*! \internal + + Draws the median line inside the quartile box. +*/ +void QCPStatisticalBox::drawMedian(QCPPainter *painter) const +{ + QLineF medianLine; + medianLine.setP1(coordsToPixels(mKey-mWidth*0.5, mMedian)); + medianLine.setP2(coordsToPixels(mKey+mWidth*0.5, mMedian)); + applyDefaultAntialiasingHint(painter); + painter->setPen(mMedianPen); + painter->drawLine(medianLine); +} + +/*! \internal + + Draws both whisker backbones and bars. +*/ +void QCPStatisticalBox::drawWhiskers(QCPPainter *painter) const +{ + QLineF backboneMin, backboneMax, barMin, barMax; + backboneMax.setPoints(coordsToPixels(mKey, mUpperQuartile), coordsToPixels(mKey, mMaximum)); + backboneMin.setPoints(coordsToPixels(mKey, mLowerQuartile), coordsToPixels(mKey, mMinimum)); + barMax.setPoints(coordsToPixels(mKey-mWhiskerWidth*0.5, mMaximum), coordsToPixels(mKey+mWhiskerWidth*0.5, mMaximum)); + barMin.setPoints(coordsToPixels(mKey-mWhiskerWidth*0.5, mMinimum), coordsToPixels(mKey+mWhiskerWidth*0.5, mMinimum)); + applyErrorBarsAntialiasingHint(painter); + painter->setPen(mWhiskerPen); + painter->drawLine(backboneMin); + painter->drawLine(backboneMax); + painter->setPen(mWhiskerBarPen); + painter->drawLine(barMin); + painter->drawLine(barMax); +} + +/*! \internal + + Draws the outlier scatter points. +*/ +void QCPStatisticalBox::drawOutliers(QCPPainter *painter) const +{ + applyScattersAntialiasingHint(painter); + mOutlierStyle.applyTo(painter, mPen); + for (int i=0; i 0) + return QCPRange(mKey-mWidth*0.5, mKey+mWidth*0.5); + else if (mKey > 0) + return QCPRange(mKey, mKey+mWidth*0.5); + else + { + foundRange = false; + return QCPRange(); + } + } + foundRange = false; + return QCPRange(); +} + +/* inherits documentation from base class */ +QCPRange QCPStatisticalBox::getValueRange(bool &foundRange, SignDomain inSignDomain) const +{ + QVector values; // values that must be considered (i.e. all outliers and the five box-parameters) + values.reserve(mOutliers.size() + 5); + values << mMaximum << mUpperQuartile << mMedian << mLowerQuartile << mMinimum; + values << mOutliers; + // go through values and find the ones in legal range: + bool haveUpper = false; + bool haveLower = false; + double upper = 0; + double lower = 0; + for (int i=0; i 0) || + (inSignDomain == sdBoth)) + { + if (values.at(i) > upper || !haveUpper) + { + upper = values.at(i); + haveUpper = true; + } + if (values.at(i) < lower || !haveLower) + { + lower = values.at(i); + haveLower = true; + } + } + } + // return the bounds if we found some sensible values: + if (haveLower && haveUpper) + { + foundRange = true; + return QCPRange(lower, upper); + } else // might happen if all values are in other sign domain + { + foundRange = false; + return QCPRange(); + } +} + + +//////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////// QCPColorMapData +//////////////////////////////////////////////////////////////////////////////////////////////////// + +/*! \class QCPColorMapData + \brief Holds the two-dimensional data of a QCPColorMap plottable. + + This class is a data storage for \ref QCPColorMap. It holds a two-dimensional array, which \ref + QCPColorMap then displays as a 2D image in the plot, where the array values are represented by a + color, depending on the value. + + The size of the array can be controlled via \ref setSize (or \ref setKeySize, \ref setValueSize). + Which plot coordinates these cells correspond to can be configured with \ref setRange (or \ref + setKeyRange, \ref setValueRange). + + The data cells can be accessed in two ways: They can be directly addressed by an integer index + with \ref setCell. This is the fastest method. Alternatively, they can be addressed by their plot + coordinate with \ref setData. plot coordinate to cell index transformations and vice versa are + provided by the functions \ref coordToCell and \ref cellToCoord. + + This class also buffers the minimum and maximum values that are in the data set, to provide + QCPColorMap::rescaleDataRange with the necessary information quickly. Setting a cell to a value + that is greater than the current maximum increases this maximum to the new value. However, + setting the cell that currently holds the maximum value to a smaller value doesn't decrease the + maximum again, because finding the true new maximum would require going through the entire data + array, which might be time consuming. The same holds for the data minimum. This functionality is + given by \ref recalculateDataBounds, such that you can decide when it is sensible to find the + true current minimum and maximum. The method QCPColorMap::rescaleDataRange offers a convenience + parameter \a recalculateDataBounds which may be set to true to automatically call \ref + recalculateDataBounds internally. +*/ + +/* start of documentation of inline functions */ + +/*! \fn bool QCPColorMapData::isEmpty() const + + Returns whether this instance carries no data. This is equivalent to having a size where at least + one of the dimensions is 0 (see \ref setSize). +*/ + +/* end of documentation of inline functions */ + +/*! + Constructs a new QCPColorMapData instance. The instance has \a keySize cells in the key direction + and \a valueSize cells in the value direction. These cells will be displayed by the \ref QCPColorMap + at the coordinates \a keyRange and \a valueRange. + + \see setSize, setKeySize, setValueSize, setRange, setKeyRange, setValueRange +*/ +QCPColorMapData::QCPColorMapData(int keySize, int valueSize, const QCPRange &keyRange, const QCPRange &valueRange) : + mKeySize(0), + mValueSize(0), + mKeyRange(keyRange), + mValueRange(valueRange), + mIsEmpty(true), + mData(0), + mDataModified(true) +{ + setSize(keySize, valueSize); + fill(0); +} + +QCPColorMapData::~QCPColorMapData() +{ + if (mData) + delete[] mData; +} + +/*! + Constructs a new QCPColorMapData instance copying the data and range of \a other. +*/ +QCPColorMapData::QCPColorMapData(const QCPColorMapData &other) : + mKeySize(0), + mValueSize(0), + mIsEmpty(true), + mData(0), + mDataModified(true) +{ + *this = other; +} + +/*! + Overwrites this color map data instance with the data stored in \a other. +*/ +QCPColorMapData &QCPColorMapData::operator=(const QCPColorMapData &other) +{ + if (&other != this) + { + const int keySize = other.keySize(); + const int valueSize = other.valueSize(); + setSize(keySize, valueSize); + setRange(other.keyRange(), other.valueRange()); + if (!mIsEmpty) + memcpy(mData, other.mData, sizeof(mData[0])*keySize*valueSize); + mDataBounds = other.mDataBounds; + mDataModified = true; + } + return *this; +} + +/* undocumented getter */ +double QCPColorMapData::data(double key, double value) +{ + int keyCell = (key-mKeyRange.lower)/(mKeyRange.upper-mKeyRange.lower)*(mKeySize-1)+0.5; + int valueCell = (value-mValueRange.lower)/(mValueRange.upper-mValueRange.lower)*(mValueSize-1)+0.5; + if (keyCell >= 0 && keyCell < mKeySize && valueCell >= 0 && valueCell < mValueSize) + return mData[valueCell*mKeySize + keyCell]; + else + return 0; +} + +/* undocumented getter */ +double QCPColorMapData::cell(int keyIndex, int valueIndex) +{ + if (keyIndex >= 0 && keyIndex < mKeySize && valueIndex >= 0 && valueIndex < mValueSize) + return mData[valueIndex*mKeySize + keyIndex]; + else + return 0; +} + +/*! + Resizes the data array to have \a keySize cells in the key dimension and \a valueSize cells in + the value dimension. + + The current data is discarded and the map cells are set to 0, unless the map had already the + requested size. + + Setting at least one of \a keySize or \a valueSize to zero frees the internal data array and \ref + isEmpty returns true. + + \see setRange, setKeySize, setValueSize +*/ +void QCPColorMapData::setSize(int keySize, int valueSize) +{ + if (keySize != mKeySize || valueSize != mValueSize) + { + mKeySize = keySize; + mValueSize = valueSize; + if (mData) + delete[] mData; + mIsEmpty = mKeySize == 0 || mValueSize == 0; + if (!mIsEmpty) + { +#ifdef __EXCEPTIONS + try { // 2D arrays get memory intensive fast. So if the allocation fails, at least output debug message +#endif + mData = new double[mKeySize*mValueSize]; +#ifdef __EXCEPTIONS + } catch (...) { mData = 0; } +#endif + if (mData) + fill(0); + else + qDebug() << Q_FUNC_INFO << "out of memory for data dimensions "<< mKeySize << "*" << mValueSize; + } else + mData = 0; + mDataModified = true; + } +} + +/*! + Resizes the data array to have \a keySize cells in the key dimension. + + The current data is discarded and the map cells are set to 0, unless the map had already the + requested size. + + Setting \a keySize to zero frees the internal data array and \ref isEmpty returns true. + + \see setKeyRange, setSize, setValueSize +*/ +void QCPColorMapData::setKeySize(int keySize) +{ + setSize(keySize, mValueSize); +} + +/*! + Resizes the data array to have \a valueSize cells in the value dimension. + + The current data is discarded and the map cells are set to 0, unless the map had already the + requested size. + + Setting \a valueSize to zero frees the internal data array and \ref isEmpty returns true. + + \see setValueRange, setSize, setKeySize +*/ +void QCPColorMapData::setValueSize(int valueSize) +{ + setSize(mKeySize, valueSize); +} + +/*! + Sets the coordinate ranges the data shall be distributed over. This defines the rectangular area + covered by the color map in plot coordinates. + + The outer cells will be centered on the range boundaries given to this function. For example, if + the key size (\ref setKeySize) is 3 and \a keyRange is set to QCPRange(2, 3) there will + be cells centered on the key coordinates 2, 2.5 and 3. + + \see setSize +*/ +void QCPColorMapData::setRange(const QCPRange &keyRange, const QCPRange &valueRange) +{ + setKeyRange(keyRange); + setValueRange(valueRange); +} + +/*! + Sets the coordinate range the data shall be distributed over in the key dimension. Together with + the value range, This defines the rectangular area covered by the color map in plot coordinates. + + The outer cells will be centered on the range boundaries given to this function. For example, if + the key size (\ref setKeySize) is 3 and \a keyRange is set to QCPRange(2, 3) there will + be cells centered on the key coordinates 2, 2.5 and 3. + + \see setRange, setValueRange, setSize +*/ +void QCPColorMapData::setKeyRange(const QCPRange &keyRange) +{ + mKeyRange = keyRange; +} + +/*! + Sets the coordinate range the data shall be distributed over in the value dimension. Together with + the key range, This defines the rectangular area covered by the color map in plot coordinates. + + The outer cells will be centered on the range boundaries given to this function. For example, if + the value size (\ref setValueSize) is 3 and \a valueRange is set to QCPRange(2, 3) there + will be cells centered on the value coordinates 2, 2.5 and 3. + + \see setRange, setKeyRange, setSize +*/ +void QCPColorMapData::setValueRange(const QCPRange &valueRange) +{ + mValueRange = valueRange; +} + +/*! + Sets the data of the cell, which lies at the plot coordinates given by \a key and \a value, to \a + z. + + \note The QCPColorMap always displays the data at equal key/value intervals, even if the key or + value axis is set to a logarithmic scaling. If you want to use QCPColorMap with logarithmic axes, + you shouldn't use the \ref QCPColorMapData::setData method as it uses a linear transformation to + determine the cell index. Rather directly access the cell index with \ref + QCPColorMapData::setCell. + + \see setCell, setRange +*/ +void QCPColorMapData::setData(double key, double value, double z) +{ + int keyCell = (key-mKeyRange.lower)/(mKeyRange.upper-mKeyRange.lower)*(mKeySize-1)+0.5; + int valueCell = (value-mValueRange.lower)/(mValueRange.upper-mValueRange.lower)*(mValueSize-1)+0.5; + if (keyCell >= 0 && keyCell < mKeySize && valueCell >= 0 && valueCell < mValueSize) + { + mData[valueCell*mKeySize + keyCell] = z; + if (z < mDataBounds.lower) + mDataBounds.lower = z; + if (z > mDataBounds.upper) + mDataBounds.upper = z; + mDataModified = true; + } +} + +/*! + Sets the data of the cell with indices \a keyIndex and \a valueIndex to \a z. The indices + enumerate the cells starting from zero, up to the map's size-1 in the respective dimension (see + \ref setSize). + + In the standard plot configuration (horizontal key axis and vertical value axis, both not + range-reversed), the cell with indices (0, 0) is in the bottom left corner and the cell with + indices (keySize-1, valueSize-1) is in the top right corner of the color map. + + \see setData, setSize +*/ +void QCPColorMapData::setCell(int keyIndex, int valueIndex, double z) +{ + if (keyIndex >= 0 && keyIndex < mKeySize && valueIndex >= 0 && valueIndex < mValueSize) + { + mData[valueIndex*mKeySize + keyIndex] = z; + if (z < mDataBounds.lower) + mDataBounds.lower = z; + if (z > mDataBounds.upper) + mDataBounds.upper = z; + mDataModified = true; + } +} + +/*! + Goes through the data and updates the buffered minimum and maximum data values. + + Calling this method is only advised if you are about to call \ref QCPColorMap::rescaleDataRange + and can not guarantee that the cells holding the maximum or minimum data haven't been overwritten + with a smaller or larger value respectively, since the buffered maximum/minimum values have been + updated the last time. Why this is the case is explained in the class description (\ref + QCPColorMapData). + + Note that the method \ref QCPColorMap::rescaleDataRange provides a parameter \a + recalculateDataBounds for convenience. Setting this to true will call this method for you, before + doing the rescale. +*/ +void QCPColorMapData::recalculateDataBounds() +{ + if (mKeySize > 0 && mValueSize > 0) + { + double minHeight = mData[0]; + double maxHeight = mData[0]; + const int dataCount = mValueSize*mKeySize; + for (int i=0; i maxHeight) + maxHeight = mData[i]; + if (mData[i] < minHeight) + minHeight = mData[i]; + } + mDataBounds.lower = minHeight; + mDataBounds.upper = maxHeight; + } +} + +/*! + Frees the internal data memory. + + This is equivalent to calling \ref setSize "setSize(0, 0)". +*/ +void QCPColorMapData::clear() +{ + setSize(0, 0); +} + +/*! + Sets all cells to the value \a z. +*/ +void QCPColorMapData::fill(double z) +{ + const int dataCount = mValueSize*mKeySize; + for (int i=0; i(data); + return; + } + if (copy) + { + *mMapData = *data; + } else + { + delete mMapData; + mMapData = data; + } + mMapImageInvalidated = true; +} + +/*! + Sets the data range of this color map to \a dataRange. The data range defines which data values + are mapped to the color gradient. + + To make the data range span the full range of the data set, use \ref rescaleDataRange. + + \see QCPColorScale::setDataRange +*/ +void QCPColorMap::setDataRange(const QCPRange &dataRange) +{ + if (!QCPRange::validRange(dataRange)) return; + if (mDataRange.lower != dataRange.lower || mDataRange.upper != dataRange.upper) + { + if (mDataScaleType == QCPAxis::stLogarithmic) + mDataRange = dataRange.sanitizedForLogScale(); + else + mDataRange = dataRange.sanitizedForLinScale(); + mMapImageInvalidated = true; + emit dataRangeChanged(mDataRange); + } +} + +/*! + Sets whether the data is correlated with the color gradient linearly or logarithmically. + + \see QCPColorScale::setDataScaleType +*/ +void QCPColorMap::setDataScaleType(QCPAxis::ScaleType scaleType) +{ + if (mDataScaleType != scaleType) + { + mDataScaleType = scaleType; + mMapImageInvalidated = true; + emit dataScaleTypeChanged(mDataScaleType); + if (mDataScaleType == QCPAxis::stLogarithmic) + setDataRange(mDataRange.sanitizedForLogScale()); + } +} + +/*! + Sets the color gradient that is used to represent the data. For more details on how to create an + own gradient or use one of the preset gradients, see \ref QCPColorGradient. + + The colors defined by the gradient will be used to represent data values in the currently set + data range, see \ref setDataRange. Data points that are outside this data range will either be + colored uniformly with the respective gradient boundary color, or the gradient will repeat, + depending on \ref QCPColorGradient::setPeriodic. + + \see QCPColorScale::setGradient +*/ +void QCPColorMap::setGradient(const QCPColorGradient &gradient) +{ + if (mGradient != gradient) + { + mGradient = gradient; + mMapImageInvalidated = true; + emit gradientChanged(mGradient); + } +} + +/*! + Sets whether the color map image shall use bicubic interpolation when displaying the color map + shrinked or expanded, and not at a 1:1 pixel-to-data scale. + + \image html QCPColorMap-interpolate.png "A 10*10 color map, with interpolation and without interpolation enabled" +*/ +void QCPColorMap::setInterpolate(bool enabled) +{ + mInterpolate = enabled; + mMapImageInvalidated = true; // because oversampling factors might need to change +} + +/*! + Sets whether the outer most data rows and columns are clipped to the specified key and value + range (see \ref QCPColorMapData::setKeyRange, \ref QCPColorMapData::setValueRange). + + if \a enabled is set to false, the data points at the border of the color map are drawn with the + same width and height as all other data points. Since the data points are represented by + rectangles of one color centered on the data coordinate, this means that the shown color map + extends by half a data point over the specified key/value range in each direction. + + \image html QCPColorMap-tightboundary.png "A color map, with tight boundary enabled and disabled" +*/ +void QCPColorMap::setTightBoundary(bool enabled) +{ + mTightBoundary = enabled; +} + +/*! + Associates the color scale \a colorScale with this color map. + + This means that both the color scale and the color map synchronize their gradient, data range and + data scale type (\ref setGradient, \ref setDataRange, \ref setDataScaleType). Multiple color maps + can be associated with one single color scale. This causes the color maps to also synchronize + those properties, via the mutual color scale. + + This function causes the color map to adopt the current color gradient, data range and data scale + type of \a colorScale. After this call, you may change these properties at either the color map + or the color scale, and the setting will be applied to both. + + Pass 0 as \a colorScale to disconnect the color scale from this color map again. +*/ +void QCPColorMap::setColorScale(QCPColorScale *colorScale) +{ + if (mColorScale) // unconnect signals from old color scale + { + disconnect(this, SIGNAL(dataRangeChanged(QCPRange)), mColorScale.data(), SLOT(setDataRange(QCPRange))); + disconnect(this, SIGNAL(dataScaleTypeChanged(QCPAxis::ScaleType)), mColorScale.data(), SLOT(setDataScaleType(QCPAxis::ScaleType))); + disconnect(this, SIGNAL(gradientChanged(QCPColorGradient)), mColorScale.data(), SLOT(setGradient(QCPColorGradient))); + disconnect(mColorScale.data(), SIGNAL(dataRangeChanged(QCPRange)), this, SLOT(setDataRange(QCPRange))); + disconnect(mColorScale.data(), SIGNAL(gradientChanged(QCPColorGradient)), this, SLOT(setGradient(QCPColorGradient))); + disconnect(mColorScale.data(), SIGNAL(dataScaleTypeChanged(QCPAxis::ScaleType)), this, SLOT(setDataScaleType(QCPAxis::ScaleType))); + } + mColorScale = colorScale; + if (mColorScale) // connect signals to new color scale + { + setGradient(mColorScale.data()->gradient()); + setDataRange(mColorScale.data()->dataRange()); + setDataScaleType(mColorScale.data()->dataScaleType()); + connect(this, SIGNAL(dataRangeChanged(QCPRange)), mColorScale.data(), SLOT(setDataRange(QCPRange))); + connect(this, SIGNAL(dataScaleTypeChanged(QCPAxis::ScaleType)), mColorScale.data(), SLOT(setDataScaleType(QCPAxis::ScaleType))); + connect(this, SIGNAL(gradientChanged(QCPColorGradient)), mColorScale.data(), SLOT(setGradient(QCPColorGradient))); + connect(mColorScale.data(), SIGNAL(dataRangeChanged(QCPRange)), this, SLOT(setDataRange(QCPRange))); + connect(mColorScale.data(), SIGNAL(gradientChanged(QCPColorGradient)), this, SLOT(setGradient(QCPColorGradient))); + connect(mColorScale.data(), SIGNAL(dataScaleTypeChanged(QCPAxis::ScaleType)), this, SLOT(setDataScaleType(QCPAxis::ScaleType))); + } +} + +/*! + Sets the data range (\ref setDataRange) to span the minimum and maximum values that occur in the + current data set. This corresponds to the \ref rescaleKeyAxis or \ref rescaleValueAxis methods, + only for the third data dimension of the color map. + + The minimum and maximum values of the data set are buffered in the internal QCPColorMapData + instance (\ref data). As data is updated via its \ref QCPColorMapData::setCell or \ref + QCPColorMapData::setData, the buffered minimum and maximum values are updated, too. For + performance reasons, however, they are only updated in an expanding fashion. So the buffered + maximum can only increase and the buffered minimum can only decrease. In consequence, changes to + the data that actually lower the maximum of the data set (by overwriting the cell holding the + current maximum with a smaller value), aren't recognized and the buffered maximum overestimates + the true maximum of the data set. The same happens for the buffered minimum. To recalculate the + true minimum and maximum by explicitly looking at each cell, the method + QCPColorMapData::recalculateDataBounds can be used. For convenience, setting the parameter \a + recalculateDataBounds calls this method before setting the data range to the buffered minimum and + maximum. + + \see setDataRange +*/ +void QCPColorMap::rescaleDataRange(bool recalculateDataBounds) +{ + if (recalculateDataBounds) + mMapData->recalculateDataBounds(); + setDataRange(mMapData->dataBounds()); +} + +/*! + Takes the current appearance of the color map and updates the legend icon, which is used to + represent this color map in the legend (see \ref QCPLegend). + + The \a transformMode specifies whether the rescaling is done by a faster, low quality image + scaling algorithm (Qt::FastTransformation) or by a slower, higher quality algorithm + (Qt::SmoothTransformation). + + The current color map appearance is scaled down to \a thumbSize. Ideally, this should be equal to + the size of the legend icon (see \ref QCPLegend::setIconSize). If it isn't exactly the configured + legend icon size, the thumb will be rescaled during drawing of the legend item. + + \see setDataRange +*/ +void QCPColorMap::updateLegendIcon(Qt::TransformationMode transformMode, const QSize &thumbSize) +{ + if (mMapImage.isNull() && !data()->isEmpty()) + updateMapImage(); // try to update map image if it's null (happens if no draw has happened yet) + + if (!mMapImage.isNull()) // might still be null, e.g. if data is empty, so check here again + { + bool mirrorX = (keyAxis()->orientation() == Qt::Horizontal ? keyAxis() : valueAxis())->rangeReversed(); + bool mirrorY = (valueAxis()->orientation() == Qt::Vertical ? valueAxis() : keyAxis())->rangeReversed(); + mLegendIcon = QPixmap::fromImage(mMapImage.mirrored(mirrorX, mirrorY)).scaled(thumbSize, Qt::KeepAspectRatio, transformMode); + } +} + +/*! + Clears the colormap data by calling \ref QCPColorMapData::clear() on the internal data. This also + resizes the map to 0x0 cells. +*/ +void QCPColorMap::clearData() +{ + mMapData->clear(); +} + +/* inherits documentation from base class */ +double QCPColorMap::selectTest(const QPointF &pos, bool onlySelectable, QVariant *details) const +{ + Q_UNUSED(details) + if (onlySelectable && !mSelectable) + return -1; + if (!mKeyAxis || !mValueAxis) { qDebug() << Q_FUNC_INFO << "invalid key or value axis"; return -1; } + + if (mKeyAxis.data()->axisRect()->rect().contains(pos.toPoint())) + { + double posKey, posValue; + pixelsToCoords(pos, posKey, posValue); + if (mMapData->keyRange().contains(posKey) && mMapData->valueRange().contains(posValue)) + return mParentPlot->selectionTolerance()*0.99; + } + return -1; +} + +/*! \internal + + Updates the internal map image buffer by going through the internal \ref QCPColorMapData and + turning the data values into color pixels with \ref QCPColorGradient::colorize. + + This method is called by \ref QCPColorMap::draw if either the data has been modified or the map image + has been invalidated for a different reason (e.g. a change of the data range with \ref + setDataRange). + + If the map cell count is low, the image created will be oversampled in order to avoid a + QPainter::drawImage bug which makes inner pixel boundaries jitter when stretch-drawing images + without smooth transform enabled. Accordingly, oversampling isn't performed if \ref + setInterpolate is true. +*/ +void QCPColorMap::updateMapImage() +{ + QCPAxis *keyAxis = mKeyAxis.data(); + if (!keyAxis) return; + if (mMapData->isEmpty()) return; + + const int keySize = mMapData->keySize(); + const int valueSize = mMapData->valueSize(); + int keyOversamplingFactor = mInterpolate ? 1 : (int)(1.0+100.0/(double)keySize); // make mMapImage have at least size 100, factor becomes 1 if size > 200 or interpolation is on + int valueOversamplingFactor = mInterpolate ? 1 : (int)(1.0+100.0/(double)valueSize); // make mMapImage have at least size 100, factor becomes 1 if size > 200 or interpolation is on + + // resize mMapImage to correct dimensions including possible oversampling factors, according to key/value axes orientation: + if (keyAxis->orientation() == Qt::Horizontal && (mMapImage.width() != keySize*keyOversamplingFactor || mMapImage.height() != valueSize*valueOversamplingFactor)) + mMapImage = QImage(QSize(keySize*keyOversamplingFactor, valueSize*valueOversamplingFactor), QImage::Format_RGB32); + else if (keyAxis->orientation() == Qt::Vertical && (mMapImage.width() != valueSize*valueOversamplingFactor || mMapImage.height() != keySize*keyOversamplingFactor)) + mMapImage = QImage(QSize(valueSize*valueOversamplingFactor, keySize*keyOversamplingFactor), QImage::Format_RGB32); + + QImage *localMapImage = &mMapImage; // this is the image on which the colorization operates. Either the final mMapImage, or if we need oversampling, mUndersampledMapImage + if (keyOversamplingFactor > 1 || valueOversamplingFactor > 1) + { + // resize undersampled map image to actual key/value cell sizes: + if (keyAxis->orientation() == Qt::Horizontal && (mUndersampledMapImage.width() != keySize || mUndersampledMapImage.height() != valueSize)) + mUndersampledMapImage = QImage(QSize(keySize, valueSize), QImage::Format_RGB32); + else if (keyAxis->orientation() == Qt::Vertical && (mUndersampledMapImage.width() != valueSize || mUndersampledMapImage.height() != keySize)) + mUndersampledMapImage = QImage(QSize(valueSize, keySize), QImage::Format_RGB32); + localMapImage = &mUndersampledMapImage; // make the colorization run on the undersampled image + } else if (!mUndersampledMapImage.isNull()) + mUndersampledMapImage = QImage(); // don't need oversampling mechanism anymore (map size has changed) but mUndersampledMapImage still has nonzero size, free it + + const double *rawData = mMapData->mData; + if (keyAxis->orientation() == Qt::Horizontal) + { + const int lineCount = valueSize; + const int rowCount = keySize; + for (int line=0; line(localMapImage->scanLine(lineCount-1-line)); // invert scanline index because QImage counts scanlines from top, but our vertical index counts from bottom (mathematical coordinate system) + mGradient.colorize(rawData+line*rowCount, mDataRange, pixels, rowCount, 1, mDataScaleType==QCPAxis::stLogarithmic); + } + } else // keyAxis->orientation() == Qt::Vertical + { + const int lineCount = keySize; + const int rowCount = valueSize; + for (int line=0; line(localMapImage->scanLine(lineCount-1-line)); // invert scanline index because QImage counts scanlines from top, but our vertical index counts from bottom (mathematical coordinate system) + mGradient.colorize(rawData+line, mDataRange, pixels, rowCount, lineCount, mDataScaleType==QCPAxis::stLogarithmic); + } + } + + if (keyOversamplingFactor > 1 || valueOversamplingFactor > 1) + { + if (keyAxis->orientation() == Qt::Horizontal) + mMapImage = mUndersampledMapImage.scaled(keySize*keyOversamplingFactor, valueSize*valueOversamplingFactor, Qt::IgnoreAspectRatio, Qt::FastTransformation); + else + mMapImage = mUndersampledMapImage.scaled(valueSize*valueOversamplingFactor, keySize*keyOversamplingFactor, Qt::IgnoreAspectRatio, Qt::FastTransformation); + } + mMapData->mDataModified = false; + mMapImageInvalidated = false; +} + +/* inherits documentation from base class */ +void QCPColorMap::draw(QCPPainter *painter) +{ + if (mMapData->isEmpty()) return; + if (!mKeyAxis || !mValueAxis) return; + applyDefaultAntialiasingHint(painter); + + if (mMapData->mDataModified || mMapImageInvalidated) + updateMapImage(); + + // use buffer if painting vectorized (PDF): + bool useBuffer = painter->modes().testFlag(QCPPainter::pmVectorized); + QCPPainter *localPainter = painter; // will be redirected to paint on mapBuffer if painting vectorized + QRectF mapBufferTarget; // the rect in absolute widget coordinates where the visible map portion/buffer will end up in + QPixmap mapBuffer; + double mapBufferPixelRatio = 3; // factor by which DPI is increased in embedded bitmaps + if (useBuffer) + { + mapBufferTarget = painter->clipRegion().boundingRect(); + mapBuffer = QPixmap((mapBufferTarget.size()*mapBufferPixelRatio).toSize()); + mapBuffer.fill(Qt::transparent); + localPainter = new QCPPainter(&mapBuffer); + localPainter->scale(mapBufferPixelRatio, mapBufferPixelRatio); + localPainter->translate(-mapBufferTarget.topLeft()); + } + + QRectF imageRect = QRectF(coordsToPixels(mMapData->keyRange().lower, mMapData->valueRange().lower), + coordsToPixels(mMapData->keyRange().upper, mMapData->valueRange().upper)).normalized(); + // extend imageRect to contain outer halves/quarters of bordering/cornering pixels (cells are centered on map range boundary): + double halfCellWidth = 0; // in pixels + double halfCellHeight = 0; // in pixels + if (keyAxis()->orientation() == Qt::Horizontal) + { + if (mMapData->keySize() > 1) + halfCellWidth = 0.5*imageRect.width()/(double)(mMapData->keySize()-1); + if (mMapData->valueSize() > 1) + halfCellHeight = 0.5*imageRect.height()/(double)(mMapData->valueSize()-1); + } else // keyAxis orientation is Qt::Vertical + { + if (mMapData->keySize() > 1) + halfCellHeight = 0.5*imageRect.height()/(double)(mMapData->keySize()-1); + if (mMapData->valueSize() > 1) + halfCellWidth = 0.5*imageRect.width()/(double)(mMapData->valueSize()-1); + } + imageRect.adjust(-halfCellWidth, -halfCellHeight, halfCellWidth, halfCellHeight); + bool mirrorX = (keyAxis()->orientation() == Qt::Horizontal ? keyAxis() : valueAxis())->rangeReversed(); + bool mirrorY = (valueAxis()->orientation() == Qt::Vertical ? valueAxis() : keyAxis())->rangeReversed(); + bool smoothBackup = localPainter->renderHints().testFlag(QPainter::SmoothPixmapTransform); + localPainter->setRenderHint(QPainter::SmoothPixmapTransform, mInterpolate); + QRegion clipBackup; + if (mTightBoundary) + { + clipBackup = localPainter->clipRegion(); + QRectF tightClipRect = QRectF(coordsToPixels(mMapData->keyRange().lower, mMapData->valueRange().lower), + coordsToPixels(mMapData->keyRange().upper, mMapData->valueRange().upper)).normalized(); + localPainter->setClipRect(tightClipRect, Qt::IntersectClip); + } + localPainter->drawImage(imageRect, mMapImage.mirrored(mirrorX, mirrorY)); + if (mTightBoundary) + localPainter->setClipRegion(clipBackup); + localPainter->setRenderHint(QPainter::SmoothPixmapTransform, smoothBackup); + + if (useBuffer) // localPainter painted to mapBuffer, so now draw buffer with original painter + { + delete localPainter; + painter->drawPixmap(mapBufferTarget.toRect(), mapBuffer); + } +} + +/* inherits documentation from base class */ +void QCPColorMap::drawLegendIcon(QCPPainter *painter, const QRectF &rect) const +{ + applyDefaultAntialiasingHint(painter); + // draw map thumbnail: + if (!mLegendIcon.isNull()) + { + QPixmap scaledIcon = mLegendIcon.scaled(rect.size().toSize(), Qt::KeepAspectRatio, Qt::FastTransformation); + QRectF iconRect = QRectF(0, 0, scaledIcon.width(), scaledIcon.height()); + iconRect.moveCenter(rect.center()); + painter->drawPixmap(iconRect.topLeft(), scaledIcon); + } + /* + // draw frame: + painter->setBrush(Qt::NoBrush); + painter->setPen(Qt::black); + painter->drawRect(rect.adjusted(1, 1, 0, 0)); + */ +} + +/* inherits documentation from base class */ +QCPRange QCPColorMap::getKeyRange(bool &foundRange, SignDomain inSignDomain) const +{ + foundRange = true; + QCPRange result = mMapData->keyRange(); + result.normalize(); + if (inSignDomain == QCPAbstractPlottable::sdPositive) + { + if (result.lower <= 0 && result.upper > 0) + result.lower = result.upper*1e-3; + else if (result.lower <= 0 && result.upper <= 0) + foundRange = false; + } else if (inSignDomain == QCPAbstractPlottable::sdNegative) + { + if (result.upper >= 0 && result.lower < 0) + result.upper = result.lower*1e-3; + else if (result.upper >= 0 && result.lower >= 0) + foundRange = false; + } + return result; +} + +/* inherits documentation from base class */ +QCPRange QCPColorMap::getValueRange(bool &foundRange, SignDomain inSignDomain) const +{ + foundRange = true; + QCPRange result = mMapData->valueRange(); + result.normalize(); + if (inSignDomain == QCPAbstractPlottable::sdPositive) + { + if (result.lower <= 0 && result.upper > 0) + result.lower = result.upper*1e-3; + else if (result.lower <= 0 && result.upper <= 0) + foundRange = false; + } else if (inSignDomain == QCPAbstractPlottable::sdNegative) + { + if (result.upper >= 0 && result.lower < 0) + result.upper = result.lower*1e-3; + else if (result.upper >= 0 && result.lower >= 0) + foundRange = false; + } + return result; +} + + +//////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////// QCPFinancialData +//////////////////////////////////////////////////////////////////////////////////////////////////// + +/*! \class QCPFinancialData + \brief Holds the data of one single data point for QCPFinancial. + + The container for storing multiple data points is \ref QCPFinancialDataMap. + + The stored data is: + \li \a key: coordinate on the key axis of this data point + \li \a open: The opening value at the data point + \li \a high: The high/maximum value at the data point + \li \a low: The low/minimum value at the data point + \li \a close: The closing value at the data point + + \see QCPFinancialDataMap +*/ + +/*! + Constructs a data point with key and all values set to zero. +*/ +QCPFinancialData::QCPFinancialData() : + key(0), + open(0), + high(0), + low(0), + close(0) +{ +} + +/*! + Constructs a data point with the specified \a key and OHLC values. +*/ +QCPFinancialData::QCPFinancialData(double key, double open, double high, double low, double close) : + key(key), + open(open), + high(high), + low(low), + close(close) +{ +} + + +//////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////// QCPFinancial +//////////////////////////////////////////////////////////////////////////////////////////////////// + +/*! \class QCPFinancial + \brief A plottable representing a financial stock chart + + \image html QCPFinancial.png + + This plottable represents time series data binned to certain intervals, mainly used for stock + charts. The two common representations OHLC (Open-High-Low-Close) bars and Candlesticks can be + set via \ref setChartStyle. + + The data is passed via \ref setData as a set of open/high/low/close values at certain keys + (typically times). This means the data must be already binned appropriately. If data is only + available as a series of values (e.g. \a price against \a time), you can use the static + convenience function \ref timeSeriesToOhlc to generate binned OHLC-data which can then be passed + to \ref setData. + + The width of the OHLC bars/candlesticks can be controlled with \ref setWidth and is given in plot + key coordinates. A typical choice is to set it to (or slightly less than) one bin interval width. + + \section appearance Changing the appearance + + Charts can be either single- or two-colored (\ref setTwoColored). If set to be single-colored, + lines are drawn with the plottable's pen (\ref setPen) and fills with the brush (\ref setBrush). + + If set to two-colored, positive changes of the value during an interval (\a close >= \a open) are + represented with a different pen and brush than negative changes (\a close < \a open). These can + be configured with \ref setPenPositive, \ref setPenNegative, \ref setBrushPositive, and \ref + setBrushNegative. In two-colored mode, the normal plottable pen/brush is ignored. Upon selection + however, the normal selected pen/brush (\ref setSelectedPen, \ref setSelectedBrush) is used, + irrespective of whether the chart is single- or two-colored. + +*/ + +/* start of documentation of inline functions */ + +/*! \fn QCPFinancialDataMap *QCPFinancial::data() const + + Returns a pointer to the internal data storage of type \ref QCPFinancialDataMap. You may use it to + directly manipulate the data, which may be more convenient and faster than using the regular \ref + setData or \ref addData methods, in certain situations. +*/ + +/* end of documentation of inline functions */ + +/*! + Constructs a financial chart which uses \a keyAxis as its key axis ("x") and \a valueAxis as its value + axis ("y"). \a keyAxis and \a valueAxis must reside in the same QCustomPlot instance and not have + the same orientation. If either of these restrictions is violated, a corresponding message is + printed to the debug output (qDebug), the construction is not aborted, though. + + The constructed QCPFinancial can be added to the plot with QCustomPlot::addPlottable, QCustomPlot + then takes ownership of the financial chart. +*/ +QCPFinancial::QCPFinancial(QCPAxis *keyAxis, QCPAxis *valueAxis) : + QCPAbstractPlottable(keyAxis, valueAxis), + mData(0), + mChartStyle(csOhlc), + mWidth(0.5), + mTwoColored(false), + mBrushPositive(QBrush(QColor(210, 210, 255))), + mBrushNegative(QBrush(QColor(255, 210, 210))), + mPenPositive(QPen(QColor(10, 40, 180))), + mPenNegative(QPen(QColor(180, 40, 10))) +{ + mData = new QCPFinancialDataMap; + + setSelectedPen(QPen(QColor(80, 80, 255), 2.5)); + setSelectedBrush(QBrush(QColor(80, 80, 255))); +} + +QCPFinancial::~QCPFinancial() +{ + delete mData; +} + +/*! + Replaces the current data with the provided \a data. + + If \a copy is set to true, data points in \a data will only be copied. if false, the plottable + takes ownership of the passed data and replaces the internal data pointer with it. This is + significantly faster than copying for large datasets. + + Alternatively, you can also access and modify the plottable's data via the \ref data method, which + returns a pointer to the internal \ref QCPFinancialDataMap. + + \see timeSeriesToOhlc +*/ +void QCPFinancial::setData(QCPFinancialDataMap *data, bool copy) +{ + if (mData == data) + { + qDebug() << Q_FUNC_INFO << "The data pointer is already in (and owned by) this plottable" << reinterpret_cast(data); + return; + } + if (copy) + { + *mData = *data; + } else + { + delete mData; + mData = data; + } +} + +/*! \overload + + Replaces the current data with the provided open/high/low/close data. The provided vectors should + have equal length. Else, the number of added points will be the size of the smallest vector. + + \see timeSeriesToOhlc +*/ +void QCPFinancial::setData(const QVector &key, const QVector &open, const QVector &high, const QVector &low, const QVector &close) +{ + mData->clear(); + int n = key.size(); + n = qMin(n, open.size()); + n = qMin(n, high.size()); + n = qMin(n, low.size()); + n = qMin(n, close.size()); + for (int i=0; iinsertMulti(key[i], QCPFinancialData(key[i], open[i], high[i], low[i], close[i])); + } +} + +/*! + Sets which representation style shall be used to display the OHLC data. +*/ +void QCPFinancial::setChartStyle(QCPFinancial::ChartStyle style) +{ + mChartStyle = style; +} + +/*! + Sets the width of the individual bars/candlesticks to \a width in plot key coordinates. + + A typical choice is to set it to (or slightly less than) one bin interval width. +*/ +void QCPFinancial::setWidth(double width) +{ + mWidth = width; +} + +/*! + Sets whether this chart shall contrast positive from negative trends per data point by using two + separate colors to draw the respective bars/candlesticks. + + If \a twoColored is false, the normal plottable's pen and brush are used (\ref setPen, \ref + setBrush). + + \see setPenPositive, setPenNegative, setBrushPositive, setBrushNegative +*/ +void QCPFinancial::setTwoColored(bool twoColored) +{ + mTwoColored = twoColored; +} + +/*! + If \ref setTwoColored is set to true, this function controls the brush that is used to draw fills + of data points with a positive trend (i.e. bars/candlesticks with close >= open). + + If \a twoColored is false, the normal plottable's pen and brush are used (\ref setPen, \ref + setBrush). + + \see setBrushNegative, setPenPositive, setPenNegative +*/ +void QCPFinancial::setBrushPositive(const QBrush &brush) +{ + mBrushPositive = brush; +} + +/*! + If \ref setTwoColored is set to true, this function controls the brush that is used to draw fills + of data points with a negative trend (i.e. bars/candlesticks with close < open). + + If \a twoColored is false, the normal plottable's pen and brush are used (\ref setPen, \ref + setBrush). + + \see setBrushPositive, setPenNegative, setPenPositive +*/ +void QCPFinancial::setBrushNegative(const QBrush &brush) +{ + mBrushNegative = brush; +} + +/*! + If \ref setTwoColored is set to true, this function controls the pen that is used to draw + outlines of data points with a positive trend (i.e. bars/candlesticks with close >= open). + + If \a twoColored is false, the normal plottable's pen and brush are used (\ref setPen, \ref + setBrush). + + \see setPenNegative, setBrushPositive, setBrushNegative +*/ +void QCPFinancial::setPenPositive(const QPen &pen) +{ + mPenPositive = pen; +} + +/*! + If \ref setTwoColored is set to true, this function controls the pen that is used to draw + outlines of data points with a negative trend (i.e. bars/candlesticks with close < open). + + If \a twoColored is false, the normal plottable's pen and brush are used (\ref setPen, \ref + setBrush). + + \see setPenPositive, setBrushNegative, setBrushPositive +*/ +void QCPFinancial::setPenNegative(const QPen &pen) +{ + mPenNegative = pen; +} + +/*! + Adds the provided data points in \a dataMap to the current data. + + Alternatively, you can also access and modify the data via the \ref data method, which returns a + pointer to the internal \ref QCPFinancialDataMap. + + \see removeData +*/ +void QCPFinancial::addData(const QCPFinancialDataMap &dataMap) +{ + mData->unite(dataMap); +} + +/*! \overload + + Adds the provided single data point in \a data to the current data. + + Alternatively, you can also access and modify the data via the \ref data method, which returns a + pointer to the internal \ref QCPFinancialData. + + \see removeData +*/ +void QCPFinancial::addData(const QCPFinancialData &data) +{ + mData->insertMulti(data.key, data); +} + +/*! \overload + + Adds the provided single data point given by \a key, \a open, \a high, \a low, and \a close to + the current data. + + Alternatively, you can also access and modify the data via the \ref data method, which returns a + pointer to the internal \ref QCPFinancialData. + + \see removeData +*/ +void QCPFinancial::addData(double key, double open, double high, double low, double close) +{ + mData->insertMulti(key, QCPFinancialData(key, open, high, low, close)); +} + +/*! \overload + + Adds the provided open/high/low/close data to the current data. + + Alternatively, you can also access and modify the data via the \ref data method, which returns a + pointer to the internal \ref QCPFinancialData. + + \see removeData +*/ +void QCPFinancial::addData(const QVector &key, const QVector &open, const QVector &high, const QVector &low, const QVector &close) +{ + int n = key.size(); + n = qMin(n, open.size()); + n = qMin(n, high.size()); + n = qMin(n, low.size()); + n = qMin(n, close.size()); + for (int i=0; iinsertMulti(key[i], QCPFinancialData(key[i], open[i], high[i], low[i], close[i])); + } +} + +/*! + Removes all data points with keys smaller than \a key. + + \see addData, clearData +*/ +void QCPFinancial::removeDataBefore(double key) +{ + QCPFinancialDataMap::iterator it = mData->begin(); + while (it != mData->end() && it.key() < key) + it = mData->erase(it); +} + +/*! + Removes all data points with keys greater than \a key. + + \see addData, clearData +*/ +void QCPFinancial::removeDataAfter(double key) +{ + if (mData->isEmpty()) return; + QCPFinancialDataMap::iterator it = mData->upperBound(key); + while (it != mData->end()) + it = mData->erase(it); +} + +/*! + Removes all data points with keys between \a fromKey and \a toKey. if \a fromKey is greater or + equal to \a toKey, the function does nothing. To remove a single data point with known key, use + \ref removeData(double key). + + \see addData, clearData +*/ +void QCPFinancial::removeData(double fromKey, double toKey) +{ + if (fromKey >= toKey || mData->isEmpty()) return; + QCPFinancialDataMap::iterator it = mData->upperBound(fromKey); + QCPFinancialDataMap::iterator itEnd = mData->upperBound(toKey); + while (it != itEnd) + it = mData->erase(it); +} + +/*! \overload + + Removes a single data point at \a key. If the position is not known with absolute precision, + consider using \ref removeData(double fromKey, double toKey) with a small fuzziness interval + around the suspected position, depeding on the precision with which the key is known. + + \see addData, clearData +*/ +void QCPFinancial::removeData(double key) +{ + mData->remove(key); +} + +/*! + Removes all data points. + + \see removeData, removeDataAfter, removeDataBefore +*/ +void QCPFinancial::clearData() +{ + mData->clear(); +} + +/* inherits documentation from base class */ +double QCPFinancial::selectTest(const QPointF &pos, bool onlySelectable, QVariant *details) const +{ + Q_UNUSED(details) + if (onlySelectable && !mSelectable) + return -1; + if (!mKeyAxis || !mValueAxis) { qDebug() << Q_FUNC_INFO << "invalid key or value axis"; return -1; } + + if (mKeyAxis.data()->axisRect()->rect().contains(pos.toPoint())) + { + // get visible data range: + QCPFinancialDataMap::const_iterator lower, upper; // note that upper is the actual upper point, and not 1 step after the upper point + getVisibleDataBounds(lower, upper); + if (lower == mData->constEnd() || upper == mData->constEnd()) + return -1; + // perform select test according to configured style: + switch (mChartStyle) + { + case QCPFinancial::csOhlc: + return ohlcSelectTest(pos, lower, upper+1); break; + case QCPFinancial::csCandlestick: + return candlestickSelectTest(pos, lower, upper+1); break; + } + } + return -1; +} + +/*! + A convenience function that converts time series data (\a value against \a time) to OHLC binned + data points. The return value can then be passed on to \ref setData. + + The size of the bins can be controlled with \a timeBinSize in the same units as \a time is given. + For example, if the unit of \a time is seconds and single OHLC/Candlesticks should span an hour + each, set \a timeBinSize to 3600. + + \a timeBinOffset allows to control precisely at what \a time coordinate a bin should start. The + value passed as \a timeBinOffset doesn't need to be in the range encompassed by the \a time keys. + It merely defines the mathematical offset/phase of the bins that will be used to process the + data. +*/ +QCPFinancialDataMap QCPFinancial::timeSeriesToOhlc(const QVector &time, const QVector &value, double timeBinSize, double timeBinOffset) +{ + QCPFinancialDataMap map; + int count = qMin(time.size(), value.size()); + if (count == 0) + return QCPFinancialDataMap(); + + QCPFinancialData currentBinData(0, value.first(), value.first(), value.first(), value.first()); + int currentBinIndex = qFloor((time.first()-timeBinOffset)/timeBinSize+0.5); + for (int i=0; i currentBinData.high) currentBinData.high = value.at(i); + if (i == count-1) // last data point is in current bin, finalize bin: + { + currentBinData.close = value.at(i); + currentBinData.key = timeBinOffset+(index)*timeBinSize; + map.insert(currentBinData.key, currentBinData); + } + } else // data point not anymore in current bin, set close of old and open of new bin, and add old to map: + { + // finalize current bin: + currentBinData.close = value.at(i-1); + currentBinData.key = timeBinOffset+(index-1)*timeBinSize; + map.insert(currentBinData.key, currentBinData); + // start next bin: + currentBinIndex = index; + currentBinData.open = value.at(i); + currentBinData.high = value.at(i); + currentBinData.low = value.at(i); + } + } + + return map; +} + +/* inherits documentation from base class */ +void QCPFinancial::draw(QCPPainter *painter) +{ + // get visible data range: + QCPFinancialDataMap::const_iterator lower, upper; // note that upper is the actual upper point, and not 1 step after the upper point + getVisibleDataBounds(lower, upper); + if (lower == mData->constEnd() || upper == mData->constEnd()) + return; + + // draw visible data range according to configured style: + switch (mChartStyle) + { + case QCPFinancial::csOhlc: + drawOhlcPlot(painter, lower, upper+1); break; + case QCPFinancial::csCandlestick: + drawCandlestickPlot(painter, lower, upper+1); break; + } +} + +/* inherits documentation from base class */ +void QCPFinancial::drawLegendIcon(QCPPainter *painter, const QRectF &rect) const +{ + painter->setAntialiasing(false); // legend icon especially of csCandlestick looks better without antialiasing + if (mChartStyle == csOhlc) + { + if (mTwoColored) + { + // draw upper left half icon with positive color: + painter->setBrush(mBrushPositive); + painter->setPen(mPenPositive); + painter->setClipRegion(QRegion(QPolygon() << rect.bottomLeft().toPoint() << rect.topRight().toPoint() << rect.topLeft().toPoint())); + painter->drawLine(QLineF(0, rect.height()*0.5, rect.width(), rect.height()*0.5).translated(rect.topLeft())); + painter->drawLine(QLineF(rect.width()*0.2, rect.height()*0.3, rect.width()*0.2, rect.height()*0.5).translated(rect.topLeft())); + painter->drawLine(QLineF(rect.width()*0.8, rect.height()*0.5, rect.width()*0.8, rect.height()*0.7).translated(rect.topLeft())); + // draw bottom right hald icon with negative color: + painter->setBrush(mBrushNegative); + painter->setPen(mPenNegative); + painter->setClipRegion(QRegion(QPolygon() << rect.bottomLeft().toPoint() << rect.topRight().toPoint() << rect.bottomRight().toPoint())); + painter->drawLine(QLineF(0, rect.height()*0.5, rect.width(), rect.height()*0.5).translated(rect.topLeft())); + painter->drawLine(QLineF(rect.width()*0.2, rect.height()*0.3, rect.width()*0.2, rect.height()*0.5).translated(rect.topLeft())); + painter->drawLine(QLineF(rect.width()*0.8, rect.height()*0.5, rect.width()*0.8, rect.height()*0.7).translated(rect.topLeft())); + } else + { + painter->setBrush(mBrush); + painter->setPen(mPen); + painter->drawLine(QLineF(0, rect.height()*0.5, rect.width(), rect.height()*0.5).translated(rect.topLeft())); + painter->drawLine(QLineF(rect.width()*0.2, rect.height()*0.3, rect.width()*0.2, rect.height()*0.5).translated(rect.topLeft())); + painter->drawLine(QLineF(rect.width()*0.8, rect.height()*0.5, rect.width()*0.8, rect.height()*0.7).translated(rect.topLeft())); + } + } else if (mChartStyle == csCandlestick) + { + if (mTwoColored) + { + // draw upper left half icon with positive color: + painter->setBrush(mBrushPositive); + painter->setPen(mPenPositive); + painter->setClipRegion(QRegion(QPolygon() << rect.bottomLeft().toPoint() << rect.topRight().toPoint() << rect.topLeft().toPoint())); + painter->drawLine(QLineF(0, rect.height()*0.5, rect.width()*0.25, rect.height()*0.5).translated(rect.topLeft())); + painter->drawLine(QLineF(rect.width()*0.75, rect.height()*0.5, rect.width(), rect.height()*0.5).translated(rect.topLeft())); + painter->drawRect(QRectF(rect.width()*0.25, rect.height()*0.25, rect.width()*0.5, rect.height()*0.5).translated(rect.topLeft())); + // draw bottom right hald icon with negative color: + painter->setBrush(mBrushNegative); + painter->setPen(mPenNegative); + painter->setClipRegion(QRegion(QPolygon() << rect.bottomLeft().toPoint() << rect.topRight().toPoint() << rect.bottomRight().toPoint())); + painter->drawLine(QLineF(0, rect.height()*0.5, rect.width()*0.25, rect.height()*0.5).translated(rect.topLeft())); + painter->drawLine(QLineF(rect.width()*0.75, rect.height()*0.5, rect.width(), rect.height()*0.5).translated(rect.topLeft())); + painter->drawRect(QRectF(rect.width()*0.25, rect.height()*0.25, rect.width()*0.5, rect.height()*0.5).translated(rect.topLeft())); + } else + { + painter->setBrush(mBrush); + painter->setPen(mPen); + painter->drawLine(QLineF(0, rect.height()*0.5, rect.width()*0.25, rect.height()*0.5).translated(rect.topLeft())); + painter->drawLine(QLineF(rect.width()*0.75, rect.height()*0.5, rect.width(), rect.height()*0.5).translated(rect.topLeft())); + painter->drawRect(QRectF(rect.width()*0.25, rect.height()*0.25, rect.width()*0.5, rect.height()*0.5).translated(rect.topLeft())); + } + } +} + +/* inherits documentation from base class */ +QCPRange QCPFinancial::getKeyRange(bool &foundRange, QCPAbstractPlottable::SignDomain inSignDomain) const +{ + QCPRange range; + bool haveLower = false; + bool haveUpper = false; + + double current; + QCPFinancialDataMap::const_iterator it = mData->constBegin(); + while (it != mData->constEnd()) + { + current = it.value().key; + if (inSignDomain == sdBoth || (inSignDomain == sdNegative && current < 0) || (inSignDomain == sdPositive && current > 0)) + { + if (current < range.lower || !haveLower) + { + range.lower = current; + haveLower = true; + } + if (current > range.upper || !haveUpper) + { + range.upper = current; + haveUpper = true; + } + } + ++it; + } + // determine exact range by including width of bars/flags: + if (haveLower && mKeyAxis) + range.lower = range.lower-mWidth*0.5; + if (haveUpper && mKeyAxis) + range.upper = range.upper+mWidth*0.5; + foundRange = haveLower && haveUpper; + return range; +} + +/* inherits documentation from base class */ +QCPRange QCPFinancial::getValueRange(bool &foundRange, QCPAbstractPlottable::SignDomain inSignDomain) const +{ + QCPRange range; + bool haveLower = false; + bool haveUpper = false; + + QCPFinancialDataMap::const_iterator it = mData->constBegin(); + while (it != mData->constEnd()) + { + // high: + if (inSignDomain == sdBoth || (inSignDomain == sdNegative && it.value().high < 0) || (inSignDomain == sdPositive && it.value().high > 0)) + { + if (it.value().high < range.lower || !haveLower) + { + range.lower = it.value().high; + haveLower = true; + } + if (it.value().high > range.upper || !haveUpper) + { + range.upper = it.value().high; + haveUpper = true; + } + } + // low: + if (inSignDomain == sdBoth || (inSignDomain == sdNegative && it.value().low < 0) || (inSignDomain == sdPositive && it.value().low > 0)) + { + if (it.value().low < range.lower || !haveLower) + { + range.lower = it.value().low; + haveLower = true; + } + if (it.value().low > range.upper || !haveUpper) + { + range.upper = it.value().low; + haveUpper = true; + } + } + ++it; + } + + foundRange = haveLower && haveUpper; + return range; +} + +/*! \internal + + Draws the data from \a begin to \a end as OHLC bars with the provided \a painter. + + This method is a helper function for \ref draw. It is used when the chart style is \ref csOhlc. +*/ +void QCPFinancial::drawOhlcPlot(QCPPainter *painter, const QCPFinancialDataMap::const_iterator &begin, const QCPFinancialDataMap::const_iterator &end) +{ + QCPAxis *keyAxis = mKeyAxis.data(); + QCPAxis *valueAxis = mValueAxis.data(); + if (!keyAxis || !valueAxis) { qDebug() << Q_FUNC_INFO << "invalid key or value axis"; return; } + + QPen linePen; + + if (keyAxis->orientation() == Qt::Horizontal) + { + for (QCPFinancialDataMap::const_iterator it = begin; it != end; ++it) + { + if (mSelected) + linePen = mSelectedPen; + else if (mTwoColored) + linePen = it.value().close >= it.value().open ? mPenPositive : mPenNegative; + else + linePen = mPen; + painter->setPen(linePen); + double keyPixel = keyAxis->coordToPixel(it.value().key); + double openPixel = valueAxis->coordToPixel(it.value().open); + double closePixel = valueAxis->coordToPixel(it.value().close); + // draw backbone: + painter->drawLine(QPointF(keyPixel, valueAxis->coordToPixel(it.value().high)), QPointF(keyPixel, valueAxis->coordToPixel(it.value().low))); + // draw open: + double keyWidthPixels = keyPixel-keyAxis->coordToPixel(it.value().key-mWidth*0.5); // sign of this makes sure open/close are on correct sides + painter->drawLine(QPointF(keyPixel-keyWidthPixels, openPixel), QPointF(keyPixel, openPixel)); + // draw close: + painter->drawLine(QPointF(keyPixel, closePixel), QPointF(keyPixel+keyWidthPixels, closePixel)); + } + } else + { + for (QCPFinancialDataMap::const_iterator it = begin; it != end; ++it) + { + if (mSelected) + linePen = mSelectedPen; + else if (mTwoColored) + linePen = it.value().close >= it.value().open ? mPenPositive : mPenNegative; + else + linePen = mPen; + painter->setPen(linePen); + double keyPixel = keyAxis->coordToPixel(it.value().key); + double openPixel = valueAxis->coordToPixel(it.value().open); + double closePixel = valueAxis->coordToPixel(it.value().close); + // draw backbone: + painter->drawLine(QPointF(valueAxis->coordToPixel(it.value().high), keyPixel), QPointF(valueAxis->coordToPixel(it.value().low), keyPixel)); + // draw open: + double keyWidthPixels = keyPixel-keyAxis->coordToPixel(it.value().key-mWidth*0.5); // sign of this makes sure open/close are on correct sides + painter->drawLine(QPointF(openPixel, keyPixel-keyWidthPixels), QPointF(openPixel, keyPixel)); + // draw close: + painter->drawLine(QPointF(closePixel, keyPixel), QPointF(closePixel, keyPixel+keyWidthPixels)); + } + } +} + +/*! \internal + + Draws the data from \a begin to \a end as Candlesticks with the provided \a painter. + + This method is a helper function for \ref draw. It is used when the chart style is \ref csCandlestick. +*/ +void QCPFinancial::drawCandlestickPlot(QCPPainter *painter, const QCPFinancialDataMap::const_iterator &begin, const QCPFinancialDataMap::const_iterator &end) +{ + QCPAxis *keyAxis = mKeyAxis.data(); + QCPAxis *valueAxis = mValueAxis.data(); + if (!keyAxis || !valueAxis) { qDebug() << Q_FUNC_INFO << "invalid key or value axis"; return; } + + QPen linePen; + QBrush boxBrush; + + if (keyAxis->orientation() == Qt::Horizontal) + { + for (QCPFinancialDataMap::const_iterator it = begin; it != end; ++it) + { + if (mSelected) + { + linePen = mSelectedPen; + boxBrush = mSelectedBrush; + } else if (mTwoColored) + { + if (it.value().close >= it.value().open) + { + linePen = mPenPositive; + boxBrush = mBrushPositive; + } else + { + linePen = mPenNegative; + boxBrush = mBrushNegative; + } + } else + { + linePen = mPen; + boxBrush = mBrush; + } + painter->setPen(linePen); + painter->setBrush(boxBrush); + double keyPixel = keyAxis->coordToPixel(it.value().key); + double openPixel = valueAxis->coordToPixel(it.value().open); + double closePixel = valueAxis->coordToPixel(it.value().close); + // draw high: + painter->drawLine(QPointF(keyPixel, valueAxis->coordToPixel(it.value().high)), QPointF(keyPixel, valueAxis->coordToPixel(qMax(it.value().open, it.value().close)))); + // draw low: + painter->drawLine(QPointF(keyPixel, valueAxis->coordToPixel(it.value().low)), QPointF(keyPixel, valueAxis->coordToPixel(qMin(it.value().open, it.value().close)))); + // draw open-close box: + double keyWidthPixels = keyPixel-keyAxis->coordToPixel(it.value().key-mWidth*0.5); + painter->drawRect(QRectF(QPointF(keyPixel-keyWidthPixels, closePixel), QPointF(keyPixel+keyWidthPixels, openPixel))); + } + } else // keyAxis->orientation() == Qt::Vertical + { + for (QCPFinancialDataMap::const_iterator it = begin; it != end; ++it) + { + if (mSelected) + { + linePen = mSelectedPen; + boxBrush = mSelectedBrush; + } else if (mTwoColored) + { + if (it.value().close >= it.value().open) + { + linePen = mPenPositive; + boxBrush = mBrushPositive; + } else + { + linePen = mPenNegative; + boxBrush = mBrushNegative; + } + } else + { + linePen = mPen; + boxBrush = mBrush; + } + painter->setPen(linePen); + painter->setBrush(boxBrush); + double keyPixel = keyAxis->coordToPixel(it.value().key); + double openPixel = valueAxis->coordToPixel(it.value().open); + double closePixel = valueAxis->coordToPixel(it.value().close); + // draw high: + painter->drawLine(QPointF(valueAxis->coordToPixel(it.value().high), keyPixel), QPointF(valueAxis->coordToPixel(qMax(it.value().open, it.value().close)), keyPixel)); + // draw low: + painter->drawLine(QPointF(valueAxis->coordToPixel(it.value().low), keyPixel), QPointF(valueAxis->coordToPixel(qMin(it.value().open, it.value().close)), keyPixel)); + // draw open-close box: + double keyWidthPixels = keyPixel-keyAxis->coordToPixel(it.value().key-mWidth*0.5); + painter->drawRect(QRectF(QPointF(closePixel, keyPixel-keyWidthPixels), QPointF(openPixel, keyPixel+keyWidthPixels))); + } + } +} + +/*! \internal + + This method is a helper function for \ref selectTest. It is used to test for selection when the + chart style is \ref csOhlc. It only tests against the data points between \a begin and \a end. +*/ +double QCPFinancial::ohlcSelectTest(const QPointF &pos, const QCPFinancialDataMap::const_iterator &begin, const QCPFinancialDataMap::const_iterator &end) const +{ + QCPAxis *keyAxis = mKeyAxis.data(); + QCPAxis *valueAxis = mValueAxis.data(); + if (!keyAxis || !valueAxis) { qDebug() << Q_FUNC_INFO << "invalid key or value axis"; return -1; } + + double minDistSqr = std::numeric_limits::max(); + QCPFinancialDataMap::const_iterator it; + if (keyAxis->orientation() == Qt::Horizontal) + { + for (it = begin; it != end; ++it) + { + double keyPixel = keyAxis->coordToPixel(it.value().key); + // calculate distance to backbone: + double currentDistSqr = distSqrToLine(QPointF(keyPixel, valueAxis->coordToPixel(it.value().high)), QPointF(keyPixel, valueAxis->coordToPixel(it.value().low)), pos); + if (currentDistSqr < minDistSqr) + minDistSqr = currentDistSqr; + } + } else // keyAxis->orientation() == Qt::Vertical + { + for (it = begin; it != end; ++it) + { + double keyPixel = keyAxis->coordToPixel(it.value().key); + // calculate distance to backbone: + double currentDistSqr = distSqrToLine(QPointF(valueAxis->coordToPixel(it.value().high), keyPixel), QPointF(valueAxis->coordToPixel(it.value().low), keyPixel), pos); + if (currentDistSqr < minDistSqr) + minDistSqr = currentDistSqr; + } + } + return qSqrt(minDistSqr); +} + +/*! \internal + + This method is a helper function for \ref selectTest. It is used to test for selection when the + chart style is \ref csCandlestick. It only tests against the data points between \a begin and \a + end. +*/ +double QCPFinancial::candlestickSelectTest(const QPointF &pos, const QCPFinancialDataMap::const_iterator &begin, const QCPFinancialDataMap::const_iterator &end) const +{ + QCPAxis *keyAxis = mKeyAxis.data(); + QCPAxis *valueAxis = mValueAxis.data(); + if (!keyAxis || !valueAxis) { qDebug() << Q_FUNC_INFO << "invalid key or value axis"; return -1; } + + double minDistSqr = std::numeric_limits::max(); + QCPFinancialDataMap::const_iterator it; + if (keyAxis->orientation() == Qt::Horizontal) + { + for (it = begin; it != end; ++it) + { + double currentDistSqr; + // determine whether pos is in open-close-box: + QCPRange boxKeyRange(it.value().key-mWidth*0.5, it.value().key+mWidth*0.5); + QCPRange boxValueRange(it.value().close, it.value().open); + double posKey, posValue; + pixelsToCoords(pos, posKey, posValue); + if (boxKeyRange.contains(posKey) && boxValueRange.contains(posValue)) // is in open-close-box + { + currentDistSqr = mParentPlot->selectionTolerance()*0.99 * mParentPlot->selectionTolerance()*0.99; + } else + { + // calculate distance to high/low lines: + double keyPixel = keyAxis->coordToPixel(it.value().key); + double highLineDistSqr = distSqrToLine(QPointF(keyPixel, valueAxis->coordToPixel(it.value().high)), QPointF(keyPixel, valueAxis->coordToPixel(qMax(it.value().open, it.value().close))), pos); + double lowLineDistSqr = distSqrToLine(QPointF(keyPixel, valueAxis->coordToPixel(it.value().low)), QPointF(keyPixel, valueAxis->coordToPixel(qMin(it.value().open, it.value().close))), pos); + currentDistSqr = qMin(highLineDistSqr, lowLineDistSqr); + } + if (currentDistSqr < minDistSqr) + minDistSqr = currentDistSqr; + } + } else // keyAxis->orientation() == Qt::Vertical + { + for (it = begin; it != end; ++it) + { + double currentDistSqr; + // determine whether pos is in open-close-box: + QCPRange boxKeyRange(it.value().key-mWidth*0.5, it.value().key+mWidth*0.5); + QCPRange boxValueRange(it.value().close, it.value().open); + double posKey, posValue; + pixelsToCoords(pos, posKey, posValue); + if (boxKeyRange.contains(posKey) && boxValueRange.contains(posValue)) // is in open-close-box + { + currentDistSqr = mParentPlot->selectionTolerance()*0.99 * mParentPlot->selectionTolerance()*0.99; + } else + { + // calculate distance to high/low lines: + double keyPixel = keyAxis->coordToPixel(it.value().key); + double highLineDistSqr = distSqrToLine(QPointF(valueAxis->coordToPixel(it.value().high), keyPixel), QPointF(valueAxis->coordToPixel(qMax(it.value().open, it.value().close)), keyPixel), pos); + double lowLineDistSqr = distSqrToLine(QPointF(valueAxis->coordToPixel(it.value().low), keyPixel), QPointF(valueAxis->coordToPixel(qMin(it.value().open, it.value().close)), keyPixel), pos); + currentDistSqr = qMin(highLineDistSqr, lowLineDistSqr); + } + if (currentDistSqr < minDistSqr) + minDistSqr = currentDistSqr; + } + } + return qSqrt(minDistSqr); +} + +/*! \internal + + called by the drawing methods to determine which data (key) range is visible at the current key + axis range setting, so only that needs to be processed. + + \a lower returns an iterator to the lowest data point that needs to be taken into account when + plotting. Note that in order to get a clean plot all the way to the edge of the axis rect, \a + lower may still be just outside the visible range. + + \a upper returns an iterator to the highest data point. Same as before, \a upper may also lie + just outside of the visible range. + + if the plottable contains no data, both \a lower and \a upper point to constEnd. + + \see QCPGraph::getVisibleDataBounds +*/ +void QCPFinancial::getVisibleDataBounds(QCPFinancialDataMap::const_iterator &lower, QCPFinancialDataMap::const_iterator &upper) const +{ + if (!mKeyAxis) { qDebug() << Q_FUNC_INFO << "invalid key axis"; return; } + if (mData->isEmpty()) + { + lower = mData->constEnd(); + upper = mData->constEnd(); + return; + } + + // get visible data range as QMap iterators + QCPFinancialDataMap::const_iterator lbound = mData->lowerBound(mKeyAxis.data()->range().lower); + QCPFinancialDataMap::const_iterator ubound = mData->upperBound(mKeyAxis.data()->range().upper); + bool lowoutlier = lbound != mData->constBegin(); // indicates whether there exist points below axis range + bool highoutlier = ubound != mData->constEnd(); // indicates whether there exist points above axis range + + lower = (lowoutlier ? lbound-1 : lbound); // data point range that will be actually drawn + upper = (highoutlier ? ubound : ubound-1); // data point range that will be actually drawn +} + + +//////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////// QCPItemStraightLine +//////////////////////////////////////////////////////////////////////////////////////////////////// + +/*! \class QCPItemStraightLine + \brief A straight line that spans infinitely in both directions + + \image html QCPItemStraightLine.png "Straight line example. Blue dotted circles are anchors, solid blue discs are positions." + + It has two positions, \a point1 and \a point2, which define the straight line. +*/ + +/*! + Creates a straight line item and sets default values. + + The constructed item can be added to the plot with QCustomPlot::addItem. +*/ +QCPItemStraightLine::QCPItemStraightLine(QCustomPlot *parentPlot) : + QCPAbstractItem(parentPlot), + point1(createPosition(QLatin1String("point1"))), + point2(createPosition(QLatin1String("point2"))) +{ + point1->setCoords(0, 0); + point2->setCoords(1, 1); + + setPen(QPen(Qt::black)); + setSelectedPen(QPen(Qt::blue,2)); +} + +QCPItemStraightLine::~QCPItemStraightLine() +{ +} + +/*! + Sets the pen that will be used to draw the line + + \see setSelectedPen +*/ +void QCPItemStraightLine::setPen(const QPen &pen) +{ + mPen = pen; +} + +/*! + Sets the pen that will be used to draw the line when selected + + \see setPen, setSelected +*/ +void QCPItemStraightLine::setSelectedPen(const QPen &pen) +{ + mSelectedPen = pen; +} + +/* inherits documentation from base class */ +double QCPItemStraightLine::selectTest(const QPointF &pos, bool onlySelectable, QVariant *details) const +{ + Q_UNUSED(details) + if (onlySelectable && !mSelectable) + return -1; + + return distToStraightLine(QVector2D(point1->pixelPoint()), QVector2D(point2->pixelPoint()-point1->pixelPoint()), QVector2D(pos)); +} + +/* inherits documentation from base class */ +void QCPItemStraightLine::draw(QCPPainter *painter) +{ + QVector2D start(point1->pixelPoint()); + QVector2D end(point2->pixelPoint()); + // get visible segment of straight line inside clipRect: + double clipPad = mainPen().widthF(); + QLineF line = getRectClippedStraightLine(start, end-start, clipRect().adjusted(-clipPad, -clipPad, clipPad, clipPad)); + // paint visible segment, if existent: + if (!line.isNull()) + { + painter->setPen(mainPen()); + painter->drawLine(line); + } +} + +/*! \internal + + finds the shortest distance of \a point to the straight line defined by the base point \a + base and the direction vector \a vec. + + This is a helper function for \ref selectTest. +*/ +double QCPItemStraightLine::distToStraightLine(const QVector2D &base, const QVector2D &vec, const QVector2D &point) const +{ + return qAbs((base.y()-point.y())*vec.x()-(base.x()-point.x())*vec.y())/vec.length(); +} + +/*! \internal + + Returns the section of the straight line defined by \a base and direction vector \a + vec, that is visible in the specified \a rect. + + This is a helper function for \ref draw. +*/ +QLineF QCPItemStraightLine::getRectClippedStraightLine(const QVector2D &base, const QVector2D &vec, const QRect &rect) const +{ + double bx, by; + double gamma; + QLineF result; + if (vec.x() == 0 && vec.y() == 0) + return result; + if (qFuzzyIsNull(vec.x())) // line is vertical + { + // check top of rect: + bx = rect.left(); + by = rect.top(); + gamma = base.x()-bx + (by-base.y())*vec.x()/vec.y(); + if (gamma >= 0 && gamma <= rect.width()) + result.setLine(bx+gamma, rect.top(), bx+gamma, rect.bottom()); // no need to check bottom because we know line is vertical + } else if (qFuzzyIsNull(vec.y())) // line is horizontal + { + // check left of rect: + bx = rect.left(); + by = rect.top(); + gamma = base.y()-by + (bx-base.x())*vec.y()/vec.x(); + if (gamma >= 0 && gamma <= rect.height()) + result.setLine(rect.left(), by+gamma, rect.right(), by+gamma); // no need to check right because we know line is horizontal + } else // line is skewed + { + QList pointVectors; + // check top of rect: + bx = rect.left(); + by = rect.top(); + gamma = base.x()-bx + (by-base.y())*vec.x()/vec.y(); + if (gamma >= 0 && gamma <= rect.width()) + pointVectors.append(QVector2D(bx+gamma, by)); + // check bottom of rect: + bx = rect.left(); + by = rect.bottom(); + gamma = base.x()-bx + (by-base.y())*vec.x()/vec.y(); + if (gamma >= 0 && gamma <= rect.width()) + pointVectors.append(QVector2D(bx+gamma, by)); + // check left of rect: + bx = rect.left(); + by = rect.top(); + gamma = base.y()-by + (bx-base.x())*vec.y()/vec.x(); + if (gamma >= 0 && gamma <= rect.height()) + pointVectors.append(QVector2D(bx, by+gamma)); + // check right of rect: + bx = rect.right(); + by = rect.top(); + gamma = base.y()-by + (bx-base.x())*vec.y()/vec.x(); + if (gamma >= 0 && gamma <= rect.height()) + pointVectors.append(QVector2D(bx, by+gamma)); + + // evaluate points: + if (pointVectors.size() == 2) + { + result.setPoints(pointVectors.at(0).toPointF(), pointVectors.at(1).toPointF()); + } else if (pointVectors.size() > 2) + { + // line probably goes through corner of rect, and we got two points there. single out the point pair with greatest distance: + double distSqrMax = 0; + QVector2D pv1, pv2; + for (int i=0; i distSqrMax) + { + pv1 = pointVectors.at(i); + pv2 = pointVectors.at(k); + distSqrMax = distSqr; + } + } + } + result.setPoints(pv1.toPointF(), pv2.toPointF()); + } + } + return result; +} + +/*! \internal + + Returns the pen that should be used for drawing lines. Returns mPen when the + item is not selected and mSelectedPen when it is. +*/ +QPen QCPItemStraightLine::mainPen() const +{ + return mSelected ? mSelectedPen : mPen; +} + + +//////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////// QCPItemLine +//////////////////////////////////////////////////////////////////////////////////////////////////// + +/*! \class QCPItemLine + \brief A line from one point to another + + \image html QCPItemLine.png "Line example. Blue dotted circles are anchors, solid blue discs are positions." + + It has two positions, \a start and \a end, which define the end points of the line. + + With \ref setHead and \ref setTail you may set different line ending styles, e.g. to create an arrow. +*/ + +/*! + Creates a line item and sets default values. + + The constructed item can be added to the plot with QCustomPlot::addItem. +*/ +QCPItemLine::QCPItemLine(QCustomPlot *parentPlot) : + QCPAbstractItem(parentPlot), + start(createPosition(QLatin1String("start"))), + end(createPosition(QLatin1String("end"))) +{ + start->setCoords(0, 0); + end->setCoords(1, 1); + + setPen(QPen(Qt::black)); + setSelectedPen(QPen(Qt::blue,2)); +} + +QCPItemLine::~QCPItemLine() +{ +} + +/*! + Sets the pen that will be used to draw the line + + \see setSelectedPen +*/ +void QCPItemLine::setPen(const QPen &pen) +{ + mPen = pen; +} + +/*! + Sets the pen that will be used to draw the line when selected + + \see setPen, setSelected +*/ +void QCPItemLine::setSelectedPen(const QPen &pen) +{ + mSelectedPen = pen; +} + +/*! + Sets the line ending style of the head. The head corresponds to the \a end position. + + Note that due to the overloaded QCPLineEnding constructor, you may directly specify + a QCPLineEnding::EndingStyle here, e.g. \code setHead(QCPLineEnding::esSpikeArrow) \endcode + + \see setTail +*/ +void QCPItemLine::setHead(const QCPLineEnding &head) +{ + mHead = head; +} + +/*! + Sets the line ending style of the tail. The tail corresponds to the \a start position. + + Note that due to the overloaded QCPLineEnding constructor, you may directly specify + a QCPLineEnding::EndingStyle here, e.g. \code setTail(QCPLineEnding::esSpikeArrow) \endcode + + \see setHead +*/ +void QCPItemLine::setTail(const QCPLineEnding &tail) +{ + mTail = tail; +} + +/* inherits documentation from base class */ +double QCPItemLine::selectTest(const QPointF &pos, bool onlySelectable, QVariant *details) const +{ + Q_UNUSED(details) + if (onlySelectable && !mSelectable) + return -1; + + return qSqrt(distSqrToLine(start->pixelPoint(), end->pixelPoint(), pos)); +} + +/* inherits documentation from base class */ +void QCPItemLine::draw(QCPPainter *painter) +{ + QVector2D startVec(start->pixelPoint()); + QVector2D endVec(end->pixelPoint()); + if (startVec.toPoint() == endVec.toPoint()) + return; + // get visible segment of straight line inside clipRect: + double clipPad = qMax(mHead.boundingDistance(), mTail.boundingDistance()); + clipPad = qMax(clipPad, (double)mainPen().widthF()); + QLineF line = getRectClippedLine(startVec, endVec, clipRect().adjusted(-clipPad, -clipPad, clipPad, clipPad)); + // paint visible segment, if existent: + if (!line.isNull()) + { + painter->setPen(mainPen()); + painter->drawLine(line); + painter->setBrush(Qt::SolidPattern); + if (mTail.style() != QCPLineEnding::esNone) + mTail.draw(painter, startVec, startVec-endVec); + if (mHead.style() != QCPLineEnding::esNone) + mHead.draw(painter, endVec, endVec-startVec); + } +} + +/*! \internal + + Returns the section of the line defined by \a start and \a end, that is visible in the specified + \a rect. + + This is a helper function for \ref draw. +*/ +QLineF QCPItemLine::getRectClippedLine(const QVector2D &start, const QVector2D &end, const QRect &rect) const +{ + bool containsStart = rect.contains(start.x(), start.y()); + bool containsEnd = rect.contains(end.x(), end.y()); + if (containsStart && containsEnd) + return QLineF(start.toPointF(), end.toPointF()); + + QVector2D base = start; + QVector2D vec = end-start; + double bx, by; + double gamma, mu; + QLineF result; + QList pointVectors; + + if (!qFuzzyIsNull(vec.y())) // line is not horizontal + { + // check top of rect: + bx = rect.left(); + by = rect.top(); + mu = (by-base.y())/vec.y(); + if (mu >= 0 && mu <= 1) + { + gamma = base.x()-bx + mu*vec.x(); + if (gamma >= 0 && gamma <= rect.width()) + pointVectors.append(QVector2D(bx+gamma, by)); + } + // check bottom of rect: + bx = rect.left(); + by = rect.bottom(); + mu = (by-base.y())/vec.y(); + if (mu >= 0 && mu <= 1) + { + gamma = base.x()-bx + mu*vec.x(); + if (gamma >= 0 && gamma <= rect.width()) + pointVectors.append(QVector2D(bx+gamma, by)); + } + } + if (!qFuzzyIsNull(vec.x())) // line is not vertical + { + // check left of rect: + bx = rect.left(); + by = rect.top(); + mu = (bx-base.x())/vec.x(); + if (mu >= 0 && mu <= 1) + { + gamma = base.y()-by + mu*vec.y(); + if (gamma >= 0 && gamma <= rect.height()) + pointVectors.append(QVector2D(bx, by+gamma)); + } + // check right of rect: + bx = rect.right(); + by = rect.top(); + mu = (bx-base.x())/vec.x(); + if (mu >= 0 && mu <= 1) + { + gamma = base.y()-by + mu*vec.y(); + if (gamma >= 0 && gamma <= rect.height()) + pointVectors.append(QVector2D(bx, by+gamma)); + } + } + + if (containsStart) + pointVectors.append(start); + if (containsEnd) + pointVectors.append(end); + + // evaluate points: + if (pointVectors.size() == 2) + { + result.setPoints(pointVectors.at(0).toPointF(), pointVectors.at(1).toPointF()); + } else if (pointVectors.size() > 2) + { + // line probably goes through corner of rect, and we got two points there. single out the point pair with greatest distance: + double distSqrMax = 0; + QVector2D pv1, pv2; + for (int i=0; i distSqrMax) + { + pv1 = pointVectors.at(i); + pv2 = pointVectors.at(k); + distSqrMax = distSqr; + } + } + } + result.setPoints(pv1.toPointF(), pv2.toPointF()); + } + return result; +} + +/*! \internal + + Returns the pen that should be used for drawing lines. Returns mPen when the + item is not selected and mSelectedPen when it is. +*/ +QPen QCPItemLine::mainPen() const +{ + return mSelected ? mSelectedPen : mPen; +} + + +//////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////// QCPItemCurve +//////////////////////////////////////////////////////////////////////////////////////////////////// + +/*! \class QCPItemCurve + \brief A curved line from one point to another + + \image html QCPItemCurve.png "Curve example. Blue dotted circles are anchors, solid blue discs are positions." + + It has four positions, \a start and \a end, which define the end points of the line, and two + control points which define the direction the line exits from the start and the direction from + which it approaches the end: \a startDir and \a endDir. + + With \ref setHead and \ref setTail you may set different line ending styles, e.g. to create an + arrow. + + Often it is desirable for the control points to stay at fixed relative positions to the start/end + point. This can be achieved by setting the parent anchor e.g. of \a startDir simply to \a start, + and then specify the desired pixel offset with QCPItemPosition::setCoords on \a startDir. +*/ + +/*! + Creates a curve item and sets default values. + + The constructed item can be added to the plot with QCustomPlot::addItem. +*/ +QCPItemCurve::QCPItemCurve(QCustomPlot *parentPlot) : + QCPAbstractItem(parentPlot), + start(createPosition(QLatin1String("start"))), + startDir(createPosition(QLatin1String("startDir"))), + endDir(createPosition(QLatin1String("endDir"))), + end(createPosition(QLatin1String("end"))) +{ + start->setCoords(0, 0); + startDir->setCoords(0.5, 0); + endDir->setCoords(0, 0.5); + end->setCoords(1, 1); + + setPen(QPen(Qt::black)); + setSelectedPen(QPen(Qt::blue,2)); +} + +QCPItemCurve::~QCPItemCurve() +{ +} + +/*! + Sets the pen that will be used to draw the line + + \see setSelectedPen +*/ +void QCPItemCurve::setPen(const QPen &pen) +{ + mPen = pen; +} + +/*! + Sets the pen that will be used to draw the line when selected + + \see setPen, setSelected +*/ +void QCPItemCurve::setSelectedPen(const QPen &pen) +{ + mSelectedPen = pen; +} + +/*! + Sets the line ending style of the head. The head corresponds to the \a end position. + + Note that due to the overloaded QCPLineEnding constructor, you may directly specify + a QCPLineEnding::EndingStyle here, e.g. \code setHead(QCPLineEnding::esSpikeArrow) \endcode + + \see setTail +*/ +void QCPItemCurve::setHead(const QCPLineEnding &head) +{ + mHead = head; +} + +/*! + Sets the line ending style of the tail. The tail corresponds to the \a start position. + + Note that due to the overloaded QCPLineEnding constructor, you may directly specify + a QCPLineEnding::EndingStyle here, e.g. \code setTail(QCPLineEnding::esSpikeArrow) \endcode + + \see setHead +*/ +void QCPItemCurve::setTail(const QCPLineEnding &tail) +{ + mTail = tail; +} + +/* inherits documentation from base class */ +double QCPItemCurve::selectTest(const QPointF &pos, bool onlySelectable, QVariant *details) const +{ + Q_UNUSED(details) + if (onlySelectable && !mSelectable) + return -1; + + QPointF startVec(start->pixelPoint()); + QPointF startDirVec(startDir->pixelPoint()); + QPointF endDirVec(endDir->pixelPoint()); + QPointF endVec(end->pixelPoint()); + + QPainterPath cubicPath(startVec); + cubicPath.cubicTo(startDirVec, endDirVec, endVec); + + QPolygonF polygon = cubicPath.toSubpathPolygons().first(); + double minDistSqr = std::numeric_limits::max(); + for (int i=1; ipixelPoint()); + QPointF startDirVec(startDir->pixelPoint()); + QPointF endDirVec(endDir->pixelPoint()); + QPointF endVec(end->pixelPoint()); + if (QVector2D(endVec-startVec).length() > 1e10f) // too large curves cause crash + return; + + QPainterPath cubicPath(startVec); + cubicPath.cubicTo(startDirVec, endDirVec, endVec); + + // paint visible segment, if existent: + QRect clip = clipRect().adjusted(-mainPen().widthF(), -mainPen().widthF(), mainPen().widthF(), mainPen().widthF()); + QRect cubicRect = cubicPath.controlPointRect().toRect(); + if (cubicRect.isEmpty()) // may happen when start and end exactly on same x or y position + cubicRect.adjust(0, 0, 1, 1); + if (clip.intersects(cubicRect)) + { + painter->setPen(mainPen()); + painter->drawPath(cubicPath); + painter->setBrush(Qt::SolidPattern); + if (mTail.style() != QCPLineEnding::esNone) + mTail.draw(painter, QVector2D(startVec), M_PI-cubicPath.angleAtPercent(0)/180.0*M_PI); + if (mHead.style() != QCPLineEnding::esNone) + mHead.draw(painter, QVector2D(endVec), -cubicPath.angleAtPercent(1)/180.0*M_PI); + } +} + +/*! \internal + + Returns the pen that should be used for drawing lines. Returns mPen when the + item is not selected and mSelectedPen when it is. +*/ +QPen QCPItemCurve::mainPen() const +{ + return mSelected ? mSelectedPen : mPen; +} + + +//////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////// QCPItemRect +//////////////////////////////////////////////////////////////////////////////////////////////////// + +/*! \class QCPItemRect + \brief A rectangle + + \image html QCPItemRect.png "Rectangle example. Blue dotted circles are anchors, solid blue discs are positions." + + It has two positions, \a topLeft and \a bottomRight, which define the rectangle. +*/ + +/*! + Creates a rectangle item and sets default values. + + The constructed item can be added to the plot with QCustomPlot::addItem. +*/ +QCPItemRect::QCPItemRect(QCustomPlot *parentPlot) : + QCPAbstractItem(parentPlot), + topLeft(createPosition(QLatin1String("topLeft"))), + bottomRight(createPosition(QLatin1String("bottomRight"))), + top(createAnchor(QLatin1String("top"), aiTop)), + topRight(createAnchor(QLatin1String("topRight"), aiTopRight)), + right(createAnchor(QLatin1String("right"), aiRight)), + bottom(createAnchor(QLatin1String("bottom"), aiBottom)), + bottomLeft(createAnchor(QLatin1String("bottomLeft"), aiBottomLeft)), + left(createAnchor(QLatin1String("left"), aiLeft)) +{ + topLeft->setCoords(0, 1); + bottomRight->setCoords(1, 0); + + setPen(QPen(Qt::black)); + setSelectedPen(QPen(Qt::blue,2)); + setBrush(Qt::NoBrush); + setSelectedBrush(Qt::NoBrush); +} + +QCPItemRect::~QCPItemRect() +{ +} + +/*! + Sets the pen that will be used to draw the line of the rectangle + + \see setSelectedPen, setBrush +*/ +void QCPItemRect::setPen(const QPen &pen) +{ + mPen = pen; +} + +/*! + Sets the pen that will be used to draw the line of the rectangle when selected + + \see setPen, setSelected +*/ +void QCPItemRect::setSelectedPen(const QPen &pen) +{ + mSelectedPen = pen; +} + +/*! + Sets the brush that will be used to fill the rectangle. To disable filling, set \a brush to + Qt::NoBrush. + + \see setSelectedBrush, setPen +*/ +void QCPItemRect::setBrush(const QBrush &brush) +{ + mBrush = brush; +} + +/*! + Sets the brush that will be used to fill the rectangle when selected. To disable filling, set \a + brush to Qt::NoBrush. + + \see setBrush +*/ +void QCPItemRect::setSelectedBrush(const QBrush &brush) +{ + mSelectedBrush = brush; +} + +/* inherits documentation from base class */ +double QCPItemRect::selectTest(const QPointF &pos, bool onlySelectable, QVariant *details) const +{ + Q_UNUSED(details) + if (onlySelectable && !mSelectable) + return -1; + + QRectF rect = QRectF(topLeft->pixelPoint(), bottomRight->pixelPoint()).normalized(); + bool filledRect = mBrush.style() != Qt::NoBrush && mBrush.color().alpha() != 0; + return rectSelectTest(rect, pos, filledRect); +} + +/* inherits documentation from base class */ +void QCPItemRect::draw(QCPPainter *painter) +{ + QPointF p1 = topLeft->pixelPoint(); + QPointF p2 = bottomRight->pixelPoint(); + if (p1.toPoint() == p2.toPoint()) + return; + QRectF rect = QRectF(p1, p2).normalized(); + double clipPad = mainPen().widthF(); + QRectF boundingRect = rect.adjusted(-clipPad, -clipPad, clipPad, clipPad); + if (boundingRect.intersects(clipRect())) // only draw if bounding rect of rect item is visible in cliprect + { + painter->setPen(mainPen()); + painter->setBrush(mainBrush()); + painter->drawRect(rect); + } +} + +/* inherits documentation from base class */ +QPointF QCPItemRect::anchorPixelPoint(int anchorId) const +{ + QRectF rect = QRectF(topLeft->pixelPoint(), bottomRight->pixelPoint()); + switch (anchorId) + { + case aiTop: return (rect.topLeft()+rect.topRight())*0.5; + case aiTopRight: return rect.topRight(); + case aiRight: return (rect.topRight()+rect.bottomRight())*0.5; + case aiBottom: return (rect.bottomLeft()+rect.bottomRight())*0.5; + case aiBottomLeft: return rect.bottomLeft(); + case aiLeft: return (rect.topLeft()+rect.bottomLeft())*0.5; + } + + qDebug() << Q_FUNC_INFO << "invalid anchorId" << anchorId; + return QPointF(); +} + +/*! \internal + + Returns the pen that should be used for drawing lines. Returns mPen when the item is not selected + and mSelectedPen when it is. +*/ +QPen QCPItemRect::mainPen() const +{ + return mSelected ? mSelectedPen : mPen; +} + +/*! \internal + + Returns the brush that should be used for drawing fills of the item. Returns mBrush when the item + is not selected and mSelectedBrush when it is. +*/ +QBrush QCPItemRect::mainBrush() const +{ + return mSelected ? mSelectedBrush : mBrush; +} + + +//////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////// QCPItemText +//////////////////////////////////////////////////////////////////////////////////////////////////// + +/*! \class QCPItemText + \brief A text label + + \image html QCPItemText.png "Text example. Blue dotted circles are anchors, solid blue discs are positions." + + Its position is defined by the member \a position and the setting of \ref setPositionAlignment. + The latter controls which part of the text rect shall be aligned with \a position. + + The text alignment itself (i.e. left, center, right) can be controlled with \ref + setTextAlignment. + + The text may be rotated around the \a position point with \ref setRotation. +*/ + +/*! + Creates a text item and sets default values. + + The constructed item can be added to the plot with QCustomPlot::addItem. +*/ +QCPItemText::QCPItemText(QCustomPlot *parentPlot) : + QCPAbstractItem(parentPlot), + position(createPosition(QLatin1String("position"))), + topLeft(createAnchor(QLatin1String("topLeft"), aiTopLeft)), + top(createAnchor(QLatin1String("top"), aiTop)), + topRight(createAnchor(QLatin1String("topRight"), aiTopRight)), + right(createAnchor(QLatin1String("right"), aiRight)), + bottomRight(createAnchor(QLatin1String("bottomRight"), aiBottomRight)), + bottom(createAnchor(QLatin1String("bottom"), aiBottom)), + bottomLeft(createAnchor(QLatin1String("bottomLeft"), aiBottomLeft)), + left(createAnchor(QLatin1String("left"), aiLeft)) +{ + position->setCoords(0, 0); + + setRotation(0); + setTextAlignment(Qt::AlignTop|Qt::AlignHCenter); + setPositionAlignment(Qt::AlignCenter); + setText(QLatin1String("text")); + + setPen(Qt::NoPen); + setSelectedPen(Qt::NoPen); + setBrush(Qt::NoBrush); + setSelectedBrush(Qt::NoBrush); + setColor(Qt::black); + setSelectedColor(Qt::blue); +} + +QCPItemText::~QCPItemText() +{ +} + +/*! + Sets the color of the text. +*/ +void QCPItemText::setColor(const QColor &color) +{ + mColor = color; +} + +/*! + Sets the color of the text that will be used when the item is selected. +*/ +void QCPItemText::setSelectedColor(const QColor &color) +{ + mSelectedColor = color; +} + +/*! + Sets the pen that will be used do draw a rectangular border around the text. To disable the + border, set \a pen to Qt::NoPen. + + \see setSelectedPen, setBrush, setPadding +*/ +void QCPItemText::setPen(const QPen &pen) +{ + mPen = pen; +} + +/*! + Sets the pen that will be used do draw a rectangular border around the text, when the item is + selected. To disable the border, set \a pen to Qt::NoPen. + + \see setPen +*/ +void QCPItemText::setSelectedPen(const QPen &pen) +{ + mSelectedPen = pen; +} + +/*! + Sets the brush that will be used do fill the background of the text. To disable the + background, set \a brush to Qt::NoBrush. + + \see setSelectedBrush, setPen, setPadding +*/ +void QCPItemText::setBrush(const QBrush &brush) +{ + mBrush = brush; +} + +/*! + Sets the brush that will be used do fill the background of the text, when the item is selected. To disable the + background, set \a brush to Qt::NoBrush. + + \see setBrush +*/ +void QCPItemText::setSelectedBrush(const QBrush &brush) +{ + mSelectedBrush = brush; +} + +/*! + Sets the font of the text. + + \see setSelectedFont, setColor +*/ +void QCPItemText::setFont(const QFont &font) +{ + mFont = font; +} + +/*! + Sets the font of the text that will be used when the item is selected. + + \see setFont +*/ +void QCPItemText::setSelectedFont(const QFont &font) +{ + mSelectedFont = font; +} + +/*! + Sets the text that will be displayed. Multi-line texts are supported by inserting a line break + character, e.g. '\n'. + + \see setFont, setColor, setTextAlignment +*/ +void QCPItemText::setText(const QString &text) +{ + mText = text; +} + +/*! + Sets which point of the text rect shall be aligned with \a position. + + Examples: + \li If \a alignment is Qt::AlignHCenter | Qt::AlignTop, the text will be positioned such + that the top of the text rect will be horizontally centered on \a position. + \li If \a alignment is Qt::AlignLeft | Qt::AlignBottom, \a position will indicate the + bottom left corner of the text rect. + + If you want to control the alignment of (multi-lined) text within the text rect, use \ref + setTextAlignment. +*/ +void QCPItemText::setPositionAlignment(Qt::Alignment alignment) +{ + mPositionAlignment = alignment; +} + +/*! + Controls how (multi-lined) text is aligned inside the text rect (typically Qt::AlignLeft, Qt::AlignCenter or Qt::AlignRight). +*/ +void QCPItemText::setTextAlignment(Qt::Alignment alignment) +{ + mTextAlignment = alignment; +} + +/*! + Sets the angle in degrees by which the text (and the text rectangle, if visible) will be rotated + around \a position. +*/ +void QCPItemText::setRotation(double degrees) +{ + mRotation = degrees; +} + +/*! + Sets the distance between the border of the text rectangle and the text. The appearance (and + visibility) of the text rectangle can be controlled with \ref setPen and \ref setBrush. +*/ +void QCPItemText::setPadding(const QMargins &padding) +{ + mPadding = padding; +} + +/* inherits documentation from base class */ +double QCPItemText::selectTest(const QPointF &pos, bool onlySelectable, QVariant *details) const +{ + Q_UNUSED(details) + if (onlySelectable && !mSelectable) + return -1; + + // The rect may be rotated, so we transform the actual clicked pos to the rotated + // coordinate system, so we can use the normal rectSelectTest function for non-rotated rects: + QPointF positionPixels(position->pixelPoint()); + QTransform inputTransform; + inputTransform.translate(positionPixels.x(), positionPixels.y()); + inputTransform.rotate(-mRotation); + inputTransform.translate(-positionPixels.x(), -positionPixels.y()); + QPointF rotatedPos = inputTransform.map(pos); + QFontMetrics fontMetrics(mFont); + QRect textRect = fontMetrics.boundingRect(0, 0, 0, 0, Qt::TextDontClip|mTextAlignment, mText); + QRect textBoxRect = textRect.adjusted(-mPadding.left(), -mPadding.top(), mPadding.right(), mPadding.bottom()); + QPointF textPos = getTextDrawPoint(positionPixels, textBoxRect, mPositionAlignment); + textBoxRect.moveTopLeft(textPos.toPoint()); + + return rectSelectTest(textBoxRect, rotatedPos, true); +} + +/* inherits documentation from base class */ +void QCPItemText::draw(QCPPainter *painter) +{ + QPointF pos(position->pixelPoint()); + QTransform transform = painter->transform(); + transform.translate(pos.x(), pos.y()); + if (!qFuzzyIsNull(mRotation)) + transform.rotate(mRotation); + painter->setFont(mainFont()); + QRect textRect = painter->fontMetrics().boundingRect(0, 0, 0, 0, Qt::TextDontClip|mTextAlignment, mText); + QRect textBoxRect = textRect.adjusted(-mPadding.left(), -mPadding.top(), mPadding.right(), mPadding.bottom()); + QPointF textPos = getTextDrawPoint(QPointF(0, 0), textBoxRect, mPositionAlignment); // 0, 0 because the transform does the translation + textRect.moveTopLeft(textPos.toPoint()+QPoint(mPadding.left(), mPadding.top())); + textBoxRect.moveTopLeft(textPos.toPoint()); + double clipPad = mainPen().widthF(); + QRect boundingRect = textBoxRect.adjusted(-clipPad, -clipPad, clipPad, clipPad); + if (transform.mapRect(boundingRect).intersects(painter->transform().mapRect(clipRect()))) + { + painter->setTransform(transform); + if ((mainBrush().style() != Qt::NoBrush && mainBrush().color().alpha() != 0) || + (mainPen().style() != Qt::NoPen && mainPen().color().alpha() != 0)) + { + painter->setPen(mainPen()); + painter->setBrush(mainBrush()); + painter->drawRect(textBoxRect); + } + painter->setBrush(Qt::NoBrush); + painter->setPen(QPen(mainColor())); + painter->drawText(textRect, Qt::TextDontClip|mTextAlignment, mText); + } +} + +/* inherits documentation from base class */ +QPointF QCPItemText::anchorPixelPoint(int anchorId) const +{ + // get actual rect points (pretty much copied from draw function): + QPointF pos(position->pixelPoint()); + QTransform transform; + transform.translate(pos.x(), pos.y()); + if (!qFuzzyIsNull(mRotation)) + transform.rotate(mRotation); + QFontMetrics fontMetrics(mainFont()); + QRect textRect = fontMetrics.boundingRect(0, 0, 0, 0, Qt::TextDontClip|mTextAlignment, mText); + QRectF textBoxRect = textRect.adjusted(-mPadding.left(), -mPadding.top(), mPadding.right(), mPadding.bottom()); + QPointF textPos = getTextDrawPoint(QPointF(0, 0), textBoxRect, mPositionAlignment); // 0, 0 because the transform does the translation + textBoxRect.moveTopLeft(textPos.toPoint()); + QPolygonF rectPoly = transform.map(QPolygonF(textBoxRect)); + + switch (anchorId) + { + case aiTopLeft: return rectPoly.at(0); + case aiTop: return (rectPoly.at(0)+rectPoly.at(1))*0.5; + case aiTopRight: return rectPoly.at(1); + case aiRight: return (rectPoly.at(1)+rectPoly.at(2))*0.5; + case aiBottomRight: return rectPoly.at(2); + case aiBottom: return (rectPoly.at(2)+rectPoly.at(3))*0.5; + case aiBottomLeft: return rectPoly.at(3); + case aiLeft: return (rectPoly.at(3)+rectPoly.at(0))*0.5; + } + + qDebug() << Q_FUNC_INFO << "invalid anchorId" << anchorId; + return QPointF(); +} + +/*! \internal + + Returns the point that must be given to the QPainter::drawText function (which expects the top + left point of the text rect), according to the position \a pos, the text bounding box \a rect and + the requested \a positionAlignment. + + For example, if \a positionAlignment is Qt::AlignLeft | Qt::AlignBottom the returned point + will be shifted upward by the height of \a rect, starting from \a pos. So if the text is finally + drawn at that point, the lower left corner of the resulting text rect is at \a pos. +*/ +QPointF QCPItemText::getTextDrawPoint(const QPointF &pos, const QRectF &rect, Qt::Alignment positionAlignment) const +{ + if (positionAlignment == 0 || positionAlignment == (Qt::AlignLeft|Qt::AlignTop)) + return pos; + + QPointF result = pos; // start at top left + if (positionAlignment.testFlag(Qt::AlignHCenter)) + result.rx() -= rect.width()/2.0; + else if (positionAlignment.testFlag(Qt::AlignRight)) + result.rx() -= rect.width(); + if (positionAlignment.testFlag(Qt::AlignVCenter)) + result.ry() -= rect.height()/2.0; + else if (positionAlignment.testFlag(Qt::AlignBottom)) + result.ry() -= rect.height(); + return result; +} + +/*! \internal + + Returns the font that should be used for drawing text. Returns mFont when the item is not selected + and mSelectedFont when it is. +*/ +QFont QCPItemText::mainFont() const +{ + return mSelected ? mSelectedFont : mFont; +} + +/*! \internal + + Returns the color that should be used for drawing text. Returns mColor when the item is not + selected and mSelectedColor when it is. +*/ +QColor QCPItemText::mainColor() const +{ + return mSelected ? mSelectedColor : mColor; +} + +/*! \internal + + Returns the pen that should be used for drawing lines. Returns mPen when the item is not selected + and mSelectedPen when it is. +*/ +QPen QCPItemText::mainPen() const +{ + return mSelected ? mSelectedPen : mPen; +} + +/*! \internal + + Returns the brush that should be used for drawing fills of the item. Returns mBrush when the item + is not selected and mSelectedBrush when it is. +*/ +QBrush QCPItemText::mainBrush() const +{ + return mSelected ? mSelectedBrush : mBrush; +} + + +//////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////// QCPItemEllipse +//////////////////////////////////////////////////////////////////////////////////////////////////// + +/*! \class QCPItemEllipse + \brief An ellipse + + \image html QCPItemEllipse.png "Ellipse example. Blue dotted circles are anchors, solid blue discs are positions." + + It has two positions, \a topLeft and \a bottomRight, which define the rect the ellipse will be drawn in. +*/ + +/*! + Creates an ellipse item and sets default values. + + The constructed item can be added to the plot with QCustomPlot::addItem. +*/ +QCPItemEllipse::QCPItemEllipse(QCustomPlot *parentPlot) : + QCPAbstractItem(parentPlot), + topLeft(createPosition(QLatin1String("topLeft"))), + bottomRight(createPosition(QLatin1String("bottomRight"))), + topLeftRim(createAnchor(QLatin1String("topLeftRim"), aiTopLeftRim)), + top(createAnchor(QLatin1String("top"), aiTop)), + topRightRim(createAnchor(QLatin1String("topRightRim"), aiTopRightRim)), + right(createAnchor(QLatin1String("right"), aiRight)), + bottomRightRim(createAnchor(QLatin1String("bottomRightRim"), aiBottomRightRim)), + bottom(createAnchor(QLatin1String("bottom"), aiBottom)), + bottomLeftRim(createAnchor(QLatin1String("bottomLeftRim"), aiBottomLeftRim)), + left(createAnchor(QLatin1String("left"), aiLeft)), + center(createAnchor(QLatin1String("center"), aiCenter)) +{ + topLeft->setCoords(0, 1); + bottomRight->setCoords(1, 0); + + setPen(QPen(Qt::black)); + setSelectedPen(QPen(Qt::blue, 2)); + setBrush(Qt::NoBrush); + setSelectedBrush(Qt::NoBrush); +} + +QCPItemEllipse::~QCPItemEllipse() +{ +} + +/*! + Sets the pen that will be used to draw the line of the ellipse + + \see setSelectedPen, setBrush +*/ +void QCPItemEllipse::setPen(const QPen &pen) +{ + mPen = pen; +} + +/*! + Sets the pen that will be used to draw the line of the ellipse when selected + + \see setPen, setSelected +*/ +void QCPItemEllipse::setSelectedPen(const QPen &pen) +{ + mSelectedPen = pen; +} + +/*! + Sets the brush that will be used to fill the ellipse. To disable filling, set \a brush to + Qt::NoBrush. + + \see setSelectedBrush, setPen +*/ +void QCPItemEllipse::setBrush(const QBrush &brush) +{ + mBrush = brush; +} + +/*! + Sets the brush that will be used to fill the ellipse when selected. To disable filling, set \a + brush to Qt::NoBrush. + + \see setBrush +*/ +void QCPItemEllipse::setSelectedBrush(const QBrush &brush) +{ + mSelectedBrush = brush; +} + +/* inherits documentation from base class */ +double QCPItemEllipse::selectTest(const QPointF &pos, bool onlySelectable, QVariant *details) const +{ + Q_UNUSED(details) + if (onlySelectable && !mSelectable) + return -1; + + double result = -1; + QPointF p1 = topLeft->pixelPoint(); + QPointF p2 = bottomRight->pixelPoint(); + QPointF center((p1+p2)/2.0); + double a = qAbs(p1.x()-p2.x())/2.0; + double b = qAbs(p1.y()-p2.y())/2.0; + double x = pos.x()-center.x(); + double y = pos.y()-center.y(); + + // distance to border: + double c = 1.0/qSqrt(x*x/(a*a)+y*y/(b*b)); + result = qAbs(c-1)*qSqrt(x*x+y*y); + // filled ellipse, allow click inside to count as hit: + if (result > mParentPlot->selectionTolerance()*0.99 && mBrush.style() != Qt::NoBrush && mBrush.color().alpha() != 0) + { + if (x*x/(a*a) + y*y/(b*b) <= 1) + result = mParentPlot->selectionTolerance()*0.99; + } + return result; +} + +/* inherits documentation from base class */ +void QCPItemEllipse::draw(QCPPainter *painter) +{ + QPointF p1 = topLeft->pixelPoint(); + QPointF p2 = bottomRight->pixelPoint(); + if (p1.toPoint() == p2.toPoint()) + return; + QRectF ellipseRect = QRectF(p1, p2).normalized(); + QRect clip = clipRect().adjusted(-mainPen().widthF(), -mainPen().widthF(), mainPen().widthF(), mainPen().widthF()); + if (ellipseRect.intersects(clip)) // only draw if bounding rect of ellipse is visible in cliprect + { + painter->setPen(mainPen()); + painter->setBrush(mainBrush()); +#ifdef __EXCEPTIONS + try // drawEllipse sometimes throws exceptions if ellipse is too big + { +#endif + painter->drawEllipse(ellipseRect); +#ifdef __EXCEPTIONS + } catch (...) + { + qDebug() << Q_FUNC_INFO << "Item too large for memory, setting invisible"; + setVisible(false); + } +#endif + } +} + +/* inherits documentation from base class */ +QPointF QCPItemEllipse::anchorPixelPoint(int anchorId) const +{ + QRectF rect = QRectF(topLeft->pixelPoint(), bottomRight->pixelPoint()); + switch (anchorId) + { + case aiTopLeftRim: return rect.center()+(rect.topLeft()-rect.center())*1/qSqrt(2); + case aiTop: return (rect.topLeft()+rect.topRight())*0.5; + case aiTopRightRim: return rect.center()+(rect.topRight()-rect.center())*1/qSqrt(2); + case aiRight: return (rect.topRight()+rect.bottomRight())*0.5; + case aiBottomRightRim: return rect.center()+(rect.bottomRight()-rect.center())*1/qSqrt(2); + case aiBottom: return (rect.bottomLeft()+rect.bottomRight())*0.5; + case aiBottomLeftRim: return rect.center()+(rect.bottomLeft()-rect.center())*1/qSqrt(2); + case aiLeft: return (rect.topLeft()+rect.bottomLeft())*0.5; + case aiCenter: return (rect.topLeft()+rect.bottomRight())*0.5; + } + + qDebug() << Q_FUNC_INFO << "invalid anchorId" << anchorId; + return QPointF(); +} + +/*! \internal + + Returns the pen that should be used for drawing lines. Returns mPen when the item is not selected + and mSelectedPen when it is. +*/ +QPen QCPItemEllipse::mainPen() const +{ + return mSelected ? mSelectedPen : mPen; +} + +/*! \internal + + Returns the brush that should be used for drawing fills of the item. Returns mBrush when the item + is not selected and mSelectedBrush when it is. +*/ +QBrush QCPItemEllipse::mainBrush() const +{ + return mSelected ? mSelectedBrush : mBrush; +} + + +//////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////// QCPItemPixmap +//////////////////////////////////////////////////////////////////////////////////////////////////// + +/*! \class QCPItemPixmap + \brief An arbitrary pixmap + + \image html QCPItemPixmap.png "Pixmap example. Blue dotted circles are anchors, solid blue discs are positions." + + It has two positions, \a topLeft and \a bottomRight, which define the rectangle the pixmap will + be drawn in. Depending on the scale setting (\ref setScaled), the pixmap will be either scaled to + fit the rectangle or be drawn aligned to the topLeft position. + + If scaling is enabled and \a topLeft is further to the bottom/right than \a bottomRight (as shown + on the right side of the example image), the pixmap will be flipped in the respective + orientations. +*/ + +/*! + Creates a rectangle item and sets default values. + + The constructed item can be added to the plot with QCustomPlot::addItem. +*/ +QCPItemPixmap::QCPItemPixmap(QCustomPlot *parentPlot) : + QCPAbstractItem(parentPlot), + topLeft(createPosition(QLatin1String("topLeft"))), + bottomRight(createPosition(QLatin1String("bottomRight"))), + top(createAnchor(QLatin1String("top"), aiTop)), + topRight(createAnchor(QLatin1String("topRight"), aiTopRight)), + right(createAnchor(QLatin1String("right"), aiRight)), + bottom(createAnchor(QLatin1String("bottom"), aiBottom)), + bottomLeft(createAnchor(QLatin1String("bottomLeft"), aiBottomLeft)), + left(createAnchor(QLatin1String("left"), aiLeft)), + mScaledPixmapInvalidated(true) +{ + topLeft->setCoords(0, 1); + bottomRight->setCoords(1, 0); + + setPen(Qt::NoPen); + setSelectedPen(QPen(Qt::blue)); + setScaled(false, Qt::KeepAspectRatio, Qt::SmoothTransformation); +} + +QCPItemPixmap::~QCPItemPixmap() +{ +} + +/*! + Sets the pixmap that will be displayed. +*/ +void QCPItemPixmap::setPixmap(const QPixmap &pixmap) +{ + mPixmap = pixmap; + mScaledPixmapInvalidated = true; + if (mPixmap.isNull()) + qDebug() << Q_FUNC_INFO << "pixmap is null"; +} + +/*! + Sets whether the pixmap will be scaled to fit the rectangle defined by the \a topLeft and \a + bottomRight positions. +*/ +void QCPItemPixmap::setScaled(bool scaled, Qt::AspectRatioMode aspectRatioMode, Qt::TransformationMode transformationMode) +{ + mScaled = scaled; + mAspectRatioMode = aspectRatioMode; + mTransformationMode = transformationMode; + mScaledPixmapInvalidated = true; +} + +/*! + Sets the pen that will be used to draw a border around the pixmap. + + \see setSelectedPen, setBrush +*/ +void QCPItemPixmap::setPen(const QPen &pen) +{ + mPen = pen; +} + +/*! + Sets the pen that will be used to draw a border around the pixmap when selected + + \see setPen, setSelected +*/ +void QCPItemPixmap::setSelectedPen(const QPen &pen) +{ + mSelectedPen = pen; +} + +/* inherits documentation from base class */ +double QCPItemPixmap::selectTest(const QPointF &pos, bool onlySelectable, QVariant *details) const +{ + Q_UNUSED(details) + if (onlySelectable && !mSelectable) + return -1; + + return rectSelectTest(getFinalRect(), pos, true); +} + +/* inherits documentation from base class */ +void QCPItemPixmap::draw(QCPPainter *painter) +{ + bool flipHorz = false; + bool flipVert = false; + QRect rect = getFinalRect(&flipHorz, &flipVert); + double clipPad = mainPen().style() == Qt::NoPen ? 0 : mainPen().widthF(); + QRect boundingRect = rect.adjusted(-clipPad, -clipPad, clipPad, clipPad); + if (boundingRect.intersects(clipRect())) + { + updateScaledPixmap(rect, flipHorz, flipVert); + painter->drawPixmap(rect.topLeft(), mScaled ? mScaledPixmap : mPixmap); + QPen pen = mainPen(); + if (pen.style() != Qt::NoPen) + { + painter->setPen(pen); + painter->setBrush(Qt::NoBrush); + painter->drawRect(rect); + } + } +} + +/* inherits documentation from base class */ +QPointF QCPItemPixmap::anchorPixelPoint(int anchorId) const +{ + bool flipHorz; + bool flipVert; + QRect rect = getFinalRect(&flipHorz, &flipVert); + // we actually want denormal rects (negative width/height) here, so restore + // the flipped state: + if (flipHorz) + rect.adjust(rect.width(), 0, -rect.width(), 0); + if (flipVert) + rect.adjust(0, rect.height(), 0, -rect.height()); + + switch (anchorId) + { + case aiTop: return (rect.topLeft()+rect.topRight())*0.5; + case aiTopRight: return rect.topRight(); + case aiRight: return (rect.topRight()+rect.bottomRight())*0.5; + case aiBottom: return (rect.bottomLeft()+rect.bottomRight())*0.5; + case aiBottomLeft: return rect.bottomLeft(); + case aiLeft: return (rect.topLeft()+rect.bottomLeft())*0.5;; + } + + qDebug() << Q_FUNC_INFO << "invalid anchorId" << anchorId; + return QPointF(); +} + +/*! \internal + + Creates the buffered scaled image (\a mScaledPixmap) to fit the specified \a finalRect. The + parameters \a flipHorz and \a flipVert control whether the resulting image shall be flipped + horizontally or vertically. (This is used when \a topLeft is further to the bottom/right than \a + bottomRight.) + + This function only creates the scaled pixmap when the buffered pixmap has a different size than + the expected result, so calling this function repeatedly, e.g. in the \ref draw function, does + not cause expensive rescaling every time. + + If scaling is disabled, sets mScaledPixmap to a null QPixmap. +*/ +void QCPItemPixmap::updateScaledPixmap(QRect finalRect, bool flipHorz, bool flipVert) +{ + if (mPixmap.isNull()) + return; + + if (mScaled) + { + if (finalRect.isNull()) + finalRect = getFinalRect(&flipHorz, &flipVert); + if (mScaledPixmapInvalidated || finalRect.size() != mScaledPixmap.size()) + { + mScaledPixmap = mPixmap.scaled(finalRect.size(), mAspectRatioMode, mTransformationMode); + if (flipHorz || flipVert) + mScaledPixmap = QPixmap::fromImage(mScaledPixmap.toImage().mirrored(flipHorz, flipVert)); + } + } else if (!mScaledPixmap.isNull()) + mScaledPixmap = QPixmap(); + mScaledPixmapInvalidated = false; +} + +/*! \internal + + Returns the final (tight) rect the pixmap is drawn in, depending on the current item positions + and scaling settings. + + The output parameters \a flippedHorz and \a flippedVert return whether the pixmap should be drawn + flipped horizontally or vertically in the returned rect. (The returned rect itself is always + normalized, i.e. the top left corner of the rect is actually further to the top/left than the + bottom right corner). This is the case when the item position \a topLeft is further to the + bottom/right than \a bottomRight. + + If scaling is disabled, returns a rect with size of the original pixmap and the top left corner + aligned with the item position \a topLeft. The position \a bottomRight is ignored. +*/ +QRect QCPItemPixmap::getFinalRect(bool *flippedHorz, bool *flippedVert) const +{ + QRect result; + bool flipHorz = false; + bool flipVert = false; + QPoint p1 = topLeft->pixelPoint().toPoint(); + QPoint p2 = bottomRight->pixelPoint().toPoint(); + if (p1 == p2) + return QRect(p1, QSize(0, 0)); + if (mScaled) + { + QSize newSize = QSize(p2.x()-p1.x(), p2.y()-p1.y()); + QPoint topLeft = p1; + if (newSize.width() < 0) + { + flipHorz = true; + newSize.rwidth() *= -1; + topLeft.setX(p2.x()); + } + if (newSize.height() < 0) + { + flipVert = true; + newSize.rheight() *= -1; + topLeft.setY(p2.y()); + } + QSize scaledSize = mPixmap.size(); + scaledSize.scale(newSize, mAspectRatioMode); + result = QRect(topLeft, scaledSize); + } else + { + result = QRect(p1, mPixmap.size()); + } + if (flippedHorz) + *flippedHorz = flipHorz; + if (flippedVert) + *flippedVert = flipVert; + return result; +} + +/*! \internal + + Returns the pen that should be used for drawing lines. Returns mPen when the item is not selected + and mSelectedPen when it is. +*/ +QPen QCPItemPixmap::mainPen() const +{ + return mSelected ? mSelectedPen : mPen; +} + + +//////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////// QCPItemTracer +//////////////////////////////////////////////////////////////////////////////////////////////////// + +/*! \class QCPItemTracer + \brief Item that sticks to QCPGraph data points + + \image html QCPItemTracer.png "Tracer example. Blue dotted circles are anchors, solid blue discs are positions." + + The tracer can be connected with a QCPGraph via \ref setGraph. Then it will automatically adopt + the coordinate axes of the graph and update its \a position to be on the graph's data. This means + the key stays controllable via \ref setGraphKey, but the value will follow the graph data. If a + QCPGraph is connected, note that setting the coordinates of the tracer item directly via \a + position will have no effect because they will be overriden in the next redraw (this is when the + coordinate update happens). + + If the specified key in \ref setGraphKey is outside the key bounds of the graph, the tracer will + stay at the corresponding end of the graph. + + With \ref setInterpolating you may specify whether the tracer may only stay exactly on data + points or whether it interpolates data points linearly, if given a key that lies between two data + points of the graph. + + The tracer has different visual styles, see \ref setStyle. It is also possible to make the tracer + have no own visual appearance (set the style to \ref tsNone), and just connect other item + positions to the tracer \a position (used as an anchor) via \ref + QCPItemPosition::setParentAnchor. + + \note The tracer position is only automatically updated upon redraws. So when the data of the + graph changes and immediately afterwards (without a redraw) the a position coordinates of the + tracer are retrieved, they will not reflect the updated data of the graph. In this case \ref + updatePosition must be called manually, prior to reading the tracer coordinates. +*/ + +/*! + Creates a tracer item and sets default values. + + The constructed item can be added to the plot with QCustomPlot::addItem. +*/ +QCPItemTracer::QCPItemTracer(QCustomPlot *parentPlot) : + QCPAbstractItem(parentPlot), + position(createPosition(QLatin1String("position"))), + mGraph(0) +{ + position->setCoords(0, 0); + + setBrush(Qt::NoBrush); + setSelectedBrush(Qt::NoBrush); + setPen(QPen(Qt::black)); + setSelectedPen(QPen(Qt::blue, 2)); + setStyle(tsCrosshair); + setSize(6); + setInterpolating(false); + setGraphKey(0); +} + +QCPItemTracer::~QCPItemTracer() +{ +} + +/*! + Sets the pen that will be used to draw the line of the tracer + + \see setSelectedPen, setBrush +*/ +void QCPItemTracer::setPen(const QPen &pen) +{ + mPen = pen; +} + +/*! + Sets the pen that will be used to draw the line of the tracer when selected + + \see setPen, setSelected +*/ +void QCPItemTracer::setSelectedPen(const QPen &pen) +{ + mSelectedPen = pen; +} + +/*! + Sets the brush that will be used to draw any fills of the tracer + + \see setSelectedBrush, setPen +*/ +void QCPItemTracer::setBrush(const QBrush &brush) +{ + mBrush = brush; +} + +/*! + Sets the brush that will be used to draw any fills of the tracer, when selected. + + \see setBrush, setSelected +*/ +void QCPItemTracer::setSelectedBrush(const QBrush &brush) +{ + mSelectedBrush = brush; +} + +/*! + Sets the size of the tracer in pixels, if the style supports setting a size (e.g. \ref tsSquare + does, \ref tsCrosshair does not). +*/ +void QCPItemTracer::setSize(double size) +{ + mSize = size; +} + +/*! + Sets the style/visual appearance of the tracer. + + If you only want to use the tracer \a position as an anchor for other items, set \a style to + \ref tsNone. +*/ +void QCPItemTracer::setStyle(QCPItemTracer::TracerStyle style) +{ + mStyle = style; +} + +/*! + Sets the QCPGraph this tracer sticks to. The tracer \a position will be set to type + QCPItemPosition::ptPlotCoords and the axes will be set to the axes of \a graph. + + To free the tracer from any graph, set \a graph to 0. The tracer \a position can then be placed + freely like any other item position. This is the state the tracer will assume when its graph gets + deleted while still attached to it. + + \see setGraphKey +*/ +void QCPItemTracer::setGraph(QCPGraph *graph) +{ + if (graph) + { + if (graph->parentPlot() == mParentPlot) + { + position->setType(QCPItemPosition::ptPlotCoords); + position->setAxes(graph->keyAxis(), graph->valueAxis()); + mGraph = graph; + updatePosition(); + } else + qDebug() << Q_FUNC_INFO << "graph isn't in same QCustomPlot instance as this item"; + } else + { + mGraph = 0; + } +} + +/*! + Sets the key of the graph's data point the tracer will be positioned at. This is the only free + coordinate of a tracer when attached to a graph. + + Depending on \ref setInterpolating, the tracer will be either positioned on the data point + closest to \a key, or will stay exactly at \a key and interpolate the value linearly. + + \see setGraph, setInterpolating +*/ +void QCPItemTracer::setGraphKey(double key) +{ + mGraphKey = key; +} + +/*! + Sets whether the value of the graph's data points shall be interpolated, when positioning the + tracer. + + If \a enabled is set to false and a key is given with \ref setGraphKey, the tracer is placed on + the data point of the graph which is closest to the key, but which is not necessarily exactly + there. If \a enabled is true, the tracer will be positioned exactly at the specified key, and + the appropriate value will be interpolated from the graph's data points linearly. + + \see setGraph, setGraphKey +*/ +void QCPItemTracer::setInterpolating(bool enabled) +{ + mInterpolating = enabled; +} + +/* inherits documentation from base class */ +double QCPItemTracer::selectTest(const QPointF &pos, bool onlySelectable, QVariant *details) const +{ + Q_UNUSED(details) + if (onlySelectable && !mSelectable) + return -1; + + QPointF center(position->pixelPoint()); + double w = mSize/2.0; + QRect clip = clipRect(); + switch (mStyle) + { + case tsNone: return -1; + case tsPlus: + { + if (clipRect().intersects(QRectF(center-QPointF(w, w), center+QPointF(w, w)).toRect())) + return qSqrt(qMin(distSqrToLine(center+QPointF(-w, 0), center+QPointF(w, 0), pos), + distSqrToLine(center+QPointF(0, -w), center+QPointF(0, w), pos))); + break; + } + case tsCrosshair: + { + return qSqrt(qMin(distSqrToLine(QPointF(clip.left(), center.y()), QPointF(clip.right(), center.y()), pos), + distSqrToLine(QPointF(center.x(), clip.top()), QPointF(center.x(), clip.bottom()), pos))); + } + case tsCircle: + { + if (clip.intersects(QRectF(center-QPointF(w, w), center+QPointF(w, w)).toRect())) + { + // distance to border: + double centerDist = QVector2D(center-pos).length(); + double circleLine = w; + double result = qAbs(centerDist-circleLine); + // filled ellipse, allow click inside to count as hit: + if (result > mParentPlot->selectionTolerance()*0.99 && mBrush.style() != Qt::NoBrush && mBrush.color().alpha() != 0) + { + if (centerDist <= circleLine) + result = mParentPlot->selectionTolerance()*0.99; + } + return result; + } + break; + } + case tsSquare: + { + if (clip.intersects(QRectF(center-QPointF(w, w), center+QPointF(w, w)).toRect())) + { + QRectF rect = QRectF(center-QPointF(w, w), center+QPointF(w, w)); + bool filledRect = mBrush.style() != Qt::NoBrush && mBrush.color().alpha() != 0; + return rectSelectTest(rect, pos, filledRect); + } + break; + } + } + return -1; +} + +/* inherits documentation from base class */ +void QCPItemTracer::draw(QCPPainter *painter) +{ + updatePosition(); + if (mStyle == tsNone) + return; + + painter->setPen(mainPen()); + painter->setBrush(mainBrush()); + QPointF center(position->pixelPoint()); + double w = mSize/2.0; + QRect clip = clipRect(); + switch (mStyle) + { + case tsNone: return; + case tsPlus: + { + if (clip.intersects(QRectF(center-QPointF(w, w), center+QPointF(w, w)).toRect())) + { + painter->drawLine(QLineF(center+QPointF(-w, 0), center+QPointF(w, 0))); + painter->drawLine(QLineF(center+QPointF(0, -w), center+QPointF(0, w))); + } + break; + } + case tsCrosshair: + { + if (center.y() > clip.top() && center.y() < clip.bottom()) + painter->drawLine(QLineF(clip.left(), center.y(), clip.right(), center.y())); + if (center.x() > clip.left() && center.x() < clip.right()) + painter->drawLine(QLineF(center.x(), clip.top(), center.x(), clip.bottom())); + break; + } + case tsCircle: + { + if (clip.intersects(QRectF(center-QPointF(w, w), center+QPointF(w, w)).toRect())) + painter->drawEllipse(center, w, w); + break; + } + case tsSquare: + { + if (clip.intersects(QRectF(center-QPointF(w, w), center+QPointF(w, w)).toRect())) + painter->drawRect(QRectF(center-QPointF(w, w), center+QPointF(w, w))); + break; + } + } +} + +/*! + If the tracer is connected with a graph (\ref setGraph), this function updates the tracer's \a + position to reside on the graph data, depending on the configured key (\ref setGraphKey). + + It is called automatically on every redraw and normally doesn't need to be called manually. One + exception is when you want to read the tracer coordinates via \a position and are not sure that + the graph's data (or the tracer key with \ref setGraphKey) hasn't changed since the last redraw. + In that situation, call this function before accessing \a position, to make sure you don't get + out-of-date coordinates. + + If there is no graph set on this tracer, this function does nothing. +*/ +void QCPItemTracer::updatePosition() +{ + if (mGraph) + { + if (mParentPlot->hasPlottable(mGraph)) + { + if (mGraph->data()->size() > 1) + { + QCPDataMap::const_iterator first = mGraph->data()->constBegin(); + QCPDataMap::const_iterator last = mGraph->data()->constEnd()-1; + if (mGraphKey < first.key()) + position->setCoords(first.key(), first.value().value); + else if (mGraphKey > last.key()) + position->setCoords(last.key(), last.value().value); + else + { + QCPDataMap::const_iterator it = mGraph->data()->lowerBound(mGraphKey); + if (it != first) // mGraphKey is somewhere between iterators + { + QCPDataMap::const_iterator prevIt = it-1; + if (mInterpolating) + { + // interpolate between iterators around mGraphKey: + double slope = 0; + if (!qFuzzyCompare((double)it.key(), (double)prevIt.key())) + slope = (it.value().value-prevIt.value().value)/(it.key()-prevIt.key()); + position->setCoords(mGraphKey, (mGraphKey-prevIt.key())*slope+prevIt.value().value); + } else + { + // find iterator with key closest to mGraphKey: + if (mGraphKey < (prevIt.key()+it.key())*0.5) + it = prevIt; + position->setCoords(it.key(), it.value().value); + } + } else // mGraphKey is exactly on first iterator + position->setCoords(it.key(), it.value().value); + } + } else if (mGraph->data()->size() == 1) + { + QCPDataMap::const_iterator it = mGraph->data()->constBegin(); + position->setCoords(it.key(), it.value().value); + } else + qDebug() << Q_FUNC_INFO << "graph has no data"; + } else + qDebug() << Q_FUNC_INFO << "graph not contained in QCustomPlot instance (anymore)"; + } +} + +/*! \internal + + Returns the pen that should be used for drawing lines. Returns mPen when the item is not selected + and mSelectedPen when it is. +*/ +QPen QCPItemTracer::mainPen() const +{ + return mSelected ? mSelectedPen : mPen; +} + +/*! \internal + + Returns the brush that should be used for drawing fills of the item. Returns mBrush when the item + is not selected and mSelectedBrush when it is. +*/ +QBrush QCPItemTracer::mainBrush() const +{ + return mSelected ? mSelectedBrush : mBrush; +} + + +//////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////// QCPItemBracket +//////////////////////////////////////////////////////////////////////////////////////////////////// + +/*! \class QCPItemBracket + \brief A bracket for referencing/highlighting certain parts in the plot. + + \image html QCPItemBracket.png "Bracket example. Blue dotted circles are anchors, solid blue discs are positions." + + It has two positions, \a left and \a right, which define the span of the bracket. If \a left is + actually farther to the left than \a right, the bracket is opened to the bottom, as shown in the + example image. + + The bracket supports multiple styles via \ref setStyle. The length, i.e. how far the bracket + stretches away from the embraced span, can be controlled with \ref setLength. + + \image html QCPItemBracket-length.png +
    Demonstrating the effect of different values for \ref setLength, for styles \ref + bsCalligraphic and \ref bsSquare. Anchors and positions are displayed for reference.
    + + It provides an anchor \a center, to allow connection of other items, e.g. an arrow (QCPItemLine + or QCPItemCurve) or a text label (QCPItemText), to the bracket. +*/ + +/*! + Creates a bracket item and sets default values. + + The constructed item can be added to the plot with QCustomPlot::addItem. +*/ +QCPItemBracket::QCPItemBracket(QCustomPlot *parentPlot) : + QCPAbstractItem(parentPlot), + left(createPosition(QLatin1String("left"))), + right(createPosition(QLatin1String("right"))), + center(createAnchor(QLatin1String("center"), aiCenter)) +{ + left->setCoords(0, 0); + right->setCoords(1, 1); + + setPen(QPen(Qt::black)); + setSelectedPen(QPen(Qt::blue, 2)); + setLength(8); + setStyle(bsCalligraphic); +} + +QCPItemBracket::~QCPItemBracket() +{ +} + +/*! + Sets the pen that will be used to draw the bracket. + + Note that when the style is \ref bsCalligraphic, only the color will be taken from the pen, the + stroke and width are ignored. To change the apparent stroke width of a calligraphic bracket, use + \ref setLength, which has a similar effect. + + \see setSelectedPen +*/ +void QCPItemBracket::setPen(const QPen &pen) +{ + mPen = pen; +} + +/*! + Sets the pen that will be used to draw the bracket when selected + + \see setPen, setSelected +*/ +void QCPItemBracket::setSelectedPen(const QPen &pen) +{ + mSelectedPen = pen; +} + +/*! + Sets the \a length in pixels how far the bracket extends in the direction towards the embraced + span of the bracket (i.e. perpendicular to the left-right-direction) + + \image html QCPItemBracket-length.png +
    Demonstrating the effect of different values for \ref setLength, for styles \ref + bsCalligraphic and \ref bsSquare. Anchors and positions are displayed for reference.
    +*/ +void QCPItemBracket::setLength(double length) +{ + mLength = length; +} + +/*! + Sets the style of the bracket, i.e. the shape/visual appearance. + + \see setPen +*/ +void QCPItemBracket::setStyle(QCPItemBracket::BracketStyle style) +{ + mStyle = style; +} + +/* inherits documentation from base class */ +double QCPItemBracket::selectTest(const QPointF &pos, bool onlySelectable, QVariant *details) const +{ + Q_UNUSED(details) + if (onlySelectable && !mSelectable) + return -1; + + QVector2D leftVec(left->pixelPoint()); + QVector2D rightVec(right->pixelPoint()); + if (leftVec.toPoint() == rightVec.toPoint()) + return -1; + + QVector2D widthVec = (rightVec-leftVec)*0.5f; + QVector2D lengthVec(-widthVec.y(), widthVec.x()); + lengthVec = lengthVec.normalized()*mLength; + QVector2D centerVec = (rightVec+leftVec)*0.5f-lengthVec; + + switch (mStyle) + { + case QCPItemBracket::bsSquare: + case QCPItemBracket::bsRound: + { + double a = distSqrToLine((centerVec-widthVec).toPointF(), (centerVec+widthVec).toPointF(), pos); + double b = distSqrToLine((centerVec-widthVec+lengthVec).toPointF(), (centerVec-widthVec).toPointF(), pos); + double c = distSqrToLine((centerVec+widthVec+lengthVec).toPointF(), (centerVec+widthVec).toPointF(), pos); + return qSqrt(qMin(qMin(a, b), c)); + } + case QCPItemBracket::bsCurly: + case QCPItemBracket::bsCalligraphic: + { + double a = distSqrToLine((centerVec-widthVec*0.75f+lengthVec*0.15f).toPointF(), (centerVec+lengthVec*0.3f).toPointF(), pos); + double b = distSqrToLine((centerVec-widthVec+lengthVec*0.7f).toPointF(), (centerVec-widthVec*0.75f+lengthVec*0.15f).toPointF(), pos); + double c = distSqrToLine((centerVec+widthVec*0.75f+lengthVec*0.15f).toPointF(), (centerVec+lengthVec*0.3f).toPointF(), pos); + double d = distSqrToLine((centerVec+widthVec+lengthVec*0.7f).toPointF(), (centerVec+widthVec*0.75f+lengthVec*0.15f).toPointF(), pos); + return qSqrt(qMin(qMin(a, b), qMin(c, d))); + } + } + return -1; +} + +/* inherits documentation from base class */ +void QCPItemBracket::draw(QCPPainter *painter) +{ + QVector2D leftVec(left->pixelPoint()); + QVector2D rightVec(right->pixelPoint()); + if (leftVec.toPoint() == rightVec.toPoint()) + return; + + QVector2D widthVec = (rightVec-leftVec)*0.5f; + QVector2D lengthVec(-widthVec.y(), widthVec.x()); + lengthVec = lengthVec.normalized()*mLength; + QVector2D centerVec = (rightVec+leftVec)*0.5f-lengthVec; + + QPolygon boundingPoly; + boundingPoly << leftVec.toPoint() << rightVec.toPoint() + << (rightVec-lengthVec).toPoint() << (leftVec-lengthVec).toPoint(); + QRect clip = clipRect().adjusted(-mainPen().widthF(), -mainPen().widthF(), mainPen().widthF(), mainPen().widthF()); + if (clip.intersects(boundingPoly.boundingRect())) + { + painter->setPen(mainPen()); + switch (mStyle) + { + case bsSquare: + { + painter->drawLine((centerVec+widthVec).toPointF(), (centerVec-widthVec).toPointF()); + painter->drawLine((centerVec+widthVec).toPointF(), (centerVec+widthVec+lengthVec).toPointF()); + painter->drawLine((centerVec-widthVec).toPointF(), (centerVec-widthVec+lengthVec).toPointF()); + break; + } + case bsRound: + { + painter->setBrush(Qt::NoBrush); + QPainterPath path; + path.moveTo((centerVec+widthVec+lengthVec).toPointF()); + path.cubicTo((centerVec+widthVec).toPointF(), (centerVec+widthVec).toPointF(), centerVec.toPointF()); + path.cubicTo((centerVec-widthVec).toPointF(), (centerVec-widthVec).toPointF(), (centerVec-widthVec+lengthVec).toPointF()); + painter->drawPath(path); + break; + } + case bsCurly: + { + painter->setBrush(Qt::NoBrush); + QPainterPath path; + path.moveTo((centerVec+widthVec+lengthVec).toPointF()); + path.cubicTo((centerVec+widthVec-lengthVec*0.8f).toPointF(), (centerVec+0.4f*widthVec+lengthVec).toPointF(), centerVec.toPointF()); + path.cubicTo((centerVec-0.4f*widthVec+lengthVec).toPointF(), (centerVec-widthVec-lengthVec*0.8f).toPointF(), (centerVec-widthVec+lengthVec).toPointF()); + painter->drawPath(path); + break; + } + case bsCalligraphic: + { + painter->setPen(Qt::NoPen); + painter->setBrush(QBrush(mainPen().color())); + QPainterPath path; + path.moveTo((centerVec+widthVec+lengthVec).toPointF()); + + path.cubicTo((centerVec+widthVec-lengthVec*0.8f).toPointF(), (centerVec+0.4f*widthVec+0.8f*lengthVec).toPointF(), centerVec.toPointF()); + path.cubicTo((centerVec-0.4f*widthVec+0.8f*lengthVec).toPointF(), (centerVec-widthVec-lengthVec*0.8f).toPointF(), (centerVec-widthVec+lengthVec).toPointF()); + + path.cubicTo((centerVec-widthVec-lengthVec*0.5f).toPointF(), (centerVec-0.2f*widthVec+1.2f*lengthVec).toPointF(), (centerVec+lengthVec*0.2f).toPointF()); + path.cubicTo((centerVec+0.2f*widthVec+1.2f*lengthVec).toPointF(), (centerVec+widthVec-lengthVec*0.5f).toPointF(), (centerVec+widthVec+lengthVec).toPointF()); + + painter->drawPath(path); + break; + } + } + } +} + +/* inherits documentation from base class */ +QPointF QCPItemBracket::anchorPixelPoint(int anchorId) const +{ + QVector2D leftVec(left->pixelPoint()); + QVector2D rightVec(right->pixelPoint()); + if (leftVec.toPoint() == rightVec.toPoint()) + return leftVec.toPointF(); + + QVector2D widthVec = (rightVec-leftVec)*0.5f; + QVector2D lengthVec(-widthVec.y(), widthVec.x()); + lengthVec = lengthVec.normalized()*mLength; + QVector2D centerVec = (rightVec+leftVec)*0.5f-lengthVec; + + switch (anchorId) + { + case aiCenter: + return centerVec.toPointF(); + } + qDebug() << Q_FUNC_INFO << "invalid anchorId" << anchorId; + return QPointF(); +} + +/*! \internal + + Returns the pen that should be used for drawing lines. Returns mPen when the + item is not selected and mSelectedPen when it is. +*/ +QPen QCPItemBracket::mainPen() const +{ + return mSelected ? mSelectedPen : mPen; +} + diff --git a/Desktop Interface/qcustomplot.h b/Desktop Interface/qcustomplot.h new file mode 100644 index 00000000..bb998f1c --- /dev/null +++ b/Desktop Interface/qcustomplot.h @@ -0,0 +1,3768 @@ +/*************************************************************************** +** ** +** QCustomPlot, an easy to use, modern plotting widget for Qt ** +** Copyright (C) 2011-2015 Emanuel Eichhammer ** +** ** +** This program is free software: you can redistribute it and/or modify ** +** it under the terms of the GNU General Public License as published by ** +** the Free Software Foundation, either version 3 of the License, or ** +** (at your option) any later version. ** +** ** +** This program is distributed in the hope that it will be useful, ** +** but WITHOUT ANY WARRANTY; without even the implied warranty of ** +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** +** GNU General Public License for more details. ** +** ** +** You should have received a copy of the GNU General Public License ** +** along with this program. If not, see http://www.gnu.org/licenses/. ** +** ** +**************************************************************************** +** Author: Emanuel Eichhammer ** +** Website/Contact: http://www.qcustomplot.com/ ** +** Date: 22.12.15 ** +** Version: 1.3.2 ** +****************************************************************************/ + +#ifndef QCUSTOMPLOT_H +#define QCUSTOMPLOT_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0) +# include +# include +# include +#else +# include +# include +#endif + +class QCPPainter; +class QCustomPlot; +class QCPLayerable; +class QCPLayoutElement; +class QCPLayout; +class QCPAxis; +class QCPAxisRect; +class QCPAxisPainterPrivate; +class QCPAbstractPlottable; +class QCPGraph; +class QCPAbstractItem; +class QCPItemPosition; +class QCPLayer; +class QCPPlotTitle; +class QCPLegend; +class QCPAbstractLegendItem; +class QCPColorMap; +class QCPColorScale; +class QCPBars; + + +/*! \file */ + + +// decl definitions for shared library compilation/usage: +#if defined(QCUSTOMPLOT_COMPILE_LIBRARY) +# define QCP_LIB_DECL Q_DECL_EXPORT +#elif defined(QCUSTOMPLOT_USE_LIBRARY) +# define QCP_LIB_DECL Q_DECL_IMPORT +#else +# define QCP_LIB_DECL +#endif + +/*! + The QCP Namespace contains general enums and QFlags used throughout the QCustomPlot library +*/ +namespace QCP +{ +/*! + Defines the sides of a rectangular entity to which margins can be applied. + + \see QCPLayoutElement::setAutoMargins, QCPAxisRect::setAutoMargins +*/ +enum MarginSide { msLeft = 0x01 ///< 0x01 left margin + ,msRight = 0x02 ///< 0x02 right margin + ,msTop = 0x04 ///< 0x04 top margin + ,msBottom = 0x08 ///< 0x08 bottom margin + ,msAll = 0xFF ///< 0xFF all margins + ,msNone = 0x00 ///< 0x00 no margin + }; +Q_DECLARE_FLAGS(MarginSides, MarginSide) + +/*! + Defines what objects of a plot can be forcibly drawn antialiased/not antialiased. If an object is + neither forcibly drawn antialiased nor forcibly drawn not antialiased, it is up to the respective + element how it is drawn. Typically it provides a \a setAntialiased function for this. + + \c AntialiasedElements is a flag of or-combined elements of this enum type. + + \see QCustomPlot::setAntialiasedElements, QCustomPlot::setNotAntialiasedElements +*/ +enum AntialiasedElement { aeAxes = 0x0001 ///< 0x0001 Axis base line and tick marks + ,aeGrid = 0x0002 ///< 0x0002 Grid lines + ,aeSubGrid = 0x0004 ///< 0x0004 Sub grid lines + ,aeLegend = 0x0008 ///< 0x0008 Legend box + ,aeLegendItems = 0x0010 ///< 0x0010 Legend items + ,aePlottables = 0x0020 ///< 0x0020 Main lines of plottables (excluding error bars, see element \ref aeErrorBars) + ,aeItems = 0x0040 ///< 0x0040 Main lines of items + ,aeScatters = 0x0080 ///< 0x0080 Scatter symbols of plottables (excluding scatter symbols of type ssPixmap) + ,aeErrorBars = 0x0100 ///< 0x0100 Error bars + ,aeFills = 0x0200 ///< 0x0200 Borders of fills (e.g. under or between graphs) + ,aeZeroLine = 0x0400 ///< 0x0400 Zero-lines, see \ref QCPGrid::setZeroLinePen + ,aeAll = 0xFFFF ///< 0xFFFF All elements + ,aeNone = 0x0000 ///< 0x0000 No elements + }; +Q_DECLARE_FLAGS(AntialiasedElements, AntialiasedElement) + +/*! + Defines plotting hints that control various aspects of the quality and speed of plotting. + + \see QCustomPlot::setPlottingHints +*/ +enum PlottingHint { phNone = 0x000 ///< 0x000 No hints are set + ,phFastPolylines = 0x001 ///< 0x001 Graph/Curve lines are drawn with a faster method. This reduces the quality + ///< especially of the line segment joins. (Only relevant for solid line pens.) + ,phForceRepaint = 0x002 ///< 0x002 causes an immediate repaint() instead of a soft update() when QCustomPlot::replot() is called with parameter \ref QCustomPlot::rpHint. + ///< This is set by default to prevent the plot from freezing on fast consecutive replots (e.g. user drags ranges with mouse). + ,phCacheLabels = 0x004 ///< 0x004 axis (tick) labels will be cached as pixmaps, increasing replot performance. + }; +Q_DECLARE_FLAGS(PlottingHints, PlottingHint) + +/*! + Defines the mouse interactions possible with QCustomPlot. + + \c Interactions is a flag of or-combined elements of this enum type. + + \see QCustomPlot::setInteractions +*/ +enum Interaction { iRangeDrag = 0x001 ///< 0x001 Axis ranges are draggable (see \ref QCPAxisRect::setRangeDrag, \ref QCPAxisRect::setRangeDragAxes) + ,iRangeZoom = 0x002 ///< 0x002 Axis ranges are zoomable with the mouse wheel (see \ref QCPAxisRect::setRangeZoom, \ref QCPAxisRect::setRangeZoomAxes) + ,iMultiSelect = 0x004 ///< 0x004 The user can select multiple objects by holding the modifier set by \ref QCustomPlot::setMultiSelectModifier while clicking + ,iSelectPlottables = 0x008 ///< 0x008 Plottables are selectable (e.g. graphs, curves, bars,... see QCPAbstractPlottable) + ,iSelectAxes = 0x010 ///< 0x010 Axes are selectable (or parts of them, see QCPAxis::setSelectableParts) + ,iSelectLegend = 0x020 ///< 0x020 Legends are selectable (or their child items, see QCPLegend::setSelectableParts) + ,iSelectItems = 0x040 ///< 0x040 Items are selectable (Rectangles, Arrows, Textitems, etc. see \ref QCPAbstractItem) + ,iSelectOther = 0x080 ///< 0x080 All other objects are selectable (e.g. your own derived layerables, the plot title,...) + }; +Q_DECLARE_FLAGS(Interactions, Interaction) + +/*! \internal + + Returns whether the specified \a value is considered an invalid data value for plottables (i.e. + is \e nan or \e +/-inf). This function is used to check data validity upon replots, when the + compiler flag \c QCUSTOMPLOT_CHECK_DATA is set. +*/ +inline bool isInvalidData(double value) +{ + return qIsNaN(value) || qIsInf(value); +} + +/*! \internal + \overload + + Checks two arguments instead of one. +*/ +inline bool isInvalidData(double value1, double value2) +{ + return isInvalidData(value1) || isInvalidData(value2); +} + +/*! \internal + + Sets the specified \a side of \a margins to \a value + + \see getMarginValue +*/ +inline void setMarginValue(QMargins &margins, QCP::MarginSide side, int value) +{ + switch (side) + { + case QCP::msLeft: margins.setLeft(value); break; + case QCP::msRight: margins.setRight(value); break; + case QCP::msTop: margins.setTop(value); break; + case QCP::msBottom: margins.setBottom(value); break; + case QCP::msAll: margins = QMargins(value, value, value, value); break; + default: break; + } +} + +/*! \internal + + Returns the value of the specified \a side of \a margins. If \a side is \ref QCP::msNone or + \ref QCP::msAll, returns 0. + + \see setMarginValue +*/ +inline int getMarginValue(const QMargins &margins, QCP::MarginSide side) +{ + switch (side) + { + case QCP::msLeft: return margins.left(); + case QCP::msRight: return margins.right(); + case QCP::msTop: return margins.top(); + case QCP::msBottom: return margins.bottom(); + default: break; + } + return 0; +} + +} // end of namespace QCP + +Q_DECLARE_OPERATORS_FOR_FLAGS(QCP::AntialiasedElements) +Q_DECLARE_OPERATORS_FOR_FLAGS(QCP::PlottingHints) +Q_DECLARE_OPERATORS_FOR_FLAGS(QCP::MarginSides) +Q_DECLARE_OPERATORS_FOR_FLAGS(QCP::Interactions) + + +class QCP_LIB_DECL QCPScatterStyle +{ + Q_GADGET +public: + /*! + Defines the shape used for scatter points. + + On plottables/items that draw scatters, the sizes of these visualizations (with exception of + \ref ssDot and \ref ssPixmap) can be controlled with the \ref setSize function. Scatters are + drawn with the pen and brush specified with \ref setPen and \ref setBrush. + */ + Q_ENUMS(ScatterShape) + enum ScatterShape { ssNone ///< no scatter symbols are drawn (e.g. in QCPGraph, data only represented with lines) + ,ssDot ///< \enumimage{ssDot.png} a single pixel (use \ref ssDisc or \ref ssCircle if you want a round shape with a certain radius) + ,ssCross ///< \enumimage{ssCross.png} a cross + ,ssPlus ///< \enumimage{ssPlus.png} a plus + ,ssCircle ///< \enumimage{ssCircle.png} a circle + ,ssDisc ///< \enumimage{ssDisc.png} a circle which is filled with the pen's color (not the brush as with ssCircle) + ,ssSquare ///< \enumimage{ssSquare.png} a square + ,ssDiamond ///< \enumimage{ssDiamond.png} a diamond + ,ssStar ///< \enumimage{ssStar.png} a star with eight arms, i.e. a combination of cross and plus + ,ssTriangle ///< \enumimage{ssTriangle.png} an equilateral triangle, standing on baseline + ,ssTriangleInverted ///< \enumimage{ssTriangleInverted.png} an equilateral triangle, standing on corner + ,ssCrossSquare ///< \enumimage{ssCrossSquare.png} a square with a cross inside + ,ssPlusSquare ///< \enumimage{ssPlusSquare.png} a square with a plus inside + ,ssCrossCircle ///< \enumimage{ssCrossCircle.png} a circle with a cross inside + ,ssPlusCircle ///< \enumimage{ssPlusCircle.png} a circle with a plus inside + ,ssPeace ///< \enumimage{ssPeace.png} a circle, with one vertical and two downward diagonal lines + ,ssPixmap ///< a custom pixmap specified by \ref setPixmap, centered on the data point coordinates + ,ssCustom ///< custom painter operations are performed per scatter (As QPainterPath, see \ref setCustomPath) + }; + + QCPScatterStyle(); + QCPScatterStyle(ScatterShape shape, double size=6); + QCPScatterStyle(ScatterShape shape, const QColor &color, double size); + QCPScatterStyle(ScatterShape shape, const QColor &color, const QColor &fill, double size); + QCPScatterStyle(ScatterShape shape, const QPen &pen, const QBrush &brush, double size); + QCPScatterStyle(const QPixmap &pixmap); + QCPScatterStyle(const QPainterPath &customPath, const QPen &pen, const QBrush &brush=Qt::NoBrush, double size=6); + + // getters: + double size() const { return mSize; } + ScatterShape shape() const { return mShape; } + QPen pen() const { return mPen; } + QBrush brush() const { return mBrush; } + QPixmap pixmap() const { return mPixmap; } + QPainterPath customPath() const { return mCustomPath; } + + // setters: + void setSize(double size); + void setShape(ScatterShape shape); + void setPen(const QPen &pen); + void setBrush(const QBrush &brush); + void setPixmap(const QPixmap &pixmap); + void setCustomPath(const QPainterPath &customPath); + + // non-property methods: + bool isNone() const { return mShape == ssNone; } + bool isPenDefined() const { return mPenDefined; } + void applyTo(QCPPainter *painter, const QPen &defaultPen) const; + void drawShape(QCPPainter *painter, QPointF pos) const; + void drawShape(QCPPainter *painter, double x, double y) const; + +protected: + // property members: + double mSize; + ScatterShape mShape; + QPen mPen; + QBrush mBrush; + QPixmap mPixmap; + QPainterPath mCustomPath; + + // non-property members: + bool mPenDefined; +}; +Q_DECLARE_TYPEINFO(QCPScatterStyle, Q_MOVABLE_TYPE); + + +class QCP_LIB_DECL QCPPainter : public QPainter +{ + Q_GADGET +public: + /*! + Defines special modes the painter can operate in. They disable or enable certain subsets of features/fixes/workarounds, + depending on whether they are wanted on the respective output device. + */ + enum PainterMode { pmDefault = 0x00 ///< 0x00 Default mode for painting on screen devices + ,pmVectorized = 0x01 ///< 0x01 Mode for vectorized painting (e.g. PDF export). For example, this prevents some antialiasing fixes. + ,pmNoCaching = 0x02 ///< 0x02 Mode for all sorts of exports (e.g. PNG, PDF,...). For example, this prevents using cached pixmap labels + ,pmNonCosmetic = 0x04 ///< 0x04 Turns pen widths 0 to 1, i.e. disables cosmetic pens. (A cosmetic pen is always drawn with width 1 pixel in the vector image/pdf viewer, independent of zoom.) + }; + Q_FLAGS(PainterMode PainterModes) + Q_DECLARE_FLAGS(PainterModes, PainterMode) + + QCPPainter(); + QCPPainter(QPaintDevice *device); + ~QCPPainter(); + + // getters: + bool antialiasing() const { return testRenderHint(QPainter::Antialiasing); } + PainterModes modes() const { return mModes; } + + // setters: + void setAntialiasing(bool enabled); + void setMode(PainterMode mode, bool enabled=true); + void setModes(PainterModes modes); + + // methods hiding non-virtual base class functions (QPainter bug workarounds): + bool begin(QPaintDevice *device); + void setPen(const QPen &pen); + void setPen(const QColor &color); + void setPen(Qt::PenStyle penStyle); + void drawLine(const QLineF &line); + void drawLine(const QPointF &p1, const QPointF &p2) {drawLine(QLineF(p1, p2));} + void save(); + void restore(); + + // non-virtual methods: + void makeNonCosmetic(); + +protected: + // property members: + PainterModes mModes; + bool mIsAntialiasing; + + // non-property members: + QStack mAntialiasingStack; +}; +Q_DECLARE_OPERATORS_FOR_FLAGS(QCPPainter::PainterModes) + + +class QCP_LIB_DECL QCPLayer : public QObject +{ + Q_OBJECT + /// \cond INCLUDE_QPROPERTIES + Q_PROPERTY(QCustomPlot* parentPlot READ parentPlot) + Q_PROPERTY(QString name READ name) + Q_PROPERTY(int index READ index) + Q_PROPERTY(QList children READ children) + Q_PROPERTY(bool visible READ visible WRITE setVisible) + /// \endcond +public: + QCPLayer(QCustomPlot* parentPlot, const QString &layerName); + ~QCPLayer(); + + // getters: + QCustomPlot *parentPlot() const { return mParentPlot; } + QString name() const { return mName; } + int index() const { return mIndex; } + QList children() const { return mChildren; } + bool visible() const { return mVisible; } + + // setters: + void setVisible(bool visible); + +protected: + // property members: + QCustomPlot *mParentPlot; + QString mName; + int mIndex; + QList mChildren; + bool mVisible; + + // non-virtual methods: + void addChild(QCPLayerable *layerable, bool prepend); + void removeChild(QCPLayerable *layerable); + +private: + Q_DISABLE_COPY(QCPLayer) + + friend class QCustomPlot; + friend class QCPLayerable; +}; + +class QCP_LIB_DECL QCPLayerable : public QObject +{ + Q_OBJECT + /// \cond INCLUDE_QPROPERTIES + Q_PROPERTY(bool visible READ visible WRITE setVisible) + Q_PROPERTY(QCustomPlot* parentPlot READ parentPlot) + Q_PROPERTY(QCPLayerable* parentLayerable READ parentLayerable) + Q_PROPERTY(QCPLayer* layer READ layer WRITE setLayer NOTIFY layerChanged) + Q_PROPERTY(bool antialiased READ antialiased WRITE setAntialiased) + /// \endcond +public: + QCPLayerable(QCustomPlot *plot, QString targetLayer=QString(), QCPLayerable *parentLayerable=0); + ~QCPLayerable(); + + // getters: + bool visible() const { return mVisible; } + QCustomPlot *parentPlot() const { return mParentPlot; } + QCPLayerable *parentLayerable() const { return mParentLayerable.data(); } + QCPLayer *layer() const { return mLayer; } + bool antialiased() const { return mAntialiased; } + + // setters: + void setVisible(bool on); + Q_SLOT bool setLayer(QCPLayer *layer); + bool setLayer(const QString &layerName); + void setAntialiased(bool enabled); + + // introduced virtual methods: + virtual double selectTest(const QPointF &pos, bool onlySelectable, QVariant *details=0) const; + + // non-property methods: + bool realVisibility() const; + +signals: + void layerChanged(QCPLayer *newLayer); + +protected: + // property members: + bool mVisible; + QCustomPlot *mParentPlot; + QPointer mParentLayerable; + QCPLayer *mLayer; + bool mAntialiased; + + // introduced virtual methods: + virtual void parentPlotInitialized(QCustomPlot *parentPlot); + virtual QCP::Interaction selectionCategory() const; + virtual QRect clipRect() const; + virtual void applyDefaultAntialiasingHint(QCPPainter *painter) const = 0; + virtual void draw(QCPPainter *painter) = 0; + // events: + virtual void selectEvent(QMouseEvent *event, bool additive, const QVariant &details, bool *selectionStateChanged); + virtual void deselectEvent(bool *selectionStateChanged); + + // non-property methods: + void initializeParentPlot(QCustomPlot *parentPlot); + void setParentLayerable(QCPLayerable* parentLayerable); + bool moveToLayer(QCPLayer *layer, bool prepend); + void applyAntialiasingHint(QCPPainter *painter, bool localAntialiased, QCP::AntialiasedElement overrideElement) const; + +private: + Q_DISABLE_COPY(QCPLayerable) + + friend class QCustomPlot; + friend class QCPAxisRect; +}; + + +class QCP_LIB_DECL QCPRange +{ +public: + double lower, upper; + + QCPRange(); + QCPRange(double lower, double upper); + + bool operator==(const QCPRange& other) const { return lower == other.lower && upper == other.upper; } + bool operator!=(const QCPRange& other) const { return !(*this == other); } + + QCPRange &operator+=(const double& value) { lower+=value; upper+=value; return *this; } + QCPRange &operator-=(const double& value) { lower-=value; upper-=value; return *this; } + QCPRange &operator*=(const double& value) { lower*=value; upper*=value; return *this; } + QCPRange &operator/=(const double& value) { lower/=value; upper/=value; return *this; } + friend inline const QCPRange operator+(const QCPRange&, double); + friend inline const QCPRange operator+(double, const QCPRange&); + friend inline const QCPRange operator-(const QCPRange& range, double value); + friend inline const QCPRange operator*(const QCPRange& range, double value); + friend inline const QCPRange operator*(double value, const QCPRange& range); + friend inline const QCPRange operator/(const QCPRange& range, double value); + + double size() const; + double center() const; + void normalize(); + void expand(const QCPRange &otherRange); + QCPRange expanded(const QCPRange &otherRange) const; + QCPRange sanitizedForLogScale() const; + QCPRange sanitizedForLinScale() const; + bool contains(double value) const; + + static bool validRange(double lower, double upper); + static bool validRange(const QCPRange &range); + static const double minRange; //1e-280; + static const double maxRange; //1e280; + +}; +Q_DECLARE_TYPEINFO(QCPRange, Q_MOVABLE_TYPE); + +/* documentation of inline functions */ + +/*! \fn QCPRange &QCPRange::operator+=(const double& value) + + Adds \a value to both boundaries of the range. +*/ + +/*! \fn QCPRange &QCPRange::operator-=(const double& value) + + Subtracts \a value from both boundaries of the range. +*/ + +/*! \fn QCPRange &QCPRange::operator*=(const double& value) + + Multiplies both boundaries of the range by \a value. +*/ + +/*! \fn QCPRange &QCPRange::operator/=(const double& value) + + Divides both boundaries of the range by \a value. +*/ + +/* end documentation of inline functions */ + +/*! + Adds \a value to both boundaries of the range. +*/ +inline const QCPRange operator+(const QCPRange& range, double value) +{ + QCPRange result(range); + result += value; + return result; +} + +/*! + Adds \a value to both boundaries of the range. +*/ +inline const QCPRange operator+(double value, const QCPRange& range) +{ + QCPRange result(range); + result += value; + return result; +} + +/*! + Subtracts \a value from both boundaries of the range. +*/ +inline const QCPRange operator-(const QCPRange& range, double value) +{ + QCPRange result(range); + result -= value; + return result; +} + +/*! + Multiplies both boundaries of the range by \a value. +*/ +inline const QCPRange operator*(const QCPRange& range, double value) +{ + QCPRange result(range); + result *= value; + return result; +} + +/*! + Multiplies both boundaries of the range by \a value. +*/ +inline const QCPRange operator*(double value, const QCPRange& range) +{ + QCPRange result(range); + result *= value; + return result; +} + +/*! + Divides both boundaries of the range by \a value. +*/ +inline const QCPRange operator/(const QCPRange& range, double value) +{ + QCPRange result(range); + result /= value; + return result; +} + + +class QCP_LIB_DECL QCPMarginGroup : public QObject +{ + Q_OBJECT +public: + QCPMarginGroup(QCustomPlot *parentPlot); + ~QCPMarginGroup(); + + // non-virtual methods: + QList elements(QCP::MarginSide side) const { return mChildren.value(side); } + bool isEmpty() const; + void clear(); + +protected: + // non-property members: + QCustomPlot *mParentPlot; + QHash > mChildren; + + // non-virtual methods: + int commonMargin(QCP::MarginSide side) const; + void addChild(QCP::MarginSide side, QCPLayoutElement *element); + void removeChild(QCP::MarginSide side, QCPLayoutElement *element); + +private: + Q_DISABLE_COPY(QCPMarginGroup) + + friend class QCPLayoutElement; +}; + + +class QCP_LIB_DECL QCPLayoutElement : public QCPLayerable +{ + Q_OBJECT + /// \cond INCLUDE_QPROPERTIES + Q_PROPERTY(QCPLayout* layout READ layout) + Q_PROPERTY(QRect rect READ rect) + Q_PROPERTY(QRect outerRect READ outerRect WRITE setOuterRect) + Q_PROPERTY(QMargins margins READ margins WRITE setMargins) + Q_PROPERTY(QMargins minimumMargins READ minimumMargins WRITE setMinimumMargins) + Q_PROPERTY(QSize minimumSize READ minimumSize WRITE setMinimumSize) + Q_PROPERTY(QSize maximumSize READ maximumSize WRITE setMaximumSize) + /// \endcond +public: + /*! + Defines the phases of the update process, that happens just before a replot. At each phase, + \ref update is called with the according UpdatePhase value. + */ + enum UpdatePhase { upPreparation ///< Phase used for any type of preparation that needs to be done before margin calculation and layout + ,upMargins ///< Phase in which the margins are calculated and set + ,upLayout ///< Final phase in which the layout system places the rects of the elements + }; + Q_ENUMS(UpdatePhase) + + explicit QCPLayoutElement(QCustomPlot *parentPlot=0); + virtual ~QCPLayoutElement(); + + // getters: + QCPLayout *layout() const { return mParentLayout; } + QRect rect() const { return mRect; } + QRect outerRect() const { return mOuterRect; } + QMargins margins() const { return mMargins; } + QMargins minimumMargins() const { return mMinimumMargins; } + QCP::MarginSides autoMargins() const { return mAutoMargins; } + QSize minimumSize() const { return mMinimumSize; } + QSize maximumSize() const { return mMaximumSize; } + QCPMarginGroup *marginGroup(QCP::MarginSide side) const { return mMarginGroups.value(side, (QCPMarginGroup*)0); } + QHash marginGroups() const { return mMarginGroups; } + + // setters: + void setOuterRect(const QRect &rect); + void setMargins(const QMargins &margins); + void setMinimumMargins(const QMargins &margins); + void setAutoMargins(QCP::MarginSides sides); + void setMinimumSize(const QSize &size); + void setMinimumSize(int width, int height); + void setMaximumSize(const QSize &size); + void setMaximumSize(int width, int height); + void setMarginGroup(QCP::MarginSides sides, QCPMarginGroup *group); + + // introduced virtual methods: + virtual void update(UpdatePhase phase); + virtual QSize minimumSizeHint() const; + virtual QSize maximumSizeHint() const; + virtual QList elements(bool recursive) const; + + // reimplemented virtual methods: + virtual double selectTest(const QPointF &pos, bool onlySelectable, QVariant *details=0) const; + +protected: + // property members: + QCPLayout *mParentLayout; + QSize mMinimumSize, mMaximumSize; + QRect mRect, mOuterRect; + QMargins mMargins, mMinimumMargins; + QCP::MarginSides mAutoMargins; + QHash mMarginGroups; + + // introduced virtual methods: + virtual int calculateAutoMargin(QCP::MarginSide side); + // events: + virtual void mousePressEvent(QMouseEvent *event) {Q_UNUSED(event)} + virtual void mouseMoveEvent(QMouseEvent *event) {Q_UNUSED(event)} + virtual void mouseReleaseEvent(QMouseEvent *event) {Q_UNUSED(event)} + virtual void mouseDoubleClickEvent(QMouseEvent *event) {Q_UNUSED(event)} + virtual void wheelEvent(QWheelEvent *event) {Q_UNUSED(event)} + + // reimplemented virtual methods: + virtual void applyDefaultAntialiasingHint(QCPPainter *painter) const { Q_UNUSED(painter) } + virtual void draw(QCPPainter *painter) { Q_UNUSED(painter) } + virtual void parentPlotInitialized(QCustomPlot *parentPlot); + +private: + Q_DISABLE_COPY(QCPLayoutElement) + + friend class QCustomPlot; + friend class QCPLayout; + friend class QCPMarginGroup; +}; + + +class QCP_LIB_DECL QCPLayout : public QCPLayoutElement +{ + Q_OBJECT +public: + explicit QCPLayout(); + + // reimplemented virtual methods: + virtual void update(UpdatePhase phase); + virtual QList elements(bool recursive) const; + + // introduced virtual methods: + virtual int elementCount() const = 0; + virtual QCPLayoutElement* elementAt(int index) const = 0; + virtual QCPLayoutElement* takeAt(int index) = 0; + virtual bool take(QCPLayoutElement* element) = 0; + virtual void simplify(); + + // non-virtual methods: + bool removeAt(int index); + bool remove(QCPLayoutElement* element); + void clear(); + +protected: + // introduced virtual methods: + virtual void updateLayout(); + + // non-virtual methods: + void sizeConstraintsChanged() const; + void adoptElement(QCPLayoutElement *el); + void releaseElement(QCPLayoutElement *el); + QVector getSectionSizes(QVector maxSizes, QVector minSizes, QVector stretchFactors, int totalSize) const; + +private: + Q_DISABLE_COPY(QCPLayout) + friend class QCPLayoutElement; +}; + + +class QCP_LIB_DECL QCPLayoutGrid : public QCPLayout +{ + Q_OBJECT + /// \cond INCLUDE_QPROPERTIES + Q_PROPERTY(int rowCount READ rowCount) + Q_PROPERTY(int columnCount READ columnCount) + Q_PROPERTY(QList columnStretchFactors READ columnStretchFactors WRITE setColumnStretchFactors) + Q_PROPERTY(QList rowStretchFactors READ rowStretchFactors WRITE setRowStretchFactors) + Q_PROPERTY(int columnSpacing READ columnSpacing WRITE setColumnSpacing) + Q_PROPERTY(int rowSpacing READ rowSpacing WRITE setRowSpacing) + /// \endcond +public: + explicit QCPLayoutGrid(); + virtual ~QCPLayoutGrid(); + + // getters: + int rowCount() const; + int columnCount() const; + QList columnStretchFactors() const { return mColumnStretchFactors; } + QList rowStretchFactors() const { return mRowStretchFactors; } + int columnSpacing() const { return mColumnSpacing; } + int rowSpacing() const { return mRowSpacing; } + + // setters: + void setColumnStretchFactor(int column, double factor); + void setColumnStretchFactors(const QList &factors); + void setRowStretchFactor(int row, double factor); + void setRowStretchFactors(const QList &factors); + void setColumnSpacing(int pixels); + void setRowSpacing(int pixels); + + // reimplemented virtual methods: + virtual void updateLayout(); + virtual int elementCount() const; + virtual QCPLayoutElement* elementAt(int index) const; + virtual QCPLayoutElement* takeAt(int index); + virtual bool take(QCPLayoutElement* element); + virtual QList elements(bool recursive) const; + virtual void simplify(); + virtual QSize minimumSizeHint() const; + virtual QSize maximumSizeHint() const; + + // non-virtual methods: + QCPLayoutElement *element(int row, int column) const; + bool addElement(int row, int column, QCPLayoutElement *element); + bool hasElement(int row, int column); + void expandTo(int newRowCount, int newColumnCount); + void insertRow(int newIndex); + void insertColumn(int newIndex); + +protected: + // property members: + QList > mElements; + QList mColumnStretchFactors; + QList mRowStretchFactors; + int mColumnSpacing, mRowSpacing; + + // non-virtual methods: + void getMinimumRowColSizes(QVector *minColWidths, QVector *minRowHeights) const; + void getMaximumRowColSizes(QVector *maxColWidths, QVector *maxRowHeights) const; + +private: + Q_DISABLE_COPY(QCPLayoutGrid) +}; + + +class QCP_LIB_DECL QCPLayoutInset : public QCPLayout +{ + Q_OBJECT +public: + /*! + Defines how the placement and sizing is handled for a certain element in a QCPLayoutInset. + */ + enum InsetPlacement { ipFree ///< The element may be positioned/sized arbitrarily, see \ref setInsetRect + ,ipBorderAligned ///< The element is aligned to one of the layout sides, see \ref setInsetAlignment + }; + + explicit QCPLayoutInset(); + virtual ~QCPLayoutInset(); + + // getters: + InsetPlacement insetPlacement(int index) const; + Qt::Alignment insetAlignment(int index) const; + QRectF insetRect(int index) const; + + // setters: + void setInsetPlacement(int index, InsetPlacement placement); + void setInsetAlignment(int index, Qt::Alignment alignment); + void setInsetRect(int index, const QRectF &rect); + + // reimplemented virtual methods: + virtual void updateLayout(); + virtual int elementCount() const; + virtual QCPLayoutElement* elementAt(int index) const; + virtual QCPLayoutElement* takeAt(int index); + virtual bool take(QCPLayoutElement* element); + virtual void simplify() {} + virtual double selectTest(const QPointF &pos, bool onlySelectable, QVariant *details=0) const; + + // non-virtual methods: + void addElement(QCPLayoutElement *element, Qt::Alignment alignment); + void addElement(QCPLayoutElement *element, const QRectF &rect); + +protected: + // property members: + QList mElements; + QList mInsetPlacement; + QList mInsetAlignment; + QList mInsetRect; + +private: + Q_DISABLE_COPY(QCPLayoutInset) +}; + + +class QCP_LIB_DECL QCPLineEnding +{ + Q_GADGET +public: + /*! + Defines the type of ending decoration for line-like items, e.g. an arrow. + + \image html QCPLineEnding.png + + The width and length of these decorations can be controlled with the functions \ref setWidth + and \ref setLength. Some decorations like \ref esDisc, \ref esSquare, \ref esDiamond and \ref esBar only + support a width, the length property is ignored. + + \see QCPItemLine::setHead, QCPItemLine::setTail, QCPItemCurve::setHead, QCPItemCurve::setTail, QCPAxis::setLowerEnding, QCPAxis::setUpperEnding + */ + Q_ENUMS(EndingStyle) + enum EndingStyle { esNone ///< No ending decoration + ,esFlatArrow ///< A filled arrow head with a straight/flat back (a triangle) + ,esSpikeArrow ///< A filled arrow head with an indented back + ,esLineArrow ///< A non-filled arrow head with open back + ,esDisc ///< A filled circle + ,esSquare ///< A filled square + ,esDiamond ///< A filled diamond (45° rotated square) + ,esBar ///< A bar perpendicular to the line + ,esHalfBar ///< A bar perpendicular to the line, pointing out to only one side (to which side can be changed with \ref setInverted) + ,esSkewedBar ///< A bar that is skewed (skew controllable via \ref setLength) + }; + + QCPLineEnding(); + QCPLineEnding(EndingStyle style, double width=8, double length=10, bool inverted=false); + + // getters: + EndingStyle style() const { return mStyle; } + double width() const { return mWidth; } + double length() const { return mLength; } + bool inverted() const { return mInverted; } + + // setters: + void setStyle(EndingStyle style); + void setWidth(double width); + void setLength(double length); + void setInverted(bool inverted); + + // non-property methods: + double boundingDistance() const; + double realLength() const; + void draw(QCPPainter *painter, const QVector2D &pos, const QVector2D &dir) const; + void draw(QCPPainter *painter, const QVector2D &pos, double angle) const; + +protected: + // property members: + EndingStyle mStyle; + double mWidth, mLength; + bool mInverted; +}; +Q_DECLARE_TYPEINFO(QCPLineEnding, Q_MOVABLE_TYPE); + + +class QCP_LIB_DECL QCPGrid :public QCPLayerable +{ + Q_OBJECT + /// \cond INCLUDE_QPROPERTIES + Q_PROPERTY(bool subGridVisible READ subGridVisible WRITE setSubGridVisible) + Q_PROPERTY(bool antialiasedSubGrid READ antialiasedSubGrid WRITE setAntialiasedSubGrid) + Q_PROPERTY(bool antialiasedZeroLine READ antialiasedZeroLine WRITE setAntialiasedZeroLine) + Q_PROPERTY(QPen pen READ pen WRITE setPen) + Q_PROPERTY(QPen subGridPen READ subGridPen WRITE setSubGridPen) + Q_PROPERTY(QPen zeroLinePen READ zeroLinePen WRITE setZeroLinePen) + /// \endcond +public: + QCPGrid(QCPAxis *parentAxis); + + // getters: + bool subGridVisible() const { return mSubGridVisible; } + bool antialiasedSubGrid() const { return mAntialiasedSubGrid; } + bool antialiasedZeroLine() const { return mAntialiasedZeroLine; } + QPen pen() const { return mPen; } + QPen subGridPen() const { return mSubGridPen; } + QPen zeroLinePen() const { return mZeroLinePen; } + + // setters: + void setSubGridVisible(bool visible); + void setAntialiasedSubGrid(bool enabled); + void setAntialiasedZeroLine(bool enabled); + void setPen(const QPen &pen); + void setSubGridPen(const QPen &pen); + void setZeroLinePen(const QPen &pen); + +protected: + // property members: + bool mSubGridVisible; + bool mAntialiasedSubGrid, mAntialiasedZeroLine; + QPen mPen, mSubGridPen, mZeroLinePen; + // non-property members: + QCPAxis *mParentAxis; + + // reimplemented virtual methods: + virtual void applyDefaultAntialiasingHint(QCPPainter *painter) const; + virtual void draw(QCPPainter *painter); + + // non-virtual methods: + void drawGridLines(QCPPainter *painter) const; + void drawSubGridLines(QCPPainter *painter) const; + + friend class QCPAxis; +}; + + +class QCP_LIB_DECL QCPAxis : public QCPLayerable +{ + Q_OBJECT + /// \cond INCLUDE_QPROPERTIES + Q_PROPERTY(AxisType axisType READ axisType) + Q_PROPERTY(QCPAxisRect* axisRect READ axisRect) + Q_PROPERTY(ScaleType scaleType READ scaleType WRITE setScaleType NOTIFY scaleTypeChanged) + Q_PROPERTY(double scaleLogBase READ scaleLogBase WRITE setScaleLogBase) + Q_PROPERTY(QCPRange range READ range WRITE setRange NOTIFY rangeChanged) + Q_PROPERTY(bool rangeReversed READ rangeReversed WRITE setRangeReversed) + Q_PROPERTY(bool autoTicks READ autoTicks WRITE setAutoTicks) + Q_PROPERTY(int autoTickCount READ autoTickCount WRITE setAutoTickCount) + Q_PROPERTY(bool autoTickLabels READ autoTickLabels WRITE setAutoTickLabels) + Q_PROPERTY(bool autoTickStep READ autoTickStep WRITE setAutoTickStep) + Q_PROPERTY(bool autoSubTicks READ autoSubTicks WRITE setAutoSubTicks) + Q_PROPERTY(bool ticks READ ticks WRITE setTicks) + Q_PROPERTY(bool tickLabels READ tickLabels WRITE setTickLabels) + Q_PROPERTY(int tickLabelPadding READ tickLabelPadding WRITE setTickLabelPadding) + Q_PROPERTY(LabelType tickLabelType READ tickLabelType WRITE setTickLabelType) + Q_PROPERTY(QFont tickLabelFont READ tickLabelFont WRITE setTickLabelFont) + Q_PROPERTY(QColor tickLabelColor READ tickLabelColor WRITE setTickLabelColor) + Q_PROPERTY(double tickLabelRotation READ tickLabelRotation WRITE setTickLabelRotation) + Q_PROPERTY(LabelSide tickLabelSide READ tickLabelSide WRITE setTickLabelSide) + Q_PROPERTY(QString dateTimeFormat READ dateTimeFormat WRITE setDateTimeFormat) + Q_PROPERTY(Qt::TimeSpec dateTimeSpec READ dateTimeSpec WRITE setDateTimeSpec) + Q_PROPERTY(QString numberFormat READ numberFormat WRITE setNumberFormat) + Q_PROPERTY(int numberPrecision READ numberPrecision WRITE setNumberPrecision) + Q_PROPERTY(double tickStep READ tickStep WRITE setTickStep) + Q_PROPERTY(QVector tickVector READ tickVector WRITE setTickVector) + Q_PROPERTY(QVector tickVectorLabels READ tickVectorLabels WRITE setTickVectorLabels) + Q_PROPERTY(int tickLengthIn READ tickLengthIn WRITE setTickLengthIn) + Q_PROPERTY(int tickLengthOut READ tickLengthOut WRITE setTickLengthOut) + Q_PROPERTY(int subTickCount READ subTickCount WRITE setSubTickCount) + Q_PROPERTY(int subTickLengthIn READ subTickLengthIn WRITE setSubTickLengthIn) + Q_PROPERTY(int subTickLengthOut READ subTickLengthOut WRITE setSubTickLengthOut) + Q_PROPERTY(QPen basePen READ basePen WRITE setBasePen) + Q_PROPERTY(QPen tickPen READ tickPen WRITE setTickPen) + Q_PROPERTY(QPen subTickPen READ subTickPen WRITE setSubTickPen) + Q_PROPERTY(QFont labelFont READ labelFont WRITE setLabelFont) + Q_PROPERTY(QColor labelColor READ labelColor WRITE setLabelColor) + Q_PROPERTY(QString label READ label WRITE setLabel) + Q_PROPERTY(int labelPadding READ labelPadding WRITE setLabelPadding) + Q_PROPERTY(int padding READ padding WRITE setPadding) + Q_PROPERTY(int offset READ offset WRITE setOffset) + Q_PROPERTY(SelectableParts selectedParts READ selectedParts WRITE setSelectedParts NOTIFY selectionChanged) + Q_PROPERTY(SelectableParts selectableParts READ selectableParts WRITE setSelectableParts NOTIFY selectableChanged) + Q_PROPERTY(QFont selectedTickLabelFont READ selectedTickLabelFont WRITE setSelectedTickLabelFont) + Q_PROPERTY(QFont selectedLabelFont READ selectedLabelFont WRITE setSelectedLabelFont) + Q_PROPERTY(QColor selectedTickLabelColor READ selectedTickLabelColor WRITE setSelectedTickLabelColor) + Q_PROPERTY(QColor selectedLabelColor READ selectedLabelColor WRITE setSelectedLabelColor) + Q_PROPERTY(QPen selectedBasePen READ selectedBasePen WRITE setSelectedBasePen) + Q_PROPERTY(QPen selectedTickPen READ selectedTickPen WRITE setSelectedTickPen) + Q_PROPERTY(QPen selectedSubTickPen READ selectedSubTickPen WRITE setSelectedSubTickPen) + Q_PROPERTY(QCPLineEnding lowerEnding READ lowerEnding WRITE setLowerEnding) + Q_PROPERTY(QCPLineEnding upperEnding READ upperEnding WRITE setUpperEnding) + Q_PROPERTY(QCPGrid* grid READ grid) + /// \endcond +public: + /*! + Defines at which side of the axis rect the axis will appear. This also affects how the tick + marks are drawn, on which side the labels are placed etc. + */ + enum AxisType { atLeft = 0x01 ///< 0x01 Axis is vertical and on the left side of the axis rect + ,atRight = 0x02 ///< 0x02 Axis is vertical and on the right side of the axis rect + ,atTop = 0x04 ///< 0x04 Axis is horizontal and on the top side of the axis rect + ,atBottom = 0x08 ///< 0x08 Axis is horizontal and on the bottom side of the axis rect + }; + Q_FLAGS(AxisType AxisTypes) + Q_DECLARE_FLAGS(AxisTypes, AxisType) + /*! + When automatic tick label generation is enabled (\ref setAutoTickLabels), defines how the + coordinate of the tick is interpreted, i.e. translated into a string. + + \see setTickLabelType + */ + enum LabelType { ltNumber ///< Tick coordinate is regarded as normal number and will be displayed as such. (see \ref setNumberFormat) + ,ltDateTime ///< Tick coordinate is regarded as a date/time (seconds since 1970-01-01T00:00:00 UTC) and will be displayed and formatted as such. (for details, see \ref setDateTimeFormat) + }; + Q_ENUMS(LabelType) + /*! + Defines on which side of the axis the tick labels (numbers) shall appear. + + \see setTickLabelSide + */ + enum LabelSide { lsInside ///< Tick labels will be displayed inside the axis rect and clipped to the inner axis rect + ,lsOutside ///< Tick labels will be displayed outside the axis rect + }; + Q_ENUMS(LabelSide) + /*! + Defines the scale of an axis. + \see setScaleType + */ + enum ScaleType { stLinear ///< Linear scaling + ,stLogarithmic ///< Logarithmic scaling with correspondingly transformed plots and (major) tick marks at every base power (see \ref setScaleLogBase). + }; + Q_ENUMS(ScaleType) + /*! + Defines the selectable parts of an axis. + \see setSelectableParts, setSelectedParts + */ + enum SelectablePart { spNone = 0 ///< None of the selectable parts + ,spAxis = 0x001 ///< The axis backbone and tick marks + ,spTickLabels = 0x002 ///< Tick labels (numbers) of this axis (as a whole, not individually) + ,spAxisLabel = 0x004 ///< The axis label + }; + Q_FLAGS(SelectablePart SelectableParts) + Q_DECLARE_FLAGS(SelectableParts, SelectablePart) + + explicit QCPAxis(QCPAxisRect *parent, AxisType type); + virtual ~QCPAxis(); + + // getters: + AxisType axisType() const { return mAxisType; } + QCPAxisRect *axisRect() const { return mAxisRect; } + ScaleType scaleType() const { return mScaleType; } + double scaleLogBase() const { return mScaleLogBase; } + const QCPRange range() const { return mRange; } + bool rangeReversed() const { return mRangeReversed; } + bool autoTicks() const { return mAutoTicks; } + int autoTickCount() const { return mAutoTickCount; } + bool autoTickLabels() const { return mAutoTickLabels; } + bool autoTickStep() const { return mAutoTickStep; } + bool autoSubTicks() const { return mAutoSubTicks; } + bool ticks() const { return mTicks; } + bool tickLabels() const { return mTickLabels; } + int tickLabelPadding() const; + LabelType tickLabelType() const { return mTickLabelType; } + QFont tickLabelFont() const { return mTickLabelFont; } + QColor tickLabelColor() const { return mTickLabelColor; } + double tickLabelRotation() const; + LabelSide tickLabelSide() const; + QString dateTimeFormat() const { return mDateTimeFormat; } + Qt::TimeSpec dateTimeSpec() const { return mDateTimeSpec; } + QString numberFormat() const; + int numberPrecision() const { return mNumberPrecision; } + double tickStep() const { return mTickStep; } + QVector tickVector() const { return mTickVector; } + QVector tickVectorLabels() const { return mTickVectorLabels; } + int tickLengthIn() const; + int tickLengthOut() const; + int subTickCount() const { return mSubTickCount; } + int subTickLengthIn() const; + int subTickLengthOut() const; + QPen basePen() const { return mBasePen; } + QPen tickPen() const { return mTickPen; } + QPen subTickPen() const { return mSubTickPen; } + QFont labelFont() const { return mLabelFont; } + QColor labelColor() const { return mLabelColor; } + QString label() const { return mLabel; } + int labelPadding() const; + int padding() const { return mPadding; } + int offset() const; + SelectableParts selectedParts() const { return mSelectedParts; } + SelectableParts selectableParts() const { return mSelectableParts; } + QFont selectedTickLabelFont() const { return mSelectedTickLabelFont; } + QFont selectedLabelFont() const { return mSelectedLabelFont; } + QColor selectedTickLabelColor() const { return mSelectedTickLabelColor; } + QColor selectedLabelColor() const { return mSelectedLabelColor; } + QPen selectedBasePen() const { return mSelectedBasePen; } + QPen selectedTickPen() const { return mSelectedTickPen; } + QPen selectedSubTickPen() const { return mSelectedSubTickPen; } + QCPLineEnding lowerEnding() const; + QCPLineEnding upperEnding() const; + QCPGrid *grid() const { return mGrid; } + + // setters: + Q_SLOT void setScaleType(QCPAxis::ScaleType type); + void setScaleLogBase(double base); + Q_SLOT void setRange(const QCPRange &range); + void setRange(double lower, double upper); + void setRange(double position, double size, Qt::AlignmentFlag alignment); + void setRangeLower(double lower); + void setRangeUpper(double upper); + void setRangeReversed(bool reversed); + void setAutoTicks(bool on); + void setAutoTickCount(int approximateCount); + void setAutoTickLabels(bool on); + void setAutoTickStep(bool on); + void setAutoSubTicks(bool on); + void setTicks(bool show); + void setTickLabels(bool show); + void setTickLabelPadding(int padding); + void setTickLabelType(LabelType type); + void setTickLabelFont(const QFont &font); + void setTickLabelColor(const QColor &color); + void setTickLabelRotation(double degrees); + void setTickLabelSide(LabelSide side); + void setDateTimeFormat(const QString &format); + void setDateTimeSpec(const Qt::TimeSpec &timeSpec); + void setNumberFormat(const QString &formatCode); + void setNumberPrecision(int precision); + void setTickStep(double step); + void setTickVector(const QVector &vec); + void setTickVectorLabels(const QVector &vec); + void setTickLength(int inside, int outside=0); + void setTickLengthIn(int inside); + void setTickLengthOut(int outside); + void setSubTickCount(int count); + void setSubTickLength(int inside, int outside=0); + void setSubTickLengthIn(int inside); + void setSubTickLengthOut(int outside); + void setBasePen(const QPen &pen); + void setTickPen(const QPen &pen); + void setSubTickPen(const QPen &pen); + void setLabelFont(const QFont &font); + void setLabelColor(const QColor &color); + void setLabel(const QString &str); + void setLabelPadding(int padding); + void setPadding(int padding); + void setOffset(int offset); + void setSelectedTickLabelFont(const QFont &font); + void setSelectedLabelFont(const QFont &font); + void setSelectedTickLabelColor(const QColor &color); + void setSelectedLabelColor(const QColor &color); + void setSelectedBasePen(const QPen &pen); + void setSelectedTickPen(const QPen &pen); + void setSelectedSubTickPen(const QPen &pen); + Q_SLOT void setSelectableParts(const QCPAxis::SelectableParts &selectableParts); + Q_SLOT void setSelectedParts(const QCPAxis::SelectableParts &selectedParts); + void setLowerEnding(const QCPLineEnding &ending); + void setUpperEnding(const QCPLineEnding &ending); + + // reimplemented virtual methods: + virtual double selectTest(const QPointF &pos, bool onlySelectable, QVariant *details=0) const; + + // non-property methods: + Qt::Orientation orientation() const { return mOrientation; } + void moveRange(double diff); + void scaleRange(double factor, double center); + void setScaleRatio(const QCPAxis *otherAxis, double ratio=1.0); + void rescale(bool onlyVisiblePlottables=false); + double pixelToCoord(double value) const; + double coordToPixel(double value) const; + SelectablePart getPartAt(const QPointF &pos) const; + QList plottables() const; + QList graphs() const; + QList items() const; + + static AxisType marginSideToAxisType(QCP::MarginSide side); + static Qt::Orientation orientation(AxisType type) { return type==atBottom||type==atTop ? Qt::Horizontal : Qt::Vertical; } + static AxisType opposite(AxisType type); + +signals: + void ticksRequest(); + void rangeChanged(const QCPRange &newRange); + void rangeChanged(const QCPRange &newRange, const QCPRange &oldRange); + void scaleTypeChanged(QCPAxis::ScaleType scaleType); + void selectionChanged(const QCPAxis::SelectableParts &parts); + void selectableChanged(const QCPAxis::SelectableParts &parts); + +protected: + // property members: + // axis base: + AxisType mAxisType; + QCPAxisRect *mAxisRect; + //int mOffset; // in QCPAxisPainter + int mPadding; + Qt::Orientation mOrientation; + SelectableParts mSelectableParts, mSelectedParts; + QPen mBasePen, mSelectedBasePen; + //QCPLineEnding mLowerEnding, mUpperEnding; // in QCPAxisPainter + // axis label: + //int mLabelPadding; // in QCPAxisPainter + QString mLabel; + QFont mLabelFont, mSelectedLabelFont; + QColor mLabelColor, mSelectedLabelColor; + // tick labels: + //int mTickLabelPadding; // in QCPAxisPainter + bool mTickLabels, mAutoTickLabels; + //double mTickLabelRotation; // in QCPAxisPainter + LabelType mTickLabelType; + QFont mTickLabelFont, mSelectedTickLabelFont; + QColor mTickLabelColor, mSelectedTickLabelColor; + QString mDateTimeFormat; + Qt::TimeSpec mDateTimeSpec; + int mNumberPrecision; + QLatin1Char mNumberFormatChar; + bool mNumberBeautifulPowers; + //bool mNumberMultiplyCross; // QCPAxisPainter + // ticks and subticks: + bool mTicks; + double mTickStep; + int mSubTickCount, mAutoTickCount; + bool mAutoTicks, mAutoTickStep, mAutoSubTicks; + //int mTickLengthIn, mTickLengthOut, mSubTickLengthIn, mSubTickLengthOut; // QCPAxisPainter + QPen mTickPen, mSelectedTickPen; + QPen mSubTickPen, mSelectedSubTickPen; + // scale and range: + QCPRange mRange; + bool mRangeReversed; + ScaleType mScaleType; + double mScaleLogBase, mScaleLogBaseLogInv; + + // non-property members: + QCPGrid *mGrid; + QCPAxisPainterPrivate *mAxisPainter; + int mLowestVisibleTick, mHighestVisibleTick; + QVector mTickVector; + QVector mTickVectorLabels; + QVector mSubTickVector; + bool mCachedMarginValid; + int mCachedMargin; + + // introduced virtual methods: + virtual void setupTickVectors(); + virtual void generateAutoTicks(); + virtual int calculateAutoSubTickCount(double tickStep) const; + virtual int calculateMargin(); + + // reimplemented virtual methods: + virtual void applyDefaultAntialiasingHint(QCPPainter *painter) const; + virtual void draw(QCPPainter *painter); + virtual QCP::Interaction selectionCategory() const; + // events: + virtual void selectEvent(QMouseEvent *event, bool additive, const QVariant &details, bool *selectionStateChanged); + virtual void deselectEvent(bool *selectionStateChanged); + + // non-virtual methods: + void visibleTickBounds(int &lowIndex, int &highIndex) const; + double baseLog(double value) const; + double basePow(double value) const; + QPen getBasePen() const; + QPen getTickPen() const; + QPen getSubTickPen() const; + QFont getTickLabelFont() const; + QFont getLabelFont() const; + QColor getTickLabelColor() const; + QColor getLabelColor() const; + +private: + Q_DISABLE_COPY(QCPAxis) + + friend class QCustomPlot; + friend class QCPGrid; + friend class QCPAxisRect; +}; +Q_DECLARE_OPERATORS_FOR_FLAGS(QCPAxis::SelectableParts) +Q_DECLARE_OPERATORS_FOR_FLAGS(QCPAxis::AxisTypes) +Q_DECLARE_METATYPE(QCPAxis::SelectablePart) + + +class QCPAxisPainterPrivate +{ +public: + explicit QCPAxisPainterPrivate(QCustomPlot *parentPlot); + virtual ~QCPAxisPainterPrivate(); + + virtual void draw(QCPPainter *painter); + virtual int size() const; + void clearCache(); + + QRect axisSelectionBox() const { return mAxisSelectionBox; } + QRect tickLabelsSelectionBox() const { return mTickLabelsSelectionBox; } + QRect labelSelectionBox() const { return mLabelSelectionBox; } + + // public property members: + QCPAxis::AxisType type; + QPen basePen; + QCPLineEnding lowerEnding, upperEnding; // directly accessed by QCPAxis setters/getters + int labelPadding; // directly accessed by QCPAxis setters/getters + QFont labelFont; + QColor labelColor; + QString label; + int tickLabelPadding; // directly accessed by QCPAxis setters/getters + double tickLabelRotation; // directly accessed by QCPAxis setters/getters + QCPAxis::LabelSide tickLabelSide; // directly accessed by QCPAxis setters/getters + bool substituteExponent; + bool numberMultiplyCross; // directly accessed by QCPAxis setters/getters + int tickLengthIn, tickLengthOut, subTickLengthIn, subTickLengthOut; // directly accessed by QCPAxis setters/getters + QPen tickPen, subTickPen; + QFont tickLabelFont; + QColor tickLabelColor; + QRect axisRect, viewportRect; + double offset; // directly accessed by QCPAxis setters/getters + bool abbreviateDecimalPowers; + bool reversedEndings; + + QVector subTickPositions; + QVector tickPositions; + QVector tickLabels; + +protected: + struct CachedLabel + { + QPointF offset; + QPixmap pixmap; + }; + struct TickLabelData + { + QString basePart, expPart; + QRect baseBounds, expBounds, totalBounds, rotatedTotalBounds; + QFont baseFont, expFont; + }; + QCustomPlot *mParentPlot; + QByteArray mLabelParameterHash; // to determine whether mLabelCache needs to be cleared due to changed parameters + QCache mLabelCache; + QRect mAxisSelectionBox, mTickLabelsSelectionBox, mLabelSelectionBox; + + virtual QByteArray generateLabelParameterHash() const; + + virtual void placeTickLabel(QCPPainter *painter, double position, int distanceToAxis, const QString &text, QSize *tickLabelsSize); + virtual void drawTickLabel(QCPPainter *painter, double x, double y, const TickLabelData &labelData) const; + virtual TickLabelData getTickLabelData(const QFont &font, const QString &text) const; + virtual QPointF getTickLabelDrawOffset(const TickLabelData &labelData) const; + virtual void getMaxTickLabelSize(const QFont &font, const QString &text, QSize *tickLabelsSize) const; +}; + + +class QCP_LIB_DECL QCPAbstractPlottable : public QCPLayerable +{ + Q_OBJECT + /// \cond INCLUDE_QPROPERTIES + Q_PROPERTY(QString name READ name WRITE setName) + Q_PROPERTY(bool antialiasedFill READ antialiasedFill WRITE setAntialiasedFill) + Q_PROPERTY(bool antialiasedScatters READ antialiasedScatters WRITE setAntialiasedScatters) + Q_PROPERTY(bool antialiasedErrorBars READ antialiasedErrorBars WRITE setAntialiasedErrorBars) + Q_PROPERTY(QPen pen READ pen WRITE setPen) + Q_PROPERTY(QPen selectedPen READ selectedPen WRITE setSelectedPen) + Q_PROPERTY(QBrush brush READ brush WRITE setBrush) + Q_PROPERTY(QBrush selectedBrush READ selectedBrush WRITE setSelectedBrush) + Q_PROPERTY(QCPAxis* keyAxis READ keyAxis WRITE setKeyAxis) + Q_PROPERTY(QCPAxis* valueAxis READ valueAxis WRITE setValueAxis) + Q_PROPERTY(bool selectable READ selectable WRITE setSelectable NOTIFY selectableChanged) + Q_PROPERTY(bool selected READ selected WRITE setSelected NOTIFY selectionChanged) + /// \endcond +public: + QCPAbstractPlottable(QCPAxis *keyAxis, QCPAxis *valueAxis); + + // getters: + QString name() const { return mName; } + bool antialiasedFill() const { return mAntialiasedFill; } + bool antialiasedScatters() const { return mAntialiasedScatters; } + bool antialiasedErrorBars() const { return mAntialiasedErrorBars; } + QPen pen() const { return mPen; } + QPen selectedPen() const { return mSelectedPen; } + QBrush brush() const { return mBrush; } + QBrush selectedBrush() const { return mSelectedBrush; } + QCPAxis *keyAxis() const { return mKeyAxis.data(); } + QCPAxis *valueAxis() const { return mValueAxis.data(); } + bool selectable() const { return mSelectable; } + bool selected() const { return mSelected; } + + // setters: + void setName(const QString &name); + void setAntialiasedFill(bool enabled); + void setAntialiasedScatters(bool enabled); + void setAntialiasedErrorBars(bool enabled); + void setPen(const QPen &pen); + void setSelectedPen(const QPen &pen); + void setBrush(const QBrush &brush); + void setSelectedBrush(const QBrush &brush); + void setKeyAxis(QCPAxis *axis); + void setValueAxis(QCPAxis *axis); + Q_SLOT void setSelectable(bool selectable); + Q_SLOT void setSelected(bool selected); + + // introduced virtual methods: + virtual void clearData() = 0; + virtual double selectTest(const QPointF &pos, bool onlySelectable, QVariant *details=0) const = 0; + virtual bool addToLegend(); + virtual bool removeFromLegend() const; + + // non-property methods: + void rescaleAxes(bool onlyEnlarge=false) const; + void rescaleKeyAxis(bool onlyEnlarge=false) const; + void rescaleValueAxis(bool onlyEnlarge=false) const; + +signals: + void selectionChanged(bool selected); + void selectableChanged(bool selectable); + +protected: + /*! + Represents negative and positive sign domain for passing to \ref getKeyRange and \ref getValueRange. + */ + enum SignDomain { sdNegative ///< The negative sign domain, i.e. numbers smaller than zero + ,sdBoth ///< Both sign domains, including zero, i.e. all (rational) numbers + ,sdPositive ///< The positive sign domain, i.e. numbers greater than zero + }; + + // property members: + QString mName; + bool mAntialiasedFill, mAntialiasedScatters, mAntialiasedErrorBars; + QPen mPen, mSelectedPen; + QBrush mBrush, mSelectedBrush; + QPointer mKeyAxis, mValueAxis; + bool mSelectable, mSelected; + + // reimplemented virtual methods: + virtual QRect clipRect() const; + virtual void draw(QCPPainter *painter) = 0; + virtual QCP::Interaction selectionCategory() const; + void applyDefaultAntialiasingHint(QCPPainter *painter) const; + // events: + virtual void selectEvent(QMouseEvent *event, bool additive, const QVariant &details, bool *selectionStateChanged); + virtual void deselectEvent(bool *selectionStateChanged); + + // introduced virtual methods: + virtual void drawLegendIcon(QCPPainter *painter, const QRectF &rect) const = 0; + virtual QCPRange getKeyRange(bool &foundRange, SignDomain inSignDomain=sdBoth) const = 0; + virtual QCPRange getValueRange(bool &foundRange, SignDomain inSignDomain=sdBoth) const = 0; + + // non-virtual methods: + void coordsToPixels(double key, double value, double &x, double &y) const; + const QPointF coordsToPixels(double key, double value) const; + void pixelsToCoords(double x, double y, double &key, double &value) const; + void pixelsToCoords(const QPointF &pixelPos, double &key, double &value) const; + QPen mainPen() const; + QBrush mainBrush() const; + void applyFillAntialiasingHint(QCPPainter *painter) const; + void applyScattersAntialiasingHint(QCPPainter *painter) const; + void applyErrorBarsAntialiasingHint(QCPPainter *painter) const; + double distSqrToLine(const QPointF &start, const QPointF &end, const QPointF &point) const; + +private: + Q_DISABLE_COPY(QCPAbstractPlottable) + + friend class QCustomPlot; + friend class QCPAxis; + friend class QCPPlottableLegendItem; +}; + + +class QCP_LIB_DECL QCPItemAnchor +{ +public: + QCPItemAnchor(QCustomPlot *parentPlot, QCPAbstractItem *parentItem, const QString name, int anchorId=-1); + virtual ~QCPItemAnchor(); + + // getters: + QString name() const { return mName; } + virtual QPointF pixelPoint() const; + +protected: + // property members: + QString mName; + + // non-property members: + QCustomPlot *mParentPlot; + QCPAbstractItem *mParentItem; + int mAnchorId; + QSet mChildrenX, mChildrenY; + + // introduced virtual methods: + virtual QCPItemPosition *toQCPItemPosition() { return 0; } + + // non-virtual methods: + void addChildX(QCPItemPosition* pos); // called from pos when this anchor is set as parent + void removeChildX(QCPItemPosition *pos); // called from pos when its parent anchor is reset or pos deleted + void addChildY(QCPItemPosition* pos); // called from pos when this anchor is set as parent + void removeChildY(QCPItemPosition *pos); // called from pos when its parent anchor is reset or pos deleted + +private: + Q_DISABLE_COPY(QCPItemAnchor) + + friend class QCPItemPosition; +}; + + + +class QCP_LIB_DECL QCPItemPosition : public QCPItemAnchor +{ +public: + /*! + Defines the ways an item position can be specified. Thus it defines what the numbers passed to + \ref setCoords actually mean. + + \see setType + */ + enum PositionType { ptAbsolute ///< Static positioning in pixels, starting from the top left corner of the viewport/widget. + ,ptViewportRatio ///< Static positioning given by a fraction of the viewport size. For example, if you call setCoords(0, 0), the position will be at the top + ///< left corner of the viewport/widget. setCoords(1, 1) will be at the bottom right corner, setCoords(0.5, 0) will be horizontally centered and + ///< vertically at the top of the viewport/widget, etc. + ,ptAxisRectRatio ///< Static positioning given by a fraction of the axis rect size (see \ref setAxisRect). For example, if you call setCoords(0, 0), the position will be at the top + ///< left corner of the axis rect. setCoords(1, 1) will be at the bottom right corner, setCoords(0.5, 0) will be horizontally centered and + ///< vertically at the top of the axis rect, etc. You can also go beyond the axis rect by providing negative coordinates or coordinates larger than 1. + ,ptPlotCoords ///< Dynamic positioning at a plot coordinate defined by two axes (see \ref setAxes). + }; + + QCPItemPosition(QCustomPlot *parentPlot, QCPAbstractItem *parentItem, const QString name); + virtual ~QCPItemPosition(); + + // getters: + PositionType type() const { return typeX(); } + PositionType typeX() const { return mPositionTypeX; } + PositionType typeY() const { return mPositionTypeY; } + QCPItemAnchor *parentAnchor() const { return parentAnchorX(); } + QCPItemAnchor *parentAnchorX() const { return mParentAnchorX; } + QCPItemAnchor *parentAnchorY() const { return mParentAnchorY; } + double key() const { return mKey; } + double value() const { return mValue; } + QPointF coords() const { return QPointF(mKey, mValue); } + QCPAxis *keyAxis() const { return mKeyAxis.data(); } + QCPAxis *valueAxis() const { return mValueAxis.data(); } + QCPAxisRect *axisRect() const; + virtual QPointF pixelPoint() const; + + // setters: + void setType(PositionType type); + void setTypeX(PositionType type); + void setTypeY(PositionType type); + bool setParentAnchor(QCPItemAnchor *parentAnchor, bool keepPixelPosition=false); + bool setParentAnchorX(QCPItemAnchor *parentAnchor, bool keepPixelPosition=false); + bool setParentAnchorY(QCPItemAnchor *parentAnchor, bool keepPixelPosition=false); + void setCoords(double key, double value); + void setCoords(const QPointF &coords); + void setAxes(QCPAxis* keyAxis, QCPAxis* valueAxis); + void setAxisRect(QCPAxisRect *axisRect); + void setPixelPoint(const QPointF &pixelPoint); + +protected: + // property members: + PositionType mPositionTypeX, mPositionTypeY; + QPointer mKeyAxis, mValueAxis; + QPointer mAxisRect; + double mKey, mValue; + QCPItemAnchor *mParentAnchorX, *mParentAnchorY; + + // reimplemented virtual methods: + virtual QCPItemPosition *toQCPItemPosition() { return this; } + +private: + Q_DISABLE_COPY(QCPItemPosition) + +}; + + +class QCP_LIB_DECL QCPAbstractItem : public QCPLayerable +{ + Q_OBJECT + /// \cond INCLUDE_QPROPERTIES + Q_PROPERTY(bool clipToAxisRect READ clipToAxisRect WRITE setClipToAxisRect) + Q_PROPERTY(QCPAxisRect* clipAxisRect READ clipAxisRect WRITE setClipAxisRect) + Q_PROPERTY(bool selectable READ selectable WRITE setSelectable NOTIFY selectableChanged) + Q_PROPERTY(bool selected READ selected WRITE setSelected NOTIFY selectionChanged) + /// \endcond +public: + QCPAbstractItem(QCustomPlot *parentPlot); + virtual ~QCPAbstractItem(); + + // getters: + bool clipToAxisRect() const { return mClipToAxisRect; } + QCPAxisRect *clipAxisRect() const; + bool selectable() const { return mSelectable; } + bool selected() const { return mSelected; } + + // setters: + void setClipToAxisRect(bool clip); + void setClipAxisRect(QCPAxisRect *rect); + Q_SLOT void setSelectable(bool selectable); + Q_SLOT void setSelected(bool selected); + + // reimplemented virtual methods: + virtual double selectTest(const QPointF &pos, bool onlySelectable, QVariant *details=0) const = 0; + + // non-virtual methods: + QList positions() const { return mPositions; } + QList anchors() const { return mAnchors; } + QCPItemPosition *position(const QString &name) const; + QCPItemAnchor *anchor(const QString &name) const; + bool hasAnchor(const QString &name) const; + +signals: + void selectionChanged(bool selected); + void selectableChanged(bool selectable); + +protected: + // property members: + bool mClipToAxisRect; + QPointer mClipAxisRect; + QList mPositions; + QList mAnchors; + bool mSelectable, mSelected; + + // reimplemented virtual methods: + virtual QCP::Interaction selectionCategory() const; + virtual QRect clipRect() const; + virtual void applyDefaultAntialiasingHint(QCPPainter *painter) const; + virtual void draw(QCPPainter *painter) = 0; + // events: + virtual void selectEvent(QMouseEvent *event, bool additive, const QVariant &details, bool *selectionStateChanged); + virtual void deselectEvent(bool *selectionStateChanged); + + // introduced virtual methods: + virtual QPointF anchorPixelPoint(int anchorId) const; + + // non-virtual methods: + double distSqrToLine(const QPointF &start, const QPointF &end, const QPointF &point) const; + double rectSelectTest(const QRectF &rect, const QPointF &pos, bool filledRect) const; + QCPItemPosition *createPosition(const QString &name); + QCPItemAnchor *createAnchor(const QString &name, int anchorId); + +private: + Q_DISABLE_COPY(QCPAbstractItem) + + friend class QCustomPlot; + friend class QCPItemAnchor; +}; + + +class QCP_LIB_DECL QCustomPlot : public QWidget +{ + Q_OBJECT + /// \cond INCLUDE_QPROPERTIES + Q_PROPERTY(QRect viewport READ viewport WRITE setViewport) + Q_PROPERTY(QPixmap background READ background WRITE setBackground) + Q_PROPERTY(bool backgroundScaled READ backgroundScaled WRITE setBackgroundScaled) + Q_PROPERTY(Qt::AspectRatioMode backgroundScaledMode READ backgroundScaledMode WRITE setBackgroundScaledMode) + Q_PROPERTY(QCPLayoutGrid* plotLayout READ plotLayout) + Q_PROPERTY(bool autoAddPlottableToLegend READ autoAddPlottableToLegend WRITE setAutoAddPlottableToLegend) + Q_PROPERTY(int selectionTolerance READ selectionTolerance WRITE setSelectionTolerance) + Q_PROPERTY(bool noAntialiasingOnDrag READ noAntialiasingOnDrag WRITE setNoAntialiasingOnDrag) + Q_PROPERTY(Qt::KeyboardModifier multiSelectModifier READ multiSelectModifier WRITE setMultiSelectModifier) + /// \endcond +public: + /*! + Defines how a layer should be inserted relative to an other layer. + + \see addLayer, moveLayer + */ + enum LayerInsertMode { limBelow ///< Layer is inserted below other layer + ,limAbove ///< Layer is inserted above other layer + }; + Q_ENUMS(LayerInsertMode) + + /*! + Defines with what timing the QCustomPlot surface is refreshed after a replot. + + \see replot + */ + enum RefreshPriority { rpImmediate ///< The QCustomPlot surface is immediately refreshed, by calling QWidget::repaint() after the replot + ,rpQueued ///< Queues the refresh such that it is performed at a slightly delayed point in time after the replot, by calling QWidget::update() after the replot + ,rpHint ///< Whether to use immediate repaint or queued update depends on whether the plotting hint \ref QCP::phForceRepaint is set, see \ref setPlottingHints. + }; + + explicit QCustomPlot(QWidget *parent = 0); + virtual ~QCustomPlot(); + + // getters: + QRect viewport() const { return mViewport; } + QPixmap background() const { return mBackgroundPixmap; } + bool backgroundScaled() const { return mBackgroundScaled; } + Qt::AspectRatioMode backgroundScaledMode() const { return mBackgroundScaledMode; } + QCPLayoutGrid *plotLayout() const { return mPlotLayout; } + QCP::AntialiasedElements antialiasedElements() const { return mAntialiasedElements; } + QCP::AntialiasedElements notAntialiasedElements() const { return mNotAntialiasedElements; } + bool autoAddPlottableToLegend() const { return mAutoAddPlottableToLegend; } + const QCP::Interactions interactions() const { return mInteractions; } + int selectionTolerance() const { return mSelectionTolerance; } + bool noAntialiasingOnDrag() const { return mNoAntialiasingOnDrag; } + QCP::PlottingHints plottingHints() const { return mPlottingHints; } + Qt::KeyboardModifier multiSelectModifier() const { return mMultiSelectModifier; } + + // setters: + void setViewport(const QRect &rect); + void setBackground(const QPixmap &pm); + void setBackground(const QPixmap &pm, bool scaled, Qt::AspectRatioMode mode=Qt::KeepAspectRatioByExpanding); + void setBackground(const QBrush &brush); + void setBackgroundScaled(bool scaled); + void setBackgroundScaledMode(Qt::AspectRatioMode mode); + void setAntialiasedElements(const QCP::AntialiasedElements &antialiasedElements); + void setAntialiasedElement(QCP::AntialiasedElement antialiasedElement, bool enabled=true); + void setNotAntialiasedElements(const QCP::AntialiasedElements ¬AntialiasedElements); + void setNotAntialiasedElement(QCP::AntialiasedElement notAntialiasedElement, bool enabled=true); + void setAutoAddPlottableToLegend(bool on); + void setInteractions(const QCP::Interactions &interactions); + void setInteraction(const QCP::Interaction &interaction, bool enabled=true); + void setSelectionTolerance(int pixels); + void setNoAntialiasingOnDrag(bool enabled); + void setPlottingHints(const QCP::PlottingHints &hints); + void setPlottingHint(QCP::PlottingHint hint, bool enabled=true); + void setMultiSelectModifier(Qt::KeyboardModifier modifier); + + // non-property methods: + // plottable interface: + QCPAbstractPlottable *plottable(int index); + QCPAbstractPlottable *plottable(); + bool addPlottable(QCPAbstractPlottable *plottable); + bool removePlottable(QCPAbstractPlottable *plottable); + bool removePlottable(int index); + int clearPlottables(); + int plottableCount() const; + QList selectedPlottables() const; + QCPAbstractPlottable *plottableAt(const QPointF &pos, bool onlySelectable=false) const; + bool hasPlottable(QCPAbstractPlottable *plottable) const; + + // specialized interface for QCPGraph: + QCPGraph *graph(int index) const; + QCPGraph *graph() const; + QCPGraph *addGraph(QCPAxis *keyAxis=0, QCPAxis *valueAxis=0); + bool removeGraph(QCPGraph *graph); + bool removeGraph(int index); + int clearGraphs(); + int graphCount() const; + QList selectedGraphs() const; + + // item interface: + QCPAbstractItem *item(int index) const; + QCPAbstractItem *item() const; + bool addItem(QCPAbstractItem* item); + bool removeItem(QCPAbstractItem *item); + bool removeItem(int index); + int clearItems(); + int itemCount() const; + QList selectedItems() const; + QCPAbstractItem *itemAt(const QPointF &pos, bool onlySelectable=false) const; + bool hasItem(QCPAbstractItem *item) const; + + // layer interface: + QCPLayer *layer(const QString &name) const; + QCPLayer *layer(int index) const; + QCPLayer *currentLayer() const; + bool setCurrentLayer(const QString &name); + bool setCurrentLayer(QCPLayer *layer); + int layerCount() const; + bool addLayer(const QString &name, QCPLayer *otherLayer=0, LayerInsertMode insertMode=limAbove); + bool removeLayer(QCPLayer *layer); + bool moveLayer(QCPLayer *layer, QCPLayer *otherLayer, LayerInsertMode insertMode=limAbove); + + // axis rect/layout interface: + int axisRectCount() const; + QCPAxisRect* axisRect(int index=0) const; + QList axisRects() const; + QCPLayoutElement* layoutElementAt(const QPointF &pos) const; + Q_SLOT void rescaleAxes(bool onlyVisiblePlottables=false); + + QList selectedAxes() const; + QList selectedLegends() const; + Q_SLOT void deselectAll(); + + bool savePdf(const QString &fileName, bool noCosmeticPen=false, int width=0, int height=0, const QString &pdfCreator=QString(), const QString &pdfTitle=QString()); + bool savePng(const QString &fileName, int width=0, int height=0, double scale=1.0, int quality=-1); + bool saveJpg(const QString &fileName, int width=0, int height=0, double scale=1.0, int quality=-1); + bool saveBmp(const QString &fileName, int width=0, int height=0, double scale=1.0); + bool saveRastered(const QString &fileName, int width, int height, double scale, const char *format, int quality=-1); + QPixmap toPixmap(int width=0, int height=0, double scale=1.0); + void toPainter(QCPPainter *painter, int width=0, int height=0); + Q_SLOT void replot(QCustomPlot::RefreshPriority refreshPriority=QCustomPlot::rpHint); + + QCPAxis *xAxis, *yAxis, *xAxis2, *yAxis2; + QCPLegend *legend; + +signals: + void mouseDoubleClick(QMouseEvent *event); + void mousePress(QMouseEvent *event); + void mouseMove(QMouseEvent *event); + void mouseRelease(QMouseEvent *event); + void mouseWheel(QWheelEvent *event); + + void plottableClick(QCPAbstractPlottable *plottable, QMouseEvent *event); + void plottableDoubleClick(QCPAbstractPlottable *plottable, QMouseEvent *event); + void itemClick(QCPAbstractItem *item, QMouseEvent *event); + void itemDoubleClick(QCPAbstractItem *item, QMouseEvent *event); + void axisClick(QCPAxis *axis, QCPAxis::SelectablePart part, QMouseEvent *event); + void axisDoubleClick(QCPAxis *axis, QCPAxis::SelectablePart part, QMouseEvent *event); + void legendClick(QCPLegend *legend, QCPAbstractLegendItem *item, QMouseEvent *event); + void legendDoubleClick(QCPLegend *legend, QCPAbstractLegendItem *item, QMouseEvent *event); + void titleClick(QMouseEvent *event, QCPPlotTitle *title); + void titleDoubleClick(QMouseEvent *event, QCPPlotTitle *title); + + void selectionChangedByUser(); + void beforeReplot(); + void afterReplot(); + +protected: + // property members: + QRect mViewport; + QCPLayoutGrid *mPlotLayout; + bool mAutoAddPlottableToLegend; + QList mPlottables; + QList mGraphs; // extra list of plottables also in mPlottables that are of type QCPGraph + QList mItems; + QList mLayers; + QCP::AntialiasedElements mAntialiasedElements, mNotAntialiasedElements; + QCP::Interactions mInteractions; + int mSelectionTolerance; + bool mNoAntialiasingOnDrag; + QBrush mBackgroundBrush; + QPixmap mBackgroundPixmap; + QPixmap mScaledBackgroundPixmap; + bool mBackgroundScaled; + Qt::AspectRatioMode mBackgroundScaledMode; + QCPLayer *mCurrentLayer; + QCP::PlottingHints mPlottingHints; + Qt::KeyboardModifier mMultiSelectModifier; + + // non-property members: + QPixmap mPaintBuffer; + QPoint mMousePressPos; + QPointer mMouseEventElement; + bool mReplotting; + + // reimplemented virtual methods: + virtual QSize minimumSizeHint() const; + virtual QSize sizeHint() const; + virtual void paintEvent(QPaintEvent *event); + virtual void resizeEvent(QResizeEvent *event); + virtual void mouseDoubleClickEvent(QMouseEvent *event); + virtual void mousePressEvent(QMouseEvent *event); + virtual void mouseMoveEvent(QMouseEvent *event); + virtual void mouseReleaseEvent(QMouseEvent *event); + virtual void wheelEvent(QWheelEvent *event); + + // introduced virtual methods: + virtual void draw(QCPPainter *painter); + virtual void axisRemoved(QCPAxis *axis); + virtual void legendRemoved(QCPLegend *legend); + + // non-virtual methods: + void updateLayerIndices() const; + QCPLayerable *layerableAt(const QPointF &pos, bool onlySelectable, QVariant *selectionDetails=0) const; + void drawBackground(QCPPainter *painter); + + friend class QCPLegend; + friend class QCPAxis; + friend class QCPLayer; + friend class QCPAxisRect; +}; + + +class QCP_LIB_DECL QCPColorGradient +{ + Q_GADGET +public: + /*! + Defines the color spaces in which color interpolation between gradient stops can be performed. + + \see setColorInterpolation + */ + enum ColorInterpolation { ciRGB ///< Color channels red, green and blue are linearly interpolated + ,ciHSV ///< Color channels hue, saturation and value are linearly interpolated (The hue is interpolated over the shortest angle distance) + }; + Q_ENUMS(ColorInterpolation) + + /*! + Defines the available presets that can be loaded with \ref loadPreset. See the documentation + there for an image of the presets. + */ + enum GradientPreset { gpGrayscale ///< Continuous lightness from black to white (suited for non-biased data representation) + ,gpHot ///< Continuous lightness from black over firey colors to white (suited for non-biased data representation) + ,gpCold ///< Continuous lightness from black over icey colors to white (suited for non-biased data representation) + ,gpNight ///< Continuous lightness from black over weak blueish colors to white (suited for non-biased data representation) + ,gpCandy ///< Blue over pink to white + ,gpGeography ///< Colors suitable to represent different elevations on geographical maps + ,gpIon ///< Half hue spectrum from black over purple to blue and finally green (creates banding illusion but allows more precise magnitude estimates) + ,gpThermal ///< Colors suitable for thermal imaging, ranging from dark blue over purple to orange, yellow and white + ,gpPolar ///< Colors suitable to emphasize polarity around the center, with blue for negative, black in the middle and red for positive values + ,gpSpectrum ///< An approximation of the visible light spectrum (creates banding illusion but allows more precise magnitude estimates) + ,gpJet ///< Hue variation similar to a spectrum, often used in numerical visualization (creates banding illusion but allows more precise magnitude estimates) + ,gpHues ///< Full hue cycle, with highest and lowest color red (suitable for periodic data, such as angles and phases, see \ref setPeriodic) + }; + Q_ENUMS(GradientPreset) + + QCPColorGradient(GradientPreset preset=gpCold); + bool operator==(const QCPColorGradient &other) const; + bool operator!=(const QCPColorGradient &other) const { return !(*this == other); } + + // getters: + int levelCount() const { return mLevelCount; } + QMap colorStops() const { return mColorStops; } + ColorInterpolation colorInterpolation() const { return mColorInterpolation; } + bool periodic() const { return mPeriodic; } + + // setters: + void setLevelCount(int n); + void setColorStops(const QMap &colorStops); + void setColorStopAt(double position, const QColor &color); + void setColorInterpolation(ColorInterpolation interpolation); + void setPeriodic(bool enabled); + + // non-property methods: + void colorize(const double *data, const QCPRange &range, QRgb *scanLine, int n, int dataIndexFactor=1, bool logarithmic=false); + QRgb color(double position, const QCPRange &range, bool logarithmic=false); + void loadPreset(GradientPreset preset); + void clearColorStops(); + QCPColorGradient inverted() const; + +protected: + void updateColorBuffer(); + + // property members: + int mLevelCount; + QMap mColorStops; + ColorInterpolation mColorInterpolation; + bool mPeriodic; + + // non-property members: + QVector mColorBuffer; + bool mColorBufferInvalidated; +}; + + +class QCP_LIB_DECL QCPAxisRect : public QCPLayoutElement +{ + Q_OBJECT + /// \cond INCLUDE_QPROPERTIES + Q_PROPERTY(QPixmap background READ background WRITE setBackground) + Q_PROPERTY(bool backgroundScaled READ backgroundScaled WRITE setBackgroundScaled) + Q_PROPERTY(Qt::AspectRatioMode backgroundScaledMode READ backgroundScaledMode WRITE setBackgroundScaledMode) + Q_PROPERTY(Qt::Orientations rangeDrag READ rangeDrag WRITE setRangeDrag) + Q_PROPERTY(Qt::Orientations rangeZoom READ rangeZoom WRITE setRangeZoom) + /// \endcond +public: + explicit QCPAxisRect(QCustomPlot *parentPlot, bool setupDefaultAxes=true); + virtual ~QCPAxisRect(); + + // getters: + QPixmap background() const { return mBackgroundPixmap; } + bool backgroundScaled() const { return mBackgroundScaled; } + Qt::AspectRatioMode backgroundScaledMode() const { return mBackgroundScaledMode; } + Qt::Orientations rangeDrag() const { return mRangeDrag; } + Qt::Orientations rangeZoom() const { return mRangeZoom; } + QCPAxis *rangeDragAxis(Qt::Orientation orientation); + QCPAxis *rangeZoomAxis(Qt::Orientation orientation); + double rangeZoomFactor(Qt::Orientation orientation); + + // setters: + void setBackground(const QPixmap &pm); + void setBackground(const QPixmap &pm, bool scaled, Qt::AspectRatioMode mode=Qt::KeepAspectRatioByExpanding); + void setBackground(const QBrush &brush); + void setBackgroundScaled(bool scaled); + void setBackgroundScaledMode(Qt::AspectRatioMode mode); + void setRangeDrag(Qt::Orientations orientations); + void setRangeZoom(Qt::Orientations orientations); + void setRangeDragAxes(QCPAxis *horizontal, QCPAxis *vertical); + void setRangeZoomAxes(QCPAxis *horizontal, QCPAxis *vertical); + void setRangeZoomFactor(double horizontalFactor, double verticalFactor); + void setRangeZoomFactor(double factor); + + // non-property methods: + int axisCount(QCPAxis::AxisType type) const; + QCPAxis *axis(QCPAxis::AxisType type, int index=0) const; + QList axes(QCPAxis::AxisTypes types) const; + QList axes() const; + QCPAxis *addAxis(QCPAxis::AxisType type, QCPAxis *axis=0); + QList addAxes(QCPAxis::AxisTypes types); + bool removeAxis(QCPAxis *axis); + QCPLayoutInset *insetLayout() const { return mInsetLayout; } + + void setupFullAxesBox(bool connectRanges=false); + QList plottables() const; + QList graphs() const; + QList items() const; + + // read-only interface imitating a QRect: + int left() const { return mRect.left(); } + int right() const { return mRect.right(); } + int top() const { return mRect.top(); } + int bottom() const { return mRect.bottom(); } + int width() const { return mRect.width(); } + int height() const { return mRect.height(); } + QSize size() const { return mRect.size(); } + QPoint topLeft() const { return mRect.topLeft(); } + QPoint topRight() const { return mRect.topRight(); } + QPoint bottomLeft() const { return mRect.bottomLeft(); } + QPoint bottomRight() const { return mRect.bottomRight(); } + QPoint center() const { return mRect.center(); } + + // reimplemented virtual methods: + virtual void update(UpdatePhase phase); + virtual QList elements(bool recursive) const; + +protected: + // property members: + QBrush mBackgroundBrush; + QPixmap mBackgroundPixmap; + QPixmap mScaledBackgroundPixmap; + bool mBackgroundScaled; + Qt::AspectRatioMode mBackgroundScaledMode; + QCPLayoutInset *mInsetLayout; + Qt::Orientations mRangeDrag, mRangeZoom; + QPointer mRangeDragHorzAxis, mRangeDragVertAxis, mRangeZoomHorzAxis, mRangeZoomVertAxis; + double mRangeZoomFactorHorz, mRangeZoomFactorVert; + // non-property members: + QCPRange mDragStartHorzRange, mDragStartVertRange; + QCP::AntialiasedElements mAADragBackup, mNotAADragBackup; + QPoint mDragStart; + bool mDragging; + QHash > mAxes; + + // reimplemented virtual methods: + virtual void applyDefaultAntialiasingHint(QCPPainter *painter) const; + virtual void draw(QCPPainter *painter); + virtual int calculateAutoMargin(QCP::MarginSide side); + // events: + virtual void mousePressEvent(QMouseEvent *event); + virtual void mouseMoveEvent(QMouseEvent *event); + virtual void mouseReleaseEvent(QMouseEvent *event); + virtual void wheelEvent(QWheelEvent *event); + + // non-property methods: + void drawBackground(QCPPainter *painter); + void updateAxesOffset(QCPAxis::AxisType type); + +private: + Q_DISABLE_COPY(QCPAxisRect) + + friend class QCustomPlot; +}; + + +class QCP_LIB_DECL QCPAbstractLegendItem : public QCPLayoutElement +{ + Q_OBJECT + /// \cond INCLUDE_QPROPERTIES + Q_PROPERTY(QCPLegend* parentLegend READ parentLegend) + Q_PROPERTY(QFont font READ font WRITE setFont) + Q_PROPERTY(QColor textColor READ textColor WRITE setTextColor) + Q_PROPERTY(QFont selectedFont READ selectedFont WRITE setSelectedFont) + Q_PROPERTY(QColor selectedTextColor READ selectedTextColor WRITE setSelectedTextColor) + Q_PROPERTY(bool selectable READ selectable WRITE setSelectable NOTIFY selectionChanged) + Q_PROPERTY(bool selected READ selected WRITE setSelected NOTIFY selectableChanged) + /// \endcond +public: + explicit QCPAbstractLegendItem(QCPLegend *parent); + + // getters: + QCPLegend *parentLegend() const { return mParentLegend; } + QFont font() const { return mFont; } + QColor textColor() const { return mTextColor; } + QFont selectedFont() const { return mSelectedFont; } + QColor selectedTextColor() const { return mSelectedTextColor; } + bool selectable() const { return mSelectable; } + bool selected() const { return mSelected; } + + // setters: + void setFont(const QFont &font); + void setTextColor(const QColor &color); + void setSelectedFont(const QFont &font); + void setSelectedTextColor(const QColor &color); + Q_SLOT void setSelectable(bool selectable); + Q_SLOT void setSelected(bool selected); + + // reimplemented virtual methods: + virtual double selectTest(const QPointF &pos, bool onlySelectable, QVariant *details=0) const; + +signals: + void selectionChanged(bool selected); + void selectableChanged(bool selectable); + +protected: + // property members: + QCPLegend *mParentLegend; + QFont mFont; + QColor mTextColor; + QFont mSelectedFont; + QColor mSelectedTextColor; + bool mSelectable, mSelected; + + // reimplemented virtual methods: + virtual QCP::Interaction selectionCategory() const; + virtual void applyDefaultAntialiasingHint(QCPPainter *painter) const; + virtual QRect clipRect() const; + virtual void draw(QCPPainter *painter) = 0; + // events: + virtual void selectEvent(QMouseEvent *event, bool additive, const QVariant &details, bool *selectionStateChanged); + virtual void deselectEvent(bool *selectionStateChanged); + +private: + Q_DISABLE_COPY(QCPAbstractLegendItem) + + friend class QCPLegend; +}; + + +class QCP_LIB_DECL QCPPlottableLegendItem : public QCPAbstractLegendItem +{ + Q_OBJECT +public: + QCPPlottableLegendItem(QCPLegend *parent, QCPAbstractPlottable *plottable); + + // getters: + QCPAbstractPlottable *plottable() { return mPlottable; } + +protected: + // property members: + QCPAbstractPlottable *mPlottable; + + // reimplemented virtual methods: + virtual void draw(QCPPainter *painter); + virtual QSize minimumSizeHint() const; + + // non-virtual methods: + QPen getIconBorderPen() const; + QColor getTextColor() const; + QFont getFont() const; +}; + + +class QCP_LIB_DECL QCPLegend : public QCPLayoutGrid +{ + Q_OBJECT + /// \cond INCLUDE_QPROPERTIES + Q_PROPERTY(QPen borderPen READ borderPen WRITE setBorderPen) + Q_PROPERTY(QBrush brush READ brush WRITE setBrush) + Q_PROPERTY(QFont font READ font WRITE setFont) + Q_PROPERTY(QColor textColor READ textColor WRITE setTextColor) + Q_PROPERTY(QSize iconSize READ iconSize WRITE setIconSize) + Q_PROPERTY(int iconTextPadding READ iconTextPadding WRITE setIconTextPadding) + Q_PROPERTY(QPen iconBorderPen READ iconBorderPen WRITE setIconBorderPen) + Q_PROPERTY(SelectableParts selectableParts READ selectableParts WRITE setSelectableParts NOTIFY selectionChanged) + Q_PROPERTY(SelectableParts selectedParts READ selectedParts WRITE setSelectedParts NOTIFY selectableChanged) + Q_PROPERTY(QPen selectedBorderPen READ selectedBorderPen WRITE setSelectedBorderPen) + Q_PROPERTY(QPen selectedIconBorderPen READ selectedIconBorderPen WRITE setSelectedIconBorderPen) + Q_PROPERTY(QBrush selectedBrush READ selectedBrush WRITE setSelectedBrush) + Q_PROPERTY(QFont selectedFont READ selectedFont WRITE setSelectedFont) + Q_PROPERTY(QColor selectedTextColor READ selectedTextColor WRITE setSelectedTextColor) + /// \endcond +public: + /*! + Defines the selectable parts of a legend + + \see setSelectedParts, setSelectableParts + */ + enum SelectablePart { spNone = 0x000 ///< 0x000 None + ,spLegendBox = 0x001 ///< 0x001 The legend box (frame) + ,spItems = 0x002 ///< 0x002 Legend items individually (see \ref selectedItems) + }; + Q_FLAGS(SelectablePart SelectableParts) + Q_DECLARE_FLAGS(SelectableParts, SelectablePart) + + explicit QCPLegend(); + virtual ~QCPLegend(); + + // getters: + QPen borderPen() const { return mBorderPen; } + QBrush brush() const { return mBrush; } + QFont font() const { return mFont; } + QColor textColor() const { return mTextColor; } + QSize iconSize() const { return mIconSize; } + int iconTextPadding() const { return mIconTextPadding; } + QPen iconBorderPen() const { return mIconBorderPen; } + SelectableParts selectableParts() const { return mSelectableParts; } + SelectableParts selectedParts() const; + QPen selectedBorderPen() const { return mSelectedBorderPen; } + QPen selectedIconBorderPen() const { return mSelectedIconBorderPen; } + QBrush selectedBrush() const { return mSelectedBrush; } + QFont selectedFont() const { return mSelectedFont; } + QColor selectedTextColor() const { return mSelectedTextColor; } + + // setters: + void setBorderPen(const QPen &pen); + void setBrush(const QBrush &brush); + void setFont(const QFont &font); + void setTextColor(const QColor &color); + void setIconSize(const QSize &size); + void setIconSize(int width, int height); + void setIconTextPadding(int padding); + void setIconBorderPen(const QPen &pen); + Q_SLOT void setSelectableParts(const SelectableParts &selectableParts); + Q_SLOT void setSelectedParts(const SelectableParts &selectedParts); + void setSelectedBorderPen(const QPen &pen); + void setSelectedIconBorderPen(const QPen &pen); + void setSelectedBrush(const QBrush &brush); + void setSelectedFont(const QFont &font); + void setSelectedTextColor(const QColor &color); + + // reimplemented virtual methods: + virtual double selectTest(const QPointF &pos, bool onlySelectable, QVariant *details=0) const; + + // non-virtual methods: + QCPAbstractLegendItem *item(int index) const; + QCPPlottableLegendItem *itemWithPlottable(const QCPAbstractPlottable *plottable) const; + int itemCount() const; + bool hasItem(QCPAbstractLegendItem *item) const; + bool hasItemWithPlottable(const QCPAbstractPlottable *plottable) const; + bool addItem(QCPAbstractLegendItem *item); + bool removeItem(int index); + bool removeItem(QCPAbstractLegendItem *item); + void clearItems(); + QList selectedItems() const; + +signals: + void selectionChanged(QCPLegend::SelectableParts parts); + void selectableChanged(QCPLegend::SelectableParts parts); + +protected: + // property members: + QPen mBorderPen, mIconBorderPen; + QBrush mBrush; + QFont mFont; + QColor mTextColor; + QSize mIconSize; + int mIconTextPadding; + SelectableParts mSelectedParts, mSelectableParts; + QPen mSelectedBorderPen, mSelectedIconBorderPen; + QBrush mSelectedBrush; + QFont mSelectedFont; + QColor mSelectedTextColor; + + // reimplemented virtual methods: + virtual void parentPlotInitialized(QCustomPlot *parentPlot); + virtual QCP::Interaction selectionCategory() const; + virtual void applyDefaultAntialiasingHint(QCPPainter *painter) const; + virtual void draw(QCPPainter *painter); + // events: + virtual void selectEvent(QMouseEvent *event, bool additive, const QVariant &details, bool *selectionStateChanged); + virtual void deselectEvent(bool *selectionStateChanged); + + // non-virtual methods: + QPen getBorderPen() const; + QBrush getBrush() const; + +private: + Q_DISABLE_COPY(QCPLegend) + + friend class QCustomPlot; + friend class QCPAbstractLegendItem; +}; +Q_DECLARE_OPERATORS_FOR_FLAGS(QCPLegend::SelectableParts) +Q_DECLARE_METATYPE(QCPLegend::SelectablePart) + + +class QCP_LIB_DECL QCPPlotTitle : public QCPLayoutElement +{ + Q_OBJECT + /// \cond INCLUDE_QPROPERTIES + Q_PROPERTY(QString text READ text WRITE setText) + Q_PROPERTY(QFont font READ font WRITE setFont) + Q_PROPERTY(QColor textColor READ textColor WRITE setTextColor) + Q_PROPERTY(QFont selectedFont READ selectedFont WRITE setSelectedFont) + Q_PROPERTY(QColor selectedTextColor READ selectedTextColor WRITE setSelectedTextColor) + Q_PROPERTY(bool selectable READ selectable WRITE setSelectable NOTIFY selectableChanged) + Q_PROPERTY(bool selected READ selected WRITE setSelected NOTIFY selectionChanged) + /// \endcond +public: + explicit QCPPlotTitle(QCustomPlot *parentPlot); + explicit QCPPlotTitle(QCustomPlot *parentPlot, const QString &text); + + // getters: + QString text() const { return mText; } + QFont font() const { return mFont; } + QColor textColor() const { return mTextColor; } + QFont selectedFont() const { return mSelectedFont; } + QColor selectedTextColor() const { return mSelectedTextColor; } + bool selectable() const { return mSelectable; } + bool selected() const { return mSelected; } + + // setters: + void setText(const QString &text); + void setFont(const QFont &font); + void setTextColor(const QColor &color); + void setSelectedFont(const QFont &font); + void setSelectedTextColor(const QColor &color); + Q_SLOT void setSelectable(bool selectable); + Q_SLOT void setSelected(bool selected); + + // reimplemented virtual methods: + virtual double selectTest(const QPointF &pos, bool onlySelectable, QVariant *details=0) const; + +signals: + void selectionChanged(bool selected); + void selectableChanged(bool selectable); + +protected: + // property members: + QString mText; + QFont mFont; + QColor mTextColor; + QFont mSelectedFont; + QColor mSelectedTextColor; + QRect mTextBoundingRect; + bool mSelectable, mSelected; + + // reimplemented virtual methods: + virtual void applyDefaultAntialiasingHint(QCPPainter *painter) const; + virtual void draw(QCPPainter *painter); + virtual QSize minimumSizeHint() const; + virtual QSize maximumSizeHint() const; + // events: + virtual void selectEvent(QMouseEvent *event, bool additive, const QVariant &details, bool *selectionStateChanged); + virtual void deselectEvent(bool *selectionStateChanged); + + // non-virtual methods: + QFont mainFont() const; + QColor mainTextColor() const; + +private: + Q_DISABLE_COPY(QCPPlotTitle) +}; + + +class QCPColorScaleAxisRectPrivate : public QCPAxisRect +{ + Q_OBJECT +public: + explicit QCPColorScaleAxisRectPrivate(QCPColorScale *parentColorScale); +protected: + QCPColorScale *mParentColorScale; + QImage mGradientImage; + bool mGradientImageInvalidated; + // re-using some methods of QCPAxisRect to make them available to friend class QCPColorScale + using QCPAxisRect::calculateAutoMargin; + using QCPAxisRect::mousePressEvent; + using QCPAxisRect::mouseMoveEvent; + using QCPAxisRect::mouseReleaseEvent; + using QCPAxisRect::wheelEvent; + using QCPAxisRect::update; + virtual void draw(QCPPainter *painter); + void updateGradientImage(); + Q_SLOT void axisSelectionChanged(QCPAxis::SelectableParts selectedParts); + Q_SLOT void axisSelectableChanged(QCPAxis::SelectableParts selectableParts); + friend class QCPColorScale; +}; + + +class QCP_LIB_DECL QCPColorScale : public QCPLayoutElement +{ + Q_OBJECT + /// \cond INCLUDE_QPROPERTIES + Q_PROPERTY(QCPAxis::AxisType type READ type WRITE setType) + Q_PROPERTY(QCPRange dataRange READ dataRange WRITE setDataRange NOTIFY dataRangeChanged) + Q_PROPERTY(QCPAxis::ScaleType dataScaleType READ dataScaleType WRITE setDataScaleType NOTIFY dataScaleTypeChanged) + Q_PROPERTY(QCPColorGradient gradient READ gradient WRITE setGradient NOTIFY gradientChanged) + Q_PROPERTY(QString label READ label WRITE setLabel) + Q_PROPERTY(int barWidth READ barWidth WRITE setBarWidth) + Q_PROPERTY(bool rangeDrag READ rangeDrag WRITE setRangeDrag) + Q_PROPERTY(bool rangeZoom READ rangeZoom WRITE setRangeZoom) + /// \endcond +public: + explicit QCPColorScale(QCustomPlot *parentPlot); + virtual ~QCPColorScale(); + + // getters: + QCPAxis *axis() const { return mColorAxis.data(); } + QCPAxis::AxisType type() const { return mType; } + QCPRange dataRange() const { return mDataRange; } + QCPAxis::ScaleType dataScaleType() const { return mDataScaleType; } + QCPColorGradient gradient() const { return mGradient; } + QString label() const; + int barWidth () const { return mBarWidth; } + bool rangeDrag() const; + bool rangeZoom() const; + + // setters: + void setType(QCPAxis::AxisType type); + Q_SLOT void setDataRange(const QCPRange &dataRange); + Q_SLOT void setDataScaleType(QCPAxis::ScaleType scaleType); + Q_SLOT void setGradient(const QCPColorGradient &gradient); + void setLabel(const QString &str); + void setBarWidth(int width); + void setRangeDrag(bool enabled); + void setRangeZoom(bool enabled); + + // non-property methods: + QList colorMaps() const; + void rescaleDataRange(bool onlyVisibleMaps); + + // reimplemented virtual methods: + virtual void update(UpdatePhase phase); + +signals: + void dataRangeChanged(QCPRange newRange); + void dataScaleTypeChanged(QCPAxis::ScaleType scaleType); + void gradientChanged(QCPColorGradient newGradient); + +protected: + // property members: + QCPAxis::AxisType mType; + QCPRange mDataRange; + QCPAxis::ScaleType mDataScaleType; + QCPColorGradient mGradient; + int mBarWidth; + + // non-property members: + QPointer mAxisRect; + QPointer mColorAxis; + + // reimplemented virtual methods: + virtual void applyDefaultAntialiasingHint(QCPPainter *painter) const; + // events: + virtual void mousePressEvent(QMouseEvent *event); + virtual void mouseMoveEvent(QMouseEvent *event); + virtual void mouseReleaseEvent(QMouseEvent *event); + virtual void wheelEvent(QWheelEvent *event); + +private: + Q_DISABLE_COPY(QCPColorScale) + + friend class QCPColorScaleAxisRectPrivate; +}; + + +/*! \file */ + + + +class QCP_LIB_DECL QCPData +{ +public: + QCPData(); + QCPData(double key, double value); + double key, value; + double keyErrorPlus, keyErrorMinus; + double valueErrorPlus, valueErrorMinus; +}; +Q_DECLARE_TYPEINFO(QCPData, Q_MOVABLE_TYPE); + +/*! \typedef QCPDataMap + Container for storing \ref QCPData items in a sorted fashion. The key of the map + is the key member of the QCPData instance. + + This is the container in which QCPGraph holds its data. + \see QCPData, QCPGraph::setData +*/ +typedef QMap QCPDataMap; +typedef QMapIterator QCPDataMapIterator; +typedef QMutableMapIterator QCPDataMutableMapIterator; + + +class QCP_LIB_DECL QCPGraph : public QCPAbstractPlottable +{ + Q_OBJECT + /// \cond INCLUDE_QPROPERTIES + Q_PROPERTY(LineStyle lineStyle READ lineStyle WRITE setLineStyle) + Q_PROPERTY(QCPScatterStyle scatterStyle READ scatterStyle WRITE setScatterStyle) + Q_PROPERTY(ErrorType errorType READ errorType WRITE setErrorType) + Q_PROPERTY(QPen errorPen READ errorPen WRITE setErrorPen) + Q_PROPERTY(double errorBarSize READ errorBarSize WRITE setErrorBarSize) + Q_PROPERTY(bool errorBarSkipSymbol READ errorBarSkipSymbol WRITE setErrorBarSkipSymbol) + Q_PROPERTY(QCPGraph* channelFillGraph READ channelFillGraph WRITE setChannelFillGraph) + Q_PROPERTY(bool adaptiveSampling READ adaptiveSampling WRITE setAdaptiveSampling) + /// \endcond +public: + /*! + Defines how the graph's line is represented visually in the plot. The line is drawn with the + current pen of the graph (\ref setPen). + \see setLineStyle + */ + enum LineStyle { lsNone ///< data points are not connected with any lines (e.g. data only represented + ///< with symbols according to the scatter style, see \ref setScatterStyle) + ,lsLine ///< data points are connected by a straight line + ,lsStepLeft ///< line is drawn as steps where the step height is the value of the left data point + ,lsStepRight ///< line is drawn as steps where the step height is the value of the right data point + ,lsStepCenter ///< line is drawn as steps where the step is in between two data points + ,lsImpulse ///< each data point is represented by a line parallel to the value axis, which reaches from the data point to the zero-value-line + }; + Q_ENUMS(LineStyle) + /*! + Defines what kind of error bars are drawn for each data point + */ + enum ErrorType { etNone ///< No error bars are shown + ,etKey ///< Error bars for the key dimension of the data point are shown + ,etValue ///< Error bars for the value dimension of the data point are shown + ,etBoth ///< Error bars for both key and value dimensions of the data point are shown + }; + Q_ENUMS(ErrorType) + + explicit QCPGraph(QCPAxis *keyAxis, QCPAxis *valueAxis); + virtual ~QCPGraph(); + + // getters: + QCPDataMap *data() const { return mData; } + LineStyle lineStyle() const { return mLineStyle; } + QCPScatterStyle scatterStyle() const { return mScatterStyle; } + ErrorType errorType() const { return mErrorType; } + QPen errorPen() const { return mErrorPen; } + double errorBarSize() const { return mErrorBarSize; } + bool errorBarSkipSymbol() const { return mErrorBarSkipSymbol; } + QCPGraph *channelFillGraph() const { return mChannelFillGraph.data(); } + bool adaptiveSampling() const { return mAdaptiveSampling; } + + // setters: + void setData(QCPDataMap *data, bool copy=false); + void setData(const QVector &key, const QVector &value); + void setDataKeyError(const QVector &key, const QVector &value, const QVector &keyError); + void setDataKeyError(const QVector &key, const QVector &value, const QVector &keyErrorMinus, const QVector &keyErrorPlus); + void setDataValueError(const QVector &key, const QVector &value, const QVector &valueError); + void setDataValueError(const QVector &key, const QVector &value, const QVector &valueErrorMinus, const QVector &valueErrorPlus); + void setDataBothError(const QVector &key, const QVector &value, const QVector &keyError, const QVector &valueError); + void setDataBothError(const QVector &key, const QVector &value, const QVector &keyErrorMinus, const QVector &keyErrorPlus, const QVector &valueErrorMinus, const QVector &valueErrorPlus); + void setLineStyle(LineStyle ls); + void setScatterStyle(const QCPScatterStyle &style); + void setErrorType(ErrorType errorType); + void setErrorPen(const QPen &pen); + void setErrorBarSize(double size); + void setErrorBarSkipSymbol(bool enabled); + void setChannelFillGraph(QCPGraph *targetGraph); + void setAdaptiveSampling(bool enabled); + + // non-property methods: + void addData(const QCPDataMap &dataMap); + void addData(const QCPData &data); + void addData(double key, double value); + void addData(const QVector &keys, const QVector &values); + void removeDataBefore(double key); + void removeDataAfter(double key); + void removeData(double fromKey, double toKey); + void removeData(double key); + + // reimplemented virtual methods: + virtual void clearData(); + virtual double selectTest(const QPointF &pos, bool onlySelectable, QVariant *details=0) const; + using QCPAbstractPlottable::rescaleAxes; + using QCPAbstractPlottable::rescaleKeyAxis; + using QCPAbstractPlottable::rescaleValueAxis; + void rescaleAxes(bool onlyEnlarge, bool includeErrorBars) const; // overloads base class interface + void rescaleKeyAxis(bool onlyEnlarge, bool includeErrorBars) const; // overloads base class interface + void rescaleValueAxis(bool onlyEnlarge, bool includeErrorBars) const; // overloads base class interface + +protected: + // property members: + QCPDataMap *mData; + QPen mErrorPen; + LineStyle mLineStyle; + QCPScatterStyle mScatterStyle; + ErrorType mErrorType; + double mErrorBarSize; + bool mErrorBarSkipSymbol; + QPointer mChannelFillGraph; + bool mAdaptiveSampling; + + // reimplemented virtual methods: + virtual void draw(QCPPainter *painter); + virtual void drawLegendIcon(QCPPainter *painter, const QRectF &rect) const; + virtual QCPRange getKeyRange(bool &foundRange, SignDomain inSignDomain=sdBoth) const; + virtual QCPRange getValueRange(bool &foundRange, SignDomain inSignDomain=sdBoth) const; + virtual QCPRange getKeyRange(bool &foundRange, SignDomain inSignDomain, bool includeErrors) const; // overloads base class interface + virtual QCPRange getValueRange(bool &foundRange, SignDomain inSignDomain, bool includeErrors) const; // overloads base class interface + + // introduced virtual methods: + virtual void drawFill(QCPPainter *painter, QVector *lineData) const; + virtual void drawScatterPlot(QCPPainter *painter, QVector *scatterData) const; + virtual void drawLinePlot(QCPPainter *painter, QVector *lineData) const; + virtual void drawImpulsePlot(QCPPainter *painter, QVector *lineData) const; + + // non-virtual methods: + void getPreparedData(QVector *lineData, QVector *scatterData) const; + void getPlotData(QVector *lineData, QVector *scatterData) const; + void getScatterPlotData(QVector *scatterData) const; + void getLinePlotData(QVector *linePixelData, QVector *scatterData) const; + void getStepLeftPlotData(QVector *linePixelData, QVector *scatterData) const; + void getStepRightPlotData(QVector *linePixelData, QVector *scatterData) const; + void getStepCenterPlotData(QVector *linePixelData, QVector *scatterData) const; + void getImpulsePlotData(QVector *linePixelData, QVector *scatterData) const; + void drawError(QCPPainter *painter, double x, double y, const QCPData &data) const; + void getVisibleDataBounds(QCPDataMap::const_iterator &lower, QCPDataMap::const_iterator &upper) const; + int countDataInBounds(const QCPDataMap::const_iterator &lower, const QCPDataMap::const_iterator &upper, int maxCount) const; + void addFillBasePoints(QVector *lineData) const; + void removeFillBasePoints(QVector *lineData) const; + QPointF lowerFillBasePoint(double lowerKey) const; + QPointF upperFillBasePoint(double upperKey) const; + const QPolygonF getChannelFillPolygon(const QVector *lineData) const; + int findIndexBelowX(const QVector *data, double x) const; + int findIndexAboveX(const QVector *data, double x) const; + int findIndexBelowY(const QVector *data, double y) const; + int findIndexAboveY(const QVector *data, double y) const; + double pointDistance(const QPointF &pixelPoint) const; + + friend class QCustomPlot; + friend class QCPLegend; +}; + + +/*! \file */ + + + +class QCP_LIB_DECL QCPCurveData +{ +public: + QCPCurveData(); + QCPCurveData(double t, double key, double value); + double t, key, value; +}; +Q_DECLARE_TYPEINFO(QCPCurveData, Q_MOVABLE_TYPE); + +/*! \typedef QCPCurveDataMap + Container for storing \ref QCPCurveData items in a sorted fashion. The key of the map + is the t member of the QCPCurveData instance. + + This is the container in which QCPCurve holds its data. + \see QCPCurveData, QCPCurve::setData +*/ + +typedef QMap QCPCurveDataMap; +typedef QMapIterator QCPCurveDataMapIterator; +typedef QMutableMapIterator QCPCurveDataMutableMapIterator; + + +class QCP_LIB_DECL QCPCurve : public QCPAbstractPlottable +{ + Q_OBJECT + /// \cond INCLUDE_QPROPERTIES + Q_PROPERTY(QCPScatterStyle scatterStyle READ scatterStyle WRITE setScatterStyle) + Q_PROPERTY(LineStyle lineStyle READ lineStyle WRITE setLineStyle) + /// \endcond +public: + /*! + Defines how the curve's line is represented visually in the plot. The line is drawn with the + current pen of the curve (\ref setPen). + \see setLineStyle + */ + enum LineStyle { lsNone ///< No line is drawn between data points (e.g. only scatters) + ,lsLine ///< Data points are connected with a straight line + }; + explicit QCPCurve(QCPAxis *keyAxis, QCPAxis *valueAxis); + virtual ~QCPCurve(); + + // getters: + QCPCurveDataMap *data() const { return mData; } + QCPScatterStyle scatterStyle() const { return mScatterStyle; } + LineStyle lineStyle() const { return mLineStyle; } + + // setters: + void setData(QCPCurveDataMap *data, bool copy=false); + void setData(const QVector &t, const QVector &key, const QVector &value); + void setData(const QVector &key, const QVector &value); + void setScatterStyle(const QCPScatterStyle &style); + void setLineStyle(LineStyle style); + + // non-property methods: + void addData(const QCPCurveDataMap &dataMap); + void addData(const QCPCurveData &data); + void addData(double t, double key, double value); + void addData(double key, double value); + void addData(const QVector &ts, const QVector &keys, const QVector &values); + void removeDataBefore(double t); + void removeDataAfter(double t); + void removeData(double fromt, double tot); + void removeData(double t); + + // reimplemented virtual methods: + virtual void clearData(); + virtual double selectTest(const QPointF &pos, bool onlySelectable, QVariant *details=0) const; + +protected: + // property members: + QCPCurveDataMap *mData; + QCPScatterStyle mScatterStyle; + LineStyle mLineStyle; + + // reimplemented virtual methods: + virtual void draw(QCPPainter *painter); + virtual void drawLegendIcon(QCPPainter *painter, const QRectF &rect) const; + virtual QCPRange getKeyRange(bool &foundRange, SignDomain inSignDomain=sdBoth) const; + virtual QCPRange getValueRange(bool &foundRange, SignDomain inSignDomain=sdBoth) const; + + // introduced virtual methods: + virtual void drawScatterPlot(QCPPainter *painter, const QVector *pointData) const; + + // non-virtual methods: + void getCurveData(QVector *lineData) const; + int getRegion(double x, double y, double rectLeft, double rectTop, double rectRight, double rectBottom) const; + QPointF getOptimizedPoint(int prevRegion, double prevKey, double prevValue, double key, double value, double rectLeft, double rectTop, double rectRight, double rectBottom) const; + QVector getOptimizedCornerPoints(int prevRegion, int currentRegion, double prevKey, double prevValue, double key, double value, double rectLeft, double rectTop, double rectRight, double rectBottom) const; + bool mayTraverse(int prevRegion, int currentRegion) const; + bool getTraverse(double prevKey, double prevValue, double key, double value, double rectLeft, double rectTop, double rectRight, double rectBottom, QPointF &crossA, QPointF &crossB) const; + void getTraverseCornerPoints(int prevRegion, int currentRegion, double rectLeft, double rectTop, double rectRight, double rectBottom, QVector &beforeTraverse, QVector &afterTraverse) const; + double pointDistance(const QPointF &pixelPoint) const; + + friend class QCustomPlot; + friend class QCPLegend; +}; + + +/*! \file */ + + + +class QCP_LIB_DECL QCPBarsGroup : public QObject +{ + Q_OBJECT + /// \cond INCLUDE_QPROPERTIES + Q_PROPERTY(SpacingType spacingType READ spacingType WRITE setSpacingType) + Q_PROPERTY(double spacing READ spacing WRITE setSpacing) + /// \endcond +public: + /*! + Defines the ways the spacing between bars in the group can be specified. Thus it defines what + the number passed to \ref setSpacing actually means. + + \see setSpacingType, setSpacing + */ + enum SpacingType { stAbsolute ///< Bar spacing is in absolute pixels + ,stAxisRectRatio ///< Bar spacing is given by a fraction of the axis rect size + ,stPlotCoords ///< Bar spacing is in key coordinates and thus scales with the key axis range + }; + QCPBarsGroup(QCustomPlot *parentPlot); + ~QCPBarsGroup(); + + // getters: + SpacingType spacingType() const { return mSpacingType; } + double spacing() const { return mSpacing; } + + // setters: + void setSpacingType(SpacingType spacingType); + void setSpacing(double spacing); + + // non-virtual methods: + QList bars() const { return mBars; } + QCPBars* bars(int index) const; + int size() const { return mBars.size(); } + bool isEmpty() const { return mBars.isEmpty(); } + void clear(); + bool contains(QCPBars *bars) const { return mBars.contains(bars); } + void append(QCPBars *bars); + void insert(int i, QCPBars *bars); + void remove(QCPBars *bars); + +protected: + // non-property members: + QCustomPlot *mParentPlot; + SpacingType mSpacingType; + double mSpacing; + QList mBars; + + // non-virtual methods: + void registerBars(QCPBars *bars); + void unregisterBars(QCPBars *bars); + + // virtual methods: + double keyPixelOffset(const QCPBars *bars, double keyCoord); + double getPixelSpacing(const QCPBars *bars, double keyCoord); + +private: + Q_DISABLE_COPY(QCPBarsGroup) + + friend class QCPBars; +}; + + +class QCP_LIB_DECL QCPBarData +{ +public: + QCPBarData(); + QCPBarData(double key, double value); + double key, value; +}; +Q_DECLARE_TYPEINFO(QCPBarData, Q_MOVABLE_TYPE); + +/*! \typedef QCPBarDataMap + Container for storing \ref QCPBarData items in a sorted fashion. The key of the map + is the key member of the QCPBarData instance. + + This is the container in which QCPBars holds its data. + \see QCPBarData, QCPBars::setData +*/ +typedef QMap QCPBarDataMap; +typedef QMapIterator QCPBarDataMapIterator; +typedef QMutableMapIterator QCPBarDataMutableMapIterator; + + +class QCP_LIB_DECL QCPBars : public QCPAbstractPlottable +{ + Q_OBJECT + /// \cond INCLUDE_QPROPERTIES + Q_PROPERTY(double width READ width WRITE setWidth) + Q_PROPERTY(WidthType widthType READ widthType WRITE setWidthType) + Q_PROPERTY(QCPBarsGroup* barsGroup READ barsGroup WRITE setBarsGroup) + Q_PROPERTY(double baseValue READ baseValue WRITE setBaseValue) + Q_PROPERTY(QCPBars* barBelow READ barBelow) + Q_PROPERTY(QCPBars* barAbove READ barAbove) + /// \endcond +public: + /*! + Defines the ways the width of the bar can be specified. Thus it defines what the number passed + to \ref setWidth actually means. + + \see setWidthType, setWidth + */ + enum WidthType { wtAbsolute ///< Bar width is in absolute pixels + ,wtAxisRectRatio ///< Bar width is given by a fraction of the axis rect size + ,wtPlotCoords ///< Bar width is in key coordinates and thus scales with the key axis range + }; + Q_ENUMS(WidthType) + + explicit QCPBars(QCPAxis *keyAxis, QCPAxis *valueAxis); + virtual ~QCPBars(); + + // getters: + double width() const { return mWidth; } + WidthType widthType() const { return mWidthType; } + QCPBarsGroup *barsGroup() const { return mBarsGroup; } + double baseValue() const { return mBaseValue; } + QCPBars *barBelow() const { return mBarBelow.data(); } + QCPBars *barAbove() const { return mBarAbove.data(); } + QCPBarDataMap *data() const { return mData; } + + // setters: + void setWidth(double width); + void setWidthType(WidthType widthType); + void setBarsGroup(QCPBarsGroup *barsGroup); + void setBaseValue(double baseValue); + void setData(QCPBarDataMap *data, bool copy=false); + void setData(const QVector &key, const QVector &value); + + // non-property methods: + void moveBelow(QCPBars *bars); + void moveAbove(QCPBars *bars); + void addData(const QCPBarDataMap &dataMap); + void addData(const QCPBarData &data); + void addData(double key, double value); + void addData(const QVector &keys, const QVector &values); + void removeDataBefore(double key); + void removeDataAfter(double key); + void removeData(double fromKey, double toKey); + void removeData(double key); + + // reimplemented virtual methods: + virtual void clearData(); + virtual double selectTest(const QPointF &pos, bool onlySelectable, QVariant *details=0) const; + +protected: + // property members: + QCPBarDataMap *mData; + double mWidth; + WidthType mWidthType; + QCPBarsGroup *mBarsGroup; + double mBaseValue; + QPointer mBarBelow, mBarAbove; + + // reimplemented virtual methods: + virtual void draw(QCPPainter *painter); + virtual void drawLegendIcon(QCPPainter *painter, const QRectF &rect) const; + virtual QCPRange getKeyRange(bool &foundRange, SignDomain inSignDomain=sdBoth) const; + virtual QCPRange getValueRange(bool &foundRange, SignDomain inSignDomain=sdBoth) const; + + // non-virtual methods: + void getVisibleDataBounds(QCPBarDataMap::const_iterator &lower, QCPBarDataMap::const_iterator &upperEnd) const; + QPolygonF getBarPolygon(double key, double value) const; + void getPixelWidth(double key, double &lower, double &upper) const; + double getStackedBaseValue(double key, bool positive) const; + static void connectBars(QCPBars* lower, QCPBars* upper); + + friend class QCustomPlot; + friend class QCPLegend; + friend class QCPBarsGroup; +}; + + +/*! \file */ + + + +class QCP_LIB_DECL QCPStatisticalBox : public QCPAbstractPlottable +{ + Q_OBJECT + /// \cond INCLUDE_QPROPERTIES + Q_PROPERTY(double key READ key WRITE setKey) + Q_PROPERTY(double minimum READ minimum WRITE setMinimum) + Q_PROPERTY(double lowerQuartile READ lowerQuartile WRITE setLowerQuartile) + Q_PROPERTY(double median READ median WRITE setMedian) + Q_PROPERTY(double upperQuartile READ upperQuartile WRITE setUpperQuartile) + Q_PROPERTY(double maximum READ maximum WRITE setMaximum) + Q_PROPERTY(QVector outliers READ outliers WRITE setOutliers) + Q_PROPERTY(double width READ width WRITE setWidth) + Q_PROPERTY(double whiskerWidth READ whiskerWidth WRITE setWhiskerWidth) + Q_PROPERTY(QPen whiskerPen READ whiskerPen WRITE setWhiskerPen) + Q_PROPERTY(QPen whiskerBarPen READ whiskerBarPen WRITE setWhiskerBarPen) + Q_PROPERTY(QPen medianPen READ medianPen WRITE setMedianPen) + Q_PROPERTY(QCPScatterStyle outlierStyle READ outlierStyle WRITE setOutlierStyle) + /// \endcond +public: + explicit QCPStatisticalBox(QCPAxis *keyAxis, QCPAxis *valueAxis); + + // getters: + double key() const { return mKey; } + double minimum() const { return mMinimum; } + double lowerQuartile() const { return mLowerQuartile; } + double median() const { return mMedian; } + double upperQuartile() const { return mUpperQuartile; } + double maximum() const { return mMaximum; } + QVector outliers() const { return mOutliers; } + double width() const { return mWidth; } + double whiskerWidth() const { return mWhiskerWidth; } + QPen whiskerPen() const { return mWhiskerPen; } + QPen whiskerBarPen() const { return mWhiskerBarPen; } + QPen medianPen() const { return mMedianPen; } + QCPScatterStyle outlierStyle() const { return mOutlierStyle; } + + // setters: + void setKey(double key); + void setMinimum(double value); + void setLowerQuartile(double value); + void setMedian(double value); + void setUpperQuartile(double value); + void setMaximum(double value); + void setOutliers(const QVector &values); + void setData(double key, double minimum, double lowerQuartile, double median, double upperQuartile, double maximum); + void setWidth(double width); + void setWhiskerWidth(double width); + void setWhiskerPen(const QPen &pen); + void setWhiskerBarPen(const QPen &pen); + void setMedianPen(const QPen &pen); + void setOutlierStyle(const QCPScatterStyle &style); + + // non-property methods: + virtual void clearData(); + virtual double selectTest(const QPointF &pos, bool onlySelectable, QVariant *details=0) const; + +protected: + // property members: + QVector mOutliers; + double mKey, mMinimum, mLowerQuartile, mMedian, mUpperQuartile, mMaximum; + double mWidth; + double mWhiskerWidth; + QPen mWhiskerPen, mWhiskerBarPen, mMedianPen; + QCPScatterStyle mOutlierStyle; + + // reimplemented virtual methods: + virtual void draw(QCPPainter *painter); + virtual void drawLegendIcon(QCPPainter *painter, const QRectF &rect) const; + virtual QCPRange getKeyRange(bool &foundRange, SignDomain inSignDomain=sdBoth) const; + virtual QCPRange getValueRange(bool &foundRange, SignDomain inSignDomain=sdBoth) const; + + // introduced virtual methods: + virtual void drawQuartileBox(QCPPainter *painter, QRectF *quartileBox=0) const; + virtual void drawMedian(QCPPainter *painter) const; + virtual void drawWhiskers(QCPPainter *painter) const; + virtual void drawOutliers(QCPPainter *painter) const; + + friend class QCustomPlot; + friend class QCPLegend; +}; + + +class QCP_LIB_DECL QCPColorMapData +{ +public: + QCPColorMapData(int keySize, int valueSize, const QCPRange &keyRange, const QCPRange &valueRange); + ~QCPColorMapData(); + QCPColorMapData(const QCPColorMapData &other); + QCPColorMapData &operator=(const QCPColorMapData &other); + + // getters: + int keySize() const { return mKeySize; } + int valueSize() const { return mValueSize; } + QCPRange keyRange() const { return mKeyRange; } + QCPRange valueRange() const { return mValueRange; } + QCPRange dataBounds() const { return mDataBounds; } + double data(double key, double value); + double cell(int keyIndex, int valueIndex); + + // setters: + void setSize(int keySize, int valueSize); + void setKeySize(int keySize); + void setValueSize(int valueSize); + void setRange(const QCPRange &keyRange, const QCPRange &valueRange); + void setKeyRange(const QCPRange &keyRange); + void setValueRange(const QCPRange &valueRange); + void setData(double key, double value, double z); + void setCell(int keyIndex, int valueIndex, double z); + + // non-property methods: + void recalculateDataBounds(); + void clear(); + void fill(double z); + bool isEmpty() const { return mIsEmpty; } + void coordToCell(double key, double value, int *keyIndex, int *valueIndex) const; + void cellToCoord(int keyIndex, int valueIndex, double *key, double *value) const; + +protected: + // property members: + int mKeySize, mValueSize; + QCPRange mKeyRange, mValueRange; + bool mIsEmpty; + // non-property members: + double *mData; + QCPRange mDataBounds; + bool mDataModified; + + friend class QCPColorMap; +}; + + +class QCP_LIB_DECL QCPColorMap : public QCPAbstractPlottable +{ + Q_OBJECT + /// \cond INCLUDE_QPROPERTIES + Q_PROPERTY(QCPRange dataRange READ dataRange WRITE setDataRange NOTIFY dataRangeChanged) + Q_PROPERTY(QCPAxis::ScaleType dataScaleType READ dataScaleType WRITE setDataScaleType NOTIFY dataScaleTypeChanged) + Q_PROPERTY(QCPColorGradient gradient READ gradient WRITE setGradient NOTIFY gradientChanged) + Q_PROPERTY(bool interpolate READ interpolate WRITE setInterpolate) + Q_PROPERTY(bool tightBoundary READ tightBoundary WRITE setTightBoundary) + Q_PROPERTY(QCPColorScale* colorScale READ colorScale WRITE setColorScale) + /// \endcond +public: + explicit QCPColorMap(QCPAxis *keyAxis, QCPAxis *valueAxis); + virtual ~QCPColorMap(); + + // getters: + QCPColorMapData *data() const { return mMapData; } + QCPRange dataRange() const { return mDataRange; } + QCPAxis::ScaleType dataScaleType() const { return mDataScaleType; } + bool interpolate() const { return mInterpolate; } + bool tightBoundary() const { return mTightBoundary; } + QCPColorGradient gradient() const { return mGradient; } + QCPColorScale *colorScale() const { return mColorScale.data(); } + + // setters: + void setData(QCPColorMapData *data, bool copy=false); + Q_SLOT void setDataRange(const QCPRange &dataRange); + Q_SLOT void setDataScaleType(QCPAxis::ScaleType scaleType); + Q_SLOT void setGradient(const QCPColorGradient &gradient); + void setInterpolate(bool enabled); + void setTightBoundary(bool enabled); + void setColorScale(QCPColorScale *colorScale); + + // non-property methods: + void rescaleDataRange(bool recalculateDataBounds=false); + Q_SLOT void updateLegendIcon(Qt::TransformationMode transformMode=Qt::SmoothTransformation, const QSize &thumbSize=QSize(32, 18)); + + // reimplemented virtual methods: + virtual void clearData(); + virtual double selectTest(const QPointF &pos, bool onlySelectable, QVariant *details=0) const; + +signals: + void dataRangeChanged(QCPRange newRange); + void dataScaleTypeChanged(QCPAxis::ScaleType scaleType); + void gradientChanged(QCPColorGradient newGradient); + +protected: + // property members: + QCPRange mDataRange; + QCPAxis::ScaleType mDataScaleType; + QCPColorMapData *mMapData; + QCPColorGradient mGradient; + bool mInterpolate; + bool mTightBoundary; + QPointer mColorScale; + // non-property members: + QImage mMapImage, mUndersampledMapImage; + QPixmap mLegendIcon; + bool mMapImageInvalidated; + + // introduced virtual methods: + virtual void updateMapImage(); + + // reimplemented virtual methods: + virtual void draw(QCPPainter *painter); + virtual void drawLegendIcon(QCPPainter *painter, const QRectF &rect) const; + virtual QCPRange getKeyRange(bool &foundRange, SignDomain inSignDomain=sdBoth) const; + virtual QCPRange getValueRange(bool &foundRange, SignDomain inSignDomain=sdBoth) const; + + friend class QCustomPlot; + friend class QCPLegend; +}; + + +/*! \file */ + + + +class QCP_LIB_DECL QCPFinancialData +{ +public: + QCPFinancialData(); + QCPFinancialData(double key, double open, double high, double low, double close); + double key, open, high, low, close; +}; +Q_DECLARE_TYPEINFO(QCPFinancialData, Q_MOVABLE_TYPE); + +/*! \typedef QCPFinancialDataMap + Container for storing \ref QCPFinancialData items in a sorted fashion. The key of the map + is the key member of the QCPFinancialData instance. + + This is the container in which QCPFinancial holds its data. + \see QCPFinancial, QCPFinancial::setData +*/ +typedef QMap QCPFinancialDataMap; +typedef QMapIterator QCPFinancialDataMapIterator; +typedef QMutableMapIterator QCPFinancialDataMutableMapIterator; + + +class QCP_LIB_DECL QCPFinancial : public QCPAbstractPlottable +{ + Q_OBJECT + /// \cond INCLUDE_QPROPERTIES + Q_PROPERTY(ChartStyle chartStyle READ chartStyle WRITE setChartStyle) + Q_PROPERTY(double width READ width WRITE setWidth) + Q_PROPERTY(bool twoColored READ twoColored WRITE setTwoColored) + Q_PROPERTY(QBrush brushPositive READ brushPositive WRITE setBrushPositive) + Q_PROPERTY(QBrush brushNegative READ brushNegative WRITE setBrushNegative) + Q_PROPERTY(QPen penPositive READ penPositive WRITE setPenPositive) + Q_PROPERTY(QPen penNegative READ penNegative WRITE setPenNegative) + /// \endcond +public: + /*! + Defines the possible representations of OHLC data in the plot. + + \see setChartStyle + */ + enum ChartStyle { csOhlc ///< Open-High-Low-Close bar representation + ,csCandlestick ///< Candlestick representation + }; + Q_ENUMS(ChartStyle) + + explicit QCPFinancial(QCPAxis *keyAxis, QCPAxis *valueAxis); + virtual ~QCPFinancial(); + + // getters: + QCPFinancialDataMap *data() const { return mData; } + ChartStyle chartStyle() const { return mChartStyle; } + double width() const { return mWidth; } + bool twoColored() const { return mTwoColored; } + QBrush brushPositive() const { return mBrushPositive; } + QBrush brushNegative() const { return mBrushNegative; } + QPen penPositive() const { return mPenPositive; } + QPen penNegative() const { return mPenNegative; } + + + // setters: + void setData(QCPFinancialDataMap *data, bool copy=false); + void setData(const QVector &key, const QVector &open, const QVector &high, const QVector &low, const QVector &close); + void setChartStyle(ChartStyle style); + void setWidth(double width); + void setTwoColored(bool twoColored); + void setBrushPositive(const QBrush &brush); + void setBrushNegative(const QBrush &brush); + void setPenPositive(const QPen &pen); + void setPenNegative(const QPen &pen); + + // non-property methods: + void addData(const QCPFinancialDataMap &dataMap); + void addData(const QCPFinancialData &data); + void addData(double key, double open, double high, double low, double close); + void addData(const QVector &key, const QVector &open, const QVector &high, const QVector &low, const QVector &close); + void removeDataBefore(double key); + void removeDataAfter(double key); + void removeData(double fromKey, double toKey); + void removeData(double key); + + // reimplemented virtual methods: + virtual void clearData(); + virtual double selectTest(const QPointF &pos, bool onlySelectable, QVariant *details=0) const; + + // static methods: + static QCPFinancialDataMap timeSeriesToOhlc(const QVector &time, const QVector &value, double timeBinSize, double timeBinOffset = 0); + +protected: + // property members: + QCPFinancialDataMap *mData; + ChartStyle mChartStyle; + double mWidth; + bool mTwoColored; + QBrush mBrushPositive, mBrushNegative; + QPen mPenPositive, mPenNegative; + + // reimplemented virtual methods: + virtual void draw(QCPPainter *painter); + virtual void drawLegendIcon(QCPPainter *painter, const QRectF &rect) const; + virtual QCPRange getKeyRange(bool &foundRange, SignDomain inSignDomain=sdBoth) const; + virtual QCPRange getValueRange(bool &foundRange, SignDomain inSignDomain=sdBoth) const; + + // non-virtual methods: + void drawOhlcPlot(QCPPainter *painter, const QCPFinancialDataMap::const_iterator &begin, const QCPFinancialDataMap::const_iterator &end); + void drawCandlestickPlot(QCPPainter *painter, const QCPFinancialDataMap::const_iterator &begin, const QCPFinancialDataMap::const_iterator &end); + double ohlcSelectTest(const QPointF &pos, const QCPFinancialDataMap::const_iterator &begin, const QCPFinancialDataMap::const_iterator &end) const; + double candlestickSelectTest(const QPointF &pos, const QCPFinancialDataMap::const_iterator &begin, const QCPFinancialDataMap::const_iterator &end) const; + void getVisibleDataBounds(QCPFinancialDataMap::const_iterator &lower, QCPFinancialDataMap::const_iterator &upper) const; + + friend class QCustomPlot; + friend class QCPLegend; +}; + + +class QCP_LIB_DECL QCPItemStraightLine : public QCPAbstractItem +{ + Q_OBJECT + /// \cond INCLUDE_QPROPERTIES + Q_PROPERTY(QPen pen READ pen WRITE setPen) + Q_PROPERTY(QPen selectedPen READ selectedPen WRITE setSelectedPen) + /// \endcond +public: + QCPItemStraightLine(QCustomPlot *parentPlot); + virtual ~QCPItemStraightLine(); + + // getters: + QPen pen() const { return mPen; } + QPen selectedPen() const { return mSelectedPen; } + + // setters; + void setPen(const QPen &pen); + void setSelectedPen(const QPen &pen); + + // reimplemented virtual methods: + virtual double selectTest(const QPointF &pos, bool onlySelectable, QVariant *details=0) const; + + QCPItemPosition * const point1; + QCPItemPosition * const point2; + +protected: + // property members: + QPen mPen, mSelectedPen; + + // reimplemented virtual methods: + virtual void draw(QCPPainter *painter); + + // non-virtual methods: + double distToStraightLine(const QVector2D &point1, const QVector2D &vec, const QVector2D &point) const; + QLineF getRectClippedStraightLine(const QVector2D &point1, const QVector2D &vec, const QRect &rect) const; + QPen mainPen() const; +}; + + +class QCP_LIB_DECL QCPItemLine : public QCPAbstractItem +{ + Q_OBJECT + /// \cond INCLUDE_QPROPERTIES + Q_PROPERTY(QPen pen READ pen WRITE setPen) + Q_PROPERTY(QPen selectedPen READ selectedPen WRITE setSelectedPen) + Q_PROPERTY(QCPLineEnding head READ head WRITE setHead) + Q_PROPERTY(QCPLineEnding tail READ tail WRITE setTail) + /// \endcond +public: + QCPItemLine(QCustomPlot *parentPlot); + virtual ~QCPItemLine(); + + // getters: + QPen pen() const { return mPen; } + QPen selectedPen() const { return mSelectedPen; } + QCPLineEnding head() const { return mHead; } + QCPLineEnding tail() const { return mTail; } + + // setters; + void setPen(const QPen &pen); + void setSelectedPen(const QPen &pen); + void setHead(const QCPLineEnding &head); + void setTail(const QCPLineEnding &tail); + + // reimplemented virtual methods: + virtual double selectTest(const QPointF &pos, bool onlySelectable, QVariant *details=0) const; + + QCPItemPosition * const start; + QCPItemPosition * const end; + +protected: + // property members: + QPen mPen, mSelectedPen; + QCPLineEnding mHead, mTail; + + // reimplemented virtual methods: + virtual void draw(QCPPainter *painter); + + // non-virtual methods: + QLineF getRectClippedLine(const QVector2D &start, const QVector2D &end, const QRect &rect) const; + QPen mainPen() const; +}; + + +class QCP_LIB_DECL QCPItemCurve : public QCPAbstractItem +{ + Q_OBJECT + /// \cond INCLUDE_QPROPERTIES + Q_PROPERTY(QPen pen READ pen WRITE setPen) + Q_PROPERTY(QPen selectedPen READ selectedPen WRITE setSelectedPen) + Q_PROPERTY(QCPLineEnding head READ head WRITE setHead) + Q_PROPERTY(QCPLineEnding tail READ tail WRITE setTail) + /// \endcond +public: + QCPItemCurve(QCustomPlot *parentPlot); + virtual ~QCPItemCurve(); + + // getters: + QPen pen() const { return mPen; } + QPen selectedPen() const { return mSelectedPen; } + QCPLineEnding head() const { return mHead; } + QCPLineEnding tail() const { return mTail; } + + // setters; + void setPen(const QPen &pen); + void setSelectedPen(const QPen &pen); + void setHead(const QCPLineEnding &head); + void setTail(const QCPLineEnding &tail); + + // reimplemented virtual methods: + virtual double selectTest(const QPointF &pos, bool onlySelectable, QVariant *details=0) const; + + QCPItemPosition * const start; + QCPItemPosition * const startDir; + QCPItemPosition * const endDir; + QCPItemPosition * const end; + +protected: + // property members: + QPen mPen, mSelectedPen; + QCPLineEnding mHead, mTail; + + // reimplemented virtual methods: + virtual void draw(QCPPainter *painter); + + // non-virtual methods: + QPen mainPen() const; +}; + + +class QCP_LIB_DECL QCPItemRect : public QCPAbstractItem +{ + Q_OBJECT + /// \cond INCLUDE_QPROPERTIES + Q_PROPERTY(QPen pen READ pen WRITE setPen) + Q_PROPERTY(QPen selectedPen READ selectedPen WRITE setSelectedPen) + Q_PROPERTY(QBrush brush READ brush WRITE setBrush) + Q_PROPERTY(QBrush selectedBrush READ selectedBrush WRITE setSelectedBrush) + /// \endcond +public: + QCPItemRect(QCustomPlot *parentPlot); + virtual ~QCPItemRect(); + + // getters: + QPen pen() const { return mPen; } + QPen selectedPen() const { return mSelectedPen; } + QBrush brush() const { return mBrush; } + QBrush selectedBrush() const { return mSelectedBrush; } + + // setters; + void setPen(const QPen &pen); + void setSelectedPen(const QPen &pen); + void setBrush(const QBrush &brush); + void setSelectedBrush(const QBrush &brush); + + // reimplemented virtual methods: + virtual double selectTest(const QPointF &pos, bool onlySelectable, QVariant *details=0) const; + + QCPItemPosition * const topLeft; + QCPItemPosition * const bottomRight; + QCPItemAnchor * const top; + QCPItemAnchor * const topRight; + QCPItemAnchor * const right; + QCPItemAnchor * const bottom; + QCPItemAnchor * const bottomLeft; + QCPItemAnchor * const left; + +protected: + enum AnchorIndex {aiTop, aiTopRight, aiRight, aiBottom, aiBottomLeft, aiLeft}; + + // property members: + QPen mPen, mSelectedPen; + QBrush mBrush, mSelectedBrush; + + // reimplemented virtual methods: + virtual void draw(QCPPainter *painter); + virtual QPointF anchorPixelPoint(int anchorId) const; + + // non-virtual methods: + QPen mainPen() const; + QBrush mainBrush() const; +}; + + +class QCP_LIB_DECL QCPItemText : public QCPAbstractItem +{ + Q_OBJECT + /// \cond INCLUDE_QPROPERTIES + Q_PROPERTY(QColor color READ color WRITE setColor) + Q_PROPERTY(QColor selectedColor READ selectedColor WRITE setSelectedColor) + Q_PROPERTY(QPen pen READ pen WRITE setPen) + Q_PROPERTY(QPen selectedPen READ selectedPen WRITE setSelectedPen) + Q_PROPERTY(QBrush brush READ brush WRITE setBrush) + Q_PROPERTY(QBrush selectedBrush READ selectedBrush WRITE setSelectedBrush) + Q_PROPERTY(QFont font READ font WRITE setFont) + Q_PROPERTY(QFont selectedFont READ selectedFont WRITE setSelectedFont) + Q_PROPERTY(QString text READ text WRITE setText) + Q_PROPERTY(Qt::Alignment positionAlignment READ positionAlignment WRITE setPositionAlignment) + Q_PROPERTY(Qt::Alignment textAlignment READ textAlignment WRITE setTextAlignment) + Q_PROPERTY(double rotation READ rotation WRITE setRotation) + Q_PROPERTY(QMargins padding READ padding WRITE setPadding) + /// \endcond +public: + QCPItemText(QCustomPlot *parentPlot); + virtual ~QCPItemText(); + + // getters: + QColor color() const { return mColor; } + QColor selectedColor() const { return mSelectedColor; } + QPen pen() const { return mPen; } + QPen selectedPen() const { return mSelectedPen; } + QBrush brush() const { return mBrush; } + QBrush selectedBrush() const { return mSelectedBrush; } + QFont font() const { return mFont; } + QFont selectedFont() const { return mSelectedFont; } + QString text() const { return mText; } + Qt::Alignment positionAlignment() const { return mPositionAlignment; } + Qt::Alignment textAlignment() const { return mTextAlignment; } + double rotation() const { return mRotation; } + QMargins padding() const { return mPadding; } + + // setters; + void setColor(const QColor &color); + void setSelectedColor(const QColor &color); + void setPen(const QPen &pen); + void setSelectedPen(const QPen &pen); + void setBrush(const QBrush &brush); + void setSelectedBrush(const QBrush &brush); + void setFont(const QFont &font); + void setSelectedFont(const QFont &font); + void setText(const QString &text); + void setPositionAlignment(Qt::Alignment alignment); + void setTextAlignment(Qt::Alignment alignment); + void setRotation(double degrees); + void setPadding(const QMargins &padding); + + // reimplemented virtual methods: + virtual double selectTest(const QPointF &pos, bool onlySelectable, QVariant *details=0) const; + + QCPItemPosition * const position; + QCPItemAnchor * const topLeft; + QCPItemAnchor * const top; + QCPItemAnchor * const topRight; + QCPItemAnchor * const right; + QCPItemAnchor * const bottomRight; + QCPItemAnchor * const bottom; + QCPItemAnchor * const bottomLeft; + QCPItemAnchor * const left; + +protected: + enum AnchorIndex {aiTopLeft, aiTop, aiTopRight, aiRight, aiBottomRight, aiBottom, aiBottomLeft, aiLeft}; + + // property members: + QColor mColor, mSelectedColor; + QPen mPen, mSelectedPen; + QBrush mBrush, mSelectedBrush; + QFont mFont, mSelectedFont; + QString mText; + Qt::Alignment mPositionAlignment; + Qt::Alignment mTextAlignment; + double mRotation; + QMargins mPadding; + + // reimplemented virtual methods: + virtual void draw(QCPPainter *painter); + virtual QPointF anchorPixelPoint(int anchorId) const; + + // non-virtual methods: + QPointF getTextDrawPoint(const QPointF &pos, const QRectF &rect, Qt::Alignment positionAlignment) const; + QFont mainFont() const; + QColor mainColor() const; + QPen mainPen() const; + QBrush mainBrush() const; +}; + + +class QCP_LIB_DECL QCPItemEllipse : public QCPAbstractItem +{ + Q_OBJECT + /// \cond INCLUDE_QPROPERTIES + Q_PROPERTY(QPen pen READ pen WRITE setPen) + Q_PROPERTY(QPen selectedPen READ selectedPen WRITE setSelectedPen) + Q_PROPERTY(QBrush brush READ brush WRITE setBrush) + Q_PROPERTY(QBrush selectedBrush READ selectedBrush WRITE setSelectedBrush) + /// \endcond +public: + QCPItemEllipse(QCustomPlot *parentPlot); + virtual ~QCPItemEllipse(); + + // getters: + QPen pen() const { return mPen; } + QPen selectedPen() const { return mSelectedPen; } + QBrush brush() const { return mBrush; } + QBrush selectedBrush() const { return mSelectedBrush; } + + // setters; + void setPen(const QPen &pen); + void setSelectedPen(const QPen &pen); + void setBrush(const QBrush &brush); + void setSelectedBrush(const QBrush &brush); + + // reimplemented virtual methods: + virtual double selectTest(const QPointF &pos, bool onlySelectable, QVariant *details=0) const; + + QCPItemPosition * const topLeft; + QCPItemPosition * const bottomRight; + QCPItemAnchor * const topLeftRim; + QCPItemAnchor * const top; + QCPItemAnchor * const topRightRim; + QCPItemAnchor * const right; + QCPItemAnchor * const bottomRightRim; + QCPItemAnchor * const bottom; + QCPItemAnchor * const bottomLeftRim; + QCPItemAnchor * const left; + QCPItemAnchor * const center; + +protected: + enum AnchorIndex {aiTopLeftRim, aiTop, aiTopRightRim, aiRight, aiBottomRightRim, aiBottom, aiBottomLeftRim, aiLeft, aiCenter}; + + // property members: + QPen mPen, mSelectedPen; + QBrush mBrush, mSelectedBrush; + + // reimplemented virtual methods: + virtual void draw(QCPPainter *painter); + virtual QPointF anchorPixelPoint(int anchorId) const; + + // non-virtual methods: + QPen mainPen() const; + QBrush mainBrush() const; +}; + + +class QCP_LIB_DECL QCPItemPixmap : public QCPAbstractItem +{ + Q_OBJECT + /// \cond INCLUDE_QPROPERTIES + Q_PROPERTY(QPixmap pixmap READ pixmap WRITE setPixmap) + Q_PROPERTY(bool scaled READ scaled WRITE setScaled) + Q_PROPERTY(Qt::AspectRatioMode aspectRatioMode READ aspectRatioMode) + Q_PROPERTY(Qt::TransformationMode transformationMode READ transformationMode) + Q_PROPERTY(QPen pen READ pen WRITE setPen) + Q_PROPERTY(QPen selectedPen READ selectedPen WRITE setSelectedPen) + /// \endcond +public: + QCPItemPixmap(QCustomPlot *parentPlot); + virtual ~QCPItemPixmap(); + + // getters: + QPixmap pixmap() const { return mPixmap; } + bool scaled() const { return mScaled; } + Qt::AspectRatioMode aspectRatioMode() const { return mAspectRatioMode; } + Qt::TransformationMode transformationMode() const { return mTransformationMode; } + QPen pen() const { return mPen; } + QPen selectedPen() const { return mSelectedPen; } + + // setters; + void setPixmap(const QPixmap &pixmap); + void setScaled(bool scaled, Qt::AspectRatioMode aspectRatioMode=Qt::KeepAspectRatio, Qt::TransformationMode transformationMode=Qt::SmoothTransformation); + void setPen(const QPen &pen); + void setSelectedPen(const QPen &pen); + + // reimplemented virtual methods: + virtual double selectTest(const QPointF &pos, bool onlySelectable, QVariant *details=0) const; + + QCPItemPosition * const topLeft; + QCPItemPosition * const bottomRight; + QCPItemAnchor * const top; + QCPItemAnchor * const topRight; + QCPItemAnchor * const right; + QCPItemAnchor * const bottom; + QCPItemAnchor * const bottomLeft; + QCPItemAnchor * const left; + +protected: + enum AnchorIndex {aiTop, aiTopRight, aiRight, aiBottom, aiBottomLeft, aiLeft}; + + // property members: + QPixmap mPixmap; + QPixmap mScaledPixmap; + bool mScaled; + bool mScaledPixmapInvalidated; + Qt::AspectRatioMode mAspectRatioMode; + Qt::TransformationMode mTransformationMode; + QPen mPen, mSelectedPen; + + // reimplemented virtual methods: + virtual void draw(QCPPainter *painter); + virtual QPointF anchorPixelPoint(int anchorId) const; + + // non-virtual methods: + void updateScaledPixmap(QRect finalRect=QRect(), bool flipHorz=false, bool flipVert=false); + QRect getFinalRect(bool *flippedHorz=0, bool *flippedVert=0) const; + QPen mainPen() const; +}; + + +class QCP_LIB_DECL QCPItemTracer : public QCPAbstractItem +{ + Q_OBJECT + /// \cond INCLUDE_QPROPERTIES + Q_PROPERTY(QPen pen READ pen WRITE setPen) + Q_PROPERTY(QPen selectedPen READ selectedPen WRITE setSelectedPen) + Q_PROPERTY(QBrush brush READ brush WRITE setBrush) + Q_PROPERTY(QBrush selectedBrush READ selectedBrush WRITE setSelectedBrush) + Q_PROPERTY(double size READ size WRITE setSize) + Q_PROPERTY(TracerStyle style READ style WRITE setStyle) + Q_PROPERTY(QCPGraph* graph READ graph WRITE setGraph) + Q_PROPERTY(double graphKey READ graphKey WRITE setGraphKey) + Q_PROPERTY(bool interpolating READ interpolating WRITE setInterpolating) + /// \endcond +public: + /*! + The different visual appearances a tracer item can have. Some styles size may be controlled with \ref setSize. + + \see setStyle + */ + enum TracerStyle { tsNone ///< The tracer is not visible + ,tsPlus ///< A plus shaped crosshair with limited size + ,tsCrosshair ///< A plus shaped crosshair which spans the complete axis rect + ,tsCircle ///< A circle + ,tsSquare ///< A square + }; + Q_ENUMS(TracerStyle) + + QCPItemTracer(QCustomPlot *parentPlot); + virtual ~QCPItemTracer(); + + // getters: + QPen pen() const { return mPen; } + QPen selectedPen() const { return mSelectedPen; } + QBrush brush() const { return mBrush; } + QBrush selectedBrush() const { return mSelectedBrush; } + double size() const { return mSize; } + TracerStyle style() const { return mStyle; } + QCPGraph *graph() const { return mGraph; } + double graphKey() const { return mGraphKey; } + bool interpolating() const { return mInterpolating; } + + // setters; + void setPen(const QPen &pen); + void setSelectedPen(const QPen &pen); + void setBrush(const QBrush &brush); + void setSelectedBrush(const QBrush &brush); + void setSize(double size); + void setStyle(TracerStyle style); + void setGraph(QCPGraph *graph); + void setGraphKey(double key); + void setInterpolating(bool enabled); + + // reimplemented virtual methods: + virtual double selectTest(const QPointF &pos, bool onlySelectable, QVariant *details=0) const; + + // non-virtual methods: + void updatePosition(); + + QCPItemPosition * const position; + +protected: + // property members: + QPen mPen, mSelectedPen; + QBrush mBrush, mSelectedBrush; + double mSize; + TracerStyle mStyle; + QCPGraph *mGraph; + double mGraphKey; + bool mInterpolating; + + // reimplemented virtual methods: + virtual void draw(QCPPainter *painter); + + // non-virtual methods: + QPen mainPen() const; + QBrush mainBrush() const; +}; + + +class QCP_LIB_DECL QCPItemBracket : public QCPAbstractItem +{ + Q_OBJECT + /// \cond INCLUDE_QPROPERTIES + Q_PROPERTY(QPen pen READ pen WRITE setPen) + Q_PROPERTY(QPen selectedPen READ selectedPen WRITE setSelectedPen) + Q_PROPERTY(double length READ length WRITE setLength) + Q_PROPERTY(BracketStyle style READ style WRITE setStyle) + /// \endcond +public: + enum BracketStyle { bsSquare ///< A brace with angled edges + ,bsRound ///< A brace with round edges + ,bsCurly ///< A curly brace + ,bsCalligraphic ///< A curly brace with varying stroke width giving a calligraphic impression + }; + + QCPItemBracket(QCustomPlot *parentPlot); + virtual ~QCPItemBracket(); + + // getters: + QPen pen() const { return mPen; } + QPen selectedPen() const { return mSelectedPen; } + double length() const { return mLength; } + BracketStyle style() const { return mStyle; } + + // setters; + void setPen(const QPen &pen); + void setSelectedPen(const QPen &pen); + void setLength(double length); + void setStyle(BracketStyle style); + + // reimplemented virtual methods: + virtual double selectTest(const QPointF &pos, bool onlySelectable, QVariant *details=0) const; + + QCPItemPosition * const left; + QCPItemPosition * const right; + QCPItemAnchor * const center; + +protected: + // property members: + enum AnchorIndex {aiCenter}; + QPen mPen, mSelectedPen; + double mLength; + BracketStyle mStyle; + + // reimplemented virtual methods: + virtual void draw(QCPPainter *painter); + virtual QPointF anchorPixelPoint(int anchorId) const; + + // non-virtual methods: + QPen mainPen() const; +}; + +#endif // QCUSTOMPLOT_H + diff --git a/Desktop Interface/resources.qrc b/Desktop Interface/resources.qrc new file mode 100644 index 00000000..67eec860 --- /dev/null +++ b/Desktop Interface/resources.qrc @@ -0,0 +1,7 @@ + + + buffer_0.bmp + buffer_1.bmp + buffer_2.bmp + + diff --git a/Desktop Interface/siPrint.cpp b/Desktop Interface/siPrint.cpp new file mode 100644 index 00000000..287ef3c9 --- /dev/null +++ b/Desktop Interface/siPrint.cpp @@ -0,0 +1,65 @@ +#include "siprint.h" + +siprint::siprint(char *unitsInit, double valInit) +{ + strncpy(units, unitsInit, 6); + value = valInit; +} + +char* siprint::printVal(){ + double tempValue = value; + bool negative = false; + + if (tempValue == 0){ + sprintf(printString, "0%s", units); + return printString; + } + if (value < 0){ + negative = true; + tempValue *= -1; + } + if (tempValue >= 1000000000000000000){ + sprintf(printString, "Inf %s", units); + return printString; + } + + + if (tempValue >= 1000000){ + sprintf(printString, "%c%.2fM%s", (negative ? '-':' '), tempValue/1000000, units); + return printString; + } + + if (tempValue >= 1000){ + sprintf(printString, "%c%.2fk%s", (negative ? '-':' '), tempValue/1000, units); + return printString; + } + + if (tempValue >= 1){ + sprintf(printString, "%c%.2f%s", (negative ? '-':' '), tempValue, units); + return printString; + } + + if (tempValue >= 0.001){ + sprintf(printString, "%c%.2fm%s", (negative ? '-' : ' '), tempValue*1000, units); + return printString; + } + + if (tempValue >= 0.000001){ + sprintf(printString, "%c%.2fu%s", (negative ? '-':' '), tempValue*1000000, units); + return printString; + } + + if (tempValue >= 0.000000001){ + sprintf(printString, "%c%.2fn%s", (negative ? '-':' '), tempValue*1000000000, units); + return printString; + } + + if (tempValue >= 0.000000000001){ + sprintf(printString, "%c%.2fp%s", (negative ? '-':' '), tempValue*1000000000000, units); + return printString; + } + + + sprintf(printString, "0%s", units); + return printString; +} diff --git a/Desktop Interface/siprint.h b/Desktop Interface/siprint.h new file mode 100644 index 00000000..3f49b2fd --- /dev/null +++ b/Desktop Interface/siprint.h @@ -0,0 +1,19 @@ +#ifndef SIPRINT_H +#define SIPRINT_H + +#include +#include + +class siprint +{ +public: + siprint(char *unitsInit, double valInit); + char* printVal(); + char units[6]; + double value; +private: + char printString[160]; + +}; + +#endif // SIPRINT_H diff --git a/Desktop Interface/timedtickbox.cpp b/Desktop Interface/timedtickbox.cpp new file mode 100644 index 00000000..76ad242f --- /dev/null +++ b/Desktop Interface/timedtickbox.cpp @@ -0,0 +1,24 @@ +#include "timedtickbox.h" + +timedTickBox::timedTickBox(QWidget *parent) : QCheckBox(parent) +{ + timer = new QTimer(); + timer->setTimerType(Qt::PreciseTimer); + timer->start(timerLength); + connect(timer, SIGNAL(timeout()), this, SLOT(timerTick())); + +} + +void timedTickBox::resetTimer(){ + timer->stop(); + if(timerEnabled) timer->start(timerLength); +} + +void timedTickBox::timerTick(){ + this->setChecked(true); + timer->stop(); +} + +void timedTickBox::enableTimer(bool enabled){ + timerEnabled = enabled; +} diff --git a/Desktop Interface/timedtickbox.h b/Desktop Interface/timedtickbox.h new file mode 100644 index 00000000..7fa52df0 --- /dev/null +++ b/Desktop Interface/timedtickbox.h @@ -0,0 +1,25 @@ +#ifndef TIMEDTICKBOX_H +#define TIMEDTICKBOX_H + +#include +#include +#include + +class timedTickBox : public QCheckBox +{ + Q_OBJECT +public: + explicit timedTickBox(QWidget *parent = 0); + bool timerEnabled = true; + int timerLength = 7500; + QTimer *timer = NULL; + +signals: + +public slots: + void resetTimer(); + void timerTick(); + void enableTimer(bool enabled); +}; + +#endif // TIMEDTICKBOX_H diff --git a/Desktop Interface/usbdriver.h b/Desktop Interface/usbdriver.h new file mode 100644 index 00000000..b1c250ac --- /dev/null +++ b/Desktop Interface/usbdriver.h @@ -0,0 +1,18 @@ +#ifndef USBDRIVER_H +#define USBDRIVER_H + +#include +#include + +class usbDriver : public QLabel +{ + Q_OBJECT +public: + explicit usbDriver(QLabel *parent = 0); + +signals: + +public slots: +}; + +#endif // USBDRIVER_H diff --git a/Desktop Interface/waveforms/Sawtooth.tlw b/Desktop Interface/waveforms/Sawtooth.tlw new file mode 100644 index 00000000..e989a81b --- /dev/null +++ b/Desktop Interface/waveforms/Sawtooth.tlw @@ -0,0 +1,3 @@ +128 +3 +0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62 64 66 68 70 72 74 76 78 80 82 84 86 88 90 92 94 96 98 100 102 104 106 108 110 112 114 116 118 120 122 124 126 129 131 133 135 137 139 141 143 145 147 149 151 153 155 157 159 161 163 165 167 169 171 173 175 177 179 181 183 185 187 189 191 193 195 197 199 201 203 205 207 209 211 213 215 217 219 221 223 225 227 229 231 233 235 237 239 241 243 245 247 249 251 253 255 diff --git a/Desktop Interface/waveforms/Sin.tlw b/Desktop Interface/waveforms/Sin.tlw new file mode 100644 index 00000000..e376c353 --- /dev/null +++ b/Desktop Interface/waveforms/Sin.tlw @@ -0,0 +1,3 @@ +128 +4 +128 134 140 146 153 159 165 171 177 182 188 194 199 204 209 214 218 223 227 230 234 237 240 243 246 248 250 251 253 254 255 255 255 255 254 253 252 251 249 247 245 242 239 236 232 229 225 220 216 211 206 201 196 191 185 180 174 168 162 156 149 143 137 131 124 118 112 106 99 93 87 81 75 70 64 59 54 49 44 39 35 30 26 23 19 16 13 10 8 6 4 3 2 1 0 0 0 0 1 2 4 5 7 9 12 15 18 21 25 28 32 37 41 46 51 56 61 67 73 78 84 90 96 102 109 115 121 127 \ No newline at end of file diff --git a/Desktop Interface/waveforms/Square.tlw b/Desktop Interface/waveforms/Square.tlw new file mode 100644 index 00000000..7bdd30be --- /dev/null +++ b/Desktop Interface/waveforms/Square.tlw @@ -0,0 +1,3 @@ +128 +5 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 diff --git a/Desktop Interface/waveforms/Triangle.tlw b/Desktop Interface/waveforms/Triangle.tlw new file mode 100644 index 00000000..420ac92c --- /dev/null +++ b/Desktop Interface/waveforms/Triangle.tlw @@ -0,0 +1,3 @@ +128 +4 +0 4 8 12 16 20 24 28 32 36 40 45 49 53 57 61 65 69 73 77 81 85 89 93 97 101 105 109 113 117 121 125 130 134 138 142 146 150 154 158 162 166 170 174 178 182 186 190 194 198 202 206 210 215 219 223 227 231 235 239 243 247 251 255 255 251 247 243 239 235 231 227 223 219 215 210 206 202 198 194 190 186 182 178 174 170 166 162 158 154 150 146 142 138 134 130 125 121 117 113 109 105 101 97 93 89 85 81 77 73 69 65 61 57 53 49 45 40 36 32 28 24 20 16 12 8 4 0 diff --git a/Desktop Interface/waveforms/_list.wfl b/Desktop Interface/waveforms/_list.wfl new file mode 100644 index 00000000..488a0133 --- /dev/null +++ b/Desktop Interface/waveforms/_list.wfl @@ -0,0 +1,4 @@ +Sin +Square +Triangle +Sawtooth \ No newline at end of file diff --git a/Desktop Interface/waveforms_OLD/Sawtooth.tlw b/Desktop Interface/waveforms_OLD/Sawtooth.tlw new file mode 100644 index 00000000..e989a81b --- /dev/null +++ b/Desktop Interface/waveforms_OLD/Sawtooth.tlw @@ -0,0 +1,3 @@ +128 +3 +0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62 64 66 68 70 72 74 76 78 80 82 84 86 88 90 92 94 96 98 100 102 104 106 108 110 112 114 116 118 120 122 124 126 129 131 133 135 137 139 141 143 145 147 149 151 153 155 157 159 161 163 165 167 169 171 173 175 177 179 181 183 185 187 189 191 193 195 197 199 201 203 205 207 209 211 213 215 217 219 221 223 225 227 229 231 233 235 237 239 241 243 245 247 249 251 253 255 diff --git a/Desktop Interface/waveforms_OLD/Sin.tlw b/Desktop Interface/waveforms_OLD/Sin.tlw new file mode 100644 index 00000000..a971bdad --- /dev/null +++ b/Desktop Interface/waveforms_OLD/Sin.tlw @@ -0,0 +1,3 @@ +128 +4 +128 134 140 146 153 159 165 171 177 182 188 194 199 204 209 214 218 223 227 230 234 237 240 243 246 248 250 251 253 254 255 255 255 255 254 253 252 251 249 247 245 242 239 236 232 229 225 220 216 211 206 201 196 191 185 180 174 168 162 156 149 143 137 131 124 118 112 106 99 93 87 81 75 70 64 59 54 49 44 39 35 30 26 23 19 16 13 10 8 6 4 3 2 1 0 0 0 0 1 2 4 5 7 9 12 15 18 21 25 28 32 37 41 46 51 56 61 67 73 78 84 90 96 102 109 115 121 127 diff --git a/Desktop Interface/waveforms_OLD/Square.tlw b/Desktop Interface/waveforms_OLD/Square.tlw new file mode 100644 index 00000000..7bdd30be --- /dev/null +++ b/Desktop Interface/waveforms_OLD/Square.tlw @@ -0,0 +1,3 @@ +128 +5 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 diff --git a/Desktop Interface/waveforms_OLD/Triangle.tlw b/Desktop Interface/waveforms_OLD/Triangle.tlw new file mode 100644 index 00000000..420ac92c --- /dev/null +++ b/Desktop Interface/waveforms_OLD/Triangle.tlw @@ -0,0 +1,3 @@ +128 +4 +0 4 8 12 16 20 24 28 32 36 40 45 49 53 57 61 65 69 73 77 81 85 89 93 97 101 105 109 113 117 121 125 130 134 138 142 146 150 154 158 162 166 170 174 178 182 186 190 194 198 202 206 210 215 219 223 227 231 235 239 243 247 251 255 255 251 247 243 239 235 231 227 223 219 215 210 206 202 198 194 190 186 182 178 174 170 166 162 158 154 150 146 142 138 134 130 125 121 117 113 109 105 101 97 93 89 85 81 77 73 69 65 61 57 53 49 45 40 36 32 28 24 20 16 12 8 4 0 diff --git a/Desktop Interface/waveforms_OLD/_list.wfl b/Desktop Interface/waveforms_OLD/_list.wfl new file mode 100644 index 00000000..488a0133 --- /dev/null +++ b/Desktop Interface/waveforms_OLD/_list.wfl @@ -0,0 +1,4 @@ +Sin +Square +Triangle +Sawtooth \ No newline at end of file diff --git a/Desktop Interface/winusbdriver.cpp b/Desktop Interface/winusbdriver.cpp new file mode 100644 index 00000000..c6f81524 --- /dev/null +++ b/Desktop Interface/winusbdriver.cpp @@ -0,0 +1,512 @@ +#include "winusbdriver.h" + +winUsbDriver::winUsbDriver(QWidget *parent) : QLabel(parent) +{ + qDebug() << "Making USB Driver invisible!!"; + this->hide(); + //Load stack so that reset signal can be sent + firstConnect = usbInit(0x03eb, 0xa000); + if(firstConnect){ + setDeviceMode(deviceMode); + usbSendControl(0x40, 0xa7, 0, 0, 0, NULL); + //Stack will reinitialise TIMER_PERIOD seconds later, after first failed iso request + } + + psuTimer = new QTimer(); + psuTimer->setTimerType(Qt::PreciseTimer); + psuTimer->start(PSU_PERIOD); + connect(psuTimer, SIGNAL(timeout()), this, SLOT(psuTick())); +} + +unsigned char winUsbDriver::usbInit(ULONG VIDin, ULONG PIDin){ + unsigned char success; + + //qDebug() << "usbInit() entered"; + if (!LstK_Init(&deviceList, (KLST_FLAG) 0)) { + qDebug("Error initializing device list"); + return 0; + } //else qDebug() << "Device List initialised!"; + + LstK_Count(deviceList, &deviceCount); + if (!deviceCount) { + qDebug("Device list empty"); + LstK_Free(deviceList); // If LstK_Init returns TRUE, the list must be freed. + return 0; + } //else qDebug() << "Device Count initialised!"; + + //qDebug("Looking for device VID = %04X, PID = %04X\n", VIDin, PIDin); + + LstK_FindByVidPid(deviceList, VIDin, PIDin, &deviceInfo); + LstK_Free(deviceList); + if (deviceInfo){ + /*qDebug("Using %04X:%04X (%s): %s - %s\n", + deviceInfo->Common.Vid, + deviceInfo->Common.Pid, + deviceInfo->Common.InstanceID, + deviceInfo->DeviceDesc, + deviceInfo->Mfg); + Causes exceptions in debug mode!!!!*/ + } + else { + qDebug("Could not find device VID = %04X, PID = %04X", VIDin, PIDin); + return 0; + } + + success = UsbK_Init(&handle, deviceInfo); + if (!success){ + ec = GetLastError(); + qDebug("UsbK_Init failed. ErrorCode: %08Xh", ec); + } else qDebug("Device opened successfully!"); + + return success; +} + +void winUsbDriver::usbSendControl(int RequestType, int Request, int Value, int Index, int Length, unsigned char *LDATA){ + + ////////////////////////////////////////////////////////////////////////////////////////// + //IF YOU'RE SEEING AN ERROR, CHECK THAT REQUESTTYPE AND REQUEST ARE FORMATTED AS HEX + ////////////////////////////////////////////////////////////////////////////////////////// + + WINUSB_SETUP_PACKET setupPacket; + unsigned char controlSuccess; + UINT bytesTransferred = 0; + unsigned char *controlBuffer; + + if (handle==NULL){ + qDebug("Null handle error in usbSendControl"); + return; + } + setupPacket.RequestType = (UCHAR) RequestType; + setupPacket.Request = (UCHAR) Request; + setupPacket.Value = (USHORT) Value; + setupPacket.Index = (USHORT) Index; + setupPacket.Length = (USHORT) Length; + + //qDebug("RequestType = %x, Request = %x, Value = %u, Index = %u, Length = %u", setupPacket.RequestType, setupPacket.Request, setupPacket.Value, setupPacket.Index, setupPacket.Length); + + if (LDATA==NULL){ + controlBuffer = (unsigned char *) malloc(256); + } + else controlBuffer = LDATA; + + //qDebug() << controlBuffer; + //qDebug() << handle; + + //qDebug("SENDING CONTROL PACKET\n"); + controlSuccess = UsbK_ControlTransfer(handle, setupPacket, controlBuffer, setupPacket.Length, &bytesTransferred, NULL); + if (controlSuccess) { + qDebug("%d BYTES TRANSFERRED", bytesTransferred); + } + else qDebug("usbSendControl failed"); + + if(LDATA == NULL){ + free(controlBuffer); + } +} + +void winUsbDriver::setPsu(double voltage){ + + qDebug() << "New voltage =" << voltage; + currentPsuVoltage = voltage; + //if(deviceMode > 6) qFatal("setPsu is not configured for mode 7!!!"); + double vinp = voltage/11; + double vinn = 0; + //double vref = 1.65; + double gainPsu = 1; + + dutyPsu = (int) ((vinp - vinn)/vref * gainPsu * PSU_ADC_TOP); + + qDebug() << "Going to send value " << dutyPsu; +} + +void winUsbDriver::setFunctionGen(int channel, functionGenControl *fGenControl){ + //////////////////////////// + ////NO RESIZING (YET)!!!//// + //////////////////////////// + + ////////////////////////////////////// + //// CH1 is AUX!! CH2 is "MAIN"!!//// + ////////////////////////////////////// + + int length, maxLength, numDivides, maxDivides; + double freq, amplitude, offset; + unsigned char *samples; + + //For recalling on crash. + fGenChannel = channel; + if (channel == 0) fGenPtr_CH1 = fGenControl; + else fGenPtr_CH2 = fGenControl; + + //Reading in data + if (channel == 0){ + length = fGenControl->length_CH1; + freq = fGenControl->freq_CH1; + amplitude = fGenControl->amplitude_CH1; + offset = fGenControl->offset_CH1; + samples = (unsigned char *) malloc(length); + memcpy(samples, fGenControl->samples_CH1, (unsigned int) length); + numDivides = fGenControl->divisibility_CH1; + } + else if(channel == 1){ + length = fGenControl->length_CH2; + freq = fGenControl->freq_CH2; + amplitude = fGenControl->amplitude_CH2; + offset = fGenControl->offset_CH2; + samples = (unsigned char *) malloc(length); + memcpy(samples, fGenControl->samples_CH2, (unsigned int) length); + numDivides = fGenControl->divisibility_CH2; + } + + //Triple mode + if ((amplitude+offset) > FGEN_LIMIT){ + amplitude = amplitude / 3; + offset = offset / 3; + fGenTriple |= ((unsigned char) !channel + 1); + } + else fGenTriple &= ((unsigned char) (254 - !channel)); + + //qDebug() << "fGenTriple = " << fGenTriple << "fGenControl = " << fGenControl << "length = " << length << "freq = " << freq << "amplitude = " << amplitude << "offset = " << offset << "samples = " << samples; + + //Waveform scaling in V + double tempDouble; + amplitude = (amplitude * 255) / FGEN_LIMIT; + offset = (offset * 255) / FGEN_LIMIT; + if (offset5) + amplitude -= FGEN_OFFSET; + else + amplitude = 0; + offset = FGEN_OFFSET; + } + +#ifdef INVERT_TRIPLE + unsigned char fGenTemp = 0; + fGenTemp |= (fGenTriple & 0x01)<<1; + fGenTemp |= (fGenTriple & 0x02)>>1; + usbSendControl(0x40, 0xa4, fGenTemp, 0, 0, NULL); +#else + usbSendControl(0x40, 0xa4, fGenTriple, 0, 0, NULL); +#endif + + //Applying amplitude and offset to all samples. + for (int i=0;i DAC_SPS){ + loop_entered = true; + numDivides--; + if (numDivides==0){ + qDebug("numDivides = 0 - in T-stretching of winUsbDriver:: setFunctionGen"); + } + + int shiftTemp = (maxDivides - numDivides); + length = length >> 1; + + free(tempSamples); + tempSamples = (unsigned char *) malloc(length); + for (int i=0; i 2) sendClearBuffer(1,0,0); + setVisible_CH2(0); + checkXY(0); + break; + case 1: + if(oldMode > 2) sendClearBuffer(1,0,0); + sendClearBuffer(0,1,0); + setVisible_CH2(1); + checkXY(0); + break; + case 2: + if(oldMode > 2) sendClearBuffer(1,0,0); + sendClearBuffer(0,1,0); + setVisible_CH2(1); + break; + case 3: + if(oldMode != 4) sendClearBuffer(1,0,0); + sendClearBuffer(0,1,0); + setVisible_CH2(0); + checkXY(0); + break; + case 4: + if(oldMode != 3) sendClearBuffer(1,0,0); + sendClearBuffer(0,1,0); + setVisible_CH2(1); + checkXY(0); + break; + case 5: + setVisible_CH2(0); + checkXY(0); + break; + case 6: + sendClearBuffer(0,0,1); + setVisible_CH2(0); + checkXY(0); + break; + case 7: + sendClearBuffer(1,0,0); + enableMMTimer(); + checkXY(0); + break; + default: + qFatal("Error in winUsbDriver::setDeviceMode. Invalid device mode."); + } + +} + +void winUsbDriver::psuTick(){ + if(dutyTemp == dutyPsu) return; + + if (dutyTemp > dutyPsu){ + if((dutyTemp - dutyPsu)> PSU_STEP){ + dutyTemp -= PSU_STEP; + } else dutyTemp = dutyPsu; + } + + if (dutyTemp < dutyPsu){ + if((dutyPsu - dutyTemp)> PSU_STEP){ + dutyTemp += PSU_STEP; + } else dutyTemp = dutyPsu; + } + + if ((dutyTemp>113) || (dutyTemp<21)){ + qDebug("PSU DUTY CYCLE TOO LARGE (could underflow on SOF)!!! ABORTING!!!"); + } + usbSendControl(0x40, 0xa3, dutyTemp, 0, 0, NULL); +} + +void winUsbDriver::setGain(double newGain){ + if (newGain == scopeGain) return; //No update! + gainBuffers(scopeGain/newGain); + scopeGain = newGain; + if (newGain == 0.5){ + gainMask = 7<<2 | 7<<10; + } + else gainMask = (unsigned short)(log2(newGain))<<2 | (unsigned short)(log2(newGain))<<10; + qDebug("newGain = %f", newGain); + qDebug("gainMask = %d", gainMask); + usbSendControl(0x40, 0xa5, deviceMode, gainMask, 0, NULL); +} + +void winUsbDriver::reinitialise(bool forceAttempt){ + + /*if (!firstConnect){ + firstConnect = usbInit(0x03eb, 0xa000); + setDeviceMode(deviceMode); + usbIsoInit(); + //Reset!! + usbSendControl(0x40, 0xa7, 0, 0, 0, NULL); + //Stack will reinitialise TIMER_PERIOD seconds later, after first failed iso request + return; + }*/ + + if (!forceAttempt){ + if(recoveryInProcess == true) { + //qDebug() << "Cancelling reinitialise()"; + return; + } + } + + //qDebug() << "reinitialise() entered"; + + //if(forceAttempt) qFatal("Forcing attempt"); + + disableWindow(0); + + recoveryInProcess = true; + + unsigned char success; + DWORD errorCode = ERROR_SUCCESS; + + success = UsbK_Free(handle); + if (!success){ + errorCode = GetLastError(); + qDebug("UsbK_Free (reinit) failed. ErrorCode: %08Xh\n", errorCode); + } + //else qDebug() << "Handle freed successfully!"; + + if(forceAttempt){ + StmK_Free(stm_handle); + stm_handle = NULL; + } + UsbK_ResetDevice(handle); + unsigned char initSuccess = usbInit(0x03eb, 0xa000); + //qDebug() << "usbInit(0x03eb, 0xa000) returned" << initSuccess; + + if (!initSuccess){ + recoverySuccess = 0; + return; + } + + setDeviceMode(deviceMode); + //qDebug() << "setDeviceMode(deviceMode) returned" << deviceSuccess; + if (fGenPtr_CH1 != NULL) { + //qDebug() << "setFunctionGen(0, fGenPtr_CH1)"; + setFunctionGen(0, fGenPtr_CH1); + } + if (fGenPtr_CH2 != NULL){ + //qDebug() << "setFunctionGen(1, fGenPtr_CH2)"; + setFunctionGen(1, fGenPtr_CH2); + } + newDig(digitalPinState); + + + unsigned char isoInitSuccess = usbIsoInit(); + //qDebug() << "usbIsoInit() returned" << isoInitSuccess; + + recoverySuccess = initSuccess && isoInitSuccess; + + if(recoverySuccess){ + //qDebug() << "reinitialise() completed successfully"; + } + //else qDebug() << "reinitialise() completed with errors"; +} + +void winUsbDriver::avrDebug(void){ + usbSendControl(0x40, 0xa0, 0, 0, 0, NULL); +} diff --git a/Desktop Interface/winusbdriver.h b/Desktop Interface/winusbdriver.h new file mode 100644 index 00000000..86cdc0cb --- /dev/null +++ b/Desktop Interface/winusbdriver.h @@ -0,0 +1,78 @@ +#ifndef WINUSBDRIVER_H +#define WINUSBDRIVER_H + +#include +#include +#include +#include + +#include "functiongencontrol.h" +#include "xmega.h" +#include "desktop_settings.h" +#include "buffercontrol.h" + +//libusbK includes +#include +#include +#include +#include +#include "libusbk.h" + + + +class winUsbDriver : public QLabel +{ + Q_OBJECT +public: + explicit winUsbDriver(QWidget *parent = 0); + char *isoRead(int numSamples); + ~winUsbDriver(); + bool recoveryInProcess = false; + unsigned char recoverySuccess; + void reinitialise(bool secondStage); + int deviceMode = INIT_DEVICE_MODE; + void setBufferPtr(bufferControl *newPtr); + double scopeGain = 0.5; + int dutyTemp = 0; +private: + unsigned char fGenTriple=0; + KUSB_HANDLE handle = NULL; + unsigned short gainMask = 2056; + KSTM_HANDLE stm_handle = NULL; + unsigned char pipeID = 0x83; + unsigned char usbInit(ULONG VIDin, ULONG PIDin); + void usbSendControl(int RequestType, int Request, int Value, int Index, int Length, unsigned char *LDATA); + void xmegaBreak(void); + unsigned char usbIsoInit(void); + int fGenChannel; + functionGenControl *fGenPtr_CH1 = NULL, *fGenPtr_CH2 = NULL; + bufferControl *bufferPtr = NULL; + int dutyPsu = 0; + QTimer *psuTimer; + bool firstConnect = false; + double currentPsuVoltage; + KLST_DEVINFO_HANDLE deviceInfo = NULL; + WINUSB_PIPE_INFORMATION pipeInfo; + UINT deviceCount = 0; + UCHAR pipeIndex = 0; + DWORD ec = ERROR_SUCCESS; + KLST_HANDLE deviceList = NULL; + int digitalPinState = 0; +signals: + void sendClearBuffer(bool ch3751, bool ch3752, bool ch750); + void setVisible_CH2(bool visible); + void gainBuffers(double multiplier); + void disableWindow(bool enabled); + void enableMMTimer(); + void checkXY(bool); +public slots: + void setPsu(double voltage); + void setFunctionGen(int channel, functionGenControl *fGenControl); + void setDeviceMode(int mode); + void newDig(int digState); + void psuTick(void); + void setGain(double newGain); + void avrDebug(void); +}; + +#endif // WINUSBDRIVER_H diff --git a/Desktop Interface/xmega.h b/Desktop Interface/xmega.h new file mode 100644 index 00000000..256b1202 --- /dev/null +++ b/Desktop Interface/xmega.h @@ -0,0 +1,28 @@ +#ifndef XMEGA_H +#define XMEGA_H + + +#define FGEN_OFFSET 5 +#define FGEN_LIMIT (double) 3.2 +#define CLOCK_FREQ 24000000 +#define DAC_SPS 1000000 +#define ADC_SPS 750000 +#define ADC_SPF (ADC_SPS/1000) + +#define vcc (double)3.3 +#define vref ((double)(vcc/2)) +#define R4 (double)75000 +#define R3 (double)1000000 +#define R2 (double)1000 +#define R1 (double)1000 + +#define INIT_DEVICE_MODE 0 + +#define PSU_STEP 5 +#define PSU_PERIOD 100 +#define PSU_ADC_TOP 128 + +//#define INVERT_TRIPLE +//#define INVERT_MM + +#endif // XMEGA_H diff --git a/Old Matlab Interface/.svn/entries b/Old Matlab Interface/.svn/entries new file mode 100644 index 00000000..48082f72 --- /dev/null +++ b/Old Matlab Interface/.svn/entries @@ -0,0 +1 @@ +12 diff --git a/Old Matlab Interface/.svn/format b/Old Matlab Interface/.svn/format new file mode 100644 index 00000000..48082f72 --- /dev/null +++ b/Old Matlab Interface/.svn/format @@ -0,0 +1 @@ +12 diff --git a/Old Matlab Interface/.svn/pristine/00/000cd9de688114eca60ab3ed8f47af0cbec6bcbe.svn-base b/Old Matlab Interface/.svn/pristine/00/000cd9de688114eca60ab3ed8f47af0cbec6bcbe.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..9108f9cbc8ebae2ea71c264932c4745df9135df2 GIT binary patch literal 334 zcmV-U0kQseFfcAKFm^C7E-)|v08ktVf1kAg004Uc00Axl00F)ZgaUiGsBQPuQeO@F zeiv_J-aNv8^A`vwFijHA3K3)J=XzA7B5Pa(uwCn&Dmx=~8{yzSA7ilYaP%#0>S{Jk!1hV<=v{~Nv1D@x~W8M!yFYdI3=}Vzu0(2{oI4Ur*RnmO gdZfSHBI~A59d3o3{*<=^&mdu_4f>;lBIzWPKm9$9?*IS* literal 0 HcmV?d00001 diff --git a/Old Matlab Interface/.svn/pristine/01/018e814e444b6e657ced7f4e357f4b61e626deb6.svn-base b/Old Matlab Interface/.svn/pristine/01/018e814e444b6e657ced7f4e357f4b61e626deb6.svn-base new file mode 100644 index 00000000..1be234ab --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/01/018e814e444b6e657ced7f4e357f4b61e626deb6.svn-base @@ -0,0 +1,69 @@ +#region Copyright(c) Travis Robinson +// Copyright (c) 2012 Travis Robinson +// All rights reserved. +// +// AssemblyInfo.cs +// +// Created: 03.05.2012 +// Last Updated: 03.05.2012 +// +// 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. +// +// 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 TRAVIS LEE ROBINSON +// 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. +#endregion + + +using System.Reflection; +using System.Runtime.InteropServices; + + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. + +[assembly: AssemblyTitle("Xfer.Sync")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("Xfer.Sync")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2012")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. + +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM + +[assembly: Guid("bd85bac8-7975-4bcd-8e0b-b0e84e558546")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] + +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/02/02959e28e6695fe91c27b1bdd0ca6444d7e30afa.svn-base b/Old Matlab Interface/.svn/pristine/02/02959e28e6695fe91c27b1bdd0ca6444d7e30afa.svn-base new file mode 100644 index 00000000..8b4645c7 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/02/02959e28e6695fe91c27b1bdd0ca6444d7e30afa.svn-base @@ -0,0 +1,12 @@ +%FIGSTATE State of the figure +% FIGSTATE(F) returns the state of the figure with handle F as +% {Maximized | Minimized | Normal} +% +% Example: +% If +% f = figure; +% surf(peaks); +% then +% state = figstate(f) returns the state = 'Normal' +% +% See also MAXFIG, MINFIG \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/03/034b6e7436daea3b23ae2bc025a1fc7e30abbde2.svn-base b/Old Matlab Interface/.svn/pristine/03/034b6e7436daea3b23ae2bc025a1fc7e30abbde2.svn-base new file mode 100644 index 00000000..1479c989 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/03/034b6e7436daea3b23ae2bc025a1fc7e30abbde2.svn-base @@ -0,0 +1,62 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {68CE8DCE-504B-4C73-B788-F6BB7911EDAA} + Exe + Properties + Xfer.Sync + Xfer.Sync + v2.0 + 512 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + libusbK.cs + + + Common\BenchmarkTestDevice.cs + + + Common\HiPerfTimer.cs + + + Common\TestParameters.cs + + + + + + + \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/04/0450c9a25a7b428bd340570efb1a7ffc4095bb68.svn-base b/Old Matlab Interface/.svn/pristine/04/0450c9a25a7b428bd340570efb1a7ffc4095bb68.svn-base new file mode 100644 index 00000000..69d31ae5 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/04/0450c9a25a7b428bd340570efb1a7ffc4095bb68.svn-base @@ -0,0 +1,12 @@ +%MAXFIG Maximize a figure +% MAXFIG(F,1) maximizes the figure window for the figure with handle F +% MAXFIG(F,0) restores figure F if F is maximized +% +% Example: +% If +% f = figure; +% surf(peaks) +% then +% maxfig(f,1) maximizes the figure +% +% See also MINFIG, FIGSTATE \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/04/04e63fc7fbe69172abc51b394d95cb2a5d9db039.svn-base b/Old Matlab Interface/.svn/pristine/04/04e63fc7fbe69172abc51b394d95cb2a5d9db039.svn-base new file mode 100644 index 00000000..b5a2f51b --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/04/04e63fc7fbe69172abc51b394d95cb2a5d9db039.svn-base @@ -0,0 +1,68 @@ +//MATLAB INCLUDES +#include +#include + +//LIBUSBK INCLUDES +#include +#include +#include +#include +#include "libusbk.h" + +#define DEBUG_SHOWCTRL 1 +#define MAX_TRANSFER_SIZE 1023 +#define MAX_PENDING_TRANSFERS 16384 +#define MAX_PENDING_IO 512 + +void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) +{ + //Vars: + //Imports + char* HANDLE_CHAR; + KUSB_HANDLE handle = NULL; + unsigned char pipeID = 0x83; + //Internals + unsigned char success; + unsigned int transferred; + DWORD errorCode = ERROR_SUCCESS; + KSTM_HANDLE stm_handle = NULL; + //Exports + char stm_handle_string[17]; + + + //Initialise Data + HANDLE_CHAR = mxArrayToString(prhs[0]); + sscanf(HANDLE_CHAR, "%16x", &handle); + + //Actual Function + success = StmK_Init( + &stm_handle, + handle, + pipeID, + MAX_TRANSFER_SIZE, + MAX_PENDING_TRANSFERS, + MAX_PENDING_IO, + NULL, + KSTM_FLAG_NONE); + if (!success){ + errorCode = GetLastError(); + printf("StmK_Init failed. ErrorCode: %08Xh\n", errorCode); + } + + success = StmK_Start(stm_handle); + if (!success){ + errorCode = GetLastError(); + printf("StmK_Start failed. ErrorCode: %08Xh\n", errorCode); + } + else printf("[Start Stream] successful!\n"); + printf("stm_handle is %d bytes long\n", sizeof(stm_handle)); + printf("Value of stm_handle is 0x%16x\n\n\n\n\n\n", stm_handle); + + + //Export Data + + sprintf(stm_handle_string, "%016x", stm_handle); + plhs[0] = mxCreateString(stm_handle_string); + + return; +} \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/05/05787edbc2f1e75f2606006c2c2263929603df87.svn-base b/Old Matlab Interface/.svn/pristine/05/05787edbc2f1e75f2606006c2c2263929603df87.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..7759e7333ec615288acf5a75e0e3d74b00ed1f9e GIT binary patch literal 7680 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 literal 0 HcmV?d00001 diff --git a/Old Matlab Interface/.svn/pristine/08/08980606867d71236732281e564c26aa234d0492.svn-base b/Old Matlab Interface/.svn/pristine/08/08980606867d71236732281e564c26aa234d0492.svn-base new file mode 100644 index 00000000..2a9d895a --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/08/08980606867d71236732281e564c26aa234d0492.svn-base @@ -0,0 +1,3 @@ +function [offset] = hexoffset(hexin) + decin = hex2dec(hexin); + offset = dec2hex(decin+750); \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/08/08d40aedf477a62efb9c0ab6835396973e703d44.svn-base b/Old Matlab Interface/.svn/pristine/08/08d40aedf477a62efb9c0ab6835396973e703d44.svn-base new file mode 100644 index 00000000..7eeeaa55 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/08/08d40aedf477a62efb9c0ab6835396973e703d44.svn-base @@ -0,0 +1,87 @@ +#region Copyright(c) Travis Robinson +// Copyright (c) 2012 Travis Robinson +// All rights reserved. +// +// BenchmarkTestDevice.cs +// +// Created: 03.05.2012 +// Last Updated: 03.05.2012 +// +// 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. +// +// 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 TRAVIS LEE ROBINSON +// 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. +#endregion + + +using System; +using System.Runtime.InteropServices; +using libusbK; + + +// ReSharper disable CheckNamespace + +namespace Test.Devices +// ReSharper restore CheckNamespace +{ + public enum BM_COMMAND + { + SET_TEST = 0x0E, + GET_TEST = 0x0F, + }; + + public enum BM_TEST_TYPE + { + NONE = 0x00, + READ = 0x01, + WRITE = 0x02, + LOOP = READ | WRITE, + }; + + public static class Benchmark + { + //! Custom vendor requests that must be implemented in the benchmark firmware. + + + #region Public Members + public static bool Configure(UsbK usb, + BM_COMMAND command, + byte interfaceNumber, + ref BM_TEST_TYPE testType) + { + int transferred; + WINUSB_SETUP_PACKET pkt; + byte[] data = new byte[1]; + + pkt.RequestType = (1 << 7) | (2 << 5); + pkt.Request = (byte) command; + + pkt.Value = (ushort) testType; + pkt.Index = interfaceNumber; + pkt.Length = 1; + + bool success = usb.ControlTransfer(pkt, + Marshal.UnsafeAddrOfPinnedArrayElement(data, + 0), + 1, + out transferred, + IntPtr.Zero); + testType = (BM_TEST_TYPE) data[0]; + return success; + } + #endregion + } +} \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/09/09558fa38390ff5b9e448f4e133ecec897d3a6ed.svn-base b/Old Matlab Interface/.svn/pristine/09/09558fa38390ff5b9e448f4e133ecec897d3a6ed.svn-base new file mode 100644 index 00000000..d2faa355 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/09/09558fa38390ff5b9e448f4e133ecec897d3a6ed.svn-base @@ -0,0 +1,17 @@ +clear +clear global +clear functions +global num_lc +num_lc = 0 +set(0,'RecursionLimit',100000) +setscopewindowsize(1, 0, 5) +first_gui_test +pause(0.01) +max_n = 100000000; +setscopemode(0,0.5,0.5) +%setpsu(0,1000) +tiny_send_waveform(sin(linspace(0,2*pi, 128)),255,432) +%tiny_send_waveform(1:100, 255, 100)] +signal_trip(3); +mex_usb_iso_loop +%%plot(saved_waveform) \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/0a/0abcb49af2b00438c78205c594f66918aaed46be.svn-base b/Old Matlab Interface/.svn/pristine/0a/0abcb49af2b00438c78205c594f66918aaed46be.svn-base new file mode 100644 index 00000000..ddc00a05 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/0a/0abcb49af2b00438c78205c594f66918aaed46be.svn-base @@ -0,0 +1,69 @@ +#region Copyright(c) Travis Robinson +// Copyright (c) 2012 Travis Robinson +// All rights reserved. +// +// AssemblyInfo.cs +// +// Created: 03.05.2012 +// Last Updated: 03.05.2012 +// +// 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. +// +// 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 TRAVIS LEE ROBINSON +// 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. +#endregion + + +using System.Reflection; +using System.Runtime.InteropServices; + + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. + +[assembly: AssemblyTitle("Xfer.Threaded.Stream")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("Xfer.Threaded.Stream")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2012")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. + +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM + +[assembly: Guid("e66b3bbf-a288-4a3e-9468-2f3bfd7303f6")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] + +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/0b/0bbebb77dacc40a9055f623a3fc40734d684599c.svn-base b/Old Matlab Interface/.svn/pristine/0b/0bbebb77dacc40a9055f623a3fc40734d684599c.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..c9287752b8f1b2faa95f2b0fca2a1fb9ba5548f1 GIT binary patch literal 9653 zcma)iXE+={_pdGy-6BDBQKLrhM2KLC9%YpvdM~Ri38Ht=dl$WTB6?lDvsiugUUzTa z|9kI;``j=0e3>~j&y;88obx+p=BUbQsmRLF3v%<)tIBGts zSC`lQs3!D|i(cNv!qm;;E4`zG7`^VlQr6vyo>!2bPe|;YsF;8dJwGp>ApQR*Z7`wz zm(V||68)>`|Kq(f4)uYKWQqVf@$OhGM&c*3D|H5MnO}GWKZNXOIS{?ygWj<8yPhz642ZmUt{R7?B=r zaN10~ATO?tlKLSC;Mk%0$@Si{=l!@SLL#azHc@rn)~OG}x$X$VcI%|l7jkCnerk3+bV%Dzov2N9!E?6C`0saiu1Z#n{!8%|VyCl^APqq#+ zn>NffAFojwx`uIfp)xpqLf)sL5+N|-TB`qchuFxxQrFNpMKtqmWhM957Z;1AX4quI zIu&A4{UpCK9NT+*F>CH{0t`ysERv%a3%{dLtS%7rAL4w6ii-ak>e(qV+pKwiJYfGC~w$;XtfHcv_r4lV2u`absWz!Ul-njk)_ooCwD5hkV;1|N;1SQU7z*9C9QVe!{%j&YoRkwaqI$^L-<7g&|ER(4KSn*!?)ADt zClK_izFO1S0+dYo0xOwCjdk!tEXRbJ*)!U-H+c*mRod07ST`Jj=(I%(HFmvU-^x(W z0JK$3$JrJuTl)Qp4&PUUo1=&G%FkHN)(7tkroGv0nrI{T*Uk%_ko@1~A{h4w3Ty;^ z3Z?kIwD~^dS0|^hA&z*3!_h^gI|fgalF%Ij$^U}Xuxnd|iAiE-?kIhw z6=#D|;Tev$aVxkI5*V#3x*<$B?X@Z(74`R5AInVB#Rrmnh63)vM5!+ov%SV{kxN%T z^ObZ0oo#*AC*fx;#L0DGP94AN;#aJ2+@#BUgkc%YbvG-fO#2;v1Y+)IJWD+OfRhmE z%<-6S#?x}jEGWq2Nc*HjfggLS5y$MR58pjx37Q@KW9#8=GjKV?-^+7KkNUxUvs;*l z8nn`@ zz3$0QKXE*YS(1lh&=SvXM4$edMI$nNee@Q^qtqfYK|vItS=rYXA-fuW24+wwK9cjEmzW$Vt&ho*j252FFX

    #YaSKiiK&9qP&g$z%apZ{_}A%9_vYjkSdd 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

    yCIj&?d-2LI- z6NjY@=eBNMz(B8&Mjv_5gL}(F6)k{w%I-Hxg54S@mgi)F>^}#opfetJe)% z-)YY;UC-4cwNzJOlPW!6;N4f~23#m9=F?4dF7?)q!n5M-73J@n23o~M947jjp9BkZ z05vl+b_p=j9>;(Lru|coJ532YX-E`53@0-VR`u=0Q}rY1`!#gjX$@JNHJNZjeffA! zSV2f9Sw7g`OedhZ zlU>O(I->rOwX+`}-EawVSu3}RT=ERp&|uk^~MJaAhmfG?I%9tCk8ogs?&cP$1;(dm!IBWqAg z@!b5MB>lg5E8U#4Mab7!amaKXepnjr2j9;ut^8+mHTU%tSuo%2Qg)IrJVX>5z4A-P z-8}E?U!%_5AqY&X?R+nJP2Tw4{ShaK4-K&-n&b|h`?B=49P0EkrfKH2+AcNH6b|b= z5V_7sX8fj|-U+y&T74wyo5GwhhtyE6*#`aNGo_LL8)5$&N58Sp3C_zopXASB{1-SA zI-oz-2s5N+!@ra-kl|EN=7~;dc0U^I1du0jE4d*S7{A}XAXdP4GY=rR=Ek?fUnMcy z;I^8l9Edj;9#i+7+JB5Vk?d;sIl0M-N_t@Zs=&{mVE#{z`UQv-gEr!5(2CK}FjD#W zV-gk#7xs9asfG7L6Uy+Py}?y&@#;;A@EUX{9y5AFOJAq1p}=L!f#%h~RU?UgKCm#W zsS4sBR!aO01@D`}5~vRlKzg1?Wjn`o&-zE7Fh^;T|)TkGSOZwTkzei3e z7{C(JTiC0vNF8~`$yRJjWqCtT8tE1!_*ze|ua<-Tja!y&CTtbCtDsH|1Qa`1Sh`h| z^qK9aih?0?#2iA1B! z4wH7j4%d{aw(bk)x1Xcu2~qFnEE>L@&~YY{>%Vs!c^yyxN22m+GBle@s`~MLjUJ;L zhuKGAJ4tG(J3of4o1#-6$B0|Mo}SLg9uPqI&&hVU#;`W;+zho;x+1XzG)4@XjjOsx zhvNDx+=i&~oM&CXaddm8t}=ncj}dtJ-TLF0IK1SQJFfSFGsa97b)VtHcT0qGrLi|r z2cdnf*kvi_OIRoNmHW30W^0Xk4jZXL_8|ACxx#nG4N5;vT?*o}`ah>`JUKwyVZ&nm zyV>d4`GnHbkLGtZ$!?V!KET^GveS-%lA>OBe?h+TkmIXrN}6)ozqW3MKk2+bH2Hks zsqyx5pV)wB%uP{>F(abv18(5;dY(& zMJ^I7_9ecfsKc3iE`uSfp~Rt3zaLN36uSJxlminUhZ?X~t$5I`%jBYSrLLH8*!CZ> zD88d#!`jhR0i{xQ_jnJ!ZFn#jdO~m#i}V0u4PKRUe)Ky<6z0PV^5=RnYW1SEo=`v7 zrkWET(dsyk>$a%}xKnwwpm7mmy#0G1-CJa?xv7U2L#4YQS#pqw#p-t^d3}}1Cq;L5 z=VnZHi%AW%Q?cMtUUq-BW~Cul_HCnb_1_PQ77eA(?rakW%fhkRz0ST8?Isx~Ar6HQ zgD1?=%KA|)(S6u*QhSYQ#q=sFrQUc5O%CnC`J^u$gkG4HDjt5ZHO`k=40Q@JxW)%HD2{uQms%nAifMB{R8UI`qD$03}lqM}DMeG}mNVR|*M^O}k z{qO$fK<>g%PJ0t9BF;Q=-~~8Ag*BDpTKWo2XOEu~9sz!JFmX>7v1LwbP8}nMd=16r zN1mzb0<&BrLb=93V-I13#ozm8CJ^XkdS-O}@jy&!{1r`c`A&o5?0g-Afh#2NB;=g$L|C*z&MtJN0h?MT(gif#lxi71Kyn`IUl?Z~)E zxkCPp2%6TmKU7!9J017_c literal 0 HcmV?d00001 diff --git a/Old Matlab Interface/.svn/pristine/0b/0bea3176a50a8b215a4230940af3da4df02e76e5.svn-base b/Old Matlab Interface/.svn/pristine/0b/0bea3176a50a8b215a4230940af3da4df02e76e5.svn-base new file mode 100644 index 00000000..b2be8047 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/0b/0bea3176a50a8b215a4230940af3da4df02e76e5.svn-base @@ -0,0 +1,198 @@ +namespace Handle.Test +{ + partial class fHandleTest + { + ///

    + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.menuStrip1 = new System.Windows.Forms.MenuStrip(); + this.disposingToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.createAndExplictlyDestroyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.createWithoutExplictDestroyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); + this.runGarbageCollectorToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.createToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.referenceToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.derefrenceToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator(); + this.exhaustAllHandlesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.txtOutput = new System.Windows.Forms.TextBox(); + this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator(); + this.testListenerToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.menuStrip1.SuspendLayout(); + this.SuspendLayout(); + // + // menuStrip1 + // + this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.disposingToolStripMenuItem}); + this.menuStrip1.Location = new System.Drawing.Point(0, 0); + this.menuStrip1.Name = "menuStrip1"; + this.menuStrip1.Size = new System.Drawing.Size(674, 24); + this.menuStrip1.TabIndex = 1; + this.menuStrip1.Text = "menuStrip1"; + // + // disposingToolStripMenuItem + // + this.disposingToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.createAndExplictlyDestroyToolStripMenuItem, + this.createWithoutExplictDestroyToolStripMenuItem, + this.toolStripSeparator1, + this.runGarbageCollectorToolStripMenuItem, + this.createToolStripMenuItem, + this.toolStripSeparator2, + this.exhaustAllHandlesToolStripMenuItem, + this.toolStripSeparator3, + this.testListenerToolStripMenuItem}); + this.disposingToolStripMenuItem.Name = "disposingToolStripMenuItem"; + this.disposingToolStripMenuItem.Size = new System.Drawing.Size(71, 20); + this.disposingToolStripMenuItem.Text = "Disposing"; + // + // createAndExplictlyDestroyToolStripMenuItem + // + this.createAndExplictlyDestroyToolStripMenuItem.Name = "createAndExplictlyDestroyToolStripMenuItem"; + this.createAndExplictlyDestroyToolStripMenuItem.Size = new System.Drawing.Size(234, 22); + this.createAndExplictlyDestroyToolStripMenuItem.Text = "Create and Explictly Destroy"; + this.createAndExplictlyDestroyToolStripMenuItem.Click += new System.EventHandler(this.createAndExplictlyDestroyToolStripMenuItem_Click); + // + // createWithoutExplictDestroyToolStripMenuItem + // + this.createWithoutExplictDestroyToolStripMenuItem.Name = "createWithoutExplictDestroyToolStripMenuItem"; + this.createWithoutExplictDestroyToolStripMenuItem.Size = new System.Drawing.Size(234, 22); + this.createWithoutExplictDestroyToolStripMenuItem.Text = "Create Without Explict Destroy"; + this.createWithoutExplictDestroyToolStripMenuItem.Click += new System.EventHandler(this.createWithoutExplictDestroyToolStripMenuItem_Click); + // + // toolStripSeparator1 + // + this.toolStripSeparator1.Name = "toolStripSeparator1"; + this.toolStripSeparator1.Size = new System.Drawing.Size(231, 6); + // + // runGarbageCollectorToolStripMenuItem + // + this.runGarbageCollectorToolStripMenuItem.Name = "runGarbageCollectorToolStripMenuItem"; + this.runGarbageCollectorToolStripMenuItem.Size = new System.Drawing.Size(234, 22); + this.runGarbageCollectorToolStripMenuItem.Text = "Run Garbage Collector"; + this.runGarbageCollectorToolStripMenuItem.Click += new System.EventHandler(this.runGarbageCollectorToolStripMenuItem_Click); + // + // createToolStripMenuItem + // + this.createToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.referenceToolStripMenuItem, + this.derefrenceToolStripMenuItem}); + this.createToolStripMenuItem.Name = "createToolStripMenuItem"; + this.createToolStripMenuItem.Size = new System.Drawing.Size(234, 22); + this.createToolStripMenuItem.Text = "Create"; + // + // referenceToolStripMenuItem + // + this.referenceToolStripMenuItem.Name = "referenceToolStripMenuItem"; + this.referenceToolStripMenuItem.Size = new System.Drawing.Size(131, 22); + this.referenceToolStripMenuItem.Text = "Reference"; + this.referenceToolStripMenuItem.Click += new System.EventHandler(this.referenceToolStripMenuItem_Click); + // + // derefrenceToolStripMenuItem + // + this.derefrenceToolStripMenuItem.Name = "derefrenceToolStripMenuItem"; + this.derefrenceToolStripMenuItem.Size = new System.Drawing.Size(131, 22); + this.derefrenceToolStripMenuItem.Text = "Derefrence"; + this.derefrenceToolStripMenuItem.Click += new System.EventHandler(this.derefrenceToolStripMenuItem_Click); + // + // toolStripSeparator2 + // + this.toolStripSeparator2.Name = "toolStripSeparator2"; + this.toolStripSeparator2.Size = new System.Drawing.Size(231, 6); + // + // exhaustAllHandlesToolStripMenuItem + // + this.exhaustAllHandlesToolStripMenuItem.Name = "exhaustAllHandlesToolStripMenuItem"; + this.exhaustAllHandlesToolStripMenuItem.Size = new System.Drawing.Size(234, 22); + this.exhaustAllHandlesToolStripMenuItem.Text = "Exhaust All Handles"; + this.exhaustAllHandlesToolStripMenuItem.Click += new System.EventHandler(this.exhaustAllHandlesToolStripMenuItem_Click); + // + // txtOutput + // + this.txtOutput.Dock = System.Windows.Forms.DockStyle.Fill; + this.txtOutput.Font = new System.Drawing.Font("Courier New", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.txtOutput.Location = new System.Drawing.Point(0, 24); + this.txtOutput.MaxLength = 0; + this.txtOutput.Multiline = true; + this.txtOutput.Name = "txtOutput"; + this.txtOutput.ReadOnly = true; + this.txtOutput.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.txtOutput.Size = new System.Drawing.Size(674, 272); + this.txtOutput.TabIndex = 2; + this.txtOutput.WordWrap = false; + // + // toolStripSeparator3 + // + this.toolStripSeparator3.Name = "toolStripSeparator3"; + this.toolStripSeparator3.Size = new System.Drawing.Size(231, 6); + // + // testListenerToolStripMenuItem + // + this.testListenerToolStripMenuItem.Name = "testListenerToolStripMenuItem"; + this.testListenerToolStripMenuItem.Size = new System.Drawing.Size(234, 22); + this.testListenerToolStripMenuItem.Text = "Test Listener"; + this.testListenerToolStripMenuItem.Click += new System.EventHandler(this.testListenerToolStripMenuItem_Click); + // + // fHandleTest + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(674, 296); + this.Controls.Add(this.txtOutput); + this.Controls.Add(this.menuStrip1); + this.MainMenuStrip = this.menuStrip1; + this.Name = "fHandleTest"; + this.Text = "libusbK Handles Example"; + this.Load += new System.EventHandler(this.fHandleTest_Load); + this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.fHandleTest_FormClosed); + this.menuStrip1.ResumeLayout(false); + this.menuStrip1.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.MenuStrip menuStrip1; + private System.Windows.Forms.ToolStripMenuItem disposingToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem createAndExplictlyDestroyToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; + private System.Windows.Forms.ToolStripMenuItem runGarbageCollectorToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem createWithoutExplictDestroyToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem createToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem referenceToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem derefrenceToolStripMenuItem; + private System.Windows.Forms.TextBox txtOutput; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator2; + private System.Windows.Forms.ToolStripMenuItem exhaustAllHandlesToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator3; + private System.Windows.Forms.ToolStripMenuItem testListenerToolStripMenuItem; + } +} + diff --git a/Old Matlab Interface/.svn/pristine/0c/0c9396420176d71310c25719e16eab65ad651680.svn-base b/Old Matlab Interface/.svn/pristine/0c/0c9396420176d71310c25719e16eab65ad651680.svn-base new file mode 100644 index 00000000..9dfcb4d4 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/0c/0c9396420176d71310c25719e16eab65ad651680.svn-base @@ -0,0 +1,17 @@ +function [isoLog] = plotiso(mode) + +iso_incoming; + +load('isoLog.txt'); +window = 750; +switch (mode) + case 1 + for n=1:32:((length(isoLog))-window) + plot(isoLog(n:n+window)); + drawnow + pause(0.03); + end + otherwise + plot(isoLog); +end + diff --git a/Old Matlab Interface/.svn/pristine/0e/0ed0593721eb6952fb9d053197d6bf9b002875fd.svn-base b/Old Matlab Interface/.svn/pristine/0e/0ed0593721eb6952fb9d053197d6bf9b002875fd.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..7c5aff1aa1111193c79a257d4cc7c8bde9079f75 GIT binary patch literal 8192 zcmeHM4R93I9eNvV@B=MZ>|N29sdU+{vD7z~vZh!CX-VxNX zb~@7;M;^TQ|9=1f`@hfIbl!45DJO(fpc)1tI{{f~=j~@VM0>B<`*x;e6ey zqHK~h2sLHZgw%plXL7^mm+&n%#$x<3LhP(TDMHc<0?9hs$;9nYwK}lCCux&2c_|?) zVERM@A$_dFFd}YGSx_gF}$cOO*0vBy0l|xO}(aKfw95hdKWR`bZKY( zDXJ0&i{}Kn;d&RJ)?rvX*OOCOD6;U$T2$uu64WWB9pO(Q&!V4^0WrVY<5;=sX0iXR zaEMm<_wj1gbtW|J~8H{D*p7#$fvjqn`96{f{-F&=VY(Vr7CP&N%iN1uzz;?FYj)rMr6eKw4chcV> zihQ%)0J>!0(4CxI?dcW!_k^QsZW}fl-<*!ypmChHzvJywyxqauhk5%RZ%281fVX43 zJ&1O6w7m-}O4vo<+i=eUi-kwW4fi3q6Z7^_qy^wP1_qAg?1LS)i8*5b9HJjU?3gqI zK>w+U{}q#~KMLGeK#anz!=s}j-6Q5B4l%!>PR#esl=5o@|4RQVKU>Ix&*-E_C3oxX(qLzQUyF zda}L_nz`2}D*ex~Oj7$voJ;*D%QV-nS)ldxc0!Il4v|Qm|AfeJzlzgIqDMt|-1;Ez z-FcV`UVxyJo|5RKNOiIQxFgi^mU4@@_)em|Yq)2!)GQ7X?JpwjL^lsZo9E162jZWT@V@WXLuiWi5cYWodEf^ z`DlX!$6W)jvmozjyA1TPSAhEp$9@mc|Gv#NFao5MC;E;^Kc1;$xOA;dz4;ZMDZ7=Z zmp~2_v|2My*J1)EmazTILK$?v3@~ER&Tqq%#aUNWE5kgE-$h1pc3s7sNOXjqRR>rPI9D}KGfRH-*gYQ^ z2Fv}RGY>DvPC?Z?Lqv8VIUixJ-FH_ZM&uASCyiW_gGbDOYDj)K@o^C%c=z2O*dBdPYW(KjaE}=KoN-YPKYU+2C z|3+#VQ(S&yNbDb)8*JIHyv97xA+`{#!g357=+1r%$&lXpm*xxq7)f+ zEcl=WAGP4mE%>Yj4_mP4_gO2RBK?3xKW4#g7ED=itp$tvl~#Y}TX3!g7g_MVkLeff zJ`N-2kS*+`P%I%eyF!j7!pUA)=!qp$a-vBHDoR%Azz30Qghp?3WCMt}u1excOe3yE zfD3DSXIOrjJsbBSW`m>l{i1$_jZ|C*S#<@ehE4Ut%HArASF~9V+wY?acup~B>N>bC znUeQk0Y54bGC7AuVwSz&jR~-w!h3_+fajfJdjsaNZZ^KbOwn5lUIcodR?hB^GqdvF z?vL9l(tTaB7GNKhqUGtn4n>Y>@{PH)tR&-|F-=MKMX&aH$(7LSjHURuoyVZJ)Uxpa z_bWfl~EyYxgZ!kiZ1y|e{lza=h z5m`!Bs_T|Tr))@q#kG86YFX4Dzay7aWJ0P4#LJ=xJRFPPE^8{OG&!M6QX`j}+Be6N znm?0RA*bY+DzgZ3=$Jb>WLH&u{_MeHylYj*iUnS;>3dpvG|dMYjVl_tyDXYSf10eM z$vvm>s7&Ja9z{kR@7bbqCXN##5zXW<;zw=KSXx~lmHQ9|xx^NYc0|=)IiBoE#-kfz znM6uf2${wBy}glmuXcShh3@fXFdB^`%uH0<)GNblPd1u~rDYW;n7U@DoS4x(9$!jE#RAcK>a`y(z zdO}LBQ)0@d4kSP&KPkT{Co7x6veJ`P(y>fj?#Sj?Eadxa_PUet+c|@f{Wj1YIYp5( zn%Pk(fuDp^xM3w5msJ()EzGuSld8$-?qpi_s~Eq`urn5M@mp}iW#(DM&MQ`Dg1#74 zKxN-NuVRp_?7A)*>RKL^mM;%CVZnXlszq$wU7yRuwPZHKRKCE4JqTGTK80VrO*q(d zm_1p~mM=vHu+Gmr2akH(iFmV+9jIf#cLL79oj(rzJit!e=cjObI%y*1eT zf#D3g@h)IEdmmh9;a`e5`acY^g8Q)XKjC0HwiI0!`DI|>L+K~@RZtKii-ZZe#fG^w z4M=NDRps=$)Fz=Xoyw?f4LK!qjT+w|r(^0B>115Vs@Wdxig-4CO-xNUZCubG;1)>s z$f~wVR#Y6UZ4C>WybVj7)q>EfDLGXO;nw<`z4=T#SgLY7rzEvaydMFjRgv$=!Hb;0 z%V8s~hxM{r5>6Ed`(VmWcuC$Ur-T%1+ZtkOD6=tpyR0+_xuieN?wz)Vo>)qi8NW?<^7n%s>-_jzFV-nAn IFI@)y4dC%NS^xk5 literal 0 HcmV?d00001 diff --git a/Old Matlab Interface/.svn/pristine/0f/0f12a5f7cb26c94273fd8b33b99a2faba6d5722d.svn-base b/Old Matlab Interface/.svn/pristine/0f/0f12a5f7cb26c94273fd8b33b99a2faba6d5722d.svn-base new file mode 100644 index 00000000..47980eea --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/0f/0f12a5f7cb26c94273fd8b33b99a2faba6d5722d.svn-base @@ -0,0 +1,66 @@ +function [] = tiny_send_waveform(waveform, amplitude, frequency); + +global scope_mode +global gui_axes + +offset = 375; +waveform = tiny_wave_conv(waveform, amplitude); +waveform = uint8(waveform); +%waveform; + +wave_length = length(waveform); + +f_invalid = 1; + +valid_clock_div = [1,2,4,8,64,256,1024]; +f0=24e6; + +if(frequency*wave_length)>1e6 + error('Frequency is too high') +end + +for clk_setting = 1:length(valid_clock_div) + f_test = f0 / valid_clock_div(clk_setting); + if (f_test/frequency)<65535 + f_invalid = 0; + break + end +end + +if (f_invalid) + error('Frequency is too low!') +end + +tccper = round(f_test / frequency / wave_length); +tccper = uint16(tccper); + +clk_setting = uint16(clk_setting); +%clk_setting; + +%stairs(uint8(waveform)); + +% wavestring = []; +% for n=1:wave_length +% wavestring = [wavestring [sprintf('%3d, ', waveform(n)) ' ']]; +% end + +%%Exception for mode 5 +if (scope_mode ==5) + mex_usb_send_control('40', 'a1', dec2hex(tccper), dec2hex(clk_setting), dec2hex(wave_length), uint8(waveform)); + stairs(gui_axes, waveform, 'y') + set(gui_axes, 'Color', [0 0 0], 'Box', 'on', 'XColor', [1 1 1], 'Ycolor', [1 1 1]); + return +end + + +mex_usb_send_control('40', 'a1', dec2hex(tccper), dec2hex(clk_setting + 16*offset), dec2hex(min(375,wave_length)), uint8(waveform(1:min(375,wave_length)))); + +if(wave_length>375) + warning('\nWave Length > 375') + mex_usb_send_control('40', 'a1', dec2hex(tccper), dec2hex(clk_setting + 16*(offset+750) + 32768), dec2hex(wave_length-375), uint8(waveform(376:end))); +end + + +% driverLocation = 'c:\libusbk\examples\open-device\debug\win32'; +% command = [driverLocation '\open-device "03eb" "a000" "' command '" "' num2str(tccper) '" "' num2str(clk_setting) '" "' num2str(wave_length) '" "' wavestring '"'] +% system(command); \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/0f/0ffe81cc039ff9bb68c4a763e940a3fd1ff33679.svn-base b/Old Matlab Interface/.svn/pristine/0f/0ffe81cc039ff9bb68c4a763e940a3fd1ff33679.svn-base new file mode 100644 index 00000000..335ce7f6 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/0f/0ffe81cc039ff9bb68c4a763e940a3fd1ff33679.svn-base @@ -0,0 +1,11 @@ +function [err] = verr(vex, r) + +if r<50 + error('R IS TOO LOW!!!') +end + +%%FOR THE BIG BOY BOARD, remove the +0.2 also +%r = (1/r + 1/250)^-1; +err = ((vex + 1.5)^4 / (80 * r)) + 0.2 + +%err = vex^3/512 - (r/68) * (vex^1.8/(20^1.8)) - (vex-10) / 10 +vex/20 \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/10/10de157f63173d022f4d6a0ed452a3c74574d9ca.svn-base b/Old Matlab Interface/.svn/pristine/10/10de157f63173d022f4d6a0ed452a3c74574d9ca.svn-base new file mode 100644 index 00000000..fd54ba80 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/10/10de157f63173d022f4d6a0ed452a3c74574d9ca.svn-base @@ -0,0 +1,11 @@ +function [] = printusb(inputstring); +if length(inputstring)>21 + error('String too long. Reduce to under 21 chars.') +end + +normalisedString=' '; +normalisedString(1:length(inputstring)) = inputstring; + +driverLocation = 'c:\libusbk\examples\open-device\debug\win32'; +command = [driverLocation '\open-device "' normalisedString '" "1" "03eb" "a000"'] +system(command); \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/11/11873190b9aa35cf3c7da49845992102338d0d01.svn-base b/Old Matlab Interface/.svn/pristine/11/11873190b9aa35cf3c7da49845992102338d0d01.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..e236095849bbbff3d13c8a544e7c2fbf11e4c6e1 GIT binary patch literal 322 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 +// All rights reserved. +// +// TextBoxTraceListener.cs +// +// Created: 03.02.2012 +// Last Updated: 03.03.2012 +// +// 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. +// +// 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 TRAVIS LEE ROBINSON +// 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. +#endregion + + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Diagnostics; +using System.Threading; +using System.Windows.Forms; + + +namespace Handle.Test +{ + public class TestListener + { + #region Public Members + public TestListener(int threadCount) + { + mThreadCount = threadCount; + while (threadCount-- > 0) + mThreadList.Add(new Thread(DebugDumpProc)); + + threadCount = mThreadCount; + + foreach (Thread thread in mThreadList) + thread.Start((mThreadCount) - (threadCount--)); + + Thread.Sleep(0); + } + #endregion + + + #region Private Members + private static void DebugDumpProc(object state) + { + for (int iLine = 0; iLine < 64; iLine++) + Debug.Print("Debug test output. ThreadIndex:{0:000} Line:{1:000}", (int) state, iLine); + } + + private readonly int mThreadCount; + private readonly List mThreadList = new List(); + #endregion + } + + public class TextBoxTraceListener : TraceListener + { + #region Nested Delegates + private delegate void WriteDelegate(string message); + #endregion + + + #region Public Members + public TextBoxTraceListener(TextBox textBox, ThreadPriority priority) + { + mTraceLines = ArrayList.Synchronized(mTraceLinesUnsafe); + mTextBox = textBox; + writeInvokeCb = WriteInvoke; + mUiThread = new Thread(ListenerOutputProc); + mUiThread.Priority = priority; + + mUiThread.Start(this); + } + + /// Calls the dispose method. + public virtual void Free() + { + if (mUiThread != null) + mCancelEvent.Set(); + + mUiThread = null; + } + + public override void Write(string message) + { + ArrayList traceLines = mTraceLines; + traceLines.Add(message); + mOutputReadySemaphore.Release(); + } + + public override void WriteLine(string message) + { + Write(message + Environment.NewLine); + } + #endregion + + + #region Private Members + private static void ListenerOutputProc(object state) + { + TextBoxTraceListener listener = (TextBoxTraceListener) state; + + while (true) + { + int waitRet = WaitHandle.WaitAny(new WaitHandle[] {listener.mOutputReadySemaphore, listener.mCancelEvent}); + if (waitRet != 0) break; + + ArrayList traceLines = listener.mTraceLines; + String sLines = String.Empty; + DateTime dtNow = DateTime.Now; + while (true) + { + sLines += String.Format("[{0:00}:{1:00}:{2:00}:{3:000}] {4}", dtNow.Hour, dtNow.Minute, dtNow.Second, dtNow.Millisecond, traceLines[0] as string); + traceLines.RemoveAt(0); + + if (!listener.mOutputReadySemaphore.WaitOne(0)) break; + } + + try + { + listener.mTextBox.Invoke(listener.writeInvokeCb, new object[] {sLines}); + } + catch + { + break; + } + } + } + + private void WriteInvoke(string message) + { + mTextBox.AppendText(message); + } + + private readonly ManualResetEvent mCancelEvent = new ManualResetEvent(false); + + private readonly Semaphore mOutputReadySemaphore = new Semaphore(0, int.MaxValue); + private readonly TextBox mTextBox; + private readonly ArrayList mTraceLines; + private readonly ArrayList mTraceLinesUnsafe = new ArrayList(); + private Thread mUiThread; + private readonly WriteDelegate writeInvokeCb; + #endregion + } +} \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/16/16bc34a84f9aaded710f7d05ce5c5d9eafe673d7.svn-base b/Old Matlab Interface/.svn/pristine/16/16bc34a84f9aaded710f7d05ce5c5d9eafe673d7.svn-base new file mode 100644 index 00000000..906db7fc --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/16/16bc34a84f9aaded710f7d05ce5c5d9eafe673d7.svn-base @@ -0,0 +1,3513 @@ +#Region "Copyright (c) Travis Robinson" + +' Copyright (c) 2012 Travis Robinson +' All rights reserved. +' +' C# libusbK Bindings +' Auto-generated on: 04.28.2011 +' +' 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. +' +' 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 TRAVIS LEE ROBINSON +' 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. + +#End Region + +Imports System +Imports System.Diagnostics +Imports System.Runtime.InteropServices + +' ReSharper disable InconsistentNaming +' ReSharper disable CheckNamespace +' ReSharper disable UnassignedReadonlyField + +Namespace libusbK + Public NotInheritable Class AllKOptions + Private Sub New() + End Sub + #Region "Public Members" + + ''' + ''' Alternate libusbK library to use. This must be assigned before any libusbK functions are called and it must be the full path and file name to a libusbK.dll. + ''' + Public Shared LIBUSBK_FULLPATH_TO_ALTERNATE_DLL As String + + #End Region + End Class + + Public NotInheritable Class AllKConstants + Private Sub New() + End Sub + #Region "Public Members" + + ''' + ''' Allocated length for all strings in a \ref KLST_DEVINFO structure. + ''' + Public Const KLST_STRING_MAX_LEN As Integer = 256 + + ''' + ''' libusbK library + ''' + Public Const LIBUSBK_DLL As String = "libusbK.dll" + + ''' + ''' Config power mask for the \c bmAttributes field of a \ref USB_CONFIGURATION_DESCRIPTOR + ''' + Public Const USB_CONFIG_POWERED_MASK As Byte = &Hc0 + + ''' + ''' Endpoint address mask for the \c bEndpointAddress field of a \ref USB_ENDPOINT_DESCRIPTOR + ''' + Public Const USB_ENDPOINT_ADDRESS_MASK As Byte = &Hf + + ''' + ''' Endpoint direction mask for the \c bEndpointAddress field of a \ref USB_ENDPOINT_DESCRIPTOR + ''' + Public Const USB_ENDPOINT_DIRECTION_MASK As Byte = &H80 + + #End Region + End Class + + Public Enum PipePolicyType + SHORT_PACKET_TERMINATE = &H1 + AUTO_CLEAR_STALL = &H2 + PIPE_TRANSFER_TIMEOUT = &H3 + IGNORE_SHORT_PACKETS = &H4 + ALLOW_PARTIAL_READS = &H5 + AUTO_FLUSH = &H6 + RAW_IO = &H7 + MAXIMUM_TRANSFER_SIZE = &H8 + RESET_PIPE_ON_RESUME = &H9 + + ISO_START_LATENCY = &H20 + ISO_ALWAYS_START_ASAP = &H21 + ISO_NUM_FIXED_PACKETS = &H22 + + SIMUL_PARALLEL_REQUESTS = &H30 + End Enum + + Public Enum PowerPolicyType + AUTO_SUSPEND = &H81 + SUSPEND_DELAY = &H83 + End Enum + + Public Enum DeviceInformationType + DEVICE_SPEED = &H1 + End Enum + + Public Enum EndpointType + ''' + ''' Indicates a control endpoint + ''' + CONTROL = &H0 + + ''' + ''' Indicates an isochronous endpoint + ''' + ISOCHRONOUS = &H1 + + ''' + ''' Indicates a bulk endpoint + ''' + BULK = &H2 + + ''' + ''' Indicates an interrupt endpoint + ''' + INTERRUPT = &H3 + + ''' + ''' Endpoint type mask for the \c bmAttributes field of a \ref USB_ENDPOINT_DESCRIPTOR + ''' + MASK = &H3 + End Enum + + Public NotInheritable Class ErrorCodes + Private Sub New() + End Sub + #Region "Public Members" + + ''' + ''' Access is denied. + ''' + Public Const AccessDenied As Integer = 5 + + ''' + ''' The requested resource is in use. + ''' + Public Const Busy As Integer = 170 + + ''' + ''' The operation was canceled by the user. + ''' + Public Const Cancelled As Integer = 1223 + + ''' + ''' The library, drive, or media pool is empty. + ''' + Public Const Empty As Integer = 4306 + + ''' + ''' The handle is invalid. + ''' + Public Const InvalidHandle As Integer = 6 + + ''' + ''' The parameter is incorrect. + ''' + Public Const InvalidParameter As Integer = 87 + + ''' + ''' Overlapped I/O event is not in a signaled state. + ''' + Public Const IoIncomplete As Integer = 996 + + ''' + ''' Overlapped I/O operation is in progress. + ''' + Public Const IoPending As Integer = 997 + + ''' + ''' More data is available. + ''' + Public Const MoreData As Integer = 234 + + ''' + ''' No more data is available. + ''' + Public Const NoMoreItems As Integer = 259 + + ''' + ''' Not enough storage is available to process this command. + ''' + Public Const NotEnoughMemory As Integer = 8 + + ''' + ''' Element not found. + ''' + Public Const NotFound As Integer = 1168 + + ''' + ''' The request is not supported. + ''' + Public Const NotSupported As Integer = 50 + + ''' + ''' The I/O operation has been aborted because of either a thread exit or an application request. + ''' + Public Const OperationAborted As Integer = 995 + + ''' + ''' The cluster resource is not available. + ''' + Public Const ResourceNotAvailable As Integer = 5006 + + ''' + ''' The cluster resource could not be found. + ''' + Public Const ResourceNotFound As Integer = 5007 + + ''' + ''' The semaphore timeout period has expired. + ''' + Public Const SemTimeout As Integer = 121 + + ''' + ''' The operation completed successfully. + ''' + Public Const Success As Integer = 0 + + ''' + ''' An attempt was made to operate on a thread within a specific process, but the thread specified is not in the process specified. + ''' + Public Const ThreadNotInProcess As Integer = 566 + + ''' + ''' A thread termination occurred while the thread was suspended. The thread was resumed, and termination proceeded. + ''' + Public Const ThreadWasSuspended As Integer = 699 + + ''' + ''' Too many dynamic-link modules are attached to this program or dynamic-link module. + ''' + Public Const TooManyModules As Integer = 214 + + #End Region + End Class + + Public Interface IKLIB_HANDLE + #Region "Public Members" + + Function GetContext() As IntPtr + ReadOnly Property HandleType() As KLIB_HANDLE_TYPE + ReadOnly Property Pointer() As IntPtr + Function SetCleanupCallback(CleanupCallback As KLIB_HANDLE_CLEANUP_CB) As Boolean + Function SetContext(UserContext As IntPtr) As Boolean + + #End Region + End Interface + + #Region "Opaque library handles" + + Public Structure KLST_HANDLE + Implements IKLIB_HANDLE + #Region "IKLIB_HANDLE Members" + + Public ReadOnly Property Pointer() As IntPtr Implements IKLIB_HANDLE.Pointer + Get + Return mHandlePtr + End Get + End Property + + Public ReadOnly Property HandleType() As KLIB_HANDLE_TYPE Implements IKLIB_HANDLE.HandleType + Get + Return KLIB_HANDLE_TYPE.LSTK + End Get + End Property + + Public Function GetContext() As IntPtr Implements IKLIB_HANDLE.GetContext + Return AllKFunctions.LibK_GetContext(mHandlePtr, HandleType) + End Function + + Public Function SetContext(UserContext As IntPtr) As Boolean Implements IKLIB_HANDLE.SetContext + Return AllKFunctions.LibK_SetContext(mHandlePtr, HandleType, UserContext) + End Function + + Public Function SetCleanupCallback(CleanupCallback As KLIB_HANDLE_CLEANUP_CB) As Boolean Implements IKLIB_HANDLE.SetCleanupCallback + Return AllKFunctions.LibK_SetCleanupCallback(mHandlePtr, HandleType, CleanupCallback) + End Function + + #End Region + + #Region "Public Members" + + Public Sub New(Handle As IntPtr) + mHandlePtr = Handle + End Sub + + #End Region + + #Region "Private Members" + + Private ReadOnly mHandlePtr As IntPtr + + #End Region + End Structure + + Public Structure KHOT_HANDLE + Implements IKLIB_HANDLE + #Region "IKLIB_HANDLE Members" + + Public ReadOnly Property Pointer() As IntPtr Implements IKLIB_HANDLE.Pointer + Get + Return mHandlePtr + End Get + End Property + + Public ReadOnly Property HandleType() As KLIB_HANDLE_TYPE Implements IKLIB_HANDLE.HandleType + Get + Return KLIB_HANDLE_TYPE.HOTK + End Get + End Property + + Public Function GetContext() As IntPtr Implements IKLIB_HANDLE.GetContext + Return AllKFunctions.LibK_GetContext(mHandlePtr, HandleType) + End Function + + Public Function SetContext(UserContext As IntPtr) As Boolean Implements IKLIB_HANDLE.SetContext + Return AllKFunctions.LibK_SetContext(mHandlePtr, HandleType, UserContext) + End Function + + Public Function SetCleanupCallback(CleanupCallback As KLIB_HANDLE_CLEANUP_CB) As Boolean Implements IKLIB_HANDLE.SetCleanupCallback + Return AllKFunctions.LibK_SetCleanupCallback(mHandlePtr, HandleType, CleanupCallback) + End Function + + #End Region + + #Region "Public Members" + + Public Sub New(Handle As IntPtr) + mHandlePtr = Handle + End Sub + + #End Region + + #Region "Private Members" + + Private ReadOnly mHandlePtr As IntPtr + + #End Region + End Structure + + Public Structure KUSB_HANDLE + Implements IKLIB_HANDLE + #Region "IKLIB_HANDLE Members" + + Public ReadOnly Property Pointer() As IntPtr Implements IKLIB_HANDLE.Pointer + Get + Return mHandlePtr + End Get + End Property + + Public ReadOnly Property HandleType() As KLIB_HANDLE_TYPE Implements IKLIB_HANDLE.HandleType + Get + Return KLIB_HANDLE_TYPE.USBK + End Get + End Property + + Public Function GetContext() As IntPtr Implements IKLIB_HANDLE.GetContext + Return AllKFunctions.LibK_GetContext(mHandlePtr, HandleType) + End Function + + Public Function SetContext(UserContext As IntPtr) As Boolean Implements IKLIB_HANDLE.SetContext + Return AllKFunctions.LibK_SetContext(mHandlePtr, HandleType, UserContext) + End Function + + Public Function SetCleanupCallback(CleanupCallback As KLIB_HANDLE_CLEANUP_CB) As Boolean Implements IKLIB_HANDLE.SetCleanupCallback + Return AllKFunctions.LibK_SetCleanupCallback(mHandlePtr, HandleType, CleanupCallback) + End Function + + #End Region + + #Region "USB Shared Device Context" + + Public Function GetSharedContext() As IntPtr + Return AllKFunctions.LibK_GetContext(mHandlePtr, KLIB_HANDLE_TYPE.USBSHAREDK) + End Function + + Public Function SetSharedCleanupCallback(CleanupCallback As KLIB_HANDLE_CLEANUP_CB) As Boolean + Return AllKFunctions.LibK_SetCleanupCallback(mHandlePtr, KLIB_HANDLE_TYPE.USBSHAREDK, CleanupCallback) + End Function + + Public Function SetSharedContext(UserContext As IntPtr) As Boolean + Return AllKFunctions.LibK_SetContext(mHandlePtr, KLIB_HANDLE_TYPE.USBSHAREDK, UserContext) + End Function + + #End Region + + #Region "Public Members" + + Public Sub New(Handle As IntPtr) + mHandlePtr = Handle + End Sub + + #End Region + + #Region "Private Members" + + Private ReadOnly mHandlePtr As IntPtr + + #End Region + End Structure + + Public Structure KOVL_POOL_HANDLE + Implements IKLIB_HANDLE + #Region "IKLIB_HANDLE Members" + + Public ReadOnly Property Pointer() As IntPtr Implements IKLIB_HANDLE.Pointer + Get + Return mHandlePtr + End Get + End Property + + Public ReadOnly Property HandleType() As KLIB_HANDLE_TYPE Implements IKLIB_HANDLE.HandleType + Get + Return KLIB_HANDLE_TYPE.OVLPOOLK + End Get + End Property + + Public Function GetContext() As IntPtr Implements IKLIB_HANDLE.GetContext + Return AllKFunctions.LibK_GetContext(mHandlePtr, HandleType) + End Function + + Public Function SetContext(UserContext As IntPtr) As Boolean Implements IKLIB_HANDLE.SetContext + Return AllKFunctions.LibK_SetContext(mHandlePtr, HandleType, UserContext) + End Function + + Public Function SetCleanupCallback(CleanupCallback As KLIB_HANDLE_CLEANUP_CB) As Boolean Implements IKLIB_HANDLE.SetCleanupCallback + Return AllKFunctions.LibK_SetCleanupCallback(mHandlePtr, HandleType, CleanupCallback) + End Function + + #End Region + + #Region "Public Members" + + Public Sub New(Handle As IntPtr) + mHandlePtr = Handle + End Sub + + #End Region + + #Region "Private Members" + + Private ReadOnly mHandlePtr As IntPtr + + #End Region + End Structure + + Public Structure KOVL_HANDLE + Implements IKLIB_HANDLE + #Region "IKLIB_HANDLE Members" + + Public ReadOnly Property Pointer() As IntPtr Implements IKLIB_HANDLE.Pointer + Get + Return mHandlePtr + End Get + End Property + + Public ReadOnly Property HandleType() As KLIB_HANDLE_TYPE Implements IKLIB_HANDLE.HandleType + Get + Return KLIB_HANDLE_TYPE.OVLK + End Get + End Property + + Public Function GetContext() As IntPtr Implements IKLIB_HANDLE.GetContext + Return AllKFunctions.LibK_GetContext(mHandlePtr, HandleType) + End Function + + Public Function SetContext(UserContext As IntPtr) As Boolean Implements IKLIB_HANDLE.SetContext + Return AllKFunctions.LibK_SetContext(mHandlePtr, HandleType, UserContext) + End Function + + Public Function SetCleanupCallback(CleanupCallback As KLIB_HANDLE_CLEANUP_CB) As Boolean Implements IKLIB_HANDLE.SetCleanupCallback + Return AllKFunctions.LibK_SetCleanupCallback(mHandlePtr, HandleType, CleanupCallback) + End Function + + #End Region + + #Region "Public Members" + + Public Sub New(Handle As IntPtr) + mHandlePtr = Handle + End Sub + + #End Region + + #Region "Private Members" + + Private ReadOnly mHandlePtr As IntPtr + + #End Region + End Structure + + Public Structure KSTM_HANDLE + Implements IKLIB_HANDLE + #Region "IKLIB_HANDLE Members" + + Public ReadOnly Property Pointer() As IntPtr Implements IKLIB_HANDLE.Pointer + Get + Return mHandlePtr + End Get + End Property + + Public ReadOnly Property HandleType() As KLIB_HANDLE_TYPE Implements IKLIB_HANDLE.HandleType + Get + Return KLIB_HANDLE_TYPE.STMK + End Get + End Property + + Public Function GetContext() As IntPtr Implements IKLIB_HANDLE.GetContext + Return AllKFunctions.LibK_GetContext(mHandlePtr, HandleType) + End Function + + Public Function SetContext(UserContext As IntPtr) As Boolean Implements IKLIB_HANDLE.SetContext + Return AllKFunctions.LibK_SetContext(mHandlePtr, HandleType, UserContext) + End Function + + Public Function SetCleanupCallback(CleanupCallback As KLIB_HANDLE_CLEANUP_CB) As Boolean Implements IKLIB_HANDLE.SetCleanupCallback + Return AllKFunctions.LibK_SetCleanupCallback(mHandlePtr, HandleType, CleanupCallback) + End Function + + #End Region + + #Region "Public Members" + + Public Sub New(Handle As IntPtr) + mHandlePtr = Handle + End Sub + + #End Region + + #Region "Private Members" + + Private ReadOnly mHandlePtr As IntPtr + + #End Region + End Structure + + #End Region + + #Region "Internal Function Imports" + + Friend NotInheritable Class AllKFunctions + Private Sub New() + End Sub + #Region "Delegates" + + _ + Public Delegate Sub HotK_FreeAllDelegate() + + _ + Public Delegate Function HotK_FreeDelegate(<[In]> Handle As KHOT_HANDLE) As Boolean + + _ + Public Delegate Function HotK_InitDelegate( ByRef Handle As KHOT_HANDLE, <[In], Out> ByRef InitParams As KHOT_PARAMS) As Boolean + + _ + Public Delegate Function IsoK_EnumPacketsDelegate(<[In]> IsoContext As KISO_CONTEXT, EnumPackets As KISO_ENUM_PACKETS_CB, StartPacketIndex As Integer, UserState As IntPtr) As Boolean + + _ + Public Delegate Function IsoK_FreeDelegate(<[In]> IsoContext As KISO_CONTEXT) As Boolean + + _ + Public Delegate Function IsoK_GetPacketDelegate(<[In]> IsoContext As KISO_CONTEXT, PacketIndex As Integer, ByRef IsoPacket As KISO_PACKET) As Boolean + + _ + Public Delegate Function IsoK_InitDelegate( ByRef IsoContext As KISO_CONTEXT, NumberOfPackets As Integer, StartFrame As Integer) As Boolean + + _ + Public Delegate Function IsoK_ReUseDelegate(<[In]> IsoContext As KISO_CONTEXT) As Boolean + + _ + Public Delegate Function IsoK_SetPacketDelegate(<[In]> IsoContext As KISO_CONTEXT, PacketIndex As Integer, <[In]> ByRef IsoPacket As KISO_PACKET) As Boolean + + _ + Public Delegate Function IsoK_SetPacketsDelegate(<[In]> IsoContext As KISO_CONTEXT, PacketSize As Integer) As Boolean + + _ + Public Delegate Sub LibK_Context_FreeDelegate() + + _ + Public Delegate Function LibK_Context_InitDelegate(Heap As IntPtr, Reserved As IntPtr) As Boolean + + _ + Public Delegate Function LibK_CopyDriverAPIDelegate( ByRef DriverAPI As KUSB_DRIVER_API, <[In]> UsbHandle As KUSB_HANDLE) As Boolean + + _ + Public Delegate Function LibK_GetContextDelegate(<[In]> Handle As IntPtr, HandleType As KLIB_HANDLE_TYPE) As IntPtr + + _ + Public Delegate Function LibK_GetDefaultContextDelegate(HandleType As KLIB_HANDLE_TYPE) As IntPtr + + _ + Public Delegate Function LibK_GetProcAddressDelegate(ProcAddress As IntPtr, DriverID As Integer, FunctionID As Integer) As Boolean + + _ + Public Delegate Sub LibK_GetVersionDelegate( ByRef Version As KLIB_VERSION) + + _ + Public Delegate Function LibK_LoadDriverAPIDelegate( ByRef DriverAPI As KUSB_DRIVER_API, DriverID As Integer) As Boolean + + _ + Public Delegate Function LibK_SetCleanupCallbackDelegate(<[In]> Handle As IntPtr, HandleType As KLIB_HANDLE_TYPE, CleanupCB As KLIB_HANDLE_CLEANUP_CB) As Boolean + + _ + Public Delegate Function LibK_SetContextDelegate(<[In]> Handle As IntPtr, HandleType As KLIB_HANDLE_TYPE, ContextValue As IntPtr) As Boolean + + _ + Public Delegate Function LibK_SetDefaultContextDelegate(HandleType As KLIB_HANDLE_TYPE, ContextValue As IntPtr) As Boolean + + _ + Public Delegate Function LstK_CountDelegate(<[In]> DeviceList As KLST_HANDLE, ByRef Count As Integer) As Boolean + + _ + Public Delegate Function LstK_CurrentDelegate(<[In]> DeviceList As KLST_HANDLE, ByRef DeviceInfo As KLST_DEVINFO_HANDLE) As Boolean + + _ + Public Delegate Function LstK_EnumerateDelegate(<[In]> DeviceList As KLST_HANDLE, EnumDevListCB As KLST_ENUM_DEVINFO_CB, Context As IntPtr) As Boolean + + _ + Public Delegate Function LstK_FindByVidPidDelegate(<[In]> DeviceList As KLST_HANDLE, Vid As Integer, Pid As Integer, ByRef DeviceInfo As KLST_DEVINFO_HANDLE) As Boolean + + _ + Public Delegate Function LstK_FreeDelegate(<[In]> DeviceList As KLST_HANDLE) As Boolean + + _ + Public Delegate Function LstK_InitDelegate( ByRef DeviceList As KLST_HANDLE, Flags As KLST_FLAG) As Boolean + + _ + Public Delegate Function LstK_InitExDelegate( ByRef DeviceList As KLST_HANDLE, Flags As KLST_FLAG, <[In]> ByRef PatternMatch As KLST_PATTERN_MATCH) As Boolean + + _ + Public Delegate Function LstK_MoveNextDelegate(<[In]> DeviceList As KLST_HANDLE, ByRef DeviceInfo As KLST_DEVINFO_HANDLE) As Boolean + + _ + Public Delegate Sub LstK_MoveResetDelegate(<[In]> DeviceList As KLST_HANDLE) + + _ + Public Delegate Function OvlK_AcquireDelegate( ByRef OverlappedK As KOVL_HANDLE, <[In]> PoolHandle As KOVL_POOL_HANDLE) As Boolean + + _ + Public Delegate Function OvlK_FreeDelegate(<[In]> PoolHandle As KOVL_POOL_HANDLE) As Boolean + + _ + Public Delegate Function OvlK_GetEventHandleDelegate(<[In]> OverlappedK As KOVL_HANDLE) As IntPtr + + _ + Public Delegate Function OvlK_InitDelegate( ByRef PoolHandle As KOVL_POOL_HANDLE, <[In]> UsbHandle As KUSB_HANDLE, MaxOverlappedCount As Integer, Flags As KOVL_POOL_FLAG) As Boolean + + _ + Public Delegate Function OvlK_IsCompleteDelegate(<[In]> OverlappedK As KOVL_HANDLE) As Boolean + + _ + Public Delegate Function OvlK_ReUseDelegate(<[In]> OverlappedK As KOVL_HANDLE) As Boolean + + _ + Public Delegate Function OvlK_ReleaseDelegate(<[In]> OverlappedK As KOVL_HANDLE) As Boolean + + _ + Public Delegate Function OvlK_WaitAndReleaseDelegate(<[In]> OverlappedK As KOVL_HANDLE, TimeoutMS As Integer, ByRef TransferredLength As Integer) As Boolean + + _ + Public Delegate Function OvlK_WaitDelegate(<[In]> OverlappedK As KOVL_HANDLE, TimeoutMS As Integer, WaitFlags As KOVL_WAIT_FLAG, ByRef TransferredLength As Integer) As Boolean + + _ + Public Delegate Function OvlK_WaitOldestDelegate(<[In]> PoolHandle As KOVL_POOL_HANDLE, ByRef OverlappedK As KOVL_HANDLE, TimeoutMS As Integer, WaitFlags As KOVL_WAIT_FLAG, ByRef TransferredLength As Integer) As Boolean + + _ + Public Delegate Function OvlK_WaitOrCancelDelegate(<[In]> OverlappedK As KOVL_HANDLE, TimeoutMS As Integer, ByRef TransferredLength As Integer) As Boolean + + _ + Public Delegate Function StmK_FreeDelegate(<[In]> StreamHandle As KSTM_HANDLE) As Boolean + + _ + Public Delegate Function StmK_InitDelegate( ByRef StreamHandle As KSTM_HANDLE, <[In]> UsbHandle As KUSB_HANDLE, PipeID As Byte, MaxTransferSize As Integer, MaxPendingTransfers As Integer, MaxPendingIO As Integer, _ + <[In]> ByRef Callbacks As KSTM_CALLBACK, Flags As KSTM_FLAG) As Boolean + + _ + Public Delegate Function StmK_ReadDelegate(<[In]> StreamHandle As KSTM_HANDLE, Buffer As IntPtr, Offset As Integer, Length As Integer, ByRef TransferredLength As Integer) As Boolean + + _ + Public Delegate Function StmK_StartDelegate(<[In]> StreamHandle As KSTM_HANDLE) As Boolean + + _ + Public Delegate Function StmK_StopDelegate(<[In]> StreamHandle As KSTM_HANDLE, TimeoutCancelMS As Integer) As Boolean + + _ + Public Delegate Function StmK_WriteDelegate(<[In]> StreamHandle As KSTM_HANDLE, Buffer As IntPtr, Offset As Integer, Length As Integer, ByRef TransferredLength As Integer) As Boolean + + _ + Public Delegate Function UsbK_FreeDelegate(<[In]> InterfaceHandle As KUSB_HANDLE) As Boolean + + #End Region + + Shared Sub New() + If [String].IsNullOrEmpty(AllKOptions.LIBUSBK_FULLPATH_TO_ALTERNATE_DLL) Then + mModuleLibusbK = LoadLibraryEx(AllKConstants.LIBUSBK_DLL, IntPtr.Zero, LoadLibraryFlags.NONE) + Else + mModuleLibusbK = LoadLibraryEx(AllKOptions.LIBUSBK_FULLPATH_TO_ALTERNATE_DLL, IntPtr.Zero, LoadLibraryFlags.LOAD_WITH_ALTERED_SEARCH_PATH) + End If + + If mModuleLibusbK = IntPtr.Zero Then + Throw New DllNotFoundException("libusbK.dll not found. Please install drivers/applications and retry.") + End If + + LoadDynamicFunctions() + End Sub + + #Region "Nested Enumerations" + + _ + Private Enum LoadLibraryFlags + NONE = 0 + DONT_RESOLVE_DLL_REFERENCES = &H1 + LOAD_IGNORE_CODE_AUTHZ_LEVEL = &H10 + LOAD_LIBRARY_AS_DATAFILE = &H2 + LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE = &H40 + LOAD_LIBRARY_AS_IMAGE_RESOURCE = &H20 + LOAD_WITH_ALTERED_SEARCH_PATH = &H8 + End Enum + + #End Region + + #Region "Public Members" + + Public Shared HotK_Free As HotK_FreeDelegate + Public Shared HotK_FreeAll As HotK_FreeAllDelegate + Public Shared HotK_Init As HotK_InitDelegate + Public Shared IsoK_EnumPackets As IsoK_EnumPacketsDelegate + Public Shared IsoK_Free As IsoK_FreeDelegate + Public Shared IsoK_GetPacket As IsoK_GetPacketDelegate + Public Shared IsoK_Init As IsoK_InitDelegate + Public Shared IsoK_ReUse As IsoK_ReUseDelegate + Public Shared IsoK_SetPacket As IsoK_SetPacketDelegate + Public Shared IsoK_SetPackets As IsoK_SetPacketsDelegate + Public Shared LibK_Context_Free As LibK_Context_FreeDelegate + Public Shared LibK_Context_Init As LibK_Context_InitDelegate + + Public Shared LibK_CopyDriverAPI As LibK_CopyDriverAPIDelegate + Public Shared LibK_GetContext As LibK_GetContextDelegate + Public Shared LibK_GetDefaultContext As LibK_GetDefaultContextDelegate + Public Shared LibK_GetProcAddress As LibK_GetProcAddressDelegate + Public Shared LibK_GetVersion As LibK_GetVersionDelegate + Public Shared LibK_LoadDriverAPI As LibK_LoadDriverAPIDelegate + Public Shared LibK_SetCleanupCallback As LibK_SetCleanupCallbackDelegate + Public Shared LibK_SetContext As LibK_SetContextDelegate + Public Shared LibK_SetDefaultContext As LibK_SetDefaultContextDelegate + Public Shared LstK_Count As LstK_CountDelegate + Public Shared LstK_Current As LstK_CurrentDelegate + Public Shared LstK_Enumerate As LstK_EnumerateDelegate + Public Shared LstK_FindByVidPid As LstK_FindByVidPidDelegate + Public Shared LstK_Free As LstK_FreeDelegate + Public Shared LstK_Init As LstK_InitDelegate + Public Shared LstK_InitEx As LstK_InitExDelegate + Public Shared LstK_MoveNext As LstK_MoveNextDelegate + Public Shared LstK_MoveReset As LstK_MoveResetDelegate + Public Shared OvlK_Acquire As OvlK_AcquireDelegate + Public Shared OvlK_Free As OvlK_FreeDelegate + Public Shared OvlK_GetEventHandle As OvlK_GetEventHandleDelegate + Public Shared OvlK_Init As OvlK_InitDelegate + Public Shared OvlK_IsComplete As OvlK_IsCompleteDelegate + Public Shared OvlK_ReUse As OvlK_ReUseDelegate + Public Shared OvlK_Release As OvlK_ReleaseDelegate + Public Shared OvlK_Wait As OvlK_WaitDelegate + Public Shared OvlK_WaitAndRelease As OvlK_WaitAndReleaseDelegate + Public Shared OvlK_WaitOldest As OvlK_WaitOldestDelegate + Public Shared OvlK_WaitOrCancel As OvlK_WaitOrCancelDelegate + Public Shared StmK_Free As StmK_FreeDelegate + Public Shared StmK_Init As StmK_InitDelegate + Public Shared StmK_Read As StmK_ReadDelegate + Public Shared StmK_Start As StmK_StartDelegate + Public Shared StmK_Stop As StmK_StopDelegate + Public Shared StmK_Write As StmK_WriteDelegate + Public Shared UsbK_Free As UsbK_FreeDelegate + + #End Region + + #Region "Private Members" + + Private Declare Ansi Function GetProcAddress Lib "kernel32.dll" (hModule As IntPtr, procName As String) As IntPtr + + Private Shared Sub LoadDynamicFunctions() + LibK_GetVersion = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "LibK_GetVersion"), GetType(LibK_GetVersionDelegate)), LibK_GetVersionDelegate) + LibK_GetContext = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "LibK_GetContext"), GetType(LibK_GetContextDelegate)), LibK_GetContextDelegate) + LibK_SetContext = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "LibK_SetContext"), GetType(LibK_SetContextDelegate)), LibK_SetContextDelegate) + LibK_SetCleanupCallback = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "LibK_SetCleanupCallback"), GetType(LibK_SetCleanupCallbackDelegate)), LibK_SetCleanupCallbackDelegate) + LibK_LoadDriverAPI = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "LibK_LoadDriverAPI"), GetType(LibK_LoadDriverAPIDelegate)), LibK_LoadDriverAPIDelegate) + LibK_CopyDriverAPI = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "LibK_CopyDriverAPI"), GetType(LibK_CopyDriverAPIDelegate)), LibK_CopyDriverAPIDelegate) + LibK_GetProcAddress = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "LibK_GetProcAddress"), GetType(LibK_GetProcAddressDelegate)), LibK_GetProcAddressDelegate) + LibK_SetDefaultContext = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "LibK_SetDefaultContext"), GetType(LibK_SetDefaultContextDelegate)), LibK_SetDefaultContextDelegate) + LibK_GetDefaultContext = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "LibK_GetDefaultContext"), GetType(LibK_GetDefaultContextDelegate)), LibK_GetDefaultContextDelegate) + LibK_Context_Init = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "LibK_Context_Init"), GetType(LibK_Context_InitDelegate)), LibK_Context_InitDelegate) + LibK_Context_Free = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "LibK_Context_Free"), GetType(LibK_Context_FreeDelegate)), LibK_Context_FreeDelegate) + UsbK_Free = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "UsbK_Free"), GetType(UsbK_FreeDelegate)), UsbK_FreeDelegate) + LstK_Init = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "LstK_Init"), GetType(LstK_InitDelegate)), LstK_InitDelegate) + LstK_InitEx = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "LstK_InitEx"), GetType(LstK_InitExDelegate)), LstK_InitExDelegate) + LstK_Free = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "LstK_Free"), GetType(LstK_FreeDelegate)), LstK_FreeDelegate) + LstK_Enumerate = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "LstK_Enumerate"), GetType(LstK_EnumerateDelegate)), LstK_EnumerateDelegate) + LstK_Current = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "LstK_Current"), GetType(LstK_CurrentDelegate)), LstK_CurrentDelegate) + LstK_MoveNext = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "LstK_MoveNext"), GetType(LstK_MoveNextDelegate)), LstK_MoveNextDelegate) + LstK_MoveReset = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "LstK_MoveReset"), GetType(LstK_MoveResetDelegate)), LstK_MoveResetDelegate) + LstK_FindByVidPid = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "LstK_FindByVidPid"), GetType(LstK_FindByVidPidDelegate)), LstK_FindByVidPidDelegate) + LstK_Count = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "LstK_Count"), GetType(LstK_CountDelegate)), LstK_CountDelegate) + HotK_Init = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "HotK_Init"), GetType(HotK_InitDelegate)), HotK_InitDelegate) + HotK_Free = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "HotK_Free"), GetType(HotK_FreeDelegate)), HotK_FreeDelegate) + HotK_FreeAll = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "HotK_FreeAll"), GetType(HotK_FreeAllDelegate)), HotK_FreeAllDelegate) + OvlK_Acquire = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "OvlK_Acquire"), GetType(OvlK_AcquireDelegate)), OvlK_AcquireDelegate) + OvlK_Release = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "OvlK_Release"), GetType(OvlK_ReleaseDelegate)), OvlK_ReleaseDelegate) + OvlK_Init = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "OvlK_Init"), GetType(OvlK_InitDelegate)), OvlK_InitDelegate) + OvlK_Free = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "OvlK_Free"), GetType(OvlK_FreeDelegate)), OvlK_FreeDelegate) + OvlK_GetEventHandle = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "OvlK_GetEventHandle"), GetType(OvlK_GetEventHandleDelegate)), OvlK_GetEventHandleDelegate) + OvlK_Wait = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "OvlK_Wait"), GetType(OvlK_WaitDelegate)), OvlK_WaitDelegate) + OvlK_WaitOldest = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "OvlK_WaitOldest"), GetType(OvlK_WaitOldestDelegate)), OvlK_WaitOldestDelegate) + OvlK_WaitOrCancel = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "OvlK_WaitOrCancel"), GetType(OvlK_WaitOrCancelDelegate)), OvlK_WaitOrCancelDelegate) + OvlK_WaitAndRelease = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "OvlK_WaitAndRelease"), GetType(OvlK_WaitAndReleaseDelegate)), OvlK_WaitAndReleaseDelegate) + OvlK_IsComplete = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "OvlK_IsComplete"), GetType(OvlK_IsCompleteDelegate)), OvlK_IsCompleteDelegate) + OvlK_ReUse = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "OvlK_ReUse"), GetType(OvlK_ReUseDelegate)), OvlK_ReUseDelegate) + StmK_Init = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "StmK_Init"), GetType(StmK_InitDelegate)), StmK_InitDelegate) + StmK_Free = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "StmK_Free"), GetType(StmK_FreeDelegate)), StmK_FreeDelegate) + StmK_Start = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "StmK_Start"), GetType(StmK_StartDelegate)), StmK_StartDelegate) + StmK_Stop = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "StmK_Stop"), GetType(StmK_StopDelegate)), StmK_StopDelegate) + StmK_Read = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "StmK_Read"), GetType(StmK_ReadDelegate)), StmK_ReadDelegate) + StmK_Write = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "StmK_Write"), GetType(StmK_WriteDelegate)), StmK_WriteDelegate) + IsoK_Init = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "IsoK_Init"), GetType(IsoK_InitDelegate)), IsoK_InitDelegate) + IsoK_Free = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "IsoK_Free"), GetType(IsoK_FreeDelegate)), IsoK_FreeDelegate) + IsoK_SetPackets = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "IsoK_SetPackets"), GetType(IsoK_SetPacketsDelegate)), IsoK_SetPacketsDelegate) + IsoK_SetPacket = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "IsoK_SetPacket"), GetType(IsoK_SetPacketDelegate)), IsoK_SetPacketDelegate) + IsoK_GetPacket = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "IsoK_GetPacket"), GetType(IsoK_GetPacketDelegate)), IsoK_GetPacketDelegate) + IsoK_EnumPackets = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "IsoK_EnumPackets"), GetType(IsoK_EnumPacketsDelegate)), IsoK_EnumPacketsDelegate) + IsoK_ReUse = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "IsoK_ReUse"), GetType(IsoK_ReUseDelegate)), IsoK_ReUseDelegate) + End Sub + + _ + Private Shared Function LoadLibraryEx(lpFileName As String, hReservedNull As IntPtr, dwFlags As LoadLibraryFlags) As IntPtr + End Function + + Private Shared ReadOnly mModuleLibusbK As IntPtr = IntPtr.Zero + + #End Region + End Class + + #End Region + + #Region "Enumerations" + + ''' Values used in the \c bmAttributes field of a \ref USB_ENDPOINT_DESCRIPTOR + Public Enum USBD_PIPE_TYPE + ''' Indicates a control endpoint + UsbdPipeTypeControl + + ''' Indicates an isochronous endpoint + UsbdPipeTypeIsochronous + + ''' Indicates a bulk endpoint + UsbdPipeTypeBulk + + ''' Indicates an interrupt endpoint + UsbdPipeTypeInterrupt + End Enum + + ''' Additional ISO transfer flags. + _ + Public Enum KISO_FLAG + NONE = 0 + + ''' Do not start the transfer immediately, instead use \ref KISO_CONTEXT::StartFrame. + SET_START_FRAME = &H1 + End Enum + + ''' Handle type enumeration. + Public Enum KLIB_HANDLE_TYPE + ''' Hot plug handle. \ref KHOT_HANDLE + HOTK + + ''' USB handle. \ref KUSB_HANDLE + USBK + + ''' Shared USB handle. \ref KUSB_HANDLE + USBSHAREDK + + ''' Device list handle. \ref KLST_HANDLE + LSTK + + ''' Device info handle. \ref KLST_DEVINFO_HANDLE + LSTINFOK + + ''' Overlapped handle. \ref KOVL_HANDLE + OVLK + + ''' Overlapped pool handle. \ref KOVL_POOL_HANDLE + OVLPOOLK + + ''' Pipe stream handle. \ref KSTM_HANDLE + STMK + + ''' Max handle type count. + COUNT + End Enum + + ''' Device list sync flags. + _ + Public Enum KLST_SYNC_FLAG + ''' Cleared/invalid state. + NONE = 0 + + ''' Unchanged state, + UNCHANGED = &H1 + + ''' Added (Arrival) state, + ADDED = &H2 + + ''' Removed (Unplugged) state, + REMOVED = &H4 + + ''' Connect changed state. + CONNECT_CHANGE = &H8 + + ''' All states. + MASK = &Hf + End Enum + + ''' Device list initialization flags. + _ + Public Enum KLST_FLAG + ''' No flags (or 0) + NONE = 0 + + ''' Enable listings for the raw device interface GUID \b only. {A5DCBF10-6530-11D2-901F-00C04FB951ED} + INCLUDE_RAWGUID = &H1 + + ''' List all libusbK devices including those not currently connected. + INCLUDE_DISCONNECT = &H2 + End Enum + + ''' bmRequest.Dir + Public Enum BMREQUEST_DIR + HOST_TO_DEVICE = 0 + DEVICE_TO_HOST = 1 + End Enum + + ''' bmRequest.Type + Public Enum BMREQUEST_TYPE + ''' Standard request. See \ref USB_REQUEST_ENUM + STANDARD = 0 + + ''' Class-specific request. + [CLASS] = 1 + + ''' Vendor-specific request + VENDOR = 2 + End Enum + + ''' bmRequest.Recipient + Public Enum BMREQUEST_RECIPIENT + ''' Request is for a device. + DEVICE = 0 + + ''' Request is for an interface of a device. + [INTERFACE] = 1 + + ''' Request is for an endpoint of a device. + ENDPOINT = 2 + + ''' Request is for a vendor-specific purpose. + OTHER = 3 + End Enum + + ''' Values for the bits returned by the \ref USB_REQUEST_GET_STATUS request. + Public Enum USB_GETSTATUS + ''' Device is self powered + SELF_POWERED = &H1 + + ''' Device can wake the system from a low power/sleeping state. + REMOTE_WAKEUP_ENABLED = &H2 + End Enum + + ''' Standard USB descriptor types. For more information, see section 9-5 of the USB 3.0 specifications. + Public Enum USB_DESCRIPTOR_TYPE + ''' Device descriptor type. + DEVICE = &H1 + + ''' Configuration descriptor type. + CONFIGURATION = &H2 + + ''' String descriptor type. + [STRING] = &H3 + + ''' Interface descriptor type. + [INTERFACE] = &H4 + + ''' Endpoint descriptor type. + ENDPOINT = &H5 + + ''' Device qualifier descriptor type. + DEVICE_QUALIFIER = &H6 + + ''' Config power descriptor type. + CONFIG_POWER = &H7 + + ''' Interface power descriptor type. + INTERFACE_POWER = &H8 + + ''' Interface association descriptor type. + INTERFACE_ASSOCIATION = &Hb + End Enum + + ''' Usb handle specific properties that can be retrieved with \ref UsbK_GetProperty. + Public Enum KUSB_PROPERTY + ''' Get the internal device file handle used for operations such as GetOverlappedResult or DeviceIoControl. + DEVICE_FILE_HANDLE + + COUNT + End Enum + + ''' Supported driver id enumeration. + Public Enum KUSB_DRVID + ''' libusbK.sys driver ID + LIBUSBK + + ''' libusb0.sys driver ID + LIBUSB0 + + ''' WinUSB.sys driver ID + WINUSB + + ''' libusb0.sys filter driver ID + LIBUSB0_FILTER + + ''' Supported driver count + COUNT + End Enum + + ''' Supported function id enumeration. + Public Enum KUSB_FNID + ''' \ref UsbK_Init dynamic driver function id. + Init + + ''' \ref UsbK_Free dynamic driver function id. + Free + + ''' \ref UsbK_ClaimInterface dynamic driver function id. + ClaimInterface + + ''' \ref UsbK_ReleaseInterface dynamic driver function id. + ReleaseInterface + + ''' \ref UsbK_SetAltInterface dynamic driver function id. + SetAltInterface + + ''' \ref UsbK_GetAltInterface dynamic driver function id. + GetAltInterface + + ''' \ref UsbK_GetDescriptor dynamic driver function id. + GetDescriptor + + ''' \ref UsbK_ControlTransfer dynamic driver function id. + ControlTransfer + + ''' \ref UsbK_SetPowerPolicy dynamic driver function id. + SetPowerPolicy + + ''' \ref UsbK_GetPowerPolicy dynamic driver function id. + GetPowerPolicy + + ''' \ref UsbK_SetConfiguration dynamic driver function id. + SetConfiguration + + ''' \ref UsbK_GetConfiguration dynamic driver function id. + GetConfiguration + + ''' \ref UsbK_ResetDevice dynamic driver function id. + ResetDevice + + ''' \ref UsbK_Initialize dynamic driver function id. + Initialize + + ''' \ref UsbK_SelectInterface dynamic driver function id. + SelectInterface + + ''' \ref UsbK_GetAssociatedInterface dynamic driver function id. + GetAssociatedInterface + + ''' \ref UsbK_Clone dynamic driver function id. + Clone + + ''' \ref UsbK_QueryInterfaceSettings dynamic driver function id. + QueryInterfaceSettings + + ''' \ref UsbK_QueryDeviceInformation dynamic driver function id. + QueryDeviceInformation + + ''' \ref UsbK_SetCurrentAlternateSetting dynamic driver function id. + SetCurrentAlternateSetting + + ''' \ref UsbK_GetCurrentAlternateSetting dynamic driver function id. + GetCurrentAlternateSetting + + ''' \ref UsbK_QueryPipe dynamic driver function id. + QueryPipe + + ''' \ref UsbK_SetPipePolicy dynamic driver function id. + SetPipePolicy + + ''' \ref UsbK_GetPipePolicy dynamic driver function id. + GetPipePolicy + + ''' \ref UsbK_ReadPipe dynamic driver function id. + ReadPipe + + ''' \ref UsbK_WritePipe dynamic driver function id. + WritePipe + + ''' \ref UsbK_ResetPipe dynamic driver function id. + ResetPipe + + ''' \ref UsbK_AbortPipe dynamic driver function id. + AbortPipe + + ''' \ref UsbK_FlushPipe dynamic driver function id. + FlushPipe + + ''' \ref UsbK_IsoReadPipe dynamic driver function id. + IsoReadPipe + + ''' \ref UsbK_IsoWritePipe dynamic driver function id. + IsoWritePipe + + ''' \ref UsbK_GetCurrentFrameNumber dynamic driver function id. + GetCurrentFrameNumber + + ''' \ref UsbK_GetOverlappedResult dynamic driver function id. + GetOverlappedResult + + ''' \ref UsbK_GetProperty dynamic driver function id. + GetProperty + + + ''' Supported function count + COUNT + End Enum + + ''' Hot plug config flags. + _ + Public Enum KHOT_FLAG + ''' No flags (or 0) + NONE + + ''' Notify all devices which match upon a succuessful call to \ref HotK_Init. + PLUG_ALL_ON_INIT = &H1 + + ''' Allow other \ref KHOT_HANDLE instances to consume this match. + PASS_DUPE_INSTANCE = &H2 + + ''' If a \c UserHwnd is specified, use \c PostMessage instead of \c SendMessage. + POST_USER_MESSAGE = &H4 + End Enum + + ''' \c WaitFlags used by \ref OvlK_Wait. + _ + Public Enum KOVL_WAIT_FLAG + ''' Do not perform any additional actions upon exiting \ref OvlK_Wait. + NONE = 0 + + ''' If the i/o operation completes successfully, release the OverlappedK back to it's pool. + RELEASE_ON_SUCCESS = &H1 + + ''' If the i/o operation fails, release the OverlappedK back to it's pool. + RELEASE_ON_FAIL = &H2 + + ''' If the i/o operation fails or completes successfully, release the OverlappedK back to its pool. Perform no actions if it times-out. + RELEASE_ON_SUCCESS_FAIL = &H3 + + ''' If the i/o operation times-out cancel it, but do not release the OverlappedK back to its pool. + CANCEL_ON_TIMEOUT = &H4 + + ''' If the i/o operation times-out, cancel it and release the OverlappedK back to its pool. + RELEASE_ON_TIMEOUT = &Hc + + ''' Always release the OverlappedK back to its pool. If the operation timed-out, cancel it before releasing back to its pool. + RELEASE_ALWAYS = &Hf + + ''' Uses alterable wait functions. See http://msdn.microsoft.com/en-us/library/windows/desktop/ms687036%28v=vs.85%29.aspx + ALERTABLE = &H10 + End Enum + + ''' \c Overlapped pool config flags. + _ + Public Enum KOVL_POOL_FLAG + NONE = 0 + End Enum + + ''' Stream config flags. + _ + Public Enum KSTM_FLAG As UInteger + ''' None + NONE = 0 + NO_PARTIAL_XFERS = &H100000 + USE_TIMEOUT = &H80000000UI + TIMEOUT_MASK = &H1ffff + End Enum + + ''' Stream config flags. + Public Enum KSTM_COMPLETE_RESULT + ''' Valid + VALID = 0 + + ''' Invalid + INVALID + End Enum + + #End Region + + #Region "Structs" + + ''' The \c WINUSB_PIPE_INFORMATION structure contains pipe information that the \ref UsbK_QueryPipe routine retrieves. + _ + Public Structure WINUSB_PIPE_INFORMATION + ''' A \c USBD_PIPE_TYPE enumeration value that specifies the pipe type + Public PipeType As USBD_PIPE_TYPE + + ''' The pipe identifier (ID) + Public PipeId As Byte + + ''' The maximum size, in bytes, of the packets that are transmitted on the pipe + Public MaximumPacketSize As UShort + + ''' The pipe interval + Public Interval As Byte + + + Public Overrides Function ToString() As String + Return String.Format("PipeType: {0}" & vbLf & "PipeId: {1}" & vbLf & "MaximumPacketSize: {2}" & vbLf & "Interval: {3}" & vbLf, PipeType, PipeId.ToString("X2") & "h", MaximumPacketSize, Interval.ToString("X2") & "h") + End Function + End Structure + + ''' The \c WINUSB_SETUP_PACKET structure describes a USB setup packet. + _ + Public Structure WINUSB_SETUP_PACKET + ''' The request type. The values that are assigned to this member are defined in Table 9.2 of section 9.3 of the Universal Serial Bus (USB) specification (www.usb.org). + Public RequestType As Byte + + ''' The device request. The values that are assigned to this member are defined in Table 9.3 of section 9.4 of the Universal Serial Bus (USB) specification. + Public Request As Byte + + ''' The meaning of this member varies according to the request. For an explanation of this member, see the Universal Serial Bus (USB) specification. + Public Value As UShort + + ''' The meaning of this member varies according to the request. For an explanation of this member, see the Universal Serial Bus (USB) specification. + Public Index As UShort + + ''' The number of bytes to transfer. (not including the \c WINUSB_SETUP_PACKET itself) + Public Length As UShort + + + Public Overrides Function ToString() As String + Return String.Format("RequestType: {0}" & vbLf & "Request: {1}" & vbLf & "Value: {2}" & vbLf & "Index: {3}" & vbLf & "Length: {4}" & vbLf, RequestType.ToString("X2") & "h", Request.ToString("X2") & "h", Value.ToString("X4") & "h", Index.ToString("X4") & "h", Length) + End Function + End Structure + + ''' Structure describing an isochronous transfer packet. + _ + Public Structure KISO_PACKET + ''' Specifies the offset, in bytes, of the buffer for this packet from the beginning of the entire isochronous transfer data buffer. + Public Offset As Integer + + ''' Set by the host controller to indicate the actual number of bytes received by the device for isochronous IN transfers. Length not used for isochronous OUT transfers. + Public Length As UShort + + ''' Contains the 16 least significant USBD status bits, on return from the host controller driver, of this transfer packet. + Public Status As UShort + + + Public Overrides Function ToString() As String + Return String.Format("Offset: {0}" & vbLf & "Length: {1}" & vbLf & "Status: {2}" & vbLf, Offset, Length, Status.ToString("X4") & "h") + End Function + End Structure + + _ + Public Structure KISO_CONTEXT + Private ReadOnly mHandlePtr As IntPtr + + Public Sub New(Handle As IntPtr) + mHandlePtr = Handle + End Sub + + Public ReadOnly Property Pointer() As IntPtr + Get + Return mHandlePtr + End Get + End Property + + ''' KISO_CONTEXT_MAP is used for calculating field offsets only + _ + Private Structure KISO_CONTEXT_MAP + ''' Additional ISO transfer flags. See \ref KISO_FLAG. + Private ReadOnly Flags As KISO_FLAG + + ''' Specifies the frame number that the transfer should begin on (0 for ASAP). + Private ReadOnly StartFrame As Integer + + ''' Contains the number of packets that completed with an error condition on return from the host controller driver. + Private ReadOnly ErrorCount As Short + + ''' Specifies the number of packets that are described by the variable-length array member \c IsoPacket. + Private ReadOnly NumberOfPackets As Short + + ''' Contains the URB Hdr.Status value on return from the host controller driver. + Private ReadOnly UrbHdrStatus As Integer + End Structure + + Private Shared ReadOnly ofsFlags As Integer = Marshal.OffsetOf(GetType(KISO_CONTEXT_MAP), "Flags").ToInt32() + Private Shared ReadOnly ofsStartFrame As Integer = Marshal.OffsetOf(GetType(KISO_CONTEXT_MAP), "StartFrame").ToInt32() + Private Shared ReadOnly ofsErrorCount As Integer = Marshal.OffsetOf(GetType(KISO_CONTEXT_MAP), "ErrorCount").ToInt32() + Private Shared ReadOnly ofsNumberOfPackets As Integer = Marshal.OffsetOf(GetType(KISO_CONTEXT_MAP), "NumberOfPackets").ToInt32() + Private Shared ReadOnly ofsUrbHdrStatus As Integer = Marshal.OffsetOf(GetType(KISO_CONTEXT_MAP), "UrbHdrStatus").ToInt32() + + + ''' Additional ISO transfer flags. See \ref KISO_FLAG. + Public ReadOnly Property Flags() As KISO_FLAG + Get + Return CType(Marshal.ReadInt32(mHandlePtr, ofsFlags), KISO_FLAG) + End Get + End Property + + + ''' Specifies the frame number that the transfer should begin on (0 for ASAP). + Public ReadOnly Property StartFrame() As Integer + Get + Return Marshal.ReadInt32(mHandlePtr, ofsStartFrame) + End Get + End Property + + + ''' Contains the number of packets that completed with an error condition on return from the host controller driver. + Public ReadOnly Property ErrorCount() As Short + Get + Return Marshal.ReadInt16(mHandlePtr, ofsErrorCount) + End Get + End Property + + + ''' Specifies the number of packets that are described by the variable-length array member \c IsoPacket. + Public ReadOnly Property NumberOfPackets() As Short + Get + Return Marshal.ReadInt16(mHandlePtr, ofsNumberOfPackets) + End Get + End Property + + + ''' Contains the URB Hdr.Status value on return from the host controller driver. + Public ReadOnly Property UrbHdrStatus() As Integer + Get + Return Marshal.ReadInt32(mHandlePtr, ofsUrbHdrStatus) + End Get + End Property + + + Public Overrides Function ToString() As String + Return String.Format("Flags: {0}" & vbLf & "StartFrame: {1}" & vbLf & "ErrorCount: {2}" & vbLf & "NumberOfPackets: {3}" & vbLf & "UrbHdrStatus: {4}" & vbLf, Flags.ToString(), StartFrame, ErrorCount, NumberOfPackets, UrbHdrStatus.ToString("X8") & "h") + End Function + End Structure + + ''' libusbK verson information structure. + _ + Public Structure KLIB_VERSION + ''' Major version number. + Public Major As Integer + + ''' Minor version number. + Public Minor As Integer + + ''' Micro version number. + Public Micro As Integer + + ''' Nano version number. + Public Nano As Integer + + Public Overrides Function ToString() As String + Return String.Format("Major: {0}" & vbLf & "Minor: {1}" & vbLf & "Micro: {2}" & vbLf & "Nano: {3}" & vbLf, Major, Minor, Micro, Nano) + End Function + End Structure + + ''' Common usb device information structure + _ + Public Structure KLST_DEV_COMMON_INFO + ''' VendorID parsed from \ref KLST_DEVINFO::DeviceID + Public Vid As Integer + + ''' ProductID parsed from \ref KLST_DEVINFO::DeviceID + Public Pid As Integer + + ''' Composite interface number parsed from \ref KLST_DEVINFO::DeviceID. Set to \b -1 for devices that do not have the composite parent driver. + Public MI As Integer + + ' An ID that uniquely identifies a USB device. + _ + Public InstanceID As String + + + Public Overrides Function ToString() As String + Return String.Format("Vid: {0}" & vbLf & "Pid: {1}" & vbLf & "MI: {2}" & vbLf & "InstanceID: {3}" & vbLf, Vid.ToString("X4") & "h", Pid.ToString("X4") & "h", MI.ToString("X2") & "h", InstanceID) + End Function + End Structure + + _ + Public Structure KLST_DEVINFO_HANDLE + Implements IKLIB_HANDLE + Private ReadOnly mHandlePtr As IntPtr + + Public Sub New(Handle As IntPtr) + mHandlePtr = Handle + End Sub + + Public ReadOnly Property Pointer() As IntPtr Implements IKLIB_HANDLE.Pointer + Get + Return mHandlePtr + End Get + End Property + + Public ReadOnly Property HandleType() As KLIB_HANDLE_TYPE Implements IKLIB_HANDLE.HandleType + Get + Return KLIB_HANDLE_TYPE.LSTINFOK + End Get + End Property + + Public Function GetContext() As IntPtr Implements IKLIB_HANDLE.GetContext + Return AllKFunctions.LibK_GetContext(mHandlePtr, HandleType) + End Function + + Public Function SetContext(UserContext As IntPtr) As Boolean Implements IKLIB_HANDLE.SetContext + Return AllKFunctions.LibK_SetContext(mHandlePtr, HandleType, UserContext) + End Function + + Public Function SetCleanupCallback(CleanupCallback As KLIB_HANDLE_CLEANUP_CB) As Boolean Implements IKLIB_HANDLE.SetCleanupCallback + Return AllKFunctions.LibK_SetCleanupCallback(mHandlePtr, HandleType, CleanupCallback) + End Function + + ''' KLST_DEVINFO_MAP is used for calculating field offsets only + _ + Private Structure KLST_DEVINFO_MAP + ''' Common usb device information + Private ReadOnly Common As KLST_DEV_COMMON_INFO + + ''' Driver id this device element is using + Private ReadOnly DriverID As Integer + + ''' Device interface GUID + _ + Private ReadOnly DeviceInterfaceGUID As String + + ''' Device instance ID. + _ + Private ReadOnly DeviceID As String + + ''' Class GUID. + _ + Private ReadOnly ClassGUID As String + + ''' Manufacturer name as specified in the INF file. + _ + Private ReadOnly Mfg As String + + ''' Device description as specified in the INF file. + _ + Private ReadOnly DeviceDesc As String + + ''' Driver service name. + _ + Private ReadOnly Service As String + + ''' Unique identifier. + _ + Private ReadOnly SymbolicLink As String + + ''' physical device filename used with the Windows \c CreateFile() + _ + Private ReadOnly DevicePath As String + + ''' libusb-win32 filter index id. + Private ReadOnly LUsb0FilterIndex As Integer + + ''' Indicates the devices connection state. + Private ReadOnly Connected As Boolean + + ''' Synchronization flags. (internal use only) + Private ReadOnly SyncFlags As KLST_SYNC_FLAG + + Private ReadOnly BusNumber As Integer + + Private ReadOnly DeviceAddress As Integer + + ''' If the the device is serialized, represents the string value of \ref USB_DEVICE_DESCRIPTOR::iSerialNumber. For Devices without a \b iSerialNumber, represents the unique \b InstanceID assigned by \b Windows. + _ + Private ReadOnly SerialNumber As String + End Structure + + Private Shared ReadOnly ofsCommon As Integer = Marshal.OffsetOf(GetType(KLST_DEVINFO_MAP), "Common").ToInt32() + Private Shared ReadOnly ofsDriverID As Integer = Marshal.OffsetOf(GetType(KLST_DEVINFO_MAP), "DriverID").ToInt32() + Private Shared ReadOnly ofsDeviceInterfaceGUID As Integer = Marshal.OffsetOf(GetType(KLST_DEVINFO_MAP), "DeviceInterfaceGUID").ToInt32() + Private Shared ReadOnly ofsDeviceID As Integer = Marshal.OffsetOf(GetType(KLST_DEVINFO_MAP), "DeviceID").ToInt32() + Private Shared ReadOnly ofsClassGUID As Integer = Marshal.OffsetOf(GetType(KLST_DEVINFO_MAP), "ClassGUID").ToInt32() + Private Shared ReadOnly ofsMfg As Integer = Marshal.OffsetOf(GetType(KLST_DEVINFO_MAP), "Mfg").ToInt32() + Private Shared ReadOnly ofsDeviceDesc As Integer = Marshal.OffsetOf(GetType(KLST_DEVINFO_MAP), "DeviceDesc").ToInt32() + Private Shared ReadOnly ofsService As Integer = Marshal.OffsetOf(GetType(KLST_DEVINFO_MAP), "Service").ToInt32() + Private Shared ReadOnly ofsSymbolicLink As Integer = Marshal.OffsetOf(GetType(KLST_DEVINFO_MAP), "SymbolicLink").ToInt32() + Private Shared ReadOnly ofsDevicePath As Integer = Marshal.OffsetOf(GetType(KLST_DEVINFO_MAP), "DevicePath").ToInt32() + Private Shared ReadOnly ofsLUsb0FilterIndex As Integer = Marshal.OffsetOf(GetType(KLST_DEVINFO_MAP), "LUsb0FilterIndex").ToInt32() + Private Shared ReadOnly ofsConnected As Integer = Marshal.OffsetOf(GetType(KLST_DEVINFO_MAP), "Connected").ToInt32() + Private Shared ReadOnly ofsSyncFlags As Integer = Marshal.OffsetOf(GetType(KLST_DEVINFO_MAP), "SyncFlags").ToInt32() + Private Shared ReadOnly ofsBusNumber As Integer = Marshal.OffsetOf(GetType(KLST_DEVINFO_MAP), "BusNumber").ToInt32() + Private Shared ReadOnly ofsDeviceAddress As Integer = Marshal.OffsetOf(GetType(KLST_DEVINFO_MAP), "DeviceAddress").ToInt32() + Private Shared ReadOnly ofsSerialNumber As Integer = Marshal.OffsetOf(GetType(KLST_DEVINFO_MAP), "SerialNumber").ToInt32() + + + ''' Common usb device information + Public ReadOnly Property Common() As KLST_DEV_COMMON_INFO + Get + Return CType(Marshal.PtrToStructure(New IntPtr(mHandlePtr.ToInt64() + ofsCommon), GetType(KLST_DEV_COMMON_INFO)), KLST_DEV_COMMON_INFO) + End Get + End Property + + + ''' Driver id this device element is using + Public ReadOnly Property DriverID() As Integer + Get + Return Marshal.ReadInt32(mHandlePtr, ofsDriverID) + End Get + End Property + + + ''' Device interface GUID + Public ReadOnly Property DeviceInterfaceGUID() As String + Get + Return Marshal.PtrToStringAnsi(New IntPtr(mHandlePtr.ToInt64() + ofsDeviceInterfaceGUID)) + End Get + End Property + + + ''' Device instance ID. + Public ReadOnly Property DeviceID() As String + Get + Return Marshal.PtrToStringAnsi(New IntPtr(mHandlePtr.ToInt64() + ofsDeviceID)) + End Get + End Property + + + ''' Class GUID. + Public ReadOnly Property ClassGUID() As String + Get + Return Marshal.PtrToStringAnsi(New IntPtr(mHandlePtr.ToInt64() + ofsClassGUID)) + End Get + End Property + + + ''' Manufacturer name as specified in the INF file. + Public ReadOnly Property Mfg() As String + Get + Return Marshal.PtrToStringAnsi(New IntPtr(mHandlePtr.ToInt64() + ofsMfg)) + End Get + End Property + + + ''' Device description as specified in the INF file. + Public ReadOnly Property DeviceDesc() As String + Get + Return Marshal.PtrToStringAnsi(New IntPtr(mHandlePtr.ToInt64() + ofsDeviceDesc)) + End Get + End Property + + + ''' Driver service name. + Public ReadOnly Property Service() As String + Get + Return Marshal.PtrToStringAnsi(New IntPtr(mHandlePtr.ToInt64() + ofsService)) + End Get + End Property + + + ''' Unique identifier. + Public ReadOnly Property SymbolicLink() As String + Get + Return Marshal.PtrToStringAnsi(New IntPtr(mHandlePtr.ToInt64() + ofsSymbolicLink)) + End Get + End Property + + + ''' physical device filename used with the Windows \c CreateFile() + Public ReadOnly Property DevicePath() As String + Get + Return Marshal.PtrToStringAnsi(New IntPtr(mHandlePtr.ToInt64() + ofsDevicePath)) + End Get + End Property + + + ''' libusb-win32 filter index id. + Public ReadOnly Property LUsb0FilterIndex() As Integer + Get + Return Marshal.ReadInt32(mHandlePtr, ofsLUsb0FilterIndex) + End Get + End Property + + + ''' Indicates the devices connection state. + Public ReadOnly Property Connected() As Boolean + Get + Return Marshal.ReadInt32(mHandlePtr, ofsConnected) <> 0 + End Get + End Property + + + ''' Synchronization flags. (internal use only) + Public ReadOnly Property SyncFlags() As KLST_SYNC_FLAG + Get + Return CType(Marshal.ReadInt32(mHandlePtr, ofsSyncFlags), KLST_SYNC_FLAG) + End Get + End Property + + + Public ReadOnly Property BusNumber() As Integer + Get + Return Marshal.ReadInt32(mHandlePtr, ofsBusNumber) + End Get + End Property + + + Public ReadOnly Property DeviceAddress() As Integer + Get + Return Marshal.ReadInt32(mHandlePtr, ofsDeviceAddress) + End Get + End Property + + + ''' If the the device is serialized, represents the string value of \ref USB_DEVICE_DESCRIPTOR::iSerialNumber. For Devices without a \b iSerialNumber, represents the unique \b InstanceID assigned by \b Windows. + Public ReadOnly Property SerialNumber() As String + Get + Return Marshal.PtrToStringAnsi(New IntPtr(mHandlePtr.ToInt64() + ofsSerialNumber)) + End Get + End Property + + + Public Overrides Function ToString() As String + Return String.Format("DriverID: {0}" & vbLf & "DeviceInterfaceGUID: {1}" & vbLf & "DeviceID: {2}" & vbLf & "ClassGUID: {3}" & vbLf & "Mfg: {4}" & vbLf & "DeviceDesc: {5}" & vbLf & "Service: {6}" & vbLf & "SymbolicLink: {7}" & vbLf & "DevicePath: {8}" & vbLf & "LUsb0FilterIndex: {9}" & vbLf & "Connected: {10}" & vbLf & "SyncFlags: {11}" & vbLf & "BusNumber: {12}" & vbLf & "DeviceAddress: {13}" & vbLf & "SerialNumber: {14}" & vbLf, DriverID, DeviceInterfaceGUID, DeviceID, ClassGUID, Mfg, _ + DeviceDesc, Service, SymbolicLink, DevicePath, LUsb0FilterIndex, Connected, _ + SyncFlags.ToString(), BusNumber, DeviceAddress, SerialNumber) + End Function + End Structure + + ''' Device list/hot-plug pattern match structure. + _ + Public Structure KLST_PATTERN_MATCH + ''' Pattern match a device instance id. + _ + Public DeviceID As String + + ''' Pattern match a device interface guid. + _ + Public DeviceInterfaceGUID As String + + ''' Pattern match a symbolic link. + _ + Public ClassGUID As String + + + Public Overrides Function ToString() As String + Return String.Format("DeviceID: {0}" & vbLf & "DeviceInterfaceGUID: {1}" & vbLf & "ClassGUID: {2}" & vbLf, DeviceID, DeviceInterfaceGUID, ClassGUID) + End Function + End Structure + + ''' A structure representing the standard USB device descriptor. + _ + Public Structure USB_DEVICE_DESCRIPTOR + ''' Size of this descriptor (in bytes) + Public bLength As Byte + + ''' Descriptor type + Public bDescriptorType As Byte + + ''' USB specification release number in binary-coded decimal. + Public bcdUSB As UShort + + ''' USB-IF class code for the device + Public bDeviceClass As Byte + + ''' USB-IF subclass code for the device + Public bDeviceSubClass As Byte + + ''' USB-IF protocol code for the device + Public bDeviceProtocol As Byte + + ''' Maximum packet size for control endpoint 0 + Public bMaxPacketSize0 As Byte + + ''' USB-IF vendor ID + Public idVendor As UShort + + ''' USB-IF product ID + Public idProduct As UShort + + ''' Device release number in binary-coded decimal + Public bcdDevice As UShort + + ''' Index of string descriptor describing manufacturer + Public iManufacturer As Byte + + ''' Index of string descriptor describing product + Public iProduct As Byte + + ''' Index of string descriptor containing device serial number + Public iSerialNumber As Byte + + ''' Number of possible configurations + Public bNumConfigurations As Byte + + + Public Overrides Function ToString() As String + Return String.Format("bLength: {0}" & vbLf & "bDescriptorType: {1}" & vbLf & "bcdUSB: {2}" & vbLf & "bDeviceClass: {3}" & vbLf & "bDeviceSubClass: {4}" & vbLf & "bDeviceProtocol: {5}" & vbLf & "bMaxPacketSize0: {6}" & vbLf & "idVendor: {7}" & vbLf & "idProduct: {8}" & vbLf & "bcdDevice: {9}" & vbLf & "iManufacturer: {10}" & vbLf & "iProduct: {11}" & vbLf & "iSerialNumber: {12}" & vbLf & "bNumConfigurations: {13}" & vbLf, bLength, bDescriptorType.ToString("X2") & "h", bcdUSB.ToString("X4") & "h", bDeviceClass.ToString("X2") & "h", bDeviceSubClass.ToString("X2") & "h", _ + bDeviceProtocol.ToString("X2") & "h", bMaxPacketSize0, idVendor.ToString("X4") & "h", idProduct.ToString("X4") & "h", bcdDevice.ToString("X4") & "h", iManufacturer, _ + iProduct, iSerialNumber, bNumConfigurations) + End Function + End Structure + + ''' A structure representing the standard USB endpoint descriptor. + _ + Public Structure USB_ENDPOINT_DESCRIPTOR + ''' Size of this descriptor (in bytes) + Public bLength As Byte + + ''' Descriptor type + Public bDescriptorType As Byte + + ''' The address of the endpoint described by this descriptor. + Public bEndpointAddress As Byte + + ''' Attributes which apply to the endpoint when it is configured using the bConfigurationValue. + Public bmAttributes As Byte + + ''' Maximum packet size this endpoint is capable of sending/receiving. + Public wMaxPacketSize As UShort + + ''' Interval for polling endpoint for data transfers. + Public bInterval As Byte + + + Public Overrides Function ToString() As String + Return String.Format("bLength: {0}" & vbLf & "bDescriptorType: {1}" & vbLf & "bEndpointAddress: {2}" & vbLf & "bmAttributes: {3}" & vbLf & "wMaxPacketSize: {4}" & vbLf & "bInterval: {5}" & vbLf, bLength, bDescriptorType.ToString("X2") & "h", bEndpointAddress.ToString("X2") & "h", bmAttributes.ToString("X2") & "h", wMaxPacketSize, _ + bInterval) + End Function + End Structure + + ''' A structure representing the standard USB configuration descriptor. + _ + Public Structure USB_CONFIGURATION_DESCRIPTOR + ''' Size of this descriptor (in bytes) + Public bLength As Byte + + ''' Descriptor type + Public bDescriptorType As Byte + + ''' Total length of data returned for this configuration + Public wTotalLength As UShort + + ''' Number of interfaces supported by this configuration + Public bNumInterfaces As Byte + + ''' Identifier value for this configuration + Public bConfigurationValue As Byte + + ''' Index of string descriptor describing this configuration + Public iConfiguration As Byte + + ''' Configuration characteristics + Public bmAttributes As Byte + + ''' Maximum power consumption of the USB device from this bus in this configuration when the device is fully operation. + Public MaxPower As Byte + + Public Overrides Function ToString() As String + Return String.Format("bLength: {0}" & vbLf & "bDescriptorType: {1}" & vbLf & "wTotalLength: {2}" & vbLf & "bNumInterfaces: {3}" & vbLf & "bConfigurationValue: {4}" & vbLf & "iConfiguration: {5}" & vbLf & "bmAttributes: {6}" & vbLf & "MaxPower: {7}" & vbLf, bLength, bDescriptorType.ToString("X2") & "h", wTotalLength, bNumInterfaces, bConfigurationValue, _ + iConfiguration, bmAttributes.ToString("X2") & "h", MaxPower) + End Function + End Structure + + ''' A structure representing the standard USB interface descriptor. + _ + Public Structure USB_INTERFACE_DESCRIPTOR + ''' Size of this descriptor (in bytes) + Public bLength As Byte + + ''' Descriptor type + Public bDescriptorType As Byte + + ''' Number of this interface + Public bInterfaceNumber As Byte + + ''' Value used to select this alternate setting for this interface + Public bAlternateSetting As Byte + + ''' Number of endpoints used by this interface (excluding the control endpoint) + Public bNumEndpoints As Byte + + ''' USB-IF class code for this interface + Public bInterfaceClass As Byte + + ''' USB-IF subclass code for this interface + Public bInterfaceSubClass As Byte + + ''' USB-IF protocol code for this interface + Public bInterfaceProtocol As Byte + + ''' Index of string descriptor describing this interface + Public iInterface As Byte + + + Public Overrides Function ToString() As String + Return String.Format("bLength: {0}" & vbLf & "bDescriptorType: {1}" & vbLf & "bInterfaceNumber: {2}" & vbLf & "bAlternateSetting: {3}" & vbLf & "bNumEndpoints: {4}" & vbLf & "bInterfaceClass: {5}" & vbLf & "bInterfaceSubClass: {6}" & vbLf & "bInterfaceProtocol: {7}" & vbLf & "iInterface: {8}" & vbLf, bLength, bDescriptorType.ToString("X2") & "h", bInterfaceNumber, bAlternateSetting, bNumEndpoints, _ + bInterfaceClass.ToString("X2") & "h", bInterfaceSubClass.ToString("X2") & "h", bInterfaceProtocol.ToString("X2") & "h", iInterface) + End Function + End Structure + + ''' A structure representing the standard USB string descriptor. + _ + Public Structure USB_STRING_DESCRIPTOR + ''' Size of this descriptor (in bytes) + Public bLength As Byte + + ''' Descriptor type + Public bDescriptorType As Byte + + ''' Content of the string + _ + Public bString As String + + + Public Overrides Function ToString() As String + Return String.Format("bLength: {0}" & vbLf & "bDescriptorType: {1}" & vbLf & "bString: {2}" & vbLf, bLength, bDescriptorType.ToString("X2") & "h", bString) + End Function + End Structure + + ''' A structure representing the common USB descriptor. + _ + Public Structure USB_COMMON_DESCRIPTOR + ''' Size of this descriptor (in bytes) + Public bLength As Byte + + ''' Descriptor type + Public bDescriptorType As Byte + + + Public Overrides Function ToString() As String + Return String.Format("bLength: {0}" & vbLf & "bDescriptorType: {1}" & vbLf, bLength, bDescriptorType.ToString("X2") & "h") + End Function + End Structure + + ''' Allows hardware manufacturers to define groupings of interfaces. + _ + Public Structure USB_INTERFACE_ASSOCIATION_DESCRIPTOR + ''' Size of this descriptor (in bytes) + Public bLength As Byte + + ''' Descriptor type + Public bDescriptorType As Byte + + ''' First interface number of the set of interfaces that follow this descriptor + Public bFirstInterface As Byte + + ''' The Number of interfaces follow this descriptor that are considered "associated" + Public bInterfaceCount As Byte + + ''' \c bInterfaceClass used for this associated interfaces + Public bFunctionClass As Byte + + ''' \c bInterfaceSubClass used for the associated interfaces + Public bFunctionSubClass As Byte + + ''' \c bInterfaceProtocol used for the associated interfaces + Public bFunctionProtocol As Byte + + ''' Index of string descriptor describing the associated interfaces + Public iFunction As Byte + + + Public Overrides Function ToString() As String + Return String.Format("bLength: {0}" & vbLf & "bDescriptorType: {1}" & vbLf & "bFirstInterface: {2}" & vbLf & "bInterfaceCount: {3}" & vbLf & "bFunctionClass: {4}" & vbLf & "bFunctionSubClass: {5}" & vbLf & "bFunctionProtocol: {6}" & vbLf & "iFunction: {7}" & vbLf, bLength, bDescriptorType.ToString("X2") & "h", bFirstInterface, bInterfaceCount, bFunctionClass.ToString("X2") & "h", _ + bFunctionSubClass.ToString("X2") & "h", bFunctionProtocol.ToString("X2") & "h", iFunction) + End Function + End Structure + + ''' USB core driver API information structure. + _ + Public Structure KUSB_DRIVER_API_INFO + ''' \readonly Driver id of the driver api. + Public DriverID As Integer + + ''' \readonly Number of valid functions contained in the driver API. + Public FunctionCount As Integer + + + Public Overrides Function ToString() As String + Return String.Format("DriverID: {0}" & vbLf & "FunctionCount: {1}" & vbLf, DriverID, FunctionCount) + End Function + End Structure + + ''' Driver API function set structure. + _ + Public Structure KUSB_DRIVER_API + ''' Driver API information. + Public Info As KUSB_DRIVER_API_INFO + + + _ + Public Init As KUSB_InitDelegate + + + _ + Public Free As KUSB_FreeDelegate + + + _ + Public ClaimInterface As KUSB_ClaimInterfaceDelegate + + + _ + Public ReleaseInterface As KUSB_ReleaseInterfaceDelegate + + + _ + Public SetAltInterface As KUSB_SetAltInterfaceDelegate + + + _ + Public GetAltInterface As KUSB_GetAltInterfaceDelegate + + + _ + Public GetDescriptor As KUSB_GetDescriptorDelegate + + + _ + Public ControlTransfer As KUSB_ControlTransferDelegate + + + _ + Public SetPowerPolicy As KUSB_SetPowerPolicyDelegate + + + _ + Public GetPowerPolicy As KUSB_GetPowerPolicyDelegate + + + _ + Public SetConfiguration As KUSB_SetConfigurationDelegate + + + _ + Public GetConfiguration As KUSB_GetConfigurationDelegate + + + _ + Public ResetDevice As KUSB_ResetDeviceDelegate + + + _ + Public Initialize As KUSB_InitializeDelegate + + + _ + Public SelectInterface As KUSB_SelectInterfaceDelegate + + + _ + Public GetAssociatedInterface As KUSB_GetAssociatedInterfaceDelegate + + + _ + Public Clone As KUSB_CloneDelegate + + + _ + Public QueryInterfaceSettings As KUSB_QueryInterfaceSettingsDelegate + + + _ + Public QueryDeviceInformation As KUSB_QueryDeviceInformationDelegate + + + _ + Public SetCurrentAlternateSetting As KUSB_SetCurrentAlternateSettingDelegate + + + _ + Public GetCurrentAlternateSetting As KUSB_GetCurrentAlternateSettingDelegate + + + _ + Public QueryPipe As KUSB_QueryPipeDelegate + + + _ + Public SetPipePolicy As KUSB_SetPipePolicyDelegate + + + _ + Public GetPipePolicy As KUSB_GetPipePolicyDelegate + + + _ + Public ReadPipe As KUSB_ReadPipeDelegate + + + _ + Public WritePipe As KUSB_WritePipeDelegate + + + _ + Public ResetPipe As KUSB_ResetPipeDelegate + + + _ + Public AbortPipe As KUSB_AbortPipeDelegate + + + _ + Public FlushPipe As KUSB_FlushPipeDelegate + + + _ + Public IsoReadPipe As KUSB_IsoReadPipeDelegate + + + _ + Public IsoWritePipe As KUSB_IsoWritePipeDelegate + + + _ + Public GetCurrentFrameNumber As KUSB_GetCurrentFrameNumberDelegate + + + _ + Public GetOverlappedResult As KUSB_GetOverlappedResultDelegate + + + _ + Public GetProperty As KUSB_GetPropertyDelegate + End Structure + + ''' Hot plug parameter structure. + _ + Public Structure KHOT_PARAMS + ''' Hot plug event window handle to send/post messages when notifications occur. + Public UserHwnd As IntPtr + + ''' WM_USER message start offset used when sending/posting messages, See details. + Public UserMessage As Integer + + ''' Additional init/config parameters + Public Flags As KHOT_FLAG + + ''' File pattern matches for restricting notifcations to a single/group or all supported usb devices. + Public PatternMatch As KLST_PATTERN_MATCH + + ''' Hot plug event callback function invoked when notifications occur. + _ + Public OnHotPlug As KHOT_PLUG_CB + + + Public Overrides Function ToString() As String + Return String.Format("UserHwnd: {0}" & vbLf & "UserMessage: {1}" & vbLf & "Flags: {2}" & vbLf, UserHwnd.ToString("X16") & "h", UserMessage.ToString("X8") & "h", Flags.ToString()) + End Function + End Structure + + _ + Public Structure KSTM_XFER_CONTEXT + Private ReadOnly mHandlePtr As IntPtr + + Public Sub New(Handle As IntPtr) + mHandlePtr = Handle + End Sub + + Public ReadOnly Property Pointer() As IntPtr + Get + Return mHandlePtr + End Get + End Property + + ''' KSTM_XFER_CONTEXT_MAP is used for calculating field offsets only + _ + Private Structure KSTM_XFER_CONTEXT_MAP + ''' Internal stream buffer. + Private ReadOnly Buffer As IntPtr + + ''' Size of internal stream buffer. + Private ReadOnly BufferSize As Integer + + ''' Number of bytes to write or number of bytes read. + Private ReadOnly TransferLength As Integer + + ''' User defined state. + Private ReadOnly UserState As IntPtr + End Structure + + Private Shared ReadOnly ofsBuffer As Integer = Marshal.OffsetOf(GetType(KSTM_XFER_CONTEXT_MAP), "Buffer").ToInt32() + Private Shared ReadOnly ofsBufferSize As Integer = Marshal.OffsetOf(GetType(KSTM_XFER_CONTEXT_MAP), "BufferSize").ToInt32() + Private Shared ReadOnly ofsTransferLength As Integer = Marshal.OffsetOf(GetType(KSTM_XFER_CONTEXT_MAP), "TransferLength").ToInt32() + Private Shared ReadOnly ofsUserState As Integer = Marshal.OffsetOf(GetType(KSTM_XFER_CONTEXT_MAP), "UserState").ToInt32() + + + ''' Internal stream buffer. + Public ReadOnly Property Buffer() As IntPtr + Get + Return Marshal.ReadIntPtr(mHandlePtr, ofsBuffer) + End Get + End Property + + + ''' Size of internal stream buffer. + Public ReadOnly Property BufferSize() As Integer + Get + Return Marshal.ReadInt32(mHandlePtr, ofsBufferSize) + End Get + End Property + + + ''' Number of bytes to write or number of bytes read. + Public ReadOnly Property TransferLength() As Integer + Get + Return Marshal.ReadInt32(mHandlePtr, ofsTransferLength) + End Get + End Property + + + ''' User defined state. + Public Property UserState() As IntPtr + Get + Return Marshal.ReadIntPtr(mHandlePtr, ofsUserState) + End Get + Set + Marshal.WriteIntPtr(mHandlePtr, ofsUserState, value) + End Set + End Property + + + Public Overrides Function ToString() As String + Return String.Format("Buffer: {0}" & vbLf & "BufferSize: {1}" & vbLf & "TransferLength: {2}" & vbLf & "UserState: {3}" & vbLf, Buffer.ToString("X16") & "h", BufferSize, TransferLength, UserState.ToString("X16") & "h") + End Function + End Structure + + _ + Public Structure KSTM_INFO + Private ReadOnly mHandlePtr As IntPtr + + Public Sub New(Handle As IntPtr) + mHandlePtr = Handle + End Sub + + Public ReadOnly Property Pointer() As IntPtr + Get + Return mHandlePtr + End Get + End Property + + ''' KSTM_INFO_MAP is used for calculating field offsets only + _ + Private Structure KSTM_INFO_MAP + ''' \ref KUSB_HANDLE this stream uses. + Private ReadOnly UsbHandle As IntPtr + + ''' This parameter corresponds to the bEndpointAddress field in the endpoint descriptor. + Private ReadOnly PipeID As Byte + + ''' Maximum transfer read/write request allowed pending. + Private ReadOnly MaxPendingTransfers As Integer + + ''' Maximum transfer sage size. + Private ReadOnly MaxTransferSize As Integer + + ''' Maximum number of I/O request allowed pending. + Private ReadOnly MaxPendingIO As Integer + + ''' Populated with the endpoint descriptor for the specified \c PipeID. + Private ReadOnly EndpointDescriptor As USB_ENDPOINT_DESCRIPTOR + + ''' Populated with the driver api for the specified \c UsbHandle. + Private ReadOnly DriverAPI As KUSB_DRIVER_API + + ''' Populated with the device file handle for the specified \c UsbHandle. + Private ReadOnly DeviceHandle As IntPtr + + ''' Stream handle. + Private ReadOnly StreamHandle As IntPtr + + ''' Stream info user defined state. + Private ReadOnly UserState As IntPtr + End Structure + + Private Shared ReadOnly ofsUsbHandle As Integer = Marshal.OffsetOf(GetType(KSTM_INFO_MAP), "UsbHandle").ToInt32() + Private Shared ReadOnly ofsPipeID As Integer = Marshal.OffsetOf(GetType(KSTM_INFO_MAP), "PipeID").ToInt32() + Private Shared ReadOnly ofsMaxPendingTransfers As Integer = Marshal.OffsetOf(GetType(KSTM_INFO_MAP), "MaxPendingTransfers").ToInt32() + Private Shared ReadOnly ofsMaxTransferSize As Integer = Marshal.OffsetOf(GetType(KSTM_INFO_MAP), "MaxTransferSize").ToInt32() + Private Shared ReadOnly ofsMaxPendingIO As Integer = Marshal.OffsetOf(GetType(KSTM_INFO_MAP), "MaxPendingIO").ToInt32() + Private Shared ReadOnly ofsEndpointDescriptor As Integer = Marshal.OffsetOf(GetType(KSTM_INFO_MAP), "EndpointDescriptor").ToInt32() + Private Shared ReadOnly ofsDriverAPI As Integer = Marshal.OffsetOf(GetType(KSTM_INFO_MAP), "DriverAPI").ToInt32() + Private Shared ReadOnly ofsDeviceHandle As Integer = Marshal.OffsetOf(GetType(KSTM_INFO_MAP), "DeviceHandle").ToInt32() + Private Shared ReadOnly ofsStreamHandle As Integer = Marshal.OffsetOf(GetType(KSTM_INFO_MAP), "StreamHandle").ToInt32() + Private Shared ReadOnly ofsUserState As Integer = Marshal.OffsetOf(GetType(KSTM_INFO_MAP), "UserState").ToInt32() + + + ''' \ref KUSB_HANDLE this stream uses. + Public ReadOnly Property UsbHandle() As IntPtr + Get + Return Marshal.ReadIntPtr(mHandlePtr, ofsUsbHandle) + End Get + End Property + + + ''' This parameter corresponds to the bEndpointAddress field in the endpoint descriptor. + Public ReadOnly Property PipeID() As Byte + Get + Return Marshal.ReadByte(mHandlePtr, ofsPipeID) + End Get + End Property + + + ''' Maximum transfer read/write request allowed pending. + Public ReadOnly Property MaxPendingTransfers() As Integer + Get + Return Marshal.ReadInt32(mHandlePtr, ofsMaxPendingTransfers) + End Get + End Property + + + ''' Maximum transfer sage size. + Public ReadOnly Property MaxTransferSize() As Integer + Get + Return Marshal.ReadInt32(mHandlePtr, ofsMaxTransferSize) + End Get + End Property + + + ''' Maximum number of I/O request allowed pending. + Public ReadOnly Property MaxPendingIO() As Integer + Get + Return Marshal.ReadInt32(mHandlePtr, ofsMaxPendingIO) + End Get + End Property + + + ''' Populated with the endpoint descriptor for the specified \c PipeID. + Public ReadOnly Property EndpointDescriptor() As USB_ENDPOINT_DESCRIPTOR + Get + Return CType(Marshal.PtrToStructure(New IntPtr(mHandlePtr.ToInt64() + ofsEndpointDescriptor), GetType(USB_ENDPOINT_DESCRIPTOR)), USB_ENDPOINT_DESCRIPTOR) + End Get + End Property + + + ''' Populated with the driver api for the specified \c UsbHandle. + Public ReadOnly Property DriverAPI() As KUSB_DRIVER_API + Get + Return CType(Marshal.PtrToStructure(New IntPtr(mHandlePtr.ToInt64() + ofsDriverAPI), GetType(KUSB_DRIVER_API)), KUSB_DRIVER_API) + End Get + End Property + + + ''' Populated with the device file handle for the specified \c UsbHandle. + Public ReadOnly Property DeviceHandle() As IntPtr + Get + Return Marshal.ReadIntPtr(mHandlePtr, ofsDeviceHandle) + End Get + End Property + + + ''' Stream handle. + Public ReadOnly Property StreamHandle() As IntPtr + Get + Return Marshal.ReadIntPtr(mHandlePtr, ofsStreamHandle) + End Get + End Property + + + ''' Stream info user defined state. + Public Property UserState() As IntPtr + Get + Return Marshal.ReadIntPtr(mHandlePtr, ofsUserState) + End Get + Set + Marshal.WriteIntPtr(mHandlePtr, ofsUserState, value) + End Set + End Property + + + Public Overrides Function ToString() As String + Return String.Format("UsbHandle: {0}" & vbLf & "PipeID: {1}" & vbLf & "MaxPendingTransfers: {2}" & vbLf & "MaxTransferSize: {3}" & vbLf & "MaxPendingIO: {4}" & vbLf & "DeviceHandle: {5}" & vbLf & "StreamHandle: {6}" & vbLf & "UserState: {7}" & vbLf, UsbHandle.ToString("X16") & "h", PipeID.ToString("X2") & "h", MaxPendingTransfers, MaxTransferSize, MaxPendingIO, _ + DeviceHandle.ToString("X16") & "h", StreamHandle.ToString("X16") & "h", UserState.ToString("X16") & "h") + End Function + End Structure + + ''' Stream callback structure. + _ + Public Structure KSTM_CALLBACK + ''' Executed when a transfer error occurs. + _ + Public [Error] As KSTM_ERROR_CB + + ''' Executed to submit a transfer. + _ + Public Submit As KSTM_SUBMIT_CB + + ''' Executed when a valid transfer completes. + _ + Public Complete As KSTM_COMPLETE_CB + + ''' Executed for every transfer context when the stream is started with \ref StmK_Start. + _ + Public Started As KSTM_STARTED_CB + + ''' Executed for every transfer context when the stream is stopped with \ref StmK_Stop. + _ + Public Stopped As KSTM_STOPPED_CB + + ''' Executed immediately after a transfer completes. + _ + Public BeforeComplete As KSTM_BEFORE_COMPLETE_CB + End Structure + + #End Region + + #Region "Delegates" + + _ + Public Delegate Function KLIB_HANDLE_CLEANUP_CB(<[In]> Handle As IntPtr, HandleType As KLIB_HANDLE_TYPE, UserContext As IntPtr) As Integer + + _ + Public Delegate Function KISO_ENUM_PACKETS_CB(PacketIndex As Integer, <[In]> ByRef IsoPacket As KISO_PACKET, UserState As IntPtr) As Boolean + + _ + Public Delegate Function KLST_ENUM_DEVINFO_CB(<[In]> DeviceList As KLST_HANDLE, <[In]> DeviceInfo As KLST_DEVINFO_HANDLE, Context As IntPtr) As Boolean + + _ + Public Delegate Function KUSB_InitDelegate( ByRef InterfaceHandle As KUSB_HANDLE, <[In]> DevInfo As KLST_DEVINFO_HANDLE) As Boolean + + _ + Public Delegate Function KUSB_FreeDelegate(<[In]> InterfaceHandle As KUSB_HANDLE) As Boolean + + _ + Public Delegate Function KUSB_ClaimInterfaceDelegate(<[In]> InterfaceHandle As KUSB_HANDLE, NumberOrIndex As Byte, IsIndex As Boolean) As Boolean + + _ + Public Delegate Function KUSB_ReleaseInterfaceDelegate(<[In]> InterfaceHandle As KUSB_HANDLE, NumberOrIndex As Byte, IsIndex As Boolean) As Boolean + + _ + Public Delegate Function KUSB_SetAltInterfaceDelegate(<[In]> InterfaceHandle As KUSB_HANDLE, NumberOrIndex As Byte, IsIndex As Boolean, AltSettingNumber As Byte) As Boolean + + _ + Public Delegate Function KUSB_GetAltInterfaceDelegate(<[In]> InterfaceHandle As KUSB_HANDLE, NumberOrIndex As Byte, IsIndex As Boolean, ByRef AltSettingNumber As Byte) As Boolean + + _ + Public Delegate Function KUSB_GetDescriptorDelegate(<[In]> InterfaceHandle As KUSB_HANDLE, DescriptorType As Byte, Index As Byte, LanguageID As UShort, Buffer As IntPtr, BufferLength As Integer, _ + ByRef LengthTransferred As Integer) As Boolean + + _ + Public Delegate Function KUSB_ControlTransferDelegate(<[In]> InterfaceHandle As KUSB_HANDLE, SetupPacket As WINUSB_SETUP_PACKET, Buffer As IntPtr, BufferLength As Integer, ByRef LengthTransferred As Integer, Overlapped As IntPtr) As Boolean + + _ + Public Delegate Function KUSB_SetPowerPolicyDelegate(<[In]> InterfaceHandle As KUSB_HANDLE, PolicyType As Integer, ValueLength As Integer, Value As IntPtr) As Boolean + + _ + Public Delegate Function KUSB_GetPowerPolicyDelegate(<[In]> InterfaceHandle As KUSB_HANDLE, PolicyType As Integer, ByRef ValueLength As Integer, Value As IntPtr) As Boolean + + _ + Public Delegate Function KUSB_SetConfigurationDelegate(<[In]> InterfaceHandle As KUSB_HANDLE, ConfigurationNumber As Byte) As Boolean + + _ + Public Delegate Function KUSB_GetConfigurationDelegate(<[In]> InterfaceHandle As KUSB_HANDLE, ByRef ConfigurationNumber As Byte) As Boolean + + _ + Public Delegate Function KUSB_ResetDeviceDelegate(<[In]> InterfaceHandle As KUSB_HANDLE) As Boolean + + _ + Public Delegate Function KUSB_InitializeDelegate(DeviceHandle As IntPtr, ByRef InterfaceHandle As KUSB_HANDLE) As Boolean + + _ + Public Delegate Function KUSB_SelectInterfaceDelegate(<[In]> InterfaceHandle As KUSB_HANDLE, NumberOrIndex As Byte, IsIndex As Boolean) As Boolean + + _ + Public Delegate Function KUSB_GetAssociatedInterfaceDelegate(<[In]> InterfaceHandle As KUSB_HANDLE, AssociatedInterfaceIndex As Byte, ByRef AssociatedInterfaceHandle As KUSB_HANDLE) As Boolean + + _ + Public Delegate Function KUSB_CloneDelegate(<[In]> InterfaceHandle As KUSB_HANDLE, ByRef DstInterfaceHandle As KUSB_HANDLE) As Boolean + + _ + Public Delegate Function KUSB_QueryInterfaceSettingsDelegate(<[In]> InterfaceHandle As KUSB_HANDLE, AltSettingIndex As Byte, ByRef UsbAltInterfaceDescriptor As USB_INTERFACE_DESCRIPTOR) As Boolean + + _ + Public Delegate Function KUSB_QueryDeviceInformationDelegate(<[In]> InterfaceHandle As KUSB_HANDLE, InformationType As Integer, ByRef BufferLength As Integer, Buffer As IntPtr) As Boolean + + _ + Public Delegate Function KUSB_SetCurrentAlternateSettingDelegate(<[In]> InterfaceHandle As KUSB_HANDLE, AltSettingNumber As Byte) As Boolean + + _ + Public Delegate Function KUSB_GetCurrentAlternateSettingDelegate(<[In]> InterfaceHandle As KUSB_HANDLE, ByRef AltSettingNumber As Byte) As Boolean + + _ + Public Delegate Function KUSB_QueryPipeDelegate(<[In]> InterfaceHandle As KUSB_HANDLE, AltSettingNumber As Byte, PipeIndex As Byte, ByRef PipeInformation As WINUSB_PIPE_INFORMATION) As Boolean + + _ + Public Delegate Function KUSB_SetPipePolicyDelegate(<[In]> InterfaceHandle As KUSB_HANDLE, PipeID As Byte, PolicyType As Integer, ValueLength As Integer, Value As IntPtr) As Boolean + + _ + Public Delegate Function KUSB_GetPipePolicyDelegate(<[In]> InterfaceHandle As KUSB_HANDLE, PipeID As Byte, PolicyType As Integer, ByRef ValueLength As Integer, Value As IntPtr) As Boolean + + _ + Public Delegate Function KUSB_ReadPipeDelegate(<[In]> InterfaceHandle As KUSB_HANDLE, PipeID As Byte, Buffer As IntPtr, BufferLength As Integer, ByRef LengthTransferred As Integer, Overlapped As IntPtr) As Boolean + + _ + Public Delegate Function KUSB_WritePipeDelegate(<[In]> InterfaceHandle As KUSB_HANDLE, PipeID As Byte, Buffer As IntPtr, BufferLength As Integer, ByRef LengthTransferred As Integer, Overlapped As IntPtr) As Boolean + + _ + Public Delegate Function KUSB_ResetPipeDelegate(<[In]> InterfaceHandle As KUSB_HANDLE, PipeID As Byte) As Boolean + + _ + Public Delegate Function KUSB_AbortPipeDelegate(<[In]> InterfaceHandle As KUSB_HANDLE, PipeID As Byte) As Boolean + + _ + Public Delegate Function KUSB_FlushPipeDelegate(<[In]> InterfaceHandle As KUSB_HANDLE, PipeID As Byte) As Boolean + + _ + Public Delegate Function KUSB_IsoReadPipeDelegate(<[In]> InterfaceHandle As KUSB_HANDLE, PipeID As Byte, Buffer As IntPtr, BufferLength As Integer, Overlapped As IntPtr, <[In]> IsoContext As KISO_CONTEXT) As Boolean + + _ + Public Delegate Function KUSB_IsoWritePipeDelegate(<[In]> InterfaceHandle As KUSB_HANDLE, PipeID As Byte, Buffer As IntPtr, BufferLength As Integer, Overlapped As IntPtr, <[In]> IsoContext As KISO_CONTEXT) As Boolean + + _ + Public Delegate Function KUSB_GetCurrentFrameNumberDelegate(<[In]> InterfaceHandle As KUSB_HANDLE, ByRef FrameNumber As Integer) As Boolean + + _ + Public Delegate Function KUSB_GetOverlappedResultDelegate(<[In]> InterfaceHandle As KUSB_HANDLE, Overlapped As IntPtr, ByRef lpNumberOfBytesTransferred As Integer, bWait As Boolean) As Boolean + + _ + Public Delegate Function KUSB_GetPropertyDelegate(<[In]> InterfaceHandle As KUSB_HANDLE, PropertyType As KUSB_PROPERTY, ByRef PropertySize As Integer, Value As IntPtr) As Boolean + + _ + Public Delegate Sub KHOT_PLUG_CB(<[In]> HotHandle As KHOT_HANDLE, <[In]> DeviceInfo As KLST_DEVINFO_HANDLE, PlugType As KLST_SYNC_FLAG) + + _ + Public Delegate Function KSTM_ERROR_CB(<[In]> StreamInfo As KSTM_INFO, <[In]> XferContext As KSTM_XFER_CONTEXT, XferContextIndex As Integer, ErrorCode As Integer) As Integer + + _ + Public Delegate Function KSTM_SUBMIT_CB(<[In]> StreamInfo As KSTM_INFO, <[In]> XferContext As KSTM_XFER_CONTEXT, XferContextIndex As Integer, Overlapped As IntPtr) As Integer + + _ + Public Delegate Function KSTM_STARTED_CB(<[In]> StreamInfo As KSTM_INFO, <[In]> XferContext As KSTM_XFER_CONTEXT, XferContextIndex As Integer) As Integer + + _ + Public Delegate Function KSTM_STOPPED_CB(<[In]> StreamInfo As KSTM_INFO, <[In]> XferContext As KSTM_XFER_CONTEXT, XferContextIndex As Integer) As Integer + + _ + Public Delegate Function KSTM_COMPLETE_CB(<[In]> StreamInfo As KSTM_INFO, <[In]> XferContext As KSTM_XFER_CONTEXT, XferContextIndex As Integer, ErrorCode As Integer) As Integer + + _ + Public Delegate Function KSTM_BEFORE_COMPLETE_CB(<[In]> StreamInfo As KSTM_INFO, <[In]> XferContext As KSTM_XFER_CONTEXT, XferContextIndex As Integer, ByRef ErrorCode As Integer) As KSTM_COMPLETE_RESULT + + #End Region + + Public Class LstK + Implements IDisposable + Protected mHandleStruct As KLST_HANDLE + Protected mbDisposed As Boolean + + Protected Sub New() + End Sub + + #Region "IDisposable Members" + + ''' Explicitly closes and frees the handle. + Public Overridable Sub Dispose() Implements IDisposable.Dispose + Dispose(True) + GC.SuppressFinalize(Me) + End Sub + + #End Region + + Protected Overrides Sub Finalize() + Try + Dispose(False) + Finally + MyBase.Finalize() + End Try + End Sub + + Protected Overridable Sub Dispose(disposing As Boolean) + If Not mbDisposed Then + If mHandleStruct.Pointer <> IntPtr.Zero Then + AllKFunctions.LstK_Free(mHandleStruct) + Debug.Print("{0} Dispose: Freed Handle:{1:X16}h Explicit:{2}", [GetType]().Name, mHandleStruct.Pointer.ToInt64(), disposing) + Else + Debug.Print("{0} Dispose: [WARNING] Handle is null", [GetType]().Name) + End If + + mHandleStruct = New KLST_HANDLE(IntPtr.Zero) + mbDisposed = True + End If + End Sub + + ''' Initializes a new usb device list containing all supported devices. + Protected Function Init(Flags As KLST_FLAG) As Boolean + Dim success As Boolean = AllKFunctions.LstK_Init(mHandleStruct, Flags) + + If Not success Then + Throw New Exception(String.Format("{0} failed initializing. ErrorCode={1:X8}h", [GetType]().Name, Marshal.GetLastWin32Error())) + End If + + Debug.Print("{0} Init: handle 0x{1:X16}", [GetType]().Name, mHandleStruct.Pointer.ToInt64()) + Return True + End Function + + ''' Initializes a new usb device list containing only devices matching a specific class GUID. + Protected Function InitEx(Flags As KLST_FLAG, ByRef PatternMatch As KLST_PATTERN_MATCH) As Boolean + Dim success As Boolean = AllKFunctions.LstK_InitEx(mHandleStruct, Flags, PatternMatch) + + If Not success Then + Throw New Exception(String.Format("{0} failed initializing. ErrorCode={1:X8}h", [GetType]().Name, Marshal.GetLastWin32Error())) + End If + + Debug.Print("{0} Init: handle 0x{1:X16}", [GetType]().Name, mHandleStruct.Pointer.ToInt64()) + Return True + End Function + + #Region "Public Members" + + ''' Initializes a new usb device list containing all supported devices. + Public Sub New(Flags As KLST_FLAG) + Dim success As Boolean = AllKFunctions.LstK_Init(mHandleStruct, Flags) + + If Not success Then + Throw New Exception(String.Format("{0} failed initializing. ErrorCode={1:X8}h", [GetType]().Name, Marshal.GetLastWin32Error())) + End If + + Debug.Print("{0} Init: handle 0x{1:X16}", [GetType]().Name, mHandleStruct.Pointer.ToInt64()) + End Sub + + ''' Initializes a new usb device list containing only devices matching a specific class GUID. + Public Sub New(Flags As KLST_FLAG, ByRef PatternMatch As KLST_PATTERN_MATCH) + Dim success As Boolean = AllKFunctions.LstK_InitEx(mHandleStruct, Flags, PatternMatch) + + If Not success Then + Throw New Exception(String.Format("{0} failed initializing. ErrorCode={1:X8}h", [GetType]().Name, Marshal.GetLastWin32Error())) + End If + + Debug.Print("{0} Init: handle 0x{1:X16}", [GetType]().Name, mHandleStruct.Pointer.ToInt64()) + End Sub + + ''' Counts the number of device info elements in a device list. + Public Overridable Function Count(ByRef Count As Integer) As Boolean + Return AllKFunctions.LstK_Count(mHandleStruct, Count) + End Function + + ''' Gets the \ref KLST_DEVINFO element for the current position. + Public Overridable Function Current(ByRef DeviceInfo As KLST_DEVINFO_HANDLE) As Boolean + Return AllKFunctions.LstK_Current(mHandleStruct, DeviceInfo) + End Function + + ''' Enumerates \ref KLST_DEVINFO elements of a \ref KLST_HANDLE. + Public Overridable Function Enumerate(EnumDevListCB As KLST_ENUM_DEVINFO_CB, Context As IntPtr) As Boolean + Return AllKFunctions.LstK_Enumerate(mHandleStruct, EnumDevListCB, Context) + End Function + + ''' Find a device by vendor and product id + Public Overridable Function FindByVidPid(Vid As Integer, Pid As Integer, ByRef DeviceInfo As KLST_DEVINFO_HANDLE) As Boolean + Return AllKFunctions.LstK_FindByVidPid(mHandleStruct, Vid, Pid, DeviceInfo) + End Function + + ''' Calls the dispose method. + Public Overridable Sub Free() + Dispose() + End Sub + + ''' Gets the handle class structure. + Public ReadOnly Property Handle() As KLST_HANDLE + Get + Return mHandleStruct + End Get + End Property + + ''' Advances the device list current \ref KLST_DEVINFO position. + Public Overridable Function MoveNext(ByRef DeviceInfo As KLST_DEVINFO_HANDLE) As Boolean + Return AllKFunctions.LstK_MoveNext(mHandleStruct, DeviceInfo) + End Function + + ''' Sets the device list to its initial position, which is before the first element in the list. + Public Overridable Sub MoveReset() + AllKFunctions.LstK_MoveReset(mHandleStruct) + End Sub + + #End Region + End Class + + Public Class HotK + Implements IDisposable + Protected mHandleStruct As KHOT_HANDLE + Protected mbDisposed As Boolean + + Protected Sub New() + End Sub + + #Region "IDisposable Members" + + ''' Explicitly closes and frees the handle. + Public Overridable Sub Dispose() Implements IDisposable.Dispose + Dispose(True) + GC.SuppressFinalize(Me) + End Sub + + #End Region + + Protected Overrides Sub Finalize() + Try + Dispose(False) + Finally + MyBase.Finalize() + End Try + End Sub + + Protected Overridable Sub Dispose(disposing As Boolean) + If Not mbDisposed Then + If mHandleStruct.Pointer <> IntPtr.Zero Then + AllKFunctions.HotK_Free(mHandleStruct) + Debug.Print("{0} Dispose: Freed Handle:{1:X16}h Explicit:{2}", [GetType]().Name, mHandleStruct.Pointer.ToInt64(), disposing) + Else + Debug.Print("{0} Dispose: [WARNING] Handle is null", [GetType]().Name) + End If + + mHandleStruct = New KHOT_HANDLE(IntPtr.Zero) + mbDisposed = True + End If + End Sub + + ''' Creates a new hot-plug handle for USB device arrival/removal event monitoring. + Protected Function Init(ByRef InitParams As KHOT_PARAMS) As Boolean + Dim success As Boolean = AllKFunctions.HotK_Init(mHandleStruct, InitParams) + + If Not success Then + Throw New Exception(String.Format("{0} failed initializing. ErrorCode={1:X8}h", [GetType]().Name, Marshal.GetLastWin32Error())) + End If + + Debug.Print("{0} Init: handle 0x{1:X16}", [GetType]().Name, mHandleStruct.Pointer.ToInt64()) + Return True + End Function + + #Region "Public Members" + + ''' Creates a new hot-plug handle for USB device arrival/removal event monitoring. + Public Sub New(ByRef InitParams As KHOT_PARAMS) + Dim success As Boolean = AllKFunctions.HotK_Init(mHandleStruct, InitParams) + + If Not success Then + Throw New Exception(String.Format("{0} failed initializing. ErrorCode={1:X8}h", [GetType]().Name, Marshal.GetLastWin32Error())) + End If + + Debug.Print("{0} Init: handle 0x{1:X16}", [GetType]().Name, mHandleStruct.Pointer.ToInt64()) + End Sub + + ''' Calls the dispose method. + Public Overridable Sub Free() + Dispose() + End Sub + + ''' Frees all hot-plug handles initialized with \ref HotK_Init. + Public Overridable Sub FreeAll() + AllKFunctions.HotK_FreeAll() + End Sub + + ''' Gets the handle class structure. + Public ReadOnly Property Handle() As KHOT_HANDLE + Get + Return mHandleStruct + End Get + End Property + + #End Region + End Class + + Public Class UsbK + Implements IDisposable + Protected driverAPI As KUSB_DRIVER_API + Protected mHandleStruct As KUSB_HANDLE + Protected mbDisposed As Boolean + + Protected Sub New() + End Sub + + #Region "IDisposable Members" + + ''' Explicitly closes and frees the handle. + Public Overridable Sub Dispose() Implements IDisposable.Dispose + Dispose(True) + GC.SuppressFinalize(Me) + End Sub + + #End Region + + Protected Overrides Sub Finalize() + Try + Dispose(False) + Finally + MyBase.Finalize() + End Try + End Sub + + Protected Overridable Sub Dispose(disposing As Boolean) + If Not mbDisposed Then + If mHandleStruct.Pointer <> IntPtr.Zero Then + AllKFunctions.UsbK_Free(mHandleStruct) + Debug.Print("{0} Dispose: Freed Handle:{1:X16}h Explicit:{2}", [GetType]().Name, mHandleStruct.Pointer.ToInt64(), disposing) + Else + Debug.Print("{0} Dispose: [WARNING] Handle is null", [GetType]().Name) + End If + + mHandleStruct = New KUSB_HANDLE(IntPtr.Zero) + mbDisposed = True + End If + End Sub + + ''' Creates/opens a libusbK interface handle from the device list. This is a preferred method. + Protected Function Init(DevInfo As KLST_DEVINFO_HANDLE) As Boolean + Dim success As Boolean = AllKFunctions.LibK_LoadDriverAPI(driverAPI, DevInfo.DriverID) + + If Not success Then + Throw New Exception(String.Format("{0} failed loading Driver API. ErrorCode={1:X8}h", [GetType]().Name, Marshal.GetLastWin32Error())) + End If + + success = driverAPI.Init(mHandleStruct, DevInfo) + + If Not success Then + Throw New Exception(String.Format("{0} failed initializing usb device. ErrorCode={1:X8}h", [GetType]().Name, Marshal.GetLastWin32Error())) + End If + + Debug.Print("{0} Init: handle 0x{1:X16}", [GetType]().Name, mHandleStruct.Pointer.ToInt64()) + Return True + End Function + + ''' Creates a libusbK handle for the device specified by a file handle. + Protected Function Initialize(DeviceHandle As IntPtr, driverID As KUSB_DRVID) As Boolean + Dim success As Boolean = AllKFunctions.LibK_LoadDriverAPI(driverAPI, CInt(driverID)) + + If Not success Then + Throw New Exception(String.Format("{0} failed loading Driver API. ErrorCode={1:X8}h", [GetType]().Name, Marshal.GetLastWin32Error())) + End If + + success = driverAPI.Initialize(DeviceHandle, mHandleStruct) + + If Not success Then + Throw New Exception(String.Format("{0} failed initializing usb device. ErrorCode={1:X8}h", [GetType]().Name, Marshal.GetLastWin32Error())) + End If + + Debug.Print("{0} Init: handle 0x{1:X16}", [GetType]().Name, mHandleStruct.Pointer.ToInt64()) + Return True + End Function + + #Region "Public Members" + + ''' Creates/opens a libusbK interface handle from the device list. This is a preferred method. + Public Sub New(DevInfo As KLST_DEVINFO_HANDLE) + Dim success As Boolean = AllKFunctions.LibK_LoadDriverAPI(driverAPI, DevInfo.DriverID) + + If Not success Then + Throw New Exception(String.Format("{0} failed loading Driver API. ErrorCode={1:X8}h", [GetType]().Name, Marshal.GetLastWin32Error())) + End If + + success = driverAPI.Init(mHandleStruct, DevInfo) + + If Not success Then + Throw New Exception(String.Format("{0} failed initializing usb device. ErrorCode={1:X8}h", [GetType]().Name, Marshal.GetLastWin32Error())) + End If + + Debug.Print("{0} Init: handle 0x{1:X16}", [GetType]().Name, mHandleStruct.Pointer.ToInt64()) + End Sub + + ''' Creates a libusbK handle for the device specified by a file handle. + Public Sub New(DeviceHandle As IntPtr, driverID As KUSB_DRVID) + Dim success As Boolean = AllKFunctions.LibK_LoadDriverAPI(driverAPI, CInt(driverID)) + + If Not success Then + Throw New Exception(String.Format("{0} failed loading Driver API. ErrorCode={1:X8}h", [GetType]().Name, Marshal.GetLastWin32Error())) + End If + + success = driverAPI.Initialize(DeviceHandle, mHandleStruct) + + If Not success Then + Throw New Exception(String.Format("{0} failed initializing usb device. ErrorCode={1:X8}h", [GetType]().Name, Marshal.GetLastWin32Error())) + End If + + Debug.Print("{0} Init: handle 0x{1:X16}", [GetType]().Name, mHandleStruct.Pointer.ToInt64()) + End Sub + + ''' Aborts all of the pending transfers for a pipe. + Public Overridable Function AbortPipe(PipeID As Byte) As Boolean + Return driverAPI.AbortPipe(mHandleStruct, PipeID) + End Function + + ''' Claims the specified interface by number or index. + Public Overridable Function ClaimInterface(NumberOrIndex As Byte, IsIndex As Boolean) As Boolean + Return driverAPI.ClaimInterface(mHandleStruct, NumberOrIndex, IsIndex) + End Function + + ''' Clones the specified interface handle. + Public Overridable Function Clone(ByRef DstInterfaceHandle As KUSB_HANDLE) As Boolean + Return driverAPI.Clone(mHandleStruct, DstInterfaceHandle) + End Function + + ''' Transmits control data over a default control endpoint. + Public Overridable Function ControlTransfer(SetupPacket As WINUSB_SETUP_PACKET, Buffer As IntPtr, BufferLength As Integer, ByRef LengthTransferred As Integer, Overlapped As IntPtr) As Boolean + Return driverAPI.ControlTransfer(mHandleStruct, SetupPacket, Buffer, BufferLength, LengthTransferred, Overlapped) + End Function + + ''' Transmits control data over a default control endpoint. + Public Overridable Function ControlTransfer(SetupPacket As WINUSB_SETUP_PACKET, Buffer As Array, BufferLength As Integer, ByRef LengthTransferred As Integer, Overlapped As IntPtr) As Boolean + Return driverAPI.ControlTransfer(mHandleStruct, SetupPacket, Marshal.UnsafeAddrOfPinnedArrayElement(Buffer, 0), BufferLength, LengthTransferred, Overlapped) + End Function + + ''' Transmits control data over a default control endpoint. + Public Overridable Function ControlTransfer(SetupPacket As WINUSB_SETUP_PACKET, Buffer As Array, BufferLength As Integer, ByRef LengthTransferred As Integer, Overlapped As KOVL_HANDLE) As Boolean + Return driverAPI.ControlTransfer(mHandleStruct, SetupPacket, Marshal.UnsafeAddrOfPinnedArrayElement(Buffer, 0), BufferLength, LengthTransferred, Overlapped.Pointer) + End Function + + ''' Transmits control data over a default control endpoint. + Public Overridable Function ControlTransfer(SetupPacket As WINUSB_SETUP_PACKET, Buffer As IntPtr, BufferLength As Integer, ByRef LengthTransferred As Integer, Overlapped As KOVL_HANDLE) As Boolean + Return driverAPI.ControlTransfer(mHandleStruct, SetupPacket, Buffer, BufferLength, LengthTransferred, Overlapped.Pointer) + End Function + + ''' Discards any data that is cached in a pipe. + Public Overridable Function FlushPipe(PipeID As Byte) As Boolean + Return driverAPI.FlushPipe(mHandleStruct, PipeID) + End Function + + ''' Calls the dispose method. + Public Overridable Sub Free() + Dispose() + End Sub + + ''' Gets the alternate setting for the specified interface. + Public Overridable Function GetAltInterface(NumberOrIndex As Byte, IsIndex As Boolean, ByRef AltSettingNumber As Byte) As Boolean + Return driverAPI.GetAltInterface(mHandleStruct, NumberOrIndex, IsIndex, AltSettingNumber) + End Function + + ''' Retrieves a handle for an associated interface. + Public Overridable Function GetAssociatedInterface(AssociatedInterfaceIndex As Byte, ByRef AssociatedInterfaceHandle As KUSB_HANDLE) As Boolean + Return driverAPI.GetAssociatedInterface(mHandleStruct, AssociatedInterfaceIndex, AssociatedInterfaceHandle) + End Function + + ''' Gets the device current configuration number. + Public Overridable Function GetConfiguration(ByRef ConfigurationNumber As Byte) As Boolean + Return driverAPI.GetConfiguration(mHandleStruct, ConfigurationNumber) + End Function + + ''' Gets the current alternate interface setting for an interface. + Public Overridable Function GetCurrentAlternateSetting(ByRef AltSettingNumber As Byte) As Boolean + Return driverAPI.GetCurrentAlternateSetting(mHandleStruct, AltSettingNumber) + End Function + + ''' Retrieves the current USB frame number. + Public Overridable Function GetCurrentFrameNumber(ByRef FrameNumber As Integer) As Boolean + Return driverAPI.GetCurrentFrameNumber(mHandleStruct, FrameNumber) + End Function + + ''' Gets the requested descriptor. This is a synchronous operation. + Public Overridable Function GetDescriptor(DescriptorType As Byte, Index As Byte, LanguageID As Integer, Buffer As IntPtr, BufferLength As Integer, ByRef LengthTransferred As Integer) As Boolean + Return driverAPI.GetDescriptor(mHandleStruct, DescriptorType, Index, CUShort(LanguageID), Buffer, BufferLength, _ + LengthTransferred) + End Function + + ''' Gets the requested descriptor. This is a synchronous operation. + Public Overridable Function GetDescriptor(DescriptorType As Byte, Index As Byte, LanguageID As Integer, Buffer As Array, BufferLength As Integer, ByRef LengthTransferred As Integer) As Boolean + Return driverAPI.GetDescriptor(mHandleStruct, DescriptorType, Index, CUShort(LanguageID), Marshal.UnsafeAddrOfPinnedArrayElement(Buffer, 0), BufferLength, _ + LengthTransferred) + End Function + + ''' Retrieves the results of an overlapped operation on the specified libusbK handle. + Public Overridable Function GetOverlappedResult(Overlapped As IntPtr, ByRef lpNumberOfBytesTransferred As Integer, bWait As Boolean) As Boolean + Return driverAPI.GetOverlappedResult(mHandleStruct, Overlapped, lpNumberOfBytesTransferred, bWait) + End Function + + ''' Retrieves the results of an overlapped operation on the specified libusbK handle. + Public Overridable Function GetOverlappedResult(Overlapped As KOVL_HANDLE, ByRef lpNumberOfBytesTransferred As Integer, bWait As Boolean) As Boolean + Return driverAPI.GetOverlappedResult(mHandleStruct, Overlapped.Pointer, lpNumberOfBytesTransferred, bWait) + End Function + + ''' Gets the policy for a specific pipe (endpoint). + Public Overridable Function GetPipePolicy(PipeID As Byte, PolicyType As Integer, ByRef ValueLength As Integer, Value As IntPtr) As Boolean + Return driverAPI.GetPipePolicy(mHandleStruct, PipeID, PolicyType, ValueLength, Value) + End Function + + ''' Gets the policy for a specific pipe (endpoint). + Public Overridable Function GetPipePolicy(PipeID As Byte, PolicyType As Integer, ByRef ValueLength As Integer, Value As Array) As Boolean + Return driverAPI.GetPipePolicy(mHandleStruct, PipeID, PolicyType, ValueLength, Marshal.UnsafeAddrOfPinnedArrayElement(Value, 0)) + End Function + + ''' Gets the power policy for a device. + Public Overridable Function GetPowerPolicy(PolicyType As Integer, ByRef ValueLength As Integer, Value As IntPtr) As Boolean + Return driverAPI.GetPowerPolicy(mHandleStruct, PolicyType, ValueLength, Value) + End Function + + ''' Gets the power policy for a device. + Public Overridable Function GetPowerPolicy(PolicyType As Integer, ByRef ValueLength As Integer, Value As Array) As Boolean + Return driverAPI.GetPowerPolicy(mHandleStruct, PolicyType, ValueLength, Marshal.UnsafeAddrOfPinnedArrayElement(Value, 0)) + End Function + + ''' Gets a USB device (driver specific) property from usb handle. + Public Overridable Function GetProperty(PropertyType As KUSB_PROPERTY, ByRef PropertySize As Integer, Value As IntPtr) As Boolean + Return driverAPI.GetProperty(mHandleStruct, PropertyType, PropertySize, Value) + End Function + + ''' Gets a USB device (driver specific) property from usb handle. + Public Overridable Function GetProperty(PropertyType As KUSB_PROPERTY, ByRef PropertySize As Integer, Value As Array) As Boolean + Return driverAPI.GetProperty(mHandleStruct, PropertyType, PropertySize, Marshal.UnsafeAddrOfPinnedArrayElement(Value, 0)) + End Function + + ''' Gets the handle class structure. + Public ReadOnly Property Handle() As KUSB_HANDLE + Get + Return mHandleStruct + End Get + End Property + + ''' Reads from an isochronous pipe. + Public Overridable Function IsoReadPipe(PipeID As Byte, Buffer As IntPtr, BufferLength As Integer, Overlapped As IntPtr, IsoContext As KISO_CONTEXT) As Boolean + Return driverAPI.IsoReadPipe(mHandleStruct, PipeID, Buffer, BufferLength, Overlapped, IsoContext) + End Function + + ''' Reads from an isochronous pipe. + Public Overridable Function IsoReadPipe(PipeID As Byte, Buffer As Array, BufferLength As Integer, Overlapped As IntPtr, IsoContext As KISO_CONTEXT) As Boolean + Return driverAPI.IsoReadPipe(mHandleStruct, PipeID, Marshal.UnsafeAddrOfPinnedArrayElement(Buffer, 0), BufferLength, Overlapped, IsoContext) + End Function + + ''' Reads from an isochronous pipe. + Public Overridable Function IsoReadPipe(PipeID As Byte, Buffer As Array, BufferLength As Integer, Overlapped As KOVL_HANDLE, IsoContext As KISO_CONTEXT) As Boolean + Return driverAPI.IsoReadPipe(mHandleStruct, PipeID, Marshal.UnsafeAddrOfPinnedArrayElement(Buffer, 0), BufferLength, Overlapped.Pointer, IsoContext) + End Function + + ''' Reads from an isochronous pipe. + Public Overridable Function IsoReadPipe(PipeID As Byte, Buffer As IntPtr, BufferLength As Integer, Overlapped As KOVL_HANDLE, IsoContext As KISO_CONTEXT) As Boolean + Return driverAPI.IsoReadPipe(mHandleStruct, PipeID, Buffer, BufferLength, Overlapped.Pointer, IsoContext) + End Function + + ''' Writes to an isochronous pipe. + Public Overridable Function IsoWritePipe(PipeID As Byte, Buffer As IntPtr, BufferLength As Integer, Overlapped As IntPtr, IsoContext As KISO_CONTEXT) As Boolean + Return driverAPI.IsoWritePipe(mHandleStruct, PipeID, Buffer, BufferLength, Overlapped, IsoContext) + End Function + + ''' Writes to an isochronous pipe. + Public Overridable Function IsoWritePipe(PipeID As Byte, Buffer As Array, BufferLength As Integer, Overlapped As IntPtr, IsoContext As KISO_CONTEXT) As Boolean + Return driverAPI.IsoWritePipe(mHandleStruct, PipeID, Marshal.UnsafeAddrOfPinnedArrayElement(Buffer, 0), BufferLength, Overlapped, IsoContext) + End Function + + ''' Writes to an isochronous pipe. + Public Overridable Function IsoWritePipe(PipeID As Byte, Buffer As Array, BufferLength As Integer, Overlapped As KOVL_HANDLE, IsoContext As KISO_CONTEXT) As Boolean + Return driverAPI.IsoWritePipe(mHandleStruct, PipeID, Marshal.UnsafeAddrOfPinnedArrayElement(Buffer, 0), BufferLength, Overlapped.Pointer, IsoContext) + End Function + + ''' Writes to an isochronous pipe. + Public Overridable Function IsoWritePipe(PipeID As Byte, Buffer As IntPtr, BufferLength As Integer, Overlapped As KOVL_HANDLE, IsoContext As KISO_CONTEXT) As Boolean + Return driverAPI.IsoWritePipe(mHandleStruct, PipeID, Buffer, BufferLength, Overlapped.Pointer, IsoContext) + End Function + + ''' Retrieves information about the physical device that is associated with a libusbK handle. + Public Overridable Function QueryDeviceInformation(InformationType As Integer, ByRef BufferLength As Integer, Buffer As IntPtr) As Boolean + Return driverAPI.QueryDeviceInformation(mHandleStruct, InformationType, BufferLength, Buffer) + End Function + + ''' Retrieves the interface descriptor for the specified alternate interface settings for a particular interface handle. + Public Overridable Function QueryInterfaceSettings(AltSettingIndex As Byte, ByRef UsbAltInterfaceDescriptor As USB_INTERFACE_DESCRIPTOR) As Boolean + Return driverAPI.QueryInterfaceSettings(mHandleStruct, AltSettingIndex, UsbAltInterfaceDescriptor) + End Function + + ''' Retrieves information about a pipe that is associated with an interface. + Public Overridable Function QueryPipe(AltSettingNumber As Byte, PipeIndex As Byte, ByRef PipeInformation As WINUSB_PIPE_INFORMATION) As Boolean + Return driverAPI.QueryPipe(mHandleStruct, AltSettingNumber, PipeIndex, PipeInformation) + End Function + + ''' Reads data from the specified pipe. + Public Overridable Function ReadPipe(PipeID As Byte, Buffer As IntPtr, BufferLength As Integer, ByRef LengthTransferred As Integer, Overlapped As IntPtr) As Boolean + Return driverAPI.ReadPipe(mHandleStruct, PipeID, Buffer, BufferLength, LengthTransferred, Overlapped) + End Function + + ''' Reads data from the specified pipe. + Public Overridable Function ReadPipe(PipeID As Byte, Buffer As Array, BufferLength As Integer, ByRef LengthTransferred As Integer, Overlapped As IntPtr) As Boolean + Return driverAPI.ReadPipe(mHandleStruct, PipeID, Marshal.UnsafeAddrOfPinnedArrayElement(Buffer, 0), BufferLength, LengthTransferred, Overlapped) + End Function + + ''' Reads data from the specified pipe. + Public Overridable Function ReadPipe(PipeID As Byte, Buffer As Array, BufferLength As Integer, ByRef LengthTransferred As Integer, Overlapped As KOVL_HANDLE) As Boolean + Return driverAPI.ReadPipe(mHandleStruct, PipeID, Marshal.UnsafeAddrOfPinnedArrayElement(Buffer, 0), BufferLength, LengthTransferred, Overlapped.Pointer) + End Function + + ''' Reads data from the specified pipe. + Public Overridable Function ReadPipe(PipeID As Byte, Buffer As IntPtr, BufferLength As Integer, ByRef LengthTransferred As Integer, Overlapped As KOVL_HANDLE) As Boolean + Return driverAPI.ReadPipe(mHandleStruct, PipeID, Buffer, BufferLength, LengthTransferred, Overlapped.Pointer) + End Function + + ''' Releases the specified interface by number or index. + Public Overridable Function ReleaseInterface(NumberOrIndex As Byte, IsIndex As Boolean) As Boolean + Return driverAPI.ReleaseInterface(mHandleStruct, NumberOrIndex, IsIndex) + End Function + + ''' Resets the usb device of the specified interface handle. (port cycle). + Public Overridable Function ResetDevice() As Boolean + Return driverAPI.ResetDevice(mHandleStruct) + End Function + + ''' Resets the data toggle and clears the stall condition on a pipe. + Public Overridable Function ResetPipe(PipeID As Byte) As Boolean + Return driverAPI.ResetPipe(mHandleStruct, PipeID) + End Function + + ''' Selects the specified interface by number or index as the current interface. + Public Overridable Function SelectInterface(NumberOrIndex As Byte, IsIndex As Boolean) As Boolean + Return driverAPI.SelectInterface(mHandleStruct, NumberOrIndex, IsIndex) + End Function + + ''' Sets the alternate setting of the specified interface. + Public Overridable Function SetAltInterface(NumberOrIndex As Byte, IsIndex As Boolean, AltSettingNumber As Byte) As Boolean + Return driverAPI.SetAltInterface(mHandleStruct, NumberOrIndex, IsIndex, AltSettingNumber) + End Function + + ''' Sets the device configuration number. + Public Overridable Function SetConfiguration(ConfigurationNumber As Byte) As Boolean + Return driverAPI.SetConfiguration(mHandleStruct, ConfigurationNumber) + End Function + + ''' Sets the alternate setting of an interface. + Public Overridable Function SetCurrentAlternateSetting(AltSettingNumber As Byte) As Boolean + Return driverAPI.SetCurrentAlternateSetting(mHandleStruct, AltSettingNumber) + End Function + + ''' Sets the policy for a specific pipe associated with an endpoint on the device. This is a synchronous operation. + Public Overridable Function SetPipePolicy(PipeID As Byte, PolicyType As Integer, ValueLength As Integer, Value As IntPtr) As Boolean + Return driverAPI.SetPipePolicy(mHandleStruct, PipeID, PolicyType, ValueLength, Value) + End Function + + ''' Sets the policy for a specific pipe associated with an endpoint on the device. This is a synchronous operation. + Public Overridable Function SetPipePolicy(PipeID As Byte, PolicyType As Integer, ValueLength As Integer, Value As Array) As Boolean + Return driverAPI.SetPipePolicy(mHandleStruct, PipeID, PolicyType, ValueLength, Marshal.UnsafeAddrOfPinnedArrayElement(Value, 0)) + End Function + + ''' Sets the power policy for a device. + Public Overridable Function SetPowerPolicy(PolicyType As Integer, ValueLength As Integer, Value As IntPtr) As Boolean + Return driverAPI.SetPowerPolicy(mHandleStruct, PolicyType, ValueLength, Value) + End Function + + ''' Sets the power policy for a device. + Public Overridable Function SetPowerPolicy(PolicyType As Integer, ValueLength As Integer, Value As Array) As Boolean + Return driverAPI.SetPowerPolicy(mHandleStruct, PolicyType, ValueLength, Marshal.UnsafeAddrOfPinnedArrayElement(Value, 0)) + End Function + + ''' Writes data to a pipe. + Public Overridable Function WritePipe(PipeID As Byte, Buffer As IntPtr, BufferLength As Integer, ByRef LengthTransferred As Integer, Overlapped As IntPtr) As Boolean + Return driverAPI.WritePipe(mHandleStruct, PipeID, Buffer, BufferLength, LengthTransferred, Overlapped) + End Function + + ''' Writes data to a pipe. + Public Overridable Function WritePipe(PipeID As Byte, Buffer As Array, BufferLength As Integer, ByRef LengthTransferred As Integer, Overlapped As IntPtr) As Boolean + Return driverAPI.WritePipe(mHandleStruct, PipeID, Marshal.UnsafeAddrOfPinnedArrayElement(Buffer, 0), BufferLength, LengthTransferred, Overlapped) + End Function + + ''' Writes data to a pipe. + Public Overridable Function WritePipe(PipeID As Byte, Buffer As Array, BufferLength As Integer, ByRef LengthTransferred As Integer, Overlapped As KOVL_HANDLE) As Boolean + Return driverAPI.WritePipe(mHandleStruct, PipeID, Marshal.UnsafeAddrOfPinnedArrayElement(Buffer, 0), BufferLength, LengthTransferred, Overlapped.Pointer) + End Function + + ''' Writes data to a pipe. + Public Overridable Function WritePipe(PipeID As Byte, Buffer As IntPtr, BufferLength As Integer, ByRef LengthTransferred As Integer, Overlapped As KOVL_HANDLE) As Boolean + Return driverAPI.WritePipe(mHandleStruct, PipeID, Buffer, BufferLength, LengthTransferred, Overlapped.Pointer) + End Function + + #End Region + End Class + + Public Class OvlK + Implements IDisposable + Protected mHandleStruct As KOVL_POOL_HANDLE + Protected mbDisposed As Boolean + + Protected Sub New() + End Sub + + #Region "IDisposable Members" + + ''' Explicitly closes and frees the handle. + Public Overridable Sub Dispose() Implements IDisposable.Dispose + Dispose(True) + GC.SuppressFinalize(Me) + End Sub + + #End Region + + Protected Overrides Sub Finalize() + Try + Dispose(False) + Finally + MyBase.Finalize() + End Try + End Sub + + Protected Overridable Sub Dispose(disposing As Boolean) + If Not mbDisposed Then + If mHandleStruct.Pointer <> IntPtr.Zero Then + AllKFunctions.OvlK_Free(mHandleStruct) + Debug.Print("{0} Dispose: Freed Handle:{1:X16}h Explicit:{2}", [GetType]().Name, mHandleStruct.Pointer.ToInt64(), disposing) + Else + Debug.Print("{0} Dispose: [WARNING] Handle is null", [GetType]().Name) + End If + + mHandleStruct = New KOVL_POOL_HANDLE(IntPtr.Zero) + mbDisposed = True + End If + End Sub + + ''' Creates a new overlapped pool. + Protected Function Init(UsbHandle As KUSB_HANDLE, MaxOverlappedCount As Integer, Flags As KOVL_POOL_FLAG) As Boolean + Dim success As Boolean = AllKFunctions.OvlK_Init(mHandleStruct, UsbHandle, MaxOverlappedCount, Flags) + + If Not success Then + Throw New Exception(String.Format("{0} failed initializing. ErrorCode={1:X8}h", [GetType]().Name, Marshal.GetLastWin32Error())) + End If + + Debug.Print("{0} Init: handle 0x{1:X16}", [GetType]().Name, mHandleStruct.Pointer.ToInt64()) + Return True + End Function + + #Region "Public Members" + + ''' Creates a new overlapped pool. + Public Sub New(UsbHandle As KUSB_HANDLE, MaxOverlappedCount As Integer, Flags As KOVL_POOL_FLAG) + Dim success As Boolean = AllKFunctions.OvlK_Init(mHandleStruct, UsbHandle, MaxOverlappedCount, Flags) + + If Not success Then + Throw New Exception(String.Format("{0} failed initializing. ErrorCode={1:X8}h", [GetType]().Name, Marshal.GetLastWin32Error())) + End If + + Debug.Print("{0} Init: handle 0x{1:X16}", [GetType]().Name, mHandleStruct.Pointer.ToInt64()) + End Sub + + ''' Gets a preallocated \c OverlappedK structure from the specified/default pool. + Public Overridable Function Acquire(ByRef OverlappedK As KOVL_HANDLE) As Boolean + Return AllKFunctions.OvlK_Acquire(OverlappedK, mHandleStruct) + End Function + + ''' Calls the dispose method. + Public Overridable Sub Free() + Dispose() + End Sub + + ''' Returns the internal event handle used to signal IO operations. + Public Overridable Function GetEventHandle(OverlappedK As KOVL_HANDLE) As IntPtr + Return AllKFunctions.OvlK_GetEventHandle(OverlappedK) + End Function + + ''' Gets the handle class structure. + Public ReadOnly Property Handle() As KOVL_POOL_HANDLE + Get + Return mHandleStruct + End Get + End Property + + ''' Checks for i/o completion; returns immediately. (polling) + Public Overridable Function IsComplete(OverlappedK As KOVL_HANDLE) As Boolean + Return AllKFunctions.OvlK_IsComplete(OverlappedK) + End Function + + ''' Initializes an overlappedK for re-use. The overlappedK is not return to its pool. + Public Overridable Function ReUse(OverlappedK As KOVL_HANDLE) As Boolean + Return AllKFunctions.OvlK_ReUse(OverlappedK) + End Function + + ''' Returns an \c OverlappedK structure to it's pool. + Public Overridable Function Release(OverlappedK As KOVL_HANDLE) As Boolean + Return AllKFunctions.OvlK_Release(OverlappedK) + End Function + + ''' Waits for overlapped I/O completion, and performs actions specified in \c WaitFlags. + Public Overridable Function Wait(OverlappedK As KOVL_HANDLE, TimeoutMS As Integer, WaitFlags As KOVL_WAIT_FLAG, ByRef TransferredLength As Integer) As Boolean + Return AllKFunctions.OvlK_Wait(OverlappedK, TimeoutMS, WaitFlags, TransferredLength) + End Function + + ''' Waits for overlapped I/O completion, cancels on a timeout error and always releases the OvlK handle back to its pool. + Public Overridable Function WaitAndRelease(OverlappedK As KOVL_HANDLE, TimeoutMS As Integer, ByRef TransferredLength As Integer) As Boolean + Return AllKFunctions.OvlK_WaitAndRelease(OverlappedK, TimeoutMS, TransferredLength) + End Function + + ''' Waits for overlapped I/O completion on the oldest acquired OverlappedK handle and performs actions specified in \c WaitFlags. + Public Overridable Function WaitOldest(ByRef OverlappedK As KOVL_HANDLE, TimeoutMS As Integer, WaitFlags As KOVL_WAIT_FLAG, ByRef TransferredLength As Integer) As Boolean + Return AllKFunctions.OvlK_WaitOldest(mHandleStruct, OverlappedK, TimeoutMS, WaitFlags, TransferredLength) + End Function + + ''' Waits for overlapped I/O completion, cancels on a timeout error. + Public Overridable Function WaitOrCancel(OverlappedK As KOVL_HANDLE, TimeoutMS As Integer, ByRef TransferredLength As Integer) As Boolean + Return AllKFunctions.OvlK_WaitOrCancel(OverlappedK, TimeoutMS, TransferredLength) + End Function + + #End Region + End Class + + Public Class StmK + Implements IDisposable + Protected mHandleStruct As KSTM_HANDLE + Protected mbDisposed As Boolean + + Protected Sub New() + End Sub + + #Region "IDisposable Members" + + ''' Explicitly closes and frees the handle. + Public Overridable Sub Dispose() Implements IDisposable.Dispose + Dispose(True) + GC.SuppressFinalize(Me) + End Sub + + #End Region + + Protected Overrides Sub Finalize() + Try + Dispose(False) + Finally + MyBase.Finalize() + End Try + End Sub + + Protected Overridable Sub Dispose(disposing As Boolean) + If Not mbDisposed Then + If mHandleStruct.Pointer <> IntPtr.Zero Then + AllKFunctions.StmK_Free(mHandleStruct) + Debug.Print("{0} Dispose: Freed Handle:{1:X16}h Explicit:{2}", [GetType]().Name, mHandleStruct.Pointer.ToInt64(), disposing) + Else + Debug.Print("{0} Dispose: [WARNING] Handle is null", [GetType]().Name) + End If + + mHandleStruct = New KSTM_HANDLE(IntPtr.Zero) + mbDisposed = True + End If + End Sub + + ''' Initializes a new uni-directional pipe stream. + Protected Function Init(UsbHandle As KUSB_HANDLE, PipeID As Byte, MaxTransferSize As Integer, MaxPendingTransfers As Integer, MaxPendingIO As Integer, ByRef Callbacks As KSTM_CALLBACK, _ + Flags As KSTM_FLAG) As Boolean + Dim success As Boolean = AllKFunctions.StmK_Init(mHandleStruct, UsbHandle, PipeID, MaxTransferSize, MaxPendingTransfers, MaxPendingIO, _ + Callbacks, Flags) + + If Not success Then + Throw New Exception(String.Format("{0} failed initializing. ErrorCode={1:X8}h", [GetType]().Name, Marshal.GetLastWin32Error())) + End If + + Debug.Print("{0} Init: handle 0x{1:X16}", [GetType]().Name, mHandleStruct.Pointer.ToInt64()) + Return True + End Function + + #Region "Public Members" + + ''' Initializes a new uni-directional pipe stream. + Public Sub New(UsbHandle As KUSB_HANDLE, PipeID As Byte, MaxTransferSize As Integer, MaxPendingTransfers As Integer, MaxPendingIO As Integer, ByRef Callbacks As KSTM_CALLBACK, _ + Flags As KSTM_FLAG) + Dim success As Boolean = AllKFunctions.StmK_Init(mHandleStruct, UsbHandle, PipeID, MaxTransferSize, MaxPendingTransfers, MaxPendingIO, _ + Callbacks, Flags) + + If Not success Then + Throw New Exception(String.Format("{0} failed initializing. ErrorCode={1:X8}h", [GetType]().Name, Marshal.GetLastWin32Error())) + End If + + Debug.Print("{0} Init: handle 0x{1:X16}", [GetType]().Name, mHandleStruct.Pointer.ToInt64()) + End Sub + + ''' Calls the dispose method. + Public Overridable Sub Free() + Dispose() + End Sub + + ''' Gets the handle class structure. + Public ReadOnly Property Handle() As KSTM_HANDLE + Get + Return mHandleStruct + End Get + End Property + + ''' Reads data from the stream buffer. + Public Overridable Function Read(Buffer As IntPtr, Offset As Integer, Length As Integer, ByRef TransferredLength As Integer) As Boolean + Return AllKFunctions.StmK_Read(mHandleStruct, Buffer, Offset, Length, TransferredLength) + End Function + + ''' Reads data from the stream buffer. + Public Overridable Function Read(Buffer As Array, Offset As Integer, Length As Integer, ByRef TransferredLength As Integer) As Boolean + Return AllKFunctions.StmK_Read(mHandleStruct, Marshal.UnsafeAddrOfPinnedArrayElement(Buffer, 0), Offset, Length, TransferredLength) + End Function + + ''' Starts the internal stream thread. + Public Overridable Function Start() As Boolean + Return AllKFunctions.StmK_Start(mHandleStruct) + End Function + + ''' Stops the internal stream thread. + Public Overridable Function [Stop](TimeoutCancelMS As Integer) As Boolean + Return AllKFunctions.StmK_Stop(mHandleStruct, TimeoutCancelMS) + End Function + + ''' Writes data to the stream buffer. + Public Overridable Function Write(Buffer As IntPtr, Offset As Integer, Length As Integer, ByRef TransferredLength As Integer) As Boolean + Return AllKFunctions.StmK_Write(mHandleStruct, Buffer, Offset, Length, TransferredLength) + End Function + + ''' Writes data to the stream buffer. + Public Overridable Function Write(Buffer As Array, Offset As Integer, Length As Integer, ByRef TransferredLength As Integer) As Boolean + Return AllKFunctions.StmK_Write(mHandleStruct, Marshal.UnsafeAddrOfPinnedArrayElement(Buffer, 0), Offset, Length, TransferredLength) + End Function + + #End Region + End Class + + Public Class IsoK + Implements IDisposable + Protected mHandleStruct As KISO_CONTEXT + Protected mbDisposed As Boolean + + Protected Sub New() + End Sub + + #Region "IDisposable Members" + + ''' Explicitly closes and frees the handle. + Public Overridable Sub Dispose() Implements IDisposable.Dispose + Dispose(True) + GC.SuppressFinalize(Me) + End Sub + + #End Region + + Protected Overrides Sub Finalize() + Try + Dispose(False) + Finally + MyBase.Finalize() + End Try + End Sub + + Protected Overridable Sub Dispose(disposing As Boolean) + If Not mbDisposed Then + If mHandleStruct.Pointer <> IntPtr.Zero Then + AllKFunctions.IsoK_Free(mHandleStruct) + Debug.Print("{0} Dispose: Freed Handle:{1:X16}h Explicit:{2}", [GetType]().Name, mHandleStruct.Pointer.ToInt64(), disposing) + Else + Debug.Print("{0} Dispose: [WARNING] Handle is null", [GetType]().Name) + End If + + mHandleStruct = New KISO_CONTEXT(IntPtr.Zero) + mbDisposed = True + End If + End Sub + + ''' Creates a new isochronous transfer context. + Protected Function Init(NumberOfPackets As Integer, StartFrame As Integer) As Boolean + Dim success As Boolean = AllKFunctions.IsoK_Init(mHandleStruct, NumberOfPackets, StartFrame) + + If Not success Then + Throw New Exception(String.Format("{0} failed initializing. ErrorCode={1:X8}h", [GetType]().Name, Marshal.GetLastWin32Error())) + End If + + Debug.Print("{0} Init: handle 0x{1:X16}", [GetType]().Name, mHandleStruct.Pointer.ToInt64()) + Return True + End Function + + #Region "Nested Structs" + + _ + Private Structure KISO_CONTEXT_MAP + ''' Additional ISO transfer flags. See \ref KISO_FLAG. + Private ReadOnly Flags As KISO_FLAG + + ''' Specifies the frame number that the transfer should begin on (0 for ASAP). + Private ReadOnly StartFrame As Integer + + ''' Contains the number of packets that completed with an error condition on return from the host controller driver. + Private ReadOnly ErrorCount As Short + + ''' Specifies the number of packets that are described by the variable-length array member \c IsoPacket. + Private ReadOnly NumberOfPackets As Short + + ''' Contains the URB Hdr.Status value on return from the host controller driver. + Private ReadOnly UrbHdrStatus As Integer + End Structure + + #End Region + + #Region "Public Members" + + ''' Creates a new isochronous transfer context. + Public Sub New(NumberOfPackets As Integer, StartFrame As Integer) + Dim success As Boolean = AllKFunctions.IsoK_Init(mHandleStruct, NumberOfPackets, StartFrame) + + If Not success Then + Throw New Exception(String.Format("{0} failed initializing. ErrorCode={1:X8}h", [GetType]().Name, Marshal.GetLastWin32Error())) + End If + + Debug.Print("{0} Init: handle 0x{1:X16}", [GetType]().Name, mHandleStruct.Pointer.ToInt64()) + End Sub + + ''' Convenience function for enumerating ISO packets of an isochronous transfer context. + Public Overridable Function EnumPackets(EnumPackets As KISO_ENUM_PACKETS_CB, StartPacketIndex As Integer, UserState As IntPtr) As Boolean + Return AllKFunctions.IsoK_EnumPackets(mHandleStruct, EnumPackets, StartPacketIndex, UserState) + End Function + + ''' Contains the number of packets that completed with an error condition on return from the host controller driver. + Public Property ErrorCount() As Short + Get + Return Marshal.ReadInt16(mHandleStruct.Pointer, ofsErrorCount) + End Get + Set + Marshal.WriteInt16(mHandleStruct.Pointer, ofsErrorCount, value) + End Set + End Property + + ''' Additional ISO transfer flags. See \ref KISO_FLAG. + Public Property Flags() As KISO_FLAG + Get + Return CType(Marshal.ReadInt32(mHandleStruct.Pointer, ofsFlags), KISO_FLAG) + End Get + Set + Marshal.WriteInt32(mHandleStruct.Pointer, ofsFlags, CInt(value)) + End Set + End Property + + ''' Calls the dispose method. + Public Overridable Sub Free() + Dispose() + End Sub + + ''' Convenience function for getting all fields of a \ref KISO_PACKET. + Public Overridable Function GetPacket(PacketIndex As Integer, ByRef IsoPacket As KISO_PACKET) As Boolean + Return AllKFunctions.IsoK_GetPacket(mHandleStruct, PacketIndex, IsoPacket) + End Function + + ''' Gets the handle class structure. + Public ReadOnly Property Handle() As KISO_CONTEXT + Get + Return mHandleStruct + End Get + End Property + + ''' Specifies the number of packets that are described by the variable-length array member \c IsoPacket. + Public Property NumberOfPackets() As Short + Get + Return Marshal.ReadInt16(mHandleStruct.Pointer, ofsNumberOfPackets) + End Get + Set + Marshal.WriteInt16(mHandleStruct.Pointer, ofsNumberOfPackets, value) + End Set + End Property + + ''' Convenience function for re-using an isochronous transfer context in a subsequent request. + Public Overridable Function ReUse() As Boolean + Return AllKFunctions.IsoK_ReUse(mHandleStruct) + End Function + + ''' Convenience function for setting all fields of a \ref KISO_PACKET. + Public Overridable Function SetPacket(PacketIndex As Integer, ByRef IsoPacket As KISO_PACKET) As Boolean + Return AllKFunctions.IsoK_SetPacket(mHandleStruct, PacketIndex, IsoPacket) + End Function + + ''' Convenience function for setting the offset of all ISO packets of an isochronous transfer context. + Public Overridable Function SetPackets(PacketSize As Integer) As Boolean + Return AllKFunctions.IsoK_SetPackets(mHandleStruct, PacketSize) + End Function + + ''' Specifies the frame number that the transfer should begin on (0 for ASAP). + Public Property StartFrame() As Integer + Get + Return Marshal.ReadInt32(mHandleStruct.Pointer, ofsStartFrame) + End Get + Set + Marshal.WriteInt32(mHandleStruct.Pointer, ofsStartFrame, value) + End Set + End Property + + ''' Contains the URB Hdr.Status value on return from the host controller driver. + Public Property UrbHdrStatus() As Integer + Get + Return Marshal.ReadInt32(mHandleStruct.Pointer, ofsUrbHdrStatus) + End Get + Set + Marshal.WriteInt32(mHandleStruct.Pointer, ofsUrbHdrStatus, value) + End Set + End Property + + #End Region + + #Region "Private Members" + + Private Shared ReadOnly ofsErrorCount As Integer = Marshal.OffsetOf(GetType(KISO_CONTEXT_MAP), "ErrorCount").ToInt32() + Private Shared ReadOnly ofsFlags As Integer = Marshal.OffsetOf(GetType(KISO_CONTEXT_MAP), "Flags").ToInt32() + Private Shared ReadOnly ofsNumberOfPackets As Integer = Marshal.OffsetOf(GetType(KISO_CONTEXT_MAP), "NumberOfPackets").ToInt32() + Private Shared ReadOnly ofsStartFrame As Integer = Marshal.OffsetOf(GetType(KISO_CONTEXT_MAP), "StartFrame").ToInt32() + Private Shared ReadOnly ofsUrbHdrStatus As Integer = Marshal.OffsetOf(GetType(KISO_CONTEXT_MAP), "UrbHdrStatus").ToInt32() + + #End Region + End Class +End Namespace diff --git a/Old Matlab Interface/.svn/pristine/18/1878abed33b62f38495f26e323231de6640f0b3b.svn-base b/Old Matlab Interface/.svn/pristine/18/1878abed33b62f38495f26e323231de6640f0b3b.svn-base new file mode 100644 index 00000000..30bd56e2 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/18/1878abed33b62f38495f26e323231de6640f0b3b.svn-base @@ -0,0 +1,25 @@ +%vdrop = 0 + +% for in = 1:10 +% setpsu(in) +% pause(5) +% end + +% clear all +% clc +% +% ro=22; + +vout22 = [0.38 1.32 2.26 3.25 4.19 5.12 6.12 7.05 7.93 8.94]; +iout22 = vout22/22; + +vout220 = [0.36 1.32 2.25 3.24 4.18 5.12 6.12 7.05 8.00 8.99]; + +vout_oc = [0.41 1.37 2.30 3.29 4.23 5.17 6.16 7.10 8.04 9.04]; + +p_oc = polyfit(vout_oc, 1:10, 1); +polyval(p_oc, 1:10); + +vos_22 = vout_oc - vout22; +p_ios = polyfit(1:10, (22/ro) * vos_22, 1); +polyval(p_ios, 1:10); diff --git a/Old Matlab Interface/.svn/pristine/1b/1bc1bc5b7cd5d326b0581de8e57be48ed902a1bf.svn-base b/Old Matlab Interface/.svn/pristine/1b/1bc1bc5b7cd5d326b0581de8e57be48ed902a1bf.svn-base new file mode 100644 index 00000000..cf20bd79 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/1b/1bc1bc5b7cd5d326b0581de8e57be48ed902a1bf.svn-base @@ -0,0 +1,10 @@ +function [returnval] = seconds_recorded() + +global saved_waveform_ch1 +global scope_mode + +if scope_mode == 5 + returnval = (length(saved_waveform_ch1)-750)/750000 +else + returnval = (length(saved_waveform_ch1)-750)/375000 +end \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/1c/1c4358dca057b00006ed90c0ffca5a5971e2adcd.svn-base b/Old Matlab Interface/.svn/pristine/1c/1c4358dca057b00006ed90c0ffca5a5971e2adcd.svn-base new file mode 100644 index 00000000..f5b0ea0c --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/1c/1c4358dca057b00006ed90c0ffca5a5971e2adcd.svn-base @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + + True + + \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/1d/1d1e0e7eb037bb37f68f7f6d3f68d1137f1fe193.svn-base b/Old Matlab Interface/.svn/pristine/1d/1d1e0e7eb037bb37f68f7f6d3f68d1137f1fe193.svn-base new file mode 100644 index 00000000..7d562888 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/1d/1d1e0e7eb037bb37f68f7f6d3f68d1137f1fe193.svn-base @@ -0,0 +1,375000 @@ +13 +14 +13 +14 +14 +14 +13 +14 +13 +13 +13 +13 +13 +14 +14 +14 +14 +13 +14 +14 +13 +14 +14 +13 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +28 +27 +27 +31 +31 +33 +33 +33 +36 +37 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +50 +51 +54 +54 +59 +58 +64 +64 +64 +68 +68 +72 +72 +72 +77 +76 +76 +76 +76 +83 +82 +86 +86 +86 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +116 +119 +120 +119 +126 +125 +130 +130 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +151 +151 +151 +157 +158 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +174 +175 +175 +178 +179 +183 +182 +183 +185 +185 +188 +188 +190 +191 +190 +194 +195 +197 +197 +196 +198 +198 +200 +200 +201 +201 +200 +202 +202 +202 +204 +205 +204 +204 +205 +206 +207 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +204 +204 +204 +204 +205 +202 +202 +202 +201 +201 +200 +200 +201 +198 +198 +196 +197 +194 +194 +195 +191 +191 +188 +189 +188 +184 +185 +185 +185 +185 +182 +183 +179 +179 +179 +175 +175 +173 +173 +171 +169 +169 +165 +165 +160 +161 +161 +157 +157 +151 +151 +151 +147 +147 +147 +146 +147 +143 +143 +139 +139 +140 +133 +133 +130 +129 +126 +125 +125 +119 +119 +116 +116 +115 +110 +109 +106 +105 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +87 +82 +82 +76 +77 +72 +72 +72 +68 +68 +65 +64 +65 +59 +58 +54 +55 +54 +51 +51 +46 +47 +47 +43 +43 +41 +41 +40 +37 +36 +33 +32 +32 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +13 +14 +13 +14 +14 +14 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +47 +47 +46 +50 +50 +54 +54 +54 +59 +58 +59 +58 +59 +65 +64 +68 +68 +69 +72 +72 +77 +76 +81 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +99 +106 +106 +110 +110 +109 +115 +116 +119 +119 +120 +125 +125 +129 +129 +132 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +164 +165 +169 +168 +169 +173 +173 +175 +175 +178 +178 +178 +183 +183 +184 +184 +184 +188 +189 +191 +191 +191 +195 +194 +197 +196 +196 +199 +198 +200 +201 +201 +200 +200 +202 +202 +205 +204 +204 +205 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +205 +204 +204 +203 +202 +201 +200 +200 +201 +201 +198 +198 +198 +196 +196 +197 +196 +196 +194 +194 +191 +191 +190 +189 +189 +184 +184 +185 +182 +183 +178 +178 +174 +175 +175 +173 +173 +169 +169 +169 +165 +165 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +144 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +126 +126 +120 +119 +116 +115 +115 +110 +110 +106 +105 +106 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +77 +76 +72 +72 +72 +68 +68 +64 +65 +65 +58 +59 +55 +55 +55 +51 +50 +47 +47 +43 +43 +42 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +12 +12 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +14 +14 +13 +13 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +28 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +46 +46 +46 +47 +51 +51 +55 +54 +55 +58 +58 +65 +65 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +91 +90 +96 +96 +96 +99 +100 +105 +106 +106 +110 +110 +116 +116 +119 +119 +119 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +178 +178 +183 +182 +182 +184 +185 +189 +188 +188 +190 +191 +194 +195 +195 +196 +196 +198 +198 +201 +200 +201 +200 +200 +203 +202 +203 +204 +204 +205 +205 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +207 +207 +206 +206 +204 +205 +205 +205 +205 +202 +202 +202 +202 +202 +200 +201 +200 +200 +200 +198 +199 +197 +197 +195 +195 +195 +190 +190 +188 +189 +188 +185 +185 +183 +183 +182 +179 +179 +179 +179 +179 +175 +175 +172 +173 +173 +169 +169 +165 +165 +164 +160 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +140 +139 +133 +133 +134 +129 +129 +125 +125 +126 +120 +119 +115 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +68 +68 +64 +65 +59 +58 +58 +55 +54 +51 +50 +50 +46 +46 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +14 +14 +13 +14 +14 +13 +13 +13 +13 +14 +13 +13 +14 +13 +14 +14 +13 +13 +13 +14 +14 +13 +13 +13 +13 +14 +14 +13 +15 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +26 +27 +27 +31 +31 +30 +31 +31 +33 +33 +37 +37 +37 +41 +40 +43 +43 +44 +47 +46 +51 +50 +54 +54 +54 +58 +59 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +83 +82 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +116 +120 +120 +125 +125 +125 +130 +129 +133 +133 +133 +139 +138 +143 +143 +146 +147 +148 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +184 +184 +189 +189 +189 +191 +190 +195 +195 +195 +196 +196 +198 +199 +199 +200 +200 +200 +200 +200 +203 +203 +204 +204 +205 +204 +204 +206 +206 +207 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +204 +204 +204 +204 +205 +203 +203 +202 +200 +200 +200 +200 +198 +199 +198 +196 +196 +194 +194 +195 +190 +190 +191 +191 +190 +188 +188 +185 +184 +185 +183 +183 +178 +179 +175 +175 +174 +173 +173 +169 +169 +168 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +140 +133 +133 +132 +129 +129 +125 +126 +120 +119 +119 +116 +116 +110 +110 +109 +106 +106 +100 +100 +100 +97 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +59 +59 +54 +54 +51 +51 +51 +47 +47 +42 +42 +43 +41 +41 +37 +37 +33 +33 +33 +31 +31 +31 +31 +31 +27 +27 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +18 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +14 +14 +14 +14 +13 +13 +13 +14 +13 +14 +14 +14 +14 +14 +13 +13 +14 +13 +13 +14 +13 +14 +14 +14 +13 +13 +14 +13 +14 +14 +13 +15 +15 +15 +15 +15 +17 +17 +17 +19 +19 +21 +21 +24 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +50 +54 +54 +59 +59 +64 +65 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +99 +100 +106 +106 +110 +110 +115 +115 +115 +119 +119 +125 +125 +125 +129 +129 +130 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +156 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +178 +183 +182 +183 +185 +185 +188 +189 +189 +191 +190 +194 +194 +196 +196 +197 +198 +198 +201 +201 +200 +200 +200 +201 +200 +200 +202 +202 +205 +204 +204 +204 +205 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +204 +205 +205 +204 +204 +204 +204 +202 +203 +203 +200 +200 +200 +200 +199 +198 +199 +196 +197 +194 +194 +195 +190 +190 +188 +188 +188 +185 +185 +183 +183 +183 +179 +178 +175 +175 +175 +173 +173 +168 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +140 +133 +133 +129 +129 +130 +126 +125 +119 +120 +116 +115 +115 +110 +109 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +65 +65 +64 +58 +58 +54 +54 +54 +50 +50 +46 +46 +47 +43 +43 +41 +41 +40 +37 +37 +33 +32 +33 +31 +31 +27 +26 +25 +24 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +14 +14 +14 +13 +13 +13 +14 +13 +13 +14 +14 +13 +13 +14 +13 +13 +14 +13 +13 +14 +14 +14 +13 +14 +13 +13 +13 +13 +15 +15 +17 +17 +19 +18 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +40 +43 +42 +46 +47 +47 +50 +50 +54 +54 +55 +58 +59 +64 +64 +65 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +109 +110 +116 +115 +116 +120 +120 +126 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +158 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +180 +183 +183 +184 +185 +188 +189 +188 +191 +191 +195 +194 +195 +197 +196 +199 +198 +198 +200 +201 +201 +200 +200 +202 +202 +204 +204 +204 +204 +205 +206 +207 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +201 +200 +200 +200 +200 +198 +199 +199 +197 +196 +195 +194 +195 +190 +191 +189 +189 +188 +185 +184 +182 +182 +183 +179 +179 +175 +174 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +150 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +126 +125 +126 +120 +119 +116 +116 +115 +110 +110 +106 +106 +106 +100 +100 +95 +96 +96 +90 +89 +86 +86 +86 +82 +82 +76 +76 +73 +72 +72 +68 +68 +64 +64 +64 +59 +59 +54 +55 +54 +50 +51 +47 +46 +46 +43 +43 +41 +41 +42 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +16 +13 +13 +12 +13 +14 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +13 +14 +14 +14 +14 +14 +14 +14 +13 +14 +14 +13 +13 +13 +14 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +46 +47 +50 +50 +50 +55 +55 +58 +59 +59 +64 +64 +68 +68 +68 +73 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +116 +119 +119 +120 +125 +126 +129 +129 +134 +133 +134 +139 +139 +143 +143 +143 +147 +147 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +166 +169 +169 +172 +173 +174 +175 +175 +179 +179 +182 +183 +182 +184 +184 +189 +188 +188 +190 +190 +194 +194 +194 +197 +197 +198 +198 +199 +201 +201 +200 +201 +202 +202 +203 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +204 +204 +204 +204 +205 +202 +202 +200 +200 +200 +200 +200 +198 +198 +199 +196 +197 +195 +194 +195 +191 +191 +189 +188 +184 +185 +184 +182 +182 +179 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +130 +125 +125 +125 +119 +119 +116 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +73 +72 +72 +68 +68 +65 +64 +64 +58 +58 +54 +54 +55 +50 +50 +46 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +27 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +14 +14 +13 +13 +13 +14 +14 +14 +14 +13 +13 +14 +13 +13 +14 +13 +14 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +26 +27 +27 +31 +31 +33 +34 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +46 +50 +50 +54 +54 +55 +58 +58 +64 +64 +69 +68 +68 +72 +72 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +115 +119 +120 +119 +126 +125 +129 +129 +129 +133 +133 +139 +140 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +168 +169 +169 +173 +173 +175 +175 +175 +178 +179 +178 +178 +179 +183 +183 +185 +184 +184 +188 +189 +191 +190 +192 +194 +194 +196 +196 +198 +198 +198 +200 +200 +200 +200 +200 +202 +202 +202 +202 +202 +204 +204 +204 +205 +204 +206 +207 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +203 +202 +200 +201 +200 +201 +201 +198 +198 +196 +196 +194 +194 +194 +190 +190 +188 +188 +189 +185 +184 +183 +183 +182 +178 +179 +174 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +130 +129 +125 +125 +120 +119 +120 +115 +115 +109 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +69 +65 +64 +58 +58 +55 +55 +54 +50 +51 +47 +47 +47 +43 +43 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +29 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +13 +14 +14 +14 +14 +14 +14 +14 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +15 +15 +15 +16 +17 +17 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +30 +31 +31 +33 +33 +37 +37 +37 +41 +40 +43 +43 +47 +46 +47 +51 +51 +55 +54 +54 +58 +58 +64 +65 +65 +68 +68 +73 +72 +72 +76 +76 +82 +82 +83 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +116 +116 +119 +120 +126 +126 +126 +129 +130 +133 +134 +133 +139 +139 +143 +143 +148 +147 +147 +151 +151 +157 +157 +157 +161 +161 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +178 +179 +183 +183 +185 +184 +184 +189 +188 +190 +190 +191 +194 +194 +195 +195 +195 +197 +196 +198 +198 +198 +200 +201 +200 +200 +201 +203 +203 +204 +204 +204 +205 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +204 +204 +204 +204 +202 +202 +202 +200 +200 +200 +201 +201 +198 +198 +197 +197 +196 +194 +195 +190 +190 +191 +189 +188 +184 +184 +185 +182 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +164 +161 +161 +161 +157 +157 +152 +151 +151 +147 +147 +143 +144 +143 +139 +140 +134 +133 +130 +129 +129 +125 +126 +120 +119 +120 +116 +116 +115 +116 +115 +110 +110 +106 +106 +105 +100 +100 +96 +96 +96 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +68 +68 +68 +64 +64 +59 +59 +59 +55 +55 +51 +50 +49 +47 +46 +43 +43 +40 +41 +41 +37 +37 +33 +32 +33 +31 +31 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +14 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +26 +32 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +50 +50 +54 +54 +59 +59 +59 +64 +64 +68 +68 +72 +72 +72 +76 +82 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +99 +105 +106 +109 +109 +111 +115 +116 +120 +120 +125 +126 +126 +129 +129 +133 +134 +133 +139 +139 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +156 +157 +158 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +179 +179 +179 +183 +182 +185 +185 +185 +188 +188 +191 +190 +194 +195 +195 +196 +196 +198 +198 +198 +201 +201 +200 +201 +200 +202 +202 +205 +204 +204 +204 +204 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +205 +204 +204 +204 +202 +202 +201 +200 +200 +200 +200 +198 +198 +199 +197 +196 +195 +194 +190 +191 +190 +188 +189 +184 +185 +184 +183 +183 +179 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +152 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +126 +119 +119 +115 +115 +116 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +69 +65 +64 +65 +58 +58 +54 +54 +51 +50 +51 +46 +47 +43 +43 +43 +41 +41 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +14 +13 +14 +13 +13 +13 +14 +14 +13 +13 +13 +13 +13 +14 +13 +13 +15 +15 +15 +17 +17 +20 +19 +21 +21 +21 +25 +24 +27 +27 +27 +31 +30 +33 +33 +33 +37 +37 +41 +41 +41 +43 +42 +46 +47 +47 +51 +50 +55 +54 +58 +58 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +101 +106 +105 +109 +110 +110 +115 +116 +119 +119 +120 +126 +126 +126 +125 +125 +129 +129 +134 +133 +133 +139 +139 +143 +143 +144 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +169 +169 +172 +173 +175 +175 +175 +178 +179 +183 +183 +183 +185 +185 +188 +189 +190 +190 +190 +194 +195 +196 +196 +196 +198 +198 +200 +201 +200 +200 +200 +202 +202 +203 +205 +204 +204 +204 +206 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +205 +204 +204 +205 +204 +202 +203 +203 +200 +201 +200 +200 +198 +198 +198 +196 +196 +194 +195 +194 +190 +191 +189 +188 +189 +185 +184 +183 +182 +182 +179 +179 +174 +175 +175 +172 +173 +169 +169 +165 +164 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +140 +139 +133 +133 +129 +129 +129 +125 +125 +119 +120 +115 +116 +116 +110 +110 +106 +106 +106 +100 +100 +100 +100 +99 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +68 +68 +68 +64 +65 +58 +59 +58 +54 +55 +55 +54 +55 +51 +51 +47 +46 +47 +43 +43 +41 +41 +39 +37 +37 +33 +33 +31 +31 +31 +28 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +14 +13 +14 +14 +14 +14 +14 +13 +13 +13 +14 +13 +13 +14 +13 +13 +14 +14 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +22 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +43 +43 +43 +46 +47 +50 +51 +51 +55 +55 +58 +58 +58 +65 +64 +68 +68 +69 +72 +72 +76 +76 +77 +82 +82 +86 +86 +90 +90 +90 +95 +96 +100 +100 +100 +105 +106 +106 +106 +106 +110 +110 +115 +116 +115 +120 +120 +126 +125 +126 +129 +130 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +172 +173 +173 +175 +174 +179 +178 +179 +183 +182 +184 +185 +185 +189 +189 +190 +190 +191 +194 +195 +196 +196 +197 +199 +198 +200 +200 +200 +200 +201 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +204 +204 +205 +204 +204 +202 +202 +200 +201 +200 +200 +200 +198 +199 +198 +196 +197 +195 +194 +194 +190 +191 +188 +189 +189 +185 +184 +182 +183 +179 +179 +179 +175 +174 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +134 +133 +133 +130 +130 +125 +126 +126 +119 +119 +120 +119 +119 +116 +116 +110 +109 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +87 +86 +86 +82 +82 +76 +76 +76 +72 +72 +72 +72 +72 +68 +68 +65 +64 +64 +58 +58 +55 +54 +53 +50 +50 +46 +47 +43 +43 +42 +41 +41 +37 +37 +37 +32 +33 +31 +30 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +13 +14 +14 +14 +13 +14 +14 +14 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +32 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +50 +54 +54 +58 +59 +59 +65 +65 +68 +68 +72 +72 +73 +76 +76 +82 +82 +82 +86 +86 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +107 +110 +110 +116 +116 +120 +120 +120 +125 +126 +129 +130 +129 +133 +133 +134 +133 +133 +139 +139 +143 +143 +144 +147 +147 +151 +151 +153 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +185 +185 +185 +188 +189 +191 +190 +194 +194 +194 +196 +196 +198 +199 +198 +201 +201 +200 +200 +201 +202 +202 +204 +205 +204 +204 +204 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +205 +205 +204 +205 +205 +205 +202 +202 +202 +200 +200 +200 +201 +200 +198 +199 +196 +197 +195 +194 +194 +191 +191 +188 +189 +188 +185 +185 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +156 +157 +157 +151 +151 +147 +147 +147 +144 +143 +143 +143 +143 +140 +139 +133 +133 +133 +129 +129 +125 +125 +123 +120 +119 +116 +116 +109 +110 +110 +106 +106 +100 +100 +100 +96 +96 +96 +96 +96 +90 +90 +86 +86 +87 +82 +82 +76 +76 +73 +72 +72 +68 +68 +64 +64 +64 +58 +58 +55 +55 +54 +51 +50 +47 +47 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +31 +31 +31 +27 +26 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +14 +14 +13 +13 +14 +14 +13 +14 +14 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +15 +15 +18 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +32 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +46 +50 +51 +51 +54 +55 +58 +59 +58 +64 +65 +64 +64 +64 +69 +68 +73 +72 +72 +76 +76 +82 +82 +83 +86 +87 +90 +90 +95 +96 +96 +100 +100 +105 +106 +106 +110 +109 +109 +110 +110 +115 +116 +119 +120 +120 +125 +125 +130 +130 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +172 +173 +175 +174 +178 +179 +179 +182 +183 +185 +184 +184 +189 +189 +190 +191 +190 +195 +194 +196 +196 +197 +199 +198 +201 +200 +201 +200 +201 +202 +202 +205 +204 +204 +204 +204 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +204 +205 +205 +204 +203 +202 +202 +200 +200 +200 +201 +200 +198 +198 +196 +197 +196 +195 +194 +191 +190 +191 +188 +189 +185 +185 +185 +183 +182 +179 +179 +175 +175 +174 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +141 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +120 +120 +115 +116 +115 +115 +115 +110 +110 +106 +106 +106 +99 +100 +96 +96 +93 +90 +90 +86 +86 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +69 +69 +64 +64 +59 +59 +58 +55 +54 +51 +50 +46 +47 +47 +42 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +16 +15 +15 +15 +16 +15 +15 +15 +13 +13 +12 +13 +13 +14 +14 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +13 +14 +14 +13 +14 +14 +13 +14 +13 +14 +14 +14 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +22 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +36 +41 +41 +41 +41 +41 +43 +43 +47 +47 +47 +50 +50 +54 +55 +55 +59 +58 +64 +64 +68 +68 +68 +73 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +97 +100 +100 +106 +106 +109 +110 +110 +116 +115 +119 +120 +119 +125 +125 +130 +129 +129 +133 +133 +139 +140 +139 +143 +143 +147 +147 +148 +151 +151 +157 +157 +161 +161 +162 +165 +165 +169 +169 +169 +173 +173 +175 +174 +175 +179 +179 +182 +183 +182 +184 +184 +188 +188 +189 +191 +191 +195 +194 +197 +197 +196 +198 +199 +200 +200 +201 +200 +201 +202 +202 +202 +204 +204 +204 +204 +204 +206 +207 +207 +206 +207 +206 +206 +206 +207 +207 +206 +207 +206 +206 +204 +204 +204 +205 +204 +202 +202 +202 +200 +201 +200 +201 +201 +198 +199 +197 +197 +197 +195 +195 +190 +190 +188 +189 +189 +185 +184 +183 +182 +182 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +160 +161 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +133 +133 +133 +129 +129 +125 +125 +126 +119 +119 +116 +115 +110 +109 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +59 +59 +59 +54 +54 +50 +50 +50 +46 +47 +43 +43 +43 +41 +40 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +22 +21 +21 +19 +19 +17 +18 +17 +14 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +14 +14 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +14 +13 +14 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +26 +25 +25 +27 +27 +31 +31 +31 +33 +33 +33 +33 +33 +37 +37 +40 +41 +41 +43 +43 +47 +47 +47 +51 +50 +54 +55 +58 +59 +59 +65 +64 +68 +68 +68 +72 +72 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +95 +97 +95 +100 +100 +105 +106 +106 +109 +110 +116 +115 +116 +120 +119 +125 +126 +125 +129 +129 +134 +133 +134 +139 +139 +143 +143 +146 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +164 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +184 +185 +188 +188 +188 +191 +191 +194 +194 +194 +197 +197 +198 +198 +198 +200 +201 +200 +200 +200 +203 +202 +204 +204 +205 +204 +205 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +204 +205 +204 +204 +204 +202 +202 +201 +200 +201 +200 +201 +199 +198 +196 +196 +197 +195 +194 +190 +191 +190 +188 +189 +189 +189 +188 +184 +185 +183 +183 +182 +179 +179 +175 +175 +173 +172 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +134 +133 +131 +129 +129 +125 +125 +119 +119 +119 +115 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +68 +68 +64 +64 +59 +58 +58 +55 +54 +51 +50 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +34 +33 +33 +31 +31 +27 +28 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +14 +13 +14 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +14 +14 +14 +14 +14 +14 +13 +14 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +38 +41 +41 +43 +43 +46 +47 +47 +51 +51 +54 +54 +54 +59 +58 +58 +58 +59 +64 +65 +68 +68 +68 +73 +72 +76 +76 +81 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +105 +106 +110 +110 +110 +116 +116 +119 +119 +120 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +152 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +178 +179 +178 +182 +183 +184 +185 +184 +188 +188 +191 +191 +191 +195 +194 +197 +197 +196 +199 +198 +200 +200 +200 +200 +200 +203 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +204 +204 +204 +204 +204 +202 +203 +200 +200 +201 +200 +200 +199 +198 +199 +197 +197 +197 +196 +196 +195 +194 +190 +190 +191 +189 +188 +185 +185 +185 +182 +183 +178 +178 +179 +178 +179 +175 +175 +173 +172 +173 +169 +169 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +148 +147 +147 +143 +143 +139 +139 +139 +134 +133 +130 +129 +129 +125 +125 +119 +119 +120 +115 +116 +109 +109 +110 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +77 +76 +72 +72 +68 +69 +68 +65 +64 +58 +58 +59 +55 +55 +51 +51 +47 +47 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +14 +13 +13 +14 +13 +14 +14 +14 +13 +13 +14 +14 +14 +13 +13 +13 +14 +13 +13 +14 +14 +13 +13 +14 +14 +13 +15 +15 +15 +15 +15 +17 +17 +17 +19 +19 +21 +21 +23 +25 +25 +27 +27 +31 +31 +31 +33 +33 +36 +36 +37 +41 +41 +41 +41 +41 +43 +43 +47 +47 +47 +51 +51 +55 +54 +58 +58 +58 +64 +64 +69 +68 +68 +72 +72 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +109 +109 +110 +116 +116 +120 +119 +119 +125 +125 +126 +126 +125 +129 +130 +134 +134 +133 +139 +139 +143 +143 +144 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +179 +182 +182 +184 +185 +185 +188 +188 +191 +190 +195 +194 +194 +196 +196 +199 +199 +198 +201 +200 +200 +201 +200 +200 +201 +203 +202 +202 +205 +204 +204 +204 +204 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +203 +200 +200 +200 +200 +201 +198 +198 +196 +197 +194 +195 +195 +190 +190 +189 +189 +188 +185 +185 +185 +184 +184 +183 +183 +179 +179 +178 +175 +175 +173 +172 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +134 +129 +129 +125 +125 +120 +119 +119 +115 +115 +110 +110 +109 +105 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +77 +76 +72 +72 +68 +68 +68 +64 +64 +58 +59 +58 +55 +55 +51 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +32 +31 +31 +28 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +14 +13 +14 +13 +13 +14 +14 +14 +14 +14 +13 +14 +13 +14 +14 +14 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +15 +15 +17 +16 +17 +19 +19 +21 +21 +21 +25 +25 +25 +25 +25 +27 +27 +30 +31 +31 +33 +33 +37 +37 +40 +41 +41 +43 +43 +47 +47 +47 +50 +50 +55 +54 +54 +58 +58 +64 +65 +64 +68 +68 +72 +72 +73 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +95 +96 +99 +100 +106 +106 +106 +110 +110 +115 +116 +116 +119 +119 +125 +125 +126 +129 +130 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +172 +175 +175 +179 +179 +183 +182 +183 +184 +185 +188 +188 +188 +191 +190 +195 +194 +194 +196 +196 +198 +198 +198 +200 +201 +200 +200 +201 +203 +203 +205 +205 +204 +204 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +205 +203 +202 +200 +200 +200 +201 +200 +198 +198 +198 +196 +196 +196 +196 +196 +194 +194 +190 +190 +191 +189 +188 +184 +184 +183 +183 +183 +179 +179 +174 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +152 +151 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +130 +129 +125 +126 +120 +119 +119 +116 +115 +110 +109 +110 +105 +106 +100 +100 +100 +96 +96 +89 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +58 +58 +54 +54 +51 +51 +51 +47 +47 +43 +42 +40 +41 +41 +37 +37 +33 +33 +33 +31 +31 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +20 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +12 +13 +13 +14 +13 +13 +14 +14 +14 +13 +14 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +14 +13 +13 +13 +14 +13 +13 +12 +15 +15 +15 +16 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +26 +27 +26 +31 +31 +33 +33 +33 +37 +37 +41 +41 +40 +43 +43 +46 +47 +47 +50 +50 +55 +55 +55 +59 +58 +64 +65 +68 +69 +68 +73 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +120 +119 +119 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +183 +184 +185 +189 +188 +189 +191 +190 +194 +195 +195 +196 +196 +198 +198 +200 +200 +201 +200 +200 +202 +203 +202 +204 +204 +205 +204 +204 +204 +204 +207 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +205 +204 +202 +202 +202 +202 +202 +200 +200 +200 +200 +200 +198 +199 +196 +196 +195 +194 +195 +190 +191 +188 +188 +189 +185 +185 +183 +183 +183 +178 +179 +175 +174 +175 +173 +173 +168 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +130 +129 +125 +125 +120 +119 +120 +116 +115 +110 +110 +106 +106 +106 +100 +99 +96 +95 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +73 +68 +68 +68 +64 +64 +58 +58 +55 +54 +54 +51 +51 +47 +47 +47 +42 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +22 +20 +19 +19 +17 +17 +15 +15 +15 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +13 +14 +14 +14 +14 +14 +13 +14 +14 +13 +13 +13 +14 +13 +13 +14 +13 +13 +14 +14 +13 +13 +13 +13 +14 +13 +12 +16 +15 +16 +17 +17 +19 +19 +22 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +36 +36 +41 +41 +41 +43 +43 +47 +47 +48 +51 +51 +55 +55 +58 +59 +58 +64 +64 +69 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +115 +120 +120 +119 +125 +126 +129 +129 +129 +134 +133 +139 +139 +139 +143 +143 +147 +147 +151 +151 +150 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +178 +179 +183 +182 +183 +185 +185 +188 +189 +190 +190 +190 +195 +194 +196 +196 +197 +198 +199 +199 +198 +198 +200 +201 +200 +201 +201 +202 +202 +205 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +204 +204 +205 +204 +204 +202 +202 +201 +200 +201 +200 +200 +198 +198 +198 +197 +197 +194 +194 +194 +191 +191 +189 +188 +189 +185 +184 +183 +183 +183 +178 +179 +175 +175 +173 +173 +172 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +125 +125 +125 +119 +120 +116 +115 +116 +110 +110 +106 +106 +106 +100 +96 +96 +96 +96 +90 +89 +86 +86 +87 +82 +82 +76 +76 +73 +72 +72 +68 +69 +64 +64 +64 +58 +58 +54 +54 +54 +51 +50 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +22 +21 +21 +21 +19 +20 +17 +18 +16 +15 +16 +15 +15 +15 +13 +13 +13 +13 +14 +13 +14 +14 +14 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +14 +14 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +30 +33 +33 +36 +36 +37 +41 +41 +43 +43 +43 +47 +47 +51 +50 +51 +55 +55 +58 +59 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +83 +82 +82 +86 +86 +90 +90 +90 +96 +96 +96 +96 +96 +100 +100 +105 +106 +106 +110 +110 +115 +115 +116 +119 +120 +125 +125 +130 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +166 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +182 +183 +185 +185 +188 +188 +189 +191 +191 +195 +194 +194 +196 +196 +198 +198 +199 +200 +201 +201 +200 +202 +203 +202 +204 +204 +204 +204 +205 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +205 +205 +204 +204 +204 +203 +203 +201 +200 +201 +200 +201 +198 +198 +198 +197 +196 +194 +195 +194 +191 +190 +189 +189 +184 +184 +185 +183 +183 +179 +178 +179 +175 +175 +173 +173 +172 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +144 +143 +143 +139 +139 +133 +133 +133 +129 +129 +129 +129 +129 +125 +126 +119 +120 +120 +115 +115 +110 +110 +110 +106 +106 +100 +99 +97 +96 +96 +90 +90 +86 +85 +86 +82 +82 +76 +77 +77 +72 +72 +68 +69 +68 +64 +64 +58 +58 +59 +55 +54 +51 +50 +47 +47 +47 +43 +43 +41 +40 +41 +37 +37 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +26 +26 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +14 +13 +14 +14 +14 +13 +14 +13 +13 +13 +14 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +40 +41 +43 +43 +47 +47 +47 +51 +50 +55 +55 +58 +58 +58 +65 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +95 +96 +100 +100 +106 +106 +111 +110 +110 +116 +115 +116 +116 +116 +120 +119 +125 +125 +126 +129 +129 +133 +133 +134 +139 +139 +143 +143 +143 +147 +148 +151 +151 +158 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +178 +178 +183 +183 +182 +184 +184 +189 +188 +190 +190 +190 +194 +194 +196 +196 +197 +198 +198 +200 +200 +201 +200 +201 +200 +201 +200 +202 +202 +205 +204 +205 +204 +205 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +207 +207 +204 +204 +204 +204 +205 +202 +202 +200 +200 +201 +200 +201 +199 +199 +197 +197 +197 +195 +194 +191 +190 +190 +188 +189 +185 +184 +184 +182 +182 +179 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +130 +126 +125 +119 +119 +116 +115 +116 +110 +110 +106 +105 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +72 +72 +68 +68 +65 +64 +64 +58 +58 +55 +54 +55 +51 +51 +51 +50 +50 +47 +46 +42 +43 +43 +41 +41 +37 +37 +35 +33 +33 +31 +31 +26 +27 +27 +25 +25 +21 +21 +21 +19 +19 +18 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +14 +13 +14 +14 +13 +14 +14 +13 +13 +14 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +15 +15 +17 +18 +18 +19 +19 +20 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +36 +37 +41 +41 +43 +43 +43 +46 +47 +51 +51 +51 +55 +55 +54 +54 +55 +59 +58 +64 +65 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +87 +86 +87 +90 +90 +96 +96 +96 +99 +100 +106 +105 +106 +110 +110 +115 +115 +115 +119 +119 +125 +126 +126 +129 +130 +133 +133 +140 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +182 +183 +182 +185 +184 +189 +188 +189 +191 +191 +191 +190 +191 +194 +194 +197 +196 +197 +198 +199 +201 +200 +201 +200 +201 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +204 +204 +205 +205 +205 +202 +203 +200 +200 +200 +200 +200 +198 +198 +198 +197 +196 +195 +194 +194 +190 +191 +188 +189 +189 +185 +184 +182 +182 +178 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +134 +134 +133 +129 +129 +125 +125 +126 +120 +120 +115 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +68 +68 +69 +64 +64 +58 +58 +59 +54 +55 +50 +50 +49 +47 +47 +42 +43 +41 +41 +41 +36 +37 +33 +33 +33 +31 +31 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +16 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +13 +14 +14 +13 +13 +14 +13 +14 +14 +13 +13 +13 +14 +13 +14 +13 +14 +14 +13 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +31 +31 +31 +33 +32 +37 +37 +37 +41 +41 +43 +42 +43 +47 +47 +50 +50 +51 +55 +54 +59 +58 +59 +64 +64 +69 +68 +73 +72 +72 +76 +76 +82 +82 +82 +86 +86 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +105 +106 +110 +110 +115 +116 +119 +119 +120 +125 +125 +129 +129 +129 +133 +134 +134 +133 +134 +139 +139 +143 +143 +143 +147 +147 +151 +151 +153 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +174 +175 +175 +179 +179 +183 +183 +183 +185 +185 +188 +188 +189 +190 +191 +195 +194 +197 +196 +197 +198 +198 +200 +201 +200 +201 +201 +202 +202 +202 +204 +204 +204 +205 +205 +206 +206 +206 +206 +206 +207 +207 +206 +207 +206 +206 +206 +207 +206 +204 +204 +205 +204 +204 +202 +202 +202 +200 +201 +201 +200 +201 +198 +199 +196 +197 +194 +195 +195 +191 +191 +189 +188 +189 +185 +185 +183 +182 +182 +179 +179 +175 +175 +175 +173 +173 +168 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +143 +143 +143 +139 +139 +133 +134 +133 +130 +129 +125 +125 +126 +120 +119 +116 +116 +109 +109 +110 +106 +106 +100 +100 +100 +96 +96 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +72 +72 +68 +68 +64 +64 +64 +59 +59 +54 +54 +55 +50 +51 +51 +51 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +34 +32 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +14 +13 +13 +13 +13 +13 +13 +14 +14 +14 +14 +13 +13 +13 +13 +14 +14 +14 +13 +14 +13 +13 +13 +14 +13 +12 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +42 +47 +47 +47 +50 +51 +55 +54 +55 +58 +58 +64 +64 +64 +69 +68 +72 +72 +73 +77 +76 +82 +82 +82 +86 +86 +90 +90 +97 +96 +96 +100 +100 +106 +106 +106 +110 +109 +116 +116 +116 +119 +119 +125 +125 +125 +129 +130 +134 +133 +134 +139 +140 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +176 +179 +179 +182 +182 +184 +184 +185 +188 +189 +190 +191 +190 +194 +194 +197 +197 +197 +198 +198 +201 +200 +201 +200 +201 +202 +203 +204 +205 +205 +205 +205 +206 +207 +206 +206 +206 +206 +207 +206 +206 +206 +207 +207 +206 +207 +206 +204 +204 +204 +204 +205 +202 +202 +201 +201 +201 +200 +201 +199 +198 +198 +197 +196 +194 +195 +195 +190 +191 +188 +189 +188 +185 +184 +183 +182 +183 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +164 +161 +161 +157 +157 +157 +152 +151 +147 +147 +147 +143 +143 +139 +139 +141 +133 +133 +129 +129 +126 +125 +126 +120 +120 +115 +116 +115 +110 +109 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +76 +77 +76 +72 +72 +69 +68 +68 +64 +65 +64 +65 +65 +58 +59 +55 +54 +55 +51 +50 +47 +47 +44 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +13 +14 +14 +14 +13 +14 +13 +13 +13 +14 +13 +14 +14 +14 +14 +14 +14 +13 +14 +14 +14 +14 +13 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +28 +31 +31 +33 +33 +38 +37 +37 +41 +40 +43 +43 +42 +47 +47 +50 +50 +51 +54 +55 +58 +59 +58 +65 +65 +68 +68 +68 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +91 +96 +96 +100 +100 +99 +106 +106 +110 +110 +110 +116 +115 +119 +119 +122 +125 +125 +129 +130 +133 +133 +134 +140 +139 +143 +143 +143 +147 +147 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +168 +169 +169 +173 +173 +175 +175 +175 +178 +178 +183 +183 +183 +184 +185 +188 +189 +188 +191 +191 +194 +195 +195 +196 +197 +198 +198 +200 +201 +200 +200 +200 +202 +202 +202 +204 +204 +204 +205 +204 +207 +206 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +205 +205 +204 +204 +202 +202 +202 +200 +200 +200 +201 +201 +199 +199 +197 +196 +196 +195 +195 +191 +191 +191 +188 +189 +185 +184 +183 +183 +183 +179 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +152 +147 +147 +143 +143 +139 +139 +140 +133 +133 +129 +129 +129 +125 +125 +120 +119 +120 +116 +115 +110 +109 +110 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +72 +72 +72 +68 +68 +64 +64 +64 +59 +59 +54 +54 +51 +50 +51 +47 +46 +42 +42 +42 +41 +41 +37 +37 +37 +32 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +13 +14 +13 +14 +13 +14 +14 +14 +13 +14 +14 +14 +13 +13 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +32 +31 +31 +33 +33 +37 +37 +37 +40 +41 +43 +43 +43 +46 +47 +51 +51 +51 +55 +55 +59 +58 +59 +64 +64 +68 +68 +73 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +105 +106 +110 +110 +112 +116 +115 +120 +119 +125 +125 +126 +129 +130 +133 +133 +134 +139 +139 +139 +139 +139 +143 +143 +147 +148 +147 +151 +151 +157 +157 +158 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +183 +185 +185 +189 +189 +189 +191 +191 +194 +194 +196 +196 +196 +199 +198 +200 +200 +200 +200 +200 +202 +202 +202 +204 +205 +205 +205 +204 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +207 +206 +207 +206 +204 +204 +205 +204 +204 +202 +202 +202 +201 +200 +200 +200 +200 +199 +199 +196 +197 +196 +195 +195 +191 +191 +189 +188 +189 +184 +185 +182 +182 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +148 +147 +147 +143 +143 +139 +139 +139 +133 +133 +133 +133 +133 +130 +130 +126 +125 +125 +120 +119 +115 +115 +113 +109 +110 +106 +106 +100 +99 +100 +96 +96 +90 +90 +90 +86 +86 +86 +86 +86 +82 +82 +76 +77 +77 +72 +72 +68 +69 +65 +64 +64 +58 +58 +55 +54 +55 +50 +50 +47 +47 +47 +42 +43 +41 +41 +41 +37 +37 +32 +33 +33 +31 +31 +27 +27 +26 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +14 +14 +14 +14 +13 +14 +14 +13 +14 +13 +14 +14 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +20 +19 +21 +21 +21 +25 +24 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +40 +41 +41 +43 +42 +47 +47 +47 +51 +50 +54 +55 +59 +58 +58 +64 +65 +68 +68 +69 +72 +72 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +92 +96 +96 +100 +100 +106 +106 +105 +110 +109 +115 +116 +116 +119 +120 +119 +119 +119 +126 +125 +129 +129 +129 +133 +133 +139 +139 +141 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +164 +165 +169 +169 +169 +173 +173 +175 +174 +175 +179 +178 +183 +183 +184 +185 +184 +189 +189 +190 +190 +191 +195 +195 +197 +196 +196 +198 +198 +201 +201 +201 +200 +200 +203 +202 +202 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +207 +206 +206 +206 +206 +204 +204 +204 +204 +204 +203 +203 +202 +200 +201 +200 +201 +199 +199 +199 +196 +196 +194 +195 +194 +190 +190 +188 +188 +189 +184 +185 +182 +182 +183 +178 +179 +175 +175 +175 +173 +173 +169 +169 +166 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +148 +143 +143 +139 +139 +139 +133 +133 +130 +130 +127 +125 +125 +119 +119 +115 +115 +116 +110 +110 +106 +106 +106 +100 +100 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +83 +83 +77 +76 +76 +72 +72 +68 +68 +69 +64 +64 +59 +59 +58 +54 +55 +50 +50 +51 +47 +47 +43 +43 +43 +41 +40 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +14 +14 +14 +14 +13 +14 +14 +13 +13 +13 +14 +13 +14 +13 +14 +14 +14 +13 +14 +13 +14 +13 +13 +14 +13 +13 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +42 +47 +47 +47 +50 +51 +55 +54 +54 +58 +58 +64 +64 +65 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +109 +110 +110 +115 +115 +119 +119 +120 +126 +125 +129 +129 +133 +133 +133 +140 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +168 +169 +169 +169 +169 +173 +173 +175 +175 +175 +178 +179 +183 +183 +183 +184 +185 +188 +189 +189 +190 +190 +195 +194 +194 +196 +197 +198 +199 +198 +200 +200 +200 +200 +202 +203 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +206 +204 +204 +205 +204 +204 +202 +202 +200 +200 +200 +200 +200 +199 +198 +198 +196 +197 +195 +195 +194 +191 +190 +188 +188 +189 +184 +185 +183 +183 +178 +178 +179 +175 +175 +173 +173 +173 +169 +169 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +149 +147 +147 +143 +143 +139 +139 +139 +133 +134 +129 +130 +129 +125 +125 +126 +125 +126 +120 +119 +115 +116 +116 +110 +109 +106 +106 +101 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +77 +72 +72 +72 +69 +69 +64 +64 +65 +58 +58 +54 +54 +51 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +13 +14 +13 +13 +14 +13 +14 +14 +14 +14 +14 +13 +14 +13 +14 +14 +13 +13 +13 +13 +13 +14 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +22 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +41 +41 +41 +43 +43 +47 +47 +47 +50 +51 +54 +54 +56 +58 +59 +64 +64 +69 +68 +68 +72 +73 +76 +76 +76 +82 +82 +82 +82 +82 +86 +87 +90 +90 +90 +96 +96 +100 +100 +102 +106 +106 +110 +110 +116 +116 +115 +119 +119 +125 +125 +125 +130 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +182 +183 +185 +185 +184 +189 +188 +191 +191 +194 +195 +194 +197 +197 +198 +198 +199 +201 +200 +201 +200 +200 +202 +202 +205 +204 +204 +204 +205 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +205 +202 +202 +201 +201 +201 +201 +200 +198 +198 +200 +196 +196 +195 +194 +191 +191 +190 +188 +189 +185 +185 +185 +183 +183 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +168 +167 +165 +165 +160 +161 +157 +157 +157 +151 +151 +147 +148 +147 +143 +143 +143 +143 +143 +139 +139 +133 +134 +134 +129 +129 +125 +126 +121 +120 +120 +116 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +77 +76 +72 +72 +69 +68 +68 +64 +65 +59 +59 +58 +54 +54 +51 +51 +51 +47 +47 +43 +43 +43 +41 +40 +37 +37 +37 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +14 +13 +12 +13 +14 +13 +13 +13 +13 +14 +14 +13 +14 +14 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +14 +14 +13 +13 +13 +13 +13 +13 +15 +15 +17 +17 +19 +20 +19 +21 +21 +25 +25 +25 +27 +27 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +42 +43 +42 +47 +46 +50 +51 +51 +55 +54 +58 +59 +59 +64 +65 +64 +65 +64 +69 +68 +72 +72 +72 +72 +72 +77 +77 +78 +82 +82 +87 +85 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +110 +110 +115 +116 +119 +119 +120 +125 +125 +130 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +179 +178 +179 +183 +182 +184 +184 +184 +189 +189 +191 +190 +191 +195 +194 +196 +196 +196 +198 +199 +201 +200 +201 +201 +200 +202 +202 +205 +204 +204 +204 +205 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +207 +205 +205 +205 +204 +204 +203 +202 +200 +201 +200 +200 +200 +198 +198 +199 +197 +197 +195 +195 +195 +191 +190 +189 +189 +189 +185 +185 +182 +183 +183 +179 +179 +175 +174 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +140 +139 +139 +133 +133 +129 +129 +130 +125 +125 +119 +119 +120 +115 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +95 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +69 +68 +64 +64 +59 +59 +58 +55 +54 +51 +50 +51 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +13 +14 +13 +14 +13 +14 +14 +13 +14 +13 +14 +13 +13 +14 +14 +14 +13 +13 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +15 +15 +15 +17 +17 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +28 +31 +31 +33 +33 +37 +36 +37 +41 +41 +43 +42 +43 +47 +46 +47 +47 +47 +50 +51 +55 +55 +55 +59 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +87 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +115 +119 +119 +119 +125 +125 +129 +129 +130 +133 +133 +139 +139 +140 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +168 +169 +169 +173 +173 +175 +174 +175 +179 +179 +183 +183 +183 +185 +185 +189 +188 +188 +191 +191 +194 +194 +195 +196 +196 +198 +199 +201 +200 +201 +200 +200 +202 +203 +203 +204 +204 +204 +205 +204 +206 +206 +206 +207 +206 +206 +207 +206 +207 +206 +207 +206 +206 +206 +204 +204 +206 +204 +204 +202 +202 +202 +200 +200 +200 +200 +200 +198 +198 +197 +196 +196 +194 +195 +190 +191 +191 +188 +189 +185 +184 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +173 +173 +173 +169 +170 +165 +165 +165 +161 +160 +157 +157 +151 +151 +151 +147 +147 +143 +143 +142 +139 +139 +134 +133 +133 +129 +129 +126 +126 +126 +120 +120 +116 +116 +116 +110 +110 +106 +106 +103 +100 +100 +97 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +69 +68 +65 +65 +65 +58 +58 +55 +54 +50 +50 +50 +47 +47 +43 +42 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +14 +13 +14 +14 +13 +14 +13 +14 +13 +13 +14 +14 +14 +13 +14 +13 +13 +13 +14 +14 +14 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +23 +25 +24 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +41 +41 +41 +43 +43 +47 +47 +47 +51 +51 +54 +54 +58 +58 +59 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +99 +100 +106 +106 +110 +109 +110 +116 +116 +120 +119 +119 +125 +125 +129 +130 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +162 +161 +161 +165 +165 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +185 +185 +185 +189 +188 +191 +191 +195 +194 +194 +196 +196 +198 +198 +198 +200 +200 +201 +200 +200 +203 +202 +205 +204 +204 +204 +204 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +200 +200 +201 +200 +200 +198 +198 +198 +196 +196 +195 +194 +191 +190 +190 +188 +188 +184 +185 +185 +183 +183 +183 +182 +183 +178 +178 +175 +175 +175 +173 +173 +169 +168 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +130 +126 +125 +119 +120 +119 +115 +116 +110 +110 +107 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +72 +72 +69 +68 +65 +64 +65 +58 +58 +55 +55 +54 +51 +51 +47 +47 +46 +43 +43 +41 +41 +40 +37 +37 +33 +33 +33 +31 +31 +27 +27 +26 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +13 +14 +14 +14 +14 +13 +13 +14 +14 +13 +13 +13 +14 +14 +13 +14 +13 +13 +13 +14 +13 +14 +14 +13 +13 +14 +14 +14 +13 +15 +15 +17 +17 +19 +19 +19 +21 +20 +25 +25 +25 +27 +27 +27 +27 +27 +31 +31 +33 +33 +33 +37 +36 +41 +41 +41 +43 +43 +47 +47 +51 +51 +51 +55 +54 +58 +58 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +77 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +109 +115 +116 +120 +119 +119 +125 +125 +129 +129 +129 +133 +133 +139 +139 +144 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +174 +175 +179 +179 +183 +183 +184 +185 +185 +188 +188 +190 +191 +191 +195 +195 +196 +196 +196 +198 +198 +201 +201 +200 +200 +201 +202 +202 +203 +204 +204 +204 +204 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +204 +204 +204 +204 +203 +202 +202 +200 +200 +200 +201 +201 +198 +198 +196 +196 +196 +194 +194 +195 +194 +195 +190 +190 +189 +189 +189 +185 +185 +182 +183 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +158 +158 +151 +151 +147 +147 +148 +143 +143 +139 +139 +135 +134 +133 +129 +129 +126 +126 +125 +119 +119 +115 +115 +115 +109 +109 +106 +106 +106 +100 +100 +95 +96 +96 +90 +90 +86 +86 +83 +82 +82 +76 +76 +72 +72 +72 +68 +69 +64 +65 +64 +59 +59 +55 +55 +55 +50 +50 +47 +47 +47 +43 +43 +41 +40 +38 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +13 +14 +13 +14 +13 +14 +14 +13 +14 +13 +14 +14 +14 +14 +13 +13 +13 +13 +13 +13 +14 +12 +15 +15 +15 +17 +17 +17 +17 +17 +19 +18 +21 +21 +21 +25 +25 +27 +27 +30 +30 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +50 +51 +55 +54 +58 +58 +59 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +109 +115 +115 +119 +120 +126 +126 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +173 +173 +173 +175 +174 +179 +179 +179 +182 +183 +185 +185 +185 +188 +189 +191 +190 +190 +194 +194 +196 +196 +197 +198 +198 +200 +200 +200 +200 +201 +203 +202 +204 +205 +204 +204 +204 +204 +204 +204 +207 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +205 +202 +202 +202 +200 +200 +201 +200 +200 +200 +200 +198 +198 +199 +196 +196 +195 +195 +191 +190 +190 +188 +188 +185 +184 +185 +182 +182 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +166 +161 +161 +157 +157 +152 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +130 +125 +125 +126 +119 +119 +115 +115 +116 +110 +110 +106 +105 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +65 +58 +55 +54 +51 +50 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +26 +27 +25 +25 +26 +21 +21 +19 +19 +17 +16 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +12 +13 +14 +13 +14 +13 +14 +13 +14 +14 +13 +13 +13 +14 +14 +14 +13 +14 +13 +14 +14 +14 +13 +14 +13 +13 +14 +14 +13 +14 +13 +13 +15 +15 +17 +17 +18 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +36 +37 +37 +41 +41 +43 +43 +42 +46 +47 +51 +50 +54 +55 +54 +58 +58 +65 +64 +64 +69 +68 +72 +72 +72 +76 +77 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +99 +106 +106 +106 +109 +110 +115 +115 +116 +119 +120 +125 +125 +125 +129 +129 +133 +134 +133 +139 +140 +144 +143 +143 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +178 +182 +183 +184 +185 +185 +189 +188 +190 +190 +194 +195 +195 +196 +196 +198 +198 +198 +200 +200 +200 +200 +200 +200 +200 +202 +202 +202 +204 +205 +204 +204 +205 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +205 +202 +203 +200 +200 +200 +200 +201 +198 +198 +196 +196 +197 +194 +195 +190 +191 +191 +189 +189 +185 +185 +185 +183 +183 +179 +179 +179 +174 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +140 +133 +133 +133 +129 +129 +126 +126 +120 +119 +120 +116 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +87 +82 +82 +82 +76 +76 +72 +72 +69 +68 +68 +64 +65 +58 +58 +59 +55 +55 +51 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +14 +12 +13 +13 +14 +14 +14 +14 +13 +13 +14 +13 +14 +14 +13 +14 +13 +14 +14 +13 +13 +14 +14 +14 +13 +14 +13 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +51 +54 +54 +55 +58 +58 +64 +64 +64 +69 +68 +72 +72 +72 +76 +76 +83 +82 +86 +86 +86 +90 +90 +96 +95 +96 +100 +99 +106 +105 +106 +110 +109 +116 +115 +116 +119 +119 +125 +125 +125 +129 +129 +134 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +183 +183 +182 +184 +184 +189 +189 +188 +190 +190 +191 +190 +190 +194 +194 +196 +196 +196 +198 +198 +200 +200 +201 +200 +201 +202 +202 +202 +202 +202 +205 +205 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +203 +202 +200 +200 +200 +200 +200 +199 +199 +198 +196 +197 +195 +194 +195 +191 +191 +189 +188 +184 +184 +185 +183 +183 +178 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +126 +125 +119 +119 +115 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +59 +59 +54 +54 +55 +51 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +20 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +13 +13 +13 +13 +14 +13 +14 +14 +14 +14 +13 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +50 +50 +54 +54 +59 +59 +65 +65 +64 +68 +68 +72 +72 +73 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +109 +116 +116 +116 +119 +120 +125 +126 +125 +130 +129 +133 +133 +134 +139 +139 +143 +143 +144 +147 +147 +151 +151 +151 +157 +157 +161 +161 +165 +165 +165 +168 +169 +173 +173 +173 +175 +175 +179 +179 +178 +182 +183 +185 +185 +185 +188 +189 +190 +190 +191 +194 +194 +197 +196 +198 +198 +198 +200 +200 +200 +200 +201 +203 +202 +203 +202 +202 +204 +204 +205 +204 +205 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +207 +206 +204 +204 +204 +204 +204 +203 +203 +202 +201 +200 +200 +200 +201 +198 +198 +197 +197 +195 +195 +195 +190 +191 +188 +188 +189 +184 +184 +183 +183 +183 +179 +179 +174 +175 +175 +173 +173 +169 +169 +168 +165 +165 +161 +161 +158 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +130 +130 +129 +125 +125 +119 +119 +119 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +69 +64 +64 +58 +59 +54 +54 +54 +51 +50 +47 +47 +47 +43 +43 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +29 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +14 +15 +13 +13 +13 +12 +13 +14 +14 +14 +13 +13 +14 +13 +14 +14 +13 +13 +13 +13 +14 +13 +13 +14 +14 +13 +13 +13 +13 +13 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +34 +37 +37 +41 +41 +41 +43 +43 +47 +47 +51 +51 +51 +54 +55 +59 +59 +59 +65 +65 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +87 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +109 +110 +116 +116 +119 +119 +120 +125 +125 +129 +129 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +165 +165 +164 +169 +169 +173 +173 +173 +175 +175 +178 +179 +180 +183 +182 +185 +185 +188 +189 +189 +190 +190 +195 +195 +194 +197 +196 +197 +196 +196 +198 +198 +200 +200 +200 +200 +200 +202 +202 +203 +204 +204 +204 +204 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +203 +200 +200 +201 +200 +200 +198 +199 +198 +196 +196 +195 +194 +194 +191 +190 +189 +189 +189 +184 +185 +183 +183 +183 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +130 +129 +125 +125 +125 +119 +119 +116 +116 +115 +110 +110 +106 +105 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +72 +72 +72 +68 +68 +65 +64 +64 +58 +59 +59 +58 +59 +55 +55 +50 +50 +51 +47 +47 +42 +43 +42 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +14 +14 +13 +14 +13 +13 +14 +13 +14 +13 +13 +14 +13 +13 +14 +13 +13 +14 +13 +14 +14 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +50 +50 +55 +55 +59 +58 +58 +64 +64 +68 +68 +69 +72 +72 +77 +76 +83 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +109 +110 +116 +116 +119 +120 +120 +125 +125 +129 +129 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +175 +175 +175 +179 +179 +182 +183 +182 +184 +185 +185 +184 +185 +188 +188 +190 +191 +191 +194 +194 +196 +196 +198 +199 +198 +200 +200 +200 +200 +200 +202 +202 +204 +204 +204 +205 +204 +206 +206 +207 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +203 +201 +200 +200 +200 +200 +199 +198 +199 +196 +196 +194 +194 +195 +190 +190 +189 +188 +184 +184 +185 +182 +183 +179 +179 +179 +174 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +158 +151 +151 +147 +147 +144 +143 +143 +139 +139 +133 +133 +133 +129 +130 +125 +125 +125 +119 +120 +116 +115 +116 +110 +109 +106 +106 +106 +100 +100 +96 +95 +90 +90 +90 +86 +86 +82 +82 +82 +77 +76 +72 +72 +73 +68 +68 +64 +64 +64 +58 +58 +54 +54 +55 +50 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +33 +33 +33 +31 +31 +26 +27 +27 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +14 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +13 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +40 +41 +41 +43 +42 +47 +47 +47 +50 +50 +55 +55 +56 +58 +58 +64 +64 +69 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +119 +119 +119 +125 +125 +130 +129 +129 +133 +133 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +153 +157 +157 +161 +161 +165 +165 +165 +169 +169 +172 +173 +173 +175 +175 +175 +175 +175 +178 +179 +183 +183 +183 +185 +184 +188 +189 +190 +190 +190 +194 +194 +196 +196 +196 +199 +198 +200 +200 +200 +200 +200 +203 +202 +202 +204 +204 +204 +204 +205 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +205 +204 +204 +204 +202 +202 +202 +200 +201 +200 +200 +201 +198 +198 +196 +196 +195 +194 +194 +190 +191 +188 +188 +189 +185 +185 +183 +183 +182 +179 +178 +175 +175 +175 +173 +173 +169 +168 +169 +165 +164 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +120 +119 +120 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +65 +59 +58 +58 +54 +55 +50 +51 +51 +47 +46 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +14 +13 +13 +14 +13 +14 +14 +13 +14 +14 +13 +13 +13 +13 +14 +13 +13 +14 +14 +13 +14 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +40 +41 +41 +42 +43 +47 +46 +51 +51 +50 +54 +55 +58 +59 +59 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +87 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +116 +115 +116 +116 +119 +120 +125 +125 +125 +129 +130 +133 +133 +135 +139 +139 +143 +143 +147 +147 +147 +151 +151 +156 +157 +157 +161 +161 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +178 +178 +179 +183 +182 +184 +185 +185 +188 +188 +190 +191 +190 +194 +194 +196 +197 +196 +198 +198 +201 +200 +201 +200 +201 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +201 +200 +200 +200 +200 +198 +198 +198 +196 +196 +195 +194 +194 +190 +190 +189 +188 +188 +185 +184 +182 +182 +183 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +141 +133 +133 +130 +129 +126 +125 +126 +119 +119 +116 +115 +115 +110 +110 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +64 +65 +64 +58 +58 +54 +55 +55 +50 +51 +47 +47 +44 +43 +42 +41 +40 +37 +37 +37 +33 +33 +31 +31 +32 +27 +27 +25 +25 +26 +21 +21 +19 +19 +20 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +13 +13 +14 +14 +13 +14 +13 +14 +13 +13 +13 +14 +14 +13 +14 +14 +14 +13 +13 +14 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +28 +31 +31 +33 +33 +37 +37 +37 +41 +40 +43 +43 +43 +47 +47 +50 +51 +51 +55 +55 +58 +58 +58 +64 +64 +68 +68 +68 +72 +73 +76 +76 +83 +82 +81 +86 +86 +90 +90 +90 +96 +96 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +116 +117 +119 +120 +125 +125 +130 +129 +130 +133 +134 +139 +139 +139 +143 +143 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +164 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +178 +182 +182 +185 +185 +185 +188 +188 +190 +190 +191 +194 +195 +196 +196 +198 +198 +199 +200 +200 +200 +200 +200 +202 +202 +204 +204 +204 +204 +204 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +204 +204 +204 +204 +204 +202 +203 +200 +200 +200 +200 +200 +198 +198 +198 +196 +197 +195 +194 +195 +191 +190 +189 +188 +185 +185 +185 +183 +183 +179 +179 +179 +175 +175 +173 +172 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +143 +143 +143 +139 +140 +134 +133 +133 +129 +129 +125 +125 +125 +119 +119 +115 +116 +116 +110 +109 +106 +106 +106 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +76 +76 +76 +72 +72 +68 +68 +68 +64 +65 +58 +59 +55 +54 +54 +50 +51 +47 +47 +48 +43 +43 +41 +40 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +14 +13 +14 +14 +14 +13 +14 +13 +13 +13 +14 +14 +13 +14 +14 +13 +12 +15 +15 +17 +17 +18 +19 +19 +21 +21 +26 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +40 +43 +43 +43 +47 +47 +51 +50 +51 +54 +54 +58 +59 +65 +65 +64 +69 +69 +72 +72 +72 +76 +76 +76 +76 +76 +82 +82 +86 +86 +86 +90 +89 +96 +96 +96 +100 +100 +105 +106 +109 +110 +110 +115 +116 +120 +119 +120 +125 +125 +126 +126 +125 +130 +130 +133 +133 +134 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +164 +169 +169 +173 +173 +173 +174 +175 +178 +179 +178 +183 +183 +185 +184 +188 +188 +188 +190 +191 +194 +194 +194 +196 +196 +199 +198 +198 +200 +200 +200 +201 +200 +202 +202 +204 +204 +204 +204 +204 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +205 +204 +204 +203 +202 +200 +200 +201 +200 +201 +198 +198 +197 +196 +197 +194 +195 +191 +190 +190 +188 +189 +185 +184 +184 +183 +182 +179 +179 +179 +175 +175 +172 +173 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +147 +147 +147 +143 +143 +139 +139 +140 +133 +134 +130 +129 +127 +125 +125 +119 +119 +116 +115 +116 +109 +110 +106 +106 +105 +100 +100 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +58 +58 +54 +54 +51 +51 +51 +47 +47 +42 +43 +43 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +16 +13 +13 +12 +13 +14 +13 +13 +13 +13 +14 +14 +13 +14 +13 +13 +13 +14 +13 +14 +13 +14 +14 +13 +13 +14 +13 +14 +13 +13 +13 +13 +16 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +31 +31 +31 +31 +33 +33 +37 +37 +38 +41 +41 +43 +43 +47 +47 +47 +50 +50 +54 +55 +55 +58 +59 +58 +59 +59 +65 +64 +68 +68 +68 +72 +72 +76 +76 +78 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +106 +106 +106 +110 +110 +116 +116 +115 +119 +119 +125 +125 +127 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +174 +175 +175 +179 +179 +183 +182 +183 +185 +184 +188 +188 +188 +190 +191 +195 +194 +195 +196 +196 +198 +198 +199 +200 +200 +200 +200 +202 +202 +202 +205 +205 +204 +204 +204 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +203 +202 +203 +200 +201 +200 +200 +200 +198 +198 +198 +198 +198 +197 +196 +195 +195 +194 +191 +191 +188 +189 +189 +184 +184 +183 +183 +178 +179 +178 +175 +175 +173 +173 +173 +169 +169 +169 +169 +169 +165 +165 +161 +161 +161 +157 +156 +151 +151 +149 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +130 +129 +125 +126 +125 +125 +125 +120 +119 +116 +116 +116 +110 +110 +106 +106 +101 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +68 +68 +64 +64 +64 +58 +58 +55 +54 +51 +51 +51 +47 +47 +42 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +13 +13 +13 +14 +13 +14 +13 +14 +13 +13 +14 +14 +14 +14 +13 +13 +14 +13 +14 +13 +14 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +22 +25 +25 +27 +27 +30 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +50 +50 +54 +54 +59 +58 +59 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +109 +109 +110 +110 +116 +116 +119 +119 +119 +125 +126 +129 +129 +129 +133 +134 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +174 +175 +174 +179 +179 +182 +183 +183 +185 +184 +188 +189 +188 +190 +191 +194 +194 +197 +197 +196 +199 +198 +201 +200 +200 +200 +201 +202 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +204 +204 +204 +205 +204 +203 +202 +202 +200 +200 +200 +200 +200 +199 +199 +196 +196 +197 +195 +194 +190 +190 +189 +188 +188 +185 +184 +182 +182 +183 +178 +179 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +163 +161 +161 +157 +157 +151 +151 +151 +147 +148 +143 +143 +143 +139 +139 +139 +139 +139 +133 +134 +129 +129 +130 +126 +125 +119 +119 +117 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +65 +64 +64 +58 +58 +55 +54 +54 +51 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +26 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +13 +14 +14 +14 +14 +13 +14 +13 +14 +13 +14 +13 +14 +14 +13 +13 +13 +13 +13 +13 +13 +14 +13 +12 +15 +15 +16 +17 +17 +19 +19 +22 +21 +21 +25 +25 +27 +27 +27 +31 +31 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +44 +47 +46 +51 +51 +55 +54 +54 +58 +58 +65 +64 +64 +68 +67 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +90 +90 +89 +96 +96 +100 +100 +100 +106 +106 +110 +109 +110 +115 +115 +119 +119 +120 +126 +125 +129 +129 +130 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +172 +175 +174 +175 +179 +179 +183 +183 +185 +184 +185 +188 +189 +190 +191 +191 +194 +195 +194 +195 +194 +196 +196 +198 +198 +198 +200 +200 +201 +200 +201 +202 +202 +204 +204 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +205 +204 +204 +205 +202 +202 +200 +200 +200 +200 +200 +199 +198 +196 +196 +197 +194 +195 +195 +195 +194 +191 +190 +189 +189 +189 +185 +184 +183 +183 +183 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +129 +129 +129 +126 +125 +120 +119 +119 +115 +116 +110 +109 +109 +106 +106 +100 +100 +100 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +59 +59 +55 +54 +51 +51 +50 +46 +47 +43 +42 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +13 +14 +14 +14 +14 +14 +13 +13 +14 +14 +14 +13 +13 +14 +13 +14 +14 +13 +14 +14 +13 +14 +13 +13 +14 +13 +13 +13 +15 +15 +15 +17 +17 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +29 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +46 +47 +47 +51 +51 +55 +54 +55 +59 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +119 +119 +119 +126 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +174 +175 +179 +179 +183 +182 +182 +184 +184 +188 +189 +188 +191 +190 +195 +195 +195 +196 +196 +198 +198 +201 +200 +200 +200 +200 +202 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +205 +204 +204 +204 +205 +202 +202 +202 +200 +200 +200 +200 +200 +201 +201 +198 +199 +199 +196 +196 +194 +194 +192 +190 +190 +189 +188 +184 +184 +185 +182 +182 +179 +178 +178 +175 +175 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +146 +147 +147 +143 +143 +140 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +119 +120 +116 +115 +110 +109 +108 +106 +106 +100 +100 +96 +96 +96 +89 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +59 +58 +54 +55 +54 +50 +50 +47 +47 +47 +43 +43 +40 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +14 +13 +13 +13 +14 +14 +13 +13 +14 +14 +14 +13 +13 +14 +13 +13 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +54 +55 +54 +58 +58 +64 +65 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +105 +106 +106 +110 +110 +116 +116 +115 +119 +119 +126 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +184 +185 +185 +189 +188 +190 +190 +195 +194 +194 +196 +197 +198 +198 +198 +200 +200 +200 +199 +201 +202 +202 +204 +204 +205 +205 +204 +206 +206 +207 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +200 +200 +200 +200 +200 +198 +198 +200 +196 +197 +194 +194 +190 +191 +190 +189 +188 +185 +185 +184 +182 +183 +183 +183 +182 +179 +178 +174 +175 +175 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +130 +125 +125 +119 +115 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +65 +64 +64 +58 +58 +54 +54 +54 +51 +51 +46 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +30 +30 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +14 +13 +14 +14 +13 +13 +14 +14 +14 +14 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +15 +15 +16 +17 +17 +19 +20 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +31 +31 +31 +33 +33 +37 +37 +37 +40 +41 +43 +43 +44 +47 +47 +51 +50 +54 +55 +54 +58 +59 +65 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +109 +116 +115 +115 +119 +119 +125 +126 +125 +129 +129 +133 +133 +133 +139 +140 +143 +143 +148 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +179 +182 +183 +184 +184 +189 +188 +188 +191 +191 +195 +194 +194 +196 +196 +198 +198 +198 +200 +200 +200 +200 +200 +202 +202 +204 +204 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +204 +204 +204 +204 +204 +202 +202 +201 +200 +200 +200 +200 +198 +198 +198 +197 +196 +194 +195 +194 +190 +191 +190 +191 +190 +189 +188 +185 +184 +185 +182 +183 +179 +179 +175 +175 +175 +173 +173 +169 +168 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +130 +129 +129 +125 +125 +119 +119 +119 +115 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +73 +72 +68 +68 +68 +64 +64 +58 +59 +59 +55 +54 +50 +52 +51 +47 +47 +43 +42 +44 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +16 +13 +13 +12 +13 +13 +14 +14 +14 +14 +13 +14 +14 +13 +13 +14 +13 +13 +14 +14 +13 +14 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +19 +19 +19 +21 +21 +24 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +50 +54 +55 +55 +59 +59 +64 +64 +65 +68 +68 +72 +72 +75 +76 +76 +82 +82 +86 +86 +86 +90 +90 +95 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +115 +116 +120 +120 +125 +125 +130 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +172 +175 +175 +175 +179 +179 +182 +182 +183 +185 +184 +185 +185 +184 +185 +185 +189 +189 +189 +191 +191 +194 +194 +195 +197 +196 +199 +198 +201 +200 +201 +200 +200 +202 +202 +203 +204 +204 +205 +204 +204 +204 +204 +206 +206 +206 +206 +207 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +205 +204 +204 +205 +204 +202 +202 +203 +202 +202 +200 +200 +201 +200 +201 +198 +199 +196 +195 +195 +194 +195 +191 +190 +188 +189 +189 +185 +185 +183 +183 +182 +178 +179 +175 +175 +175 +173 +173 +169 +169 +170 +165 +165 +161 +160 +158 +157 +157 +151 +151 +147 +147 +147 +143 +143 +140 +139 +139 +133 +133 +129 +129 +130 +125 +126 +119 +120 +119 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +95 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +73 +72 +68 +69 +68 +64 +64 +59 +59 +55 +54 +54 +50 +50 +47 +47 +47 +43 +43 +41 +41 +40 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +19 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +14 +13 +13 +14 +14 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +13 +14 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +54 +54 +54 +59 +58 +64 +65 +64 +68 +68 +72 +72 +72 +76 +77 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +106 +106 +105 +110 +110 +116 +115 +115 +120 +120 +125 +126 +126 +129 +129 +133 +134 +133 +140 +140 +143 +143 +144 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +172 +175 +176 +179 +178 +179 +183 +182 +185 +184 +185 +189 +188 +190 +191 +195 +194 +194 +197 +196 +198 +199 +198 +200 +200 +200 +200 +200 +202 +203 +204 +205 +204 +204 +204 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +204 +204 +202 +202 +202 +200 +200 +200 +200 +199 +198 +199 +196 +197 +194 +194 +194 +190 +190 +188 +188 +189 +185 +185 +182 +182 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +130 +125 +125 +119 +119 +116 +115 +115 +110 +110 +105 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +77 +76 +72 +72 +68 +68 +65 +64 +65 +58 +59 +55 +55 +55 +51 +51 +47 +47 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +34 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +14 +13 +13 +13 +13 +14 +14 +13 +14 +13 +13 +14 +14 +14 +14 +13 +13 +14 +14 +14 +14 +13 +13 +13 +13 +13 +13 +15 +15 +17 +16 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +36 +36 +41 +41 +43 +43 +43 +47 +46 +51 +51 +50 +55 +54 +58 +58 +58 +65 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +109 +115 +115 +120 +119 +120 +125 +125 +129 +129 +130 +133 +134 +139 +139 +144 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +164 +165 +169 +169 +169 +173 +173 +175 +175 +176 +179 +179 +183 +183 +185 +184 +184 +189 +188 +191 +190 +190 +194 +194 +194 +194 +194 +197 +196 +198 +198 +198 +201 +201 +200 +200 +201 +202 +202 +204 +204 +205 +205 +204 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +205 +204 +204 +204 +205 +203 +202 +200 +201 +201 +200 +200 +198 +198 +198 +197 +197 +194 +195 +194 +190 +191 +189 +189 +188 +184 +185 +183 +182 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +164 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +125 +119 +120 +116 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +83 +82 +83 +76 +76 +73 +72 +72 +69 +68 +64 +64 +64 +59 +59 +54 +54 +55 +51 +50 +46 +47 +47 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +14 +15 +15 +13 +13 +12 +12 +13 +14 +14 +14 +13 +13 +13 +14 +13 +14 +13 +13 +14 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +14 +14 +14 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +50 +50 +54 +54 +55 +58 +59 +64 +65 +64 +68 +68 +72 +72 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +105 +106 +106 +110 +109 +115 +116 +115 +119 +119 +125 +126 +130 +129 +130 +133 +133 +139 +139 +139 +143 +143 +143 +143 +143 +148 +147 +151 +151 +151 +156 +157 +161 +161 +162 +166 +165 +169 +169 +172 +173 +173 +175 +175 +178 +178 +179 +183 +183 +185 +185 +185 +188 +189 +190 +191 +190 +195 +195 +196 +197 +196 +198 +199 +201 +200 +200 +200 +200 +203 +202 +205 +205 +204 +204 +204 +205 +204 +204 +206 +206 +207 +206 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +204 +204 +205 +204 +205 +202 +202 +202 +200 +200 +200 +200 +200 +198 +198 +197 +196 +196 +194 +194 +190 +190 +189 +189 +189 +185 +185 +182 +183 +182 +179 +178 +175 +175 +175 +173 +173 +169 +168 +169 +165 +165 +161 +161 +161 +156 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +133 +133 +133 +129 +129 +125 +126 +125 +119 +119 +115 +115 +116 +110 +110 +106 +105 +101 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +73 +73 +68 +68 +64 +64 +65 +59 +58 +55 +55 +51 +50 +51 +47 +46 +43 +43 +43 +41 +41 +36 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +23 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +14 +14 +13 +13 +13 +13 +13 +14 +13 +14 +13 +14 +13 +13 +13 +14 +14 +13 +13 +13 +13 +16 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +30 +31 +33 +33 +33 +37 +37 +41 +41 +40 +43 +43 +47 +47 +47 +50 +50 +55 +54 +59 +58 +59 +64 +64 +68 +68 +69 +72 +72 +76 +76 +77 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +110 +110 +110 +115 +115 +116 +116 +116 +120 +120 +125 +126 +126 +129 +129 +133 +133 +134 +139 +139 +143 +143 +144 +147 +147 +151 +152 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +172 +172 +175 +174 +178 +179 +179 +183 +183 +185 +184 +185 +189 +188 +191 +191 +195 +194 +194 +197 +197 +198 +199 +198 +201 +200 +200 +200 +201 +201 +200 +202 +202 +203 +205 +205 +205 +204 +206 +207 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +207 +207 +207 +204 +204 +204 +204 +204 +202 +202 +203 +202 +203 +200 +200 +201 +201 +200 +199 +198 +197 +196 +196 +194 +195 +190 +190 +190 +189 +188 +185 +185 +184 +182 +182 +178 +179 +179 +175 +175 +173 +173 +170 +168 +168 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +146 +143 +143 +143 +139 +139 +134 +133 +134 +130 +130 +125 +126 +120 +120 +119 +116 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +69 +68 +68 +64 +64 +59 +59 +59 +54 +54 +50 +51 +51 +47 +47 +42 +43 +43 +40 +41 +37 +37 +37 +33 +33 +31 +31 +28 +27 +27 +25 +25 +21 +21 +21 +19 +19 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +14 +13 +13 +14 +14 +14 +14 +13 +13 +14 +13 +14 +13 +14 +13 +14 +13 +13 +13 +14 +13 +13 +14 +13 +13 +14 +14 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +50 +50 +54 +55 +58 +59 +58 +64 +64 +68 +68 +68 +72 +72 +77 +76 +77 +82 +82 +86 +86 +91 +90 +90 +96 +96 +100 +100 +100 +105 +106 +110 +110 +110 +116 +115 +119 +119 +119 +126 +125 +129 +130 +130 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +182 +182 +183 +184 +184 +189 +189 +188 +191 +191 +191 +190 +190 +194 +194 +197 +197 +197 +198 +199 +201 +201 +201 +200 +200 +203 +202 +204 +204 +204 +204 +204 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +207 +207 +204 +204 +204 +204 +205 +202 +202 +200 +200 +201 +200 +200 +198 +199 +198 +196 +196 +195 +194 +194 +190 +190 +189 +189 +189 +185 +185 +183 +183 +179 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +134 +133 +133 +129 +129 +125 +125 +126 +119 +119 +115 +116 +116 +110 +109 +106 +106 +106 +100 +100 +96 +96 +97 +90 +89 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +69 +68 +68 +64 +64 +58 +58 +58 +54 +54 +50 +50 +51 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +14 +13 +13 +14 +13 +14 +14 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +50 +50 +54 +55 +58 +59 +58 +64 +64 +68 +68 +73 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +99 +100 +106 +106 +110 +110 +110 +115 +115 +119 +120 +125 +125 +125 +129 +129 +133 +133 +133 +139 +139 +139 +139 +140 +144 +143 +147 +147 +147 +151 +151 +157 +157 +158 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +178 +179 +179 +178 +179 +183 +183 +185 +184 +185 +189 +189 +191 +191 +194 +194 +195 +196 +197 +198 +198 +198 +200 +201 +200 +201 +201 +203 +203 +204 +205 +204 +204 +204 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +204 +205 +205 +204 +204 +202 +203 +201 +201 +200 +200 +200 +198 +199 +198 +196 +196 +195 +194 +191 +191 +191 +189 +189 +184 +185 +184 +183 +183 +179 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +134 +133 +133 +129 +129 +125 +125 +125 +119 +119 +116 +115 +116 +110 +110 +106 +106 +99 +100 +100 +96 +96 +90 +90 +90 +87 +86 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +69 +65 +65 +59 +59 +55 +54 +54 +50 +50 +50 +51 +51 +47 +47 +47 +47 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +32 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +13 +13 +13 +13 +14 +14 +13 +14 +14 +14 +14 +14 +13 +14 +14 +13 +14 +14 +14 +14 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +40 +41 +43 +43 +47 +47 +50 +50 +50 +54 +55 +59 +58 +58 +64 +64 +68 +69 +68 +72 +72 +76 +76 +76 +82 +82 +85 +86 +86 +90 +90 +96 +96 +101 +100 +100 +106 +106 +109 +110 +110 +116 +116 +120 +119 +120 +125 +126 +130 +130 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +165 +165 +165 +169 +169 +173 +173 +173 +174 +175 +178 +179 +182 +182 +183 +185 +185 +188 +188 +188 +190 +190 +194 +194 +194 +197 +196 +198 +198 +198 +200 +200 +200 +201 +201 +202 +203 +204 +205 +204 +204 +204 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +206 +204 +205 +204 +204 +204 +202 +202 +201 +201 +200 +200 +201 +198 +198 +196 +196 +197 +195 +194 +190 +191 +191 +189 +189 +185 +185 +185 +183 +183 +179 +179 +179 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +156 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +134 +134 +130 +129 +126 +125 +119 +120 +119 +115 +116 +110 +110 +110 +106 +106 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +84 +82 +82 +77 +76 +72 +72 +72 +68 +68 +64 +64 +64 +58 +59 +58 +59 +59 +54 +55 +50 +51 +51 +47 +47 +43 +43 +42 +41 +40 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +14 +15 +15 +14 +13 +13 +12 +13 +13 +14 +14 +14 +14 +13 +13 +14 +13 +13 +14 +14 +14 +13 +13 +14 +14 +14 +13 +13 +14 +13 +14 +13 +14 +13 +13 +15 +15 +15 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +38 +37 +37 +41 +41 +43 +43 +43 +47 +46 +51 +51 +51 +55 +55 +58 +59 +58 +65 +64 +68 +68 +69 +73 +72 +77 +76 +81 +82 +82 +86 +86 +89 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +109 +110 +116 +115 +120 +119 +123 +125 +125 +129 +130 +134 +134 +134 +139 +139 +143 +143 +143 +147 +147 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +167 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +183 +184 +184 +188 +188 +188 +191 +191 +194 +195 +195 +197 +197 +199 +199 +199 +200 +200 +200 +200 +200 +200 +200 +202 +202 +205 +204 +204 +204 +205 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +204 +204 +204 +204 +204 +203 +203 +203 +202 +202 +200 +200 +201 +201 +200 +198 +198 +196 +196 +197 +195 +195 +190 +191 +189 +188 +188 +184 +185 +183 +182 +183 +179 +178 +175 +175 +175 +173 +173 +169 +168 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +147 +147 +147 +143 +143 +140 +139 +139 +133 +133 +134 +133 +133 +129 +129 +125 +125 +126 +120 +120 +116 +116 +112 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +65 +64 +64 +58 +59 +54 +54 +55 +50 +51 +46 +47 +47 +43 +43 +41 +41 +40 +37 +37 +33 +33 +33 +31 +31 +26 +27 +26 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +14 +14 +14 +14 +14 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +13 +14 +13 +14 +13 +14 +13 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +40 +41 +43 +43 +47 +47 +47 +51 +51 +54 +54 +58 +59 +58 +64 +64 +68 +68 +69 +72 +72 +72 +72 +72 +77 +76 +82 +82 +82 +86 +86 +90 +90 +91 +96 +96 +100 +100 +105 +106 +106 +110 +110 +116 +116 +116 +119 +120 +119 +120 +119 +126 +125 +129 +129 +130 +133 +133 +139 +139 +142 +143 +143 +147 +147 +150 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +185 +185 +185 +189 +189 +190 +191 +191 +195 +194 +196 +197 +196 +198 +198 +200 +200 +201 +201 +200 +202 +202 +202 +204 +205 +204 +204 +206 +207 +206 +207 +206 +207 +207 +206 +207 +206 +206 +207 +206 +207 +206 +206 +206 +206 +205 +204 +204 +204 +205 +202 +203 +200 +200 +200 +200 +200 +198 +198 +197 +196 +196 +194 +194 +190 +191 +190 +188 +189 +184 +184 +185 +183 +183 +178 +178 +179 +175 +175 +173 +173 +168 +169 +169 +165 +165 +161 +161 +161 +157 +157 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +140 +139 +137 +133 +133 +129 +129 +125 +125 +125 +119 +119 +116 +115 +116 +110 +110 +110 +110 +110 +106 +106 +100 +100 +100 +96 +95 +89 +90 +87 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +59 +59 +59 +54 +55 +50 +50 +51 +47 +47 +43 +42 +42 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +13 +14 +13 +14 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +14 +13 +13 +14 +14 +13 +13 +13 +13 +14 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +30 +32 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +51 +50 +50 +51 +54 +54 +58 +59 +58 +64 +65 +69 +68 +69 +72 +73 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +96 +96 +96 +100 +100 +105 +106 +106 +110 +110 +116 +116 +117 +119 +120 +126 +126 +129 +129 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +169 +169 +169 +173 +173 +174 +175 +175 +178 +178 +183 +182 +183 +184 +185 +189 +189 +189 +190 +191 +195 +195 +195 +196 +197 +199 +199 +200 +200 +200 +200 +200 +202 +203 +202 +204 +204 +205 +205 +204 +207 +206 +206 +207 +206 +207 +206 +206 +206 +207 +206 +206 +207 +206 +205 +204 +205 +204 +204 +202 +202 +203 +201 +200 +200 +201 +201 +198 +199 +197 +196 +197 +194 +195 +191 +191 +192 +189 +189 +184 +185 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +148 +144 +143 +143 +139 +139 +133 +133 +134 +129 +129 +130 +130 +130 +125 +125 +119 +120 +120 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +59 +58 +54 +55 +54 +51 +51 +47 +46 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +20 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +13 +14 +13 +13 +14 +13 +13 +13 +13 +14 +13 +14 +13 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +26 +27 +27 +31 +31 +33 +33 +33 +37 +37 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +52 +54 +54 +58 +58 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +99 +100 +100 +106 +106 +110 +110 +110 +116 +115 +120 +119 +120 +125 +125 +129 +129 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +172 +175 +175 +175 +179 +179 +183 +183 +183 +185 +185 +189 +189 +191 +191 +190 +195 +195 +196 +196 +196 +199 +199 +200 +200 +200 +200 +200 +202 +202 +202 +204 +205 +204 +205 +204 +206 +207 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +205 +204 +204 +205 +205 +202 +202 +202 +200 +200 +200 +201 +201 +198 +198 +197 +197 +194 +194 +194 +190 +190 +188 +188 +189 +185 +184 +185 +184 +184 +183 +183 +178 +179 +179 +175 +175 +173 +172 +171 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +127 +125 +125 +120 +119 +115 +115 +116 +110 +109 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +73 +72 +72 +68 +68 +64 +64 +64 +58 +58 +55 +55 +55 +50 +50 +46 +47 +47 +43 +43 +41 +40 +41 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +16 +13 +13 +12 +13 +14 +13 +13 +14 +14 +13 +13 +13 +13 +13 +13 +14 +14 +14 +14 +13 +13 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +16 +15 +15 +17 +17 +19 +19 +19 +21 +21 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +34 +37 +37 +41 +41 +43 +43 +43 +46 +47 +51 +51 +51 +55 +55 +55 +55 +54 +58 +59 +64 +65 +64 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +99 +100 +106 +106 +106 +110 +110 +115 +115 +116 +120 +120 +125 +126 +129 +130 +130 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +175 +175 +174 +178 +179 +183 +183 +183 +184 +184 +185 +185 +184 +188 +189 +191 +191 +190 +195 +195 +196 +197 +197 +199 +198 +200 +200 +201 +201 +200 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +206 +204 +204 +205 +204 +205 +202 +202 +200 +201 +200 +200 +201 +201 +200 +200 +198 +198 +197 +196 +197 +195 +194 +190 +191 +189 +189 +189 +185 +185 +182 +183 +183 +179 +179 +175 +175 +175 +173 +173 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +152 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +125 +120 +120 +116 +116 +115 +110 +110 +105 +106 +103 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +65 +64 +64 +59 +58 +54 +55 +51 +50 +50 +46 +47 +43 +43 +43 +40 +41 +36 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +20 +19 +17 +18 +17 +15 +15 +15 +16 +15 +13 +13 +12 +13 +14 +14 +13 +13 +14 +14 +14 +13 +13 +13 +14 +14 +13 +14 +14 +14 +13 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +37 +37 +37 +41 +41 +43 +42 +43 +47 +46 +51 +51 +52 +54 +54 +58 +58 +64 +64 +65 +68 +68 +72 +72 +72 +76 +76 +81 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +106 +106 +105 +110 +110 +116 +115 +116 +119 +119 +126 +125 +125 +129 +130 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +158 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +172 +175 +175 +179 +179 +179 +183 +183 +184 +184 +185 +188 +189 +191 +190 +195 +194 +195 +196 +196 +198 +199 +199 +200 +201 +201 +200 +200 +202 +202 +204 +205 +204 +204 +204 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +200 +200 +200 +201 +200 +198 +198 +196 +196 +197 +195 +195 +190 +190 +191 +188 +189 +189 +189 +188 +184 +185 +183 +182 +183 +178 +179 +174 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +148 +143 +143 +139 +139 +140 +134 +133 +129 +129 +125 +125 +125 +119 +119 +115 +115 +115 +110 +110 +110 +110 +111 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +72 +72 +72 +72 +72 +68 +68 +65 +64 +64 +58 +58 +54 +55 +55 +51 +50 +47 +46 +47 +43 +43 +41 +40 +38 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +14 +13 +13 +14 +13 +14 +14 +14 +13 +13 +13 +14 +13 +14 +13 +13 +13 +14 +13 +15 +15 +17 +17 +17 +19 +19 +19 +19 +19 +21 +21 +25 +24 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +41 +41 +40 +43 +43 +47 +47 +47 +50 +51 +54 +55 +55 +59 +58 +64 +64 +65 +69 +68 +76 +76 +81 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +105 +106 +110 +110 +110 +116 +115 +119 +119 +119 +126 +125 +129 +129 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +179 +179 +179 +183 +183 +185 +185 +184 +188 +188 +190 +190 +190 +194 +195 +196 +197 +196 +199 +198 +200 +201 +201 +201 +201 +202 +202 +204 +205 +204 +204 +204 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +200 +200 +201 +200 +200 +198 +198 +199 +196 +196 +197 +196 +196 +194 +194 +191 +191 +191 +188 +188 +185 +185 +183 +182 +183 +179 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +152 +147 +147 +143 +143 +140 +139 +139 +134 +134 +129 +129 +129 +126 +125 +120 +120 +120 +115 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +65 +58 +58 +58 +55 +55 +51 +51 +51 +47 +47 +43 +42 +42 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +14 +14 +14 +14 +13 +14 +14 +14 +13 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +13 +13 +13 +14 +13 +15 +16 +15 +17 +17 +17 +17 +18 +19 +19 +21 +21 +21 +25 +25 +27 +27 +29 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +50 +51 +55 +55 +58 +58 +58 +64 +64 +68 +68 +69 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +116 +120 +120 +126 +126 +125 +129 +129 +133 +133 +133 +139 +140 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +183 +183 +183 +184 +185 +189 +189 +189 +190 +191 +194 +194 +195 +196 +196 +198 +198 +200 +200 +200 +200 +201 +202 +202 +202 +204 +204 +204 +204 +205 +204 +204 +206 +206 +207 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +203 +202 +203 +202 +202 +200 +200 +201 +200 +200 +198 +199 +196 +196 +195 +194 +195 +190 +190 +189 +189 +189 +184 +184 +183 +183 +183 +178 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +134 +134 +129 +129 +129 +126 +125 +119 +119 +119 +115 +115 +110 +109 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +87 +86 +86 +82 +82 +76 +76 +76 +72 +73 +68 +68 +69 +64 +64 +59 +59 +55 +55 +54 +51 +50 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +32 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +20 +19 +19 +17 +17 +15 +15 +15 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +13 +14 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +14 +14 +14 +13 +14 +13 +13 +14 +13 +13 +15 +15 +16 +17 +17 +19 +19 +21 +20 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +42 +43 +47 +46 +50 +51 +51 +54 +55 +59 +58 +59 +65 +64 +69 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +109 +109 +115 +116 +120 +120 +119 +126 +125 +130 +129 +129 +133 +133 +139 +140 +139 +143 +143 +147 +147 +151 +151 +151 +157 +156 +161 +161 +161 +165 +165 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +185 +185 +189 +188 +188 +191 +190 +194 +195 +195 +196 +196 +197 +197 +196 +199 +199 +200 +201 +201 +200 +201 +202 +203 +203 +204 +205 +205 +204 +207 +207 +206 +207 +206 +207 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +204 +204 +204 +205 +203 +202 +203 +200 +201 +200 +200 +201 +198 +199 +197 +196 +196 +194 +194 +191 +190 +190 +188 +188 +185 +185 +185 +182 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +144 +143 +139 +139 +134 +133 +130 +129 +129 +125 +125 +120 +120 +119 +115 +116 +110 +110 +109 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +81 +76 +76 +76 +72 +73 +68 +69 +69 +64 +65 +59 +58 +59 +55 +54 +50 +51 +51 +47 +46 +43 +43 +43 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +13 +14 +13 +14 +14 +13 +13 +14 +13 +13 +14 +14 +14 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +13 +14 +14 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +26 +25 +25 +27 +27 +30 +31 +33 +33 +33 +36 +37 +41 +41 +41 +43 +43 +47 +46 +47 +51 +51 +55 +54 +55 +58 +58 +64 +64 +64 +68 +69 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +97 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +116 +119 +119 +125 +125 +130 +129 +129 +133 +133 +139 +139 +139 +144 +144 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +175 +175 +175 +179 +178 +183 +182 +183 +184 +184 +188 +188 +189 +190 +190 +195 +194 +195 +197 +196 +199 +198 +199 +200 +201 +201 +200 +202 +203 +202 +204 +204 +204 +205 +204 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +207 +206 +206 +207 +206 +206 +204 +205 +204 +205 +205 +202 +202 +201 +200 +200 +200 +200 +198 +198 +198 +196 +197 +194 +195 +195 +190 +191 +189 +188 +185 +184 +184 +183 +182 +179 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +150 +151 +147 +147 +143 +144 +143 +139 +139 +133 +134 +133 +130 +129 +125 +125 +125 +120 +119 +115 +115 +116 +109 +110 +106 +106 +106 +100 +100 +96 +96 +91 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +59 +58 +54 +54 +55 +51 +50 +47 +47 +42 +42 +42 +41 +41 +41 +41 +41 +36 +37 +37 +37 +37 +33 +33 +31 +31 +31 +27 +26 +25 +25 +23 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +14 +14 +14 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +30 +33 +33 +33 +37 +37 +40 +40 +41 +43 +43 +47 +47 +47 +51 +50 +54 +55 +58 +59 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +110 +110 +110 +115 +116 +120 +120 +119 +126 +125 +129 +129 +129 +134 +133 +139 +139 +139 +143 +143 +147 +147 +148 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +183 +185 +184 +188 +188 +189 +190 +191 +195 +194 +196 +196 +197 +198 +199 +201 +201 +200 +200 +200 +201 +200 +200 +202 +202 +205 +204 +205 +204 +205 +207 +206 +205 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +205 +204 +204 +204 +204 +202 +203 +200 +200 +201 +201 +201 +198 +198 +198 +196 +197 +195 +195 +190 +190 +190 +189 +189 +185 +184 +185 +182 +183 +179 +178 +179 +174 +175 +173 +173 +173 +169 +169 +165 +165 +162 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +125 +120 +119 +116 +116 +109 +109 +110 +106 +105 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +65 +59 +59 +58 +55 +54 +51 +50 +51 +47 +47 +46 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +32 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +14 +14 +13 +14 +13 +14 +13 +13 +14 +14 +13 +13 +14 +14 +13 +13 +13 +14 +14 +14 +13 +14 +14 +13 +13 +14 +13 +12 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +36 +37 +41 +41 +43 +42 +47 +47 +47 +51 +50 +54 +54 +55 +59 +58 +65 +64 +65 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +116 +119 +119 +125 +125 +125 +129 +130 +133 +133 +134 +139 +139 +143 +144 +147 +147 +148 +151 +151 +157 +157 +157 +161 +161 +161 +160 +161 +165 +165 +169 +169 +169 +172 +173 +175 +175 +175 +179 +179 +183 +183 +184 +185 +184 +188 +188 +190 +191 +191 +194 +194 +194 +194 +194 +197 +197 +198 +198 +199 +201 +201 +201 +201 +201 +202 +203 +204 +204 +204 +204 +205 +206 +206 +206 +207 +206 +206 +207 +207 +207 +206 +207 +206 +206 +206 +207 +204 +205 +204 +204 +202 +202 +203 +201 +200 +200 +200 +200 +198 +198 +197 +197 +196 +194 +195 +190 +190 +190 +188 +188 +184 +184 +184 +182 +183 +179 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +129 +129 +129 +125 +125 +120 +119 +119 +116 +116 +109 +110 +110 +106 +105 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +68 +68 +64 +64 +59 +58 +58 +55 +54 +51 +50 +50 +47 +46 +43 +43 +41 +40 +41 +37 +37 +33 +33 +32 +31 +31 +27 +27 +27 +25 +25 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +14 +13 +14 +13 +13 +14 +13 +14 +14 +14 +14 +14 +13 +14 +14 +13 +13 +14 +14 +13 +14 +14 +14 +14 +13 +12 +15 +15 +17 +18 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +42 +47 +47 +51 +50 +51 +54 +54 +58 +58 +58 +65 +64 +68 +68 +68 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +117 +119 +120 +126 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +162 +165 +165 +169 +169 +172 +173 +173 +175 +175 +178 +179 +178 +183 +182 +183 +183 +182 +184 +184 +189 +189 +189 +190 +191 +194 +194 +195 +196 +196 +198 +199 +200 +201 +200 +200 +200 +202 +202 +202 +204 +205 +204 +204 +204 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +203 +202 +200 +200 +201 +200 +200 +198 +198 +196 +196 +196 +195 +194 +190 +190 +189 +188 +188 +184 +184 +182 +182 +182 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +160 +161 +161 +157 +157 +151 +151 +147 +147 +147 +143 +143 +140 +140 +139 +134 +134 +129 +129 +129 +125 +125 +120 +120 +120 +116 +115 +110 +109 +110 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +65 +59 +58 +59 +54 +55 +50 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +36 +36 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +23 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +13 +14 +13 +14 +13 +13 +13 +14 +14 +14 +14 +13 +14 +14 +14 +14 +14 +14 +13 +13 +13 +14 +14 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +46 +51 +50 +51 +55 +54 +58 +58 +65 +64 +64 +68 +68 +72 +72 +72 +76 +76 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +109 +110 +110 +115 +115 +119 +119 +120 +125 +125 +125 +125 +125 +130 +130 +133 +133 +133 +139 +139 +143 +143 +144 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +169 +169 +169 +173 +173 +175 +174 +174 +179 +178 +183 +182 +184 +184 +185 +189 +188 +190 +190 +191 +194 +194 +197 +196 +196 +198 +198 +201 +201 +201 +201 +200 +203 +202 +203 +205 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +205 +204 +204 +204 +204 +203 +203 +203 +200 +201 +200 +200 +198 +198 +199 +196 +196 +195 +194 +194 +190 +190 +189 +188 +188 +185 +185 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +140 +139 +139 +133 +134 +129 +129 +130 +125 +125 +120 +119 +115 +115 +115 +110 +110 +106 +106 +106 +100 +100 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +79 +76 +76 +72 +72 +68 +68 +68 +64 +64 +59 +58 +59 +54 +55 +55 +55 +55 +51 +51 +47 +47 +47 +47 +46 +42 +43 +42 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +13 +14 +14 +14 +13 +13 +14 +14 +14 +14 +14 +13 +13 +14 +14 +13 +13 +14 +13 +13 +14 +14 +13 +14 +14 +13 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +30 +31 +31 +33 +33 +37 +37 +41 +41 +41 +43 +42 +46 +47 +47 +51 +50 +50 +50 +50 +55 +55 +58 +58 +58 +64 +64 +68 +68 +69 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +109 +115 +115 +119 +119 +119 +125 +125 +130 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +147 +147 +147 +151 +151 +157 +157 +158 +160 +161 +165 +165 +169 +169 +169 +173 +173 +175 +176 +175 +178 +179 +183 +182 +183 +185 +184 +189 +188 +189 +191 +191 +195 +194 +195 +196 +196 +198 +198 +200 +201 +200 +200 +201 +202 +202 +203 +204 +204 +205 +204 +205 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +205 +204 +204 +204 +204 +202 +202 +202 +200 +200 +201 +200 +200 +200 +200 +199 +198 +198 +197 +197 +195 +195 +195 +191 +190 +189 +188 +185 +184 +185 +182 +183 +178 +178 +178 +175 +175 +173 +172 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +158 +151 +151 +147 +147 +144 +143 +143 +139 +139 +133 +133 +133 +129 +129 +130 +129 +129 +125 +125 +119 +119 +119 +116 +116 +110 +110 +108 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +61 +58 +58 +55 +54 +51 +50 +51 +47 +47 +43 +42 +43 +41 +41 +36 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +14 +14 +14 +13 +13 +13 +14 +13 +13 +14 +13 +13 +14 +14 +13 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +26 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +36 +37 +41 +41 +43 +43 +43 +47 +47 +50 +50 +51 +55 +54 +58 +58 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +109 +110 +110 +115 +116 +119 +120 +119 +125 +125 +126 +125 +125 +129 +129 +133 +134 +134 +139 +140 +143 +143 +145 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +178 +179 +183 +183 +185 +185 +186 +188 +189 +191 +191 +194 +195 +195 +197 +196 +198 +198 +198 +200 +200 +201 +201 +200 +202 +203 +204 +204 +205 +204 +205 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +207 +207 +206 +206 +206 +204 +204 +204 +204 +204 +203 +203 +200 +200 +201 +201 +200 +198 +198 +197 +196 +196 +194 +194 +190 +191 +191 +188 +188 +185 +184 +184 +183 +183 +178 +179 +179 +175 +175 +173 +172 +173 +169 +168 +165 +165 +160 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +140 +133 +133 +133 +129 +130 +125 +125 +122 +119 +120 +115 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +96 +96 +96 +90 +90 +86 +86 +87 +82 +82 +76 +77 +73 +73 +72 +69 +68 +64 +65 +64 +58 +58 +54 +54 +54 +51 +50 +46 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +31 +31 +31 +27 +26 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +14 +13 +14 +14 +13 +13 +14 +13 +13 +13 +14 +13 +14 +13 +13 +13 +12 +15 +15 +18 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +26 +27 +31 +31 +32 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +46 +51 +51 +51 +55 +58 +58 +58 +58 +65 +64 +64 +64 +64 +68 +68 +72 +72 +72 +76 +77 +82 +82 +82 +86 +86 +90 +90 +96 +96 +97 +100 +100 +106 +106 +106 +110 +110 +110 +110 +110 +115 +116 +120 +120 +119 +126 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +148 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +178 +178 +179 +183 +182 +185 +185 +185 +188 +189 +191 +190 +190 +195 +195 +197 +196 +196 +198 +199 +200 +200 +200 +201 +200 +203 +202 +205 +205 +204 +204 +204 +206 +207 +207 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +204 +204 +204 +204 +205 +202 +202 +200 +200 +200 +200 +200 +198 +198 +198 +197 +196 +195 +194 +194 +191 +191 +188 +189 +189 +184 +184 +183 +182 +183 +179 +179 +175 +175 +172 +173 +173 +169 +169 +165 +165 +165 +161 +161 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +141 +139 +139 +134 +134 +129 +129 +129 +125 +125 +119 +120 +119 +116 +116 +116 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +91 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +59 +58 +55 +54 +55 +51 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +12 +13 +13 +13 +14 +14 +13 +14 +13 +13 +13 +13 +14 +14 +14 +13 +14 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +47 +47 +46 +51 +51 +55 +55 +54 +58 +59 +64 +64 +66 +69 +68 +72 +72 +76 +76 +76 +82 +82 +86 +87 +86 +90 +90 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +112 +116 +115 +120 +119 +125 +125 +125 +129 +129 +133 +134 +133 +139 +139 +144 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +165 +165 +165 +169 +169 +172 +173 +173 +175 +175 +179 +179 +178 +182 +182 +185 +184 +185 +188 +189 +190 +190 +190 +195 +195 +197 +196 +199 +198 +198 +200 +200 +200 +200 +200 +202 +203 +203 +202 +202 +205 +205 +204 +205 +204 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +204 +204 +204 +204 +204 +202 +203 +202 +201 +201 +200 +201 +200 +198 +199 +196 +197 +197 +195 +194 +191 +191 +188 +188 +189 +185 +184 +183 +183 +182 +179 +179 +179 +179 +179 +175 +175 +172 +173 +172 +169 +169 +165 +165 +164 +161 +161 +158 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +139 +139 +139 +133 +133 +129 +129 +129 +126 +125 +119 +120 +116 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +85 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +65 +64 +64 +58 +59 +55 +54 +54 +50 +50 +47 +47 +47 +43 +43 +41 +40 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +14 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +14 +13 +14 +13 +13 +14 +14 +14 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +12 +15 +15 +15 +17 +17 +19 +19 +22 +21 +21 +25 +25 +27 +27 +27 +31 +31 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +42 +43 +44 +47 +47 +51 +50 +54 +54 +55 +59 +59 +65 +64 +64 +68 +68 +68 +68 +68 +72 +72 +76 +76 +77 +82 +82 +86 +86 +89 +90 +90 +96 +96 +100 +100 +100 +106 +105 +109 +110 +110 +115 +115 +119 +119 +119 +125 +125 +129 +130 +130 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +172 +173 +175 +175 +175 +178 +179 +183 +183 +185 +185 +185 +188 +188 +191 +191 +191 +195 +195 +196 +197 +196 +199 +198 +200 +200 +200 +200 +200 +202 +203 +203 +205 +205 +204 +205 +207 +207 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +206 +205 +205 +204 +204 +204 +202 +202 +203 +201 +201 +200 +201 +198 +198 +198 +197 +197 +194 +194 +194 +190 +190 +191 +190 +190 +189 +188 +185 +184 +184 +183 +182 +179 +179 +178 +175 +175 +173 +173 +168 +169 +169 +165 +165 +161 +161 +161 +157 +157 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +134 +134 +133 +129 +129 +125 +125 +126 +119 +119 +115 +116 +115 +110 +110 +106 +105 +106 +100 +100 +96 +96 +96 +90 +89 +86 +86 +82 +82 +82 +76 +76 +76 +76 +76 +72 +73 +68 +68 +68 +65 +64 +58 +59 +58 +54 +54 +50 +50 +51 +47 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +18 +15 +15 +15 +15 +14 +13 +13 +12 +13 +14 +13 +13 +13 +14 +14 +14 +14 +14 +13 +13 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +14 +14 +13 +13 +15 +15 +15 +17 +17 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +26 +28 +31 +31 +33 +33 +36 +37 +37 +41 +41 +43 +43 +43 +47 +46 +47 +47 +47 +51 +51 +54 +54 +55 +59 +59 +65 +64 +66 +69 +68 +73 +72 +76 +76 +76 +82 +82 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +115 +116 +115 +120 +119 +125 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +156 +157 +161 +161 +165 +166 +165 +169 +169 +173 +172 +173 +175 +175 +179 +179 +179 +182 +182 +185 +185 +184 +188 +188 +191 +191 +191 +195 +194 +196 +196 +199 +199 +199 +201 +200 +200 +200 +200 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +205 +204 +204 +204 +202 +202 +202 +202 +202 +200 +200 +200 +201 +200 +198 +199 +197 +197 +197 +194 +195 +191 +191 +188 +189 +188 +184 +184 +182 +183 +183 +179 +179 +178 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +140 +133 +133 +133 +130 +129 +125 +125 +125 +120 +119 +115 +115 +116 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +65 +64 +59 +58 +59 +54 +54 +51 +51 +51 +46 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +14 +14 +14 +14 +13 +14 +13 +14 +14 +14 +14 +13 +14 +13 +14 +14 +14 +14 +13 +13 +14 +14 +14 +13 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +31 +30 +31 +33 +33 +37 +37 +36 +41 +41 +43 +43 +44 +47 +46 +50 +51 +55 +55 +55 +59 +59 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +95 +96 +96 +99 +100 +106 +106 +106 +109 +110 +116 +115 +115 +120 +120 +126 +126 +125 +130 +129 +133 +133 +133 +139 +139 +143 +143 +148 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +179 +183 +183 +184 +184 +189 +188 +189 +191 +191 +195 +195 +194 +196 +196 +199 +198 +198 +200 +200 +200 +200 +200 +202 +203 +204 +204 +205 +204 +205 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +203 +203 +200 +199 +200 +200 +201 +198 +199 +196 +196 +196 +194 +195 +191 +191 +190 +189 +188 +189 +189 +188 +185 +185 +183 +183 +183 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +140 +133 +133 +129 +130 +125 +125 +126 +120 +119 +116 +116 +116 +109 +110 +106 +106 +106 +100 +100 +95 +95 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +65 +59 +58 +55 +54 +55 +51 +51 +47 +47 +47 +42 +43 +40 +41 +41 +37 +37 +33 +33 +32 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +14 +14 +13 +14 +13 +14 +13 +13 +14 +14 +13 +14 +14 +14 +13 +14 +14 +14 +14 +13 +13 +12 +15 +15 +17 +17 +19 +19 +19 +21 +22 +21 +21 +21 +25 +25 +27 +27 +26 +31 +31 +33 +33 +36 +37 +37 +41 +41 +42 +42 +43 +46 +47 +50 +51 +51 +54 +55 +58 +58 +58 +64 +64 +68 +68 +69 +72 +72 +76 +76 +81 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +110 +110 +116 +116 +120 +120 +119 +125 +125 +130 +129 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +174 +175 +179 +178 +179 +182 +183 +184 +184 +185 +188 +188 +189 +189 +189 +190 +191 +194 +194 +194 +197 +197 +198 +198 +199 +200 +200 +200 +200 +202 +202 +203 +204 +204 +204 +204 +204 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +205 +204 +204 +204 +204 +203 +202 +202 +200 +201 +200 +201 +201 +198 +199 +199 +198 +198 +197 +196 +194 +194 +195 +190 +190 +188 +188 +185 +184 +185 +182 +182 +178 +179 +179 +174 +174 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +144 +143 +143 +139 +139 +133 +134 +133 +130 +129 +125 +125 +125 +120 +119 +116 +116 +115 +110 +110 +106 +106 +106 +100 +100 +95 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +73 +72 +68 +68 +64 +64 +64 +59 +58 +55 +55 +55 +50 +50 +47 +46 +44 +43 +43 +40 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +14 +14 +14 +14 +14 +14 +13 +14 +14 +13 +13 +14 +14 +14 +13 +13 +13 +14 +14 +14 +13 +14 +13 +13 +13 +14 +13 +13 +15 +15 +15 +15 +15 +17 +17 +17 +19 +19 +21 +21 +24 +25 +26 +27 +27 +30 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +42 +43 +47 +46 +51 +51 +51 +55 +54 +59 +58 +63 +64 +65 +69 +68 +72 +72 +72 +76 +76 +76 +76 +76 +82 +82 +86 +86 +87 +90 +89 +96 +96 +96 +99 +100 +106 +105 +110 +110 +110 +116 +116 +119 +119 +119 +125 +125 +125 +125 +126 +129 +129 +133 +133 +133 +140 +140 +143 +143 +143 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +178 +179 +183 +183 +185 +185 +185 +188 +189 +191 +190 +195 +195 +195 +197 +196 +198 +198 +198 +200 +200 +200 +200 +200 +201 +200 +203 +203 +202 +204 +204 +205 +204 +205 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +204 +204 +204 +204 +204 +202 +203 +200 +200 +200 +200 +201 +198 +198 +196 +196 +196 +194 +194 +191 +190 +190 +188 +189 +185 +185 +184 +183 +183 +179 +179 +179 +175 +175 +173 +172 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +126 +125 +120 +120 +120 +115 +115 +110 +109 +110 +106 +106 +99 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +77 +72 +73 +69 +68 +68 +64 +64 +58 +58 +59 +54 +55 +50 +51 +50 +46 +47 +42 +43 +42 +41 +40 +37 +37 +38 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +14 +13 +13 +14 +13 +13 +14 +14 +13 +13 +14 +13 +13 +13 +14 +14 +14 +14 +13 +13 +14 +14 +13 +13 +14 +14 +13 +12 +16 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +36 +41 +41 +43 +43 +42 +47 +46 +51 +51 +51 +55 +54 +54 +54 +54 +58 +59 +64 +64 +65 +68 +68 +72 +72 +73 +76 +77 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +105 +110 +110 +115 +115 +115 +119 +120 +126 +125 +125 +129 +130 +133 +134 +140 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +174 +174 +178 +179 +183 +183 +183 +185 +185 +189 +188 +189 +191 +190 +191 +191 +191 +194 +194 +197 +196 +196 +199 +199 +200 +200 +201 +201 +200 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +207 +207 +206 +205 +204 +205 +205 +205 +202 +202 +202 +200 +200 +200 +200 +200 +198 +199 +197 +197 +197 +195 +195 +191 +190 +191 +189 +189 +185 +185 +183 +182 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +139 +139 +140 +133 +133 +129 +130 +129 +125 +125 +119 +119 +119 +116 +115 +109 +109 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +87 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +59 +58 +55 +54 +50 +50 +51 +47 +47 +43 +43 +41 +41 +40 +37 +37 +37 +37 +37 +33 +33 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +14 +14 +14 +14 +13 +13 +14 +13 +13 +14 +14 +14 +14 +13 +13 +14 +14 +14 +14 +13 +14 +14 +14 +13 +14 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +46 +47 +51 +51 +51 +55 +55 +59 +59 +65 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +90 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +116 +115 +116 +119 +119 +126 +125 +125 +129 +129 +133 +133 +133 +140 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +172 +173 +175 +175 +175 +175 +175 +179 +178 +182 +182 +182 +185 +185 +188 +189 +189 +190 +190 +195 +194 +197 +196 +197 +199 +198 +200 +200 +200 +200 +200 +200 +200 +200 +202 +202 +204 +205 +204 +204 +205 +206 +206 +207 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +205 +204 +204 +204 +204 +202 +202 +203 +201 +201 +201 +200 +198 +198 +199 +196 +196 +194 +194 +194 +190 +190 +188 +188 +188 +185 +184 +183 +183 +183 +179 +179 +175 +174 +175 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +134 +134 +130 +129 +125 +125 +120 +120 +120 +115 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +83 +76 +76 +73 +72 +68 +68 +69 +64 +64 +59 +58 +59 +55 +55 +54 +54 +54 +50 +51 +47 +47 +47 +43 +43 +41 +40 +42 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +13 +13 +13 +14 +13 +14 +13 +14 +13 +14 +14 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +32 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +50 +55 +55 +55 +59 +59 +64 +65 +64 +68 +68 +72 +72 +72 +76 +76 +83 +82 +87 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +116 +119 +119 +125 +125 +126 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +168 +170 +170 +173 +173 +175 +175 +179 +179 +179 +183 +183 +185 +184 +184 +189 +189 +189 +188 +188 +191 +190 +195 +194 +195 +197 +197 +198 +198 +200 +200 +201 +200 +201 +202 +202 +202 +204 +205 +204 +204 +204 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +205 +204 +205 +205 +204 +202 +203 +202 +200 +200 +200 +201 +200 +198 +199 +196 +197 +196 +194 +194 +190 +190 +191 +189 +189 +184 +184 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +152 +147 +147 +143 +143 +140 +140 +139 +134 +134 +130 +129 +129 +125 +125 +119 +119 +120 +115 +115 +110 +110 +109 +106 +106 +100 +100 +100 +95 +96 +90 +90 +87 +86 +86 +82 +82 +76 +76 +76 +72 +72 +72 +72 +72 +69 +68 +64 +64 +65 +58 +58 +54 +54 +53 +51 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +36 +33 +33 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +13 +14 +14 +13 +14 +14 +14 +13 +14 +13 +14 +14 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +14 +13 +13 +15 +15 +15 +18 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +42 +43 +47 +47 +47 +51 +51 +55 +55 +55 +58 +58 +65 +65 +69 +69 +69 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +105 +106 +110 +109 +116 +116 +120 +119 +119 +125 +125 +129 +129 +130 +134 +134 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +152 +157 +157 +161 +161 +165 +165 +165 +168 +169 +173 +173 +173 +174 +175 +175 +175 +175 +178 +179 +182 +183 +182 +185 +185 +189 +188 +190 +190 +191 +195 +195 +196 +196 +196 +198 +198 +200 +201 +200 +201 +201 +202 +202 +203 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +205 +204 +204 +204 +202 +202 +202 +200 +201 +200 +200 +200 +198 +198 +196 +196 +195 +194 +194 +191 +190 +189 +188 +189 +185 +185 +185 +184 +185 +182 +183 +179 +178 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +134 +133 +129 +129 +126 +125 +125 +120 +119 +115 +116 +110 +110 +109 +106 +106 +100 +100 +100 +96 +96 +96 +96 +95 +90 +90 +86 +86 +86 +82 +82 +76 +77 +77 +72 +72 +68 +68 +64 +64 +64 +59 +58 +54 +55 +54 +51 +51 +50 +51 +50 +47 +46 +43 +43 +43 +40 +41 +37 +37 +37 +33 +32 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +18 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +14 +14 +13 +14 +13 +14 +13 +14 +13 +13 +13 +13 +14 +13 +13 +14 +13 +14 +13 +13 +14 +13 +13 +13 +13 +12 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +32 +37 +37 +37 +41 +41 +42 +43 +48 +47 +47 +51 +51 +55 +55 +55 +58 +58 +64 +64 +64 +69 +69 +73 +72 +72 +76 +76 +82 +82 +83 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +110 +110 +110 +116 +116 +119 +119 +119 +125 +125 +130 +130 +130 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +182 +183 +184 +184 +189 +188 +189 +190 +191 +195 +194 +194 +196 +196 +198 +199 +199 +201 +201 +200 +200 +202 +203 +203 +204 +204 +204 +205 +204 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +204 +204 +204 +204 +203 +202 +202 +200 +200 +200 +200 +201 +198 +198 +196 +196 +196 +194 +194 +191 +191 +190 +188 +189 +184 +184 +184 +183 +183 +179 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +160 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +130 +129 +129 +126 +125 +119 +119 +119 +116 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +76 +76 +76 +72 +73 +69 +69 +68 +64 +64 +64 +64 +64 +58 +58 +55 +55 +54 +50 +50 +47 +47 +47 +42 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +24 +21 +21 +19 +19 +19 +17 +17 +15 +16 +15 +15 +15 +13 +13 +12 +13 +13 +14 +13 +14 +13 +14 +14 +13 +14 +13 +14 +14 +13 +13 +13 +14 +13 +13 +14 +13 +14 +13 +13 +13 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +20 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +37 +37 +36 +41 +41 +43 +43 +43 +47 +47 +47 +46 +47 +50 +51 +54 +55 +55 +59 +58 +64 +64 +65 +68 +68 +73 +72 +76 +76 +76 +83 +82 +86 +86 +86 +90 +90 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +112 +116 +116 +119 +120 +125 +126 +125 +129 +129 +133 +133 +133 +139 +139 +139 +140 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +160 +161 +161 +165 +165 +169 +169 +169 +172 +173 +175 +174 +175 +179 +179 +183 +182 +183 +185 +185 +188 +188 +189 +191 +191 +195 +195 +196 +196 +196 +198 +198 +200 +200 +200 +200 +200 +203 +203 +202 +204 +204 +205 +204 +205 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +205 +204 +205 +204 +202 +203 +203 +201 +201 +200 +200 +200 +199 +198 +196 +196 +196 +194 +195 +191 +191 +189 +189 +188 +184 +184 +183 +183 +183 +179 +178 +175 +175 +175 +173 +172 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +130 +125 +126 +119 +120 +120 +116 +116 +110 +110 +108 +105 +105 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +82 +82 +82 +76 +76 +72 +72 +73 +68 +68 +64 +64 +61 +58 +58 +55 +54 +50 +50 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +13 +14 +14 +13 +14 +14 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +14 +13 +14 +14 +14 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +26 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +51 +51 +54 +55 +59 +58 +65 +64 +64 +69 +68 +72 +72 +72 +76 +76 +76 +76 +77 +82 +82 +86 +86 +86 +90 +90 +96 +95 +96 +100 +99 +106 +106 +110 +110 +110 +115 +115 +119 +120 +119 +125 +125 +125 +125 +125 +129 +129 +133 +133 +134 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +174 +175 +175 +179 +179 +183 +182 +184 +184 +184 +189 +188 +190 +190 +191 +194 +194 +197 +196 +196 +198 +198 +200 +200 +201 +200 +200 +202 +203 +202 +204 +205 +204 +205 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +205 +204 +204 +205 +204 +202 +202 +202 +201 +200 +200 +201 +199 +198 +199 +196 +196 +194 +195 +195 +191 +190 +188 +189 +189 +184 +184 +183 +182 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +140 +139 +133 +134 +129 +129 +127 +125 +125 +120 +119 +115 +116 +116 +110 +109 +106 +106 +106 +100 +100 +100 +100 +100 +96 +96 +89 +90 +90 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +59 +58 +54 +55 +51 +51 +51 +47 +47 +43 +43 +43 +41 +40 +37 +37 +33 +33 +32 +31 +31 +27 +27 +28 +25 +25 +21 +21 +21 +19 +19 +17 +18 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +14 +13 +13 +13 +14 +14 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +14 +13 +16 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +36 +38 +41 +40 +43 +43 +47 +47 +46 +50 +50 +54 +54 +55 +59 +58 +58 +58 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +106 +106 +105 +109 +109 +116 +116 +115 +119 +119 +125 +125 +125 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +175 +175 +175 +178 +178 +182 +182 +183 +185 +185 +184 +185 +185 +188 +188 +191 +191 +191 +195 +194 +196 +196 +196 +198 +199 +200 +200 +201 +200 +200 +202 +202 +204 +204 +204 +204 +204 +205 +205 +204 +207 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +206 +205 +205 +204 +205 +204 +202 +202 +203 +200 +200 +200 +200 +201 +198 +198 +196 +197 +196 +195 +195 +190 +191 +191 +188 +189 +185 +185 +182 +183 +183 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +149 +147 +147 +143 +143 +139 +139 +139 +133 +133 +130 +130 +129 +125 +125 +125 +126 +125 +120 +119 +115 +115 +116 +110 +110 +106 +106 +101 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +65 +65 +58 +58 +54 +54 +50 +50 +51 +46 +47 +43 +43 +42 +41 +41 +37 +37 +37 +33 +32 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +14 +13 +14 +13 +14 +14 +13 +14 +14 +14 +13 +13 +13 +14 +14 +14 +13 +13 +14 +14 +14 +13 +13 +13 +14 +14 +14 +13 +15 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +27 +27 +26 +31 +31 +33 +33 +33 +37 +37 +37 +37 +37 +41 +41 +43 +43 +43 +43 +43 +47 +46 +48 +50 +50 +54 +55 +58 +59 +58 +64 +65 +68 +69 +68 +72 +72 +72 +72 +73 +77 +76 +82 +82 +82 +86 +86 +90 +90 +95 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +116 +119 +119 +126 +125 +125 +129 +129 +133 +133 +134 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +161 +161 +161 +165 +165 +169 +170 +169 +173 +173 +175 +174 +175 +179 +179 +183 +182 +185 +184 +185 +188 +188 +190 +191 +190 +195 +195 +197 +196 +196 +198 +198 +200 +200 +200 +201 +200 +202 +202 +202 +204 +204 +204 +204 +207 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +205 +205 +202 +202 +203 +201 +201 +201 +201 +198 +199 +199 +197 +197 +195 +194 +195 +191 +190 +189 +188 +188 +185 +184 +183 +183 +183 +179 +178 +175 +175 +174 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +131 +130 +130 +125 +125 +119 +119 +119 +116 +115 +110 +109 +110 +105 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +76 +76 +76 +73 +72 +68 +69 +68 +64 +64 +59 +58 +59 +55 +54 +50 +50 +51 +47 +47 +43 +42 +43 +41 +41 +37 +37 +34 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +14 +14 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +14 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +20 +25 +24 +27 +27 +27 +31 +31 +33 +33 +34 +37 +37 +41 +41 +43 +43 +42 +47 +46 +47 +47 +46 +51 +50 +51 +50 +51 +55 +55 +59 +59 +58 +64 +64 +68 +68 +72 +73 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +109 +110 +115 +116 +119 +119 +124 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +168 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +184 +185 +185 +188 +188 +190 +190 +191 +195 +195 +196 +196 +196 +198 +199 +201 +200 +201 +200 +200 +202 +202 +204 +204 +204 +204 +205 +207 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +207 +206 +204 +205 +204 +204 +205 +202 +202 +200 +200 +200 +200 +200 +201 +200 +201 +198 +198 +196 +196 +197 +195 +195 +191 +190 +191 +189 +189 +184 +185 +182 +183 +183 +179 +179 +175 +175 +175 +172 +173 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +130 +129 +125 +125 +125 +119 +119 +116 +116 +116 +110 +109 +105 +106 +101 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +65 +59 +59 +55 +55 +51 +50 +50 +47 +46 +43 +42 +42 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +24 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +14 +14 +14 +14 +14 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +18 +19 +19 +21 +21 +25 +25 +25 +27 +27 +27 +27 +27 +31 +31 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +46 +47 +46 +51 +50 +55 +54 +54 +58 +58 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +83 +86 +86 +90 +90 +95 +96 +96 +100 +100 +105 +106 +106 +110 +110 +116 +115 +116 +119 +120 +126 +126 +125 +129 +129 +133 +133 +134 +139 +139 +143 +143 +148 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +179 +183 +183 +184 +184 +189 +189 +188 +191 +195 +195 +194 +194 +196 +196 +197 +196 +197 +199 +198 +201 +200 +201 +200 +200 +202 +203 +203 +205 +204 +205 +204 +206 +207 +206 +207 +206 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +204 +204 +204 +205 +205 +202 +202 +201 +200 +200 +200 +201 +198 +198 +198 +197 +197 +195 +195 +194 +191 +191 +190 +191 +191 +189 +189 +185 +185 +184 +182 +183 +179 +178 +176 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +144 +140 +139 +134 +134 +130 +129 +130 +125 +125 +119 +119 +119 +115 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +68 +68 +64 +64 +59 +59 +59 +55 +54 +50 +51 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +33 +33 +32 +31 +31 +27 +27 +27 +25 +25 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +12 +13 +14 +13 +14 +13 +14 +13 +14 +13 +13 +13 +14 +14 +13 +13 +13 +13 +14 +13 +13 +14 +14 +14 +14 +13 +14 +14 +14 +14 +14 +13 +15 +15 +15 +17 +17 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +31 +31 +30 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +51 +55 +54 +59 +59 +59 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +110 +109 +116 +116 +120 +120 +125 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +168 +169 +173 +173 +173 +175 +175 +178 +179 +179 +182 +183 +185 +184 +185 +188 +189 +191 +190 +191 +195 +195 +197 +197 +196 +198 +199 +201 +201 +201 +201 +200 +202 +203 +204 +204 +205 +204 +205 +205 +204 +205 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +204 +204 +204 +204 +204 +202 +202 +202 +200 +201 +200 +201 +201 +200 +200 +199 +199 +199 +197 +196 +194 +195 +193 +191 +191 +189 +188 +184 +185 +185 +182 +182 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +134 +129 +129 +125 +125 +125 +120 +120 +116 +115 +116 +110 +110 +106 +105 +100 +100 +100 +96 +96 +90 +90 +90 +85 +86 +82 +82 +82 +76 +76 +72 +72 +72 +69 +68 +64 +65 +65 +58 +59 +54 +54 +51 +51 +50 +46 +47 +43 +42 +43 +41 +40 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +14 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +14 +14 +13 +14 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +54 +54 +54 +58 +58 +64 +65 +65 +68 +68 +71 +72 +72 +76 +76 +83 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +116 +120 +119 +125 +125 +126 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +169 +169 +169 +173 +173 +175 +175 +175 +178 +179 +182 +182 +183 +184 +184 +188 +189 +191 +190 +191 +194 +194 +196 +196 +197 +198 +198 +200 +200 +200 +200 +201 +202 +202 +202 +204 +204 +204 +205 +205 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +205 +202 +202 +200 +201 +200 +201 +201 +198 +198 +196 +196 +197 +194 +194 +190 +190 +190 +188 +188 +184 +184 +185 +182 +183 +179 +178 +179 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +130 +130 +126 +125 +120 +120 +119 +115 +116 +110 +109 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +69 +68 +68 +65 +64 +59 +58 +59 +54 +54 +51 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +38 +33 +33 +31 +31 +28 +26 +27 +25 +25 +21 +22 +21 +19 +19 +17 +18 +17 +15 +15 +14 +16 +15 +13 +13 +12 +12 +14 +14 +13 +13 +14 +14 +13 +13 +14 +13 +14 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +14 +13 +13 +14 +13 +12 +15 +16 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +42 +47 +47 +51 +51 +50 +55 +55 +58 +58 +59 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +115 +120 +119 +119 +125 +125 +129 +129 +129 +133 +133 +139 +140 +144 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +172 +173 +175 +175 +175 +179 +179 +183 +183 +185 +185 +185 +189 +189 +190 +190 +191 +194 +195 +195 +194 +194 +197 +197 +198 +198 +198 +200 +200 +201 +201 +201 +202 +202 +204 +204 +204 +204 +204 +206 +207 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +207 +207 +206 +204 +204 +204 +204 +204 +202 +203 +200 +200 +200 +200 +200 +198 +198 +198 +196 +197 +195 +194 +195 +190 +191 +188 +189 +189 +185 +185 +182 +183 +179 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +134 +133 +134 +130 +129 +126 +125 +125 +119 +119 +116 +116 +115 +110 +110 +106 +106 +105 +99 +100 +96 +96 +96 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +69 +68 +64 +64 +64 +58 +58 +54 +54 +55 +51 +50 +46 +46 +48 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +14 +13 +14 +13 +14 +14 +13 +13 +13 +13 +14 +13 +13 +14 +13 +14 +13 +14 +13 +14 +14 +14 +13 +14 +13 +14 +14 +13 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +30 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +46 +47 +47 +51 +50 +54 +54 +55 +59 +59 +64 +65 +65 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +97 +100 +100 +106 +106 +105 +110 +110 +116 +115 +116 +120 +119 +126 +125 +130 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +174 +175 +175 +179 +179 +183 +183 +183 +185 +185 +185 +185 +185 +189 +189 +191 +190 +190 +194 +194 +196 +196 +196 +198 +199 +200 +201 +200 +200 +200 +202 +203 +205 +204 +204 +204 +204 +205 +204 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +207 +204 +204 +204 +204 +204 +202 +203 +202 +200 +200 +200 +201 +201 +198 +199 +196 +196 +197 +194 +195 +190 +191 +188 +189 +189 +184 +185 +185 +184 +184 +182 +182 +179 +178 +178 +174 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +152 +151 +151 +147 +147 +143 +143 +143 +139 +139 +134 +133 +133 +130 +129 +125 +125 +125 +120 +120 +116 +116 +116 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +73 +72 +69 +69 +64 +65 +65 +59 +59 +54 +55 +50 +50 +51 +47 +47 +43 +43 +43 +41 +41 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +28 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +13 +13 +14 +14 +13 +13 +13 +13 +14 +14 +14 +14 +13 +13 +14 +14 +13 +14 +14 +13 +14 +13 +13 +13 +13 +15 +15 +17 +17 +17 +19 +18 +21 +21 +25 +25 +25 +28 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +42 +43 +47 +47 +50 +51 +55 +55 +55 +58 +59 +64 +65 +65 +68 +69 +73 +72 +72 +76 +76 +82 +82 +82 +86 +87 +90 +90 +90 +96 +95 +100 +100 +106 +106 +106 +110 +110 +116 +116 +116 +120 +119 +120 +120 +119 +125 +126 +129 +129 +129 +133 +134 +139 +139 +140 +143 +143 +147 +147 +152 +151 +151 +157 +157 +161 +161 +161 +165 +165 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +182 +183 +185 +185 +188 +189 +189 +191 +191 +195 +194 +194 +197 +196 +196 +196 +197 +198 +198 +200 +200 +200 +200 +201 +202 +203 +204 +204 +204 +205 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +205 +204 +205 +205 +205 +203 +202 +200 +200 +200 +200 +200 +201 +200 +200 +199 +198 +197 +196 +197 +194 +194 +191 +191 +191 +188 +189 +185 +185 +184 +183 +183 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +140 +139 +133 +133 +130 +129 +129 +125 +126 +119 +120 +120 +115 +115 +110 +110 +109 +106 +105 +100 +100 +100 +96 +96 +90 +90 +91 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +65 +64 +65 +58 +58 +54 +54 +54 +51 +51 +47 +47 +48 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +14 +13 +13 +14 +14 +14 +14 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +26 +31 +31 +33 +33 +33 +37 +37 +40 +41 +41 +43 +43 +47 +46 +47 +50 +50 +54 +54 +54 +59 +58 +64 +65 +65 +68 +68 +72 +72 +73 +76 +76 +82 +83 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +109 +115 +115 +116 +119 +120 +125 +126 +130 +129 +129 +133 +133 +139 +139 +139 +143 +143 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +172 +173 +173 +175 +175 +179 +178 +178 +183 +183 +182 +182 +183 +184 +185 +188 +188 +189 +191 +190 +194 +194 +196 +196 +197 +199 +198 +201 +200 +201 +201 +200 +202 +202 +202 +204 +204 +204 +205 +205 +206 +206 +206 +206 +207 +207 +206 +207 +207 +206 +206 +207 +207 +206 +204 +204 +204 +204 +204 +203 +203 +202 +201 +200 +200 +200 +200 +199 +198 +197 +196 +197 +195 +194 +190 +190 +189 +188 +188 +184 +185 +182 +183 +183 +179 +179 +175 +174 +175 +173 +173 +169 +168 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +148 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +119 +119 +115 +115 +110 +109 +111 +106 +106 +100 +100 +95 +96 +96 +90 +90 +86 +86 +86 +82 +82 +83 +82 +82 +76 +76 +72 +72 +72 +69 +68 +65 +64 +61 +59 +58 +55 +55 +50 +51 +50 +47 +47 +43 +43 +43 +41 +41 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +26 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +14 +13 +14 +13 +13 +14 +14 +14 +13 +13 +13 +14 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +32 +37 +37 +41 +41 +41 +43 +43 +47 +46 +47 +51 +50 +55 +55 +59 +59 +59 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +109 +110 +110 +116 +116 +115 +115 +116 +119 +120 +125 +125 +125 +129 +129 +134 +133 +133 +139 +139 +143 +143 +144 +147 +147 +151 +152 +157 +157 +157 +161 +161 +161 +161 +161 +165 +165 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +182 +183 +183 +184 +185 +188 +188 +189 +191 +190 +195 +194 +195 +197 +196 +198 +198 +198 +200 +200 +200 +200 +201 +203 +202 +204 +204 +204 +204 +205 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +205 +205 +204 +204 +205 +203 +203 +200 +200 +201 +201 +201 +198 +198 +197 +196 +196 +194 +194 +190 +190 +190 +189 +189 +185 +184 +185 +182 +183 +178 +179 +179 +175 +175 +172 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +120 +119 +120 +116 +116 +109 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +83 +77 +76 +73 +72 +68 +69 +69 +64 +64 +59 +58 +58 +55 +54 +54 +55 +54 +51 +51 +47 +47 +47 +43 +42 +41 +41 +39 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +13 +14 +13 +13 +14 +13 +14 +14 +14 +14 +13 +14 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +14 +13 +13 +15 +15 +17 +17 +17 +20 +19 +19 +19 +19 +22 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +36 +42 +41 +41 +43 +43 +47 +47 +47 +51 +51 +55 +54 +54 +58 +59 +64 +64 +64 +68 +69 +72 +72 +73 +76 +76 +82 +83 +86 +86 +85 +90 +90 +96 +96 +96 +100 +100 +100 +100 +100 +106 +106 +110 +110 +110 +116 +116 +119 +120 +122 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +166 +169 +169 +173 +172 +175 +175 +175 +179 +179 +183 +183 +183 +185 +185 +189 +189 +188 +191 +191 +195 +195 +195 +196 +197 +198 +198 +201 +200 +200 +200 +200 +202 +203 +202 +204 +204 +204 +205 +204 +206 +207 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +205 +205 +204 +204 +204 +204 +204 +204 +202 +202 +201 +200 +200 +201 +200 +198 +198 +198 +196 +196 +194 +195 +195 +190 +191 +188 +189 +185 +185 +184 +183 +183 +179 +179 +178 +175 +175 +173 +172 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +158 +151 +151 +147 +147 +144 +143 +143 +139 +140 +133 +133 +133 +129 +130 +130 +129 +130 +125 +125 +120 +119 +119 +116 +115 +109 +110 +110 +106 +106 +100 +100 +95 +96 +96 +90 +90 +86 +86 +86 +82 +82 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +62 +59 +59 +55 +55 +50 +50 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +36 +33 +33 +30 +31 +31 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +14 +13 +14 +14 +14 +14 +13 +13 +13 +14 +13 +14 +13 +13 +13 +14 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +46 +48 +50 +50 +55 +55 +58 +59 +58 +65 +64 +68 +68 +68 +72 +72 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +92 +96 +96 +100 +100 +106 +106 +106 +110 +110 +110 +110 +110 +116 +116 +115 +115 +115 +119 +120 +125 +126 +126 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +182 +183 +183 +185 +185 +189 +188 +189 +190 +190 +194 +194 +194 +197 +196 +199 +198 +198 +200 +200 +200 +200 +200 +202 +202 +204 +204 +204 +204 +204 +206 +207 +206 +206 +207 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +203 +200 +200 +201 +200 +200 +198 +198 +196 +196 +196 +194 +195 +190 +190 +191 +189 +189 +185 +185 +184 +182 +183 +179 +178 +178 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +136 +134 +133 +129 +129 +125 +126 +125 +120 +119 +116 +116 +116 +110 +110 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +89 +86 +86 +82 +82 +76 +76 +77 +72 +72 +68 +68 +69 +64 +64 +59 +59 +59 +55 +55 +50 +51 +51 +46 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +13 +14 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +14 +14 +14 +14 +14 +14 +14 +13 +14 +13 +14 +14 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +26 +31 +31 +32 +33 +33 +37 +37 +41 +41 +40 +43 +43 +47 +47 +47 +51 +50 +50 +50 +50 +55 +55 +58 +59 +59 +64 +65 +68 +68 +69 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +116 +119 +119 +125 +125 +126 +129 +129 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +173 +173 +173 +174 +175 +179 +179 +179 +182 +183 +184 +184 +184 +188 +189 +191 +190 +191 +194 +194 +197 +196 +197 +199 +199 +200 +201 +201 +201 +201 +203 +202 +204 +205 +204 +205 +204 +206 +207 +206 +207 +206 +206 +207 +206 +206 +206 +207 +207 +207 +206 +206 +204 +204 +205 +204 +204 +202 +202 +200 +200 +200 +200 +200 +198 +199 +198 +196 +196 +194 +195 +195 +191 +191 +188 +188 +188 +185 +185 +182 +182 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +148 +143 +143 +139 +139 +133 +133 +133 +129 +130 +126 +125 +126 +119 +120 +119 +119 +119 +115 +115 +109 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +86 +86 +86 +82 +82 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +65 +65 +65 +59 +59 +54 +54 +53 +51 +51 +47 +47 +43 +43 +43 +41 +40 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +20 +21 +19 +19 +18 +16 +17 +15 +15 +15 +14 +15 +13 +13 +12 +12 +14 +13 +14 +13 +14 +14 +13 +13 +14 +14 +14 +14 +13 +13 +13 +14 +14 +14 +14 +13 +13 +13 +14 +13 +13 +13 +13 +12 +16 +15 +17 +17 +17 +19 +19 +21 +21 +22 +25 +25 +27 +27 +32 +31 +31 +33 +33 +37 +37 +36 +41 +41 +40 +41 +40 +43 +43 +47 +47 +47 +51 +51 +54 +54 +55 +59 +58 +64 +65 +69 +68 +68 +72 +72 +76 +76 +76 +82 +82 +82 +82 +82 +86 +86 +90 +90 +90 +96 +95 +100 +100 +105 +106 +105 +110 +109 +110 +110 +110 +115 +115 +119 +119 +119 +125 +126 +129 +129 +128 +133 +134 +139 +139 +139 +143 +144 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +183 +185 +185 +188 +188 +191 +190 +191 +194 +194 +196 +196 +197 +199 +199 +201 +201 +201 +201 +200 +202 +202 +202 +204 +204 +204 +204 +205 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +206 +206 +205 +204 +204 +204 +204 +202 +202 +202 +200 +201 +200 +201 +200 +198 +198 +196 +196 +194 +195 +194 +191 +191 +189 +189 +189 +185 +185 +185 +185 +185 +183 +183 +178 +178 +178 +175 +175 +173 +173 +171 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +127 +125 +125 +119 +119 +115 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +87 +82 +82 +76 +77 +72 +72 +73 +68 +69 +64 +64 +64 +57 +58 +55 +55 +54 +51 +51 +47 +46 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +32 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +14 +13 +13 +14 +14 +14 +13 +13 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +46 +47 +47 +51 +50 +55 +54 +55 +58 +58 +59 +59 +58 +64 +64 +68 +68 +69 +73 +73 +76 +76 +79 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +115 +119 +119 +121 +125 +126 +129 +129 +132 +133 +133 +139 +139 +143 +143 +143 +147 +148 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +179 +178 +178 +182 +182 +184 +184 +185 +189 +189 +188 +189 +189 +191 +191 +194 +194 +194 +196 +196 +198 +198 +198 +201 +201 +200 +200 +203 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +207 +206 +206 +205 +204 +204 +204 +204 +202 +202 +200 +200 +201 +200 +200 +200 +201 +200 +198 +199 +196 +196 +197 +194 +194 +191 +190 +189 +188 +189 +185 +185 +182 +183 +183 +179 +179 +175 +175 +175 +173 +173 +173 +173 +173 +169 +169 +165 +165 +165 +161 +160 +157 +157 +152 +151 +151 +147 +147 +143 +143 +143 +139 +139 +139 +139 +139 +134 +133 +129 +130 +130 +125 +125 +120 +120 +120 +116 +116 +110 +110 +107 +106 +106 +100 +100 +96 +96 +96 +89 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +69 +68 +68 +64 +64 +58 +58 +55 +55 +55 +51 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +20 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +14 +14 +13 +14 +14 +14 +13 +13 +14 +13 +13 +14 +14 +13 +13 +15 +16 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +37 +37 +37 +41 +41 +42 +43 +43 +47 +46 +51 +51 +52 +54 +54 +59 +58 +64 +65 +64 +68 +69 +72 +72 +72 +76 +76 +82 +82 +83 +86 +86 +90 +90 +91 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +115 +116 +120 +119 +125 +125 +125 +130 +129 +133 +133 +134 +139 +139 +143 +143 +144 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +184 +185 +185 +188 +189 +190 +191 +194 +195 +195 +197 +197 +198 +198 +198 +201 +200 +200 +201 +200 +203 +202 +205 +205 +204 +205 +205 +206 +206 +206 +206 +207 +206 +206 +206 +206 +207 +207 +206 +206 +207 +207 +206 +206 +206 +206 +206 +204 +205 +204 +204 +204 +202 +203 +200 +200 +201 +200 +200 +198 +199 +196 +196 +196 +195 +195 +190 +190 +190 +188 +188 +188 +188 +188 +185 +185 +183 +183 +183 +179 +179 +175 +174 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +148 +147 +147 +143 +143 +139 +139 +140 +133 +134 +129 +129 +126 +126 +125 +120 +119 +115 +116 +116 +109 +110 +106 +106 +106 +99 +100 +96 +96 +96 +90 +90 +85 +86 +86 +82 +82 +76 +76 +72 +73 +72 +68 +68 +65 +65 +64 +58 +58 +55 +54 +54 +51 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +14 +12 +13 +13 +14 +14 +14 +13 +13 +14 +14 +13 +13 +14 +14 +14 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +14 +14 +14 +13 +13 +13 +15 +16 +15 +17 +17 +19 +19 +19 +21 +21 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +50 +51 +55 +55 +59 +58 +58 +64 +64 +68 +69 +68 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +115 +119 +119 +119 +126 +126 +129 +129 +133 +134 +134 +140 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +160 +161 +161 +165 +165 +168 +169 +169 +172 +173 +175 +175 +179 +179 +179 +182 +183 +185 +185 +185 +188 +188 +191 +191 +191 +194 +195 +197 +196 +197 +198 +198 +200 +200 +201 +200 +201 +203 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +207 +204 +205 +205 +204 +204 +202 +202 +201 +200 +200 +200 +200 +198 +198 +198 +196 +197 +196 +196 +197 +195 +194 +191 +191 +190 +189 +188 +184 +185 +185 +183 +183 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +140 +139 +139 +133 +133 +129 +129 +129 +126 +125 +119 +120 +119 +116 +115 +109 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +87 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +59 +58 +58 +54 +54 +51 +51 +51 +47 +47 +43 +42 +41 +41 +40 +37 +37 +33 +33 +33 +31 +31 +27 +26 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +18 +15 +15 +15 +15 +14 +13 +13 +12 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +14 +14 +13 +13 +13 +14 +14 +14 +14 +14 +13 +14 +14 +13 +13 +13 +13 +12 +15 +15 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +26 +27 +27 +31 +31 +33 +33 +33 +37 +37 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +51 +51 +55 +55 +59 +59 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +116 +115 +115 +119 +119 +126 +126 +125 +129 +129 +133 +133 +134 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +165 +165 +165 +169 +169 +172 +173 +173 +175 +175 +178 +179 +179 +183 +183 +185 +184 +185 +188 +188 +190 +190 +191 +194 +195 +196 +196 +199 +199 +199 +200 +200 +200 +200 +201 +202 +202 +203 +202 +203 +204 +204 +205 +204 +204 +207 +207 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +204 +204 +204 +205 +204 +205 +204 +205 +203 +203 +201 +201 +201 +200 +201 +198 +199 +199 +197 +197 +194 +195 +190 +191 +191 +188 +189 +185 +185 +185 +183 +183 +179 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +144 +139 +139 +134 +133 +134 +129 +129 +125 +125 +126 +119 +119 +116 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +73 +72 +73 +68 +68 +65 +64 +59 +59 +58 +55 +54 +50 +51 +51 +47 +47 +47 +47 +47 +42 +42 +40 +41 +41 +37 +37 +33 +33 +33 +31 +31 +28 +27 +26 +25 +25 +21 +21 +19 +19 +19 +17 +17 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +14 +13 +14 +14 +13 +13 +13 +14 +14 +14 +14 +13 +13 +14 +14 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +32 +33 +33 +37 +37 +41 +41 +42 +43 +43 +47 +47 +50 +51 +50 +55 +54 +58 +58 +59 +64 +64 +68 +68 +69 +72 +72 +76 +76 +76 +82 +82 +87 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +105 +110 +110 +110 +115 +116 +119 +119 +120 +126 +125 +130 +129 +130 +133 +133 +139 +139 +144 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +182 +184 +185 +185 +189 +189 +191 +190 +191 +194 +194 +196 +196 +196 +199 +199 +200 +201 +201 +200 +200 +202 +202 +203 +205 +205 +204 +204 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +207 +204 +204 +205 +205 +202 +202 +200 +200 +200 +200 +200 +198 +199 +197 +196 +196 +194 +194 +190 +191 +190 +188 +189 +185 +185 +185 +183 +183 +179 +179 +175 +175 +174 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +130 +130 +129 +125 +125 +120 +119 +119 +115 +116 +110 +110 +110 +106 +106 +100 +100 +99 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +68 +68 +64 +64 +59 +59 +59 +55 +55 +50 +50 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +34 +33 +33 +31 +31 +27 +27 +27 +25 +25 +25 +25 +25 +21 +21 +19 +19 +19 +18 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +14 +14 +13 +14 +14 +13 +13 +14 +13 +13 +13 +13 +14 +13 +13 +14 +14 +13 +14 +13 +13 +13 +14 +14 +13 +14 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +30 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +50 +51 +54 +55 +55 +58 +59 +64 +64 +64 +69 +68 +72 +72 +77 +76 +76 +82 +82 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +105 +106 +109 +110 +110 +116 +116 +120 +120 +126 +126 +126 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +162 +165 +165 +169 +169 +172 +173 +173 +175 +175 +179 +179 +179 +183 +183 +183 +183 +182 +185 +184 +188 +189 +188 +190 +190 +195 +194 +195 +196 +197 +198 +199 +200 +200 +201 +201 +200 +202 +202 +202 +204 +204 +205 +204 +204 +205 +204 +206 +207 +207 +206 +207 +206 +207 +206 +206 +207 +206 +206 +207 +207 +206 +204 +204 +204 +204 +205 +202 +202 +200 +200 +201 +201 +200 +198 +198 +199 +196 +197 +194 +194 +190 +191 +191 +189 +189 +185 +185 +185 +183 +182 +179 +179 +179 +175 +174 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +134 +133 +133 +130 +130 +126 +125 +125 +120 +119 +116 +115 +116 +110 +110 +106 +106 +100 +99 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +65 +65 +65 +58 +59 +54 +55 +51 +51 +50 +47 +46 +43 +43 +43 +41 +41 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +20 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +13 +13 +14 +13 +13 +14 +14 +13 +14 +14 +14 +13 +13 +13 +14 +14 +14 +13 +14 +13 +13 +13 +14 +14 +14 +13 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +28 +31 +30 +31 +31 +31 +33 +33 +37 +37 +37 +40 +41 +42 +43 +42 +47 +47 +50 +50 +55 +55 +54 +58 +59 +64 +64 +64 +68 +68 +72 +72 +73 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +115 +116 +119 +119 +126 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +156 +157 +157 +161 +161 +165 +165 +165 +169 +169 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +182 +183 +183 +184 +184 +189 +188 +190 +190 +191 +195 +194 +196 +196 +196 +198 +199 +198 +199 +199 +200 +200 +200 +200 +200 +203 +203 +204 +204 +204 +204 +205 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +207 +207 +207 +204 +205 +205 +205 +205 +203 +203 +200 +200 +201 +200 +200 +199 +198 +196 +197 +196 +194 +195 +191 +191 +190 +188 +188 +185 +184 +185 +183 +183 +178 +179 +179 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +130 +129 +125 +125 +120 +120 +119 +116 +115 +109 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +83 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +59 +59 +54 +54 +54 +55 +55 +51 +51 +47 +47 +47 +43 +43 +41 +40 +41 +37 +37 +33 +33 +30 +31 +31 +27 +27 +25 +25 +25 +21 +21 +21 +21 +21 +19 +19 +17 +17 +16 +15 +15 +15 +15 +14 +13 +13 +12 +13 +13 +13 +13 +13 +13 +14 +14 +13 +14 +14 +13 +13 +14 +14 +13 +14 +14 +14 +13 +14 +14 +13 +14 +13 +13 +14 +13 +15 +15 +15 +17 +17 +19 +20 +19 +21 +21 +25 +25 +25 +27 +27 +31 +30 +31 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +50 +51 +55 +54 +55 +59 +58 +64 +65 +64 +68 +68 +72 +72 +72 +76 +77 +82 +82 +87 +86 +86 +90 +90 +96 +95 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +116 +120 +119 +125 +125 +125 +129 +129 +133 +133 +139 +140 +139 +143 +143 +143 +143 +143 +147 +147 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +166 +165 +166 +169 +169 +173 +172 +175 +175 +175 +178 +178 +182 +183 +182 +185 +184 +185 +185 +184 +188 +189 +190 +191 +191 +194 +195 +196 +196 +198 +198 +199 +200 +201 +200 +200 +201 +202 +202 +204 +205 +205 +204 +204 +206 +206 +206 +206 +206 +206 +207 +207 +207 +206 +206 +206 +206 +207 +206 +204 +204 +204 +204 +204 +203 +203 +201 +200 +201 +200 +200 +198 +198 +199 +196 +197 +194 +194 +194 +191 +190 +189 +188 +185 +185 +184 +182 +182 +178 +179 +179 +174 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +144 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +125 +120 +119 +115 +115 +115 +110 +110 +106 +106 +107 +100 +100 +96 +96 +91 +90 +90 +86 +86 +82 +82 +82 +76 +77 +77 +76 +76 +73 +72 +69 +69 +68 +65 +65 +59 +58 +59 +55 +54 +51 +51 +47 +47 +47 +42 +43 +41 +41 +41 +37 +37 +36 +37 +37 +33 +33 +31 +31 +31 +27 +26 +25 +25 +22 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +13 +13 +13 +14 +13 +13 +14 +14 +13 +14 +14 +14 +14 +14 +14 +13 +14 +14 +13 +14 +14 +13 +14 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +42 +47 +46 +51 +51 +50 +54 +54 +58 +58 +64 +65 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +115 +115 +116 +119 +119 +125 +125 +126 +129 +129 +129 +129 +129 +134 +133 +140 +140 +140 +143 +143 +147 +147 +147 +151 +151 +156 +157 +161 +161 +161 +165 +165 +169 +169 +169 +172 +173 +173 +172 +173 +175 +175 +178 +179 +179 +182 +183 +185 +184 +188 +188 +189 +190 +191 +194 +195 +195 +197 +197 +198 +199 +199 +200 +200 +200 +201 +200 +202 +202 +204 +204 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +204 +204 +204 +204 +204 +203 +202 +200 +200 +200 +200 +201 +199 +198 +197 +196 +196 +195 +194 +190 +190 +190 +188 +188 +184 +184 +184 +182 +183 +179 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +126 +119 +119 +116 +115 +109 +110 +110 +105 +106 +100 +100 +100 +96 +96 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +72 +72 +68 +68 +64 +64 +64 +58 +58 +55 +55 +54 +50 +51 +50 +51 +51 +46 +47 +43 +43 +43 +41 +41 +37 +37 +34 +33 +33 +31 +31 +27 +28 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +14 +14 +14 +13 +14 +13 +13 +13 +13 +14 +14 +14 +14 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +12 +16 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +30 +31 +33 +33 +37 +37 +37 +40 +41 +43 +42 +47 +46 +47 +51 +51 +55 +55 +55 +59 +58 +64 +65 +64 +68 +68 +72 +72 +73 +76 +76 +82 +82 +83 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +105 +106 +109 +110 +110 +110 +110 +116 +116 +119 +120 +120 +125 +125 +129 +130 +131 +134 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +157 +157 +157 +161 +161 +165 +165 +165 +168 +169 +173 +172 +174 +174 +175 +179 +179 +182 +182 +183 +185 +185 +189 +189 +189 +191 +191 +195 +194 +195 +197 +197 +198 +198 +199 +201 +201 +200 +200 +202 +202 +203 +205 +204 +205 +205 +205 +206 +206 +206 +206 +207 +206 +206 +207 +206 +207 +206 +207 +206 +206 +207 +204 +205 +204 +204 +202 +202 +202 +201 +200 +200 +200 +200 +198 +198 +196 +197 +196 +194 +195 +191 +190 +191 +188 +188 +185 +185 +185 +183 +183 +179 +179 +175 +175 +175 +172 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +158 +151 +151 +151 +147 +148 +143 +143 +144 +139 +140 +133 +133 +129 +130 +130 +125 +125 +119 +119 +119 +116 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +88 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +69 +64 +64 +64 +64 +64 +58 +58 +55 +55 +54 +51 +50 +47 +47 +43 +43 +42 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +28 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +14 +13 +14 +13 +13 +13 +13 +13 +13 +14 +14 +13 +14 +13 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +37 +37 +36 +41 +41 +43 +43 +43 +47 +47 +51 +51 +51 +55 +55 +58 +58 +59 +64 +64 +69 +68 +69 +72 +72 +76 +77 +83 +82 +82 +86 +86 +90 +90 +90 +96 +96 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +116 +117 +120 +120 +126 +126 +129 +130 +129 +133 +133 +139 +139 +139 +143 +143 +143 +143 +147 +147 +147 +151 +151 +151 +157 +157 +161 +161 +162 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +178 +182 +183 +185 +184 +185 +189 +189 +190 +191 +191 +195 +195 +196 +196 +198 +198 +198 +200 +201 +200 +200 +200 +202 +202 +205 +204 +204 +205 +205 +207 +206 +206 +206 +206 +207 +206 +207 +207 +206 +207 +206 +206 +206 +206 +204 +204 +204 +204 +205 +202 +202 +201 +201 +200 +200 +201 +198 +198 +198 +197 +196 +194 +195 +195 +190 +191 +189 +188 +185 +184 +184 +183 +182 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +158 +151 +151 +147 +147 +143 +143 +143 +140 +140 +133 +134 +134 +129 +129 +126 +126 +124 +120 +119 +116 +116 +116 +109 +110 +106 +105 +106 +100 +100 +96 +96 +89 +90 +90 +86 +86 +83 +82 +82 +76 +76 +77 +76 +76 +73 +72 +68 +69 +68 +64 +64 +59 +58 +55 +54 +54 +50 +50 +47 +47 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +24 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +13 +14 +14 +14 +13 +14 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +14 +14 +13 +15 +15 +15 +17 +17 +19 +19 +20 +21 +21 +24 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +36 +41 +41 +41 +43 +43 +47 +47 +47 +51 +51 +55 +54 +55 +59 +59 +64 +64 +69 +68 +68 +72 +72 +76 +76 +76 +83 +82 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +101 +106 +106 +110 +110 +115 +116 +116 +120 +120 +125 +126 +125 +129 +129 +129 +129 +130 +134 +133 +139 +139 +139 +143 +143 +147 +147 +148 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +182 +183 +185 +185 +189 +189 +190 +191 +190 +194 +194 +196 +196 +196 +199 +198 +200 +200 +200 +201 +200 +203 +202 +202 +204 +204 +204 +205 +205 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +206 +206 +205 +204 +204 +204 +204 +202 +202 +202 +200 +200 +200 +200 +200 +198 +199 +196 +197 +195 +195 +194 +190 +190 +188 +188 +189 +184 +184 +182 +182 +182 +179 +178 +175 +174 +174 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +143 +144 +143 +139 +139 +133 +133 +134 +130 +129 +125 +125 +123 +120 +119 +115 +116 +109 +110 +110 +106 +106 +100 +100 +100 +96 +96 +95 +96 +96 +90 +90 +86 +86 +87 +82 +82 +76 +76 +75 +72 +72 +68 +68 +65 +64 +64 +59 +59 +55 +55 +54 +50 +51 +47 +46 +47 +43 +43 +41 +41 +41 +37 +37 +33 +32 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +12 +13 +14 +13 +14 +13 +14 +13 +14 +14 +13 +13 +14 +14 +14 +13 +13 +14 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +13 +13 +15 +15 +17 +18 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +47 +47 +47 +51 +50 +55 +54 +55 +59 +59 +58 +59 +59 +65 +64 +69 +68 +68 +72 +72 +76 +76 +78 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +105 +106 +106 +106 +106 +110 +110 +115 +115 +115 +119 +120 +125 +125 +129 +130 +129 +134 +134 +139 +139 +140 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +174 +175 +175 +179 +179 +183 +183 +182 +185 +185 +189 +189 +188 +190 +191 +195 +194 +195 +196 +196 +199 +199 +198 +200 +200 +200 +200 +202 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +207 +207 +206 +206 +206 +204 +205 +205 +205 +203 +203 +202 +201 +200 +200 +200 +201 +198 +199 +197 +197 +196 +195 +195 +191 +191 +191 +189 +189 +185 +185 +185 +183 +183 +179 +178 +175 +175 +175 +173 +169 +169 +169 +169 +165 +165 +166 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +145 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +126 +125 +120 +119 +119 +120 +119 +116 +116 +110 +110 +110 +106 +106 +100 +100 +98 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +69 +68 +64 +65 +58 +59 +58 +55 +54 +50 +51 +46 +46 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +30 +31 +27 +27 +27 +25 +25 +21 +21 +22 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +14 +14 +13 +13 +14 +14 +13 +14 +13 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +34 +33 +33 +37 +37 +42 +41 +41 +43 +43 +42 +43 +43 +48 +47 +51 +50 +51 +55 +54 +58 +59 +59 +65 +64 +68 +69 +72 +73 +72 +76 +76 +82 +82 +82 +87 +86 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +107 +110 +110 +116 +116 +119 +120 +119 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +160 +161 +161 +165 +164 +169 +169 +169 +173 +173 +175 +175 +175 +178 +179 +183 +183 +183 +185 +185 +189 +188 +188 +190 +191 +194 +194 +196 +196 +196 +199 +198 +201 +201 +200 +200 +200 +202 +202 +203 +204 +205 +204 +204 +204 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +204 +205 +204 +204 +205 +203 +202 +202 +201 +200 +201 +201 +201 +198 +198 +196 +196 +197 +194 +195 +190 +190 +188 +189 +189 +185 +185 +183 +183 +183 +178 +179 +179 +179 +179 +175 +175 +172 +173 +173 +169 +169 +165 +165 +163 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +139 +139 +139 +133 +133 +129 +130 +130 +126 +125 +119 +119 +116 +115 +116 +110 +109 +105 +105 +105 +100 +100 +95 +96 +96 +90 +90 +86 +86 +82 +82 +76 +76 +77 +72 +72 +68 +68 +64 +64 +64 +58 +58 +55 +54 +55 +50 +50 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +14 +15 +15 +15 +15 +13 +13 +13 +12 +14 +13 +14 +13 +13 +13 +13 +13 +13 +14 +13 +14 +13 +14 +14 +13 +14 +14 +14 +13 +13 +13 +14 +14 +14 +14 +13 +14 +14 +13 +12 +15 +15 +17 +17 +20 +19 +19 +21 +21 +24 +25 +25 +27 +28 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +50 +51 +51 +55 +54 +58 +58 +58 +64 +64 +64 +64 +64 +68 +68 +73 +72 +72 +76 +76 +82 +82 +84 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +116 +120 +119 +126 +126 +126 +129 +130 +134 +134 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +182 +182 +182 +185 +185 +189 +188 +189 +190 +191 +195 +194 +195 +196 +196 +199 +199 +198 +201 +201 +201 +200 +201 +202 +202 +204 +204 +205 +204 +204 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +204 +204 +205 +204 +204 +202 +203 +200 +201 +200 +200 +201 +198 +198 +198 +196 +197 +197 +197 +197 +195 +194 +191 +191 +190 +189 +190 +184 +185 +184 +183 +182 +179 +179 +174 +175 +175 +173 +173 +169 +169 +169 +164 +165 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +148 +144 +143 +143 +139 +139 +133 +133 +133 +129 +129 +126 +126 +125 +120 +119 +116 +115 +115 +109 +110 +106 +105 +106 +100 +100 +96 +96 +91 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +69 +64 +64 +65 +58 +58 +54 +54 +55 +50 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +20 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +14 +14 +13 +14 +14 +13 +13 +13 +14 +13 +13 +14 +14 +14 +13 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +13 +15 +15 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +26 +27 +26 +31 +31 +32 +33 +33 +37 +37 +41 +41 +41 +43 +43 +43 +42 +43 +46 +47 +50 +51 +51 +54 +54 +58 +58 +60 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +99 +100 +100 +106 +106 +110 +110 +115 +116 +116 +119 +119 +125 +125 +125 +129 +129 +134 +133 +133 +139 +139 +143 +143 +143 +146 +147 +151 +151 +152 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +179 +183 +182 +185 +185 +185 +189 +188 +190 +190 +190 +195 +194 +196 +196 +199 +199 +199 +200 +200 +200 +201 +201 +203 +202 +204 +204 +204 +205 +204 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +207 +206 +207 +206 +206 +204 +204 +204 +204 +204 +203 +202 +202 +202 +202 +201 +200 +201 +201 +201 +199 +199 +197 +196 +195 +194 +195 +191 +191 +188 +189 +188 +185 +185 +183 +183 +182 +179 +179 +179 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +162 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +130 +126 +126 +125 +119 +119 +115 +116 +110 +110 +110 +106 +106 +100 +100 +100 +95 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +68 +68 +64 +64 +59 +59 +59 +55 +55 +50 +50 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +32 +27 +27 +25 +25 +22 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +14 +13 +14 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +27 +27 +27 +31 +31 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +44 +47 +46 +51 +51 +54 +54 +54 +58 +59 +64 +65 +64 +68 +69 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +95 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +115 +115 +119 +119 +126 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +147 +147 +148 +151 +151 +157 +157 +157 +161 +161 +165 +166 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +178 +183 +183 +185 +185 +188 +189 +189 +191 +191 +194 +195 +194 +196 +197 +198 +198 +198 +201 +201 +200 +201 +200 +202 +202 +205 +205 +205 +204 +204 +206 +207 +207 +206 +207 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +203 +201 +201 +200 +200 +199 +198 +199 +197 +196 +195 +195 +194 +191 +190 +191 +190 +191 +188 +188 +185 +184 +184 +183 +183 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +129 +129 +129 +125 +125 +120 +119 +119 +115 +116 +110 +110 +110 +105 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +68 +69 +65 +64 +58 +58 +58 +55 +54 +51 +51 +51 +47 +46 +43 +43 +43 +41 +41 +37 +36 +34 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +16 +13 +13 +12 +13 +14 +13 +13 +14 +14 +14 +14 +14 +14 +14 +13 +14 +14 +13 +13 +13 +13 +14 +13 +13 +14 +13 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +21 +21 +21 +25 +25 +27 +27 +28 +31 +31 +33 +33 +34 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +50 +51 +55 +55 +58 +58 +59 +64 +64 +68 +68 +69 +72 +71 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +116 +120 +119 +119 +126 +125 +130 +129 +134 +133 +133 +140 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +172 +173 +175 +175 +179 +179 +179 +182 +182 +184 +185 +185 +188 +188 +191 +191 +190 +194 +194 +197 +197 +197 +198 +198 +200 +200 +201 +201 +201 +202 +202 +205 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +205 +204 +204 +205 +204 +202 +202 +202 +200 +201 +200 +200 +200 +198 +199 +198 +198 +199 +196 +196 +195 +194 +195 +191 +191 +188 +188 +187 +185 +185 +183 +183 +178 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +143 +143 +143 +140 +139 +133 +133 +133 +130 +129 +126 +126 +125 +119 +119 +115 +116 +116 +110 +110 +106 +106 +105 +100 +100 +96 +96 +89 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +58 +58 +54 +54 +55 +50 +51 +47 +46 +43 +43 +43 +41 +41 +37 +37 +37 +33 +34 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +20 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +14 +14 +13 +14 +14 +14 +13 +13 +13 +14 +14 +14 +13 +14 +14 +14 +14 +13 +13 +14 +14 +13 +14 +13 +13 +12 +15 +15 +15 +15 +15 +17 +18 +19 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +30 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +46 +47 +47 +50 +51 +54 +54 +55 +59 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +77 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +115 +120 +120 +120 +125 +125 +129 +129 +129 +133 +134 +140 +139 +139 +143 +143 +147 +147 +147 +151 +151 +156 +157 +157 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +178 +179 +183 +183 +183 +185 +185 +188 +189 +188 +190 +190 +195 +195 +195 +196 +196 +199 +198 +201 +200 +200 +200 +200 +202 +202 +202 +204 +204 +205 +204 +205 +205 +204 +206 +206 +206 +207 +206 +207 +206 +206 +207 +206 +206 +207 +206 +206 +206 +204 +204 +204 +204 +204 +202 +203 +202 +202 +203 +200 +201 +200 +200 +200 +198 +198 +196 +196 +195 +195 +194 +191 +191 +188 +188 +189 +185 +184 +183 +183 +182 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +158 +157 +157 +151 +150 +147 +147 +147 +144 +143 +139 +139 +139 +133 +133 +129 +129 +130 +125 +125 +120 +119 +120 +116 +116 +110 +110 +106 +105 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +77 +76 +72 +72 +69 +68 +68 +65 +64 +59 +58 +54 +55 +54 +51 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +15 +15 +15 +13 +13 +13 +13 +14 +13 +14 +13 +14 +14 +13 +13 +13 +13 +14 +14 +13 +14 +14 +13 +14 +13 +13 +13 +14 +14 +14 +14 +13 +14 +13 +13 +14 +13 +15 +15 +16 +17 +17 +20 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +40 +41 +41 +43 +42 +47 +47 +50 +51 +50 +54 +55 +58 +59 +58 +65 +65 +68 +69 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +116 +120 +120 +119 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +152 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +172 +174 +175 +174 +175 +178 +178 +183 +182 +183 +185 +185 +189 +189 +191 +191 +190 +194 +195 +196 +196 +196 +198 +198 +199 +198 +199 +200 +201 +200 +200 +201 +203 +202 +204 +205 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +204 +204 +205 +204 +204 +202 +202 +201 +200 +201 +200 +200 +198 +198 +198 +197 +197 +195 +195 +195 +190 +190 +188 +189 +188 +185 +185 +183 +183 +183 +179 +178 +175 +174 +173 +172 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +140 +139 +133 +133 +129 +129 +125 +125 +125 +120 +120 +115 +115 +115 +110 +110 +106 +106 +106 +100 +100 +97 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +59 +59 +59 +58 +58 +55 +55 +51 +50 +50 +46 +46 +43 +42 +44 +41 +40 +37 +36 +33 +33 +32 +31 +31 +27 +27 +27 +25 +25 +25 +25 +24 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +14 +13 +14 +14 +14 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +46 +47 +51 +51 +54 +54 +54 +58 +58 +64 +64 +65 +68 +68 +72 +72 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +105 +109 +110 +115 +116 +115 +120 +119 +126 +125 +130 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +164 +165 +166 +169 +169 +173 +173 +175 +175 +175 +179 +178 +182 +183 +183 +185 +184 +185 +184 +185 +189 +189 +190 +191 +191 +195 +195 +196 +197 +197 +199 +199 +200 +200 +200 +200 +200 +202 +203 +205 +205 +205 +205 +204 +204 +205 +205 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +207 +207 +204 +205 +205 +205 +204 +202 +202 +202 +200 +200 +200 +200 +200 +198 +198 +196 +196 +197 +194 +194 +191 +191 +188 +189 +189 +184 +185 +183 +182 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +148 +147 +147 +143 +143 +139 +139 +139 +133 +133 +130 +129 +129 +126 +125 +120 +119 +116 +116 +110 +110 +110 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +59 +59 +59 +54 +55 +50 +51 +47 +46 +47 +43 +42 +41 +40 +41 +37 +37 +32 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +13 +13 +13 +14 +13 +14 +14 +13 +13 +14 +14 +14 +14 +13 +14 +13 +14 +14 +13 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +24 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +42 +42 +43 +47 +46 +50 +51 +51 +55 +55 +59 +58 +65 +64 +64 +68 +69 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +105 +110 +110 +116 +115 +115 +119 +119 +125 +125 +125 +129 +130 +133 +133 +133 +139 +139 +142 +143 +143 +147 +147 +151 +151 +152 +157 +157 +161 +161 +166 +165 +165 +169 +169 +173 +173 +172 +175 +175 +175 +175 +175 +178 +179 +182 +183 +183 +185 +185 +188 +188 +189 +191 +191 +194 +194 +196 +196 +196 +198 +198 +200 +200 +200 +200 +200 +201 +200 +201 +202 +202 +204 +205 +205 +205 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +204 +204 +205 +204 +204 +202 +202 +200 +200 +201 +200 +201 +198 +198 +196 +196 +196 +194 +194 +190 +190 +190 +189 +188 +185 +185 +185 +183 +182 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +146 +143 +143 +143 +139 +140 +133 +133 +133 +129 +129 +125 +125 +125 +120 +119 +116 +116 +111 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +74 +68 +68 +64 +64 +58 +58 +58 +54 +54 +51 +50 +51 +46 +47 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +32 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +14 +14 +14 +13 +14 +13 +14 +13 +14 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +13 +13 +13 +13 +13 +13 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +40 +41 +43 +42 +47 +46 +47 +50 +50 +55 +55 +55 +58 +59 +64 +65 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +95 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +116 +115 +119 +120 +125 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +176 +179 +179 +182 +183 +184 +184 +184 +188 +189 +190 +190 +190 +195 +194 +194 +194 +194 +196 +196 +198 +198 +199 +200 +201 +200 +200 +202 +203 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +205 +203 +203 +202 +200 +201 +200 +200 +200 +198 +198 +196 +196 +196 +195 +194 +190 +191 +190 +189 +188 +184 +184 +185 +182 +182 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +144 +139 +139 +133 +133 +130 +129 +129 +125 +125 +119 +119 +119 +116 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +68 +68 +64 +64 +64 +64 +65 +58 +58 +54 +54 +54 +51 +50 +47 +46 +48 +43 +43 +41 +41 +36 +37 +37 +33 +33 +31 +31 +31 +27 +27 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +14 +13 +13 +13 +13 +14 +13 +14 +14 +13 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +32 +37 +37 +41 +41 +41 +43 +43 +46 +47 +47 +51 +51 +55 +55 +54 +58 +58 +64 +64 +64 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +99 +106 +106 +105 +110 +110 +116 +116 +115 +119 +120 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +143 +143 +143 +147 +148 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +172 +173 +172 +175 +175 +179 +179 +179 +182 +183 +183 +183 +183 +185 +184 +188 +189 +189 +190 +191 +195 +195 +197 +196 +197 +199 +198 +201 +200 +200 +200 +201 +202 +202 +202 +204 +204 +205 +204 +205 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +204 +204 +204 +205 +204 +202 +202 +201 +200 +200 +200 +200 +198 +199 +198 +196 +197 +194 +194 +191 +190 +190 +188 +188 +185 +185 +184 +183 +183 +178 +179 +179 +175 +174 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +140 +133 +133 +133 +129 +130 +126 +125 +125 +119 +119 +115 +116 +116 +110 +109 +106 +106 +99 +100 +100 +96 +96 +90 +90 +90 +86 +86 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +66 +65 +64 +58 +58 +55 +54 +54 +50 +51 +47 +47 +47 +43 +43 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +28 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +18 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +13 +14 +14 +13 +14 +14 +14 +14 +13 +13 +14 +13 +13 +13 +13 +14 +13 +13 +14 +14 +13 +14 +13 +13 +13 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +50 +55 +54 +54 +58 +59 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +91 +96 +95 +100 +100 +106 +106 +106 +110 +109 +116 +115 +116 +119 +119 +125 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +145 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +182 +182 +185 +185 +185 +189 +189 +191 +190 +190 +194 +194 +196 +197 +196 +198 +199 +200 +200 +200 +201 +200 +202 +202 +203 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +203 +200 +200 +200 +201 +199 +198 +199 +197 +196 +195 +195 +194 +190 +191 +189 +188 +188 +185 +185 +182 +183 +183 +178 +179 +175 +175 +175 +172 +173 +169 +169 +165 +164 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +134 +129 +129 +130 +125 +125 +120 +119 +115 +115 +115 +110 +110 +106 +106 +106 +100 +100 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +79 +76 +76 +73 +72 +68 +68 +68 +65 +64 +58 +58 +58 +55 +55 +55 +55 +55 +51 +51 +46 +47 +47 +43 +42 +40 +41 +37 +37 +36 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +14 +13 +13 +13 +14 +14 +13 +14 +13 +14 +13 +14 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +40 +43 +42 +43 +47 +47 +50 +50 +51 +54 +54 +58 +58 +59 +64 +64 +68 +68 +69 +72 +72 +76 +76 +77 +82 +82 +86 +86 +90 +90 +90 +95 +96 +100 +100 +100 +106 +106 +106 +105 +106 +110 +110 +115 +115 +115 +120 +120 +125 +125 +126 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +172 +173 +173 +174 +175 +178 +179 +179 +183 +183 +185 +184 +184 +188 +188 +191 +190 +190 +194 +195 +196 +197 +197 +199 +199 +200 +201 +201 +200 +200 +202 +202 +204 +204 +204 +204 +204 +207 +206 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +204 +205 +205 +204 +204 +202 +202 +201 +201 +200 +201 +200 +199 +198 +198 +196 +196 +195 +194 +194 +191 +191 +188 +188 +188 +185 +185 +183 +183 +178 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +134 +133 +133 +129 +129 +126 +125 +125 +119 +119 +115 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +82 +82 +82 +76 +76 +73 +72 +72 +68 +69 +68 +68 +68 +64 +64 +59 +58 +59 +55 +54 +51 +51 +47 +47 +46 +43 +43 +41 +41 +40 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +14 +13 +13 +14 +13 +13 +14 +13 +13 +13 +14 +14 +13 +14 +14 +13 +14 +13 +14 +13 +13 +14 +14 +13 +13 +13 +15 +15 +15 +17 +17 +18 +19 +19 +21 +21 +25 +25 +26 +26 +27 +31 +31 +34 +32 +33 +37 +37 +41 +41 +41 +43 +43 +47 +46 +47 +50 +50 +54 +55 +55 +58 +58 +64 +64 +65 +68 +68 +72 +72 +76 +76 +76 +82 +82 +87 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +116 +117 +119 +120 +125 +125 +129 +129 +129 +134 +133 +139 +139 +139 +143 +143 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +162 +161 +163 +165 +165 +168 +169 +173 +173 +173 +175 +174 +179 +179 +179 +182 +183 +184 +185 +184 +189 +188 +191 +190 +191 +194 +195 +196 +197 +198 +198 +199 +200 +200 +200 +201 +200 +202 +202 +205 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +207 +206 +204 +204 +204 +204 +204 +203 +202 +202 +203 +203 +200 +200 +201 +200 +200 +198 +199 +196 +197 +197 +194 +194 +190 +190 +189 +188 +188 +185 +184 +183 +182 +182 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +148 +147 +147 +143 +143 +139 +140 +139 +133 +133 +133 +133 +133 +129 +129 +125 +126 +125 +120 +119 +116 +115 +113 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +67 +65 +64 +59 +58 +54 +54 +54 +51 +51 +47 +47 +47 +43 +42 +41 +41 +41 +37 +37 +33 +33 +34 +31 +31 +28 +27 +26 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +14 +14 +14 +14 +13 +14 +14 +14 +14 +13 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +13 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +22 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +32 +33 +37 +37 +40 +41 +41 +43 +43 +47 +47 +47 +51 +51 +55 +55 +58 +59 +58 +65 +65 +68 +68 +68 +72 +72 +76 +76 +76 +83 +82 +86 +86 +86 +89 +90 +96 +96 +97 +100 +100 +106 +106 +109 +110 +110 +115 +115 +119 +120 +119 +125 +125 +125 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +172 +173 +175 +175 +179 +179 +179 +182 +183 +185 +185 +188 +189 +189 +190 +190 +195 +195 +194 +196 +196 +198 +198 +198 +200 +200 +200 +200 +200 +202 +202 +204 +204 +204 +204 +204 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +203 +202 +200 +200 +200 +200 +201 +198 +198 +197 +197 +196 +194 +194 +191 +190 +191 +188 +189 +185 +185 +184 +183 +183 +179 +179 +179 +175 +175 +173 +172 +173 +169 +169 +165 +165 +160 +161 +161 +157 +157 +151 +151 +151 +147 +147 +147 +147 +147 +143 +143 +139 +139 +139 +134 +133 +130 +129 +128 +125 +125 +119 +119 +115 +115 +116 +110 +110 +106 +105 +106 +100 +100 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +79 +76 +76 +72 +72 +68 +68 +68 +64 +64 +59 +58 +58 +54 +54 +51 +51 +50 +46 +47 +43 +43 +43 +41 +40 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +14 +13 +14 +14 +14 +14 +14 +14 +13 +14 +13 +14 +14 +13 +13 +14 +14 +13 +14 +13 +14 +13 +13 +13 +13 +13 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +25 +27 +27 +30 +31 +31 +33 +33 +37 +37 +38 +41 +41 +42 +43 +47 +47 +47 +50 +50 +54 +54 +54 +58 +58 +59 +59 +59 +65 +65 +68 +68 +68 +72 +72 +76 +76 +79 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +106 +106 +106 +110 +109 +116 +116 +116 +119 +119 +125 +126 +127 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +174 +175 +175 +179 +179 +182 +182 +182 +185 +185 +189 +188 +188 +190 +190 +195 +195 +194 +197 +196 +198 +198 +198 +200 +200 +200 +200 +203 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +204 +204 +205 +204 +203 +202 +202 +201 +200 +200 +201 +200 +198 +198 +196 +196 +196 +195 +194 +191 +190 +191 +188 +189 +184 +185 +185 +183 +182 +179 +178 +175 +175 +175 +173 +173 +169 +169 +169 +164 +165 +165 +165 +165 +160 +161 +157 +157 +157 +151 +151 +147 +147 +145 +143 +143 +139 +139 +134 +133 +134 +129 +129 +125 +125 +125 +119 +119 +119 +119 +120 +115 +116 +109 +110 +110 +106 +106 +100 +100 +97 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +65 +58 +58 +59 +54 +54 +51 +50 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +14 +14 +13 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +34 +33 +33 +36 +37 +40 +41 +41 +42 +43 +47 +46 +46 +51 +51 +54 +54 +55 +58 +58 +65 +64 +65 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +110 +112 +116 +116 +119 +119 +125 +125 +125 +130 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +151 +151 +157 +157 +160 +161 +160 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +178 +183 +183 +183 +184 +184 +188 +188 +188 +191 +191 +194 +194 +197 +196 +196 +198 +199 +200 +200 +200 +200 +200 +203 +203 +202 +204 +204 +205 +204 +204 +206 +206 +206 +206 +207 +206 +207 +206 +206 +207 +206 +207 +206 +206 +204 +204 +204 +204 +204 +202 +202 +202 +200 +201 +200 +200 +201 +199 +199 +196 +196 +197 +194 +194 +190 +190 +189 +188 +189 +184 +185 +183 +183 +182 +178 +179 +179 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +166 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +139 +139 +139 +133 +133 +129 +129 +130 +125 +125 +120 +119 +116 +115 +116 +109 +109 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +72 +72 +68 +68 +64 +64 +65 +58 +59 +54 +55 +55 +51 +50 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +13 +13 +14 +13 +13 +13 +14 +13 +14 +13 +13 +14 +13 +13 +13 +14 +13 +13 +14 +14 +14 +13 +13 +14 +13 +13 +15 +15 +16 +17 +18 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +46 +47 +48 +51 +51 +54 +55 +58 +58 +58 +64 +64 +68 +68 +68 +72 +72 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +116 +119 +120 +126 +125 +125 +129 +129 +133 +133 +134 +140 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +179 +182 +182 +185 +185 +189 +189 +189 +191 +190 +194 +194 +195 +196 +197 +198 +198 +198 +200 +201 +201 +200 +200 +202 +203 +204 +204 +205 +204 +205 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +204 +204 +204 +204 +205 +202 +202 +201 +200 +201 +200 +200 +198 +198 +198 +196 +197 +194 +194 +190 +190 +191 +188 +188 +189 +189 +188 +185 +185 +182 +183 +183 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +130 +129 +129 +125 +125 +119 +120 +120 +116 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +65 +64 +59 +58 +58 +54 +55 +50 +51 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +16 +13 +13 +13 +13 +14 +13 +14 +13 +13 +14 +13 +14 +14 +14 +13 +13 +13 +14 +14 +13 +13 +14 +13 +13 +14 +13 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +39 +41 +40 +43 +43 +47 +47 +47 +51 +50 +55 +55 +55 +58 +59 +59 +59 +58 +64 +64 +68 +68 +69 +72 +72 +76 +76 +78 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +115 +120 +120 +120 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +179 +179 +179 +182 +182 +184 +184 +184 +188 +189 +190 +191 +191 +194 +194 +197 +196 +196 +198 +198 +200 +200 +200 +200 +201 +202 +202 +205 +204 +204 +204 +204 +206 +206 +207 +206 +206 +207 +206 +207 +206 +206 +206 +207 +206 +206 +207 +204 +204 +205 +204 +204 +202 +202 +200 +200 +200 +200 +200 +199 +199 +199 +196 +196 +197 +196 +196 +194 +194 +190 +190 +190 +188 +188 +185 +185 +183 +183 +183 +179 +178 +174 +175 +175 +172 +172 +169 +169 +169 +165 +165 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +144 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +125 +119 +119 +115 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +91 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +65 +58 +59 +54 +54 +55 +51 +50 +47 +46 +43 +42 +43 +41 +40 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +20 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +14 +13 +14 +13 +13 +13 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +30 +33 +33 +37 +37 +38 +41 +41 +43 +43 +43 +47 +47 +46 +47 +47 +51 +50 +54 +54 +54 +58 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +105 +106 +110 +110 +116 +115 +119 +119 +119 +126 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +169 +169 +169 +173 +172 +175 +175 +175 +178 +178 +182 +182 +182 +184 +185 +188 +189 +188 +190 +191 +194 +194 +195 +196 +197 +198 +198 +201 +200 +200 +200 +200 +202 +202 +202 +205 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +205 +204 +204 +205 +204 +202 +202 +202 +200 +200 +200 +200 +200 +198 +198 +196 +197 +197 +194 +194 +190 +191 +191 +188 +189 +184 +184 +182 +183 +182 +178 +178 +175 +175 +175 +173 +173 +173 +172 +172 +169 +169 +165 +165 +164 +161 +161 +157 +157 +157 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +125 +119 +119 +116 +116 +115 +110 +110 +106 +105 +101 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +69 +64 +64 +65 +58 +59 +54 +55 +51 +50 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +16 +15 +15 +13 +13 +12 +12 +13 +14 +13 +14 +14 +14 +14 +13 +13 +13 +14 +13 +14 +13 +14 +13 +14 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +20 +21 +21 +23 +25 +25 +27 +27 +31 +31 +30 +33 +33 +37 +37 +37 +41 +41 +40 +41 +41 +42 +42 +47 +47 +47 +50 +50 +54 +55 +56 +59 +58 +64 +64 +69 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +105 +106 +109 +110 +110 +116 +115 +119 +120 +119 +125 +126 +130 +130 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +161 +161 +161 +165 +165 +168 +169 +169 +173 +173 +175 +175 +175 +179 +178 +182 +183 +183 +184 +185 +188 +188 +189 +190 +190 +195 +194 +197 +196 +196 +198 +199 +200 +200 +200 +200 +200 +203 +202 +202 +204 +204 +204 +204 +204 +206 +207 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +205 +203 +202 +202 +201 +201 +200 +201 +201 +198 +198 +196 +197 +195 +194 +195 +190 +190 +188 +188 +189 +184 +185 +182 +183 +182 +179 +178 +179 +178 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +162 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +134 +133 +133 +130 +129 +126 +125 +126 +119 +120 +115 +116 +109 +110 +110 +105 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +58 +59 +58 +54 +54 +51 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +36 +36 +33 +33 +31 +31 +31 +26 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +12 +13 +14 +13 +13 +14 +14 +13 +14 +13 +13 +14 +13 +13 +13 +14 +14 +13 +13 +14 +13 +13 +13 +13 +14 +13 +13 +13 +12 +15 +15 +17 +16 +18 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +33 +33 +33 +37 +37 +41 +41 +41 +43 +42 +47 +47 +50 +50 +50 +54 +54 +59 +59 +58 +65 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +115 +120 +119 +119 +125 +125 +129 +130 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +182 +183 +182 +184 +185 +188 +189 +191 +190 +190 +194 +194 +196 +196 +196 +198 +198 +200 +200 +200 +200 +200 +203 +202 +202 +204 +204 +204 +204 +205 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +205 +204 +204 +204 +204 +202 +203 +200 +201 +200 +200 +201 +199 +198 +196 +196 +197 +194 +194 +190 +190 +190 +188 +188 +189 +188 +188 +184 +185 +183 +182 +183 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +140 +139 +139 +140 +133 +133 +129 +129 +129 +125 +125 +119 +120 +119 +116 +116 +110 +110 +110 +106 +106 +99 +100 +100 +96 +96 +89 +90 +90 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +58 +59 +55 +54 +50 +50 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +34 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +16 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +13 +14 +14 +13 +14 +14 +14 +13 +14 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +15 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +32 +33 +37 +37 +36 +41 +41 +43 +43 +43 +47 +47 +51 +51 +51 +54 +54 +58 +58 +59 +65 +64 +68 +68 +69 +72 +72 +76 +76 +81 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +115 +119 +120 +120 +125 +125 +129 +129 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +174 +179 +179 +179 +183 +182 +185 +184 +185 +188 +188 +191 +190 +190 +194 +194 +196 +197 +196 +198 +198 +200 +200 +201 +200 +201 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +205 +204 +205 +202 +202 +200 +200 +200 +200 +200 +198 +198 +198 +196 +196 +197 +196 +196 +194 +195 +191 +190 +190 +189 +189 +185 +184 +183 +183 +182 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +139 +139 +139 +133 +133 +130 +129 +129 +125 +126 +119 +119 +120 +115 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +87 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +59 +58 +59 +55 +54 +51 +51 +51 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +32 +33 +31 +32 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +14 +14 +14 +13 +13 +13 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +14 +14 +14 +14 +13 +14 +14 +14 +13 +13 +12 +15 +15 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +26 +31 +31 +32 +33 +33 +37 +36 +41 +41 +41 +43 +43 +47 +47 +47 +51 +51 +55 +55 +55 +59 +58 +65 +65 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +119 +120 +119 +125 +126 +129 +130 +129 +134 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +182 +182 +184 +184 +188 +188 +189 +190 +191 +194 +195 +195 +197 +196 +198 +198 +201 +200 +201 +200 +201 +202 +202 +202 +204 +204 +204 +204 +204 +204 +204 +206 +206 +207 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +201 +202 +203 +202 +200 +200 +200 +200 +201 +198 +199 +196 +196 +195 +195 +195 +190 +191 +189 +188 +188 +185 +185 +182 +183 +182 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +126 +119 +119 +120 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +69 +69 +64 +64 +59 +59 +55 +54 +54 +51 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +26 +27 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +14 +14 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +50 +54 +54 +58 +59 +58 +64 +64 +69 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +110 +110 +110 +115 +116 +119 +119 +119 +126 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +174 +175 +175 +179 +178 +182 +182 +182 +184 +184 +189 +189 +189 +191 +190 +194 +194 +196 +196 +196 +199 +198 +200 +201 +200 +200 +201 +200 +200 +200 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +204 +204 +202 +202 +203 +201 +200 +200 +200 +199 +198 +199 +196 +197 +194 +195 +195 +191 +191 +189 +188 +188 +184 +184 +182 +183 +183 +179 +179 +175 +175 +175 +173 +173 +168 +169 +165 +164 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +126 +125 +119 +119 +115 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +65 +64 +64 +59 +59 +55 +55 +54 +50 +51 +47 +47 +47 +43 +42 +41 +41 +41 +37 +36 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +13 +14 +14 +14 +14 +14 +14 +14 +13 +13 +13 +14 +13 +14 +14 +13 +13 +14 +13 +14 +13 +13 +14 +14 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +36 +41 +41 +42 +43 +42 +47 +47 +51 +51 +50 +55 +54 +59 +58 +59 +65 +64 +68 +68 +73 +72 +76 +76 +76 +82 +82 +86 +86 +91 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +116 +119 +119 +119 +125 +125 +130 +129 +130 +133 +133 +139 +139 +144 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +162 +161 +165 +165 +169 +168 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +184 +184 +184 +188 +189 +191 +191 +191 +195 +194 +195 +195 +194 +197 +196 +198 +199 +198 +201 +201 +200 +201 +202 +202 +203 +205 +204 +205 +205 +204 +207 +206 +206 +207 +206 +207 +206 +206 +206 +207 +206 +207 +206 +207 +206 +206 +207 +204 +204 +205 +205 +205 +202 +202 +200 +200 +201 +201 +200 +199 +199 +199 +197 +197 +195 +194 +195 +191 +191 +189 +188 +188 +185 +185 +182 +183 +183 +179 +179 +174 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +134 +133 +134 +129 +129 +125 +125 +126 +119 +120 +116 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +87 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +65 +64 +64 +59 +58 +54 +54 +54 +51 +50 +47 +47 +47 +43 +43 +41 +41 +38 +37 +37 +33 +33 +31 +31 +31 +27 +27 +27 +27 +27 +24 +25 +21 +21 +21 +19 +19 +17 +17 +16 +15 +15 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +14 +14 +14 +14 +13 +13 +14 +13 +13 +13 +14 +13 +13 +14 +13 +14 +14 +13 +13 +14 +13 +13 +14 +13 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +50 +54 +54 +55 +58 +58 +64 +65 +69 +68 +68 +72 +72 +76 +76 +76 +82 +82 +87 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +120 +119 +119 +125 +125 +129 +129 +130 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +158 +161 +161 +165 +165 +165 +165 +164 +169 +169 +173 +173 +173 +175 +175 +179 +179 +178 +182 +183 +184 +185 +185 +188 +188 +191 +190 +192 +195 +194 +197 +196 +198 +199 +199 +200 +200 +200 +200 +200 +202 +203 +203 +202 +202 +204 +204 +204 +204 +205 +206 +206 +206 +206 +207 +206 +206 +206 +207 +207 +206 +206 +207 +206 +204 +205 +204 +204 +204 +202 +202 +202 +200 +201 +201 +200 +200 +198 +199 +196 +197 +194 +194 +195 +190 +191 +188 +189 +189 +184 +185 +182 +183 +182 +179 +178 +175 +174 +175 +172 +172 +169 +168 +170 +165 +165 +161 +161 +158 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +134 +129 +129 +130 +126 +125 +120 +120 +119 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +59 +58 +55 +54 +54 +50 +51 +47 +47 +47 +43 +43 +43 +42 +43 +41 +41 +37 +37 +37 +34 +33 +31 +31 +32 +27 +27 +25 +25 +22 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +16 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +13 +14 +14 +14 +14 +13 +13 +14 +13 +13 +14 +14 +13 +14 +14 +13 +14 +14 +13 +14 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +46 +47 +51 +51 +51 +55 +55 +58 +58 +58 +64 +64 +64 +64 +64 +69 +68 +72 +72 +73 +76 +76 +82 +82 +83 +86 +86 +90 +90 +97 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +116 +119 +119 +126 +125 +125 +130 +130 +134 +133 +133 +140 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +176 +178 +179 +183 +183 +185 +184 +185 +188 +189 +191 +190 +190 +194 +194 +194 +195 +194 +196 +196 +199 +198 +199 +200 +200 +200 +201 +201 +203 +203 +204 +204 +204 +204 +204 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +207 +207 +204 +205 +205 +204 +203 +202 +202 +200 +200 +201 +200 +201 +199 +199 +197 +197 +196 +194 +194 +191 +190 +190 +189 +189 +184 +185 +185 +183 +182 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +152 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +130 +129 +129 +125 +125 +119 +120 +120 +116 +115 +110 +110 +109 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +73 +73 +68 +68 +69 +64 +64 +64 +64 +64 +59 +58 +54 +55 +55 +51 +50 +47 +47 +47 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +14 +14 +14 +13 +14 +14 +13 +13 +14 +14 +14 +13 +13 +13 +14 +14 +14 +14 +14 +13 +14 +14 +14 +13 +13 +15 +15 +15 +18 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +46 +51 +51 +55 +54 +55 +59 +59 +65 +64 +65 +68 +68 +72 +72 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +105 +106 +106 +110 +110 +116 +115 +116 +120 +120 +125 +125 +128 +129 +129 +133 +134 +139 +139 +139 +143 +143 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +162 +165 +165 +169 +169 +173 +173 +173 +174 +175 +179 +178 +178 +183 +182 +183 +182 +182 +185 +185 +189 +188 +189 +190 +191 +195 +195 +195 +196 +197 +199 +198 +200 +200 +200 +201 +200 +202 +202 +203 +204 +204 +205 +204 +205 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +202 +200 +201 +200 +201 +200 +198 +198 +196 +196 +196 +194 +195 +191 +190 +188 +189 +188 +185 +185 +182 +182 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +148 +147 +147 +143 +143 +139 +139 +140 +133 +133 +129 +129 +129 +125 +125 +119 +119 +119 +115 +115 +109 +110 +110 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +72 +72 +68 +68 +68 +65 +64 +59 +58 +59 +54 +55 +50 +51 +47 +46 +47 +43 +43 +41 +41 +41 +37 +36 +36 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +23 +21 +21 +18 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +14 +14 +14 +14 +14 +13 +14 +14 +13 +14 +13 +14 +14 +13 +14 +14 +13 +13 +13 +13 +13 +14 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +26 +25 +25 +27 +27 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +46 +46 +47 +51 +50 +55 +55 +59 +58 +58 +65 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +110 +110 +110 +115 +115 +119 +119 +120 +125 +125 +125 +125 +125 +129 +130 +133 +134 +133 +140 +139 +143 +143 +145 +147 +147 +151 +151 +156 +157 +157 +161 +161 +165 +165 +165 +169 +169 +169 +169 +169 +173 +173 +175 +175 +174 +179 +179 +183 +183 +183 +184 +185 +189 +189 +190 +191 +191 +194 +195 +197 +197 +197 +199 +199 +201 +200 +200 +200 +200 +202 +202 +203 +204 +205 +204 +205 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +206 +207 +205 +204 +204 +205 +204 +203 +203 +203 +201 +201 +201 +200 +199 +199 +198 +197 +197 +194 +195 +194 +190 +191 +189 +189 +188 +185 +185 +183 +183 +183 +179 +178 +175 +174 +175 +173 +173 +169 +169 +166 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +140 +139 +133 +133 +129 +129 +130 +125 +126 +119 +119 +115 +115 +115 +110 +110 +106 +106 +106 +100 +100 +99 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +83 +76 +76 +72 +72 +68 +69 +69 +64 +64 +59 +59 +59 +55 +54 +54 +55 +55 +51 +51 +47 +46 +47 +42 +43 +41 +41 +38 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +16 +15 +13 +13 +13 +12 +13 +14 +14 +14 +14 +14 +13 +13 +13 +13 +14 +13 +14 +14 +14 +14 +14 +13 +14 +14 +14 +13 +14 +14 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +36 +37 +41 +41 +43 +43 +43 +46 +47 +50 +51 +51 +54 +54 +58 +58 +58 +64 +65 +69 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +106 +106 +106 +110 +110 +115 +115 +115 +119 +120 +125 +125 +127 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +170 +173 +173 +175 +175 +179 +179 +179 +182 +183 +185 +185 +185 +189 +189 +191 +191 +191 +195 +194 +196 +196 +196 +198 +199 +200 +201 +200 +200 +200 +203 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +207 +204 +205 +204 +204 +204 +203 +203 +200 +200 +200 +201 +201 +198 +198 +198 +197 +197 +195 +195 +194 +191 +190 +189 +189 +189 +185 +184 +183 +182 +179 +178 +179 +175 +175 +173 +173 +173 +169 +168 +165 +165 +165 +161 +161 +157 +157 +157 +151 +150 +147 +147 +148 +143 +143 +139 +139 +134 +133 +133 +130 +130 +125 +125 +126 +120 +119 +120 +119 +120 +116 +116 +110 +110 +110 +106 +106 +100 +100 +101 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +72 +72 +72 +68 +68 +65 +64 +64 +59 +59 +54 +54 +51 +51 +50 +47 +47 +42 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +14 +13 +14 +14 +13 +14 +13 +13 +13 +13 +13 +14 +13 +14 +13 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +50 +50 +54 +54 +59 +58 +61 +65 +65 +68 +68 +73 +73 +72 +76 +76 +82 +82 +82 +86 +86 +86 +85 +86 +90 +90 +96 +96 +96 +100 +100 +106 +105 +106 +110 +110 +116 +115 +119 +119 +119 +125 +126 +130 +129 +129 +133 +133 +133 +134 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +154 +157 +157 +161 +161 +164 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +185 +185 +185 +188 +189 +190 +190 +194 +195 +195 +197 +196 +196 +197 +196 +199 +198 +200 +200 +200 +200 +200 +202 +203 +202 +204 +204 +204 +204 +204 +206 +207 +206 +206 +207 +207 +207 +206 +206 +206 +207 +206 +207 +206 +205 +204 +204 +204 +204 +202 +202 +202 +200 +201 +200 +200 +200 +199 +199 +197 +196 +195 +194 +195 +190 +190 +189 +189 +189 +185 +185 +183 +183 +183 +179 +179 +175 +175 +174 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +144 +143 +143 +139 +139 +133 +133 +133 +130 +130 +125 +125 +123 +120 +119 +116 +115 +109 +110 +110 +106 +105 +100 +100 +100 +96 +97 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +73 +72 +72 +68 +68 +64 +64 +64 +59 +58 +54 +54 +54 +50 +51 +46 +47 +47 +43 +43 +40 +41 +41 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +14 +13 +12 +13 +13 +13 +14 +13 +14 +14 +13 +14 +13 +14 +14 +14 +13 +13 +14 +14 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +32 +32 +32 +37 +37 +41 +41 +41 +43 +43 +47 +47 +51 +51 +50 +55 +55 +58 +58 +58 +65 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +87 +90 +91 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +115 +116 +116 +116 +120 +120 +125 +125 +125 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +152 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +182 +182 +183 +184 +184 +189 +188 +189 +191 +191 +191 +191 +191 +194 +194 +197 +197 +196 +199 +199 +200 +200 +201 +201 +201 +202 +203 +204 +204 +205 +205 +204 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +205 +204 +204 +205 +205 +202 +202 +201 +200 +200 +200 +200 +199 +199 +198 +197 +196 +196 +196 +196 +196 +196 +195 +194 +195 +190 +191 +188 +189 +189 +184 +184 +182 +183 +178 +179 +179 +175 +175 +173 +172 +173 +169 +168 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +145 +144 +143 +139 +139 +133 +134 +133 +129 +129 +125 +125 +125 +120 +119 +119 +119 +120 +116 +116 +110 +110 +110 +106 +106 +100 +100 +97 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +65 +58 +59 +59 +54 +53 +51 +51 +46 +47 +47 +42 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +26 +21 +21 +21 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +14 +14 +13 +13 +14 +13 +14 +14 +14 +14 +14 +13 +14 +14 +14 +13 +13 +14 +14 +14 +13 +13 +15 +15 +15 +15 +15 +17 +17 +17 +19 +19 +21 +21 +22 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +41 +40 +41 +43 +43 +47 +47 +47 +51 +50 +55 +54 +56 +58 +58 +64 +64 +67 +68 +68 +72 +72 +76 +76 +77 +82 +82 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +105 +106 +106 +109 +110 +115 +116 +115 +119 +119 +125 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +148 +151 +151 +157 +157 +156 +161 +161 +165 +165 +166 +168 +169 +173 +173 +173 +174 +175 +179 +178 +179 +183 +183 +185 +184 +184 +188 +188 +190 +191 +195 +194 +194 +196 +196 +196 +197 +197 +198 +198 +201 +201 +200 +201 +200 +202 +202 +202 +204 +204 +204 +204 +204 +206 +207 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +207 +206 +204 +204 +204 +204 +205 +203 +202 +202 +200 +200 +200 +200 +200 +198 +199 +196 +196 +194 +194 +195 +191 +190 +189 +188 +189 +185 +185 +182 +182 +183 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +164 +165 +161 +161 +157 +157 +156 +151 +151 +147 +147 +147 +143 +143 +143 +143 +143 +139 +139 +133 +133 +133 +129 +130 +126 +125 +120 +120 +120 +116 +116 +109 +109 +110 +105 +106 +100 +99 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +83 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +59 +59 +55 +55 +50 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +32 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +14 +13 +13 +14 +13 +14 +14 +13 +13 +14 +13 +13 +14 +14 +14 +14 +13 +13 +13 +13 +13 +14 +13 +14 +13 +14 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +34 +37 +36 +41 +41 +42 +43 +43 +47 +46 +51 +50 +50 +54 +55 +54 +54 +55 +59 +59 +64 +64 +65 +68 +68 +72 +72 +74 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +116 +119 +119 +125 +125 +129 +129 +130 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +182 +182 +185 +185 +185 +185 +184 +188 +188 +190 +190 +190 +194 +194 +196 +196 +197 +199 +198 +200 +201 +201 +201 +200 +203 +203 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +207 +206 +207 +205 +204 +205 +204 +204 +202 +202 +200 +200 +200 +200 +200 +201 +200 +200 +199 +199 +196 +197 +196 +195 +194 +191 +190 +191 +188 +189 +184 +184 +183 +183 +182 +178 +179 +175 +175 +175 +173 +173 +173 +173 +173 +169 +169 +165 +164 +165 +161 +161 +157 +157 +158 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +126 +126 +120 +119 +115 +115 +116 +109 +110 +106 +106 +100 +100 +99 +96 +96 +90 +90 +91 +86 +86 +82 +82 +82 +76 +77 +72 +72 +72 +68 +68 +64 +64 +65 +59 +59 +54 +55 +51 +51 +51 +47 +47 +43 +43 +43 +41 +40 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +14 +13 +14 +14 +14 +14 +14 +14 +14 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +13 +14 +13 +12 +15 +15 +17 +17 +18 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +48 +50 +50 +55 +54 +59 +58 +58 +64 +64 +68 +69 +68 +72 +72 +76 +76 +77 +82 +82 +86 +86 +87 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +109 +109 +116 +116 +120 +120 +119 +125 +126 +129 +129 +129 +133 +134 +139 +139 +139 +143 +143 +147 +147 +151 +151 +151 +157 +157 +160 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +178 +181 +182 +182 +184 +185 +189 +188 +191 +191 +191 +195 +194 +196 +196 +196 +199 +199 +200 +200 +201 +200 +200 +203 +203 +202 +204 +205 +204 +204 +205 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +203 +200 +200 +200 +201 +201 +199 +199 +196 +196 +194 +194 +194 +191 +190 +189 +188 +188 +185 +185 +185 +185 +185 +183 +183 +179 +179 +179 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +134 +134 +129 +129 +125 +125 +120 +119 +119 +116 +115 +109 +110 +110 +106 +105 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +83 +76 +76 +73 +72 +69 +69 +69 +64 +65 +58 +58 +58 +55 +54 +51 +50 +50 +46 +47 +43 +42 +43 +41 +40 +37 +36 +37 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +18 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +14 +13 +14 +14 +14 +13 +13 +14 +14 +13 +13 +13 +14 +14 +13 +13 +13 +13 +14 +14 +13 +13 +14 +14 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +38 +41 +41 +43 +42 +47 +47 +47 +50 +51 +54 +54 +54 +58 +59 +65 +64 +64 +68 +68 +73 +72 +72 +77 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +115 +119 +119 +125 +125 +125 +130 +129 +133 +133 +140 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +183 +183 +182 +185 +185 +188 +189 +189 +191 +190 +195 +195 +194 +197 +197 +199 +198 +198 +201 +200 +200 +200 +201 +202 +202 +205 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +204 +204 +205 +204 +205 +202 +203 +201 +200 +200 +201 +200 +198 +199 +197 +196 +196 +194 +195 +195 +195 +195 +191 +191 +189 +189 +188 +185 +185 +183 +182 +181 +179 +179 +174 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +144 +139 +139 +133 +133 +133 +129 +129 +125 +126 +125 +120 +119 +116 +116 +115 +110 +109 +106 +106 +105 +100 +100 +96 +96 +96 +90 +90 +86 +86 +83 +82 +82 +76 +76 +72 +72 +72 +68 +68 +65 +64 +65 +58 +58 +54 +55 +55 +50 +50 +47 +47 +47 +43 +43 +40 +41 +38 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +13 +13 +14 +14 +13 +14 +14 +14 +14 +14 +14 +14 +13 +13 +14 +14 +13 +14 +14 +13 +13 +13 +14 +13 +14 +13 +13 +15 +15 +15 +17 +17 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +30 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +50 +51 +54 +54 +59 +58 +58 +64 +64 +69 +68 +72 +73 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +115 +120 +119 +125 +125 +125 +130 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +178 +183 +182 +185 +185 +185 +189 +188 +190 +190 +190 +195 +195 +196 +196 +196 +199 +199 +200 +200 +200 +200 +201 +202 +202 +204 +204 +204 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +207 +206 +206 +204 +204 +204 +204 +204 +202 +203 +202 +200 +200 +201 +200 +200 +201 +201 +198 +198 +199 +196 +196 +195 +195 +191 +190 +191 +189 +189 +185 +185 +184 +183 +183 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +125 +120 +119 +116 +115 +115 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +65 +64 +58 +58 +55 +54 +54 +51 +51 +47 +47 +47 +43 +43 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +32 +27 +27 +25 +25 +20 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +14 +14 +14 +14 +14 +13 +13 +13 +13 +13 +14 +14 +13 +13 +12 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +46 +46 +47 +51 +51 +54 +54 +54 +58 +59 +65 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +96 +96 +95 +100 +100 +106 +106 +106 +110 +110 +116 +116 +116 +120 +120 +125 +126 +125 +129 +129 +133 +133 +134 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +161 +161 +161 +165 +165 +168 +169 +169 +173 +173 +175 +175 +175 +179 +178 +182 +182 +184 +184 +185 +188 +188 +191 +191 +191 +195 +194 +194 +195 +195 +197 +196 +198 +198 +198 +201 +200 +200 +200 +201 +202 +203 +204 +205 +204 +205 +205 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +204 +204 +204 +205 +205 +202 +203 +200 +201 +200 +201 +200 +198 +199 +199 +196 +196 +195 +194 +194 +191 +191 +188 +189 +189 +185 +185 +182 +183 +178 +179 +178 +175 +175 +173 +173 +173 +168 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +125 +120 +120 +115 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +83 +82 +82 +76 +76 +72 +72 +72 +68 +68 +65 +65 +64 +58 +58 +54 +54 +55 +51 +51 +46 +47 +47 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +13 +13 +13 +14 +14 +13 +13 +14 +14 +14 +14 +13 +13 +13 +14 +14 +13 +14 +13 +14 +13 +13 +13 +13 +13 +13 +12 +15 +16 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +30 +31 +32 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +51 +51 +55 +54 +59 +58 +59 +64 +65 +68 +68 +73 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +95 +96 +100 +100 +100 +106 +106 +109 +110 +110 +116 +115 +119 +119 +125 +126 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +150 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +173 +173 +173 +175 +174 +179 +179 +178 +183 +183 +183 +183 +183 +184 +184 +189 +189 +189 +191 +191 +194 +195 +194 +196 +197 +198 +198 +200 +201 +200 +201 +200 +203 +202 +202 +204 +205 +204 +204 +204 +204 +204 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +207 +204 +204 +204 +205 +204 +202 +202 +200 +200 +200 +200 +200 +199 +199 +199 +196 +197 +194 +194 +190 +191 +191 +188 +188 +185 +184 +185 +183 +182 +179 +179 +178 +175 +175 +173 +172 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +152 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +126 +119 +120 +115 +116 +116 +110 +110 +106 +105 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +65 +64 +58 +58 +54 +55 +50 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +23 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +12 +13 +13 +13 +14 +14 +13 +13 +14 +14 +13 +13 +13 +14 +14 +13 +14 +14 +14 +13 +14 +14 +13 +14 +14 +13 +13 +13 +13 +15 +15 +16 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +36 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +50 +55 +55 +58 +58 +59 +65 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +97 +96 +96 +100 +100 +106 +106 +110 +110 +110 +115 +116 +119 +120 +119 +126 +126 +129 +129 +129 +133 +133 +140 +139 +140 +143 +143 +147 +147 +147 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +173 +173 +173 +174 +175 +179 +178 +179 +183 +183 +184 +185 +184 +188 +189 +190 +191 +194 +194 +195 +196 +196 +198 +198 +198 +200 +200 +200 +200 +200 +200 +200 +203 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +202 +200 +200 +200 +200 +199 +198 +199 +196 +196 +194 +195 +195 +191 +190 +189 +188 +189 +185 +185 +183 +183 +183 +179 +178 +175 +175 +175 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +130 +130 +130 +125 +126 +119 +120 +116 +116 +116 +110 +110 +106 +106 +106 +100 +99 +96 +96 +96 +90 +90 +86 +86 +87 +82 +82 +76 +76 +77 +73 +72 +69 +68 +64 +64 +64 +58 +59 +55 +55 +55 +51 +51 +46 +47 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +32 +32 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +14 +14 +14 +14 +13 +13 +14 +13 +14 +13 +14 +14 +13 +13 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +47 +47 +47 +51 +51 +55 +54 +54 +58 +58 +65 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +110 +109 +109 +116 +116 +119 +120 +119 +125 +125 +129 +129 +130 +133 +133 +139 +139 +144 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +164 +165 +169 +169 +169 +173 +173 +175 +175 +176 +179 +179 +183 +183 +184 +185 +184 +189 +189 +191 +191 +191 +195 +195 +194 +194 +194 +197 +197 +198 +198 +199 +200 +201 +200 +200 +201 +202 +202 +205 +204 +204 +205 +205 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +207 +206 +205 +204 +204 +204 +202 +202 +202 +200 +200 +200 +200 +200 +198 +198 +198 +199 +198 +197 +196 +195 +194 +194 +191 +191 +188 +189 +188 +184 +185 +183 +183 +179 +179 +179 +175 +176 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +140 +139 +134 +133 +133 +130 +129 +125 +125 +125 +119 +120 +116 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +83 +82 +82 +76 +76 +72 +72 +72 +68 +69 +68 +68 +69 +65 +64 +58 +58 +59 +55 +55 +51 +51 +48 +47 +46 +43 +43 +41 +41 +41 +37 +37 +33 +32 +33 +31 +31 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +12 +13 +14 +13 +13 +14 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +42 +43 +43 +47 +47 +50 +51 +50 +55 +54 +58 +58 +59 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +99 +100 +100 +106 +106 +109 +110 +111 +116 +116 +119 +119 +126 +126 +126 +129 +129 +133 +133 +133 +139 +139 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +158 +161 +161 +165 +165 +168 +169 +169 +173 +173 +175 +174 +175 +179 +179 +179 +179 +179 +183 +183 +185 +184 +185 +189 +189 +191 +190 +192 +195 +195 +197 +196 +198 +198 +198 +200 +200 +200 +200 +201 +203 +202 +204 +204 +204 +205 +204 +206 +207 +206 +206 +207 +206 +207 +206 +207 +206 +206 +206 +206 +207 +206 +206 +206 +205 +204 +204 +204 +204 +202 +202 +202 +201 +201 +200 +201 +201 +198 +199 +197 +197 +195 +194 +195 +190 +191 +189 +188 +189 +185 +185 +183 +183 +182 +179 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +119 +119 +115 +116 +109 +110 +105 +106 +105 +100 +100 +96 +96 +96 +90 +90 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +68 +68 +64 +64 +59 +59 +58 +54 +55 +51 +50 +50 +47 +47 +47 +47 +47 +43 +42 +41 +41 +41 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +13 +14 +14 +14 +14 +14 +13 +14 +14 +13 +14 +14 +14 +13 +13 +14 +13 +13 +13 +14 +14 +14 +13 +14 +14 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +51 +51 +51 +54 +55 +59 +58 +59 +65 +64 +68 +68 +69 +72 +72 +76 +77 +76 +82 +82 +86 +86 +87 +90 +90 +96 +95 +100 +100 +100 +106 +106 +109 +110 +110 +115 +116 +116 +115 +115 +120 +120 +126 +125 +125 +129 +129 +133 +133 +135 +139 +140 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +160 +161 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +174 +175 +179 +178 +179 +182 +183 +184 +185 +185 +189 +188 +191 +191 +190 +194 +194 +196 +197 +196 +198 +198 +200 +200 +201 +200 +200 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +204 +205 +204 +204 +205 +202 +203 +201 +201 +200 +200 +200 +198 +198 +198 +197 +197 +195 +194 +194 +191 +191 +188 +188 +189 +184 +185 +182 +183 +182 +179 +178 +175 +175 +174 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +140 +134 +133 +129 +130 +126 +125 +125 +119 +120 +116 +116 +116 +110 +110 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +68 +68 +64 +65 +64 +64 +65 +58 +59 +54 +54 +54 +51 +51 +46 +47 +45 +43 +42 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +26 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +12 +13 +14 +13 +13 +13 +14 +13 +13 +14 +14 +13 +13 +13 +14 +13 +14 +13 +13 +14 +13 +14 +13 +14 +13 +14 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +42 +47 +47 +51 +51 +51 +54 +54 +58 +59 +58 +65 +64 +69 +68 +68 +73 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +116 +120 +120 +122 +126 +125 +130 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +147 +147 +147 +151 +151 +157 +157 +157 +160 +161 +165 +165 +168 +169 +169 +173 +173 +175 +174 +175 +179 +179 +183 +182 +183 +185 +184 +189 +189 +189 +191 +190 +195 +194 +195 +197 +197 +199 +199 +200 +200 +201 +200 +200 +202 +203 +202 +204 +204 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +205 +205 +205 +204 +204 +202 +202 +202 +201 +201 +201 +200 +200 +198 +198 +196 +197 +196 +194 +195 +191 +191 +191 +189 +189 +185 +185 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +158 +151 +151 +152 +147 +147 +143 +143 +140 +139 +140 +134 +133 +130 +130 +130 +125 +126 +125 +125 +126 +120 +120 +116 +115 +115 +110 +109 +106 +106 +103 +100 +100 +96 +96 +90 +90 +90 +86 +86 +86 +86 +86 +82 +82 +82 +82 +82 +76 +76 +73 +72 +72 +68 +68 +64 +64 +61 +58 +58 +55 +54 +51 +51 +51 +47 +47 +43 +43 +43 +41 +41 +36 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +22 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +14 +14 +14 +14 +14 +13 +14 +14 +13 +14 +14 +13 +13 +14 +14 +14 +14 +13 +13 +13 +14 +13 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +20 +25 +25 +26 +27 +27 +31 +31 +31 +33 +33 +37 +37 +36 +41 +41 +42 +43 +42 +47 +46 +50 +51 +50 +54 +54 +58 +58 +64 +64 +64 +68 +69 +72 +72 +72 +76 +76 +76 +77 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +98 +100 +100 +106 +106 +109 +110 +110 +116 +116 +119 +120 +119 +125 +126 +125 +125 +125 +130 +129 +133 +133 +134 +139 +139 +143 +143 +145 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +182 +183 +184 +185 +188 +188 +188 +190 +191 +195 +195 +195 +196 +196 +199 +198 +198 +201 +201 +201 +200 +201 +203 +202 +204 +204 +205 +204 +205 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +205 +204 +204 +204 +202 +202 +200 +200 +201 +200 +200 +198 +198 +197 +196 +196 +195 +195 +190 +190 +190 +188 +189 +185 +184 +184 +183 +183 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +161 +161 +161 +157 +156 +151 +151 +151 +147 +147 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +130 +125 +126 +120 +120 +115 +115 +115 +110 +110 +106 +106 +105 +100 +100 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +77 +72 +72 +68 +68 +68 +64 +64 +58 +59 +59 +55 +55 +51 +50 +51 +47 +46 +43 +42 +43 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +22 +21 +19 +19 +17 +17 +17 +15 +15 +15 +16 +15 +13 +13 +12 +13 +14 +13 +14 +14 +13 +14 +14 +13 +13 +13 +14 +14 +14 +13 +14 +13 +14 +13 +14 +13 +13 +13 +13 +13 +14 +13 +13 +16 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +30 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +47 +47 +46 +51 +51 +55 +55 +55 +59 +59 +65 +65 +65 +68 +68 +72 +72 +72 +76 +76 +82 +82 +83 +86 +86 +90 +90 +97 +96 +96 +100 +100 +106 +106 +106 +110 +110 +110 +110 +110 +116 +116 +119 +119 +119 +125 +125 +129 +130 +130 +133 +133 +139 +140 +144 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +172 +172 +175 +175 +178 +179 +178 +183 +183 +182 +182 +183 +184 +184 +189 +189 +188 +191 +191 +195 +194 +194 +196 +197 +199 +198 +198 +200 +201 +200 +201 +203 +202 +202 +204 +204 +205 +205 +204 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +205 +204 +204 +204 +203 +202 +202 +200 +200 +200 +201 +200 +199 +198 +197 +196 +197 +194 +194 +191 +190 +191 +188 +189 +185 +185 +185 +183 +182 +179 +179 +175 +175 +174 +173 +173 +169 +169 +169 +165 +165 +165 +165 +165 +161 +161 +157 +158 +157 +151 +151 +147 +148 +147 +143 +143 +140 +139 +133 +133 +133 +129 +129 +125 +125 +125 +120 +120 +119 +120 +120 +116 +116 +110 +110 +110 +106 +106 +100 +100 +97 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +65 +64 +58 +58 +59 +54 +54 +51 +50 +46 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +14 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +14 +13 +14 +14 +14 +14 +14 +13 +13 +13 +14 +13 +13 +13 +13 +16 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +26 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +43 +43 +43 +47 +47 +51 +50 +50 +54 +54 +58 +58 +61 +64 +64 +68 +68 +72 +72 +72 +77 +76 +82 +82 +82 +86 +86 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +105 +106 +107 +110 +110 +116 +116 +119 +120 +119 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +144 +147 +147 +148 +151 +151 +157 +157 +160 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +178 +183 +183 +183 +184 +184 +189 +188 +189 +191 +191 +194 +195 +196 +196 +196 +198 +198 +200 +201 +201 +201 +201 +203 +202 +202 +204 +204 +204 +205 +204 +206 +206 +207 +207 +207 +206 +207 +207 +206 +207 +206 +206 +206 +206 +205 +204 +205 +204 +204 +202 +203 +202 +201 +201 +200 +200 +200 +198 +198 +197 +196 +197 +194 +195 +190 +191 +188 +188 +189 +185 +184 +183 +182 +182 +179 +179 +179 +178 +179 +174 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +140 +139 +139 +133 +133 +129 +129 +130 +126 +125 +120 +120 +116 +115 +116 +110 +110 +106 +106 +106 +99 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +64 +65 +65 +59 +58 +55 +54 +54 +50 +50 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +34 +31 +31 +27 +27 +26 +25 +25 +20 +21 +20 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +13 +14 +13 +13 +14 +13 +14 +14 +14 +13 +13 +13 +14 +13 +13 +14 +14 +13 +14 +13 +13 +15 +15 +16 +17 +17 +19 +19 +22 +21 +21 +25 +25 +27 +27 +27 +31 +30 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +44 +47 +46 +51 +51 +54 +54 +54 +58 +59 +65 +64 +64 +68 +68 +68 +68 +68 +72 +72 +76 +76 +77 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +116 +120 +120 +119 +125 +125 +129 +130 +130 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +182 +185 +185 +185 +188 +188 +190 +190 +190 +194 +195 +197 +196 +197 +198 +199 +200 +201 +200 +200 +200 +202 +202 +203 +205 +204 +204 +205 +207 +206 +206 +206 +207 +206 +206 +207 +206 +207 +207 +206 +206 +207 +206 +205 +205 +204 +204 +204 +203 +203 +203 +200 +201 +200 +200 +199 +198 +199 +196 +197 +195 +195 +195 +191 +191 +191 +191 +190 +188 +189 +185 +185 +184 +182 +183 +178 +179 +177 +175 +175 +173 +172 +169 +169 +169 +164 +165 +161 +161 +161 +157 +157 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +134 +133 +133 +129 +129 +125 +126 +125 +119 +119 +115 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +82 +82 +82 +77 +76 +72 +72 +72 +69 +68 +64 +65 +65 +59 +58 +55 +54 +55 +51 +51 +47 +47 +47 +43 +43 +41 +41 +37 +37 +37 +33 +32 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +14 +13 +13 +13 +14 +13 +13 +13 +13 +14 +13 +14 +14 +14 +14 +13 +13 +14 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +28 +31 +31 +33 +33 +37 +37 +37 +40 +41 +43 +43 +43 +46 +47 +47 +47 +47 +51 +51 +55 +54 +55 +58 +58 +64 +64 +68 +68 +68 +72 +73 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +105 +106 +109 +110 +115 +116 +119 +120 +119 +126 +125 +129 +129 +129 +134 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +182 +185 +184 +189 +189 +188 +191 +191 +195 +194 +195 +197 +197 +199 +198 +201 +201 +200 +200 +200 +202 +202 +202 +204 +204 +204 +204 +205 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +205 +205 +204 +204 +204 +202 +202 +203 +200 +200 +200 +201 +200 +200 +201 +199 +199 +198 +196 +196 +194 +195 +195 +190 +191 +189 +189 +185 +185 +184 +183 +183 +179 +179 +179 +175 +175 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +119 +120 +115 +116 +109 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +69 +68 +64 +64 +58 +58 +54 +54 +54 +50 +51 +46 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +22 +20 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +13 +14 +13 +13 +14 +14 +13 +14 +14 +14 +14 +14 +13 +14 +13 +13 +14 +13 +14 +13 +13 +14 +14 +13 +13 +13 +13 +12 +15 +15 +17 +17 +18 +19 +19 +21 +20 +26 +25 +25 +27 +27 +31 +31 +31 +33 +33 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +48 +51 +50 +54 +54 +59 +59 +59 +65 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +98 +100 +100 +106 +106 +110 +110 +110 +115 +115 +119 +120 +119 +125 +126 +130 +130 +129 +133 +134 +139 +139 +139 +143 +143 +147 +148 +151 +151 +151 +157 +157 +161 +161 +161 +164 +164 +169 +169 +169 +173 +173 +174 +175 +175 +179 +178 +183 +183 +183 +184 +185 +188 +189 +191 +190 +190 +195 +195 +196 +196 +196 +198 +198 +200 +200 +201 +200 +200 +202 +202 +203 +204 +204 +205 +204 +205 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +205 +204 +203 +202 +202 +200 +200 +200 +201 +199 +198 +199 +196 +197 +194 +194 +195 +191 +190 +188 +188 +189 +184 +185 +185 +185 +184 +183 +182 +179 +179 +179 +175 +175 +173 +173 +171 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +134 +129 +130 +125 +125 +120 +119 +120 +115 +115 +110 +110 +110 +105 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +83 +75 +76 +72 +72 +69 +68 +68 +64 +64 +58 +59 +58 +55 +55 +51 +50 +50 +47 +47 +42 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +14 +13 +13 +14 +13 +13 +14 +13 +14 +14 +13 +13 +14 +13 +14 +14 +14 +14 +14 +14 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +13 +16 +15 +15 +17 +17 +19 +19 +19 +21 +21 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +34 +37 +37 +41 +41 +43 +43 +43 +47 +46 +51 +51 +51 +55 +54 +58 +59 +59 +64 +64 +68 +68 +68 +72 +72 +77 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +110 +109 +115 +116 +119 +120 +120 +125 +126 +129 +130 +134 +133 +133 +139 +140 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +172 +173 +175 +175 +179 +178 +178 +182 +183 +184 +185 +185 +188 +189 +191 +190 +190 +194 +194 +196 +196 +197 +198 +199 +200 +201 +201 +200 +200 +202 +202 +204 +204 +204 +205 +204 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +205 +204 +204 +204 +204 +202 +202 +202 +200 +200 +201 +200 +200 +199 +198 +198 +198 +198 +196 +196 +194 +194 +195 +191 +191 +188 +188 +185 +184 +185 +183 +183 +179 +179 +178 +175 +175 +172 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +129 +129 +129 +125 +126 +119 +119 +120 +115 +116 +110 +110 +110 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +69 +64 +65 +58 +58 +59 +54 +54 +51 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +20 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +14 +13 +13 +13 +13 +14 +13 +13 +14 +13 +14 +13 +13 +13 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +14 +15 +15 +15 +15 +15 +17 +17 +17 +19 +19 +21 +21 +22 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +38 +37 +41 +40 +43 +42 +43 +47 +47 +51 +51 +51 +54 +54 +58 +58 +64 +64 +64 +68 +68 +73 +72 +72 +76 +77 +82 +82 +83 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +109 +116 +115 +115 +119 +119 +125 +126 +125 +129 +130 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +165 +165 +165 +168 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +185 +185 +185 +189 +189 +190 +191 +191 +194 +194 +196 +196 +198 +198 +198 +200 +200 +200 +201 +200 +202 +203 +202 +202 +202 +204 +205 +204 +204 +204 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +205 +205 +204 +204 +205 +204 +204 +202 +202 +200 +200 +201 +200 +201 +198 +199 +197 +196 +197 +194 +194 +190 +191 +190 +188 +189 +189 +189 +189 +185 +185 +183 +183 +183 +179 +178 +175 +174 +175 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +130 +129 +126 +125 +119 +119 +116 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +77 +76 +72 +72 +68 +69 +64 +64 +65 +58 +58 +55 +55 +55 +51 +50 +46 +47 +47 +43 +42 +40 +41 +41 +37 +37 +33 +33 +34 +30 +31 +27 +27 +25 +25 +25 +21 +21 +19 +20 +19 +17 +17 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +14 +14 +13 +13 +14 +14 +14 +13 +13 +13 +14 +13 +13 +13 +14 +14 +14 +14 +14 +14 +13 +13 +13 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +36 +41 +41 +43 +43 +43 +47 +46 +51 +51 +50 +54 +55 +59 +58 +58 +65 +64 +68 +68 +68 +72 +72 +76 +76 +76 +83 +82 +87 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +116 +119 +119 +119 +126 +125 +130 +129 +130 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +176 +179 +179 +183 +183 +185 +185 +185 +188 +188 +191 +191 +191 +195 +194 +194 +195 +195 +197 +196 +199 +199 +198 +200 +200 +200 +200 +201 +202 +203 +204 +204 +204 +204 +204 +206 +206 +207 +206 +206 +206 +207 +206 +206 +207 +206 +206 +207 +207 +206 +206 +207 +205 +204 +205 +205 +204 +203 +202 +200 +200 +200 +200 +200 +199 +198 +198 +196 +197 +194 +194 +194 +190 +190 +188 +188 +189 +185 +185 +183 +183 +179 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +133 +133 +134 +130 +129 +125 +125 +125 +119 +120 +116 +116 +116 +110 +109 +106 +106 +105 +100 +100 +96 +96 +96 +90 +90 +86 +86 +83 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +65 +58 +59 +54 +55 +55 +51 +50 +47 +47 +47 +43 +43 +40 +41 +37 +37 +37 +33 +33 +31 +30 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +14 +14 +14 +14 +14 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +13 +14 +14 +14 +14 +13 +14 +14 +13 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +36 +41 +40 +41 +43 +43 +47 +47 +47 +51 +51 +54 +54 +54 +59 +58 +64 +65 +65 +68 +68 +72 +72 +77 +77 +76 +82 +82 +86 +85 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +116 +120 +119 +125 +126 +130 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +166 +169 +169 +173 +173 +176 +175 +175 +179 +178 +183 +182 +183 +184 +184 +184 +184 +184 +189 +189 +190 +191 +191 +195 +195 +196 +196 +196 +199 +198 +200 +201 +200 +201 +201 +202 +202 +202 +202 +203 +204 +204 +204 +204 +204 +204 +204 +206 +207 +206 +206 +207 +206 +207 +206 +206 +207 +206 +206 +206 +206 +206 +204 +204 +204 +204 +205 +202 +203 +201 +200 +200 +201 +200 +199 +199 +198 +197 +196 +194 +195 +191 +191 +191 +188 +189 +185 +184 +184 +182 +183 +179 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +152 +151 +151 +147 +147 +147 +147 +147 +143 +143 +140 +139 +139 +133 +133 +129 +129 +130 +125 +125 +119 +119 +120 +115 +116 +110 +110 +106 +106 +106 +99 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +69 +65 +64 +58 +59 +54 +55 +55 +50 +50 +47 +47 +46 +43 +43 +43 +43 +43 +41 +41 +37 +36 +37 +33 +33 +31 +31 +29 +27 +27 +25 +24 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +13 +13 +13 +14 +13 +14 +14 +14 +14 +13 +13 +14 +14 +14 +14 +14 +13 +14 +13 +14 +13 +14 +14 +14 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +51 +51 +51 +54 +54 +58 +58 +58 +65 +64 +68 +69 +69 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +100 +100 +100 +106 +105 +110 +110 +110 +116 +116 +120 +119 +119 +125 +125 +129 +129 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +152 +151 +151 +157 +157 +161 +161 +161 +165 +165 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +179 +183 +183 +185 +184 +189 +188 +189 +191 +191 +194 +194 +194 +196 +196 +197 +196 +197 +199 +198 +200 +201 +201 +200 +200 +202 +202 +203 +205 +205 +204 +204 +206 +207 +207 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +204 +204 +205 +204 +204 +202 +203 +200 +200 +201 +200 +200 +199 +198 +199 +197 +196 +194 +195 +194 +191 +191 +188 +189 +188 +184 +185 +183 +183 +183 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +158 +157 +157 +151 +151 +146 +147 +147 +143 +143 +139 +139 +140 +133 +133 +129 +130 +126 +126 +126 +119 +120 +115 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +83 +82 +76 +76 +72 +73 +73 +68 +69 +64 +64 +64 +59 +58 +58 +58 +58 +55 +54 +50 +50 +50 +46 +47 +43 +42 +42 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +25 +25 +25 +20 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +14 +14 +14 +13 +13 +13 +14 +14 +13 +13 +14 +13 +13 +14 +14 +14 +14 +13 +14 +13 +13 +14 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +37 +36 +37 +41 +41 +43 +43 +43 +47 +47 +51 +50 +51 +54 +55 +58 +59 +59 +64 +64 +69 +68 +68 +72 +72 +77 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +99 +99 +105 +106 +110 +110 +110 +115 +116 +119 +120 +120 +125 +126 +130 +129 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +182 +182 +184 +184 +184 +185 +184 +188 +188 +190 +190 +191 +194 +194 +197 +197 +198 +198 +199 +200 +201 +200 +200 +200 +202 +203 +204 +204 +205 +204 +205 +207 +207 +206 +206 +207 +207 +207 +207 +207 +206 +207 +207 +206 +207 +206 +205 +204 +204 +204 +204 +202 +202 +201 +200 +200 +200 +201 +198 +198 +198 +196 +197 +195 +195 +194 +190 +191 +189 +189 +185 +185 +185 +183 +182 +179 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +148 +147 +144 +142 +143 +139 +139 +133 +133 +133 +129 +129 +126 +125 +125 +120 +119 +116 +116 +116 +110 +110 +105 +106 +106 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +59 +59 +56 +55 +55 +50 +51 +46 +47 +47 +43 +43 +41 +41 +41 +37 +37 +37 +37 +37 +33 +33 +31 +31 +32 +27 +27 +25 +25 +23 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +14 +13 +13 +13 +14 +14 +14 +13 +13 +14 +14 +13 +14 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +26 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +36 +41 +41 +43 +43 +43 +47 +47 +51 +50 +51 +54 +55 +58 +58 +65 +64 +65 +68 +68 +72 +72 +72 +76 +76 +76 +76 +76 +82 +82 +86 +86 +86 +90 +89 +97 +96 +96 +100 +100 +106 +105 +109 +110 +110 +116 +115 +119 +120 +119 +125 +125 +126 +126 +125 +129 +130 +133 +133 +133 +139 +139 +143 +143 +144 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +182 +182 +183 +185 +185 +188 +189 +190 +191 +191 +194 +195 +197 +196 +197 +198 +198 +200 +200 +200 +200 +200 +202 +202 +203 +204 +205 +205 +205 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +205 +204 +204 +205 +204 +203 +202 +202 +201 +201 +200 +201 +199 +198 +198 +196 +197 +195 +194 +194 +190 +190 +189 +189 +188 +185 +185 +183 +182 +183 +178 +179 +175 +175 +174 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +120 +119 +116 +116 +116 +109 +110 +106 +106 +106 +100 +100 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +81 +82 +82 +76 +76 +72 +72 +68 +68 +68 +65 +64 +58 +58 +59 +54 +54 +54 +54 +55 +50 +50 +46 +47 +47 +43 +43 +41 +40 +37 +37 +37 +33 +32 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +20 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +14 +14 +13 +13 +14 +14 +14 +14 +13 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +26 +31 +31 +33 +33 +33 +37 +37 +40 +40 +44 +43 +42 +47 +47 +51 +50 +51 +54 +55 +58 +58 +58 +64 +64 +69 +68 +68 +72 +72 +76 +76 +77 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +106 +106 +106 +110 +110 +115 +116 +116 +120 +120 +125 +125 +127 +129 +129 +133 +133 +139 +139 +139 +143 +143 +143 +143 +143 +147 +147 +147 +147 +147 +151 +152 +157 +157 +157 +161 +161 +165 +165 +168 +169 +170 +173 +173 +175 +175 +175 +179 +178 +183 +182 +182 +185 +184 +189 +188 +189 +191 +191 +195 +194 +195 +196 +197 +198 +199 +201 +200 +200 +201 +200 +202 +202 +202 +204 +204 +204 +204 +204 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +203 +200 +201 +201 +200 +200 +199 +198 +196 +196 +196 +194 +195 +190 +190 +190 +188 +189 +184 +184 +183 +182 +183 +178 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +152 +147 +147 +143 +143 +140 +139 +139 +133 +134 +129 +129 +129 +125 +125 +125 +126 +126 +119 +120 +116 +116 +116 +110 +110 +106 +106 +107 +100 +99 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +76 +76 +76 +72 +72 +68 +68 +69 +64 +64 +58 +59 +57 +55 +54 +51 +51 +46 +46 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +14 +13 +14 +14 +13 +14 +13 +14 +13 +13 +14 +14 +13 +14 +13 +14 +13 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +36 +37 +41 +41 +41 +42 +43 +46 +47 +47 +50 +50 +54 +55 +55 +58 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +101 +106 +106 +109 +110 +115 +115 +116 +119 +119 +125 +125 +125 +130 +129 +129 +129 +130 +133 +133 +139 +139 +139 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +162 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +183 +185 +185 +189 +188 +190 +191 +190 +195 +194 +196 +196 +197 +198 +198 +200 +200 +201 +201 +201 +202 +202 +202 +205 +204 +204 +205 +204 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +205 +205 +204 +204 +204 +202 +202 +202 +200 +201 +200 +201 +200 +199 +198 +196 +196 +195 +195 +195 +190 +190 +188 +189 +188 +185 +185 +183 +183 +183 +179 +179 +175 +174 +175 +173 +173 +169 +169 +170 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +143 +143 +144 +139 +139 +133 +133 +133 +129 +129 +126 +126 +126 +119 +119 +116 +115 +109 +110 +110 +105 +106 +100 +100 +100 +96 +96 +96 +96 +96 +90 +90 +86 +86 +86 +86 +86 +82 +83 +79 +76 +76 +72 +72 +68 +68 +68 +64 +64 +59 +58 +59 +55 +54 +50 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +14 +13 +13 +13 +14 +14 +14 +14 +14 +14 +13 +14 +14 +14 +14 +13 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +15 +15 +17 +17 +19 +19 +19 +21 +22 +26 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +46 +47 +47 +51 +51 +55 +54 +55 +58 +59 +65 +65 +64 +68 +69 +72 +72 +72 +76 +76 +82 +82 +83 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +110 +110 +110 +117 +116 +120 +120 +120 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +174 +178 +179 +179 +183 +182 +185 +184 +185 +188 +189 +191 +190 +190 +195 +194 +197 +196 +197 +198 +198 +200 +200 +200 +200 +201 +202 +202 +205 +204 +204 +204 +205 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +204 +204 +205 +204 +205 +202 +202 +201 +200 +201 +200 +200 +198 +198 +198 +196 +196 +195 +194 +195 +190 +190 +189 +188 +189 +185 +185 +183 +183 +183 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +141 +139 +139 +133 +133 +129 +129 +129 +126 +126 +120 +119 +120 +116 +116 +116 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +93 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +69 +68 +64 +64 +65 +58 +58 +54 +54 +55 +50 +50 +47 +47 +42 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +13 +14 +13 +13 +14 +13 +14 +14 +14 +13 +13 +14 +14 +13 +14 +13 +13 +14 +14 +14 +13 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +38 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +51 +51 +55 +54 +59 +59 +59 +64 +65 +68 +68 +67 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +117 +120 +120 +125 +125 +130 +129 +129 +134 +134 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +168 +169 +169 +173 +172 +174 +175 +174 +179 +178 +182 +183 +183 +184 +185 +189 +189 +189 +190 +191 +194 +194 +195 +196 +196 +198 +198 +200 +200 +200 +200 +201 +202 +202 +202 +204 +204 +204 +204 +204 +207 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +205 +204 +204 +204 +204 +202 +202 +202 +200 +200 +201 +200 +200 +198 +198 +196 +196 +197 +195 +194 +190 +190 +189 +189 +189 +184 +184 +182 +183 +182 +179 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +149 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +126 +126 +126 +120 +119 +115 +116 +116 +110 +110 +106 +106 +103 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +65 +59 +58 +54 +55 +51 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +14 +14 +14 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +13 +15 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +27 +27 +27 +31 +33 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +50 +50 +55 +54 +56 +58 +58 +64 +64 +69 +69 +68 +73 +72 +76 +77 +76 +82 +82 +82 +82 +82 +86 +86 +90 +90 +90 +95 +96 +99 +100 +105 +106 +106 +110 +110 +115 +116 +116 +120 +119 +125 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +144 +147 +147 +151 +151 +157 +157 +157 +161 +160 +165 +165 +165 +169 +169 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +182 +183 +185 +185 +189 +188 +190 +190 +191 +195 +194 +196 +197 +197 +199 +199 +201 +200 +200 +200 +200 +202 +203 +202 +204 +205 +204 +204 +204 +206 +206 +206 +206 +207 +206 +206 +207 +207 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +203 +202 +201 +200 +200 +200 +199 +198 +198 +196 +196 +195 +194 +194 +190 +190 +189 +188 +188 +184 +184 +184 +184 +184 +183 +183 +179 +179 +178 +175 +175 +173 +172 +171 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +147 +147 +147 +143 +143 +139 +140 +140 +133 +133 +129 +129 +126 +125 +125 +119 +119 +116 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +59 +58 +55 +54 +55 +51 +50 +47 +47 +47 +43 +43 +41 +40 +41 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +14 +14 +13 +14 +13 +13 +14 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +26 +27 +27 +31 +31 +31 +33 +33 +37 +37 +38 +41 +41 +43 +43 +46 +46 +47 +50 +51 +54 +54 +55 +59 +59 +58 +58 +58 +64 +64 +69 +69 +68 +72 +72 +77 +77 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +116 +119 +119 +120 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +164 +165 +168 +169 +169 +173 +173 +174 +175 +179 +178 +178 +183 +183 +184 +184 +184 +188 +188 +191 +191 +190 +195 +194 +197 +197 +196 +198 +198 +200 +200 +201 +200 +201 +202 +203 +204 +204 +204 +204 +204 +206 +207 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +205 +204 +205 +205 +204 +202 +203 +201 +201 +200 +200 +200 +198 +198 +198 +196 +196 +197 +196 +196 +195 +194 +190 +190 +191 +188 +189 +185 +184 +185 +182 +183 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +165 +165 +164 +161 +161 +157 +157 +157 +151 +151 +147 +147 +144 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +125 +120 +119 +116 +116 +115 +110 +110 +106 +105 +106 +100 +100 +96 +96 +91 +90 +90 +86 +86 +82 +82 +82 +76 +76 +77 +76 +76 +73 +72 +68 +68 +69 +64 +64 +58 +58 +58 +55 +55 +51 +51 +47 +47 +46 +43 +42 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +26 +27 +25 +25 +21 +21 +22 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +14 +14 +13 +13 +14 +14 +13 +14 +13 +14 +13 +13 +13 +14 +13 +13 +14 +14 +13 +14 +13 +14 +13 +13 +15 +15 +15 +15 +15 +17 +17 +17 +19 +19 +21 +21 +23 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +41 +41 +41 +43 +43 +46 +47 +46 +50 +50 +55 +54 +56 +59 +59 +64 +64 +68 +69 +69 +73 +72 +76 +76 +76 +82 +82 +86 +86 +87 +90 +90 +96 +96 +96 +100 +100 +106 +106 +109 +110 +110 +115 +115 +120 +120 +119 +125 +125 +129 +129 +129 +134 +134 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +182 +182 +184 +184 +188 +189 +188 +191 +191 +195 +195 +197 +196 +197 +199 +198 +200 +200 +200 +200 +201 +200 +201 +201 +202 +202 +204 +204 +204 +205 +205 +206 +207 +207 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +207 +205 +204 +204 +204 +204 +203 +202 +200 +200 +200 +201 +200 +198 +198 +198 +196 +197 +195 +194 +191 +190 +191 +189 +189 +185 +185 +184 +183 +183 +183 +183 +183 +179 +179 +174 +175 +175 +173 +173 +169 +169 +168 +165 +165 +161 +161 +158 +157 +157 +151 +151 +147 +147 +147 +143 +143 +140 +139 +139 +133 +133 +129 +129 +129 +126 +125 +120 +120 +116 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +89 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +64 +65 +64 +58 +59 +55 +54 +55 +51 +51 +46 +47 +46 +43 +43 +41 +41 +41 +37 +37 +33 +32 +34 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +13 +14 +14 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +14 +14 +13 +14 +14 +13 +13 +13 +13 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +42 +43 +42 +47 +47 +51 +50 +51 +54 +55 +58 +58 +59 +64 +64 +68 +68 +69 +72 +72 +76 +76 +77 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +115 +120 +119 +119 +125 +125 +130 +129 +129 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +174 +178 +179 +182 +183 +185 +185 +185 +189 +188 +191 +191 +190 +194 +194 +196 +197 +197 +198 +199 +201 +200 +201 +201 +200 +202 +202 +203 +204 +204 +204 +204 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +205 +204 +203 +202 +202 +200 +201 +200 +200 +200 +198 +198 +197 +196 +197 +194 +195 +195 +195 +194 +190 +190 +189 +189 +189 +184 +185 +183 +182 +179 +179 +179 +175 +175 +173 +173 +173 +168 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +140 +139 +133 +134 +129 +130 +125 +125 +125 +119 +119 +116 +116 +116 +110 +110 +106 +106 +106 +100 +99 +96 +96 +97 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +65 +65 +58 +58 +55 +54 +55 +51 +50 +47 +46 +47 +43 +42 +41 +40 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +18 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +13 +13 +13 +14 +14 +14 +13 +14 +14 +13 +13 +14 +14 +14 +14 +13 +13 +14 +14 +13 +13 +13 +14 +14 +13 +13 +14 +13 +13 +13 +14 +13 +15 +15 +15 +17 +17 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +28 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +50 +51 +54 +54 +59 +58 +59 +65 +64 +68 +68 +72 +72 +73 +76 +77 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +109 +109 +115 +116 +120 +119 +125 +125 +126 +130 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +173 +173 +173 +175 +174 +179 +178 +179 +183 +183 +185 +185 +184 +188 +188 +190 +191 +191 +194 +195 +196 +196 +196 +199 +198 +201 +201 +200 +200 +200 +202 +202 +204 +204 +205 +204 +204 +205 +204 +204 +206 +207 +206 +207 +207 +206 +206 +206 +206 +207 +206 +207 +207 +206 +204 +204 +204 +204 +205 +202 +202 +202 +201 +201 +201 +201 +201 +200 +200 +198 +198 +198 +196 +197 +194 +195 +191 +190 +191 +189 +189 +185 +185 +184 +183 +183 +179 +179 +178 +175 +175 +173 +173 +173 +168 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +130 +126 +126 +126 +119 +119 +116 +115 +115 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +65 +64 +64 +58 +58 +54 +54 +51 +50 +51 +47 +47 +43 +43 +42 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +24 +25 +26 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +14 +14 +13 +13 +14 +14 +13 +13 +14 +13 +14 +14 +13 +13 +13 +14 +13 +13 +13 +14 +14 +13 +12 +15 +15 +17 +17 +18 +18 +19 +21 +21 +25 +24 +25 +27 +27 +31 +32 +31 +33 +33 +36 +37 +37 +41 +41 +43 +43 +43 +47 +46 +51 +50 +54 +55 +55 +58 +58 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +99 +100 +106 +106 +106 +110 +110 +116 +115 +115 +119 +119 +126 +125 +125 +129 +129 +133 +133 +133 +139 +140 +143 +143 +144 +147 +148 +151 +151 +158 +157 +157 +161 +161 +165 +164 +164 +169 +169 +169 +169 +168 +173 +173 +175 +175 +174 +179 +179 +182 +182 +183 +185 +185 +189 +188 +190 +190 +190 +194 +194 +196 +196 +196 +198 +198 +199 +199 +198 +201 +200 +200 +200 +200 +202 +202 +204 +204 +205 +204 +205 +207 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +204 +204 +205 +204 +204 +202 +203 +201 +200 +201 +200 +201 +198 +198 +198 +196 +196 +194 +194 +194 +191 +190 +189 +189 +189 +184 +185 +182 +183 +183 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +126 +126 +125 +119 +120 +115 +116 +115 +110 +109 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +73 +72 +72 +68 +68 +64 +64 +65 +59 +58 +54 +55 +55 +51 +50 +47 +46 +47 +43 +43 +41 +40 +37 +37 +37 +32 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +13 +13 +13 +13 +14 +13 +14 +14 +14 +14 +13 +13 +14 +14 +14 +13 +14 +14 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +14 +14 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +22 +26 +25 +28 +27 +27 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +51 +51 +55 +55 +59 +58 +58 +65 +65 +68 +68 +69 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +99 +106 +106 +110 +109 +110 +115 +115 +119 +119 +119 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +172 +174 +175 +175 +178 +179 +183 +182 +182 +185 +185 +185 +185 +184 +188 +189 +191 +190 +191 +194 +194 +196 +196 +196 +199 +199 +200 +200 +200 +200 +200 +202 +202 +202 +202 +202 +204 +204 +205 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +204 +204 +204 +204 +204 +202 +202 +201 +200 +201 +201 +201 +198 +198 +199 +196 +197 +194 +195 +190 +190 +191 +189 +188 +185 +184 +184 +183 +182 +179 +178 +178 +174 +175 +173 +172 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +152 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +130 +125 +125 +125 +119 +119 +115 +115 +116 +109 +110 +105 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +62 +59 +58 +54 +54 +50 +51 +50 +47 +47 +43 +43 +42 +41 +41 +41 +41 +41 +37 +37 +32 +33 +34 +31 +31 +27 +27 +27 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +14 +13 +13 +14 +13 +13 +14 +13 +14 +13 +13 +13 +13 +13 +14 +14 +13 +13 +14 +13 +13 +14 +13 +13 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +36 +41 +41 +41 +43 +43 +47 +46 +50 +50 +51 +55 +55 +59 +59 +58 +64 +64 +69 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +116 +120 +119 +120 +126 +126 +129 +129 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +152 +151 +151 +157 +157 +161 +161 +161 +165 +164 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +182 +183 +184 +185 +188 +188 +189 +190 +190 +194 +194 +194 +197 +196 +196 +196 +196 +198 +198 +200 +200 +201 +200 +201 +203 +202 +204 +204 +205 +204 +205 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +206 +204 +204 +205 +205 +204 +202 +202 +200 +200 +201 +200 +200 +198 +198 +199 +197 +196 +194 +194 +194 +190 +191 +189 +189 +189 +185 +185 +183 +183 +182 +179 +179 +175 +175 +173 +172 +172 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +140 +140 +133 +133 +129 +130 +126 +125 +125 +120 +120 +116 +115 +116 +110 +110 +109 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +65 +65 +64 +65 +65 +58 +58 +54 +54 +55 +50 +51 +46 +47 +45 +43 +42 +41 +41 +37 +37 +36 +32 +33 +31 +31 +31 +27 +27 +27 +27 +27 +25 +25 +21 +21 +22 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +14 +14 +13 +14 +14 +13 +14 +14 +14 +14 +14 +13 +14 +14 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +54 +54 +55 +54 +59 +59 +65 +64 +64 +68 +69 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +89 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +111 +115 +115 +119 +120 +126 +126 +126 +129 +129 +133 +133 +133 +139 +139 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +158 +161 +162 +165 +165 +169 +169 +168 +173 +173 +175 +175 +174 +179 +179 +178 +179 +179 +183 +183 +185 +185 +185 +188 +188 +190 +190 +194 +195 +194 +196 +197 +199 +198 +199 +201 +200 +200 +200 +200 +202 +202 +205 +204 +205 +205 +204 +206 +206 +207 +206 +206 +207 +206 +206 +207 +207 +206 +206 +206 +206 +206 +205 +204 +204 +204 +204 +202 +202 +200 +200 +200 +201 +201 +199 +198 +199 +197 +196 +194 +195 +191 +190 +191 +188 +188 +185 +184 +185 +183 +183 +183 +183 +182 +178 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +164 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +120 +119 +120 +115 +115 +109 +109 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +77 +76 +72 +72 +68 +69 +66 +64 +64 +58 +58 +54 +54 +55 +50 +51 +47 +47 +46 +43 +43 +43 +42 +43 +41 +41 +37 +37 +37 +33 +33 +31 +30 +28 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +13 +13 +13 +14 +14 +14 +14 +14 +13 +14 +14 +14 +13 +13 +14 +14 +14 +13 +14 +13 +13 +14 +14 +13 +13 +12 +15 +15 +17 +17 +20 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +55 +55 +54 +58 +58 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +91 +96 +96 +100 +100 +105 +106 +105 +110 +110 +115 +115 +115 +119 +119 +119 +120 +119 +126 +125 +129 +129 +130 +133 +133 +139 +140 +140 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +165 +165 +165 +169 +168 +173 +173 +173 +175 +175 +178 +179 +182 +183 +183 +184 +184 +188 +188 +188 +191 +191 +191 +191 +191 +195 +194 +197 +197 +197 +198 +199 +201 +200 +201 +200 +201 +202 +202 +204 +205 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +207 +206 +206 +206 +204 +204 +204 +204 +205 +202 +202 +201 +201 +201 +200 +201 +199 +198 +198 +196 +196 +195 +194 +194 +191 +190 +188 +188 +189 +185 +185 +182 +182 +182 +179 +179 +175 +175 +173 +173 +172 +168 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +130 +126 +126 +125 +119 +119 +116 +115 +116 +110 +110 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +76 +77 +76 +72 +72 +68 +68 +68 +64 +64 +64 +64 +64 +58 +58 +55 +54 +55 +51 +50 +46 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +24 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +12 +13 +13 +13 +13 +14 +13 +13 +14 +13 +14 +13 +14 +13 +14 +13 +13 +14 +13 +13 +13 +14 +13 +14 +14 +13 +13 +14 +12 +15 +15 +17 +17 +18 +19 +19 +21 +21 +20 +25 +25 +27 +27 +27 +31 +31 +33 +33 +38 +37 +37 +41 +40 +43 +43 +43 +46 +47 +50 +51 +51 +54 +55 +58 +58 +59 +64 +64 +68 +68 +68 +72 +73 +76 +76 +83 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +115 +120 +119 +122 +125 +125 +129 +129 +133 +133 +133 +140 +139 +143 +143 +143 +147 +147 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +169 +169 +169 +173 +173 +174 +175 +175 +179 +178 +182 +183 +183 +185 +185 +188 +188 +188 +191 +190 +194 +195 +195 +196 +196 +198 +198 +200 +200 +201 +200 +201 +202 +203 +203 +205 +204 +205 +205 +204 +204 +204 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +205 +204 +204 +204 +205 +202 +202 +200 +201 +201 +201 +201 +199 +198 +199 +196 +197 +194 +195 +194 +190 +191 +189 +189 +185 +185 +184 +183 +183 +179 +178 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +144 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +125 +119 +119 +116 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +91 +90 +90 +86 +86 +82 +82 +82 +76 +76 +76 +76 +77 +72 +72 +68 +69 +68 +65 +64 +58 +59 +58 +55 +55 +51 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +13 +14 +14 +13 +13 +14 +13 +13 +14 +13 +14 +13 +13 +14 +14 +13 +13 +13 +14 +14 +13 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +50 +55 +55 +55 +59 +59 +64 +64 +69 +69 +68 +72 +72 +76 +76 +76 +82 +82 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +102 +106 +106 +110 +110 +115 +116 +115 +119 +119 +125 +125 +125 +129 +130 +129 +129 +129 +133 +133 +139 +140 +139 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +182 +183 +183 +184 +185 +189 +189 +190 +190 +191 +194 +194 +196 +196 +197 +198 +199 +201 +200 +200 +200 +201 +203 +203 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +207 +206 +206 +206 +204 +205 +204 +205 +204 +202 +202 +202 +201 +201 +200 +200 +201 +198 +198 +196 +196 +195 +194 +194 +190 +191 +188 +188 +189 +185 +185 +183 +183 +182 +179 +179 +175 +175 +175 +173 +173 +169 +169 +170 +164 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +143 +143 +143 +139 +139 +133 +133 +133 +130 +130 +125 +126 +123 +120 +119 +116 +116 +109 +110 +109 +106 +106 +100 +100 +100 +96 +96 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +73 +72 +73 +69 +68 +64 +64 +64 +58 +59 +55 +54 +54 +50 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +13 +14 +13 +13 +14 +13 +14 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +14 +13 +13 +14 +14 +14 +13 +13 +15 +15 +18 +17 +17 +19 +19 +21 +21 +21 +25 +25 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +36 +38 +41 +41 +43 +43 +47 +47 +46 +51 +50 +55 +54 +55 +58 +59 +58 +58 +59 +64 +65 +68 +68 +68 +72 +72 +77 +76 +79 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +106 +106 +106 +109 +110 +115 +116 +116 +120 +119 +126 +126 +129 +129 +130 +134 +134 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +175 +175 +175 +178 +179 +183 +183 +182 +185 +185 +189 +189 +189 +190 +191 +194 +194 +194 +197 +196 +199 +198 +199 +200 +200 +201 +201 +203 +202 +202 +204 +204 +204 +204 +204 +207 +206 +207 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +207 +206 +204 +204 +204 +204 +203 +202 +202 +200 +200 +200 +200 +200 +198 +198 +197 +196 +196 +195 +194 +190 +190 +190 +189 +189 +185 +185 +185 +183 +183 +179 +178 +174 +175 +175 +173 +173 +169 +169 +169 +165 +165 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +148 +143 +143 +139 +139 +133 +133 +133 +130 +130 +126 +126 +126 +119 +120 +120 +120 +119 +115 +116 +110 +110 +110 +106 +106 +100 +100 +96 +95 +97 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +73 +73 +68 +69 +69 +64 +64 +59 +59 +59 +54 +54 +51 +50 +47 +47 +47 +43 +43 +41 +41 +40 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +20 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +14 +14 +13 +13 +14 +14 +13 +14 +14 +14 +14 +13 +13 +14 +13 +13 +14 +13 +13 +15 +14 +15 +17 +17 +19 +19 +19 +20 +22 +24 +25 +26 +27 +27 +31 +31 +34 +33 +33 +37 +37 +41 +41 +41 +43 +43 +43 +43 +43 +47 +47 +51 +51 +51 +54 +54 +59 +58 +59 +64 +64 +68 +69 +73 +72 +72 +76 +76 +82 +82 +82 +86 +86 +86 +87 +86 +90 +90 +96 +95 +96 +100 +100 +106 +106 +107 +110 +109 +116 +116 +120 +120 +120 +125 +126 +129 +130 +129 +133 +133 +139 +140 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +172 +173 +175 +175 +174 +179 +179 +183 +183 +183 +184 +185 +188 +188 +189 +191 +191 +194 +194 +196 +196 +197 +199 +199 +200 +201 +200 +201 +201 +202 +202 +202 +204 +204 +204 +204 +204 +207 +206 +206 +206 +206 +207 +207 +206 +207 +207 +206 +207 +206 +206 +204 +205 +205 +204 +204 +202 +202 +202 +200 +200 +200 +200 +200 +199 +199 +196 +196 +197 +195 +195 +191 +190 +188 +188 +188 +185 +185 +183 +182 +183 +178 +179 +179 +179 +179 +175 +175 +173 +173 +172 +169 +169 +165 +165 +163 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +140 +139 +140 +139 +140 +133 +133 +129 +129 +129 +125 +126 +119 +119 +118 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +72 +73 +68 +68 +64 +64 +64 +58 +58 +55 +54 +55 +51 +51 +47 +46 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +14 +13 +14 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +13 +14 +13 +14 +14 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +22 +21 +21 +25 +25 +27 +27 +27 +31 +31 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +44 +46 +47 +51 +50 +55 +55 +54 +59 +58 +64 +64 +64 +68 +68 +69 +69 +68 +72 +72 +76 +76 +77 +82 +82 +86 +86 +89 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +109 +110 +115 +115 +120 +119 +120 +124 +125 +129 +129 +130 +134 +133 +140 +139 +142 +143 +143 +147 +147 +151 +152 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +168 +173 +173 +175 +175 +174 +179 +179 +182 +183 +184 +185 +185 +189 +189 +190 +191 +191 +195 +194 +194 +194 +194 +197 +196 +198 +199 +198 +200 +200 +200 +201 +201 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +205 +204 +204 +204 +205 +203 +202 +201 +200 +200 +200 +200 +198 +198 +196 +196 +197 +195 +195 +195 +194 +195 +190 +190 +188 +189 +189 +185 +184 +183 +183 +181 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +140 +139 +140 +133 +133 +130 +129 +129 +125 +125 +119 +120 +119 +116 +115 +110 +109 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +86 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +68 +69 +64 +64 +58 +58 +59 +54 +55 +51 +50 +51 +47 +47 +44 +42 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +13 +14 +14 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +13 +14 +13 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +15 +15 +15 +17 +17 +17 +17 +17 +19 +19 +21 +21 +21 +21 +21 +25 +25 +26 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +43 +43 +43 +46 +47 +50 +50 +50 +55 +55 +58 +58 +61 +65 +64 +68 +68 +72 +73 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +115 +115 +115 +120 +119 +125 +126 +125 +129 +129 +133 +133 +134 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +166 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +179 +183 +183 +185 +184 +185 +189 +189 +191 +190 +190 +194 +194 +196 +196 +198 +199 +198 +201 +201 +200 +200 +200 +202 +202 +204 +205 +205 +205 +204 +207 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +203 +202 +202 +202 +200 +200 +200 +200 +200 +198 +199 +196 +197 +195 +194 +194 +191 +190 +188 +189 +189 +185 +184 +183 +183 +183 +178 +179 +179 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +130 +125 +125 +126 +120 +120 +115 +115 +111 +110 +109 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +69 +68 +65 +64 +59 +59 +59 +55 +55 +51 +51 +51 +46 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +32 +27 +27 +25 +25 +22 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +13 +13 +14 +14 +14 +13 +13 +14 +13 +13 +13 +14 +13 +14 +14 +14 +14 +14 +13 +13 +14 +13 +13 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +46 +46 +46 +50 +50 +54 +54 +54 +58 +58 +64 +64 +64 +68 +68 +72 +72 +73 +76 +76 +82 +82 +82 +86 +86 +91 +90 +95 +96 +96 +99 +100 +106 +106 +106 +110 +110 +115 +115 +116 +120 +120 +125 +125 +125 +130 +129 +133 +133 +133 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +172 +175 +175 +180 +179 +179 +183 +183 +184 +185 +189 +188 +188 +191 +190 +194 +194 +195 +196 +196 +199 +198 +198 +201 +201 +201 +201 +201 +202 +203 +204 +205 +204 +204 +205 +207 +206 +207 +206 +206 +207 +206 +206 +206 +206 +207 +206 +207 +207 +206 +204 +204 +205 +204 +204 +202 +202 +200 +201 +200 +200 +200 +199 +198 +196 +197 +197 +194 +194 +191 +191 +190 +188 +189 +189 +189 +188 +184 +184 +183 +183 +183 +179 +179 +175 +174 +175 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +140 +133 +133 +129 +130 +125 +125 +125 +119 +120 +115 +116 +116 +109 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +73 +72 +72 +69 +68 +64 +64 +65 +58 +58 +55 +54 +54 +51 +51 +47 +47 +47 +43 +42 +41 +41 +41 +37 +37 +33 +33 +32 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +13 +14 +14 +14 +14 +13 +14 +14 +14 +13 +13 +14 +14 +13 +14 +13 +13 +13 +13 +13 +14 +14 +14 +13 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +35 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +51 +54 +54 +58 +59 +58 +64 +64 +68 +68 +69 +73 +71 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +115 +119 +120 +119 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +172 +173 +175 +175 +179 +179 +179 +183 +184 +184 +184 +184 +189 +188 +190 +191 +190 +194 +194 +196 +196 +197 +198 +198 +200 +200 +201 +200 +200 +202 +202 +205 +204 +204 +205 +205 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +200 +200 +201 +200 +200 +198 +198 +198 +197 +196 +197 +197 +197 +195 +194 +191 +191 +191 +189 +189 +185 +185 +184 +183 +183 +179 +179 +174 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +148 +143 +143 +139 +139 +138 +133 +133 +129 +129 +130 +125 +125 +119 +120 +119 +115 +115 +110 +109 +110 +106 +106 +100 +100 +99 +96 +96 +89 +90 +86 +86 +87 +82 +82 +76 +76 +76 +72 +72 +68 +69 +68 +64 +64 +58 +58 +58 +54 +54 +51 +50 +51 +46 +47 +43 +43 +41 +40 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +16 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +13 +13 +13 +13 +14 +13 +14 +14 +14 +13 +14 +13 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +14 +14 +13 +13 +13 +13 +12 +15 +15 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +30 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +51 +54 +54 +56 +59 +58 +65 +64 +68 +68 +68 +72 +72 +76 +77 +76 +82 +82 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +110 +116 +116 +115 +120 +120 +125 +125 +125 +129 +130 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +179 +183 +182 +185 +185 +185 +189 +189 +191 +191 +191 +194 +194 +197 +196 +199 +198 +198 +200 +201 +200 +200 +200 +202 +203 +202 +202 +203 +204 +204 +204 +204 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +204 +204 +204 +204 +205 +204 +204 +204 +202 +203 +201 +200 +201 +200 +201 +198 +198 +198 +196 +197 +194 +195 +190 +190 +190 +189 +188 +185 +185 +185 +182 +183 +179 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +162 +161 +161 +157 +157 +151 +151 +151 +147 +148 +143 +143 +143 +139 +139 +133 +133 +133 +129 +130 +126 +125 +126 +119 +120 +116 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +59 +58 +58 +55 +54 +51 +51 +50 +46 +46 +43 +43 +43 +41 +41 +37 +36 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +22 +21 +20 +19 +19 +17 +17 +17 +15 +15 +15 +16 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +13 +13 +14 +14 +13 +13 +13 +13 +14 +13 +13 +14 +14 +14 +13 +13 +13 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +32 +37 +37 +37 +41 +41 +43 +42 +46 +46 +47 +50 +50 +55 +55 +55 +58 +58 +59 +59 +59 +64 +65 +68 +69 +68 +72 +72 +77 +76 +76 +82 +82 +86 +86 +90 +90 +90 +95 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +115 +120 +120 +119 +126 +125 +129 +129 +129 +133 +133 +139 +139 +144 +143 +143 +147 +147 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +183 +183 +183 +184 +185 +188 +189 +188 +191 +191 +194 +194 +195 +196 +196 +198 +199 +199 +201 +201 +200 +200 +201 +202 +203 +204 +204 +204 +205 +204 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +207 +206 +207 +206 +206 +205 +204 +204 +204 +205 +202 +202 +201 +200 +201 +200 +200 +198 +199 +198 +197 +197 +195 +194 +195 +190 +191 +188 +189 +189 +184 +185 +182 +182 +179 +179 +178 +175 +175 +173 +172 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +158 +151 +151 +147 +147 +148 +143 +143 +139 +139 +134 +134 +133 +129 +129 +126 +125 +125 +120 +120 +115 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +83 +82 +82 +76 +76 +72 +72 +73 +68 +68 +64 +65 +65 +58 +58 +55 +54 +54 +50 +50 +47 +46 +47 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +12 +13 +12 +13 +14 +13 +14 +14 +13 +13 +14 +13 +14 +14 +13 +14 +13 +14 +13 +14 +13 +14 +13 +13 +14 +14 +13 +14 +14 +13 +14 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +30 +31 +31 +33 +33 +37 +37 +36 +41 +41 +43 +42 +43 +47 +47 +50 +51 +51 +54 +54 +59 +58 +59 +64 +64 +68 +69 +73 +72 +72 +76 +76 +82 +83 +82 +86 +87 +90 +90 +90 +96 +96 +100 +99 +100 +106 +106 +110 +110 +110 +116 +116 +120 +119 +126 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +168 +172 +173 +173 +175 +175 +179 +178 +179 +183 +183 +183 +183 +183 +185 +185 +189 +189 +188 +191 +191 +195 +194 +195 +196 +197 +198 +198 +200 +200 +200 +200 +200 +202 +202 +202 +204 +204 +205 +204 +204 +204 +204 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +205 +205 +205 +204 +204 +202 +202 +201 +200 +201 +201 +201 +198 +198 +199 +196 +197 +195 +194 +190 +191 +190 +189 +188 +184 +185 +185 +182 +183 +179 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +139 +139 +139 +133 +133 +129 +129 +129 +126 +125 +119 +119 +120 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +69 +64 +64 +58 +58 +55 +55 +55 +50 +50 +47 +47 +47 +43 +42 +43 +43 +43 +41 +40 +37 +37 +37 +33 +33 +31 +31 +29 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +13 +14 +13 +13 +13 +13 +14 +14 +13 +13 +14 +14 +13 +14 +13 +14 +14 +14 +14 +13 +13 +14 +13 +14 +13 +12 +15 +15 +16 +17 +17 +19 +19 +22 +21 +21 +25 +25 +27 +27 +27 +31 +31 +32 +33 +33 +37 +37 +41 +40 +41 +43 +42 +47 +47 +50 +51 +50 +54 +54 +58 +58 +58 +64 +64 +64 +64 +64 +68 +68 +72 +72 +73 +76 +76 +82 +82 +83 +86 +86 +90 +90 +97 +96 +96 +100 +100 +106 +105 +106 +110 +110 +116 +116 +115 +120 +120 +125 +125 +125 +130 +129 +133 +133 +132 +139 +139 +143 +143 +143 +143 +144 +147 +147 +151 +151 +151 +157 +157 +157 +157 +157 +161 +160 +165 +165 +165 +169 +169 +172 +173 +173 +175 +175 +179 +178 +182 +182 +183 +185 +184 +188 +189 +188 +190 +190 +190 +191 +190 +194 +194 +197 +196 +197 +198 +198 +201 +201 +200 +201 +201 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +205 +204 +204 +204 +205 +202 +202 +200 +200 +200 +200 +200 +198 +198 +198 +196 +196 +195 +195 +194 +190 +190 +189 +188 +188 +185 +185 +183 +183 +179 +178 +179 +174 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +134 +134 +133 +129 +130 +125 +125 +126 +120 +120 +115 +115 +116 +110 +110 +106 +105 +106 +100 +100 +96 +95 +97 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +68 +68 +68 +65 +64 +58 +58 +59 +55 +54 +51 +51 +49 +47 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +14 +14 +14 +13 +13 +14 +13 +14 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +32 +31 +31 +33 +33 +37 +37 +37 +41 +41 +41 +40 +41 +43 +42 +47 +47 +46 +50 +51 +55 +55 +54 +59 +58 +64 +65 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +89 +90 +96 +96 +96 +100 +100 +106 +105 +106 +110 +110 +116 +115 +119 +119 +119 +125 +125 +129 +129 +130 +133 +134 +140 +139 +140 +143 +143 +147 +147 +147 +151 +151 +157 +157 +158 +161 +161 +165 +165 +170 +169 +169 +173 +173 +174 +175 +175 +179 +179 +179 +179 +178 +183 +182 +185 +184 +185 +189 +189 +190 +190 +194 +194 +195 +196 +196 +198 +199 +198 +201 +200 +201 +200 +200 +202 +202 +204 +204 +204 +205 +204 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +204 +204 +204 +204 +204 +202 +202 +201 +200 +201 +200 +200 +198 +198 +199 +196 +196 +195 +195 +190 +190 +190 +189 +189 +184 +184 +184 +182 +183 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +134 +134 +133 +129 +129 +125 +125 +125 +120 +119 +115 +115 +116 +109 +110 +106 +106 +100 +100 +100 +95 +96 +90 +90 +90 +86 +86 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +65 +65 +59 +59 +54 +54 +54 +51 +50 +47 +47 +47 +43 +43 +43 +42 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +28 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +14 +14 +13 +14 +13 +14 +14 +14 +14 +13 +13 +13 +14 +13 +14 +13 +12 +15 +15 +17 +16 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +51 +54 +55 +59 +59 +64 +65 +64 +68 +68 +72 +73 +73 +76 +76 +82 +82 +82 +86 +86 +90 +90 +91 +96 +96 +100 +100 +107 +106 +106 +110 +110 +116 +115 +115 +119 +120 +119 +120 +119 +125 +125 +130 +129 +130 +133 +133 +139 +139 +141 +143 +143 +147 +147 +151 +151 +151 +157 +158 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +178 +179 +182 +182 +184 +184 +185 +188 +188 +191 +190 +191 +194 +194 +196 +197 +196 +199 +198 +200 +201 +200 +200 +200 +203 +203 +202 +204 +204 +204 +205 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +205 +204 +204 +204 +205 +202 +203 +203 +200 +201 +201 +200 +198 +198 +199 +197 +196 +194 +194 +195 +190 +190 +188 +189 +189 +184 +185 +182 +182 +182 +179 +179 +175 +175 +175 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +148 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +130 +125 +126 +119 +119 +116 +116 +115 +109 +110 +106 +106 +106 +100 +100 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +79 +76 +76 +73 +72 +68 +68 +68 +65 +64 +58 +58 +58 +55 +54 +54 +54 +55 +51 +51 +47 +47 +47 +43 +42 +41 +41 +38 +37 +36 +33 +33 +31 +31 +31 +27 +27 +27 +27 +26 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +14 +14 +13 +14 +14 +14 +14 +13 +14 +13 +14 +13 +14 +13 +13 +14 +14 +13 +13 +13 +13 +14 +14 +14 +13 +13 +15 +15 +15 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +37 +37 +36 +41 +41 +43 +43 +43 +47 +47 +50 +51 +50 +54 +54 +58 +59 +58 +65 +64 +68 +69 +69 +72 +72 +76 +76 +83 +82 +82 +86 +86 +90 +90 +90 +96 +96 +96 +96 +96 +100 +100 +106 +106 +106 +110 +109 +115 +116 +117 +120 +119 +125 +125 +130 +129 +129 +134 +133 +133 +134 +133 +140 +139 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +160 +161 +161 +165 +165 +169 +169 +169 +173 +173 +174 +175 +175 +179 +179 +182 +183 +182 +184 +185 +188 +189 +189 +190 +191 +194 +194 +197 +197 +196 +199 +199 +200 +200 +200 +200 +200 +203 +202 +202 +204 +205 +204 +204 +204 +206 +206 +206 +207 +206 +207 +207 +206 +206 +207 +207 +206 +206 +206 +204 +204 +205 +204 +204 +203 +203 +202 +201 +200 +201 +201 +200 +199 +198 +197 +196 +196 +194 +195 +191 +190 +189 +189 +188 +185 +184 +182 +183 +182 +179 +179 +175 +175 +175 +173 +173 +169 +169 +168 +165 +165 +161 +161 +161 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +133 +133 +133 +129 +129 +125 +125 +125 +119 +119 +116 +115 +116 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +86 +87 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +65 +64 +64 +58 +58 +54 +55 +55 +51 +51 +46 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +24 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +14 +13 +14 +14 +14 +13 +14 +13 +13 +14 +14 +13 +13 +13 +14 +14 +13 +13 +14 +14 +13 +13 +13 +14 +13 +14 +14 +13 +12 +15 +15 +17 +17 +20 +19 +18 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +40 +43 +42 +43 +47 +47 +50 +50 +55 +55 +55 +58 +58 +64 +64 +64 +68 +68 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +88 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +109 +116 +116 +115 +116 +115 +120 +120 +125 +125 +125 +130 +129 +133 +134 +138 +139 +139 +143 +143 +147 +147 +147 +151 +152 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +178 +182 +183 +182 +184 +185 +188 +189 +188 +190 +191 +195 +194 +194 +196 +196 +199 +199 +198 +200 +200 +200 +200 +200 +203 +202 +204 +204 +205 +204 +204 +206 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +205 +202 +202 +200 +201 +201 +200 +201 +198 +199 +196 +196 +196 +194 +194 +191 +191 +190 +188 +189 +185 +185 +185 +183 +183 +178 +179 +178 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +137 +134 +134 +129 +129 +125 +125 +125 +120 +120 +115 +115 +116 +110 +110 +110 +109 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +88 +86 +86 +82 +82 +76 +76 +76 +73 +72 +68 +68 +68 +65 +65 +59 +59 +59 +55 +54 +51 +51 +51 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +26 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +13 +13 +14 +14 +14 +14 +14 +13 +13 +13 +14 +13 +14 +13 +14 +14 +13 +13 +14 +13 +13 +13 +14 +14 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +32 +33 +33 +36 +37 +41 +41 +41 +43 +43 +47 +46 +47 +50 +51 +50 +51 +51 +55 +55 +58 +59 +58 +64 +64 +69 +68 +70 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +96 +96 +96 +100 +100 +105 +105 +106 +110 +110 +115 +115 +119 +120 +120 +126 +126 +129 +129 +129 +134 +133 +139 +139 +139 +143 +143 +147 +147 +147 +152 +151 +157 +157 +157 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +178 +179 +183 +182 +183 +185 +184 +189 +188 +189 +190 +191 +194 +194 +195 +197 +196 +199 +198 +200 +200 +200 +201 +201 +202 +202 +203 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +205 +204 +204 +204 +204 +202 +202 +202 +200 +200 +200 +200 +200 +200 +200 +198 +198 +198 +196 +196 +194 +195 +195 +190 +190 +188 +188 +184 +185 +184 +183 +182 +179 +179 +179 +175 +175 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +159 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +134 +133 +133 +133 +130 +130 +125 +126 +125 +119 +119 +116 +115 +110 +110 +110 +105 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +73 +72 +73 +68 +68 +64 +64 +59 +58 +58 +54 +55 +50 +50 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +30 +31 +31 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +18 +16 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +14 +13 +14 +13 +13 +14 +14 +14 +13 +14 +13 +14 +13 +14 +13 +14 +14 +13 +13 +13 +13 +14 +14 +13 +12 +15 +15 +15 +15 +16 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +31 +31 +31 +32 +33 +37 +37 +36 +41 +41 +43 +43 +43 +47 +46 +50 +50 +54 +54 +54 +59 +58 +65 +64 +65 +68 +68 +72 +73 +72 +76 +76 +82 +82 +82 +86 +86 +89 +90 +95 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +115 +119 +119 +125 +125 +125 +129 +129 +133 +133 +134 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +156 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +178 +178 +183 +183 +184 +185 +189 +189 +188 +191 +190 +194 +194 +194 +196 +196 +198 +197 +198 +200 +200 +201 +200 +200 +202 +203 +204 +204 +205 +204 +204 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +203 +201 +200 +201 +201 +200 +198 +198 +196 +197 +196 +194 +194 +191 +191 +191 +188 +188 +188 +189 +189 +185 +185 +182 +183 +183 +179 +179 +175 +175 +174 +173 +173 +169 +169 +165 +165 +165 +161 +161 +161 +161 +161 +157 +157 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +137 +133 +133 +130 +129 +126 +126 +126 +119 +120 +116 +116 +116 +110 +109 +105 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +69 +68 +65 +64 +65 +58 +59 +54 +55 +55 +51 +51 +46 +47 +47 +43 +42 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +20 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +14 +14 +13 +14 +13 +14 +13 +14 +13 +14 +14 +13 +13 +14 +14 +13 +14 +14 +14 +13 +13 +14 +13 +15 +15 +15 +17 +17 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +28 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +46 +47 +46 +47 +47 +50 +51 +54 +55 +55 +58 +58 +65 +65 +65 +69 +68 +72 +72 +76 +77 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +115 +119 +119 +120 +125 +125 +130 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +169 +169 +169 +173 +172 +175 +175 +175 +179 +178 +183 +183 +183 +184 +185 +189 +188 +188 +191 +191 +194 +194 +194 +197 +197 +198 +199 +201 +201 +201 +200 +200 +202 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +207 +204 +204 +204 +205 +204 +202 +203 +202 +201 +200 +201 +200 +200 +199 +199 +196 +197 +196 +195 +195 +191 +190 +189 +188 +188 +185 +184 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +152 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +134 +133 +129 +129 +125 +126 +125 +120 +119 +115 +115 +116 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +69 +64 +64 +65 +59 +58 +55 +55 +51 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +12 +13 +14 +13 +13 +14 +14 +13 +13 +13 +14 +14 +13 +13 +14 +14 +13 +14 +13 +13 +13 +13 +14 +14 +14 +14 +14 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +51 +53 +54 +54 +59 +59 +64 +64 +64 +69 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +99 +105 +106 +106 +110 +110 +116 +115 +115 +120 +119 +125 +125 +125 +129 +129 +133 +134 +133 +140 +139 +143 +143 +143 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +169 +169 +169 +173 +173 +175 +175 +175 +178 +179 +183 +183 +183 +184 +185 +188 +188 +191 +191 +190 +194 +194 +196 +196 +196 +198 +199 +201 +200 +200 +200 +201 +202 +202 +203 +204 +204 +204 +205 +205 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +204 +204 +205 +204 +204 +202 +202 +202 +200 +201 +200 +200 +199 +198 +199 +196 +196 +194 +194 +194 +190 +191 +189 +188 +189 +184 +184 +184 +184 +184 +182 +182 +179 +179 +179 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +134 +134 +130 +129 +125 +125 +120 +120 +119 +116 +115 +109 +110 +110 +106 +106 +100 +100 +100 +96 +96 +91 +90 +90 +86 +86 +83 +82 +82 +76 +76 +72 +72 +68 +68 +68 +64 +64 +59 +59 +58 +54 +55 +50 +51 +51 +47 +47 +43 +43 +42 +41 +41 +37 +37 +37 +33 +32 +31 +31 +28 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +14 +13 +13 +14 +13 +13 +14 +13 +13 +13 +14 +14 +13 +14 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +13 +13 +15 +15 +17 +17 +19 +19 +19 +21 +21 +24 +25 +25 +27 +27 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +50 +51 +51 +55 +54 +58 +59 +59 +64 +64 +69 +68 +68 +72 +72 +76 +76 +77 +82 +82 +87 +86 +89 +90 +90 +96 +96 +100 +99 +100 +106 +105 +110 +109 +110 +115 +115 +119 +119 +120 +125 +126 +129 +129 +130 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +185 +184 +184 +188 +188 +191 +191 +191 +194 +195 +196 +196 +197 +198 +199 +200 +200 +201 +201 +201 +202 +202 +202 +205 +204 +204 +204 +207 +207 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +204 +204 +205 +204 +204 +202 +202 +200 +201 +200 +200 +200 +199 +198 +199 +196 +196 +196 +197 +196 +194 +194 +191 +191 +191 +189 +188 +185 +184 +183 +183 +183 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +152 +147 +147 +143 +143 +139 +140 +139 +134 +133 +130 +129 +129 +125 +125 +119 +119 +120 +115 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +95 +90 +90 +87 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +69 +68 +64 +64 +59 +59 +59 +55 +54 +51 +50 +51 +47 +47 +43 +42 +41 +40 +41 +37 +37 +33 +33 +33 +31 +32 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +18 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +13 +13 +14 +14 +13 +13 +14 +14 +14 +13 +14 +14 +14 +13 +13 +14 +14 +13 +14 +13 +12 +15 +15 +15 +15 +15 +17 +17 +20 +19 +19 +21 +21 +25 +25 +26 +27 +26 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +51 +55 +54 +55 +59 +58 +65 +64 +68 +69 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +105 +106 +110 +110 +115 +116 +120 +119 +119 +125 +125 +130 +129 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +147 +151 +151 +156 +157 +157 +161 +161 +165 +164 +169 +168 +169 +173 +173 +174 +175 +175 +179 +178 +179 +178 +178 +182 +183 +185 +184 +184 +188 +188 +190 +190 +191 +194 +195 +197 +197 +198 +198 +198 +200 +200 +200 +200 +200 +202 +202 +205 +204 +205 +204 +204 +207 +206 +206 +206 +207 +206 +206 +207 +206 +207 +207 +207 +207 +206 +206 +205 +204 +204 +204 +204 +202 +202 +202 +202 +202 +200 +200 +201 +200 +200 +198 +199 +197 +196 +196 +195 +194 +191 +191 +189 +188 +189 +185 +184 +183 +182 +183 +178 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +140 +139 +139 +133 +133 +129 +129 +129 +126 +126 +120 +119 +120 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +69 +64 +64 +58 +58 +55 +54 +54 +50 +50 +47 +46 +47 +42 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +28 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +14 +14 +14 +13 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +14 +13 +13 +14 +14 +13 +13 +14 +14 +13 +13 +13 +13 +15 +15 +16 +17 +16 +19 +18 +21 +21 +21 +25 +26 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +50 +50 +50 +55 +54 +58 +59 +59 +64 +64 +65 +64 +64 +68 +69 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +89 +90 +96 +96 +96 +100 +100 +106 +106 +106 +109 +110 +115 +116 +116 +120 +120 +125 +125 +125 +129 +129 +133 +134 +134 +139 +139 +143 +143 +148 +147 +147 +151 +151 +157 +157 +157 +161 +161 +166 +165 +165 +169 +169 +173 +173 +173 +173 +173 +175 +175 +175 +178 +179 +183 +182 +184 +185 +184 +189 +189 +191 +190 +190 +194 +194 +195 +194 +194 +197 +197 +199 +198 +198 +201 +201 +200 +201 +201 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +207 +207 +206 +204 +204 +204 +205 +204 +202 +202 +200 +200 +201 +201 +200 +199 +198 +198 +196 +196 +194 +193 +195 +190 +190 +188 +188 +189 +184 +185 +182 +182 +179 +179 +179 +175 +175 +172 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +140 +139 +137 +133 +133 +129 +129 +125 +125 +125 +120 +119 +115 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +69 +68 +65 +65 +64 +58 +59 +55 +55 +54 +50 +50 +47 +47 +47 +43 +43 +41 +41 +38 +37 +37 +33 +33 +31 +31 +31 +27 +27 +27 +27 +27 +25 +25 +20 +21 +21 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +13 +13 +14 +13 +14 +13 +14 +14 +13 +14 +13 +14 +13 +13 +14 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +46 +50 +51 +51 +55 +54 +58 +58 +58 +64 +64 +68 +68 +73 +72 +73 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +110 +110 +115 +116 +120 +120 +126 +125 +125 +130 +129 +133 +134 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +172 +174 +173 +175 +175 +179 +178 +179 +183 +183 +183 +183 +183 +185 +185 +189 +188 +189 +191 +191 +194 +195 +195 +196 +197 +199 +198 +200 +201 +200 +200 +200 +202 +202 +202 +204 +204 +204 +204 +204 +204 +204 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +203 +203 +201 +200 +201 +201 +200 +199 +198 +199 +196 +197 +194 +195 +191 +190 +191 +189 +189 +185 +185 +185 +182 +183 +178 +179 +179 +175 +175 +173 +173 +173 +168 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +140 +133 +133 +133 +129 +129 +125 +125 +125 +119 +119 +115 +115 +116 +110 +110 +106 +105 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +69 +64 +64 +58 +58 +55 +55 +54 +50 +50 +46 +47 +47 +43 +43 +43 +42 +42 +41 +40 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +22 +21 +22 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +14 +14 +14 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +14 +14 +13 +14 +13 +14 +14 +13 +13 +13 +13 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +46 +51 +51 +55 +54 +55 +58 +58 +64 +64 +64 +68 +68 +72 +72 +73 +76 +76 +82 +82 +82 +86 +86 +89 +90 +90 +96 +96 +100 +99 +106 +106 +105 +110 +110 +115 +115 +116 +119 +120 +120 +120 +119 +126 +125 +129 +129 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +182 +182 +185 +185 +188 +189 +188 +191 +190 +194 +195 +195 +196 +196 +196 +196 +196 +198 +198 +200 +200 +201 +200 +201 +202 +202 +204 +204 +204 +205 +204 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +204 +204 +205 +204 +204 +202 +202 +200 +201 +200 +200 +200 +198 +198 +199 +197 +197 +194 +194 +194 +190 +191 +188 +189 +189 +184 +185 +183 +182 +183 +179 +178 +175 +175 +173 +173 +173 +169 +169 +169 +169 +168 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +144 +140 +139 +133 +133 +130 +129 +129 +125 +125 +119 +120 +119 +116 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +83 +82 +76 +76 +76 +73 +72 +68 +68 +68 +64 +64 +65 +65 +64 +58 +58 +55 +55 +55 +51 +50 +46 +47 +47 +43 +42 +41 +41 +37 +37 +36 +33 +33 +31 +31 +31 +27 +27 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +13 +14 +13 +14 +13 +13 +13 +14 +13 +13 +14 +14 +14 +13 +14 +13 +13 +14 +13 +13 +13 +14 +14 +14 +14 +14 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +51 +50 +55 +55 +59 +59 +59 +65 +64 +69 +68 +73 +73 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +105 +106 +110 +109 +111 +115 +116 +119 +120 +125 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +160 +162 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +179 +182 +183 +183 +183 +183 +185 +185 +188 +188 +188 +190 +191 +194 +194 +195 +196 +196 +199 +198 +200 +200 +201 +200 +200 +202 +202 +202 +204 +204 +204 +204 +204 +207 +207 +207 +207 +206 +207 +207 +206 +206 +206 +206 +206 +207 +206 +204 +204 +204 +204 +205 +203 +202 +202 +200 +201 +201 +200 +200 +198 +198 +197 +196 +197 +194 +195 +190 +190 +189 +188 +189 +184 +185 +183 +183 +183 +179 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +134 +134 +130 +130 +129 +126 +125 +120 +119 +120 +115 +116 +110 +109 +110 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +69 +68 +69 +64 +64 +59 +58 +56 +54 +54 +51 +50 +47 +46 +46 +43 +43 +40 +41 +41 +37 +37 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +23 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +12 +14 +13 +13 +13 +14 +14 +13 +13 +13 +13 +14 +14 +13 +13 +14 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +42 +43 +43 +47 +47 +50 +50 +51 +54 +55 +59 +59 +64 +64 +64 +69 +68 +72 +73 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +99 +100 +106 +106 +110 +109 +116 +116 +116 +119 +119 +125 +126 +126 +130 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +153 +157 +157 +161 +160 +164 +165 +165 +169 +168 +173 +173 +173 +175 +175 +175 +174 +175 +178 +178 +183 +182 +183 +185 +185 +189 +188 +189 +191 +191 +195 +194 +196 +196 +196 +199 +198 +200 +200 +200 +200 +200 +202 +202 +202 +204 +204 +204 +204 +205 +207 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +202 +200 +200 +200 +200 +200 +198 +198 +196 +196 +194 +194 +194 +190 +190 +188 +188 +189 +185 +184 +182 +182 +182 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +158 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +130 +125 +126 +119 +119 +120 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +71 +68 +68 +64 +64 +59 +58 +59 +54 +55 +51 +50 +51 +47 +47 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +32 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +14 +13 +13 +14 +13 +14 +14 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +46 +51 +50 +50 +56 +55 +58 +58 +58 +65 +65 +68 +68 +69 +72 +72 +76 +76 +76 +82 +82 +86 +86 +87 +90 +90 +96 +96 +101 +100 +100 +106 +106 +110 +110 +110 +116 +115 +115 +116 +116 +119 +120 +125 +125 +125 +130 +129 +133 +133 +133 +139 +139 +143 +143 +148 +147 +147 +151 +151 +157 +157 +157 +161 +161 +161 +161 +161 +165 +165 +168 +169 +169 +173 +173 +174 +175 +176 +178 +179 +183 +182 +184 +185 +184 +189 +189 +191 +190 +191 +194 +194 +196 +197 +196 +198 +199 +200 +200 +201 +200 +201 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +207 +206 +206 +207 +204 +204 +204 +204 +204 +202 +202 +201 +200 +200 +200 +200 +199 +198 +198 +196 +196 +194 +194 +194 +190 +190 +188 +188 +188 +185 +185 +183 +182 +183 +179 +179 +175 +174 +173 +172 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +140 +139 +141 +133 +133 +129 +129 +126 +125 +125 +120 +120 +115 +115 +115 +110 +109 +110 +109 +110 +105 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +65 +64 +64 +64 +64 +58 +58 +54 +54 +55 +51 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +12 +13 +13 +14 +13 +13 +13 +14 +14 +14 +14 +13 +13 +13 +14 +14 +13 +13 +13 +13 +13 +14 +14 +13 +14 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +46 +51 +51 +51 +55 +55 +59 +58 +58 +64 +64 +68 +68 +67 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +109 +110 +116 +115 +119 +119 +120 +126 +125 +129 +130 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +166 +169 +169 +173 +173 +175 +175 +175 +179 +178 +182 +183 +183 +185 +184 +188 +189 +189 +190 +190 +195 +194 +195 +197 +196 +199 +198 +199 +200 +200 +200 +200 +202 +203 +202 +204 +204 +204 +205 +204 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +205 +202 +202 +202 +200 +200 +200 +200 +200 +198 +199 +196 +196 +196 +195 +194 +190 +190 +191 +189 +189 +184 +184 +183 +182 +183 +179 +179 +175 +175 +175 +172 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +120 +120 +115 +115 +110 +110 +110 +106 +106 +100 +100 +100 +95 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +72 +72 +72 +69 +68 +64 +64 +64 +59 +58 +54 +54 +51 +50 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +16 +13 +13 +12 +13 +14 +13 +14 +13 +13 +14 +14 +13 +14 +13 +14 +13 +14 +14 +13 +14 +13 +14 +13 +13 +14 +13 +14 +14 +13 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +40 +41 +43 +43 +43 +47 +47 +51 +50 +50 +54 +54 +58 +58 +59 +65 +64 +68 +68 +73 +72 +72 +76 +76 +82 +82 +82 +86 +87 +86 +86 +86 +90 +89 +96 +96 +96 +100 +100 +106 +106 +107 +109 +109 +116 +116 +120 +119 +119 +125 +126 +129 +129 +129 +133 +133 +134 +134 +134 +139 +140 +144 +143 +143 +147 +147 +151 +151 +153 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +179 +182 +183 +185 +185 +185 +188 +189 +190 +191 +194 +195 +195 +197 +197 +198 +199 +198 +200 +200 +200 +200 +200 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +200 +200 +200 +200 +201 +199 +198 +199 +196 +197 +195 +194 +191 +191 +190 +188 +189 +185 +184 +184 +183 +182 +179 +178 +179 +174 +175 +172 +173 +173 +168 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +139 +139 +139 +134 +133 +129 +129 +129 +125 +125 +119 +119 +118 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +71 +69 +68 +65 +65 +59 +58 +59 +54 +55 +51 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +14 +13 +14 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +13 +16 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +42 +43 +47 +47 +50 +50 +55 +55 +54 +58 +59 +64 +64 +64 +68 +68 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +87 +90 +89 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +115 +116 +115 +115 +120 +119 +125 +125 +126 +129 +130 +134 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +182 +182 +182 +184 +184 +188 +189 +189 +190 +191 +194 +195 +195 +196 +196 +198 +199 +199 +200 +201 +200 +200 +201 +203 +203 +204 +205 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +207 +207 +206 +206 +204 +204 +204 +204 +205 +202 +202 +200 +200 +200 +200 +201 +198 +199 +196 +196 +197 +194 +194 +191 +190 +190 +188 +188 +184 +185 +184 +182 +182 +179 +179 +178 +175 +175 +173 +173 +170 +169 +169 +165 +165 +161 +161 +161 +157 +157 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +141 +133 +133 +130 +129 +125 +125 +125 +119 +120 +116 +115 +116 +109 +110 +110 +110 +109 +106 +106 +100 +100 +100 +96 +96 +90 +90 +89 +86 +86 +82 +82 +76 +76 +76 +72 +72 +69 +68 +68 +64 +64 +58 +58 +59 +55 +54 +51 +50 +51 +47 +46 +43 +42 +41 +41 +40 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +13 +14 +13 +13 +14 +14 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +14 +13 +13 +14 +14 +14 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +41 +41 +41 +43 +42 +47 +46 +46 +51 +50 +50 +51 +51 +55 +55 +58 +58 +59 +64 +64 +68 +68 +70 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +117 +119 +120 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +168 +169 +169 +173 +173 +175 +175 +175 +179 +179 +182 +183 +182 +184 +185 +189 +189 +189 +190 +190 +195 +194 +194 +196 +197 +198 +198 +201 +200 +199 +200 +200 +203 +202 +203 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +205 +204 +204 +204 +204 +202 +202 +202 +200 +200 +200 +200 +200 +198 +198 +197 +196 +197 +194 +195 +190 +191 +191 +189 +188 +184 +185 +183 +182 +183 +179 +179 +179 +179 +179 +175 +175 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +152 +147 +147 +147 +143 +142 +139 +139 +139 +133 +134 +134 +133 +133 +129 +129 +125 +125 +126 +119 +119 +116 +116 +110 +109 +109 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +59 +58 +58 +54 +54 +51 +50 +51 +47 +47 +43 +43 +42 +41 +41 +37 +37 +37 +33 +33 +31 +31 +32 +27 +27 +25 +25 +22 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +14 +13 +14 +14 +13 +14 +14 +14 +13 +13 +14 +13 +14 +14 +14 +14 +13 +13 +13 +14 +13 +14 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +32 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +48 +51 +50 +55 +54 +58 +58 +58 +64 +64 +68 +68 +68 +72 +72 +72 +72 +72 +76 +76 +82 +82 +83 +86 +86 +90 +90 +92 +96 +96 +100 +100 +106 +105 +106 +110 +109 +116 +115 +116 +120 +120 +125 +126 +125 +129 +129 +133 +133 +134 +139 +140 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +179 +183 +183 +184 +184 +189 +189 +188 +190 +190 +194 +194 +194 +196 +196 +198 +199 +199 +200 +200 +201 +200 +201 +202 +202 +204 +204 +205 +204 +205 +207 +206 +207 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +200 +200 +201 +200 +200 +198 +198 +197 +196 +196 +195 +194 +191 +190 +191 +189 +188 +189 +189 +188 +185 +184 +182 +183 +183 +179 +179 +175 +175 +173 +173 +173 +169 +168 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +130 +129 +129 +125 +125 +119 +120 +119 +115 +116 +110 +110 +110 +106 +100 +100 +100 +100 +96 +96 +90 +90 +91 +86 +85 +82 +83 +77 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +58 +59 +55 +54 +50 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +13 +13 +14 +14 +13 +13 +14 +13 +13 +14 +13 +14 +13 +13 +13 +13 +14 +13 +13 +14 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +36 +37 +38 +41 +41 +43 +43 +47 +46 +47 +50 +50 +55 +54 +54 +58 +58 +58 +58 +58 +65 +64 +68 +68 +68 +72 +72 +76 +76 +81 +82 +82 +86 +86 +90 +90 +90 +96 +96 +96 +96 +96 +100 +100 +106 +106 +106 +110 +109 +116 +116 +116 +119 +120 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +175 +175 +175 +179 +179 +182 +183 +182 +184 +185 +188 +189 +188 +191 +190 +195 +194 +194 +196 +197 +198 +198 +199 +200 +200 +200 +200 +203 +203 +202 +204 +204 +204 +204 +205 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +207 +204 +204 +204 +204 +203 +202 +202 +200 +200 +200 +200 +200 +198 +198 +199 +199 +198 +196 +196 +194 +194 +195 +190 +190 +188 +189 +187 +184 +185 +182 +183 +179 +179 +179 +175 +175 +173 +173 +172 +169 +169 +169 +168 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +134 +133 +129 +129 +129 +125 +125 +119 +119 +119 +116 +116 +110 +110 +110 +105 +106 +100 +100 +96 +95 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +69 +68 +64 +64 +58 +58 +59 +54 +54 +50 +50 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +22 +22 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +14 +14 +13 +14 +13 +14 +14 +13 +13 +14 +13 +14 +13 +14 +13 +13 +14 +13 +14 +14 +14 +14 +13 +13 +13 +13 +15 +15 +15 +15 +15 +17 +17 +17 +19 +19 +21 +20 +24 +25 +25 +27 +27 +32 +31 +31 +33 +33 +37 +37 +37 +41 +41 +41 +41 +41 +43 +43 +47 +47 +47 +50 +50 +55 +54 +57 +58 +58 +64 +64 +68 +68 +68 +72 +73 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +107 +110 +110 +116 +116 +119 +120 +120 +125 +125 +130 +130 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +148 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +182 +183 +185 +186 +188 +188 +189 +191 +191 +195 +194 +197 +197 +197 +198 +198 +200 +200 +200 +200 +200 +203 +202 +203 +204 +204 +205 +204 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +207 +206 +207 +206 +206 +204 +204 +205 +204 +204 +204 +204 +204 +202 +202 +200 +200 +200 +200 +200 +198 +198 +197 +196 +197 +195 +194 +190 +190 +191 +188 +188 +185 +184 +184 +182 +183 +183 +182 +182 +178 +179 +175 +175 +175 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +130 +129 +125 +125 +119 +119 +115 +116 +116 +109 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +72 +72 +68 +68 +64 +64 +64 +58 +58 +55 +54 +54 +51 +51 +47 +46 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +13 +14 +13 +13 +13 +13 +13 +14 +14 +13 +14 +14 +14 +13 +14 +14 +13 +14 +14 +13 +13 +13 +13 +13 +14 +13 +15 +15 +16 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +31 +31 +31 +33 +33 +37 +37 +37 +41 +40 +43 +43 +46 +47 +47 +51 +51 +55 +55 +55 +58 +59 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +83 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +109 +110 +115 +115 +115 +119 +120 +125 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +172 +173 +175 +175 +178 +179 +178 +182 +183 +185 +184 +188 +188 +189 +191 +190 +194 +195 +195 +197 +197 +198 +198 +199 +200 +200 +200 +200 +201 +203 +203 +204 +204 +204 +204 +205 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +205 +204 +205 +204 +204 +202 +202 +203 +200 +201 +200 +200 +198 +198 +199 +196 +197 +194 +195 +194 +191 +190 +190 +190 +190 +189 +188 +185 +185 +185 +183 +183 +178 +179 +175 +175 +175 +173 +172 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +130 +129 +129 +126 +125 +120 +119 +119 +115 +116 +110 +109 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +68 +68 +64 +64 +59 +58 +59 +54 +54 +50 +51 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +18 +15 +15 +15 +15 +16 +13 +13 +12 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +14 +13 +13 +13 +13 +14 +14 +14 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +46 +46 +51 +50 +51 +54 +54 +58 +58 +59 +64 +64 +68 +68 +69 +72 +72 +76 +76 +81 +82 +82 +86 +86 +90 +90 +90 +96 +96 +101 +100 +100 +106 +106 +110 +110 +109 +115 +116 +119 +120 +120 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +160 +161 +165 +165 +169 +169 +169 +173 +173 +175 +174 +179 +178 +179 +183 +183 +185 +184 +185 +188 +188 +191 +190 +191 +194 +194 +197 +196 +196 +198 +199 +200 +200 +201 +200 +200 +202 +202 +205 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +207 +204 +205 +205 +204 +202 +202 +202 +200 +200 +200 +200 +200 +199 +199 +198 +199 +198 +197 +197 +195 +194 +194 +190 +191 +188 +189 +189 +184 +184 +183 +183 +179 +178 +179 +174 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +145 +143 +143 +139 +139 +133 +133 +134 +129 +129 +125 +125 +126 +119 +119 +115 +115 +116 +110 +110 +106 +105 +106 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +77 +76 +72 +72 +72 +68 +68 +65 +64 +64 +58 +58 +55 +55 +55 +50 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +30 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +20 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +14 +14 +13 +13 +14 +14 +13 +13 +12 +15 +15 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +24 +27 +27 +27 +31 +31 +33 +33 +33 +36 +37 +41 +41 +41 +43 +43 +46 +47 +47 +51 +50 +54 +54 +55 +59 +58 +64 +65 +68 +68 +68 +72 +72 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +120 +119 +120 +126 +126 +129 +129 +129 +133 +134 +140 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +174 +175 +178 +178 +182 +183 +183 +185 +185 +188 +189 +188 +190 +190 +195 +195 +196 +197 +198 +198 +200 +200 +200 +201 +200 +202 +202 +202 +204 +204 +204 +204 +204 +207 +206 +207 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +207 +204 +204 +204 +204 +204 +202 +203 +202 +200 +200 +200 +200 +200 +200 +200 +198 +198 +199 +196 +197 +194 +194 +193 +190 +191 +189 +188 +184 +184 +185 +182 +182 +179 +179 +179 +175 +175 +173 +173 +173 +169 +168 +165 +165 +165 +161 +161 +157 +157 +152 +151 +151 +147 +147 +144 +143 +143 +139 +139 +134 +133 +133 +129 +129 +125 +125 +126 +120 +119 +116 +116 +116 +110 +110 +105 +106 +101 +99 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +83 +76 +76 +72 +72 +72 +68 +68 +64 +64 +65 +58 +59 +55 +54 +51 +50 +51 +46 +48 +42 +43 +43 +41 +41 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +28 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +13 +14 +14 +13 +13 +13 +14 +13 +14 +14 +13 +14 +13 +14 +13 +14 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +12 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +46 +47 +50 +51 +51 +54 +54 +58 +58 +59 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +101 +100 +100 +106 +106 +110 +110 +110 +115 +116 +119 +120 +119 +125 +125 +130 +129 +130 +133 +133 +139 +139 +139 +143 +143 +147 +147 +152 +151 +151 +157 +157 +162 +161 +161 +164 +165 +169 +169 +169 +173 +173 +175 +175 +175 +178 +179 +183 +182 +183 +185 +185 +188 +189 +191 +190 +191 +194 +194 +197 +196 +197 +198 +198 +198 +198 +198 +200 +201 +200 +200 +201 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +204 +204 +205 +205 +204 +202 +202 +201 +200 +201 +200 +201 +198 +198 +198 +196 +197 +194 +195 +195 +190 +190 +189 +189 +188 +184 +185 +183 +183 +183 +178 +179 +174 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +148 +143 +143 +139 +140 +139 +133 +133 +129 +129 +126 +125 +125 +119 +119 +116 +116 +115 +109 +109 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +72 +72 +72 +69 +68 +65 +64 +64 +59 +58 +54 +55 +55 +50 +51 +47 +46 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +32 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +14 +13 +13 +14 +13 +14 +14 +13 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +51 +55 +54 +54 +58 +58 +64 +64 +65 +68 +68 +72 +72 +72 +76 +76 +82 +82 +87 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +109 +110 +116 +116 +115 +119 +119 +125 +125 +125 +129 +129 +133 +133 +140 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +172 +172 +174 +175 +175 +179 +179 +182 +183 +182 +184 +185 +189 +188 +189 +190 +190 +191 +191 +190 +195 +194 +197 +196 +196 +199 +198 +200 +201 +200 +200 +200 +202 +202 +204 +204 +204 +205 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +205 +204 +205 +204 +205 +203 +202 +202 +200 +201 +200 +200 +200 +199 +198 +197 +196 +196 +194 +195 +191 +190 +191 +188 +189 +185 +185 +183 +182 +182 +179 +179 +175 +174 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +140 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +119 +119 +115 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +59 +59 +55 +54 +51 +50 +51 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +13 +13 +14 +14 +13 +14 +13 +13 +14 +14 +13 +13 +14 +13 +14 +13 +13 +14 +13 +14 +14 +13 +13 +14 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +28 +31 +31 +33 +33 +37 +37 +36 +41 +41 +43 +43 +43 +47 +47 +50 +50 +51 +54 +54 +59 +59 +59 +65 +64 +68 +68 +72 +72 +71 +76 +76 +82 +82 +83 +86 +86 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +116 +120 +119 +119 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +158 +161 +161 +165 +165 +168 +169 +169 +173 +173 +175 +174 +175 +179 +178 +183 +183 +182 +184 +185 +188 +188 +188 +191 +190 +195 +194 +195 +196 +197 +198 +199 +200 +200 +200 +200 +201 +202 +202 +202 +204 +204 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +207 +206 +204 +204 +205 +204 +204 +202 +203 +201 +200 +200 +200 +200 +198 +198 +199 +196 +197 +194 +195 +190 +190 +191 +189 +189 +185 +185 +185 +182 +183 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +152 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +125 +119 +120 +116 +115 +117 +110 +110 +106 +106 +101 +100 +100 +96 +96 +91 +90 +90 +86 +86 +81 +82 +82 +76 +76 +73 +72 +72 +68 +68 +64 +64 +65 +58 +58 +55 +54 +50 +50 +51 +47 +47 +43 +43 +43 +41 +41 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +14 +14 +14 +13 +13 +14 +14 +14 +14 +14 +13 +14 +14 +13 +14 +14 +13 +13 +14 +13 +13 +13 +14 +13 +13 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +40 +43 +43 +43 +47 +46 +51 +51 +55 +54 +54 +58 +58 +65 +64 +65 +69 +69 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +99 +106 +106 +106 +110 +110 +116 +116 +116 +119 +120 +125 +125 +125 +129 +129 +133 +134 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +158 +157 +157 +161 +161 +165 +165 +165 +169 +169 +169 +169 +169 +173 +173 +175 +175 +175 +175 +175 +179 +178 +180 +183 +183 +185 +184 +188 +188 +189 +191 +191 +194 +194 +194 +197 +196 +196 +196 +197 +198 +198 +200 +200 +200 +200 +201 +202 +202 +204 +205 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +207 +206 +204 +204 +205 +205 +204 +202 +202 +200 +200 +200 +200 +200 +198 +198 +198 +196 +197 +194 +194 +194 +190 +191 +188 +188 +188 +185 +185 +183 +183 +183 +179 +178 +175 +175 +173 +173 +174 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +140 +133 +133 +130 +129 +126 +126 +125 +119 +119 +116 +116 +115 +110 +109 +106 +106 +106 +100 +100 +96 +95 +96 +90 +90 +86 +86 +87 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +65 +64 +59 +59 +55 +55 +54 +51 +50 +46 +47 +47 +43 +43 +41 +41 +39 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +13 +13 +13 +14 +14 +13 +14 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +14 +14 +13 +15 +15 +15 +17 +17 +19 +19 +18 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +32 +37 +36 +41 +41 +41 +43 +43 +47 +47 +47 +51 +51 +55 +55 +54 +58 +58 +64 +65 +64 +68 +68 +72 +72 +73 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +105 +109 +110 +115 +115 +115 +119 +120 +125 +125 +125 +129 +129 +133 +133 +140 +139 +139 +143 +143 +147 +147 +147 +151 +151 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +172 +175 +175 +178 +178 +179 +183 +182 +184 +185 +184 +189 +188 +189 +189 +188 +190 +190 +195 +194 +195 +196 +197 +198 +198 +200 +200 +200 +200 +201 +202 +202 +202 +204 +204 +204 +205 +204 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +206 +206 +207 +204 +204 +205 +204 +204 +202 +202 +202 +201 +200 +200 +200 +200 +198 +198 +196 +197 +196 +194 +194 +190 +191 +191 +188 +189 +185 +184 +182 +182 +182 +179 +178 +175 +175 +174 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +152 +147 +147 +143 +143 +140 +139 +140 +133 +133 +130 +129 +129 +125 +125 +119 +119 +120 +115 +116 +110 +110 +110 +106 +106 +100 +100 +101 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +65 +64 +59 +58 +58 +55 +54 +51 +51 +49 +47 +47 +43 +43 +41 +41 +41 +37 +36 +33 +33 +33 +31 +31 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +20 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +13 +13 +14 +13 +14 +13 +14 +13 +14 +13 +14 +14 +13 +14 +13 +13 +14 +13 +14 +13 +13 +13 +14 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +36 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +50 +54 +54 +58 +59 +59 +64 +64 +68 +68 +73 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +100 +100 +106 +106 +107 +110 +110 +115 +116 +120 +119 +119 +125 +125 +129 +129 +129 +134 +133 +133 +133 +134 +139 +139 +143 +143 +143 +147 +147 +151 +151 +152 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +175 +175 +174 +179 +178 +182 +183 +182 +185 +185 +188 +189 +189 +191 +191 +194 +195 +196 +196 +196 +198 +199 +200 +200 +200 +200 +201 +202 +202 +203 +204 +205 +204 +204 +205 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +205 +204 +205 +205 +202 +202 +202 +200 +200 +200 +200 +201 +198 +199 +196 +196 +195 +194 +195 +191 +191 +188 +189 +189 +184 +185 +183 +183 +182 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +140 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +120 +120 +116 +116 +109 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +90 +90 +90 +86 +86 +82 +82 +82 +77 +76 +72 +72 +70 +68 +68 +64 +64 +59 +58 +58 +54 +54 +51 +50 +51 +47 +47 +47 +47 +47 +43 +43 +41 +41 +41 +37 +36 +33 +33 +32 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +14 +14 +13 +14 +13 +13 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +12 +15 +15 +16 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +46 +51 +51 +50 +55 +54 +58 +59 +59 +64 +65 +68 +69 +69 +72 +72 +76 +76 +76 +82 +82 +86 +86 +87 +90 +90 +96 +96 +99 +100 +100 +106 +106 +110 +110 +110 +116 +115 +115 +115 +116 +120 +120 +126 +125 +125 +129 +129 +133 +133 +135 +139 +139 +143 +143 +147 +147 +147 +151 +151 +158 +157 +157 +161 +161 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +174 +174 +176 +178 +179 +183 +183 +184 +185 +185 +188 +188 +190 +190 +190 +194 +194 +197 +197 +196 +199 +199 +200 +201 +201 +200 +200 +202 +202 +204 +204 +205 +204 +205 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +207 +207 +207 +206 +207 +205 +204 +205 +205 +204 +202 +202 +201 +201 +200 +201 +200 +198 +199 +198 +197 +196 +194 +194 +194 +190 +191 +189 +188 +188 +185 +185 +183 +182 +183 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +141 +133 +133 +130 +129 +126 +125 +126 +119 +119 +115 +115 +115 +109 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +87 +86 +82 +82 +76 +76 +72 +72 +73 +68 +68 +65 +64 +64 +58 +59 +55 +55 +55 +51 +51 +47 +47 +47 +43 +43 +41 +41 +39 +37 +36 +32 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +13 +13 +13 +14 +13 +14 +14 +14 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +40 +43 +43 +43 +47 +47 +51 +50 +50 +55 +55 +58 +59 +59 +64 +64 +68 +68 +68 +72 +73 +76 +76 +77 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +106 +106 +106 +110 +110 +116 +115 +116 +119 +119 +125 +125 +126 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +151 +151 +151 +157 +157 +161 +160 +161 +165 +165 +169 +169 +172 +173 +173 +175 +174 +178 +179 +179 +183 +182 +185 +185 +184 +189 +188 +191 +190 +191 +195 +194 +197 +196 +197 +199 +199 +200 +200 +200 +200 +200 +202 +202 +204 +204 +205 +205 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +205 +205 +204 +205 +204 +202 +202 +202 +202 +202 +200 +200 +201 +201 +201 +198 +198 +196 +196 +196 +194 +195 +191 +190 +190 +188 +188 +184 +184 +183 +183 +183 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +160 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +128 +125 +126 +126 +125 +125 +120 +119 +115 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +89 +90 +90 +86 +86 +82 +82 +82 +76 +76 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +58 +56 +55 +54 +51 +51 +46 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +14 +14 +14 +14 +14 +14 +14 +14 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +36 +37 +41 +41 +41 +43 +43 +46 +47 +46 +51 +50 +55 +55 +55 +58 +59 +64 +64 +68 +69 +68 +72 +72 +76 +77 +76 +82 +82 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +102 +106 +106 +110 +109 +116 +115 +116 +119 +119 +126 +125 +125 +129 +129 +130 +129 +129 +133 +133 +140 +140 +139 +143 +143 +147 +147 +150 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +182 +183 +185 +185 +189 +188 +190 +190 +190 +194 +195 +197 +197 +197 +198 +199 +200 +200 +200 +200 +200 +202 +203 +202 +205 +204 +204 +204 +205 +206 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +204 +204 +204 +204 +205 +202 +202 +202 +200 +200 +200 +200 +201 +199 +198 +196 +197 +195 +194 +195 +190 +190 +188 +189 +188 +184 +184 +182 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +160 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +123 +120 +120 +116 +115 +110 +110 +109 +106 +106 +100 +100 +100 +96 +96 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +77 +76 +73 +72 +72 +68 +68 +64 +64 +64 +58 +58 +55 +55 +54 +50 +50 +46 +47 +47 +43 +43 +41 +40 +41 +37 +37 +33 +34 +32 +30 +31 +27 +27 +25 +25 +25 +21 +20 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +14 +13 +13 +14 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +14 +13 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +36 +41 +41 +41 +43 +43 +46 +46 +50 +51 +50 +54 +55 +59 +58 +58 +65 +65 +68 +68 +68 +72 +72 +77 +76 +76 +82 +82 +86 +86 +87 +90 +90 +96 +96 +99 +100 +100 +106 +106 +110 +110 +110 +115 +116 +116 +115 +116 +120 +120 +125 +125 +125 +129 +129 +133 +133 +135 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +182 +182 +182 +185 +185 +188 +188 +188 +191 +190 +195 +194 +195 +196 +196 +199 +199 +198 +200 +200 +200 +201 +201 +202 +203 +204 +205 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +203 +200 +200 +201 +201 +200 +198 +199 +196 +196 +196 +194 +194 +190 +190 +191 +189 +189 +185 +185 +185 +183 +183 +178 +179 +179 +175 +175 +173 +173 +169 +169 +169 +165 +164 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +134 +133 +131 +129 +129 +125 +125 +119 +120 +119 +116 +115 +110 +110 +110 +105 +106 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +84 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +65 +59 +58 +54 +54 +54 +51 +51 +47 +47 +47 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +14 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +19 +19 +18 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +36 +37 +42 +40 +41 +42 +43 +46 +47 +47 +51 +50 +50 +50 +50 +55 +54 +58 +58 +59 +65 +64 +69 +69 +68 +72 +72 +76 +76 +83 +82 +82 +86 +86 +90 +90 +90 +96 +96 +96 +96 +96 +100 +99 +106 +105 +106 +110 +110 +116 +116 +118 +120 +120 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +178 +179 +183 +182 +182 +185 +185 +188 +189 +189 +190 +191 +195 +194 +194 +196 +196 +198 +198 +200 +201 +200 +200 +200 +202 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +205 +204 +205 +204 +204 +202 +202 +202 +200 +200 +200 +200 +200 +199 +199 +197 +196 +197 +194 +195 +191 +191 +191 +189 +189 +185 +185 +182 +183 +182 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +149 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +130 +129 +125 +126 +125 +125 +125 +120 +119 +115 +116 +116 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +69 +64 +64 +64 +59 +58 +54 +54 +50 +50 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +13 +13 +14 +14 +13 +13 +14 +13 +13 +13 +13 +14 +13 +14 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +13 +12 +15 +14 +17 +17 +16 +19 +19 +21 +21 +22 +25 +24 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +41 +41 +41 +43 +43 +47 +47 +47 +51 +51 +55 +54 +57 +59 +59 +64 +65 +69 +68 +68 +72 +72 +76 +76 +76 +82 +82 +82 +82 +82 +86 +86 +89 +90 +90 +96 +96 +100 +100 +105 +106 +106 +110 +110 +116 +115 +116 +120 +119 +125 +125 +125 +129 +129 +133 +134 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +156 +157 +157 +161 +161 +165 +165 +165 +169 +169 +169 +168 +169 +173 +173 +175 +175 +175 +179 +179 +183 +182 +183 +185 +185 +188 +189 +191 +190 +190 +194 +194 +196 +196 +197 +198 +198 +201 +200 +200 +200 +200 +202 +202 +202 +204 +205 +204 +204 +205 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +204 +204 +204 +204 +204 +203 +202 +200 +200 +201 +200 +201 +198 +199 +196 +196 +196 +194 +194 +190 +190 +191 +189 +189 +188 +188 +189 +185 +185 +182 +183 +183 +179 +179 +175 +175 +174 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +151 +151 +151 +147 +147 +143 +143 +143 +140 +139 +133 +133 +130 +129 +129 +125 +125 +119 +120 +120 +116 +116 +109 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +65 +64 +58 +58 +58 +54 +54 +51 +50 +50 +46 +46 +43 +43 +43 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +14 +14 +14 +14 +14 +14 +13 +14 +14 +13 +14 +14 +14 +13 +14 +13 +14 +14 +13 +13 +14 +13 +15 +15 +15 +17 +17 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +28 +31 +31 +33 +33 +36 +37 +37 +41 +41 +43 +43 +43 +47 +47 +47 +47 +46 +50 +51 +55 +55 +54 +58 +58 +64 +64 +66 +69 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +105 +106 +106 +110 +110 +116 +116 +119 +120 +119 +125 +125 +129 +129 +129 +133 +133 +140 +139 +140 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +174 +178 +178 +183 +182 +182 +184 +185 +188 +188 +189 +191 +191 +194 +194 +194 +196 +197 +199 +199 +200 +201 +201 +200 +200 +202 +202 +202 +204 +204 +205 +204 +205 +206 +206 +207 +206 +206 +207 +206 +206 +207 +207 +206 +206 +206 +206 +205 +205 +205 +204 +204 +202 +202 +202 +200 +200 +200 +200 +201 +200 +200 +198 +198 +198 +197 +197 +194 +194 +193 +191 +190 +188 +188 +184 +184 +185 +183 +182 +183 +183 +182 +179 +179 +179 +179 +178 +175 +175 +173 +173 +173 +168 +169 +165 +165 +162 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +130 +125 +126 +126 +119 +120 +116 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +67 +68 +64 +64 +59 +58 +58 +54 +54 +51 +51 +51 +46 +47 +43 +42 +42 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +22 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +14 +13 +15 +14 +14 +13 +14 +14 +13 +13 +13 +14 +13 +14 +13 +14 +14 +14 +13 +14 +13 +14 +14 +14 +14 +14 +13 +15 +15 +16 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +31 +31 +31 +33 +33 +37 +36 +37 +41 +40 +43 +43 +44 +47 +46 +50 +51 +54 +54 +54 +58 +59 +65 +65 +64 +68 +69 +72 +72 +72 +76 +76 +82 +82 +83 +86 +86 +89 +90 +95 +95 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +115 +119 +119 +125 +125 +125 +129 +129 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +172 +173 +175 +175 +179 +179 +179 +183 +183 +185 +184 +189 +188 +189 +191 +191 +194 +195 +194 +196 +196 +198 +199 +198 +200 +201 +201 +201 +201 +203 +202 +204 +205 +204 +205 +204 +206 +207 +206 +207 +206 +206 +207 +207 +206 +206 +206 +206 +207 +206 +206 +204 +205 +205 +204 +205 +202 +202 +200 +200 +201 +200 +201 +198 +199 +196 +196 +196 +194 +195 +191 +190 +191 +189 +188 +188 +188 +189 +184 +184 +183 +183 +183 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +126 +125 +125 +120 +120 +116 +115 +116 +109 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +72 +72 +72 +68 +69 +65 +64 +64 +59 +59 +54 +55 +55 +50 +50 +47 +47 +47 +43 +42 +41 +41 +40 +37 +37 +33 +33 +32 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +14 +13 +13 +13 +13 +13 +14 +14 +13 +14 +14 +13 +14 +14 +13 +14 +14 +14 +14 +13 +13 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +38 +37 +37 +41 +41 +43 +42 +43 +47 +46 +51 +51 +51 +55 +55 +58 +58 +58 +65 +64 +68 +68 +69 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +115 +120 +120 +119 +125 +125 +129 +130 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +168 +169 +169 +173 +173 +175 +175 +179 +178 +179 +182 +183 +184 +184 +185 +188 +189 +191 +191 +190 +194 +194 +196 +197 +197 +198 +198 +201 +201 +201 +200 +200 +203 +202 +204 +204 +204 +205 +205 +206 +207 +207 +206 +207 +206 +206 +206 +207 +207 +207 +206 +207 +206 +206 +205 +204 +205 +204 +204 +202 +203 +200 +201 +200 +201 +200 +198 +198 +198 +197 +196 +196 +196 +196 +194 +195 +190 +191 +191 +188 +189 +185 +184 +183 +183 +183 +178 +179 +175 +174 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +152 +151 +151 +148 +147 +143 +143 +140 +139 +139 +133 +133 +129 +129 +130 +126 +125 +120 +119 +120 +115 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +58 +59 +54 +54 +51 +50 +51 +47 +46 +43 +42 +41 +41 +41 +37 +37 +33 +33 +33 +30 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +13 +14 +13 +14 +14 +14 +14 +14 +13 +13 +13 +13 +14 +14 +14 +14 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +12 +15 +15 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +26 +27 +27 +31 +30 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +50 +50 +55 +54 +55 +58 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +105 +106 +106 +110 +110 +115 +116 +120 +120 +119 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +178 +179 +183 +183 +182 +185 +185 +189 +188 +189 +191 +191 +195 +195 +195 +196 +197 +198 +198 +200 +201 +200 +200 +200 +202 +202 +202 +204 +204 +204 +205 +204 +204 +204 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +207 +206 +205 +207 +206 +204 +204 +204 +204 +204 +203 +202 +202 +202 +203 +200 +200 +200 +200 +201 +198 +198 +196 +196 +195 +195 +195 +191 +190 +188 +188 +189 +184 +185 +183 +183 +183 +178 +179 +175 +175 +175 +175 +176 +173 +173 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +125 +120 +120 +115 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +65 +64 +58 +58 +58 +54 +54 +50 +51 +51 +47 +47 +43 +43 +43 +41 +40 +37 +37 +37 +33 +32 +31 +31 +31 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +13 +14 +14 +13 +13 +14 +13 +13 +13 +14 +14 +14 +13 +14 +14 +13 +13 +13 +13 +13 +14 +14 +13 +14 +13 +14 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +20 +25 +25 +25 +25 +26 +27 +27 +31 +31 +32 +33 +33 +37 +37 +37 +41 +40 +43 +43 +47 +47 +47 +51 +51 +54 +54 +54 +58 +58 +65 +64 +64 +68 +69 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +95 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +115 +119 +119 +125 +125 +125 +130 +130 +133 +134 +133 +139 +139 +143 +144 +148 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +185 +184 +188 +189 +188 +191 +190 +195 +194 +194 +196 +197 +196 +196 +196 +198 +198 +200 +200 +200 +200 +201 +202 +203 +203 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +206 +207 +204 +204 +204 +204 +203 +202 +202 +200 +200 +200 +200 +200 +198 +198 +198 +198 +199 +196 +197 +194 +194 +195 +191 +191 +189 +188 +189 +185 +185 +183 +183 +179 +179 +178 +174 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +134 +133 +133 +129 +129 +129 +129 +129 +126 +125 +120 +119 +120 +115 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +87 +86 +86 +81 +82 +76 +76 +76 +73 +72 +68 +68 +68 +64 +64 +58 +58 +58 +55 +54 +51 +50 +51 +47 +47 +43 +42 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +14 +13 +14 +14 +14 +14 +14 +14 +13 +14 +14 +14 +13 +13 +14 +14 +13 +14 +13 +14 +14 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +40 +41 +43 +43 +43 +47 +47 +50 +50 +50 +54 +55 +58 +59 +58 +64 +64 +69 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +115 +119 +119 +126 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +152 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +172 +173 +173 +175 +175 +178 +178 +178 +183 +182 +183 +183 +183 +185 +185 +189 +188 +188 +190 +191 +195 +194 +195 +196 +197 +198 +198 +200 +200 +200 +201 +201 +202 +202 +203 +205 +204 +205 +205 +205 +204 +205 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +207 +207 +204 +204 +204 +204 +204 +202 +202 +201 +201 +201 +200 +200 +199 +198 +199 +196 +197 +195 +194 +190 +191 +191 +188 +189 +185 +184 +185 +182 +182 +183 +183 +183 +179 +179 +175 +175 +175 +173 +172 +169 +169 +168 +164 +165 +161 +161 +157 +157 +157 +151 +151 +146 +147 +147 +143 +143 +139 +139 +139 +134 +133 +130 +129 +129 +125 +126 +120 +120 +120 +116 +116 +109 +110 +107 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +73 +72 +68 +68 +69 +64 +64 +58 +58 +54 +54 +54 +50 +51 +46 +46 +47 +43 +42 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +30 +29 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +14 +14 +13 +13 +14 +13 +14 +13 +13 +13 +14 +14 +13 +14 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +15 +15 +16 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +28 +27 +31 +31 +32 +33 +33 +37 +37 +40 +41 +41 +43 +43 +47 +46 +49 +51 +50 +54 +54 +59 +58 +58 +64 +64 +68 +69 +68 +72 +72 +76 +76 +76 +83 +82 +86 +86 +86 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +115 +119 +119 +119 +125 +125 +129 +129 +130 +133 +133 +139 +139 +140 +143 +143 +147 +147 +152 +151 +151 +157 +157 +161 +161 +161 +165 +165 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +182 +183 +184 +185 +189 +189 +189 +190 +191 +194 +194 +194 +197 +197 +196 +197 +196 +198 +198 +200 +200 +201 +200 +200 +202 +202 +203 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +204 +204 +205 +204 +205 +202 +202 +200 +200 +200 +200 +201 +199 +198 +198 +196 +196 +194 +195 +195 +190 +191 +188 +188 +188 +185 +184 +182 +183 +183 +179 +179 +175 +175 +173 +173 +172 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +134 +133 +129 +129 +126 +125 +125 +120 +119 +115 +115 +116 +110 +110 +106 +106 +106 +100 +99 +96 +96 +96 +90 +90 +86 +86 +87 +82 +82 +76 +76 +73 +72 +72 +68 +68 +64 +64 +64 +59 +58 +59 +59 +58 +54 +54 +50 +50 +50 +47 +47 +43 +43 +42 +41 +41 +36 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +14 +13 +14 +13 +14 +13 +13 +13 +14 +13 +14 +13 +14 +13 +13 +13 +14 +13 +14 +14 +14 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +32 +37 +37 +37 +41 +40 +43 +42 +43 +47 +47 +51 +51 +51 +54 +55 +58 +58 +58 +65 +64 +68 +68 +69 +72 +72 +76 +76 +83 +82 +82 +86 +86 +90 +90 +90 +96 +96 +96 +95 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +116 +119 +119 +125 +125 +129 +129 +130 +133 +133 +139 +139 +139 +143 +143 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +162 +165 +165 +169 +169 +173 +173 +172 +175 +175 +179 +179 +179 +182 +182 +183 +183 +183 +185 +184 +188 +188 +189 +190 +191 +195 +195 +196 +196 +196 +199 +198 +200 +200 +200 +200 +200 +202 +202 +203 +204 +204 +204 +205 +205 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +207 +206 +204 +204 +204 +204 +204 +204 +205 +204 +202 +202 +200 +200 +200 +200 +200 +198 +198 +199 +196 +196 +194 +195 +191 +190 +191 +189 +188 +184 +185 +184 +183 +183 +179 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +130 +125 +126 +125 +119 +120 +116 +116 +116 +109 +109 +106 +105 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +61 +58 +58 +54 +55 +50 +51 +50 +47 +47 +43 +43 +43 +41 +41 +41 +40 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +26 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +13 +13 +14 +14 +14 +14 +14 +14 +13 +13 +14 +14 +14 +13 +13 +13 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +34 +33 +37 +37 +41 +41 +40 +43 +43 +47 +46 +47 +51 +51 +54 +55 +59 +58 +58 +64 +65 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +110 +110 +109 +116 +116 +119 +119 +119 +125 +125 +126 +126 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +145 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +169 +169 +169 +173 +173 +175 +174 +175 +179 +179 +182 +183 +183 +185 +185 +189 +188 +190 +191 +191 +194 +194 +196 +196 +197 +199 +199 +200 +201 +201 +200 +200 +202 +203 +203 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +204 +204 +204 +205 +205 +202 +203 +201 +201 +200 +200 +200 +199 +199 +196 +196 +196 +194 +194 +191 +190 +190 +188 +189 +185 +185 +184 +183 +183 +179 +178 +179 +175 +174 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +150 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +119 +120 +120 +115 +116 +109 +110 +110 +106 +106 +106 +105 +106 +100 +99 +96 +96 +96 +90 +90 +87 +86 +84 +82 +82 +76 +76 +72 +72 +73 +68 +68 +64 +64 +64 +58 +58 +58 +58 +58 +54 +54 +50 +51 +51 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +13 +14 +14 +14 +13 +14 +13 +13 +14 +13 +13 +13 +13 +14 +13 +14 +13 +14 +14 +13 +14 +14 +14 +14 +13 +14 +13 +13 +15 +15 +15 +17 +18 +19 +19 +19 +21 +21 +24 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +41 +40 +41 +42 +43 +47 +47 +47 +50 +51 +54 +55 +54 +58 +58 +64 +64 +64 +68 +69 +72 +72 +73 +76 +76 +82 +82 +87 +86 +86 +90 +90 +96 +96 +96 +100 +100 +101 +100 +100 +106 +106 +110 +110 +110 +116 +116 +119 +119 +120 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +147 +147 +147 +151 +151 +157 +157 +158 +161 +161 +165 +165 +168 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +182 +183 +184 +185 +189 +188 +188 +190 +191 +195 +195 +195 +196 +197 +199 +198 +200 +200 +200 +200 +200 +202 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +204 +205 +204 +204 +204 +202 +202 +203 +201 +201 +200 +201 +200 +198 +199 +196 +196 +196 +194 +195 +191 +191 +190 +189 +189 +184 +185 +182 +183 +183 +178 +178 +175 +175 +174 +173 +173 +169 +169 +169 +165 +165 +161 +161 +160 +157 +157 +151 +151 +151 +147 +147 +143 +143 +140 +139 +139 +133 +133 +129 +129 +129 +125 +126 +120 +120 +119 +116 +116 +110 +110 +110 +106 +106 +100 +100 +98 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +72 +72 +72 +68 +68 +65 +64 +65 +58 +58 +54 +54 +52 +50 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +20 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +14 +13 +14 +14 +14 +13 +13 +13 +14 +13 +14 +14 +13 +14 +14 +14 +14 +13 +14 +13 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +24 +25 +27 +27 +31 +30 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +50 +51 +55 +54 +59 +58 +59 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +81 +86 +86 +90 +90 +89 +96 +96 +100 +100 +100 +106 +106 +110 +110 +112 +115 +115 +119 +120 +125 +126 +125 +129 +130 +133 +134 +133 +139 +139 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +160 +161 +161 +165 +164 +169 +169 +169 +173 +173 +175 +175 +175 +178 +178 +183 +182 +183 +185 +185 +188 +189 +189 +190 +191 +194 +195 +196 +196 +197 +198 +198 +200 +201 +200 +201 +201 +202 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +207 +207 +207 +207 +206 +206 +207 +206 +204 +204 +204 +204 +204 +202 +202 +202 +200 +200 +200 +201 +200 +200 +200 +199 +198 +199 +196 +196 +194 +195 +191 +191 +191 +188 +189 +184 +184 +184 +183 +183 +179 +179 +178 +174 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +139 +139 +139 +133 +133 +129 +129 +129 +125 +126 +120 +119 +120 +115 +116 +110 +109 +106 +106 +106 +100 +100 +96 +95 +96 +90 +90 +91 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +69 +68 +69 +65 +64 +58 +58 +59 +54 +55 +50 +51 +50 +46 +47 +42 +42 +43 +41 +40 +36 +37 +37 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +13 +14 +13 +14 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +14 +14 +13 +14 +14 +14 +13 +13 +13 +14 +13 +13 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +28 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +40 +43 +42 +44 +47 +47 +51 +50 +55 +54 +54 +59 +58 +64 +65 +65 +68 +68 +68 +69 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +87 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +109 +110 +116 +115 +116 +116 +115 +119 +120 +125 +125 +125 +130 +129 +133 +133 +135 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +182 +182 +182 +184 +185 +188 +189 +189 +190 +191 +195 +194 +194 +196 +196 +199 +198 +198 +201 +200 +201 +200 +201 +202 +202 +204 +205 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +205 +205 +204 +204 +204 +202 +202 +200 +200 +201 +200 +201 +198 +198 +196 +197 +196 +194 +194 +190 +191 +190 +188 +189 +185 +185 +184 +182 +183 +179 +179 +179 +175 +174 +173 +173 +168 +169 +169 +164 +165 +161 +161 +161 +157 +157 +157 +157 +157 +151 +151 +147 +147 +147 +143 +139 +139 +139 +137 +133 +133 +129 +129 +125 +125 +125 +119 +119 +115 +116 +116 +110 +110 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +87 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +59 +59 +58 +55 +54 +50 +50 +51 +46 +47 +43 +43 +42 +41 +41 +37 +37 +33 +32 +33 +30 +31 +27 +27 +26 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +14 +14 +14 +13 +13 +14 +14 +14 +13 +13 +15 +15 +15 +17 +18 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +41 +41 +41 +43 +43 +46 +47 +47 +50 +51 +54 +55 +55 +58 +59 +64 +64 +64 +69 +68 +72 +72 +74 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +100 +100 +100 +105 +106 +109 +109 +110 +115 +116 +120 +120 +124 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +173 +173 +172 +175 +175 +178 +179 +179 +183 +182 +185 +184 +184 +188 +189 +191 +190 +190 +194 +194 +196 +196 +196 +198 +199 +200 +200 +201 +200 +200 +203 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +205 +205 +205 +204 +204 +202 +202 +200 +200 +200 +200 +201 +199 +198 +199 +196 +196 +194 +194 +194 +190 +190 +189 +188 +189 +184 +185 +183 +182 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +148 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +125 +119 +119 +120 +119 +119 +116 +115 +110 +110 +110 +105 +106 +100 +100 +97 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +69 +64 +64 +59 +59 +59 +55 +54 +51 +50 +47 +46 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +14 +14 +14 +14 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +13 +14 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +42 +43 +43 +47 +46 +50 +50 +51 +54 +55 +58 +59 +59 +65 +64 +68 +68 +72 +73 +72 +76 +76 +82 +82 +82 +86 +86 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +107 +110 +110 +116 +115 +119 +120 +120 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +157 +157 +161 +161 +164 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +178 +183 +183 +185 +184 +185 +188 +188 +191 +190 +195 +195 +195 +196 +196 +199 +199 +198 +200 +200 +201 +201 +200 +202 +202 +204 +204 +204 +204 +204 +206 +207 +207 +206 +206 +206 +206 +207 +207 +206 +206 +207 +207 +206 +206 +204 +204 +204 +204 +204 +202 +202 +200 +200 +200 +201 +200 +199 +198 +200 +196 +197 +194 +194 +190 +191 +191 +189 +188 +184 +184 +185 +183 +182 +183 +182 +183 +178 +178 +175 +175 +175 +172 +173 +169 +169 +169 +164 +164 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +120 +120 +119 +116 +116 +110 +109 +110 +105 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +83 +77 +76 +72 +72 +69 +68 +68 +64 +64 +58 +59 +58 +55 +54 +51 +51 +51 +47 +46 +42 +43 +43 +41 +41 +37 +37 +37 +33 +32 +31 +31 +28 +27 +26 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +14 +13 +13 +13 +14 +14 +14 +13 +14 +14 +14 +14 +13 +13 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +34 +33 +37 +36 +37 +41 +41 +42 +43 +43 +47 +47 +50 +50 +55 +55 +54 +59 +58 +64 +64 +64 +68 +68 +68 +68 +69 +72 +72 +76 +76 +76 +82 +82 +87 +86 +88 +90 +90 +96 +96 +100 +100 +100 +106 +106 +106 +106 +106 +110 +110 +115 +115 +115 +119 +120 +125 +125 +126 +129 +130 +133 +133 +138 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +164 +169 +169 +173 +172 +173 +175 +175 +179 +179 +183 +183 +183 +185 +185 +189 +189 +189 +191 +191 +194 +195 +195 +196 +197 +198 +198 +198 +200 +201 +201 +200 +201 +202 +202 +204 +204 +204 +205 +204 +206 +206 +206 +207 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +205 +202 +202 +200 +200 +200 +200 +200 +199 +198 +196 +197 +196 +195 +194 +194 +194 +194 +191 +190 +188 +189 +188 +185 +185 +183 +182 +181 +179 +179 +175 +175 +173 +172 +173 +169 +169 +165 +165 +165 +160 +161 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +140 +139 +139 +133 +133 +129 +129 +129 +125 +125 +120 +119 +119 +115 +115 +110 +109 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +86 +86 +85 +82 +82 +76 +76 +76 +72 +73 +68 +68 +68 +64 +64 +59 +58 +58 +54 +54 +51 +50 +51 +47 +47 +43 +43 +42 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +14 +14 +13 +14 +13 +14 +13 +14 +14 +14 +14 +13 +14 +14 +14 +14 +13 +13 +13 +13 +16 +15 +15 +17 +17 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +28 +31 +31 +33 +33 +36 +37 +37 +41 +41 +43 +43 +43 +47 +47 +47 +46 +46 +50 +50 +54 +55 +54 +58 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +89 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +115 +120 +120 +120 +125 +125 +129 +129 +129 +133 +133 +139 +140 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +168 +169 +169 +173 +173 +175 +175 +175 +179 +178 +183 +182 +182 +184 +184 +189 +188 +188 +190 +191 +195 +194 +195 +196 +197 +198 +199 +201 +201 +201 +200 +200 +202 +202 +202 +204 +204 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +207 +205 +204 +204 +205 +204 +202 +202 +202 +200 +200 +201 +200 +200 +201 +200 +197 +198 +198 +196 +196 +195 +194 +195 +191 +191 +189 +188 +184 +184 +184 +182 +182 +179 +179 +179 +175 +174 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +130 +130 +125 +125 +120 +119 +120 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +95 +90 +90 +86 +86 +87 +82 +82 +76 +77 +77 +72 +72 +68 +69 +69 +64 +64 +58 +58 +54 +55 +55 +51 +51 +47 +47 +47 +42 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +20 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +14 +14 +14 +14 +13 +13 +14 +13 +14 +14 +13 +13 +14 +14 +14 +14 +13 +13 +14 +14 +14 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +33 +33 +33 +37 +37 +41 +41 +41 +43 +42 +46 +46 +50 +50 +50 +54 +54 +58 +59 +59 +64 +64 +68 +69 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +99 +100 +100 +106 +106 +110 +110 +110 +116 +115 +120 +119 +120 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +152 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +168 +173 +173 +175 +175 +175 +179 +179 +183 +183 +183 +184 +185 +188 +188 +191 +191 +191 +194 +194 +197 +197 +196 +199 +198 +200 +200 +200 +200 +200 +202 +202 +202 +205 +205 +204 +205 +205 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +205 +204 +204 +204 +202 +202 +203 +200 +200 +200 +200 +200 +198 +199 +196 +197 +194 +194 +194 +191 +190 +188 +189 +189 +185 +185 +185 +185 +184 +182 +183 +179 +179 +179 +175 +175 +173 +173 +171 +169 +169 +165 +165 +161 +161 +160 +157 +158 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +134 +130 +129 +125 +125 +120 +119 +119 +116 +115 +109 +110 +110 +105 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +59 +58 +55 +54 +50 +51 +51 +47 +47 +43 +43 +43 +41 +40 +37 +37 +37 +33 +33 +31 +31 +28 +27 +27 +25 +25 +22 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +13 +13 +14 +14 +13 +13 +14 +14 +14 +13 +13 +14 +14 +14 +13 +14 +13 +13 +14 +13 +13 +14 +14 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +38 +41 +40 +42 +43 +47 +46 +47 +50 +50 +54 +54 +55 +59 +59 +65 +65 +64 +68 +69 +72 +73 +73 +77 +76 +82 +82 +85 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +116 +120 +119 +125 +125 +126 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +174 +179 +179 +179 +183 +183 +184 +184 +185 +189 +188 +190 +190 +190 +194 +195 +196 +196 +196 +198 +198 +200 +200 +201 +200 +200 +202 +202 +205 +204 +204 +204 +204 +206 +206 +207 +207 +206 +206 +206 +206 +207 +206 +207 +207 +206 +207 +206 +206 +206 +205 +204 +204 +204 +204 +202 +203 +203 +201 +200 +200 +200 +201 +198 +198 +198 +198 +198 +197 +197 +195 +195 +195 +191 +191 +189 +189 +185 +184 +184 +183 +183 +178 +179 +179 +175 +174 +173 +173 +173 +169 +168 +165 +165 +165 +161 +161 +157 +157 +158 +151 +151 +147 +147 +146 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +125 +119 +120 +115 +115 +115 +110 +109 +106 +106 +106 +100 +100 +96 +96 +90 +90 +89 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +65 +59 +59 +55 +54 +55 +50 +51 +47 +46 +44 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +18 +20 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +13 +14 +14 +13 +14 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +13 +13 +13 +12 +15 +15 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +26 +27 +27 +31 +31 +33 +33 +34 +37 +37 +41 +41 +41 +43 +43 +46 +46 +47 +50 +50 +54 +55 +55 +58 +58 +65 +64 +68 +69 +69 +73 +73 +76 +76 +76 +82 +82 +86 +87 +86 +90 +89 +96 +96 +96 +100 +100 +106 +106 +106 +109 +110 +116 +116 +120 +119 +119 +126 +126 +129 +130 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +178 +183 +183 +182 +184 +185 +189 +188 +189 +190 +191 +195 +194 +195 +196 +197 +198 +198 +200 +200 +200 +200 +200 +202 +202 +202 +204 +204 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +207 +207 +204 +204 +205 +204 +204 +203 +202 +202 +202 +203 +201 +200 +200 +201 +200 +198 +199 +196 +196 +195 +194 +195 +190 +190 +188 +188 +188 +184 +185 +182 +183 +183 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +158 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +134 +134 +129 +129 +129 +125 +125 +120 +120 +119 +115 +115 +110 +109 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +73 +68 +68 +69 +65 +64 +58 +59 +55 +54 +54 +51 +51 +46 +47 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +30 +27 +27 +27 +25 +25 +21 +21 +20 +19 +19 +17 +17 +15 +15 +15 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +13 +14 +14 +13 +14 +13 +14 +14 +13 +13 +14 +13 +13 +13 +13 +14 +14 +13 +13 +14 +14 +14 +14 +13 +14 +13 +13 +15 +15 +16 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +42 +43 +43 +47 +47 +50 +50 +51 +55 +55 +58 +58 +58 +64 +65 +69 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +99 +100 +100 +106 +106 +109 +110 +110 +116 +116 +120 +119 +120 +125 +125 +129 +129 +130 +134 +133 +139 +139 +139 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +182 +183 +185 +185 +188 +189 +191 +191 +191 +195 +195 +196 +197 +197 +199 +199 +201 +200 +201 +200 +201 +202 +203 +203 +205 +205 +204 +205 +205 +207 +206 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +207 +206 +204 +204 +204 +204 +205 +202 +202 +200 +200 +201 +200 +201 +199 +198 +196 +196 +196 +195 +194 +191 +191 +190 +188 +189 +185 +184 +185 +183 +183 +178 +179 +179 +175 +175 +173 +174 +168 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +144 +143 +139 +139 +133 +133 +133 +130 +129 +125 +126 +120 +119 +119 +116 +116 +110 +109 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +69 +69 +68 +64 +64 +59 +59 +59 +55 +54 +51 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +19 +19 +20 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +13 +13 +14 +14 +14 +14 +14 +13 +14 +14 +13 +13 +14 +14 +14 +14 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +47 +47 +47 +50 +51 +55 +54 +55 +58 +59 +64 +65 +64 +68 +68 +72 +72 +73 +76 +76 +82 +82 +86 +86 +87 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +115 +115 +120 +119 +126 +126 +126 +130 +129 +133 +134 +140 +140 +140 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +182 +183 +183 +185 +184 +188 +189 +188 +190 +191 +191 +191 +191 +195 +194 +197 +196 +197 +198 +199 +200 +200 +200 +200 +201 +202 +202 +204 +204 +205 +204 +205 +207 +207 +207 +206 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +205 +204 +204 +204 +204 +202 +202 +202 +200 +200 +200 +200 +200 +198 +198 +196 +197 +197 +195 +195 +191 +190 +191 +189 +189 +184 +185 +183 +183 +183 +179 +179 +174 +175 +175 +173 +173 +168 +169 +169 +164 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +140 +139 +139 +133 +133 +129 +129 +129 +126 +126 +120 +119 +120 +115 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +77 +76 +73 +72 +68 +68 +68 +65 +64 +58 +58 +59 +54 +55 +50 +51 +51 +47 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +13 +14 +14 +14 +13 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +20 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +42 +46 +47 +47 +51 +51 +54 +54 +54 +58 +59 +65 +65 +69 +68 +69 +73 +73 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +95 +100 +100 +106 +106 +106 +110 +110 +115 +116 +120 +120 +120 +125 +125 +129 +129 +130 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +164 +169 +169 +169 +173 +173 +175 +174 +175 +179 +179 +182 +182 +183 +185 +185 +188 +188 +189 +190 +191 +194 +194 +195 +196 +197 +199 +198 +200 +200 +200 +201 +200 +202 +202 +202 +204 +204 +205 +205 +204 +204 +204 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +205 +204 +205 +205 +204 +203 +202 +201 +201 +200 +200 +200 +199 +199 +199 +196 +197 +194 +195 +190 +191 +191 +188 +188 +184 +184 +185 +182 +183 +179 +179 +179 +175 +176 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +148 +147 +143 +143 +143 +139 +139 +133 +133 +134 +129 +129 +125 +125 +125 +120 +120 +116 +116 +116 +110 +110 +106 +106 +100 +100 +100 +96 +95 +90 +90 +90 +86 +86 +86 +86 +86 +82 +82 +77 +76 +76 +72 +72 +69 +68 +69 +64 +64 +58 +58 +55 +55 +54 +50 +50 +47 +46 +47 +42 +43 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +30 +31 +32 +27 +27 +25 +25 +21 +21 +21 +19 +19 +19 +19 +19 +17 +17 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +14 +13 +14 +14 +13 +14 +13 +14 +13 +13 +14 +13 +13 +14 +14 +13 +13 +13 +13 +13 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +44 +47 +47 +51 +50 +54 +54 +54 +58 +58 +65 +64 +65 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +110 +110 +109 +116 +116 +120 +119 +120 +126 +126 +130 +130 +129 +133 +133 +139 +139 +144 +143 +143 +147 +147 +151 +151 +151 +157 +157 +157 +157 +157 +160 +161 +164 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +182 +183 +182 +185 +184 +189 +189 +188 +191 +191 +191 +191 +191 +195 +195 +197 +196 +197 +199 +198 +200 +201 +200 +201 +201 +203 +202 +204 +205 +204 +204 +205 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +204 +204 +204 +204 +205 +203 +202 +200 +200 +200 +201 +201 +198 +198 +198 +196 +196 +195 +194 +195 +190 +190 +188 +188 +188 +184 +185 +183 +183 +178 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +134 +134 +133 +129 +129 +126 +125 +125 +120 +120 +115 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +97 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +69 +69 +69 +68 +64 +64 +59 +58 +58 +54 +55 +51 +50 +51 +47 +46 +43 +43 +40 +41 +41 +37 +36 +33 +33 +33 +31 +31 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +14 +13 +14 +14 +13 +14 +13 +13 +13 +14 +13 +14 +13 +14 +14 +13 +13 +13 +14 +14 +13 +14 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +24 +27 +27 +31 +31 +31 +33 +33 +37 +37 +36 +40 +41 +43 +43 +43 +46 +47 +51 +51 +50 +54 +55 +58 +58 +59 +64 +64 +68 +68 +73 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +105 +110 +110 +110 +115 +116 +119 +120 +125 +125 +125 +129 +129 +133 +133 +134 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +162 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +182 +182 +183 +183 +183 +185 +185 +189 +189 +189 +191 +190 +194 +195 +195 +197 +197 +198 +199 +200 +201 +200 +200 +200 +202 +202 +203 +204 +204 +204 +204 +204 +206 +207 +206 +206 +206 +207 +206 +206 +207 +207 +206 +206 +206 +206 +204 +204 +204 +205 +204 +203 +202 +203 +200 +200 +201 +201 +200 +198 +198 +197 +196 +196 +195 +195 +190 +190 +188 +189 +188 +185 +184 +182 +183 +183 +179 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +119 +119 +115 +116 +110 +110 +108 +105 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +65 +64 +61 +59 +58 +55 +55 +50 +51 +50 +47 +47 +43 +43 +43 +41 +41 +40 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +20 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +14 +14 +13 +14 +14 +14 +14 +14 +13 +13 +13 +14 +14 +14 +14 +13 +14 +13 +15 +15 +15 +18 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +40 +41 +41 +43 +43 +47 +47 +47 +50 +50 +54 +55 +59 +58 +58 +64 +65 +68 +68 +68 +72 +72 +76 +76 +76 +82 +81 +86 +86 +86 +90 +90 +96 +96 +97 +100 +100 +106 +106 +109 +110 +110 +116 +115 +119 +119 +120 +126 +125 +129 +129 +130 +133 +133 +139 +139 +139 +143 +143 +147 +147 +149 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +173 +173 +173 +175 +175 +179 +179 +179 +183 +182 +185 +184 +186 +188 +189 +191 +191 +194 +194 +195 +196 +196 +198 +198 +199 +201 +201 +200 +200 +201 +203 +202 +204 +204 +205 +204 +205 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +205 +204 +205 +205 +204 +203 +202 +200 +200 +200 +200 +201 +198 +199 +197 +196 +196 +195 +194 +190 +191 +190 +189 +188 +185 +184 +184 +182 +182 +179 +179 +179 +175 +175 +172 +173 +173 +169 +169 +165 +165 +160 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +140 +138 +133 +133 +133 +129 +128 +125 +125 +126 +119 +119 +116 +115 +110 +109 +110 +106 +106 +100 +99 +100 +96 +95 +96 +95 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +64 +64 +64 +58 +58 +54 +54 +54 +51 +50 +51 +51 +51 +47 +46 +43 +43 +43 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +14 +14 +14 +14 +14 +13 +14 +13 +14 +14 +13 +14 +14 +13 +13 +13 +14 +14 +14 +13 +14 +14 +13 +13 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +43 +43 +43 +46 +47 +51 +51 +51 +55 +54 +58 +58 +58 +64 +64 +68 +69 +68 +72 +72 +76 +76 +77 +82 +82 +86 +86 +89 +90 +90 +96 +96 +100 +100 +100 +106 +105 +106 +105 +106 +110 +110 +115 +116 +115 +120 +120 +125 +126 +127 +129 +129 +134 +133 +140 +139 +139 +143 +143 +147 +147 +147 +151 +151 +150 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +172 +173 +173 +175 +175 +178 +178 +179 +183 +183 +184 +185 +185 +188 +188 +191 +191 +191 +195 +195 +196 +197 +197 +198 +199 +200 +200 +200 +201 +201 +203 +203 +204 +204 +204 +205 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +207 +206 +206 +204 +204 +205 +204 +205 +202 +202 +201 +200 +200 +200 +200 +201 +200 +200 +199 +198 +197 +196 +196 +194 +194 +191 +191 +190 +188 +189 +184 +184 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +152 +147 +147 +143 +143 +139 +139 +139 +133 +133 +130 +129 +129 +125 +125 +126 +125 +125 +120 +119 +116 +116 +115 +110 +109 +106 +106 +106 +100 +100 +96 +96 +91 +90 +90 +86 +86 +82 +82 +82 +76 +76 +77 +76 +77 +72 +72 +68 +68 +68 +64 +65 +59 +59 +56 +54 +54 +50 +51 +47 +47 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +20 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +13 +14 +13 +13 +14 +14 +13 +13 +14 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +14 +14 +14 +14 +13 +15 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +27 +27 +27 +31 +30 +33 +33 +33 +37 +38 +40 +41 +41 +43 +43 +47 +47 +47 +50 +50 +55 +55 +55 +58 +59 +64 +64 +68 +68 +68 +72 +73 +76 +76 +76 +82 +82 +82 +82 +82 +86 +86 +90 +91 +90 +96 +96 +100 +100 +102 +106 +106 +110 +110 +115 +116 +116 +119 +119 +125 +125 +125 +129 +129 +129 +129 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +149 +151 +151 +157 +157 +160 +161 +161 +165 +165 +168 +169 +169 +173 +173 +175 +175 +174 +178 +179 +182 +183 +183 +185 +185 +189 +189 +190 +191 +190 +195 +194 +196 +196 +196 +198 +199 +201 +200 +200 +200 +200 +202 +202 +202 +204 +205 +204 +204 +204 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +207 +204 +204 +205 +204 +204 +202 +202 +200 +200 +200 +200 +201 +198 +198 +197 +197 +197 +195 +195 +191 +191 +191 +188 +188 +185 +184 +184 +183 +183 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +147 +147 +147 +143 +143 +140 +139 +139 +134 +134 +129 +129 +127 +125 +125 +119 +119 +116 +116 +115 +109 +109 +106 +106 +106 +100 +100 +100 +100 +100 +95 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +73 +72 +68 +68 +69 +65 +64 +59 +59 +59 +55 +54 +50 +50 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +33 +33 +33 +30 +31 +27 +27 +28 +25 +25 +21 +21 +21 +19 +19 +17 +16 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +14 +14 +13 +13 +13 +13 +14 +14 +14 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +43 +42 +43 +46 +47 +51 +51 +51 +55 +54 +54 +54 +55 +58 +59 +64 +64 +64 +68 +69 +72 +72 +73 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +95 +100 +100 +100 +100 +100 +106 +106 +109 +109 +110 +115 +115 +120 +119 +122 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +172 +173 +173 +175 +175 +179 +178 +179 +182 +183 +185 +184 +184 +189 +188 +191 +191 +191 +194 +195 +196 +196 +196 +198 +198 +200 +201 +200 +200 +200 +202 +203 +204 +204 +204 +204 +204 +206 +207 +206 +206 +207 +207 +207 +206 +207 +206 +206 +206 +206 +206 +207 +205 +204 +205 +204 +204 +202 +202 +202 +203 +202 +200 +200 +200 +201 +200 +199 +198 +196 +197 +196 +195 +194 +190 +190 +191 +188 +188 +185 +185 +182 +182 +183 +179 +179 +175 +175 +175 +173 +173 +173 +173 +173 +169 +168 +165 +165 +165 +161 +161 +157 +157 +158 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +129 +129 +129 +125 +125 +119 +119 +120 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +73 +72 +68 +68 +69 +64 +64 +58 +58 +54 +55 +55 +51 +51 +47 +47 +47 +43 +43 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +14 +14 +13 +13 +13 +14 +14 +13 +14 +14 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +28 +27 +27 +31 +31 +33 +33 +33 +37 +37 +37 +37 +37 +41 +41 +43 +43 +43 +47 +46 +50 +50 +52 +54 +55 +58 +58 +64 +64 +65 +68 +69 +72 +72 +72 +76 +77 +76 +76 +76 +82 +82 +86 +87 +86 +90 +90 +96 +96 +99 +100 +100 +106 +106 +109 +110 +110 +116 +115 +120 +120 +120 +125 +125 +129 +129 +129 +133 +133 +139 +140 +139 +144 +143 +147 +147 +149 +151 +151 +157 +157 +161 +161 +161 +165 +165 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +179 +182 +183 +184 +185 +189 +189 +189 +191 +190 +194 +195 +195 +196 +196 +198 +198 +198 +200 +200 +201 +200 +200 +202 +203 +205 +205 +204 +204 +204 +206 +206 +207 +206 +206 +207 +207 +206 +206 +207 +207 +206 +206 +207 +206 +204 +204 +204 +204 +204 +202 +202 +200 +200 +201 +200 +201 +198 +199 +196 +197 +197 +195 +195 +190 +191 +190 +188 +189 +189 +188 +189 +184 +185 +183 +182 +183 +178 +179 +175 +175 +175 +173 +173 +169 +169 +164 +165 +165 +161 +161 +157 +157 +157 +151 +151 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +130 +129 +129 +125 +125 +119 +120 +119 +116 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +72 +72 +69 +68 +68 +65 +64 +59 +58 +58 +54 +54 +50 +50 +51 +47 +46 +43 +43 +43 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +14 +13 +13 +14 +14 +14 +13 +14 +13 +14 +14 +13 +14 +13 +13 +14 +13 +13 +14 +13 +14 +14 +14 +14 +13 +13 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +40 +41 +41 +43 +43 +47 +47 +47 +51 +50 +50 +51 +51 +54 +55 +59 +59 +58 +64 +65 +68 +68 +70 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +110 +110 +116 +115 +119 +119 +124 +126 +125 +129 +129 +133 +134 +133 +140 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +179 +182 +183 +184 +184 +185 +188 +189 +191 +191 +190 +195 +194 +196 +196 +197 +199 +198 +200 +201 +201 +200 +201 +202 +202 +204 +204 +204 +204 +204 +204 +204 +204 +206 +206 +206 +206 +207 +206 +206 +207 +206 +207 +206 +206 +207 +206 +204 +204 +204 +204 +204 +202 +202 +203 +200 +200 +201 +201 +200 +201 +200 +198 +198 +199 +196 +196 +195 +194 +192 +190 +190 +188 +188 +184 +185 +185 +183 +182 +179 +179 +178 +175 +175 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +159 +157 +157 +151 +151 +147 +147 +147 +143 +143 +140 +139 +139 +133 +133 +129 +129 +130 +125 +125 +120 +120 +120 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +59 +55 +54 +55 +50 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +30 +27 +27 +27 +25 +25 +21 +21 +20 +20 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +14 +14 +13 +14 +13 +13 +14 +14 +14 +13 +13 +14 +14 +13 +13 +13 +13 +14 +13 +14 +13 +13 +12 +15 +15 +17 +17 +18 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +33 +33 +33 +37 +37 +41 +40 +41 +43 +42 +47 +47 +48 +50 +50 +55 +55 +58 +58 +58 +64 +64 +68 +68 +68 +72 +73 +76 +76 +77 +82 +82 +86 +86 +86 +90 +90 +96 +96 +99 +100 +100 +106 +106 +109 +110 +110 +115 +115 +120 +119 +119 +125 +126 +129 +130 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +168 +173 +173 +175 +175 +175 +179 +179 +182 +183 +182 +184 +185 +188 +188 +190 +191 +190 +195 +194 +196 +196 +197 +198 +198 +200 +200 +200 +200 +200 +202 +203 +202 +204 +205 +205 +204 +205 +206 +207 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +207 +205 +204 +204 +205 +204 +202 +202 +200 +200 +200 +201 +200 +199 +198 +197 +197 +196 +194 +194 +190 +190 +190 +188 +188 +188 +188 +188 +184 +185 +183 +182 +183 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +140 +133 +134 +129 +129 +127 +125 +126 +120 +120 +116 +116 +116 +110 +110 +106 +105 +105 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +73 +72 +72 +68 +68 +64 +65 +64 +58 +59 +54 +55 +55 +51 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +14 +13 +13 +13 +14 +14 +13 +13 +13 +13 +14 +13 +14 +13 +13 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +21 +21 +21 +26 +25 +27 +27 +27 +31 +31 +33 +33 +35 +37 +37 +41 +41 +43 +43 +43 +46 +47 +51 +50 +50 +54 +55 +59 +58 +59 +64 +65 +68 +68 +69 +72 +72 +76 +76 +82 +82 +83 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +116 +120 +119 +120 +126 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +161 +161 +165 +165 +165 +169 +169 +173 +173 +175 +175 +175 +179 +179 +182 +182 +183 +184 +185 +189 +188 +189 +191 +191 +195 +194 +195 +197 +197 +199 +199 +199 +200 +200 +201 +200 +202 +202 +203 +204 +204 +204 +205 +205 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +204 +204 +204 +204 +205 +202 +203 +200 +200 +200 +200 +200 +200 +201 +201 +198 +199 +196 +196 +197 +194 +194 +190 +190 +190 +188 +189 +185 +184 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +150 +147 +147 +143 +143 +139 +139 +140 +133 +133 +129 +129 +130 +125 +126 +119 +119 +119 +115 +116 +110 +110 +109 +105 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +69 +68 +65 +64 +58 +59 +58 +55 +54 +51 +50 +48 +47 +47 +42 +42 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +24 +21 +21 +21 +19 +20 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +14 +14 +14 +14 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +14 +13 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +46 +50 +50 +54 +54 +58 +58 +58 +64 +64 +68 +68 +69 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +110 +110 +110 +115 +116 +120 +119 +120 +125 +125 +130 +129 +130 +133 +133 +139 +139 +139 +143 +143 +147 +147 +148 +151 +151 +157 +157 +162 +161 +161 +165 +165 +168 +169 +169 +173 +173 +175 +175 +175 +178 +179 +183 +183 +183 +184 +185 +188 +189 +189 +191 +191 +194 +194 +197 +196 +196 +198 +198 +200 +200 +200 +200 +200 +201 +200 +200 +202 +202 +204 +205 +204 +204 +204 +206 +207 +207 +207 +207 +206 +207 +206 +206 +206 +207 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +201 +201 +201 +201 +200 +198 +199 +197 +196 +197 +194 +194 +190 +190 +191 +188 +189 +184 +184 +185 +183 +183 +179 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +130 +129 +125 +125 +126 +120 +120 +116 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +59 +58 +59 +55 +54 +51 +50 +50 +47 +47 +43 +43 +43 +41 +41 +36 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +16 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +14 +14 +14 +13 +14 +13 +13 +14 +14 +14 +14 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +13 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +36 +37 +37 +41 +40 +43 +43 +46 +47 +47 +50 +51 +55 +55 +54 +59 +59 +64 +64 +64 +69 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +116 +120 +120 +125 +125 +125 +129 +129 +133 +133 +134 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +172 +172 +173 +175 +175 +179 +179 +179 +183 +183 +184 +185 +188 +188 +188 +190 +191 +195 +194 +194 +197 +197 +197 +196 +196 +198 +198 +200 +201 +201 +200 +200 +202 +202 +203 +205 +205 +204 +204 +206 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +204 +204 +204 +204 +203 +203 +203 +200 +201 +200 +200 +200 +198 +199 +197 +196 +197 +195 +195 +191 +191 +191 +188 +189 +184 +185 +185 +183 +183 +179 +179 +175 +175 +174 +173 +173 +168 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +134 +133 +130 +129 +129 +125 +126 +120 +120 +119 +115 +115 +109 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +89 +86 +86 +83 +82 +77 +76 +76 +72 +72 +68 +68 +68 +64 +65 +58 +58 +58 +54 +54 +50 +51 +50 +47 +46 +43 +43 +43 +41 +41 +37 +37 +33 +33 +32 +31 +31 +27 +27 +27 +25 +25 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +13 +13 +13 +14 +13 +13 +14 +14 +13 +13 +14 +13 +13 +14 +13 +14 +13 +14 +14 +14 +14 +14 +14 +14 +13 +14 +13 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +50 +51 +54 +54 +58 +58 +58 +64 +64 +68 +68 +72 +72 +73 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +109 +110 +116 +115 +119 +120 +126 +126 +126 +130 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +162 +165 +165 +169 +169 +172 +173 +173 +175 +175 +178 +178 +179 +182 +183 +183 +183 +182 +185 +185 +189 +188 +189 +191 +190 +194 +194 +195 +197 +197 +198 +198 +200 +200 +200 +200 +200 +203 +202 +202 +204 +204 +205 +204 +204 +205 +204 +206 +206 +207 +206 +207 +206 +207 +206 +206 +207 +207 +206 +206 +207 +206 +204 +205 +204 +205 +204 +202 +202 +200 +200 +201 +200 +200 +198 +199 +198 +197 +197 +194 +194 +190 +191 +191 +188 +188 +184 +185 +185 +183 +182 +178 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +125 +119 +119 +116 +116 +116 +110 +110 +106 +106 +100 +100 +100 +96 +97 +90 +90 +90 +86 +86 +82 +82 +82 +76 +77 +73 +72 +72 +69 +68 +65 +64 +65 +59 +58 +54 +54 +50 +50 +51 +47 +46 +43 +42 +43 +41 +41 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +26 +25 +24 +21 +21 +19 +19 +19 +17 +17 +15 +14 +15 +15 +15 +15 +15 +15 +13 +13 +12 +12 +13 +13 +14 +13 +13 +14 +13 +13 +14 +14 +13 +13 +14 +14 +13 +14 +13 +13 +13 +14 +13 +13 +14 +13 +13 +14 +13 +12 +15 +15 +18 +17 +18 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +32 +37 +37 +37 +41 +40 +43 +42 +43 +47 +46 +51 +51 +52 +54 +54 +58 +58 +65 +64 +64 +68 +69 +72 +73 +72 +76 +76 +82 +82 +82 +87 +86 +90 +90 +91 +96 +96 +99 +100 +100 +100 +100 +106 +106 +110 +110 +110 +116 +116 +119 +120 +120 +126 +125 +129 +129 +129 +133 +134 +139 +139 +140 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +166 +165 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +180 +183 +183 +185 +184 +188 +189 +188 +190 +190 +194 +194 +195 +196 +197 +196 +197 +196 +199 +198 +200 +200 +201 +201 +200 +202 +202 +203 +205 +205 +205 +204 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +207 +206 +207 +206 +207 +205 +204 +205 +204 +204 +202 +202 +200 +200 +201 +200 +201 +198 +198 +198 +197 +196 +195 +195 +194 +190 +190 +189 +189 +189 +184 +185 +183 +183 +183 +179 +178 +175 +175 +173 +172 +173 +168 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +140 +139 +133 +133 +129 +130 +126 +125 +125 +119 +119 +116 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +72 +72 +73 +68 +68 +64 +65 +64 +59 +59 +54 +54 +54 +50 +51 +46 +46 +47 +43 +43 +41 +41 +39 +37 +36 +33 +33 +31 +31 +31 +27 +27 +25 +24 +25 +21 +21 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +12 +12 +13 +13 +13 +13 +13 +14 +14 +14 +14 +13 +13 +14 +14 +13 +14 +13 +14 +13 +14 +13 +13 +13 +14 +14 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +30 +31 +33 +33 +37 +37 +41 +41 +41 +42 +43 +46 +46 +47 +50 +50 +54 +54 +54 +59 +58 +64 +64 +64 +69 +68 +72 +72 +72 +76 +76 +82 +81 +86 +86 +86 +90 +90 +96 +96 +96 +100 +99 +106 +106 +106 +109 +110 +116 +116 +115 +119 +119 +125 +125 +125 +129 +129 +133 +133 +140 +139 +139 +143 +143 +147 +147 +147 +151 +151 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +168 +169 +169 +173 +173 +175 +175 +178 +179 +179 +182 +182 +185 +185 +184 +188 +188 +189 +189 +189 +190 +190 +195 +195 +195 +197 +197 +199 +198 +199 +201 +201 +200 +200 +202 +202 +203 +204 +205 +204 +204 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +207 +206 +207 +204 +204 +204 +204 +204 +202 +202 +202 +200 +200 +201 +200 +200 +198 +198 +197 +196 +197 +195 +195 +190 +190 +190 +190 +189 +185 +184 +183 +183 +183 +178 +178 +175 +175 +175 +172 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +144 +139 +139 +139 +133 +133 +129 +129 +130 +126 +126 +120 +119 +120 +116 +116 +110 +109 +110 +105 +105 +100 +100 +98 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +72 +72 +68 +68 +68 +64 +64 +58 +58 +59 +54 +54 +50 +51 +49 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +13 +14 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +15 +13 +14 +13 +14 +13 +14 +13 +13 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +50 +55 +54 +58 +59 +59 +65 +64 +68 +68 +73 +72 +72 +76 +76 +82 +82 +82 +85 +86 +90 +90 +90 +96 +96 +100 +99 +100 +106 +107 +110 +110 +110 +116 +116 +120 +119 +126 +125 +125 +130 +129 +133 +133 +133 +139 +140 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +158 +161 +161 +165 +165 +168 +169 +169 +173 +173 +175 +174 +175 +179 +178 +179 +179 +179 +182 +182 +184 +184 +185 +188 +189 +190 +190 +193 +194 +195 +196 +197 +199 +198 +198 +200 +200 +200 +201 +200 +203 +202 +204 +204 +204 +205 +204 +207 +206 +206 +207 +207 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +204 +204 +204 +204 +204 +203 +202 +201 +200 +200 +200 +201 +198 +198 +198 +197 +197 +195 +195 +194 +194 +195 +191 +190 +189 +188 +188 +185 +185 +183 +182 +182 +178 +179 +175 +175 +175 +173 +173 +169 +168 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +130 +129 +129 +125 +125 +119 +119 +120 +116 +116 +109 +109 +106 +106 +106 +100 +100 +96 +95 +96 +89 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +66 +64 +64 +58 +58 +54 +54 +54 +50 +51 +47 +47 +47 +43 +43 +43 +42 +43 +41 +41 +36 +37 +37 +33 +33 +31 +31 +29 +27 +27 +25 +25 +21 +21 +20 +19 +19 +17 +17 +18 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +14 +13 +14 +13 +13 +13 +14 +14 +13 +14 +14 +14 +14 +13 +14 +14 +14 +13 +14 +14 +14 +13 +14 +13 +12 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +44 +43 +43 +47 +47 +50 +50 +55 +54 +55 +58 +59 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +91 +96 +96 +100 +100 +105 +106 +106 +110 +110 +116 +115 +116 +120 +120 +119 +119 +120 +125 +125 +130 +129 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +165 +165 +165 +168 +169 +173 +173 +173 +175 +175 +179 +178 +182 +183 +183 +184 +184 +188 +188 +188 +190 +191 +194 +194 +194 +197 +197 +198 +198 +198 +200 +200 +200 +200 +201 +202 +202 +204 +204 +205 +204 +205 +207 +206 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +205 +204 +202 +203 +200 +200 +200 +201 +200 +198 +198 +197 +196 +197 +194 +195 +190 +190 +190 +189 +189 +185 +185 +184 +183 +183 +179 +179 +178 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +148 +143 +143 +143 +139 +139 +133 +133 +134 +129 +129 +125 +125 +119 +120 +119 +116 +115 +110 +110 +110 +106 +106 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +84 +82 +82 +76 +76 +72 +73 +72 +69 +68 +64 +64 +64 +59 +58 +58 +58 +59 +55 +54 +50 +50 +51 +47 +46 +43 +43 +42 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +20 +21 +21 +20 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +13 +14 +13 +13 +13 +14 +14 +14 +14 +14 +14 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +14 +14 +13 +13 +14 +13 +13 +15 +15 +15 +17 +17 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +46 +47 +51 +51 +51 +54 +54 +58 +58 +59 +64 +64 +68 +68 +68 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +95 +96 +96 +96 +100 +99 +106 +106 +106 +110 +110 +115 +115 +117 +119 +120 +125 +125 +129 +130 +130 +133 +133 +139 +139 +139 +143 +143 +143 +143 +143 +147 +147 +151 +151 +152 +157 +157 +161 +161 +165 +165 +165 +169 +168 +172 +173 +173 +175 +175 +179 +179 +179 +182 +182 +185 +184 +185 +189 +188 +190 +190 +191 +195 +195 +197 +196 +197 +197 +196 +198 +198 +200 +200 +200 +200 +200 +202 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +204 +204 +205 +204 +204 +203 +202 +203 +200 +200 +201 +201 +200 +199 +199 +197 +196 +197 +195 +194 +190 +190 +189 +188 +189 +185 +185 +182 +183 +182 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +164 +165 +161 +161 +161 +157 +157 +151 +151 +148 +147 +147 +143 +143 +139 +140 +140 +133 +134 +129 +129 +129 +125 +126 +120 +119 +120 +116 +116 +110 +109 +111 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +65 +65 +59 +59 +58 +55 +54 +50 +51 +50 +46 +47 +43 +43 +42 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +26 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +14 +13 +14 +14 +13 +14 +14 +14 +13 +13 +13 +14 +13 +14 +14 +13 +12 +15 +15 +17 +17 +18 +19 +19 +21 +21 +26 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +42 +43 +47 +47 +50 +50 +51 +55 +55 +59 +59 +64 +65 +64 +68 +69 +72 +73 +72 +77 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +101 +106 +106 +110 +110 +110 +110 +110 +116 +115 +119 +120 +120 +125 +125 +126 +126 +125 +129 +129 +133 +133 +134 +139 +139 +143 +143 +145 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +182 +183 +184 +185 +188 +188 +189 +190 +191 +195 +195 +195 +196 +196 +198 +198 +198 +201 +201 +201 +200 +201 +202 +203 +204 +204 +205 +205 +204 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +204 +204 +204 +204 +204 +203 +203 +200 +200 +201 +200 +201 +199 +198 +197 +196 +196 +194 +194 +190 +191 +191 +188 +188 +185 +184 +185 +182 +183 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +147 +147 +147 +143 +143 +140 +139 +139 +134 +133 +130 +129 +127 +126 +126 +120 +119 +116 +116 +116 +109 +110 +106 +106 +106 +100 +100 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +58 +58 +54 +54 +50 +50 +51 +47 +46 +42 +43 +43 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +14 +15 +15 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +14 +13 +13 +14 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +42 +43 +48 +47 +46 +51 +50 +54 +54 +54 +58 +58 +65 +64 +64 +68 +69 +72 +72 +72 +76 +76 +82 +82 +84 +86 +86 +90 +90 +96 +96 +96 +99 +100 +106 +106 +106 +110 +110 +110 +110 +110 +115 +116 +119 +120 +120 +125 +125 +129 +129 +131 +133 +134 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +174 +175 +178 +179 +179 +183 +183 +184 +185 +185 +188 +189 +191 +190 +191 +195 +195 +196 +197 +196 +198 +199 +200 +200 +201 +201 +200 +202 +202 +205 +204 +204 +204 +204 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +206 +207 +207 +204 +205 +204 +205 +204 +203 +203 +201 +200 +200 +201 +200 +198 +199 +198 +197 +197 +195 +194 +195 +190 +191 +189 +188 +189 +185 +185 +183 +183 +183 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +161 +161 +161 +157 +157 +151 +150 +151 +147 +147 +143 +144 +141 +139 +139 +134 +133 +129 +130 +129 +125 +125 +120 +120 +120 +115 +115 +115 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +91 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +69 +64 +65 +64 +58 +58 +54 +55 +55 +51 +51 +47 +46 +43 +43 +42 +41 +41 +37 +36 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +14 +13 +14 +14 +14 +14 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +14 +14 +14 +13 +14 +13 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +32 +36 +37 +37 +41 +41 +43 +43 +43 +47 +47 +47 +47 +47 +50 +50 +54 +55 +55 +58 +59 +65 +64 +66 +69 +68 +72 +72 +76 +76 +76 +82 +82 +82 +82 +82 +86 +86 +86 +86 +86 +90 +90 +95 +96 +96 +100 +100 +106 +106 +107 +110 +110 +116 +116 +119 +120 +120 +125 +125 +129 +129 +129 +133 +134 +140 +139 +139 +143 +143 +147 +147 +148 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +182 +182 +185 +184 +188 +189 +188 +190 +191 +194 +194 +197 +196 +196 +198 +198 +200 +200 +200 +201 +201 +203 +202 +202 +204 +204 +204 +204 +204 +206 +207 +206 +207 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +205 +204 +204 +204 +204 +203 +202 +202 +200 +200 +201 +201 +200 +198 +198 +196 +196 +197 +194 +194 +191 +191 +188 +189 +189 +185 +184 +183 +183 +182 +179 +178 +178 +178 +178 +174 +175 +173 +173 +173 +169 +169 +165 +165 +163 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +120 +118 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +72 +72 +68 +68 +64 +65 +65 +59 +58 +55 +54 +54 +50 +50 +46 +46 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +28 +25 +25 +22 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +12 +13 +12 +13 +14 +14 +14 +13 +13 +14 +13 +14 +14 +13 +14 +13 +13 +14 +13 +13 +14 +14 +14 +14 +13 +13 +13 +14 +14 +13 +13 +15 +15 +15 +18 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +44 +47 +47 +50 +51 +54 +54 +55 +59 +59 +65 +65 +64 +68 +68 +68 +68 +68 +72 +72 +76 +77 +77 +82 +82 +86 +86 +89 +90 +90 +96 +96 +100 +100 +99 +105 +106 +110 +110 +110 +115 +116 +119 +120 +120 +125 +126 +129 +129 +130 +133 +133 +139 +139 +142 +143 +143 +147 +148 +148 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +178 +179 +183 +182 +185 +185 +185 +189 +189 +191 +191 +191 +195 +194 +196 +196 +196 +199 +199 +200 +201 +200 +200 +201 +203 +202 +203 +205 +205 +204 +204 +207 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +204 +204 +204 +205 +204 +202 +202 +203 +200 +200 +200 +201 +198 +198 +198 +197 +196 +194 +195 +195 +190 +190 +191 +191 +191 +189 +188 +184 +184 +185 +182 +183 +179 +179 +177 +175 +175 +172 +173 +168 +169 +169 +165 +165 +161 +161 +161 +157 +157 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +137 +133 +133 +129 +129 +126 +125 +125 +119 +119 +116 +116 +116 +110 +109 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +83 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +58 +58 +54 +55 +55 +51 +50 +47 +46 +47 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +14 +14 +13 +13 +14 +13 +14 +13 +14 +14 +14 +13 +13 +15 +15 +15 +15 +15 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +42 +43 +43 +47 +47 +50 +51 +51 +54 +54 +58 +58 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +116 +116 +116 +120 +120 +125 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +144 +147 +147 +151 +151 +152 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +182 +184 +185 +184 +189 +189 +191 +191 +190 +194 +195 +196 +197 +199 +198 +198 +201 +201 +200 +201 +200 +202 +202 +205 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +207 +207 +207 +207 +206 +206 +204 +204 +204 +204 +204 +202 +202 +203 +200 +200 +200 +200 +200 +198 +198 +197 +196 +197 +194 +194 +191 +191 +191 +189 +189 +185 +185 +182 +183 +183 +179 +179 +175 +174 +174 +172 +173 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +152 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +126 +125 +125 +119 +119 +115 +115 +116 +110 +110 +106 +106 +101 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +73 +72 +73 +68 +68 +64 +65 +65 +59 +59 +55 +55 +51 +50 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +30 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +14 +14 +13 +14 +14 +14 +13 +13 +14 +13 +13 +14 +14 +14 +13 +13 +14 +13 +13 +13 +13 +15 +15 +17 +17 +18 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +33 +33 +33 +37 +37 +40 +41 +41 +43 +42 +47 +47 +50 +51 +50 +54 +54 +58 +58 +59 +65 +65 +68 +68 +68 +72 +73 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +116 +119 +119 +120 +125 +125 +129 +129 +129 +133 +133 +140 +139 +139 +143 +143 +146 +147 +152 +151 +151 +157 +157 +161 +161 +161 +165 +164 +169 +169 +169 +173 +173 +175 +175 +174 +179 +178 +183 +183 +183 +185 +185 +189 +189 +191 +191 +190 +194 +194 +196 +196 +197 +198 +199 +200 +200 +200 +200 +200 +202 +202 +202 +204 +204 +204 +204 +205 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +206 +206 +205 +204 +204 +204 +204 +202 +202 +200 +201 +200 +200 +201 +198 +198 +196 +196 +196 +195 +194 +191 +190 +190 +188 +189 +188 +188 +189 +185 +184 +183 +183 +183 +179 +179 +175 +174 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +140 +133 +133 +129 +129 +126 +125 +125 +119 +120 +115 +116 +116 +109 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +73 +72 +72 +68 +68 +64 +64 +64 +58 +58 +55 +55 +55 +50 +50 +46 +46 +46 +43 +43 +41 +41 +41 +36 +37 +33 +33 +32 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +14 +14 +14 +14 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +13 +13 +14 +14 +14 +14 +14 +13 +14 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +51 +54 +54 +58 +58 +58 +64 +64 +68 +69 +69 +72 +72 +76 +76 +81 +82 +83 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +110 +110 +116 +116 +119 +119 +119 +125 +125 +129 +129 +134 +134 +133 +139 +140 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +162 +161 +161 +165 +165 +169 +169 +169 +173 +173 +174 +175 +179 +179 +179 +183 +182 +185 +184 +185 +188 +188 +190 +191 +191 +194 +195 +197 +196 +196 +198 +199 +200 +201 +201 +201 +200 +202 +203 +205 +205 +205 +205 +204 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +205 +205 +202 +203 +200 +201 +200 +201 +200 +199 +198 +198 +197 +196 +197 +196 +196 +194 +195 +190 +191 +191 +188 +189 +185 +185 +184 +183 +183 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +152 +147 +147 +143 +143 +140 +139 +139 +134 +133 +129 +129 +130 +125 +125 +120 +120 +119 +116 +115 +110 +110 +110 +105 +106 +99 +100 +100 +96 +96 +90 +90 +86 +86 +86 +82 +82 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +65 +64 +58 +58 +54 +55 +55 +51 +51 +47 +46 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +20 +17 +17 +15 +15 +16 +15 +15 +13 +13 +12 +12 +14 +13 +13 +14 +13 +13 +14 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +14 +14 +13 +13 +15 +15 +15 +16 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +46 +47 +47 +51 +51 +55 +55 +54 +59 +58 +65 +65 +68 +68 +69 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +99 +106 +106 +106 +110 +110 +116 +115 +120 +119 +119 +125 +125 +129 +129 +129 +133 +134 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +182 +184 +185 +189 +189 +188 +191 +190 +195 +195 +195 +196 +197 +198 +198 +200 +200 +201 +201 +201 +202 +202 +202 +204 +204 +205 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +207 +207 +206 +206 +206 +204 +204 +205 +205 +204 +202 +202 +203 +202 +203 +200 +200 +200 +201 +201 +199 +199 +197 +197 +195 +194 +194 +190 +190 +188 +188 +189 +185 +185 +183 +183 +183 +179 +179 +175 +175 +174 +173 +173 +168 +169 +169 +165 +165 +161 +161 +158 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +130 +129 +130 +125 +125 +120 +119 +119 +115 +115 +109 +110 +106 +106 +106 +99 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +73 +72 +68 +68 +68 +64 +64 +58 +59 +55 +55 +55 +51 +51 +46 +46 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +20 +19 +19 +17 +17 +15 +15 +15 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +13 +14 +14 +14 +13 +13 +14 +13 +13 +13 +14 +13 +13 +14 +14 +14 +14 +13 +13 +14 +14 +13 +13 +13 +14 +13 +12 +15 +15 +16 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +40 +41 +42 +42 +43 +47 +46 +50 +51 +51 +55 +55 +58 +59 +58 +65 +65 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +97 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +116 +116 +119 +119 +125 +125 +125 +129 +130 +133 +133 +134 +139 +139 +143 +143 +148 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +182 +185 +184 +188 +188 +188 +190 +191 +195 +194 +194 +196 +197 +197 +197 +197 +199 +199 +201 +200 +200 +200 +200 +203 +202 +203 +204 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +207 +206 +206 +206 +206 +206 +204 +204 +204 +204 +203 +202 +203 +201 +201 +200 +200 +200 +199 +199 +196 +196 +197 +194 +195 +191 +190 +190 +189 +189 +185 +185 +185 +183 +183 +179 +178 +176 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +152 +151 +151 +147 +148 +144 +143 +143 +139 +139 +133 +133 +129 +129 +129 +126 +125 +119 +120 +119 +115 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +85 +86 +82 +82 +80 +76 +76 +72 +72 +69 +68 +68 +64 +64 +58 +58 +58 +55 +55 +51 +50 +50 +46 +47 +43 +42 +43 +41 +40 +37 +36 +33 +33 +33 +32 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +12 +14 +14 +13 +13 +14 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +14 +14 +14 +14 +13 +14 +13 +13 +14 +13 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +36 +37 +37 +41 +41 +41 +41 +40 +43 +43 +42 +43 +43 +47 +47 +50 +51 +51 +55 +54 +59 +58 +58 +64 +64 +68 +68 +72 +72 +73 +76 +76 +82 +82 +82 +86 +86 +86 +86 +86 +90 +90 +96 +95 +96 +100 +100 +106 +106 +106 +110 +110 +116 +115 +120 +120 +119 +126 +126 +129 +130 +129 +133 +134 +140 +139 +140 +144 +143 +147 +147 +147 +151 +151 +157 +157 +158 +161 +161 +165 +165 +168 +169 +169 +173 +173 +175 +175 +175 +179 +179 +179 +179 +179 +183 +182 +185 +185 +185 +189 +189 +191 +191 +192 +195 +194 +197 +197 +198 +199 +199 +200 +201 +200 +201 +201 +202 +202 +202 +202 +202 +204 +204 +204 +205 +205 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +207 +206 +206 +204 +204 +204 +204 +204 +203 +202 +202 +201 +200 +200 +200 +201 +198 +199 +196 +197 +194 +195 +194 +191 +190 +188 +188 +189 +184 +185 +183 +183 +183 +179 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +130 +129 +126 +125 +120 +120 +120 +115 +115 +110 +109 +106 +106 +105 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +73 +72 +68 +68 +69 +65 +64 +58 +58 +55 +54 +54 +51 +50 +47 +47 +47 +43 +43 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +29 +27 +26 +24 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +15 +15 +14 +13 +13 +12 +13 +14 +13 +14 +13 +14 +14 +14 +14 +13 +13 +13 +14 +13 +14 +14 +14 +14 +13 +13 +14 +13 +14 +13 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +32 +33 +37 +36 +41 +41 +40 +43 +43 +46 +47 +51 +50 +51 +55 +55 +58 +59 +59 +64 +65 +68 +68 +69 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +89 +96 +96 +100 +100 +100 +106 +106 +109 +110 +110 +115 +115 +119 +120 +119 +125 +125 +129 +130 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +152 +151 +151 +157 +157 +161 +161 +161 +165 +165 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +180 +182 +183 +185 +185 +188 +188 +188 +190 +190 +195 +195 +194 +196 +196 +196 +196 +196 +198 +198 +200 +200 +200 +200 +201 +202 +202 +203 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +205 +204 +204 +202 +202 +201 +201 +201 +200 +200 +198 +198 +199 +196 +196 +195 +194 +194 +191 +190 +188 +189 +188 +185 +185 +183 +183 +182 +179 +179 +175 +175 +172 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +140 +139 +140 +133 +133 +130 +129 +126 +126 +126 +120 +120 +115 +115 +115 +109 +110 +106 +105 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +87 +82 +82 +77 +76 +72 +72 +72 +68 +68 +64 +64 +64 +58 +58 +54 +55 +55 +51 +51 +47 +47 +46 +43 +43 +41 +41 +39 +37 +36 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +13 +14 +14 +13 +13 +13 +13 +13 +14 +14 +13 +13 +14 +13 +14 +13 +14 +13 +13 +13 +13 +13 +14 +14 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +51 +55 +55 +54 +58 +58 +64 +64 +64 +69 +69 +72 +73 +73 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +116 +119 +120 +125 +125 +126 +129 +130 +133 +133 +139 +139 +140 +143 +144 +147 +147 +147 +151 +151 +151 +151 +151 +157 +157 +162 +161 +161 +165 +165 +169 +169 +171 +173 +173 +175 +175 +179 +178 +179 +183 +183 +184 +185 +184 +189 +188 +189 +188 +189 +190 +190 +194 +195 +195 +197 +197 +198 +198 +200 +200 +201 +200 +201 +202 +202 +202 +204 +204 +204 +204 +204 +206 +206 +207 +206 +206 +206 +207 +206 +206 +207 +207 +206 +206 +207 +204 +204 +204 +204 +204 +203 +202 +203 +200 +200 +201 +201 +201 +199 +198 +197 +197 +197 +195 +194 +190 +191 +190 +189 +188 +185 +184 +183 +183 +182 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +160 +157 +157 +151 +151 +151 +147 +147 +143 +143 +140 +139 +139 +133 +133 +130 +130 +130 +126 +126 +120 +120 +119 +115 +115 +109 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +72 +72 +72 +69 +69 +64 +64 +64 +58 +58 +54 +55 +55 +50 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +20 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +14 +14 +13 +13 +14 +13 +13 +14 +13 +13 +14 +13 +14 +14 +13 +13 +13 +14 +14 +13 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +18 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +43 +43 +47 +47 +46 +51 +51 +55 +54 +55 +58 +58 +64 +64 +69 +69 +68 +72 +72 +76 +76 +76 +82 +83 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +119 +119 +120 +126 +125 +129 +129 +129 +133 +133 +133 +133 +133 +140 +139 +143 +143 +143 +147 +147 +151 +151 +153 +156 +157 +161 +161 +165 +165 +165 +169 +169 +169 +169 +169 +173 +173 +173 +174 +173 +174 +175 +179 +179 +179 +182 +183 +184 +184 +188 +189 +189 +190 +190 +194 +195 +194 +196 +197 +198 +198 +198 +200 +201 +200 +200 +200 +202 +203 +205 +204 +205 +204 +204 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +204 +204 +204 +204 +204 +202 +202 +200 +201 +200 +200 +201 +198 +198 +197 +197 +196 +194 +195 +190 +191 +191 +188 +188 +188 +188 +189 +184 +185 +183 +183 +183 +178 +179 +174 +175 +175 +173 +173 +169 +169 +166 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +134 +133 +130 +129 +130 +125 +125 +119 +119 +115 +115 +116 +109 +110 +106 +106 +106 +100 +100 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +79 +76 +76 +72 +72 +68 +69 +69 +64 +64 +58 +59 +59 +55 +54 +50 +51 +51 +47 +47 +43 +43 +43 +41 +40 +37 +37 +34 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +14 +14 +14 +14 +14 +14 +13 +14 +14 +14 +13 +14 +14 +13 +14 +14 +13 +13 +14 +14 +13 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +36 +37 +41 +40 +43 +43 +47 +47 +47 +50 +51 +54 +55 +55 +59 +59 +64 +65 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +83 +86 +86 +90 +90 +95 +96 +96 +100 +100 +106 +105 +106 +110 +110 +110 +109 +110 +116 +116 +120 +119 +119 +126 +125 +130 +130 +131 +134 +133 +140 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +182 +184 +185 +189 +188 +188 +190 +190 +195 +195 +194 +196 +196 +198 +198 +199 +201 +200 +200 +201 +202 +202 +203 +205 +204 +204 +204 +204 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +205 +204 +205 +205 +202 +202 +202 +200 +201 +200 +201 +201 +198 +198 +196 +196 +196 +194 +195 +191 +191 +190 +189 +189 +185 +185 +185 +183 +183 +179 +178 +175 +175 +174 +172 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +144 +139 +139 +133 +134 +130 +129 +129 +125 +125 +126 +125 +125 +119 +120 +119 +119 +119 +115 +115 +110 +110 +110 +110 +109 +106 +106 +103 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +76 +76 +76 +72 +73 +68 +68 +68 +64 +64 +58 +58 +55 +55 +54 +51 +50 +47 +47 +47 +42 +43 +41 +40 +41 +37 +37 +33 +33 +33 +31 +30 +27 +27 +27 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +16 +15 +15 +13 +13 +12 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +13 +14 +14 +13 +14 +14 +13 +13 +13 +14 +14 +14 +13 +14 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +42 +47 +46 +51 +51 +52 +55 +54 +58 +58 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +98 +100 +100 +106 +106 +109 +110 +110 +115 +116 +119 +120 +119 +125 +125 +125 +125 +126 +129 +129 +133 +133 +134 +140 +139 +143 +143 +147 +148 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +172 +175 +175 +179 +179 +179 +183 +183 +184 +184 +188 +188 +189 +190 +191 +195 +195 +194 +196 +197 +199 +198 +198 +200 +200 +200 +200 +200 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +207 +204 +204 +204 +204 +204 +203 +202 +200 +200 +200 +201 +201 +199 +198 +197 +196 +196 +195 +194 +190 +191 +190 +188 +189 +185 +184 +185 +183 +182 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +147 +147 +147 +143 +143 +139 +139 +140 +133 +134 +129 +129 +130 +126 +125 +119 +119 +116 +116 +116 +110 +110 +106 +106 +106 +100 +100 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +83 +76 +76 +72 +73 +69 +68 +68 +64 +64 +58 +59 +59 +54 +55 +50 +50 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +34 +33 +33 +31 +31 +27 +27 +27 +25 +25 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +14 +14 +13 +14 +14 +13 +13 +13 +13 +14 +14 +14 +13 +13 +14 +14 +13 +14 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +34 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +51 +50 +55 +55 +54 +55 +54 +58 +58 +64 +65 +64 +68 +68 +72 +72 +73 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +100 +100 +100 +106 +106 +110 +109 +110 +116 +116 +120 +120 +122 +125 +126 +129 +129 +133 +133 +133 +139 +140 +144 +144 +144 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +172 +173 +172 +175 +175 +179 +179 +179 +183 +183 +185 +185 +185 +188 +189 +191 +190 +190 +194 +195 +196 +196 +196 +199 +198 +201 +200 +201 +200 +201 +202 +203 +204 +204 +204 +204 +204 +207 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +205 +205 +205 +205 +204 +203 +202 +201 +200 +200 +200 +201 +198 +198 +198 +196 +197 +195 +195 +194 +195 +195 +191 +191 +191 +189 +189 +185 +185 +182 +183 +183 +179 +179 +175 +175 +175 +173 +173 +172 +173 +173 +169 +169 +165 +165 +165 +161 +161 +156 +157 +158 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +134 +129 +129 +129 +129 +129 +125 +125 +120 +120 +119 +115 +115 +109 +110 +108 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +69 +64 +65 +59 +58 +57 +54 +54 +51 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +14 +13 +14 +13 +14 +13 +14 +13 +13 +13 +14 +14 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +26 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +37 +37 +37 +41 +40 +43 +43 +43 +47 +47 +50 +50 +52 +55 +55 +59 +58 +64 +64 +64 +68 +68 +72 +72 +73 +76 +76 +76 +77 +77 +82 +82 +86 +86 +86 +90 +90 +96 +96 +99 +100 +100 +106 +106 +110 +109 +110 +116 +115 +119 +120 +119 +126 +125 +129 +129 +129 +134 +133 +139 +139 +140 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +168 +169 +173 +173 +175 +175 +175 +178 +178 +183 +183 +183 +184 +184 +188 +188 +190 +191 +191 +195 +194 +196 +196 +196 +198 +198 +201 +200 +201 +200 +200 +202 +203 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +207 +206 +205 +204 +205 +204 +204 +202 +202 +202 +200 +201 +200 +200 +201 +198 +199 +197 +197 +195 +195 +194 +190 +191 +188 +189 +189 +185 +185 +185 +185 +185 +183 +183 +179 +179 +179 +175 +175 +173 +173 +171 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +147 +147 +147 +143 +143 +139 +139 +140 +133 +133 +129 +129 +128 +125 +125 +119 +119 +116 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +87 +82 +82 +76 +76 +73 +72 +73 +69 +68 +64 +64 +64 +58 +58 +55 +54 +55 +50 +50 +46 +46 +47 +43 +43 +41 +41 +41 +37 +37 +33 +32 +31 +31 +30 +27 +27 +25 +25 +25 +21 +21 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +14 +14 +14 +14 +13 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +13 +14 +13 +14 +13 +14 +14 +13 +13 +13 +16 +15 +15 +17 +17 +19 +19 +19 +21 +21 +22 +21 +21 +25 +25 +27 +27 +27 +31 +30 +33 +33 +35 +37 +37 +41 +41 +43 +43 +42 +47 +47 +51 +50 +51 +54 +55 +55 +55 +55 +58 +58 +65 +64 +65 +68 +68 +72 +72 +74 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +105 +106 +110 +109 +115 +116 +116 +120 +119 +126 +125 +129 +129 +129 +133 +134 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +164 +169 +169 +173 +173 +174 +175 +175 +179 +179 +182 +183 +183 +185 +184 +189 +189 +188 +190 +191 +194 +194 +194 +196 +196 +198 +199 +199 +201 +200 +200 +201 +203 +202 +202 +204 +204 +204 +204 +204 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +204 +204 +204 +204 +205 +202 +203 +200 +200 +201 +201 +201 +201 +200 +200 +198 +198 +197 +196 +197 +194 +194 +191 +190 +189 +189 +189 +184 +185 +182 +183 +183 +179 +179 +175 +175 +175 +173 +173 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +152 +151 +152 +147 +147 +143 +143 +143 +140 +139 +133 +133 +133 +129 +129 +125 +125 +125 +119 +120 +115 +115 +116 +110 +109 +106 +106 +101 +100 +100 +96 +96 +91 +90 +90 +86 +86 +83 +82 +82 +76 +76 +72 +72 +72 +68 +68 +65 +64 +64 +59 +58 +54 +54 +51 +51 +51 +46 +43 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +14 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +14 +14 +13 +14 +13 +13 +14 +13 +13 +14 +14 +14 +13 +13 +14 +13 +14 +14 +13 +13 +13 +14 +13 +12 +15 +15 +17 +17 +18 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +49 +50 +50 +54 +55 +58 +58 +58 +64 +64 +68 +69 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +99 +100 +100 +106 +106 +110 +110 +110 +116 +115 +119 +119 +119 +125 +126 +129 +130 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +174 +175 +175 +179 +178 +183 +183 +183 +185 +185 +189 +189 +191 +191 +190 +195 +195 +196 +197 +196 +199 +198 +201 +200 +200 +200 +200 +202 +202 +202 +204 +204 +204 +205 +204 +206 +206 +206 +207 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +204 +204 +204 +204 +204 +203 +202 +202 +200 +200 +201 +200 +199 +198 +199 +197 +196 +194 +194 +194 +190 +191 +189 +188 +188 +185 +184 +185 +185 +185 +182 +183 +178 +178 +178 +175 +175 +173 +173 +170 +169 +169 +165 +166 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +134 +129 +129 +125 +125 +120 +120 +119 +115 +116 +109 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +69 +68 +68 +64 +64 +58 +58 +58 +55 +54 +50 +50 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +16 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +13 +14 +14 +14 +14 +13 +14 +13 +14 +13 +13 +14 +14 +13 +13 +13 +13 +14 +14 +14 +14 +13 +13 +13 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +22 +25 +25 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +40 +41 +40 +43 +42 +47 +47 +47 +51 +51 +54 +54 +55 +58 +59 +65 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +85 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +116 +116 +119 +119 +125 +125 +125 +129 +129 +134 +134 +139 +139 +139 +143 +143 +147 +147 +147 +150 +151 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +179 +179 +179 +182 +182 +185 +184 +185 +188 +188 +190 +191 +190 +194 +195 +196 +196 +197 +198 +198 +200 +200 +201 +200 +200 +202 +203 +204 +204 +204 +205 +204 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +205 +204 +205 +204 +204 +202 +203 +202 +200 +200 +200 +201 +201 +198 +198 +199 +198 +198 +196 +197 +194 +194 +194 +191 +191 +188 +189 +187 +185 +185 +183 +182 +178 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +158 +157 +151 +151 +147 +147 +144 +143 +143 +139 +139 +132 +133 +134 +129 +129 +126 +126 +125 +120 +119 +115 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +77 +76 +72 +72 +72 +68 +68 +64 +65 +64 +58 +58 +54 +54 +55 +50 +51 +47 +46 +44 +43 +43 +40 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +26 +25 +25 +25 +21 +21 +19 +19 +20 +17 +17 +15 +15 +15 +16 +15 +13 +13 +12 +13 +13 +13 +14 +14 +14 +14 +14 +14 +14 +14 +13 +13 +14 +14 +14 +14 +14 +14 +13 +14 +13 +13 +13 +13 +13 +14 +13 +12 +15 +15 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +32 +37 +37 +41 +41 +41 +42 +43 +47 +46 +47 +50 +50 +54 +54 +55 +58 +58 +65 +65 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +105 +106 +106 +110 +109 +116 +116 +119 +120 +120 +125 +126 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +164 +169 +169 +169 +173 +173 +175 +174 +175 +179 +178 +183 +183 +183 +184 +185 +189 +188 +189 +191 +191 +194 +195 +195 +197 +197 +198 +198 +201 +201 +201 +200 +200 +202 +202 +202 +204 +204 +204 +205 +204 +205 +204 +206 +206 +206 +206 +207 +207 +206 +207 +206 +206 +206 +206 +207 +206 +207 +205 +204 +204 +204 +204 +202 +203 +203 +202 +203 +200 +201 +200 +200 +201 +199 +199 +196 +196 +196 +195 +195 +190 +191 +188 +189 +188 +184 +184 +183 +183 +183 +179 +179 +175 +175 +174 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +130 +129 +125 +125 +120 +120 +119 +115 +116 +110 +110 +106 +106 +106 +100 +99 +96 +96 +96 +90 +90 +86 +87 +86 +83 +83 +76 +76 +76 +72 +72 +68 +68 +68 +65 +64 +59 +58 +55 +54 +54 +50 +51 +47 +47 +47 +43 +42 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +20 +19 +19 +17 +17 +15 +16 +15 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +14 +14 +13 +14 +13 +13 +14 +13 +12 +15 +15 +16 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +42 +42 +46 +47 +50 +51 +51 +55 +55 +58 +59 +59 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +85 +86 +86 +90 +90 +95 +96 +100 +100 +100 +105 +106 +110 +109 +109 +115 +115 +120 +119 +120 +125 +125 +129 +130 +129 +133 +134 +139 +139 +140 +143 +143 +147 +147 +152 +151 +151 +157 +161 +161 +161 +165 +164 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +182 +182 +183 +185 +185 +188 +188 +190 +191 +190 +194 +194 +197 +197 +197 +199 +198 +198 +199 +198 +200 +200 +200 +200 +200 +202 +202 +204 +204 +205 +205 +205 +206 +207 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +207 +204 +205 +205 +204 +204 +203 +202 +203 +200 +201 +200 +200 +198 +198 +198 +196 +196 +194 +195 +195 +190 +191 +189 +188 +189 +184 +185 +183 +183 +183 +179 +179 +175 +175 +172 +173 +173 +169 +169 +165 +165 +165 +162 +161 +157 +157 +157 +151 +151 +148 +147 +147 +144 +143 +139 +139 +140 +134 +133 +130 +129 +126 +125 +125 +119 +120 +116 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +58 +59 +54 +55 +51 +50 +51 +47 +47 +43 +43 +43 +41 +40 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +14 +14 +14 +14 +14 +13 +14 +13 +13 +13 +13 +14 +13 +13 +14 +13 +14 +13 +14 +14 +14 +13 +13 +12 +15 +15 +17 +18 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +30 +31 +31 +33 +33 +37 +37 +37 +41 +40 +43 +43 +43 +47 +47 +50 +51 +50 +55 +55 +59 +59 +58 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +116 +119 +119 +126 +125 +125 +129 +129 +133 +133 +133 +139 +139 +139 +139 +139 +144 +143 +147 +147 +147 +151 +151 +157 +157 +158 +160 +161 +165 +164 +169 +169 +169 +173 +173 +175 +175 +175 +179 +178 +179 +179 +178 +182 +183 +185 +185 +185 +188 +189 +190 +191 +192 +194 +194 +196 +197 +198 +198 +198 +200 +201 +200 +200 +201 +200 +200 +201 +200 +200 +203 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +207 +207 +207 +206 +206 +206 +204 +205 +204 +204 +204 +202 +202 +201 +201 +201 +200 +201 +198 +198 +196 +196 +196 +195 +194 +191 +191 +191 +188 +189 +184 +184 +185 +183 +183 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +125 +119 +119 +116 +115 +110 +110 +110 +106 +106 +100 +99 +100 +96 +96 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +73 +72 +69 +68 +65 +64 +64 +59 +58 +55 +55 +55 +50 +51 +51 +50 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +35 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +14 +13 +14 +14 +14 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +14 +13 +14 +13 +13 +14 +13 +14 +14 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +28 +31 +31 +33 +33 +33 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +51 +51 +55 +54 +58 +58 +59 +64 +65 +68 +68 +68 +73 +72 +76 +76 +77 +82 +82 +86 +86 +91 +90 +90 +95 +96 +100 +100 +100 +105 +106 +110 +110 +109 +116 +116 +120 +120 +120 +125 +125 +129 +129 +130 +133 +134 +139 +139 +144 +143 +143 +147 +147 +151 +151 +151 +157 +157 +157 +157 +157 +161 +161 +165 +165 +165 +169 +168 +172 +173 +173 +175 +175 +179 +179 +182 +182 +183 +185 +185 +189 +189 +188 +190 +191 +191 +191 +190 +194 +195 +196 +196 +197 +198 +198 +200 +200 +200 +200 +200 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +204 +204 +204 +205 +205 +202 +203 +200 +201 +200 +200 +200 +198 +198 +198 +197 +197 +195 +195 +194 +191 +190 +188 +188 +188 +185 +185 +183 +183 +179 +179 +179 +175 +175 +172 +173 +173 +169 +169 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +140 +139 +139 +134 +133 +129 +130 +129 +126 +126 +120 +120 +120 +116 +116 +110 +110 +110 +105 +106 +100 +100 +99 +96 +96 +90 +90 +87 +86 +87 +82 +82 +76 +76 +76 +72 +73 +72 +72 +72 +68 +68 +64 +65 +64 +58 +58 +55 +54 +55 +51 +50 +46 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +33 +33 +33 +31 +31 +27 +27 +27 +25 +24 +21 +21 +20 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +14 +14 +14 +13 +14 +14 +13 +13 +14 +14 +14 +13 +13 +13 +14 +14 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +36 +37 +41 +41 +41 +43 +43 +46 +47 +47 +51 +51 +55 +55 +55 +59 +58 +65 +64 +69 +68 +69 +72 +72 +76 +76 +76 +82 +82 +82 +83 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +116 +116 +115 +120 +119 +125 +125 +125 +130 +129 +129 +130 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +148 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +172 +173 +173 +173 +173 +175 +175 +179 +179 +179 +183 +182 +185 +184 +188 +188 +189 +191 +190 +194 +195 +194 +196 +196 +198 +198 +198 +200 +201 +201 +200 +200 +203 +202 +204 +205 +205 +205 +205 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +200 +200 +200 +200 +201 +198 +198 +197 +197 +196 +195 +194 +191 +191 +191 +189 +188 +184 +185 +185 +182 +182 +179 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +134 +133 +130 +129 +126 +126 +126 +119 +119 +115 +115 +109 +110 +110 +106 +106 +100 +100 +100 +96 +96 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +73 +72 +68 +68 +64 +65 +65 +58 +58 +55 +54 +55 +51 +51 +51 +51 +51 +47 +47 +43 +43 +43 +41 +40 +37 +37 +33 +33 +32 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +13 +13 +13 +13 +14 +13 +14 +13 +14 +14 +13 +13 +14 +13 +14 +14 +13 +13 +13 +14 +13 +13 +13 +13 +12 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +32 +33 +37 +37 +36 +41 +40 +43 +43 +47 +47 +47 +50 +50 +54 +55 +55 +58 +58 +58 +59 +59 +64 +64 +68 +68 +68 +72 +72 +76 +77 +77 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +105 +106 +106 +109 +110 +116 +116 +116 +119 +120 +125 +125 +127 +130 +129 +134 +133 +139 +139 +139 +143 +143 +143 +143 +143 +147 +148 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +166 +169 +169 +173 +173 +175 +175 +175 +179 +178 +179 +179 +179 +182 +182 +184 +184 +185 +188 +189 +190 +190 +191 +195 +195 +197 +197 +198 +198 +199 +201 +200 +201 +201 +200 +203 +202 +205 +204 +205 +204 +204 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +204 +204 +204 +204 +204 +202 +202 +201 +201 +201 +200 +200 +198 +199 +198 +197 +196 +195 +195 +195 +190 +191 +189 +189 +185 +185 +185 +183 +183 +179 +179 +179 +175 +175 +173 +173 +173 +168 +169 +165 +165 +165 +161 +161 +157 +157 +158 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +130 +129 +129 +125 +125 +120 +120 +119 +115 +116 +110 +109 +108 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +82 +82 +82 +76 +76 +72 +72 +72 +69 +68 +65 +65 +59 +59 +58 +54 +54 +51 +50 +51 +47 +47 +43 +43 +43 +40 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +14 +14 +13 +14 +14 +13 +14 +14 +13 +13 +14 +13 +13 +14 +14 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +26 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +42 +43 +47 +47 +51 +51 +51 +54 +54 +58 +58 +65 +64 +65 +68 +68 +72 +73 +73 +76 +76 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +105 +110 +110 +110 +115 +116 +119 +120 +120 +125 +125 +125 +125 +125 +130 +130 +134 +133 +133 +139 +139 +143 +143 +147 +147 +146 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +182 +183 +184 +185 +188 +188 +188 +191 +191 +194 +194 +194 +196 +196 +199 +198 +198 +200 +200 +201 +200 +200 +202 +203 +204 +204 +205 +204 +205 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +204 +204 +204 +204 +204 +203 +203 +201 +200 +201 +200 +200 +199 +198 +197 +197 +197 +194 +194 +190 +190 +190 +189 +188 +189 +188 +188 +185 +185 +183 +183 +183 +178 +178 +175 +174 +176 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +151 +151 +151 +147 +147 +144 +143 +143 +139 +139 +133 +133 +131 +129 +129 +125 +125 +119 +120 +119 +116 +116 +110 +110 +110 +106 +106 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +83 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +58 +59 +54 +54 +55 +51 +51 +47 +47 +47 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +14 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +14 +14 +13 +14 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +34 +37 +37 +41 +41 +43 +43 +43 +47 +46 +50 +51 +51 +55 +55 +55 +55 +55 +58 +58 +64 +65 +64 +68 +68 +73 +72 +74 +76 +76 +82 +82 +87 +86 +86 +89 +90 +96 +96 +96 +99 +100 +100 +100 +100 +106 +106 +110 +109 +110 +115 +116 +120 +119 +123 +126 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +160 +161 +161 +165 +165 +169 +169 +170 +173 +173 +175 +174 +179 +179 +179 +182 +183 +185 +184 +184 +188 +188 +190 +191 +190 +194 +195 +197 +196 +197 +199 +198 +201 +200 +200 +200 +201 +202 +202 +205 +204 +204 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +205 +204 +205 +204 +204 +203 +202 +202 +200 +200 +200 +200 +201 +198 +198 +196 +196 +197 +195 +195 +190 +191 +191 +189 +189 +185 +184 +183 +183 +183 +178 +178 +175 +175 +175 +173 +173 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +152 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +130 +129 +129 +129 +125 +125 +120 +120 +120 +115 +115 +110 +110 +107 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +69 +65 +64 +59 +58 +54 +55 +55 +51 +50 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +28 +27 +25 +25 +21 +21 +18 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +13 +14 +13 +14 +13 +13 +13 +14 +14 +13 +13 +14 +13 +13 +13 +14 +14 +13 +14 +13 +14 +13 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +50 +52 +55 +54 +59 +58 +64 +64 +68 +68 +68 +72 +72 +73 +76 +77 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +100 +100 +100 +105 +106 +110 +110 +110 +115 +115 +120 +119 +119 +125 +125 +129 +129 +130 +133 +133 +139 +139 +140 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +176 +175 +174 +179 +179 +183 +182 +183 +185 +184 +190 +188 +191 +191 +190 +194 +194 +196 +196 +196 +199 +198 +200 +200 +200 +200 +200 +202 +203 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +203 +202 +200 +201 +201 +201 +201 +198 +198 +196 +196 +195 +194 +195 +190 +190 +188 +188 +189 +184 +185 +185 +185 +184 +182 +183 +179 +179 +179 +175 +175 +172 +173 +171 +169 +169 +165 +165 +160 +161 +161 +157 +157 +151 +151 +151 +147 +147 +147 +147 +147 +143 +143 +140 +139 +139 +134 +134 +129 +129 +126 +126 +125 +119 +120 +115 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +72 +72 +72 +68 +68 +65 +64 +64 +58 +59 +55 +55 +54 +51 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +14 +14 +14 +13 +14 +14 +14 +13 +14 +13 +13 +13 +13 +14 +13 +14 +14 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +39 +41 +41 +43 +42 +47 +47 +47 +51 +50 +54 +55 +55 +58 +59 +58 +58 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +81 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +99 +106 +106 +110 +109 +110 +116 +115 +119 +119 +120 +125 +125 +130 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +161 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +174 +179 +178 +179 +182 +182 +184 +184 +185 +189 +189 +190 +191 +191 +194 +195 +196 +196 +196 +198 +199 +200 +200 +201 +200 +200 +202 +202 +205 +205 +204 +204 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +204 +204 +205 +204 +204 +202 +203 +201 +200 +200 +200 +201 +198 +198 +199 +196 +196 +196 +197 +196 +195 +194 +191 +190 +191 +188 +189 +184 +184 +185 +183 +183 +179 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +164 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +146 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +125 +120 +120 +115 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +73 +72 +72 +68 +69 +64 +65 +64 +58 +59 +54 +54 +55 +50 +51 +47 +47 +43 +43 +43 +41 +41 +37 +36 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +12 +13 +14 +14 +14 +13 +14 +13 +13 +13 +14 +13 +14 +14 +13 +14 +13 +14 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +15 +15 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +26 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +43 +43 +43 +46 +47 +50 +51 +51 +54 +54 +59 +59 +61 +64 +64 +69 +69 +72 +72 +73 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +105 +110 +110 +115 +116 +115 +119 +119 +125 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +165 +165 +165 +169 +168 +173 +173 +173 +175 +175 +179 +178 +178 +183 +182 +184 +185 +184 +188 +188 +190 +191 +191 +194 +194 +197 +196 +199 +198 +199 +200 +200 +200 +200 +200 +202 +203 +205 +204 +204 +204 +204 +206 +206 +206 +206 +207 +206 +207 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +204 +204 +204 +202 +202 +200 +200 +200 +201 +201 +198 +198 +197 +197 +196 +194 +194 +190 +190 +190 +188 +189 +185 +184 +184 +182 +183 +183 +183 +182 +179 +179 +175 +175 +175 +173 +173 +169 +168 +168 +165 +165 +161 +161 +156 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +131 +126 +125 +120 +119 +117 +115 +116 +110 +109 +105 +105 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +64 +64 +64 +59 +58 +54 +55 +54 +50 +50 +47 +47 +47 +43 +43 +40 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +26 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +14 +13 +13 +13 +14 +14 +14 +13 +13 +16 +15 +15 +17 +18 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +50 +54 +54 +58 +58 +59 +65 +65 +68 +68 +69 +72 +72 +76 +76 +76 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +105 +110 +109 +110 +115 +116 +119 +120 +120 +125 +125 +129 +129 +129 +133 +134 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +182 +182 +185 +184 +185 +188 +189 +190 +191 +190 +194 +194 +197 +196 +196 +199 +198 +200 +200 +201 +200 +200 +202 +202 +203 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +203 +202 +203 +200 +200 +200 +200 +200 +198 +198 +196 +196 +196 +194 +195 +194 +194 +194 +191 +190 +189 +188 +189 +185 +185 +183 +183 +181 +178 +179 +175 +175 +172 +173 +169 +169 +169 +169 +169 +165 +165 +161 +161 +160 +157 +157 +151 +151 +151 +147 +147 +143 +143 +140 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +119 +120 +116 +115 +109 +110 +110 +105 +106 +100 +100 +100 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +69 +65 +64 +58 +58 +58 +55 +54 +51 +51 +51 +47 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +13 +14 +14 +13 +13 +14 +13 +14 +14 +14 +13 +14 +13 +14 +14 +14 +13 +13 +15 +14 +14 +14 +13 +14 +13 +13 +13 +14 +13 +13 +12 +15 +15 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +26 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +50 +55 +54 +55 +59 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +83 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +116 +119 +120 +120 +126 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +169 +169 +169 +173 +173 +174 +175 +175 +179 +179 +183 +182 +183 +185 +185 +188 +188 +188 +190 +191 +194 +194 +195 +196 +196 +198 +198 +200 +200 +200 +201 +200 +202 +202 +202 +204 +204 +204 +204 +204 +204 +204 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +205 +204 +204 +204 +202 +203 +203 +202 +202 +200 +200 +200 +200 +201 +198 +199 +196 +196 +195 +194 +194 +190 +191 +188 +188 +189 +184 +184 +183 +183 +183 +179 +179 +175 +174 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +120 +119 +119 +116 +116 +110 +110 +106 +106 +106 +100 +100 +95 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +69 +64 +64 +59 +58 +55 +54 +54 +50 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +20 +19 +19 +17 +17 +15 +15 +15 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +13 +13 +14 +13 +13 +14 +14 +14 +13 +14 +14 +13 +13 +14 +13 +13 +14 +13 +13 +14 +14 +14 +13 +14 +14 +14 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +42 +47 +47 +50 +50 +50 +54 +54 +58 +59 +59 +64 +65 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +116 +115 +116 +115 +119 +119 +126 +125 +126 +129 +129 +133 +133 +134 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +178 +179 +183 +182 +184 +184 +189 +189 +189 +190 +191 +195 +195 +194 +197 +196 +196 +196 +196 +198 +198 +200 +200 +200 +200 +200 +202 +202 +203 +204 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +204 +204 +204 +204 +203 +202 +203 +200 +200 +200 +200 +200 +198 +198 +197 +196 +197 +194 +194 +190 +191 +191 +188 +188 +184 +185 +185 +183 +183 +179 +179 +175 +175 +174 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +129 +129 +129 +125 +125 +120 +120 +119 +115 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +68 +68 +65 +64 +58 +59 +58 +55 +55 +51 +51 +51 +47 +47 +43 +43 +44 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +22 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +36 +37 +41 +41 +41 +43 +42 +47 +46 +47 +51 +50 +54 +55 +54 +58 +58 +64 +64 +64 +68 +68 +72 +73 +77 +76 +77 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +116 +116 +120 +120 +125 +125 +130 +130 +129 +134 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +166 +169 +169 +173 +173 +175 +175 +175 +179 +178 +183 +182 +182 +184 +185 +185 +184 +184 +189 +188 +191 +191 +191 +196 +194 +197 +196 +197 +199 +199 +200 +200 +200 +200 +200 +202 +202 +204 +204 +204 +204 +204 +205 +204 +204 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +207 +206 +206 +204 +204 +204 +204 +204 +202 +202 +202 +200 +200 +200 +200 +200 +198 +199 +197 +196 +197 +194 +194 +190 +191 +188 +188 +189 +185 +185 +182 +183 +182 +179 +179 +174 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +134 +129 +129 +129 +126 +125 +120 +120 +120 +116 +116 +110 +110 +110 +106 +106 +100 +100 +97 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +69 +64 +64 +59 +59 +59 +55 +55 +51 +50 +46 +47 +47 +43 +43 +41 +41 +41 +37 +37 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +23 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +14 +13 +14 +14 +13 +14 +13 +14 +14 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +15 +15 +16 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +30 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +50 +51 +55 +54 +59 +58 +59 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +109 +109 +110 +115 +116 +120 +119 +119 +125 +126 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +148 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +173 +173 +172 +175 +175 +178 +178 +179 +182 +182 +184 +184 +185 +189 +189 +190 +190 +194 +194 +194 +196 +196 +198 +198 +198 +201 +200 +200 +200 +200 +200 +200 +202 +202 +202 +204 +204 +204 +204 +205 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +205 +202 +202 +203 +200 +200 +200 +200 +198 +198 +199 +196 +196 +194 +194 +194 +190 +190 +188 +189 +188 +184 +185 +183 +182 +182 +179 +178 +175 +174 +175 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +134 +134 +129 +129 +130 +125 +126 +119 +119 +116 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +64 +64 +64 +58 +59 +55 +54 +54 +51 +51 +46 +47 +47 +43 +42 +41 +41 +41 +37 +37 +33 +33 +32 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +13 +13 +13 +14 +14 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +47 +47 +46 +51 +50 +55 +54 +55 +58 +58 +64 +64 +64 +69 +68 +72 +72 +72 +76 +76 +82 +82 +83 +86 +86 +90 +90 +96 +96 +96 +100 +100 +105 +106 +106 +109 +110 +115 +115 +115 +119 +119 +126 +125 +125 +129 +129 +134 +133 +134 +139 +139 +143 +143 +148 +147 +147 +151 +151 +157 +157 +157 +161 +161 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +176 +179 +179 +183 +183 +184 +184 +185 +189 +188 +191 +190 +191 +195 +194 +194 +195 +194 +196 +197 +198 +198 +199 +200 +200 +200 +200 +202 +202 +202 +204 +205 +204 +205 +205 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +206 +206 +207 +204 +204 +204 +204 +203 +203 +202 +200 +200 +201 +200 +200 +198 +199 +196 +196 +197 +194 +194 +191 +191 +191 +189 +189 +185 +184 +185 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +144 +143 +144 +139 +140 +133 +133 +130 +130 +130 +125 +126 +120 +119 +120 +115 +115 +116 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +68 +68 +68 +64 +64 +58 +58 +59 +54 +54 +50 +51 +49 +46 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +14 +13 +13 +14 +14 +13 +14 +14 +14 +14 +13 +14 +13 +14 +14 +14 +13 +13 +14 +14 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +50 +50 +55 +54 +58 +59 +59 +64 +64 +68 +68 +73 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +109 +110 +116 +115 +119 +119 +126 +125 +125 +129 +129 +133 +133 +133 +139 +140 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +174 +179 +179 +179 +179 +179 +182 +183 +184 +184 +185 +189 +189 +191 +191 +191 +194 +195 +197 +196 +198 +198 +198 +200 +200 +201 +200 +200 +202 +202 +204 +204 +204 +205 +204 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +205 +204 +204 +202 +203 +201 +200 +200 +200 +200 +198 +198 +198 +197 +196 +194 +194 +190 +190 +191 +189 +188 +185 +185 +184 +182 +183 +179 +179 +178 +175 +175 +173 +173 +173 +169 +169 +164 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +130 +129 +125 +125 +125 +120 +120 +115 +116 +116 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +69 +68 +64 +64 +58 +59 +54 +55 +55 +50 +51 +47 +47 +47 +42 +43 +43 +43 +43 +41 +41 +37 +36 +37 +33 +32 +31 +31 +28 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +16 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +13 +14 +14 +14 +14 +13 +13 +14 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +14 +13 +13 +12 +15 +15 +17 +17 +20 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +46 +51 +51 +55 +54 +54 +58 +59 +65 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +91 +96 +96 +100 +100 +106 +106 +106 +109 +109 +115 +115 +115 +119 +119 +120 +119 +119 +125 +126 +129 +130 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +182 +182 +183 +185 +185 +188 +188 +189 +190 +191 +194 +194 +194 +197 +196 +198 +198 +198 +200 +200 +200 +201 +201 +202 +202 +205 +204 +204 +204 +204 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +200 +200 +200 +200 +200 +198 +198 +197 +197 +196 +194 +195 +191 +190 +190 +189 +188 +185 +184 +184 +182 +183 +179 +179 +179 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +140 +139 +133 +133 +134 +129 +129 +125 +126 +120 +119 +119 +116 +115 +110 +110 +110 +106 +106 +106 +106 +105 +100 +100 +96 +95 +96 +90 +90 +86 +86 +84 +82 +82 +76 +77 +72 +72 +72 +68 +69 +64 +64 +64 +58 +58 +59 +58 +59 +54 +54 +50 +51 +51 +47 +47 +43 +42 +43 +41 +40 +37 +37 +32 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +16 +15 +14 +13 +13 +12 +13 +14 +13 +13 +13 +14 +13 +14 +14 +14 +14 +13 +13 +14 +13 +14 +14 +14 +13 +14 +13 +14 +14 +14 +14 +13 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +36 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +51 +55 +55 +54 +59 +58 +64 +64 +65 +68 +68 +72 +72 +73 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +100 +100 +100 +106 +106 +110 +110 +110 +116 +116 +120 +119 +122 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +166 +169 +169 +173 +173 +175 +175 +175 +179 +178 +183 +183 +182 +184 +185 +189 +189 +188 +191 +191 +195 +194 +195 +196 +197 +198 +198 +200 +200 +201 +200 +200 +202 +202 +202 +204 +205 +204 +204 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +207 +205 +204 +204 +204 +204 +202 +202 +202 +200 +200 +200 +200 +200 +199 +198 +197 +196 +196 +194 +195 +190 +190 +191 +188 +189 +185 +184 +183 +183 +182 +179 +179 +175 +175 +175 +173 +173 +169 +169 +168 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +140 +139 +139 +133 +133 +129 +129 +129 +126 +125 +125 +125 +125 +119 +120 +116 +116 +115 +115 +116 +110 +110 +108 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +81 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +60 +59 +58 +54 +54 +50 +50 +50 +46 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +22 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +13 +13 +13 +13 +14 +13 +14 +13 +14 +14 +13 +13 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +46 +50 +50 +51 +54 +54 +59 +58 +65 +64 +64 +69 +68 +72 +72 +72 +76 +76 +82 +82 +82 +87 +86 +90 +90 +90 +95 +96 +100 +100 +101 +106 +106 +109 +110 +115 +116 +115 +120 +120 +126 +125 +126 +129 +130 +129 +129 +130 +133 +133 +139 +139 +139 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +182 +183 +183 +184 +185 +188 +189 +191 +190 +191 +194 +194 +197 +196 +196 +198 +198 +200 +200 +200 +200 +200 +202 +202 +203 +204 +204 +204 +205 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +207 +206 +204 +204 +205 +205 +205 +202 +202 +202 +200 +201 +200 +200 +200 +198 +199 +197 +197 +195 +194 +194 +191 +190 +188 +188 +188 +184 +184 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +123 +119 +119 +116 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +73 +73 +72 +68 +68 +65 +64 +64 +58 +59 +55 +55 +55 +51 +51 +47 +46 +47 +43 +43 +41 +41 +41 +37 +36 +32 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +14 +14 +13 +13 +13 +14 +14 +13 +13 +13 +13 +13 +13 +14 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +50 +51 +50 +54 +54 +58 +58 +58 +64 +64 +64 +64 +64 +68 +68 +72 +72 +72 +75 +76 +82 +82 +82 +86 +86 +90 +90 +95 +96 +96 +100 +100 +106 +106 +106 +110 +110 +110 +110 +110 +116 +116 +119 +120 +120 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +164 +165 +169 +169 +169 +173 +173 +175 +175 +178 +179 +178 +182 +183 +184 +185 +184 +189 +188 +190 +190 +190 +194 +194 +197 +196 +197 +199 +199 +200 +201 +201 +200 +201 +202 +202 +205 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +207 +207 +207 +206 +206 +206 +206 +207 +205 +204 +205 +204 +204 +202 +202 +201 +201 +200 +200 +200 +198 +198 +198 +197 +196 +194 +194 +194 +190 +190 +188 +189 +189 +184 +185 +182 +183 +183 +179 +178 +175 +175 +172 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +141 +133 +133 +129 +130 +125 +125 +125 +119 +120 +116 +116 +116 +110 +110 +110 +110 +109 +106 +106 +100 +100 +100 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +69 +64 +65 +59 +59 +59 +54 +55 +50 +50 +51 +47 +46 +43 +43 +40 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +13 +13 +13 +14 +14 +13 +14 +13 +14 +14 +13 +14 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +15 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +32 +33 +33 +37 +37 +40 +41 +41 +43 +43 +47 +47 +47 +51 +51 +54 +55 +55 +59 +58 +64 +64 +65 +69 +68 +72 +72 +74 +76 +76 +82 +82 +85 +86 +86 +90 +90 +96 +96 +96 +99 +100 +100 +100 +100 +106 +106 +109 +110 +110 +116 +116 +119 +119 +123 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +173 +173 +173 +175 +174 +179 +178 +179 +182 +183 +185 +184 +184 +188 +188 +191 +191 +190 +195 +195 +196 +196 +197 +198 +198 +200 +200 +200 +200 +200 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +207 +207 +206 +207 +206 +206 +206 +207 +207 +206 +205 +204 +205 +204 +204 +204 +204 +202 +203 +202 +200 +200 +200 +200 +200 +198 +198 +196 +197 +196 +195 +195 +191 +190 +191 +188 +188 +184 +185 +182 +183 +183 +178 +179 +175 +175 +175 +173 +173 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +154 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +129 +129 +129 +125 +125 +119 +119 +120 +115 +115 +109 +110 +106 +106 +106 +100 +100 +96 +95 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +69 +64 +64 +58 +58 +55 +54 +54 +51 +50 +47 +47 +47 +43 +43 +41 +40 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +26 +25 +25 +21 +21 +20 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +14 +13 +13 +14 +13 +13 +14 +13 +13 +13 +14 +14 +13 +14 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +51 +54 +54 +58 +59 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +76 +77 +82 +82 +86 +86 +86 +90 +90 +96 +96 +100 +100 +100 +106 +105 +110 +110 +110 +116 +115 +119 +119 +120 +125 +125 +130 +129 +130 +133 +133 +139 +139 +140 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +168 +169 +173 +172 +175 +175 +175 +179 +179 +183 +182 +183 +184 +184 +189 +189 +190 +190 +190 +195 +195 +196 +197 +196 +198 +198 +200 +200 +200 +200 +200 +202 +202 +202 +204 +204 +204 +204 +204 +206 +207 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +204 +205 +204 +204 +205 +202 +202 +203 +200 +201 +200 +200 +201 +198 +199 +196 +197 +195 +195 +194 +190 +190 +188 +189 +188 +185 +185 +184 +185 +184 +182 +182 +179 +179 +179 +175 +175 +173 +173 +171 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +147 +147 +147 +143 +143 +139 +139 +140 +133 +133 +130 +129 +126 +125 +125 +119 +119 +115 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +72 +72 +72 +68 +68 +65 +64 +64 +58 +58 +55 +54 +55 +50 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +20 +19 +19 +17 +17 +15 +15 +15 +16 +15 +13 +13 +13 +12 +14 +14 +13 +14 +13 +13 +14 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +13 +14 +14 +14 +13 +13 +14 +14 +14 +13 +13 +15 +15 +17 +16 +17 +19 +19 +21 +21 +21 +25 +25 +25 +25 +25 +27 +27 +31 +31 +31 +32 +33 +37 +37 +39 +41 +41 +43 +43 +47 +47 +47 +51 +50 +54 +56 +54 +58 +58 +59 +58 +59 +65 +64 +68 +69 +68 +73 +72 +77 +77 +81 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +105 +107 +110 +109 +110 +115 +115 +119 +120 +120 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +179 +179 +178 +183 +183 +185 +185 +185 +188 +188 +190 +191 +191 +194 +194 +197 +197 +196 +198 +198 +200 +200 +201 +200 +200 +202 +202 +205 +205 +205 +204 +205 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +207 +204 +204 +204 +204 +204 +202 +202 +200 +200 +200 +200 +200 +198 +199 +198 +196 +196 +197 +197 +197 +194 +194 +190 +191 +191 +188 +189 +185 +184 +183 +183 +183 +179 +179 +175 +175 +174 +173 +173 +168 +169 +169 +165 +165 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +145 +143 +143 +139 +139 +133 +133 +133 +129 +129 +126 +125 +125 +119 +119 +116 +116 +116 +110 +109 +106 +106 +106 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +73 +72 +68 +68 +64 +64 +64 +59 +58 +54 +55 +55 +51 +50 +47 +46 +44 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +12 +13 +13 +14 +13 +14 +13 +13 +14 +14 +13 +13 +14 +13 +13 +13 +13 +14 +13 +14 +13 +14 +13 +14 +14 +14 +13 +13 +13 +13 +15 +15 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +32 +33 +33 +37 +37 +41 +41 +41 +42 +43 +43 +43 +43 +46 +47 +50 +51 +50 +55 +54 +58 +58 +64 +64 +64 +68 +68 +72 +72 +73 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +115 +116 +116 +119 +119 +125 +126 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +152 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +172 +173 +175 +175 +179 +179 +179 +182 +183 +185 +184 +185 +189 +189 +191 +191 +191 +194 +195 +197 +196 +199 +199 +198 +200 +200 +200 +200 +201 +203 +202 +204 +204 +204 +204 +204 +206 +206 +207 +206 +207 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +204 +205 +205 +204 +204 +202 +203 +200 +200 +200 +201 +200 +199 +199 +198 +197 +197 +194 +194 +190 +191 +190 +188 +189 +185 +185 +184 +183 +182 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +167 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +134 +129 +130 +130 +125 +125 +120 +119 +115 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +95 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +64 +65 +65 +58 +58 +55 +54 +54 +51 +50 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +13 +12 +13 +14 +13 +14 +13 +14 +13 +14 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +13 +14 +13 +13 +12 +15 +16 +17 +17 +19 +20 +19 +21 +21 +25 +25 +25 +27 +27 +27 +27 +27 +31 +31 +33 +32 +33 +37 +37 +41 +41 +42 +43 +43 +47 +47 +51 +51 +50 +55 +54 +58 +58 +59 +65 +65 +68 +69 +68 +72 +72 +76 +76 +76 +83 +82 +86 +86 +89 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +110 +110 +116 +116 +119 +119 +120 +125 +125 +129 +129 +130 +133 +133 +139 +139 +144 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +174 +175 +175 +179 +179 +183 +183 +185 +184 +185 +189 +189 +190 +191 +190 +194 +194 +196 +197 +196 +198 +199 +201 +201 +200 +200 +201 +202 +203 +203 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +205 +204 +204 +202 +202 +201 +200 +201 +200 +200 +198 +198 +198 +197 +197 +194 +194 +194 +190 +190 +191 +191 +191 +189 +189 +185 +185 +185 +182 +183 +179 +179 +175 +175 +175 +173 +173 +168 +169 +169 +164 +165 +161 +161 +161 +158 +157 +151 +151 +151 +147 +147 +144 +143 +143 +139 +139 +133 +134 +130 +130 +129 +125 +126 +119 +120 +119 +115 +116 +110 +110 +110 +106 +106 +100 +99 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +77 +77 +72 +72 +72 +72 +72 +69 +69 +64 +64 +64 +59 +59 +55 +55 +55 +51 +50 +47 +46 +47 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +30 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +14 +14 +13 +14 +14 +13 +14 +14 +13 +13 +13 +13 +13 +14 +14 +13 +14 +13 +13 +13 +13 +13 +13 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +46 +46 +51 +51 +54 +54 +55 +59 +58 +64 +65 +65 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +109 +115 +116 +116 +119 +119 +126 +125 +130 +129 +130 +133 +133 +139 +140 +139 +143 +143 +143 +143 +143 +147 +147 +151 +151 +151 +156 +157 +161 +161 +161 +165 +165 +169 +169 +173 +172 +173 +175 +175 +179 +178 +179 +183 +183 +185 +184 +184 +188 +188 +191 +190 +190 +194 +195 +196 +196 +197 +198 +198 +201 +200 +201 +200 +200 +203 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +203 +200 +200 +200 +200 +201 +200 +200 +200 +198 +198 +196 +196 +196 +194 +194 +190 +190 +189 +188 +189 +184 +184 +183 +182 +182 +178 +178 +175 +174 +175 +173 +172 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +148 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +126 +126 +120 +120 +119 +115 +115 +110 +109 +110 +106 +106 +100 +100 +96 +96 +95 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +73 +68 +68 +68 +65 +65 +59 +59 +59 +55 +55 +51 +50 +47 +46 +47 +43 +43 +41 +41 +41 +37 +36 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +22 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +14 +14 +14 +14 +13 +14 +13 +13 +13 +13 +14 +14 +14 +14 +13 +14 +14 +13 +13 +14 +13 +13 +13 +13 +13 +15 +15 +15 +17 +17 +20 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +31 +32 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +51 +54 +54 +58 +59 +58 +65 +64 +68 +68 +69 +72 +73 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +105 +106 +110 +110 +110 +116 +115 +120 +120 +119 +125 +125 +130 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +148 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +174 +178 +179 +183 +183 +183 +185 +184 +189 +189 +189 +191 +191 +194 +194 +196 +197 +197 +199 +198 +200 +200 +200 +201 +201 +200 +201 +200 +202 +202 +205 +204 +204 +204 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +205 +204 +205 +204 +203 +202 +202 +201 +200 +200 +200 +198 +199 +198 +197 +196 +194 +195 +195 +190 +191 +189 +188 +188 +185 +185 +183 +182 +183 +178 +179 +175 +175 +174 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +140 +139 +139 +134 +133 +130 +129 +129 +125 +125 +120 +120 +116 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +72 +72 +68 +68 +65 +64 +64 +59 +58 +54 +55 +55 +51 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +34 +31 +31 +27 +27 +25 +26 +25 +21 +21 +19 +19 +19 +17 +17 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +14 +14 +14 +13 +14 +14 +14 +13 +13 +13 +13 +14 +14 +13 +14 +13 +14 +14 +13 +13 +14 +13 +13 +13 +14 +13 +13 +15 +15 +17 +17 +18 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +32 +33 +37 +37 +41 +41 +43 +43 +42 +47 +47 +50 +50 +51 +55 +55 +59 +58 +59 +65 +64 +68 +68 +69 +73 +72 +76 +76 +76 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +105 +106 +110 +110 +110 +116 +116 +119 +120 +120 +126 +126 +129 +130 +129 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +178 +179 +182 +182 +185 +185 +185 +188 +188 +190 +191 +191 +195 +194 +195 +194 +195 +196 +197 +199 +198 +198 +201 +200 +200 +201 +201 +202 +202 +205 +204 +204 +204 +204 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +207 +204 +204 +205 +204 +205 +202 +202 +200 +200 +200 +201 +200 +199 +198 +199 +196 +196 +195 +194 +194 +191 +190 +188 +189 +189 +185 +185 +183 +183 +179 +178 +179 +174 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +134 +133 +134 +130 +129 +125 +126 +125 +119 +119 +116 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +97 +90 +90 +86 +86 +83 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +65 +65 +58 +58 +54 +55 +55 +51 +50 +47 +47 +47 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +18 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +14 +13 +14 +14 +13 +14 +13 +14 +13 +13 +14 +13 +13 +13 +14 +14 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +20 +21 +21 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +40 +43 +43 +43 +47 +47 +50 +50 +50 +54 +55 +59 +59 +58 +65 +65 +69 +68 +73 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +105 +110 +110 +110 +115 +116 +119 +119 +126 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +162 +161 +165 +165 +168 +169 +173 +173 +172 +174 +175 +178 +178 +179 +183 +182 +183 +183 +182 +185 +184 +189 +189 +189 +190 +190 +195 +194 +195 +197 +197 +198 +198 +200 +200 +200 +200 +200 +203 +202 +202 +204 +204 +204 +204 +204 +204 +204 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +203 +200 +200 +200 +200 +201 +198 +199 +199 +196 +196 +194 +195 +190 +190 +190 +188 +188 +188 +188 +189 +184 +184 +183 +183 +182 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +150 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +119 +120 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +77 +76 +72 +72 +68 +68 +69 +65 +64 +58 +58 +55 +55 +54 +51 +50 +47 +47 +47 +43 +43 +43 +42 +43 +41 +41 +37 +37 +36 +33 +33 +31 +31 +29 +27 +27 +25 +25 +20 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +16 +15 +16 +15 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +14 +14 +14 +14 +14 +14 +13 +13 +13 +14 +13 +14 +13 +13 +13 +13 +13 +14 +13 +13 +15 +15 +16 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +42 +47 +47 +51 +50 +51 +55 +54 +58 +58 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +95 +101 +100 +100 +106 +106 +110 +109 +110 +115 +116 +119 +120 +120 +126 +126 +129 +129 +129 +133 +133 +139 +140 +140 +144 +144 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +174 +175 +178 +179 +182 +182 +183 +184 +185 +188 +189 +190 +190 +191 +195 +195 +196 +196 +197 +198 +198 +199 +198 +198 +201 +201 +200 +200 +200 +202 +203 +204 +204 +205 +204 +205 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +204 +205 +204 +204 +205 +202 +202 +200 +201 +200 +200 +200 +198 +199 +196 +196 +197 +195 +194 +190 +190 +190 +189 +188 +185 +184 +185 +182 +183 +179 +179 +178 +174 +175 +172 +173 +169 +168 +169 +165 +165 +161 +160 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +134 +133 +129 +129 +125 +126 +120 +119 +120 +116 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +83 +76 +76 +72 +72 +68 +68 +68 +64 +65 +59 +58 +58 +54 +54 +54 +54 +55 +50 +50 +47 +47 +47 +42 +43 +41 +41 +39 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +22 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +14 +14 +14 +14 +14 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +50 +55 +54 +54 +58 +58 +64 +64 +64 +68 +68 +72 +72 +73 +76 +76 +82 +82 +87 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +116 +116 +120 +119 +125 +125 +126 +130 +129 +133 +133 +133 +134 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +170 +173 +173 +175 +174 +178 +179 +178 +183 +183 +185 +185 +185 +189 +188 +189 +188 +188 +190 +190 +194 +195 +195 +197 +197 +199 +198 +200 +200 +200 +200 +200 +202 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +204 +204 +205 +205 +204 +202 +203 +202 +201 +201 +201 +200 +200 +198 +198 +196 +196 +196 +194 +194 +191 +190 +191 +188 +188 +184 +184 +183 +183 +182 +179 +179 +175 +175 +175 +173 +173 +169 +168 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +120 +120 +120 +116 +116 +110 +110 +110 +106 +105 +100 +100 +100 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +73 +72 +72 +72 +72 +68 +68 +64 +64 +64 +58 +58 +55 +55 +54 +50 +50 +46 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +19 +19 +19 +17 +17 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +13 +13 +14 +14 +13 +14 +14 +14 +14 +14 +13 +14 +14 +13 +13 +14 +14 +13 +13 +13 +13 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +51 +55 +54 +59 +58 +65 +64 +65 +68 +68 +73 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +101 +106 +106 +110 +110 +115 +115 +115 +120 +119 +125 +125 +126 +129 +130 +129 +129 +129 +134 +133 +139 +140 +139 +143 +143 +147 +147 +148 +151 +151 +157 +156 +161 +160 +161 +165 +165 +169 +169 +169 +173 +173 +173 +173 +173 +175 +175 +179 +178 +179 +183 +183 +184 +185 +188 +189 +188 +190 +190 +194 +195 +195 +196 +196 +199 +198 +198 +200 +200 +201 +200 +200 +202 +202 +204 +204 +205 +204 +205 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +204 +204 +204 +205 +204 +203 +203 +200 +200 +201 +201 +200 +198 +198 +197 +197 +196 +194 +195 +190 +191 +191 +188 +189 +185 +185 +185 +183 +183 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +162 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +126 +119 +119 +116 +115 +109 +110 +109 +106 +106 +100 +100 +100 +96 +96 +96 +97 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +75 +72 +72 +69 +69 +65 +64 +64 +58 +58 +55 +55 +55 +51 +50 +50 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +27 +26 +26 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +14 +15 +15 +13 +13 +12 +13 +13 +13 +13 +14 +14 +14 +13 +14 +14 +14 +13 +14 +14 +14 +13 +13 +13 +13 +13 +14 +14 +14 +14 +13 +13 +14 +13 +13 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +44 +43 +48 +46 +47 +50 +51 +54 +54 +54 +59 +58 +65 +64 +65 +68 +68 +72 +72 +72 +77 +77 +82 +82 +83 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +110 +110 +110 +115 +116 +119 +120 +119 +125 +125 +129 +130 +131 +133 +133 +139 +140 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +157 +157 +157 +161 +161 +165 +165 +164 +169 +169 +172 +173 +174 +175 +175 +179 +179 +183 +183 +183 +185 +184 +188 +189 +188 +190 +190 +195 +195 +195 +196 +197 +198 +198 +199 +200 +201 +200 +200 +202 +202 +202 +204 +205 +204 +205 +205 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +207 +204 +205 +205 +204 +202 +202 +202 +200 +200 +201 +200 +200 +198 +199 +197 +196 +196 +194 +194 +191 +190 +190 +188 +188 +184 +185 +184 +183 +183 +178 +179 +175 +175 +175 +172 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +148 +147 +143 +143 +143 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +119 +120 +116 +115 +116 +116 +115 +110 +110 +105 +106 +106 +100 +100 +96 +96 +93 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +68 +68 +69 +65 +64 +58 +58 +58 +54 +54 +50 +50 +47 +47 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +13 +13 +14 +14 +13 +14 +14 +14 +13 +13 +13 +14 +13 +14 +14 +14 +13 +13 +13 +14 +13 +14 +13 +13 +13 +13 +15 +16 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +42 +43 +47 +46 +47 +50 +50 +54 +54 +55 +59 +59 +64 +65 +65 +68 +68 +72 +72 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +99 +99 +105 +106 +106 +110 +109 +115 +115 +117 +119 +119 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +164 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +179 +182 +183 +185 +184 +185 +189 +188 +190 +190 +191 +195 +195 +196 +196 +198 +198 +199 +200 +200 +200 +200 +200 +201 +200 +203 +202 +202 +204 +204 +205 +204 +205 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +202 +200 +201 +200 +201 +200 +198 +198 +196 +196 +197 +195 +195 +191 +190 +189 +188 +189 +184 +185 +182 +183 +183 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +133 +133 +133 +129 +129 +126 +125 +126 +119 +119 +115 +116 +113 +110 +110 +106 +106 +100 +99 +100 +96 +96 +90 +91 +90 +86 +86 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +65 +64 +64 +58 +59 +54 +54 +55 +51 +50 +47 +47 +47 +43 +42 +40 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +17 +17 +18 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +14 +14 +14 +14 +13 +13 +13 +14 +14 +14 +14 +14 +13 +14 +14 +13 +14 +14 +13 +13 +14 +13 +13 +13 +12 +15 +15 +18 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +30 +33 +33 +37 +37 +37 +41 +41 +43 +43 +42 +47 +46 +50 +50 +55 +55 +55 +59 +58 +64 +64 +64 +68 +69 +73 +72 +72 +76 +76 +82 +82 +83 +86 +86 +90 +90 +92 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +115 +115 +119 +119 +120 +119 +119 +125 +125 +129 +130 +130 +133 +133 +139 +139 +142 +143 +143 +147 +147 +150 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +174 +175 +178 +179 +183 +182 +183 +185 +185 +188 +189 +191 +191 +191 +194 +194 +197 +196 +197 +198 +198 +200 +200 +201 +201 +200 +202 +202 +203 +204 +204 +204 +204 +207 +206 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +204 +204 +204 +205 +204 +202 +202 +203 +200 +201 +200 +201 +199 +198 +198 +196 +196 +194 +195 +194 +190 +190 +189 +188 +188 +185 +185 +183 +182 +182 +179 +179 +175 +175 +176 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +130 +130 +127 +126 +125 +119 +119 +115 +116 +115 +109 +110 +106 +106 +106 +100 +100 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +77 +76 +72 +72 +68 +68 +68 +64 +64 +59 +59 +59 +55 +55 +51 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +33 +32 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +16 +17 +17 +15 +15 +15 +15 +15 +12 +13 +12 +13 +14 +13 +14 +13 +13 +14 +14 +13 +13 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +31 +31 +31 +31 +33 +33 +37 +37 +38 +41 +41 +43 +43 +47 +47 +47 +51 +51 +55 +55 +55 +58 +59 +64 +65 +64 +68 +68 +72 +72 +72 +76 +77 +82 +82 +83 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +110 +110 +110 +116 +115 +119 +120 +120 +125 +125 +129 +129 +132 +133 +133 +139 +139 +144 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +172 +173 +175 +175 +176 +178 +179 +183 +183 +184 +184 +185 +188 +189 +190 +191 +190 +194 +195 +197 +196 +196 +198 +199 +201 +200 +200 +201 +201 +202 +203 +205 +205 +205 +204 +204 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +204 +205 +204 +204 +204 +202 +202 +201 +200 +201 +200 +200 +198 +199 +198 +197 +196 +196 +196 +196 +195 +195 +191 +190 +191 +189 +189 +185 +184 +185 +183 +183 +178 +179 +175 +174 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +144 +139 +139 +134 +134 +130 +129 +130 +125 +126 +120 +120 +119 +116 +115 +116 +116 +116 +110 +110 +105 +106 +106 +100 +100 +96 +96 +91 +90 +89 +86 +86 +82 +82 +83 +76 +76 +72 +72 +73 +68 +68 +64 +65 +65 +58 +58 +54 +55 +55 +51 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +12 +14 +13 +13 +13 +14 +14 +14 +13 +14 +13 +14 +14 +13 +14 +14 +14 +14 +13 +13 +13 +14 +14 +13 +14 +13 +13 +13 +12 +15 +15 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +26 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +43 +43 +43 +47 +47 +51 +51 +51 +55 +54 +58 +59 +61 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +105 +106 +106 +110 +110 +116 +115 +119 +119 +120 +125 +126 +129 +130 +129 +133 +134 +139 +139 +140 +143 +143 +147 +147 +147 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +178 +183 +182 +183 +184 +185 +189 +189 +189 +190 +191 +194 +194 +196 +196 +196 +198 +198 +200 +201 +200 +200 +200 +202 +203 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +207 +207 +207 +207 +206 +207 +206 +206 +206 +206 +207 +207 +206 +204 +205 +204 +204 +204 +203 +202 +201 +200 +200 +201 +200 +198 +198 +200 +196 +196 +194 +195 +191 +191 +191 +189 +188 +185 +185 +184 +182 +183 +183 +182 +182 +179 +178 +175 +175 +174 +173 +173 +169 +169 +169 +165 +165 +161 +161 +158 +157 +157 +151 +151 +147 +147 +147 +143 +143 +143 +143 +144 +133 +133 +129 +129 +130 +125 +125 +119 +120 +117 +115 +116 +110 +109 +106 +106 +106 +100 +100 +96 +96 +95 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +65 +64 +64 +59 +58 +55 +54 +54 +51 +50 +47 +46 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +26 +25 +25 +21 +21 +19 +19 +19 +18 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +13 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +13 +13 +14 +13 +14 +14 +13 +13 +14 +13 +13 +13 +15 +15 +16 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +31 +31 +31 +33 +33 +36 +37 +37 +41 +41 +43 +43 +44 +47 +47 +51 +51 +54 +54 +54 +58 +59 +58 +58 +59 +64 +64 +64 +64 +65 +69 +69 +72 +72 +72 +77 +76 +82 +83 +86 +87 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +116 +119 +120 +125 +125 +126 +129 +129 +134 +133 +138 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +183 +183 +182 +185 +185 +188 +188 +188 +190 +190 +190 +190 +191 +194 +195 +197 +197 +196 +198 +198 +201 +200 +201 +200 +200 +202 +202 +205 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +205 +204 +204 +202 +202 +200 +201 +200 +200 +200 +198 +198 +199 +196 +196 +195 +194 +194 +190 +191 +188 +189 +188 +184 +185 +183 +182 +181 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +161 +161 +160 +158 +157 +151 +151 +152 +147 +147 +143 +143 +141 +139 +139 +134 +133 +129 +129 +129 +125 +126 +120 +120 +120 +115 +116 +110 +110 +110 +106 +106 +100 +100 +100 +95 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +69 +69 +68 +64 +64 +58 +58 +58 +54 +55 +50 +50 +51 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +13 +13 +13 +14 +14 +14 +14 +14 +14 +14 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +14 +13 +14 +14 +13 +13 +14 +13 +13 +15 +15 +15 +17 +17 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +28 +31 +31 +33 +33 +37 +37 +37 +41 +41 +41 +41 +40 +43 +43 +42 +43 +43 +47 +47 +50 +51 +51 +55 +54 +59 +58 +63 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +109 +115 +115 +116 +119 +119 +125 +126 +125 +129 +129 +133 +133 +134 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +165 +165 +165 +168 +169 +173 +173 +173 +175 +175 +179 +179 +178 +182 +183 +184 +185 +184 +188 +189 +191 +190 +191 +194 +194 +197 +197 +199 +198 +199 +200 +200 +200 +200 +201 +202 +202 +204 +204 +204 +204 +205 +207 +207 +206 +206 +206 +207 +206 +207 +206 +206 +207 +206 +207 +206 +206 +204 +204 +204 +204 +205 +202 +202 +202 +202 +202 +200 +200 +200 +201 +199 +198 +196 +196 +197 +194 +194 +190 +191 +189 +188 +188 +185 +184 +182 +183 +183 +178 +179 +179 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +134 +133 +129 +130 +125 +126 +125 +119 +120 +115 +116 +110 +109 +109 +106 +106 +100 +100 +99 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +68 +68 +65 +64 +59 +59 +59 +54 +55 +51 +51 +51 +47 +47 +43 +43 +43 +41 +41 +36 +37 +36 +33 +33 +31 +31 +31 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +14 +13 +13 +14 +14 +14 +14 +14 +13 +13 +13 +14 +14 +13 +14 +14 +14 +13 +13 +14 +13 +13 +13 +13 +14 +14 +13 +13 +16 +16 +15 +17 +17 +19 +19 +22 +21 +21 +25 +25 +27 +27 +27 +31 +31 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +44 +47 +46 +50 +50 +50 +51 +51 +54 +54 +59 +59 +59 +64 +65 +68 +69 +68 +72 +72 +77 +76 +76 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +116 +119 +119 +119 +125 +125 +129 +129 +129 +133 +133 +139 +139 +144 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +164 +165 +169 +169 +169 +173 +173 +174 +175 +175 +179 +179 +183 +183 +185 +184 +185 +189 +189 +191 +190 +190 +195 +195 +196 +196 +197 +198 +199 +201 +201 +201 +201 +201 +202 +202 +203 +204 +204 +205 +204 +206 +207 +207 +206 +206 +206 +206 +206 +206 +207 +207 +207 +207 +206 +206 +207 +206 +206 +204 +205 +204 +204 +203 +202 +202 +200 +200 +200 +200 +201 +198 +198 +196 +197 +197 +195 +194 +195 +194 +194 +190 +190 +188 +189 +189 +185 +185 +182 +182 +179 +179 +179 +175 +175 +173 +173 +173 +168 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +137 +133 +133 +130 +130 +126 +125 +126 +120 +120 +115 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +83 +82 +82 +76 +76 +72 +72 +72 +68 +68 +69 +68 +68 +65 +64 +58 +58 +59 +55 +55 +50 +51 +51 +47 +47 +42 +42 +41 +40 +41 +37 +37 +33 +33 +33 +31 +31 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +20 +17 +17 +15 +15 +15 +14 +15 +13 +13 +12 +13 +13 +14 +14 +13 +14 +14 +13 +13 +13 +13 +14 +13 +14 +14 +13 +14 +14 +14 +13 +14 +14 +13 +13 +14 +13 +14 +14 +13 +13 +13 +15 +15 +15 +15 +15 +17 +17 +17 +19 +19 +21 +21 +23 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +50 +54 +54 +59 +58 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +115 +116 +116 +119 +120 +125 +125 +125 +129 +129 +134 +133 +133 +139 +140 +143 +143 +143 +147 +147 +151 +151 +152 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +182 +185 +185 +184 +189 +189 +191 +191 +191 +194 +194 +196 +196 +199 +198 +198 +200 +200 +200 +200 +200 +203 +203 +203 +202 +202 +205 +205 +204 +204 +204 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +204 +204 +204 +204 +204 +205 +204 +204 +202 +202 +201 +200 +201 +200 +200 +198 +198 +196 +197 +197 +194 +195 +191 +191 +190 +189 +188 +184 +185 +184 +182 +182 +179 +178 +178 +175 +174 +173 +172 +173 +169 +169 +165 +165 +160 +161 +160 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +134 +133 +129 +130 +125 +125 +125 +120 +119 +115 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +65 +65 +59 +59 +59 +55 +54 +55 +54 +54 +50 +51 +51 +51 +50 +47 +47 +43 +42 +43 +41 +40 +37 +37 +38 +33 +33 +31 +30 +28 +27 +27 +25 +25 +21 +21 +21 +19 +19 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +14 +13 +13 +14 +14 +14 +14 +13 +13 +13 +14 +14 +14 +13 +14 +14 +14 +14 +13 +13 +13 +14 +13 +14 +13 +14 +14 +14 +14 +14 +13 +13 +15 +15 +16 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +32 +37 +37 +40 +41 +41 +43 +43 +47 +47 +46 +50 +51 +54 +54 +55 +59 +59 +65 +65 +64 +68 +68 +72 +72 +73 +76 +76 +82 +82 +85 +86 +86 +90 +89 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +115 +116 +119 +119 +125 +126 +126 +129 +129 +133 +133 +140 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +182 +183 +183 +184 +184 +188 +188 +188 +190 +190 +191 +191 +190 +194 +194 +196 +197 +197 +199 +198 +200 +200 +200 +201 +200 +202 +202 +204 +205 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +207 +206 +206 +206 +205 +204 +204 +204 +205 +202 +202 +202 +200 +200 +200 +200 +201 +198 +198 +196 +197 +196 +195 +194 +190 +190 +191 +188 +189 +184 +185 +182 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +125 +126 +125 +119 +120 +115 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +73 +72 +68 +68 +64 +64 +64 +58 +58 +54 +55 +55 +51 +51 +47 +47 +42 +43 +43 +41 +41 +37 +37 +37 +33 +33 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +20 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +14 +14 +14 +14 +14 +13 +14 +13 +14 +14 +14 +14 +13 +14 +13 +13 +13 +13 +14 +13 +13 +14 +14 +13 +13 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +51 +54 +54 +58 +58 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +95 +96 +96 +100 +100 +106 +105 +109 +110 +110 +116 +116 +119 +119 +119 +125 +125 +129 +129 +129 +133 +133 +139 +140 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +168 +169 +172 +173 +175 +175 +175 +179 +179 +183 +182 +183 +184 +185 +189 +188 +190 +190 +191 +194 +194 +196 +196 +197 +198 +199 +200 +200 +200 +200 +201 +200 +201 +200 +202 +202 +204 +204 +204 +204 +205 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +203 +200 +200 +201 +201 +201 +199 +198 +196 +196 +197 +194 +194 +190 +190 +191 +189 +189 +184 +184 +184 +183 +182 +179 +179 +179 +175 +175 +174 +173 +173 +169 +169 +165 +165 +162 +161 +161 +158 +157 +151 +151 +151 +147 +147 +143 +143 +144 +139 +139 +133 +134 +133 +130 +129 +126 +125 +125 +120 +119 +116 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +68 +69 +64 +64 +58 +58 +58 +54 +55 +51 +51 +51 +47 +47 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +32 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +18 +17 +17 +17 +17 +15 +15 +15 +15 +16 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +14 +14 +13 +14 +14 +13 +14 +13 +13 +14 +13 +14 +14 +14 +13 +13 +14 +13 +13 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +40 +43 +43 +47 +46 +47 +51 +51 +54 +54 +55 +58 +58 +65 +64 +65 +68 +69 +72 +72 +72 +76 +76 +82 +82 +83 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +105 +110 +110 +115 +116 +116 +119 +120 +125 +125 +125 +129 +129 +133 +133 +133 +140 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +161 +160 +161 +165 +165 +169 +169 +169 +173 +173 +175 +174 +176 +179 +179 +183 +183 +185 +184 +185 +188 +188 +190 +191 +191 +195 +194 +195 +195 +194 +196 +196 +199 +199 +198 +200 +200 +200 +200 +202 +203 +202 +204 +204 +204 +204 +204 +206 +207 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +204 +205 +204 +204 +204 +202 +202 +200 +201 +200 +200 +200 +198 +198 +199 +199 +198 +196 +196 +195 +194 +194 +190 +190 +189 +188 +188 +189 +189 +185 +185 +183 +182 +183 +179 +179 +175 +175 +174 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +144 +140 +139 +139 +133 +134 +129 +129 +130 +125 +126 +120 +120 +120 +116 +116 +110 +109 +110 +106 +106 +100 +100 +101 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +72 +72 +72 +67 +68 +64 +64 +64 +59 +59 +54 +54 +52 +50 +51 +46 +47 +42 +43 +43 +41 +41 +37 +37 +37 +33 +33 +33 +33 +33 +31 +31 +26 +27 +27 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +13 +13 +14 +14 +13 +14 +13 +13 +14 +13 +14 +13 +13 +14 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +20 +19 +21 +21 +25 +25 +28 +27 +27 +31 +31 +33 +33 +34 +37 +37 +41 +40 +40 +43 +43 +47 +47 +47 +50 +50 +54 +54 +55 +58 +58 +65 +64 +69 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +99 +100 +106 +106 +106 +110 +110 +116 +115 +119 +120 +119 +125 +126 +129 +129 +130 +133 +133 +140 +140 +139 +143 +143 +147 +147 +147 +151 +151 +157 +156 +158 +161 +161 +165 +164 +168 +169 +169 +173 +172 +175 +175 +175 +179 +179 +178 +178 +179 +183 +183 +184 +185 +185 +189 +189 +190 +190 +194 +195 +195 +196 +196 +198 +199 +198 +200 +200 +201 +200 +200 +202 +203 +205 +204 +204 +204 +204 +206 +207 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +205 +204 +204 +204 +204 +202 +202 +201 +200 +201 +201 +200 +199 +198 +199 +197 +197 +194 +195 +191 +190 +191 +189 +189 +185 +185 +184 +183 +182 +179 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +144 +143 +143 +139 +139 +134 +134 +134 +129 +129 +126 +125 +126 +119 +120 +116 +115 +116 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +86 +86 +86 +82 +82 +76 +77 +76 +72 +72 +68 +68 +66 +64 +64 +59 +59 +54 +55 +54 +50 +50 +47 +46 +47 +43 +43 +42 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +29 +27 +27 +25 +25 +21 +20 +21 +19 +19 +17 +17 +17 +15 +15 +14 +15 +15 +13 +13 +12 +13 +14 +14 +13 +13 +14 +14 +14 +14 +14 +14 +14 +13 +13 +14 +14 +13 +13 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +12 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +55 +55 +54 +58 +58 +64 +64 +64 +68 +69 +72 +72 +73 +76 +76 +82 +82 +82 +86 +86 +90 +90 +91 +96 +96 +100 +100 +106 +106 +106 +109 +110 +116 +116 +116 +119 +120 +120 +120 +119 +126 +126 +129 +129 +130 +133 +134 +139 +139 +141 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +182 +182 +183 +185 +185 +188 +188 +189 +191 +190 +194 +194 +194 +196 +197 +198 +198 +198 +201 +201 +200 +200 +200 +200 +201 +202 +202 +204 +204 +204 +204 +205 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +204 +204 +205 +205 +204 +202 +203 +201 +201 +200 +200 +200 +198 +199 +199 +196 +196 +195 +195 +194 +190 +190 +189 +189 +189 +184 +184 +183 +183 +182 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +129 +129 +130 +126 +125 +119 +119 +119 +116 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +91 +86 +86 +82 +83 +77 +76 +76 +72 +72 +72 +72 +72 +68 +68 +69 +68 +69 +64 +64 +58 +58 +59 +54 +55 +51 +50 +48 +47 +47 +43 +43 +41 +41 +41 +37 +36 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +13 +14 +13 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +13 +14 +14 +13 +14 +14 +14 +13 +13 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +26 +27 +27 +31 +31 +33 +33 +33 +37 +36 +41 +41 +41 +43 +43 +47 +47 +47 +50 +50 +54 +55 +55 +59 +59 +65 +64 +65 +68 +68 +72 +72 +76 +76 +76 +82 +82 +82 +82 +82 +86 +86 +86 +86 +86 +90 +90 +96 +95 +96 +100 +100 +106 +106 +107 +109 +110 +116 +115 +119 +119 +119 +126 +126 +129 +129 +130 +133 +133 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +153 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +182 +183 +185 +185 +185 +189 +189 +191 +191 +194 +195 +194 +196 +197 +198 +199 +198 +200 +201 +201 +200 +200 +202 +202 +204 +204 +204 +204 +204 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +203 +200 +200 +200 +200 +201 +198 +198 +199 +196 +196 +194 +195 +191 +191 +190 +189 +188 +185 +185 +184 +183 +183 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +139 +139 +139 +133 +133 +129 +129 +130 +126 +125 +119 +119 +117 +116 +116 +110 +110 +105 +106 +106 +100 +100 +96 +96 +96 +90 +90 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +71 +68 +68 +65 +64 +58 +59 +58 +55 +55 +51 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +28 +27 +26 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +13 +14 +14 +13 +13 +14 +13 +13 +14 +14 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +20 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +36 +41 +41 +43 +43 +43 +47 +47 +51 +50 +55 +55 +54 +58 +59 +64 +64 +64 +68 +68 +72 +72 +73 +76 +77 +82 +82 +82 +86 +86 +90 +90 +91 +96 +96 +100 +100 +105 +106 +106 +110 +110 +116 +115 +116 +119 +119 +119 +120 +120 +126 +125 +129 +129 +129 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +178 +178 +183 +182 +184 +185 +184 +188 +189 +190 +190 +191 +194 +195 +197 +197 +196 +198 +199 +200 +200 +200 +201 +200 +202 +202 +202 +204 +205 +204 +204 +207 +207 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +207 +206 +206 +204 +204 +204 +205 +205 +202 +202 +202 +200 +200 +200 +201 +199 +198 +198 +196 +197 +195 +195 +195 +190 +191 +189 +189 +188 +184 +185 +183 +182 +182 +179 +179 +175 +175 +174 +173 +173 +168 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +131 +129 +129 +125 +126 +119 +120 +120 +116 +116 +116 +116 +115 +110 +110 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +87 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +69 +64 +64 +58 +58 +59 +55 +54 +51 +50 +51 +47 +46 +43 +43 +40 +41 +41 +36 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +16 +15 +15 +15 +14 +13 +13 +12 +13 +13 +13 +14 +13 +13 +14 +14 +14 +14 +13 +14 +14 +14 +14 +14 +14 +14 +13 +13 +14 +13 +13 +14 +14 +14 +13 +13 +15 +16 +15 +18 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +41 +41 +41 +42 +43 +47 +46 +47 +51 +50 +50 +51 +51 +55 +55 +58 +58 +58 +65 +64 +68 +68 +69 +72 +72 +76 +77 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +116 +119 +119 +119 +125 +125 +129 +130 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +168 +169 +169 +173 +172 +175 +175 +175 +178 +178 +183 +183 +183 +185 +184 +189 +189 +188 +191 +190 +194 +194 +195 +196 +197 +198 +199 +200 +201 +200 +201 +200 +202 +203 +203 +204 +205 +204 +204 +204 +206 +206 +206 +207 +206 +207 +206 +206 +206 +207 +207 +206 +206 +206 +204 +204 +204 +204 +204 +202 +203 +202 +200 +200 +201 +200 +200 +200 +200 +198 +198 +198 +197 +197 +195 +194 +195 +190 +191 +189 +188 +185 +184 +184 +183 +182 +179 +179 +178 +174 +175 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +162 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +133 +134 +133 +129 +129 +125 +125 +125 +120 +119 +115 +116 +111 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +68 +68 +64 +64 +58 +58 +59 +55 +54 +50 +51 +51 +47 +47 +43 +43 +43 +41 +41 +36 +37 +37 +33 +32 +31 +30 +31 +27 +27 +25 +25 +22 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +14 +13 +13 +14 +14 +13 +13 +13 +14 +13 +14 +13 +13 +13 +13 +14 +14 +14 +13 +13 +14 +14 +14 +14 +13 +12 +15 +15 +18 +17 +17 +19 +19 +21 +21 +26 +25 +25 +27 +27 +31 +31 +31 +33 +33 +33 +33 +33 +37 +37 +41 +41 +41 +42 +43 +47 +47 +47 +51 +50 +55 +54 +58 +58 +59 +64 +64 +68 +68 +69 +72 +72 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +95 +96 +96 +100 +100 +106 +106 +105 +109 +110 +115 +115 +115 +119 +120 +125 +126 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +158 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +178 +179 +183 +183 +184 +184 +189 +188 +189 +191 +190 +194 +194 +194 +196 +196 +198 +199 +199 +200 +201 +200 +201 +201 +202 +202 +204 +204 +204 +204 +204 +207 +206 +207 +206 +207 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +204 +204 +204 +204 +204 +203 +202 +201 +201 +201 +200 +200 +198 +198 +196 +197 +196 +194 +194 +190 +191 +190 +189 +188 +189 +188 +188 +185 +185 +183 +182 +182 +178 +179 +175 +175 +175 +172 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +151 +151 +151 +147 +147 +143 +144 +143 +139 +139 +133 +133 +130 +129 +129 +125 +126 +120 +119 +119 +115 +115 +110 +110 +110 +106 +106 +100 +99 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +69 +68 +65 +65 +58 +59 +58 +54 +55 +51 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +16 +13 +13 +12 +13 +14 +13 +13 +13 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +34 +34 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +51 +50 +55 +54 +54 +55 +55 +59 +58 +64 +64 +65 +68 +68 +72 +72 +75 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +116 +119 +120 +126 +125 +129 +129 +130 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +152 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +175 +175 +175 +178 +178 +182 +182 +183 +185 +185 +189 +188 +189 +191 +191 +195 +194 +194 +196 +196 +198 +198 +199 +200 +200 +200 +201 +203 +202 +202 +204 +204 +204 +205 +204 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +205 +205 +204 +205 +202 +202 +202 +201 +200 +200 +201 +200 +198 +198 +198 +199 +198 +196 +196 +194 +194 +195 +190 +191 +189 +189 +186 +184 +184 +182 +182 +179 +179 +179 +175 +175 +173 +173 +172 +169 +169 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +148 +147 +147 +143 +143 +139 +139 +139 +133 +134 +129 +129 +129 +125 +125 +119 +120 +119 +115 +115 +110 +110 +110 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +69 +68 +64 +64 +59 +58 +58 +54 +54 +51 +51 +46 +47 +47 +43 +43 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +14 +14 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +14 +14 +14 +14 +14 +13 +13 +14 +13 +14 +13 +14 +14 +13 +13 +12 +15 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +51 +54 +54 +55 +59 +59 +64 +65 +65 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +91 +96 +96 +100 +100 +105 +106 +106 +110 +110 +115 +116 +116 +120 +120 +125 +126 +125 +129 +129 +133 +133 +134 +139 +139 +143 +144 +143 +147 +148 +151 +151 +156 +157 +157 +161 +161 +165 +165 +165 +168 +169 +173 +173 +172 +175 +175 +179 +178 +179 +182 +183 +185 +185 +184 +189 +188 +190 +190 +195 +194 +194 +196 +196 +198 +198 +198 +200 +200 +201 +200 +200 +202 +202 +204 +204 +204 +204 +205 +206 +207 +207 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +204 +204 +204 +204 +204 +204 +205 +202 +202 +203 +201 +200 +200 +200 +199 +198 +198 +196 +196 +194 +194 +194 +190 +191 +188 +188 +188 +185 +184 +185 +185 +185 +183 +183 +179 +178 +179 +175 +175 +173 +172 +169 +169 +169 +165 +165 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +140 +133 +133 +129 +129 +125 +125 +126 +119 +119 +116 +116 +116 +110 +110 +110 +110 +110 +106 +106 +100 +100 +100 +96 +95 +90 +90 +90 +86 +86 +82 +82 +76 +76 +76 +72 +73 +68 +68 +68 +64 +64 +58 +58 +58 +54 +55 +50 +51 +51 +47 +47 +43 +43 +43 +41 +40 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +14 +14 +13 +13 +14 +14 +13 +13 +14 +14 +13 +13 +13 +13 +14 +13 +13 +14 +13 +14 +13 +13 +13 +13 +16 +15 +15 +17 +17 +19 +19 +19 +21 +21 +21 +20 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +36 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +51 +54 +55 +58 +58 +59 +64 +65 +69 +68 +69 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +110 +110 +115 +116 +119 +120 +119 +125 +125 +129 +129 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +168 +169 +169 +173 +173 +175 +175 +179 +178 +179 +183 +182 +185 +185 +185 +189 +189 +191 +191 +191 +195 +195 +196 +197 +197 +198 +198 +200 +200 +201 +201 +200 +202 +202 +204 +204 +205 +204 +204 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +205 +204 +204 +204 +202 +202 +202 +200 +200 +200 +200 +200 +198 +198 +198 +198 +198 +196 +196 +195 +194 +195 +190 +191 +188 +188 +188 +185 +184 +182 +183 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +158 +151 +151 +147 +147 +144 +143 +143 +139 +139 +133 +134 +133 +130 +129 +125 +125 +125 +120 +120 +116 +116 +115 +110 +109 +106 +105 +106 +100 +100 +95 +96 +91 +90 +90 +86 +86 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +65 +64 +58 +58 +58 +54 +54 +51 +51 +47 +47 +46 +43 +43 +42 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +22 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +14 +14 +14 +13 +14 +14 +13 +14 +14 +13 +13 +13 +13 +13 +14 +14 +13 +14 +13 +13 +14 +13 +13 +13 +13 +14 +13 +13 +13 +15 +15 +15 +17 +16 +19 +19 +20 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +42 +43 +42 +47 +46 +47 +50 +50 +54 +54 +58 +59 +59 +65 +65 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +109 +109 +110 +115 +115 +120 +119 +119 +125 +126 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +148 +151 +151 +157 +157 +162 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +174 +175 +179 +179 +183 +183 +183 +184 +185 +188 +188 +189 +191 +191 +194 +194 +197 +197 +196 +198 +198 +200 +200 +200 +200 +200 +200 +201 +200 +202 +202 +204 +204 +204 +205 +204 +207 +207 +207 +206 +206 +206 +207 +206 +207 +207 +206 +206 +206 +206 +207 +204 +204 +204 +205 +204 +204 +204 +202 +202 +203 +200 +201 +200 +200 +199 +198 +199 +197 +196 +194 +195 +194 +190 +190 +188 +188 +188 +185 +184 +183 +183 +183 +179 +178 +175 +174 +175 +173 +173 +169 +169 +167 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +130 +126 +125 +119 +120 +119 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +85 +82 +82 +76 +76 +76 +72 +72 +68 +68 +64 +65 +65 +59 +58 +55 +55 +55 +51 +51 +46 +47 +47 +43 +43 +41 +41 +41 +37 +36 +32 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +14 +13 +13 +13 +14 +13 +14 +14 +13 +14 +13 +13 +14 +13 +13 +14 +13 +14 +14 +14 +13 +13 +13 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +36 +40 +41 +43 +43 +43 +47 +47 +50 +51 +50 +55 +55 +59 +58 +58 +64 +65 +68 +68 +68 +73 +72 +76 +76 +76 +82 +82 +86 +86 +91 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +116 +119 +119 +120 +126 +125 +130 +129 +130 +133 +133 +139 +139 +144 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +176 +179 +179 +183 +183 +185 +185 +185 +188 +189 +190 +191 +191 +195 +195 +195 +194 +194 +197 +196 +199 +198 +198 +201 +201 +200 +200 +201 +203 +203 +205 +205 +204 +204 +204 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +205 +204 +204 +204 +205 +203 +202 +200 +201 +200 +201 +200 +199 +198 +199 +197 +197 +195 +195 +194 +191 +191 +189 +189 +189 +185 +185 +183 +183 +178 +179 +178 +175 +175 +173 +173 +173 +169 +169 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +130 +130 +126 +126 +119 +120 +119 +115 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +87 +86 +86 +82 +82 +76 +76 +76 +73 +72 +68 +68 +68 +64 +64 +58 +59 +59 +55 +54 +51 +51 +51 +47 +47 +42 +43 +42 +41 +41 +37 +37 +33 +33 +33 +31 +31 +31 +32 +31 +27 +27 +25 +24 +25 +21 +21 +19 +18 +20 +17 +17 +15 +14 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +13 +14 +14 +13 +14 +13 +14 +14 +14 +14 +13 +13 +14 +14 +13 +14 +14 +14 +14 +13 +13 +13 +13 +14 +14 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +31 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +42 +43 +47 +47 +50 +51 +51 +55 +55 +58 +59 +64 +64 +64 +69 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +101 +105 +106 +110 +110 +117 +116 +116 +120 +119 +125 +125 +125 +129 +129 +130 +129 +129 +133 +133 +140 +139 +139 +143 +143 +147 +147 +148 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +173 +173 +173 +175 +175 +179 +178 +179 +183 +183 +185 +185 +186 +189 +189 +191 +191 +194 +195 +194 +196 +196 +196 +196 +196 +199 +198 +198 +199 +199 +200 +201 +200 +200 +201 +202 +202 +204 +205 +204 +204 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +204 +204 +204 +204 +205 +202 +203 +200 +200 +201 +200 +200 +198 +199 +196 +197 +196 +194 +194 +191 +191 +191 +189 +189 +185 +185 +185 +183 +183 +178 +179 +178 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +134 +129 +129 +125 +125 +120 +119 +119 +116 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +77 +76 +72 +72 +68 +68 +68 +65 +65 +58 +58 +59 +54 +55 +51 +50 +50 +47 +47 +43 +44 +43 +40 +41 +37 +37 +35 +33 +32 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +18 +20 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +14 +14 +14 +13 +14 +14 +13 +14 +14 +13 +13 +14 +13 +13 +14 +14 +14 +13 +14 +14 +13 +14 +13 +14 +13 +13 +15 +14 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +43 +43 +42 +47 +47 +51 +51 +50 +54 +54 +58 +58 +58 +64 +64 +68 +68 +67 +72 +72 +76 +76 +77 +82 +82 +86 +86 +91 +90 +90 +96 +96 +100 +100 +100 +106 +106 +106 +106 +106 +110 +109 +116 +116 +116 +120 +119 +125 +126 +126 +130 +130 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +182 +183 +183 +184 +185 +189 +188 +189 +191 +190 +190 +191 +190 +194 +195 +196 +196 +197 +199 +198 +201 +200 +200 +201 +201 +202 +202 +204 +205 +204 +204 +204 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +207 +207 +206 +206 +204 +205 +204 +204 +204 +202 +202 +200 +200 +200 +200 +200 +198 +198 +198 +197 +196 +195 +194 +194 +190 +190 +189 +189 +188 +184 +185 +183 +183 +179 +179 +179 +175 +175 +172 +173 +173 +169 +169 +165 +165 +165 +161 +161 +156 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +134 +133 +133 +130 +129 +125 +125 +126 +119 +119 +119 +120 +120 +115 +116 +109 +110 +110 +106 +106 +100 +100 +101 +96 +96 +90 +90 +85 +86 +86 +82 +82 +76 +76 +76 +72 +73 +72 +73 +72 +68 +68 +64 +64 +65 +58 +58 +54 +54 +53 +50 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +32 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +14 +13 +12 +13 +13 +14 +14 +14 +14 +13 +14 +14 +13 +13 +13 +14 +14 +13 +14 +14 +14 +14 +13 +13 +13 +13 +13 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +38 +38 +41 +41 +41 +43 +44 +46 +47 +47 +50 +51 +54 +55 +55 +58 +58 +64 +65 +68 +69 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +116 +120 +119 +120 +126 +125 +129 +129 +129 +133 +133 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +153 +156 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +175 +175 +175 +179 +179 +183 +183 +183 +185 +184 +189 +188 +189 +190 +191 +194 +194 +196 +196 +196 +199 +199 +200 +200 +200 +200 +200 +202 +202 +202 +204 +204 +204 +204 +205 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +207 +206 +206 +207 +205 +204 +204 +204 +205 +202 +202 +203 +200 +201 +200 +200 +200 +198 +199 +196 +197 +194 +194 +195 +191 +191 +188 +189 +188 +185 +185 +183 +183 +183 +178 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +140 +133 +133 +129 +130 +129 +125 +125 +120 +119 +120 +115 +116 +109 +110 +107 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +69 +66 +64 +64 +59 +58 +55 +54 +54 +50 +50 +46 +47 +46 +43 +43 +43 +43 +43 +41 +41 +36 +36 +37 +33 +33 +31 +31 +29 +27 +27 +26 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +13 +14 +14 +13 +14 +14 +13 +13 +13 +14 +13 +13 +13 +14 +14 +14 +14 +13 +14 +14 +13 +14 +14 +13 +12 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +27 +27 +28 +31 +31 +33 +33 +33 +36 +37 +41 +41 +41 +43 +42 +47 +47 +51 +51 +50 +54 +54 +59 +59 +59 +64 +65 +68 +69 +69 +72 +72 +76 +77 +77 +82 +82 +86 +86 +87 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +116 +115 +115 +116 +119 +119 +125 +126 +125 +129 +129 +133 +133 +135 +139 +140 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +177 +178 +179 +182 +183 +184 +185 +184 +189 +188 +190 +191 +191 +195 +195 +196 +196 +196 +199 +198 +200 +201 +200 +200 +200 +203 +202 +204 +205 +205 +204 +204 +207 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +204 +204 +204 +204 +204 +202 +203 +201 +200 +200 +200 +200 +198 +198 +198 +196 +197 +195 +194 +195 +191 +190 +189 +189 +188 +185 +185 +183 +183 +183 +178 +178 +174 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +141 +133 +133 +130 +130 +125 +126 +125 +120 +119 +116 +115 +115 +110 +110 +110 +109 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +91 +86 +86 +82 +82 +76 +76 +76 +72 +72 +67 +68 +69 +64 +65 +64 +64 +65 +58 +59 +55 +55 +54 +51 +50 +47 +47 +43 +43 +42 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +16 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +13 +13 +14 +13 +14 +13 +14 +14 +13 +14 +13 +13 +14 +14 +13 +14 +14 +14 +14 +14 +14 +14 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +28 +31 +31 +33 +32 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +50 +51 +54 +54 +58 +59 +58 +65 +65 +68 +68 +68 +72 +72 +76 +76 +83 +82 +82 +86 +86 +90 +90 +90 +96 +96 +99 +100 +100 +106 +110 +110 +109 +110 +116 +116 +119 +119 +122 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +166 +169 +169 +172 +173 +174 +175 +175 +179 +179 +182 +183 +183 +185 +184 +189 +189 +189 +191 +191 +194 +194 +194 +197 +196 +198 +199 +199 +200 +201 +201 +200 +202 +202 +202 +204 +204 +204 +204 +204 +207 +206 +207 +206 +207 +207 +207 +207 +206 +206 +207 +206 +206 +207 +204 +205 +204 +204 +205 +202 +202 +202 +200 +201 +200 +200 +200 +198 +199 +197 +196 +197 +194 +195 +191 +191 +190 +188 +189 +185 +184 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +152 +147 +147 +143 +143 +139 +139 +139 +133 +133 +130 +129 +129 +125 +125 +126 +125 +125 +119 +119 +116 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +77 +76 +76 +76 +76 +72 +72 +68 +68 +69 +64 +64 +59 +59 +56 +54 +54 +51 +51 +47 +46 +47 +43 +43 +41 +41 +40 +37 +37 +33 +33 +33 +31 +31 +27 +27 +28 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +13 +14 +13 +13 +13 +13 +14 +13 +14 +13 +14 +13 +14 +14 +13 +14 +13 +14 +14 +14 +13 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +40 +41 +43 +43 +46 +47 +47 +50 +50 +54 +55 +55 +59 +58 +64 +64 +69 +69 +68 +72 +72 +76 +76 +76 +82 +82 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +102 +106 +106 +110 +110 +115 +116 +115 +119 +119 +125 +126 +125 +129 +130 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +148 +150 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +178 +182 +183 +183 +185 +185 +188 +190 +190 +190 +191 +195 +194 +194 +195 +194 +196 +196 +199 +199 +198 +200 +200 +201 +200 +200 +203 +203 +204 +204 +205 +204 +204 +206 +207 +207 +207 +206 +206 +206 +206 +207 +207 +207 +207 +206 +206 +206 +204 +204 +204 +204 +204 +203 +203 +200 +201 +201 +200 +200 +198 +198 +197 +197 +196 +194 +194 +190 +191 +191 +189 +188 +185 +184 +184 +182 +183 +179 +178 +178 +174 +174 +172 +173 +173 +169 +169 +165 +164 +162 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +140 +139 +134 +134 +134 +130 +129 +125 +126 +125 +120 +119 +115 +116 +109 +110 +110 +106 +105 +100 +100 +100 +96 +96 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +77 +73 +73 +72 +68 +68 +64 +64 +64 +58 +59 +55 +55 +55 +51 +51 +47 +47 +46 +42 +43 +41 +41 +41 +37 +37 +33 +33 +32 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +13 +12 +13 +14 +14 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +13 +13 +14 +13 +14 +14 +14 +13 +15 +15 +18 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +46 +47 +51 +50 +50 +54 +54 +58 +58 +59 +65 +65 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +83 +86 +86 +90 +90 +95 +96 +96 +100 +100 +106 +106 +106 +110 +110 +110 +110 +109 +116 +115 +119 +119 +120 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +164 +165 +169 +169 +169 +173 +173 +174 +175 +179 +179 +179 +183 +183 +185 +184 +184 +189 +188 +190 +190 +190 +194 +194 +196 +196 +196 +199 +199 +201 +200 +201 +201 +200 +202 +202 +205 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +204 +204 +205 +204 +204 +202 +202 +201 +200 +200 +200 +200 +198 +198 +197 +197 +197 +197 +196 +195 +194 +190 +190 +190 +188 +189 +184 +185 +185 +182 +183 +179 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +145 +143 +143 +139 +139 +134 +133 +134 +129 +129 +125 +125 +125 +119 +120 +119 +119 +119 +115 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +73 +69 +68 +68 +64 +64 +58 +59 +59 +54 +54 +50 +51 +47 +46 +47 +43 +43 +40 +41 +41 +37 +37 +33 +33 +32 +31 +31 +27 +27 +27 +25 +25 +21 +21 +22 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +13 +14 +14 +13 +14 +14 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +26 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +43 +43 +43 +47 +47 +51 +51 +50 +54 +54 +59 +58 +61 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +86 +86 +86 +90 +90 +96 +96 +96 +100 +101 +106 +105 +109 +110 +110 +116 +116 +119 +120 +119 +126 +125 +130 +130 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +148 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +168 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +183 +184 +185 +189 +189 +188 +190 +191 +194 +194 +197 +197 +196 +199 +198 +200 +200 +200 +200 +200 +202 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +204 +204 +204 +204 +204 +202 +202 +202 +200 +200 +200 +200 +201 +198 +198 +197 +196 +197 +194 +195 +190 +191 +188 +189 +188 +185 +184 +183 +182 +182 +178 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +162 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +134 +133 +133 +129 +129 +126 +125 +126 +119 +119 +116 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +65 +65 +58 +58 +59 +54 +54 +51 +51 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +38 +33 +33 +31 +31 +31 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +14 +13 +14 +14 +14 +14 +13 +13 +14 +14 +14 +13 +14 +13 +14 +14 +13 +13 +14 +12 +15 +15 +17 +17 +18 +19 +19 +22 +21 +26 +25 +25 +27 +27 +31 +31 +31 +33 +33 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +50 +50 +54 +54 +58 +58 +58 +64 +64 +72 +72 +72 +76 +76 +76 +76 +77 +82 +82 +86 +86 +86 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +110 +109 +115 +116 +120 +120 +119 +125 +125 +129 +129 +129 +134 +133 +139 +140 +140 +143 +143 +147 +147 +151 +152 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +172 +173 +175 +175 +174 +179 +178 +183 +182 +183 +184 +185 +189 +189 +191 +190 +191 +195 +194 +196 +196 +197 +198 +198 +200 +200 +200 +201 +200 +202 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +205 +205 +204 +204 +204 +202 +202 +202 +200 +201 +200 +200 +201 +198 +198 +197 +196 +194 +194 +195 +191 +191 +188 +188 +188 +185 +184 +185 +185 +185 +183 +183 +179 +179 +178 +175 +175 +173 +173 +174 +169 +169 +165 +165 +161 +161 +161 +156 +157 +151 +151 +151 +147 +147 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +130 +127 +125 +125 +120 +120 +115 +116 +115 +110 +109 +106 +105 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +72 +72 +72 +69 +68 +64 +64 +64 +58 +59 +55 +54 +55 +51 +51 +47 +47 +47 +43 +42 +41 +41 +41 +37 +37 +33 +32 +32 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +13 +14 +13 +14 +14 +13 +13 +14 +14 +14 +14 +13 +14 +13 +13 +13 +14 +13 +14 +14 +13 +13 +14 +14 +14 +12 +15 +15 +17 +17 +17 +19 +19 +21 +22 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +51 +51 +50 +54 +54 +58 +59 +59 +65 +64 +64 +65 +65 +68 +68 +72 +72 +72 +76 +76 +82 +82 +83 +87 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +109 +115 +116 +115 +119 +119 +126 +125 +125 +129 +129 +133 +133 +135 +139 +139 +143 +143 +146 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +168 +169 +173 +173 +173 +175 +175 +179 +179 +183 +182 +182 +185 +184 +188 +188 +188 +191 +190 +191 +190 +190 +194 +194 +197 +196 +196 +198 +199 +200 +200 +201 +200 +200 +202 +202 +205 +204 +205 +205 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +205 +204 +204 +202 +203 +200 +200 +200 +200 +200 +198 +199 +199 +196 +196 +196 +197 +196 +194 +194 +191 +190 +191 +188 +188 +184 +185 +185 +183 +183 +179 +178 +174 +175 +174 +173 +173 +169 +169 +169 +165 +165 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +144 +143 +143 +139 +140 +133 +134 +134 +129 +129 +125 +125 +125 +120 +119 +115 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +90 +90 +90 +86 +86 +83 +83 +82 +76 +76 +73 +73 +73 +68 +68 +64 +64 +64 +59 +59 +55 +54 +54 +50 +50 +47 +47 +44 +43 +43 +41 +40 +37 +37 +37 +33 +33 +31 +31 +31 +27 +26 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +12 +12 +13 +13 +13 +13 +13 +13 +14 +14 +13 +14 +14 +14 +13 +13 +13 +13 +14 +14 +14 +13 +14 +13 +13 +13 +13 +13 +12 +12 +15 +15 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +26 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +43 +42 +43 +47 +47 +51 +51 +51 +55 +55 +59 +59 +61 +65 +64 +68 +68 +72 +72 +72 +76 +77 +82 +83 +83 +86 +86 +90 +90 +91 +96 +96 +100 +100 +100 +106 +106 +110 +110 +115 +116 +116 +119 +119 +125 +125 +125 +129 +129 +134 +133 +134 +139 +139 +143 +143 +144 +147 +147 +151 +151 +151 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +182 +183 +185 +185 +184 +188 +188 +191 +191 +190 +195 +194 +196 +196 +199 +198 +199 +201 +201 +200 +200 +200 +202 +202 +205 +204 +204 +204 +204 +207 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +204 +204 +204 +205 +205 +202 +202 +203 +202 +202 +201 +200 +200 +200 +200 +198 +199 +196 +197 +197 +194 +194 +190 +191 +188 +189 +188 +185 +185 +183 +183 +182 +178 +179 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +163 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +126 +120 +119 +116 +116 +110 +110 +109 +106 +105 +100 +100 +101 +96 +96 +90 +90 +91 +86 +86 +82 +82 +82 +77 +76 +72 +72 +72 +68 +68 +64 +64 +59 +58 +58 +54 +54 +51 +50 +51 +47 +47 +42 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +13 +14 +13 +14 +14 +13 +13 +14 +14 +13 +13 +13 +14 +14 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +50 +51 +50 +55 +54 +58 +58 +58 +64 +64 +68 +69 +69 +72 +72 +76 +76 +76 +82 +86 +86 +86 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +116 +120 +120 +120 +126 +125 +129 +130 +129 +133 +133 +139 +140 +139 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +170 +169 +169 +172 +173 +175 +175 +175 +179 +178 +182 +183 +182 +184 +185 +189 +189 +191 +190 +190 +195 +195 +196 +196 +197 +198 +198 +200 +201 +201 +200 +200 +202 +202 +203 +204 +204 +204 +205 +205 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +205 +204 +205 +204 +204 +202 +202 +202 +200 +201 +200 +201 +200 +199 +198 +197 +197 +195 +194 +194 +191 +190 +189 +188 +188 +185 +184 +185 +185 +185 +183 +183 +178 +179 +179 +174 +175 +173 +173 +173 +169 +170 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +134 +129 +129 +125 +125 +120 +119 +119 +115 +116 +110 +110 +110 +105 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +68 +68 +68 +64 +65 +59 +58 +58 +55 +55 +51 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +14 +12 +13 +14 +13 +13 +13 +13 +13 +14 +13 +14 +14 +14 +13 +13 +14 +14 +14 +14 +13 +13 +14 +13 +14 +14 +13 +14 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +36 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +51 +51 +54 +54 +58 +58 +58 +64 +64 +68 +68 +69 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +109 +110 +116 +115 +119 +120 +119 +125 +125 +129 +129 +134 +133 +133 +139 +139 +143 +143 +143 +148 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +174 +175 +175 +175 +179 +179 +182 +182 +183 +185 +185 +185 +184 +184 +189 +189 +190 +191 +190 +194 +194 +196 +196 +196 +198 +198 +200 +200 +200 +200 +200 +202 +202 +204 +204 +204 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +205 +204 +204 +204 +205 +202 +202 +202 +200 +200 +200 +200 +200 +200 +201 +198 +198 +199 +196 +196 +195 +195 +192 +190 +191 +189 +189 +184 +185 +185 +183 +182 +178 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +140 +139 +133 +133 +134 +129 +129 +126 +126 +126 +120 +119 +116 +115 +116 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +65 +64 +64 +58 +58 +55 +54 +55 +51 +51 +47 +47 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +28 +25 +25 +21 +21 +20 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +14 +13 +14 +13 +14 +14 +13 +13 +13 +14 +14 +14 +13 +14 +14 +13 +13 +14 +14 +14 +14 +14 +14 +13 +13 +13 +13 +15 +15 +17 +17 +18 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +51 +54 +55 +55 +59 +58 +64 +65 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +116 +120 +120 +126 +125 +125 +130 +129 +133 +134 +133 +139 +139 +143 +143 +144 +147 +147 +151 +151 +158 +157 +157 +161 +161 +161 +161 +161 +164 +165 +169 +169 +169 +173 +173 +175 +175 +174 +179 +179 +182 +183 +183 +184 +185 +189 +188 +191 +191 +191 +194 +195 +197 +197 +196 +199 +199 +199 +198 +199 +200 +200 +201 +200 +200 +202 +203 +204 +204 +204 +204 +205 +206 +207 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +207 +206 +206 +206 +204 +204 +204 +204 +205 +202 +203 +201 +200 +201 +201 +200 +198 +199 +198 +196 +196 +194 +195 +195 +191 +190 +188 +188 +188 +184 +184 +183 +183 +183 +178 +179 +175 +174 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +140 +133 +133 +130 +129 +125 +125 +125 +119 +120 +115 +116 +115 +110 +109 +110 +109 +110 +106 +106 +100 +100 +100 +96 +96 +91 +90 +90 +86 +86 +82 +82 +76 +77 +76 +72 +72 +68 +68 +69 +65 +64 +58 +59 +58 +55 +55 +51 +50 +50 +47 +47 +43 +44 +43 +41 +41 +36 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +14 +13 +12 +13 +13 +14 +14 +13 +13 +14 +13 +13 +14 +13 +13 +13 +14 +13 +13 +14 +14 +13 +14 +14 +14 +14 +13 +13 +13 +14 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +50 +54 +54 +54 +58 +59 +64 +64 +65 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +116 +119 +119 +125 +125 +130 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +166 +169 +169 +173 +173 +174 +175 +175 +179 +179 +183 +182 +183 +184 +185 +185 +185 +185 +188 +189 +190 +191 +190 +194 +194 +196 +197 +196 +198 +198 +201 +200 +200 +200 +200 +202 +202 +204 +205 +204 +204 +204 +204 +204 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +204 +204 +205 +204 +204 +202 +203 +200 +201 +201 +200 +200 +198 +199 +199 +196 +197 +194 +194 +191 +191 +191 +188 +188 +185 +185 +184 +183 +183 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +152 +151 +151 +147 +147 +144 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +125 +120 +119 +115 +116 +116 +110 +110 +105 +105 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +68 +68 +64 +64 +65 +59 +58 +54 +54 +50 +50 +51 +47 +47 +43 +42 +43 +40 +41 +37 +37 +37 +32 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +14 +14 +14 +14 +14 +13 +14 +13 +14 +14 +14 +13 +13 +14 +13 +14 +14 +13 +13 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +46 +47 +50 +51 +54 +54 +58 +59 +58 +64 +64 +68 +68 +69 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +110 +110 +110 +115 +116 +120 +119 +119 +125 +125 +130 +130 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +148 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +172 +173 +174 +175 +174 +179 +179 +183 +182 +183 +185 +184 +189 +188 +189 +191 +191 +195 +194 +196 +196 +196 +199 +198 +200 +200 +201 +200 +200 +200 +200 +200 +203 +202 +204 +204 +205 +204 +205 +206 +207 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +204 +204 +204 +204 +205 +202 +203 +200 +201 +200 +200 +201 +198 +198 +196 +196 +197 +194 +195 +190 +190 +190 +188 +188 +185 +184 +184 +183 +183 +179 +179 +179 +174 +175 +173 +173 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +144 +139 +139 +134 +134 +133 +129 +130 +125 +125 +126 +119 +120 +116 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +91 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +74 +69 +69 +64 +58 +58 +58 +55 +55 +51 +50 +51 +47 +47 +47 +47 +46 +43 +42 +41 +41 +41 +37 +36 +33 +33 +32 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +17 +17 +17 +15 +15 +15 +15 +16 +13 +13 +12 +13 +14 +14 +14 +13 +13 +14 +14 +14 +13 +14 +13 +13 +13 +14 +14 +13 +14 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +12 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +46 +47 +47 +50 +50 +55 +54 +55 +58 +59 +65 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +83 +86 +86 +90 +90 +97 +96 +96 +100 +100 +106 +106 +106 +110 +110 +110 +110 +109 +115 +116 +120 +120 +119 +125 +125 +130 +130 +130 +133 +133 +140 +140 +143 +143 +143 +147 +147 +151 +151 +151 +156 +157 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +172 +173 +174 +175 +175 +179 +178 +182 +182 +183 +185 +184 +188 +189 +189 +190 +191 +191 +190 +190 +194 +194 +196 +196 +197 +198 +199 +201 +200 +200 +200 +200 +202 +202 +204 +204 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +207 +206 +207 +204 +205 +204 +204 +204 +203 +202 +200 +200 +200 +201 +200 +199 +198 +198 +196 +196 +195 +194 +195 +191 +191 +189 +188 +189 +185 +185 +182 +183 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +134 +133 +133 +129 +129 +125 +126 +126 +119 +119 +116 +116 +115 +110 +110 +105 +106 +106 +99 +100 +96 +96 +97 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +68 +68 +68 +65 +64 +58 +58 +58 +54 +54 +51 +51 +48 +47 +47 +43 +43 +41 +41 +41 +36 +37 +33 +33 +33 +31 +31 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +14 +14 +14 +13 +13 +13 +14 +14 +13 +14 +13 +13 +14 +14 +13 +13 +13 +14 +14 +14 +14 +13 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +42 +43 +47 +47 +50 +51 +50 +54 +54 +58 +58 +59 +65 +64 +69 +69 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +116 +119 +120 +126 +125 +125 +130 +130 +133 +133 +133 +139 +140 +139 +139 +139 +143 +143 +147 +147 +148 +151 +151 +157 +157 +158 +161 +161 +165 +165 +169 +169 +169 +173 +172 +175 +175 +175 +179 +178 +178 +178 +179 +182 +182 +185 +185 +185 +188 +189 +190 +190 +194 +194 +194 +196 +196 +198 +198 +199 +200 +200 +200 +200 +200 +202 +202 +204 +204 +204 +204 +205 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +205 +204 +202 +202 +200 +200 +200 +200 +200 +199 +198 +198 +196 +197 +195 +195 +191 +190 +190 +188 +188 +184 +184 +184 +183 +183 +179 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +152 +151 +151 +146 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +126 +125 +119 +120 +116 +116 +116 +110 +110 +106 +106 +99 +100 +100 +96 +96 +90 +90 +90 +87 +86 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +66 +64 +64 +58 +58 +54 +55 +55 +51 +51 +47 +47 +47 +43 +43 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +30 +28 +27 +27 +25 +25 +21 +22 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +14 +14 +13 +14 +14 +14 +14 +14 +14 +14 +14 +14 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +12 +15 +15 +17 +17 +20 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +36 +37 +37 +41 +41 +43 +43 +43 +47 +46 +51 +50 +55 +54 +55 +59 +59 +65 +65 +64 +68 +68 +73 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +116 +116 +119 +120 +120 +120 +120 +125 +125 +129 +130 +129 +134 +133 +139 +139 +141 +143 +143 +147 +147 +150 +151 +151 +157 +157 +161 +161 +161 +165 +165 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +181 +183 +183 +185 +185 +188 +188 +188 +190 +191 +194 +195 +194 +197 +196 +198 +198 +198 +200 +200 +200 +201 +201 +203 +203 +204 +204 +205 +205 +204 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +200 +200 +200 +200 +201 +198 +198 +196 +196 +196 +195 +195 +190 +190 +190 +188 +188 +185 +185 +184 +182 +183 +179 +179 +179 +174 +175 +173 +173 +170 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +134 +133 +134 +129 +129 +125 +125 +119 +119 +119 +116 +115 +110 +110 +110 +106 +106 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +87 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +59 +58 +59 +58 +59 +54 +55 +50 +51 +51 +47 +47 +43 +43 +42 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +12 +13 +13 +14 +14 +13 +13 +13 +14 +14 +14 +13 +13 +13 +14 +14 +14 +14 +14 +13 +13 +14 +14 +13 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +41 +41 +41 +43 +43 +46 +47 +47 +51 +51 +54 +54 +54 +59 +58 +64 +65 +64 +68 +68 +72 +72 +73 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +100 +100 +100 +106 +106 +110 +110 +110 +116 +115 +120 +119 +121 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +168 +169 +169 +173 +173 +174 +175 +175 +179 +179 +183 +182 +182 +184 +184 +189 +189 +189 +190 +190 +195 +194 +195 +196 +196 +198 +198 +199 +201 +201 +201 +200 +202 +202 +203 +205 +204 +205 +204 +204 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +204 +205 +204 +205 +204 +202 +203 +203 +201 +201 +201 +200 +200 +198 +199 +197 +196 +196 +194 +194 +191 +190 +190 +188 +189 +185 +185 +182 +182 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +138 +139 +140 +134 +133 +129 +129 +129 +125 +125 +126 +125 +125 +119 +119 +116 +116 +116 +110 +109 +106 +106 +106 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +76 +76 +76 +72 +72 +68 +68 +69 +64 +64 +59 +59 +55 +55 +54 +50 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +20 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +14 +14 +14 +14 +13 +13 +14 +14 +14 +13 +14 +13 +13 +14 +14 +14 +13 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +28 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +40 +42 +43 +47 +47 +47 +50 +50 +55 +54 +55 +59 +59 +64 +65 +69 +68 +68 +72 +72 +76 +76 +76 +82 +82 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +102 +106 +106 +110 +109 +115 +116 +116 +119 +120 +126 +125 +125 +129 +129 +129 +129 +130 +133 +133 +139 +139 +139 +143 +143 +147 +147 +151 +151 +151 +157 +157 +160 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +174 +175 +178 +179 +182 +182 +183 +185 +185 +188 +188 +190 +191 +190 +195 +194 +196 +197 +196 +198 +199 +200 +200 +200 +200 +200 +202 +202 +202 +204 +204 +205 +205 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +205 +204 +204 +204 +205 +202 +202 +202 +200 +201 +201 +201 +200 +198 +199 +196 +197 +195 +195 +194 +191 +191 +189 +189 +189 +184 +185 +185 +185 +185 +183 +183 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +162 +161 +161 +157 +157 +151 +151 +151 +147 +147 +147 +147 +147 +143 +143 +139 +139 +139 +133 +134 +129 +129 +130 +125 +125 +120 +120 +116 +116 +116 +110 +110 +106 +106 +106 +100 +100 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +73 +72 +68 +69 +68 +65 +64 +58 +58 +59 +55 +54 +50 +50 +50 +46 +47 +43 +43 +43 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +14 +14 +13 +14 +13 +13 +14 +13 +13 +13 +13 +14 +14 +14 +14 +13 +13 +13 +13 +13 +14 +14 +14 +13 +14 +13 +13 +16 +15 +15 +18 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +36 +37 +41 +41 +43 +43 +48 +47 +46 +50 +51 +55 +54 +54 +58 +58 +58 +58 +59 +64 +64 +68 +69 +68 +72 +72 +76 +76 +78 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +106 +106 +106 +110 +110 +115 +115 +115 +120 +119 +125 +126 +127 +130 +129 +133 +133 +139 +139 +139 +144 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +172 +173 +174 +175 +175 +178 +179 +183 +182 +183 +185 +185 +189 +189 +188 +190 +190 +194 +194 +194 +196 +197 +199 +198 +198 +200 +201 +201 +200 +202 +202 +202 +205 +204 +204 +204 +204 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +205 +205 +204 +204 +203 +202 +202 +200 +200 +200 +200 +200 +198 +198 +196 +196 +196 +194 +194 +190 +190 +189 +189 +189 +184 +185 +185 +182 +183 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +145 +143 +143 +139 +139 +133 +133 +133 +129 +129 +129 +129 +129 +125 +126 +126 +125 +126 +120 +119 +115 +115 +116 +110 +110 +105 +106 +101 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +65 +58 +58 +54 +54 +51 +50 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +14 +13 +14 +13 +14 +14 +13 +13 +14 +14 +15 +14 +13 +13 +13 +13 +14 +14 +14 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +23 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +46 +47 +50 +50 +51 +55 +55 +59 +58 +61 +64 +65 +68 +68 +72 +72 +73 +76 +76 +82 +82 +82 +86 +86 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +109 +110 +110 +115 +115 +120 +119 +119 +126 +125 +130 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +148 +151 +151 +157 +157 +160 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +174 +179 +178 +183 +183 +183 +184 +185 +188 +189 +188 +190 +191 +195 +194 +197 +196 +196 +198 +198 +200 +200 +200 +201 +201 +202 +202 +203 +204 +204 +204 +204 +204 +206 +206 +206 +207 +207 +206 +206 +207 +206 +207 +206 +207 +207 +207 +204 +205 +204 +204 +205 +202 +202 +202 +200 +201 +201 +200 +200 +199 +199 +196 +197 +197 +194 +194 +190 +190 +189 +189 +189 +185 +185 +183 +183 +183 +179 +178 +178 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +166 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +140 +140 +139 +139 +133 +133 +129 +129 +130 +125 +126 +120 +119 +116 +115 +110 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +83 +82 +76 +76 +77 +72 +72 +69 +69 +65 +64 +64 +58 +58 +54 +55 +55 +50 +50 +46 +47 +46 +43 +43 +40 +41 +41 +37 +37 +33 +33 +34 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +14 +13 +14 +14 +14 +14 +13 +14 +14 +13 +14 +14 +13 +13 +13 +15 +15 +16 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +50 +51 +55 +55 +59 +58 +58 +64 +64 +69 +68 +68 +73 +72 +71 +72 +72 +77 +76 +82 +82 +83 +86 +86 +90 +90 +90 +90 +90 +96 +96 +100 +100 +100 +105 +106 +110 +110 +110 +115 +115 +120 +119 +120 +126 +125 +129 +129 +130 +133 +133 +140 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +185 +185 +185 +189 +188 +191 +191 +191 +195 +194 +196 +197 +196 +198 +198 +200 +201 +200 +200 +201 +202 +202 +203 +205 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +205 +202 +203 +200 +200 +201 +200 +200 +198 +198 +196 +197 +197 +194 +195 +195 +194 +195 +191 +191 +189 +189 +189 +184 +184 +182 +182 +181 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +140 +140 +139 +133 +133 +129 +129 +129 +126 +126 +119 +119 +119 +115 +116 +110 +109 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +69 +68 +68 +64 +64 +59 +59 +59 +54 +55 +51 +51 +51 +47 +47 +42 +42 +42 +41 +41 +37 +37 +33 +33 +33 +31 +27 +27 +27 +27 +25 +25 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +16 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +14 +14 +14 +13 +14 +13 +14 +13 +14 +14 +14 +14 +13 +14 +13 +14 +13 +13 +13 +15 +15 +17 +17 +18 +19 +19 +21 +21 +20 +25 +25 +27 +27 +29 +31 +30 +33 +33 +37 +37 +37 +41 +40 +43 +43 +43 +47 +46 +47 +47 +47 +51 +50 +55 +54 +55 +59 +58 +65 +64 +67 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +117 +120 +120 +125 +125 +129 +129 +130 +133 +134 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +178 +178 +183 +183 +182 +185 +184 +189 +188 +188 +190 +191 +194 +195 +195 +196 +196 +199 +198 +201 +200 +200 +201 +201 +202 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +207 +207 +207 +206 +207 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +202 +200 +201 +201 +201 +200 +200 +200 +198 +198 +198 +197 +197 +194 +194 +192 +190 +191 +188 +189 +184 +184 +185 +183 +182 +178 +179 +179 +175 +175 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +159 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +140 +133 +133 +129 +130 +129 +125 +125 +119 +120 +120 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +58 +55 +54 +55 +51 +51 +47 +47 +47 +43 +43 +40 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +28 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +14 +13 +13 +14 +14 +13 +13 +13 +14 +14 +14 +13 +13 +14 +14 +14 +13 +13 +14 +13 +14 +14 +14 +14 +13 +14 +13 +14 +13 +12 +15 +15 +17 +17 +18 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +46 +46 +50 +50 +50 +55 +54 +58 +58 +59 +64 +64 +69 +68 +68 +73 +72 +76 +76 +76 +82 +82 +86 +86 +87 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +110 +110 +115 +115 +119 +119 +120 +125 +125 +129 +129 +130 +134 +133 +139 +139 +139 +143 +143 +147 +147 +151 +151 +151 +156 +157 +161 +161 +161 +166 +165 +169 +169 +169 +172 +173 +175 +175 +175 +178 +179 +183 +183 +182 +184 +185 +188 +188 +190 +191 +191 +195 +195 +196 +196 +196 +198 +198 +198 +198 +198 +200 +200 +201 +200 +200 +202 +203 +204 +204 +205 +205 +204 +207 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +205 +205 +202 +203 +201 +201 +201 +200 +200 +198 +198 +198 +196 +197 +195 +195 +195 +190 +191 +189 +188 +188 +184 +184 +183 +183 +183 +178 +179 +175 +174 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +158 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +134 +133 +129 +129 +125 +125 +125 +120 +120 +116 +116 +116 +110 +109 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +72 +72 +72 +69 +68 +64 +65 +64 +58 +59 +54 +55 +55 +50 +51 +46 +47 +47 +43 +43 +41 +41 +41 +37 +37 +32 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +16 +13 +13 +12 +13 +13 +13 +14 +14 +13 +13 +14 +13 +14 +14 +13 +14 +14 +13 +14 +13 +13 +14 +13 +14 +14 +13 +14 +14 +13 +13 +14 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +32 +33 +32 +37 +37 +41 +41 +41 +43 +43 +47 +47 +46 +50 +51 +54 +54 +55 +58 +58 +64 +65 +65 +69 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +99 +100 +106 +106 +106 +110 +110 +116 +116 +116 +120 +120 +126 +125 +129 +129 +129 +134 +133 +139 +139 +139 +143 +143 +147 +147 +147 +152 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +172 +173 +174 +175 +175 +179 +178 +183 +183 +183 +185 +185 +185 +184 +184 +189 +189 +190 +190 +190 +194 +194 +197 +196 +196 +199 +198 +200 +200 +201 +201 +200 +203 +202 +204 +204 +204 +204 +204 +204 +204 +204 +206 +207 +206 +206 +207 +207 +206 +206 +206 +207 +207 +207 +206 +206 +204 +204 +204 +204 +204 +203 +202 +203 +201 +200 +201 +200 +200 +200 +201 +199 +198 +198 +196 +197 +194 +194 +193 +191 +190 +188 +189 +184 +185 +184 +183 +182 +183 +183 +183 +179 +179 +175 +175 +174 +173 +173 +169 +169 +168 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +134 +129 +129 +129 +125 +126 +120 +119 +120 +116 +116 +110 +110 +105 +106 +106 +100 +100 +96 +96 +96 +90 +90 +90 +90 +90 +86 +86 +82 +82 +82 +77 +76 +72 +72 +73 +68 +68 +64 +64 +59 +58 +58 +54 +55 +51 +50 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +14 +14 +14 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +13 +14 +14 +14 +13 +14 +14 +14 +14 +14 +13 +14 +14 +13 +12 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +47 +47 +47 +51 +50 +55 +55 +55 +58 +58 +59 +58 +59 +65 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +116 +120 +119 +120 +125 +125 +130 +130 +130 +134 +133 +139 +139 +144 +143 +143 +147 +147 +151 +151 +151 +157 +161 +161 +161 +161 +164 +165 +169 +169 +169 +174 +173 +175 +175 +175 +178 +179 +182 +182 +185 +185 +185 +188 +189 +190 +190 +190 +194 +195 +196 +197 +196 +198 +198 +200 +201 +200 +200 +201 +202 +202 +203 +204 +204 +205 +204 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +205 +204 +205 +204 +202 +203 +200 +200 +200 +200 +200 +198 +199 +196 +197 +197 +195 +194 +191 +190 +191 +189 +188 +184 +184 +185 +182 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +158 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +130 +129 +129 +125 +125 +120 +119 +120 +115 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +58 +58 +54 +54 +50 +51 +50 +47 +47 +43 +43 +44 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +12 +13 +13 +14 +14 +13 +14 +14 +14 +14 +14 +13 +13 +14 +14 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +13 +14 +14 +13 +13 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +43 +42 +43 +47 +47 +51 +51 +51 +55 +54 +58 +59 +59 +65 +64 +69 +68 +73 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +116 +120 +119 +126 +125 +126 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +162 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +178 +183 +183 +183 +183 +182 +184 +184 +188 +188 +188 +191 +190 +194 +194 +195 +196 +197 +198 +198 +200 +200 +200 +201 +200 +202 +202 +202 +204 +204 +205 +204 +204 +204 +204 +207 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +205 +205 +204 +204 +204 +202 +202 +200 +201 +200 +200 +200 +198 +199 +199 +196 +196 +194 +195 +191 +190 +190 +189 +188 +185 +184 +185 +182 +182 +179 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +152 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +130 +129 +126 +125 +125 +119 +120 +116 +115 +116 +109 +110 +106 +106 +100 +100 +100 +95 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +65 +64 +58 +58 +55 +54 +52 +51 +51 +47 +46 +43 +43 +43 +41 +41 +41 +41 +41 +37 +37 +33 +33 +33 +30 +31 +27 +27 +28 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +14 +14 +13 +14 +14 +14 +13 +13 +14 +13 +13 +14 +14 +13 +14 +14 +13 +13 +13 +14 +14 +13 +14 +13 +13 +13 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +24 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +42 +43 +47 +47 +51 +51 +55 +54 +55 +59 +58 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +91 +96 +96 +100 +100 +106 +106 +106 +109 +110 +115 +116 +116 +119 +119 +126 +125 +125 +130 +129 +133 +133 +133 +139 +139 +143 +143 +144 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +183 +185 +185 +189 +189 +191 +191 +190 +195 +194 +196 +196 +197 +198 +199 +198 +199 +198 +201 +201 +201 +200 +201 +202 +202 +205 +205 +204 +204 +204 +207 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +207 +206 +207 +204 +204 +204 +204 +205 +202 +203 +200 +200 +200 +200 +200 +198 +198 +196 +197 +196 +194 +194 +191 +190 +190 +189 +189 +184 +184 +184 +182 +183 +179 +178 +179 +175 +175 +173 +173 +169 +169 +169 +165 +165 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +130 +126 +125 +126 +120 +119 +116 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +87 +82 +82 +76 +76 +73 +73 +73 +68 +68 +64 +64 +64 +58 +58 +54 +54 +54 +50 +51 +47 +47 +47 +43 +43 +40 +41 +39 +37 +36 +33 +32 +30 +31 +31 +27 +27 +25 +25 +25 +21 +21 +21 +21 +21 +19 +19 +17 +18 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +14 +13 +13 +14 +13 +13 +14 +13 +13 +13 +14 +14 +13 +14 +13 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +50 +55 +55 +55 +58 +58 +65 +64 +65 +68 +68 +72 +72 +72 +76 +77 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +105 +105 +106 +110 +110 +116 +116 +115 +119 +119 +125 +126 +126 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +148 +152 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +172 +173 +173 +175 +175 +179 +179 +182 +183 +183 +185 +185 +188 +188 +188 +191 +190 +191 +190 +191 +194 +194 +197 +197 +196 +198 +198 +200 +200 +201 +201 +200 +202 +202 +204 +204 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +204 +204 +204 +204 +205 +202 +202 +200 +200 +200 +200 +200 +199 +199 +198 +196 +197 +195 +195 +194 +190 +191 +189 +188 +189 +184 +185 +183 +182 +179 +179 +179 +175 +174 +173 +173 +172 +169 +168 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +134 +133 +133 +129 +129 +125 +126 +126 +119 +119 +116 +115 +115 +110 +110 +105 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +82 +82 +82 +76 +77 +72 +72 +72 +68 +68 +68 +68 +68 +64 +64 +58 +59 +59 +54 +54 +51 +51 +51 +47 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +14 +13 +14 +14 +14 +13 +14 +14 +14 +14 +13 +13 +13 +14 +13 +13 +13 +14 +14 +14 +13 +14 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +22 +25 +25 +27 +27 +31 +31 +30 +33 +33 +37 +36 +37 +41 +41 +43 +43 +43 +47 +47 +50 +51 +51 +55 +55 +58 +58 +59 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +87 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +105 +105 +106 +110 +109 +116 +116 +120 +119 +119 +126 +126 +129 +130 +129 +133 +133 +139 +140 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +158 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +178 +178 +178 +179 +178 +183 +182 +184 +184 +184 +189 +189 +190 +190 +192 +194 +195 +196 +197 +198 +198 +198 +200 +200 +200 +200 +200 +202 +203 +205 +204 +204 +204 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +204 +204 +204 +204 +204 +202 +202 +200 +200 +200 +200 +200 +198 +198 +199 +196 +196 +194 +194 +190 +190 +191 +188 +189 +184 +184 +185 +182 +183 +179 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +152 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +134 +134 +129 +130 +125 +125 +126 +119 +120 +115 +115 +116 +110 +110 +105 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +86 +86 +86 +82 +82 +76 +76 +76 +73 +72 +68 +69 +66 +64 +64 +58 +58 +55 +54 +54 +50 +50 +47 +47 +47 +43 +43 +42 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +16 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +13 +14 +14 +14 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +14 +14 +13 +14 +13 +13 +16 +15 +15 +17 +17 +20 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +46 +47 +51 +51 +56 +55 +55 +58 +59 +65 +65 +65 +68 +68 +72 +72 +73 +76 +77 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +107 +106 +106 +110 +110 +116 +116 +115 +120 +120 +125 +125 +126 +130 +129 +134 +133 +134 +139 +139 +143 +143 +144 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +168 +169 +169 +169 +169 +172 +173 +175 +175 +175 +179 +179 +183 +182 +184 +184 +185 +189 +189 +190 +191 +191 +194 +195 +197 +197 +197 +198 +198 +200 +200 +200 +201 +200 +202 +203 +203 +204 +205 +205 +204 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +204 +204 +205 +204 +205 +202 +202 +202 +200 +201 +200 +200 +199 +198 +198 +197 +197 +195 +194 +195 +190 +191 +189 +188 +189 +184 +185 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +166 +165 +165 +161 +161 +157 +157 +157 +151 +151 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +134 +129 +130 +125 +125 +119 +119 +120 +115 +116 +109 +109 +110 +106 +106 +106 +106 +105 +100 +100 +96 +96 +96 +90 +90 +86 +86 +87 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +65 +58 +58 +58 +59 +58 +55 +55 +51 +51 +51 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +14 +14 +14 +13 +14 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +14 +14 +13 +13 +14 +14 +14 +13 +13 +13 +15 +16 +15 +17 +17 +19 +19 +19 +21 +22 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +42 +41 +41 +43 +43 +47 +47 +47 +51 +51 +55 +54 +55 +58 +58 +64 +64 +64 +69 +68 +72 +72 +73 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +115 +119 +120 +126 +125 +126 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +151 +151 +151 +158 +157 +161 +161 +161 +164 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +178 +182 +183 +184 +184 +185 +188 +189 +191 +191 +190 +194 +195 +197 +196 +197 +198 +199 +200 +200 +200 +200 +201 +202 +203 +204 +205 +204 +204 +204 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +205 +204 +204 +204 +204 +203 +202 +200 +200 +200 +200 +200 +198 +198 +199 +196 +196 +195 +195 +194 +191 +191 +188 +189 +189 +184 +185 +183 +183 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +148 +143 +143 +139 +139 +133 +133 +134 +129 +129 +126 +125 +126 +120 +119 +119 +119 +120 +115 +116 +109 +110 +109 +106 +106 +100 +100 +98 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +72 +72 +72 +68 +68 +64 +64 +64 +58 +58 +55 +55 +51 +50 +50 +47 +47 +43 +43 +42 +40 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +14 +12 +13 +13 +14 +14 +14 +13 +14 +13 +13 +14 +13 +13 +14 +13 +13 +13 +14 +13 +14 +14 +13 +13 +14 +14 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +32 +31 +31 +33 +33 +37 +36 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +51 +54 +54 +58 +59 +59 +65 +64 +69 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +111 +115 +116 +119 +119 +125 +126 +125 +129 +129 +133 +133 +133 +139 +139 +139 +140 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +160 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +182 +182 +184 +185 +188 +188 +189 +190 +191 +194 +194 +196 +196 +197 +198 +198 +199 +201 +200 +201 +200 +202 +202 +202 +205 +205 +204 +204 +204 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +207 +204 +204 +204 +204 +204 +202 +202 +203 +200 +201 +201 +200 +200 +198 +198 +196 +196 +196 +194 +195 +190 +191 +188 +189 +188 +185 +185 +182 +183 +183 +179 +178 +175 +174 +175 +173 +172 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +152 +151 +148 +147 +147 +143 +143 +139 +139 +139 +133 +133 +133 +133 +134 +130 +130 +125 +125 +126 +119 +119 +115 +115 +116 +110 +110 +106 +105 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +65 +64 +64 +58 +58 +54 +55 +54 +50 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +13 +13 +13 +13 +14 +14 +13 +14 +13 +14 +14 +13 +14 +14 +14 +14 +14 +13 +13 +14 +13 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +40 +41 +43 +43 +47 +47 +47 +51 +51 +54 +54 +58 +58 +59 +64 +65 +68 +69 +68 +72 +72 +72 +72 +72 +76 +76 +81 +82 +82 +86 +86 +90 +90 +91 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +115 +119 +120 +119 +120 +119 +125 +125 +129 +129 +130 +133 +133 +139 +139 +141 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +184 +185 +185 +188 +188 +190 +190 +190 +194 +195 +197 +196 +197 +199 +199 +201 +200 +200 +200 +200 +202 +203 +204 +205 +204 +204 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +203 +200 +200 +200 +200 +199 +198 +198 +197 +197 +194 +195 +194 +190 +191 +188 +188 +188 +185 +185 +183 +182 +182 +179 +179 +175 +174 +175 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +150 +147 +147 +147 +143 +143 +139 +139 +140 +133 +133 +130 +130 +129 +125 +125 +119 +120 +115 +116 +115 +109 +110 +106 +106 +106 +100 +100 +99 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +83 +76 +76 +72 +72 +68 +69 +68 +64 +65 +58 +58 +58 +54 +54 +50 +51 +51 +46 +46 +42 +43 +43 +41 +41 +37 +37 +34 +33 +33 +31 +30 +27 +27 +27 +25 +25 +21 +21 +21 +20 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +13 +13 +14 +14 +14 +14 +14 +14 +14 +14 +14 +13 +13 +14 +14 +14 +14 +14 +13 +14 +13 +13 +13 +13 +16 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +36 +41 +41 +43 +43 +47 +47 +47 +50 +51 +55 +55 +55 +59 +58 +59 +59 +59 +64 +64 +68 +69 +68 +72 +72 +76 +76 +78 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +106 +106 +105 +110 +110 +116 +116 +116 +119 +119 +125 +126 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +175 +174 +175 +179 +178 +182 +183 +182 +185 +184 +189 +189 +189 +190 +190 +194 +194 +195 +196 +197 +198 +198 +198 +200 +200 +200 +200 +203 +202 +202 +204 +204 +204 +204 +205 +206 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +205 +203 +202 +202 +200 +201 +200 +200 +200 +198 +199 +196 +197 +197 +195 +194 +190 +190 +190 +188 +189 +185 +185 +185 +183 +183 +178 +179 +175 +174 +174 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +144 +144 +139 +139 +133 +133 +129 +129 +129 +126 +125 +120 +119 +120 +115 +116 +116 +116 +115 +110 +110 +105 +106 +106 +100 +100 +96 +96 +97 +90 +90 +86 +87 +83 +82 +82 +76 +77 +72 +72 +73 +68 +68 +64 +65 +65 +58 +59 +54 +55 +55 +51 +51 +47 +47 +45 +43 +43 +41 +41 +37 +37 +37 +33 +32 +33 +33 +33 +31 +31 +26 +27 +28 +25 +25 +21 +21 +22 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +13 +14 +14 +13 +13 +14 +14 +14 +14 +13 +13 +14 +14 +14 +13 +14 +14 +13 +13 +14 +14 +13 +13 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +26 +27 +27 +31 +31 +34 +33 +33 +37 +37 +41 +41 +41 +43 +42 +47 +47 +47 +50 +51 +54 +54 +55 +59 +58 +64 +64 +66 +68 +68 +72 +72 +76 +77 +76 +82 +82 +86 +86 +86 +90 +90 +90 +90 +90 +96 +96 +100 +99 +100 +106 +106 +110 +110 +115 +116 +115 +120 +119 +125 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +152 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +178 +182 +182 +185 +185 +185 +189 +189 +191 +191 +190 +195 +195 +197 +196 +199 +198 +198 +200 +200 +200 +200 +200 +202 +202 +204 +204 +204 +204 +205 +206 +206 +206 +206 +206 +206 +206 +207 +207 +207 +206 +206 +207 +207 +207 +205 +205 +204 +205 +205 +202 +202 +203 +203 +202 +200 +200 +200 +200 +201 +199 +199 +196 +196 +197 +195 +195 +191 +190 +188 +188 +189 +184 +185 +183 +183 +183 +179 +179 +178 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +163 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +139 +139 +139 +133 +133 +130 +129 +131 +125 +125 +119 +119 +115 +115 +116 +109 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +69 +68 +65 +64 +64 +58 +58 +54 +55 +55 +51 +50 +47 +46 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +14 +14 +14 +14 +14 +13 +14 +14 +14 +14 +14 +14 +13 +13 +14 +14 +13 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +46 +50 +50 +55 +55 +55 +59 +59 +65 +64 +64 +69 +68 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +88 +90 +90 +96 +96 +100 +100 +100 +106 +106 +106 +106 +106 +110 +110 +116 +116 +116 +119 +120 +125 +126 +126 +129 +130 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +183 +183 +183 +185 +185 +188 +189 +189 +190 +190 +195 +195 +195 +197 +197 +199 +198 +198 +200 +201 +200 +200 +200 +202 +203 +205 +205 +205 +204 +205 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +204 +205 +204 +204 +205 +202 +202 +200 +200 +200 +200 +200 +198 +198 +197 +196 +196 +194 +194 +190 +191 +191 +189 +188 +185 +185 +184 +183 +182 +178 +178 +177 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +157 +157 +157 +151 +151 +147 +147 +148 +143 +143 +139 +140 +134 +133 +134 +130 +130 +126 +125 +126 +120 +119 +116 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +82 +82 +82 +76 +76 +77 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +58 +58 +55 +55 +51 +51 +51 +47 +47 +43 +43 +41 +41 +41 +37 +36 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +20 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +13 +13 +14 +14 +13 +14 +13 +14 +14 +13 +13 +13 +13 +14 +14 +14 +13 +13 +14 +14 +13 +14 +13 +14 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +18 +21 +21 +25 +25 +25 +27 +27 +31 +31 +32 +32 +32 +37 +37 +40 +41 +41 +43 +43 +47 +47 +47 +50 +51 +50 +51 +51 +55 +55 +59 +58 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +82 +82 +82 +85 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +116 +119 +119 +124 +125 +125 +130 +129 +133 +133 +133 +140 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +178 +183 +182 +185 +185 +185 +188 +189 +190 +191 +191 +194 +195 +196 +197 +197 +198 +198 +200 +201 +201 +200 +200 +202 +202 +204 +204 +204 +205 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +207 +206 +204 +204 +204 +204 +205 +203 +202 +202 +200 +200 +200 +201 +200 +200 +200 +198 +198 +199 +196 +196 +194 +194 +193 +190 +190 +188 +189 +184 +184 +184 +183 +183 +179 +179 +179 +175 +175 +175 +175 +175 +173 +173 +168 +169 +169 +165 +165 +161 +161 +158 +157 +157 +151 +151 +147 +147 +147 +143 +143 +144 +143 +143 +139 +139 +133 +133 +134 +129 +129 +125 +126 +126 +120 +120 +115 +115 +111 +110 +109 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +68 +68 +64 +65 +59 +59 +58 +55 +55 +51 +51 +51 +47 +47 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +26 +25 +25 +21 +21 +19 +19 +19 +17 +17 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +13 +14 +14 +14 +13 +14 +13 +14 +14 +14 +14 +14 +14 +13 +14 +13 +13 +14 +14 +13 +13 +14 +14 +13 +14 +14 +12 +15 +15 +17 +17 +17 +20 +19 +21 +21 +21 +25 +26 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +40 +41 +41 +43 +43 +47 +47 +47 +50 +50 +54 +54 +55 +58 +59 +64 +65 +65 +69 +68 +72 +72 +72 +76 +76 +82 +82 +85 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +105 +106 +109 +110 +115 +115 +115 +119 +119 +125 +126 +126 +129 +130 +134 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +156 +157 +161 +161 +165 +165 +165 +169 +168 +173 +172 +173 +175 +175 +179 +179 +183 +182 +183 +184 +185 +189 +188 +188 +191 +191 +195 +194 +195 +196 +196 +199 +198 +198 +200 +201 +200 +201 +201 +202 +203 +204 +204 +205 +204 +205 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +206 +205 +206 +204 +204 +205 +204 +205 +203 +203 +200 +201 +200 +200 +200 +198 +198 +199 +197 +196 +197 +197 +196 +195 +194 +190 +191 +191 +188 +188 +184 +185 +183 +183 +183 +179 +179 +174 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +148 +143 +143 +140 +140 +139 +133 +133 +130 +130 +129 +126 +125 +120 +120 +119 +116 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +65 +65 +59 +58 +58 +55 +54 +50 +51 +50 +47 +47 +43 +43 +42 +41 +41 +37 +37 +33 +33 +32 +31 +31 +27 +27 +26 +25 +25 +21 +21 +21 +19 +19 +17 +17 +18 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +13 +13 +14 +13 +13 +14 +14 +13 +13 +13 +13 +14 +14 +13 +14 +14 +14 +14 +14 +14 +14 +13 +13 +14 +14 +14 +13 +12 +15 +15 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +50 +54 +54 +55 +58 +58 +65 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +109 +115 +116 +120 +120 +119 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +158 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +174 +179 +179 +183 +182 +183 +185 +184 +188 +188 +189 +190 +191 +194 +194 +195 +197 +196 +198 +198 +201 +200 +200 +200 +200 +202 +202 +202 +204 +204 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +203 +202 +203 +202 +202 +200 +200 +200 +200 +201 +198 +198 +196 +196 +196 +194 +195 +190 +190 +188 +188 +189 +184 +185 +183 +183 +182 +179 +179 +174 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +148 +147 +147 +143 +143 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +126 +119 +120 +115 +116 +110 +110 +110 +105 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +68 +68 +64 +65 +59 +58 +58 +54 +55 +50 +51 +50 +47 +47 +43 +43 +43 +41 +41 +36 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +14 +14 +14 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +42 +47 +47 +50 +51 +51 +55 +54 +59 +58 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +100 +100 +100 +106 +105 +110 +110 +110 +115 +115 +119 +119 +119 +126 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +152 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +172 +173 +175 +175 +174 +179 +179 +182 +182 +183 +184 +185 +189 +189 +190 +190 +190 +194 +195 +196 +196 +196 +198 +198 +200 +200 +200 +200 +200 +203 +203 +202 +204 +204 +204 +204 +205 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +205 +204 +204 +205 +202 +202 +200 +200 +201 +200 +201 +198 +199 +197 +197 +196 +194 +194 +190 +190 +190 +188 +189 +184 +184 +184 +182 +182 +178 +179 +179 +175 +175 +173 +173 +169 +168 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +119 +119 +119 +115 +116 +109 +110 +109 +106 +106 +100 +100 +100 +96 +96 +90 +90 +89 +86 +86 +82 +82 +83 +76 +76 +72 +72 +69 +68 +68 +64 +64 +58 +59 +59 +54 +55 +51 +51 +51 +47 +47 +42 +43 +43 +43 +42 +41 +41 +41 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +21 +21 +21 +19 +19 +17 +18 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +14 +14 +13 +14 +14 +13 +13 +14 +14 +14 +13 +13 +13 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +50 +51 +55 +54 +58 +58 +59 +64 +64 +68 +69 +68 +72 +72 +76 +76 +83 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +116 +119 +120 +120 +125 +125 +129 +129 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +168 +169 +173 +173 +175 +174 +179 +178 +179 +182 +183 +184 +184 +184 +189 +188 +189 +188 +188 +190 +191 +194 +194 +195 +196 +196 +198 +198 +199 +201 +201 +200 +200 +202 +202 +203 +204 +204 +204 +204 +204 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +204 +204 +204 +204 +205 +202 +203 +200 +200 +200 +200 +200 +198 +198 +198 +196 +197 +194 +195 +195 +190 +191 +188 +188 +184 +184 +184 +183 +183 +179 +179 +179 +174 +175 +173 +172 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +126 +125 +119 +119 +116 +116 +116 +110 +109 +105 +105 +106 +100 +100 +96 +96 +90 +90 +90 +87 +86 +82 +82 +82 +76 +77 +72 +72 +72 +69 +68 +64 +65 +65 +59 +59 +54 +54 +55 +50 +50 +47 +46 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +14 +13 +13 +14 +13 +14 +14 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +24 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +42 +43 +47 +47 +50 +51 +50 +54 +54 +59 +58 +65 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +109 +116 +115 +115 +120 +120 +125 +125 +126 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +152 +157 +157 +161 +160 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +175 +174 +175 +178 +179 +183 +183 +183 +184 +185 +189 +188 +189 +190 +191 +194 +194 +196 +197 +196 +198 +198 +200 +200 +200 +200 +201 +200 +200 +200 +202 +202 +204 +204 +205 +205 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +205 +204 +202 +202 +200 +201 +201 +200 +201 +198 +199 +196 +197 +196 +194 +195 +190 +190 +190 +188 +188 +184 +185 +185 +182 +182 +179 +179 +178 +175 +175 +173 +173 +173 +169 +168 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +140 +139 +133 +133 +133 +129 +129 +125 +126 +126 +119 +119 +115 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +77 +72 +72 +75 +69 +68 +64 +65 +58 +58 +58 +55 +55 +51 +51 +51 +47 +47 +47 +48 +47 +43 +43 +40 +41 +41 +37 +37 +33 +33 +34 +31 +31 +27 +26 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +14 +14 +13 +13 +14 +14 +13 +13 +14 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +13 +13 +14 +13 +13 +13 +13 +13 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +26 +31 +31 +31 +32 +33 +37 +37 +37 +41 +41 +43 +43 +47 +47 +47 +51 +51 +55 +55 +55 +58 +58 +58 +58 +59 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +91 +90 +90 +96 +96 +100 +100 +100 +105 +106 +110 +110 +110 +115 +116 +120 +120 +119 +126 +126 +129 +129 +130 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +174 +175 +175 +179 +179 +183 +183 +182 +184 +185 +188 +188 +188 +191 +190 +191 +190 +190 +195 +194 +196 +196 +197 +198 +199 +200 +200 +200 +201 +201 +203 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +207 +206 +206 +204 +204 +204 +204 +204 +202 +202 +201 +201 +200 +200 +200 +198 +199 +198 +196 +196 +195 +194 +195 +190 +190 +188 +188 +188 +185 +184 +183 +183 +179 +179 +179 +175 +175 +172 +173 +172 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +134 +133 +133 +129 +129 +125 +125 +125 +120 +120 +116 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +83 +82 +82 +76 +76 +72 +72 +72 +68 +68 +68 +68 +68 +64 +64 +58 +58 +58 +54 +51 +51 +50 +51 +47 +47 +47 +46 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +20 +19 +19 +17 +17 +15 +15 +14 +15 +15 +13 +13 +13 +12 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +13 +14 +14 +14 +14 +14 +13 +14 +14 +13 +13 +14 +14 +14 +13 +14 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +51 +54 +55 +54 +58 +58 +64 +64 +69 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +95 +99 +100 +106 +106 +106 +110 +110 +115 +115 +120 +119 +120 +126 +125 +125 +125 +126 +129 +129 +129 +129 +129 +134 +133 +140 +139 +139 +139 +139 +143 +143 +145 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +184 +185 +185 +188 +189 +191 +190 +191 +194 +194 +196 +196 +196 +198 +198 +201 +200 +201 +200 +201 +202 +202 +203 +204 +204 +204 +205 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +205 +204 +204 +204 +204 +202 +202 +203 +201 +200 +200 +200 +199 +198 +198 +196 +196 +194 +194 +195 +190 +191 +189 +188 +188 +184 +185 +183 +182 +183 +178 +179 +175 +174 +175 +173 +173 +169 +169 +166 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +140 +139 +133 +133 +129 +129 +130 +125 +125 +119 +119 +115 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +72 +72 +68 +68 +64 +64 +65 +59 +59 +54 +54 +54 +50 +50 +51 +50 +51 +47 +47 +43 +43 +43 +41 +41 +37 +36 +34 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +16 +13 +13 +12 +13 +14 +14 +13 +14 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +14 +13 +14 +13 +14 +13 +13 +14 +14 +13 +13 +13 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +34 +37 +37 +40 +41 +43 +43 +43 +47 +47 +50 +50 +51 +54 +55 +59 +59 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +77 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +99 +106 +106 +106 +106 +106 +110 +109 +115 +115 +115 +119 +119 +125 +125 +128 +129 +129 +133 +133 +140 +139 +139 +143 +143 +147 +147 +147 +151 +151 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +168 +171 +173 +173 +175 +174 +179 +179 +178 +183 +183 +184 +184 +185 +188 +189 +191 +190 +190 +194 +195 +196 +196 +196 +199 +199 +200 +200 +200 +200 +200 +202 +203 +204 +204 +204 +204 +204 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +205 +204 +204 +202 +202 +200 +200 +200 +200 +200 +199 +198 +198 +196 +196 +194 +195 +195 +191 +190 +188 +188 +188 +185 +185 +183 +182 +179 +178 +179 +175 +174 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +148 +143 +143 +139 +139 +133 +133 +133 +130 +129 +126 +125 +125 +119 +120 +120 +120 +119 +116 +115 +110 +110 +110 +106 +106 +100 +99 +98 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +72 +72 +72 +68 +68 +64 +64 +65 +58 +58 +54 +55 +51 +50 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +14 +13 +13 +14 +13 +13 +13 +13 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +13 +14 +13 +14 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +46 +47 +50 +51 +50 +54 +54 +59 +59 +59 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +86 +86 +86 +91 +90 +96 +96 +96 +100 +100 +106 +106 +107 +110 +110 +116 +116 +119 +120 +120 +125 +125 +129 +129 +129 +133 +133 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +156 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +172 +175 +175 +179 +179 +178 +182 +183 +184 +184 +185 +188 +188 +190 +191 +195 +195 +194 +196 +196 +199 +198 +198 +200 +201 +200 +200 +200 +202 +203 +204 +204 +204 +204 +205 +206 +206 +207 +206 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +205 +204 +204 +202 +202 +200 +200 +200 +200 +201 +198 +198 +199 +197 +197 +194 +194 +191 +190 +190 +188 +189 +185 +185 +185 +182 +183 +179 +179 +179 +175 +175 +173 +173 +172 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +140 +139 +140 +139 +133 +133 +129 +129 +129 +125 +125 +120 +119 +118 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +69 +68 +68 +64 +64 +59 +59 +58 +54 +54 +51 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +14 +13 +13 +14 +13 +13 +14 +13 +14 +14 +14 +13 +13 +14 +14 +13 +14 +13 +13 +15 +15 +17 +17 +20 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +46 +51 +51 +55 +55 +54 +58 +59 +64 +64 +64 +68 +68 +68 +68 +68 +72 +72 +76 +76 +77 +82 +82 +86 +86 +87 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +109 +116 +116 +115 +115 +116 +119 +120 +125 +126 +126 +129 +129 +133 +133 +135 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +164 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +182 +182 +182 +185 +184 +188 +188 +188 +190 +190 +194 +194 +194 +197 +196 +199 +198 +199 +200 +200 +200 +200 +200 +202 +203 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +205 +204 +204 +204 +204 +202 +203 +200 +200 +200 +200 +201 +198 +198 +196 +196 +196 +194 +194 +190 +191 +190 +189 +188 +184 +185 +184 +183 +183 +179 +178 +179 +175 +175 +173 +173 +168 +169 +169 +165 +165 +161 +161 +161 +157 +157 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +137 +133 +133 +129 +129 +125 +125 +125 +119 +119 +116 +115 +116 +110 +110 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +87 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +58 +59 +54 +54 +50 +51 +51 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +40 +41 +40 +43 +43 +47 +47 +47 +51 +51 +54 +55 +55 +59 +59 +64 +64 +64 +68 +68 +72 +72 +73 +76 +76 +81 +82 +86 +86 +86 +91 +90 +96 +96 +96 +100 +100 +100 +100 +100 +106 +106 +109 +110 +110 +116 +115 +119 +119 +125 +125 +125 +130 +130 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +160 +161 +161 +165 +165 +169 +169 +172 +173 +173 +175 +175 +179 +178 +179 +183 +182 +185 +185 +184 +188 +188 +191 +190 +190 +195 +194 +197 +196 +197 +198 +198 +200 +200 +200 +200 +200 +202 +204 +204 +204 +204 +204 +204 +207 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +204 +204 +205 +204 +205 +203 +202 +200 +200 +200 +200 +200 +198 +198 +198 +196 +196 +195 +194 +194 +190 +191 +188 +188 +189 +185 +185 +183 +183 +179 +178 +178 +175 +175 +172 +173 +173 +169 +169 +169 +169 +169 +165 +165 +160 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +139 +140 +139 +133 +133 +129 +129 +129 +125 +125 +125 +125 +125 +119 +119 +116 +116 +115 +110 +110 +106 +106 +107 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +58 +58 +55 +55 +52 +51 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +19 +19 +17 +17 +15 +15 +15 +16 +15 +13 +14 +13 +13 +13 +14 +14 +14 +13 +14 +14 +13 +14 +13 +13 +14 +13 +14 +13 +14 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +37 +37 +37 +41 +41 +43 +43 +42 +46 +47 +50 +51 +52 +55 +55 +59 +59 +64 +65 +64 +68 +68 +72 +72 +72 +76 +76 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +99 +100 +100 +106 +106 +110 +110 +110 +116 +115 +120 +119 +119 +126 +125 +129 +129 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +174 +175 +178 +179 +183 +183 +183 +184 +184 +188 +189 +191 +190 +190 +194 +194 +196 +196 +196 +198 +199 +201 +201 +200 +200 +201 +203 +203 +202 +204 +204 +204 +204 +205 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +203 +200 +200 +200 +200 +201 +198 +199 +197 +196 +195 +194 +195 +190 +190 +189 +188 +188 +185 +184 +185 +185 +182 +183 +179 +179 +178 +175 +175 +173 +173 +171 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +147 +147 +147 +143 +143 +139 +139 +140 +133 +133 +130 +129 +126 +125 +125 +119 +120 +116 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +73 +72 +72 +68 +68 +64 +64 +65 +59 +58 +55 +55 +55 +51 +51 +47 +47 +47 +42 +43 +41 +41 +41 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +14 +13 +13 +13 +13 +13 +14 +13 +13 +14 +14 +14 +14 +14 +14 +13 +13 +15 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +39 +41 +41 +43 +43 +47 +47 +47 +50 +50 +55 +55 +54 +59 +58 +58 +58 +58 +64 +64 +68 +68 +69 +72 +72 +76 +76 +81 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +116 +119 +119 +120 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +178 +179 +179 +183 +183 +185 +185 +184 +189 +188 +191 +190 +190 +194 +194 +196 +196 +196 +198 +199 +200 +201 +201 +200 +201 +202 +202 +205 +204 +204 +204 +204 +206 +207 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +204 +204 +205 +204 +204 +202 +203 +200 +200 +200 +200 +201 +199 +198 +199 +196 +197 +195 +195 +194 +191 +191 +189 +188 +188 +184 +184 +183 +182 +181 +178 +179 +175 +175 +173 +173 +173 +169 +168 +165 +165 +165 +161 +161 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +141 +139 +139 +133 +133 +129 +130 +129 +125 +125 +120 +120 +119 +115 +115 +110 +109 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +90 +89 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +65 +59 +58 +54 +55 +54 +51 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +30 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +12 +12 +13 +14 +13 +14 +13 +13 +14 +14 +13 +14 +14 +13 +13 +13 +13 +14 +13 +14 +13 +13 +14 +14 +13 +13 +14 +14 +13 +12 +15 +15 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +26 +27 +27 +31 +31 +32 +33 +33 +37 +37 +41 +41 +41 +43 +43 +43 +43 +43 +47 +47 +50 +51 +51 +55 +54 +58 +58 +62 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +89 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +115 +115 +115 +119 +120 +125 +125 +125 +129 +130 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +156 +157 +161 +161 +165 +165 +165 +169 +169 +172 +173 +173 +174 +175 +178 +178 +179 +182 +182 +184 +184 +184 +188 +189 +190 +191 +191 +195 +195 +197 +196 +199 +199 +199 +200 +200 +200 +200 +200 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +207 +207 +206 +206 +204 +204 +204 +204 +204 +202 +202 +202 +202 +202 +200 +200 +200 +200 +200 +198 +198 +196 +196 +197 +195 +195 +190 +190 +189 +189 +189 +184 +184 +182 +183 +183 +179 +178 +178 +178 +179 +175 +175 +173 +173 +173 +169 +169 +164 +164 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +130 +125 +125 +125 +119 +119 +116 +115 +110 +109 +110 +105 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +69 +65 +65 +58 +59 +58 +55 +55 +51 +50 +50 +47 +47 +43 +42 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +14 +14 +14 +13 +14 +13 +14 +14 +14 +13 +14 +14 +14 +13 +14 +14 +14 +13 +13 +14 +13 +14 +14 +13 +12 +15 +15 +17 +17 +18 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +33 +33 +33 +37 +37 +41 +41 +41 +42 +43 +47 +46 +49 +50 +50 +55 +54 +59 +58 +58 +64 +64 +68 +68 +69 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +99 +100 +100 +106 +106 +109 +110 +110 +115 +116 +120 +119 +119 +126 +125 +129 +129 +129 +134 +133 +139 +139 +139 +143 +143 +147 +147 +152 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +174 +175 +179 +179 +182 +183 +183 +184 +184 +188 +188 +189 +189 +188 +190 +190 +194 +194 +194 +197 +197 +199 +198 +198 +200 +201 +200 +200 +200 +202 +202 +204 +204 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +205 +204 +204 +204 +204 +202 +202 +201 +200 +200 +200 +200 +198 +198 +198 +196 +197 +194 +194 +194 +190 +191 +190 +191 +190 +188 +188 +185 +184 +185 +182 +183 +178 +178 +177 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +129 +129 +129 +126 +125 +119 +120 +120 +115 +115 +109 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +73 +72 +68 +68 +68 +64 +64 +57 +58 +58 +55 +54 +51 +50 +51 +46 +47 +42 +43 +43 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +16 +13 +13 +12 +13 +14 +13 +13 +13 +14 +13 +14 +13 +13 +13 +13 +13 +13 +14 +13 +14 +13 +14 +13 +13 +13 +14 +14 +14 +13 +13 +14 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +19 +18 +18 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +37 +40 +41 +41 +43 +43 +47 +47 +47 +51 +51 +54 +55 +55 +59 +58 +64 +64 +65 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +105 +106 +106 +110 +110 +115 +115 +116 +119 +120 +125 +125 +129 +129 +130 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +172 +176 +174 +175 +179 +178 +182 +183 +183 +184 +184 +188 +188 +188 +190 +190 +195 +195 +195 +196 +196 +198 +198 +198 +200 +200 +200 +200 +203 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +204 +205 +204 +204 +202 +202 +202 +200 +200 +200 +200 +200 +199 +198 +198 +198 +198 +196 +196 +194 +194 +195 +190 +191 +188 +189 +185 +185 +185 +183 +182 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +144 +143 +143 +140 +139 +133 +133 +133 +129 +129 +126 +125 +125 +120 +119 +115 +116 +117 +109 +110 +105 +106 +105 +100 +100 +96 +95 +91 +90 +90 +86 +86 +82 +82 +82 +76 +76 +73 +72 +72 +68 +68 +64 +64 +64 +58 +58 +54 +54 +55 +51 +50 +46 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +20 +17 +17 +15 +15 +16 +15 +15 +13 +13 +12 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +14 +14 +13 +15 +13 +14 +13 +13 +14 +14 +14 +13 +14 +14 +13 +13 +13 +13 +15 +15 +15 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +51 +55 +54 +58 +58 +64 +64 +65 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +109 +116 +116 +116 +119 +120 +125 +126 +125 +129 +129 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +160 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +179 +183 +182 +185 +185 +185 +188 +189 +190 +190 +191 +195 +194 +196 +196 +199 +198 +199 +200 +200 +200 +200 +200 +202 +202 +204 +204 +204 +204 +205 +206 +206 +207 +206 +206 +206 +207 +207 +206 +207 +206 +206 +206 +206 +206 +204 +205 +204 +204 +204 +203 +202 +203 +203 +202 +201 +200 +201 +201 +201 +198 +198 +196 +196 +197 +194 +194 +190 +190 +189 +189 +189 +185 +185 +183 +182 +182 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +158 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +140 +133 +134 +130 +130 +129 +125 +126 +120 +119 +120 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +77 +76 +76 +72 +72 +69 +68 +69 +65 +64 +58 +59 +55 +54 +54 +51 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +14 +13 +14 +13 +14 +14 +14 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +40 +43 +43 +43 +47 +46 +51 +50 +55 +54 +54 +58 +59 +65 +64 +64 +68 +69 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +116 +119 +119 +125 +125 +125 +130 +129 +134 +134 +133 +139 +139 +143 +143 +144 +147 +147 +152 +151 +158 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +178 +183 +183 +184 +185 +185 +189 +188 +190 +190 +194 +195 +194 +197 +197 +198 +198 +198 +200 +200 +200 +200 +200 +200 +200 +202 +202 +202 +204 +204 +204 +204 +205 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +203 +201 +200 +200 +200 +200 +198 +199 +196 +197 +196 +194 +195 +191 +191 +191 +189 +188 +185 +184 +185 +183 +183 +179 +178 +179 +175 +174 +172 +173 +168 +169 +168 +165 +164 +161 +161 +162 +157 +157 +157 +157 +158 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +125 +125 +126 +120 +120 +116 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +58 +59 +55 +54 +54 +51 +51 +46 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +14 +14 +14 +14 +14 +13 +13 +13 +13 +14 +13 +14 +14 +13 +14 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +13 +12 +15 +15 +18 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +36 +37 +37 +41 +41 +43 +43 +43 +46 +47 +50 +51 +50 +54 +55 +58 +58 +58 +65 +64 +68 +68 +69 +72 +72 +76 +76 +83 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +109 +110 +116 +116 +119 +120 +120 +125 +125 +130 +129 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +156 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +178 +179 +179 +183 +183 +184 +184 +185 +188 +188 +191 +190 +190 +194 +194 +197 +197 +196 +198 +198 +200 +201 +200 +200 +201 +202 +202 +204 +204 +204 +204 +205 +206 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +207 +204 +204 +204 +205 +205 +202 +203 +202 +200 +200 +201 +200 +200 +198 +199 +196 +197 +195 +194 +190 +190 +191 +188 +189 +185 +185 +182 +182 +182 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +119 +119 +115 +115 +109 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +87 +86 +86 +82 +82 +76 +76 +76 +72 +72 +72 +72 +72 +68 +68 +64 +64 +64 +58 +58 +54 +54 +55 +50 +51 +46 +47 +43 +43 +43 +41 +41 +36 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +20 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +14 +14 +13 +14 +14 +14 +13 +14 +13 +13 +14 +13 +13 +14 +13 +13 +14 +14 +14 +13 +14 +13 +13 +13 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +26 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +51 +54 +54 +54 +58 +58 +64 +64 +69 +68 +68 +72 +72 +76 +76 +76 +82 +82 +87 +86 +86 +90 +90 +95 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +116 +120 +120 +120 +125 +126 +129 +129 +130 +133 +134 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +158 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +178 +182 +183 +183 +184 +184 +188 +189 +189 +191 +190 +194 +195 +195 +196 +196 +198 +198 +200 +200 +200 +201 +201 +202 +202 +202 +204 +205 +205 +204 +204 +205 +204 +207 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +201 +200 +200 +200 +201 +199 +198 +199 +196 +197 +194 +194 +191 +191 +191 +188 +189 +184 +185 +185 +183 +183 +179 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +164 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +134 +133 +133 +130 +130 +126 +126 +125 +120 +119 +116 +116 +115 +110 +110 +106 +105 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +69 +68 +64 +65 +65 +59 +58 +55 +54 +50 +51 +51 +47 +46 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +30 +31 +27 +27 +25 +25 +26 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +14 +14 +14 +13 +14 +14 +14 +13 +13 +13 +14 +13 +14 +14 +14 +14 +13 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +27 +27 +27 +30 +31 +33 +33 +32 +37 +37 +41 +41 +41 +43 +42 +47 +47 +47 +51 +51 +54 +54 +58 +58 +58 +65 +64 +69 +68 +69 +73 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +110 +109 +109 +116 +115 +119 +120 +119 +125 +125 +129 +129 +129 +134 +134 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +160 +161 +161 +165 +165 +169 +169 +169 +173 +173 +173 +173 +173 +175 +175 +178 +179 +179 +182 +182 +184 +185 +186 +189 +189 +190 +190 +194 +194 +194 +197 +197 +198 +198 +198 +200 +200 +200 +201 +200 +200 +200 +203 +202 +203 +204 +204 +205 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +205 +204 +204 +204 +204 +202 +202 +203 +201 +201 +200 +200 +198 +198 +199 +196 +196 +194 +194 +195 +190 +190 +188 +188 +188 +184 +185 +183 +182 +183 +179 +179 +175 +175 +175 +173 +173 +168 +169 +166 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +119 +116 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +72 +72 +68 +68 +64 +65 +64 +59 +58 +54 +54 +55 +51 +51 +51 +51 +51 +47 +46 +43 +43 +43 +41 +41 +37 +37 +38 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +13 +14 +13 +14 +13 +14 +14 +14 +13 +13 +14 +14 +14 +14 +14 +14 +14 +13 +14 +13 +13 +13 +13 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +50 +50 +55 +55 +58 +58 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +115 +119 +119 +119 +125 +125 +129 +130 +130 +133 +133 +138 +139 +144 +143 +143 +147 +147 +151 +151 +151 +157 +157 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +174 +175 +175 +179 +179 +178 +178 +179 +183 +183 +184 +184 +185 +188 +188 +189 +189 +188 +190 +191 +195 +194 +195 +196 +197 +198 +198 +199 +201 +201 +200 +200 +202 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +204 +204 +204 +204 +204 +202 +202 +202 +200 +200 +201 +201 +201 +198 +199 +196 +196 +196 +195 +195 +190 +190 +190 +189 +189 +185 +184 +183 +182 +183 +178 +178 +175 +175 +174 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +158 +157 +151 +151 +151 +147 +147 +143 +143 +140 +140 +139 +133 +134 +129 +129 +130 +126 +126 +120 +119 +120 +116 +116 +110 +110 +110 +106 +106 +100 +100 +101 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +77 +76 +72 +72 +72 +72 +72 +68 +68 +64 +64 +64 +58 +59 +55 +54 +52 +50 +50 +47 +46 +43 +43 +43 +41 +41 +37 +37 +37 +32 +33 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +14 +14 +13 +14 +14 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +14 +14 +13 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +51 +55 +55 +55 +58 +58 +64 +65 +69 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +99 +106 +106 +106 +110 +110 +116 +115 +119 +119 +119 +125 +126 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +158 +161 +161 +165 +164 +169 +169 +169 +173 +173 +175 +175 +175 +179 +178 +179 +178 +178 +183 +182 +184 +185 +184 +189 +189 +191 +190 +191 +195 +195 +196 +197 +199 +199 +198 +200 +200 +200 +201 +201 +202 +202 +205 +204 +204 +204 +205 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +204 +204 +204 +204 +204 +204 +204 +203 +203 +202 +200 +200 +200 +200 +200 +199 +199 +196 +196 +195 +195 +194 +190 +191 +189 +189 +188 +185 +185 +183 +182 +182 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +158 +157 +157 +151 +151 +147 +147 +147 +143 +143 +143 +143 +143 +139 +140 +133 +133 +133 +129 +129 +125 +125 +126 +119 +119 +115 +116 +109 +110 +110 +106 +106 +99 +100 +100 +96 +96 +96 +96 +96 +90 +90 +87 +86 +86 +82 +82 +76 +76 +77 +72 +72 +68 +68 +64 +65 +64 +59 +58 +55 +55 +55 +50 +50 +50 +50 +50 +47 +46 +43 +43 +43 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +22 +19 +19 +17 +17 +17 +15 +16 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +14 +14 +13 +14 +14 +13 +13 +13 +13 +13 +13 +14 +14 +13 +14 +14 +14 +13 +13 +16 +15 +16 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +47 +47 +47 +51 +50 +55 +55 +54 +58 +58 +64 +64 +64 +68 +69 +72 +72 +72 +76 +76 +82 +82 +83 +86 +86 +90 +90 +96 +96 +95 +100 +100 +106 +105 +106 +110 +109 +110 +110 +110 +116 +115 +119 +120 +119 +126 +125 +129 +129 +131 +134 +134 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +172 +174 +175 +175 +178 +179 +183 +182 +183 +185 +184 +189 +189 +189 +190 +190 +195 +195 +194 +197 +197 +198 +198 +199 +201 +200 +201 +201 +202 +202 +203 +204 +204 +204 +204 +204 +207 +207 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +207 +206 +207 +205 +204 +204 +205 +203 +202 +202 +200 +200 +200 +200 +200 +199 +198 +196 +196 +196 +195 +194 +191 +190 +191 +188 +188 +184 +185 +184 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +133 +133 +133 +129 +129 +126 +125 +125 +120 +120 +115 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +93 +90 +90 +86 +86 +82 +82 +82 +77 +76 +72 +73 +72 +69 +68 +68 +68 +68 +64 +64 +58 +59 +59 +55 +54 +51 +51 +47 +47 +46 +43 +42 +41 +41 +41 +37 +37 +33 +32 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +14 +14 +14 +14 +13 +14 +14 +13 +13 +13 +13 +13 +14 +14 +13 +13 +14 +13 +13 +13 +13 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +50 +51 +54 +54 +54 +58 +58 +64 +64 +65 +68 +69 +72 +72 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +110 +112 +115 +116 +120 +119 +125 +125 +125 +129 +129 +133 +134 +134 +139 +139 +139 +139 +139 +143 +143 +148 +147 +147 +151 +151 +157 +157 +160 +161 +161 +165 +165 +168 +169 +169 +173 +173 +175 +174 +175 +178 +179 +183 +183 +182 +185 +184 +188 +188 +189 +190 +191 +195 +195 +196 +197 +196 +198 +199 +200 +200 +200 +201 +200 +202 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +205 +205 +204 +203 +202 +202 +200 +200 +201 +200 +200 +199 +198 +197 +197 +196 +195 +194 +190 +190 +188 +189 +189 +185 +185 +183 +182 +183 +179 +178 +174 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +147 +146 +147 +144 +143 +139 +140 +139 +133 +133 +130 +129 +130 +126 +125 +120 +120 +119 +115 +115 +109 +110 +108 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +82 +82 +82 +76 +76 +72 +72 +73 +68 +68 +65 +64 +59 +59 +58 +54 +54 +50 +50 +51 +47 +47 +43 +43 +43 +40 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +22 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +14 +13 +13 +14 +14 +14 +14 +14 +14 +13 +14 +13 +14 +14 +14 +13 +13 +14 +13 +14 +14 +14 +13 +14 +13 +13 +15 +15 +17 +17 +18 +19 +19 +21 +21 +26 +25 +25 +27 +27 +31 +31 +31 +33 +34 +37 +37 +37 +41 +41 +43 +43 +43 +47 +46 +51 +51 +51 +54 +54 +58 +58 +64 +64 +64 +69 +68 +72 +72 +72 +76 +76 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +97 +100 +100 +106 +106 +110 +110 +109 +116 +115 +119 +120 +120 +125 +125 +125 +125 +126 +129 +129 +133 +133 +133 +140 +140 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +172 +173 +173 +175 +175 +179 +179 +179 +183 +183 +184 +184 +188 +188 +189 +190 +190 +194 +194 +195 +197 +196 +199 +199 +199 +200 +200 +200 +200 +200 +202 +203 +204 +204 +205 +204 +204 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +204 +204 +204 +204 +204 +202 +203 +200 +201 +201 +200 +200 +198 +198 +197 +196 +196 +195 +195 +190 +191 +190 +189 +189 +185 +184 +184 +182 +183 +179 +179 +179 +174 +175 +173 +173 +173 +169 +169 +165 +165 +160 +161 +161 +157 +157 +151 +151 +151 +147 +147 +147 +147 +147 +143 +143 +139 +140 +139 +133 +133 +129 +129 +127 +125 +125 +119 +119 +115 +116 +116 +110 +110 +106 +106 +106 +100 +100 +100 +100 +100 +95 +96 +90 +90 +90 +86 +86 +82 +82 +79 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +58 +58 +54 +55 +51 +51 +51 +46 +47 +42 +43 +43 +41 +41 +37 +36 +36 +34 +33 +31 +31 +26 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +14 +13 +13 +14 +14 +14 +13 +13 +13 +14 +13 +13 +13 +14 +14 +14 +14 +13 +13 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +34 +37 +37 +41 +41 +42 +43 +43 +47 +47 +51 +51 +50 +54 +55 +55 +54 +54 +59 +58 +64 +65 +64 +68 +68 +72 +72 +73 +76 +77 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +100 +100 +100 +106 +106 +110 +110 +110 +116 +116 +119 +120 +125 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +144 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +172 +173 +173 +175 +175 +179 +179 +178 +183 +183 +184 +184 +184 +188 +188 +191 +190 +190 +195 +194 +196 +196 +197 +198 +198 +200 +200 +201 +200 +200 +202 +202 +204 +204 +204 +204 +204 +204 +204 +204 +207 +206 +206 +206 +206 +206 +207 +206 +206 +207 +207 +206 +206 +206 +205 +204 +204 +204 +204 +202 +202 +202 +200 +200 +200 +201 +200 +199 +198 +196 +196 +196 +195 +194 +190 +191 +191 +188 +188 +184 +184 +183 +182 +182 +178 +179 +175 +175 +174 +173 +173 +169 +169 +169 +164 +165 +161 +161 +161 +157 +157 +151 +150 +150 +147 +147 +144 +144 +139 +139 +139 +133 +133 +129 +130 +129 +126 +125 +125 +125 +124 +120 +119 +116 +115 +116 +110 +110 +106 +106 +102 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +65 +58 +58 +55 +55 +51 +50 +50 +46 +46 +43 +43 +43 +40 +40 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +16 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +14 +13 +14 +13 +13 +14 +14 +14 +14 +13 +14 +13 +14 +14 +14 +14 +13 +14 +13 +13 +14 +14 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +41 +41 +41 +43 +43 +47 +46 +47 +51 +51 +55 +54 +56 +58 +58 +64 +64 +68 +69 +68 +72 +72 +76 +76 +76 +82 +82 +82 +82 +82 +87 +86 +90 +90 +90 +96 +96 +100 +100 +102 +106 +106 +110 +110 +115 +115 +115 +119 +120 +125 +125 +126 +130 +129 +133 +133 +133 +139 +139 +143 +143 +144 +147 +147 +151 +151 +156 +157 +157 +161 +161 +165 +165 +165 +168 +169 +173 +173 +172 +175 +174 +178 +179 +179 +182 +182 +185 +185 +184 +189 +188 +190 +190 +194 +194 +194 +197 +196 +199 +198 +198 +200 +200 +200 +200 +201 +200 +201 +202 +202 +202 +204 +204 +204 +204 +204 +206 +207 +206 +206 +207 +206 +206 +207 +207 +206 +206 +206 +206 +206 +204 +205 +204 +204 +204 +203 +202 +202 +200 +201 +200 +201 +201 +198 +199 +197 +196 +194 +194 +194 +190 +190 +189 +188 +188 +185 +184 +185 +185 +184 +183 +183 +178 +178 +179 +175 +175 +173 +173 +171 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +152 +147 +147 +147 +147 +147 +143 +143 +139 +139 +140 +133 +133 +129 +129 +127 +125 +126 +120 +119 +116 +115 +116 +109 +110 +105 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +77 +73 +72 +72 +68 +68 +65 +64 +64 +58 +58 +59 +59 +58 +55 +54 +51 +51 +50 +47 +46 +43 +43 +43 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +13 +14 +14 +14 +14 +13 +14 +14 +14 +14 +14 +13 +13 +14 +14 +13 +14 +14 +13 +14 +14 +13 +14 +13 +14 +13 +12 +15 +15 +17 +18 +17 +19 +19 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +42 +41 +40 +43 +43 +47 +46 +47 +50 +51 +51 +51 +51 +54 +55 +58 +59 +58 +64 +64 +68 +69 +67 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +116 +120 +119 +125 +125 +125 +129 +129 +130 +129 +129 +133 +133 +140 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +156 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +178 +179 +182 +183 +182 +184 +184 +188 +188 +188 +190 +191 +194 +195 +195 +197 +196 +198 +199 +201 +200 +201 +200 +200 +202 +202 +203 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +202 +200 +200 +201 +200 +200 +200 +200 +198 +199 +198 +197 +196 +194 +194 +193 +190 +190 +188 +189 +185 +184 +185 +182 +183 +179 +178 +179 +175 +175 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +130 +125 +126 +119 +120 +120 +115 +115 +109 +110 +106 +106 +105 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +69 +65 +64 +58 +59 +55 +54 +54 +51 +50 +47 +46 +47 +42 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +26 +27 +27 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +16 +15 +13 +13 +13 +13 +14 +14 +14 +14 +13 +13 +14 +14 +14 +13 +14 +14 +13 +13 +13 +13 +13 +14 +14 +14 +14 +13 +13 +14 +14 +14 +13 +13 +13 +12 +15 +15 +17 +17 +18 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +33 +33 +33 +37 +37 +40 +41 +41 +43 +43 +47 +47 +49 +50 +50 +55 +54 +58 +58 +58 +64 +65 +69 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +100 +99 +100 +106 +106 +110 +109 +110 +116 +115 +120 +120 +119 +125 +125 +129 +129 +129 +133 +134 +139 +139 +140 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +183 +185 +184 +188 +189 +191 +190 +190 +194 +195 +196 +196 +196 +198 +198 +198 +198 +198 +200 +200 +200 +201 +200 +202 +202 +204 +205 +205 +204 +204 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +204 +204 +204 +204 +205 +202 +202 +201 +200 +201 +200 +200 +198 +199 +199 +196 +196 +195 +194 +194 +190 +191 +190 +191 +190 +188 +188 +185 +184 +184 +183 +182 +178 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +160 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +120 +119 +116 +116 +110 +110 +110 +106 +106 +100 +99 +100 +96 +95 +90 +90 +90 +86 +86 +82 +82 +77 +76 +77 +72 +72 +68 +68 +68 +64 +64 +58 +58 +59 +54 +55 +51 +51 +51 +47 +47 +43 +43 +43 +40 +40 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +26 +25 +21 +21 +21 +18 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +14 +13 +14 +14 +13 +14 +14 +14 +14 +14 +14 +13 +14 +13 +14 +14 +13 +14 +13 +13 +13 +13 +13 +13 +14 +13 +14 +13 +16 +15 +17 +17 +17 +19 +19 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +32 +31 +33 +33 +37 +37 +41 +40 +41 +43 +43 +47 +47 +47 +51 +50 +54 +55 +54 +59 +58 +64 +64 +65 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +95 +96 +100 +100 +105 +106 +106 +110 +110 +116 +115 +115 +119 +119 +126 +125 +129 +129 +130 +133 +133 +139 +139 +139 +143 +144 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +175 +174 +175 +179 +178 +182 +183 +183 +185 +185 +189 +188 +189 +190 +191 +194 +195 +195 +196 +196 +198 +198 +199 +200 +200 +200 +201 +203 +202 +202 +205 +205 +204 +204 +205 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +205 +204 +204 +204 +204 +203 +202 +200 +200 +200 +200 +200 +200 +200 +200 +198 +198 +197 +197 +197 +195 +195 +191 +190 +189 +188 +189 +185 +184 +182 +182 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +120 +119 +119 +115 +116 +110 +110 +109 +106 +106 +100 +100 +96 +96 +96 +91 +90 +85 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +59 +59 +54 +54 +51 +51 +48 +46 +47 +42 +43 +41 +41 +41 +37 +37 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +26 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +12 +13 +14 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +14 +13 +13 +14 +13 +14 +14 +13 +14 +13 +14 +14 +14 +14 +13 +13 +12 +15 +15 +17 +17 +18 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +36 +37 +41 +41 +43 +43 +43 +47 +46 +50 +50 +54 +54 +54 +59 +58 +64 +64 +64 +68 +68 +69 +69 +68 +72 +73 +76 +76 +76 +82 +82 +86 +86 +86 +91 +90 +96 +96 +99 +100 +100 +106 +106 +109 +110 +110 +115 +116 +116 +116 +116 +119 +119 +125 +125 +125 +129 +129 +133 +133 +134 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +161 +160 +161 +165 +165 +169 +169 +169 +173 +173 +175 +174 +175 +178 +179 +183 +183 +185 +185 +185 +189 +188 +191 +191 +190 +195 +194 +196 +196 +197 +198 +198 +200 +200 +201 +200 +200 +203 +202 +203 +204 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +207 +206 +207 +204 +204 +204 +205 +204 +202 +202 +201 +200 +200 +201 +200 +198 +198 +197 +196 +197 +194 +194 +190 +190 +191 +189 +188 +185 +185 +185 +183 +182 +179 +179 +174 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +130 +129 +129 +125 +126 +119 +119 +120 +116 +115 +110 +110 +109 +106 +106 +100 +100 +100 +96 +96 +90 +90 +91 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +68 +68 +64 +65 +58 +59 +58 +55 +55 +51 +50 +50 +47 +47 +43 +43 +44 +41 +41 +37 +37 +33 +33 +33 +30 +31 +27 +27 +27 +24 +25 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +16 +15 +15 +16 +15 +13 +13 +12 +13 +13 +14 +14 +14 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +13 +14 +13 +14 +14 +14 +14 +13 +13 +13 +14 +14 +13 +13 +14 +13 +15 +16 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +26 +27 +27 +31 +31 +33 +33 +33 +37 +37 +40 +41 +41 +43 +43 +47 +47 +47 +50 +50 +55 +54 +55 +58 +59 +64 +65 +64 +68 +68 +72 +73 +77 +76 +76 +83 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +109 +115 +116 +116 +120 +120 +125 +125 +130 +129 +129 +134 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +166 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +183 +185 +185 +185 +185 +185 +189 +189 +190 +191 +190 +195 +194 +197 +196 +196 +198 +198 +200 +200 +201 +200 +200 +202 +202 +204 +204 +204 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +204 +204 +204 +204 +204 +202 +202 +202 +200 +201 +201 +201 +201 +199 +199 +196 +197 +197 +195 +194 +191 +191 +189 +189 +189 +185 +185 +182 +182 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +133 +134 +133 +129 +129 +126 +125 +125 +119 +119 +116 +116 +115 +110 +110 +106 +106 +101 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +83 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +65 +58 +58 +54 +54 +50 +51 +51 +46 +46 +47 +47 +47 +43 +43 +42 +42 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +29 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +13 +13 +14 +14 +13 +14 +14 +13 +14 +14 +14 +14 +13 +14 +13 +13 +14 +13 +13 +14 +14 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +32 +33 +33 +37 +37 +41 +41 +41 +43 +42 +47 +47 +51 +50 +51 +55 +54 +59 +58 +59 +64 +65 +68 +69 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +109 +110 +116 +116 +119 +119 +119 +125 +125 +129 +130 +129 +133 +133 +139 +139 +140 +143 +143 +147 +146 +150 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +174 +175 +175 +179 +179 +183 +182 +183 +184 +185 +189 +189 +190 +191 +191 +194 +195 +196 +196 +196 +198 +199 +198 +198 +198 +201 +200 +200 +201 +201 +202 +203 +204 +204 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +205 +204 +204 +205 +203 +202 +200 +200 +200 +200 +201 +199 +198 +196 +196 +197 +194 +195 +191 +190 +190 +188 +189 +184 +184 +185 +183 +182 +178 +178 +178 +175 +175 +173 +173 +169 +169 +169 +165 +165 +160 +161 +161 +157 +157 +150 +151 +151 +147 +147 +144 +143 +143 +139 +139 +134 +133 +134 +129 +130 +126 +125 +120 +120 +120 +116 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +83 +82 +76 +76 +72 +72 +69 +68 +68 +64 +64 +59 +59 +59 +55 +54 +51 +51 +50 +46 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +20 +19 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +14 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +13 +14 +13 +14 +14 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +42 +43 +43 +47 +47 +51 +51 +50 +55 +54 +58 +58 +58 +65 +64 +68 +69 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +91 +90 +90 +96 +96 +100 +100 +100 +106 +106 +105 +106 +106 +110 +110 +115 +116 +115 +120 +119 +126 +125 +126 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +152 +151 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +170 +173 +173 +175 +175 +178 +179 +179 +183 +183 +184 +184 +184 +189 +188 +189 +189 +188 +190 +191 +195 +194 +195 +196 +197 +198 +198 +198 +200 +201 +201 +200 +202 +202 +202 +204 +204 +204 +204 +205 +206 +206 +206 +206 +206 +207 +206 +206 +207 +207 +206 +207 +206 +207 +204 +204 +204 +204 +204 +202 +202 +202 +200 +201 +200 +200 +200 +198 +198 +197 +197 +196 +195 +195 +190 +191 +190 +188 +188 +185 +185 +182 +182 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +140 +139 +139 +133 +133 +130 +130 +130 +125 +126 +120 +119 +119 +116 +116 +109 +110 +110 +106 +105 +100 +100 +101 +96 +96 +90 +90 +85 +86 +86 +83 +82 +76 +77 +76 +72 +72 +72 +72 +72 +68 +69 +65 +65 +64 +58 +58 +55 +54 +55 +51 +51 +46 +47 +43 +43 +43 +41 +40 +37 +37 +37 +33 +33 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +19 +19 +19 +17 +17 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +13 +13 +14 +14 +13 +13 +14 +13 +14 +13 +13 +14 +14 +13 +13 +14 +14 +13 +14 +13 +13 +13 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +30 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +51 +55 +55 +59 +59 +65 +65 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +101 +106 +106 +110 +110 +116 +115 +115 +119 +120 +125 +125 +125 +129 +130 +133 +133 +134 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +174 +175 +175 +179 +179 +183 +182 +183 +184 +185 +189 +189 +190 +191 +191 +194 +195 +196 +196 +196 +199 +198 +200 +201 +200 +200 +200 +202 +203 +202 +204 +204 +204 +204 +205 +206 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +205 +204 +204 +204 +202 +202 +203 +200 +200 +201 +201 +200 +198 +199 +196 +196 +195 +195 +194 +190 +190 +188 +189 +188 +185 +184 +183 +182 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +170 +165 +165 +161 +161 +158 +157 +157 +151 +151 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +130 +129 +125 +125 +126 +120 +119 +116 +116 +110 +109 +110 +106 +106 +100 +100 +100 +96 +96 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +73 +72 +68 +68 +64 +64 +64 +59 +58 +55 +55 +55 +50 +50 +51 +50 +50 +48 +47 +43 +43 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +12 +12 +14 +13 +14 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +14 +14 +13 +13 +13 +13 +13 +14 +14 +13 +14 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +36 +40 +41 +43 +43 +43 +47 +47 +51 +51 +51 +54 +54 +58 +59 +59 +64 +64 +68 +68 +69 +72 +72 +76 +76 +77 +82 +83 +86 +86 +91 +90 +90 +96 +96 +100 +100 +100 +106 +106 +106 +106 +106 +110 +110 +115 +115 +115 +120 +120 +125 +126 +126 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +174 +175 +175 +179 +179 +182 +183 +182 +185 +185 +189 +189 +188 +190 +190 +194 +194 +194 +196 +196 +198 +199 +199 +201 +201 +201 +200 +202 +202 +203 +205 +204 +204 +205 +204 +206 +206 +207 +206 +207 +207 +207 +206 +206 +206 +206 +207 +206 +206 +206 +204 +204 +205 +204 +203 +202 +202 +200 +201 +201 +200 +200 +198 +198 +197 +196 +197 +194 +195 +190 +190 +190 +189 +189 +184 +185 +185 +182 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +150 +151 +147 +147 +143 +143 +144 +139 +139 +133 +133 +130 +129 +129 +125 +125 +119 +119 +120 +115 +116 +116 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +93 +90 +90 +86 +86 +81 +82 +82 +76 +76 +72 +72 +73 +69 +68 +68 +68 +68 +64 +64 +58 +59 +59 +54 +54 +51 +51 +48 +47 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +26 +25 +21 +21 +21 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +14 +13 +14 +14 +13 +13 +14 +13 +13 +14 +13 +13 +14 +14 +13 +13 +14 +13 +14 +14 +14 +13 +13 +14 +13 +13 +15 +15 +15 +17 +16 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +34 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +51 +55 +54 +55 +59 +59 +65 +65 +65 +68 +68 +72 +73 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +105 +106 +110 +110 +116 +116 +116 +119 +119 +125 +125 +130 +130 +129 +133 +134 +139 +139 +139 +143 +143 +143 +143 +143 +147 +147 +151 +151 +150 +157 +157 +161 +161 +162 +165 +165 +169 +169 +172 +173 +173 +175 +175 +179 +179 +179 +182 +183 +184 +185 +184 +188 +188 +190 +191 +191 +195 +194 +196 +196 +195 +198 +198 +200 +200 +200 +201 +200 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +207 +207 +206 +206 +205 +204 +204 +204 +204 +202 +202 +200 +200 +200 +200 +200 +198 +198 +198 +196 +197 +194 +195 +195 +191 +191 +189 +189 +185 +185 +185 +183 +183 +179 +179 +178 +175 +175 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +133 +133 +133 +129 +129 +126 +126 +126 +120 +120 +116 +116 +113 +110 +109 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +66 +64 +65 +58 +58 +54 +54 +55 +51 +51 +47 +47 +47 +43 +43 +41 +40 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +24 +21 +22 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +13 +14 +14 +14 +13 +14 +14 +14 +14 +14 +14 +13 +14 +14 +13 +13 +13 +14 +13 +14 +14 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +40 +41 +41 +43 +43 +47 +46 +47 +50 +50 +55 +55 +58 +58 +58 +64 +68 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +97 +100 +100 +106 +105 +110 +109 +110 +115 +116 +119 +120 +120 +125 +125 +125 +125 +125 +129 +129 +133 +134 +133 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +179 +183 +183 +185 +185 +187 +188 +188 +190 +190 +194 +195 +194 +196 +196 +198 +198 +198 +200 +200 +200 +200 +201 +202 +202 +204 +204 +205 +204 +204 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +204 +204 +205 +204 +204 +202 +202 +200 +200 +201 +201 +200 +198 +198 +197 +197 +196 +195 +194 +190 +190 +191 +188 +188 +185 +185 +184 +183 +183 +178 +178 +179 +175 +175 +173 +173 +174 +169 +169 +165 +165 +161 +161 +161 +156 +157 +151 +151 +151 +147 +147 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +130 +129 +130 +125 +125 +119 +120 +116 +115 +115 +110 +110 +106 +106 +106 +100 +100 +100 +99 +100 +96 +96 +90 +90 +90 +85 +86 +82 +82 +77 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +58 +58 +54 +54 +50 +51 +51 +47 +47 +42 +42 +43 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +14 +13 +14 +13 +13 +14 +13 +13 +14 +13 +13 +14 +14 +13 +14 +13 +13 +13 +14 +14 +13 +13 +14 +13 +13 +14 +13 +16 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +38 +41 +41 +43 +43 +47 +47 +47 +50 +51 +55 +55 +55 +58 +59 +64 +64 +65 +68 +69 +72 +72 +72 +76 +76 +82 +82 +83 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +109 +110 +109 +110 +110 +116 +116 +119 +119 +120 +125 +125 +129 +129 +131 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +168 +169 +169 +173 +173 +174 +175 +178 +179 +178 +183 +183 +185 +184 +185 +189 +189 +191 +190 +190 +194 +194 +196 +196 +196 +198 +198 +200 +200 +201 +201 +201 +202 +202 +205 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +205 +206 +206 +206 +206 +206 +207 +206 +204 +204 +204 +204 +204 +203 +202 +200 +200 +201 +200 +200 +198 +198 +198 +196 +197 +194 +194 +195 +190 +190 +188 +189 +188 +184 +185 +183 +183 +183 +179 +179 +175 +175 +172 +172 +173 +169 +169 +165 +165 +165 +161 +161 +161 +161 +160 +157 +157 +151 +151 +151 +147 +147 +143 +143 +144 +139 +139 +133 +133 +130 +129 +129 +125 +125 +119 +119 +119 +116 +116 +116 +116 +116 +109 +109 +105 +106 +106 +100 +99 +96 +96 +91 +90 +90 +86 +86 +82 +82 +81 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +59 +58 +54 +54 +54 +50 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +12 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +14 +14 +14 +13 +14 +13 +13 +14 +13 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +30 +33 +33 +37 +36 +37 +41 +41 +43 +43 +43 +47 +47 +46 +47 +46 +51 +50 +55 +54 +55 +58 +58 +64 +64 +66 +69 +68 +72 +72 +76 +77 +76 +82 +82 +86 +86 +86 +90 +90 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +109 +115 +116 +116 +120 +120 +125 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +164 +165 +165 +169 +169 +173 +173 +173 +175 +175 +175 +175 +175 +178 +179 +183 +183 +183 +185 +185 +188 +188 +189 +191 +191 +194 +194 +196 +196 +197 +198 +199 +200 +200 +201 +200 +200 +202 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +204 +204 +205 +204 +204 +204 +204 +204 +202 +202 +201 +200 +201 +200 +200 +199 +198 +200 +196 +196 +194 +195 +190 +190 +190 +189 +189 +184 +185 +185 +183 +182 +183 +183 +183 +178 +178 +175 +174 +175 +173 +173 +169 +168 +167 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +144 +143 +143 +143 +139 +139 +133 +133 +134 +129 +129 +125 +125 +123 +119 +119 +116 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +77 +76 +72 +72 +71 +68 +69 +64 +64 +59 +58 +58 +55 +55 +51 +51 +50 +47 +46 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +27 +27 +26 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +16 +13 +13 +12 +13 +13 +13 +14 +14 +13 +14 +14 +14 +13 +13 +14 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +14 +13 +14 +14 +13 +13 +15 +15 +17 +17 +20 +19 +19 +21 +21 +25 +25 +25 +27 +27 +27 +27 +27 +31 +31 +32 +33 +33 +37 +37 +41 +41 +41 +43 +42 +46 +46 +51 +51 +50 +54 +54 +59 +58 +58 +65 +65 +64 +64 +65 +68 +68 +72 +72 +72 +76 +76 +82 +82 +85 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +115 +119 +119 +125 +125 +126 +130 +129 +133 +134 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +172 +175 +175 +179 +179 +183 +183 +182 +185 +185 +184 +184 +185 +189 +188 +191 +190 +191 +194 +195 +197 +196 +196 +198 +198 +200 +200 +200 +200 +201 +202 +202 +205 +204 +204 +204 +204 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +206 +206 +204 +205 +205 +204 +204 +202 +203 +200 +200 +200 +200 +200 +198 +198 +198 +196 +196 +197 +197 +197 +194 +194 +191 +190 +190 +188 +188 +185 +184 +184 +183 +183 +179 +178 +174 +174 +175 +173 +173 +169 +169 +169 +165 +165 +165 +165 +165 +161 +161 +158 +157 +157 +151 +151 +147 +147 +145 +143 +144 +139 +139 +133 +133 +133 +129 +130 +126 +125 +125 +120 +119 +115 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +90 +90 +90 +87 +86 +82 +82 +82 +76 +76 +72 +72 +73 +69 +68 +64 +65 +65 +58 +58 +55 +54 +54 +50 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +36 +33 +33 +31 +31 +30 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +12 +13 +13 +14 +13 +13 +14 +14 +14 +13 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +14 +13 +14 +14 +13 +14 +13 +12 +15 +16 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +26 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +42 +43 +43 +43 +46 +47 +50 +50 +51 +55 +55 +58 +59 +64 +64 +64 +68 +69 +72 +73 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +109 +115 +116 +116 +119 +119 +125 +125 +125 +129 +129 +134 +134 +134 +139 +139 +143 +143 +143 +147 +147 +151 +151 +152 +157 +157 +161 +161 +165 +165 +165 +169 +169 +172 +173 +173 +175 +175 +178 +179 +178 +183 +183 +185 +185 +184 +188 +188 +190 +191 +191 +194 +194 +196 +196 +199 +198 +198 +201 +200 +200 +200 +200 +203 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +207 +207 +207 +206 +207 +206 +206 +206 +206 +206 +205 +204 +204 +204 +204 +202 +202 +202 +202 +202 +200 +201 +200 +201 +200 +199 +198 +197 +197 +198 +195 +194 +190 +191 +188 +189 +189 +185 +185 +182 +183 +183 +179 +179 +178 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +130 +125 +126 +126 +119 +119 +116 +115 +111 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +58 +58 +58 +55 +55 +51 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +36 +33 +33 +31 +31 +31 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +14 +14 +13 +14 +13 +14 +13 +14 +13 +14 +13 +13 +13 +13 +14 +13 +14 +14 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +31 +32 +31 +33 +33 +37 +37 +37 +41 +41 +42 +43 +42 +47 +46 +51 +51 +55 +54 +55 +58 +58 +64 +64 +64 +68 +69 +72 +73 +72 +76 +76 +82 +82 +82 +86 +86 +90 +91 +95 +96 +96 +100 +100 +106 +106 +106 +110 +109 +116 +115 +116 +119 +119 +125 +125 +126 +129 +129 +133 +133 +133 +139 +140 +143 +143 +148 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +164 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +185 +184 +189 +188 +188 +190 +190 +195 +194 +194 +196 +196 +198 +198 +198 +200 +200 +200 +200 +200 +203 +203 +204 +205 +205 +204 +204 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +204 +205 +204 +205 +204 +202 +202 +200 +200 +200 +200 +200 +199 +198 +196 +197 +196 +194 +194 +191 +191 +191 +189 +188 +189 +188 +188 +184 +184 +183 +183 +183 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +164 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +140 +133 +133 +129 +129 +127 +126 +125 +119 +120 +115 +115 +115 +109 +109 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +87 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +58 +58 +55 +55 +55 +51 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +32 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +12 +13 +14 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +13 +13 +14 +13 +14 +14 +13 +13 +13 +14 +13 +13 +14 +13 +13 +14 +14 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +38 +41 +41 +43 +42 +46 +47 +47 +51 +50 +55 +55 +55 +59 +58 +64 +64 +65 +68 +68 +72 +72 +73 +76 +76 +82 +82 +85 +86 +86 +90 +90 +96 +96 +96 +100 +100 +105 +106 +105 +110 +110 +115 +115 +116 +120 +119 +125 +125 +126 +129 +129 +133 +133 +136 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +183 +182 +183 +184 +185 +188 +189 +188 +190 +191 +195 +195 +194 +196 +196 +198 +198 +199 +200 +201 +200 +200 +201 +202 +202 +204 +204 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +206 +204 +204 +205 +204 +204 +202 +202 +200 +200 +200 +200 +200 +199 +198 +198 +197 +196 +197 +196 +196 +195 +194 +190 +190 +190 +189 +189 +184 +184 +183 +182 +183 +179 +179 +174 +175 +175 +172 +173 +168 +169 +169 +164 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +126 +119 +119 +119 +116 +116 +110 +110 +110 +106 +105 +100 +100 +100 +96 +95 +90 +90 +87 +86 +86 +82 +82 +76 +77 +76 +72 +72 +68 +69 +68 +64 +64 +58 +58 +59 +55 +54 +51 +51 +51 +47 +47 +42 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +18 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +13 +14 +13 +14 +13 +14 +13 +14 +13 +14 +14 +14 +13 +14 +13 +14 +14 +14 +13 +13 +14 +14 +14 +13 +13 +13 +13 +13 +15 +15 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +32 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +50 +54 +54 +55 +59 +58 +65 +64 +68 +68 +68 +72 +72 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +101 +100 +106 +106 +106 +109 +110 +116 +116 +120 +120 +120 +125 +125 +129 +130 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +158 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +182 +183 +185 +185 +188 +188 +188 +190 +191 +195 +194 +194 +196 +196 +198 +198 +201 +201 +200 +200 +200 +202 +202 +202 +204 +204 +205 +204 +204 +204 +204 +206 +207 +207 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +203 +202 +202 +202 +203 +200 +200 +200 +200 +201 +198 +198 +196 +196 +195 +194 +195 +190 +191 +190 +191 +190 +189 +189 +185 +185 +184 +182 +182 +179 +178 +178 +175 +175 +173 +173 +173 +169 +169 +164 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +126 +125 +125 +119 +119 +115 +115 +110 +109 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +59 +59 +59 +55 +54 +55 +55 +54 +51 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +14 +14 +13 +14 +13 +13 +13 +14 +14 +14 +14 +13 +13 +13 +14 +14 +14 +13 +14 +14 +13 +13 +14 +14 +14 +13 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +32 +33 +36 +36 +41 +40 +42 +43 +43 +47 +47 +51 +51 +51 +54 +54 +58 +58 +58 +64 +64 +68 +68 +69 +72 +72 +76 +76 +76 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +99 +106 +106 +110 +110 +109 +115 +116 +120 +120 +120 +126 +126 +130 +129 +129 +134 +134 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +164 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +182 +184 +184 +185 +189 +188 +190 +191 +190 +194 +194 +194 +195 +194 +196 +196 +198 +198 +199 +200 +200 +200 +200 +201 +202 +203 +204 +205 +205 +205 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +205 +206 +206 +206 +206 +206 +206 +206 +204 +204 +205 +204 +205 +202 +202 +201 +200 +200 +200 +200 +198 +198 +198 +196 +196 +194 +194 +194 +191 +191 +188 +188 +189 +185 +185 +182 +183 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +134 +133 +133 +129 +129 +125 +126 +125 +119 +119 +116 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +97 +90 +90 +86 +86 +83 +82 +82 +76 +76 +76 +76 +77 +72 +73 +68 +68 +69 +64 +64 +58 +59 +58 +54 +54 +51 +51 +51 +47 +47 +43 +43 +40 +40 +40 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +18 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +14 +13 +13 +13 +14 +14 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +14 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +30 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +50 +51 +55 +55 +58 +58 +58 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +116 +119 +120 +126 +125 +126 +129 +129 +133 +134 +133 +140 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +162 +165 +165 +169 +169 +172 +173 +173 +175 +175 +179 +179 +179 +182 +182 +182 +182 +183 +185 +185 +189 +188 +188 +190 +191 +194 +195 +195 +196 +197 +198 +199 +200 +200 +201 +200 +201 +202 +203 +202 +205 +204 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +207 +206 +204 +204 +204 +204 +204 +202 +202 +201 +200 +200 +201 +200 +199 +198 +199 +197 +197 +194 +194 +191 +191 +191 +189 +188 +184 +185 +184 +183 +183 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +140 +140 +134 +133 +133 +129 +130 +126 +126 +125 +119 +119 +115 +115 +116 +110 +110 +106 +105 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +86 +86 +86 +81 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +59 +59 +55 +54 +54 +51 +51 +47 +47 +47 +43 +43 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +29 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +15 +15 +13 +13 +13 +13 +12 +13 +14 +14 +13 +14 +13 +13 +13 +13 +13 +14 +13 +13 +14 +14 +14 +14 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +42 +47 +47 +51 +51 +51 +55 +55 +59 +58 +58 +64 +64 +64 +64 +65 +69 +69 +72 +72 +72 +76 +76 +82 +83 +83 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +116 +120 +119 +126 +125 +125 +129 +130 +134 +133 +133 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +161 +161 +161 +165 +164 +169 +169 +169 +173 +173 +175 +175 +176 +178 +179 +182 +183 +184 +184 +184 +188 +189 +190 +191 +190 +194 +194 +194 +195 +194 +196 +196 +198 +199 +199 +200 +201 +200 +200 +201 +203 +203 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +204 +205 +204 +204 +203 +202 +202 +200 +200 +200 +200 +200 +199 +198 +199 +199 +199 +196 +196 +195 +195 +195 +190 +191 +188 +188 +188 +185 +184 +182 +183 +179 +178 +179 +175 +174 +173 +173 +173 +169 +169 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +140 +139 +139 +134 +133 +129 +129 +129 +125 +125 +120 +119 +120 +116 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +73 +72 +73 +72 +72 +68 +68 +65 +65 +65 +59 +58 +54 +54 +53 +51 +51 +47 +47 +42 +43 +43 +41 +41 +38 +37 +37 +33 +33 +33 +33 +33 +31 +31 +26 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +13 +13 +14 +13 +13 +13 +14 +13 +13 +14 +14 +14 +13 +13 +14 +13 +14 +14 +13 +14 +14 +13 +14 +14 +14 +13 +15 +15 +15 +17 +17 +20 +19 +19 +21 +22 +25 +25 +27 +27 +27 +31 +31 +33 +32 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +50 +50 +54 +55 +55 +59 +59 +65 +64 +69 +68 +68 +72 +72 +76 +76 +77 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +105 +106 +110 +110 +116 +115 +119 +119 +120 +126 +125 +129 +129 +129 +134 +133 +133 +134 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +153 +157 +157 +161 +161 +165 +165 +164 +169 +169 +173 +172 +172 +175 +175 +175 +175 +175 +179 +179 +183 +182 +183 +185 +185 +188 +188 +190 +190 +191 +194 +194 +196 +196 +197 +198 +198 +201 +200 +200 +200 +201 +203 +202 +202 +204 +205 +204 +204 +205 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +204 +204 +204 +204 +205 +202 +202 +202 +200 +200 +200 +201 +200 +198 +198 +196 +196 +195 +194 +194 +190 +191 +188 +188 +188 +184 +185 +183 +183 +182 +178 +179 +175 +174 +175 +173 +172 +169 +169 +169 +165 +165 +161 +161 +158 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +130 +130 +129 +129 +125 +126 +119 +119 +120 +115 +115 +110 +110 +105 +106 +106 +100 +100 +96 +96 +96 +90 +90 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +73 +72 +74 +69 +68 +65 +65 +58 +59 +59 +54 +55 +50 +51 +51 +47 +46 +47 +47 +47 +43 +43 +41 +40 +41 +36 +37 +33 +33 +34 +30 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +14 +13 +13 +14 +14 +14 +13 +13 +13 +14 +14 +13 +14 +14 +14 +13 +13 +13 +13 +14 +14 +14 +13 +14 +14 +14 +14 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +46 +51 +51 +50 +55 +54 +59 +59 +58 +65 +64 +64 +64 +65 +69 +68 +72 +72 +72 +76 +76 +82 +82 +83 +85 +86 +90 +90 +95 +96 +95 +100 +100 +106 +106 +106 +110 +110 +110 +110 +110 +115 +116 +119 +119 +119 +125 +125 +129 +130 +130 +133 +134 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +175 +175 +175 +178 +179 +182 +182 +182 +184 +185 +188 +189 +188 +190 +190 +195 +194 +194 +196 +197 +199 +198 +198 +200 +201 +200 +200 +202 +202 +203 +204 +204 +204 +205 +204 +207 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +204 +204 +205 +204 +204 +202 +202 +200 +200 +200 +200 +201 +199 +199 +198 +196 +196 +194 +194 +194 +190 +191 +189 +189 +189 +185 +185 +183 +183 +179 +179 +179 +174 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +133 +133 +133 +130 +129 +125 +125 +125 +120 +120 +115 +116 +115 +110 +110 +107 +106 +106 +100 +100 +97 +96 +93 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +69 +69 +68 +68 +68 +64 +64 +58 +59 +59 +54 +54 +50 +51 +51 +47 +46 +43 +42 +40 +41 +41 +36 +37 +33 +33 +32 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +13 +14 +13 +13 +14 +14 +13 +13 +13 +13 +13 +13 +14 +13 +14 +14 +14 +13 +13 +14 +14 +13 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +24 +25 +25 +27 +27 +31 +31 +33 +33 +33 +36 +37 +41 +41 +41 +43 +43 +47 +47 +46 +51 +51 +55 +55 +55 +59 +58 +64 +65 +65 +69 +68 +72 +72 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +112 +116 +116 +120 +119 +126 +125 +126 +129 +130 +133 +133 +133 +139 +139 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +160 +161 +161 +165 +165 +169 +169 +169 +173 +173 +173 +173 +173 +175 +175 +179 +179 +179 +182 +183 +184 +185 +185 +189 +189 +190 +190 +194 +194 +195 +196 +197 +199 +198 +198 +200 +200 +200 +200 +200 +202 +202 +205 +204 +204 +204 +205 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +201 +201 +200 +200 +200 +198 +198 +198 +196 +196 +194 +194 +191 +190 +191 +188 +189 +184 +185 +184 +182 +183 +179 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +139 +140 +139 +134 +133 +129 +129 +129 +125 +125 +119 +119 +117 +116 +116 +110 +110 +105 +106 +106 +101 +100 +96 +96 +96 +90 +90 +90 +90 +90 +86 +86 +82 +82 +82 +76 +77 +72 +72 +69 +68 +68 +64 +64 +58 +59 +59 +55 +54 +51 +51 +51 +47 +47 +42 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +16 +13 +13 +12 +13 +13 +13 +14 +13 +13 +13 +13 +14 +14 +14 +14 +13 +13 +13 +13 +14 +13 +14 +14 +14 +13 +13 +14 +13 +13 +13 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +42 +43 +43 +47 +47 +51 +51 +50 +54 +55 +58 +58 +59 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +87 +90 +90 +96 +96 +99 +100 +100 +106 +106 +110 +109 +110 +116 +115 +116 +115 +116 +119 +119 +125 +125 +125 +128 +129 +133 +133 +136 +139 +139 +143 +143 +146 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +164 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +182 +183 +183 +185 +185 +189 +188 +188 +191 +190 +195 +194 +194 +196 +196 +198 +198 +198 +200 +200 +200 +200 +200 +202 +202 +204 +204 +204 +204 +204 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +204 +204 +204 +204 +205 +202 +202 +201 +200 +201 +200 +200 +198 +198 +196 +197 +197 +195 +195 +191 +190 +191 +189 +189 +185 +185 +184 +183 +183 +178 +179 +178 +175 +175 +172 +173 +169 +169 +169 +165 +165 +160 +161 +161 +157 +157 +158 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +137 +133 +133 +130 +130 +125 +125 +125 +119 +119 +116 +115 +115 +109 +110 +109 +110 +110 +106 +106 +100 +99 +100 +96 +96 +90 +90 +88 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +65 +64 +59 +59 +59 +54 +55 +51 +51 +51 +47 +46 +43 +43 +41 +41 +42 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +14 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +14 +14 +14 +13 +13 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +32 +33 +33 +37 +37 +41 +40 +41 +43 +43 +47 +47 +47 +51 +50 +50 +51 +51 +54 +58 +59 +59 +64 +65 +68 +68 +69 +72 +73 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +95 +96 +96 +96 +100 +100 +106 +106 +106 +109 +110 +116 +116 +119 +120 +119 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +160 +164 +165 +168 +169 +169 +173 +173 +175 +174 +175 +179 +179 +183 +183 +183 +184 +185 +188 +189 +189 +191 +191 +194 +194 +195 +196 +197 +199 +198 +200 +201 +200 +201 +201 +202 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +204 +205 +205 +204 +204 +202 +202 +202 +200 +200 +200 +200 +201 +198 +198 +196 +196 +196 +195 +194 +190 +190 +191 +189 +188 +184 +184 +183 +183 +182 +178 +179 +175 +175 +175 +173 +173 +173 +173 +173 +169 +169 +165 +165 +165 +161 +160 +157 +157 +158 +151 +151 +147 +147 +143 +143 +143 +139 +140 +133 +133 +133 +129 +129 +125 +125 +125 +119 +119 +115 +116 +116 +109 +110 +106 +106 +101 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +77 +77 +72 +72 +73 +68 +68 +64 +65 +65 +59 +58 +55 +54 +51 +50 +50 +46 +46 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +14 +14 +13 +13 +14 +13 +14 +13 +14 +13 +14 +14 +14 +14 +14 +14 +14 +13 +13 +13 +13 +14 +14 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +22 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +42 +43 +42 +47 +47 +51 +51 +51 +54 +54 +58 +59 +59 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +107 +110 +109 +116 +115 +119 +119 +120 +125 +125 +129 +130 +129 +133 +133 +139 +139 +139 +144 +143 +147 +147 +147 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +172 +173 +175 +174 +175 +179 +179 +183 +183 +183 +184 +185 +189 +189 +188 +191 +191 +194 +194 +196 +197 +196 +198 +198 +200 +200 +200 +200 +200 +203 +202 +202 +204 +205 +204 +204 +204 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +205 +204 +204 +205 +203 +202 +202 +201 +200 +200 +200 +200 +199 +199 +197 +197 +197 +194 +195 +191 +191 +189 +188 +189 +184 +185 +182 +182 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +159 +157 +157 +151 +151 +147 +147 +148 +143 +143 +140 +139 +139 +133 +133 +133 +133 +134 +129 +130 +125 +125 +125 +119 +119 +116 +116 +113 +110 +110 +106 +106 +99 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +68 +68 +64 +64 +58 +58 +59 +54 +55 +51 +51 +51 +47 +47 +47 +46 +47 +43 +42 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +14 +13 +15 +15 +16 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +44 +46 +47 +51 +50 +54 +54 +55 +58 +59 +65 +64 +65 +68 +68 +68 +69 +68 +73 +72 +75 +76 +76 +82 +82 +86 +86 +89 +90 +90 +96 +96 +100 +100 +100 +105 +106 +110 +110 +110 +116 +115 +119 +120 +120 +125 +125 +129 +129 +130 +134 +133 +139 +140 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +178 +182 +182 +184 +184 +184 +189 +189 +190 +191 +190 +195 +195 +197 +197 +196 +198 +198 +200 +200 +201 +201 +200 +202 +202 +203 +204 +204 +204 +204 +207 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +207 +207 +204 +204 +204 +204 +204 +202 +202 +203 +200 +201 +200 +201 +198 +199 +199 +196 +196 +195 +194 +194 +191 +191 +188 +188 +188 +184 +184 +183 +183 +183 +178 +179 +175 +175 +175 +173 +173 +169 +168 +166 +165 +165 +161 +161 +157 +157 +157 +151 +152 +151 +152 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +131 +129 +129 +125 +125 +119 +120 +120 +115 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +80 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +59 +58 +54 +54 +51 +50 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +13 +14 +13 +14 +13 +14 +13 +14 +14 +13 +14 +13 +13 +13 +14 +13 +14 +13 +14 +13 +14 +14 +13 +13 +14 +13 +15 +15 +15 +17 +17 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +28 +31 +31 +33 +33 +36 +37 +37 +41 +41 +43 +43 +43 +47 +47 +47 +47 +47 +50 +51 +55 +55 +55 +59 +58 +64 +64 +66 +69 +68 +73 +72 +76 +77 +76 +82 +81 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +119 +120 +119 +125 +126 +129 +129 +129 +133 +133 +140 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +183 +185 +184 +188 +189 +189 +191 +190 +195 +195 +194 +196 +197 +198 +199 +201 +200 +201 +201 +200 +202 +203 +202 +205 +204 +205 +205 +205 +207 +206 +207 +206 +206 +206 +206 +207 +206 +207 +206 +207 +206 +206 +205 +204 +204 +204 +205 +202 +202 +202 +201 +201 +200 +200 +200 +200 +200 +199 +198 +199 +197 +197 +195 +194 +192 +191 +191 +188 +189 +184 +184 +184 +183 +183 +178 +179 +179 +175 +175 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +160 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +130 +125 +125 +120 +120 +120 +116 +116 +110 +110 +106 +106 +106 +100 +99 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +73 +72 +68 +68 +69 +64 +64 +59 +58 +55 +54 +54 +51 +50 +47 +47 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +26 +27 +25 +24 +21 +21 +19 +19 +19 +17 +17 +15 +16 +15 +15 +15 +15 +15 +15 +14 +13 +12 +13 +13 +13 +14 +14 +13 +14 +13 +14 +13 +13 +14 +14 +14 +14 +13 +14 +14 +14 +14 +13 +13 +13 +13 +14 +14 +13 +13 +12 +15 +15 +17 +17 +18 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +33 +33 +33 +37 +37 +41 +40 +41 +43 +43 +47 +46 +48 +50 +51 +54 +54 +59 +59 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +77 +82 +82 +86 +86 +86 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +110 +110 +115 +116 +119 +120 +119 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +151 +151 +151 +158 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +183 +184 +185 +188 +189 +191 +191 +191 +194 +195 +196 +197 +196 +198 +198 +201 +200 +200 +200 +200 +202 +202 +203 +204 +204 +204 +205 +205 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +206 +204 +204 +204 +204 +204 +202 +202 +201 +200 +200 +201 +201 +198 +198 +196 +196 +196 +195 +195 +190 +191 +191 +189 +189 +188 +189 +189 +184 +185 +183 +182 +182 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +140 +133 +133 +129 +129 +125 +125 +125 +119 +119 +115 +116 +116 +109 +110 +105 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +83 +76 +76 +73 +73 +72 +68 +69 +64 +64 +64 +59 +58 +58 +58 +58 +55 +54 +50 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +14 +15 +13 +13 +12 +13 +14 +14 +13 +13 +13 +14 +14 +14 +14 +14 +14 +13 +14 +14 +14 +13 +14 +14 +14 +14 +13 +14 +14 +13 +14 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +32 +33 +33 +37 +37 +41 +41 +41 +43 +43 +46 +47 +47 +51 +51 +54 +55 +54 +58 +59 +64 +64 +65 +68 +69 +72 +72 +76 +77 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +115 +116 +116 +116 +120 +119 +125 +125 +125 +130 +129 +134 +134 +134 +140 +139 +144 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +162 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +182 +182 +185 +185 +185 +188 +188 +191 +191 +190 +194 +195 +196 +197 +196 +199 +198 +201 +201 +201 +200 +200 +203 +202 +205 +204 +204 +204 +204 +204 +204 +204 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +205 +203 +203 +202 +200 +200 +200 +200 +200 +200 +200 +199 +199 +199 +196 +197 +195 +194 +191 +191 +190 +188 +188 +185 +185 +185 +183 +182 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +166 +160 +161 +157 +157 +151 +151 +151 +147 +147 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +119 +120 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +69 +64 +64 +59 +59 +55 +55 +54 +50 +50 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +28 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +13 +14 +13 +14 +14 +14 +13 +13 +14 +13 +14 +14 +14 +14 +14 +13 +13 +13 +14 +14 +13 +13 +13 +12 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +46 +50 +51 +53 +54 +54 +58 +59 +64 +64 +64 +68 +68 +72 +72 +73 +77 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +115 +120 +120 +126 +126 +126 +130 +129 +133 +133 +133 +140 +139 +143 +143 +143 +147 +147 +151 +151 +158 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +182 +183 +184 +185 +185 +188 +189 +191 +191 +194 +194 +194 +196 +196 +199 +198 +198 +201 +201 +201 +200 +200 +200 +200 +203 +202 +202 +204 +205 +204 +204 +205 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +205 +204 +203 +203 +200 +201 +200 +201 +201 +198 +199 +196 +196 +196 +194 +195 +191 +191 +191 +188 +189 +185 +184 +184 +183 +183 +179 +179 +179 +175 +175 +173 +173 +169 +168 +169 +165 +165 +161 +161 +161 +157 +157 +151 +152 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +134 +130 +130 +125 +126 +120 +120 +120 +116 +115 +109 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +73 +72 +69 +68 +68 +65 +64 +58 +58 +58 +54 +55 +51 +51 +51 +47 +47 +42 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +20 +19 +19 +19 +17 +18 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +14 +13 +14 +13 +14 +14 +14 +14 +14 +14 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +13 +14 +14 +13 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +50 +51 +55 +54 +58 +58 +59 +64 +65 +68 +68 +68 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +95 +96 +100 +100 +99 +106 +106 +110 +109 +109 +116 +116 +120 +119 +119 +126 +125 +129 +130 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +147 +147 +147 +151 +152 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +175 +175 +175 +178 +179 +183 +183 +182 +184 +184 +184 +185 +184 +188 +189 +190 +191 +190 +195 +195 +197 +197 +198 +199 +198 +201 +200 +200 +200 +200 +203 +202 +204 +204 +204 +204 +204 +205 +204 +205 +206 +206 +207 +207 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +203 +200 +200 +200 +200 +201 +198 +198 +196 +196 +197 +194 +195 +191 +190 +188 +188 +188 +185 +184 +182 +183 +182 +179 +179 +175 +175 +175 +173 +173 +169 +169 +170 +165 +165 +161 +161 +161 +157 +157 +151 +151 +148 +147 +147 +143 +143 +139 +139 +139 +133 +133 +130 +129 +129 +125 +125 +120 +119 +120 +116 +116 +110 +110 +110 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +59 +59 +59 +54 +55 +51 +51 +48 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +13 +14 +13 +14 +13 +14 +14 +13 +14 +14 +13 +13 +13 +13 +13 +14 +13 +14 +13 +14 +14 +13 +13 +14 +14 +13 +13 +13 +15 +15 +17 +18 +17 +19 +19 +22 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +36 +37 +41 +41 +43 +43 +43 +47 +47 +50 +50 +50 +54 +54 +58 +58 +65 +64 +64 +69 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +116 +115 +115 +119 +119 +125 +126 +125 +129 +129 +129 +130 +129 +133 +133 +140 +139 +139 +143 +143 +147 +147 +148 +151 +151 +157 +157 +161 +161 +161 +165 +165 +168 +169 +169 +173 +173 +173 +173 +173 +174 +174 +178 +179 +179 +183 +183 +184 +184 +186 +189 +189 +190 +191 +194 +194 +195 +196 +196 +197 +197 +196 +198 +199 +198 +199 +198 +200 +200 +200 +200 +201 +203 +203 +204 +204 +204 +204 +205 +206 +206 +206 +206 +206 +207 +207 +206 +206 +207 +206 +206 +207 +207 +207 +205 +205 +204 +205 +205 +202 +202 +201 +201 +201 +201 +200 +199 +199 +196 +197 +197 +194 +195 +191 +191 +190 +189 +188 +184 +185 +185 +182 +183 +179 +179 +179 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +120 +119 +119 +116 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +68 +68 +68 +64 +64 +59 +59 +58 +54 +54 +55 +55 +54 +50 +50 +46 +46 +46 +42 +43 +41 +41 +41 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +13 +14 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +14 +14 +14 +14 +14 +13 +14 +14 +14 +14 +13 +13 +13 +13 +15 +16 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +36 +41 +41 +41 +43 +43 +46 +47 +47 +51 +50 +55 +55 +55 +58 +58 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +87 +86 +86 +90 +89 +96 +95 +96 +100 +100 +105 +106 +106 +109 +109 +116 +116 +116 +120 +119 +125 +125 +126 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +170 +173 +173 +175 +175 +178 +178 +179 +182 +183 +183 +183 +183 +185 +185 +184 +185 +184 +189 +188 +191 +190 +191 +195 +195 +196 +196 +198 +198 +198 +200 +200 +200 +200 +200 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +207 +206 +207 +204 +204 +204 +204 +204 +202 +202 +200 +200 +200 +201 +200 +199 +199 +198 +196 +196 +194 +194 +195 +191 +190 +189 +188 +185 +185 +185 +183 +182 +179 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +134 +133 +129 +129 +125 +125 +125 +119 +120 +115 +115 +116 +110 +109 +106 +106 +103 +99 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +59 +58 +54 +54 +55 +51 +50 +47 +46 +46 +47 +47 +43 +43 +41 +41 +41 +37 +37 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +24 +25 +23 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +14 +13 +14 +14 +14 +13 +14 +13 +14 +13 +13 +14 +14 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +50 +51 +54 +54 +59 +58 +65 +65 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +101 +106 +106 +110 +109 +116 +115 +115 +120 +119 +125 +125 +125 +129 +129 +133 +134 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +153 +157 +157 +161 +161 +164 +165 +165 +169 +169 +173 +173 +173 +175 +175 +175 +175 +175 +179 +179 +183 +182 +183 +185 +185 +189 +188 +191 +191 +191 +195 +195 +196 +196 +196 +199 +198 +200 +201 +200 +201 +200 +202 +202 +202 +204 +204 +204 +205 +205 +207 +207 +206 +206 +207 +207 +206 +207 +207 +206 +206 +206 +206 +206 +205 +204 +204 +204 +204 +203 +202 +202 +200 +201 +201 +201 +200 +198 +199 +196 +196 +195 +194 +195 +191 +190 +188 +188 +189 +185 +185 +182 +183 +183 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +152 +147 +147 +147 +143 +143 +140 +140 +139 +133 +133 +129 +129 +129 +125 +125 +120 +119 +120 +116 +116 +110 +110 +107 +106 +105 +100 +100 +96 +96 +95 +90 +90 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +58 +58 +58 +54 +55 +50 +51 +51 +47 +47 +47 +47 +47 +43 +43 +40 +41 +41 +36 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +22 +19 +20 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +14 +14 +14 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +14 +14 +13 +13 +13 +14 +13 +14 +14 +13 +14 +13 +13 +15 +15 +18 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +51 +51 +51 +54 +54 +59 +59 +59 +64 +65 +68 +68 +68 +72 +73 +76 +76 +76 +82 +82 +86 +86 +87 +90 +90 +96 +96 +99 +100 +100 +105 +105 +110 +110 +110 +115 +116 +116 +116 +115 +120 +120 +125 +125 +126 +129 +130 +133 +134 +135 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +161 +161 +161 +165 +165 +168 +169 +169 +173 +173 +175 +175 +176 +178 +179 +183 +183 +185 +185 +185 +188 +189 +190 +190 +191 +195 +194 +196 +197 +196 +199 +198 +200 +201 +201 +200 +201 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +200 +200 +201 +200 +200 +198 +198 +199 +197 +196 +196 +196 +197 +195 +194 +191 +190 +190 +189 +188 +185 +184 +184 +182 +183 +178 +178 +175 +175 +175 +173 +172 +168 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +144 +139 +139 +133 +133 +129 +129 +130 +125 +125 +120 +120 +119 +115 +116 +116 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +93 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +68 +68 +68 +68 +68 +65 +64 +59 +59 +59 +54 +54 +51 +51 +49 +47 +46 +43 +43 +41 +40 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +14 +14 +14 +14 +13 +13 +13 +14 +14 +14 +13 +13 +13 +14 +13 +13 +14 +13 +13 +14 +14 +13 +14 +13 +14 +13 +15 +16 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +34 +33 +33 +37 +36 +41 +41 +40 +43 +43 +47 +47 +47 +51 +50 +55 +55 +54 +59 +58 +64 +65 +66 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +112 +116 +116 +119 +120 +125 +126 +125 +129 +129 +133 +133 +133 +139 +139 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +178 +179 +183 +183 +182 +184 +185 +189 +189 +189 +191 +191 +194 +195 +196 +196 +196 +198 +198 +200 +200 +200 +201 +200 +200 +200 +200 +202 +202 +205 +204 +204 +204 +204 +206 +206 +206 +207 +206 +206 +206 +207 +206 +207 +206 +206 +206 +207 +206 +204 +204 +205 +204 +204 +203 +203 +200 +200 +200 +200 +200 +198 +199 +198 +196 +196 +194 +194 +191 +191 +190 +188 +188 +185 +185 +184 +182 +183 +178 +178 +179 +174 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +150 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +130 +125 +126 +125 +119 +120 +116 +115 +113 +110 +110 +106 +106 +99 +100 +100 +96 +96 +90 +90 +90 +86 +86 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +69 +68 +65 +64 +64 +58 +58 +55 +55 +54 +51 +51 +47 +47 +46 +43 +43 +40 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +14 +14 +13 +13 +14 +13 +14 +14 +13 +14 +13 +14 +14 +13 +14 +14 +13 +13 +13 +14 +13 +13 +15 +15 +16 +17 +17 +19 +19 +21 +21 +21 +26 +25 +27 +26 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +46 +47 +47 +51 +50 +55 +55 +59 +59 +58 +65 +64 +68 +68 +68 +72 +72 +76 +76 +76 +83 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +110 +110 +109 +115 +116 +120 +120 +120 +125 +125 +125 +125 +125 +130 +130 +133 +133 +134 +139 +139 +143 +143 +146 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +184 +184 +188 +188 +188 +190 +190 +195 +195 +195 +197 +197 +198 +199 +198 +201 +200 +200 +200 +200 +202 +202 +204 +205 +204 +204 +204 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +204 +204 +204 +204 +204 +203 +202 +201 +201 +200 +200 +200 +198 +198 +197 +196 +196 +194 +195 +190 +191 +191 +188 +189 +189 +188 +189 +185 +185 +183 +182 +182 +179 +179 +175 +175 +175 +173 +173 +169 +169 +164 +165 +165 +161 +161 +157 +157 +157 +151 +151 +151 +151 +151 +147 +147 +144 +143 +143 +139 +139 +133 +134 +131 +129 +129 +126 +125 +119 +120 +120 +116 +116 +109 +110 +110 +106 +105 +106 +106 +106 +100 +100 +97 +96 +96 +90 +90 +86 +86 +84 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +59 +59 +54 +54 +55 +51 +50 +47 +47 +47 +43 +43 +41 +41 +38 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +14 +13 +13 +14 +14 +13 +13 +13 +13 +13 +14 +14 +13 +14 +13 +14 +13 +14 +13 +13 +14 +14 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +28 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +43 +43 +43 +46 +47 +51 +51 +51 +54 +55 +59 +58 +58 +64 +64 +68 +69 +68 +72 +72 +76 +76 +78 +82 +82 +86 +86 +91 +90 +90 +96 +96 +100 +100 +100 +106 +106 +106 +106 +106 +110 +110 +115 +115 +116 +119 +119 +125 +126 +127 +129 +129 +134 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +166 +169 +169 +173 +173 +174 +175 +175 +179 +179 +182 +182 +183 +184 +185 +189 +188 +188 +190 +190 +195 +194 +195 +197 +196 +198 +199 +199 +201 +201 +200 +200 +203 +202 +202 +205 +204 +204 +205 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +207 +204 +204 +204 +204 +203 +202 +202 +200 +201 +200 +200 +200 +199 +199 +198 +198 +198 +196 +196 +194 +194 +194 +190 +190 +188 +189 +189 +185 +185 +183 +182 +178 +179 +179 +175 +175 +173 +173 +173 +168 +169 +165 +165 +164 +161 +161 +157 +157 +157 +151 +151 +147 +147 +145 +143 +143 +139 +139 +133 +133 +134 +130 +129 +125 +125 +125 +119 +119 +119 +119 +120 +115 +116 +109 +110 +110 +105 +106 +99 +100 +97 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +69 +69 +64 +64 +59 +59 +59 +55 +54 +50 +51 +48 +47 +47 +43 +43 +41 +41 +41 +37 +37 +38 +37 +37 +33 +34 +30 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +14 +14 +13 +14 +14 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +20 +21 +21 +21 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +41 +41 +41 +43 +43 +47 +47 +47 +51 +50 +55 +54 +59 +59 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +82 +82 +83 +86 +86 +90 +90 +90 +96 +96 +100 +100 +102 +106 +106 +110 +110 +116 +116 +116 +120 +120 +125 +125 +126 +129 +129 +133 +133 +134 +139 +140 +143 +143 +144 +147 +147 +151 +151 +156 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +179 +182 +183 +184 +185 +185 +188 +189 +191 +190 +195 +194 +195 +197 +197 +198 +198 +199 +200 +201 +201 +201 +201 +202 +202 +204 +205 +204 +204 +205 +207 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +207 +207 +206 +206 +204 +205 +204 +204 +204 +202 +202 +201 +200 +201 +200 +200 +198 +199 +199 +196 +196 +194 +194 +191 +191 +190 +189 +189 +184 +185 +185 +183 +182 +182 +183 +183 +179 +178 +174 +175 +175 +173 +173 +168 +169 +167 +165 +165 +161 +161 +156 +157 +157 +151 +151 +147 +147 +147 +143 +143 +143 +143 +143 +139 +139 +134 +134 +134 +130 +129 +126 +125 +122 +120 +119 +115 +115 +110 +109 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +68 +68 +68 +64 +65 +58 +58 +59 +55 +55 +50 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +14 +14 +14 +14 +14 +14 +14 +13 +14 +13 +13 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +27 +27 +27 +31 +31 +33 +33 +33 +36 +37 +41 +41 +41 +43 +43 +47 +47 +50 +51 +51 +54 +55 +59 +59 +59 +65 +64 +64 +65 +65 +68 +68 +72 +73 +73 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +105 +110 +110 +115 +115 +116 +119 +119 +125 +125 +126 +130 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +151 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +174 +179 +178 +183 +183 +183 +184 +184 +188 +188 +188 +190 +191 +194 +194 +195 +197 +197 +198 +198 +198 +200 +201 +200 +200 +200 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +204 +204 +205 +204 +205 +203 +202 +201 +201 +200 +200 +200 +198 +198 +197 +197 +196 +194 +194 +195 +194 +194 +190 +190 +189 +189 +188 +184 +185 +182 +182 +180 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +164 +161 +161 +161 +161 +161 +157 +157 +152 +151 +152 +147 +147 +143 +143 +141 +139 +139 +133 +133 +129 +129 +129 +125 +125 +120 +119 +120 +116 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +86 +86 +85 +82 +82 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +65 +64 +59 +58 +54 +54 +55 +51 +50 +46 +46 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +12 +12 +13 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +13 +14 +14 +14 +13 +14 +14 +13 +14 +14 +14 +13 +13 +14 +14 +14 +13 +12 +15 +15 +15 +15 +15 +17 +17 +19 +20 +19 +21 +21 +25 +25 +26 +27 +27 +31 +31 +33 +33 +32 +37 +36 +41 +41 +41 +42 +43 +42 +43 +43 +47 +47 +50 +51 +51 +55 +54 +59 +58 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +105 +106 +110 +110 +115 +115 +115 +119 +120 +125 +126 +125 +129 +130 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +172 +173 +175 +175 +179 +179 +179 +182 +182 +185 +185 +184 +189 +189 +190 +190 +191 +194 +195 +196 +196 +199 +198 +198 +200 +200 +200 +201 +200 +202 +202 +205 +204 +205 +204 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +207 +207 +206 +204 +204 +204 +205 +204 +202 +203 +203 +202 +202 +200 +200 +200 +201 +200 +198 +198 +196 +196 +197 +195 +194 +191 +191 +188 +188 +189 +185 +184 +183 +183 +183 +179 +179 +179 +179 +179 +174 +174 +173 +173 +173 +169 +169 +165 +165 +163 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +126 +126 +120 +119 +115 +116 +109 +110 +109 +106 +106 +100 +100 +100 +96 +96 +90 +90 +89 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +59 +58 +58 +54 +54 +50 +51 +50 +46 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +32 +31 +31 +31 +27 +27 +26 +24 +22 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +14 +14 +14 +13 +13 +13 +14 +13 +13 +14 +14 +14 +13 +14 +13 +14 +14 +14 +13 +14 +13 +13 +14 +14 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +42 +43 +43 +47 +47 +51 +50 +51 +54 +55 +59 +59 +59 +64 +65 +69 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +115 +119 +120 +119 +125 +125 +129 +130 +129 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +168 +169 +173 +173 +175 +175 +175 +178 +179 +183 +182 +185 +185 +185 +189 +189 +190 +191 +191 +194 +195 +197 +196 +196 +198 +198 +201 +200 +201 +200 +200 +202 +202 +203 +204 +204 +204 +205 +206 +206 +206 +207 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +205 +204 +204 +204 +204 +202 +202 +201 +200 +200 +201 +201 +198 +198 +198 +197 +197 +194 +194 +194 +190 +190 +190 +190 +191 +189 +188 +184 +184 +185 +183 +182 +179 +176 +176 +175 +175 +173 +172 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +130 +130 +130 +126 +125 +119 +119 +119 +116 +115 +110 +110 +110 +106 +105 +100 +100 +100 +96 +96 +90 +90 +90 +86 +87 +82 +82 +76 +76 +76 +73 +72 +68 +68 +68 +64 +64 +58 +59 +58 +55 +54 +51 +50 +50 +47 +46 +43 +42 +43 +41 +41 +37 +36 +34 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +16 +13 +13 +12 +13 +14 +14 +14 +14 +13 +14 +13 +14 +14 +14 +13 +14 +13 +14 +13 +14 +14 +14 +13 +13 +13 +14 +14 +13 +13 +14 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +40 +42 +43 +47 +47 +47 +51 +51 +54 +55 +54 +58 +58 +64 +64 +65 +68 +68 +73 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +109 +110 +115 +116 +115 +119 +119 +125 +125 +130 +129 +129 +133 +133 +139 +140 +139 +143 +143 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +179 +183 +183 +182 +182 +183 +185 +185 +188 +189 +188 +191 +190 +194 +194 +195 +196 +197 +198 +199 +200 +200 +200 +201 +201 +202 +203 +202 +204 +204 +204 +205 +204 +204 +204 +207 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +205 +205 +204 +204 +204 +203 +202 +203 +202 +203 +200 +200 +200 +200 +200 +199 +199 +197 +196 +195 +194 +195 +191 +191 +188 +189 +188 +185 +185 +182 +183 +182 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +140 +139 +133 +133 +129 +129 +129 +126 +125 +119 +120 +119 +115 +116 +110 +109 +106 +106 +106 +100 +100 +96 +96 +90 +90 +90 +90 +90 +86 +86 +82 +82 +83 +77 +76 +72 +72 +72 +68 +68 +64 +64 +59 +58 +58 +54 +55 +51 +51 +51 +47 +46 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +24 +22 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +14 +13 +14 +13 +13 +13 +14 +14 +13 +14 +14 +13 +13 +13 +14 +13 +13 +15 +15 +17 +17 +19 +19 +19 +21 +21 +24 +25 +25 +27 +27 +31 +31 +31 +33 +33 +36 +37 +37 +41 +41 +43 +43 +47 +47 +47 +50 +51 +55 +54 +55 +59 +58 +64 +65 +64 +68 +69 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +95 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +115 +116 +119 +119 +125 +126 +125 +129 +129 +133 +133 +134 +139 +139 +143 +143 +148 +147 +147 +151 +151 +156 +157 +157 +161 +161 +165 +165 +164 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +182 +182 +185 +185 +188 +189 +189 +191 +190 +194 +194 +194 +196 +196 +196 +196 +196 +199 +199 +201 +200 +200 +200 +201 +202 +202 +203 +204 +204 +204 +204 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +207 +206 +206 +205 +204 +205 +204 +205 +202 +203 +200 +200 +200 +200 +200 +198 +198 +198 +197 +197 +195 +194 +194 +191 +191 +188 +189 +189 +185 +185 +183 +183 +180 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +133 +133 +133 +129 +130 +125 +125 +125 +120 +120 +116 +116 +116 +109 +110 +106 +106 +105 +100 +100 +96 +96 +96 +90 +90 +86 +86 +83 +82 +82 +76 +76 +72 +72 +72 +69 +68 +64 +64 +64 +59 +58 +55 +55 +55 +51 +50 +47 +47 +47 +43 +43 +41 +41 +36 +37 +37 +33 +33 +31 +31 +31 +27 +27 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +14 +13 +14 +13 +13 +14 +14 +13 +14 +14 +14 +13 +14 +14 +13 +13 +13 +13 +14 +14 +14 +14 +13 +14 +13 +13 +14 +13 +15 +15 +18 +17 +18 +19 +19 +21 +21 +21 +25 +25 +27 +27 +30 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +51 +51 +55 +55 +59 +59 +59 +64 +64 +69 +69 +72 +73 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +99 +106 +106 +110 +109 +110 +116 +116 +119 +119 +126 +125 +126 +129 +129 +133 +134 +134 +140 +139 +143 +143 +143 +147 +148 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +183 +182 +183 +185 +185 +189 +189 +189 +190 +190 +194 +194 +195 +196 +196 +198 +198 +200 +200 +201 +201 +201 +203 +203 +202 +204 +204 +204 +205 +204 +205 +205 +206 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +201 +200 +200 +200 +200 +199 +198 +199 +197 +196 +195 +194 +190 +191 +191 +188 +188 +184 +184 +185 +182 +183 +179 +178 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +134 +129 +129 +125 +126 +125 +120 +120 +116 +116 +115 +110 +110 +106 +106 +101 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +68 +68 +64 +64 +65 +58 +59 +54 +55 +50 +50 +50 +46 +47 +43 +43 +43 +41 +40 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +28 +27 +26 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +13 +14 +14 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +14 +13 +14 +13 +13 +14 +14 +14 +13 +13 +13 +13 +15 +15 +17 +18 +18 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +42 +43 +43 +47 +47 +51 +50 +54 +54 +54 +58 +58 +64 +64 +65 +68 +68 +72 +73 +72 +76 +77 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +106 +106 +105 +110 +110 +116 +115 +116 +120 +120 +126 +125 +125 +129 +129 +133 +133 +134 +139 +139 +143 +143 +143 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +179 +183 +182 +185 +184 +185 +188 +189 +190 +190 +195 +194 +194 +197 +196 +198 +199 +198 +200 +201 +201 +201 +200 +200 +200 +202 +202 +202 +204 +204 +204 +205 +205 +206 +207 +207 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +203 +200 +201 +200 +200 +198 +198 +198 +197 +196 +196 +197 +197 +194 +195 +191 +190 +191 +189 +188 +184 +185 +185 +182 +183 +179 +179 +178 +174 +175 +173 +173 +169 +169 +168 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +134 +129 +129 +125 +125 +120 +120 +120 +116 +115 +110 +110 +109 +106 +106 +100 +100 +99 +95 +96 +90 +90 +90 +86 +86 +82 +82 +83 +76 +76 +73 +72 +68 +68 +68 +64 +64 +58 +58 +59 +54 +54 +54 +54 +55 +50 +50 +47 +46 +47 +43 +43 +41 +41 +42 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +21 +21 +22 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +14 +14 +13 +14 +14 +14 +14 +14 +14 +13 +14 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +30 +31 +33 +33 +37 +37 +41 +41 +41 +42 +43 +47 +47 +47 +50 +51 +55 +54 +54 +59 +59 +64 +64 +64 +69 +68 +72 +72 +73 +76 +77 +82 +82 +87 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +115 +119 +120 +125 +125 +126 +130 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +170 +173 +173 +175 +175 +179 +178 +179 +183 +183 +185 +185 +184 +189 +189 +189 +189 +189 +191 +190 +195 +194 +194 +196 +196 +198 +198 +200 +200 +200 +200 +201 +202 +202 +203 +204 +204 +204 +204 +204 +207 +206 +207 +206 +206 +207 +206 +206 +207 +207 +206 +206 +207 +206 +205 +204 +204 +205 +204 +202 +202 +202 +201 +200 +200 +200 +200 +198 +198 +196 +196 +196 +195 +194 +190 +190 +191 +189 +189 +184 +184 +183 +182 +183 +179 +179 +175 +175 +175 +172 +173 +169 +168 +169 +166 +165 +161 +161 +160 +157 +157 +151 +151 +151 +147 +147 +143 +143 +140 +138 +139 +133 +133 +129 +130 +129 +125 +126 +119 +120 +120 +116 +116 +110 +109 +110 +106 +105 +100 +100 +100 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +77 +76 +72 +72 +73 +72 +72 +68 +68 +65 +64 +65 +59 +59 +55 +55 +52 +50 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +20 +19 +19 +18 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +14 +14 +14 +14 +13 +14 +14 +13 +14 +14 +13 +13 +14 +13 +13 +13 +14 +13 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +51 +55 +54 +55 +58 +58 +64 +65 +69 +68 +68 +72 +73 +77 +77 +77 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +119 +120 +119 +126 +125 +129 +129 +130 +133 +132 +133 +133 +133 +139 +140 +143 +143 +143 +147 +147 +151 +151 +153 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +175 +174 +175 +179 +179 +183 +183 +183 +185 +184 +188 +189 +189 +191 +190 +195 +194 +196 +196 +196 +198 +198 +198 +198 +198 +200 +200 +200 +200 +201 +203 +202 +204 +204 +204 +205 +204 +207 +206 +205 +207 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +204 +205 +204 +204 +204 +203 +203 +200 +200 +201 +201 +201 +199 +199 +197 +197 +197 +195 +195 +191 +191 +190 +189 +188 +185 +185 +185 +183 +183 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +152 +150 +151 +147 +147 +143 +143 +143 +139 +139 +134 +133 +134 +129 +130 +125 +125 +126 +120 +119 +116 +116 +110 +110 +109 +106 +106 +100 +100 +100 +96 +96 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +72 +72 +68 +68 +64 +64 +64 +59 +58 +55 +55 +54 +51 +51 +51 +51 +50 +47 +47 +42 +43 +43 +41 +41 +37 +36 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +14 +13 +13 +13 +14 +14 +14 +14 +14 +14 +13 +14 +14 +13 +14 +14 +13 +14 +13 +13 +13 +13 +14 +13 +13 +16 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +47 +47 +47 +51 +51 +55 +55 +55 +59 +58 +65 +65 +64 +69 +68 +72 +72 +72 +76 +76 +82 +82 +83 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +105 +110 +110 +110 +110 +110 +115 +116 +120 +119 +119 +125 +126 +129 +130 +130 +133 +133 +139 +139 +143 +144 +143 +147 +147 +151 +151 +151 +157 +157 +157 +157 +157 +161 +160 +165 +165 +165 +169 +169 +173 +173 +175 +175 +176 +179 +179 +182 +182 +182 +185 +184 +188 +189 +188 +190 +190 +194 +194 +194 +196 +197 +199 +199 +199 +200 +201 +200 +200 +202 +202 +202 +204 +204 +204 +204 +204 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +203 +203 +202 +200 +201 +200 +200 +200 +198 +199 +196 +196 +197 +194 +194 +191 +191 +191 +188 +188 +185 +184 +185 +182 +182 +179 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +134 +133 +133 +133 +133 +130 +129 +126 +125 +125 +119 +120 +116 +115 +116 +110 +110 +106 +106 +106 +100 +99 +96 +96 +96 +90 +90 +86 +86 +83 +82 +82 +76 +76 +72 +72 +72 +68 +69 +68 +68 +68 +65 +64 +59 +58 +59 +54 +54 +51 +51 +50 +47 +46 +43 +42 +41 +40 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +14 +13 +14 +13 +13 +13 +13 +13 +14 +14 +14 +14 +14 +14 +13 +13 +14 +14 +13 +13 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +26 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +46 +47 +46 +51 +51 +55 +54 +55 +58 +58 +64 +64 +65 +68 +68 +72 +73 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +90 +90 +90 +96 +95 +100 +100 +100 +106 +105 +110 +110 +112 +116 +115 +119 +119 +125 +126 +125 +130 +129 +133 +133 +133 +140 +140 +140 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +158 +161 +162 +165 +165 +169 +169 +169 +173 +173 +175 +175 +174 +179 +178 +183 +183 +183 +184 +185 +189 +188 +189 +190 +191 +194 +195 +196 +196 +196 +199 +198 +200 +200 +201 +200 +200 +202 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +205 +204 +204 +204 +204 +203 +202 +202 +201 +201 +200 +200 +200 +198 +198 +196 +197 +197 +194 +194 +190 +190 +189 +189 +189 +184 +185 +182 +183 +183 +179 +179 +175 +175 +174 +173 +173 +169 +168 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +148 +147 +147 +143 +143 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +119 +120 +116 +116 +110 +110 +108 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +82 +82 +82 +76 +76 +72 +72 +72 +68 +69 +65 +65 +59 +58 +58 +55 +55 +50 +51 +50 +47 +46 +43 +43 +43 +41 +41 +36 +37 +37 +33 +33 +31 +31 +32 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +13 +14 +13 +13 +14 +14 +14 +13 +14 +14 +14 +14 +13 +13 +13 +14 +14 +13 +14 +14 +14 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +42 +43 +43 +47 +46 +50 +50 +51 +55 +54 +58 +59 +64 +65 +64 +68 +68 +72 +72 +72 +76 +76 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +97 +100 +100 +106 +106 +110 +110 +109 +115 +116 +119 +119 +119 +125 +125 +126 +126 +125 +129 +129 +133 +134 +133 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +162 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +179 +183 +183 +184 +185 +188 +189 +188 +191 +191 +194 +195 +195 +196 +196 +199 +198 +198 +200 +200 +200 +200 +200 +203 +202 +204 +204 +204 +204 +204 +206 +207 +207 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +206 +206 +204 +204 +205 +205 +204 +203 +202 +200 +200 +201 +200 +200 +199 +198 +197 +197 +197 +195 +195 +190 +190 +190 +189 +189 +185 +185 +184 +183 +183 +179 +179 +178 +175 +175 +173 +173 +174 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +147 +147 +147 +143 +143 +139 +139 +139 +133 +134 +130 +129 +127 +125 +125 +120 +119 +115 +116 +116 +110 +110 +106 +106 +106 +100 +100 +100 +100 +100 +96 +96 +90 +90 +90 +86 +87 +82 +82 +77 +76 +76 +73 +73 +68 +68 +68 +64 +64 +58 +59 +58 +54 +54 +51 +50 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +12 +14 +13 +14 +13 +14 +13 +14 +13 +13 +13 +13 +14 +13 +14 +14 +14 +14 +14 +14 +14 +14 +13 +14 +14 +13 +13 +13 +16 +15 +15 +17 +18 +19 +19 +20 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +36 +37 +38 +41 +41 +43 +43 +46 +46 +46 +51 +50 +54 +55 +54 +58 +59 +58 +58 +59 +65 +64 +69 +68 +69 +72 +72 +76 +76 +77 +82 +82 +86 +86 +90 +90 +90 +95 +96 +100 +100 +100 +106 +106 +106 +106 +106 +110 +110 +116 +116 +116 +120 +119 +126 +126 +127 +129 +129 +133 +134 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +174 +175 +175 +179 +178 +183 +182 +183 +185 +184 +189 +188 +188 +191 +191 +194 +194 +194 +197 +196 +198 +198 +198 +200 +201 +200 +200 +203 +203 +202 +204 +204 +204 +204 +204 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +205 +204 +204 +203 +202 +203 +200 +200 +200 +201 +201 +199 +198 +196 +197 +196 +195 +195 +190 +191 +191 +188 +189 +185 +184 +185 +182 +183 +179 +179 +175 +175 +175 +173 +173 +168 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +144 +140 +140 +133 +133 +130 +130 +129 +126 +126 +119 +119 +119 +116 +116 +116 +115 +116 +110 +110 +105 +106 +106 +100 +100 +96 +96 +93 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +65 +58 +58 +54 +54 +55 +51 +51 +47 +47 +43 +43 +42 +41 +41 +37 +37 +37 +33 +33 +32 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +16 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +14 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +36 +37 +37 +41 +41 +43 +43 +43 +47 +47 +47 +46 +47 +51 +51 +55 +55 +55 +58 +59 +64 +64 +65 +69 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +109 +115 +116 +116 +119 +120 +125 +125 +126 +129 +129 +133 +133 +134 +139 +139 +143 +143 +143 +148 +147 +151 +151 +152 +157 +157 +161 +161 +164 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +185 +185 +185 +189 +189 +190 +190 +191 +195 +195 +196 +197 +198 +198 +199 +201 +201 +200 +200 +201 +203 +203 +205 +204 +205 +204 +205 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +206 +207 +207 +206 +204 +204 +204 +205 +205 +202 +203 +201 +200 +200 +200 +200 +199 +198 +199 +197 +197 +195 +195 +195 +190 +190 +189 +188 +184 +185 +185 +182 +182 +179 +179 +179 +175 +175 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +159 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +134 +133 +134 +133 +133 +129 +129 +125 +126 +125 +120 +120 +115 +115 +111 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +68 +68 +64 +65 +59 +59 +59 +54 +54 +51 +51 +50 +47 +47 +43 +42 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +22 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +14 +14 +14 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +18 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +33 +33 +32 +37 +37 +40 +41 +41 +43 +43 +47 +47 +47 +51 +51 +55 +54 +58 +59 +58 +64 +64 +68 +68 +68 +72 +73 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +98 +100 +100 +106 +106 +110 +110 +110 +115 +115 +120 +120 +120 +125 +126 +130 +129 +130 +134 +133 +139 +139 +140 +144 +144 +147 +147 +151 +151 +152 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +178 +179 +183 +182 +182 +184 +185 +188 +189 +190 +190 +191 +195 +195 +196 +196 +197 +198 +199 +199 +199 +198 +200 +200 +201 +200 +200 +202 +202 +204 +204 +205 +204 +205 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +205 +205 +204 +205 +203 +202 +201 +200 +201 +200 +201 +198 +198 +197 +196 +197 +195 +194 +190 +191 +190 +188 +189 +188 +188 +188 +185 +185 +182 +182 +183 +178 +179 +175 +175 +175 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +151 +151 +151 +147 +147 +143 +143 +144 +139 +140 +133 +133 +131 +130 +129 +126 +126 +119 +119 +119 +115 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +76 +76 +76 +72 +72 +69 +68 +69 +64 +65 +59 +59 +58 +55 +54 +51 +50 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +34 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +14 +13 +14 +14 +14 +14 +14 +13 +13 +13 +13 +13 +14 +14 +13 +13 +14 +14 +13 +14 +14 +13 +14 +13 +13 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +34 +36 +37 +41 +41 +43 +43 +43 +47 +47 +50 +51 +50 +54 +55 +55 +55 +54 +58 +59 +65 +64 +64 +68 +68 +72 +73 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +105 +106 +105 +110 +110 +115 +116 +116 +119 +119 +125 +126 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +161 +161 +161 +165 +165 +165 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +183 +185 +184 +188 +188 +189 +190 +190 +195 +194 +195 +196 +197 +199 +199 +199 +201 +200 +200 +201 +203 +202 +203 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +204 +204 +204 +204 +203 +202 +202 +200 +200 +200 +200 +200 +198 +199 +198 +199 +198 +196 +196 +194 +194 +195 +190 +191 +188 +188 +188 +185 +185 +182 +183 +178 +179 +179 +175 +174 +173 +173 +172 +169 +169 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +152 +147 +147 +143 +143 +140 +139 +139 +133 +133 +129 +129 +130 +126 +126 +119 +120 +120 +116 +116 +110 +110 +110 +106 +105 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +59 +59 +55 +54 +51 +51 +47 +47 +47 +42 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +26 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +14 +13 +13 +13 +13 +14 +14 +13 +14 +13 +14 +13 +14 +14 +14 +13 +14 +13 +14 +13 +13 +13 +13 +13 +13 +15 +15 +15 +17 +17 +20 +19 +19 +21 +21 +25 +25 +26 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +43 +43 +43 +47 +47 +50 +51 +51 +54 +55 +59 +59 +64 +64 +64 +68 +68 +72 +72 +72 +76 +77 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +115 +115 +115 +119 +119 +125 +126 +125 +129 +129 +133 +133 +133 +139 +140 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +165 +165 +165 +169 +168 +173 +173 +172 +175 +175 +179 +179 +179 +183 +182 +185 +185 +184 +188 +189 +190 +191 +190 +194 +194 +197 +197 +199 +198 +199 +200 +201 +200 +200 +200 +203 +203 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +205 +202 +202 +203 +203 +202 +200 +200 +201 +200 +201 +198 +198 +196 +196 +195 +194 +195 +190 +190 +188 +188 +189 +185 +185 +183 +183 +182 +179 +178 +179 +178 +179 +174 +175 +173 +173 +173 +169 +170 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +140 +139 +133 +133 +133 +129 +129 +125 +126 +126 +119 +119 +115 +116 +110 +109 +110 +106 +105 +100 +100 +100 +96 +96 +90 +90 +90 +87 +86 +82 +82 +82 +76 +76 +72 +72 +73 +68 +69 +65 +65 +58 +58 +59 +55 +55 +50 +50 +51 +46 +47 +43 +42 +43 +40 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +22 +21 +21 +19 +19 +17 +17 +17 +16 +15 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +14 +13 +14 +14 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +39 +41 +41 +42 +42 +47 +47 +47 +51 +51 +55 +54 +55 +58 +58 +64 +65 +65 +68 +68 +72 +73 +72 +75 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +116 +119 +120 +125 +126 +125 +129 +129 +133 +133 +140 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +172 +174 +175 +175 +179 +179 +183 +183 +183 +185 +185 +189 +189 +188 +190 +190 +191 +190 +191 +194 +194 +196 +196 +196 +198 +198 +200 +200 +201 +200 +201 +202 +203 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +205 +205 +205 +204 +204 +202 +202 +202 +200 +201 +200 +200 +201 +198 +198 +199 +198 +199 +196 +197 +195 +195 +195 +190 +190 +188 +188 +185 +184 +185 +183 +182 +178 +178 +178 +175 +173 +173 +173 +168 +169 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +119 +120 +116 +115 +110 +109 +110 +106 +106 +100 +100 +97 +96 +95 +89 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +58 +58 +54 +54 +51 +51 +47 +47 +47 +42 +43 +41 +40 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +18 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +14 +14 +13 +14 +14 +13 +14 +13 +14 +13 +13 +13 +14 +13 +13 +15 +15 +15 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +40 +43 +43 +43 +46 +47 +50 +51 +51 +55 +54 +59 +59 +64 +65 +64 +68 +69 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +109 +115 +115 +115 +120 +119 +125 +125 +125 +129 +129 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +174 +179 +178 +179 +182 +183 +184 +184 +185 +189 +189 +191 +190 +191 +194 +194 +196 +196 +198 +198 +198 +200 +201 +200 +200 +200 +202 +202 +203 +203 +202 +204 +204 +204 +204 +204 +206 +206 +206 +207 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +204 +205 +204 +204 +204 +205 +204 +204 +202 +202 +200 +200 +201 +200 +200 +199 +198 +198 +196 +196 +194 +194 +190 +190 +190 +189 +189 +185 +184 +184 +183 +183 +178 +179 +179 +175 +175 +173 +172 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +126 +126 +126 +120 +119 +115 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +75 +72 +73 +72 +72 +72 +68 +68 +65 +64 +64 +59 +59 +54 +55 +54 +51 +51 +47 +47 +46 +43 +43 +40 +41 +41 +37 +37 +33 +33 +34 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +14 +13 +13 +14 +13 +14 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +14 +14 +14 +13 +14 +13 +12 +15 +15 +18 +17 +17 +19 +19 +21 +21 +21 +24 +25 +27 +27 +27 +31 +31 +32 +33 +34 +38 +36 +41 +41 +42 +43 +42 +47 +47 +51 +51 +51 +55 +55 +55 +54 +55 +58 +58 +64 +64 +65 +68 +68 +72 +72 +72 +76 +76 +82 +82 +85 +86 +86 +90 +90 +96 +96 +95 +100 +100 +106 +106 +106 +110 +110 +116 +115 +116 +120 +120 +125 +125 +126 +129 +129 +133 +134 +140 +140 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +166 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +178 +182 +183 +183 +184 +184 +188 +189 +189 +191 +190 +191 +191 +191 +194 +195 +197 +197 +197 +199 +198 +200 +200 +200 +200 +200 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +205 +204 +204 +204 +204 +202 +203 +202 +200 +200 +200 +200 +200 +198 +198 +196 +196 +197 +194 +195 +190 +191 +191 +189 +189 +184 +185 +182 +183 +182 +178 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +142 +139 +139 +139 +133 +133 +129 +129 +130 +125 +125 +120 +120 +119 +115 +116 +110 +109 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +87 +86 +86 +82 +82 +76 +77 +76 +72 +72 +68 +68 +68 +65 +64 +58 +59 +58 +54 +54 +50 +50 +51 +47 +47 +43 +43 +40 +41 +41 +37 +37 +33 +33 +33 +31 +31 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +20 +17 +17 +16 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +13 +13 +13 +13 +14 +13 +13 +14 +14 +14 +14 +13 +14 +14 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +50 +50 +55 +55 +55 +59 +58 +64 +64 +68 +68 +69 +72 +72 +76 +76 +77 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +105 +106 +110 +110 +116 +115 +120 +119 +120 +125 +125 +129 +129 +130 +133 +133 +139 +139 +140 +143 +143 +147 +147 +147 +151 +151 +157 +157 +158 +161 +161 +165 +165 +169 +169 +170 +173 +173 +175 +175 +175 +179 +179 +179 +179 +179 +183 +183 +185 +185 +185 +189 +188 +191 +190 +191 +194 +195 +197 +196 +198 +198 +199 +201 +200 +200 +200 +200 +203 +202 +202 +202 +202 +204 +204 +204 +204 +205 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +206 +207 +205 +205 +204 +204 +205 +202 +202 +202 +200 +201 +200 +200 +201 +198 +199 +196 +196 +194 +194 +195 +191 +190 +188 +188 +189 +184 +185 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +130 +129 +126 +125 +120 +119 +120 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +69 +68 +69 +65 +64 +59 +59 +54 +55 +55 +51 +51 +47 +47 +46 +43 +43 +42 +42 +43 +41 +41 +36 +37 +37 +33 +33 +31 +31 +28 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +13 +14 +13 +14 +13 +14 +13 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +27 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +51 +50 +50 +55 +54 +59 +59 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +116 +120 +119 +120 +126 +126 +129 +129 +129 +134 +133 +139 +139 +140 +143 +143 +147 +147 +152 +151 +151 +157 +157 +161 +161 +161 +165 +165 +165 +165 +165 +169 +169 +172 +173 +173 +175 +174 +179 +179 +178 +182 +183 +185 +184 +188 +188 +188 +190 +191 +194 +195 +194 +196 +196 +196 +196 +196 +198 +199 +200 +200 +201 +200 +200 +202 +202 +203 +204 +204 +204 +205 +206 +206 +207 +206 +206 +206 +206 +207 +206 +207 +206 +206 +207 +206 +207 +204 +204 +205 +204 +205 +202 +202 +200 +201 +201 +200 +200 +199 +198 +199 +197 +197 +195 +194 +195 +190 +190 +189 +189 +188 +185 +185 +183 +183 +183 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +140 +133 +133 +130 +130 +126 +125 +125 +120 +118 +115 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +77 +77 +72 +72 +72 +69 +68 +64 +64 +65 +58 +59 +58 +58 +59 +54 +54 +50 +51 +51 +47 +47 +43 +43 +42 +41 +41 +37 +37 +33 +33 +33 +31 +31 +31 +31 +31 +27 +27 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +14 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +14 +13 +14 +13 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +50 +50 +55 +55 +54 +59 +58 +64 +65 +65 +69 +68 +72 +72 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +110 +110 +116 +115 +117 +119 +119 +126 +126 +130 +130 +129 +133 +133 +140 +139 +139 +143 +143 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +162 +165 +165 +169 +169 +173 +173 +173 +174 +175 +179 +178 +179 +182 +183 +183 +183 +182 +185 +185 +188 +189 +188 +191 +190 +195 +195 +196 +197 +197 +198 +198 +201 +200 +200 +200 +200 +202 +203 +202 +204 +204 +204 +204 +205 +206 +206 +207 +207 +207 +206 +207 +206 +207 +206 +206 +207 +206 +206 +204 +205 +204 +204 +205 +202 +202 +202 +201 +201 +201 +200 +200 +199 +199 +197 +196 +196 +194 +195 +190 +191 +189 +188 +188 +185 +185 +183 +183 +183 +179 +179 +174 +175 +175 +173 +173 +169 +169 +169 +164 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +139 +139 +140 +133 +133 +129 +129 +129 +125 +125 +119 +119 +120 +116 +116 +109 +110 +110 +106 +106 +100 +100 +95 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +69 +68 +68 +64 +65 +58 +59 +59 +55 +54 +51 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +26 +24 +23 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +14 +13 +13 +14 +14 +13 +13 +13 +14 +14 +14 +13 +13 +14 +13 +13 +13 +14 +14 +14 +14 +13 +13 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +26 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +40 +43 +43 +43 +47 +47 +50 +50 +51 +54 +54 +58 +59 +65 +64 +65 +69 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +91 +90 +96 +96 +100 +100 +101 +106 +105 +110 +110 +115 +116 +115 +120 +119 +126 +125 +125 +129 +129 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +149 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +173 +173 +173 +175 +175 +179 +179 +179 +182 +183 +185 +185 +188 +189 +189 +191 +191 +194 +195 +195 +197 +196 +198 +198 +198 +200 +200 +200 +200 +200 +202 +202 +204 +204 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +205 +202 +202 +200 +201 +201 +200 +201 +198 +199 +196 +196 +197 +194 +194 +190 +191 +190 +189 +189 +185 +185 +185 +183 +182 +179 +179 +178 +175 +175 +173 +172 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +140 +140 +133 +134 +133 +129 +129 +125 +125 +125 +119 +119 +116 +116 +110 +110 +110 +106 +105 +100 +100 +100 +96 +96 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +72 +72 +68 +68 +65 +64 +65 +58 +58 +55 +55 +55 +51 +51 +51 +50 +51 +46 +47 +43 +43 +43 +41 +41 +37 +37 +35 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +13 +14 +14 +13 +14 +13 +14 +14 +14 +14 +13 +13 +14 +14 +13 +13 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +38 +41 +41 +43 +43 +47 +47 +47 +51 +50 +55 +54 +55 +58 +59 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +83 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +110 +110 +110 +115 +115 +119 +119 +119 +125 +125 +130 +130 +131 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +183 +185 +185 +188 +189 +188 +190 +191 +195 +195 +195 +196 +197 +198 +198 +199 +201 +201 +200 +201 +202 +202 +202 +205 +204 +204 +204 +204 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +204 +204 +205 +204 +203 +202 +203 +200 +201 +200 +200 +200 +198 +199 +199 +199 +199 +197 +197 +194 +194 +194 +191 +191 +189 +189 +189 +184 +185 +182 +182 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +148 +143 +143 +139 +139 +133 +133 +133 +130 +129 +125 +126 +125 +119 +120 +119 +120 +119 +116 +115 +109 +109 +110 +106 +106 +100 +99 +100 +96 +96 +90 +90 +87 +86 +86 +82 +82 +76 +76 +77 +72 +72 +72 +72 +72 +68 +68 +64 +64 +64 +59 +58 +55 +55 +53 +51 +50 +47 +46 +43 +43 +42 +41 +41 +37 +37 +36 +33 +33 +31 +31 +31 +27 +27 +25 +25 +26 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +13 +13 +13 +14 +14 +14 +13 +14 +14 +13 +13 +13 +14 +13 +13 +14 +14 +13 +14 +14 +14 +14 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +32 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +42 +43 +46 +47 +51 +51 +51 +55 +54 +58 +58 +60 +65 +64 +68 +68 +73 +72 +72 +76 +77 +82 +82 +82 +86 +86 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +115 +119 +119 +120 +125 +125 +129 +129 +129 +133 +133 +133 +133 +133 +139 +139 +143 +143 +144 +147 +147 +151 +151 +157 +157 +157 +161 +161 +164 +165 +165 +168 +169 +173 +173 +173 +175 +175 +179 +179 +179 +182 +182 +185 +184 +185 +188 +189 +191 +190 +194 +194 +194 +196 +196 +198 +198 +198 +200 +200 +201 +200 +200 +202 +202 +205 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +200 +200 +200 +200 +200 +198 +198 +198 +196 +197 +194 +194 +191 +191 +191 +189 +188 +184 +185 +184 +182 +183 +179 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +119 +120 +115 +116 +109 +110 +105 +106 +106 +100 +100 +96 +96 +96 +90 +90 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +69 +68 +68 +64 +64 +58 +58 +59 +54 +54 +51 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +13 +13 +14 +14 +13 +14 +14 +13 +14 +13 +14 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +20 +19 +19 +22 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +36 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +50 +54 +54 +55 +58 +59 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +93 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +115 +119 +120 +119 +120 +120 +125 +125 +129 +129 +130 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +174 +175 +179 +179 +183 +183 +184 +185 +185 +189 +189 +190 +190 +191 +195 +194 +197 +197 +196 +198 +198 +200 +200 +200 +200 +200 +202 +202 +203 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +202 +200 +200 +200 +200 +198 +198 +198 +196 +196 +195 +195 +195 +190 +190 +189 +188 +188 +185 +185 +183 +183 +183 +178 +179 +175 +174 +175 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +127 +125 +125 +119 +119 +115 +116 +115 +110 +110 +106 +106 +106 +100 +100 +99 +100 +100 +96 +96 +90 +90 +90 +86 +85 +82 +82 +79 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +59 +58 +54 +54 +51 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +33 +33 +31 +31 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +43 +43 +43 +47 +46 +51 +51 +51 +54 +54 +54 +54 +55 +58 +58 +64 +64 +64 +68 +68 +72 +72 +73 +76 +76 +82 +82 +87 +86 +86 +90 +90 +96 +96 +96 +100 +100 +99 +99 +100 +106 +105 +110 +110 +110 +115 +116 +119 +119 +120 +126 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +162 +165 +165 +169 +169 +172 +173 +172 +175 +175 +179 +179 +179 +182 +183 +184 +184 +184 +189 +188 +190 +190 +191 +194 +194 +197 +196 +196 +198 +198 +200 +200 +201 +200 +200 +202 +202 +204 +205 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +204 +204 +205 +204 +204 +202 +203 +200 +200 +200 +201 +200 +199 +198 +198 +196 +196 +195 +194 +195 +191 +191 +188 +188 +189 +184 +185 +182 +182 +179 +178 +179 +175 +175 +173 +173 +173 +168 +168 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +126 +126 +125 +125 +120 +120 +115 +116 +116 +110 +110 +106 +105 +101 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +83 +76 +76 +72 +72 +72 +68 +68 +64 +64 +65 +58 +58 +55 +55 +51 +50 +51 +47 +47 +43 +43 +42 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +14 +14 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +13 +14 +14 +13 +14 +14 +14 +13 +14 +13 +13 +14 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +36 +37 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +52 +55 +54 +59 +58 +64 +64 +65 +68 +68 +72 +72 +72 +76 +76 +76 +76 +76 +82 +82 +86 +86 +87 +90 +90 +96 +96 +100 +100 +99 +106 +106 +110 +109 +110 +116 +116 +119 +119 +119 +125 +125 +129 +129 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +151 +151 +151 +157 +157 +160 +161 +161 +165 +165 +169 +169 +169 +173 +173 +174 +174 +175 +178 +179 +182 +183 +183 +185 +184 +188 +189 +191 +190 +190 +194 +194 +196 +197 +196 +198 +198 +200 +200 +200 +201 +200 +202 +202 +202 +204 +205 +204 +204 +204 +206 +206 +206 +206 +207 +206 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +200 +200 +201 +200 +200 +198 +198 +196 +196 +197 +194 +194 +190 +190 +191 +188 +189 +188 +188 +188 +184 +185 +183 +182 +183 +179 +179 +175 +175 +174 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +131 +129 +129 +125 +125 +119 +119 +119 +116 +116 +110 +109 +110 +106 +106 +100 +100 +99 +96 +96 +90 +90 +90 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +58 +59 +54 +54 +51 +51 +51 +47 +47 +42 +43 +43 +41 +41 +37 +36 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +16 +13 +13 +12 +13 +14 +14 +13 +14 +14 +14 +14 +14 +14 +13 +14 +13 +14 +14 +13 +13 +13 +14 +14 +13 +14 +13 +14 +13 +13 +14 +13 +16 +15 +15 +17 +17 +19 +19 +19 +21 +21 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +35 +36 +36 +41 +41 +43 +44 +43 +47 +47 +51 +51 +51 +54 +54 +55 +54 +55 +58 +58 +64 +64 +65 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +115 +116 +119 +119 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +168 +169 +172 +173 +174 +175 +174 +178 +179 +182 +183 +182 +185 +185 +188 +188 +189 +190 +191 +194 +194 +194 +197 +197 +198 +198 +198 +200 +201 +200 +200 +202 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +207 +204 +204 +205 +204 +202 +202 +202 +200 +200 +200 +201 +200 +198 +198 +198 +198 +198 +196 +196 +194 +194 +194 +190 +191 +188 +188 +187 +184 +185 +182 +183 +178 +178 +179 +175 +175 +173 +173 +173 +169 +169 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +148 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +120 +120 +116 +116 +110 +109 +110 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +59 +58 +58 +54 +54 +50 +50 +47 +47 +46 +43 +43 +41 +40 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +14 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +14 +14 +13 +13 +14 +13 +13 +13 +13 +13 +13 +14 +13 +13 +15 +15 +15 +15 +15 +17 +17 +17 +19 +19 +21 +21 +23 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +41 +40 +41 +43 +43 +47 +46 +47 +51 +50 +54 +54 +58 +58 +58 +64 +65 +68 +68 +68 +72 +72 +76 +76 +76 +82 +81 +86 +86 +86 +90 +90 +96 +96 +97 +100 +100 +106 +106 +109 +110 +110 +115 +116 +120 +119 +120 +125 +125 +129 +129 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +147 +151 +151 +157 +157 +162 +161 +161 +165 +165 +169 +169 +169 +172 +173 +175 +175 +175 +179 +179 +183 +182 +183 +185 +185 +189 +189 +189 +190 +191 +194 +194 +197 +196 +196 +198 +198 +200 +200 +200 +200 +201 +202 +202 +202 +204 +204 +205 +204 +204 +206 +207 +206 +207 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +205 +205 +204 +204 +202 +202 +202 +201 +200 +200 +200 +200 +198 +199 +196 +197 +196 +194 +195 +190 +191 +189 +189 +189 +184 +185 +183 +182 +182 +179 +179 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +163 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +130 +129 +125 +125 +125 +119 +119 +116 +115 +113 +110 +109 +105 +106 +99 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +71 +72 +72 +68 +68 +65 +64 +58 +58 +59 +55 +54 +51 +50 +51 +46 +47 +42 +43 +43 +41 +41 +37 +37 +37 +33 +32 +31 +31 +31 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +14 +13 +14 +14 +14 +14 +14 +14 +13 +13 +14 +14 +14 +13 +14 +13 +14 +13 +14 +14 +13 +14 +13 +13 +14 +13 +13 +15 +15 +16 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +31 +31 +31 +33 +33 +37 +37 +37 +41 +40 +43 +43 +44 +47 +47 +51 +51 +55 +54 +54 +58 +58 +64 +64 +65 +68 +69 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +95 +96 +95 +100 +100 +106 +106 +106 +110 +110 +116 +116 +116 +120 +119 +125 +125 +126 +130 +129 +133 +133 +133 +139 +139 +143 +143 +148 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +182 +183 +184 +184 +189 +188 +189 +191 +190 +194 +194 +194 +196 +196 +198 +198 +198 +200 +200 +200 +200 +201 +202 +202 +205 +204 +205 +204 +204 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +205 +204 +204 +204 +204 +202 +202 +203 +200 +201 +200 +200 +198 +198 +198 +196 +196 +194 +194 +194 +190 +191 +191 +190 +190 +188 +188 +184 +184 +185 +182 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +168 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +140 +133 +133 +130 +129 +129 +125 +125 +119 +120 +119 +115 +115 +110 +110 +109 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +83 +82 +77 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +59 +58 +54 +54 +50 +50 +51 +46 +47 +43 +42 +43 +41 +40 +37 +37 +34 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +16 +13 +13 +12 +13 +13 +13 +13 +14 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +13 +13 +13 +14 +14 +14 +14 +14 +14 +13 +13 +13 +14 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +51 +51 +55 +55 +58 +58 +59 +64 +64 +69 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +110 +110 +115 +116 +119 +119 +126 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +178 +182 +182 +185 +184 +185 +188 +188 +191 +190 +191 +195 +195 +197 +196 +196 +199 +198 +200 +200 +200 +200 +201 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +204 +204 +204 +205 +205 +202 +202 +200 +200 +200 +200 +200 +200 +200 +200 +198 +199 +196 +196 +196 +195 +195 +191 +190 +189 +188 +189 +184 +185 +183 +183 +182 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +160 +161 +157 +158 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +130 +129 +129 +125 +125 +119 +119 +120 +115 +115 +109 +110 +110 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +59 +58 +55 +55 +51 +51 +47 +47 +47 +43 +43 +40 +40 +41 +36 +37 +33 +33 +33 +30 +31 +27 +27 +27 +25 +24 +21 +21 +22 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +13 +14 +13 +13 +13 +13 +14 +13 +13 +14 +14 +14 +14 +13 +13 +14 +14 +13 +13 +14 +13 +13 +13 +14 +14 +14 +13 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +27 +27 +27 +31 +31 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +42 +43 +43 +47 +47 +51 +50 +54 +54 +55 +58 +59 +65 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +91 +96 +96 +100 +100 +106 +106 +106 +109 +110 +115 +116 +116 +119 +120 +126 +126 +125 +129 +130 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +158 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +179 +182 +183 +184 +185 +185 +188 +188 +190 +191 +194 +194 +194 +196 +196 +198 +198 +198 +200 +200 +200 +200 +200 +202 +202 +204 +204 +204 +204 +204 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +204 +204 +202 +202 +202 +201 +201 +200 +200 +199 +198 +198 +196 +197 +194 +195 +194 +190 +190 +188 +188 +188 +184 +185 +183 +183 +182 +178 +179 +175 +175 +175 +173 +173 +169 +169 +164 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +130 +129 +125 +125 +119 +120 +116 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +65 +65 +65 +58 +59 +54 +55 +54 +50 +50 +47 +47 +47 +43 +43 +41 +40 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +14 +14 +14 +13 +14 +13 +13 +14 +14 +13 +14 +14 +14 +14 +13 +13 +15 +15 +17 +17 +19 +18 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +38 +41 +40 +43 +43 +46 +47 +47 +51 +50 +55 +55 +55 +58 +58 +65 +64 +65 +68 +68 +72 +72 +72 +77 +76 +82 +82 +83 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +109 +116 +116 +116 +119 +120 +125 +126 +125 +129 +129 +133 +134 +134 +139 +139 +143 +143 +148 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +172 +175 +175 +179 +179 +179 +182 +182 +184 +184 +188 +189 +188 +191 +190 +195 +194 +194 +196 +196 +196 +196 +196 +198 +198 +200 +200 +200 +200 +200 +202 +202 +203 +204 +204 +204 +204 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +205 +205 +204 +204 +203 +203 +202 +200 +200 +200 +200 +200 +198 +198 +197 +196 +196 +194 +194 +191 +191 +190 +189 +189 +184 +184 +185 +183 +183 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +130 +129 +129 +125 +125 +119 +119 +119 +116 +116 +110 +110 +109 +106 +106 +100 +100 +100 +96 +96 +90 +90 +91 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +68 +68 +65 +64 +58 +59 +58 +55 +54 +51 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +36 +33 +33 +33 +30 +31 +27 +27 +27 +25 +25 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +12 +13 +14 +14 +13 +13 +14 +14 +14 +14 +13 +13 +14 +13 +13 +14 +13 +14 +13 +14 +14 +14 +13 +13 +14 +13 +14 +13 +14 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +50 +54 +55 +55 +58 +58 +64 +65 +65 +68 +68 +72 +72 +76 +76 +76 +82 +82 +87 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +109 +115 +116 +116 +120 +120 +125 +126 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +166 +169 +169 +173 +173 +175 +174 +175 +179 +179 +182 +182 +183 +184 +184 +185 +185 +184 +189 +189 +191 +191 +191 +195 +194 +196 +196 +197 +198 +198 +200 +200 +200 +200 +200 +203 +202 +202 +202 +202 +204 +204 +205 +204 +204 +204 +204 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +200 +200 +200 +200 +200 +199 +198 +199 +196 +197 +195 +194 +191 +190 +190 +189 +188 +184 +184 +185 +182 +182 +179 +179 +179 +175 +175 +173 +172 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +152 +151 +151 +147 +147 +143 +143 +143 +139 +139 +134 +133 +134 +130 +129 +125 +125 +125 +120 +120 +115 +115 +116 +110 +109 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +65 +58 +58 +55 +54 +51 +51 +51 +46 +47 +43 +43 +43 +41 +41 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +28 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +15 +15 +15 +13 +13 +12 +12 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +14 +14 +14 +14 +14 +14 +13 +14 +14 +13 +13 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +32 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +50 +55 +54 +55 +58 +59 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +91 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +115 +119 +119 +125 +125 +126 +130 +130 +133 +133 +134 +139 +139 +143 +143 +144 +147 +147 +151 +151 +158 +157 +157 +161 +161 +165 +165 +165 +169 +169 +169 +169 +169 +173 +173 +175 +175 +175 +178 +179 +183 +182 +183 +184 +185 +188 +188 +191 +190 +191 +195 +194 +196 +196 +196 +198 +199 +199 +198 +198 +201 +200 +200 +200 +200 +202 +203 +205 +204 +204 +204 +205 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +204 +204 +204 +204 +204 +203 +203 +200 +200 +200 +200 +201 +198 +198 +196 +196 +196 +194 +195 +190 +190 +190 +188 +188 +185 +185 +185 +183 +183 +179 +179 +179 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +134 +134 +129 +129 +126 +126 +120 +119 +120 +115 +116 +110 +110 +110 +106 +105 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +68 +68 +68 +65 +64 +59 +59 +58 +54 +54 +50 +51 +51 +47 +47 +42 +43 +43 +41 +41 +37 +36 +37 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +19 +19 +19 +17 +17 +15 +15 +15 +15 +14 +13 +13 +13 +12 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +14 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +14 +14 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +50 +54 +55 +59 +59 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +91 +89 +90 +96 +96 +100 +100 +100 +106 +105 +110 +109 +110 +116 +116 +119 +119 +119 +125 +125 +129 +129 +130 +133 +133 +139 +140 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +176 +179 +179 +182 +182 +184 +185 +184 +189 +188 +191 +191 +191 +194 +195 +194 +194 +194 +196 +196 +199 +199 +198 +200 +201 +199 +201 +201 +202 +202 +205 +204 +204 +204 +204 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +204 +204 +204 +204 +203 +203 +202 +200 +201 +200 +200 +200 +199 +198 +196 +196 +196 +194 +194 +191 +190 +190 +188 +189 +184 +184 +184 +182 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +130 +129 +129 +126 +125 +119 +119 +119 +115 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +68 +69 +64 +64 +64 +64 +64 +58 +58 +55 +54 +55 +50 +50 +47 +47 +45 +43 +42 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +16 +15 +14 +15 +15 +13 +13 +13 +12 +13 +14 +13 +13 +13 +14 +13 +14 +13 +13 +14 +13 +14 +13 +14 +13 +13 +14 +13 +13 +14 +13 +13 +14 +14 +14 +14 +12 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +46 +47 +51 +51 +54 +55 +55 +59 +58 +64 +64 +65 +68 +68 +72 +72 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +101 +105 +106 +106 +110 +109 +115 +115 +116 +120 +120 +125 +125 +129 +129 +130 +133 +133 +139 +139 +138 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +166 +169 +169 +173 +173 +174 +175 +175 +179 +178 +183 +182 +183 +185 +185 +185 +184 +185 +188 +188 +191 +191 +191 +194 +194 +196 +196 +197 +198 +199 +200 +201 +200 +200 +200 +202 +202 +205 +204 +204 +205 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +205 +205 +205 +204 +202 +202 +200 +200 +201 +200 +200 +198 +198 +198 +196 +196 +194 +194 +194 +190 +190 +188 +188 +184 +184 +185 +182 +183 +178 +179 +178 +174 +175 +173 +172 +172 +169 +168 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +144 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +125 +119 +119 +116 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +91 +90 +90 +86 +86 +83 +82 +82 +76 +76 +72 +72 +72 +68 +68 +65 +64 +65 +59 +58 +55 +55 +55 +51 +51 +47 +47 +43 +43 +43 +41 +40 +37 +37 +37 +33 +33 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +15 +15 +16 +13 +13 +12 +12 +13 +14 +13 +13 +13 +14 +13 +13 +13 +13 +14 +13 +14 +13 +13 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +26 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +42 +43 +43 +46 +47 +50 +51 +51 +54 +54 +58 +58 +65 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +101 +106 +106 +110 +109 +116 +115 +116 +119 +120 +125 +125 +125 +129 +129 +129 +129 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +148 +151 +151 +157 +157 +161 +161 +161 +165 +165 +168 +169 +169 +173 +173 +173 +173 +173 +175 +175 +178 +179 +179 +183 +182 +184 +184 +188 +188 +189 +190 +190 +195 +195 +194 +197 +196 +198 +199 +198 +200 +200 +201 +201 +200 +202 +202 +204 +204 +205 +204 +205 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +204 +204 +204 +204 +204 +202 +202 +201 +200 +201 +201 +200 +198 +198 +196 +196 +196 +194 +194 +190 +190 +190 +188 +189 +185 +185 +184 +182 +182 +179 +178 +178 +174 +175 +173 +173 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +126 +120 +120 +115 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +71 +69 +68 +64 +64 +58 +58 +58 +54 +54 +51 +50 +51 +47 +47 +47 +46 +47 +43 +42 +41 +41 +41 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +14 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +14 +13 +14 +14 +14 +13 +13 +13 +13 +15 +15 +18 +17 +17 +19 +18 +21 +21 +21 +25 +25 +27 +27 +27 +30 +31 +33 +33 +33 +33 +33 +37 +37 +37 +41 +41 +43 +43 +47 +46 +47 +51 +51 +54 +54 +55 +59 +59 +58 +59 +58 +65 +64 +69 +69 +69 +72 +72 +76 +76 +77 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +106 +106 +106 +110 +110 +115 +115 +116 +120 +119 +125 +126 +127 +130 +129 +133 +133 +139 +140 +139 +143 +143 +147 +147 +147 +151 +151 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +171 +173 +173 +175 +175 +179 +179 +179 +182 +183 +185 +185 +185 +188 +188 +190 +191 +190 +195 +195 +197 +196 +197 +199 +199 +200 +200 +200 +200 +200 +202 +202 +205 +205 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +207 +207 +204 +204 +205 +204 +204 +203 +202 +200 +200 +200 +200 +200 +198 +198 +198 +197 +196 +195 +194 +194 +191 +191 +189 +189 +189 +184 +185 +183 +182 +179 +179 +179 +175 +175 +173 +173 +173 +168 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +133 +133 +133 +130 +130 +125 +126 +125 +120 +119 +116 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +93 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +69 +68 +69 +64 +64 +59 +58 +59 +54 +54 +51 +50 +52 +47 +47 +43 +43 +41 +41 +41 +37 +37 +32 +33 +33 +31 +31 +26 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +13 +14 +13 +14 +14 +14 +14 +14 +14 +14 +13 +14 +14 +14 +14 +14 +14 +14 +14 +13 +13 +14 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +20 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +34 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +51 +54 +55 +55 +59 +58 +65 +64 +64 +68 +69 +72 +73 +77 +76 +77 +82 +83 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +117 +119 +119 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +162 +165 +165 +168 +169 +173 +173 +173 +175 +175 +178 +178 +179 +183 +182 +184 +185 +184 +189 +189 +191 +190 +191 +195 +195 +197 +196 +198 +198 +198 +200 +201 +200 +201 +200 +202 +202 +204 +204 +205 +204 +204 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +204 +204 +204 +204 +204 +202 +202 +201 +200 +200 +201 +200 +199 +198 +198 +197 +196 +194 +195 +194 +190 +190 +188 +188 +185 +184 +185 +183 +183 +179 +179 +179 +174 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +143 +143 +143 +139 +139 +134 +133 +133 +129 +129 +125 +125 +125 +119 +120 +116 +116 +116 +110 +110 +106 +106 +103 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +76 +76 +76 +72 +72 +68 +68 +69 +64 +65 +59 +59 +55 +54 +54 +50 +50 +47 +46 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +28 +25 +24 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +14 +14 +13 +14 +13 +14 +14 +13 +13 +13 +14 +13 +13 +13 +14 +14 +14 +14 +13 +13 +14 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +40 +41 +41 +42 +43 +47 +46 +47 +50 +51 +54 +54 +56 +58 +58 +65 +64 +69 +68 +68 +72 +72 +76 +76 +76 +82 +81 +82 +82 +82 +86 +86 +90 +90 +90 +96 +95 +100 +100 +100 +106 +105 +110 +110 +116 +115 +116 +120 +120 +125 +126 +126 +129 +129 +130 +129 +129 +133 +134 +139 +139 +140 +143 +143 +147 +147 +149 +151 +151 +157 +157 +160 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +182 +182 +184 +185 +188 +189 +190 +191 +190 +194 +194 +197 +196 +197 +198 +198 +198 +198 +198 +200 +201 +200 +200 +201 +202 +203 +204 +205 +205 +205 +205 +207 +207 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +207 +206 +206 +204 +204 +204 +204 +204 +202 +203 +200 +200 +200 +200 +200 +198 +198 +197 +196 +196 +195 +195 +190 +191 +191 +188 +189 +185 +185 +184 +183 +183 +178 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +130 +130 +126 +125 +126 +120 +119 +115 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +74 +72 +72 +68 +68 +64 +64 +64 +59 +58 +54 +54 +54 +50 +50 +47 +47 +47 +43 +43 +41 +41 +42 +37 +36 +33 +33 +31 +31 +31 +26 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +14 +14 +14 +14 +14 +14 +14 +13 +13 +14 +14 +14 +14 +13 +13 +13 +13 +14 +13 +14 +13 +14 +14 +14 +13 +13 +13 +13 +15 +15 +18 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +50 +51 +51 +55 +55 +59 +59 +58 +65 +64 +65 +64 +65 +68 +68 +72 +72 +72 +76 +76 +82 +82 +84 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +109 +109 +109 +115 +116 +119 +119 +120 +125 +125 +129 +129 +131 +133 +133 +139 +140 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +177 +179 +179 +182 +182 +184 +185 +185 +188 +188 +190 +190 +190 +194 +195 +196 +196 +197 +199 +198 +200 +201 +200 +201 +201 +203 +202 +204 +205 +204 +204 +204 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +204 +204 +204 +204 +205 +203 +202 +200 +200 +201 +201 +200 +198 +198 +198 +197 +197 +194 +195 +194 +191 +190 +189 +188 +189 +185 +185 +183 +182 +183 +179 +179 +175 +175 +172 +173 +173 +169 +169 +165 +165 +165 +161 +161 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +141 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +120 +120 +116 +116 +116 +116 +116 +109 +109 +106 +106 +106 +100 +100 +96 +96 +93 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +69 +68 +64 +64 +64 +58 +59 +54 +55 +55 +50 +51 +47 +47 +43 +43 +42 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +12 +13 +14 +13 +14 +14 +14 +13 +13 +14 +14 +14 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +13 +14 +14 +14 +13 +13 +15 +15 +17 +17 +17 +20 +19 +21 +21 +21 +25 +25 +27 +27 +28 +31 +31 +33 +33 +36 +37 +37 +40 +41 +43 +43 +43 +47 +47 +47 +47 +46 +50 +50 +54 +55 +55 +58 +59 +64 +65 +66 +68 +68 +72 +73 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +115 +115 +115 +119 +119 +125 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +165 +165 +164 +168 +169 +173 +173 +173 +175 +175 +179 +178 +179 +183 +183 +185 +185 +185 +189 +188 +190 +191 +190 +194 +194 +197 +197 +197 +199 +198 +200 +200 +200 +201 +200 +203 +203 +204 +204 +204 +204 +205 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +207 +206 +206 +206 +206 +205 +205 +205 +204 +204 +202 +202 +201 +201 +200 +200 +201 +199 +198 +199 +197 +196 +194 +195 +194 +190 +191 +189 +189 +184 +184 +185 +182 +183 +179 +179 +179 +175 +175 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +133 +133 +133 +129 +129 +125 +126 +126 +119 +119 +115 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +83 +82 +82 +76 +76 +72 +73 +73 +68 +68 +64 +65 +59 +58 +58 +55 +55 +51 +51 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +30 +31 +31 +27 +27 +25 +25 +22 +21 +21 +19 +19 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +14 +14 +13 +14 +13 +13 +14 +14 +13 +13 +14 +14 +13 +14 +14 +13 +13 +14 +14 +13 +14 +13 +14 +14 +13 +12 +15 +15 +16 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +42 +47 +46 +48 +50 +52 +54 +54 +58 +58 +58 +64 +65 +68 +68 +69 +73 +72 +72 +72 +73 +76 +76 +82 +82 +82 +86 +86 +90 +90 +95 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +116 +115 +119 +119 +126 +126 +125 +130 +129 +133 +133 +134 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +172 +173 +175 +175 +178 +179 +179 +182 +183 +184 +185 +188 +188 +188 +190 +191 +194 +194 +195 +196 +197 +198 +198 +201 +201 +200 +200 +201 +200 +203 +202 +205 +204 +204 +204 +204 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +204 +204 +204 +204 +205 +202 +202 +203 +200 +201 +200 +200 +198 +198 +198 +196 +196 +195 +194 +194 +191 +190 +191 +191 +191 +189 +188 +185 +185 +185 +182 +183 +178 +178 +179 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +160 +157 +157 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +138 +133 +133 +129 +129 +126 +125 +125 +119 +119 +115 +116 +115 +109 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +69 +68 +64 +64 +64 +58 +58 +54 +54 +55 +50 +51 +47 +47 +47 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +13 +14 +13 +13 +13 +13 +13 +13 +14 +13 +14 +14 +14 +13 +14 +13 +14 +14 +14 +13 +13 +14 +14 +14 +13 +14 +14 +14 +13 +13 +12 +15 +16 +17 +18 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +28 +31 +32 +33 +33 +37 +37 +37 +40 +41 +43 +43 +43 +47 +47 +46 +46 +47 +51 +51 +55 +55 +54 +58 +58 +64 +65 +68 +68 +68 +72 +73 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +115 +119 +120 +120 +125 +125 +129 +130 +129 +133 +133 +139 +139 +139 +143 +143 +147 +148 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +168 +169 +169 +173 +173 +175 +174 +175 +179 +178 +183 +183 +183 +184 +185 +189 +189 +188 +191 +190 +194 +194 +195 +197 +196 +198 +198 +200 +200 +200 +200 +200 +202 +203 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +207 +206 +206 +205 +204 +204 +204 +204 +202 +202 +202 +200 +200 +200 +200 +200 +198 +198 +197 +196 +197 +194 +190 +190 +191 +189 +188 +189 +184 +185 +182 +182 +183 +179 +178 +175 +175 +174 +173 +173 +172 +173 +172 +169 +169 +165 +165 +165 +161 +161 +157 +157 +154 +151 +151 +147 +147 +143 +143 +143 +139 +139 +134 +133 +133 +129 +129 +125 +126 +125 +119 +119 +115 +115 +116 +110 +110 +106 +106 +101 +100 +100 +95 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +73 +72 +68 +68 +64 +64 +65 +58 +58 +54 +55 +51 +50 +50 +47 +46 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +14 +14 +14 +14 +14 +13 +13 +14 +14 +14 +14 +14 +14 +14 +14 +13 +14 +13 +14 +13 +13 +14 +14 +13 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +37 +37 +37 +41 +41 +43 +43 +43 +47 +46 +51 +51 +54 +54 +54 +58 +59 +64 +64 +64 +68 +69 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +105 +106 +106 +109 +110 +116 +115 +116 +120 +119 +126 +125 +125 +130 +129 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +164 +169 +169 +173 +173 +173 +175 +175 +178 +179 +178 +183 +183 +184 +184 +185 +188 +188 +190 +190 +195 +194 +194 +196 +197 +198 +198 +198 +200 +200 +201 +200 +200 +200 +200 +202 +202 +203 +204 +204 +204 +204 +205 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +204 +204 +204 +204 +204 +202 +202 +200 +200 +200 +201 +200 +198 +199 +196 +196 +196 +194 +194 +195 +195 +194 +190 +190 +191 +191 +190 +188 +189 +184 +185 +185 +183 +182 +179 +179 +175 +175 +175 +173 +173 +168 +169 +168 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +130 +129 +130 +125 +119 +119 +119 +115 +116 +109 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +91 +86 +86 +82 +83 +77 +76 +76 +72 +73 +68 +69 +68 +64 +64 +58 +59 +58 +55 +54 +51 +51 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +22 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +14 +14 +14 +13 +13 +14 +14 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +19 +20 +20 +21 +21 +25 +25 +25 +27 +27 +31 +30 +33 +33 +33 +37 +37 +41 +40 +40 +43 +43 +47 +47 +46 +51 +50 +54 +55 +54 +58 +59 +64 +64 +65 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +105 +106 +109 +110 +115 +116 +115 +119 +119 +125 +125 +129 +130 +130 +133 +133 +139 +140 +140 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +175 +174 +175 +179 +178 +183 +183 +183 +185 +184 +185 +185 +185 +188 +188 +191 +190 +190 +195 +194 +196 +196 +196 +198 +198 +200 +200 +201 +200 +200 +202 +202 +204 +204 +204 +204 +204 +204 +204 +204 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +204 +204 +204 +204 +204 +202 +202 +202 +200 +200 +201 +200 +200 +200 +200 +198 +198 +198 +197 +197 +195 +195 +191 +190 +191 +188 +189 +185 +184 +185 +183 +183 +179 +179 +179 +175 +174 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +134 +133 +129 +129 +126 +125 +125 +119 +119 +115 +115 +115 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +73 +72 +72 +68 +69 +65 +64 +65 +58 +59 +55 +55 +51 +51 +51 +47 +47 +43 +42 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +12 +13 +13 +14 +13 +14 +14 +14 +14 +14 +14 +14 +14 +13 +14 +13 +14 +13 +13 +14 +13 +13 +13 +13 +14 +13 +14 +14 +13 +13 +14 +13 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +36 +41 +41 +43 +43 +43 +47 +46 +50 +51 +54 +54 +55 +59 +58 +64 +65 +64 +68 +68 +73 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +95 +96 +100 +100 +106 +106 +105 +109 +110 +115 +116 +116 +120 +120 +126 +126 +126 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +169 +169 +169 +173 +173 +175 +175 +175 +178 +179 +183 +183 +183 +184 +185 +189 +189 +190 +191 +190 +195 +194 +196 +196 +196 +199 +198 +198 +198 +198 +200 +200 +200 +200 +200 +202 +203 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +204 +204 +204 +204 +205 +202 +202 +201 +200 +201 +201 +200 +198 +198 +198 +196 +196 +195 +195 +195 +191 +191 +189 +189 +188 +184 +185 +183 +182 +183 +179 +179 +175 +175 +174 +173 +172 +169 +169 +164 +165 +165 +161 +161 +157 +157 +157 +151 +151 +148 +147 +147 +143 +143 +139 +140 +140 +133 +133 +129 +129 +126 +126 +125 +120 +119 +120 +119 +119 +115 +116 +110 +109 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +72 +72 +69 +68 +68 +64 +64 +64 +64 +65 +58 +58 +55 +55 +55 +51 +50 +47 +46 +48 +43 +43 +40 +41 +37 +37 +36 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +12 +13 +13 +14 +13 +14 +13 +14 +14 +13 +13 +13 +13 +13 +14 +14 +14 +13 +14 +14 +13 +13 +14 +13 +14 +14 +14 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +26 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +50 +50 +54 +55 +55 +59 +59 +64 +64 +64 +68 +68 +73 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +105 +105 +110 +110 +116 +115 +117 +119 +120 +126 +125 +129 +129 +129 +133 +133 +139 +140 +139 +143 +143 +148 +147 +147 +151 +151 +158 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +175 +175 +175 +179 +178 +183 +183 +183 +185 +184 +185 +185 +185 +188 +189 +191 +190 +191 +194 +194 +196 +197 +196 +198 +199 +201 +200 +201 +200 +200 +203 +202 +204 +204 +204 +204 +204 +205 +205 +204 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +204 +205 +204 +204 +204 +202 +202 +200 +201 +200 +200 +200 +198 +198 +199 +196 +197 +195 +195 +190 +190 +191 +189 +189 +185 +185 +184 +182 +183 +178 +178 +179 +175 +175 +172 +173 +173 +169 +169 +165 +165 +165 +161 +161 +158 +158 +151 +151 +151 +147 +147 +143 +143 +144 +139 +139 +133 +133 +133 +130 +129 +125 +126 +125 +119 +120 +116 +116 +116 +110 +110 +106 +105 +101 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +65 +58 +58 +55 +54 +51 +51 +51 +47 +47 +43 +43 +43 +41 +41 +40 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +26 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +13 +13 +13 +13 +13 +13 +14 +13 +14 +13 +14 +13 +13 +14 +14 +13 +13 +14 +13 +14 +14 +14 +13 +13 +13 +12 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +46 +51 +50 +55 +55 +55 +59 +65 +64 +64 +68 +68 +68 +69 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +87 +90 +90 +96 +96 +101 +100 +100 +106 +106 +110 +110 +110 +115 +115 +120 +119 +119 +125 +126 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +151 +151 +151 +157 +157 +160 +161 +160 +165 +165 +165 +165 +165 +169 +169 +173 +173 +172 +175 +175 +179 +178 +180 +182 +183 +185 +185 +189 +188 +188 +191 +190 +195 +194 +194 +196 +196 +197 +196 +197 +198 +198 +201 +200 +200 +200 +200 +203 +203 +203 +205 +205 +204 +204 +206 +207 +206 +207 +207 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +204 +205 +204 +204 +203 +202 +200 +200 +200 +201 +200 +198 +198 +199 +196 +196 +194 +194 +194 +190 +190 +189 +188 +189 +185 +185 +182 +182 +182 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +160 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +140 +133 +133 +129 +129 +126 +125 +125 +119 +119 +115 +116 +115 +109 +110 +106 +105 +105 +100 +100 +96 +95 +96 +90 +91 +86 +86 +86 +82 +82 +77 +76 +72 +73 +72 +68 +68 +65 +64 +64 +58 +58 +54 +54 +54 +50 +50 +47 +47 +47 +43 +42 +41 +41 +39 +37 +36 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +13 +13 +13 +13 +14 +14 +13 +13 +14 +13 +14 +13 +14 +13 +13 +14 +13 +14 +14 +14 +13 +13 +13 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +30 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +50 +50 +55 +54 +54 +58 +59 +64 +64 +64 +68 +68 +72 +72 +73 +76 +76 +82 +82 +87 +86 +86 +90 +90 +96 +96 +96 +100 +100 +100 +100 +100 +105 +105 +109 +110 +109 +115 +116 +120 +120 +120 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +147 +147 +147 +151 +151 +157 +157 +157 +157 +157 +161 +161 +162 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +178 +179 +182 +183 +182 +183 +183 +184 +185 +189 +188 +189 +191 +190 +195 +194 +196 +196 +197 +199 +199 +201 +201 +201 +200 +201 +202 +202 +202 +204 +205 +205 +204 +204 +207 +206 +206 +207 +207 +206 +206 +206 +206 +207 +206 +206 +206 +207 +204 +205 +204 +204 +204 +202 +202 +203 +201 +201 +201 +201 +201 +199 +198 +196 +197 +197 +194 +195 +191 +191 +189 +189 +188 +185 +184 +183 +182 +183 +179 +178 +178 +178 +179 +175 +175 +173 +172 +173 +169 +169 +165 +165 +166 +161 +161 +157 +157 +152 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +134 +129 +129 +126 +126 +126 +120 +119 +116 +115 +116 +110 +110 +106 +106 +100 +100 +99 +96 +96 +90 +90 +90 +86 +86 +87 +86 +86 +82 +82 +76 +77 +76 +72 +72 +68 +68 +66 +64 +64 +59 +59 +54 +55 +55 +51 +51 +47 +46 +46 +43 +43 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +28 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +12 +14 +13 +13 +14 +13 +13 +13 +13 +13 +14 +14 +14 +14 +13 +14 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +12 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +40 +42 +43 +43 +47 +47 +50 +51 +55 +54 +54 +58 +59 +64 +64 +64 +68 +68 +68 +68 +68 +73 +72 +76 +77 +76 +82 +82 +86 +86 +87 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +115 +115 +115 +116 +120 +120 +126 +125 +125 +129 +129 +133 +133 +135 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +178 +179 +179 +182 +183 +184 +185 +185 +188 +189 +190 +191 +190 +194 +194 +196 +197 +197 +198 +200 +200 +201 +200 +200 +202 +202 +203 +204 +204 +205 +204 +204 +204 +205 +204 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +204 +204 +204 +204 +202 +203 +202 +200 +200 +201 +200 +200 +198 +198 +196 +196 +196 +194 +194 +191 +191 +191 +189 +189 +185 +185 +185 +183 +182 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +152 +151 +147 +147 +143 +143 +144 +139 +139 +134 +133 +130 +129 +129 +125 +126 +119 +120 +120 +116 +115 +116 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +93 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +69 +68 +68 +64 +65 +58 +59 +58 +54 +54 +50 +50 +49 +47 +47 +43 +43 +41 +41 +41 +37 +37 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +13 +14 +14 +13 +13 +13 +14 +14 +13 +14 +13 +14 +14 +13 +13 +13 +13 +13 +14 +14 +14 +14 +13 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +18 +19 +19 +21 +21 +26 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +36 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +51 +54 +54 +58 +58 +65 +64 +64 +69 +68 +73 +72 +72 +76 +76 +76 +77 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +97 +100 +100 +105 +106 +110 +110 +110 +115 +116 +120 +120 +120 +125 +125 +126 +125 +125 +130 +129 +133 +133 +133 +140 +139 +143 +143 +145 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +170 +173 +173 +173 +175 +174 +179 +179 +179 +182 +183 +185 +185 +188 +189 +188 +191 +190 +194 +194 +194 +196 +196 +198 +199 +199 +200 +201 +201 +200 +200 +203 +203 +204 +204 +204 +204 +204 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +204 +204 +205 +205 +204 +203 +202 +201 +200 +201 +201 +200 +198 +198 +197 +196 +197 +194 +190 +190 +190 +190 +188 +189 +189 +189 +189 +184 +184 +183 +182 +182 +179 +179 +175 +174 +175 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +151 +151 +151 +147 +147 +143 +143 +144 +140 +139 +133 +133 +134 +129 +129 +126 +125 +120 +119 +120 +116 +116 +109 +110 +110 +106 +106 +106 +106 +105 +100 +100 +96 +96 +96 +90 +89 +86 +86 +85 +82 +82 +76 +76 +73 +72 +72 +69 +68 +64 +64 +65 +58 +58 +54 +55 +54 +51 +50 +47 +47 +47 +43 +42 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +18 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +13 +14 +14 +14 +13 +13 +14 +14 +13 +13 +13 +14 +14 +14 +14 +13 +14 +13 +13 +14 +14 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +34 +37 +37 +41 +41 +43 +43 +43 +47 +46 +50 +50 +50 +54 +55 +58 +59 +59 +64 +65 +68 +68 +68 +72 +72 +76 +76 +78 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +106 +106 +106 +110 +109 +115 +115 +116 +119 +119 +126 +126 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +170 +173 +173 +175 +175 +175 +179 +179 +182 +183 +183 +184 +184 +188 +189 +189 +191 +191 +195 +194 +194 +196 +196 +198 +198 +198 +200 +200 +200 +201 +202 +202 +202 +204 +204 +204 +204 +205 +206 +207 +207 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +204 +204 +205 +204 +203 +203 +203 +201 +200 +200 +200 +200 +199 +198 +197 +196 +196 +195 +195 +191 +191 +190 +188 +189 +185 +185 +185 +183 +183 +179 +179 +175 +175 +175 +172 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +144 +141 +139 +139 +134 +133 +129 +130 +129 +125 +125 +119 +119 +120 +115 +115 +116 +116 +110 +110 +106 +106 +106 +106 +105 +100 +100 +98 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +73 +68 +68 +68 +64 +64 +58 +59 +59 +55 +54 +51 +51 +46 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +32 +31 +31 +27 +27 +27 +25 +25 +22 +21 +21 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +13 +14 +14 +13 +14 +14 +13 +13 +13 +14 +13 +14 +14 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +18 +19 +21 +21 +25 +24 +26 +27 +27 +31 +31 +34 +33 +33 +37 +37 +41 +41 +41 +43 +43 +43 +43 +43 +46 +47 +51 +51 +50 +54 +55 +59 +58 +59 +64 +64 +68 +68 +73 +72 +72 +76 +76 +82 +82 +82 +86 +86 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +110 +110 +110 +115 +116 +119 +120 +119 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +144 +143 +147 +147 +148 +151 +151 +157 +157 +160 +161 +162 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +182 +185 +184 +188 +189 +189 +190 +191 +194 +195 +197 +196 +196 +198 +198 +200 +200 +200 +200 +200 +202 +202 +202 +204 +204 +204 +204 +204 +206 +207 +206 +206 +207 +206 +207 +206 +206 +207 +206 +207 +207 +206 +205 +204 +204 +204 +204 +202 +202 +202 +200 +200 +200 +200 +200 +198 +199 +197 +196 +197 +195 +194 +191 +190 +188 +188 +188 +185 +185 +182 +183 +183 +179 +178 +178 +178 +179 +175 +175 +173 +173 +173 +169 +170 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +139 +139 +139 +133 +133 +129 +129 +129 +126 +125 +120 +119 +118 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +64 +64 +64 +58 +58 +55 +54 +55 +51 +50 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +27 +27 +27 +25 +26 +25 +21 +21 +19 +19 +19 +17 +17 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +13 +13 +14 +13 +13 +14 +14 +13 +14 +13 +13 +13 +14 +14 +14 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +15 +15 +17 +17 +20 +19 +19 +21 +21 +25 +25 +25 +27 +27 +27 +27 +27 +31 +31 +32 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +46 +50 +51 +50 +54 +54 +58 +57 +58 +64 +64 +64 +64 +64 +68 +68 +72 +73 +72 +76 +76 +82 +82 +84 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +115 +119 +119 +125 +125 +126 +129 +129 +133 +133 +139 +140 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +172 +173 +175 +175 +179 +178 +182 +182 +183 +184 +184 +188 +189 +189 +191 +191 +194 +195 +194 +197 +197 +198 +199 +198 +200 +200 +200 +200 +201 +202 +203 +204 +204 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +205 +203 +202 +201 +200 +201 +200 +200 +198 +198 +197 +196 +196 +194 +194 +194 +195 +194 +191 +190 +188 +189 +189 +185 +185 +183 +183 +181 +179 +179 +175 +175 +172 +173 +172 +169 +169 +165 +165 +165 +161 +161 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +140 +139 +139 +133 +133 +129 +129 +129 +126 +125 +119 +119 +120 +115 +115 +110 +109 +109 +106 +106 +100 +100 +100 +96 +96 +90 +90 +86 +86 +86 +82 +83 +82 +82 +82 +76 +76 +73 +72 +72 +68 +69 +64 +64 +64 +58 +58 +54 +55 +55 +51 +51 +47 +46 +43 +43 +43 +41 +40 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +24 +25 +25 +21 +21 +19 +19 +20 +17 +17 +15 +15 +16 +15 +15 +13 +13 +12 +13 +14 +14 +13 +14 +14 +14 +14 +14 +13 +13 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +14 +14 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +42 +43 +47 +47 +46 +47 +47 +51 +51 +54 +54 +54 +58 +58 +64 +64 +68 +68 +68 +72 +72 +72 +72 +72 +75 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +109 +115 +115 +116 +119 +119 +126 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +152 +157 +157 +161 +161 +164 +165 +165 +169 +169 +173 +173 +173 +174 +175 +178 +178 +179 +183 +182 +185 +185 +185 +189 +188 +190 +190 +191 +195 +195 +196 +196 +199 +198 +199 +200 +200 +200 +201 +200 +203 +202 +205 +204 +204 +204 +204 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +207 +207 +206 +206 +204 +204 +204 +204 +204 +203 +203 +200 +200 +200 +200 +200 +198 +198 +198 +196 +197 +195 +194 +192 +191 +191 +189 +188 +184 +185 +185 +182 +182 +178 +178 +178 +175 +175 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +162 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +134 +134 +129 +129 +129 +125 +125 +119 +119 +120 +115 +115 +109 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +65 +64 +59 +59 +55 +55 +54 +51 +51 +47 +47 +47 +43 +43 +41 +40 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +20 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +14 +13 +14 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +13 +13 +13 +13 +14 +14 +14 +14 +14 +14 +14 +13 +14 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +26 +27 +27 +31 +31 +31 +33 +33 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +50 +50 +50 +54 +55 +59 +58 +58 +65 +65 +68 +68 +68 +72 +72 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +99 +100 +100 +106 +105 +110 +110 +109 +115 +116 +120 +119 +120 +125 +125 +129 +129 +129 +133 +134 +139 +139 +139 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +178 +178 +183 +183 +182 +184 +185 +188 +189 +190 +190 +190 +194 +195 +196 +197 +197 +199 +198 +201 +201 +200 +201 +200 +202 +202 +202 +205 +205 +204 +204 +205 +206 +206 +207 +206 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +205 +204 +204 +204 +204 +203 +203 +203 +200 +201 +200 +200 +200 +199 +198 +196 +197 +195 +194 +195 +190 +191 +188 +188 +188 +185 +184 +184 +184 +185 +183 +183 +179 +179 +179 +175 +175 +173 +172 +174 +169 +169 +165 +165 +161 +161 +161 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +130 +130 +129 +125 +125 +119 +119 +115 +116 +116 +109 +110 +106 +107 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +65 +65 +64 +58 +59 +54 +55 +55 +50 +50 +46 +46 +47 +43 +43 +41 +41 +40 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +13 +14 +14 +13 +14 +13 +14 +14 +14 +13 +13 +14 +13 +13 +14 +14 +14 +14 +13 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +50 +51 +55 +54 +59 +59 +58 +64 +64 +68 +68 +68 +72 +73 +76 +76 +77 +82 +82 +86 +86 +91 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +109 +110 +115 +115 +120 +119 +120 +125 +125 +129 +130 +130 +133 +133 +139 +139 +144 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +160 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +178 +178 +183 +183 +183 +182 +182 +185 +184 +188 +189 +188 +191 +190 +194 +194 +194 +196 +196 +198 +198 +198 +200 +200 +200 +201 +200 +202 +202 +204 +204 +204 +205 +204 +206 +207 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +205 +205 +205 +205 +202 +202 +200 +200 +200 +201 +201 +199 +199 +197 +196 +197 +194 +194 +195 +195 +194 +191 +190 +189 +188 +188 +184 +184 +182 +183 +181 +179 +179 +175 +175 +172 +173 +174 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +125 +119 +119 +115 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +82 +82 +82 +76 +77 +72 +72 +72 +69 +68 +64 +64 +64 +59 +58 +54 +54 +55 +51 +51 +47 +47 +47 +43 +43 +41 +41 +38 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +16 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +14 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +32 +33 +32 +37 +37 +40 +41 +41 +43 +43 +47 +47 +47 +51 +51 +54 +54 +54 +59 +58 +64 +64 +65 +69 +68 +72 +72 +76 +76 +76 +82 +83 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +105 +106 +109 +110 +115 +116 +115 +119 +120 +125 +125 +129 +130 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +175 +174 +175 +179 +179 +182 +183 +183 +184 +184 +184 +184 +185 +189 +189 +190 +190 +191 +194 +195 +197 +197 +196 +198 +198 +200 +200 +200 +200 +200 +203 +202 +204 +205 +205 +204 +204 +204 +204 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +207 +206 +207 +206 +206 +204 +205 +204 +205 +205 +204 +204 +204 +202 +202 +202 +202 +203 +201 +200 +200 +200 +201 +199 +198 +196 +197 +195 +194 +195 +190 +191 +188 +188 +189 +185 +185 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +140 +133 +133 +129 +130 +129 +125 +126 +119 +120 +119 +115 +115 +110 +109 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +83 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +58 +55 +55 +54 +50 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +13 +14 +14 +14 +13 +14 +14 +13 +13 +14 +14 +13 +14 +13 +14 +14 +14 +14 +13 +13 +14 +14 +13 +13 +13 +13 +14 +13 +15 +15 +17 +17 +17 +18 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +42 +47 +47 +50 +51 +50 +55 +55 +58 +58 +59 +64 +65 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +101 +100 +100 +106 +106 +110 +110 +110 +115 +115 +119 +119 +119 +125 +125 +129 +129 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +182 +184 +184 +188 +189 +189 +190 +191 +194 +194 +194 +196 +196 +198 +198 +198 +200 +200 +200 +201 +200 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +207 +206 +205 +204 +205 +204 +204 +202 +202 +201 +200 +201 +201 +201 +198 +199 +198 +197 +196 +194 +194 +194 +190 +191 +188 +188 +188 +184 +185 +183 +183 +183 +179 +179 +175 +174 +173 +173 +173 +169 +168 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +134 +133 +130 +129 +126 +125 +125 +120 +119 +115 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +73 +72 +72 +69 +68 +68 +68 +68 +64 +64 +58 +58 +59 +55 +55 +50 +50 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +33 +33 +33 +30 +31 +27 +27 +27 +25 +25 +25 +25 +25 +22 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +13 +12 +13 +13 +13 +13 +13 +14 +14 +13 +14 +14 +14 +13 +14 +13 +14 +14 +14 +14 +13 +13 +14 +13 +14 +14 +14 +14 +14 +14 +13 +13 +15 +15 +15 +16 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +50 +55 +54 +55 +59 +58 +65 +64 +64 +69 +68 +72 +72 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +95 +96 +100 +100 +106 +106 +106 +109 +110 +116 +116 +116 +120 +119 +126 +125 +130 +130 +129 +133 +133 +139 +139 +139 +143 +143 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +162 +165 +165 +169 +169 +172 +173 +173 +175 +175 +179 +178 +179 +182 +183 +183 +182 +183 +185 +185 +188 +188 +189 +191 +190 +195 +194 +195 +196 +197 +198 +198 +200 +200 +200 +200 +200 +202 +202 +203 +204 +205 +204 +204 +204 +204 +204 +207 +206 +207 +206 +206 +206 +206 +207 +206 +207 +206 +207 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +201 +200 +200 +200 +200 +198 +198 +199 +197 +196 +194 +194 +191 +191 +190 +189 +189 +184 +185 +184 +183 +182 +178 +178 +178 +174 +175 +174 +173 +173 +169 +169 +164 +165 +165 +161 +161 +157 +157 +152 +151 +151 +147 +147 +143 +143 +143 +139 +139 +134 +134 +134 +130 +129 +125 +125 +125 +120 +119 +115 +116 +116 +110 +110 +106 +106 +100 +100 +100 +96 +95 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +68 +68 +64 +64 +65 +59 +59 +54 +54 +50 +51 +50 +47 +47 +43 +43 +43 +41 +41 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +26 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +15 +15 +16 +13 +13 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +13 +14 +14 +14 +14 +13 +13 +13 +14 +14 +14 +14 +14 +14 +13 +14 +13 +13 +13 +13 +15 +15 +17 +17 +19 +19 +18 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +46 +47 +50 +51 +54 +54 +55 +58 +58 +64 +64 +64 +69 +69 +72 +72 +72 +76 +76 +82 +82 +82 +87 +86 +90 +90 +90 +95 +96 +100 +100 +106 +105 +105 +110 +110 +116 +116 +116 +119 +119 +126 +125 +125 +129 +130 +133 +133 +133 +139 +139 +143 +143 +145 +147 +147 +151 +151 +158 +157 +157 +161 +161 +165 +165 +164 +169 +169 +173 +173 +173 +175 +174 +179 +179 +178 +183 +183 +185 +184 +186 +189 +189 +191 +190 +194 +194 +194 +196 +196 +199 +199 +198 +200 +200 +200 +200 +200 +200 +200 +202 +202 +203 +204 +204 +204 +204 +205 +206 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +204 +205 +205 +204 +204 +202 +202 +202 +200 +201 +201 +201 +198 +198 +199 +196 +196 +195 +194 +195 +190 +190 +189 +189 +188 +184 +185 +182 +183 +183 +179 +178 +175 +175 +174 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +156 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +134 +133 +129 +129 +129 +125 +126 +119 +120 +116 +115 +116 +110 +109 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +77 +76 +72 +72 +68 +68 +64 +64 +64 +58 +58 +54 +55 +55 +50 +50 +51 +51 +51 +47 +47 +42 +42 +43 +41 +41 +37 +37 +35 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +14 +13 +13 +14 +14 +13 +14 +13 +14 +13 +14 +14 +14 +13 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +22 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +43 +43 +43 +46 +47 +51 +51 +51 +54 +54 +59 +58 +58 +65 +65 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +106 +106 +106 +109 +110 +116 +116 +115 +119 +120 +125 +125 +126 +129 +129 +133 +134 +140 +139 +139 +143 +143 +147 +146 +147 +151 +151 +157 +158 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +182 +182 +183 +184 +184 +189 +188 +188 +191 +191 +190 +190 +191 +194 +194 +197 +196 +196 +198 +199 +200 +200 +200 +200 +201 +202 +202 +202 +202 +202 +204 +204 +205 +204 +204 +207 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +204 +204 +204 +204 +204 +202 +202 +202 +201 +200 +200 +200 +200 +198 +199 +196 +196 +196 +195 +195 +190 +191 +191 +188 +188 +184 +185 +183 +183 +183 +179 +179 +175 +175 +175 +173 +172 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +140 +140 +139 +133 +133 +129 +129 +129 +125 +125 +119 +119 +120 +115 +115 +110 +110 +110 +106 +106 +99 +100 +101 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +77 +76 +72 +72 +72 +72 +72 +69 +68 +65 +64 +65 +58 +58 +54 +55 +52 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +33 +33 +33 +31 +31 +27 +27 +27 +25 +26 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +15 +15 +15 +13 +13 +12 +12 +13 +14 +13 +13 +13 +14 +14 +13 +14 +13 +14 +14 +14 +14 +13 +13 +14 +13 +13 +13 +13 +14 +14 +13 +14 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +38 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +50 +51 +55 +55 +58 +58 +65 +64 +65 +68 +69 +73 +73 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +99 +101 +106 +106 +110 +110 +116 +116 +116 +120 +120 +125 +125 +126 +129 +129 +129 +129 +129 +134 +133 +140 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +173 +173 +172 +175 +175 +179 +179 +179 +183 +182 +185 +184 +188 +189 +189 +190 +190 +195 +194 +195 +197 +197 +198 +198 +198 +200 +201 +200 +201 +201 +202 +202 +204 +204 +205 +204 +205 +206 +206 +206 +206 +207 +206 +207 +206 +207 +206 +206 +206 +206 +206 +206 +204 +204 +204 +205 +204 +202 +202 +200 +200 +201 +200 +201 +198 +198 +197 +197 +196 +194 +195 +190 +190 +190 +188 +188 +189 +189 +189 +184 +185 +183 +183 +183 +178 +179 +175 +175 +175 +173 +173 +169 +168 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +140 +133 +133 +129 +129 +130 +125 +125 +119 +120 +116 +116 +116 +110 +110 +106 +106 +106 +100 +100 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +79 +77 +76 +73 +73 +68 +69 +68 +65 +64 +58 +58 +58 +55 +54 +54 +55 +54 +51 +50 +47 +46 +47 +43 +43 +41 +41 +39 +37 +37 +33 +33 +31 +31 +30 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +14 +13 +14 +14 +13 +13 +14 +14 +14 +13 +13 +13 +13 +14 +13 +14 +13 +14 +13 +14 +14 +14 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +50 +55 +55 +58 +58 +58 +64 +64 +68 +68 +68 +73 +72 +76 +76 +77 +82 +82 +87 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +105 +106 +106 +110 +110 +116 +116 +116 +119 +119 +126 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +172 +173 +173 +175 +175 +178 +179 +178 +183 +182 +184 +185 +184 +189 +189 +191 +190 +191 +195 +195 +196 +197 +197 +198 +199 +200 +201 +200 +201 +200 +202 +202 +204 +204 +204 +204 +205 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +204 +204 +205 +204 +204 +202 +203 +200 +200 +201 +201 +200 +198 +199 +198 +196 +196 +194 +194 +195 +190 +191 +189 +188 +189 +184 +185 +182 +183 +179 +179 +178 +175 +175 +173 +172 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +148 +143 +143 +140 +139 +134 +133 +133 +129 +129 +125 +125 +125 +119 +119 +120 +120 +119 +116 +115 +110 +110 +110 +106 +105 +100 +100 +98 +96 +96 +90 +90 +86 +86 +86 +81 +82 +76 +76 +76 +72 +72 +72 +72 +73 +68 +69 +64 +65 +65 +59 +58 +55 +54 +51 +51 +50 +47 +46 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +20 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +14 +13 +14 +13 +14 +13 +13 +14 +14 +14 +13 +13 +14 +13 +13 +14 +14 +14 +14 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +32 +31 +31 +33 +33 +37 +36 +37 +41 +41 +43 +42 +43 +47 +47 +51 +50 +51 +55 +54 +59 +58 +59 +64 +64 +69 +68 +73 +72 +72 +76 +76 +82 +82 +82 +86 +86 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +105 +106 +110 +110 +115 +116 +119 +119 +120 +125 +125 +129 +130 +129 +133 +133 +133 +133 +133 +139 +139 +143 +143 +144 +147 +147 +151 +151 +153 +157 +157 +161 +161 +164 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +178 +183 +182 +184 +184 +185 +188 +189 +191 +191 +194 +195 +195 +196 +196 +198 +198 +200 +200 +200 +201 +200 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +207 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +204 +205 +204 +204 +205 +202 +202 +200 +200 +200 +200 +201 +198 +198 +199 +197 +196 +194 +194 +191 +191 +191 +188 +188 +185 +185 +185 +183 +183 +183 +183 +183 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +143 +143 +143 +139 +139 +134 +133 +133 +130 +130 +125 +125 +123 +120 +119 +115 +116 +110 +109 +110 +106 +105 +100 +100 +99 +96 +95 +96 +96 +96 +90 +89 +86 +86 +86 +82 +82 +76 +76 +75 +72 +72 +68 +69 +64 +64 +64 +58 +58 +55 +55 +55 +50 +51 +46 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +31 +31 +31 +27 +27 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +14 +14 +14 +13 +14 +13 +14 +13 +14 +14 +14 +14 +13 +13 +13 +14 +14 +14 +14 +13 +13 +13 +13 +13 +16 +15 +15 +17 +17 +19 +19 +20 +21 +21 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +43 +43 +42 +46 +47 +51 +51 +51 +55 +55 +55 +55 +55 +59 +58 +65 +64 +65 +68 +68 +72 +72 +73 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +100 +100 +100 +106 +106 +109 +109 +110 +115 +116 +120 +120 +125 +125 +126 +129 +129 +133 +134 +133 +139 +139 +143 +143 +143 +147 +146 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +172 +173 +172 +174 +175 +179 +179 +179 +182 +182 +185 +184 +185 +188 +188 +191 +191 +190 +194 +195 +197 +197 +196 +199 +199 +201 +200 +201 +200 +200 +202 +202 +204 +204 +204 +204 +204 +207 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +207 +206 +204 +204 +205 +204 +204 +202 +202 +200 +201 +200 +201 +201 +201 +201 +200 +198 +198 +196 +196 +196 +194 +195 +191 +191 +191 +188 +189 +185 +184 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +173 +172 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +154 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +129 +129 +129 +125 +125 +120 +120 +120 +115 +116 +110 +110 +108 +105 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +72 +72 +68 +68 +69 +65 +65 +59 +58 +55 +55 +55 +51 +50 +47 +47 +47 +43 +43 +41 +41 +41 +36 +37 +32 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +16 +15 +13 +13 +13 +12 +13 +14 +13 +14 +14 +14 +14 +14 +14 +14 +13 +14 +13 +14 +14 +13 +14 +13 +14 +13 +14 +14 +14 +13 +13 +13 +13 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +30 +33 +33 +33 +33 +33 +37 +37 +40 +41 +41 +43 +42 +47 +47 +48 +51 +51 +54 +54 +58 +59 +59 +64 +64 +68 +68 +69 +72 +72 +72 +73 +73 +76 +76 +82 +82 +82 +86 +86 +90 +90 +92 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +116 +120 +120 +126 +126 +125 +130 +130 +134 +134 +133 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +172 +173 +175 +175 +178 +178 +179 +183 +183 +184 +184 +189 +188 +189 +191 +190 +194 +194 +194 +196 +196 +198 +198 +198 +201 +201 +200 +200 +200 +202 +202 +204 +204 +205 +204 +205 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +206 +204 +204 +204 +204 +204 +202 +202 +201 +200 +201 +201 +201 +198 +199 +197 +197 +197 +195 +195 +191 +190 +190 +189 +189 +185 +185 +185 +183 +182 +179 +179 +179 +175 +175 +173 +173 +171 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +147 +147 +147 +143 +143 +139 +139 +140 +133 +133 +129 +129 +126 +126 +126 +119 +120 +116 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +73 +72 +72 +68 +68 +64 +64 +65 +58 +58 +55 +55 +55 +51 +51 +47 +47 +47 +43 +42 +41 +41 +40 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +13 +14 +14 +14 +13 +13 +14 +14 +14 +14 +14 +13 +13 +13 +15 +15 +18 +17 +17 +19 +19 +21 +21 +22 +25 +25 +25 +25 +25 +27 +27 +31 +31 +31 +33 +32 +37 +37 +37 +41 +41 +43 +43 +47 +46 +46 +50 +50 +54 +54 +55 +58 +58 +58 +58 +59 +64 +64 +68 +68 +68 +72 +72 +77 +76 +78 +82 +82 +86 +86 +90 +90 +90 +96 +96 +96 +96 +96 +100 +100 +106 +106 +106 +110 +109 +115 +115 +116 +119 +120 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +144 +147 +147 +147 +151 +151 +157 +157 +157 +160 +161 +165 +165 +165 +169 +169 +173 +172 +175 +175 +175 +178 +179 +182 +183 +182 +184 +184 +188 +188 +188 +191 +190 +195 +194 +194 +196 +197 +199 +198 +199 +200 +200 +200 +200 +203 +202 +202 +204 +204 +204 +204 +205 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +206 +204 +204 +204 +204 +204 +202 +202 +200 +201 +200 +200 +200 +201 +200 +200 +198 +199 +196 +196 +197 +194 +194 +191 +190 +191 +189 +188 +184 +184 +182 +182 +183 +179 +179 +175 +175 +174 +173 +173 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +152 +151 +151 +147 +147 +143 +143 +143 +139 +140 +133 +133 +133 +129 +130 +126 +125 +126 +120 +120 +116 +115 +116 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +69 +68 +64 +64 +64 +58 +58 +55 +54 +51 +51 +51 +47 +47 +43 +43 +43 +41 +40 +41 +41 +41 +37 +36 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +20 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +13 +13 +14 +14 +14 +14 +14 +13 +13 +14 +14 +14 +14 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +13 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +26 +25 +25 +27 +27 +31 +31 +31 +33 +33 +33 +33 +33 +37 +37 +41 +41 +41 +42 +43 +47 +47 +47 +51 +50 +55 +55 +58 +58 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +100 +100 +100 +106 +105 +110 +110 +110 +116 +116 +119 +120 +120 +125 +126 +130 +130 +129 +133 +134 +139 +139 +139 +143 +143 +147 +147 +150 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +178 +183 +183 +183 +185 +185 +188 +189 +191 +191 +191 +194 +194 +196 +197 +196 +198 +199 +201 +200 +200 +200 +200 +202 +202 +202 +204 +204 +204 +204 +205 +206 +206 +207 +207 +207 +207 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +200 +200 +201 +200 +201 +198 +198 +197 +197 +196 +195 +195 +191 +191 +191 +189 +189 +188 +189 +188 +185 +184 +182 +183 +182 +179 +179 +174 +174 +173 +173 +173 +169 +168 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +148 +147 +147 +143 +143 +139 +139 +140 +133 +133 +129 +130 +126 +125 +125 +119 +120 +116 +116 +116 +110 +110 +105 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +87 +82 +82 +76 +76 +73 +73 +72 +68 +68 +64 +65 +64 +58 +59 +55 +55 +55 +51 +50 +46 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +32 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +14 +13 +14 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +14 +14 +14 +14 +13 +14 +13 +13 +13 +13 +15 +15 +16 +17 +17 +19 +19 +19 +21 +21 +21 +22 +21 +25 +25 +27 +27 +27 +31 +30 +33 +33 +36 +36 +36 +41 +41 +42 +43 +43 +47 +47 +50 +51 +51 +55 +54 +59 +59 +59 +64 +64 +69 +69 +69 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +116 +120 +120 +120 +125 +125 +130 +130 +133 +133 +134 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +178 +179 +179 +183 +182 +184 +185 +184 +188 +188 +191 +190 +190 +195 +194 +197 +196 +197 +199 +198 +200 +201 +200 +201 +201 +203 +202 +204 +205 +204 +204 +204 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +205 +204 +204 +204 +202 +203 +202 +201 +200 +200 +200 +200 +198 +198 +199 +198 +198 +197 +197 +194 +194 +195 +190 +191 +189 +188 +185 +184 +185 +183 +182 +178 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +126 +125 +119 +120 +116 +116 +116 +110 +110 +106 +106 +105 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +69 +65 +64 +64 +58 +58 +55 +54 +55 +50 +51 +46 +47 +44 +43 +43 +41 +40 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +20 +17 +17 +15 +15 +16 +15 +15 +13 +13 +12 +13 +13 +13 +13 +14 +14 +14 +14 +14 +13 +14 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +14 +13 +14 +14 +13 +13 +14 +14 +14 +12 +15 +15 +15 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +26 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +40 +43 +43 +43 +47 +47 +50 +51 +51 +54 +54 +58 +64 +64 +65 +64 +68 +68 +72 +72 +73 +77 +76 +82 +82 +82 +87 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +116 +115 +115 +119 +119 +125 +125 +125 +129 +130 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +172 +173 +175 +175 +179 +178 +179 +183 +183 +185 +184 +184 +188 +189 +190 +190 +191 +195 +195 +196 +196 +198 +198 +199 +201 +200 +200 +200 +200 +203 +203 +203 +202 +202 +205 +204 +204 +205 +204 +207 +207 +206 +207 +207 +207 +207 +206 +207 +206 +206 +206 +207 +206 +204 +204 +204 +204 +204 +204 +204 +205 +202 +202 +201 +200 +201 +200 +200 +198 +199 +197 +196 +197 +194 +195 +190 +191 +190 +188 +188 +188 +189 +188 +185 +185 +183 +182 +183 +178 +179 +175 +174 +175 +173 +173 +169 +169 +165 +165 +166 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +120 +120 +116 +115 +115 +110 +110 +106 +105 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +73 +68 +68 +65 +65 +64 +59 +58 +54 +55 +55 +51 +50 +46 +47 +47 +43 +43 +41 +40 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +26 +25 +25 +21 +21 +19 +19 +19 +17 +17 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +13 +14 +13 +14 +13 +14 +13 +13 +14 +13 +14 +13 +13 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +50 +51 +54 +55 +58 +58 +59 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +116 +119 +119 +119 +125 +125 +129 +130 +130 +133 +133 +139 +139 +144 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +176 +178 +179 +183 +182 +184 +185 +185 +188 +188 +191 +190 +190 +194 +194 +197 +196 +196 +199 +198 +200 +200 +200 +200 +200 +202 +204 +203 +204 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +200 +200 +200 +200 +200 +198 +198 +196 +196 +197 +195 +195 +191 +191 +190 +189 +188 +185 +184 +185 +183 +183 +178 +179 +175 +175 +174 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +129 +129 +130 +125 +125 +120 +120 +119 +115 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +91 +86 +86 +81 +82 +77 +76 +76 +72 +72 +68 +68 +69 +65 +65 +59 +59 +58 +54 +55 +51 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +34 +33 +33 +31 +31 +27 +27 +27 +25 +25 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +13 +14 +14 +14 +14 +13 +14 +14 +13 +14 +14 +13 +13 +13 +13 +14 +14 +14 +13 +14 +13 +14 +13 +13 +13 +14 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +46 +47 +50 +51 +54 +55 +55 +59 +59 +65 +64 +64 +68 +68 +72 +72 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +116 +116 +119 +120 +126 +125 +130 +130 +129 +134 +133 +139 +139 +139 +142 +143 +147 +147 +147 +152 +151 +157 +157 +157 +160 +161 +165 +165 +165 +169 +169 +173 +173 +175 +175 +175 +178 +179 +182 +183 +183 +184 +184 +184 +185 +184 +188 +188 +190 +190 +190 +194 +194 +196 +197 +197 +198 +198 +200 +201 +200 +200 +200 +202 +202 +204 +204 +205 +204 +204 +205 +204 +204 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +204 +205 +204 +205 +204 +202 +203 +202 +200 +201 +201 +200 +201 +199 +198 +196 +196 +197 +195 +195 +190 +191 +188 +189 +188 +185 +184 +183 +182 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +120 +119 +115 +115 +110 +109 +110 +105 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +82 +82 +82 +76 +77 +72 +72 +72 +68 +68 +64 +65 +65 +59 +58 +54 +54 +51 +50 +50 +47 +47 +43 +43 +43 +41 +41 +41 +41 +41 +37 +36 +32 +32 +33 +31 +31 +27 +26 +27 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +14 +13 +14 +13 +13 +13 +13 +14 +14 +13 +14 +14 +13 +13 +13 +13 +13 +14 +14 +13 +14 +13 +13 +13 +12 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +36 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +51 +55 +55 +54 +59 +58 +64 +64 +64 +68 +68 +73 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +99 +100 +106 +106 +106 +110 +110 +116 +116 +115 +119 +120 +126 +125 +125 +129 +130 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +169 +169 +169 +173 +173 +175 +175 +175 +179 +178 +182 +182 +183 +184 +185 +188 +188 +190 +190 +191 +194 +194 +196 +196 +196 +199 +198 +199 +198 +198 +201 +200 +200 +200 +200 +202 +202 +204 +204 +204 +204 +205 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +207 +206 +207 +204 +204 +204 +204 +205 +202 +203 +200 +201 +200 +200 +200 +198 +199 +196 +196 +196 +194 +194 +190 +191 +190 +188 +189 +184 +185 +185 +183 +183 +179 +178 +178 +174 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +140 +139 +133 +134 +133 +129 +130 +125 +125 +120 +119 +120 +116 +116 +110 +110 +110 +106 +105 +100 +100 +100 +96 +95 +90 +90 +90 +86 +86 +82 +82 +83 +76 +76 +72 +72 +68 +68 +68 +64 +64 +59 +58 +58 +54 +55 +55 +54 +55 +51 +50 +47 +47 +47 +43 +42 +41 +41 +41 +37 +36 +33 +33 +32 +31 +31 +27 +27 +25 +25 +25 +21 +21 +21 +21 +21 +20 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +13 +14 +14 +14 +14 +13 +14 +14 +13 +14 +13 +14 +13 +13 +14 +14 +13 +13 +14 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +32 +37 +36 +42 +41 +41 +43 +43 +47 +47 +47 +51 +51 +55 +55 +55 +58 +58 +64 +64 +65 +68 +68 +72 +72 +72 +76 +76 +82 +83 +87 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +115 +120 +119 +125 +125 +126 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +182 +183 +183 +185 +184 +188 +188 +188 +190 +190 +191 +190 +191 +195 +195 +196 +197 +196 +198 +198 +200 +200 +200 +200 +200 +203 +202 +204 +204 +205 +204 +204 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +207 +206 +207 +204 +204 +204 +204 +204 +203 +202 +200 +200 +200 +200 +200 +198 +198 +198 +196 +196 +195 +194 +194 +190 +190 +188 +189 +189 +185 +185 +183 +183 +178 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +164 +161 +161 +157 +157 +157 +151 +151 +147 +147 +148 +143 +143 +139 +139 +134 +134 +133 +129 +129 +126 +126 +126 +120 +120 +116 +115 +115 +110 +110 +106 +105 +106 +100 +100 +96 +95 +96 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +65 +64 +59 +59 +54 +54 +54 +50 +51 +47 +47 +45 +43 +43 +41 +41 +37 +37 +36 +33 +33 +31 +31 +31 +27 +27 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +13 +14 +14 +13 +13 +14 +13 +13 +13 +14 +14 +13 +13 +14 +14 +14 +13 +13 +13 +13 +14 +13 +14 +14 +12 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +26 +30 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +51 +55 +55 +55 +58 +58 +64 +64 +64 +68 +68 +72 +72 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +99 +100 +106 +106 +106 +110 +109 +115 +115 +116 +119 +120 +125 +125 +129 +130 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +164 +166 +169 +169 +173 +173 +174 +175 +175 +179 +179 +183 +182 +183 +184 +184 +184 +184 +184 +188 +188 +190 +190 +191 +194 +195 +196 +196 +198 +198 +199 +200 +200 +200 +200 +201 +202 +202 +204 +204 +204 +204 +205 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +203 +200 +200 +200 +200 +201 +198 +198 +198 +197 +197 +194 +195 +194 +191 +191 +188 +188 +185 +184 +185 +183 +183 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +166 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +129 +130 +129 +125 +125 +119 +120 +119 +116 +115 +110 +110 +110 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +82 +82 +82 +76 +76 +72 +73 +72 +68 +68 +64 +64 +62 +58 +58 +55 +55 +50 +50 +51 +47 +46 +42 +43 +43 +41 +41 +40 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +14 +13 +13 +14 +13 +14 +14 +13 +13 +13 +14 +14 +14 +13 +14 +13 +13 +13 +13 +14 +14 +13 +13 +14 +14 +12 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +50 +55 +54 +58 +59 +58 +64 +64 +68 +69 +68 +72 +72 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +105 +106 +110 +110 +110 +116 +116 +119 +120 +120 +125 +125 +129 +129 +130 +133 +133 +139 +140 +139 +143 +143 +147 +147 +148 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +173 +173 +173 +175 +175 +179 +179 +179 +183 +182 +185 +185 +188 +188 +188 +190 +191 +194 +195 +194 +196 +196 +198 +199 +199 +200 +200 +200 +200 +200 +202 +202 +204 +204 +205 +205 +205 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +200 +200 +200 +201 +201 +199 +198 +197 +196 +197 +194 +194 +191 +191 +190 +189 +188 +184 +184 +185 +182 +183 +179 +178 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +147 +147 +147 +143 +143 +140 +139 +139 +133 +133 +129 +129 +130 +125 +125 +120 +119 +115 +116 +115 +110 +109 +106 +106 +106 +100 +99 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +79 +76 +76 +72 +72 +68 +68 +68 +65 +64 +58 +58 +59 +54 +55 +55 +54 +55 +51 +51 +47 +46 +47 +43 +42 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +14 +13 +13 +12 +13 +13 +14 +13 +14 +14 +14 +14 +14 +14 +14 +13 +13 +14 +13 +14 +14 +14 +13 +13 +14 +13 +14 +14 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +41 +41 +41 +43 +43 +43 +47 +47 +51 +50 +50 +54 +55 +54 +54 +55 +59 +59 +64 +65 +65 +68 +68 +72 +72 +73 +76 +76 +82 +82 +87 +86 +85 +90 +90 +96 +96 +96 +100 +100 +100 +100 +100 +106 +106 +110 +110 +109 +115 +115 +119 +119 +120 +125 +126 +130 +129 +133 +133 +133 +139 +139 +143 +143 +143 +148 +147 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +167 +169 +169 +173 +173 +175 +175 +176 +178 +179 +183 +182 +182 +185 +185 +188 +188 +188 +190 +190 +194 +195 +195 +196 +197 +198 +199 +200 +201 +200 +200 +201 +202 +202 +202 +205 +204 +204 +204 +204 +206 +207 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +204 +205 +204 +204 +204 +202 +202 +202 +200 +200 +201 +200 +201 +199 +198 +196 +196 +196 +195 +195 +190 +191 +191 +189 +189 +184 +185 +183 +183 +182 +178 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +152 +147 +147 +143 +143 +139 +139 +139 +134 +133 +129 +129 +130 +125 +125 +119 +119 +119 +116 +116 +110 +110 +110 +106 +106 +100 +100 +98 +96 +95 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +72 +72 +72 +68 +68 +64 +65 +65 +58 +58 +54 +55 +51 +50 +50 +46 +46 +42 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +14 +13 +14 +14 +14 +14 +13 +14 +13 +13 +13 +14 +13 +13 +14 +14 +13 +14 +14 +13 +13 +14 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +22 +25 +25 +27 +27 +32 +31 +31 +33 +33 +37 +36 +37 +41 +41 +43 +43 +43 +47 +46 +50 +51 +51 +54 +55 +58 +58 +59 +64 +64 +68 +68 +73 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +97 +96 +100 +100 +100 +106 +106 +110 +110 +112 +115 +116 +120 +119 +125 +125 +125 +130 +133 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +152 +157 +157 +161 +161 +163 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +178 +183 +183 +184 +185 +185 +189 +189 +190 +190 +191 +194 +195 +197 +196 +198 +199 +199 +200 +200 +201 +201 +201 +202 +203 +204 +204 +204 +204 +204 +206 +207 +206 +207 +206 +207 +207 +206 +206 +206 +206 +206 +206 +205 +207 +204 +205 +205 +204 +204 +203 +202 +200 +200 +200 +200 +201 +199 +199 +198 +196 +196 +194 +194 +194 +190 +191 +189 +189 +185 +185 +185 +183 +183 +179 +178 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +158 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +134 +133 +130 +130 +130 +129 +129 +125 +126 +119 +119 +120 +115 +115 +109 +110 +108 +106 +106 +100 +100 +96 +96 +95 +90 +90 +86 +86 +86 +82 +82 +82 +82 +82 +76 +76 +72 +73 +73 +68 +68 +65 +64 +59 +58 +59 +55 +55 +50 +50 +51 +47 +47 +42 +43 +43 +41 +41 +37 +36 +37 +33 +33 +31 +31 +31 +27 +26 +25 +25 +22 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +14 +14 +14 +13 +14 +13 +14 +14 +14 +13 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +14 +14 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +50 +51 +54 +54 +59 +59 +64 +64 +64 +68 +68 +72 +72 +72 +76 +77 +76 +76 +77 +82 +82 +86 +86 +86 +90 +90 +96 +96 +97 +100 +100 +106 +106 +110 +109 +109 +115 +115 +119 +119 +119 +125 +126 +125 +125 +126 +129 +129 +133 +134 +133 +139 +139 +143 +143 +147 +147 +147 +151 +150 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +179 +182 +183 +185 +185 +188 +188 +189 +191 +190 +194 +194 +194 +197 +197 +198 +199 +198 +200 +200 +201 +200 +202 +202 +204 +204 +204 +204 +205 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +205 +204 +205 +204 +204 +202 +202 +200 +200 +201 +200 +201 +198 +199 +197 +196 +196 +194 +194 +190 +190 +190 +188 +189 +185 +185 +185 +183 +183 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +164 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +130 +126 +126 +119 +120 +116 +115 +115 +110 +110 +106 +106 +106 +100 +100 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +83 +76 +76 +72 +72 +69 +68 +68 +64 +65 +59 +59 +59 +54 +54 +51 +51 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +14 +14 +13 +14 +14 +13 +14 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +14 +14 +14 +13 +13 +13 +13 +13 +16 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +47 +47 +47 +51 +51 +55 +54 +54 +58 +58 +58 +58 +58 +64 +64 +68 +69 +68 +72 +72 +76 +76 +78 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +106 +106 +106 +110 +110 +115 +115 +116 +120 +119 +126 +125 +127 +130 +129 +133 +133 +139 +139 +139 +143 +144 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +175 +175 +174 +179 +179 +183 +183 +183 +185 +185 +189 +188 +188 +191 +190 +194 +195 +195 +196 +196 +199 +198 +199 +201 +200 +201 +200 +202 +202 +203 +205 +204 +204 +205 +205 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +204 +204 +205 +204 +202 +202 +202 +201 +200 +200 +201 +200 +198 +198 +196 +197 +196 +194 +195 +191 +190 +191 +188 +188 +185 +185 +185 +182 +182 +179 +179 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +169 +169 +169 +164 +165 +161 +161 +161 +157 +157 +151 +151 +152 +147 +147 +143 +143 +140 +139 +139 +133 +133 +130 +129 +129 +125 +125 +125 +125 +125 +119 +120 +116 +115 +115 +110 +110 +106 +106 +107 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +77 +72 +73 +72 +69 +68 +64 +64 +65 +58 +58 +55 +54 +50 +50 +50 +47 +47 +43 +42 +42 +41 +40 +37 +36 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +26 +21 +21 +19 +19 +17 +17 +17 +15 +15 +14 +15 +15 +13 +13 +12 +13 +13 +14 +13 +13 +13 +14 +14 +14 +14 +14 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +14 +14 +13 +14 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +22 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +41 +41 +41 +43 +43 +47 +47 +46 +51 +50 +55 +55 +56 +58 +58 +64 +64 +68 +69 +68 +72 +72 +72 +72 +72 +76 +77 +76 +77 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +100 +100 +100 +106 +105 +110 +110 +110 +115 +115 +119 +120 +120 +125 +126 +129 +129 +129 +133 +134 +139 +139 +140 +143 +143 +147 +147 +151 +151 +151 +157 +157 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +178 +182 +183 +184 +184 +189 +188 +188 +191 +191 +194 +194 +194 +196 +196 +198 +198 +198 +200 +201 +201 +201 +200 +203 +203 +204 +205 +204 +205 +204 +206 +206 +207 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +207 +206 +205 +204 +204 +205 +204 +203 +203 +200 +201 +201 +200 +200 +199 +198 +197 +197 +197 +194 +194 +190 +190 +190 +188 +189 +188 +189 +189 +185 +185 +182 +183 +183 +179 +179 +174 +175 +174 +173 +173 +169 +169 +164 +165 +165 +161 +161 +157 +157 +157 +151 +151 +151 +151 +151 +147 +147 +143 +143 +143 +140 +140 +133 +133 +131 +129 +129 +125 +125 +119 +119 +119 +115 +116 +116 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +89 +86 +86 +82 +82 +82 +77 +76 +72 +72 +72 +68 +68 +65 +64 +64 +59 +59 +55 +54 +55 +51 +50 +47 +47 +47 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +30 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +14 +14 +14 +13 +14 +14 +14 +14 +14 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +14 +13 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +19 +19 +19 +22 +21 +25 +25 +25 +27 +26 +31 +31 +32 +33 +33 +37 +36 +41 +41 +41 +42 +43 +46 +47 +47 +51 +51 +51 +51 +51 +54 +54 +58 +58 +59 +64 +64 +69 +68 +70 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +95 +100 +100 +100 +106 +105 +110 +110 +110 +115 +115 +120 +119 +125 +126 +125 +130 +129 +133 +133 +134 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +173 +173 +172 +175 +174 +178 +179 +179 +182 +182 +185 +184 +184 +188 +189 +191 +191 +191 +195 +194 +196 +196 +197 +198 +199 +200 +200 +200 +200 +200 +202 +202 +204 +204 +204 +205 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +204 +205 +204 +204 +205 +202 +202 +200 +200 +200 +200 +201 +201 +200 +200 +198 +198 +196 +196 +196 +194 +195 +191 +190 +189 +188 +189 +185 +184 +182 +183 +183 +179 +178 +175 +175 +174 +173 +173 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +152 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +134 +129 +130 +125 +125 +125 +120 +120 +116 +116 +116 +110 +110 +106 +106 +100 +100 +99 +96 +96 +90 +90 +90 +86 +86 +82 +82 +83 +76 +76 +72 +73 +72 +68 +68 +64 +64 +64 +59 +58 +55 +54 +50 +50 +50 +47 +46 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +30 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +14 +14 +13 +13 +14 +14 +14 +14 +13 +14 +14 +14 +13 +14 +14 +14 +14 +13 +14 +14 +14 +13 +14 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +18 +20 +21 +21 +25 +25 +28 +27 +27 +31 +31 +33 +33 +33 +37 +37 +37 +37 +37 +41 +41 +43 +42 +43 +47 +47 +51 +51 +52 +54 +54 +58 +58 +65 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +105 +106 +106 +110 +110 +115 +116 +116 +120 +119 +126 +126 +125 +130 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +152 +151 +157 +157 +157 +161 +161 +165 +165 +165 +168 +169 +173 +173 +173 +175 +175 +179 +179 +179 +182 +183 +184 +184 +185 +189 +189 +191 +191 +194 +195 +194 +196 +196 +198 +198 +198 +200 +200 +201 +200 +200 +202 +202 +204 +204 +204 +204 +204 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +204 +205 +205 +204 +204 +205 +204 +202 +202 +202 +200 +200 +200 +200 +199 +198 +198 +197 +196 +194 +194 +194 +190 +190 +189 +189 +188 +185 +185 +185 +184 +184 +183 +183 +178 +179 +179 +175 +174 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +134 +129 +129 +125 +126 +120 +119 +120 +116 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +69 +68 +68 +64 +64 +58 +58 +59 +54 +55 +51 +51 +51 +47 +47 +43 +43 +42 +41 +41 +37 +37 +37 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +14 +13 +14 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +14 +14 +13 +14 +13 +12 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +42 +43 +42 +47 +46 +51 +50 +50 +55 +55 +59 +58 +58 +65 +64 +68 +68 +69 +73 +72 +76 +76 +76 +82 +82 +86 +86 +90 +90 +90 +96 +95 +99 +99 +100 +106 +106 +110 +110 +110 +115 +115 +120 +119 +120 +126 +125 +129 +129 +130 +133 +133 +139 +139 +142 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +174 +179 +179 +183 +182 +184 +185 +185 +188 +188 +190 +191 +191 +194 +194 +197 +197 +196 +198 +198 +200 +200 +200 +200 +201 +202 +202 +203 +205 +204 +204 +204 +207 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +203 +202 +203 +200 +200 +200 +201 +200 +198 +198 +196 +196 +196 +194 +194 +194 +195 +194 +190 +190 +189 +188 +189 +184 +184 +183 +183 +181 +179 +179 +175 +175 +173 +172 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +134 +134 +133 +129 +129 +125 +125 +125 +119 +119 +116 +115 +115 +110 +110 +106 +106 +106 +100 +99 +96 +96 +96 +90 +89 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +68 +68 +69 +68 +68 +65 +65 +58 +58 +59 +55 +54 +50 +51 +50 +47 +47 +43 +43 +42 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +18 +15 +15 +15 +15 +14 +13 +13 +12 +14 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +13 +14 +14 +13 +13 +14 +14 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +12 +15 +15 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +36 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +50 +54 +54 +55 +58 +58 +64 +65 +68 +68 +69 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +89 +96 +96 +96 +100 +100 +106 +105 +106 +109 +109 +116 +116 +120 +119 +120 +125 +125 +125 +125 +125 +129 +130 +134 +133 +134 +139 +139 +143 +143 +143 +147 +148 +151 +151 +151 +157 +157 +161 +161 +165 +165 +165 +169 +169 +172 +173 +173 +175 +175 +179 +178 +179 +183 +183 +185 +185 +185 +189 +188 +191 +191 +191 +195 +195 +196 +196 +199 +199 +198 +201 +201 +201 +201 +201 +202 +202 +202 +202 +203 +205 +205 +204 +204 +204 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +207 +204 +204 +204 +205 +204 +205 +205 +204 +202 +202 +200 +200 +201 +200 +200 +199 +198 +200 +196 +197 +194 +194 +190 +191 +191 +188 +189 +185 +185 +185 +183 +183 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +163 +161 +161 +157 +157 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +130 +125 +125 +119 +120 +115 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +65 +64 +64 +58 +58 +54 +54 +55 +50 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +14 +14 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +14 +13 +14 +14 +14 +13 +13 +14 +14 +14 +13 +14 +13 +13 +13 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +41 +41 +41 +42 +43 +47 +47 +47 +51 +50 +55 +55 +55 +59 +59 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +115 +116 +120 +119 +125 +125 +125 +129 +129 +133 +133 +140 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +182 +183 +183 +185 +185 +188 +189 +188 +190 +191 +195 +195 +194 +196 +196 +198 +199 +198 +201 +200 +200 +201 +201 +203 +203 +204 +204 +204 +204 +204 +206 +206 +206 +207 +206 +206 +207 +206 +206 +207 +206 +207 +206 +206 +207 +206 +206 +204 +204 +205 +204 +204 +202 +202 +201 +200 +200 +200 +200 +198 +198 +198 +196 +196 +194 +195 +194 +190 +190 +188 +188 +189 +184 +184 +182 +183 +179 +178 +179 +175 +175 +173 +173 +172 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +148 +144 +143 +139 +139 +134 +134 +133 +130 +129 +125 +125 +125 +119 +119 +116 +116 +115 +109 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +83 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +58 +58 +54 +54 +54 +50 +50 +47 +47 +47 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +12 +13 +13 +13 +13 +14 +13 +14 +13 +14 +14 +14 +14 +14 +13 +13 +14 +13 +13 +14 +13 +14 +14 +13 +13 +13 +13 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +26 +31 +30 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +50 +54 +54 +54 +59 +58 +65 +64 +64 +68 +68 +72 +72 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +116 +120 +120 +125 +125 +130 +129 +129 +133 +133 +139 +139 +139 +143 +143 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +162 +165 +165 +169 +169 +173 +173 +173 +176 +174 +179 +179 +179 +183 +182 +183 +183 +182 +184 +185 +189 +188 +188 +190 +190 +194 +194 +195 +197 +197 +198 +198 +200 +201 +201 +201 +200 +202 +202 +203 +204 +204 +204 +204 +204 +204 +204 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +204 +205 +204 +204 +204 +202 +202 +201 +200 +200 +201 +201 +198 +199 +199 +196 +197 +194 +195 +190 +190 +190 +188 +189 +185 +184 +184 +183 +182 +183 +182 +182 +179 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +134 +130 +129 +129 +125 +126 +120 +119 +119 +116 +115 +110 +109 +106 +105 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +87 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +65 +64 +59 +58 +55 +54 +54 +51 +50 +47 +47 +46 +43 +43 +43 +43 +42 +40 +41 +36 +37 +36 +33 +32 +31 +31 +29 +27 +27 +25 +25 +20 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +14 +14 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +14 +14 +14 +13 +13 +13 +14 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +36 +41 +41 +41 +43 +43 +47 +47 +50 +50 +51 +54 +54 +58 +58 +58 +64 +64 +68 +68 +68 +73 +72 +76 +76 +77 +82 +82 +86 +86 +86 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +115 +120 +119 +120 +125 +126 +129 +129 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +150 +151 +151 +157 +157 +161 +161 +161 +165 +165 +165 +165 +165 +169 +168 +173 +173 +173 +175 +175 +179 +179 +180 +183 +183 +185 +185 +188 +189 +188 +190 +190 +194 +194 +194 +196 +196 +196 +197 +196 +198 +198 +200 +200 +200 +200 +200 +202 +202 +204 +205 +204 +204 +205 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +207 +204 +205 +204 +204 +204 +203 +203 +201 +200 +200 +201 +200 +199 +198 +198 +196 +196 +194 +194 +194 +190 +191 +189 +189 +188 +184 +184 +183 +182 +182 +179 +179 +175 +174 +172 +173 +173 +168 +169 +165 +165 +161 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +126 +125 +126 +120 +120 +115 +116 +115 +110 +110 +106 +106 +105 +100 +100 +96 +95 +96 +90 +90 +86 +86 +87 +82 +82 +76 +76 +73 +72 +72 +68 +68 +64 +64 +64 +58 +59 +59 +58 +58 +54 +54 +51 +51 +51 +47 +47 +43 +43 +43 +40 +41 +37 +36 +33 +33 +32 +31 +31 +27 +27 +27 +25 +25 +25 +24 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +14 +14 +13 +14 +13 +14 +14 +13 +14 +14 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +14 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +24 +25 +27 +27 +27 +31 +31 +32 +33 +37 +37 +37 +41 +41 +41 +41 +41 +43 +43 +47 +46 +47 +51 +51 +54 +55 +54 +58 +59 +64 +64 +65 +68 +68 +72 +72 +77 +77 +76 +82 +82 +86 +86 +86 +90 +90 +90 +90 +90 +96 +96 +100 +99 +100 +106 +105 +110 +110 +110 +115 +116 +120 +119 +125 +126 +126 +129 +129 +133 +133 +133 +139 +139 +139 +140 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +158 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +179 +179 +179 +183 +182 +185 +185 +185 +189 +189 +190 +190 +192 +194 +195 +196 +197 +198 +199 +199 +200 +200 +200 +200 +201 +203 +203 +204 +204 +204 +204 +204 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +204 +204 +204 +205 +204 +202 +202 +201 +200 +200 +200 +200 +198 +199 +198 +196 +196 +195 +195 +191 +191 +190 +189 +188 +184 +185 +185 +183 +183 +179 +179 +179 +175 +175 +173 +173 +172 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +130 +125 +125 +126 +120 +120 +115 +116 +116 +109 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +86 +86 +86 +82 +76 +76 +76 +76 +72 +72 +68 +69 +66 +64 +65 +58 +58 +55 +54 +55 +50 +51 +47 +47 +47 +43 +43 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +28 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +13 +14 +13 +14 +14 +14 +14 +14 +14 +14 +14 +14 +13 +13 +13 +14 +13 +14 +14 +13 +14 +14 +14 +14 +12 +13 +15 +15 +17 +17 +19 +19 +19 +21 +21 +26 +25 +24 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +42 +43 +47 +47 +51 +51 +55 +54 +54 +59 +58 +64 +65 +65 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +115 +119 +119 +119 +119 +119 +126 +125 +129 +129 +130 +133 +133 +139 +139 +141 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +165 +165 +165 +169 +168 +173 +173 +173 +175 +175 +178 +179 +182 +183 +183 +185 +184 +188 +189 +188 +191 +190 +194 +194 +195 +197 +196 +198 +198 +199 +200 +200 +200 +200 +201 +202 +202 +204 +204 +204 +205 +204 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +207 +206 +206 +206 +206 +207 +206 +205 +205 +204 +204 +204 +203 +202 +200 +200 +200 +201 +201 +198 +198 +198 +197 +197 +195 +194 +195 +190 +190 +189 +189 +188 +185 +185 +183 +182 +182 +179 +179 +175 +174 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +142 +133 +133 +129 +129 +125 +125 +125 +119 +119 +116 +115 +115 +110 +110 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +65 +64 +64 +65 +58 +58 +54 +55 +54 +51 +50 +47 +46 +43 +43 +42 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +26 +25 +25 +25 +21 +22 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +14 +13 +13 +14 +13 +13 +13 +14 +13 +14 +13 +14 +14 +14 +13 +14 +13 +14 +14 +13 +13 +14 +13 +13 +12 +15 +15 +17 +17 +17 +20 +20 +21 +21 +21 +26 +25 +27 +27 +27 +31 +31 +33 +33 +38 +36 +37 +41 +41 +43 +43 +43 +47 +47 +51 +50 +50 +54 +54 +58 +58 +58 +64 +64 +69 +68 +69 +73 +73 +77 +76 +83 +82 +82 +86 +86 +90 +90 +90 +96 +96 +96 +96 +95 +99 +100 +106 +106 +106 +110 +109 +115 +116 +117 +119 +120 +125 +125 +129 +130 +130 +134 +133 +140 +139 +140 +143 +143 +143 +144 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +163 +165 +165 +169 +169 +173 +173 +172 +175 +175 +179 +179 +178 +183 +182 +184 +185 +184 +188 +188 +190 +191 +191 +194 +195 +197 +197 +198 +199 +198 +200 +200 +200 +200 +201 +202 +202 +205 +204 +205 +205 +204 +207 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +204 +204 +204 +205 +205 +202 +202 +200 +201 +200 +200 +200 +199 +198 +199 +196 +197 +194 +195 +195 +190 +190 +188 +188 +185 +184 +185 +183 +183 +178 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +148 +144 +143 +143 +139 +139 +133 +134 +133 +130 +130 +129 +129 +130 +125 +125 +120 +120 +119 +115 +116 +110 +110 +110 +106 +106 +100 +100 +96 +96 +95 +90 +90 +86 +86 +86 +82 +82 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +65 +65 +59 +58 +58 +54 +55 +51 +51 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +22 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +13 +14 +14 +13 +14 +14 +13 +14 +13 +14 +14 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +26 +25 +25 +27 +27 +31 +31 +33 +33 +33 +33 +33 +36 +37 +41 +40 +41 +43 +43 +47 +47 +47 +51 +50 +54 +55 +58 +58 +59 +65 +65 +68 +69 +68 +73 +72 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +92 +96 +96 +99 +100 +107 +106 +106 +110 +109 +115 +116 +116 +119 +120 +125 +125 +125 +129 +130 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +164 +165 +169 +169 +173 +173 +173 +175 +174 +179 +179 +179 +182 +183 +185 +184 +189 +188 +189 +190 +190 +194 +194 +195 +196 +196 +198 +198 +198 +200 +201 +201 +200 +200 +202 +202 +204 +204 +205 +204 +204 +206 +207 +207 +206 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +204 +204 +204 +205 +204 +202 +203 +203 +200 +200 +200 +201 +199 +198 +199 +197 +196 +194 +195 +195 +191 +190 +189 +189 +189 +185 +184 +183 +183 +182 +179 +179 +175 +174 +175 +172 +173 +169 +169 +164 +165 +165 +162 +161 +157 +156 +157 +151 +151 +151 +151 +151 +147 +147 +143 +143 +143 +139 +140 +133 +133 +134 +129 +129 +126 +126 +119 +120 +120 +116 +115 +110 +109 +110 +106 +106 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +83 +82 +82 +76 +76 +73 +72 +72 +68 +68 +64 +64 +64 +58 +58 +54 +54 +54 +51 +51 +47 +47 +47 +43 +42 +41 +41 +38 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +13 +14 +14 +14 +14 +14 +13 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +13 +13 +14 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +34 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +50 +54 +55 +58 +59 +59 +64 +64 +69 +68 +68 +72 +72 +76 +76 +79 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +106 +106 +106 +110 +110 +116 +116 +115 +116 +116 +120 +120 +122 +125 +126 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +160 +161 +165 +165 +169 +169 +172 +172 +173 +175 +175 +179 +178 +179 +182 +182 +185 +185 +184 +188 +188 +191 +191 +190 +195 +195 +196 +196 +196 +198 +198 +200 +200 +201 +201 +201 +202 +202 +204 +205 +204 +204 +205 +206 +206 +207 +206 +207 +207 +206 +206 +207 +206 +206 +207 +207 +207 +206 +204 +204 +204 +204 +204 +202 +202 +200 +200 +200 +200 +200 +200 +201 +201 +198 +198 +196 +196 +196 +195 +194 +191 +191 +191 +189 +189 +185 +185 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +152 +147 +147 +143 +143 +139 +139 +139 +133 +134 +129 +129 +129 +125 +125 +125 +126 +126 +120 +120 +116 +116 +115 +110 +110 +106 +106 +101 +99 +100 +96 +96 +90 +90 +90 +86 +86 +82 +83 +82 +76 +77 +72 +72 +72 +69 +68 +65 +64 +65 +58 +58 +55 +54 +50 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +12 +14 +14 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +14 +13 +14 +14 +13 +14 +14 +14 +13 +13 +13 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +22 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +41 +41 +41 +43 +42 +47 +47 +47 +50 +51 +55 +55 +56 +59 +58 +64 +64 +68 +68 +68 +73 +73 +76 +76 +76 +82 +82 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +102 +106 +106 +110 +110 +115 +116 +115 +119 +119 +125 +125 +125 +129 +129 +133 +133 +134 +139 +139 +143 +143 +144 +147 +147 +151 +151 +157 +157 +157 +161 +161 +164 +165 +165 +169 +169 +173 +173 +173 +174 +175 +178 +179 +179 +182 +182 +185 +185 +185 +189 +189 +190 +191 +195 +194 +194 +197 +196 +198 +198 +198 +200 +201 +201 +200 +200 +202 +202 +204 +204 +204 +204 +204 +207 +207 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +205 +205 +204 +204 +202 +202 +201 +200 +200 +200 +201 +199 +198 +199 +196 +197 +195 +195 +191 +191 +191 +189 +189 +184 +184 +185 +182 +182 +183 +183 +182 +178 +179 +175 +175 +175 +173 +173 +169 +169 +167 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +143 +144 +143 +139 +139 +133 +134 +134 +130 +129 +125 +125 +123 +119 +120 +116 +116 +109 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +73 +72 +68 +68 +64 +65 +59 +59 +58 +54 +54 +55 +54 +55 +51 +50 +47 +46 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +14 +14 +13 +14 +14 +13 +13 +14 +14 +14 +14 +14 +13 +14 +14 +13 +13 +13 +13 +14 +13 +14 +14 +14 +13 +13 +15 +15 +18 +17 +17 +19 +19 +21 +21 +21 +25 +25 +25 +25 +25 +27 +27 +30 +31 +31 +33 +33 +37 +37 +38 +41 +41 +42 +43 +47 +47 +47 +51 +51 +55 +55 +55 +59 +58 +59 +58 +59 +64 +65 +68 +68 +69 +72 +72 +76 +76 +81 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +105 +106 +110 +110 +110 +115 +116 +120 +120 +120 +126 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +168 +173 +173 +175 +175 +179 +179 +179 +182 +183 +185 +185 +185 +189 +189 +190 +190 +191 +194 +194 +196 +196 +196 +198 +199 +200 +200 +200 +200 +201 +203 +202 +205 +205 +205 +205 +205 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +205 +205 +205 +204 +204 +202 +202 +200 +200 +200 +200 +200 +198 +198 +198 +196 +197 +197 +197 +196 +195 +195 +190 +191 +191 +188 +189 +184 +184 +185 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +144 +143 +143 +139 +139 +134 +133 +133 +130 +130 +125 +125 +125 +119 +119 +116 +115 +116 +110 +109 +106 +105 +106 +100 +100 +96 +96 +91 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +65 +64 +64 +59 +58 +55 +54 +55 +50 +51 +47 +47 +43 +43 +42 +41 +40 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +24 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +13 +13 +14 +13 +14 +13 +13 +14 +14 +13 +14 +13 +14 +13 +14 +13 +13 +13 +13 +13 +13 +14 +13 +13 +12 +15 +15 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +43 +42 +43 +47 +47 +51 +51 +51 +54 +54 +58 +59 +64 +65 +64 +69 +68 +72 +72 +73 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +105 +110 +110 +116 +116 +116 +119 +120 +125 +125 +125 +130 +129 +133 +133 +134 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +166 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +185 +185 +184 +189 +189 +190 +191 +191 +195 +195 +197 +197 +199 +198 +198 +200 +200 +200 +200 +200 +202 +202 +203 +202 +202 +204 +204 +204 +204 +204 +207 +206 +206 +207 +207 +206 +206 +207 +206 +207 +206 +206 +206 +206 +204 +204 +204 +204 +204 +204 +204 +204 +202 +202 +201 +200 +201 +200 +200 +198 +198 +198 +197 +196 +194 +195 +190 +190 +191 +189 +189 +185 +184 +185 +183 +182 +182 +182 +182 +178 +179 +175 +175 +175 +173 +173 +169 +169 +167 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +130 +125 +125 +119 +120 +115 +115 +115 +110 +110 +106 +106 +105 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +69 +69 +65 +64 +64 +59 +58 +55 +55 +55 +50 +51 +47 +47 +47 +43 +44 +41 +40 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +14 +14 +14 +14 +13 +14 +14 +13 +14 +14 +13 +14 +14 +14 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +46 +47 +51 +51 +50 +54 +54 +58 +58 +58 +64 +65 +68 +69 +68 +72 +72 +76 +76 +77 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +109 +115 +116 +119 +119 +119 +125 +125 +129 +129 +129 +133 +134 +139 +140 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +185 +185 +185 +189 +188 +190 +190 +190 +194 +195 +195 +194 +194 +196 +196 +198 +198 +199 +200 +200 +201 +200 +201 +202 +202 +204 +204 +204 +205 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +204 +204 +205 +205 +205 +202 +202 +200 +201 +201 +201 +200 +198 +198 +198 +196 +196 +196 +197 +196 +194 +195 +190 +191 +191 +189 +189 +185 +184 +184 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +139 +139 +139 +134 +133 +129 +130 +129 +125 +125 +120 +120 +120 +116 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +89 +86 +86 +86 +82 +81 +76 +76 +76 +72 +72 +68 +68 +68 +65 +64 +59 +58 +58 +55 +55 +50 +50 +51 +47 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +18 +15 +15 +15 +15 +14 +13 +13 +12 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +14 +14 +13 +14 +14 +13 +14 +14 +13 +14 +13 +13 +14 +13 +13 +13 +13 +14 +13 +13 +15 +15 +15 +16 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +26 +27 +27 +31 +31 +32 +33 +33 +37 +36 +41 +41 +41 +42 +43 +47 +46 +47 +50 +50 +54 +55 +55 +59 +59 +64 +64 +68 +69 +68 +72 +73 +76 +77 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +105 +106 +110 +110 +116 +115 +120 +120 +119 +125 +125 +130 +130 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +158 +161 +161 +165 +165 +170 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +183 +185 +184 +188 +189 +189 +190 +190 +195 +195 +195 +196 +197 +198 +199 +200 +200 +200 +200 +200 +202 +202 +202 +204 +204 +204 +204 +204 +204 +205 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +202 +202 +202 +200 +200 +200 +201 +201 +199 +198 +196 +197 +195 +195 +195 +190 +190 +188 +188 +188 +184 +185 +183 +182 +183 +179 +179 +174 +175 +174 +173 +173 +169 +169 +169 +164 +165 +161 +161 +157 +156 +157 +151 +151 +147 +148 +147 +143 +143 +139 +140 +139 +134 +133 +129 +129 +129 +126 +125 +119 +120 +120 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +69 +64 +64 +58 +59 +55 +54 +54 +51 +50 +46 +47 +47 +43 +43 +40 +41 +41 +37 +37 +32 +33 +33 +31 +31 +27 +27 +28 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +14 +14 +13 +14 +13 +14 +13 +13 +13 +14 +14 +14 +14 +13 +13 +14 +14 +14 +14 +14 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +21 +21 +20 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +40 +41 +41 +43 +42 +47 +47 +47 +51 +50 +54 +54 +56 +59 +58 +65 +64 +68 +68 +68 +72 +72 +76 +76 +76 +83 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +105 +106 +110 +110 +109 +115 +115 +120 +120 +120 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +161 +161 +160 +165 +165 +169 +169 +169 +173 +172 +175 +175 +175 +178 +179 +183 +182 +182 +185 +185 +189 +189 +188 +190 +190 +195 +194 +197 +196 +196 +198 +198 +200 +200 +200 +200 +200 +200 +200 +200 +202 +202 +205 +204 +204 +204 +204 +206 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +207 +207 +204 +204 +204 +204 +204 +204 +204 +202 +202 +202 +200 +201 +200 +201 +200 +198 +198 +196 +196 +195 +194 +194 +190 +190 +189 +188 +188 +184 +185 +182 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +119 +116 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +65 +64 +64 +58 +59 +55 +55 +55 +50 +51 +47 +47 +46 +42 +43 +40 +41 +41 +37 +36 +33 +33 +33 +31 +31 +27 +27 +24 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +14 +13 +14 +13 +14 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +14 +14 +14 +13 +13 +13 +13 +13 +13 +14 +13 +13 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +36 +37 +37 +41 +40 +43 +42 +47 +47 +47 +50 +50 +55 +55 +54 +58 +58 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +85 +90 +90 +96 +96 +96 +100 +100 +106 +105 +106 +110 +109 +115 +116 +115 +119 +119 +125 +125 +125 +129 +129 +133 +133 +133 +139 +140 +143 +143 +148 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +179 +182 +183 +185 +184 +188 +189 +188 +190 +191 +194 +194 +195 +196 +196 +199 +198 +198 +200 +200 +200 +200 +200 +202 +202 +204 +204 +205 +204 +205 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +205 +204 +205 +204 +204 +203 +203 +202 +200 +200 +200 +200 +198 +198 +198 +197 +196 +194 +195 +195 +191 +190 +188 +188 +188 +184 +185 +182 +182 +183 +179 +178 +175 +174 +173 +172 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +125 +126 +125 +120 +120 +115 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +87 +82 +82 +76 +76 +73 +72 +72 +68 +69 +64 +64 +64 +59 +58 +54 +55 +54 +51 +50 +47 +47 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +13 +14 +14 +13 +13 +13 +14 +13 +14 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +14 +13 +14 +14 +14 +14 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +51 +51 +55 +54 +58 +59 +58 +64 +64 +68 +68 +68 +72 +72 +77 +76 +83 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +115 +120 +119 +120 +125 +125 +129 +129 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +178 +179 +179 +183 +182 +185 +184 +185 +189 +189 +189 +188 +188 +191 +190 +194 +194 +194 +196 +196 +198 +199 +199 +200 +201 +201 +200 +202 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +203 +200 +200 +201 +201 +200 +199 +199 +198 +196 +196 +194 +194 +195 +191 +191 +189 +188 +185 +184 +185 +183 +182 +178 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +126 +125 +119 +119 +116 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +91 +90 +90 +86 +86 +82 +82 +82 +76 +76 +76 +76 +76 +72 +72 +68 +68 +69 +64 +64 +58 +58 +59 +58 +58 +55 +55 +51 +51 +50 +47 +46 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +30 +31 +31 +27 +27 +25 +25 +23 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +14 +14 +14 +14 +14 +14 +14 +14 +13 +14 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +32 +37 +37 +40 +40 +41 +43 +43 +46 +46 +47 +50 +51 +54 +55 +59 +59 +59 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +105 +110 +110 +110 +115 +115 +120 +119 +119 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +148 +151 +151 +157 +157 +160 +161 +161 +165 +165 +169 +169 +169 +173 +173 +173 +173 +173 +175 +175 +178 +179 +179 +183 +183 +185 +184 +186 +188 +189 +190 +191 +194 +194 +195 +196 +196 +198 +199 +199 +200 +200 +201 +201 +200 +200 +200 +203 +202 +203 +204 +204 +204 +204 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +207 +204 +205 +204 +204 +204 +202 +202 +203 +200 +200 +200 +200 +198 +198 +198 +197 +196 +194 +194 +194 +191 +190 +188 +188 +188 +184 +184 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +166 +165 +165 +161 +161 +157 +157 +157 +151 +151 +148 +147 +147 +143 +143 +138 +139 +139 +133 +133 +129 +129 +130 +125 +126 +119 +120 +116 +115 +115 +109 +110 +106 +106 +106 +100 +99 +96 +96 +96 +91 +90 +86 +86 +86 +82 +82 +76 +76 +77 +73 +72 +69 +69 +65 +64 +64 +58 +59 +55 +55 +55 +51 +50 +50 +51 +51 +47 +47 +42 +43 +43 +41 +41 +37 +37 +37 +33 +32 +30 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +14 +13 +14 +13 +14 +13 +14 +14 +14 +14 +14 +14 +14 +14 +13 +13 +14 +14 +14 +13 +13 +14 +14 +14 +13 +12 +15 +15 +17 +17 +17 +19 +18 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +43 +43 +43 +47 +46 +50 +50 +51 +54 +55 +58 +59 +59 +65 +65 +68 +68 +68 +73 +72 +76 +76 +77 +82 +82 +86 +86 +91 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +115 +119 +120 +119 +126 +125 +130 +130 +130 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +182 +183 +182 +184 +184 +188 +188 +188 +191 +191 +191 +191 +190 +194 +194 +197 +196 +197 +198 +199 +200 +200 +200 +201 +201 +203 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +207 +206 +207 +204 +204 +204 +204 +205 +203 +202 +200 +200 +200 +200 +200 +201 +201 +201 +198 +198 +197 +196 +196 +194 +194 +191 +190 +191 +188 +189 +184 +185 +183 +183 +182 +178 +179 +175 +174 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +151 +147 +147 +143 +143 +140 +139 +139 +133 +134 +129 +130 +129 +125 +125 +125 +126 +126 +119 +119 +115 +115 +115 +110 +110 +106 +106 +106 +99 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +76 +76 +76 +72 +73 +68 +68 +68 +64 +64 +58 +59 +59 +54 +54 +51 +51 +47 +47 +47 +42 +42 +41 +41 +41 +37 +37 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +24 +21 +21 +19 +19 +17 +17 +17 +15 +16 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +14 +14 +14 +14 +14 +14 +13 +14 +13 +13 +14 +14 +14 +13 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +26 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +42 +43 +47 +47 +50 +51 +51 +55 +54 +59 +58 +65 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +101 +106 +106 +110 +110 +115 +115 +115 +119 +119 +125 +125 +126 +129 +130 +133 +133 +134 +139 +140 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +175 +175 +175 +179 +179 +183 +183 +183 +185 +185 +189 +188 +190 +191 +191 +194 +195 +196 +196 +197 +198 +198 +200 +201 +200 +200 +201 +203 +203 +203 +204 +205 +204 +204 +205 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +205 +204 +204 +205 +204 +202 +202 +202 +200 +201 +201 +200 +200 +198 +199 +196 +196 +195 +195 +194 +191 +190 +188 +188 +189 +185 +184 +183 +183 +183 +178 +179 +175 +175 +175 +172 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +134 +134 +130 +129 +125 +125 +126 +119 +119 +115 +116 +110 +109 +110 +106 +106 +100 +100 +100 +96 +96 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +73 +69 +69 +68 +64 +64 +64 +64 +64 +58 +58 +59 +55 +55 +54 +54 +55 +50 +50 +47 +47 +47 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +12 +12 +13 +13 +13 +13 +14 +14 +14 +14 +14 +14 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +40 +41 +41 +43 +43 +47 +47 +47 +50 +50 +54 +55 +54 +58 +58 +64 +64 +64 +68 +68 +72 +72 +73 +76 +77 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +99 +100 +100 +100 +100 +106 +106 +109 +110 +110 +115 +115 +119 +119 +122 +125 +125 +129 +129 +133 +134 +134 +139 +139 +143 +144 +143 +147 +147 +147 +147 +147 +151 +151 +157 +157 +157 +160 +161 +164 +164 +168 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +182 +185 +184 +189 +189 +188 +190 +191 +194 +194 +195 +196 +196 +198 +198 +200 +200 +200 +200 +200 +202 +202 +202 +204 +205 +204 +204 +204 +206 +207 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +204 +204 +204 +205 +204 +202 +202 +202 +201 +201 +200 +201 +200 +198 +198 +196 +196 +196 +195 +194 +190 +190 +191 +188 +188 +185 +185 +183 +182 +183 +178 +179 +175 +175 +175 +173 +173 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +144 +143 +143 +139 +139 +133 +133 +133 +129 +129 +129 +129 +129 +125 +125 +120 +119 +120 +116 +116 +110 +109 +108 +106 +106 +100 +99 +95 +96 +96 +90 +90 +86 +86 +86 +82 +82 +82 +82 +83 +77 +76 +72 +72 +73 +68 +68 +64 +64 +59 +58 +59 +55 +54 +50 +51 +51 +47 +46 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +22 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +14 +13 +13 +14 +13 +13 +13 +14 +14 +14 +13 +13 +14 +14 +13 +14 +14 +13 +13 +13 +14 +13 +13 +13 +13 +12 +15 +15 +17 +17 +18 +19 +19 +21 +21 +26 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +42 +43 +43 +47 +47 +51 +51 +51 +55 +54 +58 +58 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +83 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +102 +106 +106 +110 +110 +116 +116 +116 +119 +119 +125 +125 +126 +129 +129 +130 +130 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +150 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +182 +183 +185 +185 +189 +189 +190 +191 +190 +194 +195 +196 +196 +197 +198 +199 +200 +200 +200 +200 +200 +202 +202 +202 +204 +204 +204 +205 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +205 +203 +202 +202 +200 +201 +200 +200 +200 +198 +198 +196 +197 +195 +195 +195 +190 +190 +188 +189 +188 +185 +184 +183 +182 +182 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +158 +157 +157 +151 +151 +147 +147 +147 +143 +143 +143 +144 +143 +139 +139 +133 +134 +134 +129 +129 +125 +126 +126 +119 +120 +116 +116 +109 +110 +110 +106 +106 +100 +100 +100 +96 +96 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +77 +74 +72 +72 +68 +68 +64 +65 +64 +58 +59 +54 +54 +54 +50 +50 +46 +47 +47 +43 +43 +41 +41 +41 +37 +36 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +22 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +14 +13 +14 +14 +13 +13 +14 +14 +14 +13 +14 +14 +13 +14 +13 +14 +14 +14 +14 +14 +13 +14 +13 +13 +15 +15 +18 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +37 +37 +41 +41 +41 +42 +43 +47 +47 +51 +50 +50 +54 +54 +58 +58 +58 +64 +65 +64 +64 +64 +68 +68 +72 +73 +72 +76 +76 +82 +82 +83 +86 +86 +90 +90 +95 +96 +96 +100 +99 +106 +106 +106 +109 +109 +110 +110 +110 +115 +115 +120 +119 +119 +125 +126 +129 +130 +132 +133 +133 +139 +139 +142 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +160 +165 +165 +169 +169 +169 +173 +173 +175 +175 +178 +179 +179 +183 +183 +185 +185 +184 +189 +188 +191 +191 +190 +194 +194 +197 +196 +197 +198 +199 +201 +200 +201 +200 +201 +202 +202 +204 +204 +204 +204 +204 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +206 +207 +207 +207 +206 +204 +204 +205 +204 +204 +202 +203 +203 +200 +200 +200 +201 +198 +198 +199 +196 +196 +195 +195 +195 +190 +191 +188 +188 +188 +185 +185 +183 +183 +183 +178 +179 +174 +175 +172 +173 +173 +169 +169 +165 +165 +165 +161 +161 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +141 +139 +139 +134 +133 +129 +130 +129 +125 +126 +119 +119 +120 +116 +115 +116 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +91 +90 +90 +87 +86 +82 +83 +82 +76 +76 +72 +73 +72 +68 +68 +64 +64 +64 +58 +58 +54 +55 +55 +51 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +14 +14 +13 +13 +14 +14 +13 +14 +14 +14 +13 +13 +14 +13 +14 +14 +14 +14 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +28 +31 +31 +33 +33 +36 +37 +37 +40 +41 +43 +43 +43 +47 +47 +47 +47 +47 +50 +50 +54 +54 +54 +59 +58 +64 +64 +66 +68 +68 +73 +73 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +90 +90 +90 +96 +96 +100 +100 +100 +105 +106 +110 +110 +115 +116 +115 +120 +120 +119 +120 +120 +126 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +161 +161 +161 +165 +165 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +185 +185 +185 +189 +189 +191 +190 +195 +195 +195 +196 +197 +199 +198 +198 +201 +200 +200 +201 +200 +203 +203 +205 +204 +204 +204 +204 +206 +207 +207 +206 +206 +206 +207 +206 +207 +207 +206 +207 +206 +206 +206 +204 +204 +204 +204 +204 +203 +203 +200 +201 +200 +200 +200 +198 +198 +199 +196 +196 +194 +194 +190 +190 +190 +189 +188 +185 +185 +185 +183 +183 +182 +182 +182 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +143 +143 +143 +140 +140 +133 +133 +134 +129 +130 +125 +125 +120 +119 +119 +116 +115 +109 +110 +109 +105 +105 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +69 +68 +68 +65 +64 +58 +59 +60 +54 +54 +51 +50 +50 +47 +47 +42 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +14 +14 +13 +14 +13 +13 +13 +13 +14 +14 +13 +14 +13 +13 +13 +13 +13 +14 +13 +14 +14 +14 +13 +14 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +42 +47 +47 +50 +50 +50 +54 +54 +59 +59 +59 +65 +64 +65 +64 +64 +68 +68 +72 +72 +72 +77 +76 +82 +82 +83 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +115 +115 +119 +119 +125 +125 +126 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +164 +169 +169 +173 +173 +173 +175 +175 +178 +179 +182 +183 +183 +184 +184 +188 +189 +189 +190 +190 +191 +191 +190 +194 +194 +196 +197 +196 +199 +198 +200 +200 +200 +201 +201 +203 +202 +205 +204 +204 +204 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +205 +202 +202 +200 +200 +200 +200 +200 +198 +198 +199 +197 +196 +197 +196 +197 +194 +195 +190 +190 +191 +189 +189 +185 +185 +185 +182 +183 +178 +179 +176 +175 +175 +173 +173 +169 +169 +169 +165 +165 +165 +165 +165 +161 +161 +157 +156 +157 +151 +151 +147 +147 +146 +143 +143 +139 +139 +133 +133 +134 +129 +129 +125 +126 +125 +120 +119 +115 +116 +116 +110 +109 +105 +106 +106 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +68 +68 +64 +64 +65 +58 +59 +55 +54 +55 +50 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +12 +12 +13 +14 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +14 +14 +13 +14 +14 +14 +14 +14 +13 +13 +13 +14 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +42 +43 +47 +47 +47 +47 +47 +50 +51 +54 +54 +55 +58 +58 +64 +64 +66 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +99 +100 +106 +106 +106 +109 +109 +115 +115 +119 +119 +120 +125 +126 +129 +129 +129 +134 +133 +139 +140 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +182 +183 +183 +184 +185 +189 +189 +188 +190 +190 +194 +194 +195 +196 +197 +198 +199 +201 +200 +200 +201 +200 +202 +202 +202 +204 +204 +205 +204 +204 +206 +207 +206 +207 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +203 +201 +201 +201 +200 +200 +200 +200 +198 +198 +198 +196 +196 +194 +195 +195 +190 +190 +188 +189 +184 +184 +184 +183 +182 +179 +178 +179 +175 +175 +175 +174 +175 +173 +173 +168 +169 +169 +165 +165 +161 +161 +158 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +120 +119 +115 +116 +110 +109 +106 +106 +105 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +72 +72 +68 +68 +69 +65 +64 +58 +58 +55 +54 +54 +51 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +20 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +14 +14 +13 +14 +14 +14 +14 +14 +13 +14 +13 +13 +14 +13 +13 +14 +14 +13 +13 +14 +14 +14 +13 +14 +13 +13 +12 +15 +15 +17 +18 +18 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +50 +50 +50 +54 +55 +59 +58 +59 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +99 +100 +100 +106 +106 +110 +110 +109 +115 +115 +119 +119 +120 +125 +125 +129 +130 +129 +134 +133 +139 +139 +139 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +182 +183 +185 +184 +189 +189 +191 +190 +190 +194 +194 +196 +196 +196 +198 +198 +200 +200 +200 +200 +200 +202 +203 +202 +204 +204 +204 +204 +205 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +207 +207 +205 +204 +204 +204 +204 +202 +202 +202 +200 +201 +200 +200 +199 +199 +199 +196 +197 +194 +195 +194 +190 +191 +188 +188 +189 +184 +184 +184 +185 +185 +183 +182 +178 +179 +179 +175 +175 +172 +173 +171 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +134 +129 +129 +125 +125 +119 +120 +120 +115 +115 +109 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +73 +72 +69 +68 +68 +64 +65 +58 +58 +58 +55 +54 +51 +51 +51 +47 +47 +42 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +28 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +14 +14 +13 +14 +14 +13 +13 +14 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +14 +13 +13 +13 +13 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +36 +37 +39 +41 +40 +43 +43 +47 +47 +47 +51 +51 +54 +54 +54 +58 +59 +64 +65 +64 +68 +68 +72 +72 +72 +77 +76 +82 +82 +85 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +115 +116 +119 +119 +125 +125 +126 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +183 +182 +183 +184 +184 +188 +189 +188 +190 +190 +194 +194 +194 +197 +196 +198 +199 +198 +200 +201 +201 +200 +201 +202 +202 +204 +204 +204 +204 +205 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +207 +207 +204 +204 +204 +204 +205 +202 +203 +200 +200 +200 +200 +200 +198 +198 +196 +196 +196 +194 +194 +194 +194 +194 +191 +191 +189 +189 +189 +184 +185 +183 +182 +179 +179 +179 +175 +175 +172 +172 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +133 +133 +133 +129 +129 +126 +125 +125 +120 +119 +116 +115 +115 +110 +110 +106 +106 +106 +100 +99 +96 +96 +96 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +69 +64 +64 +64 +59 +58 +55 +54 +55 +51 +50 +47 +47 +47 +43 +42 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +13 +13 +13 +13 +14 +14 +14 +14 +14 +13 +13 +14 +13 +14 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +14 +14 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +36 +37 +41 +41 +41 +43 +43 +47 +46 +47 +50 +50 +55 +55 +55 +58 +58 +64 +65 +65 +69 +68 +72 +72 +76 +77 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +95 +100 +100 +106 +106 +106 +110 +110 +115 +115 +116 +120 +119 +125 +125 +129 +129 +130 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +166 +169 +169 +173 +173 +175 +175 +175 +178 +178 +179 +179 +179 +182 +182 +184 +185 +185 +189 +188 +191 +190 +190 +194 +195 +197 +197 +196 +198 +198 +200 +200 +200 +201 +201 +202 +202 +204 +204 +204 +204 +204 +204 +204 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +203 +202 +202 +200 +200 +201 +200 +200 +200 +201 +199 +198 +199 +196 +197 +194 +194 +191 +190 +191 +189 +188 +184 +185 +185 +183 +183 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +152 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +130 +129 +125 +125 +125 +119 +119 +115 +115 +116 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +65 +59 +58 +54 +54 +51 +50 +50 +46 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +12 +13 +13 +13 +14 +13 +14 +13 +13 +14 +14 +13 +13 +13 +14 +13 +14 +14 +14 +14 +13 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +12 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +40 +43 +43 +43 +47 +47 +51 +50 +54 +55 +54 +58 +58 +65 +64 +64 +68 +68 +72 +72 +72 +77 +76 +82 +82 +82 +86 +86 +89 +90 +90 +96 +96 +100 +99 +105 +106 +106 +109 +110 +116 +115 +115 +119 +119 +126 +125 +125 +129 +129 +133 +134 +133 +139 +139 +143 +143 +144 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +166 +165 +169 +169 +173 +172 +173 +175 +175 +179 +179 +179 +182 +183 +185 +184 +185 +188 +188 +190 +191 +195 +194 +194 +196 +196 +198 +198 +198 +200 +201 +201 +200 +200 +200 +201 +202 +203 +203 +204 +204 +204 +204 +205 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +205 +205 +203 +202 +200 +200 +200 +200 +201 +198 +198 +196 +196 +196 +194 +194 +191 +191 +190 +188 +189 +185 +184 +184 +182 +183 +179 +179 +179 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +134 +129 +129 +126 +126 +120 +120 +120 +115 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +83 +76 +76 +72 +72 +69 +68 +68 +64 +64 +58 +58 +58 +55 +55 +50 +50 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +14 +13 +14 +13 +14 +14 +14 +14 +13 +14 +13 +14 +14 +13 +13 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +26 +31 +31 +33 +33 +34 +37 +36 +41 +41 +42 +43 +43 +47 +47 +51 +51 +51 +54 +54 +59 +59 +59 +64 +64 +68 +68 +69 +72 +72 +77 +76 +76 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +105 +109 +110 +110 +115 +115 +119 +120 +119 +126 +125 +130 +129 +130 +133 +133 +139 +139 +144 +143 +143 +147 +147 +151 +151 +151 +157 +157 +160 +161 +161 +165 +165 +169 +169 +168 +172 +173 +174 +175 +176 +178 +178 +183 +183 +185 +184 +185 +188 +188 +191 +190 +191 +194 +194 +194 +195 +194 +196 +196 +198 +198 +199 +200 +200 +200 +201 +201 +202 +203 +204 +204 +204 +205 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +203 +202 +200 +200 +201 +200 +200 +199 +198 +198 +196 +196 +194 +194 +194 +191 +191 +188 +188 +189 +185 +184 +182 +182 +178 +178 +179 +174 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +134 +133 +133 +129 +129 +125 +126 +125 +119 +119 +116 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +97 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +65 +64 +64 +59 +58 +54 +54 +54 +50 +51 +47 +47 +47 +43 +43 +41 +41 +36 +37 +37 +33 +33 +31 +31 +31 +27 +27 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +14 +13 +14 +13 +13 +14 +13 +13 +13 +14 +14 +13 +14 +14 +14 +14 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +30 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +50 +51 +55 +54 +58 +58 +59 +65 +64 +69 +68 +73 +72 +73 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +115 +119 +120 +126 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +162 +165 +165 +169 +169 +172 +173 +173 +175 +175 +179 +179 +182 +182 +183 +182 +183 +184 +185 +188 +189 +189 +190 +190 +194 +194 +195 +196 +196 +198 +198 +200 +200 +200 +200 +200 +202 +202 +202 +204 +205 +204 +204 +204 +204 +205 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +203 +201 +200 +200 +200 +201 +198 +198 +199 +196 +197 +194 +194 +191 +190 +191 +189 +188 +184 +185 +184 +182 +183 +179 +179 +178 +175 +174 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +126 +125 +120 +120 +116 +115 +116 +110 +110 +106 +105 +100 +100 +100 +96 +96 +89 +90 +90 +86 +86 +82 +82 +82 +76 +76 +73 +72 +72 +69 +68 +65 +64 +65 +58 +58 +55 +55 +51 +51 +51 +47 +47 +47 +47 +47 +43 +43 +42 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +29 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +14 +13 +14 +13 +14 +13 +14 +14 +14 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +14 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +30 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +51 +51 +51 +54 +55 +59 +59 +59 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +100 +100 +100 +105 +106 +110 +109 +110 +116 +116 +120 +120 +119 +125 +126 +129 +129 +130 +133 +133 +139 +139 +140 +143 +143 +148 +147 +152 +151 +151 +157 +157 +161 +161 +161 +165 +165 +165 +165 +165 +169 +169 +173 +173 +173 +175 +174 +178 +179 +179 +183 +183 +185 +184 +188 +188 +189 +190 +190 +194 +195 +194 +197 +196 +197 +196 +197 +198 +198 +200 +200 +201 +200 +200 +203 +202 +204 +204 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +205 +203 +202 +201 +200 +200 +200 +200 +199 +198 +198 +196 +196 +194 +194 +194 +190 +190 +189 +189 +189 +185 +185 +182 +183 +183 +179 +178 +175 +174 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +140 +139 +139 +133 +134 +129 +129 +126 +125 +125 +119 +119 +116 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +87 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +59 +58 +58 +58 +58 +54 +54 +50 +51 +50 +46 +47 +43 +43 +42 +41 +40 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +25 +25 +25 +21 +20 +19 +19 +19 +17 +18 +15 +15 +15 +15 +14 +13 +13 +13 +13 +13 +12 +13 +13 +14 +13 +14 +13 +13 +14 +14 +14 +13 +13 +13 +13 +14 +13 +14 +13 +14 +14 +13 +13 +13 +13 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +25 +27 +27 +31 +31 +34 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +50 +54 +55 +55 +58 +59 +64 +64 +65 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +109 +110 +115 +116 +116 +119 +119 +125 +125 +130 +129 +129 +133 +133 +139 +139 +139 +143 +143 +143 +143 +143 +147 +147 +151 +151 +151 +158 +157 +161 +161 +161 +164 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +179 +182 +182 +183 +182 +183 +184 +185 +188 +189 +189 +190 +191 +195 +194 +196 +196 +197 +198 +198 +200 +200 +200 +200 +200 +202 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +205 +204 +204 +204 +203 +202 +202 +200 +200 +200 +200 +201 +198 +199 +197 +196 +196 +194 +195 +191 +190 +188 +189 +189 +185 +185 +182 +182 +182 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +126 +119 +120 +119 +116 +116 +110 +110 +111 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +61 +59 +59 +55 +54 +50 +50 +50 +46 +47 +43 +43 +43 +41 +41 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +14 +13 +13 +14 +14 +14 +14 +14 +14 +14 +14 +13 +14 +13 +14 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +28 +27 +27 +31 +31 +33 +33 +33 +37 +37 +40 +41 +41 +43 +43 +47 +47 +47 +51 +50 +55 +55 +59 +58 +58 +65 +64 +68 +68 +68 +72 +72 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +110 +110 +109 +116 +116 +120 +119 +119 +125 +125 +125 +126 +125 +130 +129 +133 +133 +133 +139 +139 +143 +143 +145 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +168 +169 +169 +173 +173 +175 +175 +175 +178 +179 +182 +183 +183 +185 +185 +189 +188 +190 +191 +191 +195 +194 +197 +196 +196 +198 +199 +200 +200 +200 +201 +201 +202 +203 +203 +204 +205 +204 +205 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +202 +200 +201 +200 +200 +199 +198 +198 +197 +196 +195 +194 +194 +190 +191 +189 +189 +188 +185 +184 +183 +182 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +144 +143 +139 +139 +139 +133 +133 +129 +130 +130 +125 +125 +119 +119 +116 +115 +116 +109 +110 +106 +106 +106 +100 +100 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +79 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +58 +58 +54 +54 +54 +54 +54 +51 +51 +46 +46 +47 +43 +42 +40 +41 +38 +36 +36 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +14 +14 +13 +14 +14 +14 +13 +13 +14 +13 +14 +13 +13 +14 +14 +14 +13 +13 +14 +13 +13 +14 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +26 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +43 +42 +43 +47 +46 +51 +50 +51 +54 +54 +58 +58 +58 +64 +65 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +91 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +110 +110 +115 +116 +119 +119 +119 +126 +125 +130 +129 +130 +133 +133 +140 +139 +143 +143 +143 +148 +147 +151 +150 +151 +157 +157 +157 +157 +157 +161 +160 +165 +165 +165 +169 +169 +173 +173 +174 +175 +175 +179 +178 +183 +183 +183 +184 +185 +188 +189 +188 +190 +190 +195 +194 +195 +197 +197 +198 +198 +199 +200 +200 +200 +200 +202 +202 +202 +204 +204 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +204 +204 +205 +204 +203 +202 +202 +200 +200 +200 +200 +200 +199 +198 +196 +196 +196 +194 +194 +191 +190 +190 +188 +189 +184 +184 +185 +182 +182 +179 +178 +176 +175 +175 +172 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +144 +139 +139 +133 +133 +130 +130 +129 +125 +125 +120 +119 +119 +115 +115 +115 +115 +116 +110 +110 +105 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +68 +68 +68 +64 +64 +58 +58 +59 +55 +54 +51 +51 +47 +47 +46 +42 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +14 +13 +13 +13 +14 +14 +13 +13 +14 +13 +14 +14 +13 +13 +13 +14 +13 +14 +13 +13 +14 +14 +14 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +34 +33 +33 +37 +37 +41 +41 +40 +43 +43 +47 +47 +46 +51 +50 +54 +54 +54 +58 +58 +64 +65 +65 +69 +68 +72 +72 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +99 +100 +106 +106 +105 +109 +110 +115 +115 +118 +119 +119 +125 +125 +130 +129 +129 +133 +133 +139 +139 +139 +143 +143 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +163 +165 +165 +169 +169 +173 +172 +173 +175 +174 +179 +179 +179 +182 +182 +185 +184 +185 +189 +189 +190 +190 +191 +194 +194 +196 +197 +197 +199 +198 +200 +200 +200 +201 +200 +202 +202 +204 +204 +205 +204 +204 +207 +207 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +201 +200 +200 +200 +200 +199 +198 +198 +196 +196 +194 +194 +194 +190 +190 +188 +189 +185 +184 +184 +183 +182 +179 +179 +179 +174 +175 +173 +173 +172 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +129 +129 +129 +126 +126 +119 +119 +120 +116 +115 +109 +110 +108 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +82 +82 +82 +76 +76 +72 +73 +73 +68 +68 +64 +64 +61 +59 +58 +54 +54 +50 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +14 +13 +14 +14 +13 +14 +13 +14 +13 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +26 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +50 +51 +55 +54 +58 +64 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +95 +97 +100 +100 +106 +106 +109 +110 +109 +116 +115 +120 +120 +119 +125 +125 +126 +125 +125 +129 +129 +133 +133 +134 +139 +139 +143 +143 +145 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +172 +173 +173 +174 +175 +179 +178 +179 +183 +183 +185 +185 +188 +188 +189 +191 +190 +194 +195 +194 +197 +196 +199 +198 +199 +201 +200 +200 +200 +200 +202 +202 +204 +204 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +204 +205 +205 +205 +204 +203 +203 +200 +201 +201 +201 +201 +199 +198 +197 +197 +196 +194 +195 +191 +191 +191 +189 +189 +185 +185 +185 +183 +183 +179 +178 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +130 +129 +125 +125 +125 +119 +119 +116 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +73 +72 +72 +68 +68 +64 +64 +64 +58 +58 +55 +54 +54 +50 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +31 +31 +31 +27 +27 +26 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +14 +14 +14 +13 +14 +14 +14 +13 +13 +13 +13 +14 +13 +13 +14 +13 +14 +14 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +50 +50 +50 +54 +54 +59 +58 +59 +64 +64 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +84 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +105 +106 +109 +110 +110 +110 +110 +115 +115 +120 +120 +120 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +174 +175 +178 +178 +179 +183 +183 +184 +184 +185 +188 +188 +191 +190 +191 +195 +194 +197 +196 +197 +198 +198 +200 +200 +200 +200 +200 +202 +202 +205 +204 +204 +204 +204 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +207 +207 +206 +207 +206 +204 +204 +204 +205 +205 +202 +202 +201 +200 +201 +201 +201 +198 +199 +199 +196 +196 +195 +194 +195 +191 +191 +188 +188 +189 +185 +184 +183 +183 +183 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +144 +139 +139 +133 +133 +130 +129 +129 +125 +125 +120 +120 +119 +115 +115 +115 +115 +116 +110 +109 +106 +106 +106 +100 +100 +96 +96 +91 +90 +89 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +59 +58 +55 +54 +55 +50 +51 +46 +47 +43 +43 +42 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +13 +14 +14 +14 +14 +13 +13 +14 +14 +13 +13 +13 +14 +14 +14 +14 +13 +15 +14 +13 +14 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +28 +32 +31 +33 +33 +36 +37 +37 +41 +41 +43 +43 +43 +47 +47 +47 +47 +47 +51 +50 +54 +55 +54 +59 +58 +64 +64 +66 +68 +69 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +115 +115 +115 +120 +119 +125 +125 +126 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +152 +157 +157 +161 +161 +165 +164 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +178 +182 +183 +184 +184 +185 +188 +188 +190 +191 +191 +194 +194 +197 +196 +199 +198 +198 +200 +201 +200 +200 +200 +202 +202 +205 +204 +204 +204 +204 +207 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +204 +204 +204 +204 +204 +202 +202 +201 +200 +200 +200 +200 +198 +198 +198 +197 +197 +194 +194 +195 +190 +190 +188 +188 +184 +184 +185 +182 +182 +179 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +158 +151 +151 +147 +147 +143 +143 +143 +139 +139 +134 +133 +133 +130 +129 +129 +130 +129 +125 +125 +119 +120 +120 +115 +115 +110 +109 +106 +106 +106 +100 +100 +97 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +69 +64 +64 +58 +58 +55 +54 +54 +50 +50 +47 +47 +47 +43 +43 +41 +41 +40 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +14 +13 +14 +14 +14 +14 +13 +13 +13 +14 +13 +13 +13 +14 +13 +14 +13 +14 +14 +13 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +51 +55 +54 +55 +58 +58 +64 +64 +68 +68 +68 +72 +73 +76 +76 +76 +82 +82 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +105 +106 +106 +110 +110 +115 +116 +115 +120 +119 +125 +125 +125 +129 +129 +133 +133 +134 +139 +139 +143 +143 +143 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +168 +173 +172 +172 +175 +175 +178 +179 +178 +182 +183 +184 +185 +184 +188 +189 +190 +190 +195 +194 +194 +196 +196 +198 +199 +198 +200 +200 +200 +201 +200 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +207 +204 +204 +204 +204 +204 +202 +202 +200 +200 +200 +200 +201 +198 +198 +200 +196 +196 +194 +194 +190 +190 +191 +188 +188 +185 +184 +184 +183 +182 +183 +183 +183 +179 +178 +175 +175 +175 +173 +173 +168 +169 +167 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +123 +120 +119 +116 +115 +110 +109 +109 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +69 +69 +68 +64 +64 +59 +58 +58 +55 +54 +51 +50 +51 +47 +46 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +13 +14 +13 +14 +14 +14 +13 +14 +13 +13 +14 +14 +13 +14 +13 +13 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +36 +37 +41 +41 +43 +43 +43 +43 +43 +47 +47 +51 +50 +50 +55 +55 +58 +58 +59 +64 +64 +64 +64 +64 +68 +68 +72 +72 +73 +76 +76 +82 +82 +85 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +115 +116 +120 +120 +125 +125 +126 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +182 +182 +183 +184 +184 +188 +188 +188 +190 +190 +195 +194 +195 +196 +197 +198 +198 +198 +200 +201 +200 +200 +201 +202 +202 +204 +204 +205 +204 +204 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +205 +204 +204 +205 +202 +202 +200 +200 +200 +200 +200 +199 +198 +197 +196 +196 +194 +194 +191 +191 +190 +188 +188 +185 +184 +184 +183 +183 +179 +178 +177 +175 +175 +173 +173 +168 +169 +169 +165 +165 +161 +161 +161 +157 +157 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +140 +137 +133 +133 +129 +130 +125 +125 +125 +119 +120 +116 +115 +116 +110 +110 +106 +106 +105 +100 +100 +96 +96 +96 +90 +89 +86 +86 +82 +82 +82 +76 +77 +72 +72 +72 +69 +69 +64 +65 +65 +59 +58 +55 +54 +55 +51 +51 +47 +47 +47 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +14 +14 +13 +14 +13 +13 +13 +14 +13 +14 +14 +14 +14 +14 +13 +13 +13 +13 +13 +14 +14 +14 +13 +14 +13 +13 +15 +16 +17 +17 +17 +19 +19 +19 +19 +19 +20 +21 +25 +25 +25 +27 +26 +31 +31 +32 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +51 +51 +50 +51 +54 +54 +59 +59 +59 +64 +64 +68 +68 +71 +73 +72 +76 +76 +81 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +110 +110 +115 +115 +120 +120 +125 +125 +125 +129 +129 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +172 +173 +173 +175 +175 +178 +178 +179 +183 +183 +185 +184 +185 +188 +188 +191 +191 +191 +194 +194 +196 +196 +196 +198 +198 +200 +200 +201 +200 +200 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +207 +204 +204 +204 +205 +204 +202 +202 +200 +200 +200 +200 +200 +200 +200 +200 +198 +198 +197 +196 +196 +194 +194 +190 +190 +190 +188 +189 +184 +185 +182 +183 +182 +179 +179 +175 +175 +175 +173 +173 +173 +172 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +154 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +126 +120 +119 +116 +115 +116 +110 +110 +106 +106 +100 +100 +99 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +65 +58 +58 +55 +54 +51 +51 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +14 +14 +14 +13 +14 +14 +14 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +27 +27 +26 +31 +31 +33 +33 +33 +37 +37 +37 +37 +36 +41 +41 +43 +43 +43 +47 +46 +50 +50 +53 +54 +54 +58 +58 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +95 +100 +100 +104 +105 +106 +109 +109 +115 +116 +115 +119 +119 +125 +125 +126 +129 +129 +133 +133 +134 +139 +139 +143 +143 +143 +147 +147 +151 +151 +158 +158 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +174 +175 +178 +179 +179 +183 +183 +184 +185 +184 +189 +189 +191 +191 +194 +194 +194 +196 +196 +198 +199 +198 +200 +200 +201 +200 +200 +200 +200 +202 +202 +203 +204 +205 +205 +205 +205 +206 +207 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +207 +207 +206 +206 +206 +204 +204 +204 +204 +205 +202 +202 +200 +200 +200 +200 +201 +198 +198 +197 +196 +197 +194 +194 +190 +190 +190 +189 +189 +189 +188 +189 +184 +185 +182 +183 +183 +179 +178 +175 +175 +174 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +140 +133 +133 +129 +129 +125 +125 +125 +119 +119 +116 +115 +116 +110 +110 +106 +106 +105 +100 +100 +96 +96 +96 +90 +90 +86 +86 +87 +82 +82 +76 +76 +72 +72 +72 +69 +68 +64 +65 +64 +58 +58 +54 +54 +55 +51 +51 +47 +47 +47 +43 +43 +41 +41 +41 +36 +37 +33 +33 +32 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +14 +13 +13 +14 +13 +14 +14 +13 +14 +13 +13 +14 +13 +13 +14 +13 +13 +14 +14 +14 +13 +14 +14 +14 +14 +14 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +50 +51 +54 +55 +55 +58 +59 +64 +64 +65 +68 +68 +72 +72 +72 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +109 +115 +116 +116 +119 +119 +125 +125 +126 +129 +129 +133 +134 +140 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +171 +173 +173 +175 +175 +178 +179 +182 +183 +183 +185 +185 +188 +188 +189 +190 +190 +194 +195 +194 +197 +196 +199 +198 +198 +201 +200 +200 +200 +200 +202 +202 +204 +204 +205 +204 +204 +206 +206 +206 +206 +207 +207 +206 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +204 +204 +204 +204 +204 +203 +203 +200 +200 +200 +201 +201 +198 +198 +198 +197 +197 +196 +197 +197 +194 +195 +190 +190 +191 +188 +189 +184 +185 +183 +182 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +148 +143 +144 +139 +139 +140 +133 +133 +129 +129 +130 +126 +126 +120 +119 +120 +115 +116 +110 +109 +110 +105 +106 +100 +100 +100 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +58 +58 +55 +54 +51 +50 +51 +46 +46 +43 +42 +41 +41 +41 +37 +37 +33 +34 +33 +31 +30 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +18 +15 +15 +15 +15 +14 +13 +13 +12 +13 +13 +14 +14 +13 +14 +14 +13 +14 +14 +14 +14 +13 +14 +14 +13 +13 +14 +14 +13 +13 +14 +13 +14 +13 +14 +14 +13 +15 +15 +15 +17 +17 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +30 +31 +30 +33 +33 +37 +37 +37 +41 +40 +43 +43 +43 +46 +47 +51 +51 +50 +55 +54 +58 +58 +59 +64 +64 +68 +69 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +89 +96 +96 +100 +99 +100 +106 +106 +110 +110 +109 +116 +116 +119 +119 +126 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +148 +151 +151 +151 +157 +157 +161 +160 +161 +165 +165 +169 +169 +173 +172 +173 +175 +174 +179 +178 +178 +182 +183 +184 +184 +185 +188 +188 +191 +190 +191 +194 +194 +196 +196 +196 +198 +198 +200 +200 +200 +200 +200 +202 +202 +205 +205 +205 +204 +204 +205 +205 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +203 +202 +201 +200 +200 +200 +201 +200 +200 +199 +199 +198 +196 +197 +195 +195 +193 +191 +191 +189 +189 +184 +184 +185 +183 +183 +178 +179 +178 +175 +174 +173 +173 +173 +169 +168 +165 +165 +165 +161 +161 +157 +157 +152 +151 +151 +147 +147 +143 +143 +143 +140 +139 +138 +139 +139 +133 +133 +129 +130 +129 +125 +125 +119 +120 +119 +115 +115 +109 +109 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +73 +68 +68 +69 +64 +64 +58 +59 +55 +54 +55 +51 +51 +47 +47 +47 +43 +43 +41 +40 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +28 +25 +25 +21 +21 +19 +19 +19 +17 +16 +15 +15 +15 +15 +15 +15 +15 +15 +14 +13 +12 +13 +13 +14 +14 +13 +13 +14 +14 +14 +13 +13 +14 +14 +14 +13 +14 +14 +14 +13 +13 +13 +13 +14 +14 +14 +13 +13 +14 +14 +14 +13 +15 +15 +15 +17 +17 +19 +20 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +40 +41 +41 +43 +42 +47 +47 +50 +51 +51 +55 +55 +59 +58 +58 +64 +64 +69 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +99 +100 +99 +106 +106 +110 +110 +109 +115 +116 +120 +119 +119 +125 +125 +129 +129 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +152 +151 +151 +157 +157 +161 +161 +161 +165 +165 +164 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +184 +185 +188 +188 +189 +191 +190 +194 +195 +195 +196 +196 +196 +197 +196 +198 +198 +200 +200 +200 +201 +202 +202 +203 +205 +205 +205 +204 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +207 +206 +206 +206 +206 +207 +204 +205 +204 +204 +203 +202 +203 +200 +200 +200 +200 +201 +198 +198 +196 +197 +196 +195 +195 +191 +190 +191 +188 +189 +185 +184 +184 +183 +183 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +152 +151 +151 +147 +147 +143 +143 +144 +139 +139 +133 +133 +129 +129 +130 +125 +125 +119 +120 +120 +115 +116 +110 +109 +110 +106 +106 +99 +100 +100 +96 +96 +90 +90 +91 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +68 +68 +65 +64 +59 +58 +58 +54 +54 +50 +50 +50 +47 +46 +43 +43 +43 +41 +41 +37 +36 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +12 +13 +13 +13 +14 +14 +14 +14 +14 +14 +14 +13 +13 +13 +13 +14 +14 +14 +13 +13 +14 +14 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +36 +37 +40 +41 +41 +43 +43 +47 +47 +47 +51 +50 +54 +54 +54 +59 +59 +64 +64 +65 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +115 +119 +120 +125 +126 +130 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +166 +169 +169 +173 +173 +174 +175 +175 +179 +179 +183 +182 +183 +185 +184 +188 +188 +189 +191 +191 +194 +194 +194 +196 +197 +198 +198 +199 +200 +201 +201 +200 +202 +202 +202 +204 +204 +204 +205 +204 +207 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +204 +204 +204 +204 +204 +202 +202 +200 +200 +200 +201 +200 +199 +198 +199 +197 +196 +194 +194 +194 +190 +191 +188 +188 +184 +185 +185 +183 +183 +179 +179 +179 +175 +174 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +143 +143 +144 +139 +139 +133 +133 +134 +129 +129 +126 +126 +125 +120 +119 +115 +115 +115 +110 +110 +105 +106 +106 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +68 +68 +64 +64 +64 +58 +58 +55 +54 +55 +50 +51 +46 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +32 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +14 +14 +14 +14 +13 +14 +13 +14 +14 +13 +14 +14 +14 +14 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +24 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +46 +50 +50 +51 +55 +55 +59 +59 +65 +64 +64 +69 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +116 +115 +115 +120 +119 +125 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +148 +147 +151 +151 +151 +157 +157 +161 +161 +165 +164 +165 +169 +169 +173 +172 +173 +175 +175 +175 +174 +174 +179 +179 +183 +183 +183 +184 +184 +188 +188 +189 +190 +190 +195 +194 +196 +196 +196 +198 +198 +200 +201 +200 +200 +200 +200 +200 +200 +202 +202 +204 +204 +205 +204 +204 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +200 +200 +201 +200 +201 +198 +198 +196 +196 +197 +194 +194 +190 +191 +190 +188 +189 +185 +184 +184 +183 +183 +179 +179 +179 +175 +174 +173 +173 +173 +169 +169 +165 +164 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +130 +129 +125 +125 +126 +119 +120 +115 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +83 +76 +76 +72 +72 +75 +68 +68 +64 +64 +58 +59 +58 +54 +55 +51 +50 +50 +47 +47 +47 +47 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +31 +30 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +14 +14 +13 +14 +14 +13 +14 +13 +13 +14 +14 +13 +14 +14 +14 +13 +13 +13 +13 +14 +13 +14 +13 +14 +12 +15 +15 +17 +17 +19 +19 +19 +21 +20 +24 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +46 +47 +46 +50 +50 +54 +55 +55 +59 +58 +64 +64 +64 +68 +68 +73 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +109 +110 +116 +115 +116 +119 +119 +125 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +156 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +180 +182 +183 +184 +185 +188 +188 +188 +191 +191 +194 +195 +194 +197 +197 +196 +197 +196 +198 +198 +201 +201 +201 +200 +200 +203 +203 +204 +204 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +204 +204 +205 +204 +205 +202 +202 +200 +200 +200 +200 +200 +198 +199 +198 +196 +196 +195 +195 +194 +191 +191 +189 +188 +189 +185 +184 +183 +182 +182 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +140 +133 +133 +129 +129 +126 +125 +126 +119 +120 +116 +115 +115 +110 +110 +105 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +73 +73 +72 +68 +68 +64 +64 +64 +58 +58 +54 +54 +54 +51 +51 +47 +47 +47 +43 +43 +41 +41 +39 +37 +37 +33 +33 +31 +31 +30 +27 +27 +25 +25 +25 +21 +21 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +14 +13 +13 +14 +14 +14 +13 +13 +13 +14 +14 +13 +13 +14 +13 +14 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +30 +31 +31 +33 +33 +37 +36 +41 +41 +41 +43 +43 +47 +47 +46 +51 +51 +51 +51 +51 +55 +54 +59 +58 +59 +64 +64 +68 +68 +69 +72 +72 +76 +76 +83 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +115 +120 +120 +120 +126 +125 +129 +129 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +178 +179 +178 +183 +183 +185 +184 +184 +189 +188 +189 +189 +188 +190 +190 +195 +194 +195 +197 +197 +198 +198 +200 +201 +201 +201 +200 +202 +202 +202 +204 +204 +204 +204 +204 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +204 +204 +205 +204 +204 +202 +202 +202 +201 +201 +200 +200 +200 +198 +198 +197 +197 +197 +195 +195 +190 +190 +191 +189 +189 +184 +185 +183 +183 +182 +179 +178 +175 +175 +175 +173 +173 +169 +168 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +144 +143 +140 +139 +139 +133 +133 +129 +130 +130 +125 +125 +126 +125 +126 +120 +120 +116 +115 +116 +110 +110 +105 +105 +106 +99 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +76 +76 +76 +72 +72 +68 +68 +68 +64 +65 +59 +59 +59 +55 +54 +51 +50 +46 +47 +47 +43 +43 +41 +41 +41 +37 +37 +37 +37 +37 +33 +33 +30 +31 +31 +27 +27 +25 +25 +22 +21 +21 +19 +19 +17 +17 +17 +15 +16 +15 +15 +15 +13 +13 +12 +12 +14 +14 +14 +14 +14 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +14 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +32 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +46 +50 +50 +51 +55 +55 +59 +58 +65 +64 +65 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +99 +99 +100 +106 +106 +110 +110 +116 +115 +116 +120 +119 +125 +125 +125 +129 +129 +130 +129 +129 +134 +134 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +168 +173 +173 +173 +173 +173 +175 +175 +179 +179 +178 +183 +182 +184 +185 +185 +188 +189 +191 +190 +194 +195 +195 +196 +197 +199 +198 +198 +200 +201 +200 +201 +200 +202 +202 +204 +204 +204 +204 +205 +207 +206 +206 +207 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +201 +201 +200 +200 +200 +198 +199 +197 +196 +197 +195 +195 +190 +190 +190 +189 +188 +185 +184 +185 +183 +182 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +162 +161 +161 +157 +157 +151 +151 +151 +147 +147 +147 +147 +147 +143 +143 +140 +139 +139 +133 +133 +129 +129 +130 +125 +125 +119 +120 +115 +116 +116 +110 +109 +106 +106 +106 +100 +100 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +79 +76 +76 +73 +72 +68 +68 +68 +65 +64 +65 +65 +64 +58 +58 +58 +59 +59 +54 +55 +50 +50 +51 +47 +47 +43 +43 +41 +41 +40 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +13 +13 +13 +14 +14 +14 +13 +14 +13 +13 +14 +13 +13 +14 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +32 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +46 +47 +50 +50 +54 +55 +55 +59 +59 +65 +64 +65 +68 +68 +72 +72 +73 +76 +76 +82 +82 +87 +86 +86 +90 +90 +96 +96 +96 +100 +100 +100 +100 +99 +106 +106 +109 +110 +110 +116 +115 +119 +119 +120 +125 +125 +130 +129 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +168 +169 +170 +173 +173 +175 +174 +175 +178 +178 +183 +183 +182 +185 +185 +188 +188 +189 +191 +190 +195 +195 +195 +196 +196 +198 +199 +200 +200 +201 +200 +201 +202 +202 +202 +204 +205 +205 +204 +204 +207 +207 +206 +206 +206 +206 +207 +207 +206 +207 +206 +207 +207 +206 +204 +204 +205 +204 +204 +202 +202 +202 +201 +200 +200 +200 +200 +198 +199 +197 +196 +196 +194 +194 +190 +190 +191 +188 +189 +185 +185 +183 +182 +182 +179 +178 +175 +175 +175 +173 +173 +169 +169 +169 +164 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +140 +139 +139 +133 +134 +129 +129 +130 +126 +125 +125 +125 +125 +119 +119 +116 +116 +116 +110 +110 +106 +106 +103 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +76 +76 +77 +72 +72 +68 +68 +69 +65 +65 +58 +59 +55 +54 +54 +51 +51 +47 +46 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +20 +21 +19 +19 +19 +16 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +42 +43 +43 +47 +46 +51 +51 +51 +54 +55 +59 +59 +64 +64 +64 +68 +68 +72 +72 +72 +77 +76 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +98 +100 +100 +106 +106 +109 +110 +110 +115 +116 +119 +120 +120 +125 +125 +125 +125 +125 +129 +129 +133 +133 +134 +139 +140 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +172 +175 +175 +179 +179 +179 +182 +183 +185 +185 +188 +188 +188 +191 +191 +194 +195 +194 +196 +196 +199 +198 +199 +200 +200 +201 +200 +200 +203 +202 +204 +204 +204 +204 +205 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +207 +204 +204 +204 +204 +204 +202 +203 +200 +200 +201 +201 +201 +198 +199 +197 +197 +196 +194 +195 +190 +190 +190 +188 +189 +185 +185 +184 +183 +183 +179 +178 +179 +175 +175 +173 +173 +171 +169 +169 +164 +164 +161 +161 +161 +157 +158 +151 +151 +151 +147 +147 +147 +147 +147 +143 +143 +139 +139 +139 +133 +134 +129 +129 +128 +125 +125 +120 +119 +116 +115 +116 +110 +109 +106 +106 +105 +100 +100 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +80 +76 +76 +72 +73 +69 +68 +68 +64 +64 +59 +58 +59 +55 +54 +50 +51 +51 +47 +46 +43 +43 +43 +41 +40 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +14 +14 +14 +13 +14 +14 +13 +14 +13 +14 +14 +13 +14 +13 +14 +13 +14 +13 +13 +13 +14 +14 +14 +14 +13 +16 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +30 +31 +33 +33 +36 +37 +38 +41 +41 +43 +43 +48 +47 +47 +51 +51 +55 +54 +54 +58 +59 +59 +58 +58 +64 +64 +69 +68 +68 +72 +72 +76 +76 +77 +82 +81 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +105 +106 +105 +110 +109 +116 +115 +116 +120 +119 +126 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +168 +172 +173 +174 +175 +175 +179 +179 +182 +183 +183 +185 +184 +189 +188 +188 +190 +190 +195 +195 +194 +197 +196 +199 +199 +198 +201 +200 +201 +200 +203 +202 +203 +204 +204 +204 +205 +204 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +207 +206 +204 +204 +204 +204 +203 +202 +202 +201 +201 +201 +201 +200 +198 +198 +197 +196 +196 +195 +195 +191 +191 +190 +188 +188 +185 +185 +185 +182 +182 +179 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +145 +143 +143 +140 +139 +133 +133 +133 +129 +129 +126 +125 +125 +120 +119 +120 +119 +120 +116 +115 +110 +109 +110 +106 +106 +100 +100 +98 +96 +95 +90 +90 +87 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +58 +59 +55 +55 +51 +50 +47 +47 +46 +43 +42 +41 +41 +41 +37 +36 +33 +33 +33 +30 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +14 +13 +13 +14 +13 +14 +13 +14 +13 +13 +13 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +22 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +41 +41 +41 +43 +43 +47 +46 +47 +50 +51 +54 +55 +56 +59 +59 +65 +65 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +82 +82 +82 +86 +86 +90 +90 +90 +96 +95 +100 +100 +105 +106 +105 +110 +110 +116 +115 +116 +120 +119 +126 +126 +126 +130 +130 +133 +133 +133 +139 +139 +143 +143 +144 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +172 +175 +175 +179 +179 +178 +182 +182 +184 +185 +185 +188 +189 +190 +191 +195 +194 +194 +197 +197 +198 +198 +199 +200 +200 +200 +200 +201 +202 +202 +205 +204 +204 +204 +205 +206 +207 +207 +206 +207 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +204 +205 +204 +204 +202 +203 +200 +200 +201 +200 +201 +199 +198 +199 +196 +196 +195 +195 +191 +191 +191 +189 +188 +184 +185 +185 +183 +183 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +144 +143 +143 +139 +139 +139 +139 +133 +134 +130 +129 +129 +125 +125 +120 +119 +117 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +72 +72 +68 +69 +64 +64 +65 +59 +59 +54 +54 +55 +51 +51 +47 +46 +47 +43 +43 +40 +41 +41 +36 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +14 +14 +13 +15 +14 +14 +14 +14 +13 +13 +14 +13 +13 +13 +14 +14 +13 +14 +13 +13 +15 +15 +16 +17 +17 +19 +19 +22 +21 +21 +25 +25 +27 +27 +27 +31 +31 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +44 +46 +47 +51 +51 +54 +54 +54 +59 +58 +65 +64 +65 +69 +68 +68 +69 +68 +72 +73 +76 +76 +77 +82 +82 +86 +86 +87 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +115 +119 +119 +119 +125 +125 +130 +129 +130 +133 +134 +139 +139 +143 +143 +144 +147 +147 +151 +151 +151 +157 +157 +161 +161 +160 +165 +165 +170 +169 +169 +173 +173 +174 +175 +176 +179 +179 +183 +183 +185 +185 +184 +188 +189 +190 +190 +190 +194 +195 +196 +196 +197 +198 +199 +200 +200 +200 +200 +200 +202 +203 +202 +204 +204 +204 +204 +207 +206 +206 +207 +207 +206 +207 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +205 +204 +204 +204 +205 +202 +202 +200 +200 +200 +200 +201 +199 +199 +196 +197 +197 +194 +194 +195 +194 +194 +190 +190 +188 +189 +189 +184 +184 +183 +183 +183 +179 +179 +175 +175 +172 +173 +173 +169 +169 +165 +165 +165 +161 +161 +162 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +140 +139 +139 +133 +133 +130 +129 +129 +126 +126 +120 +119 +119 +115 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +77 +76 +72 +73 +68 +68 +68 +64 +65 +59 +58 +59 +54 +54 +50 +51 +50 +47 +47 +43 +43 +41 +41 +41 +37 +37 +32 +33 +33 +31 +31 +27 +27 +27 +25 +25 +20 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +13 +13 +13 +14 +14 +14 +13 +13 +13 +14 +14 +13 +14 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +12 +15 +15 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +26 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +43 +43 +43 +47 +46 +50 +50 +51 +55 +55 +59 +59 +62 +65 +64 +68 +69 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +91 +96 +96 +100 +100 +100 +106 +106 +110 +110 +115 +115 +115 +120 +120 +125 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +143 +143 +147 +147 +147 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +168 +173 +173 +175 +175 +174 +179 +179 +182 +182 +182 +185 +185 +189 +188 +189 +190 +190 +195 +195 +197 +196 +197 +199 +199 +200 +200 +200 +200 +200 +203 +202 +202 +205 +204 +204 +204 +204 +207 +206 +206 +207 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +204 +204 +204 +205 +205 +204 +204 +204 +202 +202 +200 +200 +201 +200 +200 +198 +198 +197 +196 +197 +194 +194 +190 +191 +191 +189 +188 +185 +185 +184 +183 +183 +183 +182 +182 +179 +179 +175 +175 +175 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +134 +129 +130 +130 +125 +125 +119 +119 +116 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +65 +64 +64 +59 +58 +54 +55 +55 +50 +50 +47 +46 +47 +43 +42 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +26 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +14 +14 +13 +14 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +15 +15 +16 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +30 +31 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +45 +47 +47 +50 +50 +55 +55 +54 +58 +59 +64 +65 +65 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +95 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +116 +120 +119 +125 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +144 +148 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +164 +168 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +182 +185 +184 +188 +189 +188 +190 +190 +194 +195 +195 +197 +196 +198 +198 +198 +201 +201 +200 +200 +200 +202 +203 +205 +204 +205 +204 +205 +207 +207 +206 +207 +207 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +207 +206 +204 +204 +204 +204 +204 +202 +202 +201 +200 +201 +201 +201 +198 +199 +199 +196 +196 +194 +194 +194 +190 +190 +190 +191 +191 +188 +188 +184 +185 +185 +182 +183 +179 +178 +177 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +144 +139 +139 +133 +133 +130 +130 +130 +125 +125 +120 +120 +119 +115 +115 +109 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +69 +68 +64 +65 +59 +58 +58 +55 +54 +50 +50 +50 +47 +47 +42 +43 +43 +41 +41 +37 +37 +34 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +16 +17 +17 +16 +15 +15 +15 +16 +13 +13 +13 +13 +14 +14 +13 +14 +13 +14 +14 +13 +13 +13 +13 +14 +14 +13 +14 +14 +14 +14 +14 +13 +13 +13 +14 +14 +14 +13 +14 +14 +13 +12 +15 +15 +17 +17 +17 +19 +20 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +51 +55 +54 +55 +58 +58 +65 +64 +65 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +91 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +116 +120 +120 +126 +126 +126 +129 +129 +134 +134 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +173 +173 +172 +175 +175 +178 +179 +179 +183 +182 +185 +185 +184 +188 +189 +190 +191 +190 +194 +195 +196 +196 +196 +198 +198 +200 +200 +201 +200 +200 +202 +202 +205 +204 +204 +205 +204 +207 +206 +206 +206 +206 +207 +206 +207 +206 +207 +206 +207 +207 +206 +206 +204 +205 +205 +204 +204 +202 +202 +200 +201 +200 +200 +200 +200 +200 +201 +199 +198 +197 +197 +196 +195 +194 +191 +191 +189 +188 +189 +184 +185 +182 +183 +182 +178 +179 +174 +175 +175 +172 +172 +169 +169 +169 +165 +164 +161 +161 +161 +157 +157 +151 +151 +148 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +119 +120 +116 +116 +110 +110 +110 +106 +106 +100 +100 +96 +95 +96 +90 +90 +86 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +59 +59 +54 +54 +51 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +26 +27 +27 +25 +25 +22 +21 +22 +19 +19 +18 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +13 +13 +13 +14 +14 +13 +14 +14 +14 +14 +14 +14 +14 +13 +14 +13 +14 +13 +14 +13 +14 +13 +13 +14 +13 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +21 +21 +20 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +46 +46 +47 +50 +50 +54 +54 +58 +58 +58 +64 +64 +69 +68 +68 +72 +73 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +109 +110 +109 +115 +116 +119 +119 +119 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +182 +185 +185 +189 +189 +189 +191 +190 +195 +194 +196 +196 +196 +199 +199 +200 +200 +201 +201 +200 +200 +200 +200 +203 +202 +204 +204 +204 +204 +204 +207 +206 +207 +206 +206 +206 +207 +207 +207 +207 +207 +206 +206 +206 +206 +204 +204 +204 +205 +204 +204 +204 +203 +202 +202 +201 +200 +200 +200 +201 +199 +199 +196 +196 +194 +195 +194 +190 +190 +189 +189 +189 +185 +184 +183 +183 +182 +178 +179 +175 +174 +175 +173 +173 +169 +169 +167 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +119 +115 +116 +116 +110 +110 +105 +106 +106 +100 +100 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +69 +69 +68 +64 +64 +58 +58 +58 +55 +54 +51 +51 +50 +47 +47 +43 +43 +43 +40 +41 +37 +37 +37 +33 +33 +31 +31 +28 +27 +27 +25 +24 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +12 +14 +13 +13 +14 +13 +13 +13 +14 +13 +14 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +14 +14 +13 +13 +13 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +36 +37 +41 +41 +43 +43 +43 +47 +47 +51 +50 +51 +54 +54 +58 +59 +58 +65 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +116 +119 +120 +119 +126 +125 +129 +129 +129 +133 +133 +139 +139 +144 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +164 +165 +169 +169 +169 +173 +173 +175 +175 +175 +178 +179 +183 +182 +184 +184 +185 +189 +188 +190 +191 +191 +195 +194 +195 +194 +194 +197 +196 +198 +199 +199 +200 +200 +201 +200 +201 +202 +202 +204 +204 +204 +204 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +204 +204 +204 +204 +205 +202 +202 +200 +200 +200 +200 +200 +199 +198 +198 +196 +196 +194 +195 +194 +191 +191 +188 +188 +189 +184 +185 +183 +183 +179 +178 +179 +175 +175 +173 +174 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +134 +133 +133 +129 +129 +125 +125 +125 +120 +120 +115 +115 +115 +110 +110 +106 +106 +105 +100 +100 +96 +96 +96 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +68 +68 +68 +68 +69 +64 +64 +59 +58 +58 +54 +54 +51 +51 +51 +47 +47 +43 +43 +40 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +14 +14 +14 +14 +13 +14 +13 +14 +13 +14 +14 +14 +14 +13 +13 +13 +13 +13 +14 +13 +13 +14 +14 +14 +13 +15 +15 +18 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +28 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +50 +50 +55 +54 +59 +59 +58 +64 +64 +69 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +116 +119 +120 +126 +125 +126 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +162 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +182 +184 +185 +185 +188 +189 +190 +191 +191 +194 +195 +197 +197 +196 +198 +198 +200 +200 +200 +201 +200 +202 +202 +204 +204 +204 +204 +204 +204 +204 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +207 +206 +207 +204 +204 +204 +204 +204 +202 +202 +203 +200 +200 +201 +200 +200 +199 +198 +196 +197 +197 +195 +195 +190 +190 +188 +189 +188 +184 +185 +182 +183 +183 +179 +179 +175 +175 +175 +172 +172 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +152 +147 +147 +147 +143 +143 +139 +139 +139 +134 +133 +130 +130 +129 +125 +126 +119 +119 +119 +116 +116 +109 +110 +110 +105 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +58 +59 +54 +55 +50 +50 +46 +47 +47 +43 +43 +41 +41 +41 +37 +37 +37 +37 +37 +33 +33 +30 +31 +31 +27 +27 +25 +25 +24 +22 +21 +20 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +14 +13 +14 +13 +13 +14 +14 +14 +13 +14 +13 +13 +14 +14 +14 +14 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +21 +22 +21 +25 +25 +27 +27 +27 +31 +31 +31 +31 +31 +33 +33 +37 +37 +37 +41 +40 +43 +42 +43 +47 +47 +50 +51 +54 +54 +54 +59 +58 +65 +64 +64 +69 +68 +72 +73 +73 +76 +76 +82 +82 +83 +86 +86 +90 +90 +90 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +115 +120 +120 +126 +126 +126 +129 +130 +133 +133 +133 +140 +140 +143 +143 +144 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +172 +173 +175 +175 +179 +179 +179 +183 +183 +185 +185 +186 +189 +189 +191 +190 +194 +194 +194 +196 +196 +198 +199 +199 +200 +201 +201 +200 +200 +200 +200 +202 +202 +203 +204 +204 +204 +204 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +204 +204 +204 +204 +204 +202 +202 +203 +201 +200 +200 +200 +198 +198 +199 +197 +196 +194 +194 +195 +191 +190 +188 +188 +189 +185 +185 +183 +183 +183 +179 +179 +175 +175 +174 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +148 +147 +147 +144 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +120 +116 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +72 +73 +68 +68 +64 +64 +65 +58 +58 +55 +55 +55 +51 +50 +51 +51 +50 +47 +46 +43 +43 +43 +41 +41 +37 +37 +35 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +14 +14 +14 +14 +14 +14 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +40 +42 +43 +43 +47 +47 +51 +51 +50 +54 +54 +59 +58 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +77 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +116 +120 +120 +119 +125 +125 +130 +129 +130 +133 +133 +139 +140 +143 +144 +143 +147 +148 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +176 +179 +179 +183 +183 +184 +185 +184 +189 +188 +190 +190 +190 +194 +194 +194 +194 +195 +197 +196 +198 +198 +199 +201 +200 +200 +201 +201 +202 +203 +205 +204 +204 +204 +204 +207 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +206 +205 +204 +204 +204 +204 +202 +202 +201 +200 +201 +200 +201 +198 +199 +197 +196 +196 +195 +195 +191 +191 +190 +189 +188 +184 +184 +185 +183 +182 +178 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +144 +143 +139 +140 +134 +134 +130 +129 +129 +125 +125 +120 +120 +120 +115 +116 +110 +110 +109 +105 +106 +100 +100 +100 +96 +96 +90 +90 +91 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +64 +64 +65 +58 +59 +54 +55 +54 +51 +50 +47 +47 +45 +43 +43 +41 +41 +36 +37 +36 +33 +33 +31 +31 +31 +27 +27 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +14 +13 +13 +13 +13 +14 +14 +14 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +51 +54 +54 +55 +59 +58 +64 +64 +64 +69 +68 +72 +73 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +109 +109 +115 +116 +116 +120 +119 +126 +126 +130 +129 +130 +133 +133 +139 +139 +139 +143 +143 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +168 +169 +173 +173 +173 +175 +175 +179 +179 +179 +182 +182 +183 +183 +182 +184 +184 +189 +188 +189 +190 +190 +194 +194 +196 +196 +197 +198 +199 +200 +201 +200 +200 +200 +202 +202 +202 +204 +205 +205 +204 +204 +206 +206 +206 +207 +207 +206 +207 +207 +207 +206 +206 +206 +206 +206 +204 +204 +204 +204 +205 +202 +203 +202 +200 +200 +200 +201 +201 +198 +198 +196 +197 +196 +194 +194 +190 +190 +188 +188 +188 +185 +184 +182 +183 +183 +178 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +148 +147 +147 +143 +143 +139 +139 +139 +133 +134 +133 +134 +133 +129 +129 +126 +125 +125 +120 +120 +116 +116 +116 +110 +110 +106 +105 +99 +100 +99 +96 +96 +90 +90 +90 +86 +86 +86 +86 +85 +82 +82 +76 +77 +76 +72 +72 +68 +68 +67 +64 +64 +58 +58 +54 +54 +54 +50 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +20 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +14 +14 +13 +13 +13 +14 +14 +13 +14 +14 +14 +14 +14 +14 +14 +14 +13 +13 +13 +14 +14 +13 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +22 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +41 +41 +43 +43 +43 +47 +46 +51 +50 +55 +54 +54 +58 +58 +64 +64 +64 +68 +68 +72 +72 +72 +76 +77 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +105 +106 +106 +109 +110 +116 +116 +116 +119 +119 +125 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +145 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +169 +169 +168 +173 +172 +175 +175 +175 +179 +179 +183 +183 +184 +184 +185 +189 +189 +190 +190 +191 +194 +194 +197 +196 +196 +198 +198 +201 +200 +200 +201 +201 +202 +202 +202 +205 +204 +205 +204 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +206 +204 +204 +204 +204 +204 +202 +203 +203 +200 +200 +200 +200 +199 +198 +198 +196 +196 +194 +194 +194 +190 +190 +190 +190 +190 +189 +189 +185 +185 +184 +183 +183 +178 +179 +178 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +140 +141 +133 +133 +130 +129 +126 +126 +125 +120 +119 +115 +115 +116 +110 +110 +110 +109 +109 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +69 +68 +65 +65 +64 +65 +64 +59 +58 +55 +55 +55 +50 +50 +47 +47 +44 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +20 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +13 +14 +14 +14 +13 +14 +13 +14 +14 +13 +13 +13 +14 +13 +14 +14 +14 +14 +14 +14 +13 +14 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +26 +25 +27 +27 +28 +31 +31 +33 +33 +37 +37 +37 +42 +41 +43 +43 +43 +46 +47 +50 +51 +51 +54 +55 +59 +58 +59 +64 +64 +68 +68 +69 +72 +72 +76 +76 +83 +82 +82 +86 +86 +90 +90 +90 +96 +96 +96 +96 +96 +99 +100 +106 +106 +106 +110 +109 +116 +115 +117 +119 +120 +125 +126 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +164 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +178 +183 +183 +185 +184 +184 +188 +189 +190 +190 +191 +194 +194 +196 +197 +198 +198 +199 +200 +201 +200 +201 +200 +203 +202 +204 +204 +204 +205 +205 +206 +206 +206 +206 +206 +206 +206 +207 +207 +207 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +200 +201 +200 +200 +200 +199 +198 +198 +196 +196 +194 +194 +194 +190 +191 +188 +189 +184 +185 +185 +183 +182 +179 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +144 +143 +143 +139 +139 +133 +133 +133 +129 +129 +129 +129 +130 +125 +126 +119 +119 +120 +116 +116 +110 +110 +108 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +82 +82 +82 +76 +76 +72 +72 +73 +68 +68 +64 +64 +60 +58 +58 +55 +55 +51 +51 +51 +46 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +12 +14 +14 +14 +14 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +14 +14 +13 +13 +14 +13 +13 +13 +13 +13 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +51 +55 +55 +58 +58 +64 +64 +64 +68 +68 +72 +73 +73 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +116 +115 +116 +119 +119 +125 +126 +126 +130 +130 +130 +129 +130 +133 +133 +140 +139 +139 +143 +143 +147 +147 +149 +151 +151 +157 +157 +160 +161 +161 +165 +165 +169 +169 +168 +173 +173 +175 +175 +174 +179 +178 +183 +182 +183 +184 +185 +188 +188 +190 +191 +190 +195 +196 +196 +196 +197 +198 +198 +198 +198 +198 +201 +200 +200 +200 +200 +202 +202 +204 +204 +205 +204 +204 +206 +206 +207 +207 +207 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +204 +204 +205 +204 +204 +202 +202 +201 +200 +201 +201 +201 +199 +198 +196 +197 +196 +194 +194 +191 +190 +190 +188 +189 +185 +185 +185 +183 +183 +178 +179 +178 +175 +174 +173 +172 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +147 +147 +147 +143 +143 +139 +140 +139 +133 +133 +130 +130 +130 +126 +125 +119 +120 +116 +116 +115 +110 +110 +106 +106 +106 +100 +100 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +79 +76 +76 +72 +72 +68 +68 +69 +64 +64 +58 +58 +58 +55 +55 +50 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +34 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +14 +13 +14 +14 +13 +14 +14 +14 +13 +13 +14 +14 +13 +13 +13 +14 +14 +14 +14 +13 +14 +13 +13 +13 +13 +16 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +47 +47 +46 +51 +51 +55 +55 +55 +58 +59 +65 +65 +64 +69 +68 +72 +72 +72 +76 +76 +83 +82 +82 +86 +85 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +110 +110 +110 +116 +116 +119 +119 +120 +125 +125 +130 +129 +131 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +174 +174 +178 +179 +179 +183 +183 +185 +185 +184 +189 +188 +190 +191 +191 +195 +194 +197 +196 +196 +199 +198 +200 +200 +201 +201 +201 +203 +202 +204 +204 +204 +205 +205 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +204 +204 +205 +204 +204 +202 +203 +201 +200 +200 +200 +200 +198 +199 +198 +196 +196 +194 +194 +191 +190 +189 +189 +189 +184 +184 +183 +182 +183 +179 +179 +174 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +134 +134 +129 +129 +129 +126 +125 +119 +120 +119 +115 +116 +116 +115 +115 +110 +109 +105 +106 +106 +100 +100 +96 +96 +91 +90 +90 +86 +86 +82 +82 +82 +76 +76 +76 +76 +76 +72 +72 +68 +68 +69 +64 +65 +59 +58 +59 +55 +54 +51 +50 +47 +47 +46 +43 +43 +41 +41 +40 +37 +37 +33 +32 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +13 +14 +13 +13 +14 +14 +14 +13 +14 +13 +14 +14 +14 +13 +13 +14 +14 +13 +14 +13 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +26 +27 +27 +31 +31 +34 +34 +33 +37 +37 +41 +41 +41 +43 +42 +47 +46 +47 +51 +51 +54 +54 +54 +59 +58 +64 +64 +66 +69 +68 +72 +73 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +112 +115 +115 +119 +120 +125 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +152 +157 +157 +161 +161 +164 +165 +165 +169 +169 +173 +173 +173 +174 +175 +175 +175 +175 +179 +179 +183 +183 +182 +185 +185 +189 +189 +188 +191 +190 +194 +194 +196 +196 +196 +199 +198 +200 +200 +200 +200 +201 +203 +202 +202 +204 +205 +205 +205 +204 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +205 +204 +204 +202 +202 +202 +200 +200 +200 +201 +201 +198 +199 +197 +197 +197 +194 +195 +190 +190 +188 +189 +189 +185 +185 +183 +183 +183 +179 +179 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +163 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +139 +139 +139 +134 +133 +129 +129 +130 +125 +125 +120 +119 +116 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +73 +72 +68 +68 +65 +64 +64 +58 +59 +54 +54 +54 +50 +51 +47 +47 +47 +43 +43 +41 +41 +40 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +20 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +13 +14 +14 +14 +13 +13 +14 +14 +14 +14 +14 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +22 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +32 +33 +37 +37 +41 +41 +40 +42 +43 +46 +47 +46 +51 +50 +55 +54 +59 +59 +59 +64 +64 +68 +68 +68 +72 +72 +72 +72 +72 +76 +77 +82 +82 +83 +86 +86 +90 +90 +92 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +115 +119 +119 +126 +125 +125 +129 +130 +133 +133 +134 +139 +140 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +178 +183 +183 +185 +185 +189 +189 +188 +190 +190 +194 +194 +194 +196 +196 +198 +198 +198 +200 +200 +201 +201 +200 +202 +202 +204 +204 +205 +204 +204 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +204 +204 +204 +204 +205 +202 +202 +200 +200 +201 +200 +200 +198 +199 +196 +196 +196 +194 +195 +190 +190 +190 +188 +188 +185 +184 +184 +182 +182 +179 +178 +178 +175 +174 +173 +173 +171 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +147 +147 +147 +143 +143 +139 +139 +140 +133 +133 +129 +129 +126 +126 +126 +119 +120 +115 +116 +116 +110 +110 +106 +105 +106 +100 +101 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +77 +76 +72 +72 +72 +68 +68 +64 +64 +64 +58 +59 +55 +54 +55 +50 +50 +46 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +31 +30 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +16 +15 +13 +13 +13 +12 +13 +14 +13 +14 +14 +14 +13 +13 +14 +13 +14 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +34 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +50 +50 +55 +54 +54 +55 +55 +59 +58 +65 +64 +65 +68 +68 +72 +72 +74 +76 +77 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +116 +120 +120 +125 +125 +127 +130 +130 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +164 +169 +169 +173 +173 +175 +175 +175 +178 +179 +183 +183 +183 +184 +184 +189 +188 +188 +190 +190 +194 +194 +194 +196 +197 +199 +198 +199 +200 +200 +200 +200 +203 +202 +202 +204 +204 +204 +204 +204 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +204 +205 +204 +204 +202 +202 +202 +200 +201 +200 +200 +200 +198 +198 +199 +198 +198 +197 +196 +195 +195 +194 +191 +191 +189 +188 +187 +185 +185 +183 +183 +178 +179 +179 +174 +175 +173 +173 +173 +168 +169 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +149 +147 +147 +143 +143 +139 +139 +139 +133 +133 +130 +129 +129 +125 +125 +120 +120 +120 +116 +116 +109 +110 +110 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +65 +59 +58 +59 +54 +54 +51 +51 +47 +46 +47 +43 +43 +40 +41 +41 +37 +37 +33 +33 +33 +31 +30 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +14 +14 +14 +13 +13 +14 +13 +13 +13 +13 +15 +15 +15 +15 +15 +17 +17 +17 +19 +19 +21 +21 +22 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +36 +37 +41 +41 +40 +40 +41 +42 +43 +47 +47 +47 +51 +51 +54 +55 +58 +58 +58 +65 +65 +68 +68 +68 +72 +73 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +104 +105 +106 +109 +110 +115 +116 +116 +119 +120 +126 +125 +125 +130 +129 +133 +133 +134 +139 +139 +143 +143 +144 +147 +147 +151 +151 +157 +157 +157 +161 +161 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +178 +178 +183 +183 +183 +185 +184 +189 +189 +191 +191 +190 +194 +195 +196 +196 +197 +198 +198 +200 +200 +200 +200 +201 +203 +202 +203 +204 +205 +204 +205 +205 +206 +206 +206 +207 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +205 +204 +205 +204 +205 +202 +202 +200 +200 +200 +201 +201 +198 +199 +196 +196 +196 +194 +195 +190 +191 +190 +189 +188 +189 +188 +188 +185 +184 +183 +183 +183 +179 +179 +175 +175 +174 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +140 +133 +133 +130 +129 +125 +126 +125 +120 +120 +116 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +89 +90 +86 +86 +86 +82 +82 +76 +76 +73 +72 +72 +68 +68 +64 +64 +65 +58 +58 +55 +55 +54 +50 +51 +46 +47 +47 +43 +43 +41 +41 +40 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +16 +13 +13 +12 +13 +14 +13 +14 +13 +13 +13 +13 +14 +14 +14 +14 +13 +13 +13 +13 +14 +13 +13 +14 +14 +14 +13 +14 +13 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +32 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +50 +51 +55 +55 +55 +59 +58 +64 +64 +65 +69 +69 +72 +72 +75 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +116 +115 +119 +119 +125 +125 +130 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +182 +185 +185 +188 +188 +189 +190 +191 +195 +194 +194 +197 +197 +198 +198 +199 +201 +200 +200 +201 +202 +202 +202 +204 +204 +204 +205 +204 +206 +206 +206 +206 +206 +207 +206 +207 +207 +206 +206 +206 +206 +206 +207 +204 +204 +204 +204 +203 +203 +202 +201 +200 +200 +201 +201 +199 +198 +199 +199 +198 +196 +196 +195 +194 +195 +190 +191 +189 +189 +189 +184 +185 +182 +182 +178 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +130 +126 +125 +125 +119 +119 +116 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +58 +58 +54 +54 +55 +51 +50 +47 +46 +43 +43 +43 +41 +40 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +22 +21 +19 +19 +20 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +14 +14 +14 +13 +13 +14 +13 +14 +14 +14 +14 +13 +14 +14 +13 +13 +13 +13 +14 +13 +14 +14 +14 +14 +13 +13 +13 +15 +15 +15 +15 +15 +17 +17 +17 +19 +19 +21 +21 +22 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +42 +43 +47 +47 +51 +51 +51 +54 +54 +58 +58 +64 +64 +65 +68 +68 +72 +72 +72 +77 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +105 +106 +110 +109 +115 +116 +115 +119 +120 +126 +125 +126 +130 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +165 +165 +165 +168 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +185 +185 +185 +189 +189 +191 +190 +191 +194 +195 +196 +197 +198 +198 +198 +201 +200 +200 +200 +200 +202 +202 +204 +204 +204 +205 +205 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +204 +204 +204 +204 +205 +202 +203 +203 +202 +202 +200 +201 +200 +200 +200 +198 +199 +196 +196 +197 +194 +195 +191 +190 +188 +189 +189 +184 +184 +182 +183 +183 +179 +179 +174 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +159 +157 +157 +152 +151 +147 +147 +147 +142 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +119 +119 +116 +116 +110 +110 +106 +106 +106 +99 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +69 +68 +68 +64 +64 +58 +58 +59 +58 +58 +54 +54 +50 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +21 +21 +21 +20 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +13 +13 +13 +14 +13 +14 +14 +14 +14 +14 +14 +13 +13 +14 +14 +14 +14 +13 +13 +14 +13 +13 +13 +14 +14 +13 +13 +12 +15 +15 +16 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +32 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +42 +47 +47 +50 +50 +50 +54 +54 +59 +59 +58 +65 +64 +68 +68 +68 +72 +72 +76 +76 +77 +82 +82 +86 +86 +86 +90 +90 +96 +96 +101 +100 +100 +106 +106 +110 +110 +110 +116 +115 +120 +119 +119 +125 +126 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +152 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +172 +175 +174 +174 +179 +179 +183 +182 +183 +185 +185 +189 +189 +191 +191 +191 +195 +195 +196 +197 +196 +198 +198 +198 +198 +199 +200 +200 +200 +200 +201 +202 +204 +204 +204 +204 +204 +205 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +205 +204 +205 +203 +202 +201 +200 +200 +200 +201 +198 +199 +198 +196 +197 +194 +195 +195 +190 +191 +189 +189 +188 +185 +185 +183 +182 +183 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +130 +126 +125 +125 +120 +119 +115 +116 +115 +109 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +73 +72 +72 +68 +68 +64 +64 +64 +59 +58 +54 +55 +54 +50 +51 +47 +47 +47 +43 +43 +41 +41 +42 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +13 +14 +13 +14 +13 +13 +13 +14 +14 +14 +14 +13 +13 +14 +13 +13 +14 +14 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +36 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +51 +54 +54 +59 +58 +59 +65 +64 +68 +68 +68 +72 +73 +76 +77 +83 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +109 +115 +115 +119 +120 +120 +125 +125 +129 +129 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +178 +178 +179 +182 +183 +184 +184 +184 +188 +189 +188 +188 +189 +191 +190 +194 +195 +194 +196 +196 +198 +198 +199 +200 +200 +201 +200 +202 +202 +202 +204 +204 +204 +204 +205 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +207 +206 +207 +206 +207 +204 +204 +204 +204 +204 +202 +203 +201 +201 +201 +200 +200 +198 +198 +199 +197 +197 +194 +194 +195 +191 +191 +189 +189 +184 +185 +185 +183 +182 +179 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +156 +157 +151 +151 +147 +147 +144 +143 +143 +139 +140 +133 +133 +134 +129 +129 +125 +125 +126 +119 +119 +116 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +69 +64 +64 +64 +58 +58 +54 +55 +55 +51 +51 +47 +47 +43 +43 +42 +41 +41 +37 +37 +37 +33 +34 +33 +33 +32 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +14 +13 +14 +14 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +14 +13 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +22 +25 +25 +25 +26 +27 +31 +32 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +51 +54 +54 +58 +59 +64 +65 +65 +68 +68 +73 +72 +72 +76 +76 +76 +76 +77 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +110 +109 +110 +116 +115 +119 +119 +120 +125 +125 +129 +130 +129 +133 +134 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +162 +161 +161 +165 +165 +169 +169 +169 +173 +172 +173 +173 +173 +175 +176 +179 +179 +179 +182 +182 +184 +185 +185 +189 +189 +190 +190 +194 +195 +195 +196 +197 +198 +199 +198 +200 +201 +201 +201 +200 +200 +200 +202 +203 +203 +204 +204 +204 +204 +205 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +205 +205 +204 +205 +202 +203 +203 +201 +201 +200 +200 +198 +198 +199 +197 +196 +195 +195 +195 +191 +191 +189 +189 +188 +184 +185 +182 +182 +183 +178 +178 +175 +174 +175 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +148 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +120 +116 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +72 +72 +68 +68 +64 +64 +65 +58 +58 +55 +54 +55 +51 +51 +46 +47 +47 +42 +43 +41 +41 +41 +37 +37 +33 +33 +32 +31 +32 +27 +27 +25 +25 +25 +21 +21 +19 +19 +20 +17 +17 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +13 +14 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +13 +14 +13 +12 +15 +15 +17 +17 +20 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +46 +47 +47 +51 +51 +55 +54 +54 +58 +58 +64 +65 +65 +69 +68 +72 +72 +72 +76 +76 +82 +82 +83 +86 +86 +90 +90 +96 +95 +96 +100 +100 +106 +105 +106 +110 +110 +110 +110 +110 +116 +115 +119 +119 +119 +125 +125 +129 +129 +130 +134 +133 +139 +139 +140 +139 +139 +143 +143 +147 +147 +147 +151 +151 +151 +151 +151 +157 +157 +161 +161 +161 +165 +164 +169 +169 +170 +173 +173 +175 +175 +179 +179 +179 +183 +182 +183 +183 +182 +185 +185 +185 +185 +185 +188 +188 +191 +190 +191 +194 +195 +197 +197 +198 +198 +198 +201 +200 +200 +200 +200 +203 +203 +204 +204 +204 +205 +204 +207 +206 +206 +206 +206 +206 +207 +207 +207 +206 +207 +206 +206 +207 +206 +204 +204 +205 +204 +204 +205 +204 +203 +202 +202 +200 +200 +201 +200 +200 +199 +199 +197 +196 +196 +194 +194 +190 +190 +188 +189 +188 +185 +184 +182 +183 +182 +179 +178 +175 +174 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +120 +119 +115 +115 +110 +110 +110 +105 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +83 +82 +82 +82 +76 +77 +72 +72 +72 +69 +68 +64 +64 +61 +58 +59 +55 +55 +50 +50 +51 +47 +47 +43 +43 +43 +41 +41 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +26 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +16 +15 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +14 +13 +14 +13 +13 +14 +14 +13 +13 +14 +13 +14 +13 +14 +14 +13 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +20 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +40 +41 +41 +43 +43 +47 +47 +47 +50 +50 +55 +54 +59 +58 +58 +64 +64 +69 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +110 +110 +109 +115 +115 +120 +119 +120 +126 +125 +130 +129 +130 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +173 +173 +173 +175 +175 +178 +179 +178 +182 +182 +184 +185 +188 +189 +189 +190 +190 +194 +195 +195 +197 +196 +198 +198 +198 +200 +200 +200 +200 +200 +202 +202 +205 +204 +204 +204 +205 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +207 +206 +207 +207 +204 +204 +204 +204 +204 +202 +202 +200 +200 +200 +200 +200 +199 +199 +197 +196 +196 +195 +194 +190 +191 +190 +189 +189 +185 +184 +185 +183 +183 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +134 +132 +133 +129 +130 +126 +126 +126 +119 +119 +116 +116 +110 +109 +110 +106 +105 +100 +100 +100 +96 +96 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +74 +72 +72 +68 +69 +64 +65 +64 +58 +58 +55 +54 +55 +51 +51 +50 +51 +51 +47 +47 +42 +43 +43 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +14 +14 +14 +14 +13 +13 +14 +14 +14 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +47 +47 +47 +50 +50 +55 +54 +55 +58 +59 +58 +59 +59 +64 +64 +68 +68 +68 +73 +72 +77 +76 +77 +82 +83 +86 +86 +91 +90 +90 +96 +96 +100 +100 +100 +106 +106 +106 +106 +105 +110 +110 +115 +116 +116 +119 +120 +125 +125 +127 +130 +130 +133 +133 +139 +139 +139 +143 +144 +147 +147 +147 +151 +151 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +170 +173 +173 +175 +174 +178 +179 +179 +182 +183 +183 +183 +183 +185 +185 +189 +188 +189 +191 +191 +195 +195 +195 +197 +197 +199 +199 +200 +201 +200 +200 +201 +202 +202 +202 +204 +204 +204 +204 +205 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +205 +205 +205 +204 +204 +202 +202 +202 +200 +200 +201 +200 +200 +198 +198 +196 +196 +196 +194 +194 +191 +190 +190 +188 +189 +184 +185 +183 +182 +182 +178 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +152 +147 +147 +143 +143 +140 +139 +139 +133 +133 +130 +129 +130 +125 +125 +125 +125 +126 +120 +119 +116 +116 +115 +110 +110 +106 +106 +103 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +81 +76 +76 +76 +76 +76 +72 +72 +68 +68 +68 +65 +64 +59 +58 +55 +55 +54 +51 +50 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +19 +19 +20 +17 +17 +15 +15 +15 +15 +15 +14 +13 +13 +12 +13 +14 +13 +14 +14 +13 +13 +14 +13 +14 +13 +13 +14 +14 +14 +14 +13 +13 +13 +13 +14 +14 +14 +14 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +28 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +46 +47 +47 +51 +50 +55 +55 +55 +58 +58 +64 +64 +69 +68 +68 +73 +72 +76 +76 +76 +82 +82 +82 +82 +83 +86 +86 +90 +90 +90 +96 +96 +100 +100 +101 +106 +106 +110 +110 +115 +116 +120 +120 +119 +125 +125 +125 +129 +130 +130 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +148 +151 +151 +157 +157 +161 +161 +161 +165 +165 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +182 +183 +184 +185 +188 +189 +189 +190 +190 +194 +194 +194 +197 +196 +199 +199 +198 +200 +200 +201 +201 +200 +202 +203 +204 +205 +205 +205 +205 +207 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +204 +204 +204 +205 +204 +202 +203 +200 +200 +201 +201 +200 +199 +198 +197 +197 +197 +195 +194 +190 +191 +191 +188 +188 +185 +185 +184 +183 +183 +179 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +130 +130 +127 +125 +125 +119 +120 +116 +115 +115 +110 +110 +106 +106 +106 +100 +100 +100 +100 +100 +96 +96 +90 +90 +90 +86 +85 +82 +82 +79 +76 +77 +72 +72 +68 +69 +68 +64 +64 +59 +58 +59 +54 +54 +51 +50 +50 +47 +46 +43 +42 +42 +41 +41 +37 +37 +33 +33 +33 +31 +30 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +13 +13 +13 +13 +14 +13 +14 +14 +13 +14 +13 +14 +13 +13 +14 +14 +13 +14 +13 +14 +13 +13 +13 +12 +16 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +38 +41 +41 +43 +43 +46 +47 +47 +51 +51 +55 +55 +55 +58 +59 +59 +58 +59 +65 +65 +68 +68 +68 +72 +72 +76 +76 +79 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +106 +106 +106 +110 +110 +115 +115 +116 +120 +120 +125 +125 +127 +130 +129 +133 +133 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +178 +183 +182 +185 +185 +185 +189 +191 +191 +190 +190 +194 +194 +194 +195 +194 +197 +197 +199 +199 +200 +201 +201 +200 +200 +202 +202 +202 +204 +204 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +205 +204 +204 +205 +204 +202 +202 +202 +201 +200 +201 +201 +200 +198 +198 +196 +196 +197 +194 +195 +190 +190 +191 +189 +189 +185 +185 +183 +182 +182 +179 +179 +175 +175 +175 +173 +173 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +148 +144 +143 +143 +139 +139 +133 +133 +133 +129 +129 +129 +129 +130 +126 +126 +119 +120 +120 +115 +115 +109 +110 +107 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +73 +68 +68 +69 +64 +64 +58 +58 +54 +54 +55 +51 +51 +46 +47 +47 +43 +43 +41 +41 +40 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +19 +20 +19 +17 +17 +15 +15 +15 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +14 +13 +14 +14 +14 +14 +13 +14 +14 +13 +13 +14 +13 +13 +14 +13 +13 +13 +14 +13 +13 +14 +13 +13 +12 +15 +15 +17 +16 +17 +19 +19 +21 +21 +26 +25 +24 +27 +27 +31 +31 +31 +33 +33 +33 +33 +33 +36 +37 +40 +41 +41 +43 +43 +47 +47 +47 +51 +51 +54 +54 +58 +59 +58 +64 +64 +68 +68 +68 +72 +72 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +95 +96 +97 +100 +100 +106 +106 +106 +109 +110 +115 +115 +116 +119 +119 +125 +125 +126 +129 +129 +133 +133 +133 +140 +139 +143 +143 +147 +147 +147 +151 +151 +157 +158 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +178 +182 +183 +184 +184 +189 +188 +189 +190 +190 +194 +195 +194 +196 +197 +198 +198 +199 +200 +200 +200 +200 +200 +202 +202 +204 +204 +205 +204 +204 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +205 +205 +204 +204 +204 +203 +202 +200 +201 +201 +200 +200 +199 +199 +197 +196 +196 +194 +195 +190 +191 +190 +189 +189 +189 +189 +188 +185 +184 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +164 +165 +165 +161 +161 +157 +158 +157 +151 +151 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +132 +130 +129 +125 +126 +119 +120 +119 +115 +115 +109 +109 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +68 +68 +65 +64 +58 +58 +59 +54 +55 +51 +50 +50 +46 +46 +42 +43 +42 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +14 +13 +13 +13 +14 +13 +14 +13 +13 +14 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +20 +19 +19 +21 +21 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +36 +40 +41 +43 +43 +43 +47 +47 +50 +51 +51 +54 +54 +54 +54 +55 +58 +58 +64 +64 +64 +69 +68 +72 +72 +74 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +109 +116 +116 +116 +119 +120 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +174 +175 +175 +179 +178 +183 +183 +182 +185 +185 +189 +189 +189 +190 +190 +194 +195 +194 +196 +197 +198 +198 +199 +200 +200 +200 +200 +202 +202 +203 +204 +204 +204 +204 +205 +206 +206 +206 +207 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +207 +204 +204 +204 +204 +202 +202 +202 +200 +200 +200 +200 +200 +198 +199 +196 +197 +196 +194 +194 +191 +190 +191 +189 +189 +185 +185 +183 +182 +183 +178 +178 +174 +175 +175 +173 +173 +169 +169 +169 +165 +165 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +144 +143 +143 +139 +139 +133 +133 +130 +129 +129 +129 +130 +126 +125 +119 +119 +119 +115 +115 +110 +110 +110 +106 +106 +100 +99 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +59 +59 +55 +54 +50 +50 +47 +46 +46 +43 +43 +41 +41 +41 +36 +37 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +13 +14 +14 +14 +14 +14 +14 +13 +14 +13 +13 +14 +13 +13 +14 +13 +14 +14 +14 +13 +13 +13 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +37 +37 +38 +41 +41 +43 +43 +43 +47 +46 +51 +51 +54 +55 +54 +58 +59 +64 +64 +64 +68 +69 +72 +73 +72 +76 +77 +82 +82 +82 +86 +86 +90 +90 +90 +96 +95 +100 +100 +105 +106 +106 +109 +110 +116 +115 +115 +120 +119 +126 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +144 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +164 +165 +169 +169 +173 +173 +173 +174 +174 +179 +179 +178 +182 +183 +185 +184 +185 +188 +189 +191 +191 +195 +194 +194 +196 +197 +198 +198 +198 +200 +200 +200 +200 +200 +202 +203 +204 +204 +205 +204 +205 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +204 +204 +204 +204 +204 +204 +204 +202 +203 +202 +200 +200 +200 +201 +199 +198 +199 +196 +197 +194 +195 +194 +190 +191 +189 +188 +188 +184 +184 +184 +185 +184 +183 +182 +179 +179 +179 +175 +175 +173 +173 +171 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +134 +134 +130 +130 +125 +125 +120 +120 +119 +116 +116 +109 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +69 +68 +68 +64 +64 +58 +58 +59 +55 +55 +51 +50 +51 +47 +47 +42 +43 +42 +41 +41 +37 +37 +37 +33 +33 +31 +31 +28 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +13 +14 +14 +14 +13 +14 +14 +13 +14 +14 +13 +13 +13 +14 +14 +14 +13 +14 +14 +13 +14 +13 +13 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +36 +37 +36 +40 +40 +43 +42 +47 +46 +47 +51 +50 +54 +55 +54 +58 +58 +64 +64 +64 +68 +68 +72 +72 +73 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +109 +109 +116 +116 +116 +120 +119 +125 +125 +126 +130 +129 +133 +133 +140 +140 +139 +143 +143 +147 +147 +147 +151 +151 +157 +156 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +183 +183 +183 +185 +185 +188 +188 +189 +191 +191 +194 +194 +195 +197 +197 +198 +198 +199 +200 +201 +200 +200 +201 +202 +202 +205 +204 +205 +204 +205 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +204 +204 +204 +204 +205 +202 +202 +200 +200 +200 +201 +200 +199 +198 +198 +196 +197 +197 +197 +196 +195 +195 +190 +190 +191 +188 +189 +184 +185 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +140 +139 +139 +133 +133 +129 +129 +130 +125 +126 +119 +119 +119 +116 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +72 +72 +72 +68 +68 +64 +64 +65 +59 +58 +54 +55 +55 +51 +51 +46 +46 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +20 +17 +17 +15 +15 +16 +15 +15 +13 +13 +12 +13 +14 +13 +13 +13 +14 +13 +14 +13 +13 +13 +14 +14 +13 +14 +14 +14 +14 +13 +14 +14 +13 +14 +14 +13 +13 +13 +13 +13 +13 +13 +15 +15 +16 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +32 +36 +37 +37 +41 +41 +43 +42 +43 +47 +46 +51 +51 +51 +54 +54 +59 +59 +64 +65 +65 +68 +68 +73 +73 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +110 +116 +116 +115 +119 +119 +125 +126 +126 +130 +129 +133 +134 +133 +139 +140 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +164 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +185 +185 +184 +189 +189 +190 +191 +191 +195 +194 +197 +197 +197 +199 +199 +200 +201 +201 +200 +200 +200 +201 +201 +200 +200 +203 +202 +204 +204 +204 +204 +204 +206 +207 +207 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +205 +204 +204 +204 +204 +205 +202 +202 +203 +200 +200 +200 +200 +199 +198 +199 +197 +197 +194 +194 +194 +190 +191 +189 +188 +189 +184 +185 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +140 +139 +134 +133 +129 +129 +129 +125 +125 +119 +120 +116 +116 +115 +109 +109 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +73 +72 +68 +68 +65 +64 +65 +59 +58 +55 +55 +55 +50 +50 +47 +47 +47 +43 +43 +40 +41 +41 +37 +37 +33 +33 +34 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +13 +14 +14 +13 +13 +14 +14 +13 +14 +14 +14 +13 +13 +13 +14 +13 +13 +13 +14 +14 +14 +13 +13 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +26 +27 +27 +31 +31 +34 +33 +33 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +51 +51 +54 +54 +58 +59 +58 +64 +64 +68 +68 +69 +72 +73 +76 +76 +76 +82 +82 +86 +86 +91 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +116 +120 +120 +119 +125 +125 +129 +129 +129 +133 +134 +139 +139 +144 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +160 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +185 +184 +184 +189 +188 +190 +191 +191 +194 +194 +195 +195 +194 +197 +196 +199 +198 +198 +200 +200 +200 +200 +201 +202 +202 +204 +204 +204 +204 +204 +206 +207 +206 +207 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +204 +205 +204 +205 +202 +202 +200 +201 +201 +200 +200 +199 +199 +199 +197 +196 +195 +194 +194 +190 +190 +188 +188 +189 +184 +184 +182 +183 +178 +179 +179 +174 +175 +173 +173 +173 +168 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +133 +134 +133 +129 +129 +125 +125 +126 +120 +119 +116 +116 +116 +110 +109 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +83 +82 +82 +76 +77 +72 +72 +72 +68 +68 +65 +65 +64 +59 +59 +54 +54 +55 +50 +51 +47 +47 +47 +43 +43 +41 +40 +37 +37 +36 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +14 +13 +12 +12 +13 +14 +14 +14 +14 +13 +13 +13 +14 +13 +14 +13 +13 +14 +14 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +46 +47 +51 +51 +54 +54 +55 +58 +59 +64 +64 +64 +68 +68 +72 +72 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +99 +106 +106 +105 +110 +110 +115 +116 +116 +120 +119 +125 +125 +130 +130 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +166 +169 +169 +173 +173 +174 +175 +175 +179 +179 +183 +182 +183 +185 +184 +185 +185 +185 +189 +188 +191 +191 +190 +194 +194 +196 +196 +197 +199 +199 +200 +200 +200 +201 +200 +202 +203 +205 +204 +204 +205 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +207 +207 +204 +204 +204 +205 +204 +202 +202 +202 +201 +201 +201 +200 +201 +198 +199 +197 +197 +197 +194 +194 +191 +190 +189 +189 +189 +185 +184 +183 +183 +182 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +130 +129 +130 +125 +125 +120 +120 +120 +116 +115 +110 +109 +110 +106 +106 +100 +100 +96 +96 +95 +90 +91 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +69 +64 +64 +58 +58 +59 +54 +55 +51 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +22 +21 +20 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +13 +12 +13 +13 +14 +14 +13 +14 +14 +14 +14 +14 +14 +13 +13 +14 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +50 +51 +54 +54 +59 +59 +65 +64 +64 +68 +68 +72 +72 +72 +76 +77 +82 +83 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +116 +116 +116 +119 +120 +125 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +152 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +179 +183 +183 +185 +185 +184 +189 +188 +190 +190 +192 +194 +195 +196 +196 +198 +199 +198 +200 +200 +200 +201 +201 +202 +202 +202 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +207 +206 +206 +204 +204 +204 +204 +205 +202 +202 +203 +201 +200 +200 +200 +201 +199 +199 +196 +197 +194 +194 +195 +190 +190 +188 +189 +188 +184 +184 +182 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +134 +129 +129 +129 +125 +125 +120 +119 +119 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +69 +68 +64 +64 +58 +58 +55 +54 +55 +50 +51 +46 +47 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +15 +16 +15 +13 +13 +12 +13 +14 +13 +13 +13 +13 +14 +13 +13 +14 +13 +14 +14 +13 +14 +14 +13 +13 +13 +14 +13 +14 +13 +13 +13 +13 +13 +13 +13 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +36 +37 +41 +41 +43 +43 +43 +47 +47 +51 +50 +54 +54 +54 +58 +58 +65 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +95 +100 +100 +106 +106 +106 +109 +110 +116 +115 +116 +119 +120 +125 +125 +126 +130 +129 +133 +133 +133 +139 +139 +143 +143 +144 +147 +147 +151 +151 +156 +157 +157 +161 +160 +165 +165 +165 +169 +169 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +183 +185 +185 +188 +189 +190 +190 +190 +194 +194 +196 +197 +196 +198 +198 +199 +198 +198 +200 +200 +200 +200 +200 +202 +202 +204 +204 +205 +204 +204 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +204 +204 +204 +204 +205 +203 +203 +200 +200 +201 +201 +201 +198 +198 +197 +196 +196 +194 +195 +190 +191 +190 +189 +189 +184 +185 +185 +182 +182 +179 +178 +179 +174 +175 +172 +173 +170 +169 +169 +166 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +120 +119 +119 +116 +116 +110 +110 +109 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +77 +72 +72 +69 +69 +68 +64 +64 +58 +58 +59 +54 +54 +54 +54 +55 +51 +51 +46 +46 +47 +43 +43 +40 +41 +41 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +21 +21 +22 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +14 +13 +13 +13 +14 +14 +13 +14 +13 +14 +13 +14 +14 +13 +13 +14 +14 +13 +14 +13 +14 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +41 +41 +41 +42 +43 +47 +47 +46 +50 +51 +55 +54 +55 +58 +58 +64 +65 +64 +68 +69 +72 +72 +72 +76 +77 +82 +82 +87 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +109 +109 +116 +115 +116 +120 +120 +125 +125 +126 +129 +129 +134 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +170 +173 +173 +175 +175 +178 +179 +178 +183 +183 +185 +184 +184 +189 +189 +189 +189 +189 +190 +191 +194 +195 +195 +197 +197 +198 +199 +199 +200 +201 +200 +200 +202 +202 +202 +204 +204 +204 +205 +204 +206 +206 +206 +207 +207 +206 +207 +206 +207 +207 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +202 +200 +200 +200 +201 +200 +198 +198 +197 +196 +196 +195 +194 +190 +191 +190 +189 +189 +185 +185 +182 +183 +182 +179 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +152 +147 +147 +143 +143 +140 +139 +139 +133 +134 +129 +130 +130 +126 +125 +119 +119 +119 +116 +115 +110 +110 +110 +105 +106 +100 +100 +100 +96 +96 +90 +90 +86 +86 +86 +82 +83 +76 +76 +76 +72 +72 +72 +73 +72 +68 +68 +64 +64 +65 +58 +58 +54 +55 +52 +51 +50 +46 +46 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +33 +33 +33 +31 +31 +27 +27 +27 +26 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +14 +13 +14 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +14 +14 +13 +14 +13 +13 +13 +14 +13 +15 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +42 +43 +47 +47 +47 +51 +51 +54 +54 +55 +59 +59 +64 +65 +69 +68 +69 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +105 +106 +106 +110 +110 +115 +115 +120 +120 +120 +125 +125 +130 +129 +129 +134 +133 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +152 +152 +157 +157 +161 +161 +164 +165 +165 +169 +169 +173 +173 +173 +175 +175 +175 +175 +175 +179 +179 +182 +183 +183 +185 +184 +188 +188 +189 +190 +190 +195 +195 +196 +196 +196 +198 +199 +200 +200 +200 +200 +200 +203 +203 +202 +204 +204 +204 +204 +205 +206 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +205 +204 +204 +204 +205 +202 +202 +202 +200 +200 +200 +200 +200 +197 +199 +196 +197 +195 +194 +195 +190 +191 +189 +188 +188 +184 +185 +183 +183 +183 +179 +179 +175 +175 +174 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +144 +140 +139 +139 +133 +133 +129 +129 +129 +126 +125 +119 +119 +120 +116 +116 +110 +109 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +90 +90 +90 +86 +86 +82 +82 +82 +77 +77 +72 +72 +75 +68 +68 +64 +64 +58 +58 +59 +54 +55 +50 +50 +51 +47 +47 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +32 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +14 +14 +13 +14 +14 +13 +13 +14 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +32 +36 +37 +41 +41 +41 +43 +43 +47 +46 +52 +51 +50 +54 +55 +58 +59 +59 +64 +64 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +96 +96 +96 +100 +99 +106 +106 +106 +110 +110 +110 +109 +110 +116 +116 +120 +119 +120 +125 +125 +129 +130 +130 +133 +133 +140 +140 +144 +143 +143 +147 +147 +151 +151 +151 +157 +157 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +174 +175 +175 +178 +179 +182 +182 +183 +185 +184 +185 +184 +185 +189 +189 +191 +190 +190 +195 +194 +196 +196 +196 +196 +196 +198 +199 +200 +200 +200 +200 +200 +202 +202 +203 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +204 +204 +204 +204 +205 +202 +202 +202 +200 +200 +201 +201 +201 +198 +198 +196 +196 +196 +194 +194 +190 +191 +191 +188 +189 +184 +185 +183 +183 +183 +179 +179 +174 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +139 +140 +140 +133 +133 +129 +129 +129 +126 +125 +125 +125 +125 +119 +119 +115 +116 +115 +110 +110 +106 +105 +106 +100 +100 +96 +96 +91 +90 +90 +86 +86 +82 +83 +82 +76 +76 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +58 +56 +54 +54 +50 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +28 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +14 +13 +14 +14 +14 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +28 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +46 +47 +47 +51 +50 +55 +55 +55 +58 +58 +65 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +102 +106 +106 +110 +109 +115 +116 +116 +120 +119 +125 +125 +126 +129 +130 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +149 +151 +151 +157 +157 +161 +161 +160 +165 +165 +169 +168 +169 +173 +173 +175 +175 +175 +178 +179 +182 +183 +183 +184 +185 +188 +189 +190 +190 +191 +195 +194 +196 +196 +196 +198 +198 +200 +200 +200 +201 +200 +202 +203 +202 +204 +204 +205 +204 +205 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +205 +204 +204 +205 +202 +202 +202 +201 +201 +200 +200 +200 +198 +199 +196 +196 +195 +194 +194 +190 +190 +188 +188 +189 +185 +184 +184 +185 +185 +182 +182 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +147 +147 +147 +143 +143 +139 +139 +139 +133 +134 +129 +130 +127 +125 +125 +119 +119 +115 +116 +115 +110 +110 +106 +106 +106 +99 +100 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +59 +59 +54 +55 +50 +51 +51 +47 +47 +43 +43 +43 +41 +40 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +13 +14 +14 +14 +14 +14 +14 +13 +13 +13 +14 +14 +13 +14 +14 +13 +14 +14 +13 +14 +14 +13 +14 +13 +15 +15 +15 +17 +17 +19 +20 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +32 +37 +37 +37 +41 +41 +43 +43 +48 +47 +46 +51 +51 +54 +54 +55 +58 +58 +64 +64 +64 +68 +68 +72 +72 +72 +75 +76 +82 +82 +83 +85 +86 +90 +90 +96 +96 +95 +100 +100 +105 +106 +106 +110 +110 +110 +110 +110 +116 +116 +120 +119 +119 +119 +119 +126 +125 +127 +129 +129 +133 +134 +139 +140 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +175 +175 +175 +179 +179 +182 +183 +183 +184 +185 +188 +189 +188 +191 +190 +195 +195 +194 +196 +196 +199 +198 +199 +200 +200 +200 +200 +203 +202 +202 +204 +204 +204 +205 +204 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +204 +205 +205 +204 +202 +202 +202 +200 +201 +200 +200 +201 +198 +198 +199 +199 +199 +196 +197 +195 +194 +194 +191 +191 +188 +188 +188 +184 +185 +183 +183 +179 +179 +179 +175 +175 +174 +173 +173 +169 +169 +168 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +149 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +126 +126 +125 +119 +120 +116 +116 +116 +110 +110 +106 +105 +101 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +69 +68 +65 +65 +65 +58 +58 +54 +55 +51 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +14 +13 +13 +14 +14 +13 +13 +14 +13 +13 +14 +13 +14 +13 +13 +14 +13 +14 +14 +13 +13 +13 +13 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +46 +47 +47 +50 +50 +55 +55 +58 +58 +59 +65 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +82 +82 +82 +86 +86 +89 +90 +90 +96 +96 +99 +100 +105 +106 +106 +110 +109 +115 +116 +116 +119 +119 +125 +125 +125 +129 +130 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +156 +157 +157 +161 +161 +165 +165 +165 +169 +169 +169 +169 +169 +173 +174 +175 +175 +175 +178 +178 +183 +183 +183 +184 +185 +189 +189 +191 +190 +190 +194 +194 +196 +196 +196 +198 +199 +201 +201 +201 +201 +201 +202 +202 +202 +204 +205 +204 +204 +205 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +207 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +202 +201 +201 +200 +201 +200 +199 +199 +196 +197 +194 +194 +194 +191 +190 +189 +189 +189 +184 +184 +185 +184 +184 +183 +182 +178 +179 +178 +175 +175 +173 +173 +171 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +147 +147 +147 +143 +143 +139 +139 +140 +133 +134 +129 +129 +126 +125 +125 +120 +120 +115 +116 +116 +110 +109 +106 +105 +105 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +83 +82 +76 +76 +72 +73 +72 +68 +69 +64 +64 +65 +58 +58 +54 +54 +54 +50 +50 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +14 +12 +13 +14 +13 +14 +13 +14 +13 +13 +13 +13 +14 +14 +14 +13 +14 +14 +13 +13 +14 +13 +14 +14 +13 +13 +14 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +32 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +50 +51 +51 +55 +55 +58 +58 +58 +64 +64 +65 +64 +64 +69 +68 +72 +72 +72 +76 +76 +82 +82 +85 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +116 +115 +120 +120 +125 +125 +126 +130 +129 +133 +134 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +172 +173 +175 +175 +179 +179 +182 +183 +183 +185 +185 +189 +189 +189 +191 +191 +195 +195 +194 +196 +196 +199 +198 +198 +200 +200 +200 +200 +201 +202 +202 +204 +204 +205 +205 +205 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +204 +204 +204 +205 +205 +202 +203 +201 +201 +200 +200 +200 +199 +197 +197 +196 +196 +194 +194 +190 +190 +190 +188 +189 +185 +184 +185 +182 +183 +178 +178 +179 +175 +175 +173 +173 +168 +169 +168 +165 +165 +161 +161 +161 +157 +157 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +140 +134 +133 +133 +130 +130 +125 +126 +126 +119 +119 +115 +116 +115 +109 +110 +106 +106 +105 +100 +100 +96 +96 +96 +90 +90 +86 +86 +82 +82 +82 +77 +76 +72 +72 +72 +69 +68 +68 +68 +68 +64 +64 +58 +58 +58 +55 +54 +51 +51 +51 +46 +46 +43 +42 +41 +41 +41 +36 +37 +33 +33 +33 +31 +31 +26 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +16 +17 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +14 +14 +13 +13 +14 +14 +14 +13 +13 +13 +13 +13 +14 +13 +14 +14 +14 +14 +13 +14 +13 +14 +14 +13 +15 +15 +15 +17 +17 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +28 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +47 +47 +47 +51 +50 +54 +54 +54 +59 +58 +64 +64 +66 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +119 +119 +119 +125 +126 +129 +129 +129 +133 +134 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +164 +170 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +182 +185 +184 +189 +189 +188 +190 +191 +194 +194 +194 +197 +196 +199 +199 +201 +200 +200 +200 +201 +202 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +207 +207 +206 +206 +207 +206 +206 +206 +206 +204 +204 +204 +205 +204 +202 +203 +202 +200 +200 +200 +200 +200 +200 +201 +199 +198 +199 +197 +197 +195 +195 +193 +191 +190 +188 +188 +184 +185 +185 +183 +182 +179 +178 +178 +175 +175 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +158 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +125 +126 +119 +119 +120 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +69 +65 +65 +58 +58 +55 +55 +55 +51 +50 +51 +51 +50 +47 +47 +43 +42 +43 +41 +41 +36 +37 +37 +33 +33 +31 +30 +31 +27 +27 +25 +25 +22 +20 +21 +19 +18 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +13 +14 +14 +14 +13 +14 +13 +14 +14 +13 +13 +13 +14 +13 +13 +14 +14 +13 +13 +14 +13 +13 +14 +13 +12 +15 +15 +17 +17 +18 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +33 +33 +33 +37 +37 +41 +41 +41 +42 +43 +47 +47 +46 +51 +50 +55 +55 +58 +59 +59 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +99 +99 +100 +106 +106 +110 +110 +110 +115 +116 +119 +119 +119 +125 +126 +129 +129 +129 +133 +134 +139 +139 +140 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +182 +183 +183 +184 +184 +189 +189 +191 +190 +190 +195 +194 +197 +196 +197 +199 +199 +200 +200 +201 +200 +201 +203 +202 +202 +204 +204 +204 +204 +205 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +204 +204 +204 +204 +205 +202 +202 +200 +201 +200 +200 +201 +199 +198 +196 +196 +196 +195 +194 +191 +191 +190 +188 +189 +189 +188 +188 +185 +185 +183 +183 +183 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +140 +134 +133 +129 +129 +125 +126 +125 +119 +120 +115 +116 +116 +110 +110 +106 +106 +106 +101 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +77 +76 +73 +72 +72 +68 +68 +65 +64 +64 +58 +58 +55 +54 +55 +50 +51 +47 +46 +47 +43 +43 +41 +41 +41 +37 +37 +33 +32 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +16 +13 +13 +12 +13 +14 +14 +13 +14 +14 +13 +13 +13 +13 +14 +13 +13 +14 +14 +14 +13 +14 +14 +13 +14 +14 +14 +14 +14 +14 +13 +13 +14 +13 +13 +16 +15 +17 +17 +17 +19 +19 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +32 +33 +33 +37 +36 +41 +41 +41 +42 +43 +47 +46 +47 +50 +50 +54 +55 +55 +58 +58 +64 +64 +64 +68 +68 +73 +72 +73 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +115 +115 +119 +120 +126 +126 +130 +129 +129 +133 +133 +139 +140 +139 +143 +143 +147 +146 +147 +151 +151 +157 +156 +157 +161 +161 +165 +164 +165 +169 +169 +173 +173 +175 +174 +175 +178 +179 +183 +182 +183 +185 +185 +189 +189 +189 +191 +190 +194 +194 +195 +196 +197 +198 +198 +199 +200 +200 +200 +200 +202 +202 +203 +204 +204 +204 +204 +204 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +207 +207 +206 +206 +204 +204 +204 +204 +204 +202 +202 +200 +200 +201 +201 +200 +200 +200 +200 +198 +199 +196 +197 +196 +194 +195 +190 +191 +189 +188 +189 +185 +184 +183 +182 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +160 +161 +161 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +120 +119 +115 +116 +109 +109 +109 +106 +106 +100 +100 +95 +96 +96 +90 +90 +86 +86 +86 +83 +82 +76 +76 +76 +73 +72 +68 +68 +68 +64 +64 +59 +59 +59 +54 +54 +51 +51 +47 +47 +46 +43 +43 +41 +41 +40 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +14 +14 +14 +13 +14 +13 +13 +14 +13 +14 +14 +14 +13 +14 +14 +14 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +32 +37 +37 +41 +41 +41 +43 +43 +47 +46 +47 +50 +50 +54 +55 +58 +59 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +81 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +110 +110 +110 +116 +116 +120 +120 +119 +125 +126 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +174 +178 +179 +183 +182 +183 +184 +185 +188 +188 +188 +191 +190 +194 +195 +196 +196 +197 +198 +199 +200 +201 +200 +201 +201 +200 +200 +200 +203 +202 +204 +205 +205 +204 +204 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +207 +204 +204 +204 +204 +204 +204 +204 +203 +202 +203 +200 +200 +200 +200 +198 +198 +199 +196 +197 +194 +194 +195 +190 +190 +188 +188 +188 +185 +185 +183 +182 +182 +178 +179 +175 +174 +175 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +134 +133 +129 +130 +129 +125 +125 +120 +119 +116 +116 +116 +110 +110 +106 +106 +106 +99 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +72 +72 +68 +68 +65 +64 +64 +58 +58 +54 +55 +55 +51 +51 +46 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +18 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +13 +14 +14 +13 +14 +14 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +14 +13 +14 +14 +14 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +26 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +40 +43 +43 +43 +47 +47 +50 +50 +51 +54 +54 +59 +58 +59 +64 +65 +68 +68 +69 +72 +72 +76 +77 +77 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +109 +110 +116 +116 +119 +120 +119 +125 +125 +130 +129 +129 +134 +133 +140 +139 +144 +143 +143 +147 +147 +151 +151 +151 +157 +157 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +183 +183 +183 +185 +185 +189 +189 +189 +191 +191 +190 +190 +191 +194 +195 +196 +197 +196 +199 +198 +200 +200 +201 +200 +200 +202 +202 +205 +205 +204 +205 +204 +206 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +205 +204 +205 +205 +204 +202 +202 +202 +201 +200 +200 +200 +200 +198 +198 +197 +196 +197 +194 +195 +191 +191 +191 +189 +188 +184 +184 +182 +183 +183 +178 +178 +174 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +140 +139 +139 +133 +133 +129 +129 +129 +125 +125 +120 +119 +120 +116 +115 +110 +110 +109 +106 +106 +100 +100 +100 +96 +96 +90 +90 +87 +86 +86 +82 +82 +76 +76 +76 +72 +73 +69 +68 +68 +64 +64 +58 +58 +58 +54 +54 +51 +50 +51 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +13 +13 +13 +13 +13 +14 +14 +13 +13 +14 +14 +14 +13 +13 +13 +14 +14 +13 +14 +14 +14 +13 +13 +14 +14 +13 +13 +13 +13 +13 +16 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +42 +43 +43 +47 +47 +51 +50 +51 +55 +54 +59 +58 +65 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +81 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +109 +116 +115 +116 +119 +119 +125 +125 +126 +129 +130 +134 +133 +133 +140 +139 +143 +143 +143 +147 +147 +151 +151 +152 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +175 +175 +175 +178 +179 +182 +183 +183 +185 +185 +189 +189 +189 +191 +191 +194 +195 +196 +197 +196 +198 +198 +200 +200 +200 +200 +201 +200 +200 +200 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +205 +204 +205 +204 +204 +202 +202 +200 +200 +201 +200 +201 +198 +198 +197 +196 +196 +195 +195 +190 +190 +191 +188 +189 +184 +184 +185 +183 +182 +179 +179 +179 +175 +175 +172 +173 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +134 +133 +129 +130 +125 +125 +125 +119 +120 +115 +116 +110 +109 +110 +106 +106 +100 +100 +100 +96 +96 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +72 +72 +68 +68 +64 +64 +64 +58 +58 +55 +55 +55 +51 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +32 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +17 +17 +17 +15 +16 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +13 +14 +13 +13 +14 +13 +14 +13 +13 +13 +13 +14 +14 +14 +13 +14 +14 +13 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +46 +47 +46 +50 +50 +55 +54 +55 +58 +59 +64 +65 +64 +68 +68 +72 +73 +72 +76 +76 +82 +82 +83 +86 +85 +90 +90 +97 +96 +96 +100 +99 +106 +106 +106 +110 +110 +116 +115 +115 +119 +119 +125 +125 +126 +129 +130 +133 +133 +134 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +180 +183 +183 +184 +184 +189 +189 +188 +191 +190 +195 +195 +195 +197 +196 +196 +197 +196 +199 +198 +200 +201 +200 +200 +200 +202 +202 +204 +205 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +207 +206 +206 +206 +206 +204 +204 +205 +205 +205 +203 +202 +200 +201 +200 +200 +200 +198 +198 +198 +196 +197 +194 +194 +194 +190 +190 +189 +189 +189 +184 +185 +183 +183 +182 +179 +178 +175 +175 +173 +173 +173 +169 +169 +166 +165 +164 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +140 +133 +133 +129 +129 +126 +125 +125 +120 +120 +116 +116 +115 +110 +110 +106 +106 +106 +100 +99 +96 +96 +96 +90 +90 +87 +86 +86 +82 +82 +76 +76 +73 +72 +72 +68 +68 +64 +64 +64 +58 +58 +54 +55 +55 +51 +51 +46 +47 +47 +43 +43 +41 +41 +41 +37 +36 +33 +33 +31 +31 +32 +28 +27 +25 +25 +25 +21 +21 +21 +21 +20 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +13 +13 +14 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +13 +14 +14 +13 +14 +14 +13 +13 +13 +13 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +41 +40 +41 +43 +42 +47 +47 +47 +51 +51 +55 +54 +54 +58 +58 +64 +64 +64 +68 +68 +72 +72 +72 +77 +76 +82 +82 +87 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +115 +119 +119 +126 +125 +126 +129 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +147 +151 +151 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +168 +168 +170 +173 +172 +175 +175 +178 +178 +179 +183 +182 +185 +185 +185 +189 +189 +189 +189 +188 +191 +190 +194 +194 +195 +196 +196 +198 +198 +200 +200 +201 +200 +201 +202 +202 +203 +205 +205 +204 +204 +204 +207 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +205 +205 +205 +204 +204 +202 +203 +202 +200 +200 +201 +200 +200 +198 +198 +196 +197 +196 +194 +194 +190 +190 +191 +188 +189 +185 +184 +183 +183 +182 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +140 +139 +140 +133 +133 +130 +129 +130 +125 +126 +120 +120 +119 +115 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +73 +72 +72 +72 +69 +68 +64 +64 +64 +58 +59 +55 +55 +55 +51 +50 +46 +47 +44 +43 +43 +41 +41 +37 +37 +37 +33 +33 +33 +33 +32 +31 +31 +27 +27 +27 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +14 +14 +13 +13 +13 +13 +14 +13 +13 +14 +14 +14 +13 +13 +13 +13 +13 +13 +14 +14 +13 +14 +13 +13 +14 +14 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +42 +43 +43 +47 +47 +51 +51 +51 +54 +55 +59 +58 +65 +65 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +115 +115 +115 +119 +119 +125 +125 +125 +129 +129 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +153 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +172 +173 +175 +175 +175 +175 +175 +178 +179 +182 +183 +182 +184 +185 +188 +189 +190 +190 +191 +195 +194 +196 +196 +196 +198 +199 +201 +200 +200 +200 +200 +202 +203 +202 +204 +204 +204 +204 +205 +207 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +205 +204 +203 +203 +202 +201 +200 +201 +200 +201 +198 +198 +196 +196 +194 +194 +194 +190 +191 +188 +188 +188 +185 +184 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +134 +133 +129 +129 +129 +125 +125 +119 +120 +120 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +90 +90 +90 +86 +86 +82 +82 +82 +77 +76 +72 +72 +68 +68 +68 +64 +64 +58 +58 +59 +54 +54 +51 +51 +51 +47 +47 +46 +47 +47 +42 +43 +41 +41 +41 +37 +36 +33 +32 +31 +31 +31 +27 +27 +25 +25 +24 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +14 +14 +13 +14 +13 +14 +14 +14 +14 +14 +14 +14 +13 +13 +14 +14 +14 +13 +12 +15 +15 +18 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +40 +41 +41 +43 +43 +47 +47 +50 +51 +50 +54 +54 +59 +58 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +100 +100 +100 +105 +106 +109 +110 +110 +115 +115 +116 +116 +116 +120 +119 +125 +126 +125 +129 +130 +133 +133 +132 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +161 +161 +161 +165 +165 +169 +169 +170 +172 +173 +175 +175 +178 +179 +179 +183 +183 +185 +185 +185 +188 +189 +190 +190 +191 +195 +194 +197 +196 +196 +198 +198 +200 +200 +200 +200 +201 +203 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +205 +202 +203 +201 +200 +200 +200 +200 +199 +198 +198 +196 +196 +194 +194 +194 +190 +190 +189 +188 +188 +184 +185 +183 +182 +183 +178 +179 +174 +175 +173 +173 +172 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +141 +133 +134 +129 +129 +125 +125 +126 +119 +120 +116 +115 +116 +110 +110 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +76 +76 +76 +72 +72 +69 +68 +68 +64 +64 +65 +64 +64 +59 +58 +55 +55 +54 +51 +50 +46 +47 +45 +43 +43 +41 +40 +36 +37 +37 +32 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +13 +13 +14 +13 +14 +14 +14 +14 +14 +13 +13 +14 +13 +13 +13 +14 +14 +13 +13 +14 +14 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +28 +31 +31 +33 +33 +37 +36 +36 +41 +41 +43 +43 +43 +46 +46 +50 +51 +51 +55 +54 +58 +58 +58 +64 +64 +69 +68 +67 +72 +72 +77 +76 +83 +81 +82 +86 +86 +90 +90 +90 +96 +96 +99 +99 +100 +105 +106 +110 +110 +110 +115 +115 +119 +119 +120 +126 +125 +129 +129 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +168 +169 +173 +173 +174 +175 +175 +179 +179 +183 +182 +183 +185 +184 +189 +189 +189 +190 +190 +194 +194 +195 +196 +197 +199 +198 +200 +200 +200 +201 +201 +201 +200 +200 +203 +202 +205 +204 +204 +204 +204 +207 +206 +206 +207 +206 +207 +206 +207 +206 +206 +206 +207 +206 +206 +206 +205 +204 +204 +204 +204 +202 +203 +200 +200 +201 +201 +200 +199 +199 +199 +197 +197 +194 +194 +195 +191 +191 +189 +189 +185 +185 +185 +182 +183 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +158 +151 +152 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +126 +125 +119 +120 +115 +115 +116 +110 +110 +106 +106 +103 +100 +100 +96 +96 +90 +90 +89 +86 +86 +82 +82 +82 +76 +76 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +59 +55 +54 +54 +50 +50 +47 +46 +47 +42 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +26 +27 +25 +25 +21 +21 +19 +18 +19 +17 +16 +15 +15 +15 +15 +16 +13 +13 +13 +12 +14 +13 +13 +14 +13 +13 +14 +13 +14 +13 +13 +13 +14 +14 +13 +13 +13 +13 +14 +14 +13 +14 +13 +13 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +28 +27 +27 +31 +31 +33 +33 +33 +36 +37 +41 +41 +41 +43 +43 +47 +47 +47 +50 +50 +55 +55 +55 +58 +59 +65 +65 +68 +69 +68 +72 +72 +76 +76 +76 +82 +82 +86 +87 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +119 +120 +120 +126 +125 +130 +129 +130 +133 +133 +133 +133 +134 +139 +139 +143 +143 +143 +147 +147 +151 +151 +154 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +185 +185 +184 +188 +188 +191 +191 +194 +195 +195 +197 +197 +198 +199 +198 +201 +200 +200 +200 +200 +203 +202 +204 +204 +204 +204 +204 +206 +206 +207 +206 +207 +206 +207 +206 +207 +207 +207 +206 +206 +206 +206 +204 +204 +204 +204 +205 +202 +202 +201 +200 +200 +200 +200 +199 +198 +199 +197 +196 +194 +195 +191 +191 +190 +189 +189 +185 +185 +184 +182 +182 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +152 +151 +147 +147 +143 +143 +144 +139 +139 +133 +133 +134 +129 +129 +126 +126 +125 +119 +120 +116 +115 +113 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +65 +65 +65 +58 +59 +54 +54 +54 +50 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +13 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +42 +47 +47 +48 +51 +51 +55 +54 +59 +59 +58 +65 +64 +68 +68 +68 +72 +72 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +91 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +116 +120 +120 +120 +119 +120 +126 +125 +129 +129 +130 +134 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +178 +179 +183 +183 +184 +185 +185 +189 +188 +189 +189 +189 +190 +190 +195 +194 +195 +196 +196 +198 +199 +198 +200 +200 +200 +200 +201 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +205 +205 +205 +202 +202 +201 +200 +200 +200 +200 +200 +200 +200 +198 +199 +197 +196 +197 +194 +195 +190 +190 +191 +189 +189 +184 +184 +185 +183 +182 +179 +179 +175 +175 +176 +173 +173 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +134 +133 +133 +129 +129 +129 +129 +129 +125 +125 +125 +125 +125 +119 +120 +115 +116 +116 +109 +109 +106 +106 +103 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +65 +65 +58 +58 +55 +55 +51 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +34 +31 +31 +31 +27 +26 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +14 +13 +14 +13 +13 +13 +13 +14 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +22 +25 +25 +27 +27 +30 +31 +31 +33 +33 +37 +37 +37 +41 +41 +40 +41 +41 +43 +43 +47 +47 +47 +50 +50 +55 +55 +56 +59 +58 +64 +65 +68 +68 +68 +72 +72 +77 +76 +76 +83 +82 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +102 +106 +106 +110 +109 +116 +116 +116 +119 +120 +126 +125 +125 +129 +129 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +174 +175 +179 +179 +178 +183 +183 +184 +185 +185 +189 +189 +191 +191 +194 +195 +194 +196 +196 +198 +198 +199 +200 +201 +200 +200 +201 +202 +203 +204 +204 +204 +205 +205 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +204 +204 +204 +204 +204 +202 +202 +201 +200 +200 +201 +200 +198 +199 +199 +196 +197 +195 +194 +190 +191 +190 +189 +189 +185 +184 +184 +183 +183 +183 +182 +183 +178 +179 +175 +175 +175 +173 +173 +169 +169 +170 +165 +165 +161 +161 +157 +156 +157 +151 +151 +147 +147 +147 +143 +143 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +126 +119 +120 +116 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +91 +90 +86 +86 +82 +82 +82 +76 +76 +72 +73 +71 +68 +68 +65 +64 +58 +58 +58 +54 +54 +51 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +28 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +16 +15 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +14 +13 +14 +14 +13 +13 +14 +14 +14 +14 +14 +13 +14 +13 +13 +14 +13 +13 +14 +13 +13 +15 +15 +17 +17 +20 +19 +19 +21 +21 +25 +25 +25 +27 +27 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +50 +51 +54 +55 +58 +58 +59 +64 +65 +64 +65 +65 +69 +68 +73 +72 +73 +76 +76 +82 +82 +84 +86 +86 +90 +90 +96 +96 +96 +99 +100 +106 +106 +105 +110 +110 +116 +116 +116 +119 +119 +125 +126 +126 +130 +130 +134 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +164 +168 +169 +173 +173 +173 +175 +175 +178 +178 +182 +182 +182 +184 +185 +189 +189 +188 +190 +190 +195 +194 +194 +197 +196 +198 +198 +198 +201 +200 +200 +200 +201 +202 +203 +205 +205 +205 +204 +204 +206 +206 +206 +207 +207 +206 +206 +207 +207 +206 +206 +207 +206 +206 +206 +205 +204 +204 +204 +205 +203 +202 +201 +200 +200 +200 +201 +199 +198 +196 +197 +197 +195 +195 +195 +195 +194 +191 +189 +189 +188 +189 +185 +185 +183 +182 +181 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +161 +161 +161 +157 +157 +151 +151 +151 +146 +147 +143 +143 +140 +139 +139 +133 +134 +129 +130 +129 +125 +126 +119 +120 +119 +116 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +73 +72 +68 +69 +68 +64 +64 +58 +59 +59 +54 +55 +51 +50 +51 +47 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +14 +15 +15 +14 +13 +13 +12 +13 +14 +14 +14 +13 +14 +13 +14 +14 +13 +14 +13 +14 +13 +14 +14 +14 +14 +14 +13 +14 +14 +13 +13 +14 +13 +14 +13 +15 +15 +16 +17 +17 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +28 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +47 +47 +47 +51 +51 +55 +54 +55 +58 +58 +64 +64 +66 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +119 +120 +120 +126 +125 +130 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +150 +151 +157 +157 +157 +161 +161 +165 +165 +169 +170 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +183 +185 +184 +188 +189 +188 +191 +191 +194 +194 +195 +196 +197 +198 +199 +201 +200 +201 +201 +201 +202 +202 +202 +204 +204 +205 +204 +204 +207 +206 +206 +206 +207 +206 +207 +206 +207 +207 +207 +206 +206 +206 +204 +204 +204 +205 +204 +203 +202 +202 +200 +201 +200 +200 +200 +200 +200 +198 +198 +198 +196 +197 +194 +194 +195 +190 +190 +188 +189 +184 +184 +185 +183 +182 +178 +179 +179 +175 +175 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +158 +156 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +134 +129 +129 +129 +126 +125 +119 +120 +120 +116 +115 +110 +106 +106 +106 +106 +100 +100 +95 +95 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +69 +68 +68 +64 +64 +59 +58 +55 +55 +54 +51 +51 +46 +47 +47 +42 +43 +41 +40 +41 +37 +36 +32 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +14 +14 +14 +14 +13 +14 +13 +13 +13 +14 +14 +13 +13 +14 +14 +14 +14 +14 +13 +13 +14 +13 +13 +13 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +37 +37 +37 +40 +41 +43 +43 +43 +47 +47 +50 +50 +54 +54 +55 +59 +59 +64 +65 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +115 +119 +119 +125 +125 +125 +129 +130 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +174 +175 +178 +179 +179 +183 +183 +185 +185 +185 +189 +189 +191 +191 +195 +194 +194 +196 +197 +198 +198 +199 +200 +201 +200 +200 +200 +203 +202 +204 +204 +204 +204 +204 +207 +207 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +207 +204 +204 +204 +204 +204 +202 +202 +201 +200 +200 +200 +200 +198 +198 +197 +196 +197 +195 +194 +191 +191 +190 +189 +188 +185 +185 +185 +182 +182 +183 +183 +183 +178 +179 +175 +175 +175 +173 +173 +169 +169 +166 +165 +165 +160 +161 +157 +157 +158 +151 +151 +147 +147 +147 +143 +143 +139 +139 +140 +133 +133 +129 +129 +130 +125 +125 +120 +120 +115 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +87 +86 +86 +82 +82 +76 +76 +76 +73 +72 +69 +69 +65 +64 +64 +58 +59 +54 +54 +55 +50 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +26 +25 +25 +21 +21 +19 +19 +17 +17 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +14 +13 +14 +14 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +16 +15 +15 +17 +17 +20 +19 +19 +21 +21 +25 +25 +25 +27 +26 +27 +27 +27 +31 +31 +32 +33 +32 +37 +37 +41 +41 +42 +43 +42 +47 +46 +51 +51 +50 +55 +54 +59 +58 +58 +65 +64 +68 +68 +68 +72 +72 +76 +76 +77 +82 +82 +86 +86 +88 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +109 +115 +116 +120 +120 +119 +125 +125 +130 +129 +129 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +174 +175 +175 +179 +179 +185 +184 +189 +189 +188 +190 +190 +194 +194 +195 +196 +196 +198 +198 +199 +201 +201 +200 +201 +201 +202 +202 +204 +205 +205 +204 +204 +206 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +201 +201 +201 +200 +201 +198 +198 +198 +196 +197 +195 +194 +194 +190 +191 +191 +190 +190 +188 +189 +185 +184 +185 +182 +183 +179 +179 +175 +175 +175 +173 +173 +169 +168 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +140 +139 +133 +133 +129 +129 +129 +125 +125 +119 +120 +120 +116 +116 +110 +109 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +69 +69 +64 +64 +59 +58 +58 +54 +54 +50 +51 +51 +47 +47 +43 +43 +43 +41 +41 +36 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +16 +17 +15 +15 +15 +15 +16 +13 +13 +12 +13 +14 +14 +13 +13 +14 +13 +13 +14 +13 +14 +13 +14 +14 +14 +14 +13 +14 +14 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +30 +31 +33 +33 +32 +37 +37 +41 +41 +41 +43 +43 +47 +46 +47 +50 +51 +54 +55 +55 +59 +58 +64 +64 +65 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +116 +116 +119 +120 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +175 +175 +175 +178 +178 +182 +183 +183 +185 +185 +189 +188 +189 +191 +190 +194 +194 +195 +196 +196 +198 +198 +199 +200 +200 +200 +201 +203 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +207 +207 +206 +207 +205 +204 +204 +204 +204 +202 +202 +200 +200 +200 +200 +200 +200 +200 +200 +198 +198 +197 +197 +196 +194 +195 +190 +190 +189 +188 +189 +184 +184 +182 +183 +183 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +162 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +120 +119 +116 +115 +110 +109 +110 +106 +106 +100 +99 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +65 +64 +58 +58 +58 +54 +54 +50 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +14 +14 +14 +13 +13 +13 +13 +14 +14 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +14 +13 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +38 +41 +41 +41 +43 +43 +46 +47 +47 +51 +50 +55 +54 +58 +58 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +95 +96 +96 +100 +100 +106 +110 +110 +110 +110 +116 +116 +119 +119 +119 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +178 +183 +182 +182 +185 +185 +188 +189 +189 +190 +191 +194 +194 +197 +196 +197 +198 +198 +200 +201 +200 +200 +200 +201 +200 +200 +202 +202 +204 +205 +204 +204 +205 +206 +206 +207 +206 +207 +206 +207 +207 +206 +206 +207 +206 +206 +206 +206 +204 +204 +204 +204 +204 +204 +204 +202 +202 +203 +200 +201 +200 +200 +199 +198 +199 +196 +196 +194 +194 +194 +191 +191 +188 +189 +188 +184 +185 +182 +183 +183 +178 +179 +175 +174 +175 +173 +173 +169 +169 +167 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +119 +116 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +65 +64 +64 +58 +59 +54 +54 +55 +51 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +13 +14 +14 +13 +14 +13 +14 +13 +14 +13 +14 +14 +13 +14 +14 +14 +13 +14 +13 +14 +13 +13 +14 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +43 +42 +43 +47 +46 +51 +51 +51 +55 +54 +58 +59 +59 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +91 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +115 +120 +119 +119 +125 +125 +129 +129 +130 +133 +133 +139 +139 +144 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +176 +178 +178 +182 +183 +185 +184 +185 +188 +188 +190 +190 +195 +195 +194 +195 +194 +196 +196 +198 +198 +199 +200 +200 +200 +200 +201 +202 +202 +204 +204 +204 +204 +204 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +204 +204 +205 +204 +204 +203 +202 +200 +201 +200 +201 +200 +199 +198 +198 +197 +197 +195 +194 +195 +190 +190 +188 +189 +189 +184 +185 +183 +183 +179 +178 +179 +175 +174 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +134 +133 +133 +129 +129 +125 +125 +125 +119 +120 +116 +115 +115 +110 +110 +105 +106 +106 +100 +100 +96 +96 +96 +90 +90 +85 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +65 +64 +64 +59 +59 +55 +55 +55 +50 +50 +47 +47 +47 +43 +43 +41 +41 +36 +37 +37 +33 +33 +31 +31 +31 +27 +27 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +14 +13 +13 +13 +14 +13 +13 +13 +14 +14 +13 +14 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +50 +55 +54 +58 +59 +59 +64 +64 +68 +68 +73 +73 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +116 +119 +120 +126 +125 +125 +130 +129 +133 +133 +134 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +162 +165 +165 +169 +168 +173 +173 +173 +175 +175 +179 +179 +179 +182 +183 +183 +183 +182 +185 +185 +188 +189 +189 +190 +190 +194 +195 +195 +196 +197 +198 +198 +200 +200 +201 +200 +201 +202 +202 +202 +204 +204 +204 +204 +204 +204 +204 +206 +206 +207 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +204 +204 +205 +204 +204 +202 +203 +201 +200 +200 +200 +201 +199 +198 +198 +199 +198 +196 +196 +194 +194 +194 +191 +190 +189 +189 +188 +184 +185 +182 +183 +182 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +130 +125 +125 +119 +119 +119 +116 +116 +110 +110 +105 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +72 +72 +68 +68 +68 +65 +64 +59 +58 +54 +54 +54 +50 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +32 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +20 +19 +19 +17 +17 +15 +15 +15 +15 +15 +15 +15 +15 +13 +13 +12 +12 +14 +13 +13 +14 +13 +14 +13 +13 +14 +14 +13 +13 +14 +14 +14 +13 +14 +14 +14 +13 +14 +13 +14 +13 +14 +13 +13 +13 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +55 +55 +55 +58 +58 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +83 +86 +86 +90 +90 +90 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +116 +115 +119 +119 +126 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +144 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +169 +169 +169 +173 +173 +175 +175 +175 +178 +179 +183 +183 +183 +185 +185 +189 +188 +191 +191 +191 +194 +195 +196 +197 +196 +198 +198 +199 +198 +198 +200 +201 +200 +200 +201 +202 +202 +204 +204 +204 +204 +205 +207 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +207 +204 +205 +204 +204 +205 +202 +202 +200 +200 +200 +200 +200 +198 +198 +196 +196 +196 +195 +194 +191 +191 +190 +189 +188 +185 +184 +184 +182 +182 +179 +178 +179 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +134 +133 +134 +129 +129 +125 +125 +120 +119 +119 +115 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +83 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +58 +59 +55 +55 +54 +55 +55 +50 +51 +46 +47 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +32 +31 +31 +27 +27 +25 +25 +25 +21 +21 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +14 +14 +13 +14 +13 +14 +14 +13 +14 +14 +14 +14 +14 +14 +13 +13 +13 +14 +14 +13 +14 +13 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +20 +25 +25 +25 +27 +26 +31 +31 +32 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +46 +51 +51 +54 +54 +55 +58 +58 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +87 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +116 +116 +119 +119 +125 +125 +126 +129 +129 +133 +133 +140 +139 +139 +143 +143 +147 +147 +147 +151 +151 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +178 +178 +179 +183 +182 +184 +185 +184 +188 +189 +189 +189 +188 +191 +190 +194 +195 +195 +196 +197 +198 +198 +200 +200 +200 +200 +200 +202 +202 +202 +204 +204 +204 +204 +205 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +207 +206 +206 +204 +204 +204 +204 +205 +202 +202 +202 +200 +200 +200 +200 +200 +198 +198 +196 +196 +196 +194 +194 +190 +191 +190 +188 +188 +185 +184 +182 +183 +183 +178 +179 +175 +175 +175 +173 +173 +169 +168 +169 +165 +165 +161 +161 +161 +157 +156 +151 +151 +151 +147 +147 +143 +143 +140 +139 +139 +133 +133 +129 +129 +129 +125 +125 +120 +119 +119 +116 +116 +110 +109 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +72 +72 +72 +68 +68 +64 +64 +64 +58 +58 +54 +55 +52 +51 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +20 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +13 +13 +14 +14 +14 +14 +13 +13 +14 +14 +13 +13 +14 +13 +14 +14 +13 +14 +13 +14 +14 +14 +14 +12 +15 +15 +15 +17 +17 +19 +19 +19 +20 +21 +25 +25 +27 +27 +27 +31 +30 +33 +33 +33 +37 +37 +41 +41 +40 +43 +43 +46 +47 +46 +50 +51 +55 +55 +54 +58 +58 +64 +64 +69 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +105 +106 +106 +110 +110 +115 +115 +120 +119 +119 +125 +126 +129 +129 +129 +133 +133 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +153 +157 +157 +161 +161 +164 +165 +165 +169 +169 +173 +172 +173 +174 +175 +175 +175 +175 +178 +179 +183 +182 +182 +184 +185 +189 +188 +189 +191 +191 +194 +194 +196 +197 +196 +198 +198 +200 +200 +201 +200 +200 +203 +202 +202 +204 +204 +204 +204 +205 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +205 +204 +204 +204 +204 +202 +202 +203 +200 +201 +200 +201 +200 +199 +199 +196 +196 +195 +195 +195 +191 +190 +188 +189 +188 +184 +184 +183 +183 +183 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +120 +120 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +89 +90 +90 +90 +90 +85 +86 +82 +82 +82 +76 +76 +72 +72 +71 +68 +68 +64 +64 +58 +58 +59 +54 +55 +50 +51 +50 +47 +47 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +32 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +13 +14 +13 +14 +14 +14 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +14 +14 +14 +13 +14 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +42 +43 +43 +47 +47 +51 +50 +50 +54 +55 +58 +58 +58 +64 +64 +69 +69 +69 +73 +72 +76 +76 +76 +82 +82 +86 +86 +87 +89 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +115 +115 +115 +115 +120 +120 +125 +125 +126 +129 +129 +133 +133 +132 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +160 +161 +161 +161 +165 +164 +169 +169 +168 +173 +173 +174 +174 +177 +178 +179 +183 +183 +184 +184 +185 +188 +188 +190 +191 +190 +194 +195 +196 +196 +196 +198 +198 +200 +200 +201 +201 +200 +202 +202 +204 +205 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +204 +205 +205 +204 +204 +203 +202 +201 +200 +201 +200 +200 +198 +198 +199 +197 +197 +195 +194 +194 +190 +191 +188 +188 +188 +184 +185 +182 +182 +183 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +141 +133 +133 +130 +130 +125 +125 +125 +120 +119 +115 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +65 +64 +58 +58 +59 +58 +59 +54 +55 +50 +51 +51 +47 +46 +43 +43 +41 +41 +41 +36 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +14 +13 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +14 +13 +14 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +41 +41 +40 +43 +42 +47 +47 +47 +50 +50 +54 +54 +55 +58 +59 +64 +64 +64 +68 +68 +72 +72 +73 +76 +76 +82 +87 +86 +86 +90 +90 +96 +96 +96 +100 +100 +100 +100 +100 +106 +105 +110 +110 +110 +115 +115 +119 +120 +122 +125 +125 +130 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +168 +169 +168 +173 +172 +174 +175 +175 +179 +178 +183 +183 +182 +184 +185 +189 +188 +188 +190 +190 +195 +195 +195 +196 +196 +198 +198 +200 +200 +201 +200 +200 +202 +202 +202 +204 +204 +205 +204 +204 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +204 +204 +204 +204 +204 +202 +203 +202 +200 +200 +201 +200 +200 +198 +198 +196 +197 +196 +194 +195 +191 +191 +190 +188 +188 +184 +184 +184 +182 +182 +179 +179 +175 +175 +175 +172 +173 +173 +172 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +154 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +125 +120 +120 +116 +115 +116 +110 +110 +106 +105 +106 +100 +100 +95 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +58 +55 +54 +54 +51 +50 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +14 +13 +13 +13 +12 +13 +13 +13 +14 +14 +13 +14 +14 +14 +14 +13 +13 +14 +14 +14 +14 +14 +13 +14 +13 +13 +13 +13 +13 +13 +14 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +46 +47 +46 +51 +50 +54 +55 +55 +59 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +82 +81 +82 +86 +86 +90 +91 +90 +96 +96 +100 +99 +102 +106 +106 +110 +110 +115 +115 +116 +119 +120 +125 +125 +125 +129 +129 +129 +129 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +160 +161 +165 +165 +169 +169 +169 +173 +173 +175 +174 +175 +179 +179 +182 +183 +183 +184 +185 +188 +188 +191 +191 +190 +194 +194 +196 +197 +197 +198 +198 +200 +201 +200 +200 +200 +203 +202 +202 +204 +205 +204 +204 +205 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +205 +203 +202 +202 +200 +201 +200 +200 +200 +198 +199 +196 +196 +194 +195 +194 +190 +190 +188 +189 +189 +184 +185 +183 +183 +182 +178 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +126 +120 +119 +116 +115 +110 +110 +109 +106 +106 +100 +100 +99 +96 +96 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +73 +72 +72 +68 +68 +64 +64 +64 +58 +58 +54 +54 +54 +50 +51 +46 +47 +47 +43 +42 +41 +41 +41 +37 +37 +33 +33 +31 +31 +31 +27 +26 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +14 +14 +13 +13 +14 +14 +14 +13 +14 +13 +13 +13 +14 +14 +14 +14 +14 +13 +13 +13 +13 +14 +13 +12 +15 +15 +18 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +40 +41 +42 +43 +43 +47 +47 +50 +51 +50 +54 +54 +59 +59 +58 +64 +65 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +83 +83 +86 +86 +90 +90 +96 +95 +96 +99 +100 +106 +106 +106 +110 +110 +110 +110 +110 +115 +115 +119 +120 +120 +125 +125 +130 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +168 +169 +173 +173 +175 +175 +178 +179 +179 +183 +182 +184 +184 +184 +188 +188 +191 +191 +190 +195 +194 +196 +196 +196 +198 +198 +200 +200 +201 +200 +201 +202 +202 +205 +204 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +204 +204 +204 +205 +204 +202 +202 +201 +200 +201 +200 +200 +198 +198 +198 +196 +197 +194 +194 +194 +191 +190 +189 +188 +189 +184 +185 +182 +183 +183 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +142 +139 +139 +133 +133 +130 +129 +129 +125 +125 +120 +120 +120 +115 +115 +116 +116 +116 +110 +110 +105 +106 +106 +100 +100 +96 +96 +94 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +59 +59 +54 +54 +55 +51 +50 +47 +47 +43 +43 +42 +41 +41 +37 +37 +37 +32 +33 +31 +31 +31 +27 +26 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +14 +14 +13 +14 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +14 +13 +14 +13 +14 +14 +13 +14 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +26 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +43 +43 +43 +47 +47 +51 +50 +50 +55 +54 +58 +59 +61 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +107 +110 +110 +115 +116 +119 +119 +119 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +161 +161 +160 +165 +165 +169 +169 +168 +173 +173 +174 +175 +175 +179 +178 +183 +183 +182 +185 +184 +189 +188 +188 +190 +191 +195 +194 +197 +196 +197 +198 +198 +200 +200 +200 +200 +200 +202 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +207 +206 +207 +206 +206 +207 +206 +207 +206 +206 +204 +204 +204 +204 +204 +202 +202 +202 +200 +200 +200 +200 +201 +198 +198 +196 +196 +197 +194 +194 +191 +190 +189 +188 +189 +184 +184 +183 +182 +182 +179 +178 +178 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +163 +161 +161 +157 +157 +151 +151 +150 +147 +147 +143 +143 +143 +139 +139 +139 +139 +139 +133 +133 +130 +129 +130 +125 +125 +119 +120 +116 +115 +116 +110 +110 +106 +105 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +64 +64 +64 +58 +58 +55 +55 +54 +51 +50 +47 +46 +47 +43 +43 +41 +41 +41 +36 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +13 +14 +14 +14 +13 +14 +13 +14 +14 +14 +14 +13 +14 +13 +13 +14 +14 +14 +14 +13 +14 +14 +13 +13 +13 +15 +15 +16 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +46 +51 +51 +54 +55 +55 +59 +59 +64 +64 +64 +68 +68 +68 +68 +68 +72 +72 +76 +76 +77 +82 +82 +86 +86 +89 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +109 +115 +115 +119 +119 +119 +125 +125 +129 +130 +130 +133 +133 +139 +139 +143 +144 +143 +147 +147 +151 +151 +150 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +182 +184 +185 +185 +189 +189 +190 +190 +191 +194 +194 +196 +196 +196 +198 +198 +201 +200 +200 +200 +200 +203 +202 +202 +204 +204 +204 +204 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +203 +200 +201 +200 +201 +198 +198 +198 +197 +197 +194 +194 +194 +190 +190 +190 +191 +190 +188 +189 +185 +184 +184 +182 +182 +179 +179 +177 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +137 +133 +133 +129 +129 +125 +125 +125 +119 +119 +116 +116 +115 +110 +110 +105 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +59 +59 +55 +55 +55 +51 +50 +47 +46 +47 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +13 +14 +14 +13 +14 +14 +14 +13 +13 +13 +14 +14 +14 +14 +13 +14 +14 +14 +14 +14 +14 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +32 +33 +33 +36 +37 +41 +41 +41 +43 +43 +47 +47 +47 +50 +51 +51 +50 +51 +55 +55 +59 +59 +59 +64 +64 +68 +68 +67 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +115 +119 +119 +125 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +172 +173 +173 +175 +175 +178 +179 +178 +183 +182 +185 +184 +185 +189 +188 +190 +190 +191 +195 +195 +196 +196 +196 +198 +198 +200 +200 +201 +200 +200 +203 +202 +204 +205 +204 +204 +204 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +207 +206 +206 +204 +204 +204 +204 +204 +202 +202 +201 +200 +200 +201 +200 +200 +200 +200 +199 +198 +196 +196 +196 +195 +195 +190 +190 +189 +188 +189 +185 +184 +182 +182 +182 +178 +179 +175 +175 +175 +172 +173 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +154 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +130 +129 +125 +125 +126 +120 +120 +115 +115 +116 +109 +110 +106 +106 +100 +99 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +58 +58 +54 +54 +52 +51 +50 +47 +46 +43 +42 +43 +41 +41 +36 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +14 +14 +14 +13 +13 +14 +14 +13 +14 +13 +13 +14 +13 +14 +14 +14 +13 +13 +13 +13 +12 +15 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +50 +54 +55 +54 +58 +58 +64 +64 +64 +69 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +106 +106 +106 +110 +109 +115 +116 +116 +119 +120 +126 +125 +125 +129 +129 +134 +134 +133 +139 +139 +143 +143 +144 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +178 +182 +182 +185 +184 +185 +189 +189 +190 +190 +194 +195 +194 +196 +196 +198 +198 +198 +200 +200 +201 +201 +200 +202 +203 +205 +204 +205 +204 +204 +206 +206 +207 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +204 +204 +202 +202 +203 +200 +200 +200 +200 +201 +198 +199 +196 +196 +194 +194 +194 +190 +190 +188 +189 +188 +185 +184 +185 +185 +184 +182 +182 +179 +179 +179 +174 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +134 +130 +129 +126 +125 +119 +120 +119 +115 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +68 +68 +68 +64 +64 +59 +59 +58 +55 +54 +50 +50 +50 +46 +47 +42 +43 +43 +41 +41 +37 +36 +37 +33 +33 +31 +31 +28 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +13 +14 +14 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +38 +41 +41 +43 +43 +47 +47 +47 +51 +50 +55 +54 +55 +58 +58 +64 +64 +64 +68 +68 +72 +72 +73 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +105 +106 +110 +110 +115 +116 +116 +119 +119 +126 +125 +125 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +172 +173 +175 +175 +179 +179 +183 +182 +182 +185 +184 +189 +189 +188 +190 +190 +195 +194 +194 +196 +196 +199 +198 +198 +200 +201 +200 +200 +201 +202 +203 +205 +204 +205 +204 +204 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +205 +204 +204 +202 +202 +201 +200 +200 +200 +200 +198 +198 +198 +197 +196 +196 +197 +196 +194 +194 +190 +191 +191 +188 +189 +185 +185 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +140 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +119 +119 +116 +115 +110 +109 +110 +106 +106 +100 +100 +99 +96 +95 +90 +90 +87 +86 +86 +82 +82 +76 +76 +76 +73 +72 +68 +68 +68 +64 +64 +58 +59 +58 +54 +55 +51 +50 +51 +47 +47 +43 +42 +41 +42 +40 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +18 +15 +15 +15 +15 +14 +13 +13 +13 +13 +14 +13 +13 +14 +14 +14 +13 +13 +14 +13 +14 +13 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +14 +14 +13 +14 +14 +13 +12 +15 +15 +15 +15 +15 +17 +17 +19 +19 +19 +21 +20 +24 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +42 +43 +47 +47 +47 +51 +51 +54 +55 +55 +58 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +109 +110 +115 +116 +119 +119 +119 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +178 +178 +183 +182 +183 +184 +185 +188 +189 +188 +191 +190 +194 +194 +195 +196 +196 +199 +198 +200 +200 +201 +200 +200 +202 +202 +202 +204 +204 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +207 +206 +206 +204 +204 +204 +204 +204 +202 +203 +202 +202 +202 +200 +200 +200 +201 +200 +198 +199 +196 +197 +196 +194 +195 +191 +190 +189 +188 +188 +185 +184 +183 +182 +183 +179 +178 +175 +175 +175 +172 +173 +169 +169 +169 +165 +165 +161 +161 +159 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +139 +139 +133 +133 +133 +129 +129 +125 +125 +125 +119 +119 +116 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +69 +68 +65 +64 +59 +58 +58 +54 +55 +50 +50 +51 +47 +47 +43 +42 +43 +41 +41 +37 +37 +37 +33 +33 +30 +31 +31 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +14 +14 +14 +14 +14 +14 +13 +13 +13 +14 +13 +14 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +13 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +30 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +46 +46 +47 +50 +50 +55 +55 +54 +58 +59 +64 +64 +64 +68 +68 +72 +73 +72 +76 +77 +82 +82 +82 +86 +85 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +115 +115 +120 +120 +126 +125 +125 +129 +129 +133 +133 +134 +139 +139 +143 +143 +148 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +172 +173 +175 +175 +178 +179 +180 +182 +183 +185 +184 +188 +188 +188 +190 +190 +194 +194 +194 +197 +196 +197 +196 +196 +199 +198 +201 +201 +201 +201 +203 +202 +203 +204 +204 +205 +204 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +204 +204 +204 +205 +203 +202 +203 +201 +201 +200 +200 +200 +200 +200 +199 +198 +198 +196 +197 +194 +194 +195 +191 +190 +188 +189 +189 +184 +185 +182 +183 +179 +179 +178 +174 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +134 +133 +134 +129 +129 +125 +125 +125 +119 +119 +115 +115 +115 +109 +110 +105 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +68 +68 +68 +64 +64 +58 +60 +58 +54 +54 +51 +51 +51 +46 +47 +43 +42 +42 +41 +41 +37 +37 +33 +33 +33 +31 +31 +31 +31 +31 +27 +27 +25 +25 +25 +22 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +14 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +26 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +46 +47 +50 +50 +54 +54 +55 +59 +58 +64 +64 +69 +69 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +109 +110 +116 +116 +120 +119 +119 +125 +125 +129 +129 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +164 +168 +168 +169 +173 +173 +175 +175 +175 +179 +179 +179 +179 +178 +182 +182 +184 +184 +184 +189 +188 +190 +191 +191 +195 +194 +196 +196 +198 +198 +199 +201 +201 +201 +200 +201 +202 +202 +202 +202 +202 +204 +204 +204 +204 +204 +206 +207 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +205 +204 +204 +204 +204 +202 +202 +202 +201 +201 +200 +200 +201 +199 +198 +197 +196 +195 +194 +194 +190 +190 +188 +188 +189 +185 +185 +183 +183 +182 +179 +179 +175 +175 +175 +173 +172 +169 +169 +169 +165 +165 +161 +161 +158 +157 +157 +151 +151 +147 +148 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +130 +125 +126 +120 +120 +119 +115 +115 +110 +110 +106 +105 +106 +100 +100 +96 +96 +96 +90 +90 +86 +87 +86 +82 +82 +76 +77 +76 +72 +72 +68 +68 +69 +64 +65 +58 +58 +55 +55 +55 +50 +51 +47 +47 +47 +43 +43 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +29 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +16 +17 +15 +15 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +14 +14 +14 +14 +13 +14 +14 +14 +13 +14 +14 +14 +13 +14 +13 +14 +13 +14 +13 +13 +15 +15 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +47 +47 +47 +50 +51 +54 +55 +54 +58 +58 +64 +64 +65 +68 +68 +72 +73 +73 +76 +76 +82 +82 +82 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +116 +119 +120 +125 +125 +125 +129 +129 +133 +134 +133 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +174 +175 +175 +178 +179 +183 +183 +185 +185 +185 +188 +188 +191 +190 +191 +194 +194 +194 +194 +195 +196 +196 +198 +198 +199 +200 +200 +200 +201 +201 +202 +203 +205 +204 +204 +204 +204 +206 +206 +207 +207 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +207 +205 +205 +204 +204 +202 +202 +202 +200 +200 +200 +200 +200 +199 +199 +197 +197 +196 +194 +194 +190 +191 +190 +188 +189 +184 +184 +184 +182 +183 +178 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +156 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +140 +134 +133 +130 +129 +130 +126 +125 +120 +119 +119 +115 +116 +110 +110 +109 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +73 +72 +68 +68 +68 +64 +64 +64 +65 +65 +59 +59 +54 +55 +54 +50 +50 +47 +47 +45 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +30 +31 +27 +27 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +14 +13 +14 +14 +14 +14 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +22 +21 +25 +25 +25 +27 +26 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +42 +43 +47 +46 +47 +51 +50 +54 +55 +55 +59 +59 +64 +65 +64 +68 +68 +72 +72 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +105 +106 +106 +110 +110 +116 +115 +116 +119 +119 +125 +125 +129 +129 +129 +133 +132 +139 +139 +139 +143 +143 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +162 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +183 +183 +183 +185 +185 +189 +188 +189 +190 +190 +194 +195 +195 +197 +197 +198 +199 +200 +201 +200 +200 +200 +202 +202 +202 +204 +204 +204 +205 +205 +207 +206 +206 +206 +206 +207 +207 +207 +206 +206 +206 +206 +207 +206 +205 +204 +205 +204 +204 +202 +202 +202 +200 +200 +200 +200 +200 +198 +199 +197 +196 +196 +194 +194 +190 +190 +189 +188 +188 +185 +185 +182 +183 +183 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +148 +147 +147 +143 +143 +139 +139 +139 +133 +134 +133 +133 +133 +129 +129 +125 +126 +125 +119 +119 +115 +116 +116 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +61 +58 +58 +54 +55 +50 +50 +50 +46 +47 +43 +43 +43 +41 +41 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +27 +26 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +14 +14 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +12 +15 +15 +17 +17 +20 +19 +19 +20 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +36 +41 +41 +43 +43 +43 +46 +47 +51 +50 +55 +55 +55 +58 +59 +64 +64 +64 +69 +68 +72 +72 +73 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +106 +106 +106 +109 +110 +116 +116 +115 +120 +120 +120 +119 +120 +125 +126 +130 +130 +130 +133 +133 +139 +139 +139 +143 +143 +147 +147 +150 +151 +151 +157 +157 +161 +161 +161 +165 +165 +165 +165 +165 +169 +169 +173 +172 +173 +175 +175 +179 +179 +180 +183 +183 +185 +185 +188 +189 +188 +191 +191 +194 +194 +194 +196 +197 +198 +198 +199 +200 +200 +200 +200 +201 +202 +203 +204 +204 +205 +204 +204 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +205 +203 +203 +200 +201 +200 +200 +200 +199 +198 +196 +197 +196 +194 +195 +191 +190 +190 +188 +189 +185 +185 +185 +183 +183 +178 +179 +179 +175 +174 +173 +173 +169 +169 +169 +164 +165 +160 +161 +161 +157 +156 +151 +151 +151 +147 +147 +143 +143 +144 +139 +139 +133 +133 +134 +129 +130 +125 +125 +120 +119 +119 +115 +116 +110 +110 +110 +106 +106 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +58 +59 +58 +58 +59 +54 +55 +50 +51 +51 +47 +46 +43 +43 +41 +41 +40 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +14 +15 +15 +13 +12 +13 +12 +13 +13 +13 +14 +14 +14 +14 +13 +14 +14 +13 +14 +13 +13 +13 +14 +14 +13 +13 +14 +14 +13 +13 +14 +14 +13 +13 +13 +15 +16 +15 +17 +17 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +32 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +51 +55 +54 +58 +59 +58 +64 +64 +68 +69 +67 +73 +72 +76 +76 +83 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +110 +109 +116 +115 +120 +119 +120 +125 +125 +129 +129 +133 +134 +133 +139 +140 +143 +143 +143 +147 +147 +147 +147 +147 +151 +151 +157 +156 +157 +161 +161 +165 +165 +166 +169 +168 +173 +173 +175 +175 +175 +178 +178 +183 +182 +182 +184 +185 +188 +189 +188 +191 +190 +195 +195 +195 +196 +196 +198 +198 +200 +200 +201 +200 +201 +203 +202 +202 +205 +204 +204 +205 +204 +207 +207 +206 +207 +206 +206 +207 +207 +206 +206 +207 +206 +206 +206 +205 +205 +204 +204 +205 +203 +202 +202 +200 +200 +200 +200 +201 +199 +198 +197 +196 +196 +194 +194 +190 +190 +191 +189 +189 +185 +185 +183 +182 +182 +178 +178 +175 +175 +175 +173 +173 +173 +173 +173 +168 +169 +165 +165 +165 +161 +161 +157 +157 +158 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +134 +133 +129 +129 +129 +129 +129 +125 +125 +119 +119 +120 +116 +116 +109 +110 +108 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +65 +64 +59 +58 +58 +54 +54 +50 +50 +51 +46 +47 +43 +43 +43 +40 +41 +36 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +14 +13 +13 +14 +14 +14 +14 +13 +13 +14 +13 +14 +13 +14 +14 +14 +13 +13 +14 +14 +14 +14 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +22 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +42 +43 +43 +47 +47 +51 +51 +51 +54 +54 +58 +58 +64 +65 +64 +68 +68 +72 +73 +72 +76 +82 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +99 +100 +105 +106 +109 +109 +115 +115 +115 +119 +119 +125 +125 +125 +129 +129 +129 +129 +130 +133 +133 +139 +139 +140 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +182 +182 +183 +185 +184 +189 +188 +189 +190 +190 +195 +194 +196 +197 +196 +198 +199 +200 +201 +200 +201 +200 +203 +203 +202 +204 +204 +204 +204 +205 +206 +206 +206 +206 +206 +207 +207 +207 +206 +206 +206 +206 +206 +207 +204 +204 +204 +204 +204 +202 +202 +202 +200 +200 +200 +201 +200 +198 +198 +197 +196 +195 +194 +194 +190 +191 +188 +189 +189 +184 +184 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +143 +143 +143 +139 +139 +133 +133 +134 +129 +129 +125 +126 +122 +119 +119 +116 +116 +110 +110 +110 +106 +106 +100 +99 +100 +96 +96 +96 +96 +96 +90 +90 +86 +86 +87 +82 +82 +76 +76 +73 +72 +72 +68 +68 +64 +65 +64 +58 +58 +54 +54 +55 +51 +50 +47 +47 +47 +42 +43 +41 +41 +41 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +14 +14 +14 +14 +13 +14 +13 +13 +14 +14 +14 +14 +13 +14 +13 +14 +14 +14 +14 +14 +13 +13 +15 +15 +18 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +40 +42 +43 +43 +47 +47 +50 +50 +51 +55 +55 +58 +59 +59 +64 +64 +64 +64 +64 +68 +68 +72 +72 +73 +76 +76 +82 +82 +83 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +110 +110 +109 +116 +116 +120 +119 +119 +126 +126 +130 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +148 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +173 +173 +175 +175 +178 +179 +179 +182 +182 +185 +185 +184 +188 +189 +190 +191 +191 +195 +195 +197 +196 +196 +198 +198 +201 +200 +200 +201 +200 +202 +202 +205 +204 +205 +204 +204 +206 +207 +207 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +206 +206 +204 +204 +204 +205 +204 +202 +202 +201 +200 +200 +201 +200 +198 +198 +199 +196 +196 +195 +194 +194 +190 +190 +189 +188 +188 +185 +185 +182 +182 +182 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +161 +161 +161 +157 +156 +151 +151 +151 +147 +147 +143 +143 +141 +139 +139 +134 +133 +129 +130 +130 +125 +125 +119 +119 +120 +115 +115 +115 +116 +116 +109 +110 +106 +106 +106 +100 +100 +96 +96 +93 +90 +90 +86 +86 +83 +82 +82 +76 +77 +72 +72 +72 +68 +68 +64 +64 +64 +59 +58 +54 +55 +55 +51 +50 +47 +47 +43 +42 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +13 +14 +14 +13 +14 +14 +14 +14 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +14 +13 +13 +14 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +32 +38 +37 +37 +40 +41 +43 +43 +43 +47 +47 +47 +46 +47 +50 +51 +54 +54 +54 +59 +58 +64 +64 +66 +68 +68 +73 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +90 +90 +90 +96 +96 +100 +100 +100 +106 +105 +110 +110 +115 +115 +115 +119 +119 +125 +125 +126 +130 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +158 +161 +161 +164 +164 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +182 +183 +184 +185 +185 +189 +189 +190 +190 +191 +195 +195 +196 +196 +199 +198 +198 +201 +201 +200 +200 +200 +203 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +207 +207 +207 +204 +204 +204 +205 +205 +202 +203 +200 +201 +200 +200 +200 +199 +198 +199 +196 +196 +194 +194 +195 +190 +191 +188 +189 +185 +184 +184 +183 +183 +179 +179 +178 +175 +175 +175 +174 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +134 +133 +129 +129 +129 +125 +126 +119 +119 +119 +116 +116 +110 +110 +108 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +77 +76 +72 +72 +68 +68 +69 +65 +64 +58 +58 +55 +55 +55 +51 +51 +47 +46 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +20 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +13 +14 +14 +13 +14 +13 +13 +14 +14 +14 +13 +14 +13 +13 +14 +14 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +15 +15 +15 +17 +18 +19 +19 +20 +21 +21 +25 +25 +27 +27 +27 +31 +30 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +51 +55 +55 +56 +59 +59 +64 +65 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +82 +82 +82 +87 +86 +90 +90 +90 +96 +96 +100 +100 +105 +106 +106 +110 +109 +115 +116 +116 +120 +120 +126 +125 +126 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +156 +157 +157 +161 +161 +164 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +179 +183 +182 +185 +185 +185 +188 +189 +190 +191 +195 +194 +194 +197 +196 +198 +198 +199 +200 +200 +200 +200 +200 +202 +203 +205 +204 +204 +204 +205 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +204 +204 +203 +202 +202 +200 +201 +200 +200 +201 +198 +199 +197 +197 +194 +194 +194 +191 +191 +189 +188 +188 +185 +184 +184 +184 +184 +182 +182 +178 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +160 +161 +161 +157 +157 +157 +157 +157 +151 +152 +152 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +130 +130 +129 +126 +126 +119 +120 +120 +116 +116 +110 +109 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +65 +65 +58 +59 +59 +54 +55 +50 +51 +50 +47 +47 +43 +43 +43 +40 +40 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +14 +14 +14 +14 +14 +13 +13 +13 +14 +13 +14 +14 +13 +13 +14 +14 +14 +13 +13 +14 +14 +14 +13 +13 +12 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +36 +37 +39 +41 +41 +43 +43 +48 +47 +47 +50 +50 +51 +50 +51 +54 +55 +54 +54 +54 +58 +58 +64 +65 +64 +68 +69 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +99 +106 +106 +106 +110 +110 +116 +115 +116 +119 +120 +126 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +160 +165 +165 +165 +169 +169 +173 +173 +175 +175 +175 +179 +179 +182 +183 +183 +184 +185 +188 +188 +188 +190 +190 +195 +195 +194 +197 +196 +198 +198 +199 +200 +201 +200 +200 +203 +202 +202 +204 +204 +204 +204 +205 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +207 +206 +206 +207 +204 +205 +204 +204 +202 +202 +202 +200 +201 +200 +200 +200 +198 +198 +196 +196 +196 +195 +195 +190 +190 +190 +188 +189 +185 +185 +184 +183 +183 +179 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +144 +143 +143 +139 +139 +133 +133 +133 +129 +130 +125 +125 +125 +120 +119 +115 +116 +115 +110 +109 +106 +106 +106 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +65 +58 +59 +55 +54 +54 +50 +51 +47 +47 +43 +43 +43 +40 +41 +37 +36 +36 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +12 +13 +14 +14 +14 +13 +13 +13 +14 +14 +13 +13 +14 +14 +13 +13 +14 +14 +13 +13 +14 +14 +14 +13 +14 +13 +14 +14 +13 +12 +15 +15 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +26 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +40 +43 +43 +43 +43 +43 +47 +47 +50 +50 +51 +54 +54 +59 +58 +62 +65 +64 +68 +68 +72 +72 +72 +76 +76 +82 +83 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +111 +112 +115 +115 +120 +119 +119 +119 +119 +125 +125 +129 +129 +129 +134 +134 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +178 +179 +183 +183 +182 +185 +184 +188 +189 +189 +191 +191 +194 +195 +197 +196 +196 +199 +198 +200 +201 +200 +200 +200 +202 +202 +202 +205 +205 +205 +205 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +204 +204 +204 +202 +203 +200 +200 +200 +200 +201 +198 +198 +197 +196 +196 +194 +195 +190 +190 +190 +189 +189 +184 +184 +185 +183 +183 +182 +183 +182 +178 +179 +175 +175 +175 +173 +173 +169 +169 +167 +164 +165 +161 +161 +156 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +134 +133 +129 +130 +130 +125 +126 +119 +119 +116 +116 +116 +110 +109 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +69 +69 +65 +64 +65 +58 +58 +54 +54 +55 +50 +51 +47 +47 +47 +43 +43 +41 +41 +40 +36 +37 +33 +33 +33 +31 +31 +27 +27 +26 +25 +25 +21 +21 +19 +19 +19 +17 +18 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +13 +14 +14 +14 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +14 +14 +14 +13 +13 +14 +13 +14 +13 +14 +14 +13 +13 +13 +12 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +42 +47 +47 +50 +51 +51 +54 +55 +58 +58 +59 +64 +64 +69 +69 +69 +72 +72 +76 +75 +76 +82 +82 +86 +86 +90 +90 +90 +96 +95 +100 +100 +100 +106 +106 +109 +110 +109 +115 +116 +120 +119 +119 +125 +125 +129 +130 +129 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +168 +169 +173 +173 +175 +175 +174 +179 +178 +183 +182 +185 +184 +185 +189 +189 +190 +191 +190 +194 +194 +196 +196 +196 +198 +198 +200 +201 +200 +200 +200 +202 +202 +203 +205 +204 +204 +205 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +204 +204 +203 +204 +204 +203 +202 +201 +201 +201 +201 +201 +198 +198 +199 +196 +196 +195 +195 +194 +191 +190 +191 +190 +191 +188 +188 +185 +185 +185 +183 +183 +179 +179 +177 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +144 +143 +143 +139 +139 +133 +133 +129 +130 +129 +125 +125 +119 +120 +119 +116 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +69 +68 +64 +64 +59 +58 +59 +54 +54 +51 +50 +50 +46 +46 +43 +43 +43 +41 +40 +37 +36 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +16 +13 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +14 +14 +14 +13 +13 +14 +14 +13 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +32 +36 +37 +37 +41 +40 +43 +43 +43 +46 +47 +51 +51 +50 +55 +55 +58 +58 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +109 +110 +115 +116 +120 +119 +120 +126 +125 +129 +129 +133 +133 +133 +139 +139 +144 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +168 +168 +169 +173 +173 +175 +175 +178 +178 +178 +183 +182 +184 +184 +185 +188 +189 +190 +190 +191 +194 +194 +197 +197 +196 +198 +198 +200 +201 +200 +200 +200 +202 +202 +204 +204 +203 +204 +204 +206 +206 +207 +207 +207 +207 +206 +207 +206 +207 +206 +206 +206 +206 +207 +206 +206 +207 +204 +204 +204 +204 +202 +203 +202 +201 +201 +200 +200 +201 +198 +198 +199 +198 +198 +196 +196 +194 +195 +195 +190 +191 +189 +189 +185 +185 +185 +182 +183 +178 +179 +179 +175 +175 +172 +172 +173 +168 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +143 +143 +143 +140 +139 +133 +133 +133 +129 +129 +125 +125 +126 +119 +119 +115 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +91 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +68 +68 +64 +64 +65 +58 +58 +55 +55 +55 +50 +50 +47 +46 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +33 +32 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +22 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +14 +13 +14 +13 +14 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +14 +13 +14 +14 +14 +14 +13 +14 +14 +13 +13 +14 +14 +13 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +40 +43 +43 +46 +47 +47 +50 +50 +54 +54 +58 +58 +58 +64 +65 +68 +68 +68 +72 +72 +76 +76 +77 +82 +82 +86 +86 +86 +90 +90 +96 +96 +95 +99 +100 +106 +106 +110 +110 +110 +115 +116 +119 +120 +120 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +148 +151 +151 +157 +157 +161 +161 +161 +165 +164 +165 +165 +165 +169 +168 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +184 +185 +186 +189 +189 +190 +191 +194 +194 +195 +196 +196 +198 +199 +198 +200 +201 +200 +200 +201 +200 +201 +203 +202 +202 +204 +204 +204 +205 +205 +206 +207 +207 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +204 +204 +205 +205 +204 +202 +202 +200 +200 +200 +201 +201 +198 +199 +197 +196 +197 +195 +194 +191 +190 +190 +188 +188 +185 +184 +184 +182 +183 +179 +178 +179 +175 +175 +173 +173 +169 +169 +169 +164 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +134 +129 +129 +125 +126 +119 +119 +120 +116 +116 +110 +110 +110 +106 +106 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +73 +73 +72 +68 +68 +64 +64 +64 +59 +59 +54 +54 +54 +50 +50 +47 +46 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +30 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +14 +12 +13 +13 +13 +13 +13 +14 +13 +14 +13 +14 +14 +14 +13 +14 +14 +14 +13 +14 +13 +13 +14 +13 +14 +14 +14 +14 +13 +13 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +40 +41 +41 +43 +43 +43 +43 +43 +47 +47 +51 +50 +51 +55 +54 +58 +58 +59 +65 +64 +68 +68 +68 +72 +73 +76 +76 +82 +83 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +115 +120 +120 +119 +126 +125 +129 +129 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +178 +178 +179 +183 +182 +185 +184 +185 +189 +189 +188 +189 +188 +190 +191 +194 +194 +195 +196 +197 +198 +199 +199 +201 +201 +200 +200 +202 +203 +204 +204 +204 +204 +204 +206 +207 +206 +206 +206 +207 +206 +206 +206 +207 +207 +206 +206 +206 +207 +207 +207 +204 +204 +204 +204 +204 +202 +202 +200 +201 +200 +200 +200 +198 +198 +199 +197 +197 +195 +195 +195 +191 +191 +189 +189 +187 +184 +185 +183 +183 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +134 +133 +129 +130 +126 +125 +125 +120 +120 +116 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +91 +90 +90 +86 +86 +82 +82 +83 +76 +76 +72 +72 +72 +68 +69 +65 +64 +64 +59 +58 +55 +55 +54 +51 +50 +47 +46 +43 +42 +42 +40 +40 +37 +37 +37 +33 +33 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +20 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +13 +14 +13 +14 +14 +13 +13 +14 +13 +14 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +24 +24 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +36 +41 +41 +43 +42 +43 +47 +47 +51 +51 +51 +55 +54 +58 +58 +64 +65 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +116 +116 +116 +119 +120 +125 +125 +125 +130 +129 +133 +133 +134 +139 +139 +143 +143 +143 +147 +147 +151 +152 +151 +157 +157 +161 +160 +166 +165 +165 +169 +169 +173 +173 +173 +175 +174 +175 +175 +175 +179 +179 +183 +182 +183 +185 +185 +189 +189 +189 +191 +191 +195 +195 +196 +196 +196 +198 +199 +200 +201 +200 +200 +201 +201 +200 +200 +203 +202 +204 +204 +205 +204 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +204 +204 +204 +204 +204 +202 +202 +200 +200 +200 +200 +200 +198 +198 +197 +196 +197 +194 +194 +190 +191 +191 +189 +189 +185 +185 +184 +183 +183 +179 +178 +179 +175 +175 +173 +172 +173 +169 +168 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +148 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +125 +119 +120 +116 +116 +110 +109 +110 +106 +106 +100 +100 +100 +95 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +69 +69 +65 +64 +59 +58 +58 +55 +55 +50 +51 +50 +47 +47 +46 +47 +47 +43 +42 +40 +41 +41 +37 +36 +33 +32 +32 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +17 +17 +17 +15 +15 +15 +15 +16 +13 +13 +12 +12 +14 +14 +13 +14 +14 +14 +14 +13 +14 +13 +14 +14 +13 +14 +14 +13 +13 +14 +14 +14 +13 +13 +14 +13 +13 +14 +13 +16 +15 +16 +17 +17 +17 +17 +17 +19 +19 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +40 +41 +41 +43 +43 +47 +47 +47 +51 +51 +54 +54 +54 +58 +58 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +87 +87 +86 +90 +90 +96 +96 +96 +99 +100 +106 +106 +106 +110 +110 +115 +115 +116 +120 +119 +125 +125 +126 +130 +129 +134 +133 +140 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +182 +183 +183 +184 +185 +189 +188 +189 +191 +190 +191 +191 +190 +194 +194 +196 +196 +197 +198 +199 +200 +200 +201 +201 +200 +203 +202 +204 +204 +204 +204 +205 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +204 +205 +204 +204 +205 +202 +202 +200 +200 +201 +200 +200 +199 +199 +198 +197 +197 +195 +194 +195 +191 +191 +189 +189 +188 +185 +184 +182 +183 +179 +179 +178 +175 +175 +172 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +148 +143 +143 +139 +139 +134 +133 +134 +129 +130 +125 +125 +125 +120 +120 +115 +116 +116 +110 +110 +106 +106 +105 +100 +100 +96 +96 +96 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +68 +68 +68 +65 +65 +58 +59 +59 +54 +55 +51 +50 +49 +47 +47 +42 +43 +40 +41 +41 +37 +37 +33 +33 +33 +31 +31 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +12 +14 +14 +13 +14 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +14 +14 +13 +14 +13 +13 +14 +14 +14 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +42 +46 +46 +50 +50 +51 +55 +54 +58 +59 +58 +64 +64 +68 +68 +71 +73 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +110 +111 +116 +115 +120 +119 +125 +125 +126 +129 +129 +133 +134 +133 +139 +139 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +158 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +179 +179 +178 +182 +182 +184 +184 +184 +188 +189 +190 +190 +194 +194 +195 +196 +197 +198 +198 +198 +200 +200 +200 +201 +200 +202 +202 +205 +204 +204 +205 +205 +207 +206 +207 +207 +207 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +205 +204 +204 +205 +204 +202 +202 +201 +201 +200 +200 +200 +199 +198 +199 +196 +197 +195 +194 +190 +190 +191 +188 +188 +185 +185 +185 +183 +182 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +152 +151 +151 +147 +147 +143 +143 +143 +139 +139 +134 +133 +133 +129 +129 +125 +125 +125 +119 +119 +116 +116 +116 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +65 +64 +65 +59 +58 +54 +54 +50 +50 +51 +47 +47 +42 +43 +43 +41 +41 +40 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +20 +20 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +14 +14 +13 +14 +14 +14 +13 +13 +14 +13 +13 +14 +13 +13 +14 +13 +13 +15 +15 +15 +17 +18 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +36 +40 +41 +41 +43 +43 +46 +47 +47 +50 +50 +54 +54 +59 +58 +59 +64 +64 +68 +68 +68 +72 +73 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +97 +100 +100 +106 +106 +110 +110 +110 +115 +116 +120 +120 +119 +126 +125 +125 +126 +126 +130 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +158 +157 +157 +161 +161 +165 +165 +165 +169 +169 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +182 +183 +184 +185 +184 +189 +188 +190 +191 +190 +194 +194 +196 +196 +196 +198 +198 +200 +200 +200 +200 +201 +202 +202 +203 +204 +205 +204 +204 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +204 +204 +204 +204 +205 +203 +202 +202 +200 +201 +201 +201 +199 +198 +198 +197 +197 +194 +194 +194 +191 +190 +189 +188 +189 +185 +185 +183 +183 +183 +179 +178 +175 +174 +175 +173 +173 +169 +169 +165 +165 +164 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +134 +129 +129 +130 +125 +126 +119 +119 +115 +115 +116 +110 +110 +106 +106 +106 +100 +100 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +83 +83 +76 +76 +72 +73 +68 +68 +69 +64 +65 +58 +58 +59 +54 +55 +55 +54 +55 +51 +51 +47 +47 +46 +43 +42 +41 +41 +39 +37 +36 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +12 +13 +13 +14 +14 +14 +13 +14 +14 +14 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +14 +14 +14 +14 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +27 +27 +31 +31 +31 +33 +33 +36 +37 +41 +41 +41 +42 +43 +46 +47 +47 +51 +51 +55 +55 +54 +58 +58 +65 +64 +64 +68 +68 +72 +72 +73 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +105 +106 +110 +110 +116 +116 +115 +119 +119 +126 +125 +125 +129 +129 +133 +134 +140 +139 +139 +143 +143 +147 +147 +147 +151 +151 +151 +151 +151 +158 +157 +161 +160 +162 +165 +165 +169 +169 +170 +172 +174 +175 +175 +178 +179 +179 +183 +183 +185 +185 +184 +188 +189 +190 +191 +191 +195 +195 +196 +196 +197 +198 +198 +200 +201 +201 +200 +201 +202 +202 +204 +205 +204 +204 +204 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +204 +204 +205 +205 +205 +203 +202 +200 +201 +201 +200 +200 +198 +199 +198 +196 +196 +195 +194 +195 +191 +191 +189 +189 +189 +185 +185 +183 +183 +179 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +133 +133 +133 +129 +130 +126 +125 +125 +119 +119 +120 +120 +120 +115 +116 +110 +110 +110 +105 +106 +100 +100 +98 +96 +95 +90 +90 +86 +86 +86 +82 +83 +76 +76 +76 +72 +72 +72 +72 +72 +68 +68 +64 +64 +65 +58 +59 +55 +55 +52 +51 +51 +46 +46 +43 +42 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +16 +15 +13 +13 +12 +13 +13 +13 +14 +13 +13 +14 +14 +13 +14 +13 +13 +13 +14 +13 +13 +13 +14 +13 +14 +14 +14 +13 +14 +14 +14 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +32 +31 +31 +33 +33 +37 +37 +37 +41 +41 +41 +41 +41 +43 +43 +47 +47 +47 +50 +50 +54 +55 +55 +58 +59 +65 +64 +69 +69 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +107 +109 +110 +115 +116 +119 +119 +119 +125 +125 +130 +129 +129 +133 +133 +133 +133 +133 +139 +139 +143 +143 +144 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +168 +169 +173 +173 +173 +174 +175 +179 +179 +179 +182 +183 +184 +185 +184 +189 +189 +190 +190 +194 +194 +195 +196 +197 +198 +198 +199 +200 +200 +200 +201 +200 +200 +200 +203 +202 +203 +204 +204 +205 +204 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +205 +204 +204 +202 +203 +200 +200 +200 +201 +200 +198 +198 +196 +197 +197 +195 +195 +191 +190 +190 +189 +189 +185 +185 +184 +183 +182 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +160 +161 +161 +157 +157 +151 +151 +152 +147 +147 +147 +147 +148 +143 +143 +139 +139 +139 +133 +133 +129 +129 +130 +126 +125 +119 +119 +115 +115 +115 +110 +110 +105 +105 +106 +100 +100 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +69 +69 +64 +64 +59 +58 +58 +55 +55 +51 +51 +50 +46 +47 +43 +43 +43 +41 +40 +36 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +16 +15 +15 +13 +13 +12 +13 +14 +14 +14 +13 +14 +14 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +14 +13 +14 +14 +14 +14 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +38 +41 +41 +43 +43 +46 +47 +47 +51 +51 +55 +55 +55 +58 +58 +58 +58 +58 +64 +65 +68 +68 +68 +72 +72 +76 +76 +79 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +105 +106 +106 +106 +106 +110 +110 +115 +115 +116 +120 +120 +125 +125 +129 +130 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +172 +175 +175 +175 +178 +182 +182 +183 +183 +185 +185 +188 +189 +188 +190 +191 +195 +195 +195 +196 +197 +198 +198 +199 +201 +200 +200 +201 +202 +202 +202 +204 +204 +205 +204 +204 +207 +207 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +205 +204 +205 +205 +203 +203 +203 +200 +200 +200 +200 +200 +198 +200 +196 +196 +196 +195 +194 +190 +191 +190 +189 +189 +185 +184 +185 +182 +183 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +144 +143 +140 +139 +133 +133 +130 +129 +129 +125 +125 +119 +119 +119 +116 +116 +116 +115 +116 +109 +110 +106 +106 +106 +99 +100 +96 +96 +93 +90 +90 +86 +86 +83 +82 +82 +77 +76 +72 +73 +73 +68 +68 +64 +65 +64 +58 +58 +54 +54 +55 +51 +50 +46 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +14 +14 +13 +14 +13 +14 +14 +13 +13 +13 +14 +14 +14 +13 +14 +14 +13 +14 +14 +14 +14 +13 +13 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +43 +43 +43 +47 +47 +51 +51 +51 +54 +54 +58 +58 +61 +65 +64 +68 +68 +72 +72 +73 +77 +76 +82 +82 +82 +86 +86 +86 +86 +86 +90 +90 +96 +96 +96 +100 +99 +106 +106 +109 +110 +110 +115 +116 +120 +119 +120 +125 +125 +129 +129 +129 +133 +134 +139 +139 +139 +143 +143 +147 +147 +148 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +184 +184 +184 +188 +189 +191 +190 +194 +194 +195 +197 +196 +198 +198 +198 +201 +201 +201 +201 +200 +202 +202 +205 +204 +204 +205 +204 +206 +207 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +205 +204 +204 +204 +204 +203 +202 +201 +200 +201 +200 +200 +198 +198 +200 +197 +197 +195 +194 +190 +190 +191 +189 +189 +185 +185 +184 +183 +182 +183 +183 +182 +179 +179 +174 +175 +175 +173 +173 +169 +169 +167 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +144 +143 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +126 +123 +120 +119 +115 +116 +109 +110 +110 +106 +106 +100 +100 +99 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +77 +72 +72 +69 +68 +68 +65 +64 +59 +59 +58 +55 +55 +50 +51 +50 +46 +46 +43 +43 +43 +40 +41 +37 +37 +38 +32 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +13 +14 +14 +13 +14 +13 +13 +13 +14 +13 +14 +14 +13 +13 +14 +13 +14 +14 +13 +14 +13 +13 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +42 +47 +46 +51 +50 +50 +54 +55 +58 +59 +59 +64 +65 +64 +64 +65 +68 +68 +72 +72 +72 +76 +76 +82 +82 +86 +86 +86 +90 +90 +95 +96 +96 +99 +100 +106 +106 +106 +110 +109 +116 +115 +116 +119 +120 +125 +125 +126 +129 +130 +133 +133 +139 +139 +139 +144 +143 +147 +148 +147 +150 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +172 +174 +175 +179 +178 +183 +183 +183 +185 +184 +188 +188 +188 +190 +191 +195 +194 +195 +196 +196 +198 +198 +198 +201 +200 +200 +201 +201 +202 +202 +205 +204 +205 +205 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +204 +204 +204 +204 +205 +202 +202 +200 +200 +200 +200 +201 +198 +198 +196 +196 +196 +195 +194 +194 +194 +194 +190 +190 +188 +188 +188 +184 +184 +183 +182 +181 +178 +179 +175 +175 +172 +173 +173 +169 +169 +165 +165 +165 +161 +161 +161 +161 +161 +157 +157 +151 +151 +151 +148 +148 +143 +143 +141 +139 +139 +133 +133 +129 +129 +129 +125 +125 +120 +119 +119 +115 +115 +110 +110 +110 +106 +106 +99 +100 +100 +96 +96 +90 +90 +88 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +59 +59 +55 +55 +50 +50 +51 +47 +47 +43 +43 +41 +41 +40 +37 +37 +33 +34 +33 +31 +31 +27 +27 +27 +25 +25 +21 +22 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +13 +13 +14 +14 +13 +14 +13 +13 +14 +14 +14 +14 +14 +14 +14 +14 +14 +13 +14 +14 +14 +13 +13 +14 +14 +14 +14 +13 +13 +15 +15 +15 +17 +17 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +37 +37 +37 +41 +41 +42 +43 +43 +47 +47 +47 +47 +47 +50 +50 +54 +55 +55 +58 +58 +64 +64 +68 +68 +68 +72 +72 +77 +76 +76 +82 +83 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +105 +106 +106 +110 +110 +115 +115 +119 +119 +119 +126 +126 +129 +129 +130 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +174 +175 +179 +179 +183 +183 +183 +185 +185 +189 +188 +188 +191 +190 +194 +195 +195 +196 +196 +199 +199 +201 +201 +200 +200 +200 +202 +202 +202 +204 +205 +204 +204 +204 +206 +206 +206 +207 +206 +206 +207 +206 +206 +207 +206 +206 +206 +207 +204 +204 +205 +204 +204 +202 +202 +202 +201 +200 +200 +200 +200 +200 +201 +198 +199 +198 +196 +196 +194 +194 +193 +190 +191 +188 +188 +184 +185 +185 +183 +183 +179 +179 +178 +175 +175 +175 +174 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +130 +130 +129 +125 +125 +119 +119 +120 +115 +115 +110 +109 +107 +106 +106 +101 +100 +96 +96 +96 +89 +90 +86 +86 +86 +82 +82 +76 +76 +76 +73 +72 +69 +68 +69 +64 +64 +58 +58 +55 +55 +54 +50 +50 +47 +47 +47 +42 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +20 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +14 +13 +14 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +26 +25 +25 +27 +27 +31 +31 +31 +33 +33 +33 +33 +33 +36 +37 +41 +41 +41 +43 +43 +47 +47 +48 +50 +50 +55 +54 +58 +59 +58 +64 +64 +68 +68 +68 +72 +72 +76 +77 +76 +82 +82 +86 +86 +87 +89 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +115 +119 +119 +119 +125 +125 +129 +129 +129 +133 +134 +139 +139 +139 +143 +143 +147 +147 +149 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +178 +179 +182 +183 +183 +184 +184 +188 +189 +191 +190 +191 +195 +195 +197 +196 +196 +198 +198 +200 +201 +200 +200 +200 +202 +202 +203 +204 +204 +205 +204 +205 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +205 +204 +202 +203 +200 +200 +200 +201 +200 +199 +199 +196 +196 +197 +194 +194 +190 +190 +191 +189 +189 +189 +188 +189 +185 +184 +183 +183 +182 +179 +179 +175 +175 +173 +173 +173 +169 +168 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +140 +133 +133 +129 +129 +125 +125 +126 +120 +119 +115 +115 +116 +110 +110 +106 +105 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +58 +59 +58 +59 +58 +55 +54 +50 +51 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +34 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +14 +13 +14 +13 +14 +14 +14 +14 +14 +14 +13 +14 +13 +13 +14 +13 +14 +14 +14 +14 +14 +13 +14 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +19 +19 +19 +21 +21 +25 +25 +26 +27 +27 +31 +31 +32 +33 +33 +38 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +50 +54 +54 +54 +59 +58 +64 +64 +65 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +109 +116 +116 +115 +119 +119 +125 +125 +129 +129 +129 +134 +133 +139 +139 +139 +143 +143 +147 +148 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +168 +169 +172 +173 +175 +175 +175 +179 +178 +183 +182 +183 +184 +185 +189 +188 +188 +190 +190 +195 +194 +194 +196 +197 +198 +199 +199 +200 +200 +200 +200 +202 +202 +203 +204 +205 +204 +204 +205 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +204 +204 +204 +204 +205 +203 +203 +200 +201 +200 +200 +201 +201 +200 +200 +198 +199 +197 +196 +196 +194 +194 +191 +191 +189 +188 +189 +185 +185 +183 +183 +182 +179 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +119 +119 +115 +115 +110 +109 +110 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +65 +59 +58 +59 +55 +54 +51 +50 +47 +47 +47 +43 +43 +41 +41 +40 +37 +37 +33 +33 +33 +30 +31 +26 +27 +27 +25 +26 +21 +21 +21 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +14 +13 +13 +13 +13 +14 +14 +13 +13 +14 +14 +13 +14 +14 +13 +13 +14 +13 +13 +14 +14 +13 +13 +14 +14 +14 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +46 +47 +47 +50 +50 +55 +54 +58 +59 +58 +65 +64 +68 +68 +69 +72 +72 +77 +76 +77 +82 +82 +86 +86 +86 +90 +90 +95 +96 +96 +100 +100 +106 +106 +110 +110 +110 +116 +115 +119 +120 +120 +125 +125 +129 +129 +130 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +160 +161 +161 +165 +165 +169 +169 +169 +173 +173 +174 +175 +175 +178 +179 +183 +182 +183 +184 +185 +188 +188 +189 +191 +190 +194 +194 +196 +196 +197 +199 +198 +200 +201 +201 +200 +201 +200 +200 +200 +202 +203 +204 +204 +204 +204 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +204 +204 +202 +202 +203 +200 +200 +200 +200 +198 +198 +198 +196 +196 +194 +195 +194 +191 +191 +188 +188 +188 +185 +184 +182 +183 +183 +179 +178 +175 +175 +175 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +144 +143 +140 +140 +140 +134 +133 +129 +129 +130 +125 +126 +119 +119 +115 +115 +116 +110 +109 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +65 +64 +64 +58 +58 +55 +55 +54 +51 +50 +47 +47 +47 +43 +43 +41 +41 +40 +37 +36 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +13 +14 +14 +14 +13 +14 +13 +13 +13 +14 +13 +14 +13 +14 +14 +13 +13 +13 +14 +13 +14 +13 +13 +13 +12 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +28 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +40 +43 +43 +47 +47 +47 +50 +51 +54 +55 +55 +58 +58 +64 +64 +64 +68 +68 +72 +72 +73 +76 +77 +82 +82 +82 +86 +86 +90 +90 +95 +96 +96 +100 +100 +105 +106 +106 +110 +110 +115 +116 +116 +119 +120 +125 +125 +125 +129 +130 +133 +134 +133 +139 +139 +143 +143 +148 +146 +147 +151 +151 +157 +156 +157 +161 +161 +161 +161 +161 +165 +165 +168 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +184 +185 +184 +189 +189 +190 +190 +191 +194 +195 +196 +196 +196 +199 +199 +201 +200 +200 +200 +200 +202 +202 +204 +204 +205 +204 +205 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +207 +207 +206 +205 +205 +204 +204 +204 +203 +202 +200 +200 +201 +200 +200 +198 +198 +196 +197 +196 +195 +194 +191 +191 +190 +188 +189 +184 +184 +184 +182 +182 +179 +179 +179 +174 +175 +173 +172 +169 +169 +168 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +140 +139 +134 +133 +130 +129 +129 +125 +125 +119 +120 +119 +116 +115 +109 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +91 +86 +86 +82 +82 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +68 +68 +68 +64 +64 +58 +59 +58 +55 +54 +50 +51 +51 +46 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +14 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +14 +14 +13 +13 +13 +14 +14 +13 +13 +14 +13 +14 +13 +13 +13 +15 +15 +16 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +42 +43 +43 +47 +47 +50 +51 +51 +55 +54 +58 +58 +59 +64 +65 +69 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +95 +96 +100 +100 +100 +106 +106 +110 +109 +110 +115 +115 +119 +120 +126 +125 +125 +130 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +173 +173 +174 +175 +175 +179 +178 +179 +183 +183 +184 +185 +184 +188 +189 +190 +190 +191 +194 +194 +196 +196 +196 +199 +199 +200 +200 +200 +200 +200 +202 +202 +205 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +200 +200 +200 +200 +201 +198 +199 +198 +196 +196 +195 +194 +195 +191 +190 +188 +188 +184 +184 +185 +183 +182 +179 +179 +179 +175 +174 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +144 +143 +143 +139 +139 +133 +134 +134 +129 +130 +125 +125 +125 +119 +119 +116 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +91 +90 +90 +86 +86 +83 +82 +82 +76 +76 +72 +72 +73 +68 +69 +64 +65 +65 +58 +59 +55 +54 +55 +51 +50 +46 +47 +43 +43 +42 +41 +41 +37 +37 +37 +33 +33 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +20 +19 +19 +17 +17 +15 +15 +15 +15 +16 +13 +13 +13 +12 +13 +13 +14 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +14 +13 +13 +14 +13 +14 +14 +13 +13 +13 +14 +14 +14 +13 +14 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +42 +43 +43 +47 +47 +50 +50 +51 +55 +55 +58 +59 +65 +64 +64 +69 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +109 +116 +116 +115 +120 +119 +125 +125 +125 +129 +130 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +148 +151 +151 +157 +157 +160 +161 +161 +165 +165 +169 +169 +169 +173 +173 +173 +173 +173 +175 +175 +179 +179 +178 +183 +183 +184 +184 +186 +188 +189 +190 +190 +194 +195 +195 +196 +196 +198 +198 +199 +200 +201 +201 +200 +200 +200 +200 +202 +202 +203 +204 +204 +205 +204 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +204 +204 +205 +204 +205 +202 +202 +203 +200 +201 +201 +201 +199 +199 +198 +196 +197 +194 +195 +195 +190 +190 +188 +189 +188 +185 +185 +182 +183 +183 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +156 +151 +151 +147 +147 +147 +143 +143 +140 +139 +139 +133 +133 +129 +129 +130 +126 +125 +119 +120 +116 +115 +116 +110 +110 +106 +105 +105 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +65 +64 +64 +59 +59 +54 +55 +55 +51 +51 +47 +47 +47 +42 +43 +40 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +17 +17 +17 +15 +15 +15 +15 +15 +13 +12 +12 +13 +14 +13 +13 +14 +14 +14 +14 +13 +14 +14 +13 +14 +13 +14 +13 +14 +14 +14 +13 +14 +13 +13 +14 +13 +13 +13 +13 +12 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +47 +47 +47 +51 +50 +55 +54 +54 +58 +58 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +83 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +109 +110 +110 +110 +110 +115 +115 +120 +120 +120 +126 +125 +130 +129 +130 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +182 +183 +183 +184 +184 +188 +189 +188 +190 +191 +190 +191 +190 +195 +194 +197 +196 +197 +198 +199 +200 +200 +200 +201 +201 +202 +202 +204 +205 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +207 +204 +204 +204 +204 +204 +202 +202 +202 +202 +203 +201 +200 +200 +200 +200 +198 +199 +197 +197 +196 +194 +194 +191 +190 +191 +188 +189 +184 +184 +183 +183 +183 +178 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +146 +143 +144 +140 +139 +139 +133 +133 +129 +129 +129 +125 +126 +119 +119 +119 +115 +115 +110 +109 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +77 +77 +72 +72 +69 +68 +68 +65 +64 +58 +58 +59 +54 +55 +50 +51 +48 +46 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +20 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +14 +14 +14 +13 +14 +13 +13 +14 +14 +14 +13 +14 +14 +14 +14 +13 +13 +13 +13 +14 +14 +13 +14 +14 +13 +15 +15 +17 +18 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +31 +31 +32 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +51 +51 +55 +55 +59 +59 +58 +64 +64 +69 +68 +73 +72 +72 +76 +77 +83 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +105 +110 +109 +110 +115 +116 +119 +119 +125 +125 +125 +129 +129 +134 +133 +133 +139 +139 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +158 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +178 +179 +178 +179 +178 +183 +182 +184 +184 +185 +189 +188 +191 +190 +192 +194 +195 +196 +197 +198 +198 +198 +200 +200 +201 +200 +200 +202 +202 +205 +204 +205 +204 +204 +206 +206 +206 +207 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +201 +201 +200 +200 +201 +198 +198 +198 +196 +196 +195 +194 +191 +190 +190 +188 +188 +184 +184 +184 +182 +183 +178 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +160 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +134 +133 +130 +129 +125 +125 +126 +120 +120 +116 +115 +116 +110 +109 +106 +106 +99 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +69 +64 +64 +61 +58 +59 +54 +55 +51 +50 +51 +47 +47 +43 +43 +43 +41 +41 +40 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +14 +13 +13 +14 +13 +13 +14 +14 +14 +14 +14 +13 +14 +14 +14 +14 +13 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +36 +37 +41 +40 +41 +43 +43 +47 +47 +46 +50 +50 +54 +54 +58 +58 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +99 +106 +106 +110 +110 +109 +116 +115 +119 +119 +119 +125 +125 +126 +125 +125 +129 +130 +134 +133 +133 +139 +139 +143 +143 +144 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +168 +169 +169 +169 +169 +173 +172 +175 +175 +175 +179 +178 +182 +182 +184 +185 +185 +188 +188 +194 +194 +194 +196 +197 +196 +197 +196 +198 +198 +200 +201 +200 +200 +200 +203 +202 +203 +204 +205 +204 +204 +205 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +204 +204 +204 +204 +205 +202 +203 +203 +200 +201 +201 +200 +199 +198 +198 +196 +196 +194 +194 +194 +190 +190 +189 +188 +189 +184 +185 +183 +182 +182 +179 +178 +175 +175 +175 +173 +173 +168 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +130 +130 +130 +125 +125 +119 +119 +115 +115 +115 +109 +110 +106 +106 +106 +100 +100 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +79 +76 +76 +72 +72 +68 +69 +69 +65 +64 +59 +58 +58 +55 +55 +54 +54 +54 +51 +51 +47 +46 +47 +43 +43 +41 +40 +39 +37 +36 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +14 +13 +14 +14 +14 +14 +14 +14 +13 +14 +13 +13 +14 +14 +13 +14 +14 +14 +13 +13 +13 +15 +15 +17 +17 +17 +18 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +40 +43 +43 +43 +47 +47 +51 +51 +51 +54 +55 +59 +59 +58 +64 +65 +68 +68 +68 +72 +72 +76 +76 +77 +82 +82 +86 +86 +91 +90 +90 +96 +96 +100 +100 +100 +106 +106 +106 +106 +106 +110 +110 +116 +115 +116 +119 +119 +125 +125 +127 +129 +130 +134 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +171 +173 +173 +175 +175 +179 +179 +179 +183 +182 +185 +185 +185 +188 +188 +190 +190 +191 +194 +194 +197 +197 +196 +199 +199 +200 +200 +201 +201 +200 +202 +203 +205 +205 +205 +204 +204 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +205 +204 +204 +204 +205 +202 +202 +200 +200 +200 +200 +201 +198 +198 +198 +196 +196 +194 +195 +194 +190 +191 +189 +189 +188 +184 +185 +183 +183 +179 +178 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +144 +143 +139 +139 +133 +133 +133 +129 +129 +126 +126 +126 +119 +119 +116 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +69 +68 +68 +68 +68 +64 +65 +59 +58 +58 +55 +54 +50 +50 +48 +47 +47 +43 +43 +41 +41 +41 +36 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +14 +13 +13 +14 +14 +13 +13 +13 +13 +14 +13 +14 +14 +14 +13 +13 +13 +14 +13 +15 +15 +15 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +40 +43 +43 +43 +47 +47 +51 +51 +50 +54 +54 +58 +58 +59 +64 +65 +68 +69 +72 +73 +72 +76 +77 +82 +82 +82 +86 +86 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +107 +110 +110 +115 +115 +119 +120 +120 +125 +125 +130 +129 +129 +133 +133 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +153 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +172 +173 +174 +175 +179 +179 +179 +183 +183 +184 +184 +185 +189 +189 +190 +190 +193 +194 +194 +196 +196 +199 +199 +199 +200 +200 +201 +200 +200 +202 +202 +204 +204 +204 +205 +204 +206 +206 +207 +206 +207 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +205 +204 +204 +204 +204 +202 +202 +201 +200 +200 +200 +200 +199 +198 +198 +196 +197 +195 +194 +191 +190 +190 +189 +188 +184 +185 +185 +183 +183 +179 +178 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +156 +151 +151 +151 +147 +147 +143 +143 +144 +139 +139 +139 +139 +139 +133 +134 +129 +130 +130 +125 +126 +119 +119 +118 +116 +115 +110 +109 +105 +106 +106 +100 +100 +96 +96 +96 +90 +90 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +73 +69 +68 +68 +64 +64 +58 +58 +59 +54 +54 +50 +50 +50 +46 +47 +43 +42 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +28 +27 +27 +25 +25 +21 +21 +21 +19 +20 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +14 +13 +14 +14 +14 +13 +13 +13 +13 +13 +14 +13 +13 +14 +14 +14 +13 +14 +14 +14 +13 +13 +13 +13 +12 +15 +15 +17 +17 +20 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +36 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +50 +55 +55 +54 +58 +59 +65 +64 +64 +68 +68 +72 +72 +72 +76 +77 +82 +82 +82 +87 +86 +90 +90 +90 +96 +96 +100 +99 +106 +106 +106 +110 +110 +116 +116 +115 +120 +119 +119 +120 +120 +125 +126 +129 +130 +129 +134 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +162 +165 +165 +169 +169 +170 +173 +173 +175 +175 +175 +179 +179 +183 +183 +185 +185 +184 +189 +188 +191 +191 +191 +195 +194 +197 +197 +196 +198 +198 +200 +200 +201 +201 +200 +202 +203 +202 +204 +205 +204 +204 +206 +206 +206 +207 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +207 +204 +205 +204 +204 +204 +202 +203 +203 +201 +200 +200 +200 +199 +198 +198 +196 +196 +194 +194 +194 +190 +191 +189 +188 +188 +185 +185 +183 +183 +183 +178 +179 +175 +175 +175 +173 +173 +168 +169 +166 +165 +165 +161 +161 +157 +157 +157 +151 +151 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +134 +133 +129 +129 +125 +125 +119 +119 +119 +115 +116 +109 +110 +110 +106 +106 +106 +106 +105 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +83 +83 +76 +76 +72 +72 +72 +68 +68 +65 +65 +64 +58 +59 +54 +54 +54 +51 +50 +47 +47 +47 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +27 +27 +27 +25 +25 +20 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +13 +13 +14 +14 +14 +13 +13 +13 +14 +13 +14 +13 +13 +13 +13 +13 +14 +14 +14 +14 +14 +14 +13 +14 +14 +13 +14 +13 +15 +15 +15 +17 +17 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +28 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +51 +54 +55 +58 +59 +58 +64 +64 +68 +68 +69 +72 +73 +76 +77 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +96 +96 +96 +100 +100 +105 +106 +106 +109 +109 +116 +115 +119 +120 +119 +125 +125 +129 +130 +129 +133 +133 +139 +140 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +158 +161 +162 +165 +165 +168 +169 +169 +173 +172 +175 +175 +175 +179 +178 +183 +183 +183 +185 +184 +189 +189 +188 +191 +191 +194 +194 +195 +196 +197 +198 +199 +200 +201 +200 +200 +200 +202 +202 +202 +204 +204 +205 +205 +205 +206 +206 +206 +207 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +205 +204 +205 +204 +204 +202 +202 +202 +201 +200 +201 +200 +200 +198 +198 +196 +197 +196 +194 +195 +191 +191 +189 +189 +185 +185 +182 +182 +182 +179 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +152 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +130 +130 +125 +125 +126 +126 +126 +119 +120 +116 +115 +116 +110 +110 +106 +106 +101 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +69 +64 +65 +65 +59 +58 +54 +54 +51 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +13 +14 +13 +14 +13 +14 +14 +14 +14 +14 +13 +14 +14 +14 +14 +13 +13 +13 +14 +14 +13 +14 +13 +13 +13 +14 +13 +15 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +36 +37 +37 +36 +37 +40 +41 +43 +43 +43 +47 +47 +50 +51 +51 +55 +54 +59 +58 +64 +64 +64 +68 +68 +72 +72 +73 +76 +76 +82 +82 +83 +86 +86 +90 +90 +90 +96 +96 +100 +100 +101 +106 +106 +110 +110 +116 +115 +115 +119 +120 +126 +125 +125 +130 +129 +133 +133 +133 +139 +140 +143 +143 +144 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +184 +185 +185 +189 +189 +191 +191 +195 +194 +194 +196 +196 +198 +198 +198 +200 +200 +200 +201 +200 +202 +202 +204 +205 +204 +204 +204 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +203 +200 +201 +201 +201 +200 +199 +198 +200 +197 +197 +194 +194 +190 +190 +190 +189 +188 +185 +185 +185 +182 +182 +183 +183 +183 +179 +179 +174 +175 +175 +173 +172 +169 +169 +167 +165 +165 +161 +161 +157 +157 +157 +151 +151 +151 +151 +151 +147 +148 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +126 +126 +126 +119 +120 +115 +115 +115 +110 +110 +110 +109 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +69 +64 +64 +58 +58 +59 +54 +54 +50 +51 +51 +47 +47 +43 +43 +42 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +14 +14 +14 +14 +14 +14 +13 +14 +14 +13 +13 +14 +13 +13 +14 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +13 +13 +15 +15 +15 +17 +17 +17 +17 +17 +19 +19 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +32 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +50 +51 +51 +50 +50 +54 +54 +58 +58 +59 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +110 +110 +116 +116 +120 +120 +125 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +173 +172 +173 +175 +175 +178 +179 +179 +183 +183 +185 +185 +184 +188 +188 +190 +190 +191 +195 +195 +197 +196 +197 +198 +199 +200 +200 +201 +200 +201 +202 +203 +204 +205 +204 +204 +204 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +206 +204 +205 +204 +205 +204 +202 +202 +200 +200 +200 +201 +200 +200 +201 +200 +198 +198 +197 +196 +196 +195 +195 +191 +191 +189 +189 +189 +184 +185 +182 +183 +182 +179 +179 +179 +179 +178 +175 +175 +175 +175 +175 +172 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +134 +133 +129 +130 +129 +125 +125 +120 +119 +120 +115 +115 +110 +109 +106 +106 +106 +100 +100 +95 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +72 +73 +68 +68 +68 +64 +64 +58 +59 +54 +54 +55 +51 +50 +47 +47 +47 +42 +43 +41 +41 +41 +37 +37 +33 +33 +32 +31 +31 +27 +27 +28 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +16 +15 +15 +15 +13 +13 +13 +12 +13 +14 +13 +14 +14 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +13 +14 +14 +13 +14 +14 +13 +14 +14 +13 +14 +14 +14 +13 +14 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +46 +51 +51 +50 +55 +55 +58 +58 +58 +64 +65 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +87 +90 +90 +96 +96 +99 +100 +100 +106 +105 +109 +110 +110 +116 +116 +120 +119 +119 +125 +124 +129 +129 +129 +133 +133 +139 +140 +139 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +165 +165 +165 +169 +169 +172 +173 +173 +175 +175 +179 +178 +179 +183 +183 +184 +184 +189 +189 +188 +190 +191 +194 +194 +194 +196 +196 +198 +198 +198 +200 +200 +200 +200 +201 +202 +202 +204 +205 +205 +204 +204 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +204 +204 +204 +204 +204 +202 +202 +201 +201 +200 +200 +200 +198 +198 +198 +196 +197 +194 +194 +194 +191 +190 +190 +191 +190 +188 +188 +185 +184 +185 +183 +183 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +119 +120 +115 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +77 +72 +72 +68 +69 +68 +64 +65 +59 +59 +59 +54 +54 +51 +50 +50 +47 +47 +42 +43 +43 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +14 +14 +14 +14 +14 +13 +13 +14 +14 +14 +13 +13 +13 +13 +14 +13 +13 +14 +14 +14 +13 +13 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +21 +21 +22 +25 +25 +27 +27 +28 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +42 +47 +47 +50 +50 +50 +54 +54 +58 +58 +59 +64 +64 +68 +68 +68 +72 +72 +76 +76 +78 +81 +82 +86 +86 +90 +90 +90 +96 +95 +100 +100 +100 +106 +105 +110 +110 +110 +116 +116 +119 +119 +119 +125 +125 +129 +129 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +174 +179 +179 +178 +182 +183 +184 +184 +185 +189 +188 +188 +188 +189 +190 +191 +195 +194 +194 +197 +196 +199 +198 +198 +200 +201 +201 +200 +203 +202 +203 +204 +205 +204 +204 +204 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +207 +206 +206 +204 +204 +205 +205 +204 +202 +202 +202 +200 +200 +200 +200 +201 +200 +201 +199 +199 +198 +197 +197 +194 +195 +191 +190 +191 +189 +188 +184 +184 +184 +183 +182 +179 +178 +178 +174 +175 +173 +173 +172 +168 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +140 +139 +133 +133 +133 +129 +129 +125 +125 +126 +120 +120 +116 +115 +116 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +81 +76 +76 +72 +73 +72 +68 +68 +64 +64 +64 +58 +58 +55 +54 +51 +51 +50 +47 +46 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +30 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +12 +13 +13 +13 +14 +13 +14 +14 +14 +14 +13 +13 +13 +13 +14 +13 +13 +14 +14 +14 +14 +13 +14 +14 +13 +14 +14 +13 +14 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +42 +43 +43 +47 +47 +51 +50 +54 +54 +55 +59 +58 +65 +65 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +89 +90 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +116 +120 +119 +125 +125 +125 +129 +129 +133 +134 +133 +139 +139 +143 +143 +143 +147 +147 +151 +152 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +178 +183 +183 +184 +185 +185 +189 +188 +190 +191 +195 +195 +194 +197 +197 +196 +197 +196 +198 +198 +200 +200 +200 +200 +200 +202 +202 +202 +204 +204 +204 +204 +205 +206 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +204 +204 +204 +204 +205 +203 +203 +200 +201 +201 +201 +200 +199 +199 +196 +196 +196 +194 +194 +191 +190 +190 +189 +188 +185 +184 +184 +182 +182 +179 +178 +179 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +126 +126 +119 +119 +119 +115 +115 +110 +109 +110 +105 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +69 +68 +68 +64 +65 +59 +59 +59 +54 +54 +50 +50 +50 +47 +47 +43 +43 +43 +41 +40 +37 +37 +37 +33 +33 +31 +31 +28 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +14 +13 +14 +14 +14 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +43 +42 +43 +46 +47 +50 +51 +51 +55 +55 +59 +58 +58 +65 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +89 +90 +90 +96 +96 +100 +100 +100 +106 +105 +110 +110 +110 +116 +116 +119 +119 +119 +125 +125 +129 +129 +129 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +169 +169 +173 +173 +173 +175 +175 +179 +179 +182 +183 +183 +184 +184 +189 +189 +188 +190 +190 +190 +190 +190 +194 +194 +197 +196 +196 +198 +198 +200 +200 +200 +200 +200 +202 +202 +204 +204 +205 +205 +204 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +205 +205 +205 +205 +204 +202 +202 +203 +201 +201 +200 +200 +200 +199 +199 +197 +197 +196 +194 +194 +190 +191 +190 +188 +188 +185 +185 +182 +183 +183 +179 +179 +174 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +130 +129 +126 +125 +120 +120 +120 +116 +115 +110 +109 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +87 +86 +86 +82 +82 +76 +76 +76 +72 +72 +69 +68 +69 +64 +64 +58 +58 +58 +55 +55 +50 +51 +49 +47 +47 +42 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +12 +14 +13 +14 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +14 +14 +13 +13 +14 +14 +13 +14 +13 +14 +14 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +46 +46 +47 +51 +50 +54 +54 +55 +58 +59 +65 +64 +69 +69 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +115 +120 +120 +120 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +158 +161 +161 +165 +165 +168 +169 +169 +173 +173 +175 +175 +174 +179 +179 +178 +179 +179 +183 +183 +185 +185 +185 +189 +189 +191 +191 +192 +195 +194 +197 +197 +198 +198 +199 +201 +200 +201 +201 +201 +202 +202 +203 +203 +202 +204 +204 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +205 +204 +204 +204 +204 +202 +202 +203 +200 +200 +200 +200 +201 +198 +199 +196 +197 +195 +194 +194 +190 +191 +188 +188 +188 +184 +184 +182 +182 +182 +179 +179 +175 +174 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +126 +119 +120 +116 +116 +110 +110 +109 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +68 +68 +65 +65 +59 +58 +58 +55 +54 +51 +51 +50 +46 +46 +47 +47 +47 +43 +43 +41 +40 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +26 +25 +25 +21 +21 +19 +19 +19 +17 +17 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +14 +13 +14 +14 +13 +13 +14 +14 +13 +13 +13 +14 +13 +14 +14 +13 +14 +13 +14 +14 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +40 +43 +42 +47 +46 +47 +50 +51 +54 +55 +55 +59 +58 +65 +64 +64 +68 +68 +72 +72 +72 +76 +77 +82 +82 +83 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +105 +109 +109 +115 +115 +115 +119 +120 +125 +126 +126 +129 +129 +133 +133 +134 +140 +140 +143 +143 +148 +147 +147 +151 +151 +157 +157 +157 +161 +161 +161 +161 +161 +165 +165 +169 +169 +169 +173 +172 +175 +175 +176 +178 +178 +183 +182 +184 +184 +184 +189 +188 +191 +190 +190 +194 +195 +194 +195 +194 +196 +197 +198 +198 +198 +201 +201 +200 +200 +203 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +207 +206 +206 +207 +207 +206 +206 +206 +207 +206 +206 +204 +205 +204 +204 +202 +202 +202 +200 +201 +200 +200 +200 +198 +198 +196 +196 +196 +195 +195 +190 +190 +191 +188 +189 +184 +184 +185 +182 +183 +179 +178 +175 +174 +175 +173 +169 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +134 +130 +129 +129 +125 +125 +119 +119 +119 +116 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +69 +68 +64 +64 +59 +59 +59 +54 +54 +50 +50 +51 +47 +47 +43 +43 +42 +41 +41 +37 +36 +33 +32 +33 +31 +31 +31 +31 +31 +27 +26 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +12 +14 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +31 +31 +33 +33 +38 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +51 +51 +55 +54 +58 +59 +58 +65 +64 +68 +68 +69 +72 +72 +76 +76 +83 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +109 +110 +115 +115 +119 +120 +120 +126 +125 +129 +129 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +175 +175 +175 +179 +179 +182 +183 +183 +185 +184 +184 +185 +185 +189 +188 +191 +191 +191 +194 +194 +196 +196 +198 +198 +198 +200 +200 +200 +201 +200 +203 +202 +204 +204 +204 +205 +204 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +204 +205 +205 +204 +203 +203 +200 +200 +200 +201 +200 +199 +199 +199 +196 +196 +195 +195 +194 +190 +190 +188 +188 +185 +184 +185 +183 +183 +178 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +144 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +126 +126 +119 +119 +116 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +83 +82 +76 +76 +76 +76 +76 +73 +72 +68 +68 +68 +65 +65 +59 +58 +56 +55 +55 +51 +51 +46 +47 +47 +43 +43 +41 +41 +41 +37 +37 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +22 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +13 +14 +14 +14 +13 +14 +14 +13 +13 +13 +14 +14 +14 +13 +13 +14 +13 +13 +13 +14 +14 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +42 +43 +47 +47 +51 +51 +51 +54 +54 +58 +58 +64 +65 +65 +68 +68 +73 +72 +72 +77 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +101 +106 +106 +110 +110 +116 +115 +116 +119 +119 +125 +125 +125 +130 +129 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +148 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +173 +173 +173 +175 +175 +179 +179 +179 +182 +182 +185 +184 +188 +189 +188 +190 +190 +194 +195 +194 +197 +196 +199 +198 +199 +200 +200 +200 +200 +200 +202 +202 +204 +205 +205 +204 +205 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +207 +206 +206 +206 +206 +204 +204 +205 +204 +204 +203 +202 +201 +200 +201 +201 +200 +199 +199 +197 +196 +197 +195 +195 +190 +190 +190 +189 +188 +185 +185 +185 +182 +182 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +148 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +130 +125 +125 +126 +120 +119 +116 +116 +110 +110 +109 +105 +106 +100 +100 +100 +96 +96 +95 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +72 +72 +68 +68 +64 +65 +64 +58 +59 +54 +54 +54 +50 +50 +51 +51 +50 +47 +47 +43 +43 +42 +41 +41 +37 +37 +34 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +14 +14 +14 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +14 +13 +14 +13 +13 +13 +13 +14 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +42 +43 +48 +46 +47 +50 +51 +55 +54 +55 +58 +58 +64 +65 +65 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +96 +94 +96 +99 +99 +106 +106 +106 +110 +109 +110 +109 +109 +116 +116 +120 +119 +119 +125 +125 +130 +130 +130 +133 +134 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +157 +157 +157 +160 +161 +164 +165 +165 +169 +169 +173 +173 +174 +175 +175 +179 +179 +182 +182 +183 +184 +184 +189 +189 +189 +191 +191 +195 +194 +194 +196 +197 +198 +198 +199 +200 +201 +200 +200 +202 +202 +202 +204 +204 +204 +204 +205 +206 +206 +207 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +205 +204 +204 +203 +203 +203 +200 +200 +200 +201 +200 +198 +198 +197 +196 +196 +194 +194 +190 +190 +190 +189 +188 +184 +185 +185 +183 +182 +179 +179 +175 +175 +175 +173 +172 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +144 +139 +139 +133 +133 +129 +129 +129 +126 +125 +120 +119 +119 +116 +116 +115 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +68 +68 +69 +64 +65 +59 +58 +59 +55 +54 +51 +50 +47 +47 +47 +43 +43 +41 +40 +40 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +16 +15 +16 +15 +15 +13 +13 +13 +12 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +14 +13 +14 +13 +14 +14 +14 +13 +14 +14 +13 +14 +14 +13 +13 +15 +15 +15 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +32 +31 +31 +32 +37 +37 +37 +41 +41 +42 +43 +43 +46 +46 +50 +50 +50 +54 +54 +59 +59 +59 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +99 +100 +106 +106 +110 +110 +112 +116 +116 +120 +119 +125 +125 +125 +130 +129 +133 +133 +133 +139 +139 +139 +139 +139 +143 +143 +147 +148 +147 +151 +151 +157 +157 +158 +161 +161 +165 +165 +168 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +182 +184 +185 +189 +189 +189 +190 +191 +195 +195 +196 +196 +197 +199 +198 +200 +201 +201 +200 +200 +202 +202 +202 +204 +204 +204 +204 +205 +206 +206 +206 +206 +206 +207 +207 +206 +207 +207 +206 +206 +207 +207 +204 +204 +205 +205 +204 +202 +203 +202 +200 +201 +201 +201 +200 +199 +198 +197 +197 +196 +194 +195 +191 +191 +189 +189 +189 +184 +185 +182 +183 +183 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +148 +147 +147 +143 +143 +139 +139 +140 +133 +133 +133 +133 +133 +129 +129 +125 +125 +125 +119 +119 +115 +116 +113 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +69 +66 +64 +64 +59 +59 +54 +54 +54 +50 +50 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +13 +14 +13 +13 +13 +14 +13 +13 +13 +14 +14 +14 +14 +14 +14 +14 +14 +13 +13 +13 +13 +14 +14 +13 +13 +15 +15 +16 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +42 +47 +46 +47 +51 +51 +54 +54 +59 +58 +58 +64 +64 +68 +68 +68 +72 +72 +72 +72 +72 +77 +76 +82 +82 +82 +86 +86 +90 +90 +92 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +115 +120 +120 +120 +120 +120 +125 +125 +129 +129 +129 +134 +133 +139 +139 +141 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +174 +175 +179 +179 +183 +182 +184 +185 +184 +189 +188 +190 +191 +190 +194 +194 +197 +197 +196 +198 +198 +201 +200 +201 +200 +200 +202 +202 +202 +204 +205 +205 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +202 +200 +201 +201 +201 +199 +198 +198 +197 +196 +195 +194 +194 +190 +191 +189 +188 +189 +184 +185 +183 +182 +182 +178 +178 +175 +175 +175 +173 +173 +169 +169 +165 +165 +164 +161 +161 +157 +157 +157 +151 +151 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +134 +131 +129 +129 +126 +125 +119 +120 +120 +115 +116 +110 +110 +110 +106 +105 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +83 +82 +82 +76 +76 +72 +72 +72 +69 +68 +65 +64 +65 +59 +58 +54 +54 +55 +51 +51 +47 +47 +47 +42 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +26 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +13 +14 +14 +14 +13 +14 +14 +14 +14 +14 +14 +13 +13 +14 +13 +13 +13 +14 +13 +14 +14 +13 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +30 +33 +33 +37 +37 +41 +40 +41 +43 +43 +47 +46 +47 +51 +50 +50 +50 +50 +55 +55 +58 +59 +58 +64 +65 +68 +69 +67 +73 +72 +76 +77 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +115 +119 +119 +120 +126 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +182 +183 +184 +185 +189 +189 +188 +190 +190 +195 +194 +194 +196 +196 +198 +198 +201 +201 +200 +200 +201 +202 +202 +202 +204 +204 +204 +205 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +205 +205 +204 +204 +204 +202 +202 +202 +200 +200 +200 +200 +200 +198 +199 +196 +196 +197 +194 +195 +190 +191 +190 +188 +189 +185 +184 +183 +183 +183 +179 +179 +175 +174 +175 +173 +173 +173 +173 +173 +169 +169 +165 +165 +165 +161 +160 +157 +157 +157 +151 +151 +147 +147 +143 +144 +143 +139 +139 +133 +133 +134 +130 +129 +129 +129 +130 +125 +126 +119 +119 +120 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +69 +69 +64 +65 +58 +59 +55 +54 +54 +51 +50 +46 +47 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +19 +20 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +14 +14 +14 +13 +14 +13 +13 +13 +14 +14 +14 +14 +14 +13 +13 +14 +14 +14 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +33 +33 +33 +37 +37 +40 +41 +41 +43 +43 +47 +47 +48 +50 +50 +54 +54 +58 +59 +59 +65 +64 +68 +69 +68 +72 +72 +72 +72 +72 +76 +76 +82 +82 +83 +86 +86 +90 +90 +92 +96 +96 +100 +100 +105 +105 +106 +110 +110 +115 +115 +115 +120 +119 +125 +125 +126 +129 +130 +133 +133 +134 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +178 +182 +182 +185 +185 +189 +188 +188 +191 +191 +195 +195 +194 +196 +196 +198 +198 +198 +200 +201 +200 +200 +200 +203 +202 +204 +204 +204 +204 +205 +206 +207 +207 +207 +206 +207 +206 +206 +206 +207 +207 +206 +206 +206 +206 +204 +204 +204 +204 +205 +202 +202 +201 +201 +201 +200 +201 +199 +198 +197 +196 +197 +194 +194 +190 +191 +190 +189 +189 +184 +185 +184 +183 +183 +179 +179 +179 +175 +174 +173 +173 +171 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +147 +147 +147 +143 +143 +139 +139 +140 +133 +133 +130 +129 +130 +125 +125 +120 +120 +115 +116 +116 +109 +110 +106 +105 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +87 +82 +83 +76 +76 +75 +72 +72 +68 +68 +65 +64 +64 +58 +58 +54 +54 +55 +51 +51 +46 +47 +47 +43 +42 +40 +41 +41 +37 +36 +34 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +14 +13 +14 +13 +13 +13 +14 +14 +13 +13 +14 +13 +13 +14 +14 +13 +14 +14 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +40 +41 +42 +43 +47 +46 +50 +51 +51 +55 +55 +58 +58 +58 +64 +64 +64 +64 +64 +68 +68 +72 +72 +72 +77 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +109 +110 +115 +116 +116 +119 +119 +126 +125 +126 +129 +129 +133 +133 +138 +139 +139 +143 +143 +147 +147 +147 +151 +151 +152 +151 +151 +157 +157 +161 +161 +162 +165 +165 +169 +169 +169 +173 +173 +175 +175 +179 +178 +179 +183 +182 +184 +184 +185 +188 +188 +191 +191 +190 +195 +194 +197 +196 +197 +198 +199 +201 +201 +201 +201 +200 +203 +203 +205 +204 +204 +204 +205 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +204 +204 +205 +204 +204 +203 +202 +200 +200 +201 +200 +201 +199 +198 +198 +196 +196 +197 +197 +197 +195 +195 +190 +191 +190 +189 +188 +184 +185 +184 +182 +183 +179 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +148 +143 +143 +139 +139 +133 +133 +133 +130 +130 +125 +125 +125 +120 +119 +115 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +91 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +59 +59 +54 +54 +55 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +30 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +14 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +14 +14 +13 +14 +14 +13 +14 +13 +13 +14 +13 +13 +13 +13 +12 +15 +15 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +36 +41 +41 +41 +43 +43 +43 +43 +43 +46 +47 +51 +51 +51 +54 +55 +58 +58 +59 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +115 +115 +116 +119 +120 +126 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +165 +165 +165 +169 +169 +172 +173 +173 +175 +175 +179 +178 +179 +183 +183 +185 +185 +185 +188 +189 +190 +191 +191 +195 +195 +197 +196 +199 +198 +199 +200 +200 +200 +201 +200 +203 +202 +205 +204 +204 +205 +204 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +204 +205 +204 +204 +204 +202 +202 +202 +202 +202 +200 +201 +200 +200 +200 +198 +199 +196 +196 +196 +194 +195 +191 +190 +188 +189 +188 +185 +185 +183 +182 +183 +179 +179 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +163 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +130 +129 +125 +125 +126 +119 +119 +115 +116 +109 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +77 +76 +72 +72 +72 +68 +68 +64 +64 +59 +59 +59 +55 +55 +51 +51 +51 +46 +47 +43 +43 +43 +40 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +14 +13 +14 +13 +13 +14 +13 +14 +13 +13 +14 +13 +13 +13 +14 +14 +14 +13 +13 +14 +13 +14 +13 +14 +13 +13 +13 +15 +15 +16 +17 +17 +19 +19 +22 +21 +21 +25 +25 +27 +27 +27 +31 +31 +31 +31 +31 +33 +33 +37 +36 +37 +41 +40 +43 +43 +43 +47 +47 +51 +50 +54 +54 +55 +58 +59 +65 +64 +65 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +92 +95 +95 +100 +100 +106 +106 +106 +109 +109 +116 +116 +116 +119 +119 +125 +126 +126 +129 +129 +134 +133 +133 +139 +139 +143 +143 +148 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +172 +175 +175 +178 +179 +178 +182 +183 +184 +184 +188 +188 +188 +191 +190 +194 +194 +194 +196 +197 +198 +198 +198 +200 +200 +200 +200 +200 +202 +202 +204 +204 +205 +205 +205 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +207 +204 +205 +204 +204 +204 +202 +202 +201 +200 +200 +200 +200 +198 +198 +197 +196 +197 +194 +194 +195 +191 +191 +190 +191 +191 +189 +189 +185 +184 +185 +183 +183 +179 +178 +177 +174 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +144 +139 +139 +133 +134 +129 +129 +129 +126 +126 +119 +119 +120 +115 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +76 +76 +76 +72 +73 +68 +68 +68 +65 +64 +59 +59 +59 +54 +54 +50 +51 +51 +47 +46 +43 +43 +43 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +20 +19 +17 +18 +17 +15 +15 +15 +15 +16 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +14 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +14 +13 +14 +13 +12 +15 +15 +15 +15 +15 +17 +17 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +30 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +46 +47 +50 +51 +51 +54 +54 +58 +58 +59 +64 +65 +69 +68 +72 +73 +73 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +116 +120 +120 +126 +126 +126 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +172 +173 +173 +175 +175 +178 +179 +179 +183 +182 +185 +185 +185 +188 +188 +190 +191 +191 +194 +194 +197 +197 +196 +198 +199 +201 +200 +201 +201 +200 +203 +202 +204 +204 +204 +204 +204 +204 +204 +205 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +204 +205 +205 +204 +204 +202 +202 +202 +200 +200 +200 +201 +200 +200 +201 +198 +198 +199 +196 +197 +195 +195 +191 +190 +191 +189 +188 +185 +185 +185 +183 +183 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +126 +120 +120 +116 +115 +115 +110 +110 +106 +106 +101 +100 +100 +96 +96 +90 +90 +90 +86 +86 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +69 +69 +68 +64 +64 +59 +58 +55 +55 +55 +50 +51 +47 +47 +47 +42 +43 +40 +41 +41 +36 +36 +33 +33 +33 +31 +31 +27 +27 +28 +25 +25 +21 +21 +20 +19 +19 +17 +17 +15 +15 +15 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +14 +14 +14 +14 +13 +14 +14 +14 +13 +13 +14 +13 +14 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +40 +41 +41 +43 +43 +47 +46 +50 +51 +50 +54 +55 +58 +58 +58 +64 +64 +68 +68 +69 +72 +76 +76 +76 +76 +83 +82 +86 +86 +86 +90 +90 +96 +96 +99 +100 +100 +106 +106 +109 +110 +110 +115 +116 +119 +120 +120 +126 +126 +129 +129 +129 +134 +133 +139 +139 +140 +143 +143 +147 +147 +152 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +174 +179 +179 +183 +183 +183 +185 +184 +188 +188 +191 +190 +190 +195 +194 +196 +197 +197 +199 +198 +198 +198 +198 +201 +201 +200 +200 +201 +203 +202 +205 +205 +205 +204 +205 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +202 +200 +201 +200 +200 +198 +198 +199 +196 +196 +194 +195 +194 +191 +190 +188 +188 +189 +185 +184 +183 +183 +183 +178 +179 +175 +175 +172 +173 +173 +169 +169 +165 +165 +165 +161 +161 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +144 +139 +139 +133 +133 +130 +129 +129 +125 +125 +120 +119 +119 +116 +115 +109 +110 +109 +106 +106 +99 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +58 +59 +55 +54 +51 +50 +51 +47 +46 +43 +43 +43 +41 +41 +37 +37 +33 +32 +33 +31 +31 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +12 +14 +13 +13 +13 +14 +14 +14 +13 +13 +14 +14 +14 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +14 +14 +13 +14 +13 +12 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +42 +43 +47 +47 +47 +50 +51 +55 +54 +54 +58 +58 +64 +64 +64 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +116 +115 +119 +120 +126 +125 +130 +129 +129 +133 +133 +139 +139 +139 +143 +143 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +162 +162 +165 +165 +169 +169 +172 +172 +173 +175 +175 +179 +179 +179 +183 +183 +183 +183 +182 +185 +185 +189 +188 +188 +191 +191 +194 +194 +195 +196 +197 +199 +198 +200 +200 +201 +200 +200 +202 +202 +202 +204 +205 +205 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +203 +202 +201 +200 +200 +201 +200 +199 +198 +199 +196 +196 +194 +194 +191 +190 +191 +188 +188 +184 +185 +185 +183 +182 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +166 +161 +161 +157 +157 +150 +151 +151 +147 +147 +144 +143 +143 +139 +139 +133 +133 +133 +130 +129 +125 +125 +125 +120 +120 +116 +115 +116 +109 +110 +105 +105 +100 +99 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +73 +72 +68 +68 +64 +64 +65 +59 +58 +54 +54 +50 +50 +50 +46 +46 +42 +43 +43 +41 +41 +41 +41 +40 +36 +37 +33 +33 +33 +31 +30 +27 +27 +26 +26 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +13 +13 +14 +14 +13 +14 +14 +14 +14 +14 +14 +14 +14 +13 +14 +13 +13 +14 +14 +14 +13 +13 +13 +13 +12 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +36 +37 +37 +41 +41 +43 +43 +43 +47 +46 +51 +51 +54 +54 +54 +58 +58 +64 +64 +64 +68 +69 +72 +72 +72 +76 +77 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +106 +106 +106 +109 +110 +116 +115 +116 +120 +119 +125 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +144 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +185 +185 +186 +188 +189 +191 +191 +194 +194 +194 +196 +196 +199 +198 +198 +200 +200 +200 +200 +201 +200 +201 +202 +202 +203 +204 +205 +204 +204 +206 +207 +207 +207 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +205 +204 +204 +204 +205 +203 +202 +203 +200 +201 +200 +200 +198 +198 +198 +196 +196 +194 +194 +195 +190 +191 +189 +188 +189 +185 +185 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +130 +125 +125 +120 +119 +116 +116 +116 +110 +109 +106 +106 +106 +99 +100 +95 +96 +96 +90 +90 +87 +86 +86 +82 +82 +77 +76 +77 +72 +72 +68 +69 +65 +64 +64 +58 +59 +54 +55 +55 +50 +50 +47 +47 +47 +43 +43 +41 +40 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +26 +25 +25 +21 +21 +19 +19 +19 +17 +17 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +14 +14 +14 +13 +14 +13 +13 +14 +13 +13 +14 +13 +13 +13 +14 +13 +14 +14 +14 +14 +13 +13 +13 +13 +16 +15 +15 +17 +17 +18 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +46 +47 +47 +51 +50 +55 +55 +54 +58 +59 +64 +65 +64 +68 +68 +72 +72 +72 +76 +77 +82 +82 +82 +86 +86 +90 +90 +96 +96 +96 +100 +100 +105 +106 +106 +110 +109 +116 +115 +115 +119 +120 +126 +126 +125 +129 +130 +133 +133 +133 +140 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +161 +161 +161 +166 +165 +169 +169 +169 +173 +173 +175 +175 +176 +179 +179 +183 +183 +184 +185 +184 +188 +189 +191 +191 +191 +194 +194 +195 +195 +195 +197 +197 +198 +198 +198 +200 +201 +200 +200 +201 +202 +203 +204 +204 +204 +204 +205 +206 +206 +207 +206 +207 +207 +206 +206 +206 +207 +206 +206 +206 +207 +206 +206 +207 +204 +205 +204 +204 +204 +203 +203 +200 +200 +200 +200 +200 +198 +199 +198 +196 +196 +194 +194 +195 +190 +191 +189 +189 +188 +185 +184 +182 +182 +179 +178 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +158 +151 +151 +147 +147 +148 +143 +143 +139 +139 +134 +133 +133 +130 +129 +125 +126 +126 +119 +119 +120 +119 +120 +115 +116 +110 +110 +109 +106 +106 +100 +100 +100 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +73 +72 +72 +68 +68 +64 +64 +64 +58 +59 +54 +54 +53 +51 +50 +47 +47 +43 +43 +42 +41 +40 +37 +37 +37 +33 +32 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +18 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +13 +14 +13 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +37 +37 +37 +41 +41 +43 +42 +43 +47 +47 +50 +51 +50 +54 +54 +59 +58 +65 +65 +64 +69 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +101 +106 +105 +110 +109 +116 +115 +115 +119 +119 +125 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +153 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +175 +175 +175 +179 +179 +182 +183 +183 +185 +185 +189 +189 +191 +191 +190 +195 +194 +197 +196 +196 +199 +198 +201 +201 +200 +200 +200 +203 +202 +202 +204 +204 +204 +205 +205 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +205 +202 +202 +202 +200 +200 +200 +200 +201 +198 +198 +196 +196 +195 +194 +194 +190 +190 +188 +188 +189 +185 +185 +183 +183 +182 +179 +179 +175 +175 +175 +173 +173 +169 +169 +170 +165 +165 +160 +161 +158 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +119 +120 +115 +116 +110 +110 +105 +106 +106 +100 +100 +96 +96 +96 +90 +90 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +73 +74 +68 +68 +64 +65 +58 +59 +59 +55 +54 +51 +51 +51 +47 +46 +47 +47 +47 +43 +43 +41 +40 +41 +37 +37 +33 +33 +31 +31 +30 +27 +27 +25 +25 +25 +20 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +14 +14 +14 +13 +14 +14 +14 +13 +14 +14 +14 +14 +14 +13 +13 +14 +14 +13 +14 +14 +14 +13 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +51 +50 +51 +55 +55 +59 +58 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +77 +82 +82 +86 +86 +87 +90 +90 +96 +96 +99 +100 +100 +106 +106 +110 +110 +109 +116 +116 +116 +115 +116 +119 +119 +125 +125 +125 +130 +129 +133 +134 +133 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +161 +161 +161 +164 +165 +169 +169 +169 +173 +173 +175 +175 +178 +179 +178 +182 +183 +185 +185 +185 +188 +189 +191 +191 +191 +195 +195 +196 +197 +196 +198 +199 +200 +201 +201 +201 +201 +202 +203 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +203 +203 +200 +200 +200 +200 +200 +199 +198 +199 +197 +196 +194 +194 +194 +190 +190 +189 +188 +188 +185 +184 +183 +183 +183 +179 +179 +174 +174 +173 +172 +173 +169 +169 +165 +165 +165 +160 +161 +161 +160 +161 +157 +157 +151 +151 +151 +148 +147 +143 +144 +143 +139 +139 +133 +133 +129 +129 +130 +125 +126 +119 +119 +120 +115 +116 +109 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +88 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +69 +68 +65 +65 +64 +64 +65 +58 +58 +55 +55 +54 +50 +51 +46 +47 +43 +43 +43 +41 +41 +38 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +13 +13 +13 +14 +13 +14 +13 +14 +13 +13 +13 +13 +13 +15 +16 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +37 +37 +37 +41 +41 +40 +41 +41 +43 +43 +47 +47 +47 +51 +51 +55 +54 +55 +59 +58 +65 +65 +65 +68 +68 +72 +72 +76 +76 +77 +82 +82 +86 +86 +86 +89 +90 +90 +90 +90 +96 +96 +100 +100 +100 +105 +106 +110 +110 +112 +116 +116 +119 +120 +125 +126 +125 +129 +129 +133 +133 +133 +140 +139 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +158 +161 +161 +165 +165 +168 +169 +169 +173 +173 +175 +175 +175 +178 +179 +182 +182 +183 +184 +185 +188 +189 +189 +191 +191 +194 +194 +196 +197 +197 +198 +199 +200 +200 +200 +201 +201 +203 +202 +202 +204 +204 +205 +205 +205 +207 +206 +207 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +206 +204 +204 +205 +204 +205 +203 +202 +202 +200 +200 +200 +201 +200 +198 +199 +196 +197 +197 +195 +194 +191 +190 +189 +189 +188 +185 +185 +183 +182 +183 +179 +179 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +139 +139 +139 +133 +133 +129 +129 +129 +125 +126 +119 +120 +118 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +90 +90 +91 +86 +86 +82 +82 +82 +76 +76 +72 +72 +71 +68 +68 +64 +65 +58 +58 +58 +54 +54 +50 +50 +50 +47 +47 +43 +43 +43 +41 +41 +36 +37 +37 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +14 +13 +13 +14 +13 +14 +14 +14 +14 +14 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +13 +14 +13 +12 +15 +15 +17 +17 +20 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +38 +37 +41 +41 +43 +43 +43 +46 +47 +51 +51 +54 +54 +54 +59 +58 +64 +64 +65 +68 +68 +69 +68 +69 +72 +72 +76 +76 +76 +82 +82 +86 +86 +88 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +115 +115 +116 +116 +119 +120 +126 +125 +125 +129 +130 +133 +133 +136 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +182 +182 +182 +185 +185 +188 +188 +189 +191 +191 +194 +195 +194 +196 +196 +199 +199 +198 +200 +201 +201 +200 +200 +202 +202 +204 +204 +205 +205 +204 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +200 +200 +201 +201 +200 +198 +199 +196 +196 +196 +195 +194 +195 +195 +195 +190 +191 +188 +189 +188 +184 +185 +182 +182 +183 +178 +179 +175 +175 +172 +173 +173 +169 +169 +165 +165 +165 +161 +161 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +144 +139 +139 +133 +133 +129 +130 +129 +125 +125 +119 +119 +119 +116 +115 +115 +115 +115 +110 +110 +105 +106 +106 +100 +100 +96 +95 +91 +90 +90 +86 +86 +82 +82 +82 +76 +77 +72 +73 +73 +68 +68 +64 +64 +65 +58 +58 +54 +54 +55 +51 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +18 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +13 +14 +14 +13 +13 +14 +14 +14 +14 +13 +14 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +26 +27 +27 +31 +31 +32 +33 +33 +37 +37 +41 +41 +41 +43 +43 +46 +46 +47 +51 +50 +55 +55 +54 +58 +58 +64 +65 +66 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +109 +111 +116 +115 +120 +120 +125 +125 +125 +130 +130 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +152 +157 +157 +161 +161 +165 +165 +164 +169 +168 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +185 +185 +185 +189 +188 +191 +191 +191 +195 +195 +197 +196 +197 +198 +198 +200 +200 +201 +200 +201 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +207 +206 +206 +207 +207 +206 +206 +206 +207 +206 +207 +207 +204 +204 +204 +204 +204 +202 +202 +200 +200 +200 +200 +200 +199 +199 +199 +197 +196 +195 +194 +195 +191 +190 +189 +188 +185 +184 +185 +183 +182 +178 +179 +179 +174 +175 +173 +173 +173 +169 +170 +165 +165 +166 +161 +161 +157 +157 +158 +151 +151 +147 +147 +144 +143 +143 +139 +139 +139 +139 +139 +133 +133 +133 +133 +133 +129 +129 +125 +126 +125 +126 +125 +120 +120 +116 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +64 +64 +64 +59 +58 +55 +55 +54 +51 +51 +47 +46 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +14 +14 +13 +13 +14 +13 +14 +14 +14 +13 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +44 +47 +47 +51 +51 +54 +54 +55 +58 +58 +64 +65 +65 +68 +69 +69 +68 +68 +72 +73 +76 +76 +77 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +115 +120 +120 +120 +125 +125 +130 +129 +130 +133 +134 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +178 +179 +183 +183 +185 +185 +184 +188 +189 +190 +190 +190 +195 +195 +197 +197 +197 +198 +198 +200 +200 +200 +201 +200 +203 +202 +203 +204 +205 +204 +204 +207 +207 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +204 +204 +205 +204 +205 +202 +203 +203 +201 +200 +200 +200 +199 +199 +199 +196 +197 +194 +195 +194 +190 +191 +189 +189 +188 +184 +184 +183 +183 +183 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +151 +151 +151 +147 +147 +143 +143 +144 +139 +139 +133 +133 +132 +129 +129 +125 +126 +119 +119 +120 +116 +116 +110 +109 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +83 +82 +77 +76 +76 +72 +72 +68 +68 +68 +65 +65 +59 +58 +59 +54 +54 +50 +51 +51 +46 +47 +42 +43 +43 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +28 +27 +25 +25 +21 +21 +21 +19 +19 +16 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +14 +13 +14 +14 +14 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +14 +13 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +30 +33 +33 +34 +37 +38 +41 +41 +43 +43 +43 +47 +47 +51 +51 +51 +54 +55 +54 +55 +55 +58 +58 +65 +65 +65 +68 +68 +73 +72 +76 +76 +76 +82 +82 +86 +86 +87 +90 +90 +96 +96 +96 +100 +100 +105 +106 +106 +110 +110 +116 +116 +116 +120 +120 +125 +126 +129 +130 +129 +133 +134 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +170 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +182 +185 +185 +189 +189 +188 +190 +190 +195 +194 +194 +197 +197 +198 +198 +198 +201 +200 +200 +201 +203 +202 +203 +204 +205 +205 +204 +204 +206 +206 +207 +206 +206 +206 +206 +206 +207 +207 +206 +207 +206 +206 +207 +205 +205 +204 +205 +203 +202 +203 +201 +200 +200 +200 +200 +198 +198 +197 +196 +194 +194 +195 +190 +191 +190 +189 +189 +184 +185 +185 +183 +183 +178 +179 +174 +174 +175 +173 +173 +169 +169 +169 +165 +165 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +144 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +126 +119 +120 +115 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +95 +94 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +65 +64 +59 +59 +54 +55 +55 +51 +50 +47 +46 +43 +42 +42 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +16 +15 +15 +13 +13 +12 +13 +14 +14 +14 +13 +13 +14 +13 +14 +13 +13 +14 +13 +13 +13 +14 +13 +14 +13 +13 +13 +14 +14 +14 +13 +14 +14 +13 +13 +15 +15 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +43 +43 +43 +47 +47 +51 +50 +51 +55 +55 +58 +59 +61 +65 +65 +69 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +109 +115 +115 +116 +119 +120 +125 +126 +126 +129 +129 +133 +133 +134 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +178 +182 +183 +185 +185 +185 +189 +188 +190 +191 +191 +195 +194 +196 +196 +199 +198 +199 +200 +200 +200 +200 +200 +202 +202 +204 +204 +204 +204 +204 +206 +207 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +207 +206 +206 +204 +204 +204 +204 +205 +202 +202 +202 +203 +203 +201 +201 +200 +201 +200 +198 +198 +197 +196 +197 +195 +195 +191 +190 +188 +189 +189 +185 +185 +183 +182 +182 +179 +179 +179 +178 +179 +175 +174 +173 +173 +173 +169 +169 +165 +165 +162 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +130 +129 +125 +125 +126 +119 +115 +116 +112 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +68 +68 +64 +64 +59 +59 +58 +54 +54 +51 +50 +50 +47 +47 +43 +43 +43 +41 +41 +36 +37 +37 +33 +33 +31 +31 +31 +27 +26 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +14 +13 +14 +13 +14 +14 +14 +14 +13 +14 +13 +14 +14 +14 +14 +14 +14 +14 +13 +14 +13 +13 +16 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +46 +47 +47 +51 +50 +54 +54 +54 +58 +58 +65 +64 +65 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +115 +115 +119 +119 +125 +125 +126 +130 +130 +134 +133 +133 +139 +139 +144 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +182 +184 +185 +189 +189 +189 +191 +190 +194 +194 +194 +196 +196 +199 +198 +199 +201 +200 +200 +201 +200 +203 +203 +204 +204 +205 +204 +205 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +205 +202 +202 +201 +200 +201 +200 +201 +198 +199 +198 +197 +196 +195 +195 +194 +190 +191 +191 +191 +190 +189 +188 +186 +185 +185 +183 +183 +178 +179 +176 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +144 +139 +139 +133 +133 +130 +130 +130 +126 +126 +119 +120 +119 +115 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +76 +76 +76 +72 +72 +69 +68 +68 +64 +64 +59 +58 +58 +54 +54 +51 +51 +51 +47 +47 +43 +43 +43 +41 +40 +37 +37 +34 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +16 +16 +13 +13 +12 +13 +14 +13 +13 +13 +14 +13 +13 +14 +13 +13 +14 +13 +14 +14 +14 +13 +13 +14 +14 +13 +14 +13 +14 +13 +13 +13 +13 +12 +15 +15 +17 +17 +19 +19 +19 +21 +21 +21 +21 +21 +25 +24 +27 +27 +27 +31 +31 +33 +33 +36 +37 +36 +41 +40 +42 +43 +43 +47 +47 +51 +51 +50 +55 +55 +59 +58 +58 +64 +64 +68 +68 +69 +72 +72 +76 +76 +81 +82 +82 +86 +85 +90 +90 +90 +96 +96 +100 +100 +100 +106 +105 +110 +110 +110 +116 +116 +119 +120 +120 +126 +125 +130 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +156 +157 +161 +161 +161 +164 +165 +169 +169 +169 +172 +173 +175 +175 +178 +178 +179 +183 +183 +185 +184 +185 +188 +188 +190 +190 +190 +194 +194 +196 +196 +196 +198 +198 +200 +200 +201 +200 +200 +203 +203 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +205 +204 +204 +204 +204 +202 +202 +202 +201 +200 +200 +200 +200 +198 +198 +199 +198 +198 +196 +196 +194 +194 +195 +190 +191 +188 +188 +186 +184 +185 +183 +182 +178 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +143 +143 +143 +140 +139 +133 +133 +133 +129 +129 +125 +125 +126 +119 +120 +116 +115 +116 +110 +110 +105 +106 +106 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +59 +58 +54 +54 +55 +50 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +20 +17 +17 +15 +15 +16 +15 +15 +13 +14 +12 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +14 +13 +14 +14 +14 +14 +14 +13 +13 +14 +14 +13 +13 +14 +13 +13 +13 +13 +14 +13 +13 +15 +15 +15 +15 +15 +17 +16 +17 +19 +19 +21 +21 +23 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +46 +47 +51 +50 +51 +55 +54 +59 +58 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +105 +109 +110 +115 +115 +116 +119 +120 +125 +125 +126 +130 +129 +133 +134 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +174 +175 +179 +179 +178 +182 +183 +185 +184 +184 +189 +189 +191 +190 +191 +194 +194 +197 +197 +199 +199 +198 +200 +201 +201 +200 +200 +202 +202 +202 +202 +203 +204 +204 +204 +205 +204 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +205 +204 +204 +204 +204 +204 +204 +204 +202 +202 +201 +201 +201 +201 +200 +198 +199 +197 +197 +196 +194 +194 +190 +190 +190 +188 +189 +184 +185 +184 +182 +182 +179 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +140 +139 +133 +133 +133 +129 +129 +125 +125 +126 +119 +120 +115 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +73 +72 +73 +68 +68 +64 +64 +59 +59 +58 +54 +55 +50 +51 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +22 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +14 +14 +14 +14 +14 +14 +13 +13 +14 +14 +14 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +47 +47 +46 +50 +50 +55 +54 +55 +58 +58 +64 +64 +65 +68 +68 +73 +73 +72 +77 +76 +83 +82 +82 +86 +89 +89 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +115 +120 +120 +125 +125 +125 +129 +130 +133 +133 +134 +139 +139 +143 +143 +148 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +178 +183 +182 +184 +185 +189 +189 +189 +190 +191 +194 +194 +194 +196 +197 +197 +197 +196 +198 +198 +201 +200 +200 +200 +200 +203 +202 +202 +204 +204 +204 +204 +206 +206 +207 +206 +206 +207 +207 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +207 +204 +204 +205 +204 +205 +203 +203 +200 +200 +200 +200 +200 +199 +199 +196 +196 +197 +195 +194 +191 +190 +190 +189 +188 +185 +184 +185 +183 +183 +178 +179 +175 +175 +175 +173 +172 +168 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +148 +143 +143 +143 +143 +144 +139 +139 +134 +133 +134 +129 +130 +125 +126 +125 +120 +120 +116 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +83 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +58 +58 +54 +55 +55 +50 +51 +47 +47 +47 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +18 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +14 +14 +13 +13 +13 +14 +13 +14 +13 +14 +14 +13 +14 +14 +14 +13 +13 +14 +13 +14 +14 +14 +14 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +30 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +46 +50 +51 +50 +55 +55 +58 +58 +58 +64 +64 +68 +68 +73 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +115 +119 +120 +126 +126 +125 +129 +129 +134 +133 +134 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +164 +169 +169 +173 +173 +173 +175 +179 +179 +178 +182 +183 +183 +182 +182 +185 +185 +188 +188 +188 +190 +191 +195 +195 +195 +197 +196 +199 +198 +200 +200 +200 +201 +200 +203 +203 +203 +204 +204 +204 +204 +204 +204 +204 +206 +206 +206 +207 +206 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +204 +204 +205 +204 +205 +202 +202 +200 +200 +200 +200 +200 +198 +198 +199 +197 +197 +194 +194 +191 +190 +190 +189 +188 +184 +184 +184 +182 +183 +179 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +152 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +126 +125 +125 +119 +120 +115 +115 +116 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +77 +76 +72 +72 +72 +68 +68 +65 +64 +65 +58 +58 +54 +54 +51 +51 +51 +46 +47 +43 +43 +43 +41 +41 +41 +41 +41 +37 +37 +33 +33 +32 +30 +31 +27 +27 +26 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +13 +14 +14 +14 +13 +13 +13 +14 +13 +13 +14 +13 +14 +13 +13 +15 +15 +17 +17 +18 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +40 +43 +43 +43 +47 +47 +51 +51 +55 +55 +55 +59 +59 +64 +65 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +91 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +116 +116 +119 +119 +125 +125 +125 +130 +130 +134 +133 +133 +139 +140 +143 +143 +144 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +164 +169 +168 +169 +169 +169 +173 +173 +174 +175 +175 +179 +179 +182 +183 +183 +184 +185 +189 +188 +190 +190 +191 +194 +194 +196 +196 +196 +198 +198 +199 +198 +199 +200 +200 +200 +200 +201 +203 +202 +204 +205 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +205 +204 +205 +204 +205 +204 +205 +202 +203 +201 +200 +200 +200 +200 +198 +198 +199 +196 +196 +194 +194 +194 +191 +190 +189 +188 +188 +184 +185 +182 +182 +183 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +140 +133 +134 +130 +129 +126 +125 +125 +119 +120 +116 +115 +115 +109 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +73 +73 +72 +68 +69 +64 +64 +64 +58 +58 +58 +58 +58 +55 +54 +51 +51 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +33 +33 +32 +31 +31 +27 +27 +27 +25 +25 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +14 +14 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +37 +37 +36 +41 +41 +43 +43 +43 +47 +46 +51 +50 +50 +54 +55 +58 +58 +59 +64 +64 +69 +68 +69 +72 +72 +76 +76 +83 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +116 +119 +120 +120 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +148 +147 +151 +151 +151 +158 +157 +161 +161 +161 +165 +165 +169 +169 +170 +173 +173 +175 +175 +178 +179 +179 +182 +183 +184 +184 +184 +188 +189 +189 +189 +189 +190 +190 +195 +194 +194 +196 +197 +198 +198 +199 +201 +200 +201 +200 +202 +202 +202 +205 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +204 +205 +204 +204 +204 +202 +202 +202 +200 +200 +200 +200 +200 +198 +198 +197 +196 +196 +195 +195 +190 +191 +190 +189 +189 +184 +185 +183 +183 +183 +179 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +152 +147 +143 +143 +143 +139 +139 +140 +139 +139 +133 +133 +133 +129 +129 +125 +125 +125 +119 +120 +116 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +77 +76 +76 +76 +76 +72 +72 +68 +68 +69 +64 +64 +59 +58 +59 +54 +54 +51 +51 +46 +47 +47 +43 +43 +41 +41 +41 +37 +37 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +24 +24 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +14 +13 +13 +14 +13 +13 +14 +14 +14 +13 +14 +13 +13 +14 +14 +13 +13 +14 +14 +14 +14 +13 +14 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +24 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +46 +47 +50 +50 +50 +55 +55 +58 +58 +65 +64 +64 +68 +68 +73 +73 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +101 +106 +106 +110 +110 +115 +116 +115 +119 +119 +125 +125 +125 +129 +129 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +149 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +184 +185 +186 +188 +189 +190 +190 +194 +194 +195 +196 +196 +199 +198 +198 +200 +200 +200 +200 +200 +202 +202 +204 +204 +205 +204 +204 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +205 +204 +204 +202 +202 +200 +201 +200 +200 +201 +198 +198 +197 +196 +196 +195 +194 +190 +190 +191 +188 +188 +184 +185 +184 +183 +183 +179 +179 +178 +175 +175 +173 +173 +174 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +134 +129 +129 +125 +125 +126 +119 +119 +116 +115 +110 +109 +110 +105 +105 +100 +100 +100 +96 +96 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +74 +72 +72 +68 +68 +64 +64 +64 +58 +55 +54 +55 +51 +51 +50 +50 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +34 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +14 +13 +14 +14 +13 +13 +14 +14 +14 +14 +14 +14 +13 +13 +13 +14 +14 +14 +14 +13 +14 +13 +13 +13 +13 +14 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +40 +43 +43 +47 +46 +47 +51 +50 +55 +55 +55 +58 +58 +64 +65 +65 +68 +68 +72 +72 +73 +76 +76 +82 +82 +83 +86 +86 +90 +90 +96 +96 +96 +100 +100 +105 +106 +106 +110 +110 +109 +110 +110 +116 +116 +119 +119 +119 +125 +126 +130 +129 +131 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +157 +157 +157 +161 +161 +164 +165 +165 +169 +169 +173 +172 +174 +175 +175 +179 +178 +182 +182 +183 +185 +185 +189 +188 +188 +191 +190 +195 +194 +195 +196 +196 +198 +198 +199 +200 +201 +200 +200 +202 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +204 +204 +204 +204 +202 +202 +202 +200 +201 +200 +200 +200 +199 +198 +196 +196 +196 +194 +194 +190 +190 +190 +189 +189 +184 +185 +185 +182 +183 +179 +178 +175 +175 +175 +173 +173 +169 +169 +168 +165 +164 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +144 +139 +139 +133 +133 +129 +129 +129 +126 +125 +120 +119 +119 +115 +115 +110 +110 +109 +106 +106 +100 +100 +100 +96 +96 +90 +90 +88 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +64 +64 +64 +59 +58 +55 +55 +54 +50 +50 +47 +47 +45 +43 +42 +41 +41 +37 +36 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +13 +13 +14 +13 +14 +13 +14 +14 +14 +14 +13 +14 +14 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +51 +55 +55 +59 +58 +59 +65 +64 +68 +68 +68 +72 +73 +77 +76 +81 +82 +82 +86 +86 +90 +90 +90 +96 +96 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +118 +119 +119 +125 +125 +130 +129 +129 +133 +133 +139 +139 +139 +143 +143 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +163 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +178 +182 +182 +185 +184 +185 +189 +189 +191 +190 +191 +195 +195 +196 +196 +198 +198 +198 +201 +200 +201 +200 +200 +203 +202 +205 +204 +204 +205 +205 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +204 +204 +204 +204 +205 +202 +202 +200 +200 +200 +200 +200 +199 +199 +198 +197 +196 +194 +195 +195 +191 +190 +188 +188 +184 +185 +185 +183 +183 +178 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +158 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +134 +133 +130 +129 +125 +125 +125 +119 +120 +115 +116 +116 +110 +109 +106 +105 +106 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +77 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +59 +59 +55 +54 +54 +50 +50 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +28 +25 +25 +21 +21 +19 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +13 +14 +13 +14 +13 +13 +13 +14 +14 +13 +13 +14 +13 +13 +14 +13 +14 +13 +13 +14 +13 +13 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +28 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +50 +55 +55 +55 +59 +64 +64 +65 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +107 +109 +110 +115 +115 +119 +119 +119 +125 +125 +129 +129 +129 +133 +133 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +182 +182 +184 +185 +185 +189 +189 +190 +190 +194 +194 +195 +197 +196 +198 +199 +198 +200 +201 +201 +200 +200 +202 +202 +205 +205 +205 +205 +204 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +205 +204 +204 +204 +204 +202 +202 +201 +200 +201 +201 +200 +198 +198 +199 +196 +197 +195 +194 +191 +191 +190 +188 +189 +185 +184 +185 +183 +183 +183 +183 +182 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +126 +125 +120 +119 +120 +115 +115 +110 +110 +105 +106 +106 +100 +100 +96 +95 +96 +90 +90 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +69 +68 +68 +64 +64 +59 +59 +58 +55 +54 +51 +50 +51 +47 +47 +42 +43 +43 +41 +41 +37 +36 +37 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +13 +13 +14 +13 +13 +14 +13 +14 +13 +14 +14 +14 +13 +13 +14 +14 +13 +13 +14 +14 +14 +14 +13 +13 +12 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +40 +43 +43 +43 +47 +47 +51 +51 +55 +54 +55 +59 +59 +65 +64 +64 +68 +69 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +88 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +109 +110 +115 +116 +116 +115 +116 +119 +119 +125 +125 +126 +129 +129 +134 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +157 +157 +157 +161 +161 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +179 +178 +179 +182 +183 +184 +184 +185 +189 +188 +190 +190 +190 +194 +194 +197 +196 +197 +198 +198 +200 +201 +201 +200 +201 +202 +202 +205 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +205 +204 +205 +202 +202 +201 +200 +200 +200 +200 +198 +199 +198 +196 +197 +194 +194 +195 +191 +190 +188 +189 +189 +184 +185 +183 +182 +183 +178 +179 +175 +174 +174 +173 +173 +169 +169 +165 +165 +165 +161 +161 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +129 +130 +129 +125 +125 +119 +119 +119 +116 +115 +116 +115 +116 +110 +109 +106 +105 +106 +100 +100 +96 +96 +91 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +69 +64 +64 +64 +58 +58 +54 +54 +55 +51 +50 +47 +47 +43 +43 +42 +41 +41 +37 +36 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +14 +13 +12 +13 +13 +14 +13 +14 +14 +13 +13 +14 +14 +14 +13 +13 +13 +14 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +28 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +46 +47 +47 +47 +46 +51 +50 +54 +54 +55 +58 +58 +64 +65 +66 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +115 +115 +115 +119 +119 +125 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +164 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +178 +178 +183 +182 +184 +184 +185 +188 +189 +190 +190 +190 +194 +194 +196 +196 +199 +199 +198 +200 +200 +200 +200 +200 +202 +202 +204 +205 +204 +204 +204 +206 +206 +206 +206 +206 +207 +207 +207 +206 +207 +206 +206 +207 +206 +206 +206 +206 +204 +204 +204 +204 +204 +203 +202 +202 +200 +200 +201 +200 +200 +198 +198 +196 +196 +197 +195 +194 +190 +191 +188 +189 +189 +184 +185 +183 +182 +182 +179 +178 +179 +178 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +119 +120 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +87 +82 +82 +76 +76 +76 +72 +72 +68 +68 +65 +65 +64 +58 +58 +55 +55 +54 +50 +50 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +34 +31 +30 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +13 +14 +14 +14 +13 +13 +14 +14 +14 +13 +13 +13 +14 +13 +14 +13 +13 +15 +15 +16 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +45 +47 +46 +51 +51 +55 +55 +54 +58 +59 +64 +65 +64 +68 +68 +69 +69 +69 +72 +72 +77 +77 +76 +82 +82 +86 +86 +89 +90 +89 +96 +95 +100 +100 +100 +106 +106 +110 +110 +110 +115 +115 +119 +119 +120 +125 +125 +129 +129 +130 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +182 +185 +184 +185 +188 +189 +190 +190 +191 +195 +195 +197 +197 +197 +198 +198 +200 +201 +201 +200 +200 +202 +202 +203 +204 +204 +204 +204 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +203 +200 +201 +201 +200 +198 +198 +199 +196 +197 +194 +195 +194 +191 +190 +189 +188 +188 +184 +185 +182 +183 +182 +178 +178 +175 +175 +175 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +151 +151 +151 +147 +147 +143 +143 +143 +140 +140 +133 +133 +131 +129 +129 +125 +125 +119 +119 +119 +116 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +59 +58 +58 +54 +54 +51 +51 +50 +46 +47 +42 +43 +43 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +12 +14 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +14 +14 +13 +13 +14 +13 +14 +14 +13 +13 +14 +14 +13 +14 +13 +13 +16 +15 +15 +17 +17 +19 +19 +19 +21 +21 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +35 +37 +36 +41 +41 +43 +43 +43 +47 +47 +51 +50 +51 +55 +54 +54 +55 +54 +58 +58 +64 +64 +65 +68 +68 +72 +72 +74 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +116 +116 +120 +120 +125 +125 +129 +130 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +175 +175 +175 +179 +178 +182 +182 +182 +185 +185 +188 +188 +188 +190 +190 +195 +195 +194 +196 +197 +198 +198 +199 +200 +201 +200 +200 +203 +202 +202 +205 +204 +204 +204 +204 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +204 +204 +205 +204 +203 +202 +203 +200 +200 +201 +201 +200 +198 +198 +198 +199 +198 +196 +197 +195 +194 +194 +191 +190 +188 +188 +187 +185 +185 +183 +183 +178 +179 +179 +175 +175 +173 +173 +172 +169 +169 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +148 +148 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +120 +119 +120 +115 +116 +109 +110 +110 +105 +105 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +76 +76 +76 +76 +73 +73 +68 +68 +68 +64 +64 +58 +59 +59 +55 +54 +51 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +14 +14 +13 +13 +13 +13 +14 +14 +13 +13 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +16 +15 +15 +15 +15 +17 +17 +17 +19 +19 +21 +21 +23 +25 +25 +27 +27 +32 +31 +31 +33 +33 +37 +37 +37 +40 +41 +41 +41 +41 +43 +43 +46 +47 +47 +50 +51 +54 +54 +57 +59 +58 +64 +65 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +109 +110 +110 +116 +115 +119 +119 +120 +125 +125 +129 +129 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +148 +151 +151 +157 +157 +161 +161 +161 +165 +165 +168 +169 +169 +173 +173 +175 +175 +175 +179 +178 +183 +183 +183 +185 +185 +188 +188 +189 +191 +190 +195 +194 +197 +196 +196 +198 +198 +200 +200 +200 +200 +200 +202 +202 +202 +204 +204 +205 +204 +205 +206 +207 +207 +206 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +204 +204 +204 +204 +204 +205 +204 +204 +202 +203 +200 +200 +200 +200 +201 +198 +199 +197 +196 +197 +195 +194 +190 +190 +191 +189 +188 +185 +185 +185 +182 +183 +183 +183 +183 +178 +178 +174 +175 +175 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +130 +125 +125 +120 +119 +115 +116 +116 +110 +110 +106 +106 +106 +100 +99 +96 +96 +96 +90 +90 +86 +86 +86 +83 +82 +76 +76 +77 +72 +72 +68 +68 +64 +64 +64 +58 +58 +54 +55 +54 +51 +51 +47 +46 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +34 +31 +31 +27 +27 +25 +25 +26 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +13 +15 +14 +14 +14 +13 +14 +13 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +14 +13 +13 +13 +14 +14 +13 +13 +16 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +27 +27 +27 +31 +31 +32 +33 +33 +37 +37 +41 +41 +42 +43 +43 +46 +47 +50 +50 +50 +54 +55 +58 +58 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +77 +82 +82 +86 +86 +89 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +115 +119 +120 +120 +125 +125 +129 +129 +130 +134 +133 +139 +140 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +174 +174 +175 +178 +179 +183 +183 +183 +182 +183 +185 +184 +188 +189 +188 +191 +191 +194 +195 +194 +196 +197 +199 +198 +198 +200 +201 +200 +200 +201 +202 +202 +204 +204 +204 +204 +204 +206 +206 +207 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +200 +200 +200 +200 +201 +199 +198 +198 +196 +196 +197 +196 +196 +194 +194 +191 +191 +191 +189 +188 +184 +185 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +140 +139 +139 +133 +134 +129 +129 +129 +125 +126 +120 +120 +119 +116 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +65 +64 +58 +58 +58 +55 +55 +51 +50 +51 +47 +47 +42 +42 +42 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +14 +13 +13 +14 +14 +14 +14 +14 +13 +13 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +30 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +51 +51 +54 +54 +58 +59 +59 +65 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +105 +109 +110 +110 +116 +116 +119 +120 +125 +125 +126 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +174 +173 +173 +175 +175 +179 +179 +178 +182 +183 +185 +184 +185 +189 +189 +190 +190 +191 +194 +195 +196 +196 +196 +199 +198 +200 +200 +200 +201 +200 +202 +202 +204 +204 +204 +205 +205 +207 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +204 +204 +204 +205 +205 +202 +202 +201 +200 +200 +200 +200 +200 +201 +200 +198 +199 +196 +196 +196 +194 +194 +190 +190 +189 +189 +189 +184 +184 +183 +183 +182 +178 +179 +175 +175 +175 +173 +172 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +120 +119 +119 +116 +115 +109 +110 +110 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +65 +64 +58 +58 +58 +54 +54 +50 +51 +47 +47 +47 +43 +42 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +22 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +13 +13 +14 +14 +14 +14 +13 +13 +13 +14 +13 +14 +14 +14 +14 +14 +14 +14 +13 +13 +13 +14 +14 +13 +13 +14 +13 +13 +14 +13 +13 +15 +15 +15 +16 +17 +19 +19 +20 +21 +20 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +46 +47 +47 +50 +50 +54 +55 +59 +59 +59 +65 +65 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +105 +106 +110 +110 +110 +115 +115 +120 +120 +119 +125 +125 +130 +129 +129 +134 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +174 +174 +179 +179 +183 +182 +183 +184 +185 +188 +189 +189 +191 +191 +195 +194 +197 +196 +196 +198 +199 +201 +200 +200 +200 +200 +200 +200 +200 +202 +202 +205 +204 +205 +205 +204 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +207 +204 +204 +205 +204 +204 +204 +205 +202 +202 +203 +201 +201 +200 +200 +200 +198 +199 +196 +196 +194 +195 +194 +190 +191 +188 +189 +188 +185 +185 +183 +183 +183 +179 +178 +175 +175 +175 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +126 +125 +119 +120 +116 +115 +116 +110 +110 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +83 +76 +76 +72 +72 +69 +68 +68 +64 +64 +58 +59 +59 +54 +55 +51 +50 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +26 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +14 +13 +14 +13 +14 +14 +13 +13 +14 +14 +13 +13 +14 +14 +14 +13 +14 +14 +14 +14 +13 +14 +14 +14 +13 +13 +14 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +36 +41 +41 +42 +43 +43 +47 +47 +51 +51 +50 +54 +54 +58 +58 +59 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +91 +90 +90 +95 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +115 +119 +119 +119 +125 +125 +129 +129 +129 +133 +133 +139 +139 +144 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +164 +168 +169 +169 +172 +173 +175 +175 +175 +178 +179 +183 +183 +184 +185 +185 +189 +189 +191 +190 +190 +194 +195 +195 +194 +194 +197 +196 +199 +199 +199 +200 +201 +201 +200 +201 +202 +203 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +204 +204 +204 +204 +204 +203 +202 +200 +200 +200 +200 +200 +198 +198 +198 +197 +196 +194 +194 +195 +190 +190 +189 +189 +189 +184 +185 +183 +183 +179 +179 +178 +175 +175 +172 +173 +172 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +134 +133 +134 +129 +129 +125 +125 +125 +119 +119 +116 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +83 +82 +82 +76 +76 +72 +73 +73 +68 +68 +64 +65 +65 +58 +59 +55 +54 +55 +51 +50 +47 +47 +48 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +27 +27 +27 +25 +24 +21 +21 +21 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +13 +13 +13 +14 +14 +13 +14 +13 +14 +14 +14 +13 +13 +14 +14 +14 +14 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +46 +46 +51 +50 +51 +55 +54 +58 +58 +58 +64 +64 +68 +68 +73 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +99 +106 +106 +110 +110 +110 +116 +115 +120 +120 +126 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +162 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +178 +183 +182 +182 +183 +182 +184 +184 +188 +189 +189 +191 +190 +195 +195 +195 +196 +197 +198 +198 +200 +200 +200 +200 +201 +202 +203 +202 +204 +204 +204 +204 +204 +204 +204 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +203 +201 +200 +200 +200 +200 +199 +198 +199 +196 +197 +194 +194 +190 +190 +190 +189 +189 +185 +185 +185 +183 +182 +179 +179 +179 +174 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +134 +133 +129 +129 +125 +125 +125 +119 +120 +115 +116 +115 +109 +110 +106 +106 +100 +100 +100 +95 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +65 +59 +58 +55 +54 +51 +50 +51 +47 +47 +43 +43 +43 +41 +41 +41 +40 +40 +37 +37 +33 +33 +33 +31 +31 +26 +27 +28 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +14 +14 +13 +14 +13 +14 +14 +14 +13 +13 +14 +14 +14 +14 +14 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +12 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +36 +37 +40 +41 +42 +43 +43 +47 +47 +51 +50 +56 +54 +55 +58 +59 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +81 +82 +82 +86 +86 +90 +90 +91 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +115 +119 +119 +125 +125 +125 +130 +130 +134 +133 +133 +139 +139 +143 +143 +144 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +182 +183 +184 +185 +189 +188 +190 +191 +190 +194 +194 +197 +196 +197 +198 +199 +199 +198 +198 +200 +200 +200 +201 +201 +203 +202 +204 +204 +204 +204 +205 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +205 +204 +204 +204 +205 +202 +203 +200 +200 +200 +200 +201 +199 +198 +196 +197 +197 +194 +194 +191 +191 +190 +188 +188 +185 +184 +184 +183 +182 +178 +179 +179 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +134 +134 +129 +130 +126 +125 +120 +119 +120 +115 +115 +110 +110 +110 +106 +106 +100 +100 +100 +100 +100 +96 +96 +97 +90 +90 +86 +86 +86 +81 +82 +76 +76 +72 +73 +72 +68 +68 +65 +64 +64 +58 +58 +58 +59 +59 +55 +54 +51 +51 +51 +47 +47 +43 +43 +42 +40 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +12 +13 +13 +14 +14 +13 +13 +14 +13 +13 +14 +13 +13 +14 +13 +14 +14 +13 +14 +14 +14 +13 +14 +13 +14 +14 +13 +14 +14 +13 +15 +16 +17 +17 +17 +19 +19 +20 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +36 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +51 +50 +54 +54 +58 +59 +58 +65 +64 +68 +68 +68 +73 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +109 +116 +115 +119 +119 +120 +125 +125 +130 +129 +134 +134 +133 +139 +139 +143 +143 +143 +147 +147 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +166 +169 +169 +173 +173 +174 +175 +175 +179 +179 +183 +183 +183 +184 +185 +184 +184 +184 +188 +189 +190 +190 +191 +195 +195 +197 +197 +197 +199 +199 +200 +200 +200 +201 +201 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +207 +206 +206 +207 +206 +207 +206 +207 +207 +206 +206 +205 +204 +204 +205 +204 +202 +202 +201 +200 +200 +200 +200 +199 +198 +198 +197 +196 +194 +195 +194 +191 +190 +189 +188 +185 +184 +185 +183 +183 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +144 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +125 +119 +119 +116 +116 +116 +110 +110 +105 +106 +106 +100 +100 +96 +96 +89 +90 +90 +86 +86 +82 +82 +82 +76 +77 +72 +72 +72 +68 +69 +64 +64 +64 +59 +58 +55 +55 +53 +50 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +33 +33 +33 +31 +27 +27 +27 +27 +25 +25 +21 +21 +20 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +14 +14 +13 +14 +14 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +42 +43 +47 +47 +46 +50 +51 +54 +54 +55 +58 +59 +64 +64 +69 +68 +68 +72 +72 +77 +76 +76 +82 +82 +86 +86 +87 +90 +90 +95 +96 +96 +100 +100 +105 +105 +106 +110 +110 +116 +116 +121 +119 +119 +125 +126 +130 +130 +129 +134 +133 +133 +133 +134 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +160 +165 +165 +165 +169 +169 +173 +173 +173 +175 +174 +175 +175 +175 +179 +178 +182 +183 +183 +184 +185 +188 +189 +189 +191 +190 +194 +195 +196 +196 +196 +199 +199 +200 +200 +200 +200 +200 +202 +202 +202 +204 +205 +204 +204 +205 +206 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +203 +202 +202 +201 +201 +200 +201 +200 +198 +198 +196 +196 +195 +194 +194 +190 +190 +189 +189 +189 +185 +184 +183 +183 +183 +179 +179 +175 +175 +174 +173 +173 +169 +169 +169 +165 +165 +161 +161 +158 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +140 +133 +133 +129 +130 +130 +126 +125 +120 +120 +120 +115 +116 +110 +110 +105 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +73 +72 +68 +69 +66 +64 +64 +59 +58 +55 +54 +55 +50 +50 +47 +46 +47 +43 +43 +43 +43 +43 +41 +41 +37 +36 +37 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +14 +12 +13 +14 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +14 +13 +14 +13 +14 +13 +14 +13 +13 +13 +14 +14 +14 +14 +13 +13 +12 +15 +15 +17 +19 +19 +19 +19 +21 +21 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +46 +51 +50 +50 +54 +54 +58 +58 +59 +64 +64 +68 +69 +68 +73 +72 +76 +76 +76 +82 +82 +86 +86 +85 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +110 +110 +116 +115 +120 +120 +119 +125 +126 +130 +130 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +152 +151 +151 +157 +157 +161 +161 +161 +165 +165 +165 +165 +165 +168 +169 +173 +173 +173 +175 +175 +178 +179 +182 +183 +183 +185 +185 +188 +189 +188 +191 +190 +195 +194 +194 +197 +197 +199 +198 +198 +200 +201 +200 +201 +201 +202 +202 +204 +204 +204 +204 +205 +207 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +205 +204 +204 +205 +204 +202 +202 +201 +201 +201 +200 +201 +199 +199 +196 +196 +197 +195 +195 +190 +190 +190 +188 +189 +185 +185 +185 +183 +182 +179 +179 +179 +174 +175 +172 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +144 +139 +139 +134 +134 +134 +130 +129 +125 +125 +119 +120 +119 +116 +116 +109 +110 +110 +106 +105 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +79 +76 +76 +72 +72 +68 +69 +68 +65 +64 +59 +58 +58 +54 +55 +54 +54 +55 +51 +51 +47 +47 +47 +43 +43 +40 +41 +38 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +12 +13 +13 +14 +14 +13 +13 +14 +13 +13 +13 +14 +13 +14 +14 +13 +14 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +26 +27 +27 +27 +31 +30 +33 +33 +33 +37 +37 +41 +41 +44 +43 +43 +47 +46 +50 +50 +50 +54 +54 +59 +59 +59 +64 +64 +68 +68 +68 +73 +72 +76 +76 +77 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +106 +106 +106 +106 +106 +110 +110 +116 +116 +116 +119 +119 +125 +125 +126 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +172 +173 +173 +175 +175 +178 +179 +179 +183 +182 +184 +185 +185 +188 +188 +191 +190 +190 +194 +194 +197 +197 +196 +198 +198 +201 +200 +200 +201 +200 +202 +202 +205 +204 +204 +204 +204 +207 +207 +207 +207 +206 +207 +206 +206 +207 +206 +206 +206 +207 +206 +206 +204 +204 +204 +205 +205 +202 +202 +200 +201 +200 +200 +200 +198 +198 +198 +197 +196 +195 +195 +195 +190 +190 +188 +188 +189 +185 +185 +182 +183 +179 +179 +179 +175 +174 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +133 +133 +133 +129 +130 +125 +125 +126 +119 +120 +115 +115 +115 +110 +110 +105 +106 +106 +100 +100 +96 +96 +97 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +73 +73 +68 +68 +68 +68 +68 +65 +64 +59 +58 +59 +55 +54 +51 +51 +49 +47 +47 +42 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +16 +15 +16 +15 +15 +13 +13 +13 +12 +13 +14 +13 +13 +14 +13 +14 +14 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +14 +14 +13 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +26 +27 +27 +31 +31 +34 +33 +33 +37 +37 +41 +41 +41 +43 +43 +46 +47 +47 +50 +50 +54 +55 +55 +59 +59 +64 +64 +65 +68 +68 +72 +72 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +116 +116 +119 +120 +126 +125 +129 +130 +129 +134 +134 +140 +139 +139 +143 +143 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +164 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +178 +182 +183 +185 +185 +185 +188 +189 +190 +191 +190 +191 +190 +195 +194 +196 +196 +196 +198 +198 +201 +200 +201 +200 +201 +203 +202 +202 +204 +204 +204 +204 +204 +206 +207 +207 +206 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +204 +204 +204 +204 +204 +202 +202 +203 +200 +200 +201 +200 +200 +198 +198 +196 +196 +197 +194 +195 +190 +191 +189 +188 +188 +185 +184 +183 +183 +183 +179 +179 +175 +174 +175 +173 +173 +169 +169 +169 +164 +165 +161 +161 +161 +157 +157 +151 +151 +148 +147 +147 +143 +143 +139 +139 +139 +134 +133 +133 +133 +133 +129 +129 +125 +125 +125 +120 +119 +116 +116 +116 +110 +110 +105 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +86 +86 +86 +82 +82 +76 +76 +77 +72 +72 +68 +68 +68 +65 +64 +58 +58 +54 +54 +55 +50 +51 +47 +46 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +13 +13 +14 +14 +14 +13 +14 +14 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +13 +14 +13 +13 +15 +15 +16 +17 +17 +19 +18 +22 +21 +20 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +40 +40 +41 +43 +43 +47 +47 +47 +50 +51 +55 +55 +59 +59 +58 +64 +64 +69 +68 +68 +72 +73 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +91 +96 +96 +100 +100 +106 +105 +106 +110 +110 +116 +115 +116 +119 +119 +119 +119 +119 +125 +125 +129 +129 +130 +133 +133 +139 +139 +143 +143 +144 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +174 +175 +179 +178 +182 +183 +185 +185 +184 +189 +188 +190 +191 +190 +195 +195 +196 +197 +197 +198 +198 +201 +200 +200 +200 +200 +202 +202 +202 +205 +205 +204 +204 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +204 +205 +204 +205 +205 +203 +202 +200 +200 +201 +200 +200 +199 +198 +197 +196 +196 +194 +194 +191 +191 +191 +189 +189 +185 +185 +185 +183 +183 +179 +179 +179 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +157 +157 +157 +151 +151 +147 +147 +147 +143 +144 +139 +139 +137 +133 +133 +129 +129 +125 +125 +125 +120 +120 +115 +115 +115 +110 +110 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +88 +86 +86 +82 +82 +76 +76 +77 +72 +73 +68 +68 +68 +64 +64 +59 +58 +58 +54 +54 +50 +51 +51 +46 +47 +42 +42 +43 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +16 +17 +15 +15 +16 +15 +14 +13 +13 +13 +13 +14 +14 +14 +14 +14 +13 +14 +13 +14 +14 +13 +13 +13 +13 +13 +14 +13 +13 +14 +14 +14 +13 +14 +13 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +22 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +47 +47 +47 +51 +51 +54 +54 +55 +58 +59 +64 +64 +66 +68 +68 +72 +72 +76 +76 +77 +82 +82 +86 +86 +86 +90 +90 +90 +90 +90 +96 +96 +99 +100 +100 +105 +106 +109 +110 +112 +115 +116 +120 +120 +125 +126 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +144 +147 +147 +151 +151 +151 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +182 +183 +184 +185 +184 +189 +189 +191 +190 +191 +194 +195 +197 +197 +199 +198 +198 +201 +200 +200 +200 +200 +202 +202 +202 +202 +202 +205 +204 +204 +204 +204 +207 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +204 +204 +204 +205 +203 +202 +202 +202 +201 +200 +201 +200 +200 +198 +199 +196 +196 +197 +194 +195 +191 +191 +189 +189 +189 +184 +184 +183 +183 +182 +179 +179 +175 +175 +175 +172 +173 +169 +169 +169 +165 +165 +161 +161 +162 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +140 +140 +133 +133 +133 +134 +133 +129 +129 +126 +126 +126 +120 +119 +116 +116 +111 +110 +110 +106 +106 +100 +99 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +68 +68 +64 +65 +58 +58 +58 +54 +55 +51 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +32 +27 +27 +25 +25 +21 +21 +21 +19 +19 +16 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +14 +14 +14 +14 +14 +14 +13 +14 +13 +13 +14 +13 +14 +14 +14 +13 +13 +13 +12 +15 +15 +18 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +46 +47 +51 +50 +55 +54 +59 +59 +59 +64 +64 +68 +69 +68 +72 +73 +72 +72 +72 +76 +76 +82 +82 +83 +85 +86 +90 +90 +95 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +116 +119 +119 +125 +125 +125 +130 +129 +133 +133 +133 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +178 +179 +183 +182 +185 +184 +189 +189 +189 +191 +190 +194 +194 +194 +196 +197 +199 +198 +199 +200 +201 +201 +200 +200 +202 +202 +205 +204 +205 +204 +204 +206 +206 +207 +207 +207 +206 +207 +206 +207 +206 +206 +207 +206 +206 +206 +204 +204 +204 +204 +204 +203 +202 +200 +200 +201 +200 +200 +199 +199 +197 +197 +196 +194 +194 +190 +190 +191 +188 +188 +188 +188 +188 +185 +184 +183 +183 +183 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +131 +129 +130 +125 +125 +119 +120 +120 +116 +116 +110 +109 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +91 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +69 +68 +64 +64 +59 +58 +58 +55 +55 +51 +51 +51 +46 +46 +43 +43 +42 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +14 +14 +14 +14 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +14 +13 +13 +16 +15 +17 +17 +17 +19 +19 +19 +19 +19 +21 +21 +25 +25 +25 +27 +26 +31 +31 +31 +33 +33 +37 +37 +41 +41 +41 +43 +42 +47 +47 +47 +50 +50 +51 +51 +51 +54 +54 +58 +59 +59 +64 +64 +68 +68 +71 +72 +72 +77 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +105 +110 +110 +110 +116 +116 +120 +119 +124 +126 +125 +130 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +173 +172 +173 +175 +175 +178 +179 +179 +182 +183 +184 +184 +184 +188 +188 +191 +190 +190 +194 +194 +196 +196 +196 +198 +199 +200 +201 +201 +200 +200 +202 +202 +204 +205 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +207 +207 +207 +206 +204 +204 +205 +204 +204 +202 +202 +201 +200 +200 +200 +200 +200 +200 +200 +198 +199 +196 +197 +197 +195 +194 +190 +190 +189 +189 +189 +185 +185 +184 +184 +184 +183 +183 +179 +178 +179 +175 +175 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +158 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +140 +139 +133 +133 +129 +129 +129 +125 +125 +119 +120 +120 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +95 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +72 +72 +68 +68 +69 +64 +64 +59 +58 +55 +55 +55 +51 +51 +46 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +26 +25 +25 +21 +21 +20 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +13 +14 +13 +14 +14 +13 +14 +14 +14 +13 +13 +14 +13 +14 +14 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +13 +13 +13 +12 +15 +15 +18 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +33 +33 +33 +37 +37 +41 +41 +40 +43 +42 +47 +47 +47 +51 +50 +55 +54 +58 +58 +59 +64 +64 +68 +68 +68 +72 +73 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +99 +100 +100 +106 +106 +110 +109 +110 +115 +116 +119 +120 +119 +126 +126 +129 +129 +130 +133 +133 +139 +139 +139 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +178 +182 +183 +182 +185 +185 +188 +188 +191 +190 +191 +195 +194 +196 +196 +197 +198 +199 +200 +200 +201 +200 +200 +202 +202 +202 +205 +204 +204 +204 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +205 +202 +202 +201 +201 +201 +200 +200 +198 +198 +199 +196 +196 +194 +194 +195 +191 +191 +191 +190 +190 +189 +188 +184 +184 +185 +183 +183 +179 +179 +176 +175 +175 +173 +173 +169 +169 +169 +164 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +129 +129 +129 +125 +126 +120 +120 +119 +115 +116 +110 +110 +110 +105 +106 +99 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +68 +68 +64 +64 +59 +59 +58 +54 +54 +50 +50 +51 +47 +47 +43 +43 +43 +41 +41 +36 +36 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +16 +13 +13 +12 +13 +14 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +14 +14 +14 +13 +13 +13 +14 +13 +14 +14 +14 +13 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +42 +46 +46 +47 +50 +50 +55 +54 +54 +58 +58 +64 +64 +65 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +116 +119 +119 +125 +125 +130 +129 +129 +133 +133 +133 +134 +134 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +179 +182 +182 +184 +185 +184 +189 +188 +190 +190 +190 +194 +195 +196 +197 +196 +198 +199 +201 +200 +200 +200 +200 +203 +202 +204 +204 +204 +204 +205 +204 +204 +205 +207 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +202 +200 +200 +201 +201 +201 +201 +201 +199 +198 +199 +196 +196 +194 +195 +191 +190 +190 +189 +188 +185 +184 +184 +183 +183 +179 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +158 +157 +151 +151 +151 +147 +147 +143 +143 +143 +140 +139 +133 +133 +133 +130 +129 +125 +125 +126 +120 +120 +116 +116 +116 +110 +110 +105 +105 +100 +100 +99 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +69 +68 +64 +64 +64 +59 +58 +55 +55 +51 +51 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +30 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +16 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +14 +14 +14 +13 +14 +14 +13 +14 +13 +14 +13 +14 +14 +13 +14 +13 +13 +14 +14 +14 +14 +14 +13 +13 +14 +14 +13 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +46 +47 +47 +51 +50 +55 +54 +58 +58 +58 +64 +64 +68 +68 +69 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +105 +110 +110 +110 +115 +115 +119 +120 +119 +126 +125 +129 +130 +129 +133 +133 +140 +139 +139 +143 +143 +147 +147 +147 +147 +147 +151 +151 +158 +157 +157 +161 +161 +165 +165 +165 +169 +169 +169 +169 +169 +173 +173 +175 +175 +174 +179 +179 +183 +183 +183 +185 +185 +189 +189 +190 +191 +191 +195 +194 +196 +196 +196 +198 +199 +201 +200 +201 +201 +200 +202 +202 +202 +204 +204 +204 +204 +205 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +207 +206 +204 +205 +204 +205 +205 +203 +202 +200 +201 +200 +200 +201 +198 +199 +196 +197 +196 +195 +195 +191 +190 +190 +189 +189 +185 +185 +184 +183 +183 +179 +178 +179 +175 +175 +173 +173 +169 +169 +169 +165 +164 +161 +161 +161 +157 +157 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +140 +133 +133 +129 +129 +125 +125 +125 +119 +119 +115 +116 +116 +110 +110 +110 +110 +110 +105 +106 +100 +100 +100 +96 +96 +90 +90 +90 +85 +86 +82 +82 +77 +76 +76 +72 +73 +68 +68 +69 +64 +64 +59 +59 +59 +55 +54 +50 +50 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +14 +14 +13 +13 +14 +13 +13 +13 +13 +13 +14 +14 +13 +13 +14 +13 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +24 +25 +25 +27 +27 +31 +31 +32 +33 +32 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +50 +55 +54 +54 +59 +58 +64 +64 +65 +68 +68 +72 +72 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +105 +106 +106 +110 +110 +116 +115 +116 +120 +119 +125 +125 +130 +130 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +174 +175 +175 +178 +179 +183 +182 +183 +185 +185 +185 +185 +184 +189 +189 +191 +190 +191 +194 +195 +197 +196 +196 +198 +198 +200 +200 +200 +201 +200 +202 +202 +204 +204 +204 +204 +205 +204 +204 +204 +206 +206 +206 +207 +206 +206 +207 +206 +207 +206 +206 +207 +206 +207 +204 +204 +204 +204 +204 +202 +203 +202 +200 +200 +201 +201 +200 +198 +199 +196 +197 +197 +195 +195 +191 +190 +190 +188 +189 +185 +184 +182 +183 +183 +179 +179 +175 +175 +175 +172 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +147 +147 +147 +143 +143 +140 +139 +139 +133 +134 +129 +129 +130 +126 +125 +120 +119 +120 +116 +115 +110 +110 +110 +106 +106 +100 +100 +97 +96 +96 +90 +90 +86 +86 +87 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +59 +58 +54 +54 +51 +51 +47 +47 +47 +42 +43 +41 +41 +41 +37 +37 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +23 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +12 +14 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +14 +13 +13 +13 +14 +13 +13 +14 +14 +13 +14 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +36 +41 +41 +41 +43 +43 +47 +46 +47 +50 +50 +55 +55 +59 +58 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +110 +110 +110 +116 +116 +119 +119 +120 +126 +126 +129 +130 +130 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +162 +161 +161 +165 +164 +169 +169 +169 +173 +173 +173 +173 +173 +175 +175 +179 +178 +179 +183 +183 +184 +184 +186 +189 +189 +191 +191 +194 +195 +195 +197 +197 +198 +199 +199 +201 +200 +201 +200 +200 +200 +200 +202 +202 +203 +204 +205 +205 +205 +205 +206 +207 +207 +207 +206 +207 +206 +207 +207 +207 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +205 +202 +203 +201 +201 +200 +201 +201 +198 +198 +196 +197 +196 +194 +194 +191 +191 +190 +188 +189 +185 +185 +185 +182 +183 +179 +179 +179 +175 +175 +173 +173 +170 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +134 +134 +129 +130 +125 +126 +120 +120 +120 +116 +116 +109 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +73 +69 +68 +68 +64 +64 +58 +58 +58 +54 +55 +55 +55 +55 +51 +51 +47 +47 +46 +42 +43 +40 +41 +41 +37 +37 +33 +33 +31 +32 +31 +27 +27 +25 +25 +24 +21 +21 +21 +21 +21 +19 +19 +17 +18 +18 +15 +15 +15 +15 +14 +13 +13 +12 +13 +14 +13 +13 +13 +13 +13 +14 +13 +14 +14 +14 +13 +13 +13 +14 +14 +13 +14 +14 +13 +14 +13 +14 +14 +14 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +41 +41 +41 +42 +43 +46 +47 +46 +50 +50 +54 +54 +55 +59 +59 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +115 +119 +119 +126 +125 +126 +129 +129 +133 +134 +140 +139 +139 +143 +143 +147 +148 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +172 +173 +175 +175 +179 +178 +182 +183 +183 +185 +184 +189 +189 +189 +190 +191 +190 +190 +191 +194 +194 +196 +196 +196 +198 +199 +201 +201 +200 +200 +200 +203 +202 +204 +204 +205 +205 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +207 +205 +205 +204 +204 +204 +202 +202 +201 +200 +200 +200 +200 +198 +198 +198 +196 +196 +195 +195 +194 +191 +190 +189 +189 +189 +185 +185 +183 +182 +178 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +134 +133 +133 +130 +130 +125 +126 +126 +119 +119 +116 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +97 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +73 +72 +68 +68 +68 +68 +68 +64 +64 +58 +59 +58 +55 +55 +51 +50 +49 +47 +47 +43 +42 +41 +41 +41 +37 +37 +33 +33 +33 +31 +30 +31 +31 +31 +27 +28 +25 +25 +25 +21 +21 +19 +20 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +13 +14 +14 +14 +14 +13 +14 +14 +13 +14 +14 +14 +14 +14 +13 +13 +14 +14 +14 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +31 +31 +31 +32 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +50 +54 +55 +59 +59 +58 +64 +64 +68 +68 +73 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +109 +111 +116 +115 +120 +120 +125 +125 +126 +129 +130 +133 +134 +134 +139 +139 +140 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +158 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +179 +179 +179 +183 +183 +185 +185 +185 +189 +188 +190 +191 +194 +195 +195 +197 +196 +198 +199 +198 +200 +200 +200 +200 +200 +202 +202 +204 +204 +204 +204 +204 +206 +207 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +204 +205 +204 +204 +204 +202 +202 +200 +200 +200 +200 +200 +198 +199 +199 +196 +196 +194 +195 +191 +191 +190 +188 +188 +184 +185 +184 +183 +183 +179 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +140 +139 +139 +140 +134 +133 +129 +129 +129 +126 +126 +119 +119 +120 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +73 +72 +74 +68 +68 +65 +64 +58 +58 +59 +54 +54 +51 +51 +50 +47 +47 +47 +46 +47 +43 +42 +41 +41 +41 +37 +37 +33 +33 +31 +30 +30 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +14 +14 +14 +13 +13 +14 +14 +14 +14 +14 +14 +14 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +34 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +51 +50 +50 +55 +54 +58 +58 +59 +64 +65 +69 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +87 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +109 +115 +115 +116 +115 +115 +119 +119 +125 +125 +126 +130 +129 +133 +134 +135 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +174 +178 +179 +179 +183 +183 +184 +185 +184 +188 +188 +190 +190 +191 +195 +195 +197 +196 +196 +198 +199 +200 +200 +201 +201 +201 +202 +202 +204 +204 +204 +205 +204 +204 +204 +204 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +205 +204 +204 +204 +202 +202 +202 +200 +201 +200 +200 +200 +198 +198 +197 +196 +196 +195 +194 +190 +191 +191 +188 +189 +184 +185 +185 +183 +183 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +156 +151 +151 +151 +147 +147 +143 +143 +144 +139 +139 +133 +134 +129 +130 +129 +125 +125 +120 +119 +120 +115 +116 +115 +115 +116 +110 +109 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +69 +68 +68 +68 +69 +64 +64 +58 +59 +58 +54 +54 +51 +50 +47 +47 +46 +43 +43 +41 +41 +40 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +22 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +13 +14 +13 +14 +14 +14 +13 +13 +13 +13 +13 +14 +14 +13 +14 +13 +14 +14 +14 +13 +14 +14 +14 +14 +13 +13 +15 +15 +15 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +42 +43 +42 +47 +47 +50 +50 +50 +54 +54 +59 +59 +59 +64 +65 +69 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +105 +105 +106 +110 +110 +116 +115 +120 +119 +119 +126 +126 +129 +129 +129 +133 +133 +133 +133 +133 +139 +140 +143 +143 +143 +147 +147 +151 +151 +154 +157 +156 +161 +161 +164 +165 +165 +169 +169 +173 +172 +173 +175 +175 +179 +179 +179 +183 +182 +185 +184 +185 +189 +188 +190 +191 +192 +194 +194 +196 +196 +198 +199 +199 +200 +200 +201 +200 +200 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +207 +206 +204 +205 +204 +204 +204 +202 +202 +201 +200 +200 +201 +201 +199 +198 +199 +197 +197 +195 +195 +191 +191 +190 +188 +189 +184 +184 +184 +183 +182 +178 +178 +179 +175 +175 +172 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +152 +151 +151 +147 +147 +143 +143 +143 +139 +139 +139 +139 +139 +133 +133 +129 +129 +129 +125 +126 +119 +120 +120 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +90 +90 +90 +86 +86 +82 +82 +82 +77 +76 +72 +72 +69 +68 +68 +64 +64 +58 +58 +59 +54 +54 +50 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +14 +14 +14 +14 +14 +13 +14 +13 +14 +14 +14 +14 +14 +13 +14 +14 +13 +13 +14 +14 +13 +13 +13 +14 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +46 +47 +47 +50 +51 +55 +54 +54 +58 +59 +64 +65 +64 +68 +68 +72 +72 +76 +76 +82 +82 +83 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +110 +110 +110 +116 +115 +119 +120 +120 +126 +126 +130 +129 +131 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +160 +165 +165 +169 +169 +169 +173 +173 +175 +175 +178 +179 +179 +183 +183 +185 +184 +184 +189 +189 +191 +190 +191 +194 +194 +197 +197 +196 +198 +199 +200 +200 +201 +200 +201 +203 +203 +204 +205 +205 +204 +204 +207 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +204 +204 +205 +204 +204 +202 +202 +201 +200 +201 +200 +200 +198 +198 +198 +196 +196 +195 +194 +194 +191 +191 +189 +188 +189 +185 +185 +183 +183 +183 +179 +179 +175 +175 +172 +173 +173 +169 +169 +169 +169 +169 +165 +165 +165 +165 +164 +161 +161 +157 +157 +157 +151 +151 +147 +147 +145 +143 +143 +139 +139 +133 +133 +133 +130 +129 +125 +125 +126 +119 +119 +120 +119 +120 +116 +116 +110 +109 +110 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +58 +59 +54 +54 +51 +51 +47 +47 +46 +43 +42 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +26 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +14 +13 +13 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +34 +33 +33 +37 +36 +37 +37 +37 +41 +41 +42 +43 +43 +46 +47 +50 +51 +51 +54 +54 +59 +59 +59 +64 +65 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +105 +106 +109 +110 +110 +115 +116 +120 +119 +119 +125 +125 +129 +129 +129 +134 +134 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +178 +179 +183 +183 +183 +185 +185 +189 +188 +189 +190 +191 +194 +194 +196 +196 +197 +199 +198 +200 +200 +200 +200 +200 +203 +202 +202 +204 +204 +204 +204 +204 +206 +206 +207 +207 +206 +207 +206 +206 +206 +206 +207 +207 +206 +206 +204 +205 +205 +205 +204 +203 +202 +202 +200 +201 +200 +200 +200 +199 +198 +196 +197 +196 +195 +194 +190 +190 +189 +189 +189 +185 +185 +183 +182 +183 +178 +179 +178 +178 +179 +175 +174 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +140 +139 +139 +133 +133 +129 +130 +130 +125 +126 +120 +120 +116 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +91 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +65 +65 +64 +59 +59 +54 +54 +54 +51 +50 +47 +47 +47 +43 +43 +41 +41 +41 +37 +36 +33 +33 +33 +31 +30 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +13 +14 +14 +13 +14 +13 +13 +13 +14 +14 +13 +13 +14 +14 +14 +13 +14 +14 +14 +13 +13 +13 +13 +13 +15 +15 +16 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +48 +50 +51 +54 +55 +58 +58 +58 +64 +64 +68 +68 +68 +72 +72 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +95 +96 +96 +100 +100 +106 +106 +106 +109 +110 +115 +115 +116 +119 +120 +126 +125 +125 +129 +130 +134 +134 +133 +139 +139 +143 +143 +146 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +164 +169 +169 +173 +173 +173 +175 +174 +178 +179 +178 +183 +182 +185 +184 +189 +188 +189 +190 +190 +194 +195 +195 +196 +197 +198 +199 +198 +200 +200 +200 +200 +200 +203 +203 +204 +204 +204 +204 +204 +206 +207 +207 +206 +207 +207 +206 +206 +206 +206 +206 +206 +207 +207 +206 +207 +206 +204 +204 +204 +205 +204 +202 +202 +203 +200 +200 +200 +200 +199 +198 +198 +196 +197 +194 +194 +194 +190 +190 +190 +190 +191 +188 +189 +185 +185 +184 +183 +182 +179 +179 +179 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +140 +133 +133 +129 +130 +125 +125 +125 +120 +119 +116 +115 +115 +110 +109 +106 +106 +105 +100 +100 +96 +96 +96 +90 +90 +86 +86 +83 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +59 +58 +54 +54 +54 +50 +50 +47 +46 +47 +43 +42 +41 +40 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +22 +19 +20 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +13 +14 +14 +14 +14 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +13 +13 +14 +13 +15 +15 +15 +17 +17 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +28 +31 +31 +33 +33 +36 +37 +36 +41 +41 +43 +43 +43 +47 +47 +47 +47 +46 +51 +51 +55 +54 +55 +58 +58 +65 +65 +66 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +109 +110 +115 +116 +119 +119 +120 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +168 +169 +169 +173 +173 +175 +175 +175 +179 +179 +182 +183 +182 +184 +185 +189 +188 +188 +190 +190 +194 +194 +195 +196 +197 +198 +199 +201 +201 +201 +200 +200 +202 +202 +202 +204 +205 +204 +204 +204 +206 +207 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +207 +204 +204 +204 +204 +204 +202 +203 +202 +200 +200 +201 +201 +200 +201 +201 +198 +198 +199 +196 +196 +194 +195 +192 +191 +190 +189 +188 +184 +185 +185 +183 +182 +179 +178 +178 +175 +174 +174 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +159 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +134 +129 +130 +130 +125 +126 +119 +119 +120 +115 +115 +110 +110 +106 +106 +106 +100 +99 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +77 +76 +76 +72 +72 +69 +68 +69 +64 +64 +58 +58 +55 +54 +55 +50 +50 +46 +47 +47 +43 +43 +41 +41 +40 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +14 +13 +14 +13 +14 +13 +13 +13 +14 +14 +13 +14 +13 +13 +14 +14 +14 +14 +13 +13 +14 +15 +16 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +46 +47 +46 +51 +51 +54 +55 +55 +58 +58 +64 +64 +64 +69 +68 +72 +72 +73 +77 +76 +82 +82 +82 +86 +86 +90 +90 +96 +96 +96 +99 +100 +106 +106 +106 +110 +110 +115 +116 +115 +119 +119 +125 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +148 +147 +147 +151 +151 +157 +156 +157 +161 +161 +165 +164 +165 +169 +169 +173 +172 +173 +175 +175 +179 +178 +179 +183 +183 +185 +185 +189 +189 +188 +191 +191 +195 +194 +194 +196 +197 +197 +197 +197 +198 +198 +200 +200 +200 +200 +200 +203 +202 +203 +204 +205 +204 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +204 +205 +204 +204 +203 +202 +202 +200 +201 +200 +200 +200 +198 +198 +196 +197 +197 +194 +194 +195 +194 +194 +190 +190 +189 +188 +188 +184 +184 +182 +182 +179 +179 +179 +175 +175 +173 +172 +173 +169 +169 +165 +165 +164 +161 +161 +157 +157 +156 +151 +151 +147 +147 +147 +143 +143 +139 +139 +133 +133 +133 +130 +129 +125 +125 +125 +119 +119 +115 +116 +115 +110 +110 +106 +106 +106 +99 +100 +96 +96 +95 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +59 +58 +54 +55 +54 +51 +51 +46 +47 +47 +43 +43 +41 +41 +38 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +12 +13 +13 +13 +13 +13 +13 +13 +14 +13 +14 +14 +14 +13 +13 +14 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +14 +14 +14 +13 +13 +15 +15 +15 +17 +17 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +30 +31 +31 +33 +33 +36 +37 +37 +41 +41 +43 +43 +43 +46 +47 +50 +50 +50 +54 +54 +58 +58 +59 +65 +64 +68 +68 +71 +73 +73 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +105 +106 +110 +109 +110 +116 +116 +120 +119 +126 +126 +125 +130 +129 +133 +134 +134 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +160 +161 +164 +165 +169 +169 +173 +173 +173 +175 +175 +175 +175 +175 +179 +179 +183 +183 +182 +185 +184 +188 +188 +188 +191 +191 +194 +194 +195 +197 +196 +198 +198 +201 +200 +201 +200 +200 +202 +202 +202 +204 +204 +204 +204 +204 +206 +207 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +204 +204 +204 +204 +205 +203 +202 +202 +200 +200 +201 +201 +201 +201 +200 +198 +198 +198 +197 +197 +195 +194 +191 +190 +191 +189 +189 +184 +184 +184 +182 +183 +179 +179 +178 +175 +175 +173 +172 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +126 +119 +119 +115 +115 +116 +109 +110 +106 +105 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +69 +69 +64 +64 +64 +59 +58 +54 +54 +51 +50 +51 +47 +46 +43 +43 +43 +41 +41 +41 +40 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +28 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +12 +13 +14 +13 +13 +14 +14 +14 +13 +14 +13 +13 +14 +14 +13 +13 +14 +14 +14 +13 +13 +14 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +15 +15 +16 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +50 +50 +50 +55 +54 +59 +58 +59 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +101 +100 +100 +106 +106 +109 +109 +110 +115 +116 +119 +119 +120 +126 +125 +129 +130 +129 +134 +133 +139 +139 +139 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +164 +169 +169 +169 +172 +173 +175 +175 +175 +179 +179 +183 +183 +183 +185 +185 +189 +188 +190 +190 +190 +195 +194 +194 +194 +194 +196 +196 +199 +199 +198 +200 +201 +201 +200 +200 +202 +202 +204 +204 +204 +204 +205 +206 +206 +206 +207 +207 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +204 +204 +204 +204 +205 +202 +202 +200 +200 +200 +201 +201 +198 +198 +198 +198 +198 +196 +197 +194 +195 +194 +190 +191 +188 +188 +188 +185 +185 +183 +182 +183 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +134 +134 +129 +129 +126 +125 +125 +120 +119 +116 +116 +115 +110 +110 +106 +105 +105 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +73 +72 +72 +68 +68 +64 +64 +64 +59 +59 +54 +55 +55 +50 +50 +46 +47 +47 +43 +43 +41 +40 +42 +37 +37 +33 +33 +32 +31 +31 +27 +27 +25 +25 +25 +21 +21 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +13 +13 +14 +13 +13 +14 +14 +13 +14 +13 +14 +13 +14 +14 +14 +14 +13 +13 +14 +13 +13 +14 +14 +14 +13 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +36 +36 +37 +40 +40 +43 +43 +43 +47 +47 +50 +50 +50 +54 +55 +58 +58 +59 +64 +64 +68 +68 +68 +72 +72 +76 +77 +83 +82 +82 +86 +85 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +109 +109 +116 +115 +119 +120 +119 +125 +126 +129 +129 +133 +134 +133 +139 +139 +143 +143 +143 +148 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +179 +179 +179 +183 +183 +185 +184 +185 +189 +189 +191 +191 +191 +194 +194 +197 +197 +196 +198 +198 +200 +201 +200 +201 +201 +202 +202 +204 +204 +204 +204 +204 +207 +207 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +205 +205 +205 +205 +205 +203 +202 +202 +200 +200 +200 +200 +200 +198 +198 +197 +197 +196 +195 +195 +190 +191 +191 +189 +189 +185 +184 +183 +183 +182 +179 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +140 +139 +139 +133 +133 +129 +129 +129 +125 +125 +120 +120 +120 +115 +115 +110 +109 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +87 +86 +86 +82 +82 +76 +77 +77 +72 +72 +68 +68 +68 +64 +64 +59 +59 +58 +54 +55 +51 +51 +51 +46 +47 +42 +42 +42 +41 +41 +37 +37 +33 +33 +33 +31 +31 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +16 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +14 +13 +14 +13 +14 +13 +13 +14 +13 +13 +14 +13 +14 +14 +14 +13 +14 +13 +14 +14 +13 +14 +14 +13 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +40 +41 +42 +43 +47 +46 +47 +51 +50 +54 +54 +55 +59 +59 +64 +65 +69 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +95 +96 +96 +100 +100 +106 +105 +106 +109 +110 +115 +119 +119 +120 +119 +126 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +158 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +179 +179 +179 +183 +184 +184 +185 +184 +189 +189 +191 +191 +191 +194 +195 +197 +196 +199 +199 +199 +200 +200 +200 +201 +200 +202 +203 +203 +202 +202 +204 +204 +204 +204 +205 +207 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +205 +204 +203 +202 +202 +201 +200 +201 +200 +201 +198 +198 +196 +196 +196 +194 +195 +190 +191 +189 +189 +189 +185 +184 +182 +182 +183 +179 +179 +174 +175 +175 +173 +173 +169 +169 +169 +165 +165 +160 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +120 +119 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +69 +64 +64 +59 +59 +54 +54 +54 +50 +50 +47 +46 +47 +43 +43 +43 +42 +43 +40 +41 +37 +37 +37 +33 +33 +31 +31 +32 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +13 +14 +13 +13 +13 +14 +14 +14 +13 +14 +14 +13 +14 +14 +14 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +20 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +42 +47 +47 +51 +51 +51 +54 +55 +59 +59 +59 +64 +64 +69 +68 +69 +73 +73 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +110 +110 +116 +115 +119 +119 +119 +125 +126 +130 +129 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +174 +174 +179 +179 +182 +182 +183 +185 +185 +188 +189 +190 +191 +191 +194 +194 +197 +196 +196 +199 +198 +199 +198 +198 +200 +201 +200 +200 +201 +202 +203 +204 +204 +204 +204 +205 +207 +207 +206 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +204 +204 +205 +204 +205 +202 +203 +200 +201 +200 +200 +200 +199 +199 +197 +197 +196 +194 +195 +190 +190 +190 +189 +188 +185 +185 +185 +183 +183 +179 +178 +179 +175 +175 +173 +172 +170 +169 +168 +165 +165 +161 +161 +161 +157 +156 +151 +151 +151 +147 +147 +143 +143 +143 +140 +139 +133 +134 +133 +129 +129 +125 +125 +120 +120 +119 +116 +117 +110 +110 +110 +106 +105 +105 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +81 +82 +76 +76 +73 +72 +72 +68 +68 +64 +65 +64 +58 +59 +58 +58 +59 +55 +55 +51 +51 +51 +46 +47 +43 +43 +42 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +13 +13 +13 +14 +14 +13 +14 +13 +14 +13 +14 +14 +14 +13 +14 +14 +14 +13 +14 +14 +14 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +30 +33 +33 +37 +37 +37 +41 +40 +43 +43 +43 +47 +47 +50 +50 +50 +54 +54 +58 +59 +59 +65 +64 +68 +68 +68 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +105 +110 +109 +109 +115 +116 +119 +119 +120 +126 +125 +130 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +166 +169 +169 +173 +173 +175 +175 +175 +179 +179 +182 +183 +182 +184 +185 +185 +184 +185 +188 +188 +190 +190 +191 +195 +194 +196 +196 +198 +198 +198 +200 +200 +200 +201 +200 +202 +202 +205 +204 +205 +204 +205 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +200 +200 +201 +199 +201 +198 +198 +198 +196 +194 +195 +194 +191 +190 +189 +188 +185 +185 +185 +182 +183 +179 +179 +178 +175 +175 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +130 +130 +129 +125 +125 +119 +119 +119 +116 +116 +110 +109 +110 +106 +106 +100 +100 +100 +100 +100 +95 +96 +89 +90 +90 +86 +86 +86 +86 +86 +82 +82 +76 +76 +76 +73 +72 +68 +69 +68 +64 +64 +58 +59 +55 +54 +54 +50 +51 +47 +47 +47 +43 +43 +43 +42 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +29 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +14 +14 +14 +14 +14 +13 +14 +14 +13 +13 +14 +14 +13 +14 +13 +13 +14 +14 +13 +14 +14 +13 +13 +13 +12 +15 +15 +17 +17 +19 +19 +18 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +36 +37 +37 +40 +40 +43 +43 +43 +47 +47 +50 +51 +55 +55 +54 +59 +58 +59 +59 +59 +64 +64 +68 +68 +68 +72 +72 +76 +76 +77 +83 +82 +86 +86 +86 +90 +90 +96 +96 +100 +100 +100 +106 +106 +106 +106 +106 +110 +110 +115 +116 +115 +120 +120 +125 +126 +125 +129 +129 +133 +133 +135 +139 +140 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +178 +179 +179 +183 +183 +184 +184 +185 +189 +189 +191 +191 +190 +195 +194 +196 +196 +197 +198 +199 +200 +200 +201 +200 +201 +203 +202 +204 +205 +204 +204 +204 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +205 +204 +205 +205 +202 +202 +201 +200 +200 +201 +200 +198 +199 +198 +196 +197 +195 +194 +194 +191 +190 +188 +188 +188 +185 +185 +183 +183 +183 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +148 +147 +147 +143 +143 +139 +139 +137 +133 +133 +130 +129 +125 +125 +125 +120 +119 +115 +116 +116 +110 +110 +110 +110 +109 +106 +106 +100 +100 +99 +96 +96 +90 +90 +87 +87 +86 +82 +82 +76 +76 +76 +73 +73 +68 +69 +68 +64 +65 +64 +64 +64 +58 +58 +54 +54 +55 +51 +50 +46 +47 +43 +43 +43 +41 +41 +36 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +12 +13 +14 +13 +14 +13 +14 +14 +14 +13 +14 +14 +14 +14 +14 +13 +14 +13 +13 +14 +14 +14 +13 +14 +13 +14 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +46 +47 +47 +47 +47 +51 +51 +54 +54 +54 +58 +58 +65 +64 +65 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +117 +120 +119 +126 +125 +129 +129 +129 +134 +133 +139 +139 +139 +143 +143 +143 +144 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +162 +165 +165 +169 +168 +173 +173 +173 +175 +175 +179 +179 +178 +182 +183 +185 +184 +184 +189 +188 +190 +191 +191 +194 +195 +197 +196 +198 +198 +199 +200 +200 +200 +200 +200 +202 +202 +204 +205 +204 +204 +204 +207 +207 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +207 +206 +206 +204 +204 +204 +204 +204 +202 +202 +200 +200 +200 +200 +200 +198 +198 +198 +196 +196 +194 +195 +195 +190 +191 +188 +189 +185 +185 +185 +182 +182 +179 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +158 +151 +151 +147 +147 +143 +143 +143 +139 +140 +134 +133 +133 +130 +130 +129 +130 +130 +125 +125 +120 +120 +120 +115 +116 +110 +110 +108 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +82 +82 +82 +77 +76 +72 +72 +73 +68 +68 +64 +64 +59 +58 +58 +55 +55 +50 +51 +51 +47 +46 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +14 +14 +14 +14 +14 +13 +14 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +20 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +42 +43 +46 +47 +50 +50 +51 +54 +54 +58 +59 +65 +65 +64 +68 +69 +73 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +103 +106 +106 +110 +110 +116 +116 +116 +119 +119 +125 +125 +125 +130 +129 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +148 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +168 +173 +173 +175 +175 +175 +179 +178 +183 +182 +183 +184 +185 +189 +189 +190 +190 +190 +194 +195 +196 +197 +196 +198 +199 +200 +200 +201 +200 +200 +202 +202 +202 +205 +204 +204 +204 +205 +206 +206 +206 +206 +206 +206 +207 +207 +206 +207 +206 +206 +206 +206 +204 +204 +204 +204 +204 +203 +202 +202 +201 +200 +200 +200 +200 +198 +198 +196 +197 +195 +195 +194 +190 +190 +188 +188 +189 +185 +184 +183 +182 +182 +179 +179 +175 +175 +175 +172 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +148 +143 +143 +143 +143 +143 +139 +139 +133 +133 +134 +129 +129 +125 +125 +122 +119 +120 +116 +116 +109 +110 +110 +106 +106 +100 +100 +100 +96 +96 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +77 +74 +72 +72 +68 +68 +64 +65 +64 +58 +59 +55 +55 +55 +51 +50 +46 +47 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +14 +14 +14 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +42 +43 +47 +47 +51 +50 +50 +55 +55 +59 +59 +58 +64 +64 +64 +65 +65 +68 +68 +72 +72 +72 +76 +76 +82 +82 +84 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +109 +110 +109 +109 +115 +115 +119 +120 +119 +125 +125 +129 +129 +132 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +168 +169 +169 +173 +173 +175 +175 +176 +179 +179 +182 +182 +184 +184 +184 +189 +189 +191 +191 +191 +194 +194 +197 +197 +197 +199 +199 +200 +200 +200 +200 +200 +202 +202 +205 +205 +204 +204 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +205 +204 +205 +202 +202 +201 +201 +200 +200 +201 +198 +198 +198 +196 +196 +195 +194 +195 +191 +191 +188 +188 +188 +185 +185 +183 +183 +183 +179 +179 +175 +175 +172 +173 +173 +169 +169 +165 +165 +165 +161 +161 +161 +161 +161 +157 +157 +151 +151 +151 +147 +146 +143 +143 +141 +139 +139 +134 +133 +129 +129 +129 +125 +125 +119 +120 +119 +116 +115 +115 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +91 +90 +90 +86 +86 +82 +82 +83 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +58 +58 +54 +54 +55 +50 +50 +46 +47 +43 +43 +43 +41 +41 +37 +36 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +14 +13 +13 +14 +14 +14 +13 +14 +14 +13 +13 +14 +13 +14 +13 +14 +13 +13 +14 +13 +13 +14 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +24 +27 +27 +28 +31 +31 +33 +33 +36 +37 +37 +41 +40 +43 +43 +43 +47 +46 +50 +51 +50 +54 +54 +58 +58 +58 +65 +64 +69 +68 +68 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +119 +119 +119 +125 +125 +129 +129 +130 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +178 +182 +183 +182 +184 +185 +189 +188 +189 +190 +191 +194 +195 +194 +197 +196 +198 +198 +200 +200 +201 +200 +200 +202 +202 +202 +204 +205 +204 +204 +204 +206 +206 +207 +207 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +205 +204 +204 +204 +205 +202 +202 +202 +200 +200 +200 +201 +200 +198 +198 +196 +196 +196 +194 +194 +191 +191 +191 +189 +189 +184 +185 +183 +183 +183 +178 +179 +175 +175 +175 +173 +173 +173 +173 +172 +169 +169 +165 +165 +166 +161 +161 +157 +157 +157 +157 +157 +151 +151 +146 +147 +147 +143 +143 +139 +140 +139 +133 +133 +133 +133 +133 +129 +129 +125 +125 +125 +119 +119 +116 +115 +112 +110 +109 +105 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +81 +82 +82 +76 +76 +73 +72 +73 +68 +68 +64 +64 +58 +58 +58 +55 +54 +51 +50 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +22 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +18 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +46 +48 +51 +50 +54 +55 +58 +58 +58 +64 +64 +68 +68 +68 +73 +72 +72 +72 +72 +77 +76 +82 +82 +82 +86 +86 +90 +90 +95 +96 +96 +100 +100 +106 +105 +106 +110 +109 +115 +116 +116 +120 +119 +125 +125 +125 +130 +129 +134 +133 +134 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +174 +178 +179 +178 +183 +183 +184 +184 +189 +189 +188 +190 +190 +194 +194 +194 +196 +197 +199 +198 +198 +201 +201 +200 +200 +200 +202 +203 +204 +204 +205 +205 +204 +206 +206 +207 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +205 +204 +204 +204 +205 +202 +202 +201 +200 +201 +201 +201 +199 +198 +197 +197 +197 +194 +194 +190 +190 +191 +188 +188 +185 +184 +184 +183 +183 +179 +179 +178 +175 +175 +173 +173 +173 +168 +169 +165 +165 +161 +161 +161 +156 +157 +151 +151 +151 +147 +147 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +130 +130 +125 +126 +120 +119 +115 +115 +115 +110 +110 +106 +106 +105 +100 +100 +96 +96 +95 +90 +90 +86 +86 +86 +82 +82 +76 +76 +73 +73 +72 +68 +68 +65 +64 +64 +59 +58 +55 +55 +55 +51 +51 +47 +47 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +13 +14 +14 +14 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +14 +13 +14 +14 +14 +13 +14 +14 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +38 +37 +41 +40 +43 +43 +47 +47 +47 +51 +51 +54 +55 +54 +59 +58 +59 +58 +58 +64 +64 +68 +68 +68 +73 +72 +76 +76 +79 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +110 +110 +115 +116 +120 +119 +120 +125 +125 +129 +129 +133 +133 +133 +140 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +178 +179 +179 +183 +182 +184 +184 +184 +188 +188 +190 +191 +191 +194 +194 +197 +197 +197 +199 +199 +200 +200 +201 +200 +200 +202 +202 +205 +204 +204 +204 +205 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +207 +207 +206 +206 +206 +204 +205 +205 +204 +204 +205 +205 +203 +202 +203 +200 +200 +200 +200 +200 +199 +198 +197 +196 +196 +195 +194 +191 +190 +191 +188 +189 +184 +184 +184 +183 +183 +179 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +146 +147 +145 +143 +143 +140 +139 +133 +133 +133 +129 +129 +125 +125 +125 +119 +119 +115 +115 +116 +109 +109 +106 +105 +106 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +65 +58 +58 +55 +55 +54 +51 +50 +46 +46 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +33 +33 +33 +31 +31 +27 +26 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +14 +14 +13 +13 +14 +14 +15 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +14 +14 +14 +13 +15 +15 +15 +15 +15 +17 +17 +17 +19 +19 +21 +21 +22 +25 +24 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +41 +41 +41 +43 +43 +47 +47 +47 +51 +50 +55 +54 +56 +58 +58 +64 +65 +69 +69 +68 +72 +73 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +105 +109 +110 +110 +116 +115 +119 +119 +119 +125 +125 +129 +129 +130 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +183 +185 +185 +188 +188 +188 +190 +191 +194 +194 +197 +196 +197 +198 +198 +200 +201 +200 +201 +201 +202 +202 +202 +204 +204 +204 +204 +205 +206 +206 +206 +206 +207 +207 +206 +206 +206 +207 +206 +206 +207 +206 +205 +204 +204 +204 +205 +204 +204 +204 +202 +202 +200 +201 +201 +200 +201 +199 +199 +200 +196 +196 +194 +194 +190 +191 +191 +188 +188 +185 +185 +184 +182 +182 +183 +182 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +144 +143 +139 +139 +140 +133 +133 +129 +129 +130 +126 +126 +120 +119 +115 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +73 +72 +68 +68 +65 +64 +64 +59 +58 +54 +55 +55 +50 +50 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +26 +25 +25 +21 +21 +19 +19 +20 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +14 +13 +14 +13 +14 +13 +14 +14 +14 +14 +14 +13 +13 +14 +13 +14 +14 +13 +14 +14 +12 +13 +13 +14 +13 +14 +15 +15 +16 +17 +17 +19 +19 +22 +21 +21 +25 +25 +27 +27 +26 +31 +31 +31 +31 +31 +33 +33 +37 +37 +37 +40 +41 +43 +43 +44 +47 +47 +51 +50 +54 +54 +54 +58 +59 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +85 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +116 +120 +120 +126 +125 +125 +130 +129 +133 +133 +133 +140 +139 +143 +143 +148 +147 +147 +151 +151 +157 +157 +157 +160 +160 +165 +165 +165 +168 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +182 +185 +185 +189 +189 +189 +190 +190 +194 +194 +195 +196 +196 +198 +199 +199 +200 +200 +200 +200 +200 +202 +203 +204 +204 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +204 +205 +204 +204 +204 +202 +203 +201 +200 +200 +200 +200 +199 +198 +199 +196 +197 +195 +194 +194 +190 +191 +191 +190 +190 +189 +188 +184 +185 +185 +183 +183 +179 +179 +175 +175 +175 +173 +173 +168 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +144 +139 +139 +133 +133 +130 +129 +129 +125 +126 +120 +120 +120 +115 +115 +110 +109 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +77 +76 +72 +72 +68 +68 +68 +64 +58 +58 +58 +58 +54 +55 +50 +51 +50 +46 +47 +43 +42 +43 +41 +41 +37 +37 +34 +33 +33 +31 +31 +27 +26 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +14 +14 +13 +13 +13 +14 +14 +13 +14 +14 +14 +13 +14 +13 +14 +13 +13 +13 +13 +13 +13 +14 +13 +13 +12 +15 +15 +17 +17 +19 +19 +19 +21 +21 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +35 +37 +36 +41 +41 +43 +43 +43 +47 +47 +50 +51 +51 +55 +54 +59 +59 +59 +65 +64 +68 +68 +68 +72 +72 +77 +76 +81 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +105 +110 +109 +110 +115 +116 +119 +119 +119 +125 +125 +129 +129 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +179 +179 +179 +183 +182 +185 +185 +185 +188 +188 +191 +190 +190 +194 +195 +196 +197 +196 +198 +198 +200 +200 +201 +200 +200 +202 +203 +204 +204 +204 +204 +204 +207 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +205 +205 +204 +205 +202 +202 +203 +200 +200 +200 +201 +200 +199 +198 +198 +198 +198 +196 +196 +194 +194 +195 +191 +191 +188 +188 +185 +185 +185 +183 +182 +178 +179 +179 +175 +175 +172 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +126 +125 +126 +119 +119 +116 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +91 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +69 +68 +64 +65 +64 +59 +58 +54 +54 +55 +50 +51 +47 +46 +43 +42 +43 +40 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +14 +15 +13 +13 +12 +13 +14 +13 +14 +13 +14 +14 +14 +13 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +14 +13 +14 +13 +13 +13 +12 +15 +15 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +40 +41 +43 +43 +47 +47 +47 +51 +50 +54 +54 +54 +58 +59 +65 +64 +68 +69 +69 +73 +72 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +105 +106 +106 +110 +110 +116 +116 +120 +120 +120 +125 +125 +129 +130 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +182 +182 +183 +185 +185 +189 +189 +188 +190 +190 +195 +194 +195 +196 +197 +198 +198 +199 +200 +200 +200 +200 +202 +202 +203 +204 +204 +204 +205 +204 +204 +204 +207 +206 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +204 +205 +204 +204 +204 +202 +202 +203 +202 +202 +200 +200 +200 +200 +201 +199 +198 +196 +197 +195 +194 +195 +190 +190 +189 +189 +188 +185 +185 +182 +183 +183 +178 +179 +175 +175 +175 +173 +173 +168 +169 +169 +165 +165 +161 +161 +159 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +134 +129 +129 +129 +125 +125 +119 +119 +120 +115 +115 +109 +110 +106 +105 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +69 +64 +64 +58 +58 +55 +55 +55 +51 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +26 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +14 +14 +13 +14 +13 +14 +13 +14 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +40 +41 +43 +43 +46 +47 +50 +51 +51 +54 +54 +55 +55 +55 +58 +58 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +95 +96 +96 +100 +100 +106 +106 +106 +110 +109 +116 +116 +115 +119 +120 +125 +125 +125 +130 +129 +133 +133 +134 +140 +140 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +182 +183 +185 +184 +189 +188 +189 +191 +190 +194 +195 +195 +196 +196 +197 +196 +197 +198 +199 +201 +200 +200 +200 +201 +202 +202 +203 +204 +205 +204 +205 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +204 +205 +205 +204 +204 +202 +203 +200 +200 +200 +200 +200 +198 +198 +196 +196 +197 +195 +195 +191 +191 +190 +188 +189 +184 +185 +185 +182 +183 +179 +178 +175 +175 +174 +173 +172 +168 +169 +170 +165 +165 +161 +160 +162 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +130 +129 +129 +125 +125 +120 +120 +120 +116 +115 +110 +110 +110 +106 +105 +100 +99 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +68 +68 +65 +64 +58 +58 +59 +55 +55 +50 +50 +51 +47 +47 +42 +42 +44 +41 +41 +37 +37 +34 +33 +33 +31 +31 +27 +27 +27 +25 +25 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +12 +13 +13 +14 +13 +14 +14 +14 +13 +13 +14 +13 +13 +13 +13 +14 +14 +13 +13 +14 +13 +14 +14 +13 +14 +14 +14 +13 +14 +13 +13 +15 +15 +15 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +50 +51 +54 +54 +58 +58 +58 +64 +64 +68 +69 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +109 +116 +115 +119 +119 +126 +125 +125 +129 +130 +134 +133 +133 +139 +139 +140 +139 +139 +144 +144 +147 +147 +147 +151 +151 +157 +157 +158 +161 +161 +165 +165 +168 +169 +169 +173 +173 +175 +175 +175 +178 +179 +179 +179 +179 +183 +182 +184 +184 +185 +188 +188 +191 +190 +191 +194 +195 +197 +196 +198 +199 +198 +200 +200 +200 +200 +200 +202 +202 +202 +202 +202 +204 +205 +204 +204 +205 +207 +206 +206 +207 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +203 +202 +200 +200 +200 +201 +201 +198 +198 +196 +197 +195 +195 +194 +190 +190 +189 +188 +189 +184 +184 +183 +183 +182 +179 +178 +175 +175 +175 +173 +173 +169 +169 +168 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +120 +120 +120 +115 +115 +109 +110 +106 +106 +106 +100 +100 +100 +100 +100 +96 +96 +90 +90 +91 +86 +86 +82 +82 +83 +77 +76 +72 +72 +73 +68 +68 +64 +64 +58 +58 +59 +55 +55 +51 +51 +51 +47 +47 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +14 +14 +13 +13 +13 +13 +13 +14 +13 +13 +14 +14 +14 +14 +13 +13 +13 +14 +15 +15 +17 +17 +19 +19 +19 +21 +21 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +51 +51 +54 +55 +58 +59 +58 +64 +64 +68 +69 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +90 +90 +90 +96 +96 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +115 +119 +120 +125 +125 +126 +129 +129 +133 +133 +140 +139 +139 +143 +143 +147 +147 +147 +151 +151 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +170 +173 +173 +175 +175 +178 +179 +179 +182 +182 +185 +184 +185 +188 +189 +189 +189 +189 +191 +191 +195 +195 +195 +197 +196 +199 +198 +200 +200 +201 +200 +200 +202 +202 +203 +204 +205 +204 +204 +205 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +205 +204 +204 +205 +204 +202 +203 +202 +200 +200 +200 +200 +201 +199 +199 +196 +196 +197 +194 +194 +191 +190 +191 +189 +188 +184 +185 +183 +182 +183 +178 +179 +175 +175 +175 +172 +173 +169 +168 +168 +165 +165 +161 +160 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +130 +130 +125 +125 +119 +120 +119 +116 +116 +110 +109 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +73 +68 +68 +68 +64 +65 +58 +59 +59 +55 +54 +51 +51 +51 +47 +47 +42 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +13 +13 +13 +13 +14 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +20 +21 +21 +21 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +40 +40 +43 +43 +42 +47 +47 +51 +51 +51 +54 +54 +58 +58 +59 +64 +64 +68 +68 +73 +72 +72 +76 +77 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +111 +116 +116 +119 +119 +125 +125 +125 +129 +129 +133 +133 +133 +139 +139 +140 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +158 +161 +161 +164 +165 +168 +169 +169 +173 +173 +175 +175 +175 +178 +179 +179 +178 +179 +183 +182 +185 +184 +185 +189 +189 +191 +191 +192 +195 +195 +197 +197 +198 +198 +198 +200 +201 +200 +200 +200 +202 +203 +205 +204 +204 +204 +204 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +201 +200 +201 +200 +200 +198 +198 +198 +196 +196 +194 +194 +190 +190 +190 +189 +189 +184 +185 +185 +183 +183 +179 +178 +178 +174 +175 +173 +173 +172 +169 +169 +165 +165 +165 +161 +161 +157 +157 +152 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +125 +119 +120 +116 +116 +115 +110 +110 +106 +106 +100 +100 +99 +96 +96 +90 +90 +90 +86 +86 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +66 +64 +64 +58 +58 +54 +54 +55 +51 +51 +46 +46 +46 +43 +43 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +30 +31 +29 +27 +27 +25 +25 +21 +20 +21 +19 +19 +17 +17 +17 +15 +15 +15 +14 +15 +13 +13 +12 +13 +13 +13 +13 +14 +13 +14 +13 +13 +14 +14 +14 +13 +14 +13 +14 +13 +14 +13 +14 +14 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +15 +15 +18 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +34 +33 +37 +37 +41 +41 +41 +43 +43 +47 +46 +52 +51 +51 +55 +55 +59 +58 +59 +65 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +87 +90 +91 +96 +96 +101 +100 +100 +106 +106 +110 +110 +110 +116 +116 +115 +115 +116 +119 +120 +125 +126 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +146 +147 +147 +151 +151 +157 +157 +157 +161 +161 +161 +161 +161 +165 +165 +169 +168 +169 +173 +173 +175 +175 +178 +178 +179 +182 +183 +185 +185 +185 +189 +189 +190 +190 +191 +195 +194 +197 +196 +196 +198 +199 +199 +200 +201 +201 +200 +202 +202 +204 +204 +205 +204 +204 +206 +207 +206 +206 +207 +207 +206 +206 +206 +206 +206 +207 +206 +206 +206 +204 +205 +205 +204 +205 +202 +202 +201 +200 +200 +201 +200 +198 +198 +198 +196 +197 +195 +195 +194 +191 +191 +189 +188 +188 +185 +184 +183 +183 +183 +179 +179 +175 +175 +173 +173 +172 +169 +169 +165 +165 +165 +161 +161 +158 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +134 +134 +129 +129 +125 +126 +126 +119 +120 +116 +115 +115 +110 +110 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +88 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +65 +64 +65 +58 +58 +54 +54 +55 +51 +51 +46 +47 +43 +43 +42 +41 +41 +42 +37 +36 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +13 +14 +14 +14 +14 +14 +13 +14 +13 +13 +14 +13 +14 +14 +13 +14 +13 +14 +13 +14 +14 +14 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +26 +27 +27 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +50 +51 +55 +54 +58 +58 +58 +64 +64 +68 +68 +67 +72 +72 +76 +77 +83 +82 +82 +86 +86 +90 +91 +90 +95 +96 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +115 +117 +119 +120 +125 +125 +129 +129 +129 +133 +134 +139 +139 +139 +143 +143 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +179 +183 +183 +185 +185 +185 +189 +189 +191 +191 +191 +195 +195 +196 +196 +198 +198 +199 +200 +200 +200 +200 +201 +202 +203 +204 +204 +204 +204 +205 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +204 +205 +205 +204 +204 +203 +202 +201 +201 +200 +200 +201 +198 +198 +198 +196 +197 +194 +195 +194 +190 +190 +188 +189 +185 +185 +185 +182 +183 +179 +179 +179 +175 +175 +173 +172 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +158 +151 +151 +147 +147 +143 +143 +143 +140 +139 +133 +133 +133 +129 +129 +129 +129 +129 +125 +126 +119 +120 +120 +115 +115 +110 +109 +111 +106 +106 +99 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +61 +58 +58 +54 +54 +50 +51 +51 +47 +46 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +22 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +14 +14 +14 +13 +14 +13 +14 +14 +14 +13 +14 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +26 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +46 +51 +51 +51 +54 +54 +59 +58 +64 +64 +64 +69 +68 +72 +72 +72 +76 +77 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +97 +100 +100 +106 +106 +110 +110 +110 +116 +116 +115 +115 +115 +119 +120 +120 +120 +119 +125 +125 +129 +129 +130 +133 +133 +139 +139 +142 +143 +144 +148 +147 +151 +151 +151 +157 +157 +161 +161 +161 +164 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +183 +185 +185 +188 +188 +190 +191 +191 +195 +194 +197 +196 +196 +199 +198 +200 +200 +200 +200 +201 +202 +202 +203 +204 +204 +205 +204 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +203 +203 +200 +201 +201 +200 +199 +198 +199 +196 +196 +194 +195 +194 +190 +190 +189 +188 +189 +184 +184 +182 +182 +182 +178 +179 +175 +175 +175 +173 +173 +169 +169 +164 +165 +165 +161 +161 +157 +157 +157 +151 +151 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +131 +129 +129 +125 +125 +119 +119 +119 +116 +116 +110 +109 +110 +106 +106 +105 +106 +106 +100 +99 +96 +96 +96 +90 +90 +86 +86 +84 +82 +82 +76 +76 +73 +72 +72 +68 +68 +69 +68 +68 +64 +64 +58 +58 +59 +54 +54 +50 +51 +51 +47 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +26 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +16 +15 +14 +13 +13 +12 +13 +13 +14 +14 +13 +14 +13 +13 +14 +14 +14 +13 +13 +13 +13 +14 +14 +13 +14 +14 +13 +13 +13 +13 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +51 +50 +50 +51 +55 +54 +58 +58 +58 +64 +64 +68 +68 +69 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +96 +96 +96 +100 +100 +106 +106 +105 +110 +109 +115 +115 +118 +119 +120 +125 +126 +129 +130 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +164 +167 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +183 +184 +185 +189 +188 +188 +190 +190 +194 +194 +195 +196 +197 +199 +198 +200 +200 +201 +200 +201 +202 +202 +202 +204 +205 +204 +204 +204 +206 +207 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +205 +204 +204 +204 +204 +204 +205 +205 +202 +203 +200 +200 +200 +201 +201 +198 +199 +198 +196 +197 +194 +194 +195 +190 +190 +188 +189 +184 +184 +184 +183 +183 +179 +179 +179 +175 +174 +173 +173 +172 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +129 +129 +129 +125 +125 +120 +119 +119 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +69 +64 +64 +58 +59 +55 +55 +55 +50 +50 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +26 +27 +27 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +13 +13 +13 +13 +13 +13 +14 +13 +14 +14 +14 +14 +13 +14 +14 +13 +14 +14 +13 +14 +13 +13 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +50 +52 +54 +54 +58 +58 +65 +65 +64 +68 +68 +72 +72 +76 +76 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +99 +100 +100 +106 +105 +110 +110 +110 +116 +115 +119 +119 +120 +125 +125 +129 +129 +130 +133 +133 +139 +139 +140 +144 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +182 +183 +185 +185 +188 +189 +190 +190 +191 +195 +194 +196 +196 +196 +198 +198 +201 +200 +200 +200 +201 +202 +203 +202 +204 +205 +204 +204 +204 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +205 +204 +204 +204 +205 +202 +202 +203 +201 +200 +201 +200 +201 +198 +199 +196 +196 +194 +194 +194 +191 +190 +189 +188 +188 +185 +185 +185 +185 +185 +183 +182 +179 +179 +179 +174 +175 +173 +173 +171 +169 +169 +165 +165 +161 +161 +161 +157 +157 +157 +157 +157 +151 +151 +151 +151 +151 +147 +147 +143 +143 +143 +139 +140 +134 +133 +131 +129 +129 +126 +125 +120 +120 +119 +115 +116 +110 +110 +109 +106 +106 +100 +100 +100 +96 +95 +90 +90 +90 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +58 +59 +54 +55 +50 +50 +51 +47 +47 +43 +43 +43 +41 +40 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +14 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +47 +47 +47 +51 +50 +54 +54 +54 +59 +58 +58 +59 +59 +64 +64 +68 +68 +68 +72 +72 +76 +76 +81 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +109 +116 +116 +119 +120 +120 +125 +125 +129 +130 +134 +133 +133 +139 +139 +143 +144 +143 +147 +147 +151 +151 +151 +157 +157 +160 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +174 +179 +178 +179 +183 +183 +184 +185 +185 +188 +189 +191 +191 +190 +194 +195 +196 +196 +196 +198 +198 +200 +200 +201 +200 +200 +202 +202 +205 +204 +204 +204 +204 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +207 +206 +206 +204 +204 +204 +204 +204 +202 +203 +201 +201 +200 +200 +201 +198 +198 +198 +196 +196 +195 +195 +194 +191 +191 +188 +188 +189 +184 +184 +182 +182 +183 +178 +179 +175 +175 +172 +173 +173 +169 +169 +165 +165 +165 +161 +161 +160 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +140 +140 +139 +133 +133 +130 +129 +130 +126 +126 +120 +120 +120 +115 +116 +110 +110 +109 +106 +106 +100 +100 +100 +96 +96 +90 +90 +87 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +59 +58 +59 +55 +55 +51 +51 +50 +47 +47 +43 +42 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +20 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +13 +14 +14 +14 +13 +14 +14 +14 +13 +13 +14 +14 +13 +13 +14 +13 +14 +14 +14 +13 +14 +14 +13 +13 +13 +14 +13 +13 +15 +15 +15 +17 +17 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +28 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +46 +51 +51 +51 +55 +55 +58 +58 +59 +65 +64 +69 +68 +68 +72 +72 +76 +76 +82 +82 +82 +86 +87 +90 +90 +91 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +115 +119 +119 +125 +125 +126 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +150 +157 +157 +161 +161 +162 +165 +165 +169 +169 +172 +173 +173 +175 +175 +179 +179 +179 +183 +183 +185 +184 +185 +188 +188 +191 +190 +191 +194 +194 +196 +197 +197 +199 +199 +200 +200 +201 +200 +200 +202 +202 +204 +204 +204 +204 +204 +206 +206 +207 +207 +206 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +204 +205 +204 +204 +204 +203 +203 +200 +200 +200 +200 +200 +199 +198 +198 +196 +197 +195 +194 +195 +191 +190 +188 +189 +186 +185 +185 +183 +182 +178 +179 +178 +175 +175 +173 +173 +173 +169 +169 +169 +169 +169 +165 +165 +161 +161 +162 +157 +157 +151 +151 +150 +147 +147 +144 +143 +139 +139 +139 +133 +133 +129 +129 +130 +125 +125 +120 +119 +119 +116 +115 +109 +110 +110 +106 +106 +100 +99 +99 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +65 +58 +58 +58 +55 +54 +51 +51 +47 +46 +46 +43 +43 +40 +41 +40 +37 +37 +33 +32 +33 +31 +31 +27 +27 +27 +25 +25 +21 +20 +21 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +14 +13 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +14 +13 +14 +14 +13 +14 +14 +13 +14 +13 +14 +14 +14 +13 +15 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +40 +43 +43 +47 +46 +46 +51 +51 +55 +54 +55 +58 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +81 +86 +86 +86 +90 +89 +96 +96 +96 +100 +100 +106 +105 +110 +109 +110 +116 +116 +119 +119 +119 +125 +126 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +182 +185 +185 +188 +188 +188 +191 +191 +194 +195 +197 +197 +197 +198 +198 +200 +200 +201 +201 +201 +202 +202 +202 +204 +204 +205 +204 +204 +206 +206 +206 +206 +207 +207 +206 +206 +207 +206 +206 +206 +206 +206 +204 +205 +204 +204 +204 +202 +202 +202 +200 +201 +201 +200 +200 +199 +199 +196 +197 +195 +194 +195 +190 +190 +188 +189 +188 +184 +184 +183 +183 +183 +179 +179 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +144 +139 +139 +133 +133 +133 +129 +129 +125 +125 +126 +120 +119 +115 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +68 +68 +64 +64 +59 +58 +58 +54 +54 +50 +50 +51 +46 +47 +43 +43 +42 +41 +41 +36 +38 +37 +33 +32 +31 +31 +31 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +13 +14 +14 +13 +14 +14 +14 +14 +14 +13 +13 +14 +14 +13 +14 +14 +13 +13 +14 +14 +14 +14 +13 +13 +12 +16 +15 +17 +16 +18 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +30 +31 +33 +33 +33 +33 +33 +37 +37 +40 +41 +40 +43 +43 +47 +47 +48 +51 +50 +58 +58 +64 +64 +64 +68 +68 +72 +72 +73 +76 +76 +82 +82 +83 +86 +86 +90 +90 +91 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +115 +116 +119 +119 +126 +125 +126 +129 +130 +133 +133 +133 +139 +139 +143 +143 +144 +147 +147 +151 +151 +158 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +185 +184 +184 +188 +189 +191 +191 +195 +194 +195 +196 +197 +198 +198 +198 +200 +200 +200 +200 +200 +200 +201 +203 +202 +202 +204 +205 +205 +204 +205 +207 +207 +206 +207 +207 +207 +207 +206 +206 +206 +206 +206 +207 +206 +205 +204 +204 +205 +204 +202 +202 +202 +201 +201 +200 +201 +199 +199 +199 +197 +196 +194 +195 +194 +190 +190 +189 +189 +188 +185 +185 +185 +185 +185 +183 +183 +179 +178 +179 +175 +174 +172 +173 +171 +169 +169 +165 +165 +161 +160 +161 +157 +157 +151 +150 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +134 +129 +130 +125 +125 +119 +119 +120 +116 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +69 +69 +68 +64 +65 +59 +58 +58 +54 +55 +50 +50 +51 +47 +46 +43 +43 +43 +41 +41 +37 +37 +37 +33 +32 +31 +31 +28 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +14 +14 +14 +14 +14 +13 +13 +14 +14 +13 +14 +13 +13 +13 +13 +14 +14 +13 +14 +13 +14 +14 +14 +13 +13 +14 +13 +13 +15 +15 +18 +17 +17 +19 +19 +21 +21 +21 +25 +25 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +38 +41 +41 +43 +42 +47 +47 +47 +50 +50 +55 +54 +55 +59 +59 +64 +64 +64 +68 +68 +72 +72 +73 +76 +76 +82 +82 +86 +87 +85 +89 +90 +96 +95 +96 +100 +100 +106 +106 +106 +110 +110 +116 +115 +115 +119 +119 +125 +126 +125 +130 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +164 +169 +169 +173 +173 +173 +175 +175 +179 +179 +183 +183 +183 +184 +184 +188 +189 +188 +190 +190 +194 +195 +194 +196 +196 +198 +198 +199 +201 +201 +200 +200 +201 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +205 +204 +205 +204 +205 +202 +202 +200 +200 +201 +200 +201 +198 +198 +198 +196 +196 +197 +197 +197 +194 +194 +190 +190 +191 +189 +188 +184 +185 +184 +183 +182 +179 +179 +174 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +160 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +139 +139 +140 +134 +133 +129 +129 +129 +125 +125 +119 +119 +120 +115 +116 +109 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +91 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +69 +69 +64 +64 +58 +59 +58 +54 +54 +50 +50 +51 +47 +47 +43 +43 +41 +40 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +18 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +13 +13 +13 +14 +14 +14 +14 +14 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +13 +13 +15 +15 +15 +15 +15 +17 +17 +17 +19 +19 +21 +21 +24 +25 +25 +27 +26 +31 +31 +31 +32 +33 +37 +37 +37 +41 +41 +42 +43 +43 +47 +47 +51 +50 +51 +55 +54 +58 +58 +63 +64 +64 +68 +68 +72 +72 +72 +76 +76 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +105 +109 +109 +110 +116 +116 +119 +119 +119 +125 +125 +130 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +172 +175 +175 +175 +178 +179 +183 +183 +183 +185 +185 +188 +189 +189 +190 +190 +195 +195 +197 +197 +197 +198 +198 +200 +201 +200 +201 +201 +201 +201 +200 +202 +202 +205 +205 +204 +204 +205 +206 +207 +207 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +204 +204 +204 +204 +205 +202 +203 +200 +200 +200 +200 +201 +198 +198 +196 +197 +196 +195 +195 +190 +190 +190 +188 +188 +185 +185 +185 +183 +182 +179 +179 +179 +175 +175 +173 +173 +168 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +134 +133 +129 +130 +125 +126 +119 +120 +119 +116 +116 +109 +109 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +69 +68 +68 +64 +64 +58 +58 +58 +54 +55 +55 +55 +55 +50 +50 +46 +47 +47 +43 +43 +41 +41 +42 +37 +36 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +14 +13 +14 +14 +14 +13 +13 +13 +14 +14 +14 +14 +13 +13 +14 +13 +13 +14 +14 +14 +13 +13 +13 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +26 +27 +27 +31 +31 +32 +33 +36 +37 +37 +40 +41 +41 +41 +41 +43 +43 +47 +47 +47 +50 +51 +55 +55 +54 +58 +59 +64 +65 +64 +68 +69 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +111 +116 +116 +115 +119 +119 +126 +126 +130 +129 +129 +134 +134 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +172 +175 +175 +175 +179 +179 +182 +183 +183 +185 +184 +185 +184 +185 +188 +189 +191 +191 +191 +195 +195 +197 +196 +197 +199 +199 +200 +200 +200 +201 +201 +202 +203 +204 +205 +204 +204 +205 +205 +204 +205 +206 +206 +207 +206 +206 +206 +207 +206 +206 +207 +206 +207 +207 +206 +205 +205 +204 +204 +204 +202 +202 +202 +200 +201 +201 +200 +200 +199 +198 +196 +197 +197 +194 +195 +190 +190 +188 +189 +189 +185 +185 +182 +183 +182 +178 +179 +175 +175 +175 +173 +173 +169 +168 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +148 +147 +148 +143 +143 +139 +139 +140 +134 +133 +129 +129 +129 +125 +125 +119 +120 +119 +116 +115 +110 +110 +110 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +69 +64 +64 +59 +59 +59 +54 +54 +50 +50 +47 +47 +47 +43 +43 +41 +41 +40 +38 +37 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +23 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +13 +14 +13 +14 +13 +14 +14 +14 +14 +14 +13 +13 +14 +13 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +21 +21 +20 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +46 +47 +47 +51 +50 +55 +54 +59 +59 +59 +65 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +99 +100 +106 +106 +110 +110 +110 +115 +115 +119 +119 +119 +126 +125 +130 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +148 +151 +151 +157 +157 +160 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +183 +185 +184 +189 +189 +189 +190 +191 +194 +194 +196 +197 +197 +198 +199 +200 +200 +200 +200 +200 +200 +201 +201 +202 +202 +204 +204 +205 +204 +204 +206 +207 +207 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +204 +204 +205 +205 +204 +202 +202 +200 +200 +201 +201 +201 +199 +198 +197 +196 +196 +195 +195 +190 +190 +191 +188 +189 +185 +184 +185 +182 +183 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +144 +143 +143 +139 +139 +133 +133 +133 +129 +129 +126 +125 +126 +119 +120 +116 +115 +110 +110 +109 +106 +106 +100 +100 +100 +96 +96 +96 +96 +96 +90 +90 +86 +86 +86 +83 +82 +76 +76 +77 +72 +72 +68 +68 +65 +65 +64 +59 +58 +54 +55 +54 +50 +51 +51 +51 +51 +47 +47 +43 +42 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +13 +14 +14 +14 +14 +13 +14 +14 +13 +13 +13 +14 +13 +14 +13 +14 +14 +13 +14 +13 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +32 +33 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +51 +54 +55 +58 +58 +58 +65 +64 +68 +68 +68 +72 +73 +76 +76 +76 +82 +82 +86 +86 +91 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +116 +120 +119 +119 +125 +126 +129 +130 +130 +133 +133 +139 +138 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +164 +169 +169 +169 +173 +173 +175 +174 +176 +178 +179 +182 +183 +184 +184 +184 +188 +189 +191 +190 +191 +194 +194 +195 +194 +194 +196 +197 +198 +198 +199 +200 +201 +200 +201 +202 +202 +203 +204 +204 +204 +205 +205 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +204 +205 +205 +205 +203 +203 +203 +200 +201 +200 +200 +200 +199 +198 +197 +196 +196 +195 +195 +191 +190 +191 +188 +189 +185 +185 +185 +182 +182 +178 +179 +175 +174 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +140 +139 +134 +133 +130 +129 +129 +125 +125 +120 +119 +119 +115 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +68 +68 +64 +64 +64 +64 +65 +58 +58 +54 +54 +55 +51 +51 +47 +47 +47 +42 +43 +41 +41 +37 +37 +36 +33 +33 +31 +31 +31 +27 +27 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +14 +13 +14 +13 +14 +14 +13 +14 +13 +13 +14 +13 +14 +13 +13 +14 +14 +14 +13 +13 +13 +14 +13 +14 +13 +15 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +25 +27 +27 +31 +31 +32 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +46 +51 +51 +55 +55 +54 +59 +58 +64 +65 +65 +69 +68 +72 +72 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +116 +116 +119 +119 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +162 +165 +165 +168 +169 +172 +173 +173 +175 +175 +179 +179 +178 +182 +182 +183 +183 +182 +184 +185 +188 +189 +189 +190 +191 +195 +194 +196 +196 +197 +198 +198 +200 +201 +201 +201 +200 +203 +202 +202 +204 +204 +204 +205 +204 +207 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +207 +206 +207 +205 +204 +205 +204 +204 +205 +205 +204 +202 +202 +200 +201 +200 +200 +200 +198 +199 +199 +196 +197 +194 +195 +191 +191 +190 +189 +189 +185 +185 +184 +182 +183 +179 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +134 +129 +130 +125 +126 +125 +119 +119 +115 +115 +116 +110 +110 +106 +106 +101 +100 +100 +96 +96 +90 +90 +90 +86 +86 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +69 +65 +65 +58 +58 +55 +55 +54 +51 +50 +47 +48 +46 +43 +42 +43 +43 +43 +41 +41 +37 +36 +37 +33 +33 +31 +31 +30 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +14 +14 +13 +13 +13 +14 +13 +14 +14 +14 +14 +13 +13 +14 +14 +13 +14 +13 +13 +14 +13 +13 +13 +13 +12 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +34 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +50 +55 +55 +55 +58 +59 +64 +64 +64 +69 +69 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +116 +120 +120 +120 +119 +119 +125 +125 +129 +129 +130 +133 +133 +139 +139 +141 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +178 +182 +182 +183 +184 +185 +188 +188 +189 +190 +190 +194 +194 +194 +196 +197 +198 +198 +198 +200 +200 +200 +200 +201 +202 +202 +204 +204 +204 +204 +205 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +207 +204 +204 +204 +204 +204 +202 +203 +201 +201 +200 +201 +200 +198 +198 +198 +199 +199 +196 +196 +195 +195 +194 +190 +190 +188 +188 +188 +184 +184 +183 +183 +183 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +140 +133 +133 +129 +129 +125 +125 +125 +120 +119 +115 +115 +116 +110 +110 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +91 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +73 +72 +68 +68 +68 +68 +69 +64 +64 +58 +58 +59 +54 +54 +51 +51 +47 +47 +47 +43 +42 +41 +40 +41 +37 +38 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +20 +21 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +14 +14 +13 +13 +14 +14 +14 +14 +14 +13 +13 +14 +14 +14 +14 +13 +14 +14 +14 +13 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +26 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +51 +55 +55 +54 +58 +58 +64 +64 +64 +69 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +110 +110 +116 +116 +119 +120 +125 +125 +125 +129 +129 +133 +134 +133 +139 +139 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +156 +160 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +182 +183 +183 +185 +185 +189 +189 +189 +191 +191 +194 +194 +196 +196 +197 +198 +198 +200 +201 +201 +200 +200 +202 +203 +202 +204 +204 +204 +204 +204 +206 +206 +207 +206 +206 +206 +207 +206 +207 +207 +207 +206 +206 +207 +204 +204 +204 +205 +204 +203 +203 +202 +200 +200 +201 +200 +200 +199 +199 +196 +196 +197 +194 +194 +190 +191 +189 +189 +188 +185 +184 +183 +183 +183 +179 +178 +175 +174 +175 +173 +173 +169 +169 +169 +165 +165 +162 +161 +161 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +140 +139 +133 +133 +133 +133 +133 +129 +130 +126 +126 +126 +119 +119 +116 +116 +113 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +66 +65 +64 +59 +59 +54 +54 +54 +50 +50 +47 +47 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +14 +13 +13 +14 +13 +13 +13 +13 +13 +14 +14 +13 +13 +14 +13 +13 +15 +15 +16 +17 +17 +19 +19 +22 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +50 +50 +54 +54 +59 +59 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +101 +100 +106 +106 +110 +110 +109 +116 +116 +119 +119 +120 +126 +125 +125 +125 +125 +129 +129 +134 +133 +133 +139 +139 +143 +143 +144 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +172 +173 +175 +175 +179 +179 +179 +182 +183 +185 +185 +188 +189 +188 +190 +191 +194 +194 +194 +196 +197 +198 +198 +199 +200 +200 +200 +200 +200 +202 +203 +204 +204 +205 +204 +204 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +205 +204 +205 +204 +204 +202 +202 +200 +200 +200 +201 +200 +198 +198 +197 +197 +197 +194 +194 +190 +191 +190 +188 +189 +185 +184 +184 +182 +183 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +147 +147 +147 +143 +144 +139 +139 +139 +133 +133 +129 +129 +130 +126 +126 +119 +119 +115 +115 +115 +110 +110 +106 +105 +106 +100 +99 +100 +100 +100 +96 +96 +90 +90 +90 +86 +85 +82 +82 +77 +76 +76 +72 +73 +68 +68 +68 +64 +64 +59 +59 +58 +55 +55 +51 +50 +50 +47 +47 +43 +43 +43 +40 +41 +37 +37 +34 +33 +33 +31 +31 +27 +27 +27 +25 +24 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +14 +14 +13 +14 +13 +14 +13 +13 +14 +14 +14 +13 +13 +14 +13 +16 +15 +15 +17 +17 +19 +19 +19 +21 +25 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +40 +43 +42 +47 +47 +47 +51 +50 +54 +54 +55 +58 +59 +64 +65 +65 +68 +68 +72 +72 +72 +76 +77 +82 +82 +84 +86 +85 +90 +90 +96 +96 +96 +100 +100 +106 +105 +106 +110 +109 +110 +110 +109 +115 +115 +120 +119 +120 +125 +125 +129 +129 +132 +133 +133 +140 +140 +143 +143 +143 +148 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +164 +169 +169 +169 +173 +173 +175 +175 +177 +179 +178 +182 +182 +185 +184 +185 +188 +189 +190 +191 +191 +194 +194 +196 +197 +196 +198 +199 +201 +200 +201 +200 +201 +202 +202 +204 +204 +205 +204 +204 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +207 +206 +206 +206 +207 +205 +205 +204 +204 +205 +202 +202 +201 +200 +200 +200 +200 +198 +198 +199 +197 +197 +194 +195 +194 +190 +190 +189 +188 +189 +185 +185 +183 +183 +183 +178 +179 +175 +175 +172 +172 +173 +169 +169 +165 +165 +165 +161 +161 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +141 +139 +139 +133 +133 +129 +129 +130 +126 +125 +120 +120 +119 +116 +115 +115 +115 +115 +109 +110 +106 +106 +106 +100 +100 +96 +96 +91 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +69 +68 +64 +64 +65 +58 +58 +54 +54 +54 +51 +51 +47 +46 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +12 +13 +13 +13 +14 +13 +13 +14 +13 +14 +13 +13 +13 +14 +14 +13 +13 +13 +13 +14 +14 +13 +14 +14 +14 +14 +13 +14 +13 +12 +15 +16 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +28 +31 +31 +33 +33 +37 +37 +37 +40 +41 +43 +43 +43 +46 +47 +50 +51 +51 +54 +55 +58 +59 +58 +65 +64 +68 +68 +68 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +96 +96 +96 +100 +100 +106 +106 +106 +110 +109 +115 +115 +119 +119 +120 +125 +125 +129 +129 +130 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +178 +179 +183 +182 +182 +185 +185 +189 +189 +188 +191 +191 +194 +194 +195 +197 +196 +199 +199 +200 +200 +201 +201 +200 +203 +203 +202 +205 +204 +204 +204 +204 +206 +206 +207 +207 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +205 +204 +204 +204 +204 +202 +203 +202 +200 +201 +200 +200 +200 +198 +198 +196 +196 +197 +194 +195 +190 +191 +190 +189 +188 +184 +185 +182 +183 +182 +179 +179 +175 +174 +175 +173 +173 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +158 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +125 +126 +125 +126 +125 +120 +120 +115 +115 +116 +109 +110 +106 +106 +101 +99 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +68 +68 +64 +65 +65 +59 +58 +55 +54 +50 +51 +51 +46 +47 +43 +43 +43 +41 +40 +37 +37 +37 +33 +33 +31 +30 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +14 +13 +13 +14 +14 +13 +14 +14 +13 +13 +14 +13 +14 +14 +14 +14 +13 +13 +14 +14 +14 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +22 +25 +25 +27 +27 +32 +31 +31 +32 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +51 +54 +55 +58 +59 +60 +65 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +86 +86 +86 +90 +90 +96 +96 +96 +100 +99 +106 +106 +109 +110 +110 +115 +116 +120 +119 +119 +125 +125 +130 +130 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +148 +151 +151 +157 +157 +161 +160 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +178 +183 +183 +183 +185 +185 +188 +188 +189 +190 +191 +195 +195 +197 +197 +197 +198 +198 +200 +200 +200 +200 +200 +203 +203 +203 +204 +204 +205 +204 +204 +206 +206 +206 +206 +207 +206 +206 +206 +207 +207 +206 +206 +206 +206 +204 +205 +204 +205 +205 +202 +202 +202 +200 +200 +200 +200 +200 +198 +199 +197 +196 +197 +195 +195 +191 +191 +188 +189 +188 +185 +185 +183 +183 +183 +179 +179 +179 +178 +178 +175 +175 +173 +173 +173 +169 +169 +166 +165 +165 +161 +161 +157 +157 +152 +151 +151 +148 +147 +143 +143 +143 +139 +139 +139 +139 +139 +133 +133 +129 +130 +129 +125 +126 +119 +119 +116 +116 +116 +110 +109 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +69 +68 +65 +64 +64 +59 +59 +55 +54 +55 +51 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +26 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +13 +13 +13 +13 +13 +14 +14 +13 +13 +14 +14 +13 +14 +14 +13 +14 +13 +14 +13 +13 +13 +13 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +26 +27 +27 +31 +31 +33 +33 +33 +37 +37 +40 +41 +41 +43 +43 +47 +46 +51 +51 +50 +54 +54 +58 +58 +59 +64 +65 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +95 +100 +100 +106 +106 +106 +110 +109 +115 +116 +116 +120 +120 +125 +125 +126 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +174 +175 +175 +179 +179 +184 +183 +183 +185 +185 +189 +189 +188 +190 +190 +195 +194 +195 +197 +197 +199 +198 +198 +200 +200 +200 +200 +201 +203 +203 +204 +204 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +204 +205 +204 +204 +205 +202 +202 +200 +200 +201 +201 +201 +199 +199 +196 +197 +196 +194 +194 +195 +194 +195 +190 +190 +188 +189 +188 +185 +185 +183 +183 +180 +179 +179 +175 +175 +173 +173 +173 +169 +169 +169 +169 +169 +165 +165 +164 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +145 +143 +143 +139 +139 +133 +134 +133 +129 +129 +126 +126 +125 +119 +119 +115 +115 +115 +110 +110 +106 +105 +106 +100 +100 +96 +96 +90 +89 +90 +86 +86 +83 +82 +82 +76 +76 +72 +72 +73 +69 +69 +64 +65 +65 +59 +58 +54 +54 +55 +50 +50 +47 +46 +43 +42 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +12 +13 +13 +13 +14 +14 +13 +13 +14 +14 +14 +14 +14 +14 +14 +13 +13 +14 +13 +13 +14 +14 +13 +13 +13 +13 +14 +13 +14 +13 +13 +12 +15 +15 +15 +15 +15 +17 +17 +17 +19 +19 +21 +21 +22 +25 +25 +27 +27 +31 +31 +30 +33 +33 +37 +37 +37 +41 +41 +41 +41 +41 +43 +43 +47 +47 +47 +51 +50 +54 +55 +58 +59 +58 +64 +64 +68 +68 +68 +72 +72 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +109 +110 +110 +116 +115 +119 +119 +119 +125 +126 +130 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +161 +161 +161 +165 +165 +168 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +183 +185 +185 +189 +189 +189 +190 +191 +194 +194 +197 +196 +197 +198 +198 +201 +200 +201 +200 +200 +202 +203 +202 +205 +205 +204 +205 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +207 +206 +204 +204 +204 +204 +204 +203 +202 +202 +200 +200 +200 +200 +200 +198 +199 +197 +196 +195 +195 +194 +191 +190 +188 +189 +189 +184 +184 +183 +182 +182 +178 +179 +179 +178 +179 +175 +175 +173 +172 +173 +169 +169 +164 +165 +162 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +140 +133 +134 +133 +129 +129 +125 +126 +120 +119 +115 +115 +109 +110 +109 +106 +106 +100 +100 +99 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +73 +72 +68 +68 +64 +64 +59 +58 +59 +55 +55 +50 +50 +51 +46 +46 +43 +43 +43 +41 +41 +37 +37 +37 +33 +32 +30 +31 +31 +27 +27 +24 +24 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +16 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +14 +14 +14 +14 +13 +14 +13 +13 +13 +14 +13 +14 +14 +13 +13 +14 +14 +13 +13 +13 +14 +14 +14 +14 +13 +13 +13 +13 +15 +15 +17 +17 +19 +18 +19 +21 +21 +25 +25 +25 +27 +27 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +40 +42 +43 +43 +46 +47 +51 +51 +51 +54 +54 +59 +59 +59 +64 +64 +68 +68 +68 +72 +72 +76 +76 +77 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +109 +109 +115 +115 +119 +120 +120 +125 +126 +129 +129 +129 +133 +134 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +164 +165 +169 +169 +169 +172 +173 +175 +175 +175 +179 +178 +183 +182 +185 +184 +184 +189 +189 +190 +190 +190 +195 +194 +196 +197 +197 +199 +199 +200 +200 +200 +200 +200 +203 +202 +203 +204 +204 +204 +204 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +205 +204 +204 +205 +204 +202 +202 +201 +200 +201 +200 +200 +199 +198 +198 +196 +196 +194 +194 +194 +190 +191 +190 +190 +190 +189 +189 +185 +184 +185 +183 +183 +179 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +119 +119 +115 +116 +109 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +72 +73 +68 +68 +68 +64 +65 +58 +58 +58 +54 +55 +50 +50 +50 +47 +46 +43 +42 +43 +40 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +13 +14 +14 +14 +13 +13 +14 +13 +14 +13 +14 +13 +14 +14 +13 +13 +14 +13 +14 +14 +14 +14 +14 +13 +13 +15 +15 +17 +17 +19 +19 +19 +21 +21 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +32 +32 +35 +37 +37 +41 +41 +43 +43 +43 +46 +47 +51 +51 +50 +54 +54 +59 +58 +59 +64 +64 +68 +68 +69 +72 +72 +76 +76 +81 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +116 +119 +120 +120 +125 +126 +129 +129 +133 +133 +134 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +180 +179 +178 +182 +183 +184 +185 +184 +189 +189 +191 +190 +191 +194 +194 +197 +196 +197 +199 +198 +200 +200 +201 +200 +200 +202 +202 +204 +204 +205 +204 +204 +206 +207 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +205 +204 +205 +205 +204 +202 +202 +202 +200 +201 +200 +201 +200 +198 +198 +199 +198 +198 +196 +196 +194 +195 +195 +190 +191 +188 +189 +186 +185 +185 +183 +183 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +126 +125 +119 +119 +116 +116 +116 +110 +109 +106 +106 +106 +100 +100 +96 +96 +91 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +59 +58 +54 +54 +54 +51 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +20 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +14 +13 +13 +14 +14 +14 +13 +13 +13 +13 +14 +13 +13 +14 +14 +13 +14 +13 +12 +15 +15 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +26 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +46 +47 +50 +51 +54 +54 +55 +58 +59 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +95 +96 +96 +100 +100 +105 +106 +106 +109 +110 +116 +115 +119 +119 +119 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +168 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +183 +184 +185 +189 +189 +188 +190 +191 +194 +194 +195 +197 +197 +199 +199 +200 +200 +200 +200 +200 +200 +200 +200 +202 +202 +205 +204 +204 +204 +204 +207 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +204 +204 +204 +204 +204 +202 +202 +200 +200 +201 +200 +200 +198 +198 +197 +197 +197 +194 +194 +190 +191 +190 +188 +189 +184 +185 +184 +183 +183 +179 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +126 +120 +119 +115 +115 +110 +110 +109 +105 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +65 +65 +59 +58 +58 +54 +54 +51 +51 +51 +47 +47 +42 +42 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +14 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +14 +13 +13 +13 +13 +13 +14 +14 +14 +14 +13 +14 +13 +13 +14 +14 +14 +14 +14 +13 +14 +14 +14 +13 +13 +14 +13 +12 +15 +15 +17 +17 +19 +18 +19 +21 +21 +25 +25 +26 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +46 +46 +47 +51 +51 +54 +55 +55 +59 +58 +64 +65 +65 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +95 +96 +95 +100 +100 +106 +106 +106 +110 +110 +116 +116 +115 +120 +119 +125 +125 +125 +129 +129 +133 +133 +133 +139 +140 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +178 +179 +182 +182 +184 +185 +189 +188 +188 +190 +191 +194 +194 +194 +196 +196 +197 +196 +196 +198 +198 +200 +200 +201 +200 +200 +202 +202 +203 +205 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +204 +205 +204 +205 +202 +203 +200 +200 +200 +200 +200 +198 +198 +196 +197 +196 +194 +195 +190 +190 +191 +188 +188 +185 +185 +185 +183 +183 +179 +179 +175 +175 +175 +173 +172 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +151 +151 +147 +147 +147 +143 +143 +139 +139 +134 +133 +133 +129 +129 +125 +125 +125 +119 +120 +115 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +87 +83 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +65 +64 +58 +58 +54 +55 +54 +50 +50 +47 +46 +47 +43 +43 +41 +41 +37 +37 +36 +33 +33 +31 +31 +31 +27 +27 +27 +27 +27 +25 +25 +21 +21 +21 +19 +20 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +14 +13 +14 +13 +14 +14 +13 +14 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +36 +37 +40 +41 +43 +43 +43 +47 +47 +51 +50 +51 +54 +54 +58 +58 +59 +64 +64 +69 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +99 +100 +100 +106 +106 +110 +109 +110 +116 +116 +119 +120 +126 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +162 +165 +165 +169 +168 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +183 +183 +183 +185 +184 +188 +189 +189 +190 +190 +194 +194 +195 +196 +197 +198 +198 +200 +201 +200 +201 +200 +203 +203 +202 +205 +204 +205 +204 +205 +204 +204 +206 +206 +206 +206 +207 +206 +206 +207 +206 +207 +206 +207 +206 +206 +206 +205 +204 +204 +205 +204 +202 +202 +201 +200 +200 +200 +201 +198 +198 +198 +196 +197 +194 +194 +190 +191 +191 +188 +188 +184 +185 +184 +183 +183 +179 +178 +179 +175 +174 +173 +173 +172 +169 +170 +165 +165 +165 +161 +161 +157 +157 +152 +151 +151 +147 +147 +143 +143 +144 +139 +139 +133 +133 +133 +130 +130 +125 +125 +125 +119 +120 +116 +116 +115 +110 +109 +106 +106 +100 +100 +100 +96 +96 +90 +90 +91 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +65 +58 +58 +54 +54 +51 +51 +51 +47 +47 +43 +43 +42 +41 +41 +40 +41 +41 +37 +36 +33 +33 +33 +31 +31 +27 +27 +26 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +14 +14 +13 +14 +14 +13 +14 +13 +14 +14 +14 +13 +13 +14 +14 +14 +13 +14 +14 +14 +14 +13 +13 +13 +13 +12 +15 +14 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +46 +47 +50 +51 +54 +55 +55 +59 +58 +64 +64 +65 +68 +68 +72 +72 +72 +76 +77 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +99 +106 +106 +106 +110 +109 +116 +115 +115 +119 +119 +119 +120 +120 +125 +125 +129 +129 +130 +133 +133 +139 +139 +140 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +164 +165 +164 +165 +165 +169 +169 +173 +172 +173 +175 +175 +179 +178 +180 +182 +182 +185 +184 +188 +188 +188 +190 +190 +194 +195 +195 +196 +196 +197 +196 +196 +198 +198 +200 +200 +201 +201 +200 +202 +202 +204 +205 +205 +204 +204 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +207 +205 +204 +204 +204 +205 +202 +202 +200 +200 +201 +200 +200 +198 +198 +198 +197 +196 +194 +195 +194 +190 +190 +189 +188 +188 +185 +184 +182 +182 +182 +178 +179 +175 +175 +173 +173 +172 +169 +168 +165 +165 +164 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +126 +125 +125 +120 +119 +115 +116 +116 +110 +110 +106 +106 +106 +100 +100 +95 +96 +96 +90 +90 +87 +86 +87 +82 +82 +76 +76 +73 +72 +73 +68 +69 +64 +65 +64 +58 +58 +54 +54 +54 +51 +50 +46 +47 +47 +43 +43 +41 +42 +41 +37 +37 +33 +33 +31 +30 +31 +27 +27 +25 +25 +25 +21 +21 +20 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +16 +13 +13 +12 +13 +14 +13 +14 +14 +14 +13 +13 +13 +13 +14 +13 +13 +14 +14 +14 +14 +14 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +41 +41 +41 +42 +43 +47 +47 +47 +51 +50 +55 +55 +55 +58 +58 +64 +65 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +87 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +105 +106 +110 +109 +115 +116 +115 +119 +120 +125 +125 +126 +129 +129 +134 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +170 +173 +173 +174 +175 +178 +178 +179 +183 +183 +184 +185 +185 +189 +189 +189 +189 +189 +191 +191 +194 +194 +195 +197 +196 +199 +199 +199 +200 +201 +201 +200 +202 +202 +202 +205 +204 +204 +204 +204 +207 +206 +206 +206 +206 +206 +207 +206 +206 +207 +207 +206 +206 +206 +205 +204 +204 +204 +204 +202 +203 +202 +200 +201 +200 +200 +201 +199 +198 +197 +196 +196 +195 +195 +190 +191 +190 +188 +189 +185 +185 +182 +182 +182 +179 +178 +174 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +152 +152 +151 +152 +147 +147 +143 +143 +140 +139 +139 +133 +133 +129 +129 +129 +125 +125 +120 +120 +120 +116 +115 +109 +110 +110 +106 +105 +100 +100 +101 +95 +96 +90 +90 +86 +86 +86 +82 +82 +76 +77 +76 +72 +72 +72 +73 +72 +68 +68 +64 +64 +65 +58 +58 +55 +54 +55 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +33 +33 +33 +31 +31 +27 +27 +27 +26 +25 +21 +20 +20 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +14 +13 +13 +14 +14 +14 +13 +13 +14 +13 +14 +13 +13 +13 +14 +13 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +36 +41 +41 +41 +43 +43 +47 +47 +47 +51 +51 +55 +55 +55 +58 +58 +64 +64 +69 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +107 +110 +110 +115 +115 +119 +119 +120 +125 +125 +129 +129 +129 +133 +133 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +153 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +175 +175 +175 +179 +178 +182 +183 +182 +184 +185 +188 +188 +190 +190 +191 +194 +194 +196 +196 +197 +198 +198 +201 +200 +200 +200 +200 +202 +202 +202 +204 +205 +204 +204 +205 +206 +207 +206 +206 +206 +207 +206 +206 +206 +207 +207 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +202 +200 +200 +200 +200 +201 +198 +198 +196 +196 +195 +195 +194 +191 +190 +188 +188 +188 +185 +185 +183 +183 +183 +179 +179 +175 +175 +174 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +130 +129 +129 +126 +125 +119 +120 +120 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +71 +69 +68 +65 +58 +58 +58 +58 +54 +55 +51 +51 +51 +47 +47 +47 +46 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +13 +13 +14 +13 +14 +13 +14 +14 +13 +14 +14 +14 +14 +14 +13 +14 +13 +14 +13 +13 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +40 +41 +41 +43 +42 +47 +47 +51 +51 +51 +55 +54 +58 +58 +58 +64 +65 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +85 +86 +87 +90 +89 +96 +96 +100 +100 +100 +106 +106 +110 +110 +109 +115 +116 +116 +116 +115 +120 +120 +125 +125 +126 +129 +129 +133 +133 +132 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +178 +179 +179 +183 +183 +184 +184 +185 +189 +189 +191 +190 +190 +195 +194 +197 +196 +196 +198 +199 +200 +200 +201 +201 +201 +203 +202 +204 +204 +204 +204 +204 +206 +206 +207 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +204 +204 +205 +204 +204 +202 +202 +200 +201 +200 +200 +200 +198 +198 +198 +197 +196 +194 +195 +194 +190 +190 +189 +188 +188 +185 +185 +183 +182 +183 +179 +179 +175 +175 +173 +173 +173 +169 +169 +164 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +141 +133 +134 +129 +129 +125 +125 +125 +119 +120 +116 +116 +115 +109 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +84 +82 +82 +76 +77 +72 +72 +72 +68 +68 +64 +64 +64 +58 +58 +58 +58 +58 +55 +54 +50 +51 +51 +47 +46 +43 +43 +42 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +14 +13 +13 +13 +14 +13 +13 +14 +14 +13 +13 +14 +13 +14 +13 +14 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +41 +41 +41 +42 +43 +47 +47 +46 +50 +50 +54 +55 +55 +59 +58 +64 +64 +64 +69 +68 +72 +72 +73 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +115 +120 +120 +125 +125 +128 +129 +129 +134 +133 +140 +139 +139 +143 +143 +147 +147 +147 +151 +151 +151 +151 +151 +157 +157 +161 +161 +161 +165 +164 +169 +169 +171 +173 +172 +175 +174 +179 +178 +178 +183 +182 +185 +185 +185 +189 +188 +191 +191 +191 +195 +195 +196 +196 +197 +199 +199 +200 +200 +201 +200 +200 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +205 +204 +205 +204 +204 +202 +202 +200 +201 +200 +200 +200 +198 +198 +198 +196 +196 +194 +194 +194 +190 +191 +188 +189 +189 +185 +184 +182 +182 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +133 +133 +133 +129 +130 +125 +125 +125 +119 +119 +116 +116 +115 +109 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +68 +68 +68 +65 +64 +59 +58 +58 +54 +54 +51 +51 +47 +47 +46 +43 +43 +41 +41 +40 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +13 +14 +13 +14 +14 +14 +14 +13 +13 +14 +14 +14 +13 +14 +14 +13 +14 +13 +14 +14 +14 +14 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +46 +47 +47 +51 +50 +54 +54 +54 +58 +58 +64 +64 +66 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +89 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +110 +112 +116 +115 +119 +119 +125 +125 +125 +129 +129 +133 +133 +133 +139 +139 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +159 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +174 +179 +179 +183 +183 +182 +185 +185 +189 +188 +189 +191 +191 +194 +194 +196 +197 +197 +198 +198 +200 +200 +200 +200 +200 +202 +203 +203 +204 +204 +204 +204 +204 +206 +207 +206 +206 +207 +206 +207 +206 +207 +206 +206 +206 +206 +206 +204 +204 +204 +204 +205 +202 +202 +202 +200 +200 +201 +200 +200 +198 +198 +196 +196 +197 +194 +194 +190 +190 +189 +188 +189 +184 +184 +182 +182 +183 +178 +179 +179 +179 +179 +175 +175 +173 +172 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +139 +139 +139 +133 +133 +129 +129 +130 +125 +125 +119 +119 +118 +115 +115 +110 +110 +106 +105 +106 +100 +100 +96 +95 +96 +90 +90 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +69 +68 +68 +65 +64 +58 +58 +58 +54 +55 +50 +51 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +32 +31 +31 +26 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +13 +13 +14 +14 +14 +13 +13 +14 +13 +13 +14 +13 +13 +13 +14 +14 +14 +13 +13 +14 +14 +13 +13 +12 +13 +15 +15 +17 +17 +20 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +36 +37 +37 +41 +41 +43 +42 +43 +46 +47 +51 +51 +54 +54 +55 +59 +59 +64 +64 +64 +68 +69 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +92 +96 +96 +100 +100 +106 +106 +106 +110 +109 +116 +115 +116 +119 +120 +119 +119 +119 +125 +125 +130 +129 +129 +133 +133 +139 +139 +141 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +172 +175 +174 +175 +179 +179 +182 +182 +184 +184 +184 +188 +188 +191 +191 +191 +194 +194 +196 +197 +196 +198 +198 +201 +200 +200 +200 +200 +202 +202 +202 +204 +205 +205 +205 +206 +207 +207 +205 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +205 +204 +204 +204 +204 +202 +202 +202 +201 +201 +201 +200 +199 +198 +199 +196 +196 +194 +195 +195 +190 +191 +189 +189 +189 +185 +185 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +168 +165 +164 +165 +161 +161 +157 +157 +157 +151 +151 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +134 +129 +129 +126 +125 +120 +120 +119 +115 +115 +110 +109 +110 +106 +106 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +83 +83 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +58 +58 +55 +55 +55 +50 +50 +46 +47 +47 +43 +43 +41 +40 +38 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +13 +14 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +14 +13 +14 +13 +13 +14 +14 +14 +13 +14 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +51 +50 +54 +54 +58 +59 +59 +64 +64 +68 +68 +68 +72 +72 +76 +76 +77 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +106 +106 +106 +110 +110 +115 +116 +115 +119 +119 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +175 +175 +175 +179 +178 +183 +182 +183 +184 +185 +189 +188 +188 +190 +190 +195 +194 +195 +196 +196 +198 +198 +198 +200 +200 +200 +200 +203 +202 +203 +204 +205 +204 +204 +204 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +207 +204 +205 +204 +204 +203 +202 +202 +201 +200 +201 +200 +200 +198 +198 +197 +196 +196 +194 +195 +191 +191 +191 +189 +189 +185 +185 +185 +182 +183 +179 +179 +174 +174 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +140 +139 +134 +133 +129 +129 +130 +125 +125 +119 +119 +120 +116 +115 +115 +116 +116 +109 +110 +106 +106 +106 +100 +100 +96 +96 +97 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +58 +58 +55 +54 +54 +50 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +16 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +14 +13 +13 +14 +14 +13 +13 +13 +14 +14 +13 +13 +13 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +28 +31 +31 +33 +33 +37 +37 +37 +41 +40 +43 +43 +43 +46 +47 +46 +47 +47 +51 +50 +54 +54 +54 +58 +58 +64 +65 +66 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +110 +112 +115 +116 +119 +119 +125 +125 +125 +129 +129 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +152 +157 +157 +161 +161 +164 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +179 +183 +183 +185 +185 +185 +189 +189 +191 +190 +191 +194 +195 +197 +197 +199 +198 +199 +201 +200 +200 +200 +200 +202 +202 +205 +205 +204 +204 +204 +207 +206 +206 +206 +207 +206 +206 +207 +206 +206 +207 +206 +207 +206 +206 +204 +204 +205 +204 +204 +202 +202 +201 +200 +200 +201 +200 +198 +198 +199 +196 +197 +194 +194 +195 +191 +191 +188 +188 +185 +185 +184 +182 +183 +179 +178 +179 +175 +175 +175 +175 +175 +172 +173 +169 +169 +166 +166 +165 +161 +161 +159 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +133 +134 +133 +129 +129 +125 +125 +126 +119 +119 +115 +115 +111 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +68 +68 +65 +64 +62 +58 +58 +54 +55 +51 +51 +51 +46 +47 +42 +43 +42 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +26 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +13 +13 +14 +13 +13 +12 +15 +15 +17 +17 +17 +20 +19 +21 +21 +26 +25 +25 +27 +27 +31 +31 +31 +33 +33 +33 +33 +33 +37 +36 +41 +41 +41 +43 +43 +46 +47 +48 +50 +51 +55 +54 +58 +58 +58 +64 +64 +68 +68 +68 +72 +72 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +105 +110 +110 +115 +115 +115 +120 +119 +125 +125 +126 +129 +129 +133 +133 +134 +140 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +174 +175 +178 +179 +179 +183 +182 +185 +184 +189 +188 +189 +190 +190 +194 +194 +195 +196 +197 +199 +198 +198 +200 +200 +200 +200 +200 +202 +202 +204 +204 +205 +204 +204 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +204 +204 +204 +204 +204 +202 +202 +200 +200 +201 +200 +201 +198 +198 +196 +196 +197 +195 +194 +190 +191 +190 +189 +188 +185 +185 +184 +182 +183 +179 +179 +178 +175 +175 +173 +172 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +126 +125 +125 +119 +119 +116 +116 +115 +110 +109 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +72 +73 +68 +68 +68 +65 +64 +65 +64 +65 +58 +59 +58 +54 +54 +50 +51 +51 +47 +46 +43 +43 +43 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +14 +13 +14 +13 +13 +14 +14 +13 +13 +14 +14 +13 +13 +14 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +35 +37 +37 +41 +41 +43 +43 +43 +46 +47 +51 +51 +50 +55 +55 +55 +55 +54 +58 +58 +65 +65 +64 +69 +68 +72 +72 +75 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +116 +116 +119 +119 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +183 +185 +184 +189 +188 +189 +190 +190 +194 +194 +195 +196 +196 +198 +199 +199 +200 +201 +200 +200 +203 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +207 +207 +206 +207 +206 +206 +206 +207 +207 +204 +205 +205 +204 +202 +202 +203 +201 +200 +200 +200 +200 +198 +198 +196 +196 +196 +195 +195 +190 +190 +190 +188 +188 +185 +184 +184 +182 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +145 +143 +143 +139 +139 +134 +134 +133 +129 +129 +125 +125 +125 +119 +120 +115 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +58 +58 +54 +55 +55 +50 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +20 +17 +17 +15 +15 +16 +15 +15 +13 +13 +12 +12 +13 +13 +14 +14 +14 +14 +13 +13 +13 +14 +14 +13 +13 +13 +13 +15 +14 +13 +13 +13 +14 +14 +13 +13 +13 +13 +13 +13 +13 +13 +15 +15 +15 +15 +15 +17 +17 +17 +19 +19 +21 +21 +23 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +40 +41 +41 +41 +41 +43 +43 +47 +47 +47 +51 +50 +54 +54 +57 +59 +59 +65 +65 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +95 +96 +96 +100 +100 +106 +105 +109 +110 +110 +116 +116 +119 +119 +119 +125 +126 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +160 +161 +161 +165 +165 +169 +169 +169 +173 +172 +175 +175 +174 +179 +178 +183 +182 +182 +184 +184 +188 +188 +189 +190 +191 +195 +194 +197 +196 +196 +199 +199 +199 +198 +198 +200 +200 +200 +200 +200 +202 +202 +204 +205 +205 +204 +204 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +200 +200 +200 +200 +200 +199 +199 +198 +196 +197 +194 +194 +190 +190 +190 +188 +189 +184 +184 +185 +182 +183 +182 +182 +183 +178 +178 +175 +175 +175 +173 +173 +169 +169 +167 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +130 +125 +125 +119 +120 +115 +116 +115 +110 +110 +106 +105 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +75 +76 +72 +72 +68 +68 +65 +64 +64 +58 +58 +54 +54 +54 +50 +51 +46 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +34 +31 +31 +27 +27 +26 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +14 +13 +13 +14 +13 +14 +14 +13 +13 +13 +14 +14 +14 +14 +13 +13 +13 +14 +14 +14 +14 +13 +13 +14 +14 +13 +13 +12 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +42 +47 +46 +51 +50 +50 +54 +54 +59 +59 +59 +64 +64 +68 +68 +68 +72 +72 +76 +76 +77 +82 +82 +86 +86 +90 +90 +90 +96 +95 +100 +100 +100 +105 +106 +110 +110 +110 +116 +116 +119 +119 +119 +125 +126 +129 +129 +129 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +178 +179 +182 +183 +184 +185 +185 +188 +188 +191 +190 +190 +195 +194 +196 +197 +196 +198 +198 +201 +200 +200 +200 +200 +202 +202 +202 +204 +204 +205 +204 +207 +206 +207 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +205 +204 +205 +204 +204 +203 +203 +201 +200 +200 +200 +200 +198 +198 +196 +196 +196 +194 +194 +195 +194 +194 +190 +190 +188 +188 +189 +185 +185 +182 +183 +180 +178 +179 +175 +175 +173 +173 +173 +169 +168 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +133 +133 +133 +129 +129 +126 +125 +125 +119 +119 +116 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +83 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +58 +58 +54 +54 +54 +50 +50 +47 +46 +47 +43 +43 +41 +41 +38 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +14 +14 +14 +13 +13 +13 +13 +14 +14 +13 +14 +13 +13 +14 +13 +13 +13 +14 +13 +13 +14 +13 +13 +15 +15 +15 +17 +17 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +30 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +46 +50 +51 +51 +54 +55 +58 +58 +59 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +109 +110 +116 +115 +120 +119 +125 +125 +129 +129 +133 +134 +134 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +168 +173 +173 +173 +175 +175 +179 +179 +178 +183 +182 +185 +185 +185 +189 +189 +190 +190 +191 +195 +194 +197 +196 +197 +198 +198 +200 +200 +201 +201 +201 +202 +202 +204 +204 +205 +204 +205 +206 +206 +206 +206 +206 +207 +207 +207 +206 +206 +206 +206 +207 +206 +207 +204 +204 +204 +204 +204 +202 +202 +201 +200 +200 +200 +200 +200 +200 +200 +198 +198 +196 +196 +196 +194 +194 +190 +190 +189 +188 +189 +184 +184 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +148 +147 +147 +144 +143 +139 +139 +139 +133 +133 +130 +130 +129 +125 +125 +119 +119 +119 +116 +115 +110 +110 +110 +106 +106 +100 +100 +96 +96 +96 +90 +90 +87 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +65 +64 +59 +59 +59 +54 +54 +50 +51 +47 +47 +46 +43 +43 +41 +41 +41 +37 +37 +32 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +14 +14 +14 +13 +13 +14 +14 +13 +14 +14 +14 +14 +13 +13 +13 +14 +14 +13 +13 +13 +13 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +46 +47 +47 +51 +50 +55 +55 +58 +58 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +110 +110 +110 +116 +115 +119 +119 +120 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +148 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +168 +173 +173 +175 +175 +175 +179 +178 +182 +182 +183 +185 +185 +188 +189 +189 +190 +191 +195 +194 +197 +196 +197 +198 +198 +200 +201 +200 +200 +200 +200 +200 +200 +202 +202 +205 +204 +204 +204 +205 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +204 +205 +204 +204 +204 +204 +204 +202 +202 +202 +200 +201 +200 +200 +199 +199 +199 +196 +196 +194 +194 +194 +190 +191 +189 +189 +189 +184 +185 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +168 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +130 +125 +126 +120 +120 +115 +115 +116 +110 +109 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +72 +72 +69 +68 +65 +64 +64 +59 +59 +55 +54 +54 +50 +50 +46 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +21 +21 +21 +19 +19 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +14 +12 +13 +14 +13 +14 +13 +13 +14 +14 +14 +14 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +14 +13 +13 +14 +13 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +46 +51 +51 +54 +54 +54 +58 +58 +64 +65 +64 +69 +68 +72 +72 +72 +77 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +116 +115 +119 +119 +125 +125 +125 +129 +129 +133 +133 +140 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +174 +175 +178 +178 +182 +182 +182 +184 +184 +189 +189 +189 +191 +191 +190 +190 +190 +194 +195 +197 +197 +197 +198 +199 +200 +200 +200 +200 +201 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +205 +204 +205 +204 +204 +202 +202 +202 +201 +201 +200 +200 +200 +198 +198 +196 +196 +196 +194 +194 +190 +191 +191 +188 +189 +184 +185 +182 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +140 +139 +139 +134 +133 +129 +130 +129 +126 +125 +120 +119 +120 +116 +115 +109 +110 +110 +106 +106 +99 +100 +100 +96 +95 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +59 +58 +58 +54 +54 +50 +50 +50 +46 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +26 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +18 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +14 +13 +13 +14 +13 +13 +14 +14 +14 +13 +14 +13 +14 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +50 +51 +55 +55 +59 +58 +58 +64 +64 +68 +68 +73 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +110 +110 +116 +115 +119 +119 +126 +126 +125 +130 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +173 +173 +173 +174 +175 +179 +178 +178 +183 +182 +183 +183 +183 +184 +184 +189 +189 +189 +190 +191 +194 +194 +195 +196 +197 +198 +199 +200 +200 +201 +200 +200 +203 +202 +202 +204 +204 +204 +204 +205 +204 +204 +206 +206 +207 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +204 +205 +205 +204 +202 +202 +200 +200 +201 +200 +200 +198 +198 +199 +196 +196 +195 +194 +190 +190 +190 +188 +189 +184 +185 +184 +183 +183 +179 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +126 +126 +119 +119 +116 +116 +116 +110 +110 +106 +106 +100 +101 +101 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +65 +64 +65 +58 +58 +55 +54 +51 +51 +51 +46 +47 +43 +43 +43 +41 +41 +41 +41 +41 +37 +37 +32 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +19 +19 +19 +17 +17 +16 +15 +15 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +14 +13 +14 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +14 +13 +14 +14 +14 +13 +13 +12 +15 +15 +17 +17 +18 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +50 +54 +55 +54 +58 +59 +65 +64 +64 +68 +69 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +91 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +115 +116 +119 +119 +125 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +144 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +169 +169 +168 +173 +173 +175 +175 +175 +179 +179 +183 +182 +183 +185 +184 +189 +189 +191 +190 +191 +194 +194 +196 +196 +197 +199 +198 +199 +198 +198 +201 +200 +201 +201 +201 +202 +202 +204 +205 +204 +205 +205 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +205 +204 +204 +205 +202 +203 +200 +200 +201 +200 +200 +199 +198 +196 +196 +197 +194 +195 +191 +190 +190 +189 +189 +185 +184 +185 +183 +183 +179 +178 +179 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +152 +151 +151 +147 +147 +143 +143 +143 +139 +139 +134 +134 +134 +129 +129 +125 +126 +120 +119 +120 +116 +115 +110 +110 +109 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +83 +76 +76 +72 +72 +68 +68 +68 +65 +64 +59 +59 +59 +54 +54 +50 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +26 +27 +27 +25 +25 +21 +21 +21 +19 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +14 +14 +14 +14 +14 +14 +14 +14 +13 +13 +13 +14 +13 +13 +14 +13 +13 +14 +13 +13 +14 +14 +13 +13 +13 +15 +15 +17 +17 +17 +19 +18 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +32 +33 +33 +37 +36 +41 +41 +42 +43 +43 +47 +47 +50 +51 +51 +55 +55 +59 +58 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +77 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +110 +110 +115 +115 +119 +119 +120 +125 +125 +129 +129 +130 +133 +133 +139 +139 +144 +143 +143 +147 +147 +151 +151 +150 +157 +157 +157 +157 +157 +161 +161 +165 +165 +165 +169 +168 +173 +173 +173 +175 +175 +179 +179 +183 +183 +183 +184 +185 +188 +188 +188 +191 +191 +191 +191 +190 +194 +194 +197 +196 +197 +198 +199 +200 +200 +200 +201 +201 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +207 +206 +206 +204 +205 +204 +204 +204 +202 +202 +200 +201 +200 +200 +200 +198 +199 +198 +196 +196 +194 +194 +195 +191 +190 +188 +188 +188 +184 +185 +183 +183 +179 +178 +178 +174 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +150 +151 +147 +147 +148 +143 +143 +139 +139 +134 +134 +133 +129 +129 +125 +125 +125 +119 +120 +115 +116 +115 +110 +110 +105 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +68 +68 +68 +64 +64 +58 +58 +58 +54 +54 +51 +50 +49 +47 +46 +43 +43 +41 +41 +40 +37 +37 +33 +33 +33 +31 +31 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +14 +13 +14 +13 +13 +13 +14 +14 +14 +14 +14 +14 +13 +13 +14 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +32 +31 +31 +33 +33 +37 +36 +37 +41 +41 +43 +43 +43 +47 +47 +50 +51 +51 +55 +54 +58 +59 +59 +64 +65 +69 +68 +73 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +109 +115 +115 +120 +120 +125 +126 +125 +130 +129 +133 +134 +133 +139 +139 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +164 +165 +169 +169 +169 +173 +173 +175 +174 +174 +178 +179 +178 +179 +179 +182 +183 +185 +185 +184 +188 +188 +190 +190 +191 +194 +194 +196 +196 +198 +198 +198 +201 +200 +200 +201 +200 +202 +202 +204 +204 +204 +205 +204 +206 +206 +206 +207 +207 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +204 +204 +204 +205 +204 +202 +202 +200 +201 +200 +200 +200 +198 +198 +198 +197 +196 +194 +195 +191 +191 +190 +189 +188 +184 +185 +184 +183 +183 +183 +183 +183 +178 +179 +175 +174 +174 +173 +173 +169 +169 +169 +165 +165 +161 +161 +158 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +130 +129 +130 +126 +126 +120 +120 +120 +115 +115 +110 +110 +106 +106 +105 +100 +100 +100 +100 +99 +96 +96 +96 +96 +95 +90 +90 +86 +86 +86 +82 +82 +76 +76 +74 +72 +72 +68 +68 +64 +64 +65 +59 +58 +55 +54 +55 +51 +50 +51 +51 +51 +47 +47 +42 +43 +43 +41 +40 +37 +37 +35 +33 +32 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +14 +14 +13 +14 +13 +14 +14 +14 +14 +13 +14 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +38 +41 +41 +43 +42 +47 +47 +47 +50 +51 +55 +55 +55 +59 +59 +64 +64 +64 +69 +68 +72 +72 +72 +76 +76 +82 +83 +83 +86 +86 +90 +90 +96 +96 +96 +100 +100 +105 +106 +106 +110 +110 +110 +110 +110 +116 +115 +120 +120 +119 +125 +125 +129 +129 +131 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +157 +157 +157 +161 +161 +165 +165 +166 +169 +169 +173 +172 +174 +175 +175 +178 +179 +182 +183 +183 +185 +184 +188 +189 +188 +190 +191 +195 +194 +194 +197 +196 +198 +198 +198 +201 +201 +200 +200 +202 +202 +203 +204 +204 +204 +204 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +205 +205 +204 +204 +202 +203 +203 +201 +200 +200 +200 +200 +198 +198 +196 +196 +197 +194 +194 +191 +191 +191 +189 +188 +185 +185 +185 +182 +183 +179 +179 +175 +175 +175 +172 +173 +169 +169 +169 +165 +164 +161 +161 +161 +157 +157 +151 +151 +151 +147 +148 +143 +144 +144 +139 +139 +133 +133 +129 +129 +129 +125 +126 +120 +119 +120 +116 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +59 +58 +58 +55 +55 +51 +51 +50 +47 +46 +43 +43 +41 +41 +40 +37 +37 +33 +32 +33 +31 +31 +27 +26 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +13 +13 +14 +14 +13 +13 +14 +13 +13 +13 +13 +14 +14 +14 +14 +14 +13 +14 +14 +14 +13 +14 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +41 +41 +41 +43 +42 +47 +47 +47 +50 +51 +54 +54 +54 +59 +58 +65 +65 +64 +68 +68 +72 +73 +73 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +100 +100 +100 +106 +106 +110 +110 +110 +115 +115 +119 +119 +122 +125 +125 +129 +129 +133 +133 +134 +140 +139 +143 +143 +143 +147 +147 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +166 +169 +169 +173 +173 +175 +174 +175 +179 +179 +183 +183 +183 +184 +184 +189 +189 +189 +191 +190 +194 +194 +195 +196 +196 +198 +199 +200 +200 +200 +200 +200 +202 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +203 +203 +203 +201 +200 +201 +200 +201 +198 +198 +197 +197 +196 +195 +195 +190 +191 +191 +189 +189 +185 +185 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +152 +147 +147 +143 +143 +140 +139 +139 +133 +133 +128 +129 +130 +125 +126 +125 +126 +126 +119 +119 +115 +115 +116 +110 +109 +106 +106 +106 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +77 +76 +76 +72 +72 +68 +68 +69 +64 +64 +58 +58 +55 +54 +54 +50 +50 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +24 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +14 +14 +13 +14 +14 +13 +13 +14 +13 +14 +13 +14 +14 +13 +13 +13 +13 +14 +14 +14 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +28 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +42 +47 +47 +47 +50 +50 +54 +55 +55 +58 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +77 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +107 +110 +110 +115 +116 +119 +120 +120 +125 +125 +129 +129 +129 +133 +133 +133 +133 +134 +139 +139 +143 +143 +143 +147 +147 +151 +151 +156 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +178 +182 +182 +185 +184 +185 +189 +189 +191 +190 +194 +195 +195 +197 +197 +198 +199 +198 +201 +200 +200 +200 +201 +202 +202 +205 +204 +204 +204 +205 +207 +206 +207 +206 +207 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +204 +204 +205 +204 +204 +202 +202 +200 +200 +200 +200 +200 +199 +199 +198 +196 +197 +195 +195 +191 +190 +190 +188 +189 +184 +184 +185 +183 +183 +179 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +139 +139 +139 +133 +133 +130 +129 +129 +126 +126 +119 +119 +118 +116 +116 +110 +110 +106 +105 +106 +100 +100 +96 +96 +96 +90 +90 +90 +91 +90 +86 +86 +82 +82 +82 +76 +76 +73 +72 +71 +68 +68 +64 +65 +58 +59 +59 +54 +55 +50 +51 +51 +47 +47 +44 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +32 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +12 +14 +13 +13 +14 +13 +14 +13 +14 +14 +14 +13 +14 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +14 +14 +13 +14 +13 +12 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +30 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +50 +54 +54 +54 +58 +58 +64 +64 +65 +68 +69 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +91 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +116 +119 +119 +120 +119 +120 +125 +126 +129 +129 +130 +134 +133 +139 +139 +141 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +178 +179 +182 +183 +185 +185 +185 +188 +188 +190 +190 +191 +194 +194 +196 +197 +196 +199 +198 +200 +200 +200 +200 +201 +202 +202 +202 +204 +205 +204 +204 +207 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +205 +204 +204 +204 +204 +202 +202 +203 +200 +200 +200 +201 +199 +199 +198 +196 +196 +194 +194 +194 +190 +191 +188 +188 +189 +185 +185 +183 +183 +183 +179 +179 +174 +174 +175 +173 +173 +169 +169 +165 +165 +165 +161 +160 +157 +157 +157 +151 +151 +147 +147 +147 +143 +144 +140 +139 +139 +133 +133 +129 +129 +130 +126 +125 +120 +120 +115 +115 +115 +109 +110 +106 +106 +106 +100 +100 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +72 +73 +69 +68 +69 +64 +64 +58 +59 +59 +55 +54 +50 +50 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +20 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +14 +13 +14 +13 +13 +14 +13 +13 +14 +14 +14 +13 +13 +13 +13 +14 +13 +14 +13 +14 +14 +13 +13 +13 +12 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +30 +31 +31 +33 +32 +37 +37 +37 +41 +40 +43 +43 +47 +47 +46 +50 +50 +54 +54 +54 +58 +58 +59 +59 +58 +64 +65 +68 +68 +68 +73 +72 +76 +76 +77 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +106 +106 +105 +110 +110 +116 +116 +116 +120 +120 +125 +125 +129 +130 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +175 +175 +175 +179 +179 +182 +183 +183 +185 +184 +189 +189 +189 +191 +190 +195 +194 +194 +197 +197 +198 +198 +198 +201 +201 +200 +201 +203 +203 +202 +204 +204 +204 +205 +204 +206 +207 +206 +206 +206 +207 +206 +207 +206 +206 +206 +207 +206 +206 +207 +204 +204 +205 +204 +203 +202 +202 +201 +201 +200 +201 +200 +198 +198 +197 +196 +196 +195 +195 +191 +191 +191 +188 +189 +184 +185 +186 +183 +183 +179 +179 +175 +175 +174 +173 +173 +169 +169 +169 +165 +165 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +145 +143 +143 +139 +140 +133 +133 +134 +129 +129 +125 +125 +125 +120 +120 +120 +119 +119 +116 +115 +110 +109 +110 +106 +106 +100 +100 +98 +96 +96 +91 +90 +86 +86 +86 +82 +82 +76 +77 +76 +73 +73 +68 +68 +68 +64 +64 +58 +58 +59 +54 +55 +50 +50 +47 +47 +47 +42 +43 +41 +41 +41 +36 +37 +33 +32 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +13 +14 +13 +13 +14 +14 +14 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +14 +14 +14 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +24 +25 +26 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +43 +43 +43 +47 +47 +51 +51 +50 +55 +54 +59 +58 +61 +65 +65 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +105 +106 +108 +110 +110 +116 +116 +119 +119 +119 +125 +125 +129 +129 +129 +133 +134 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +160 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +183 +185 +184 +188 +188 +188 +191 +190 +194 +195 +196 +196 +196 +198 +199 +200 +200 +200 +201 +200 +202 +203 +202 +204 +205 +204 +204 +204 +206 +207 +206 +206 +207 +206 +207 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +204 +204 +205 +204 +204 +202 +202 +200 +201 +201 +200 +200 +199 +198 +200 +196 +197 +195 +194 +190 +191 +190 +188 +188 +185 +184 +184 +182 +182 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +163 +161 +161 +157 +157 +151 +151 +150 +147 +147 +143 +143 +143 +139 +139 +139 +139 +140 +133 +133 +129 +129 +129 +126 +125 +119 +119 +120 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +64 +64 +64 +59 +58 +54 +54 +54 +51 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +14 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +14 +13 +13 +14 +14 +13 +13 +14 +13 +14 +14 +13 +12 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +50 +51 +50 +55 +55 +58 +58 +59 +65 +64 +64 +63 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +109 +109 +115 +116 +116 +120 +120 +126 +125 +126 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +160 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +178 +183 +182 +183 +184 +184 +188 +188 +189 +190 +190 +195 +194 +195 +196 +196 +199 +198 +198 +200 +201 +200 +200 +200 +202 +202 +204 +204 +205 +205 +204 +206 +207 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +204 +204 +204 +204 +204 +203 +202 +200 +200 +200 +200 +200 +198 +198 +196 +197 +196 +194 +194 +191 +191 +190 +189 +189 +184 +184 +184 +183 +183 +179 +178 +176 +174 +175 +173 +173 +168 +169 +169 +165 +165 +161 +161 +161 +157 +157 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +140 +134 +133 +134 +129 +129 +125 +125 +125 +119 +119 +115 +115 +115 +109 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +65 +64 +58 +59 +54 +54 +54 +50 +51 +47 +47 +47 +42 +43 +41 +40 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +12 +13 +15 +15 +17 +17 +17 +19 +19 +19 +19 +19 +20 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +40 +41 +41 +43 +43 +47 +47 +47 +51 +51 +50 +51 +51 +54 +54 +58 +58 +58 +64 +64 +68 +68 +69 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +116 +119 +119 +125 +125 +125 +129 +129 +133 +133 +134 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +172 +173 +173 +175 +175 +178 +178 +179 +183 +182 +184 +185 +185 +189 +189 +191 +190 +190 +195 +195 +196 +197 +196 +198 +199 +201 +200 +200 +200 +201 +203 +202 +204 +204 +204 +204 +205 +207 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +207 +207 +206 +204 +204 +204 +205 +204 +203 +202 +201 +200 +200 +200 +201 +201 +200 +200 +198 +199 +196 +197 +196 +194 +194 +191 +190 +189 +188 +189 +184 +185 +183 +182 +182 +179 +179 +174 +175 +175 +173 +173 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +154 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +125 +120 +120 +116 +116 +116 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +67 +68 +64 +64 +65 +58 +58 +55 +54 +51 +51 +51 +47 +47 +43 +42 +43 +41 +41 +37 +36 +37 +32 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +20 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +14 +13 +13 +13 +13 +13 +14 +14 +14 +13 +14 +14 +14 +13 +13 +13 +13 +13 +14 +14 +13 +14 +14 +13 +13 +13 +14 +13 +14 +13 +13 +14 +13 +13 +12 +15 +15 +17 +17 +18 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +32 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +48 +50 +50 +54 +55 +58 +59 +59 +64 +64 +68 +68 +68 +72 +72 +76 +77 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +99 +100 +100 +106 +106 +106 +106 +106 +109 +110 +116 +116 +115 +120 +119 +126 +125 +125 +129 +130 +134 +133 +133 +139 +139 +143 +143 +148 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +172 +175 +175 +179 +179 +178 +183 +182 +185 +184 +189 +188 +189 +191 +190 +194 +195 +195 +196 +197 +198 +198 +198 +200 +201 +200 +200 +200 +202 +202 +205 +204 +205 +204 +205 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +207 +206 +206 +206 +207 +207 +207 +204 +204 +205 +205 +205 +203 +203 +203 +201 +200 +200 +200 +198 +198 +198 +197 +197 +194 +194 +195 +191 +191 +188 +188 +188 +184 +186 +183 +182 +183 +179 +178 +175 +175 +174 +172 +173 +169 +169 +165 +165 +165 +160 +160 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +140 +139 +140 +133 +133 +129 +129 +125 +125 +125 +119 +120 +116 +116 +115 +110 +109 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +72 +72 +72 +68 +68 +65 +64 +64 +58 +58 +54 +55 +55 +50 +50 +46 +47 +47 +43 +43 +40 +41 +41 +37 +37 +33 +33 +32 +31 +31 +27 +26 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +14 +13 +14 +14 +13 +13 +13 +13 +13 +14 +13 +14 +13 +14 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +21 +21 +21 +25 +25 +27 +27 +27 +31 +30 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +50 +51 +55 +54 +59 +58 +59 +64 +64 +68 +68 +69 +73 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +110 +110 +115 +116 +119 +119 +120 +125 +125 +129 +129 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +179 +179 +179 +182 +183 +184 +185 +185 +189 +189 +190 +191 +190 +195 +194 +196 +196 +196 +198 +199 +201 +200 +201 +200 +201 +203 +202 +205 +204 +204 +204 +204 +206 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +205 +205 +203 +203 +200 +200 +201 +200 +200 +198 +198 +198 +197 +196 +197 +197 +196 +195 +194 +190 +191 +191 +189 +189 +184 +184 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +141 +139 +139 +133 +133 +129 +130 +129 +125 +125 +119 +119 +120 +116 +115 +110 +109 +109 +106 +106 +100 +100 +100 +96 +96 +90 +90 +87 +86 +86 +82 +82 +76 +77 +76 +72 +72 +68 +68 +69 +65 +65 +58 +58 +58 +54 +55 +51 +51 +51 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +14 +14 +13 +14 +13 +14 +14 +14 +13 +14 +14 +14 +14 +13 +14 +14 +13 +13 +13 +13 +13 +13 +13 +12 +15 +15 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +40 +43 +43 +47 +46 +47 +51 +51 +55 +54 +55 +59 +58 +65 +65 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +109 +115 +116 +119 +119 +120 +125 +126 +129 +129 +129 +134 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +164 +165 +169 +169 +169 +173 +173 +175 +175 +175 +178 +178 +183 +182 +183 +184 +185 +189 +189 +189 +191 +190 +194 +195 +195 +197 +197 +199 +198 +200 +200 +201 +201 +200 +202 +203 +203 +204 +204 +204 +204 +204 +206 +207 +207 +206 +206 +207 +206 +207 +206 +206 +206 +206 +207 +206 +204 +204 +204 +204 +204 +202 +202 +202 +200 +200 +200 +201 +200 +200 +200 +198 +198 +199 +196 +196 +194 +194 +193 +190 +191 +188 +189 +185 +185 +185 +183 +183 +179 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +140 +139 +133 +133 +133 +130 +129 +125 +125 +125 +119 +119 +115 +115 +115 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +58 +58 +54 +54 +51 +50 +51 +47 +46 +43 +43 +42 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +12 +13 +13 +13 +14 +13 +13 +13 +14 +14 +14 +14 +13 +14 +14 +14 +13 +13 +14 +13 +14 +14 +13 +14 +13 +13 +13 +14 +13 +14 +13 +12 +15 +15 +17 +17 +18 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +32 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +50 +54 +55 +54 +58 +58 +64 +64 +64 +68 +68 +72 +72 +73 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +115 +119 +119 +125 +126 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +144 +148 +147 +151 +151 +158 +158 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +184 +184 +185 +189 +189 +190 +191 +195 +194 +194 +197 +196 +198 +199 +199 +201 +200 +201 +200 +200 +201 +201 +202 +203 +203 +204 +204 +204 +205 +205 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +204 +204 +204 +204 +204 +202 +203 +201 +201 +201 +200 +201 +198 +198 +196 +196 +196 +195 +194 +191 +191 +190 +189 +188 +184 +184 +185 +182 +183 +178 +179 +179 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +120 +119 +119 +115 +116 +109 +110 +110 +105 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +69 +69 +69 +64 +64 +59 +59 +59 +55 +54 +54 +54 +54 +51 +51 +47 +46 +46 +43 +43 +41 +41 +41 +37 +37 +32 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +13 +14 +14 +14 +13 +14 +14 +14 +14 +14 +13 +13 +13 +14 +13 +13 +14 +13 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +22 +25 +25 +27 +27 +27 +31 +31 +33 +32 +35 +37 +37 +41 +42 +43 +43 +43 +46 +46 +51 +50 +51 +54 +55 +59 +58 +58 +65 +64 +68 +69 +69 +72 +72 +77 +76 +81 +82 +82 +87 +86 +90 +90 +89 +96 +95 +100 +100 +100 +106 +106 +110 +110 +110 +115 +115 +119 +120 +120 +125 +126 +130 +129 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +174 +175 +178 +179 +179 +183 +183 +185 +185 +184 +189 +188 +191 +191 +191 +194 +195 +197 +196 +196 +198 +198 +200 +200 +200 +200 +200 +203 +202 +204 +204 +204 +205 +204 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +205 +204 +205 +204 +204 +202 +202 +202 +200 +200 +200 +200 +201 +198 +199 +196 +196 +197 +195 +194 +190 +191 +191 +189 +189 +185 +185 +182 +183 +183 +179 +178 +175 +175 +175 +172 +173 +169 +169 +168 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +140 +139 +139 +134 +134 +130 +129 +129 +125 +125 +120 +119 +119 +115 +116 +110 +110 +109 +106 +106 +100 +100 +100 +96 +96 +90 +90 +87 +86 +86 +82 +82 +76 +76 +76 +72 +72 +73 +73 +72 +68 +68 +65 +64 +64 +59 +59 +55 +55 +55 +50 +50 +47 +47 +43 +43 +43 +40 +41 +37 +37 +37 +33 +33 +33 +33 +33 +31 +31 +27 +26 +27 +25 +25 +21 +20 +20 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +14 +14 +13 +13 +14 +14 +13 +13 +14 +13 +13 +13 +13 +14 +13 +14 +14 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +32 +37 +37 +41 +41 +41 +43 +44 +47 +47 +47 +50 +51 +55 +55 +59 +59 +59 +65 +65 +68 +68 +69 +72 +73 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +110 +110 +110 +116 +116 +119 +120 +119 +125 +126 +130 +129 +129 +133 +134 +139 +139 +139 +143 +143 +147 +147 +148 +151 +151 +157 +157 +161 +161 +161 +165 +166 +169 +169 +169 +173 +173 +173 +173 +172 +175 +175 +179 +178 +179 +183 +183 +185 +185 +186 +189 +189 +191 +191 +190 +190 +190 +195 +194 +196 +196 +197 +199 +198 +199 +199 +198 +200 +201 +201 +201 +200 +202 +202 +205 +204 +205 +204 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +205 +204 +204 +204 +205 +202 +202 +200 +200 +200 +200 +200 +198 +198 +196 +196 +197 +194 +194 +191 +191 +190 +189 +189 +185 +185 +185 +183 +182 +178 +179 +178 +175 +175 +173 +173 +170 +169 +169 +165 +165 +161 +161 +160 +157 +157 +152 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +120 +119 +120 +116 +115 +110 +110 +110 +105 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +85 +82 +82 +79 +76 +76 +72 +72 +68 +68 +68 +64 +65 +58 +59 +58 +54 +55 +54 +54 +54 +51 +50 +47 +46 +47 +43 +43 +41 +40 +39 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +14 +13 +12 +13 +14 +14 +14 +14 +13 +13 +14 +14 +13 +13 +13 +14 +14 +13 +13 +14 +13 +14 +13 +13 +14 +13 +14 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +32 +37 +37 +41 +41 +41 +43 +43 +47 +47 +46 +51 +51 +55 +55 +54 +58 +58 +64 +65 +64 +68 +68 +72 +72 +73 +77 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +105 +110 +110 +115 +115 +116 +120 +119 +125 +125 +124 +129 +129 +133 +133 +140 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +164 +165 +165 +169 +169 +172 +173 +173 +174 +175 +179 +178 +183 +183 +183 +184 +184 +189 +189 +188 +190 +190 +191 +190 +191 +194 +195 +197 +197 +197 +198 +198 +200 +200 +201 +201 +200 +202 +202 +204 +204 +204 +204 +205 +207 +206 +206 +206 +207 +207 +206 +206 +207 +206 +206 +206 +207 +206 +206 +204 +204 +204 +205 +204 +202 +202 +200 +201 +201 +201 +201 +198 +199 +198 +196 +197 +194 +194 +195 +190 +191 +188 +189 +188 +185 +185 +182 +183 +179 +179 +179 +175 +175 +172 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +134 +133 +133 +129 +129 +125 +125 +125 +120 +120 +115 +115 +115 +110 +109 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +82 +82 +82 +77 +76 +72 +72 +73 +68 +68 +65 +64 +64 +58 +58 +55 +54 +54 +51 +50 +46 +47 +44 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +14 +13 +13 +14 +14 +13 +14 +14 +14 +13 +14 +14 +13 +13 +14 +13 +13 +13 +13 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +40 +43 +43 +47 +46 +47 +51 +50 +54 +55 +54 +59 +58 +64 +64 +65 +69 +68 +72 +72 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +105 +105 +110 +110 +115 +116 +116 +119 +119 +125 +125 +129 +129 +129 +133 +133 +139 +139 +140 +144 +143 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +162 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +179 +182 +183 +182 +182 +183 +184 +185 +189 +189 +188 +191 +191 +194 +194 +196 +196 +197 +199 +198 +200 +200 +201 +201 +200 +203 +203 +203 +204 +204 +204 +204 +204 +207 +206 +206 +206 +206 +206 +207 +206 +206 +207 +207 +207 +206 +206 +204 +204 +205 +204 +204 +202 +203 +203 +200 +201 +201 +200 +200 +199 +198 +196 +196 +196 +195 +195 +190 +190 +189 +188 +189 +185 +184 +183 +182 +182 +179 +178 +179 +179 +179 +175 +175 +173 +172 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +139 +139 +139 +133 +134 +130 +130 +129 +125 +125 +119 +119 +119 +115 +115 +110 +110 +105 +106 +105 +100 +100 +96 +96 +96 +90 +90 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +73 +72 +74 +68 +68 +64 +64 +58 +58 +59 +54 +55 +51 +51 +51 +47 +47 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +14 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +14 +14 +14 +14 +13 +14 +13 +14 +14 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +15 +15 +18 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +46 +46 +51 +51 +51 +55 +55 +59 +59 +58 +65 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +87 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +115 +115 +115 +115 +119 +119 +125 +126 +126 +129 +130 +133 +133 +135 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +178 +179 +179 +182 +182 +184 +184 +185 +189 +189 +190 +191 +191 +194 +195 +197 +197 +196 +198 +199 +200 +200 +201 +200 +201 +202 +202 +204 +204 +204 +204 +205 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +205 +204 +204 +204 +204 +202 +202 +201 +200 +201 +200 +201 +198 +199 +198 +196 +197 +195 +194 +194 +190 +191 +188 +189 +188 +185 +184 +183 +183 +182 +178 +178 +175 +174 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +125 +125 +126 +119 +119 +115 +115 +116 +110 +110 +109 +109 +110 +106 +106 +99 +100 +100 +96 +96 +89 +90 +90 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +69 +65 +65 +65 +64 +65 +58 +58 +54 +54 +54 +50 +51 +46 +46 +45 +43 +43 +41 +41 +37 +36 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +20 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +14 +13 +14 +13 +13 +14 +14 +13 +14 +14 +13 +13 +14 +13 +13 +14 +14 +13 +14 +14 +14 +14 +14 +14 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +46 +50 +51 +50 +54 +55 +59 +59 +58 +64 +64 +68 +68 +69 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +116 +117 +119 +120 +125 +125 +129 +129 +129 +133 +134 +139 +139 +139 +143 +143 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +165 +165 +165 +169 +169 +172 +173 +173 +175 +175 +178 +179 +179 +183 +183 +184 +184 +185 +188 +189 +190 +191 +191 +194 +195 +197 +197 +198 +198 +198 +201 +201 +201 +200 +201 +202 +202 +204 +204 +205 +204 +204 +207 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +205 +202 +202 +200 +201 +200 +201 +200 +198 +199 +198 +196 +197 +194 +194 +195 +191 +190 +188 +188 +185 +184 +184 +182 +182 +179 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +156 +157 +158 +151 +151 +147 +147 +143 +143 +143 +139 +139 +134 +133 +133 +130 +130 +129 +129 +129 +125 +126 +120 +120 +119 +115 +116 +110 +110 +108 +106 +106 +100 +100 +97 +96 +96 +90 +90 +86 +86 +86 +82 +82 +82 +82 +82 +76 +76 +73 +72 +73 +68 +68 +64 +64 +62 +59 +58 +55 +54 +50 +50 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +14 +14 +13 +13 +13 +14 +13 +14 +14 +14 +13 +14 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +40 +41 +43 +43 +43 +47 +47 +51 +51 +51 +54 +54 +59 +58 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +76 +76 +77 +82 +83 +86 +86 +86 +90 +90 +96 +96 +98 +100 +100 +105 +106 +110 +110 +110 +115 +115 +120 +119 +120 +125 +126 +125 +126 +126 +129 +129 +134 +133 +134 +140 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +182 +183 +185 +184 +188 +188 +189 +190 +190 +194 +194 +195 +196 +197 +199 +199 +198 +200 +200 +200 +201 +200 +203 +203 +204 +204 +205 +204 +204 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +205 +204 +204 +204 +204 +202 +202 +203 +200 +201 +200 +200 +199 +198 +198 +196 +197 +195 +195 +194 +191 +191 +189 +189 +189 +185 +184 +183 +183 +182 +179 +179 +175 +175 +175 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +131 +129 +130 +126 +126 +119 +120 +120 +115 +115 +110 +110 +109 +106 +106 +106 +105 +106 +100 +100 +96 +96 +96 +90 +89 +86 +86 +83 +82 +82 +76 +77 +72 +73 +73 +68 +68 +65 +64 +64 +58 +58 +54 +54 +54 +50 +50 +47 +46 +47 +43 +43 +41 +41 +37 +37 +37 +33 +32 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +12 +13 +13 +14 +13 +14 +14 +14 +13 +13 +14 +14 +14 +13 +14 +14 +13 +14 +14 +13 +13 +14 +13 +13 +13 +14 +13 +14 +13 +15 +15 +17 +17 +17 +19 +19 +20 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +43 +42 +42 +46 +47 +51 +50 +51 +54 +54 +54 +54 +54 +59 +58 +64 +64 +64 +69 +68 +72 +72 +73 +77 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +100 +100 +100 +106 +107 +110 +110 +110 +115 +115 +120 +119 +125 +125 +125 +129 +130 +133 +133 +133 +139 +140 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +162 +165 +165 +169 +169 +172 +173 +173 +175 +175 +179 +179 +179 +183 +182 +185 +185 +184 +188 +188 +191 +190 +191 +195 +194 +196 +197 +196 +198 +198 +200 +200 +201 +200 +200 +202 +202 +204 +204 +204 +204 +205 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +207 +206 +206 +206 +207 +204 +204 +205 +204 +204 +202 +202 +200 +200 +200 +200 +201 +199 +199 +198 +197 +197 +194 +195 +195 +190 +191 +188 +189 +189 +185 +184 +183 +182 +178 +179 +178 +175 +175 +173 +173 +173 +169 +169 +169 +169 +168 +165 +165 +161 +161 +161 +157 +157 +151 +151 +149 +147 +147 +143 +143 +139 +139 +139 +133 +133 +130 +129 +129 +125 +125 +126 +125 +126 +119 +119 +115 +115 +116 +110 +110 +106 +106 +101 +100 +100 +96 +96 +90 +89 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +65 +64 +65 +58 +58 +55 +55 +50 +51 +50 +47 +47 +43 +43 +43 +40 +41 +37 +37 +37 +33 +33 +31 +30 +31 +26 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +14 +14 +14 +14 +14 +14 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +20 +25 +25 +28 +27 +27 +30 +31 +33 +33 +33 +37 +36 +40 +41 +41 +43 +43 +46 +46 +47 +51 +51 +54 +55 +54 +58 +58 +64 +64 +68 +68 +69 +72 +72 +76 +76 +77 +82 +82 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +101 +105 +106 +110 +110 +115 +116 +116 +119 +119 +125 +125 +125 +130 +129 +133 +133 +133 +139 +140 +144 +143 +143 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +168 +169 +173 +173 +173 +174 +175 +179 +179 +178 +182 +182 +185 +184 +185 +188 +189 +190 +190 +195 +194 +195 +197 +197 +198 +199 +198 +200 +200 +200 +200 +201 +202 +202 +204 +204 +204 +204 +205 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +207 +206 +204 +205 +204 +204 +205 +202 +203 +200 +200 +200 +200 +200 +199 +198 +200 +196 +197 +194 +195 +191 +191 +191 +189 +189 +184 +185 +184 +182 +183 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +158 +157 +151 +151 +147 +148 +147 +143 +143 +143 +143 +143 +139 +139 +133 +133 +133 +129 +130 +125 +125 +120 +120 +120 +116 +116 +109 +109 +109 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +59 +58 +54 +54 +51 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +32 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +14 +13 +14 +14 +13 +14 +14 +14 +13 +14 +14 +13 +13 +14 +14 +14 +13 +14 +14 +14 +14 +14 +13 +13 +14 +14 +14 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +38 +41 +41 +42 +43 +47 +47 +47 +51 +50 +54 +54 +55 +59 +58 +58 +59 +59 +64 +64 +68 +68 +68 +73 +72 +76 +77 +79 +82 +82 +86 +86 +89 +90 +90 +96 +96 +100 +99 +100 +105 +106 +110 +110 +109 +115 +115 +119 +119 +119 +125 +125 +129 +130 +132 +133 +133 +139 +139 +143 +144 +143 +147 +147 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +175 +175 +175 +179 +179 +182 +183 +182 +185 +184 +188 +188 +188 +191 +190 +195 +195 +194 +196 +197 +198 +198 +198 +201 +201 +200 +200 +203 +202 +203 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +207 +204 +204 +204 +204 +204 +203 +203 +202 +202 +202 +200 +200 +200 +200 +200 +200 +200 +199 +199 +198 +197 +196 +194 +194 +193 +191 +190 +188 +188 +185 +185 +185 +183 +182 +179 +179 +179 +175 +175 +174 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +159 +157 +157 +151 +151 +147 +147 +147 +144 +143 +139 +139 +139 +133 +133 +129 +130 +129 +125 +125 +119 +119 +119 +115 +116 +110 +109 +108 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +73 +68 +68 +69 +64 +65 +59 +58 +55 +55 +54 +51 +50 +47 +46 +47 +42 +43 +41 +40 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +26 +21 +21 +20 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +14 +13 +14 +13 +14 +14 +13 +13 +14 +13 +14 +14 +13 +13 +14 +14 +14 +13 +13 +13 +14 +13 +15 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +36 +37 +37 +37 +37 +40 +41 +43 +43 +43 +47 +47 +51 +51 +54 +55 +55 +59 +58 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +105 +106 +106 +109 +109 +116 +116 +115 +120 +120 +125 +125 +126 +129 +130 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +182 +185 +185 +184 +188 +189 +190 +191 +194 +194 +195 +197 +196 +199 +199 +198 +201 +200 +200 +200 +200 +202 +203 +205 +204 +204 +205 +204 +206 +206 +206 +206 +206 +206 +207 +207 +207 +206 +206 +206 +207 +206 +206 +204 +205 +204 +204 +205 +204 +204 +202 +202 +203 +201 +201 +200 +200 +200 +199 +198 +196 +197 +194 +194 +195 +191 +190 +188 +189 +188 +185 +184 +185 +184 +184 +183 +183 +179 +179 +179 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +144 +143 +144 +140 +140 +133 +133 +134 +129 +129 +126 +126 +120 +119 +119 +116 +115 +110 +110 +109 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +68 +68 +68 +64 +64 +59 +59 +59 +55 +55 +51 +51 +50 +47 +47 +43 +43 +42 +41 +41 +37 +37 +37 +33 +33 +31 +31 +27 +28 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +14 +14 +13 +14 +14 +14 +14 +14 +13 +13 +13 +14 +14 +14 +14 +13 +13 +14 +14 +13 +13 +14 +13 +13 +13 +14 +14 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +40 +41 +41 +43 +43 +47 +47 +47 +51 +51 +54 +54 +55 +58 +58 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +115 +119 +119 +125 +125 +125 +129 +129 +133 +133 +140 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +183 +182 +183 +184 +184 +188 +189 +188 +190 +191 +195 +194 +194 +197 +196 +198 +198 +198 +201 +200 +200 +200 +201 +202 +203 +204 +205 +203 +204 +205 +206 +206 +206 +207 +207 +206 +206 +207 +207 +206 +206 +206 +206 +206 +207 +207 +206 +204 +204 +205 +205 +204 +202 +202 +201 +200 +200 +200 +200 +198 +199 +198 +197 +196 +197 +196 +196 +195 +195 +191 +190 +191 +188 +188 +185 +185 +184 +182 +182 +179 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +162 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +139 +139 +139 +133 +133 +130 +130 +129 +125 +126 +119 +119 +119 +116 +116 +110 +110 +110 +106 +106 +100 +100 +100 +95 +96 +90 +90 +86 +86 +86 +82 +82 +76 +77 +76 +72 +72 +72 +72 +72 +68 +68 +64 +64 +64 +58 +58 +55 +55 +55 +51 +50 +46 +46 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +13 +14 +13 +13 +13 +14 +13 +14 +13 +14 +14 +14 +14 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +15 +15 +15 +15 +15 +17 +17 +17 +19 +19 +21 +21 +22 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +42 +43 +47 +47 +50 +51 +51 +55 +54 +59 +58 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +116 +116 +115 +119 +119 +125 +125 +125 +129 +130 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +152 +157 +157 +161 +161 +165 +165 +165 +169 +168 +173 +173 +173 +175 +175 +179 +179 +178 +183 +183 +185 +184 +184 +189 +189 +191 +191 +191 +194 +194 +196 +196 +199 +198 +198 +200 +200 +200 +200 +200 +202 +202 +203 +202 +203 +204 +205 +204 +204 +204 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +203 +204 +204 +204 +204 +205 +202 +202 +200 +201 +200 +200 +200 +198 +198 +197 +196 +197 +194 +194 +190 +191 +191 +188 +189 +185 +184 +184 +183 +183 +179 +179 +179 +175 +175 +173 +172 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +140 +139 +133 +133 +134 +130 +129 +125 +125 +126 +119 +119 +116 +115 +110 +110 +110 +106 +105 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +68 +68 +64 +65 +59 +58 +58 +55 +55 +51 +51 +50 +47 +47 +43 +42 +43 +41 +41 +37 +37 +37 +33 +33 +31 +30 +31 +27 +27 +25 +25 +22 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +15 +14 +13 +13 +13 +13 +14 +14 +14 +14 +13 +13 +13 +13 +14 +13 +13 +14 +13 +14 +13 +13 +13 +13 +14 +13 +14 +13 +14 +13 +13 +13 +14 +13 +14 +13 +12 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +46 +47 +47 +51 +50 +55 +55 +55 +58 +59 +59 +59 +58 +65 +65 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +109 +115 +116 +119 +120 +120 +125 +125 +129 +129 +129 +133 +133 +139 +139 +144 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +172 +173 +174 +175 +175 +179 +178 +183 +183 +184 +185 +184 +189 +188 +190 +190 +191 +194 +194 +197 +196 +197 +198 +198 +201 +201 +200 +200 +200 +202 +202 +203 +204 +204 +204 +204 +207 +206 +206 +206 +207 +206 +207 +207 +207 +206 +206 +206 +206 +206 +207 +206 +206 +207 +204 +204 +204 +204 +203 +202 +202 +200 +200 +200 +201 +201 +199 +198 +197 +197 +196 +194 +194 +191 +190 +191 +189 +189 +184 +184 +185 +182 +183 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +130 +129 +129 +126 +125 +119 +119 +119 +116 +115 +110 +109 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +69 +68 +64 +64 +58 +58 +58 +54 +54 +51 +50 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +26 +25 +25 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +12 +13 +14 +14 +14 +14 +14 +14 +14 +14 +13 +14 +14 +14 +13 +14 +14 +13 +14 +13 +13 +14 +14 +14 +14 +13 +13 +13 +14 +14 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +51 +54 +54 +55 +58 +58 +64 +64 +65 +68 +68 +72 +72 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +99 +106 +106 +106 +110 +110 +116 +116 +115 +119 +119 +125 +125 +130 +130 +129 +133 +133 +139 +140 +140 +143 +143 +147 +147 +147 +151 +151 +157 +156 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +174 +175 +175 +178 +178 +182 +183 +183 +184 +184 +184 +184 +185 +188 +189 +190 +191 +191 +195 +194 +196 +196 +196 +198 +199 +200 +200 +200 +200 +200 +202 +203 +204 +204 +204 +204 +204 +205 +204 +204 +206 +206 +206 +207 +207 +206 +206 +206 +206 +207 +207 +206 +206 +206 +204 +205 +205 +205 +204 +202 +203 +202 +200 +200 +201 +201 +201 +198 +199 +196 +197 +196 +195 +195 +191 +190 +189 +188 +188 +185 +185 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +134 +133 +129 +129 +129 +125 +125 +119 +120 +119 +116 +115 +110 +110 +110 +106 +106 +100 +99 +96 +96 +96 +90 +90 +86 +86 +86 +82 +83 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +58 +59 +55 +54 +51 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +14 +14 +14 +13 +13 +13 +14 +14 +14 +14 +14 +13 +13 +13 +13 +14 +14 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +22 +21 +21 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +44 +42 +42 +47 +47 +50 +51 +51 +55 +55 +58 +59 +64 +64 +65 +68 +68 +72 +72 +72 +76 +77 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +109 +116 +115 +115 +119 +119 +125 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +152 +157 +157 +161 +161 +164 +165 +165 +169 +169 +173 +173 +173 +175 +174 +179 +179 +179 +182 +183 +185 +184 +184 +188 +189 +191 +191 +192 +194 +195 +197 +196 +198 +199 +198 +200 +200 +200 +200 +200 +202 +202 +202 +202 +203 +204 +204 +204 +204 +205 +206 +207 +206 +206 +207 +206 +207 +206 +207 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +203 +202 +202 +201 +200 +200 +200 +201 +198 +199 +196 +197 +194 +194 +194 +191 +190 +188 +188 +189 +185 +185 +185 +184 +185 +182 +183 +179 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +126 +126 +119 +120 +116 +116 +110 +109 +109 +106 +106 +100 +100 +100 +95 +95 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +73 +72 +73 +69 +68 +64 +65 +58 +58 +58 +54 +55 +50 +50 +51 +46 +47 +47 +47 +47 +43 +43 +41 +40 +40 +37 +37 +33 +33 +32 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +13 +14 +14 +14 +14 +14 +14 +13 +13 +14 +14 +13 +13 +14 +14 +14 +13 +13 +14 +13 +14 +14 +13 +13 +13 +12 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +26 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +47 +47 +46 +51 +51 +54 +55 +55 +59 +58 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +81 +82 +82 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +116 +119 +120 +125 +125 +125 +129 +129 +133 +133 +134 +139 +139 +143 +143 +148 +147 +147 +151 +151 +157 +157 +157 +161 +160 +161 +161 +161 +165 +164 +169 +169 +169 +173 +173 +175 +174 +175 +179 +179 +182 +183 +185 +185 +185 +189 +188 +190 +190 +191 +194 +194 +195 +194 +195 +196 +196 +199 +198 +199 +200 +201 +201 +201 +201 +202 +203 +204 +204 +204 +204 +204 +206 +207 +207 +206 +206 +206 +206 +207 +206 +206 +207 +207 +206 +206 +207 +204 +204 +204 +204 +203 +202 +202 +200 +201 +200 +201 +200 +199 +198 +196 +196 +197 +195 +195 +191 +190 +190 +188 +189 +185 +185 +184 +183 +183 +179 +178 +175 +174 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +130 +129 +129 +125 +125 +119 +119 +120 +115 +116 +109 +110 +110 +106 +106 +100 +100 +100 +96 +95 +90 +90 +90 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +69 +64 +64 +64 +64 +64 +59 +59 +54 +54 +54 +50 +50 +46 +46 +45 +43 +43 +41 +41 +37 +38 +37 +33 +33 +31 +32 +31 +27 +27 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +14 +13 +12 +13 +14 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +14 +14 +14 +14 +14 +14 +14 +13 +13 +14 +14 +14 +13 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +26 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +50 +51 +55 +54 +59 +59 +59 +64 +64 +68 +68 +73 +72 +72 +76 +77 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +110 +111 +115 +115 +120 +120 +126 +125 +126 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +162 +165 +165 +169 +169 +173 +173 +173 +174 +175 +178 +178 +179 +182 +183 +183 +183 +183 +185 +184 +189 +188 +189 +191 +190 +194 +194 +196 +197 +197 +198 +199 +200 +201 +200 +200 +201 +203 +202 +203 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +204 +205 +205 +204 +204 +202 +203 +202 +200 +200 +200 +201 +201 +198 +199 +196 +196 +196 +195 +194 +191 +191 +189 +189 +189 +185 +185 +182 +183 +182 +178 +178 +175 +175 +174 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +148 +147 +147 +143 +143 +139 +139 +139 +133 +133 +130 +129 +129 +125 +125 +119 +120 +120 +116 +116 +110 +109 +110 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +87 +86 +82 +82 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +61 +59 +59 +55 +55 +50 +50 +50 +47 +47 +43 +43 +42 +41 +41 +41 +41 +40 +37 +37 +33 +33 +33 +31 +30 +27 +27 +26 +25 +25 +21 +21 +19 +19 +19 +17 +18 +15 +16 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +14 +13 +13 +14 +13 +14 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +42 +43 +47 +46 +47 +50 +51 +54 +54 +59 +58 +58 +64 +64 +68 +68 +67 +72 +72 +76 +76 +77 +82 +82 +86 +86 +86 +90 +90 +96 +95 +97 +100 +100 +106 +106 +111 +110 +109 +115 +115 +119 +119 +119 +125 +125 +125 +125 +126 +130 +129 +133 +134 +133 +139 +139 +143 +143 +144 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +165 +165 +165 +169 +169 +173 +172 +173 +175 +175 +179 +179 +180 +183 +183 +185 +184 +188 +189 +189 +190 +191 +194 +195 +195 +196 +196 +199 +198 +198 +200 +200 +200 +200 +201 +202 +202 +204 +204 +205 +205 +204 +207 +207 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +207 +205 +205 +204 +205 +205 +202 +203 +200 +200 +201 +200 +201 +198 +198 +197 +196 +197 +195 +195 +191 +191 +191 +189 +189 +185 +185 +185 +183 +183 +179 +179 +179 +175 +175 +173 +173 +169 +168 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +148 +143 +143 +143 +140 +139 +133 +133 +134 +130 +129 +126 +125 +120 +120 +120 +115 +115 +110 +110 +110 +106 +106 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +84 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +59 +59 +58 +58 +59 +54 +54 +50 +51 +51 +46 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +18 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +14 +13 +13 +14 +14 +14 +13 +13 +13 +14 +14 +14 +14 +14 +14 +13 +14 +13 +13 +13 +14 +13 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +42 +41 +41 +43 +43 +47 +47 +47 +51 +51 +55 +55 +55 +58 +58 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +87 +86 +86 +90 +91 +96 +96 +96 +100 +100 +106 +105 +106 +110 +110 +115 +116 +116 +119 +119 +125 +125 +126 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +170 +173 +173 +176 +175 +178 +179 +179 +183 +182 +184 +185 +185 +188 +189 +190 +191 +191 +194 +194 +197 +196 +197 +198 +198 +201 +200 +200 +201 +200 +202 +202 +204 +204 +204 +205 +204 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +204 +204 +204 +204 +204 +203 +202 +200 +200 +200 +200 +200 +198 +198 +198 +196 +196 +195 +195 +194 +190 +191 +189 +188 +188 +185 +185 +183 +183 +179 +178 +178 +175 +175 +173 +173 +172 +169 +168 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +134 +133 +133 +129 +129 +125 +125 +125 +119 +119 +119 +120 +120 +116 +116 +110 +109 +110 +106 +106 +100 +100 +98 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +72 +72 +72 +68 +68 +64 +65 +65 +59 +58 +54 +54 +53 +51 +50 +47 +47 +43 +43 +42 +41 +41 +40 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +13 +13 +14 +14 +13 +14 +13 +13 +13 +14 +13 +14 +13 +14 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +28 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +40 +40 +43 +43 +47 +47 +47 +51 +51 +54 +55 +55 +59 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +77 +82 +82 +86 +87 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +120 +120 +120 +125 +126 +129 +130 +129 +134 +133 +133 +133 +134 +139 +139 +143 +143 +143 +147 +147 +151 +151 +153 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +178 +182 +182 +185 +184 +185 +189 +189 +190 +190 +194 +194 +194 +197 +196 +198 +198 +198 +200 +200 +200 +201 +200 +202 +202 +204 +204 +204 +204 +204 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +205 +204 +202 +202 +201 +200 +200 +200 +200 +198 +198 +199 +196 +196 +194 +195 +191 +191 +191 +188 +189 +184 +184 +185 +182 +182 +183 +183 +183 +179 +178 +174 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +158 +157 +157 +151 +151 +147 +147 +147 +143 +143 +143 +143 +143 +139 +139 +134 +133 +133 +129 +129 +125 +125 +122 +120 +120 +116 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +75 +72 +71 +68 +68 +65 +64 +64 +59 +58 +55 +54 +55 +50 +50 +47 +47 +47 +43 +42 +41 +41 +41 +37 +36 +33 +32 +31 +30 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +13 +12 +13 +13 +14 +14 +13 +13 +13 +14 +13 +14 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +13 +13 +14 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +38 +40 +41 +43 +42 +46 +46 +47 +50 +51 +54 +54 +54 +59 +59 +58 +58 +59 +64 +65 +68 +68 +68 +72 +72 +76 +76 +78 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +106 +106 +106 +110 +110 +115 +115 +116 +119 +120 +125 +125 +129 +130 +129 +133 +133 +139 +139 +139 +143 +143 +146 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +175 +175 +175 +179 +178 +183 +182 +182 +184 +184 +188 +188 +189 +190 +191 +194 +194 +195 +197 +196 +199 +198 +198 +201 +201 +200 +200 +203 +202 +202 +204 +204 +204 +204 +205 +207 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +203 +202 +202 +201 +200 +200 +201 +200 +198 +198 +197 +196 +197 +194 +195 +190 +191 +190 +188 +189 +185 +185 +185 +183 +182 +179 +178 +174 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +134 +133 +129 +129 +130 +125 +125 +119 +119 +119 +116 +116 +116 +116 +115 +110 +109 +106 +106 +106 +100 +100 +96 +95 +91 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +65 +64 +59 +58 +55 +55 +55 +50 +50 +47 +46 +42 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +14 +15 +15 +15 +14 +13 +13 +12 +13 +13 +13 +14 +14 +14 +14 +14 +14 +13 +14 +14 +13 +14 +13 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +38 +37 +37 +40 +41 +43 +43 +43 +46 +47 +47 +47 +47 +51 +51 +55 +55 +55 +58 +59 +64 +65 +64 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +112 +115 +116 +119 +119 +125 +125 +126 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +164 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +178 +183 +182 +185 +184 +185 +188 +189 +191 +191 +191 +195 +194 +197 +197 +199 +199 +198 +200 +200 +200 +200 +201 +203 +202 +205 +204 +205 +204 +205 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +207 +206 +206 +204 +205 +204 +204 +204 +203 +202 +201 +200 +200 +201 +200 +199 +199 +199 +196 +196 +195 +194 +195 +190 +190 +189 +188 +184 +185 +184 +183 +183 +178 +179 +179 +176 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +154 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +129 +129 +129 +126 +126 +120 +120 +120 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +85 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +65 +64 +58 +59 +55 +54 +54 +51 +51 +47 +47 +47 +43 +43 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +14 +13 +13 +14 +13 +14 +14 +13 +14 +14 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +13 +13 +14 +13 +12 +15 +15 +17 +18 +17 +19 +19 +21 +21 +25 +25 +25 +26 +27 +31 +31 +31 +33 +33 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +46 +47 +51 +50 +54 +54 +59 +59 +59 +64 +64 +68 +68 +68 +72 +73 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +105 +110 +110 +116 +115 +115 +119 +120 +126 +125 +125 +129 +129 +133 +133 +134 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +178 +183 +183 +185 +185 +188 +189 +188 +191 +191 +194 +194 +194 +197 +196 +199 +199 +198 +201 +200 +200 +200 +200 +203 +203 +204 +205 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +205 +205 +205 +204 +205 +203 +203 +200 +201 +200 +200 +200 +198 +198 +196 +197 +197 +195 +194 +191 +191 +191 +188 +189 +189 +189 +188 +185 +185 +183 +183 +183 +179 +178 +175 +175 +173 +173 +173 +169 +169 +164 +165 +165 +161 +161 +157 +157 +157 +151 +151 +151 +151 +151 +147 +147 +143 +143 +144 +139 +139 +133 +133 +131 +129 +129 +125 +126 +119 +119 +120 +116 +116 +110 +109 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +59 +59 +59 +54 +55 +51 +51 +51 +47 +47 +43 +42 +43 +40 +40 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +14 +15 +13 +13 +12 +13 +14 +13 +14 +14 +14 +13 +13 +14 +14 +14 +14 +13 +13 +13 +14 +13 +14 +13 +13 +13 +13 +14 +14 +14 +14 +13 +13 +16 +15 +15 +17 +17 +19 +19 +19 +21 +21 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +34 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +50 +54 +54 +55 +55 +54 +58 +58 +64 +64 +65 +68 +68 +72 +73 +74 +77 +76 +82 +81 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +109 +110 +116 +115 +116 +119 +120 +126 +126 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +175 +175 +175 +178 +178 +183 +182 +182 +185 +184 +188 +189 +188 +190 +190 +195 +194 +194 +197 +196 +198 +198 +199 +200 +200 +200 +200 +202 +202 +203 +204 +204 +204 +205 +204 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +207 +204 +204 +204 +204 +205 +202 +202 +200 +200 +201 +200 +200 +199 +199 +198 +196 +197 +194 +195 +194 +190 +191 +189 +189 +186 +184 +185 +183 +182 +178 +179 +179 +175 +175 +173 +173 +173 +169 +169 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +149 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +120 +119 +120 +115 +115 +110 +110 +110 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +69 +65 +64 +58 +58 +59 +55 +54 +51 +50 +47 +46 +48 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +22 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +13 +13 +13 +14 +14 +13 +13 +13 +13 +14 +14 +13 +14 +13 +14 +13 +13 +14 +13 +14 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +26 +25 +25 +27 +27 +31 +31 +33 +33 +33 +36 +37 +41 +41 +41 +43 +42 +43 +43 +43 +47 +47 +50 +51 +51 +54 +54 +59 +59 +64 +65 +64 +68 +68 +72 +72 +72 +77 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +115 +115 +116 +120 +119 +125 +125 +125 +129 +130 +133 +133 +134 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +179 +183 +182 +185 +184 +185 +189 +188 +190 +190 +190 +195 +194 +196 +196 +199 +198 +198 +200 +200 +200 +201 +201 +202 +202 +205 +204 +204 +204 +204 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +207 +207 +206 +204 +204 +204 +204 +204 +203 +202 +203 +202 +202 +200 +201 +200 +200 +201 +198 +199 +196 +196 +196 +195 +195 +190 +191 +189 +188 +189 +184 +184 +183 +182 +182 +179 +179 +179 +179 +179 +175 +174 +173 +173 +173 +169 +169 +165 +165 +164 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +130 +125 +126 +126 +120 +120 +116 +116 +109 +109 +109 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +68 +68 +64 +64 +58 +58 +58 +55 +55 +50 +50 +51 +46 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +14 +14 +14 +13 +13 +14 +14 +14 +13 +13 +14 +13 +14 +13 +14 +13 +14 +13 +14 +13 +13 +14 +13 +13 +12 +15 +15 +18 +17 +18 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +33 +33 +33 +37 +37 +40 +41 +41 +43 +42 +46 +47 +50 +51 +50 +54 +54 +58 +58 +59 +65 +65 +68 +68 +69 +73 +73 +76 +76 +76 +82 +82 +86 +86 +87 +90 +90 +96 +96 +100 +100 +100 +106 +105 +110 +110 +110 +116 +116 +120 +119 +119 +125 +125 +130 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +182 +183 +183 +184 +185 +189 +189 +190 +190 +190 +195 +194 +196 +197 +196 +198 +198 +198 +198 +198 +201 +200 +201 +200 +200 +202 +202 +204 +205 +205 +205 +204 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +204 +204 +204 +204 +205 +202 +202 +203 +201 +201 +200 +201 +198 +198 +199 +197 +196 +194 +195 +195 +191 +190 +191 +190 +190 +189 +188 +184 +185 +185 +183 +183 +179 +178 +175 +175 +175 +173 +173 +169 +169 +169 +164 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +144 +143 +144 +140 +139 +133 +133 +130 +129 +129 +125 +125 +119 +120 +119 +115 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +91 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +68 +68 +64 +64 +64 +64 +65 +58 +58 +55 +54 +54 +50 +50 +46 +47 +47 +43 +42 +41 +41 +38 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +14 +13 +14 +14 +14 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +14 +13 +13 +13 +15 +15 +15 +17 +17 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +30 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +51 +50 +55 +55 +59 +59 +59 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +110 +109 +115 +115 +119 +120 +125 +125 +125 +129 +129 +133 +134 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +182 +184 +184 +184 +188 +188 +191 +191 +191 +194 +195 +196 +196 +196 +199 +198 +200 +200 +201 +201 +201 +202 +202 +204 +204 +204 +204 +204 +207 +207 +207 +206 +206 +206 +207 +206 +207 +206 +206 +206 +207 +207 +207 +204 +204 +204 +204 +204 +202 +202 +200 +200 +200 +200 +201 +200 +201 +200 +199 +198 +197 +197 +197 +195 +195 +191 +191 +189 +188 +189 +185 +185 +183 +182 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +134 +130 +130 +129 +125 +126 +119 +120 +120 +116 +115 +110 +110 +110 +106 +107 +100 +99 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +69 +64 +64 +58 +58 +59 +54 +54 +51 +50 +47 +47 +46 +42 +43 +41 +41 +40 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +14 +14 +13 +14 +14 +14 +14 +14 +13 +14 +13 +14 +14 +13 +13 +14 +13 +14 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +26 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +42 +47 +47 +47 +51 +50 +54 +54 +58 +58 +58 +64 +64 +68 +68 +68 +73 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +105 +106 +110 +110 +110 +116 +115 +119 +119 +120 +125 +125 +130 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +184 +185 +185 +188 +189 +191 +191 +194 +194 +195 +196 +197 +198 +199 +198 +201 +200 +201 +201 +200 +200 +200 +203 +202 +202 +204 +204 +205 +204 +205 +207 +207 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +204 +205 +205 +205 +204 +202 +202 +200 +201 +200 +200 +200 +198 +198 +198 +196 +196 +195 +194 +195 +191 +190 +189 +189 +189 +184 +184 +182 +182 +183 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +134 +134 +129 +129 +126 +125 +125 +119 +119 +115 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +65 +64 +59 +59 +55 +54 +54 +50 +50 +47 +47 +47 +43 +43 +41 +41 +42 +37 +36 +33 +32 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +14 +14 +14 +14 +13 +14 +13 +13 +13 +14 +13 +13 +14 +15 +14 +14 +13 +13 +13 +14 +14 +14 +13 +14 +13 +13 +13 +13 +16 +15 +15 +17 +17 +19 +19 +20 +20 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +40 +41 +41 +43 +42 +47 +47 +47 +50 +50 +50 +51 +50 +54 +55 +59 +59 +58 +64 +64 +69 +69 +68 +73 +72 +76 +77 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +109 +109 +116 +115 +120 +119 +120 +126 +126 +129 +129 +134 +133 +133 +139 +140 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +178 +178 +179 +183 +183 +185 +184 +184 +188 +188 +189 +188 +189 +191 +191 +195 +195 +195 +197 +197 +199 +198 +199 +200 +201 +200 +200 +202 +203 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +207 +204 +204 +204 +204 +205 +202 +202 +201 +200 +200 +201 +201 +198 +198 +198 +197 +197 +194 +194 +195 +190 +191 +189 +188 +184 +184 +185 +183 +183 +179 +179 +179 +174 +175 +173 +173 +172 +169 +169 +165 +165 +165 +161 +161 +156 +157 +157 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +134 +133 +130 +129 +125 +125 +125 +119 +120 +115 +115 +115 +110 +110 +106 +105 +106 +100 +100 +96 +96 +91 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +65 +58 +59 +54 +55 +55 +51 +50 +47 +46 +43 +43 +43 +41 +40 +37 +37 +37 +33 +33 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +14 +14 +14 +14 +13 +14 +14 +14 +14 +14 +14 +14 +14 +13 +14 +13 +13 +13 +13 +14 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +26 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +51 +50 +55 +55 +58 +58 +64 +64 +65 +68 +68 +72 +72 +73 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +95 +96 +100 +100 +100 +107 +106 +110 +109 +116 +116 +116 +119 +120 +125 +126 +125 +130 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +178 +183 +183 +185 +185 +185 +189 +188 +191 +191 +192 +194 +195 +196 +196 +198 +198 +198 +201 +201 +200 +201 +200 +202 +203 +202 +202 +202 +204 +204 +204 +204 +205 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +207 +206 +206 +204 +204 +204 +205 +204 +202 +203 +203 +200 +201 +201 +200 +201 +199 +199 +197 +196 +195 +195 +194 +191 +191 +188 +189 +189 +184 +184 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +158 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +140 +140 +133 +133 +129 +129 +129 +126 +125 +119 +120 +120 +116 +115 +110 +109 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +69 +69 +69 +64 +65 +58 +58 +54 +55 +54 +51 +51 +47 +47 +47 +42 +43 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +32 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +16 +15 +15 +15 +13 +13 +13 +12 +13 +14 +13 +14 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +14 +14 +14 +13 +14 +14 +13 +13 +14 +13 +13 +14 +14 +13 +15 +15 +17 +17 +16 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +42 +43 +46 +46 +51 +51 +50 +54 +55 +59 +58 +58 +64 +65 +68 +69 +69 +73 +72 +76 +76 +76 +82 +83 +86 +86 +86 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +115 +119 +119 +119 +125 +126 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +165 +165 +164 +169 +169 +173 +173 +173 +175 +175 +179 +179 +180 +183 +183 +185 +185 +189 +188 +189 +190 +191 +195 +195 +194 +197 +197 +196 +196 +196 +198 +198 +200 +200 +200 +200 +201 +203 +203 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +207 +204 +205 +205 +205 +204 +202 +202 +201 +200 +200 +200 +200 +198 +199 +198 +196 +196 +194 +195 +194 +191 +190 +189 +188 +189 +185 +185 +183 +182 +182 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +148 +147 +147 +143 +143 +139 +139 +140 +133 +133 +129 +129 +126 +125 +125 +119 +119 +116 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +77 +76 +72 +72 +72 +68 +68 +64 +64 +64 +58 +59 +54 +54 +55 +51 +50 +47 +47 +47 +43 +43 +41 +41 +42 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +13 +13 +13 +13 +14 +12 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +36 +41 +41 +41 +43 +43 +47 +47 +47 +51 +50 +54 +54 +54 +58 +59 +64 +64 +64 +68 +68 +72 +72 +73 +76 +76 +82 +82 +87 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +116 +119 +120 +125 +125 +126 +129 +129 +134 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +151 +151 +151 +157 +157 +161 +161 +161 +164 +165 +169 +169 +168 +173 +173 +175 +175 +178 +179 +179 +183 +183 +184 +184 +185 +188 +188 +189 +188 +188 +191 +190 +194 +195 +195 +196 +196 +199 +198 +200 +201 +201 +200 +201 +202 +202 +203 +205 +204 +204 +205 +205 +206 +206 +207 +206 +206 +206 +206 +206 +207 +207 +207 +206 +206 +206 +204 +205 +205 +204 +205 +202 +202 +202 +201 +201 +201 +200 +200 +199 +199 +197 +197 +196 +194 +195 +190 +190 +191 +189 +189 +185 +185 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +152 +147 +147 +143 +143 +140 +139 +139 +133 +134 +129 +129 +129 +126 +125 +120 +120 +119 +115 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +87 +86 +86 +82 +82 +82 +82 +82 +76 +76 +72 +72 +72 +68 +69 +64 +65 +65 +59 +58 +55 +55 +55 +51 +51 +47 +46 +42 +42 +43 +41 +41 +37 +37 +37 +33 +33 +33 +33 +33 +31 +31 +27 +27 +27 +25 +24 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +14 +13 +13 +13 +14 +14 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +24 +28 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +46 +47 +47 +50 +51 +54 +54 +54 +58 +58 +64 +64 +69 +68 +68 +72 +72 +76 +76 +77 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +99 +106 +105 +106 +110 +110 +115 +115 +119 +119 +119 +125 +125 +129 +129 +129 +133 +133 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +153 +157 +157 +161 +161 +164 +165 +165 +169 +169 +173 +173 +173 +175 +175 +175 +175 +175 +179 +179 +183 +183 +183 +184 +184 +189 +189 +190 +190 +191 +194 +194 +196 +196 +196 +198 +198 +200 +200 +200 +200 +200 +203 +202 +202 +204 +204 +204 +205 +205 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +205 +205 +204 +202 +202 +202 +200 +200 +201 +200 +201 +198 +199 +196 +197 +195 +194 +194 +190 +190 +188 +188 +188 +184 +184 +183 +183 +183 +179 +179 +175 +175 +174 +173 +173 +168 +169 +169 +165 +165 +161 +161 +158 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +130 +125 +125 +119 +119 +120 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +91 +90 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +71 +69 +68 +64 +65 +58 +58 +58 +55 +54 +51 +51 +51 +47 +47 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +14 +14 +13 +14 +14 +13 +13 +13 +14 +13 +14 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +14 +14 +13 +15 +15 +17 +17 +17 +19 +19 +21 +20 +21 +25 +25 +27 +27 +26 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +46 +51 +51 +51 +54 +55 +58 +59 +58 +65 +65 +68 +69 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +87 +90 +90 +96 +96 +101 +100 +100 +106 +105 +110 +109 +109 +115 +115 +115 +115 +115 +120 +120 +125 +126 +125 +130 +129 +133 +133 +138 +139 +139 +144 +144 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +176 +179 +179 +183 +183 +184 +184 +185 +188 +189 +191 +190 +190 +195 +195 +197 +197 +197 +198 +198 +200 +200 +201 +200 +201 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +204 +204 +205 +204 +204 +202 +202 +200 +201 +200 +200 +200 +198 +198 +198 +196 +197 +195 +194 +194 +190 +191 +189 +188 +188 +185 +185 +183 +182 +183 +179 +179 +175 +174 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +141 +133 +134 +130 +129 +126 +125 +125 +119 +120 +116 +115 +115 +109 +109 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +88 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +68 +68 +64 +64 +65 +65 +65 +58 +58 +54 +54 +54 +51 +51 +47 +46 +46 +43 +42 +41 +41 +37 +37 +37 +33 +33 +31 +31 +32 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +13 +13 +14 +14 +13 +13 +14 +14 +13 +14 +14 +13 +14 +13 +14 +14 +13 +13 +14 +14 +14 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +38 +37 +37 +41 +41 +43 +43 +43 +47 +47 +47 +47 +47 +51 +50 +54 +54 +55 +58 +58 +64 +64 +64 +68 +68 +72 +72 +75 +76 +76 +82 +82 +86 +86 +86 +90 +90 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +110 +112 +116 +116 +119 +119 +125 +125 +126 +129 +130 +134 +134 +134 +139 +139 +139 +139 +140 +143 +143 +147 +147 +147 +151 +151 +157 +157 +158 +161 +161 +165 +165 +169 +169 +169 +173 +173 +173 +173 +173 +175 +175 +179 +179 +179 +182 +182 +184 +185 +185 +189 +189 +190 +191 +194 +194 +194 +197 +197 +199 +198 +199 +201 +200 +200 +200 +201 +202 +202 +205 +204 +204 +204 +204 +206 +207 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +207 +206 +205 +204 +205 +204 +204 +203 +202 +202 +201 +201 +200 +200 +201 +198 +198 +196 +196 +195 +194 +194 +191 +191 +188 +188 +189 +185 +185 +183 +183 +182 +179 +179 +175 +175 +175 +173 +173 +169 +169 +170 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +148 +147 +147 +143 +143 +139 +140 +139 +133 +134 +129 +129 +127 +125 +125 +119 +120 +115 +116 +115 +109 +110 +106 +106 +105 +100 +100 +100 +100 +99 +96 +95 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +68 +68 +64 +65 +59 +58 +58 +54 +54 +51 +51 +51 +46 +47 +43 +43 +43 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +14 +14 +13 +14 +13 +14 +14 +13 +13 +14 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +13 +14 +13 +16 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +47 +47 +46 +50 +51 +54 +54 +55 +58 +58 +59 +58 +59 +64 +64 +68 +68 +68 +72 +71 +77 +76 +78 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +106 +106 +106 +110 +110 +116 +115 +116 +120 +119 +125 +125 +129 +129 +129 +133 +133 +140 +139 +140 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +172 +173 +174 +174 +175 +178 +179 +183 +183 +183 +185 +185 +188 +189 +188 +191 +191 +195 +195 +194 +196 +196 +198 +198 +198 +200 +201 +200 +201 +203 +202 +202 +204 +205 +204 +204 +204 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +207 +204 +205 +204 +204 +203 +202 +202 +201 +200 +200 +201 +200 +198 +198 +199 +199 +198 +196 +197 +195 +195 +194 +191 +190 +188 +189 +189 +184 +184 +182 +182 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +149 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +125 +125 +125 +119 +119 +115 +116 +116 +109 +110 +105 +106 +103 +100 +100 +96 +96 +90 +90 +91 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +69 +68 +64 +64 +65 +58 +58 +54 +55 +51 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +13 +13 +13 +14 +14 +13 +13 +14 +13 +13 +14 +13 +14 +13 +14 +13 +14 +14 +13 +13 +13 +13 +14 +13 +13 +15 +15 +17 +17 +18 +19 +19 +21 +21 +21 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +40 +41 +41 +41 +43 +43 +47 +46 +47 +51 +50 +55 +55 +55 +58 +58 +64 +64 +69 +68 +68 +72 +73 +76 +76 +76 +82 +82 +82 +82 +83 +86 +86 +90 +90 +90 +96 +96 +100 +100 +105 +106 +106 +110 +110 +115 +116 +115 +119 +119 +125 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +156 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +182 +184 +185 +185 +189 +188 +190 +191 +194 +194 +194 +196 +196 +198 +198 +199 +200 +201 +201 +200 +201 +202 +203 +205 +205 +205 +204 +204 +206 +206 +207 +207 +207 +206 +207 +207 +206 +206 +206 +206 +206 +207 +206 +204 +204 +204 +205 +205 +202 +202 +200 +200 +200 +200 +200 +198 +199 +200 +197 +197 +195 +195 +190 +190 +190 +189 +188 +185 +185 +184 +182 +183 +179 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +163 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +138 +139 +139 +133 +133 +128 +130 +130 +125 +125 +119 +119 +116 +115 +116 +110 +110 +106 +105 +105 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +69 +68 +64 +64 +64 +58 +58 +55 +55 +54 +50 +50 +47 +46 +47 +42 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +13 +13 +13 +14 +14 +14 +14 +14 +13 +13 +14 +13 +13 +14 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +26 +25 +25 +27 +27 +27 +27 +27 +31 +31 +32 +33 +33 +37 +37 +41 +40 +41 +43 +43 +47 +47 +51 +51 +50 +54 +54 +59 +59 +58 +65 +64 +64 +65 +65 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +96 +96 +96 +99 +100 +106 +106 +106 +110 +110 +116 +115 +115 +119 +120 +125 +125 +125 +129 +129 +133 +134 +135 +139 +139 +143 +143 +147 +147 +147 +151 +151 +156 +157 +157 +161 +161 +164 +165 +165 +169 +169 +173 +173 +172 +175 +175 +178 +179 +183 +183 +182 +184 +185 +188 +189 +189 +190 +190 +195 +194 +195 +197 +196 +198 +199 +199 +201 +201 +201 +200 +201 +203 +202 +204 +204 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +207 +204 +205 +205 +204 +205 +202 +202 +200 +201 +200 +200 +201 +198 +198 +196 +196 +196 +194 +194 +191 +191 +191 +188 +189 +185 +185 +185 +183 +182 +178 +179 +179 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +157 +157 +157 +151 +151 +148 +147 +147 +143 +143 +139 +139 +134 +133 +133 +129 +129 +125 +126 +125 +119 +119 +115 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +97 +90 +90 +86 +86 +83 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +65 +58 +59 +54 +55 +54 +51 +50 +47 +47 +47 +42 +42 +41 +40 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +14 +13 +14 +14 +13 +14 +14 +13 +13 +13 +14 +13 +14 +13 +14 +14 +13 +13 +14 +13 +14 +14 +14 +13 +13 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +32 +33 +33 +37 +37 +41 +41 +41 +42 +43 +47 +46 +47 +50 +50 +51 +51 +50 +55 +55 +58 +59 +59 +65 +65 +68 +69 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +91 +96 +96 +100 +99 +100 +106 +106 +110 +110 +110 +116 +116 +119 +120 +126 +126 +125 +129 +129 +134 +133 +134 +139 +140 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +185 +184 +185 +189 +189 +191 +191 +190 +195 +195 +196 +196 +196 +198 +198 +200 +201 +201 +200 +200 +203 +202 +204 +204 +204 +204 +204 +206 +206 +206 +207 +207 +207 +206 +207 +206 +207 +206 +206 +207 +207 +206 +205 +205 +204 +204 +204 +202 +203 +200 +200 +200 +200 +200 +200 +200 +200 +198 +198 +197 +196 +196 +194 +194 +190 +191 +189 +189 +189 +184 +184 +182 +183 +183 +179 +179 +175 +175 +175 +173 +173 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +152 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +126 +125 +125 +119 +119 +116 +115 +116 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +77 +72 +72 +73 +68 +68 +64 +64 +65 +59 +58 +54 +55 +51 +50 +51 +47 +47 +43 +43 +43 +41 +41 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +20 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +14 +13 +14 +14 +14 +13 +13 +13 +14 +14 +13 +14 +14 +13 +12 +15 +15 +17 +17 +18 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +33 +33 +33 +37 +38 +41 +41 +41 +43 +43 +47 +47 +50 +50 +51 +55 +55 +58 +58 +58 +64 +65 +68 +69 +68 +73 +72 +76 +76 +76 +82 +81 +86 +86 +86 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +116 +120 +119 +120 +125 +125 +129 +130 +130 +133 +133 +139 +139 +139 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +168 +169 +173 +173 +174 +175 +175 +179 +179 +182 +183 +183 +185 +185 +189 +188 +191 +190 +191 +195 +195 +196 +196 +196 +198 +198 +200 +201 +201 +200 +201 +202 +202 +203 +204 +204 +204 +204 +205 +206 +207 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +204 +204 +204 +204 +204 +202 +202 +200 +201 +201 +200 +201 +199 +198 +197 +196 +196 +195 +194 +191 +191 +190 +189 +188 +188 +188 +188 +185 +185 +183 +183 +182 +178 +178 +175 +174 +173 +173 +173 +169 +168 +164 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +140 +133 +133 +129 +129 +125 +125 +125 +120 +119 +116 +116 +116 +110 +109 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +73 +72 +72 +68 +68 +64 +64 +64 +59 +58 +55 +55 +55 +51 +50 +47 +47 +46 +43 +43 +40 +41 +41 +37 +37 +33 +33 +32 +31 +31 +26 +27 +25 +25 +25 +21 +21 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +16 +13 +13 +12 +13 +14 +14 +13 +14 +14 +13 +13 +14 +13 +14 +14 +14 +14 +13 +13 +13 +14 +14 +13 +14 +14 +13 +14 +13 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +18 +19 +19 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +37 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +51 +55 +55 +59 +59 +59 +65 +65 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +109 +115 +116 +120 +119 +126 +125 +125 +129 +129 +133 +133 +133 +139 +140 +143 +143 +143 +147 +147 +151 +151 +151 +158 +157 +161 +161 +161 +165 +165 +168 +169 +173 +173 +173 +175 +175 +179 +179 +178 +182 +182 +183 +182 +183 +184 +185 +188 +189 +188 +190 +191 +195 +194 +195 +196 +197 +198 +199 +200 +200 +200 +200 +200 +202 +202 +202 +205 +204 +205 +204 +204 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +207 +207 +207 +204 +205 +204 +204 +205 +203 +202 +202 +200 +200 +200 +201 +201 +201 +200 +199 +198 +198 +196 +196 +194 +195 +193 +190 +191 +189 +189 +184 +184 +184 +183 +182 +179 +179 +178 +175 +175 +173 +172 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +152 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +134 +129 +129 +125 +125 +125 +119 +119 +116 +115 +115 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +65 +65 +59 +58 +55 +54 +51 +50 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +26 +21 +20 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +14 +13 +13 +14 +14 +14 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +14 +13 +13 +14 +14 +13 +14 +13 +13 +15 +15 +17 +17 +18 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +46 +51 +50 +54 +54 +55 +58 +59 +65 +65 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +116 +115 +119 +119 +126 +126 +125 +129 +129 +133 +134 +133 +140 +139 +143 +143 +143 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +182 +183 +184 +185 +185 +189 +188 +190 +190 +194 +195 +194 +196 +197 +198 +198 +199 +200 +200 +201 +200 +200 +200 +201 +202 +202 +202 +204 +204 +204 +204 +205 +206 +207 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +205 +204 +204 +204 +205 +202 +203 +201 +200 +200 +200 +200 +198 +198 +196 +197 +196 +195 +194 +190 +191 +190 +189 +188 +185 +184 +185 +182 +182 +179 +178 +179 +175 +175 +173 +173 +169 +169 +169 +164 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +134 +134 +129 +130 +125 +125 +123 +119 +120 +116 +116 +109 +110 +110 +106 +106 +99 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +68 +68 +68 +64 +64 +59 +58 +58 +54 +54 +50 +50 +50 +47 +47 +43 +42 +42 +41 +41 +37 +37 +37 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +19 +19 +19 +17 +17 +15 +15 +15 +14 +15 +13 +13 +13 +12 +13 +13 +14 +14 +13 +13 +14 +14 +14 +13 +13 +14 +14 +13 +14 +14 +14 +14 +14 +13 +14 +13 +13 +13 +14 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +34 +33 +37 +37 +40 +41 +41 +43 +43 +47 +47 +46 +50 +50 +54 +54 +54 +58 +58 +64 +64 +65 +68 +68 +72 +72 +72 +76 +76 +82 +82 +86 +85 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +109 +110 +115 +116 +115 +119 +119 +125 +125 +126 +129 +129 +133 +133 +140 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +174 +175 +175 +179 +179 +183 +182 +183 +185 +184 +189 +188 +188 +191 +190 +195 +194 +194 +196 +197 +198 +198 +199 +201 +200 +200 +200 +201 +202 +203 +204 +204 +204 +204 +204 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +204 +205 +204 +205 +203 +203 +203 +201 +200 +200 +200 +201 +198 +198 +196 +197 +196 +195 +195 +191 +190 +190 +189 +189 +185 +185 +185 +182 +183 +179 +179 +176 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +130 +130 +129 +125 +126 +119 +119 +119 +115 +116 +110 +110 +110 +105 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +72 +73 +68 +69 +68 +65 +64 +58 +58 +58 +54 +54 +50 +50 +51 +47 +46 +43 +43 +43 +41 +41 +36 +37 +33 +33 +33 +31 +31 +27 +27 +28 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +16 +13 +13 +12 +13 +13 +14 +13 +13 +14 +14 +13 +13 +13 +14 +14 +14 +13 +13 +14 +14 +14 +13 +13 +13 +14 +14 +14 +13 +13 +14 +13 +13 +13 +13 +15 +15 +17 +16 +18 +19 +20 +21 +21 +21 +25 +25 +27 +27 +28 +31 +31 +33 +33 +37 +37 +37 +41 +40 +43 +43 +43 +46 +47 +51 +50 +51 +55 +55 +58 +58 +59 +64 +64 +69 +68 +68 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +109 +115 +116 +120 +120 +119 +125 +126 +129 +129 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +172 +175 +175 +179 +179 +179 +183 +182 +184 +185 +184 +188 +189 +191 +191 +191 +195 +194 +196 +197 +197 +198 +198 +200 +200 +201 +200 +200 +203 +202 +204 +204 +205 +205 +205 +206 +206 +206 +206 +206 +207 +206 +207 +206 +207 +207 +206 +206 +206 +206 +206 +206 +205 +204 +205 +204 +204 +202 +202 +202 +201 +200 +201 +200 +200 +198 +198 +197 +196 +197 +194 +195 +190 +190 +191 +188 +189 +184 +185 +183 +182 +183 +178 +178 +175 +175 +175 +173 +173 +173 +173 +173 +169 +169 +165 +165 +166 +161 +160 +157 +157 +157 +151 +151 +147 +147 +144 +143 +143 +139 +139 +133 +133 +133 +129 +130 +126 +126 +126 +119 +119 +116 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +59 +59 +54 +54 +55 +51 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +20 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +14 +14 +14 +14 +14 +14 +14 +13 +14 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +14 +14 +13 +14 +14 +13 +13 +12 +15 +15 +17 +17 +18 +19 +19 +21 +21 +24 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +40 +41 +43 +43 +43 +47 +46 +50 +51 +51 +55 +55 +57 +59 +64 +64 +65 +69 +68 +72 +72 +72 +77 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +99 +100 +100 +105 +106 +110 +109 +116 +115 +116 +119 +120 +126 +125 +125 +129 +129 +133 +133 +134 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +175 +175 +175 +178 +178 +183 +182 +183 +185 +185 +188 +188 +189 +191 +190 +194 +194 +196 +196 +197 +198 +199 +200 +201 +200 +200 +200 +201 +200 +200 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +203 +200 +200 +201 +200 +200 +199 +199 +196 +196 +196 +195 +194 +190 +190 +190 +188 +188 +185 +185 +185 +183 +182 +178 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +164 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +144 +139 +139 +134 +133 +133 +130 +129 +126 +125 +126 +119 +120 +115 +115 +110 +109 +109 +105 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +73 +74 +68 +68 +64 +65 +58 +59 +58 +55 +55 +50 +50 +50 +46 +47 +46 +47 +47 +43 +42 +41 +41 +41 +37 +37 +33 +33 +32 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +14 +13 +13 +14 +13 +14 +13 +14 +14 +14 +14 +14 +13 +13 +13 +14 +14 +14 +14 +13 +14 +14 +14 +13 +13 +13 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +48 +47 +47 +51 +51 +54 +55 +54 +58 +58 +64 +64 +64 +68 +68 +72 +73 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +96 +96 +96 +100 +100 +105 +105 +106 +110 +109 +115 +115 +116 +119 +120 +126 +126 +125 +130 +129 +133 +133 +133 +140 +139 +143 +143 +147 +147 +148 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +184 +184 +189 +188 +188 +190 +191 +194 +194 +194 +196 +196 +197 +197 +197 +198 +198 +201 +200 +201 +200 +201 +203 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +207 +206 +207 +206 +206 +204 +204 +205 +205 +205 +202 +202 +201 +200 +200 +200 +200 +199 +198 +198 +196 +197 +194 +194 +194 +190 +190 +189 +189 +189 +184 +184 +183 +182 +183 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +166 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +144 +139 +139 +140 +133 +133 +129 +129 +126 +125 +125 +119 +119 +115 +115 +115 +109 +109 +106 +106 +106 +100 +100 +96 +95 +96 +90 +90 +86 +86 +87 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +65 +64 +58 +58 +54 +54 +54 +51 +50 +47 +47 +47 +43 +42 +41 +41 +39 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +13 +14 +13 +14 +14 +13 +13 +13 +14 +13 +13 +13 +14 +14 +14 +13 +13 +13 +14 +14 +14 +14 +13 +13 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +51 +55 +55 +54 +58 +58 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +87 +86 +86 +90 +91 +96 +96 +96 +100 +100 +106 +105 +106 +110 +110 +115 +116 +116 +119 +119 +125 +125 +126 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +179 +179 +179 +182 +183 +185 +184 +184 +188 +188 +188 +188 +188 +190 +190 +194 +195 +194 +197 +197 +198 +199 +200 +201 +200 +200 +200 +203 +202 +202 +204 +204 +204 +205 +204 +206 +207 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +204 +204 +205 +204 +204 +202 +202 +202 +201 +201 +201 +200 +200 +199 +199 +197 +196 +196 +194 +194 +191 +191 +191 +188 +189 +184 +185 +183 +182 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +151 +151 +147 +148 +144 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +126 +119 +120 +115 +116 +116 +110 +110 +106 +105 +106 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +77 +76 +76 +76 +76 +72 +72 +68 +68 +69 +64 +64 +59 +59 +56 +55 +54 +50 +50 +46 +47 +46 +43 +43 +41 +41 +41 +37 +37 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +23 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +14 +13 +13 +14 +13 +13 +13 +14 +14 +13 +14 +14 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +14 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +51 +54 +54 +58 +58 +65 +65 +64 +68 +68 +72 +72 +72 +76 +77 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +101 +106 +106 +110 +110 +115 +115 +115 +119 +119 +125 +126 +125 +129 +129 +129 +129 +130 +133 +133 +139 +139 +139 +143 +143 +147 +148 +148 +151 +152 +157 +156 +161 +161 +161 +165 +165 +169 +169 +169 +173 +172 +173 +173 +173 +175 +175 +178 +178 +179 +183 +183 +185 +184 +186 +188 +189 +191 +191 +194 +194 +195 +196 +196 +198 +198 +198 +200 +200 +200 +200 +200 +202 +203 +205 +204 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +207 +206 +206 +206 +204 +204 +204 +204 +204 +203 +202 +200 +200 +201 +200 +201 +198 +198 +197 +197 +197 +195 +195 +190 +190 +191 +189 +189 +185 +185 +184 +183 +182 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +162 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +126 +119 +119 +115 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +71 +68 +68 +64 +64 +59 +58 +58 +54 +54 +51 +51 +51 +47 +47 +47 +47 +47 +43 +43 +41 +41 +41 +37 +36 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +18 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +14 +13 +13 +13 +13 +13 +14 +14 +13 +14 +13 +14 +13 +13 +14 +14 +14 +13 +14 +14 +14 +13 +14 +13 +13 +15 +15 +18 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +32 +37 +37 +41 +40 +41 +43 +43 +47 +47 +51 +51 +51 +55 +55 +59 +59 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +87 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +116 +119 +120 +119 +126 +125 +130 +129 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +165 +165 +165 +169 +169 +173 +172 +173 +175 +175 +179 +178 +182 +183 +183 +184 +185 +188 +189 +189 +191 +190 +195 +194 +195 +196 +196 +198 +199 +199 +200 +201 +201 +201 +201 +203 +203 +204 +205 +204 +204 +204 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +205 +204 +202 +202 +200 +200 +201 +201 +200 +199 +198 +196 +196 +196 +195 +194 +190 +190 +190 +188 +189 +184 +184 +184 +183 +183 +179 +179 +179 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +148 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +126 +125 +119 +120 +119 +116 +116 +110 +110 +110 +106 +106 +105 +106 +106 +100 +99 +96 +96 +96 +90 +90 +87 +87 +87 +82 +82 +76 +76 +72 +73 +72 +68 +68 +64 +65 +65 +59 +59 +55 +55 +54 +51 +51 +46 +46 +47 +43 +43 +41 +42 +37 +37 +37 +33 +34 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +20 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +13 +12 +13 +13 +14 +14 +14 +13 +13 +14 +14 +13 +13 +14 +13 +14 +14 +14 +14 +13 +14 +13 +13 +13 +14 +13 +13 +14 +14 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +32 +37 +37 +41 +41 +44 +43 +43 +46 +47 +47 +46 +47 +51 +51 +54 +55 +55 +58 +58 +65 +64 +64 +68 +68 +72 +72 +73 +77 +76 +82 +82 +87 +86 +86 +90 +90 +96 +96 +96 +100 +100 +100 +100 +100 +106 +106 +109 +110 +110 +116 +115 +119 +120 +122 +125 +125 +129 +130 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +147 +147 +147 +152 +152 +157 +157 +157 +161 +161 +164 +165 +166 +169 +169 +173 +173 +175 +175 +174 +179 +178 +182 +183 +183 +185 +184 +189 +188 +189 +191 +190 +194 +194 +195 +196 +197 +198 +198 +200 +201 +201 +200 +200 +203 +202 +202 +204 +205 +205 +205 +204 +206 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +207 +206 +206 +205 +205 +205 +204 +204 +202 +202 +202 +200 +200 +201 +200 +200 +198 +198 +196 +196 +196 +195 +195 +190 +191 +191 +189 +189 +185 +185 +183 +182 +183 +179 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +148 +147 +143 +143 +140 +139 +139 +133 +133 +129 +129 +129 +125 +125 +120 +119 +119 +116 +116 +110 +110 +110 +106 +106 +100 +100 +101 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +72 +72 +72 +68 +68 +64 +64 +64 +59 +59 +54 +55 +53 +50 +50 +47 +47 +43 +43 +43 +40 +41 +37 +37 +37 +33 +33 +31 +30 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +14 +14 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +14 +14 +13 +14 +14 +14 +14 +14 +13 +14 +14 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +41 +41 +41 +43 +43 +47 +47 +47 +50 +50 +55 +55 +54 +55 +54 +58 +58 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +98 +100 +100 +106 +106 +110 +110 +110 +115 +116 +119 +120 +120 +125 +125 +125 +125 +125 +129 +129 +133 +133 +134 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +168 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +182 +184 +185 +188 +188 +189 +190 +190 +194 +194 +194 +197 +197 +198 +199 +198 +200 +201 +200 +200 +200 +203 +202 +204 +204 +205 +204 +204 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +204 +204 +204 +205 +204 +202 +202 +201 +201 +201 +201 +200 +198 +198 +197 +197 +196 +195 +195 +191 +191 +190 +189 +188 +185 +184 +184 +182 +182 +179 +178 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +148 +147 +148 +143 +143 +139 +139 +139 +133 +133 +129 +129 +130 +125 +125 +119 +119 +115 +116 +116 +110 +110 +106 +106 +106 +100 +100 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +68 +68 +65 +64 +58 +58 +59 +54 +54 +50 +50 +51 +46 +47 +43 +43 +43 +41 +41 +37 +36 +34 +33 +33 +31 +31 +27 +27 +27 +25 +25 +22 +21 +21 +19 +19 +17 +17 +16 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +14 +13 +14 +14 +14 +14 +13 +14 +13 +14 +14 +13 +13 +14 +14 +13 +13 +14 +13 +14 +13 +13 +14 +13 +13 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +47 +47 +47 +51 +51 +55 +55 +55 +58 +58 +64 +64 +65 +68 +68 +72 +72 +72 +76 +76 +82 +82 +83 +86 +86 +90 +90 +96 +96 +96 +100 +101 +106 +106 +106 +110 +110 +109 +110 +110 +116 +115 +119 +120 +120 +125 +125 +129 +129 +131 +133 +133 +139 +139 +143 +143 +144 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +179 +178 +179 +182 +183 +185 +184 +185 +188 +189 +191 +191 +191 +194 +195 +196 +197 +197 +198 +199 +201 +200 +201 +200 +201 +202 +202 +205 +205 +204 +204 +205 +206 +207 +206 +207 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +204 +205 +205 +204 +205 +202 +202 +201 +200 +200 +200 +201 +198 +198 +198 +196 +196 +195 +194 +195 +191 +191 +189 +188 +188 +185 +185 +183 +183 +183 +179 +179 +175 +175 +172 +173 +173 +169 +169 +165 +165 +165 +161 +161 +161 +160 +161 +157 +157 +151 +151 +151 +148 +147 +143 +143 +141 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +120 +119 +115 +115 +115 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +93 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +58 +59 +54 +54 +55 +50 +50 +47 +47 +43 +43 +42 +41 +40 +37 +37 +37 +33 +33 +31 +30 +31 +27 +27 +25 +25 +25 +21 +22 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +12 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +14 +14 +14 +13 +14 +14 +14 +13 +13 +13 +14 +13 +13 +13 +14 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +40 +43 +43 +43 +43 +43 +46 +47 +51 +51 +50 +54 +55 +58 +59 +59 +64 +64 +68 +69 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +108 +109 +110 +116 +115 +120 +119 +119 +125 +126 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +158 +161 +161 +165 +165 +169 +169 +169 +173 +173 +174 +174 +175 +179 +179 +183 +183 +182 +185 +184 +189 +188 +188 +190 +190 +194 +194 +197 +197 +196 +199 +198 +200 +200 +200 +200 +201 +200 +200 +200 +202 +202 +204 +204 +204 +205 +204 +206 +207 +207 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +205 +204 +202 +203 +200 +200 +201 +201 +201 +198 +198 +199 +196 +196 +194 +194 +190 +190 +191 +188 +189 +184 +185 +185 +183 +183 +183 +183 +182 +179 +178 +175 +175 +175 +173 +173 +169 +168 +169 +165 +165 +161 +161 +157 +157 +156 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +130 +125 +126 +120 +119 +116 +115 +115 +110 +109 +106 +106 +106 +100 +100 +96 +96 +96 +91 +90 +86 +86 +86 +82 +81 +76 +77 +76 +73 +72 +68 +68 +65 +64 +64 +58 +58 +54 +54 +55 +51 +51 +47 +46 +47 +42 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +16 +15 +15 +15 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +14 +14 +13 +13 +14 +13 +14 +14 +14 +13 +13 +14 +14 +13 +14 +13 +13 +14 +13 +12 +15 +15 +16 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +48 +50 +50 +54 +55 +58 +59 +58 +64 +64 +64 +64 +64 +68 +68 +68 +68 +68 +72 +72 +76 +76 +77 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +105 +110 +110 +110 +116 +115 +120 +120 +120 +125 +126 +129 +129 +130 +133 +134 +139 +139 +142 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +185 +184 +185 +189 +188 +190 +191 +191 +194 +195 +196 +196 +196 +198 +199 +200 +201 +201 +200 +200 +203 +202 +202 +205 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +207 +206 +205 +206 +206 +206 +206 +207 +204 +204 +204 +204 +204 +202 +202 +202 +200 +200 +200 +200 +198 +198 +199 +196 +196 +195 +194 +194 +190 +191 +190 +190 +191 +188 +188 +184 +185 +184 +183 +183 +179 +179 +177 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +157 +157 +157 +151 +151 +147 +147 +147 +143 +144 +140 +139 +134 +134 +133 +130 +129 +125 +125 +126 +119 +120 +115 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +69 +64 +64 +64 +58 +58 +55 +55 +55 +51 +51 +47 +47 +47 +42 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +28 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +14 +13 +14 +13 +14 +13 +13 +13 +13 +14 +14 +14 +13 +14 +13 +13 +13 +13 +14 +14 +13 +13 +14 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +34 +37 +37 +41 +41 +43 +43 +42 +47 +47 +50 +51 +50 +55 +54 +54 +54 +54 +59 +58 +64 +65 +65 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +99 +106 +106 +106 +110 +110 +116 +115 +116 +119 +120 +126 +125 +129 +130 +129 +133 +133 +139 +139 +140 +143 +143 +143 +143 +143 +147 +147 +151 +151 +152 +157 +157 +161 +161 +160 +165 +165 +169 +169 +173 +173 +173 +175 +174 +178 +178 +179 +182 +183 +185 +185 +184 +189 +189 +190 +191 +190 +194 +195 +196 +197 +197 +198 +198 +200 +200 +201 +201 +200 +203 +203 +204 +204 +204 +204 +204 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +205 +204 +205 +204 +204 +202 +202 +200 +200 +200 +200 +200 +200 +200 +200 +198 +199 +197 +196 +196 +195 +195 +190 +191 +190 +188 +189 +184 +185 +183 +183 +183 +179 +178 +174 +175 +175 +173 +173 +173 +172 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +155 +151 +151 +147 +147 +143 +143 +143 +139 +140 +133 +134 +134 +129 +129 +125 +125 +125 +120 +120 +116 +115 +116 +110 +110 +106 +106 +101 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +65 +58 +58 +54 +55 +51 +50 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +13 +14 +13 +14 +13 +13 +14 +13 +14 +14 +14 +14 +14 +13 +14 +14 +14 +14 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +26 +27 +27 +31 +31 +33 +33 +33 +37 +37 +37 +37 +36 +41 +41 +43 +43 +43 +47 +47 +50 +51 +52 +55 +54 +59 +58 +64 +64 +64 +68 +68 +72 +72 +73 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +105 +106 +106 +110 +110 +116 +115 +115 +119 +119 +125 +125 +126 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +158 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +182 +183 +184 +185 +185 +189 +188 +190 +190 +195 +194 +194 +197 +197 +198 +199 +198 +200 +200 +201 +200 +200 +202 +202 +204 +204 +204 +205 +204 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +203 +200 +200 +200 +200 +200 +199 +198 +197 +196 +197 +194 +194 +190 +190 +190 +188 +189 +185 +185 +185 +183 +182 +183 +183 +182 +178 +179 +175 +175 +175 +173 +173 +168 +169 +167 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +146 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +130 +125 +125 +119 +120 +116 +115 +116 +110 +110 +105 +106 +106 +100 +101 +96 +96 +96 +90 +90 +86 +86 +86 +83 +82 +76 +76 +77 +72 +72 +68 +69 +65 +64 +64 +58 +59 +55 +55 +55 +50 +51 +47 +47 +47 +43 +43 +40 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +26 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +14 +14 +13 +13 +14 +14 +14 +13 +13 +14 +13 +14 +13 +13 +14 +14 +14 +13 +14 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +39 +41 +41 +43 +43 +47 +47 +47 +50 +51 +54 +54 +55 +59 +59 +65 +65 +64 +68 +68 +72 +72 +73 +76 +76 +82 +82 +85 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +116 +116 +120 +119 +125 +125 +126 +130 +129 +133 +133 +140 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +172 +173 +175 +175 +179 +179 +183 +183 +182 +184 +185 +188 +189 +189 +190 +190 +195 +195 +194 +196 +196 +198 +198 +199 +200 +200 +201 +201 +201 +202 +202 +204 +204 +204 +205 +204 +206 +206 +206 +206 +206 +207 +206 +207 +206 +207 +206 +207 +207 +207 +206 +205 +204 +204 +204 +203 +202 +203 +201 +200 +200 +201 +200 +198 +198 +196 +196 +197 +194 +194 +194 +194 +194 +191 +191 +189 +189 +189 +185 +185 +182 +183 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +134 +134 +133 +129 +129 +125 +125 +125 +120 +120 +115 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +83 +82 +82 +76 +76 +72 +72 +73 +69 +68 +64 +65 +64 +59 +59 +54 +54 +54 +51 +50 +47 +47 +47 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +24 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +14 +14 +13 +13 +14 +14 +14 +14 +13 +13 +13 +14 +14 +13 +14 +14 +13 +14 +13 +13 +14 +14 +13 +14 +13 +14 +14 +14 +14 +13 +15 +15 +15 +17 +17 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +30 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +51 +54 +55 +58 +58 +59 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +116 +119 +120 +126 +126 +125 +129 +130 +134 +133 +133 +139 +139 +144 +143 +143 +147 +147 +151 +151 +151 +157 +158 +161 +161 +161 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +182 +183 +185 +185 +184 +188 +189 +191 +190 +190 +194 +195 +196 +196 +197 +198 +199 +200 +200 +200 +200 +200 +202 +203 +204 +204 +205 +204 +204 +205 +204 +204 +206 +206 +206 +207 +207 +206 +207 +207 +206 +206 +206 +207 +206 +206 +204 +204 +204 +204 +205 +202 +203 +202 +200 +201 +201 +200 +200 +201 +201 +198 +199 +199 +196 +197 +194 +195 +193 +190 +191 +188 +188 +185 +185 +185 +183 +182 +179 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +164 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +130 +129 +125 +126 +126 +119 +119 +115 +116 +116 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +65 +58 +59 +55 +54 +51 +51 +50 +47 +46 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +26 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +12 +13 +14 +13 +14 +14 +14 +13 +14 +13 +14 +14 +14 +14 +14 +14 +14 +13 +13 +13 +14 +13 +13 +14 +14 +14 +14 +14 +13 +13 +13 +12 +15 +15 +17 +17 +18 +19 +19 +21 +21 +25 +25 +25 +28 +27 +31 +31 +31 +32 +33 +37 +37 +37 +42 +41 +43 +42 +43 +47 +46 +50 +51 +53 +55 +55 +58 +59 +65 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +83 +86 +86 +90 +90 +90 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +116 +119 +120 +126 +126 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +158 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +184 +185 +185 +188 +188 +190 +191 +195 +194 +194 +196 +197 +198 +198 +198 +200 +201 +200 +200 +200 +202 +202 +204 +205 +204 +204 +204 +206 +206 +206 +206 +206 +207 +206 +206 +207 +207 +206 +206 +206 +206 +206 +204 +204 +205 +205 +205 +204 +204 +202 +202 +203 +200 +200 +201 +201 +199 +199 +199 +196 +196 +194 +194 +195 +191 +191 +189 +189 +188 +185 +184 +183 +183 +182 +178 +178 +175 +175 +175 +173 +173 +169 +169 +166 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +140 +139 +133 +133 +129 +129 +129 +125 +126 +120 +119 +116 +116 +116 +110 +111 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +65 +65 +64 +59 +59 +54 +54 +55 +51 +51 +47 +46 +47 +43 +43 +41 +40 +41 +37 +37 +33 +33 +34 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +13 +14 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +14 +14 +13 +13 +14 +13 +13 +13 +13 +13 +14 +14 +13 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +42 +42 +43 +47 +47 +50 +51 +51 +54 +55 +58 +58 +58 +64 +64 +68 +68 +69 +72 +73 +76 +76 +77 +82 +82 +86 +86 +89 +90 +90 +96 +96 +100 +100 +100 +106 +105 +110 +110 +110 +115 +116 +120 +119 +119 +125 +125 +129 +129 +129 +133 +133 +140 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +178 +179 +182 +183 +184 +185 +185 +188 +189 +190 +190 +190 +194 +194 +195 +195 +194 +195 +194 +196 +196 +197 +199 +198 +200 +200 +200 +200 +201 +202 +202 +204 +204 +204 +204 +204 +206 +206 +207 +206 +207 +206 +206 +207 +206 +206 +205 +207 +206 +207 +206 +206 +206 +205 +204 +205 +205 +204 +202 +202 +202 +200 +201 +200 +201 +200 +198 +198 +197 +197 +196 +195 +195 +190 +191 +191 +188 +189 +185 +184 +182 +183 +182 +178 +179 +175 +175 +175 +173 +173 +173 +172 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +144 +143 +143 +139 +139 +133 +133 +134 +129 +129 +126 +125 +125 +119 +120 +116 +116 +115 +110 +109 +106 +106 +106 +100 +100 +96 +95 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +65 +64 +58 +58 +55 +54 +55 +50 +50 +46 +46 +44 +43 +43 +41 +41 +37 +37 +37 +33 +33 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +20 +19 +19 +17 +17 +15 +15 +16 +14 +15 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +14 +14 +13 +14 +13 +14 +13 +14 +13 +13 +14 +13 +14 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +50 +51 +54 +54 +59 +59 +65 +65 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +109 +116 +115 +115 +120 +119 +125 +125 +125 +129 +130 +133 +133 +134 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +172 +175 +175 +175 +175 +175 +179 +179 +183 +183 +183 +185 +185 +189 +189 +189 +190 +191 +194 +195 +197 +196 +197 +199 +198 +200 +200 +200 +200 +200 +201 +200 +200 +202 +202 +204 +204 +204 +204 +205 +206 +206 +206 +206 +207 +207 +206 +206 +207 +206 +206 +207 +206 +206 +206 +204 +204 +205 +204 +204 +202 +203 +200 +200 +200 +200 +200 +198 +198 +196 +196 +197 +194 +194 +191 +191 +191 +189 +189 +185 +185 +184 +183 +183 +179 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +162 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +140 +133 +133 +133 +130 +129 +125 +125 +126 +119 +119 +116 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +68 +68 +65 +64 +58 +58 +58 +55 +55 +51 +50 +51 +47 +47 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +32 +31 +31 +27 +26 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +14 +13 +14 +14 +13 +14 +13 +13 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +48 +47 +47 +51 +50 +54 +54 +54 +58 +58 +64 +64 +65 +68 +68 +72 +72 +72 +76 +76 +82 +82 +83 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +109 +109 +110 +110 +110 +115 +115 +119 +119 +120 +125 +125 +129 +129 +130 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +176 +178 +179 +182 +183 +184 +184 +185 +189 +188 +191 +191 +190 +194 +194 +195 +194 +195 +197 +196 +199 +198 +198 +200 +201 +200 +200 +202 +202 +203 +204 +204 +204 +204 +204 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +204 +205 +204 +204 +203 +203 +203 +200 +201 +200 +200 +200 +198 +198 +197 +197 +196 +195 +195 +191 +190 +190 +188 +189 +185 +184 +185 +182 +183 +179 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +144 +144 +139 +139 +133 +133 +129 +130 +130 +125 +125 +119 +119 +120 +115 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +91 +86 +86 +83 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +64 +64 +65 +58 +58 +54 +54 +54 +51 +50 +47 +47 +45 +43 +43 +40 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +14 +14 +13 +14 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +34 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +50 +51 +54 +54 +54 +59 +58 +64 +64 +65 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +85 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +116 +119 +119 +126 +125 +129 +130 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +172 +173 +174 +175 +175 +179 +179 +183 +183 +182 +185 +184 +184 +185 +184 +188 +189 +191 +191 +191 +194 +195 +197 +196 +197 +198 +199 +201 +200 +200 +201 +200 +203 +202 +204 +204 +204 +204 +204 +206 +206 +206 +207 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +201 +200 +200 +200 +201 +198 +199 +198 +196 +196 +195 +194 +195 +190 +191 +189 +189 +185 +185 +185 +183 +183 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +143 +143 +143 +140 +139 +133 +133 +133 +129 +130 +125 +125 +125 +119 +119 +115 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +59 +59 +55 +54 +50 +50 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +37 +36 +37 +33 +32 +31 +31 +31 +27 +27 +25 +25 +22 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +12 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +14 +13 +14 +14 +14 +13 +14 +13 +13 +13 +13 +13 +14 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +24 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +46 +50 +51 +50 +54 +54 +58 +58 +65 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +115 +115 +115 +119 +119 +125 +125 +126 +129 +129 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +148 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +173 +173 +173 +175 +175 +179 +179 +179 +182 +183 +184 +185 +188 +189 +188 +191 +190 +194 +194 +194 +197 +196 +198 +199 +198 +201 +200 +201 +200 +200 +202 +202 +204 +204 +205 +205 +205 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +204 +204 +204 +204 +205 +202 +202 +200 +200 +200 +201 +200 +198 +198 +199 +199 +199 +197 +197 +194 +195 +194 +190 +191 +189 +189 +189 +184 +184 +183 +183 +182 +178 +179 +175 +175 +175 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +130 +126 +125 +119 +119 +116 +116 +116 +110 +110 +106 +106 +106 +100 +100 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +83 +76 +76 +72 +72 +68 +68 +68 +64 +64 +59 +58 +58 +55 +55 +54 +55 +54 +51 +51 +47 +47 +47 +43 +43 +41 +41 +38 +37 +37 +33 +33 +31 +30 +31 +27 +27 +25 +24 +25 +21 +21 +19 +18 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +14 +14 +13 +13 +14 +13 +13 +13 +13 +14 +13 +14 +13 +14 +13 +13 +13 +14 +13 +14 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +41 +40 +41 +43 +43 +46 +47 +47 +50 +51 +54 +55 +55 +58 +58 +64 +64 +64 +68 +68 +72 +72 +73 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +100 +100 +100 +106 +106 +110 +109 +110 +115 +116 +120 +119 +122 +125 +126 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +147 +147 +147 +151 +151 +157 +157 +158 +161 +161 +165 +165 +168 +169 +169 +173 +173 +174 +175 +175 +178 +178 +183 +183 +183 +185 +185 +189 +188 +189 +190 +191 +194 +195 +195 +197 +197 +198 +198 +200 +200 +200 +200 +200 +202 +202 +202 +204 +204 +204 +204 +204 +206 +206 +207 +206 +207 +206 +206 +206 +206 +207 +207 +206 +206 +206 +205 +204 +204 +204 +204 +202 +202 +202 +200 +200 +201 +201 +200 +198 +198 +196 +196 +197 +194 +194 +190 +190 +191 +189 +188 +184 +185 +183 +182 +183 +178 +178 +175 +175 +174 +173 +173 +169 +168 +169 +165 +165 +161 +161 +161 +157 +157 +151 +152 +151 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +125 +126 +125 +119 +119 +115 +115 +116 +109 +110 +106 +106 +103 +100 +100 +96 +96 +89 +90 +90 +86 +86 +82 +82 +82 +76 +76 +76 +76 +76 +72 +72 +68 +68 +69 +65 +64 +58 +58 +55 +54 +54 +51 +51 +47 +47 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +16 +15 +15 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +14 +13 +14 +14 +14 +14 +13 +14 +14 +14 +14 +13 +13 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +40 +41 +43 +43 +47 +46 +47 +50 +50 +55 +55 +55 +59 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +102 +106 +106 +109 +109 +116 +115 +116 +119 +119 +126 +125 +125 +129 +129 +129 +129 +130 +133 +133 +139 +139 +139 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +168 +169 +169 +173 +173 +175 +175 +175 +178 +179 +183 +183 +183 +185 +185 +189 +188 +190 +190 +191 +195 +194 +196 +196 +197 +199 +199 +201 +200 +200 +200 +201 +202 +202 +202 +204 +205 +204 +204 +204 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +205 +204 +204 +204 +204 +203 +203 +202 +200 +201 +200 +201 +201 +198 +198 +196 +196 +195 +194 +194 +190 +190 +188 +189 +189 +184 +185 +183 +183 +182 +178 +179 +175 +175 +175 +173 +173 +169 +168 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +130 +129 +125 +125 +119 +119 +118 +116 +115 +110 +109 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +71 +69 +68 +65 +64 +58 +58 +58 +55 +54 +51 +50 +51 +47 +47 +42 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +14 +14 +14 +14 +13 +14 +14 +14 +13 +13 +14 +13 +13 +14 +14 +14 +13 +13 +14 +14 +14 +13 +14 +13 +12 +15 +15 +17 +17 +20 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +50 +55 +55 +54 +58 +58 +64 +64 +65 +68 +68 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +87 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +115 +116 +115 +115 +119 +119 +125 +125 +125 +129 +129 +133 +133 +132 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +182 +182 +182 +185 +184 +188 +188 +188 +190 +190 +195 +194 +195 +197 +196 +198 +198 +198 +200 +200 +200 +200 +200 +202 +203 +204 +204 +205 +204 +204 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +205 +202 +202 +200 +200 +200 +200 +200 +199 +198 +197 +196 +196 +194 +194 +191 +190 +190 +188 +188 +185 +185 +185 +182 +183 +179 +179 +179 +175 +174 +173 +173 +170 +169 +169 +165 +165 +161 +161 +161 +157 +157 +156 +157 +157 +151 +151 +148 +147 +147 +143 +143 +139 +139 +137 +133 +133 +129 +129 +125 +125 +126 +120 +119 +115 +116 +115 +110 +110 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +59 +59 +54 +54 +51 +51 +51 +47 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +13 +14 +13 +13 +14 +13 +13 +14 +13 +14 +14 +14 +14 +14 +14 +13 +14 +13 +14 +14 +13 +14 +14 +14 +13 +14 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +32 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +51 +50 +51 +51 +55 +55 +58 +58 +58 +64 +64 +68 +68 +69 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +96 +96 +96 +100 +100 +105 +105 +106 +110 +110 +115 +116 +119 +120 +119 +126 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +160 +161 +165 +165 +168 +169 +169 +173 +173 +175 +175 +175 +178 +179 +183 +183 +182 +184 +185 +189 +189 +188 +191 +190 +194 +194 +195 +196 +197 +198 +198 +201 +201 +200 +200 +200 +202 +202 +202 +204 +204 +205 +204 +204 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +205 +204 +204 +204 +204 +202 +203 +202 +200 +200 +200 +200 +200 +198 +198 +197 +196 +196 +194 +195 +190 +190 +191 +189 +188 +184 +184 +183 +183 +183 +178 +178 +175 +175 +175 +172 +173 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +154 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +130 +129 +129 +125 +125 +119 +119 +120 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +69 +64 +64 +59 +58 +54 +54 +55 +50 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +13 +13 +14 +13 +14 +14 +13 +14 +13 +14 +14 +13 +13 +13 +14 +13 +13 +14 +14 +13 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +50 +54 +55 +56 +59 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +105 +106 +107 +110 +110 +116 +116 +119 +120 +120 +125 +125 +130 +130 +129 +134 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +160 +161 +160 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +182 +183 +184 +184 +188 +188 +189 +190 +190 +195 +194 +197 +197 +197 +198 +199 +200 +200 +200 +200 +200 +203 +202 +202 +204 +204 +204 +205 +204 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +205 +205 +204 +204 +202 +202 +202 +200 +200 +200 +200 +200 +199 +198 +196 +197 +197 +195 +195 +190 +191 +188 +189 +189 +185 +184 +183 +182 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +159 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +133 +133 +133 +129 +130 +125 +125 +126 +119 +119 +116 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +68 +68 +64 +64 +58 +58 +59 +54 +54 +51 +51 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +14 +13 +14 +14 +13 +13 +14 +13 +14 +14 +14 +14 +14 +13 +13 +13 +13 +14 +13 +13 +14 +14 +13 +13 +13 +13 +15 +15 +17 +16 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +50 +52 +54 +54 +58 +59 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +98 +100 +100 +106 +106 +110 +109 +109 +116 +115 +120 +120 +119 +126 +125 +129 +129 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +182 +183 +183 +183 +183 +184 +185 +188 +188 +189 +190 +191 +194 +194 +194 +197 +196 +198 +198 +198 +200 +201 +200 +200 +200 +202 +203 +204 +204 +204 +204 +205 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +204 +204 +204 +204 +204 +202 +202 +200 +200 +200 +200 +200 +198 +198 +197 +197 +197 +194 +194 +191 +191 +190 +188 +189 +184 +185 +185 +182 +183 +179 +179 +179 +175 +174 +173 +173 +174 +169 +169 +165 +165 +161 +161 +160 +157 +157 +151 +151 +151 +147 +147 +147 +147 +147 +143 +143 +139 +140 +139 +133 +133 +129 +129 +126 +126 +125 +120 +119 +115 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +87 +82 +82 +76 +76 +72 +72 +72 +69 +68 +64 +64 +64 +59 +58 +54 +55 +55 +51 +50 +47 +47 +47 +43 +43 +40 +41 +41 +37 +37 +33 +33 +32 +31 +31 +26 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +14 +13 +13 +14 +14 +14 +14 +13 +13 +13 +14 +14 +13 +13 +15 +15 +18 +17 +17 +19 +19 +21 +21 +21 +25 +25 +25 +25 +25 +27 +27 +30 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +47 +47 +47 +51 +51 +55 +54 +55 +58 +59 +58 +58 +58 +64 +65 +68 +68 +69 +72 +72 +76 +76 +81 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +109 +109 +115 +116 +120 +120 +120 +125 +125 +130 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +178 +178 +179 +183 +183 +184 +184 +184 +188 +189 +191 +190 +190 +194 +194 +196 +197 +196 +198 +198 +200 +200 +200 +201 +200 +202 +202 +205 +205 +204 +204 +204 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +204 +204 +205 +204 +204 +203 +202 +200 +201 +201 +200 +200 +198 +199 +198 +196 +196 +195 +194 +195 +190 +191 +189 +188 +188 +185 +184 +183 +182 +183 +179 +179 +174 +175 +172 +173 +173 +169 +168 +165 +165 +165 +161 +161 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +142 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +119 +119 +115 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +89 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +69 +64 +64 +58 +59 +59 +55 +55 +50 +50 +51 +47 +46 +43 +43 +41 +41 +40 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +13 +14 +14 +13 +14 +14 +13 +14 +14 +13 +13 +14 +14 +14 +14 +14 +14 +13 +14 +14 +13 +13 +14 +14 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +32 +33 +32 +37 +37 +40 +41 +41 +43 +43 +47 +47 +47 +51 +51 +50 +51 +51 +54 +54 +58 +58 +59 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +115 +120 +119 +125 +125 +125 +130 +129 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +182 +183 +185 +184 +185 +188 +188 +191 +190 +190 +194 +195 +196 +196 +196 +198 +198 +200 +200 +201 +200 +200 +202 +202 +204 +204 +205 +204 +205 +206 +206 +206 +206 +206 +207 +206 +206 +207 +207 +206 +206 +207 +206 +206 +204 +204 +204 +204 +204 +202 +202 +201 +200 +200 +200 +200 +200 +201 +200 +199 +198 +196 +196 +196 +194 +195 +191 +190 +189 +189 +188 +185 +184 +182 +182 +183 +179 +178 +175 +175 +175 +173 +173 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +152 +151 +151 +147 +147 +143 +143 +143 +139 +133 +133 +133 +133 +129 +130 +125 +125 +125 +120 +119 +116 +115 +116 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +65 +58 +58 +54 +54 +51 +51 +50 +47 +46 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +12 +13 +14 +13 +13 +13 +14 +13 +13 +13 +14 +14 +13 +13 +14 +13 +14 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +22 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +41 +41 +41 +43 +43 +47 +47 +47 +50 +51 +54 +54 +58 +58 +58 +64 +64 +64 +64 +65 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +91 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +116 +120 +119 +125 +125 +125 +130 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +184 +184 +185 +188 +189 +190 +190 +195 +194 +195 +196 +197 +198 +198 +198 +200 +200 +200 +200 +200 +202 +202 +204 +204 +205 +205 +204 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +204 +204 +205 +204 +204 +202 +202 +200 +200 +200 +201 +200 +198 +198 +197 +196 +196 +194 +194 +190 +191 +190 +189 +188 +184 +184 +184 +182 +183 +183 +183 +182 +178 +178 +175 +175 +174 +173 +173 +169 +169 +167 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +130 +125 +125 +119 +119 +115 +115 +115 +110 +110 +106 +106 +105 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +65 +64 +64 +58 +58 +55 +54 +55 +50 +50 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +26 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +13 +15 +13 +13 +14 +13 +13 +14 +13 +13 +14 +14 +13 +14 +14 +13 +14 +14 +13 +13 +14 +14 +14 +14 +14 +13 +13 +13 +13 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +27 +27 +27 +31 +31 +33 +33 +33 +36 +37 +41 +41 +43 +43 +43 +46 +47 +50 +51 +50 +54 +54 +59 +58 +58 +65 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +89 +90 +90 +96 +96 +100 +100 +99 +106 +106 +110 +109 +110 +115 +115 +120 +120 +119 +125 +125 +129 +129 +130 +133 +133 +139 +139 +140 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +164 +169 +169 +173 +173 +172 +174 +175 +178 +178 +183 +182 +183 +185 +184 +189 +188 +188 +190 +190 +194 +194 +194 +196 +196 +198 +198 +198 +200 +201 +200 +200 +201 +203 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +200 +200 +200 +200 +200 +198 +198 +198 +196 +196 +196 +197 +196 +194 +194 +191 +190 +191 +188 +189 +184 +185 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +152 +147 +147 +143 +143 +140 +139 +139 +133 +133 +129 +129 +130 +125 +125 +120 +119 +119 +116 +115 +110 +110 +110 +106 +106 +100 +100 +99 +96 +96 +90 +90 +87 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +65 +58 +58 +58 +55 +55 +50 +51 +51 +47 +47 +43 +42 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +18 +15 +15 +15 +15 +14 +13 +13 +12 +13 +13 +14 +13 +14 +13 +13 +14 +14 +13 +14 +13 +13 +14 +14 +14 +14 +13 +14 +13 +13 +13 +14 +13 +14 +14 +13 +14 +14 +13 +12 +15 +15 +15 +15 +15 +17 +16 +19 +19 +19 +21 +21 +25 +25 +27 +27 +26 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +46 +46 +47 +50 +50 +54 +54 +55 +58 +58 +64 +65 +68 +68 +68 +72 +72 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +116 +120 +119 +120 +125 +125 +130 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +174 +178 +178 +183 +182 +183 +185 +185 +189 +188 +189 +190 +191 +194 +195 +195 +197 +197 +198 +198 +201 +200 +201 +201 +200 +202 +203 +202 +205 +204 +205 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +205 +205 +205 +204 +204 +202 +202 +202 +203 +202 +200 +200 +201 +200 +200 +199 +199 +196 +196 +195 +194 +194 +190 +191 +188 +189 +188 +185 +185 +182 +182 +182 +178 +178 +175 +175 +175 +173 +173 +169 +168 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +140 +133 +133 +129 +129 +129 +125 +125 +119 +120 +120 +116 +116 +110 +109 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +69 +65 +64 +58 +59 +55 +55 +54 +50 +51 +47 +46 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +14 +13 +14 +14 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +32 +31 +33 +32 +33 +37 +37 +40 +41 +41 +43 +42 +47 +47 +50 +51 +51 +54 +55 +58 +59 +59 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +116 +120 +119 +119 +125 +125 +129 +129 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +152 +151 +151 +157 +157 +161 +161 +161 +165 +165 +168 +169 +169 +172 +173 +175 +175 +175 +179 +179 +182 +182 +183 +184 +185 +189 +188 +191 +190 +191 +194 +194 +196 +197 +196 +198 +198 +198 +198 +198 +201 +200 +200 +200 +200 +202 +203 +204 +204 +205 +204 +204 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +204 +204 +204 +204 +204 +202 +202 +201 +200 +201 +201 +200 +198 +198 +198 +196 +196 +194 +194 +194 +191 +190 +189 +189 +188 +185 +185 +183 +183 +183 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +126 +126 +125 +119 +120 +116 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +87 +82 +82 +76 +76 +73 +72 +72 +68 +68 +64 +64 +64 +58 +59 +55 +54 +55 +50 +50 +46 +47 +47 +42 +43 +41 +41 +41 +37 +37 +33 +33 +32 +31 +31 +27 +27 +25 +25 +25 +21 +21 +21 +21 +21 +19 +19 +17 +18 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +14 +14 +13 +13 +14 +13 +13 +13 +14 +13 +13 +14 +14 +14 +14 +14 +13 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +51 +55 +55 +58 +59 +59 +64 +65 +68 +68 +69 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +109 +110 +115 +116 +119 +119 +120 +126 +125 +129 +129 +134 +133 +133 +139 +139 +143 +144 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +170 +173 +173 +175 +175 +179 +178 +179 +182 +183 +185 +184 +184 +189 +189 +189 +189 +188 +190 +190 +194 +194 +194 +196 +197 +198 +199 +199 +200 +201 +200 +200 +202 +202 +202 +204 +204 +204 +204 +204 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +205 +204 +204 +204 +205 +203 +202 +200 +200 +200 +200 +200 +198 +198 +198 +196 +196 +195 +194 +195 +190 +191 +189 +188 +184 +184 +185 +183 +183 +178 +179 +179 +175 +175 +173 +173 +172 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +125 +119 +119 +116 +116 +116 +110 +110 +105 +106 +106 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +69 +68 +64 +64 +64 +58 +58 +54 +55 +55 +51 +50 +47 +46 +43 +43 +42 +40 +41 +41 +41 +41 +37 +37 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +23 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +14 +14 +14 +13 +13 +14 +14 +13 +13 +14 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +13 +13 +14 +13 +13 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +50 +55 +54 +54 +58 +58 +64 +64 +64 +68 +68 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +87 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +109 +110 +115 +116 +119 +120 +120 +125 +125 +129 +129 +129 +133 +134 +139 +139 +140 +143 +143 +147 +147 +150 +151 +151 +157 +157 +161 +161 +161 +165 +165 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +180 +183 +183 +185 +184 +188 +188 +189 +191 +191 +195 +195 +195 +197 +197 +196 +196 +196 +198 +198 +200 +200 +201 +200 +200 +202 +203 +203 +204 +205 +204 +204 +206 +207 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +204 +204 +205 +204 +205 +203 +202 +201 +201 +200 +200 +201 +198 +198 +199 +196 +197 +194 +194 +194 +191 +190 +188 +188 +188 +184 +185 +183 +183 +183 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +140 +139 +133 +134 +129 +129 +126 +125 +125 +119 +120 +115 +116 +115 +110 +109 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +87 +82 +82 +76 +76 +73 +72 +72 +69 +68 +64 +64 +65 +58 +58 +55 +55 +55 +50 +50 +46 +47 +46 +43 +43 +40 +40 +39 +37 +37 +33 +33 +31 +31 +30 +27 +26 +25 +25 +25 +21 +21 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +13 +13 +14 +13 +14 +13 +14 +13 +14 +14 +13 +14 +14 +13 +13 +14 +14 +14 +14 +14 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +32 +37 +37 +40 +40 +41 +43 +43 +47 +47 +47 +51 +51 +54 +54 +54 +58 +58 +64 +64 +64 +68 +68 +72 +72 +72 +77 +76 +82 +82 +87 +86 +86 +90 +90 +96 +96 +96 +100 +100 +100 +100 +100 +106 +106 +110 +110 +110 +115 +116 +119 +120 +120 +125 +125 +129 +129 +133 +133 +134 +139 +139 +143 +143 +143 +147 +147 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +166 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +183 +184 +185 +185 +184 +184 +189 +188 +191 +190 +191 +194 +195 +196 +196 +198 +198 +199 +200 +200 +200 +200 +200 +202 +202 +205 +204 +205 +204 +204 +207 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +207 +206 +204 +204 +204 +204 +204 +203 +202 +200 +200 +200 +200 +200 +199 +199 +198 +197 +196 +195 +194 +195 +190 +191 +189 +189 +185 +184 +184 +183 +183 +179 +179 +178 +175 +175 +175 +175 +174 +173 +173 +169 +169 +170 +165 +165 +161 +161 +160 +157 +157 +151 +151 +148 +147 +147 +143 +143 +139 +139 +139 +133 +133 +130 +129 +129 +126 +125 +119 +119 +120 +115 +116 +110 +109 +110 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +82 +82 +82 +77 +76 +72 +72 +72 +68 +69 +64 +64 +65 +59 +58 +55 +54 +51 +50 +51 +47 +47 +43 +43 +43 +40 +42 +41 +41 +41 +37 +37 +33 +33 +33 +31 +30 +27 +27 +26 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +14 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +13 +14 +13 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +42 +43 +47 +47 +47 +51 +51 +54 +55 +59 +58 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +97 +100 +100 +106 +106 +110 +110 +110 +115 +116 +120 +120 +120 +125 +125 +125 +126 +125 +130 +129 +133 +133 +134 +139 +139 +143 +143 +145 +147 +147 +151 +151 +157 +157 +157 +161 +161 +161 +161 +161 +165 +165 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +182 +183 +183 +185 +185 +188 +188 +188 +191 +190 +194 +194 +194 +196 +196 +198 +198 +198 +200 +200 +200 +200 +201 +202 +203 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +201 +200 +201 +200 +200 +198 +198 +198 +196 +196 +195 +194 +195 +191 +191 +188 +188 +189 +184 +184 +182 +183 +182 +179 +179 +175 +174 +173 +173 +173 +169 +169 +165 +165 +166 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +140 +141 +133 +133 +130 +130 +126 +125 +126 +119 +119 +115 +115 +115 +109 +109 +110 +110 +110 +106 +106 +99 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +76 +76 +76 +73 +72 +68 +68 +68 +64 +64 +64 +64 +64 +59 +58 +54 +55 +55 +50 +50 +47 +47 +45 +43 +42 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +26 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +13 +14 +14 +14 +14 +13 +14 +14 +14 +14 +13 +13 +14 +13 +13 +14 +14 +14 +13 +13 +13 +14 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +20 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +42 +47 +46 +47 +47 +46 +50 +50 +54 +54 +54 +58 +58 +65 +64 +65 +69 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +116 +119 +119 +125 +125 +126 +129 +129 +133 +133 +133 +139 +139 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +160 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +178 +179 +183 +182 +182 +184 +185 +188 +188 +189 +191 +191 +194 +194 +196 +196 +197 +199 +198 +200 +200 +201 +200 +200 +202 +202 +202 +205 +204 +205 +204 +204 +206 +206 +206 +207 +207 +206 +207 +206 +206 +207 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +202 +200 +200 +200 +200 +200 +198 +198 +197 +197 +197 +195 +194 +190 +191 +189 +188 +188 +185 +184 +182 +183 +183 +178 +178 +174 +175 +174 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +140 +133 +133 +133 +133 +133 +129 +129 +125 +125 +125 +120 +120 +115 +116 +113 +110 +110 +105 +106 +99 +100 +100 +95 +96 +90 +90 +90 +86 +86 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +66 +64 +64 +58 +58 +54 +55 +54 +50 +50 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +14 +14 +13 +13 +14 +13 +13 +14 +14 +13 +14 +14 +13 +13 +14 +14 +13 +13 +13 +15 +14 +15 +17 +17 +19 +19 +22 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +40 +41 +43 +43 +47 +47 +47 +51 +51 +55 +54 +59 +58 +58 +64 +64 +68 +68 +69 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +109 +110 +110 +115 +115 +120 +119 +119 +126 +125 +126 +125 +125 +129 +129 +133 +134 +133 +139 +139 +143 +143 +144 +147 +147 +151 +150 +157 +157 +157 +161 +161 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +182 +184 +185 +185 +188 +188 +190 +191 +191 +195 +195 +196 +196 +196 +198 +198 +200 +200 +200 +200 +200 +202 +202 +202 +204 +205 +205 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +204 +205 +204 +204 +205 +202 +202 +202 +200 +200 +201 +201 +199 +198 +199 +196 +196 +194 +195 +194 +190 +191 +188 +189 +188 +185 +184 +182 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +130 +130 +130 +125 +126 +119 +119 +115 +116 +115 +110 +110 +106 +106 +106 +100 +100 +100 +100 +100 +96 +96 +91 +90 +90 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +58 +58 +54 +55 +50 +50 +51 +46 +47 +43 +43 +43 +41 +41 +37 +37 +34 +32 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +12 +14 +13 +13 +13 +14 +14 +14 +14 +13 +14 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +14 +13 +14 +14 +14 +14 +13 +16 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +32 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +46 +46 +47 +50 +51 +55 +54 +54 +58 +58 +59 +58 +58 +64 +64 +68 +69 +68 +72 +72 +76 +76 +79 +82 +82 +86 +86 +89 +90 +90 +96 +96 +100 +100 +100 +105 +105 +106 +106 +106 +109 +110 +115 +115 +116 +120 +119 +125 +125 +128 +129 +129 +134 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +175 +175 +175 +178 +179 +183 +183 +182 +185 +185 +188 +188 +189 +190 +191 +195 +194 +194 +196 +197 +198 +198 +199 +200 +201 +201 +200 +202 +203 +203 +205 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +205 +205 +204 +203 +202 +203 +201 +200 +200 +200 +200 +199 +198 +196 +197 +197 +195 +195 +190 +190 +191 +188 +188 +185 +184 +185 +183 +183 +179 +179 +175 +175 +175 +172 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +141 +139 +139 +134 +133 +129 +129 +129 +126 +125 +119 +120 +119 +115 +115 +117 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +93 +90 +90 +86 +86 +82 +82 +82 +77 +76 +72 +72 +72 +68 +68 +64 +64 +65 +58 +59 +55 +55 +55 +51 +50 +47 +47 +43 +42 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +18 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +13 +14 +14 +14 +13 +13 +14 +13 +13 +14 +13 +14 +14 +13 +14 +14 +13 +14 +13 +14 +13 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +28 +31 +31 +33 +33 +38 +37 +37 +41 +41 +43 +43 +43 +47 +47 +46 +47 +47 +51 +51 +55 +55 +55 +59 +59 +65 +64 +66 +69 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +109 +115 +115 +116 +120 +119 +125 +125 +126 +130 +129 +133 +133 +133 +139 +139 +143 +143 +143 +148 +147 +151 +151 +151 +157 +157 +161 +161 +165 +165 +165 +169 +169 +172 +173 +173 +175 +175 +179 +179 +179 +183 +183 +185 +185 +185 +189 +188 +190 +191 +191 +195 +194 +196 +197 +198 +198 +199 +201 +200 +201 +201 +200 +203 +202 +204 +205 +204 +204 +204 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +207 +207 +207 +207 +206 +204 +204 +204 +204 +205 +202 +203 +201 +201 +201 +201 +200 +199 +198 +199 +197 +196 +194 +194 +195 +190 +191 +189 +188 +184 +184 +185 +183 +183 +179 +178 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +158 +151 +151 +147 +147 +143 +143 +143 +139 +139 +134 +133 +133 +130 +130 +126 +126 +125 +119 +119 +116 +116 +116 +110 +110 +106 +106 +103 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +68 +68 +64 +64 +65 +58 +58 +55 +55 +50 +50 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +14 +13 +14 +14 +14 +14 +13 +13 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +22 +25 +25 +27 +27 +32 +31 +31 +33 +33 +37 +37 +37 +41 +41 +41 +41 +41 +43 +43 +47 +46 +47 +51 +51 +54 +55 +56 +58 +59 +65 +65 +68 +69 +68 +72 +72 +76 +76 +76 +82 +82 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +102 +106 +106 +110 +110 +115 +115 +115 +120 +120 +126 +126 +125 +130 +129 +134 +134 +133 +139 +139 +143 +143 +144 +147 +147 +152 +151 +156 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +179 +182 +183 +184 +185 +184 +189 +188 +190 +190 +195 +194 +195 +197 +196 +198 +198 +198 +200 +200 +201 +201 +200 +202 +202 +204 +204 +204 +205 +205 +206 +206 +207 +207 +207 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +205 +204 +205 +204 +204 +202 +202 +200 +200 +200 +200 +200 +198 +198 +198 +197 +197 +195 +194 +191 +190 +190 +189 +189 +185 +185 +184 +183 +183 +182 +182 +183 +179 +178 +175 +175 +175 +172 +173 +169 +169 +169 +165 +165 +161 +161 +158 +157 +157 +151 +151 +147 +147 +147 +143 +143 +143 +144 +143 +139 +139 +134 +133 +134 +129 +129 +126 +125 +120 +120 +119 +116 +115 +109 +109 +110 +105 +106 +100 +100 +100 +95 +96 +89 +90 +90 +86 +86 +82 +82 +83 +76 +76 +72 +72 +69 +69 +68 +64 +65 +58 +58 +59 +55 +55 +50 +51 +50 +47 +47 +42 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +16 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +14 +13 +14 +13 +14 +14 +14 +14 +13 +13 +14 +13 +13 +13 +14 +14 +14 +14 +14 +14 +13 +13 +13 +13 +13 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +42 +43 +43 +46 +47 +50 +50 +51 +54 +55 +59 +59 +58 +64 +64 +64 +64 +65 +68 +68 +72 +72 +72 +76 +76 +82 +82 +85 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +115 +119 +119 +126 +125 +126 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +164 +169 +169 +173 +173 +173 +175 +175 +178 +179 +183 +183 +182 +184 +185 +189 +189 +188 +190 +190 +194 +194 +194 +196 +197 +198 +198 +198 +200 +200 +200 +200 +200 +203 +202 +204 +204 +205 +204 +204 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +205 +204 +204 +202 +203 +200 +200 +200 +201 +200 +198 +198 +197 +197 +196 +195 +195 +191 +190 +190 +188 +188 +185 +184 +185 +182 +183 +178 +179 +176 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +136 +134 +133 +129 +129 +125 +126 +126 +120 +119 +115 +116 +115 +110 +110 +106 +106 +105 +100 +100 +96 +96 +96 +90 +90 +86 +86 +85 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +65 +64 +58 +59 +54 +54 +55 +50 +51 +47 +46 +46 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +14 +14 +14 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +32 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +50 +51 +51 +51 +55 +54 +58 +58 +59 +64 +64 +69 +68 +70 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +105 +106 +110 +110 +110 +115 +115 +119 +120 +125 +125 +126 +130 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +172 +173 +173 +175 +175 +179 +179 +179 +183 +182 +184 +185 +185 +188 +188 +190 +190 +190 +195 +194 +196 +197 +197 +198 +198 +200 +200 +201 +200 +201 +202 +202 +204 +205 +204 +205 +205 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +207 +207 +206 +204 +205 +204 +204 +204 +202 +202 +200 +201 +200 +200 +200 +201 +201 +200 +198 +198 +196 +196 +197 +194 +195 +190 +191 +189 +188 +189 +185 +185 +182 +182 +183 +178 +178 +175 +175 +174 +173 +172 +173 +173 +173 +168 +168 +165 +164 +165 +161 +160 +157 +157 +152 +150 +151 +147 +147 +143 +143 +143 +139 +140 +133 +133 +133 +129 +129 +125 +125 +120 +120 +119 +115 +115 +116 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +69 +68 +64 +64 +64 +58 +58 +54 +54 +50 +50 +51 +47 +47 +43 +43 +43 +41 +41 +36 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +13 +14 +14 +14 +14 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +14 +14 +14 +13 +13 +14 +14 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +31 +30 +31 +33 +32 +37 +36 +37 +41 +41 +41 +40 +41 +43 +42 +46 +46 +47 +51 +51 +55 +54 +55 +58 +58 +64 +65 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +109 +110 +110 +115 +115 +119 +119 +119 +125 +125 +129 +129 +129 +134 +133 +139 +140 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +182 +182 +182 +184 +185 +189 +188 +189 +191 +190 +194 +194 +197 +196 +196 +198 +198 +200 +200 +200 +200 +200 +202 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +207 +206 +206 +207 +205 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +205 +204 +202 +203 +202 +200 +200 +200 +200 +198 +199 +198 +197 +196 +194 +194 +195 +190 +191 +189 +188 +188 +185 +185 +185 +185 +184 +183 +182 +178 +178 +179 +174 +175 +173 +172 +171 +168 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +134 +129 +129 +126 +126 +119 +119 +120 +116 +116 +109 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +68 +68 +68 +65 +65 +58 +58 +58 +55 +54 +51 +51 +51 +46 +47 +43 +43 +43 +41 +41 +37 +37 +36 +33 +31 +31 +31 +27 +27 +27 +28 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +13 +14 +13 +14 +14 +13 +13 +14 +13 +13 +13 +13 +14 +13 +13 +14 +14 +14 +13 +14 +13 +13 +13 +14 +13 +13 +13 +13 +12 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +39 +41 +40 +42 +43 +46 +46 +47 +51 +50 +54 +55 +55 +58 +58 +64 +64 +65 +68 +68 +73 +72 +73 +76 +76 +82 +82 +84 +86 +86 +90 +90 +96 +96 +96 +100 +100 +100 +100 +100 +106 +106 +110 +110 +110 +115 +116 +119 +119 +119 +126 +125 +129 +129 +133 +133 +133 +139 +139 +143 +144 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +168 +169 +173 +173 +175 +175 +179 +179 +179 +183 +183 +184 +185 +184 +189 +188 +191 +190 +190 +194 +195 +196 +197 +197 +199 +198 +200 +200 +201 +200 +200 +202 +203 +204 +204 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +205 +204 +204 +204 +204 +202 +202 +202 +201 +200 +200 +200 +201 +198 +198 +198 +199 +198 +196 +196 +194 +194 +195 +190 +191 +188 +188 +187 +184 +185 +183 +182 +179 +179 +179 +175 +174 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +144 +143 +143 +139 +139 +133 +134 +134 +129 +129 +125 +125 +125 +119 +120 +116 +115 +116 +109 +110 +106 +106 +106 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +58 +59 +55 +55 +55 +50 +51 +46 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +14 +14 +13 +14 +13 +14 +13 +14 +14 +13 +14 +14 +13 +13 +13 +12 +15 +15 +15 +15 +15 +17 +17 +19 +19 +19 +20 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +46 +46 +47 +51 +51 +54 +55 +55 +59 +59 +64 +64 +68 +68 +68 +72 +72 +77 +76 +76 +82 +82 +86 +86 +86 +91 +90 +96 +96 +96 +100 +100 +106 +106 +106 +109 +110 +116 +116 +119 +119 +120 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +169 +168 +168 +173 +173 +175 +175 +175 +178 +179 +183 +182 +183 +185 +185 +188 +188 +189 +190 +191 +195 +195 +194 +196 +196 +198 +198 +201 +200 +200 +200 +201 +202 +202 +202 +204 +204 +204 +204 +204 +205 +204 +207 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +207 +207 +205 +205 +204 +204 +204 +203 +202 +202 +202 +202 +200 +200 +200 +200 +200 +198 +199 +196 +197 +195 +194 +195 +191 +191 +188 +189 +188 +185 +185 +182 +183 +182 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +134 +129 +130 +129 +125 +126 +119 +120 +119 +116 +115 +110 +109 +105 +106 +106 +100 +99 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +69 +68 +68 +64 +64 +58 +58 +55 +54 +54 +51 +50 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +32 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +15 +16 +15 +13 +13 +12 +13 +13 +13 +13 +14 +14 +13 +14 +13 +14 +14 +13 +14 +13 +13 +13 +13 +14 +14 +13 +14 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +46 +50 +51 +51 +54 +55 +59 +59 +58 +64 +64 +69 +68 +68 +72 +72 +76 +76 +82 +82 +86 +86 +86 +90 +91 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +116 +120 +120 +120 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +152 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +178 +182 +182 +183 +185 +185 +189 +189 +191 +191 +191 +194 +194 +196 +197 +196 +198 +199 +200 +200 +201 +201 +201 +203 +202 +202 +205 +205 +205 +204 +205 +206 +206 +206 +206 +207 +206 +207 +207 +206 +207 +207 +206 +207 +206 +207 +206 +206 +204 +204 +204 +204 +205 +202 +202 +200 +201 +200 +200 +201 +198 +198 +196 +197 +196 +194 +195 +191 +191 +191 +189 +189 +184 +185 +184 +183 +183 +179 +179 +179 +175 +175 +172 +173 +169 +169 +169 +165 +165 +161 +161 +161 +151 +151 +147 +147 +147 +143 +143 +139 +139 +140 +133 +133 +129 +129 +129 +126 +125 +119 +119 +115 +116 +116 +110 +109 +106 +105 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +72 +72 +68 +68 +65 +64 +64 +59 +58 +54 +54 +55 +50 +51 +47 +47 +47 +42 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +24 +25 +25 +21 +21 +19 +19 +19 +17 +17 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +14 +13 +14 +14 +14 +14 +13 +13 +14 +13 +13 +14 +14 +14 +14 +13 +13 +14 +13 +13 +13 +13 +13 +14 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +36 +37 +41 +41 +42 +43 +43 +46 +47 +51 +51 +51 +54 +55 +58 +59 +59 +64 +65 +68 +68 +68 +73 +72 +76 +76 +77 +82 +82 +86 +86 +91 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +109 +116 +116 +120 +119 +119 +125 +125 +129 +129 +130 +133 +133 +139 +139 +144 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +184 +185 +185 +188 +189 +190 +190 +191 +195 +194 +195 +194 +194 +196 +197 +199 +198 +198 +200 +200 +201 +200 +201 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +206 +204 +205 +205 +204 +204 +203 +203 +201 +200 +201 +200 +201 +200 +200 +200 +198 +198 +196 +196 +197 +194 +195 +191 +191 +191 +188 +189 +184 +185 +185 +183 +183 +179 +179 +175 +175 +175 +172 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +119 +119 +116 +115 +110 +109 +109 +106 +106 +100 +100 +100 +96 +96 +90 +90 +87 +86 +86 +82 +82 +76 +76 +76 +73 +72 +68 +68 +68 +65 +64 +58 +58 +59 +54 +54 +51 +51 +51 +47 +47 +43 +43 +40 +41 +40 +37 +37 +33 +33 +33 +31 +31 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +13 +14 +14 +13 +14 +13 +13 +13 +14 +13 +14 +13 +14 +14 +13 +13 +14 +14 +14 +13 +13 +13 +13 +13 +13 +14 +14 +13 +15 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +46 +47 +47 +51 +51 +55 +55 +54 +58 +58 +64 +64 +69 +69 +68 +72 +72 +76 +76 +77 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +105 +106 +110 +110 +115 +115 +120 +119 +120 +126 +125 +129 +130 +130 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +169 +169 +169 +173 +172 +175 +175 +175 +179 +179 +179 +179 +179 +183 +183 +185 +185 +185 +189 +188 +190 +190 +192 +195 +194 +197 +196 +196 +196 +197 +198 +198 +201 +200 +200 +200 +200 +200 +201 +201 +202 +202 +204 +205 +204 +204 +205 +206 +206 +207 +207 +207 +206 +206 +206 +207 +206 +206 +206 +206 +207 +206 +207 +207 +205 +205 +204 +204 +205 +203 +202 +203 +200 +201 +201 +201 +199 +198 +198 +197 +197 +195 +195 +194 +190 +190 +188 +188 +188 +185 +185 +183 +182 +183 +179 +179 +175 +175 +174 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +130 +125 +125 +119 +119 +116 +116 +116 +110 +110 +106 +106 +105 +100 +99 +96 +96 +96 +90 +90 +86 +86 +86 +82 +83 +76 +76 +77 +72 +72 +68 +69 +64 +64 +64 +58 +58 +55 +54 +54 +50 +51 +47 +47 +47 +43 +43 +40 +41 +41 +37 +37 +32 +33 +32 +31 +31 +27 +26 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +13 +13 +14 +14 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +38 +37 +41 +41 +42 +43 +43 +47 +47 +51 +50 +51 +54 +54 +58 +58 +58 +64 +64 +68 +68 +68 +73 +72 +76 +76 +77 +82 +82 +86 +86 +90 +90 +90 +96 +95 +100 +100 +100 +106 +106 +106 +106 +106 +110 +110 +115 +115 +116 +120 +119 +125 +125 +127 +129 +130 +134 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +170 +173 +173 +175 +175 +178 +179 +179 +183 +183 +184 +185 +185 +189 +189 +189 +189 +189 +190 +191 +194 +195 +195 +197 +196 +198 +199 +200 +201 +200 +200 +200 +202 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +207 +206 +206 +205 +204 +205 +205 +205 +203 +202 +202 +200 +201 +200 +200 +200 +198 +199 +197 +197 +196 +194 +195 +190 +190 +191 +188 +188 +185 +184 +183 +183 +182 +179 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +140 +139 +139 +134 +133 +129 +130 +130 +126 +126 +120 +120 +120 +115 +115 +110 +110 +110 +106 +106 +100 +100 +101 +96 +96 +90 +90 +87 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +69 +64 +64 +59 +58 +59 +54 +55 +51 +51 +51 +46 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +13 +14 +14 +14 +14 +14 +13 +14 +13 +13 +14 +13 +13 +14 +14 +14 +14 +13 +13 +13 +13 +13 +13 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +24 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +51 +54 +54 +54 +58 +58 +64 +64 +65 +68 +68 +72 +72 +77 +76 +76 +82 +82 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +116 +120 +119 +125 +125 +125 +129 +129 +133 +134 +133 +139 +139 +140 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +158 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +179 +179 +178 +182 +182 +185 +185 +184 +189 +189 +190 +190 +192 +194 +195 +197 +197 +199 +199 +198 +200 +201 +201 +200 +200 +203 +203 +204 +204 +204 +204 +204 +206 +206 +206 +206 +207 +205 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +201 +200 +200 +200 +200 +198 +199 +199 +197 +196 +195 +195 +190 +191 +190 +188 +188 +185 +185 +185 +183 +182 +178 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +134 +134 +133 +129 +129 +125 +125 +125 +119 +119 +115 +115 +116 +110 +110 +105 +105 +99 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +68 +68 +65 +65 +61 +58 +58 +55 +54 +50 +51 +50 +47 +47 +43 +43 +43 +41 +41 +40 +41 +41 +37 +37 +33 +33 +33 +30 +31 +27 +27 +26 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +14 +14 +13 +14 +13 +14 +14 +13 +13 +14 +14 +14 +13 +13 +13 +13 +14 +13 +14 +13 +14 +13 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +21 +21 +20 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +46 +47 +51 +50 +55 +54 +59 +58 +58 +65 +65 +68 +69 +69 +72 +72 +77 +76 +76 +82 +82 +86 +87 +86 +90 +90 +96 +96 +97 +100 +100 +106 +106 +110 +110 +109 +116 +115 +119 +120 +119 +125 +126 +126 +126 +126 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +169 +169 +169 +173 +173 +175 +175 +175 +178 +179 +183 +182 +183 +185 +185 +189 +189 +190 +191 +190 +194 +195 +196 +197 +196 +198 +198 +200 +200 +201 +201 +200 +202 +202 +203 +204 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +204 +204 +204 +204 +204 +202 +202 +203 +201 +201 +201 +200 +198 +198 +198 +196 +197 +194 +194 +195 +190 +191 +188 +188 +189 +185 +185 +182 +183 +183 +179 +179 +175 +175 +175 +174 +173 +169 +169 +165 +164 +165 +161 +161 +157 +158 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +130 +129 +130 +126 +125 +119 +119 +116 +116 +115 +110 +109 +106 +106 +106 +100 +100 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +83 +83 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +58 +58 +54 +54 +54 +54 +55 +51 +51 +47 +47 +47 +43 +43 +41 +40 +37 +37 +36 +33 +33 +31 +31 +31 +26 +27 +25 +25 +25 +21 +21 +19 +19 +19 +16 +17 +15 +15 +15 +15 +15 +13 +13 +12 +12 +13 +13 +14 +13 +13 +14 +14 +14 +13 +13 +13 +14 +14 +13 +14 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +14 +13 +13 +13 +14 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +42 +41 +41 +43 +43 +47 +47 +47 +50 +50 +54 +55 +54 +58 +58 +64 +64 +65 +69 +69 +72 +72 +73 +76 +76 +82 +82 +87 +86 +86 +90 +90 +96 +96 +96 +100 +99 +106 +106 +106 +110 +110 +115 +115 +116 +119 +120 +126 +126 +126 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +151 +151 +151 +157 +157 +161 +161 +161 +164 +165 +169 +169 +171 +173 +173 +175 +175 +178 +179 +179 +183 +182 +185 +185 +185 +188 +189 +191 +191 +191 +194 +195 +196 +196 +197 +199 +199 +200 +200 +200 +200 +200 +202 +202 +204 +204 +204 +204 +204 +206 +207 +206 +206 +206 +207 +207 +206 +206 +207 +206 +207 +206 +206 +206 +204 +204 +204 +204 +204 +202 +203 +200 +200 +200 +200 +200 +198 +199 +198 +196 +196 +194 +194 +194 +190 +190 +188 +188 +189 +184 +185 +182 +183 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +148 +148 +143 +143 +139 +140 +134 +133 +133 +129 +129 +125 +125 +125 +120 +119 +120 +120 +120 +116 +116 +109 +110 +110 +106 +106 +100 +100 +98 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +72 +72 +72 +68 +68 +64 +64 +64 +58 +58 +54 +54 +51 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +36 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +14 +13 +14 +14 +14 +14 +14 +13 +13 +14 +13 +13 +14 +14 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +46 +46 +51 +51 +51 +55 +55 +58 +59 +59 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +110 +112 +115 +115 +119 +120 +125 +126 +126 +129 +130 +133 +133 +133 +140 +139 +139 +139 +139 +143 +143 +147 +148 +147 +151 +151 +157 +157 +158 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +178 +183 +183 +182 +185 +185 +188 +189 +189 +190 +191 +194 +195 +196 +197 +197 +198 +198 +200 +200 +200 +201 +201 +202 +202 +202 +205 +204 +205 +204 +205 +207 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +207 +207 +206 +204 +204 +204 +204 +204 +202 +202 +202 +200 +201 +200 +200 +200 +199 +198 +196 +196 +196 +195 +195 +190 +190 +189 +189 +188 +185 +185 +183 +183 +182 +178 +178 +174 +174 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +133 +133 +133 +129 +130 +125 +125 +125 +119 +119 +115 +116 +112 +110 +110 +106 +106 +99 +100 +100 +96 +96 +90 +90 +90 +86 +86 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +66 +64 +64 +59 +59 +54 +55 +55 +50 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +14 +14 +14 +14 +14 +13 +14 +14 +13 +14 +14 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +34 +37 +37 +41 +41 +41 +43 +43 +46 +47 +47 +51 +51 +55 +55 +58 +58 +58 +65 +65 +68 +69 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +98 +100 +100 +106 +106 +110 +110 +110 +116 +115 +119 +119 +119 +125 +125 +125 +125 +126 +129 +130 +134 +133 +134 +139 +139 +143 +144 +148 +148 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +179 +183 +182 +185 +185 +188 +189 +189 +190 +190 +194 +195 +194 +196 +196 +198 +198 +198 +200 +200 +201 +201 +201 +202 +202 +204 +205 +205 +204 +204 +206 +207 +206 +207 +206 +207 +206 +206 +207 +206 +207 +207 +206 +207 +206 +205 +205 +204 +205 +204 +203 +202 +201 +200 +201 +201 +201 +199 +199 +197 +196 +196 +194 +194 +190 +191 +191 +188 +189 +185 +184 +185 +183 +183 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +161 +161 +161 +156 +157 +151 +151 +151 +147 +147 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +120 +116 +116 +115 +109 +109 +106 +106 +105 +100 +99 +100 +100 +100 +96 +95 +90 +90 +90 +86 +86 +82 +82 +79 +76 +76 +72 +72 +68 +69 +69 +64 +64 +59 +58 +59 +55 +55 +50 +51 +51 +47 +46 +43 +43 +43 +41 +41 +37 +36 +33 +33 +33 +31 +31 +27 +27 +27 +25 +26 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +13 +14 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +14 +14 +13 +13 +14 +14 +14 +13 +13 +13 +13 +13 +15 +15 +17 +17 +19 +19 +20 +21 +21 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +44 +43 +43 +47 +47 +51 +50 +50 +54 +54 +58 +59 +58 +64 +65 +68 +68 +68 +72 +72 +76 +76 +81 +82 +81 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +106 +106 +106 +110 +110 +116 +115 +116 +119 +120 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +175 +175 +175 +179 +179 +182 +182 +182 +184 +185 +189 +189 +189 +190 +190 +194 +195 +195 +196 +196 +199 +198 +198 +200 +200 +200 +201 +203 +202 +202 +204 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +206 +207 +204 +204 +205 +204 +204 +203 +202 +200 +200 +200 +200 +200 +198 +198 +199 +196 +197 +194 +195 +195 +190 +191 +188 +189 +189 +185 +184 +182 +183 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +170 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +152 +151 +147 +147 +143 +143 +140 +139 +139 +133 +133 +129 +129 +129 +125 +125 +125 +125 +125 +119 +119 +115 +115 +115 +109 +110 +106 +106 +103 +100 +99 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +73 +72 +72 +68 +68 +65 +64 +65 +58 +58 +55 +54 +50 +50 +50 +47 +46 +43 +43 +43 +41 +40 +37 +37 +37 +33 +33 +31 +31 +31 +28 +27 +25 +25 +25 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +13 +14 +14 +13 +14 +14 +14 +14 +14 +13 +14 +13 +14 +13 +13 +13 +14 +13 +13 +13 +13 +14 +14 +14 +13 +15 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +28 +27 +27 +31 +31 +33 +33 +33 +37 +36 +37 +37 +37 +41 +41 +42 +42 +43 +47 +47 +51 +51 +52 +54 +54 +58 +58 +64 +64 +65 +68 +68 +72 +72 +72 +76 +76 +76 +76 +76 +82 +82 +86 +87 +86 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +115 +119 +119 +119 +125 +125 +130 +129 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +150 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +174 +175 +179 +179 +182 +183 +182 +185 +185 +189 +188 +191 +191 +190 +194 +194 +197 +196 +196 +199 +199 +200 +200 +201 +201 +200 +202 +202 +202 +204 +205 +204 +204 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +206 +207 +204 +204 +204 +204 +204 +202 +203 +202 +200 +200 +200 +201 +201 +199 +199 +196 +196 +194 +195 +194 +190 +191 +188 +188 +188 +184 +185 +185 +184 +185 +183 +182 +179 +179 +179 +175 +175 +173 +173 +171 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +147 +147 +147 +143 +143 +139 +139 +140 +133 +134 +129 +130 +126 +125 +126 +120 +119 +115 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +72 +73 +73 +68 +68 +64 +64 +65 +59 +59 +54 +54 +54 +51 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +32 +31 +31 +27 +27 +24 +24 +25 +21 +21 +20 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +14 +14 +13 +14 +14 +14 +14 +14 +13 +13 +13 +13 +13 +13 +14 +13 +14 +14 +14 +14 +14 +13 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +25 +25 +25 +25 +25 +27 +27 +27 +31 +31 +33 +33 +34 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +51 +55 +55 +55 +54 +54 +59 +59 +65 +64 +64 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +109 +115 +115 +116 +119 +119 +125 +126 +129 +130 +129 +133 +133 +139 +139 +139 +143 +143 +147 +148 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +175 +175 +175 +179 +178 +183 +183 +183 +184 +184 +189 +188 +188 +190 +190 +195 +195 +194 +197 +196 +198 +198 +198 +200 +200 +200 +200 +203 +202 +202 +204 +205 +204 +204 +204 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +207 +204 +204 +204 +204 +202 +202 +202 +200 +200 +200 +201 +201 +199 +198 +198 +198 +198 +196 +196 +194 +195 +194 +191 +191 +188 +188 +186 +184 +184 +183 +182 +178 +178 +178 +175 +175 +173 +173 +173 +169 +169 +169 +168 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +148 +147 +147 +143 +143 +139 +139 +139 +134 +133 +129 +129 +129 +125 +125 +119 +120 +119 +116 +116 +110 +110 +110 +106 +105 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +69 +64 +64 +58 +58 +59 +55 +54 +50 +50 +47 +47 +47 +43 +43 +41 +41 +40 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +20 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +14 +14 +14 +14 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +14 +13 +14 +14 +14 +14 +13 +14 +13 +13 +13 +15 +15 +15 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +24 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +41 +41 +41 +43 +42 +46 +47 +47 +51 +51 +55 +54 +56 +59 +59 +64 +65 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +109 +110 +109 +115 +115 +119 +119 +119 +125 +125 +130 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +174 +175 +178 +179 +183 +183 +182 +185 +184 +188 +188 +189 +191 +190 +194 +195 +197 +196 +197 +198 +198 +200 +200 +200 +200 +201 +202 +203 +203 +204 +204 +205 +205 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +204 +204 +204 +204 +204 +205 +205 +204 +202 +202 +200 +200 +200 +200 +200 +198 +198 +200 +196 +196 +195 +194 +190 +190 +191 +188 +188 +184 +184 +185 +183 +182 +182 +182 +183 +178 +179 +175 +174 +175 +173 +173 +169 +169 +166 +164 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +130 +130 +125 +125 +119 +120 +116 +116 +116 +109 +110 +106 +106 +106 +100 +100 +96 +96 +96 +91 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +64 +64 +65 +59 +58 +55 +55 +55 +51 +50 +47 +46 +47 +42 +43 +40 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +26 +25 +26 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +14 +14 +14 +14 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +13 +14 +14 +14 +13 +14 +14 +14 +13 +13 +15 +15 +16 +17 +17 +19 +19 +20 +21 +21 +25 +25 +27 +27 +27 +31 +31 +31 +31 +31 +33 +33 +37 +37 +37 +40 +40 +42 +43 +45 +47 +46 +50 +51 +54 +54 +54 +59 +58 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +83 +86 +86 +90 +90 +95 +96 +96 +100 +100 +106 +106 +105 +110 +110 +116 +115 +116 +119 +119 +125 +125 +126 +130 +130 +133 +133 +133 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +168 +173 +173 +173 +174 +175 +179 +179 +179 +182 +183 +184 +184 +189 +188 +188 +191 +191 +195 +195 +194 +196 +197 +199 +198 +198 +200 +201 +201 +201 +200 +202 +202 +204 +204 +205 +204 +204 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +205 +205 +204 +202 +202 +203 +200 +201 +200 +200 +198 +198 +199 +196 +196 +195 +194 +194 +190 +190 +191 +190 +190 +189 +188 +184 +184 +185 +183 +183 +178 +178 +175 +175 +175 +173 +173 +168 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +140 +134 +133 +129 +129 +129 +126 +125 +119 +120 +120 +115 +115 +110 +109 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +72 +72 +69 +69 +68 +64 +64 +58 +58 +58 +55 +54 +50 +51 +50 +47 +47 +43 +43 +43 +41 +40 +37 +36 +34 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +22 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +14 +13 +14 +13 +13 +14 +14 +14 +14 +14 +14 +14 +14 +13 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +31 +31 +31 +31 +33 +33 +37 +37 +40 +41 +41 +43 +43 +47 +47 +47 +50 +50 +55 +54 +54 +59 +59 +64 +65 +65 +68 +68 +72 +72 +73 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +99 +99 +106 +105 +106 +110 +110 +116 +116 +115 +119 +119 +125 +126 +126 +129 +129 +133 +133 +138 +139 +140 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +183 +183 +183 +184 +185 +188 +188 +188 +190 +190 +194 +195 +195 +196 +196 +199 +198 +199 +200 +200 +200 +200 +201 +202 +202 +204 +204 +205 +204 +204 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +204 +204 +205 +205 +205 +202 +202 +200 +200 +200 +201 +200 +198 +199 +198 +196 +197 +196 +197 +196 +194 +194 +191 +190 +191 +188 +188 +184 +185 +183 +183 +183 +179 +178 +174 +174 +175 +172 +172 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +130 +129 +125 +125 +120 +119 +119 +115 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +95 +90 +90 +87 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +69 +68 +64 +64 +58 +58 +58 +54 +55 +51 +50 +51 +46 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +26 +21 +21 +21 +19 +19 +17 +17 +18 +15 +15 +16 +15 +14 +13 +13 +12 +13 +13 +14 +14 +14 +13 +14 +14 +13 +14 +13 +13 +14 +14 +13 +13 +14 +13 +14 +14 +13 +14 +14 +14 +14 +13 +13 +13 +14 +13 +12 +15 +15 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +46 +47 +47 +51 +50 +54 +54 +55 +58 +58 +64 +65 +68 +69 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +119 +119 +119 +119 +125 +126 +129 +129 +129 +133 +134 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +158 +161 +161 +164 +165 +169 +169 +169 +173 +173 +175 +175 +175 +178 +179 +179 +179 +179 +183 +182 +185 +184 +184 +189 +189 +191 +190 +191 +195 +194 +197 +196 +199 +198 +198 +201 +201 +200 +200 +200 +202 +203 +204 +204 +205 +204 +204 +206 +206 +207 +206 +206 +206 +207 +207 +207 +207 +206 +206 +206 +206 +206 +205 +205 +204 +204 +205 +203 +202 +203 +202 +202 +200 +200 +201 +200 +201 +198 +198 +196 +196 +197 +195 +194 +191 +190 +188 +189 +189 +185 +185 +183 +182 +183 +179 +179 +174 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +130 +130 +129 +125 +125 +119 +120 +119 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +73 +71 +68 +68 +68 +64 +64 +58 +58 +55 +54 +55 +51 +50 +47 +46 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +18 +19 +19 +17 +17 +15 +15 +15 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +14 +14 +14 +13 +14 +13 +14 +13 +14 +13 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +15 +15 +15 +17 +17 +18 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +36 +40 +41 +41 +43 +43 +47 +47 +50 +50 +51 +55 +55 +58 +58 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +115 +119 +120 +120 +125 +125 +130 +129 +129 +134 +133 +139 +139 +140 +143 +144 +147 +147 +151 +151 +151 +157 +157 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +179 +183 +183 +184 +185 +189 +188 +189 +190 +190 +194 +195 +196 +197 +197 +197 +197 +198 +198 +200 +200 +201 +201 +201 +202 +202 +203 +205 +205 +204 +204 +206 +207 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +204 +204 +204 +205 +203 +203 +202 +201 +201 +200 +201 +200 +199 +198 +196 +196 +196 +194 +195 +190 +191 +191 +189 +188 +184 +184 +184 +183 +182 +178 +179 +175 +174 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +134 +133 +130 +129 +129 +125 +125 +119 +119 +119 +115 +115 +110 +110 +109 +105 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +58 +58 +54 +54 +51 +50 +51 +47 +47 +43 +43 +43 +41 +41 +33 +33 +31 +31 +32 +27 +27 +25 +24 +25 +21 +21 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +14 +13 +13 +13 +14 +13 +13 +14 +14 +13 +14 +14 +14 +14 +13 +13 +13 +13 +14 +13 +13 +15 +15 +17 +17 +18 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +30 +33 +33 +36 +36 +37 +41 +40 +43 +43 +43 +47 +47 +47 +46 +46 +51 +50 +55 +54 +55 +58 +59 +64 +64 +64 +68 +68 +72 +73 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +105 +106 +110 +110 +116 +115 +116 +120 +120 +125 +126 +130 +129 +129 +133 +134 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +166 +169 +169 +173 +173 +176 +175 +175 +179 +179 +182 +183 +183 +184 +185 +185 +185 +184 +188 +188 +190 +191 +191 +194 +194 +196 +197 +197 +198 +199 +201 +200 +200 +200 +201 +203 +202 +205 +204 +205 +205 +204 +205 +204 +204 +207 +206 +206 +206 +207 +206 +206 +206 +206 +207 +206 +207 +206 +207 +204 +204 +205 +205 +205 +202 +202 +202 +201 +200 +200 +200 +201 +198 +199 +196 +197 +197 +196 +196 +195 +194 +190 +190 +191 +189 +188 +184 +185 +185 +182 +183 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +162 +157 +157 +152 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +126 +126 +120 +119 +115 +116 +116 +110 +110 +105 +105 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +77 +72 +73 +72 +68 +68 +64 +64 +64 +59 +58 +54 +54 +51 +51 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +23 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +14 +13 +12 +13 +13 +14 +13 +13 +14 +13 +13 +14 +14 +14 +13 +13 +14 +13 +14 +13 +13 +14 +14 +13 +13 +14 +13 +13 +14 +13 +12 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +40 +41 +41 +43 +43 +47 +47 +47 +51 +51 +55 +55 +59 +58 +59 +64 +64 +68 +68 +68 +72 +72 +76 +77 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +110 +110 +109 +115 +116 +119 +119 +120 +125 +125 +130 +130 +130 +133 +133 +139 +140 +139 +143 +143 +147 +147 +148 +151 +151 +157 +157 +160 +161 +161 +165 +165 +169 +169 +169 +173 +173 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +185 +184 +186 +188 +189 +191 +191 +194 +194 +195 +196 +196 +199 +198 +198 +200 +200 +200 +201 +200 +200 +200 +202 +203 +202 +204 +205 +205 +205 +205 +207 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +205 +204 +204 +204 +204 +202 +202 +203 +200 +200 +200 +200 +198 +198 +198 +197 +196 +194 +194 +195 +190 +191 +189 +188 +189 +185 +185 +183 +182 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +126 +119 +120 +115 +116 +117 +110 +110 +106 +106 +106 +100 +100 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +68 +69 +68 +64 +64 +59 +59 +58 +54 +55 +55 +54 +54 +50 +50 +46 +47 +46 +43 +42 +41 +40 +39 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +21 +21 +22 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +14 +14 +13 +14 +14 +14 +14 +14 +13 +13 +14 +13 +13 +14 +13 +14 +13 +13 +13 +13 +16 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +51 +54 +54 +54 +58 +58 +64 +64 +64 +68 +68 +72 +72 +73 +77 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +105 +106 +105 +110 +110 +116 +115 +116 +119 +119 +125 +125 +126 +129 +130 +134 +134 +139 +139 +139 +143 +144 +147 +147 +147 +151 +151 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +170 +173 +173 +175 +175 +178 +179 +179 +182 +183 +185 +184 +184 +188 +189 +189 +189 +188 +190 +190 +194 +195 +195 +196 +196 +198 +198 +199 +201 +201 +201 +200 +203 +202 +202 +205 +204 +205 +204 +204 +207 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +207 +206 +207 +204 +204 +204 +204 +204 +202 +202 +202 +200 +200 +200 +200 +200 +198 +198 +197 +196 +196 +194 +195 +191 +191 +190 +189 +189 +185 +185 +183 +182 +183 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +152 +147 +147 +143 +143 +140 +139 +139 +133 +133 +130 +129 +129 +126 +125 +119 +119 +120 +116 +115 +109 +109 +110 +106 +106 +100 +100 +101 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +72 +72 +72 +68 +68 +65 +64 +64 +59 +58 +54 +54 +52 +50 +50 +47 +48 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +20 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +14 +14 +14 +13 +14 +13 +14 +14 +14 +13 +13 +14 +14 +13 +14 +14 +14 +13 +13 +13 +13 +13 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +46 +51 +51 +55 +54 +55 +58 +59 +64 +64 +69 +68 +68 +72 +72 +76 +76 +77 +82 +82 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +116 +116 +115 +119 +119 +125 +125 +125 +130 +130 +133 +134 +134 +139 +140 +143 +143 +143 +147 +147 +151 +151 +153 +157 +157 +161 +161 +165 +164 +165 +169 +169 +173 +172 +173 +175 +175 +174 +175 +174 +179 +178 +182 +182 +182 +185 +185 +188 +188 +190 +191 +191 +195 +194 +196 +197 +197 +198 +198 +200 +200 +201 +200 +201 +203 +203 +203 +204 +204 +204 +204 +204 +206 +207 +207 +206 +207 +207 +207 +206 +206 +207 +206 +206 +206 +206 +205 +204 +204 +204 +204 +202 +202 +202 +201 +200 +200 +201 +200 +199 +198 +196 +196 +195 +194 +195 +191 +191 +188 +188 +188 +185 +184 +183 +183 +183 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +126 +126 +120 +119 +120 +116 +115 +110 +110 +106 +105 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +69 +66 +64 +65 +58 +58 +54 +55 +55 +51 +51 +47 +47 +47 +43 +43 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +28 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +16 +15 +15 +13 +13 +12 +13 +14 +14 +13 +14 +13 +14 +13 +13 +14 +13 +13 +14 +13 +14 +14 +14 +14 +13 +13 +14 +13 +14 +14 +14 +14 +14 +13 +12 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +36 +37 +37 +41 +41 +43 +43 +43 +46 +46 +51 +50 +55 +54 +55 +58 +58 +64 +64 +65 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +106 +106 +106 +109 +110 +115 +116 +115 +120 +119 +119 +119 +119 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +165 +165 +165 +169 +169 +173 +173 +172 +175 +175 +178 +179 +180 +182 +183 +185 +185 +188 +188 +189 +190 +190 +194 +194 +195 +196 +196 +198 +198 +198 +200 +200 +200 +201 +201 +203 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +204 +204 +204 +204 +204 +202 +203 +200 +200 +201 +200 +200 +199 +198 +196 +197 +196 +194 +194 +191 +191 +190 +188 +189 +184 +184 +184 +183 +183 +179 +179 +178 +175 +174 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +134 +129 +129 +125 +125 +119 +119 +119 +115 +116 +110 +110 +110 +106 +106 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +84 +82 +82 +76 +76 +72 +72 +72 +69 +68 +64 +64 +64 +58 +58 +58 +58 +59 +55 +55 +50 +51 +51 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +16 +13 +13 +13 +12 +13 +14 +13 +13 +13 +14 +13 +14 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +32 +33 +37 +36 +41 +41 +41 +43 +43 +47 +46 +47 +51 +50 +54 +54 +55 +59 +59 +64 +65 +64 +68 +68 +72 +72 +73 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +100 +100 +100 +106 +106 +110 +109 +110 +116 +116 +119 +119 +122 +126 +126 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +167 +169 +169 +173 +173 +175 +175 +175 +179 +179 +182 +183 +182 +184 +185 +189 +188 +189 +191 +190 +194 +194 +195 +196 +197 +198 +198 +199 +200 +201 +200 +200 +202 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +205 +204 +204 +204 +204 +202 +202 +202 +200 +200 +200 +200 +200 +199 +199 +196 +196 +196 +194 +195 +191 +191 +190 +188 +189 +184 +184 +182 +183 +182 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +140 +139 +139 +133 +133 +130 +130 +129 +125 +125 +120 +120 +119 +116 +116 +110 +110 +110 +106 +106 +100 +100 +98 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +73 +72 +72 +72 +72 +68 +68 +64 +64 +65 +59 +59 +54 +54 +51 +51 +51 +47 +46 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +17 +17 +17 +16 +15 +15 +15 +15 +13 +13 +12 +12 +13 +13 +13 +13 +14 +14 +14 +13 +14 +14 +14 +14 +14 +13 +13 +14 +14 +14 +14 +14 +13 +13 +14 +13 +14 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +26 +32 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +51 +50 +55 +54 +58 +59 +60 +65 +64 +68 +68 +72 +72 +72 +76 +76 +83 +82 +82 +86 +86 +87 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +115 +120 +119 +120 +125 +125 +129 +129 +130 +133 +134 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +153 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +182 +183 +185 +185 +185 +188 +189 +190 +191 +194 +195 +195 +197 +196 +199 +198 +198 +200 +200 +200 +200 +200 +202 +203 +204 +204 +204 +205 +205 +206 +207 +207 +207 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +207 +205 +205 +204 +204 +204 +203 +202 +200 +201 +201 +200 +200 +198 +198 +199 +197 +196 +195 +195 +191 +191 +191 +189 +188 +185 +184 +185 +183 +183 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +166 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +134 +133 +129 +129 +125 +125 +125 +119 +119 +116 +115 +113 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +65 +64 +64 +58 +58 +54 +54 +54 +50 +51 +47 +47 +47 +43 +42 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +16 +15 +13 +13 +13 +12 +13 +13 +13 +13 +14 +14 +14 +14 +13 +14 +14 +13 +14 +14 +14 +13 +14 +14 +13 +13 +14 +14 +13 +13 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +22 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +40 +41 +41 +43 +43 +47 +46 +47 +51 +51 +54 +55 +58 +58 +58 +65 +64 +68 +68 +68 +72 +72 +72 +72 +72 +76 +77 +82 +82 +82 +86 +86 +90 +90 +92 +96 +96 +100 +100 +105 +106 +106 +110 +110 +116 +115 +116 +119 +120 +120 +119 +119 +125 +125 +129 +129 +130 +133 +133 +139 +139 +143 +143 +143 +148 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +164 +169 +169 +169 +173 +173 +175 +175 +175 +178 +179 +183 +183 +184 +185 +185 +189 +189 +190 +191 +191 +195 +195 +197 +196 +197 +199 +199 +201 +200 +201 +201 +201 +202 +202 +203 +204 +204 +205 +204 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +204 +204 +204 +204 +205 +202 +202 +203 +201 +200 +200 +200 +199 +198 +199 +197 +196 +195 +194 +194 +191 +191 +188 +188 +189 +184 +185 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +134 +129 +129 +125 +126 +120 +119 +119 +116 +116 +110 +110 +110 +106 +105 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +84 +82 +82 +76 +76 +72 +72 +72 +69 +68 +64 +64 +64 +59 +58 +54 +54 +55 +50 +51 +47 +47 +47 +43 +43 +40 +41 +40 +37 +37 +33 +32 +31 +31 +31 +27 +27 +25 +26 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +13 +13 +13 +14 +14 +14 +14 +14 +14 +14 +14 +14 +13 +13 +14 +14 +14 +14 +14 +13 +13 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +26 +27 +27 +31 +31 +33 +33 +34 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +50 +50 +55 +54 +54 +55 +55 +59 +58 +64 +64 +65 +68 +69 +72 +73 +74 +77 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +100 +100 +100 +106 +106 +110 +109 +110 +115 +115 +120 +120 +125 +125 +125 +129 +129 +133 +134 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +168 +169 +172 +173 +173 +175 +175 +179 +178 +179 +182 +182 +184 +185 +184 +189 +188 +191 +191 +191 +194 +194 +196 +197 +196 +199 +199 +201 +200 +201 +200 +201 +203 +202 +204 +205 +204 +205 +204 +207 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +206 +207 +206 +207 +204 +204 +204 +204 +204 +202 +202 +200 +200 +200 +201 +200 +198 +199 +199 +196 +197 +195 +194 +195 +190 +191 +189 +188 +189 +184 +184 +183 +183 +182 +182 +183 +179 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +149 +147 +143 +143 +143 +139 +140 +139 +140 +139 +133 +133 +133 +129 +129 +130 +129 +129 +125 +125 +119 +119 +120 +115 +115 +109 +110 +106 +106 +106 +101 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +69 +65 +64 +58 +59 +56 +54 +54 +50 +50 +47 +47 +46 +43 +42 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +20 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +13 +14 +13 +14 +13 +13 +14 +14 +14 +13 +14 +14 +13 +13 +14 +14 +14 +14 +14 +14 +13 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +37 +37 +37 +41 +41 +42 +43 +43 +47 +47 +51 +50 +50 +50 +50 +54 +54 +58 +58 +58 +65 +64 +68 +68 +69 +72 +72 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +92 +96 +95 +100 +100 +106 +106 +106 +110 +110 +116 +116 +115 +119 +119 +125 +125 +125 +129 +129 +133 +133 +134 +139 +139 +143 +143 +147 +148 +147 +151 +151 +157 +156 +157 +161 +161 +161 +161 +161 +165 +164 +169 +168 +169 +173 +173 +174 +175 +175 +179 +179 +183 +183 +184 +185 +185 +189 +188 +191 +190 +190 +195 +195 +197 +196 +196 +198 +198 +200 +200 +200 +201 +201 +202 +203 +202 +204 +204 +204 +204 +207 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +207 +206 +204 +204 +204 +204 +204 +202 +202 +203 +200 +200 +201 +201 +198 +198 +198 +196 +197 +194 +194 +195 +191 +190 +191 +191 +191 +188 +189 +184 +184 +184 +183 +182 +179 +179 +176 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +134 +133 +133 +129 +129 +125 +125 +125 +119 +120 +116 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +95 +96 +90 +90 +86 +85 +82 +82 +82 +76 +76 +72 +72 +72 +68 +64 +64 +64 +65 +59 +58 +54 +54 +55 +51 +51 +47 +47 +47 +43 +43 +41 +40 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +14 +14 +13 +13 +14 +13 +14 +14 +13 +14 +14 +14 +13 +14 +13 +13 +14 +13 +14 +14 +14 +14 +13 +13 +15 +15 +15 +17 +17 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +37 +37 +37 +41 +41 +42 +43 +43 +47 +47 +46 +46 +47 +50 +51 +55 +55 +55 +58 +58 +64 +65 +66 +68 +68 +73 +73 +76 +76 +76 +83 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +119 +120 +119 +125 +126 +129 +129 +130 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +183 +184 +185 +189 +189 +189 +191 +191 +194 +194 +195 +196 +197 +198 +198 +201 +200 +201 +201 +200 +200 +201 +201 +202 +202 +204 +204 +204 +204 +204 +206 +206 +207 +206 +206 +206 +206 +207 +206 +207 +206 +207 +207 +206 +206 +205 +205 +204 +204 +204 +203 +203 +202 +202 +202 +200 +200 +200 +200 +200 +198 +199 +196 +197 +197 +195 +194 +191 +190 +188 +189 +188 +184 +185 +183 +183 +183 +178 +179 +179 +179 +179 +174 +175 +172 +173 +173 +169 +169 +165 +165 +162 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +140 +139 +133 +133 +133 +129 +129 +125 +126 +126 +119 +119 +116 +116 +109 +110 +110 +105 +106 +100 +100 +99 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +65 +64 +58 +58 +59 +54 +54 +50 +51 +51 +47 +47 +43 +43 +43 +40 +41 +37 +38 +37 +33 +33 +31 +31 +31 +27 +27 +25 +24 +22 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +14 +14 +14 +13 +13 +14 +14 +14 +14 +13 +13 +14 +14 +14 +13 +14 +13 +14 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +14 +13 +12 +15 +15 +16 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +31 +31 +31 +32 +33 +37 +37 +37 +41 +40 +43 +43 +44 +47 +47 +50 +50 +54 +55 +54 +59 +59 +64 +64 +64 +68 +69 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +95 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +115 +116 +119 +119 +125 +125 +125 +129 +129 +133 +133 +134 +140 +139 +143 +142 +146 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +179 +183 +183 +185 +185 +188 +188 +188 +190 +191 +195 +195 +194 +196 +196 +199 +198 +198 +201 +200 +201 +201 +200 +202 +202 +204 +204 +205 +204 +204 +207 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +205 +205 +205 +204 +205 +202 +202 +203 +200 +201 +200 +200 +198 +198 +198 +196 +197 +194 +194 +194 +190 +190 +190 +191 +190 +189 +188 +184 +185 +185 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +140 +139 +133 +133 +129 +129 +129 +126 +125 +119 +119 +120 +115 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +72 +73 +68 +68 +68 +65 +64 +58 +59 +58 +54 +54 +50 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +16 +13 +13 +12 +13 +14 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +14 +14 +14 +14 +14 +14 +13 +14 +14 +14 +13 +14 +14 +14 +14 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +20 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +32 +33 +33 +37 +37 +40 +41 +40 +43 +43 +47 +47 +47 +51 +51 +54 +54 +55 +59 +58 +64 +64 +65 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +109 +116 +116 +116 +119 +120 +125 +126 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +172 +174 +175 +175 +179 +179 +182 +183 +182 +185 +184 +189 +188 +188 +191 +191 +194 +194 +195 +197 +197 +198 +199 +199 +200 +200 +201 +200 +202 +202 +202 +204 +204 +204 +205 +204 +206 +206 +206 +206 +207 +206 +207 +207 +206 +207 +207 +206 +206 +206 +207 +206 +206 +204 +204 +205 +204 +205 +202 +202 +200 +201 +200 +200 +200 +200 +201 +200 +198 +198 +196 +196 +197 +195 +195 +190 +190 +189 +188 +189 +185 +185 +182 +183 +183 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +134 +129 +129 +129 +125 +125 +120 +120 +119 +116 +116 +110 +110 +110 +106 +106 +100 +99 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +77 +76 +76 +73 +72 +68 +69 +68 +65 +64 +58 +58 +59 +54 +54 +50 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +24 +25 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +12 +13 +13 +13 +13 +13 +14 +14 +14 +14 +14 +14 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +13 +14 +14 +14 +14 +13 +13 +12 +15 +15 +17 +17 +18 +19 +18 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +36 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +54 +54 +55 +59 +58 +59 +58 +58 +65 +64 +68 +69 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +116 +115 +115 +116 +119 +119 +125 +125 +125 +129 +129 +133 +133 +134 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +182 +183 +185 +185 +189 +188 +189 +191 +190 +194 +194 +195 +197 +197 +198 +198 +198 +200 +200 +200 +201 +201 +202 +202 +204 +204 +204 +205 +204 +206 +206 +206 +206 +206 +207 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +205 +205 +205 +202 +203 +201 +201 +200 +201 +200 +198 +198 +198 +196 +197 +195 +195 +194 +191 +190 +189 +189 +189 +184 +185 +183 +183 +183 +179 +179 +175 +175 +173 +172 +173 +169 +169 +164 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +140 +133 +133 +129 +129 +126 +126 +126 +119 +119 +115 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +77 +73 +72 +72 +68 +68 +64 +65 +65 +59 +58 +58 +58 +58 +55 +54 +51 +51 +51 +47 +46 +43 +43 +44 +41 +41 +37 +38 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +12 +13 +13 +14 +13 +13 +14 +13 +14 +13 +14 +13 +13 +14 +14 +13 +14 +13 +13 +13 +13 +14 +14 +13 +14 +14 +13 +13 +14 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +26 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +51 +54 +54 +54 +59 +59 +64 +64 +65 +68 +68 +72 +72 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +115 +120 +119 +126 +126 +130 +129 +129 +134 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +166 +169 +169 +173 +173 +176 +175 +175 +178 +179 +183 +182 +182 +184 +184 +185 +185 +185 +189 +188 +190 +190 +194 +194 +196 +197 +196 +198 +199 +201 +200 +200 +200 +200 +203 +202 +204 +205 +204 +204 +204 +204 +204 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +207 +206 +204 +204 +205 +204 +204 +202 +203 +202 +201 +200 +200 +200 +201 +198 +198 +197 +197 +197 +195 +195 +190 +190 +190 +188 +189 +185 +184 +183 +182 +182 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +126 +125 +120 +120 +119 +116 +116 +110 +110 +109 +106 +106 +100 +100 +97 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +73 +68 +68 +68 +64 +64 +59 +58 +59 +55 +54 +50 +51 +47 +47 +47 +43 +43 +41 +41 +41 +36 +37 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +23 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +12 +13 +13 +14 +13 +13 +13 +14 +13 +14 +14 +13 +14 +14 +13 +14 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +14 +13 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +50 +55 +55 +58 +58 +59 +64 +64 +68 +69 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +110 +110 +110 +116 +116 +120 +120 +119 +126 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +148 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +172 +173 +173 +173 +175 +176 +179 +178 +179 +182 +182 +184 +185 +185 +188 +188 +191 +190 +194 +194 +194 +196 +196 +198 +199 +198 +200 +200 +201 +201 +200 +200 +201 +202 +202 +202 +204 +204 +205 +204 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +204 +204 +204 +205 +204 +202 +202 +203 +201 +201 +200 +200 +199 +199 +199 +196 +196 +194 +195 +194 +190 +190 +189 +189 +189 +185 +185 +183 +182 +183 +179 +179 +175 +175 +175 +173 +173 +169 +168 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +148 +147 +147 +143 +143 +139 +139 +139 +133 +133 +130 +129 +130 +125 +125 +119 +120 +116 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +91 +90 +86 +86 +86 +82 +82 +76 +76 +77 +72 +72 +69 +69 +65 +65 +65 +59 +59 +55 +55 +55 +51 +50 +50 +51 +51 +47 +46 +42 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +27 +27 +26 +25 +25 +21 +21 +21 +19 +19 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +14 +12 +13 +13 +13 +14 +14 +14 +14 +13 +13 +14 +14 +13 +14 +14 +14 +14 +14 +14 +13 +14 +14 +13 +13 +14 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +36 +41 +41 +43 +43 +43 +47 +47 +51 +51 +50 +54 +54 +59 +59 +59 +64 +64 +68 +68 +68 +72 +72 +76 +76 +77 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +115 +120 +119 +120 +125 +125 +129 +129 +130 +133 +133 +139 +139 +144 +143 +143 +147 +147 +151 +151 +151 +157 +157 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +183 +183 +183 +185 +184 +189 +189 +188 +190 +191 +191 +190 +191 +195 +194 +197 +197 +197 +198 +198 +201 +200 +201 +201 +201 +202 +202 +204 +204 +205 +204 +204 +204 +204 +204 +207 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +204 +204 +205 +204 +204 +202 +202 +202 +200 +200 +201 +200 +200 +198 +199 +197 +196 +197 +194 +195 +190 +190 +190 +189 +189 +184 +185 +182 +182 +182 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +140 +139 +139 +133 +134 +130 +129 +129 +125 +125 +126 +125 +126 +120 +120 +115 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +90 +90 +90 +86 +86 +86 +86 +86 +82 +82 +82 +82 +82 +76 +76 +73 +72 +72 +68 +68 +64 +64 +59 +59 +58 +54 +55 +50 +51 +50 +47 +47 +43 +43 +43 +41 +41 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +14 +13 +14 +14 +13 +13 +14 +13 +13 +13 +14 +14 +14 +13 +13 +14 +14 +14 +14 +14 +14 +13 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +36 +37 +40 +41 +41 +43 +43 +47 +46 +47 +50 +50 +54 +55 +59 +59 +59 +64 +64 +64 +64 +64 +69 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +91 +96 +96 +100 +100 +105 +106 +106 +110 +110 +116 +115 +115 +119 +120 +119 +119 +119 +125 +125 +129 +129 +130 +133 +133 +139 +139 +141 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +165 +165 +165 +168 +169 +173 +173 +173 +175 +175 +179 +179 +180 +182 +183 +184 +184 +188 +188 +189 +191 +190 +194 +194 +194 +196 +197 +199 +198 +198 +200 +200 +200 +200 +201 +202 +202 +204 +204 +204 +205 +204 +207 +207 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +205 +204 +205 +203 +202 +200 +200 +201 +201 +201 +198 +198 +198 +198 +198 +197 +197 +195 +194 +195 +190 +191 +189 +188 +188 +184 +185 +183 +183 +183 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +140 +141 +133 +133 +130 +129 +125 +125 +125 +120 +119 +115 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +84 +82 +82 +76 +77 +72 +72 +72 +68 +69 +64 +64 +65 +58 +58 +58 +58 +59 +54 +54 +50 +50 +51 +47 +47 +43 +43 +42 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +18 +15 +15 +15 +15 +14 +13 +13 +12 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +14 +13 +14 +14 +14 +13 +14 +14 +13 +14 +13 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +24 +25 +25 +27 +28 +31 +31 +31 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +50 +51 +54 +54 +53 +58 +58 +65 +64 +65 +68 +69 +73 +73 +72 +76 +76 +82 +82 +87 +86 +86 +90 +90 +96 +96 +96 +100 +100 +105 +105 +106 +110 +110 +115 +115 +116 +119 +119 +125 +126 +126 +129 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +147 +151 +151 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +170 +173 +173 +174 +175 +179 +178 +179 +183 +183 +185 +185 +185 +189 +188 +190 +190 +190 +195 +195 +197 +196 +197 +198 +199 +201 +201 +201 +200 +200 +203 +202 +204 +204 +205 +205 +204 +206 +206 +207 +207 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +205 +205 +205 +204 +202 +202 +200 +200 +201 +200 +200 +198 +199 +198 +196 +196 +195 +194 +194 +191 +191 +188 +188 +188 +185 +185 +183 +182 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +164 +161 +161 +157 +157 +157 +151 +151 +147 +147 +148 +143 +143 +139 +139 +133 +133 +134 +130 +129 +125 +126 +126 +120 +119 +116 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +93 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +68 +68 +68 +64 +64 +59 +59 +59 +55 +55 +51 +51 +47 +46 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +13 +13 +13 +13 +13 +12 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +24 +26 +27 +27 +31 +31 +34 +33 +33 +37 +37 +41 +41 +40 +43 +43 +47 +47 +47 +50 +51 +55 +54 +54 +58 +58 +64 +64 +66 +68 +68 +73 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +91 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +117 +119 +120 +126 +126 +130 +129 +130 +134 +134 +139 +140 +139 +143 +143 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +163 +165 +165 +169 +169 +173 +172 +173 +175 +175 +179 +179 +179 +183 +183 +185 +184 +184 +189 +189 +190 +191 +191 +195 +195 +196 +196 +197 +199 +199 +200 +201 +200 +201 +200 +202 +203 +204 +204 +204 +205 +205 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +204 +205 +204 +204 +204 +202 +202 +200 +201 +201 +200 +200 +198 +199 +198 +196 +197 +195 +194 +195 +190 +191 +189 +189 +185 +185 +185 +183 +183 +178 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +129 +130 +130 +126 +125 +119 +119 +120 +116 +115 +110 +110 +108 +105 +106 +100 +100 +96 +96 +96 +89 +90 +86 +86 +86 +82 +82 +82 +82 +82 +76 +76 +72 +72 +73 +69 +68 +64 +64 +61 +58 +59 +55 +54 +50 +50 +50 +46 +47 +44 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +16 +15 +15 +15 +13 +13 +12 +13 +14 +13 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +14 +13 +14 +14 +14 +13 +14 +14 +14 +13 +13 +13 +13 +12 +15 +15 +17 +17 +18 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +30 +33 +33 +37 +37 +37 +40 +40 +43 +43 +43 +47 +47 +50 +51 +51 +54 +54 +59 +59 +65 +64 +64 +68 +68 +72 +72 +72 +76 +76 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +97 +100 +100 +106 +106 +109 +110 +110 +116 +116 +120 +120 +119 +125 +125 +125 +125 +125 +130 +129 +134 +134 +134 +140 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +156 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +179 +182 +182 +185 +185 +186 +189 +188 +191 +190 +194 +194 +194 +197 +196 +199 +199 +198 +200 +200 +200 +200 +200 +202 +203 +204 +205 +204 +204 +205 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +205 +204 +205 +204 +204 +202 +202 +200 +200 +200 +200 +201 +199 +198 +197 +196 +196 +194 +194 +191 +190 +190 +188 +188 +185 +184 +184 +182 +183 +178 +179 +179 +175 +175 +173 +173 +174 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +147 +147 +147 +143 +143 +139 +139 +139 +133 +134 +130 +129 +127 +125 +126 +120 +120 +115 +116 +116 +109 +109 +106 +106 +107 +100 +100 +100 +100 +100 +95 +96 +90 +90 +90 +86 +86 +82 +82 +79 +76 +76 +72 +72 +68 +68 +69 +64 +65 +58 +59 +59 +55 +55 +51 +51 +50 +47 +47 +43 +43 +43 +41 +40 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +14 +14 +14 +14 +14 +14 +14 +13 +13 +13 +14 +13 +13 +14 +13 +14 +13 +13 +13 +13 +14 +13 +13 +14 +13 +16 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +36 +37 +38 +41 +41 +43 +43 +48 +47 +46 +51 +50 +54 +54 +54 +59 +59 +59 +59 +59 +64 +64 +68 +68 +68 +73 +72 +77 +77 +77 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +106 +106 +106 +110 +110 +116 +116 +116 +119 +119 +125 +125 +129 +129 +130 +133 +133 +138 +139 +139 +143 +143 +147 +147 +147 +151 +151 +156 +157 +157 +161 +165 +165 +165 +165 +169 +169 +172 +173 +175 +175 +175 +178 +178 +183 +182 +183 +185 +185 +189 +188 +189 +190 +190 +194 +194 +195 +196 +196 +198 +198 +198 +200 +200 +201 +201 +203 +202 +202 +205 +205 +204 +204 +204 +206 +207 +207 +206 +206 +206 +206 +207 +207 +206 +207 +206 +206 +206 +206 +206 +205 +204 +204 +203 +204 +202 +201 +201 +200 +200 +200 +198 +199 +197 +197 +197 +195 +195 +191 +190 +191 +188 +189 +185 +185 +184 +182 +183 +178 +179 +176 +175 +175 +173 +173 +169 +169 +169 +165 +165 +165 +165 +165 +161 +161 +157 +157 +157 +152 +151 +147 +147 +145 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +125 +119 +120 +119 +119 +120 +115 +115 +110 +110 +110 +106 +106 +100 +100 +98 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +73 +68 +68 +68 +65 +65 +59 +59 +59 +55 +55 +50 +50 +47 +46 +47 +42 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +14 +13 +14 +14 +13 +13 +14 +14 +13 +14 +14 +14 +13 +13 +14 +14 +14 +13 +14 +13 +14 +13 +13 +12 +16 +15 +17 +17 +17 +19 +19 +21 +21 +22 +25 +25 +27 +27 +32 +31 +31 +33 +33 +37 +37 +37 +41 +40 +41 +41 +41 +43 +42 +47 +47 +47 +51 +51 +55 +55 +55 +59 +59 +65 +64 +68 +68 +68 +72 +73 +76 +76 +76 +82 +82 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +102 +106 +106 +110 +110 +115 +116 +116 +119 +120 +125 +125 +125 +130 +129 +133 +133 +133 +140 +139 +143 +143 +143 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +184 +184 +184 +188 +188 +191 +190 +194 +194 +195 +197 +197 +198 +198 +199 +201 +201 +200 +201 +200 +202 +202 +204 +205 +204 +204 +204 +206 +206 +207 +206 +207 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +204 +205 +205 +204 +204 +202 +202 +200 +200 +200 +200 +200 +198 +199 +200 +196 +196 +195 +194 +190 +191 +190 +189 +189 +185 +185 +184 +183 +183 +183 +183 +182 +179 +179 +174 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +126 +120 +119 +120 +116 +115 +109 +110 +109 +106 +105 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +69 +69 +68 +65 +64 +58 +58 +59 +54 +55 +51 +51 +51 +47 +47 +42 +43 +43 +41 +41 +37 +37 +37 +33 +32 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +12 +13 +13 +13 +14 +14 +13 +14 +13 +14 +14 +14 +13 +13 +14 +13 +13 +13 +14 +14 +14 +14 +13 +13 +14 +14 +14 +13 +14 +13 +13 +13 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +40 +41 +41 +43 +43 +47 +46 +50 +50 +51 +55 +55 +58 +58 +58 +64 +64 +64 +64 +64 +68 +69 +72 +72 +73 +76 +77 +82 +82 +86 +86 +85 +90 +90 +96 +96 +96 +100 +100 +106 +106 +105 +110 +110 +116 +116 +116 +119 +120 +125 +125 +126 +129 +130 +133 +133 +139 +139 +139 +144 +143 +147 +147 +148 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +183 +183 +182 +184 +184 +188 +188 +188 +191 +190 +195 +195 +194 +196 +197 +198 +199 +198 +200 +201 +200 +201 +201 +202 +203 +204 +205 +205 +204 +205 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +207 +207 +207 +204 +204 +204 +204 +204 +202 +202 +200 +201 +200 +201 +200 +198 +198 +197 +196 +196 +194 +194 +194 +194 +194 +190 +191 +188 +188 +189 +184 +184 +183 +183 +183 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +140 +139 +139 +133 +133 +129 +129 +129 +126 +126 +119 +119 +120 +115 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +87 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +65 +64 +59 +59 +58 +55 +54 +50 +50 +51 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +32 +33 +31 +30 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +13 +14 +14 +13 +14 +14 +13 +14 +14 +14 +14 +13 +14 +14 +14 +13 +14 +14 +14 +14 +13 +13 +14 +14 +13 +14 +13 +13 +15 +15 +15 +17 +17 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +26 +28 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +47 +47 +47 +51 +51 +55 +55 +55 +58 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +85 +86 +86 +90 +90 +95 +96 +96 +100 +100 +106 +105 +106 +110 +110 +116 +116 +119 +119 +119 +125 +126 +130 +129 +130 +133 +133 +139 +139 +139 +143 +143 +147 +148 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +169 +169 +168 +173 +173 +174 +174 +175 +179 +179 +183 +183 +183 +185 +184 +189 +188 +188 +191 +191 +194 +195 +195 +196 +196 +199 +198 +201 +201 +201 +200 +200 +202 +202 +202 +204 +205 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +204 +204 +205 +204 +204 +202 +202 +202 +200 +201 +200 +200 +200 +201 +201 +198 +198 +198 +196 +196 +194 +195 +192 +191 +190 +188 +188 +185 +184 +184 +183 +183 +179 +178 +179 +175 +175 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +140 +133 +133 +129 +130 +129 +125 +126 +120 +119 +120 +115 +115 +109 +110 +106 +106 +106 +100 +100 +100 +100 +100 +96 +96 +90 +90 +91 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +69 +68 +64 +64 +59 +59 +59 +54 +54 +50 +50 +51 +47 +47 +42 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +22 +21 +21 +19 +19 +19 +19 +19 +17 +17 +14 +16 +15 +15 +15 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +14 +13 +14 +14 +13 +13 +14 +14 +13 +14 +14 +13 +13 +13 +14 +14 +14 +14 +13 +13 +14 +13 +15 +15 +16 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +42 +46 +47 +46 +50 +51 +54 +55 +54 +58 +59 +64 +64 +65 +69 +68 +72 +72 +72 +76 +76 +82 +82 +83 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +109 +110 +116 +115 +115 +119 +120 +126 +126 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +179 +182 +183 +184 +185 +189 +189 +189 +190 +190 +194 +195 +194 +196 +196 +198 +198 +199 +200 +200 +201 +200 +201 +202 +202 +204 +205 +205 +204 +205 +207 +206 +207 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +207 +206 +205 +204 +205 +205 +205 +202 +203 +203 +200 +200 +201 +200 +198 +198 +198 +196 +196 +194 +194 +195 +190 +190 +191 +191 +190 +189 +189 +185 +185 +185 +183 +183 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +144 +139 +139 +134 +133 +129 +129 +129 +126 +125 +119 +119 +120 +116 +115 +110 +110 +110 +106 +105 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +76 +76 +76 +72 +72 +69 +68 +68 +64 +64 +58 +58 +58 +54 +55 +51 +50 +51 +47 +47 +43 +43 +43 +41 +41 +37 +36 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +20 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +14 +13 +14 +14 +13 +14 +14 +14 +14 +14 +13 +13 +13 +14 +14 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +14 +14 +13 +15 +15 +15 +17 +17 +17 +18 +17 +19 +19 +21 +21 +21 +25 +25 +26 +27 +28 +31 +30 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +50 +51 +54 +55 +58 +58 +58 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +115 +119 +119 +125 +125 +125 +130 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +160 +161 +161 +165 +165 +169 +169 +172 +172 +173 +175 +175 +178 +178 +179 +183 +182 +185 +185 +184 +189 +189 +190 +191 +191 +194 +195 +197 +196 +196 +199 +198 +200 +200 +200 +200 +200 +202 +202 +204 +204 +205 +205 +204 +204 +205 +205 +206 +207 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +204 +205 +205 +204 +204 +202 +202 +202 +200 +200 +200 +201 +200 +200 +200 +199 +198 +198 +196 +197 +194 +194 +192 +190 +191 +188 +188 +184 +185 +185 +182 +182 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +162 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +126 +120 +120 +115 +116 +115 +110 +109 +106 +106 +100 +100 +99 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +69 +69 +64 +64 +65 +58 +58 +54 +54 +51 +50 +50 +47 +47 +43 +43 +43 +41 +41 +40 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +28 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +14 +14 +13 +14 +13 +13 +13 +14 +13 +14 +14 +13 +14 +13 +14 +13 +14 +13 +14 +13 +14 +14 +13 +13 +13 +13 +14 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +50 +50 +50 +54 +54 +58 +58 +58 +64 +64 +68 +68 +69 +72 +73 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +116 +119 +119 +119 +125 +126 +130 +129 +129 +133 +133 +139 +140 +139 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +183 +185 +185 +189 +188 +191 +190 +191 +195 +194 +197 +196 +196 +198 +198 +201 +200 +200 +200 +200 +202 +202 +203 +204 +204 +204 +204 +205 +207 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +204 +204 +204 +204 +205 +203 +202 +201 +201 +201 +201 +201 +199 +198 +196 +196 +197 +194 +194 +191 +189 +190 +188 +189 +185 +184 +184 +182 +182 +178 +179 +179 +175 +175 +173 +173 +168 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +130 +129 +125 +125 +120 +120 +119 +115 +116 +115 +115 +115 +109 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +73 +72 +72 +68 +68 +64 +64 +64 +58 +59 +54 +55 +55 +51 +50 +47 +47 +47 +43 +42 +41 +41 +41 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +13 +13 +14 +14 +13 +14 +14 +13 +13 +14 +14 +13 +14 +14 +14 +13 +13 +14 +14 +14 +13 +13 +13 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +36 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +51 +55 +54 +58 +59 +58 +65 +64 +68 +68 +68 +72 +73 +76 +76 +83 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +115 +120 +120 +120 +125 +125 +129 +129 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +170 +173 +173 +175 +175 +179 +179 +179 +183 +183 +185 +184 +184 +188 +188 +189 +188 +189 +190 +191 +194 +194 +194 +197 +197 +199 +198 +200 +201 +200 +200 +201 +203 +203 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +207 +206 +206 +207 +206 +206 +204 +204 +205 +204 +204 +203 +202 +200 +201 +201 +200 +201 +199 +198 +199 +197 +197 +195 +195 +195 +191 +191 +189 +189 +185 +185 +185 +182 +183 +179 +178 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +160 +161 +157 +157 +157 +151 +151 +147 +147 +144 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +125 +120 +119 +116 +116 +116 +110 +110 +106 +105 +107 +100 +100 +96 +96 +91 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +58 +58 +54 +54 +55 +51 +50 +47 +47 +43 +43 +43 +41 +41 +37 +36 +37 +33 +33 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +20 +19 +19 +17 +17 +15 +16 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +13 +14 +14 +14 +13 +14 +14 +13 +14 +13 +13 +13 +13 +14 +14 +14 +13 +14 +14 +14 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +24 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +42 +43 +42 +47 +47 +51 +51 +51 +55 +55 +58 +59 +64 +64 +65 +68 +69 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +116 +116 +115 +119 +120 +125 +126 +125 +130 +129 +129 +130 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +148 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +178 +178 +183 +183 +183 +185 +185 +188 +189 +189 +191 +191 +195 +195 +196 +197 +196 +199 +199 +200 +201 +201 +200 +200 +200 +200 +200 +202 +202 +204 +204 +204 +204 +205 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +205 +204 +204 +202 +203 +200 +200 +201 +200 +201 +198 +198 +197 +196 +197 +195 +194 +190 +190 +191 +189 +189 +185 +185 +185 +183 +183 +179 +179 +179 +175 +175 +172 +173 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +126 +125 +125 +120 +120 +115 +115 +109 +110 +110 +105 +106 +100 +100 +100 +96 +96 +90 +90 +89 +86 +86 +82 +82 +82 +76 +76 +72 +72 +75 +68 +68 +64 +64 +58 +58 +58 +55 +55 +51 +51 +51 +47 +47 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +14 +14 +13 +14 +13 +13 +13 +13 +14 +14 +13 +13 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +48 +47 +47 +51 +50 +55 +55 +55 +59 +58 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +115 +120 +120 +125 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +168 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +182 +185 +184 +188 +189 +189 +190 +191 +195 +194 +194 +196 +196 +196 +197 +196 +198 +198 +201 +200 +201 +200 +200 +203 +202 +204 +204 +205 +204 +204 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +206 +206 +204 +204 +205 +205 +205 +202 +202 +201 +201 +200 +201 +201 +200 +200 +200 +199 +198 +196 +196 +196 +194 +194 +190 +191 +190 +189 +189 +185 +185 +184 +182 +183 +178 +179 +175 +174 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +144 +140 +139 +133 +133 +130 +129 +129 +125 +125 +120 +119 +119 +115 +116 +110 +110 +110 +106 +106 +100 +100 +99 +96 +96 +90 +91 +90 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +69 +69 +65 +64 +65 +64 +64 +58 +58 +55 +55 +54 +50 +51 +47 +46 +45 +43 +43 +41 +41 +36 +37 +37 +33 +33 +32 +31 +31 +27 +27 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +13 +14 +13 +14 +13 +14 +14 +14 +14 +14 +14 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +36 +41 +40 +41 +43 +43 +47 +46 +47 +50 +50 +54 +54 +54 +58 +58 +64 +65 +65 +69 +68 +72 +72 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +115 +119 +119 +125 +126 +125 +129 +129 +133 +133 +133 +139 +140 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +162 +165 +165 +168 +169 +172 +173 +173 +175 +175 +179 +179 +179 +183 +183 +183 +183 +183 +185 +185 +188 +189 +189 +191 +190 +194 +194 +196 +196 +197 +198 +198 +201 +200 +200 +200 +200 +202 +202 +202 +204 +204 +205 +204 +204 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +202 +200 +200 +201 +200 +200 +199 +198 +196 +196 +196 +194 +195 +190 +190 +188 +188 +189 +185 +185 +182 +182 +182 +179 +179 +175 +175 +175 +173 +173 +169 +169 +168 +165 +165 +161 +161 +162 +157 +157 +151 +151 +148 +147 +147 +143 +144 +139 +139 +139 +133 +133 +129 +129 +130 +126 +125 +119 +120 +115 +115 +109 +110 +110 +106 +106 +100 +100 +95 +96 +96 +90 +90 +86 +86 +86 +82 +82 +82 +82 +82 +77 +76 +72 +72 +72 +68 +68 +64 +65 +61 +58 +59 +55 +54 +51 +51 +50 +47 +47 +43 +43 +43 +41 +41 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +26 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +14 +14 +13 +13 +14 +14 +13 +14 +13 +13 +14 +13 +13 +13 +13 +14 +13 +13 +15 +15 +16 +17 +17 +19 +19 +21 +22 +21 +25 +25 +27 +27 +27 +31 +31 +33 +32 +33 +36 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +51 +55 +54 +58 +58 +59 +64 +65 +68 +68 +68 +72 +72 +76 +76 +77 +82 +82 +86 +86 +86 +90 +90 +96 +96 +97 +100 +100 +106 +106 +110 +110 +110 +115 +116 +120 +120 +119 +125 +126 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +149 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +173 +173 +173 +175 +175 +179 +178 +179 +182 +183 +184 +185 +189 +189 +189 +191 +191 +194 +194 +194 +197 +196 +198 +198 +198 +200 +201 +201 +200 +200 +202 +203 +204 +204 +205 +205 +205 +206 +206 +206 +207 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +205 +204 +204 +205 +205 +203 +202 +200 +200 +201 +201 +200 +198 +198 +197 +197 +197 +195 +195 +190 +191 +190 +189 +188 +185 +184 +184 +182 +182 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +134 +129 +130 +125 +126 +127 +120 +120 +115 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +74 +72 +72 +68 +68 +64 +64 +65 +58 +59 +55 +54 +55 +51 +51 +50 +51 +51 +47 +47 +43 +43 +43 +41 +40 +37 +37 +35 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +16 +13 +13 +12 +13 +14 +14 +13 +14 +14 +13 +13 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +14 +14 +14 +14 +14 +14 +13 +13 +13 +16 +15 +17 +17 +19 +19 +19 +21 +21 +25 +24 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +36 +41 +41 +43 +43 +47 +47 +47 +50 +51 +54 +54 +54 +59 +59 +64 +65 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +97 +96 +96 +100 +100 +106 +106 +106 +109 +110 +116 +116 +115 +119 +120 +125 +126 +125 +129 +129 +133 +134 +136 +140 +140 +143 +144 +148 +147 +147 +151 +151 +157 +157 +158 +161 +161 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +174 +175 +174 +175 +175 +179 +179 +182 +183 +182 +185 +185 +188 +189 +189 +190 +191 +195 +194 +195 +196 +197 +198 +198 +199 +201 +201 +200 +201 +202 +202 +203 +204 +204 +204 +204 +204 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +205 +204 +204 +205 +203 +202 +202 +200 +200 +200 +200 +201 +198 +198 +196 +196 +196 +195 +194 +191 +191 +191 +189 +188 +184 +185 +185 +183 +182 +179 +179 +175 +175 +175 +173 +173 +169 +169 +168 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +144 +139 +139 +133 +133 +129 +130 +129 +125 +125 +119 +119 +119 +116 +115 +115 +115 +115 +110 +110 +106 +106 +105 +100 +100 +96 +96 +93 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +68 +68 +68 +64 +64 +58 +59 +58 +54 +54 +50 +50 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +13 +14 +14 +14 +13 +13 +14 +13 +13 +14 +14 +13 +14 +13 +13 +14 +14 +14 +13 +13 +14 +14 +13 +14 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +22 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +42 +43 +47 +47 +50 +51 +51 +54 +54 +58 +59 +59 +65 +65 +68 +69 +73 +72 +72 +76 +76 +82 +82 +82 +86 +87 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +107 +110 +110 +116 +115 +119 +120 +120 +126 +126 +129 +130 +130 +133 +133 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +154 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +172 +175 +175 +179 +179 +179 +183 +183 +185 +185 +185 +189 +189 +191 +190 +193 +195 +195 +197 +197 +198 +198 +199 +201 +200 +201 +200 +200 +202 +203 +205 +204 +204 +204 +204 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +205 +204 +205 +204 +203 +203 +200 +200 +201 +201 +201 +199 +199 +198 +197 +197 +194 +195 +191 +191 +190 +188 +189 +184 +184 +185 +183 +183 +179 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +166 +161 +161 +157 +157 +152 +151 +151 +147 +147 +143 +143 +143 +139 +139 +139 +140 +139 +133 +133 +129 +130 +130 +126 +126 +119 +119 +117 +115 +115 +110 +110 +106 +106 +106 +99 +100 +95 +96 +96 +90 +90 +90 +90 +90 +86 +86 +82 +82 +83 +76 +76 +72 +72 +69 +68 +68 +64 +64 +58 +58 +58 +54 +54 +51 +50 +51 +47 +47 +42 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +12 +14 +13 +13 +13 +13 +14 +13 +13 +14 +13 +14 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +50 +54 +55 +54 +58 +59 +64 +64 +64 +68 +68 +69 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +87 +86 +86 +90 +90 +95 +96 +96 +100 +100 +106 +106 +106 +110 +110 +110 +110 +110 +116 +116 +120 +119 +119 +125 +125 +130 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +168 +169 +169 +173 +173 +175 +175 +178 +179 +179 +183 +182 +184 +185 +185 +189 +189 +191 +191 +190 +194 +194 +197 +197 +196 +199 +199 +201 +201 +201 +200 +200 +203 +202 +204 +205 +205 +204 +205 +206 +206 +207 +206 +207 +207 +207 +206 +207 +206 +206 +207 +206 +206 +207 +204 +204 +204 +205 +205 +203 +203 +201 +201 +201 +201 +200 +199 +198 +199 +197 +197 +195 +194 +195 +190 +191 +189 +189 +188 +185 +185 +183 +183 +182 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +164 +161 +161 +161 +161 +161 +157 +157 +151 +152 +151 +147 +147 +143 +143 +141 +139 +139 +133 +134 +129 +129 +129 +125 +125 +120 +119 +119 +115 +115 +116 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +91 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +69 +68 +64 +65 +65 +59 +58 +54 +55 +55 +51 +50 +46 +47 +44 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +26 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +12 +13 +14 +14 +14 +14 +14 +13 +14 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +14 +14 +13 +14 +14 +13 +13 +14 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +47 +47 +47 +50 +51 +55 +55 +54 +58 +58 +64 +64 +66 +68 +68 +73 +72 +76 +76 +77 +82 +82 +86 +86 +86 +90 +90 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +115 +115 +115 +120 +120 +125 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +165 +165 +169 +169 +169 +173 +173 +173 +173 +173 +175 +175 +175 +178 +179 +183 +182 +182 +184 +185 +188 +188 +189 +190 +190 +195 +194 +197 +196 +196 +198 +198 +200 +200 +200 +200 +201 +203 +203 +203 +204 +204 +204 +204 +204 +207 +206 +207 +207 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +205 +204 +204 +205 +204 +205 +204 +204 +202 +203 +200 +200 +200 +201 +201 +198 +198 +200 +196 +197 +194 +194 +191 +191 +190 +189 +188 +185 +184 +184 +183 +182 +183 +182 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +158 +157 +157 +151 +151 +151 +151 +151 +147 +147 +147 +147 +147 +143 +143 +139 +139 +139 +134 +133 +130 +130 +130 +125 +125 +119 +119 +116 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +59 +58 +58 +55 +55 +50 +50 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +24 +25 +21 +21 +21 +19 +18 +17 +17 +17 +15 +15 +15 +15 +16 +13 +13 +12 +13 +14 +13 +14 +13 +13 +13 +14 +13 +14 +13 +13 +14 +13 +13 +14 +13 +14 +14 +13 +14 +13 +13 +14 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +21 +21 +21 +25 +25 +27 +27 +28 +31 +31 +33 +33 +34 +37 +37 +40 +41 +42 +43 +43 +47 +47 +51 +51 +51 +54 +55 +54 +55 +55 +59 +58 +64 +64 +64 +68 +68 +72 +72 +74 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +116 +116 +120 +119 +126 +126 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +172 +175 +175 +175 +179 +178 +182 +183 +183 +185 +184 +189 +189 +189 +190 +191 +195 +195 +195 +196 +197 +199 +199 +199 +200 +201 +200 +200 +203 +202 +203 +205 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +207 +206 +206 +204 +204 +205 +204 +205 +202 +202 +200 +201 +201 +200 +201 +198 +198 +199 +197 +197 +195 +194 +194 +190 +190 +188 +188 +189 +185 +185 +182 +183 +178 +179 +179 +175 +175 +173 +173 +173 +169 +169 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +130 +125 +126 +120 +119 +119 +116 +115 +110 +109 +110 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +65 +65 +58 +58 +59 +54 +54 +50 +51 +47 +47 +47 +42 +43 +41 +41 +41 +36 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +14 +13 +14 +13 +14 +13 +13 +14 +14 +14 +14 +14 +14 +14 +13 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +15 +15 +16 +17 +17 +19 +19 +19 +21 +21 +25 +25 +26 +27 +27 +31 +31 +32 +33 +32 +37 +37 +41 +41 +41 +43 +43 +43 +43 +43 +47 +47 +51 +51 +51 +55 +54 +59 +58 +64 +64 +64 +68 +69 +72 +72 +72 +76 +76 +82 +83 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +115 +116 +115 +119 +119 +125 +125 +126 +129 +129 +133 +133 +134 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +166 +165 +165 +169 +169 +172 +173 +173 +175 +175 +175 +175 +175 +179 +178 +182 +183 +183 +185 +185 +189 +189 +189 +191 +190 +195 +194 +197 +197 +196 +199 +198 +201 +200 +200 +200 +200 +200 +200 +200 +202 +202 +204 +205 +205 +205 +204 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +207 +206 +205 +204 +204 +204 +204 +204 +204 +202 +202 +202 +200 +200 +200 +200 +201 +198 +199 +196 +197 +195 +195 +194 +191 +191 +189 +188 +188 +185 +184 +183 +182 +183 +178 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +156 +157 +151 +151 +147 +147 +147 +143 +143 +139 +140 +139 +133 +133 +130 +129 +130 +125 +125 +120 +119 +115 +116 +115 +109 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +85 +86 +82 +82 +77 +76 +76 +72 +72 +68 +68 +64 +64 +65 +59 +58 +54 +54 +55 +51 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +13 +14 +13 +13 +13 +14 +14 +14 +13 +13 +14 +14 +14 +13 +14 +14 +13 +13 +14 +14 +14 +13 +13 +14 +13 +13 +13 +13 +13 +15 +15 +17 +17 +19 +19 +19 +21 +22 +25 +25 +25 +27 +27 +27 +27 +27 +31 +31 +33 +34 +33 +37 +37 +41 +40 +43 +43 +42 +47 +47 +50 +51 +50 +54 +54 +59 +59 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +77 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +116 +120 +119 +119 +125 +125 +129 +130 +130 +133 +134 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +183 +182 +183 +184 +185 +188 +189 +189 +190 +190 +195 +194 +194 +196 +196 +199 +198 +199 +200 +200 +200 +200 +201 +202 +202 +205 +204 +204 +204 +204 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +207 +207 +207 +206 +204 +204 +204 +204 +205 +202 +202 +200 +201 +201 +201 +200 +198 +199 +198 +196 +196 +197 +197 +196 +194 +194 +190 +191 +191 +188 +188 +184 +184 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +139 +140 +139 +133 +133 +129 +130 +130 +125 +126 +119 +119 +120 +116 +115 +110 +110 +110 +106 +106 +100 +100 +99 +96 +96 +90 +90 +87 +86 +82 +82 +76 +77 +76 +72 +72 +72 +72 +72 +69 +68 +64 +65 +65 +58 +59 +55 +54 +55 +51 +51 +47 +46 +43 +42 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +24 +25 +25 +21 +21 +19 +19 +20 +17 +17 +15 +16 +16 +15 +15 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +14 +13 +14 +13 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +13 +13 +15 +15 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +26 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +46 +47 +51 +51 +54 +55 +55 +59 +58 +64 +65 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +95 +96 +96 +100 +100 +105 +105 +106 +110 +110 +115 +116 +120 +119 +120 +125 +125 +130 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +174 +175 +179 +179 +183 +183 +183 +184 +185 +189 +189 +189 +190 +191 +194 +194 +195 +196 +196 +198 +198 +200 +200 +200 +200 +201 +202 +202 +202 +204 +204 +205 +205 +204 +204 +204 +207 +207 +207 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +205 +204 +205 +204 +204 +202 +202 +202 +202 +203 +200 +200 +200 +200 +200 +198 +198 +196 +197 +195 +194 +195 +191 +190 +188 +188 +188 +184 +184 +183 +183 +182 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +158 +157 +157 +151 +151 +147 +147 +147 +143 +143 +144 +143 +143 +139 +139 +133 +133 +133 +130 +129 +125 +125 +125 +120 +119 +115 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +59 +58 +58 +54 +54 +55 +54 +55 +51 +51 +47 +47 +47 +43 +42 +41 +41 +40 +37 +37 +33 +33 +33 +31 +31 +27 +27 +26 +25 +25 +21 +21 +19 +19 +19 +17 +17 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +12 +14 +13 +13 +13 +14 +14 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +13 +13 +13 +13 +14 +13 +14 +14 +13 +14 +13 +12 +15 +15 +17 +18 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +42 +43 +42 +47 +47 +50 +51 +51 +55 +54 +58 +58 +59 +64 +64 +68 +69 +69 +72 +72 +76 +76 +76 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +116 +119 +119 +120 +125 +125 +129 +129 +130 +133 +134 +139 +139 +144 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +176 +175 +175 +179 +178 +183 +183 +184 +189 +189 +190 +190 +190 +190 +191 +194 +195 +197 +196 +196 +198 +199 +200 +201 +200 +200 +201 +203 +203 +203 +204 +204 +204 +204 +206 +207 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +207 +206 +207 +206 +206 +206 +204 +204 +204 +205 +203 +202 +202 +201 +201 +200 +201 +200 +198 +198 +196 +196 +196 +195 +195 +190 +190 +191 +189 +189 +185 +184 +185 +182 +182 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +134 +133 +130 +130 +130 +125 +126 +120 +119 +119 +116 +116 +109 +110 +110 +106 +105 +100 +100 +100 +96 +96 +90 +90 +91 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +68 +68 +65 +64 +59 +58 +58 +55 +55 +50 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +12 +13 +13 +14 +13 +14 +13 +13 +13 +13 +14 +14 +14 +13 +14 +13 +13 +14 +14 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +31 +30 +31 +33 +33 +36 +37 +37 +41 +41 +43 +43 +42 +47 +47 +50 +50 +51 +54 +54 +58 +59 +58 +64 +65 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +116 +120 +119 +125 +125 +125 +129 +129 +133 +133 +133 +139 +140 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +174 +172 +173 +175 +175 +178 +178 +179 +182 +182 +183 +183 +183 +185 +185 +188 +189 +189 +191 +190 +195 +195 +195 +196 +197 +199 +198 +200 +201 +201 +201 +201 +202 +202 +202 +204 +204 +204 +205 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +204 +205 +204 +204 +204 +202 +202 +200 +200 +200 +200 +200 +199 +199 +199 +197 +196 +195 +195 +191 +190 +191 +189 +189 +185 +185 +185 +183 +183 +183 +183 +183 +179 +179 +175 +175 +175 +173 +172 +169 +169 +169 +165 +165 +161 +160 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +140 +139 +139 +133 +134 +129 +129 +129 +125 +125 +119 +120 +120 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +73 +72 +68 +69 +69 +64 +64 +58 +58 +55 +54 +54 +50 +51 +47 +47 +47 +43 +43 +41 +41 +42 +37 +36 +33 +33 +33 +31 +31 +27 +27 +26 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +13 +13 +13 +14 +14 +13 +14 +13 +14 +13 +14 +14 +14 +14 +13 +14 +14 +14 +13 +14 +13 +13 +13 +14 +13 +12 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +42 +47 +47 +51 +50 +51 +55 +55 +59 +59 +59 +64 +64 +68 +69 +69 +72 +72 +76 +76 +76 +82 +82 +86 +86 +87 +90 +91 +96 +96 +101 +99 +99 +106 +106 +109 +110 +109 +116 +116 +115 +115 +115 +120 +120 +126 +126 +126 +129 +129 +133 +133 +134 +139 +139 +143 +143 +148 +147 +147 +151 +151 +157 +157 +157 +161 +161 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +174 +174 +175 +178 +179 +183 +183 +184 +185 +185 +189 +188 +191 +190 +190 +194 +195 +195 +194 +194 +196 +197 +198 +198 +199 +200 +200 +200 +200 +201 +202 +203 +204 +204 +204 +204 +204 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +205 +205 +204 +204 +202 +202 +203 +201 +200 +200 +200 +200 +198 +199 +197 +196 +196 +195 +194 +191 +191 +191 +188 +189 +185 +185 +185 +183 +183 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +134 +133 +133 +129 +129 +125 +125 +125 +120 +120 +116 +116 +116 +110 +110 +106 +105 +106 +100 +100 +96 +96 +97 +90 +90 +86 +87 +82 +82 +82 +76 +76 +72 +73 +72 +68 +68 +64 +65 +64 +58 +59 +54 +54 +55 +51 +51 +47 +47 +45 +43 +42 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +13 +13 +14 +13 +13 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +13 +14 +13 +13 +13 +14 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +36 +41 +41 +40 +43 +43 +47 +47 +47 +51 +51 +55 +54 +54 +58 +58 +64 +65 +65 +68 +68 +72 +72 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +105 +106 +110 +110 +116 +116 +116 +120 +119 +125 +125 +130 +129 +129 +133 +133 +139 +139 +139 +143 +143 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +162 +165 +165 +169 +169 +172 +173 +173 +175 +175 +178 +179 +178 +183 +183 +183 +182 +183 +184 +185 +189 +189 +189 +190 +191 +194 +194 +196 +196 +196 +198 +198 +200 +200 +200 +201 +200 +202 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +202 +200 +200 +200 +201 +201 +198 +199 +196 +196 +197 +195 +194 +191 +190 +189 +188 +188 +184 +184 +182 +183 +182 +179 +179 +175 +175 +175 +172 +173 +169 +169 +169 +165 +164 +161 +161 +160 +156 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +134 +129 +130 +129 +125 +125 +120 +120 +119 +116 +115 +110 +110 +110 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +61 +59 +58 +54 +54 +50 +51 +50 +47 +47 +47 +47 +47 +43 +43 +43 +43 +43 +41 +41 +37 +37 +37 +33 +32 +31 +31 +29 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +12 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +14 +13 +14 +13 +14 +14 +14 +13 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +40 +43 +43 +43 +47 +46 +51 +51 +55 +54 +55 +58 +58 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +95 +100 +100 +106 +106 +106 +110 +110 +115 +116 +115 +119 +119 +119 +120 +120 +125 +126 +129 +129 +129 +133 +133 +139 +139 +141 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +182 +182 +183 +185 +185 +189 +188 +189 +190 +190 +194 +195 +194 +196 +197 +199 +198 +199 +200 +200 +200 +200 +201 +202 +203 +204 +205 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +203 +200 +201 +200 +201 +200 +198 +198 +196 +196 +196 +194 +195 +190 +191 +190 +188 +188 +184 +184 +184 +182 +183 +179 +179 +179 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +126 +120 +119 +119 +116 +116 +110 +110 +110 +105 +106 +106 +106 +106 +99 +100 +96 +96 +96 +90 +90 +86 +86 +87 +82 +82 +77 +76 +72 +72 +73 +68 +68 +65 +64 +64 +58 +58 +59 +58 +58 +54 +54 +51 +51 +51 +47 +47 +43 +43 +42 +41 +40 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +13 +14 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +14 +13 +14 +13 +14 +14 +13 +14 +14 +13 +14 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +18 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +32 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +51 +54 +55 +55 +59 +59 +64 +64 +64 +68 +68 +72 +72 +73 +77 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +100 +99 +100 +105 +106 +110 +110 +110 +115 +115 +119 +120 +120 +125 +126 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +168 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +182 +182 +184 +184 +188 +188 +189 +190 +190 +194 +194 +195 +196 +196 +198 +198 +200 +200 +200 +200 +200 +202 +202 +202 +204 +204 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +202 +201 +200 +201 +200 +200 +198 +198 +196 +196 +196 +194 +195 +190 +191 +190 +189 +189 +185 +184 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +139 +139 +133 +133 +129 +130 +129 +125 +126 +125 +125 +125 +119 +119 +115 +115 +116 +110 +110 +106 +106 +103 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +59 +55 +54 +54 +51 +51 +47 +47 +46 +43 +43 +41 +41 +40 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +24 +20 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +14 +13 +14 +13 +13 +14 +13 +14 +14 +13 +14 +13 +13 +13 +14 +14 +13 +14 +14 +13 +13 +14 +14 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +50 +51 +55 +54 +55 +59 +58 +65 +65 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +95 +100 +100 +106 +106 +107 +109 +110 +116 +115 +119 +119 +120 +125 +125 +129 +129 +129 +133 +133 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +153 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +178 +183 +183 +184 +184 +185 +189 +189 +190 +190 +194 +194 +195 +196 +196 +198 +199 +199 +200 +200 +200 +201 +201 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +200 +201 +200 +201 +201 +198 +198 +199 +197 +197 +195 +195 +191 +190 +191 +188 +188 +185 +184 +185 +182 +182 +178 +179 +179 +175 +175 +173 +173 +173 +169 +169 +164 +164 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +140 +140 +139 +139 +139 +133 +133 +129 +130 +129 +125 +125 +119 +120 +117 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +69 +68 +68 +65 +64 +58 +58 +58 +54 +54 +50 +50 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +32 +33 +31 +31 +27 +27 +27 +25 +24 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +13 +13 +13 +14 +14 +13 +14 +13 +14 +14 +13 +13 +14 +13 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +20 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +32 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +50 +55 +55 +55 +58 +59 +64 +64 +64 +68 +68 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +88 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +116 +116 +115 +116 +119 +119 +125 +125 +126 +130 +129 +133 +134 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +178 +179 +178 +183 +183 +185 +185 +185 +189 +188 +191 +190 +190 +194 +194 +197 +196 +197 +198 +199 +200 +200 +201 +201 +200 +203 +202 +205 +204 +204 +204 +204 +206 +206 +207 +206 +206 +207 +207 +207 +207 +206 +206 +206 +206 +206 +207 +204 +204 +205 +205 +204 +202 +202 +201 +200 +201 +201 +201 +198 +198 +198 +197 +197 +195 +194 +195 +191 +191 +189 +188 +189 +185 +185 +183 +183 +183 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +141 +133 +133 +129 +129 +125 +125 +125 +119 +120 +115 +116 +116 +110 +110 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +87 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +69 +64 +64 +59 +58 +59 +55 +55 +51 +51 +51 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +16 +15 +14 +13 +13 +13 +13 +14 +14 +13 +14 +14 +14 +14 +13 +14 +14 +13 +14 +13 +14 +13 +13 +13 +14 +14 +13 +14 +14 +14 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +32 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +51 +55 +55 +55 +59 +59 +64 +64 +65 +69 +68 +72 +72 +73 +76 +76 +83 +82 +87 +86 +86 +90 +90 +96 +96 +96 +100 +100 +100 +100 +100 +105 +106 +110 +110 +110 +116 +116 +119 +120 +122 +126 +126 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +171 +173 +173 +175 +175 +179 +179 +178 +183 +182 +185 +185 +184 +188 +189 +191 +191 +191 +194 +195 +196 +196 +196 +199 +199 +200 +201 +200 +201 +201 +202 +202 +204 +204 +205 +204 +204 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +205 +204 +205 +204 +204 +202 +202 +200 +200 +200 +200 +200 +198 +198 +198 +196 +196 +194 +194 +195 +190 +191 +189 +189 +189 +184 +185 +183 +183 +178 +178 +179 +175 +175 +173 +172 +173 +169 +169 +165 +165 +165 +160 +161 +157 +157 +157 +151 +151 +147 +147 +148 +143 +143 +139 +139 +133 +133 +134 +129 +129 +125 +125 +125 +120 +120 +119 +119 +119 +116 +116 +110 +110 +110 +106 +106 +100 +100 +97 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +65 +64 +58 +59 +59 +54 +54 +50 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +13 +13 +14 +14 +13 +13 +13 +13 +14 +13 +13 +14 +14 +13 +13 +14 +13 +13 +13 +13 +13 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +26 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +42 +43 +43 +47 +47 +50 +50 +51 +54 +55 +58 +59 +61 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +107 +110 +110 +116 +115 +119 +120 +119 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +160 +161 +160 +165 +165 +169 +169 +168 +173 +173 +175 +175 +175 +178 +179 +183 +182 +182 +184 +185 +189 +188 +188 +191 +190 +195 +195 +197 +196 +197 +199 +198 +200 +200 +201 +200 +201 +203 +202 +202 +204 +205 +204 +204 +204 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +205 +204 +202 +203 +202 +200 +200 +201 +200 +200 +198 +198 +196 +196 +196 +194 +194 +190 +191 +189 +188 +189 +184 +184 +183 +182 +183 +179 +179 +175 +175 +174 +173 +173 +169 +169 +169 +165 +165 +161 +161 +162 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +134 +133 +133 +129 +130 +125 +126 +126 +119 +119 +116 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +68 +68 +64 +64 +59 +58 +59 +54 +54 +50 +51 +51 +47 +47 +43 +42 +43 +41 +41 +37 +37 +36 +33 +33 +31 +31 +31 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +13 +13 +14 +13 +13 +14 +13 +14 +14 +14 +14 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +14 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +42 +43 +43 +47 +46 +50 +51 +52 +54 +54 +58 +58 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +98 +100 +100 +106 +106 +110 +110 +110 +116 +115 +119 +119 +119 +126 +125 +129 +129 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +168 +173 +173 +175 +175 +175 +175 +175 +179 +179 +179 +183 +183 +184 +184 +189 +189 +188 +190 +190 +195 +195 +195 +196 +197 +198 +198 +199 +200 +200 +201 +200 +200 +202 +202 +204 +204 +205 +204 +205 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +205 +204 +204 +204 +205 +202 +202 +200 +200 +201 +200 +200 +199 +198 +197 +197 +196 +194 +194 +191 +190 +191 +189 +189 +185 +185 +185 +182 +183 +179 +178 +178 +175 +175 +173 +173 +172 +169 +169 +165 +165 +162 +161 +161 +157 +157 +151 +151 +151 +147 +147 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +130 +128 +125 +126 +119 +120 +116 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +83 +82 +76 +76 +75 +72 +72 +68 +69 +65 +64 +64 +58 +59 +55 +55 +54 +51 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +14 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +42 +47 +47 +50 +51 +51 +54 +54 +58 +58 +58 +64 +64 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +85 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +116 +120 +119 +125 +125 +126 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +183 +182 +183 +184 +184 +188 +188 +188 +191 +190 +195 +195 +194 +196 +197 +198 +199 +198 +200 +200 +200 +200 +200 +202 +202 +204 +204 +205 +205 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +204 +204 +204 +204 +205 +202 +203 +200 +200 +200 +200 +200 +198 +198 +196 +196 +196 +194 +194 +191 +191 +191 +188 +189 +185 +185 +184 +183 +183 +179 +179 +177 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +141 +133 +133 +130 +129 +125 +125 +126 +120 +119 +115 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +65 +64 +59 +58 +54 +54 +54 +50 +51 +46 +47 +47 +43 +43 +41 +41 +37 +36 +37 +33 +34 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +14 +13 +14 +14 +14 +14 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +13 +13 +14 +13 +14 +14 +13 +13 +13 +14 +13 +13 +14 +13 +15 +15 +15 +17 +17 +17 +18 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +28 +31 +30 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +46 +47 +47 +47 +46 +51 +51 +55 +54 +55 +58 +58 +65 +64 +66 +69 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +119 +120 +119 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +178 +179 +183 +183 +182 +184 +185 +189 +188 +188 +190 +191 +194 +194 +195 +197 +196 +198 +198 +201 +200 +200 +200 +200 +202 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +205 +204 +205 +204 +204 +202 +202 +202 +200 +201 +200 +200 +200 +200 +200 +199 +198 +199 +196 +196 +194 +195 +192 +190 +191 +189 +188 +184 +184 +185 +183 +183 +178 +179 +178 +175 +175 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +144 +144 +139 +139 +139 +133 +133 +129 +129 +129 +126 +126 +119 +120 +120 +116 +116 +110 +110 +107 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +58 +55 +54 +54 +51 +51 +47 +46 +47 +43 +43 +41 +41 +41 +36 +37 +33 +33 +33 +31 +31 +27 +27 +28 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +14 +13 +14 +14 +13 +14 +13 +13 +14 +13 +14 +13 +13 +14 +14 +13 +14 +13 +14 +13 +14 +13 +13 +14 +14 +14 +13 +12 +15 +15 +17 +17 +18 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +34 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +48 +51 +51 +55 +54 +59 +58 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +110 +110 +116 +115 +119 +120 +119 +125 +125 +129 +130 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +151 +151 +151 +156 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +183 +185 +185 +188 +188 +191 +190 +190 +194 +194 +196 +197 +196 +198 +198 +200 +200 +200 +200 +200 +202 +203 +202 +204 +204 +204 +204 +205 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +207 +206 +205 +204 +204 +204 +204 +202 +202 +201 +200 +200 +200 +200 +198 +198 +197 +196 +197 +194 +195 +191 +190 +190 +189 +188 +188 +189 +188 +184 +185 +183 +183 +183 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +140 +133 +134 +129 +129 +126 +125 +125 +119 +119 +116 +116 +115 +110 +109 +106 +106 +106 +100 +100 +96 +95 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +58 +59 +55 +54 +54 +51 +50 +47 +47 +47 +43 +43 +40 +41 +41 +37 +37 +33 +33 +32 +30 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +14 +12 +13 +14 +13 +14 +14 +13 +13 +14 +14 +14 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +14 +13 +13 +14 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +41 +41 +40 +43 +43 +47 +47 +46 +51 +50 +55 +55 +55 +59 +59 +64 +64 +64 +68 +68 +72 +72 +73 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +105 +110 +110 +116 +116 +115 +119 +119 +125 +125 +125 +129 +129 +133 +133 +140 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +172 +173 +175 +175 +178 +178 +183 +183 +183 +184 +185 +189 +189 +188 +191 +190 +194 +194 +194 +196 +196 +199 +198 +199 +200 +201 +200 +200 +201 +202 +202 +204 +205 +204 +204 +204 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +204 +204 +204 +204 +205 +202 +202 +200 +200 +200 +200 +200 +199 +198 +196 +196 +196 +195 +195 +194 +194 +195 +190 +191 +188 +189 +189 +185 +185 +182 +182 +179 +178 +179 +174 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +148 +143 +143 +139 +139 +133 +133 +133 +129 +129 +126 +125 +125 +119 +120 +116 +115 +116 +109 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +83 +82 +82 +77 +76 +73 +72 +72 +68 +68 +64 +64 +64 +58 +58 +54 +54 +54 +50 +50 +47 +47 +47 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +12 +12 +13 +14 +13 +13 +14 +14 +14 +13 +14 +14 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +14 +14 +14 +13 +13 +14 +15 +15 +15 +17 +17 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +28 +31 +31 +33 +33 +37 +37 +37 +41 +40 +43 +43 +43 +47 +47 +50 +51 +51 +55 +54 +59 +59 +58 +64 +64 +68 +69 +72 +72 +72 +76 +76 +83 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +116 +119 +119 +125 +125 +125 +129 +130 +133 +133 +133 +140 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +168 +173 +173 +173 +175 +175 +179 +179 +178 +183 +183 +184 +185 +185 +188 +188 +191 +190 +190 +194 +195 +197 +196 +196 +198 +199 +200 +200 +200 +200 +201 +202 +202 +204 +204 +205 +204 +204 +204 +204 +205 +207 +206 +206 +206 +207 +207 +206 +206 +206 +207 +206 +207 +206 +206 +204 +204 +204 +204 +204 +202 +202 +202 +201 +200 +200 +200 +200 +200 +200 +198 +198 +199 +196 +197 +194 +194 +191 +190 +191 +188 +189 +184 +185 +185 +182 +182 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +166 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +134 +133 +133 +129 +129 +125 +126 +125 +119 +119 +116 +116 +116 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +58 +58 +54 +55 +51 +50 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +28 +27 +25 +25 +25 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +14 +14 +13 +13 +14 +13 +14 +13 +14 +13 +13 +13 +13 +14 +14 +14 +13 +14 +13 +14 +13 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +24 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +42 +43 +43 +47 +46 +51 +51 +54 +55 +55 +58 +58 +64 +65 +64 +68 +68 +72 +72 +72 +77 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +115 +116 +119 +120 +126 +126 +126 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +158 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +179 +183 +183 +185 +185 +184 +189 +188 +190 +190 +195 +194 +194 +196 +197 +199 +198 +198 +200 +200 +201 +201 +200 +201 +201 +202 +202 +202 +204 +205 +204 +205 +206 +206 +207 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +205 +205 +204 +202 +202 +200 +200 +200 +201 +201 +199 +199 +196 +196 +197 +195 +194 +191 +190 +190 +188 +189 +185 +185 +185 +183 +183 +178 +179 +179 +175 +175 +173 +173 +173 +173 +173 +168 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +125 +125 +125 +120 +119 +115 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +73 +72 +72 +68 +68 +64 +64 +64 +58 +58 +55 +55 +54 +51 +50 +46 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +13 +13 +13 +14 +14 +13 +13 +14 +14 +14 +14 +13 +14 +13 +14 +13 +14 +14 +13 +14 +14 +13 +14 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +37 +37 +37 +40 +41 +43 +43 +43 +47 +47 +51 +51 +51 +55 +54 +58 +58 +58 +64 +65 +68 +68 +68 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +109 +110 +115 +115 +119 +120 +120 +125 +125 +129 +129 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +168 +168 +169 +173 +173 +175 +175 +178 +178 +179 +182 +182 +185 +184 +185 +188 +188 +189 +188 +188 +191 +190 +194 +194 +194 +197 +197 +198 +199 +199 +201 +200 +201 +200 +202 +202 +203 +204 +204 +205 +204 +204 +206 +206 +206 +207 +206 +206 +206 +206 +207 +207 +206 +206 +207 +206 +206 +207 +206 +205 +204 +204 +204 +204 +203 +202 +200 +200 +200 +200 +200 +199 +198 +198 +196 +196 +195 +194 +195 +190 +190 +189 +189 +185 +185 +184 +183 +182 +179 +178 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +144 +143 +143 +140 +139 +134 +134 +133 +129 +129 +126 +125 +126 +119 +119 +115 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +91 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +65 +65 +65 +58 +58 +54 +55 +55 +50 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +20 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +13 +14 +13 +14 +14 +14 +13 +13 +14 +14 +14 +14 +13 +13 +14 +14 +14 +13 +13 +14 +14 +14 +13 +13 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +50 +51 +54 +54 +59 +59 +65 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +101 +106 +106 +109 +110 +116 +116 +116 +119 +119 +125 +125 +126 +130 +129 +133 +133 +133 +139 +139 +144 +143 +143 +147 +147 +151 +151 +152 +157 +157 +161 +161 +166 +165 +165 +169 +169 +172 +173 +173 +175 +175 +175 +174 +175 +178 +179 +182 +183 +183 +184 +184 +189 +189 +189 +191 +191 +195 +194 +196 +196 +196 +198 +198 +200 +200 +200 +200 +200 +200 +200 +200 +203 +202 +204 +204 +205 +205 +204 +206 +207 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +203 +201 +200 +201 +201 +198 +199 +198 +196 +196 +194 +194 +195 +190 +190 +188 +188 +189 +184 +184 +183 +182 +182 +179 +179 +175 +175 +174 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +130 +129 +129 +125 +125 +119 +119 +116 +115 +115 +110 +110 +105 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +72 +73 +68 +68 +65 +64 +64 +58 +58 +54 +55 +54 +51 +51 +51 +51 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +35 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +19 +19 +19 +18 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +14 +14 +13 +13 +14 +13 +13 +13 +14 +13 +14 +13 +13 +14 +13 +13 +14 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +36 +41 +41 +43 +43 +43 +47 +47 +51 +50 +51 +54 +55 +58 +58 +58 +64 +64 +68 +68 +68 +72 +73 +76 +76 +77 +82 +82 +86 +86 +91 +90 +90 +96 +96 +100 +100 +99 +106 +106 +110 +110 +110 +115 +115 +120 +119 +120 +125 +125 +129 +129 +130 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +176 +179 +179 +182 +183 +184 +184 +184 +189 +188 +191 +190 +190 +194 +194 +194 +195 +194 +196 +196 +198 +198 +198 +200 +200 +200 +200 +201 +202 +202 +204 +204 +204 +204 +204 +207 +206 +206 +206 +206 +205 +206 +206 +206 +206 +206 +206 +206 +206 +207 +204 +205 +204 +204 +202 +202 +203 +201 +200 +200 +200 +200 +198 +198 +197 +196 +196 +195 +195 +190 +190 +190 +188 +189 +185 +184 +184 +182 +183 +178 +179 +175 +175 +175 +173 +172 +173 +173 +172 +169 +169 +165 +165 +165 +161 +161 +157 +156 +157 +151 +150 +147 +147 +147 +143 +143 +139 +139 +134 +133 +133 +129 +129 +125 +125 +126 +119 +119 +116 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +97 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +68 +68 +69 +68 +68 +64 +64 +58 +59 +58 +55 +55 +50 +50 +51 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +30 +31 +31 +31 +31 +27 +27 +24 +25 +25 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +13 +14 +14 +13 +13 +14 +13 +14 +13 +14 +13 +14 +14 +13 +13 +13 +14 +14 +13 +14 +14 +13 +13 +14 +12 +15 +15 +17 +17 +17 +19 +19 +25 +25 +25 +27 +27 +31 +30 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +46 +46 +51 +51 +55 +54 +54 +59 +58 +64 +64 +64 +68 +68 +72 +72 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +116 +120 +119 +125 +125 +129 +129 +129 +133 +133 +140 +140 +139 +143 +143 +143 +143 +143 +147 +147 +151 +151 +151 +157 +158 +161 +161 +162 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +178 +182 +183 +183 +182 +183 +185 +185 +188 +189 +189 +191 +191 +194 +195 +197 +197 +197 +198 +199 +200 +200 +200 +200 +200 +202 +202 +202 +204 +204 +204 +204 +205 +206 +206 +206 +206 +207 +207 +207 +206 +206 +206 +206 +206 +206 +206 +205 +204 +204 +204 +204 +202 +203 +202 +200 +200 +201 +200 +200 +198 +198 +196 +197 +197 +195 +194 +191 +191 +189 +188 +188 +185 +184 +182 +183 +182 +178 +179 +175 +175 +175 +173 +173 +169 +169 +168 +165 +165 +161 +161 +161 +157 +157 +151 +151 +148 +147 +147 +143 +143 +139 +140 +139 +133 +133 +133 +133 +133 +129 +130 +126 +125 +125 +120 +119 +116 +116 +116 +110 +110 +106 +105 +100 +101 +100 +96 +96 +90 +90 +90 +86 +86 +86 +86 +86 +82 +82 +76 +76 +76 +73 +72 +68 +68 +67 +64 +64 +59 +59 +54 +55 +54 +50 +50 +47 +47 +47 +43 +43 +42 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +29 +27 +27 +25 +25 +21 +20 +21 +19 +19 +17 +17 +17 +15 +16 +15 +15 +15 +13 +13 +12 +13 +14 +13 +14 +13 +13 +13 +14 +13 +13 +14 +13 +14 +13 +13 +13 +14 +14 +14 +14 +14 +14 +13 +14 +13 +13 +14 +13 +13 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +25 +27 +27 +30 +31 +31 +33 +33 +37 +37 +37 +41 +41 +42 +43 +43 +47 +47 +50 +51 +55 +54 +54 +58 +58 +64 +64 +64 +69 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +91 +96 +96 +100 +100 +106 +106 +105 +110 +110 +116 +115 +115 +120 +119 +120 +120 +119 +126 +126 +129 +129 +129 +133 +133 +139 +139 +141 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +165 +165 +165 +169 +169 +173 +172 +173 +175 +175 +179 +179 +180 +183 +183 +185 +185 +188 +188 +189 +191 +190 +194 +195 +194 +196 +196 +199 +198 +198 +200 +200 +200 +201 +201 +203 +203 +204 +204 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +204 +205 +204 +204 +204 +202 +203 +200 +201 +201 +200 +201 +199 +199 +196 +196 +196 +194 +195 +191 +191 +190 +189 +189 +185 +185 +184 +182 +183 +178 +179 +179 +175 +175 +173 +172 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +140 +140 +133 +133 +134 +129 +129 +126 +125 +119 +119 +119 +115 +116 +110 +110 +110 +106 +106 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +84 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +65 +64 +58 +59 +58 +59 +59 +55 +54 +50 +51 +51 +47 +46 +43 +43 +41 +41 +40 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +20 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +13 +14 +14 +14 +14 +14 +13 +13 +14 +14 +14 +13 +14 +13 +14 +13 +13 +14 +13 +13 +13 +14 +14 +14 +14 +14 +13 +14 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +26 +28 +31 +31 +33 +33 +36 +37 +37 +41 +41 +43 +43 +42 +47 +47 +51 +51 +51 +55 +54 +59 +58 +58 +65 +64 +68 +68 +68 +72 +72 +76 +76 +83 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +115 +119 +119 +120 +125 +125 +130 +130 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +166 +169 +169 +173 +173 +174 +175 +175 +179 +179 +182 +183 +183 +184 +185 +189 +189 +189 +190 +191 +194 +194 +195 +197 +197 +198 +198 +200 +200 +201 +201 +200 +202 +203 +202 +204 +204 +205 +204 +204 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +207 +204 +204 +204 +204 +204 +203 +202 +203 +201 +201 +201 +201 +200 +198 +198 +196 +197 +196 +195 +194 +191 +191 +191 +188 +189 +184 +185 +183 +182 +182 +179 +179 +175 +175 +174 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +140 +139 +139 +134 +134 +129 +130 +129 +125 +125 +119 +120 +119 +116 +116 +110 +110 +110 +106 +105 +100 +100 +98 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +72 +72 +73 +68 +68 +64 +64 +65 +59 +59 +54 +54 +51 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +13 +13 +14 +14 +13 +14 +13 +14 +13 +13 +13 +13 +14 +14 +14 +13 +13 +14 +13 +13 +14 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +32 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +51 +55 +55 +58 +58 +59 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +86 +86 +86 +90 +90 +96 +96 +96 +101 +100 +106 +106 +107 +110 +110 +115 +115 +120 +120 +119 +125 +125 +129 +129 +129 +133 +133 +139 +140 +139 +144 +143 +147 +147 +147 +151 +151 +157 +157 +161 +161 +161 +165 +165 +168 +169 +169 +172 +173 +175 +175 +175 +179 +179 +183 +182 +182 +184 +185 +188 +188 +189 +190 +191 +195 +194 +196 +196 +196 +198 +198 +200 +201 +200 +200 +200 +201 +200 +200 +202 +202 +205 +204 +204 +205 +204 +207 +206 +207 +206 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +203 +204 +204 +204 +204 +202 +202 +200 +200 +200 +200 +200 +198 +198 +198 +197 +196 +195 +194 +191 +190 +190 +188 +189 +184 +184 +184 +182 +183 +178 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +166 +161 +161 +157 +157 +151 +151 +151 +148 +147 +143 +143 +143 +139 +139 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +119 +117 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +69 +68 +68 +64 +64 +58 +58 +58 +54 +54 +51 +51 +50 +46 +47 +42 +43 +43 +41 +41 +37 +37 +37 +33 +32 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +13 +14 +13 +14 +14 +14 +13 +13 +14 +14 +13 +14 +14 +14 +13 +13 +14 +13 +16 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +46 +51 +51 +54 +54 +54 +58 +58 +65 +64 +64 +68 +69 +72 +72 +72 +77 +76 +82 +82 +82 +86 +86 +90 +90 +92 +95 +97 +100 +100 +106 +106 +106 +110 +109 +116 +116 +116 +119 +119 +119 +119 +120 +126 +125 +129 +129 +129 +133 +134 +140 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +174 +175 +179 +179 +183 +182 +184 +184 +185 +188 +188 +190 +191 +190 +194 +194 +196 +196 +196 +198 +198 +200 +200 +201 +201 +200 +202 +203 +202 +204 +205 +204 +204 +206 +207 +206 +206 +206 +207 +206 +206 +207 +206 +207 +206 +206 +206 +206 +204 +204 +204 +205 +205 +202 +202 +203 +200 +200 +200 +200 +199 +198 +198 +196 +197 +195 +195 +194 +190 +191 +189 +188 +189 +184 +185 +183 +182 +182 +179 +179 +175 +175 +175 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +150 +151 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +130 +129 +129 +125 +125 +119 +120 +119 +115 +115 +110 +109 +110 +106 +105 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +79 +76 +76 +72 +72 +68 +69 +69 +64 +64 +58 +58 +59 +55 +55 +51 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +14 +13 +13 +13 +14 +14 +14 +13 +13 +14 +13 +13 +13 +13 +14 +13 +14 +13 +14 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +16 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +36 +37 +38 +41 +41 +42 +43 +46 +47 +47 +50 +51 +55 +55 +54 +58 +58 +59 +59 +58 +65 +64 +68 +68 +68 +72 +72 +76 +76 +77 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +105 +105 +106 +106 +106 +109 +110 +116 +116 +115 +119 +120 +126 +125 +129 +129 +129 +134 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +172 +174 +175 +175 +179 +178 +182 +182 +182 +184 +184 +188 +189 +189 +190 +190 +194 +194 +195 +197 +196 +199 +199 +198 +200 +200 +201 +200 +203 +202 +203 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +207 +206 +206 +207 +204 +204 +204 +204 +203 +203 +202 +200 +201 +200 +200 +200 +199 +198 +197 +197 +197 +194 +195 +191 +190 +190 +188 +188 +184 +185 +184 +183 +183 +178 +178 +174 +175 +175 +173 +173 +169 +169 +169 +165 +165 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +140 +133 +133 +133 +129 +129 +125 +125 +126 +120 +119 +119 +120 +120 +116 +115 +109 +110 +110 +106 +106 +100 +100 +98 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +59 +58 +59 +55 +54 +51 +50 +47 +47 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +18 +17 +16 +16 +15 +16 +15 +15 +13 +13 +13 +12 +13 +14 +13 +13 +14 +14 +13 +14 +13 +13 +14 +13 +13 +14 +14 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +26 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +42 +43 +43 +46 +47 +51 +51 +51 +54 +55 +59 +58 +59 +64 +64 +68 +68 +73 +72 +72 +76 +76 +82 +82 +82 +86 +86 +85 +86 +86 +90 +90 +95 +96 +96 +100 +100 +106 +106 +107 +109 +110 +116 +115 +119 +119 +119 +125 +126 +129 +129 +130 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +174 +179 +179 +183 +182 +183 +185 +185 +189 +189 +189 +191 +190 +194 +194 +197 +197 +197 +198 +199 +200 +201 +201 +200 +201 +202 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +205 +205 +204 +205 +205 +202 +202 +202 +201 +200 +200 +200 +201 +199 +198 +197 +196 +197 +194 +194 +190 +190 +188 +188 +188 +185 +185 +182 +182 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +159 +157 +157 +151 +151 +147 +147 +147 +144 +143 +140 +139 +139 +133 +133 +133 +133 +133 +129 +129 +125 +125 +126 +119 +120 +115 +115 +113 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +77 +76 +72 +72 +73 +68 +69 +64 +64 +59 +59 +58 +55 +54 +51 +51 +50 +47 +47 +43 +43 +43 +41 +41 +37 +36 +37 +32 +33 +31 +31 +31 +27 +27 +25 +25 +22 +21 +21 +19 +19 +16 +17 +17 +16 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +13 +13 +14 +14 +13 +14 +13 +14 +14 +13 +13 +13 +13 +14 +14 +13 +14 +13 +13 +13 +13 +14 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +24 +25 +25 +27 +27 +31 +31 +31 +33 +33 +33 +33 +33 +37 +37 +40 +41 +41 +42 +42 +47 +46 +47 +50 +51 +55 +55 +58 +58 +58 +65 +64 +68 +68 +68 +72 +72 +73 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +92 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +115 +119 +119 +125 +126 +125 +129 +130 +133 +134 +134 +139 +139 +143 +143 +147 +148 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +184 +185 +188 +189 +188 +191 +190 +194 +194 +194 +196 +196 +197 +196 +196 +198 +199 +200 +200 +200 +200 +201 +202 +203 +203 +204 +204 +204 +204 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +204 +204 +204 +205 +205 +203 +203 +201 +201 +200 +200 +200 +198 +198 +196 +196 +196 +194 +194 +195 +195 +194 +190 +191 +189 +188 +189 +185 +184 +183 +183 +180 +179 +179 +175 +175 +173 +173 +172 +169 +169 +169 +169 +169 +165 +165 +165 +165 +165 +161 +161 +157 +158 +157 +151 +151 +147 +148 +144 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +126 +119 +119 +116 +116 +115 +110 +109 +106 +105 +106 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +65 +58 +59 +55 +55 +55 +51 +51 +47 +47 +44 +43 +42 +40 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +14 +13 +14 +14 +14 +14 +14 +13 +14 +13 +14 +13 +13 +14 +14 +14 +13 +14 +14 +13 +13 +14 +13 +13 +14 +12 +15 +15 +15 +15 +15 +18 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +42 +43 +43 +47 +47 +51 +51 +51 +54 +54 +59 +58 +59 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +115 +115 +115 +119 +119 +125 +125 +125 +130 +130 +133 +134 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +166 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +179 +182 +183 +185 +184 +184 +189 +188 +190 +190 +191 +195 +195 +196 +197 +199 +198 +198 +200 +200 +201 +201 +200 +202 +203 +204 +204 +204 +204 +204 +206 +206 +206 +206 +207 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +205 +202 +202 +202 +202 +202 +201 +201 +200 +201 +200 +199 +198 +196 +196 +195 +194 +195 +190 +190 +188 +189 +189 +185 +185 +185 +185 +185 +183 +183 +183 +182 +183 +179 +178 +175 +175 +175 +173 +173 +169 +169 +166 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +130 +130 +126 +125 +119 +120 +115 +116 +116 +110 +109 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +81 +76 +76 +72 +72 +69 +68 +69 +64 +64 +58 +58 +58 +54 +54 +51 +50 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +28 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +14 +13 +12 +13 +14 +14 +14 +13 +13 +14 +13 +13 +13 +14 +14 +14 +14 +13 +14 +13 +14 +14 +13 +13 +13 +13 +14 +14 +14 +14 +14 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +24 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +38 +40 +41 +43 +43 +47 +47 +47 +50 +51 +55 +55 +55 +59 +59 +64 +65 +64 +69 +68 +72 +72 +72 +76 +77 +82 +83 +86 +86 +86 +90 +90 +96 +96 +96 +100 +99 +106 +106 +106 +110 +110 +116 +115 +115 +119 +120 +126 +126 +125 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +168 +169 +173 +173 +173 +175 +175 +178 +179 +183 +183 +182 +184 +185 +188 +189 +189 +191 +191 +195 +195 +194 +196 +196 +198 +198 +198 +200 +201 +200 +200 +201 +202 +203 +205 +204 +204 +204 +204 +206 +206 +206 +207 +206 +207 +207 +206 +206 +206 +206 +207 +207 +206 +207 +206 +206 +204 +204 +204 +204 +204 +203 +202 +200 +200 +201 +200 +201 +199 +198 +198 +196 +196 +196 +196 +196 +195 +194 +191 +191 +191 +189 +189 +184 +185 +184 +183 +183 +179 +179 +175 +175 +175 +172 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +140 +139 +139 +133 +133 +129 +129 +130 +126 +125 +120 +119 +120 +115 +116 +110 +110 +110 +106 +106 +100 +100 +100 +95 +96 +90 +90 +87 +86 +86 +83 +82 +76 +77 +76 +72 +72 +68 +69 +68 +64 +64 +58 +59 +58 +55 +54 +50 +51 +51 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +12 +13 +13 +12 +13 +14 +14 +14 +13 +14 +14 +14 +13 +13 +14 +13 +13 +13 +13 +13 +14 +13 +14 +13 +14 +13 +14 +14 +14 +13 +13 +13 +13 +13 +12 +15 +15 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +50 +51 +54 +54 +55 +59 +58 +64 +65 +68 +69 +69 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +105 +105 +106 +110 +110 +116 +116 +119 +120 +119 +126 +125 +129 +129 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +169 +169 +169 +173 +173 +174 +175 +175 +179 +179 +179 +179 +178 +182 +183 +184 +184 +185 +189 +189 +191 +190 +191 +195 +195 +197 +196 +198 +198 +199 +200 +200 +200 +201 +200 +203 +202 +202 +202 +203 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +207 +206 +206 +205 +204 +204 +204 +204 +205 +204 +205 +202 +202 +200 +200 +200 +201 +201 +198 +198 +197 +196 +197 +195 +195 +190 +191 +191 +189 +188 +185 +185 +184 +183 +183 +179 +179 +178 +174 +175 +173 +173 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +140 +140 +133 +133 +133 +130 +129 +125 +125 +125 +119 +119 +116 +116 +109 +110 +109 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +59 +58 +58 +55 +54 +51 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +32 +27 +27 +25 +25 +22 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +14 +13 +12 +13 +13 +14 +13 +14 +14 +14 +13 +13 +13 +13 +14 +13 +14 +13 +14 +14 +14 +14 +14 +14 +14 +13 +13 +13 +13 +13 +14 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +46 +47 +51 +51 +51 +55 +55 +58 +58 +59 +65 +64 +69 +69 +69 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +109 +115 +116 +120 +120 +119 +125 +125 +129 +129 +129 +133 +133 +139 +140 +139 +143 +143 +147 +147 +152 +151 +151 +157 +157 +161 +161 +161 +165 +165 +168 +169 +169 +173 +173 +176 +175 +174 +179 +179 +183 +183 +183 +185 +185 +188 +188 +190 +191 +190 +195 +194 +196 +197 +197 +198 +198 +198 +198 +198 +200 +200 +200 +201 +200 +202 +203 +204 +205 +204 +204 +205 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +207 +207 +206 +206 +206 +206 +204 +205 +205 +205 +205 +202 +202 +203 +201 +201 +200 +200 +198 +199 +198 +196 +196 +194 +194 +194 +190 +190 +189 +188 +189 +185 +185 +183 +183 +183 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +130 +129 +126 +125 +125 +120 +119 +116 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +89 +86 +86 +87 +82 +82 +76 +76 +73 +72 +72 +68 +68 +64 +65 +64 +58 +59 +54 +55 +55 +51 +51 +47 +47 +47 +43 +43 +41 +41 +41 +36 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +13 +14 +14 +14 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +14 +14 +14 +13 +14 +14 +13 +13 +14 +14 +13 +13 +13 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +35 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +50 +50 +54 +55 +59 +59 +59 +64 +64 +68 +68 +69 +72 +72 +76 +76 +83 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +105 +110 +110 +110 +116 +116 +119 +119 +120 +126 +125 +130 +129 +134 +134 +134 +139 +139 +143 +144 +143 +147 +147 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +166 +169 +169 +173 +173 +174 +175 +175 +179 +179 +182 +182 +183 +184 +184 +184 +184 +185 +188 +189 +191 +190 +191 +194 +194 +196 +196 +197 +198 +198 +200 +201 +200 +200 +200 +203 +202 +204 +204 +204 +205 +205 +204 +205 +204 +206 +206 +206 +207 +207 +207 +206 +206 +206 +207 +206 +207 +207 +207 +205 +204 +204 +204 +204 +202 +202 +202 +200 +200 +201 +200 +200 +198 +199 +196 +196 +197 +194 +194 +191 +191 +188 +188 +189 +185 +184 +182 +183 +182 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +162 +157 +157 +151 +151 +148 +147 +147 +143 +143 +139 +139 +140 +133 +133 +130 +130 +130 +125 +125 +119 +119 +120 +116 +116 +110 +110 +110 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +72 +72 +69 +69 +68 +64 +64 +59 +58 +59 +54 +55 +51 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +37 +37 +36 +33 +33 +31 +31 +31 +27 +27 +25 +25 +23 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +14 +14 +14 +13 +13 +14 +14 +13 +14 +13 +13 +14 +14 +13 +14 +13 +14 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +40 +41 +41 +43 +43 +47 +47 +47 +50 +51 +55 +55 +58 +58 +58 +64 +64 +68 +68 +68 +72 +73 +73 +72 +73 +77 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +115 +120 +120 +126 +125 +125 +129 +129 +133 +134 +134 +140 +139 +143 +143 +144 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +169 +169 +168 +173 +173 +175 +175 +175 +178 +179 +183 +183 +183 +185 +185 +188 +188 +190 +190 +190 +195 +194 +196 +196 +196 +198 +198 +198 +199 +198 +201 +201 +200 +200 +201 +202 +203 +204 +204 +204 +204 +205 +207 +207 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +205 +204 +204 +205 +202 +202 +200 +200 +200 +200 +200 +199 +198 +196 +197 +197 +194 +195 +190 +190 +191 +189 +189 +185 +185 +185 +183 +183 +179 +179 +179 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +134 +129 +129 +125 +125 +120 +120 +119 +116 +116 +110 +110 +110 +105 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +69 +69 +68 +64 +64 +58 +58 +59 +55 +55 +55 +54 +54 +51 +51 +47 +47 +46 +43 +43 +41 +41 +40 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +21 +21 +21 +18 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +13 +14 +14 +14 +13 +14 +14 +14 +13 +14 +13 +13 +14 +13 +13 +13 +13 +13 +14 +14 +13 +14 +13 +14 +14 +14 +14 +13 +15 +15 +15 +17 +17 +19 +20 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +40 +41 +41 +43 +43 +47 +47 +47 +51 +50 +55 +55 +55 +59 +58 +64 +65 +64 +68 +68 +72 +73 +72 +76 +76 +82 +82 +87 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +109 +115 +116 +116 +120 +119 +125 +125 +126 +129 +129 +133 +133 +139 +140 +140 +143 +144 +147 +147 +147 +151 +151 +157 +157 +157 +160 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +182 +183 +183 +185 +185 +189 +189 +188 +190 +190 +191 +191 +191 +194 +194 +196 +196 +197 +199 +199 +201 +200 +200 +200 +201 +203 +202 +204 +204 +204 +204 +204 +207 +206 +206 +206 +206 +207 +207 +207 +206 +207 +207 +207 +207 +206 +207 +204 +204 +204 +204 +204 +202 +202 +200 +200 +200 +201 +200 +198 +198 +198 +196 +196 +195 +195 +194 +191 +190 +188 +188 +188 +185 +185 +183 +183 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +164 +160 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +134 +133 +134 +129 +129 +126 +125 +126 +120 +120 +116 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +87 +82 +82 +82 +76 +76 +72 +72 +73 +68 +68 +64 +65 +64 +58 +58 +55 +55 +55 +50 +50 +47 +47 +45 +43 +43 +41 +40 +36 +37 +37 +33 +33 +31 +31 +31 +27 +27 +27 +27 +27 +25 +25 +21 +21 +22 +19 +19 +17 +17 +17 +15 +15 +15 +16 +13 +13 +13 +12 +13 +14 +14 +13 +13 +14 +13 +13 +14 +13 +14 +13 +13 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +42 +43 +47 +47 +47 +50 +50 +54 +55 +54 +59 +59 +64 +64 +64 +68 +68 +72 +72 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +115 +116 +120 +120 +125 +125 +129 +129 +130 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +160 +165 +165 +166 +169 +169 +173 +173 +174 +175 +174 +179 +178 +183 +183 +183 +185 +184 +185 +185 +185 +188 +189 +190 +191 +191 +195 +194 +196 +197 +198 +199 +199 +200 +201 +200 +200 +200 +202 +202 +205 +204 +204 +204 +204 +207 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +207 +206 +206 +206 +204 +204 +204 +204 +204 +203 +202 +201 +200 +200 +200 +200 +199 +199 +198 +197 +196 +195 +195 +194 +191 +191 +189 +189 +185 +185 +185 +182 +183 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +144 +143 +143 +140 +139 +133 +133 +133 +129 +129 +125 +125 +125 +119 +119 +115 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +91 +90 +90 +86 +86 +82 +82 +82 +77 +76 +77 +76 +76 +73 +72 +68 +69 +68 +65 +64 +58 +59 +59 +54 +54 +51 +50 +46 +47 +46 +43 +43 +41 +41 +41 +37 +37 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +22 +21 +20 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +14 +14 +13 +13 +13 +14 +14 +14 +14 +13 +14 +14 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +32 +31 +31 +33 +33 +37 +36 +37 +41 +41 +42 +43 +43 +47 +47 +51 +51 +51 +54 +54 +59 +58 +65 +64 +64 +68 +68 +72 +72 +72 +76 +76 +76 +76 +77 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +115 +119 +120 +120 +125 +126 +125 +126 +126 +129 +130 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +157 +157 +157 +161 +161 +164 +165 +165 +169 +169 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +182 +183 +185 +185 +185 +189 +188 +191 +191 +190 +195 +194 +196 +196 +196 +199 +198 +201 +200 +200 +200 +201 +202 +203 +203 +205 +205 +204 +204 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +204 +204 +204 +204 +204 +202 +202 +202 +201 +201 +201 +200 +198 +199 +198 +196 +196 +195 +194 +194 +191 +190 +189 +188 +188 +184 +185 +183 +183 +182 +179 +179 +175 +175 +175 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +158 +157 +151 +151 +147 +147 +147 +143 +143 +139 +140 +139 +134 +134 +129 +129 +130 +125 +125 +119 +120 +116 +116 +115 +109 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +72 +72 +68 +68 +64 +64 +65 +59 +59 +55 +55 +54 +51 +51 +51 +51 +51 +47 +47 +43 +43 +43 +40 +40 +37 +36 +34 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +12 +12 +13 +14 +14 +14 +14 +13 +13 +14 +14 +14 +14 +14 +14 +14 +13 +13 +13 +14 +14 +14 +13 +14 +14 +13 +14 +14 +13 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +34 +37 +36 +41 +41 +43 +43 +43 +47 +47 +51 +51 +50 +54 +54 +54 +54 +54 +58 +58 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +86 +86 +85 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +116 +119 +120 +126 +125 +126 +129 +129 +133 +133 +140 +139 +139 +143 +143 +147 +147 +147 +151 +151 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +170 +173 +173 +174 +175 +178 +179 +178 +182 +183 +184 +185 +184 +189 +188 +190 +191 +190 +194 +195 +197 +196 +196 +198 +198 +200 +200 +200 +200 +200 +202 +202 +204 +204 +205 +204 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +207 +205 +206 +207 +206 +206 +203 +204 +204 +205 +204 +202 +202 +200 +200 +200 +201 +200 +198 +198 +198 +197 +196 +194 +194 +194 +191 +191 +189 +188 +188 +184 +184 +183 +182 +179 +179 +178 +175 +175 +173 +172 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +133 +133 +133 +129 +130 +125 +125 +125 +120 +119 +120 +120 +119 +116 +116 +109 +109 +109 +106 +106 +100 +100 +98 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +72 +72 +73 +68 +69 +64 +64 +65 +59 +59 +55 +55 +55 +50 +50 +47 +47 +43 +43 +42 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +14 +14 +13 +14 +14 +13 +14 +14 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +50 +51 +54 +54 +59 +59 +59 +64 +65 +68 +69 +72 +73 +72 +76 +76 +82 +82 +82 +86 +86 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +107 +109 +110 +115 +115 +119 +119 +119 +125 +125 +129 +129 +129 +133 +133 +133 +134 +133 +139 +139 +143 +143 +144 +147 +148 +151 +151 +154 +157 +156 +161 +161 +164 +165 +165 +169 +169 +173 +173 +172 +175 +175 +178 +179 +178 +183 +183 +184 +185 +185 +189 +189 +191 +191 +193 +194 +195 +196 +196 +198 +198 +198 +201 +200 +201 +200 +201 +202 +203 +205 +204 +204 +204 +204 +206 +206 +207 +206 +207 +206 +207 +206 +206 +207 +206 +206 +206 +207 +206 +204 +204 +204 +204 +204 +202 +202 +201 +200 +200 +201 +201 +198 +198 +199 +196 +196 +194 +195 +191 +190 +190 +188 +188 +188 +189 +188 +185 +184 +185 +184 +185 +181 +182 +179 +179 +179 +175 +175 +173 +173 +174 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +127 +126 +125 +119 +120 +115 +116 +115 +110 +109 +106 +106 +105 +100 +100 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +68 +68 +65 +65 +58 +58 +58 +54 +55 +51 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +34 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +14 +14 +13 +13 +14 +14 +13 +14 +14 +14 +14 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +30 +31 +33 +33 +37 +37 +38 +41 +41 +43 +42 +47 +47 +46 +51 +50 +55 +54 +55 +58 +59 +64 +64 +64 +68 +68 +72 +73 +72 +76 +76 +82 +82 +84 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +110 +110 +110 +116 +115 +119 +120 +120 +125 +125 +129 +129 +133 +134 +134 +139 +139 +143 +143 +143 +147 +148 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +168 +169 +173 +172 +175 +175 +178 +179 +178 +182 +182 +184 +184 +185 +189 +189 +190 +191 +190 +195 +194 +197 +197 +196 +198 +199 +201 +200 +200 +201 +200 +202 +203 +204 +204 +204 +205 +205 +206 +207 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +207 +206 +204 +204 +205 +205 +205 +202 +202 +201 +200 +200 +201 +200 +198 +198 +198 +196 +196 +195 +195 +195 +191 +190 +189 +189 +189 +185 +185 +183 +182 +183 +179 +179 +175 +175 +172 +173 +173 +169 +169 +165 +165 +165 +161 +161 +161 +160 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +140 +133 +133 +129 +129 +129 +125 +125 +126 +125 +126 +119 +120 +119 +119 +120 +115 +115 +110 +110 +110 +106 +105 +100 +100 +98 +96 +96 +90 +91 +86 +86 +86 +82 +82 +76 +76 +77 +73 +72 +68 +68 +68 +64 +64 +58 +58 +59 +54 +55 +50 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +14 +14 +14 +14 +13 +13 +13 +14 +13 +14 +13 +14 +14 +13 +13 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +26 +27 +27 +31 +31 +33 +33 +33 +36 +37 +41 +41 +41 +43 +43 +43 +43 +43 +47 +47 +50 +51 +51 +54 +55 +58 +59 +61 +64 +64 +68 +69 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +107 +110 +110 +116 +116 +120 +119 +119 +125 +125 +129 +129 +130 +134 +134 +139 +139 +140 +143 +143 +147 +147 +148 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +183 +184 +185 +189 +188 +188 +190 +191 +194 +194 +197 +196 +196 +199 +198 +200 +201 +200 +201 +200 +202 +202 +202 +205 +205 +204 +204 +204 +206 +207 +206 +206 +206 +206 +207 +206 +207 +207 +207 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +203 +200 +200 +200 +200 +200 +198 +199 +196 +196 +197 +194 +194 +191 +191 +189 +188 +188 +184 +185 +184 +185 +184 +183 +182 +179 +178 +179 +175 +175 +173 +173 +173 +168 +169 +165 +165 +165 +161 +161 +157 +157 +152 +151 +151 +147 +147 +143 +143 +143 +139 +140 +139 +139 +139 +134 +133 +129 +129 +129 +126 +125 +120 +120 +120 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +89 +86 +86 +87 +82 +82 +76 +76 +77 +72 +72 +68 +68 +67 +64 +64 +58 +58 +55 +54 +55 +50 +51 +47 +46 +47 +43 +43 +40 +40 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +13 +14 +13 +14 +14 +13 +14 +14 +13 +14 +13 +14 +14 +14 +13 +13 +13 +14 +14 +13 +13 +14 +13 +13 +15 +15 +16 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +46 +48 +51 +51 +54 +55 +58 +59 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +99 +100 +100 +106 +106 +110 +110 +110 +116 +116 +120 +120 +119 +125 +125 +129 +129 +129 +134 +133 +139 +139 +139 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +168 +173 +173 +175 +175 +175 +179 +179 +183 +183 +183 +185 +184 +189 +188 +191 +190 +190 +195 +195 +196 +196 +196 +199 +198 +201 +200 +200 +200 +200 +202 +202 +202 +204 +205 +204 +205 +204 +206 +207 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +202 +200 +200 +200 +201 +201 +199 +198 +197 +196 +195 +195 +195 +191 +190 +188 +189 +188 +184 +184 +184 +185 +185 +183 +183 +178 +179 +178 +175 +175 +172 +173 +171 +169 +169 +165 +165 +160 +161 +161 +157 +157 +157 +157 +157 +151 +151 +151 +151 +151 +147 +147 +143 +143 +143 +139 +140 +133 +133 +130 +129 +130 +126 +126 +119 +119 +120 +115 +115 +110 +110 +110 +106 +106 +100 +99 +100 +96 +96 +90 +90 +91 +86 +85 +82 +82 +77 +76 +77 +72 +72 +68 +68 +68 +65 +64 +58 +59 +59 +55 +55 +51 +51 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +14 +14 +14 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +15 +15 +15 +17 +17 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +32 +34 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +51 +55 +55 +54 +54 +54 +59 +59 +64 +64 +65 +68 +68 +72 +72 +74 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +115 +116 +119 +120 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +144 +144 +143 +143 +147 +147 +151 +152 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +179 +182 +183 +185 +185 +185 +188 +188 +191 +190 +191 +195 +194 +196 +197 +197 +199 +199 +200 +201 +201 +201 +201 +202 +202 +204 +205 +204 +204 +204 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +207 +207 +206 +204 +204 +204 +204 +204 +203 +203 +201 +201 +200 +200 +200 +200 +201 +200 +198 +198 +196 +196 +197 +194 +194 +191 +191 +191 +188 +189 +184 +184 +182 +183 +183 +179 +179 +175 +175 +175 +173 +173 +173 +173 +173 +169 +169 +165 +165 +165 +161 +162 +157 +157 +154 +151 +151 +147 +147 +143 +143 +143 +139 +139 +134 +133 +133 +129 +129 +125 +125 +125 +120 +119 +116 +116 +115 +110 +110 +106 +106 +101 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +65 +64 +58 +59 +55 +54 +51 +50 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +32 +31 +31 +31 +27 +26 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +16 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +14 +13 +14 +14 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +14 +13 +14 +14 +14 +13 +13 +14 +13 +13 +13 +13 +12 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +37 +37 +37 +41 +41 +43 +43 +43 +47 +46 +51 +51 +53 +54 +54 +59 +58 +65 +64 +64 +69 +68 +72 +72 +73 +76 +76 +82 +82 +82 +82 +82 +86 +86 +86 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +116 +116 +116 +116 +119 +119 +125 +126 +125 +130 +129 +133 +133 +133 +140 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +185 +185 +189 +188 +189 +191 +190 +190 +190 +190 +194 +194 +196 +196 +196 +198 +198 +201 +200 +200 +201 +201 +202 +202 +203 +204 +205 +204 +204 +207 +207 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +207 +205 +204 +205 +204 +205 +203 +203 +200 +200 +200 +200 +201 +198 +198 +197 +197 +196 +194 +194 +195 +195 +194 +190 +190 +189 +189 +189 +185 +185 +183 +182 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +126 +125 +120 +120 +115 +115 +116 +110 +110 +106 +105 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +73 +73 +68 +69 +64 +64 +64 +58 +59 +55 +55 +54 +50 +51 +47 +47 +47 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +12 +12 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +13 +14 +14 +13 +14 +14 +14 +14 +14 +13 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +19 +20 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +32 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +51 +54 +54 +55 +58 +58 +64 +65 +65 +69 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +99 +100 +106 +106 +106 +109 +109 +116 +116 +116 +120 +120 +125 +125 +129 +129 +129 +134 +133 +139 +139 +139 +143 +143 +143 +143 +143 +147 +148 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +173 +173 +173 +174 +175 +179 +179 +178 +182 +183 +185 +184 +185 +188 +188 +191 +191 +191 +195 +195 +196 +197 +196 +198 +199 +201 +201 +200 +201 +200 +203 +202 +204 +204 +204 +204 +205 +206 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +207 +206 +206 +207 +204 +204 +204 +205 +205 +202 +202 +200 +200 +201 +201 +201 +201 +201 +200 +199 +198 +196 +196 +197 +195 +195 +191 +190 +189 +189 +189 +184 +185 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +162 +157 +157 +151 +151 +147 +147 +147 +143 +143 +140 +139 +139 +133 +133 +129 +129 +130 +125 +126 +120 +120 +120 +116 +115 +109 +110 +110 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +77 +76 +72 +72 +68 +68 +68 +64 +64 +58 +58 +58 +54 +54 +50 +50 +47 +46 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +13 +14 +13 +13 +14 +14 +13 +13 +14 +14 +14 +13 +14 +13 +14 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +30 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +50 +55 +54 +58 +59 +58 +64 +64 +68 +68 +69 +73 +72 +76 +76 +77 +82 +83 +86 +86 +87 +90 +90 +96 +96 +96 +100 +100 +106 +106 +109 +110 +110 +116 +116 +120 +120 +120 +125 +125 +125 +125 +125 +129 +129 +133 +133 +133 +139 +140 +143 +143 +143 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +172 +175 +175 +179 +179 +179 +182 +183 +184 +184 +185 +189 +188 +190 +191 +194 +194 +195 +197 +196 +198 +199 +198 +200 +201 +201 +200 +201 +203 +202 +204 +204 +205 +204 +205 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +204 +205 +205 +204 +204 +204 +204 +203 +202 +203 +200 +200 +200 +201 +199 +198 +199 +197 +197 +194 +195 +195 +191 +191 +188 +189 +188 +184 +184 +182 +183 +182 +179 +179 +175 +175 +175 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +130 +125 +125 +120 +120 +116 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +72 +72 +69 +68 +65 +64 +64 +58 +58 +54 +54 +55 +50 +50 +46 +46 +47 +43 +43 +40 +41 +41 +37 +37 +33 +33 +34 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +14 +14 +14 +13 +13 +14 +13 +14 +14 +14 +14 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +14 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +42 +43 +42 +46 +47 +51 +50 +51 +55 +54 +58 +58 +58 +64 +64 +68 +69 +69 +72 +73 +76 +76 +77 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +105 +106 +110 +110 +110 +115 +115 +119 +119 +119 +126 +126 +130 +129 +129 +134 +133 +139 +139 +144 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +168 +173 +173 +175 +175 +175 +178 +178 +182 +182 +185 +184 +185 +189 +188 +190 +191 +191 +194 +195 +196 +197 +197 +198 +199 +201 +201 +201 +200 +200 +202 +202 +203 +205 +204 +205 +205 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +207 +204 +204 +205 +204 +203 +202 +203 +201 +200 +200 +201 +200 +199 +199 +196 +196 +197 +194 +194 +191 +191 +190 +188 +188 +184 +184 +185 +183 +183 +178 +179 +175 +175 +174 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +130 +130 +130 +125 +126 +120 +120 +120 +115 +116 +110 +109 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +68 +69 +64 +65 +58 +59 +58 +54 +55 +51 +50 +51 +47 +47 +43 +43 +44 +41 +40 +37 +37 +32 +32 +33 +31 +31 +27 +27 +27 +25 +25 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +16 +16 +13 +13 +12 +12 +13 +13 +13 +14 +13 +13 +13 +14 +13 +14 +14 +13 +14 +14 +13 +14 +13 +13 +14 +14 +14 +13 +13 +14 +13 +13 +13 +13 +13 +13 +15 +15 +15 +17 +18 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +50 +51 +54 +54 +55 +59 +59 +64 +64 +64 +68 +68 +72 +72 +77 +76 +77 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +99 +100 +106 +106 +105 +110 +110 +115 +115 +115 +119 +120 +126 +125 +130 +129 +130 +133 +133 +140 +140 +140 +144 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +166 +169 +169 +173 +174 +174 +175 +175 +179 +179 +183 +183 +183 +185 +184 +185 +185 +184 +188 +189 +190 +191 +190 +195 +194 +196 +197 +197 +198 +198 +200 +200 +200 +200 +200 +202 +202 +204 +204 +205 +204 +204 +205 +204 +204 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +207 +204 +204 +204 +204 +204 +203 +202 +202 +200 +200 +200 +200 +200 +198 +199 +197 +197 +196 +194 +195 +191 +191 +189 +189 +189 +185 +185 +183 +183 +183 +179 +179 +175 +175 +175 +173 +172 +169 +169 +169 +165 +165 +161 +161 +162 +157 +157 +151 +151 +148 +147 +147 +143 +143 +139 +139 +139 +133 +134 +129 +129 +129 +125 +125 +119 +120 +120 +116 +115 +110 +110 +110 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +65 +64 +58 +58 +54 +54 +50 +51 +51 +47 +47 +43 +43 +43 +41 +41 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +28 +26 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +14 +14 +13 +13 +13 +14 +14 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +36 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +50 +54 +54 +54 +59 +59 +65 +65 +64 +69 +69 +72 +72 +72 +77 +76 +82 +82 +82 +86 +86 +90 +90 +91 +96 +96 +100 +100 +106 +106 +106 +110 +109 +116 +116 +116 +119 +119 +119 +119 +119 +125 +126 +129 +129 +129 +134 +133 +140 +139 +140 +143 +143 +148 +147 +152 +151 +151 +157 +157 +161 +161 +161 +165 +165 +165 +165 +165 +169 +169 +173 +173 +173 +175 +174 +178 +178 +180 +183 +183 +184 +185 +188 +188 +189 +191 +191 +195 +194 +194 +196 +196 +197 +196 +197 +198 +199 +200 +201 +201 +200 +200 +202 +203 +205 +205 +204 +204 +205 +206 +206 +206 +206 +206 +207 +207 +207 +206 +206 +206 +207 +207 +207 +206 +205 +204 +205 +205 +205 +203 +202 +200 +200 +201 +200 +200 +198 +199 +198 +196 +197 +195 +194 +194 +191 +190 +189 +188 +189 +184 +185 +182 +182 +182 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +166 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +126 +125 +125 +120 +119 +115 +116 +116 +110 +109 +106 +106 +106 +100 +100 +95 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +73 +72 +72 +68 +68 +64 +65 +64 +59 +59 +59 +58 +59 +55 +55 +50 +50 +51 +47 +47 +43 +42 +43 +41 +41 +37 +37 +34 +33 +33 +31 +31 +27 +27 +27 +25 +25 +25 +25 +25 +21 +22 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +13 +14 +14 +13 +14 +14 +14 +13 +13 +13 +14 +14 +14 +13 +13 +14 +14 +14 +14 +14 +13 +13 +13 +13 +12 +15 +16 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +50 +51 +54 +55 +59 +59 +58 +64 +64 +69 +69 +69 +73 +72 +76 +76 +83 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +116 +120 +120 +120 +125 +126 +129 +129 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +170 +173 +173 +175 +175 +178 +179 +179 +182 +183 +185 +185 +184 +188 +189 +189 +188 +189 +190 +191 +194 +194 +194 +197 +196 +199 +198 +200 +201 +201 +200 +200 +202 +203 +202 +204 +204 +204 +204 +204 +206 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +204 +204 +204 +204 +204 +202 +202 +202 +201 +200 +200 +200 +200 +198 +199 +197 +197 +197 +195 +194 +190 +190 +190 +189 +189 +184 +185 +182 +183 +182 +178 +178 +175 +175 +175 +173 +173 +169 +168 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +140 +139 +139 +133 +133 +129 +129 +130 +125 +125 +120 +120 +120 +116 +116 +110 +110 +110 +106 +105 +100 +100 +101 +96 +96 +90 +90 +86 +87 +86 +82 +82 +76 +76 +76 +72 +72 +72 +72 +72 +69 +69 +64 +65 +64 +58 +59 +55 +55 +54 +50 +51 +47 +47 +44 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +13 +13 +13 +14 +14 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +13 +14 +14 +14 +13 +14 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +42 +46 +47 +51 +51 +51 +54 +55 +58 +59 +59 +64 +64 +69 +68 +72 +72 +72 +76 +76 +83 +82 +82 +86 +86 +90 +90 +90 +96 +96 +99 +100 +100 +106 +105 +110 +110 +110 +116 +116 +119 +120 +125 +126 +126 +129 +129 +133 +133 +133 +139 +139 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +158 +161 +161 +165 +165 +168 +169 +169 +173 +173 +175 +175 +175 +179 +179 +179 +179 +179 +182 +183 +184 +185 +185 +188 +189 +190 +190 +194 +195 +195 +197 +196 +198 +198 +198 +201 +201 +200 +200 +201 +202 +202 +205 +205 +204 +204 +204 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +201 +201 +201 +201 +200 +198 +198 +198 +197 +197 +195 +195 +191 +191 +190 +189 +188 +184 +184 +184 +182 +183 +179 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +144 +143 +139 +139 +133 +133 +134 +130 +129 +126 +125 +126 +119 +119 +116 +116 +116 +110 +109 +105 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +66 +64 +64 +59 +59 +55 +54 +55 +51 +51 +47 +46 +47 +43 +43 +43 +42 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +28 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +14 +13 +13 +13 +14 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +13 +13 +15 +15 +17 +17 +18 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +34 +37 +36 +37 +41 +41 +43 +43 +43 +47 +46 +51 +51 +55 +54 +55 +58 +58 +65 +64 +65 +68 +68 +72 +73 +72 +76 +77 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +106 +106 +106 +110 +109 +116 +116 +116 +119 +120 +119 +119 +119 +125 +126 +129 +129 +129 +133 +133 +140 +139 +139 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +160 +161 +165 +165 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +180 +183 +183 +185 +184 +188 +189 +188 +191 +190 +194 +195 +195 +196 +197 +198 +198 +198 +200 +200 +200 +201 +201 +203 +203 +204 +204 +204 +204 +204 +207 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +206 +205 +205 +204 +204 +204 +202 +203 +200 +200 +200 +200 +200 +199 +198 +196 +196 +196 +195 +195 +191 +190 +190 +189 +189 +185 +185 +184 +183 +183 +179 +179 +179 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +148 +147 +143 +143 +143 +139 +139 +133 +133 +134 +129 +129 +125 +125 +119 +120 +119 +115 +116 +110 +109 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +79 +76 +77 +72 +72 +68 +68 +68 +64 +64 +58 +58 +59 +55 +54 +54 +54 +55 +51 +51 +47 +47 +47 +43 +43 +41 +41 +38 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +14 +13 +13 +13 +12 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +14 +13 +14 +13 +14 +13 +13 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +43 +42 +43 +47 +47 +51 +50 +50 +54 +54 +58 +59 +59 +65 +64 +67 +68 +68 +72 +72 +77 +76 +77 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +106 +106 +106 +110 +110 +115 +115 +116 +119 +120 +125 +125 +126 +129 +129 +133 +133 +140 +139 +139 +143 +143 +147 +147 +147 +151 +151 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +172 +173 +173 +175 +175 +178 +179 +178 +183 +182 +184 +184 +185 +188 +188 +191 +190 +190 +194 +194 +197 +196 +197 +198 +199 +200 +200 +200 +200 +200 +203 +203 +204 +204 +204 +204 +204 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +203 +200 +200 +200 +200 +201 +199 +198 +198 +196 +196 +195 +194 +194 +190 +191 +189 +189 +189 +185 +185 +182 +183 +179 +179 +179 +175 +174 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +148 +143 +143 +140 +139 +133 +133 +133 +129 +130 +126 +125 +126 +120 +119 +120 +119 +119 +116 +115 +110 +110 +110 +106 +106 +100 +100 +98 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +77 +76 +72 +72 +72 +72 +73 +68 +68 +64 +65 +64 +58 +58 +55 +55 +52 +51 +50 +47 +46 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +30 +31 +27 +27 +25 +25 +26 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +14 +14 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +14 +13 +13 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +15 +15 +17 +18 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +42 +47 +47 +50 +50 +51 +54 +54 +59 +59 +59 +58 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +102 +106 +106 +110 +110 +115 +116 +115 +119 +119 +125 +125 +125 +129 +129 +129 +129 +130 +134 +134 +139 +139 +139 +143 +143 +147 +147 +148 +151 +151 +157 +157 +160 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +182 +183 +182 +185 +185 +189 +189 +190 +190 +191 +195 +194 +196 +196 +196 +198 +199 +200 +200 +201 +200 +200 +202 +202 +203 +204 +205 +204 +204 +204 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +204 +205 +204 +204 +205 +203 +202 +202 +200 +200 +201 +200 +200 +198 +198 +196 +196 +194 +195 +195 +191 +191 +188 +189 +188 +185 +185 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +134 +134 +129 +129 +126 +126 +123 +120 +119 +115 +116 +109 +110 +110 +106 +106 +100 +100 +100 +96 +96 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +77 +76 +77 +72 +72 +68 +68 +64 +65 +64 +58 +58 +54 +54 +55 +51 +51 +46 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +13 +14 +14 +14 +14 +14 +14 +13 +14 +13 +13 +14 +14 +13 +14 +13 +13 +14 +14 +13 +13 +14 +13 +14 +13 +13 +15 +16 +18 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +42 +43 +46 +47 +51 +50 +51 +55 +54 +59 +58 +59 +65 +64 +64 +64 +64 +69 +69 +72 +72 +72 +76 +76 +82 +82 +84 +86 +86 +90 +90 +96 +96 +95 +100 +100 +106 +106 +106 +110 +110 +110 +109 +110 +116 +115 +120 +119 +119 +125 +125 +129 +130 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +178 +178 +179 +183 +183 +185 +184 +184 +189 +188 +190 +191 +191 +194 +194 +197 +196 +197 +198 +198 +201 +200 +201 +201 +201 +203 +202 +204 +204 +205 +205 +205 +206 +206 +207 +207 +206 +206 +207 +206 +207 +206 +207 +207 +206 +206 +206 +206 +206 +207 +204 +204 +205 +204 +203 +202 +203 +201 +200 +200 +200 +200 +198 +199 +197 +196 +196 +194 +194 +191 +190 +191 +188 +189 +184 +185 +185 +183 +183 +178 +178 +175 +175 +175 +173 +173 +169 +168 +169 +165 +165 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +148 +148 +143 +143 +139 +139 +133 +133 +133 +129 +129 +126 +126 +125 +120 +119 +119 +119 +119 +116 +116 +110 +110 +110 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +58 +59 +54 +54 +50 +51 +47 +47 +47 +43 +43 +41 +41 +40 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +14 +14 +14 +14 +13 +14 +13 +14 +13 +14 +13 +13 +13 +13 +14 +13 +13 +15 +15 +15 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +24 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +50 +51 +54 +55 +59 +58 +61 +65 +64 +68 +68 +72 +72 +72 +77 +76 +82 +82 +82 +86 +86 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +109 +110 +110 +116 +115 +119 +119 +120 +125 +125 +129 +129 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +147 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +174 +175 +179 +179 +183 +183 +183 +185 +185 +189 +188 +189 +190 +191 +194 +195 +196 +196 +196 +198 +199 +200 +201 +200 +200 +200 +200 +201 +200 +201 +203 +205 +204 +204 +205 +205 +207 +206 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +204 +205 +204 +205 +202 +203 +200 +201 +200 +200 +201 +198 +198 +199 +196 +196 +194 +195 +190 +190 +190 +188 +188 +184 +184 +185 +183 +183 +183 +182 +183 +178 +179 +175 +175 +175 +173 +172 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +143 +143 +143 +139 +140 +133 +133 +134 +129 +129 +125 +125 +120 +120 +120 +115 +115 +110 +109 +110 +106 +105 +100 +100 +100 +96 +95 +90 +90 +90 +86 +87 +82 +83 +83 +76 +76 +72 +72 +69 +68 +68 +65 +64 +58 +58 +59 +54 +55 +50 +50 +50 +46 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +30 +31 +28 +25 +25 +21 +21 +21 +21 +21 +20 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +12 +14 +14 +13 +14 +13 +14 +14 +13 +14 +14 +14 +13 +14 +13 +13 +14 +14 +13 +14 +14 +13 +13 +14 +13 +13 +13 +13 +13 +15 +15 +17 +17 +20 +19 +19 +21 +21 +25 +25 +25 +27 +27 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +42 +47 +47 +51 +51 +50 +54 +54 +58 +59 +59 +65 +64 +64 +65 +64 +69 +68 +72 +72 +72 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +115 +115 +119 +119 +125 +125 +126 +129 +130 +133 +134 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +182 +183 +183 +185 +184 +188 +189 +188 +191 +190 +194 +194 +194 +196 +196 +198 +198 +198 +200 +200 +201 +200 +201 +202 +202 +204 +204 +205 +204 +204 +206 +207 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +205 +205 +202 +202 +200 +200 +200 +200 +200 +198 +198 +196 +196 +196 +194 +195 +195 +195 +194 +191 +190 +189 +188 +188 +185 +184 +183 +182 +181 +178 +179 +175 +175 +172 +173 +173 +169 +169 +165 +165 +165 +161 +161 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +141 +139 +139 +133 +133 +129 +130 +129 +125 +126 +119 +119 +119 +115 +116 +109 +109 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +86 +87 +86 +82 +82 +76 +76 +76 +73 +72 +68 +68 +68 +64 +65 +59 +58 +58 +55 +54 +50 +51 +51 +47 +46 +42 +43 +42 +42 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +14 +14 +14 +14 +13 +14 +14 +13 +14 +13 +13 +14 +13 +14 +14 +13 +13 +14 +13 +13 +13 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +28 +31 +31 +33 +33 +36 +37 +37 +41 +41 +43 +43 +43 +47 +47 +47 +47 +47 +51 +50 +54 +55 +54 +59 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +115 +119 +119 +119 +125 +125 +129 +129 +130 +134 +134 +139 +139 +140 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +168 +169 +169 +173 +173 +174 +175 +175 +178 +179 +182 +182 +183 +185 +185 +189 +189 +188 +190 +191 +194 +194 +195 +197 +197 +198 +198 +201 +200 +200 +200 +200 +202 +202 +202 +204 +205 +204 +204 +204 +207 +206 +207 +206 +206 +206 +207 +206 +206 +207 +206 +207 +206 +207 +204 +204 +205 +204 +205 +202 +202 +202 +200 +200 +200 +200 +200 +198 +199 +196 +196 +196 +194 +195 +191 +191 +189 +188 +188 +184 +185 +182 +182 +183 +178 +178 +174 +175 +174 +172 +173 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +152 +151 +151 +147 +147 +143 +143 +143 +140 +139 +133 +133 +133 +129 +129 +125 +125 +126 +119 +119 +115 +115 +116 +110 +110 +105 +106 +101 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +65 +58 +58 +55 +54 +51 +51 +51 +47 +48 +42 +43 +42 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +17 +17 +18 +16 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +13 +14 +13 +13 +14 +14 +13 +14 +14 +14 +13 +13 +14 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +26 +27 +27 +31 +31 +33 +33 +32 +37 +37 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +53 +54 +55 +58 +58 +65 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +101 +100 +105 +106 +106 +110 +109 +116 +115 +116 +119 +120 +125 +125 +125 +129 +129 +133 +133 +133 +140 +140 +144 +143 +143 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +172 +172 +175 +175 +179 +179 +179 +183 +183 +184 +185 +185 +189 +189 +191 +190 +195 +195 +195 +197 +197 +198 +198 +199 +200 +200 +200 +200 +200 +203 +202 +204 +204 +204 +204 +205 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +205 +204 +204 +204 +205 +202 +202 +202 +201 +200 +200 +200 +201 +198 +198 +196 +197 +194 +194 +194 +191 +190 +188 +188 +188 +184 +185 +185 +185 +185 +183 +182 +179 +179 +179 +175 +175 +173 +172 +170 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +134 +129 +129 +125 +125 +120 +120 +120 +116 +115 +110 +109 +109 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +73 +73 +69 +68 +68 +64 +64 +59 +58 +59 +54 +54 +50 +51 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +14 +13 +13 +14 +13 +14 +13 +13 +13 +13 +13 +14 +14 +14 +14 +13 +13 +14 +13 +14 +13 +14 +13 +13 +13 +14 +14 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +25 +25 +25 +26 +27 +31 +31 +31 +33 +33 +37 +36 +39 +41 +40 +43 +43 +46 +47 +47 +51 +51 +55 +55 +55 +58 +58 +64 +64 +65 +68 +68 +72 +72 +72 +76 +76 +82 +82 +84 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +116 +120 +120 +125 +125 +126 +129 +129 +133 +133 +138 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +183 +182 +182 +185 +185 +184 +184 +185 +189 +188 +191 +191 +190 +194 +194 +196 +197 +196 +198 +199 +200 +200 +201 +200 +200 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +207 +206 +207 +207 +204 +205 +204 +204 +202 +203 +202 +200 +200 +200 +200 +200 +199 +198 +199 +198 +198 +196 +196 +194 +194 +195 +190 +191 +189 +188 +186 +185 +185 +183 +183 +178 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +156 +157 +157 +151 +151 +147 +147 +144 +143 +143 +140 +139 +133 +133 +133 +129 +129 +125 +125 +126 +119 +119 +115 +116 +116 +109 +109 +106 +106 +106 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +59 +58 +55 +55 +55 +51 +51 +47 +46 +43 +42 +43 +41 +41 +37 +37 +37 +33 +33 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +22 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +13 +13 +14 +14 +13 +14 +13 +14 +13 +13 +13 +13 +14 +14 +14 +14 +14 +13 +13 +13 +13 +13 +13 +14 +13 +15 +15 +15 +15 +15 +17 +17 +17 +19 +19 +21 +21 +24 +25 +25 +28 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +42 +43 +47 +47 +51 +51 +51 +55 +54 +59 +59 +64 +65 +65 +68 +68 +72 +72 +73 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +105 +110 +109 +115 +116 +116 +120 +120 +125 +126 +125 +129 +129 +133 +133 +134 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +182 +183 +185 +185 +185 +189 +189 +191 +191 +191 +194 +195 +197 +197 +198 +198 +198 +200 +200 +200 +200 +200 +202 +202 +204 +204 +204 +204 +205 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +203 +202 +202 +202 +200 +201 +201 +201 +200 +198 +199 +196 +197 +195 +194 +195 +191 +190 +188 +189 +189 +185 +185 +183 +183 +182 +179 +179 +176 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +158 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +126 +120 +120 +119 +115 +116 +110 +109 +106 +105 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +83 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +59 +55 +55 +54 +51 +50 +47 +47 +46 +43 +43 +41 +40 +41 +37 +36 +33 +33 +33 +31 +31 +27 +26 +27 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +14 +14 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +13 +14 +14 +14 +14 +13 +13 +13 +13 +12 +15 +15 +17 +17 +18 +19 +19 +21 +22 +25 +25 +26 +28 +27 +31 +31 +31 +34 +33 +36 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +54 +55 +55 +59 +59 +65 +64 +64 +68 +68 +72 +72 +73 +76 +76 +82 +82 +83 +86 +86 +90 +90 +91 +96 +96 +100 +100 +106 +105 +106 +109 +110 +115 +116 +116 +119 +119 +125 +125 +125 +129 +129 +133 +134 +133 +139 +139 +143 +143 +144 +147 +147 +151 +151 +158 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +179 +183 +183 +184 +184 +184 +188 +189 +191 +191 +195 +194 +195 +196 +196 +198 +199 +198 +200 +201 +201 +200 +200 +200 +200 +202 +202 +202 +205 +205 +204 +204 +205 +206 +205 +206 +206 +207 +206 +207 +207 +206 +206 +207 +206 +206 +206 +207 +206 +206 +205 +204 +204 +204 +205 +203 +203 +200 +200 +200 +201 +201 +198 +198 +197 +196 +197 +195 +195 +190 +190 +191 +189 +188 +185 +184 +185 +183 +183 +179 +179 +179 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +126 +126 +120 +119 +119 +115 +115 +109 +110 +110 +106 +106 +100 +100 +100 +97 +96 +90 +90 +90 +86 +86 +82 +82 +82 +77 +77 +72 +72 +69 +68 +68 +65 +65 +58 +58 +59 +55 +55 +51 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +38 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +14 +13 +13 +14 +13 +14 +13 +13 +14 +14 +13 +14 +13 +13 +14 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +32 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +51 +55 +54 +54 +58 +58 +64 +64 +65 +68 +68 +72 +72 +72 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +109 +116 +116 +115 +120 +120 +126 +125 +125 +129 +130 +133 +133 +140 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +172 +173 +174 +175 +175 +179 +179 +183 +183 +183 +185 +185 +188 +189 +189 +191 +190 +194 +195 +194 +196 +196 +198 +199 +198 +201 +200 +201 +201 +201 +203 +203 +204 +204 +204 +204 +204 +206 +207 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +207 +207 +206 +206 +204 +204 +205 +204 +205 +203 +202 +201 +200 +200 +200 +200 +198 +198 +198 +197 +196 +195 +194 +194 +190 +191 +189 +188 +189 +185 +185 +182 +183 +179 +179 +179 +175 +175 +173 +173 +173 +168 +169 +165 +165 +164 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +144 +139 +139 +134 +133 +133 +129 +129 +126 +125 +125 +120 +119 +115 +116 +116 +110 +110 +106 +106 +106 +100 +100 +95 +96 +96 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +58 +59 +54 +54 +54 +51 +50 +47 +46 +48 +42 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +16 +15 +15 +15 +14 +13 +12 +12 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +14 +14 +14 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +37 +40 +41 +41 +43 +43 +47 +47 +47 +51 +50 +54 +55 +55 +58 +59 +64 +64 +64 +68 +68 +73 +72 +77 +76 +77 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +115 +116 +119 +119 +125 +126 +130 +129 +129 +133 +133 +139 +139 +139 +143 +144 +148 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +166 +168 +169 +173 +173 +174 +175 +175 +179 +179 +182 +183 +182 +184 +185 +185 +184 +185 +189 +189 +191 +191 +191 +195 +194 +196 +197 +197 +198 +199 +200 +200 +200 +201 +201 +202 +202 +204 +204 +204 +204 +204 +205 +204 +204 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +204 +205 +204 +204 +204 +203 +202 +203 +200 +200 +200 +201 +200 +199 +197 +197 +196 +197 +195 +194 +191 +191 +188 +188 +189 +184 +184 +183 +182 +183 +178 +179 +175 +175 +175 +172 +172 +169 +169 +169 +164 +165 +161 +161 +161 +157 +157 +151 +151 +148 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +130 +125 +125 +120 +119 +119 +116 +115 +110 +110 +110 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +77 +76 +73 +72 +68 +68 +69 +64 +64 +59 +59 +59 +55 +54 +51 +51 +47 +47 +46 +43 +43 +41 +41 +41 +37 +37 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +12 +13 +13 +13 +13 +13 +14 +14 +14 +14 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +14 +13 +13 +14 +13 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +40 +41 +43 +42 +47 +47 +47 +51 +50 +54 +54 +58 +58 +58 +65 +65 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +105 +110 +110 +110 +115 +116 +120 +120 +119 +125 +125 +130 +129 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +148 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +174 +175 +175 +178 +179 +183 +182 +182 +185 +185 +189 +189 +189 +191 +191 +194 +194 +196 +196 +196 +199 +198 +200 +200 +201 +200 +201 +201 +201 +201 +202 +202 +204 +204 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +204 +205 +204 +204 +205 +203 +203 +201 +201 +201 +200 +200 +198 +198 +196 +196 +197 +194 +194 +190 +190 +190 +189 +189 +185 +185 +185 +183 +183 +179 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +134 +133 +134 +129 +129 +126 +125 +126 +119 +120 +116 +110 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +74 +68 +68 +64 +64 +59 +59 +58 +54 +54 +50 +51 +51 +47 +46 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +32 +30 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +17 +17 +17 +15 +15 +15 +14 +15 +13 +13 +12 +13 +14 +14 +13 +14 +14 +14 +13 +14 +14 +13 +14 +14 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +14 +14 +13 +13 +15 +15 +17 +17 +19 +19 +19 +21 +21 +21 +21 +21 +25 +25 +27 +27 +27 +31 +30 +33 +33 +33 +37 +37 +41 +41 +43 +43 +42 +47 +46 +51 +51 +51 +54 +55 +54 +54 +55 +58 +58 +65 +64 +64 +69 +68 +72 +72 +72 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +95 +100 +100 +106 +106 +105 +110 +110 +115 +116 +116 +119 +119 +125 +125 +125 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +151 +151 +151 +157 +157 +162 +161 +161 +165 +165 +169 +169 +170 +173 +173 +175 +175 +178 +179 +179 +183 +182 +185 +185 +185 +189 +189 +189 +188 +188 +190 +190 +194 +195 +195 +196 +197 +199 +199 +200 +200 +201 +200 +200 +202 +203 +202 +204 +204 +204 +204 +204 +206 +206 +207 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +206 +204 +204 +204 +205 +204 +203 +202 +202 +200 +200 +200 +201 +200 +198 +199 +197 +197 +196 +194 +195 +191 +191 +191 +189 +189 +184 +184 +182 +183 +182 +179 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +140 +139 +139 +133 +133 +129 +129 +130 +126 +125 +120 +119 +120 +116 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +87 +86 +86 +82 +82 +76 +76 +76 +72 +72 +72 +72 +72 +69 +68 +64 +64 +64 +59 +58 +54 +55 +55 +51 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +33 +33 +33 +31 +31 +26 +27 +27 +25 +25 +20 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +14 +14 +14 +13 +14 +13 +14 +13 +13 +14 +13 +14 +14 +13 +13 +14 +13 +13 +14 +14 +14 +14 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +50 +50 +54 +55 +55 +59 +58 +64 +64 +69 +68 +69 +72 +72 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +120 +119 +120 +126 +125 +129 +130 +129 +134 +134 +133 +134 +133 +140 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +165 +165 +166 +169 +169 +173 +172 +173 +175 +175 +175 +175 +174 +179 +179 +183 +183 +182 +185 +185 +189 +188 +189 +190 +191 +195 +194 +196 +196 +197 +198 +198 +201 +201 +200 +201 +200 +203 +202 +203 +204 +204 +204 +204 +205 +206 +207 +206 +207 +206 +207 +206 +206 +206 +207 +207 +206 +206 +206 +205 +205 +204 +205 +204 +202 +203 +203 +200 +200 +201 +201 +200 +198 +198 +197 +196 +195 +195 +194 +191 +190 +189 +189 +188 +185 +185 +183 +183 +182 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +158 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +134 +133 +129 +129 +129 +125 +125 +119 +120 +120 +115 +115 +110 +109 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +71 +68 +69 +64 +65 +59 +59 +59 +55 +55 +51 +51 +50 +47 +46 +47 +47 +47 +43 +43 +41 +41 +40 +37 +37 +33 +33 +31 +31 +30 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +13 +14 +14 +14 +14 +13 +14 +13 +14 +14 +14 +13 +13 +13 +13 +14 +14 +14 +14 +14 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +40 +41 +43 +42 +47 +46 +51 +51 +50 +54 +55 +58 +58 +59 +64 +65 +68 +68 +68 +72 +72 +77 +76 +77 +82 +82 +86 +86 +86 +90 +90 +96 +96 +101 +100 +100 +106 +106 +110 +110 +110 +116 +115 +115 +116 +116 +119 +119 +125 +125 +125 +129 +130 +134 +133 +132 +139 +139 +143 +144 +148 +147 +147 +151 +151 +157 +157 +157 +161 +161 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +176 +179 +179 +183 +183 +184 +184 +184 +189 +188 +190 +191 +191 +195 +195 +197 +197 +197 +198 +199 +201 +201 +201 +201 +201 +203 +203 +204 +205 +204 +204 +204 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +207 +206 +206 +204 +205 +205 +204 +204 +202 +202 +201 +201 +200 +201 +200 +198 +198 +198 +197 +196 +194 +194 +195 +190 +190 +189 +188 +188 +185 +185 +183 +182 +183 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +141 +133 +133 +129 +129 +125 +125 +125 +119 +120 +116 +116 +115 +109 +110 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +88 +86 +86 +82 +82 +76 +76 +76 +73 +72 +68 +68 +69 +64 +64 +64 +64 +64 +58 +58 +55 +54 +54 +51 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +14 +14 +14 +14 +13 +13 +13 +14 +13 +14 +14 +14 +13 +14 +14 +13 +13 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +30 +33 +33 +33 +37 +37 +41 +41 +41 +43 +42 +47 +47 +47 +51 +51 +54 +55 +55 +58 +59 +64 +64 +64 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +116 +117 +120 +120 +125 +125 +129 +129 +129 +133 +134 +139 +139 +139 +143 +143 +143 +143 +143 +147 +147 +151 +152 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +182 +185 +185 +184 +189 +189 +191 +191 +190 +194 +194 +196 +197 +198 +198 +198 +200 +200 +200 +200 +200 +203 +203 +205 +204 +204 +204 +204 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +203 +204 +202 +202 +200 +201 +200 +200 +201 +199 +198 +198 +196 +197 +194 +195 +194 +190 +191 +189 +188 +184 +185 +185 +183 +183 +179 +178 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +158 +151 +151 +148 +147 +143 +143 +143 +140 +139 +134 +133 +133 +129 +129 +129 +129 +130 +125 +125 +119 +120 +119 +115 +115 +110 +110 +108 +106 +106 +100 +100 +95 +96 +96 +90 +90 +86 +86 +86 +83 +83 +82 +82 +82 +76 +76 +72 +72 +73 +68 +68 +64 +65 +61 +58 +58 +54 +54 +51 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +14 +13 +13 +13 +14 +13 +14 +13 +14 +13 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +14 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +26 +25 +25 +28 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +42 +43 +46 +47 +50 +50 +51 +54 +55 +58 +59 +65 +65 +64 +68 +69 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +95 +100 +100 +102 +106 +105 +110 +110 +115 +116 +116 +120 +120 +125 +125 +126 +129 +129 +129 +129 +130 +134 +133 +139 +139 +139 +143 +143 +147 +147 +148 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +176 +174 +175 +179 +179 +183 +183 +183 +185 +185 +189 +188 +190 +190 +190 +195 +194 +196 +196 +197 +198 +198 +200 +200 +200 +200 +200 +202 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +207 +206 +205 +204 +204 +204 +205 +203 +202 +202 +201 +200 +200 +201 +201 +198 +199 +196 +197 +195 +194 +195 +191 +190 +188 +189 +189 +185 +184 +183 +182 +183 +178 +179 +175 +175 +174 +172 +173 +169 +169 +169 +165 +165 +161 +161 +158 +157 +157 +151 +151 +147 +147 +147 +143 +143 +143 +143 +143 +139 +139 +133 +133 +134 +129 +129 +125 +125 +125 +120 +120 +116 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +73 +72 +72 +68 +68 +64 +64 +64 +59 +58 +54 +54 +54 +50 +50 +47 +47 +46 +43 +42 +41 +41 +41 +37 +36 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +14 +14 +14 +14 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +14 +14 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +25 +26 +25 +27 +27 +31 +31 +31 +33 +33 +37 +36 +38 +40 +41 +43 +43 +47 +47 +46 +50 +50 +54 +55 +54 +58 +58 +59 +59 +59 +65 +64 +68 +68 +68 +72 +72 +77 +77 +77 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +105 +106 +106 +110 +110 +116 +115 +116 +119 +120 +125 +126 +129 +130 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +176 +175 +175 +179 +178 +183 +183 +183 +185 +185 +189 +189 +188 +191 +191 +195 +194 +194 +196 +196 +198 +198 +198 +201 +200 +201 +200 +203 +203 +203 +204 +204 +204 +204 +204 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +204 +205 +205 +204 +205 +202 +202 +200 +200 +200 +200 +200 +199 +199 +198 +196 +197 +194 +195 +195 +190 +191 +189 +188 +189 +185 +185 +183 +183 +178 +179 +179 +175 +175 +173 +173 +173 +169 +169 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +139 +139 +139 +134 +133 +130 +129 +129 +126 +125 +126 +126 +125 +119 +119 +116 +116 +116 +110 +110 +106 +106 +101 +100 +100 +96 +96 +90 +90 +90 +86 +87 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +65 +59 +58 +55 +54 +51 +50 +50 +46 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +17 +17 +18 +15 +15 +15 +15 +15 +13 +13 +12 +12 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +13 +14 +13 +12 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +24 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +41 +41 +41 +43 +42 +47 +46 +46 +50 +50 +54 +54 +56 +58 +58 +65 +65 +68 +69 +69 +72 +72 +76 +76 +76 +82 +82 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +105 +106 +106 +110 +109 +115 +116 +116 +120 +121 +126 +126 +125 +129 +130 +133 +133 +133 +139 +140 +143 +143 +143 +147 +147 +151 +151 +156 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +178 +183 +182 +184 +185 +185 +189 +189 +191 +191 +195 +194 +195 +197 +196 +198 +198 +198 +200 +200 +201 +200 +201 +202 +202 +204 +205 +204 +205 +205 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +204 +204 +204 +204 +204 +202 +203 +201 +201 +201 +200 +201 +198 +199 +200 +196 +196 +195 +195 +191 +190 +190 +188 +189 +185 +185 +185 +183 +183 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +167 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +143 +144 +144 +139 +139 +133 +133 +134 +129 +129 +125 +125 +120 +119 +119 +116 +115 +110 +110 +110 +105 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +68 +68 +68 +64 +65 +59 +59 +59 +55 +54 +50 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +14 +14 +13 +13 +14 +14 +14 +14 +14 +13 +13 +14 +13 +13 +13 +13 +14 +13 +13 +15 +15 +17 +17 +20 +19 +19 +22 +21 +25 +25 +25 +27 +27 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +42 +47 +47 +50 +50 +50 +54 +54 +59 +58 +59 +64 +64 +64 +64 +64 +69 +68 +72 +72 +73 +76 +76 +82 +82 +83 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +111 +115 +115 +116 +120 +120 +125 +126 +126 +129 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +160 +161 +165 +165 +165 +169 +169 +173 +173 +172 +175 +175 +179 +179 +182 +182 +183 +185 +184 +188 +188 +188 +191 +190 +195 +194 +194 +196 +196 +199 +199 +198 +200 +200 +201 +200 +201 +202 +203 +204 +204 +205 +204 +204 +206 +207 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +204 +204 +205 +205 +205 +202 +202 +200 +200 +200 +200 +200 +198 +199 +196 +196 +197 +195 +195 +191 +190 +190 +188 +189 +185 +184 +185 +182 +183 +179 +179 +177 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +134 +133 +133 +129 +130 +125 +125 +126 +119 +119 +116 +116 +116 +110 +110 +106 +106 +105 +100 +100 +96 +96 +97 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +68 +68 +68 +64 +65 +58 +58 +58 +54 +55 +51 +50 +51 +47 +47 +43 +42 +42 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +14 +14 +14 +13 +14 +13 +14 +14 +13 +14 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +13 +14 +13 +15 +15 +15 +17 +17 +19 +18 +18 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +46 +47 +50 +51 +51 +51 +50 +54 +55 +58 +58 +59 +65 +65 +68 +68 +72 +73 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +116 +119 +119 +125 +125 +126 +130 +129 +129 +129 +130 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +178 +178 +183 +183 +182 +184 +184 +188 +189 +188 +190 +191 +194 +195 +194 +196 +196 +199 +199 +201 +200 +200 +201 +200 +203 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +205 +204 +204 +205 +204 +203 +202 +202 +200 +201 +201 +200 +200 +199 +199 +196 +196 +197 +194 +194 +190 +191 +189 +189 +189 +184 +184 +182 +182 +183 +178 +178 +175 +175 +175 +173 +173 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +154 +151 +151 +147 +147 +143 +143 +143 +139 +139 +134 +133 +133 +129 +129 +125 +125 +125 +119 +119 +116 +116 +116 +109 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +77 +72 +72 +72 +68 +69 +64 +65 +64 +58 +59 +55 +54 +51 +51 +50 +46 +47 +43 +43 +43 +41 +41 +37 +37 +38 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +14 +14 +14 +13 +14 +14 +13 +14 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +14 +14 +13 +14 +13 +12 +15 +15 +17 +17 +18 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +33 +33 +33 +37 +37 +40 +41 +40 +43 +43 +47 +47 +49 +50 +50 +55 +55 +58 +59 +58 +64 +64 +68 +69 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +97 +99 +100 +100 +106 +106 +110 +109 +110 +116 +116 +120 +119 +119 +125 +125 +129 +129 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +165 +165 +165 +169 +169 +173 +173 +172 +174 +175 +178 +179 +179 +183 +182 +185 +185 +185 +184 +185 +189 +188 +190 +190 +190 +195 +195 +196 +196 +196 +198 +198 +200 +200 +200 +201 +201 +202 +202 +203 +205 +204 +204 +204 +207 +207 +207 +207 +206 +206 +205 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +204 +204 +204 +204 +205 +203 +203 +200 +201 +200 +200 +200 +198 +199 +196 +196 +196 +194 +194 +195 +195 +194 +190 +191 +188 +188 +189 +185 +185 +182 +183 +181 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +133 +134 +134 +129 +129 +125 +125 +126 +119 +119 +116 +116 +115 +109 +109 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +82 +82 +82 +76 +77 +72 +72 +72 +68 +68 +64 +64 +64 +58 +59 +54 +55 +54 +51 +51 +47 +47 +47 +43 +43 +41 +40 +38 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +22 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +14 +14 +14 +13 +13 +14 +14 +13 +14 +14 +13 +13 +13 +14 +13 +13 +14 +14 +13 +13 +14 +14 +13 +15 +16 +15 +17 +17 +17 +17 +17 +18 +19 +21 +21 +21 +24 +25 +27 +27 +30 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +50 +51 +55 +55 +59 +59 +59 +65 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +110 +109 +115 +115 +120 +119 +125 +125 +125 +129 +129 +133 +134 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +173 +173 +172 +175 +175 +179 +178 +179 +182 +182 +185 +185 +184 +189 +188 +190 +190 +190 +194 +195 +196 +196 +196 +199 +199 +200 +201 +201 +201 +200 +202 +202 +204 +204 +205 +204 +204 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +203 +200 +200 +201 +200 +201 +200 +200 +198 +198 +198 +197 +196 +194 +194 +191 +190 +191 +188 +188 +185 +184 +185 +182 +183 +183 +183 +182 +178 +178 +175 +175 +175 +173 +172 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +125 +119 +120 +115 +115 +110 +110 +110 +106 +106 +99 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +69 +69 +64 +64 +59 +59 +58 +54 +55 +51 +50 +51 +47 +46 +47 +47 +46 +43 +43 +40 +41 +41 +37 +37 +33 +33 +32 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +13 +14 +14 +14 +13 +13 +13 +14 +13 +14 +13 +14 +13 +13 +14 +14 +14 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +30 +33 +33 +33 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +50 +50 +54 +54 +59 +58 +58 +64 +64 +68 +68 +68 +73 +72 +76 +76 +76 +82 +82 +86 +87 +91 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +115 +119 +120 +120 +125 +125 +129 +130 +130 +133 +134 +139 +139 +144 +143 +143 +147 +147 +151 +151 +151 +157 +157 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +183 +182 +182 +185 +185 +188 +189 +189 +191 +190 +195 +195 +195 +196 +197 +198 +198 +198 +200 +201 +200 +200 +201 +202 +203 +205 +204 +205 +204 +205 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +205 +204 +204 +202 +202 +200 +200 +200 +200 +200 +199 +198 +198 +196 +197 +195 +194 +195 +190 +191 +189 +188 +189 +185 +185 +183 +183 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +134 +133 +133 +129 +129 +125 +125 +125 +119 +119 +115 +116 +116 +110 +110 +106 +106 +106 +100 +100 +95 +96 +96 +91 +90 +86 +86 +83 +82 +82 +76 +76 +76 +76 +76 +72 +72 +68 +69 +68 +64 +64 +58 +58 +59 +55 +55 +51 +51 +51 +47 +47 +43 +42 +42 +41 +41 +37 +37 +33 +33 +33 +31 +31 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +20 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +14 +13 +14 +14 +14 +14 +13 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +40 +41 +43 +43 +46 +46 +47 +50 +51 +54 +55 +55 +59 +58 +64 +64 +69 +69 +69 +72 +72 +76 +77 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +116 +120 +119 +119 +125 +125 +129 +130 +129 +133 +133 +139 +140 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +158 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +178 +179 +179 +182 +183 +184 +184 +185 +188 +189 +190 +191 +192 +194 +195 +197 +196 +198 +198 +199 +200 +199 +200 +200 +200 +202 +202 +203 +203 +203 +205 +204 +204 +204 +205 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +207 +206 +205 +204 +204 +204 +205 +203 +202 +202 +201 +200 +200 +201 +201 +198 +199 +197 +197 +195 +195 +195 +191 +190 +189 +188 +189 +185 +184 +182 +183 +182 +179 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +152 +151 +147 +147 +147 +143 +143 +139 +139 +139 +134 +133 +129 +130 +129 +125 +125 +120 +120 +120 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +73 +72 +68 +68 +69 +64 +64 +59 +58 +54 +54 +55 +51 +50 +47 +47 +47 +43 +43 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +29 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +16 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +14 +14 +14 +13 +13 +14 +13 +14 +13 +13 +15 +15 +16 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +46 +47 +50 +51 +51 +54 +55 +59 +59 +58 +64 +64 +69 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +87 +90 +90 +95 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +116 +119 +120 +119 +125 +125 +129 +129 +130 +133 +133 +139 +139 +140 +143 +143 +147 +147 +152 +151 +151 +157 +157 +161 +161 +161 +165 +165 +165 +165 +165 +169 +169 +172 +173 +173 +175 +175 +179 +179 +179 +183 +183 +184 +185 +189 +189 +188 +191 +191 +194 +194 +194 +196 +196 +196 +196 +196 +198 +198 +201 +200 +201 +201 +200 +203 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +205 +204 +205 +202 +203 +200 +200 +201 +200 +201 +198 +198 +199 +196 +197 +195 +195 +194 +190 +190 +189 +188 +188 +185 +185 +182 +183 +182 +178 +179 +175 +174 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +140 +133 +134 +129 +129 +126 +125 +125 +119 +119 +116 +116 +115 +110 +110 +106 +106 +105 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +77 +73 +72 +72 +68 +68 +68 +69 +68 +64 +64 +58 +59 +58 +54 +54 +50 +51 +51 +47 +47 +43 +42 +43 +41 +40 +37 +37 +32 +33 +32 +31 +30 +27 +27 +27 +25 +25 +25 +24 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +14 +14 +14 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +14 +14 +13 +14 +13 +13 +13 +13 +13 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +38 +37 +37 +41 +41 +43 +43 +43 +46 +47 +51 +51 +51 +54 +54 +58 +59 +59 +65 +64 +68 +69 +68 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +105 +110 +110 +110 +115 +115 +119 +119 +120 +126 +125 +129 +130 +133 +134 +133 +139 +139 +143 +143 +143 +147 +147 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +166 +169 +169 +173 +173 +174 +175 +174 +179 +178 +182 +183 +182 +184 +184 +185 +184 +185 +188 +188 +190 +191 +190 +194 +195 +196 +196 +198 +198 +199 +201 +200 +200 +200 +200 +202 +203 +204 +205 +204 +204 +204 +207 +207 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +204 +205 +204 +204 +204 +203 +202 +201 +201 +200 +200 +200 +198 +199 +198 +196 +197 +195 +194 +195 +190 +191 +189 +189 +185 +185 +184 +183 +183 +183 +182 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +148 +147 +147 +143 +143 +139 +139 +139 +133 +133 +133 +133 +133 +129 +129 +125 +125 +125 +119 +119 +116 +115 +116 +110 +110 +105 +106 +100 +100 +100 +96 +96 +90 +90 +90 +87 +86 +86 +86 +86 +82 +82 +76 +76 +76 +72 +73 +68 +68 +67 +64 +64 +58 +59 +55 +55 +55 +50 +50 +47 +47 +47 +43 +43 +43 +43 +43 +41 +41 +37 +37 +37 +32 +33 +31 +31 +31 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +13 +14 +14 +13 +14 +13 +13 +13 +14 +14 +13 +13 +14 +14 +14 +13 +14 +13 +13 +13 +14 +14 +14 +13 +13 +12 +15 +15 +17 +17 +20 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +55 +55 +55 +59 +59 +65 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +106 +106 +106 +109 +109 +116 +116 +116 +120 +120 +120 +120 +119 +126 +125 +129 +130 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +180 +183 +183 +185 +184 +188 +188 +188 +190 +191 +195 +194 +194 +196 +197 +199 +198 +199 +200 +201 +200 +201 +201 +203 +203 +204 +204 +204 +204 +205 +206 +207 +206 +206 +207 +206 +206 +206 +207 +206 +207 +206 +206 +207 +206 +204 +204 +204 +204 +204 +202 +203 +200 +200 +201 +200 +201 +199 +199 +196 +196 +196 +195 +195 +191 +191 +190 +189 +189 +185 +185 +184 +183 +183 +179 +179 +179 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +134 +129 +129 +125 +125 +119 +120 +119 +116 +115 +110 +110 +110 +106 +106 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +84 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +58 +58 +59 +59 +59 +54 +54 +51 +51 +51 +47 +47 +43 +43 +41 +41 +41 +37 +37 +34 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +18 +15 +15 +15 +15 +14 +13 +13 +12 +13 +13 +13 +14 +13 +14 +13 +13 +14 +14 +14 +14 +14 +14 +14 +13 +13 +14 +14 +13 +13 +13 +14 +14 +13 +14 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +42 +41 +41 +43 +43 +46 +47 +46 +51 +50 +51 +51 +50 +54 +54 +58 +59 +59 +65 +64 +69 +68 +68 +73 +72 +76 +76 +83 +82 +82 +86 +86 +90 +90 +90 +96 +96 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +118 +120 +119 +125 +125 +130 +129 +130 +133 +133 +139 +139 +139 +143 +143 +143 +143 +143 +147 +147 +151 +151 +152 +157 +157 +161 +161 +162 +165 +165 +169 +169 +172 +173 +173 +175 +175 +179 +179 +179 +182 +182 +185 +184 +184 +188 +188 +190 +191 +191 +195 +195 +196 +197 +198 +198 +198 +200 +200 +200 +200 +201 +203 +202 +204 +204 +204 +204 +204 +207 +207 +206 +207 +206 +206 +207 +206 +206 +207 +207 +206 +206 +206 +206 +204 +204 +204 +205 +204 +202 +202 +201 +200 +200 +200 +200 +198 +198 +198 +196 +197 +194 +194 +194 +191 +190 +188 +189 +185 +185 +185 +183 +183 +179 +179 +179 +175 +174 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +158 +151 +151 +147 +147 +144 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +126 +125 +119 +120 +116 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +90 +89 +90 +86 +86 +82 +82 +82 +76 +77 +76 +76 +76 +72 +72 +68 +69 +69 +64 +64 +58 +58 +55 +54 +54 +51 +50 +47 +47 +47 +43 +42 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +22 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +14 +13 +14 +14 +13 +14 +14 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +28 +27 +27 +31 +31 +33 +33 +33 +37 +37 +40 +41 +41 +43 +43 +47 +47 +47 +50 +51 +54 +54 +54 +58 +58 +64 +65 +69 +69 +68 +72 +72 +76 +76 +76 +82 +82 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +115 +116 +116 +120 +119 +125 +125 +125 +129 +130 +130 +129 +129 +133 +134 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +172 +173 +175 +175 +175 +179 +178 +183 +183 +183 +185 +185 +189 +188 +190 +191 +191 +194 +194 +196 +196 +197 +199 +199 +198 +198 +198 +200 +200 +200 +200 +200 +202 +203 +204 +205 +204 +204 +205 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +205 +204 +205 +205 +204 +202 +202 +200 +201 +201 +200 +201 +199 +198 +197 +197 +197 +194 +195 +190 +191 +190 +189 +189 +185 +185 +184 +182 +183 +179 +179 +179 +174 +175 +173 +173 +173 +169 +169 +165 +165 +160 +161 +161 +158 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +122 +119 +120 +116 +116 +109 +109 +110 +106 +106 +100 +100 +100 +96 +96 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +73 +72 +72 +68 +68 +65 +64 +64 +59 +58 +54 +55 +55 +50 +51 +47 +47 +47 +42 +43 +41 +41 +41 +37 +37 +33 +32 +30 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +14 +13 +12 +13 +14 +13 +14 +13 +14 +14 +13 +14 +14 +14 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +14 +13 +14 +14 +14 +13 +13 +15 +15 +18 +17 +17 +19 +19 +21 +21 +21 +25 +25 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +38 +41 +40 +43 +43 +47 +47 +46 +50 +51 +54 +55 +55 +59 +58 +58 +59 +58 +64 +65 +68 +68 +68 +72 +72 +76 +77 +79 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +105 +105 +105 +106 +110 +110 +116 +115 +115 +119 +119 +126 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +164 +166 +169 +169 +173 +172 +174 +175 +175 +179 +179 +183 +182 +182 +184 +184 +188 +189 +188 +190 +190 +195 +195 +195 +196 +196 +198 +198 +199 +200 +200 +200 +200 +202 +203 +202 +204 +205 +204 +204 +205 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +207 +206 +204 +204 +204 +204 +205 +202 +202 +200 +200 +200 +200 +200 +199 +199 +198 +196 +197 +195 +195 +194 +190 +190 +188 +189 +189 +184 +184 +182 +182 +178 +178 +179 +175 +175 +172 +173 +173 +169 +169 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +152 +147 +147 +143 +143 +139 +140 +139 +133 +133 +129 +129 +129 +125 +125 +125 +125 +126 +120 +119 +116 +116 +115 +110 +110 +105 +106 +101 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +67 +68 +64 +64 +64 +59 +58 +55 +54 +51 +51 +51 +47 +46 +43 +43 +42 +41 +41 +37 +36 +36 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +20 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +14 +13 +13 +14 +13 +13 +13 +14 +14 +13 +13 +14 +13 +14 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +26 +27 +27 +31 +31 +33 +33 +33 +37 +37 +40 +41 +41 +43 +43 +47 +47 +46 +50 +50 +55 +54 +56 +58 +58 +64 +64 +68 +69 +68 +72 +72 +76 +76 +76 +82 +82 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +99 +100 +105 +106 +106 +110 +110 +115 +115 +115 +120 +119 +125 +125 +125 +129 +129 +133 +134 +133 +140 +140 +143 +143 +144 +147 +147 +151 +151 +156 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +172 +172 +175 +174 +179 +179 +179 +182 +183 +185 +184 +184 +189 +188 +190 +190 +195 +194 +194 +197 +196 +198 +198 +199 +200 +200 +200 +201 +201 +202 +202 +204 +204 +204 +205 +204 +206 +206 +206 +206 +207 +207 +206 +207 +207 +206 +206 +206 +207 +206 +207 +204 +204 +204 +204 +204 +202 +202 +201 +201 +200 +200 +200 +198 +198 +200 +197 +196 +195 +194 +191 +190 +191 +189 +188 +184 +185 +185 +183 +183 +179 +178 +179 +175 +175 +173 +173 +173 +168 +169 +165 +164 +165 +161 +161 +157 +157 +153 +151 +151 +147 +147 +143 +144 +143 +139 +139 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +120 +120 +117 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +72 +72 +68 +68 +64 +65 +65 +59 +58 +54 +54 +54 +50 +50 +47 +47 +46 +42 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +26 +26 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +13 +14 +13 +13 +14 +13 +14 +14 +13 +14 +13 +13 +14 +13 +14 +13 +14 +14 +14 +13 +13 +13 +13 +14 +13 +12 +15 +15 +16 +17 +17 +19 +19 +20 +21 +21 +25 +25 +27 +27 +27 +31 +31 +30 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +44 +47 +47 +50 +50 +55 +54 +54 +58 +58 +65 +64 +64 +68 +68 +68 +69 +68 +72 +72 +76 +76 +76 +82 +82 +86 +87 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +109 +115 +115 +119 +119 +119 +126 +125 +129 +129 +130 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +160 +161 +161 +165 +165 +169 +169 +169 +173 +173 +174 +175 +174 +179 +179 +183 +182 +185 +185 +185 +189 +189 +190 +190 +191 +194 +194 +197 +196 +197 +198 +199 +200 +201 +201 +201 +200 +202 +203 +203 +204 +204 +204 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +205 +205 +202 +202 +203 +201 +201 +200 +200 +198 +198 +198 +196 +197 +195 +194 +194 +191 +190 +189 +189 +188 +184 +185 +183 +183 +183 +179 +178 +175 +175 +175 +173 +172 +169 +169 +164 +165 +164 +161 +161 +157 +157 +157 +151 +151 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +132 +129 +130 +126 +126 +120 +119 +119 +116 +116 +109 +110 +109 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +80 +76 +76 +72 +72 +68 +68 +68 +64 +64 +59 +58 +59 +54 +54 +50 +50 +51 +46 +47 +42 +43 +43 +41 +41 +37 +37 +33 +33 +32 +31 +30 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +16 +13 +13 +12 +13 +14 +14 +13 +13 +14 +14 +14 +13 +13 +14 +13 +14 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +14 +14 +13 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +20 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +34 +37 +36 +41 +41 +43 +43 +43 +47 +47 +51 +51 +51 +54 +55 +54 +55 +54 +58 +59 +65 +64 +65 +68 +68 +72 +72 +74 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +116 +119 +120 +125 +125 +129 +129 +129 +134 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +175 +175 +174 +179 +178 +182 +183 +182 +185 +185 +188 +189 +188 +190 +190 +195 +195 +195 +196 +197 +198 +198 +198 +200 +200 +200 +200 +203 +202 +203 +204 +204 +204 +204 +204 +206 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +204 +204 +204 +204 +203 +203 +202 +200 +200 +200 +200 +200 +198 +198 +198 +198 +198 +196 +196 +194 +195 +194 +190 +190 +189 +189 +187 +184 +185 +183 +183 +179 +179 +179 +175 +175 +173 +173 +172 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +145 +143 +143 +139 +139 +133 +133 +133 +129 +129 +126 +125 +125 +119 +120 +116 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +65 +58 +58 +55 +54 +55 +51 +50 +47 +47 +44 +43 +42 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +24 +25 +25 +21 +21 +19 +19 +19 +17 +16 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +14 +14 +13 +14 +13 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +14 +13 +14 +13 +13 +13 +14 +13 +13 +13 +15 +15 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +26 +27 +27 +31 +31 +32 +33 +33 +37 +37 +41 +41 +41 +43 +43 +43 +43 +43 +47 +47 +50 +50 +51 +54 +54 +58 +59 +64 +65 +64 +69 +69 +72 +72 +72 +77 +76 +82 +82 +82 +86 +86 +90 +90 +89 +96 +96 +100 +100 +100 +106 +106 +110 +110 +112 +116 +116 +119 +120 +125 +126 +125 +129 +129 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +164 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +182 +182 +185 +185 +184 +189 +189 +190 +190 +190 +195 +194 +196 +197 +199 +199 +198 +200 +200 +200 +200 +200 +202 +202 +204 +204 +204 +204 +205 +207 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +203 +203 +202 +202 +201 +201 +200 +201 +201 +198 +198 +197 +197 +195 +194 +195 +191 +190 +188 +189 +189 +185 +185 +183 +183 +183 +179 +179 +178 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +126 +126 +126 +120 +119 +115 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +77 +76 +72 +72 +72 +72 +72 +68 +69 +64 +64 +64 +58 +58 +55 +54 +55 +50 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +26 +25 +25 +21 +22 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +13 +13 +14 +14 +14 +14 +13 +13 +13 +13 +13 +14 +14 +13 +14 +13 +14 +13 +13 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +42 +43 +43 +47 +47 +51 +51 +50 +54 +54 +58 +58 +59 +65 +65 +68 +68 +68 +72 +72 +76 +77 +76 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +115 +119 +120 +119 +125 +125 +129 +130 +129 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +152 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +185 +185 +185 +188 +188 +191 +191 +190 +194 +194 +197 +196 +197 +198 +199 +200 +200 +201 +201 +201 +202 +203 +203 +204 +205 +204 +205 +206 +207 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +204 +204 +204 +205 +204 +203 +203 +203 +201 +200 +200 +200 +198 +198 +198 +197 +196 +195 +194 +195 +191 +191 +190 +191 +190 +189 +188 +184 +185 +184 +183 +183 +179 +178 +177 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +144 +143 +139 +139 +133 +133 +129 +129 +129 +126 +125 +119 +120 +119 +115 +116 +109 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +83 +82 +76 +76 +76 +73 +72 +68 +68 +68 +64 +64 +58 +59 +59 +55 +54 +51 +51 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +34 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +14 +14 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +14 +14 +14 +14 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +21 +21 +21 +25 +25 +27 +27 +28 +31 +31 +33 +33 +36 +37 +37 +40 +41 +42 +43 +43 +47 +47 +50 +50 +50 +54 +55 +58 +58 +58 +64 +64 +68 +68 +69 +73 +72 +77 +76 +81 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +99 +99 +105 +106 +109 +109 +110 +115 +116 +119 +119 +120 +126 +126 +129 +129 +133 +134 +133 +139 +140 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +164 +165 +169 +169 +170 +173 +173 +175 +175 +179 +179 +179 +183 +183 +185 +184 +184 +188 +188 +191 +190 +191 +194 +194 +197 +196 +197 +198 +199 +200 +200 +201 +200 +201 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +207 +206 +207 +205 +205 +205 +204 +204 +202 +202 +202 +200 +201 +200 +201 +201 +198 +199 +199 +198 +199 +197 +196 +194 +195 +195 +191 +191 +188 +188 +185 +185 +185 +182 +183 +179 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +134 +133 +129 +129 +125 +125 +125 +120 +119 +116 +116 +115 +109 +110 +106 +106 +105 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +76 +76 +76 +73 +73 +68 +68 +68 +64 +64 +58 +58 +58 +54 +55 +51 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +16 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +14 +14 +14 +13 +13 +14 +14 +13 +13 +13 +13 +13 +13 +14 +13 +14 +14 +14 +14 +13 +14 +14 +13 +14 +13 +13 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +28 +27 +31 +32 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +50 +50 +54 +54 +58 +58 +58 +64 +65 +69 +68 +68 +72 +73 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +105 +110 +110 +109 +116 +116 +120 +119 +119 +125 +126 +126 +125 +126 +129 +130 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +158 +157 +156 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +182 +182 +184 +185 +185 +189 +188 +190 +191 +195 +194 +194 +196 +196 +198 +198 +199 +200 +200 +200 +200 +200 +200 +201 +202 +203 +203 +204 +205 +204 +204 +205 +206 +207 +207 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +207 +206 +206 +206 +204 +205 +204 +204 +204 +202 +202 +200 +201 +200 +201 +200 +198 +198 +196 +196 +197 +195 +195 +190 +190 +190 +189 +189 +185 +184 +185 +183 +183 +179 +178 +179 +175 +175 +173 +172 +170 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +120 +120 +120 +116 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +83 +82 +82 +76 +76 +72 +72 +69 +68 +68 +64 +64 +59 +58 +58 +54 +54 +50 +50 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +14 +13 +13 +14 +13 +13 +13 +13 +14 +13 +13 +14 +14 +13 +14 +13 +13 +14 +13 +13 +13 +13 +14 +13 +14 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +42 +43 +42 +47 +47 +50 +50 +50 +54 +54 +55 +55 +54 +59 +59 +64 +65 +64 +68 +68 +73 +72 +72 +76 +76 +82 +82 +87 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +105 +106 +110 +110 +116 +116 +115 +119 +119 +125 +125 +126 +129 +129 +133 +133 +140 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +182 +183 +183 +184 +185 +188 +189 +189 +190 +191 +194 +195 +194 +197 +197 +198 +198 +198 +200 +200 +201 +200 +201 +202 +203 +204 +204 +205 +204 +205 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +207 +206 +207 +206 +206 +207 +204 +205 +204 +204 +205 +202 +202 +200 +201 +201 +200 +200 +198 +198 +199 +196 +196 +195 +195 +195 +191 +191 +189 +188 +189 +185 +184 +183 +183 +181 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +140 +134 +133 +133 +129 +129 +125 +126 +125 +120 +120 +115 +116 +115 +109 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +83 +82 +82 +76 +77 +72 +72 +72 +69 +68 +65 +64 +64 +59 +58 +55 +55 +55 +51 +51 +46 +46 +47 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +27 +27 +27 +25 +26 +21 +21 +21 +19 +19 +17 +17 +18 +15 +14 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +14 +14 +13 +14 +14 +13 +13 +13 +13 +14 +14 +13 +14 +13 +14 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +46 +47 +51 +50 +51 +54 +54 +59 +58 +59 +64 +64 +68 +69 +73 +73 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +116 +119 +119 +126 +125 +125 +129 +130 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +162 +165 +165 +169 +169 +173 +173 +173 +174 +175 +178 +179 +179 +182 +183 +182 +182 +183 +185 +184 +189 +188 +189 +191 +191 +194 +195 +195 +197 +197 +198 +198 +200 +201 +200 +200 +200 +203 +203 +202 +204 +204 +205 +204 +204 +204 +204 +206 +206 +207 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +207 +205 +204 +204 +204 +204 +203 +202 +200 +200 +201 +200 +201 +198 +199 +199 +196 +197 +194 +195 +191 +191 +190 +189 +188 +184 +185 +185 +183 +182 +178 +179 +178 +175 +175 +172 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +144 +143 +139 +139 +133 +134 +133 +129 +129 +125 +126 +125 +120 +120 +115 +115 +116 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +86 +86 +86 +82 +82 +76 +76 +76 +73 +72 +68 +69 +69 +64 +64 +59 +58 +55 +54 +54 +50 +51 +47 +47 +47 +43 +43 +43 +43 +43 +41 +41 +36 +37 +37 +33 +33 +31 +31 +29 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +13 +14 +14 +14 +14 +13 +13 +13 +14 +13 +14 +14 +13 +14 +13 +12 +15 +15 +18 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +46 +46 +51 +51 +51 +54 +55 +59 +58 +58 +64 +64 +68 +69 +69 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +109 +116 +116 +120 +119 +119 +126 +125 +129 +129 +129 +133 +133 +140 +139 +140 +143 +143 +147 +147 +151 +151 +151 +156 +157 +161 +161 +161 +165 +165 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +179 +183 +183 +185 +185 +188 +189 +188 +191 +191 +195 +194 +194 +197 +197 +196 +196 +197 +199 +198 +200 +200 +201 +201 +200 +203 +202 +204 +204 +205 +204 +205 +206 +206 +206 +206 +207 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +204 +204 +205 +204 +204 +202 +202 +201 +200 +201 +200 +200 +198 +198 +199 +197 +197 +197 +196 +197 +194 +195 +191 +190 +191 +188 +189 +184 +184 +184 +183 +183 +179 +179 +175 +175 +175 +173 +172 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +130 +129 +129 +125 +126 +120 +120 +119 +116 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +68 +68 +64 +64 +65 +64 +65 +59 +58 +54 +54 +55 +51 +50 +47 +46 +47 +43 +42 +40 +41 +38 +37 +37 +33 +33 +31 +31 +31 +27 +27 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +16 +15 +14 +16 +15 +13 +13 +13 +12 +13 +14 +14 +14 +13 +13 +13 +13 +14 +14 +13 +14 +13 +14 +13 +13 +14 +13 +13 +14 +13 +13 +14 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +37 +40 +41 +41 +43 +43 +47 +46 +47 +51 +51 +54 +55 +54 +58 +58 +64 +64 +65 +68 +68 +72 +72 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +95 +96 +96 +100 +100 +106 +106 +106 +109 +110 +116 +115 +116 +119 +120 +125 +126 +129 +129 +129 +134 +133 +139 +140 +139 +143 +143 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +162 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +182 +183 +182 +182 +182 +185 +184 +188 +189 +188 +190 +190 +194 +194 +196 +197 +197 +198 +198 +200 +201 +200 +200 +200 +202 +202 +203 +204 +204 +204 +204 +204 +206 +207 +206 +207 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +204 +204 +204 +205 +205 +202 +202 +202 +200 +201 +200 +201 +200 +199 +198 +196 +196 +196 +194 +195 +190 +191 +189 +189 +189 +184 +184 +183 +182 +183 +178 +179 +175 +175 +174 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +148 +147 +147 +144 +143 +139 +139 +139 +134 +133 +130 +129 +129 +126 +126 +119 +119 +120 +116 +116 +109 +110 +111 +106 +106 +100 +100 +95 +96 +96 +90 +90 +86 +86 +86 +82 +82 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +65 +64 +62 +58 +58 +55 +55 +50 +50 +51 +47 +47 +43 +43 +43 +41 +41 +40 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +16 +13 +13 +13 +12 +13 +14 +14 +14 +13 +13 +13 +14 +14 +13 +14 +14 +13 +13 +14 +13 +14 +14 +14 +13 +13 +13 +14 +14 +14 +13 +13 +12 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +50 +50 +54 +54 +59 +58 +59 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +97 +100 +100 +106 +106 +110 +109 +110 +115 +115 +121 +119 +119 +125 +125 +125 +125 +125 +129 +129 +134 +133 +133 +139 +139 +143 +143 +145 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +169 +169 +169 +173 +172 +175 +175 +175 +179 +179 +183 +182 +184 +185 +185 +188 +188 +191 +190 +191 +194 +194 +196 +196 +196 +199 +198 +200 +200 +200 +200 +201 +202 +203 +203 +205 +204 +205 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +202 +200 +200 +200 +201 +199 +198 +198 +196 +197 +194 +195 +195 +190 +191 +188 +188 +188 +184 +184 +183 +183 +183 +178 +179 +175 +174 +175 +173 +172 +169 +169 +165 +164 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +130 +125 +125 +119 +119 +116 +115 +116 +109 +110 +106 +106 +106 +100 +100 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +83 +76 +76 +72 +72 +68 +68 +68 +64 +64 +59 +58 +58 +54 +54 +54 +54 +54 +51 +50 +47 +47 +47 +43 +42 +41 +40 +42 +37 +36 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +14 +14 +14 +14 +14 +13 +13 +14 +14 +14 +14 +13 +14 +13 +13 +13 +13 +14 +13 +12 +15 +14 +17 +17 +17 +19 +19 +22 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +51 +55 +55 +58 +59 +59 +64 +64 +68 +69 +69 +72 +72 +76 +76 +77 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +116 +119 +119 +119 +126 +126 +130 +129 +131 +133 +133 +139 +139 +144 +143 +143 +147 +147 +151 +151 +151 +157 +157 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +182 +183 +183 +184 +185 +189 +189 +189 +190 +191 +195 +194 +194 +196 +196 +198 +198 +199 +200 +200 +201 +200 +202 +203 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +207 +206 +204 +204 +204 +204 +203 +202 +202 +201 +200 +200 +200 +200 +198 +198 +197 +196 +196 +194 +194 +190 +190 +190 +188 +189 +185 +184 +185 +183 +183 +179 +178 +175 +175 +175 +173 +173 +168 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +130 +129 +129 +125 +126 +119 +119 +120 +116 +115 +116 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +93 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +69 +68 +69 +68 +69 +64 +64 +58 +58 +59 +55 +54 +51 +51 +47 +47 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +13 +13 +13 +13 +13 +13 +14 +14 +14 +14 +14 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +36 +37 +41 +41 +41 +43 +43 +47 +46 +47 +50 +51 +54 +54 +55 +58 +58 +64 +64 +65 +68 +68 +72 +72 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +115 +118 +120 +120 +126 +126 +130 +129 +129 +133 +133 +139 +139 +139 +143 +143 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +163 +165 +165 +169 +169 +173 +173 +173 +174 +174 +179 +178 +178 +182 +182 +185 +184 +185 +189 +189 +190 +190 +191 +195 +195 +197 +196 +197 +198 +199 +200 +200 +201 +200 +200 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +204 +204 +204 +204 +204 +202 +202 +200 +200 +200 +200 +200 +198 +198 +198 +196 +197 +194 +194 +195 +190 +190 +188 +188 +185 +185 +184 +182 +183 +178 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +125 +119 +119 +115 +115 +115 +110 +110 +106 +105 +106 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +76 +76 +77 +72 +72 +68 +68 +69 +64 +64 +59 +59 +55 +54 +54 +50 +51 +47 +47 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +14 +13 +13 +14 +13 +14 +13 +14 +13 +13 +14 +13 +13 +13 +14 +14 +14 +14 +14 +13 +14 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +28 +27 +27 +31 +31 +33 +33 +33 +37 +37 +40 +41 +41 +43 +43 +47 +47 +47 +50 +51 +55 +54 +55 +59 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +82 +82 +82 +86 +86 +90 +90 +90 +96 +95 +100 +100 +102 +106 +106 +110 +110 +115 +116 +116 +119 +119 +125 +126 +125 +129 +129 +129 +129 +130 +133 +133 +139 +139 +140 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +164 +169 +169 +169 +173 +173 +175 +175 +175 +178 +179 +182 +183 +183 +185 +185 +189 +188 +191 +190 +191 +194 +195 +196 +196 +196 +198 +198 +200 +200 +201 +200 +200 +202 +202 +202 +204 +205 +205 +204 +205 +206 +207 +206 +206 +206 +206 +207 +205 +206 +206 +206 +207 +206 +206 +204 +204 +204 +204 +204 +202 +202 +202 +201 +200 +200 +200 +201 +199 +198 +196 +196 +195 +194 +194 +190 +190 +188 +188 +189 +184 +184 +183 +183 +182 +179 +179 +175 +175 +175 +172 +172 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +123 +119 +120 +115 +116 +110 +110 +109 +106 +106 +100 +99 +100 +96 +96 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +74 +72 +72 +68 +68 +64 +64 +64 +58 +58 +55 +54 +54 +51 +51 +47 +47 +47 +43 +42 +41 +41 +41 +37 +36 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +14 +13 +13 +14 +13 +13 +13 +14 +13 +14 +13 +14 +13 +14 +14 +14 +13 +14 +13 +14 +13 +13 +14 +13 +12 +15 +15 +18 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +50 +51 +50 +54 +54 +59 +59 +58 +65 +64 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +83 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +110 +110 +110 +116 +115 +119 +119 +120 +126 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +162 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +179 +179 +179 +182 +183 +185 +184 +185 +188 +189 +191 +191 +191 +194 +194 +197 +197 +197 +198 +198 +200 +200 +200 +201 +201 +202 +203 +205 +204 +204 +204 +204 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +205 +204 +204 +202 +202 +201 +200 +201 +200 +200 +199 +198 +198 +196 +196 +194 +194 +194 +191 +190 +189 +189 +188 +184 +185 +183 +183 +183 +179 +179 +175 +175 +174 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +148 +143 +143 +139 +140 +141 +133 +133 +129 +129 +125 +126 +125 +120 +120 +115 +116 +116 +110 +110 +110 +109 +109 +106 +106 +100 +100 +100 +96 +96 +90 +90 +91 +86 +86 +82 +82 +76 +76 +76 +72 +71 +68 +68 +68 +64 +64 +58 +59 +58 +55 +54 +51 +51 +51 +47 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +13 +13 +14 +13 +13 +14 +14 +13 +13 +13 +14 +14 +14 +14 +14 +14 +13 +14 +13 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +32 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +46 +47 +51 +51 +51 +51 +51 +55 +54 +58 +59 +58 +64 +64 +68 +68 +70 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +116 +117 +120 +120 +126 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +182 +185 +184 +189 +188 +188 +190 +190 +194 +194 +194 +196 +197 +198 +198 +201 +200 +200 +200 +200 +202 +202 +202 +204 +204 +204 +204 +204 +206 +207 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +207 +205 +204 +205 +204 +204 +202 +202 +202 +200 +200 +200 +201 +200 +198 +199 +196 +196 +197 +195 +195 +191 +191 +191 +188 +189 +184 +185 +183 +183 +182 +178 +179 +175 +175 +175 +173 +173 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +154 +151 +151 +147 +147 +144 +143 +143 +139 +139 +133 +133 +133 +130 +130 +129 +130 +129 +125 +125 +120 +119 +120 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +95 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +72 +72 +68 +67 +69 +65 +64 +58 +58 +55 +54 +55 +50 +51 +46 +46 +47 +43 +42 +41 +41 +40 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +14 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +46 +47 +47 +50 +50 +55 +54 +56 +58 +58 +65 +65 +68 +69 +68 +72 +72 +76 +76 +76 +82 +82 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +102 +106 +105 +110 +110 +115 +115 +115 +119 +119 +126 +125 +125 +130 +129 +133 +134 +133 +139 +140 +143 +143 +143 +147 +147 +151 +151 +156 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +182 +183 +185 +185 +185 +189 +189 +190 +190 +195 +194 +195 +196 +196 +198 +198 +198 +200 +200 +200 +200 +200 +202 +202 +205 +205 +204 +204 +205 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +200 +200 +200 +200 +201 +198 +198 +199 +196 +196 +194 +195 +190 +191 +191 +188 +188 +185 +185 +185 +183 +183 +182 +182 +182 +179 +179 +175 +175 +175 +173 +173 +169 +169 +167 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +143 +143 +143 +139 +139 +133 +133 +134 +130 +129 +125 +125 +123 +120 +120 +116 +115 +109 +109 +109 +106 +106 +100 +100 +100 +96 +96 +90 +89 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +59 +58 +54 +54 +50 +51 +51 +46 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +32 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +14 +14 +13 +14 +14 +13 +14 +13 +13 +14 +14 +14 +13 +13 +14 +13 +13 +13 +14 +13 +14 +14 +14 +13 +13 +14 +13 +12 +15 +15 +17 +17 +20 +19 +19 +21 +21 +25 +25 +25 +27 +27 +27 +27 +27 +31 +31 +33 +33 +33 +36 +36 +41 +41 +41 +43 +43 +47 +47 +51 +51 +51 +55 +54 +59 +58 +58 +64 +65 +64 +64 +65 +68 +68 +72 +72 +72 +76 +76 +82 +82 +84 +86 +86 +90 +90 +96 +96 +96 +99 +100 +106 +106 +106 +110 +110 +115 +116 +115 +119 +119 +125 +125 +126 +129 +130 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +183 +182 +182 +184 +184 +189 +188 +188 +190 +191 +194 +195 +194 +196 +197 +198 +198 +198 +200 +201 +200 +200 +201 +202 +202 +204 +204 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +205 +202 +202 +200 +200 +200 +200 +201 +198 +199 +197 +196 +197 +194 +194 +194 +194 +194 +190 +191 +189 +189 +189 +184 +185 +182 +183 +181 +178 +178 +175 +174 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +140 +139 +139 +133 +133 +129 +129 +129 +125 +126 +120 +119 +119 +116 +116 +110 +109 +110 +106 +106 +99 +100 +100 +96 +96 +90 +90 +87 +86 +86 +82 +82 +76 +76 +76 +73 +72 +68 +68 +68 +64 +64 +59 +58 +59 +54 +55 +51 +51 +51 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +18 +15 +15 +15 +15 +14 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +14 +13 +13 +14 +13 +14 +13 +14 +13 +14 +13 +15 +13 +13 +14 +13 +14 +13 +14 +13 +13 +15 +15 +15 +17 +17 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +29 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +46 +47 +46 +46 +47 +51 +50 +54 +54 +54 +59 +58 +65 +64 +67 +68 +68 +72 +73 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +119 +119 +119 +125 +125 +129 +130 +129 +133 +133 +139 +140 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +169 +168 +169 +173 +173 +175 +174 +175 +178 +178 +183 +182 +183 +185 +185 +189 +188 +189 +190 +190 +195 +194 +194 +197 +196 +198 +198 +201 +200 +200 +200 +200 +202 +202 +203 +204 +205 +204 +204 +204 +206 +207 +206 +206 +207 +206 +206 +206 +206 +207 +206 +207 +206 +206 +204 +204 +204 +204 +204 +203 +202 +202 +200 +200 +200 +201 +200 +200 +200 +198 +198 +198 +196 +196 +194 +195 +192 +191 +191 +189 +189 +185 +185 +185 +182 +182 +179 +179 +179 +175 +175 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +159 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +126 +125 +120 +119 +120 +116 +116 +110 +110 +105 +106 +105 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +58 +55 +55 +54 +51 +51 +47 +47 +47 +42 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +28 +25 +25 +21 +21 +20 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +14 +13 +14 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +37 +37 +37 +41 +41 +43 +42 +43 +47 +46 +50 +51 +54 +54 +54 +58 +59 +64 +65 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +89 +90 +90 +96 +96 +100 +100 +105 +106 +106 +110 +109 +116 +116 +116 +119 +119 +125 +125 +125 +129 +129 +133 +133 +133 +140 +139 +143 +143 +143 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +174 +179 +179 +179 +183 +183 +184 +185 +185 +188 +189 +191 +190 +195 +194 +194 +196 +196 +198 +198 +198 +200 +201 +201 +200 +200 +203 +202 +204 +204 +205 +205 +204 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +204 +204 +204 +204 +204 +203 +202 +200 +200 +200 +200 +200 +199 +198 +196 +196 +196 +195 +195 +190 +190 +191 +188 +189 +188 +188 +188 +184 +185 +183 +182 +183 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +140 +134 +133 +130 +129 +126 +125 +125 +120 +119 +116 +115 +115 +110 +110 +106 +106 +106 +100 +100 +95 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +73 +72 +72 +68 +68 +64 +65 +64 +58 +58 +54 +54 +55 +50 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +36 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +14 +12 +13 +14 +13 +14 +14 +13 +13 +13 +14 +14 +13 +14 +13 +13 +14 +14 +13 +13 +13 +14 +14 +14 +13 +13 +13 +14 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +21 +21 +21 +25 +25 +27 +27 +28 +31 +31 +33 +33 +36 +37 +37 +41 +42 +43 +43 +43 +47 +47 +51 +51 +51 +55 +54 +59 +58 +59 +65 +64 +68 +68 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +116 +116 +119 +120 +125 +125 +130 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +164 +165 +169 +169 +173 +173 +174 +175 +175 +178 +179 +182 +183 +183 +185 +185 +188 +189 +188 +190 +191 +195 +195 +195 +197 +197 +198 +198 +198 +200 +200 +201 +201 +203 +202 +202 +204 +204 +204 +205 +204 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +207 +207 +207 +207 +204 +204 +204 +205 +204 +202 +202 +200 +200 +200 +200 +200 +200 +201 +200 +198 +198 +197 +196 +197 +195 +195 +190 +190 +189 +188 +189 +184 +185 +182 +183 +182 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +134 +134 +129 +130 +129 +125 +126 +119 +120 +120 +115 +115 +110 +109 +110 +106 +106 +100 +99 +95 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +65 +64 +58 +59 +59 +55 +54 +51 +50 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +13 +14 +13 +13 +14 +14 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +15 +15 +15 +15 +15 +17 +17 +17 +19 +19 +21 +21 +23 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +51 +51 +54 +55 +58 +58 +64 +64 +64 +69 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +116 +115 +115 +119 +119 +126 +125 +126 +129 +129 +134 +133 +133 +139 +139 +143 +144 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +165 +165 +164 +169 +169 +173 +173 +173 +174 +175 +179 +179 +178 +182 +183 +184 +185 +185 +188 +188 +191 +191 +192 +194 +194 +197 +196 +198 +198 +198 +201 +200 +200 +200 +200 +202 +202 +202 +202 +202 +205 +204 +205 +204 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +206 +206 +204 +204 +204 +204 +205 +204 +204 +204 +202 +202 +201 +201 +201 +201 +200 +199 +198 +197 +196 +196 +194 +195 +190 +190 +191 +188 +188 +185 +185 +184 +183 +183 +179 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +162 +161 +161 +157 +157 +150 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +134 +133 +129 +130 +125 +126 +126 +120 +119 +115 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +68 +68 +64 +64 +59 +59 +58 +55 +55 +51 +51 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +32 +27 +27 +25 +25 +22 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +14 +14 +14 +14 +14 +14 +13 +13 +14 +13 +13 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +40 +43 +43 +46 +47 +47 +50 +50 +54 +55 +54 +59 +59 +65 +64 +65 +68 +69 +72 +72 +72 +77 +76 +82 +82 +82 +86 +86 +90 +90 +96 +96 +95 +100 +100 +106 +106 +106 +109 +110 +116 +116 +115 +119 +119 +126 +126 +125 +129 +129 +133 +133 +134 +139 +140 +143 +143 +148 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +179 +182 +183 +185 +185 +188 +188 +189 +191 +190 +195 +194 +195 +196 +196 +198 +198 +199 +200 +201 +200 +200 +200 +203 +202 +204 +205 +204 +204 +205 +207 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +207 +204 +204 +204 +204 +203 +203 +203 +200 +200 +200 +200 +200 +198 +198 +197 +196 +196 +194 +195 +191 +190 +190 +189 +189 +184 +184 +185 +182 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +144 +139 +139 +133 +133 +130 +129 +130 +125 +125 +120 +119 +120 +115 +115 +110 +110 +110 +106 +106 +100 +100 +101 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +77 +72 +72 +68 +68 +68 +64 +64 +58 +59 +58 +55 +55 +50 +50 +51 +47 +46 +42 +43 +43 +40 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +25 +25 +25 +22 +21 +19 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +13 +13 +14 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +14 +13 +13 +13 +14 +14 +13 +13 +14 +13 +14 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +46 +47 +47 +51 +51 +55 +55 +54 +58 +58 +64 +64 +64 +69 +68 +72 +72 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +105 +109 +110 +115 +115 +116 +120 +119 +126 +125 +130 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +175 +175 +175 +178 +179 +183 +183 +183 +184 +185 +185 +184 +185 +189 +188 +190 +191 +191 +194 +194 +196 +197 +197 +199 +198 +200 +200 +200 +200 +201 +202 +202 +204 +204 +204 +204 +204 +204 +204 +204 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +206 +207 +206 +206 +204 +204 +204 +204 +205 +203 +202 +202 +200 +200 +201 +200 +200 +198 +199 +197 +197 +197 +195 +195 +191 +190 +188 +188 +189 +185 +185 +182 +183 +183 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +160 +161 +161 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +126 +125 +120 +119 +120 +115 +116 +110 +110 +110 +106 +106 +100 +100 +97 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +69 +68 +64 +64 +58 +58 +58 +55 +55 +51 +50 +48 +47 +47 +43 +43 +41 +41 +41 +37 +37 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +26 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +12 +14 +13 +13 +14 +14 +14 +13 +13 +14 +13 +13 +14 +14 +14 +13 +14 +14 +14 +13 +13 +14 +13 +13 +13 +13 +14 +14 +13 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +46 +51 +50 +55 +54 +54 +59 +58 +64 +64 +65 +68 +68 +72 +72 +72 +76 +77 +82 +82 +82 +86 +86 +90 +90 +91 +96 +96 +100 +100 +106 +106 +106 +110 +109 +115 +115 +116 +119 +120 +125 +125 +125 +129 +129 +133 +133 +134 +139 +139 +143 +143 +144 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +169 +169 +169 +173 +173 +175 +175 +175 +178 +178 +183 +183 +183 +185 +184 +188 +189 +190 +190 +191 +194 +194 +197 +197 +196 +198 +198 +198 +199 +199 +200 +200 +201 +201 +201 +202 +202 +204 +204 +204 +205 +205 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +204 +204 +204 +204 +205 +203 +202 +200 +200 +200 +200 +200 +199 +198 +196 +196 +196 +194 +195 +191 +190 +190 +188 +188 +185 +185 +185 +183 +183 +178 +179 +179 +175 +174 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +134 +129 +129 +125 +125 +120 +119 +119 +116 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +83 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +58 +58 +55 +54 +55 +54 +54 +51 +51 +46 +47 +47 +43 +43 +41 +41 +39 +37 +36 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +21 +21 +21 +19 +19 +17 +17 +18 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +13 +14 +14 +13 +13 +14 +14 +13 +14 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +14 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +30 +31 +33 +33 +37 +37 +40 +41 +41 +43 +43 +47 +48 +47 +51 +50 +55 +55 +55 +58 +58 +64 +64 +65 +68 +68 +72 +71 +73 +76 +76 +82 +82 +87 +86 +86 +90 +90 +96 +96 +96 +100 +100 +100 +100 +100 +105 +105 +110 +110 +110 +116 +115 +119 +120 +120 +125 +125 +129 +130 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +166 +168 +169 +173 +173 +175 +175 +175 +178 +179 +182 +183 +183 +185 +185 +185 +185 +185 +189 +188 +190 +190 +191 +195 +195 +196 +196 +197 +198 +199 +200 +200 +200 +200 +201 +203 +203 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +204 +204 +204 +204 +205 +202 +202 +200 +200 +200 +200 +200 +198 +198 +198 +197 +196 +194 +195 +194 +191 +191 +188 +188 +185 +185 +184 +183 +183 +179 +178 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +144 +143 +143 +139 +139 +133 +134 +133 +129 +129 +125 +125 +125 +120 +119 +115 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +76 +76 +76 +72 +72 +68 +68 +68 +65 +64 +59 +58 +56 +54 +54 +51 +51 +47 +47 +46 +43 +43 +41 +41 +40 +37 +37 +37 +37 +37 +33 +33 +31 +31 +31 +27 +28 +25 +25 +22 +21 +21 +19 +19 +17 +17 +17 +15 +15 +16 +15 +15 +13 +13 +12 +13 +13 +14 +14 +14 +13 +14 +13 +13 +13 +14 +13 +14 +14 +13 +13 +14 +13 +13 +14 +13 +14 +13 +13 +13 +14 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +36 +37 +41 +41 +43 +43 +43 +46 +47 +51 +51 +51 +54 +55 +58 +58 +65 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +101 +106 +106 +110 +109 +116 +116 +116 +119 +119 +125 +125 +125 +129 +129 +130 +130 +129 +133 +134 +139 +139 +140 +143 +143 +147 +147 +149 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +173 +173 +173 +175 +175 +179 +178 +179 +182 +182 +185 +185 +188 +189 +189 +191 +190 +194 +194 +194 +196 +196 +198 +198 +198 +200 +200 +200 +200 +200 +202 +202 +204 +204 +205 +205 +205 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +205 +204 +205 +204 +202 +202 +200 +200 +200 +200 +201 +198 +199 +197 +196 +197 +194 +195 +191 +191 +190 +188 +188 +185 +185 +184 +183 +183 +179 +179 +178 +175 +174 +173 +172 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +140 +139 +134 +133 +133 +129 +129 +125 +125 +126 +120 +120 +115 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +74 +68 +68 +65 +65 +59 +58 +58 +54 +55 +51 +50 +50 +47 +46 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +32 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +13 +14 +14 +13 +13 +14 +13 +14 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +12 +15 +15 +18 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +42 +47 +46 +51 +51 +50 +55 +55 +58 +58 +58 +65 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +109 +116 +116 +119 +119 +120 +126 +125 +129 +129 +129 +133 +133 +139 +140 +140 +143 +143 +147 +147 +152 +151 +151 +157 +157 +161 +161 +161 +165 +165 +165 +165 +165 +169 +169 +172 +172 +173 +175 +175 +179 +178 +181 +182 +183 +185 +185 +188 +188 +188 +190 +191 +194 +195 +195 +196 +196 +199 +198 +198 +200 +201 +200 +200 +201 +202 +202 +204 +204 +204 +205 +205 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +204 +205 +205 +204 +204 +202 +202 +200 +200 +201 +201 +200 +199 +199 +196 +196 +197 +194 +194 +195 +195 +195 +191 +191 +189 +188 +189 +185 +184 +183 +183 +183 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +141 +133 +133 +130 +129 +125 +125 +126 +119 +119 +116 +116 +116 +110 +110 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +88 +86 +86 +82 +82 +76 +76 +77 +72 +72 +69 +69 +69 +64 +64 +64 +64 +64 +59 +58 +55 +55 +55 +51 +51 +47 +47 +43 +43 +43 +41 +41 +36 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +20 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +13 +14 +13 +13 +14 +14 +13 +14 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +14 +14 +14 +14 +13 +12 +15 +15 +17 +17 +17 +19 +20 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +50 +51 +54 +54 +58 +59 +59 +64 +64 +68 +68 +68 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +110 +110 +115 +116 +119 +120 +120 +126 +126 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +168 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +183 +184 +185 +188 +189 +189 +191 +191 +194 +194 +195 +197 +197 +198 +198 +200 +201 +200 +200 +200 +203 +202 +203 +204 +204 +205 +204 +205 +206 +206 +207 +207 +206 +206 +206 +206 +206 +207 +207 +207 +206 +206 +205 +205 +205 +204 +204 +202 +202 +202 +201 +201 +200 +200 +201 +198 +198 +197 +196 +196 +195 +195 +191 +190 +191 +188 +189 +185 +185 +183 +182 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +152 +147 +147 +143 +143 +140 +139 +140 +134 +133 +130 +129 +129 +126 +125 +125 +126 +126 +120 +119 +115 +116 +116 +115 +115 +110 +109 +110 +106 +106 +100 +100 +95 +96 +96 +90 +90 +86 +86 +86 +82 +82 +82 +82 +82 +76 +76 +72 +73 +73 +69 +68 +64 +65 +59 +58 +58 +55 +54 +50 +51 +51 +46 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +13 +14 +14 +14 +13 +13 +14 +13 +14 +14 +14 +14 +14 +13 +13 +14 +14 +13 +14 +14 +14 +14 +14 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +26 +25 +25 +27 +27 +31 +31 +31 +33 +33 +33 +33 +33 +37 +37 +41 +40 +41 +43 +43 +46 +46 +47 +51 +50 +55 +55 +58 +59 +58 +65 +64 +68 +68 +68 +72 +72 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +92 +96 +96 +100 +100 +106 +105 +106 +110 +109 +115 +116 +116 +119 +120 +119 +120 +120 +126 +125 +129 +129 +130 +133 +133 +139 +139 +141 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +172 +173 +175 +175 +175 +179 +179 +183 +183 +184 +184 +184 +189 +189 +188 +189 +189 +190 +191 +191 +191 +191 +195 +195 +197 +196 +197 +199 +198 +200 +200 +200 +200 +201 +202 +202 +205 +204 +204 +205 +204 +206 +206 +207 +206 +206 +207 +206 +205 +207 +206 +207 +206 +206 +206 +206 +204 +204 +205 +204 +204 +202 +202 +201 +200 +200 +200 +200 +199 +199 +198 +196 +196 +195 +194 +194 +190 +191 +189 +188 +188 +184 +184 +183 +183 +182 +179 +178 +175 +174 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +140 +141 +133 +133 +129 +129 +125 +125 +125 +119 +119 +115 +116 +116 +109 +110 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +87 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +65 +65 +58 +58 +59 +54 +54 +51 +51 +50 +47 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +13 +14 +13 +14 +13 +14 +13 +14 +13 +14 +14 +13 +14 +13 +13 +14 +13 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +28 +31 +31 +33 +32 +37 +37 +37 +41 +40 +43 +43 +43 +47 +47 +47 +46 +47 +50 +51 +55 +55 +55 +59 +59 +64 +64 +66 +68 +68 +72 +72 +76 +76 +76 +82 +82 +82 +82 +82 +86 +86 +86 +86 +86 +90 +90 +95 +96 +96 +100 +100 +106 +106 +107 +110 +110 +116 +116 +119 +120 +119 +125 +125 +129 +129 +129 +134 +134 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +182 +182 +185 +185 +188 +189 +188 +191 +191 +195 +194 +197 +196 +197 +199 +199 +200 +200 +201 +200 +200 +202 +202 +202 +204 +204 +205 +204 +204 +206 +206 +206 +206 +207 +207 +206 +206 +206 +207 +206 +206 +206 +207 +204 +204 +204 +205 +204 +202 +203 +202 +201 +200 +200 +200 +201 +198 +198 +197 +196 +197 +195 +194 +190 +191 +188 +189 +189 +184 +185 +182 +183 +182 +179 +179 +175 +175 +175 +173 +173 +169 +168 +169 +165 +165 +161 +161 +159 +157 +157 +151 +151 +147 +147 +147 +143 +144 +139 +139 +139 +133 +133 +133 +133 +134 +129 +129 +125 +126 +125 +120 +120 +116 +116 +116 +109 +109 +106 +106 +99 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +68 +68 +64 +65 +61 +57 +58 +54 +54 +50 +50 +51 +47 +47 +42 +43 +43 +41 +41 +37 +37 +37 +33 +33 +30 +31 +31 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +14 +13 +13 +14 +14 +14 +14 +14 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +15 +15 +17 +17 +18 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +32 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +48 +51 +50 +55 +55 +58 +58 +58 +64 +64 +68 +68 +68 +72 +72 +72 +73 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +95 +96 +96 +100 +100 +105 +106 +106 +110 +110 +116 +115 +115 +120 +119 +125 +126 +126 +129 +129 +133 +134 +133 +139 +140 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +184 +185 +189 +189 +188 +191 +191 +194 +194 +194 +196 +196 +199 +199 +199 +201 +200 +201 +200 +200 +203 +202 +204 +204 +205 +204 +205 +207 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +205 +205 +205 +204 +204 +203 +203 +201 +200 +201 +200 +200 +198 +198 +196 +197 +197 +195 +194 +191 +190 +190 +188 +188 +189 +189 +188 +184 +185 +182 +183 +183 +178 +179 +175 +175 +176 +173 +173 +169 +168 +164 +165 +165 +161 +161 +157 +157 +157 +151 +151 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +134 +134 +130 +129 +130 +125 +125 +119 +119 +119 +115 +115 +110 +109 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +65 +65 +59 +59 +59 +55 +54 +51 +51 +51 +47 +46 +43 +43 +43 +41 +40 +37 +36 +33 +33 +32 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +16 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +14 +14 +13 +14 +14 +14 +14 +14 +13 +13 +14 +14 +13 +13 +14 +14 +14 +13 +13 +13 +14 +13 +13 +14 +13 +13 +15 +15 +17 +17 +19 +19 +19 +21 +21 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +32 +37 +37 +41 +41 +43 +43 +43 +46 +47 +51 +51 +50 +55 +54 +54 +55 +55 +58 +58 +65 +64 +65 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +105 +110 +110 +115 +116 +116 +119 +120 +126 +126 +129 +130 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +175 +175 +175 +178 +178 +182 +183 +183 +184 +185 +189 +188 +189 +190 +191 +194 +195 +194 +196 +196 +199 +199 +198 +201 +200 +201 +200 +203 +202 +202 +204 +204 +204 +204 +204 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +204 +204 +204 +204 +203 +203 +202 +201 +200 +200 +200 +201 +198 +198 +198 +198 +198 +196 +197 +194 +194 +194 +190 +190 +188 +188 +186 +185 +185 +183 +183 +178 +179 +178 +175 +175 +172 +173 +173 +169 +169 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +148 +147 +147 +143 +143 +139 +140 +139 +133 +133 +129 +130 +129 +125 +126 +120 +120 +119 +116 +116 +110 +110 +111 +106 +105 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +82 +82 +83 +76 +76 +73 +72 +72 +68 +68 +64 +64 +65 +58 +58 +54 +55 +51 +51 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +13 +13 +14 +13 +13 +13 +14 +13 +14 +13 +14 +14 +13 +13 +14 +13 +13 +14 +14 +14 +13 +14 +13 +13 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +36 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +51 +54 +54 +54 +58 +59 +64 +65 +64 +69 +68 +73 +72 +72 +76 +76 +82 +82 +82 +86 +86 +91 +90 +90 +96 +96 +100 +100 +106 +105 +106 +110 +110 +115 +115 +116 +119 +120 +125 +125 +126 +129 +130 +134 +133 +133 +140 +139 +143 +143 +144 +147 +147 +151 +151 +156 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +179 +183 +183 +185 +185 +184 +188 +189 +191 +190 +195 +194 +194 +197 +196 +198 +198 +198 +200 +200 +201 +200 +201 +202 +202 +205 +204 +204 +205 +205 +206 +207 +207 +207 +207 +206 +207 +206 +206 +207 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +203 +200 +201 +200 +201 +200 +198 +197 +200 +197 +197 +194 +194 +190 +190 +191 +189 +189 +185 +185 +185 +183 +183 +183 +182 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +166 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +130 +126 +126 +120 +119 +115 +116 +115 +110 +110 +106 +106 +105 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +69 +68 +65 +64 +64 +58 +58 +55 +55 +55 +50 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +32 +33 +31 +31 +27 +27 +26 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +14 +14 +13 +13 +13 +13 +14 +13 +13 +14 +14 +13 +14 +14 +13 +13 +14 +13 +13 +13 +13 +13 +13 +14 +13 +15 +16 +15 +17 +16 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +31 +31 +31 +33 +33 +37 +37 +37 +41 +40 +43 +43 +47 +47 +46 +51 +51 +54 +55 +54 +59 +59 +64 +64 +64 +69 +68 +72 +72 +73 +76 +76 +82 +82 +83 +86 +86 +90 +90 +93 +96 +96 +100 +99 +106 +106 +106 +110 +110 +116 +116 +115 +119 +120 +125 +125 +126 +129 +130 +134 +133 +133 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +168 +173 +173 +173 +175 +175 +179 +179 +179 +182 +182 +185 +185 +188 +188 +189 +190 +191 +194 +195 +195 +197 +197 +199 +198 +198 +200 +200 +201 +201 +200 +202 +203 +204 +204 +205 +204 +204 +206 +207 +206 +207 +206 +206 +207 +206 +206 +207 +207 +206 +206 +206 +207 +205 +204 +204 +204 +205 +202 +202 +200 +200 +200 +200 +200 +198 +198 +196 +197 +197 +194 +194 +191 +191 +191 +188 +189 +189 +188 +189 +185 +184 +182 +182 +183 +179 +179 +175 +175 +173 +173 +173 +169 +169 +164 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +125 +126 +126 +120 +119 +115 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +89 +86 +86 +86 +82 +82 +76 +77 +73 +72 +73 +68 +68 +64 +64 +64 +59 +59 +55 +54 +54 +51 +50 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +32 +33 +32 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +14 +12 +14 +14 +13 +14 +14 +13 +14 +14 +14 +13 +14 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +14 +14 +14 +13 +14 +14 +13 +14 +13 +15 +16 +15 +17 +17 +19 +19 +19 +21 +21 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +34 +37 +37 +41 +41 +43 +42 +43 +47 +47 +50 +50 +51 +54 +54 +58 +58 +59 +65 +65 +69 +68 +69 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +105 +106 +110 +110 +110 +116 +116 +119 +119 +120 +125 +125 +129 +129 +134 +134 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +178 +179 +179 +182 +183 +185 +184 +184 +189 +189 +190 +191 +190 +195 +195 +196 +197 +196 +198 +199 +200 +201 +201 +201 +200 +202 +203 +205 +204 +205 +204 +204 +206 +206 +207 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +207 +204 +204 +205 +205 +202 +203 +202 +200 +201 +200 +200 +200 +198 +199 +199 +199 +199 +196 +197 +195 +194 +194 +191 +190 +189 +188 +184 +185 +185 +183 +183 +178 +179 +179 +174 +175 +173 +173 +173 +169 +169 +165 +164 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +143 +143 +143 +140 +139 +133 +134 +133 +129 +129 +125 +125 +125 +119 +120 +115 +116 +116 +109 +110 +106 +106 +106 +100 +100 +96 +96 +91 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +68 +68 +64 +65 +64 +59 +58 +54 +55 +55 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +20 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +13 +13 +14 +14 +13 +13 +13 +13 +14 +14 +14 +13 +14 +14 +13 +14 +14 +13 +14 +14 +13 +14 +13 +13 +13 +14 +14 +13 +15 +15 +15 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +51 +55 +54 +58 +58 +64 +64 +64 +68 +69 +72 +72 +72 +76 +77 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +99 +100 +105 +106 +110 +110 +116 +116 +115 +119 +119 +125 +126 +125 +129 +129 +130 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +148 +151 +151 +157 +157 +161 +161 +161 +165 +165 diff --git a/Old Matlab Interface/.svn/pristine/21/210ff8921909a8810c7ea800fbf3a98550ceb291.svn-base b/Old Matlab Interface/.svn/pristine/21/210ff8921909a8810c7ea800fbf3a98550ceb291.svn-base new file mode 100644 index 00000000..2ccdc10d --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/21/210ff8921909a8810c7ea800fbf3a98550ceb291.svn-base @@ -0,0 +1,1043 @@ +function varargout = first_gui(varargin) +% FIRST_GUI MATLAB code for first_gui.fig +% FIRST_GUI, by itself, creates a new FIRST_GUI or raises the existing +% singleton*. +% +% H = FIRST_GUI returns the handle to a new FIRST_GUI or the handle to +% the existing singleton*. +% +% FIRST_GUI('CALLBACK',hObject,eventData,handles,...) calls the local +% function named CALLBACK in FIRST_GUI.M with the given input arguments. +% +% FIRST_GUI('Property','Value',...) creates a new FIRST_GUI or raises the +% existing singleton*. Starting from the left, property value pairs are +% applied to the GUI before first_gui_OpeningFcn gets called. An +% unrecognized property name or invalid value makes property application +% stop. All inputs are passed to first_gui_OpeningFcn via varargin. +% +% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one +% instance to run (singleton)". +% +% See also: GUIDE, GUIDATA, GUIHANDLES + +% Edit the above text to modify the response to help first_gui + +% Last Modified by GUIDE v2.5 03-Dec-2015 11:38:11 + +% Begin initialization code - DO NOT EDIT +gui_Singleton = 1; +gui_State = struct('gui_Name', mfilename, ... + 'gui_Singleton', gui_Singleton, ... + 'gui_OpeningFcn', @first_gui_OpeningFcn, ... + 'gui_OutputFcn', @first_gui_OutputFcn, ... + 'gui_LayoutFcn', [] , ... + 'gui_Callback', []); +if nargin && ischar(varargin{1}) + gui_State.gui_Callback = str2func(varargin{1}); +end + +if nargout + [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); +else + gui_mainfcn(gui_State, varargin{:}); +end +% End initialization code - DO NOT EDIT + + +% --- Executes just before first_gui is made visible. +function first_gui_OpeningFcn(hObject, eventdata, handles, varargin) +% This function has no output args, see OutputFcn. +% hObject handle to figure +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) +% varargin command line arguments to first_gui (see VARARGIN) + +% Choose default command line output for first_gui +handles.output = hObject; + +handles + +global gui_axes +global gui_delay +global text_box_1 +global text_box_2 +global gui_scope_running +global gui_cursor_mode +global gui_hori_cursor_a_pos +global gui_hori_cursor_b_pos +global gui_vert_cursor_a_pos +global gui_vert_cursor_b_pos +global scope_window_min +global gui_awg_waveform +global gui_awg_amplitude +global gui_awg_frequency +global gui_vo +global gui_ro +global gui_static_text_scope +global CH1_AC +global CH2_AC + + +gui_delay = handles.slider6 +gui_axes = handles.axes1; +text_box_1 = handles.edit1; +text_box_2 = handles.text9 +gui_static_text_scope = handles.text10; +gui_scope_running = 1; +gui_cursor_mode = 1; + +gui_vert_cursor_a_pos = 0; +gui_vert_cursor_b_pos = 0; +gui_hori_cursor_a_pos = scope_window_min; +gui_hori_cursor_b_pos = scope_window_min; + +gui_awg_waveform = 'sin(linspace(0,2*pi,128))'; +gui_awg_amplitude = '255'; +gui_awg_frequency = '50' + +gui_vo = 0; +gui_ro = 1000; + +CH1_AC = 0; +CH2_AC = 0; + + +%get(handles.axes1) + +% Update handles structure +guidata(hObject, handles); + +% UIWAIT makes first_gui wait for user response (see UIRESUME) +% uiwait(handles.figure1); + + +% --- Outputs from this function are returned to the command line. +function varargout = first_gui_OutputFcn(hObject, eventdata, handles) +% varargout cell array for returning output args (see VARARGOUT); +% hObject handle to figure +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +% Get default command line output from handles structure +varargout{1} = handles.output; + + + +function edit1_Callback(hObject, eventdata, handles) +% hObject handle to edit1 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +% Hints: get(hObject,'String') returns contents of edit1 as text +% str2double(get(hObject,'String')) returns contents of edit1 as a double + + +% --- Executes during object creation, after setting all properties. +function edit1_CreateFcn(hObject, eventdata, handles) +% hObject handle to edit1 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: edit controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end + + + +function edit2_Callback(hObject, eventdata, handles) +% hObject handle to edit2 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +% Hints: get(hObject,'String') returns contents of edit2 as text +% str2double(get(hObject,'String')) returns contents of edit2 as a double + + +% --- Executes during object creation, after setting all properties. +function edit2_CreateFcn(hObject, eventdata, handles) +% hObject handle to edit2 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: edit controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end + + + +function edit3_Callback(hObject, eventdata, handles) +% hObject handle to edit3 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +% Hints: get(hObject,'String') returns contents of edit3 as text +% str2double(get(hObject,'String')) returns contents of edit3 as a double + + +% --- Executes during object creation, after setting all properties. +function edit3_CreateFcn(hObject, eventdata, handles) +% hObject handle to edit3 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: edit controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end + + + +function edit4_Callback(hObject, eventdata, handles) +% hObject handle to edit4 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +% Hints: get(hObject,'String') returns contents of edit4 as text +% str2double(get(hObject,'String')) returns contents of edit4 as a double + + +% --- Executes during object creation, after setting all properties. +function edit4_CreateFcn(hObject, eventdata, handles) +% hObject handle to edit4 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: edit controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end + + +% --- Executes on slider movement. +function slider1_Callback(hObject, eventdata, handles) +global scope_window_time +global gui_delay +% hObject handle to slider1 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) +scope_window_time = 10^(-get(hObject, 'value')) +set(gui_delay, 'SliderStep', [scope_window_time/100, scope_window_time/10]); +% Hints: get(hObject,'Value') returns position of slider +% get(hObject,'Min') and get(hObject,'Max') to determine range of slider + + +% --- Executes during object creation, after setting all properties. +function slider1_CreateFcn(hObject, eventdata, handles) +% hObject handle to slider1 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: slider controls usually have a light gray background. +if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor',[.9 .9 .9]); +end + + + +function edit5_Callback(hObject, eventdata, handles) +% hObject handle to edit5 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +% Hints: get(hObject,'String') returns contents of edit5 as text +% str2double(get(hObject,'String')) returns contents of edit5 as a double + + +% --- Executes during object creation, after setting all properties. +function edit5_CreateFcn(hObject, eventdata, handles) +% hObject handle to edit5 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: edit controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end + + +% --- Executes on button press in pushbutton1. +function pushbutton1_Callback(hObject, eventdata, handles) +% hObject handle to pushbutton1 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + + +% --- Executes on slider movement. +function slider2_Callback(hObject, eventdata, handles) +% hObject handle to slider2 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +global gui_hori_cursor_a_pos +global scope_window_max +global scope_window_min +global text_box_2 +global gui_cursor_mode + +gui_hori_cursor_a_pos = scope_window_min + (scope_window_max - scope_window_min) * get(hObject,'Value'); + +global gui_hori_cursor_b_pos +global gui_vert_cursor_a_pos +global gui_vert_cursor_b_pos +switch gui_cursor_mode + case 1 + set(text_box_2, 'String', sprintf(' Vertical Cursor Disabled\n Vertical Cursor Disabled\n Vertical Cursor Disabled\n \n Horizontal cursor disabled \n Horizontal cursor disabled \n Horizontal cursor disabled \n ')) + case 2 + set(text_box_2, 'String', sprintf(' Vertical Cursor Disabled\n Vertical Cursor Disabled\n Vertical Cursor Disabled\n \n V1 = %3.3e\n V2 = %3.3e\n DeltaV = %3.3e\n', gui_hori_cursor_a_pos, gui_hori_cursor_b_pos, gui_hori_cursor_a_pos - gui_hori_cursor_b_pos)) + case 3 + set(text_box_2, 'String', sprintf(' T1 = %3.3e\n T2 = %3.3e\n DeltaT = %3.3e\n \n Horizontal cursor disabled \n Horizontal cursor disabled \n Horizontal cursor disabled \n ', gui_vert_cursor_a_pos, gui_vert_cursor_b_pos, gui_vert_cursor_a_pos - gui_vert_cursor_b_pos)) + case 4 + set(text_box_2, 'String', sprintf(' T1 = %3.3e\n T2 = %3.3e\n DeltaT = %3.3e\n \n V1 = %3.3e\n V2 = %3.3e\n DeltaV = %3.3e\n', gui_vert_cursor_a_pos, gui_vert_cursor_b_pos, gui_vert_cursor_a_pos - gui_vert_cursor_b_pos, gui_hori_cursor_a_pos, gui_hori_cursor_b_pos, gui_hori_cursor_a_pos - gui_hori_cursor_b_pos)) + otherwise error('Gui_cursor_mode is invalid') +end + +% Hints: get(hObject,'Value') returns position of slider +% get(hObject,'Min') and get(hObject,'Max') to determine range of slider + + +% --- Executes during object creation, after setting all properties. +function slider2_CreateFcn(hObject, eventdata, handles) +% hObject handle to slider2 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: slider controls usually have a light gray background. +if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor',[.9 .9 .9]); +end + + +% --- Executes on selection change in popupmenu1. +function popupmenu1_Callback(hObject, eventdata, handles) +% hObject handle to popupmenu1 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +global gui_cursor_mode +gui_cursor_mode = get(hObject,'Value') + +% Hints: contents = cellstr(get(hObject,'String')) returns popupmenu1 contents as cell array +% contents{get(hObject,'Value')} returns selected item from popupmenu1 + + +% --- Executes during object creation, after setting all properties. +function popupmenu1_CreateFcn(hObject, eventdata, handles) +% hObject handle to popupmenu1 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: popupmenu controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end + + +% --- Executes on slider movement. +function slider3_Callback(hObject, eventdata, handles) +% hObject handle to slider3 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +global gui_hori_cursor_b_pos +global scope_window_max +global scope_window_min +global text_box_2 +global gui_cursor_mode + +gui_hori_cursor_b_pos = scope_window_min + (scope_window_max - scope_window_min) * get(hObject,'Value'); + +global gui_hori_cursor_a_pos +global gui_vert_cursor_a_pos +global gui_vert_cursor_b_pos +switch gui_cursor_mode + case 1 + set(text_box_2, 'String', sprintf(' Vertical Cursor Disabled\n Vertical Cursor Disabled\n Vertical Cursor Disabled\n \n Horizontal cursor disabled \n Horizontal cursor disabled \n Horizontal cursor disabled \n ')) + case 2 + set(text_box_2, 'String', sprintf(' Vertical Cursor Disabled\n Vertical Cursor Disabled\n Vertical Cursor Disabled\n \n V1 = %3.3e\n V2 = %3.3e\n DeltaV = %3.3e\n', gui_hori_cursor_a_pos, gui_hori_cursor_b_pos, gui_hori_cursor_a_pos - gui_hori_cursor_b_pos)) + case 3 + set(text_box_2, 'String', sprintf(' T1 = %3.3e\n T2 = %3.3e\n DeltaT = %3.3e\n \n Horizontal cursor disabled \n Horizontal cursor disabled \n Horizontal cursor disabled \n ', gui_vert_cursor_a_pos, gui_vert_cursor_b_pos, gui_vert_cursor_a_pos - gui_vert_cursor_b_pos)) + case 4 + set(text_box_2, 'String', sprintf(' T1 = %3.3e\n T2 = %3.3e\n DeltaT = %3.3e\n \n V1 = %3.3e\n V2 = %3.3e\n DeltaV = %3.3e\n', gui_vert_cursor_a_pos, gui_vert_cursor_b_pos, gui_vert_cursor_a_pos - gui_vert_cursor_b_pos, gui_hori_cursor_a_pos, gui_hori_cursor_b_pos, gui_hori_cursor_a_pos - gui_hori_cursor_b_pos)) + otherwise error('Gui_cursor_mode is invalid') +end + +% Hints: get(hObject,'Value') returns position of slider +% get(hObject,'Min') and get(hObject,'Max') to determine range of slider + + +% --- Executes during object creation, after setting all properties. +function slider3_CreateFcn(hObject, eventdata, handles) +% hObject handle to slider3 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: slider controls usually have a light gray background. +if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor',[.9 .9 .9]); +end + + + +function edit6_Callback(hObject, eventdata, handles) +% hObject handle to edit6 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +global gui_awg_waveform +gui_awg_waveform = get(hObject,'String'); + + +% Hints: get(hObject,'String') returns contents of edit6 as text +% str2double(get(hObject,'String')) returns contents of edit6 as a double + + +% --- Executes during object creation, after setting all properties. +function edit6_CreateFcn(hObject, eventdata, handles) +% hObject handle to edit6 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: edit controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end + + +% --- Executes on button press in pushbutton3. +function pushbutton3_Callback(hObject, eventdata, handles) +% hObject handle to pushbutton3 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) +global gui_awg_waveform +global gui_awg_amplitude +global gui_awg_frequency +global scope_mode + +gui_awg_waveform +gui_awg_amplitude +gui_awg_frequency +if scope_mode == 0 | scope_mode == 3 | scope_mode == 5 + tiny_send_waveform(eval(gui_awg_waveform), str2num(gui_awg_amplitude), str2num(gui_awg_frequency)); + fprintf('\nStandard\n') +else + tiny_send_auxwf(eval(gui_awg_waveform), str2num(gui_awg_amplitude), str2num(gui_awg_frequency)); + fprintf('\nAux\n') +end + + +function edit7_Callback(hObject, eventdata, handles) +% hObject handle to edit7 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +global gui_awg_amplitude +gui_awg_amplitude = get(hObject,'String'); + +% Hints: get(hObject,'String') returns contents of edit7 as text +% str2double(get(hObject,'String')) returns contents of edit7 as a double + + +% --- Executes during object creation, after setting all properties. +function edit7_CreateFcn(hObject, eventdata, handles) +% hObject handle to edit7 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: edit controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end + + + +function edit8_Callback(hObject, eventdata, handles) +% hObject handle to edit8 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +global gui_awg_frequency +gui_awg_frequency = get(hObject,'String'); +% Hints: get(hObject,'String') returns contents of edit8 as text +% str2double(get(hObject,'String')) returns contents of edit8 as a double + + +% --- Executes during object creation, after setting all properties. +function edit8_CreateFcn(hObject, eventdata, handles) +% hObject handle to edit8 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: edit controls usually have a white background on Windows. +% See ISPC and COMPUTER. + +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end + + +% --- Executes on button press in pushbutton4. +function pushbutton4_Callback(hObject, eventdata, handles) +% hObject handle to pushbutton4 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) +global gui_scope_running +gui_scope_running = ~gui_scope_running + + + +function edit9_Callback(hObject, eventdata, handles) +% hObject handle to edit9 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +global gui_vo; +gui_vo = str2num(get(hObject, 'String')); + +% Hints: get(hObject,'String') returns contents of edit9 as text +% str2double(get(hObject,'String')) returns contents of edit9 as a double + + +% --- Executes during object creation, after setting all properties. +function edit9_CreateFcn(hObject, eventdata, handles) +% hObject handle to edit9 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: edit controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end + + + +function edit10_Callback(hObject, eventdata, handles) +% hObject handle to edit10 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) +global gui_ro; +gui_ro = str2num(get(hObject, 'String')); +% Hints: get(hObject,'String') returns contents of edit10 as text +% str2double(get(hObject,'String')) returns contents of edit10 as a double + + +% --- Executes during object creation, after setting all properties. +function edit10_CreateFcn(hObject, eventdata, handles) +% hObject handle to edit10 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: edit controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end + + +% --- Executes on button press in pushbutton5. +function pushbutton5_Callback(hObject, eventdata, handles) +global gui_vo +global gui_ro +setpsu_boost(gui_vo, 5, gui_ro); +% hObject handle to pushbutton5 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + + +% --- Executes on slider movement. +function slider4_Callback(hObject, eventdata, handles) +% hObject handle to slider4 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +global gui_vert_cursor_a_pos +global scope_window_time +global text_box_2 +global gui_cursor_mode + +gui_vert_cursor_a_pos = -scope_window_time + (scope_window_time) * get(hObject,'Value'); + +global gui_hori_cursor_a_pos +global gui_hori_cursor_b_pos +global gui_vert_cursor_b_pos +switch gui_cursor_mode + case 1 + set(text_box_2, 'String', sprintf(' Vertical Cursor Disabled\n Vertical Cursor Disabled\n Vertical Cursor Disabled\n \n Horizontal cursor disabled \n Horizontal cursor disabled \n Horizontal cursor disabled \n ')) + case 2 + set(text_box_2, 'String', sprintf(' Vertical Cursor Disabled\n Vertical Cursor Disabled\n Vertical Cursor Disabled\n \n V1 = %3.3e\n V2 = %3.3e\n DeltaV = %3.3e\n', gui_hori_cursor_a_pos, gui_hori_cursor_b_pos, gui_hori_cursor_a_pos - gui_hori_cursor_b_pos)) + case 3 + set(text_box_2, 'String', sprintf(' T1 = %3.3e\n T2 = %3.3e\n DeltaT = %3.3e\n \n Horizontal cursor disabled \n Horizontal cursor disabled \n Horizontal cursor disabled \n ', gui_vert_cursor_a_pos, gui_vert_cursor_b_pos, gui_vert_cursor_a_pos - gui_vert_cursor_b_pos)) + case 4 + set(text_box_2, 'String', sprintf(' T1 = %3.3e\n T2 = %3.3e\n DeltaT = %3.3e\n \n V1 = %3.3e\n V2 = %3.3e\n DeltaV = %3.3e\n', gui_vert_cursor_a_pos, gui_vert_cursor_b_pos, gui_vert_cursor_a_pos - gui_vert_cursor_b_pos, gui_hori_cursor_a_pos, gui_hori_cursor_b_pos, gui_hori_cursor_a_pos - gui_hori_cursor_b_pos)) + otherwise error('Gui_cursor_mode is invalid') +end + +% Hints: get(hObject,'Value') returns position of slider +% get(hObject,'Min') and get(hObject,'Max') to determine range of slider + + +% --- Executes during object creation, after setting all properties. +function slider4_CreateFcn(hObject, eventdata, handles) +% hObject handle to slider4 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: slider controls usually have a light gray background. +if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor',[.9 .9 .9]); +end + + +% --- Executes on slider movement. +function slider5_Callback(hObject, eventdata, handles) +% hObject handle to slider5 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +global gui_vert_cursor_b_pos +global scope_window_time +global text_box_2 +global gui_cursor_mode +gui_vert_cursor_b_pos = -scope_window_time + (scope_window_time) * get(hObject,'Value'); + +global gui_hori_cursor_a_pos +global gui_hori_cursor_b_pos +global gui_vert_cursor_a_pos +switch gui_cursor_mode + case 1 + set(text_box_2, 'String', sprintf(' Vertical Cursor Disabled\n Vertical Cursor Disabled\n Vertical Cursor Disabled\n \n Horizontal cursor disabled \n Horizontal cursor disabled \n Horizontal cursor disabled \n ')) + case 2 + set(text_box_2, 'String', sprintf(' Vertical Cursor Disabled\n Vertical Cursor Disabled\n Vertical Cursor Disabled\n \n V1 = %3.3e\n V2 = %3.3e\n DeltaV = %3.3e\n', gui_hori_cursor_a_pos, gui_hori_cursor_b_pos, gui_hori_cursor_a_pos - gui_hori_cursor_b_pos)) + case 3 + set(text_box_2, 'String', sprintf(' T1 = %3.3e\n T2 = %3.3e\n DeltaT = %3.3e\n \n Horizontal cursor disabled \n Horizontal cursor disabled \n Horizontal cursor disabled \n ', gui_vert_cursor_a_pos, gui_vert_cursor_b_pos, gui_vert_cursor_a_pos - gui_vert_cursor_b_pos)) + case 4 + set(text_box_2, 'String', sprintf(' T1 = %3.3e\n T2 = %3.3e\n DeltaT = %3.3e\n \n V1 = %3.3e\n V2 = %3.3e\n DeltaV = %3.3e\n', gui_vert_cursor_a_pos, gui_vert_cursor_b_pos, gui_vert_cursor_a_pos - gui_vert_cursor_b_pos, gui_hori_cursor_a_pos, gui_hori_cursor_b_pos, gui_hori_cursor_a_pos - gui_hori_cursor_b_pos)) + otherwise error('Gui_cursor_mode is invalid') +end + + +% Hints: get(hObject,'Value') returns position of slider +% get(hObject,'Min') and get(hObject,'Max') to determine range of slider + + +% --- Executes during object creation, after setting all properties. +function slider5_CreateFcn(hObject, eventdata, handles) +% hObject handle to slider5 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: slider controls usually have a light gray background. +if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor',[.9 .9 .9]); +end + + +% --- Executes on selection change in popupmenu2. +function popupmenu2_Callback(hObject, eventdata, handles) +% hObject handle to popupmenu2 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) +global scope_mode +global scope_gain_0 +global scope_gain_1 +global refreshrate +global refreshrate_temp +global waveform_exists +global saved_waveform_ch1 +global saved_waveform_ch2 +global gui_delay + +refreshrate_temp = refreshrate; +waveform_exists = 0 + +contents = cellstr(get(hObject,'String')); +tempstring = contents{get(hObject,'Value')}; + +mode = str2num(tempstring(6)); +setscopemode(mode, scope_gain_0, scope_gain_1) + +saved_waveform_ch1 = []; +saved_waveform_ch2 = []; +set(gui_delay, 'Value', get(gui_delay, 'Max')) + +% Hints: contents = cellstr(get(hObject,'String')) returns popupmenu2 contents as cell array +% contents{get(hObject,'Value')} returns selected item from popupmenu2 + + +% --- Executes during object creation, after setting all properties. +function popupmenu2_CreateFcn(hObject, eventdata, handles) +% hObject handle to popupmenu2 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: popupmenu controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end + + +% --- Executes on slider movement. +function slider6_Callback(hObject, eventdata, handles) +% hObject handle to slider6 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +% Hints: get(hObject,'Value') returns position of slider +% get(hObject,'Min') and get(hObject,'Max') to determine range of slider + + +% --- Executes during object creation, after setting all properties. +function slider6_CreateFcn(hObject, eventdata, handles) +% hObject handle to slider6 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: slider controls usually have a light gray background. +if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor',[.9 .9 .9]); +end +set(hObject,'Value', 1); + + + +function edit11_Callback(hObject, eventdata, handles) +% hObject handle to edit11 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) +global gui_delay + +boxvar = str2num(get(hObject,'String')); +if boxvar +#include + +//LIBUSBK INCLUDES +#include +#include +#include +#include +#include "libusbk.h" + +#define DEBUG_SHOWCTRL 1 +#define ISO_PACKETS_TO_READ 30 +#define ISO_PACKET_SIZE 375 +#define HALFBUFFER_SIZE (ISO_PACKETS_TO_READ*ISO_PACKET_SIZE) + +void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) +{ + //Vars: + //Imports + char* HANDLE_CHAR; + KUSB_HANDLE handle = NULL; + unsigned char pipeID = 0x83; + //Internals + unsigned char success; + unsigned int transferred; + DWORD errorCode = ERROR_SUCCESS; + PKISO_CONTEXT isoCtx[2] = { NULL, NULL }; + KOVL_HANDLE ovlkHandle[2] = { NULL, NULL }; + KOVL_POOL_HANDLE ovlPool = NULL; + char *isoBuffer; + //Exports + char isoCtx0_string[17]; + char isoCtx1_string[17]; + char ovlkHandle0_string[17]; + char ovlkHandle1_string[17]; + char ovlPool_string[17]; + char isoBuffer_string[17]; + + + //Initialise Data + HANDLE_CHAR = mxArrayToString(prhs[0]); + sscanf(HANDLE_CHAR, "%16x", &handle); + + isoBuffer = malloc(2*HALFBUFFER_SIZE); + + //Actual Function + success = UsbK_ResetPipe(handle, pipeID); + if (~success){ + errorCode = GetLastError(); + if (errorCode != 0x3E5){ + printf("UsbK_ResetPipe failed. ErrorCode: %08Xh\n", errorCode); + } + } + + //Define Iso Context + IsoK_Init(&isoCtx[0], ISO_PACKETS_TO_READ, 0); + IsoK_SetPackets(isoCtx[0], ISO_PACKET_SIZE); + + IsoK_Init(&isoCtx[1], ISO_PACKETS_TO_READ, ISO_PACKETS_TO_READ); + IsoK_SetPackets(isoCtx[1], ISO_PACKET_SIZE); + + //What is this overlapped pool? Virtual Addresses for I/O? Black magic? The source of my errors. + OvlK_Init(&ovlPool, handle, 4, 0); + printf("OvlPool = %d", ovlPool); + + OvlK_Acquire(&ovlkHandle[0], ovlPool); + + OvlK_Acquire(&ovlkHandle[1], ovlPool); + + //Set up iso pipe for n reads. + UsbK_IsoReadPipe(handle, pipeID, isoBuffer, HALFBUFFER_SIZE, ovlkHandle[0], isoCtx[0]); + UsbK_IsoReadPipe(handle, pipeID, (isoBuffer+HALFBUFFER_SIZE), HALFBUFFER_SIZE, ovlkHandle[1], isoCtx[1]); + + //Export Data + + sprintf(isoCtx0_string, "%016x", isoCtx[0]); + plhs[0] = mxCreateString(isoCtx0_string); + + sprintf(isoCtx1_string, "%016x", isoCtx[1]); + plhs[1] = mxCreateString(isoCtx1_string); + + sprintf(ovlkHandle0_string, "%016x", ovlkHandle[0]); + plhs[2] = mxCreateString(ovlkHandle0_string); + + sprintf(ovlkHandle1_string, "%016x", ovlkHandle[1]); + plhs[3] = mxCreateString(ovlkHandle1_string); + + sprintf(ovlPool_string, "%016x", ovlPool); + plhs[4] = mxCreateString(ovlPool_string); + + sprintf(isoBuffer_string, "%016x", isoBuffer); + plhs[5] = mxCreateString(isoBuffer_string); + + + return; +} \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/23/23880a000a15dd9a71984f677ace3f759b3d176c.svn-base b/Old Matlab Interface/.svn/pristine/23/23880a000a15dd9a71984f677ace3f759b3d176c.svn-base new file mode 100644 index 00000000..52da3e38 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/23/23880a000a15dd9a71984f677ace3f759b3d176c.svn-base @@ -0,0 +1,52 @@ +function [] = tiny_send_waveform(waveform, amplitude, frequency); + +waveform = tiny_wave_conv(waveform, amplitude); +waveform = uint8(waveform); + +wave_length = length(waveform); + +f_invalid = 1; + +%%ALWAYS SEND THE DMA FLAG +dma_flag = 1; +% dma_flag = 0; +% if(frequency>500) +% dma_flag = 1; +% end + +valid_clock_div = [1,2,4,8,64,256,1024]; +f0=24e6; + +if(frequency*wave_length)>1e6 + error('Frequency is too high') +end + +for clk_setting = 1:length(valid_clock_div) + f_test = f0 / valid_clock_div(clk_setting); + if (f_test/frequency)<65535 + f_invalid = 0; + break + end +end + +if (f_invalid) + error('Frequency is too low!') +end + +tccper = round(f_test / frequency / wave_length); +tccper = uint16(tccper); + +clk_setting = uint16(clk_setting); + +%stairs(uint8(waveform)); + +wavestring = []; +for n=1:wave_length + wavestring = [wavestring [sprintf('%3d, ', waveform(n)) ' ']]; +end + +mex_usb_send_control('40', 'a1', dec2hex(tccper), dec2hex(clk_setting + 32768*dma_flag), dec2hex(wave_length), uint8(waveform)); + +% driverLocation = 'c:\libusbk\examples\open-device\debug\win32'; +% command = [driverLocation '\open-device "03eb" "a000" "' command '" "' num2str(tccper) '" "' num2str(clk_setting) '" "' num2str(wave_length) '" "' wavestring '"'] +% system(command); \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/24/24252c4f32cacda1c505e6fc27fbc7ba69f5aa71.svn-base b/Old Matlab Interface/.svn/pristine/24/24252c4f32cacda1c505e6fc27fbc7ba69f5aa71.svn-base new file mode 100644 index 00000000..f959ea5e --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/24/24252c4f32cacda1c505e6fc27fbc7ba69f5aa71.svn-base @@ -0,0 +1,56 @@ +function [] = displaypacket(new_packets) + +global saved_waveform_ch1 +global saved_waveform_ch2 +global scope_mode +global gui_scope_running + + +%Keep the arrays small(ish) +if length(saved_waveform_ch1)>10e6 + saved_waveform_ch1 = saved_waveform_ch1(length(saved_waveform_ch1)-1e6:end); +end +if length(saved_waveform_ch2)>10e6 + saved_waveform_ch2 = saved_waveform_ch2(length(saved_waveform_ch2)-1e6:end); +end + + +%%Insta-return if scope is paused +if(~gui_scope_running) + return +end + +%%Exception for mode 6 +if scope_mode == 6 + transfer_contents_temp = []; + for tempovar = 0:length(new_packets)/750 - 1 + transfer_contents_temp = [transfer_contents_temp new_packets((tempovar*750+1):(tempovar*750+748))]; + end + saved_waveform_ch1 = [saved_waveform_ch1 transfer_contents_temp]; + return +end + +%%Pull out CH1 data +if scope_mode < 5 + transfer_contents_temp = []; + for tempovar = 0:length(new_packets)/750 - 1 + transfer_contents_temp = [transfer_contents_temp new_packets((tempovar*750+1):(tempovar*750+374))]; + end + saved_waveform_ch1 = [saved_waveform_ch1 transfer_contents_temp]; +end + +%%Pull out CH2 data for relevant states +if (scope_mode == 1 | scope_mode == 2 | scope_mode == 4) + transfer_contents_temp = []; + for tempovar = 0:length(new_packets)/750 - 1 + transfer_contents_temp = [transfer_contents_temp new_packets((tempovar*750+376):(tempovar*750+749))]; + end + saved_waveform_ch2 = [saved_waveform_ch2 transfer_contents_temp]; +end + +% transfer_contents_whole = [transfer_contents_0 transfer_contents_1] +% transfer_contents_temp = []; +% for tempovar = 0:length(transfer_contents_whole)/750 - 1 +% transfer_contents_temp = [transfer_contents_temp transfer_contents_whole((tempovar*750+1):(tempovar*750+748))]; +% end +% plot(transfer_contents_temp) diff --git a/Old Matlab Interface/.svn/pristine/28/2829ca960562d879bb9bc425ae0f4d356f78aaf9.svn-base b/Old Matlab Interface/.svn/pristine/28/2829ca960562d879bb9bc425ae0f4d356f78aaf9.svn-base new file mode 100644 index 00000000..9cd8f040 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/28/2829ca960562d879bb9bc425ae0f4d356f78aaf9.svn-base @@ -0,0 +1,40 @@ +function [] = setscopemode(mode, gain0, gain1); %Mode zero for single channel analog, 1 for single digital, 2 for 2ch analog, 3 for 2ch digital +global scope_mode +scope_mode = mode; + +if(gain0~=0.5 & gain0~=1 & gain0~=2 & gain0~=4 & gain0~=8 & gain0~=16 & gain0~=32 & gain0~=64) + error('Valid values of gain are 0.5, 1, 2, 4, 8, 16, 32, 64'); +end + +if(gain1~=0.5 & gain1~=1 & gain1~=2 & gain1~=4 & gain1~=8 & gain1~=16 & gain1~=32 & gain1~=64) + error('Valid values of gain are 0.5, 1, 2, 4, 8, 16, 32, 64'); +end + + +global scope_gain +scope_gain = gain0; + +gain_mask_0 = uint16([]); + +if (gain0 == 1/2) + gain_mask_0 = 7*4; +else + gain_mask_0 = log2(gain0) * 4; +end + +gain_mask_1 = uint16([]); + +if (gain1 == 1/2) + gain_mask_1 = 7*4; +else + gain_mask_1 = log2(gain1) * 4; +end + +gain_mask = gain_mask_0 + 256*gain_mask_1; + + +mex_usb_send_control('40', 'a5', dec2hex(mode), dec2hex(gain_mask), '0', '0'); + +% driverLocation = 'c:\libusbk\examples\open-device\debug\win32'; +% command = [driverLocation '\open-device "03eb" "a000" "' command '" "' num2str(onoff) '" "NULL" "NULL" "NULL"'] +% system(command); \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/28/28a638cd51e648387350a4716cb2c2182b540d87.svn-base b/Old Matlab Interface/.svn/pristine/28/28a638cd51e648387350a4716cb2c2182b540d87.svn-base new file mode 100644 index 00000000..bf017c32 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/28/28a638cd51e648387350a4716cb2c2182b540d87.svn-base @@ -0,0 +1,622 @@ +function varargout = first_gui(varargin) +% FIRST_GUI MATLAB code for first_gui.fig +% FIRST_GUI, by itself, creates a new FIRST_GUI or raises the existing +% singleton*. +% +% H = FIRST_GUI returns the handle to a new FIRST_GUI or the handle to +% the existing singleton*. +% +% FIRST_GUI('CALLBACK',hObject,eventData,handles,...) calls the local +% function named CALLBACK in FIRST_GUI.M with the given input arguments. +% +% FIRST_GUI('Property','Value',...) creates a new FIRST_GUI or raises the +% existing singleton*. Starting from the left, property value pairs are +% applied to the GUI before first_gui_OpeningFcn gets called. An +% unrecognized property name or invalid value makes property application +% stop. All inputs are passed to first_gui_OpeningFcn via varargin. +% +% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one +% instance to run (singleton)". +% +% See also: GUIDE, GUIDATA, GUIHANDLES + +% Edit the above text to modify the response to help first_gui + +% Last Modified by GUIDE v2.5 05-Aug-2015 16:20:06 + +% Begin initialization code - DO NOT EDIT +gui_Singleton = 1; +gui_State = struct('gui_Name', mfilename, ... + 'gui_Singleton', gui_Singleton, ... + 'gui_OpeningFcn', @first_gui_OpeningFcn, ... + 'gui_OutputFcn', @first_gui_OutputFcn, ... + 'gui_LayoutFcn', [] , ... + 'gui_Callback', []); +if nargin && ischar(varargin{1}) + gui_State.gui_Callback = str2func(varargin{1}); +end + +if nargout + [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); +else + gui_mainfcn(gui_State, varargin{:}); +end +% End initialization code - DO NOT EDIT + + +% --- Executes just before first_gui is made visible. +function first_gui_OpeningFcn(hObject, eventdata, handles, varargin) +% This function has no output args, see OutputFcn. +% hObject handle to figure +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) +% varargin command line arguments to first_gui (see VARARGIN) + +% Choose default command line output for first_gui +handles.output = hObject; + +handles + +global gui_axes +global text_box_1 +global text_box_2 +global gui_scope_running +global gui_cursor_mode +global gui_hori_cursor_a_pos +global gui_hori_cursor_b_pos +global gui_vert_cursor_a_pos +global gui_vert_cursor_b_pos +global scope_window_min +global gui_awg_waveform +global gui_awg_amplitude +global gui_awg_frequency +global gui_vo +global gui_ro + +gui_axes = handles.axes1; +text_box_1 = handles.edit1; +text_box_2 = handles.text9 +gui_scope_running = 1; +gui_cursor_mode = 1; + +gui_vert_cursor_a_pos = 0; +gui_vert_cursor_b_pos = 0; +gui_hori_cursor_a_pos = scope_window_min; +gui_hori_cursor_b_pos = scope_window_min; + +gui_awg_waveform = 'sin(linspace(0,2*pi,128))'; +gui_awg_amplitude = '255'; +gui_awg_frequency = '50' + +gui_vo = 0; +gui_ro = 1000; + + +%get(handles.axes1) + +% Update handles structure +guidata(hObject, handles); + +% UIWAIT makes first_gui wait for user response (see UIRESUME) +% uiwait(handles.figure1); + + +% --- Outputs from this function are returned to the command line. +function varargout = first_gui_OutputFcn(hObject, eventdata, handles) +% varargout cell array for returning output args (see VARARGOUT); +% hObject handle to figure +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +% Get default command line output from handles structure +varargout{1} = handles.output; + + + +function edit1_Callback(hObject, eventdata, handles) +% hObject handle to edit1 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +% Hints: get(hObject,'String') returns contents of edit1 as text +% str2double(get(hObject,'String')) returns contents of edit1 as a double + + +% --- Executes during object creation, after setting all properties. +function edit1_CreateFcn(hObject, eventdata, handles) +% hObject handle to edit1 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: edit controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end + + + +function edit2_Callback(hObject, eventdata, handles) +% hObject handle to edit2 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +% Hints: get(hObject,'String') returns contents of edit2 as text +% str2double(get(hObject,'String')) returns contents of edit2 as a double + + +% --- Executes during object creation, after setting all properties. +function edit2_CreateFcn(hObject, eventdata, handles) +% hObject handle to edit2 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: edit controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end + + + +function edit3_Callback(hObject, eventdata, handles) +% hObject handle to edit3 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +% Hints: get(hObject,'String') returns contents of edit3 as text +% str2double(get(hObject,'String')) returns contents of edit3 as a double + + +% --- Executes during object creation, after setting all properties. +function edit3_CreateFcn(hObject, eventdata, handles) +% hObject handle to edit3 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: edit controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end + + + +function edit4_Callback(hObject, eventdata, handles) +% hObject handle to edit4 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +% Hints: get(hObject,'String') returns contents of edit4 as text +% str2double(get(hObject,'String')) returns contents of edit4 as a double + + +% --- Executes during object creation, after setting all properties. +function edit4_CreateFcn(hObject, eventdata, handles) +% hObject handle to edit4 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: edit controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end + + +% --- Executes on slider movement. +function slider1_Callback(hObject, eventdata, handles) +global scope_window_time +% hObject handle to slider1 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) +scope_window_time = 10^(-get(hObject, 'value')) +% Hints: get(hObject,'Value') returns position of slider +% get(hObject,'Min') and get(hObject,'Max') to determine range of slider + + +% --- Executes during object creation, after setting all properties. +function slider1_CreateFcn(hObject, eventdata, handles) +% hObject handle to slider1 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: slider controls usually have a light gray background. +if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor',[.9 .9 .9]); +end + + + +function edit5_Callback(hObject, eventdata, handles) +% hObject handle to edit5 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +% Hints: get(hObject,'String') returns contents of edit5 as text +% str2double(get(hObject,'String')) returns contents of edit5 as a double + + +% --- Executes during object creation, after setting all properties. +function edit5_CreateFcn(hObject, eventdata, handles) +% hObject handle to edit5 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: edit controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end + + +% --- Executes on button press in pushbutton1. +function pushbutton1_Callback(hObject, eventdata, handles) +% hObject handle to pushbutton1 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + + +% --- Executes on slider movement. +function slider2_Callback(hObject, eventdata, handles) +% hObject handle to slider2 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +global gui_hori_cursor_a_pos +global scope_window_max +global scope_window_min +global text_box_2 +global gui_cursor_mode + +gui_hori_cursor_a_pos = scope_window_min + (scope_window_max - scope_window_min) * get(hObject,'Value'); + +global gui_hori_cursor_b_pos +global gui_vert_cursor_a_pos +global gui_vert_cursor_b_pos +switch gui_cursor_mode + case 1 + set(text_box_2, 'String', sprintf(' Vertical Cursor Disabled\n Vertical Cursor Disabled\n Vertical Cursor Disabled\n \n Horizontal cursor disabled \n Horizontal cursor disabled \n Horizontal cursor disabled \n ')) + case 2 + set(text_box_2, 'String', sprintf(' Vertical Cursor Disabled\n Vertical Cursor Disabled\n Vertical Cursor Disabled\n \n V1 = %3.3e\n V2 = %3.3e\n DeltaV = %3.3e\n', gui_hori_cursor_a_pos, gui_hori_cursor_b_pos, gui_hori_cursor_a_pos - gui_hori_cursor_b_pos)) + case 3 + set(text_box_2, 'String', sprintf(' T1 = %3.3e\n T2 = %3.3e\n DeltaT = %3.3e\n \n Horizontal cursor disabled \n Horizontal cursor disabled \n Horizontal cursor disabled \n ', gui_vert_cursor_a_pos, gui_vert_cursor_b_pos, gui_vert_cursor_a_pos - gui_vert_cursor_b_pos)) + case 4 + set(text_box_2, 'String', sprintf(' T1 = %3.3e\n T2 = %3.3e\n DeltaT = %3.3e\n \n V1 = %3.3e\n V2 = %3.3e\n DeltaV = %3.3e\n', gui_vert_cursor_a_pos, gui_vert_cursor_b_pos, gui_vert_cursor_a_pos - gui_vert_cursor_b_pos, gui_hori_cursor_a_pos, gui_hori_cursor_b_pos, gui_hori_cursor_a_pos - gui_hori_cursor_b_pos)) + otherwise error('Gui_cursor_mode is invalid') +end + +% Hints: get(hObject,'Value') returns position of slider +% get(hObject,'Min') and get(hObject,'Max') to determine range of slider + + +% --- Executes during object creation, after setting all properties. +function slider2_CreateFcn(hObject, eventdata, handles) +% hObject handle to slider2 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: slider controls usually have a light gray background. +if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor',[.9 .9 .9]); +end + + +% --- Executes on selection change in popupmenu1. +function popupmenu1_Callback(hObject, eventdata, handles) +% hObject handle to popupmenu1 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +global gui_cursor_mode +gui_cursor_mode = get(hObject,'Value') + +% Hints: contents = cellstr(get(hObject,'String')) returns popupmenu1 contents as cell array +% contents{get(hObject,'Value')} returns selected item from popupmenu1 + + +% --- Executes during object creation, after setting all properties. +function popupmenu1_CreateFcn(hObject, eventdata, handles) +% hObject handle to popupmenu1 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: popupmenu controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end + + +% --- Executes on slider movement. +function slider3_Callback(hObject, eventdata, handles) +% hObject handle to slider3 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +global gui_hori_cursor_b_pos +global scope_window_max +global scope_window_min +global text_box_2 +global gui_cursor_mode + +gui_hori_cursor_b_pos = scope_window_min + (scope_window_max - scope_window_min) * get(hObject,'Value'); + +global gui_hori_cursor_a_pos +global gui_vert_cursor_a_pos +global gui_vert_cursor_b_pos +switch gui_cursor_mode + case 1 + set(text_box_2, 'String', sprintf(' Vertical Cursor Disabled\n Vertical Cursor Disabled\n Vertical Cursor Disabled\n \n Horizontal cursor disabled \n Horizontal cursor disabled \n Horizontal cursor disabled \n ')) + case 2 + set(text_box_2, 'String', sprintf(' Vertical Cursor Disabled\n Vertical Cursor Disabled\n Vertical Cursor Disabled\n \n V1 = %3.3e\n V2 = %3.3e\n DeltaV = %3.3e\n', gui_hori_cursor_a_pos, gui_hori_cursor_b_pos, gui_hori_cursor_a_pos - gui_hori_cursor_b_pos)) + case 3 + set(text_box_2, 'String', sprintf(' T1 = %3.3e\n T2 = %3.3e\n DeltaT = %3.3e\n \n Horizontal cursor disabled \n Horizontal cursor disabled \n Horizontal cursor disabled \n ', gui_vert_cursor_a_pos, gui_vert_cursor_b_pos, gui_vert_cursor_a_pos - gui_vert_cursor_b_pos)) + case 4 + set(text_box_2, 'String', sprintf(' T1 = %3.3e\n T2 = %3.3e\n DeltaT = %3.3e\n \n V1 = %3.3e\n V2 = %3.3e\n DeltaV = %3.3e\n', gui_vert_cursor_a_pos, gui_vert_cursor_b_pos, gui_vert_cursor_a_pos - gui_vert_cursor_b_pos, gui_hori_cursor_a_pos, gui_hori_cursor_b_pos, gui_hori_cursor_a_pos - gui_hori_cursor_b_pos)) + otherwise error('Gui_cursor_mode is invalid') +end + +% Hints: get(hObject,'Value') returns position of slider +% get(hObject,'Min') and get(hObject,'Max') to determine range of slider + + +% --- Executes during object creation, after setting all properties. +function slider3_CreateFcn(hObject, eventdata, handles) +% hObject handle to slider3 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: slider controls usually have a light gray background. +if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor',[.9 .9 .9]); +end + + + +function edit6_Callback(hObject, eventdata, handles) +% hObject handle to edit6 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +global gui_awg_waveform +gui_awg_waveform = get(hObject,'String'); + + +% Hints: get(hObject,'String') returns contents of edit6 as text +% str2double(get(hObject,'String')) returns contents of edit6 as a double + + +% --- Executes during object creation, after setting all properties. +function edit6_CreateFcn(hObject, eventdata, handles) +% hObject handle to edit6 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: edit controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end + + +% --- Executes on button press in pushbutton3. +function pushbutton3_Callback(hObject, eventdata, handles) +% hObject handle to pushbutton3 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) +global gui_awg_waveform +global gui_awg_amplitude +global gui_awg_frequency +gui_awg_waveform +gui_awg_amplitude +gui_awg_frequency +tiny_send_waveform(eval(gui_awg_waveform), str2num(gui_awg_amplitude), str2num(gui_awg_frequency)); + + +function edit7_Callback(hObject, eventdata, handles) +% hObject handle to edit7 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +global gui_awg_amplitude +gui_awg_amplitude = get(hObject,'String'); + +% Hints: get(hObject,'String') returns contents of edit7 as text +% str2double(get(hObject,'String')) returns contents of edit7 as a double + + +% --- Executes during object creation, after setting all properties. +function edit7_CreateFcn(hObject, eventdata, handles) +% hObject handle to edit7 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: edit controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end + + + +function edit8_Callback(hObject, eventdata, handles) +% hObject handle to edit8 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +global gui_awg_frequency +gui_awg_frequency = get(hObject,'String'); +% Hints: get(hObject,'String') returns contents of edit8 as text +% str2double(get(hObject,'String')) returns contents of edit8 as a double + + +% --- Executes during object creation, after setting all properties. +function edit8_CreateFcn(hObject, eventdata, handles) +% hObject handle to edit8 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: edit controls usually have a white background on Windows. +% See ISPC and COMPUTER. + +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end + + +% --- Executes on button press in pushbutton4. +function pushbutton4_Callback(hObject, eventdata, handles) +% hObject handle to pushbutton4 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) +global gui_scope_running +gui_scope_running = ~gui_scope_running + + + +function edit9_Callback(hObject, eventdata, handles) +% hObject handle to edit9 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +global gui_vo; +gui_vo = str2num(get(hObject, 'String')); + +% Hints: get(hObject,'String') returns contents of edit9 as text +% str2double(get(hObject,'String')) returns contents of edit9 as a double + + +% --- Executes during object creation, after setting all properties. +function edit9_CreateFcn(hObject, eventdata, handles) +% hObject handle to edit9 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: edit controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end + + + +function edit10_Callback(hObject, eventdata, handles) +% hObject handle to edit10 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) +global gui_ro; +gui_ro = str2num(get(hObject, 'String')); +% Hints: get(hObject,'String') returns contents of edit10 as text +% str2double(get(hObject,'String')) returns contents of edit10 as a double + + +% --- Executes during object creation, after setting all properties. +function edit10_CreateFcn(hObject, eventdata, handles) +% hObject handle to edit10 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: edit controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end + + +% --- Executes on button press in pushbutton5. +function pushbutton5_Callback(hObject, eventdata, handles) +global gui_vo +global gui_ro +setpsu(gui_vo, gui_ro); +% hObject handle to pushbutton5 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + + +% --- Executes on slider movement. +function slider4_Callback(hObject, eventdata, handles) +% hObject handle to slider4 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +global gui_vert_cursor_a_pos +global scope_window_time +global text_box_2 +global gui_cursor_mode + +gui_vert_cursor_a_pos = -scope_window_time + (scope_window_time) * get(hObject,'Value'); + +global gui_hori_cursor_a_pos +global gui_hori_cursor_b_pos +global gui_vert_cursor_b_pos +switch gui_cursor_mode + case 1 + set(text_box_2, 'String', sprintf(' Vertical Cursor Disabled\n Vertical Cursor Disabled\n Vertical Cursor Disabled\n \n Horizontal cursor disabled \n Horizontal cursor disabled \n Horizontal cursor disabled \n ')) + case 2 + set(text_box_2, 'String', sprintf(' Vertical Cursor Disabled\n Vertical Cursor Disabled\n Vertical Cursor Disabled\n \n V1 = %3.3e\n V2 = %3.3e\n DeltaV = %3.3e\n', gui_hori_cursor_a_pos, gui_hori_cursor_b_pos, gui_hori_cursor_a_pos - gui_hori_cursor_b_pos)) + case 3 + set(text_box_2, 'String', sprintf(' T1 = %3.3e\n T2 = %3.3e\n DeltaT = %3.3e\n \n Horizontal cursor disabled \n Horizontal cursor disabled \n Horizontal cursor disabled \n ', gui_vert_cursor_a_pos, gui_vert_cursor_b_pos, gui_vert_cursor_a_pos - gui_vert_cursor_b_pos)) + case 4 + set(text_box_2, 'String', sprintf(' T1 = %3.3e\n T2 = %3.3e\n DeltaT = %3.3e\n \n V1 = %3.3e\n V2 = %3.3e\n DeltaV = %3.3e\n', gui_vert_cursor_a_pos, gui_vert_cursor_b_pos, gui_vert_cursor_a_pos - gui_vert_cursor_b_pos, gui_hori_cursor_a_pos, gui_hori_cursor_b_pos, gui_hori_cursor_a_pos - gui_hori_cursor_b_pos)) + otherwise error('Gui_cursor_mode is invalid') +end + +% Hints: get(hObject,'Value') returns position of slider +% get(hObject,'Min') and get(hObject,'Max') to determine range of slider + + +% --- Executes during object creation, after setting all properties. +function slider4_CreateFcn(hObject, eventdata, handles) +% hObject handle to slider4 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: slider controls usually have a light gray background. +if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor',[.9 .9 .9]); +end + + +% --- Executes on slider movement. +function slider5_Callback(hObject, eventdata, handles) +% hObject handle to slider5 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +global gui_vert_cursor_b_pos +global scope_window_time +global text_box_2 +global gui_cursor_mode +gui_vert_cursor_b_pos = -scope_window_time + (scope_window_time) * get(hObject,'Value'); + +global gui_hori_cursor_a_pos +global gui_hori_cursor_b_pos +global gui_vert_cursor_a_pos +switch gui_cursor_mode + case 1 + set(text_box_2, 'String', sprintf(' Vertical Cursor Disabled\n Vertical Cursor Disabled\n Vertical Cursor Disabled\n \n Horizontal cursor disabled \n Horizontal cursor disabled \n Horizontal cursor disabled \n ')) + case 2 + set(text_box_2, 'String', sprintf(' Vertical Cursor Disabled\n Vertical Cursor Disabled\n Vertical Cursor Disabled\n \n V1 = %3.3e\n V2 = %3.3e\n DeltaV = %3.3e\n', gui_hori_cursor_a_pos, gui_hori_cursor_b_pos, gui_hori_cursor_a_pos - gui_hori_cursor_b_pos)) + case 3 + set(text_box_2, 'String', sprintf(' T1 = %3.3e\n T2 = %3.3e\n DeltaT = %3.3e\n \n Horizontal cursor disabled \n Horizontal cursor disabled \n Horizontal cursor disabled \n ', gui_vert_cursor_a_pos, gui_vert_cursor_b_pos, gui_vert_cursor_a_pos - gui_vert_cursor_b_pos)) + case 4 + set(text_box_2, 'String', sprintf(' T1 = %3.3e\n T2 = %3.3e\n DeltaT = %3.3e\n \n V1 = %3.3e\n V2 = %3.3e\n DeltaV = %3.3e\n', gui_vert_cursor_a_pos, gui_vert_cursor_b_pos, gui_vert_cursor_a_pos - gui_vert_cursor_b_pos, gui_hori_cursor_a_pos, gui_hori_cursor_b_pos, gui_hori_cursor_a_pos - gui_hori_cursor_b_pos)) + otherwise error('Gui_cursor_mode is invalid') +end + + +% Hints: get(hObject,'Value') returns position of slider +% get(hObject,'Min') and get(hObject,'Max') to determine range of slider + + +% --- Executes during object creation, after setting all properties. +function slider5_CreateFcn(hObject, eventdata, handles) +% hObject handle to slider5 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: slider controls usually have a light gray background. +if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor',[.9 .9 .9]); +end diff --git a/Old Matlab Interface/.svn/pristine/29/290c7bf876399b9cac7f5c4ed4285c05b25cd206.svn-base b/Old Matlab Interface/.svn/pristine/29/290c7bf876399b9cac7f5c4ed4285c05b25cd206.svn-base new file mode 100644 index 00000000..541af56e --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/29/290c7bf876399b9cac7f5c4ed4285c05b25cd206.svn-base @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/29/29c64fec6e69ca22f81ebf30fba87a8a76bf64b6.svn-base b/Old Matlab Interface/.svn/pristine/29/29c64fec6e69ca22f81ebf30fba87a8a76bf64b6.svn-base new file mode 100644 index 00000000..f6623d60 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/29/29c64fec6e69ca22f81ebf30fba87a8a76bf64b6.svn-base @@ -0,0 +1,130 @@ +#region Copyright(c) Travis Robinson +// Copyright (c) 2012 Travis Robinson +// All rights reserved. +// +// fHandleTest.cs +// +// Created: 03.02.2012 +// Last Updated: 03.03.2012 +// +// 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. +// +// 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 TRAVIS LEE ROBINSON +// 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. +#endregion + + +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Threading; +using System.Windows.Forms; +using libusbK; + + +namespace Handle.Test +{ + public partial class fHandleTest : Form + { + private LstK LstKField; + private List LstKList = new List(); + + private TextBoxTraceListener mListener; + + public fHandleTest() + { + InitializeComponent(); + } + + ~fHandleTest() + { + } + + private void createAndExplictlyDestroyToolStripMenuItem_Click(object sender, EventArgs e) + { + LstK lstTemp = new LstK(KLST_FLAG.NONE); + lstTemp.Dispose(); + } + + private void runGarbageCollectorToolStripMenuItem_Click(object sender, EventArgs e) + { + GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced); + } + + private void referenceToolStripMenuItem_Click(object sender, EventArgs e) + { + LstK lstTemp = new LstK(KLST_FLAG.NONE); + LstKList.Add(lstTemp); + LstKField = lstTemp; + } + + private void derefrenceToolStripMenuItem_Click(object sender, EventArgs e) + { + if (LstKList.Count > 0) + { + LstKList.Clear(); + } + else + { + LstKField = null; + } + } + + private void createWithoutExplictDestroyToolStripMenuItem_Click(object sender, EventArgs e) + { + LstK lstTemp = new LstK(KLST_FLAG.NONE); + int count = 0; + lstTemp.Count(ref count); + } + + private void fHandleTest_Load(object sender, EventArgs e) + { + mListener = new TextBoxTraceListener(txtOutput, ThreadPriority.Lowest); + Debug.Listeners.Add(mListener); + } + + private void fHandleTest_FormClosed(object sender, FormClosedEventArgs e) + { + Debug.Listeners.Remove(mListener); + mListener.Free(); + } + + private void exhaustAllHandlesToolStripMenuItem_Click(object sender, EventArgs e) + { + LstKList.Clear(); + LstKField = null; + int count = 0; + try + { + while (true) + { + new LstK(KLST_FLAG.NONE); + count++; + } + } + catch + { + } + + Debug.Print("All handles exhausted. Count:{0}", count); + } + + private void testListenerToolStripMenuItem_Click(object sender, EventArgs e) + { + new TestListener(64); + } + } +} \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/2b/2b3e861ba0c928f44218c33b357ee225b210861d.svn-base b/Old Matlab Interface/.svn/pristine/2b/2b3e861ba0c928f44218c33b357ee225b210861d.svn-base new file mode 100644 index 00000000..b1a4e14a --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/2b/2b3e861ba0c928f44218c33b357ee225b210861d.svn-base @@ -0,0 +1,11252 @@ +BEGIN PACKET 0 +182 +182 +182 +182 +182 +183 +183 +182 +183 +183 +183 +182 +182 +183 +182 +182 +182 +183 +182 +182 +182 +182 +182 +182 +181 +12 +11 +10 +11 +11 +11 +10 +182 +182 +183 +183 +182 +183 +182 +182 +182 +182 +183 +182 +182 +182 +181 +182 +183 +182 +183 +183 +182 +182 +182 +182 +182 +10 +9 +10 +11 +11 +11 +12 +182 +182 +182 +182 +182 +182 +182 +182 +182 +185 +183 +182 +183 +183 +180 +182 +179 +181 +181 +183 +183 +182 +182 +182 +182 +181 +182 +182 +182 +183 +183 +182 +182 +182 +182 +182 +182 +184 +183 +182 +182 +182 +182 +182 +182 +182 +182 +182 +12 +10 +10 +11 +11 +11 +10 +182 +182 +182 +182 +183 +182 +183 +182 +182 +183 +182 +182 +182 +182 +182 +179 +182 +182 +182 +182 +182 +182 +182 +182 +182 +12 +11 +11 +11 +11 +10 +11 +182 +182 +182 +181 +182 +182 +180 +182 +182 +183 +182 +183 +182 +182 +182 +182 +182 +182 +182 +182 +183 +182 +182 +182 +183 +13 +11 +10 +11 +11 +11 +11 +182 +182 +182 +182 +182 +182 +182 +183 +181 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +183 +182 +182 +182 +182 +12 +11 +11 +11 +11 +10 +10 +182 +182 +182 +182 +182 +182 +182 +184 +183 +182 +183 +183 +182 +182 +182 +182 +182 +182 +182 +183 +182 +182 +181 +182 +182 +11 +11 +11 +11 +11 +10 +11 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +183 +182 +182 +182 +182 +181 +182 +183 +182 +182 +182 +11 +11 +11 +11 +10 +11 +11 +183 +182 +182 +183 +182 +183 +182 +176 +182 +183 +182 +182 +183 +182 +182 +182 +182 +182 +182 +183 +182 +182 +183 +182 +182 +12 +11 +11 +11 +11 +10 +11 +182 +183 +182 +182 +183 +182 +182 +182 +182 +184 +182 +182 +182 +182 +184 +183 +182 +183 +182 +184 +182 +182 +182 +182 +185 +12 +11 +11 +11 +13 +10 +11 +182 +182 +180 +182 +182 +182 +182 +180 +182 +182 +183 +180 +179 +182 +182 +182 +182 +181 +182 +182 +182 +182 +182 +182 +182 +12 +11 +11 +11 +11 +10 +10 +183 +182 +12 +8 +11 +11 +11 +11 +11 +182 +182 +182 +182 +182 +182 +182 +183 +183 +183 +182 +182 +182 +184 +183 +182 +182 +182 +181 +183 +182 +182 +182 +183 +182 +12 +11 +11 +6 +11 +11 +11 +182 +181 +182 +182 +183 +182 +183 +182 +182 +182 +182 +181 +182 +182 +182 +183 +181 +182 +182 +183 +182 +183 +182 +182 +182 +12 +11 +10 +9 +11 +10 +10 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +183 +181 +183 +182 +183 +183 +13 +11 +11 +11 +10 +11 +11 +182 +182 +182 +182 +182 +182 +182 +182 +183 +182 +182 +183 +182 +183 +182 +183 +183 +182 +180 +182 +182 +182 +182 +183 +182 +12 +10 +10 +11 +11 +11 +10 +182 +182 +182 +182 +183 +183 +182 +182 +182 +181 +182 +182 +183 +182 +183 +183 +182 +182 +184 +182 +183 +183 +181 +182 +182 +12 +10 +10 +10 +11 +10 +10 +181 +182 +182 +182 +172 +182 +183 +182 +182 +182 +182 +182 +185 +182 +182 +183 +182 +182 +182 +183 +182 +182 +182 +182 +182 +12 +11 +11 +11 +12 +10 +10 +182 +182 +182 +182 +182 +182 +182 +183 +181 +182 +182 +182 +182 +182 +182 +183 +182 +183 +182 +183 +183 +183 +182 +182 +182 +12 +11 +10 +12 +11 +10 +11 +182 +182 +183 +182 +183 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +183 +183 +182 +183 +182 +183 +182 +182 +182 +12 +11 +11 +12 +10 +11 +11 +182 +182 +183 +182 +182 +182 +182 +183 +182 +183 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +12 +11 +11 +11 +10 +10 +10 +183 +182 +182 +182 +182 +182 +182 +183 +182 +182 +183 +182 +182 +182 +182 +182 +180 +183 +182 +182 +182 +188 +183 +182 +182 +12 +12 +11 +11 +11 +11 +8 +182 +182 +182 +182 +183 +182 +182 +182 +182 +183 +183 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +183 +179 +183 +12 +11 +11 +10 +10 +10 +10 +182 +182 +182 +182 +183 +183 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +183 +182 +183 +183 +182 +182 +181 +182 +182 +182 +183 +183 +182 +182 +184 +183 +184 +11 +11 +9 +9 +9 +12 +11 +182 +183 +183 +180 +182 +182 +183 +181 +183 +182 +181 +182 +183 +183 +182 +181 +182 +182 +181 +181 +182 +182 +183 +183 +182 +12 +11 +10 +11 +10 +10 +5 +183 +183 +184 +181 +183 +182 +181 +182 +181 +182 +183 +183 +183 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +181 +183 +11 +11 +10 +11 +12 +11 +9 +180 +181 +180 +183 +183 +182 +182 +183 +183 +182 +182 +181 +182 +181 +182 +182 +12 +10 +11 +11 +11 +11 +11 +182 +182 +182 +183 +182 +182 +182 +182 +182 +182 +183 +183 +182 +183 +182 +182 +181 +182 +182 +182 +182 +182 +182 +181 +183 +11 +10 +11 +11 +10 +9 +10 +183 +183 +183 +183 +182 +182 +182 +182 +181 +182 +182 +182 +182 +183 +181 +183 +182 +182 +182 +182 +182 +182 +181 +182 +182 +12 +10 +11 +10 +11 +11 +10 +182 +182 +181 +182 +182 +182 +183 +182 +182 +182 +182 +182 +182 +181 +182 +182 +182 +182 +182 +182 +182 +182 +183 +182 +182 +12 +11 +11 +11 +10 +11 +11 +182 +182 +183 +182 +183 +182 +183 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +181 +183 +180 +183 +182 +182 +183 +182 +11 +11 +10 +11 +11 +11 +11 +182 +182 +182 +182 +182 +182 +183 +182 +183 +182 +182 +182 +182 +181 +182 +182 +182 +182 +182 +182 +183 +182 +182 +182 +182 +12 +10 +10 +11 +11 +11 +10 +182 +182 +183 +181 +183 +182 +183 +182 +184 +182 +182 +183 +183 +180 +182 +182 +182 +183 +182 +182 +182 +183 +182 +186 +182 +12 +12 +10 +12 +11 +11 +11 +182 +188 +181 +183 +182 +182 +179 +182 +183 +183 +182 +189 +182 +182 +182 +182 +181 +182 +183 +182 +183 +183 +181 +180 +182 +10 +9 +10 +11 +11 +11 +9 +182 +181 +181 +183 +181 +183 +183 +182 +183 +181 +182 +182 +181 +182 +183 +183 +184 +182 +182 +182 +181 +182 +181 +182 +182 +12 +11 +11 +10 +10 +10 +10 +182 +183 +183 +180 +182 +182 +180 +181 +182 +182 +183 +183 +182 +182 +183 +183 +183 +183 +182 +182 +182 +182 +181 +181 +183 +181 +182 +181 +183 +182 +183 +182 +182 +182 +11 +10 +11 +11 +11 +10 +11 +182 +184 +183 +184 +182 +183 +181 +183 +183 +180 +182 +181 +182 +182 +182 +182 +180 +180 +182 +181 +182 +181 +182 +183 +184 +13 +11 +10 +10 +10 +10 +10 +181 +183 +182 +186 +184 +183 +181 +183 +182 +182 +182 +182 +182 +182 +183 +179 +182 +182 +183 +182 +182 +182 +182 +183 +182 +10 +10 +11 +11 +183 +182 +182 +182 +180 +181 +183 +182 +182 +183 +182 +182 +182 +181 +182 +185 +183 +183 +182 +12 +10 +10 +10 +9 +11 +11 +183 +183 +182 +183 +182 +182 +180 +182 +182 +183 +182 +180 +182 +181 +181 +184 +182 +183 +183 +181 +182 +183 +181 +184 +183 +12 +14 +10 +12 +9 +9 +11 +183 +183 +183 +181 +183 +181 +181 +183 +182 +183 +183 +181 +181 +181 +182 +182 +183 +183 +182 +182 +182 +182 +183 +181 +182 +12 +12 +12 +12 +11 +11 +10 +181 +182 +183 +183 +184 +182 +182 +181 +182 +181 +183 +183 +182 +182 +178 +182 +183 +182 +180 +181 +181 +182 +183 +182 +184 +13 +9 +10 +10 +13 +12 +12 +182 +182 +183 +182 +183 +182 +181 +183 +182 +182 +183 +182 +183 +182 +182 +183 +183 +182 +181 +182 +181 +182 +182 +185 +183 +14 +10 +11 +9 +9 +10 +10 +183 +183 +183 +183 +182 +183 +182 +182 +183 +182 +182 +181 +181 +182 +183 +182 +182 +182 +182 +183 +181 +182 +183 +183 +181 +12 +11 +10 +11 +11 +10 +10 +183 +182 +181 +183 +182 +183 +183 +183 +183 +184 +182 +182 +182 +182 +182 +181 +183 +183 +182 +183 +182 +183 +182 +182 +182 +13 +10 +11 +11 +11 +11 +10 +182 +182 +182 +183 +184 +183 +184 +182 +185 +183 +182 +182 +181 +182 +181 +182 +183 +182 +181 +182 +183 +183 +183 +182 +182 +11 +11 +11 +10 +8 +8 +10 +182 +182 +183 +183 +183 +182 +182 +182 +182 +182 +182 +181 +182 +185 +182 +182 +182 +182 +182 +182 +184 +182 +182 +182 +182 +13 +10 +11 +12 +10 +10 +11 +181 +182 +182 +183 +183 +11 +12 +10 +11 +183 +182 +182 +182 +182 +183 +183 +183 +183 +182 +182 +183 +183 +182 +182 +182 +181 +181 +182 +182 +181 +184 +182 +182 +182 +12 +11 +11 +11 +11 +11 +10 +182 +181 +182 +184 +183 +182 +181 +182 +183 +183 +183 +184 +182 +182 +182 +182 +182 +183 +182 +183 +183 +183 +182 +182 +183 +13 +11 +11 +11 +10 +10 +11 +183 +182 +181 +182 +182 +181 +182 +182 +182 +182 +183 +183 +183 +182 +182 +182 +183 +183 +181 +182 +181 +11 +10 +180 +181 +182 +181 +183 +182 +182 +182 +182 +183 +182 +182 +182 +181 +182 +182 +180 +180 +182 +181 +182 +182 +183 +182 +182 +12 +10 +11 +10 +10 +11 +11 +182 +183 +183 +182 +183 +181 +183 +182 +181 +182 +181 +181 +183 +182 +182 +182 +182 +182 +182 +183 +183 +183 +182 +183 +181 +10 +11 +9 +11 +10 +10 +10 +183 +182 +182 +183 +183 +182 +182 +181 +182 +183 +182 +182 +181 +183 +182 +181 +182 +182 +182 +182 +183 +185 +184 +183 +184 +9 +11 +9 +10 +10 +11 +10 +182 +182 +182 +182 +183 +182 +183 +182 +182 +183 +184 +182 +182 +183 +181 +181 +182 +181 +181 +182 +182 +183 +182 +182 +182 +12 +10 +7 +10 +8 +10 +10 +181 +181 +182 +182 +180 +183 +183 +183 +183 +182 +182 +182 +181 +180 +182 +182 +182 +184 +182 +183 +182 +183 +182 +183 +183 +12 +11 +7 +9 +10 +10 +8 +181 +182 +182 +183 +184 +186 +182 +181 +179 +182 +186 +182 +182 +183 +182 +186 +182 +182 +182 +182 +185 +181 +182 +183 +184 +12 +11 +12 +10 +10 +9 +11 +182 +182 +181 +181 +181 +182 +181 +182 +182 +182 +184 +183 +182 +182 +183 +182 +182 +182 +178 +183 +181 +182 +182 +182 +182 +12 +11 +11 +11 +11 +10 +11 +182 +183 +181 +183 +182 +182 +181 +181 +183 +181 +183 +182 +183 +183 +182 +182 +182 +182 +184 +183 +183 +182 +182 +182 +181 +12 +10 +11 +11 +11 +12 +10 +183 +182 +182 +182 +182 +182 +182 +182 +185 +183 +181 +182 +182 +182 +181 +182 +183 +184 +183 +184 +182 +183 +182 +182 +182 +11 +10 +10 +186 +182 +182 +183 +182 +182 +12 +10 +10 +11 +11 +11 +11 +182 +181 +181 +183 +184 +182 +182 +183 +182 +183 +183 +178 +182 +181 +182 +182 +186 +183 +184 +182 +182 +182 +186 +182 +182 +11 +12 +12 +10 +10 +10 +11 +183 +184 +182 +181 +183 +182 +183 +183 +182 +181 +181 +183 +182 +181 +182 +183 +183 +182 +180 +182 +182 +182 +183 +181 +182 +11 +10 +11 +11 +11 +8 +10 +182 +182 +183 +183 +182 +181 +183 +183 +182 +182 +182 +181 +182 +184 +183 +182 +11 +10 +11 +11 +12 +11 +11 +182 +181 +183 +182 +183 +181 +182 +182 +181 +183 +184 +181 +182 +182 +180 +182 +183 +183 +183 +181 +183 +182 +182 +181 +183 +11 +11 +12 +12 +10 +9 +10 +181 +183 +183 +181 +180 +182 +182 +184 +183 +182 +182 +182 +183 +183 +182 +181 +182 +182 +181 +181 +182 +183 +184 +182 +185 +11 +10 +10 +11 +11 +10 +11 +182 +182 +182 +182 +182 +183 +182 +182 +182 +184 +182 +183 +182 +181 +183 +182 +182 +183 +186 +181 +182 +181 +182 +183 +181 +11 +9 +12 +11 +11 +11 +7 +182 +182 +181 +183 +181 +181 +182 +183 +182 +180 +183 +182 +183 +183 +182 +182 +182 +182 +182 +183 +182 +183 +182 +182 +182 +10 +10 +11 +12 +11 +11 +11 +182 +181 +183 +182 +182 +181 +181 +182 +183 +183 +183 +183 +182 +182 +182 +183 +183 +181 +182 +182 +182 +183 +182 +181 +183 +11 +11 +11 +9 +11 +9 +11 +182 +181 +182 +182 +182 +182 +182 +183 +181 +183 +183 +182 +183 +181 +182 +182 +183 +183 +182 +183 +181 +184 +183 +184 +182 +11 +11 +11 +11 +12 +11 +11 +181 +182 +182 +182 +182 +183 +183 +182 +182 +183 +181 +181 +183 +182 +182 +182 +182 +181 +183 +180 +180 +182 +182 +183 +182 +13 +10 +11 +11 +10 +11 +9 +183 +182 +181 +183 +182 +183 +182 +181 +182 +182 +184 +183 +182 +182 +182 +182 +183 +183 +182 +182 +181 +183 +183 +184 +182 +12 +10 +11 +12 +11 +11 +10 +182 +182 +182 +182 +183 +183 +182 +182 +182 +182 +180 +182 +182 +183 +182 +182 +182 +183 +183 +181 +182 +183 +184 +182 +183 +182 +181 +183 +184 +182 +182 +182 +181 +183 +13 +9 +8 +11 +11 +11 +11 +184 +184 +182 +183 +183 +182 +182 +182 +183 +183 +182 +182 +181 +184 +182 +182 +181 +182 +182 +183 +184 +182 +182 +182 +182 +12 +11 +11 +9 +10 +10 +11 +183 +183 +182 +181 +183 +183 +182 +182 +182 +183 +182 +181 +183 +182 +182 +182 +183 +182 +182 +182 +183 +181 +182 +182 +182 +12 +10 +10 +10 +12 +10 +12 +182 +181 +182 +179 +181 +182 +181 +182 +181 +183 +182 +184 +183 +184 +181 +177 +12 +11 +11 +10 +11 +11 +11 +182 +182 +182 +183 +182 +182 +183 +182 +182 +182 +183 +182 +182 +182 +182 +182 +183 +182 +184 +182 +182 +182 +182 +182 +182 +11 +10 +11 +11 +15 +10 +10 +182 +182 +183 +183 +183 +181 +182 +182 +183 +182 +180 +180 +182 +183 +183 +183 +183 +181 +183 +182 +182 +181 +182 +185 +182 +12 +10 +11 +11 +10 +10 +9 +181 +183 +182 +182 +182 +183 +182 +183 +183 +183 +181 +181 +182 +182 +183 +182 +182 +182 +182 +183 +182 +181 +183 +183 +182 +12 +11 +10 +15 +11 +12 +11 +182 +182 +183 +180 +181 +182 +183 +183 +182 +182 +181 +182 +183 +184 +182 +183 +181 +182 +182 +183 +183 +183 +185 +182 +183 +12 +9 +11 +11 +11 +11 +9 +181 +183 +182 +183 +182 +182 +182 +184 +182 +184 +182 +181 +182 +182 +181 +182 +182 +182 +184 +182 +183 +182 +182 +182 +181 +12 +11 +10 +10 +11 +12 +11 +183 +180 +184 +184 +180 +182 +182 +183 +182 +181 +182 +183 +183 +182 +182 +181 +183 +183 +184 +182 +181 +183 +182 +183 +183 +11 +9 +11 +11 +11 +10 +9 +182 +183 +183 +182 +182 +182 +182 +182 +183 +182 +180 +182 +182 +183 +183 +182 +181 +182 +182 +183 +182 +183 +182 +182 +182 +10 +10 +11 +12 +11 +10 +10 +182 +183 +185 +182 +182 +181 +181 +182 +183 +181 +181 +182 +183 +182 +183 +182 +182 +183 +182 +180 +182 +182 +182 +182 +182 +11 +11 +9 +11 +11 +11 +10 +182 +184 +184 +182 +183 +182 +182 +182 +182 +182 +184 +181 +182 +182 +182 +182 +182 +180 +183 +182 +183 +183 +181 +182 +182 +183 +183 +184 +182 +182 +183 +182 +182 +181 +12 +11 +11 +12 +11 +10 +10 +183 +183 +181 +180 +182 +184 +182 +182 +182 +182 +182 +182 +182 +181 +182 +183 +183 +179 +181 +182 +182 +182 +182 +182 +181 +11 +11 +11 +11 +9 +10 +11 +184 +185 +182 +182 +183 +183 +182 +183 +183 +183 +182 +182 +181 +181 +181 +182 +182 +182 +179 +182 +183 +181 +182 +183 +181 +183 +183 +183 +182 +182 +183 +182 +182 +181 +181 +183 +181 +181 +180 +184 +181 +180 +182 +183 +185 +181 +182 +182 +14 +12 +12 +10 +11 +11 +11 +182 +183 +182 +183 +182 +183 +184 +182 +181 +181 +182 +184 +183 +182 +181 +182 +184 +183 +183 +182 +179 +182 +182 +182 +181 +10 +12 +11 +10 +10 +10 +8 +182 +183 +182 +181 +182 +181 +181 +182 +182 +184 +183 +181 +182 +181 +183 +182 +180 +182 +183 +183 +182 +182 +181 +182 +183 +12 +10 +9 +11 +10 +11 +11 +181 +181 +183 +184 +182 +182 +182 +182 +183 +182 +182 +182 +182 +182 +182 +183 +184 +182 +181 +182 +181 +182 +182 +180 +180 +12 +11 +11 +10 +10 +11 +10 +182 +183 +182 +182 +182 +182 +183 +183 +182 +182 +181 +184 +184 +183 +183 +181 +181 +182 +183 +182 +183 +182 +182 +182 +182 +10 +10 +11 +11 +11 +10 +11 +182 +182 +184 +183 +183 +181 +182 +181 +182 +183 +181 +182 +181 +183 +182 +182 +183 +182 +182 +183 +182 +183 +183 +182 +181 +12 +11 +13 +11 +12 +10 +9 +182 +181 +182 +182 +181 +182 +182 +182 +182 +182 +182 +177 +184 +182 +181 +183 +182 +183 +183 +181 +181 +183 +182 +183 +181 +12 +11 +11 +11 +9 +11 +11 +182 +182 +182 +182 +182 +183 +182 +182 +182 +182 +182 +183 +183 +183 +185 +182 +182 +182 +183 +183 +183 +183 +183 +182 +181 +11 +10 +11 +11 +12 +10 +10 +182 +184 +183 +182 +182 +182 +183 +182 +182 +182 +181 +182 +182 +181 +182 +183 +182 +182 +182 +182 +182 +183 +183 +182 +182 +11 +12 +11 +10 +10 +10 +11 +182 +183 +13 +11 +11 +10 +10 +12 +12 +182 +184 +182 +181 +182 +182 +182 +182 +181 +184 +184 +182 +184 +182 +183 +183 +183 +182 +182 +183 +181 +182 +182 +181 +183 +11 +9 +11 +11 +10 +11 +10 +182 +183 +182 +182 +181 +181 +183 +183 +182 +182 +181 +182 +183 +183 +182 +181 +182 +183 +184 +182 +182 +183 +182 +182 +183 +12 +11 +12 +10 +11 +7 +10 +182 +181 +182 +180 +182 +183 +181 +181 +183 +183 +181 +182 +182 +182 +181 +182 +12 +11 +10 +9 +10 +10 +12 +181 +182 +181 +182 +183 +181 +182 +182 +183 +182 +181 +182 +183 +183 +185 +181 +182 +182 +183 +183 +182 +182 +183 +182 +182 +11 +10 +10 +12 +10 +11 +11 +183 +182 +184 +185 +181 +181 +182 +183 +181 +181 +182 +182 +181 +182 +183 +182 +181 +183 +182 +181 +180 +181 +182 +183 +180 +12 +11 +9 +9 +11 +12 +10 +181 +183 +182 +182 +183 +183 +182 +182 +182 +183 +181 +182 +182 +183 +181 +183 +187 +183 +182 +182 +182 +183 +184 +182 +184 +11 +10 +11 +12 +11 +11 +10 +182 +182 +182 +182 +183 +182 +183 +182 +180 +183 +183 +182 +181 +182 +182 +184 +182 +184 +182 +181 +182 +182 +182 +182 +181 +12 +12 +12 +11 +11 +11 +11 +181 +183 +183 +183 +182 +181 +182 +182 +183 +183 +182 +182 +183 +183 +181 +181 +182 +182 +183 +181 +181 +182 +182 +182 +181 +12 +10 +11 +10 +11 +11 +10 +182 +181 +182 +182 +182 +182 +183 +184 +182 +182 +182 +182 +182 +182 +182 +182 +181 +183 +183 +181 +181 +182 +183 +182 +181 +12 +9 +11 +12 +10 +10 +8 +182 +183 +183 +183 +181 +183 +182 +182 +182 +183 +184 +183 +182 +182 +183 +183 +182 +183 +182 +182 +182 +182 +183 +182 +181 +12 +11 +11 +11 +11 +11 +10 +182 +182 +181 +181 +183 +177 +181 +182 +181 +184 +182 +182 +181 +183 +183 +184 +184 +181 +181 +182 +182 +182 +182 +182 +184 +11 +10 +10 +10 +11 +15 +10 +182 +183 +183 +182 +182 +183 +182 +183 +182 +181 +183 +181 +182 +183 +182 +182 +182 +182 +180 +183 +183 +181 +180 +182 +182 +183 +181 +182 +182 +183 +184 +182 +181 +182 +11 +12 +11 +11 +10 +11 +12 +183 +181 +181 +182 +182 +182 +182 +182 +182 +182 +182 +184 +182 +181 +182 +182 +182 +183 +181 +182 +183 +186 +183 +182 +182 +11 +11 +11 +10 +10 +11 +11 +181 +183 +183 +182 +182 +182 +182 +182 +183 +181 +180 +183 +182 +184 +182 +182 +181 +182 +183 +181 +183 +182 +183 +180 +183 +12 +10 +10 +11 +12 +10 +10 +181 +182 +183 +184 +183 +181 +182 +183 +182 +181 +182 +182 +181 +182 +179 +180 +12 +11 +11 +10 +11 +10 +13 +182 +181 +181 +181 +181 +182 +182 +182 +182 +182 +183 +181 +182 +182 +179 +182 +182 +183 +184 +180 +181 +182 +183 +182 +184 +11 +10 +10 +10 +10 +10 +10 +182 +182 +182 +182 +182 +183 +182 +180 +182 +183 +182 +181 +181 +181 +181 +183 +183 +181 +182 +182 +182 +181 +181 +182 +181 +10 +10 +10 +9 +11 +10 +10 +182 +182 +182 +181 +183 +184 +182 +182 +184 +183 +182 +180 +182 +182 +182 +183 +184 +182 +181 +183 +185 +183 +183 +182 +184 +12 +10 +11 +11 +11 +11 +11 +181 +182 +183 +182 +183 +182 +183 +181 +183 +182 +183 +182 +182 +182 +182 +182 +181 +182 +183 +183 +183 +182 +181 +182 +181 +13 +12 +8 +10 +10 +11 +10 +183 +184 +182 +183 +182 +182 +183 +183 +182 +182 +181 +181 +183 +183 +182 +181 +182 +182 +183 +183 +182 +182 +183 +182 +182 +12 +11 +11 +11 +10 +11 +10 +181 +182 +182 +181 +182 +186 +183 +183 +181 +181 +183 +183 +182 +182 +182 +181 +182 +182 +182 +183 +184 +183 +182 +177 +181 +13 +11 +10 +10 +10 +11 +11 +182 +182 +181 +182 +183 +182 +183 +182 +182 +182 +182 +180 +182 +182 +182 +181 +183 +182 +183 +184 +182 +179 +182 +182 +185 +11 +12 +10 +11 +10 +11 +10 +182 +181 +182 +182 +182 +182 +183 +183 +182 +182 +183 +182 +183 +183 +182 +181 +183 +183 +182 +180 +182 +183 +182 +183 +182 +13 +11 +10 +11 +10 +11 +11 +181 +181 +183 +184 +182 +182 +183 +183 +184 +183 +182 +182 +182 +182 +182 +182 +182 +181 +183 +182 +182 +182 +182 +182 +181 +182 +182 +182 +182 +184 +182 +183 +181 +182 +12 +12 +10 +10 +10 +10 +12 +182 +183 +183 +184 +185 +182 +182 +182 +179 +182 +182 +181 +182 +181 +182 +182 +184 +182 +184 +181 +181 +182 +181 +182 +184 +12 +10 +11 +11 +11 +11 +11 +182 +182 +182 +183 +181 +181 +183 +183 +181 +182 +182 +182 +182 +182 +176 +181 +182 +182 +184 +182 +182 +181 +182 +182 +182 +11 +9 +10 +181 +182 +183 +182 +183 +181 +182 +183 +182 +182 +183 +183 +188 +183 +182 +181 +183 +186 +182 +183 +12 +11 +12 +10 +11 +10 +11 +182 +180 +183 +183 +182 +182 +183 +182 +182 +183 +182 +183 +185 +183 +184 +183 +181 +182 +183 +181 +181 +183 +181 +181 +180 +12 +10 +11 +11 +10 +10 +10 +182 +182 +181 +181 +182 +182 +183 +183 +182 +182 +182 +182 +184 +182 +182 +181 +180 +183 +182 +180 +182 +181 +181 +182 +182 +12 +11 +10 +11 +10 +12 +11 +182 +181 +182 +183 +182 +182 +182 +181 +182 +182 +183 +183 +182 +182 +183 +182 +181 +182 +181 +183 +183 +184 +182 +183 +183 +11 +10 +10 +10 +11 +10 +10 +182 +182 +182 +182 +182 +182 +182 +183 +183 +182 +182 +182 +185 +183 +179 +183 +182 +181 +182 +183 +184 +182 +182 +182 +181 +13 +12 +10 +11 +11 +11 +10 +181 +183 +181 +183 +183 +182 +181 +181 +183 +182 +183 +181 +181 +183 +183 +183 +183 +185 +183 +183 +182 +182 +182 +182 +182 +13 +12 +10 +10 +10 +11 +11 +182 +183 +181 +181 +183 +183 +181 +181 +183 +182 +183 +182 +182 +179 +182 +183 +184 +181 +181 +182 +182 +183 +183 +182 +181 +12 +11 +10 +10 +10 +11 +10 +182 +182 +182 +183 +182 +182 +182 +181 +182 +183 +180 +182 +183 +182 +183 +181 +179 +180 +183 +183 +184 +182 +182 +183 +182 +12 +11 +11 +10 +11 +11 +11 +182 +181 +182 +182 +183 +185 +182 +182 +183 +183 +183 +183 +185 +182 +182 +183 +182 +182 +184 +182 +182 +182 +182 +183 +183 +12 +12 +10 +11 +10 +11 +12 +181 +181 +182 +182 +182 +182 +10 +10 +9 +182 +183 +181 +180 +182 +182 +183 +182 +182 +181 +183 +182 +185 +182 +184 +182 +182 +178 +183 +182 +182 +182 +184 +185 +182 +12 +10 +9 +11 +12 +11 +10 +182 +182 +182 +180 +182 +182 +182 +182 +183 +182 +182 +182 +182 +182 +182 +183 +182 +182 +183 +182 +182 +181 +183 +182 +183 +12 +10 +10 +10 +11 +10 +11 +183 +180 +183 +182 +182 +183 +185 +181 +181 +182 +184 +182 +183 +182 +182 +183 +181 +182 +10 +10 +12 +10 +10 +181 +181 +183 +183 +182 +181 +182 +182 +183 +183 +180 +180 +182 +182 +182 +181 +182 +181 +181 +181 +181 +182 +183 +182 +182 +11 +10 +10 +10 +10 +10 +11 +181 +181 +182 +182 +182 +181 +182 +179 +181 +181 +183 +183 +182 +179 +182 +183 +183 +181 +180 +181 +181 +182 +183 +181 +181 +11 +11 +10 +10 +10 +10 +12 +182 +181 +182 +181 +182 +181 +182 +182 +182 +182 +183 +183 +182 +181 +182 +181 +182 +184 +185 +182 +179 +182 +182 +183 +182 +12 +10 +13 +12 +13 +10 +8 +186 +182 +182 +183 +182 +178 +182 +182 +181 +183 +184 +182 +181 +182 +183 +183 +182 +182 +182 +183 +183 +182 +182 +183 +182 +11 +11 +10 +10 +10 +10 +10 +182 +183 +181 +182 +181 +182 +183 +182 +182 +183 +184 +182 +183 +182 +181 +183 +184 +181 +181 +182 +182 +182 +181 +182 +181 +12 +11 +11 +10 +10 +12 +12 +181 +181 +182 +182 +184 +182 +182 +182 +182 +181 +182 +182 +182 +181 +182 +183 +183 +182 +182 +181 +184 +182 +182 +182 +181 +11 +11 +12 +11 +11 +10 +9 +182 +184 +182 +181 +182 +183 +183 +181 +182 +182 +184 +182 +183 +182 +182 +183 +183 +181 +180 +182 +182 +182 +182 +181 +182 +12 +10 +10 +12 +12 +11 +11 +182 +181 +182 +183 +183 +182 +182 +184 +184 +182 +183 +182 +182 +183 +184 +181 +181 +182 +182 +182 +181 +182 +180 +183 +183 +12 +10 +9 +10 +10 +11 +10 +182 +182 +182 +182 +182 +182 +183 +181 +182 +181 +182 +183 +181 +182 +182 +183 +179 +182 +181 +182 +182 +182 +181 +183 +182 +11 +11 +10 +10 +182 +182 +182 +183 +183 +12 +11 +10 +9 +12 +11 +9 +181 +181 +183 +183 +184 +181 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +184 +183 +183 +181 +181 +182 +182 +12 +11 +11 +10 +10 +12 +11 +183 +182 +182 +182 +182 +182 +182 +182 +183 +180 +182 +182 +184 +182 +183 +182 +181 +183 +183 +186 +182 +182 +181 +182 +185 +11 +10 +12 +10 +10 +10 +10 +182 +181 +182 +182 +182 +182 +181 +182 +183 +182 +183 +182 +181 +183 +181 +181 +12 +11 +12 +10 +11 +10 +9 +184 +183 +183 +182 +183 +182 +183 +182 +181 +182 +183 +182 +182 +182 +182 +183 +182 +182 +182 +182 +183 +182 +182 +183 +182 +11 +11 +12 +9 +8 +8 +11 +183 +181 +182 +182 +183 +182 +180 +180 +181 +182 +183 +183 +181 +182 +182 +184 +182 +182 +182 +182 +183 +183 +182 +181 +182 +11 +11 +10 +10 +11 +12 +10 +174 +182 +182 +181 +184 +181 +181 +182 +182 +181 +179 +183 +182 +182 +182 +183 +183 +181 +183 +184 +182 +182 +182 +181 +182 +11 +10 +10 +8 +11 +11 +10 +181 +182 +183 +182 +184 +181 +181 +183 +184 +181 +182 +183 +182 +182 +182 +182 +182 +182 +182 +183 +182 +182 +183 +182 +182 +12 +8 +10 +12 +11 +10 +9 +182 +182 +184 +182 +182 +183 +182 +181 +182 +182 +181 +182 +181 +185 +182 +182 +182 +186 +183 +183 +182 +181 +180 +183 +182 +12 +9 +8 +11 +11 +11 +11 +182 +182 +182 +183 +182 +182 +179 +182 +183 +182 +182 +182 +183 +183 +182 +183 +182 +181 +183 +182 +183 +182 +183 +182 +182 +12 +11 +12 +12 +10 +9 +11 +182 +180 +183 +182 +181 +182 +183 +181 +180 +182 +182 +183 +182 +182 +182 +183 +184 +182 +182 +184 +182 +180 +183 +183 +183 +11 +10 +11 +11 +10 +10 +11 +184 +181 +181 +182 +182 +182 +182 +181 +181 +182 +183 +182 +182 +181 +182 +183 +185 +182 +182 +182 +182 +183 +183 +182 +182 +12 +11 +11 +11 +10 +11 +11 +182 +181 +182 +183 +184 +182 +181 +182 +183 +182 +183 +182 +182 +183 +183 +182 +181 +181 +183 +182 +182 +181 +182 +183 +184 +182 +180 +182 +182 +182 +181 +182 +183 +184 +11 +11 +11 +11 +11 +11 +10 +182 +182 +182 +181 +182 +182 +184 +181 +182 +182 +183 +181 +182 +183 +181 +182 +183 +185 +181 +182 +182 +183 +182 +183 +182 +11 +11 +12 +11 +10 +11 +12 +182 +182 +182 +182 +182 +182 +180 +182 +183 +183 +181 +182 +182 +184 +181 +182 +181 +182 +182 +183 +182 +182 +181 +181 +183 +13 +10 +11 +7 +10 +13 +183 +183 +182 +180 +182 +181 +184 +183 +182 +180 +182 +182 +182 +183 +182 +181 +183 +13 +12 +10 +10 +10 +11 +10 +182 +182 +181 +181 +183 +183 +181 +182 +181 +183 +182 +182 +182 +183 +182 +182 +183 +183 +182 +182 +183 +181 +182 +180 +184 +12 +10 +9 +11 +11 +11 +11 +181 +182 +182 +182 +182 +182 +181 +183 +184 +183 +182 +182 +180 +183 +183 +183 +182 +182 +183 +183 +182 +183 +182 +182 +181 +12 +11 +11 +10 +10 +10 +11 +182 +181 +182 +181 +182 +183 +182 +181 +181 +183 +183 +182 +181 +181 +182 +182 +181 +182 +182 +182 +182 +183 +183 +180 +182 +13 +9 +10 +10 +10 +10 +11 +182 +182 +179 +182 +183 +182 +182 +182 +183 +182 +183 +181 +182 +182 +181 +183 +182 +182 +183 +182 +181 +182 +183 +183 +182 +10 +10 +10 +11 +11 +10 +11 +182 +183 +183 +182 +182 +182 +182 +181 +184 +183 +182 +182 +181 +182 +183 +182 +183 +181 +182 +182 +183 +182 +182 +182 +182 +12 +11 +10 +10 +11 +10 +12 +182 +183 +183 +183 +184 +182 +182 +182 +182 +179 +183 +183 +182 +183 +182 +182 +182 +183 +182 +183 +182 +181 +182 +182 +183 +10 +8 +10 +11 +11 +10 +11 +181 +182 +183 +182 +182 +182 +183 +182 +182 +181 +183 +182 +183 +182 +180 +183 +182 +182 +182 +183 +181 +183 +182 +180 +181 +11 +11 +9 +10 +11 +11 +12 +181 +181 +179 +183 +182 +182 +182 +182 +185 +182 +181 +182 +181 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +181 +12 +11 +11 +9 +12 +11 +10 +182 +182 +182 +182 +182 +182 +180 +183 +182 +183 +181 +184 +182 +182 +182 +183 +184 +182 +181 +183 +183 +181 +182 +183 +183 +182 +182 +182 +182 +182 +182 +182 +182 +182 +11 +11 +11 +11 +11 +11 +10 +180 +179 +182 +182 +182 +183 +182 +183 +182 +181 +182 +183 +182 +182 +181 +182 +182 +182 +183 +183 +182 +182 +182 +180 +180 +12 +10 +12 +12 +11 +11 +11 +181 +183 +182 +182 +182 +184 +182 +182 +182 +183 +182 +181 +182 +181 +182 +183 +182 +183 +181 +182 +181 +13 +9 +181 +181 +186 +182 +182 +182 +184 +183 +181 +182 +180 +184 +183 +182 +182 +182 +183 +186 +182 +182 +182 +182 +183 +181 +181 +12 +13 +11 +10 +10 +10 +10 +183 +182 +181 +182 +182 +181 +181 +182 +182 +182 +182 +181 +182 +182 +183 +184 +181 +181 +183 +183 +182 +181 +185 +182 +183 +12 +10 +8 +10 +10 +10 +10 +180 +183 +182 +182 +181 +183 +181 +181 +182 +183 +181 +181 +182 +183 +182 +182 +182 +183 +181 +181 +183 +183 +183 +181 +182 +12 +11 +10 +10 +10 +11 +11 +181 +182 +183 +182 +182 +182 +182 +183 +182 +182 +182 +183 +181 +181 +183 +183 +184 +181 +182 +182 +182 +182 +182 +181 +182 +12 +10 +10 +10 +11 +10 +8 +180 +182 +183 +182 +181 +182 +183 +184 +182 +181 +182 +182 +183 +181 +181 +183 +185 +182 +183 +183 +182 +183 +183 +182 +181 +12 +11 +9 +9 +10 +11 +11 +181 +182 +182 +182 +182 +179 +180 +182 +182 +182 +183 +182 +182 +182 +182 +181 +182 +183 +184 +182 +182 +182 +182 +182 +183 +11 +11 +11 +10 +11 +12 +13 +181 +182 +182 +184 +182 +183 +182 +181 +184 +183 +182 +182 +182 +182 +182 +182 +181 +181 +183 +183 +182 +183 +183 +182 +182 +12 +10 +11 +11 +12 +12 +11 +182 +182 +182 +183 +182 +181 +183 +183 +182 +181 +182 +182 +182 +182 +182 +183 +182 +182 +182 +183 +183 +181 +181 +182 +183 +12 +9 +10 +11 +13 +10 +10 +182 +183 +184 +183 +182 +181 +182 +183 +182 +182 +182 +182 +183 +183 +182 +182 +182 +184 +180 +181 +182 +184 +182 +181 +182 +13 +11 +11 +11 +11 +10 +10 +181 +184 +14 +11 +11 +11 +10 +10 +11 +183 +182 +182 +182 +181 +183 +182 +183 +183 +183 +183 +182 +182 +182 +182 +182 +177 +183 +182 +182 +182 +182 +182 +182 +182 +12 +10 +11 +11 +11 +12 +11 +182 +182 +181 +183 +182 +183 +183 +182 +183 +180 +182 +183 +182 +181 +182 +184 +182 +181 +182 +180 +182 +182 +182 +183 +181 +11 +10 +11 +10 +10 +11 +11 +182 +180 +182 +182 +182 +181 +182 +180 +179 +181 +182 +183 +180 +182 +182 +182 +11 +11 +11 +10 +11 +10 +11 +182 +183 +182 +181 +181 +182 +182 +183 +184 +182 +182 +182 +181 +182 +182 +183 +184 +184 +183 +182 +183 +182 +183 +182 +182 +12 +11 +10 +9 +8 +13 +10 +183 +184 +182 +183 +182 +180 +182 +182 +183 +185 +182 +182 +182 +182 +182 +180 +180 +181 +182 +183 +183 +182 +182 +184 +181 +13 +11 +13 +11 +12 +10 +9 +182 +181 +182 +182 +182 +182 +183 +182 +183 +183 +182 +182 +181 +181 +183 +182 +185 +183 +184 +182 +182 +185 +182 +183 +181 +13 +9 +11 +10 +11 +10 +11 +183 +182 +182 +183 +183 +182 +181 +183 +182 +182 +182 +182 +183 +183 +183 +182 +176 +183 +182 +183 +182 +182 +182 +182 +183 +11 +10 +11 +12 +10 +10 +12 +181 +182 +183 +182 +182 +184 +182 +182 +182 +182 +182 +182 +182 +183 +183 +183 +182 +182 +182 +182 +182 +183 +182 +182 +182 +11 +9 +11 +12 +10 +12 +10 +182 +182 +181 +182 +182 +182 +182 +182 +183 +182 +182 +181 +182 +183 +183 +184 +183 +182 +182 +181 +181 +182 +182 +185 +184 +13 +10 +11 +11 +9 +12 +11 +182 +183 +181 +180 +182 +182 +183 +184 +182 +183 +181 +181 +182 +182 +182 +182 +183 +182 +182 +182 +182 +182 +183 +182 +180 +12 +10 +11 +12 +11 +11 +10 +181 +182 +182 +182 +183 +184 +182 +184 +181 +182 +183 +182 +182 +183 +183 +182 +182 +182 +181 +181 +182 +185 +183 +183 +185 +12 +11 +10 +10 +11 +11 +11 +182 +183 +182 +182 +182 +182 +180 +182 +183 +183 +181 +180 +181 +182 +183 +183 +183 +182 +182 +181 +182 +183 +183 +184 +183 +182 +182 +181 +180 +180 +183 +183 +183 +183 +12 +11 +11 +11 +12 +11 +12 +182 +182 +181 +182 +183 +182 +183 +182 +182 +184 +183 +183 +183 +181 +182 +181 +182 +183 +182 +181 +182 +182 +182 +182 +184 +13 +12 +10 +11 +9 +8 +11 +182 +183 +183 +182 +183 +182 +181 +182 +182 +183 +182 +182 +182 +182 +182 +184 +180 +181 +182 +183 +183 +182 +182 +182 +183 +13 +10 +10 +10 +9 +11 +10 +182 +182 +183 +182 +182 +182 +181 +180 +176 +183 +182 +182 +183 +181 +183 +183 +11 +11 +10 +11 +10 +10 +12 +183 +182 +182 +182 +180 +183 +181 +182 +184 +183 +179 +182 +181 +183 +183 +183 +182 +183 +182 +183 +182 +182 +180 +182 +182 +11 +10 +10 +11 +13 +11 +10 +183 +181 +182 +182 +183 +183 +182 +183 +185 +182 +183 +183 +183 +182 +182 +181 +179 +182 +182 +184 +183 +181 +183 +184 +180 +13 +9 +9 +10 +11 +10 +9 +182 +181 +182 +182 +184 +182 +183 +181 +183 +182 +181 +181 +181 +183 +184 +183 +183 +182 +181 +182 +182 +182 +183 +181 +182 +14 +10 +10 +8 +10 +10 +10 +181 +180 +183 +182 +183 +184 +182 +183 +182 +182 +181 +183 +183 +183 +182 +182 +182 +182 +182 +182 +178 +181 +182 +183 +181 +11 +11 +10 +10 +10 +10 +12 +183 +182 +182 +182 +181 +181 +182 +182 +184 +183 +182 +182 +182 +183 +183 +182 +182 +182 +181 +180 +180 +182 +182 +182 +182 +11 +10 +11 +11 +10 +9 +10 +182 +183 +182 +182 +182 +182 +182 +182 +180 +183 +182 +183 +183 +182 +182 +183 +182 +180 +182 +182 +183 +183 +184 +183 +184 +11 +10 +10 +10 +10 +10 +12 +183 +182 +183 +182 +181 +182 +182 +181 +182 +182 +182 +182 +183 +181 +182 +183 +182 +186 +184 +182 +183 +182 +185 +183 +182 +10 +10 +9 +10 +10 +11 +12 +183 +183 +182 +182 +181 +181 +182 +183 +185 +183 +182 +182 +183 +182 +183 +180 +181 +182 +182 +183 +182 +182 +182 +181 +182 +12 +11 +11 +9 +8 +10 +10 +182 +184 +182 +182 +182 +182 +182 +183 +183 +182 +182 +182 +181 +182 +182 +183 +183 +183 +183 +183 +182 +181 +182 +182 +180 +182 +183 +183 +184 +183 +183 +182 +182 +181 +12 +10 +11 +11 +10 +10 +11 +183 +182 +179 +183 +181 +182 +183 +181 +183 +182 +182 +182 +182 +182 +181 +182 +182 +182 +183 +182 +182 +182 +183 +184 +179 +13 +10 +10 +11 +10 +11 +10 +182 +182 +181 +182 +182 +182 +183 +182 +183 +183 +182 +182 +183 +183 +182 +182 +182 +182 +182 +181 +183 +181 +183 +183 +181 +10 +10 +10 +182 +183 +182 +183 +181 +182 +187 +182 +183 +183 +182 +181 +182 +181 +182 +182 +183 +183 +182 +182 +10 +11 +11 +10 +10 +10 +11 +182 +182 +182 +182 +183 +182 +182 +181 +181 +183 +183 +183 +182 +180 +180 +180 +182 +182 +182 +182 +182 +183 +184 +182 +183 +10 +9 +9 +10 +10 +12 +11 +183 +183 +181 +182 +181 +182 +182 +182 +182 +182 +183 +182 +182 +184 +182 +182 +182 +182 +182 +182 +182 +182 +181 +181 +182 +11 +10 +10 +11 +11 +10 +10 +182 +182 +182 +182 +182 +181 +181 +183 +182 +183 +183 +182 +181 +182 +182 +182 +181 +180 +182 +182 +183 +181 +181 +181 +183 +12 +11 +10 +11 +10 +11 +11 +182 +182 +183 +182 +182 +183 +181 +182 +182 +181 +182 +182 +183 +183 +182 +183 +177 +183 +182 +182 +181 +182 +182 +182 +183 +12 +10 +11 +10 +10 +12 +11 +186 +183 +183 +183 +185 +183 +186 +182 +181 +182 +182 +182 +183 +182 +182 +182 +182 +182 +182 +182 +183 +181 +182 +182 +182 +13 +13 +11 +11 +12 +10 +12 +181 +182 +182 +182 +182 +181 +181 +182 +182 +183 +182 +183 +184 +182 +184 +182 +182 +182 +183 +183 +184 +182 +181 +182 +182 +12 +10 +11 +11 +11 +10 +10 +182 +181 +181 +182 +182 +183 +184 +184 +182 +184 +181 +182 +182 +182 +183 +182 +182 +183 +182 +182 +182 +183 +182 +183 +182 +11 +11 +10 +10 +11 +10 +11 +184 +183 +184 +182 +182 +181 +181 +182 +182 +183 +183 +182 +182 +182 +182 +182 +182 +182 +183 +182 +183 +184 +184 +182 +179 +11 +10 +9 +12 +10 +11 +11 +184 +182 +182 +182 +183 +182 +181 +11 +9 +182 +183 +184 +183 +182 +182 +182 +183 +184 +182 +184 +182 +183 +182 +182 +183 +182 +183 +183 +182 +182 +182 +182 +182 +182 +13 +10 +10 +12 +10 +11 +12 +183 +182 +182 +182 +181 +182 +182 +182 +184 +184 +184 +183 +183 +181 +182 +182 +181 +182 +181 +182 +182 +183 +183 +183 +182 +11 +7 +9 +9 +10 +10 +11 +183 +183 +182 +182 +183 +183 +182 +184 +182 +181 +182 +183 +182 +181 +182 +182 +183 +182 +183 +9 +11 +11 +11 +183 +182 +182 +182 +182 +182 +184 +182 +179 +182 +182 +181 +182 +182 +183 +184 +182 +181 +182 +178 +181 +183 +182 +184 +182 +12 +11 +11 +10 +11 +11 +11 +182 +183 +182 +182 +179 +181 +183 +188 +183 +183 +182 +182 +181 +181 +182 +182 +184 +184 +184 +182 +181 +182 +183 +182 +181 +11 +9 +10 +9 +12 +11 +13 +183 +183 +181 +182 +182 +181 +182 +182 +181 +183 +182 +181 +181 +182 +182 +183 +182 +181 +182 +182 +183 +183 +182 +179 +182 +11 +11 +11 +10 +12 +12 +11 +184 +182 +182 +182 +182 +182 +183 +182 +181 +180 +182 +182 +182 +183 +182 +184 +183 +182 +182 +181 +182 +182 +182 +182 +182 +12 +10 +10 +10 +10 +11 +10 +182 +181 +182 +181 +182 +182 +182 +183 +183 +183 +183 +182 +180 +180 +182 +183 +183 +182 +182 +182 +182 +182 +181 +183 +183 +13 +12 +10 +9 +10 +10 +9 +181 +182 +182 +183 +185 +182 +182 +178 +182 +182 +181 +182 +182 +182 +182 +182 +183 +184 +182 +182 +182 +181 +182 +182 +182 +13 +11 +11 +13 +10 +12 +10 +182 +183 +181 +182 +183 +182 +178 +180 +182 +183 +183 +180 +182 +182 +181 +182 +181 +183 +182 +184 +182 +182 +182 +182 +182 +12 +9 +11 +10 +11 +11 +12 +182 +180 +182 +181 +182 +183 +182 +183 +183 +179 +182 +182 +182 +182 +183 +183 +185 +183 +183 +182 +183 +182 +182 +182 +184 +12 +12 +11 +10 +10 +10 +9 +183 +182 +183 +182 +182 +181 +182 +181 +182 +182 +184 +183 +182 +182 +182 +181 +183 +182 +182 +181 +181 +183 +181 +183 +183 +13 +10 +10 +10 +10 +183 +184 +183 +183 +11 +12 +10 +9 +10 +9 +9 +182 +183 +183 +182 +182 +182 +182 +183 +182 +182 +183 +182 +182 +182 +182 +181 +182 +183 +183 +182 +182 +183 +182 +180 +183 +11 +10 +10 +10 +10 +10 +11 +182 +183 +179 +181 +181 +182 +181 +176 +183 +183 +183 +183 +181 +182 +182 +182 +181 +184 +182 +182 +183 +183 +185 +182 +182 +12 +11 +10 +10 +10 +11 +9 +181 +182 +182 +185 +183 +183 +182 +180 +182 +182 +182 +181 +182 +182 +183 +184 +13 +11 +15 +12 +10 +11 +10 +181 +182 +183 +182 +183 +182 +183 +183 +183 +183 +182 +182 +182 +181 +183 +183 +183 +182 +182 +182 +182 +182 +183 +183 +182 +11 +11 +11 +10 +11 +11 +11 +184 +181 +183 +182 +182 +182 +183 +182 +183 +182 +183 +180 +180 +182 +182 +183 +186 +182 +181 +182 +182 +187 +182 +181 +182 +11 +14 +12 +10 +10 +11 +10 +182 +182 +182 +182 +183 +182 +183 +183 +182 +182 +180 +182 +182 +182 +182 +182 +184 +182 +183 +183 +182 +182 +182 +182 +183 +12 +10 +10 +10 +10 +9 +10 +182 +181 +180 +182 +183 +182 +182 +183 +182 +182 +184 +182 +183 +182 +181 +181 +183 +182 +182 +182 +183 +183 +181 +180 +181 +14 +9 +11 +11 +11 +13 +11 +183 +182 +184 +182 +182 +182 +180 +182 +182 +183 +183 +182 +182 +180 +182 +183 +182 +183 +183 +182 +182 +182 +182 +181 +182 +10 +11 +12 +11 +11 +10 +11 +182 +182 +183 +184 +182 +185 +184 +182 +182 +181 +183 +182 +182 +182 +182 +182 +181 +183 +182 +183 +183 +183 +183 +182 +182 +11 +10 +11 +10 +11 +11 +11 +184 +182 +184 +182 +182 +182 +181 +181 +181 +182 +182 +182 +182 +183 +182 +183 +183 +183 +183 +182 +182 +182 +180 +180 +182 +13 +12 +11 +11 +11 +12 +9 +182 +181 +182 +182 +182 +183 +182 +182 +183 +182 +183 +181 +181 +182 +181 +182 +182 +182 +181 +182 +186 +183 +181 +183 +182 +12 +11 +10 +11 +11 +11 +11 +182 +183 +182 +183 +182 +181 +182 +182 +180 +181 +182 +181 +181 +182 +183 +182 +183 +183 +182 +182 +181 +183 +182 +182 +182 +182 +183 +183 +182 +184 +182 +183 +182 +181 +12 +11 +10 +12 +10 +11 +11 +182 +183 +183 +180 +183 +182 +182 +182 +182 +183 +182 +182 +181 +182 +182 +182 +184 +183 +184 +183 +183 +181 +182 +182 +180 +12 +9 +11 +11 +11 +11 +10 +183 +182 +182 +180 +180 +182 +183 +184 +183 +182 +183 +181 +180 +182 +182 +182 +182 +182 +182 +183 +180 +181 +181 +183 +183 +11 +11 +10 +10 +10 +9 +11 +182 +183 +183 +182 +181 +182 +181 +183 +181 +183 +182 +183 +183 +184 +182 +184 +12 +9 +11 +9 +10 +11 +12 +182 +182 +181 +182 +182 +181 +181 +182 +183 +183 +183 +182 +183 +182 +181 +182 +183 +182 +181 +181 +182 +182 +181 +180 +181 +11 +10 +11 +10 +11 +13 +10 +182 +182 +183 +183 +183 +181 +181 +182 +180 +181 +181 +182 +184 +184 +183 +183 +182 +182 +181 +182 +183 +182 +183 +183 +183 +12 +10 +12 +11 +10 +11 +11 +182 +183 +182 +181 +182 +180 +180 +182 +182 +183 +184 +182 +181 +182 +182 +182 +183 +181 +183 +183 +182 +182 +184 +182 +182 +12 +11 +13 +11 +10 +10 +9 +181 +182 +182 +182 +182 +184 +182 +182 +182 +182 +183 +181 +182 +181 +183 +182 +183 +183 +182 +182 +184 +182 +181 +181 +182 +12 +11 +10 +11 +10 +10 +10 +182 +182 +182 +182 +183 +182 +184 +182 +181 +182 +181 +182 +183 +182 +183 +182 +183 +180 +180 +182 +183 +182 +182 +182 +181 +9 +11 +11 +10 +10 +10 +11 +182 +182 +183 +182 +182 +183 +181 +181 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +181 +182 +182 +182 +183 +183 +183 +10 +8 +11 +10 +11 +12 +11 +183 +183 +182 +182 +181 +182 +182 +182 +182 +182 +183 +183 +183 +184 +182 +185 +182 +181 +182 +182 +183 +183 +184 +182 +183 +11 +10 +10 +11 +11 +10 +8 +180 +183 +183 +183 +183 +182 +182 +182 +181 +182 +182 +182 +182 +182 +182 +183 +183 +182 +182 +182 +182 +182 +182 +183 +182 +12 +11 +11 +11 +11 +8 +9 +183 +182 +182 +182 +182 +181 +182 +182 +181 +183 +183 +183 +184 +183 +183 +185 +182 +181 +181 +182 +183 +182 +182 +182 +183 +180 +182 +181 +183 +182 +182 +183 +182 +182 +12 +10 +11 +10 +10 +11 +11 +182 +183 +182 +182 +182 +182 +182 +182 +182 +183 +184 +182 +184 +181 +182 +182 +181 +183 +182 +183 +184 +182 +182 +182 +181 +11 +10 +11 +11 +11 +10 +9 +182 +182 +182 +182 +182 +182 +183 +182 +182 +181 +182 +182 +182 +182 +181 +181 +181 +182 +183 +181 +182 +183 +182 +182 +181 +12 +183 +185 +182 +181 +182 +181 +182 +183 +183 +183 +183 +182 +181 +183 +183 +182 +184 +183 +183 +182 +182 +183 +12 +11 +11 +11 +12 +9 +11 +182 +183 +179 +183 +182 +183 +182 +184 +184 +183 +183 +182 +181 +183 +182 +182 +184 +183 +185 +181 +182 +182 +183 +185 +182 +11 +11 +11 +14 +11 +11 +10 +182 +185 +183 +181 +184 +182 +182 +181 +181 +182 +182 +182 +184 +182 +182 +183 +183 +183 +183 +182 +182 +183 +182 +182 +181 +11 +10 +11 +12 +12 +11 +10 +182 +181 +182 +182 +182 +183 +182 +183 +182 +181 +183 +182 +183 +182 +182 +182 +182 +182 +182 +180 +181 +182 +182 +184 +183 +12 +12 +11 +11 +10 +11 +10 +182 +182 +181 +182 +183 +183 +182 +184 +184 +183 +182 +181 +181 +181 +183 +182 +183 +179 +182 +184 +183 +180 +182 +181 +181 +13 +11 +11 +10 +10 +9 +11 +182 +182 +183 +181 +183 +182 +181 +182 +184 +182 +183 +182 +182 +184 +182 +182 +181 +184 +183 +184 +183 +182 +182 +182 +182 +11 +10 +10 +10 +10 +11 +10 +184 +183 +182 +182 +181 +181 +182 +182 +183 +183 +184 +182 +182 +182 +183 +182 +182 +182 +181 +181 +181 +183 +183 +183 +183 +12 +10 +10 +10 +11 +10 +12 +182 +184 +181 +182 +182 +182 +182 +183 +181 +179 +182 +182 +182 +183 +182 +183 +182 +182 +182 +182 +182 +183 +183 +183 +184 +12 +12 +11 +10 +11 +11 +11 +183 +182 +182 +183 +182 +182 +180 +182 +183 +183 +182 +181 +182 +182 +183 +182 +181 +183 +182 +183 +182 +183 +183 +182 +183 +12 +11 +11 +10 +10 +10 +10 +182 +182 +182 +11 +10 +8 +11 +10 +10 +183 +182 +183 +183 +183 +182 +182 +181 +181 +182 +182 +183 +183 +182 +182 +182 +182 +182 +182 +182 +182 +183 +182 +182 +182 +11 +9 +10 +11 +12 +12 +11 +183 +182 +182 +182 +184 +182 +182 +182 +182 +182 +181 +182 +182 +180 +186 +182 +183 +183 +183 +181 +182 +181 +182 +182 +181 +14 +10 +12 +11 +14 +11 +10 +182 +182 +182 +180 +182 +181 +180 +182 +182 +183 +182 +182 +182 +181 +182 +183 +183 +11 +11 +11 +10 +10 +10 +183 +182 +182 +181 +183 +184 +181 +182 +181 +182 +184 +182 +182 +181 +182 +179 +182 +181 +179 +182 +187 +182 +181 +182 +182 +8 +10 +9 +11 +10 +10 +9 +182 +182 +185 +182 +181 +181 +181 +183 +182 +183 +182 +183 +183 +180 +179 +182 +181 +182 +182 +183 +182 +183 +182 +182 +182 +12 +11 +11 +10 +10 +10 +10 +179 +179 +181 +182 +182 +181 +182 +182 +183 +184 +184 +184 +183 +182 +182 +181 +182 +181 +182 +183 +182 +182 +183 +182 +182 +11 +9 +11 +11 +10 +12 +11 +182 +182 +181 +181 +182 +182 +182 +181 +182 +182 +184 +184 +182 +182 +182 +182 +180 +182 +182 +182 +182 +182 +182 +182 +183 +11 +10 +9 +11 +11 +11 +12 +183 +183 +181 +181 +182 +183 +182 +182 +181 +181 +182 +182 +182 +183 +182 +184 +183 +182 +181 +182 +180 +181 +181 +182 +183 +14 +12 +10 +10 +11 +10 +12 +183 +183 +182 +182 +182 +183 +182 +182 +183 +183 +181 +180 +182 +182 +182 +183 +183 +183 +183 +181 +183 +182 +182 +182 +183 +11 +10 +10 +10 +11 +10 +10 +183 +183 +181 +183 +182 +180 +181 +182 +182 +183 +183 +182 +182 +182 +182 +183 +183 +182 +182 +183 +182 +182 +183 +182 +181 +11 +9 +10 +11 +11 +12 +12 +182 +182 +181 +181 +183 +182 +182 +183 +181 +181 +181 +182 +183 +183 +183 +182 +182 +181 +183 +182 +182 +183 +183 +182 +183 +12 +10 +11 +11 +11 +11 +10 +182 +182 +182 +182 +182 +181 +182 +182 +182 +182 +182 +181 +182 +182 +182 +182 +184 +183 +184 +183 +182 +182 +181 +183 +182 +12 +182 +182 +183 +182 +182 +182 +183 +183 +11 +11 +11 +9 +11 +10 +11 +181 +180 +182 +181 +181 +183 +182 +182 +182 +183 +182 +182 +182 +182 +182 +181 +183 +182 +183 +182 +182 +182 +182 +183 +183 +13 +11 +10 +10 +8 +9 +11 +182 +183 +183 +182 +182 +183 +182 +181 +182 +181 +182 +183 +183 +183 +182 +182 +181 +182 +182 +182 +183 +179 +183 +183 +182 +12 +10 +10 +10 +10 +10 +10 +182 +182 +182 +182 +183 +181 +182 +182 +182 +185 +182 +182 +183 +182 +183 +183 +13 +12 +10 +11 +10 +9 +11 +182 +183 +184 +184 +182 +183 +182 +183 +181 +182 +183 +183 +182 +182 +183 +183 +182 +182 +183 +181 +182 +182 +181 +182 +183 +12 +12 +10 +12 +11 +10 +11 +181 +183 +183 +183 +184 +182 +183 +184 +182 +184 +181 +181 +182 +182 +183 +181 +183 +184 +182 +182 +182 +182 +183 +181 +182 +11 +12 +11 +11 +10 +20 +9 +182 +182 +182 +182 +183 +182 +182 +182 +186 +181 +182 +182 +181 +180 +182 +183 +182 +181 +183 +182 +182 +182 +182 +181 +181 +11 +11 +14 +11 +13 +11 +11 +182 +181 +183 +183 +183 +183 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +185 +183 +181 +180 +182 +182 +11 +12 +10 +11 +11 +10 +10 +182 +183 +183 +183 +182 +182 +182 +182 +182 +183 +182 +182 +180 +181 +183 +182 +184 +183 +182 +182 +181 +181 +182 +182 +183 +12 +11 +11 +11 +11 +11 +7 +182 +182 +183 +182 +182 +183 +183 +183 +183 +182 +181 +182 +181 +182 +183 +184 +182 +183 +182 +182 +182 +182 +182 +180 +182 +10 +10 +10 +9 +12 +10 +11 +183 +183 +182 +183 +182 +181 +182 +182 +182 +181 +183 +183 +182 +182 +182 +182 +183 +183 +180 +182 +182 +182 +182 +182 +182 +12 +8 +10 +10 +10 +11 +10 +183 +184 +183 +184 +182 +183 +183 +180 +183 +183 +182 +181 +180 +180 +182 +182 +184 +184 +182 +182 +180 +182 +182 +182 +182 +10 +11 +11 +11 +10 +9 +10 +182 +181 +180 +185 +182 +181 +182 +182 +181 +183 +183 +182 +182 +182 +181 +182 +182 +183 +182 +181 +180 +180 +182 +183 +184 +182 +183 +182 +182 +183 +182 +182 +182 +182 +11 +11 +11 +11 +11 +11 +10 +182 +182 +182 +182 +182 +182 +181 +182 +182 +182 +183 +182 +182 +182 +182 +183 +183 +184 +183 +184 +182 +183 +181 +182 +181 +10 +11 +10 +8 +13 +11 +11 +182 +181 +181 +181 +182 +182 +182 +183 +181 +182 +182 +182 +180 +183 +182 +182 +183 +184 +181 +182 +182 +182 +180 +183 +182 +13 +12 +11 +10 +13 +10 +11 +181 +184 +183 +182 +183 +182 +181 +180 +179 +182 +182 +184 +182 +182 +181 +183 +13 +10 +10 +10 +11 +8 +12 +182 +182 +182 +182 +182 +182 +182 +182 +181 +182 +182 +181 +182 +182 +182 +182 +183 +181 +181 +183 +182 +183 +183 +182 +182 +17 +10 +12 +10 +9 +10 +11 +182 +183 +181 +182 +182 +182 +182 +182 +182 +183 +184 +182 +183 +181 +181 +183 +182 +183 +183 +183 +183 +182 +182 +182 +182 +12 +9 +11 +11 +10 +10 +10 +182 +183 +183 +184 +182 +180 +182 +182 +183 +181 +183 +182 +183 +184 +182 +182 +182 +182 +183 +182 +182 +182 +182 +181 +183 +12 +11 +11 +10 +11 +10 +11 +183 +182 +182 +182 +182 +182 +182 +183 +181 +182 +183 +182 +182 +182 +183 +182 +182 +183 +184 +182 +182 +182 +181 +182 +183 +12 +11 +12 +10 +12 +10 +11 +182 +181 +183 +182 +182 +182 +182 +183 +181 +181 +182 +182 +183 +182 +184 +182 +183 +182 +182 +184 +182 +182 +182 +183 +183 +12 +12 +9 +11 +11 +11 +14 +182 +184 +184 +182 +182 +181 +181 +182 +182 +183 +184 +184 +183 +183 +181 +183 +182 +181 +183 +181 +183 +182 +182 +183 +182 +11 +11 +11 +12 +12 +10 +10 +182 +182 +183 +182 +183 +182 +181 +182 +181 +183 +183 +182 +180 +181 +182 +182 +183 +184 +182 +184 +182 +182 +179 +181 +182 +12 +12 +11 +11 +11 +10 +10 +181 +181 +183 +182 +182 +182 +182 +182 +184 +182 +183 +182 +180 +182 +182 +183 +182 +182 +182 +182 +182 +181 +181 +182 +181 +12 +14 +12 +11 +11 +11 +11 +182 +182 +182 +183 +181 +182 +178 +182 +10 +182 +185 +182 +183 +183 +181 +183 +182 +182 +183 +182 +181 +183 +182 +181 +182 +181 +182 +184 +183 +182 +182 +182 +182 +182 +12 +11 +11 +10 +10 +11 +10 +181 +186 +181 +183 +185 +183 +183 +182 +180 +182 +182 +181 +182 +182 +181 +182 +183 +183 +182 +182 +182 +181 +181 +181 +183 +13 +11 +11 +10 +11 +9 +8 +182 +181 +182 +184 +183 +182 +182 +182 +182 +182 +182 +182 +182 +181 +179 +182 +182 +179 +182 +182 +181 +182 +184 +181 +182 +182 +183 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +183 +183 +182 +183 +183 +184 +183 +182 +182 +182 +182 +13 +10 +10 +11 +10 +10 +10 +182 +183 +184 +182 +183 +181 +181 +182 +181 +183 +182 +182 +183 +183 +182 +183 +182 +181 +183 +181 +182 +183 +182 +184 +182 +12 +11 +10 +10 +9 +11 +10 +182 +184 +181 +180 +182 +182 +181 +182 +181 +182 +182 +183 +183 +182 +182 +182 +183 +182 +183 +182 +183 +182 +182 +182 +181 +10 +11 +11 +10 +11 +11 +11 +182 +181 +183 +182 +183 +182 +182 +183 +182 +182 +182 +182 +183 +182 +182 +181 +180 +182 +181 +182 +182 +181 +182 +182 +183 +12 +11 +10 +10 +10 +11 +10 +181 +182 +181 +182 +182 +183 +183 +182 +183 +183 +182 +181 +182 +182 +182 +185 +183 +184 +183 +183 +182 +182 +180 +183 +182 +11 +11 +10 +11 +12 +11 +10 +182 +181 +182 +182 +182 +182 +182 +182 +183 +182 +182 +182 +183 +182 +184 +181 +182 +182 +181 +183 +182 +184 +183 +180 +183 +11 +11 +11 +9 +11 +10 +13 +183 +182 +181 +181 +179 +182 +183 +183 +183 +179 +182 +184 +182 +181 +183 +181 +183 +183 +183 +177 +183 +182 +182 +183 +184 +12 +11 +11 +10 +13 +10 +12 +182 +183 +181 +181 +184 +182 +181 +185 +181 +183 +183 +183 +181 +182 +182 +183 +183 +187 +181 +182 +183 +182 +186 +182 +183 +13 +10 +7 +10 +12 +11 +8 +178 +183 +182 +184 +183 +181 +182 +182 +182 +178 +182 +183 +182 +183 +182 +182 +182 +181 +183 +181 +184 +183 +182 +182 +182 +12 +9 +10 +9 +10 +11 +183 +183 +185 +13 +9 +8 +11 +6 +11 +11 +184 +183 +180 +182 +182 +182 +182 +183 +182 +183 +183 +179 +182 +182 +182 +182 +182 +182 +182 +183 +183 +181 +182 +183 +178 +10 +9 +11 +11 +12 +12 +10 +183 +181 +181 +183 +182 +184 +183 +184 +184 +182 +182 +182 +182 +183 +182 +183 +182 +182 +182 +182 +183 +183 +182 +181 +182 +11 +10 +11 +9 +11 +11 +10 +182 +182 +183 +181 +183 +182 +182 +183 +182 +182 +182 +182 +183 +183 +183 +182 +11 +10 +11 +11 +11 +11 +11 +182 +183 +181 +182 +182 +181 +181 +182 +181 +183 +183 +183 +182 +182 +182 +184 +183 +182 +182 +183 +182 +182 +182 +182 +182 +11 +10 +12 +11 +10 +9 +10 +182 +183 +183 +181 +182 +182 +182 +182 +183 +182 +185 +182 +184 +183 +182 +182 +182 +181 +181 +182 +182 +183 +183 +184 +183 +13 +9 +10 +10 +10 +11 +11 +181 +183 +183 +182 +189 +182 +183 +182 +182 +182 +183 +182 +182 +183 +183 +183 +181 +181 +183 +182 +182 +183 +182 +182 +182 +12 +10 +10 +11 +10 +10 +10 +185 +182 +183 +183 +182 +186 +181 +180 +182 +181 +180 +184 +182 +183 +182 +184 +182 +182 +182 +182 +184 +183 +182 +182 +182 +11 +11 +11 +11 +12 +10 +12 +182 +182 +181 +181 +183 +183 +183 +183 +182 +183 +181 +181 +183 +182 +182 +182 +184 +183 +184 +183 +184 +183 +184 +182 +181 +12 +9 +11 +12 +11 +10 +8 +182 +183 +183 +183 +184 +182 +182 +182 +181 +183 +183 +182 +183 +183 +182 +183 +183 +182 +182 +182 +182 +182 +182 +182 +183 +12 +10 +11 +11 +8 +11 +10 +181 +181 +182 +183 +182 +183 +183 +183 +182 +181 +182 +183 +183 +183 +182 +182 +182 +182 +182 +181 +181 +183 +182 +182 +181 +13 +10 +11 +10 +9 +11 +10 +183 +183 +182 +183 +182 +182 +182 +182 +182 +182 +183 +183 +183 +182 +182 +182 +182 +184 +182 +182 +184 +182 +184 +182 +181 +11 +11 +11 +10 +11 +11 +10 +182 +183 +182 +184 +182 +182 +182 +182 +181 +180 +183 +183 +183 +183 +183 +182 +182 +182 +181 +179 +182 +182 +183 +182 +182 +182 +181 +182 +182 +182 +183 +184 +183 +184 +12 +10 +10 +10 +10 +10 +10 +181 +182 +182 +182 +182 +182 +182 +182 +183 +184 +180 +183 +181 +181 +182 +182 +183 +183 +182 +182 +181 +182 +182 +181 +182 +11 +10 +10 +11 +11 +12 +10 +184 +182 +181 +181 +181 +182 +184 +183 +183 +182 +182 +181 +182 +183 +182 +182 +184 +184 +183 +182 +182 +181 +182 +182 +182 +11 +11 +11 +11 +12 +11 +9 +183 +181 +182 +182 +183 +182 +185 +183 +183 +182 +181 +182 +182 +183 +183 +182 +12 +9 +10 +11 +11 +11 +12 +183 +182 +180 +183 +183 +183 +183 +182 +182 +181 +182 +182 +182 +182 +182 +183 +182 +179 +183 +182 +182 +182 +182 +182 +184 +12 +11 +12 +11 +12 +10 +11 +183 +182 +183 +183 +182 +182 +182 +183 +180 +183 +180 +185 +182 +183 +182 +182 +183 +182 +183 +182 +183 +183 +185 +183 +184 +12 +10 +10 +10 +11 +11 +12 +183 +182 +182 +181 +182 +181 +183 +182 +182 +182 +184 +180 +182 +182 +183 +183 +182 +183 +181 +181 +183 +182 +183 +182 +180 +12 +10 +8 +9 +11 +11 +11 +183 +181 +182 +181 +183 +183 +182 +183 +182 +182 +183 +182 +183 +183 +182 +182 +183 +184 +183 +184 +181 +183 +182 +182 +183 +12 +10 +9 +10 +10 +10 +12 +183 +183 +183 +181 +181 +181 +182 +183 +183 +183 +185 +182 +183 +182 +182 +182 +183 +181 +180 +182 +182 +181 +182 +182 +182 +12 +11 +10 +11 +11 +11 +12 +182 +183 +182 +182 +182 +182 +182 +182 +183 +182 +181 +182 +184 +182 +183 +181 +181 +182 +180 +183 +183 +183 +183 +182 +183 +9 +8 +11 +10 +11 +10 +11 +182 +181 +182 +182 +183 +182 +183 +182 +182 +182 +183 +184 +182 +182 +182 +182 +182 +181 +182 +182 +184 +182 +182 +182 +183 +13 +12 +11 +10 +10 +11 +10 +185 +183 +184 +183 +184 +182 +184 +182 +182 +182 +181 +182 +182 +182 +182 +182 +181 +182 +182 +182 +182 +182 +182 +182 +182 +12 +11 +11 +12 +11 +11 +10 +182 +182 +182 +182 +183 +182 +182 +182 +182 +180 +182 +182 +182 +183 +182 +183 +182 +182 +182 +182 +182 +182 +182 +184 +183 +184 +185 +183 +184 +182 +181 +181 +181 +183 +12 +11 +10 +12 +11 +10 +10 +182 +182 +181 +182 +182 +182 +181 +185 +182 +182 +183 +182 +183 +182 +182 +182 +181 +180 +182 +182 +183 +182 +183 +183 +182 +14 +10 +11 +10 +9 +11 +10 +182 +183 +183 +183 +182 +181 +183 +182 +182 +182 +182 +183 +182 +182 +182 +181 +182 +182 +182 +182 +181 +182 +183 +183 +183 +11 +10 +9 +9 +182 +183 +183 +181 +181 +183 +182 +182 +183 +183 +183 +183 +182 +182 +181 +182 +182 +182 +182 +12 +11 +10 +8 +10 +10 +10 +183 +182 +182 +182 +183 +182 +182 +182 +183 +182 +183 +186 +181 +184 +182 +181 +181 +181 +183 +183 +183 +182 +183 +182 +182 +12 +11 +10 +11 +11 +10 +10 +180 +183 +183 +181 +181 +182 +182 +182 +181 +182 +183 +183 +184 +183 +183 +182 +182 +183 +182 +182 +182 +182 +182 +182 +182 +12 +10 +11 +8 +9 +11 +11 +182 +184 +182 +183 +185 +182 +182 +182 +182 +179 +181 +183 +182 +183 +182 +183 +182 +182 +181 +183 +182 +183 +183 +183 +183 +11 +10 +8 +8 +10 +10 +11 +182 +183 +183 +182 +181 +181 +182 +182 +183 +181 +184 +183 +183 +183 +182 +182 +174 +180 +182 +182 +183 +183 +183 +183 +183 +11 +10 +11 +10 +10 +11 +10 +181 +182 +182 +183 +182 +182 +183 +181 +181 +182 +182 +182 +183 +183 +182 +182 +182 +181 +182 +181 +182 +181 +183 +183 +183 +12 +11 +10 +9 +11 +11 +11 +183 +183 +182 +181 +181 +182 +182 +183 +182 +182 +183 +183 +183 +182 +182 +181 +182 +182 +181 +182 +180 +183 +183 +181 +181 +12 +10 +10 +10 +10 +10 +11 +182 +183 +182 +183 +182 +182 +181 +181 +182 +183 +183 +183 +183 +182 +183 +183 +181 +182 +182 +183 +183 +182 +182 +182 +182 +12 +11 +11 +11 +11 +9 +11 +182 +183 +183 +185 +183 +184 +182 +181 +184 +181 +183 +183 +182 +183 +182 +182 +183 +182 +184 +182 +182 +183 +182 +183 +185 +12 +12 +10 +11 +11 +9 +11 +181 +183 +186 +183 +10 +11 +11 +11 +11 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +180 +180 +182 +182 +186 +183 +182 +182 +182 +182 +183 +182 +182 +182 +183 +11 +9 +10 +9 +10 +10 +11 +182 +182 +182 +182 +183 +183 +182 +182 +182 +182 +182 +181 +182 +183 +182 +183 +182 +179 +182 +181 +181 +183 +182 +181 +182 +12 +11 +10 +9 +10 +10 +11 +182 +182 +182 +182 +183 +182 +183 +183 +182 +180 +182 +182 +184 +183 +183 +182 +183 +181 +181 +183 +11 +11 +12 +183 +182 +182 +181 +181 +183 +183 +182 +182 +179 +183 +183 +181 +183 +182 +182 +182 +182 +183 +184 +185 +185 +184 +182 +181 +12 +11 +11 +11 +11 +10 +10 +181 +183 +181 +180 +182 +182 +183 +184 +182 +183 +182 +181 +183 +181 +182 +184 +183 +182 +183 +181 +183 +183 +183 +182 +182 +13 +13 +11 +11 +11 +9 +10 +182 +182 +184 +182 +183 +184 +182 +183 +182 +182 +182 +185 +182 +183 +182 +182 +182 +182 +182 +180 +179 +182 +183 +184 +183 +12 +11 +10 +10 +11 +11 +10 +183 +184 +182 +183 +181 +182 +183 +182 +182 +183 +182 +183 +181 +181 +182 +181 +183 +182 +182 +183 +181 +180 +181 +182 +182 +12 +11 +10 +9 +11 +11 +10 +182 +184 +182 +183 +181 +182 +182 +182 +181 +182 +181 +185 +182 +182 +183 +184 +180 +184 +182 +181 +182 +183 +183 +183 +182 +11 +11 +11 +11 +14 +10 +11 +182 +181 +182 +180 +183 +182 +183 +182 +182 +182 +182 +183 +183 +183 +182 +183 +182 +181 +182 +182 +184 +184 +183 +185 +181 +11 +9 +9 +12 +11 +11 +12 +182 +183 +182 +182 +183 +181 +182 +182 +182 +182 +185 +182 +183 +181 +180 +183 +182 +183 +183 +182 +181 +182 +185 +182 +182 +14 +12 +11 +11 +10 +8 +11 +183 +182 +183 +183 +181 +182 +182 +181 +182 +183 +183 +184 +182 +182 +182 +182 +183 +182 +183 +183 +182 +182 +182 +181 +182 +12 +13 +12 +12 +10 +9 +11 +183 +182 +183 +182 +182 +182 +183 +182 +182 +182 +183 +183 +183 +182 +183 +184 +182 +182 +181 +183 +182 +182 +183 +181 +180 +12 +10 +END PACKET 0 diff --git a/Old Matlab Interface/.svn/pristine/2c/2c2cac302b7f1cdf9fa687082d023d2095c94195.svn-base b/Old Matlab Interface/.svn/pristine/2c/2c2cac302b7f1cdf9fa687082d023d2095c94195.svn-base new file mode 100644 index 00000000..84b1c5d3 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/2c/2c2cac302b7f1cdf9fa687082d023d2095c94195.svn-base @@ -0,0 +1,62 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {AB79B52F-49BA-4424-8DD3-CC61489EFC1E} + Exe + Properties + Xfer.Stm + Xfer.Stm + v2.0 + 512 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + false + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + libusbK.cs + + + Common\BenchmarkTestDevice.cs + + + Common\HiPerfTimer.cs + + + Common\TestParameters.cs + + + + + + + \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/2e/2edbf56631bf8c322ab56509a78f197f01786957.svn-base b/Old Matlab Interface/.svn/pristine/2e/2edbf56631bf8c322ab56509a78f197f01786957.svn-base new file mode 100644 index 00000000..400c2b7c --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/2e/2edbf56631bf8c322ab56509a78f197f01786957.svn-base @@ -0,0 +1 @@ +mex_usb_send_control('40', 'a0', '0', '0', '0', '0'); diff --git a/Old Matlab Interface/.svn/pristine/2f/2feca4ba5ed6b3d0dedf490a9063cb7ab9430790.svn-base b/Old Matlab Interface/.svn/pristine/2f/2feca4ba5ed6b3d0dedf490a9063cb7ab9430790.svn-base new file mode 100644 index 00000000..d81057dd --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/2f/2feca4ba5ed6b3d0dedf490a9063cb7ab9430790.svn-base @@ -0,0 +1,126 @@ +#region Copyright(c) Travis Robinson +// Copyright (c) 2012 Travis Robinson +// All rights reserved. +// +// HiPerfTimer.cs +// +// Created: 03.05.2012 +// Last Updated: 03.05.2012 +// +// 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. +// +// 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 TRAVIS LEE ROBINSON +// 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. +#endregion + + +using System.ComponentModel; +using System.Runtime.InteropServices; + + +namespace Win32 +{ + internal class HiPerfTimer + { + #region Public Members + public HiPerfTimer() + { + startTime = 0; + stopTime = 0; + length = 0; + + if (QueryPerformanceFrequency(out freq) == false) + { + // high-performance counter not supported + throw new Win32Exception(); + } + } + + /// + /// Gets the bytes per second + /// + public double Bps + { + get + { + double duration = Duration; + if (duration.Equals(0.0)) return 0.0; + return length/duration; + } + } + + /// + /// Gets the duration of the timer (in seconds) + /// + public double Duration + { + get + { + return (stopTime - startTime)/(double) freq; + } + } + + /// + /// Gets the duration of the timer (in seconds) + /// + public long Ticks + { + get + { + long tDiff = stopTime - startTime; + tDiff = (tDiff*10000000)/freq; + + return tDiff; + } + } + /// + /// Start the timer + /// + public void Start() + { + length = 0; + QueryPerformanceCounter(out startTime); + } + + /// + /// Stop the timer + /// + public void Stop() + { + QueryPerformanceCounter(out stopTime); + } + + public void Stop(int addLength) + { + QueryPerformanceCounter(out stopTime); + length += addLength; + } + #endregion + + + #region Private Members + [DllImport("Kernel32.dll")] + private static extern bool QueryPerformanceCounter(out long lpPerformanceCount); + + [DllImport("Kernel32.dll")] + private static extern bool QueryPerformanceFrequency(out long lpFrequency); + + private readonly long freq; + private long length; + private long startTime, stopTime; + #endregion + } +} \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/32/32ba5d36cb2ab8663296ce2e48e64fb66bb09f3a.svn-base b/Old Matlab Interface/.svn/pristine/32/32ba5d36cb2ab8663296ce2e48e64fb66bb09f3a.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..6447face6c73fb25f73a5f1ea7e730bd545a57a3 GIT binary patch literal 7168 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 ZxVhOt{u`PI>HkA!YRK9W<_y@T6>E8eV literal 0 HcmV?d00001 diff --git a/Old Matlab Interface/.svn/pristine/36/364d01a33894c1318342a60513444fea9f79f626.svn-base b/Old Matlab Interface/.svn/pristine/36/364d01a33894c1318342a60513444fea9f79f626.svn-base new file mode 100644 index 00000000..5178aa52 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/36/364d01a33894c1318342a60513444fea9f79f626.svn-base @@ -0,0 +1,5 @@ +cool=1; +cool = 'cock'; + +mex helloworld.cpp +[a, b, c, d] = helloworld(cool); \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/37/3760526ebf9920e390f38d721bd4effaecc3265c.svn-base b/Old Matlab Interface/.svn/pristine/37/3760526ebf9920e390f38d721bd4effaecc3265c.svn-base new file mode 100644 index 00000000..cf30a774 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/37/3760526ebf9920e390f38d721bd4effaecc3265c.svn-base @@ -0,0 +1,5 @@ +function [] = mex_usb_init(VID, PID) + +global usb_handle + +usb_handle = USB_INIT(VID, PID); \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/3a/3a88715c2d02f41769b36f97cc570d5770a32ccc.svn-base b/Old Matlab Interface/.svn/pristine/3a/3a88715c2d02f41769b36f97cc570d5770a32ccc.svn-base new file mode 100644 index 00000000..8e4e5e9a --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/3a/3a88715c2d02f41769b36f97cc570d5770a32ccc.svn-base @@ -0,0 +1,11 @@ +clear all +setscopewindowsize(1, 0, 5) +first_gui_test +pause(0.01) +max_n = 10000; +setscopemode(2,8,8) +setpsu(0,1000) +tiny_send_waveform(sin(linspace(0,2*pi, 128)),255,432) +%tiny_send_waveform(1:100, 255, 100) +mex_usb_iso_loop +%%plot(saved_waveform) \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/3a/3aff65596faed59f9ea33ee9452d0e153ae9d3d5.svn-base b/Old Matlab Interface/.svn/pristine/3a/3aff65596faed59f9ea33ee9452d0e153ae9d3d5.svn-base new file mode 100644 index 00000000..e4d69f15 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/3a/3aff65596faed59f9ea33ee9452d0e153ae9d3d5.svn-base @@ -0,0 +1,14 @@ +clear all + +compile + +global usb_handle +if ~length(usb_handle) + warning('USB Handle not initialised. Initialising!') + mex_usb_init('03eb', 'a000') +end + +%mex USB_ISO_INIT.c -Iincludes -llibusbK -Lbin\lib\amd64 +%USB_ISO_INIT(usb_handle) +[stm_handle] = USB_ISO_INIT(usb_handle) +%USB_ISO_LOOP(usb_handle, isoCtx, ovlkHandle, ovlPool, isoBuffer, uint8(0)) \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/3c/3cc215bf1d754958f357d474d049774db8f3b9e5.svn-base b/Old Matlab Interface/.svn/pristine/3c/3cc215bf1d754958f357d474d049774db8f3b9e5.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..b8bdd81676ebb6d619fc044141a7fa6b07465f60 GIT binary patch literal 28414 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 +// All rights reserved. +// +// TestParameters.cs +// +// Created: 03.05.2012 +// Last Updated: 03.05.2012 +// +// 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. +// +// 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 TRAVIS LEE ROBINSON +// 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. +#endregion + + +using System; +using System.Globalization; +using System.IO; +using System.Runtime.InteropServices; +using System.Text.RegularExpressions; +using Win32; + + +namespace libusbK.Examples +{ + internal abstract class TestParameters + { + protected TestParameters(int vid, + int pid, + int altInterfaceId, + int pipeId, + int maxTransfersTotal, + string logFilename) + { + MI = -1; + ; + Vid = vid; + Pid = pid; + PipeId = pipeId; + AltInterfaceId = altInterfaceId; + MaxTransfersTotal = maxTransfersTotal; + LogFilename = logFilename; + } + + + #region Public Members + public int AltInterfaceId; + + public bool ConfigureDevice(out WINUSB_PIPE_INFORMATION pipeInfo, + out UsbK usb, + out USB_INTERFACE_DESCRIPTOR interfaceDescriptor) + { + bool success; + Console.WriteLine("Finding usb device by VID/PID.. ({0:X4}h / {1:X4}h)", + Vid, + Pid); + + // Use a patttern match to include only matching devices. + // NOTE: You can use the '*' and '?' chars as wildcards for all chars or a single char (respectively). + KLST_PATTERN_MATCH patternMatch = new KLST_PATTERN_MATCH(); + if (MI != -1) + patternMatch.DeviceID = String.Format("USB\\VID_{0:X4}&PID_{1:X4}&MI_{2:X2}*", + Vid, + Pid, + MI); + else + patternMatch.DeviceID = String.Format("USB\\VID_{0:X4}&PID_{1:X4}*", + Vid, + Pid); + + LstK deviceList = new LstK(KLST_FLAG.NONE, + ref patternMatch); + KLST_DEVINFO_HANDLE deviceInfo; + interfaceDescriptor = new USB_INTERFACE_DESCRIPTOR(); + pipeInfo = new WINUSB_PIPE_INFORMATION(); + usb = null; + + // Iterate the devices looking for a matching alt-interface and endpoint id. + while (deviceList.MoveNext(out deviceInfo)) + { + // libusbK class contructors can throw exceptions; For instance, if the device is + // using the WinUsb driver and already in-use by another application. + Console.WriteLine("Opening usb device.."); + usb = new UsbK(deviceInfo); + + Console.WriteLine("Finding interface and endpoint by PipeId.."); + success = FindPipeAndInterface(usb, + out interfaceDescriptor, + out pipeInfo); + if (success) break; + + Console.WriteLine("PipeId {0:X2}h not found on this device.", + PipeId); + usb.Free(); + usb = null; + } + if (ReferenceEquals(usb, + null)) + { + Console.WriteLine("Usb device not found: {0}", + patternMatch.DeviceID); + success = false; + goto Done; + } + + MI = interfaceDescriptor.bInterfaceNumber; + AltInterfaceId = interfaceDescriptor.bAlternateSetting; + PipeId = pipeInfo.PipeId; + + // Set interface alt setting. + Console.WriteLine("Setting interface #{0} to bAlternateSetting #{1}..", + interfaceDescriptor.bInterfaceNumber, + interfaceDescriptor.bAlternateSetting); + success = usb.SetAltInterface(interfaceDescriptor.bInterfaceNumber, + false, + interfaceDescriptor.bAlternateSetting); + if (!success) + { + Console.WriteLine("SetAltInterface failed. ErrorCode={0:X8}h", + Marshal.GetLastWin32Error()); + Console.WriteLine(interfaceDescriptor.ToString()); + } + + Done: + deviceList.Free(); + + return success; + } + + public HiPerfTimer Dcs = new HiPerfTimer(); + + public void FillFromCommandLine(string commandLine) + { + commandLine = Regex.Replace(commandLine, + "^(\".+?\"|\\S+)\\s*", + ""); + string exp = String.Empty; + exp += makeArgExpression("Vid", + NumberStyles.HexNumber) + "|"; + exp += makeArgExpression("Pid", + NumberStyles.HexNumber) + "|"; + exp += makeArgExpression("PipeId", + NumberStyles.HexNumber) + "|"; + exp += makeArgExpression("AltId", + NumberStyles.Integer) + "|"; + exp += makeArgExpression("MI", + NumberStyles.Integer) + "|"; + exp += makeArgExpression("Log", + NumberStyles.None); + + m_CommandArguments = Regex.Matches(commandLine, + exp, + RegexOptions.ExplicitCapture | RegexOptions.IgnoreCase | + RegexOptions.IgnorePatternWhitespace); + + foreach (Match m in m_CommandArguments) + { + Group gVid = m.Groups["Vid"]; + Group gPid = m.Groups["Pid"]; + Group gMI = m.Groups["MI"]; + Group gPipeId = m.Groups["PipeId"]; + Group gAltId = m.Groups["AltId"]; + Group gLog = m.Groups["Log"]; + Group gIsHex = m.Groups["IsHex"]; + + if (gVid.Success) + Vid = gIsHex.Success + ? UInt16.Parse(gVid.Value, + NumberStyles.HexNumber) + : UInt16.Parse(gVid.Value); + else if (gPid.Success) + Pid = gIsHex.Success + ? UInt16.Parse(gPid.Value, + NumberStyles.HexNumber) + : UInt16.Parse(gPid.Value); + else if (gMI.Success) + MI = gIsHex.Success + ? UInt16.Parse(gMI.Value, + NumberStyles.HexNumber) + : UInt16.Parse(gMI.Value); + else if (gPipeId.Success) + PipeId = gIsHex.Success + ? Byte.Parse(gPipeId.Value, + NumberStyles.HexNumber) + : Byte.Parse(gPipeId.Value); + else if (gAltId.Success) + AltInterfaceId = gIsHex.Success + ? Byte.Parse(gAltId.Value, + NumberStyles.HexNumber) + : Byte.Parse(gAltId.Value); + else if (gLog.Success) + LogFilename = gLog.Value; + else + { + throw new Exception("Invalid argument:" + m.Value); + } + } + } + + public bool FindPipeAndInterface(UsbK usb, + out USB_INTERFACE_DESCRIPTOR interfaceDescriptor, + out WINUSB_PIPE_INFORMATION pipeInfo) + { + if (FindPipeAndInterface(usb, + out interfaceDescriptor, + out pipeInfo, + AltInterfaceId, + PipeId)) + { + AltInterfaceId = interfaceDescriptor.bAlternateSetting; + PipeId = pipeInfo.PipeId; + + return true; + } + return false; + } + + public static bool FindPipeAndInterface(UsbK usb, + out USB_INTERFACE_DESCRIPTOR interfaceDescriptor, + out WINUSB_PIPE_INFORMATION pipeInfo, + int altInterfaceId, + int pipeId) + { + byte interfaceIndex = 0; + interfaceDescriptor = new USB_INTERFACE_DESCRIPTOR(); + pipeInfo = new WINUSB_PIPE_INFORMATION(); + while (usb.SelectInterface(interfaceIndex, + true)) + { + byte altSettingNumber = 0; + while (usb.QueryInterfaceSettings(altSettingNumber, + out interfaceDescriptor)) + { + if (altInterfaceId == -1 || altInterfaceId == altSettingNumber) + { + byte pipeIndex = 0; + while (usb.QueryPipe(altSettingNumber, + pipeIndex++, + out pipeInfo)) + { + if ((pipeInfo.MaximumPacketSize > 0) && + pipeId == -1 || pipeInfo.PipeId == pipeId || + ((pipeId & 0xF) == 0 && ((pipeId & 0x80) == (pipeInfo.PipeId & 0x80)))) + { + goto FindInterfaceDone; + } + pipeInfo.PipeId = 0; + } + } + altSettingNumber++; + } + interfaceIndex++; + } + + FindInterfaceDone: + return pipeInfo.PipeId != 0; + } + + public void Free() + { + if (fileLoggingEnabled && logStream != null) + { + logStream.Flush(); + logStream.Close(); + logStream = null; + } + } + + public void Init() + { + if (!String.IsNullOrEmpty(LogFilename)) + { + logStream = new StreamWriter(LogFilename); + fileLoggingEnabled = true; + } + } + + public void Log(String text) + { + if (fileLoggingEnabled) logStream.Write(text); + else Console.Write(text); + } + + public void Log(String format, + params object[] args) + { + if (fileLoggingEnabled) + logStream.Write(format, + args); + else + Console.Write(format, + args); + } + + public string LogFilename; + + public void LogLn(String text) + { + if (fileLoggingEnabled) logStream.WriteLine(text); + else Console.WriteLine(text); + } + + public void LogLn(String format, + params object[] args) + { + if (fileLoggingEnabled) + logStream.WriteLine(format, + args); + else + Console.WriteLine(format, + args); + } + + public int MI; + public int MaxTransfersTotal; + public int Pid; + public int PipeId; + + public bool ShowTestReady() + { + while (Console.KeyAvailable) + Console.ReadKey(true); + + Console.WriteLine("Test ready:"); + Console.Write(ToString()); + + if (!String.IsNullOrEmpty(LogFilename)) + Console.WriteLine("Logging output to file: {0}", + LogFilename); + + Console.WriteLine("Press 'Q' to abort or any other key to continue.."); + ConsoleKeyInfo key = Console.ReadKey(true); + if (key.KeyChar == 'q' || key.KeyChar == 'Q') return false; + + Console.WriteLine(); + Console.WriteLine("Starting test.."); + Console.WriteLine(); + + return true; + } + + public override string ToString() + { + return + String.Format( + "Vid: {0:X4}h\nPid: {1:X4}h\nMI: {2:X2}h\nPipeId: {3:X2}h\nMaxTransfersTotal: {4}\n\nLogFilename: {5}\n", + Vid, + Pid, + MI, + PipeId, + MaxTransfersTotal, + LogFilename); + } + + public int Vid; + #endregion + + + #region Private Members + private bool fileLoggingEnabled; + + private StreamWriter logStream; + private MatchCollection m_CommandArguments; + + private string makeArgExpression(string argName, + NumberStyles argType) + { + const string argsep = @"\W\s*"; + + switch (argType) + { + case NumberStyles.None: + return String.Format(@"(({0}{1}(?<{0}>{2}))\s*)", + argName, + argsep, + "(\".+?\"|\\S+)"); + case NumberStyles.Integer: + case NumberStyles.HexNumber: + return String.Format(@"(({0}{1}(?0x)?(?<{0}>[0-9A-F]+))(?h)?\s*)", + argName, + argsep); + default: + throw new Exception(); + } + } + #endregion + } + + internal class IsoTestParameters : TestParameters + { + #region Public Members + public IsoTestParameters(int vid, + int pid, + int altInterfaceId, + int pipeId, + int maxOutstandingTransfers, + int maxTransfersTotal, + string logFilename, + int isoPacketsPerTransfer) + : base(vid, + pid, + altInterfaceId, + pipeId, + maxTransfersTotal, + logFilename) + { + IsoPacketsPerTransfer = isoPacketsPerTransfer; + MaxOutstandingTransfers = maxOutstandingTransfers; + + FillFromCommandLine(Environment.CommandLine); + Init(); + } + + public int IsoPacketsPerTransfer; + public int MaxOutstandingTransfers; + + public override string ToString() + { + string fmt = String.Empty; + fmt += "IsoPacketsPerTransfer: {0}\n"; + fmt += "MaxOutstandingTransfers: {1}\n"; + + object[] args = new object[] + { + IsoPacketsPerTransfer, MaxOutstandingTransfers + }; + return base.ToString() + string.Format(fmt, + args); + } + #endregion + } + + internal class StmTestParameters : TestParameters + { + #region Public Members + public StmTestParameters(int vid, + int pid, + int altInterfaceId, + byte pipeId, + int maxTransfersTotal, + string logFilename, + int transferBufferSize, + int maxPendingIO, + int maxPendingTransfers) + : base(vid, + pid, + altInterfaceId, + pipeId, + maxTransfersTotal, + logFilename) + { + TransferBufferSize = transferBufferSize; + MaxPendingIO = maxPendingIO; + MaxPendingTransfers = maxPendingTransfers; + + FillFromCommandLine(Environment.CommandLine); + Init(); + } + + public int MaxPendingIO; + public int MaxPendingTransfers; + + public override string ToString() + { + string fmt = String.Empty; + fmt += "TransferBufferSize: {0}\n"; + fmt += "MaxPendingIO: {1}\n"; + fmt += "MaxPendingTransfers: {2}\n"; + + object[] args = new object[] + { + TransferBufferSize, MaxPendingIO, MaxPendingTransfers + }; + return base.ToString() + string.Format(fmt, + args); + } + + public int TransferBufferSize; + #endregion + } + + internal class AsyncTestParameters : TestParameters + { + #region Public Members + public AsyncTestParameters(int vid, + int pid, + int altInterfaceId, + byte pipeId, + int maxTransfersTotal, + string logFilename, + int transferBufferSize, + int maxPendingIO) + : base(vid, + pid, + altInterfaceId, + pipeId, + maxTransfersTotal, + logFilename) + { + TransferBufferSize = transferBufferSize; + MaxPendingIO = maxPendingIO; + + FillFromCommandLine(Environment.CommandLine); + Init(); + } + + public int MaxPendingIO; + + public override string ToString() + { + string fmt = String.Empty; + fmt += "TransferBufferSize: {0}\n"; + fmt += "MaxPendingIO: {1}\n"; + + object[] args = new object[] + { + TransferBufferSize, MaxPendingIO + }; + return base.ToString() + string.Format(fmt, + args); + } + + public int TransferBufferSize; + #endregion + } +} \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/3f/3f2ffe70410dd117d147aa7c9feb072a8f3d1c80.svn-base b/Old Matlab Interface/.svn/pristine/3f/3f2ffe70410dd117d147aa7c9feb072a8f3d1c80.svn-base new file mode 100644 index 00000000..9f980ed9 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/3f/3f2ffe70410dd117d147aa7c9feb072a8f3d1c80.svn-base @@ -0,0 +1,29 @@ +global scope_window_time +global gui_delay +global trigger + +pause(0.001) +%Will be buggy with delay +delay_sec = get(gui_delay, 'Max') - get(gui_delay, 'Value'); +delay_sample = delay_sec*(samplestoshow/scope_window_time); + +first + +if (length(buffer)>samplestoshow) & ((length(buffer) - first) > (floor(samplestoshow/2))) + if (samplestoshow>500) + temp_waveform = buffer((first - floor(samplestoshow/2)) : (samplestoshow/500) : (first + floor(samplestoshow/2))); + else + temp_waveform = buffer((first - floor(samplestoshow/2)) : (first + floor(samplestoshow/2))); + end + trigger.begin = length(buffer) + trigger.state = 0; + update_enable = 1 + cool_waveform = undofrontend(temp_waveform, channel); + taxis = linspace(-scope_window_time-delay_sec,-delay_sec,length(cool_waveform)); + return +end + +update_enable = 0 +taxis = [] +cool_waveform = [] +pause(0.001) \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/3f/3fad4e091d61f24c210253e31673d3f211b79fe6.svn-base b/Old Matlab Interface/.svn/pristine/3f/3fad4e091d61f24c210253e31673d3f211b79fe6.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..cbcd7962e6f064c24eb22fc52527c2929c750065 GIT binary patch literal 8192 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 literal 0 HcmV?d00001 diff --git a/Old Matlab Interface/.svn/pristine/40/405594dae0acbcf5943de3d37764a402bd7ab863.svn-base b/Old Matlab Interface/.svn/pristine/40/405594dae0acbcf5943de3d37764a402bd7ab863.svn-base new file mode 100644 index 00000000..2906160b --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/40/405594dae0acbcf5943de3d37764a402bd7ab863.svn-base @@ -0,0 +1,8 @@ +global gui_axes + +tic +for n = 1:10 + plot(gui_axes, 1, 1) + drawnow +end +toc \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/42/42d93a134c140d54d42b87e62b2bd7f4d1725dcb.svn-base b/Old Matlab Interface/.svn/pristine/42/42d93a134c140d54d42b87e62b2bd7f4d1725dcb.svn-base new file mode 100644 index 00000000..cdb959ec --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/42/42d93a134c140d54d42b87e62b2bd7f4d1725dcb.svn-base @@ -0,0 +1,62 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {67C87F34-0DD6-41DB-B95B-0BFF24D8C4E8} + Exe + Properties + Xfer.Async + Xfer.Async + v2.0 + 512 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + libusbK.cs + + + Common\BenchmarkTestDevice.cs + + + Common\HiPerfTimer.cs + + + Common\TestParameters.cs + + + + + + + \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/44/44bc75aeccf2b62e28cc9c5e8625165149f06afc.svn-base b/Old Matlab Interface/.svn/pristine/44/44bc75aeccf2b62e28cc9c5e8625165149f06afc.svn-base new file mode 100644 index 00000000..20ca2cfe --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/44/44bc75aeccf2b62e28cc9c5e8625165149f06afc.svn-base @@ -0,0 +1,83 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {CFB108D9-5489-48D4-AAFD-5FBCB3C00582} + WinExe + Properties + Hot.Plug.Detect.GUI + Hot.Plug.Detect.GUI + v2.0 + 512 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + libusbK.cs + + + Form + + + Form1.cs + + + + + Form1.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/45/45b1a4617d02872cdb3cf169cda0dafbc514c065.svn-base b/Old Matlab Interface/.svn/pristine/45/45b1a4617d02872cdb3cf169cda0dafbc514c065.svn-base new file mode 100644 index 00000000..de609355 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/45/45b1a4617d02872cdb3cf169cda0dafbc514c065.svn-base @@ -0,0 +1,91 @@ +%mex USB_ISO_LOOP.c -Iincludes -llibusbK -Lbin\lib\amd64 +%clear all + +global usb_handle +global scope_gain_0 +global scope_gain_1 +global scope_window_time +global scope_window_max +global scope_window_min +global scope_mode +global gui_scope_running + +global gui_hori_cursor_a_pos +global gui_hori_cursor_b_pos +global gui_vert_cursor_a_pos +global gui_vert_cursor_b_pos +global gui_cursor_mode +global saved_waveform_ch1 +global saved_waveform_ch2 + +global refreshrate +global refreshrate_temp +global waveform_exists + +global trigger + +trigger = struct('l', 0, 'h', 0, 'state', 0, 'begin', 1, 'enabled', 0); + +dotheplot + +if ~length(usb_handle) + warning('USB Handle not initialised. Initialising!') + mex_usb_init('03eb', 'a000') +end + +[isoCtx_0, isoCtx_1, ovlkHandle_0, ovlkHandle_1, ovlPool, isoBuffer] = USB_ISO_INIT(usb_handle) + +refreshrate = 4; +refreshrate_temp = refreshrate; + +if(isempty(max_n)) + max_n = 10 +end +saved_waveform_ch1 = int8([]); + +if isempty(scope_mode) + error('You didn''t set the scope mode!'); +end + +if isempty(scope_window_time) + error('You didn''t set the window time (x) value!'); +end + +if (scope_window_time < 1/375000) + error('Scope window size is too small!'); +end + +if(scope_mode==0) + if isempty(scope_gain_0) || isempty(scope_gain_1) + error('You didn''t set the gain!'); + end + + if isempty(scope_window_min) + error('You didn''t set the minimum window voltage value!'); + end + + if isempty(scope_window_max) + error('You didn''t set the maximum window voltage value!'); + end +end + +dropped_packets = 0; +if(isempty(waveform_exists)) + waveform_exists = 0; +end + +for n=1:max_n + %[transfer_contents_0] = USB_ISO_LOOP(usb_handle, isoCtx_0, ovlkHandle_0, ovlPool, isoBuffer, uint8(0)); + [transfer_contents_0, libk_error] = USB_ISO_LOOP(usb_handle, isoCtx_0, ovlkHandle_0, ovlPool, isoBuffer, uint8(0)); + keep_in_sync + displaypacket(transfer_contents_0) + updatescopeaxes + + %[transfer_contents_1] = USB_ISO_LOOP(usb_handle, isoCtx_1, ovlkHandle_1, ovlPool, isoBuffer, uint8(1)); + [transfer_contents_1, libk_error] = USB_ISO_LOOP(usb_handle, isoCtx_1, ovlkHandle_1, ovlPool, isoBuffer, uint8(1)); + keep_in_sync + displaypacket(transfer_contents_1) + updatescopeaxes +end + +crash_recover \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/46/464dd4dd02051c93fe0a923037104d7466493cc4.svn-base b/Old Matlab Interface/.svn/pristine/46/464dd4dd02051c93fe0a923037104d7466493cc4.svn-base new file mode 100644 index 00000000..02a976c5 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/46/464dd4dd02051c93fe0a923037104d7466493cc4.svn-base @@ -0,0 +1,109 @@ +#region Copyright(c) Travis Robinson + +// Copyright (c) 2011-2012 Travis Robinson +// All rights reserved. +// +// Xfer.Sync +// +// Last Updated: 03.08.2012 +// +// 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. +// +// 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 TRAVIS LEE ROBINSON +// 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. + +#endregion + +#define BMFW + +using System; +using System.Runtime.InteropServices; +using Test.Devices; +using libusbK; +using libusbK.Examples; + +// ReSharper disable InconsistentNaming + +namespace Xfer.Sync +{ + internal class Program + { + #region TODO USER: Set the test parameters for your device. + + public static StmTestParameters Test = new StmTestParameters(0x04d8, 0xfa2e, 0, 0x01, 1024, null, -1, 4, 64); + + #endregion + + private static void Main() + { + bool success; + WINUSB_PIPE_INFORMATION pipeInfo; + UsbK usb; + USB_INTERFACE_DESCRIPTOR interfaceDescriptor; + + // Find and configure the device. + if (!Test.ConfigureDevice(out pipeInfo, out usb, out interfaceDescriptor)) return; + if (Test.TransferBufferSize == -1) + Test.TransferBufferSize = pipeInfo.MaximumPacketSize*64; + +#if BMFW + // TODO FOR USER: Remove this block if not using benchmark firmware. + // This configures devices running benchmark firmware for streaming DeviceToHost transfers. + Console.WriteLine("Configuring for benchmark device.."); + BM_TEST_TYPE testType = ((Test.PipeId & 0x80) > 0) ? BM_TEST_TYPE.READ : BM_TEST_TYPE.WRITE; + success = Benchmark.Configure(usb, BM_COMMAND.SET_TEST, interfaceDescriptor.bInterfaceNumber, ref testType); + if (!success) + { + Console.WriteLine("Bench_Configure failed."); + } +#endif + if (!Test.ShowTestReady()) goto Done; + + // In most cases, you should to set the pipe timeout policy before using synchronous I/O. + // By default, sync transfers wait infinitely for a transfer to complete. + + // Set the pipe timeout policy to 3000ms + int[] pipeTimeoutMS = new[] {3000}; + usb.SetPipePolicy( + (byte) Test.PipeId, + (int) PipePolicyType.PIPE_TRANSFER_TIMEOUT, + Marshal.SizeOf(typeof (int)), + pipeTimeoutMS); + + int totalTransfers = 0; + success = true; + byte[] tempBuffer = new byte[Test.TransferBufferSize]; + while (success && totalTransfers++ < Test.MaxTransfersTotal) + { + int transferred; + if ((Test.PipeId & 0x80) > 0) + success = usb.ReadPipe((byte) Test.PipeId, tempBuffer, tempBuffer.Length, out transferred, IntPtr.Zero); + else + success = usb.WritePipe((byte) Test.PipeId, tempBuffer, tempBuffer.Length, out transferred, IntPtr.Zero); + + Console.WriteLine("#{0:0000} Transferred {1} bytes.", totalTransfers, transferred); + } + + if (!success) + { + Console.WriteLine("An error occured transferring data. ErrorCode: {0:X8}h", Marshal.GetLastWin32Error()); + } + + Done: + usb.Free(); + } + } +} \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/46/46a1ec401c74e36b3e78d64c045fe1e8c73479ed.svn-base b/Old Matlab Interface/.svn/pristine/46/46a1ec401c74e36b3e78d64c045fe1e8c73479ed.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..1dbe9cea538458c43eded095874afe80717bd47d GIT binary patch literal 7680 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/48/48aaf1da9402bb0414597607011113f2852d4dc2.svn-base b/Old Matlab Interface/.svn/pristine/48/48aaf1da9402bb0414597607011113f2852d4dc2.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..717244d59d3388a7d0c61611fe09dfcbc16506b8 GIT binary patch literal 247096 zcmd?S51d?OeJ}hwXJ&WL?8bP8gm%VK-e)%f7mRj@AssM=vy%{)5a>yWbg*d8Lcm2M zoIs!pP3hTWlDlZEBcd*r-kt#7E=ucAw8ndF-;;nEEWUTBzWsz-``(j4y{pxB5Um@{ zh4=gWoijUgCX)oz`o4a;8j@$9bDrn-{Qm!b&+mE874N80iipzq^YY6?`|&sbSn}V~ z{6`~N_<#J@h4k6X*9P}%8@@KUdHkl^lzZzf@4j{Hed_wLn{U2lySnZMb?fantDA0C zYk%u1^}buS-0-H?yrzF?JoI;e zmP-3$&wX0jJJeV_cj>89()d5+E%*_YxsdLKRh z8}GcT+1H>UHK1pR#(|kq^jk;aZ~jB%VcF5Yb)sI<$)zK@pvW=KN2< zou~K-Q{?e@C;55P_8TU)qp$bfcu3(Ny!IIM<}3KM^Cox8*!D4sU;=D(270$92ets^ zn{K;R9{fNr`UCVE`1|f|&qd=M#+oQZKR>_cgy(`cMURoW5d91o!?w4}bGP1h>-Fdo z+^P7v>Iu(TZ@Tq{t+(L8=NI5%3(xVm_nq)uOnvnI2m7&A%;#O!-INvPcn5#{H{j1} zqX*Tf?umQ^OXP3os$~1Jo9`Igdeau=jzLA-u>FQx@vqx%yJ3skev4Yeiemds@4G?W zc>B%QZ@=l5o8QzQjS3bjC&zKNB-_pBD3z9Z{rK-;x|wdLt@z)0@<^}e?eQi(2wiHA zw`ZrfxTojROE2BMdpFBe!LvONoI3paqW#+*_0ew@3bs9k7uB#gg)XeuamL5T4WnH z$+r5dWZU^{vhDw6vK`ivZFPIHZGEPr{pn=e|FdM<`D91?p^o;SB-{QUC)?ru$+ntK zw*8MK+u?m3?MstwbxX4C-M&CCBruWWRSwvaOaU+s?O>{N^u7_N#wR_6J9k?eLG2ZS{#{+xl>_9dyX2 z+MDcGALwYmKiRfMlWpgcWLvFHwu4Nv?R+_jFY4e=|G{Lx`be^E{ikGGRg!I*Ot!td zlWp3OY+H9F+ulU79o&&@Tel|LzME`Y?@hLycPHC0SP6Y>U7KwC1b0&+aF0jZ*{c84*60YZ5m3x z@12!wtIsC+F?=G~_CAzs2kVk;r=#uNo5ZhwPqH2CO}5nslkM=s$u@QHi`AhoogXLR z@%|>+c3zWQZ+LF9-x}^{A4<;ed?nfTFHAn~ydl{}h>_rDT9IsfznN@1#bjGulx#a4 z`d@YE&*0aS>!a6pw7;8#&+5>hRyNu1cf!9Q*&lT1t8gOOAO1nIO$$5PUrnyh`oEIx z@Tp{5b@(5FmK@Lei;i|J*;bDy+tyRbcF=)O?;n!=*8fblH(j;%s;}%ATmQ}j4_^A| zPyWq4S3I};hwNY9b@8>g-Es5##%{X#+IQb_%e%MUa6JO+Yj3~px;JjWb?lCtZo76n zeChXIyY;5)@Vob3dmWzJvUTgVH;t`a5&!aXgmTxBVZCv&*VEAYDjUKyJxSS7O{YQs zUX4cComB%3TAefNBNK&TG}DwdXjRU1X477Z#>qQFv+(OdD)x9OMWb3JizeW+w6~LI zP=$4l($1lkE*8KRz&4r zEhgiWg(d2o6jeLvk+Ja9ph-Rw7fwI*Wt||$^l8q=gS7t`!-EUs^?90$Bs`HA%9i(2em2@3i=?0KRbz`Bw7-xd&D+;&YP7~E>m{$~ zFRsvS>LNq?*2lFK6x8(`fb6Le-nY&uc^Ad+>r2NL6@R7V-Kj%M52kJOFQV6#_8ikp zv{P1!N_k8q@wHCWK!ORG3$)|+Q);ZezkZtjT4#Sc`99Jn$?-e-UG#I>CZ0b`_3`^V ztZ7yPfY0IgCx%+V>`i}~8|5uB#q@9giur+1ou=QRBm_fNd1#V-VUyJ#OvRT&>Z zB=B)1bO=kwb_1j>Lz}A^R(m+yzKk8ZsJ}_T9 zK5Cu)TC%@-ntr#lzXRX)Y5EJN={M1DOx%q1hR)Qc^ZZ!HzfUDE7%$o1u^!+*+24Ur=QRCRXMe}|3jJ;JB>E&z z_szpkL@L{0`_N`TXW1SHBimc{`C{1Tu){u^qTjmNPwPUq{|7uOg{4m<={8X%IHO$vw`6&0Sq{U``1@QF@(EZtQeUyqpy0*ZT_YKmoer>U# z%@maL!`J@ry?N*OHS6BO^Lc%TUw(PL;p$gY5$i=iXi;5+F3n4gGQZgj@2py#TO5o` z0AKYHtuJqD#bPx}I|{0|fd0JusX&+n@J~eWkG8`P{H)EHHLcIvAn**-X=To=j*PeH zw*vG#)TAHqv58e5;{!jc-`3XU%tm^Kcs*$n_yUG+kep?j4SKCBnhl0ONb&kzeI4+F zw@3T%#u`KT#o01BX?VNlsM0^q`15twRsIX_*1nfNtS*Ls!T9L4@H}#x;3xMm;PGbk zl-5SS=K9vPuMhKYD4IUcuVnrSeM2<=q2~O{b0+cp!LE91{)y)Nb6w}3!~DUYb)SDj z$NW~&41|91{8q>Oz_)+B%pbn0`ROF{Lq1#l$z+0kW`CGG{ZrJ2FY$-bo%k`-Iqbi% z{5c|j<|O0?{7t1mr52(Db}=q#@pOFNpkv{gkDLxO*ud3m$HGr{sU z+g08`U%PZ?OWr_Vet%xx*7ADpi{-7qpq0>{o)-Cu`At?}rs_9qcD!EppUCR6UL!XM z|6k_!X`f|4Neq*HLBB@MG++?eU*gC6ba$|Vk{qc)0|CUN)e9;d)95x`s z=g5Y>Hoc;`1n*OCp{J6sZe)0ce+rQIMFt#-XnrcJ)NSaWXnrO%^bg*LKTB&a!1{Rp ze6-%zD4jHmeh2!2o7nlmkK`#fH@HUjva zooG{m;f1~@=(8!MeBka|nFv09Uh#T?Kf8$e)F-xK({;sjkhk*JiVFBR)a&tj=%vdH z*6(Dd9l+D?XasnQA5}}N9_W*vHu%=rG-e1qCVi3D2YO_t$AF&}e2Z#$pYa8JR*#aM zbp)TfqEc_2;{kfz37kdOTR|x zQK7$4n}om6IO}T*wqZW4l9>zE(xBiUTM58lgMfc01^)5&0KP1*_u&s`Cnr78*I7?P z{IA5``bR*IS-O%;lh+#{);yYr{n%49*RXx5i~qX4{N-YO_TjzT)WaArT3@u@9?0|8 znP0Y~6x*x9%P)`iOFS#`9oE_Y1G9KS^by<7_BKdoWoFoZs#L{PLGNo|-+bnu#>h9o zFZfY;fj1nfi#>(EWY9R)*J#>PBP8&rovKuoq6y$*N&|m7y9!NuA11qO2Blk@{7I@j zovmqpVaVF`P2guXSV@B(ri$nDHP~xP!T-VUF#m);PDT6+`nV4M%g$&eBkOqZZ^*&i z#vFlPLv5;{kb5Z}%?m#VlRe&szA6Sa4pR~E&3Tic>~X5-b+rodJktmKuZ8)l2K(l$ z*;<(Cbud1%MJtM?RmJ#TrmBTm=lBiQTin{1m+G~6euMoBOXiR9neZn&<-1M)VG*Qs z$AW&Lan|o)H~lX0eW<}71HVB(&a!{nIIw8+GH=(Q{Sl+i{%K9y4u1-|tkSPQ(WTXq zt%c#>`_GWqKjW?-)kt3hZ?CLfRFC}`1N_lf06rr46aLUT;eQ>#5m}2A(~m(l$r^_} zvY_>rlELt*F7Wb`?LWv*AwOa3>@PC>`Q~^SA3rLgKYxAR-m$%*!Ydd*ox1?zdm6@a zdU`gD^*BNPl4xsO_4IBSGjfzW+w>1I{|Wvq)_*o;F9ldhB~6cRo`w+OeXED;u^xKZ zj@wR8AKq6Q?3K&@0KuMA7mec4SU=fk0A9z!cw!&B!uzV>E1njTA2f<$f^OGU|u-IRxXQ6R_#u+odu~hIO@d@IYt8=FJ zo=3rAG1}Wh;8%Wn1YEy2pyBzWshEY7SN$gq75AFI${Cf+- z44O0z`~yI%onIO^!5=ScYl~)GM}F1PjSVujn4LI66a;9IZiN2Ej zY8n2v&HUv*IIaQ`i zt6+aoKcUotk#Am+v1z$7{gJhW;qdX%Z(h!fsgYY(ld0gvxo=*Ur~XwRx)8sF{&S&! zNc|4rcdp(6fAf(l?1enf{nS@TAzm_QsEJ?EPX=vh$~T@;i;6AzcD86X^b^}}u@BIS zP)^qQRRlRU^eO!V?C~rC-;K1Q7y9ZizkGR?eh>3E_HB>#bq=o%QFzggAsz(z?T}zk z!ehUG_c~|I5#(Fzc990d1ru~zp9A;}dA^X_IyC4reg}#d(d(B6`e%7QN>hJ%u$)_L zQmvrE8uG1e>y!8h>ziMX1$su~)h`|&8dMed^PoTGumAY-cdxT99n&iL^5iw_FMJm8 zd*F`<-a>As3GXOB?>!jB!)b(Pyq-eN9~ul(^YDp39l_VKuR*7M9cTO62A}`Z%cH!`$B$nH`!qi0?UHyI`W^9yzY6_{c#`D_KMMXI)(b`GED6(Tt&)=Y zt2*{4oSqvnza7ClQ&@t>6Y&YTuh(si5Bx{^(fYy5WmEj$sLkWY_J;FkG?muu>^RFS zrPW#682-}0obboK9Rg39n)H}x(gXa4{7cMVh#xR0)5Ar-{l8xx%{D#<{tF)bY=Zv^ zxmxpm=m)I-!AIlqo9{R2o#6j5=6@)IrI;kvN4n#&epjq7>@N1mko8oGe6-TVt)!hY|RNAA@H>8LyjL!4f(se zD&`hfk8LF@*a?3?FKDpWYA5nbVdkq;&(D-slH&KhKK!*NPgh$DSIBr`|H0t!huk{H z|68EX+UKi6p4#=T2mJtlmgS%Kv*2H?I+`!Ayhh^}n4Y39JM(33$m?PG%uL+5-%8g< z?h^Y8`4s%PX?KC^ToqE~**RKCbqzaP%x|Q=PCH8CuR~sf-|a#lJOuolJU({bewNom zDW;Famtx-B5SWtcs>|JKgfqe_vo?1Pu|HXeOtbxC4{mP5*r)GDo zVt?u>_)~{F{3#3T*Tf%or@=454ITJwryujH1^Q(Le#rL_7JEJLJH_!t2>Ue};Wt{J z&`v3;?2f&Nz7M7-j1y8&(l^_V}!`lbF2vQ4qaf=?c^r4KM^>4f;bL`#SO?WSAGSj)ncJ{#PCGKqRlnFTLU|!N?5a0UPv% zKHtpxvZ)^;`bGSW-<}|^c-|KLf&x_?^bXmdpyMAu`=3SrVBa9WCb?bgTfp}0F#G$p z?@W+o?S_0q$3wmg7_B7vD)|41KN{&jr*ZYr_sMI?Z&TiHOvrmSR4bq_*#BZQDZt0^ zm8^&5Gpmj?$ET_Tezdhx(X6q&MEp3~A@6gHzi?zniyyH*w;}qA$8$dYSMU$CPlF$L zzIea;z(ktcu(&mpY+!m((2UWgv81%01%WS2C zDdX^}5b&)8d?Q<9e7tCDD^xu-`|=;2(`SLGy5!@8zFqV6E&QOK7Vwz12K!Rgr{eM2 z^>rQc4EqfJt4jRhy#w)pMI7H1Sbp4BB0tup*uMzq&3CU0#lB6j{LmAK50uDHS$kKU zpA-KriVu9AFG#b#aM}NEO#V6S(-ZH|JY5|Cf7uVhe-1N0Cd8w6Sqp#A79Y&2YvIpG zd?5amLDx3<6I3`szOq0X#|P}MHM-~z!;bV{lYg^iP;+T;5cw;?ch+V2ebKi(e!n+} z`Aymnd8C1)zsdH{RJ=bz$Nw1mlb>(Hcgi^%`g1~CYnt4JcyuH3aa37f&DM8*81l;X z8{lW)BiPCD1IGuLpXrfe`uYDI{v1KY;u#Sk{50%& zX3m2DA2R-}^!1=eRDW~q^JRNM@)-ET*CF2$uVupR7n{mreswC~=S9Z0Rc9zB zg_&~C0=?nCmm_*xJ)1%Ai9ygy>O&lk_mFRT7hIR&52_^+4`#-hA4BlpXxIb&VbIpm zY8LWa7*gqsmdGbpzt*&$k^D0K1wTOwGY(Si>ZJX&!2fZ)GQ9girFxK$Y{#c3&v&(_ zC)Edr@Q=uU#6K>}zr@=S|A>Di@tV3F{;oc8B=hi6N>|QytsaNtE$~;_tf&GDb`pR6Y{J8?Cs0{gcX$9Kp#tVX`!yWR2)1@I&M z+h)A4ZeV?l;hXxr)4%nv`Pul5?PtVq^>=TZG{O|(r^x>*?0gLTBl&<%ezRF0Rhb{X zwcrJQi+pLF)$?{!G1;bQ>_2G#bW|h+kcGlYtHt1YLed)|9^)06Z#PI z^&*}(svO^9uMP3`9*&1+|ygw-#-9-H`h(yHPm(B&-Q#4{Br=n zfC4}5{MN4T_G5g9^I1ibJpv(+rQDYTB#(M2ElS^M01%cm(fAJ`4W5TV;HR zzVk=0|EJbG4g30LU3r>^!IygM@2Vdfk9p8{c)p<@g8#nf82d{s5B|=no8|nDYTGa9 zn$N(2oNH;Y4kF*`rOx>4P1>-A{jA#LJy)Jb?Ef1x>|bHwpK#Sm%%7#>*(=`CDDi$# z0Hh8G{1Q*K!#~aNGk#)v;GAU1%M5FwKE?3_rC49eezSA@a_cSO$RX?p*&NUMynoWr z5np3G*zcLaan>)OXJB{O?>HX=`0->+pG87%e$^yrW0Kzk9r|ZZaXfQ5;%(>4s9(!e zFJySq)dg<2`#iKwf3**IVW5)Df!0L z&3vN*{qoLVBYww2z@JBKZ}d$cDgqx1V|shqDExzi_rd>0KlTS{-B&o@f&EG=kM+%H zUDhY?TYK{0pSj>Y@UH;|#Gh3e+ROEv#Wvlr^fl5hQ2lCXZY{P&p0)XrG8%{-Nx@7gBp2q(2u_8N3rjMzbOAWjL`=jFVp;K3JVn-g~DO;os+cWGTWwfYj*({MT9Ds;u8EjxR(XNBi+rw)c@g zHCMlmRCxcF$fDh_Z~et>oZsl`kMewaZEy?fZQjiK!(nlytUn|93#=6RjXm(!^M!qH=lsSu3ckee7$5qEZbQDNIX>rCgda_eZAeo>EY z_?M-WtFHR{mc8<1eOc=Xrte?8ZxZi30eKUBFYimdg?#36$UnxD=htLSexBs{`oZM$ z0n5|0hV_bl3okOYZ{tx876yg9Ze6BqmPhaEzb$$L)n_2DX6leLh(S5O{3QHw^5Czd z4S(Cy=Iyg}xyT#qf0-Zff)GOg|Au@~s3QKFr$4{n!e^X+xA0r|Yp8#~Kjz~(iC4Pr z|CTqtj{PIVZC3VA62n_ zlhzz+`A3j<*JFKX3cMrmk7&)4@Q;?Tf8>IgOP!q+_&+^}Cm>IFzODyY@9ug3$kuni z>jeL(Ydr=0qjJ+fN?Y*1C+;Cbh3wz@yP@wX?J0dbu9aIewY-mc|Iy*UR#RdIsdT>#_ZWJT=rj zKgj+owd5(be}Esq#EAG&i-ey1Pm^#qGO<5M8uDS&S z*xxBWb)vsRg)HNP}P5(Pb*#NWaE4ISgr9>gm~BhamL>yv+g{0aL5*{TNlVgF#1 zfl~Q#&VQNW|2cnyc;+yHKm3tOVc22(>n@&$|A6rV6nON(o|ce*8ENL<@ILU3k+5E| zud-gjFWGOC^>Th@9v_SrjA%1I)n18xExZ-yXKMNs>}xCk;N%km&W#0_Dcoc6ZT7i z3d?Xf{;3@_XORCvd^MmXKQ{JBvVzCgi@b6?{ezRm)4Dr|_}z=*9o~;^%kLmjdFZxQ7Sc)tkepFj`);C%i~_UFA;{>^Re_l6z&y#e$s*PHc5^=7F?KllgvojBj7 zE@l3i3t0c`D}Y~cDhK|u;pFCrhO z*uV625Bz9dD*OO`7yKfzO4fknC!`(v5k8P_i2Cv0lj{EmFdp~E`MhD~C#MTPrR^(n zUJpM?Ugat^rg=<%PoGjqm)&@LFZ2QATk>~G>_e6FGl+LFzG3B$8tx#+ryTEjH$eY9 zrCzw~k|oXp?d&m&{o!W}x-M5eAo|{d{)zRi%kbdmr0_qA@om@(*dNTVBp)pCGhWhA z3A0yGaL(@|ejfkQyEuOS0;KD(eq#Mm|D1BzzOcUS%m;CPChM?0adyK0gUE~iNBy&E z>3^p~|9cwrccT=v^grNpCwM)QpPA6tc|}Tn1^S=)A)ng_{}DjLf2m^q8TIAQT4|L6 zJbwBEkPmlki;jE*DyWMtwmI?Sbkf zo_87lc)a;Or5`vedVdkWUzPkndElpf{Y%aH@jUiRCZhRaf6>JIu6CtDJn{fF`Y;0O z&A))>Y5Q(-o7HFe}TXMBF4v2{Q*m*jpAFwHhUxcBZ%Lwd~GqxM}y6( zdC3=Hs;Iu8l$HIK;4a>e#7}eo=A`Epp%0?^NgWnL^ubHN+b8l`O<8@Yr>ttIZw&PN zYD%FXt&%A+KI@{NnH~lmT35}Yzc3VXzAUl72>7D?DO2JpcfZv8U1_2IW*YS3dhLFb z<+Y(bU=8^%zFhONCKYsBAUf0?dS zECg$Lx$p;bJ4QE}_$St5;s1JQA^xr%`@=Hcf7bGN{~qz#Q{zj~i{}Ss3d@+EHpkbqUpZ({qQNq)@Xc*Re5e(_ibES8T98^te7DswcCdZ#~vGCB(0I zUiK>#?^pB}I6kHn_Fw&;x5M6<2R5^OK)->K;8*O=70vL#j&vz%N9Ua~+hHH&d;{ub zoB9oeUz0E2@|VzW->gBug{3XQc$bP~z?0tD#?o zKEc7y#`E{ja=yN%Z?{nIlsI4E^?9uChChS(>Dn(W+(y0Mp^7#>f_R+QkF#TlmuF|W zp2IoH_FvYopx=)?hVlHAF}o_E{}8{dhd#ynYdi5g){lHP=@;YtQvY`3uWaBmTW5dW zZ|T27ykG8&Y-!PFc_Ke!v%E+9k#(#W_7VF(?(H|A-gxeJvA-nyk&>TxSlh3VmcJ{lk@ejx+Q01FfA-kFiRyP`|5@@= zb)D^_k$Y>{Z*#sW;P@@*L4C@xYvAub|6*(ZsodJ%t#$a9?fLnKoBoYE_>SD-@S4ZS zlJ%kfr_BD$o$Swa><2Ku$ROS}9 ze8AH$`}36g49ovJA^++C?6c4K0XbUoKhu=|f`)qXdIt47L8gFuL)2$9fABZUKk|>x{CL^fH0LAJ(@pv3_hb17JXT8JiRJ%YUF5%@LH>Pxn&qG82b8d9 z;*V6t-vspZz60?l>g_Qc{4+TZ;MC{y zwQc&K#_}>f0r*3g^})aWsOAmOOPBP%r9OE;S@Qm(;oDpC|B_~>L)t(lx*-3u-)C#1 zWduCnPcM>h7w4UPy;>OZ#b1i*y$-T`_k#Zx4Ua_mDhz_Vwm3d6;q_M}?{@J-dC$?- zb%^I<|A_bhwyxg@dU;@dCC|S)d5`MP1KFQz+3&Xc^HJspiEkXS-}Zd{dH8k2tGdPe zW#LA|uP3wLb}p_rkLyXId_zqC7Jnu4bKrlfgI?|O>b(W@h~jUi2knMFhP{}tH!pxc zqI&aMXT5n@{5zIc=K$5Z)utoc{*$Vtkf8|O2OU3hd+b`{of2sHKcXNHD#rUu4kMjNr*GES9 z=lDOW4-x&_7IBLyoI^*9?*O4-TCh>ntFc?`i199Reub67v+2= z|AKn>e4x}j%YMBj`}smYp_k9&wew5;)5sr4JmQLc(1kw*eI)-Y=ObZ%usQ}!6`(>n(@wg58 zpnhjQ9~;XH;zun0H1bko`PZB0_XS<*KICKC@nJzf;CvSLGsJ!)KY@HugY8va&TAA{ zeyUPW){*~|dRpRq0QL`7FB=M3exmqr7IO{O*?$Y9UTKuiM>o>^pA6WnB)(G9-|qLOMRE>#r-OasmVgA3EcXpt2J7`rGJ_{3n0Qtcm@{_<5?P8$aUtIDZiy#CgqdH}jvs#{*)| zVAX4$FRY=&L1G z>L0M)aXF7C<2L|*w#e~zJ<|Wng})KcqdVpoJv!fJv;OIpFExhWDEH%Ff5Q{~Z*zXq z(UHFj_`C(`=fS^K&hPrNzaaX++q8`==j%tPdEV%o-SU;f&-K=MBhLRKKLP#Ig0CI_ z?fxI@{}A+O;T!rF@@t5EiTwwDb-_LjOLKOE1s@kh$}0qh0sg+CTy zaQ9WP7vl${9uWK__TDJUd%o4>tC2tTV3L0J8-5P-bFRVp zqXx$}PE=oG;e2g$ergZ<*R%94uJ_vk`^NrUwlRPHh{ab$`-9e+Z(u*O_n+avRqwo* zkbn3ZwEu92|7O8|(hNfVgq#NoI`a?h_KnXU)wO2*ix<_uK;N|GCxfo}NuT3uyR-gq zhV4n5pIlExdl&3mxEA^?UtoWm>#Yy=c^tnhuJ1r43H-OnUw-L|=6;^~SEipofBxv7 z`23N70RD(c3~w*S!+8SKSG4?4!{b#`)qi1lW)kpd)B7%m|8zmcI1dI`>IG15P@mjU zw!B{U_h#6CqUin%*!NVpeZxYfQn2sN6ECdw^3&SN8t(7$CI5o`_(Q=8;78vg?d1Mr zgZWX;1BBvV1%UO$`vU@ApTw6zxBY`(BK}i+zfvnd{tM?n|GP>4`{=9WKl+oOFaMbW zPmBK;o?j&Yxqg!WtaE<~{;S?J?Dg1u{!;a}>I?b&XdwFU5bFauPwn)w{+ng}XQkjj zvJl4l&s&50QNtVm7Wsv6`>m}1{t^1`P)GjNiu51yC2jzHYA|SFS?lT(7gVeU50#HxDoZZPS1J&xC!y*=xd7p&W~Ps zp6cUxW{&fzc51>>)Oh`c-^=@)uf|Go9~k?;1A%rc#_Jg0+0WxkeTqRh66*gLKeeSo z55&LxJ{Ajoj(jlmuf%u3zdiDgS7i4eK>nn<^WzI2=?hr@7POn8uReXvq~ZMNFEw-k1INw)f?}Mw4*A(+Txa4&HCeKTtRX`3z|- z&MUO;XRtczqoVU?9rZizEa&5;K6W<1`UvOuaDEx~DsMfaX_0;EtFrxQ(8bsQb?_Z_exDN&K3eKxwe+u>>je0qpzb6{xX-a;jfB1fb*giGVRdT}~ zrFkuX!xMaE#yOuIqMk{qGe?nsn$X`talJh3+ZxorHP0Ido%L^wuS|3v==h(#?s~=f z+kJ!Dm1VP@y^}1f!u7G(6`9_+Mt=bHQs)dM=I=$me7!!QA>VFu{23zl;r-lL9=*N> z)6?xK#`n4U@qMniPc%q>aRHzMK2aZbE#K#g`*?!*KG)yvxX<<4_&(Plisyj;Q{Cr^ zdfUW(uDQ>F{+J0EmH3oM?i;Pe{DAvnEacy`S8<eSX|;Ci@c%mBK^} zpX8^z<>yK6pDXC_Iz8TB87Syh-`oiHn-%2YNqP~8()PnA^7av*&rI=n7T*uI3xj`( zI2EcWq9^8Ahl0QbYzs2_pMDi!+Aw#_f@xtx_$XAZ#udbo~(h>h`cntnyERTrS zsby09!88py}=gd_ow6h0QTEgP2*6EUsKYr%lp+y zypJ~aXKKP9mzCo-^uhUFHqah$hrFE_zrT+9`fPpv{$t3)F#EgXuqU#=hf&)3(-_zJ z{!%_)5CBtE+~0`&wcyL*`z&YjOpoe8&`0o#dNr&sn8*JYvW#yGig-qG{W|WmEMq<3 z?=VHESEC-*m-Fj24v`Ig#_$HI@9}+%>D7!c#5ci%&sZMr2SPk&KjtpAWW5>Mdj51) zp7(S-KQPVfDLnRc+}~eadM@avE~6#hV)*a*Lt7uQG&8Q(f<7}CU(tLf?0tXr2-mO8 z*XOp&tI)Hcn}2i)d>j(~JUKp|75-y<;2U<($Ef#M)BE2hsZ!wcplLb`L*iu{Bd)}g z5E-U zgZ^=zANMEA_W|~Olj_Ih{f=wLlJ`%pJ=y(}tdD}lkf+4`lYMJ(UkKknY3UW8R{`e18 z(6Y}K{*8Py@;7n)dfdODH`ZV#U z3_?CC8XsR1N}S&+KwjGU$&r3IV@ok~EFb(A@RMVI+Uk~Hmio*(>l^SZ{O9Pr0N+om zq(0>^pGPO&-w2p~{WjB2&SwN)V)~8WDfH`hJ_PIG{S53k$oY*E>M7gzGal|julkux zFF9{_s(Nea3tH1rZ|(7Vg>V+eJq1q8&ioPYTAG37@e}wCK7cqX0q+me@scxQ{UbU!y z{yZv3rDA#&8Gf$|z3@!p$0%MX_oIP+fzVIRhj}c2?eX<|{RQG5(9hO;xn2YQpl&}_ zBvt#iOQ^rwq~SiNo0IoB)z#Ix=)SQquD`(kIzWi|t4-fW{=bDj$e#~-);su<7K5Jg zefCus{sin#RDV}()en_f{|BA>`OZ8&4=c7O-ydav{zb%dxF3>G56k*Y=sC*g0V8_V zy3tGOEvhW93K#fQ+T};RR_K*H-+|>oehNIl+l3xR;X?Vo7Vz&2{=@nFhR5}esMo}L zLao-Uf3X<R21HZufGboOP{1Nm^8~uLj`m@U;d)B@F>~!*1>?VII zl0U9LWBkPOXZD|(evQmY^`&Bc*{xogl|uVZR6qF3K|c%n=4Yp$r~jhpXB(%cUm@!6 zX764({p9C=`cK@i4*wsXX(d03{nF=>d)Qg6 z4^}m<7Zv=}(m3xLrnitQ{dvR_D)I;VLc|aG@@9Vj(Mt3D@*I2zybt|{=Yd~&pVC{J z=X?15_VdfRj`>H&Wd0~0fcFpc{q_yaAD>??Y{h)^&B_AoH+&WO3|UW=&$siB`syM0 zKh?*yEtX0dhmz;_>d2=cKfV05#gOx1-Wi9$A9yK>=e+3r-ZcCF)zQiZ8TY3g{+i?Ubia?=68pjY)8KqYkb2GV{r#g{pDFvf7V}TP_`4S8pH%7}k)N%N zuP~LZAwL{g;Fkf(FIj)NIo5CZJ|51yMD&w<#x$*iDw2Fln)B1L-|Hb>KG?_WZMTPw zmr*YVq&MmBfPYNd!1?gWDo}$T1;tA^Up&3zK}DVCiyL1BKMB71QRu&Dyre%8URF5RbLSK|NaQhpQ!l!$qM)fPj~YV>_~s0z96ALcz=7I-`nZk&R=r= zMDOtbQ$Gj&VI2T}HqukHE#U9l{ea@#2bif;(&#fNV znr41VQ~wn2|2W!O3+Icc+P~lE^?AJCI`cb#hd#TV{gL-0KXe!c6oWE;_yg1fJ~hSb zjr1$y=b0J}sj8ML7cK|9vVRjOme0oV zOO~nn3lqx1OIWXYyXg1U{!D9pmeSvr?sISk7eh*`R zTH=9G@0si6J^-wTzrO-{cEA50NH}Ty!1~`pN<4FDEA%_-w~~Kd6fZ14RlERw4}NeP z>~D7Jd$#ZG`q6|w`&sn8&H7&M!)ljzt5e>2{VeZtKB?b&4e61*`#Q_}RENC#g#E%o zOWv!_us%rIXj9%N(u(EXYRY?=&Q8dC?Tsw&*S5(!o~M?)%lnkJn)1%?C*>XRw#j=7 zUeyD5A@8t%ZSw9#@@}!bdtKyx;+m$stDc<+d8Z4>s6OTKcp~qDAILlOkCwKY@;)u{ zKADtv>^HaMU9r4dO?kIl^6qz+_xbuLmiLUvJADH3t`^^^YuFEA{l)Q0!1o&s%ucK_ zmHN(xr54x~@dWM%YT6gE$06#YB6}?Np|$i&bl*(7{d8~_---6v#d&{!68Tw-KW~r2 z@h%i$9-h15A?A0{fQuo=dW$z6L6hWAMpND2zs^4 zul*CqZ<*__#2+R3UXtBWk0;z&HVmF6n~BK{RQ%U zO4+}~{ZH^etmQaABlibn>N_@(svdcmEb9ljpB(!cufU&*_A{J_KCj51Vtw7{pik`> z=o6BB&wGA9w_%MUp@IFN$UbMqzO>y>c#8Od{dL2n+km_dMEZ2ZF2w$UL8xbOrknW))E}Z=LF|jjZ##e0ejxPf7Vn?b z-^HYfpI>JBHGcH(KtFYB2mRE)8~qyJ|Bp?-0`$$#UH%H&I_PKpyV0-k!q0(z_GP%= zQ}m~j`s3F3eI2QvsB?axO@BJ9KONSeq1<;dHHi3z)5WqYqB?U@IC1A1LqY_n&$zheXL8*lBu%lDzpH9K@W*>OIr<=@2lE76}pWbew!{d)IbPfEX0fw#+keL{JnVf+%&FMz)Jnd#@; z_6fFcE&2ujpV6=Oy`Ka9Mlbvoug7{2`@hI9p?=BMbkw^ZMBC!}Jbc4w)U+>WvImKRS(NalhkUcQCAvXni;jv7&h%VkQlINj?;# z17Ey8y{zGRd@l<6VP`+^TO8#5PrWyW7x`PnqhviG=S83o4y)$(6obzEEyqJ`<5|0S zyuu{t8R&h@@#KC-&zhF{T#Prz^|F#*IpO>b!-x7Iz$ecuvT>hF!^izD!OrG*0}`J& zasEN@iTJ2bpRP57JdcZEOtKJKaT-`jk@EBvR&e_!+c zuJE50|9ZMNUVm5kPm6yY->#4F*A@QLLiAmbN~y7)DW}=?xt;cYfA#&pD*c`gec0pu-ca23xt;c|YW7pq|J%)eB(b=E zO|##@L2$f(NweSLcG~-mX1~HgJoLYz*&n3QPJ6F!_Is?4dt^NV4{0+0A2**zy(YtV zTl0BG*ZKV=&3-49=KhZ~`>j+D?oXjD%cgOE>}X+0h)fRlr#1|seRxN#ZzFqCD8k;5 zcTn|Z!L=GT%eA*N`;tmW`Vqe(uP2TAb_@R+47XP3djDBN`xeftUybu-E6{dsLi9pBr(2L8 zm+_sR^jUcSQ49EDd*<=^r}V_xEqHs*8e8NJmAqpqUQeIL`w!#iqCeQo>)mg>@mrrq z_#c=l6YJ?Qb$stZ;Fs~p*E`muC*kor`}>mXbvpZr;f?b_u)kJkzn*+wb@tO};(g-& ziR((<1u?!gUN73maD4&R8_Igu^Lih^dY#KM8rD0^>$P~j4*E^|9q6YoR?fH$kj3}$ zc{<|*#}AVDsIt7`p?Ui1$@RFM{XNO`*q!~o$^JrTe=0e?+1cN-IDrq&KN%A@Vm;wE zuwMTQSnrRRpQ}v&eZ3y9*SQt_we)V#e}26LRt7#4`rGoe5kKLf`Sof^cs~1W{es2;tREvIelsSKAF+hLcIn6`6t&eR_KPa63Rb{=^$%<4 zZ{YhG+b{~~SJZHx9sflAmP5i6tMR@2AFi0B0B5hmHhtJLvCK9BFmFDLszCg^_>=_UD0b;4f->1brEO|4GglWpY}G?+0N#4^PMEqd~u1v_I$l)lItAKd!ID z`Rut{ygR&II1hmH(b!+-@w{FO^aH$dzJu$Zq+SzUfViE0az4AcK1{^@is{p>9yvSb zl+GB0C}NupKfFH#{*mz_`7B<5^EKAN%F$gN*~9M88pf>(LhfdH)IeG^HP+)kV|34D<=_#d@=@z8v45pWJd*sSp0i8u;TY zlvz)2C0F&-QSUShSWv$JwE9||j^t4vq#}Ort?M{1HvK5_IRWP@dK>I-`8&|AeFx`D z!bg5g-^#l$t%m(&{Pl%we?sV^h+dN4Fvsg#5=xU`goUX zAByjrD7=L8$M&5oNY%9&;(i`qzqr{C_)Es{#^q-W)^tkae)7x+&ZCViH+g&z-Fpc3 zahlfKX5m5bGdTw{eHn8E{2ZOv(x7j!Uyb|8l{OVBIq#Ik^M!2VfgPytVfdg^N2}cL z4EejNTyM60)j~yKRmJvHo~P-((uRJKwmctXrs?RSa%Sl=KLueMBp>w4Pux78KSI63 z`I}JuJnS{%5wBPq zbjv}X3w&gXw=umA1HNE1g#98~RsFC=A6835zVqem(q;T=OwWG%&x=@(jeh*Hoqm!3 zpC^ywO@3b9&q~`PFZP$vllU=2f8hIZ&{v{Aq~2Hbhr{|JYafAsP@SxtRpR&feCTHQ zH|fpf2Kpn#HhJ^<+(6Ltbh5JMBmtk*Prm4n}GFkrPPeDI~Mv(@6mLG3u4*R+MebvE& zW?Rq?Ul;wbI-wu-UjclD$R@@5!PfBo)p~m7Wcp#^&zaxm`AMfwUA?y``tU}^&-*v> z`>FKI$@Rl#)^|I=PmHfTuV;|QLp^+?A68+0Z36J(r;C2rwhZ;E?fPMLQ$Ij{p&!Q1 zKVy(~!oRoHW-jCNlUy&fv!d|*`bS19kZ*iXUhJXjdBlSMr?2|Z+?q5U1dCz5c7L?+ zry76HV6ANininbsH4b}CqbA^keu&_6?^q4~VSMyik^Wd;<>#FtXIBXQQQyk?qkdmg z-Y{MvOS6$af&P%TJg+jd>gYf@Q(Wf!<&ayp)_(5qie6TmSzq1w;5%+Q%aZvn;&vpT zR0I9<6E`lSSbv(VU*^K|7Z2L4dL`1&e{Ip3+zkD)ANs{;SkQ-Zp46`ZKUuXA`iA&C zy^N3V8?AzS&+7@#n}t7)e`-N$nDtpOg8Q>Zxqe69C-+ja2g=xgFx~W{3)sG<2_|ZN z^%*Vq(O5sG_e?1u}RM$b(ZMkX8^xEAEt5tNncg?O`f0UX9F({k^j0! zhX#XPz14d$HEEXYulQGCe`UbNR~82GOX$axea@!T9I%i2WOo@^k3aQKR{XYtejD||)^6O7q&s8qM`6$S{Kg?Viu!oG&*MWMvi+`AasFJP zzl2|cU+|wHsQK~`oHU%j9k4ed4F~x~Jafhj^bh(qYG|9!I4?MMgpM++XoULdWrXVj zF`l&jXP^K6c{JWp&u2~JzBQlc_cS~fYP13QHNt)2_6X$3(SZ-lkNZu6eJo$g_mP+N z0u*z z-5`bgn#lMt=TC8dz1_d_3H74R;JLhif_mT}==k0e=l`+a1OF--&jG$NI3LCF1kNw0 z3gC_I6T^K7nBV7k!EW7uFZutP&@;;4Vt(A`wv51;O|cq_ zIloK_{NI+JA%*qlX{wq3Bm5|!jWnVn#}nP^sraGxA0ziyNTdh!=DXJU20cv~M@Rl7 zylyA^3kV2|vObOVaQ&-gaQr(liTsKClNVq9E%k%{_41z@wCs1MvwnKNQX;>Z(d#T4 zbe`n*p*t!#-*MlbqL2plwEeH&pQjewiL!&({Jhbpgy0@I1PBA;kPSbpHp6{(@oc z;6E*bfAgLZykFPT>eo+rKZ-|$9<>F_H252cUs~%sn95;&;Mb3_zrpZk!ZQ2g(|d~5 z&F?|=w262G@L@f$7cqP>{y_0Tz8eYhbMuOYvHd^9^gR^dJfCv_{Oj-3dn%d2PVlpb z6^w%a>G`}*$S2?#C4nmAPlX*RHQv9~lK5`9UC} z!r$jMzLzyM)Zdw)Wl0;w{O$gWc^98w!qiKFIpEJ)i0=W9?i`^(r7yie;g_&S&I@Qe zYXGm>!|_pJjQe+aRI+yWK>vRGXY7Ri^_7chPB z{nVlvJPG~E^M%kCuwQ@-`osahk?1Sy<-#Nd!#_^s*HRYqt3C8FwinATP=UW7c^)FR z7x8?=KWb4-FNsfammc)*d_81s0qUnidI#dW^nORl`tq{AFkPXW`e1J^&kz5`{UBj_ z*=x3?Jch3z@!nE*;V>Ct4&#Ba0>784fnPJWzPXI?4uvWO-ht`XHy5+P!^7v41fC43 z`|&-t^o%>CF59@iG64O_{@YnGf4@-Hx0ufyS-eae?sG66@CAER*FZ0!Po_8oeyFYh zeXR`B-`TVp@v5B1d1}t8XklTsIam{VJ~3y&zo%)F^IwjV`2p`r3lU|1wX{+f9F1=wFELhl4!OJqDBY%X&qg0^?Y*k}a07o^W!9itwj9y{l+( zp&$1zLv~&l=AD<`7VFzo1Nje=3LC3gZ;NhPJZK`G2=7HaVe1>1KEAIMv>Covrf(?X z(6a9gsV{8SJ)BRx*91Lx5G(OC>V4+>gU8W7Fl((^i2m(yzY!9TH<_f5$M{!Fe`AL0 z=>l!q9r7|q5dR2&1u&&0zmM%}Rh^Ig{SKd2m?q9k zIVw~mdLQIv81_x%#fARVhu3jDxL|GiHY!XR|Eo=3VRHccUxw7bi2f1!h&-C4JXbZ| zM&CpJ75b}I!S@%a@e}ZyqoY2>Pfx?Yg8x(1n7^08KES>huTj&;-@u=s`aZS9%7B0S z8)`MnBhG(E`C5Rc;Sc0l{6BmT4f0q^;r#%)Ox)kDFg~TftFyh3dLsCXwUgEpW$VBP z0wPm8NFLV0;mjB}mJc+4N{4}jm(&<`@cQ9N4p3e~m47Yqke zh%%#iO3T526@LK!*?r*m(OxeV<(KF66~7LBDg5Z9AAobY%`Eqe(CJe`9!@j8#a$bB#vTsUr+eI1kTF49_z< zJqrJx`33O;;0d0`{j<(xXun^htKna+#eD@~YHX;|FZhY>Pm1;TYA?(99TIp@AII=L zKY{$A;78<3@Z+O4AOX))fM@22Jbxg)=jj`tVEGyaVwcvIGJbgdIj+~TQ~TeiSe_yA zk$k1MVSJYFyxe!#Howrvt+D?u@>0~VD>v`!WPMS%4)krTf&Njr+p+S*G1kvi*=v-( zlKSyzZnB`UUBce*&XE=9Y0{Ok-@=1PO?A_fGe?gx%us;a?hWt6{2F4F@ zmnQ7n-DSv!S5xvl^wHhGciMw~y61HpD;XNTe;Q8XaqwH_*SOvI80g3S>Yl4~oCj@?a|1~~jS4Qx!wD;3e-#H-o zfV>VY>d|JM!k#4goZne@FyUiA4XbDFLw=rmF~-jg>X|)Sp0a;+^hazsy?=6lpG7>p zQ@sbl}|CiJ1u=m$)@(1el zS!>XqzuPhQsI%2k@YxXk_wLeW;8Dj-bJ_^dzmPBY*j3HXM@0S-UpU;<-|^4mA5-^b zGS%cU+jcHv{Op+r_gu(*I!*ep9J9i5&%gBzALqVC`+KJQ(|2yO%gOJ6-z&eo>3dI8 z+IKF?Ut@TlBi=R_Fj^4ur;C(9^^wx%r+{IX;+Uc?_PXXx2s%?~}14>+wEFK2!v zgZ>ZxhqC@bt?$=Yt@qy67gW+-cTmG?IDZHJt_VH>_%!Gi5_`7RlDU|k2SU50p9kWP z;nk)-AoC+0$@=vC`dyLdy1%>52LG1&xbOT-pXej)@!I;nmS3IY$^3+$u8+qHWWU_h zU20>-{k~#9-JM}P<=uSG ze&IIwuY1F=I`Q6h8;wGLosSNy+pdD2hljMhk$6W%@)=k5#m|Uwmh1p^s#9o0(rJIi*ggkUxbDV^i4IvLzYi9_4-QU#uIz(|ZE=ai2Kw zblBE{t?dytOZofSR3(W&ZJGR}iPR48b>gFfuM^jH;G5UKBJ0Cm%VeCd2|P{in@!gy z_`bIrcsl}b;IsWR`I^DAw@cu&>;nJrA=#f2@C6^J=b-OLcbNqBt<3o(^%XW6wqweE zl+Dety`lZrRz5X~{gvJu!!un1gd=VE@Vy5v$d}Lm3h{c`ui@gN_!p+9`Chyq53nE4 z{Ia?;oMS)Q`=$B=fIxXA@lV(6D;|Axi0=>T{Z{n@u|6=Y$~$RqNPcPgjy2&w+lD{! z?il_d+Oc&;^fh1L@8B7Mo@TkfP4go=@$}H_a82z%KDX#|pp@DM{7bhB{7b9Azb5{s z()g5F@U1cN-N6a{tWe z<9??7JZGM`lKBu6CjSnJJsR#}eZijz{k!JPnM`fBwtwLl>EdR`VEt3PFZK`lMd%+5 zW7`#eKUiL{w7pnL9tZv#@iz@9unv8;Wj{J*(;pP+AInYquMmj-KOCJ;-p%^^gZ0dR z%)EXAf2Vx^|9Y=!q{H0K%t-mRLv|sUQ_Me-=MC{!d>H*H&HF>d|9;oTUSU0)2WiQx z)y{*6{g;pAskT2*MS*X5H{RS-j_+qq-FMtcmUcJ&6P^5_d>{S{?eEa|E$!mpc-Y+>{^?%)8x044is*J*Xiln*c3-!L&Q9@fl;d_vjlVyWh2y_v ztlxP9{6dcxoE*iUWjUKm14asXD7Aeg8ZR4tPq)kW2ORTv0AJF6^FjT+Hh=e0Rpe!+ zWZs_11{=o=(Px_en#5$vBOhDg@0R_-Uz5aNDflv|?Qd=0YkydWyp8l%1~FtLwn^(R zI^Qs3+A)9a_*SY^&*SKNS=P!m#0Q0c z22*lhrGx%%O>BmKgXBr@`PT&h)IQ{g|1Zb5kHcC&G;ht}Dk7idIb{d<8_9p)yL~=e zn$5kTAhWcGmRV-TOFo{l_4BaWy#so#M*NQUqUl=f=eJbUKA;X^f7Fs^^fUI7YkpJ# zVB(MT$DYlbH}R;~ulWNt7V^-?$+E2`3;E|G{UZcKh5qs&^yu9S{!(AVD){(z!ffcw zr?h|Lbjn43n-hSJ?>oqk^aSynqIuko#!orWvsu34^Vl2YGnHM#BR_;sNARZ{fyn>L zrL+gT?@;7}TyILg*k`-)L6%7sjK=G)2|i4kJCQfv866gUiSfZnxP8PMb4=PQrH-p8 zUyNE7UHXD@4e-UiZ|5&%{FgA{p4|3(T&kqy-h~Npmv;OSLVfG`$ zzCPH`c)JGh52HV|{KFmaO_gXLp34DWrT3fv+NRp{5b+byml6V>Z%BXYkzDd~0?*F) zj@Qf=d%z=}LwqLK(12gddRVIHPo=ch4~P#{lVjs{xICpixc_`J-$U}n1}2F2;UC$y zN_-}hmiWva_66Es>Gi8L`!``y4@~oa?|ut^nqwkQT;b=o_>b_HqhFV2x1}Tc;C?LZ zQ>{<0ejiCy6=VJ!YWa}gtof15ALVtIl`EjnQeWfPUV8-k92_f*Cdqe1-e`DWuQcm} z2CLaCk^LPcsV5G<%RftfO5~Lfijz-if&Y%^Pw;~@^y8Qz{+y}}z1YU-R7vo^xQ+eM z@Qdh&?sS&@N+C)L*)iEap`S)XFU}~>!87H58oewfy6DAE6MtPjf2vI{&W1Yrkfs-% zKeYYd z{5Vr0{!wr*gTCO;pS0m$#0MjK$qnpi;-{vU;1i$yndoKW%Fp%E%dv=FqWr0=h29dc zhh7|FOI`U>cB-3R7RJq=iC)4!O)u3Zz0~`lmtu=vBL8#l5%jS#61NCBX@9HupT)j+ z<$17J`0TpqegTk7`v>qZw$I~5{=f$Q{1^Mneax49s)iXL>{Mk0GP{it&8-8}|tNc=7tNA{!9NZ`e&4g zzPx^i{>H><{1f#ZTc?z=ay!ETJ)h?H09vjA{9Zf$7-TKGTA2mOY^;5}rtvkQNdWAp9&&K||Pho$4 zWEJ~U^wU8--`Z_5AHlZ`_=}tV%gW!j);Fi~DP?^+9ufTf)+sC0`gVlRvc5=P)BcV+ z&v%4upv32}FRM>te?<5`VG=)blYJNN^$iDoWAc2~d573rODSLY?TW-7l#hPzTlCLj zGGJfO9^o_o^;W#9*T3HOcLmVLLEl;d9;_;KXLWA7angdc7U@HwN`p{9RrC z9+UY0+Wl9RZ)T`&75$EQYDjF5#Wd&R_1B;$1usehmK6>f_??xF7vDoqs>@bCc-9eo_1h*0#@k7pdg7 zpDVi`7JouR^x?YpC!7&~1pGtdVd8H{;NKaD?Dyj3R}e4c{j}Ofd?7f_`0lWbr^Mf` z#_q|nU+0K-g72xVZGR2%Yy3xQIm%xHAB*4nXWrd69*g)>cl_ABwZk89$(_E%`JTuh zqv->5>dw!oA8N)&G<~Y2zj=9LcoKSy^p%tgy$q7CK>T&xeI~uZ?*#ufNX<*WO{wMk zxo>(|dCV_)Xwxh8t1|i#`ck2(FNF=@qwN`A@*fqtha|z{-3V@>Ow@|gRYOe^4nj$%bDrRd^Q`p ziu&lrA^Zsr@Ez3gw5T2e0;y~M+F#2{GM{glIo^%(4WoLg4H-X9%S zILfOry~+Q90rpzwhb(=+BKXFAhkAeF`ah<1otu>WzRvnTM)k7;aD4KAq#i`@{im=$ z7Ruy{HIg4dT2A!TuXcbZ`oL99{eY=RZ<&vtU*~>F{H3a>_hZ9#N8|yLqN`~D>F zIrVTyePXX)_UqN+3wpmg##0OAJ9j)c{$NdbSpqM6mGf{iv(BG2dEF+jFHl$P+vDl_ zEpu|dG!*>y1fQWH?w8By{KzA>?*qTb;b)$?-7MHgKA6Pcdw3uGiC;!JUt+zJ?AX;M z(^iFGb{F(ek@r2wajzc`;G^nD6_q3^cjYng93YiLAuSIWHpmVh#Ma>^rIs_9^zho%*}3_;0^UyE&)t>wDth829(x4}S}l zi+*Vywrz&TUr{t~@i?P&ul^qXC)$VbUzRuZj_37DJcsp3er$qxpeON&LEtIz>mWWK z@d4xEC|=68fNu`)=lupjiGr%JU&H!+J}rbM>y!P6_p^LscRrZ36K}bh{dB=E&j26f zRp?=odIg$a${?LTOV`Ku7`^Cf`pg^nFI{sMd5KW&iWhi4`A5{p9~!Z|K3B$f;_;zx z3?q%d-Q(Ns@iRgntDP6^oV)zH$^YRmo*p0h@Jn0jx<0z_cT3-|r{nX1@Ehvq7E*b4 zQ5CNXZ(~2=^VyQWqwm}MIy8@e>oNGbBlX9q*SKcATQ}lA#52ov;kW$OlIks=kLjYt?g>^>(f&d_?%6;{2Q* zPbua%tPXJAR;@J8!|~k8XRqt|OFdzk@7~V&T}(a#^J6_apF*9P%RMUctuP!$^KFiY zd>~)e4P}4CpV&FSvdBku82W1@XOWMt-RreKLH<`=b4nJy7iOBqyKdMB-;pppQH6R7B27;dC3o- z`|r2T=dY=cSh=@#-``iRQgBl=tIx{tv>AEh2K_VKR@dT{`%%z%>SeN%yV+zB;)CNdC-Hq(&SHglgY2kDAt>>hTa*r^;xf< z`Cs2P|KD9xzZ{eGy01sS%w5{Ozje2Je>v}sy)FCe&$RZpD)&bPe|h%R`I#g8u^{(H zWfb*+qx)%Dbd$b&_qQth8|&l8*4p1!$@h`{jo_UzXE!TVgFlep%>Gh}O8AjO{Hu3= zb$(o<*M8FbA^U4J?u4H;jIwKs|DtO@Jkci`pP)S)DYL(QE4$UevgH2(FV|Lc16}nE zH2+L2{|nytpPt*~*opdXMSjBe$X?g{RnFIg5BhuL=Xc)+Fy3Xr^ zA8?*S>tA~RywffDNIg}-AL12(;Lku#_(NUnJ7?xu?7O8(UhKOM!|i+TCvw1_*uGnS zE&WRL>*O6SepUcN5(aj9A0g?=XU&0ybZc)p;5o#?A3{*1t~ z-Wgi@en6F|s=}j3$e+^q79=Wy6!rh|@r^@rHQ2X+2bR_&MX z%l^osSpVU!^PHXdt5z6q(r{Yi_3zuiA@U#4HKW2G>2}7CznAK64`|<@zb~J{fB!q+ zvmP&c4tRcrf5~<52dGGXuOiRP@|T2v6b>pU9KJ*DXZ{a`^*=~hiu!9#wBN*+;B~nz ztJX`+>iKAVQ@oG;JhxHGZ+Wg7y;dh<*E&5dh{Eqx_euU5X zPtB#1oF8|`v&HLF=T~QN2pxpO!vPoqOXNdshN>fv z;YSYkbkNWH#LsTry?%!h`qJ`HY5!+g%i9lWeZ5V8z5Fwrhu(_D9`-}<)sg$7qy5ND z-!J(rGM^Qx58}o4i}*L~7Jt_C&ZnF7t(b3i#g_cKmOqL61~q@s`1!xXKOMRMt4cjz z8~%*`P}2S^t#8Wr*#A;0+W&+)4nBAA-^S;<_qz&y8TMj{{IvI6G^O0xar_^8d?p1w zsDBRsYe+oP6MfNEdH5gC`D}e$?00_lkW%Cih7!-z&l|M8Bmc}OkMAWyv9CRB3GzjV zx13X6%fBT3&B*`o`sKUxHtHut{**|*i+{apqW?$!^)r!uj(m5L;$JVd{Oh*(U$PCc zhXdn4+rQql_rh26ub*Um8xz*51qJF+e0@?m-n00F)APP@a?}_87~Q`yWNZWflkY=+ zD2ji0W$z9ZM)aR!f3R0u`e(1bS`~b4$o%WW=_$)Ovbp-%Y~_J#)eaZ@|EA#QE;C%f z|Lkk~X=(WCdWU?7+BN^x^NHetmYk;o(kA{q!LP9s%-`XusBHKH--DkheSh3)_lsi> zH}g4OQI9zkeXV3f_M-4l;U_Ks^^5&3>mAnjuQc;Rz<+)Iwd1@iQ)}YCrvLbSKlq}Y z2fOjrhaU_p&$*n9RlE5g_+u?suOEgV9UY78zw}b5?HlBgGcyRk3gx~aSM#GY2KLK> z+Md_&@HBm19Ee^T+Zd<9}5^n(7nZD^x^Iq-|> znUT=lgm3K6Y1LNO_>DqlMflbVd_iFyjH z@4JjQq~BM5vmPw^IqT8yhn7DS5+8hhuTuLzICW&~bjksK#K&G2{rccj-GqLzN2ura)NMk) z)EA2Ax7w!P%Jk*vYbVjy!YgTy^%pI_p}*Hjzv_*B+#eOu?+)mnZM8Da! z=vU8Yb^5i1esh4msNBzL`bD48^lSg4=$HC8&Hc^Dc$$9Yeq{WaB448YZONBci$7`l zEk^z^fwvF74y$9`^m@iC4s(7N{nVL}`iaXS>j{N^?e~d(j{md*y_T_u(r3Eu+cNwQ zegyqx)CBh1s{T2>9ugM#zWOxys^`NZVtnn?AH!qa{G}%I<@?YhsoD5n`5yk8E9E>L z_{bo{S5z5)75?e+W;gN8((GVO;(evX4`}+8_F3}nb-QQMKCEWPn)C+#0FPP8N44&b z&qFXi`bvHA-nc)c34KQR;pq9n>_*%3kLfKZ^j2O)|BU>@wa7oMo@73z^M-uML_Q*g z#vVeSV!oQb0uy~MtZ|sUcqi>16CiZl2TaUg~ z2VR}~Rfhjy{}$linW=qNsPhv6O(Z`&@#pT!=I-VD;dlg3^0jH-jM{hic3aN}{b=X< zQwh`-^5s6+ZNJue?$q}guj~6Y+OrM((OX^N|BOsNQ*@rO*IyI99{+&!kN5NS+qe05 zQQy*&{bW7tZ)Jq}G?K^37w#jU+bWTmFcRTUit`i0WrOn*b?h_FrvRVyiqzu`PBZ_o z4|ukWZx>biT?2<0t3Wm4l0TKRpR{j5GjqL8au` zA19t*sCj!!DE7sEDs zlnp#WvCl$*f7%m$C?oc-Bk)ImMt{#GfVX#)?{(-utL8Uhzv%hfmmKU5ne5qO7{ptBm8syJ%KY+a@n(yS7TlqIt;b;C7kE6=C-Vb8y5Kc9C-7+) zPd4Gxw%3BN2j0E#k@!P2f3>T7{$)rup|H=3(f6E0zlZ-f_m*&2@UL$8;3GgnKYoq< zAU-4b(UNCobYEae#;>g+4`k5JpEdc;1H95q$~%iGOWyLg=%UIMaluKk^a5w{MC3 z=)t#`-pCJ$>5Y7gh~65S-a_uHv1-EaR04XlQ$lam{m92$0)5|0*_z%CfIl*yAO(Nu zuwPc!7oz-xq|h6yC=7Bxv$M7H{Cr!#to7`_o^Ou!3h2|lg5{-AgL z8lNhyd=*#ITh)LcWp*vK>ESl`)7ba?(oO}7LGC#k+&Ut22?~n5={56`Nr9RSW-@p&aXOaCV_-W2VQ(r^yVFrA$Q|z}j zzu$De{G#yZEk_MieabULe>wlD_5Y9x$**k7^J>B`8l|L~kLt66q<{XaYJW7I9^V#z zX~p{sX?rQ~ZNq{dkGJvfox>jje35_ONFdLo9t81+%rWtQa2^18_p13)tL|Sk--ur! z|Eb>uKB=KEHR-c$zpl!^(;6Q#l5eExX>egb^K%m5JClNc&yP$B{==AZhyQlu4>$}v!vEl}HG_QE1%vrIyS~+apZzQQf-fQhnvkL5t+qq!%N-d?@GS^d7=AKoNhxT3&MJK?ildG63B zR^^xEKQ{BRR_EW)_ZsxFD!+)}ty=Uq7<%+yRbB?Y@^V#ri`KKNCth0>`1$AI-+F)C zh=1ot@Fxho&1LvqwEi}KTa~`y-$E}P{9B1X*_H9@uZMq+>G<~|^yg{)Z)nOca;~>l-RH^KFR!Kyj)*A9@Ca*Tj0G~zLOQz|DT#}!dKV-&&l~> zKOyITJWr-&Ves zjvr#*dGK?o_pj|aS+A$}YoIvNyx%^k_W0LjzZkzO9}0M~UyZ2~VxKvT7r{r5XTz^8 zo;R!N&coD?mHP(xCiYiN@@G|_=+niY{3`VwjRWwv*>|vhW#0HezApZ@{yO+$O+Ji0 z78qXHhWr?x`vD^S_foFdBTF{F z+337O9(ZYf27HK*wC_hi|0+!2KbS3V_RX)LpXmCo`q`U~p0UUEvupk-`Swa}tz~Uv zHaEgYu;=E&QJLTF*7^AM{RqUzlDJ%yScyNYWXR{%5KHWfR}@PO+KBr z$2<d>>2b;dSNzy6?Kg>(lX1SL=_qf&aZO>*G`8w>PBzN?=s+zk?sM z>2l-yaej!^K8MjA?4>kSoXWH?Q)%2^Z!-UDV`U>OM`_O0fe%D?oE5~{1 zSzL}~v3K3VQSf*8Z^XawkygBo^%qQU1pjp?{=HC%yzQVb@)x?|;TiZ7^i6(l6yMeU zuktJ6r>w6r{&-uyVoyi$qLTRUOJACGk}7#}Q#qKSKHG5l4V=gHrcYuomPH@&w7z0S z@nZCW75f&^2OdWs==Eo5`q%4=)(<4Q{I&KyJ^rgC@L5(;f5NCVY=72%@^j{p;Fm4< zrOsT3{~P^sLiVTT_uI?|e2C)5AU2?;{*}5WpH(x5V}3rQ4!P*#My2JCKHPd==96W- zA@YqM-_+=@o5Zt2RUFEOmmd_=3-jTI5?F9Ds#o2(3;&6X(a-c&alPt5*Q@sW+=zcDKjFPi>Qz(Er(qu2rrekAe#`7&{lHZj zyZY3D%?>>&=u(k*S?(K;k4Db}-pDWO{<~?WJ-t$K-##vg=kOP3}{Nl%v;^^`_9@9P`uhe1{$5`szi@uN=X5gY*9DA9@qt zWBd%`!-I&|dIo<868**f@Ym~W@K>Qfe%SYw=>8_=C(o8TcBA0Od;@+(ei-yk{6qX9 zr~3ndG_>-A833^Ic1nN{lpz2-)1G=soQPxS-@xBZzLDi9h9%yLt#zU z8_NAm^86I-`3GN|x&wIRg#Ig{pSj7$!7thGr`25Z{u=#0_;(}lF@&ETd6x49n*M9! zCtL8JyQL=dShMx})bEF01z%%-wKq=v<$9ctBL3(@;=dC5brQfks`uuO-=@ct_LJM< zcHg8O_(;7N^5eEB2l(uKh1ExjK9 ztb_d==le2k^10w&>`(Xkr)A#(-&xX9zaIaL`1`a!ot0t_y^6n1;=S34gNMoIOLAVl z-xYm{PMcNZ#Y2zSj`)+(`aGIDCF|QK{OOF^U5WDJm9>)Zh|eh9KdbZ2GkU(@o0F}3 z*q&ZN_;&GGQ3F4#kPClYn zuYZE~hnCC0N7eVn_-97nYvb>ne2@ETa-03calzl+EqwGCf9RC%->OG7P?!Cy!v8jh zGt4*ZskftF$oyFk{H-G6)zJTJ{Y*XfO{u)^U87EKdGtlYIM;y2={^?E=kI;z8g;hfY)Hr-mXSGb&VcR=*_-xKC9uWW(A(1=!3HVWhZgAQ$O?ce&Ro7 zzoPLHUq?Sw72?CXzds}6Yj~8jz9{=K;5(NCzoq7U+VU&1=dZ;G!_TOZbb4b%S`d7QZ3g=!Y`>6ev)}Me+n3R0EQ1qwh{nq|P{3G+`$I(Yb-)45I>%Nbsp?*FKW{*-Io|1q#~{_<^h zczzOjnOd2^S)%bv*4tl$Uk;oJ+>Fg1O=bV-Q!o5#M|-3{HQz_S$?ZVD@nt?TNe&&S zigF(a{>Rcd>)|$qC%?dYkbnLOp5yyKD7zcu6MeW3JH9#RHWXWqtH+0Mw<6=ykfsazwh-2S>8DQt9r7kI5V61fJ)~gdtnxMGim(c2KGmN z<#QhXRN_wqrE%t`hW=3dpE~^^(B~aGUMl;y%ZJ}v)E^$MH0>FcVt&{ol1~_pcgJ%& z;&&bXD&XyquZn%4cA=l?^_a^7pYZD6wH^C;gBrnFKWb?E<|y>mxgXm9sK@gcA7nk) zSK&Zq1bk7>WNwQm^6uQZps3Eykh*qS_+NqeIQDC8yxSkwaersUfd54Fo`F6%k4U_e zonpTg&z^zW`~iQqEBfz~E&cbnOM8odnbCM_ z>xZkK-yT2s?7Q8h$d3;Fa3(ob{qK2xyZ%w3H_^A0$Xz{*3lV*rHzn1n}4S z2>9Iboa4DOKY^F*7+$a6f3rIL7SXR?0Y9x@%MOn^iyrtU=imQZ>DO}p-4%Rv)L0&W zh0a%3_$T!DSQ+vnC-nas=WB**TPjXc-sgX>10GiH3eFdiKXH7oul?sse*VQvRdRM+ z*-uFQ#WV1?s-b3~2f?Q_=OyF$d4f;)w?x1HI_D?dKHP?BoiA6_=czsfzsoL^k#ABT zU|IBC@{6gru!ET)uN+y=g!rQ}a^DAkD$pjp6fav;c;p_&X*s2o&Lc9csVKH zwIKex7@vlQ!{Ms-KMFh&8lQZDS8i9mZU2z}QJ$Ce3%soAw}7{!&v#f0tMu3TB8~B$ ze32EgC(HETP;Jw%JqbUU7x@i8Sa;C5t6QIJ&WHF}sdqjLG9O#!<333I+!6m>m`rjX zLg_6=deplReb!HAAM-37Uv$a;Iq1(yJYrttVYrC@*^_vh;>F@0uqb34HCOBmUgqBfeciG#0%S{-(^ltk+*8J}7t+>APOS#_y`> zn|zm6zI%PO_<4JLH>H@rZ;(Hu$JgH*uDj%mFtQ*j<6|F)J+$~y_S>?CpB+Y z{?=GeM*Gjb|K|r@^gi{Zwxjb4O_C`%$@bJKjM!iep|aZvA!q^vIqQ;COlV-FLr)U-sgU$f){;HEe%{9)ywjX zQ`#Pp{H0~t-%{c!_nBr>3DOWM}2<>dj;OFBKQk^ za37zn-`+fTi=*kS1OBVVqdUhh6E8+Ja|D0pQVT}zyVOJCqkKWH&qg0bza^gP^u(K8 zzbOyWntt2#N4^^TBs9p^Vi54JU2idpAM)4c_`UF?$u?JVySLeP!V~&gNk;fU1FTt9 zztcTG5B#(8{~G*p_Z?9O9ih)GZ!-SIx#WWIuU#8*&+Q7n2L5^@MyaR2Bluf3Z=#@_ z;BUVTeGXf~zZfK@=NLX4=hlrSGW3t0Gs#)>!|;RXJKA2i$@e*}O7zeA;(v7LE%*aH zEQ~bsDS}duJuULIb3f#L?19KWh`*oUkF2LG@NOXgqV+YXMAe7HoRx2M{i6CLIES0{ zN%Z-e)$5aloKKU_F#eE?znVX!Yj7Uo@$Y#(<9q*@@rT|r;Pts8za6drjEQ`zElPgS z%*d0ULx08|bVdL7wEh#xZ_)qkQR*W=^T-oN^7HJM&J z)6)B$5%}j`kACwr>c{_G?TcUUwl8k$vaerTU+%Rp+_Rj2v^9SMVC;$e-@v}m@nN0s z?P~qc^`!odiGBz^k$>*#{1B-R)k`HI;8dOY2~zuqtYG{cqgKCSI@v2QQD<3WdPYXZO%c9?_ zZ=G6?f2*Ko|Fc6ptbW3<9X}!d5jjt|KJQK2_(MYZK3(A_(!bxAcc{OTh{gq#t zaDtO1$0OhU7W4_jR+||g|7CIh<_m3AB%dRkDT+Va;eIT}bK>?hYV%OWzwUsZZ&Ibz z-W~Dyc0%S8wvK?ypkPAN*$irypi{$Koq;l#QhhwsfC4Em;_?_p}R!*PW}`6>;l|lq%l4My#;cA-;&zvAP*n*Y|j*YUz)l6 zp*Q6Wzh*NY`YY`y4NHN>fA+4XZm_v;V_*E7=8Q1$+~i))Bg}jef1+-;(-Y14sp1XZ zgD*<`6^VE4N~_0-$1r|*b8v+BIbQ-i0^?(?{jrJ1=yq4eW54CT6(#W=hy5N_fyB4H zdt?5^e#?HC|32=|e%;);U)G94{%2^Czw3zqZ?L%EW&N#sHPQX0Ugc}rzb*W*(%oOB zc7NvW`uua4yp{DeJjRpzPfquHKc=3ohkVJ{7cLGkJK+y){@d@;o-T_&g!9{FTO|{Q zXH|@A@)7^_Hn5+AId(X^#brNne_LQ*77xie>QK$d;=fb{%Z6Y@)3lemV;^dYj(i}-<&Do@1=7u zUq6KYXsre)N?b6J)hu#Eyn)pULK&(gn7JOS$H-c|V6HR>?~UGrMuPKfnjX_CfIkTQH-|@fpZo{-XE-JCGubcr2mC;{domvQrsIKa ze6yvVqtm?KhyBL?)R+$1_=Z23p<;OB?=KB)R0%(4>+uJi$8VUwNO`}j@fCXFuLl2< z_iI1FesWG-JAaXV?+-osBkR@lVRLDMt)GXLoWJLvyq{TlnbUqrvERg><{5&IG%=pr ztT$+RAKvQqMfE|%f7Mqa{&@SlWvt+R@0!0gI{#2jEMTu{{e}9L;NLX*iFahHzAyg$ z(BGBt8@2N5!`~SWw0}pwpKuiZfm24A{oeIV+rRWt{7W^_KZW1Ge~7<%e6B!n2>mvA z><$I$KSw^yMaXZ?`zv+A(DAI`?!lzPDiD?{E_28@YQPZN~S)hhAvL_XyP^Z(a%&vuD2ti+{^}+?kW{{#pE$ z^K%EEe#CZd=EooOyU)X-ALcrz?a!E{r&ozsDG@!G9me>Ps;u(ws@%(?+vP} z+o#|I-GLZC+sd0as=PNt{h)yRk3w_7FbiAVM|ln#zhZoMgKvC<^FkQ#BZ(UKr3^0_ z*aix%y({A z_j%upynpIN;9H;mQoNtT%Ks?qANy)7Uo3SJdQi#Zi%7{zCRc=;gouCh@`aQfI!j>OUp&d#P_iZ7lElmMXXx zO^Cll`Zvz~ulMcI_bFRTBjuruxx_PN@Qe20-0hqX=bP{kPl(1+@DIH|!8Q2LI{Bg2 zS7Lm%1z$(Tksm+#wO`s&HhE@{?)*?^7=NCAUyrZbk>@vb;@jYoaTD=yR6Xf0{I^o> z9b+PZ8_l=?tB9Df$Rnf;n zU+n#P@%L%_KhnQy>ZVF2D9ks;Y&9qOb}BP2^?s-C@@5Mb@=N$@ZWsAgsx0TT0^<(g zvny=#SK+s(1fRuz$vP|peNONh1abs^l8gbV>r#=|3w&q3={@gSZZ!4DPI&t!`nTra_0t;`uJZ)HGQn3{{GLzQ zntyl^zpuZ$$?skGJ@hL6;OPApe*iwrFXs35zRxxJ{h8JHeWK_MH@-R9XVWR>FTgM2 z_gfwQ2)}nDeqW3Czl-1Re?9#EEAab((IfnOZGM06n*2VD_`SN&4j+1IAevt%{_A{L zX5Hks?uGFCrI_E_Tbvo_J6%)OUyn9UupVdncKE$g*h9|vz3$KZw-O)E&ikCViSUD= z$mdX(pUQ9_c+Tb#eJe0W$%lQU#qYg@Jog{o{);r@Z*`2(`HMWW*-rik@%eT;^Obz6 zIr15lqy7>6e{vCiTNZv5Se)+|m^Vbex$xVt@f+}eW?=+|jlP?x{`lp0BVSte<9g+b z);I7UJP`3mt#8ARZZz__1o`MH1m8OSZSZ62+o+rJ*>d84Vn6%s>}>pf=NZlK(cg8u z`@~K0ey6!wYd-55UqOFNd=>twLe{UJgT%iP{;lIpQZI~|!(ZIry2mj%uMxu=QObV0 zZj*i^`pIa0#}R!(sT*opnQuXz!hdeTuUL+p*Yr}BhA@q|A76mU>rc7HNIuryd(KF z=Cw!j`u#+B5&k%JlJP^Zh`o7sfRA>6aSkl_FCE%{#HGmS-37tVsCMNY(n61jQ#%h zP29(@a`OEW&prWnUFoTJFY7ZK_P(KwWqrOP6#m{3f7bKoKbl_Q5E>sH{s8^WvmYXb zJN2jPdw^$I>(i1y5%%U!0QSP*r1%Gd!dKe-pY>4t0Ckp-#hYLTB>I001%&zFnN<9*1{|C?yI2u%NXW%E~2Z{f{i0qZf-a=lQ zlNuky9-feVm_}LC2l!Mpwju;MOE-C)cB?A?`r&t z>ci>yO>GhUQgYsu_yP7XfX{7lK1Y2-bLjy20Q$UOnEp#SzjJ%5K8VJzn&=ar#xFO* zFYIe(#E$V}y{qGwdo!s-?Be!}v}pHt@8`cosuUPnF<<5Q4W7Jr!o(wO=@pyZ1b zqw|2e-U_b*Khc+<*OopAyu0WT|JOv;k@GX~+cy4|`oZ5vALzy3YNGls@K?iw@xgzO zXYiML>K@M#{&L?3{48_YkMWiBBa)Bj+z-AAesuB!hyHkW3NikYOM<;=*xdiYaPj_| zuF$s{6Z(H$`78SVih9yh)MP+Qr2eO4;{Qsjf+O(>?mrrLh(DYx`$u7yiEL%&4ksDN z`_XfLoc;FXyaAH{|15)gn>Dk^A2|P6h|bS?avo||dTgA04A(pYe#{QQPv#^a!#7*< z?~IH6*GN7o(S8|^e7k&e|HVGx{C+;;PodBHfAMw0NUsFsL%7d9$@wzL7e~I5k64%d zK`*(iX8(%wI`dB@p!X5wv!D3W$Y=DAd>a-pG(&#Xk{icAqj=GfDsLD64*jF=t3%hr z&oq2p`VXn9_6Hv?+qxZ}8ugLN;$Kon@dqt2e*UQ!O{q8b4d(Zhdfc6V%6Ot2!{?kl zckCDX#qOB@hUY$Ge208VG${F=C-}O{)aUCP1^lDY`Fed`uVFr(vzz$Zb$&X1Mz1GX z-NbztHt_9$UtQuAb%lSZVLVK}f}CIFJ`MImCE$m_Li(K{>)Bhu-!>=yp1;)ayP*lc z8tYfoFQonaa~?t5AFoosjsE#;qY(LL#XmKPzpHM{x8d13FXak6_4{hMc^+!ujN*QD z{l1-Ew!?uHpYv>|IlukL>?z=R*;%zGpEbk7xksOy`5QHRwITK4R15#fM}wa>&i}T$ z%a-#D;Nw2l*McYKZSk)*%qSlMex%_UomUij4E=Y(6MJ{x1)|@uAEloFKh8(x@jv?w z+mZ9-5&mVcRipX_!s&B zV&C6i1-_y9&!wJfL~ldt0Ptl#E%=sOY{O z2KavXG4T08vj%*>E%3eDnCOA8O@374{7e(R%6NY#eDOc*1pWfwRqGw}!WaGf{lM4l z^Je;&h%d-iLIJJ&P@?-obbT~W^fyDx*PJJ#Ui`RH-{TI0{!_eWWC_k7ghK8ODq|A)xm zbY9NaHj;DXzfDX1{kZ-o`CiPF^)9(rnK3=UVW}4=`CyL3Ujl4JiBFA1@>cbOkGqB^ z?_>PN`D5JAQ{{QE;gKKa>iUr)U$cIaXO*0|gwYs(gY>Uzd8=ITZ$OXVFeV&3)Z_CK z`y0^{<5@)+U!6yu2Z=wy9#{w+bz*;Oe9k{^v#UmOg7dVYu3uno zvsLkp{oX73uF$8tw%fjQWPWm9Hp6^&%cNM((BaG9n~C19zjMv_zb*20wR#CMO6M=C zA6%7sy}q_T#J|3^Y$9KkmEnB2*01mp2e z^rc>crQ@-@ucG_UhR#O)0b0Wm{ZZ~`i0curR=;1@`(52XRDvF|D<=iNj6ab50e|BB z=EX`JU*$ZQ@Dn)?=57eP`6v6&ec{GcititDN5aIj;E($9zN4oWg�n5-%C`_fI{R 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�!|hF?o8X@* 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 literal 0 HcmV?d00001 diff --git a/Old Matlab Interface/.svn/pristine/4d/4d006a3643aedd8782c700ef93c1dd03fe8d4d6b.svn-base b/Old Matlab Interface/.svn/pristine/4d/4d006a3643aedd8782c700ef93c1dd03fe8d4d6b.svn-base new file mode 100644 index 00000000..f75aa2cd --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/4d/4d006a3643aedd8782c700ef93c1dd03fe8d4d6b.svn-base @@ -0,0 +1,11 @@ +clear all +setscopewindowsize(1, 0, 5) +first_gui_test +pause(0.01) +max_n = 10000; +setscopemode(0,8,8) +setpsu(0,1000) +tiny_send_waveform(sin(linspace(0,2*pi, 750)),255,432) +%tiny_send_waveform(1:100, 255, 100) +mex_usb_iso_loop +%%plot(saved_waveform) \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/4f/4f3af4a617fd58cd7638129886ba749e38d74fd0.svn-base b/Old Matlab Interface/.svn/pristine/4f/4f3af4a617fd58cd7638129886ba749e38d74fd0.svn-base new file mode 100644 index 00000000..aeb17d6a --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/4f/4f3af4a617fd58cd7638129886ba749e38d74fd0.svn-base @@ -0,0 +1,97 @@ +//MATLAB INCLUDES +#include +#include + +//LIBUSBK INCLUDES +#include +#include +#include +#include +#include "libusbk.h" + +#define DEBUG_SHOWCTRL 1 +#define ISO_PACKETS_TO_READ 30 +#define ISO_PACKET_SIZE 750 +#define HALFBUFFER_SIZE (ISO_PACKETS_TO_READ*ISO_PACKET_SIZE) + +void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) +{ + //Vars: + //Imports + char* HANDLE_CHAR; + KUSB_HANDLE handle = NULL; + unsigned char pipeID = 0x83; + //Internals + unsigned char success; + unsigned int transferred; + DWORD errorCode = ERROR_SUCCESS; + PKISO_CONTEXT isoCtx[2] = { NULL, NULL }; + KOVL_HANDLE ovlkHandle[2] = { NULL, NULL }; + KOVL_POOL_HANDLE ovlPool = NULL; + char *isoBuffer; + //Exports + char isoCtx0_string[17]; + char isoCtx1_string[17]; + char ovlkHandle0_string[17]; + char ovlkHandle1_string[17]; + char ovlPool_string[17]; + char isoBuffer_string[17]; + + + //Initialise Data + HANDLE_CHAR = mxArrayToString(prhs[0]); + sscanf(HANDLE_CHAR, "%16x", &handle); + + isoBuffer = malloc(2*HALFBUFFER_SIZE); + + //Actual Function + success = UsbK_ResetPipe(handle, pipeID); + if (~success){ + errorCode = GetLastError(); + if (errorCode != 0x3E5){ + printf("UsbK_ResetPipe failed. ErrorCode: %08Xh\n", errorCode); + } + } + + //Define Iso Context + IsoK_Init(&isoCtx[0], ISO_PACKETS_TO_READ, 0); + IsoK_SetPackets(isoCtx[0], ISO_PACKET_SIZE); + + IsoK_Init(&isoCtx[1], ISO_PACKETS_TO_READ, ISO_PACKETS_TO_READ); + IsoK_SetPackets(isoCtx[1], ISO_PACKET_SIZE); + + //What is this overlapped pool? Virtual Addresses for I/O? Black magic? The source of my errors. + OvlK_Init(&ovlPool, handle, 4, 0); + printf("OvlPool = %d", ovlPool); + + OvlK_Acquire(&ovlkHandle[0], ovlPool); + + OvlK_Acquire(&ovlkHandle[1], ovlPool); + + //Set up iso pipe for n reads. + UsbK_IsoReadPipe(handle, pipeID, isoBuffer, HALFBUFFER_SIZE, ovlkHandle[0], isoCtx[0]); + UsbK_IsoReadPipe(handle, pipeID, (isoBuffer+HALFBUFFER_SIZE), HALFBUFFER_SIZE, ovlkHandle[1], isoCtx[1]); + + //Export Data + + sprintf(isoCtx0_string, "%016x", isoCtx[0]); + plhs[0] = mxCreateString(isoCtx0_string); + + sprintf(isoCtx1_string, "%016x", isoCtx[1]); + plhs[1] = mxCreateString(isoCtx1_string); + + sprintf(ovlkHandle0_string, "%016x", ovlkHandle[0]); + plhs[2] = mxCreateString(ovlkHandle0_string); + + sprintf(ovlkHandle1_string, "%016x", ovlkHandle[1]); + plhs[3] = mxCreateString(ovlkHandle1_string); + + sprintf(ovlPool_string, "%016x", ovlPool); + plhs[4] = mxCreateString(ovlPool_string); + + sprintf(isoBuffer_string, "%016x", isoBuffer); + plhs[5] = mxCreateString(isoBuffer_string); + + + return; +} \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/4f/4fb1d6240092ae6c3b97164efd0529b27e935af1.svn-base b/Old Matlab Interface/.svn/pristine/4f/4fb1d6240092ae6c3b97164efd0529b27e935af1.svn-base new file mode 100644 index 00000000..de01e97f --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/4f/4fb1d6240092ae6c3b97164efd0529b27e935af1.svn-base @@ -0,0 +1,96 @@ +//MATLAB INCLUDES +#include +#include + +//LIBUSBK INCLUDES +#include +#include +#include +#include +#include "libusbk.h" + +//MISC INCLUDES +#include +#include + +void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) +{ + //Interals + KLST_HANDLE deviceList = NULL; + KLST_DEVINFO_HANDLE deviceInfo = NULL; + DWORD ec = ERROR_SUCCESS; + UCHAR pipeIndex = 0; + WINUSB_PIPE_INFORMATION pipeInfo; + ULONG VIDin, PIDin; + ULONG deviceCount = 0; + //To export: + KUSB_HANDLE handle = NULL; + char handle_string[17]; + + char *VID_CHAR, *PID_CHAR; + + VID_CHAR = mxArrayToString(prhs[0]); + PID_CHAR = mxArrayToString(prhs[1]); + + printf("VID=%s\n", VID_CHAR); + printf("PID=%s\n", PID_CHAR); + + sscanf(VID_CHAR, "%4x", &VIDin); + sscanf(PID_CHAR, "%04x", &PIDin); + + //Init device list! + if (!LstK_Init(&deviceList, 0)) { + mexPrintf("Error initializing device list.\n"); + return; + } + + //Check if device list is empty + LstK_Count(deviceList, &deviceCount); + if (!deviceCount) { + mexPrintf("Device list empty.\n"); + LstK_Free(deviceList); // If LstK_Init returns TRUE, the list must be freed. + return; + } + + mexPrintf("Looking for device vid/pid %04X/%04X..\n", VIDin, PIDin); + + //Set device info to the info specified by the INF that belongs to said VID/PID pair + LstK_FindByVidPid(deviceList, VIDin, PIDin, &deviceInfo); + if (deviceInfo){ + mexPrintf("Using %04X:%04X (%s): %s - %s\n", + deviceInfo->Common.Vid, + deviceInfo->Common.Pid, + deviceInfo->Common.InstanceID, + deviceInfo->DeviceDesc, + deviceInfo->Mfg); + } + else { + mexPrintf("Yeah nah kent couldn't find the device aye\n"); + return; + } + + // Initialize the device + if (!UsbK_Init(&handle, deviceInfo)){ + ec = GetLastError(); + mexPrintf("Usb.Init failed. ErrorCode: %08Xh\n", ec); + } + mexPrintf("Device opened successfully!\n"); + + mexPrintf("Pipe Information:\n"); + while (UsbK_QueryPipe(handle, 0, pipeIndex++, &pipeInfo)){ + mexPrintf(" PipeId=0x%02X PipeType=0x%02X Interval=%u MaximumPacketSize=%u\n", + pipeInfo.PipeId, pipeInfo.PipeType, pipeInfo.Interval, pipeInfo.MaximumPacketSize); + } + + + mexPrintf("Handle is %d bytes long\n", sizeof(handle)); + mexPrintf("Handle data is 0x%16x\n\n\n\n\n", handle); + + sprintf(handle_string, "%016x", handle); + + plhs[0] = mxCreateString(handle_string); + + LstK_Free(deviceList); + + return; +} diff --git a/Old Matlab Interface/.svn/pristine/51/515fab57bd8558f7621bbd33ab04891cb2b8811a.svn-base b/Old Matlab Interface/.svn/pristine/51/515fab57bd8558f7621bbd33ab04891cb2b8811a.svn-base new file mode 100644 index 00000000..09b12375 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/51/515fab57bd8558f7621bbd33ab04891cb2b8811a.svn-base @@ -0,0 +1,31 @@ +function [taxis, temp_waveform] = conv_dig(buffer, samplestoshow) +global scope_window_time + +if length(buffer)>samplestoshow + if (scope_window_time>(500/375000)) + temp_waveform = buffer((length(buffer) - samplestoshow):samplestoshow/500: length(buffer)); + temp_waveform = typecast(temp_waveform, 'uint8'); + temp_waveform = logical(bitand(temp_waveform,16)); + else + throwaway = round((ceil(samplestoshow)-samplestoshow)*8); + dig_samples = buffer((length(buffer) - samplestoshow) : length(buffer)); + dig_samples = typecast(dig_samples, 'uint8'); + temp_waveform = false(1,length(dig_samples)*8); + temp_waveform(1:8:length(temp_waveform)) = bitand(dig_samples,128); + temp_waveform(2:8:length(temp_waveform)) = bitand(dig_samples,64); + temp_waveform(3:8:length(temp_waveform)) = bitand(dig_samples,32); + temp_waveform(4:8:length(temp_waveform)) = bitand(dig_samples,16); + temp_waveform(5:8:length(temp_waveform)) = bitand(dig_samples,8); + temp_waveform(6:8:length(temp_waveform)) = bitand(dig_samples,4); + temp_waveform(7:8:length(temp_waveform)) = bitand(dig_samples,2); + temp_waveform(8:8:length(temp_waveform)) = bitand(dig_samples,1); + + temp_waveform = temp_waveform((throwaway+1):end); + temp_waveform = temp_waveform(1:length(temp_waveform)/500:end); + end + taxis = linspace(-scope_window_time,0,length(temp_waveform)); + return +end + +taxis = []; +temp_waveform = []; \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/52/52199dbf885e9ec1c33e31cde43d2a282dbd5a39.svn-base b/Old Matlab Interface/.svn/pristine/52/52199dbf885e9ec1c33e31cde43d2a282dbd5a39.svn-base new file mode 100644 index 00000000..9a908ffa --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/52/52199dbf885e9ec1c33e31cde43d2a282dbd5a39.svn-base @@ -0,0 +1,24 @@ +function [] = displaypacket(new_packets) + +global saved_waveform_ch1 +global saved_waveform_ch2 +global scope_mode + + +%%Pull out CH1 data +if scope_mode < 5 + transfer_contents_temp = []; + for tempovar = 0:length(new_packets)/750 - 1 + transfer_contents_temp = [transfer_contents_temp new_packets((tempovar*750+1):(tempovar*750+374))]; + end + saved_waveform_ch1 = [saved_waveform_ch1 transfer_contents_temp]; +end + +%%Pull out CH2 data for relevant states +if (scope_mode == 1 | scope_mode == 2 | scope_mode == 4) + transfer_contents_temp = []; + for tempovar = 0:length(new_packets)/750 - 1 + transfer_contents_temp = [transfer_contents_temp new_packets((tempovar*750+376):(tempovar*750+749))]; + end + saved_waveform_ch2 = [saved_waveform_ch2 transfer_contents_temp]; +end \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/56/56fd215b6b3d0436eae86a247d4b0dc543e49390.svn-base b/Old Matlab Interface/.svn/pristine/56/56fd215b6b3d0436eae86a247d4b0dc543e49390.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..e24371147c5c261ed171450b03a67fb3b34b9b84 GIT binary patch literal 2552 zcma*pe>l_a8UXO&)k2ZHabwAH@-{1TGJVW?ykBB-;HaB;) zvqvC4|AIj1A`l29yefECo~s%N#2fhC4et+5O!3a54%Rm{o5`=WIMr#{5aAxax$lI1 zVCZd<1Lf~puN!}z8Pixdd{A#qmnG`OTnhRM+k}_e(|~ntS?|5F-pUglb}=F$88qX-vNPtztVAZ>~)_MH(^fXUip$a)L5wZ2vwHWC}M{U-s&tK|JkK+X6 zvXCs3=goz;zDby@G6#y$%hyzc_%TuFaHd{#t|jBeocrjrP5p7go&+p4xwjJ;=yzHr z*8U_;yN~%gj#HhH4I$YX^9DGjgt$G))4ZtboLhK5VZ=)$p0hkX1R zmg^VSdq3JTA>|i!SV2`Vq0zX#2TL|)jXt0EpRC`&j3Z4c-g)LZ2RK!We8bv&bcr7s zB3er261#tT8LBeA*sFt-#~igW%nnZw-k%KLt}d{Hs-DuEFEoe!-P*A^&NjWw4)%`zUUt-w~<*9qa7YtJ4@*P=z)03XflsU1vf37UPYC z&-g_Dll6g2k||fwr*+sl*sJId#&DZY!v&IcJM5pa$;9z#&o1oJ;`*F9`9mW?fOhyh zVFc#vczV*-ppfr52FhiAbAGpz9Q@dxzL{f``-Gtl<#@H&g zTi#?7UI*0gF`R#o+|Fpm(2I2h@_z;K7gyr(^9Bpbo6LR^S5ZjUojsf_b`2grm>=XY zc#1%K5*f=bo!;k{u>554h|X@gos|7G#W5c3SFImed5-eLxXswSUX%J&899VI(@Hs$;NgDe!g%? zDKYCWn|k0+&!dib6}d9X+wzU4NT-l4Pbx9wW4wI@-&>cGkLX;KKP=8N%x0NF|6s<| z_u3hUAW@plg;6 zN*DI`80n8A7c^X|g!xI1dT4|#@?w$PgRZyNs_(5bzJpB7NbEaZFEJY`n^NqdAD$IM z|F?x@<`Z*I4kSVT=h!B39t91{i!Hr6)AAT8Tdd9U*&l&f9gR~J%kB__kiQM|zjW|| z?Ujb}S5XjO2K{r0SiyKX=U#aL@^|dnwX6^OtD<70orYdk65;*W(ed=XO(h|O0jNL0 zUJ@D({qqgxuQ$G0W56QQXPP^BuO0mG+;l81RX<_5C3(Hh?x>ifSw&vqgV6u6wdw*R z*~YBH8G8&ul{d|t%PvqpXywhW$a(RnoV?d|rKsvOt4{mozHL9{bWN&znpj$PU58MDIUV#z_8&ZXj~E-!LiLu&O{9MdIK|Qw=G5tqqXnh1lq~P(?+a6v zt<0%193}c?Gc_{)nP@-c;|2M=gPK3wB#3M1F~Y7-=5^+C`io1&A)lCOFEOd(TU2VY zYUB*$gNA%^!E7v@;(XU>!ow--&+h0hDZ|=Dd(@ZB=f(QNb1A{SG*u;njdzsjPq*5&tjgH} zW@C%AStBqr8MR75Oi2wAuPN<&UY`+KWm-tt_L9V*Y>4&OU1oX8W0P6$~&##b0x|0n8@lRt#i<*?cfNw}*=E@Sj$RYVEP5wN|Q$pc(>Rv)CX5%qD`_Mqu_JnB8oF z?oP}VG3@59MUu%>9((1^gY$0&v%iDcp~4rKMd+V7FncqYU8tO9R*{w!P4tA>mUx1Q zHtd?u={m?*4Q6iuvyXt;Env0_nDslDeGbg70kfOH>_#yAEtoAP9k)&L9HvIh-12a; z*yQu5OC7aDV~%bfndFW11Y-N$T5`1Iy3#ChZ1{n+BX!TCzwY%Zac_TvzfqW>{BBlP zmid52pQkGMUZU3WyZJS1B@A8O917Dhq(f7!nj&lW?%d6dH zJH?Ryw7A1+<-Zde=5Pe&unp>ngE@R{{fc|o*TR;oMfzpu$x6|l4`Wg1i_sR*&4EsN MIc8qNIXig&0YW?Ug8%>k literal 0 HcmV?d00001 diff --git a/Old Matlab Interface/.svn/pristine/57/571c8f6ab65e01badee44f72848f6375c4712600.svn-base b/Old Matlab Interface/.svn/pristine/57/571c8f6ab65e01badee44f72848f6375c4712600.svn-base new file mode 100644 index 00000000..9beca6a8 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/57/571c8f6ab65e01badee44f72848f6375c4712600.svn-base @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.4959 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Handle.Test.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/Old Matlab Interface/.svn/pristine/57/572bf27dfedabdb5a9d3c7981b098e71dca49f0f.svn-base b/Old Matlab Interface/.svn/pristine/57/572bf27dfedabdb5a9d3c7981b098e71dca49f0f.svn-base new file mode 100644 index 00000000..276ddd0a --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/57/572bf27dfedabdb5a9d3c7981b098e71dca49f0f.svn-base @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.4959 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Hot.Plug.Detect.GUI.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/Old Matlab Interface/.svn/pristine/58/5813b6b7f9eb3d89e58a3a4b26364d7e1062255e.svn-base b/Old Matlab Interface/.svn/pristine/58/5813b6b7f9eb3d89e58a3a4b26364d7e1062255e.svn-base new file mode 100644 index 00000000..910ca72b --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/58/5813b6b7f9eb3d89e58a3a4b26364d7e1062255e.svn-base @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.4959 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Hot.Plug.Detect.GUI.Properties +{ + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Hot.Plug.Detect.GUI.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/Old Matlab Interface/.svn/pristine/58/58218339f1e12918006f36e0cfd826fc23983e57.svn-base b/Old Matlab Interface/.svn/pristine/58/58218339f1e12918006f36e0cfd826fc23983e57.svn-base new file mode 100644 index 00000000..00e349c8 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/58/58218339f1e12918006f36e0cfd826fc23983e57.svn-base @@ -0,0 +1,148 @@ +global scope_window_time +global scope_window_max +global scope_window_min +global scope_mode +global gui_axes +global text_box_1 +global gui_hori_cursor_a_pos +global gui_hori_cursor_b_pos +global gui_vert_cursor_a_pos +global gui_vert_cursor_b_pos +global gui_cursor_mode +global saved_waveform_ch1 +global saved_waveform_ch2 +global gui_scope_running + +global refreshrate_temp +global refreshrate + +global waveform_exists +global gui_delay + +refreshrate_temp = refreshrate_temp - 1; + +tic +delay_sec = get(gui_delay, 'Max') - get(gui_delay, 'Value'); +switch(scope_mode) + case 0 + if (refreshrate_temp == 0) + refreshrate_temp = refreshrate; + %if(gui_scope_running) + [taxis, cool_waveform, update_enable] = conv_ana(saved_waveform_ch1, 375000*scope_window_time, 0); + %end + plotcursors + waveform_exists = 1; + else + if (waveform_exists & update_enable) + set(text_box_1, 'String', sprintf(' ---------------------\n Vmin = %.2fV\n ---------------------\n Vmax = %.2f\n ---------------------\n Vmean = %.2f\n ---------------------\n Vrms = %.2f\n ---------------------\n ', min(cool_waveform), max(cool_waveform), mean(cool_waveform), rms(cool_waveform))); + %title(titlestring); + xlabel(gui_axes, 'Time (s)') + ylabel(gui_axes, 'Voltage (V)') + drawnow + end + end + case 1 + if ~(refreshrate == 4) + error('Refreshrate assumed to be 4 for Mode 1') + end + switch(refreshrate_temp) + case 3 + %if(gui_scope_running) + [taxis, cool_waveform, update_enable] = conv_ana(saved_waveform_ch1, 375000*scope_window_time, 0); + [taxis_ch2, temp_waveform_ch2] = conv_dig(saved_waveform_ch2, 375000*scope_window_time); + temp_waveform_ch2 = (scope_window_max - (0.05*(scope_window_max - scope_window_min)) - scope_window_min) * temp_waveform_ch2 + scope_window_min + (0.025*(scope_window_max - scope_window_min)); + % end + case 2 + stairs(gui_axes, taxis_ch2, temp_waveform_ch2, 'c'); + hold(gui_axes, 'on') + case 1 + plotcursors + hold(gui_axes, 'off') + case 0 + if(update_enable) + set(text_box_1, 'String', sprintf(' ---------------------\n Vmin = %.2fV\n ---------------------\n Vmax = %.2f\n ---------------------\n Vmean = %.2f\n ---------------------\n Vrms = %.2f\n ---------------------\n ', min(cool_waveform), max(cool_waveform), mean(cool_waveform), rms(cool_waveform))); + xlabel(gui_axes, 'Time (s)') + ylabel(gui_axes, 'Voltage (V)') + refreshrate_temp = refreshrate; + drawnow + end + end + case 2 + if (refreshrate_temp == 0) + refreshrate_temp = refreshrate; + % if(gui_scope_running) + [taxis_ch1, cool_waveform_ch1, update_enable] = conv_ana(saved_waveform_ch1, 375000*scope_window_time, 0); + [taxis_ch2, cool_waveform_ch2] = conv_ana(saved_waveform_ch2, 375000*scope_window_time, 1); + %end + plotcursors + waveform_exists = 1; + else + if (waveform_exists & update_enable) + set(text_box_1, 'String', sprintf(' ---------------------\n Vmin = %.2fV\n ---------------------\n Vmax = %.2f\n ---------------------\n Vmean = %.2f\n ---------------------\n Vrms = %.2f\n ---------------------\n ', min(cool_waveform_ch1), max(cool_waveform_ch1), mean(cool_waveform_ch1), rms(cool_waveform_ch1))); + %title(titlestring); + xlabel(gui_axes, 'Time (s)') + ylabel(gui_axes, 'Voltage (V)') + drawnow + end + end + case 3 + if (refreshrate_temp == 0) + refreshrate_temp = refreshrate; + %if(gui_scope_running) + [taxis, temp_waveform] = conv_dig(saved_waveform_ch1, 375000*scope_window_time); + % end + stairs(gui_axes, taxis, temp_waveform, 'y'); + else + set(gui_axes, 'Ylim', [-0.1, 1.1], 'Xlim', [-scope_window_time-delay_sec, 0-delay_sec], 'Color', [0 0 0], 'Box', 'on', 'XColor', [1 1 1], 'Ycolor', [1 1 1]); + set(text_box_1, 'String', 'Scope in dig mode'); + xlabel(gui_axes, 'Time (s)') + ylabel(gui_axes, 'Logic Value') + drawnow + end + case 4 + if (refreshrate_temp == 0) + refreshrate_temp = refreshrate; + % if(gui_scope_running) + [taxis_ch1, temp_waveform_ch1] = conv_dig(saved_waveform_ch1, 375000*scope_window_time); + [taxis_ch2, temp_waveform_ch2] = conv_dig(saved_waveform_ch2, 375000*scope_window_time); + %end + waveform_exists = 1 + stairs(gui_axes, taxis_ch1, temp_waveform_ch1, 'y'); + hold(gui_axes, 'off') + elseif (refreshrate_temp == 1) && (waveform_exists) + stairs(gui_axes, taxis_ch2, temp_waveform_ch2, 'c'); + hold(gui_axes, 'on') + else + set(gui_axes, 'Ylim', [-0.1, 1.1], 'Xlim', [-scope_window_time-delay_sec, 0-delay_sec], 'Color', [0 0 0], 'Box', 'on', 'XColor', [1 1 1], 'Ycolor', [1 1 1]); + set(text_box_1, 'String', 'Scope in dig mode'); + xlabel(gui_axes, 'Time (s)') + ylabel(gui_axes, 'Logic Value') + drawnow + end + case 5 + set(text_box_1, 'String', 'Scope disabled'); + xlabel(gui_axes, '') + ylabel(gui_axes, '') + drawnow + pause(0.001) + case 6 + if (refreshrate_temp == 0) + refreshrate_temp = refreshrate; + %if(gui_scope_running) + [taxis, cool_waveform, update_enable] = conv_ana(saved_waveform_ch1, 750000*scope_window_time, 0); + %end + plotcursors + waveform_exists = 1; + else + if (waveform_exists & update_enable) + set(text_box_1, 'String', sprintf(' ---------------------\n Vmin = %.2fV\n ---------------------\n Vmax = %.2f\n ---------------------\n Vmean = %.2f\n ---------------------\n Vrms = %.2f\n ---------------------\n ', min(cool_waveform), max(cool_waveform), mean(cool_waveform), rms(cool_waveform))); + %title(titlestring); + xlabel(gui_axes, 'Time (s)') + ylabel(gui_axes, 'Voltage (V)') + drawnow + end + end + otherwise + error('scope_mode invalid!') +end +toc \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/59/595f27fe648f1942abb804c8fbb9342ecf345a4e.svn-base b/Old Matlab Interface/.svn/pristine/59/595f27fe648f1942abb804c8fbb9342ecf345a4e.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..a36eca487cbc874125758ad9d1a2f64ffcf28c8d GIT binary patch literal 7168 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 A +// All rights reserved. +// +// Hot.Plug.Detect +// +// Last Updated: 04.28.2012 +// +// 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. +// +// 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 TRAVIS LEE ROBINSON +// 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. + +#endregion + +using System; +using libusbK; + +namespace Hot.Plug.Detect +{ + internal class Program + { + // ReSharper disable InconsistentNaming + + #region For Window Applications + private const int WM_USER = 0x400; + private const int WM_USER_HOT_BASE = WM_USER; + private const int WM_USER_HOT_REMOVAL = WM_USER_HOT_BASE; + private const int WM_USER_HOT_ARRIVAL = WM_USER_HOT_BASE + 1; + #endregion + + private static void Main() + { + KHOT_PARAMS hotInitParams = new KHOT_PARAMS(); + + // In the real world, you would want to filter for only *your* device(s). + hotInitParams.PatternMatch.DeviceInterfaceGUID = "*"; + + // The PLUG_ALL_ON_INIT flag will force plug events for matching devices that are already connected. + hotInitParams.Flags = KHOT_FLAG.PLUG_ALL_ON_INIT; + + hotInitParams.OnHotPlug = OnHotPlug; + + /* Instead of a callback you can send/post messages directly to a window handle. + hotInitParams.UserHwnd = MyForm.Handle; + hotInitParams.UserMessage = WM_USER_HOT_BASE; + */ + + Console.WriteLine("Monitoring libusbK arrival/removal events."); + Console.WriteLine("[PatternMatch]"); + Console.WriteLine(hotInitParams.PatternMatch.ToString()); + Console.WriteLine("Press [ENTER] to exit.."); + + while (Console.KeyAvailable) Console.ReadKey(true); + + // You may set your initial hot handle user context like this. + // This example is using it to count connected devices and detect the first OnHotPlug event (Int32.MaxValue). + AllKFunctions.LibK_SetDefaultContext(KLIB_HANDLE_TYPE.HOTK, new IntPtr(Int32.MaxValue)); + + // Start hot-plug detection. + HotK hot = new HotK(ref hotInitParams); + + Console.ReadLine(); + + hot.Free(); + } + + private static void OnHotPlug(KHOT_HANDLE hotHandle, + KLST_DEVINFO_HANDLE deviceInfo, + KLST_SYNC_FLAG plugType) + { + string plugText; + + int totalPluggedDeviceCount = (int) hotHandle.GetContext().ToInt64(); + if (totalPluggedDeviceCount == int.MaxValue) + { + Console.WriteLine("OnHotPlug is being called for the first time on handle:{0}", hotHandle.Pointer); + totalPluggedDeviceCount = 0; + } + + switch (plugType) + { + case KLST_SYNC_FLAG.ADDED: + plugText = "Arrival"; + totalPluggedDeviceCount++; + break; + case KLST_SYNC_FLAG.REMOVED: + plugText = "Removal"; + totalPluggedDeviceCount--; + break; + default: + throw new ArgumentOutOfRangeException("plugType"); + } + + hotHandle.SetContext(new IntPtr(totalPluggedDeviceCount)); + + Console.WriteLine("\n[OnHotPlug] Device {0}:{1} \n", + plugText, + deviceInfo); + Console.WriteLine("Total Plugged Device Count: {0}", + totalPluggedDeviceCount); + } + } +} \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/5a/5a04bd49ab8afaf758cd327491fedb96f3865d3e.svn-base b/Old Matlab Interface/.svn/pristine/5a/5a04bd49ab8afaf758cd327491fedb96f3865d3e.svn-base new file mode 100644 index 00000000..bde5de18 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/5a/5a04bd49ab8afaf758cd327491fedb96f3865d3e.svn-base @@ -0,0 +1,624 @@ +function varargout = first_gui(varargin) +% FIRST_GUI MATLAB code for first_gui.fig +% FIRST_GUI, by itself, creates a new FIRST_GUI or raises the existing +% singleton*. +% +% H = FIRST_GUI returns the handle to a new FIRST_GUI or the handle to +% the existing singleton*. +% +% FIRST_GUI('CALLBACK',hObject,eventData,handles,...) calls the local +% function named CALLBACK in FIRST_GUI.M with the given input arguments. +% +% FIRST_GUI('Property','Value',...) creates a new FIRST_GUI or raises the +% existing singleton*. Starting from the left, property value pairs are +% applied to the GUI before first_gui_OpeningFcn gets called. An +% unrecognized property name or invalid value makes property application +% stop. All inputs are passed to first_gui_OpeningFcn via varargin. +% +% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one +% instance to run (singleton)". +% +% See also: GUIDE, GUIDATA, GUIHANDLES + +% Edit the above text to modify the response to help first_gui + +% Last Modified by GUIDE v2.5 05-Aug-2015 16:20:06 + +% Begin initialization code - DO NOT EDIT +gui_Singleton = 1; +gui_State = struct('gui_Name', mfilename, ... + 'gui_Singleton', gui_Singleton, ... + 'gui_OpeningFcn', @first_gui_OpeningFcn, ... + 'gui_OutputFcn', @first_gui_OutputFcn, ... + 'gui_LayoutFcn', [] , ... + 'gui_Callback', []); +if nargin && ischar(varargin{1}) + gui_State.gui_Callback = str2func(varargin{1}); +end + +if nargout + [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); +else + gui_mainfcn(gui_State, varargin{:}); +end +% End initialization code - DO NOT EDIT + + +% --- Executes just before first_gui is made visible. +function first_gui_OpeningFcn(hObject, eventdata, handles, varargin) +% This function has no output args, see OutputFcn. +% hObject handle to figure +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) +% varargin command line arguments to first_gui (see VARARGIN) + +% Choose default command line output for first_gui +handles.output = hObject; + +handles + +global gui_axes +global text_box_1 +global text_box_2 +global gui_scope_running +global gui_cursor_mode +global gui_hori_cursor_a_pos +global gui_hori_cursor_b_pos +global gui_vert_cursor_a_pos +global gui_vert_cursor_b_pos +global scope_window_min +global gui_awg_waveform +global gui_awg_amplitude +global gui_awg_frequency +global gui_vo +global gui_ro + +gui_axes = handles.axes1; +text_box_1 = handles.edit1; +text_box_2 = handles.text9 +gui_scope_running = 1; +gui_cursor_mode = 1; + +setscopewindowsize(1, -12, 12) + +gui_vert_cursor_a_pos = 0; +gui_vert_cursor_b_pos = 0; +gui_hori_cursor_a_pos = scope_window_min; +gui_hori_cursor_b_pos = scope_window_min; + +gui_awg_waveform = 'sin(linspace(0,2*pi,128))'; +gui_awg_amplitude = '255'; +gui_awg_frequency = '50' + +gui_vo = 0; +gui_ro = 1000; + + +%get(handles.axes1) + +% Update handles structure +guidata(hObject, handles); + +% UIWAIT makes first_gui wait for user response (see UIRESUME) +% uiwait(handles.figure1); + + +% --- Outputs from this function are returned to the command line. +function varargout = first_gui_OutputFcn(hObject, eventdata, handles) +% varargout cell array for returning output args (see VARARGOUT); +% hObject handle to figure +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +% Get default command line output from handles structure +varargout{1} = handles.output; + + + +function edit1_Callback(hObject, eventdata, handles) +% hObject handle to edit1 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +% Hints: get(hObject,'String') returns contents of edit1 as text +% str2double(get(hObject,'String')) returns contents of edit1 as a double + + +% --- Executes during object creation, after setting all properties. +function edit1_CreateFcn(hObject, eventdata, handles) +% hObject handle to edit1 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: edit controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end + + + +function edit2_Callback(hObject, eventdata, handles) +% hObject handle to edit2 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +% Hints: get(hObject,'String') returns contents of edit2 as text +% str2double(get(hObject,'String')) returns contents of edit2 as a double + + +% --- Executes during object creation, after setting all properties. +function edit2_CreateFcn(hObject, eventdata, handles) +% hObject handle to edit2 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: edit controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end + + + +function edit3_Callback(hObject, eventdata, handles) +% hObject handle to edit3 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +% Hints: get(hObject,'String') returns contents of edit3 as text +% str2double(get(hObject,'String')) returns contents of edit3 as a double + + +% --- Executes during object creation, after setting all properties. +function edit3_CreateFcn(hObject, eventdata, handles) +% hObject handle to edit3 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: edit controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end + + + +function edit4_Callback(hObject, eventdata, handles) +% hObject handle to edit4 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +% Hints: get(hObject,'String') returns contents of edit4 as text +% str2double(get(hObject,'String')) returns contents of edit4 as a double + + +% --- Executes during object creation, after setting all properties. +function edit4_CreateFcn(hObject, eventdata, handles) +% hObject handle to edit4 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: edit controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end + + +% --- Executes on slider movement. +function slider1_Callback(hObject, eventdata, handles) +global scope_window_time +% hObject handle to slider1 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) +scope_window_time = 10^(-get(hObject, 'value')) +% Hints: get(hObject,'Value') returns position of slider +% get(hObject,'Min') and get(hObject,'Max') to determine range of slider + + +% --- Executes during object creation, after setting all properties. +function slider1_CreateFcn(hObject, eventdata, handles) +% hObject handle to slider1 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: slider controls usually have a light gray background. +if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor',[.9 .9 .9]); +end + + + +function edit5_Callback(hObject, eventdata, handles) +% hObject handle to edit5 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +% Hints: get(hObject,'String') returns contents of edit5 as text +% str2double(get(hObject,'String')) returns contents of edit5 as a double + + +% --- Executes during object creation, after setting all properties. +function edit5_CreateFcn(hObject, eventdata, handles) +% hObject handle to edit5 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: edit controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end + + +% --- Executes on button press in pushbutton1. +function pushbutton1_Callback(hObject, eventdata, handles) +% hObject handle to pushbutton1 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + + +% --- Executes on slider movement. +function slider2_Callback(hObject, eventdata, handles) +% hObject handle to slider2 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +global gui_hori_cursor_a_pos +global scope_window_max +global scope_window_min +global text_box_2 +global gui_cursor_mode + +gui_hori_cursor_a_pos = scope_window_min + (scope_window_max - scope_window_min) * get(hObject,'Value'); + +global gui_hori_cursor_b_pos +global gui_vert_cursor_a_pos +global gui_vert_cursor_b_pos +switch gui_cursor_mode + case 1 + set(text_box_2, 'String', sprintf(' Vertical Cursor Disabled\n Vertical Cursor Disabled\n Vertical Cursor Disabled\n \n Horizontal cursor disabled \n Horizontal cursor disabled \n Horizontal cursor disabled \n ')) + case 2 + set(text_box_2, 'String', sprintf(' Vertical Cursor Disabled\n Vertical Cursor Disabled\n Vertical Cursor Disabled\n \n V1 = %.3f\n V2 = %.3f\n DeltaV = %.3f\n', gui_hori_cursor_a_pos, gui_hori_cursor_b_pos, gui_hori_cursor_a_pos - gui_hori_cursor_b_pos)) + case 3 + set(text_box_2, 'String', sprintf(' T1 = %.3f\n T2 = %.3f\n DeltaT = %.3f\n \n Horizontal cursor disabled \n Horizontal cursor disabled \n Horizontal cursor disabled \n ', gui_vert_cursor_a_pos, gui_vert_cursor_b_pos, gui_vert_cursor_a_pos - gui_vert_cursor_b_pos)) + case 4 + set(text_box_2, 'String', sprintf(' T1 = %.3f\n T2 = %.3f\n DeltaT = %.3f\n \n V1 = %.3f\n V2 = %.3f\n DeltaV = %.3f\n', gui_vert_cursor_a_pos, gui_vert_cursor_b_pos, gui_vert_cursor_a_pos - gui_vert_cursor_b_pos, gui_hori_cursor_a_pos, gui_hori_cursor_b_pos, gui_hori_cursor_a_pos - gui_hori_cursor_b_pos)) + otherwise error('Gui_cursor_mode is invalid') +end + +% Hints: get(hObject,'Value') returns position of slider +% get(hObject,'Min') and get(hObject,'Max') to determine range of slider + + +% --- Executes during object creation, after setting all properties. +function slider2_CreateFcn(hObject, eventdata, handles) +% hObject handle to slider2 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: slider controls usually have a light gray background. +if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor',[.9 .9 .9]); +end + + +% --- Executes on selection change in popupmenu1. +function popupmenu1_Callback(hObject, eventdata, handles) +% hObject handle to popupmenu1 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +global gui_cursor_mode +gui_cursor_mode = get(hObject,'Value') + +% Hints: contents = cellstr(get(hObject,'String')) returns popupmenu1 contents as cell array +% contents{get(hObject,'Value')} returns selected item from popupmenu1 + + +% --- Executes during object creation, after setting all properties. +function popupmenu1_CreateFcn(hObject, eventdata, handles) +% hObject handle to popupmenu1 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: popupmenu controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end + + +% --- Executes on slider movement. +function slider3_Callback(hObject, eventdata, handles) +% hObject handle to slider3 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +global gui_hori_cursor_b_pos +global scope_window_max +global scope_window_min +global text_box_2 +global gui_cursor_mode + +gui_hori_cursor_b_pos = scope_window_min + (scope_window_max - scope_window_min) * get(hObject,'Value'); + +global gui_hori_cursor_a_pos +global gui_vert_cursor_a_pos +global gui_vert_cursor_b_pos +switch gui_cursor_mode + case 1 + set(text_box_2, 'String', sprintf(' Vertical Cursor Disabled\n Vertical Cursor Disabled\n Vertical Cursor Disabled\n \n Horizontal cursor disabled \n Horizontal cursor disabled \n Horizontal cursor disabled \n ')) + case 2 + set(text_box_2, 'String', sprintf(' Vertical Cursor Disabled\n Vertical Cursor Disabled\n Vertical Cursor Disabled\n \n V1 = %.3f\n V2 = %.3f\n DeltaV = %.3f\n', gui_hori_cursor_a_pos, gui_hori_cursor_b_pos, gui_hori_cursor_a_pos - gui_hori_cursor_b_pos)) + case 3 + set(text_box_2, 'String', sprintf(' T1 = %.3f\n T2 = %.3f\n DeltaT = %.3f\n \n Horizontal cursor disabled \n Horizontal cursor disabled \n Horizontal cursor disabled \n ', gui_vert_cursor_a_pos, gui_vert_cursor_b_pos, gui_vert_cursor_a_pos - gui_vert_cursor_b_pos)) + case 4 + set(text_box_2, 'String', sprintf(' T1 = %.3f\n T2 = %.3f\n DeltaT = %.3f\n \n V1 = %.3f\n V2 = %.3f\n DeltaV = %.3f\n', gui_vert_cursor_a_pos, gui_vert_cursor_b_pos, gui_vert_cursor_a_pos - gui_vert_cursor_b_pos, gui_hori_cursor_a_pos, gui_hori_cursor_b_pos, gui_hori_cursor_a_pos - gui_hori_cursor_b_pos)) + otherwise error('Gui_cursor_mode is invalid') +end + +% Hints: get(hObject,'Value') returns position of slider +% get(hObject,'Min') and get(hObject,'Max') to determine range of slider + + +% --- Executes during object creation, after setting all properties. +function slider3_CreateFcn(hObject, eventdata, handles) +% hObject handle to slider3 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: slider controls usually have a light gray background. +if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor',[.9 .9 .9]); +end + + + +function edit6_Callback(hObject, eventdata, handles) +% hObject handle to edit6 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +global gui_awg_waveform +gui_awg_waveform = get(hObject,'String'); + + +% Hints: get(hObject,'String') returns contents of edit6 as text +% str2double(get(hObject,'String')) returns contents of edit6 as a double + + +% --- Executes during object creation, after setting all properties. +function edit6_CreateFcn(hObject, eventdata, handles) +% hObject handle to edit6 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: edit controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end + + +% --- Executes on button press in pushbutton3. +function pushbutton3_Callback(hObject, eventdata, handles) +% hObject handle to pushbutton3 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) +global gui_awg_waveform +global gui_awg_amplitude +global gui_awg_frequency +gui_awg_waveform +gui_awg_amplitude +gui_awg_frequency +tiny_send_waveform(eval(gui_awg_waveform), str2num(gui_awg_amplitude), str2num(gui_awg_frequency)); + + +function edit7_Callback(hObject, eventdata, handles) +% hObject handle to edit7 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +global gui_awg_amplitude +gui_awg_amplitude = get(hObject,'String'); + +% Hints: get(hObject,'String') returns contents of edit7 as text +% str2double(get(hObject,'String')) returns contents of edit7 as a double + + +% --- Executes during object creation, after setting all properties. +function edit7_CreateFcn(hObject, eventdata, handles) +% hObject handle to edit7 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: edit controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end + + + +function edit8_Callback(hObject, eventdata, handles) +% hObject handle to edit8 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +global gui_awg_frequency +gui_awg_frequency = get(hObject,'String'); +% Hints: get(hObject,'String') returns contents of edit8 as text +% str2double(get(hObject,'String')) returns contents of edit8 as a double + + +% --- Executes during object creation, after setting all properties. +function edit8_CreateFcn(hObject, eventdata, handles) +% hObject handle to edit8 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: edit controls usually have a white background on Windows. +% See ISPC and COMPUTER. + +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end + + +% --- Executes on button press in pushbutton4. +function pushbutton4_Callback(hObject, eventdata, handles) +% hObject handle to pushbutton4 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) +global gui_scope_running +gui_scope_running = ~gui_scope_running + + + +function edit9_Callback(hObject, eventdata, handles) +% hObject handle to edit9 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +global gui_vo; +gui_vo = str2num(get(hObject, 'String')); + +% Hints: get(hObject,'String') returns contents of edit9 as text +% str2double(get(hObject,'String')) returns contents of edit9 as a double + + +% --- Executes during object creation, after setting all properties. +function edit9_CreateFcn(hObject, eventdata, handles) +% hObject handle to edit9 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: edit controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end + + + +function edit10_Callback(hObject, eventdata, handles) +% hObject handle to edit10 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) +global gui_ro; +gui_ro = str2num(get(hObject, 'String')); +% Hints: get(hObject,'String') returns contents of edit10 as text +% str2double(get(hObject,'String')) returns contents of edit10 as a double + + +% --- Executes during object creation, after setting all properties. +function edit10_CreateFcn(hObject, eventdata, handles) +% hObject handle to edit10 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: edit controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end + + +% --- Executes on button press in pushbutton5. +function pushbutton5_Callback(hObject, eventdata, handles) +global gui_vo +global gui_ro +setpsu(gui_vo, gui_ro); +% hObject handle to pushbutton5 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + + +% --- Executes on slider movement. +function slider4_Callback(hObject, eventdata, handles) +% hObject handle to slider4 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +global gui_vert_cursor_a_pos +global scope_window_time +global text_box_2 +global gui_cursor_mode + +gui_vert_cursor_a_pos = -scope_window_time + (scope_window_time) * get(hObject,'Value'); + +global gui_hori_cursor_a_pos +global gui_hori_cursor_b_pos +global gui_vert_cursor_b_pos +switch gui_cursor_mode + case 1 + set(text_box_2, 'String', sprintf(' Vertical Cursor Disabled\n Vertical Cursor Disabled\n Vertical Cursor Disabled\n \n Horizontal cursor disabled \n Horizontal cursor disabled \n Horizontal cursor disabled \n ')) + case 2 + set(text_box_2, 'String', sprintf(' Vertical Cursor Disabled\n Vertical Cursor Disabled\n Vertical Cursor Disabled\n \n V1 = %.3f\n V2 = %.3f\n DeltaV = %.3f\n', gui_hori_cursor_a_pos, gui_hori_cursor_b_pos, gui_hori_cursor_a_pos - gui_hori_cursor_b_pos)) + case 3 + set(text_box_2, 'String', sprintf(' T1 = %.3f\n T2 = %.3f\n DeltaT = %.3f\n \n Horizontal cursor disabled \n Horizontal cursor disabled \n Horizontal cursor disabled \n ', gui_vert_cursor_a_pos, gui_vert_cursor_b_pos, gui_vert_cursor_a_pos - gui_vert_cursor_b_pos)) + case 4 + set(text_box_2, 'String', sprintf(' T1 = %.3f\n T2 = %.3f\n DeltaT = %.3f\n \n V1 = %.3f\n V2 = %.3f\n DeltaV = %.3f\n', gui_vert_cursor_a_pos, gui_vert_cursor_b_pos, gui_vert_cursor_a_pos - gui_vert_cursor_b_pos, gui_hori_cursor_a_pos, gui_hori_cursor_b_pos, gui_hori_cursor_a_pos - gui_hori_cursor_b_pos)) + otherwise error('Gui_cursor_mode is invalid') +end + +% Hints: get(hObject,'Value') returns position of slider +% get(hObject,'Min') and get(hObject,'Max') to determine range of slider + + +% --- Executes during object creation, after setting all properties. +function slider4_CreateFcn(hObject, eventdata, handles) +% hObject handle to slider4 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: slider controls usually have a light gray background. +if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor',[.9 .9 .9]); +end + + +% --- Executes on slider movement. +function slider5_Callback(hObject, eventdata, handles) +% hObject handle to slider5 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +global gui_vert_cursor_b_pos +global scope_window_time +global text_box_2 +global gui_cursor_mode +gui_vert_cursor_b_pos = -scope_window_time + (scope_window_time) * get(hObject,'Value'); + +global gui_hori_cursor_a_pos +global gui_hori_cursor_b_pos +global gui_vert_cursor_a_pos +switch gui_cursor_mode + case 1 + set(text_box_2, 'String', sprintf(' Vertical Cursor Disabled\n Vertical Cursor Disabled\n Vertical Cursor Disabled\n \n Horizontal cursor disabled \n Horizontal cursor disabled \n Horizontal cursor disabled \n ')) + case 2 + set(text_box_2, 'String', sprintf(' Vertical Cursor Disabled\n Vertical Cursor Disabled\n Vertical Cursor Disabled\n \n V1 = %.3f\n V2 = %.3f\n DeltaV = %.3f\n', gui_hori_cursor_a_pos, gui_hori_cursor_b_pos, gui_hori_cursor_a_pos - gui_hori_cursor_b_pos)) + case 3 + set(text_box_2, 'String', sprintf(' T1 = %.3f\n T2 = %.3f\n DeltaT = %.3f\n \n Horizontal cursor disabled \n Horizontal cursor disabled \n Horizontal cursor disabled \n ', gui_vert_cursor_a_pos, gui_vert_cursor_b_pos, gui_vert_cursor_a_pos - gui_vert_cursor_b_pos)) + case 4 + set(text_box_2, 'String', sprintf(' T1 = %.3f\n T2 = %.3f\n DeltaT = %.3f\n \n V1 = %.3f\n V2 = %.3f\n DeltaV = %.3f\n', gui_vert_cursor_a_pos, gui_vert_cursor_b_pos, gui_vert_cursor_a_pos - gui_vert_cursor_b_pos, gui_hori_cursor_a_pos, gui_hori_cursor_b_pos, gui_hori_cursor_a_pos - gui_hori_cursor_b_pos)) + otherwise error('Gui_cursor_mode is invalid') +end + + +% Hints: get(hObject,'Value') returns position of slider +% get(hObject,'Min') and get(hObject,'Max') to determine range of slider + + +% --- Executes during object creation, after setting all properties. +function slider5_CreateFcn(hObject, eventdata, handles) +% hObject handle to slider5 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: slider controls usually have a light gray background. +if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor',[.9 .9 .9]); +end diff --git a/Old Matlab Interface/.svn/pristine/5d/5d281d1e5368816eaa425ac9a876e265bdeb0f1b.svn-base b/Old Matlab Interface/.svn/pristine/5d/5d281d1e5368816eaa425ac9a876e265bdeb0f1b.svn-base new file mode 100644 index 00000000..6f1e8d30 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/5d/5d281d1e5368816eaa425ac9a876e265bdeb0f1b.svn-base @@ -0,0 +1,66 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {97DB9A34-994D-470E-A415-AC54ACD96713} + Exe + Properties + Read.Isochronous + Read.Isochronous + v2.0 + 512 + + + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + libusbK.cs + + + Common\BenchmarkTestDevice.cs + + + Common\HiPerfTimer.cs + + + Common\TestParameters.cs + + + + + + + + + + \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/5e/5e1d04de66ffcc5dfd813530ab6992e6daaae417.svn-base b/Old Matlab Interface/.svn/pristine/5e/5e1d04de66ffcc5dfd813530ab6992e6daaae417.svn-base new file mode 100644 index 00000000..39645652 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/5e/5e1d04de66ffcc5dfd813530ab6992e6daaae417.svn-base @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Old Matlab Interface/.svn/pristine/5e/5e58d8a07a334d81a70b361ad73b5e8a5e447688.svn-base b/Old Matlab Interface/.svn/pristine/5e/5e58d8a07a334d81a70b361ad73b5e8a5e447688.svn-base new file mode 100644 index 00000000..ab0f6183 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/5e/5e58d8a07a334d81a70b361ad73b5e8a5e447688.svn-base @@ -0,0 +1,12 @@ +clear all + +global usb_handle +if ~length(usb_handle) + warning('USB Handle not initialised. Initialising!') + mex_usb_init('03eb', 'a000') +end + +%mex USB_ISO_INIT.c -Iincludes -llibusbK -Lbin\lib\amd64 +%USB_ISO_INIT(usb_handle) +[isoCtx_0, isoCtx_1, ovlkHandle_0, ovlkHandle_1, ovlPool, isoBuffer] = USB_ISO_INIT(usb_handle) +%USB_ISO_LOOP(usb_handle, isoCtx, ovlkHandle, ovlPool, isoBuffer, uint8(0)) \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/5f/5f04c8e98522ce9584f2216a606b11301e8e357a.svn-base b/Old Matlab Interface/.svn/pristine/5f/5f04c8e98522ce9584f2216a606b11301e8e357a.svn-base new file mode 100644 index 00000000..8a3093e0 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/5f/5f04c8e98522ce9584f2216a606b11301e8e357a.svn-base @@ -0,0 +1,3 @@ +function [] = vexconv(vex, r) + +r = (1/r + 1/250)^-1; diff --git a/Old Matlab Interface/.svn/pristine/5f/5f4e17dea5e6b15424f9d7af77a70beb8bcdf153.svn-base b/Old Matlab Interface/.svn/pristine/5f/5f4e17dea5e6b15424f9d7af77a70beb8bcdf153.svn-base new file mode 100644 index 00000000..035f0468 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/5f/5f4e17dea5e6b15424f9d7af77a70beb8bcdf153.svn-base @@ -0,0 +1,27 @@ +global gui_hori_cursor_a_pos +global gui_hori_cursor_b_pos +global gui_vert_cursor_a_pos +global gui_vert_cursor_b_pos +global scope_window_time +global scope_window_max +global scope_window_min + +global gui_cursor_mode +global gui_axes + + +switch(gui_cursor_mode) + case 1 + plot(gui_axes, taxis, cool_waveform, 'y'); + case 2 + plot(gui_axes, taxis, cool_waveform, 'y', [-scope_window_time 0], [gui_hori_cursor_a_pos gui_hori_cursor_a_pos], 'w', [-scope_window_time 0], [gui_hori_cursor_b_pos gui_hori_cursor_b_pos], 'w:'); + case 3 + plot(gui_axes, taxis, cool_waveform, 'y', [gui_vert_cursor_a_pos gui_vert_cursor_a_pos], [scope_window_min scope_window_max], 'w', [gui_vert_cursor_b_pos gui_vert_cursor_b_pos], [scope_window_min scope_window_max], 'w:'); + case 4 + plot(gui_axes, taxis, cool_waveform, 'y', [gui_vert_cursor_a_pos gui_vert_cursor_a_pos], [scope_window_min scope_window_max], 'w', [gui_vert_cursor_b_pos gui_vert_cursor_b_pos], [scope_window_min scope_window_max], 'w:', [-scope_window_time 0], [gui_hori_cursor_a_pos gui_hori_cursor_a_pos], 'w', [-scope_window_time 0], [gui_hori_cursor_b_pos gui_hori_cursor_b_pos], 'w:'); + + otherwise + error('Gui_axes is in an invalid state'); +end +set(gui_axes, 'Ylim', [scope_window_min, scope_window_max], 'Xlim', [-scope_window_time, 0], 'Color', [0 0 0], 'Box', 'on', 'XColor', [1 1 1], 'Ycolor', [1 1 1]); + diff --git a/Old Matlab Interface/.svn/pristine/62/625d155c06d982dcf6562f7b33f057c2000f7a35.svn-base b/Old Matlab Interface/.svn/pristine/62/625d155c06d982dcf6562f7b33f057c2000f7a35.svn-base new file mode 100644 index 00000000..dca059f2 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/62/625d155c06d982dcf6562f7b33f057c2000f7a35.svn-base @@ -0,0 +1,96 @@ +//MATLAB INCLUDES +#include +#include + +//LIBUSBK INCLUDES +#include +#include +#include +#include +#include "libusbk.h" + +//MISC INCLUDES +#include +#include + +void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) +{ + //Interals + KLST_HANDLE deviceList = NULL; + KLST_DEVINFO_HANDLE deviceInfo = NULL; + DWORD ec = ERROR_SUCCESS; + UCHAR pipeIndex = 0; + WINUSB_PIPE_INFORMATION pipeInfo; + ULONG VIDin, PIDin; + ULONG deviceCount = 0; + //To export: + KUSB_HANDLE handle = NULL; + char handle_string[17]; + + char *VID_CHAR, *PID_CHAR; + + VID_CHAR = mxArrayToString(prhs[0]); + PID_CHAR = mxArrayToString(prhs[1]); + + printf("VID=%s\n", VID_CHAR); + printf("PID=%s\n", PID_CHAR); + + sscanf(VID_CHAR, "%4x", &VIDin); + sscanf(PID_CHAR, "%04x", &PIDin); + + //Init device list! + if (!LstK_Init(&deviceList, 0)) { + mexPrintf("Error initializing device list.\n"); + return; + } + + //Check if device list is empty + LstK_Count(deviceList, &deviceCount); + if (!deviceCount) { + mexPrintf("Device list empty.\n"); + LstK_Free(deviceList); // If LstK_Init returns TRUE, the list must be freed. + return; + } + + mexPrintf("Looking for device vid/pid %04X/%04X..\n", VIDin, PIDin); + + //Set device info to the info specified by the INF that belongs to said VID/PID pair + LstK_FindByVidPid(deviceList, VIDin, PIDin, &deviceInfo); + if (deviceInfo){ + mexPrintf("Using %04X:%04X (%s): %s - %s\n", + deviceInfo->Common.Vid, + deviceInfo->Common.Pid, + deviceInfo->Common.InstanceID, + deviceInfo->DeviceDesc, + deviceInfo->Mfg); + } + else { + mexPrintf("Yeah nah kent couldn't find the device aye\n"); + return; + } + + // Initialize the device + if (!UsbK_Init(&handle, deviceInfo)){ + ec = GetLastError(); + mexPrintf("Usb.Init failed. ErrorCode: %08Xh\n", ec); + } + mexPrintf("Device opened successfully!\n"); + + mexPrintf("Pipe Information:\n"); + while (UsbK_QueryPipe(handle, 0, pipeIndex++, &pipeInfo)){ + mexPrintf(" PipeId=0x%02X PipeType=0x%02X Interval=%u MaximumPacketSize=%u\n", + pipeInfo.PipeId, pipeInfo.PipeType, pipeInfo.Interval, pipeInfo.MaximumPacketSize); + } + + + mexPrintf("Handle is %d bytes long\n", sizeof(handle)); + mexPrintf("Handle data is 0x%16x\n\n\n\n\n", handle); + + sprintf(handle_string, "%016x", handle); + + plhs[0] = mxCreateString(handle_string); + + LstK_Free(deviceList); + + return; +} diff --git a/Old Matlab Interface/.svn/pristine/66/668a6732f464095a0d6f139f3b99925ffb4003f2.svn-base b/Old Matlab Interface/.svn/pristine/66/668a6732f464095a0d6f139f3b99925ffb4003f2.svn-base new file mode 100644 index 00000000..4f3d52aa --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/66/668a6732f464095a0d6f139f3b99925ffb4003f2.svn-base @@ -0,0 +1,17 @@ +function [taxis, cool_waveform] = conv_ana(buffer, samplestoshow) + + global scope_window_time + + if length(buffer)>samplestoshow + if (samplestoshow>500) + temp_waveform = buffer((length(buffer) - samplestoshow):samplestoshow/500: length(buffer)); + else + temp_waveform = buffer((length(buffer) - samplestoshow): length(buffer)); + end + undofrontend; + taxis = linspace(-scope_window_time,0,length(cool_waveform)); + return + end + + taxis = []; + cool_waveform = []; \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/66/668cfaa1a816b8698bcfe18181d4964d1dc45605.svn-base b/Old Matlab Interface/.svn/pristine/66/668cfaa1a816b8698bcfe18181d4964d1dc45605.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..10eb9f0ca7d60bf02548666cfcb7801f19a47f50 GIT binary patch literal 7680 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 n=5iG=i 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 UYeC6J?9f^eo6qYGF~jfqKT!rjL;wH) literal 0 HcmV?d00001 diff --git a/Old Matlab Interface/.svn/pristine/69/697b5fbc6357cededb5ebe4e63254276d07daea9.svn-base b/Old Matlab Interface/.svn/pristine/69/697b5fbc6357cededb5ebe4e63254276d07daea9.svn-base new file mode 100644 index 00000000..3b414327 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/69/697b5fbc6357cededb5ebe4e63254276d07daea9.svn-base @@ -0,0 +1,1915 @@ +/*!******************************************************************** +libusbK - Multi-driver USB library. +Copyright (C) 2012 Travis Lee Robinson. All Rights Reserved. +libusb-win32.sourceforge.net + +Development : Travis Lee Robinson (libusbdotnet@gmail.com) +Testing : Xiaofan Chen (xiaofanc@gmail.com) + +At the discretion of the user of this library, this software may be +licensed under the terms of the GNU Public License v3 or a BSD-Style +license as outlined in the following files: +* LICENSE-gpl3.txt +* LICENSE-bsd.txt + +License files are located in a license folder at the root of source and +binary distributions. +********************************************************************!*/ + +#include +#include "libusbk.h" + +#define mLoadLibraryExA LoadLibraryExA +#define mFreeLibrary FreeLibrary + +HMODULE mLibusbK_ModuleHandle = NULL; + +VOID LibusbK_DynApi_Free(VOID); +INT LibusbK_DynApi_Init(_inopt LPCSTR DllFullPathName); + +// Function typedefs: + +typedef VOID KUSB_API LibK_GetVersion_T(_out PKLIB_VERSION Version); + +typedef KLIB_USER_CONTEXT KUSB_API LibK_GetContext_T( + _in KLIB_HANDLE Handle, + _in KLIB_HANDLE_TYPE HandleType); + +typedef BOOL KUSB_API LibK_SetContext_T( + _in KLIB_HANDLE Handle, + _in KLIB_HANDLE_TYPE HandleType, + _in KLIB_USER_CONTEXT ContextValue); + +typedef BOOL KUSB_API LibK_SetCleanupCallback_T( + _in KLIB_HANDLE Handle, + _in KLIB_HANDLE_TYPE HandleType, + _in KLIB_HANDLE_CLEANUP_CB* CleanupCB); + +typedef BOOL KUSB_API LibK_LoadDriverAPI_T( + _out PKUSB_DRIVER_API DriverAPI, + _in INT DriverID); + +typedef BOOL KUSB_API LibK_CopyDriverAPI_T( + _out PKUSB_DRIVER_API DriverAPI, + _in KUSB_HANDLE UsbHandle); + +typedef BOOL KUSB_API LibK_GetProcAddress_T( + _out KPROC* ProcAddress, + _in INT DriverID, + _in INT FunctionID); + +typedef BOOL KUSB_API LibK_SetDefaultContext_T( + _in KLIB_HANDLE_TYPE HandleType, + _in KLIB_USER_CONTEXT ContextValue); + +typedef KLIB_USER_CONTEXT KUSB_API LibK_GetDefaultContext_T( + _in KLIB_HANDLE_TYPE HandleType); + +typedef BOOL KUSB_API LibK_Context_Init_T( + _inopt HANDLE Heap, + _in PVOID Reserved); + +typedef VOID KUSB_API LibK_Context_Free_T(VOID); + +typedef BOOL KUSB_API UsbK_Init_T ( + _out KUSB_HANDLE* InterfaceHandle, + _in KLST_DEVINFO_HANDLE DevInfo); + +typedef BOOL KUSB_API UsbK_Free_T ( + _in KUSB_HANDLE InterfaceHandle); + +typedef BOOL KUSB_API UsbK_ClaimInterface_T ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR NumberOrIndex, + _in BOOL IsIndex); + +typedef BOOL KUSB_API UsbK_ReleaseInterface_T ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR NumberOrIndex, + _in BOOL IsIndex); + +typedef BOOL KUSB_API UsbK_SetAltInterface_T ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR NumberOrIndex, + _in BOOL IsIndex, + _in UCHAR AltSettingNumber); + +typedef BOOL KUSB_API UsbK_GetAltInterface_T ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR NumberOrIndex, + _in BOOL IsIndex, + _out PUCHAR AltSettingNumber); + +typedef BOOL KUSB_API UsbK_GetDescriptor_T ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR DescriptorType, + _in UCHAR Index, + _in USHORT LanguageID, + _out PUCHAR Buffer, + _in UINT BufferLength, + _outopt PUINT LengthTransferred); + +typedef BOOL KUSB_API UsbK_ControlTransfer_T ( + _in KUSB_HANDLE InterfaceHandle, + _in WINUSB_SETUP_PACKET SetupPacket, + _refopt PUCHAR Buffer, + _in UINT BufferLength, + _outopt PUINT LengthTransferred, + _inopt LPOVERLAPPED Overlapped); + +typedef BOOL KUSB_API UsbK_SetPowerPolicy_T ( + _in KUSB_HANDLE InterfaceHandle, + _in UINT PolicyType, + _in UINT ValueLength, + _in PVOID Value); + +typedef BOOL KUSB_API UsbK_GetPowerPolicy_T ( + _in KUSB_HANDLE InterfaceHandle, + _in UINT PolicyType, + _ref PUINT ValueLength, + _out PVOID Value); + +typedef BOOL KUSB_API UsbK_SetConfiguration_T ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR ConfigurationNumber); + +typedef BOOL KUSB_API UsbK_GetConfiguration_T ( + _in KUSB_HANDLE InterfaceHandle, + _out PUCHAR ConfigurationNumber); + +typedef BOOL KUSB_API UsbK_ResetDevice_T ( + _in KUSB_HANDLE InterfaceHandle); + +typedef BOOL KUSB_API UsbK_Initialize_T ( + _in HANDLE DeviceHandle, + _out KUSB_HANDLE* InterfaceHandle); + +typedef BOOL KUSB_API UsbK_SelectInterface_T ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR NumberOrIndex, + _in BOOL IsIndex); + +typedef BOOL KUSB_API UsbK_GetAssociatedInterface_T ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR AssociatedInterfaceIndex, + _out KUSB_HANDLE* AssociatedInterfaceHandle); + +typedef BOOL KUSB_API UsbK_Clone_T ( + _in KUSB_HANDLE InterfaceHandle, + _out KUSB_HANDLE* DstInterfaceHandle); + +typedef BOOL KUSB_API UsbK_QueryInterfaceSettings_T ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR AltSettingIndex, + _out PUSB_INTERFACE_DESCRIPTOR UsbAltInterfaceDescriptor); + +typedef BOOL KUSB_API UsbK_QueryDeviceInformation_T ( + _in KUSB_HANDLE InterfaceHandle, + _in UINT InformationType, + _ref PUINT BufferLength, + _ref PVOID Buffer); + +typedef BOOL KUSB_API UsbK_SetCurrentAlternateSetting_T ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR AltSettingNumber); + +typedef BOOL KUSB_API UsbK_GetCurrentAlternateSetting_T ( + _in KUSB_HANDLE InterfaceHandle, + _out PUCHAR AltSettingNumber); + +typedef BOOL KUSB_API UsbK_QueryPipe_T ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR AltSettingNumber, + _in UCHAR PipeIndex, + _out PWINUSB_PIPE_INFORMATION PipeInformation); + +typedef BOOL KUSB_API UsbK_SetPipePolicy_T ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID, + _in UINT PolicyType, + _in UINT ValueLength, + _in PVOID Value); + +typedef BOOL KUSB_API UsbK_GetPipePolicy_T ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID, + _in UINT PolicyType, + _ref PUINT ValueLength, + _out PVOID Value); + +typedef BOOL KUSB_API UsbK_ReadPipe_T ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID, + _out PUCHAR Buffer, + _in UINT BufferLength, + _outopt PUINT LengthTransferred, + _inopt LPOVERLAPPED Overlapped); + +typedef BOOL KUSB_API UsbK_WritePipe_T ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID, + _in PUCHAR Buffer, + _in UINT BufferLength, + _outopt PUINT LengthTransferred, + _inopt LPOVERLAPPED Overlapped); + +typedef BOOL KUSB_API UsbK_ResetPipe_T ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID); + +typedef BOOL KUSB_API UsbK_AbortPipe_T ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID); + +typedef BOOL KUSB_API UsbK_FlushPipe_T ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID); + +typedef BOOL KUSB_API UsbK_IsoReadPipe_T ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID, + _out PUCHAR Buffer, + _in UINT BufferLength, + _in LPOVERLAPPED Overlapped, + _refopt PKISO_CONTEXT IsoContext); + +typedef BOOL KUSB_API UsbK_IsoWritePipe_T ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID, + _in PUCHAR Buffer, + _in UINT BufferLength, + _in LPOVERLAPPED Overlapped, + _refopt PKISO_CONTEXT IsoContext); + +typedef BOOL KUSB_API UsbK_GetCurrentFrameNumber_T ( + _in KUSB_HANDLE InterfaceHandle, + _out PUINT FrameNumber); + +typedef BOOL KUSB_API UsbK_GetOverlappedResult_T ( + _in KUSB_HANDLE InterfaceHandle, + _in LPOVERLAPPED Overlapped, + _out PUINT lpNumberOfBytesTransferred, + _in BOOL bWait); + +typedef BOOL KUSB_API UsbK_GetProperty_T ( + _in KUSB_HANDLE InterfaceHandle, + _in KUSB_PROPERTY PropertyType, + _ref PUINT PropertySize, + _out PVOID Value); + +typedef BOOL KUSB_API LstK_Init_T( + _out KLST_HANDLE* DeviceList, + _in KLST_FLAG Flags); + +typedef BOOL KUSB_API LstK_InitEx_T( + _out KLST_HANDLE* DeviceList, + _in KLST_FLAG Flags, + _in PKLST_PATTERN_MATCH PatternMatch); + +typedef BOOL KUSB_API LstK_Free_T( + _in KLST_HANDLE DeviceList); + +typedef BOOL KUSB_API LstK_Enumerate_T( + _in KLST_HANDLE DeviceList, + _in KLST_ENUM_DEVINFO_CB* EnumDevListCB, + _inopt PVOID Context); + +typedef BOOL KUSB_API LstK_Current_T( + _in KLST_HANDLE DeviceList, + _out KLST_DEVINFO_HANDLE* DeviceInfo); + +typedef BOOL KUSB_API LstK_MoveNext_T( + _in KLST_HANDLE DeviceList, + _outopt KLST_DEVINFO_HANDLE* DeviceInfo); + +typedef VOID KUSB_API LstK_MoveReset_T( + _in KLST_HANDLE DeviceList); + +typedef BOOL KUSB_API LstK_FindByVidPid_T( + _in KLST_HANDLE DeviceList, + _in INT Vid, + _in INT Pid, + _out KLST_DEVINFO_HANDLE* DeviceInfo); + +typedef BOOL KUSB_API LstK_Count_T( + _in KLST_HANDLE DeviceList, + _ref PUINT Count); + +typedef BOOL KUSB_API HotK_Init_T( + _out KHOT_HANDLE* Handle, + _ref PKHOT_PARAMS InitParams); + +typedef BOOL KUSB_API HotK_Free_T( + _in KHOT_HANDLE Handle); + +typedef VOID KUSB_API HotK_FreeAll_T(VOID); + +typedef BOOL KUSB_API OvlK_Acquire_T( + _out KOVL_HANDLE* OverlappedK, + _in KOVL_POOL_HANDLE PoolHandle); + +typedef BOOL KUSB_API OvlK_Release_T( + _in KOVL_HANDLE OverlappedK); + +typedef BOOL KUSB_API OvlK_Init_T ( + _out KOVL_POOL_HANDLE* PoolHandle, + _in KUSB_HANDLE UsbHandle, + _in INT MaxOverlappedCount, + _inopt KOVL_POOL_FLAG Flags); + +typedef BOOL KUSB_API OvlK_Free_T( + _in KOVL_POOL_HANDLE PoolHandle); + +typedef HANDLE KUSB_API OvlK_GetEventHandle_T( + _in KOVL_HANDLE OverlappedK); + +typedef BOOL KUSB_API OvlK_Wait_T( + _in KOVL_HANDLE OverlappedK, + _inopt INT TimeoutMS, + _inopt KOVL_WAIT_FLAG WaitFlags, + _out PUINT TransferredLength); + +typedef BOOL KUSB_API OvlK_WaitOldest_T( + _in KOVL_POOL_HANDLE PoolHandle, + _outopt KOVL_HANDLE* OverlappedK, + _inopt INT TimeoutMS, + _inopt KOVL_WAIT_FLAG WaitFlags, + _out PUINT TransferredLength); + +typedef BOOL KUSB_API OvlK_WaitOrCancel_T( + _in KOVL_HANDLE OverlappedK, + _inopt INT TimeoutMS, + _out PUINT TransferredLength); + +typedef BOOL KUSB_API OvlK_WaitAndRelease_T( + _in KOVL_HANDLE OverlappedK, + _inopt INT TimeoutMS, + _out PUINT TransferredLength); + +typedef BOOL KUSB_API OvlK_IsComplete_T( + _in KOVL_HANDLE OverlappedK); + +typedef BOOL KUSB_API OvlK_ReUse_T( + _in KOVL_HANDLE OverlappedK); + +typedef BOOL KUSB_API StmK_Init_T( + _out KSTM_HANDLE* StreamHandle, + _in KUSB_HANDLE UsbHandle, + _in UCHAR PipeID, + _in INT MaxTransferSize, + _in INT MaxPendingTransfers, + _in INT MaxPendingIO, + _inopt PKSTM_CALLBACK Callbacks, + _inopt KSTM_FLAG Flags); + +typedef BOOL KUSB_API StmK_Free_T( + _in KSTM_HANDLE StreamHandle); + +typedef BOOL KUSB_API StmK_Start_T( + _in KSTM_HANDLE StreamHandle); + +typedef BOOL KUSB_API StmK_Stop_T( + _in KSTM_HANDLE StreamHandle, + _in INT TimeoutCancelMS); + +typedef BOOL KUSB_API StmK_Read_T( + _in KSTM_HANDLE StreamHandle, + _out PUCHAR Buffer, + _in INT Offset, + _in INT Length, + _out PUINT TransferredLength); + +typedef BOOL KUSB_API StmK_Write_T( + _in KSTM_HANDLE StreamHandle, + _in PUCHAR Buffer, + _in INT Offset, + _in INT Length, + _out PUINT TransferredLength); + +typedef BOOL KUSB_API IsoK_Init_T( + _out PKISO_CONTEXT* IsoContext, + _in INT NumberOfPackets, + _inopt INT StartFrame); + +typedef BOOL KUSB_API IsoK_Free_T( + _in PKISO_CONTEXT IsoContext); + +typedef BOOL KUSB_API IsoK_SetPackets_T( + _in PKISO_CONTEXT IsoContext, + _in INT PacketSize); + +typedef BOOL KUSB_API IsoK_SetPacket_T( + _in PKISO_CONTEXT IsoContext, + _in INT PacketIndex, + _in PKISO_PACKET IsoPacket); + +typedef BOOL KUSB_API IsoK_GetPacket_T( + _in PKISO_CONTEXT IsoContext, + _in INT PacketIndex, + _out PKISO_PACKET IsoPacket); + +typedef BOOL KUSB_API IsoK_EnumPackets_T( + _in PKISO_CONTEXT IsoContext, + _in KISO_ENUM_PACKETS_CB* EnumPackets, + _inopt INT StartPacketIndex, + _inopt PVOID UserState); + +typedef BOOL KUSB_API IsoK_ReUse_T( + _ref PKISO_CONTEXT IsoContext); + + + +/////////////////////////////////////////////////////////////////////// + +// Function pointers: + +static LibK_GetVersion_T* pLibK_GetVersion = NULL; + +static LibK_GetContext_T* pLibK_GetContext = NULL; + +static LibK_SetContext_T* pLibK_SetContext = NULL; + +static LibK_SetCleanupCallback_T* pLibK_SetCleanupCallback = NULL; + +static LibK_LoadDriverAPI_T* pLibK_LoadDriverAPI = NULL; + +static LibK_CopyDriverAPI_T* pLibK_CopyDriverAPI = NULL; + +static LibK_GetProcAddress_T* pLibK_GetProcAddress = NULL; + +static LibK_SetDefaultContext_T* pLibK_SetDefaultContext = NULL; + +static LibK_GetDefaultContext_T* pLibK_GetDefaultContext = NULL; + +static LibK_Context_Init_T* pLibK_Context_Init = NULL; + +static LibK_Context_Free_T* pLibK_Context_Free = NULL; + +static UsbK_Init_T* pUsbK_Init = NULL; + +static UsbK_Free_T* pUsbK_Free = NULL; + +static UsbK_ClaimInterface_T* pUsbK_ClaimInterface = NULL; + +static UsbK_ReleaseInterface_T* pUsbK_ReleaseInterface = NULL; + +static UsbK_SetAltInterface_T* pUsbK_SetAltInterface = NULL; + +static UsbK_GetAltInterface_T* pUsbK_GetAltInterface = NULL; + +static UsbK_GetDescriptor_T* pUsbK_GetDescriptor = NULL; + +static UsbK_ControlTransfer_T* pUsbK_ControlTransfer = NULL; + +static UsbK_SetPowerPolicy_T* pUsbK_SetPowerPolicy = NULL; + +static UsbK_GetPowerPolicy_T* pUsbK_GetPowerPolicy = NULL; + +static UsbK_SetConfiguration_T* pUsbK_SetConfiguration = NULL; + +static UsbK_GetConfiguration_T* pUsbK_GetConfiguration = NULL; + +static UsbK_ResetDevice_T* pUsbK_ResetDevice = NULL; + +static UsbK_Initialize_T* pUsbK_Initialize = NULL; + +static UsbK_SelectInterface_T* pUsbK_SelectInterface = NULL; + +static UsbK_GetAssociatedInterface_T* pUsbK_GetAssociatedInterface = NULL; + +static UsbK_Clone_T* pUsbK_Clone = NULL; + +static UsbK_QueryInterfaceSettings_T* pUsbK_QueryInterfaceSettings = NULL; + +static UsbK_QueryDeviceInformation_T* pUsbK_QueryDeviceInformation = NULL; + +static UsbK_SetCurrentAlternateSetting_T* pUsbK_SetCurrentAlternateSetting = NULL; + +static UsbK_GetCurrentAlternateSetting_T* pUsbK_GetCurrentAlternateSetting = NULL; + +static UsbK_QueryPipe_T* pUsbK_QueryPipe = NULL; + +static UsbK_SetPipePolicy_T* pUsbK_SetPipePolicy = NULL; + +static UsbK_GetPipePolicy_T* pUsbK_GetPipePolicy = NULL; + +static UsbK_ReadPipe_T* pUsbK_ReadPipe = NULL; + +static UsbK_WritePipe_T* pUsbK_WritePipe = NULL; + +static UsbK_ResetPipe_T* pUsbK_ResetPipe = NULL; + +static UsbK_AbortPipe_T* pUsbK_AbortPipe = NULL; + +static UsbK_FlushPipe_T* pUsbK_FlushPipe = NULL; + +static UsbK_IsoReadPipe_T* pUsbK_IsoReadPipe = NULL; + +static UsbK_IsoWritePipe_T* pUsbK_IsoWritePipe = NULL; + +static UsbK_GetCurrentFrameNumber_T* pUsbK_GetCurrentFrameNumber = NULL; + +static UsbK_GetOverlappedResult_T* pUsbK_GetOverlappedResult = NULL; + +static UsbK_GetProperty_T* pUsbK_GetProperty = NULL; + +static LstK_Init_T* pLstK_Init = NULL; + +static LstK_InitEx_T* pLstK_InitEx = NULL; + +static LstK_Free_T* pLstK_Free = NULL; + +static LstK_Enumerate_T* pLstK_Enumerate = NULL; + +static LstK_Current_T* pLstK_Current = NULL; + +static LstK_MoveNext_T* pLstK_MoveNext = NULL; + +static LstK_MoveReset_T* pLstK_MoveReset = NULL; + +static LstK_FindByVidPid_T* pLstK_FindByVidPid = NULL; + +static LstK_Count_T* pLstK_Count = NULL; + +static HotK_Init_T* pHotK_Init = NULL; + +static HotK_Free_T* pHotK_Free = NULL; + +static HotK_FreeAll_T* pHotK_FreeAll = NULL; + +static OvlK_Acquire_T* pOvlK_Acquire = NULL; + +static OvlK_Release_T* pOvlK_Release = NULL; + +static OvlK_Init_T* pOvlK_Init = NULL; + +static OvlK_Free_T* pOvlK_Free = NULL; + +static OvlK_GetEventHandle_T* pOvlK_GetEventHandle = NULL; + +static OvlK_Wait_T* pOvlK_Wait = NULL; + +static OvlK_WaitOldest_T* pOvlK_WaitOldest = NULL; + +static OvlK_WaitOrCancel_T* pOvlK_WaitOrCancel = NULL; + +static OvlK_WaitAndRelease_T* pOvlK_WaitAndRelease = NULL; + +static OvlK_IsComplete_T* pOvlK_IsComplete = NULL; + +static OvlK_ReUse_T* pOvlK_ReUse = NULL; + +static StmK_Init_T* pStmK_Init = NULL; + +static StmK_Free_T* pStmK_Free = NULL; + +static StmK_Start_T* pStmK_Start = NULL; + +static StmK_Stop_T* pStmK_Stop = NULL; + +static StmK_Read_T* pStmK_Read = NULL; + +static StmK_Write_T* pStmK_Write = NULL; + +static IsoK_Init_T* pIsoK_Init = NULL; + +static IsoK_Free_T* pIsoK_Free = NULL; + +static IsoK_SetPackets_T* pIsoK_SetPackets = NULL; + +static IsoK_SetPacket_T* pIsoK_SetPacket = NULL; + +static IsoK_GetPacket_T* pIsoK_GetPacket = NULL; + +static IsoK_EnumPackets_T* pIsoK_EnumPackets = NULL; + +static IsoK_ReUse_T* pIsoK_ReUse = NULL; + + + +/////////////////////////////////////////////////////////////////////// + + +VOID LibusbK_DynApi_Free(VOID) +{ + if (mLibusbK_ModuleHandle) + { + mFreeLibrary(mLibusbK_ModuleHandle); + mLibusbK_ModuleHandle = NULL; + + // Set all function pointers to null: + + pLibK_GetVersion = NULL; + + pLibK_GetContext = NULL; + + pLibK_SetContext = NULL; + + pLibK_SetCleanupCallback = NULL; + + pLibK_LoadDriverAPI = NULL; + + pLibK_CopyDriverAPI = NULL; + + pLibK_GetProcAddress = NULL; + + pLibK_SetDefaultContext = NULL; + + pLibK_GetDefaultContext = NULL; + + pLibK_Context_Init = NULL; + + pLibK_Context_Free = NULL; + + pUsbK_Init = NULL; + + pUsbK_Free = NULL; + + pUsbK_ClaimInterface = NULL; + + pUsbK_ReleaseInterface = NULL; + + pUsbK_SetAltInterface = NULL; + + pUsbK_GetAltInterface = NULL; + + pUsbK_GetDescriptor = NULL; + + pUsbK_ControlTransfer = NULL; + + pUsbK_SetPowerPolicy = NULL; + + pUsbK_GetPowerPolicy = NULL; + + pUsbK_SetConfiguration = NULL; + + pUsbK_GetConfiguration = NULL; + + pUsbK_ResetDevice = NULL; + + pUsbK_Initialize = NULL; + + pUsbK_SelectInterface = NULL; + + pUsbK_GetAssociatedInterface = NULL; + + pUsbK_Clone = NULL; + + pUsbK_QueryInterfaceSettings = NULL; + + pUsbK_QueryDeviceInformation = NULL; + + pUsbK_SetCurrentAlternateSetting = NULL; + + pUsbK_GetCurrentAlternateSetting = NULL; + + pUsbK_QueryPipe = NULL; + + pUsbK_SetPipePolicy = NULL; + + pUsbK_GetPipePolicy = NULL; + + pUsbK_ReadPipe = NULL; + + pUsbK_WritePipe = NULL; + + pUsbK_ResetPipe = NULL; + + pUsbK_AbortPipe = NULL; + + pUsbK_FlushPipe = NULL; + + pUsbK_IsoReadPipe = NULL; + + pUsbK_IsoWritePipe = NULL; + + pUsbK_GetCurrentFrameNumber = NULL; + + pUsbK_GetOverlappedResult = NULL; + + pUsbK_GetProperty = NULL; + + pLstK_Init = NULL; + + pLstK_InitEx = NULL; + + pLstK_Free = NULL; + + pLstK_Enumerate = NULL; + + pLstK_Current = NULL; + + pLstK_MoveNext = NULL; + + pLstK_MoveReset = NULL; + + pLstK_FindByVidPid = NULL; + + pLstK_Count = NULL; + + pHotK_Init = NULL; + + pHotK_Free = NULL; + + pHotK_FreeAll = NULL; + + pOvlK_Acquire = NULL; + + pOvlK_Release = NULL; + + pOvlK_Init = NULL; + + pOvlK_Free = NULL; + + pOvlK_GetEventHandle = NULL; + + pOvlK_Wait = NULL; + + pOvlK_WaitOldest = NULL; + + pOvlK_WaitOrCancel = NULL; + + pOvlK_WaitAndRelease = NULL; + + pOvlK_IsComplete = NULL; + + pOvlK_ReUse = NULL; + + pStmK_Init = NULL; + + pStmK_Free = NULL; + + pStmK_Start = NULL; + + pStmK_Stop = NULL; + + pStmK_Read = NULL; + + pStmK_Write = NULL; + + pIsoK_Init = NULL; + + pIsoK_Free = NULL; + + pIsoK_SetPackets = NULL; + + pIsoK_SetPacket = NULL; + + pIsoK_GetPacket = NULL; + + pIsoK_EnumPackets = NULL; + + pIsoK_ReUse = NULL; + + + + /////////////////////////////////////////////////////////////////////// + } +} + +INT LibusbK_DynApi_Init(_inopt LPCSTR DllFullPathName) +{ + LPCSTR dllFullPathName = (DllFullPathName == NULL) ? "libusbK.dll" : DllFullPathName; + INT funcLoadFailCount = 0; + + if (mLibusbK_ModuleHandle) LibusbK_DynApi_Free(); + + if (DllFullPathName) + mLibusbK_ModuleHandle = mLoadLibraryExA(dllFullPathName, NULL, LOAD_WITH_ALTERED_SEARCH_PATH); + else + mLibusbK_ModuleHandle = mLoadLibraryExA(dllFullPathName, NULL, 0); + + if (mLibusbK_ModuleHandle == NULL) return -1; + + + // Function loads: + + if ((pLibK_GetVersion = (LibK_GetVersion_T*)GetProcAddress(mLibusbK_ModuleHandle, "LibK_GetVersion")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function LibK_GetVersion.\n"); + } + + if ((pLibK_GetContext = (LibK_GetContext_T*)GetProcAddress(mLibusbK_ModuleHandle, "LibK_GetContext")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function LibK_GetContext.\n"); + } + + if ((pLibK_SetContext = (LibK_SetContext_T*)GetProcAddress(mLibusbK_ModuleHandle, "LibK_SetContext")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function LibK_SetContext.\n"); + } + + if ((pLibK_SetCleanupCallback = (LibK_SetCleanupCallback_T*)GetProcAddress(mLibusbK_ModuleHandle, "LibK_SetCleanupCallback")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function LibK_SetCleanupCallback.\n"); + } + + if ((pLibK_LoadDriverAPI = (LibK_LoadDriverAPI_T*)GetProcAddress(mLibusbK_ModuleHandle, "LibK_LoadDriverAPI")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function LibK_LoadDriverAPI.\n"); + } + + if ((pLibK_CopyDriverAPI = (LibK_CopyDriverAPI_T*)GetProcAddress(mLibusbK_ModuleHandle, "LibK_CopyDriverAPI")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function LibK_CopyDriverAPI.\n"); + } + + if ((pLibK_GetProcAddress = (LibK_GetProcAddress_T*)GetProcAddress(mLibusbK_ModuleHandle, "LibK_GetProcAddress")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function LibK_GetProcAddress.\n"); + } + + if ((pLibK_SetDefaultContext = (LibK_SetDefaultContext_T*)GetProcAddress(mLibusbK_ModuleHandle, "LibK_SetDefaultContext")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function LibK_SetDefaultContext.\n"); + } + + if ((pLibK_GetDefaultContext = (LibK_GetDefaultContext_T*)GetProcAddress(mLibusbK_ModuleHandle, "LibK_GetDefaultContext")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function LibK_GetDefaultContext.\n"); + } + + if ((pLibK_Context_Init = (LibK_Context_Init_T*)GetProcAddress(mLibusbK_ModuleHandle, "LibK_Context_Init")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function LibK_Context_Init.\n"); + } + + if ((pLibK_Context_Free = (LibK_Context_Free_T*)GetProcAddress(mLibusbK_ModuleHandle, "LibK_Context_Free")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function LibK_Context_Free.\n"); + } + + if ((pUsbK_Init = (UsbK_Init_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_Init")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_Init.\n"); + } + + if ((pUsbK_Free = (UsbK_Free_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_Free")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_Free.\n"); + } + + if ((pUsbK_ClaimInterface = (UsbK_ClaimInterface_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_ClaimInterface")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_ClaimInterface.\n"); + } + + if ((pUsbK_ReleaseInterface = (UsbK_ReleaseInterface_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_ReleaseInterface")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_ReleaseInterface.\n"); + } + + if ((pUsbK_SetAltInterface = (UsbK_SetAltInterface_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_SetAltInterface")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_SetAltInterface.\n"); + } + + if ((pUsbK_GetAltInterface = (UsbK_GetAltInterface_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_GetAltInterface")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_GetAltInterface.\n"); + } + + if ((pUsbK_GetDescriptor = (UsbK_GetDescriptor_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_GetDescriptor")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_GetDescriptor.\n"); + } + + if ((pUsbK_ControlTransfer = (UsbK_ControlTransfer_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_ControlTransfer")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_ControlTransfer.\n"); + } + + if ((pUsbK_SetPowerPolicy = (UsbK_SetPowerPolicy_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_SetPowerPolicy")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_SetPowerPolicy.\n"); + } + + if ((pUsbK_GetPowerPolicy = (UsbK_GetPowerPolicy_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_GetPowerPolicy")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_GetPowerPolicy.\n"); + } + + if ((pUsbK_SetConfiguration = (UsbK_SetConfiguration_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_SetConfiguration")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_SetConfiguration.\n"); + } + + if ((pUsbK_GetConfiguration = (UsbK_GetConfiguration_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_GetConfiguration")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_GetConfiguration.\n"); + } + + if ((pUsbK_ResetDevice = (UsbK_ResetDevice_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_ResetDevice")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_ResetDevice.\n"); + } + + if ((pUsbK_Initialize = (UsbK_Initialize_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_Initialize")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_Initialize.\n"); + } + + if ((pUsbK_SelectInterface = (UsbK_SelectInterface_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_SelectInterface")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_SelectInterface.\n"); + } + + if ((pUsbK_GetAssociatedInterface = (UsbK_GetAssociatedInterface_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_GetAssociatedInterface")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_GetAssociatedInterface.\n"); + } + + if ((pUsbK_Clone = (UsbK_Clone_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_Clone")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_Clone.\n"); + } + + if ((pUsbK_QueryInterfaceSettings = (UsbK_QueryInterfaceSettings_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_QueryInterfaceSettings")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_QueryInterfaceSettings.\n"); + } + + if ((pUsbK_QueryDeviceInformation = (UsbK_QueryDeviceInformation_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_QueryDeviceInformation")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_QueryDeviceInformation.\n"); + } + + if ((pUsbK_SetCurrentAlternateSetting = (UsbK_SetCurrentAlternateSetting_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_SetCurrentAlternateSetting")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_SetCurrentAlternateSetting.\n"); + } + + if ((pUsbK_GetCurrentAlternateSetting = (UsbK_GetCurrentAlternateSetting_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_GetCurrentAlternateSetting")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_GetCurrentAlternateSetting.\n"); + } + + if ((pUsbK_QueryPipe = (UsbK_QueryPipe_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_QueryPipe")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_QueryPipe.\n"); + } + + if ((pUsbK_SetPipePolicy = (UsbK_SetPipePolicy_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_SetPipePolicy")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_SetPipePolicy.\n"); + } + + if ((pUsbK_GetPipePolicy = (UsbK_GetPipePolicy_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_GetPipePolicy")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_GetPipePolicy.\n"); + } + + if ((pUsbK_ReadPipe = (UsbK_ReadPipe_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_ReadPipe")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_ReadPipe.\n"); + } + + if ((pUsbK_WritePipe = (UsbK_WritePipe_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_WritePipe")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_WritePipe.\n"); + } + + if ((pUsbK_ResetPipe = (UsbK_ResetPipe_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_ResetPipe")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_ResetPipe.\n"); + } + + if ((pUsbK_AbortPipe = (UsbK_AbortPipe_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_AbortPipe")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_AbortPipe.\n"); + } + + if ((pUsbK_FlushPipe = (UsbK_FlushPipe_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_FlushPipe")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_FlushPipe.\n"); + } + + if ((pUsbK_IsoReadPipe = (UsbK_IsoReadPipe_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_IsoReadPipe")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_IsoReadPipe.\n"); + } + + if ((pUsbK_IsoWritePipe = (UsbK_IsoWritePipe_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_IsoWritePipe")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_IsoWritePipe.\n"); + } + + if ((pUsbK_GetCurrentFrameNumber = (UsbK_GetCurrentFrameNumber_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_GetCurrentFrameNumber")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_GetCurrentFrameNumber.\n"); + } + + if ((pUsbK_GetOverlappedResult = (UsbK_GetOverlappedResult_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_GetOverlappedResult")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_GetOverlappedResult.\n"); + } + + if ((pUsbK_GetProperty = (UsbK_GetProperty_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_GetProperty")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_GetProperty.\n"); + } + + if ((pLstK_Init = (LstK_Init_T*)GetProcAddress(mLibusbK_ModuleHandle, "LstK_Init")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function LstK_Init.\n"); + } + + if ((pLstK_InitEx = (LstK_InitEx_T*)GetProcAddress(mLibusbK_ModuleHandle, "LstK_InitEx")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function LstK_InitEx.\n"); + } + + if ((pLstK_Free = (LstK_Free_T*)GetProcAddress(mLibusbK_ModuleHandle, "LstK_Free")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function LstK_Free.\n"); + } + + if ((pLstK_Enumerate = (LstK_Enumerate_T*)GetProcAddress(mLibusbK_ModuleHandle, "LstK_Enumerate")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function LstK_Enumerate.\n"); + } + + if ((pLstK_Current = (LstK_Current_T*)GetProcAddress(mLibusbK_ModuleHandle, "LstK_Current")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function LstK_Current.\n"); + } + + if ((pLstK_MoveNext = (LstK_MoveNext_T*)GetProcAddress(mLibusbK_ModuleHandle, "LstK_MoveNext")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function LstK_MoveNext.\n"); + } + + if ((pLstK_MoveReset = (LstK_MoveReset_T*)GetProcAddress(mLibusbK_ModuleHandle, "LstK_MoveReset")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function LstK_MoveReset.\n"); + } + + if ((pLstK_FindByVidPid = (LstK_FindByVidPid_T*)GetProcAddress(mLibusbK_ModuleHandle, "LstK_FindByVidPid")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function LstK_FindByVidPid.\n"); + } + + if ((pLstK_Count = (LstK_Count_T*)GetProcAddress(mLibusbK_ModuleHandle, "LstK_Count")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function LstK_Count.\n"); + } + + if ((pHotK_Init = (HotK_Init_T*)GetProcAddress(mLibusbK_ModuleHandle, "HotK_Init")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function HotK_Init.\n"); + } + + if ((pHotK_Free = (HotK_Free_T*)GetProcAddress(mLibusbK_ModuleHandle, "HotK_Free")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function HotK_Free.\n"); + } + + if ((pHotK_FreeAll = (HotK_FreeAll_T*)GetProcAddress(mLibusbK_ModuleHandle, "HotK_FreeAll")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function HotK_FreeAll.\n"); + } + + if ((pOvlK_Acquire = (OvlK_Acquire_T*)GetProcAddress(mLibusbK_ModuleHandle, "OvlK_Acquire")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function OvlK_Acquire.\n"); + } + + if ((pOvlK_Release = (OvlK_Release_T*)GetProcAddress(mLibusbK_ModuleHandle, "OvlK_Release")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function OvlK_Release.\n"); + } + + if ((pOvlK_Init = (OvlK_Init_T*)GetProcAddress(mLibusbK_ModuleHandle, "OvlK_Init")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function OvlK_Init.\n"); + } + + if ((pOvlK_Free = (OvlK_Free_T*)GetProcAddress(mLibusbK_ModuleHandle, "OvlK_Free")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function OvlK_Free.\n"); + } + + if ((pOvlK_GetEventHandle = (OvlK_GetEventHandle_T*)GetProcAddress(mLibusbK_ModuleHandle, "OvlK_GetEventHandle")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function OvlK_GetEventHandle.\n"); + } + + if ((pOvlK_Wait = (OvlK_Wait_T*)GetProcAddress(mLibusbK_ModuleHandle, "OvlK_Wait")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function OvlK_Wait.\n"); + } + + if ((pOvlK_WaitOldest = (OvlK_WaitOldest_T*)GetProcAddress(mLibusbK_ModuleHandle, "OvlK_WaitOldest")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function OvlK_WaitOldest.\n"); + } + + if ((pOvlK_WaitOrCancel = (OvlK_WaitOrCancel_T*)GetProcAddress(mLibusbK_ModuleHandle, "OvlK_WaitOrCancel")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function OvlK_WaitOrCancel.\n"); + } + + if ((pOvlK_WaitAndRelease = (OvlK_WaitAndRelease_T*)GetProcAddress(mLibusbK_ModuleHandle, "OvlK_WaitAndRelease")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function OvlK_WaitAndRelease.\n"); + } + + if ((pOvlK_IsComplete = (OvlK_IsComplete_T*)GetProcAddress(mLibusbK_ModuleHandle, "OvlK_IsComplete")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function OvlK_IsComplete.\n"); + } + + if ((pOvlK_ReUse = (OvlK_ReUse_T*)GetProcAddress(mLibusbK_ModuleHandle, "OvlK_ReUse")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function OvlK_ReUse.\n"); + } + + if ((pStmK_Init = (StmK_Init_T*)GetProcAddress(mLibusbK_ModuleHandle, "StmK_Init")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function StmK_Init.\n"); + } + + if ((pStmK_Free = (StmK_Free_T*)GetProcAddress(mLibusbK_ModuleHandle, "StmK_Free")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function StmK_Free.\n"); + } + + if ((pStmK_Start = (StmK_Start_T*)GetProcAddress(mLibusbK_ModuleHandle, "StmK_Start")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function StmK_Start.\n"); + } + + if ((pStmK_Stop = (StmK_Stop_T*)GetProcAddress(mLibusbK_ModuleHandle, "StmK_Stop")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function StmK_Stop.\n"); + } + + if ((pStmK_Read = (StmK_Read_T*)GetProcAddress(mLibusbK_ModuleHandle, "StmK_Read")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function StmK_Read.\n"); + } + + if ((pStmK_Write = (StmK_Write_T*)GetProcAddress(mLibusbK_ModuleHandle, "StmK_Write")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function StmK_Write.\n"); + } + + if ((pIsoK_Init = (IsoK_Init_T*)GetProcAddress(mLibusbK_ModuleHandle, "IsoK_Init")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function IsoK_Init.\n"); + } + + if ((pIsoK_Free = (IsoK_Free_T*)GetProcAddress(mLibusbK_ModuleHandle, "IsoK_Free")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function IsoK_Free.\n"); + } + + if ((pIsoK_SetPackets = (IsoK_SetPackets_T*)GetProcAddress(mLibusbK_ModuleHandle, "IsoK_SetPackets")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function IsoK_SetPackets.\n"); + } + + if ((pIsoK_SetPacket = (IsoK_SetPacket_T*)GetProcAddress(mLibusbK_ModuleHandle, "IsoK_SetPacket")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function IsoK_SetPacket.\n"); + } + + if ((pIsoK_GetPacket = (IsoK_GetPacket_T*)GetProcAddress(mLibusbK_ModuleHandle, "IsoK_GetPacket")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function IsoK_GetPacket.\n"); + } + + if ((pIsoK_EnumPackets = (IsoK_EnumPackets_T*)GetProcAddress(mLibusbK_ModuleHandle, "IsoK_EnumPackets")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function IsoK_EnumPackets.\n"); + } + + if ((pIsoK_ReUse = (IsoK_ReUse_T*)GetProcAddress(mLibusbK_ModuleHandle, "IsoK_ReUse")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function IsoK_ReUse.\n"); + } + + + + /////////////////////////////////////////////////////////////////////// + + return funcLoadFailCount; +} + +// Function wrappers: + +KUSB_EXP VOID KUSB_API LibK_GetVersion(_out PKLIB_VERSION Version) +{ + pLibK_GetVersion(Version); +} + +KUSB_EXP KLIB_USER_CONTEXT KUSB_API LibK_GetContext( + _in KLIB_HANDLE Handle, + _in KLIB_HANDLE_TYPE HandleType) +{ + return pLibK_GetContext(Handle, HandleType); +} + +KUSB_EXP BOOL KUSB_API LibK_SetContext( + _in KLIB_HANDLE Handle, + _in KLIB_HANDLE_TYPE HandleType, + _in KLIB_USER_CONTEXT ContextValue) +{ + return pLibK_SetContext(Handle, HandleType, ContextValue); +} + +KUSB_EXP BOOL KUSB_API LibK_SetCleanupCallback( + _in KLIB_HANDLE Handle, + _in KLIB_HANDLE_TYPE HandleType, + _in KLIB_HANDLE_CLEANUP_CB* CleanupCB) +{ + return pLibK_SetCleanupCallback(Handle, HandleType, CleanupCB); +} + +KUSB_EXP BOOL KUSB_API LibK_LoadDriverAPI( + _out PKUSB_DRIVER_API DriverAPI, + _in INT DriverID) +{ + return pLibK_LoadDriverAPI(DriverAPI, DriverID); +} + +KUSB_EXP BOOL KUSB_API LibK_CopyDriverAPI( + _out PKUSB_DRIVER_API DriverAPI, + _in KUSB_HANDLE UsbHandle) +{ + return pLibK_CopyDriverAPI(DriverAPI, UsbHandle); +} + +KUSB_EXP BOOL KUSB_API LibK_GetProcAddress( + _out KPROC* ProcAddress, + _in INT DriverID, + _in INT FunctionID) +{ + return pLibK_GetProcAddress(ProcAddress, DriverID, FunctionID); +} + +KUSB_EXP BOOL KUSB_API LibK_SetDefaultContext( + _in KLIB_HANDLE_TYPE HandleType, + _in KLIB_USER_CONTEXT ContextValue) +{ + return pLibK_SetDefaultContext(HandleType, ContextValue); +} + +KUSB_EXP KLIB_USER_CONTEXT KUSB_API LibK_GetDefaultContext( + _in KLIB_HANDLE_TYPE HandleType) +{ + return pLibK_GetDefaultContext(HandleType); +} + +KUSB_EXP BOOL KUSB_API LibK_Context_Init( + _inopt HANDLE Heap, + _in PVOID Reserved) +{ + return pLibK_Context_Init(Heap, Reserved); +} + +KUSB_EXP VOID KUSB_API LibK_Context_Free(VOID) +{ + pLibK_Context_Free(); +} + +KUSB_EXP BOOL KUSB_API UsbK_Init ( + _out KUSB_HANDLE* InterfaceHandle, + _in KLST_DEVINFO_HANDLE DevInfo) +{ + return pUsbK_Init(InterfaceHandle, DevInfo); +} + +KUSB_EXP BOOL KUSB_API UsbK_Free ( + _in KUSB_HANDLE InterfaceHandle) +{ + return pUsbK_Free(InterfaceHandle); +} + +KUSB_EXP BOOL KUSB_API UsbK_ClaimInterface ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR NumberOrIndex, + _in BOOL IsIndex) +{ + return pUsbK_ClaimInterface(InterfaceHandle, NumberOrIndex, IsIndex); +} + +KUSB_EXP BOOL KUSB_API UsbK_ReleaseInterface ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR NumberOrIndex, + _in BOOL IsIndex) +{ + return pUsbK_ReleaseInterface(InterfaceHandle, NumberOrIndex, IsIndex); +} + +KUSB_EXP BOOL KUSB_API UsbK_SetAltInterface ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR NumberOrIndex, + _in BOOL IsIndex, + _in UCHAR AltSettingNumber) +{ + return pUsbK_SetAltInterface(InterfaceHandle, NumberOrIndex, IsIndex, AltSettingNumber); +} + +KUSB_EXP BOOL KUSB_API UsbK_GetAltInterface ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR NumberOrIndex, + _in BOOL IsIndex, + _out PUCHAR AltSettingNumber) +{ + return pUsbK_GetAltInterface(InterfaceHandle, NumberOrIndex, IsIndex, AltSettingNumber); +} + +KUSB_EXP BOOL KUSB_API UsbK_GetDescriptor ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR DescriptorType, + _in UCHAR Index, + _in USHORT LanguageID, + _out PUCHAR Buffer, + _in UINT BufferLength, + _outopt PUINT LengthTransferred) +{ + return pUsbK_GetDescriptor(InterfaceHandle, DescriptorType, Index, LanguageID, Buffer, BufferLength, LengthTransferred); +} + +KUSB_EXP BOOL KUSB_API UsbK_ControlTransfer ( + _in KUSB_HANDLE InterfaceHandle, + _in WINUSB_SETUP_PACKET SetupPacket, + _refopt PUCHAR Buffer, + _in UINT BufferLength, + _outopt PUINT LengthTransferred, + _inopt LPOVERLAPPED Overlapped) +{ + return pUsbK_ControlTransfer(InterfaceHandle, SetupPacket, Buffer, BufferLength, LengthTransferred, Overlapped); +} + +KUSB_EXP BOOL KUSB_API UsbK_SetPowerPolicy ( + _in KUSB_HANDLE InterfaceHandle, + _in UINT PolicyType, + _in UINT ValueLength, + _in PVOID Value) +{ + return pUsbK_SetPowerPolicy(InterfaceHandle, PolicyType, ValueLength, Value); +} + +KUSB_EXP BOOL KUSB_API UsbK_GetPowerPolicy ( + _in KUSB_HANDLE InterfaceHandle, + _in UINT PolicyType, + _ref PUINT ValueLength, + _out PVOID Value) +{ + return pUsbK_GetPowerPolicy(InterfaceHandle, PolicyType, ValueLength, Value); +} + +KUSB_EXP BOOL KUSB_API UsbK_SetConfiguration ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR ConfigurationNumber) +{ + return pUsbK_SetConfiguration(InterfaceHandle, ConfigurationNumber); +} + +KUSB_EXP BOOL KUSB_API UsbK_GetConfiguration ( + _in KUSB_HANDLE InterfaceHandle, + _out PUCHAR ConfigurationNumber) +{ + return pUsbK_GetConfiguration(InterfaceHandle, ConfigurationNumber); +} + +KUSB_EXP BOOL KUSB_API UsbK_ResetDevice ( + _in KUSB_HANDLE InterfaceHandle) +{ + return pUsbK_ResetDevice(InterfaceHandle); +} + +KUSB_EXP BOOL KUSB_API UsbK_Initialize ( + _in HANDLE DeviceHandle, + _out KUSB_HANDLE* InterfaceHandle) +{ + return pUsbK_Initialize(DeviceHandle, InterfaceHandle); +} + +KUSB_EXP BOOL KUSB_API UsbK_SelectInterface ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR NumberOrIndex, + _in BOOL IsIndex) +{ + return pUsbK_SelectInterface(InterfaceHandle, NumberOrIndex, IsIndex); +} + +KUSB_EXP BOOL KUSB_API UsbK_GetAssociatedInterface ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR AssociatedInterfaceIndex, + _out KUSB_HANDLE* AssociatedInterfaceHandle) +{ + return pUsbK_GetAssociatedInterface(InterfaceHandle, AssociatedInterfaceIndex, AssociatedInterfaceHandle); +} + +KUSB_EXP BOOL KUSB_API UsbK_Clone ( + _in KUSB_HANDLE InterfaceHandle, + _out KUSB_HANDLE* DstInterfaceHandle) +{ + return pUsbK_Clone(InterfaceHandle, DstInterfaceHandle); +} + +KUSB_EXP BOOL KUSB_API UsbK_QueryInterfaceSettings ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR AltSettingIndex, + _out PUSB_INTERFACE_DESCRIPTOR UsbAltInterfaceDescriptor) +{ + return pUsbK_QueryInterfaceSettings(InterfaceHandle, AltSettingIndex, UsbAltInterfaceDescriptor); +} + +KUSB_EXP BOOL KUSB_API UsbK_QueryDeviceInformation ( + _in KUSB_HANDLE InterfaceHandle, + _in UINT InformationType, + _ref PUINT BufferLength, + _ref PVOID Buffer) +{ + return pUsbK_QueryDeviceInformation(InterfaceHandle, InformationType, BufferLength, Buffer); +} + +KUSB_EXP BOOL KUSB_API UsbK_SetCurrentAlternateSetting ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR AltSettingNumber) +{ + return pUsbK_SetCurrentAlternateSetting(InterfaceHandle, AltSettingNumber); +} + +KUSB_EXP BOOL KUSB_API UsbK_GetCurrentAlternateSetting ( + _in KUSB_HANDLE InterfaceHandle, + _out PUCHAR AltSettingNumber) +{ + return pUsbK_GetCurrentAlternateSetting(InterfaceHandle, AltSettingNumber); +} + +KUSB_EXP BOOL KUSB_API UsbK_QueryPipe ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR AltSettingNumber, + _in UCHAR PipeIndex, + _out PWINUSB_PIPE_INFORMATION PipeInformation) +{ + return pUsbK_QueryPipe(InterfaceHandle, AltSettingNumber, PipeIndex, PipeInformation); +} + +KUSB_EXP BOOL KUSB_API UsbK_SetPipePolicy ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID, + _in UINT PolicyType, + _in UINT ValueLength, + _in PVOID Value) +{ + return pUsbK_SetPipePolicy(InterfaceHandle, PipeID, PolicyType, ValueLength, Value); +} + +KUSB_EXP BOOL KUSB_API UsbK_GetPipePolicy ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID, + _in UINT PolicyType, + _ref PUINT ValueLength, + _out PVOID Value) +{ + return pUsbK_GetPipePolicy(InterfaceHandle, PipeID, PolicyType, ValueLength, Value); +} + +KUSB_EXP BOOL KUSB_API UsbK_ReadPipe ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID, + _out PUCHAR Buffer, + _in UINT BufferLength, + _outopt PUINT LengthTransferred, + _inopt LPOVERLAPPED Overlapped) +{ + return pUsbK_ReadPipe(InterfaceHandle, PipeID, Buffer, BufferLength, LengthTransferred, Overlapped); +} + +KUSB_EXP BOOL KUSB_API UsbK_WritePipe ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID, + _in PUCHAR Buffer, + _in UINT BufferLength, + _outopt PUINT LengthTransferred, + _inopt LPOVERLAPPED Overlapped) +{ + return pUsbK_WritePipe(InterfaceHandle, PipeID, Buffer, BufferLength, LengthTransferred, Overlapped); +} + +KUSB_EXP BOOL KUSB_API UsbK_ResetPipe ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID) +{ + return pUsbK_ResetPipe(InterfaceHandle, PipeID); +} + +KUSB_EXP BOOL KUSB_API UsbK_AbortPipe ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID) +{ + return pUsbK_AbortPipe(InterfaceHandle, PipeID); +} + +KUSB_EXP BOOL KUSB_API UsbK_FlushPipe ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID) +{ + return pUsbK_FlushPipe(InterfaceHandle, PipeID); +} + +KUSB_EXP BOOL KUSB_API UsbK_IsoReadPipe ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID, + _out PUCHAR Buffer, + _in UINT BufferLength, + _in LPOVERLAPPED Overlapped, + _refopt PKISO_CONTEXT IsoContext) +{ + return pUsbK_IsoReadPipe(InterfaceHandle, PipeID, Buffer, BufferLength, Overlapped, IsoContext); +} + +KUSB_EXP BOOL KUSB_API UsbK_IsoWritePipe ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID, + _in PUCHAR Buffer, + _in UINT BufferLength, + _in LPOVERLAPPED Overlapped, + _refopt PKISO_CONTEXT IsoContext) +{ + return pUsbK_IsoWritePipe(InterfaceHandle, PipeID, Buffer, BufferLength, Overlapped, IsoContext); +} + +KUSB_EXP BOOL KUSB_API UsbK_GetCurrentFrameNumber ( + _in KUSB_HANDLE InterfaceHandle, + _out PUINT FrameNumber) +{ + return pUsbK_GetCurrentFrameNumber(InterfaceHandle, FrameNumber); +} + +KUSB_EXP BOOL KUSB_API UsbK_GetOverlappedResult ( + _in KUSB_HANDLE InterfaceHandle, + _in LPOVERLAPPED Overlapped, + _out PUINT lpNumberOfBytesTransferred, + _in BOOL bWait) +{ + return pUsbK_GetOverlappedResult(InterfaceHandle, Overlapped, lpNumberOfBytesTransferred, bWait); +} + +KUSB_EXP BOOL KUSB_API UsbK_GetProperty ( + _in KUSB_HANDLE InterfaceHandle, + _in KUSB_PROPERTY PropertyType, + _ref PUINT PropertySize, + _out PVOID Value) +{ + return pUsbK_GetProperty(InterfaceHandle, PropertyType, PropertySize, Value); +} + +KUSB_EXP BOOL KUSB_API LstK_Init( + _out KLST_HANDLE* DeviceList, + _in KLST_FLAG Flags) +{ + return pLstK_Init(DeviceList, Flags); +} + +KUSB_EXP BOOL KUSB_API LstK_InitEx( + _out KLST_HANDLE* DeviceList, + _in KLST_FLAG Flags, + _in PKLST_PATTERN_MATCH PatternMatch) +{ + return pLstK_InitEx(DeviceList, Flags, PatternMatch); +} + +KUSB_EXP BOOL KUSB_API LstK_Free( + _in KLST_HANDLE DeviceList) +{ + return pLstK_Free(DeviceList); +} + +KUSB_EXP BOOL KUSB_API LstK_Enumerate( + _in KLST_HANDLE DeviceList, + _in KLST_ENUM_DEVINFO_CB* EnumDevListCB, + _inopt PVOID Context) +{ + return pLstK_Enumerate(DeviceList, EnumDevListCB, Context); +} + +KUSB_EXP BOOL KUSB_API LstK_Current( + _in KLST_HANDLE DeviceList, + _out KLST_DEVINFO_HANDLE* DeviceInfo) +{ + return pLstK_Current(DeviceList, DeviceInfo); +} + +KUSB_EXP BOOL KUSB_API LstK_MoveNext( + _in KLST_HANDLE DeviceList, + _outopt KLST_DEVINFO_HANDLE* DeviceInfo) +{ + return pLstK_MoveNext(DeviceList, DeviceInfo); +} + +KUSB_EXP VOID KUSB_API LstK_MoveReset( + _in KLST_HANDLE DeviceList) +{ + pLstK_MoveReset(DeviceList); +} + +KUSB_EXP BOOL KUSB_API LstK_FindByVidPid( + _in KLST_HANDLE DeviceList, + _in INT Vid, + _in INT Pid, + _out KLST_DEVINFO_HANDLE* DeviceInfo) +{ + return pLstK_FindByVidPid(DeviceList, Vid, Pid, DeviceInfo); +} + +KUSB_EXP BOOL KUSB_API LstK_Count( + _in KLST_HANDLE DeviceList, + _ref PUINT Count) +{ + return pLstK_Count(DeviceList, Count); +} + +KUSB_EXP BOOL KUSB_API HotK_Init( + _out KHOT_HANDLE* Handle, + _ref PKHOT_PARAMS InitParams) +{ + return pHotK_Init(Handle, InitParams); +} + +KUSB_EXP BOOL KUSB_API HotK_Free( + _in KHOT_HANDLE Handle) +{ + return pHotK_Free(Handle); +} + +KUSB_EXP VOID KUSB_API HotK_FreeAll(VOID) +{ + pHotK_FreeAll(); +} + +KUSB_EXP BOOL KUSB_API OvlK_Acquire( + _out KOVL_HANDLE* OverlappedK, + _in KOVL_POOL_HANDLE PoolHandle) +{ + return pOvlK_Acquire(OverlappedK, PoolHandle); +} + +KUSB_EXP BOOL KUSB_API OvlK_Release( + _in KOVL_HANDLE OverlappedK) +{ + return pOvlK_Release(OverlappedK); +} + +KUSB_EXP BOOL KUSB_API OvlK_Init ( + _out KOVL_POOL_HANDLE* PoolHandle, + _in KUSB_HANDLE UsbHandle, + _in INT MaxOverlappedCount, + _inopt KOVL_POOL_FLAG Flags) +{ + return pOvlK_Init(PoolHandle, UsbHandle, MaxOverlappedCount, Flags); +} + +KUSB_EXP BOOL KUSB_API OvlK_Free( + _in KOVL_POOL_HANDLE PoolHandle) +{ + return pOvlK_Free(PoolHandle); +} + +KUSB_EXP HANDLE KUSB_API OvlK_GetEventHandle( + _in KOVL_HANDLE OverlappedK) +{ + return pOvlK_GetEventHandle(OverlappedK); +} + +KUSB_EXP BOOL KUSB_API OvlK_Wait( + _in KOVL_HANDLE OverlappedK, + _inopt INT TimeoutMS, + _inopt KOVL_WAIT_FLAG WaitFlags, + _out PUINT TransferredLength) +{ + return pOvlK_Wait(OverlappedK, TimeoutMS, WaitFlags, TransferredLength); +} + +KUSB_EXP BOOL KUSB_API OvlK_WaitOldest( + _in KOVL_POOL_HANDLE PoolHandle, + _outopt KOVL_HANDLE* OverlappedK, + _inopt INT TimeoutMS, + _inopt KOVL_WAIT_FLAG WaitFlags, + _out PUINT TransferredLength) +{ + return pOvlK_WaitOldest(PoolHandle, OverlappedK, TimeoutMS, WaitFlags, TransferredLength); +} + +KUSB_EXP BOOL KUSB_API OvlK_WaitOrCancel( + _in KOVL_HANDLE OverlappedK, + _inopt INT TimeoutMS, + _out PUINT TransferredLength) +{ + return pOvlK_WaitOrCancel(OverlappedK, TimeoutMS, TransferredLength); +} + +KUSB_EXP BOOL KUSB_API OvlK_WaitAndRelease( + _in KOVL_HANDLE OverlappedK, + _inopt INT TimeoutMS, + _out PUINT TransferredLength) +{ + return pOvlK_WaitAndRelease(OverlappedK, TimeoutMS, TransferredLength); +} + +KUSB_EXP BOOL KUSB_API OvlK_IsComplete( + _in KOVL_HANDLE OverlappedK) +{ + return pOvlK_IsComplete(OverlappedK); +} + +KUSB_EXP BOOL KUSB_API OvlK_ReUse( + _in KOVL_HANDLE OverlappedK) +{ + return pOvlK_ReUse(OverlappedK); +} + +KUSB_EXP BOOL KUSB_API StmK_Init( + _out KSTM_HANDLE* StreamHandle, + _in KUSB_HANDLE UsbHandle, + _in UCHAR PipeID, + _in INT MaxTransferSize, + _in INT MaxPendingTransfers, + _in INT MaxPendingIO, + _inopt PKSTM_CALLBACK Callbacks, + _inopt KSTM_FLAG Flags) +{ + return pStmK_Init(StreamHandle, UsbHandle, PipeID, MaxTransferSize, MaxPendingTransfers, MaxPendingIO, Callbacks, Flags); +} + +KUSB_EXP BOOL KUSB_API StmK_Free( + _in KSTM_HANDLE StreamHandle) +{ + return pStmK_Free(StreamHandle); +} + +KUSB_EXP BOOL KUSB_API StmK_Start( + _in KSTM_HANDLE StreamHandle) +{ + return pStmK_Start(StreamHandle); +} + +KUSB_EXP BOOL KUSB_API StmK_Stop( + _in KSTM_HANDLE StreamHandle, + _in INT TimeoutCancelMS) +{ + return pStmK_Stop(StreamHandle, TimeoutCancelMS); +} + +KUSB_EXP BOOL KUSB_API StmK_Read( + _in KSTM_HANDLE StreamHandle, + _out PUCHAR Buffer, + _in INT Offset, + _in INT Length, + _out PUINT TransferredLength) +{ + return pStmK_Read(StreamHandle, Buffer, Offset, Length, TransferredLength); +} + +KUSB_EXP BOOL KUSB_API StmK_Write( + _in KSTM_HANDLE StreamHandle, + _in PUCHAR Buffer, + _in INT Offset, + _in INT Length, + _out PUINT TransferredLength) +{ + return pStmK_Write(StreamHandle, Buffer, Offset, Length, TransferredLength); +} + +KUSB_EXP BOOL KUSB_API IsoK_Init( + _out PKISO_CONTEXT* IsoContext, + _in INT NumberOfPackets, + _inopt INT StartFrame) +{ + return pIsoK_Init(IsoContext, NumberOfPackets, StartFrame); +} + +KUSB_EXP BOOL KUSB_API IsoK_Free( + _in PKISO_CONTEXT IsoContext) +{ + return pIsoK_Free(IsoContext); +} + +KUSB_EXP BOOL KUSB_API IsoK_SetPackets( + _in PKISO_CONTEXT IsoContext, + _in INT PacketSize) +{ + return pIsoK_SetPackets(IsoContext, PacketSize); +} + +KUSB_EXP BOOL KUSB_API IsoK_SetPacket( + _in PKISO_CONTEXT IsoContext, + _in INT PacketIndex, + _in PKISO_PACKET IsoPacket) +{ + return pIsoK_SetPacket(IsoContext, PacketIndex, IsoPacket); +} + +KUSB_EXP BOOL KUSB_API IsoK_GetPacket( + _in PKISO_CONTEXT IsoContext, + _in INT PacketIndex, + _out PKISO_PACKET IsoPacket) +{ + return pIsoK_GetPacket(IsoContext, PacketIndex, IsoPacket); +} + +KUSB_EXP BOOL KUSB_API IsoK_EnumPackets( + _in PKISO_CONTEXT IsoContext, + _in KISO_ENUM_PACKETS_CB* EnumPackets, + _inopt INT StartPacketIndex, + _inopt PVOID UserState) +{ + return pIsoK_EnumPackets(IsoContext, EnumPackets, StartPacketIndex, UserState); +} + +KUSB_EXP BOOL KUSB_API IsoK_ReUse( + _ref PKISO_CONTEXT IsoContext) +{ + return pIsoK_ReUse(IsoContext); +} + + + +/////////////////////////////////////////////////////////////////////// diff --git a/Old Matlab Interface/.svn/pristine/6b/6b54b54984147f1b32fe68dbaa766f3b2000c508.svn-base b/Old Matlab Interface/.svn/pristine/6b/6b54b54984147f1b32fe68dbaa766f3b2000c508.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..0c8f63ccdefb03bbd30929c0c4987cbce9fc9557 GIT binary patch literal 1662 zcmZvcdo?^QVqz9aR)-x!k`R)H>?~Fj%4Mb@%5`!-nq)O;HVh3( zXiS-;Y1TdLuxPThlWiHALM}U`_UWuY_jk^F&hPxr`9AOSzQ5=5K^(IPk31V@V1Tu> zLLf5a5r}OF1VRB;Dy%QhoE&`r?-lV6JG$iC;+~2*In(!V>zvnq5>4PMaV1+Wb#lxe$|(_j`Qx9igsI>x_IN%@w5tb(f)T5Y%mhx>%_DL=rvf;HO-1p8t3K zS*bH`S`t|q*NS_Lm*h+_XQP}QB1`pXf3>gr(i=3Hv4n-$G4}#H9h(}#ka;Q(LaV%|Y@Al@lo6dFdc5KTMgJR{1Ier!9U0oV)Pw9lBE3#$i zX~RfJx9$QdqI)YB&oNK;hx5}sje@ux{GBRqUSg5kmz^#;4ysVu(E;%qhl%NOrZLYT zkJi$|*Wwa=FE;oyPw6(!mMR^!yT&<_epTGzh0QM?y9xXAOti7XLR+WRb=BM^$-Nzx zHA^>n{BX=8)#Qwbz~Ii0$V9c%4I@mwvIWu$_pKB&&WvDPyct#K`C5l-pJL|2y3yoX zL~aXAzUnc_w%lQ*kz<@BR~6&u)2c8PIDxl7uB!ccUQ=JMtg%)ryPqOlnh{JIx(=Z8 z%Na*ypCTN>w3|lZ{#u~_IEm#B+zjVb5}cn3`D(}?#6f=kI&*^1IQt@d>&jGuxxi8E zS~$>W#IU12i8#f&@d58mhX3cIQmiT5?d_LCJf0d}Ut^J$G^2HkmX(>PCbqh+-$SrQ z?{qJqke6m$_8Gc*b;A5{sh_3@Z*DYY!ThW^4(9#=`T1dGqI{}peQs2m!`@Q8&U)M` zy=#6%f3j?$c2jl%h0Zx6VBGE~+_pgYG0Of)wL#cPIRA3nr(_?MlahNS9F3fcaG0OH z(oGJBwSpDDN4C(>kT)K0oOOZw_ksCgh&xarvE#e8P*cn(kdN?gzVs007t4+wm1*Qm zdO?29B5iFn@K&ci?tpKV70l1L_3RLN-c7hvBbdCsxe&eO^;q7c6f<6!HuhE#`Ll!L z)!xSv%h4}vU)W&q$}8i%&CP85^ak59%pnDHVDQ8S+oU`GIvK#=7q%tk6Tv>B6w8Oe z;C^8695A>k&6ZcW!QfD4<;QucHR(7os16K9TwV+{nZz+NfWcpZ!ODk7uVdfT_O=0o zi_k+D^soqic?Nzl6y3-FjvE+Kw<3p369}XWN>{jqr8;>Ru`0^5kF1j~3pSIoBAb2@ zzHstw4fpt2f*L*Ucd=qSKc^lkHRW}Q_R~Du$LYiKl}uTgD(PHzJtZ-rKyXn!iP8lR z^g$0#p@(Zil+%%9ZZ8{pXao-|g9mD)=rxq6R&gYgsdgSXWPk^Pzymy+=PtJ30Rnj7 z5O}}_JmBfQ@_Bka*h9AG?r1@AnsJew8|JGhONT9`fwb%G4By`xQkXV`qS;#a2jGD& zfpI9?%fOSycudu)KF!Mc&?po+<*jp74okEHJT>kU5AZwRpR^$IqD6P{NMs2e2m9xP z2fVWjxMkph7Q^a+)qIzrchu+ACM*i}4S2w!)h9O=JYWkRVDh^#t-!G{cmM+)=x$(z z6zMWZw%rk2dyY%GIh_9vctFekyD2yDfD(AX%8{p{$yN-|(l93W$hpK^fjkvFAOR1M zzymhA{Mlh8jNMy~e0r<6-iw^yIrbJjFbp2(2M;WP2RM>}9eI94Vi_NW(UeXl9RUw; bzymSh0d4TWb@xz8IEN-^5T8Nyf(QNu=h`#O literal 0 HcmV?d00001 diff --git a/Old Matlab Interface/.svn/pristine/6b/6bcb7516b24c37fa7330dcd3d4d2ccb53905f22d.svn-base b/Old Matlab Interface/.svn/pristine/6b/6bcb7516b24c37fa7330dcd3d4d2ccb53905f22d.svn-base new file mode 100644 index 00000000..7e23f28d --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/6b/6bcb7516b24c37fa7330dcd3d4d2ccb53905f22d.svn-base @@ -0,0 +1,48 @@ +#region Copyright(c) Travis Robinson + +// Copyright (c) 2011-2012 Travis Robinson +// All rights reserved. +// +// Hot.Plug.Detect.GUI +// +// Last Updated: 03.08.2012 +// +// 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. +// +// 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 TRAVIS LEE ROBINSON +// 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. + +#endregion + +using System; +using System.Windows.Forms; + +namespace Hot.Plug.Detect.GUI +{ + internal static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + private static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new Form1()); + } + } +} \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/6c/6c378d3e96a933397f034cbb46862b36c3159642.svn-base b/Old Matlab Interface/.svn/pristine/6c/6c378d3e96a933397f034cbb46862b36c3159642.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..fc136d6507cc9df8e9cce8546a4c7daf0cbd8aee GIT binary patch literal 7168 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 literal 0 HcmV?d00001 diff --git a/Old Matlab Interface/.svn/pristine/6c/6c6a73ab3cbe75c885f6d1dd673ae5fab0179fd4.svn-base b/Old Matlab Interface/.svn/pristine/6c/6c6a73ab3cbe75c885f6d1dd673ae5fab0179fd4.svn-base new file mode 100644 index 00000000..77a9c0fe --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/6c/6c6a73ab3cbe75c885f6d1dd673ae5fab0179fd4.svn-base @@ -0,0 +1,8 @@ +function [OUT] = mex_usb_send_control( RequestType, Request, Value, Index, Length, LDATA) + +global usb_handle +if ~length(usb_handle) + warning('USB Handle not initialised. Initialising!') + mex_usb_init('03eb', 'a000') +end +OUT = USB_CTRL_SEND(usb_handle, RequestType, Request, Value, Index, Length, LDATA); \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/6c/6c902550934daa388a7f4bd6b7d3a5e821ab7b79.svn-base b/Old Matlab Interface/.svn/pristine/6c/6c902550934daa388a7f4bd6b7d3a5e821ab7b79.svn-base new file mode 100644 index 00000000..000f42e6 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/6c/6c902550934daa388a7f4bd6b7d3a5e821ab7b79.svn-base @@ -0,0 +1,2 @@ +function returnval = returnempty() + returnval = []; \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/6d/6d7787be02fc4a01b9a562c5c015699be31a2269.svn-base b/Old Matlab Interface/.svn/pristine/6d/6d7787be02fc4a01b9a562c5c015699be31a2269.svn-base new file mode 100644 index 00000000..5a34b871 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/6d/6d7787be02fc4a01b9a562c5c015699be31a2269.svn-base @@ -0,0 +1,46 @@ +//MATLAB INCLUDES +#include +#include + +//LIBUSBK INCLUDES +#include +#include +#include +#include +#include "libusbk.h" + +void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) +{ + //Vars: + //Imports + char* POOL_CHAR; + char* icx0, icx1; + char* HANDLE_CHAR; + KUSB_HANDLE handle = NULL; + PKISO_CONTEXT isoCtx_zero; + PKISO_CONTEXT isoCtx_one; + KOVL_POOL_HANDLE ovlPool = NULL; + + + + //Initialise Data + POOL_CHAR = mxArrayToString(prhs[0]); + sscanf(POOL_CHAR, "%16x", &ovlPool); + + icx0 = mxArrayToString(prhs[1]); + sscanf(icx0, "%16x", &isoCtx_zero); + + icx1 = mxArrayToString(prhs[2]); + sscanf(icx1, "%16x", &isoCtx_one); + + POOL_CHAR = mxArrayToString(prhs[3]); + sscanf(POOL_CHAR, "%16x", &ovlPool); + + + //Actual Function + UsbK_Free(handle); + IsoK_Free(isoCtx_zero); + IsoK_Free(isoCtx_one); + OvlK_Free(ovlPool); + return; +} \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/6e/6e7927959ad433000d17dce5491f498151cf36a1.svn-base b/Old Matlab Interface/.svn/pristine/6e/6e7927959ad433000d17dce5491f498151cf36a1.svn-base new file mode 100644 index 00000000..00ca0be2 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/6e/6e7927959ad433000d17dce5491f498151cf36a1.svn-base @@ -0,0 +1,35 @@ +function [] = tiny_send_auxwf(waveform, amplitude, frequency); + +waveform = tiny_wave_conv_aux(waveform, amplitude); +waveform = uint8(waveform); + +wave_length = length(waveform); + +f_invalid = 1; + +valid_clock_div = [1,2,4,8,64,256,1024]; +f0=24e6; + +if(frequency*wave_length)>1e6 + error('Frequency is too high') +end + +for clk_setting = 1:length(valid_clock_div) + f_test = f0 / valid_clock_div(clk_setting); + if (f_test/frequency)<65535 + f_invalid = 0; + break + end +end + +if (f_invalid) + error('Frequency is too low!') +end + +tccper = round(f_test / frequency / wave_length); +tccper = uint16(tccper); + +clk_setting = uint16(clk_setting); + +mex_usb_send_control('40', 'a2', dec2hex(tccper), dec2hex(clk_setting), dec2hex(wave_length), waveform); + diff --git a/Old Matlab Interface/.svn/pristine/74/749166eff8c546e24e0c1bd4db17cf7b85af8cf2.svn-base b/Old Matlab Interface/.svn/pristine/74/749166eff8c546e24e0c1bd4db17cf7b85af8cf2.svn-base new file mode 100644 index 00000000..b391df84 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/74/749166eff8c546e24e0c1bd4db17cf7b85af8cf2.svn-base @@ -0,0 +1,22 @@ +clear all +clc +vex = [5 8 10 12 15]; + +v68 = vex - [4.4 6.75 8.05 9.12 10.29]; +v220 = vex - [4.53 7.14 8.74 10.11 11.97]; +vinf = vex - [4.59 8.40 9.92 10.82 12.98]; + +r68 = (1/68 + 1/250)^-1; +r220 = (1/220 + 1/250)^-1; +rinf = 250; + +magic = 1.5; +mag_exponent = 4; + +c68 = mean(v68./((vex+magic).^mag_exponent)); +c220 = mean(v220./((vex+magic).^mag_exponent)); +cinf = mean(vinf./((vex+magic).^mag_exponent)); + +c68*r68 +c220*r220 +cinf*rinf \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/74/74ab792fd8b045e2ac5e42386036bd8a784d7a83.svn-base b/Old Matlab Interface/.svn/pristine/74/74ab792fd8b045e2ac5e42386036bd8a784d7a83.svn-base new file mode 100644 index 00000000..6008fdd5 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/74/74ab792fd8b045e2ac5e42386036bd8a784d7a83.svn-base @@ -0,0 +1,16 @@ +function [] = setscopewindowsize(time,vmin,vmax) +global scope_window_time +global scope_window_min +global scope_window_max + +if (vmaxP%rGXq1O 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 literal 0 HcmV?d00001 diff --git a/Old Matlab Interface/.svn/pristine/78/787752147806941a97858ca492d13c388b1e12b9.svn-base b/Old Matlab Interface/.svn/pristine/78/787752147806941a97858ca492d13c388b1e12b9.svn-base new file mode 100644 index 00000000..4d8d7618 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/78/787752147806941a97858ca492d13c388b1e12b9.svn-base @@ -0,0 +1,27 @@ +function [expected] = dofrontend(vin, channel) + +vcc = 3.3; +TOP = 128; +r4 = 75e3; +r3 = 1e6; +r2 = 1e3; +r1 = 1e3; + +global scope_gain_0 +global scope_gain_1 +global CH1_AC +global CH2_AC + +if channel == 1 + scope_gain = scope_gain_1; + AC_offset = CH2_AC * 1.65; +else + scope_gain = scope_gain_0; + AC_offset = CH1_AC * 1.65; +end + +vn = vcc * (r2/(r1+r2)); +vx = vn + (vin - vn) * (r4 / (r3+r4)); +vref = vcc/2; + +expected = int8((vx - vn)/vref * scope_gain * TOP); \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/7a/7a574ec4e525727674ae7f5c8c1809f297404050.svn-base b/Old Matlab Interface/.svn/pristine/7a/7a574ec4e525727674ae7f5c8c1809f297404050.svn-base new file mode 100644 index 00000000..b839721c --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/7a/7a574ec4e525727674ae7f5c8c1809f297404050.svn-base @@ -0,0 +1,50 @@ +global scope_window_time +global scope_window_max +global scope_window_min +global scope_mode +global gui_axes +global text_box_1 +global gui_hori_cursor_a_pos +global gui_hori_cursor_b_pos +global gui_vert_cursor_a_pos +global gui_vert_cursor_b_pos +global gui_cursor_mode +global saved_waveform_ch1 +global saved_waveform_ch2 + +refreshrate_temp = refreshrate_temp - 1; + +tic +switch(scope_mode) + case 0 + if (refreshrate_temp == 0) + refreshrate_temp = refreshrate; + [taxis, cool_waveform] = conv_ana(saved_waveform_ch1, 375000*scope_window_time); + plotcursors + waveform_exists = 1; + else + if (waveform_exists) + set(text_box_1, 'String', sprintf(' ---------------------\n Vmin = %.2fV\n ---------------------\n Vmax = %.2f\n ---------------------\n Vmean = %.2f\n ---------------------\n Vrms = %.2f\n ---------------------\n ', min(cool_waveform), max(cool_waveform), mean(cool_waveform), rms(cool_waveform))); + %title(titlestring); + xlabel(gui_axes, 'Time (s)') + ylabel(gui_axes, 'Voltage (V)') + drawnow + end + end + case 3 + if (refreshrate_temp == 0) + refreshrate_temp = refreshrate; + [taxis, temp_waveform] = conv_dig(saved_waveform_ch1, 375000*scope_window_time); + stairs(taxis, temp_waveform); + else + axis([-scope_window_time 0 -0.1 1.1]) + titlestring = sprintf('Showing Digital Waveform\nInsert Information here! (Baud Rate?)'); + title(titlestring); + xlabel(gui_axes, 'Time (s)') + ylabel(gui_axes, 'Logic (V)') + drawnow + end + otherwise + error('scope_mode invalid!') +end +toc \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/7d/7dd3b89f71ee9ee97d78aa0ce502fbf9ffd1591c.svn-base b/Old Matlab Interface/.svn/pristine/7d/7dd3b89f71ee9ee97d78aa0ce502fbf9ffd1591c.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..01955c69b2e644789b0c65e3a6a10db7f822b26c GIT binary patch literal 9728 zcmeHN4{#J!ntzjILI?>H45JZ=G-0A~w+urDmp~F~hGg`ObTC4K5#femrb9;N-}Urh zVx3pGW7Mg)b4A^`yX=W6SlzSl z_g?p8Xy0p7LnwC;(a;F-KOW{x=k<_Feilk-|QZylT+_g!HCnHK@Wo5a`a{bV~ z&w5ukk5m`x<_+7bTR?B#5Ug$%@P0wNy&J3DLT|YG8o}RH-6Y@^OK+=y8>8WV?yC@a zm!FWxqot%HG161uT_knVyrOah56(i9ORod068Ih)2OKXV#LgR(0wgIANY?W)F7`sz zG%A44(3$4+fII90&O7oFa*@-8vVF!wf%Da%M2H#qmDL+HWk7@I=?XMF zWIlHO&}S8iknN3XB&3B1S&Q@#FbLPb26a~PBI-s{jZD}faHH}x-H1A?cnKM9Oqq&e zj9>^o32;{Na(`-C4TC3g(glS3t3#btyh2ZjC7~$h&vpp8o*)3N;w5BV0lx~rJOebh z)m27wnyaSg9$z=j$6N>L!|(5f5oPu>O8`8FY0keYz~*{}1MD|4JLhe>1kMH2IXV9) z0PpJ8;weyeR~cm!dO64QmDN~+l)XXOW&Kmkb8voxX++uE`UQ}3-fz&n^PFHEH=LO& z!J7u}h~WL3;S7OC^PLwwC-t*185+)1z)Ke5$=%!|>%2hoJ)h_=gUCMg3CS#iScX{7 zTVnl5Ad?%=bTI!k>p_>5#atmaiv>4wzH^R#KX@|RHm7swwBwQaApESo#K)=wc~*r< z9>`~_uwFXz>nmuk!_`1@vP*)$zghr)i=j?g&m4sNu6_du1iR31j$x5Og+hgm>(e}` z`N~DyV9LZVVTk$}k?hWQ5rxC=8OCtm0B2}eTkBXt954Ev9gY_|uXDW6Q;ktL;9&q( z2to3GdPIMEmNE2>!1~+5I`b1~-UQ7igJoS6H;R;i%UGfz>v|yD?$u>lK0zEWzGG8-g5WKGE48u5pXGWmXFnZ!jrLWJi?l@+;jHF(&fZ-ofS-e*(;0id z-8Qw1W|t9tQ7KsY%Jl&HB}_Qr9svD4G@fA*K7ykR%drRq96IS3YDNUi-iBC*h8=&gjK_1dgI&nkzXp~&+tX+_?Oy!OEJ*%Q>8w>!r*KV=0@0sEq?12@h_cFuATpdc z!&YWzDSCY5JHmVARw0-VK_~mI%q~)<)9eRjftL5xEp+umMElTi)<8;E`-%2TtZBG8 zJCFNB&J2#^{KUXEQn^TYIxJ+Bb`U~kKWMq-lZ;(%xv2e}%s!FX`Kj*)*a^dV5F*3* zlJH@FQ{t}dZvo`mUPS93`oJ-Co(K6@+q0l2-v;g(o_q@+`?1Y2GzMfQPwc|yGqnPq ztxP500GYB|iMj_Q)^CNGr^oOBr`BSjx%oKrmDdA|*_T7dhA#9S5M#S|1PaqU)_kQ7 zp!>ldv(JSV_ER$SL8hFtG5VOj7#zB~Z6ScR6w32}=s&~MLx&4G+2KQ6J-}WyoFC#T z8TOV%xYY5EDBJ4tQWkSj%KpsNC9{aDm(MC+(Dx@ktk+p{D<$R@j)Uy`SkD*P$1?lH zOWa4USI;@$xgMRJ%v`hDc?MXf+;bZ2$=4u8-ZXpm#QVQB44Kvb6Q5v1 zr?q(nfzNnj$Urbgac0#_hd+k$^u!IvmK|sB@a(JHYL1MD(8McIeQNXD+egq0<;F@74p#yz+x(_GCw z`N7G@J~a%Ud&Ezv%6>( z&y#3AI@aN8hCLi~AV7%R9P@Ilf#&UJF$|7NGVCz{;E^)8^BmKs5aCoEWskT-06F_V zA^@7V$m}pS9Q$g{V)nn}AZIV;&Y;itevl>Lj@eJ)7CpCw43F901ZK`U`}ctIZu?>U zZ3|Bs&XaR6pX?oQb5N{Wx6irYMVn8(id$b98bu*pq+ilt!g$CSN;9b^Jb!}(3Fi*S(t%SL7%Ww?I)9K5MN zKZtY_{S>VBLi-nx5}ShjMC9hF6%@obv)Ct#1Qi9e%e!?{>!+qc1# zbG(ML+~l-_V|KVr7>t@bJU^TCJ22NMChG9?gmDynoJ!)JCZ-n6*PfXRZ~3+ffT{VE z74zv^WQ^17Xc=ueqkdq{F+ROUKV$czY4_Y$uq&K`l#Lwh+(Jm->N2g^GdxPew3QYg z^$b6}n!j3QDh|y<_TY6_+CN+L6 z&>Pv^6>`f-wVe6NieHgi##M*U7@^sb27k+O^&Ibkjqn9!6`l{7jmY`RjlVPuoa6fa zNDjtZ*ZK9402}9=$9cNIaxkxJL|-yJo;_=uDiUWVGH2A6;h-|=>qNUB+p1Cjf@lw* z<^K61t)khso&5P{N)6|A5X`y}@Eq2dxo7s{cwwa3h|5jrkDH!8bL;oM4!UJbtDw{4 zSO@zdp4v_Gvde8a|AwznzTOSzlR!JzM8I>}aPFIhKfzU?-CPhdFl5*?%bwHp07ixa z&aw%5z+-hMx15n39TRe{b}f1fOuqrFm4^j0uh>=isL#QXQU4#J{ZG;AqJ2-avS`<$ zEo9n+-X3H`qU=4&UZ=Uv2Fh%#EZ6DMU&TJPmpd0n#f;I6{+Rt`-1vF4meP#GoaGNd z@@4ku$aC!BW@LWY@x%zjpXCS74h;`q5W?gIUsMZfaD_zNw&+by`!g4->4lLebBSn&5nu&esY zpL6b2Lj6(#b(fORq;N75izIH=q`qh(B5D1K6j63Z!-^CdRLV)cd&M^ftPW@>5s5*J zk2?~+(YXieAuH#_RIua_)kmZqgPM|-V#&l#OZvMgC8;Z#QUZ}ScyKrM3aWcBr4;Bu zLQ~Y;p;%jeM(PX=MB|xwS17zo(KbaNRKP4aeIJCBQ4#E20C&wxr=KcfI`l8MjAm~9c{eh%@!|~3WqB|F9Y;~=EdeHC634( z;#djTG%sbVC?XZM1!RHMH}}K)zYcf8hfuc^>`H8;WF2JXC8Qj-Sq@Bc- zfiCE2eS~urlTFHs?oc#2l-9&DCS<*T;|9O%X%a?cJ;5%sK6rOVQ3v@xh1G6y_{KvP z6FIG|58jR)cirITXrwC|A+;7yRTNTV;_b;yLL+2}NeN3tkbz^-$!qp>%8cs`dpeDu zO8W2uyJ>U##uaY28O5C9U_2DV$L?TQ)yShoLB82wbB&Y7euoDY61Mm8Zpp7~K_wB! zMi>buuwRm=Y{5`Gy)&o`AZT)gMln83r?GZ~~GMEU(l{8RTB|mq@?V*&GQI+;2l7Zh@&XJC2Iw6*9oZSIZxC1`4mRuWpl0_Pxnp-^}s{J*ca}fAtJto!^VQ<8#aK z)eG<=)N$baKDhud^f4FiQGj=$PJoa167tWeT<1B!xwsqtJMaoXKkkT^f%D(ehfr6- z_Hn?I_N4*Vo4{&}z<#$bvbC|JkeusS8!oPZA{8n|NsrrPE4$M{H0Uh{qD?wz`a(Sd$L-EAdeJ)_63mCez72?bdKI zz9y88H|}0hC&fdFXrGeSHY;ix$7@^Nibi+c+RAcCYSq+CTH|kvU(uV#w1Z_@31`%( zHYof^D6OjUry2C3L~t+MjYD#$lAaOH7W)Ta%FlUO*{#H+7;oF^Lg_$acXF4a)=8PD zPrRMB)%As9X{By$>+%`jpEaKGKTG3ty|*s^OsuWTX9f-P*5!qKuI=)5`8qlR8}8`s dwUFP3CX)H@Ap3r>=ZBB~P&~S;%^y(){s*#i!ngnc literal 0 HcmV?d00001 diff --git a/Old Matlab Interface/.svn/pristine/7f/7f1789992aed7f13d9a17497c169cbbc3912b5c1.svn-base b/Old Matlab Interface/.svn/pristine/7f/7f1789992aed7f13d9a17497c169cbbc3912b5c1.svn-base new file mode 100644 index 00000000..ae1b91a9 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/7f/7f1789992aed7f13d9a17497c169cbbc3912b5c1.svn-base @@ -0,0 +1,21 @@ + global scope_window_time + global gui_delay + + update_enable = 1; + + delay_sec = get(gui_delay, 'Max') - get(gui_delay, 'Value'); + delay_sample = delay_sec*(samplestoshow/scope_window_time); + + if length(buffer)>samplestoshow + if (samplestoshow>500) + temp_waveform = buffer((length(buffer) - samplestoshow - delay_sample):samplestoshow/500: (length(buffer) - delay_sample)); + else + temp_waveform = buffer((length(buffer) - samplestoshow - delay_sample): (length(buffer) - delay_sample)); + end + cool_waveform = undofrontend(temp_waveform, channel); + taxis = linspace(-scope_window_time-delay_sec,-delay_sec,length(cool_waveform)); + return + end + + taxis = []; + cool_waveform = []; diff --git a/Old Matlab Interface/.svn/pristine/81/8155cab5fb6d2b6bf6bacf3ed8168a4020ffdd34.svn-base b/Old Matlab Interface/.svn/pristine/81/8155cab5fb6d2b6bf6bacf3ed8168a4020ffdd34.svn-base new file mode 100644 index 00000000..f98c5112 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/81/8155cab5fb6d2b6bf6bacf3ed8168a4020ffdd34.svn-base @@ -0,0 +1,7 @@ +function [err] = verr(vex, r) + +if r<50 + error('R IS TOO LOW!!!') +end +r = (1/r + 1/250)^-1; +err = ((vex + 1.5)^4 / (80 * r)) \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/81/8161bdf39d77246e52a863a09a61cb13dd66d475.svn-base b/Old Matlab Interface/.svn/pristine/81/8161bdf39d77246e52a863a09a61cb13dd66d475.svn-base new file mode 100644 index 00000000..9f1d5321 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/81/8161bdf39d77246e52a863a09a61cb13dd66d475.svn-base @@ -0,0 +1,17 @@ +% hAxes = figure() +% for n=1:1000 +% tic +% %plot(sin(a(n:n+1000))) +% plot(transfer_contents(n:n+100)) +% drawnow +% toc +% end + +hold on +tic +for n=1:10:100000 + plot((n:n+100),(n:n+100).^2); + drawnow + pause(0.01) +end +toc \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/83/83fdb95bddd831f110af1c74760c826cebb32320.svn-base b/Old Matlab Interface/.svn/pristine/83/83fdb95bddd831f110af1c74760c826cebb32320.svn-base new file mode 100644 index 00000000..db99e100 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/83/83fdb95bddd831f110af1c74760c826cebb32320.svn-base @@ -0,0 +1,54 @@ +function [] = tiny_send_waveform(waveform, amplitude, frequency); + +offset = 375; +waveform = tiny_wave_conv(waveform, amplitude); +waveform = uint8(waveform); +waveform; + +wave_length = length(waveform); + +f_invalid = 1; + +valid_clock_div = [1,2,4,8,64,256,1024]; +f0=24e6; + +if(frequency*wave_length)>1e6 + error('Frequency is too high') +end + +for clk_setting = 1:length(valid_clock_div) + f_test = f0 / valid_clock_div(clk_setting); + if (f_test/frequency)<65535 + f_invalid = 0; + break + end +end + +if (f_invalid) + error('Frequency is too low!') +end + +tccper = round(f_test / frequency / wave_length); +tccper = uint16(tccper); + +clk_setting = uint16(clk_setting); +clk_setting; + +%stairs(uint8(waveform)); + +wavestring = []; +for n=1:wave_length + wavestring = [wavestring [sprintf('%3d, ', waveform(n)) ' ']]; +end + +mex_usb_send_control('40', 'a1', dec2hex(tccper), dec2hex(clk_setting + 16*offset), dec2hex(min(375,wave_length)), uint8(waveform(1:min(375,wave_length)))); + +if(wave_length>375) + warning('\nWave Length > 375') + mex_usb_send_control('40', 'a1', dec2hex(tccper), dec2hex(clk_setting + 16*(offset+750) + 32768), dec2hex(wave_length-375), uint8(waveform(376:end))); +end + + +% driverLocation = 'c:\libusbk\examples\open-device\debug\win32'; +% command = [driverLocation '\open-device "03eb" "a000" "' command '" "' num2str(tccper) '" "' num2str(clk_setting) '" "' num2str(wave_length) '" "' wavestring '"'] +% system(command); \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/84/84effe1a1f62eb33ba16625a6129c21f32c80689.svn-base b/Old Matlab Interface/.svn/pristine/84/84effe1a1f62eb33ba16625a6129c21f32c80689.svn-base new file mode 100644 index 00000000..252ebda4 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/84/84effe1a1f62eb33ba16625a6129c21f32c80689.svn-base @@ -0,0 +1,69 @@ +#region Copyright(c) Travis Robinson +// Copyright (c) 2012 Travis Robinson +// All rights reserved. +// +// AssemblyInfo.cs +// +// Created: 03.05.2012 +// Last Updated: 03.05.2012 +// +// 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. +// +// 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 TRAVIS LEE ROBINSON +// 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. +#endregion + + +using System.Reflection; +using System.Runtime.InteropServices; + + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. + +[assembly: AssemblyTitle("Hot.Plug.Detect")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("Hot.Plug.Detect")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2012")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. + +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM + +[assembly: Guid("f58e935c-8222-42fa-9ccb-2bec7a9eae8d")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] + +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/85/854e53ad0c1c900867bb3e38b74b8aaf39b05517.svn-base b/Old Matlab Interface/.svn/pristine/85/854e53ad0c1c900867bb3e38b74b8aaf39b05517.svn-base new file mode 100644 index 00000000..25fbf807 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/85/854e53ad0c1c900867bb3e38b74b8aaf39b05517.svn-base @@ -0,0 +1,99 @@ +program enumerate; + +{$APPTYPE CONSOLE} +uses + SysUtils, + libusbK in '..\libusbK.pas'; + +procedure EnumerateAttachedDevices; +var + deviceCount : Cardinal; + lDeviceList : KLST_HANDLE; + lDeviceInfo : KLST_DEVINFO_HANDLE; + i : Integer; +begin + deviceCount := 0; + lDeviceList := Nil; + lDeviceInfo := Nil; + // Get the device list + if (not LstK_Init(lDeviceList, 0)) then + begin + WriteLn('Error in LstK_Init!'); + Exit; + end; + try // make sure list is freed under all circumstances + LstK_Count(lDeviceList, deviceCount); + if (deviceCount = 0) then + begin + WriteLn('No devices found!'); + Exit; // lDeviceList is freed in finally + end; + i := -1; + while LstK_MoveNext(lDeviceList, lDeviceInfo) do + begin + Inc(i); + if Assigned(lDeviceInfo) then + begin + WriteLn('Device ',i,' ---------------------------------'); + WriteLn('VID: ',lDeviceInfo.Common.Vid); + WriteLn('PID: ',lDeviceInfo.Common.Pid); + WriteLn('MI: ',lDeviceInfo.Common.MI); + WriteLn('InstanceID: ',lDeviceInfo.Common.InstanceID); + WriteLn('DriverID: ',lDeviceInfo.DriverID); + WriteLn('DeviceInterfaceGUID: ',lDeviceInfo.DeviceInterfaceGUID); + WriteLn('InstanceID: ',lDeviceInfo.InstanceID); + WriteLn('ClassGUID: ',lDeviceInfo.ClassGUID); + WriteLn('Mfg: ',lDeviceInfo.Mfg); + WriteLn('DeviceDesc: ',lDeviceInfo.DeviceDesc); + WriteLn('Service: ',lDeviceInfo.Service); + WriteLn('SymbolicLink: ',lDeviceInfo.SymbolicLink); + WriteLn('DevicePath: ',lDeviceInfo.DevicePath); + WriteLn('LUsb0FilterIndex: ',lDeviceInfo.LUsb0FilterIndex); + if lDeviceInfo.Connected then + WriteLn('Connected: True') + else + WriteLn('Connected: False'); + WriteLn('SyncFlags: '+Format('%x',[lDeviceInfo.SyncFlags])); + end; + end; + finally + if Assigned(lDeviceList) then + LstK_Free(lDeviceList); + end; +end; + + +begin + WriteLn('libusbK Device enumeration demo'); + if not libusbK.DllAvailable then + begin + WriteLn('Error: '+libusbK.LIBUSBK_DLL+' not available!'); + Halt(1); + end; + EnumerateAttachedDevices; + WriteLn('libusbK Device enumeration done'); + +(* Example output +libusbK Device enumeration demo +Device 0 --------------------------------- +VID: 1204 +PID: 34323 +MI: -1 +InstanceID: 6&564E695&0&1 +DriverID: 0 +DeviceInterfaceGUID: {53373f62-b5e4-d526-b292-f86533b3e7df} +InstanceID: USB\Vid_04b4&Pid_8613\6&564e695&0&1 +ClassGUID: {ECFB0CFD-74C4-4F52-BBF7-343461CD72AC} +Mfg: Cypress Semiconductor Corp. +DeviceDesc: Cypress Generic USB Device (LibUSB) +Service: libusbK +SymbolicLink: \\?\USB#Vid_04b4&Pid_8613#6&564e695&0&1#{53373f62-b5e4-d526-b292-f86533b3e7df} +DevicePath: \\?\USB#Vid_04b4&Pid_8613#6&564e695&0&1#{53373f62-b5e4-d526-b292-f86533b3e7df} +LUsb0FilterIndex: -1 +Connected: True +SyncFlags: 0 +libusbK Device enumeration done +*) + + +end. diff --git a/Old Matlab Interface/.svn/pristine/86/86eb39f23878c96ac9ca0a3c0171051d4449cbd5.svn-base b/Old Matlab Interface/.svn/pristine/86/86eb39f23878c96ac9ca0a3c0171051d4449cbd5.svn-base new file mode 100644 index 00000000..9705f823 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/86/86eb39f23878c96ac9ca0a3c0171051d4449cbd5.svn-base @@ -0,0 +1,5 @@ +command = '3'; + +driverLocation = 'c:\libusbk\examples\open-device\debug\win32'; +command = [driverLocation '\open-device "03eb" "a000" "' command '" "NULL" "NULL" "NULL" "NULL"'] +system(command); \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/87/8772b8f072c56c428c182689f088a4190f73110d.svn-base b/Old Matlab Interface/.svn/pristine/87/8772b8f072c56c428c182689f088a4190f73110d.svn-base new file mode 100644 index 00000000..c361e69d --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/87/8772b8f072c56c428c182689f088a4190f73110d.svn-base @@ -0,0 +1,49 @@ +#region Copyright(c) Travis Robinson +// Copyright (c) 2012 Travis Robinson +// All rights reserved. +// +// Program.cs +// +// Created: 03.02.2012 +// Last Updated: 03.03.2012 +// +// 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. +// +// 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 TRAVIS LEE ROBINSON +// 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. +#endregion + + +using System; +using System.Windows.Forms; + + +namespace Handle.Test +{ + internal static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + private static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new fHandleTest()); + } + } +} \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/87/87c12e93d8d3b7b0509c2b191a294c488a14da87.svn-base b/Old Matlab Interface/.svn/pristine/87/87c12e93d8d3b7b0509c2b191a294c488a14da87.svn-base new file mode 100644 index 00000000..18ba5118 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/87/87c12e93d8d3b7b0509c2b191a294c488a14da87.svn-base @@ -0,0 +1,14 @@ +function [wave] = tiny_wave_conv_aux(wave, amplitude); + +if length(wave)>128 + wave=imresize(wave,128/length(wave)); + warning('Vector length is greater than max_length. It has been scaled down.') +end + +if (amplitude>255 | amplitude<0 | amplitude ~= round(amplitude)) + error('Amplitude must be an integer between 0 and 255 for an 8 bit waveform!') +end + +wave = wave - min(wave); +wave = wave * amplitude / max(wave); +wave = round(wave); \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/87/87e4a5b01caf2064c8cfbba9838e98683da95ed3.svn-base b/Old Matlab Interface/.svn/pristine/87/87e4a5b01caf2064c8cfbba9838e98683da95ed3.svn-base new file mode 100644 index 00000000..65b7fa05 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/87/87e4a5b01caf2064c8cfbba9838e98683da95ed3.svn-base @@ -0,0 +1,7 @@ +function [] = signal_trip(toggle) + +if toggle ~= 0 && toggle~= 1 && toggle~=2 && toggle~=3 + error('INVALID SIGNAL_TRIP INPUT') +end + +mex_usb_send_control('40', 'a4', dec2hex(toggle), '0', '0', '0'); diff --git a/Old Matlab Interface/.svn/pristine/89/89196469f0ff6239dde91a79ecea47656acdda7f.svn-base b/Old Matlab Interface/.svn/pristine/89/89196469f0ff6239dde91a79ecea47656acdda7f.svn-base new file mode 100644 index 00000000..7c3080c9 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/89/89196469f0ff6239dde91a79ecea47656acdda7f.svn-base @@ -0,0 +1,19 @@ +#include +#include +#include + +void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) +{ + unsigned char n; + char *garen; + + garen = mxArrayToString(prhs[0]); + + mexPrintf("nlhs = %d\n", nlhs); + mexPrintf("nrhs = %d\n", nrhs); + mexPrintf("STRING = %s\n", garen); + + + + return; +} \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/89/891c79cc3525c8953dc38d3952360b1c6a6fc91f.svn-base b/Old Matlab Interface/.svn/pristine/89/891c79cc3525c8953dc38d3952360b1c6a6fc91f.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..f5ccfdfb550ef5608c7faac6769f63905ab5b927 GIT binary patch literal 1079964 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 Q)4!|Jzq`}_*$&qiv10k3PXCXpSC;kcQp{vt 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%0DIcJ6{uJ777^H+ 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�}h%ke*_ql?DzK=Lh*Le0G*Tjoul8J5cmb9r$dv9xT z@c4}x&!lPZY6aJxmin~!vWA{w0Q_NMW_#KDSixzzZC|xzw|BBalcZ=jmmRk5?0sy2 z=lmztCwbVrSd%}L^|XK5yH|lHFhu?N#2m2;ypXG3rL%XgCSNW$u^aQ>?wb0rcdkOS z4W8E9Q;8;sZl0x3*O+UyPZ?PdWNPF=5Jn$*sjdf&UVgiIZU8>G?_Q2H$~;{nIpvyVrK}HvGyG%*Q0DNS-DbS$UYs`b}!+IR&MLCh1L3jV_Lu< zf#9)+ak0ll*x%BMyytrn*1=~@9e^O%(rQ5D{U`nW>6NS{-YRP%>)zAUb&2QVv= z+gv#0m-xgpafcI3i)p_Sy!e7QbP=oEO--eZb^v9l#mYpY3T@ zwA3xz*}gG*qo22RH^=h|yO!`_JZ)e=`S9UrG675dm3ls$Wktm&g}y9+(}h){KG6XI zj)_vsQ6Au_IVJssXGQEMUp8g237e5(LnzH>eEvJcTctQ$)BcFHfWUA^N*{CDHw>(` zy`dAX&6IBglNC^74BAMhuV4)z@%0%uq@cMR97?Cn!{udaOg=1EZRVb{pjT%EH z%}Rx_pgfC$brC7&S4=rsZ%oIo5KIW=Ji@LS^PCW3@4-_MDF@DW6Ai8Dgbd40PQhEX zy~1#;+*%T?w(MbCLn_uty;P20yb%bcmuQ0;mbtbRJl+X}@bQL(zuv-Ife?;IV_-+( z!2@y#hg91e{rU;xa2SH(8Ga7EB8)R5?%9K9pdRfy@~f!FFclWoopID>0VwKqgWrGB za1f9kaa=!2-IaJPecdBnBl}$h`T_HdXxn|ww4Fl{sNCfNk>j%mH}wn+46o|zow@HS z?-0zhlzN-^&}P+YF-Kz{t9tRyF1II3*^T#4UTMi1{tSIqi6PwDG=bm+GzT_>2oP8$ zRssx^(!8{UcAS{vH*$}{lnmp!=|F~nhURtnBAXwsd(DS9eqeDx;u%|}2F8@!ycnmn zCHii5TTZ485f{%gR9ss0_o=2-d_7mn1TGPm#){N%j*H3P} z|MrO-(yUc!$#dus%khh!Sw4r~G5|mQi?pW&jodVD*!#2X z-4|ovqCBT;JoU7w^I5a*^o<+VoO=4{>m49|u35c$!-fs~Ubp_VHN;(1)l$;!edd%4 z(hCQ1r-ZuX$CU^SQy%nUYZCfYRonIvsX*M1@$1c?8|X2VC*y0AS6#Piq_->AWnlcz z{(P*+n*g?{diAD!y8n;3Hvy=s+WyB6qj*6t7@C?XnrRcp;EW}+8iNQ3S}G!-qKE|d zI^@vx0Vdvf*<7#TY2|y3?=`;cm1S0%jW*9^Wu{@h=CmySpU>K7pL@AngnHlq?;SXI z?X&jU^V(~#z0cn3uqU0>MY@q)q?^zMIuhQ9C;S@x{&uvDf9V-56hCJ39aI-O`TEfByEgqw^o%i3_|k2dBUM zxqv?xbdQ^~p`aC(fr~O0bUVC91mZc)O{g@C3vlydH;Rdjoa;R* z5KmcE0h-E1d{X@&ITHQDYvd%JW7$7J^R7wPQG6WF_Jbz4ilNll<}W_>-_f91VA4_2 z`^#Tn#J37GSDFJwH_-Wu?_uEI@g7V%h>zwuH&x^9Co2+H2yTDzxqyEYG({J}fs3QR zzx;7bT??8YYlX}cpO1WDc~7fTH2PQgz^9&J3e}hiy8BJqj_Sogy1PKL%Tx=jdhtm& z5%EQ+X|zsO@t;q+Y}SdOyThc#;OMu!tC8+*(4@h*A1{u#{_3v}@b{TCq~qnU{@A{| zLHE%LMblAxJP5j|m5N6H`ipM>D(o2;8vGc>1$lK8AH7dlgAYLB=0$nvFTQO^_ao3; zd$EwonD4K=&%wK&%P>C0&8wsO+mHAH*5Sjne^PYRsQkr8Gc^mQ1)qw-Ru-2$3^|2%$t zlp86aIeM?6>qt)i72XT(gDJlI6&?B8U;d6EzEseh%gGn6j^cY4es_ar{X;?~^F4p@ zeUJF|f#&sx6Uq|`lcy`Kbs2kk8I*RWw{4zij|GJQMs7Krc?=sT7q3Fn0 z{`$vWBvcKWbKmmN`Qw+7pt~D1``%V`Q60pWjr!a84s_J_eB$$3pPftFswJEBXlrAe}g+e6avc#V7~YPyx;vfDSYk`AHz2-U z#GICYdd$=s*b%C{2ulz#X;@vXtilfQyF$*1GRl^h|G``uWmU%c<7X9DR;QUB z@`pqJ;efOLSjgWWN`DFzAv`2Kqk1EPX68+m?B&XSHs&oo+YFPVa+Ot_o`tuuIeFL# zlMjO2!u0ehdJm?=V`3+*#JvQV zVtfUzcm^IWiiusg)KOFFC|ej4n=!c#ei@U?@H;7=Kbg1-Vq&MRz>QDYO$gMvpVrOZ&$FYQC%SLER*ftb38KX;Q z=7k2EbjL9xV++}-1F=nhC8yxCm zQuvx2!mC!Ph_09&I@6@>lIbDcSe@A(>T5>Y-u}>OrcdVrGYqLV?@ ztrzug**$4?Icvvjl+hz9UvwJsVoFt27QTehEy@klaqU$MG>P0hT$G2{ z-;i5afbXy=V!gddh-I5gb~bYEMR~eOsW&_MrtL+lv#Iw$3F&kiE>YXw(x&Fk#33D( zvfd0OLRnNu*p#UWX*J3yCV3oF6FQ#bTALVP#^c}IM6BuC zMS~N%;XAiEp_BD*bwbx?XLcvfGPBn;+Y`f0>Q1dnXb$PbtOPsYK=k_#ch%`0+>z-C z-Ge(cKcU(Ac=jhKy2%I~+n`{%nNQ7ivV+dwZakfz4$W0)DbOW*6}lEXF<7BnrBhoJ zny^!26q>M8YZTZzC{@>0(+;|-J2u&%W9+KY1}*=(V7Ni|iOy^{=swuF{RSkSSKs_D3VwOpMg`aD>15 z@QSh+&7lJNJwd_oX8{@+CP=Ulrw@V4e&6hZ!Yt92=nwNFe*CB8W=_q*_oll=*^o0o z$6q*x^NR>LwTx&Jqa=IcNM>7=(OsKRaf$2h=is5j?7?`~_ z@#kmc;IlR9GM^&>%$Kw!z%m52WPOZ7XB1{Y+S199!V{6q4W43n4xe)XqlcM2@tBgE zmOVW^gL|*dM5GB0Nslm()#PVPvJO&{Tj*(3A3Y~$W#?dbMYpI+Bv>0egly1E3E;;p zHM2_3c6OYg!+>)VdzpnWknZVv-%%rq=QK*rz7C3Be3y-cTPy z(`cMXoC-G5+wPeKypB21#CFpbpJJQn?xcLDTWMC5nqAP;_w8APU~+Aq5;xO)J5k z`m}86V?<$Qo>t}q(&h?&0{<`Mwyz6aF10csWyGUb|$4mx6%As0yU*YlfF1l)fmF6dNai z^D|)Vpist-Kfwo8Ygv0O@tD0ON6{N~>G4*Fh)u(|Oqdj?Q4a+SjIj6xGFzwb@vYyI z>q+I;{w@0*JyCO>1iTF3>MWv~JpRgQ8o?z`jg#@0M}BC;566PonYfUN{R}vQ3+ou> zd4J1Zy(Z|;U_CR&7&@|8ul+l+TCZ2ej&HeMui)jl(>LLd?OJgPhy51A}6#?0@lumrWd4^_*!{m z27`58bco*Gsd#L2F_$ciw^^M2z=d0pw>5J&%sU!pwgVGoEYyR#P&B>O#!MV*tA)O- z2kKf<39ka93}dD93_1=x;&lo&Q+%U4Eb4vI7Zm2m%NQC5VBOIpLT44pSXQ~1zEy^H zrubNWmanf7xxw(XdBtfK(c5Ym^ZzOGV|{83y)-Q90btl3)(I#G^MbVeDS0%X!TR5= z2-0yb6s8H}BpcD)nHWn}Fg-N~W(`p;qQi6^Jl5UVGTk&9weM}5k2wg1Umo6=F&B~s zYY#`8#Mm-39ijt^RYTUEg%O@mb03UXii6r(78(fbZ)^qOUf8w7+0Fc^Dd}l)iaHg0 z8pEOnqnk`u{e&6X19HBx^P3^I!r6?kO{U5Qutryo$qyy$6O&NPS@11~ll%*J%ka(zH?l!2v*XpIV^650qKAdGULxM*&% z6T?J;K$j1Za?ENwq9a3ZX;W?FtvBFlwiZUl>G%|| zGL%J$@;&@YRMV%x7#H=Au&5g#7PF=nWy?2%RZs2<^uL%0t4nIZTLk?CA5}qoi=3(( z^GBl1lvA_3&I6x<*!IDbt%Gc$a}~b^tgfc03&y zZN_rEOfNCDAiYUhoW<8^!lIt1kJtB9S$l!Nc{RSo#&dV<2#4s$?BV@{7+CR^4HQ-f zB`~WJ%0YT|hG|Ix!CBAN_>f{*PGp;WjzHOYUfE!I_Df7{*%{@bR|vdRw`j+nZN(WS z!-pVNz0b?);t+UztUbs=e#~pKIoM{>r8;ah@^CV!@+6IvY%#c$k@wEyNj6ed zB2D6*E04WL*5C&c89Rh;4YCti!-tsCV*j;LU{#qZFdj-BUw%+xr%g+E>{PN&b|R1z zM1-{xqu!=KDJd9YFG^Oj3}8U(k3C_8uwDdSI9I>Iy6rho6o{A1ZZ2I9kC3(JL2#0)5Z@lhOg_R?+K&Qkmu-xS{GFNs{REmE-Y097j$QC!`lrv#ElJB^5xH=V z1?v(Ro1l(CtvWkT%*T;c@{o%H%(l%ck~gN|z&k*e2O%sq#u3R&^67FhpZz$7ajg(G z18KYm+i7S!keY5A4YmVKmkPvvENWYc>!tdU;$|jd4V1ps#Zr+MX;`VG5bGvkQTHOs z$ypgQrJ|h{Blw0ShQ)8-tRMpJ;5;pRlT+QZMnJJTrH@RE1{} z=cx*<09Mr2RxgD;S+*kI31sJ`VGoulbEjwlBi)}Or$(5U{>%|2y>tXi8)A}sB}soH z8ToY(!sNjoOwkmKlrTs(1zX-y@}$}Nz>5aq+BXan8>ni^VIqEytg)h;s0n}7Ho<1iFXvn!s&Y$FmwIV>n-d`Mv;?agVC8XRy)}H>Ub6@}*Ms z^aZ64lCSwn8!|>LrjS4XgJ)!08P?sSpm6&f;k?V6#%;2g*g^lLCUAh!dWvmLS=ja*kkFFm zs)%MhTW`uM<+lc;oD?mhfcTb^U57$X=fSVcV-2$9ywbIrj#{AKPD$wyg90dSWLfVZ zDeFwcjn>$}i}d6`D|2(-9I_>D(;;;rv(`Cc-3mYdy{FBHr4@cP)RBAGTxLA%E4LsX zbX`A&%cU0!wVAxAXe?XmOjzz?<8DUawx->=j!3nyq+`90!r@xx9{ntD>eOsuq6-mi zv2@_!@O}cd-dW*1Q(4ceeM=Z*=Sdzp5?+O*C}AZT5fqjeq@PSvL_Em@L|ozY0*Pj@ z$P|%Q6byV%t{6dhfTh2Zg}_{uTjkXXHOJB`h&?V}u@$Hpn2G_Lh~IC{n@+u*p43iE z<%A0!7a_(r$xwQ7SoN>5a9m}MFC&HUXl5>S1}4J|F(s3x zdz#~gq##^hgXR+Mw1l8XUy&NKCe^YkN~+a}%v#cfsHO(RS(|P&YbfDxo6D4?#(m`g zRVcn3?C2AkQkgfQh$?tnk zRGEL@lx{uG;#mdaPyTS*#k1~xX3UpK;cpFE`+hwRN(z2Ni0zR3^`sFMzjk}}tyix7 z0ETD;f6u6sZK-d+b@g-Ee_L=u*~wSINR8lsNM3i_?$ah3zh2+1VdF!0@n9bkjtp3_ zWaOkJe~DYT|F6HzSn%58Pvd~T;P0=j4j4QB!n=m-vcEHI#=iJ2p9dZ8f;_3-_^%uzewA^#*GnbWLGW(p(_iX#@)$qGuoJa7# zTogI&zRGEpHw>G1<&?SKeFptX@GGaB_Lt_(@vE-PT3vJ6qqn0mU4sAjsSoxoy>8Eh z;UQH$Zu{kDSWvh_@YBCKbm6X1&V~oS{_7_8>bq^e8KGaPmD>X>%`z<%~^& z4}SFU%1^o*Yo6XV(za~Og>T{jv*07Y?(@n;*|*;I`sa5f9!vNz(J;br+BGuZ*Ni?B zYVKRR;<>l`-FW5N8`l{|oZyG9eCV6A2kp%4JO84CA6|M!B}OU18}Xl`v@casfWYF8Hyx=ghw~Yw*m2FMjlEMc&qb8^*1IfA{qBW}kA+^U;^D8-Dpq2U31B zjJE{;;I`14KOYq`VDMMp8k>H87V+3{Ml>=Y@%`%4?tJX|OBS716?{`*)RTrWM)12< zz3O_|_V(Wz|NiQj@net9G>nCUUvpzh(nB>jb$j@p#Dm$N9{d6ABKYP9Hy*uy_>E^i ze&3ApmDfGB6a7W-+s{Ar>4c`=o~xT4^870&FGF_;#3|>4gbBVI{- z^eS}Xvjm?RwKXJS*fTAsPrR+>icdcu4E_}S)*&D5dUyNXSFX7(5lOuUL5~cYDsEO z^ot6?|9ty*A6E=po09U$mI2kz_8AEyC4zsY=<_*&C;j@DT-&?pXT6_)k72wb_@vO~ zg)xl*2fObZT(G9^IZqqLPlCViFQ?}%+5hyu7n9Z=*mv-xpK$oNJJY@Ai#Pj*_P*sn z)A+yayL$fy@YH<4&rEaWkGpDK|4V)jzx?X^*PjbM6ny`;a>LIU`sQ!_r|$mDG4b6? z4CCK|k4pNywQBZX&d+LH`sCJzv(7OLa4X`ke|_b{;k{yy?vL5>$-?ulK*NOFh@W%j zXJIcLc>amKbMAO;!jHFsPZ9+``JSVDAAf3JWXqZjRY6ns;-v3f!MEq1X2Fm9?wJF( zK6^@%^Re)_FO$~Z4>>0IE5Cd;z2>>SAX3E zBT9l#9(w=8)8E;$>!aeMi%SE)INdNB1;1pOE%5D)4_+P{^x~STxTtZW8<}U$1pLZ{GFD$>VM-I)sDug70_l z#f^_Yk(QH_KI3qC^TX(m{}Fu4=70SB>8v!7w~>B0O&eSPiIpSK>l zfA+OMJC=n$iE;ZJ!QX!S^?wOiZGZ6PrqO4Qbxpbs=fnk{{%Xvn%TK;#)QQjha5QPO z^H1O_!4D1j_@m(`B%Ja{VUG__nVAHheMs=FuLmu-@E>y?2zhtxhBG(6@R?zJAoxGM z{_Nrp{??~g{)$t7ULU(37HvX%GCv{rK9F}sTKrenY<+rf^}ON9IJ7VLWs&b*{PB#< zKg~_vw!(Gc8y_3S48gzl`sN#2Y-`I4`;Q%4-gg%GaJAr#_jmvFzzdaUtXlc%vwuH) zKjiRM!C%^U!QN~02lXA@E98c0b9bYDUKIR$r``Ck_5Zvi|K_>3Ja*E&Q7#z!5Pa_E zCpF#{w0KHt{}-p<+B5?FcQAN5GT@&xuDt2f-!3|q{*S8;&HUoeXW|XC;D;XAm-nB) ztXy}+zLyIYT+sM}VO%5li+fx*e#)I!T|e{F9@jh_wPy#6g9-kX_3^zce|RL(!Qb}s{a-e|cEkCX{drXB)rYSQfN=`Q#FL`&gCpR}@tLji#cdC=^Mo_c zgjOzDGGgH$I>d>+Bd&arH%)6qHEV#gAm$2AlFy#^A>YnPQEvCfmhiT}#-s?OQm0g zV@H;z&RJ7aTT%B18%tTOsHv@72Ai43&y~shRh9FOPsdE5L)G9jg`F}bn zp>sk+}?t&aZ)f~U9k|ssP@yUcuy{iO`Sk{&Fy}~#M9)08YF!DqNwV{Z>QbOEJNke zGDjyZOG;;L)sm&vou>_R*h|VBwOxp@rnYWj7uvmy?B030%m0f(3R29p1!3-_>_T#t z)zuY_<%<>N?`eH)sbv;YrM}UHw5qGi{+o0}tEq$akBUy}kv&++)XpN>O@qMxfkOj$Q4yx5ELZ-T|$DIfTOOHdS|RG6Ha$_QhI5j z4z{j4ulprsD>^4K8$F?OO4L01Qs;Cas)aR{&Iu7=S!eQx zwNnMlS&l9=xwCq4_3|#rv!zuPT_`T%XF!Y6|<@~`8^|-7y>h= z$n%^FN|setEHA+vvZgE3NZ8@8)BX3qNc8xeB;wIgE-f{*FfL|j#k`uBa{wx9V)#5V z=FFHmf&iWf^-!lC#=;lG+2S*zY+ga>vWoKjiUqKAMSPy%Nd!N<(k@+6#{kCvtAtpZ z6_N*7>tfFT2Pwm7n3eK~+R}oG(%Q0x-Zk8&LRsDai(Dp*fvG<$pZ_nIz|%JI@p1pV z=7~@E-VQF7X+V<}vd z1y^UfY{sQY{u7cWee_m(`7SwfG9U#IAkncYaY!^_RP5Ne`1q7DDdQ63)5kH<6hxJd zGBCgKlE7$S62-;H(~*H#M9QQx;fljw8t##JN(Fut@EM?zL{mnkr=@1b$Hk5wl^7Qr zAD^BOJ1#ChGd3bOzy8R=_`$S2<48dvdZ)TTkkj;W7K`!c%qyQ72uv3c^w zQ(aMiza##g)5njD*|KC?&c+FSK6iwy`oTG`vT9!4^4QAi#Dv)5boP6>@cuxqKohp& zGMxgnKi-AQrTxjW6bhlzl_@gtbvXP|D1;j2_+=LlHLCDS0T609@Jpe9x4Qp>Ym}rM zjNb%tK?)jYiz@=ZXNe2a2z#uVL%vNJCa%8tJw;pt@Eap8{+=wZq4?!D7eZlZ&%nkR zx)>M3hoXULtAehPmWv`w;gaFPnoy8Ceb znlQuBqtzMK+8Z85;*OS}#2v}AcLrmh5B7%Q4#iP;!@w(c9H94HgG?v=cnt$NUhxa< zH-H!6jx!>eOY347(wu~QkmVDQ4YhZ91{dqGy|@>X^>fA8SRvt2EEt5HA&dKI(A`n| zaZ#)SULz1X5IM#N32?JY^u@IK;RE_nrt@;)pZQq_h}Wt{Js>N+0gz3$9*}v(Yit)A z7_Vhv(}0yqSGY0DblHqsEZpBL++!AQhlP_WFLFD>8h>=0SpQqAqgSglVv$jF5EMrJ z(-H1nErE$U=FHw1hP|%%>Jsi~gH_DxPsgnFO-u}wh5c8?r z0x`m;c^D_d4#&*_R9yl3%VX^thiR#cjT2=y4!2O^BXmn^S7JwHcogf+iJQCsI%pcE z>)SLNQRU2w8<5T23>X85H<+%WfSUlB&&vUs1m3iwX;zr7aAURUvdM-i`i2|tTR87# z7~~FZ+~Md~f27qBowo%f#v-G&CRlZc`e6ndBUrj;DZD~qZ4!G9#Kq$KHcLEkymZz0 zHVd=N%iCW+eFHoT;M**WlT{Imd%4v+q*>&Iw{M@(aYN8}^_h_fshTCfV!rel3ISe; z@L``}k4YxNyqGR~5PJwk53ff8RkQpXkUiuvK#G;^fXv?$fNYKu+^RX~Qq4h^&Deoo zg?rj`sU}i5Hj$!}CMs~xjwmX2uL(>1F>z00tG(ee_&2_1Z$OVU#)dnVZ;T%3`uPk; zlI!P*jsUO&Di5 zeoV=18R1$zFkqr{BtW3yh(#QknTW-Xm=RG}ibU%CUg&parnn{yG@MO|JH`eNZ0Qa` z+0rd>N766$t9F#kxq!Wvl~1N;t$j_ApgmsbgUd4OAE4g;2W=ucAZ<;VkxU7AX$F zVH2*x>h45Hc!~rjQiHo}q0neXI|!7%n3u`8IR=secUeuqkvSwvCYqw0{9zX7GNu25nw=&;kp3uQ#_Nwz5=WO{14!Kz^?%p0Dc2l z3HTx4a==dj$#e{NHQ;{0YXCn3ycUr8x(U#R_-_OJ0?&5!AjW8Ag4zd?HH3Mi0Q*d>KaOT=0s1tnwFm(C&B8C+^J#z!54 zV%i77u$Rf&$%unQS3z~=Kqn$KPbUZH!aW&x zH{9vCdF6vcdIQb?90XVb$nmNako7SSkepc#$nsSHlA{*m?q*zPy26bcO_xo!{L(jE zc#AHZacbPy8L_9vjkJCeW}F(Az$fMKg^C5;8DaK+O}0^jX8!M90tz&>FtxKR))#snaUw-1L2o_%)f%kI^d;S$ydSL z1V3LsU>FWp({cZV22oc4n~PjvHkt2$sp;B^HQn}B!}I);SHn~7)NMEkX=%w8=ZQ|V z61H~`?x7}rA=;05tOaB~>&*6~My8ZYx|DKBmrbOG!cl4{++NcaZoF>cR{h>aUZYx> z`e<=t>$tU%j^6If=%%%iNxL24t;_l@3NC8h+q5>?of!kn39ZWp6z8cnZCX2^X>Cl) z(E42il74cW><)$hiBzF_DHW>N(x95oEfEch8pK@OYJyiPt~nMCRV%}0IiS84nGX8# zA_H(ZQ3`0`o=G?^zsJ&OLt=UHCQnwjRBI0EL4Iv0g= zA#PrW3^h!C0XPiLEr8U+z62Z#_!VFh;C}!)JfhsLWWetMS;ij$DNHWLt%M0(N|?}P zGxnRl;l@GJWs|cGitdPo3&!B3aQwWI3d;|8DO`+&lc5cxS^eg|EQriCBMi3D54eZo z)>j|X!Tj;^6#zE_H`b^97>1pz7wJ9iSH+ggsCF(X;kSwNYAb5mH6a4%3r$F2&qfVG z#t;;S39|8>AxjiYMH4Etumgt+V2on?&`?*!3WqrYdkr;{+Urqe6`BAzW_t+bDAu6icj{~|U8uo^};Mh1|yz7@U9J5@% zOmvLgcxfn!8}>L7$3O2FydlT#I#lX9D%!Sv-^S<7ry$o;`^L|4yRGgkqrr*I8~B?P<(T819_g+Pt3MFdbT4br{Qy0h;_DwJG~DNfIl}8d4(z^x zo-O0+KMrpBu6Yyv>c<<77^&$nV4H-%Y1{20Au8LbA7Zq4Jz~ZH?%%W1!~JYaeeolv z!FcfI{!ly<$7Q2UKK|W>+v%$&|8Bqj@&y0z%HY@cnTEVO=$V z0|Dy*hXXnR&j54*Le+O&1{e!?1KL7O2SfcrQlcLrdYT#xHztb8kP9vq|5)(*J}89Up!h#M$um?tAe!c-n4+NKy!^Rx^7Up;4OxAc*(U`ssq=qFkNa5h&Y>ZAAUFC4mTb$T{h!0xab>Bokms}k&Jp0%|#AY<^aE7ZMaOg@ra#&iH>|QnCktQ@{ z!FOAQ2ooT8)&O^8)8#|KomJE(RaJ1`WeN9#EdPIu-B-HZM z{tnO1mw9vjJ}bd<5_|z$XE>0dD>61XGRq3C9H^+eg(~$ z!Fg(kQ~uIbk)leeRl+wlG9)^=tNz?pM`+@X`AwOD^=pH*JJcP-`D#f0zKffJu=-V! z_~Hc;&z`4P-8HyFjb!|8#T_l%3T_h@*Dh|w9ctW-U*-E4T(<~rH-54n@>-H0ND%qUvs4y|@r)|iiAFgl$Bv36=tJRAY{4NQu31`# zF$szqo=ZSQnsk{UlP9>MQnoOc($;#S8fGq#Rfa!qv?zU?h;3I&G03QW(0&WM~2>1kGGvE%u zs{nTbZU%fFkRtL0K#J1cfG+{Q2Dl&aO+XG}ZvkTBZM*}>_J0@f7r^%c1Cj3!0NEBF z0+Q$cid#*>=~9z$x@<-gs1$CZ>9QGx7H)=xqn$7=@(qLKKjp}o0+=vEuP6_w&-uDF zaStYeIft8az8{x0*4}smg1ZYMl3uYlyn)o#?PNc1nto)g&ECK&b+1ZZx0}r1{>I*L zI}oJY3`l~@0XGKs*^u$ugfkr36DB&wZ;T$-@T$GxDR_+E>lnIWdaLV;QrFKiJ8a#z zaj*Fl7`$(MMytK?2GF^uAHkcLiG0UmZ(z;iDc-fZ52k~e0GJL=)bC|_ZH(^Y{ayw^ z<<(3vU(NKvEO05N1bjWyrv>_M($9D^1L-o(UGGA)_0LA;xzmyt86hIjn$sfna#qIo zTEFdyIoTnsyyr$eI2i zMI<{&{-_ym%l!!FJdpU~xVo{GpO6YplX*pGVoa@zn=+0ZL;}p1 zJLkx*h5*utLnLzEYGv8pz+U2ZG28V=0vz4zj|ABpUBE30C{nd& zR+sxo(r@4)^!NH!EHzvUM{~vzwoM45%uD>SNXhr&-5E!M5rHZZa(7U<#yJl<&tM)U z3+s-yg686WNiVJLJuQSeUWjMIYy@Q6jC>)_S_PhyAmVmgkY+WnSy77qOzSoWe_jtF**Zf2`cz1{N^X41wEL>_8f0M`@Zs)dVl zv{2(eaB*nGb{HriPr?;#Y=rAk!94&MS1Ce`C*gWnT+hSxFLB|8p6I!u#!ql97u-qc z*7u8Rs^xN7t~)K)PPnKaMH_FxMZp_w9EIyX3CmIVUU7AUi)|5VoCH^?xK6WN=fZWX z;F{r5C4!@!DsU~36e;?mDu90(?71Ge-jBal1xVN6$KP8On2z%Mssc=tVXp=Zih@Hf zr~*``#^7?${y{b zv{Ml{2&u(+2(sXC*1--Q6bhg?ZC+MA8pt7_s{|5Dv{QJ-XMSl}h0-QW&#H>* z1&)QXbbA;m>MGS0{5+Z{D}4~nev@*cGNr~ci1N`F?8j>xf^c3w(|q1;KG&GfUzpEd zn$J7U=MAVIUc1d_Y>trY1@n22`MlSB{=t0a+a#vf4=l&)b@MsL=XtHq^X)#*Kbg-T znBhZEf4ugY&x6e8{pRy1^Z9f0`8@NP$`|wFHlJBuH8GNPh_B6JGive`)v+Yp`%U~O zP;baIp969RcnEM1;9)=tq`Mw z17dB%SOd5MFc@$ZUkC72EcGY%)$&iAXGTxM8KB-`vFcvl@A2G0B{iCTEL-z zn*dJ*+yV&M<9Y@VmWy031I7Wq4mb+%bHH-|4*^aD{0%T2@Dx;i1|Y2qWde=_oB~)3 zcpl*SfLVZe8EE7JZUCGLcm-fS;QfFFfR6#9|GM@7!a|bk6+qQtB#QHiK&9-GY0^blLbu%HS)7aM_YVm(BPUzkIt8ZUmq`=&~7H z|5WioeHWLF3b~1U(!#xH;a;(DP^eA1k1ZTKrHbzx3-_yq3qX6RJohkN;YO5&JK4ew zws5f)F5bd{1I#p1EL@I-Baf*x&|)TCsf9x;n79iq+!_nF&cZcYxXUfvO%`s8g}cYX z-DlypTev4J+}jrJeG4}Xvjt<;EPT6Ned&=K2Fi`>>G(c;OVk>sP<4%iM6ui6fSt4+iH14oBOhK4nkN=;pK-zgbOe4PpAb(elqogM^_i5pHq01>f4pc9nW) z_>6gNeTWEi(xa8;rp9eRvVoT&YG}5_%~$ULCjSx6PNvD!#GIKFLDOz(rl;1o?F}Ot z=y%Oc8X19Ty;RgCI`0{Zh2RVYlPxIzw+GuBUjWPc%(?2f$-6w~8Ju+48}0-}%fMn) zNNY~uDIQ0)`c)Ia6vZf*{a;xZV9!g|`TUv5pBelq=1&oSrXzQRh1d_1mCv8NX{~kH zA#6KodTU~Wwg=;%$qc4Nup)m#&YL$0$Bj3du4a?k8$MxiWD<@D78!GjX4)H`0Im_! zY^uH32xo8jI~<&dH@<{0n2XQATs+g9i$8~On2X15xcX&yniKGDu0}q!oskR5-grF% zxFvPW#PNES^YTXE@HAG<%crS%`FVO?-rILxE}>P(EQHk4^O@iP-|4x%;dG|QiTOhI z%f~r8589PyGP7nk)(=;oNEjBht8GoP_8PHS4=o+Rx7Zwl#s=6MUIawl7OX%(a5T)qQ_I(`)jhF%fokfB<%{z&QHk_RhTq1Bo?|1%I=Uqj#hs<}7!Hrj zWMtkop(prkj#*7TWfkM7tYX+30zssziLx~$G88k+MaH6FKNW?wCz950;AFg&++wth ztDo5FNOms|Zt16{+6=Gyqs$4z>vsinGqm&LmT-i1+nXeG{q8WvB&!jvjz=jKoJk&x zGo^V|B*$}OD=v2rx|%nML=8yU5SZGq!^y>h-Lfoz=2NdF*_c%74&farmIv^MU!QXD z)up|m2MF-`(%ujZN3)24yynKeXt}(^*5YC%OLq(2Ku1#LDT3tFZ+BimnhNXM&R|B< zcGa)AhS&TMQIP5@tkGz9lSIZEc=K_VBWTw~Tj~ZGt5}ktUH=zj)Cs6Hb7&HYh72dV zo0&1UB;TAK5YYT!2y=(Qr%47>dt(9kqJBHYE|}!JpYf!7N8*lgX(PcWT*{u~Z!J3! zrF|23sKF&SzPJmOk-Q2ntZ$>73ReJ^!u*0D{TzA4nnHXw31eaP0*kQRQVq{RI%z#Ukau!@Fz8m3E z)Aak`x=_+UMrFd@0I08r;Y&S8U!1TH!vj%6abN1=edVP;Jo zBN??L)^*aVO6%&F4Q%udk0PgYv0uEn>QGTz>c9yg?xiAsJCLn9XBk!?>SQ|4p??T) z=5(IZf2t%z@udQG<)xQ8N~gef(F!95p6ob$uPL79x&RYTsjV$ti33n72Ta8;MIK&U zaL#)-`T#Gz2G9d_&r7cXuq}A$Isakv`3G~(tmo`{PQTjZn_oSjLQZa(WZg$K-My{7QE&+}ivAH4J&{#&@;Hp@sn`G^zvvAAC_ z@r{`9^~UphK&}K~D&jf~5R+tAGT=3U_W)wxbnO7V8L$QLUckkO<6*$70Urf?2=Fn$ z#{r)J+y%H3kZC;y$m!a1fS8;cSj=+`27Cn&aT%C&yY>OT1<0YEd+(0`z6(gj;6p&{ z!#6$##4c*tqhE^p#pGNjvR?zWN7T_R2CtwWVdcfg;{{TD_@DaeX z0NG9>0G|eo2mAmq5%3#8EFQSJpAf z?cz?7GGfv1HYSa`yMZ4o)|YZ zkh35k)fJFk=fEcmmO9O?B^poYHT72x}LW?g>( z$Z~%O$jrWnTlIOmRG+6y^>2k^|5mtDO;@;ax`m^5uISP&oNO1_f@nJ6&4@*zO49}_ z##lVsO?b5BGlfvURtGB;=bepb#f`~uDIUzUT$&rxfzg+)eERVsH?o%b zOvsw#smnX>`m?WEHkAFVB9yZ}F5TIQ7G{$tmOv zUCvL?vKW+%&j4cq4**glJ_tyfLx7MF#utFha|<9j;S=0y8y;P18y;OYW2fmGE|N>( zSlfzjpXoBUl=B#71h$O^)elz-fPRHjq=x}`>?6!v<$@$Knc!pDO6oifatg>37ru&? zGFhfoafW+$%hOHRliDq@byCY=CCczDQE*+UWiN8^Y0F2wkUzyaad0WlVSOmhnP=e^ z!PQodl>?)%YfOihQ@(O6!H>VU9AnzNyu<4!a@JPdzGp9)CR>&|)<_@D%2~RsLN>(s z9#YZ?AWUF~qDr4pn}=G};}DLkkm*JsATKSi=E{>d6Smt_%6yUw5t+5AbY!rSS7QK~ z^>KhKM-kuz!0~{b#o@(+Y;VI$P&s#*3`n_^0$2^03Rnx64(J5T09*}-cTTP*Kul6x zn*gT)US&R$n?J{`UOLdFUOLdFbQy)CE~9Wvw(&A6xk;xR>=E0>{c?Mh^v+ZK|^3q)4EAR#@?>7Eg z;Bm0;@7G_&Mz*~TcY=>VWSSI+XW{l`Tl4$r^0FA-)}`|Y#2?~XZ&67ureNcxMd!D0 z&n3dVm`AcKwnRuh5`6(!h=OwtAoE@Y7za2PFa>ZP;1s}ez#_m3z*&Iv0ZRe#ZcGH} zVYn6R(WO|AE}L--zX}H(M_e`|!gPhpHaSBIZ0Y(6_ zY-;qROO2j%*<_BSaL=1`>Ohvl?YD5A2IlE)Q=dPo_4y;qymh9G`ZW>A(xT#)!^H;? z12?Ig1Lu40NfN>Wrl?c-Ns)t10@)z7`(j0YgxtWc?q{KvoOtY+;zB@M&d^< zrM&Cqp^A3Q(pJ8-Tbt@Yqt_e5mmnR+jiHjq`_lNmaCMR|2wbR7^7--_pD!@;#~3_& z#C5&UljR}vp`pZ141lo?Ohrl52*{3!ojr2m;wr!~c-{aw84z#XU987T0V@GF0dmD#uKJfnj3!1uNDc>1=5T!7@2iF}fA%dfpi7m+REye9Ui%7z=V)k`#DQ3SEE;YPf zZQ&?yd}p_R1&$Y5S1#WUu*t-G`|A!sMXSoMf0$rr;rC=8|J!>Jp}Gq@$h)}5_zb_y z6FbNa^ozoeT&ja)!fwOod%5 z8g4(TrthG=5oEmdpsfz)xdf+vST=T+9=MqRuN%SS>@1rBS*Ke7*-0J)q#(N$@I1h+ zfUHxj?1^T{=aqQAA8-}mLx7Ed{{p-U@DV`P;dVe4@EC42Q>IJJl-- z>R^SU)yEx zekDHss`n}C#Cr+Ov3B!;#KeOT7J zTXH_R1*sZs6gXS+23e6ky3A{Kc<6PI6}WHaAwkt+liq=lefrEfW`os0nCG zQuBH_fEbyyJjU6hX``G!G@2&Gw47ueO_V5*Y7o>*bwW{PME$Dt-5JL&z-Ddq^OKN} z>dC|5D#aZt+P%Wn;`syI(Z)LbDjetXN(%5-;ckZOecaLV=GTVYhsu^g<=YF-N(%I~ zTm#`!A=rC-M{CaGiTCdB94Uz-JlT)GmIr6S{}+?iJG_pq0DiCe_@8nD5MHD8nTUUs z&uGm&F>OxtruoQ&^a@95*}^Uegn^z-)N-I0yRyr0hS)le?7PXj19exg3i+{G!2|RT zWK+LsrEc4grNgBKMuvK{o-g)!zQ*VIUh{bf>b%|D31YE-3ZGx}vfRg|zUq%D|8!!p*6~J+T z@0ris+i@vmDDHLVxv zHYvt@lo>K*+P%cr|4oiox17+lJf`ViCZ&1aTFcmE$T+T8_d$`ABpL!&DQRy4>=L>`${(EiD^?h`%1PHM;pmz#x8)J$hxEK`!v0bdnG5N`x+(-53|Iun zddEj~U5f!{0{#i`e86h~s{yGc%>uj&umtcSz=eR10#*V(3AhOG8NgD&2&7vMNM5J_ zWV_T54}VHHCAH{MQj0DnwJ4=vvK(}DDXGO+!etKtT{iPG(Zq3Im9ANvnS zdtE*U_?UTK0myQ%1WX281$Z9d8o=3r7XvN;1hJSVSqDgMv>tFd;Ceuo`w~F*3(7UM zs!Nwz)uqcOZ$cIBIg`#Nb2^3N%t+B4FkSc*f`#MazoO$-RYfN}OH+u>FkvP*1%kb} zO3TbpDTv0O3gWToF%%em4Kf|1=jF{1y1}uHI7<1dUxs1jorK%3wI;sBrh%JwD@H23 z{Cc%I*F@Dz#XoKfE!it-=8p}|JdQN+yQK}qf{2Se`aGUV^CBS2@e&~GfWlVUM59aD zM59YB!7JQ;lTO=2;}ows;~36xt0sULiNrbx*3)&1(DpX%aZwTFgfZF}3>O8G|5k~E zFDgY^5kOic)Woq>cH;IudC4%OIScn`R(s*(C90Nd(IshIEwGw}(fhg3EZXh~n+1yl zowp1Fuui2N>l|JI=);)+`?Vx*8A|c2ZRdIAf@NT z9^k2fP;y*n0Dc6>vhM?AOAbcus+OcnwIp3OgPlm>*h3UfE3RSnYa+0s+zB+N|VE0MnZE;oY!$vMPy&)JB_Qciue}rweN*UEpHn!*XX2!# zrilS>H{Mukkjfq zdWPeC*U^cNDH|^xM0%dmxDVdrb6WA*V0Of$%tJ0x&u-n2^P9&O;cvdS2!8{ubJe8G zmg%m?BqGDHgeNs%Xu{rj8)A?{E%pYgU}jP<2END9f8&5Y8)n0}U<6X68Nxv{LpTX% z#SU8$4b7aS3{Xr)N1_eFJ}ovF8e}>5Bz+5egfK#wu3v1}8;`=|0qW()Oc;GQr9h7k z1+Ak^Sv0PmCzR}0??`T{r~SYZXdlTi2NgkP-(}i%bRKGF%&^%lW+md4MZ%;6$C<4C zwPE$2hc$^oNcXs=@%7^jcWxNgpFa+434*CY)0W{49#e%am&K!<)W|druC_9;0rjJ= z9q*LQo**(OUe1#Xbe*C+e6BfoZ!H>UAjXiENZk&Iz`V}5& zutoAP9nkN{M=PKu1vDBcV;}RXFI^5i|DTP0T<{=Y>x=ngkK|PIF%x-CfZAA-26zhm z=K!)#l>%~sq#SS*U88kq5RChO22!LsQPSrkhsd@%BJx zaDC2^z~*LpO2X)6weO>Q3zZ+$|YxisN9^bTv!jjBYB5 zY_Thk`WSNvayQbi?a3UxwPZEc;0~29v#_z%H(nCpiZIw#^64T+uQ$UDDv7A+)(&oU})#B&#EvU z3?%LRy}KvHz3-b$=1KAZIKb+-Y9=zJx)Sd+a9*RjROzM6oW8vJW)L~eV}+`tmC*i( z-b>NZTX}ClEo4@eE~t}NC#;*B@Pm&ZFk$)r0p63U_nXv~#8M-zP>_R4L0MR_q(;m~ z@C^;y)`2MW8Y*W=%vzQd>f>c-tPfVL&Qe_#{BvoOyvq~SC^ z&JXittmxu&=#R6OrKQCo5Bg%h$OvF;Lzi(VDwuga6_ELbRR^i?F{lxxGt;GXX1dgu zR1}WFLE%Ib<8nuvx(ySN&~e=|FTBDOXgA|r4ZQD`X@+5bIc_KTsoVdnnq>uYO!clm zrtMpQv1a{^0A!xdHtUZ%g{nWgRQ=IqlhIh=c7R^tr2e+xk;9bUz{R(E^7`-XHXFDW zV-VvmX*tuu4KQ|Vq1)%AMzXJs-tZzC=~YWkDi9XA`z@4o5AqjEqWkTpG2(VVWuE2; zg-0oF@0~BncvfrFQ{gHU-y71`m3iIz)uukUw_r*zkwgeMBkGj%oEeT z9``sOMwAI|J5JOh1OcG-wc8}4-^2%@RG4hbY>hYu6G2et5FD4nP63XWUJA=mk6ue( z!n`gMO~Cw;d3)gIP{M1c$-KJ(IqiHF@La$>fUKA20m}hj09*+8Iw02<-vC?*_$J^Q zz?T3w0KNiv72vCYte3X{nf(;Bwvyg-Dd|m@O>~1)!F>%ny6_zl{3^QBO_$9WW#Kqg zP+{{d95<0EoOGn-jPL6YM^H(#6({a!Ui1B3cimO81@Rm1oUrCia@y%R-MOA!c0zr{ z_lDjA3l)&OI1QEy4>AOnY|Y(~AGtFkn=+0Of%oBdi4ArDoC{l>eVa2dq(o0s21Gdp zs8D)$EhWsQ(FNCs#=Y>!dnzGfY2(Xa1XJ@q1YTIYOXMM#HEBh@ykaHCZ z8Lh8h^S!~HI4a)yHAi3upg;5m9rK|caC6bC6nChcgI0Z+4D|u-Xv2kHCBiw>HQ){v zb7iXE-i~J~;-O-$OyM2@u1V;g#IM5bflJAOS1cFfSLq&uOQqWlajA59a!7?>{K|!% zA+jMIP+ueAOCF0h5geekY+$#<#I~KkmJRING!N%H$S_XE@iy)xpT5m`opf!l?rhFA zK`mYTB>(T!)nrgFaI>2$GxpM}`Q1UrD7~MvMhi<>b^(5vuu>>vK+EC|M%E-!(zeqq z+1VMJXqFTtv~M;W5tW&rkDwq)0ue7QNT~Dk;y0Ve}~1~?1w0N^~pgMdo_4*@y=zXZG#@GHP80DlC$74Rp(2LWN1QQkrQ4EQ3R ze*t_0@E9Q5CKPM!k>+5J^ z;!jcd+RA06jtcP8Xp|N88aPz&jEi!5g0s51bV)^dtfO?nxyJN1kE(0~&Gea1J?Ccp zr%F6^SWpk`9SC8;k-;~0` zD11NQBii88XzH>mt+c9YUTN84T?efHNFyHxCDZYeOr>!W!bTe@s6kW=lGcX=Sf&{G z^~I+Uv2;;+k@D3sN}Ude{{X{jus?>OE>FX=zG93Hx}6W_csi=8UtgJX2I6Gj1ilvp zoWXkc^oaoDEc%0oVm)+i-u;PIn1g&@4{8Ap% zR$&5+QD&IYW*FZzth^!~rZLu}ALm0)SCmG>Gmd?Lbo*T-=4nfYe? zxjz0Zt2aHC^4mN^#TJ?1XI#n3E+{NX&nTLbn>iKb@qYBwZ?2U`HNKK}`1(<|C*^k@ zX;2>SGVP@6LS;J4OPyw0a@?6EVHuvX+ba#v zknO2V6UVkZUi*PZ!3sG!82Ej7)f=ta&$}<6alV-!pvKiXk}vh?1YIW9O+-LC#?Fdb zh!&Ck{P;m+fLe;S>=cXSQR9mE2b%ugVS<#|B+4kt8KDc#nZLjskK{Q-g-frfE7N%p zd}u*MEsc?Q({?LZxn$nbs!FV3R4?|*TbPQ29{|>IupE)y#r!9}-HWAhWnD?iL%-s&GqUj@^+nC>b)eD|f6CZ2TJhIU7uD@&_P za*;8py1=yLjQu zyo{2`Qwy`CZ?JFr_`$4;@?*bj?^iH6B|jsb{fBV}wWoo|RN>ioeZs?!?5X@i+WSu} z%2s}%e*LI{EB|io{R;|nlpke+Pr7MSr{@-u7e=GcW2P>Bem?36wcnOh_4>9rbQ?Wh zQMNBYIP!w0?t_f~kF_^}kF%=!$Dc{kHZ7&3r7Z;tgi>}|k~D2o7Msb;B$;M1Gt5l7 zU}2gjX&ag*AxjrTjmqMJilCynFQ~7G`@X&UipZ^&^z;6G2svU+8P02T(+qZO?QKif7c?6bF}W!KGW|;5nk!_ zjE{_P;cdnN!fL&Jeciog?BdurCh-`TR|BT)|7UZLSqnCT59QC+Jr9G}L4=vlL;Rk= zmG3OdJ4L#-@Fi$7b~244n#OG8@*L2vmZSrZy39ehiYu5@7H@qUN=kpt~;<}sjx!r5Oz=xMF>mF?bT=#fhc6>KRU^~vf z5U|w?P+lGt=|fa3^NRpKk8sMtf!_f5MGFS`Y>te@4A(6f9_c%1+AL0cDsBYKej3B$ zj2A2;d9M;0&wI7fyhdr5Z}utj=Dw@kdKH5=4nVp( zi@8KwM`A}Y8_h*K^K3HZF}8odPWfIPUe5(fIbCn*T2A1}bS%{sPZV>}Z8H0FKG3yX z2p>=8byem)bpgg-83$0tJCUXt0Yb|y29T|%u|FwaMvht8Xn`x$VrR4vYqvcj1T_7C zGJB(ztwGx@>p-s3gT)IyIr?jXD(t7NdqZ|7?Y@1a&9ZD`?v-oZDEPkKP7&Zz#Wl6kg27gctAMt4H7L zUyD%hZ$}*axdE-Ud@q{5f7!JI_qsf9<$l+WA>8Y~6JfT~yZAj3j2o6dpsn!Ut+ekc zp(RhdCSg2|=I>S7yM5Z=3<0O-GOu&ZZ^jd|2QYnuM)Ib97_Jf{`5;{Fbtdh2Uqt+c zo_#6>3wyLF?o*J3iVpy1KMN!NI@jHh*q)2I%mtfv%Xx|I$etg6Nb^crU97)({xEqQ zY~PlS7vZ4Le1n^m^`jbRImTLw=)(wq1b-jHAM2lTW}BLa5`UbuNaqv$o-n`JuIz8N zCH_7Iym%wQc%K4{Jjv_R__p;n57z^qAwBqgmfwhXb=iE|(IDKB6NP9pC0)Jfj2KhX z*z$f}(>fh_+$b9`b{+P#An&%*&bG=mlE$&}wdqM( zNRR2<3mVGz%bL!8ejK;`jSr5GVk3sO#PlO*OZS7$elS)|O5c`|{JGv?+4xth-%Ohm z>^$5cewAsWj9=sT1oIX23&;s=#jG93D~K2IzM=8HStcHC$evn-cvKU$ZNbV|@&GvV z6Ucg=_n`87$meIyk6w@P9rz0S2 zRJtE2on5PN9N}L;TjBjgX@Ba|2J%AN_s{Y~=EyI{IL7BU&pv;l@qelDZTn!^>=+l0 zQ|0|y<2SZQDfV^Td!zCPp#GYpXuUua(BM}x;{IOJ&E`@ z^Avxl_S}Gdv;uAKcfi@t9Pj_XKI-NV#lo4SssCoASGs2ZBg=<2`xL(?XkQ#Y)8^O{ z$feTzlhXfL>0REoEf^VAcz;#e|5Mu1F^%+;S-Abq@&2yy{-N<~o@^Vkb!z66O7EXa z|1YI?%a1)d%5UnGbC+#%)S6>?ZT+)vSUT2!1@Vvz{e+Xwjsu}S$h_+xr*StmYVyD~c|73uQ;jw``#hMjZAXb5sdP?R)M)-FC(^ikp(Q>pIOn!? zOnGyhTB>}O`Lw~gKdS4g-C9lW@Cke!MZ#Mw`kS$~AK2zK=m0-~lc??{^h6V{I%uc#cwwK3Pj;c=+SJC)^y{HO!$ zwpY$MZhJjl>CW)!g8hl@Ka0Sh@oZc(Z{dDZ`45_F|B;e1zm z=YocD?EJxY;D))swPOe4j^i&#qr$t8dC~bY%sb+(ang5X7sRjhE|&C6d$KeEzQU__ z@Z?{5=DAMrLH?PhtuNAZ?BQQHUX{0@gfG)}(``c79S6zl*^mWQVZ!B{1J!M&Y1S`1 zN1)-E+|!~ha{tKn%VnUkpVGVGa(B&;sjnBYN_js^cy!^&&8)>4uEI+Ndo&%63!9yE zX17mu*Iiq2+iT9huR%Gu50-MoT4WDKIpPjlwR(bk^r(~O!ddK%?LGb~5lFm$6fZ0H z5AKyTE|)ST4%#!sW`vn0JzjGU*@AG52N{fTJ~#b5=A^$8d$g&}K) z+Ln+e#x&;oG%bnt=+ z*=afswCOlt6dDo*&1ou`FX(ts2E%ayb1mB==I~gtHJUF_tx)qDAuJY8#8RgHS1{a} zkD>j5%7H1si~*#HhG;OaqPY~}!dm4$N7BpsDVn}bx*cTh&o%QT&FnUl4cm{IMs}N< zkNH9u-Ol>tnLD(MWqeFRE*K2S5@+&TAqyvj@^cM)0p@1-E9PxgbL`AwWKI`~ok_G{bQDQvuFxm8C$Ke2wemIuc}V0; zoC1dGOqbjTGtZDIcz30xmlra{XiFx?_Cy@k9?TEgCwR1Af>$`?8-^FVlErKyCz(Ju zYK6>U?I$u%u`MEd@l-L%LvA@O9T+Iq)z#IrF;0O(ZJ2$C)wRj#I&hV&o5JT8JSTPU zEx1-9-BNSjjaQ(9^Y#^3GhzXC5GQPMFN~#aMFx4aAFQEDZY8**4c}ZKbC`F_oxP%E z;fWHfeCmc6hwbYMq{a4CK0an&qh~4yj6ndg(UuuMukr1^xgdGpx2=D$Ffxvkvh0La zdHZ5}_IBzzH6@+R`q5v)mJAtqE z%*E>{@<(~_9_}i@?dQB`NJ+J<4lMJ-_Q?FevW0leFDe~0gwV_u`M3Z za#c-uUqJsl=C(LkQa0Wvv%d~GWviN~MjA7hZ;Jcm4iiM^NR zx?mY(Xx0T4HH)3!EA;p8gS`fZ&$dJdHkjOKbtXDn?3oMJ*#Rz&?cG zd_Ga&%GvIdDob$o49Xn9nD|&T2JzbxX)KZby$06Y0WO)gn|E1{V|^Xq%+FTbQezij z_+m{R;5*GeWG&Xjv=yPOUjVss=iw9SPQ(wRawx+yR90Mf$h|J&T77;SuEjXJ)|X|n zcc3r7Z+xtG=n(9J%wDB+Xr!mF*N3A0^USD1^Kz5Pi$xcX4ELGbxDezg*bk-Ue9lP3 zrXes?kQ~iOx)q+lpsAEgwsZyOW0eLj)>+J7l?lhF%!BQUIkZ9^iJN0^*x&HbF_&mf zrNQ{x~$beEGk${0v3OO=an!A_9}a&qh> z>Q!0~4iAe451~*#@SPc?gVSS6=F-e_X+ml75Jon#d7H0lmsXF|kfcLs>SDf2=cMZp zN*Ul=KFD7e8%GRBeu;Q2ll9NJk8^4AUXP)_Rm6qiPJ_2~jmg0h)>lKmQE z8=8>vJJqE{b>h4wm&oEQ#g;+oR=RYt6j~5&V$4Rrki?;|mDOo3U9v0Pkw&)+nuo~z zbeG2TY&LSq`x!0{N~(S~w7=H6c+}VS9dS&rW@uo$I@87Ts4H8@ah|sG>nax?%Vau| zJZ%c@e$EQxJF~ctz=9iRS{%t^iKJu4v^q>{cy(pvSk~G?on4Lw<10?ljcioD=S)dw z3Ss4Y?v!-71n)vD-FZ{eL1;LawRGoCNe8>>3xBH|N?okrJ7f%6+X%i%})dV?rDzmXfnQTE8`nGPtL!4sSn|KS{CY8b}$r~HMq3Wh+)^AP2p}0r;SDdTKd8|moD4Yg2V21 zjFbN8%rZ2(H0;Q!=#KEHYsQWBE}dL8@Xkig;p)0&3*4t=)SHU?dHp3MkcUdh#Q13K{9j{)2vBwmPTDagy4nb6?7H9-c|uDfJT~lS&Ff zP<)n==knx#r`FlE$fs)$$@`g=j^8Dt!DQ;{^}y9CE;=&OeFW{Fbw>DV_~W>Cynm#x zS1fdV_<6XqlbOVUzX9|YId%R9WrUCPjSAkQ2D+E`4CN1d_z;v8){8mK<(@TgzFKE$^2Hk1YDS8b_G zOEi_q7K(}XA`Zx~Pd1B?G6U&y82k|Ev=4zrDtuOdFR8t zPN7FFgP~lCifNna)ttm#m@W6+%4@2#f5wZZ3Zc06vaJ+udETQud6rymtRc^A64vuU z)-(tXIwpQVdDyYsoGT{=tv%KIfUknRlr9Is$@KmA177X9%RHcTZ2ur|(8t5{Y+%eE z>*zy(+fU6b?tu7XUU*j$gH&Sy}b<7W4aX1rV&AuuSgl^Y0N@#?@YO z)UKb{rap}L=Xsq&FyE8=P}=c+#K~`y&V;5@n`%9|wG?7x-VIJXWBLc67FMp8z}<=i!Ay>x}&n z=L=#V&o;{Pe^SyiHFlYf!zBe}6Xoz+0ybr#elqp#txe6A^6ixJ!|7BugMNciIv>j= zvjymwc0uES9^hd zH^U1(Gxo3@Q!bwe%zofINXCJg`kB=M**dihu;Fe^wson_&m=)ig$~-y7m+VBww50c zc)@MFVFberE3h2g%J@sla|-)lDSJGJlObr^Ws~H_N(&&C&zEP&8)F6ICQb&SlBmo| zz(IMxGCfZ?$^h4nVoL|EspKe7yvvmX2R#2*c}`)=4dqwnw1j0Ds4e%`lpoh3Y58b`7!+KBnbsOHsJEFOW;mv&juu>iTa{k$VGR1hwG;N9s9%q*w9}Jh4R|kb7kMSau-@<92V9+JeDtuM z>+#!2lYQ$Z$XM6sBng)0kR{<&pury9!EphEW8zeCJMO~#yOK)Kc@qI0lzWR-&Cl>T zdKBk5J|D$FH50C&kQVo8oKrcMJ%qd!eNx#1*m%gk(Vd#Ayi}~D7fK3@k!;wO`@33h z>qmw23Y@Es(K8|IjpIAk2V(omFx!&V+hRUBW>OF2`x1|FIiAj}OEA@%i+Q9Vi>YK9 zt~130OexIf{Rf(NyS6cThmXMi(S6vj4B2+}2j!#jXt~w~M?iIw8)Hk{PLY!s@(eHfB%hL?nUT%PQ1! zqgUuZ&^I(bW>h)g*2AnFnWrYK)ei7f1m|~bH*Ck3dE2`C$25-8K8$qWM`7Oxz4D;U zr2P?KDKFS>{siHj-gX=n@?8ky&x-tZ1u&B_#OD~Y2<`Ewh+{v!+Iva{3)>}1z=7=F zs(T^U1J`97A7*T~!9*0)wZgzz>U3Or-KOLDFC?#%*L=SO9JV|me>QCMOCcNUUyO2K zecN@`NJKkiM&_dtrSopCMd3U?O*r~KJ&xkvxCshN0@x5Tcbji-v=wIsxHQ{g^M!DlTJ=``2qzolOrp}`??(Au#osye zdyf2W68K#Hj_r`&^Y|MV+V&p4n&B2`e<<(yg15Oh=`A1(_q5gq?Kp`;m&XRbkm0S- zTrwKmYaUOSy>is{w1_a=FDE+#{h=DdlJ%0e#S#YrrC(yg4K{qD2{+pCQi*HIxXj?1 zEN;2rg8ZCh@Bo-RuV8p<2AdTVKAB-$9_D#mrRkqS818dz_*8~z01(aPqFOgA35yv3 z`^ISu(`pDuU&(ZE*LOPMsVoI8edr7m-bMi9t!5Y(k1#Qk@YxJw>T%OQhp;XSH2H2O zj5mQ?tY}%Hgy9;lMZ+x&BcVjJQ+UTrI0JPY{~kRa(BRTd4VY982}>VfqztWuGo2Fp zHo{}Al2*I?=KZ}XcamZ3Txj$GcA6_wmZK+-A3!Gal7?3!^f7KuDJQQMVMqR6Gvn;w zt*;rICcFtiP?5ZARC|+&qelTtrfABfeO=O02-kNYmG}auE{gj9T!sGIsQvek=)Y*@ zbe)C1tG{$Sv-_e3>>oV;4BFYJ%KffaD1~rL;+^B4zTVA6b4JE4k+9_-Jj7 z|AH{}+Bm24@2?1Rd^a}WbG-i}J>vaMEqBb4%0zB2qzghjDnS(97macST(`3qY_%E*1+sE(b8p9>TKQvE3(e$mJC7-Iu;;) z3C@fmVR$mFV++fW!vsYI+PJYVgSuIpZv$=cTVZs`fkZ9Pl!AGQcv={7p9+Q6qFK)q zcT{*MQ_y^9&tTkx>P!)O8L1R@m)pf}Q=S&)G6vzyOe%`G=}fj4O`P1;sLHUS1fOUR zaMdL^`1wr6L?y%W7MVyHic-%ZSsA$KQy4hw9WpdwRfC1^2Vxb+YiJ}OJ^7N`izEm!hnzD1W zfkTU`gH4^ykG}HeEyF7zvId)rew6DQ9)J$TXl!Vty>|rHyYRq^_k{QK55jxOw#Mnu z7_QA8(BAFMwf2t_M|F*hSzENAjr=fnnT0S6TNAn_K&ARNv;ki1t7!%b1#+X`V#xa6+A_|EjIqvDBD2iZfXL74({sMVPC+ky%|0iBdOFS->#DqBnUg+j6U#us zT;|S|y0>_jzt%78$Y&F<%MI2c5l>-UJMjq&ZJQMqZk3d@&%s*I@bI;+%y?F1;ZSpH z!y<=ro8!YwGn7`S{O4MnSz^ih^BlBK?(aC)Ei$q*i5bzE-zXgClB=D4ll4zJ#r{_+ zN6yHNZXASG3IbE)i|daiNSF07f%QlEvpQ%x@a>7>nAhe1H1XH!Tz#U{8|P$EA?c?t zBF?u<0iW=;`fpe8JfH&QT_*HM6d%m9gWrOnK+>QojxBAwT^`sYq;_RUI_rTgu?- zEKc>%49@f!X``xt7K+1t1oUwQuexUjZxmIekK4WM$tat>cR-fVQk@X0=T03LBOdg^ zVSk_4o=w_Y7VbXTPbw70txGY}TEt+EeFKhuuq`3JQt@(BgRPLS3ax#qss!)a9?Vf3 zHU`)W7`@WDJ`C#$XaL&%(mcy2nx+DyIGwQat5zI(4knsJ0X`t)ESUM5uQ)hiF-r0} zRxAkMs*#V8pX(dN9~a zXotdTCby$iOzLTqJ#QJ_vyk!TRMsN~Ye^A03beyOU4|j3&m|S+4BpyV#EaryetRO7H|bfs35$cr6RZLaPire7xQy{*VeKLeJ*PwD52p#NFKZ7W zI4!qrtG4XcCPHYS8IOi8%Eq>xS$l{8PpbnFpQK@JAx!##Um!F zMjPV%MLk>YL;0I$sqUUs&dJFK^v+ja7fj+6;4V_!mSD`5>mBI7b4$TP37jrb1t_Q|y>G&R z6r%Chkk3M2txy@S1%JIU3X{v|TP7*UyquiIu8R*Xnj`aPmnVhH^Rp zSPhhgqbi@u`Rxj4Pjn<=>|tQwX8LJ_r&Hp52glJm4payX{aJ0Za9#`=|9Codr`d%3 zp$~%~IG)x3l7ITCkNfGvmk+HNWuI%!8Eqb1oR}}l+*RSZa5Q%@1T=9fLpa~OP~ugE zaRqyhFee1Zg|?P=ZU~+!z_>x|3hny(5>rNI1~#(BTv7bnxDb?q{mKe<8$INEo{|t%FL7-_Qu3oxy$aWhPxj4rHqVkuCKwJ^$R0?UEl^Gs zJmVHj<80G7uFq}q=O6cTwTMSuit$kVdEO3mu2o!VyA1QH^hTA} zn9pnKbPp=+p(%KCYz*>Q=^at}>y$pgRe4s%*H6L)GJRedoR#5(;-=8!)HW!mJXE8~ z!PJjiIKLg1V(hs2LgnkWty=a8{JjV`w+uIs7GuSY8pqy4*>+OCP0sOd)_5BD1vmG^dy^A3$e`vNlu%d~|PQLItnkpk;n`ab8$sWs4$c~;M@d^&3n<@(*Y3%tz= zz>>*khx4BWK!8ufM~iu{gKhF%h{ODrj(6|Y{Jux?>+W-g;dlI9xGUpYzZH1y3#`7@ z7KCxHLaR^Ni*zCkU!)^_y1&UHj6036m8b4oa=?>ZUuC*!j_w6|FIpo zmAq?p)%{UU=I`0S)e;w+ZpwbF2>5F8z3f_YnmD_GJCA9(R+^f}KHx4QzcRRez|}Ec z*fLY{u^+g`;6B(|b_(tQa7`%pD0At&$v6!7Wg<(p)YLqT0N#vr!d99l@8iJ5MHXc& zG&TNV(6plth6as}CQD?B6Ri?&yE@-lbX0k=5(mWqD1u4J3tqWUYD%}e}w_Rj0 zJ>5;9+iB9|B3kP0C4lXcy0J&+M+ANg;Js2WVfZTn-v`;MwWY}WRe%k6fmtKl$?bp* zn>z5*dJSM>Uevd$B;6f=9fm%lwWcKOjeuPbTZX`j($vM90iPf|NJ`Rw8{juM<##P7 z$?u)OznJ(yrA{p-4d4F){uU{#wU#vS_X2)v$-bX@@vE_}z8g6IQ(@1ar`L=Bv_D1_ zWRoDu9H>LHPcSf5!x0$ngM_X#6Yqla65Ssdn7{kd^*`={gx23(D_`6P2|Sh&V|Lj~ z;2ua|I17r}Gs1Za>q>J9H+ia77&jE$Puh1W??KtIpWyz4e9V5rhA<)q^FW1X*E9C* z9d~c|*U*0OKfXipM>P9>DeJlxm4Z8zNyf+)SLN*nxxIcdx}%IUNAFN*;4a3iI^Gdy z?^lS!iIYKV-y?pW6Bh=zV?#Z772UyCd;NZ13Fm&Bviz{qhUWi2?6+NcbM3}A@}#_& zhhX#R>v9stc@+MHCh2_=j`~&;e7(-nGH@G!NYQSvw)~jt;}6=YjTo)-4){ z!*JY+r;?qvUxjh;T(s5d>p|x>lootGkh|HF zGRzYxzPG|RDmVCJ8Qu`aoosY?7|t1tLjg0MrTTY|bdMZy5ok}$V}+hed;xjHIO0$Q zzP3t$$RY2F?H(-H+b~ZHUTEy7*}lIdZPM><{<$i3<09zF_X3Z5eX~fUt>iSianu7d zYf9Luh<5?z4~r3ctI)cDo`i$L+|;vgWN2_`d{pt!mvHbc;{&jDAy4Q_IB?1D$oTM> z$Mq-s7W?CU$SY6b;>N0zBP^A4;FKFOeO6?g$boIPT_oz_v(EkkU#ly?5gqhB@WU-Bp!){^K*fARlJWwcE}ul8;>9 zwc~xGVQc|H zJDkmvwq4pw!p2$Z)!N80zbo~fdd;%mrfVxE+jNkAbp@Skn|YeLG}Mdwz9Yx;uvX_jNlugHZ%Kmo@qCS3PWSv1KK*I{I!t3 zS;xs3!e!a09UF+lS}wF>G%e565Ak!o{t(`ci?!S&{Ts%?o1&;wdLi=UO>FuJ{i!2Y zUB6+KbL=*~f!xfQ;Z~I!&zn5&K=(C6BeFMRxXL@wKj?(35$+io^6?A3!R|q|`67Ld zcVMWuh#?()knMu~>laS`mwLWp)g&D&_9g4j;I*N;oca!j_MkXH51Zv{|C#Jdp!7b+ zJ$MN2b$*5Xy7xK^+j||3x4hT+wNoa0ujB8P9LESQ3?r`G=UAIAme<+^@wc@*cWgo1 z;pk$LEhx^Ee0Vn1)kdFdMK}gYri1k$bfN+pDv-iUBOgpQPYRf|0rZ~&8meo^6al}v zd83!&-tGMcoHvvT;!?_$bBM6xT@X$GnH(8)0l`W-V9gJ&E`%rFYMf&{%e0+`Pwy0(v!oN!M%{8S3us>BbWalHSw6 zEv*XQ+jIVBJNXlE{zv_XOy|eM+S*fA*2bH^zl(Mr9v{seklUBfM_Qz{w)OmN{R0Ga z=FB<>oBO9y+0!1vtV!h@w_F?K`L4im55(Di@ zeh?8K?pvJ$ajeJOAW9Wliv@Q`_720XFW!T>;TuZAt3zRP?j6vZd!-;;)8 z6FoSz4mRtkVBN&EiCIgjB#?L3Bl>#9@lKh!4rH09u1CAi3ho2#{Q&dljvdWCP`6pz z-#h>Ci@c*pdG^x0r>}c#ZCzai`8ANWy(92{cd(BoAha@4&!3^s+TOn1<9k=<39P_h zW#nP}z9>vH(#yxvG~rliX-=%UXFbyq#JY-6@F7h&7E4qafrg}fzWvi1 zJ|Dz-jzUQjj>QsH`qDU3@w@*HV!d5sktQ4qXHZTKfBEcZgu;-6fqY04j)fJa6YD3> z)O|fj>&GS%dTVJcyzhiqX~kdsk^3$TVliEQNE1$LAt05JbBV;~+PnYt<{;K5*p%=g zO*j_(csps$d7_REIZ2AopEMR}!m$zJ9@dL9E|u zEYgHyadHgOy6eun9tdK+o6Qy<(u8Ai91PNWD09{ef>^)QSfmNZ!XV#v%=31)UPBF~%Ck|I3s%`1*~;B8?HuKL8;x zfGj{aVz~`x#yt%Xw%mZG9uU@f07(E+3rG-ayYdNW1^{6wfJ^{V7m9T|Ah6YOXx0JH2c$g&c?^(j2=Z4zC{pIf@Tq~IcZDFU0ofOVGy&2Kh|~_g z;WbcW8OYkPzQbbzH#JZhIRl{x{=PQ$(2tDV-H~=VFqM%i5ZIA)nT%v)u@jv6S%&hO z`npCTgreS^v`zw~GJ-BGX?@__XLn9ci;}I3)FLeuT|OuIzb2IPNs?Ca0K7WjxW{~$ zx|`O?0Gk|GHb#I#p74%Y~N#5o-efvroKtirzsIDE(^A0nKcmQV|t%E%6- z{N$r6F(r_T+v?5~8a5Tnrq(Y-K|!^CDfU<*;pxuitAx)w{LjxrpZUY}HpjSw*I1+p z*Wg)zR7S4h|MIlxp#*fMPmp6&nofpR{35@%!)u|A4e{A}L57J~@`Zl2FWxH7U5!nT~x^?&_Q zIiEX;^Z61Bf|F79$en9GH<>eY233Art=X{^@0uIgssnv1pG=+Fbi#3nCctG|E zjhRiL$L-VD8r$JR7|ZP!991eKU*-S!YuNI(*G zaoh975{qLOKTBV?qQU0I^M0wZNMoeB+7{J^H24t8ke|y#5Lc?4`6?rKV5s4^{PRC| zU<5#sLM@7`^vcNnpkb=~)cK`oQ_gk1RIdi)d7vd{Glc91X-v894)Fol`*aB6a_0C@8R5E!pI!fV`iSM?d5>x=(iqMsEf6yK z&p<8;L0ry_psI}6LAK|8e|7TQrm;w4`1FMMFo9Q0f_!Qcr`GQj}oYw-z&z;Ko zS(7+716vu{kN-*g@z-Aav&ngm3e61;=VqVt-O9On66Y3))q($6i}mkl`qpI5F`+pR zoUJr)F9jGspHa>&lQ_qLt&|K$An=iC9If<g_}XZ`1zft)#|5Ji3$EzV8}U~Ry!b- zkw@@9TjraVMz5KiR#IsG?4;H1r&Xg%hju@$Re;=t7~~vIYm4w^lFA_bz_NWX@LzO)WTEep&z550!HkoWm<& zjx&{!I{Z)BHlKX`1Cu%Dg{I(e&iS05R?fLeoC^}mj@zFf-toj_&Rs&oHMZ@!1)uW* z9^v3qn8bN2pp}s?AQtod5${Fla0rBId7IEwgTP8-tN*K3Id7fBdAr22E5@(3uX$`T zXYQCxd$xJr?sMLxoVSBB^M-R^Kpw|8Ih*$LY^Cvp#;xTmK~oty8UM31U))+4>3t`eFj@xSG~)Bkmoa^5+K^VJfIy^$m2 z2QL5NyC-ul3eC5WXFG~s?Q_0eIbSWDLFl~=kbU?j=kRE=3y{i4BlvKQxai1h`Z!X4~i**}X zQZ4alva_Sv=sRp)9gQ|y$!5G}4n?F8a^sec zSX+Clz13$C%6n^DCY??tl8WtcZr!?uhPWS>4dMr2vGi$WaXC#S!i0^`reXh zZ%N=O11WcOeLU9ET92}BSicVc*Vo6<+BenJw{G54R~M^mY(?B+uKSR&aA+Ivhv(f; zFj^Ac22VU@^l6o`$3&R~LbOS+AgY_1k_Dh3Y5?=2b_6h+f&=oSIxs|yj~q<)rtwzO zs8@s;!|u8wHDddzlO*B&PWTY;PSB8>q9SRQHpFN$tb^}hJ9LtGXZNtfR0%8w1wo>R z^14-6MUK9+)>gb(fPJ5ao`Z)B($?_TgX4U7V6x|0@2eS=qoUdBFA%E%A* z^^hKlXz&wVEDRNyF+xU1d%6er6i4l}6>n)yw|BO*XOrwOvDUh#?QD7Y(KzWx!*)U7 z%TV}XG^Jv3w6A9zuX!CQ_6!Z}@9*=PUC_S1p8bko-kBTb%H)svGG!kfMt;Zk_?e40 zcch}R7C5StR(-4)ME+uU0cmi2m~})8E@onYfyChWfnxs1U{7|WZ@8I441yewmL_OEbxt-mZe-aEPq@)I0H0kd30>Z_bTs2t-&A@F z<_x-%vaMistPP6kZm=_HLTmtB0@>Od8-a>7LZf3)m>xkR<1ZX|@z+3+qVDKBf>cMx zx(Cq-T`4teYVua6aYbgakX*w$xU<%VF*X8Lwp}!~b|yMHTH9l6vUqnExpA_g$=j&t zPvgV!ezA*V-_P~!?FX+T_WiYJb3>D5+|tsVNJKN)Eitfez`w@L4FkI7(q7RUN(;mmPZvz zFk}MoHK8e#mdU4#_l;(Fog{OHyv@O2$X0 zk(Npbg4RN?5%l-qsQ@QDC;)BkO^Ge3bT)&{3vXq&q$L$o+ZZG|ilRkT(xG((>0nEm+|LCpaqSEs0lt&OenVb{v#~Vv z!z2)cOR^OT=C%*-ZT2yv{y4S1sb2ATYN5B~$ku+?RrIn-eUc4zn`|PqsFdLY-PVqD z8|!TfY=%AiEMA+~#tnY^mG+9EbbntjJ^FNy^d%1W?CT!f>tqSzL{F}7j~#8%MmMfs zr^&+&pTl3$pG@8aLS(7JXl&wq9n2oi3=mW_BPR|^o}}U!_Ul#hhLA7*4eY`~$N7wn z)Sy%{k}*he!^S#q!Nr@_H`Y3z`gNO{Hq@`*v?&Cwt*x)C+pu9nZEeH)CPnR9kiuQi zr!T%Le{+x7mvgu5>X9*wV>s_e{Na8U)Yu(2517oS0Vj#rkGr2{ucpO4B_VDX{*K30 z&;ect;Zudb+M1eO?ky|fwczy{(0q)SJNWR#rnv_EoSi=5x2*NNXOxCvewZ#qaet;GzmYAP@@@)Z8A##zq+&)j8QcgfDtgM$aU`v-UK9U9sT+vTC&zMWX= ztr;8XKG;9H6Vv11{+(uG*}rpiq=&zE4(+~X&q!bK(Ba|Y;ie5c``6(=E<^VhCG*9D z{e6duc*0|Nd~7Xfy-U2y7E>_u@X|fbeh+`s|L&x|`RLG|vD));=htS2Vf)g59TtMM z>}>r5P?Z1BoXZz`J%@U|W6P`8GvHl$$xa+J#N!=1H*Tn_TU)Zg1L9yu2R2 zSc&o@Ux05zSOfqDD-oE8V%9b;Dd5ghDBxzaD{FtzB;fKo5aSqdUBl%VBgr;hsNW90 z5&$Ay5OSL1t!v=_0Ms3>TVKbN5yWE$L0GAh34%7%t+Tv~sRW#lM&Wv~6F-C@yk?{f z=VD7&G8I?P(8c2ArZ*yLYc?auQLvaJz++Yz{~cFn$_ zv0<7C)UHXij{=uy@4^3VIsVs*zkKbQ%whbYsb!7;c;!Z9r=v683eTtFwB5W3!51M| z7a~1_rhj&uFCSgEsdmkw-bN82zZ<}A43?q2{R3d$I$di<``US^dt?yfyLgI;boqA&2rC!W9Y?~*6_*;Z;ll3EKLyx&yWv% z$J3cgJhLsG%0%PdnM!xOPZy2jrCUfg4Qmzgw1;;rgw-OS1eVT)4BVa;;ds1*te|0H zXio5H+6#rOSiaEXDsd&2zK@fS z!qYp;5Nl81AvBxv5}&9Ib`x+8TZHF$DJx#nX~%mq;#L*z%WIYEiGBolsBeMS{+3*3 zTOJJvjxSB#@Zhz|E}u_zi4z48#4;bQrLnGmIV9vWUFmopibsaW@=3IO03fzQdKPWa z>94_7)=54w+%duJ4XOgpV$ri<22$wCL)XVJUE$Ng^&kZe|11V`vX8M@Dj2ui z`em+B2N*8XG`P=np;UM?+Yniwze0pDHI0W2DE>1PZ+-p>9v<-VqJ$whTM6I@0j!N| ziY*EFm9@>94sfCKXVS5LeuWQSE)5Z}o|t3n@K=aJyf_5n!I?BlPbrhwdH@z;_0x=; zJCx@urS%6~nzln~vuWJ~3uzY{qVez?%Vc**cVWubU$7A6Q5X>{JTSvYrxlC!2P`z! z7kzYVG?|i~2lF#2gmnunWRes+6?-_N@yjiZhji9;u+SlQ zVJcfv>o_>z)|KU8B(=r?iL6d^D;KOB63Yh;UxWI$4P5-Bz_4+p@>%8*S=Y+Y=QF7+ zcd?jmldZ`_e6q}J#h>Joo0Mq!mrC&k2JxO|lU?Cb;^C?cYf3sg3wN@MWzm6Ts^;yw z91Len_D*r>#03XtVZ5-F$;L8 zAs+qol7r60^3|Jlkz#%hbVvq zJEuX~5d<1fCI<~Jy;MJ(w`Ws$+ody!H*5-My>^UQ=aOc-T2je8Jn#ms()PhdmyT(t zqC3K)7N;_{ob@iHOyQiUWm-f1*gm!)M8&7S_+AMf&Vj#ZG|IJ4KDM)66NIxFmiIle>mjTlz(UQFb zeffRkW4%yl@W^eGM1UzT9@xd`l}RVD>EiQ7Cn>VRGsxCl60<^Thaam_5%Ru4621fZ zK!9Zl9}&V5E_w>SmuSlp4uAydBRB^!Bk=Ge2(xr7;;{xSBlEE+9Jz2vAqgCon7AC` zVF{iuDgh?~63kZuS%sQckdQBnU7%R5R|QEj%zY;Aaf)Sggrb}Q!n9galvnCa$p6!AXq&mcNPWWjjrieT&fo2iq!!hkWS_7z1H(eoNG?%o56Dg2!;2KsWK@$4C%D#CIjB?TY| zEA?2hGatha3_VGN>Vp-=iXp60NTZgNt&m{6fC4TDSbVb^BodhvkaV*OVN>>2~JKJqbtRWIIWVD=S-(*R+bL-&O70)OzwN%Rl4k%VWY24I_%QRLYm$3lb zHLSoF06qqua8iVacdHjCG;4W2{lI0d=^&CAM@YmEhCuYg>cuS@BgV6RJQ2{A%iw>k zhhvFU5dTzAMlEGYufx<)y|~#TT{a?)VPsEaa|Xyb!xS-n#Z$#(422W*nt_30U0q$h z^e4{M%p}sl#JCkBWVMVWtOfDJgcC*`d$4OONZaPRQEG{cRjnr^`e*#@!;NbM-!+l7 za~3@DvhQ5Fw(no_?*IO`@A$DXm8pq*^MyO>7S&JOcJ2MkPkQla)0fdcg#IthFL>uy z&fDz$>-F<)cT5cG`1bMvu@w7-tzD5dmsAzy>PxL@DKM7Mw%|U_U={p zo$!Nmw(pCQn{yDdITt9r?XWoN`_j7@N z`s|Oc=ziV*UUu%Bf#cu#%s;-0rCoMsFB=}&IF zdH)AC{_OVaS6^56fcFE>yGr0cc;0nSKIh7JJUr*hbq{}O@gq6UyIJ6G?O0IvmZnF} zzUyq{t&#!4tzWB6z24cIOk9&z13cTtwPagTjeDAsUezI}F!Hw5`&+|Si@YRq0 zEc=H$kG$ZvpM5jG_t`go9qj~NwI;Iq$j6?#_>BK)U9so7$A5Cm1^sYHE^x2@7pGTSZ2g>-Xa4?a@790Z4?c8~Q4?ABqrvmu``NGEe9e}Dsy9_E z{vuXla|r+TP4&zA|Mi{fn?HW!r7t|A`4#Bv0>AG$4^Dh@!Nc#m@!bz@yrk*xunM_O z;Lm+y^wN(FziHkl?pgPE>X(oI#q-`F@Ycn5%~^QPmw$Wy=64R?_RGi4^t=ZIe%Gp> z-uKAo-gopLO;mk7N5 zp1*(V^I!T|&2OLk;(^NKx1huDae+^+mtP8e)1SWl=sWH|>(cSh9#{9fOP}{)oMFQ1 zswQ&#@9vKee|50wRp*|*_Q*Z={S6Lq1^&$sKCrNR$*X?9@_jwue$DdJVF9;W;Eiv2 z!?&te<$m*_MDNo10~cVNxkcc+yYIRG_@95Yvit8NUwP5*-*T(xeMsQVt3SN?{2#pS zzMpRU`~L2V-<*&3Bk%(U7gRj_(vQAsP32EMyQJgshp?!e&-@%YdH9O=pLF$qopAe2 zhu{4DbMtVOB=FRp=iUDL=iR&b^`HIRV{f?aQP{E-1pbEB*jU3lsDzdL@zIe%(FKHn+u>z>ZPdh;XIufF~hjotSgTJ>I-kqP{S zAK%>n<^zx4;(h$M#~;0R>uxyI5%{#|F^68lZPj+{qD~_@BIRQ=sRzH!*3TnueWeYQ&aDXooI&-3f%kASN`uK zU+=%*IY%D6|J_f17~|M80>5R&-f!KJJ7dL$C3D_z#jdYFK4&dtK7V-L8$W*22X4;2 zdDq)Nd+P4>6EOJ_c>1wZZ+vIv{$$H34|KibC2P?i4+;DO+i!oCP~zkbIrkALmGi~sivp7#}jzw?_P{@slaz2VANzG8j%Yo5FV zbI9)nzWn4Dy{+#h^Y6a3Klh>JyhRtGelg!&Pjfsdu^fWVUhn>}Dh_otp!2YEbgZ{~ z1ee;!bO$|!0#eURi5~3k?b|bI5}hh@a^;SU_wAXPZtNgbpJpc8KX!ok{j*3INTr8tA&$Kg_Sdd?IVnDh_zjLjf_QjU)dz;a_| zjy-#+xjJ*xnB`!J3=Z~<9ojz&j)Q|e(^Hwjfc1c0MU%IoQ}u1wVp-&j`r?H51z3NvdQ!v?irq879?5!EGmOz`>Ynt zXwIVtXCW87jZy4@7y4PPn+N)4RmY~W&Z18Gx<_Zz<*Y?$%v<;6mn8oA^2EaI(edh+-}ujeA3eJ7D8T!8D4Kno6fe4W z>5X4_-h%sXm_w}h+p7B#&v=G3dvqBoUe@`~bq@&b|9%NuKXJ7KXBGIx&{8jp|FK2I zwGthOED{)wb37b9;aVy9?7~lGj5vNy#9omJFie}3*WhoxSF;#j{%03{k*0vZjo9Ox zPb5wk&|6`Ek`en8+*2&6A?q?99QG~nE?NA~qeqV}$35I4@3_U-<9obD*>hk_!YufD zgm;hcL3q>Rw6a+TSOtoO&(rv8S1`YJ;g9Z2h{O@Ce6W?CU|t*Wy&m69_>SRw6TaK< zeJQ?K4$x0fayWj#UF>%KbsQetGq45T=X}@~eb~c3>_CHY`F z{Jjturn5wHVDfsrPh-l!XL3k?g2K1JB{_tJb7J>1)y-em6o_VV%}&0HmG1>p@|7zc zVZ>jEDfu~3Z@D6Mpv3)B!WNc$A!H^npFWiR={Qnhz~0ne2sR< zQhtRp{Qf7zZ!7aXG^o#7EEOI!zcgiAjxh8vjE{h}k)iQn13ww?g&}y1mg@tt?ty{b zSYX*_5Gel|F9%cY_yC_Dqg+l!+@)R=4?jUL^7s>0-f#g;TrF@=^zVmJX#aHvYdK2X zbAexpQH1>wgJ;Eg2-{EXlsEC=mJ?jj8~K)wITwH@$1VG8GjD1+Uh$7(7{lx%W0LS3 z?;_HpO|8**rQ_hm0elH(hB}0UJ{IxnHGYFnS5af*@Og@1#F4tkle@OBa?;?(^5Iyz z0kH4sQ-e?y6MeamHX)u?;4>VPlnE7HR+mt5WmO3kH%XIF;dn++@_-B6_Ds%yK2Ts~ zlnW(qQ)(6}&+>|erd;LK3Jor#RH(d4bP6T?5`{v6g|rDZZizCX&`r`LRNAQ&30W5< zN`%7aM3tMbb_qUwVh_3`6>M`&sOQp4W<0Tn@k8WouAR}eAH?&_=GhgiB2%I?r1_gt zXGrl=sSJ_#RO&*+O|L3s>SZQHA@V7wBt-c13POheOzJ`8Glgo9)WyttLAHHa8AE3y z302I5HIGV&N-oox$tsOB(^#ZwTeRs|(~rO$jqzt~il%itoh2IiO>2dwJZ5c#ru0+W zpcz?~TA(o>v#~xS-K;FnG#@h=o{`^VqcfAonN7|NU8%ttc}{O^X5y{%_0eE!kfY&T z7xZeLeyRoIz-c-TT%zMZIb{?x9+bgwT)_O#d_Wln+N@TW)uij_(n@rV^+bi%W2;Ha zqD7leQgb1peiO2A&@@8k4Fa2F+n{oDO&chyvIY#kj1AvX`voIo2ZuIA*gRuxfXR`H z^iVmKX9{y&MrG2_lvp=Nyi(H!@+xcAp!u58szLD!O+L~YSg281lk&zPlk}T*BX3u! zQpD{5q>n7AHskcPcEy_BRA$92$CM_;8g~YZVv)}r*8z_ z?aT(praot3ZY*V(*49|loX*skvb5HrV#Pbj0?y=T22*6o%WUkBnchq`$fU8Bpyln4 zO`fK;KGw1?aqHMv9@`q0JWpesEcj_HlQoU}-(@zf)cL!6+1FFS$e(7A@AWQpcznEtXYQGZ-w39HufxX5ObXL{|RO*&#Fj)HcYb zyi*z$EB{&96)WuwX2nw0vt9XyEP&ORTje{W?Xjjgqv^5I&1iY7bmvc*Kb*hj+dazk zf+=Y@sJ7*z@r2M_=+dbzc00`XICqoJMIrpUY_UCos5yzd#>M50w+(C{!q(5qXST-D zO!MNY`R4g-aAq6Kmz3|+M%5<&vo)z^y0b8+7MaXsOHE!g+fkeRO>aeQXl7?aZD?m_ zL2YQ8Tsd!OY)OhI61oz}(;r}QE$2lJ1FfX@YlP{d%iHjjFRbwi1oZS&dPXpqwfcbu*2pH;WSNQtvrmM0QSpD@fpx4b&1EQ;RnF{o+H1T1U{F) zV>{&cJpSe}oAL^L3>e;F4+93afN?M<+q3B77=~S`&Cf!HVF{Lu;;2RI@_54R^rEmu zgu&c6*$Ig&tcI{;z2t4N#6duDOH8=IhEFu%MjKu#aZMSQ8C;XaEf-vnpOXw;&Vnen z6%31onJMGR3}d3mccuI?oI+R@R(hJBQyHeoZ8VpQYTc|PEM@@Ydm6)h!W}*zlj&ew zKb`PYmNtLV*3K|tF^pq8*M|ecXA_TOC^!9cgtrBnd^ZzDM;bH{);f(62FDdG8g5}2 zDJP z^#eQ2l_|^76UYxBlX*$Qs}cHG0gaDx@oEuvCUEI0`%ul(*6M0DT zYdwLp3^@z}Xt1b$IoE?5sW!N=FnKrlt#Go&%F>fRrC?s*4#E_Mbp*e2+l#Rl+lG${ z?_>(zSlTmaTX5-6gxi=@O6XV|S^}H0M?6y*%uQ#q9o`TbC$}}K`KTztC)xvCbqTHo zd}HD$#_|@KNEwP!&j!x97P2yMS)XV7mw%}Weg?5bCMG+EZ?Ny0&;CxV?O`Ub< zJ(Wg3S)u)8JNn7A*2CKxr$ftnVXi%Eo;a#=IYvXdA~G`btPdGjwkLF~MMb9lJodSFmnEHCG(q`Gs zn>nkbTp#!GoG2vMQXe(v+IR+z7_!c>=f+o>^@9?b<%0%9W<1xlx*YHF*Ez;69A1a~ zF*xEWjPnLOELoXN_6=nE);a(@PJ)2bL7_ypS+7+I`aVjikT8n77n1|%#SL(e|@uF#i zsnz%IrunNX!E=bQvYDeeOf*;|m_6xSABHg$y9Yb}&a-^rX%#M{l5JdWX&TjvLk*)- zB?>TW@36S}ii2Aq8LfC@Gkfv8 zm4`i>6`XN@hR#BVBeq=z9um+X(3QFFw_~bckJJ#R%5@+Lid=4x^9cZwO$@U-Wwg3IJZp7u=D&~q3-{xC7K9ow^1 z!D+c|TeW4k=cz&i4}WOra!_GqXU|dtJm)_VpQK^WQBC@gnzm1SZYuC3x~RhKS*gIw zdCgNgdtPeNM)LC@{+ zD$yxx66>kTlr`eHI8pG^b(0In_#v*HOq?m)Hc7my5WjfAuKDJK;Mt_Dx49vBrT`~- za;IX)+&)vrklPX&d0hxf+v1lMK2hjg8m~A|ei2W@>l!3nAz{q6S_hRDzo8Llc)>Zs zUX!kMup&unKxBKHpPu#0!u_|MzkL{Y&kShVJ{;8~V3Ap+=fhb;5O!ARs{%NEZ6ssK z0tQV?PMY^Q0iHLF(l($iEbX)3j{S5QqKLRoRk~+m~z?>%6W=irIJ&I@YbM*OPoatpxKXnP@XxDBBAjdG3_^5$A%RnL54SxIK17m$7(c$5N z{vJ{66xl_*RR8Xg?vW!d0_}ilR%qP~nYwc*f-CA0AX0q#spcL$=CHQEcmClQd9WkE z*x0rr$H?p5Tl^kg zR3>ki4>6UIT7WTf$%kuA^C6BOXu)C)$PZMl{f~hJxwJH!eF}(6e&>7$X*Bf$flR3~ za?4tuKz|&-H=dITTQcbTK*p{?ka@8wjyCfxp@XA?#te>6Sh)|H&G^RI#r1XTH`WH9 znO<1g)VN{&1|jDQD_6@4EBmg9czpeoAGazQrikuc#9z(_djD=U5c6=S=lunA5762H zABw-3FRbhy9TkB7mvsaBd%|n}f?M?jpMk%>fY;Ki3=y+e?j;slhnx;H#>x{qd8Ki5rFlK~O;h1Vu$;R1^m?+(689%}oL* zcnL{>KuBV8!{8VTC>T+!Q=RHO)Tz#Otf(lCb*x&ot+OarMQiI&oB#K__TJ~5dvb0P zZ2R8(zu!Bb&pB(Kwbq{3UVGk~!gM)!9*)qK%49$H#(?&P<`G7G{KEGw@Pij%d3Uwq zqR{xc$8@t0-rq>n-c=4T^6v zfP}B5wmPcALJH2Su)b-e$$4gEOqem=hcCU!;i1WoFBABYz2uwJ3%;RnFRvGT^!J!v z@Igyj%X+~_rE+2~`8M@}Zxr0Su9tjUd%?FS-20>#e2hnGGd`}zFW>0i@Luq7Bh;b2 z;N!NTf?n`3-{$m!j~mwN{rEik;AQYd!B=oR40zDA@hxwkp}buQp0l(T8wftX@{47p z)+o$79m%;TJh0~L-Uq-Jg69D4f4~z@A7sFR2zZ)sz!4vob3c7>7RvcO;K^AnY&h`J zKYUD=PVfXyP<-*icNhqR!4o=B@x=?@IFNq^p4&7Z^}S#Cm=Ldl=e3i1b}#K@%bJ3h zPdxYj3fesIgiaB*xar4A_-EkxLi2G$pI`XSNBH(X)v_LGSMD*L{PLICb--zsbv0f- zOcy`*Zh?ERf~S3ru!&s7bMH;?l&w{K@!ZQm{+_gMY?6+8>hRebT>+k)`@96VL$_3Yjj@Ju+r zXZIF@XYUKUckc_3&j-(%ixgixeQ+4$8m|Jz7#z7YQA{+%l5`*@Vs%U zaxY%~GF=0gp^=T3Pj~L^1)hU1SA6l@WBBU9vsUxPb8k2ZXM^XaUv}>v#pG@9EWJYU zaj&pn`AtIlJpi8HUZwc@1Nh0`?ZjVgSzqGi!*b;39`oaNI16R&)Hfc)71*SPNG4#mfK__;@YRS%x$HD5gUHp9J6@H}!?_wKcVyxZLfBVIo7 z+*<|rehZ$1?p1v8!bkTufv3-J6km7lO$E=b_x0>v>isxF4KJVW+`9!l*$*ndc;RaY z`4sT{Q}e}h?;XTe00K;)&C9q8-|g+-me9(|~%&7XqoU!p5};7__qvpfYSu>PlR(psXDzkG-0&Hs0Y=KtNH8UI?>|GPu;|L)NIzdJO$y+9U6EoB|xbBCr|OaEJM z&%6q~V_vB+D3j+pm_5e!T?kxZVRrpkyj+BQ-RxDyax-D+>Gn)I)9WqE#?kKfEc2E; zI@;~NW!|1ire1Gc&e9g*?_A~$F?7)*<@Bvo0xeY6&>xm zk(pPEk<#;4W)nH@W@g^hK^MB;(99b+MqHaym`%d>%V=CWuNZ!w1JJ+_mQu6o7i}DBe{Fr zo@NS85Bt-2CDBxr`?yPdObL#+hm8&}Kyml6u|gn2cN^KLy2%rNGaKX0a2lzLyEMpz zC+@yCqXl}k@y(=S4?EvXuJpL6%`o=3tIaU>xUCI)eL+5{xbTn z7dyaAndoT~m??ujZv-w=AD^(h(v-xqHQncLd|QDL71L$pLxKV>208~3_6?(XTo{qg(0l- zlxqpOWUioaW~IKunfH)gn?c?pVJ@#K%;%~w{K(y#zZK_&R!|C3VPkz%+P@@dOG3zN zsIFgL$Pu`!%EAAOGOjKWFN^&uU>!LXgQHO_RiaaSUo|$#g z{JPefmip#sQ;XaxOpa6+M_yB7w56$`qNTdAbx~c59pW?>4}1zWt*mPaHDN){YMZ66 ziv=FJSy*Axr+|wEuE4WJ^^4nD)S@1?_Q=%V#l%#r=Yei@az!r5gIwgJ+v-|Y=hv;M zuR-E0YHC@oTw>)))?Hkz^scR?1&8b*m2hY@4%P!IiW9Tta%-{=cCjM@@z_nm?&@M^ zlGHcX=@c;>LtPw95r>1dG`-x-#WB03K3Yc})T4^JyNg<0*Q#8wse8DnISZRw#C@AO z+(j*DXlq>}E>qXh-z*muAuGfBs)p+3W}eR4+SU-2dtiBpsqbNMyn&R&E~mk~bI+TVr&xhpT1D688W&CMOyEPk=L2|1;otry}jfoC3!SK#BAm182~l zli-XKF^9n!Ue9T8CLOvQ2*(x=y^MDvoN>={Djd=Gz?#q1vPAn_ElYHl<5yTMkl;Rl zg%!w4;)eHXS#tWG%)&^J*xl8#q<6hqmRQf>E38V0_MX2&IV0Zp3>G%TNQ`?33ybb# z)EV)298gWo0Y{uQ%Dh^3FnqwaGWXT8M4=n&y;{~ryRMcc&T}vpMTqE_v$2=}M0yX$ zGR!dtWRZDSFk|5mPHA#Zu3|3Ik=T>7ShmW#~gaat7U0@Cl0=1vzk_Vb@mk%0h!}pElVomB+JRL|`C#>&=(a-A$kcDlW9mJD&vj$~-b5by9vLyvcWq#0Z4 z{t!ts3f9vxl9Wh>#_uRe<5Ty?NgAJeI#7~|g+9eORMHH(^?a@*uNmd(xka<=QxVY6 zNXz^=@~Ws98)dLDpS$?5L#iT=x2LCNUO*DrL&cRdxuKMI)}CsR-0gx!ZCd6kV!{07; z1!Wj|Ny|Lj@I$1_xgQsPFsViW9}?C%xc3};kg+Q?SS+bRR~$!}PUirFt(9#-wG|8c!uSW-}4f z^h{7xNbP%4d7CSovBEezS6%u`uiQS-$yRzV+blzc*hs8Sijf2!ZaXQysV$#a>(7gH zPZSyh2u*=QIkc_AA(XkWFc*f)Adh)P*n-NmOaZcpIFUJ9k|}e_ zL$uOeawumqFm;)~6gkxc6N$qC$C)dE3TcZ>t)sq_7Ez`AQG}iZoXRJ|BBkkX9^;jO7(B z4`ceZX_-q+!blgReV z28AM*8!RX*hst#6PC8sidj8zfNM1<<*@fK{?9WE9^N`Asio96e1WgUXds#y$a}s}Q z1y^x1p6(64Kb!Ew#rPdrT(r$_Q=siFR&I&Tf=e&NXe4jk8N^Z4HR^_O#^-Z8yS&U4 zziP&o9_BSPHP%U0u>dHDg4t6g8uV)VO16A%*Oy`1?q}< zjG?F$lRm5{J~Vc`10K{&0fv!E$k<@Cl7Li+?Tr?x$I=%ZRe>NEMRJQ=J3e_s_d}8- zj80Cm9BL9Q=WaI2G1KH2SVjVvt$=jzj|?BgJrc%^+^9h8?2#M4d$@_6-4nRy-oPmS zumuOa+0Mz-xf}k(lr3?ezDNAMXW;%I(Q#TAP9;EbsDLl}a(Aj+J9nHB3@ZB35E{`r za?3asJ?jHWbzL1$Gx5NDb!H3|%81|Tg5i|b8|G?&6A;XnjlN;Rt`+#Xri5?zh4rnF3^p>Gm0`R#1)G7d_s zHZ_b<(i+zQD6M`Z;q_~-uu|F=zJ^RqL&OkCT(YBNjs#+?E5KT+3UE(RU1{6$g%}-W z)^XSx`J~TmU@HCzo-z^bGV4~UEbjwUs8GY<;FO>U#7Jbr%9jA~+7IIxc3nsa}b6GP(T2O(8xzU-zz-mm~@a8QA=uQ*J@LU|> zCc21rsQ;uk@Y-RnMd618S{kUP#-s{kyUiVC7AiW&27=(d&aw7jL8w$c7ghjl{;1Xu zbNWdH#7J_NoMujJhtsq44ss?-A^u%$RRn-sp8{KuQ_iEFCGi>>RYJU$fL><#qX3aXZj1{+-aFv%omYVI>uQt;di){l9C!9M5RAs(vz(Q z>4bWtPTBrFiMoz*MP0Is5{7WeL2#zKqN+}2@ny8hoIrNs1PmM*NUYtXE3d1r6-{Uw z)5>=#Z?D2C3b)URjY57I#;Oo`)>GP5O9?4GitSS8z@f?q`<==A6b`s`N|Q2MTh zM@&Z)VP~GxU3IYmu!Syk%f&_obc`kKI?CkBa95QW*oXxJzVDZyed;1M`n z9C8JRk$DmBD%p;S4EgiH9}^C0U{1EF$a5xF>c9JeQmUi1$(GJh;Jw&{nPSk|+Ei1I zNy=Kg?}|xzl}S?Y;^q?j8xOz>70NFC4Mv++1Vm<5B0N;!?(jI{AFOuo6KB|J^op@9 zZWIMwqL>+6^?(wkTDx3cC5;)*xB%-qrCu5{)S+I%P)d}w2j}Nu$$gW6IA%BWomovL zo;~;wXHJ;4JUf-jL#OSGnI2V#Q3_bz%D}|Z8Rm&7=&hS^B1Vsc=m?V<8kf^R#sXWc zZJ6qMW_cNkDelk83l=-}S^ij-P5l*9m|19;E0QVXEHZ9t?=j$nqgPRfGsliHMEC7{ zqV|HMC~e4gBZ?VaZidvyY6+)BENxh}6QnaHI+mHslUnUDO$^MkD02EE-qjr94@*}i z(~&N40*Gma2tZb=WN3-Q+f z;-7OCzw+BHmNi!Jch)y1Ogr@Wn@2r4@DF>>S(1k_I>9Fn-1KJu7qVyk@xX&eANgz; zoBCD@KKqY%yn90R$d;o%{Co3n``mgGHa80X-ILcoH@I)rH=jH_F!QE!$~Rcnp9H^Z z@?KeMzCCHt^jE%Z`{wzR4#R{7Hp68kY`=BP6X(>PG5_!@Z@ursm(#I1ZoJ@sI3eTc zJL-?FzjW_~=M^sa`a?9A1;4s*>?IqooOt4SMJF|neeg!)c)Q>q7<2cq>R&v4*gnY( z{jdGu`)4fcSAwtn{FCFKoZ7bb?l1px?{200Vl(b5g8%BigU?v@>x17p@1*P#COmKb z0h_D@|A$jf`0T`Eu6ZN*n8|NEp7~}u)|O+_6!K;8(-W@vbmEkAuC?aB@#QjX@~Rj7 zl|_LGS4?|z%ykcEpRsG&)vK|2Sn!Weyzbnr6NA69PCw?x1HQT%n;ahye7OFjyH^|; zd3LW!yB#yWz8xERKNfuM@5ThfgPy$poJnv0aL)br2jM4bgN%fOPJi*Pwo5l%8UAtC zH=h6V@5f-Hzu>?4X5id+m(D0$KjPMgyalK3YFV{{PkQjP)$jGSPTq3gl)#FEkH=2O z3kCo1z{I0B-re+%v%lU^_3G#iHQ0nG_#cD29@c!vDXX4&W4FuBJLR&|F!PMvXc-CF ztMA!y;9idv3|n-d5xh0=y%C{*e)LgxS=QFcyGD*hz6gHf-DiGx@jjRB z|Jys})UN);^=lnm_u&X9u5q+CJz0 z?xUQ4TGqFMzx%$FUw%9_dHBfBzp^%c{}kNcAA83#5+=XhIQFK8o;_pfQ4L9#CuTm1 zvLyH?Pkg!kg}@uvue;&pgAbkd-CWDsAo!Cn%b9*p^W~|(xpnfk;`g_GV_A0!z993u z2_Z%YV4#1%yZN2W(n!Q^K9)GxnK1E%nQRSvOz=Qt%}&^j~oKuMQpm{GqSs zMsf#0J}(jc_cwn1Zr$Fe_E@4~WcSeR!9(MQ^%Ni&6J1*HbwETlD?>s;Kl#kxow#VPmoDlr2pT0IM zWysYZZ8-FjcP{u~J@WQa!OzWWFF)k`g}a~eefqf<+(-7t97}$&D>5Tt&8w?_lRoHx?>@-7>b)gL z{d|RG%@F)?`+u1ByN{lI$bJ8C)sugo{oS(a#83A{ITif!6@kPz&b<5F1N!{w zp+QC4UO{;g{OaABkG^f_alaaP-s!7;`T9O#EaiZX&PXU;bjo=bpRy(M;)fpo_|l($ zbQErl7W@T?7oWCu+ecF`+Vk%AQx{g;Vp+!u{=TCIe|u(H#hI`FzHRN^U*{s6YXpD7 zSK;%Id^7F*lYTR$`qq`BZh{^Y{J=k+QUA;3+s?A?P2cv>@l^{g>t(^e^yMiX4=>v9 zz}IfRf5aizR()bwKL~!e+fQBh+eh+BO7iD?R=e>xC>PoN7|!ii-uC^Yx7;2ce)*UE z9~$x4Zm7frpZVoQTR!gm_RjeieIH$s!hxI?!QXh}#g`Mb#(n1o}az?)UrQbzw4m#Rb#$C{eTa4#|_VdPrm)G(9iQGetzL~ zTV8BjxX%o1oEH3wj5kkxcg~f6UohjoRqec4JZeU7A~!?ZRnY=rMafDwHNLo6snfxT6)1*-O`9~_RQGY*4*4u*Q%vtXERI5KaP&$rP$qjre(jO zeqqmi;O(8{wl>$*w8}Yly%6(e%x?5bVp^*kB21U=1IiN7ienJr?22A+Iw5tr{nOIB zH43?k)HF44as|tKy7!$4&jelA3u%BPHuj=~BY~8kKP~(X^^MEwY9kG}V7(VXr!MK9 zO>)AWzL1ET9-Q{tY3o@9vihinsAEkPJ?lP9WNxip5$UxB1_;UD29fICWzAUMR1@um z_G@ctSl*L_(8Zd?ZS}Ri@c3WQ>?r!W!qm&sdf^@9u`arDnd00TX*0(X%!9A2qa^{gwAi9H8jb57}*lNDlZFN920oW0P3)EW&vln2V# zGVJlFYv@JcA@fcZ99Eyv)*jNGt};&8YSKgOC5Kk36H&+4H#YRteuS<*edrAUWc; zG?&+`>N$gSR!-`f6JDV#^~?vR7PMD;W`u(^J*f+(PDB0j`e-k*ysdFrQuYn1xGw z*EU4j^c)K?*>!h!VoF-m%3kDeYwa?~dXF+lk*Ql%)7(R)Ot$)7WCrW1UiDZIkJc5v zNSFHMb&;Co=b9wreZH;V-Vk?=cR(_gWa-3CUMSb1M2s&}i zz3IobV1uL41^9UX8fy{x6*<|cgD9=hwG|aYL>Wti*cM@?-VZs zze>EE0{`Kbc=TTpqyGs$Px|kR^tAuBl%4a?4te&#dq16*C!rYa)s;bxCSc-skc~HV1+y@~JJ?Fk zWF$C_CZi8|(31$`A(;#(pYgDrh!ErSNW8O%(hvQ<9RqQsVSY=Vc8u3CJf{I-T-I6x zI2dp(;4r|`0U1_|zqezY6w3g(|7(smrCal~DPUb~>DFc&CrMt_(U!LE zZ_%M^{@EEF)Y;Z=sa3TN9M+mG{W_l9o;Z2)aq}Nb!xC;rn6F9xd@|_=Lz(h0IruR7 z88z|}j>OByO;=RQV)kH)0QbqnW)Iz@-F@(0W@ke}N!{|uF?B6XT{4G$sfU@9sWXRb zvX<8^Z)#bM<#6elOgGH4$hwL+SwnxlS#u_moMGtzWOi=^%mU;PYc}8}K!)>NKzgwY z-c)OqHlb(^DuHii<;Oq;Rx>9+6oe=M5hl7B|eEA?Z5 z<71-kmHI}|4)!D~?NG{?B?mdlic1e7g{`G+4Gm>2!R5_Z>e{{VoAjLkC)7YwoaCf` z-sHs0ut+*)IwiTT0)!s0t^wQ=@OnUo?*>h$@F_{BNl7|Q0qb^r74B|r(uzb&^7YUoaGN(KLo zq>{x=H-D6J%7a(R=_c(SfS0$_s7It+7Jzzl!MKeOyHwB=*i=$pUbje8&}i+_WKgJr zsDNf@90C2MLZT>OfnPzBPwSJO-}gM18nwb_eDTar`S5=oCFj)Amf2L+duTrG}KTD%|-xem`D9 zxoyNu%QXlcQ%O}UQ%UH2&GmE5j4l{PCzgkK5R0MOi^VW;Vll(JV6wVk zvb$i$cEOD6f|<|-!|aOneOedHVO=mYx?u9VU}g#Cnqq)YZo+44GSi38)?}s&pRLJE z4?bIynGSrmCNutgwkBr@q>1t6vo)FVsypU>9h z83Jiyc=>EiW;pq5O=eK}EVaU0lapY85LlhBM~*x8aY&ZbHz`sZPV2-%@^v8Htts2bT>>4Sqg5mGGTedHa!W`Y@t49<6g2& zZ@^R`)IZs{_ifXsFdZ$_FKryFA{F0%z*H*KL?ph#rP`(eFck@Pu#MZzHf6yyOQ?I> zxczO@B$$Fioo3?>w@vvlF`rVbqih^?fC@nsOe$yQ*|=)kv;?Lj#crdGYqd=$z(iR{ zvD$6iI@@#>Oos^d=QfUWs>^|rE)%A4f*We%_JD~krW9+WjT-~geuCTI#vKR~>yi{}s*O7Yrm=!M(#GY% z#FkWwRcPZ%VA@-7tS(geSk@_nEJfzw)jIAcBSZa>cL3f>5B)HqlgdN;P!ajk=^tj@ z@gD6T!vogYm8}cqn5Brm7_3WkOF1iU!zz0fqvQvL4bJeN z*~5pu4E{^qhyNn|KZ8U(<@%q+fzPq}|3vj`|8MmCqje^a;lIQ4|G4M>_n!ZcJ^$Z% z{?n0Me2n`eJpTuJ{&PJ4Vb6b^=YOT=e}m`$QqTW!I(wOZ(raUziJHPZ%u7~zlx=Di zKDlV366OQKo>c%i9T4?K`y9YRK-MHj0iFy9UD$pOU@_oTfF*!;0YZbeKLJ<<_&Q(+ z@Do7j-S!^<%K`ht&oJO#fY8?M69Fp$^8l*=D*>V7+ZO}E?{==foD0|ih?=4OYQTAb zHvppMYQF<;0pNpx)qqa`E(Cl5umDEKq6p%G5 zq^4Vcw{d+C5`|-pLsP)o#l{V_aieYAJ~nQ$jXT)J<=MEIHjZMZ{FrUyYHZwM8`o;% zR@%5VHtq}?cb<*A$i`h`<8H8VciFh#*to}S+*TX+ij8~S#=URjKDKdR+ql2mxIRdE zoqpPc^s{l)@+wV7+qivf9CKCKJ=n(O**NC0vP-S1_-5O<1{>FG<7Ug5EZkM@-l?at zp8b0o>#VBR2xr@_MtFBjYqYaP;NN~p6!s}S;fg{c~04FT2 z0|OkS-?j@)m9C>UyN+kj7-yTwN_7)LZ9{_^eq&ecc{1a)f3hAv=}#M1W_OTbni{t_^jR6V*l+sR(Gh|l%AWTi)$euyJfMcpD!t1ILFnJ{*go@BB}}`xIV2hQ3;A z8TFS6{F6eBr6-6B%AGAfbe`(QhmDU%@lLS@X7b-W3=_lfJG_5m{>hWD66YDzRX4UZ z^Z16M9$Fql^*~w__QNuXuXmiX$-yMz!~22xkJ>>VjymxFc>T}&RQZ2}hi;k>W|RWt zukfzdYy^zMFuZKQorISUS}yI37dlfi9M=vw82`vg89!PJNR_h=kPYv%08!D(a2+Zj z3l(rXbNpPucEIxiPY1jJ@CHE0K|9mz7l2IR6?j#pM3btNXbM<;6BISwV&$xG?A|Co zwrCV?UmJITjXT7~9d6?aZCr_stF>`#j41b9Lx%l3W(>y|SBfe?6#O9w8vB{fSZy}` z%rin8k~H)V8nR$`1&MZ&@p7o`@5oE_xC9B!*{*_Q_yD2hchiEj9`_0f{Ffp_7>>&T8J5d+2AvGE8X%-e4G_{4ux5;GL)pO3CDP8^(AQ`Ol-h< zXLDBP5XvjYv$kvuenuUcHhJ^LlRvxp=9@MKzYQ(z3v39S;qcN#;buZ~d^`Pz=urcI z6Z~9{WTx2)wWD

    ^P*WLC>$F5XRlq^#5dFgJY$l^5FqZAn?hM^zey>L%GkY!es5p^bu=tMef z9;IjH528HKN;Y~{O%$2YaLTq?g$x(e>`)dgHP)??vmSV8ZXwpwt-=Pf^vusXJ3G0L z73)fHvTWXxx|(Ge9!<~u2k@M>Ft+5ZU0qUW?_1E@;3}3%$ho&zS0&1Ij06wb3vN=` zuF?OO=>I$P|CRdxIsJdA{(n#ZoBm{{i(k!RiE_SDqY0Rn6egy|`9$Ek7G;uocQfFg zfVTqf4|p5kWWZko9szhe;7q_f0gnc}8*nk;J%Ael?+3gb@G(G`Ey!W}!+=i!z5$2| zv;9**DC+i9gaZ{tJM;7vLf{#FrL<{MN}HyD^##6b1^2Z!1+3FxQ}M0Srhs*>jl00c zU1j60vvKT4DZBUBxJPXqdsWKcmu%ecZQN%z?n@gd%6&e2e~19eJzjrRo=z4#MmoK! zoH?B1ng5}kWW0pj#H*eJ8IXvxm)AQ7VJrcnFzl`cog!=R|JC9;8Z-tj3$IUeRh5No zFfkzKaGeX2e-4fV zg^yBcUFWUO25qV*2Wf{f9E+ESu&GDopsTUpeXf~i9dk`J=yW)|Z&hNp%5H)wgbz6p%_iy(b6|L8}3g3az($TDXRa58S3e3 zy#VLxmYlr{ChtC!Ceqk5XCxmQ>=)f-32S*hi6_~${TXEgD?4Ou0SizTUN!%!+7$=l z|Ce|NbHq!xHRi&EmLG7{wh7`Zt&V&^^I)t=o-_@q7O5)8OL&~dyXmHlvIDf|@J{z+ zH{GONjB{Ds)vq3v-53{8%?5KiytnAlWBnlOyR;s<)1Yh+usCMnjqyaE>conEw07H6 z+^kLc@ZZe+E>S4?GA=Bz0lf1BBRj%GZT=nNasY7O0Z?5kioj`$`mP1!!s7TbX$wzkC)N_^3$N`(loPuF!)DGP53M8=5hQ7|bglU<3d5!6~>%)?e3AGaW~Fp!sU8D2ha zx)D@%y-h~P($yaYnF;I_Wco?BkH^dN<|1mPwMTZ%WV9BM!{Azw%ZV{IlH(hdz zVkwW2+gYxEdjP&!BMBIG3N8zxNk_~gv@<@KXp}DDK)^%rkGj0Q9554*LOuwv8gLiD z8bF9w`y#+y0UH2^0y0e?Y$Cwdz?{kv0Io`bkIY4y)Bv->!H&j_)~0l89~*a=jhkWP zL|CtaGjRmdtylAG0d?us*_~}!oo&NA+lFZL1*qOcx}M4IN& zy3BB9HZz6?sH(>nR@bnoSLG^qg@0#NE(a=%%5{9Gz-}w_O;uAh3l6Ks>kwerQ5=c4 zxVmw1TlL~Poch5IAtf~n;-A~Lh_{ol#l^H?oD{0Ku5od62@)(lGm8Z9DwMg=#PsY& zgUZJg6e?mq?8(^$Wsbth*Ax_{0<|}vQ4nl48!^)^8Xkfw8XlTdG&<(kMT28ls+~2& zR6wTtp@2+|8}X_FL6a&FGzBa+*nTCrH?%2WorBy|eCKIXz`DZ5U1Q_!vvCjExSc5^ zlj0N-ciCX7o3f$GL`Dx~A_N<0cvEC~1i<%CMCZ#1?Zws)9I#|aHEEetF&XuB?{B;=H+Q_yBvTr1wBZ8BK??+|Z8Y9YeZ?=JICx znT41BD1AqPVBS6glEOMy8QH360vOE0urmw$;5F$n8(G459S6v|d%n)1yI@v*6q-~Y zg(lTNR5&&e6>ewL#Nlz&gr^oA3(t(Eh^<8j_nA&PIVHU+FY8&_}R+HKrg8}}a&^Kl5&|86noodW8y8;cY|edpPKub3Ng z{z+o~+|G&lDG*m`+BJX_bBL9Q`RRZZ^NoNM^Rodd=4S#@%+Y)kF@FSRCFV3KF{eq1 z`DVdU%xO|$uJ|bCijQKha1?WeqnIlk#a!WbM$8Y5qs`rozF7#7zl{I88h;J&fsYY2 zuPWy-2_HAzt;)wJvWKozE>-zw=?5e3HDzo&qi)t8oKxLY1V?$MNy)R~qdY4<%Co{z zo)wPrtZXo*MNzCz*6i#+|dH`#I zG0zv;V6-=@4fby#bg*k#AA0CqD3%~p#rM7s-Shy)fVRb#-cPWsRxluny$`W_Eg2?; zVLRSeO~5Q!--8Q(%UZfzX5lT2%6Zt9j=}(EeMCMl&gpK1VVJI4qOhuZo@FhntI26F zh9wJcVXIs{jIBJXub^;>k7Emiz{AJ%3QXl<{(q^+Hk~5N$6o8*b>SJ)gw+r8`6Rr2 z9!IfbIz0)P4)_${UVu*n9trpiAp3vM0bT(3JmB?!uK+#@_$uIwfUg0*4EP4%JAiKi zegyb7AoJjlfK1Yt@TxToG^sTVGzF|5@TCjsR;M-vEH_Ij>MpC@v zA2)#JZSBwwwc}8{ygEfaszvX)irOoXh8eJjK@cN=Szz@SK#FEzs}eT5r7{6X^Dvwg zl|Fd0HS&FAA;bP5AjAKW&eGRmR%0AAsWA?k0u~ce;XczQJrC;)FZ~e&|Kz1K@`;zc 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

    m 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, 1, 'first') + begin + if ~isempty(first) + draw_triggered; + else + taxis = [] + cool_waveform = [] + update_enable = 0 + pause(0.001) + end + end + end + return + + + diff --git a/Old Matlab Interface/.svn/pristine/8a/8a3d6b9a31578b2614976a87b55da6b1305c5407.svn-base b/Old Matlab Interface/.svn/pristine/8a/8a3d6b9a31578b2614976a87b55da6b1305c5407.svn-base new file mode 100644 index 00000000..4c4d34fc --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/8a/8a3d6b9a31578b2614976a87b55da6b1305c5407.svn-base @@ -0,0 +1,88 @@ +//MATLAB INCLUDES +#include +#include + +//LIBUSBK INCLUDES +#include +#include +#include +#include +#include "libusbk.h" + +#define DEBUG_SHOWCTRL 1 +#define ISO_PACKETS_TO_READ 30 +#define ISO_PACKET_SIZE 375 +#define HALFBUFFER_SIZE (ISO_PACKETS_TO_READ*ISO_PACKET_SIZE) + +void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) +{ + + //Vars: + //Imports + char *HANDLE_CHAR; + char *ISOCTX_CHAR; + char *OVLKHANDLE_CHAR; + char *OVLPOOL_CHAR; + char *ISOBUFFER_CHAR; + KUSB_HANDLE handle = NULL; + unsigned char pipeID = 0x83; + unsigned char *mode_ptr; + unsigned int offset; + //Internals + PKISO_CONTEXT isoCtx; + KOVL_HANDLE ovlkHandle; + KOVL_POOL_HANDLE ovlPool; + char *isoBuffer; + unsigned char success; + unsigned int transferred; + DWORD errorCode = ERROR_SUCCESS; + unsigned int n; + //Exports + char *transfer_contents; + unsigned int *error_export; + + //Initialise Data + HANDLE_CHAR = mxArrayToString(prhs[0]); + sscanf(HANDLE_CHAR, "%16x", &handle); + + ISOCTX_CHAR = mxArrayToString(prhs[1]); + sscanf(ISOCTX_CHAR, "%16x", &isoCtx); + + OVLKHANDLE_CHAR = mxArrayToString(prhs[2]); + sscanf(OVLKHANDLE_CHAR, "%16x", &ovlkHandle); + + OVLPOOL_CHAR = mxArrayToString(prhs[3]); + sscanf(OVLPOOL_CHAR, "%16x", &ovlPool); + + ISOBUFFER_CHAR = mxArrayToString(prhs[4]); + sscanf(ISOBUFFER_CHAR, "%16x", &isoBuffer); + + mode_ptr = mxGetData(prhs[5]); + offset = (*mode_ptr) * HALFBUFFER_SIZE; + + //Actual Function + success = OvlK_WaitAndRelease(ovlkHandle, 1000, &transferred); + if (!success) { + errorCode = GetLastError(); + printf("IsoReadPipe failed. ErrorCode: %08Xh\n", errorCode); + } + + IsoK_Init(&isoCtx, ISO_PACKETS_TO_READ, ISO_PACKETS_TO_READ); + IsoK_SetPackets(isoCtx, ISO_PACKET_SIZE); + OvlK_Acquire(&ovlkHandle, ovlPool); + UsbK_IsoReadPipe(handle, pipeID, (isoBuffer+offset), HALFBUFFER_SIZE, ovlkHandle, isoCtx); + + //Export Data + transfer_contents = mxMalloc(HALFBUFFER_SIZE); + for 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.75 +% error('PSU DUTY CYCLE TOO LARGE!!! ABORTING!!!') +% end +% D = uint16(D*255) + D = expected_adc(vo) + if D>113 | D<21 + error('PSU DUTY CYCLE TOO LARGE (could underflow on SOF)!!! ABORTING!!!') + end + mex_usb_send_control('40', 'a3', dec2hex(D), '0', '0', '0'); diff --git a/Old Matlab Interface/.svn/pristine/8c/8cd1937ea79bdfed87f7af58afb69e3246c362f3.svn-base b/Old Matlab Interface/.svn/pristine/8c/8cd1937ea79bdfed87f7af58afb69e3246c362f3.svn-base new file mode 100644 index 00000000..49b1b909 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/8c/8cd1937ea79bdfed87f7af58afb69e3246c362f3.svn-base @@ -0,0 +1,2 @@ +clear all +avrbreak \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/8d/8d91434d05e3b1d6e19cffdb2a684e984f2f5991.svn-base b/Old Matlab Interface/.svn/pristine/8d/8d91434d05e3b1d6e19cffdb2a684e984f2f5991.svn-base new file mode 100644 index 00000000..4280bc3c --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/8d/8d91434d05e3b1d6e19cffdb2a684e984f2f5991.svn-base @@ -0,0 +1,258 @@ +#region Copyright(c) Travis Robinson + +// Copyright (c) 2012 Travis Robinson +// All rights reserved. +// +// UsbStream.cs +// +// Created: 03.05.2012 +// Last Updated: 03.07.2012 +// +// 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. +// +// 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 TRAVIS LEE ROBINSON +// 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. + +#endregion + +using System; +using System.Diagnostics; +using System.IO; +using System.Runtime.InteropServices; +using libusbK; + +namespace Xfer.UsbStream +{ + // ReSharper disable InconsistentNaming + + public class UsbStream : Stream + { + public static bool UseCallbacks = true; + + private readonly KSTM_CALLBACK mCallbacks; + protected readonly byte mPipeId; + protected StmK mStm; + protected UsbK mUsb; + private bool mbDisposed; + + public UsbStream(UsbK usb, + byte pipeId, + int maxTransferSize, + int maxPendingTransfers, + int maxPendingIo, + bool useTimeout, + UInt16 timeout) + { + mUsb = usb; + mPipeId = pipeId; + + if (UseCallbacks) + { + mCallbacks.Complete = StmComplete; + if (((mPipeId & AllKConstants.USB_ENDPOINT_DIRECTION_MASK) > 0)) + { + mCallbacks.Submit = StmSubmitRead; + } + else + { + mCallbacks.Submit = StmSubmitWrite; + } + } + KSTM_FLAG flags = useTimeout ? KSTM_FLAG.USE_TIMEOUT | (KSTM_FLAG) timeout : KSTM_FLAG.NONE; + + mStm = new StmK(mUsb.Handle, + pipeId, + maxTransferSize, + maxPendingTransfers, + maxPendingIo, + ref mCallbacks, + flags); + } + + public override bool CanRead + { + get + { + return ((mPipeId & AllKConstants.USB_ENDPOINT_DIRECTION_MASK) > 0); + } + } + + public override bool CanSeek + { + get + { + return false; + } + } + + public override bool CanWrite + { + get + { + return ((mPipeId & AllKConstants.USB_ENDPOINT_DIRECTION_MASK) == 0); + } + } + + protected override void Dispose(bool disposing) + { + if (!mbDisposed) + { + mStm.Dispose(); + mStm = null; + mUsb = null; + mbDisposed = true; + } + base.Dispose(disposing); + } + + public override int Read(byte[] buffer, int offset, int count) + { + int transferred; + bool success = mStm.Read(buffer, offset, count, out transferred); + + Debug.WriteLineIf(!success, + String.Format("Failed reading from usb stream. ErrorCode={0:X8}h", + Marshal.GetLastWin32Error()), + "ERROR"); + + return !success ? 0 : transferred; + } + + public bool Start() + { + return mStm.Start(); + } + + public bool Stop(int timeoutCancelMs) + { + return mStm.Stop(timeoutCancelMs); + } + + public override void Write(byte[] buffer, int offset, int count) + { + int transferred; + + bool success = mStm.Write(buffer, offset, count, out transferred); + if (!success) + { + // This is caused by a lack of 'PendingTransfer' slots. + Debug.WriteLine( + String.Format("Failed writing to usb stream. ErrorCode={0:X8}h", + Marshal.GetLastWin32Error()), + "ERROR"); + return; + } + + // If the KSTM_FLAG.NO_PARTIAL_XFERS is *not* set, StmK will transfer as many bytes as it can and return true. + Debug.WriteLineIf(transferred != count, + String.Format("Not all bytes were written. Expected:{0} Transferred:{1}", + count, + transferred), + "ERROR"); + } + + public override void Flush() + { + } + + private int StmComplete(KSTM_INFO stmInfo, KSTM_XFER_CONTEXT xferContext, int stmXferContextIndex, int errorCode) + { + Debug.WriteLineIf(errorCode != ErrorCodes.Success, + String.Format("Failed completing transfer. PipeID:{0:X2}h ErrorCode:{1:X8}h", + mPipeId, + errorCode), + "ERROR"); + return errorCode; + } + + private int StmSubmitRead(KSTM_INFO info, + KSTM_XFER_CONTEXT xferContext, + int xferContextIndex, + IntPtr nativeOverlapped) + { + int notUsedForAsync; + int bufferSize = xferContext.BufferSize; + + bool success = mUsb.ReadPipe(mPipeId, xferContext.Buffer, bufferSize, out notUsedForAsync, nativeOverlapped); + int errorCode = Marshal.GetLastWin32Error(); + + if (!success && errorCode == ErrorCodes.IoPending) return ErrorCodes.Success; + + Debug.WriteLine( + String.Format("Failed submitting transfer. PipeID:{0:X2}h ErrorCode:{1:X8}h", + mPipeId, + errorCode), + "ERROR"); + return errorCode; + } + + private int StmSubmitWrite(KSTM_INFO info, + KSTM_XFER_CONTEXT xferContext, + int xferContextIndex, + IntPtr nativeOverlapped) + { + int notUsedForAsync; + int bufferSize = xferContext.TransferLength; + + bool success = mUsb.WritePipe(mPipeId, xferContext.Buffer, bufferSize, out notUsedForAsync, nativeOverlapped); + int errorCode = Marshal.GetLastWin32Error(); + + if (!success && errorCode == ErrorCodes.IoPending) return ErrorCodes.Success; + + Debug.WriteLine( + String.Format("Failed submitting transfer. PipeID:{0:X2}h ErrorCode:{1:X8}h", + mPipeId, + errorCode), + "ERROR"); + + return errorCode; + } + + #region Not Supported + + public override long Length + { + get + { + throw new NotSupportedException(); + } + } + + public override long Position + { + get + { + throw new NotSupportedException(); + } + set + { + throw new NotSupportedException(); + } + } + + public override long Seek(long offset, SeekOrigin origin) + { + throw new NotSupportedException(); + } + + public override void SetLength(long value) + { + throw new NotSupportedException(); + } + + #endregion + } +} \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/8d/8dff77fcaf116493419ad088b481af6a4fc10114.svn-base b/Old Matlab Interface/.svn/pristine/8d/8dff77fcaf116493419ad088b481af6a4fc10114.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..5ee45658dbf9ab99c23d2ec56bea9e60e9a822a7 GIT binary patch literal 9728 zcmeHN4R9RQeSatEWLcJcGV+0JEWDOaAd*2o>r5;o$#ZAv;2mBWVM{_7yXW)W$~t^s z+1)b|Q(BWlz|G5bJS|B`hSG*iC$!TRntH&7VIm>NvSXVH13}oG*s+^(LQtEKu^dR* z{@&X?MU;B}hkOP3cct!ig%~^;SE`MPm z*+2ipiUT(J#ER~Ls3xV<lyQ7S<$$UA-bCuOtf|R{R+2#DlnCIa92GfYLH}e-j$~nJ5bIx;ubtil!hJh`EeHg=*l>sv!+i~$;SqhkV>xj=?{{`Mp6k5E@mxm zL0BOK$@}r){8Mv`p?4V8-xAj8pFs0^XuePeI)A^=>v6v>7l>(|`n}w6wJBOlJ;(DGfXlfjT>Ah6>>eq=Gd<)A?co}HbiHMqfj`6fok|$6BUlxNvzp^sdv~1xeh!9D zr|r3R+w@ABSxNFsOTo%jZUo3*!h{3v0m#3D#xo+qM{ty3Ird@24ph?;Ll^m-5M#S|2nsVi z)?8&CAnylz+&&*#*iXsud+Bn@#_1#WVsPlXw#5MY3MelClK&Z|9y(mq$qv21)dTE= z;d~!Y$*{L9#ifpSMA~GGbY$1 z->&$+`ZTm;c9^}1CzN;pw_#W!OqkqUk%9r4qKsin-;DgMhMDIiHw!>EOT7DA!;o3+ zKk*4Rd|F>n5crJOh7AN`6sOnDcKBl`&rDu>bmcMj7T>=0Wr$PdPX%#S71RpxPM2b2 z+g#GP{d^5FiNeOLB4$5R#U%m}_ z;Os7%!Sf`#kB)b^nqdzI9S9I2H^;mjYoIy%Sqy{Yk_>xH0C=Pf?mS2H(}-}ojF{+5NO4Cl#tm{0Z&xH%}+!R-jabJTFY3_db&9v4u<`4Wgs+jUUFL^Jj3pl3Lb zL+}Fc3j3?!e3IKdc!t0cE&; z{2aXLKRbwYll&=I?Su9|2<`4!ZC1HYa5h*Rudr<86gwh|Jmc9k=O2STwkH0JnhobN zp>5v|Q_k@k&T^B}4vyL3c407P?(qC<%HM{$Mln%GW+sgz;Nw&h_cSrJXs-6me0a;X zO#)0Wq^y`v-y&mzX2!~B%Ng}ObB^)pHTDU+=S{n3zl2@k6r^nQVCPms`q!1|#h#Hd z8m6tZ_=soZ!FBxADqZoy0)*ec?#>#=V57S8Ex>l98=Hn9@r>fP*&mjklCo5tK9rc z!@xP7zZc2Dc_+NO)dnTgC9^<_AyjQTp!?#H%j z)ITTM18BK_zDTQRrfnC0{^?S~c?|?}ZUj7sHD>Oa{TN;tX(r-w6Z+$(r_S8;-LHaf z8P_Z5%mmiKeu$^{(46dY8_vJsE0nKy!}$cz4mKI^oHm?~&%qz#D$s5&2pJeMY?@`y zX?g%7Ljh;yBt77B^tLKDCcK7e~dc(X9Ts{UzM^d9;?& zti+t<_d)VS_UOoS^ucCie#G(ED8rxS2hZe6`9I6RksD3dKeFHx7W}3KRSRCa-qh>0 z=nWQZu;5|~5(}PdF!c{x@JS1P+ky{UaE}FlWWmBfU%tV_ermx}7R+0aSo&94u)%_| z1$!+Rv0%)CPh0liv*0%@IB3EB7A(Z^b8FlM`dN#9`G4^jTXwfvaI*z>SnzraHd(OX z@AF_+^=E(1xmyVhND0*4Ny$#g7|xIvftqlt*54=7SZ*%J*bQfNpiC-v^tUmLVK zprJ%01~ESFNccwQ9;}C~oEKBUl0#GxT$S|K!gw4IHCL=+<)=rB zCU$|drtcQsNDcMcjnL4fo6tZW4=fo0c8F7N|jLaua@SU3%jrPYox^(vxCEZNUW6-}Qoimae0!av7Xyz% z@5mgzZ-VzY^ggd#*)Pq^{D1A2T5)`^T~$K5vPD<1>hSRw9G|L&hPsm$D;C`uA8d@o zVx*nKmBB9P>HUOr6_ZWMif&VMIi%@g856S6zj>2i_B072vXNky*%-Vtt*AqMpTcT4 zIeg2-0vYI(fyerOdcq zvuhfDD(S}y?3Uj4&8yvRGm3e|!FVW!kKMtrs*{I{f_$^V<{BrD{0`d?4rKrIHY?b(>1KgMrN(6Q6_K2lF8BB!YiUt%`iBOD?drE@o1Onbo zD72CPWI}X)sVFG8e_b53IR8cbBGj&=uqMZ_&+^a<^hn8;n4+Y}D<$0+a5RC(-K8e^ zQ9#IH8=hTzT2*lX7MSNsdJ^W4BL2a!lHw1%Rgn4b@mbj&4ez$*&apWoH5~;I z$@mG)GkO3~fQvRSbPP)0Ftm*pM_Bk0rFWy0n_OMGFro@sM^?JQ`M$TC!ii zDV&Vo64K(0dsf#;@lYb#uV{L&qG~u^+v-*~y6e_gmP=BruBJ7ezb$@AZywVQmYNby zt5JPO_>oXrRpskx^rA#?FWiGea+jjb3g?RbgD~aiysYd|Vp5E^ZFM0nkl2<*CWU zI_eW|r)_opp_r!Bt#4g5>-&?&v;OC3e5&`>RiB8pb=B;kVcxo`kk9p9zAj%!M_|)! feSH@4`_M!({~hG<@9+J=qdyRj?n?7Vl!5;N4AsJo literal 0 HcmV?d00001 diff --git a/Old Matlab Interface/.svn/pristine/8f/8f1132ee0db0983091d41e2f856bf5bf0af3b2f5.svn-base b/Old Matlab Interface/.svn/pristine/8f/8f1132ee0db0983091d41e2f856bf5bf0af3b2f5.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..6e1586a0d844a699ac499df128a0c60bbf9a018b GIT binary patch literal 12040 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 literal 0 HcmV?d00001 diff --git a/Old Matlab Interface/.svn/pristine/8f/8f3b546183f36253bc8c454c70e9b8fbefb922ff.svn-base b/Old Matlab Interface/.svn/pristine/8f/8f3b546183f36253bc8c454c70e9b8fbefb922ff.svn-base new file mode 100644 index 00000000..65ae7152 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/8f/8f3b546183f36253bc8c454c70e9b8fbefb922ff.svn-base @@ -0,0 +1,28 @@ +//MATLAB INCLUDES +#include +#include + +//LIBUSBK INCLUDES +#include +#include +#include +#include +#include "libusbk.h" + +void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) +{ + //Vars: + //Imports + char* POOL_CHAR; + KOVL_POOL_HANDLE ovlPool = NULL; + + + + //Initialise Data + POOL_CHAR = mxArrayToString(prhs[0]); + sscanf(POOL_CHAR, "%16x", &ovlPool); + + //Actual Function + OvlK_Free(ovlPool); + return; +} \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/90/90d475a7054803e545ad8a4f6e6868f608f55f6d.svn-base b/Old Matlab Interface/.svn/pristine/90/90d475a7054803e545ad8a4f6e6868f608f55f6d.svn-base new file mode 100644 index 00000000..05ad2639 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/90/90d475a7054803e545ad8a4f6e6868f608f55f6d.svn-base @@ -0,0 +1,7 @@ + transfer_contents_temp = []; + for tempovar = 0:length(transfer_contents_0)/750 - 1 + transfer_contents_temp = [transfer_contents_temp transfer_contents_0((tempovar*750+1):(tempovar*750+375))]; + transfer_contents_temp = [transfer_contents_temp transfer_contents_1((tempovar*750+1):(tempovar*750+375))]; + end + + plot(transfer_contents_temp) \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/91/912bf56237775ea922c9d891e7cc8f1cd019d308.svn-base b/Old Matlab Interface/.svn/pristine/91/912bf56237775ea922c9d891e7cc8f1cd019d308.svn-base new file mode 100644 index 00000000..acc8fef1 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/91/912bf56237775ea922c9d891e7cc8f1cd019d308.svn-base @@ -0,0 +1,84 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {204628C0-DFA7-4DA8-BF4A-3AFB81E74F89} + WinExe + Properties + Handle.Test + Handle.Test + v2.0 + 512 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + libusbK.cs + + + Form + + + fHandleTest.cs + + + + + fHandleTest.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/94/94015317cc0c78f6e1899a1f7eba73bcec65b371.svn-base b/Old Matlab Interface/.svn/pristine/94/94015317cc0c78f6e1899a1f7eba73bcec65b371.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..993ca4ad8725f5f3a04e7e9f9f259a0c12931a3d GIT binary patch literal 7168 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 Gfqwy?IX6K7 literal 0 HcmV?d00001 diff --git a/Old Matlab Interface/.svn/pristine/95/95632618c0f551232d080babe816c7e8228aaf53.svn-base b/Old Matlab Interface/.svn/pristine/95/95632618c0f551232d080babe816c7e8228aaf53.svn-base new file mode 100644 index 00000000..0e819efa --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/95/95632618c0f551232d080babe816c7e8228aaf53.svn-base @@ -0,0 +1,6 @@ +function [] = tiny_send_dig(dig1, dig2, dig3, dig4) + +bitmask = dig1 * 8 + dig2 * 4 + dig3 * 2 + dig4; + + +mex_usb_send_control('40', 'a6', dec2hex(bitmask), '0', '0', '0'); diff --git a/Old Matlab Interface/.svn/pristine/98/98a81befbeda1076bba948201f50294a85cc61e6.svn-base b/Old Matlab Interface/.svn/pristine/98/98a81befbeda1076bba948201f50294a85cc61e6.svn-base new file mode 100644 index 00000000..b0e2050b --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/98/98a81befbeda1076bba948201f50294a85cc61e6.svn-base @@ -0,0 +1,1630 @@ +// Copyright (c) 2011 Ekkehard Domning (edomning@adcocom-broadcast.com) +// Portions Copyright (c) 2012 Alberto Semenzato +// All rights reserved. +// +// Pascal libusbK Bindings +// Created on: 12.8.2011 +// +// History: +// +// 2011-08-12 Initial release (Ekkehard Domning) +// +// 2012-02-10 Added Hotplug Event Notifier API, LstK_InitEx, implicit linking +// and minor stuff (Alberto Semenzato) +// +// 2012-03-09 Added LibK_SetContext, LibK_GetContext, HotK_FreeAll, +// KSTM_BEFORE_COMPLETE_CB, OvlK_WaitOldest, +// LibK_SetDefaultContext, LibK_GetDefaultContext, +// 3.0.5.10 changes has been applied (Alberto Semenzato) +// +// Functions not in the original sources: +// +// GetIsoPacketFromIsoContext: helper to get a pointer to a specific packet +// +// UsbK_InitFromDevicePath: example showing a way to init a device +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// Notes: +// +// Default setting uses dynamic linking, see below and remove the compiler +// directive to change to implicit linking +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 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 TRAVIS LEE ROBINSON +// OR EKKEHARD DOMNING OR ALBERTO SEMENZATO 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. + +unit libusbK; + +// Import of the functions of libusbK.dll + +// Conditional compiling "DynamicLink" +// defined: the unit will load the DLL on startup and assign all functions, +// if all functions available the variable "DllAvailable" becomes +// true +// undefined: implicit linking, the application failes if the DLL is not +// available + +{$DEFINE DynamicLink} + +interface + + uses + + Windows; + + const + + LIBUSBK_DLL = 'libusbK.dll'; + + const + + // pipe policy types + SHORT_PACKET_TERMINATE = $01; + AUTO_CLEAR_STALL = $02; + PIPE_TRANSFER_TIMEOUT = $03; + IGNORE_SHORT_PACKETS = $04; + ALLOW_PARTIAL_READS = $05; + AUTO_FLUSH = $06; + RAW_IO = $07; + MAXIMUM_TRANSFER_SIZE = $08; + RESET_PIPE_ON_RESUME = $09; + + // libusbK ISO pipe policy types + ISO_START_LATENCY = $20; + ISO_ALWAYS_START_ASAP = $21; + ISO_NUM_FIXED_PACKETS = $22; + + // http://msdn.microsoft.com/en-us/library/windows/hardware/ff552359%28v=vs.85%29.aspx + // Settings.Parallel.NumberOfPresentedRequests + // Maximum number of transfers that can be asynchronously delivered at a + // time. Available in version 1.9 and later versions of KMDF. + SIMUL_PARALLEL_REQUESTS = $30; + + // Power policy types + AUTO_SUSPEND = $81; + SUSPEND_DELAY = $83; + + // Device Information types + DEVICE_SPEED = $01; + + // Device Speeds + LowSpeed = $01; + FullSpeed = $02; + HighSpeed = $03; + + USB_DESCRIPTOR_TYPE_DEVICE = $01; + USB_DESCRIPTOR_TYPE_CONFIGURATION = $02; + USB_DESCRIPTOR_TYPE_STRING = $03; + USB_DESCRIPTOR_TYPE_INTERFACE = $04; + USB_DESCRIPTOR_TYPE_ENDPOINT = $05; + USB_DESCRIPTOR_TYPE_DEVICE_QUALIFIER = $06; + USB_DESCRIPTOR_TYPE_CONFIG_POWER = $07; + USB_DESCRIPTOR_TYPE_INTERFACE_POWER = $08; + USB_DESCRIPTOR_TYPE_INTERFACE_ASSOCIATION = $0B; + + USB_REQUEST_GET_STATUS = $00; + USB_REQUEST_CLEAR_FEATURE = $01; + USB_REQUEST_SET_FEATURE = $03; + USB_REQUEST_SET_ADDRESS = $05; + USB_REQUEST_GET_DESCRIPTOR = $06; + USB_REQUEST_SET_DESCRIPTOR = $07; + USB_REQUEST_GET_CONFIGURATION = $08; + USB_REQUEST_SET_CONFIGURATION = $09; + USB_REQUEST_GET_INTERFACE = $0A; + USB_REQUEST_SET_INTERFACE = $0B; + USB_REQUEST_SYNC_FRAME = $0C; + + type + + USBD_PIPE_TYPE = (UsbdPipeTypeControl, UsbdPipeTypeIsochronous, + UsbdPipeTypeBulk, UsbdPipeTypeInterrupt); + + PWINUSB_PIPE_INFORMATION = ^WINUSB_PIPE_INFORMATION; + + WINUSB_PIPE_INFORMATION = packed record + PipeType: USBD_PIPE_TYPE; + dummy0: array [0 .. 2] of Byte; + PipeId: Byte; + dummy1: Byte; + MaximumPacketSize: Word; + Interval: Byte; + dummy2: array [0 .. 2] of Byte; + end; + + WINUSB_SETUP_PACKET_INT64 = Int64; + + PWINUSB_SETUP_PACKET = ^WINUSB_SETUP_PACKET; + + WINUSB_SETUP_PACKET = packed record + case Integer of + 0: + (AsInt64: WINUSB_SETUP_PACKET_INT64); + 1: + (RequestType: Byte; + Request: Byte; + Value: Word; + Index: Word; + Length: Word + ); + end; + + // Structure describing an isochronous transfer packet. + PKISO_PACKET = ^KISO_PACKET; + + KISO_PACKET = packed record + Offset: Cardinal; + Length: SmallInt; + Status: Word; + end; + + PKISO_PACKET_ARRAY = ^KISO_PACKET_ARRAY; + + KISO_PACKET_ARRAY = array [0 .. (MaxInt div SizeOf(KISO_PACKET)) - 1] + of KISO_PACKET; + + const + + KISO_FLAG_NONE = 0; + KISO_FLAG_SET_START_FRAME = $00000001; + + type + + KISO_FLAG = Cardinal; + + // Structure describing a user defined isochronous transfer. + PKISO_CONTEXT = ^KISO_CONTEXT; + + KISO_CONTEXT = packed record + Flags: Cardinal; + StartFrame: Cardinal; + ErrorCount: SmallInt; + NumberOfPackets: SmallInt; + UrbHdrStatus: Cardinal; + // Contains a variable-length array of KISO_PACKET structures that + // describe the isochronous transfer packets to be transferred on the + // USB bus. + // note This field is assigned by the user application, used by the driver + // upon transfer submission, and updated by the driver upon transfer + // completion. + // Translation to Delphi is difficult, since you can not declare array + // with the length of zero, so you must use a Type cast to access the + // (optional) array members PKISO_PACKET_ARRAY(@x.IsoPackets)^[n] + // I made the function GetIsoPacketFromIsoContext that returns a pointer + // to a specific packet. + IsoPackets: record end; + end; + + KLIB_USER_CONTEXT = pointer; + + // pointer to a \c KISO_CONTEXT structure + KLIB_HANDLE = pointer; + + // Opaque UsbK handle, see \ref UsbK_Init. + KUSB_HANDLE = KLIB_HANDLE; + + // Opaque LstK handle, see \ref LstK_Init. + KLST_HANDLE = KLIB_HANDLE; + + // Opaque HotK handle, see \ref HotK_Init. + KHOT_HANDLE = KLIB_HANDLE; + + // Opaque OvlK handle, see \ref OvlK_Acquire. + KOVL_HANDLE = KLIB_HANDLE; + + // Opaque OvlPoolK handle, see \ref OvlK_Init. + KOVL_POOL_HANDLE = KLIB_HANDLE; + + // Opaque StmK handle, see \ref StmK_Init. + KSTM_HANDLE = KLIB_HANDLE; + + // Handle type enumeration. + KLIB_HANDLE_TYPE = (KLIB_HANDLE_TYPE_HOTK, KLIB_HANDLE_TYPE_USBK, + KLIB_HANDLE_TYPE_USBSHAREDK, KLIB_HANDLE_TYPE_LSTK, + KLIB_HANDLE_TYPE_LSTINFOK, KLIB_HANDLE_TYPE_OVLK, + KLIB_HANDLE_TYPE_OVLPOOLK, KLIB_HANDLE_TYPE_STMK, KLIB_HANDLE_TYPE_COUNT); + + PKLIB_VERSION = ^KLIB_VERSION; + + KLIB_VERSION = record + Major: Integer; + Minor: Integer; + Micro: Integer; + Nano: Integer; + end; + + // Callback function typedef for \ref IsoK_EnumPackets + KISO_ENUM_PACKETS_CB = function(const PacketIndex: Cardinal; + const IsoPacket: PKISO_PACKET; const UserState: pointer): Bool; stdcall; + + const + + KLST_STRING_MAX_LEN = 256; + + KLST_SYNC_FLAG_NONE = $0000; + KLST_SYNC_FLAG_UNCHANGED = $0001; + KLST_SYNC_FLAG_ADDED = $0002; + KLST_SYNC_FLAG_REMOVED = $0004; + KLST_SYNC_FLAG_CONNECT_CHANGE = $0008; + KLST_SYNC_FLAG_MASK = $000F; + + type + + KLST_SYNC_FLAG = Cardinal; + + // Common usb device information structure + PKLST_DEV_COMMON_INFO = ^KLST_DEV_COMMON_INFO; + + KLST_DEV_COMMON_INFO = packed record + Vid: Integer; + Pid: Integer; + MI: Integer; + InstanceID: array [0 .. KLST_STRING_MAX_LEN - 1] of AnsiChar; + end; + + KLST_DEVINFO_HANDLE = ^KLST_DEVINFO; + + KLST_DEVINFO = packed record + Common: KLST_DEV_COMMON_INFO; + DriverID: Integer; + DeviceInterfaceGUID: array [0 .. KLST_STRING_MAX_LEN - 1] of AnsiChar; + InstanceID: array [0 .. KLST_STRING_MAX_LEN - 1] of AnsiChar; + ClassGUID: array [0 .. KLST_STRING_MAX_LEN - 1] of AnsiChar; + Mfg: array [0 .. KLST_STRING_MAX_LEN - 1] of AnsiChar; + DeviceDesc: array [0 .. KLST_STRING_MAX_LEN - 1] of AnsiChar; + Service: array [0 .. KLST_STRING_MAX_LEN - 1] of AnsiChar; + SymbolicLink: array [0 .. KLST_STRING_MAX_LEN - 1] of AnsiChar; + DevicePath: array [0 .. KLST_STRING_MAX_LEN - 1] of AnsiChar; + LUsb0FilterIndex: Integer; + Connected: Bool; + SyncFlags: KLST_SYNC_FLAG; + end; + + const + + KLST_FLAG_NONE = $0000; + KLST_FLAG_INCLUDE_RAWGUID = $0001; + KLST_FLAG_INCLUDE_DISCONNECT = $0002; + + type + + KLST_FLAG = Cardinal; + + KLST_ENUM_DEVINFO_CB = function(const DeviceList: KLST_HANDLE; + const DeviceInfo: KLST_DEVINFO_HANDLE; const Contex: pointer) + : Bool; stdcall; + + PUSB_INTERFACE_DESCRIPTOR = ^USB_INTERFACE_DESCRIPTOR; + + USB_INTERFACE_DESCRIPTOR = packed record + bLength: Byte; + bDescriptorType: Byte; + bInterfaceNumber: Byte; + bAlternateSetting: Byte; + bNumEndpoints: Byte; + bInterfaceClass: Byte; + bInterfaceSubClass: Byte; + bInterfaceProtocol: Byte; + iInterface: Byte; + end; + + PUSB_DEVICE_DESCRIPTOR = ^USB_DEVICE_DESCRIPTOR; + + USB_DEVICE_DESCRIPTOR = packed record + bLength: Byte; + bDescriptorType: Byte; + bcdUSB: Word; + bDeviceClass: Byte; + bDeviceSubClass: Byte; + bDeviceProtocol: Byte; + bMaxPacketSize0: Byte; + idVendor: Word; + idProduct: Word; + bcdDevice: Word; + iManufacturer: Byte; + iProduct: Byte; + iSerialNumber: Byte; + bNumConfigurations: Byte; + end; + + PUSB_ENDPOINT_DESCRIPTOR = ^USB_ENDPOINT_DESCRIPTOR; + + USB_ENDPOINT_DESCRIPTOR = packed record + bLength: Byte; + bDescriptorType: Byte; + bEndpointAddress: Byte; + bmAttributes: Byte; + wMaxPacketSize: SmallInt; + bInterval: Byte; + end; + + KUSB_PROPERTY = (KUSB_PROPERTY_DEVICE_FILE_HANDLE, KUSB_PROPERTY_COUNT); + + const + + KHOT_FLAG_NONE: UINT = 0; + KHOT_FLAG_PLUG_ALL_ON_INIT: UINT = $0001; + KHOT_FLAG_PASS_DUPE_INSTANCE: UINT = $0002; + KHOT_FLAG_POST_USER_MESSAGE: UINT = $0004; + + type + + KLST_PATTERN_MATCH = packed record + InstanceID: array [0 .. KLST_STRING_MAX_LEN - 1] of AnsiChar; + DeviceInterfaceGUID: array [0 .. KLST_STRING_MAX_LEN - 1] of AnsiChar; + SymbolicLink: array [0 .. KLST_STRING_MAX_LEN - 1] of AnsiChar; + z_F_i_x_e_d: array [0 .. (1024 - (KLST_STRING_MAX_LEN * 3)) - 1] of Byte; + end; + + PKLST_PATTERN_MATCH = ^KLST_PATTERN_MATCH; + + KHOT_PLUG_CB = procedure(HotHandle: KHOT_HANDLE; + DeviceInfo: KLST_DEVINFO_HANDLE; PlugType: KLST_SYNC_FLAG); stdcall; + + KHOT_PARAMS = packed record + UserHwnd: HWND; + UserMessage: UINT; + Flags: UINT; + PatternMatch: KLST_PATTERN_MATCH; + OnHotPlug: KHOT_PLUG_CB; + z_F_i_x_e_d: array [0 .. (2048 - SizeOf(KLST_PATTERN_MATCH) - + SizeOf(PUINT) * 2 - (SizeOf(UINT) * 2)) - 1] of Byte; + end; + + PKHOT_PARAMS = ^KHOT_PARAMS; + + const + + USBD_ISO_START_FRAME_RANGE = 1024; + + type + + KUSB_DRIVER_API_INFO = packed record + DriverID: Integer; + FunctionCount: Integer; + end; + + // Supported function id enumeration. + KUSB_FNID = (KUSB_FNID_Init, KUSB_FNID_Free, KUSB_FNID_ClaimInterface, + KUSB_FNID_ReleaseInterface, KUSB_FNID_SetAltInterface, + KUSB_FNID_GetAltInterface, KUSB_FNID_GetDescriptor, + KUSB_FNID_ControlTransfer, KUSB_FNID_SetPowerPolicy, + KUSB_FNID_GetPowerPolicy, KUSB_FNID_SetConfiguration, + KUSB_FNID_GetConfiguration, KUSB_FNID_ResetDevice, KUSB_FNID_Initialize, + KUSB_FNID_SelectInterface, KUSB_FNID_GetAssociatedInterface, + KUSB_FNID_Clone, KUSB_FNID_QueryInterfaceSettings, + KUSB_FNID_QueryDeviceInformation, KUSB_FNID_SetCurrentAlternateSetting, + KUSB_FNID_GetCurrentAlternateSetting, KUSB_FNID_QueryPipe, + KUSB_FNID_SetPipePolicy, KUSB_FNID_GetPipePolicy, KUSB_FNID_ReadPipe, + KUSB_FNID_WritePipe, KUSB_FNID_ResetPipe, KUSB_FNID_AbortPipe, + KUSB_FNID_FlushPipe, KUSB_FNID_IsoReadPipe, KUSB_FNID_IsoWritePipe, + KUSB_FNID_GetCurrentFrameNumber, KUSB_FNID_GetOverlappedResult, + KUSB_FNID_GetProperty, + // Supported function count + KUSB_FNID_COUNT); + + KUSB_Init = function(var InterfaceHandle: KUSB_HANDLE; + const DevInfo: KLST_DEVINFO_HANDLE): Bool; stdcall; + + KUSB_Free = function(const InterfaceHandle: KUSB_HANDLE): Bool; stdcall; + + KUSB_ClaimInterface = function(const InterfaceHandle: KUSB_HANDLE; + const NumberOrIndex: Byte; const IsIndex: Bool): Bool; stdcall; + + KUSB_ReleaseInterface = function(const InterfaceHandle: KUSB_HANDLE; + const NumberOrIndex: Byte; const IsIndex: Bool): Bool; stdcall; + + KUSB_SetAltInterface = function(const InterfaceHandle: KUSB_HANDLE; + const NumberOrIndex: Byte; const IsIndex: Bool; + const AltSettingNumber: Byte): Bool; stdcall; + + KUSB_GetAltInterface = function(const InterfaceHandle: KUSB_HANDLE; + const NumberOrIndex: Byte; const IsIndex: Bool; + var AltSettingNumber: Byte): Bool; stdcall; + + KUSB_GetDescriptor = function(const InterfaceHandle: KUSB_HANDLE; + const DescriptorType: Byte; const Index: Byte; const LanguageID: Word; + var Buffer; const BufferLength: Cardinal; var LengthTransferred: Cardinal) + : Bool; stdcall; + + KUSB_ControlTransfer = function(const InterfaceHandle: KUSB_HANDLE; + const SetupPacket: WINUSB_SETUP_PACKET_INT64; const PBuffer: PByte; + //optional may be Nil + const BufferLength: Cardinal; const LengthTransferred: PCardinal; + //Optional may be Nil + const Overlapped: POverlapped //Optional + ): Bool; stdcall; + + KUSB_SetPowerPolicy = function(const InterfaceHandle: KUSB_HANDLE; + const PolicyType: Cardinal; const ValueLength: Cardinal; const Value) + : Bool; stdcall; + + KUSB_GetPowerPolicy = function(const InterfaceHandle: KUSB_HANDLE; + const PolicyType: Cardinal; var ValueLength: Cardinal; + //Input: Size of Value, output : copied bytes + var Value): Bool; stdcall; + + KUSB_SetConfiguration = function(const InterfaceHandle: KUSB_HANDLE; + const ConfigurationNumber: Byte): Bool; stdcall; + + KUSB_GetConfiguration = function(const InterfaceHandle: KUSB_HANDLE; + var ConfigurationNumber: Byte): Bool; stdcall; + + KUSB_ResetDevice = function(const InterfaceHandle: KUSB_HANDLE) + : Bool; stdcall; + + KUSB_Initialize = function(const DeviceHandle: KUSB_HANDLE; + var InterfaceHandle: KUSB_HANDLE): Bool; stdcall; + + KUSB_SelectInterface = function(const InterfaceHandle: KUSB_HANDLE; + const NumberOrIndex: Byte; const IsIndex: Bool): Bool; stdcall; + + KUSB_GetAssociatedInterface = function(const InterfaceHandle: KUSB_HANDLE; + const AssociatedInterfaceIndex: Byte; + var AssociatedInterfaceHandle: KUSB_HANDLE): Bool; stdcall; + + KUSB_Clone = function(const InterfaceHandle: KUSB_HANDLE; + var DstInterfaceHandle: KUSB_HANDLE): Bool; stdcall; + + KUSB_QueryInterfaceSettings = function(const InterfaceHandle: KUSB_HANDLE; + const AltSettingNumber: Byte; + var UsbAltInterfaceDescriptor: USB_INTERFACE_DESCRIPTOR): Bool; stdcall; + + KUSB_QueryDeviceInformation = function(const InterfaceHandle: KUSB_HANDLE; + const InformationType: Cardinal; var BufferLength: Cardinal; + // Input: Length of Buffer, copied Bytes in Buffer + var Buffer): Bool; stdcall; + + KUSB_SetCurrentAlternateSetting = function(const InterfaceHandle + : KUSB_HANDLE; const AltSettingNumber: Byte): Bool; stdcall; + + KUSB_GetCurrentAlternateSetting = function(const InterfaceHandle + : KUSB_HANDLE; var AltSettingNumber: Byte): Bool; stdcall; + + KUSB_QueryPipe = function(const InterfaceHandle: KUSB_HANDLE; + const AltSettingNumber: Byte; const PipeIndex: Byte; + var PipeInformation: WINUSB_PIPE_INFORMATION): Bool; stdcall; + + KUSB_SetPipePolicy = function(const InterfaceHandle: KUSB_HANDLE; + const PipeId: Byte; const PolicyType: Cardinal; + const ValueLength: Cardinal; const Value): Bool; stdcall; + + KUSB_GetPipePolicy = function(const InterfaceHandle: KUSB_HANDLE; + const PipeId: Byte; const PolicyType: Cardinal; var ValueLength: Cardinal; + // Input: Length of Value, copied Bytes in Value + var Value): Bool; stdcall; + + KUSB_ReadPipe = function(const InterfaceHandle: KUSB_HANDLE; + const PipeId: Byte; var Buffer; const BufferLength: Cardinal; + const LengthTransferred: PCardinal; // optional may be Nil + const Overlapped: POverlapped //Optional + ): Bool; stdcall; + + KUSB_WritePipe = function(const InterfaceHandle: KUSB_HANDLE; + const PipeId: Byte; const Buffer; const BufferLength: Cardinal; + const LengthTransferred: PCardinal; // optional may be Nil + const Overlapped: POverlapped //Optional + ): Bool; stdcall; + + KUSB_ResetPipe = function(const InterfaceHandle: KUSB_HANDLE; + const PipeId: Byte): Bool; stdcall; + + KUSB_AbortPipe = function(const InterfaceHandle: KUSB_HANDLE; + const PipeId: Byte): Bool; stdcall; + + KUSB_FlushPipe = function(const InterfaceHandle: KUSB_HANDLE; + const PipeId: Byte): Bool; stdcall; + + KUSB_IsoReadPipe = function(const InterfaceHandle: KUSB_HANDLE; + const PipeId: Byte; var Buffer; const BufferLength: Cardinal; + const Overlapped: POverlapped; //Optional + const IsoContext: PKISO_CONTEXT // optional + ): Bool; stdcall; + + KUSB_IsoWritePipe = function(const InterfaceHandle: KUSB_HANDLE; + const PipeId: Byte; const Buffer; const BufferLength: Cardinal; + const Overlapped: POverlapped; //Optional + const IsoContext: PKISO_CONTEXT // optional + ): Bool; stdcall; + + KUSB_GetCurrentFrameNumber = function(const InterfaceHandle: KUSB_HANDLE; + var FrameNumber: Cardinal): Bool; stdcall; + + KUSB_GetOverlappedResult = function(const InterfaceHandle: KUSB_HANDLE; + const lpOverlapped: POverlapped; //Optional + var lpNumberOfBytesTransferred: Cardinal; const bWait: Bool) + : Bool; stdcall; + + KUSB_GetProperty = function(const InterfaceHandle: KUSB_HANDLE; + const PropertyType: KUSB_PROPERTY; var PropertySize: Cardinal; + // Input: Length of Property Buffer, copied Bytes in Property Buffer + var TheProperty + // Parameter name changed, since "property" is a reserved word in Delphi + ): Bool; stdcall; + + // Driver API function set structure. + PKUSB_DRIVER_API = ^KUSB_DRIVER_API; + + KUSB_DRIVER_API = packed record + Info: KUSB_DRIVER_API_INFO; + Init: KUSB_Init; + Free: KUSB_Free; + ClaimInterface: KUSB_ClaimInterface; + ReleaseInterface: KUSB_ReleaseInterface; + SetAltInterface: KUSB_SetAltInterface; + GetAltInterface: KUSB_GetAltInterface; + GetDescriptor: KUSB_GetDescriptor; + ControlTransfer: KUSB_ControlTransfer; + SetPowerPolicy: KUSB_SetPowerPolicy; + GetPowerPolicy: KUSB_GetPowerPolicy; + SetConfiguration: KUSB_SetConfiguration; + GetConfiguration: KUSB_GetConfiguration; + ResetDevice: KUSB_ResetDevice; + Initialize: KUSB_Initialize; + SelectInterface: KUSB_SelectInterface; + GetAssociatedInterface: KUSB_GetAssociatedInterface; + Clone: KUSB_Clone; + QueryInterfaceSettings: KUSB_QueryInterfaceSettings; + QueryDeviceInformation: KUSB_QueryDeviceInformation; + SetCurrentAlternateSetting: KUSB_SetCurrentAlternateSetting; + GetCurrentAlternateSetting: KUSB_GetCurrentAlternateSetting; + QueryPipe: KUSB_QueryPipe; + SetPipePolicy: KUSB_SetPipePolicy; + GetPipePolicy: KUSB_GetPipePolicy; + ReadPipe: KUSB_ReadPipe; + WritePipe: KUSB_WritePipe; + ResetPipe: KUSB_ResetPipe; + AbortPipe: KUSB_AbortPipe; + FlushPipe: KUSB_FlushPipe; + IsoReadPipe: KUSB_IsoReadPipe; + IsoWritePipe: KUSB_IsoWritePipe; + GetCurrentFrameNumber: KUSB_GetCurrentFrameNumber; + GetOverlappedResult: KUSB_GetOverlappedResult; + GetProperty: KUSB_GetProperty; + // fixed structure padding. + z_F_i_x_e_d: array [0 .. 512 - SizeOf(KUSB_DRIVER_API_INFO) - + (SizeOf(pointer) * Ord(KUSB_FNID_COUNT)) - 1] of Byte; + end; + + // StmK + + type + + KSTM_FLAG = Cardinal; + + KSTM_COMPLETE_RESULT = Cardinal; + + const + + KSTM_FLAG_NONE = 0; + KSTM_FLAG_USE_TIMEOUT = $80000000; + KSTM_FLAG_NO_PARTIAL_XFERS = $00100000; + KSTM_FLAG_TIMEOUT_MASK = $0001FFFF; + + KSTM_COMPLETE_RESULT_VALID = 0; + KSTM_COMPLETE_RESULT_INVALID = 1; + + type + + PKSTM_XFER_CONTEXT = ^KSTM_XFER_CONTEXT; + + KSTM_XFER_CONTEXT = packed record + Buffer: PByte; + BufferSize: Integer; + TransferLength: Integer; + UserState: pointer; + end; + + PKSTM_INFO = ^KSTM_INFO; + + KSTM_INFO = packed record + UsbHandle: KUSB_HANDLE; + PipeId: Byte; + MaxPendingTransfers: Integer; + MaxTransferSize: Integer; + MaxPendingIO: Integer; + EndpointDescriptor: USB_ENDPOINT_DESCRIPTOR; + DriverAPI: KUSB_DRIVER_API; + DeviceHandle: THandle; + StreamHandle: KSTM_HANDLE; + UserState: pointer; + end; + + PInteger = ^Integer; + + KSTM_ERROR_CB = function(const StreamInfo: PKSTM_INFO; + const XferContext: PKSTM_XFER_CONTEXT; const XferContextIndex: Integer; + const ErrorCode: Integer): Integer; stdcall; + KSTM_SUBMIT_CB = function(const StreamInfo: PKSTM_INFO; + const XferContext: PKSTM_XFER_CONTEXT; const XferContextIndex: Integer; + Overlapped: POverlapped): Integer; stdcall; + KSTM_STARTED_CB = function(const StreamInfo: PKSTM_INFO; + const XferContext: PKSTM_XFER_CONTEXT; const XferContextIndex: Integer) + : Integer; stdcall; + KSTM_STOPPED_CB = function(const StreamInfo: PKSTM_INFO; + const XferContext: PKSTM_XFER_CONTEXT; const XferContextIndex: Integer) + : Integer; stdcall; + KSTM_COMPLETE_CB = function(const StreamInfo: PKSTM_INFO; + const XferContext: PKSTM_XFER_CONTEXT; const XferContextIndex: Integer; + const ErrorCode: Integer): Integer; stdcall; + KSTM_BEFORE_COMPLETE_CB = function(const StreamInfo: PKSTM_INFO; + const XferContext: PKSTM_XFER_CONTEXT; const XferContextIndex: Integer; + const ErrorCode: PInteger): KSTM_COMPLETE_RESULT; stdcall; + + PKSTM_CALLBACK = ^KSTM_CALLBACK; + + KSTM_CALLBACK = packed record + Error: KSTM_ERROR_CB; + Submit: KSTM_SUBMIT_CB; + Complete: KSTM_COMPLETE_CB; + Started: KSTM_STARTED_CB; + Stopped: KSTM_STOPPED_CB; + BeforeComplete: KSTM_BEFORE_COMPLETE_CB; + z_F_i_x_e_d: array [0 .. (64 - SizeOf(pointer) * 6) - 1] of Byte; + end; + + KOVL_POOL_FLAG = (KOVL_POOL_FLAG_NONE); + KOVL_WAIT_FLAG = Cardinal; + + const + + KOVL_WAIT_FLAG_NONE = 0; + KOVL_WAIT_FLAG_RELEASE_ON_SUCCESS = $0001; + KOVL_WAIT_FLAG_RELEASE_ON_FAIL = $0002; + KOVL_WAIT_FLAG_RELEASE_ON_SUCCESS_FAIL = $0003; + KOVL_WAIT_FLAG_CANCEL_ON_TIMEOUT = $0004; + KOVL_WAIT_FLAG_RELEASE_ON_TIMEOUT = $000C; + KOVL_WAIT_FLAG_RELEASE_ALWAYS = $000F; + KOVL_WAIT_FLAG_ALERTABLE = $0010; + + var + + DllAvailable: Boolean; + + {$IFDEF DynamicLink} + + var + + HLIBUSBKDll: THandle; + + HotK_Init: function(var Handle: KHOT_HANDLE; const InitParams: PKHOT_PARAMS) + : Bool; stdcall; + HotK_Free: function(const Handle: KHOT_HANDLE): Bool; stdcall; + HotK_FreeAll: procedure; stdcall; + IsoK_EnumPackets: function(const IsoContext: PKISO_CONTEXT; + const EnumPackets: KISO_ENUM_PACKETS_CB; const StartPacketIndex: Integer; + const UserState): Bool; stdcall; + IsoK_Free: function(const IsoContext: PKISO_CONTEXT): Bool; stdcall; + IsoK_GetPacket: function(const IsoContext: PKISO_CONTEXT; + const PacketIndex: Integer; const IsoPacket: PKISO_PACKET): Bool; stdcall; + IsoK_Init: function(var IsoContext: PKISO_CONTEXT; + const NumberOfPackets: Integer; const StartFrame: Integer): Bool; stdcall; + IsoK_ReUse: function(const IsoContext: PKISO_CONTEXT): Bool; stdcall; + IsoK_SetPacket: function(const IsoContext: PKISO_CONTEXT; + const PacketIndex: Integer; const IsoPacket: PKISO_PACKET): Bool; stdcall; + IsoK_SetPackets: function(const IsoContext: PKISO_CONTEXT; + const PacketSize: Integer): Bool; stdcall; + LibK_CopyDriverAPI: function: Bool; stdcall; + LibK_GetContext: function(const Handle: KLIB_HANDLE; + const HandleType: KLIB_HANDLE_TYPE): KLIB_USER_CONTEXT; stdcall; + LibK_GetProcAddress: function: Bool; stdcall; + LibK_GetVersion: function: Bool; stdcall; + LibK_LoadDriverAPI: function(var DriverAPI: KUSB_DRIVER_API; + const DriverID: Integer): Bool; stdcall; + LibK_SetCleanupCallback: function: Bool; stdcall; + LibK_SetContext: function(const Handle: KLIB_HANDLE; + const HandleType: KLIB_HANDLE_TYPE; const ContextValue: KLIB_USER_CONTEXT) + : Bool; stdcall; + LibK_SetDefaultContext: function(const HandleType: KLIB_HANDLE_TYPE; + const UserContext: KLIB_USER_CONTEXT): Bool; stdcall; + LibK_GetDefaultContext: function(const HandleType: KLIB_HANDLE_TYPE) + : KLIB_USER_CONTEXT; stdcall; + LstK_AttachInfo: function: Bool; stdcall; + LstK_Clone: function(const InterfaceHandle: KUSB_HANDLE; + var DstInterfaceHandle: KUSB_HANDLE): Bool; stdcall; + LstK_CloneInfo: function: Bool; stdcall; + LstK_Count: function(const DeviceList: KLST_HANDLE; var Count: Cardinal) + : Bool; stdcall; + LstK_Current: function: Bool; stdcall; + LstK_DetachInfo: function: Bool; stdcall; + LstK_Enumerate: function: Bool; stdcall; + LstK_FindByVidPid: function(const DeviceList: KLST_HANDLE; + const Vid: Integer; const Pid: Integer; + var DeviceInfo: KLST_DEVINFO_HANDLE): Bool; stdcall; + LstK_Free: function(const DeviceList: KLST_HANDLE): Bool; stdcall; + LstK_FreeInfo: function: Bool; stdcall; + LstK_Init: function(var DeviceList: KLST_HANDLE; const Flags: KLST_FLAG) + : Bool; stdcall; + LstK_InitEx: function(var DeviceList: KLST_HANDLE; const Flags: KLST_FLAG; + const PatternMatch: PKLST_PATTERN_MATCH): Bool; stdcall; + LstK_MoveNext: function(const DeviceList: KLST_HANDLE; + var DevInfo: KLST_DEVINFO_HANDLE): Bool; stdcall; + LstK_MoveReset: function(const DeviceList: KLST_HANDLE): Bool; stdcall; + LstK_Sync: function: Bool; stdcall; + OvlK_Acquire: function(var OverlappedK: KOVL_HANDLE; + const PoolHandle: KOVL_POOL_HANDLE): Bool; stdcall; + OvlK_Free: function(const PoolHandle: KOVL_POOL_HANDLE): Bool; stdcall; + OvlK_GetEventHandle: function: Bool; stdcall; + OvlK_Init: function(var PoolHandle: KOVL_POOL_HANDLE; + const UsbHandle: KUSB_HANDLE; const MaxOverlappedCount: Integer; + const Flags: KOVL_POOL_FLAG): Bool; stdcall; + OvlK_IsComplete: function: Bool; stdcall; + OvlK_ReUse: function(const OverlappedK: KOVL_HANDLE): Bool; stdcall; + OvlK_Release: function(const OverlappedK: KOVL_HANDLE): Bool; stdcall; + OvlK_Wait: function(const OverlappedK: KOVL_HANDLE; + const TimeoutMS: Integer; const WaitFlags: KOVL_WAIT_FLAG; + var TransferredLength: Cardinal): Bool; stdcall; + OvlK_WaitOldest: function(const PoolHandle: KOVL_POOL_HANDLE; + var OverlappedK: KOVL_HANDLE; const TimeoutMS: Integer; + const WaitFlags: KOVL_WAIT_FLAG; var TransferredLength: Cardinal) + : Bool; stdcall; + OvlK_WaitAndRelease: function(const OverlappedK: KOVL_HANDLE; + const TimeoutMS: Integer; var TransferredLength: Cardinal): Bool; stdcall; + OvlK_WaitOrCancel: function(const OverlappedK: KOVL_HANDLE; + const TimeoutMS: Integer; var TransferredLength: Cardinal): Bool; stdcall; + StmK_Free: function(const StreamHandle: KSTM_HANDLE): Bool; stdcall; + StmK_Init: function(var StreamHandle: KSTM_HANDLE; + const UsbHandle: KUSB_HANDLE; const PipeId: Byte; + const MaxTransferSize: Integer; const MaxPendingTransfers: Integer; + const MaxPendingIO: Integer; const Callbacks: PKSTM_CALLBACK; + const Flags: KSTM_FLAG): Bool; stdcall; + StmK_Read: function(const StreamHandle: KSTM_HANDLE; var Buffer; + const Offset: Integer; const Length: Integer; + var TransferredLength: Cardinal): Bool; stdcall; + StmK_Start: function(const StreamHandle: KSTM_HANDLE): Bool; stdcall; + StmK_Stop: function(const StreamHandle: KSTM_HANDLE; + const TimeoutCancelMS: Integer): Bool; stdcall; + StmK_Write: function(const StreamHandle: KSTM_HANDLE; const Buffer; + const Offset: Integer; const Length: Integer; + var TransferredLength: Cardinal): Bool; stdcall; + UsbK_AbortPipe: function(const InterfaceHandle: KUSB_HANDLE; + const PipeId: Byte): Bool; stdcall; + UsbK_ClaimInterface: function(const InterfaceHandle: KUSB_HANDLE; + const NumberOrIndex: Byte; const IsIndex: Bool): Bool; stdcall; + UsbK_Clone: function(const InterfaceHandle: KUSB_HANDLE; + var DstInterfaceHandle: KUSB_HANDLE): Bool; stdcall; + UsbK_ControlTransfer: function(const InterfaceHandle: KUSB_HANDLE; + const SetupPacket: WINUSB_SETUP_PACKET_INT64; var Buffer; + const BufferLength: Cardinal; const LengthTransferred: PCardinal; + //Optional may be Nil + const Overlapped: POverlapped): Bool; stdcall; + UsbK_FlushPipe: function: Bool; stdcall; + UsbK_Free: function(const InterfaceHandle: KUSB_HANDLE): Bool; stdcall; + UsbK_GetAltInterface: function(const InterfaceHandle: KUSB_HANDLE; + const NumberOrIndex: Byte; const IsIndex: Bool; + var AltSettingNumber: Byte): Bool; stdcall; + UsbK_GetAssociatedInterface: function: Bool; stdcall; + UsbK_GetConfiguration: function: Bool; stdcall; + UsbK_GetCurrentAlternateSetting: function: Bool; stdcall; + UsbK_GetCurrentFrameNumber: function(const InterfaceHandle: KUSB_HANDLE; + var FrameNumber: Cardinal): Bool; stdcall; + UsbK_GetDescriptor: function(const InterfaceHandle: KUSB_HANDLE; + const DescriptorType: Byte; const Index: Byte; const LanguageID: Word; + var Buffer; const BufferLength: Cardinal; var LengthTransferred: Cardinal) + : Bool; stdcall; + UsbK_GetOverlappedResult: function: Bool; stdcall; + UsbK_GetPipePolicy: function: Bool; stdcall; + UsbK_GetPowerPolicy: function: Bool; stdcall; + UsbK_GetProperty: function: Bool; stdcall; + UsbK_Init: function(var InterfaceHandle: KUSB_HANDLE; + const DevInfo: KLST_DEVINFO_HANDLE): Bool; stdcall; + UsbK_Initialize: function: Bool; stdcall; + UsbK_IsoReadPipe: function(const InterfaceHandle: KUSB_HANDLE; + const PipeId: Byte; var Buffer; const BufferLength: Cardinal; + const Overlapped: POverlapped; const IsoContext: PKISO_CONTEXT) + : Bool; stdcall; + UsbK_IsoWritePipe: function: Bool; stdcall; + UsbK_QueryDeviceInformation: function: Bool; stdcall; + UsbK_QueryInterfaceSettings: function(const InterfaceHandle: KUSB_HANDLE; + const AltSettingNumber: Byte; + var UsbAltInterfaceDescriptor: USB_INTERFACE_DESCRIPTOR): Bool; stdcall; + UsbK_QueryPipe: function(const InterfaceHandle: KUSB_HANDLE; + const AltSettingNumber: Byte; const PipeIndex: Byte; + var PipeInformation: WINUSB_PIPE_INFORMATION): Bool; stdcall; + UsbK_ReadPipe: function(const InterfaceHandle: KUSB_HANDLE; + const PipeId: Byte; var Buffer; const BufferLength: Cardinal; + const LengthTransferred: PCardinal; //Optional may be Nil + const Overlapped: POverlapped): Bool; stdcall; + UsbK_ReleaseInterface: function(const InterfaceHandle: KUSB_HANDLE; + const NumberOrIndex: Byte; const IsIndex: Bool): Bool; stdcall; + UsbK_ResetDevice: function: Bool; stdcall; + UsbK_ResetPipe: function(const InterfaceHandle: KUSB_HANDLE; + const PipeId: Byte): Bool; stdcall; + UsbK_SelectInterface: function(const InterfaceHandle: KUSB_HANDLE; + const NumberOrIndex: Byte; const IsIndex: Bool): Bool; stdcall; + UsbK_SetAltInterface: function(const InterfaceHandle: KUSB_HANDLE; + const NumberOrIndex: Byte; const IsIndex: Bool; + const AltSettingNumber: Byte): Bool; stdcall; + UsbK_SetConfiguration: function(const InterfaceHandle: KUSB_HANDLE; + const ConfigurationNumber: Byte): Bool; stdcall; + UsbK_SetCurrentAlternateSetting + : function(const InterfaceHandle: KUSB_HANDLE; + const AltSettingNumber: Byte): Bool; stdcall; + UsbK_SetPipePolicy: function(const InterfaceHandle: KUSB_HANDLE; + const PipeId: Byte; const PolicyType: Cardinal; + const ValueLength: Cardinal; const Value): Bool; stdcall; + UsbK_SetPowerPolicy: function: Bool; stdcall; + + UsbK_WritePipe: function(const InterfaceHandle: KUSB_HANDLE; + const PipeId: Byte; var Buffer; const BufferLength: Cardinal; + const LengthTransferred: PCardinal; + const Overlapped: POverlapped): Bool; stdcall; + + WinUsb_AbortPipe: function: Bool; stdcall; + WinUsb_ControlTransfer: function: Bool; stdcall; + WinUsb_FlushPipe: function: Bool; stdcall; + WinUsb_Free: function: Bool; stdcall; + WinUsb_GetAssociatedInterface: function: Bool; stdcall; + WinUsb_GetCurrentAlternateSetting: function: Bool; stdcall; + WinUsb_GetDescriptor: function: Bool; stdcall; + WinUsb_GetOverlappedResult: function: Bool; stdcall; + WinUsb_GetPipePolicy: function: Bool; stdcall; + WinUsb_GetPowerPolicy: function: Bool; stdcall; + WinUsb_Initialize: function: Bool; stdcall; + WinUsb_QueryDeviceInformation: function: Bool; stdcall; + WinUsb_QueryInterfaceSettings: function: Bool; stdcall; + WinUsb_QueryPipe: function: Bool; stdcall; + WinUsb_ReadPipe: function: Bool; stdcall; + WinUsb_ResetPipe: function: Bool; stdcall; + WinUsb_SetCurrentAlternateSetting: function: Bool; stdcall; + WinUsb_SetPipePolicy: function: Bool; stdcall; + WinUsb_SetPowerPolicy: function: Bool; stdcall; + WinUsb_WritePipe: function: Bool; stdcall; + + {$ELSE} + function HotK_Init(var Handle: KHOT_HANDLE; const InitParams: PKHOT_PARAMS) + : Bool; stdcall; external LIBUSBK_DLL name 'HotK_Init'; + function HotK_Free(const Handle: KHOT_HANDLE): Bool; stdcall; + external LIBUSBK_DLL name 'HotK_Free'; + procedure HotK_FreeAll; stdcall; external LIBUSBK_DLL name 'HotK_FreeAll'; + function IsoK_EnumPackets(const IsoContext: PKISO_CONTEXT; + const EnumPackets: KISO_ENUM_PACKETS_CB; const StartPacketIndex: Integer; + const UserState): Bool; stdcall; + external LIBUSBK_DLL name 'IsoK_EnumPackets'; + function IsoK_Free(const IsoContext: PKISO_CONTEXT): Bool; stdcall; + external LIBUSBK_DLL name 'IsoK_Free'; + function IsoK_GetPacket(const IsoContext: PKISO_CONTEXT; + const PacketIndex: Integer; const IsoPacket: PKISO_PACKET): Bool; stdcall; + external LIBUSBK_DLL name 'IsoK_GetPacket'; + function IsoK_Init(var IsoContext: PKISO_CONTEXT; + const NumberOfPackets: Integer; const StartFrame: Integer): Bool; stdcall; + external LIBUSBK_DLL name 'IsoK_Init'; + function IsoK_ReUse(const IsoContext: PKISO_CONTEXT): Bool; stdcall; + external LIBUSBK_DLL name 'IsoK_ReUse'; + function IsoK_SetPacket(const IsoContext: PKISO_CONTEXT; + const PacketIndex: Integer; const IsoPacket: PKISO_PACKET): Bool; stdcall; + external LIBUSBK_DLL name 'IsoK_SetPacket'; + function IsoK_SetPackets(const IsoContext: PKISO_CONTEXT; + const PacketSize: Integer): Bool; stdcall; + external LIBUSBK_DLL name 'IsoK_SetPackets'; + function LibK_CopyDriverAPI: Bool; stdcall; + external LIBUSBK_DLL name 'LibK_CopyDriverAPI'; + function LibK_GetContext(const Handle: KLIB_HANDLE; + const HandleType: KLIB_HANDLE_TYPE): KLIB_USER_CONTEXT; stdcall; + external LIBUSBK_DLL name 'LibK_GetContext'; + function LibK_GetProcAddress: Bool; stdcall; + external LIBUSBK_DLL name 'LibK_GetProcAddress'; + function LibK_GetVersion: Bool; stdcall; + external LIBUSBK_DLL name 'LibK_GetVersion'; + function LibK_LoadDriverAPI(var DriverAPI: KUSB_DRIVER_API; + const DriverID: Integer): Bool; stdcall; + external LIBUSBK_DLL name 'LibK_LoadDriverAPI'; + function LibK_SetCleanupCallback: Bool; stdcall; + external LIBUSBK_DLL name 'LibK_SetCleanupCallback'; + function LibK_SetContext(const Handle: KLIB_HANDLE; + const HandleType: KLIB_HANDLE_TYPE; const ContextValue: KLIB_USER_CONTEXT) + : Bool; stdcall; external LIBUSBK_DLL name 'LibK_SetContext'; + function LibK_SetDefaultContext(const HandleType: KLIB_HANDLE_TYPE; + const UserContext: KLIB_USER_CONTEXT): Bool; stdcall; + external LIBUSBK_DLL name 'LibK_SetDefaultContext'; + function LibK_GetDefaultContext(const HandleType: KLIB_HANDLE_TYPE) + : KLIB_USER_CONTEXT; stdcall; + external LIBUSBK_DLL name 'LibK_GetDefaultContext'; + function LstK_AttachInfo: Bool; stdcall; + external LIBUSBK_DLL name 'LstK_AttachInfo'; + function LstK_Clone(const InterfaceHandle: KUSB_HANDLE; + var DstInterfaceHandle: KUSB_HANDLE): Bool; stdcall; + external LIBUSBK_DLL name 'LstK_Clone'; + function LstK_CloneInfo: Bool; stdcall; + external LIBUSBK_DLL name 'LstK_CloneInfo'; + function LstK_Count(const DeviceList: KLST_HANDLE; var Count: Cardinal): Bool; + stdcall; external LIBUSBK_DLL name 'LstK_Count'; + function LstK_Current: Bool; stdcall; + external LIBUSBK_DLL name 'LstK_Current'; + function LstK_DetachInfo: Bool; stdcall; + external LIBUSBK_DLL name 'LstK_Current'; + function LstK_Enumerate: Bool; stdcall; + external LIBUSBK_DLL name 'LstK_Enumerate'; + function LstK_FindByVidPid(const DeviceList: KLST_HANDLE; const Vid: Integer; + const Pid: Integer; var DeviceInfo: KLST_DEVINFO_HANDLE): Bool; stdcall; + external LIBUSBK_DLL name 'LstK_FindByVidPid'; + function LstK_Free(const DeviceList: KLST_HANDLE): Bool; stdcall; + external LIBUSBK_DLL name 'LstK_Free'; + function LstK_FreeInfo: Bool; stdcall; + external LIBUSBK_DLL name 'LstK_FreeInfo'; + function LstK_Init(var DeviceList: KLST_HANDLE; const Flags: KLST_FLAG): Bool; + stdcall; external LIBUSBK_DLL name 'LstK_Init'; + function LstK_InitEx(var DeviceList: KLST_HANDLE; const Flags: KLST_FLAG; + const PatternMatch: PKLST_PATTERN_MATCH): Bool; stdcall; + external LIBUSBK_DLL name 'LstK_InitEx'; + function LstK_MoveNext(const DeviceList: KLST_HANDLE; + var DevInfo: KLST_DEVINFO_HANDLE): Bool; stdcall; + external LIBUSBK_DLL name 'LstK_MoveNext'; + function LstK_MoveReset(const DeviceList: KLST_HANDLE): Bool; stdcall; + external LIBUSBK_DLL name 'LstK_MoveReset'; + function LstK_Sync: Bool; stdcall; external LIBUSBK_DLL name 'LstK_Sync'; + function OvlK_Acquire(var OverlappedK: KOVL_HANDLE; + const PoolHandle: KOVL_POOL_HANDLE): Bool; stdcall; + external LIBUSBK_DLL name 'OvlK_Acquire'; + function OvlK_Free(const PoolHandle: KOVL_POOL_HANDLE): Bool; stdcall; + external LIBUSBK_DLL name 'OvlK_Free'; + function OvlK_GetEventHandle: Bool; stdcall; + external LIBUSBK_DLL name 'OvlK_GetEventHandle'; + function OvlK_Init(var PoolHandle: KOVL_POOL_HANDLE; + const UsbHandle: KUSB_HANDLE; const MaxOverlappedCount: Integer; + const Flags: KOVL_POOL_FLAG): Bool; stdcall; + external LIBUSBK_DLL name 'OvlK_Init'; + function OvlK_IsComplete: Bool; stdcall; + external LIBUSBK_DLL name 'OvlK_IsComplete'; + function OvlK_ReUse(const OverlappedK: KOVL_HANDLE): Bool; stdcall; + external LIBUSBK_DLL name 'OvlK_ReUse'; + function OvlK_Release(const OverlappedK: KOVL_HANDLE): Bool; stdcall; + external LIBUSBK_DLL name 'OvlK_Release'; + function OvlK_Wait(const OverlappedK: KOVL_HANDLE; const TimeoutMS: Integer; + const WaitFlags: KOVL_WAIT_FLAG; var TransferredLength: Cardinal): Bool; + stdcall; external LIBUSBK_DLL name 'OvlK_Wait'; + function OvlK_WaitOldest(const PoolHandle: KOVL_POOL_HANDLE; + var OverlappedK: KOVL_HANDLE; const TimeoutMS: Integer; + const WaitFlags: KOVL_WAIT_FLAG; var TransferredLength: Cardinal): Bool; + stdcall; external LIBUSBK_DLL name 'OvlK_WaitOldest'; + function OvlK_WaitAndRelease(const OverlappedK: KOVL_HANDLE; + const TimeoutMS: Integer; var TransferredLength: Cardinal): Bool; stdcall; + external LIBUSBK_DLL name 'OvlK_WaitAndRelease'; + function OvlK_WaitOrCancel(const OverlappedK: KOVL_HANDLE; + const TimeoutMS: Integer; var TransferredLength: Cardinal): Bool; stdcall; + external LIBUSBK_DLL name 'OvlK_WaitOrCancel'; + function StmK_Free(const StreamHandle: KSTM_HANDLE): Bool; stdcall; + external LIBUSBK_DLL name 'StmK_Free'; + function StmK_Init(var StreamHandle: KSTM_HANDLE; + const UsbHandle: KUSB_HANDLE; const PipeId: Byte; + const MaxTransferSize: Integer; const MaxPendingTransfers: Integer; + const MaxPendingIO: Integer; const Callbacks: PKSTM_CALLBACK; + const Flags: KSTM_FLAG): Bool; stdcall; + external LIBUSBK_DLL name 'StmK_Init'; + function StmK_Read(const StreamHandle: KSTM_HANDLE; var Buffer; + const Offset: Integer; const Length: Integer; + var TransferredLength: Cardinal): Bool; stdcall; + external LIBUSBK_DLL name 'StmK_Read'; + function StmK_Start(const StreamHandle: KSTM_HANDLE): Bool; stdcall; + external LIBUSBK_DLL name 'StmK_Start'; + function StmK_Stop(const StreamHandle: KSTM_HANDLE; + const TimeoutCancelMS: Integer): Bool; stdcall; + external LIBUSBK_DLL name 'StmK_Stop'; + function StmK_Write(const StreamHandle: KSTM_HANDLE; const Buffer; + const Offset: Integer; const Length: Integer; + var TransferredLength: Cardinal): Bool; stdcall; + external LIBUSBK_DLL name 'StmK_Write'; + function UsbK_AbortPipe(const InterfaceHandle: KUSB_HANDLE; + const PipeId: Byte): Bool; stdcall; + external LIBUSBK_DLL name 'UsbK_AbortPipe'; + function UsbK_ClaimInterface(const InterfaceHandle: KUSB_HANDLE; + const NumberOrIndex: Byte; const IsIndex: Bool): Bool; stdcall; + external LIBUSBK_DLL name 'UsbK_ClaimInterface'; + function UsbK_Clone(const InterfaceHandle: KUSB_HANDLE; + var DstInterfaceHandle: KUSB_HANDLE): Bool; stdcall; + external LIBUSBK_DLL name 'UsbK_Clone'; + function UsbK_ControlTransfer(const InterfaceHandle: KUSB_HANDLE; + const SetupPacket: WINUSB_SETUP_PACKET_INT64; var Buffer; + const BufferLength: Cardinal; const LengthTransferred: PCardinal; + //Optional may be Nil + const Overlapped: POverlapped): Bool; stdcall; + external LIBUSBK_DLL name 'UsbK_ControlTransfer'; + function UsbK_FlushPipe: Bool; stdcall; + external LIBUSBK_DLL name 'UsbK_FlushPipe'; + function UsbK_Free(const InterfaceHandle: KUSB_HANDLE): Bool; stdcall; + external LIBUSBK_DLL name 'UsbK_Free'; + function UsbK_GetAltInterface(const InterfaceHandle: KUSB_HANDLE; + const NumberOrIndex: Byte; const IsIndex: Bool; var AltSettingNumber: Byte) + : Bool; stdcall; external LIBUSBK_DLL name 'UsbK_GetAltInterface'; + function UsbK_GetAssociatedInterface: Bool; stdcall; + external LIBUSBK_DLL name 'UsbK_GetAssociatedInterface'; + function UsbK_GetConfiguration: Bool; stdcall; + external LIBUSBK_DLL name 'UsbK_GetConfiguration'; + function UsbK_GetCurrentAlternateSetting: Bool; stdcall; + external LIBUSBK_DLL name 'UsbK_GetCurrentAlternateSetting'; + function UsbK_GetCurrentFrameNumber(const InterfaceHandle: KUSB_HANDLE; + var FrameNumber: Cardinal): Bool; stdcall; + external LIBUSBK_DLL name 'UsbK_GetCurrentFrameNumber'; + function UsbK_GetDescriptor(const InterfaceHandle: KUSB_HANDLE; + const DescriptorType: Byte; const Index: Byte; const LanguageID: Word; + var Buffer; const BufferLength: Cardinal; var LengthTransferred: Cardinal) + : Bool; stdcall; external LIBUSBK_DLL name 'UsbK_GetDescriptor'; + function UsbK_GetOverlappedResult: Bool; stdcall; + external LIBUSBK_DLL name 'UsbK_GetOverlappedResult'; + function UsbK_GetPipePolicy: Bool; stdcall; + external LIBUSBK_DLL name 'UsbK_GetPipePolicy'; + function UsbK_GetPowerPolicy: Bool; stdcall; + external LIBUSBK_DLL name 'UsbK_GetPowerPolicy'; + function UsbK_GetProperty: Bool; stdcall; + external LIBUSBK_DLL name 'UsbK_GetProperty'; + function UsbK_Init(var InterfaceHandle: KUSB_HANDLE; + const DevInfo: KLST_DEVINFO_HANDLE): Bool; stdcall; + external LIBUSBK_DLL name 'UsbK_Init'; + function UsbK_Initialize: Bool; stdcall; + external LIBUSBK_DLL name 'UsbK_Initialize'; + function UsbK_IsoReadPipe(const InterfaceHandle: KUSB_HANDLE; + const PipeId: Byte; var Buffer; const BufferLength: Cardinal; + const Overlapped: POverlapped; const IsoContext: PKISO_CONTEXT): Bool; + stdcall; external LIBUSBK_DLL name 'UsbK_IsoReadPipe'; + function UsbK_IsoWritePipe: Bool; stdcall; + external LIBUSBK_DLL name 'UsbK_IsoWritePipe'; + function UsbK_QueryDeviceInformation: Bool; stdcall; + external LIBUSBK_DLL name 'UsbK_QueryDeviceInformation'; + function UsbK_QueryInterfaceSettings(const InterfaceHandle: KUSB_HANDLE; + const AltSettingNumber: Byte; + var UsbAltInterfaceDescriptor: USB_INTERFACE_DESCRIPTOR): Bool; stdcall; + external LIBUSBK_DLL name 'UsbK_QueryInterfaceSettings'; + function UsbK_QueryPipe(const InterfaceHandle: KUSB_HANDLE; + const AltSettingNumber: Byte; const PipeIndex: Byte; + var PipeInformation: WINUSB_PIPE_INFORMATION): Bool; stdcall; + external LIBUSBK_DLL name 'UsbK_QueryPipe'; + function UsbK_ReadPipe(const InterfaceHandle: KUSB_HANDLE; const PipeId: Byte; + var Buffer; const BufferLength: Cardinal; + const LengthTransferred: PCardinal; //Optional may be Nil + const Overlapped: POverlapped): Bool; stdcall; + external LIBUSBK_DLL name 'UsbK_ReadPipe'; + function UsbK_ReleaseInterface(const InterfaceHandle: KUSB_HANDLE; + const NumberOrIndex: Byte; const IsIndex: Bool): Bool; stdcall; + external LIBUSBK_DLL name 'UsbK_ReleaseInterface'; + function UsbK_ResetDevice: Bool; stdcall; + external LIBUSBK_DLL name 'UsbK_ResetDevice'; + function UsbK_ResetPipe(const InterfaceHandle: KUSB_HANDLE; + const PipeId: Byte): Bool; stdcall; + external LIBUSBK_DLL name 'UsbK_ResetPipe'; + function UsbK_SelectInterface(const InterfaceHandle: KUSB_HANDLE; + const NumberOrIndex: Byte; const IsIndex: Bool): Bool; stdcall; + external LIBUSBK_DLL name 'UsbK_SelectInterface'; + function UsbK_SetAltInterface(const InterfaceHandle: KUSB_HANDLE; + const NumberOrIndex: Byte; const IsIndex: Bool; + const AltSettingNumber: Byte): Bool; stdcall; + external LIBUSBK_DLL name 'UsbK_SetAltInterface'; + function UsbK_SetConfiguration(const InterfaceHandle: KUSB_HANDLE; + const ConfigurationNumber: Byte): Bool; stdcall; + external LIBUSBK_DLL name 'UsbK_SetConfiguration'; + function UsbK_SetCurrentAlternateSetting(const InterfaceHandle: KUSB_HANDLE; + const AltSettingNumber: Byte): Bool; stdcall; + external LIBUSBK_DLL name 'UsbK_SetCurrentAlternateSetting'; + function UsbK_SetPipePolicy(const InterfaceHandle: KUSB_HANDLE; + const PipeId: Byte; const PolicyType: Cardinal; const ValueLength: Cardinal; + const Value): Bool; stdcall; external LIBUSBK_DLL name 'UsbK_SetPipePolicy'; + + function UsbK_SetPowerPolicy: Bool; stdcall; + external LIBUSBK_DLL name 'UsbK_SetPowerPolicy'; + + function UsbK_WritePipe(const InterfaceHandle: KUSB_HANDLE; const PipeId: Byte; + var Buffer; const BufferLength: Cardinal; + const LengthTransferred: PCardinal; + const Overlapped: POverlapped): Bool; stdcall; + external LIBUSBK_DLL name 'UsbK_WritePipe'; + + function WinUsb_AbortPipe: Bool; stdcall; + external LIBUSBK_DLL name 'WinUsb_AbortPipe'; + function WinUsb_ControlTransfer: Bool; stdcall; + external LIBUSBK_DLL name 'WinUsb_ControlTransfer'; + function WinUsb_FlushPipe: Bool; stdcall; + external LIBUSBK_DLL name 'WinUsb_FlushPipe'; + function WinUsb_Free: Bool; stdcall; external LIBUSBK_DLL name 'WinUsb_Free'; + function WinUsb_GetAssociatedInterface: Bool; stdcall; + external LIBUSBK_DLL name 'WinUsb_GetAssociatedInterface'; + function WinUsb_GetCurrentAlternateSetting: Bool; stdcall; + external LIBUSBK_DLL name 'WinUsb_GetCurrentAlternateSetting'; + function WinUsb_GetDescriptor: Bool; stdcall; + external LIBUSBK_DLL name 'WinUsb_GetDescriptor'; + function WinUsb_GetOverlappedResult: Bool; stdcall; + external LIBUSBK_DLL name 'WinUsb_GetOverlappedResult'; + function WinUsb_GetPipePolicy: Bool; stdcall; + external LIBUSBK_DLL name 'WinUsb_GetPipePolicy'; + function WinUsb_GetPowerPolicy: Bool; stdcall; + external LIBUSBK_DLL name 'WinUsb_GetPowerPolicy'; + function WinUsb_Initialize: Bool; stdcall; + external LIBUSBK_DLL name 'WinUsb_Initialize'; + function WinUsb_QueryDeviceInformation: Bool; stdcall; + external LIBUSBK_DLL name 'WinUsb_QueryDeviceInformation'; + function WinUsb_QueryInterfaceSettings: Bool; stdcall; + external LIBUSBK_DLL name 'WinUsb_QueryInterfaceSettings'; + function WinUsb_QueryPipe: Bool; stdcall; + external LIBUSBK_DLL name 'WinUsb_QueryPipe'; + function WinUsb_ReadPipe: Bool; stdcall; + external LIBUSBK_DLL name 'WinUsb_ReadPipe'; + function WinUsb_ResetPipe: Bool; stdcall; + external LIBUSBK_DLL name 'WinUsb_ResetPipe'; + function WinUsb_SetCurrentAlternateSetting: Bool; stdcall; + external LIBUSBK_DLL name 'WinUsb_SetCurrentAlternateSetting'; + function WinUsb_SetPipePolicy: Bool; stdcall; + external LIBUSBK_DLL name 'WinUsb_SetPipePolicy'; + function WinUsb_SetPowerPolicy: Bool; stdcall; + external LIBUSBK_DLL name 'WinUsb_SetPowerPolicy'; + function WinUsb_WritePipe: Bool; stdcall; + external LIBUSBK_DLL name 'WinUsb_WritePipe'; + + {$ENDIF} + function GetIsoPacketFromIsoContext(const AIsoContext: PKISO_CONTEXT; + const AIndex: Integer): PKISO_PACKET; + + function UsbK_InitFromDevicePath(const ADevicePath: String; + var InterfaceHandle: KUSB_HANDLE): Boolean; + + function USB_DESCRIPTOR_MAKE_TYPE_AND_INDEX(const DescriptorType: Byte; + const Index: Byte): Word; + +implementation + + function GetIsoPacketFromIsoContext(const AIsoContext: PKISO_CONTEXT; + const AIndex: Integer): PKISO_PACKET; + begin + if not Assigned(AIsoContext) or (AIndex < 0) or + (AIndex >= AIsoContext.NumberOfPackets) then + Result:= Nil + else + Result:= @PKISO_PACKET_ARRAY(@AIsoContext.IsoPackets)^[AIndex]; + // isoCtx.IsoPackets[posPacket]; + end; + + function UsbK_InitFromDevicePath(const ADevicePath: String; + var InterfaceHandle: KUSB_HANDLE): Boolean; + var + deviceCount: Cardinal; + lDeviceList: KLST_HANDLE; + lDeviceInfo: KLST_DEVINFO_HANDLE; + begin + Result:= False; + if not DllAvailable then + Exit; + InterfaceHandle:= Nil; + deviceCount:= 0; + lDeviceList:= Nil; + lDeviceInfo:= Nil; + // Get the device list + if (not LstK_Init(lDeviceList, 0)) then + Exit; + try + LstK_Count(lDeviceList, deviceCount); + if (deviceCount = 0) then + Exit; // List is freed in finally + while LstK_MoveNext(lDeviceList, lDeviceInfo) do + begin + if Assigned(lDeviceInfo) then + begin + if ADevicePath = lDeviceInfo.DevicePath then + begin + if UsbK_Init(InterfaceHandle, lDeviceInfo) then + begin + Result:= True; + Exit; + end; + InterfaceHandle:= Nil; + end; + end; + end; + finally + // If lDeviceList is still assigned than free + if Assigned(lDeviceList) then + LstK_Free(lDeviceList); + end; + end; + + function USB_DESCRIPTOR_MAKE_TYPE_AND_INDEX(const DescriptorType: Byte; + const Index: Byte): Word; + begin + Result:= (Word(DescriptorType) shl 8) or Index; + end; + + function InitDllImport: Boolean; + begin + Result:= False; + {$IFDEF DynamicLink} + HLIBUSBKDll:= LoadLibrary(LIBUSBK_DLL); + if HLIBUSBKDll >= 32 then { success } + begin + HotK_Init:= GetProcAddress(HLIBUSBKDll, 'HotK_Init'); + HotK_Free:= GetProcAddress(HLIBUSBKDll, 'HotK_Free'); + HotK_FreeAll:= GetProcAddress(HLIBUSBKDll, 'HotK_FreeAll'); + IsoK_EnumPackets:= GetProcAddress(HLIBUSBKDll, 'IsoK_EnumPackets'); + IsoK_Free:= GetProcAddress(HLIBUSBKDll, 'IsoK_Free'); + IsoK_GetPacket:= GetProcAddress(HLIBUSBKDll, 'IsoK_GetPacket'); + IsoK_Init:= GetProcAddress(HLIBUSBKDll, 'IsoK_Init'); + IsoK_ReUse:= GetProcAddress(HLIBUSBKDll, 'IsoK_ReUse'); + IsoK_SetPacket:= GetProcAddress(HLIBUSBKDll, 'IsoK_SetPacket'); + IsoK_SetPackets:= GetProcAddress(HLIBUSBKDll, 'IsoK_SetPackets'); + LibK_CopyDriverAPI:= GetProcAddress(HLIBUSBKDll, 'LibK_CopyDriverAPI'); + LibK_GetContext:= GetProcAddress(HLIBUSBKDll, 'LibK_GetContext'); + LibK_GetProcAddress:= GetProcAddress(HLIBUSBKDll, 'LibK_GetProcAddress'); + LibK_GetVersion:= GetProcAddress(HLIBUSBKDll, 'LibK_GetVersion'); + LibK_LoadDriverAPI:= GetProcAddress(HLIBUSBKDll, 'LibK_LoadDriverAPI'); + LibK_SetCleanupCallback:= GetProcAddress(HLIBUSBKDll, + 'LibK_SetCleanupCallback'); + LibK_SetContext:= GetProcAddress(HLIBUSBKDll, 'LibK_SetContext'); + LibK_SetDefaultContext:= GetProcAddress(HLIBUSBKDll, + 'LibK_SetDefaultContext'); + LibK_GetDefaultContext:= GetProcAddress(HLIBUSBKDll, + 'LibK_GetDefaultContext'); + LstK_AttachInfo:= GetProcAddress(HLIBUSBKDll, 'LstK_AttachInfo'); + LstK_Clone:= GetProcAddress(HLIBUSBKDll, 'LstK_Clone'); + LstK_CloneInfo:= GetProcAddress(HLIBUSBKDll, 'LstK_CloneInfo'); + LstK_Count:= GetProcAddress(HLIBUSBKDll, 'LstK_Count'); + LstK_Current:= GetProcAddress(HLIBUSBKDll, 'LstK_Current'); + LstK_DetachInfo:= GetProcAddress(HLIBUSBKDll, 'LstK_DetachInfo'); + LstK_Enumerate:= GetProcAddress(HLIBUSBKDll, 'LstK_Enumerate'); + LstK_FindByVidPid:= GetProcAddress(HLIBUSBKDll, 'LstK_FindByVidPid'); + LstK_Free:= GetProcAddress(HLIBUSBKDll, 'LstK_Free'); + LstK_FreeInfo:= GetProcAddress(HLIBUSBKDll, 'LstK_FreeInfo'); + LstK_Init:= GetProcAddress(HLIBUSBKDll, 'LstK_Init'); + LstK_InitEx:= GetProcAddress(HLIBUSBKDll, 'LstK_InitEx'); + LstK_MoveNext:= GetProcAddress(HLIBUSBKDll, 'LstK_MoveNext'); + LstK_MoveReset:= GetProcAddress(HLIBUSBKDll, 'LstK_MoveReset'); + LstK_Sync:= GetProcAddress(HLIBUSBKDll, 'LstK_Sync'); + OvlK_Acquire:= GetProcAddress(HLIBUSBKDll, 'OvlK_Acquire'); + OvlK_Free:= GetProcAddress(HLIBUSBKDll, 'OvlK_Free'); + OvlK_GetEventHandle:= GetProcAddress(HLIBUSBKDll, 'OvlK_GetEventHandle'); + OvlK_Init:= GetProcAddress(HLIBUSBKDll, 'OvlK_Init'); + OvlK_IsComplete:= GetProcAddress(HLIBUSBKDll, 'OvlK_IsComplete'); + OvlK_ReUse:= GetProcAddress(HLIBUSBKDll, 'OvlK_ReUse'); + OvlK_Release:= GetProcAddress(HLIBUSBKDll, 'OvlK_Release'); + OvlK_Wait:= GetProcAddress(HLIBUSBKDll, 'OvlK_Wait'); + OvlK_WaitOldest:= GetProcAddress(HLIBUSBKDll, 'OvlK_WaitOldest'); + OvlK_WaitAndRelease:= GetProcAddress(HLIBUSBKDll, 'OvlK_WaitAndRelease'); + OvlK_WaitOrCancel:= GetProcAddress(HLIBUSBKDll, 'OvlK_WaitOrCancel'); + StmK_Free:= GetProcAddress(HLIBUSBKDll, 'StmK_Free'); + StmK_Init:= GetProcAddress(HLIBUSBKDll, 'StmK_Init'); + StmK_Read:= GetProcAddress(HLIBUSBKDll, 'StmK_Read'); + StmK_Start:= GetProcAddress(HLIBUSBKDll, 'StmK_Start'); + StmK_Stop:= GetProcAddress(HLIBUSBKDll, 'StmK_Stop'); + StmK_Write:= GetProcAddress(HLIBUSBKDll, 'StmK_Write'); + UsbK_AbortPipe:= GetProcAddress(HLIBUSBKDll, 'UsbK_AbortPipe'); + UsbK_ClaimInterface:= GetProcAddress(HLIBUSBKDll, 'UsbK_ClaimInterface'); + UsbK_Clone:= GetProcAddress(HLIBUSBKDll, 'UsbK_Clone'); + UsbK_ControlTransfer:= GetProcAddress(HLIBUSBKDll, + 'UsbK_ControlTransfer'); + UsbK_FlushPipe:= GetProcAddress(HLIBUSBKDll, 'UsbK_FlushPipe'); + UsbK_Free:= GetProcAddress(HLIBUSBKDll, 'UsbK_Free'); + UsbK_GetAltInterface:= GetProcAddress(HLIBUSBKDll, + 'UsbK_GetAltInterface'); + UsbK_GetAssociatedInterface:= GetProcAddress(HLIBUSBKDll, + 'UsbK_GetAssociatedInterface'); + UsbK_GetConfiguration:= GetProcAddress(HLIBUSBKDll, + 'UsbK_GetConfiguration'); + UsbK_GetCurrentAlternateSetting:= GetProcAddress(HLIBUSBKDll, + 'UsbK_GetCurrentAlternateSetting'); + UsbK_GetCurrentFrameNumber:= GetProcAddress(HLIBUSBKDll, + 'UsbK_GetCurrentFrameNumber'); + UsbK_GetDescriptor:= GetProcAddress(HLIBUSBKDll, 'UsbK_GetDescriptor'); + UsbK_GetOverlappedResult:= GetProcAddress(HLIBUSBKDll, + 'UsbK_GetOverlappedResult'); + UsbK_GetPipePolicy:= GetProcAddress(HLIBUSBKDll, 'UsbK_GetPipePolicy'); + UsbK_GetPowerPolicy:= GetProcAddress(HLIBUSBKDll, 'UsbK_GetPowerPolicy'); + UsbK_GetProperty:= GetProcAddress(HLIBUSBKDll, 'UsbK_GetProperty'); + UsbK_Init:= GetProcAddress(HLIBUSBKDll, 'UsbK_Init'); + UsbK_Initialize:= GetProcAddress(HLIBUSBKDll, 'UsbK_Initialize'); + UsbK_IsoReadPipe:= GetProcAddress(HLIBUSBKDll, 'UsbK_IsoReadPipe'); + UsbK_IsoWritePipe:= GetProcAddress(HLIBUSBKDll, 'UsbK_IsoWritePipe'); + UsbK_QueryDeviceInformation:= GetProcAddress(HLIBUSBKDll, + 'UsbK_QueryDeviceInformation'); + UsbK_QueryInterfaceSettings:= GetProcAddress(HLIBUSBKDll, + 'UsbK_QueryInterfaceSettings'); + UsbK_QueryPipe:= GetProcAddress(HLIBUSBKDll, 'UsbK_QueryPipe'); + UsbK_ReadPipe:= GetProcAddress(HLIBUSBKDll, 'UsbK_ReadPipe'); + UsbK_ReleaseInterface:= GetProcAddress(HLIBUSBKDll, + 'UsbK_ReleaseInterface'); + UsbK_ResetDevice:= GetProcAddress(HLIBUSBKDll, 'UsbK_ResetDevice'); + UsbK_ResetPipe:= GetProcAddress(HLIBUSBKDll, 'UsbK_ResetPipe'); + UsbK_SelectInterface:= GetProcAddress(HLIBUSBKDll, + 'UsbK_SelectInterface'); + UsbK_SetAltInterface:= GetProcAddress(HLIBUSBKDll, + 'UsbK_SetAltInterface'); + UsbK_SetConfiguration:= GetProcAddress(HLIBUSBKDll, + 'UsbK_SetConfiguration'); + UsbK_SetCurrentAlternateSetting:= GetProcAddress(HLIBUSBKDll, + 'UsbK_SetCurrentAlternateSetting'); + UsbK_SetPipePolicy:= GetProcAddress(HLIBUSBKDll, 'UsbK_SetPipePolicy'); + UsbK_SetPowerPolicy:= GetProcAddress(HLIBUSBKDll, 'UsbK_SetPowerPolicy'); + UsbK_WritePipe:= GetProcAddress(HLIBUSBKDll, 'UsbK_WritePipe'); + WinUsb_AbortPipe:= GetProcAddress(HLIBUSBKDll, 'WinUsb_AbortPipe'); + WinUsb_ControlTransfer:= GetProcAddress(HLIBUSBKDll, + 'WinUsb_ControlTransfer'); + WinUsb_FlushPipe:= GetProcAddress(HLIBUSBKDll, 'WinUsb_FlushPipe'); + WinUsb_Free:= GetProcAddress(HLIBUSBKDll, 'WinUsb_Free'); + WinUsb_GetAssociatedInterface:= GetProcAddress(HLIBUSBKDll, + 'WinUsb_GetAssociatedInterface'); + WinUsb_GetCurrentAlternateSetting:= GetProcAddress(HLIBUSBKDll, + 'WinUsb_GetCurrentAlternateSetting'); + WinUsb_GetDescriptor:= GetProcAddress(HLIBUSBKDll, + 'WinUsb_GetDescriptor'); + WinUsb_GetOverlappedResult:= GetProcAddress(HLIBUSBKDll, + 'WinUsb_GetOverlappedResult'); + WinUsb_GetPipePolicy:= GetProcAddress(HLIBUSBKDll, + 'WinUsb_GetPipePolicy'); + WinUsb_GetPowerPolicy:= GetProcAddress(HLIBUSBKDll, + 'WinUsb_GetPowerPolicy'); + WinUsb_Initialize:= GetProcAddress(HLIBUSBKDll, 'WinUsb_Initialize'); + WinUsb_QueryDeviceInformation:= GetProcAddress(HLIBUSBKDll, + 'WinUsb_QueryDeviceInformation'); + WinUsb_QueryInterfaceSettings:= GetProcAddress(HLIBUSBKDll, + 'WinUsb_QueryInterfaceSettings'); + WinUsb_QueryPipe:= GetProcAddress(HLIBUSBKDll, 'WinUsb_QueryPipe'); + WinUsb_ReadPipe:= GetProcAddress(HLIBUSBKDll, 'WinUsb_ReadPipe'); + WinUsb_ResetPipe:= GetProcAddress(HLIBUSBKDll, 'WinUsb_ResetPipe'); + WinUsb_SetCurrentAlternateSetting:= GetProcAddress(HLIBUSBKDll, + 'WinUsb_SetCurrentAlternateSetting'); + WinUsb_SetPipePolicy:= GetProcAddress(HLIBUSBKDll, + 'WinUsb_SetPipePolicy'); + WinUsb_SetPowerPolicy:= GetProcAddress(HLIBUSBKDll, + 'WinUsb_SetPowerPolicy'); + WinUsb_WritePipe:= GetProcAddress(HLIBUSBKDll, 'WinUsb_WritePipe'); + Result:= True; + Result:= Result and Assigned(HotK_Init); + Result:= Result and Assigned(HotK_Free); + Result:= Result and Assigned(HotK_FreeAll); + Result:= Result and Assigned(IsoK_EnumPackets); + Result:= Result and Assigned(IsoK_Free); + Result:= Result and Assigned(IsoK_GetPacket); + Result:= Result and Assigned(IsoK_Init); + Result:= Result and Assigned(IsoK_ReUse); + Result:= Result and Assigned(IsoK_SetPacket); + Result:= Result and Assigned(IsoK_SetPackets); + Result:= Result and Assigned(LibK_CopyDriverAPI); + Result:= Result and Assigned(LibK_GetContext); + Result:= Result and Assigned(LibK_GetProcAddress); + Result:= Result and Assigned(LibK_GetVersion); + Result:= Result and Assigned(LibK_LoadDriverAPI); + Result:= Result and Assigned(LibK_SetCleanupCallback); + Result:= Result and Assigned(LibK_SetContext); + Result:= Result and Assigned(LibK_SetDefaultContext); + Result:= Result and Assigned(LibK_GetDefaultContext); + Result:= Result and Assigned(LstK_AttachInfo); + Result:= Result and Assigned(LstK_Clone); + Result:= Result and Assigned(LstK_CloneInfo); + Result:= Result and Assigned(LstK_Count); + Result:= Result and Assigned(LstK_Current); + Result:= Result and Assigned(LstK_DetachInfo); + Result:= Result and Assigned(LstK_Enumerate); + Result:= Result and Assigned(LstK_FindByVidPid); + Result:= Result and Assigned(LstK_Free); + Result:= Result and Assigned(LstK_FreeInfo); + Result:= Result and Assigned(LstK_Init); + Result:= Result and Assigned(LstK_InitEx); + Result:= Result and Assigned(LstK_MoveNext); + Result:= Result and Assigned(LstK_MoveReset); + Result:= Result and Assigned(LstK_Sync); + Result:= Result and Assigned(OvlK_Acquire); + Result:= Result and Assigned(OvlK_Free); + Result:= Result and Assigned(OvlK_GetEventHandle); + Result:= Result and Assigned(OvlK_Init); + Result:= Result and Assigned(OvlK_IsComplete); + Result:= Result and Assigned(OvlK_ReUse); + Result:= Result and Assigned(OvlK_Release); + Result:= Result and Assigned(OvlK_Wait); + Result:= Result and Assigned(OvlK_WaitOldest); + Result:= Result and Assigned(OvlK_WaitAndRelease); + Result:= Result and Assigned(OvlK_WaitOrCancel); + Result:= Result and Assigned(StmK_Free); + Result:= Result and Assigned(StmK_Init); + Result:= Result and Assigned(StmK_Read); + Result:= Result and Assigned(StmK_Start); + Result:= Result and Assigned(StmK_Stop); + Result:= Result and Assigned(StmK_Write); + Result:= Result and Assigned(UsbK_AbortPipe); + Result:= Result and Assigned(UsbK_ClaimInterface); + Result:= Result and Assigned(UsbK_Clone); + Result:= Result and Assigned(UsbK_ControlTransfer); + Result:= Result and Assigned(UsbK_FlushPipe); + Result:= Result and Assigned(UsbK_Free); + Result:= Result and Assigned(UsbK_GetAltInterface); + Result:= Result and Assigned(UsbK_GetAssociatedInterface); + Result:= Result and Assigned(UsbK_GetConfiguration); + Result:= Result and Assigned(UsbK_GetCurrentAlternateSetting); + Result:= Result and Assigned(UsbK_GetCurrentFrameNumber); + Result:= Result and Assigned(UsbK_GetDescriptor); + Result:= Result and Assigned(UsbK_GetOverlappedResult); + Result:= Result and Assigned(UsbK_GetPipePolicy); + Result:= Result and Assigned(UsbK_GetPowerPolicy); + Result:= Result and Assigned(UsbK_GetProperty); + Result:= Result and Assigned(UsbK_Init); + Result:= Result and Assigned(UsbK_Initialize); + Result:= Result and Assigned(UsbK_IsoReadPipe); + Result:= Result and Assigned(UsbK_IsoWritePipe); + Result:= Result and Assigned(UsbK_QueryDeviceInformation); + Result:= Result and Assigned(UsbK_QueryInterfaceSettings); + Result:= Result and Assigned(UsbK_QueryPipe); + Result:= Result and Assigned(UsbK_ReadPipe); + Result:= Result and Assigned(UsbK_ReleaseInterface); + Result:= Result and Assigned(UsbK_ResetDevice); + Result:= Result and Assigned(UsbK_ResetPipe); + Result:= Result and Assigned(UsbK_SelectInterface); + Result:= Result and Assigned(UsbK_SetAltInterface); + Result:= Result and Assigned(UsbK_SetConfiguration); + Result:= Result and Assigned(UsbK_SetCurrentAlternateSetting); + Result:= Result and Assigned(UsbK_SetPipePolicy); + Result:= Result and Assigned(UsbK_SetPowerPolicy); + Result:= Result and Assigned(UsbK_WritePipe); + Result:= Result and Assigned(WinUsb_AbortPipe); + Result:= Result and Assigned(WinUsb_ControlTransfer); + Result:= Result and Assigned(WinUsb_FlushPipe); + Result:= Result and Assigned(WinUsb_Free); + Result:= Result and Assigned(WinUsb_GetAssociatedInterface); + Result:= Result and Assigned(WinUsb_GetCurrentAlternateSetting); + Result:= Result and Assigned(WinUsb_GetDescriptor); + Result:= Result and Assigned(WinUsb_GetOverlappedResult); + Result:= Result and Assigned(WinUsb_GetPipePolicy); + Result:= Result and Assigned(WinUsb_GetPowerPolicy); + Result:= Result and Assigned(WinUsb_Initialize); + Result:= Result and Assigned(WinUsb_QueryDeviceInformation); + Result:= Result and Assigned(WinUsb_QueryInterfaceSettings); + Result:= Result and Assigned(WinUsb_QueryPipe); + Result:= Result and Assigned(WinUsb_ReadPipe); + Result:= Result and Assigned(WinUsb_ResetPipe); + Result:= Result and Assigned(WinUsb_SetCurrentAlternateSetting); + Result:= Result and Assigned(WinUsb_SetPipePolicy); + Result:= Result and Assigned(WinUsb_SetPowerPolicy); + Result:= Result and Assigned(WinUsb_WritePipe); + end + else + begin + HotK_Init:= Nil; + HotK_Free:= Nil; + HotK_FreeAll:= Nil; + IsoK_EnumPackets:= Nil; + IsoK_Free:= Nil; + IsoK_GetPacket:= Nil; + IsoK_Init:= Nil; + IsoK_ReUse:= Nil; + IsoK_SetPacket:= Nil; + IsoK_SetPackets:= Nil; + LibK_CopyDriverAPI:= Nil; + LibK_GetContext:= Nil; + LibK_GetProcAddress:= Nil; + LibK_GetVersion:= Nil; + LibK_LoadDriverAPI:= Nil; + LibK_SetCleanupCallback:= Nil; + LibK_SetContext:= Nil; + LibK_SetDefaultContext:= Nil; + LibK_GetDefaultContext:= Nil; + LstK_AttachInfo:= Nil; + LstK_Clone:= Nil; + LstK_CloneInfo:= Nil; + LstK_Count:= Nil; + LstK_Current:= Nil; + LstK_DetachInfo:= Nil; + LstK_Enumerate:= Nil; + LstK_FindByVidPid:= Nil; + LstK_Free:= Nil; + LstK_FreeInfo:= Nil; + LstK_Init:= Nil; + LstK_InitEx:= Nil; + LstK_MoveNext:= Nil; + LstK_MoveReset:= Nil; + LstK_Sync:= Nil; + OvlK_Acquire:= Nil; + OvlK_Free:= Nil; + OvlK_GetEventHandle:= Nil; + OvlK_Init:= Nil; + OvlK_IsComplete:= Nil; + OvlK_ReUse:= Nil; + OvlK_Release:= Nil; + OvlK_Wait:= Nil; + OvlK_WaitOldest:= Nil; + OvlK_WaitAndRelease:= Nil; + OvlK_WaitOrCancel:= Nil; + StmK_Free:= Nil; + StmK_Init:= Nil; + StmK_Read:= Nil; + StmK_Start:= Nil; + StmK_Stop:= Nil; + StmK_Write:= Nil; + UsbK_AbortPipe:= Nil; + UsbK_ClaimInterface:= Nil; + UsbK_Clone:= Nil; + UsbK_ControlTransfer:= Nil; + UsbK_FlushPipe:= Nil; + UsbK_Free:= Nil; + UsbK_GetAltInterface:= Nil; + UsbK_GetAssociatedInterface:= Nil; + UsbK_GetConfiguration:= Nil; + UsbK_GetCurrentAlternateSetting:= Nil; + UsbK_GetCurrentFrameNumber:= Nil; + UsbK_GetDescriptor:= Nil; + UsbK_GetOverlappedResult:= Nil; + UsbK_GetPipePolicy:= Nil; + UsbK_GetPowerPolicy:= Nil; + UsbK_GetProperty:= Nil; + UsbK_Init:= Nil; + UsbK_Initialize:= Nil; + UsbK_IsoReadPipe:= Nil; + UsbK_IsoWritePipe:= Nil; + UsbK_QueryDeviceInformation:= Nil; + UsbK_QueryInterfaceSettings:= Nil; + UsbK_QueryPipe:= Nil; + UsbK_ReadPipe:= Nil; + UsbK_ReleaseInterface:= Nil; + UsbK_ResetDevice:= Nil; + UsbK_ResetPipe:= Nil; + UsbK_SelectInterface:= Nil; + UsbK_SetAltInterface:= Nil; + UsbK_SetConfiguration:= Nil; + UsbK_SetCurrentAlternateSetting:= Nil; + UsbK_SetPipePolicy:= Nil; + UsbK_SetPowerPolicy:= Nil; + UsbK_WritePipe:= Nil; + WinUsb_AbortPipe:= Nil; + WinUsb_ControlTransfer:= Nil; + WinUsb_FlushPipe:= Nil; + WinUsb_Free:= Nil; + WinUsb_GetAssociatedInterface:= Nil; + WinUsb_GetCurrentAlternateSetting:= Nil; + WinUsb_GetDescriptor:= Nil; + WinUsb_GetOverlappedResult:= Nil; + WinUsb_GetPipePolicy:= Nil; + WinUsb_GetPowerPolicy:= Nil; + WinUsb_Initialize:= Nil; + WinUsb_QueryDeviceInformation:= Nil; + WinUsb_QueryInterfaceSettings:= Nil; + WinUsb_QueryPipe:= Nil; + WinUsb_ReadPipe:= Nil; + WinUsb_ResetPipe:= Nil; + WinUsb_SetCurrentAlternateSetting:= Nil; + WinUsb_SetPipePolicy:= Nil; + WinUsb_SetPowerPolicy:= Nil; + WinUsb_WritePipe:= Nil; + end; + {$ELSE} + Result:= True; + {$ENDIF} + end; + + procedure DoneDllImport; + begin + {$IFDEF DynamicLink} + if DllAvailable then + FreeLibrary(HLIBUSBKDll); + {$ENDIF} + end; + +initialization + + {$IFDEF DynamicLink} + DllAvailable:= InitDllImport; + {$ELSE} + // Anyway the program will not start if the DLL is not available + DllAvailable:= True; + {$ENDIF} + // Delphi will show a Breakpoint if Assert violates, if no violation is + // detected by the compiler, the linker will eliminate the calls + Assert((SizeOf(WINUSB_PIPE_INFORMATION) = 12), + 'WINUSB_PIPE_INFORMATION size violation'); + Assert((SizeOf(WINUSB_SETUP_PACKET) = 8), + 'WINUSB_SETUP_PACKET size violation'); + Assert((SizeOf(KISO_CONTEXT) = 16), 'KISO_CONTEXT size violation'); + Assert((SizeOf(KUSB_DRIVER_API) = 512), 'KUSB_DRIVER_API size violation'); + Assert((SizeOf(KSTM_CALLBACK) = 64), 'KSTM_CALLBACK size violation'); + Assert((SizeOf(KLST_PATTERN_MATCH) = 1024), + 'KLST_PATTERN_MATCH size violation'); + Assert((SizeOf(KHOT_PARAMS) = 2048), 'KHOT_PARAMS size violation'); + +finalization + + {$IFDEF DynamicLink} + DoneDllImport; + {$ENDIF} + +end. diff --git a/Old Matlab Interface/.svn/pristine/99/99db985423ee055b8fb4316d524a91bc22870f17.svn-base b/Old Matlab Interface/.svn/pristine/99/99db985423ee055b8fb4316d524a91bc22870f17.svn-base new file mode 100644 index 00000000..0ba38030 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/99/99db985423ee055b8fb4316d524a91bc22870f17.svn-base @@ -0,0 +1,210 @@ +#region Copyright(c) Travis Robinson + +// Copyright (c) 2011-2012 Travis Robinson +// All rights reserved. +// +// Xfer.Async +// +// Last Updated: 03.09.2012 +// +// 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. +// +// 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 TRAVIS LEE ROBINSON +// 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. + +#endregion + +#define BMFW + +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Runtime.InteropServices; +using Test.Devices; +using libusbK; +using libusbK.Examples; + +// ReSharper disable InconsistentNaming + +namespace Xfer.Async +{ + internal class Program + { + #region TODO USER: Set the test parameters for your device. + + public static AsyncTestParameters Test = new AsyncTestParameters(0x04d8, 0xfa2e, 0, 0x81, 9, null, -1, 3); + + #endregion + + private static void Main() + { + bool success; + + WINUSB_PIPE_INFORMATION pipeInfo; + UsbK usb; + USB_INTERFACE_DESCRIPTOR interfaceDescriptor; + + // Find and configure the device. + if (!Test.ConfigureDevice(out pipeInfo, out usb, out interfaceDescriptor)) return; + if (Test.TransferBufferSize == -1) + Test.TransferBufferSize = pipeInfo.MaximumPacketSize * 64; + +#if BMFW + // TODO FOR USER: Remove this block if not using benchmark firmware. + // This configures devices running benchmark firmware for streaming DeviceToHost transfers. + Console.WriteLine("Configuring for benchmark device.."); + BM_TEST_TYPE testType = ((Test.PipeId & 0x80) > 0) ? BM_TEST_TYPE.READ : BM_TEST_TYPE.WRITE; + success = Benchmark.Configure(usb, BM_COMMAND.SET_TEST, interfaceDescriptor.bInterfaceNumber, ref testType); + if (!success) + { + Console.WriteLine("Bench_Configure failed."); + } +#endif + if (!Test.ShowTestReady()) goto Done; + + /* In most cases, you should clear the pipe timeout policy before using asynchronous I/O. (INFINITE) + * This decreases overhead in the driver and generally we managed the timeout ourselves from user code. + * + * Set the PIPE_TRANSFER_TIMEOUT policy to INFINITE: + */ + int[] pipeTimeoutMS = new[] {0}; + usb.SetPipePolicy((byte) Test.PipeId, + (int) PipePolicyType.PIPE_TRANSFER_TIMEOUT, + Marshal.SizeOf(typeof (int)), + pipeTimeoutMS); + + + /* In some cases, you may want to set the RAW_IO pipe policy. This will impose more restrictions on the + * allowable transfer buffer sizes but will improve performance. (See documentation for restrictions) + * + * Set the RAW_IO policy to TRUE: + */ + int[] useRawIO = new[] {1}; + usb.SetPipePolicy((byte)Test.PipeId, + (int)PipePolicyType.RAW_IO, + Marshal.SizeOf(typeof(int)), + useRawIO); + + int totalSubmittedTransfers = 0; + int totalCompletedTransfers = 0; + + /* We need a different buffer for each MaxPendingIO slot because they will all be submitted to the driver + * (outstanding) at the same time. + */ + byte[][] transferBuffers = new byte[Test.MaxPendingIO][]; + + OvlK ovlPool = new OvlK(usb.Handle, Test.MaxPendingIO, KOVL_POOL_FLAG.NONE); + List transferBufferGCList = new List(Test.MaxPendingIO); + success = true; + + // Start transferring data synchronously; one transfer at a time until the test limit (MaxTransfersTotal) is hit. + while (success && totalCompletedTransfers < Test.MaxTransfersTotal) + { + KOVL_HANDLE ovlHandle; + int transferred; + while (success && totalSubmittedTransfers < Test.MaxTransfersTotal) + { + // Get the next KOVL_HANDLE + if (!ovlPool.Acquire(out ovlHandle)) + { + // This example expects a failure of NoMoreItems when the pool has no more handles to acquire. This is + // our indication that it is time to begin waiting for a completion. + Debug.Assert(Marshal.GetLastWin32Error() == ErrorCodes.NoMoreItems); + break; + } + + // Get the next transfer buffer + int transferBufferIndex = totalSubmittedTransfers % Test.MaxPendingIO; + if (transferBuffers[transferBufferIndex] == null) + { + /* This index has not been allocated yet. We need a different buffer for each MaxPendingIO + * slot because they will all be submitted to the driver (outstanding) at the same time. + */ + + Console.WriteLine("Allocating transfer buffer at index:{0}", transferBufferIndex); + transferBuffers[transferBufferIndex] = new byte[Test.TransferBufferSize]; + + // Transfer buffers should be pinned so the garbage collector cannot move the memory. + transferBufferGCList.Add(GCHandle.Alloc(transferBuffers[transferBufferIndex], GCHandleType.Pinned)); + } + + byte[] transferBuffer = transferBuffers[transferBufferIndex]; + + int not_used_for_async; + if ((Test.PipeId & AllKConstants.USB_ENDPOINT_DIRECTION_MASK) > 0) + { + success = usb.ReadPipe((byte) Test.PipeId, transferBuffer, transferBuffer.Length, out not_used_for_async, ovlHandle); + } + else + { + FillMyBufferForWrite(transferBuffer, out transferred); + success = usb.WritePipe((byte)Test.PipeId, transferBuffer, transferred, out not_used_for_async, ovlHandle); + } + + if (Marshal.GetLastWin32Error() == ErrorCodes.IoPending) + { + success = true; + totalSubmittedTransfers++; + Console.WriteLine("Pending #{0:0000} {1} bytes.", totalSubmittedTransfers, transferBuffer.Length); + } + else + Console.WriteLine("Pending #{0:0000} failed. ErrorCode={1:X8}h", totalSubmittedTransfers, Marshal.GetLastWin32Error()); + } + if (!success) break; + + // Wait for the oldest transfer to complete and release the ovlHandle to the pool so it can be re-acquired. + success = ovlPool.WaitOldest(out ovlHandle, 1000, KOVL_WAIT_FLAG.RELEASE_ALWAYS, out transferred); + totalCompletedTransfers++; + + if (success) + { + if ((Test.PipeId & AllKConstants.USB_ENDPOINT_DIRECTION_MASK) > 0) + { + ProcessMyBufferFromRead(transferBuffers[(totalCompletedTransfers-1) % Test.MaxPendingIO], transferred); + } + Console.WriteLine("Complete #{0:0000} {1} bytes.", totalCompletedTransfers, transferred); + } + else + Console.WriteLine("Complete #{0:0000} Wait failed. ErrorCode={1:X8}h", totalCompletedTransfers, Marshal.GetLastWin32Error()); + } + + if (!success) + Console.WriteLine("An error occured transferring data. ErrorCode: {0:X8}h", Marshal.GetLastWin32Error()); + + ovlPool.Free(); + + // Free the GC handles allocated for the transfer buffers + foreach (GCHandle gcHandle in transferBufferGCList) + gcHandle.Free(); + + Done: + usb.Free(); + } + + #region TODO USER: Use these functions to process and fill the transfer buffers + + private static void ProcessMyBufferFromRead(byte[] transferBuffer, int transferred) + { + } + + private static void FillMyBufferForWrite(byte[] transferBuffer, out int length) + { + length = transferBuffer.Length; + } + + #endregion + } +} \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/9a/9a889ec32d482cfe17903fdcc469511a417950b0.svn-base b/Old Matlab Interface/.svn/pristine/9a/9a889ec32d482cfe17903fdcc469511a417950b0.svn-base new file mode 100644 index 00000000..bbca8d48 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/9a/9a889ec32d482cfe17903fdcc469511a417950b0.svn-base @@ -0,0 +1,52 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {4FA292D2-945A-48B5-B040-3AF7E482AB31} + Exe + Properties + List.Devices + List.Devices + v2.0 + 512 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + libusbK.cs + + + + + + + \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/9b/9b08e8cee2d7f7bedff6fa2bfbe2c6df5b15e349.svn-base b/Old Matlab Interface/.svn/pristine/9b/9b08e8cee2d7f7bedff6fa2bfbe2c6df5b15e349.svn-base new file mode 100644 index 00000000..fe233674 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/9b/9b08e8cee2d7f7bedff6fa2bfbe2c6df5b15e349.svn-base @@ -0,0 +1,88 @@ +//MATLAB INCLUDES +#include +#include + +//LIBUSBK INCLUDES +#include +#include +#include +#include +#include "libusbk.h" + +#define DEBUG_SHOWCTRL 1 +#define ISO_PACKETS_TO_READ 30 +#define ISO_PACKET_SIZE 750 +#define HALFBUFFER_SIZE (ISO_PACKETS_TO_READ*ISO_PACKET_SIZE) + +void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) +{ + + //Vars: + //Imports + char *HANDLE_CHAR; + char *ISOCTX_CHAR; + char *OVLKHANDLE_CHAR; + char *OVLPOOL_CHAR; + char *ISOBUFFER_CHAR; + KUSB_HANDLE handle = NULL; + unsigned char pipeID = 0x83; + unsigned char *mode_ptr; + unsigned int offset; + //Internals + PKISO_CONTEXT isoCtx; + KOVL_HANDLE ovlkHandle; + KOVL_POOL_HANDLE ovlPool; + char *isoBuffer; + unsigned char success; + unsigned int transferred; + DWORD errorCode = ERROR_SUCCESS; + unsigned int n; + //Exports + char *transfer_contents; + unsigned int *error_export; + + //Initialise Data + HANDLE_CHAR = mxArrayToString(prhs[0]); + sscanf(HANDLE_CHAR, "%16x", &handle); + + ISOCTX_CHAR = mxArrayToString(prhs[1]); + sscanf(ISOCTX_CHAR, "%16x", &isoCtx); + + OVLKHANDLE_CHAR = mxArrayToString(prhs[2]); + sscanf(OVLKHANDLE_CHAR, "%16x", &ovlkHandle); + + OVLPOOL_CHAR = mxArrayToString(prhs[3]); + sscanf(OVLPOOL_CHAR, "%16x", &ovlPool); + + ISOBUFFER_CHAR = mxArrayToString(prhs[4]); + sscanf(ISOBUFFER_CHAR, "%16x", &isoBuffer); + + mode_ptr = mxGetData(prhs[5]); + offset = (*mode_ptr) * HALFBUFFER_SIZE; + + //Actual Function + success = OvlK_WaitAndRelease(ovlkHandle, 1000, &transferred); + if (!success) { + errorCode = GetLastError(); + printf("IsoReadPipe failed. ErrorCode: %08Xh\n", errorCode); + } + + IsoK_Init(&isoCtx, ISO_PACKETS_TO_READ, ISO_PACKETS_TO_READ); + IsoK_SetPackets(isoCtx, ISO_PACKET_SIZE); + OvlK_Acquire(&ovlkHandle, ovlPool); + UsbK_IsoReadPipe(handle, pipeID, (isoBuffer+offset), HALFBUFFER_SIZE, ovlkHandle, isoCtx); + + //Export Data + transfer_contents = mxMalloc(HALFBUFFER_SIZE); + for (n=0;n +#include + +//LIBUSBK INCLUDES +#include +#include +#include +#include +#include "libusbk.h" + +//MISC INCLUDES +#include +#include + +#define BUFFERSIZE 256 + +void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) +{ + //Internals + WINUSB_SETUP_PACKET setupPacket; + KUSB_HANDLE handle; + char *HANDLE_CHAR; + char *RequestType_CHAR; + char *Request_CHAR; + char *Value_CHAR; + char *Index_CHAR; + char *Length_CHAR; + unsigned char controlSuccess; + UINT bytesTransferred = 0; + unsigned int n; + + //To Export + unsigned char *controlBuffer; + int dims[2] = {1,BUFFERSIZE}; + unsigned char *out_ptr; + + //Actual functions: + HANDLE_CHAR = mxArrayToString(prhs[0]); + sscanf(HANDLE_CHAR, "%16x", &handle); + + RequestType_CHAR = mxArrayToString(prhs[1]); + sscanf(RequestType_CHAR, "%2x", &setupPacket.RequestType); + + Request_CHAR = mxArrayToString(prhs[2]); + sscanf(Request_CHAR, "%2x", &setupPacket.Request); + + Value_CHAR = mxArrayToString(prhs[3]); + sscanf(Value_CHAR, "%4x", &setupPacket.Value); + + Index_CHAR = mxArrayToString(prhs[4]); + sscanf(Index_CHAR, "%4x", &setupPacket.Index); + + Length_CHAR = mxArrayToString(prhs[5]); + sscanf(Length_CHAR, "%4x", &setupPacket.Length); + + mexPrintf("Value = %d\n", setupPacket.Value); + mexPrintf("Index = %d\n", setupPacket.Index); + mexPrintf("Length = %d\n", setupPacket.Length); + + controlBuffer = mxGetData(prhs[6]); + + mexPrintf("SENDING CONTROL PACKET\n"); + controlSuccess = UsbK_ControlTransfer(handle, setupPacket, controlBuffer, setupPacket.Length, &bytesTransferred, NULL); + if (controlSuccess) mexPrintf("%d BYTES TRANSFERRED", bytesTransferred); + else mexPrintf("ERROR"); + + out_ptr = mxMalloc(BUFFERSIZE); + for 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 z +// All rights reserved. +// +// Xfer.UsbStream +// +// Last Updated: 03.08.2012 +// +// 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. +// +// 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 TRAVIS LEE ROBINSON +// 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. + +#endregion + +#define BMFW + +using System; +using System.Diagnostics; +using System.IO; +using System.Threading; +using Test.Devices; +using libusbK; +using libusbK.Examples; + +namespace Xfer.UsbStream +{ + internal class Program + { + #region TODO USER: Set the test parameters for your device. + + public static StmTestParameters Test = new StmTestParameters(0x04d8, 0xfa2e, 0, 0x81, 1024, null, -1, 4, 64); + + #endregion + + private static bool FormatBrokenStrings(int fixedLength, string preAdd, ref string sPartialRead, ref string sRead) + { + if (sRead.Length != fixedLength) + { + // partial read. + if (!String.IsNullOrEmpty(sPartialRead)) + { + sPartialRead += sRead; + if (sPartialRead.Length != fixedLength) + return false; + + sRead = sPartialRead; + sPartialRead = String.Empty; + } + else + { + sPartialRead = sRead; + return false; + } + } + sRead = preAdd + sRead.Substring(preAdd.Length); + return true; + } + + private static void Main() + { + bool success; + UsbK usb; + WINUSB_PIPE_INFORMATION pipeInfoRead; + USB_INTERFACE_DESCRIPTOR interfaceDescriptorRead; + + WINUSB_PIPE_INFORMATION pipeInfoWrite; + USB_INTERFACE_DESCRIPTOR interfaceDescriptorWrite; + + // Find the IN endpoint and configure the device. + Test.PipeId = Test.PipeId | AllKConstants.USB_ENDPOINT_DIRECTION_MASK; + if (!Test.ConfigureDevice(out pipeInfoRead, out usb, out interfaceDescriptorRead)) return; + + // Find the OUT endpoint. + Test.PipeId = Test.PipeId & ~AllKConstants.USB_ENDPOINT_DIRECTION_MASK; + if (!Test.FindPipeAndInterface(usb, out interfaceDescriptorWrite, out pipeInfoWrite)) return; + + Debug.Assert( + interfaceDescriptorRead.bInterfaceNumber == interfaceDescriptorWrite.bInterfaceNumber, + "This example requires the IN and OUT endpoints have the same bInterfaceNumber."); + + Debug.Assert( + pipeInfoRead.MaximumPacketSize > 0 && + pipeInfoRead.MaximumPacketSize == pipeInfoWrite.MaximumPacketSize, + "This example requires the IN and OUT endpoints have the same MaximumPacketSize."); + + // We will keep the buffer >= 1024. + // To satisfy StmK it must also be an interval of MaximumPacketSize + if (Test.TransferBufferSize == -1) + Test.TransferBufferSize = pipeInfoWrite.MaximumPacketSize * ((1024 + pipeInfoWrite.MaximumPacketSize-1) / pipeInfoWrite.MaximumPacketSize); + +#if BMFW + // TODO FOR USER: Remove this block if not using benchmark firmware. + // This configures devices running benchmark firmware for streaming DeviceToHost transfers. + Console.WriteLine("Configuring for benchmark device.."); + BM_TEST_TYPE testType = BM_TEST_TYPE.LOOP; + success = Benchmark.Configure(usb, BM_COMMAND.SET_TEST, interfaceDescriptorRead.bInterfaceNumber, ref testType); + if (!success) + { + Console.WriteLine("Bench_Configure failed."); + } +#endif + if (!Test.ShowTestReady()) goto Done; + + UsbStream stmRead = new UsbStream(usb, + pipeInfoRead.PipeId, + Test.TransferBufferSize, + Test.MaxPendingTransfers, + Test.MaxPendingIO, + true, + 1); + UsbStream stmWrite = new UsbStream(usb, + pipeInfoWrite.PipeId, + Test.TransferBufferSize, + Test.MaxPendingTransfers, + Test.MaxPendingIO, + true, + 3000); + + StreamReader stmReader = new StreamReader(stmRead); + StreamWriter stmWriter = new StreamWriter(stmWrite); + + stmRead.Start(); + stmWrite.Start(); + + Char[] chTemp = new char[Test.TransferBufferSize]; + while (stmReader.Read(chTemp, 0, chTemp.Length) > 0) + { + Console.WriteLine("Flushing packets.."); + } + string sWrite = String.Empty; + string sPartialRead = String.Empty; + string sRead; + const string lineFormat = "Tx#{0:000000} This string is being looped through endpoints {1:X2}h and {2:X2}h"; + int lineLength = String.Format(lineFormat, 0, 0, 0).Length; + + // This is a counter/timer used only for statistics gathering. + Thread.Sleep(0); + Test.Dcs.Start(); + + for (int iTransfers = 0; iTransfers < Test.MaxTransfersTotal; iTransfers++) + { + sWrite = String.Format(lineFormat, iTransfers, pipeInfoWrite.PipeId, pipeInfoRead.PipeId); + stmWriter.WriteLine(sWrite); + Console.WriteLine(sWrite); + + if ((iTransfers & 8) > 0) stmWriter.Flush(); + if (iTransfers <= 16 || (String.IsNullOrEmpty((sRead = stmReader.ReadLine())))) + continue; + + if (!FormatBrokenStrings(lineLength, "Rx", ref sPartialRead, ref sRead)) continue; + Console.WriteLine(sRead); + } + + stmWriter.Flush(); + while (!(String.IsNullOrEmpty((sRead = stmReader.ReadLine())))) + { + if (!FormatBrokenStrings(lineLength, "Rx", ref sPartialRead, ref sRead)) continue; + Console.WriteLine(sRead); + } + + Test.Dcs.Stop(); + TimeSpan ts = new TimeSpan(Test.Dcs.Ticks); + Console.WriteLine("Elapsed Time:\n\t{0} mins\n\t{1} secs\n\t{2} msecs", Math.Floor(ts.TotalMinutes), ts.Seconds, ts.Milliseconds); + + stmWriter.Dispose(); + stmReader.Dispose(); + + Done: + usb.Free(); + } + } +} \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/a0/a020241393e5c9788f977eaf9de0b0d8d9c66ff5.svn-base b/Old Matlab Interface/.svn/pristine/a0/a020241393e5c9788f977eaf9de0b0d8d9c66ff5.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..db614fd8942bfc55c8c36a6eff2c56c01c00a654 GIT binary patch literal 8704 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 10) + break + %resynchronise + %dropped_packets = 0; + %waveform_exists = 0; + end +else + dropped_packets = 4*dropped_packets/5; +end \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/a4/a41cc954b085ad5a93e71bdfbdb675e99e173ecd.svn-base b/Old Matlab Interface/.svn/pristine/a4/a41cc954b085ad5a93e71bdfbdb675e99e173ecd.svn-base new file mode 100644 index 00000000..ddfa3fa9 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/a4/a41cc954b085ad5a93e71bdfbdb675e99e173ecd.svn-base @@ -0,0 +1,309 @@ +/*! \file lusbk_shared.h +* \brief Types and defines shared with the driver. +*/ + +#ifndef __LUSBK_SHARED_H_ +#define __LUSBK_SHARED_H_ + +#ifndef __USB_H__ + +//! Values used in the \c bmAttributes field of a \ref USB_ENDPOINT_DESCRIPTOR +typedef enum _USBD_PIPE_TYPE +{ + //! Indicates a control endpoint + UsbdPipeTypeControl, + + //! Indicates an isochronous endpoint + UsbdPipeTypeIsochronous, + + //! Indicates a bulk endpoint + UsbdPipeTypeBulk, + + //! Indicates an interrupt endpoint + UsbdPipeTypeInterrupt, +} USBD_PIPE_TYPE; + +#endif + +#if !defined(__WINUSB_COMPAT_IO_H__) && !defined(__WUSBIO_H__) + +// pipe policy types /////////////// +#define SHORT_PACKET_TERMINATE 0x01 +#define AUTO_CLEAR_STALL 0x02 +#define PIPE_TRANSFER_TIMEOUT 0x03 +#define IGNORE_SHORT_PACKETS 0x04 +#define ALLOW_PARTIAL_READS 0x05 +#define AUTO_FLUSH 0x06 +#define RAW_IO 0x07 +#define MAXIMUM_TRANSFER_SIZE 0x08 +#define RESET_PIPE_ON_RESUME 0x09 + +// libusbK ISO pipe policy types /// +#define ISO_START_LATENCY 0x20 +#define ISO_ALWAYS_START_ASAP 0x21 +#define ISO_NUM_FIXED_PACKETS 0x22 + +// http://msdn.microsoft.com/en-us/library/windows/hardware/ff552359%28v=vs.85%29.aspx +// Settings.Parallel.NumberOfPresentedRequests +// Maximum number of transfers that can be asynchronously delivered at a +// time. Available in version 1.9 and later versions of KMDF. +#define SIMUL_PARALLEL_REQUESTS 0x30 + +// Power policy types ////////////// +#define AUTO_SUSPEND 0x81 +#define SUSPEND_DELAY 0x83 + +// Device Information types //////// +#define DEVICE_SPEED 0x01 + +// Device Speeds +#define LowSpeed 0x01 +#define FullSpeed 0x02 +#define HighSpeed 0x03 + +//! The \c WINUSB_PIPE_INFORMATION structure contains pipe information that the \ref UsbK_QueryPipe routine retrieves. +typedef struct _WINUSB_PIPE_INFORMATION +{ + //! A \c USBD_PIPE_TYPE enumeration value that specifies the pipe type + USBD_PIPE_TYPE PipeType; + + //! The pipe identifier (ID) + UCHAR PipeId; + + //! The maximum size, in bytes, of the packets that are transmitted on the pipe + USHORT MaximumPacketSize; + + //! The pipe interval + UCHAR Interval; + +} WINUSB_PIPE_INFORMATION; +//! Pointer to a \ref WINUSB_PIPE_INFORMATION structure +typedef WINUSB_PIPE_INFORMATION* PWINUSB_PIPE_INFORMATION; +C_ASSERT(sizeof(WINUSB_PIPE_INFORMATION) == 12); + +#include + +//! The \c WINUSB_SETUP_PACKET structure describes a USB setup packet. +/*! +* It is often more convient to use this structure in combination with a \ref KUSB_SETUP_PACKET. +* For example: +* \code + +* \endcode +*/ +typedef struct _WINUSB_SETUP_PACKET +{ + //! The request type. The values that are assigned to this member are defined in Table 9.2 of section 9.3 of the Universal Serial Bus (USB) specification (www.usb.org). + UCHAR RequestType; + + //! The device request. The values that are assigned to this member are defined in Table 9.3 of section 9.4 of the Universal Serial Bus (USB) specification. + UCHAR Request; + + //! The meaning of this member varies according to the request. For an explanation of this member, see the Universal Serial Bus (USB) specification. + USHORT Value; + + //! The meaning of this member varies according to the request. For an explanation of this member, see the Universal Serial Bus (USB) specification. + USHORT Index; + + //! The number of bytes to transfer. (not including the \c WINUSB_SETUP_PACKET itself) + USHORT Length; + +} WINUSB_SETUP_PACKET; +//! pointer to a \c WINUSB_SETUP_PACKET structure +typedef WINUSB_SETUP_PACKET* PWINUSB_SETUP_PACKET; +C_ASSERT(sizeof(WINUSB_SETUP_PACKET) == 8); + +#include + +#endif // __WUSBIO_H__ __WINUSB_COMPAT_IO_H__ + +#include + +/*! \addtogroup isok +* @{ +*/ + +//! Structure describing an isochronous transfer packet. +typedef struct _KISO_PACKET +{ + //! Specifies the offset, in bytes, of the buffer for this packet from the beginning of the entire isochronous transfer data buffer. + /*! + * \c Offset represents an absolute data offset from the start of the \c Buffer parameter \ref UsbK_IsoReadPipe or \ref UsbK_IsoWritePipe. + * + * \note This field is assigned by the user application only and used by the driver upon transfer submission and completion. + */ + UINT Offset; + + //! Set by the host controller to indicate the actual number of bytes received by the device for isochronous IN transfers. Length not used for isochronous OUT transfers. + /*! + * \note This field is is not user assignable and is updated by the driver upon transfer completion. + */ + USHORT Length; + + //! Contains the 16 least significant USBD status bits, on return from the host controller driver, of this transfer packet. + /*! + * See MSDN for USBD status codes: USBD status code reference + * + * \note This field is is not user assignable and is updated by the driver upon transfer completion. + */ + USHORT Status; + +} KISO_PACKET; +//! pointer to a \c KISO_PACKET structure +typedef KISO_PACKET* PKISO_PACKET; + +#pragma warning(disable:4200) + +//! Additional ISO transfer flags. +typedef enum _KISO_FLAG +{ + KISO_FLAG_NONE = 0, + + //! Do not start the transfer immediately, instead use \ref KISO_CONTEXT::StartFrame. + /*! + * By default, isochronous transfers start on the next frame and \ref KISO_CONTEXT::StartFrame is + * ignored. If this flag is specified, the transfer is postponed until the current usb frame number + * equals that specified by \ref KISO_CONTEXT::StartFrame. + * + * Under certain circumstances, the driver can specify 0 for \ref KISO_CONTEXT::StartFrame, and the bus + * driver will begin the transaction in the next available frame. + * + * Specifing \b 0 for \ref KISO_CONTEXT::StartFrame (start transfer ASAP) is restricted to the first + * transaction on a newly opened or reset pipe. Furthermore, the USB stack contains a bug in Microsoft + * Windows Server 2003 and Windows XP that limits the use of this to an isochronous context with 255 or fewer + * packets. + * + * For more information about resetting pipes, see \ref UsbK_ResetPipe. + */ + KISO_FLAG_SET_START_FRAME = 0x00000001, +} KISO_FLAG; + +//! Structure describing a user defined isochronous transfer. +/*! +* +* \fixedstruct{16} +* +* The \ref KISO_CONTEXT::StartFrame member of the \ref KISO_CONTEXT specifies the starting USB frame number +* for the transaction. The driver can use \ref UsbK_GetCurrentFrameNumber to request the current frame +* number. +* +* In full-speed transmissions, the frame number for any particular packet will be the sum of the start frame +* number and the packet index. For instance, the fourth packet in the \ref KISO_CONTEXT has an index of 3, so +* its frame number will be StartFrame + 3. In a write transfer, the port driver loads this frame with the +* buffer data at the data buffer offset specified by IsoPacket[3].Offset. +* +* When the driver processes the \ref KISO_CONTEXT, it discards all packets in the \ref KISO_CONTEXT whose +* frame numbers are lower than the current frame number. The port driver sets the Status member of the packet +* descriptor for each discarded packet to USBD_STATUS_ISO_NA_LATE_USBPORT, USBD_STATUS_ISO_NOT_ACCESSED_BY_HW +* or USBD_STATUS_ISO_NOT_ACCESSED_LATE. Even if it discards some packets, the port driver attempts to +* transmit those packets in the \ref KISO_CONTEXT whose frame numbers are higher than the current frame +* number. +* +* The check for a valid StartFrame member is slightly more complicated in high-speed transmissions because +* the port driver loads each packet into a high-speed microframe; however, the value in StartFrame refers to +* the 1 millisecond (full-speed) frame number, not the microframe. For example, if the StartFrame value +* recorded in the \ref KISO_CONTEXT is one less than the current frame, the port driver will discard as many +* as eight packets. The exact number of packets that the port driver discards depends on the period +* associated with the isochronous pipe. +* +* High-speed isochronous pipes can have periods of 1, 2, 4, or 8. The period number specifies the frequency +* with which the port driver inserts packets into the data stream. If the period is 2, for example, the port +* driver will insert a packet into the data stream every two microframes. This means that it will only use +* four of the eight microframes available within each 1-millisecond frame for isochronous data transmission. +* +* In general, the higher the period, the fewer packets the port driver will discard when a \ref KISO_CONTEXT +* arrives late. Assume the period on an isochronous pipe is 2. With a period of 2, each 1-millisecond speed +* frame will carry four packets of isochronous data for that pipe. So, for example, if CurrentFrame - +* StartFrame = 3, the port driver will discard 3 * 4 = 12 packets. On the other hand, if the period is 4, +* each 1-millisecond frame carries only two packets of isochronous data for the pipe. Therefore, if the +* \ref KISO_CONTEXT arrives three 1-millisecond frames late, as in the previous example, the port driver will +* discard 3 * 2 = 6 packets, instead of 12 packets. +* +* For all types of isochronous pipe, the distance between the current frame and the StartFrame value +* specified in the \ref KISO_CONTEXT must be less than USBD_ISO_START_FRAME_RANGE. If StartFrame is not +* within the proper range, the driver sets the Status member of the \ref KISO_PACKET +* \c USBD_STATUS_BAD_START_FRAME and discards the entire \ref KISO_CONTEXT. The following code example shows +* the precise check that the port driver does on the \ref KISO_CONTEXT start frame: +* \code +* if (abs((CurrentFrame - StartFrame)) > USBD_ISO_START_FRAME_RANGE) +* { +* // discard the KISO_CONTEXT +* } +* \endcode +* +*/ +typedef struct _KISO_CONTEXT +{ + //! Additional ISO transfer flags. See \ref KISO_FLAG. + KISO_FLAG Flags; + + //! Specifies the frame number that the transfer should begin on (0 for ASAP). + /*! + * This variable must be within a system-defined range of the current frame. The range is specified by the + * constant \ref USBD_ISO_START_FRAME_RANGE. + * + * If /ref KISO_FLAG_SET_START_FRAME was specified, this member contains the frame number that the transfer should begin on. + * When the request is returned by the host controller driver, this member is updated to reflect the frame number this transfer + * did begin on. + * + * \note This field may be assigned by the user application and is updated by the driver upon transfer + * completion. + */ + UINT StartFrame; + + //! Contains the number of packets that completed with an error condition on return from the host controller driver. + /*! + * \note This field is is not user assignable and is updated by the driver upon transfer completion. + */ + SHORT ErrorCount; + + //! Specifies the number of packets that are described by the variable-length array member \c IsoPacket. + /* + * \note This field is assigned by the user application only and used by the driver upon transfer submission + * and completion. + */ + SHORT NumberOfPackets; + + //! Contains the URB Hdr.Status value on return from the host controller driver. + /*! + * \note This field is is not user assignable and is updated by the driver upon transfer completion. + * + * The USB bus driver always returns a value of USBD_STATUS_SUCCESS in + * Hdr.Status, unless every packet in the transfer generated an error or + * the request was not well-formed and could not be executed at all. The + * following table includes possible error codes returned in Hdr.Status: + * - USBD_STATUS_ISOCH_REQUEST_FAILED + * Indicates that every packet of an isochronous request was completed with + * errors. + * - USBD_STATUS_BAD_START_FRAME + * Indicates that the requested start frame is not within + * USBD_ISO_START_FRAME_RANGE of the current USB frame. + * - USBD_ISO_NOT_ACCESSED_LATE + * Indicates that every packet was submitted too late for the packet to be + * sent, based on the requested start frame. + * - USBD_STATUS_INVALID_PARAMETER + * Indicates that one of the URB parameters was incorrect. + */ + UINT UrbHdrStatus; + + //! Contains a variable-length array of \c KISO_PACKET structures that describe the isochronous transfer packets to be transferred on the USB bus. + /* + * \note This field is assigned by the user application, used by the driver upon transfer submission, and + * updated by the driver upon transfer completion. + */ + KISO_PACKET IsoPackets[0]; + +} KISO_CONTEXT; +C_ASSERT(sizeof(KISO_CONTEXT) == 16); + +//! pointer to a \c KISO_CONTEXT structure +typedef KISO_CONTEXT* PKISO_CONTEXT; + +/*! @} */ + +#pragma warning(default:4200) + +#include + +#endif // __LUSBK_SHARED_H_ + diff --git a/Old Matlab Interface/.svn/pristine/a4/a4d7e09e485d3552853c661f4cd30ca35a42f08d.svn-base b/Old Matlab Interface/.svn/pristine/a4/a4d7e09e485d3552853c661f4cd30ca35a42f08d.svn-base new file mode 100644 index 00000000..9409e06c --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/a4/a4d7e09e485d3552853c661f4cd30ca35a42f08d.svn-base @@ -0,0 +1,4 @@ +first_gui + +%global gui_axes +%plot(gui_axes, linspace(0,2*pi,1000), sin(linspace(0,2*pi,1000))) \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/a5/a519965b93dc0b1921febca0183228564d9eee72.svn-base b/Old Matlab Interface/.svn/pristine/a5/a519965b93dc0b1921febca0183228564d9eee72.svn-base new file mode 100644 index 00000000..80402b0e --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/a5/a519965b93dc0b1921febca0183228564d9eee72.svn-base @@ -0,0 +1,3836 @@ +#region Copyright (c) Travis Robinson + +// Copyright (c) 2012 Travis Robinson +// All rights reserved. +// +// C# libusbK Bindings +// Auto-generated on: 04.28.2011 +// +// 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. +// +// 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 TRAVIS LEE ROBINSON +// 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. + +#endregion + +using System; +using System.Diagnostics; +using System.Runtime.InteropServices; + +// ReSharper disable InconsistentNaming +// ReSharper disable CheckNamespace +// ReSharper disable UnassignedReadonlyField + +namespace libusbK +{ + public static class AllKOptions + { + #region Public Members + + ///

    + /// Alternate libusbK library to use. This must be assigned before any libusbK functions are called and it must be the full path and file name to a libusbK.dll. + /// + public static string LIBUSBK_FULLPATH_TO_ALTERNATE_DLL; + + #endregion + } + + public static class AllKConstants + { + #region Public Members + + /// + /// Allocated length for all strings in a \ref KLST_DEVINFO structure. + /// + public const int KLST_STRING_MAX_LEN = 256; + + /// + /// libusbK library + /// + public const string LIBUSBK_DLL = "libusbK.dll"; + + /// + /// Config power mask for the \c bmAttributes field of a \ref USB_CONFIGURATION_DESCRIPTOR + /// + public const byte USB_CONFIG_POWERED_MASK = 0xC0; + + /// + /// Endpoint address mask for the \c bEndpointAddress field of a \ref USB_ENDPOINT_DESCRIPTOR + /// + public const byte USB_ENDPOINT_ADDRESS_MASK = 0x0F; + + /// + /// Endpoint direction mask for the \c bEndpointAddress field of a \ref USB_ENDPOINT_DESCRIPTOR + /// + public const byte USB_ENDPOINT_DIRECTION_MASK = 0x80; + + #endregion + } + + public enum PipePolicyType + { + SHORT_PACKET_TERMINATE = 0x01, + AUTO_CLEAR_STALL = 0x02, + PIPE_TRANSFER_TIMEOUT = 0x03, + IGNORE_SHORT_PACKETS = 0x04, + ALLOW_PARTIAL_READS = 0x05, + AUTO_FLUSH = 0x06, + RAW_IO = 0x07, + MAXIMUM_TRANSFER_SIZE = 0x08, + RESET_PIPE_ON_RESUME = 0x09, + + ISO_START_LATENCY = 0x20, + ISO_ALWAYS_START_ASAP = 0x21, + ISO_NUM_FIXED_PACKETS = 0x22, + + SIMUL_PARALLEL_REQUESTS = 0x30, + } + + public enum PowerPolicyType + { + AUTO_SUSPEND = 0x81, + SUSPEND_DELAY = 0x83, + } + + public enum DeviceInformationType + { + DEVICE_SPEED = 0x01, + } + + public enum EndpointType + { + /// + /// Indicates a control endpoint + /// + CONTROL = 0x00, + + /// + /// Indicates an isochronous endpoint + /// + ISOCHRONOUS = 0x01, + + /// + /// Indicates a bulk endpoint + /// + BULK = 0x02, + + /// + /// Indicates an interrupt endpoint + /// + INTERRUPT = 0x03, + + /// + /// Endpoint type mask for the \c bmAttributes field of a \ref USB_ENDPOINT_DESCRIPTOR + /// + MASK = 0x03, + } + + public static class ErrorCodes + { + #region Public Members + + /// + /// Access is denied. + /// + public const int AccessDenied = 5; + + /// + /// The requested resource is in use. + /// + public const int Busy = 170; + + /// + /// The operation was canceled by the user. + /// + public const int Cancelled = 1223; + + /// + /// The library, drive, or media pool is empty. + /// + public const int Empty = 4306; + + /// + /// The handle is invalid. + /// + public const int InvalidHandle = 6; + + /// + /// The parameter is incorrect. + /// + public const int InvalidParameter = 87; + + /// + /// Overlapped I/O event is not in a signaled state. + /// + public const int IoIncomplete = 996; + + /// + /// Overlapped I/O operation is in progress. + /// + public const int IoPending = 997; + + /// + /// More data is available. + /// + public const int MoreData = 234; + + /// + /// No more data is available. + /// + public const int NoMoreItems = 259; + + /// + /// Not enough storage is available to process this command. + /// + public const int NotEnoughMemory = 8; + + /// + /// Element not found. + /// + public const int NotFound = 1168; + + /// + /// The request is not supported. + /// + public const int NotSupported = 50; + + /// + /// The I/O operation has been aborted because of either a thread exit or an application request. + /// + public const int OperationAborted = 995; + + /// + /// The cluster resource is not available. + /// + public const int ResourceNotAvailable = 5006; + + /// + /// The cluster resource could not be found. + /// + public const int ResourceNotFound = 5007; + + /// + /// The semaphore timeout period has expired. + /// + public const int SemTimeout = 121; + + /// + /// The operation completed successfully. + /// + public const int Success = 0; + + /// + /// An attempt was made to operate on a thread within a specific process, but the thread specified is not in the process specified. + /// + public const int ThreadNotInProcess = 566; + + /// + /// A thread termination occurred while the thread was suspended. The thread was resumed, and termination proceeded. + /// + public const int ThreadWasSuspended = 699; + + /// + /// Too many dynamic-link modules are attached to this program or dynamic-link module. + /// + public const int TooManyModules = 214; + + #endregion + } + + public interface IKLIB_HANDLE + { + #region Public Members + + IntPtr GetContext(); + KLIB_HANDLE_TYPE HandleType { get; } + IntPtr Pointer { get; } + bool SetCleanupCallback(KLIB_HANDLE_CLEANUP_CB CleanupCallback); + bool SetContext(IntPtr UserContext); + + #endregion + } + + #region Opaque library handles + + public struct KLST_HANDLE : IKLIB_HANDLE + { + #region IKLIB_HANDLE Members + + public IntPtr Pointer + { + get + { + return mHandlePtr; + } + } + + public KLIB_HANDLE_TYPE HandleType + { + get + { + return KLIB_HANDLE_TYPE.LSTK; + } + } + + public IntPtr GetContext() + { + return AllKFunctions.LibK_GetContext(mHandlePtr, HandleType); + } + + public bool SetContext(IntPtr UserContext) + { + return AllKFunctions.LibK_SetContext(mHandlePtr, HandleType, UserContext); + } + + public bool SetCleanupCallback(KLIB_HANDLE_CLEANUP_CB CleanupCallback) + { + return AllKFunctions.LibK_SetCleanupCallback(mHandlePtr, HandleType, CleanupCallback); + } + + #endregion + + #region Public Members + + public KLST_HANDLE(IntPtr Handle) + { + mHandlePtr = Handle; + } + + #endregion + + #region Private Members + + private readonly IntPtr mHandlePtr; + + #endregion + } + + public struct KHOT_HANDLE : IKLIB_HANDLE + { + #region IKLIB_HANDLE Members + + public IntPtr Pointer + { + get + { + return mHandlePtr; + } + } + + public KLIB_HANDLE_TYPE HandleType + { + get + { + return KLIB_HANDLE_TYPE.HOTK; + } + } + + public IntPtr GetContext() + { + return AllKFunctions.LibK_GetContext(mHandlePtr, HandleType); + } + + public bool SetContext(IntPtr UserContext) + { + return AllKFunctions.LibK_SetContext(mHandlePtr, HandleType, UserContext); + } + + public bool SetCleanupCallback(KLIB_HANDLE_CLEANUP_CB CleanupCallback) + { + return AllKFunctions.LibK_SetCleanupCallback(mHandlePtr, HandleType, CleanupCallback); + } + + #endregion + + #region Public Members + + public KHOT_HANDLE(IntPtr Handle) + { + mHandlePtr = Handle; + } + + #endregion + + #region Private Members + + private readonly IntPtr mHandlePtr; + + #endregion + } + + public struct KUSB_HANDLE : IKLIB_HANDLE + { + #region IKLIB_HANDLE Members + + public IntPtr Pointer + { + get + { + return mHandlePtr; + } + } + + public KLIB_HANDLE_TYPE HandleType + { + get + { + return KLIB_HANDLE_TYPE.USBK; + } + } + + public IntPtr GetContext() + { + return AllKFunctions.LibK_GetContext(mHandlePtr, HandleType); + } + + public bool SetContext(IntPtr UserContext) + { + return AllKFunctions.LibK_SetContext(mHandlePtr, HandleType, UserContext); + } + + public bool SetCleanupCallback(KLIB_HANDLE_CLEANUP_CB CleanupCallback) + { + return AllKFunctions.LibK_SetCleanupCallback(mHandlePtr, HandleType, CleanupCallback); + } + + #endregion + + #region USB Shared Device Context + + public IntPtr GetSharedContext() + { + return AllKFunctions.LibK_GetContext(mHandlePtr, KLIB_HANDLE_TYPE.USBSHAREDK); + } + + public bool SetSharedCleanupCallback(KLIB_HANDLE_CLEANUP_CB CleanupCallback) + { + return AllKFunctions.LibK_SetCleanupCallback(mHandlePtr, KLIB_HANDLE_TYPE.USBSHAREDK, CleanupCallback); + } + + public bool SetSharedContext(IntPtr UserContext) + { + return AllKFunctions.LibK_SetContext(mHandlePtr, KLIB_HANDLE_TYPE.USBSHAREDK, UserContext); + } + + #endregion + + #region Public Members + + public KUSB_HANDLE(IntPtr Handle) + { + mHandlePtr = Handle; + } + + #endregion + + #region Private Members + + private readonly IntPtr mHandlePtr; + + #endregion + } + + public struct KOVL_POOL_HANDLE : IKLIB_HANDLE + { + #region IKLIB_HANDLE Members + + public IntPtr Pointer + { + get + { + return mHandlePtr; + } + } + + public KLIB_HANDLE_TYPE HandleType + { + get + { + return KLIB_HANDLE_TYPE.OVLPOOLK; + } + } + + public IntPtr GetContext() + { + return AllKFunctions.LibK_GetContext(mHandlePtr, HandleType); + } + + public bool SetContext(IntPtr UserContext) + { + return AllKFunctions.LibK_SetContext(mHandlePtr, HandleType, UserContext); + } + + public bool SetCleanupCallback(KLIB_HANDLE_CLEANUP_CB CleanupCallback) + { + return AllKFunctions.LibK_SetCleanupCallback(mHandlePtr, HandleType, CleanupCallback); + } + + #endregion + + #region Public Members + + public KOVL_POOL_HANDLE(IntPtr Handle) + { + mHandlePtr = Handle; + } + + #endregion + + #region Private Members + + private readonly IntPtr mHandlePtr; + + #endregion + } + + public struct KOVL_HANDLE : IKLIB_HANDLE + { + #region IKLIB_HANDLE Members + + public IntPtr Pointer + { + get + { + return mHandlePtr; + } + } + + public KLIB_HANDLE_TYPE HandleType + { + get + { + return KLIB_HANDLE_TYPE.OVLK; + } + } + + public IntPtr GetContext() + { + return AllKFunctions.LibK_GetContext(mHandlePtr, HandleType); + } + + public bool SetContext(IntPtr UserContext) + { + return AllKFunctions.LibK_SetContext(mHandlePtr, HandleType, UserContext); + } + + public bool SetCleanupCallback(KLIB_HANDLE_CLEANUP_CB CleanupCallback) + { + return AllKFunctions.LibK_SetCleanupCallback(mHandlePtr, HandleType, CleanupCallback); + } + + #endregion + + #region Public Members + + public KOVL_HANDLE(IntPtr Handle) + { + mHandlePtr = Handle; + } + + #endregion + + #region Private Members + + private readonly IntPtr mHandlePtr; + + #endregion + } + + public struct KSTM_HANDLE : IKLIB_HANDLE + { + #region IKLIB_HANDLE Members + + public IntPtr Pointer + { + get + { + return mHandlePtr; + } + } + + public KLIB_HANDLE_TYPE HandleType + { + get + { + return KLIB_HANDLE_TYPE.STMK; + } + } + + public IntPtr GetContext() + { + return AllKFunctions.LibK_GetContext(mHandlePtr, HandleType); + } + + public bool SetContext(IntPtr UserContext) + { + return AllKFunctions.LibK_SetContext(mHandlePtr, HandleType, UserContext); + } + + public bool SetCleanupCallback(KLIB_HANDLE_CLEANUP_CB CleanupCallback) + { + return AllKFunctions.LibK_SetCleanupCallback(mHandlePtr, HandleType, CleanupCallback); + } + + #endregion + + #region Public Members + + public KSTM_HANDLE(IntPtr Handle) + { + mHandlePtr = Handle; + } + + #endregion + + #region Private Members + + private readonly IntPtr mHandlePtr; + + #endregion + } + + #endregion + + #region Internal Function Imports + + internal static class AllKFunctions + { + #region Delegates + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate void HotK_FreeAllDelegate(); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool HotK_FreeDelegate([In] KHOT_HANDLE Handle); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool HotK_InitDelegate([Out] out KHOT_HANDLE Handle, [In, Out] ref KHOT_PARAMS InitParams); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool IsoK_EnumPacketsDelegate([In] KISO_CONTEXT IsoContext, KISO_ENUM_PACKETS_CB EnumPackets, int StartPacketIndex, IntPtr UserState); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool IsoK_FreeDelegate([In] KISO_CONTEXT IsoContext); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool IsoK_GetPacketDelegate([In] KISO_CONTEXT IsoContext, int PacketIndex, [Out] out KISO_PACKET IsoPacket); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool IsoK_InitDelegate([Out] out KISO_CONTEXT IsoContext, int NumberOfPackets, int StartFrame); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool IsoK_ReUseDelegate([In] KISO_CONTEXT IsoContext); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool IsoK_SetPacketDelegate([In] KISO_CONTEXT IsoContext, int PacketIndex, [In] ref KISO_PACKET IsoPacket); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool IsoK_SetPacketsDelegate([In] KISO_CONTEXT IsoContext, int PacketSize); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate void LibK_Context_FreeDelegate(); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool LibK_Context_InitDelegate(IntPtr Heap, IntPtr Reserved); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool LibK_CopyDriverAPIDelegate([Out] out KUSB_DRIVER_API DriverAPI, [In] KUSB_HANDLE UsbHandle); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate IntPtr LibK_GetContextDelegate([In] IntPtr Handle, KLIB_HANDLE_TYPE HandleType); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate IntPtr LibK_GetDefaultContextDelegate(KLIB_HANDLE_TYPE HandleType); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool LibK_GetProcAddressDelegate(IntPtr ProcAddress, int DriverID, int FunctionID); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate void LibK_GetVersionDelegate([Out] out KLIB_VERSION Version); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool LibK_LoadDriverAPIDelegate([Out] out KUSB_DRIVER_API DriverAPI, int DriverID); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool LibK_SetCleanupCallbackDelegate([In] IntPtr Handle, KLIB_HANDLE_TYPE HandleType, KLIB_HANDLE_CLEANUP_CB CleanupCB); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool LibK_SetContextDelegate([In] IntPtr Handle, KLIB_HANDLE_TYPE HandleType, IntPtr ContextValue); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool LibK_SetDefaultContextDelegate(KLIB_HANDLE_TYPE HandleType, IntPtr ContextValue); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool LstK_CountDelegate([In] KLST_HANDLE DeviceList, ref int Count); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool LstK_CurrentDelegate([In] KLST_HANDLE DeviceList, [Out] out KLST_DEVINFO_HANDLE DeviceInfo); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool LstK_EnumerateDelegate([In] KLST_HANDLE DeviceList, KLST_ENUM_DEVINFO_CB EnumDevListCB, IntPtr Context); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool LstK_FindByVidPidDelegate([In] KLST_HANDLE DeviceList, int Vid, int Pid, [Out] out KLST_DEVINFO_HANDLE DeviceInfo); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool LstK_FreeDelegate([In] KLST_HANDLE DeviceList); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool LstK_InitDelegate([Out] out KLST_HANDLE DeviceList, KLST_FLAG Flags); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool LstK_InitExDelegate([Out] out KLST_HANDLE DeviceList, KLST_FLAG Flags, [In] ref KLST_PATTERN_MATCH PatternMatch); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool LstK_MoveNextDelegate([In] KLST_HANDLE DeviceList, [Out] out KLST_DEVINFO_HANDLE DeviceInfo); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate void LstK_MoveResetDelegate([In] KLST_HANDLE DeviceList); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool OvlK_AcquireDelegate([Out] out KOVL_HANDLE OverlappedK, [In] KOVL_POOL_HANDLE PoolHandle); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool OvlK_FreeDelegate([In] KOVL_POOL_HANDLE PoolHandle); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate IntPtr OvlK_GetEventHandleDelegate([In] KOVL_HANDLE OverlappedK); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool OvlK_InitDelegate([Out] out KOVL_POOL_HANDLE PoolHandle, [In] KUSB_HANDLE UsbHandle, int MaxOverlappedCount, KOVL_POOL_FLAG Flags); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool OvlK_IsCompleteDelegate([In] KOVL_HANDLE OverlappedK); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool OvlK_ReUseDelegate([In] KOVL_HANDLE OverlappedK); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool OvlK_ReleaseDelegate([In] KOVL_HANDLE OverlappedK); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool OvlK_WaitAndReleaseDelegate([In] KOVL_HANDLE OverlappedK, int TimeoutMS, out int TransferredLength); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool OvlK_WaitDelegate([In] KOVL_HANDLE OverlappedK, int TimeoutMS, KOVL_WAIT_FLAG WaitFlags, out int TransferredLength); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool OvlK_WaitOldestDelegate([In] KOVL_POOL_HANDLE PoolHandle, [Out] out KOVL_HANDLE OverlappedK, int TimeoutMS, KOVL_WAIT_FLAG WaitFlags, out int TransferredLength); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool OvlK_WaitOrCancelDelegate([In] KOVL_HANDLE OverlappedK, int TimeoutMS, out int TransferredLength); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool StmK_FreeDelegate([In] KSTM_HANDLE StreamHandle); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool StmK_InitDelegate( + [Out] out KSTM_HANDLE StreamHandle, [In] KUSB_HANDLE UsbHandle, byte PipeID, int MaxTransferSize, int MaxPendingTransfers, int MaxPendingIO, [In] ref KSTM_CALLBACK Callbacks, KSTM_FLAG Flags); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool StmK_ReadDelegate([In] KSTM_HANDLE StreamHandle, IntPtr Buffer, int Offset, int Length, out int TransferredLength); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool StmK_StartDelegate([In] KSTM_HANDLE StreamHandle); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool StmK_StopDelegate([In] KSTM_HANDLE StreamHandle, int TimeoutCancelMS); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool StmK_WriteDelegate([In] KSTM_HANDLE StreamHandle, IntPtr Buffer, int Offset, int Length, out int TransferredLength); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool UsbK_FreeDelegate([In] KUSB_HANDLE InterfaceHandle); + + #endregion + + static AllKFunctions() + { + if (String.IsNullOrEmpty(AllKOptions.LIBUSBK_FULLPATH_TO_ALTERNATE_DLL)) + mModuleLibusbK = LoadLibraryEx(AllKConstants.LIBUSBK_DLL, IntPtr.Zero, LoadLibraryFlags.NONE); + else + mModuleLibusbK = LoadLibraryEx(AllKOptions.LIBUSBK_FULLPATH_TO_ALTERNATE_DLL, IntPtr.Zero, LoadLibraryFlags.LOAD_WITH_ALTERED_SEARCH_PATH); + + if (mModuleLibusbK == IntPtr.Zero) + throw new DllNotFoundException("libusbK.dll not found. Please install drivers/applications and retry."); + + LoadDynamicFunctions(); + } + + #region Nested Enumerations + + [Flags] + private enum LoadLibraryFlags + { + NONE = 0, + DONT_RESOLVE_DLL_REFERENCES = 0x00000001, + LOAD_IGNORE_CODE_AUTHZ_LEVEL = 0x00000010, + LOAD_LIBRARY_AS_DATAFILE = 0x00000002, + LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE = 0x00000040, + LOAD_LIBRARY_AS_IMAGE_RESOURCE = 0x00000020, + LOAD_WITH_ALTERED_SEARCH_PATH = 0x00000008 + } + + #endregion + + #region Public Members + + public static HotK_FreeDelegate HotK_Free; + public static HotK_FreeAllDelegate HotK_FreeAll; + public static HotK_InitDelegate HotK_Init; + public static IsoK_EnumPacketsDelegate IsoK_EnumPackets; + public static IsoK_FreeDelegate IsoK_Free; + public static IsoK_GetPacketDelegate IsoK_GetPacket; + public static IsoK_InitDelegate IsoK_Init; + public static IsoK_ReUseDelegate IsoK_ReUse; + public static IsoK_SetPacketDelegate IsoK_SetPacket; + public static IsoK_SetPacketsDelegate IsoK_SetPackets; + public static LibK_Context_FreeDelegate LibK_Context_Free; + public static LibK_Context_InitDelegate LibK_Context_Init; + + public static LibK_CopyDriverAPIDelegate LibK_CopyDriverAPI; + public static LibK_GetContextDelegate LibK_GetContext; + public static LibK_GetDefaultContextDelegate LibK_GetDefaultContext; + public static LibK_GetProcAddressDelegate LibK_GetProcAddress; + public static LibK_GetVersionDelegate LibK_GetVersion; + public static LibK_LoadDriverAPIDelegate LibK_LoadDriverAPI; + public static LibK_SetCleanupCallbackDelegate LibK_SetCleanupCallback; + public static LibK_SetContextDelegate LibK_SetContext; + public static LibK_SetDefaultContextDelegate LibK_SetDefaultContext; + public static LstK_CountDelegate LstK_Count; + public static LstK_CurrentDelegate LstK_Current; + public static LstK_EnumerateDelegate LstK_Enumerate; + public static LstK_FindByVidPidDelegate LstK_FindByVidPid; + public static LstK_FreeDelegate LstK_Free; + public static LstK_InitDelegate LstK_Init; + public static LstK_InitExDelegate LstK_InitEx; + public static LstK_MoveNextDelegate LstK_MoveNext; + public static LstK_MoveResetDelegate LstK_MoveReset; + public static OvlK_AcquireDelegate OvlK_Acquire; + public static OvlK_FreeDelegate OvlK_Free; + public static OvlK_GetEventHandleDelegate OvlK_GetEventHandle; + public static OvlK_InitDelegate OvlK_Init; + public static OvlK_IsCompleteDelegate OvlK_IsComplete; + public static OvlK_ReUseDelegate OvlK_ReUse; + public static OvlK_ReleaseDelegate OvlK_Release; + public static OvlK_WaitDelegate OvlK_Wait; + public static OvlK_WaitAndReleaseDelegate OvlK_WaitAndRelease; + public static OvlK_WaitOldestDelegate OvlK_WaitOldest; + public static OvlK_WaitOrCancelDelegate OvlK_WaitOrCancel; + public static StmK_FreeDelegate StmK_Free; + public static StmK_InitDelegate StmK_Init; + public static StmK_ReadDelegate StmK_Read; + public static StmK_StartDelegate StmK_Start; + public static StmK_StopDelegate StmK_Stop; + public static StmK_WriteDelegate StmK_Write; + public static UsbK_FreeDelegate UsbK_Free; + + #endregion + + #region Private Members + + [DllImport("kernel32.dll", CharSet = CharSet.Ansi, ExactSpelling = true, SetLastError = true)] + private static extern IntPtr GetProcAddress(IntPtr hModule, string procName); + + private static void LoadDynamicFunctions() + { + LibK_GetVersion = (LibK_GetVersionDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "LibK_GetVersion"), typeof (LibK_GetVersionDelegate)); + LibK_GetContext = (LibK_GetContextDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "LibK_GetContext"), typeof (LibK_GetContextDelegate)); + LibK_SetContext = (LibK_SetContextDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "LibK_SetContext"), typeof (LibK_SetContextDelegate)); + LibK_SetCleanupCallback = (LibK_SetCleanupCallbackDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "LibK_SetCleanupCallback"), typeof (LibK_SetCleanupCallbackDelegate)); + LibK_LoadDriverAPI = (LibK_LoadDriverAPIDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "LibK_LoadDriverAPI"), typeof (LibK_LoadDriverAPIDelegate)); + LibK_CopyDriverAPI = (LibK_CopyDriverAPIDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "LibK_CopyDriverAPI"), typeof (LibK_CopyDriverAPIDelegate)); + LibK_GetProcAddress = (LibK_GetProcAddressDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "LibK_GetProcAddress"), typeof (LibK_GetProcAddressDelegate)); + LibK_SetDefaultContext = (LibK_SetDefaultContextDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "LibK_SetDefaultContext"), typeof (LibK_SetDefaultContextDelegate)); + LibK_GetDefaultContext = (LibK_GetDefaultContextDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "LibK_GetDefaultContext"), typeof (LibK_GetDefaultContextDelegate)); + LibK_Context_Init = (LibK_Context_InitDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "LibK_Context_Init"), typeof (LibK_Context_InitDelegate)); + LibK_Context_Free = (LibK_Context_FreeDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "LibK_Context_Free"), typeof (LibK_Context_FreeDelegate)); + UsbK_Free = (UsbK_FreeDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "UsbK_Free"), typeof (UsbK_FreeDelegate)); + LstK_Init = (LstK_InitDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "LstK_Init"), typeof (LstK_InitDelegate)); + LstK_InitEx = (LstK_InitExDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "LstK_InitEx"), typeof (LstK_InitExDelegate)); + LstK_Free = (LstK_FreeDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "LstK_Free"), typeof (LstK_FreeDelegate)); + LstK_Enumerate = (LstK_EnumerateDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "LstK_Enumerate"), typeof (LstK_EnumerateDelegate)); + LstK_Current = (LstK_CurrentDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "LstK_Current"), typeof (LstK_CurrentDelegate)); + LstK_MoveNext = (LstK_MoveNextDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "LstK_MoveNext"), typeof (LstK_MoveNextDelegate)); + LstK_MoveReset = (LstK_MoveResetDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "LstK_MoveReset"), typeof (LstK_MoveResetDelegate)); + LstK_FindByVidPid = (LstK_FindByVidPidDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "LstK_FindByVidPid"), typeof (LstK_FindByVidPidDelegate)); + LstK_Count = (LstK_CountDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "LstK_Count"), typeof (LstK_CountDelegate)); + HotK_Init = (HotK_InitDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "HotK_Init"), typeof (HotK_InitDelegate)); + HotK_Free = (HotK_FreeDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "HotK_Free"), typeof (HotK_FreeDelegate)); + HotK_FreeAll = (HotK_FreeAllDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "HotK_FreeAll"), typeof (HotK_FreeAllDelegate)); + OvlK_Acquire = (OvlK_AcquireDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "OvlK_Acquire"), typeof (OvlK_AcquireDelegate)); + OvlK_Release = (OvlK_ReleaseDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "OvlK_Release"), typeof (OvlK_ReleaseDelegate)); + OvlK_Init = (OvlK_InitDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "OvlK_Init"), typeof (OvlK_InitDelegate)); + OvlK_Free = (OvlK_FreeDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "OvlK_Free"), typeof (OvlK_FreeDelegate)); + OvlK_GetEventHandle = (OvlK_GetEventHandleDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "OvlK_GetEventHandle"), typeof (OvlK_GetEventHandleDelegate)); + OvlK_Wait = (OvlK_WaitDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "OvlK_Wait"), typeof (OvlK_WaitDelegate)); + OvlK_WaitOldest = (OvlK_WaitOldestDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "OvlK_WaitOldest"), typeof (OvlK_WaitOldestDelegate)); + OvlK_WaitOrCancel = (OvlK_WaitOrCancelDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "OvlK_WaitOrCancel"), typeof (OvlK_WaitOrCancelDelegate)); + OvlK_WaitAndRelease = (OvlK_WaitAndReleaseDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "OvlK_WaitAndRelease"), typeof (OvlK_WaitAndReleaseDelegate)); + OvlK_IsComplete = (OvlK_IsCompleteDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "OvlK_IsComplete"), typeof (OvlK_IsCompleteDelegate)); + OvlK_ReUse = (OvlK_ReUseDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "OvlK_ReUse"), typeof (OvlK_ReUseDelegate)); + StmK_Init = (StmK_InitDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "StmK_Init"), typeof (StmK_InitDelegate)); + StmK_Free = (StmK_FreeDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "StmK_Free"), typeof (StmK_FreeDelegate)); + StmK_Start = (StmK_StartDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "StmK_Start"), typeof (StmK_StartDelegate)); + StmK_Stop = (StmK_StopDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "StmK_Stop"), typeof (StmK_StopDelegate)); + StmK_Read = (StmK_ReadDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "StmK_Read"), typeof (StmK_ReadDelegate)); + StmK_Write = (StmK_WriteDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "StmK_Write"), typeof (StmK_WriteDelegate)); + IsoK_Init = (IsoK_InitDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "IsoK_Init"), typeof (IsoK_InitDelegate)); + IsoK_Free = (IsoK_FreeDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "IsoK_Free"), typeof (IsoK_FreeDelegate)); + IsoK_SetPackets = (IsoK_SetPacketsDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "IsoK_SetPackets"), typeof (IsoK_SetPacketsDelegate)); + IsoK_SetPacket = (IsoK_SetPacketDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "IsoK_SetPacket"), typeof (IsoK_SetPacketDelegate)); + IsoK_GetPacket = (IsoK_GetPacketDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "IsoK_GetPacket"), typeof (IsoK_GetPacketDelegate)); + IsoK_EnumPackets = (IsoK_EnumPacketsDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "IsoK_EnumPackets"), typeof (IsoK_EnumPacketsDelegate)); + IsoK_ReUse = (IsoK_ReUseDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "IsoK_ReUse"), typeof (IsoK_ReUseDelegate)); + } + + [DllImport("kernel32.dll")] + private static extern IntPtr LoadLibraryEx(string lpFileName, IntPtr hReservedNull, LoadLibraryFlags dwFlags); + + private static readonly IntPtr mModuleLibusbK = IntPtr.Zero; + + #endregion + } + + #endregion + + #region Enumerations + + /// Values used in the \c bmAttributes field of a \ref USB_ENDPOINT_DESCRIPTOR + public enum USBD_PIPE_TYPE + { + /// Indicates a control endpoint + UsbdPipeTypeControl, + + /// Indicates an isochronous endpoint + UsbdPipeTypeIsochronous, + + /// Indicates a bulk endpoint + UsbdPipeTypeBulk, + + /// Indicates an interrupt endpoint + UsbdPipeTypeInterrupt, + } + + /// Additional ISO transfer flags. + [Flags] + public enum KISO_FLAG + { + NONE = 0, + + /// Do not start the transfer immediately, instead use \ref KISO_CONTEXT::StartFrame. + SET_START_FRAME = 0x00000001, + } + + /// Handle type enumeration. + public enum KLIB_HANDLE_TYPE + { + /// Hot plug handle. \ref KHOT_HANDLE + HOTK, + + /// USB handle. \ref KUSB_HANDLE + USBK, + + /// Shared USB handle. \ref KUSB_HANDLE + USBSHAREDK, + + /// Device list handle. \ref KLST_HANDLE + LSTK, + + /// Device info handle. \ref KLST_DEVINFO_HANDLE + LSTINFOK, + + /// Overlapped handle. \ref KOVL_HANDLE + OVLK, + + /// Overlapped pool handle. \ref KOVL_POOL_HANDLE + OVLPOOLK, + + /// Pipe stream handle. \ref KSTM_HANDLE + STMK, + + /// Max handle type count. + COUNT + } + + /// Device list sync flags. + [Flags] + public enum KLST_SYNC_FLAG + { + /// Cleared/invalid state. + NONE = 0, + + /// Unchanged state, + UNCHANGED = 0x0001, + + /// Added (Arrival) state, + ADDED = 0x0002, + + /// Removed (Unplugged) state, + REMOVED = 0x0004, + + /// Connect changed state. + CONNECT_CHANGE = 0x0008, + + /// All states. + MASK = 0x000F, + } + + /// Device list initialization flags. + [Flags] + public enum KLST_FLAG + { + /// No flags (or 0) + NONE = 0, + + /// Enable listings for the raw device interface GUID \b only. {A5DCBF10-6530-11D2-901F-00C04FB951ED} + INCLUDE_RAWGUID = 0x0001, + + /// List all libusbK devices including those not currently connected. + INCLUDE_DISCONNECT = 0x0002, + } + + /// bmRequest.Dir + public enum BMREQUEST_DIR + { + HOST_TO_DEVICE = 0, + DEVICE_TO_HOST = 1, + } + + /// bmRequest.Type + public enum BMREQUEST_TYPE + { + /// Standard request. See \ref USB_REQUEST_ENUM + STANDARD = 0, + + /// Class-specific request. + CLASS = 1, + + /// Vendor-specific request + VENDOR = 2, + } + + /// bmRequest.Recipient + public enum BMREQUEST_RECIPIENT + { + /// Request is for a device. + DEVICE = 0, + + /// Request is for an interface of a device. + INTERFACE = 1, + + /// Request is for an endpoint of a device. + ENDPOINT = 2, + + /// Request is for a vendor-specific purpose. + OTHER = 3, + } + + /// Values for the bits returned by the \ref USB_REQUEST_GET_STATUS request. + public enum USB_GETSTATUS + { + /// Device is self powered + SELF_POWERED = 0x01, + + /// Device can wake the system from a low power/sleeping state. + REMOTE_WAKEUP_ENABLED = 0x02 + } + + /// Standard USB descriptor types. For more information, see section 9-5 of the USB 3.0 specifications. + public enum USB_DESCRIPTOR_TYPE + { + /// Device descriptor type. + DEVICE = 0x01, + + /// Configuration descriptor type. + CONFIGURATION = 0x02, + + /// String descriptor type. + STRING = 0x03, + + /// Interface descriptor type. + INTERFACE = 0x04, + + /// Endpoint descriptor type. + ENDPOINT = 0x05, + + /// Device qualifier descriptor type. + DEVICE_QUALIFIER = 0x06, + + /// Config power descriptor type. + CONFIG_POWER = 0x07, + + /// Interface power descriptor type. + INTERFACE_POWER = 0x08, + + /// Interface association descriptor type. + INTERFACE_ASSOCIATION = 0x0B, + } + + /// Usb handle specific properties that can be retrieved with \ref UsbK_GetProperty. + public enum KUSB_PROPERTY + { + /// Get the internal device file handle used for operations such as GetOverlappedResult or DeviceIoControl. + DEVICE_FILE_HANDLE, + + COUNT + } + + /// Supported driver id enumeration. + public enum KUSB_DRVID + { + /// libusbK.sys driver ID + LIBUSBK, + + /// libusb0.sys driver ID + LIBUSB0, + + /// WinUSB.sys driver ID + WINUSB, + + /// libusb0.sys filter driver ID + LIBUSB0_FILTER, + + /// Supported driver count + COUNT + } + + /// Supported function id enumeration. + public enum KUSB_FNID + { + /// \ref UsbK_Init dynamic driver function id. + Init, + + /// \ref UsbK_Free dynamic driver function id. + Free, + + /// \ref UsbK_ClaimInterface dynamic driver function id. + ClaimInterface, + + /// \ref UsbK_ReleaseInterface dynamic driver function id. + ReleaseInterface, + + /// \ref UsbK_SetAltInterface dynamic driver function id. + SetAltInterface, + + /// \ref UsbK_GetAltInterface dynamic driver function id. + GetAltInterface, + + /// \ref UsbK_GetDescriptor dynamic driver function id. + GetDescriptor, + + /// \ref UsbK_ControlTransfer dynamic driver function id. + ControlTransfer, + + /// \ref UsbK_SetPowerPolicy dynamic driver function id. + SetPowerPolicy, + + /// \ref UsbK_GetPowerPolicy dynamic driver function id. + GetPowerPolicy, + + /// \ref UsbK_SetConfiguration dynamic driver function id. + SetConfiguration, + + /// \ref UsbK_GetConfiguration dynamic driver function id. + GetConfiguration, + + /// \ref UsbK_ResetDevice dynamic driver function id. + ResetDevice, + + /// \ref UsbK_Initialize dynamic driver function id. + Initialize, + + /// \ref UsbK_SelectInterface dynamic driver function id. + SelectInterface, + + /// \ref UsbK_GetAssociatedInterface dynamic driver function id. + GetAssociatedInterface, + + /// \ref UsbK_Clone dynamic driver function id. + Clone, + + /// \ref UsbK_QueryInterfaceSettings dynamic driver function id. + QueryInterfaceSettings, + + /// \ref UsbK_QueryDeviceInformation dynamic driver function id. + QueryDeviceInformation, + + /// \ref UsbK_SetCurrentAlternateSetting dynamic driver function id. + SetCurrentAlternateSetting, + + /// \ref UsbK_GetCurrentAlternateSetting dynamic driver function id. + GetCurrentAlternateSetting, + + /// \ref UsbK_QueryPipe dynamic driver function id. + QueryPipe, + + /// \ref UsbK_SetPipePolicy dynamic driver function id. + SetPipePolicy, + + /// \ref UsbK_GetPipePolicy dynamic driver function id. + GetPipePolicy, + + /// \ref UsbK_ReadPipe dynamic driver function id. + ReadPipe, + + /// \ref UsbK_WritePipe dynamic driver function id. + WritePipe, + + /// \ref UsbK_ResetPipe dynamic driver function id. + ResetPipe, + + /// \ref UsbK_AbortPipe dynamic driver function id. + AbortPipe, + + /// \ref UsbK_FlushPipe dynamic driver function id. + FlushPipe, + + /// \ref UsbK_IsoReadPipe dynamic driver function id. + IsoReadPipe, + + /// \ref UsbK_IsoWritePipe dynamic driver function id. + IsoWritePipe, + + /// \ref UsbK_GetCurrentFrameNumber dynamic driver function id. + GetCurrentFrameNumber, + + /// \ref UsbK_GetOverlappedResult dynamic driver function id. + GetOverlappedResult, + + /// \ref UsbK_GetProperty dynamic driver function id. + GetProperty, + + + /// Supported function count + COUNT, + } + + /// Hot plug config flags. + [Flags] + public enum KHOT_FLAG + { + /// No flags (or 0) + NONE, + + /// Notify all devices which match upon a succuessful call to \ref HotK_Init. + PLUG_ALL_ON_INIT = 0x0001, + + /// Allow other \ref KHOT_HANDLE instances to consume this match. + PASS_DUPE_INSTANCE = 0x0002, + + /// If a \c UserHwnd is specified, use \c PostMessage instead of \c SendMessage. + POST_USER_MESSAGE = 0x0004, + } + + /// \c WaitFlags used by \ref OvlK_Wait. + [Flags] + public enum KOVL_WAIT_FLAG + { + /// Do not perform any additional actions upon exiting \ref OvlK_Wait. + NONE = 0, + + /// If the i/o operation completes successfully, release the OverlappedK back to it's pool. + RELEASE_ON_SUCCESS = 0x0001, + + /// If the i/o operation fails, release the OverlappedK back to it's pool. + RELEASE_ON_FAIL = 0x0002, + + /// If the i/o operation fails or completes successfully, release the OverlappedK back to its pool. Perform no actions if it times-out. + RELEASE_ON_SUCCESS_FAIL = 0x0003, + + /// If the i/o operation times-out cancel it, but do not release the OverlappedK back to its pool. + CANCEL_ON_TIMEOUT = 0x0004, + + /// If the i/o operation times-out, cancel it and release the OverlappedK back to its pool. + RELEASE_ON_TIMEOUT = 0x000C, + + /// Always release the OverlappedK back to its pool. If the operation timed-out, cancel it before releasing back to its pool. + RELEASE_ALWAYS = 0x000F, + + /// Uses alterable wait functions. See http://msdn.microsoft.com/en-us/library/windows/desktop/ms687036%28v=vs.85%29.aspx + ALERTABLE = 0x0010, + } + + /// \c Overlapped pool config flags. + [Flags] + public enum KOVL_POOL_FLAG + { + NONE = 0, + } + + /// Stream config flags. + [Flags] + public enum KSTM_FLAG : uint + { + /// None + NONE = 0, + NO_PARTIAL_XFERS = 0x00100000, + USE_TIMEOUT = 0x80000000, + TIMEOUT_MASK = 0x0001FFFF + } + + /// Stream config flags. + public enum KSTM_COMPLETE_RESULT + { + /// Valid + VALID = 0, + + /// Invalid + INVALID, + } + + #endregion + + #region Structs + + /// The \c WINUSB_PIPE_INFORMATION structure contains pipe information that the \ref UsbK_QueryPipe routine retrieves. + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] + public struct WINUSB_PIPE_INFORMATION + { + /// A \c USBD_PIPE_TYPE enumeration value that specifies the pipe type + public USBD_PIPE_TYPE PipeType; + + /// The pipe identifier (ID) + public byte PipeId; + + /// The maximum size, in bytes, of the packets that are transmitted on the pipe + public ushort MaximumPacketSize; + + /// The pipe interval + public byte Interval; + + + public override string ToString() + { + return string.Format("PipeType: {0}\nPipeId: {1}\nMaximumPacketSize: {2}\nInterval: {3}\n", PipeType, PipeId.ToString("X2") + "h", MaximumPacketSize, Interval.ToString("X2") + "h"); + } + }; + + /// The \c WINUSB_SETUP_PACKET structure describes a USB setup packet. + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)] + public struct WINUSB_SETUP_PACKET + { + /// The request type. The values that are assigned to this member are defined in Table 9.2 of section 9.3 of the Universal Serial Bus (USB) specification (www.usb.org). + public byte RequestType; + + /// The device request. The values that are assigned to this member are defined in Table 9.3 of section 9.4 of the Universal Serial Bus (USB) specification. + public byte Request; + + /// The meaning of this member varies according to the request. For an explanation of this member, see the Universal Serial Bus (USB) specification. + public ushort Value; + + /// The meaning of this member varies according to the request. For an explanation of this member, see the Universal Serial Bus (USB) specification. + public ushort Index; + + /// The number of bytes to transfer. (not including the \c WINUSB_SETUP_PACKET itself) + public ushort Length; + + + public override string ToString() + { + return string.Format("RequestType: {0}\nRequest: {1}\nValue: {2}\nIndex: {3}\nLength: {4}\n", + RequestType.ToString("X2") + "h", + Request.ToString("X2") + "h", + Value.ToString("X4") + "h", + Index.ToString("X4") + "h", + Length); + } + }; + + /// Structure describing an isochronous transfer packet. + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)] + public struct KISO_PACKET + { + /// Specifies the offset, in bytes, of the buffer for this packet from the beginning of the entire isochronous transfer data buffer. + public int Offset; + + /// Set by the host controller to indicate the actual number of bytes received by the device for isochronous IN transfers. Length not used for isochronous OUT transfers. + public ushort Length; + + /// Contains the 16 least significant USBD status bits, on return from the host controller driver, of this transfer packet. + public ushort Status; + + + public override string ToString() + { + return string.Format("Offset: {0}\nLength: {1}\nStatus: {2}\n", Offset, Length, Status.ToString("X4") + "h"); + } + }; + + [StructLayout(LayoutKind.Sequential)] + public struct KISO_CONTEXT + { + private readonly IntPtr mHandlePtr; + + public KISO_CONTEXT(IntPtr Handle) + { + mHandlePtr = Handle; + } + + public IntPtr Pointer + { + get + { + return mHandlePtr; + } + } + + /// KISO_CONTEXT_MAP is used for calculating field offsets only + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)] + private struct KISO_CONTEXT_MAP + { + /// Additional ISO transfer flags. See \ref KISO_FLAG. + private readonly KISO_FLAG Flags; + + /// Specifies the frame number that the transfer should begin on (0 for ASAP). + private readonly int StartFrame; + + /// Contains the number of packets that completed with an error condition on return from the host controller driver. + private readonly short ErrorCount; + + /// Specifies the number of packets that are described by the variable-length array member \c IsoPacket. + private readonly short NumberOfPackets; + + /// Contains the URB Hdr.Status value on return from the host controller driver. + private readonly int UrbHdrStatus; + }; + + private static readonly int ofsFlags = Marshal.OffsetOf(typeof (KISO_CONTEXT_MAP), "Flags").ToInt32(); + private static readonly int ofsStartFrame = Marshal.OffsetOf(typeof (KISO_CONTEXT_MAP), "StartFrame").ToInt32(); + private static readonly int ofsErrorCount = Marshal.OffsetOf(typeof (KISO_CONTEXT_MAP), "ErrorCount").ToInt32(); + private static readonly int ofsNumberOfPackets = Marshal.OffsetOf(typeof (KISO_CONTEXT_MAP), "NumberOfPackets").ToInt32(); + private static readonly int ofsUrbHdrStatus = Marshal.OffsetOf(typeof (KISO_CONTEXT_MAP), "UrbHdrStatus").ToInt32(); + + + /// Additional ISO transfer flags. See \ref KISO_FLAG. + public KISO_FLAG Flags + { + get + { + return (KISO_FLAG) Marshal.ReadInt32(mHandlePtr, ofsFlags); + } + } + + + /// Specifies the frame number that the transfer should begin on (0 for ASAP). + public int StartFrame + { + get + { + return Marshal.ReadInt32(mHandlePtr, ofsStartFrame); + } + } + + + /// Contains the number of packets that completed with an error condition on return from the host controller driver. + public short ErrorCount + { + get + { + return Marshal.ReadInt16(mHandlePtr, ofsErrorCount); + } + } + + + /// Specifies the number of packets that are described by the variable-length array member \c IsoPacket. + public short NumberOfPackets + { + get + { + return Marshal.ReadInt16(mHandlePtr, ofsNumberOfPackets); + } + } + + + /// Contains the URB Hdr.Status value on return from the host controller driver. + public int UrbHdrStatus + { + get + { + return Marshal.ReadInt32(mHandlePtr, ofsUrbHdrStatus); + } + } + + + public override string ToString() + { + return string.Format("Flags: {0}\nStartFrame: {1}\nErrorCount: {2}\nNumberOfPackets: {3}\nUrbHdrStatus: {4}\n", + Flags.ToString(), + StartFrame, + ErrorCount, + NumberOfPackets, + UrbHdrStatus.ToString("X8") + "h"); + } + } + + /// libusbK verson information structure. + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] + public struct KLIB_VERSION + { + /// Major version number. + public int Major; + + /// Minor version number. + public int Minor; + + /// Micro version number. + public int Micro; + + /// Nano version number. + public int Nano; + + public override string ToString() + { + return string.Format("Major: {0}\nMinor: {1}\nMicro: {2}\nNano: {3}\n", Major, Minor, Micro, Nano); + } + }; + + /// Common usb device information structure + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] + public struct KLST_DEV_COMMON_INFO + { + /// VendorID parsed from \ref KLST_DEVINFO::DeviceID + public int Vid; + + /// ProductID parsed from \ref KLST_DEVINFO::DeviceID + public int Pid; + + /// Composite interface number parsed from \ref KLST_DEVINFO::DeviceID. Set to \b -1 for devices that do not have the composite parent driver. + public int MI; + + // An ID that uniquely identifies a USB device. + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = AllKConstants.KLST_STRING_MAX_LEN)] public string InstanceID; + + + public override string ToString() + { + return string.Format("Vid: {0}\nPid: {1}\nMI: {2}\nInstanceID: {3}\n", Vid.ToString("X4") + "h", Pid.ToString("X4") + "h", MI.ToString("X2") + "h", InstanceID); + } + }; + + [StructLayout(LayoutKind.Sequential)] + public struct KLST_DEVINFO_HANDLE : IKLIB_HANDLE + { + private readonly IntPtr mHandlePtr; + + public KLST_DEVINFO_HANDLE(IntPtr Handle) + { + mHandlePtr = Handle; + } + + public IntPtr Pointer + { + get + { + return mHandlePtr; + } + } + + public KLIB_HANDLE_TYPE HandleType + { + get + { + return KLIB_HANDLE_TYPE.LSTINFOK; + } + } + + public IntPtr GetContext() + { + return AllKFunctions.LibK_GetContext(mHandlePtr, HandleType); + } + + public bool SetContext(IntPtr UserContext) + { + return AllKFunctions.LibK_SetContext(mHandlePtr, HandleType, UserContext); + } + + public bool SetCleanupCallback(KLIB_HANDLE_CLEANUP_CB CleanupCallback) + { + return AllKFunctions.LibK_SetCleanupCallback(mHandlePtr, HandleType, CleanupCallback); + } + + /// KLST_DEVINFO_MAP is used for calculating field offsets only + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] + private struct KLST_DEVINFO_MAP + { + /// Common usb device information + private readonly KLST_DEV_COMMON_INFO Common; + + /// Driver id this device element is using + private readonly int DriverID; + + /// Device interface GUID + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = AllKConstants.KLST_STRING_MAX_LEN)] private readonly string DeviceInterfaceGUID; + + /// Device instance ID. + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = AllKConstants.KLST_STRING_MAX_LEN)] private readonly string DeviceID; + + /// Class GUID. + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = AllKConstants.KLST_STRING_MAX_LEN)] private readonly string ClassGUID; + + /// Manufacturer name as specified in the INF file. + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = AllKConstants.KLST_STRING_MAX_LEN)] private readonly string Mfg; + + /// Device description as specified in the INF file. + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = AllKConstants.KLST_STRING_MAX_LEN)] private readonly string DeviceDesc; + + /// Driver service name. + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = AllKConstants.KLST_STRING_MAX_LEN)] private readonly string Service; + + /// Unique identifier. + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = AllKConstants.KLST_STRING_MAX_LEN)] private readonly string SymbolicLink; + + /// physical device filename used with the Windows \c CreateFile() + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = AllKConstants.KLST_STRING_MAX_LEN)] private readonly string DevicePath; + + /// libusb-win32 filter index id. + private readonly int LUsb0FilterIndex; + + /// Indicates the devices connection state. + private readonly bool Connected; + + /// Synchronization flags. (internal use only) + private readonly KLST_SYNC_FLAG SyncFlags; + + private readonly int BusNumber; + + private readonly int DeviceAddress; + + /// If the the device is serialized, represents the string value of \ref USB_DEVICE_DESCRIPTOR::iSerialNumber. For Devices without a \b iSerialNumber, represents the unique \b InstanceID assigned by \b Windows. + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = AllKConstants.KLST_STRING_MAX_LEN)] private readonly string SerialNumber; + }; + + private static readonly int ofsCommon = Marshal.OffsetOf(typeof (KLST_DEVINFO_MAP), "Common").ToInt32(); + private static readonly int ofsDriverID = Marshal.OffsetOf(typeof (KLST_DEVINFO_MAP), "DriverID").ToInt32(); + private static readonly int ofsDeviceInterfaceGUID = Marshal.OffsetOf(typeof (KLST_DEVINFO_MAP), "DeviceInterfaceGUID").ToInt32(); + private static readonly int ofsDeviceID = Marshal.OffsetOf(typeof (KLST_DEVINFO_MAP), "DeviceID").ToInt32(); + private static readonly int ofsClassGUID = Marshal.OffsetOf(typeof (KLST_DEVINFO_MAP), "ClassGUID").ToInt32(); + private static readonly int ofsMfg = Marshal.OffsetOf(typeof (KLST_DEVINFO_MAP), "Mfg").ToInt32(); + private static readonly int ofsDeviceDesc = Marshal.OffsetOf(typeof (KLST_DEVINFO_MAP), "DeviceDesc").ToInt32(); + private static readonly int ofsService = Marshal.OffsetOf(typeof (KLST_DEVINFO_MAP), "Service").ToInt32(); + private static readonly int ofsSymbolicLink = Marshal.OffsetOf(typeof (KLST_DEVINFO_MAP), "SymbolicLink").ToInt32(); + private static readonly int ofsDevicePath = Marshal.OffsetOf(typeof (KLST_DEVINFO_MAP), "DevicePath").ToInt32(); + private static readonly int ofsLUsb0FilterIndex = Marshal.OffsetOf(typeof (KLST_DEVINFO_MAP), "LUsb0FilterIndex").ToInt32(); + private static readonly int ofsConnected = Marshal.OffsetOf(typeof (KLST_DEVINFO_MAP), "Connected").ToInt32(); + private static readonly int ofsSyncFlags = Marshal.OffsetOf(typeof (KLST_DEVINFO_MAP), "SyncFlags").ToInt32(); + private static readonly int ofsBusNumber = Marshal.OffsetOf(typeof (KLST_DEVINFO_MAP), "BusNumber").ToInt32(); + private static readonly int ofsDeviceAddress = Marshal.OffsetOf(typeof (KLST_DEVINFO_MAP), "DeviceAddress").ToInt32(); + private static readonly int ofsSerialNumber = Marshal.OffsetOf(typeof (KLST_DEVINFO_MAP), "SerialNumber").ToInt32(); + + + /// Common usb device information + public KLST_DEV_COMMON_INFO Common + { + get + { + return (KLST_DEV_COMMON_INFO) Marshal.PtrToStructure(new IntPtr(mHandlePtr.ToInt64() + ofsCommon), typeof (KLST_DEV_COMMON_INFO)); + } + } + + + /// Driver id this device element is using + public int DriverID + { + get + { + return Marshal.ReadInt32(mHandlePtr, ofsDriverID); + } + } + + + /// Device interface GUID + public string DeviceInterfaceGUID + { + get + { + return Marshal.PtrToStringAnsi(new IntPtr(mHandlePtr.ToInt64() + ofsDeviceInterfaceGUID)); + } + } + + + /// Device instance ID. + public string DeviceID + { + get + { + return Marshal.PtrToStringAnsi(new IntPtr(mHandlePtr.ToInt64() + ofsDeviceID)); + } + } + + + /// Class GUID. + public string ClassGUID + { + get + { + return Marshal.PtrToStringAnsi(new IntPtr(mHandlePtr.ToInt64() + ofsClassGUID)); + } + } + + + /// Manufacturer name as specified in the INF file. + public string Mfg + { + get + { + return Marshal.PtrToStringAnsi(new IntPtr(mHandlePtr.ToInt64() + ofsMfg)); + } + } + + + /// Device description as specified in the INF file. + public string DeviceDesc + { + get + { + return Marshal.PtrToStringAnsi(new IntPtr(mHandlePtr.ToInt64() + ofsDeviceDesc)); + } + } + + + /// Driver service name. + public string Service + { + get + { + return Marshal.PtrToStringAnsi(new IntPtr(mHandlePtr.ToInt64() + ofsService)); + } + } + + + /// Unique identifier. + public string SymbolicLink + { + get + { + return Marshal.PtrToStringAnsi(new IntPtr(mHandlePtr.ToInt64() + ofsSymbolicLink)); + } + } + + + /// physical device filename used with the Windows \c CreateFile() + public string DevicePath + { + get + { + return Marshal.PtrToStringAnsi(new IntPtr(mHandlePtr.ToInt64() + ofsDevicePath)); + } + } + + + /// libusb-win32 filter index id. + public int LUsb0FilterIndex + { + get + { + return Marshal.ReadInt32(mHandlePtr, ofsLUsb0FilterIndex); + } + } + + + /// Indicates the devices connection state. + public bool Connected + { + get + { + return Marshal.ReadInt32(mHandlePtr, ofsConnected) != 0; + } + } + + + /// Synchronization flags. (internal use only) + public KLST_SYNC_FLAG SyncFlags + { + get + { + return (KLST_SYNC_FLAG) Marshal.ReadInt32(mHandlePtr, ofsSyncFlags); + } + } + + + public int BusNumber + { + get + { + return Marshal.ReadInt32(mHandlePtr, ofsBusNumber); + } + } + + + public int DeviceAddress + { + get + { + return Marshal.ReadInt32(mHandlePtr, ofsDeviceAddress); + } + } + + + /// If the the device is serialized, represents the string value of \ref USB_DEVICE_DESCRIPTOR::iSerialNumber. For Devices without a \b iSerialNumber, represents the unique \b InstanceID assigned by \b Windows. + public string SerialNumber + { + get + { + return Marshal.PtrToStringAnsi(new IntPtr(mHandlePtr.ToInt64() + ofsSerialNumber)); + } + } + + + public override string ToString() + { + return + string.Format( + "DriverID: {0}\nDeviceInterfaceGUID: {1}\nDeviceID: {2}\nClassGUID: {3}\nMfg: {4}\nDeviceDesc: {5}\nService: {6}\nSymbolicLink: {7}\nDevicePath: {8}\nLUsb0FilterIndex: {9}\nConnected: {10}\nSyncFlags: {11}\nBusNumber: {12}\nDeviceAddress: {13}\nSerialNumber: {14}\n", + DriverID, + DeviceInterfaceGUID, + DeviceID, + ClassGUID, + Mfg, + DeviceDesc, + Service, + SymbolicLink, + DevicePath, + LUsb0FilterIndex, + Connected, + SyncFlags.ToString(), + BusNumber, + DeviceAddress, + SerialNumber); + } + } + + /// Device list/hot-plug pattern match structure. + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Size = 1024)] + public struct KLST_PATTERN_MATCH + { + /// Pattern match a device instance id. + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = AllKConstants.KLST_STRING_MAX_LEN)] public string DeviceID; + + /// Pattern match a device interface guid. + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = AllKConstants.KLST_STRING_MAX_LEN)] public string DeviceInterfaceGUID; + + /// Pattern match a symbolic link. + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = AllKConstants.KLST_STRING_MAX_LEN)] public string ClassGUID; + + + public override string ToString() + { + return string.Format("DeviceID: {0}\nDeviceInterfaceGUID: {1}\nClassGUID: {2}\n", DeviceID, DeviceInterfaceGUID, ClassGUID); + } + }; + + /// A structure representing the standard USB device descriptor. + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)] + public struct USB_DEVICE_DESCRIPTOR + { + /// Size of this descriptor (in bytes) + public byte bLength; + + /// Descriptor type + public byte bDescriptorType; + + /// USB specification release number in binary-coded decimal. + public ushort bcdUSB; + + /// USB-IF class code for the device + public byte bDeviceClass; + + /// USB-IF subclass code for the device + public byte bDeviceSubClass; + + /// USB-IF protocol code for the device + public byte bDeviceProtocol; + + /// Maximum packet size for control endpoint 0 + public byte bMaxPacketSize0; + + /// USB-IF vendor ID + public ushort idVendor; + + /// USB-IF product ID + public ushort idProduct; + + /// Device release number in binary-coded decimal + public ushort bcdDevice; + + /// Index of string descriptor describing manufacturer + public byte iManufacturer; + + /// Index of string descriptor describing product + public byte iProduct; + + /// Index of string descriptor containing device serial number + public byte iSerialNumber; + + /// Number of possible configurations + public byte bNumConfigurations; + + + public override string ToString() + { + return + string.Format( + "bLength: {0}\nbDescriptorType: {1}\nbcdUSB: {2}\nbDeviceClass: {3}\nbDeviceSubClass: {4}\nbDeviceProtocol: {5}\nbMaxPacketSize0: {6}\nidVendor: {7}\nidProduct: {8}\nbcdDevice: {9}\niManufacturer: {10}\niProduct: {11}\niSerialNumber: {12}\nbNumConfigurations: {13}\n", + bLength, + bDescriptorType.ToString("X2") + "h", + bcdUSB.ToString("X4") + "h", + bDeviceClass.ToString("X2") + "h", + bDeviceSubClass.ToString("X2") + "h", + bDeviceProtocol.ToString("X2") + "h", + bMaxPacketSize0, + idVendor.ToString("X4") + "h", + idProduct.ToString("X4") + "h", + bcdDevice.ToString("X4") + "h", + iManufacturer, + iProduct, + iSerialNumber, + bNumConfigurations); + } + }; + + /// A structure representing the standard USB endpoint descriptor. + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)] + public struct USB_ENDPOINT_DESCRIPTOR + { + /// Size of this descriptor (in bytes) + public byte bLength; + + /// Descriptor type + public byte bDescriptorType; + + /// The address of the endpoint described by this descriptor. + public byte bEndpointAddress; + + /// Attributes which apply to the endpoint when it is configured using the bConfigurationValue. + public byte bmAttributes; + + /// Maximum packet size this endpoint is capable of sending/receiving. + public ushort wMaxPacketSize; + + /// Interval for polling endpoint for data transfers. + public byte bInterval; + + + public override string ToString() + { + return string.Format("bLength: {0}\nbDescriptorType: {1}\nbEndpointAddress: {2}\nbmAttributes: {3}\nwMaxPacketSize: {4}\nbInterval: {5}\n", + bLength, + bDescriptorType.ToString("X2") + "h", + bEndpointAddress.ToString("X2") + "h", + bmAttributes.ToString("X2") + "h", + wMaxPacketSize, + bInterval); + } + }; + + /// A structure representing the standard USB configuration descriptor. + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)] + public struct USB_CONFIGURATION_DESCRIPTOR + { + /// Size of this descriptor (in bytes) + public byte bLength; + + /// Descriptor type + public byte bDescriptorType; + + /// Total length of data returned for this configuration + public ushort wTotalLength; + + /// Number of interfaces supported by this configuration + public byte bNumInterfaces; + + /// Identifier value for this configuration + public byte bConfigurationValue; + + /// Index of string descriptor describing this configuration + public byte iConfiguration; + + /// Configuration characteristics + public byte bmAttributes; + + /// Maximum power consumption of the USB device from this bus in this configuration when the device is fully operation. + public byte MaxPower; + + public override string ToString() + { + return string.Format("bLength: {0}\nbDescriptorType: {1}\nwTotalLength: {2}\nbNumInterfaces: {3}\nbConfigurationValue: {4}\niConfiguration: {5}\nbmAttributes: {6}\nMaxPower: {7}\n", + bLength, + bDescriptorType.ToString("X2") + "h", + wTotalLength, + bNumInterfaces, + bConfigurationValue, + iConfiguration, + bmAttributes.ToString("X2") + "h", + MaxPower); + } + }; + + /// A structure representing the standard USB interface descriptor. + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)] + public struct USB_INTERFACE_DESCRIPTOR + { + /// Size of this descriptor (in bytes) + public byte bLength; + + /// Descriptor type + public byte bDescriptorType; + + /// Number of this interface + public byte bInterfaceNumber; + + /// Value used to select this alternate setting for this interface + public byte bAlternateSetting; + + /// Number of endpoints used by this interface (excluding the control endpoint) + public byte bNumEndpoints; + + /// USB-IF class code for this interface + public byte bInterfaceClass; + + /// USB-IF subclass code for this interface + public byte bInterfaceSubClass; + + /// USB-IF protocol code for this interface + public byte bInterfaceProtocol; + + /// Index of string descriptor describing this interface + public byte iInterface; + + + public override string ToString() + { + return + string.Format( + "bLength: {0}\nbDescriptorType: {1}\nbInterfaceNumber: {2}\nbAlternateSetting: {3}\nbNumEndpoints: {4}\nbInterfaceClass: {5}\nbInterfaceSubClass: {6}\nbInterfaceProtocol: {7}\niInterface: {8}\n", + bLength, + bDescriptorType.ToString("X2") + "h", + bInterfaceNumber, + bAlternateSetting, + bNumEndpoints, + bInterfaceClass.ToString("X2") + "h", + bInterfaceSubClass.ToString("X2") + "h", + bInterfaceProtocol.ToString("X2") + "h", + iInterface); + } + }; + + /// A structure representing the standard USB string descriptor. + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode, Pack = 1)] + public struct USB_STRING_DESCRIPTOR + { + /// Size of this descriptor (in bytes) + public byte bLength; + + /// Descriptor type + public byte bDescriptorType; + + /// Content of the string + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = AllKConstants.KLST_STRING_MAX_LEN)] public string bString; + + + public override string ToString() + { + return string.Format("bLength: {0}\nbDescriptorType: {1}\nbString: {2}\n", bLength, bDescriptorType.ToString("X2") + "h", bString); + } + }; + + /// A structure representing the common USB descriptor. + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)] + public struct USB_COMMON_DESCRIPTOR + { + /// Size of this descriptor (in bytes) + public byte bLength; + + /// Descriptor type + public byte bDescriptorType; + + + public override string ToString() + { + return string.Format("bLength: {0}\nbDescriptorType: {1}\n", bLength, bDescriptorType.ToString("X2") + "h"); + } + }; + + /// Allows hardware manufacturers to define groupings of interfaces. + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)] + public struct USB_INTERFACE_ASSOCIATION_DESCRIPTOR + { + /// Size of this descriptor (in bytes) + public byte bLength; + + /// Descriptor type + public byte bDescriptorType; + + /// First interface number of the set of interfaces that follow this descriptor + public byte bFirstInterface; + + /// The Number of interfaces follow this descriptor that are considered "associated" + public byte bInterfaceCount; + + /// \c bInterfaceClass used for this associated interfaces + public byte bFunctionClass; + + /// \c bInterfaceSubClass used for the associated interfaces + public byte bFunctionSubClass; + + /// \c bInterfaceProtocol used for the associated interfaces + public byte bFunctionProtocol; + + /// Index of string descriptor describing the associated interfaces + public byte iFunction; + + + public override string ToString() + { + return string.Format("bLength: {0}\nbDescriptorType: {1}\nbFirstInterface: {2}\nbInterfaceCount: {3}\nbFunctionClass: {4}\nbFunctionSubClass: {5}\nbFunctionProtocol: {6}\niFunction: {7}\n", + bLength, + bDescriptorType.ToString("X2") + "h", + bFirstInterface, + bInterfaceCount, + bFunctionClass.ToString("X2") + "h", + bFunctionSubClass.ToString("X2") + "h", + bFunctionProtocol.ToString("X2") + "h", + iFunction); + } + }; + + /// USB core driver API information structure. + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] + public struct KUSB_DRIVER_API_INFO + { + /// \readonly Driver id of the driver api. + public int DriverID; + + /// \readonly Number of valid functions contained in the driver API. + public int FunctionCount; + + + public override string ToString() + { + return string.Format("DriverID: {0}\nFunctionCount: {1}\n", DriverID, FunctionCount); + } + }; + + /// Driver API function set structure. + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Size = 512)] + public struct KUSB_DRIVER_API + { + /// Driver API information. + public KUSB_DRIVER_API_INFO Info; + + + [MarshalAs(UnmanagedType.FunctionPtr)] public KUSB_InitDelegate Init; + + + [MarshalAs(UnmanagedType.FunctionPtr)] public KUSB_FreeDelegate Free; + + + [MarshalAs(UnmanagedType.FunctionPtr)] public KUSB_ClaimInterfaceDelegate ClaimInterface; + + + [MarshalAs(UnmanagedType.FunctionPtr)] public KUSB_ReleaseInterfaceDelegate ReleaseInterface; + + + [MarshalAs(UnmanagedType.FunctionPtr)] public KUSB_SetAltInterfaceDelegate SetAltInterface; + + + [MarshalAs(UnmanagedType.FunctionPtr)] public KUSB_GetAltInterfaceDelegate GetAltInterface; + + + [MarshalAs(UnmanagedType.FunctionPtr)] public KUSB_GetDescriptorDelegate GetDescriptor; + + + [MarshalAs(UnmanagedType.FunctionPtr)] public KUSB_ControlTransferDelegate ControlTransfer; + + + [MarshalAs(UnmanagedType.FunctionPtr)] public KUSB_SetPowerPolicyDelegate SetPowerPolicy; + + + [MarshalAs(UnmanagedType.FunctionPtr)] public KUSB_GetPowerPolicyDelegate GetPowerPolicy; + + + [MarshalAs(UnmanagedType.FunctionPtr)] public KUSB_SetConfigurationDelegate SetConfiguration; + + + [MarshalAs(UnmanagedType.FunctionPtr)] public KUSB_GetConfigurationDelegate GetConfiguration; + + + [MarshalAs(UnmanagedType.FunctionPtr)] public KUSB_ResetDeviceDelegate ResetDevice; + + + [MarshalAs(UnmanagedType.FunctionPtr)] public KUSB_InitializeDelegate Initialize; + + + [MarshalAs(UnmanagedType.FunctionPtr)] public KUSB_SelectInterfaceDelegate SelectInterface; + + + [MarshalAs(UnmanagedType.FunctionPtr)] public KUSB_GetAssociatedInterfaceDelegate GetAssociatedInterface; + + + [MarshalAs(UnmanagedType.FunctionPtr)] public KUSB_CloneDelegate Clone; + + + [MarshalAs(UnmanagedType.FunctionPtr)] public KUSB_QueryInterfaceSettingsDelegate QueryInterfaceSettings; + + + [MarshalAs(UnmanagedType.FunctionPtr)] public KUSB_QueryDeviceInformationDelegate QueryDeviceInformation; + + + [MarshalAs(UnmanagedType.FunctionPtr)] public KUSB_SetCurrentAlternateSettingDelegate SetCurrentAlternateSetting; + + + [MarshalAs(UnmanagedType.FunctionPtr)] public KUSB_GetCurrentAlternateSettingDelegate GetCurrentAlternateSetting; + + + [MarshalAs(UnmanagedType.FunctionPtr)] public KUSB_QueryPipeDelegate QueryPipe; + + + [MarshalAs(UnmanagedType.FunctionPtr)] public KUSB_SetPipePolicyDelegate SetPipePolicy; + + + [MarshalAs(UnmanagedType.FunctionPtr)] public KUSB_GetPipePolicyDelegate GetPipePolicy; + + + [MarshalAs(UnmanagedType.FunctionPtr)] public KUSB_ReadPipeDelegate ReadPipe; + + + [MarshalAs(UnmanagedType.FunctionPtr)] public KUSB_WritePipeDelegate WritePipe; + + + [MarshalAs(UnmanagedType.FunctionPtr)] public KUSB_ResetPipeDelegate ResetPipe; + + + [MarshalAs(UnmanagedType.FunctionPtr)] public KUSB_AbortPipeDelegate AbortPipe; + + + [MarshalAs(UnmanagedType.FunctionPtr)] public KUSB_FlushPipeDelegate FlushPipe; + + + [MarshalAs(UnmanagedType.FunctionPtr)] public KUSB_IsoReadPipeDelegate IsoReadPipe; + + + [MarshalAs(UnmanagedType.FunctionPtr)] public KUSB_IsoWritePipeDelegate IsoWritePipe; + + + [MarshalAs(UnmanagedType.FunctionPtr)] public KUSB_GetCurrentFrameNumberDelegate GetCurrentFrameNumber; + + + [MarshalAs(UnmanagedType.FunctionPtr)] public KUSB_GetOverlappedResultDelegate GetOverlappedResult; + + + [MarshalAs(UnmanagedType.FunctionPtr)] public KUSB_GetPropertyDelegate GetProperty; + }; + + /// Hot plug parameter structure. + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Size = 2048)] + public struct KHOT_PARAMS + { + /// Hot plug event window handle to send/post messages when notifications occur. + public IntPtr UserHwnd; + + /// WM_USER message start offset used when sending/posting messages, See details. + public int UserMessage; + + /// Additional init/config parameters + public KHOT_FLAG Flags; + + /// File pattern matches for restricting notifcations to a single/group or all supported usb devices. + public KLST_PATTERN_MATCH PatternMatch; + + /// Hot plug event callback function invoked when notifications occur. + [MarshalAs(UnmanagedType.FunctionPtr)] public KHOT_PLUG_CB OnHotPlug; + + + public override string ToString() + { + return string.Format("UserHwnd: {0}\nUserMessage: {1}\nFlags: {2}\n", UserHwnd.ToString("X16") + "h", UserMessage.ToString("X8") + "h", Flags.ToString()); + } + }; + + [StructLayout(LayoutKind.Sequential)] + public struct KSTM_XFER_CONTEXT + { + private readonly IntPtr mHandlePtr; + + public KSTM_XFER_CONTEXT(IntPtr Handle) + { + mHandlePtr = Handle; + } + + public IntPtr Pointer + { + get + { + return mHandlePtr; + } + } + + /// KSTM_XFER_CONTEXT_MAP is used for calculating field offsets only + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] + private struct KSTM_XFER_CONTEXT_MAP + { + /// Internal stream buffer. + private readonly IntPtr Buffer; + + /// Size of internal stream buffer. + private readonly int BufferSize; + + /// Number of bytes to write or number of bytes read. + private readonly int TransferLength; + + /// User defined state. + private readonly IntPtr UserState; + }; + + private static readonly int ofsBuffer = Marshal.OffsetOf(typeof (KSTM_XFER_CONTEXT_MAP), "Buffer").ToInt32(); + private static readonly int ofsBufferSize = Marshal.OffsetOf(typeof (KSTM_XFER_CONTEXT_MAP), "BufferSize").ToInt32(); + private static readonly int ofsTransferLength = Marshal.OffsetOf(typeof (KSTM_XFER_CONTEXT_MAP), "TransferLength").ToInt32(); + private static readonly int ofsUserState = Marshal.OffsetOf(typeof (KSTM_XFER_CONTEXT_MAP), "UserState").ToInt32(); + + + /// Internal stream buffer. + public IntPtr Buffer + { + get + { + return Marshal.ReadIntPtr(mHandlePtr, ofsBuffer); + } + } + + + /// Size of internal stream buffer. + public int BufferSize + { + get + { + return Marshal.ReadInt32(mHandlePtr, ofsBufferSize); + } + } + + + /// Number of bytes to write or number of bytes read. + public int TransferLength + { + get + { + return Marshal.ReadInt32(mHandlePtr, ofsTransferLength); + } + } + + + /// User defined state. + public IntPtr UserState + { + get + { + return Marshal.ReadIntPtr(mHandlePtr, ofsUserState); + } + set + { + Marshal.WriteIntPtr(mHandlePtr, ofsUserState, value); + } + } + + + public override string ToString() + { + return string.Format("Buffer: {0}\nBufferSize: {1}\nTransferLength: {2}\nUserState: {3}\n", Buffer.ToString("X16") + "h", BufferSize, TransferLength, UserState.ToString("X16") + "h"); + } + } + + [StructLayout(LayoutKind.Sequential)] + public struct KSTM_INFO + { + private readonly IntPtr mHandlePtr; + + public KSTM_INFO(IntPtr Handle) + { + mHandlePtr = Handle; + } + + public IntPtr Pointer + { + get + { + return mHandlePtr; + } + } + + /// KSTM_INFO_MAP is used for calculating field offsets only + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] + private struct KSTM_INFO_MAP + { + /// \ref KUSB_HANDLE this stream uses. + private readonly IntPtr UsbHandle; + + /// This parameter corresponds to the bEndpointAddress field in the endpoint descriptor. + private readonly byte PipeID; + + /// Maximum transfer read/write request allowed pending. + private readonly int MaxPendingTransfers; + + /// Maximum transfer sage size. + private readonly int MaxTransferSize; + + /// Maximum number of I/O request allowed pending. + private readonly int MaxPendingIO; + + /// Populated with the endpoint descriptor for the specified \c PipeID. + private readonly USB_ENDPOINT_DESCRIPTOR EndpointDescriptor; + + /// Populated with the driver api for the specified \c UsbHandle. + private readonly KUSB_DRIVER_API DriverAPI; + + /// Populated with the device file handle for the specified \c UsbHandle. + private readonly IntPtr DeviceHandle; + + /// Stream handle. + private readonly IntPtr StreamHandle; + + /// Stream info user defined state. + private readonly IntPtr UserState; + }; + + private static readonly int ofsUsbHandle = Marshal.OffsetOf(typeof (KSTM_INFO_MAP), "UsbHandle").ToInt32(); + private static readonly int ofsPipeID = Marshal.OffsetOf(typeof (KSTM_INFO_MAP), "PipeID").ToInt32(); + private static readonly int ofsMaxPendingTransfers = Marshal.OffsetOf(typeof (KSTM_INFO_MAP), "MaxPendingTransfers").ToInt32(); + private static readonly int ofsMaxTransferSize = Marshal.OffsetOf(typeof (KSTM_INFO_MAP), "MaxTransferSize").ToInt32(); + private static readonly int ofsMaxPendingIO = Marshal.OffsetOf(typeof (KSTM_INFO_MAP), "MaxPendingIO").ToInt32(); + private static readonly int ofsEndpointDescriptor = Marshal.OffsetOf(typeof (KSTM_INFO_MAP), "EndpointDescriptor").ToInt32(); + private static readonly int ofsDriverAPI = Marshal.OffsetOf(typeof (KSTM_INFO_MAP), "DriverAPI").ToInt32(); + private static readonly int ofsDeviceHandle = Marshal.OffsetOf(typeof (KSTM_INFO_MAP), "DeviceHandle").ToInt32(); + private static readonly int ofsStreamHandle = Marshal.OffsetOf(typeof (KSTM_INFO_MAP), "StreamHandle").ToInt32(); + private static readonly int ofsUserState = Marshal.OffsetOf(typeof (KSTM_INFO_MAP), "UserState").ToInt32(); + + + /// \ref KUSB_HANDLE this stream uses. + public IntPtr UsbHandle + { + get + { + return Marshal.ReadIntPtr(mHandlePtr, ofsUsbHandle); + } + } + + + /// This parameter corresponds to the bEndpointAddress field in the endpoint descriptor. + public byte PipeID + { + get + { + return Marshal.ReadByte(mHandlePtr, ofsPipeID); + } + } + + + /// Maximum transfer read/write request allowed pending. + public int MaxPendingTransfers + { + get + { + return Marshal.ReadInt32(mHandlePtr, ofsMaxPendingTransfers); + } + } + + + /// Maximum transfer sage size. + public int MaxTransferSize + { + get + { + return Marshal.ReadInt32(mHandlePtr, ofsMaxTransferSize); + } + } + + + /// Maximum number of I/O request allowed pending. + public int MaxPendingIO + { + get + { + return Marshal.ReadInt32(mHandlePtr, ofsMaxPendingIO); + } + } + + + /// Populated with the endpoint descriptor for the specified \c PipeID. + public USB_ENDPOINT_DESCRIPTOR EndpointDescriptor + { + get + { + return (USB_ENDPOINT_DESCRIPTOR) Marshal.PtrToStructure(new IntPtr(mHandlePtr.ToInt64() + ofsEndpointDescriptor), typeof (USB_ENDPOINT_DESCRIPTOR)); + } + } + + + /// Populated with the driver api for the specified \c UsbHandle. + public KUSB_DRIVER_API DriverAPI + { + get + { + return (KUSB_DRIVER_API) Marshal.PtrToStructure(new IntPtr(mHandlePtr.ToInt64() + ofsDriverAPI), typeof (KUSB_DRIVER_API)); + } + } + + + /// Populated with the device file handle for the specified \c UsbHandle. + public IntPtr DeviceHandle + { + get + { + return Marshal.ReadIntPtr(mHandlePtr, ofsDeviceHandle); + } + } + + + /// Stream handle. + public IntPtr StreamHandle + { + get + { + return Marshal.ReadIntPtr(mHandlePtr, ofsStreamHandle); + } + } + + + /// Stream info user defined state. + public IntPtr UserState + { + get + { + return Marshal.ReadIntPtr(mHandlePtr, ofsUserState); + } + set + { + Marshal.WriteIntPtr(mHandlePtr, ofsUserState, value); + } + } + + + public override string ToString() + { + return string.Format("UsbHandle: {0}\nPipeID: {1}\nMaxPendingTransfers: {2}\nMaxTransferSize: {3}\nMaxPendingIO: {4}\nDeviceHandle: {5}\nStreamHandle: {6}\nUserState: {7}\n", + UsbHandle.ToString("X16") + "h", + PipeID.ToString("X2") + "h", + MaxPendingTransfers, + MaxTransferSize, + MaxPendingIO, + DeviceHandle.ToString("X16") + "h", + StreamHandle.ToString("X16") + "h", + UserState.ToString("X16") + "h"); + } + } + + /// Stream callback structure. + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Size = 64)] + public struct KSTM_CALLBACK + { + /// Executed when a transfer error occurs. + [MarshalAs(UnmanagedType.FunctionPtr)] public KSTM_ERROR_CB Error; + + /// Executed to submit a transfer. + [MarshalAs(UnmanagedType.FunctionPtr)] public KSTM_SUBMIT_CB Submit; + + /// Executed when a valid transfer completes. + [MarshalAs(UnmanagedType.FunctionPtr)] public KSTM_COMPLETE_CB Complete; + + /// Executed for every transfer context when the stream is started with \ref StmK_Start. + [MarshalAs(UnmanagedType.FunctionPtr)] public KSTM_STARTED_CB Started; + + /// Executed for every transfer context when the stream is stopped with \ref StmK_Stop. + [MarshalAs(UnmanagedType.FunctionPtr)] public KSTM_STOPPED_CB Stopped; + + /// Executed immediately after a transfer completes. + [MarshalAs(UnmanagedType.FunctionPtr)] public KSTM_BEFORE_COMPLETE_CB BeforeComplete; + }; + + #endregion + + #region Delegates + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate int KLIB_HANDLE_CLEANUP_CB([In] IntPtr Handle, KLIB_HANDLE_TYPE HandleType, IntPtr UserContext); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool KISO_ENUM_PACKETS_CB(int PacketIndex, [In] ref KISO_PACKET IsoPacket, IntPtr UserState); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool KLST_ENUM_DEVINFO_CB([In] KLST_HANDLE DeviceList, [In] KLST_DEVINFO_HANDLE DeviceInfo, IntPtr Context); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool KUSB_InitDelegate([Out] out KUSB_HANDLE InterfaceHandle, [In] KLST_DEVINFO_HANDLE DevInfo); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool KUSB_FreeDelegate([In] KUSB_HANDLE InterfaceHandle); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool KUSB_ClaimInterfaceDelegate([In] KUSB_HANDLE InterfaceHandle, byte NumberOrIndex, bool IsIndex); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool KUSB_ReleaseInterfaceDelegate([In] KUSB_HANDLE InterfaceHandle, byte NumberOrIndex, bool IsIndex); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool KUSB_SetAltInterfaceDelegate([In] KUSB_HANDLE InterfaceHandle, byte NumberOrIndex, bool IsIndex, byte AltSettingNumber); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool KUSB_GetAltInterfaceDelegate([In] KUSB_HANDLE InterfaceHandle, byte NumberOrIndex, bool IsIndex, out byte AltSettingNumber); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool KUSB_GetDescriptorDelegate([In] KUSB_HANDLE InterfaceHandle, byte DescriptorType, byte Index, ushort LanguageID, IntPtr Buffer, int BufferLength, out int LengthTransferred); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool KUSB_ControlTransferDelegate([In] KUSB_HANDLE InterfaceHandle, WINUSB_SETUP_PACKET SetupPacket, IntPtr Buffer, int BufferLength, out int LengthTransferred, IntPtr Overlapped); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool KUSB_SetPowerPolicyDelegate([In] KUSB_HANDLE InterfaceHandle, int PolicyType, int ValueLength, IntPtr Value); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool KUSB_GetPowerPolicyDelegate([In] KUSB_HANDLE InterfaceHandle, int PolicyType, ref int ValueLength, IntPtr Value); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool KUSB_SetConfigurationDelegate([In] KUSB_HANDLE InterfaceHandle, byte ConfigurationNumber); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool KUSB_GetConfigurationDelegate([In] KUSB_HANDLE InterfaceHandle, out byte ConfigurationNumber); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool KUSB_ResetDeviceDelegate([In] KUSB_HANDLE InterfaceHandle); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool KUSB_InitializeDelegate(IntPtr DeviceHandle, [Out] out KUSB_HANDLE InterfaceHandle); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool KUSB_SelectInterfaceDelegate([In] KUSB_HANDLE InterfaceHandle, byte NumberOrIndex, bool IsIndex); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool KUSB_GetAssociatedInterfaceDelegate([In] KUSB_HANDLE InterfaceHandle, byte AssociatedInterfaceIndex, [Out] out KUSB_HANDLE AssociatedInterfaceHandle); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool KUSB_CloneDelegate([In] KUSB_HANDLE InterfaceHandle, [Out] out KUSB_HANDLE DstInterfaceHandle); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool KUSB_QueryInterfaceSettingsDelegate([In] KUSB_HANDLE InterfaceHandle, byte AltSettingIndex, [Out] out USB_INTERFACE_DESCRIPTOR UsbAltInterfaceDescriptor); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool KUSB_QueryDeviceInformationDelegate([In] KUSB_HANDLE InterfaceHandle, int InformationType, ref int BufferLength, IntPtr Buffer); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool KUSB_SetCurrentAlternateSettingDelegate([In] KUSB_HANDLE InterfaceHandle, byte AltSettingNumber); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool KUSB_GetCurrentAlternateSettingDelegate([In] KUSB_HANDLE InterfaceHandle, out byte AltSettingNumber); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool KUSB_QueryPipeDelegate([In] KUSB_HANDLE InterfaceHandle, byte AltSettingNumber, byte PipeIndex, [Out] out WINUSB_PIPE_INFORMATION PipeInformation); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool KUSB_SetPipePolicyDelegate([In] KUSB_HANDLE InterfaceHandle, byte PipeID, int PolicyType, int ValueLength, IntPtr Value); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool KUSB_GetPipePolicyDelegate([In] KUSB_HANDLE InterfaceHandle, byte PipeID, int PolicyType, ref int ValueLength, IntPtr Value); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool KUSB_ReadPipeDelegate([In] KUSB_HANDLE InterfaceHandle, byte PipeID, IntPtr Buffer, int BufferLength, out int LengthTransferred, IntPtr Overlapped); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool KUSB_WritePipeDelegate([In] KUSB_HANDLE InterfaceHandle, byte PipeID, IntPtr Buffer, int BufferLength, out int LengthTransferred, IntPtr Overlapped); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool KUSB_ResetPipeDelegate([In] KUSB_HANDLE InterfaceHandle, byte PipeID); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool KUSB_AbortPipeDelegate([In] KUSB_HANDLE InterfaceHandle, byte PipeID); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool KUSB_FlushPipeDelegate([In] KUSB_HANDLE InterfaceHandle, byte PipeID); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool KUSB_IsoReadPipeDelegate([In] KUSB_HANDLE InterfaceHandle, byte PipeID, IntPtr Buffer, int BufferLength, IntPtr Overlapped, [In] KISO_CONTEXT IsoContext); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool KUSB_IsoWritePipeDelegate([In] KUSB_HANDLE InterfaceHandle, byte PipeID, IntPtr Buffer, int BufferLength, IntPtr Overlapped, [In] KISO_CONTEXT IsoContext); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool KUSB_GetCurrentFrameNumberDelegate([In] KUSB_HANDLE InterfaceHandle, out int FrameNumber); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool KUSB_GetOverlappedResultDelegate([In] KUSB_HANDLE InterfaceHandle, IntPtr Overlapped, out int lpNumberOfBytesTransferred, bool bWait); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool KUSB_GetPropertyDelegate([In] KUSB_HANDLE InterfaceHandle, KUSB_PROPERTY PropertyType, ref int PropertySize, IntPtr Value); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate void KHOT_PLUG_CB([In] KHOT_HANDLE HotHandle, [In] KLST_DEVINFO_HANDLE DeviceInfo, KLST_SYNC_FLAG PlugType); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate int KSTM_ERROR_CB([In] KSTM_INFO StreamInfo, [In] KSTM_XFER_CONTEXT XferContext, int XferContextIndex, int ErrorCode); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate int KSTM_SUBMIT_CB([In] KSTM_INFO StreamInfo, [In] KSTM_XFER_CONTEXT XferContext, int XferContextIndex, IntPtr Overlapped); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate int KSTM_STARTED_CB([In] KSTM_INFO StreamInfo, [In] KSTM_XFER_CONTEXT XferContext, int XferContextIndex); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate int KSTM_STOPPED_CB([In] KSTM_INFO StreamInfo, [In] KSTM_XFER_CONTEXT XferContext, int XferContextIndex); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate int KSTM_COMPLETE_CB([In] KSTM_INFO StreamInfo, [In] KSTM_XFER_CONTEXT XferContext, int XferContextIndex, int ErrorCode); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate KSTM_COMPLETE_RESULT KSTM_BEFORE_COMPLETE_CB([In] KSTM_INFO StreamInfo, [In] KSTM_XFER_CONTEXT XferContext, int XferContextIndex, ref int ErrorCode); + + #endregion + + public class LstK : IDisposable + { + protected KLST_HANDLE mHandleStruct; + protected bool mbDisposed; + + protected LstK() + { + } + + #region IDisposable Members + + /// Explicitly closes and frees the handle. + public virtual void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + #endregion + + ~LstK() + { + Dispose(false); + } + + protected virtual void Dispose(bool disposing) + { + if (!mbDisposed) + { + if (mHandleStruct.Pointer != IntPtr.Zero) + { + AllKFunctions.LstK_Free(mHandleStruct); + Debug.Print("{0} Dispose: Freed Handle:{1:X16}h Explicit:{2}", GetType().Name, mHandleStruct.Pointer.ToInt64(), disposing); + } + else + Debug.Print("{0} Dispose: [WARNING] Handle is null", GetType().Name); + + mHandleStruct = new KLST_HANDLE(IntPtr.Zero); + mbDisposed = true; + } + } + + /// Initializes a new usb device list containing all supported devices. + protected bool Init(KLST_FLAG Flags) + { + bool success = AllKFunctions.LstK_Init(out mHandleStruct, Flags); + + if (!success) throw new Exception(string.Format("{0} failed initializing. ErrorCode={1:X8}h", GetType().Name, Marshal.GetLastWin32Error())); + + Debug.Print("{0} Init: handle 0x{1:X16}", GetType().Name, mHandleStruct.Pointer.ToInt64()); + return true; + } + + /// Initializes a new usb device list containing only devices matching a specific class GUID. + protected bool InitEx(KLST_FLAG Flags, ref KLST_PATTERN_MATCH PatternMatch) + { + bool success = AllKFunctions.LstK_InitEx(out mHandleStruct, Flags, ref PatternMatch); + + if (!success) throw new Exception(string.Format("{0} failed initializing. ErrorCode={1:X8}h", GetType().Name, Marshal.GetLastWin32Error())); + + Debug.Print("{0} Init: handle 0x{1:X16}", GetType().Name, mHandleStruct.Pointer.ToInt64()); + return true; + } + + #region Public Members + + /// Initializes a new usb device list containing all supported devices. + public LstK(KLST_FLAG Flags) + { + bool success = AllKFunctions.LstK_Init(out mHandleStruct, Flags); + + if (!success) throw new Exception(string.Format("{0} failed initializing. ErrorCode={1:X8}h", GetType().Name, Marshal.GetLastWin32Error())); + + Debug.Print("{0} Init: handle 0x{1:X16}", GetType().Name, mHandleStruct.Pointer.ToInt64()); + } + + /// Initializes a new usb device list containing only devices matching a specific class GUID. + public LstK(KLST_FLAG Flags, ref KLST_PATTERN_MATCH PatternMatch) + { + bool success = AllKFunctions.LstK_InitEx(out mHandleStruct, Flags, ref PatternMatch); + + if (!success) throw new Exception(string.Format("{0} failed initializing. ErrorCode={1:X8}h", GetType().Name, Marshal.GetLastWin32Error())); + + Debug.Print("{0} Init: handle 0x{1:X16}", GetType().Name, mHandleStruct.Pointer.ToInt64()); + } + + /// Counts the number of device info elements in a device list. + public virtual bool Count(ref int Count) + { + return AllKFunctions.LstK_Count(mHandleStruct, ref Count); + } + + /// Gets the \ref KLST_DEVINFO element for the current position. + public virtual bool Current(out KLST_DEVINFO_HANDLE DeviceInfo) + { + return AllKFunctions.LstK_Current(mHandleStruct, out DeviceInfo); + } + + /// Enumerates \ref KLST_DEVINFO elements of a \ref KLST_HANDLE. + public virtual bool Enumerate(KLST_ENUM_DEVINFO_CB EnumDevListCB, IntPtr Context) + { + return AllKFunctions.LstK_Enumerate(mHandleStruct, EnumDevListCB, Context); + } + + /// Find a device by vendor and product id + public virtual bool FindByVidPid(int Vid, int Pid, out KLST_DEVINFO_HANDLE DeviceInfo) + { + return AllKFunctions.LstK_FindByVidPid(mHandleStruct, Vid, Pid, out DeviceInfo); + } + + /// Calls the dispose method. + public virtual void Free() + { + Dispose(); + } + + /// Gets the handle class structure. + public KLST_HANDLE Handle + { + get + { + return mHandleStruct; + } + } + + /// Advances the device list current \ref KLST_DEVINFO position. + public virtual bool MoveNext(out KLST_DEVINFO_HANDLE DeviceInfo) + { + return AllKFunctions.LstK_MoveNext(mHandleStruct, out DeviceInfo); + } + + /// Sets the device list to its initial position, which is before the first element in the list. + public virtual void MoveReset() + { + AllKFunctions.LstK_MoveReset(mHandleStruct); + } + + #endregion + } + + public class HotK : IDisposable + { + protected KHOT_HANDLE mHandleStruct; + protected bool mbDisposed; + + protected HotK() + { + } + + #region IDisposable Members + + /// Explicitly closes and frees the handle. + public virtual void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + #endregion + + ~HotK() + { + Dispose(false); + } + + protected virtual void Dispose(bool disposing) + { + if (!mbDisposed) + { + if (mHandleStruct.Pointer != IntPtr.Zero) + { + AllKFunctions.HotK_Free(mHandleStruct); + Debug.Print("{0} Dispose: Freed Handle:{1:X16}h Explicit:{2}", GetType().Name, mHandleStruct.Pointer.ToInt64(), disposing); + } + else + Debug.Print("{0} Dispose: [WARNING] Handle is null", GetType().Name); + + mHandleStruct = new KHOT_HANDLE(IntPtr.Zero); + mbDisposed = true; + } + } + + /// Creates a new hot-plug handle for USB device arrival/removal event monitoring. + protected bool Init(ref KHOT_PARAMS InitParams) + { + bool success = AllKFunctions.HotK_Init(out mHandleStruct, ref InitParams); + + if (!success) throw new Exception(string.Format("{0} failed initializing. ErrorCode={1:X8}h", GetType().Name, Marshal.GetLastWin32Error())); + + Debug.Print("{0} Init: handle 0x{1:X16}", GetType().Name, mHandleStruct.Pointer.ToInt64()); + return true; + } + + #region Public Members + + /// Creates a new hot-plug handle for USB device arrival/removal event monitoring. + public HotK(ref KHOT_PARAMS InitParams) + { + bool success = AllKFunctions.HotK_Init(out mHandleStruct, ref InitParams); + + if (!success) throw new Exception(string.Format("{0} failed initializing. ErrorCode={1:X8}h", GetType().Name, Marshal.GetLastWin32Error())); + + Debug.Print("{0} Init: handle 0x{1:X16}", GetType().Name, mHandleStruct.Pointer.ToInt64()); + } + + /// Calls the dispose method. + public virtual void Free() + { + Dispose(); + } + + /// Frees all hot-plug handles initialized with \ref HotK_Init. + public virtual void FreeAll() + { + AllKFunctions.HotK_FreeAll(); + } + + /// Gets the handle class structure. + public KHOT_HANDLE Handle + { + get + { + return mHandleStruct; + } + } + + #endregion + } + + public class UsbK : IDisposable + { + protected KUSB_DRIVER_API driverAPI; + protected KUSB_HANDLE mHandleStruct; + protected bool mbDisposed; + + protected UsbK() + { + } + + #region IDisposable Members + + /// Explicitly closes and frees the handle. + public virtual void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + #endregion + + ~UsbK() + { + Dispose(false); + } + + protected virtual void Dispose(bool disposing) + { + if (!mbDisposed) + { + if (mHandleStruct.Pointer != IntPtr.Zero) + { + AllKFunctions.UsbK_Free(mHandleStruct); + Debug.Print("{0} Dispose: Freed Handle:{1:X16}h Explicit:{2}", GetType().Name, mHandleStruct.Pointer.ToInt64(), disposing); + } + else + Debug.Print("{0} Dispose: [WARNING] Handle is null", GetType().Name); + + mHandleStruct = new KUSB_HANDLE(IntPtr.Zero); + mbDisposed = true; + } + } + + /// Creates/opens a libusbK interface handle from the device list. This is a preferred method. + protected bool Init(KLST_DEVINFO_HANDLE DevInfo) + { + bool success = AllKFunctions.LibK_LoadDriverAPI(out driverAPI, DevInfo.DriverID); + + if (!success) throw new Exception(string.Format("{0} failed loading Driver API. ErrorCode={1:X8}h", GetType().Name, Marshal.GetLastWin32Error())); + + success = driverAPI.Init(out mHandleStruct, DevInfo); + + if (!success) + throw new Exception(string.Format("{0} failed initializing usb device. ErrorCode={1:X8}h", GetType().Name, Marshal.GetLastWin32Error())); + + Debug.Print("{0} Init: handle 0x{1:X16}", GetType().Name, mHandleStruct.Pointer.ToInt64()); + return true; + } + + /// Creates a libusbK handle for the device specified by a file handle. + protected bool Initialize(IntPtr DeviceHandle, KUSB_DRVID driverID) + { + bool success = AllKFunctions.LibK_LoadDriverAPI(out driverAPI, (int) driverID); + + if (!success) throw new Exception(string.Format("{0} failed loading Driver API. ErrorCode={1:X8}h", GetType().Name, Marshal.GetLastWin32Error())); + + success = driverAPI.Initialize(DeviceHandle, out mHandleStruct); + + if (!success) + throw new Exception(string.Format("{0} failed initializing usb device. ErrorCode={1:X8}h", GetType().Name, Marshal.GetLastWin32Error())); + + Debug.Print("{0} Init: handle 0x{1:X16}", GetType().Name, mHandleStruct.Pointer.ToInt64()); + return true; + } + + #region Public Members + + /// Creates/opens a libusbK interface handle from the device list. This is a preferred method. + public UsbK(KLST_DEVINFO_HANDLE DevInfo) + { + bool success = AllKFunctions.LibK_LoadDriverAPI(out driverAPI, DevInfo.DriverID); + + if (!success) throw new Exception(string.Format("{0} failed loading Driver API. ErrorCode={1:X8}h", GetType().Name, Marshal.GetLastWin32Error())); + + success = driverAPI.Init(out mHandleStruct, DevInfo); + + if (!success) + throw new Exception(string.Format("{0} failed initializing usb device. ErrorCode={1:X8}h", GetType().Name, Marshal.GetLastWin32Error())); + + Debug.Print("{0} Init: handle 0x{1:X16}", GetType().Name, mHandleStruct.Pointer.ToInt64()); + } + + /// Creates a libusbK handle for the device specified by a file handle. + public UsbK(IntPtr DeviceHandle, KUSB_DRVID driverID) + { + bool success = AllKFunctions.LibK_LoadDriverAPI(out driverAPI, (int) driverID); + + if (!success) throw new Exception(string.Format("{0} failed loading Driver API. ErrorCode={1:X8}h", GetType().Name, Marshal.GetLastWin32Error())); + + success = driverAPI.Initialize(DeviceHandle, out mHandleStruct); + + if (!success) + throw new Exception(string.Format("{0} failed initializing usb device. ErrorCode={1:X8}h", GetType().Name, Marshal.GetLastWin32Error())); + + Debug.Print("{0} Init: handle 0x{1:X16}", GetType().Name, mHandleStruct.Pointer.ToInt64()); + } + + /// Aborts all of the pending transfers for a pipe. + public virtual bool AbortPipe(byte PipeID) + { + return driverAPI.AbortPipe(mHandleStruct, PipeID); + } + + /// Claims the specified interface by number or index. + public virtual bool ClaimInterface(byte NumberOrIndex, bool IsIndex) + { + return driverAPI.ClaimInterface(mHandleStruct, NumberOrIndex, IsIndex); + } + + /// Clones the specified interface handle. + public virtual bool Clone(out KUSB_HANDLE DstInterfaceHandle) + { + return driverAPI.Clone(mHandleStruct, out DstInterfaceHandle); + } + + /// Transmits control data over a default control endpoint. + public virtual bool ControlTransfer(WINUSB_SETUP_PACKET SetupPacket, IntPtr Buffer, int BufferLength, out int LengthTransferred, IntPtr Overlapped) + { + return driverAPI.ControlTransfer(mHandleStruct, SetupPacket, Buffer, BufferLength, out LengthTransferred, Overlapped); + } + + /// Transmits control data over a default control endpoint. + public virtual bool ControlTransfer(WINUSB_SETUP_PACKET SetupPacket, Array Buffer, int BufferLength, out int LengthTransferred, IntPtr Overlapped) + { + return driverAPI.ControlTransfer(mHandleStruct, SetupPacket, Marshal.UnsafeAddrOfPinnedArrayElement(Buffer, 0), BufferLength, out LengthTransferred, Overlapped); + } + + /// Transmits control data over a default control endpoint. + public virtual bool ControlTransfer(WINUSB_SETUP_PACKET SetupPacket, Array Buffer, int BufferLength, out int LengthTransferred, KOVL_HANDLE Overlapped) + { + return driverAPI.ControlTransfer(mHandleStruct, SetupPacket, Marshal.UnsafeAddrOfPinnedArrayElement(Buffer, 0), BufferLength, out LengthTransferred, Overlapped.Pointer); + } + + /// Transmits control data over a default control endpoint. + public virtual bool ControlTransfer(WINUSB_SETUP_PACKET SetupPacket, IntPtr Buffer, int BufferLength, out int LengthTransferred, KOVL_HANDLE Overlapped) + { + return driverAPI.ControlTransfer(mHandleStruct, SetupPacket, Buffer, BufferLength, out LengthTransferred, Overlapped.Pointer); + } + + /// Discards any data that is cached in a pipe. + public virtual bool FlushPipe(byte PipeID) + { + return driverAPI.FlushPipe(mHandleStruct, PipeID); + } + + /// Calls the dispose method. + public virtual void Free() + { + Dispose(); + } + + /// Gets the alternate setting for the specified interface. + public virtual bool GetAltInterface(byte NumberOrIndex, bool IsIndex, out byte AltSettingNumber) + { + return driverAPI.GetAltInterface(mHandleStruct, NumberOrIndex, IsIndex, out AltSettingNumber); + } + + /// Retrieves a handle for an associated interface. + public virtual bool GetAssociatedInterface(byte AssociatedInterfaceIndex, out KUSB_HANDLE AssociatedInterfaceHandle) + { + return driverAPI.GetAssociatedInterface(mHandleStruct, AssociatedInterfaceIndex, out AssociatedInterfaceHandle); + } + + /// Gets the device current configuration number. + public virtual bool GetConfiguration(out byte ConfigurationNumber) + { + return driverAPI.GetConfiguration(mHandleStruct, out ConfigurationNumber); + } + + /// Gets the current alternate interface setting for an interface. + public virtual bool GetCurrentAlternateSetting(out byte AltSettingNumber) + { + return driverAPI.GetCurrentAlternateSetting(mHandleStruct, out AltSettingNumber); + } + + /// Retrieves the current USB frame number. + public virtual bool GetCurrentFrameNumber(out int FrameNumber) + { + return driverAPI.GetCurrentFrameNumber(mHandleStruct, out FrameNumber); + } + + /// Gets the requested descriptor. This is a synchronous operation. + public virtual bool GetDescriptor(byte DescriptorType, byte Index, int LanguageID, IntPtr Buffer, int BufferLength, out int LengthTransferred) + { + return driverAPI.GetDescriptor(mHandleStruct, DescriptorType, Index, (ushort) LanguageID, Buffer, BufferLength, out LengthTransferred); + } + + /// Gets the requested descriptor. This is a synchronous operation. + public virtual bool GetDescriptor(byte DescriptorType, byte Index, int LanguageID, Array Buffer, int BufferLength, out int LengthTransferred) + { + return driverAPI.GetDescriptor(mHandleStruct, DescriptorType, Index, (ushort) LanguageID, Marshal.UnsafeAddrOfPinnedArrayElement(Buffer, 0), BufferLength, out LengthTransferred); + } + + /// Retrieves the results of an overlapped operation on the specified libusbK handle. + public virtual bool GetOverlappedResult(IntPtr Overlapped, out int lpNumberOfBytesTransferred, bool bWait) + { + return driverAPI.GetOverlappedResult(mHandleStruct, Overlapped, out lpNumberOfBytesTransferred, bWait); + } + + /// Retrieves the results of an overlapped operation on the specified libusbK handle. + public virtual bool GetOverlappedResult(KOVL_HANDLE Overlapped, out int lpNumberOfBytesTransferred, bool bWait) + { + return driverAPI.GetOverlappedResult(mHandleStruct, Overlapped.Pointer, out lpNumberOfBytesTransferred, bWait); + } + + /// Gets the policy for a specific pipe (endpoint). + public virtual bool GetPipePolicy(byte PipeID, int PolicyType, ref int ValueLength, IntPtr Value) + { + return driverAPI.GetPipePolicy(mHandleStruct, PipeID, PolicyType, ref ValueLength, Value); + } + + /// Gets the policy for a specific pipe (endpoint). + public virtual bool GetPipePolicy(byte PipeID, int PolicyType, ref int ValueLength, Array Value) + { + return driverAPI.GetPipePolicy(mHandleStruct, PipeID, PolicyType, ref ValueLength, Marshal.UnsafeAddrOfPinnedArrayElement(Value, 0)); + } + + /// Gets the power policy for a device. + public virtual bool GetPowerPolicy(int PolicyType, ref int ValueLength, IntPtr Value) + { + return driverAPI.GetPowerPolicy(mHandleStruct, PolicyType, ref ValueLength, Value); + } + + /// Gets the power policy for a device. + public virtual bool GetPowerPolicy(int PolicyType, ref int ValueLength, Array Value) + { + return driverAPI.GetPowerPolicy(mHandleStruct, PolicyType, ref ValueLength, Marshal.UnsafeAddrOfPinnedArrayElement(Value, 0)); + } + + /// Gets a USB device (driver specific) property from usb handle. + public virtual bool GetProperty(KUSB_PROPERTY PropertyType, ref int PropertySize, IntPtr Value) + { + return driverAPI.GetProperty(mHandleStruct, PropertyType, ref PropertySize, Value); + } + + /// Gets a USB device (driver specific) property from usb handle. + public virtual bool GetProperty(KUSB_PROPERTY PropertyType, ref int PropertySize, Array Value) + { + return driverAPI.GetProperty(mHandleStruct, PropertyType, ref PropertySize, Marshal.UnsafeAddrOfPinnedArrayElement(Value, 0)); + } + + /// Gets the handle class structure. + public KUSB_HANDLE Handle + { + get + { + return mHandleStruct; + } + } + + /// Reads from an isochronous pipe. + public virtual bool IsoReadPipe(byte PipeID, IntPtr Buffer, int BufferLength, IntPtr Overlapped, KISO_CONTEXT IsoContext) + { + return driverAPI.IsoReadPipe(mHandleStruct, PipeID, Buffer, BufferLength, Overlapped, IsoContext); + } + + /// Reads from an isochronous pipe. + public virtual bool IsoReadPipe(byte PipeID, Array Buffer, int BufferLength, IntPtr Overlapped, KISO_CONTEXT IsoContext) + { + return driverAPI.IsoReadPipe(mHandleStruct, PipeID, Marshal.UnsafeAddrOfPinnedArrayElement(Buffer, 0), BufferLength, Overlapped, IsoContext); + } + + /// Reads from an isochronous pipe. + public virtual bool IsoReadPipe(byte PipeID, Array Buffer, int BufferLength, KOVL_HANDLE Overlapped, KISO_CONTEXT IsoContext) + { + return driverAPI.IsoReadPipe(mHandleStruct, PipeID, Marshal.UnsafeAddrOfPinnedArrayElement(Buffer, 0), BufferLength, Overlapped.Pointer, IsoContext); + } + + /// Reads from an isochronous pipe. + public virtual bool IsoReadPipe(byte PipeID, IntPtr Buffer, int BufferLength, KOVL_HANDLE Overlapped, KISO_CONTEXT IsoContext) + { + return driverAPI.IsoReadPipe(mHandleStruct, PipeID, Buffer, BufferLength, Overlapped.Pointer, IsoContext); + } + + /// Writes to an isochronous pipe. + public virtual bool IsoWritePipe(byte PipeID, IntPtr Buffer, int BufferLength, IntPtr Overlapped, KISO_CONTEXT IsoContext) + { + return driverAPI.IsoWritePipe(mHandleStruct, PipeID, Buffer, BufferLength, Overlapped, IsoContext); + } + + /// Writes to an isochronous pipe. + public virtual bool IsoWritePipe(byte PipeID, Array Buffer, int BufferLength, IntPtr Overlapped, KISO_CONTEXT IsoContext) + { + return driverAPI.IsoWritePipe(mHandleStruct, PipeID, Marshal.UnsafeAddrOfPinnedArrayElement(Buffer, 0), BufferLength, Overlapped, IsoContext); + } + + /// Writes to an isochronous pipe. + public virtual bool IsoWritePipe(byte PipeID, Array Buffer, int BufferLength, KOVL_HANDLE Overlapped, KISO_CONTEXT IsoContext) + { + return driverAPI.IsoWritePipe(mHandleStruct, PipeID, Marshal.UnsafeAddrOfPinnedArrayElement(Buffer, 0), BufferLength, Overlapped.Pointer, IsoContext); + } + + /// Writes to an isochronous pipe. + public virtual bool IsoWritePipe(byte PipeID, IntPtr Buffer, int BufferLength, KOVL_HANDLE Overlapped, KISO_CONTEXT IsoContext) + { + return driverAPI.IsoWritePipe(mHandleStruct, PipeID, Buffer, BufferLength, Overlapped.Pointer, IsoContext); + } + + /// Retrieves information about the physical device that is associated with a libusbK handle. + public virtual bool QueryDeviceInformation(int InformationType, ref int BufferLength, IntPtr Buffer) + { + return driverAPI.QueryDeviceInformation(mHandleStruct, InformationType, ref BufferLength, Buffer); + } + + /// Retrieves the interface descriptor for the specified alternate interface settings for a particular interface handle. + public virtual bool QueryInterfaceSettings(byte AltSettingIndex, out USB_INTERFACE_DESCRIPTOR UsbAltInterfaceDescriptor) + { + return driverAPI.QueryInterfaceSettings(mHandleStruct, AltSettingIndex, out UsbAltInterfaceDescriptor); + } + + /// Retrieves information about a pipe that is associated with an interface. + public virtual bool QueryPipe(byte AltSettingNumber, byte PipeIndex, out WINUSB_PIPE_INFORMATION PipeInformation) + { + return driverAPI.QueryPipe(mHandleStruct, AltSettingNumber, PipeIndex, out PipeInformation); + } + + /// Reads data from the specified pipe. + public virtual bool ReadPipe(byte PipeID, IntPtr Buffer, int BufferLength, out int LengthTransferred, IntPtr Overlapped) + { + return driverAPI.ReadPipe(mHandleStruct, PipeID, Buffer, BufferLength, out LengthTransferred, Overlapped); + } + + /// Reads data from the specified pipe. + public virtual bool ReadPipe(byte PipeID, Array Buffer, int BufferLength, out int LengthTransferred, IntPtr Overlapped) + { + return driverAPI.ReadPipe(mHandleStruct, PipeID, Marshal.UnsafeAddrOfPinnedArrayElement(Buffer, 0), BufferLength, out LengthTransferred, Overlapped); + } + + /// Reads data from the specified pipe. + public virtual bool ReadPipe(byte PipeID, Array Buffer, int BufferLength, out int LengthTransferred, KOVL_HANDLE Overlapped) + { + return driverAPI.ReadPipe(mHandleStruct, PipeID, Marshal.UnsafeAddrOfPinnedArrayElement(Buffer, 0), BufferLength, out LengthTransferred, Overlapped.Pointer); + } + + /// Reads data from the specified pipe. + public virtual bool ReadPipe(byte PipeID, IntPtr Buffer, int BufferLength, out int LengthTransferred, KOVL_HANDLE Overlapped) + { + return driverAPI.ReadPipe(mHandleStruct, PipeID, Buffer, BufferLength, out LengthTransferred, Overlapped.Pointer); + } + + /// Releases the specified interface by number or index. + public virtual bool ReleaseInterface(byte NumberOrIndex, bool IsIndex) + { + return driverAPI.ReleaseInterface(mHandleStruct, NumberOrIndex, IsIndex); + } + + /// Resets the usb device of the specified interface handle. (port cycle). + public virtual bool ResetDevice() + { + return driverAPI.ResetDevice(mHandleStruct); + } + + /// Resets the data toggle and clears the stall condition on a pipe. + public virtual bool ResetPipe(byte PipeID) + { + return driverAPI.ResetPipe(mHandleStruct, PipeID); + } + + /// Selects the specified interface by number or index as the current interface. + public virtual bool SelectInterface(byte NumberOrIndex, bool IsIndex) + { + return driverAPI.SelectInterface(mHandleStruct, NumberOrIndex, IsIndex); + } + + /// Sets the alternate setting of the specified interface. + public virtual bool SetAltInterface(byte NumberOrIndex, bool IsIndex, byte AltSettingNumber) + { + return driverAPI.SetAltInterface(mHandleStruct, NumberOrIndex, IsIndex, AltSettingNumber); + } + + /// Sets the device configuration number. + public virtual bool SetConfiguration(byte ConfigurationNumber) + { + return driverAPI.SetConfiguration(mHandleStruct, ConfigurationNumber); + } + + /// Sets the alternate setting of an interface. + public virtual bool SetCurrentAlternateSetting(byte AltSettingNumber) + { + return driverAPI.SetCurrentAlternateSetting(mHandleStruct, AltSettingNumber); + } + + /// Sets the policy for a specific pipe associated with an endpoint on the device. This is a synchronous operation. + public virtual bool SetPipePolicy(byte PipeID, int PolicyType, int ValueLength, IntPtr Value) + { + return driverAPI.SetPipePolicy(mHandleStruct, PipeID, PolicyType, ValueLength, Value); + } + + /// Sets the policy for a specific pipe associated with an endpoint on the device. This is a synchronous operation. + public virtual bool SetPipePolicy(byte PipeID, int PolicyType, int ValueLength, Array Value) + { + return driverAPI.SetPipePolicy(mHandleStruct, PipeID, PolicyType, ValueLength, Marshal.UnsafeAddrOfPinnedArrayElement(Value, 0)); + } + + /// Sets the power policy for a device. + public virtual bool SetPowerPolicy(int PolicyType, int ValueLength, IntPtr Value) + { + return driverAPI.SetPowerPolicy(mHandleStruct, PolicyType, ValueLength, Value); + } + + /// Sets the power policy for a device. + public virtual bool SetPowerPolicy(int PolicyType, int ValueLength, Array Value) + { + return driverAPI.SetPowerPolicy(mHandleStruct, PolicyType, ValueLength, Marshal.UnsafeAddrOfPinnedArrayElement(Value, 0)); + } + + /// Writes data to a pipe. + public virtual bool WritePipe(byte PipeID, IntPtr Buffer, int BufferLength, out int LengthTransferred, IntPtr Overlapped) + { + return driverAPI.WritePipe(mHandleStruct, PipeID, Buffer, BufferLength, out LengthTransferred, Overlapped); + } + + /// Writes data to a pipe. + public virtual bool WritePipe(byte PipeID, Array Buffer, int BufferLength, out int LengthTransferred, IntPtr Overlapped) + { + return driverAPI.WritePipe(mHandleStruct, PipeID, Marshal.UnsafeAddrOfPinnedArrayElement(Buffer, 0), BufferLength, out LengthTransferred, Overlapped); + } + + /// Writes data to a pipe. + public virtual bool WritePipe(byte PipeID, Array Buffer, int BufferLength, out int LengthTransferred, KOVL_HANDLE Overlapped) + { + return driverAPI.WritePipe(mHandleStruct, PipeID, Marshal.UnsafeAddrOfPinnedArrayElement(Buffer, 0), BufferLength, out LengthTransferred, Overlapped.Pointer); + } + + /// Writes data to a pipe. + public virtual bool WritePipe(byte PipeID, IntPtr Buffer, int BufferLength, out int LengthTransferred, KOVL_HANDLE Overlapped) + { + return driverAPI.WritePipe(mHandleStruct, PipeID, Buffer, BufferLength, out LengthTransferred, Overlapped.Pointer); + } + + #endregion + } + + public class OvlK : IDisposable + { + protected KOVL_POOL_HANDLE mHandleStruct; + protected bool mbDisposed; + + protected OvlK() + { + } + + #region IDisposable Members + + /// Explicitly closes and frees the handle. + public virtual void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + #endregion + + ~OvlK() + { + Dispose(false); + } + + protected virtual void Dispose(bool disposing) + { + if (!mbDisposed) + { + if (mHandleStruct.Pointer != IntPtr.Zero) + { + AllKFunctions.OvlK_Free(mHandleStruct); + Debug.Print("{0} Dispose: Freed Handle:{1:X16}h Explicit:{2}", GetType().Name, mHandleStruct.Pointer.ToInt64(), disposing); + } + else + Debug.Print("{0} Dispose: [WARNING] Handle is null", GetType().Name); + + mHandleStruct = new KOVL_POOL_HANDLE(IntPtr.Zero); + mbDisposed = true; + } + } + + /// Creates a new overlapped pool. + protected bool Init(KUSB_HANDLE UsbHandle, int MaxOverlappedCount, KOVL_POOL_FLAG Flags) + { + bool success = AllKFunctions.OvlK_Init(out mHandleStruct, UsbHandle, MaxOverlappedCount, Flags); + + if (!success) throw new Exception(string.Format("{0} failed initializing. ErrorCode={1:X8}h", GetType().Name, Marshal.GetLastWin32Error())); + + Debug.Print("{0} Init: handle 0x{1:X16}", GetType().Name, mHandleStruct.Pointer.ToInt64()); + return true; + } + + #region Public Members + + /// Creates a new overlapped pool. + public OvlK(KUSB_HANDLE UsbHandle, int MaxOverlappedCount, KOVL_POOL_FLAG Flags) + { + bool success = AllKFunctions.OvlK_Init(out mHandleStruct, UsbHandle, MaxOverlappedCount, Flags); + + if (!success) throw new Exception(string.Format("{0} failed initializing. ErrorCode={1:X8}h", GetType().Name, Marshal.GetLastWin32Error())); + + Debug.Print("{0} Init: handle 0x{1:X16}", GetType().Name, mHandleStruct.Pointer.ToInt64()); + } + + /// Gets a preallocated \c OverlappedK structure from the specified/default pool. + public virtual bool Acquire(out KOVL_HANDLE OverlappedK) + { + return AllKFunctions.OvlK_Acquire(out OverlappedK, mHandleStruct); + } + + /// Calls the dispose method. + public virtual void Free() + { + Dispose(); + } + + /// Returns the internal event handle used to signal IO operations. + public virtual IntPtr GetEventHandle(KOVL_HANDLE OverlappedK) + { + return AllKFunctions.OvlK_GetEventHandle(OverlappedK); + } + + /// Gets the handle class structure. + public KOVL_POOL_HANDLE Handle + { + get + { + return mHandleStruct; + } + } + + /// Checks for i/o completion; returns immediately. (polling) + public virtual bool IsComplete(KOVL_HANDLE OverlappedK) + { + return AllKFunctions.OvlK_IsComplete(OverlappedK); + } + + /// Initializes an overlappedK for re-use. The overlappedK is not return to its pool. + public virtual bool ReUse(KOVL_HANDLE OverlappedK) + { + return AllKFunctions.OvlK_ReUse(OverlappedK); + } + + /// Returns an \c OverlappedK structure to it's pool. + public virtual bool Release(KOVL_HANDLE OverlappedK) + { + return AllKFunctions.OvlK_Release(OverlappedK); + } + + /// Waits for overlapped I/O completion, and performs actions specified in \c WaitFlags. + public virtual bool Wait(KOVL_HANDLE OverlappedK, int TimeoutMS, KOVL_WAIT_FLAG WaitFlags, out int TransferredLength) + { + return AllKFunctions.OvlK_Wait(OverlappedK, TimeoutMS, WaitFlags, out TransferredLength); + } + + /// Waits for overlapped I/O completion, cancels on a timeout error and always releases the OvlK handle back to its pool. + public virtual bool WaitAndRelease(KOVL_HANDLE OverlappedK, int TimeoutMS, out int TransferredLength) + { + return AllKFunctions.OvlK_WaitAndRelease(OverlappedK, TimeoutMS, out TransferredLength); + } + + /// Waits for overlapped I/O completion on the oldest acquired OverlappedK handle and performs actions specified in \c WaitFlags. + public virtual bool WaitOldest(out KOVL_HANDLE OverlappedK, int TimeoutMS, KOVL_WAIT_FLAG WaitFlags, out int TransferredLength) + { + return AllKFunctions.OvlK_WaitOldest(mHandleStruct, out OverlappedK, TimeoutMS, WaitFlags, out TransferredLength); + } + + /// Waits for overlapped I/O completion, cancels on a timeout error. + public virtual bool WaitOrCancel(KOVL_HANDLE OverlappedK, int TimeoutMS, out int TransferredLength) + { + return AllKFunctions.OvlK_WaitOrCancel(OverlappedK, TimeoutMS, out TransferredLength); + } + + #endregion + } + + public class StmK : IDisposable + { + protected KSTM_HANDLE mHandleStruct; + protected bool mbDisposed; + + protected StmK() + { + } + + #region IDisposable Members + + /// Explicitly closes and frees the handle. + public virtual void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + #endregion + + ~StmK() + { + Dispose(false); + } + + protected virtual void Dispose(bool disposing) + { + if (!mbDisposed) + { + if (mHandleStruct.Pointer != IntPtr.Zero) + { + AllKFunctions.StmK_Free(mHandleStruct); + Debug.Print("{0} Dispose: Freed Handle:{1:X16}h Explicit:{2}", GetType().Name, mHandleStruct.Pointer.ToInt64(), disposing); + } + else + Debug.Print("{0} Dispose: [WARNING] Handle is null", GetType().Name); + + mHandleStruct = new KSTM_HANDLE(IntPtr.Zero); + mbDisposed = true; + } + } + + /// Initializes a new uni-directional pipe stream. + protected bool Init(KUSB_HANDLE UsbHandle, byte PipeID, int MaxTransferSize, int MaxPendingTransfers, int MaxPendingIO, ref KSTM_CALLBACK Callbacks, KSTM_FLAG Flags) + { + bool success = AllKFunctions.StmK_Init(out mHandleStruct, UsbHandle, PipeID, MaxTransferSize, MaxPendingTransfers, MaxPendingIO, ref Callbacks, Flags); + + if (!success) throw new Exception(string.Format("{0} failed initializing. ErrorCode={1:X8}h", GetType().Name, Marshal.GetLastWin32Error())); + + Debug.Print("{0} Init: handle 0x{1:X16}", GetType().Name, mHandleStruct.Pointer.ToInt64()); + return true; + } + + #region Public Members + + /// Initializes a new uni-directional pipe stream. + public StmK(KUSB_HANDLE UsbHandle, byte PipeID, int MaxTransferSize, int MaxPendingTransfers, int MaxPendingIO, ref KSTM_CALLBACK Callbacks, KSTM_FLAG Flags) + { + bool success = AllKFunctions.StmK_Init(out mHandleStruct, UsbHandle, PipeID, MaxTransferSize, MaxPendingTransfers, MaxPendingIO, ref Callbacks, Flags); + + if (!success) throw new Exception(string.Format("{0} failed initializing. ErrorCode={1:X8}h", GetType().Name, Marshal.GetLastWin32Error())); + + Debug.Print("{0} Init: handle 0x{1:X16}", GetType().Name, mHandleStruct.Pointer.ToInt64()); + } + + /// Calls the dispose method. + public virtual void Free() + { + Dispose(); + } + + /// Gets the handle class structure. + public KSTM_HANDLE Handle + { + get + { + return mHandleStruct; + } + } + + /// Reads data from the stream buffer. + public virtual bool Read(IntPtr Buffer, int Offset, int Length, out int TransferredLength) + { + return AllKFunctions.StmK_Read(mHandleStruct, Buffer, Offset, Length, out TransferredLength); + } + + /// Reads data from the stream buffer. + public virtual bool Read(Array Buffer, int Offset, int Length, out int TransferredLength) + { + return AllKFunctions.StmK_Read(mHandleStruct, Marshal.UnsafeAddrOfPinnedArrayElement(Buffer, 0), Offset, Length, out TransferredLength); + } + + /// Starts the internal stream thread. + public virtual bool Start() + { + return AllKFunctions.StmK_Start(mHandleStruct); + } + + /// Stops the internal stream thread. + public virtual bool Stop(int TimeoutCancelMS) + { + return AllKFunctions.StmK_Stop(mHandleStruct, TimeoutCancelMS); + } + + /// Writes data to the stream buffer. + public virtual bool Write(IntPtr Buffer, int Offset, int Length, out int TransferredLength) + { + return AllKFunctions.StmK_Write(mHandleStruct, Buffer, Offset, Length, out TransferredLength); + } + + /// Writes data to the stream buffer. + public virtual bool Write(Array Buffer, int Offset, int Length, out int TransferredLength) + { + return AllKFunctions.StmK_Write(mHandleStruct, Marshal.UnsafeAddrOfPinnedArrayElement(Buffer, 0), Offset, Length, out TransferredLength); + } + + #endregion + } + + public class IsoK : IDisposable + { + protected KISO_CONTEXT mHandleStruct; + protected bool mbDisposed; + + protected IsoK() + { + } + + #region IDisposable Members + + /// Explicitly closes and frees the handle. + public virtual void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + #endregion + + ~IsoK() + { + Dispose(false); + } + + protected virtual void Dispose(bool disposing) + { + if (!mbDisposed) + { + if (mHandleStruct.Pointer != IntPtr.Zero) + { + AllKFunctions.IsoK_Free(mHandleStruct); + Debug.Print("{0} Dispose: Freed Handle:{1:X16}h Explicit:{2}", GetType().Name, mHandleStruct.Pointer.ToInt64(), disposing); + } + else + Debug.Print("{0} Dispose: [WARNING] Handle is null", GetType().Name); + + mHandleStruct = new KISO_CONTEXT(IntPtr.Zero); + mbDisposed = true; + } + } + + /// Creates a new isochronous transfer context. + protected bool Init(int NumberOfPackets, int StartFrame) + { + bool success = AllKFunctions.IsoK_Init(out mHandleStruct, NumberOfPackets, StartFrame); + + if (!success) throw new Exception(string.Format("{0} failed initializing. ErrorCode={1:X8}h", GetType().Name, Marshal.GetLastWin32Error())); + + Debug.Print("{0} Init: handle 0x{1:X16}", GetType().Name, mHandleStruct.Pointer.ToInt64()); + return true; + } + + #region Nested Structs + + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)] + private struct KISO_CONTEXT_MAP + { + /// Additional ISO transfer flags. See \ref KISO_FLAG. + private readonly KISO_FLAG Flags; + + /// Specifies the frame number that the transfer should begin on (0 for ASAP). + private readonly int StartFrame; + + /// Contains the number of packets that completed with an error condition on return from the host controller driver. + private readonly short ErrorCount; + + /// Specifies the number of packets that are described by the variable-length array member \c IsoPacket. + private readonly short NumberOfPackets; + + /// Contains the URB Hdr.Status value on return from the host controller driver. + private readonly int UrbHdrStatus; + }; + + #endregion + + #region Public Members + + /// Creates a new isochronous transfer context. + public IsoK(int NumberOfPackets, int StartFrame) + { + bool success = AllKFunctions.IsoK_Init(out mHandleStruct, NumberOfPackets, StartFrame); + + if (!success) throw new Exception(string.Format("{0} failed initializing. ErrorCode={1:X8}h", GetType().Name, Marshal.GetLastWin32Error())); + + Debug.Print("{0} Init: handle 0x{1:X16}", GetType().Name, mHandleStruct.Pointer.ToInt64()); + } + + /// Convenience function for enumerating ISO packets of an isochronous transfer context. + public virtual bool EnumPackets(KISO_ENUM_PACKETS_CB EnumPackets, int StartPacketIndex, IntPtr UserState) + { + return AllKFunctions.IsoK_EnumPackets(mHandleStruct, EnumPackets, StartPacketIndex, UserState); + } + + /// Contains the number of packets that completed with an error condition on return from the host controller driver. + public short ErrorCount + { + get + { + return Marshal.ReadInt16(mHandleStruct.Pointer, ofsErrorCount); + } + set + { + Marshal.WriteInt16(mHandleStruct.Pointer, ofsErrorCount, value); + } + } + + /// Additional ISO transfer flags. See \ref KISO_FLAG. + public KISO_FLAG Flags + { + get + { + return (KISO_FLAG) Marshal.ReadInt32(mHandleStruct.Pointer, ofsFlags); + } + set + { + Marshal.WriteInt32(mHandleStruct.Pointer, ofsFlags, (int) value); + } + } + + /// Calls the dispose method. + public virtual void Free() + { + Dispose(); + } + + /// Convenience function for getting all fields of a \ref KISO_PACKET. + public virtual bool GetPacket(int PacketIndex, out KISO_PACKET IsoPacket) + { + return AllKFunctions.IsoK_GetPacket(mHandleStruct, PacketIndex, out IsoPacket); + } + + /// Gets the handle class structure. + public KISO_CONTEXT Handle + { + get + { + return mHandleStruct; + } + } + + /// Specifies the number of packets that are described by the variable-length array member \c IsoPacket. + public short NumberOfPackets + { + get + { + return Marshal.ReadInt16(mHandleStruct.Pointer, ofsNumberOfPackets); + } + set + { + Marshal.WriteInt16(mHandleStruct.Pointer, ofsNumberOfPackets, value); + } + } + + /// Convenience function for re-using an isochronous transfer context in a subsequent request. + public virtual bool ReUse() + { + return AllKFunctions.IsoK_ReUse(mHandleStruct); + } + + /// Convenience function for setting all fields of a \ref KISO_PACKET. + public virtual bool SetPacket(int PacketIndex, ref KISO_PACKET IsoPacket) + { + return AllKFunctions.IsoK_SetPacket(mHandleStruct, PacketIndex, ref IsoPacket); + } + + /// Convenience function for setting the offset of all ISO packets of an isochronous transfer context. + public virtual bool SetPackets(int PacketSize) + { + return AllKFunctions.IsoK_SetPackets(mHandleStruct, PacketSize); + } + + /// Specifies the frame number that the transfer should begin on (0 for ASAP). + public int StartFrame + { + get + { + return Marshal.ReadInt32(mHandleStruct.Pointer, ofsStartFrame); + } + set + { + Marshal.WriteInt32(mHandleStruct.Pointer, ofsStartFrame, value); + } + } + + /// Contains the URB Hdr.Status value on return from the host controller driver. + public int UrbHdrStatus + { + get + { + return Marshal.ReadInt32(mHandleStruct.Pointer, ofsUrbHdrStatus); + } + set + { + Marshal.WriteInt32(mHandleStruct.Pointer, ofsUrbHdrStatus, value); + } + } + + #endregion + + #region Private Members + + private static readonly int ofsErrorCount = Marshal.OffsetOf(typeof (KISO_CONTEXT_MAP), "ErrorCount").ToInt32(); + private static readonly int ofsFlags = Marshal.OffsetOf(typeof (KISO_CONTEXT_MAP), "Flags").ToInt32(); + private static readonly int ofsNumberOfPackets = Marshal.OffsetOf(typeof (KISO_CONTEXT_MAP), "NumberOfPackets").ToInt32(); + private static readonly int ofsStartFrame = Marshal.OffsetOf(typeof (KISO_CONTEXT_MAP), "StartFrame").ToInt32(); + private static readonly int ofsUrbHdrStatus = Marshal.OffsetOf(typeof (KISO_CONTEXT_MAP), "UrbHdrStatus").ToInt32(); + + #endregion + } +} \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/a5/a58a71ed80434868fb8810b5a3027e0bf5223c40.svn-base b/Old Matlab Interface/.svn/pristine/a5/a58a71ed80434868fb8810b5a3027e0bf5223c40.svn-base new file mode 100644 index 00000000..339bc805 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/a5/a58a71ed80434868fb8810b5a3027e0bf5223c40.svn-base @@ -0,0 +1,116 @@ +#region Copyright(c) Travis Robinson + +// Copyright (c) 2011-2012 Travis Robinson +// All rights reserved. +// +// Hot.Plug.Detect.GUI +// +// Last Updated: 03.08.2012 +// +// 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. +// +// 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 TRAVIS LEE ROBINSON +// 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. + +#endregion + +using System; +using System.Windows.Forms; +using libusbK; + +namespace Hot.Plug.Detect.GUI +{ + public partial class Form1 : Form + { + private const int WM_USER = 0x400; + + private const int WM_USER_HOT_BASE = WM_USER; + private const int WM_USER_HOT_REMOVAL = WM_USER_HOT_BASE; + private const int WM_USER_HOT_ARRIVAL = WM_USER_HOT_BASE + 1; + private HotK mHotK; + private KHOT_PARAMS mHotParams; + + public Form1() + { + InitializeComponent(); + } + + private void Form1_Load(object sender, EventArgs e) + { + mHotParams.PatternMatch.DeviceInterfaceGUID = "*"; + + // Set the Hwnd handle. + mHotParams.UserHwnd = Handle; + + // Set the base user message. This can be any value greater than or equal to 0x400 + mHotParams.UserMessage = WM_USER_HOT_BASE; + + // After initializing, send plug events for devices that are currently connected. + mHotParams.Flags = KHOT_FLAG.PLUG_ALL_ON_INIT; + + // This will cause HotK to use PostMessage instead of SendMessage. + mHotParams.Flags |= KHOT_FLAG.POST_USER_MESSAGE; + + mHotK = new HotK(ref mHotParams); + } + + private void OnHotPlugInvoked(KHOT_HANDLE hotHandle, KLST_DEVINFO_HANDLE deviceInfo, KLST_SYNC_FLAG plugType) + { + string symbolicLink = deviceInfo.SymbolicLink; + switch (plugType) + { + case KLST_SYNC_FLAG.ADDED: + int iRow = dgvDevices.Rows.Add(new object[] {symbolicLink, deviceInfo.DeviceDesc, deviceInfo.DeviceID}); + dgvDevices.Rows[iRow].Cells[1].ToolTipText = deviceInfo.ToString(); + dgvDevices.Rows[iRow].Cells[2].ToolTipText = deviceInfo.Common.ToString(); + break; + case KLST_SYNC_FLAG.REMOVED: + foreach (DataGridViewRow row in dgvDevices.Rows) + { + if (row.Cells[0].Value as string != symbolicLink) continue; + dgvDevices.Rows.Remove(row); + break; + } + break; + default: + throw new ArgumentOutOfRangeException("plugType"); + } + } + + protected override void WndProc(ref Message m) + { + /* When using the HotK UserHwnd and UserMsg, the add/remove events are seperated into to different messages. + * Removal = UserMsg + 0 + * Arrival = UserMsg + 1 + */ + if (m.Msg == WM_USER_HOT_REMOVAL || m.Msg == WM_USER_HOT_ARRIVAL) + { + KHOT_HANDLE hotHandle = new KHOT_HANDLE(m.WParam); + KLST_DEVINFO_HANDLE deviceInfo = new KLST_DEVINFO_HANDLE(m.LParam); + KLST_SYNC_FLAG plugType = (m.Msg == WM_USER_HOT_REMOVAL) ? KLST_SYNC_FLAG.REMOVED : KLST_SYNC_FLAG.ADDED; + + OnHotPlugInvoked(hotHandle, deviceInfo, plugType); + return; + } + base.WndProc(ref m); + } + + private void Form1_FormClosing(object sender, FormClosingEventArgs e) + { + mHotK.Dispose(); + } + } +} \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/a7/a74754103cbbd024e69f4caec56f8ce9481448f8.svn-base b/Old Matlab Interface/.svn/pristine/a7/a74754103cbbd024e69f4caec56f8ce9481448f8.svn-base new file mode 100644 index 00000000..2dbf01c5 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/a7/a74754103cbbd024e69f4caec56f8ce9481448f8.svn-base @@ -0,0 +1,10 @@ +clear all +first_gui_test +pause(0.01) +max_n = 10000; +setscopemode(0,1,1) +setpsu(0,1000) +%tiny_send_waveform(sin(linspace(0,2*pi, 128)),255,120) +%tiny_send_waveform(1:100, 255, 100) +mex_usb_iso_loop +%%plot(saved_waveform) \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/a7/a794081f3fb8dd91b746e26103b6a5d218317d28.svn-base b/Old Matlab Interface/.svn/pristine/a7/a794081f3fb8dd91b746e26103b6a5d218317d28.svn-base new file mode 100644 index 00000000..f301b946 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/a7/a794081f3fb8dd91b746e26103b6a5d218317d28.svn-base @@ -0,0 +1,973 @@ +function varargout = first_gui(varargin) +% FIRST_GUI MATLAB code for first_gui.fig +% FIRST_GUI, by itself, creates a new FIRST_GUI or raises the existing +% singleton*. +% +% H = FIRST_GUI returns the handle to a new FIRST_GUI or the handle to +% the existing singleton*. +% +% FIRST_GUI('CALLBACK',hObject,eventData,handles,...) calls the local +% function named CALLBACK in FIRST_GUI.M with the given input arguments. +% +% FIRST_GUI('Property','Value',...) creates a new FIRST_GUI or raises the +% existing singleton*. Starting from the left, property value pairs are +% applied to the GUI before first_gui_OpeningFcn gets called. An +% unrecognized property name or invalid value makes property application +% stop. All inputs are passed to first_gui_OpeningFcn via varargin. +% +% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one +% instance to run (singleton)". +% +% See also: GUIDE, GUIDATA, GUIHANDLES + +% Edit the above text to modify the response to help first_gui + +% Last Modified by GUIDE v2.5 21-Oct-2015 14:19:57 + +% Begin initialization code - DO NOT EDIT +gui_Singleton = 1; +gui_State = struct('gui_Name', mfilename, ... + 'gui_Singleton', gui_Singleton, ... + 'gui_OpeningFcn', @first_gui_OpeningFcn, ... + 'gui_OutputFcn', @first_gui_OutputFcn, ... + 'gui_LayoutFcn', [] , ... + 'gui_Callback', []); +if nargin && ischar(varargin{1}) + gui_State.gui_Callback = str2func(varargin{1}); +end + +if nargout + [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); +else + gui_mainfcn(gui_State, varargin{:}); +end +% End initialization code - DO NOT EDIT + + +% --- Executes just before first_gui is made visible. +function first_gui_OpeningFcn(hObject, eventdata, handles, varargin) +% This function has no output args, see OutputFcn. +% hObject handle to figure +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) +% varargin command line arguments to first_gui (see VARARGIN) + +% Choose default command line output for first_gui +handles.output = hObject; + +handles + +global gui_axes +global gui_delay +global text_box_1 +global text_box_2 +global gui_scope_running +global gui_cursor_mode +global gui_hori_cursor_a_pos +global gui_hori_cursor_b_pos +global gui_vert_cursor_a_pos +global gui_vert_cursor_b_pos +global scope_window_min +global gui_awg_waveform +global gui_awg_amplitude +global gui_awg_frequency +global gui_vo +global gui_ro +global gui_static_text_scope +global CH1_AC +global CH2_AC + + +gui_delay = handles.slider6 +gui_axes = handles.axes1; +text_box_1 = handles.edit1; +text_box_2 = handles.text9 +gui_static_text_scope = handles.text10; +gui_scope_running = 1; +gui_cursor_mode = 1; + +gui_vert_cursor_a_pos = 0; +gui_vert_cursor_b_pos = 0; +gui_hori_cursor_a_pos = scope_window_min; +gui_hori_cursor_b_pos = scope_window_min; + +gui_awg_waveform = 'sin(linspace(0,2*pi,128))'; +gui_awg_amplitude = '255'; +gui_awg_frequency = '50' + +gui_vo = 0; +gui_ro = 1000; + +CH1_AC = 0; +CH2_AC = 0; + + +%get(handles.axes1) + +% Update handles structure +guidata(hObject, handles); + +% UIWAIT makes first_gui wait for user response (see UIRESUME) +% uiwait(handles.figure1); + + +% --- Outputs from this function are returned to the command line. +function varargout = first_gui_OutputFcn(hObject, eventdata, handles) +% varargout cell array for returning output args (see VARARGOUT); +% hObject handle to figure +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +% Get default command line output from handles structure +varargout{1} = handles.output; + + + +function edit1_Callback(hObject, eventdata, handles) +% hObject handle to edit1 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +% Hints: get(hObject,'String') returns contents of edit1 as text +% str2double(get(hObject,'String')) returns contents of edit1 as a double + + +% --- Executes during object creation, after setting all properties. +function edit1_CreateFcn(hObject, eventdata, handles) +% hObject handle to edit1 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: edit controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end + + + +function edit2_Callback(hObject, eventdata, handles) +% hObject handle to edit2 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +% Hints: get(hObject,'String') returns contents of edit2 as text +% str2double(get(hObject,'String')) returns contents of edit2 as a double + + +% --- Executes during object creation, after setting all properties. +function edit2_CreateFcn(hObject, eventdata, handles) +% hObject handle to edit2 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: edit controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end + + + +function edit3_Callback(hObject, eventdata, handles) +% hObject handle to edit3 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +% Hints: get(hObject,'String') returns contents of edit3 as text +% str2double(get(hObject,'String')) returns contents of edit3 as a double + + +% --- Executes during object creation, after setting all properties. +function edit3_CreateFcn(hObject, eventdata, handles) +% hObject handle to edit3 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: edit controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end + + + +function edit4_Callback(hObject, eventdata, handles) +% hObject handle to edit4 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +% Hints: get(hObject,'String') returns contents of edit4 as text +% str2double(get(hObject,'String')) returns contents of edit4 as a double + + +% --- Executes during object creation, after setting all properties. +function edit4_CreateFcn(hObject, eventdata, handles) +% hObject handle to edit4 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: edit controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end + + +% --- Executes on slider movement. +function slider1_Callback(hObject, eventdata, handles) +global scope_window_time +global gui_delay +% hObject handle to slider1 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) +scope_window_time = 10^(-get(hObject, 'value')) +set(gui_delay, 'SliderStep', [scope_window_time/100, scope_window_time/10]); +% Hints: get(hObject,'Value') returns position of slider +% get(hObject,'Min') and get(hObject,'Max') to determine range of slider + + +% --- Executes during object creation, after setting all properties. +function slider1_CreateFcn(hObject, eventdata, handles) +% hObject handle to slider1 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: slider controls usually have a light gray background. +if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor',[.9 .9 .9]); +end + + + +function edit5_Callback(hObject, eventdata, handles) +% hObject handle to edit5 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +% Hints: get(hObject,'String') returns contents of edit5 as text +% str2double(get(hObject,'String')) returns contents of edit5 as a double + + +% --- Executes during object creation, after setting all properties. +function edit5_CreateFcn(hObject, eventdata, handles) +% hObject handle to edit5 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: edit controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end + + +% --- Executes on button press in pushbutton1. +function pushbutton1_Callback(hObject, eventdata, handles) +% hObject handle to pushbutton1 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + + +% --- Executes on slider movement. +function slider2_Callback(hObject, eventdata, handles) +% hObject handle to slider2 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +global gui_hori_cursor_a_pos +global scope_window_max +global scope_window_min +global text_box_2 +global gui_cursor_mode + +gui_hori_cursor_a_pos = scope_window_min + (scope_window_max - scope_window_min) * get(hObject,'Value'); + +global gui_hori_cursor_b_pos +global gui_vert_cursor_a_pos +global gui_vert_cursor_b_pos +switch gui_cursor_mode + case 1 + set(text_box_2, 'String', sprintf(' Vertical Cursor Disabled\n Vertical Cursor Disabled\n Vertical Cursor Disabled\n \n Horizontal cursor disabled \n Horizontal cursor disabled \n Horizontal cursor disabled \n ')) + case 2 + set(text_box_2, 'String', sprintf(' Vertical Cursor Disabled\n Vertical Cursor Disabled\n Vertical Cursor Disabled\n \n V1 = %3.3e\n V2 = %3.3e\n DeltaV = %3.3e\n', gui_hori_cursor_a_pos, gui_hori_cursor_b_pos, gui_hori_cursor_a_pos - gui_hori_cursor_b_pos)) + case 3 + set(text_box_2, 'String', sprintf(' T1 = %3.3e\n T2 = %3.3e\n DeltaT = %3.3e\n \n Horizontal cursor disabled \n Horizontal cursor disabled \n Horizontal cursor disabled \n ', gui_vert_cursor_a_pos, gui_vert_cursor_b_pos, gui_vert_cursor_a_pos - gui_vert_cursor_b_pos)) + case 4 + set(text_box_2, 'String', sprintf(' T1 = %3.3e\n T2 = %3.3e\n DeltaT = %3.3e\n \n V1 = %3.3e\n V2 = %3.3e\n DeltaV = %3.3e\n', gui_vert_cursor_a_pos, gui_vert_cursor_b_pos, gui_vert_cursor_a_pos - gui_vert_cursor_b_pos, gui_hori_cursor_a_pos, gui_hori_cursor_b_pos, gui_hori_cursor_a_pos - gui_hori_cursor_b_pos)) + otherwise error('Gui_cursor_mode is invalid') +end + +% Hints: get(hObject,'Value') returns position of slider +% get(hObject,'Min') and get(hObject,'Max') to determine range of slider + + +% --- Executes during object creation, after setting all properties. +function slider2_CreateFcn(hObject, eventdata, handles) +% hObject handle to slider2 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: slider controls usually have a light gray background. +if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor',[.9 .9 .9]); +end + + +% --- Executes on selection change in popupmenu1. +function popupmenu1_Callback(hObject, eventdata, handles) +% hObject handle to popupmenu1 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +global gui_cursor_mode +gui_cursor_mode = get(hObject,'Value') + +% Hints: contents = cellstr(get(hObject,'String')) returns popupmenu1 contents as cell array +% contents{get(hObject,'Value')} returns selected item from popupmenu1 + + +% --- Executes during object creation, after setting all properties. +function popupmenu1_CreateFcn(hObject, eventdata, handles) +% hObject handle to popupmenu1 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: popupmenu controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end + + +% --- Executes on slider movement. +function slider3_Callback(hObject, eventdata, handles) +% hObject handle to slider3 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +global gui_hori_cursor_b_pos +global scope_window_max +global scope_window_min +global text_box_2 +global gui_cursor_mode + +gui_hori_cursor_b_pos = scope_window_min + (scope_window_max - scope_window_min) * get(hObject,'Value'); + +global gui_hori_cursor_a_pos +global gui_vert_cursor_a_pos +global gui_vert_cursor_b_pos +switch gui_cursor_mode + case 1 + set(text_box_2, 'String', sprintf(' Vertical Cursor Disabled\n Vertical Cursor Disabled\n Vertical Cursor Disabled\n \n Horizontal cursor disabled \n Horizontal cursor disabled \n Horizontal cursor disabled \n ')) + case 2 + set(text_box_2, 'String', sprintf(' Vertical Cursor Disabled\n Vertical Cursor Disabled\n Vertical Cursor Disabled\n \n V1 = %3.3e\n V2 = %3.3e\n DeltaV = %3.3e\n', gui_hori_cursor_a_pos, gui_hori_cursor_b_pos, gui_hori_cursor_a_pos - gui_hori_cursor_b_pos)) + case 3 + set(text_box_2, 'String', sprintf(' T1 = %3.3e\n T2 = %3.3e\n DeltaT = %3.3e\n \n Horizontal cursor disabled \n Horizontal cursor disabled \n Horizontal cursor disabled \n ', gui_vert_cursor_a_pos, gui_vert_cursor_b_pos, gui_vert_cursor_a_pos - gui_vert_cursor_b_pos)) + case 4 + set(text_box_2, 'String', sprintf(' T1 = %3.3e\n T2 = %3.3e\n DeltaT = %3.3e\n \n V1 = %3.3e\n V2 = %3.3e\n DeltaV = %3.3e\n', gui_vert_cursor_a_pos, gui_vert_cursor_b_pos, gui_vert_cursor_a_pos - gui_vert_cursor_b_pos, gui_hori_cursor_a_pos, gui_hori_cursor_b_pos, gui_hori_cursor_a_pos - gui_hori_cursor_b_pos)) + otherwise error('Gui_cursor_mode is invalid') +end + +% Hints: get(hObject,'Value') returns position of slider +% get(hObject,'Min') and get(hObject,'Max') to determine range of slider + + +% --- Executes during object creation, after setting all properties. +function slider3_CreateFcn(hObject, eventdata, handles) +% hObject handle to slider3 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: slider controls usually have a light gray background. +if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor',[.9 .9 .9]); +end + + + +function edit6_Callback(hObject, eventdata, handles) +% hObject handle to edit6 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +global gui_awg_waveform +gui_awg_waveform = get(hObject,'String'); + + +% Hints: get(hObject,'String') returns contents of edit6 as text +% str2double(get(hObject,'String')) returns contents of edit6 as a double + + +% --- Executes during object creation, after setting all properties. +function edit6_CreateFcn(hObject, eventdata, handles) +% hObject handle to edit6 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: edit controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end + + +% --- Executes on button press in pushbutton3. +function pushbutton3_Callback(hObject, eventdata, handles) +% hObject handle to pushbutton3 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) +global gui_awg_waveform +global gui_awg_amplitude +global gui_awg_frequency +gui_awg_waveform +gui_awg_amplitude +gui_awg_frequency +tiny_send_waveform(eval(gui_awg_waveform), str2num(gui_awg_amplitude), str2num(gui_awg_frequency)); + + +function edit7_Callback(hObject, eventdata, handles) +% hObject handle to edit7 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +global gui_awg_amplitude +gui_awg_amplitude = get(hObject,'String'); + +% Hints: get(hObject,'String') returns contents of edit7 as text +% str2double(get(hObject,'String')) returns contents of edit7 as a double + + +% --- Executes during object creation, after setting all properties. +function edit7_CreateFcn(hObject, eventdata, handles) +% hObject handle to edit7 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: edit controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end + + + +function edit8_Callback(hObject, eventdata, handles) +% hObject handle to edit8 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +global gui_awg_frequency +gui_awg_frequency = get(hObject,'String'); +% Hints: get(hObject,'String') returns contents of edit8 as text +% str2double(get(hObject,'String')) returns contents of edit8 as a double + + +% --- Executes during object creation, after setting all properties. +function edit8_CreateFcn(hObject, eventdata, handles) +% hObject handle to edit8 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: edit controls usually have a white background on Windows. +% See ISPC and COMPUTER. + +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end + + +% --- Executes on button press in pushbutton4. +function pushbutton4_Callback(hObject, eventdata, handles) +% hObject handle to pushbutton4 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) +global gui_scope_running +gui_scope_running = ~gui_scope_running + + + +function edit9_Callback(hObject, eventdata, handles) +% hObject handle to edit9 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +global gui_vo; +gui_vo = str2num(get(hObject, 'String')); + +% Hints: get(hObject,'String') returns contents of edit9 as text +% str2double(get(hObject,'String')) returns contents of edit9 as a double + + +% --- Executes during object creation, after setting all properties. +function edit9_CreateFcn(hObject, eventdata, handles) +% hObject handle to edit9 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: edit controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end + + + +function edit10_Callback(hObject, eventdata, handles) +% hObject handle to edit10 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) +global gui_ro; +gui_ro = str2num(get(hObject, 'String')); +% Hints: get(hObject,'String') returns contents of edit10 as text +% str2double(get(hObject,'String')) returns contents of edit10 as a double + + +% --- Executes during object creation, after setting all properties. +function edit10_CreateFcn(hObject, eventdata, handles) +% hObject handle to edit10 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: edit controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end + + +% --- Executes on button press in pushbutton5. +function pushbutton5_Callback(hObject, eventdata, handles) +global gui_vo +global gui_ro +setpsu_boost(gui_vo, 5, gui_ro); +% hObject handle to pushbutton5 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + + +% --- Executes on slider movement. +function slider4_Callback(hObject, eventdata, handles) +% hObject handle to slider4 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +global gui_vert_cursor_a_pos +global scope_window_time +global text_box_2 +global gui_cursor_mode + +gui_vert_cursor_a_pos = -scope_window_time + (scope_window_time) * get(hObject,'Value'); + +global gui_hori_cursor_a_pos +global gui_hori_cursor_b_pos +global gui_vert_cursor_b_pos +switch gui_cursor_mode + case 1 + set(text_box_2, 'String', sprintf(' Vertical Cursor Disabled\n Vertical Cursor Disabled\n Vertical Cursor Disabled\n \n Horizontal cursor disabled \n Horizontal cursor disabled \n Horizontal cursor disabled \n ')) + case 2 + set(text_box_2, 'String', sprintf(' Vertical Cursor Disabled\n Vertical Cursor Disabled\n Vertical Cursor Disabled\n \n V1 = %3.3e\n V2 = %3.3e\n DeltaV = %3.3e\n', gui_hori_cursor_a_pos, gui_hori_cursor_b_pos, gui_hori_cursor_a_pos - gui_hori_cursor_b_pos)) + case 3 + set(text_box_2, 'String', sprintf(' T1 = %3.3e\n T2 = %3.3e\n DeltaT = %3.3e\n \n Horizontal cursor disabled \n Horizontal cursor disabled \n Horizontal cursor disabled \n ', gui_vert_cursor_a_pos, gui_vert_cursor_b_pos, gui_vert_cursor_a_pos - gui_vert_cursor_b_pos)) + case 4 + set(text_box_2, 'String', sprintf(' T1 = %3.3e\n T2 = %3.3e\n DeltaT = %3.3e\n \n V1 = %3.3e\n V2 = %3.3e\n DeltaV = %3.3e\n', gui_vert_cursor_a_pos, gui_vert_cursor_b_pos, gui_vert_cursor_a_pos - gui_vert_cursor_b_pos, gui_hori_cursor_a_pos, gui_hori_cursor_b_pos, gui_hori_cursor_a_pos - gui_hori_cursor_b_pos)) + otherwise error('Gui_cursor_mode is invalid') +end + +% Hints: get(hObject,'Value') returns position of slider +% get(hObject,'Min') and get(hObject,'Max') to determine range of slider + + +% --- Executes during object creation, after setting all properties. +function slider4_CreateFcn(hObject, eventdata, handles) +% hObject handle to slider4 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: slider controls usually have a light gray background. +if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor',[.9 .9 .9]); +end + + +% --- Executes on slider movement. +function slider5_Callback(hObject, eventdata, handles) +% hObject handle to slider5 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +global gui_vert_cursor_b_pos +global scope_window_time +global text_box_2 +global gui_cursor_mode +gui_vert_cursor_b_pos = -scope_window_time + (scope_window_time) * get(hObject,'Value'); + +global gui_hori_cursor_a_pos +global gui_hori_cursor_b_pos +global gui_vert_cursor_a_pos +switch gui_cursor_mode + case 1 + set(text_box_2, 'String', sprintf(' Vertical Cursor Disabled\n Vertical Cursor Disabled\n Vertical Cursor Disabled\n \n Horizontal cursor disabled \n Horizontal cursor disabled \n Horizontal cursor disabled \n ')) + case 2 + set(text_box_2, 'String', sprintf(' Vertical Cursor Disabled\n Vertical Cursor Disabled\n Vertical Cursor Disabled\n \n V1 = %3.3e\n V2 = %3.3e\n DeltaV = %3.3e\n', gui_hori_cursor_a_pos, gui_hori_cursor_b_pos, gui_hori_cursor_a_pos - gui_hori_cursor_b_pos)) + case 3 + set(text_box_2, 'String', sprintf(' T1 = %3.3e\n T2 = %3.3e\n DeltaT = %3.3e\n \n Horizontal cursor disabled \n Horizontal cursor disabled \n Horizontal cursor disabled \n ', gui_vert_cursor_a_pos, gui_vert_cursor_b_pos, gui_vert_cursor_a_pos - gui_vert_cursor_b_pos)) + case 4 + set(text_box_2, 'String', sprintf(' T1 = %3.3e\n T2 = %3.3e\n DeltaT = %3.3e\n \n V1 = %3.3e\n V2 = %3.3e\n DeltaV = %3.3e\n', gui_vert_cursor_a_pos, gui_vert_cursor_b_pos, gui_vert_cursor_a_pos - gui_vert_cursor_b_pos, gui_hori_cursor_a_pos, gui_hori_cursor_b_pos, gui_hori_cursor_a_pos - gui_hori_cursor_b_pos)) + otherwise error('Gui_cursor_mode is invalid') +end + + +% Hints: get(hObject,'Value') returns position of slider +% get(hObject,'Min') and get(hObject,'Max') to determine range of slider + + +% --- Executes during object creation, after setting all properties. +function slider5_CreateFcn(hObject, eventdata, handles) +% hObject handle to slider5 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: slider controls usually have a light gray background. +if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor',[.9 .9 .9]); +end + + +% --- Executes on selection change in popupmenu2. +function popupmenu2_Callback(hObject, eventdata, handles) +% hObject handle to popupmenu2 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) +global scope_mode +global scope_gain_0 +global scope_gain_1 +global refreshrate +global refreshrate_temp +global waveform_exists +global saved_waveform_ch1 +global saved_waveform_ch2 +global gui_delay + +refreshrate_temp = refreshrate; +waveform_exists = 0 + +contents = cellstr(get(hObject,'String')); +tempstring = contents{get(hObject,'Value')}; + +mode = str2num(tempstring(6)); +setscopemode(mode, scope_gain_0, scope_gain_1) + +saved_waveform_ch1 = []; +saved_waveform_ch2 = []; +set(gui_delay, 'Value', get(gui_delay, 'Max')) + +% Hints: contents = cellstr(get(hObject,'String')) returns popupmenu2 contents as cell array +% contents{get(hObject,'Value')} returns selected item from popupmenu2 + + +% --- Executes during object creation, after setting all properties. +function popupmenu2_CreateFcn(hObject, eventdata, handles) +% hObject handle to popupmenu2 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: popupmenu controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end + + +% --- Executes on slider movement. +function slider6_Callback(hObject, eventdata, handles) +% hObject handle to slider6 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +% Hints: get(hObject,'Value') returns position of slider +% get(hObject,'Min') and get(hObject,'Max') to determine range of slider + + +% --- Executes during object creation, after setting all properties. +function slider6_CreateFcn(hObject, eventdata, handles) +% hObject handle to slider6 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: slider controls usually have a light gray background. +if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor',[.9 .9 .9]); +end +set(hObject,'Value', 1); + + + +function edit11_Callback(hObject, eventdata, handles) +% hObject handle to edit11 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) +global gui_delay + +boxvar = str2num(get(hObject,'String')); +if boxvar +// All rights reserved. +// +// AssemblyInfo.cs +// +// Created: 03.02.2012 +// Last Updated: 03.03.2012 +// +// 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. +// +// 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 TRAVIS LEE ROBINSON +// 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. +#endregion + + +using System.Reflection; +using System.Runtime.InteropServices; + + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. + +[assembly: AssemblyTitle("Handle.Test")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("Handle.Test")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2012")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. + +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM + +[assembly: Guid("88461b6f-5eb8-47ed-b3f1-0105e1c85f86")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] + +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/ae/ae0f25c36f3df7432704d2bf7e1dbe0d0273513e.svn-base b/Old Matlab Interface/.svn/pristine/ae/ae0f25c36f3df7432704d2bf7e1dbe0d0273513e.svn-base new file mode 100644 index 00000000..f9649c33 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/ae/ae0f25c36f3df7432704d2bf7e1dbe0d0273513e.svn-base @@ -0,0 +1,19 @@ +global num_lc +global gui_static_text_scope +global saved_waveform_ch1 +global saved_waveform_ch2 +global usb_handle +global gui_delay + +num_lc = num_lc + 1; +max_n = 100000000; +%USB_POOL_FREE(ovlPool, ovlkHandle_0, ovlkHandle_1, usb_handle); //It +%crashes when I clear the handles. No idea why, but it's fine when I don't +clear usb_handle +set(gui_static_text_scope, 'String', sprintf('THE SCOPE (Reconnected %d times)', num_lc)); +saved_waveform_ch1 = [] +saved_waveform_ch2 = [] +set(gui_delay, 'Value', get(gui_delay, 'Max')); + +mex_usb_iso_loop + diff --git a/Old Matlab Interface/.svn/pristine/b1/b1a26ccf1a429fc72cfff9a3b4419a4c5886270d.svn-base b/Old Matlab Interface/.svn/pristine/b1/b1a26ccf1a429fc72cfff9a3b4419a4c5886270d.svn-base new file mode 100644 index 00000000..f4ee05df --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/b1/b1a26ccf1a429fc72cfff9a3b4419a4c5886270d.svn-base @@ -0,0 +1,116 @@ +%mex USB_ISO_LOOP.c -Iincludes -llibusbK -Lbin\lib\amd64 +%clear all + +global usb_handle +global scope_gain +global scope_window_time +global scope_window_max +global scope_window_min +global scope_mode +global gui_scope_running + +global gui_hori_cursor_a_pos +global gui_hori_cursor_b_pos +global gui_vert_cursor_a_pos +global gui_vert_cursor_b_pos +global gui_cursor_mode + +dotheplot + +if ~length(usb_handle) + warning('USB Handle not initialised. Initialising!') + mex_usb_init('03eb', 'a000') +end + +[isoCtx_0, isoCtx_1, ovlkHandle_0, ovlkHandle_1, ovlPool, isoBuffer] = USB_ISO_INIT(usb_handle) + +refreshrate = 4; +refreshrate_temp = refreshrate; + +if(isempty(max_n)) + max_n = 10 +end +saved_waveform = int8([]); + +if isempty(scope_mode) + error('You didn''t set the scope mode!'); +end + +if isempty(scope_window_time) + error('You didn''t set the window time (x) value!'); +end + +if (scope_window_time < 1/375000) + error('Scope window size is too small!'); +end + +if(scope_mode==0) + if isempty(scope_gain) + error('You didn''t set the gain!'); + end + + if isempty(scope_window_min) + error('You didn''t set the minimum window voltage value!'); + end + + if isempty(scope_window_max) + error('You didn''t set the maximum window voltage value!'); + end +end + +dropped_packets = 0; +waveform_exists = 0; + +for n=1:max_n + %[transfer_contents_0] = USB_ISO_LOOP(usb_handle, isoCtx_0, ovlkHandle_0, ovlPool, isoBuffer, uint8(0)); + [transfer_contents_0, libk_error] = USB_ISO_LOOP(usb_handle, isoCtx_0, ovlkHandle_0, ovlPool, isoBuffer, uint8(0)); + keep_in_sync + saved_waveform = [saved_waveform transfer_contents_0]; + if(gui_scope_running) + updatescopeaxes + else + switch(gui_cursor_mode) + case 1 + plot(gui_axes, taxis, cool_waveform, 'y'); + case 2 + plot(gui_axes, taxis, cool_waveform, 'y', [-scope_window_time 0], [gui_hori_cursor_a_pos gui_hori_cursor_a_pos], 'w', [-scope_window_time 0], [gui_hori_cursor_b_pos gui_hori_cursor_b_pos], 'w:'); + case 3 + plot(gui_axes, taxis, cool_waveform, 'y', [gui_vert_cursor_a_pos gui_vert_cursor_a_pos], [scope_window_min scope_window_max], 'w', [gui_vert_cursor_b_pos gui_vert_cursor_b_pos], [scope_window_min scope_window_max], 'w:'); + case 4 + plot(gui_axes, taxis, cool_waveform, 'y', [gui_vert_cursor_a_pos gui_vert_cursor_a_pos], [scope_window_min scope_window_max], 'w', [gui_vert_cursor_b_pos gui_vert_cursor_b_pos], [scope_window_min scope_window_max], 'w:', [-scope_window_time 0], [gui_hori_cursor_a_pos gui_hori_cursor_a_pos], 'w', [-scope_window_time 0], [gui_hori_cursor_b_pos gui_hori_cursor_b_pos], 'w:'); + + otherwise + error('Gui_axes is in an invalid state'); + end + set(gui_axes, 'Ylim', [scope_window_min, scope_window_max], 'Xlim', [-scope_window_time, 0], 'Color', [0 0 0], 'Box', 'on', 'XColor', [1 1 1], 'Ycolor', [1 1 1]); + drawnow + end + + %[transfer_contents_1] = USB_ISO_LOOP(usb_handle, isoCtx_1, ovlkHandle_1, ovlPool, isoBuffer, uint8(1)); + [transfer_contents_1, libk_error] = USB_ISO_LOOP(usb_handle, isoCtx_1, ovlkHandle_1, ovlPool, isoBuffer, uint8(1)); + keep_in_sync + saved_waveform = [saved_waveform transfer_contents_1]; + if(gui_scope_running) + updatescopeaxes + else + switch(gui_cursor_mode) + case 1 + plot(gui_axes, taxis, cool_waveform, 'y'); + case 2 + plot(gui_axes, taxis, cool_waveform, 'y', [-scope_window_time 0], [gui_hori_cursor_a_pos gui_hori_cursor_a_pos], 'w', [-scope_window_time 0], [gui_hori_cursor_b_pos gui_hori_cursor_b_pos], 'w:'); + case 3 + plot(gui_axes, taxis, cool_waveform, 'y', [gui_vert_cursor_a_pos gui_vert_cursor_a_pos], [scope_window_min scope_window_max], 'w', [gui_vert_cursor_b_pos gui_vert_cursor_b_pos], [scope_window_min scope_window_max], 'w:'); + case 4 + plot(gui_axes, taxis, cool_waveform, 'y', [gui_vert_cursor_a_pos gui_vert_cursor_a_pos], [scope_window_min scope_window_max], 'w', [gui_vert_cursor_b_pos gui_vert_cursor_b_pos], [scope_window_min scope_window_max], 'w:', [-scope_window_time 0], [gui_hori_cursor_a_pos gui_hori_cursor_a_pos], 'w', [-scope_window_time 0], [gui_hori_cursor_b_pos gui_hori_cursor_b_pos], 'w:'); + + otherwise + error('Gui_axes is in an invalid state'); + end + set(gui_axes, 'Ylim', [scope_window_min, scope_window_max], 'Xlim', [-scope_window_time, 0], 'Color', [0 0 0], 'Box', 'on', 'XColor', [1 1 1], 'Ycolor', [1 1 1]); + drawnow + end +end + +clear all +max_n = 2000 +mex_usb_iso_loop \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/b4/b44f8b25b8edf496c954c87abf9e73f992c0b26d.svn-base b/Old Matlab Interface/.svn/pristine/b4/b44f8b25b8edf496c954c87abf9e73f992c0b26d.svn-base new file mode 100644 index 00000000..01b9ce83 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/b4/b44f8b25b8edf496c954c87abf9e73f992c0b26d.svn-base @@ -0,0 +1,11250 @@ +182 +182 +182 +182 +182 +183 +183 +182 +183 +183 +183 +182 +182 +183 +182 +182 +182 +183 +182 +182 +182 +182 +182 +182 +181 +12 +11 +10 +11 +11 +11 +10 +182 +182 +183 +183 +182 +183 +182 +182 +182 +182 +183 +182 +182 +182 +181 +182 +183 +182 +183 +183 +182 +182 +182 +182 +182 +10 +9 +10 +11 +11 +11 +12 +182 +182 +182 +182 +182 +182 +182 +182 +182 +185 +183 +182 +183 +183 +180 +182 +179 +181 +181 +183 +183 +182 +182 +182 +182 +181 +182 +182 +182 +183 +183 +182 +182 +182 +182 +182 +182 +184 +183 +182 +182 +182 +182 +182 +182 +182 +182 +182 +12 +10 +10 +11 +11 +11 +10 +182 +182 +182 +182 +183 +182 +183 +182 +182 +183 +182 +182 +182 +182 +182 +179 +182 +182 +182 +182 +182 +182 +182 +182 +182 +12 +11 +11 +11 +11 +10 +11 +182 +182 +182 +181 +182 +182 +180 +182 +182 +183 +182 +183 +182 +182 +182 +182 +182 +182 +182 +182 +183 +182 +182 +182 +183 +13 +11 +10 +11 +11 +11 +11 +182 +182 +182 +182 +182 +182 +182 +183 +181 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +183 +182 +182 +182 +182 +12 +11 +11 +11 +11 +10 +10 +182 +182 +182 +182 +182 +182 +182 +184 +183 +182 +183 +183 +182 +182 +182 +182 +182 +182 +182 +183 +182 +182 +181 +182 +182 +11 +11 +11 +11 +11 +10 +11 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +183 +182 +182 +182 +182 +181 +182 +183 +182 +182 +182 +11 +11 +11 +11 +10 +11 +11 +183 +182 +182 +183 +182 +183 +182 +176 +182 +183 +182 +182 +183 +182 +182 +182 +182 +182 +182 +183 +182 +182 +183 +182 +182 +12 +11 +11 +11 +11 +10 +11 +182 +183 +182 +182 +183 +182 +182 +182 +182 +184 +182 +182 +182 +182 +184 +183 +182 +183 +182 +184 +182 +182 +182 +182 +185 +12 +11 +11 +11 +13 +10 +11 +182 +182 +180 +182 +182 +182 +182 +180 +182 +182 +183 +180 +179 +182 +182 +182 +182 +181 +182 +182 +182 +182 +182 +182 +182 +12 +11 +11 +11 +11 +10 +10 +183 +182 +12 +8 +11 +11 +11 +11 +11 +182 +182 +182 +182 +182 +182 +182 +183 +183 +183 +182 +182 +182 +184 +183 +182 +182 +182 +181 +183 +182 +182 +182 +183 +182 +12 +11 +11 +6 +11 +11 +11 +182 +181 +182 +182 +183 +182 +183 +182 +182 +182 +182 +181 +182 +182 +182 +183 +181 +182 +182 +183 +182 +183 +182 +182 +182 +12 +11 +10 +9 +11 +10 +10 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +183 +181 +183 +182 +183 +183 +13 +11 +11 +11 +10 +11 +11 +182 +182 +182 +182 +182 +182 +182 +182 +183 +182 +182 +183 +182 +183 +182 +183 +183 +182 +180 +182 +182 +182 +182 +183 +182 +12 +10 +10 +11 +11 +11 +10 +182 +182 +182 +182 +183 +183 +182 +182 +182 +181 +182 +182 +183 +182 +183 +183 +182 +182 +184 +182 +183 +183 +181 +182 +182 +12 +10 +10 +10 +11 +10 +10 +181 +182 +182 +182 +172 +182 +183 +182 +182 +182 +182 +182 +185 +182 +182 +183 +182 +182 +182 +183 +182 +182 +182 +182 +182 +12 +11 +11 +11 +12 +10 +10 +182 +182 +182 +182 +182 +182 +182 +183 +181 +182 +182 +182 +182 +182 +182 +183 +182 +183 +182 +183 +183 +183 +182 +182 +182 +12 +11 +10 +12 +11 +10 +11 +182 +182 +183 +182 +183 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +183 +183 +182 +183 +182 +183 +182 +182 +182 +12 +11 +11 +12 +10 +11 +11 +182 +182 +183 +182 +182 +182 +182 +183 +182 +183 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +12 +11 +11 +11 +10 +10 +10 +183 +182 +182 +182 +182 +182 +182 +183 +182 +182 +183 +182 +182 +182 +182 +182 +180 +183 +182 +182 +182 +188 +183 +182 +182 +12 +12 +11 +11 +11 +11 +8 +182 +182 +182 +182 +183 +182 +182 +182 +182 +183 +183 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +183 +179 +183 +12 +11 +11 +10 +10 +10 +10 +182 +182 +182 +182 +183 +183 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +183 +182 +183 +183 +182 +182 +181 +182 +182 +182 +183 +183 +182 +182 +184 +183 +184 +11 +11 +9 +9 +9 +12 +11 +182 +183 +183 +180 +182 +182 +183 +181 +183 +182 +181 +182 +183 +183 +182 +181 +182 +182 +181 +181 +182 +182 +183 +183 +182 +12 +11 +10 +11 +10 +10 +5 +183 +183 +184 +181 +183 +182 +181 +182 +181 +182 +183 +183 +183 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +181 +183 +11 +11 +10 +11 +12 +11 +9 +180 +181 +180 +183 +183 +182 +182 +183 +183 +182 +182 +181 +182 +181 +182 +182 +12 +10 +11 +11 +11 +11 +11 +182 +182 +182 +183 +182 +182 +182 +182 +182 +182 +183 +183 +182 +183 +182 +182 +181 +182 +182 +182 +182 +182 +182 +181 +183 +11 +10 +11 +11 +10 +9 +10 +183 +183 +183 +183 +182 +182 +182 +182 +181 +182 +182 +182 +182 +183 +181 +183 +182 +182 +182 +182 +182 +182 +181 +182 +182 +12 +10 +11 +10 +11 +11 +10 +182 +182 +181 +182 +182 +182 +183 +182 +182 +182 +182 +182 +182 +181 +182 +182 +182 +182 +182 +182 +182 +182 +183 +182 +182 +12 +11 +11 +11 +10 +11 +11 +182 +182 +183 +182 +183 +182 +183 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +181 +183 +180 +183 +182 +182 +183 +182 +11 +11 +10 +11 +11 +11 +11 +182 +182 +182 +182 +182 +182 +183 +182 +183 +182 +182 +182 +182 +181 +182 +182 +182 +182 +182 +182 +183 +182 +182 +182 +182 +12 +10 +10 +11 +11 +11 +10 +182 +182 +183 +181 +183 +182 +183 +182 +184 +182 +182 +183 +183 +180 +182 +182 +182 +183 +182 +182 +182 +183 +182 +186 +182 +12 +12 +10 +12 +11 +11 +11 +182 +188 +181 +183 +182 +182 +179 +182 +183 +183 +182 +189 +182 +182 +182 +182 +181 +182 +183 +182 +183 +183 +181 +180 +182 +10 +9 +10 +11 +11 +11 +9 +182 +181 +181 +183 +181 +183 +183 +182 +183 +181 +182 +182 +181 +182 +183 +183 +184 +182 +182 +182 +181 +182 +181 +182 +182 +12 +11 +11 +10 +10 +10 +10 +182 +183 +183 +180 +182 +182 +180 +181 +182 +182 +183 +183 +182 +182 +183 +183 +183 +183 +182 +182 +182 +182 +181 +181 +183 +181 +182 +181 +183 +182 +183 +182 +182 +182 +11 +10 +11 +11 +11 +10 +11 +182 +184 +183 +184 +182 +183 +181 +183 +183 +180 +182 +181 +182 +182 +182 +182 +180 +180 +182 +181 +182 +181 +182 +183 +184 +13 +11 +10 +10 +10 +10 +10 +181 +183 +182 +186 +184 +183 +181 +183 +182 +182 +182 +182 +182 +182 +183 +179 +182 +182 +183 +182 +182 +182 +182 +183 +182 +10 +10 +11 +11 +183 +182 +182 +182 +180 +181 +183 +182 +182 +183 +182 +182 +182 +181 +182 +185 +183 +183 +182 +12 +10 +10 +10 +9 +11 +11 +183 +183 +182 +183 +182 +182 +180 +182 +182 +183 +182 +180 +182 +181 +181 +184 +182 +183 +183 +181 +182 +183 +181 +184 +183 +12 +14 +10 +12 +9 +9 +11 +183 +183 +183 +181 +183 +181 +181 +183 +182 +183 +183 +181 +181 +181 +182 +182 +183 +183 +182 +182 +182 +182 +183 +181 +182 +12 +12 +12 +12 +11 +11 +10 +181 +182 +183 +183 +184 +182 +182 +181 +182 +181 +183 +183 +182 +182 +178 +182 +183 +182 +180 +181 +181 +182 +183 +182 +184 +13 +9 +10 +10 +13 +12 +12 +182 +182 +183 +182 +183 +182 +181 +183 +182 +182 +183 +182 +183 +182 +182 +183 +183 +182 +181 +182 +181 +182 +182 +185 +183 +14 +10 +11 +9 +9 +10 +10 +183 +183 +183 +183 +182 +183 +182 +182 +183 +182 +182 +181 +181 +182 +183 +182 +182 +182 +182 +183 +181 +182 +183 +183 +181 +12 +11 +10 +11 +11 +10 +10 +183 +182 +181 +183 +182 +183 +183 +183 +183 +184 +182 +182 +182 +182 +182 +181 +183 +183 +182 +183 +182 +183 +182 +182 +182 +13 +10 +11 +11 +11 +11 +10 +182 +182 +182 +183 +184 +183 +184 +182 +185 +183 +182 +182 +181 +182 +181 +182 +183 +182 +181 +182 +183 +183 +183 +182 +182 +11 +11 +11 +10 +8 +8 +10 +182 +182 +183 +183 +183 +182 +182 +182 +182 +182 +182 +181 +182 +185 +182 +182 +182 +182 +182 +182 +184 +182 +182 +182 +182 +13 +10 +11 +12 +10 +10 +11 +181 +182 +182 +183 +183 +11 +12 +10 +11 +183 +182 +182 +182 +182 +183 +183 +183 +183 +182 +182 +183 +183 +182 +182 +182 +181 +181 +182 +182 +181 +184 +182 +182 +182 +12 +11 +11 +11 +11 +11 +10 +182 +181 +182 +184 +183 +182 +181 +182 +183 +183 +183 +184 +182 +182 +182 +182 +182 +183 +182 +183 +183 +183 +182 +182 +183 +13 +11 +11 +11 +10 +10 +11 +183 +182 +181 +182 +182 +181 +182 +182 +182 +182 +183 +183 +183 +182 +182 +182 +183 +183 +181 +182 +181 +11 +10 +180 +181 +182 +181 +183 +182 +182 +182 +182 +183 +182 +182 +182 +181 +182 +182 +180 +180 +182 +181 +182 +182 +183 +182 +182 +12 +10 +11 +10 +10 +11 +11 +182 +183 +183 +182 +183 +181 +183 +182 +181 +182 +181 +181 +183 +182 +182 +182 +182 +182 +182 +183 +183 +183 +182 +183 +181 +10 +11 +9 +11 +10 +10 +10 +183 +182 +182 +183 +183 +182 +182 +181 +182 +183 +182 +182 +181 +183 +182 +181 +182 +182 +182 +182 +183 +185 +184 +183 +184 +9 +11 +9 +10 +10 +11 +10 +182 +182 +182 +182 +183 +182 +183 +182 +182 +183 +184 +182 +182 +183 +181 +181 +182 +181 +181 +182 +182 +183 +182 +182 +182 +12 +10 +7 +10 +8 +10 +10 +181 +181 +182 +182 +180 +183 +183 +183 +183 +182 +182 +182 +181 +180 +182 +182 +182 +184 +182 +183 +182 +183 +182 +183 +183 +12 +11 +7 +9 +10 +10 +8 +181 +182 +182 +183 +184 +186 +182 +181 +179 +182 +186 +182 +182 +183 +182 +186 +182 +182 +182 +182 +185 +181 +182 +183 +184 +12 +11 +12 +10 +10 +9 +11 +182 +182 +181 +181 +181 +182 +181 +182 +182 +182 +184 +183 +182 +182 +183 +182 +182 +182 +178 +183 +181 +182 +182 +182 +182 +12 +11 +11 +11 +11 +10 +11 +182 +183 +181 +183 +182 +182 +181 +181 +183 +181 +183 +182 +183 +183 +182 +182 +182 +182 +184 +183 +183 +182 +182 +182 +181 +12 +10 +11 +11 +11 +12 +10 +183 +182 +182 +182 +182 +182 +182 +182 +185 +183 +181 +182 +182 +182 +181 +182 +183 +184 +183 +184 +182 +183 +182 +182 +182 +11 +10 +10 +186 +182 +182 +183 +182 +182 +12 +10 +10 +11 +11 +11 +11 +182 +181 +181 +183 +184 +182 +182 +183 +182 +183 +183 +178 +182 +181 +182 +182 +186 +183 +184 +182 +182 +182 +186 +182 +182 +11 +12 +12 +10 +10 +10 +11 +183 +184 +182 +181 +183 +182 +183 +183 +182 +181 +181 +183 +182 +181 +182 +183 +183 +182 +180 +182 +182 +182 +183 +181 +182 +11 +10 +11 +11 +11 +8 +10 +182 +182 +183 +183 +182 +181 +183 +183 +182 +182 +182 +181 +182 +184 +183 +182 +11 +10 +11 +11 +12 +11 +11 +182 +181 +183 +182 +183 +181 +182 +182 +181 +183 +184 +181 +182 +182 +180 +182 +183 +183 +183 +181 +183 +182 +182 +181 +183 +11 +11 +12 +12 +10 +9 +10 +181 +183 +183 +181 +180 +182 +182 +184 +183 +182 +182 +182 +183 +183 +182 +181 +182 +182 +181 +181 +182 +183 +184 +182 +185 +11 +10 +10 +11 +11 +10 +11 +182 +182 +182 +182 +182 +183 +182 +182 +182 +184 +182 +183 +182 +181 +183 +182 +182 +183 +186 +181 +182 +181 +182 +183 +181 +11 +9 +12 +11 +11 +11 +7 +182 +182 +181 +183 +181 +181 +182 +183 +182 +180 +183 +182 +183 +183 +182 +182 +182 +182 +182 +183 +182 +183 +182 +182 +182 +10 +10 +11 +12 +11 +11 +11 +182 +181 +183 +182 +182 +181 +181 +182 +183 +183 +183 +183 +182 +182 +182 +183 +183 +181 +182 +182 +182 +183 +182 +181 +183 +11 +11 +11 +9 +11 +9 +11 +182 +181 +182 +182 +182 +182 +182 +183 +181 +183 +183 +182 +183 +181 +182 +182 +183 +183 +182 +183 +181 +184 +183 +184 +182 +11 +11 +11 +11 +12 +11 +11 +181 +182 +182 +182 +182 +183 +183 +182 +182 +183 +181 +181 +183 +182 +182 +182 +182 +181 +183 +180 +180 +182 +182 +183 +182 +13 +10 +11 +11 +10 +11 +9 +183 +182 +181 +183 +182 +183 +182 +181 +182 +182 +184 +183 +182 +182 +182 +182 +183 +183 +182 +182 +181 +183 +183 +184 +182 +12 +10 +11 +12 +11 +11 +10 +182 +182 +182 +182 +183 +183 +182 +182 +182 +182 +180 +182 +182 +183 +182 +182 +182 +183 +183 +181 +182 +183 +184 +182 +183 +182 +181 +183 +184 +182 +182 +182 +181 +183 +13 +9 +8 +11 +11 +11 +11 +184 +184 +182 +183 +183 +182 +182 +182 +183 +183 +182 +182 +181 +184 +182 +182 +181 +182 +182 +183 +184 +182 +182 +182 +182 +12 +11 +11 +9 +10 +10 +11 +183 +183 +182 +181 +183 +183 +182 +182 +182 +183 +182 +181 +183 +182 +182 +182 +183 +182 +182 +182 +183 +181 +182 +182 +182 +12 +10 +10 +10 +12 +10 +12 +182 +181 +182 +179 +181 +182 +181 +182 +181 +183 +182 +184 +183 +184 +181 +177 +12 +11 +11 +10 +11 +11 +11 +182 +182 +182 +183 +182 +182 +183 +182 +182 +182 +183 +182 +182 +182 +182 +182 +183 +182 +184 +182 +182 +182 +182 +182 +182 +11 +10 +11 +11 +15 +10 +10 +182 +182 +183 +183 +183 +181 +182 +182 +183 +182 +180 +180 +182 +183 +183 +183 +183 +181 +183 +182 +182 +181 +182 +185 +182 +12 +10 +11 +11 +10 +10 +9 +181 +183 +182 +182 +182 +183 +182 +183 +183 +183 +181 +181 +182 +182 +183 +182 +182 +182 +182 +183 +182 +181 +183 +183 +182 +12 +11 +10 +15 +11 +12 +11 +182 +182 +183 +180 +181 +182 +183 +183 +182 +182 +181 +182 +183 +184 +182 +183 +181 +182 +182 +183 +183 +183 +185 +182 +183 +12 +9 +11 +11 +11 +11 +9 +181 +183 +182 +183 +182 +182 +182 +184 +182 +184 +182 +181 +182 +182 +181 +182 +182 +182 +184 +182 +183 +182 +182 +182 +181 +12 +11 +10 +10 +11 +12 +11 +183 +180 +184 +184 +180 +182 +182 +183 +182 +181 +182 +183 +183 +182 +182 +181 +183 +183 +184 +182 +181 +183 +182 +183 +183 +11 +9 +11 +11 +11 +10 +9 +182 +183 +183 +182 +182 +182 +182 +182 +183 +182 +180 +182 +182 +183 +183 +182 +181 +182 +182 +183 +182 +183 +182 +182 +182 +10 +10 +11 +12 +11 +10 +10 +182 +183 +185 +182 +182 +181 +181 +182 +183 +181 +181 +182 +183 +182 +183 +182 +182 +183 +182 +180 +182 +182 +182 +182 +182 +11 +11 +9 +11 +11 +11 +10 +182 +184 +184 +182 +183 +182 +182 +182 +182 +182 +184 +181 +182 +182 +182 +182 +182 +180 +183 +182 +183 +183 +181 +182 +182 +183 +183 +184 +182 +182 +183 +182 +182 +181 +12 +11 +11 +12 +11 +10 +10 +183 +183 +181 +180 +182 +184 +182 +182 +182 +182 +182 +182 +182 +181 +182 +183 +183 +179 +181 +182 +182 +182 +182 +182 +181 +11 +11 +11 +11 +9 +10 +11 +184 +185 +182 +182 +183 +183 +182 +183 +183 +183 +182 +182 +181 +181 +181 +182 +182 +182 +179 +182 +183 +181 +182 +183 +181 +183 +183 +183 +182 +182 +183 +182 +182 +181 +181 +183 +181 +181 +180 +184 +181 +180 +182 +183 +185 +181 +182 +182 +14 +12 +12 +10 +11 +11 +11 +182 +183 +182 +183 +182 +183 +184 +182 +181 +181 +182 +184 +183 +182 +181 +182 +184 +183 +183 +182 +179 +182 +182 +182 +181 +10 +12 +11 +10 +10 +10 +8 +182 +183 +182 +181 +182 +181 +181 +182 +182 +184 +183 +181 +182 +181 +183 +182 +180 +182 +183 +183 +182 +182 +181 +182 +183 +12 +10 +9 +11 +10 +11 +11 +181 +181 +183 +184 +182 +182 +182 +182 +183 +182 +182 +182 +182 +182 +182 +183 +184 +182 +181 +182 +181 +182 +182 +180 +180 +12 +11 +11 +10 +10 +11 +10 +182 +183 +182 +182 +182 +182 +183 +183 +182 +182 +181 +184 +184 +183 +183 +181 +181 +182 +183 +182 +183 +182 +182 +182 +182 +10 +10 +11 +11 +11 +10 +11 +182 +182 +184 +183 +183 +181 +182 +181 +182 +183 +181 +182 +181 +183 +182 +182 +183 +182 +182 +183 +182 +183 +183 +182 +181 +12 +11 +13 +11 +12 +10 +9 +182 +181 +182 +182 +181 +182 +182 +182 +182 +182 +182 +177 +184 +182 +181 +183 +182 +183 +183 +181 +181 +183 +182 +183 +181 +12 +11 +11 +11 +9 +11 +11 +182 +182 +182 +182 +182 +183 +182 +182 +182 +182 +182 +183 +183 +183 +185 +182 +182 +182 +183 +183 +183 +183 +183 +182 +181 +11 +10 +11 +11 +12 +10 +10 +182 +184 +183 +182 +182 +182 +183 +182 +182 +182 +181 +182 +182 +181 +182 +183 +182 +182 +182 +182 +182 +183 +183 +182 +182 +11 +12 +11 +10 +10 +10 +11 +182 +183 +13 +11 +11 +10 +10 +12 +12 +182 +184 +182 +181 +182 +182 +182 +182 +181 +184 +184 +182 +184 +182 +183 +183 +183 +182 +182 +183 +181 +182 +182 +181 +183 +11 +9 +11 +11 +10 +11 +10 +182 +183 +182 +182 +181 +181 +183 +183 +182 +182 +181 +182 +183 +183 +182 +181 +182 +183 +184 +182 +182 +183 +182 +182 +183 +12 +11 +12 +10 +11 +7 +10 +182 +181 +182 +180 +182 +183 +181 +181 +183 +183 +181 +182 +182 +182 +181 +182 +12 +11 +10 +9 +10 +10 +12 +181 +182 +181 +182 +183 +181 +182 +182 +183 +182 +181 +182 +183 +183 +185 +181 +182 +182 +183 +183 +182 +182 +183 +182 +182 +11 +10 +10 +12 +10 +11 +11 +183 +182 +184 +185 +181 +181 +182 +183 +181 +181 +182 +182 +181 +182 +183 +182 +181 +183 +182 +181 +180 +181 +182 +183 +180 +12 +11 +9 +9 +11 +12 +10 +181 +183 +182 +182 +183 +183 +182 +182 +182 +183 +181 +182 +182 +183 +181 +183 +187 +183 +182 +182 +182 +183 +184 +182 +184 +11 +10 +11 +12 +11 +11 +10 +182 +182 +182 +182 +183 +182 +183 +182 +180 +183 +183 +182 +181 +182 +182 +184 +182 +184 +182 +181 +182 +182 +182 +182 +181 +12 +12 +12 +11 +11 +11 +11 +181 +183 +183 +183 +182 +181 +182 +182 +183 +183 +182 +182 +183 +183 +181 +181 +182 +182 +183 +181 +181 +182 +182 +182 +181 +12 +10 +11 +10 +11 +11 +10 +182 +181 +182 +182 +182 +182 +183 +184 +182 +182 +182 +182 +182 +182 +182 +182 +181 +183 +183 +181 +181 +182 +183 +182 +181 +12 +9 +11 +12 +10 +10 +8 +182 +183 +183 +183 +181 +183 +182 +182 +182 +183 +184 +183 +182 +182 +183 +183 +182 +183 +182 +182 +182 +182 +183 +182 +181 +12 +11 +11 +11 +11 +11 +10 +182 +182 +181 +181 +183 +177 +181 +182 +181 +184 +182 +182 +181 +183 +183 +184 +184 +181 +181 +182 +182 +182 +182 +182 +184 +11 +10 +10 +10 +11 +15 +10 +182 +183 +183 +182 +182 +183 +182 +183 +182 +181 +183 +181 +182 +183 +182 +182 +182 +182 +180 +183 +183 +181 +180 +182 +182 +183 +181 +182 +182 +183 +184 +182 +181 +182 +11 +12 +11 +11 +10 +11 +12 +183 +181 +181 +182 +182 +182 +182 +182 +182 +182 +182 +184 +182 +181 +182 +182 +182 +183 +181 +182 +183 +186 +183 +182 +182 +11 +11 +11 +10 +10 +11 +11 +181 +183 +183 +182 +182 +182 +182 +182 +183 +181 +180 +183 +182 +184 +182 +182 +181 +182 +183 +181 +183 +182 +183 +180 +183 +12 +10 +10 +11 +12 +10 +10 +181 +182 +183 +184 +183 +181 +182 +183 +182 +181 +182 +182 +181 +182 +179 +180 +12 +11 +11 +10 +11 +10 +13 +182 +181 +181 +181 +181 +182 +182 +182 +182 +182 +183 +181 +182 +182 +179 +182 +182 +183 +184 +180 +181 +182 +183 +182 +184 +11 +10 +10 +10 +10 +10 +10 +182 +182 +182 +182 +182 +183 +182 +180 +182 +183 +182 +181 +181 +181 +181 +183 +183 +181 +182 +182 +182 +181 +181 +182 +181 +10 +10 +10 +9 +11 +10 +10 +182 +182 +182 +181 +183 +184 +182 +182 +184 +183 +182 +180 +182 +182 +182 +183 +184 +182 +181 +183 +185 +183 +183 +182 +184 +12 +10 +11 +11 +11 +11 +11 +181 +182 +183 +182 +183 +182 +183 +181 +183 +182 +183 +182 +182 +182 +182 +182 +181 +182 +183 +183 +183 +182 +181 +182 +181 +13 +12 +8 +10 +10 +11 +10 +183 +184 +182 +183 +182 +182 +183 +183 +182 +182 +181 +181 +183 +183 +182 +181 +182 +182 +183 +183 +182 +182 +183 +182 +182 +12 +11 +11 +11 +10 +11 +10 +181 +182 +182 +181 +182 +186 +183 +183 +181 +181 +183 +183 +182 +182 +182 +181 +182 +182 +182 +183 +184 +183 +182 +177 +181 +13 +11 +10 +10 +10 +11 +11 +182 +182 +181 +182 +183 +182 +183 +182 +182 +182 +182 +180 +182 +182 +182 +181 +183 +182 +183 +184 +182 +179 +182 +182 +185 +11 +12 +10 +11 +10 +11 +10 +182 +181 +182 +182 +182 +182 +183 +183 +182 +182 +183 +182 +183 +183 +182 +181 +183 +183 +182 +180 +182 +183 +182 +183 +182 +13 +11 +10 +11 +10 +11 +11 +181 +181 +183 +184 +182 +182 +183 +183 +184 +183 +182 +182 +182 +182 +182 +182 +182 +181 +183 +182 +182 +182 +182 +182 +181 +182 +182 +182 +182 +184 +182 +183 +181 +182 +12 +12 +10 +10 +10 +10 +12 +182 +183 +183 +184 +185 +182 +182 +182 +179 +182 +182 +181 +182 +181 +182 +182 +184 +182 +184 +181 +181 +182 +181 +182 +184 +12 +10 +11 +11 +11 +11 +11 +182 +182 +182 +183 +181 +181 +183 +183 +181 +182 +182 +182 +182 +182 +176 +181 +182 +182 +184 +182 +182 +181 +182 +182 +182 +11 +9 +10 +181 +182 +183 +182 +183 +181 +182 +183 +182 +182 +183 +183 +188 +183 +182 +181 +183 +186 +182 +183 +12 +11 +12 +10 +11 +10 +11 +182 +180 +183 +183 +182 +182 +183 +182 +182 +183 +182 +183 +185 +183 +184 +183 +181 +182 +183 +181 +181 +183 +181 +181 +180 +12 +10 +11 +11 +10 +10 +10 +182 +182 +181 +181 +182 +182 +183 +183 +182 +182 +182 +182 +184 +182 +182 +181 +180 +183 +182 +180 +182 +181 +181 +182 +182 +12 +11 +10 +11 +10 +12 +11 +182 +181 +182 +183 +182 +182 +182 +181 +182 +182 +183 +183 +182 +182 +183 +182 +181 +182 +181 +183 +183 +184 +182 +183 +183 +11 +10 +10 +10 +11 +10 +10 +182 +182 +182 +182 +182 +182 +182 +183 +183 +182 +182 +182 +185 +183 +179 +183 +182 +181 +182 +183 +184 +182 +182 +182 +181 +13 +12 +10 +11 +11 +11 +10 +181 +183 +181 +183 +183 +182 +181 +181 +183 +182 +183 +181 +181 +183 +183 +183 +183 +185 +183 +183 +182 +182 +182 +182 +182 +13 +12 +10 +10 +10 +11 +11 +182 +183 +181 +181 +183 +183 +181 +181 +183 +182 +183 +182 +182 +179 +182 +183 +184 +181 +181 +182 +182 +183 +183 +182 +181 +12 +11 +10 +10 +10 +11 +10 +182 +182 +182 +183 +182 +182 +182 +181 +182 +183 +180 +182 +183 +182 +183 +181 +179 +180 +183 +183 +184 +182 +182 +183 +182 +12 +11 +11 +10 +11 +11 +11 +182 +181 +182 +182 +183 +185 +182 +182 +183 +183 +183 +183 +185 +182 +182 +183 +182 +182 +184 +182 +182 +182 +182 +183 +183 +12 +12 +10 +11 +10 +11 +12 +181 +181 +182 +182 +182 +182 +10 +10 +9 +182 +183 +181 +180 +182 +182 +183 +182 +182 +181 +183 +182 +185 +182 +184 +182 +182 +178 +183 +182 +182 +182 +184 +185 +182 +12 +10 +9 +11 +12 +11 +10 +182 +182 +182 +180 +182 +182 +182 +182 +183 +182 +182 +182 +182 +182 +182 +183 +182 +182 +183 +182 +182 +181 +183 +182 +183 +12 +10 +10 +10 +11 +10 +11 +183 +180 +183 +182 +182 +183 +185 +181 +181 +182 +184 +182 +183 +182 +182 +183 +181 +182 +10 +10 +12 +10 +10 +181 +181 +183 +183 +182 +181 +182 +182 +183 +183 +180 +180 +182 +182 +182 +181 +182 +181 +181 +181 +181 +182 +183 +182 +182 +11 +10 +10 +10 +10 +10 +11 +181 +181 +182 +182 +182 +181 +182 +179 +181 +181 +183 +183 +182 +179 +182 +183 +183 +181 +180 +181 +181 +182 +183 +181 +181 +11 +11 +10 +10 +10 +10 +12 +182 +181 +182 +181 +182 +181 +182 +182 +182 +182 +183 +183 +182 +181 +182 +181 +182 +184 +185 +182 +179 +182 +182 +183 +182 +12 +10 +13 +12 +13 +10 +8 +186 +182 +182 +183 +182 +178 +182 +182 +181 +183 +184 +182 +181 +182 +183 +183 +182 +182 +182 +183 +183 +182 +182 +183 +182 +11 +11 +10 +10 +10 +10 +10 +182 +183 +181 +182 +181 +182 +183 +182 +182 +183 +184 +182 +183 +182 +181 +183 +184 +181 +181 +182 +182 +182 +181 +182 +181 +12 +11 +11 +10 +10 +12 +12 +181 +181 +182 +182 +184 +182 +182 +182 +182 +181 +182 +182 +182 +181 +182 +183 +183 +182 +182 +181 +184 +182 +182 +182 +181 +11 +11 +12 +11 +11 +10 +9 +182 +184 +182 +181 +182 +183 +183 +181 +182 +182 +184 +182 +183 +182 +182 +183 +183 +181 +180 +182 +182 +182 +182 +181 +182 +12 +10 +10 +12 +12 +11 +11 +182 +181 +182 +183 +183 +182 +182 +184 +184 +182 +183 +182 +182 +183 +184 +181 +181 +182 +182 +182 +181 +182 +180 +183 +183 +12 +10 +9 +10 +10 +11 +10 +182 +182 +182 +182 +182 +182 +183 +181 +182 +181 +182 +183 +181 +182 +182 +183 +179 +182 +181 +182 +182 +182 +181 +183 +182 +11 +11 +10 +10 +182 +182 +182 +183 +183 +12 +11 +10 +9 +12 +11 +9 +181 +181 +183 +183 +184 +181 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +184 +183 +183 +181 +181 +182 +182 +12 +11 +11 +10 +10 +12 +11 +183 +182 +182 +182 +182 +182 +182 +182 +183 +180 +182 +182 +184 +182 +183 +182 +181 +183 +183 +186 +182 +182 +181 +182 +185 +11 +10 +12 +10 +10 +10 +10 +182 +181 +182 +182 +182 +182 +181 +182 +183 +182 +183 +182 +181 +183 +181 +181 +12 +11 +12 +10 +11 +10 +9 +184 +183 +183 +182 +183 +182 +183 +182 +181 +182 +183 +182 +182 +182 +182 +183 +182 +182 +182 +182 +183 +182 +182 +183 +182 +11 +11 +12 +9 +8 +8 +11 +183 +181 +182 +182 +183 +182 +180 +180 +181 +182 +183 +183 +181 +182 +182 +184 +182 +182 +182 +182 +183 +183 +182 +181 +182 +11 +11 +10 +10 +11 +12 +10 +174 +182 +182 +181 +184 +181 +181 +182 +182 +181 +179 +183 +182 +182 +182 +183 +183 +181 +183 +184 +182 +182 +182 +181 +182 +11 +10 +10 +8 +11 +11 +10 +181 +182 +183 +182 +184 +181 +181 +183 +184 +181 +182 +183 +182 +182 +182 +182 +182 +182 +182 +183 +182 +182 +183 +182 +182 +12 +8 +10 +12 +11 +10 +9 +182 +182 +184 +182 +182 +183 +182 +181 +182 +182 +181 +182 +181 +185 +182 +182 +182 +186 +183 +183 +182 +181 +180 +183 +182 +12 +9 +8 +11 +11 +11 +11 +182 +182 +182 +183 +182 +182 +179 +182 +183 +182 +182 +182 +183 +183 +182 +183 +182 +181 +183 +182 +183 +182 +183 +182 +182 +12 +11 +12 +12 +10 +9 +11 +182 +180 +183 +182 +181 +182 +183 +181 +180 +182 +182 +183 +182 +182 +182 +183 +184 +182 +182 +184 +182 +180 +183 +183 +183 +11 +10 +11 +11 +10 +10 +11 +184 +181 +181 +182 +182 +182 +182 +181 +181 +182 +183 +182 +182 +181 +182 +183 +185 +182 +182 +182 +182 +183 +183 +182 +182 +12 +11 +11 +11 +10 +11 +11 +182 +181 +182 +183 +184 +182 +181 +182 +183 +182 +183 +182 +182 +183 +183 +182 +181 +181 +183 +182 +182 +181 +182 +183 +184 +182 +180 +182 +182 +182 +181 +182 +183 +184 +11 +11 +11 +11 +11 +11 +10 +182 +182 +182 +181 +182 +182 +184 +181 +182 +182 +183 +181 +182 +183 +181 +182 +183 +185 +181 +182 +182 +183 +182 +183 +182 +11 +11 +12 +11 +10 +11 +12 +182 +182 +182 +182 +182 +182 +180 +182 +183 +183 +181 +182 +182 +184 +181 +182 +181 +182 +182 +183 +182 +182 +181 +181 +183 +13 +10 +11 +7 +10 +13 +183 +183 +182 +180 +182 +181 +184 +183 +182 +180 +182 +182 +182 +183 +182 +181 +183 +13 +12 +10 +10 +10 +11 +10 +182 +182 +181 +181 +183 +183 +181 +182 +181 +183 +182 +182 +182 +183 +182 +182 +183 +183 +182 +182 +183 +181 +182 +180 +184 +12 +10 +9 +11 +11 +11 +11 +181 +182 +182 +182 +182 +182 +181 +183 +184 +183 +182 +182 +180 +183 +183 +183 +182 +182 +183 +183 +182 +183 +182 +182 +181 +12 +11 +11 +10 +10 +10 +11 +182 +181 +182 +181 +182 +183 +182 +181 +181 +183 +183 +182 +181 +181 +182 +182 +181 +182 +182 +182 +182 +183 +183 +180 +182 +13 +9 +10 +10 +10 +10 +11 +182 +182 +179 +182 +183 +182 +182 +182 +183 +182 +183 +181 +182 +182 +181 +183 +182 +182 +183 +182 +181 +182 +183 +183 +182 +10 +10 +10 +11 +11 +10 +11 +182 +183 +183 +182 +182 +182 +182 +181 +184 +183 +182 +182 +181 +182 +183 +182 +183 +181 +182 +182 +183 +182 +182 +182 +182 +12 +11 +10 +10 +11 +10 +12 +182 +183 +183 +183 +184 +182 +182 +182 +182 +179 +183 +183 +182 +183 +182 +182 +182 +183 +182 +183 +182 +181 +182 +182 +183 +10 +8 +10 +11 +11 +10 +11 +181 +182 +183 +182 +182 +182 +183 +182 +182 +181 +183 +182 +183 +182 +180 +183 +182 +182 +182 +183 +181 +183 +182 +180 +181 +11 +11 +9 +10 +11 +11 +12 +181 +181 +179 +183 +182 +182 +182 +182 +185 +182 +181 +182 +181 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +181 +12 +11 +11 +9 +12 +11 +10 +182 +182 +182 +182 +182 +182 +180 +183 +182 +183 +181 +184 +182 +182 +182 +183 +184 +182 +181 +183 +183 +181 +182 +183 +183 +182 +182 +182 +182 +182 +182 +182 +182 +182 +11 +11 +11 +11 +11 +11 +10 +180 +179 +182 +182 +182 +183 +182 +183 +182 +181 +182 +183 +182 +182 +181 +182 +182 +182 +183 +183 +182 +182 +182 +180 +180 +12 +10 +12 +12 +11 +11 +11 +181 +183 +182 +182 +182 +184 +182 +182 +182 +183 +182 +181 +182 +181 +182 +183 +182 +183 +181 +182 +181 +13 +9 +181 +181 +186 +182 +182 +182 +184 +183 +181 +182 +180 +184 +183 +182 +182 +182 +183 +186 +182 +182 +182 +182 +183 +181 +181 +12 +13 +11 +10 +10 +10 +10 +183 +182 +181 +182 +182 +181 +181 +182 +182 +182 +182 +181 +182 +182 +183 +184 +181 +181 +183 +183 +182 +181 +185 +182 +183 +12 +10 +8 +10 +10 +10 +10 +180 +183 +182 +182 +181 +183 +181 +181 +182 +183 +181 +181 +182 +183 +182 +182 +182 +183 +181 +181 +183 +183 +183 +181 +182 +12 +11 +10 +10 +10 +11 +11 +181 +182 +183 +182 +182 +182 +182 +183 +182 +182 +182 +183 +181 +181 +183 +183 +184 +181 +182 +182 +182 +182 +182 +181 +182 +12 +10 +10 +10 +11 +10 +8 +180 +182 +183 +182 +181 +182 +183 +184 +182 +181 +182 +182 +183 +181 +181 +183 +185 +182 +183 +183 +182 +183 +183 +182 +181 +12 +11 +9 +9 +10 +11 +11 +181 +182 +182 +182 +182 +179 +180 +182 +182 +182 +183 +182 +182 +182 +182 +181 +182 +183 +184 +182 +182 +182 +182 +182 +183 +11 +11 +11 +10 +11 +12 +13 +181 +182 +182 +184 +182 +183 +182 +181 +184 +183 +182 +182 +182 +182 +182 +182 +181 +181 +183 +183 +182 +183 +183 +182 +182 +12 +10 +11 +11 +12 +12 +11 +182 +182 +182 +183 +182 +181 +183 +183 +182 +181 +182 +182 +182 +182 +182 +183 +182 +182 +182 +183 +183 +181 +181 +182 +183 +12 +9 +10 +11 +13 +10 +10 +182 +183 +184 +183 +182 +181 +182 +183 +182 +182 +182 +182 +183 +183 +182 +182 +182 +184 +180 +181 +182 +184 +182 +181 +182 +13 +11 +11 +11 +11 +10 +10 +181 +184 +14 +11 +11 +11 +10 +10 +11 +183 +182 +182 +182 +181 +183 +182 +183 +183 +183 +183 +182 +182 +182 +182 +182 +177 +183 +182 +182 +182 +182 +182 +182 +182 +12 +10 +11 +11 +11 +12 +11 +182 +182 +181 +183 +182 +183 +183 +182 +183 +180 +182 +183 +182 +181 +182 +184 +182 +181 +182 +180 +182 +182 +182 +183 +181 +11 +10 +11 +10 +10 +11 +11 +182 +180 +182 +182 +182 +181 +182 +180 +179 +181 +182 +183 +180 +182 +182 +182 +11 +11 +11 +10 +11 +10 +11 +182 +183 +182 +181 +181 +182 +182 +183 +184 +182 +182 +182 +181 +182 +182 +183 +184 +184 +183 +182 +183 +182 +183 +182 +182 +12 +11 +10 +9 +8 +13 +10 +183 +184 +182 +183 +182 +180 +182 +182 +183 +185 +182 +182 +182 +182 +182 +180 +180 +181 +182 +183 +183 +182 +182 +184 +181 +13 +11 +13 +11 +12 +10 +9 +182 +181 +182 +182 +182 +182 +183 +182 +183 +183 +182 +182 +181 +181 +183 +182 +185 +183 +184 +182 +182 +185 +182 +183 +181 +13 +9 +11 +10 +11 +10 +11 +183 +182 +182 +183 +183 +182 +181 +183 +182 +182 +182 +182 +183 +183 +183 +182 +176 +183 +182 +183 +182 +182 +182 +182 +183 +11 +10 +11 +12 +10 +10 +12 +181 +182 +183 +182 +182 +184 +182 +182 +182 +182 +182 +182 +182 +183 +183 +183 +182 +182 +182 +182 +182 +183 +182 +182 +182 +11 +9 +11 +12 +10 +12 +10 +182 +182 +181 +182 +182 +182 +182 +182 +183 +182 +182 +181 +182 +183 +183 +184 +183 +182 +182 +181 +181 +182 +182 +185 +184 +13 +10 +11 +11 +9 +12 +11 +182 +183 +181 +180 +182 +182 +183 +184 +182 +183 +181 +181 +182 +182 +182 +182 +183 +182 +182 +182 +182 +182 +183 +182 +180 +12 +10 +11 +12 +11 +11 +10 +181 +182 +182 +182 +183 +184 +182 +184 +181 +182 +183 +182 +182 +183 +183 +182 +182 +182 +181 +181 +182 +185 +183 +183 +185 +12 +11 +10 +10 +11 +11 +11 +182 +183 +182 +182 +182 +182 +180 +182 +183 +183 +181 +180 +181 +182 +183 +183 +183 +182 +182 +181 +182 +183 +183 +184 +183 +182 +182 +181 +180 +180 +183 +183 +183 +183 +12 +11 +11 +11 +12 +11 +12 +182 +182 +181 +182 +183 +182 +183 +182 +182 +184 +183 +183 +183 +181 +182 +181 +182 +183 +182 +181 +182 +182 +182 +182 +184 +13 +12 +10 +11 +9 +8 +11 +182 +183 +183 +182 +183 +182 +181 +182 +182 +183 +182 +182 +182 +182 +182 +184 +180 +181 +182 +183 +183 +182 +182 +182 +183 +13 +10 +10 +10 +9 +11 +10 +182 +182 +183 +182 +182 +182 +181 +180 +176 +183 +182 +182 +183 +181 +183 +183 +11 +11 +10 +11 +10 +10 +12 +183 +182 +182 +182 +180 +183 +181 +182 +184 +183 +179 +182 +181 +183 +183 +183 +182 +183 +182 +183 +182 +182 +180 +182 +182 +11 +10 +10 +11 +13 +11 +10 +183 +181 +182 +182 +183 +183 +182 +183 +185 +182 +183 +183 +183 +182 +182 +181 +179 +182 +182 +184 +183 +181 +183 +184 +180 +13 +9 +9 +10 +11 +10 +9 +182 +181 +182 +182 +184 +182 +183 +181 +183 +182 +181 +181 +181 +183 +184 +183 +183 +182 +181 +182 +182 +182 +183 +181 +182 +14 +10 +10 +8 +10 +10 +10 +181 +180 +183 +182 +183 +184 +182 +183 +182 +182 +181 +183 +183 +183 +182 +182 +182 +182 +182 +182 +178 +181 +182 +183 +181 +11 +11 +10 +10 +10 +10 +12 +183 +182 +182 +182 +181 +181 +182 +182 +184 +183 +182 +182 +182 +183 +183 +182 +182 +182 +181 +180 +180 +182 +182 +182 +182 +11 +10 +11 +11 +10 +9 +10 +182 +183 +182 +182 +182 +182 +182 +182 +180 +183 +182 +183 +183 +182 +182 +183 +182 +180 +182 +182 +183 +183 +184 +183 +184 +11 +10 +10 +10 +10 +10 +12 +183 +182 +183 +182 +181 +182 +182 +181 +182 +182 +182 +182 +183 +181 +182 +183 +182 +186 +184 +182 +183 +182 +185 +183 +182 +10 +10 +9 +10 +10 +11 +12 +183 +183 +182 +182 +181 +181 +182 +183 +185 +183 +182 +182 +183 +182 +183 +180 +181 +182 +182 +183 +182 +182 +182 +181 +182 +12 +11 +11 +9 +8 +10 +10 +182 +184 +182 +182 +182 +182 +182 +183 +183 +182 +182 +182 +181 +182 +182 +183 +183 +183 +183 +183 +182 +181 +182 +182 +180 +182 +183 +183 +184 +183 +183 +182 +182 +181 +12 +10 +11 +11 +10 +10 +11 +183 +182 +179 +183 +181 +182 +183 +181 +183 +182 +182 +182 +182 +182 +181 +182 +182 +182 +183 +182 +182 +182 +183 +184 +179 +13 +10 +10 +11 +10 +11 +10 +182 +182 +181 +182 +182 +182 +183 +182 +183 +183 +182 +182 +183 +183 +182 +182 +182 +182 +182 +181 +183 +181 +183 +183 +181 +10 +10 +10 +182 +183 +182 +183 +181 +182 +187 +182 +183 +183 +182 +181 +182 +181 +182 +182 +183 +183 +182 +182 +10 +11 +11 +10 +10 +10 +11 +182 +182 +182 +182 +183 +182 +182 +181 +181 +183 +183 +183 +182 +180 +180 +180 +182 +182 +182 +182 +182 +183 +184 +182 +183 +10 +9 +9 +10 +10 +12 +11 +183 +183 +181 +182 +181 +182 +182 +182 +182 +182 +183 +182 +182 +184 +182 +182 +182 +182 +182 +182 +182 +182 +181 +181 +182 +11 +10 +10 +11 +11 +10 +10 +182 +182 +182 +182 +182 +181 +181 +183 +182 +183 +183 +182 +181 +182 +182 +182 +181 +180 +182 +182 +183 +181 +181 +181 +183 +12 +11 +10 +11 +10 +11 +11 +182 +182 +183 +182 +182 +183 +181 +182 +182 +181 +182 +182 +183 +183 +182 +183 +177 +183 +182 +182 +181 +182 +182 +182 +183 +12 +10 +11 +10 +10 +12 +11 +186 +183 +183 +183 +185 +183 +186 +182 +181 +182 +182 +182 +183 +182 +182 +182 +182 +182 +182 +182 +183 +181 +182 +182 +182 +13 +13 +11 +11 +12 +10 +12 +181 +182 +182 +182 +182 +181 +181 +182 +182 +183 +182 +183 +184 +182 +184 +182 +182 +182 +183 +183 +184 +182 +181 +182 +182 +12 +10 +11 +11 +11 +10 +10 +182 +181 +181 +182 +182 +183 +184 +184 +182 +184 +181 +182 +182 +182 +183 +182 +182 +183 +182 +182 +182 +183 +182 +183 +182 +11 +11 +10 +10 +11 +10 +11 +184 +183 +184 +182 +182 +181 +181 +182 +182 +183 +183 +182 +182 +182 +182 +182 +182 +182 +183 +182 +183 +184 +184 +182 +179 +11 +10 +9 +12 +10 +11 +11 +184 +182 +182 +182 +183 +182 +181 +11 +9 +182 +183 +184 +183 +182 +182 +182 +183 +184 +182 +184 +182 +183 +182 +182 +183 +182 +183 +183 +182 +182 +182 +182 +182 +182 +13 +10 +10 +12 +10 +11 +12 +183 +182 +182 +182 +181 +182 +182 +182 +184 +184 +184 +183 +183 +181 +182 +182 +181 +182 +181 +182 +182 +183 +183 +183 +182 +11 +7 +9 +9 +10 +10 +11 +183 +183 +182 +182 +183 +183 +182 +184 +182 +181 +182 +183 +182 +181 +182 +182 +183 +182 +183 +9 +11 +11 +11 +183 +182 +182 +182 +182 +182 +184 +182 +179 +182 +182 +181 +182 +182 +183 +184 +182 +181 +182 +178 +181 +183 +182 +184 +182 +12 +11 +11 +10 +11 +11 +11 +182 +183 +182 +182 +179 +181 +183 +188 +183 +183 +182 +182 +181 +181 +182 +182 +184 +184 +184 +182 +181 +182 +183 +182 +181 +11 +9 +10 +9 +12 +11 +13 +183 +183 +181 +182 +182 +181 +182 +182 +181 +183 +182 +181 +181 +182 +182 +183 +182 +181 +182 +182 +183 +183 +182 +179 +182 +11 +11 +11 +10 +12 +12 +11 +184 +182 +182 +182 +182 +182 +183 +182 +181 +180 +182 +182 +182 +183 +182 +184 +183 +182 +182 +181 +182 +182 +182 +182 +182 +12 +10 +10 +10 +10 +11 +10 +182 +181 +182 +181 +182 +182 +182 +183 +183 +183 +183 +182 +180 +180 +182 +183 +183 +182 +182 +182 +182 +182 +181 +183 +183 +13 +12 +10 +9 +10 +10 +9 +181 +182 +182 +183 +185 +182 +182 +178 +182 +182 +181 +182 +182 +182 +182 +182 +183 +184 +182 +182 +182 +181 +182 +182 +182 +13 +11 +11 +13 +10 +12 +10 +182 +183 +181 +182 +183 +182 +178 +180 +182 +183 +183 +180 +182 +182 +181 +182 +181 +183 +182 +184 +182 +182 +182 +182 +182 +12 +9 +11 +10 +11 +11 +12 +182 +180 +182 +181 +182 +183 +182 +183 +183 +179 +182 +182 +182 +182 +183 +183 +185 +183 +183 +182 +183 +182 +182 +182 +184 +12 +12 +11 +10 +10 +10 +9 +183 +182 +183 +182 +182 +181 +182 +181 +182 +182 +184 +183 +182 +182 +182 +181 +183 +182 +182 +181 +181 +183 +181 +183 +183 +13 +10 +10 +10 +10 +183 +184 +183 +183 +11 +12 +10 +9 +10 +9 +9 +182 +183 +183 +182 +182 +182 +182 +183 +182 +182 +183 +182 +182 +182 +182 +181 +182 +183 +183 +182 +182 +183 +182 +180 +183 +11 +10 +10 +10 +10 +10 +11 +182 +183 +179 +181 +181 +182 +181 +176 +183 +183 +183 +183 +181 +182 +182 +182 +181 +184 +182 +182 +183 +183 +185 +182 +182 +12 +11 +10 +10 +10 +11 +9 +181 +182 +182 +185 +183 +183 +182 +180 +182 +182 +182 +181 +182 +182 +183 +184 +13 +11 +15 +12 +10 +11 +10 +181 +182 +183 +182 +183 +182 +183 +183 +183 +183 +182 +182 +182 +181 +183 +183 +183 +182 +182 +182 +182 +182 +183 +183 +182 +11 +11 +11 +10 +11 +11 +11 +184 +181 +183 +182 +182 +182 +183 +182 +183 +182 +183 +180 +180 +182 +182 +183 +186 +182 +181 +182 +182 +187 +182 +181 +182 +11 +14 +12 +10 +10 +11 +10 +182 +182 +182 +182 +183 +182 +183 +183 +182 +182 +180 +182 +182 +182 +182 +182 +184 +182 +183 +183 +182 +182 +182 +182 +183 +12 +10 +10 +10 +10 +9 +10 +182 +181 +180 +182 +183 +182 +182 +183 +182 +182 +184 +182 +183 +182 +181 +181 +183 +182 +182 +182 +183 +183 +181 +180 +181 +14 +9 +11 +11 +11 +13 +11 +183 +182 +184 +182 +182 +182 +180 +182 +182 +183 +183 +182 +182 +180 +182 +183 +182 +183 +183 +182 +182 +182 +182 +181 +182 +10 +11 +12 +11 +11 +10 +11 +182 +182 +183 +184 +182 +185 +184 +182 +182 +181 +183 +182 +182 +182 +182 +182 +181 +183 +182 +183 +183 +183 +183 +182 +182 +11 +10 +11 +10 +11 +11 +11 +184 +182 +184 +182 +182 +182 +181 +181 +181 +182 +182 +182 +182 +183 +182 +183 +183 +183 +183 +182 +182 +182 +180 +180 +182 +13 +12 +11 +11 +11 +12 +9 +182 +181 +182 +182 +182 +183 +182 +182 +183 +182 +183 +181 +181 +182 +181 +182 +182 +182 +181 +182 +186 +183 +181 +183 +182 +12 +11 +10 +11 +11 +11 +11 +182 +183 +182 +183 +182 +181 +182 +182 +180 +181 +182 +181 +181 +182 +183 +182 +183 +183 +182 +182 +181 +183 +182 +182 +182 +182 +183 +183 +182 +184 +182 +183 +182 +181 +12 +11 +10 +12 +10 +11 +11 +182 +183 +183 +180 +183 +182 +182 +182 +182 +183 +182 +182 +181 +182 +182 +182 +184 +183 +184 +183 +183 +181 +182 +182 +180 +12 +9 +11 +11 +11 +11 +10 +183 +182 +182 +180 +180 +182 +183 +184 +183 +182 +183 +181 +180 +182 +182 +182 +182 +182 +182 +183 +180 +181 +181 +183 +183 +11 +11 +10 +10 +10 +9 +11 +182 +183 +183 +182 +181 +182 +181 +183 +181 +183 +182 +183 +183 +184 +182 +184 +12 +9 +11 +9 +10 +11 +12 +182 +182 +181 +182 +182 +181 +181 +182 +183 +183 +183 +182 +183 +182 +181 +182 +183 +182 +181 +181 +182 +182 +181 +180 +181 +11 +10 +11 +10 +11 +13 +10 +182 +182 +183 +183 +183 +181 +181 +182 +180 +181 +181 +182 +184 +184 +183 +183 +182 +182 +181 +182 +183 +182 +183 +183 +183 +12 +10 +12 +11 +10 +11 +11 +182 +183 +182 +181 +182 +180 +180 +182 +182 +183 +184 +182 +181 +182 +182 +182 +183 +181 +183 +183 +182 +182 +184 +182 +182 +12 +11 +13 +11 +10 +10 +9 +181 +182 +182 +182 +182 +184 +182 +182 +182 +182 +183 +181 +182 +181 +183 +182 +183 +183 +182 +182 +184 +182 +181 +181 +182 +12 +11 +10 +11 +10 +10 +10 +182 +182 +182 +182 +183 +182 +184 +182 +181 +182 +181 +182 +183 +182 +183 +182 +183 +180 +180 +182 +183 +182 +182 +182 +181 +9 +11 +11 +10 +10 +10 +11 +182 +182 +183 +182 +182 +183 +181 +181 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +181 +182 +182 +182 +183 +183 +183 +10 +8 +11 +10 +11 +12 +11 +183 +183 +182 +182 +181 +182 +182 +182 +182 +182 +183 +183 +183 +184 +182 +185 +182 +181 +182 +182 +183 +183 +184 +182 +183 +11 +10 +10 +11 +11 +10 +8 +180 +183 +183 +183 +183 +182 +182 +182 +181 +182 +182 +182 +182 +182 +182 +183 +183 +182 +182 +182 +182 +182 +182 +183 +182 +12 +11 +11 +11 +11 +8 +9 +183 +182 +182 +182 +182 +181 +182 +182 +181 +183 +183 +183 +184 +183 +183 +185 +182 +181 +181 +182 +183 +182 +182 +182 +183 +180 +182 +181 +183 +182 +182 +183 +182 +182 +12 +10 +11 +10 +10 +11 +11 +182 +183 +182 +182 +182 +182 +182 +182 +182 +183 +184 +182 +184 +181 +182 +182 +181 +183 +182 +183 +184 +182 +182 +182 +181 +11 +10 +11 +11 +11 +10 +9 +182 +182 +182 +182 +182 +182 +183 +182 +182 +181 +182 +182 +182 +182 +181 +181 +181 +182 +183 +181 +182 +183 +182 +182 +181 +12 +183 +185 +182 +181 +182 +181 +182 +183 +183 +183 +183 +182 +181 +183 +183 +182 +184 +183 +183 +182 +182 +183 +12 +11 +11 +11 +12 +9 +11 +182 +183 +179 +183 +182 +183 +182 +184 +184 +183 +183 +182 +181 +183 +182 +182 +184 +183 +185 +181 +182 +182 +183 +185 +182 +11 +11 +11 +14 +11 +11 +10 +182 +185 +183 +181 +184 +182 +182 +181 +181 +182 +182 +182 +184 +182 +182 +183 +183 +183 +183 +182 +182 +183 +182 +182 +181 +11 +10 +11 +12 +12 +11 +10 +182 +181 +182 +182 +182 +183 +182 +183 +182 +181 +183 +182 +183 +182 +182 +182 +182 +182 +182 +180 +181 +182 +182 +184 +183 +12 +12 +11 +11 +10 +11 +10 +182 +182 +181 +182 +183 +183 +182 +184 +184 +183 +182 +181 +181 +181 +183 +182 +183 +179 +182 +184 +183 +180 +182 +181 +181 +13 +11 +11 +10 +10 +9 +11 +182 +182 +183 +181 +183 +182 +181 +182 +184 +182 +183 +182 +182 +184 +182 +182 +181 +184 +183 +184 +183 +182 +182 +182 +182 +11 +10 +10 +10 +10 +11 +10 +184 +183 +182 +182 +181 +181 +182 +182 +183 +183 +184 +182 +182 +182 +183 +182 +182 +182 +181 +181 +181 +183 +183 +183 +183 +12 +10 +10 +10 +11 +10 +12 +182 +184 +181 +182 +182 +182 +182 +183 +181 +179 +182 +182 +182 +183 +182 +183 +182 +182 +182 +182 +182 +183 +183 +183 +184 +12 +12 +11 +10 +11 +11 +11 +183 +182 +182 +183 +182 +182 +180 +182 +183 +183 +182 +181 +182 +182 +183 +182 +181 +183 +182 +183 +182 +183 +183 +182 +183 +12 +11 +11 +10 +10 +10 +10 +182 +182 +182 +11 +10 +8 +11 +10 +10 +183 +182 +183 +183 +183 +182 +182 +181 +181 +182 +182 +183 +183 +182 +182 +182 +182 +182 +182 +182 +182 +183 +182 +182 +182 +11 +9 +10 +11 +12 +12 +11 +183 +182 +182 +182 +184 +182 +182 +182 +182 +182 +181 +182 +182 +180 +186 +182 +183 +183 +183 +181 +182 +181 +182 +182 +181 +14 +10 +12 +11 +14 +11 +10 +182 +182 +182 +180 +182 +181 +180 +182 +182 +183 +182 +182 +182 +181 +182 +183 +183 +11 +11 +11 +10 +10 +10 +183 +182 +182 +181 +183 +184 +181 +182 +181 +182 +184 +182 +182 +181 +182 +179 +182 +181 +179 +182 +187 +182 +181 +182 +182 +8 +10 +9 +11 +10 +10 +9 +182 +182 +185 +182 +181 +181 +181 +183 +182 +183 +182 +183 +183 +180 +179 +182 +181 +182 +182 +183 +182 +183 +182 +182 +182 +12 +11 +11 +10 +10 +10 +10 +179 +179 +181 +182 +182 +181 +182 +182 +183 +184 +184 +184 +183 +182 +182 +181 +182 +181 +182 +183 +182 +182 +183 +182 +182 +11 +9 +11 +11 +10 +12 +11 +182 +182 +181 +181 +182 +182 +182 +181 +182 +182 +184 +184 +182 +182 +182 +182 +180 +182 +182 +182 +182 +182 +182 +182 +183 +11 +10 +9 +11 +11 +11 +12 +183 +183 +181 +181 +182 +183 +182 +182 +181 +181 +182 +182 +182 +183 +182 +184 +183 +182 +181 +182 +180 +181 +181 +182 +183 +14 +12 +10 +10 +11 +10 +12 +183 +183 +182 +182 +182 +183 +182 +182 +183 +183 +181 +180 +182 +182 +182 +183 +183 +183 +183 +181 +183 +182 +182 +182 +183 +11 +10 +10 +10 +11 +10 +10 +183 +183 +181 +183 +182 +180 +181 +182 +182 +183 +183 +182 +182 +182 +182 +183 +183 +182 +182 +183 +182 +182 +183 +182 +181 +11 +9 +10 +11 +11 +12 +12 +182 +182 +181 +181 +183 +182 +182 +183 +181 +181 +181 +182 +183 +183 +183 +182 +182 +181 +183 +182 +182 +183 +183 +182 +183 +12 +10 +11 +11 +11 +11 +10 +182 +182 +182 +182 +182 +181 +182 +182 +182 +182 +182 +181 +182 +182 +182 +182 +184 +183 +184 +183 +182 +182 +181 +183 +182 +12 +182 +182 +183 +182 +182 +182 +183 +183 +11 +11 +11 +9 +11 +10 +11 +181 +180 +182 +181 +181 +183 +182 +182 +182 +183 +182 +182 +182 +182 +182 +181 +183 +182 +183 +182 +182 +182 +182 +183 +183 +13 +11 +10 +10 +8 +9 +11 +182 +183 +183 +182 +182 +183 +182 +181 +182 +181 +182 +183 +183 +183 +182 +182 +181 +182 +182 +182 +183 +179 +183 +183 +182 +12 +10 +10 +10 +10 +10 +10 +182 +182 +182 +182 +183 +181 +182 +182 +182 +185 +182 +182 +183 +182 +183 +183 +13 +12 +10 +11 +10 +9 +11 +182 +183 +184 +184 +182 +183 +182 +183 +181 +182 +183 +183 +182 +182 +183 +183 +182 +182 +183 +181 +182 +182 +181 +182 +183 +12 +12 +10 +12 +11 +10 +11 +181 +183 +183 +183 +184 +182 +183 +184 +182 +184 +181 +181 +182 +182 +183 +181 +183 +184 +182 +182 +182 +182 +183 +181 +182 +11 +12 +11 +11 +10 +20 +9 +182 +182 +182 +182 +183 +182 +182 +182 +186 +181 +182 +182 +181 +180 +182 +183 +182 +181 +183 +182 +182 +182 +182 +181 +181 +11 +11 +14 +11 +13 +11 +11 +182 +181 +183 +183 +183 +183 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +185 +183 +181 +180 +182 +182 +11 +12 +10 +11 +11 +10 +10 +182 +183 +183 +183 +182 +182 +182 +182 +182 +183 +182 +182 +180 +181 +183 +182 +184 +183 +182 +182 +181 +181 +182 +182 +183 +12 +11 +11 +11 +11 +11 +7 +182 +182 +183 +182 +182 +183 +183 +183 +183 +182 +181 +182 +181 +182 +183 +184 +182 +183 +182 +182 +182 +182 +182 +180 +182 +10 +10 +10 +9 +12 +10 +11 +183 +183 +182 +183 +182 +181 +182 +182 +182 +181 +183 +183 +182 +182 +182 +182 +183 +183 +180 +182 +182 +182 +182 +182 +182 +12 +8 +10 +10 +10 +11 +10 +183 +184 +183 +184 +182 +183 +183 +180 +183 +183 +182 +181 +180 +180 +182 +182 +184 +184 +182 +182 +180 +182 +182 +182 +182 +10 +11 +11 +11 +10 +9 +10 +182 +181 +180 +185 +182 +181 +182 +182 +181 +183 +183 +182 +182 +182 +181 +182 +182 +183 +182 +181 +180 +180 +182 +183 +184 +182 +183 +182 +182 +183 +182 +182 +182 +182 +11 +11 +11 +11 +11 +11 +10 +182 +182 +182 +182 +182 +182 +181 +182 +182 +182 +183 +182 +182 +182 +182 +183 +183 +184 +183 +184 +182 +183 +181 +182 +181 +10 +11 +10 +8 +13 +11 +11 +182 +181 +181 +181 +182 +182 +182 +183 +181 +182 +182 +182 +180 +183 +182 +182 +183 +184 +181 +182 +182 +182 +180 +183 +182 +13 +12 +11 +10 +13 +10 +11 +181 +184 +183 +182 +183 +182 +181 +180 +179 +182 +182 +184 +182 +182 +181 +183 +13 +10 +10 +10 +11 +8 +12 +182 +182 +182 +182 +182 +182 +182 +182 +181 +182 +182 +181 +182 +182 +182 +182 +183 +181 +181 +183 +182 +183 +183 +182 +182 +17 +10 +12 +10 +9 +10 +11 +182 +183 +181 +182 +182 +182 +182 +182 +182 +183 +184 +182 +183 +181 +181 +183 +182 +183 +183 +183 +183 +182 +182 +182 +182 +12 +9 +11 +11 +10 +10 +10 +182 +183 +183 +184 +182 +180 +182 +182 +183 +181 +183 +182 +183 +184 +182 +182 +182 +182 +183 +182 +182 +182 +182 +181 +183 +12 +11 +11 +10 +11 +10 +11 +183 +182 +182 +182 +182 +182 +182 +183 +181 +182 +183 +182 +182 +182 +183 +182 +182 +183 +184 +182 +182 +182 +181 +182 +183 +12 +11 +12 +10 +12 +10 +11 +182 +181 +183 +182 +182 +182 +182 +183 +181 +181 +182 +182 +183 +182 +184 +182 +183 +182 +182 +184 +182 +182 +182 +183 +183 +12 +12 +9 +11 +11 +11 +14 +182 +184 +184 +182 +182 +181 +181 +182 +182 +183 +184 +184 +183 +183 +181 +183 +182 +181 +183 +181 +183 +182 +182 +183 +182 +11 +11 +11 +12 +12 +10 +10 +182 +182 +183 +182 +183 +182 +181 +182 +181 +183 +183 +182 +180 +181 +182 +182 +183 +184 +182 +184 +182 +182 +179 +181 +182 +12 +12 +11 +11 +11 +10 +10 +181 +181 +183 +182 +182 +182 +182 +182 +184 +182 +183 +182 +180 +182 +182 +183 +182 +182 +182 +182 +182 +181 +181 +182 +181 +12 +14 +12 +11 +11 +11 +11 +182 +182 +182 +183 +181 +182 +178 +182 +10 +182 +185 +182 +183 +183 +181 +183 +182 +182 +183 +182 +181 +183 +182 +181 +182 +181 +182 +184 +183 +182 +182 +182 +182 +182 +12 +11 +11 +10 +10 +11 +10 +181 +186 +181 +183 +185 +183 +183 +182 +180 +182 +182 +181 +182 +182 +181 +182 +183 +183 +182 +182 +182 +181 +181 +181 +183 +13 +11 +11 +10 +11 +9 +8 +182 +181 +182 +184 +183 +182 +182 +182 +182 +182 +182 +182 +182 +181 +179 +182 +182 +179 +182 +182 +181 +182 +184 +181 +182 +182 +183 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +183 +183 +182 +183 +183 +184 +183 +182 +182 +182 +182 +13 +10 +10 +11 +10 +10 +10 +182 +183 +184 +182 +183 +181 +181 +182 +181 +183 +182 +182 +183 +183 +182 +183 +182 +181 +183 +181 +182 +183 +182 +184 +182 +12 +11 +10 +10 +9 +11 +10 +182 +184 +181 +180 +182 +182 +181 +182 +181 +182 +182 +183 +183 +182 +182 +182 +183 +182 +183 +182 +183 +182 +182 +182 +181 +10 +11 +11 +10 +11 +11 +11 +182 +181 +183 +182 +183 +182 +182 +183 +182 +182 +182 +182 +183 +182 +182 +181 +180 +182 +181 +182 +182 +181 +182 +182 +183 +12 +11 +10 +10 +10 +11 +10 +181 +182 +181 +182 +182 +183 +183 +182 +183 +183 +182 +181 +182 +182 +182 +185 +183 +184 +183 +183 +182 +182 +180 +183 +182 +11 +11 +10 +11 +12 +11 +10 +182 +181 +182 +182 +182 +182 +182 +182 +183 +182 +182 +182 +183 +182 +184 +181 +182 +182 +181 +183 +182 +184 +183 +180 +183 +11 +11 +11 +9 +11 +10 +13 +183 +182 +181 +181 +179 +182 +183 +183 +183 +179 +182 +184 +182 +181 +183 +181 +183 +183 +183 +177 +183 +182 +182 +183 +184 +12 +11 +11 +10 +13 +10 +12 +182 +183 +181 +181 +184 +182 +181 +185 +181 +183 +183 +183 +181 +182 +182 +183 +183 +187 +181 +182 +183 +182 +186 +182 +183 +13 +10 +7 +10 +12 +11 +8 +178 +183 +182 +184 +183 +181 +182 +182 +182 +178 +182 +183 +182 +183 +182 +182 +182 +181 +183 +181 +184 +183 +182 +182 +182 +12 +9 +10 +9 +10 +11 +183 +183 +185 +13 +9 +8 +11 +6 +11 +11 +184 +183 +180 +182 +182 +182 +182 +183 +182 +183 +183 +179 +182 +182 +182 +182 +182 +182 +182 +183 +183 +181 +182 +183 +178 +10 +9 +11 +11 +12 +12 +10 +183 +181 +181 +183 +182 +184 +183 +184 +184 +182 +182 +182 +182 +183 +182 +183 +182 +182 +182 +182 +183 +183 +182 +181 +182 +11 +10 +11 +9 +11 +11 +10 +182 +182 +183 +181 +183 +182 +182 +183 +182 +182 +182 +182 +183 +183 +183 +182 +11 +10 +11 +11 +11 +11 +11 +182 +183 +181 +182 +182 +181 +181 +182 +181 +183 +183 +183 +182 +182 +182 +184 +183 +182 +182 +183 +182 +182 +182 +182 +182 +11 +10 +12 +11 +10 +9 +10 +182 +183 +183 +181 +182 +182 +182 +182 +183 +182 +185 +182 +184 +183 +182 +182 +182 +181 +181 +182 +182 +183 +183 +184 +183 +13 +9 +10 +10 +10 +11 +11 +181 +183 +183 +182 +189 +182 +183 +182 +182 +182 +183 +182 +182 +183 +183 +183 +181 +181 +183 +182 +182 +183 +182 +182 +182 +12 +10 +10 +11 +10 +10 +10 +185 +182 +183 +183 +182 +186 +181 +180 +182 +181 +180 +184 +182 +183 +182 +184 +182 +182 +182 +182 +184 +183 +182 +182 +182 +11 +11 +11 +11 +12 +10 +12 +182 +182 +181 +181 +183 +183 +183 +183 +182 +183 +181 +181 +183 +182 +182 +182 +184 +183 +184 +183 +184 +183 +184 +182 +181 +12 +9 +11 +12 +11 +10 +8 +182 +183 +183 +183 +184 +182 +182 +182 +181 +183 +183 +182 +183 +183 +182 +183 +183 +182 +182 +182 +182 +182 +182 +182 +183 +12 +10 +11 +11 +8 +11 +10 +181 +181 +182 +183 +182 +183 +183 +183 +182 +181 +182 +183 +183 +183 +182 +182 +182 +182 +182 +181 +181 +183 +182 +182 +181 +13 +10 +11 +10 +9 +11 +10 +183 +183 +182 +183 +182 +182 +182 +182 +182 +182 +183 +183 +183 +182 +182 +182 +182 +184 +182 +182 +184 +182 +184 +182 +181 +11 +11 +11 +10 +11 +11 +10 +182 +183 +182 +184 +182 +182 +182 +182 +181 +180 +183 +183 +183 +183 +183 +182 +182 +182 +181 +179 +182 +182 +183 +182 +182 +182 +181 +182 +182 +182 +183 +184 +183 +184 +12 +10 +10 +10 +10 +10 +10 +181 +182 +182 +182 +182 +182 +182 +182 +183 +184 +180 +183 +181 +181 +182 +182 +183 +183 +182 +182 +181 +182 +182 +181 +182 +11 +10 +10 +11 +11 +12 +10 +184 +182 +181 +181 +181 +182 +184 +183 +183 +182 +182 +181 +182 +183 +182 +182 +184 +184 +183 +182 +182 +181 +182 +182 +182 +11 +11 +11 +11 +12 +11 +9 +183 +181 +182 +182 +183 +182 +185 +183 +183 +182 +181 +182 +182 +183 +183 +182 +12 +9 +10 +11 +11 +11 +12 +183 +182 +180 +183 +183 +183 +183 +182 +182 +181 +182 +182 +182 +182 +182 +183 +182 +179 +183 +182 +182 +182 +182 +182 +184 +12 +11 +12 +11 +12 +10 +11 +183 +182 +183 +183 +182 +182 +182 +183 +180 +183 +180 +185 +182 +183 +182 +182 +183 +182 +183 +182 +183 +183 +185 +183 +184 +12 +10 +10 +10 +11 +11 +12 +183 +182 +182 +181 +182 +181 +183 +182 +182 +182 +184 +180 +182 +182 +183 +183 +182 +183 +181 +181 +183 +182 +183 +182 +180 +12 +10 +8 +9 +11 +11 +11 +183 +181 +182 +181 +183 +183 +182 +183 +182 +182 +183 +182 +183 +183 +182 +182 +183 +184 +183 +184 +181 +183 +182 +182 +183 +12 +10 +9 +10 +10 +10 +12 +183 +183 +183 +181 +181 +181 +182 +183 +183 +183 +185 +182 +183 +182 +182 +182 +183 +181 +180 +182 +182 +181 +182 +182 +182 +12 +11 +10 +11 +11 +11 +12 +182 +183 +182 +182 +182 +182 +182 +182 +183 +182 +181 +182 +184 +182 +183 +181 +181 +182 +180 +183 +183 +183 +183 +182 +183 +9 +8 +11 +10 +11 +10 +11 +182 +181 +182 +182 +183 +182 +183 +182 +182 +182 +183 +184 +182 +182 +182 +182 +182 +181 +182 +182 +184 +182 +182 +182 +183 +13 +12 +11 +10 +10 +11 +10 +185 +183 +184 +183 +184 +182 +184 +182 +182 +182 +181 +182 +182 +182 +182 +182 +181 +182 +182 +182 +182 +182 +182 +182 +182 +12 +11 +11 +12 +11 +11 +10 +182 +182 +182 +182 +183 +182 +182 +182 +182 +180 +182 +182 +182 +183 +182 +183 +182 +182 +182 +182 +182 +182 +182 +184 +183 +184 +185 +183 +184 +182 +181 +181 +181 +183 +12 +11 +10 +12 +11 +10 +10 +182 +182 +181 +182 +182 +182 +181 +185 +182 +182 +183 +182 +183 +182 +182 +182 +181 +180 +182 +182 +183 +182 +183 +183 +182 +14 +10 +11 +10 +9 +11 +10 +182 +183 +183 +183 +182 +181 +183 +182 +182 +182 +182 +183 +182 +182 +182 +181 +182 +182 +182 +182 +181 +182 +183 +183 +183 +11 +10 +9 +9 +182 +183 +183 +181 +181 +183 +182 +182 +183 +183 +183 +183 +182 +182 +181 +182 +182 +182 +182 +12 +11 +10 +8 +10 +10 +10 +183 +182 +182 +182 +183 +182 +182 +182 +183 +182 +183 +186 +181 +184 +182 +181 +181 +181 +183 +183 +183 +182 +183 +182 +182 +12 +11 +10 +11 +11 +10 +10 +180 +183 +183 +181 +181 +182 +182 +182 +181 +182 +183 +183 +184 +183 +183 +182 +182 +183 +182 +182 +182 +182 +182 +182 +182 +12 +10 +11 +8 +9 +11 +11 +182 +184 +182 +183 +185 +182 +182 +182 +182 +179 +181 +183 +182 +183 +182 +183 +182 +182 +181 +183 +182 +183 +183 +183 +183 +11 +10 +8 +8 +10 +10 +11 +182 +183 +183 +182 +181 +181 +182 +182 +183 +181 +184 +183 +183 +183 +182 +182 +174 +180 +182 +182 +183 +183 +183 +183 +183 +11 +10 +11 +10 +10 +11 +10 +181 +182 +182 +183 +182 +182 +183 +181 +181 +182 +182 +182 +183 +183 +182 +182 +182 +181 +182 +181 +182 +181 +183 +183 +183 +12 +11 +10 +9 +11 +11 +11 +183 +183 +182 +181 +181 +182 +182 +183 +182 +182 +183 +183 +183 +182 +182 +181 +182 +182 +181 +182 +180 +183 +183 +181 +181 +12 +10 +10 +10 +10 +10 +11 +182 +183 +182 +183 +182 +182 +181 +181 +182 +183 +183 +183 +183 +182 +183 +183 +181 +182 +182 +183 +183 +182 +182 +182 +182 +12 +11 +11 +11 +11 +9 +11 +182 +183 +183 +185 +183 +184 +182 +181 +184 +181 +183 +183 +182 +183 +182 +182 +183 +182 +184 +182 +182 +183 +182 +183 +185 +12 +12 +10 +11 +11 +9 +11 +181 +183 +186 +183 +10 +11 +11 +11 +11 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +180 +180 +182 +182 +186 +183 +182 +182 +182 +182 +183 +182 +182 +182 +183 +11 +9 +10 +9 +10 +10 +11 +182 +182 +182 +182 +183 +183 +182 +182 +182 +182 +182 +181 +182 +183 +182 +183 +182 +179 +182 +181 +181 +183 +182 +181 +182 +12 +11 +10 +9 +10 +10 +11 +182 +182 +182 +182 +183 +182 +183 +183 +182 +180 +182 +182 +184 +183 +183 +182 +183 +181 +181 +183 +11 +11 +12 +183 +182 +182 +181 +181 +183 +183 +182 +182 +179 +183 +183 +181 +183 +182 +182 +182 +182 +183 +184 +185 +185 +184 +182 +181 +12 +11 +11 +11 +11 +10 +10 +181 +183 +181 +180 +182 +182 +183 +184 +182 +183 +182 +181 +183 +181 +182 +184 +183 +182 +183 +181 +183 +183 +183 +182 +182 +13 +13 +11 +11 +11 +9 +10 +182 +182 +184 +182 +183 +184 +182 +183 +182 +182 +182 +185 +182 +183 +182 +182 +182 +182 +182 +180 +179 +182 +183 +184 +183 +12 +11 +10 +10 +11 +11 +10 +183 +184 +182 +183 +181 +182 +183 +182 +182 +183 +182 +183 +181 +181 +182 +181 +183 +182 +182 +183 +181 +180 +181 +182 +182 +12 +11 +10 +9 +11 +11 +10 +182 +184 +182 +183 +181 +182 +182 +182 +181 +182 +181 +185 +182 +182 +183 +184 +180 +184 +182 +181 +182 +183 +183 +183 +182 +11 +11 +11 +11 +14 +10 +11 +182 +181 +182 +180 +183 +182 +183 +182 +182 +182 +182 +183 +183 +183 +182 +183 +182 +181 +182 +182 +184 +184 +183 +185 +181 +11 +9 +9 +12 +11 +11 +12 +182 +183 +182 +182 +183 +181 +182 +182 +182 +182 +185 +182 +183 +181 +180 +183 +182 +183 +183 +182 +181 +182 +185 +182 +182 +14 +12 +11 +11 +10 +8 +11 +183 +182 +183 +183 +181 +182 +182 +181 +182 +183 +183 +184 +182 +182 +182 +182 +183 +182 +183 +183 +182 +182 +182 +181 +182 +12 +13 +12 +12 +10 +9 +11 +183 +182 +183 +182 +182 +182 +183 +182 +182 +182 +183 +183 +183 +182 +183 +184 +182 +182 +181 +183 +182 +182 +183 +181 +180 +12 +10 \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/b5/b5d926b78c0ca46b2e63aa5ed1a2491f4225ecca.svn-base b/Old Matlab Interface/.svn/pristine/b5/b5d926b78c0ca46b2e63aa5ed1a2491f4225ecca.svn-base new file mode 100644 index 00000000..f86821bd --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/b5/b5d926b78c0ca46b2e63aa5ed1a2491f4225ecca.svn-base @@ -0,0 +1,6 @@ +a = 324567890; +tic +b = find(a>9999999,1, 'first'); +toc + +b; \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/ba/bab093ba2af354496638140bb68de7d473dd215c.svn-base b/Old Matlab Interface/.svn/pristine/ba/bab093ba2af354496638140bb68de7d473dd215c.svn-base new file mode 100644 index 00000000..50c1bb50 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/ba/bab093ba2af354496638140bb68de7d473dd215c.svn-base @@ -0,0 +1,26 @@ +function [cool_waveform] = undofrontend(temp_waveform,channel) + +Vcc = 3.3; +TOP = 128; +R4 = 75e3; +R3 = 1e6; +R2 = 1e3; +R1 = 1e3; + +global scope_gain_0 +global scope_gain_1 +global CH1_AC +global CH2_AC + +if channel == 1 + scope_gain = scope_gain_1 + AC_offset = CH2_AC * 1.65 +else + scope_gain = scope_gain_0 + AC_offset = CH1_AC * 1.65 +end + +cool_waveform = double(temp_waveform); + +cool_waveform = (cool_waveform * (Vcc/2)) / (R4/(R3+R4)*scope_gain*TOP) + Vcc*(R2/(R1+R2)); +cool_waveform = cool_waveform - AC_offset; \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/bd/bd7bf351de353254abead31a09f14e0d87a0633f.svn-base b/Old Matlab Interface/.svn/pristine/bd/bd7bf351de353254abead31a09f14e0d87a0633f.svn-base new file mode 100644 index 00000000..7dae927b --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/bd/bd7bf351de353254abead31a09f14e0d87a0633f.svn-base @@ -0,0 +1,18 @@ +function [] = setpsu(vo, ro); + +vcc = 3.3; +gain = 4.22; +vdrop = 0; +PER=256; + +psucal +vdrop = polyval(p_oc, vo) + polyval(p_ios,vo) - vo; + +CCA = ((vo + vdrop)*PER)/(vcc*gain); +CCA = uint16(CCA) + +mex_usb_send_control('40', 'a3', dec2hex(CCA), '0', '0', '0'); + +% driverLocation = 'c:\libusbk\examples\open-device\debug\win32'; +% command = [driverLocation '\open-device "03eb" "a000" "' command '" "' num2str(CCA) '" "NULL" "NULL" "NULL"'] +% system(command); \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/bd/bd9cd5c53b27c190f63541df132b4b29f54b9dd9.svn-base b/Old Matlab Interface/.svn/pristine/bd/bd9cd5c53b27c190f63541df132b4b29f54b9dd9.svn-base new file mode 100644 index 00000000..420e7d70 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/bd/bd9cd5c53b27c190f63541df132b4b29f54b9dd9.svn-base @@ -0,0 +1,5 @@ +USB_POOL_FREE(ovlPool); +pause(rand(1)); +mex_usb_init('03eb', 'a000') +[isoCtx_0, isoCtx_1, ovlkHandle_0, ovlkHandle_1, ovlPool, isoBuffer] = USB_ISO_INIT(usb_handle) + diff --git a/Old Matlab Interface/.svn/pristine/bd/bdf7a339b44a37e42b34c1561828dd031f37f95a.svn-base b/Old Matlab Interface/.svn/pristine/bd/bdf7a339b44a37e42b34c1561828dd031f37f95a.svn-base new file mode 100644 index 00000000..3b4d0f57 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/bd/bdf7a339b44a37e42b34c1561828dd031f37f95a.svn-base @@ -0,0 +1,8 @@ +function [] = setpsu_boost(vo, vi, r) + err = verr(vo, r) + D = 1 - vi/(vo+err) + if D>0.75 + error('PSU DUTY CYCLE TOO LARGE!!! ABORTING!!!') + end + D = uint16(D*255) + mex_usb_send_control('40', 'a3', dec2hex(D), '0', '0', '0'); diff --git a/Old Matlab Interface/.svn/pristine/c0/c08e2e1c5ccfc0f4c6ed2ba1fb5cde835ebf53b7.svn-base b/Old Matlab Interface/.svn/pristine/c0/c08e2e1c5ccfc0f4c6ed2ba1fb5cde835ebf53b7.svn-base new file mode 100644 index 00000000..50d5d46d --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/c0/c08e2e1c5ccfc0f4c6ed2ba1fb5cde835ebf53b7.svn-base @@ -0,0 +1,11 @@ +a = 1:100 +b = 101:200 + +for k = 1:100 + plot(1,1) +end +tic +hold on + plot(a,b) + stairs(a,b) +toc \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/c1/c16c7b18552b3fc8b2a52f6d5c6f5634ba03bcda.svn-base b/Old Matlab Interface/.svn/pristine/c1/c16c7b18552b3fc8b2a52f6d5c6f5634ba03bcda.svn-base new file mode 100644 index 00000000..ca0f7a9f --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/c1/c16c7b18552b3fc8b2a52f6d5c6f5634ba03bcda.svn-base @@ -0,0 +1,136 @@ +program opendevice; + +{$APPTYPE CONSOLE} + +uses + SysUtils, Classes, + libusbK in '..\libusbK.pas', + UExampleHelpers; +var + VID, PID : Integer; +procedure EvaluateCommandLine; +var + i : Integer; + s, s0,s1 : String; + n : Integer; +begin + for i := 1 to ParamCount do + begin + s := Uppercase(ParamStr(i)); //copy the whole current param string and convert to upper cases + s0 := Copy(s,1,4); // copy the first 4 signs + if (s0 = 'VID=') or + (s0 = 'PID=') then + begin // we got a vid or pid parm + s1 := Copy(s,5,MaxInt); // copy everything behind the '=' + if Copy(s1,1,2) = '0X' then // check the c-style hex notation + s1 := '$'+ Copy(s1,3,MaxInt); // replace by delphi hex-notation + n := StrToIntDef(s1,-1); // convert, place -1 on any convert error + if (s0 = 'VID=') then + VID := n + else if (s0 = 'PID=') then + PID := n; + end; + end; +end; +const + UsbPipeTypeString : array[USBD_PIPE_TYPE] of String = ( + 'Control', + 'Isochronous', + 'Bulk,', + 'Interrupt' + ); + +var + devlist : TStringList; + i,j,k : Integer; + devhandle : KUSB_HANDLE; + pipeinfo : WINUSB_PIPE_INFORMATION; +begin + WriteLn('OpenDevice test for LibusbK'); + WriteLn('Returns Pipe info for all devices, or limited to a given VID/PID pair'); + WriteLn('usage:'); + WriteLn('opendevice [VID=nnnn] [PID=nnnn]'); + WriteLn('VID and PID may use decimal or hexadecimal notation'); + VID := -1; + PID := -1; + EvaluateCommandLine; + if VID < 0 then + WriteLn('VID is not used!') + else + WriteLn('VID used '+Format('%d (0x%x',[VID,VID])); + if VID < 0 then + WriteLn('PID is not used!') + else + WriteLn('PID used '+Format('%d (0x%x',[PID,PID])); + devlist := TStringList.Create; + try + ListLibusbKDevices(devlist,VID,PID); + if devlist.Count <= 0 then + begin + WriteLn('Error: No device found!'); + Exit; + end; + for i := 0 to devlist.Count-1 do + begin + if UsbK_InitFromDevicePath(devlist[i],devhandle) then + begin + try + WriteLn('Opened device "'+devlist[i]+'"'); + j := 0; + while UsbK_SetCurrentAlternateSetting(devhandle,j) do + begin + WriteLn('Using AlternateSetting ',j); + k := 0; + while UsbK_QueryPipe(devhandle,j,k,pipeinfo) do + begin + WriteLn(Format(' PipeId=0x%2.2x PipeType=0x%2.2x ("%s") Interval=%u MaximumPacketSize=%u', + [pipeInfo.PipeId, Byte(pipeInfo.PipeType),UsbPipeTypeString[pipeInfo.PipeType], pipeInfo.Interval, pipeInfo.MaximumPacketSize])); + Inc(k); + end; + Inc(j); + end; + finally + UsbK_Free(devhandle); + end; + end + else + WriteLn('Error: can not open device "'+devlist[i]+'"'); + end; + finally + devlist.Free; + end; +(* Example output +OpenDevice test for LibusbK +Returns Pipe info for all devices, or limited to a given VID/PID pair +usage: +opendevice [VID=nnnn] [PID=nnnn] +VID and PID may use decimal or hexadecimal notation +VID is not used! +PID is not used! +Opened device "\\?\USB#Vid_04b4&Pid_8613#6&1b8c4f52&0&1#{53373f62-b5e4-d526-b292 +-f86533b3e7df}" +Using AlternateSetting 0 +Using AlternateSetting 1 + PipeId=0x01 PipeType=0x02 ("Bulk,") Interval=0 MaximumPacketSize=512 + PipeId=0x81 PipeType=0x02 ("Bulk,") Interval=0 MaximumPacketSize=512 + PipeId=0x02 PipeType=0x02 ("Bulk,") Interval=0 MaximumPacketSize=512 + PipeId=0x04 PipeType=0x02 ("Bulk,") Interval=0 MaximumPacketSize=512 + PipeId=0x86 PipeType=0x02 ("Bulk,") Interval=0 MaximumPacketSize=512 + PipeId=0x88 PipeType=0x02 ("Bulk,") Interval=0 MaximumPacketSize=512 +Using AlternateSetting 2 + PipeId=0x01 PipeType=0x03 ("Interrupt") Interval=1 MaximumPacketSize=64 + PipeId=0x81 PipeType=0x03 ("Interrupt") Interval=1 MaximumPacketSize=64 + PipeId=0x02 PipeType=0x03 ("Interrupt") Interval=1 MaximumPacketSize=512 + PipeId=0x04 PipeType=0x02 ("Bulk,") Interval=0 MaximumPacketSize=512 + PipeId=0x86 PipeType=0x03 ("Interrupt") Interval=1 MaximumPacketSize=512 + PipeId=0x88 PipeType=0x02 ("Bulk,") Interval=0 MaximumPacketSize=512 +Using AlternateSetting 3 + PipeId=0x01 PipeType=0x03 ("Interrupt") Interval=1 MaximumPacketSize=64 + PipeId=0x81 PipeType=0x03 ("Interrupt") Interval=1 MaximumPacketSize=64 + PipeId=0x02 PipeType=0x01 ("Isochronous") Interval=1 MaximumPacketSize=512 + PipeId=0x04 PipeType=0x02 ("Bulk,") Interval=0 MaximumPacketSize=512 + PipeId=0x86 PipeType=0x01 ("Isochronous") Interval=1 MaximumPacketSize=512 + PipeId=0x88 PipeType=0x02 ("Bulk,") Interval=0 MaximumPacketSize=512} +*) + +end. diff --git a/Old Matlab Interface/.svn/pristine/c5/c55b35eb191bca8e58fbab3b4e69302308bdd0c3.svn-base b/Old Matlab Interface/.svn/pristine/c5/c55b35eb191bca8e58fbab3b4e69302308bdd0c3.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..9188b95dbcbd750c1a906eb6720172d93b313a68 GIT binary patch literal 7168 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 AZ~y=R literal 0 HcmV?d00001 diff --git a/Old Matlab Interface/.svn/pristine/c5/c59f20e7cc2d121a4c984a45dd615e2cc84be5a7.svn-base b/Old Matlab Interface/.svn/pristine/c5/c59f20e7cc2d121a4c984a45dd615e2cc84be5a7.svn-base new file mode 100644 index 00000000..db006a3f --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/c5/c59f20e7cc2d121a4c984a45dd615e2cc84be5a7.svn-base @@ -0,0 +1,92 @@ +%mex USB_ISO_LOOP.c -Iincludes -llibusbK -Lbin\lib\amd64 +%clear all + +global usb_handle +global scope_gain +global scope_window_time +global scope_window_max +global scope_window_min +global scope_mode +global gui_scope_running + +global gui_hori_cursor_a_pos +global gui_hori_cursor_b_pos +global gui_vert_cursor_a_pos +global gui_vert_cursor_b_pos +global gui_cursor_mode +global saved_waveform_ch1 +global saved_waveform_ch2 + +dotheplot + +if ~length(usb_handle) + warning('USB Handle not initialised. Initialising!') + mex_usb_init('03eb', 'a000') +end + +[isoCtx_0, isoCtx_1, ovlkHandle_0, ovlkHandle_1, ovlPool, isoBuffer] = USB_ISO_INIT(usb_handle) + +refreshrate = 4; +refreshrate_temp = refreshrate; + +if(isempty(max_n)) + max_n = 10 +end +saved_waveform_ch1 = int8([]); + +if isempty(scope_mode) + error('You didn''t set the scope mode!'); +end + +if isempty(scope_window_time) + error('You didn''t set the window time (x) value!'); +end + +if (scope_window_time < 1/375000) + error('Scope window size is too small!'); +end + +if(scope_mode==0) + if isempty(scope_gain) + error('You didn''t set the gain!'); + end + + if isempty(scope_window_min) + error('You didn''t set the minimum window voltage value!'); + end + + if isempty(scope_window_max) + error('You didn''t set the maximum window voltage value!'); + end +end + +dropped_packets = 0; +waveform_exists = 0; + +for n=1:max_n + %[transfer_contents_0] = USB_ISO_LOOP(usb_handle, isoCtx_0, ovlkHandle_0, ovlPool, isoBuffer, uint8(0)); + [transfer_contents_0, libk_error] = USB_ISO_LOOP(usb_handle, isoCtx_0, ovlkHandle_0, ovlPool, isoBuffer, uint8(0)); + %keep_in_sync + displaypacket(transfer_contents_0) + if(gui_scope_running) + updatescopeaxes + else + plotcursors + drawnow + end + + %[transfer_contents_1] = USB_ISO_LOOP(usb_handle, isoCtx_1, ovlkHandle_1, ovlPool, isoBuffer, uint8(1)); + [transfer_contents_1, libk_error] = USB_ISO_LOOP(usb_handle, isoCtx_1, ovlkHandle_1, ovlPool, isoBuffer, uint8(1)); + %keep_in_sync + displaypacket(transfer_contents_1) + if(gui_scope_running) + updatescopeaxes + else + plotcursors + drawnow + end +end + +clear all +max_n = 2000 +mex_usb_iso_loop \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/c7/c73ee86a3151a5652537a0cdf85eb2544c2ac2fc.svn-base b/Old Matlab Interface/.svn/pristine/c7/c73ee86a3151a5652537a0cdf85eb2544c2ac2fc.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..e0e93271a5c0253e3782bdc22680be47d04f762f GIT binary patch literal 7680 zcmeHMdvH|M89$q3XzPs;jdn&TqPM?u_il*K zvD2CUBPX2my}$3A?>zU?a@zpOCxjHBY8oMX0C{og?bkOd#1~dRe<69c=+J^aCh^dM zj_z&j24b@Zx<9XQf?>jy8Chz0dR)LF%aUe{#RNGInzQF)qp4rdh?hE~&)Rm^Zc7`k3LC(acY z_a`UhAXs`%kQ-g^@^d;IbLo0gBo0MAM;pQ9ap$AXDlS5n&mzyGUy=cuTJNyXl;SAA zmG-^s^0A^?&Bu;W_TjL{;p7Vma2WxTy3f(64gwL=9!DKb+oN*`p=?C6Tdwcn72A-yIi9nDJ1)y;BZ2&54IN;Fw447&Ov^WDktZB|TgVAvY%&Za4m;?g@ajLI!ByGJ(_cgA* z0@7pKEkcuZIJzklc>+9+PLT~!KGe6V{XHfch|aQ>CDeaB3&0 zy*!y}1eklzHnfzTrfiH}HEyf)pg+%*&ZT`X<@vOcohv`JJtxl9cCOTts<-w4O?Nn) z-n6^Oo%ZFa)w=0XOaM(4sz?|dt#`CirZ_gzzWpx$(5O~jh@e{aH1@4lU9970b^M=t zJEFIF;E#^F+A;lt-Z#yD69n8b8`tdfIG!@kzd{FA4*DmO=5(`ZY9Z}gNYs~cdSHAS zfckV6e;YT7`Y7<)47wuRJ~TQ?*?yYp#7gTfqp99V{;W)E6ma4|UZVVivKF{eaTw`2tK@=|muN@e=>$$C z%|5EjtcO78D*Hf-4Id}XV#BoZYmt2{vNxxG>SLpt{TM`=eS#aL%)7Wj%KQjGs_A=Z zz5OR`{crM4?r6FP^yE?CwVBD+0Q%0DZ2iMPX7a?|r|k2Ys)uJIQ`f-(GG#UrRSB{` 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 lxHy;38(ZD2ZV&%W(b;Jr{|ilo?Ej%SAHyV`FW + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {6A4CD32B-560F-4967-9112-37B3FD5699CC} + Exe + Properties + Xfer.UsbStream + Xfer.UsbStream + v2.0 + 512 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + true + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + libusbK.cs + + + Common\BenchmarkTestDevice.cs + + + Common\HiPerfTimer.cs + + + Common\TestParameters.cs + + + + + + + + False + .NET Framework Client Profile + false + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + False + .NET Framework 3.5 SP1 + false + + + + + \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/c9/c911569ea160a4acb105a087c4c99a8133cc6ad2.svn-base b/Old Matlab Interface/.svn/pristine/c9/c911569ea160a4acb105a087c4c99a8133cc6ad2.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..5cbcae5a6e91a38d14dce3f789ab3508dc7c06b2 GIT binary patch literal 9216 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 +// All rights reserved. +// +// AssemblyInfo.cs +// +// Created: 03.05.2012 +// Last Updated: 03.05.2012 +// +// 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. +// +// 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 TRAVIS LEE ROBINSON +// 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. +#endregion + + +using System.Reflection; +using System.Runtime.InteropServices; + + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. + +[assembly: AssemblyTitle("Xfer.Async")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("Xfer.Async")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2012")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. + +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM + +[assembly: Guid("bfe3ff24-a3d7-4ccc-b010-df007284dc6a")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] + +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/c9/c9fc3943bb5e40c85ade2f8bd88314f327f40ec7.svn-base b/Old Matlab Interface/.svn/pristine/c9/c9fc3943bb5e40c85ade2f8bd88314f327f40ec7.svn-base new file mode 100644 index 00000000..2a030327 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/c9/c9fc3943bb5e40c85ade2f8bd88314f327f40ec7.svn-base @@ -0,0 +1,6 @@ +mex USB_INIT.c -Iincludes -llibusbK -Lbin\lib\amd64 +mex USB_CTRL_SEND.c -Iincludes -llibusbK -Lbin\lib\amd64 +mex USB_ISO_INIT.c -Iincludes -llibusbK -Lbin\lib\amd64 +mex USB_ISO_LOOP.c -Iincludes -llibusbK -Lbin\lib\amd64 +mex USB_POOL_FREE.c -Iincludes -llibusbK -Lbin\lib\amd64 + diff --git a/Old Matlab Interface/.svn/pristine/ca/ca5efeb46a4701590fffc385c7cc9f0f693389fc.svn-base b/Old Matlab Interface/.svn/pristine/ca/ca5efeb46a4701590fffc385c7cc9f0f693389fc.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..8b904fc570ae13dd357f83a11ffaa1e6bec3950b GIT binary patch literal 9728 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 literal 0 HcmV?d00001 diff --git a/Old Matlab Interface/.svn/pristine/cb/cbd188d48e4202497c0f72bd16bb87da5ef6f2d1.svn-base b/Old Matlab Interface/.svn/pristine/cb/cbd188d48e4202497c0f72bd16bb87da5ef6f2d1.svn-base new file mode 100644 index 00000000..a266b826 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/cb/cbd188d48e4202497c0f72bd16bb87da5ef6f2d1.svn-base @@ -0,0 +1,118 @@ +namespace Hot.Plug.Detect.GUI +{ + partial class Form1 + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.dgvDevices = new System.Windows.Forms.DataGridView(); + this.label1 = new System.Windows.Forms.Label(); + this.colSymbolicLink = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colDeviceDesc = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colInstanceID = new System.Windows.Forms.DataGridViewTextBoxColumn(); + ((System.ComponentModel.ISupportInitialize)(this.dgvDevices)).BeginInit(); + this.SuspendLayout(); + // + // dgvDevices + // + this.dgvDevices.AllowUserToAddRows = false; + this.dgvDevices.AllowUserToDeleteRows = false; + this.dgvDevices.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.dgvDevices.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dgvDevices.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.colSymbolicLink, + this.colDeviceDesc, + this.colInstanceID}); + this.dgvDevices.Location = new System.Drawing.Point(12, 38); + this.dgvDevices.MultiSelect = false; + this.dgvDevices.Name = "dgvDevices"; + this.dgvDevices.ReadOnly = true; + this.dgvDevices.RowHeadersVisible = false; + this.dgvDevices.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.dgvDevices.ShowEditingIcon = false; + this.dgvDevices.Size = new System.Drawing.Size(419, 179); + this.dgvDevices.TabIndex = 0; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(12, 22); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(104, 13); + this.label1.TabIndex = 1; + this.label1.Text = "Connected Devices:"; + // + // colSymbolicLink + // + this.colSymbolicLink.HeaderText = "SymbolicLink"; + this.colSymbolicLink.Name = "colSymbolicLink"; + this.colSymbolicLink.ReadOnly = true; + this.colSymbolicLink.Visible = false; + // + // colDeviceDesc + // + this.colDeviceDesc.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.colDeviceDesc.HeaderText = "Name"; + this.colDeviceDesc.Name = "colDeviceDesc"; + this.colDeviceDesc.ReadOnly = true; + // + // colInstanceID + // + this.colInstanceID.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.colInstanceID.HeaderText = "Instance ID"; + this.colInstanceID.Name = "colInstanceID"; + this.colInstanceID.ReadOnly = true; + // + // Form1 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(443, 229); + this.Controls.Add(this.label1); + this.Controls.Add(this.dgvDevices); + this.Name = "Form1"; + this.Text = "Hot Plug Detection GUI Example"; + this.Load += new System.EventHandler(this.Form1_Load); + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Form1_FormClosing); + ((System.ComponentModel.ISupportInitialize)(this.dgvDevices)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.DataGridView dgvDevices; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.DataGridViewTextBoxColumn colSymbolicLink; + private System.Windows.Forms.DataGridViewTextBoxColumn colDeviceDesc; + private System.Windows.Forms.DataGridViewTextBoxColumn colInstanceID; + + } +} + diff --git a/Old Matlab Interface/.svn/pristine/ce/ce10b80357bb5082e5834e41bfc9d842f114f45b.svn-base b/Old Matlab Interface/.svn/pristine/ce/ce10b80357bb5082e5834e41bfc9d842f114f45b.svn-base new file mode 100644 index 00000000..4ca6bb25 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/ce/ce10b80357bb5082e5834e41bfc9d842f114f45b.svn-base @@ -0,0 +1,106 @@ +%mex USB_ISO_LOOP.c -Iincludes -llibusbK -Lbin\lib\amd64 +%clear all + +global usb_handle +global scope_gain_0 +global scope_gain_1 +global scope_window_time +global scope_window_max +global scope_window_min +global scope_mode +global gui_scope_running + +global gui_hori_cursor_a_pos +global gui_hori_cursor_b_pos +global gui_vert_cursor_a_pos +global gui_vert_cursor_b_pos +global gui_cursor_mode +global saved_waveform_ch1 +global saved_waveform_ch2 + +global refreshrate +global refreshrate_temp +global waveform_exists + +global trigger + +trigger = struct('l', 0, 'h', 0, 'state', 0, 'begin', 1, 'enabled', 0); + +dotheplot + +if ~length(usb_handle) + warning('USB Handle not initialised. Initialising!') + mex_usb_init('03eb', 'a000') +end + +[stm_handle] = USB_ISO_INIT(usb_handle) + +refreshrate = 4; +refreshrate_temp = refreshrate; + +if(isempty(max_n)) + max_n = 10 +end +saved_waveform_ch1 = int8([]); + +if isempty(scope_mode) + error('You didn''t set the scope mode!'); +end + +if isempty(scope_window_time) + error('You didn''t set the window time (x) value!'); +end + +if (scope_window_time < 1/375000) + error('Scope window size is too small!'); +end + +if(scope_mode==0) + if isempty(scope_gain_0) || isempty(scope_gain_1) + error('You didn''t set the gain!'); + end + + if isempty(scope_window_min) + error('You didn''t set the minimum window voltage value!'); + end + + if isempty(scope_window_max) + error('You didn''t set the maximum window voltage value!'); + end +end + +dropped_packets = 0; +if(isempty(waveform_exists)) + waveform_exists = 0; +end + +sem_avail = 0; +timer_30ms = timer ('TimerFcn', 'sem_avail = sem_avail + 1;', 'Period', 30e-3, 'ExecutionMode', 'fixedRate'); +start(timer_30ms); + +for n=1:max_n + %[transfer_contents_0] = USB_ISO_LOOP(usb_handle, isoCtx_0, ovlkHandle_0, ovlPool, isoBuffer, uint8(0)); + + while(sem_avail==0) + pause(0); + %timer_30ms; + end + sem_avail = sem_avail - 1; + [transfer_contents_0, libk_error] = USB_ISO_LOOP(usb_handle, stm_handle); + keep_in_sync + displaypacket(transfer_contents_0) + updatescopeaxes + + %[transfer_contents_1] = USB_ISO_LOOP(usb_handle, isoCtx_1, ovlkHandle_1, ovlPool, isoBuffer, uint8(1)); + + while(sem_avail==0) + pause(0.001); + end + sem_avail = sem_avail - 1; + [transfer_contents_1, libk_error] = USB_ISO_LOOP(usb_handle, stm_handle); + keep_in_sync + displaypacket(transfer_contents_1) + updatescopeaxes +end + +crash_recover \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/cf/cfed60fdfa127afcb252a0507c939b2e6d710f4a.svn-base b/Old Matlab Interface/.svn/pristine/cf/cfed60fdfa127afcb252a0507c939b2e6d710f4a.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..e343618943e9694cd66f4a4da0ca16c8d4f5cdf4 GIT binary patch literal 9728 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 literal 0 HcmV?d00001 diff --git a/Old Matlab Interface/.svn/pristine/d0/d050cf2300644013dd8cb6702d7131635f651fd2.svn-base b/Old Matlab Interface/.svn/pristine/d0/d050cf2300644013dd8cb6702d7131635f651fd2.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..f20f18dea31b67c2b55a1b21508882403a6be68a GIT binary patch literal 1427362 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%0DaICza6FU$L{#*=rB6OXCZ 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 literal 0 HcmV?d00001 diff --git a/Old Matlab Interface/.svn/pristine/d2/d25c3322121da7330cfaba960c9517632a0ff944.svn-base b/Old Matlab Interface/.svn/pristine/d2/d25c3322121da7330cfaba960c9517632a0ff944.svn-base new file mode 100644 index 00000000..a3f6e422 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/d2/d25c3322121da7330cfaba960c9517632a0ff944.svn-base @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Hot.Plug.Detect.GUI")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("Hot.Plug.Detect.GUI")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2012")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("c3a55330-daa9-4501-8852-8ec0dcd33cc5")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Old Matlab Interface/.svn/pristine/d3/d35431714a5bc9b48fad9121b319978f5f34bed8.svn-base b/Old Matlab Interface/.svn/pristine/d3/d35431714a5bc9b48fad9121b319978f5f34bed8.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..ffc7c41c304366375d648c90f0223c934fdbcf46 GIT binary patch literal 5059 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 ZT?CSPCMX}dzC;dxO6p4x001Y)F;D=%74`rC literal 0 HcmV?d00001 diff --git a/Old Matlab Interface/.svn/pristine/d6/d6cabc27537ccaf079a2064ef3b96519b25f6c85.svn-base b/Old Matlab Interface/.svn/pristine/d6/d6cabc27537ccaf079a2064ef3b96519b25f6c85.svn-base new file mode 100644 index 00000000..5ad95774 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/d6/d6cabc27537ccaf079a2064ef3b96519b25f6c85.svn-base @@ -0,0 +1,87 @@ +%mex USB_ISO_LOOP.c -Iincludes -llibusbK -Lbin\lib\amd64 +%clear all + +global usb_handle +global scope_gain_0 +global scope_gain_1 +global scope_window_time +global scope_window_max +global scope_window_min +global scope_mode +global gui_scope_running + +global gui_hori_cursor_a_pos +global gui_hori_cursor_b_pos +global gui_vert_cursor_a_pos +global gui_vert_cursor_b_pos +global gui_cursor_mode +global saved_waveform_ch1 +global saved_waveform_ch2 + +global refreshrate +global refreshrate_temp +global waveform_exists + +dotheplot + +if ~length(usb_handle) + warning('USB Handle not initialised. Initialising!') + mex_usb_init('03eb', 'a000') +end + +[isoCtx_0, isoCtx_1, ovlkHandle_0, ovlkHandle_1, ovlPool, isoBuffer] = USB_ISO_INIT(usb_handle) + +refreshrate = 4; +refreshrate_temp = refreshrate; + +if(isempty(max_n)) + max_n = 10 +end +saved_waveform_ch1 = int8([]); + +if isempty(scope_mode) + error('You didn''t set the scope mode!'); +end + +if isempty(scope_window_time) + error('You didn''t set the window time (x) value!'); +end + +if (scope_window_time < 1/375000) + error('Scope window size is too small!'); +end + +if(scope_mode==0) + if isempty(scope_gain_0) || isempty(scope_gain_1) + error('You didn''t set the gain!'); + end + + if isempty(scope_window_min) + error('You didn''t set the minimum window voltage value!'); + end + + if isempty(scope_window_max) + error('You didn''t set the maximum window voltage value!'); + end +end + +dropped_packets = 0; +if(isempty(waveform_exists)) + waveform_exists = 0; +end + +for n=1:max_n + %[transfer_contents_0] = USB_ISO_LOOP(usb_handle, isoCtx_0, ovlkHandle_0, ovlPool, isoBuffer, uint8(0)); + [transfer_contents_0, libk_error] = USB_ISO_LOOP(usb_handle, isoCtx_0, ovlkHandle_0, ovlPool, isoBuffer, uint8(0)); + keep_in_sync + displaypacket(transfer_contents_0) + updatescopeaxes + + %[transfer_contents_1] = USB_ISO_LOOP(usb_handle, isoCtx_1, ovlkHandle_1, ovlPool, isoBuffer, uint8(1)); + [transfer_contents_1, libk_error] = USB_ISO_LOOP(usb_handle, isoCtx_1, ovlkHandle_1, ovlPool, isoBuffer, uint8(1)); + keep_in_sync + displaypacket(transfer_contents_1) + updatescopeaxes +end + +crash_recover \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/da/da39a3ee5e6b4b0d3255bfef95601890afd80709.svn-base b/Old Matlab Interface/.svn/pristine/da/da39a3ee5e6b4b0d3255bfef95601890afd80709.svn-base new file mode 100644 index 00000000..e69de29b diff --git a/Old Matlab Interface/.svn/pristine/da/da866910c208578c2c480996b8f954aa1ab590a1.svn-base b/Old Matlab Interface/.svn/pristine/da/da866910c208578c2c480996b8f954aa1ab590a1.svn-base new file mode 100644 index 00000000..4d5d74c2 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/da/da866910c208578c2c480996b8f954aa1ab590a1.svn-base @@ -0,0 +1,63 @@ +#region Copyright(c) Travis Robinson + +// Copyright (c) 2011-2012 Travis Robinson +// All rights reserved. +// +// List.Devices +// +// Last Updated: 03.08.2012 +// +// 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. +// +// 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 TRAVIS LEE ROBINSON +// 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. + +#endregion + +using System; +using libusbK; + +namespace List.Devices +{ + internal class Program + { + private static void Main() + { + int deviceIndex = 0; + int deviceCount = 0; + KLST_DEVINFO_HANDLE deviceInfo; + LstK lst = new LstK(KLST_FLAG.NONE); + + lst.Count(ref deviceCount); + while (lst.MoveNext(out deviceInfo)) + { + // Write some information about the device. + string displayLine = String.Format("{0} of {1}: {2}", + ++deviceIndex, + deviceCount, + deviceInfo.DeviceDesc); + Console.WriteLine(displayLine); + Console.WriteLine("- " + deviceInfo.DeviceID); + Console.WriteLine(); + } + + if (deviceCount == 0) + Console.WriteLine("No devices found!\n"); + + lst.Free(); + } + } +} \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/db/db182b0d3ea5e048b3e869ea5f3010741accba03.svn-base b/Old Matlab Interface/.svn/pristine/db/db182b0d3ea5e048b3e869ea5f3010741accba03.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..aa2829ac2b10a544df1687874b1f8b1095a2acc3 GIT binary patch literal 9216 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 t<_${<`CJ+F1%1uUfwikTIxOP9( +// All rights reserved. +// +// Read.Isochronous +// +// Last Updated: 03.08.2012 +// +// 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. +// +// 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 TRAVIS LEE ROBINSON +// 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. + +#endregion + +#define BMFW + +using System; +using System.Collections.Generic; +using System.Runtime.InteropServices; +using System.Threading; +using Test.Devices; +using libusbK; +using libusbK.Examples; + +namespace Read.Isochronous +{ + // ReSharper disable InconsistentNaming + + internal class Program + { + #region TODO USER: Set the test parameters for your device. + + public static IsoTestParameters Test = new IsoTestParameters(0x04d8, 0xfa2e, 0, 0x82, 3, 64, "xfer-iso-read.txt", 24); + + #endregion + + private static void Main(string[] args) + { + bool success; + WINUSB_PIPE_INFORMATION pipeInfo; + UsbK usb; + USB_INTERFACE_DESCRIPTOR interfaceDescriptor; + + // Find and configure the device. + if (!Test.ConfigureDevice(out pipeInfo, out usb, out interfaceDescriptor)) return; + +#if BMFW + // TODO FOR USER: Remove this block if not using benchmark firmware. + // This configures devices running benchmark firmware for streaming DeviceToHost transfers. + Console.WriteLine("Configuring for benchmark device.."); + BM_TEST_TYPE testType = BM_TEST_TYPE.READ; + success = Benchmark.Configure(usb, BM_COMMAND.SET_TEST, interfaceDescriptor.bInterfaceNumber, ref testType); + if (!success) + { + Console.WriteLine("Bench_Configure failed."); + } +#endif + // Create the ISO transfer queue. This class manages the pending and outstanding transfer lists. + ReadIsoTransferQueue readXfers = new ReadIsoTransferQueue(usb, ref pipeInfo, Test.MaxOutstandingTransfers, Test.IsoPacketsPerTransfer); + + if (!Test.ShowTestReady()) goto Done; + + // Always issue a reset pipe prior to re/starting an ISO stream. + usb.ResetPipe(pipeInfo.PipeId); + + // This example will not manage the start frame manually, but this is + // how I might caculate the starting point. + usb.GetCurrentFrameNumber(out readXfers.FrameNumber); + unchecked + { + // Add some start latency + readXfers.FrameNumber += 32; + + // Start FrameNumber at an interval of 8. + readXfers.FrameNumber -= ((readXfers.FrameNumber)%8); + } + + // This is a counter/timer used only for statistics gathering. + Thread.Sleep(0); + Test.Dcs.Start(); + + // Transfer processing loop + do + { + IsoTransferItem isoTransferItem; + int transferred; + int errorCode; + // While buffers exist in the completed list, submit them. + while (readXfers.Completed.Count > 0 && readXfers.TotalSubmittedCount < Test.MaxTransfersTotal) + { + errorCode = readXfers.SubmitNextRead(); + if (errorCode != 0) + { + Console.WriteLine("IsoReadPipe failed. ErrorCode: {0:X8}h", errorCode); + goto Done; + } + } + + if (readXfers.Outstanding.Count == 0) + { + // The MAX_TRANSFERS_TOTAL test limit hit. + Console.WriteLine("Done!"); + goto Done; + } + + // Wait for the oldest transfer to complete. + errorCode = readXfers.WaitRead(out isoTransferItem, 1000, out transferred); + if (errorCode != 0) + { + Console.WriteLine("OvlPool.Wait failed. ErrorCode: {0:X8}h", errorCode); + goto Done; + } + + // Report iso status. + IsoXferReport(readXfers, isoTransferItem, transferred); + + if (readXfers.CompletedCount == 1) Test.Dcs.Start(); + } while (true); + + Done: + readXfers.Destroy(); + Test.Free(); + + usb.Free(); + } + + private static void IsoXferReport(ReadIsoTransferQueue readIsoTransfers, IsoTransferItem isoTransferItem, int transferLength) + { + int packetPos; + Test.Dcs.Stop(transferLength); + if (readIsoTransfers.LastStartFrame == 0) + { + Test.LogLn("#{0}: StartFrame={1:X8}h TransferLength={2} BPS-average:{3}", + readIsoTransfers.CompletedCount, + isoTransferItem.Iso.StartFrame, + transferLength, + Math.Round(Test.Dcs.Bps, 2)); + } + else + { + int lastFrameCount = isoTransferItem.Iso.StartFrame - readIsoTransfers.LastStartFrame; + Test.LogLn("#{0}: StartFrame={1:X8}h TransferLength={2} BPS-average:{3} LastFrameCount={4}", + readIsoTransfers.CompletedCount, + isoTransferItem.Iso.StartFrame, + transferLength, + Math.Round(Test.Dcs.Bps, 2), + lastFrameCount); + } + + int numPackets = isoTransferItem.Iso.NumberOfPackets; + for (packetPos = 0; packetPos < numPackets; packetPos++) + { + KISO_PACKET isoPacket; + isoTransferItem.Iso.GetPacket(packetPos, out isoPacket); + if (isoPacket.Length > 1) + { + // This is somewhat specific to data that is returned by the benchmark firmware. + byte firstPacketByte = isoTransferItem.Buffer[isoPacket.Offset]; + byte secondPacketByte = isoTransferItem.Buffer[isoPacket.Offset + 1]; + Test.LogLn(" [{0:000}] Length={1} B0={2:X2}h B1={3:X2}h", packetPos, isoPacket.Length, firstPacketByte, secondPacketByte); + } + else + { + Test.LogLn(" [{0:000}] Empty Packet", packetPos); + } + } + + readIsoTransfers.CompletedCount++; + readIsoTransfers.LastStartFrame = isoTransferItem.Iso.StartFrame; + } + } + + internal class IsoTransferItem + { + public byte[] Buffer; + public GCHandle BufferGC; + public IsoK Iso; + public KOVL_HANDLE Ovl; + } + + internal class ReadIsoTransferQueue + { + #region Transfer lists + + public LinkedList Completed = new LinkedList(); + public LinkedList Master = new LinkedList(); + public LinkedList Outstanding = new LinkedList(); + + #endregion + + #region Core queue members + + public readonly int DataBufferSize; + public readonly OvlK OvlPool; + public readonly WINUSB_PIPE_INFORMATION PipeInfo; + public readonly UsbK Usb; + + #endregion + + #region Frame management + + public int FrameNumber; + public int LastStartFrame; + + #endregion + + #region Statisitics + + public uint CompletedCount; + public uint TotalSubmittedCount; + + #endregion + + public ReadIsoTransferQueue(UsbK usb, ref WINUSB_PIPE_INFORMATION pipeInfo, int maxPendingTransfers, int numberOfPackets) + { + PipeInfo = pipeInfo; + Usb = usb; + OvlPool = new OvlK(usb.Handle, maxPendingTransfers, KOVL_POOL_FLAG.NONE); + DataBufferSize = (pipeInfo.MaximumPacketSize*numberOfPackets); + for (int pos = 0; pos < maxPendingTransfers; pos++) + { + IsoTransferItem isoTransferItem = new IsoTransferItem(); + + isoTransferItem.Buffer = new byte[pipeInfo.MaximumPacketSize*numberOfPackets]; + isoTransferItem.BufferGC = GCHandle.Alloc(isoTransferItem.Buffer, GCHandleType.Pinned); + + isoTransferItem.Iso = new IsoK(numberOfPackets, 0); + isoTransferItem.Iso.SetPackets(pipeInfo.MaximumPacketSize); + + OvlPool.Acquire(out isoTransferItem.Ovl); + + Master.AddLast(isoTransferItem); + Completed.AddLast(isoTransferItem); + } + } + + public void Destroy() + { + // Cancel any outstanding IO and release the OvlK. + foreach (IsoTransferItem myIsoBuffer in Outstanding) + { + int transferred; + OvlPool.WaitAndRelease(myIsoBuffer.Ovl, 0, out transferred); + } + Completed.Clear(); + Outstanding.Clear(); + + foreach (IsoTransferItem myIsoBuffer in Master) + { + myIsoBuffer.Iso.Free(); + myIsoBuffer.BufferGC.Free(); + } + Master.Clear(); + OvlPool.Free(); + } + + private static void SetNextFrameNumber(IsoTransferItem isoTransferItem) + { + } + + public int SubmitNextRead() + { + // Pull from head of Completed list and push to end of Outstanding list + IsoTransferItem isoTransferItem = Completed.First.Value; + Completed.RemoveFirst(); + Outstanding.AddLast(isoTransferItem); + + // If managing a start frame manually, set it here and update the the frame counter for the next transfer. + SetNextFrameNumber(isoTransferItem); + + // Prepare the OvlK handle to be submitted. + OvlPool.ReUse(isoTransferItem.Ovl); + + // The data buffer was pinned earlier when it was allocated. Always pin managed memory before using it + // in an asynchronous function to keep the framework from tampering with it. + Usb.IsoReadPipe(PipeInfo.PipeId, + isoTransferItem.Buffer, + DataBufferSize, + isoTransferItem.Ovl, + isoTransferItem.Iso.Handle); + + int errorCode = Marshal.GetLastWin32Error(); + + // 997 is ERROR_IO_PENDING. For async, this means so far so good. + // IE: The transfer is submitted but we won't know if a problem occurs until it is completed. + if (errorCode != ErrorCodes.IoPending) return errorCode; + + TotalSubmittedCount++; + + return 0; + } + + public int WaitRead(out IsoTransferItem isoTransferItem, int i, out int transferred) + { + isoTransferItem = Outstanding.First.Value; + bool success = OvlPool.Wait(isoTransferItem.Ovl, 1000, KOVL_WAIT_FLAG.NONE, out transferred); + if (!success) + { + return Marshal.GetLastWin32Error(); + } + + Outstanding.RemoveFirst(); + Completed.AddLast(isoTransferItem); + + return 0; + } + } +} \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/de/de51647d95849ef82e410e841ad7472895a45c08.svn-base b/Old Matlab Interface/.svn/pristine/de/de51647d95849ef82e410e841ad7472895a45c08.svn-base new file mode 100644 index 00000000..be39bb28 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/de/de51647d95849ef82e410e841ad7472895a45c08.svn-base @@ -0,0 +1,69 @@ +#region Copyright(c) Travis Robinson +// Copyright (c) 2012 Travis Robinson +// All rights reserved. +// +// AssemblyInfo.cs +// +// Created: 03.05.2012 +// Last Updated: 03.05.2012 +// +// 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. +// +// 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 TRAVIS LEE ROBINSON +// 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. +#endregion + + +using System.Reflection; +using System.Runtime.InteropServices; + + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. + +[assembly: AssemblyTitle("Xfer.UsbStream")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("Xfer.UsbStream")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2012")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. + +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM + +[assembly: Guid("3d6a566f-2b7f-4ada-9e61-8691a59bd3bc")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] + +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/de/dee616359ba67ec117dffff180ca1669936f867a.svn-base b/Old Matlab Interface/.svn/pristine/de/dee616359ba67ec117dffff180ca1669936f867a.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..0a2ec0f4cd0ab99387ca97bcc097499e924c8d23 GIT binary patch literal 8192 zcmeHM3vg7`89tk2!{)JUP*?F0xrB`}MZ?0P29waN*_FF;BP$8GRb*LqZ(!>_(tGdH zFr^)w5M_Isj-^hujymd0r?#DG)o~E8k4-}jl!y^iTw zJo2@gm7tqPG90eix2k3hm+z_3I6uqj=8-iut2iCua78k{f%Wm}h{Hib5_eV-_Y?K2 zin2-4Ak>sq6H*IKoyiTKU&6Q87>n`C2(hyUr3gtc2qbIkgG}5GRjUIFe3mvjla~>) z0;Z2O5Yopw3={GcbJR{q0iaaYnqigbFNz50iU44a3{#?B^vN)ZTI z+oU97S`2#AAOM3nP)lP2j?#|*O{N-&FoqYErD-N3PM3BJt*O^kEHE}0T<;=AoG$IG zKSfpIVDX$FH(c+M(>e@m=X!D~3q=+_S&Pd2UWz)Uv?Kf}$MT2+)zx_Hlm{zER^>e+_Cp`ddsxPIPLn5(CtAX3TG z%>4Jcc6fK|IK-0wc;jY5^i2?ME#%HO+)<`K=-dK(Iz~_Gen@t+#Uc($9&dpDUSDc; zw^SlWc_W)h^}(p1C3oc$x$BS*hF%&%cZLe6pVj1^rF*%^CV0 zU{d^m{~4(s2ptpYc;~zqdhQnK_xP|v{X^v;V}H=KBT)76(rtn2k40+r=-MIKKIzyd zRey2@%U~=c_gnwqGFx!4!x8lD+s((@#RfzVVRFQLkmyTT3~XoX?P!=5MnQsuekc7S zqR2Pv4WLT~4&BMg)t+9le@{5N=C)y@@y+SD4I0OJ`$yhB#oHacy^psa@OG592Y5Ti z+k+;AU)J27t`MOpxU!@$6ioPDsvHZe!+pF{Kmh#iw= z0O&tA@wYI!`a{5d1;i-aIy^cm(mi56;t=y2>co8COew!s@UQf*^0S33_>4|^RHDZQ z4!Q=K5dpPd2|oh`*Z1eJc=iV9dwKgsV96q_X!P>&M;sG%V#~00(Jr=>4EMQ+(^r@j zT~E~4K{NOIM5X^XER)oJ66aF?$uiBgYZhpIy`7L_k3b|+=iebR+^^zvlIT$p9=HC8 z_wGE*1NdKy>GZ@veYaN674S{?L;^CL7V5yU=HA`+dBdB zZS&Cv2adZ2US~nx)pj}PV=n>s6^^|K(Ep*$H829ClqdS0NI#vaW4Ls!OuczA&y?Lt z)bk(*3R|lHCzi1N%t9G-z5p;{|0#4>TJ?({9w_9tLg81Y!ovXi$C!-~`yJ52 z1|bJZdp5%02p3mkEA+xGyp+32kwi2i*j!{Llhx@R|257FlgcM=lAJ`e3q=18Qg zv6pEIo1AX;ge98rMA)kGNBwL3w_$0WUR%9^WV&qM;_kUQHyGEq;g={bg%3+LQ_u-TnIO5v+7_=n%EPV+x zqLsGdNXLj{%vYe#4f#3i(+8Gv7gGW`nFmymQJhBwEiNK%E0ew3?#8ZyXvh z5R6ftyQbvucThete(}CJ`{~Ph$s=f&AkOc?l*L(BR4c|iQHhbQ_6Q^P{TCvWD0J9L zqGlx#`Sbc$^W3rfM9gcRI=&M_^dx;nr0*jmIlHc6P9!?Q&Z+~f2b`;#rI3o0CSaMx^@<_jd3mzO#$HQ}l6I;fQr+ zxOSwZO`YAGbG^mE{KHaY6y0mxaNRiYx5FOWiC-;-doI_u&xR?#01Wr}CTAKrro&sg z!LWHMVVTU;mm)tRl3O@2ZtMkr?(itTV|hBn!FnGaVB%og6#x^{MOw~MUS^Dm{lgBi z2cq&tivG?kfz7aj{h_-|H*fv6wxLbG5tK zCEv67rkSpL3V$6QmE!(Z+!+!*D3uTST~D{47j!)xsk~uOA~SqrpB+|W61C`88? zXB$fyST5S`8PaE+80$Z3n<(RFJ+fys>UfJ9jc@bz6mLJ_Eqj}?{@LQH6Z_jn*c!-H z8t&x~n|r;K|Cwg~sr}pwm{G#xCF1WEKKkmFKb{A=WkjnLPmJMUJcZu@6C3&a0Oxom zWNe)p?mqzy(D9J(h~XZef*)oo?6FW3?gvAHO|#@XBJRYnp?QePeINJ7=7_q=!X!Hd!---8#jXLt39{o7> z&)sYt@*}L6{?U^Dh}{VnEE-FxBr#X=4MALRUO`M=G; zfy>O$cUtgK3vRbyp9NQ2u-k$G3m*2E_KPgKn24`fbb|%YvtYFa-)uBBS6MJ)!Oa%j zX2Bm>@F5HS(t^LX;9(0E{r=jDr%2yp(GOd2n*~!ATx-Fiex=pl`4*gO!9^DQ;8XfV zyHCT&Ib;iaDHKac&90DRiEy%47J6dIl$>Z1f{Kz=I`Bc{TA|U~9NB=Qoir}EntvWB z+Wk9dtF0upi>8y>?T+4QYb(RH$}&>9u*_?#uO;<+YDm3SP3pU=Nc|!Qsb6^Eo2!zz64Qul z5#Yj_-Wir(X3xfbh}qz%{jjKCVIvjSK~`Nss$o;Tu(G$x;uUSy!}fku0naH0Ot^E{%oM$~;6OYq>}5>eNBl}igb{)+!qE@>)~A4WD`djtfiQ$@eM}EvfzpvgOYC{ zHzG^PN_E|`=#&jfu(+0QOf8H0&zirphdW96IJs4%t-|pFex>81Guuv0{POYxK>M&pV`?ktNY(Vr$O zX>!+TJSvm8y+@G|#|O5koQdOvNJKL^jQAm2G?rG^N98_*K`ymLqa9JTSB@uplJV$< zSSFE@6+&h)es6Ci-m6`oOrd*x8H`5b2s0DaHucKz+LMiDVrf|g3V9}$BIMSJXfA{N z-%dnmBfr@Uck_?3DCa&{93~gky8{o zqnRCr68K3tg&S6~aamQt-ok9VHmRDN?oOsS4#i#Idw+RP( z4znlg+47~x0M_|==ipI~I}vXdvIBJt_)fqXxbw$>p9k29`}`De_IHv&)aC|49srcs z&ne&x#!)u_PXIoE+RJnR4_o+J-06>?ZU(;q_&O@ne*^Gdyb~S(&fXg@qW%rO*jt0W z9~jP{8}9;!v-iPu7XGD}qyNDmE4U9E{}T?TV@uIxkzWP|K9qijUj+pbvPhVaTWpw1 z(}1+bR8>x|OKlSR(y5Hv){s*&*Q)Uiayq77nNG%)teWl7u8e2X*T&Rz)5Zl20&an1 zkF08|WJSfn+Sah3$=k5RSuF^ynvzqs5N@q6*qhI^gQY6Rb4pU%#QPCYS{3;lIe3v1 zcsXpu^{`%6OTww*U>{7`2`|YT<&=J6= z`K7+kG%oc&MdLHxTj!qmax_length + wave=imresize(wave,max_length/length(wave)); + warning('Vector length is greater than max_length. It has been scaled down.') +end + +if (amplitude>255 | amplitude<0 | amplitude ~= round(amplitude)) + error('Amplitude must be an integer between 0 and 255 for an 8 bit waveform!') +end + +wave = wave - min(wave); +wave = wave * amplitude / max(wave); +wave = round(wave); \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/df/dfc3cbd62eadfc9c19e1481956d39d3f78bcb631.svn-base b/Old Matlab Interface/.svn/pristine/df/dfc3cbd62eadfc9c19e1481956d39d3f78bcb631.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..66fa3d1e6c95c4ad28ef89b0d5e514a14464ae13 GIT binary patch literal 504 zcmVvCqyK z<I-Nue}^pJsL-HpaZwQ77~g!Sl0p?{kTubVg11zXw@6h*7SAtI7t5CN zFsl`yeYO^8&^zTyJDKi2iI#zpi%bu<{dcF3bYjEDW@q-180G?pD_|q#MZU;;iu?KG u>sM`4$j=7zwM0)*eKKOYYt_K-o6MS(q9NTN#H6}^QGz3e3b literal 0 HcmV?d00001 diff --git a/Old Matlab Interface/.svn/pristine/e0/e00bd01aaeb4abbbaa963b83ef9b8fc9ff93c944.svn-base b/Old Matlab Interface/.svn/pristine/e0/e00bd01aaeb4abbbaa963b83ef9b8fc9ff93c944.svn-base new file mode 100644 index 00000000..605b0244 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/e0/e00bd01aaeb4abbbaa963b83ef9b8fc9ff93c944.svn-base @@ -0,0 +1,146 @@ +global scope_window_time +global scope_window_max +global scope_window_min +global scope_mode +global gui_axes +global text_box_1 +global gui_hori_cursor_a_pos +global gui_hori_cursor_b_pos +global gui_vert_cursor_a_pos +global gui_vert_cursor_b_pos +global gui_cursor_mode +global saved_waveform_ch1 +global saved_waveform_ch2 +global gui_scope_running + +global refreshrate_temp +global refreshrate + +global waveform_exists +global gui_delay + +refreshrate_temp = refreshrate_temp - 1; + +tic +delay_sec = get(gui_delay, 'Max') - get(gui_delay, 'Value'); +switch(scope_mode) + case 0 + if (refreshrate_temp == 0) + refreshrate_temp = refreshrate; + %if(gui_scope_running) + [taxis, cool_waveform] = conv_ana(saved_waveform_ch1, 375000*scope_window_time, 0); + %end + plotcursors + waveform_exists = 1; + else + if (waveform_exists) + set(text_box_1, 'String', sprintf(' ---------------------\n Vmin = %.2fV\n ---------------------\n Vmax = %.2f\n ---------------------\n Vmean = %.2f\n ---------------------\n Vrms = %.2f\n ---------------------\n ', min(cool_waveform), max(cool_waveform), mean(cool_waveform), rms(cool_waveform))); + %title(titlestring); + xlabel(gui_axes, 'Time (s)') + ylabel(gui_axes, 'Voltage (V)') + drawnow + end + end + case 1 + if ~(refreshrate == 4) + error('Refreshrate assumed to be 4 for Mode 1') + end + switch(refreshrate_temp) + case 3 + %if(gui_scope_running) + [taxis, cool_waveform] = conv_ana(saved_waveform_ch1, 375000*scope_window_time, 0); + [taxis_ch2, temp_waveform_ch2] = conv_dig(saved_waveform_ch2, 375000*scope_window_time); + temp_waveform_ch2 = (scope_window_max - (0.05*(scope_window_max - scope_window_min)) - scope_window_min) * temp_waveform_ch2 + scope_window_min + (0.025*(scope_window_max - scope_window_min)); + % end + case 2 + stairs(gui_axes, taxis_ch2, temp_waveform_ch2, 'c'); + hold(gui_axes, 'on') + case 1 + plotcursors + hold(gui_axes, 'off') + case 0 + set(text_box_1, 'String', sprintf(' ---------------------\n Vmin = %.2fV\n ---------------------\n Vmax = %.2f\n ---------------------\n Vmean = %.2f\n ---------------------\n Vrms = %.2f\n ---------------------\n ', min(cool_waveform), max(cool_waveform), mean(cool_waveform), rms(cool_waveform))); + xlabel(gui_axes, 'Time (s)') + ylabel(gui_axes, 'Voltage (V)') + refreshrate_temp = refreshrate; + drawnow + end + case 2 + if (refreshrate_temp == 0) + refreshrate_temp = refreshrate; + % if(gui_scope_running) + [taxis_ch1, cool_waveform_ch1] = conv_ana(saved_waveform_ch1, 375000*scope_window_time, 0); + [taxis_ch2, cool_waveform_ch2] = conv_ana(saved_waveform_ch2, 375000*scope_window_time, 1); + %end + plotcursors + waveform_exists = 1; + else + if (waveform_exists) + set(text_box_1, 'String', sprintf(' ---------------------\n Vmin = %.2fV\n ---------------------\n Vmax = %.2f\n ---------------------\n Vmean = %.2f\n ---------------------\n Vrms = %.2f\n ---------------------\n ', min(cool_waveform_ch1), max(cool_waveform_ch1), mean(cool_waveform_ch1), rms(cool_waveform_ch1))); + %title(titlestring); + xlabel(gui_axes, 'Time (s)') + ylabel(gui_axes, 'Voltage (V)') + drawnow + end + end + case 3 + if (refreshrate_temp == 0) + refreshrate_temp = refreshrate; + %if(gui_scope_running) + [taxis, temp_waveform] = conv_dig(saved_waveform_ch1, 375000*scope_window_time); + % end + stairs(gui_axes, taxis, temp_waveform, 'y'); + else + set(gui_axes, 'Ylim', [-0.1, 1.1], 'Xlim', [-scope_window_time-delay_sec, 0-delay_sec], 'Color', [0 0 0], 'Box', 'on', 'XColor', [1 1 1], 'Ycolor', [1 1 1]); + set(text_box_1, 'String', 'Scope in dig mode'); + xlabel(gui_axes, 'Time (s)') + ylabel(gui_axes, 'Logic Value') + drawnow + end + case 4 + if (refreshrate_temp == 0) + refreshrate_temp = refreshrate; + % if(gui_scope_running) + [taxis_ch1, temp_waveform_ch1] = conv_dig(saved_waveform_ch1, 375000*scope_window_time); + [taxis_ch2, temp_waveform_ch2] = conv_dig(saved_waveform_ch2, 375000*scope_window_time); + %end + waveform_exists = 1 + stairs(gui_axes, taxis_ch1, temp_waveform_ch1, 'y'); + hold(gui_axes, 'off') + elseif (refreshrate_temp == 1) && (waveform_exists) + stairs(gui_axes, taxis_ch2, temp_waveform_ch2, 'c'); + hold(gui_axes, 'on') + else + set(gui_axes, 'Ylim', [-0.1, 1.1], 'Xlim', [-scope_window_time-delay_sec, 0-delay_sec], 'Color', [0 0 0], 'Box', 'on', 'XColor', [1 1 1], 'Ycolor', [1 1 1]); + set(text_box_1, 'String', 'Scope in dig mode'); + xlabel(gui_axes, 'Time (s)') + ylabel(gui_axes, 'Logic Value') + drawnow + end + case 5 + set(text_box_1, 'String', 'Scope disabled'); + xlabel(gui_axes, '') + ylabel(gui_axes, '') + drawnow + pause(0.001) + case 6 + if (refreshrate_temp == 0) + refreshrate_temp = refreshrate; + %if(gui_scope_running) + [taxis, cool_waveform] = conv_ana(saved_waveform_ch1, 750000*scope_window_time, 0); + %end + plotcursors + waveform_exists = 1; + else + if (waveform_exists) + set(text_box_1, 'String', sprintf(' ---------------------\n Vmin = %.2fV\n ---------------------\n Vmax = %.2f\n ---------------------\n Vmean = %.2f\n ---------------------\n Vrms = %.2f\n ---------------------\n ', min(cool_waveform), max(cool_waveform), mean(cool_waveform), rms(cool_waveform))); + %title(titlestring); + xlabel(gui_axes, 'Time (s)') + ylabel(gui_axes, 'Voltage (V)') + drawnow + end + end + otherwise + error('scope_mode invalid!') +end +toc \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/e3/e31bc70650fefc87ee8e537155c125d24f11c484.svn-base b/Old Matlab Interface/.svn/pristine/e3/e31bc70650fefc87ee8e537155c125d24f11c484.svn-base new file mode 100644 index 00000000..a506a2bd --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/e3/e31bc70650fefc87ee8e537155c125d24f11c484.svn-base @@ -0,0 +1,10 @@ +clear all +first_gui_test +pause(0.01) +max_n = 10000; +setscopemode(0,1,1) +setpsu(0,1000) +tiny_send_waveform(sin(linspace(0,2*pi, 750)),255,300) +%tiny_send_waveform(1:100, 255, 100) +mex_usb_iso_loop +%%plot(saved_waveform) \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/e7/e78c57614ab2a63318d6d6b1fcdde440f5f47cf9.svn-base b/Old Matlab Interface/.svn/pristine/e7/e78c57614ab2a63318d6d6b1fcdde440f5f47cf9.svn-base new file mode 100644 index 00000000..aafd8f21 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/e7/e78c57614ab2a63318d6d6b1fcdde440f5f47cf9.svn-base @@ -0,0 +1,16 @@ +clear +clear global +clear functions +global num_lc +num_lc = 0 +set(0,'RecursionLimit',100000) +setscopewindowsize(1, 0, 5) +first_gui_test +pause(0.01) +max_n = 100000000; +setscopemode(0,0.5,0.5) +%setpsu(0,1000) +tiny_send_waveform(sin(linspace(0,2*pi, 128)),255,432) +%tiny_send_waveform(1:100, 255, 100) +mex_usb_iso_loop +%%plot(saved_waveform) \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/e8/e8395bc3b71c1792e8a9fe2b5896f8a263b73e57.svn-base b/Old Matlab Interface/.svn/pristine/e8/e8395bc3b71c1792e8a9fe2b5896f8a263b73e57.svn-base new file mode 100644 index 00000000..3e1285c0 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/e8/e8395bc3b71c1792e8a9fe2b5896f8a263b73e57.svn-base @@ -0,0 +1,35 @@ +function [taxis, temp_waveform] = conv_dig(buffer, samplestoshow) +global scope_window_time +global gui_delay + +delay_sec = get(gui_delay, 'Max') - get(gui_delay, 'Value'); +delay_sample = delay_sec*(samplestoshow/scope_window_time); + +if length(buffer)>samplestoshow + if (scope_window_time>(500/375000)) + temp_waveform = buffer((length(buffer) - samplestoshow - delay_sample):samplestoshow/500: (length(buffer) - delay_sample)); + temp_waveform = typecast(temp_waveform, 'uint8'); + temp_waveform = logical(bitand(temp_waveform,16)); + else + throwaway = round((ceil(samplestoshow)-samplestoshow)*8); + dig_samples = buffer((length(buffer) - samplestoshow - delay_sample) : (length(buffer) - delay_sample)); + dig_samples = typecast(dig_samples, 'uint8'); + temp_waveform = false(1,length(dig_samples)*8); + temp_waveform(1:8:length(temp_waveform)) = bitand(dig_samples,128); + temp_waveform(2:8:length(temp_waveform)) = bitand(dig_samples,64); + temp_waveform(3:8:length(temp_waveform)) = bitand(dig_samples,32); + temp_waveform(4:8:length(temp_waveform)) = bitand(dig_samples,16); + temp_waveform(5:8:length(temp_waveform)) = bitand(dig_samples,8); + temp_waveform(6:8:length(temp_waveform)) = bitand(dig_samples,4); + temp_waveform(7:8:length(temp_waveform)) = bitand(dig_samples,2); + temp_waveform(8:8:length(temp_waveform)) = bitand(dig_samples,1); + + temp_waveform = temp_waveform((throwaway+1):end); + temp_waveform = temp_waveform(1:length(temp_waveform)/500:end); + end + taxis = linspace(-scope_window_time-delay_sec,-delay_sec,length(temp_waveform)); + return +end + +taxis = []; +temp_waveform = []; \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/e9/e9c483bf05438060fe1bcbf50fec15e3e5f96514.svn-base b/Old Matlab Interface/.svn/pristine/e9/e9c483bf05438060fe1bcbf50fec15e3e5f96514.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..fd8f2ffddf248bfc2fba5384666b6672455e60b5 GIT binary patch literal 7680 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 literal 0 HcmV?d00001 diff --git a/Old Matlab Interface/.svn/pristine/ea/ea3ef4fbc860418881fc8e3efaef12369b1c858c.svn-base b/Old Matlab Interface/.svn/pristine/ea/ea3ef4fbc860418881fc8e3efaef12369b1c858c.svn-base new file mode 100644 index 00000000..808d2bea --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/ea/ea3ef4fbc860418881fc8e3efaef12369b1c858c.svn-base @@ -0,0 +1,14 @@ +clear all +global num_lc +num_lc = 0 +set(0,'RecursionLimit',100000) +setscopewindowsize(1, 0, 5) +first_gui_test +pause(0.01) +max_n = 100000000; +setscopemode(0,0.5,0.5) +%setpsu(0,1000) +tiny_send_waveform(sin(linspace(0,2*pi, 128)),255,432) +%tiny_send_waveform(1:100, 255, 100) +mex_usb_iso_loop +%%plot(saved_waveform) \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/ea/eac5f5e9f6f8cab74dcb0452c5173d2a1944ce01.svn-base b/Old Matlab Interface/.svn/pristine/ea/eac5f5e9f6f8cab74dcb0452c5173d2a1944ce01.svn-base new file mode 100644 index 00000000..522fc2be --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/ea/eac5f5e9f6f8cab74dcb0452c5173d2a1944ce01.svn-base @@ -0,0 +1,12 @@ +clear all + +global usb_handle +if ~length(usb_handle) + warning('USB Handle not initialised. Initialising!') + mex_usb_init('03eb', 'a000') +end + +mex USB_ISO_INIT.c -Iincludes -llibusbK -Lbin\lib\amd64 +%USB_ISO_INIT(usb_handle) +[isoCtx_0, isoCtx_1, ovlkHandle_0, ovlkHandle_1, ovlPool, isoBuffer] = USB_ISO_INIT(usb_handle) +%USB_ISO_LOOP(usb_handle, isoCtx, ovlkHandle, ovlPool, isoBuffer, uint8(0)) \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/ed/edbf362730f0f3d815f3b0ae22207cb7d9615695.svn-base b/Old Matlab Interface/.svn/pristine/ed/edbf362730f0f3d815f3b0ae22207cb7d9615695.svn-base new file mode 100644 index 00000000..bdd2f770 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/ed/edbf362730f0f3d815f3b0ae22207cb7d9615695.svn-base @@ -0,0 +1,69 @@ +#region Copyright(c) Travis Robinson +// Copyright (c) 2012 Travis Robinson +// All rights reserved. +// +// AssemblyInfo.cs +// +// Created: 03.05.2012 +// Last Updated: 03.05.2012 +// +// 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. +// +// 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 TRAVIS LEE ROBINSON +// 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. +#endregion + + +using System.Reflection; +using System.Runtime.InteropServices; + + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. + +[assembly: AssemblyTitle("List.Devices")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("List.Devices")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2012")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. + +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM + +[assembly: Guid("535a41bb-2086-4cb2-8d38-2e12743bcb73")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] + +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/ee/ee3c211940aae62be90eccd5e6da149da079ba7c.svn-base b/Old Matlab Interface/.svn/pristine/ee/ee3c211940aae62be90eccd5e6da149da079ba7c.svn-base new file mode 100644 index 00000000..dc6152c7 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/ee/ee3c211940aae62be90eccd5e6da149da079ba7c.svn-base @@ -0,0 +1,65 @@ +global scope_window_time +global scope_window_max +global scope_window_min +global scope_mode +global gui_axes +global text_box_1 +global gui_hori_cursor_a_pos +global gui_hori_cursor_b_pos +global gui_vert_cursor_a_pos +global gui_vert_cursor_b_pos +global gui_cursor_mode +global saved_waveform_ch1 +global saved_waveform_ch2 + +refreshrate_temp = refreshrate_temp - 1; + +tic +switch(scope_mode) + case 0 + if (refreshrate_temp == 0) + refreshrate_temp = refreshrate; + [taxis, cool_waveform] = conv_ana(saved_waveform_ch1, 375000*scope_window_time); + plotcursors + waveform_exists = 1; + else + if (waveform_exists) + set(text_box_1, 'String', sprintf(' ---------------------\n Vmin = %.2fV\n ---------------------\n Vmax = %.2f\n ---------------------\n Vmean = %.2f\n ---------------------\n Vrms = %.2f\n ---------------------\n ', min(cool_waveform), max(cool_waveform), mean(cool_waveform), rms(cool_waveform))); + %title(titlestring); + xlabel(gui_axes, 'Time (s)') + ylabel(gui_axes, 'Voltage (V)') + drawnow + end + end + case 2 + if (refreshrate_temp == 0) + refreshrate_temp = refreshrate; + [taxis_ch1, cool_waveform_ch1] = conv_ana(saved_waveform_ch1, 375000*scope_window_time); + [taxis_ch2, cool_waveform_ch2] = conv_ana(saved_waveform_ch2, 375000*scope_window_time); + plotcursors + waveform_exists = 1; + else + if (waveform_exists) + set(text_box_1, 'String', sprintf(' ---------------------\n Vmin = %.2fV\n ---------------------\n Vmax = %.2f\n ---------------------\n Vmean = %.2f\n ---------------------\n Vrms = %.2f\n ---------------------\n ', min(cool_waveform_ch1), max(cool_waveform_ch1), mean(cool_waveform_ch1), rms(cool_waveform_ch1))); + %title(titlestring); + xlabel(gui_axes, 'Time (s)') + ylabel(gui_axes, 'Voltage (V)') + drawnow + end + end + case 3 + if (refreshrate_temp == 0) + refreshrate_temp = refreshrate; + [taxis, temp_waveform] = conv_dig(saved_waveform_ch1, 375000*scope_window_time); + stairs(gui_axes, taxis, temp_waveform, 'y'); + else + set(gui_axes, 'Ylim', [-0.1, 1.1], 'Xlim', [-scope_window_time, 0], 'Color', [0 0 0], 'Box', 'on', 'XColor', [1 1 1], 'Ycolor', [1 1 1]); + set(text_box_1, 'String', 'Scope in dig mode'); + xlabel(gui_axes, 'Time (s)') + ylabel(gui_axes, 'Logic Value') + drawnow + end + otherwise + error('scope_mode invalid!') +end +toc \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/ef/efe4e6fc3b4b3682712980af8b94ae14cb294d33.svn-base b/Old Matlab Interface/.svn/pristine/ef/efe4e6fc3b4b3682712980af8b94ae14cb294d33.svn-base new file mode 100644 index 00000000..48d26bc8 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/ef/efe4e6fc3b4b3682712980af8b94ae14cb294d33.svn-base @@ -0,0 +1,44 @@ +global gui_hori_cursor_a_pos +global gui_hori_cursor_b_pos +global gui_vert_cursor_a_pos +global gui_vert_cursor_b_pos +global scope_window_time +global scope_window_max +global scope_window_min + +global gui_cursor_mode +global gui_axes +global scope_mode +global gui_delay + +delay_sec = get(gui_delay, 'Max') - get(gui_delay, 'Value'); + +if(scope_mode==2) + switch(gui_cursor_mode) + case 1 + plot(gui_axes, taxis_ch1, cool_waveform_ch1, 'y', taxis_ch2, cool_waveform_ch2, 'c'); + case 2 + plot(gui_axes, taxis_ch1, cool_waveform_ch1, 'y', taxis_ch2, cool_waveform_ch2, 'c', [-scope_window_time-delay_sec, -delay_sec], [gui_hori_cursor_a_pos gui_hori_cursor_a_pos], 'w', [-scope_window_time-delay_sec, -delay_sec], [gui_hori_cursor_b_pos gui_hori_cursor_b_pos], 'w:'); + case 3 + plot(gui_axes, taxis_ch1, cool_waveform_ch1, 'y', taxis_ch2, cool_waveform_ch2, 'c', [gui_vert_cursor_a_pos gui_vert_cursor_a_pos], [scope_window_min scope_window_max], 'w', [gui_vert_cursor_b_pos gui_vert_cursor_b_pos], [scope_window_min scope_window_max], 'w:'); + case 4 + plot(gui_axes, taxis_ch1, cool_waveform_ch1, 'y', taxis_ch2, cool_waveform_ch2, 'c', [gui_vert_cursor_a_pos gui_vert_cursor_a_pos], [scope_window_min scope_window_max], 'w', [gui_vert_cursor_b_pos gui_vert_cursor_b_pos], [scope_window_min scope_window_max], 'w:', [-scope_window_time 0], [gui_hori_cursor_a_pos gui_hori_cursor_a_pos], 'w', [-scope_window_time 0], [gui_hori_cursor_b_pos gui_hori_cursor_b_pos], 'w:'); + otherwise + error('Gui_axes is in an invalid state'); + end +else + switch(gui_cursor_mode) + case 1 + plot(gui_axes, taxis, cool_waveform, 'y'); + case 2 + plot(gui_axes, taxis, cool_waveform, 'y', [-scope_window_time-delay_sec, -delay_sec], [gui_hori_cursor_a_pos gui_hori_cursor_a_pos], 'w', [-scope_window_time-delay_sec, -delay_sec], [gui_hori_cursor_b_pos gui_hori_cursor_b_pos], 'w:'); + case 3 + plot(gui_axes, taxis, cool_waveform, 'y', [gui_vert_cursor_a_pos gui_vert_cursor_a_pos], [scope_window_min scope_window_max], 'w', [gui_vert_cursor_b_pos gui_vert_cursor_b_pos], [scope_window_min scope_window_max], 'w:'); + case 4 + plot(gui_axes, taxis, cool_waveform, 'y', [gui_vert_cursor_a_pos gui_vert_cursor_a_pos], [scope_window_min scope_window_max], 'w', [gui_vert_cursor_b_pos gui_vert_cursor_b_pos], [scope_window_min scope_window_max], 'w:', [-scope_window_time 0], [gui_hori_cursor_a_pos gui_hori_cursor_a_pos], 'w', [-scope_window_time 0], [gui_hori_cursor_b_pos gui_hori_cursor_b_pos], 'w:'); + otherwise + error('Gui_axes is in an invalid state'); + end +end +set(gui_axes, 'Ylim', [scope_window_min, scope_window_max], 'Xlim', [-scope_window_time-delay_sec, -delay_sec], 'Color', [0 0 0], 'Box', 'on', 'XColor', [1 1 1], 'Ycolor', [1 1 1]); + diff --git a/Old Matlab Interface/.svn/pristine/f0/f09b1f3552567c912a993da851d7016c8481685b.svn-base b/Old Matlab Interface/.svn/pristine/f0/f09b1f3552567c912a993da851d7016c8481685b.svn-base new file mode 100644 index 00000000..fe0a0794 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/f0/f09b1f3552567c912a993da851d7016c8481685b.svn-base @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.4959 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Handle.Test.Properties +{ + + + ///

    + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Handle.Test.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/Old Matlab Interface/.svn/pristine/f0/f0dcf1670d184c7e3efd7864797fd7b745b6bafc.svn-base b/Old Matlab Interface/.svn/pristine/f0/f0dcf1670d184c7e3efd7864797fd7b745b6bafc.svn-base new file mode 100644 index 00000000..bac5f81b --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/f0/f0dcf1670d184c7e3efd7864797fd7b745b6bafc.svn-base @@ -0,0 +1,4000 @@ +/*! \file libusbk.h +* \brief functions for usb device communication. +* +* \note +* This is the \b main libusbK USB user include file. +*/ + +#ifndef _LIBUSBK_H__ +#define _LIBUSBK_H__ + +#include "lusbk_shared.h" + +/////////////////////////////////////////////////////////////////////// +// L I B U S B K PUBLIC STRUCTS, DEFINES, AND ENUMS ////////////////// +/////////////////////////////////////////////////////////////////////// + +#ifndef _LIBUSBK_LIBK_TYPES + +/*! \addtogroup libk +* @{ +*/ + +#define _in +#define _inopt +#define _out +#define _outopt +#define _ref +#define _refopt + +//! UsbK base function pointer, See \ref LibK_GetProcAddress. +typedef INT_PTR (FAR WINAPI* KPROC)(); + +//! Indicates that a function is an exported API call. +#if defined(DYNAMIC_DLL) +#define KUSB_EXP +#else +#define KUSB_EXP +#endif + +//! Indicates the calling convention. This is always WINAPI (stdcall) by default. +#if !defined(KUSB_API) +#define KUSB_API WINAPI +#endif + +#pragma warning(disable:4201) + +#if _MSC_VER >= 1200 +#pragma warning(push) +#endif +#pragma warning (disable:4201) +#pragma warning(disable:4214) // named type definition in parentheses + +//! User defined handle context space, see \ref LibK_GetContext. +typedef INT_PTR KLIB_USER_CONTEXT; + +//! KUSB control setup packet. +/*! +* This union structure is identical in size to a \ref WINUSB_SETUP_PACKET, +* but provides additional field accessors. (see \ref libusbk.h for structure details) +*/ +typedef union _KUSB_SETUP_PACKET +{ + UCHAR Bytes[8]; + USHORT Words[4]; + struct + { + //! Request value + struct + { + UCHAR Recipient: 2; + UCHAR Reserved: 3; + UCHAR Type: 2; + UCHAR Dir: 1; + } BmRequest; + + //! Request type value + UCHAR Request; + + //! wValue + USHORT Value; + + //! wIndex + USHORT Index; + + //! wLength ushort value + USHORT Length; + }; + struct + { + struct + { + UCHAR b0: 1; + UCHAR b1: 1; + UCHAR b2: 1; + UCHAR b3: 1; + UCHAR b4: 1; + UCHAR b5: 1; + UCHAR b6: 1; + UCHAR b7: 1; + } BmRequestBits; + + struct + { + UCHAR b0: 1; + UCHAR b1: 1; + UCHAR b2: 1; + UCHAR b3: 1; + UCHAR b4: 1; + UCHAR b5: 1; + UCHAR b6: 1; + UCHAR b7: 1; + } RequestBits; + + UCHAR ValueLo; + UCHAR ValueHi; + UCHAR IndexLo; + UCHAR IndexHi; + UCHAR LengthLo; + UCHAR LengthHi; + }; +} KUSB_SETUP_PACKET; +// setup packet is eight bytes -- defined by spec +C_ASSERT(sizeof(KUSB_SETUP_PACKET) == 8); + +#if _MSC_VER >= 1200 +#pragma warning(pop) +#endif + + +//! Base handle type for all library handles, See \ref KLIB_HANDLE_TYPE. +typedef void* KLIB_HANDLE; + +//! Opaque UsbK handle, see \ref UsbK_Init. +typedef KLIB_HANDLE KUSB_HANDLE; + +//! Opaque LstK handle, see \ref LstK_Init. +typedef KLIB_HANDLE KLST_HANDLE; + +//! Opaque HotK handle, see \ref HotK_Init. +typedef KLIB_HANDLE KHOT_HANDLE; + +//! Opaque OvlK handle, see \ref OvlK_Acquire. +typedef KLIB_HANDLE KOVL_HANDLE; + + +//! Opaque OvlPoolK handle, see \ref OvlK_Init. +typedef KLIB_HANDLE KOVL_POOL_HANDLE; + +//! Opaque StmK handle, see \ref StmK_Init. +typedef KLIB_HANDLE KSTM_HANDLE; + +//! Handle type enumeration. +typedef enum _KLIB_HANDLE_TYPE +{ + //! Hot plug handle. \ref KHOT_HANDLE + KLIB_HANDLE_TYPE_HOTK, + + //! USB handle. \ref KUSB_HANDLE + KLIB_HANDLE_TYPE_USBK, + + //! Shared USB handle. \ref KUSB_HANDLE + KLIB_HANDLE_TYPE_USBSHAREDK, + + //! Device list handle. \ref KLST_HANDLE + KLIB_HANDLE_TYPE_LSTK, + + //! Device info handle. \ref KLST_DEVINFO_HANDLE + KLIB_HANDLE_TYPE_LSTINFOK, + + //! Overlapped handle. \ref KOVL_HANDLE + KLIB_HANDLE_TYPE_OVLK, + + //! Overlapped pool handle. \ref KOVL_POOL_HANDLE + KLIB_HANDLE_TYPE_OVLPOOLK, + + //! Pipe stream handle. \ref KSTM_HANDLE + KLIB_HANDLE_TYPE_STMK, + + //! Max handle type count. + KLIB_HANDLE_TYPE_COUNT +} KLIB_HANDLE_TYPE; + +//! Function typedef for \ref LibK_SetCleanupCallback. +typedef INT KUSB_API KLIB_HANDLE_CLEANUP_CB (_in KLIB_HANDLE Handle, _in KLIB_HANDLE_TYPE HandleType, _in KLIB_USER_CONTEXT UserContext); + +//! libusbK verson information structure. +typedef struct _KLIB_VERSION +{ + //! Major version number. + INT Major; + + //! Minor version number. + INT Minor; + + //! Micro version number. + INT Micro; + + //! Nano version number. + INT Nano; +} KLIB_VERSION; +//! Pointer to a \copybrief KLIB_VERSION +typedef KLIB_VERSION* PKLIB_VERSION; + +/*! @} */ +#endif + +#ifndef _LIBUSBK_ISOK_TYPES +/*! \addtogroup isok +* @{ +*/ + + +//! Callback function typedef for \ref IsoK_EnumPackets +typedef BOOL KUSB_API KISO_ENUM_PACKETS_CB (_in UINT PacketIndex, _in PKISO_PACKET IsoPacket, _in PVOID UserState); + +/*! @} */ +#endif + +#ifndef _LIBUSBK_LSTK_TYPES + +/*! \addtogroup lstk +* @{ +*/ + +//! Allocated length for all strings in a \ref KLST_DEVINFO structure. +#define KLST_STRING_MAX_LEN 256 + +//! Device list sync flags. +/*! +* These sync flags are also use by the hot plug module to indicate device +* arrival/removal notifications: +* - \b DeviceArrival = KLST_SYNC_FLAG_ADDED +* - \b DeviceRemoval = KLST_SYNC_FLAG_REMOVED +*/ +typedef enum _KLST_SYNC_FLAG +{ + //! Cleared/invalid state. + KLST_SYNC_FLAG_NONE = 0L, + + //! Unchanged state, + KLST_SYNC_FLAG_UNCHANGED = 0x0001, + + //! Added (Arrival) state, + KLST_SYNC_FLAG_ADDED = 0x0002, + + //! Removed (Unplugged) state, + KLST_SYNC_FLAG_REMOVED = 0x0004, + + //! Connect changed state. + KLST_SYNC_FLAG_CONNECT_CHANGE = 0x0008, + + //! All states. + KLST_SYNC_FLAG_MASK = 0x000F, +} KLST_SYNC_FLAG; + +//! Common usb device information structure +typedef struct _KLST_DEV_COMMON_INFO +{ + //! VendorID parsed from \ref KLST_DEVINFO::DeviceID + INT Vid; + + //! ProductID parsed from \ref KLST_DEVINFO::DeviceID + INT Pid; + + //! Composite interface number parsed from \ref KLST_DEVINFO::DeviceID. Set to \b -1 for devices that do not have the composite parent driver. + INT MI; + + // An ID that uniquely identifies a USB device. + CHAR InstanceID[KLST_STRING_MAX_LEN]; + +} KLST_DEV_COMMON_INFO; +//! Pointer to a \c KLST_DEV_COMMON_INFO structure. +typedef KLST_DEV_COMMON_INFO* PKLST_DEV_COMMON_INFO; + +//! Semi-opaque device information structure of a device list. +/*! +* +* \attention This structure is semi-opaque. +* +*/ +typedef struct _KLST_DEVINFO +{ + //! Common usb device information + KLST_DEV_COMMON_INFO Common; + + //! Driver id this device element is using + INT DriverID; + + //! Device interface GUID + CHAR DeviceInterfaceGUID[KLST_STRING_MAX_LEN]; + + //! Device instance ID. + /*! + * A Device instance ID has the following format: + * [enumerator]\[enumerator-specific-device-ID]\[instance-specific-ID] + * - [enumerator] + * - For USB device, the enumerator is always \c USB + * - [enumerator-specific-device-ID] + * - Contains the vendor and product id (VID_xxxx&PID_xxxx) + * - If present, contains the usbccgp (windows composite device layer) interface number (MI_xx) + * - [instance-specific-ID] + * - If the device is composite, contains a unique interface ID generated by Windows. + * - If the device is not composite and has a serial number, contains the devices serial number. + * - If the device does not have a serial number, contains a unique ID generated by Windows. + */ + CHAR DeviceID[KLST_STRING_MAX_LEN]; + + //! Class GUID. + CHAR ClassGUID[KLST_STRING_MAX_LEN]; + + //! Manufacturer name as specified in the INF file. + CHAR Mfg[KLST_STRING_MAX_LEN]; + + //! Device description as specified in the INF file. + CHAR DeviceDesc[KLST_STRING_MAX_LEN]; + + //! Driver service name. + CHAR Service[KLST_STRING_MAX_LEN]; + + //! Unique identifier. + CHAR SymbolicLink[KLST_STRING_MAX_LEN]; + + //! physical device filename used with the Windows \c CreateFile() + CHAR DevicePath[KLST_STRING_MAX_LEN]; + + //! libusb-win32 filter index id. + INT LUsb0FilterIndex; + + //! Indicates the devices connection state. + BOOL Connected; + + //! Synchronization flags. (internal use only) + KLST_SYNC_FLAG SyncFlags; + + INT BusNumber; + + INT DeviceAddress; + + //! If the the device is serialized, represents the string value of \ref USB_DEVICE_DESCRIPTOR::iSerialNumber. For Devices without a \b iSerialNumber, represents the unique \b InstanceID assigned by \b Windows. + CHAR SerialNumber[KLST_STRING_MAX_LEN]; + +} KLST_DEVINFO; +//! Pointer to a \ref KLST_DEVINFO structure. (semi-opaque) +typedef KLST_DEVINFO* KLST_DEVINFO_HANDLE; + +//! Device list initialization flags. +typedef enum _KLST_FLAG +{ + //! No flags (or 0) + KLST_FLAG_NONE = 0L, + + //! Enable listings for the raw device interface GUID \b only. {A5DCBF10-6530-11D2-901F-00C04FB951ED} + KLST_FLAG_INCLUDE_RAWGUID = 0x0001, + + //! List all libusbK devices including those not currently connected. + KLST_FLAG_INCLUDE_DISCONNECT = 0x0002, + +} KLST_FLAG; + +//! Device list/hot-plug pattern match structure. +/*! +* \fixedstruct{1024} +* +* These ansi char strings are used to specify which devices should be included in a device list. +* All strings file pattern match strings allowing asterisk or question mark chars as wildcards. +* +*/ +typedef struct _KLST_PATTERN_MATCH +{ + //! Pattern match a device instance id. + CHAR DeviceID[KLST_STRING_MAX_LEN]; + + //! Pattern match a device interface guid. + CHAR DeviceInterfaceGUID[KLST_STRING_MAX_LEN]; + + //! Pattern match a symbolic link. + CHAR ClassGUID[KLST_STRING_MAX_LEN]; + + //! fixed structure padding. + UCHAR z_F_i_x_e_d[1024 - KLST_STRING_MAX_LEN * 3]; + +} KLST_PATTERN_MATCH; +C_ASSERT(sizeof(KLST_PATTERN_MATCH) == 1024); + +//! Pointer to a \ref KLST_PATTERN_MATCH structure. +typedef KLST_PATTERN_MATCH* PKLST_PATTERN_MATCH; + +//! Device list enumeration function callback typedef. +/*! +* +* \param DeviceList +* The device list \c DeviceInfo belongs to +* +* \param DeviceInfo +* Device information +* +* \param Context +* User context that was passed into \ref LstK_Enumerate +* +* Use this typedef as a prototype for an enumeration function with \ref LstK_Enumerate. +* +*/ +typedef BOOL KUSB_API KLST_ENUM_DEVINFO_CB ( + _in KLST_HANDLE DeviceList, + _in KLST_DEVINFO_HANDLE DeviceInfo, + _in PVOID Context); + +/*! @} */ + +#endif + +#ifndef __USB_H__ + +#include + +/*! \addtogroup libk +* @{ +*/ + +//! Maximum value that can be added to the current start frame. +#define USBD_ISO_START_FRAME_RANGE 1024 + + +//! bmRequest.Dir +typedef enum _BMREQUEST_DIR +{ + BMREQUEST_DIR_HOST_TO_DEVICE = 0, + BMREQUEST_DIR_DEVICE_TO_HOST = 1, +} BMREQUEST_DIR; + +//! bmRequest.Type +typedef enum _BMREQUEST_TYPE +{ + //! Standard request. See \ref USB_REQUEST_ENUM + BMREQUEST_TYPE_STANDARD = 0, + + //! Class-specific request. + BMREQUEST_TYPE_CLASS = 1, + + //! Vendor-specific request + BMREQUEST_TYPE_VENDOR = 2, +} BMREQUEST_TYPE; + +//! bmRequest.Recipient +typedef enum _BMREQUEST_RECIPIENT +{ + //! Request is for a device. + BMREQUEST_RECIPIENT_DEVICE = 0, + + //! Request is for an interface of a device. + BMREQUEST_RECIPIENT_INTERFACE = 1, + + //! Request is for an endpoint of a device. + BMREQUEST_RECIPIENT_ENDPOINT = 2, + + //! Request is for a vendor-specific purpose. + BMREQUEST_RECIPIENT_OTHER = 3, +} BMREQUEST_RECIPIENT; + +//! Maximum length (in bytes) of a usb string. USB strings are always stored in wide-char format. +#define MAXIMUM_USB_STRING_LENGTH 255 + +//! Values for the bits returned by the \ref USB_REQUEST_GET_STATUS request. +typedef enum _USB_GETSTATUS +{ + //! Device is self powered + USB_GETSTATUS_SELF_POWERED = 0x01, + + //! Device can wake the system from a low power/sleeping state. + USB_GETSTATUS_REMOTE_WAKEUP_ENABLED = 0x02 +} USB_GETSTATUS; + +//! Standard USB descriptor types. For more information, see section 9-5 of the USB 3.0 specifications. +typedef enum _USB_DESCRIPTOR_TYPE +{ + //! Device descriptor type. + USB_DESCRIPTOR_TYPE_DEVICE = 0x01, + + //! Configuration descriptor type. + USB_DESCRIPTOR_TYPE_CONFIGURATION = 0x02, + + //! String descriptor type. + USB_DESCRIPTOR_TYPE_STRING = 0x03, + + //! Interface descriptor type. + USB_DESCRIPTOR_TYPE_INTERFACE = 0x04, + + //! Endpoint descriptor type. + USB_DESCRIPTOR_TYPE_ENDPOINT = 0x05, + + //! Device qualifier descriptor type. + USB_DESCRIPTOR_TYPE_DEVICE_QUALIFIER = 0x06, + + //! Config power descriptor type. + USB_DESCRIPTOR_TYPE_CONFIG_POWER = 0x07, + + //! Interface power descriptor type. + USB_DESCRIPTOR_TYPE_INTERFACE_POWER = 0x08, + + //! Interface association descriptor type. + USB_DESCRIPTOR_TYPE_INTERFACE_ASSOCIATION = 0x0B, +} USB_DESCRIPTOR_TYPE; + +//! Makes \c wValue for a \ref USB_REQUEST_GET_DESCRIPTOR or \ref USB_REQUEST_SET_DESCRIPTOR request. +#define USB_DESCRIPTOR_MAKE_TYPE_AND_INDEX(d, i) \ + ((USHORT)((USHORT)d<<8 | i)) + +//! Endpoint type mask for the \c bmAttributes field of a \ref USB_ENDPOINT_DESCRIPTOR +#define USB_ENDPOINT_TYPE_MASK 0x03 + +//! Indicates a control endpoint +#define USB_ENDPOINT_TYPE_CONTROL 0x00 + +//! Indicates an isochronous endpoint +#define USB_ENDPOINT_TYPE_ISOCHRONOUS 0x01 + +//! Indicates a bulk endpoint +#define USB_ENDPOINT_TYPE_BULK 0x02 + +//! Indicates an interrupt endpoint +#define USB_ENDPOINT_TYPE_INTERRUPT 0x03 + +//! Config power mask for the \c bmAttributes field of a \ref USB_CONFIGURATION_DESCRIPTOR +#define USB_CONFIG_POWERED_MASK 0xc0 + +//! Values used in the \c bmAttributes field of a \ref USB_CONFIGURATION_DESCRIPTOR +enum USB_CONFIG_BM_ATTRIBUTE_ENUM +{ + //! The device is powered by it's host. + USB_CONFIG_BUS_POWERED = 0x80, + + //! The device has an external power source. + USB_CONFIG_SELF_POWERED = 0x40, + + //! The device is capable of waking the the host from a low power/sleeping state. + USB_CONFIG_REMOTE_WAKEUP = 0x20, +}; + +//! Endpoint direction mask for the \c bEndpointAddress field of a \ref USB_ENDPOINT_DESCRIPTOR +#define USB_ENDPOINT_DIRECTION_MASK 0x80 + +//! Endpoint address mask for the \c bEndpointAddress field of a \ref USB_ENDPOINT_DESCRIPTOR +#define USB_ENDPOINT_ADDRESS_MASK 0x0F + +//! Tests the \c bEndpointAddress direction bit. TRUE if the endpoint address is an OUT endpoint. (HostToDevice, PC Write) +/*! +* \param addr \c bEndpointAddress field of a \ref USB_ENDPOINT_DESCRIPTOR +*/ +#define USB_ENDPOINT_DIRECTION_OUT(addr) (!((addr) & USB_ENDPOINT_DIRECTION_MASK)) + +//! Tests the \c bEndpointAddress direction bit. TRUE if the endpoint address is an IN endpoint. (DeviceToHost, PC Read) +/*! +* \param addr \c bEndpointAddress field of a \ref USB_ENDPOINT_DESCRIPTOR +*/ +#define USB_ENDPOINT_DIRECTION_IN(addr) ((addr) & USB_ENDPOINT_DIRECTION_MASK) + +//! USB defined request codes +/* +* see Chapter 9 of the USB 2.0 specification for +* more information. +* +* These are the correct values based on the USB 2.0 specification. +*/ +enum USB_REQUEST_ENUM +{ + //! Request status of the specific recipient + USB_REQUEST_GET_STATUS = 0x00, + + //! Clear or disable a specific feature + USB_REQUEST_CLEAR_FEATURE = 0x01, + + //! Set or enable a specific feature + USB_REQUEST_SET_FEATURE = 0x03, + + //! Set device address for all future accesses + USB_REQUEST_SET_ADDRESS = 0x05, + + //! Get the specified descriptor + USB_REQUEST_GET_DESCRIPTOR = 0x06, + + //! Update existing descriptors or add new descriptors + USB_REQUEST_SET_DESCRIPTOR = 0x07, + + //! Get the current device configuration value + USB_REQUEST_GET_CONFIGURATION = 0x08, + + //! Set device configuration + USB_REQUEST_SET_CONFIGURATION = 0x09, + + //! Return the selected alternate setting for the specified interface + USB_REQUEST_GET_INTERFACE = 0x0A, + + //! Select an alternate interface for the specified interface + USB_REQUEST_SET_INTERFACE = 0x0B, + + //! Set then report an endpoint's synchronization frame + USB_REQUEST_SYNC_FRAME = 0x0C, +}; + +//! USB defined class codes +/*! +* see http://www.usb.org/developers/defined_class for more information. +* +*/ +enum USB_DEVICE_CLASS_ENUM +{ + //! Reserved class + USB_DEVICE_CLASS_RESERVED = 0x00, + + //! Audio class + USB_DEVICE_CLASS_AUDIO = 0x01, + + //! Communications class + USB_DEVICE_CLASS_COMMUNICATIONS = 0x02, + + //! Human Interface Device class + USB_DEVICE_CLASS_HUMAN_INTERFACE = 0x03, + + //! Imaging class + USB_DEVICE_CLASS_IMAGING = 0x06, + + //! Printer class + USB_DEVICE_CLASS_PRINTER = 0x07, + + //! Mass storage class + USB_DEVICE_CLASS_STORAGE = 0x08, + + //! Hub class + USB_DEVICE_CLASS_HUB = 0x09, + + //! vendor-specific class + USB_DEVICE_CLASS_VENDOR_SPECIFIC = 0xFF, +}; + +//! A structure representing the standard USB device descriptor. +/*! +* This descriptor is documented in section 9.6.1 of the USB 2.0 specification. +* All multiple-byte fields are represented in host-endian format. +*/ +typedef struct _USB_DEVICE_DESCRIPTOR +{ + //! Size of this descriptor (in bytes) + UCHAR bLength; + + //! Descriptor type + UCHAR bDescriptorType; + + //! USB specification release number in binary-coded decimal. + /*! + * A value of 0x0200 indicates USB 2.0, 0x0110 indicates USB 1.1, etc. + */ + USHORT bcdUSB; + + //! USB-IF class code for the device + UCHAR bDeviceClass; + + //! USB-IF subclass code for the device + UCHAR bDeviceSubClass; + + //! USB-IF protocol code for the device + UCHAR bDeviceProtocol; + + //! Maximum packet size for control endpoint 0 + UCHAR bMaxPacketSize0; + + //! USB-IF vendor ID + USHORT idVendor; + + //! USB-IF product ID + USHORT idProduct; + + //! Device release number in binary-coded decimal + USHORT bcdDevice; + + //! Index of string descriptor describing manufacturer + UCHAR iManufacturer; + + //! Index of string descriptor describing product + UCHAR iProduct; + + //! Index of string descriptor containing device serial number + UCHAR iSerialNumber; + + //! Number of possible configurations + UCHAR bNumConfigurations; + +} USB_DEVICE_DESCRIPTOR; +//! pointer to a \c USB_DEVICE_DESCRIPTOR +typedef USB_DEVICE_DESCRIPTOR* PUSB_DEVICE_DESCRIPTOR; + +//! A structure representing the standard USB endpoint descriptor. +/*! +* This descriptor is documented in section 9.6.3 of the USB 2.0 specification. +* All multiple-byte fields are represented in host-endian format. +*/ +typedef struct _USB_ENDPOINT_DESCRIPTOR +{ + //! Size of this descriptor (in bytes) + UCHAR bLength; + + //! Descriptor type + UCHAR bDescriptorType; + + //! The address of the endpoint described by this descriptor. + /*! + * - Bits 0:3 are the endpoint number + * - Bits 4:6 are reserved + * - Bit 7 indicates direction + */ + UCHAR bEndpointAddress; + + //! Attributes which apply to the endpoint when it is configured using the bConfigurationValue. + /*! + * - Bits 0:1 determine the transfer type. + * - Bits 2:3 are only used for isochronous endpoints and refer to sync type. + * - Bits 4:5 are also only used for isochronous endpoints and refer to usage type. + * - Bits 6:7 are reserved. + */ + UCHAR bmAttributes; + + //! Maximum packet size this endpoint is capable of sending/receiving. + USHORT wMaxPacketSize; + + //! Interval for polling endpoint for data transfers. + UCHAR bInterval; + +} USB_ENDPOINT_DESCRIPTOR; +//! pointer to a \c USB_ENDPOINT_DESCRIPTOR +typedef USB_ENDPOINT_DESCRIPTOR* PUSB_ENDPOINT_DESCRIPTOR; + +//! A structure representing the standard USB configuration descriptor. +/* +* +* This descriptor is documented in section 9.6.3 of the USB 2.0 specification. +* All multiple-byte fields are represented in host-endian format. +* +*/ +typedef struct _USB_CONFIGURATION_DESCRIPTOR +{ + //! Size of this descriptor (in bytes) + UCHAR bLength; + + //! Descriptor type + UCHAR bDescriptorType; + + //! Total length of data returned for this configuration + USHORT wTotalLength; + + //! Number of interfaces supported by this configuration + UCHAR bNumInterfaces; + + //! Identifier value for this configuration + UCHAR bConfigurationValue; + + //! Index of string descriptor describing this configuration + UCHAR iConfiguration; + + //! Configuration characteristics + UCHAR bmAttributes; + + //! Maximum power consumption of the USB device from this bus in this configuration when the device is fully operation. + /*! + * Expressed in units of 2 mA. + */ + UCHAR MaxPower; +} USB_CONFIGURATION_DESCRIPTOR; +//! pointer to a \c USB_CONFIGURATION_DESCRIPTOR +typedef USB_CONFIGURATION_DESCRIPTOR* PUSB_CONFIGURATION_DESCRIPTOR; + +//! A structure representing the standard USB interface descriptor. +/*! +* This descriptor is documented in section 9.6.5 of the USB 2.0 specification. +* All multiple-byte fields are represented in host-endian format. +*/ +typedef struct _USB_INTERFACE_DESCRIPTOR +{ + //! Size of this descriptor (in bytes) + UCHAR bLength; + + //! Descriptor type + UCHAR bDescriptorType; + + //! Number of this interface + UCHAR bInterfaceNumber; + + //! Value used to select this alternate setting for this interface + UCHAR bAlternateSetting; + + //! Number of endpoints used by this interface (excluding the control endpoint) + UCHAR bNumEndpoints; + + //! USB-IF class code for this interface + UCHAR bInterfaceClass; + + //! USB-IF subclass code for this interface + UCHAR bInterfaceSubClass; + + //! USB-IF protocol code for this interface + UCHAR bInterfaceProtocol; + + //! Index of string descriptor describing this interface + UCHAR iInterface; + +} USB_INTERFACE_DESCRIPTOR; +//! pointer to a \c USB_INTERFACE_DESCRIPTOR +typedef USB_INTERFACE_DESCRIPTOR* PUSB_INTERFACE_DESCRIPTOR; + +//! A structure representing the standard USB string descriptor. +/*! +* This descriptor is documented in section 9.6.5 of the USB 2.0 specification. +* All multiple-byte fields are represented in host-endian format. +*/ +typedef struct _USB_STRING_DESCRIPTOR +{ + //! Size of this descriptor (in bytes) + UCHAR bLength; + + //! Descriptor type + UCHAR bDescriptorType; + + //! Content of the string + WCHAR bString[1]; + +} USB_STRING_DESCRIPTOR; +//! pointer to a \c USB_STRING_DESCRIPTOR +typedef USB_STRING_DESCRIPTOR* PUSB_STRING_DESCRIPTOR; + +//! A structure representing the common USB descriptor. +typedef struct _USB_COMMON_DESCRIPTOR +{ + //! Size of this descriptor (in bytes) + UCHAR bLength; + + //! Descriptor type + UCHAR bDescriptorType; + +} USB_COMMON_DESCRIPTOR; +//! pointer to a \c USB_COMMON_DESCRIPTOR +typedef USB_COMMON_DESCRIPTOR* PUSB_COMMON_DESCRIPTOR; + +#if _MSC_VER >= 1200 +#pragma warning(push) +#endif +#pragma warning (disable:4201) +#pragma warning(disable:4214) // named type definition in parentheses + +//! Allows hardware manufacturers to define groupings of interfaces. +/*! +* +* The ECN specifies a USB descriptor, called the Interface Association +* Descriptor (IAD). +* +* The Universal Serial Bus Specification, revision 2.0, does not support +* grouping more than one interface of a composite device within a single +* function. However, the USB Device Working Group (DWG) created USB device +* classes that allow for functions with multiple interfaces, and the USB +* Implementor's Forum issued an Engineering Change Notification (ECN) that +* defines a mechanism for grouping interfaces. +* +*/ +typedef struct _USB_INTERFACE_ASSOCIATION_DESCRIPTOR +{ + //! Size of this descriptor (in bytes) + UCHAR bLength; + + //! Descriptor type + UCHAR bDescriptorType; + + //! First interface number of the set of interfaces that follow this descriptor + UCHAR bFirstInterface; + + //! The Number of interfaces follow this descriptor that are considered "associated" + UCHAR bInterfaceCount; + + //! \c bInterfaceClass used for this associated interfaces + UCHAR bFunctionClass; + + //! \c bInterfaceSubClass used for the associated interfaces + UCHAR bFunctionSubClass; + + //! \c bInterfaceProtocol used for the associated interfaces + UCHAR bFunctionProtocol; + + //! Index of string descriptor describing the associated interfaces + UCHAR iFunction; + +} USB_INTERFACE_ASSOCIATION_DESCRIPTOR; +//! pointer to a \c USB_INTERFACE_ASSOCIATION_DESCRIPTOR +typedef USB_INTERFACE_ASSOCIATION_DESCRIPTOR* PUSB_INTERFACE_ASSOCIATION_DESCRIPTOR; + +#if _MSC_VER >= 1200 +#pragma warning(pop) +#endif + +/*! @} */ + +#include +#endif // __USB_H__ + +#ifndef _LIBUSBK_LIBK_TYPES + +/*! \addtogroup libk +* @{ +*/ + +//! Usb handle specific properties that can be retrieved with \ref UsbK_GetProperty. +typedef enum _KUSB_PROPERTY +{ + //! Get the internal device file handle used for operations such as GetOverlappedResult or DeviceIoControl. + KUSB_PROPERTY_DEVICE_FILE_HANDLE, + + KUSB_PROPERTY_COUNT + +} KUSB_PROPERTY; + +//! Supported driver id enumeration. +typedef enum _KUSB_DRVID +{ + //! libusbK.sys driver ID + KUSB_DRVID_LIBUSBK, + + //! libusb0.sys driver ID + KUSB_DRVID_LIBUSB0, + + //! WinUSB.sys driver ID + KUSB_DRVID_WINUSB, + + //! libusb0.sys filter driver ID + KUSB_DRVID_LIBUSB0_FILTER, + + //! Supported driver count + KUSB_DRVID_COUNT + +} KUSB_DRVID; + +//! Supported function id enumeration. +typedef enum _KUSB_FNID +{ + //! \ref UsbK_Init dynamic driver function id. + KUSB_FNID_Init, + + //! \ref UsbK_Free dynamic driver function id. + KUSB_FNID_Free, + + //! \ref UsbK_ClaimInterface dynamic driver function id. + KUSB_FNID_ClaimInterface, + + //! \ref UsbK_ReleaseInterface dynamic driver function id. + KUSB_FNID_ReleaseInterface, + + //! \ref UsbK_SetAltInterface dynamic driver function id. + KUSB_FNID_SetAltInterface, + + //! \ref UsbK_GetAltInterface dynamic driver function id. + KUSB_FNID_GetAltInterface, + + //! \ref UsbK_GetDescriptor dynamic driver function id. + KUSB_FNID_GetDescriptor, + + //! \ref UsbK_ControlTransfer dynamic driver function id. + KUSB_FNID_ControlTransfer, + + //! \ref UsbK_SetPowerPolicy dynamic driver function id. + KUSB_FNID_SetPowerPolicy, + + //! \ref UsbK_GetPowerPolicy dynamic driver function id. + KUSB_FNID_GetPowerPolicy, + + //! \ref UsbK_SetConfiguration dynamic driver function id. + KUSB_FNID_SetConfiguration, + + //! \ref UsbK_GetConfiguration dynamic driver function id. + KUSB_FNID_GetConfiguration, + + //! \ref UsbK_ResetDevice dynamic driver function id. + KUSB_FNID_ResetDevice, + + //! \ref UsbK_Initialize dynamic driver function id. + KUSB_FNID_Initialize, + + //! \ref UsbK_SelectInterface dynamic driver function id. + KUSB_FNID_SelectInterface, + + //! \ref UsbK_GetAssociatedInterface dynamic driver function id. + KUSB_FNID_GetAssociatedInterface, + + //! \ref UsbK_Clone dynamic driver function id. + KUSB_FNID_Clone, + + //! \ref UsbK_QueryInterfaceSettings dynamic driver function id. + KUSB_FNID_QueryInterfaceSettings, + + //! \ref UsbK_QueryDeviceInformation dynamic driver function id. + KUSB_FNID_QueryDeviceInformation, + + //! \ref UsbK_SetCurrentAlternateSetting dynamic driver function id. + KUSB_FNID_SetCurrentAlternateSetting, + + //! \ref UsbK_GetCurrentAlternateSetting dynamic driver function id. + KUSB_FNID_GetCurrentAlternateSetting, + + //! \ref UsbK_QueryPipe dynamic driver function id. + KUSB_FNID_QueryPipe, + + //! \ref UsbK_SetPipePolicy dynamic driver function id. + KUSB_FNID_SetPipePolicy, + + //! \ref UsbK_GetPipePolicy dynamic driver function id. + KUSB_FNID_GetPipePolicy, + + //! \ref UsbK_ReadPipe dynamic driver function id. + KUSB_FNID_ReadPipe, + + //! \ref UsbK_WritePipe dynamic driver function id. + KUSB_FNID_WritePipe, + + //! \ref UsbK_ResetPipe dynamic driver function id. + KUSB_FNID_ResetPipe, + + //! \ref UsbK_AbortPipe dynamic driver function id. + KUSB_FNID_AbortPipe, + + //! \ref UsbK_FlushPipe dynamic driver function id. + KUSB_FNID_FlushPipe, + + //! \ref UsbK_IsoReadPipe dynamic driver function id. + KUSB_FNID_IsoReadPipe, + + //! \ref UsbK_IsoWritePipe dynamic driver function id. + KUSB_FNID_IsoWritePipe, + + //! \ref UsbK_GetCurrentFrameNumber dynamic driver function id. + KUSB_FNID_GetCurrentFrameNumber, + + //! \ref UsbK_GetOverlappedResult dynamic driver function id. + KUSB_FNID_GetOverlappedResult, + + //! \ref UsbK_GetProperty dynamic driver function id. + KUSB_FNID_GetProperty, + + + //! Supported function count + KUSB_FNID_COUNT, + +} KUSB_FNID; + +typedef BOOL KUSB_API KUSB_Init ( + _out KUSB_HANDLE* InterfaceHandle, + _in KLST_DEVINFO_HANDLE DevInfo); + +typedef BOOL KUSB_API KUSB_Free ( + _in KUSB_HANDLE InterfaceHandle); + +typedef BOOL KUSB_API KUSB_ClaimInterface ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR NumberOrIndex, + _in BOOL IsIndex); + +typedef BOOL KUSB_API KUSB_ReleaseInterface ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR NumberOrIndex, + _in BOOL IsIndex); + +typedef BOOL KUSB_API KUSB_SetAltInterface ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR NumberOrIndex, + _in BOOL IsIndex, + _in UCHAR AltSettingNumber); + +typedef BOOL KUSB_API KUSB_GetAltInterface ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR NumberOrIndex, + _in BOOL IsIndex, + _out PUCHAR AltSettingNumber); + +typedef BOOL KUSB_API KUSB_GetDescriptor ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR DescriptorType, + _in UCHAR Index, + _in USHORT LanguageID, + _out PUCHAR Buffer, + _in UINT BufferLength, + _outopt PUINT LengthTransferred); + +typedef BOOL KUSB_API KUSB_ControlTransfer ( + _in KUSB_HANDLE InterfaceHandle, + _in WINUSB_SETUP_PACKET SetupPacket, + _refopt PUCHAR Buffer, + _in UINT BufferLength, + _outopt PUINT LengthTransferred, + _inopt LPOVERLAPPED Overlapped); + +typedef BOOL KUSB_API KUSB_SetPowerPolicy ( + _in KUSB_HANDLE InterfaceHandle, + _in UINT PolicyType, + _in UINT ValueLength, + _in PVOID Value); + +typedef BOOL KUSB_API KUSB_GetPowerPolicy ( + _in KUSB_HANDLE InterfaceHandle, + _in UINT PolicyType, + _ref PUINT ValueLength, + _out PVOID Value); + +typedef BOOL KUSB_API KUSB_SetConfiguration ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR ConfigurationNumber); + +typedef BOOL KUSB_API KUSB_GetConfiguration ( + _in KUSB_HANDLE InterfaceHandle, + _out PUCHAR ConfigurationNumber); + +typedef BOOL KUSB_API KUSB_ResetDevice ( + _in KUSB_HANDLE InterfaceHandle); + +typedef BOOL KUSB_API KUSB_Initialize ( + _in HANDLE DeviceHandle, + _out KUSB_HANDLE* InterfaceHandle); + +typedef BOOL KUSB_API KUSB_SelectInterface ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR NumberOrIndex, + _in BOOL IsIndex); + +typedef BOOL KUSB_API KUSB_GetAssociatedInterface ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR AssociatedInterfaceIndex, + _out KUSB_HANDLE* AssociatedInterfaceHandle); + +typedef BOOL KUSB_API KUSB_Clone ( + _in KUSB_HANDLE InterfaceHandle, + _out KUSB_HANDLE* DstInterfaceHandle); + +typedef BOOL KUSB_API KUSB_QueryInterfaceSettings ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR AltSettingIndex, + _out PUSB_INTERFACE_DESCRIPTOR UsbAltInterfaceDescriptor); + +typedef BOOL KUSB_API KUSB_QueryDeviceInformation ( + _in KUSB_HANDLE InterfaceHandle, + _in UINT InformationType, + _ref PUINT BufferLength, + _ref PVOID Buffer); + +typedef BOOL KUSB_API KUSB_SetCurrentAlternateSetting ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR AltSettingNumber); + +typedef BOOL KUSB_API KUSB_GetCurrentAlternateSetting ( + _in KUSB_HANDLE InterfaceHandle, + _out PUCHAR AltSettingNumber); + +typedef BOOL KUSB_API KUSB_QueryPipe ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR AltSettingNumber, + _in UCHAR PipeIndex, + _out PWINUSB_PIPE_INFORMATION PipeInformation); + +typedef BOOL KUSB_API KUSB_SetPipePolicy ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID, + _in UINT PolicyType, + _in UINT ValueLength, + _in PVOID Value); + +typedef BOOL KUSB_API KUSB_GetPipePolicy ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID, + _in UINT PolicyType, + _ref PUINT ValueLength, + _out PVOID Value); + +typedef BOOL KUSB_API KUSB_ReadPipe ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID, + _out PUCHAR Buffer, + _in UINT BufferLength, + _outopt PUINT LengthTransferred, + _inopt LPOVERLAPPED Overlapped); + +typedef BOOL KUSB_API KUSB_WritePipe ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID, + _in PUCHAR Buffer, + _in UINT BufferLength, + _outopt PUINT LengthTransferred, + _inopt LPOVERLAPPED Overlapped); + +typedef BOOL KUSB_API KUSB_ResetPipe ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID); + +typedef BOOL KUSB_API KUSB_AbortPipe ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID); + +typedef BOOL KUSB_API KUSB_FlushPipe ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID); + +typedef BOOL KUSB_API KUSB_IsoReadPipe ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID, + _out PUCHAR Buffer, + _in UINT BufferLength, + _in LPOVERLAPPED Overlapped, + _refopt PKISO_CONTEXT IsoContext); + +typedef BOOL KUSB_API KUSB_IsoWritePipe ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID, + _in PUCHAR Buffer, + _in UINT BufferLength, + _in LPOVERLAPPED Overlapped, + _refopt PKISO_CONTEXT IsoContext); + +typedef BOOL KUSB_API KUSB_GetCurrentFrameNumber ( + _in KUSB_HANDLE InterfaceHandle, + _out PUINT FrameNumber); + +typedef BOOL KUSB_API KUSB_GetOverlappedResult ( + _in KUSB_HANDLE InterfaceHandle, + _in LPOVERLAPPED Overlapped, + _out PUINT lpNumberOfBytesTransferred, + _in BOOL bWait); + +typedef BOOL KUSB_API KUSB_GetProperty ( + _in KUSB_HANDLE InterfaceHandle, + _in KUSB_PROPERTY PropertyType, + _ref PUINT PropertySize, + _out PVOID Value); + + + +//! USB core driver API information structure. +/*! +* This structure is part of \ref KUSB_DRIVER_API and contains +* driver and user specific information. +* +*/ +typedef struct _KUSB_DRIVER_API_INFO +{ + //! \readonly Driver id of the driver api. + INT DriverID; + + //! \readonly Number of valid functions contained in the driver API. + INT FunctionCount; + +} KUSB_DRIVER_API_INFO; + +//! Driver API function set structure. +/* +* Contains the driver specific USB core function pointer set. +* +* \note +* This structure has a fixed 512 byte structure size. +*/ +typedef struct _KUSB_DRIVER_API +{ + //! Driver API information. + KUSB_DRIVER_API_INFO Info; + + /*! \fn BOOL KUSB_API Init (_out KUSB_HANDLE* InterfaceHandle, _in KLST_DEVINFO_HANDLE DevInfo) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_Init + */ + KUSB_Init* Init; + + /*! \fn BOOL KUSB_API Free (_in KUSB_HANDLE InterfaceHandle) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_Free + */ + KUSB_Free* Free; + + /*! \fn BOOL KUSB_API ClaimInterface (_in KUSB_HANDLE InterfaceHandle, _in UCHAR NumberOrIndex, _in BOOL IsIndex) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_ClaimInterface + */ + KUSB_ClaimInterface* ClaimInterface; + + /*! \fn BOOL KUSB_API ReleaseInterface (_in KUSB_HANDLE InterfaceHandle, _in UCHAR NumberOrIndex, _in BOOL IsIndex) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_ReleaseInterface + */ + KUSB_ReleaseInterface* ReleaseInterface; + + /*! \fn BOOL KUSB_API SetAltInterface (_in KUSB_HANDLE InterfaceHandle, _in UCHAR NumberOrIndex, _in BOOL IsIndex, _in UCHAR AltSettingNumber) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_SetAltInterface + */ + KUSB_SetAltInterface* SetAltInterface; + + /*! \fn BOOL KUSB_API GetAltInterface (_in KUSB_HANDLE InterfaceHandle, _in UCHAR NumberOrIndex, _in BOOL IsIndex, _out PUCHAR AltSettingNumber) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_GetAltInterface + */ + KUSB_GetAltInterface* GetAltInterface; + + /*! \fn BOOL KUSB_API GetDescriptor (_in KUSB_HANDLE InterfaceHandle, _in UCHAR DescriptorType, _in UCHAR Index, _in USHORT LanguageID, _out PUCHAR Buffer, _in UINT BufferLength, _outopt PUINT LengthTransferred) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_GetDescriptor + */ + KUSB_GetDescriptor* GetDescriptor; + + /*! \fn BOOL KUSB_API ControlTransfer (_in KUSB_HANDLE InterfaceHandle, _in WINUSB_SETUP_PACKET SetupPacket, _refopt PUCHAR Buffer, _in UINT BufferLength, _outopt PUINT LengthTransferred, _inopt LPOVERLAPPED Overlapped) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_ControlTransfer + */ + KUSB_ControlTransfer* ControlTransfer; + + /*! \fn BOOL KUSB_API SetPowerPolicy (_in KUSB_HANDLE InterfaceHandle, _in UINT PolicyType, _in UINT ValueLength, _in PVOID Value) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_SetPowerPolicy + */ + KUSB_SetPowerPolicy* SetPowerPolicy; + + /*! \fn BOOL KUSB_API GetPowerPolicy (_in KUSB_HANDLE InterfaceHandle, _in UINT PolicyType, _ref PUINT ValueLength, _out PVOID Value) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_GetPowerPolicy + */ + KUSB_GetPowerPolicy* GetPowerPolicy; + + /*! \fn BOOL KUSB_API SetConfiguration (_in KUSB_HANDLE InterfaceHandle, _in UCHAR ConfigurationNumber) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_SetConfiguration + */ + KUSB_SetConfiguration* SetConfiguration; + + /*! \fn BOOL KUSB_API GetConfiguration (_in KUSB_HANDLE InterfaceHandle, _out PUCHAR ConfigurationNumber) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_GetConfiguration + */ + KUSB_GetConfiguration* GetConfiguration; + + /*! \fn BOOL KUSB_API ResetDevice (_in KUSB_HANDLE InterfaceHandle) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_ResetDevice + */ + KUSB_ResetDevice* ResetDevice; + + /*! \fn BOOL KUSB_API Initialize (_in HANDLE DeviceHandle, _out KUSB_HANDLE* InterfaceHandle) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_Initialize + */ + KUSB_Initialize* Initialize; + + /*! \fn BOOL KUSB_API SelectInterface (_in KUSB_HANDLE InterfaceHandle, _in UCHAR NumberOrIndex, _in BOOL IsIndex) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_SelectInterface + */ + KUSB_SelectInterface* SelectInterface; + + /*! \fn BOOL KUSB_API GetAssociatedInterface (_in KUSB_HANDLE InterfaceHandle, _in UCHAR AssociatedInterfaceIndex, _out KUSB_HANDLE* AssociatedInterfaceHandle) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_GetAssociatedInterface + */ + KUSB_GetAssociatedInterface* GetAssociatedInterface; + + /*! \fn BOOL KUSB_API Clone (_in KUSB_HANDLE InterfaceHandle, _out KUSB_HANDLE* DstInterfaceHandle) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_Clone + */ + KUSB_Clone* Clone; + + /*! \fn BOOL KUSB_API QueryInterfaceSettings (_in KUSB_HANDLE InterfaceHandle, _in UCHAR AltSettingIndex, _out PUSB_INTERFACE_DESCRIPTOR UsbAltInterfaceDescriptor) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_QueryInterfaceSettings + */ + KUSB_QueryInterfaceSettings* QueryInterfaceSettings; + + /*! \fn BOOL KUSB_API QueryDeviceInformation (_in KUSB_HANDLE InterfaceHandle, _in UINT InformationType, _ref PUINT BufferLength, _ref PVOID Buffer) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_QueryDeviceInformation + */ + KUSB_QueryDeviceInformation* QueryDeviceInformation; + + /*! \fn BOOL KUSB_API SetCurrentAlternateSetting (_in KUSB_HANDLE InterfaceHandle, _in UCHAR AltSettingNumber) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_SetCurrentAlternateSetting + */ + KUSB_SetCurrentAlternateSetting* SetCurrentAlternateSetting; + + /*! \fn BOOL KUSB_API GetCurrentAlternateSetting (_in KUSB_HANDLE InterfaceHandle, _out PUCHAR AltSettingNumber) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_GetCurrentAlternateSetting + */ + KUSB_GetCurrentAlternateSetting* GetCurrentAlternateSetting; + + /*! \fn BOOL KUSB_API QueryPipe (_in KUSB_HANDLE InterfaceHandle, _in UCHAR AltSettingNumber, _in UCHAR PipeIndex, _out PWINUSB_PIPE_INFORMATION PipeInformation) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_QueryPipe + */ + KUSB_QueryPipe* QueryPipe; + + /*! \fn BOOL KUSB_API SetPipePolicy (_in KUSB_HANDLE InterfaceHandle, _in UCHAR PipeID, _in UINT PolicyType, _in UINT ValueLength, _in PVOID Value) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_SetPipePolicy + */ + KUSB_SetPipePolicy* SetPipePolicy; + + /*! \fn BOOL KUSB_API GetPipePolicy (_in KUSB_HANDLE InterfaceHandle, _in UCHAR PipeID, _in UINT PolicyType, _ref PUINT ValueLength, _out PVOID Value) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_GetPipePolicy + */ + KUSB_GetPipePolicy* GetPipePolicy; + + /*! \fn BOOL KUSB_API ReadPipe (_in KUSB_HANDLE InterfaceHandle, _in UCHAR PipeID, _out PUCHAR Buffer, _in UINT BufferLength, _outopt PUINT LengthTransferred, _inopt LPOVERLAPPED Overlapped) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_ReadPipe + */ + KUSB_ReadPipe* ReadPipe; + + /*! \fn BOOL KUSB_API WritePipe (_in KUSB_HANDLE InterfaceHandle, _in UCHAR PipeID, _in PUCHAR Buffer, _in UINT BufferLength, _outopt PUINT LengthTransferred, _inopt LPOVERLAPPED Overlapped) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_WritePipe + */ + KUSB_WritePipe* WritePipe; + + /*! \fn BOOL KUSB_API ResetPipe (_in KUSB_HANDLE InterfaceHandle, _in UCHAR PipeID) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_ResetPipe + */ + KUSB_ResetPipe* ResetPipe; + + /*! \fn BOOL KUSB_API AbortPipe (_in KUSB_HANDLE InterfaceHandle, _in UCHAR PipeID) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_AbortPipe + */ + KUSB_AbortPipe* AbortPipe; + + /*! \fn BOOL KUSB_API FlushPipe (_in KUSB_HANDLE InterfaceHandle, _in UCHAR PipeID) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_FlushPipe + */ + KUSB_FlushPipe* FlushPipe; + + /*! \fn BOOL KUSB_API IsoReadPipe (_in KUSB_HANDLE InterfaceHandle, _in UCHAR PipeID, _out PUCHAR Buffer, _in UINT BufferLength, _in LPOVERLAPPED Overlapped, _refopt PKISO_CONTEXT IsoContext) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_IsoReadPipe + */ + KUSB_IsoReadPipe* IsoReadPipe; + + /*! \fn BOOL KUSB_API IsoWritePipe (_in KUSB_HANDLE InterfaceHandle, _in UCHAR PipeID, _in PUCHAR Buffer, _in UINT BufferLength, _in LPOVERLAPPED Overlapped, _refopt PKISO_CONTEXT IsoContext) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_IsoWritePipe + */ + KUSB_IsoWritePipe* IsoWritePipe; + + /*! \fn BOOL KUSB_API GetCurrentFrameNumber (_in KUSB_HANDLE InterfaceHandle, _out PUINT FrameNumber) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_GetCurrentFrameNumber + */ + KUSB_GetCurrentFrameNumber* GetCurrentFrameNumber; + + /*! \fn BOOL KUSB_API GetOverlappedResult (_in KUSB_HANDLE InterfaceHandle, _in LPOVERLAPPED Overlapped, _out PUINT lpNumberOfBytesTransferred, _in BOOL bWait) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_GetOverlappedResult + */ + KUSB_GetOverlappedResult* GetOverlappedResult; + + /*! \fn BOOL KUSB_API GetProperty (_in KUSB_HANDLE InterfaceHandle, _in KUSB_PROPERTY PropertyType, _ref PUINT PropertySize, _out PVOID Value) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_GetProperty + */ + KUSB_GetProperty* GetProperty; + + //! fixed structure padding. + UCHAR z_F_i_x_e_d[512 - sizeof(KUSB_DRIVER_API_INFO) - sizeof(UINT_PTR) * KUSB_FNID_COUNT]; + +} KUSB_DRIVER_API; +typedef KUSB_DRIVER_API* PKUSB_DRIVER_API; +C_ASSERT(sizeof(KUSB_DRIVER_API) == 512); +/**@}*/ +#endif + +#ifndef _LIBUSBK_HOTK_TYPES + +/*! \addtogroup hotk +* @{ +*/ + +//! Hot plug config flags. +typedef enum _KHOT_FLAG +{ + //! No flags (or 0) + KHOT_FLAG_NONE, + + //! Notify all devices which match upon a succuessful call to \ref HotK_Init. + KHOT_FLAG_PLUG_ALL_ON_INIT = 0x0001, + + //! Allow other \ref KHOT_HANDLE instances to consume this match. + KHOT_FLAG_PASS_DUPE_INSTANCE = 0x0002, + + //! If a \c UserHwnd is specified, use \c PostMessage instead of \c SendMessage. + KHOT_FLAG_POST_USER_MESSAGE = 0x0004, +} KHOT_FLAG; + +//! Hot plug event function definition. +typedef VOID KUSB_API KHOT_PLUG_CB( + _in KHOT_HANDLE HotHandle, + _in KLST_DEVINFO_HANDLE DeviceInfo, + _in KLST_SYNC_FLAG PlugType); + +//! Power broadcast event function definition. +typedef VOID KUSB_API KHOT_POWER_BROADCAST_CB( + _in KHOT_HANDLE HotHandle, + _in KLST_DEVINFO_HANDLE DeviceInfo, + _in UINT PbtEvent); + +//! Hot plug parameter structure. +/*! +* \fixedstruct{2048} +* +* This structure is intially passed as a parameter to \ref HotK_Init. +* +*/ +typedef struct _KHOT_PARAMS +{ + //! Hot plug event window handle to send/post messages when notifications occur. + HWND UserHwnd; + + //! WM_USER message start offset used when sending/posting messages, See details. + /*! + * \attention The \ref hotk will send UserMessage+1 for arrival notifications and UserMessage+0 for removal notifications. + * + * - WPARAM = \ref KHOT_HANDLE + * - LPARAM = \ref KLST_DEVINFO_HANDLE + */ + UINT UserMessage; + + //! Additional init/config parameters + KHOT_FLAG Flags; + + //! File pattern matches for restricting notifcations to a single/group or all supported usb devices. + KLST_PATTERN_MATCH PatternMatch; + + //! Hot plug event callback function invoked when notifications occur. + /*! \fn VOID KUSB_API OnHotPlug (_in KHOT_HANDLE HotHandle, _in KLST_DEVINFO_HANDLE DeviceInfo, _in KLST_SYNC_FLAG PlugType) + * \memberof KHOT_PARAMS + */ + KHOT_PLUG_CB* OnHotPlug; + + //! \b WM_POWERBROADCAST event callback function invoked when a power-management event has occurred. + /*! \fn VOID KUSB_API OnPowerBroadcast (_in KHOT_HANDLE HotHandle, _in KLST_DEVINFO_HANDLE DeviceInfo, _in UINT PbtEvent) + * \memberof KHOT_PARAMS + */ + KHOT_POWER_BROADCAST_CB* OnPowerBroadcast; + + //! fixed structure padding. + UCHAR z_F_i_x_e_d[2048 - sizeof(KLST_PATTERN_MATCH) - sizeof(UINT_PTR) * 3 - sizeof(UINT) * 2]; + +} KHOT_PARAMS; +C_ASSERT(sizeof(KHOT_PARAMS) == 2048); + +//! Pointer to a \ref KHOT_PARAMS structure. +typedef KHOT_PARAMS* PKHOT_PARAMS; + +/**@}*/ + +#endif + +#ifndef _LIBUSBK_OVLK_TYPES + +/*! \addtogroup ovlk +* @{ +*/ + +//! \c WaitFlags used by \ref OvlK_Wait. +/*! +* +*/ +typedef enum _KOVL_WAIT_FLAG +{ + //! Do not perform any additional actions upon exiting \ref OvlK_Wait. + KOVL_WAIT_FLAG_NONE = 0L, + + //! If the i/o operation completes successfully, release the OverlappedK back to it's pool. + KOVL_WAIT_FLAG_RELEASE_ON_SUCCESS = 0x0001, + + //! If the i/o operation fails, release the OverlappedK back to it's pool. + KOVL_WAIT_FLAG_RELEASE_ON_FAIL = 0x0002, + + //! If the i/o operation fails or completes successfully, release the OverlappedK back to its pool. Perform no actions if it times-out. + KOVL_WAIT_FLAG_RELEASE_ON_SUCCESS_FAIL = 0x0003, + + //! If the i/o operation times-out cancel it, but do not release the OverlappedK back to its pool. + KOVL_WAIT_FLAG_CANCEL_ON_TIMEOUT = 0x0004, + + //! If the i/o operation times-out, cancel it and release the OverlappedK back to its pool. + KOVL_WAIT_FLAG_RELEASE_ON_TIMEOUT = 0x000C, + + //! Always release the OverlappedK back to its pool. If the operation timed-out, cancel it before releasing back to its pool. + KOVL_WAIT_FLAG_RELEASE_ALWAYS = 0x000F, + + //! Uses alterable wait functions. See http://msdn.microsoft.com/en-us/library/windows/desktop/ms687036%28v=vs.85%29.aspx + KOVL_WAIT_FLAG_ALERTABLE = 0x0010, + +} KOVL_WAIT_FLAG; + +//! \c Overlapped pool config flags. +/*! +* \attention Currently not used. +*/ +typedef enum _KOVL_POOL_FLAG +{ + KOVL_POOL_FLAG_NONE = 0L, +} KOVL_POOL_FLAG; + +/**@}*/ + +#endif + +#ifndef _LIBUSBK_STMK_TYPES + +/*! \addtogroup stmk +* @{ +*/ +//! Stream config flags. +/*! +* \attention Currently not used. +*/ +typedef enum _KSTM_FLAG +{ + //! None + KSTM_FLAG_NONE = 0L, + KSTM_FLAG_NO_PARTIAL_XFERS = 0x00100000, + KSTM_FLAG_USE_TIMEOUT = 0x80000000, + KSTM_FLAG_TIMEOUT_MASK = 0x0001FFFF +} KSTM_FLAG; + +//! Stream config flags. +/*! +* \attention Currently not used. +*/ +typedef enum _KSTM_COMPLETE_RESULT +{ + //! Valid + KSTM_COMPLETE_RESULT_VALID = 0L, + //! Invalid + KSTM_COMPLETE_RESULT_INVALID, +} KSTM_COMPLETE_RESULT; + +//! Stream transfer context structure. +/*! +* This structure is passed into the stream callback functions. +* The stream transfer context list is allocated upon a successful call to \ref StmK_Init. There is one +* transfer context for each transfer. (0 to \c MaxPendingTransfers). +* +*/ +typedef struct _KSTM_XFER_CONTEXT +{ + + //! Internal stream buffer. + PUCHAR Buffer; + + //! Size of internal stream buffer. + INT BufferSize; + + //! Number of bytes to write or number of bytes read. + INT TransferLength; + + //! User defined state. + PVOID UserState; + +} KSTM_XFER_CONTEXT; +//! Pointer to a \ref KSTM_XFER_CONTEXT structure. +typedef KSTM_XFER_CONTEXT* PKSTM_XFER_CONTEXT; + +//! Stream information structure. +/*! +* This structure is passed into the stream callback functions. +* The stream context is allocated upon a successful call to \ref StmK_Init. There is only one +* stream context per stream. +* +*/ +typedef struct _KSTM_INFO +{ + //! \ref KUSB_HANDLE this stream uses. + KUSB_HANDLE UsbHandle; + + //! This parameter corresponds to the bEndpointAddress field in the endpoint descriptor. + UCHAR PipeID; + + //! Maximum transfer read/write request allowed pending. + INT MaxPendingTransfers; + + //! Maximum transfer sage size. + INT MaxTransferSize; + + //! Maximum number of I/O request allowed pending. + INT MaxPendingIO; + + //! Populated with the endpoint descriptor for the specified \c PipeID. + USB_ENDPOINT_DESCRIPTOR EndpointDescriptor; + + //! Populated with the driver api for the specified \c UsbHandle. + KUSB_DRIVER_API DriverAPI; + + //! Populated with the device file handle for the specified \c UsbHandle. + HANDLE DeviceHandle; + + //! Stream handle. + KSTM_HANDLE StreamHandle; + + //! Stream info user defined state. + PVOID UserState; + +} KSTM_INFO; +//! Pointer to a \ref KSTM_INFO structure. +typedef KSTM_INFO* PKSTM_INFO; + +//! Function definition for an optional user-defined callback; executed when a transfer error occurs. +/*! \fn INT KUSB_API KSTM_ERROR_CB(_in PKSTM_INFO StreamInfo, _in PKSTM_XFER_CONTEXT XferContext, _in INT XferContextIndex, _in INT ErrorCode) +* \memberof KSTM_CALLBACK +*/ +typedef INT KUSB_API KSTM_ERROR_CB(_in PKSTM_INFO StreamInfo, _in PKSTM_XFER_CONTEXT XferContext, _in INT XferContextIndex, _in INT ErrorCode); + +//! Function definition for an optional user-defined callback; executed to submit a transfer. +/*! \fn INT KUSB_API KSTM_SUBMIT_CB(_in PKSTM_INFO StreamInfo, _in PKSTM_XFER_CONTEXT XferContext, _in INT XferContextIndex, _in LPOVERLAPPED Overlapped) +* \memberof KSTM_CALLBACK +*/ +typedef INT KUSB_API KSTM_SUBMIT_CB(_in PKSTM_INFO StreamInfo, _in PKSTM_XFER_CONTEXT XferContext, _in INT XferContextIndex, _in LPOVERLAPPED Overlapped); + +//! Function definition for an optional user-defined callback; executed for each transfer context when the stream is started with \ref StmK_Start. +/*! \fn INT KUSB_API KSTM_STARTED_CB(_in PKSTM_INFO StreamInfo, _in PKSTM_XFER_CONTEXT XferContext, _in INT XferContextIndex) +* \memberof KSTM_CALLBACK +*/ +typedef INT KUSB_API KSTM_STARTED_CB(_in PKSTM_INFO StreamInfo, _in PKSTM_XFER_CONTEXT XferContext, _in INT XferContextIndex); + +//! Function definition for an optional user-defined callback; executed for each transfer context when the stream is stopped with \ref StmK_Stop. +/*! \fn INT KUSB_API KSTM_STOPPED_CB(_in PKSTM_INFO StreamInfo, _in PKSTM_XFER_CONTEXT XferContext, _in INT XferContextIndex) +* \memberof KSTM_CALLBACK +*/ +typedef INT KUSB_API KSTM_STOPPED_CB(_in PKSTM_INFO StreamInfo, _in PKSTM_XFER_CONTEXT XferContext, _in INT XferContextIndex); + +//! Function definition for an optional user-defined callback; executed when a valid transfer completes. +/*! \fn INT KUSB_API KSTM_COMPLETE_CB(_in PKSTM_INFO StreamInfo, _in PKSTM_XFER_CONTEXT XferContext, _in INT XferContextIndex, _in INT ErrorCode) +* \memberof KSTM_CALLBACK +*/ +typedef INT KUSB_API KSTM_COMPLETE_CB(_in PKSTM_INFO StreamInfo, _in PKSTM_XFER_CONTEXT XferContext, _in INT XferContextIndex, _in INT ErrorCode); + +//! Function definition for an optional user-defined callback; executed immediately after a transfer completes. +/*! \fn KSTM_COMPLETE_RESULT KUSB_API KSTM_BEFORE_COMPLETE_CB(_in PKSTM_INFO StreamInfo, _in PKSTM_XFER_CONTEXT XferContext, _in INT XferContextIndex, _ref PINT ErrorCode) +* \memberof KSTM_CALLBACK +* +* This callback function allows the user to accept or reject the transfer: +* - IN (Read, DeviceToHost) endpoints. +* - KSTM_COMPLETE_RESULT_VALID +* Continue normal processing; add the transfer to the internal complete list and make it available to \ref StmK_Read. +* - KSTM_COMPLETE_RESULT_INVALID +* Ignore this transfer. +* - OUT (Write, HostToDevice) endpoints. +* - KSTM_COMPLETE_RESULT_VALID +* Continue normal processing; add the transfer to the internal complete list and make it available subsequent \ref StmK_Write requests. +* - KSTM_COMPLETE_RESULT_INVALID +* Return this transfer to the internal queued list for automatic resubmission to the device. +* +*/ +typedef KSTM_COMPLETE_RESULT KUSB_API KSTM_BEFORE_COMPLETE_CB(_in PKSTM_INFO StreamInfo, _in PKSTM_XFER_CONTEXT XferContext, _in INT XferContextIndex, _in PINT ErrorCode); + +//! Stream callback structure. +/*! +* \fixedstruct{64} +* +* These optional callback functions are executed from the streams internal thread at various stages of operation. +* +*/ +typedef struct _KSTM_CALLBACK +{ + //! Executed when a transfer error occurs. + KSTM_ERROR_CB* Error; + + //! Executed to submit a transfer. + KSTM_SUBMIT_CB* Submit; + + //! Executed when a valid transfer completes. + KSTM_COMPLETE_CB* Complete; + + //! Executed for every transfer context when the stream is started with \ref StmK_Start. + KSTM_STARTED_CB* Started; + + //! Executed for every transfer context when the stream is stopped with \ref StmK_Stop. + KSTM_STOPPED_CB* Stopped; + + //! Executed immediately after a transfer completes. + KSTM_BEFORE_COMPLETE_CB* BeforeComplete; + + //! fixed structure padding. + UCHAR z_F_i_x_e_d[64 - sizeof(UINT_PTR) * 6]; + +} KSTM_CALLBACK; +//! Pointer to a \ref KSTM_CALLBACK structure. +typedef KSTM_CALLBACK* PKSTM_CALLBACK; +C_ASSERT(sizeof(KSTM_CALLBACK) == 64); + +/**@}*/ + +#endif +/////////////////////////////////////////////////////////////////////// +// L I B U S B K PUBLIC FUNCTIONS //////////////////////////////////// +/////////////////////////////////////////////////////////////////////// + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef _LIBUSBK_LIBK_FUNCTIONS + /*! \addtogroup libk + * @{ + */ + +//! Gets the internal user context for the specified \ref KLIB_HANDLE. + /*! + * + * \param[out] Version + * Receives the libusbK library verson information. + * + * \returns NONE + */ + KUSB_EXP VOID KUSB_API LibK_GetVersion(_out PKLIB_VERSION Version); + +//! Gets the internal user context for the specified \ref KLIB_HANDLE. + /*! + * + * \param[in] Handle + * The handle containg the context to retrieve. + * + * \param[in] HandleType + * Handle type of \c Handle. + * + * \returns + * - on success, The user context value. + * - On failure, returns NULL and sets last error to \c ERROR_INVALID_HANDLE. + * + */ + KUSB_EXP KLIB_USER_CONTEXT KUSB_API LibK_GetContext( + _in KLIB_HANDLE Handle, + _in KLIB_HANDLE_TYPE HandleType); + +//! Sets internal user context for the specified \ref KLIB_HANDLE. + /*! + * + * \param[in] Handle + * The handle containg the context to set. + * + * \param[in] HandleType + * Handle type of \c Handle. + * + * \param[in] ContextValue + * Value to assign to the handle user context space. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP BOOL KUSB_API LibK_SetContext( + _in KLIB_HANDLE Handle, + _in KLIB_HANDLE_TYPE HandleType, + _in KLIB_USER_CONTEXT ContextValue); + +//! Assigns a cleanup callback function to a \ref KLIB_HANDLE. + /*! + * + * \param[in] Handle + * The handle containg the cleanup callback function to set. + * + * \param[in] HandleType + * Handle type of \c Handle. + * + * \param[in] CleanupCB + * User supplied callback function to execute when the handles internal reference count reaches 0. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP BOOL KUSB_API LibK_SetCleanupCallback( + _in KLIB_HANDLE Handle, + _in KLIB_HANDLE_TYPE HandleType, + _in KLIB_HANDLE_CLEANUP_CB* CleanupCB); + +//! Initialize a driver API set. + /*! + * + * \param[out] DriverAPI + * A driver API structure to populate. + * + * \param[in] DriverID + * The driver id of the API set to retrieve. See \ref KUSB_DRVID + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP BOOL KUSB_API LibK_LoadDriverAPI( + _out PKUSB_DRIVER_API DriverAPI, + _in INT DriverID); + +//! Copies the driver API set out of a \ref KUSB_HANDLE + /*! + * + * \param[out] DriverAPI + * A driver API structure to populate. + * + * \param[in] UsbHandle + * Handle containing the desired driver API. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP BOOL KUSB_API LibK_CopyDriverAPI( + _out PKUSB_DRIVER_API DriverAPI, + _in KUSB_HANDLE UsbHandle); + +//! Initialize a driver API function. + /*! + * \param[out] ProcAddress + * Reference to a function pointer that will receive the API function pointer. + * + * \param[in] DriverID + * The driver id of the API to use. See \ref KUSB_DRVID + * + * \param[in] FunctionID + * The function id. See \ref KUSB_FNID + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP BOOL KUSB_API LibK_GetProcAddress( + _out KPROC* ProcAddress, + _in INT DriverID, + _in INT FunctionID); + +//! Sets the default user context for the specified \ref KLIB_HANDLE_TYPE. + /*! + * + * \param[in] HandleType + * The handle type which will be assigned the default ContextValue. + * + * \param[in] ContextValue + * Value assigned to the default user context for the specified \ref KLIB_HANDLE_TYPE. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP BOOL KUSB_API LibK_SetDefaultContext( + _in KLIB_HANDLE_TYPE HandleType, + _in KLIB_USER_CONTEXT ContextValue); + +//! Gets the default user context for the specified \ref KLIB_HANDLE_TYPE. + /*! + * + * \param[in] HandleType + * Handle type used to retrieve the default user context. + * + * \returns + * - on success, The default user context value. + * - On failure, returns NULL and sets last error to \c ERROR_INVALID_HANDLE. + * + */ + KUSB_EXP KLIB_USER_CONTEXT KUSB_API LibK_GetDefaultContext( + _in KLIB_HANDLE_TYPE HandleType); + +//! Initializes the global libusbK process context. + /*! + * + * If this function is not called at startup, libusbK initializes the global libusbK process context automatically. + * + * \param[in] Heap + * A handle to the memory heap libusbK will use for dynamic memory allocation. + * \note The process context itself is always allocated from the proccess heap. + * \note If \b Heap is \b NULL, dynamic memory is allocated from the proccess heap. + * + * \param[in] Reserved + * Reserved for future use. Must set to \b NULL. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP BOOL KUSB_API LibK_Context_Init( + _inopt HANDLE Heap, + _in PVOID Reserved); + +//! Frees the global libusbK process context. + /*! + * + * If this function is not called on exit, libusbK frees the global libusbK process context automatically when it terminates. + * + * \returns NONE. + * + */ + KUSB_EXP VOID KUSB_API LibK_Context_Free(VOID); + + + /**@}*/ +#endif + +#ifndef _LIBUSBK_USBK_FUNCTIONS + /*! \addtogroup usbk + * @{ + */ + +//! Creates/opens a libusbK interface handle from the device list. This is a preferred method. + /*! + * + * \param[out] InterfaceHandle + * Receives a handle configured to the first (default) interface on the device. This handle is required by + * other libusbK routines that perform operations on the default interface. The handle is opaque. To release + * this handle, call the \ref UsbK_Free function. + * + * \param[in] DevInfo + * The device list element to open. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * \c UsbK_Init performs the same tasks as \ref UsbK_Initialize with the following exceptions: + * - Uses a \ref KLST_DEVINFO instead of a file handle created with the Windows CreateFile() API function. + * - File handles are managed internally and are closed when the last \ref KUSB_HANDLE is closed with + * \ref UsbK_Free. To obtain the internal file device handle, See \ref UsbK_GetProperty. + * + * \note + * A \c KUSB_HANDLE is required by other library routines that perform operations on a device. Once + * initialized, it can access all interfaces/endpoints of a device. An initialized handle can be cloned with + * \ref UsbK_Clone or \ref UsbK_GetAssociatedInterface. A Cloned handle will behave just as the orignal + * except in will maintain it's own \b selected interface setting. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_Init ( + _out KUSB_HANDLE* InterfaceHandle, + _in KLST_DEVINFO_HANDLE DevInfo); + +//! Frees a libusbK interface handle. + /*! + * + * \param[in] InterfaceHandle + * Handle to an interface on the device. This handle must be created by a previous call to \ref UsbK_Init, + * \ref UsbK_Initialize, \ref UsbK_GetAssociatedInterface, or \ref UsbK_Clone. + * + * \returns TRUE. + * + * The \ref UsbK_Free function releases resources alocated to the InterfaceHandle. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_Free ( + _in KUSB_HANDLE InterfaceHandle); + +//! Claims the specified interface by number or index. + /*! + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[in] NumberOrIndex + * Interfaces can be claimed or released by a interface index or \c bInterfaceNumber. + * - Interface indexes always start from 0 and continue sequentially for all interfaces of the device. + * - An interface number always represents the actual \ref USB_INTERFACE_DESCRIPTOR::bInterfaceNumber. + * Interface numbers are not guaranteed to be zero based or sequential. + * + * \param[in] IsIndex + * If TRUE, \c NumberOrIndex represents an interface index.\n if FALSE \c NumberOrIndex represents a + * \c bInterfaceNumber. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * Claiming an interface allows applications a way to prevent other applications or multiple instances of the + * same application from using an interface at the same time. + * + * When an interface is claimed with \ref UsbK_ClaimInterface it performs the following actions: + * - Checks if the interface exists. If it does not, returns FALSE and sets last error to + * ERROR_NO_MORE_ITEMS. + * - The default (or current) interface for the device is changed to \c NumberOrIndex. + * - libusb0.sys and libusbK.sys: + * - A request to claim the interface is sent to the driver. If the interface is not claimed or already + * claimed by the application the request succeeds. If the interface is claimed by another application, + * \ref UsbK_ClaimInterface returns FALSE and sets last error to \c ERROR_BUSY. In this case the The + * default (or current) interface for the device is \b still changed to \c NumberOrIndex. + * - WinUSB.sys: All WinUSB device interfaces are claimed when the device is opened. This function performs + * identically to \ref UsbK_SelectInterface + * + */ + KUSB_EXP BOOL KUSB_API UsbK_ClaimInterface ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR NumberOrIndex, + _in BOOL IsIndex); + +//! Releases the specified interface by number or index. + /*! + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[in] NumberOrIndex + * Interfaces can be claimed or released by a interface index or \c bInterfaceNumber. + * - Interface indexes always start from 0 and continue sequentially for all interfaces of the device. + * - An interface number always represents the actual \ref USB_INTERFACE_DESCRIPTOR::bInterfaceNumber. + * Interface numbers are not guaranteed to be zero based or sequential. + * + * \param[in] IsIndex + * If TRUE, \c NumberOrIndex represents an interface index.\n if FALSE \c NumberOrIndex represents a + * \c bInterfaceNumber. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * When an interface is release with \ref UsbK_ReleaseInterface it performs the following actions: + * - Checks if the interface exists. If it does not, returns FALSE and sets last error to + * ERROR_NO_MORE_ITEMS. + * - The default (or current) interface for the device is changed to the previously claimed interface. + * - libusb0.sys and libusbK.sys: + * - A request to release the interface is sent to the driver. If the interface is not claimed by a + * different application the request succeeds. If the interface is claimed by another application, + * \ref UsbK_ReleaseInterface returns FALSE and sets last error to \c ERROR_BUSY. In this case, the + * default/current interface for the device is \b still changed to the previously claimed interface. + * - WinUSB.sys: No other action needed, returns TRUE. + * + * \note + * When an interface is released, it is moved to the bottom if an interface stack making a previously claimed + * interface the current. This will continue to occur regardless of whether the interface is claimed. For + * this reason, \ref UsbK_ReleaseInterface can be used as a means to change the current/default interface of + * an \c InterfaceHandle without claiming the interface. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_ReleaseInterface ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR NumberOrIndex, + _in BOOL IsIndex); + +//! Sets the alternate setting of the specified interface. + /*! + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[in] NumberOrIndex + * Interfaces can be specified by a interface index or \c bInterfaceNumber. + * - Interface indexes always start from 0 and continue sequentially for all interfaces of the device. + * - An interface number always represents the actual \ref USB_INTERFACE_DESCRIPTOR::bInterfaceNumber. + * Interface numbers are not guaranteed to be zero based or sequential. + * + * \param[in] IsIndex + * If TRUE, \c NumberOrIndex represents an interface index.\n if FALSE \c NumberOrIndex represents a + * \c bInterfaceNumber. + * + * \param[in] AltSettingNumber + * The bAlternateSetting to activate. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * \ref UsbK_SetAltInterface performs the same task as \ref UsbK_SetCurrentAlternateSetting except it + * provides the option of specifying which interfaces alternate setting to activate. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_SetAltInterface ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR NumberOrIndex, + _in BOOL IsIndex, + _in UCHAR AltSettingNumber); + +//! Gets the alternate setting for the specified interface. + /*! + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[in] NumberOrIndex + * Interfaces can be specified by a interface index or \c bInterfaceNumber. + * - Interface indexes always start from 0 and continue sequentially for all interfaces of the device. + * - An interface number always represents the actual \ref USB_INTERFACE_DESCRIPTOR::bInterfaceNumber. + * Interface numbers are not guaranteed to be zero based or sequential. + * + * \param[in] IsIndex + * If TRUE, \c NumberOrIndex represents an interface index.\n if FALSE \c NumberOrIndex represents a + * \c bInterfaceNumber. + * + * \param[out] AltSettingNumber + * On success, returns the active bAlternateSetting. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * \ref UsbK_GetAltInterface performs the same task as \ref UsbK_GetCurrentAlternateSetting except it + * provides the option of specifying which interfaces alternate setting is to be retrieved. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_GetAltInterface ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR NumberOrIndex, + _in BOOL IsIndex, + _out PUCHAR AltSettingNumber); + +//! Gets the requested descriptor. This is a synchronous operation. + /*! + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[in] DescriptorType + * A value that specifies the type of descriptor to return. This parameter corresponds to the bDescriptorType + * field of a standard device descriptor, whose values are described in the Universal Serial Bus + * specification. + * + * \param[in] Index + * The descriptor index. For an explanation of the descriptor index, see the Universal Serial Bus + * specification (www.usb.org). + * + * \param[in] LanguageID + * A value that specifies the language identifier, if the requested descriptor is a string descriptor. + * + * \param[out] Buffer + * A caller-allocated buffer that receives the requested descriptor. + * + * \param[in] BufferLength + * The length, in bytes, of Buffer. + * + * \param[out] LengthTransferred + * The number of bytes that were copied into Buffer. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * If the device descriptor or active config descriptor is requested, \ref UsbK_GetDescriptor retrieves + * cached data and this becomes a non-blocking, non I/O request. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_GetDescriptor ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR DescriptorType, + _in UCHAR Index, + _in USHORT LanguageID, + _out PUCHAR Buffer, + _in UINT BufferLength, + _outopt PUINT LengthTransferred); + +//! Transmits control data over a default control endpoint. + /*! + * + * \param[in] InterfaceHandle + * A valid libusbK interface handle returned by: + * - \ref UsbK_Init + * - \ref UsbK_Initialize + * - \ref UsbK_GetAssociatedInterface + * - \ref UsbK_Clone + * + * \param[in] SetupPacket + * The 8-byte setup packet of type WINUSB_SETUP_PACKET. + * + * \param[in,out] Buffer + * A caller-allocated buffer that contains the data to transfer. + * + * \param[in] BufferLength + * The number of bytes to transfer, not including the setup packet. This number must be less than or equal to + * the size, in bytes, of Buffer. + * + * \param[out] LengthTransferred + * A pointer to a UINT variable that receives the actual number of transferred bytes. If the application + * does not expect any data to be transferred during the data phase (BufferLength is zero), LengthTransferred + * can be NULL. + * + * \param[in] Overlapped + * An optional pointer to an OVERLAPPED structure, which is used for asynchronous operations. If this + * parameter is specified, \ref UsbK_ControlTransfer immediately returns, and the event is signaled when the + * operation is complete. If Overlapped is not supplied, the \ref UsbK_ControlTransfer function transfers + * data synchronously. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. If an + * \c Overlapped member is supplied and the operation succeeds this function returns FALSE and sets last + * error to ERROR_IO_PENDING. + * + * A \ref UsbK_ControlTransfer is never cached. These requests always go directly to the usb device. + * + * \attention + * This function should not be used for operations supported by the library.\n e.g. + * \ref UsbK_SetConfiguration, \ref UsbK_SetAltInterface, etc.. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_ControlTransfer ( + _in KUSB_HANDLE InterfaceHandle, + _in WINUSB_SETUP_PACKET SetupPacket, + _refopt PUCHAR Buffer, + _in UINT BufferLength, + _outopt PUINT LengthTransferred, + _inopt LPOVERLAPPED Overlapped); + +//! Sets the power policy for a device. + /*! + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[in] PolicyType + * A value that specifies the power policy to set. The following table describes symbolic constants that are + * defined in \ref lusbk_shared.h. + * + * - AUTO_SUSPEND (0x81) + * - Specifies the auto-suspend policy type; the power policy parameter must be specified by the caller in + * the Value parameter. + * - For auto-suspend, the Value parameter must point to a UCHAR variable. + * - If Value is TRUE (nonzero), the USB stack suspends the device if the device is idle. A device is idle + * if there are no transfers pending, or if the only pending transfers are IN transfers to interrupt or + * bulk endpoints. + * - The default value is determined by the value set in the DefaultIdleState registry setting. By default, + * this value is TRUE. + * + * - SUSPEND_DELAY (0x83) + * - Specifies the suspend-delay policy type; the power policy parameter must be specified by the caller in + * the Value parameter. + * - For suspend-delay, Value must point to a UINT variable. + * - Value specifies the minimum amount of time, in milliseconds, that the driver must wait post transfer + * before it can suspend the device. + * - The default value is determined by the value set in the DefaultIdleTimeout registry setting. By + * default, this value is five seconds. + * + * \param[in] ValueLength + * The size, in bytes, of the buffer at Value. + * + * \param[in] Value + * The new value for the power policy parameter. Data type and value for Value depends on the type of power + * policy passed in PolicyType. For more information, see PolicyType. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * The following list summarizes the effects of changes to power management states: + * - All pipe handles, interface handles, locks, and alternate settings are preserved across power management + * events. + * - Any transfers that are in progress are suspended when a device transfers to a low power state, and they + * are resumed when the device is restored to a working state. + * - The device and system must be in a working state before the client can restore a device-specific + * configuration. Clients can determine whether the device and system are in a working state from the + * WM_POWERBROADCAST message. + * - The client can indicate that an interface is idle by calling \ref UsbK_SetPowerPolicy. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_SetPowerPolicy ( + _in KUSB_HANDLE InterfaceHandle, + _in UINT PolicyType, + _in UINT ValueLength, + _in PVOID Value); + +//! Gets the power policy for a device. + /*! + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[in] PolicyType + * A value that specifies the power policy parameter to retrieve in Value. The following table describes + * symbolic constants that are defined in \ref lusbk_shared.h. + * + * - AUTO_SUSPEND (0x81) + * - If the caller specifies a power policy of AUTO_SUSPEND, \ref UsbK_GetPowerPolicy returns the value of + * the auto suspend policy parameter in the Value parameter. + * - If Value is TRUE (that is, nonzero), the USB stack suspends the device when no transfers are pending + * or the only transfers pending are IN transfers on an interrupt or bulk endpoint. + * - The value of the DefaultIdleState registry value determines the default value of the auto suspend + * policy parameter. + * - The Value parameter must point to a UCHAR variable. + * + * - SUSPEND_DELAY (0x83) + * - If the caller specifies a power policy of SUSPEND_DELAY, \ref UsbK_GetPowerPolicy returns the value of + * the suspend delay policy parameter in Value. + * - The suspend delay policy parameter specifies the minimum amount of time, in milliseconds, that the + * driver must wait after any transfer before it can suspend the device. + * - Value must point to a UINT variable. + * + * \param[in,out] ValueLength + * A pointer to the size of the buffer that Value. On output, ValueLength receives the size of the data that + * was copied into the Value buffer. + * + * \param[out] Value + * A buffer that receives the specified power policy parameter. For more information, see PolicyType. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_GetPowerPolicy ( + _in KUSB_HANDLE InterfaceHandle, + _in UINT PolicyType, + _ref PUINT ValueLength, + _out PVOID Value); + +//! Sets the device configuration number. + /*! + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[in] ConfigurationNumber + * The configuration number to activate. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * \ref UsbK_SetConfiguration is only supported with libusb0.sys. If the driver in not libusb0.sys, this + * function performs the following emulation actions: + * - If the requested configuration number is the current configuration number, returns TRUE. + * - If the requested configuration number is one other than the current configuration number, returns FALSE + * and set last error to \c ERROR_NO_MORE_ITEMS. + * + * This function will fail if there are pending I/O operations or there are other libusbK interface handles + * referencing the device. \sa UsbK_Free + * + */ + KUSB_EXP BOOL KUSB_API UsbK_SetConfiguration ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR ConfigurationNumber); + +//! Gets the device current configuration number. + /*! + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[out] ConfigurationNumber + * On success, receives the active configuration number. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_GetConfiguration ( + _in KUSB_HANDLE InterfaceHandle, + _out PUCHAR ConfigurationNumber); + +//! Resets the usb device of the specified interface handle. (port cycle). + /*! + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_ResetDevice ( + _in KUSB_HANDLE InterfaceHandle); + +//! Creates a libusbK handle for the device specified by a file handle. + /*! + * + * \attention + * This function is supported for WinUSB API compatibility only and is not intended for new development. + * libusbK library users should use \ref UsbK_Init instead. (regardless of the driver they've selected) + * + * \param[in] DeviceHandle + * The handle to the device that CreateFile returned. libusbK uses overlapped I/O, so FILE_FLAG_OVERLAPPED + * must be specified in the dwFlagsAndAttributes parameter of CreateFile call for DeviceHandle to have the + * characteristics necessary for this to function properly. + * + * \param[out] InterfaceHandle + * Receives a handle configured to the first (default) interface on the device. This handle is required by + * other libusbK routines that perform operations on the default interface. The handle is opaque. To release + * this handle, call the \ref UsbK_Free function. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * When \ref UsbK_Initialize is called, the policy settings of the interface are reset to the default values. + * + * The \ref UsbK_Initialize call queries the underlying USB stack for various descriptors and allocates + * enough memory to store the retrieved descriptor data. + * + * \ref UsbK_Initialize first retrieves the device descriptor and then gets the associated configuration + * descriptor. From the configuration descriptor, the call derives the associated interface descriptors and + * stores them in an array. The interfaces in the array are identified by zero-based indexes. An index value + * of 0 indicates the first interface (the default interface), a value of 1 indicates the second associated + * interface, and so on. \ref UsbK_Initialize parses the default interface descriptor for the endpoint + * descriptors and caches information such as the associated pipes or state specific data. The handle + * received in the InterfaceHandle parameter will have its default interface configured to the first + * interface in the array. + * + * If an application wants to use another interface on the device, it can call + * \ref UsbK_GetAssociatedInterface, or \ref UsbK_ClaimInterface. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_Initialize ( + _in HANDLE DeviceHandle, + _out KUSB_HANDLE* InterfaceHandle); + +//! Selects the specified interface by number or index as the current interface. + /*! + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[in] NumberOrIndex + * Interfaces can be claimed or released by a interface index or \c bInterfaceNumber. + * - Interface indexes always start from 0 and continue sequentially for all interfaces of the device. + * - An interface number always represents the actual \ref USB_INTERFACE_DESCRIPTOR::bInterfaceNumber. + * Interface numbers are not guaranteed to be zero based or sequential. + * + * \param[in] IsIndex + * If TRUE, \c NumberOrIndex represents an interface index.\n if FALSE \c NumberOrIndex represents a + * \c bInterfaceNumber. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * \sa UsbK_ClaimInterface + * + */ + KUSB_EXP BOOL KUSB_API UsbK_SelectInterface ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR NumberOrIndex, + _in BOOL IsIndex); + +//! Retrieves a handle for an associated interface. + /*! + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[in] AssociatedInterfaceIndex + * An index that specifies the associated interface to retrieve. A value of 0 indicates the first associated + * interface, a value of 1 indicates the second associated interface, and so on. + * + * \param[out] AssociatedInterfaceHandle + * A handle for the associated interface. Callers must pass this interface handle to libusbK Functions + * exposed by libusbK.dll. To close this handle, call \ref UsbK_Free. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * The \ref UsbK_GetAssociatedInterface function retrieves an opaque handle for an associated interface. This + * is a synchronous operation. + * + * The first associated interface is the interface that immediately follows the current (or default) + * interface of the specified /c InterfaceHandle. + * + * The handle that \ref UsbK_GetAssociatedInterface returns must be released by calling \ref UsbK_Free. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_GetAssociatedInterface ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR AssociatedInterfaceIndex, + _out KUSB_HANDLE* AssociatedInterfaceHandle); + +//! Clones the specified interface handle. + /*! + * + * Each cloned interface handle maintains it's own selected interface. + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[out] DstInterfaceHandle + * On success, the cloned return handle. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_Clone ( + _in KUSB_HANDLE InterfaceHandle, + _out KUSB_HANDLE* DstInterfaceHandle); + +//! Retrieves the interface descriptor for the specified alternate interface settings for a particular interface handle. + /*! + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[in] AltSettingIndex + * A value that indicates which alternate setting index to return. A value of 0 indicates the first alternate + * setting, a value of 1 indicates the second alternate setting, and so on. + * + * \param[out] UsbAltInterfaceDescriptor + * A pointer to a caller-allocated \ref USB_INTERFACE_DESCRIPTOR structure that contains information about + * the interface that AltSettingNumber specified. + * + * The \ref UsbK_QueryInterfaceSettings call searches the current/default interface array for the alternate + * interface specified by the caller in the AltSettingIndex. If the specified alternate interface is found, + * the function populates the caller-allocated USB_INTERFACE_DESCRIPTOR structure. If the specified alternate + * interface is not found, then the call fails with the ERROR_NO_MORE_ITEMS code. + * + * To change the current/default interface, see \ref UsbK_SelectInterface and \ref UsbK_ClaimInterface + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_QueryInterfaceSettings ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR AltSettingIndex, + _out PUSB_INTERFACE_DESCRIPTOR UsbAltInterfaceDescriptor); + +//! Retrieves information about the physical device that is associated with a libusbK handle. + /*! + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[in] InformationType + * A value that specifies which interface information value to retrieve. On input, InformationType must have + * the following value: \c DEVICE_SPEED (0x01). + * + * \param[in,out] BufferLength + * The maximum number of bytes to read. This number must be less than or equal to the size, in bytes, of + * Buffer. On output, BufferLength is set to the actual number of bytes that were copied into Buffer. + * + * \param[in,out] Buffer + * A caller-allocated buffer that receives the requested value. On output, Buffer indicates the device speed: + * - (0x01) low/full speed device. + * - (0x03) high speed device. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_QueryDeviceInformation ( + _in KUSB_HANDLE InterfaceHandle, + _in UINT InformationType, + _ref PUINT BufferLength, + _ref PVOID Buffer); + +//! Sets the alternate setting of an interface. + /*! + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[in] AltSettingNumber + * The value that is contained in the bAlternateSetting member of the \ref USB_INTERFACE_DESCRIPTOR + * structure. This structure can be populated by the \ref UsbK_QueryInterfaceSettings routine. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * Sets the active bAlternateSetting for the current/default interface. + * + * To change the default/current interface see \ref UsbK_ClaimInterface and \ref UsbK_ReleaseInterface + * \sa UsbK_SetAltInterface + * + */ + KUSB_EXP BOOL KUSB_API UsbK_SetCurrentAlternateSetting ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR AltSettingNumber); + +//! Gets the current alternate interface setting for an interface. + /*! + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[out] AltSettingNumber + * A pointer to an unsigned character that receives an integer that indicates the current alternate setting. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * Gets the active bAlternateSetting for the current/default interface. + * + * To change the default/current interface see \ref UsbK_ClaimInterface and \ref UsbK_ReleaseInterface + * \sa UsbK_GetAltInterface + * + */ + KUSB_EXP BOOL KUSB_API UsbK_GetCurrentAlternateSetting ( + _in KUSB_HANDLE InterfaceHandle, + _out PUCHAR AltSettingNumber); + +//! Retrieves information about a pipe that is associated with an interface. + /*! + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[in] AltSettingNumber + * A value that specifies the alternate interface to return the information for. + * + * \param[in] PipeIndex + * A value that specifies the pipe to return information about. This value is not the same as the + * bEndpointAddress field in the endpoint descriptor. A PipeIndex value of 0 signifies the first endpoint + * that is associated with the interface, a value of 1 signifies the second endpoint, and so on. PipeIndex + * must be less than the value in the bNumEndpoints field of the interface descriptor. + * + * \param[out] PipeInformation + * A pointer, on output, to a caller-allocated \ref WINUSB_PIPE_INFORMATION structure that contains pipe + * information. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * The \ref UsbK_QueryPipe function does not retrieve information about the control pipe. + * + * Each interface on the USB device can have multiple endpoints. To communicate with each of these endpoints, + * the bus driver creates pipes for each endpoint on the interface. The pipe indices are zero-based. + * Therefore for n number of endpoints, the pipes' indices are set from n-1. \ref UsbK_QueryPipe parses the + * configuration descriptor to get the interface specified by the caller. It searches the interface + * descriptor for the endpoint descriptor associated with the caller-specified pipe. If the endpoint is + * found, the function populates the caller-allocated \ref WINUSB_PIPE_INFORMATION structure with information + * from the endpoint descriptor. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_QueryPipe ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR AltSettingNumber, + _in UCHAR PipeIndex, + _out PWINUSB_PIPE_INFORMATION PipeInformation); + +//! Sets the policy for a specific pipe associated with an endpoint on the device. This is a synchronous operation. + /*! + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[in] PipeID + * An 8-bit value that consists of a 7-bit address and a direction bit. This parameter corresponds to the + * bEndpointAddress field in the endpoint descriptor. + * + * \param[in] PolicyType + * A UINT variable that specifies the policy parameter to change. The Value parameter contains the new value + * for the policy parameter. See the remarks section for information about each of the pipe policies and the + * resulting behavior. + * + * \param[in] ValueLength + * The size, in bytes, of the buffer at Value. + * + * \param[in] Value + * The new value for the policy parameter that PolicyType specifies. The size of this input parameter depends + * on the policy to change. For information about the size of this parameter, see the description of the + * PolicyType parameter. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * The following list describes symbolic constants that are defined in \ref lusbk_shared.h + * + * - \c SHORT_PACKET_TERMINATE (0x01) + * - The default value is \c FALSE. + * - To enable \c SHORT_PACKET_TERMINATE, in Value pass the address of a caller-allocated \c UCHAR variable + * set to \c TRUE (nonzero). + * - Enabling \c SHORT_PACKET_TERMINATE causes the driver to send a zero-length packet at the end of every + * write request to the host controller. + * + * - \c AUTO_CLEAR_STALL (0x02) + * - The default value is \c FALSE. To enable \c AUTO_CLEAR_STALL, in Value pass the address of a + * caller-allocated \c UCHAR variable set to \c TRUE (nonzero). + * - Enabling \c AUTO_CLEAR_STALL causes libusbK to reset the pipe in order to automatically clear the + * stall condition. Data continues to flow on the bulk and interrupt \c IN endpoints again as soon as a + * new or a queued transfer arrives on the endpoint. This policy parameter does not affect control pipes. + * - Disabling \c AUTO_CLEAR_STALL causes all transfers (that arrive to the endpoint after the stalled + * transfer) to fail until the caller manually resets the endpoint's pipe by calling \ref UsbK_ResetPipe. + * + * - \c PIPE_TRANSFER_TIMEOUT (0x03) + * - The default value is zero. To set a time-out value, in Value pass the address of a caller-allocated + * \c UINT variable that contains the time-out interval. + * - The \c PIPE_TRANSFER_TIMEOUT value specifies the time-out interval, in milliseconds. The host + * controller cancels transfers that do not complete within the specified time-out interval. + * - A value of zero (default) indicates that transfers do not time out because the host controller never + * cancels the transfer. + * + * - \c IGNORE_SHORT_PACKETS (0x04) + * - The default value is \c FALSE. To enable \c IGNORE_SHORT_PACKETS, in Value pass the address of a + * caller-allocated \c UCHAR variable set to \c TRUE (nonzero). + * - Enabling \c IGNORE_SHORT_PACKETS causes the host controller to not complete a read operation after it + * receives a short packet. Instead, the host controller completes the operation only after the host has + * read the specified number of bytes. + * - Disabling \c IGNORE_SHORT_PACKETS causes the host controller to complete a read operation when either + * the host has read the specified number of bytes or the host has received a short packet. + * + * - \c ALLOW_PARTIAL_READS (0x05) + * - The default value is \c TRUE (nonzero). To disable \c ALLOW_PARTIAL_READS, in Value pass the address + * of a caller-allocated \c UCHAR variable set to \c FALSE (zero). + * - Disabling \c ALLOW_PARTIAL_READS causes the read requests to fail whenever the device returns more + * data (on bulk and interrupt \c IN endpoints) than the caller requested. + * - Enabling \c ALLOW_PARTIAL_READS causes libusbK to save or discard the extra data when the device + * returns more data (on bulk and interrupt \c IN endpoints) than the caller requested. This behavior is + * defined by setting the \c AUTO_FLUSH value. + * + * - \c AUTO_FLUSH (0x06) + * - The default value is \c FALSE (zero). To enable \c AUTO_FLUSH, in Value pass the address of a + * caller-allocated \c UCHAR variable set to \c TRUE (nonzero). + * - \c AUTO_FLUSH must be used with \c ALLOW_PARTIAL_READS enabled. If \c ALLOW_PARTIAL_READS is \c TRUE, + * the value of \c AUTO_FLUSH determines the action taken by libusbK when the device returns more data + * than the caller requested. + * - Disabling \c ALLOW_PARTIAL_READS causes libusbK to ignore the \c AUTO_FLUSH value. + * - Disabling \c AUTO_FLUSH with \c ALLOW_PARTIAL_READS enabled causes libusbK to save the extra data, add + * the data to the beginning of the caller's next read request, and send it to the caller in the next + * read operation. + * - Enabling \c AUTO_FLUSH with \c ALLOW_PARTIAL_READS enabled causes libusbK to discard the extra data + * remaining from the read request. + * + * - \c RAW_IO (0x07) + * - The default value is \c FALSE (zero). To enable \c RAW_IO, in Value pass the address of a + * caller-allocated \c UCHAR variable set to \c TRUE (nonzero). + * - Enabling \c RAW_IO causes libusbK to send data directly to the \c USB driver stack, bypassing + * libusbK's queuing and error handling mechanism. + * - The buffers that are passed to \ref UsbK_ReadPipe must be configured by the caller as follows: + * - The buffer length must be a multiple of the maximum endpoint packet size. + * - The length must be less than or equal to the value of \c MAXIMUM_TRANSFER_SIZE retrieved by + * \ref UsbK_GetPipePolicy. + * - Disabling \c RAW_IO (\c FALSE) does not impose any restriction on the buffers that are passed to + * \ref UsbK_ReadPipe. + * + * - \c RESET_PIPE_ON_RESUME (0x09) + * - The default value is \c FALSE (zero). To enable \c RESET_PIPE_ON_RESUME, in Value pass the address of + * a caller-allocated \c UCHAR variable set to \c TRUE (nonzero). + * - \c TRUE (or a nonzero value) indicates that on resume from suspend, libusbK resets the endpoint before + * it allows the caller to send new requests to the endpoint. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_SetPipePolicy ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID, + _in UINT PolicyType, + _in UINT ValueLength, + _in PVOID Value); + +//! Gets the policy for a specific pipe (endpoint). + /*! + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[in] PipeID + * An 8-bit value that consists of a 7-bit address and a direction bit. This parameter corresponds to the + * bEndpointAddress field in the endpoint descriptor. + * + * \param[in] PolicyType + * A UINT variable that specifies the policy parameter to retrieve. The current value for the policy + * parameter is retrieved the Value parameter. + * + * \param[in,out] ValueLength + * A pointer to the size, in bytes, of the buffer that Value points to. On output, ValueLength receives the + * size, in bytes, of the data that was copied into the Value buffer. + * + * \param[out] Value + * A pointer to a buffer that receives the specified pipe policy value. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_GetPipePolicy ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID, + _in UINT PolicyType, + _ref PUINT ValueLength, + _out PVOID Value); + +//! Reads data from the specified pipe. + /*! + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[in] PipeID + * An 8-bit value that consists of a 7-bit address and a direction bit. This parameter corresponds to the + * bEndpointAddress field in the endpoint descriptor. + * + * \param[out] Buffer + * A caller-allocated buffer that receives the data that is read. + * + * \param[in] BufferLength + * The maximum number of bytes to read. This number must be less than or equal to the size, in bytes, of + * Buffer. + * + * \param[out] LengthTransferred + * A pointer to a UINT variable that receives the actual number of bytes that were copied into Buffer. For + * more information, see Remarks. + * + * \param[in] Overlapped + * An optional pointer to an overlapped structure for asynchronous operations. This can be a \ref KOVL_HANDLE + * or a pointer to a standard windows OVERLAPPED structure. If this parameter is specified, \c UsbK_ReadPipe + * returns immediately rather than waiting synchronously for the operation to complete before returning. An + * event is signaled when the operation is complete. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_ReadPipe ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID, + _out PUCHAR Buffer, + _in UINT BufferLength, + _outopt PUINT LengthTransferred, + _inopt LPOVERLAPPED Overlapped); + +//! Writes data to a pipe. + /*! + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[in] PipeID + * An 8-bit value that consists of a 7-bit address and a direction bit. This parameter corresponds to the + * bEndpointAddress field in the endpoint descriptor. + * + * \param[in] Buffer + * A caller-allocated buffer the data is written from. + * + * \param[in] BufferLength + * The maximum number of bytes to write. This number must be less than or equal to the size, in bytes, of + * Buffer. + * + * \param[out] LengthTransferred + * A pointer to a UINT variable that receives the actual number of bytes that were transferred from Buffer. + * For more information, see Remarks. + * + * \param[in] Overlapped + * An optional pointer to an overlapped structure for asynchronous operations. This can be a \ref KOVL_HANDLE + * or a pointer to a standard windows OVERLAPPED structure. If this parameter is specified, \c UsbK_WritePipe + * returns immediately rather than waiting synchronously for the operation to complete before returning. An + * event is signaled when the operation is complete. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_WritePipe ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID, + _in PUCHAR Buffer, + _in UINT BufferLength, + _outopt PUINT LengthTransferred, + _inopt LPOVERLAPPED Overlapped); + +//! Resets the data toggle and clears the stall condition on a pipe. + /*! + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[in] PipeID + * An 8-bit value that consists of a 7-bit address and a direction bit. This parameter corresponds to the + * bEndpointAddress field in the endpoint descriptor. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_ResetPipe ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID); + +//! Aborts all of the pending transfers for a pipe. + /*! + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[in] PipeID + * An 8-bit value that consists of a 7-bit address and a direction bit. This parameter corresponds to the + * bEndpointAddress field in the endpoint descriptor. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_AbortPipe ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID); + +//! Discards any data that is cached in a pipe. + /*! + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[in] PipeID + * An 8-bit value that consists of a 7-bit address and a direction bit. This parameter corresponds to the + * bEndpointAddress field in the endpoint descriptor. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_FlushPipe ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID); + +//! Reads from an isochronous pipe. + /*! + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[in] PipeID + * An 8-bit value that consists of a 7-bit address and a direction bit. This parameter corresponds to the + * bEndpointAddress field in the endpoint descriptor. + * + * \param[out] Buffer + * A caller-allocated buffer that receives the data that is read. + * + * \param[in] BufferLength + * The maximum number of bytes to read. This number must be less than or equal to the size, in bytes, of + * Buffer. + * + * \param[in] Overlapped + * A \b required pointer to an overlapped structure for asynchronous operations. This can be a + * \ref KOVL_HANDLE or a pointer to a standard windows OVERLAPPED structure. If this parameter is specified, + * \c UsbK_IsoReadPipe returns immediately rather than waiting synchronously for the operation to complete + * before returning. An event is signaled when the operation is complete. + * + * \param[in,out] IsoContext + * Pointer to an isochronous transfer context created with \ref IsoK_Init. If \c IsoContext is NULL, + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * \par Overlapped I/O considerations + * If an \c Overlapped parameter is specified and the transfer is submitted successfully, the function + * returns \b FALSE and sets last error to \c ERROR_IO_PENDING. When using overlapped I/O, users may ignore + * the return results of this function and instead use the return results from one of the \ref ovlk wait + * functions or from \ref UsbK_GetOverlappedResult. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_IsoReadPipe ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID, + _out PUCHAR Buffer, + _in UINT BufferLength, + _in LPOVERLAPPED Overlapped, + _refopt PKISO_CONTEXT IsoContext); + +//! Writes to an isochronous pipe. + /*! + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[in] PipeID + * An 8-bit value that consists of a 7-bit address and a direction bit. This parameter corresponds to the + * bEndpointAddress field in the endpoint descriptor. + * + * \param[in] Buffer + * A caller-allocated buffer that receives the data that is read. + * + * \param[in] BufferLength + * The maximum number of bytes to write. This number must be less than or equal to the size, in bytes, of + * Buffer. + * + * \param[in] Overlapped + * An optional pointer to an overlapped structure for asynchronous operations. This can be a \ref KOVL_HANDLE + * or a pointer to a standard windows OVERLAPPED structure. If this parameter is specified, + * \c UsbK_IsoWritePipe returns immediately rather than waiting synchronously for the operation to complete + * before returning. An event is signaled when the operation is complete. + * + * \param[in,out] IsoContext + * Pointer to an isochronous transfer context created with \ref IsoK_Init. See remarks below. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_IsoWritePipe ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID, + _in PUCHAR Buffer, + _in UINT BufferLength, + _in LPOVERLAPPED Overlapped, + _refopt PKISO_CONTEXT IsoContext); + +//! Retrieves the current USB frame number. + /*! + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[out] FrameNumber + * A pointer to a location that receives the current 32-bit frame number on the USB bus (from the host + * controller driver). + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_GetCurrentFrameNumber ( + _in KUSB_HANDLE InterfaceHandle, + _out PUINT FrameNumber); + +//! Retrieves the results of an overlapped operation on the specified libusbK handle. + /*! + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[in] Overlapped + * A pointer to a standard windows OVERLAPPED structure that was specified when the overlapped operation was + * started. + * + * \param[out] lpNumberOfBytesTransferred + * A pointer to a variable that receives the number of bytes that were actually transferred by a read or + * write operation. + * + * \param[in] bWait + * If this parameter is TRUE, the function does not return until the operation has been completed. If this + * parameter is FALSE and the operation is still pending, the function returns FALSE and the GetLastError + * function returns ERROR_IO_INCOMPLETE. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * This function is like the Win32 API routine, GetOverlappedResult, with one difference; instead of passing + * a file handle that is returned from CreateFile, the caller passes an interface handle that is returned + * from \ref UsbK_Initialize, \ref UsbK_Init, or \ref UsbK_GetAssociatedInterface. The caller can use either + * API routine, if the appropriate handle is passed. The \ref UsbK_GetOverlappedResult function extracts the + * file handle from the interface handle and then calls GetOverlappedResult. \n + * + * The results that are reported by the \ref UsbK_GetOverlappedResult function are those from the specified + * handle's last overlapped operation to which the specified standard windows OVERLAPPED structure was + * provided, and for which the operation's results were pending. A pending operation is indicated when the + * function that started the operation returns FALSE, and the GetLastError routine returns ERROR_IO_PENDING. + * When an I/O operation is pending, the function that started the operation resets the hEvent member of the + * standard windows OVERLAPPED structure to the nonsignaled state. Then when the pending operation has been + * completed, the system sets the event object to the signaled state. \n + * + * The caller can specify that an event object is manually reset in the standard windows OVERLAPPED + * structure. If an automatic reset event object is used, the event handle must not be specified in any other + * wait operation in the interval between starting the overlapped operation and the call to + * \ref UsbK_GetOverlappedResult. For example, the event object is sometimes specified in one of the wait + * routines to wait for the operation to be completed. When the wait routine returns, the system sets an + * auto-reset event's state to nonsignaled, and a successive call to \ref UsbK_GetOverlappedResult with the + * bWait parameter set to TRUE causes the function to be blocked indefinitely. + * + * If the bWait parameter is TRUE, \ref UsbK_GetOverlappedResult determines whether the pending operation has + * been completed by waiting for the event object to be in the signaled state. + * + * If the hEvent member of the standard windows OVERLAPPED structure is NULL, the system uses the state of + * the file handle to signal when the operation has been completed. Do not use file handles for this purpose. + * It is better to use an event object because of the confusion that can occur when multiple concurrent + * overlapped operations are performed on the same file. In this situation, you cannot know which operation + * caused the state of the object to be signaled. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_GetOverlappedResult ( + _in KUSB_HANDLE InterfaceHandle, + _in LPOVERLAPPED Overlapped, + _out PUINT lpNumberOfBytesTransferred, + _in BOOL bWait); + +//! Gets a USB device (driver specific) property from usb handle. + /*! + * + * \param[in] InterfaceHandle + * USB handle of the property to retrieve. + * + * \param[in] PropertyType + * The propety type to retrieve. + * + * \param[in,out] PropertySize + * Size in bytes of \c Value. + * + * \param[out] Value + * On success, receives the proprty data. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_GetProperty ( + _in KUSB_HANDLE InterfaceHandle, + _in KUSB_PROPERTY PropertyType, + _ref PUINT PropertySize, + _out PVOID Value); + + /*! @} */ + + +#endif + +#ifndef _LIBUSBK_LSTK_FUNCTIONS + /*! \addtogroup lstk + *@{ + */ + +//! Initializes a new usb device list containing all supported devices. + /*! + * + * \param[out] DeviceList + * Pointer reference that will receive a populated device list. + * + * \param[in] Flags + * Search, filter, and listing options. see \c KLST_FLAG + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * \c LstK_Init populates \c DeviceList with connected usb devices that can be used by libusbK. + * + * \note if \ref LstK_Init returns TRUE, the device list must be freed with \ref LstK_Free when it is no + * longer needed. + * + */ + KUSB_EXP BOOL KUSB_API LstK_Init( + _out KLST_HANDLE* DeviceList, + _in KLST_FLAG Flags); + +//! Initializes a new usb device list containing only devices matching a specific class GUID. + /*! + * + * \param[out] DeviceList + * Pointer reference that will receive a populated device list. + * + * \param[in] Flags + * Search, filter, and listing options. see \c KLST_FLAG + * + * \param[in] PatternMatch + * Pattern Search filter. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * \c LstK_InitEx populates \c DeviceList with usb devices that can be used by libusbK. Only device + * matching the \ref KLST_PATTERN_MATCH string are included in the list. + * + * \note + * This function significantly improves performance when used with a device interface guid pattern patch. + * + * \note if \ref LstK_InitEx returns TRUE, the device list must be freed with \ref LstK_Free when it it's no + * longer needed. + * + */ + KUSB_EXP BOOL KUSB_API LstK_InitEx( + _out KLST_HANDLE* DeviceList, + _in KLST_FLAG Flags, + _in PKLST_PATTERN_MATCH PatternMatch); + + //! Frees a usb device list. + /*! + * + * \note if \ref LstK_Init returns TRUE, the device list must be freed with \ref LstK_Free when it is no + * longer needed. + * + * \param[in] DeviceList + * The \c DeviceList to free. + * + * \returns NONE + * + * Frees all resources that were allocated to \c DeviceList by \ref LstK_Init. + * + */ + KUSB_EXP BOOL KUSB_API LstK_Free( + _in KLST_HANDLE DeviceList); + +//! Enumerates \ref KLST_DEVINFO elements of a \ref KLST_HANDLE. + /*! + * + * \param[in] DeviceList + * The \c DeviceList to enumerate. + * + * \param[in] EnumDevListCB + * Function to call for each iteration. + * + * \param[in] Context + * Optional user context pointer. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * Calls \c EnumDevListCB for each element in the device list or until \c EnumDevListCB returns FALSE. + * + */ + KUSB_EXP BOOL KUSB_API LstK_Enumerate( + _in KLST_HANDLE DeviceList, + _in KLST_ENUM_DEVINFO_CB* EnumDevListCB, + _inopt PVOID Context); + +//! Gets the \ref KLST_DEVINFO element for the current position. + /*! + * + * \param[in] DeviceList + * The \c DeviceList to retrieve a current \ref KLST_DEVINFO for. + * + * \param[out] DeviceInfo + * The device information. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * After a \c DeviceList is created or after the \ref LstK_MoveReset method is called, the \c LstK_MoveNext + * method must be called to advance the device list enumerator to the first element of the \c DeviceList + * before calling \c LstK_Current otherwise, \c DeviceInfo is undefined. + * + * \c LstK_Current returns \c FALSE and sets last error to \c ERROR_NO_MORE_ITEMS if the last call to + * \c LstK_MoveNext returned \c FALSE, which indicates the end of the \c DeviceList. + * + * \c LstK_Current does not move the position of the device list enumerator, and consecutive calls to + * \c LstK_Current return the same object until either \c LstK_MoveNext or \ref LstK_MoveReset is called. + * + */ + KUSB_EXP BOOL KUSB_API LstK_Current( + _in KLST_HANDLE DeviceList, + _out KLST_DEVINFO_HANDLE* DeviceInfo); + +//! Advances the device list current \ref KLST_DEVINFO position. + /*! + * \param[in] DeviceList + * A usb device list returned by \ref LstK_Init + * + * \param[out] DeviceInfo + * On success, contains a pointer to the device information for the current enumerators position. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * After a \c DeviceList is created or after \ref LstK_MoveReset is called, an enumerator is positioned + * before the first element of the \c DeviceList and the \b first call to \c LstK_MoveNext moves the + * enumerator over the first element of the \c DeviceList. + * + * If \c LstK_MoveNext passes the end of the \c DeviceList, the enumerator is positioned after the last + * element in the \c DeviceList and \c LstK_MoveNext returns \c FALSE. When the enumerator is at this + * position, a subsequent call to \c LstK_MoveNext will reset the enumerator and it continues from the + * beginning. + * + */ + KUSB_EXP BOOL KUSB_API LstK_MoveNext( + _in KLST_HANDLE DeviceList, + _outopt KLST_DEVINFO_HANDLE* DeviceInfo); + +//! Sets the device list to its initial position, which is before the first element in the list. + /*! + * + * \param[in] DeviceList + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP VOID KUSB_API LstK_MoveReset( + _in KLST_HANDLE DeviceList); + +//! Find a device by vendor and product id + /*! + * + * \param[in] DeviceList + * The \c DeviceList to retrieve a current \ref KLST_DEVINFO for. + * + * \param[in] Vid + * ID is used in conjunction with the \c Pid to uniquely identify USB devices, providing traceability to the + * OEM. + * + * \param[in] Pid + * ID is used in conjunction with the \c Pid to uniquely identify USB devices, providing traceability to the + * OEM. + * + * \param[out] DeviceInfo + * On success, the device information pointer, otherwise NULL. + * + * \returns + * - TRUE if the device was found + * - FALSE if the device was \b not found or an error occurred. + * - Sets last error to \c ERROR_NO_MORE_ITEMS if the device was \b not found. + * + * Searches all elements in \c DeviceList for usb device matching the specified. + * + */ + KUSB_EXP BOOL KUSB_API LstK_FindByVidPid( + _in KLST_HANDLE DeviceList, + _in INT Vid, + _in INT Pid, + _out KLST_DEVINFO_HANDLE* DeviceInfo); + +//! Counts the number of device info elements in a device list. + /*! + * + * \param[in] DeviceList + * The deice list to count. + * + * \param[in,out] Count + * On success, receives the number of \ref KLST_DEVINFO elements in the list. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP BOOL KUSB_API LstK_Count( + _in KLST_HANDLE DeviceList, + _ref PUINT Count); + + + /**@}*/ + +#endif + +#ifndef _LIBUSBK_HOTK_FUNCTIONS + /*! \addtogroup hotk + * @{ + */ + +//! Creates a new hot-plug handle for USB device arrival/removal event monitoring. + /*! + * + * \param[out] Handle + * Reference to a handle pointer that will receive the initialized hot-plug handle. + * + * \param[in,out] InitParams + * Hot plug handle initialization structure. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP BOOL KUSB_API HotK_Init( + _out KHOT_HANDLE* Handle, + _ref PKHOT_PARAMS InitParams); + +//! Frees the specified hot-plug handle. + /*! + * + * \param[in] Handle + * hot-plug handle pointer to free. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP BOOL KUSB_API HotK_Free( + _in KHOT_HANDLE Handle); + + //! Frees all hot-plug handles initialized with \ref HotK_Init. + /*! + * + */ + KUSB_EXP VOID KUSB_API HotK_FreeAll(VOID); + + /**@}*/ + +#endif + +#ifndef _LIBUSBK_OVLK_FUNCTIONS + /*! \addtogroup ovlk + * @{ + */ + +//! Gets a preallocated \c OverlappedK structure from the specified/default pool. + /*! + * + * \param[out] OverlappedK + * On Success, receives the overlapped handle. + * + * \param[in] PoolHandle + * The overlapped pool used to retrieve the next available \c OverlappedK. + * + * \returns On success, the next unused overlappedK available in the pool. Otherwise NULL. Use + * \c GetLastError() to get extended error information. + * + * After calling \ref OvlK_Acquire or \ref OvlK_ReUse the \c OverlappedK is ready to be used in an I/O + * operation. See one of the \c UsbK core transfer functions such as \ref UsbK_ReadPipe or + * \ref UsbK_WritePipe for more information. + * + * If the pools internal refurbished list (a re-usable list of \c OverlappedK structures) is not empty, the + * \ref OvlK_Acquire function will choose an overlapped from the refurbished list. + * + */ + KUSB_EXP BOOL KUSB_API OvlK_Acquire( + _out KOVL_HANDLE* OverlappedK, + _in KOVL_POOL_HANDLE PoolHandle); + +//! Returns an \c OverlappedK structure to it's pool. + /*! + * + * \param[in] OverlappedK + * The overlappedK to release. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * When an overlapped is returned to pool, it resources are \b not freed. Instead, it is added to an internal + * refurbished list (a re-usable list of \c OverlappedK structures). + * + * \warning This function must not be called when the OverlappedK is in-use. If unsure, consider using + * \ref OvlK_WaitAndRelease instead. + * + */ + KUSB_EXP BOOL KUSB_API OvlK_Release( + _in KOVL_HANDLE OverlappedK); + + +//! Creates a new overlapped pool. + /*! + * + * \param[out] PoolHandle + * On success, receives the new pool handle. + * + * \param[in] UsbHandle + * USB handle to associate with the pool. + * + * \param[in] MaxOverlappedCount + * Maximum number of overkappedK handles allowed in the pool. + * + * \param[in] Flags + * Pool flags. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP BOOL KUSB_API OvlK_Init ( + _out KOVL_POOL_HANDLE* PoolHandle, + _in KUSB_HANDLE UsbHandle, + _in INT MaxOverlappedCount, + _inopt KOVL_POOL_FLAG Flags); + +//! Destroys the specified pool and all resources it created. + /*! + * + * \param[in] PoolHandle + * The overlapped pool to destroy. Once destroyed, the pool and all resources which belong to it can no + * longer be used. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * \warning A pool should not be destroyed until all OverlappedKs acquired from it are no longer in-use. For + * more information see \ref OvlK_WaitAndRelease or \ref OvlK_Release. + * + */ + KUSB_EXP BOOL KUSB_API OvlK_Free( + _in KOVL_POOL_HANDLE PoolHandle); + + +//! Returns the internal event handle used to signal IO operations. + /*! + * + * \param[in] OverlappedK + * The overlappedK used to return the internal event handle. + * + * \returns On success, The manual reset event handle being used by this overlappedK. Otherwise NULL. Use + * \c GetLastError() to get extended error information. + * + * \ref OvlK_GetEventHandle is useful for applications that must to their own event handling. It exposes the + * windows \c OVERLAPPED \c hEvent used for i/o completion signaling. This event handle can be used by the + * standard event wait functions; /c WaitForMultipleObjectsEx for example. + * + * \warning Use \ref OvlK_GetEventHandle with caution. Event handles returned by this function should never + * be used unless the OverlappedK has been \b acquired by the application. + * + */ + KUSB_EXP HANDLE KUSB_API OvlK_GetEventHandle( + _in KOVL_HANDLE OverlappedK); + +//! Waits for overlapped I/O completion, and performs actions specified in \c WaitFlags. + /*! + * + * \param[in] OverlappedK + * The overlappedK to wait on. + * + * \param[in] TimeoutMS + * Number of milliseconds to wait for overlapped completion. + * + * \param[in] WaitFlags + * See /ref KOVL_WAIT_FLAG + * + * \param[out] TransferredLength + * On success, returns the number of bytes transferred by this overlappedK. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. See + * the remarks section below for details on relevant error codes. + * + * \c OvlK_Wait waits the time interval specified in \c TimeoutMS for the overlapped I/O operation to + * complete. Different actions can then taken depending on the flags specified in \c WaitFlags. + * + * \WINERRORTABLE + * + * \WINERROR{ERROR_CANCELLED,1223} + * - The I/O was cancelled by the user. The transfer complete event was not signalled within the alotted + * transfer timeout time and the OvlK_Wait function issued a CancelIoEx/CancelIo request because the + * \ref KOVL_WAIT_FLAG_CANCEL_ON_TIMEOUT flag bit was set. + * \ENDWINERROR + * + * \WINERROR{ERROR_OPERATION_ABORTED,995} + * - The transfer complete event is signalled but the overlapped result was allready cancelled. The + * overlapped I/O may have bee cancelled for one of the following reasons: + * - Driver cancelled because of pipe timeout policy expiration. + * - The device was disconnected. + * - A \ref UsbK_AbortPipe request was issued. + * \ENDWINERROR + * + * \ENDWINERRORTABLE + * + */ + KUSB_EXP BOOL KUSB_API OvlK_Wait( + _in KOVL_HANDLE OverlappedK, + _inopt INT TimeoutMS, + _inopt KOVL_WAIT_FLAG WaitFlags, + _out PUINT TransferredLength); + +//! Waits for overlapped I/O completion on the oldest acquired OverlappedK handle and performs actions specified in \c WaitFlags. + /*! + * + * \param[in] PoolHandle + * The pool handle containing one or more acuired OverlappedKs. + * + * \param[out] OverlappedK + * On success, set to the oldest overlappedK in the acquired list. + * + * \param[in] TimeoutMS + * See /ref OvlK_Wait + * + * \param[in] WaitFlags + * See /ref KOVL_WAIT_FLAG + * + * \param[out] TransferredLength + * See /ref OvlK_Wait + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. See + * See /ref OvlK_Wait + */ + KUSB_EXP BOOL KUSB_API OvlK_WaitOldest( + _in KOVL_POOL_HANDLE PoolHandle, + _outopt KOVL_HANDLE* OverlappedK, + _inopt INT TimeoutMS, + _inopt KOVL_WAIT_FLAG WaitFlags, + _out PUINT TransferredLength); + +//! Waits for overlapped I/O completion, cancels on a timeout error. + /*! + * + * \param[in] OverlappedK + * The overlappedK to wait on. + * + * \param[in] TimeoutMS + * Number of milliseconds to wait for overlapped completion. + * + * \param[out] TransferredLength + * On success, returns the number of bytes transferred by this overlappedK. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. See + * \ref OvlK_Wait for details on relevant win32 error codes. + * + * \note This convenience function calls \ref OvlK_Wait with \ref KOVL_WAIT_FLAG_CANCEL_ON_TIMEOUT. + * + * \c OvlK_WaitOrCancel waits the the time interval specified by \c TimeoutMS for an overlapped result. If + * the \c TimeoutMS interval expires the I/O operation is cancelled. The \c OverlappedK is not released back + * to its pool. + * + */ + KUSB_EXP BOOL KUSB_API OvlK_WaitOrCancel( + _in KOVL_HANDLE OverlappedK, + _inopt INT TimeoutMS, + _out PUINT TransferredLength); + +//! Waits for overlapped I/O completion, cancels on a timeout error and always releases the OvlK handle back to its pool. + /*! + * + * \param[in] OverlappedK + * The overlappedK to wait on. + * + * \param[in] TimeoutMS + * Number of milliseconds to wait for overlapped completion. + * + * \param[out] TransferredLength + * On success, returns the number of bytes transferred by this overlappedK. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. See + * \ref OvlK_Wait for details on relevant win32 error codes. + * + * \note This convenience function calls \ref OvlK_Wait with \ref KOVL_WAIT_FLAG_RELEASE_ALWAYS. + * + * \c OvlK_WaitAndRelease waits the the time interval specified by \c TimeoutMS for an overlapped result. + * When \c OvlK_WaitOrCancel returns, the I/O operation has either been completed or cancelled. The + * \c OverlappedK is always released back to its pool where it can be re-acquired with \ref OvlK_Acquire. + * + */ + KUSB_EXP BOOL KUSB_API OvlK_WaitAndRelease( + _in KOVL_HANDLE OverlappedK, + _inopt INT TimeoutMS, + _out PUINT TransferredLength); + +//! Checks for i/o completion; returns immediately. (polling) + /*! + * + * \param[in] OverlappedK + * The overlappedK to check for completion. + * + * \warning \ref OvlK_IsComplete does \b no validation on the OverlappedK. It's purpose is to check the event + * signal state as fast as possible. + * + * \returns TRUE if the \c OverlappedK has completed, otherwise FALSE. + * + * \c OvlK_IsComplete quickly checks if the \c OverlappedK i/o operation has completed. + */ + KUSB_EXP BOOL KUSB_API OvlK_IsComplete( + _in KOVL_HANDLE OverlappedK); + +//! Initializes an overlappedK for re-use. The overlappedK is not return to its pool. + /*! + * + * \param[in] OverlappedK + * The overlappedK to re-use. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * This function performs the following actions: + * - Resets the overlapped event to non-signaled via ResetEvent(). + * - Clears the internal overlapped information. + * - Clears the 'Internal' and 'InternalHigh' members of the windows overlapped structure. + * + * \note + * Re-using OverlappedKs is the most efficient means of OverlappedK management. When an OverlappedK is + * "re-used" it is not returned to the pool. Instead, the application retains ownership for use in another + * i/o operation. + * + */ + KUSB_EXP BOOL KUSB_API OvlK_ReUse( + _in KOVL_HANDLE OverlappedK); + + /**@}*/ + +#endif + +#ifndef _LIBUSBK_STMK_FUNCTIONS + + /*! \addtogroup stmk + * @{ + */ + +//! Initializes a new uni-directional pipe stream. + /*! + * + * \param[out] StreamHandle + * On success, receives the new stream handle. + * + * \param[in] UsbHandle + * Usb handle to associate with this stream. + * + * \param[in] PipeID + * Endpoint address of USB pipe to associate with this stream. + * + * \param[in] MaxTransferSize + * Maximum number of bytes transferred at once. Larger transfers committed with the stream read/write + * functions are automatically split into multiple smaller chunks. + * + * \param[in] MaxPendingTransfers + * Maximum number of transfers allowed to be outstanding and the total number of transfer contexts that are + * allocated to the stream. + * + * \param[in] MaxPendingIO + * Maximum number of I/O requests the internal stream thread is allowed to have submit at any given time. + * (Pending I/O) + * + * \param[in] Callbacks + * Optional user callback functions. If specified, these callback functions will be executed in real time + * (from within the context of the internal stream thread) as transfers go through the various states. + * + * \param[in] Flags + * Additional stream flags. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * \par + * When a stream is initialized, it validates input parameters and allocates the required memory for the + * transfer context array and transfer lists from a private memory heap. The stream is not started and no I/O + * requests are sent to the device until \ref StmK_Start is executed. + * + */ + KUSB_EXP BOOL KUSB_API StmK_Init( + _out KSTM_HANDLE* StreamHandle, + _in KUSB_HANDLE UsbHandle, + _in UCHAR PipeID, + _in INT MaxTransferSize, + _in INT MaxPendingTransfers, + _in INT MaxPendingIO, + _inopt PKSTM_CALLBACK Callbacks, + _inopt KSTM_FLAG Flags); + +//! Frees resources allocated by a stream handle. + /*! + * + * \param[in] StreamHandle + * The stream handle to free. + * + * \returns TRUE. + * + * If the stream is currently started it is automatically stopped before its resources are freed. + * + */ + KUSB_EXP BOOL KUSB_API StmK_Free( + _in KSTM_HANDLE StreamHandle); + +//! Starts the internal stream thread. + /*! + * + * \param[in] StreamHandle + * The stream to start. A stream handle is created with \ref StmK_Init. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * \par + * When a stream is started, an internal thread is created for managing pipe I/O operations. If a + * \ref KSTM_CALLBACK::Started callback function is assgined, it is executed \b for each transfer context. + * (\b MaxPendingTransfers) See \ref StmK_Init. + * + */ + KUSB_EXP BOOL KUSB_API StmK_Start( + _in KSTM_HANDLE StreamHandle); + +//! Stops the internal stream thread. + /*! + * + * \param[in] StreamHandle + * The stream to stop. + * + * \param[in] TimeoutCancelMS + * Number of milliseconds the internal stream thread should wait for pending I/O to complete before + * cancelling all pending requests. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP BOOL KUSB_API StmK_Stop( + _in KSTM_HANDLE StreamHandle, + _in INT TimeoutCancelMS); + +//! Reads data from the stream buffer. + /*! + * + * \param[in] StreamHandle + * The stream to read. + * + * \param[out] Buffer + * A caller-allocated buffer that receives the data that is read. + * + * \param[in] Offset + * Read start offset of \c Buffer. + * + * \param[in] Length + * Size of \c Buffer. + * + * \param[out] TransferredLength + * On success, receives the actual number of bytes that were copied into \c Buffer. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * - Read Stream Operations: + * -# The internal stream thread will always try and keep reads pending as specified by \b MaxPendingIO in + * \ref StmK_Init. + * -# As the stream submits transfers, it increments the \b PendingIO and \b PendingTransfer counts. As it + * completes transfers, it decrements the \b PendingIO count. As the user processes transfers with + * \ref StmK_Read, it decrements the \b PendingTransfer count and release control of the transfer context + * back to the stream where it is re-used. + * -# When the pending I/O count reaches \c MaxPendingIO, the stream completes the oldest + * \b PendingTransfer and moves it into a FIFO complete where it awaits user processing via the + * \ref StmK_Read function. + * -# If the stream has not exhausted its MaxPendingTransfers count, another read request is submitted + * immediately to satisfy \b MaxPendingIO. + * + */ + KUSB_EXP BOOL KUSB_API StmK_Read( + _in KSTM_HANDLE StreamHandle, + _out PUCHAR Buffer, + _in INT Offset, + _in INT Length, + _out PUINT TransferredLength); + +//! Writes data to the stream buffer. + /*! + * + * \param[in] StreamHandle + * The stream to write. + * + * \param[in] Buffer + * A caller-allocated buffer the data is written from. + * + * \param[in] Offset + * Write start offset of \c Buffer. + * + * \param[in] Length + * Number of bytes to copy into the stream buffer. + * + * \param[out] TransferredLength + * On success, receives the actual number of bytes that were copied into the stream buffer. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * - Write Stream Operations: + * -# The internal stream thread will always try and exhaust all pending transfers submitted by the user + * via \ref StmK_Write. + * -# As the user submits transfers via \ref StmK_Write, the \b PendingTransfer count is inceremented and + * transfers are added to a queued FIFO list where they await processing by the internal stream thread. + * -# While the queued FIFO list is not empty and \b PendingIO count is less than \b MaxPendingIO, The + * \b PendingIO count increments and the request is sent to the device. + * -# When a transfer completes, the internal pending I/O count is decremented and the transfers is moved + * back into the idle list where it can be reused again by subsequent \ref StmK_Write requests. + * + */ + KUSB_EXP BOOL KUSB_API StmK_Write( + _in KSTM_HANDLE StreamHandle, + _in PUCHAR Buffer, + _in INT Offset, + _in INT Length, + _out PUINT TransferredLength); + /**@}*/ + +#endif + +#ifndef _LIBUSBK_ISOK_FUNCTIONS + /*! \addtogroup isok + * @{ + */ + +//! Creates a new isochronous transfer context. + /*! + * + * \param[out] IsoContext + * Receives a new isochronous transfer context. + * + * \param[in] NumberOfPackets + * The number of \ref KISO_PACKET structures allocated to \c IsoContext. Assigned to + * \ref KISO_CONTEXT::NumberOfPackets. The \ref KISO_CONTEXT::NumberOfPackets field is assignable by + * \c IsoK_Init only and must not be changed by the user. + * + * \param[in] StartFrame + * The USB frame number this request must start on (or \b 0 for ASAP) and assigned to + * \ref KISO_CONTEXT::StartFrame. The \ref KISO_CONTEXT::StartFrame may be chamged by the user in subsequent + * request. For more information, see \ref KISO_CONTEXT::StartFrame. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * \c IsoK_Init is performs the following tasks in order: + * -# Allocates the \c IsoContext and the required \ref KISO_PACKET structures. + * -# Zero-initializes all ISO context memory. + * -# Assigns \b NumberOfPackets, \b PipeID, and \b StartFrame to \c IsoContext. + * + */ + KUSB_EXP BOOL KUSB_API IsoK_Init( + _out PKISO_CONTEXT* IsoContext, + _in INT NumberOfPackets, + _inopt INT StartFrame); + +//! Destroys an isochronous transfer context. + /*! + * \param[in] IsoContext + * A pointer to an isochronous transfer context created with \ref IsoK_Init. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + */ + KUSB_EXP BOOL KUSB_API IsoK_Free( + _in PKISO_CONTEXT IsoContext); + +//! Convenience function for setting the offset of all ISO packets of an isochronous transfer context. + /*! + * \param[in] IsoContext + * A pointer to an isochronous transfer context. + * + * \param[in] PacketSize + * The packet size used to calculate and assign the absolute data offset for each \ref KISO_PACKET in + * \c IsoContext. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * \c IsoK_SetPackets updates all \ref KISO_PACKET::Offset fields in a \ref KISO_CONTEXT so all offset are + * \c PacketSize apart. For example: + * - The offset of the first (0-index) packet is 0. + * - The offset of the second (1-index) packet is PacketSize. + * - The offset of the third (2-index) packet is PacketSize*2. + * + * \code + * for (packetIndex = 0; packetIndex < IsoContext->NumberOfPackets; packetIndex++) + * IsoContext->IsoPackets[packetIndex].Offset = packetIndex * PacketSize; + * \endcode + * + */ + KUSB_EXP BOOL KUSB_API IsoK_SetPackets( + _in PKISO_CONTEXT IsoContext, + _in INT PacketSize); + +//! Convenience function for setting all fields of a \ref KISO_PACKET. + /*! + * \param[in] IsoContext + * A pointer to an isochronous transfer context. + * + * \param[in] PacketIndex + * The packet index to set. + * + * \param[in] IsoPacket + * Pointer to a user allocated \c KISO_PACKET which is copied into the PKISO_CONTEXT::IsoPackets array at the + * specified index. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + */ + KUSB_EXP BOOL KUSB_API IsoK_SetPacket( + _in PKISO_CONTEXT IsoContext, + _in INT PacketIndex, + _in PKISO_PACKET IsoPacket); + +//! Convenience function for getting all fields of a \ref KISO_PACKET. + /*! + * \param[in] IsoContext + * A pointer to an isochronous transfer context. + * + * \param[in] PacketIndex + * The packet index to get. + * + * \param[out] IsoPacket + * Pointer to a user allocated \c KISO_PACKET which receives a copy of the ISO packet in the + * PKISO_CONTEXT::IsoPackets array at the specified index. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + */ + KUSB_EXP BOOL KUSB_API IsoK_GetPacket( + _in PKISO_CONTEXT IsoContext, + _in INT PacketIndex, + _out PKISO_PACKET IsoPacket); + +//! Convenience function for enumerating ISO packets of an isochronous transfer context. + /*! + * \param[in] IsoContext + * A pointer to an isochronous transfer context. + * + * \param[in] EnumPackets + * Pointer to a user supplied callback function which is executed for all ISO packets in \c IsoContext or + * until the user supplied callback function returns \c FALSE. + * + * \param[in] StartPacketIndex + * The zero-based ISO packet index to begin enumeration at. + * + * \param[in] UserState + * A user defined value which is passed as a parameter to the user supplied callback function. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + */ + KUSB_EXP BOOL KUSB_API IsoK_EnumPackets( + _in PKISO_CONTEXT IsoContext, + _in KISO_ENUM_PACKETS_CB* EnumPackets, + _inopt INT StartPacketIndex, + _inopt PVOID UserState); + +//! Convenience function for re-using an isochronous transfer context in a subsequent request. + /*! + * \param[in,out] IsoContext + * A pointer to an isochronous transfer context. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * \c IsoK_ReUse does the following: + * -# Zero-initializes the \b Length and \b Status fields of all \ref KISO_PACKET structures. + * -# Zero-initializes the \b StartFrame and \b ErrorCount of the \ref KISO_CONTEXT. + * + */ + KUSB_EXP BOOL KUSB_API IsoK_ReUse( + _ref PKISO_CONTEXT IsoContext); + + /*! @} */ + +#endif + +#ifdef __cplusplus +} +#endif + +#endif // _LIBUSBK_H__ diff --git a/Old Matlab Interface/.svn/pristine/f1/f172784ffef766d0efe968a17adaac35c87924ff.svn-base b/Old Matlab Interface/.svn/pristine/f1/f172784ffef766d0efe968a17adaac35c87924ff.svn-base new file mode 100644 index 00000000..3a7cf3e2 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/f1/f172784ffef766d0efe968a17adaac35c87924ff.svn-base @@ -0,0 +1,29 @@ +clear all +temp_waveform = false(1,500); + +dig_samples = uint8([0:32]); +%%, 0:255, 0:255, 0:255 + +tic +if (length(dig_samples)>500) + temp_samples = dig_samples(1:length(dig_samples)/500:end); + temp_waveform = logical(bitand(temp_samples,16)); +else + temp_samples = false(1,length(dig_samples)*8); + temp_samples(1:8:length(temp_samples)) = bitand(dig_samples,1); + temp_samples(2:8:length(temp_samples)) = bitand(dig_samples,2); + temp_samples(3:8:length(temp_samples)) = bitand(dig_samples,4); + temp_samples(4:8:length(temp_samples)) = bitand(dig_samples,8); + temp_samples(5:8:length(temp_samples)) = bitand(dig_samples,16); + temp_samples(6:8:length(temp_samples)) = bitand(dig_samples,32); + temp_samples(7:8:length(temp_samples)) = bitand(dig_samples,64); + temp_samples(8:8:length(temp_samples)) = bitand(dig_samples,128); + + temp_waveform = temp_samples(1:length(temp_samples)/500:end); +end +toc + +stairs(temp_waveform); +%b = [bitand(a,128), bitand(a,64), bitand(a,32), bitand(a,16), bitand(a,8), bitand(a,4), bitand(a,2), bitand(a,1)]; +%b(logical(mod(1:500,2))) = true; + diff --git a/Old Matlab Interface/.svn/pristine/f1/f187db5d81d807f7a4be8e690e725d8dd82fdb65.svn-base b/Old Matlab Interface/.svn/pristine/f1/f187db5d81d807f7a4be8e690e725d8dd82fdb65.svn-base new file mode 100644 index 00000000..d8e62241 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/f1/f187db5d81d807f7a4be8e690e725d8dd82fdb65.svn-base @@ -0,0 +1,21 @@ +fid = fopen('C:\users\esposch\documents\output.hex'); + +buffer = 0; + +hexarray = []; + +while (buffer ~= -1) + buffer = fgetl(fid); + hexarray = [hexarray buffer(10:end-2)]; +end + +uintarray = []; + +for n=1:2:length(hexarray) + uintarray = [uintarray hex2dec(hexarray([n n+1]))]; +end + +typecast(uintarray, 'int8') +plot(uintarray); + +fclose(fid); \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/f1/f1fb5c24b06f5285a19173c9c4f834ea90ec5363.svn-base b/Old Matlab Interface/.svn/pristine/f1/f1fb5c24b06f5285a19173c9c4f834ea90ec5363.svn-base new file mode 100644 index 00000000..df20690a --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/f1/f1fb5c24b06f5285a19173c9c4f834ea90ec5363.svn-base @@ -0,0 +1,3 @@ + + + diff --git a/Old Matlab Interface/.svn/pristine/f2/f20e3547e49aa4c0b0d16561bfd892e6033fd46d.svn-base b/Old Matlab Interface/.svn/pristine/f2/f20e3547e49aa4c0b0d16561bfd892e6033fd46d.svn-base new file mode 100644 index 00000000..c8e97154 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/f2/f20e3547e49aa4c0b0d16561bfd892e6033fd46d.svn-base @@ -0,0 +1,140 @@ +#region Copyright(c) Travis Robinson + +// Copyright (c) 2011-2012 Travis Robinson +// All rights reserved. +// +// Xfer.Stm +// +// Last Updated: 03.08.2012 +// +// 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. +// +// 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 TRAVIS LEE ROBINSON +// 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. + +#endregion + +#define BMFW + +using System; +using System.Runtime.InteropServices; +using System.Threading; +using Test.Devices; +using libusbK; +using libusbK.Examples; + +// ReSharper disable InconsistentNaming + +namespace Xfer.Stm +{ + internal class Program + { + #region TODO USER: Set the test parameters for your device. + + public static StmTestParameters Test = new StmTestParameters(0x04d8, 0xfa2e, 0, 0x81, 1024, null, -1, 4, 64); + + #endregion + + private static void Main() + { + bool success; + WINUSB_PIPE_INFORMATION pipeInfo; + UsbK usb; + USB_INTERFACE_DESCRIPTOR interfaceDescriptor; + + // Find and configure the device. + if (!Test.ConfigureDevice(out pipeInfo, out usb, out interfaceDescriptor)) return; + if (Test.TransferBufferSize == -1) + Test.TransferBufferSize = pipeInfo.MaximumPacketSize*64; + +#if BMFW + // TODO FOR USER: Remove this block if not using benchmark firmware. + // This configures devices running benchmark firmware for streaming DeviceToHost transfers. + Console.WriteLine("Configuring for benchmark device.."); + BM_TEST_TYPE testType = ((Test.PipeId & 0x80) > 0) ? BM_TEST_TYPE.READ : BM_TEST_TYPE.WRITE; + success = Benchmark.Configure(usb, BM_COMMAND.SET_TEST, interfaceDescriptor.bInterfaceNumber, ref testType); + if (!success) + { + Console.WriteLine("Bench_Configure failed."); + } +#endif + if (!Test.ShowTestReady()) goto Done; + + KSTM_CALLBACK callback = new KSTM_CALLBACK(); + StmK stm = new StmK( + usb.Handle, + pipeInfo.PipeId, + Test.TransferBufferSize, + Test.MaxPendingTransfers, + Test.MaxPendingIO, + ref callback, + KSTM_FLAG.USE_TIMEOUT | (KSTM_FLAG) 3000); + + byte[] tempBuffer = new byte[Test.TransferBufferSize]; + + Thread.Sleep(0); + // This is just a counter/timer for statistics gathering. + Test.Dcs.Start(); + success = stm.Start(); + + long totalTransferCount = 0; + while (success) + { + int transferred; + if ((pipeInfo.PipeId & 0x80) == 0x80) + { + success = stm.Read(tempBuffer, 0, tempBuffer.Length, out transferred); + if (!success) break; + } + else + { + success = stm.Write(tempBuffer, 0, tempBuffer.Length, out transferred); + if (!success) break; + } + + string dataPrefix = String.Format(" Data Prefix: [{0:X2} {1:X2} {2:X2} {3:X2} {4:X2} {5:X2} {6:X2} {7:X2}] ", + tempBuffer[0], + tempBuffer[1], + tempBuffer[2], + tempBuffer[3], + tempBuffer[4], + tempBuffer[5], + tempBuffer[6], + tempBuffer[7]); + + Console.WriteLine( + totalTransferCount > Test.MaxTransfersTotal + ? "#{0}: [Stream Stopped] {1} transferred. {2}" + : "#{0}: {1} transferred. {2}", + totalTransferCount.ToString("0000"), + transferred, + dataPrefix); + + totalTransferCount++; + + if (totalTransferCount == Test.MaxTransfersTotal) + success = stm.Stop(3000); + } + + Console.WriteLine("Done. TotalTransfers:{0} ErrorCode:{1:X8}h", totalTransferCount, Marshal.GetLastWin32Error()); + + stm.Free(); + + Done: + usb.Free(); + } + } +} \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/f2/f28f71d8657521632dd5fb0a70026a6ce407e60d.svn-base b/Old Matlab Interface/.svn/pristine/f2/f28f71d8657521632dd5fb0a70026a6ce407e60d.svn-base new file mode 100644 index 00000000..542cfdb9 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/f2/f28f71d8657521632dd5fb0a70026a6ce407e60d.svn-base @@ -0,0 +1,99 @@ +global scope_window_time +global scope_window_max +global scope_window_min +global scope_mode +global gui_axes +global text_box_1 +global gui_hori_cursor_a_pos +global gui_hori_cursor_b_pos +global gui_vert_cursor_a_pos +global gui_vert_cursor_b_pos +global gui_cursor_mode + +samplestoshow = 375000*scope_window_time; +refreshrate_temp = refreshrate_temp - 1; + +tic +if(scope_mode==0) %analog mode + if (refreshrate_temp == 0) + refreshrate_temp = refreshrate; + if length(saved_waveform)>samplestoshow + if (samplestoshow>500) + temp_waveform = saved_waveform((length(saved_waveform) - samplestoshow):samplestoshow/500: length(saved_waveform)); + else + temp_waveform = saved_waveform((length(saved_waveform) - samplestoshow): length(saved_waveform)); + end + undofrontend; + taxis = linspace(-scope_window_time,0,length(cool_waveform)); + switch(gui_cursor_mode) + case 1 + plot(gui_axes, taxis, cool_waveform, 'y'); + case 2 + plot(gui_axes, taxis, cool_waveform, 'y', [-scope_window_time 0], [gui_hori_cursor_a_pos gui_hori_cursor_a_pos], 'w', [-scope_window_time 0], [gui_hori_cursor_b_pos gui_hori_cursor_b_pos], 'w:'); + case 3 + plot(gui_axes, taxis, cool_waveform, 'y', [gui_vert_cursor_a_pos gui_vert_cursor_a_pos], [scope_window_min scope_window_max], 'w', [gui_vert_cursor_b_pos gui_vert_cursor_b_pos], [scope_window_min scope_window_max], 'w:'); + case 4 + plot(gui_axes, taxis, cool_waveform, 'y', [gui_vert_cursor_a_pos gui_vert_cursor_a_pos], [scope_window_min scope_window_max], 'w', [gui_vert_cursor_b_pos gui_vert_cursor_b_pos], [scope_window_min scope_window_max], 'w:', [-scope_window_time 0], [gui_hori_cursor_a_pos gui_hori_cursor_a_pos], 'w', [-scope_window_time 0], [gui_hori_cursor_b_pos gui_hori_cursor_b_pos], 'w:'); + + otherwise + error('Gui_axes is in an invalid state'); + end + +% if(gui_cursor_mode == 3 | gui_cursor_mode == 4) +% plot(gui_axes, [gui_vert_cursor_pos gui_vert_cursor_pos], [scope_window_min scope_window_max], 'w') +% end +% if (gui_cursor_mode == 2 | gui_cursor_mode == 4) +% plot(gui_axes, [-scope_window_time 0], [gui_hori_cursor_pos gui_hori_cursor_pos], 'w') +% end + set(gui_axes, 'Ylim', [scope_window_min, scope_window_max], 'Xlim', [-scope_window_time, 0], 'Color', [0 0 0], 'Box', 'on', 'XColor', [1 1 1], 'Ycolor', [1 1 1]); + waveform_exists = 1; + %axis([-scope_window_time 0 scope_window_min scope_window_max]) + %titlestring = sprintf('Showing ADC waveform. Window size = %es \nMin=%.2fV Max=%.2fV Mean=%.2fV RMS=%.2fV', samplestoshow/375000, min(cool_waveform), max(cool_waveform), mean(cool_waveform), rms(cool_waveform)); + end + else + if (waveform_exists) + set(text_box_1, 'String', sprintf(' ---------------------\n Vmin = %.2fV\n ---------------------\n Vmax = %.2f\n ---------------------\n Vmean = %.2f\n ---------------------\n Vrms = %.2f\n ---------------------\n ', min(cool_waveform), max(cool_waveform), mean(cool_waveform), rms(cool_waveform))); + %title(titlestring); + xlabel(gui_axes, 'Time (s)') + ylabel(gui_axes, 'Voltage (V)') + drawnow + end + end +else %digital mode + if (refreshrate_temp == 0) + refreshrate_temp = refreshrate; + if length(saved_waveform)>samplestoshow + if (scope_window_time>(500/375000)) + temp_waveform = saved_waveform((length(saved_waveform) - samplestoshow):samplestoshow/500: length(saved_waveform)); + temp_waveform = typecast(temp_waveform, 'uint8'); + temp_waveform = logical(bitand(temp_waveform,16)); + else + throwaway = round((ceil(samplestoshow)-samplestoshow)*8); + dig_samples = saved_waveform((length(saved_waveform) - samplestoshow) : length(saved_waveform)); + dig_samples = typecast(dig_samples, 'uint8'); + temp_waveform = false(1,length(dig_samples)*8); + temp_waveform(1:8:length(temp_waveform)) = bitand(dig_samples,128); + temp_waveform(2:8:length(temp_waveform)) = bitand(dig_samples,64); + temp_waveform(3:8:length(temp_waveform)) = bitand(dig_samples,32); + temp_waveform(4:8:length(temp_waveform)) = bitand(dig_samples,16); + temp_waveform(5:8:length(temp_waveform)) = bitand(dig_samples,8); + temp_waveform(6:8:length(temp_waveform)) = bitand(dig_samples,4); + temp_waveform(7:8:length(temp_waveform)) = bitand(dig_samples,2); + temp_waveform(8:8:length(temp_waveform)) = bitand(dig_samples,1); + + temp_waveform = temp_waveform((throwaway+1):end); + temp_waveform = temp_waveform(1:length(temp_waveform)/500:end); + end + taxis = linspace(-scope_window_time,0,length(temp_waveform)); + stairs(taxis, temp_waveform); + end + else + axis([-scope_window_time 0 -0.1 1.1]) + titlestring = sprintf('Showing Digital Waveform\nInsert Information here! (Baud Rate?)'); + title(titlestring); + xlabel('Time') + ylabel('Logic Value') + drawnow + end +end +toc \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/f3/f3685fb5bb5629016249592d02bc3d60a4b72e50.svn-base b/Old Matlab Interface/.svn/pristine/f3/f3685fb5bb5629016249592d02bc3d60a4b72e50.svn-base new file mode 100644 index 00000000..ab2a692d --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/f3/f3685fb5bb5629016249592d02bc3d60a4b72e50.svn-base @@ -0,0 +1,22 @@ +function [] = setscopegain(channel, gain); + + +if(gain~=0.5 & gain~=1 & gain~=2 & gain~=4 & gain~=8 & gain~=16 & gain~=32 & gain~=64) + error('Valid values of gain are 0.5, 1, 2, 4, 8, 16, 32, 64'); +end + +global scope_gain +scope_gain = gain; + +gain_mask = uint8([]); + +%%FIX THIS UP +if (gain == 1/2) + gain_mask = 7*4; +else + gain_mask = log2(gain) * 4; +end + +%fprintf('%s\n', dec2bin(gain_mask,8)); + +mex_usb_send_control('40', 'a6', dec2hex(channel), dec2hex(gain_mask), '0', '0'); \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/f4/f48d51886747a7bb88daf54ea7b7aa914607f5dd.svn-base b/Old Matlab Interface/.svn/pristine/f4/f48d51886747a7bb88daf54ea7b7aa914607f5dd.svn-base new file mode 100644 index 00000000..64876bbd --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/f4/f48d51886747a7bb88daf54ea7b7aa914607f5dd.svn-base @@ -0,0 +1,3290 @@ +ERROR: Z:\SVNMAIN\GoogleCode\usb-travis\trunk\libusbK\bindings\libusbK.cs(1281,9): BCE0000: enum member initializer must be integer value + +#region Copyright (c) Travis Robinson + +// Copyright (c) 2012 Travis Robinson +// All rights reserved. +// +// C# libusbK Bindings +// Auto-generated on: 04.28.2011 +// +// 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. +// +// 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 TRAVIS LEE ROBINSON +// 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. + +#endregion + + +// ReSharper disable InconsistentNaming +// ReSharper disable CheckNamespace +// ReSharper disable UnassignedReadonlyField + +namespace libusbK + +import System +import System.Diagnostics +import System.Runtime.InteropServices + +public static class AllKOptions: + + #region Public Members + + public static LIBUSBK_FULLPATH_TO_ALTERNATE_DLL as string + + #endregion + + +public static class AllKConstants: + + #region Public Members + + public static final KLST_STRING_MAX_LEN = 256 + + + public static final LIBUSBK_DLL = 'libusbK.dll' + + + public static final USB_CONFIG_POWERED_MASK as byte = 192 + + + public static final USB_ENDPOINT_ADDRESS_MASK as byte = 15 + + + public static final USB_ENDPOINT_DIRECTION_MASK as byte = 128 + + #endregion + + +public enum PipePolicyType: + + SHORT_PACKET_TERMINATE = 1 + + AUTO_CLEAR_STALL = 2 + + PIPE_TRANSFER_TIMEOUT = 3 + + IGNORE_SHORT_PACKETS = 4 + + ALLOW_PARTIAL_READS = 5 + + AUTO_FLUSH = 6 + + RAW_IO = 7 + + MAXIMUM_TRANSFER_SIZE = 8 + + RESET_PIPE_ON_RESUME = 9 + + + ISO_START_LATENCY = 32 + + ISO_ALWAYS_START_ASAP = 33 + + ISO_NUM_FIXED_PACKETS = 34 + + + SIMUL_PARALLEL_REQUESTS = 48 + + +public enum PowerPolicyType: + + AUTO_SUSPEND = 129 + + SUSPEND_DELAY = 131 + + +public enum DeviceInformationType: + + DEVICE_SPEED = 1 + + +public enum EndpointType: + + CONTROL = 0 + + + ISOCHRONOUS = 1 + + + BULK = 2 + + + INTERRUPT = 3 + + + MASK = 3 + + +public static class ErrorCodes: + + #region Public Members + + public static final AccessDenied = 5 + + + public static final Busy = 170 + + + public static final Cancelled = 1223 + + + public static final Empty = 4306 + + + public static final InvalidHandle = 6 + + + public static final InvalidParameter = 87 + + + public static final IoIncomplete = 996 + + + public static final IoPending = 997 + + + public static final MoreData = 234 + + + public static final NoMoreItems = 259 + + + public static final NotEnoughMemory = 8 + + + public static final NotFound = 1168 + + + public static final NotSupported = 50 + + + public static final OperationAborted = 995 + + + public static final ResourceNotAvailable = 5006 + + + public static final ResourceNotFound = 5007 + + + public static final SemTimeout = 121 + + + public static final Success = 0 + + + public static final ThreadNotInProcess = 566 + + + public static final ThreadWasSuspended = 699 + + + public static final TooManyModules = 214 + + #endregion + + +public interface IKLIB_HANDLE: + + #region Public Members + + def GetContext() as IntPtr + + HandleType as KLIB_HANDLE_TYPE: + get + + Pointer as IntPtr: + get + + def SetCleanupCallback(CleanupCallback as KLIB_HANDLE_CLEANUP_CB) as bool + + def SetContext(UserContext as IntPtr) as bool + + #endregion + + +#region Opaque library handles + +public struct KLST_HANDLE(IKLIB_HANDLE): + + #region IKLIB_HANDLE Members + + public Pointer as IntPtr: + get: + return mHandlePtr + + + public HandleType as KLIB_HANDLE_TYPE: + get: + return KLIB_HANDLE_TYPE.LSTK + + + public def GetContext() as IntPtr: + return AllKFunctions.LibK_GetContext(mHandlePtr, HandleType) + + + public def SetContext(UserContext as IntPtr) as bool: + return AllKFunctions.LibK_SetContext(mHandlePtr, HandleType, UserContext) + + + public def SetCleanupCallback(CleanupCallback as KLIB_HANDLE_CLEANUP_CB) as bool: + return AllKFunctions.LibK_SetCleanupCallback(mHandlePtr, HandleType, CleanupCallback) + + + #endregion + + #region Public Members + + public def constructor(Handle as IntPtr): + mHandlePtr = Handle + + + #endregion + + #region Private Members + + private final mHandlePtr as IntPtr + + #endregion + + +public struct KHOT_HANDLE(IKLIB_HANDLE): + + #region IKLIB_HANDLE Members + + public Pointer as IntPtr: + get: + return mHandlePtr + + + public HandleType as KLIB_HANDLE_TYPE: + get: + return KLIB_HANDLE_TYPE.HOTK + + + public def GetContext() as IntPtr: + return AllKFunctions.LibK_GetContext(mHandlePtr, HandleType) + + + public def SetContext(UserContext as IntPtr) as bool: + return AllKFunctions.LibK_SetContext(mHandlePtr, HandleType, UserContext) + + + public def SetCleanupCallback(CleanupCallback as KLIB_HANDLE_CLEANUP_CB) as bool: + return AllKFunctions.LibK_SetCleanupCallback(mHandlePtr, HandleType, CleanupCallback) + + + #endregion + + #region Public Members + + public def constructor(Handle as IntPtr): + mHandlePtr = Handle + + + #endregion + + #region Private Members + + private final mHandlePtr as IntPtr + + #endregion + + +public struct KUSB_HANDLE(IKLIB_HANDLE): + + #region IKLIB_HANDLE Members + + public Pointer as IntPtr: + get: + return mHandlePtr + + + public HandleType as KLIB_HANDLE_TYPE: + get: + return KLIB_HANDLE_TYPE.USBK + + + public def GetContext() as IntPtr: + return AllKFunctions.LibK_GetContext(mHandlePtr, HandleType) + + + public def SetContext(UserContext as IntPtr) as bool: + return AllKFunctions.LibK_SetContext(mHandlePtr, HandleType, UserContext) + + + public def SetCleanupCallback(CleanupCallback as KLIB_HANDLE_CLEANUP_CB) as bool: + return AllKFunctions.LibK_SetCleanupCallback(mHandlePtr, HandleType, CleanupCallback) + + + #endregion + + #region USB Shared Device Context + + public def GetSharedContext() as IntPtr: + return AllKFunctions.LibK_GetContext(mHandlePtr, KLIB_HANDLE_TYPE.USBSHAREDK) + + + public def SetSharedCleanupCallback(CleanupCallback as KLIB_HANDLE_CLEANUP_CB) as bool: + return AllKFunctions.LibK_SetCleanupCallback(mHandlePtr, KLIB_HANDLE_TYPE.USBSHAREDK, CleanupCallback) + + + public def SetSharedContext(UserContext as IntPtr) as bool: + return AllKFunctions.LibK_SetContext(mHandlePtr, KLIB_HANDLE_TYPE.USBSHAREDK, UserContext) + + + #endregion + + #region Public Members + + public def constructor(Handle as IntPtr): + mHandlePtr = Handle + + + #endregion + + #region Private Members + + private final mHandlePtr as IntPtr + + #endregion + + +public struct KOVL_POOL_HANDLE(IKLIB_HANDLE): + + #region IKLIB_HANDLE Members + + public Pointer as IntPtr: + get: + return mHandlePtr + + + public HandleType as KLIB_HANDLE_TYPE: + get: + return KLIB_HANDLE_TYPE.OVLPOOLK + + + public def GetContext() as IntPtr: + return AllKFunctions.LibK_GetContext(mHandlePtr, HandleType) + + + public def SetContext(UserContext as IntPtr) as bool: + return AllKFunctions.LibK_SetContext(mHandlePtr, HandleType, UserContext) + + + public def SetCleanupCallback(CleanupCallback as KLIB_HANDLE_CLEANUP_CB) as bool: + return AllKFunctions.LibK_SetCleanupCallback(mHandlePtr, HandleType, CleanupCallback) + + + #endregion + + #region Public Members + + public def constructor(Handle as IntPtr): + mHandlePtr = Handle + + + #endregion + + #region Private Members + + private final mHandlePtr as IntPtr + + #endregion + + +public struct KOVL_HANDLE(IKLIB_HANDLE): + + #region IKLIB_HANDLE Members + + public Pointer as IntPtr: + get: + return mHandlePtr + + + public HandleType as KLIB_HANDLE_TYPE: + get: + return KLIB_HANDLE_TYPE.OVLK + + + public def GetContext() as IntPtr: + return AllKFunctions.LibK_GetContext(mHandlePtr, HandleType) + + + public def SetContext(UserContext as IntPtr) as bool: + return AllKFunctions.LibK_SetContext(mHandlePtr, HandleType, UserContext) + + + public def SetCleanupCallback(CleanupCallback as KLIB_HANDLE_CLEANUP_CB) as bool: + return AllKFunctions.LibK_SetCleanupCallback(mHandlePtr, HandleType, CleanupCallback) + + + #endregion + + #region Public Members + + public def constructor(Handle as IntPtr): + mHandlePtr = Handle + + + #endregion + + #region Private Members + + private final mHandlePtr as IntPtr + + #endregion + + +public struct KSTM_HANDLE(IKLIB_HANDLE): + + #region IKLIB_HANDLE Members + + public Pointer as IntPtr: + get: + return mHandlePtr + + + public HandleType as KLIB_HANDLE_TYPE: + get: + return KLIB_HANDLE_TYPE.STMK + + + public def GetContext() as IntPtr: + return AllKFunctions.LibK_GetContext(mHandlePtr, HandleType) + + + public def SetContext(UserContext as IntPtr) as bool: + return AllKFunctions.LibK_SetContext(mHandlePtr, HandleType, UserContext) + + + public def SetCleanupCallback(CleanupCallback as KLIB_HANDLE_CLEANUP_CB) as bool: + return AllKFunctions.LibK_SetCleanupCallback(mHandlePtr, HandleType, CleanupCallback) + + + #endregion + + #region Public Members + + public def constructor(Handle as IntPtr): + mHandlePtr = Handle + + + #endregion + + #region Private Members + + private final mHandlePtr as IntPtr + + #endregion + + +#endregion + +#region Internal Function Imports + +internal static class AllKFunctions: + + #region Delegates + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable HotK_FreeAllDelegate() as void + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable HotK_FreeDelegate([In] Handle as KHOT_HANDLE) as bool + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable HotK_InitDelegate([Out] ref Handle as KHOT_HANDLE, [In] [Out] ref InitParams as KHOT_PARAMS) as bool + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable IsoK_EnumPacketsDelegate([In] IsoContext as KISO_CONTEXT, EnumPackets as KISO_ENUM_PACKETS_CB, StartPacketIndex as int, UserState as IntPtr) as bool + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable IsoK_FreeDelegate([In] IsoContext as KISO_CONTEXT) as bool + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable IsoK_GetPacketDelegate([In] IsoContext as KISO_CONTEXT, PacketIndex as int, [Out] ref IsoPacket as KISO_PACKET) as bool + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable IsoK_InitDelegate([Out] ref IsoContext as KISO_CONTEXT, NumberOfPackets as int, StartFrame as int) as bool + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable IsoK_ReUseDelegate([In] IsoContext as KISO_CONTEXT) as bool + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable IsoK_SetPacketDelegate([In] IsoContext as KISO_CONTEXT, PacketIndex as int, [In] ref IsoPacket as KISO_PACKET) as bool + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable IsoK_SetPacketsDelegate([In] IsoContext as KISO_CONTEXT, PacketSize as int) as bool + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable LibK_Context_FreeDelegate() as void + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable LibK_Context_InitDelegate(Heap as IntPtr, Reserved as IntPtr) as bool + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable LibK_CopyDriverAPIDelegate([Out] ref DriverAPI as KUSB_DRIVER_API, [In] UsbHandle as KUSB_HANDLE) as bool + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable LibK_GetContextDelegate([In] Handle as IntPtr, HandleType as KLIB_HANDLE_TYPE) as IntPtr + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable LibK_GetDefaultContextDelegate(HandleType as KLIB_HANDLE_TYPE) as IntPtr + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable LibK_GetProcAddressDelegate(ProcAddress as IntPtr, DriverID as int, FunctionID as int) as bool + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable LibK_GetVersionDelegate([Out] ref Version as KLIB_VERSION) as void + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable LibK_LoadDriverAPIDelegate([Out] ref DriverAPI as KUSB_DRIVER_API, DriverID as int) as bool + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable LibK_SetCleanupCallbackDelegate([In] Handle as IntPtr, HandleType as KLIB_HANDLE_TYPE, CleanupCB as KLIB_HANDLE_CLEANUP_CB) as bool + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable LibK_SetContextDelegate([In] Handle as IntPtr, HandleType as KLIB_HANDLE_TYPE, ContextValue as IntPtr) as bool + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable LibK_SetDefaultContextDelegate(HandleType as KLIB_HANDLE_TYPE, ContextValue as IntPtr) as bool + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable LstK_CountDelegate([In] DeviceList as KLST_HANDLE, ref Count as int) as bool + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable LstK_CurrentDelegate([In] DeviceList as KLST_HANDLE, [Out] ref DeviceInfo as KLST_DEVINFO_HANDLE) as bool + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable LstK_EnumerateDelegate([In] DeviceList as KLST_HANDLE, EnumDevListCB as KLST_ENUM_DEVINFO_CB, Context as IntPtr) as bool + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable LstK_FindByVidPidDelegate([In] DeviceList as KLST_HANDLE, Vid as int, Pid as int, [Out] ref DeviceInfo as KLST_DEVINFO_HANDLE) as bool + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable LstK_FreeDelegate([In] DeviceList as KLST_HANDLE) as bool + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable LstK_InitDelegate([Out] ref DeviceList as KLST_HANDLE, Flags as KLST_FLAG) as bool + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable LstK_InitExDelegate([Out] ref DeviceList as KLST_HANDLE, Flags as KLST_FLAG, [In] ref PatternMatch as KLST_PATTERN_MATCH) as bool + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable LstK_MoveNextDelegate([In] DeviceList as KLST_HANDLE, [Out] ref DeviceInfo as KLST_DEVINFO_HANDLE) as bool + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable LstK_MoveResetDelegate([In] DeviceList as KLST_HANDLE) as void + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable OvlK_AcquireDelegate([Out] ref OverlappedK as KOVL_HANDLE, [In] PoolHandle as KOVL_POOL_HANDLE) as bool + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable OvlK_FreeDelegate([In] PoolHandle as KOVL_POOL_HANDLE) as bool + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable OvlK_GetEventHandleDelegate([In] OverlappedK as KOVL_HANDLE) as IntPtr + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable OvlK_InitDelegate([Out] ref PoolHandle as KOVL_POOL_HANDLE, [In] UsbHandle as KUSB_HANDLE, MaxOverlappedCount as int, Flags as KOVL_POOL_FLAG) as bool + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable OvlK_IsCompleteDelegate([In] OverlappedK as KOVL_HANDLE) as bool + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable OvlK_ReUseDelegate([In] OverlappedK as KOVL_HANDLE) as bool + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable OvlK_ReleaseDelegate([In] OverlappedK as KOVL_HANDLE) as bool + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable OvlK_WaitAndReleaseDelegate([In] OverlappedK as KOVL_HANDLE, TimeoutMS as int, ref TransferredLength as int) as bool + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable OvlK_WaitDelegate([In] OverlappedK as KOVL_HANDLE, TimeoutMS as int, WaitFlags as KOVL_WAIT_FLAG, ref TransferredLength as int) as bool + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable OvlK_WaitOldestDelegate([In] PoolHandle as KOVL_POOL_HANDLE, [Out] ref OverlappedK as KOVL_HANDLE, TimeoutMS as int, WaitFlags as KOVL_WAIT_FLAG, ref TransferredLength as int) as bool + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable OvlK_WaitOrCancelDelegate([In] OverlappedK as KOVL_HANDLE, TimeoutMS as int, ref TransferredLength as int) as bool + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable StmK_FreeDelegate([In] StreamHandle as KSTM_HANDLE) as bool + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable StmK_InitDelegate([Out] ref StreamHandle as KSTM_HANDLE, [In] UsbHandle as KUSB_HANDLE, PipeID as byte, MaxTransferSize as int, MaxPendingTransfers as int, MaxPendingIO as int, [In] ref Callbacks as KSTM_CALLBACK, Flags as KSTM_FLAG) as bool + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable StmK_ReadDelegate([In] StreamHandle as KSTM_HANDLE, Buffer as IntPtr, Offset as int, Length as int, ref TransferredLength as int) as bool + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable StmK_StartDelegate([In] StreamHandle as KSTM_HANDLE) as bool + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable StmK_StopDelegate([In] StreamHandle as KSTM_HANDLE, TimeoutCancelMS as int) as bool + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable StmK_WriteDelegate([In] StreamHandle as KSTM_HANDLE, Buffer as IntPtr, Offset as int, Length as int, ref TransferredLength as int) as bool + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable UsbK_FreeDelegate([In] InterfaceHandle as KUSB_HANDLE) as bool + + #endregion + + private static def constructor(): + if String.IsNullOrEmpty(AllKOptions.LIBUSBK_FULLPATH_TO_ALTERNATE_DLL): + mModuleLibusbK = LoadLibraryEx(AllKConstants.LIBUSBK_DLL, IntPtr.Zero, LoadLibraryFlags.NONE) + else: + mModuleLibusbK = LoadLibraryEx(AllKOptions.LIBUSBK_FULLPATH_TO_ALTERNATE_DLL, IntPtr.Zero, LoadLibraryFlags.LOAD_WITH_ALTERED_SEARCH_PATH) + + if mModuleLibusbK == IntPtr.Zero: + raise DllNotFoundException('libusbK.dll not found. Please install drivers/applications and retry.') + + LoadDynamicFunctions() + + + #region Nested Enumerations + + [Flags] + private enum LoadLibraryFlags: + + NONE = 0 + + DONT_RESOLVE_DLL_REFERENCES = 1 + + LOAD_IGNORE_CODE_AUTHZ_LEVEL = 16 + + LOAD_LIBRARY_AS_DATAFILE = 2 + + LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE = 64 + + LOAD_LIBRARY_AS_IMAGE_RESOURCE = 32 + + LOAD_WITH_ALTERED_SEARCH_PATH = 8 + + + #endregion + + #region Public Members + + public static HotK_Free as HotK_FreeDelegate + + public static HotK_FreeAll as HotK_FreeAllDelegate + + public static HotK_Init as HotK_InitDelegate + + public static IsoK_EnumPackets as IsoK_EnumPacketsDelegate + + public static IsoK_Free as IsoK_FreeDelegate + + public static IsoK_GetPacket as IsoK_GetPacketDelegate + + public static IsoK_Init as IsoK_InitDelegate + + public static IsoK_ReUse as IsoK_ReUseDelegate + + public static IsoK_SetPacket as IsoK_SetPacketDelegate + + public static IsoK_SetPackets as IsoK_SetPacketsDelegate + + public static LibK_Context_Free as LibK_Context_FreeDelegate + + public static LibK_Context_Init as LibK_Context_InitDelegate + + + public static LibK_CopyDriverAPI as LibK_CopyDriverAPIDelegate + + public static LibK_GetContext as LibK_GetContextDelegate + + public static LibK_GetDefaultContext as LibK_GetDefaultContextDelegate + + public static LibK_GetProcAddress as LibK_GetProcAddressDelegate + + public static LibK_GetVersion as LibK_GetVersionDelegate + + public static LibK_LoadDriverAPI as LibK_LoadDriverAPIDelegate + + public static LibK_SetCleanupCallback as LibK_SetCleanupCallbackDelegate + + public static LibK_SetContext as LibK_SetContextDelegate + + public static LibK_SetDefaultContext as LibK_SetDefaultContextDelegate + + public static LstK_Count as LstK_CountDelegate + + public static LstK_Current as LstK_CurrentDelegate + + public static LstK_Enumerate as LstK_EnumerateDelegate + + public static LstK_FindByVidPid as LstK_FindByVidPidDelegate + + public static LstK_Free as LstK_FreeDelegate + + public static LstK_Init as LstK_InitDelegate + + public static LstK_InitEx as LstK_InitExDelegate + + public static LstK_MoveNext as LstK_MoveNextDelegate + + public static LstK_MoveReset as LstK_MoveResetDelegate + + public static OvlK_Acquire as OvlK_AcquireDelegate + + public static OvlK_Free as OvlK_FreeDelegate + + public static OvlK_GetEventHandle as OvlK_GetEventHandleDelegate + + public static OvlK_Init as OvlK_InitDelegate + + public static OvlK_IsComplete as OvlK_IsCompleteDelegate + + public static OvlK_ReUse as OvlK_ReUseDelegate + + public static OvlK_Release as OvlK_ReleaseDelegate + + public static OvlK_Wait as OvlK_WaitDelegate + + public static OvlK_WaitAndRelease as OvlK_WaitAndReleaseDelegate + + public static OvlK_WaitOldest as OvlK_WaitOldestDelegate + + public static OvlK_WaitOrCancel as OvlK_WaitOrCancelDelegate + + public static StmK_Free as StmK_FreeDelegate + + public static StmK_Init as StmK_InitDelegate + + public static StmK_Read as StmK_ReadDelegate + + public static StmK_Start as StmK_StartDelegate + + public static StmK_Stop as StmK_StopDelegate + + public static StmK_Write as StmK_WriteDelegate + + public static UsbK_Free as UsbK_FreeDelegate + + + #endregion + + #region Private Members + + [DllImport('kernel32.dll', CharSet: CharSet.Ansi, ExactSpelling: true, SetLastError: true)] + private static def GetProcAddress(hModule as IntPtr, procName as string) as IntPtr: + pass + + + private static def LoadDynamicFunctions(): + LibK_GetVersion = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'LibK_GetVersion'), typeof(LibK_GetVersionDelegate)) cast LibK_GetVersionDelegate) + LibK_GetContext = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'LibK_GetContext'), typeof(LibK_GetContextDelegate)) cast LibK_GetContextDelegate) + LibK_SetContext = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'LibK_SetContext'), typeof(LibK_SetContextDelegate)) cast LibK_SetContextDelegate) + LibK_SetCleanupCallback = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'LibK_SetCleanupCallback'), typeof(LibK_SetCleanupCallbackDelegate)) cast LibK_SetCleanupCallbackDelegate) + LibK_LoadDriverAPI = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'LibK_LoadDriverAPI'), typeof(LibK_LoadDriverAPIDelegate)) cast LibK_LoadDriverAPIDelegate) + LibK_CopyDriverAPI = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'LibK_CopyDriverAPI'), typeof(LibK_CopyDriverAPIDelegate)) cast LibK_CopyDriverAPIDelegate) + LibK_GetProcAddress = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'LibK_GetProcAddress'), typeof(LibK_GetProcAddressDelegate)) cast LibK_GetProcAddressDelegate) + LibK_SetDefaultContext = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'LibK_SetDefaultContext'), typeof(LibK_SetDefaultContextDelegate)) cast LibK_SetDefaultContextDelegate) + LibK_GetDefaultContext = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'LibK_GetDefaultContext'), typeof(LibK_GetDefaultContextDelegate)) cast LibK_GetDefaultContextDelegate) + LibK_Context_Init = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'LibK_Context_Init'), typeof(LibK_Context_InitDelegate)) cast LibK_Context_InitDelegate) + LibK_Context_Free = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'LibK_Context_Free'), typeof(LibK_Context_FreeDelegate)) cast LibK_Context_FreeDelegate) + UsbK_Free = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'UsbK_Free'), typeof(UsbK_FreeDelegate)) cast UsbK_FreeDelegate) + LstK_Init = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'LstK_Init'), typeof(LstK_InitDelegate)) cast LstK_InitDelegate) + LstK_InitEx = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'LstK_InitEx'), typeof(LstK_InitExDelegate)) cast LstK_InitExDelegate) + LstK_Free = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'LstK_Free'), typeof(LstK_FreeDelegate)) cast LstK_FreeDelegate) + LstK_Enumerate = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'LstK_Enumerate'), typeof(LstK_EnumerateDelegate)) cast LstK_EnumerateDelegate) + LstK_Current = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'LstK_Current'), typeof(LstK_CurrentDelegate)) cast LstK_CurrentDelegate) + LstK_MoveNext = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'LstK_MoveNext'), typeof(LstK_MoveNextDelegate)) cast LstK_MoveNextDelegate) + LstK_MoveReset = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'LstK_MoveReset'), typeof(LstK_MoveResetDelegate)) cast LstK_MoveResetDelegate) + LstK_FindByVidPid = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'LstK_FindByVidPid'), typeof(LstK_FindByVidPidDelegate)) cast LstK_FindByVidPidDelegate) + LstK_Count = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'LstK_Count'), typeof(LstK_CountDelegate)) cast LstK_CountDelegate) + HotK_Init = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'HotK_Init'), typeof(HotK_InitDelegate)) cast HotK_InitDelegate) + HotK_Free = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'HotK_Free'), typeof(HotK_FreeDelegate)) cast HotK_FreeDelegate) + HotK_FreeAll = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'HotK_FreeAll'), typeof(HotK_FreeAllDelegate)) cast HotK_FreeAllDelegate) + OvlK_Acquire = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'OvlK_Acquire'), typeof(OvlK_AcquireDelegate)) cast OvlK_AcquireDelegate) + OvlK_Release = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'OvlK_Release'), typeof(OvlK_ReleaseDelegate)) cast OvlK_ReleaseDelegate) + OvlK_Init = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'OvlK_Init'), typeof(OvlK_InitDelegate)) cast OvlK_InitDelegate) + OvlK_Free = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'OvlK_Free'), typeof(OvlK_FreeDelegate)) cast OvlK_FreeDelegate) + OvlK_GetEventHandle = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'OvlK_GetEventHandle'), typeof(OvlK_GetEventHandleDelegate)) cast OvlK_GetEventHandleDelegate) + OvlK_Wait = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'OvlK_Wait'), typeof(OvlK_WaitDelegate)) cast OvlK_WaitDelegate) + OvlK_WaitOldest = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'OvlK_WaitOldest'), typeof(OvlK_WaitOldestDelegate)) cast OvlK_WaitOldestDelegate) + OvlK_WaitOrCancel = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'OvlK_WaitOrCancel'), typeof(OvlK_WaitOrCancelDelegate)) cast OvlK_WaitOrCancelDelegate) + OvlK_WaitAndRelease = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'OvlK_WaitAndRelease'), typeof(OvlK_WaitAndReleaseDelegate)) cast OvlK_WaitAndReleaseDelegate) + OvlK_IsComplete = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'OvlK_IsComplete'), typeof(OvlK_IsCompleteDelegate)) cast OvlK_IsCompleteDelegate) + OvlK_ReUse = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'OvlK_ReUse'), typeof(OvlK_ReUseDelegate)) cast OvlK_ReUseDelegate) + StmK_Init = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'StmK_Init'), typeof(StmK_InitDelegate)) cast StmK_InitDelegate) + StmK_Free = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'StmK_Free'), typeof(StmK_FreeDelegate)) cast StmK_FreeDelegate) + StmK_Start = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'StmK_Start'), typeof(StmK_StartDelegate)) cast StmK_StartDelegate) + StmK_Stop = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'StmK_Stop'), typeof(StmK_StopDelegate)) cast StmK_StopDelegate) + StmK_Read = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'StmK_Read'), typeof(StmK_ReadDelegate)) cast StmK_ReadDelegate) + StmK_Write = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'StmK_Write'), typeof(StmK_WriteDelegate)) cast StmK_WriteDelegate) + IsoK_Init = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'IsoK_Init'), typeof(IsoK_InitDelegate)) cast IsoK_InitDelegate) + IsoK_Free = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'IsoK_Free'), typeof(IsoK_FreeDelegate)) cast IsoK_FreeDelegate) + IsoK_SetPackets = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'IsoK_SetPackets'), typeof(IsoK_SetPacketsDelegate)) cast IsoK_SetPacketsDelegate) + IsoK_SetPacket = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'IsoK_SetPacket'), typeof(IsoK_SetPacketDelegate)) cast IsoK_SetPacketDelegate) + IsoK_GetPacket = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'IsoK_GetPacket'), typeof(IsoK_GetPacketDelegate)) cast IsoK_GetPacketDelegate) + IsoK_EnumPackets = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'IsoK_EnumPackets'), typeof(IsoK_EnumPacketsDelegate)) cast IsoK_EnumPacketsDelegate) + IsoK_ReUse = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'IsoK_ReUse'), typeof(IsoK_ReUseDelegate)) cast IsoK_ReUseDelegate) + + + [DllImport('kernel32.dll')] + private static def LoadLibraryEx(lpFileName as string, hReservedNull as IntPtr, dwFlags as LoadLibraryFlags) as IntPtr: + pass + + + private static final mModuleLibusbK as IntPtr = IntPtr.Zero + + #endregion + + +#endregion + +#region Enumerations + +public enum USBD_PIPE_TYPE: + + UsbdPipeTypeControl + + + UsbdPipeTypeIsochronous + + + UsbdPipeTypeBulk + + + UsbdPipeTypeInterrupt + + +[Flags] +public enum KISO_FLAG: + + NONE = 0 + + + SET_START_FRAME = 1 + + +public enum KLIB_HANDLE_TYPE: + + HOTK + + + USBK + + + USBSHAREDK + + + LSTK + + + LSTINFOK + + + OVLK + + + OVLPOOLK + + + STMK + + + COUNT + + +[Flags] +public enum KLST_SYNC_FLAG: + + NONE = 0 + + + UNCHANGED = 1 + + + ADDED = 2 + + + REMOVED = 4 + + + CONNECT_CHANGE = 8 + + + MASK = 15 + + +[Flags] +public enum KLST_FLAG: + + NONE = 0 + + + INCLUDE_RAWGUID = 1 + + + INCLUDE_DISCONNECT = 2 + + +public enum BMREQUEST_DIR: + + HOST_TO_DEVICE = 0 + + DEVICE_TO_HOST = 1 + + +public enum BMREQUEST_TYPE: + + STANDARD = 0 + + + CLASS = 1 + + + VENDOR = 2 + + +public enum BMREQUEST_RECIPIENT: + + DEVICE = 0 + + + INTERFACE = 1 + + + ENDPOINT = 2 + + + OTHER = 3 + + +public enum USB_GETSTATUS: + + SELF_POWERED = 1 + + + REMOTE_WAKEUP_ENABLED = 2 + + +public enum USB_DESCRIPTOR_TYPE: + + DEVICE = 1 + + + CONFIGURATION = 2 + + + STRING = 3 + + + INTERFACE = 4 + + + ENDPOINT = 5 + + + DEVICE_QUALIFIER = 6 + + + CONFIG_POWER = 7 + + + INTERFACE_POWER = 8 + + + INTERFACE_ASSOCIATION = 11 + + +public enum KUSB_PROPERTY: + + DEVICE_FILE_HANDLE + + + COUNT + + +public enum KUSB_DRVID: + + LIBUSBK + + + LIBUSB0 + + + WINUSB + + + LIBUSB0_FILTER + + + COUNT + + +public enum KUSB_FNID: + + Init + + + Free + + + ClaimInterface + + + ReleaseInterface + + + SetAltInterface + + + GetAltInterface + + + GetDescriptor + + + ControlTransfer + + + SetPowerPolicy + + + GetPowerPolicy + + + SetConfiguration + + + GetConfiguration + + + ResetDevice + + + Initialize + + + SelectInterface + + + GetAssociatedInterface + + + Clone + + + QueryInterfaceSettings + + + QueryDeviceInformation + + + SetCurrentAlternateSetting + + + GetCurrentAlternateSetting + + + QueryPipe + + + SetPipePolicy + + + GetPipePolicy + + + ReadPipe + + + WritePipe + + + ResetPipe + + + AbortPipe + + + FlushPipe + + + IsoReadPipe + + + IsoWritePipe + + + GetCurrentFrameNumber + + + GetOverlappedResult + + + GetProperty + + + + COUNT + + +[Flags] +public enum KHOT_FLAG: + + NONE + + + PLUG_ALL_ON_INIT = 1 + + + PASS_DUPE_INSTANCE = 2 + + + POST_USER_MESSAGE = 4 + + +[Flags] +public enum KOVL_WAIT_FLAG: + + NONE = 0 + + + RELEASE_ON_SUCCESS = 1 + + + RELEASE_ON_FAIL = 2 + + + RELEASE_ON_SUCCESS_FAIL = 3 + + + CANCEL_ON_TIMEOUT = 4 + + + RELEASE_ON_TIMEOUT = 12 + + + RELEASE_ALWAYS = 15 + + + ALERTABLE = 16 + + +[Flags] +public enum KOVL_POOL_FLAG: + + NONE = 0 + + +[Flags] +public enum KSTM_FLAG(uint): + + NONE = 0 + + NO_PARTIAL_XFERS = 1048576 + + TIMEOUT_MASK = 131071 + + +public enum KSTM_COMPLETE_RESULT: + + VALID = 0 + + + INVALID + + +#endregion + +#region Structs + +[StructLayout(LayoutKind.Sequential, CharSet: CharSet.Ansi)] +public struct WINUSB_PIPE_INFORMATION: + + public PipeType as USBD_PIPE_TYPE + + + public PipeId as byte + + + public MaximumPacketSize as ushort + + + public Interval as byte + + + + public override def ToString() as string: + return string.Format('PipeType: {0}\nPipeId: {1}\nMaximumPacketSize: {2}\nInterval: {3}\n', PipeType, (PipeId.ToString('X2') + 'h'), MaximumPacketSize, (Interval.ToString('X2') + 'h')) + + +[StructLayout(LayoutKind.Sequential, CharSet: CharSet.Ansi, Pack: 1)] +public struct WINUSB_SETUP_PACKET: + + public RequestType as byte + + + public Request as byte + + + public Value as ushort + + + public Index as ushort + + + public Length as ushort + + + + public override def ToString() as string: + return string.Format('RequestType: {0}\nRequest: {1}\nValue: {2}\nIndex: {3}\nLength: {4}\n', (RequestType.ToString('X2') + 'h'), (Request.ToString('X2') + 'h'), (Value.ToString('X4') + 'h'), (Index.ToString('X4') + 'h'), Length) + + +[StructLayout(LayoutKind.Sequential, CharSet: CharSet.Ansi, Pack: 1)] +public struct KISO_PACKET: + + public Offset as int + + + public Length as ushort + + + public Status as ushort + + + + public override def ToString() as string: + return string.Format('Offset: {0}\nLength: {1}\nStatus: {2}\n', Offset, Length, (Status.ToString('X4') + 'h')) + + +[StructLayout(LayoutKind.Sequential)] +public struct KISO_CONTEXT: + + private final mHandlePtr as IntPtr + + + public def constructor(Handle as IntPtr): + mHandlePtr = Handle + + + public Pointer as IntPtr: + get: + return mHandlePtr + + + [StructLayout(LayoutKind.Sequential, CharSet: CharSet.Ansi, Pack: 1)] + private struct KISO_CONTEXT_MAP: + + private final Flags as KISO_FLAG + + + private final StartFrame as int + + + private final ErrorCount as short + + + private final NumberOfPackets as short + + + private final UrbHdrStatus as int + + + private static final ofsFlags as int = Marshal.OffsetOf(typeof(KISO_CONTEXT_MAP), 'Flags').ToInt32() + + private static final ofsStartFrame as int = Marshal.OffsetOf(typeof(KISO_CONTEXT_MAP), 'StartFrame').ToInt32() + + private static final ofsErrorCount as int = Marshal.OffsetOf(typeof(KISO_CONTEXT_MAP), 'ErrorCount').ToInt32() + + private static final ofsNumberOfPackets as int = Marshal.OffsetOf(typeof(KISO_CONTEXT_MAP), 'NumberOfPackets').ToInt32() + + private static final ofsUrbHdrStatus as int = Marshal.OffsetOf(typeof(KISO_CONTEXT_MAP), 'UrbHdrStatus').ToInt32() + + + + public Flags as KISO_FLAG: + get: + return (Marshal.ReadInt32(mHandlePtr, ofsFlags) cast KISO_FLAG) + + + + public StartFrame as int: + get: + return Marshal.ReadInt32(mHandlePtr, ofsStartFrame) + + + + public ErrorCount as short: + get: + return Marshal.ReadInt16(mHandlePtr, ofsErrorCount) + + + + public NumberOfPackets as short: + get: + return Marshal.ReadInt16(mHandlePtr, ofsNumberOfPackets) + + + + public UrbHdrStatus as int: + get: + return Marshal.ReadInt32(mHandlePtr, ofsUrbHdrStatus) + + + + public override def ToString() as string: + return string.Format('Flags: {0}\nStartFrame: {1}\nErrorCount: {2}\nNumberOfPackets: {3}\nUrbHdrStatus: {4}\n', Flags.ToString(), StartFrame, ErrorCount, NumberOfPackets, (UrbHdrStatus.ToString('X8') + 'h')) + + +[StructLayout(LayoutKind.Sequential, CharSet: CharSet.Ansi)] +public struct KLIB_VERSION: + + public Major as int + + + public Minor as int + + + public Micro as int + + + public Nano as int + + + public override def ToString() as string: + return string.Format('Major: {0}\nMinor: {1}\nMicro: {2}\nNano: {3}\n', Major, Minor, Micro, Nano) + + +[StructLayout(LayoutKind.Sequential, CharSet: CharSet.Ansi)] +public struct KLST_DEV_COMMON_INFO: + + public Vid as int + + + public Pid as int + + + public MI as int + + + // An ID that uniquely identifies a USB device. + [MarshalAs(UnmanagedType.ByValTStr, SizeConst: AllKConstants.KLST_STRING_MAX_LEN)] + public InstanceID as string + + + + public override def ToString() as string: + return string.Format('Vid: {0}\nPid: {1}\nMI: {2}\nInstanceID: {3}\n', (Vid.ToString('X4') + 'h'), (Pid.ToString('X4') + 'h'), (MI.ToString('X2') + 'h'), InstanceID) + + +[StructLayout(LayoutKind.Sequential)] +public struct KLST_DEVINFO_HANDLE(IKLIB_HANDLE): + + private final mHandlePtr as IntPtr + + + public def constructor(Handle as IntPtr): + mHandlePtr = Handle + + + public Pointer as IntPtr: + get: + return mHandlePtr + + + public HandleType as KLIB_HANDLE_TYPE: + get: + return KLIB_HANDLE_TYPE.LSTINFOK + + + public def GetContext() as IntPtr: + return AllKFunctions.LibK_GetContext(mHandlePtr, HandleType) + + + public def SetContext(UserContext as IntPtr) as bool: + return AllKFunctions.LibK_SetContext(mHandlePtr, HandleType, UserContext) + + + public def SetCleanupCallback(CleanupCallback as KLIB_HANDLE_CLEANUP_CB) as bool: + return AllKFunctions.LibK_SetCleanupCallback(mHandlePtr, HandleType, CleanupCallback) + + + [StructLayout(LayoutKind.Sequential, CharSet: CharSet.Ansi)] + private struct KLST_DEVINFO_MAP: + + private final Common as KLST_DEV_COMMON_INFO + + + private final DriverID as int + + + [MarshalAs(UnmanagedType.ByValTStr, SizeConst: AllKConstants.KLST_STRING_MAX_LEN)] + private final DeviceInterfaceGUID as string + + + [MarshalAs(UnmanagedType.ByValTStr, SizeConst: AllKConstants.KLST_STRING_MAX_LEN)] + private final DeviceID as string + + + [MarshalAs(UnmanagedType.ByValTStr, SizeConst: AllKConstants.KLST_STRING_MAX_LEN)] + private final ClassGUID as string + + + [MarshalAs(UnmanagedType.ByValTStr, SizeConst: AllKConstants.KLST_STRING_MAX_LEN)] + private final Mfg as string + + + [MarshalAs(UnmanagedType.ByValTStr, SizeConst: AllKConstants.KLST_STRING_MAX_LEN)] + private final DeviceDesc as string + + + [MarshalAs(UnmanagedType.ByValTStr, SizeConst: AllKConstants.KLST_STRING_MAX_LEN)] + private final Service as string + + + [MarshalAs(UnmanagedType.ByValTStr, SizeConst: AllKConstants.KLST_STRING_MAX_LEN)] + private final SymbolicLink as string + + + [MarshalAs(UnmanagedType.ByValTStr, SizeConst: AllKConstants.KLST_STRING_MAX_LEN)] + private final DevicePath as string + + + private final LUsb0FilterIndex as int + + + private final Connected as bool + + + private final SyncFlags as KLST_SYNC_FLAG + + + private final BusNumber as int + + + private final DeviceAddress as int + + + [MarshalAs(UnmanagedType.ByValTStr, SizeConst: AllKConstants.KLST_STRING_MAX_LEN)] + private final SerialNumber as string + + + private static final ofsCommon as int = Marshal.OffsetOf(typeof(KLST_DEVINFO_MAP), 'Common').ToInt32() + + private static final ofsDriverID as int = Marshal.OffsetOf(typeof(KLST_DEVINFO_MAP), 'DriverID').ToInt32() + + private static final ofsDeviceInterfaceGUID as int = Marshal.OffsetOf(typeof(KLST_DEVINFO_MAP), 'DeviceInterfaceGUID').ToInt32() + + private static final ofsDeviceID as int = Marshal.OffsetOf(typeof(KLST_DEVINFO_MAP), 'DeviceID').ToInt32() + + private static final ofsClassGUID as int = Marshal.OffsetOf(typeof(KLST_DEVINFO_MAP), 'ClassGUID').ToInt32() + + private static final ofsMfg as int = Marshal.OffsetOf(typeof(KLST_DEVINFO_MAP), 'Mfg').ToInt32() + + private static final ofsDeviceDesc as int = Marshal.OffsetOf(typeof(KLST_DEVINFO_MAP), 'DeviceDesc').ToInt32() + + private static final ofsService as int = Marshal.OffsetOf(typeof(KLST_DEVINFO_MAP), 'Service').ToInt32() + + private static final ofsSymbolicLink as int = Marshal.OffsetOf(typeof(KLST_DEVINFO_MAP), 'SymbolicLink').ToInt32() + + private static final ofsDevicePath as int = Marshal.OffsetOf(typeof(KLST_DEVINFO_MAP), 'DevicePath').ToInt32() + + private static final ofsLUsb0FilterIndex as int = Marshal.OffsetOf(typeof(KLST_DEVINFO_MAP), 'LUsb0FilterIndex').ToInt32() + + private static final ofsConnected as int = Marshal.OffsetOf(typeof(KLST_DEVINFO_MAP), 'Connected').ToInt32() + + private static final ofsSyncFlags as int = Marshal.OffsetOf(typeof(KLST_DEVINFO_MAP), 'SyncFlags').ToInt32() + + private static final ofsBusNumber as int = Marshal.OffsetOf(typeof(KLST_DEVINFO_MAP), 'BusNumber').ToInt32() + + private static final ofsDeviceAddress as int = Marshal.OffsetOf(typeof(KLST_DEVINFO_MAP), 'DeviceAddress').ToInt32() + + private static final ofsSerialNumber as int = Marshal.OffsetOf(typeof(KLST_DEVINFO_MAP), 'SerialNumber').ToInt32() + + + + public Common as KLST_DEV_COMMON_INFO: + get: + return (Marshal.PtrToStructure(IntPtr((mHandlePtr.ToInt64() + ofsCommon)), typeof(KLST_DEV_COMMON_INFO)) cast KLST_DEV_COMMON_INFO) + + + + public DriverID as int: + get: + return Marshal.ReadInt32(mHandlePtr, ofsDriverID) + + + + public DeviceInterfaceGUID as string: + get: + return Marshal.PtrToStringAnsi(IntPtr((mHandlePtr.ToInt64() + ofsDeviceInterfaceGUID))) + + + + public DeviceID as string: + get: + return Marshal.PtrToStringAnsi(IntPtr((mHandlePtr.ToInt64() + ofsDeviceID))) + + + + public ClassGUID as string: + get: + return Marshal.PtrToStringAnsi(IntPtr((mHandlePtr.ToInt64() + ofsClassGUID))) + + + + public Mfg as string: + get: + return Marshal.PtrToStringAnsi(IntPtr((mHandlePtr.ToInt64() + ofsMfg))) + + + + public DeviceDesc as string: + get: + return Marshal.PtrToStringAnsi(IntPtr((mHandlePtr.ToInt64() + ofsDeviceDesc))) + + + + public Service as string: + get: + return Marshal.PtrToStringAnsi(IntPtr((mHandlePtr.ToInt64() + ofsService))) + + + + public SymbolicLink as string: + get: + return Marshal.PtrToStringAnsi(IntPtr((mHandlePtr.ToInt64() + ofsSymbolicLink))) + + + + public DevicePath as string: + get: + return Marshal.PtrToStringAnsi(IntPtr((mHandlePtr.ToInt64() + ofsDevicePath))) + + + + public LUsb0FilterIndex as int: + get: + return Marshal.ReadInt32(mHandlePtr, ofsLUsb0FilterIndex) + + + + public Connected as bool: + get: + return (Marshal.ReadInt32(mHandlePtr, ofsConnected) != 0) + + + + public SyncFlags as KLST_SYNC_FLAG: + get: + return (Marshal.ReadInt32(mHandlePtr, ofsSyncFlags) cast KLST_SYNC_FLAG) + + + + public BusNumber as int: + get: + return Marshal.ReadInt32(mHandlePtr, ofsBusNumber) + + + + public DeviceAddress as int: + get: + return Marshal.ReadInt32(mHandlePtr, ofsDeviceAddress) + + + + public SerialNumber as string: + get: + return Marshal.PtrToStringAnsi(IntPtr((mHandlePtr.ToInt64() + ofsSerialNumber))) + + + + public override def ToString() as string: + return string.Format('DriverID: {0}\nDeviceInterfaceGUID: {1}\nDeviceID: {2}\nClassGUID: {3}\nMfg: {4}\nDeviceDesc: {5}\nService: {6}\nSymbolicLink: {7}\nDevicePath: {8}\nLUsb0FilterIndex: {9}\nConnected: {10}\nSyncFlags: {11}\nBusNumber: {12}\nDeviceAddress: {13}\nSerialNumber: {14}\n', DriverID, DeviceInterfaceGUID, DeviceID, ClassGUID, Mfg, DeviceDesc, Service, SymbolicLink, DevicePath, LUsb0FilterIndex, Connected, SyncFlags.ToString(), BusNumber, DeviceAddress, SerialNumber) + + +[StructLayout(LayoutKind.Sequential, CharSet: CharSet.Ansi, Size: 1024)] +public struct KLST_PATTERN_MATCH: + + [MarshalAs(UnmanagedType.ByValTStr, SizeConst: AllKConstants.KLST_STRING_MAX_LEN)] + public DeviceID as string + + + [MarshalAs(UnmanagedType.ByValTStr, SizeConst: AllKConstants.KLST_STRING_MAX_LEN)] + public DeviceInterfaceGUID as string + + + [MarshalAs(UnmanagedType.ByValTStr, SizeConst: AllKConstants.KLST_STRING_MAX_LEN)] + public ClassGUID as string + + + + public override def ToString() as string: + return string.Format('DeviceID: {0}\nDeviceInterfaceGUID: {1}\nClassGUID: {2}\n', DeviceID, DeviceInterfaceGUID, ClassGUID) + + +[StructLayout(LayoutKind.Sequential, CharSet: CharSet.Ansi, Pack: 1)] +public struct USB_DEVICE_DESCRIPTOR: + + public bLength as byte + + + public bDescriptorType as byte + + + public bcdUSB as ushort + + + public bDeviceClass as byte + + + public bDeviceSubClass as byte + + + public bDeviceProtocol as byte + + + public bMaxPacketSize0 as byte + + + public idVendor as ushort + + + public idProduct as ushort + + + public bcdDevice as ushort + + + public iManufacturer as byte + + + public iProduct as byte + + + public iSerialNumber as byte + + + public bNumConfigurations as byte + + + + public override def ToString() as string: + return string.Format('bLength: {0}\nbDescriptorType: {1}\nbcdUSB: {2}\nbDeviceClass: {3}\nbDeviceSubClass: {4}\nbDeviceProtocol: {5}\nbMaxPacketSize0: {6}\nidVendor: {7}\nidProduct: {8}\nbcdDevice: {9}\niManufacturer: {10}\niProduct: {11}\niSerialNumber: {12}\nbNumConfigurations: {13}\n', bLength, (bDescriptorType.ToString('X2') + 'h'), (bcdUSB.ToString('X4') + 'h'), (bDeviceClass.ToString('X2') + 'h'), (bDeviceSubClass.ToString('X2') + 'h'), (bDeviceProtocol.ToString('X2') + 'h'), bMaxPacketSize0, (idVendor.ToString('X4') + 'h'), (idProduct.ToString('X4') + 'h'), (bcdDevice.ToString('X4') + 'h'), iManufacturer, iProduct, iSerialNumber, bNumConfigurations) + + +[StructLayout(LayoutKind.Sequential, CharSet: CharSet.Ansi, Pack: 1)] +public struct USB_ENDPOINT_DESCRIPTOR: + + public bLength as byte + + + public bDescriptorType as byte + + + public bEndpointAddress as byte + + + public bmAttributes as byte + + + public wMaxPacketSize as ushort + + + public bInterval as byte + + + + public override def ToString() as string: + return string.Format('bLength: {0}\nbDescriptorType: {1}\nbEndpointAddress: {2}\nbmAttributes: {3}\nwMaxPacketSize: {4}\nbInterval: {5}\n', bLength, (bDescriptorType.ToString('X2') + 'h'), (bEndpointAddress.ToString('X2') + 'h'), (bmAttributes.ToString('X2') + 'h'), wMaxPacketSize, bInterval) + + +[StructLayout(LayoutKind.Sequential, CharSet: CharSet.Ansi, Pack: 1)] +public struct USB_CONFIGURATION_DESCRIPTOR: + + public bLength as byte + + + public bDescriptorType as byte + + + public wTotalLength as ushort + + + public bNumInterfaces as byte + + + public bConfigurationValue as byte + + + public iConfiguration as byte + + + public bmAttributes as byte + + + public MaxPower as byte + + + public override def ToString() as string: + return string.Format('bLength: {0}\nbDescriptorType: {1}\nwTotalLength: {2}\nbNumInterfaces: {3}\nbConfigurationValue: {4}\niConfiguration: {5}\nbmAttributes: {6}\nMaxPower: {7}\n', bLength, (bDescriptorType.ToString('X2') + 'h'), wTotalLength, bNumInterfaces, bConfigurationValue, iConfiguration, (bmAttributes.ToString('X2') + 'h'), MaxPower) + + +[StructLayout(LayoutKind.Sequential, CharSet: CharSet.Ansi, Pack: 1)] +public struct USB_INTERFACE_DESCRIPTOR: + + public bLength as byte + + + public bDescriptorType as byte + + + public bInterfaceNumber as byte + + + public bAlternateSetting as byte + + + public bNumEndpoints as byte + + + public bInterfaceClass as byte + + + public bInterfaceSubClass as byte + + + public bInterfaceProtocol as byte + + + public iInterface as byte + + + + public override def ToString() as string: + return string.Format('bLength: {0}\nbDescriptorType: {1}\nbInterfaceNumber: {2}\nbAlternateSetting: {3}\nbNumEndpoints: {4}\nbInterfaceClass: {5}\nbInterfaceSubClass: {6}\nbInterfaceProtocol: {7}\niInterface: {8}\n', bLength, (bDescriptorType.ToString('X2') + 'h'), bInterfaceNumber, bAlternateSetting, bNumEndpoints, (bInterfaceClass.ToString('X2') + 'h'), (bInterfaceSubClass.ToString('X2') + 'h'), (bInterfaceProtocol.ToString('X2') + 'h'), iInterface) + + +[StructLayout(LayoutKind.Sequential, CharSet: CharSet.Unicode, Pack: 1)] +public struct USB_STRING_DESCRIPTOR: + + public bLength as byte + + + public bDescriptorType as byte + + + [MarshalAs(UnmanagedType.ByValTStr, SizeConst: AllKConstants.KLST_STRING_MAX_LEN)] + public bString as string + + + + public override def ToString() as string: + return string.Format('bLength: {0}\nbDescriptorType: {1}\nbString: {2}\n', bLength, (bDescriptorType.ToString('X2') + 'h'), bString) + + +[StructLayout(LayoutKind.Sequential, CharSet: CharSet.Ansi, Pack: 1)] +public struct USB_COMMON_DESCRIPTOR: + + public bLength as byte + + + public bDescriptorType as byte + + + + public override def ToString() as string: + return string.Format('bLength: {0}\nbDescriptorType: {1}\n', bLength, (bDescriptorType.ToString('X2') + 'h')) + + +[StructLayout(LayoutKind.Sequential, CharSet: CharSet.Ansi, Pack: 1)] +public struct USB_INTERFACE_ASSOCIATION_DESCRIPTOR: + + public bLength as byte + + + public bDescriptorType as byte + + + public bFirstInterface as byte + + + public bInterfaceCount as byte + + + public bFunctionClass as byte + + + public bFunctionSubClass as byte + + + public bFunctionProtocol as byte + + + public iFunction as byte + + + + public override def ToString() as string: + return string.Format('bLength: {0}\nbDescriptorType: {1}\nbFirstInterface: {2}\nbInterfaceCount: {3}\nbFunctionClass: {4}\nbFunctionSubClass: {5}\nbFunctionProtocol: {6}\niFunction: {7}\n', bLength, (bDescriptorType.ToString('X2') + 'h'), bFirstInterface, bInterfaceCount, (bFunctionClass.ToString('X2') + 'h'), (bFunctionSubClass.ToString('X2') + 'h'), (bFunctionProtocol.ToString('X2') + 'h'), iFunction) + + +[StructLayout(LayoutKind.Sequential, CharSet: CharSet.Ansi)] +public struct KUSB_DRIVER_API_INFO: + + public DriverID as int + + + public FunctionCount as int + + + + public override def ToString() as string: + return string.Format('DriverID: {0}\nFunctionCount: {1}\n', DriverID, FunctionCount) + + +[StructLayout(LayoutKind.Sequential, CharSet: CharSet.Ansi, Size: 512)] +public struct KUSB_DRIVER_API: + + public Info as KUSB_DRIVER_API_INFO + + + + [MarshalAs(UnmanagedType.FunctionPtr)] + public Init as KUSB_InitDelegate + + + + [MarshalAs(UnmanagedType.FunctionPtr)] + public Free as KUSB_FreeDelegate + + + + [MarshalAs(UnmanagedType.FunctionPtr)] + public ClaimInterface as KUSB_ClaimInterfaceDelegate + + + + [MarshalAs(UnmanagedType.FunctionPtr)] + public ReleaseInterface as KUSB_ReleaseInterfaceDelegate + + + + [MarshalAs(UnmanagedType.FunctionPtr)] + public SetAltInterface as KUSB_SetAltInterfaceDelegate + + + + [MarshalAs(UnmanagedType.FunctionPtr)] + public GetAltInterface as KUSB_GetAltInterfaceDelegate + + + + [MarshalAs(UnmanagedType.FunctionPtr)] + public GetDescriptor as KUSB_GetDescriptorDelegate + + + + [MarshalAs(UnmanagedType.FunctionPtr)] + public ControlTransfer as KUSB_ControlTransferDelegate + + + + [MarshalAs(UnmanagedType.FunctionPtr)] + public SetPowerPolicy as KUSB_SetPowerPolicyDelegate + + + + [MarshalAs(UnmanagedType.FunctionPtr)] + public GetPowerPolicy as KUSB_GetPowerPolicyDelegate + + + + [MarshalAs(UnmanagedType.FunctionPtr)] + public SetConfiguration as KUSB_SetConfigurationDelegate + + + + [MarshalAs(UnmanagedType.FunctionPtr)] + public GetConfiguration as KUSB_GetConfigurationDelegate + + + + [MarshalAs(UnmanagedType.FunctionPtr)] + public ResetDevice as KUSB_ResetDeviceDelegate + + + + [MarshalAs(UnmanagedType.FunctionPtr)] + public Initialize as KUSB_InitializeDelegate + + + + [MarshalAs(UnmanagedType.FunctionPtr)] + public SelectInterface as KUSB_SelectInterfaceDelegate + + + + [MarshalAs(UnmanagedType.FunctionPtr)] + public GetAssociatedInterface as KUSB_GetAssociatedInterfaceDelegate + + + + [MarshalAs(UnmanagedType.FunctionPtr)] + public Clone as KUSB_CloneDelegate + + + + [MarshalAs(UnmanagedType.FunctionPtr)] + public QueryInterfaceSettings as KUSB_QueryInterfaceSettingsDelegate + + + + [MarshalAs(UnmanagedType.FunctionPtr)] + public QueryDeviceInformation as KUSB_QueryDeviceInformationDelegate + + + + [MarshalAs(UnmanagedType.FunctionPtr)] + public SetCurrentAlternateSetting as KUSB_SetCurrentAlternateSettingDelegate + + + + [MarshalAs(UnmanagedType.FunctionPtr)] + public GetCurrentAlternateSetting as KUSB_GetCurrentAlternateSettingDelegate + + + + [MarshalAs(UnmanagedType.FunctionPtr)] + public QueryPipe as KUSB_QueryPipeDelegate + + + + [MarshalAs(UnmanagedType.FunctionPtr)] + public SetPipePolicy as KUSB_SetPipePolicyDelegate + + + + [MarshalAs(UnmanagedType.FunctionPtr)] + public GetPipePolicy as KUSB_GetPipePolicyDelegate + + + + [MarshalAs(UnmanagedType.FunctionPtr)] + public ReadPipe as KUSB_ReadPipeDelegate + + + + [MarshalAs(UnmanagedType.FunctionPtr)] + public WritePipe as KUSB_WritePipeDelegate + + + + [MarshalAs(UnmanagedType.FunctionPtr)] + public ResetPipe as KUSB_ResetPipeDelegate + + + + [MarshalAs(UnmanagedType.FunctionPtr)] + public AbortPipe as KUSB_AbortPipeDelegate + + + + [MarshalAs(UnmanagedType.FunctionPtr)] + public FlushPipe as KUSB_FlushPipeDelegate + + + + [MarshalAs(UnmanagedType.FunctionPtr)] + public IsoReadPipe as KUSB_IsoReadPipeDelegate + + + + [MarshalAs(UnmanagedType.FunctionPtr)] + public IsoWritePipe as KUSB_IsoWritePipeDelegate + + + + [MarshalAs(UnmanagedType.FunctionPtr)] + public GetCurrentFrameNumber as KUSB_GetCurrentFrameNumberDelegate + + + + [MarshalAs(UnmanagedType.FunctionPtr)] + public GetOverlappedResult as KUSB_GetOverlappedResultDelegate + + + + [MarshalAs(UnmanagedType.FunctionPtr)] + public GetProperty as KUSB_GetPropertyDelegate + + +[StructLayout(LayoutKind.Sequential, CharSet: CharSet.Ansi, Size: 2048)] +public struct KHOT_PARAMS: + + public UserHwnd as IntPtr + + + public UserMessage as int + + + public Flags as KHOT_FLAG + + + public PatternMatch as KLST_PATTERN_MATCH + + + [MarshalAs(UnmanagedType.FunctionPtr)] + public OnHotPlug as KHOT_PLUG_CB + + + + public override def ToString() as string: + return string.Format('UserHwnd: {0}\nUserMessage: {1}\nFlags: {2}\n', (UserHwnd.ToString('X16') + 'h'), (UserMessage.ToString('X8') + 'h'), Flags.ToString()) + + +[StructLayout(LayoutKind.Sequential)] +public struct KSTM_XFER_CONTEXT: + + private final mHandlePtr as IntPtr + + + public def constructor(Handle as IntPtr): + mHandlePtr = Handle + + + public Pointer as IntPtr: + get: + return mHandlePtr + + + [StructLayout(LayoutKind.Sequential, CharSet: CharSet.Ansi)] + private struct KSTM_XFER_CONTEXT_MAP: + + private final Buffer as IntPtr + + + private final BufferSize as int + + + private final TransferLength as int + + + private final UserState as IntPtr + + + private static final ofsBuffer as int = Marshal.OffsetOf(typeof(KSTM_XFER_CONTEXT_MAP), 'Buffer').ToInt32() + + private static final ofsBufferSize as int = Marshal.OffsetOf(typeof(KSTM_XFER_CONTEXT_MAP), 'BufferSize').ToInt32() + + private static final ofsTransferLength as int = Marshal.OffsetOf(typeof(KSTM_XFER_CONTEXT_MAP), 'TransferLength').ToInt32() + + private static final ofsUserState as int = Marshal.OffsetOf(typeof(KSTM_XFER_CONTEXT_MAP), 'UserState').ToInt32() + + + + public Buffer as IntPtr: + get: + return Marshal.ReadIntPtr(mHandlePtr, ofsBuffer) + + + + public BufferSize as int: + get: + return Marshal.ReadInt32(mHandlePtr, ofsBufferSize) + + + + public TransferLength as int: + get: + return Marshal.ReadInt32(mHandlePtr, ofsTransferLength) + + + + public UserState as IntPtr: + get: + return Marshal.ReadIntPtr(mHandlePtr, ofsUserState) + set: + Marshal.WriteIntPtr(mHandlePtr, ofsUserState, value) + + + + public override def ToString() as string: + return string.Format('Buffer: {0}\nBufferSize: {1}\nTransferLength: {2}\nUserState: {3}\n', (Buffer.ToString('X16') + 'h'), BufferSize, TransferLength, (UserState.ToString('X16') + 'h')) + + +[StructLayout(LayoutKind.Sequential)] +public struct KSTM_INFO: + + private final mHandlePtr as IntPtr + + + public def constructor(Handle as IntPtr): + mHandlePtr = Handle + + + public Pointer as IntPtr: + get: + return mHandlePtr + + + [StructLayout(LayoutKind.Sequential, CharSet: CharSet.Ansi)] + private struct KSTM_INFO_MAP: + + private final UsbHandle as IntPtr + + + private final PipeID as byte + + + private final MaxPendingTransfers as int + + + private final MaxTransferSize as int + + + private final MaxPendingIO as int + + + private final EndpointDescriptor as USB_ENDPOINT_DESCRIPTOR + + + private final DriverAPI as KUSB_DRIVER_API + + + private final DeviceHandle as IntPtr + + + private final StreamHandle as IntPtr + + + private final UserState as IntPtr + + + private static final ofsUsbHandle as int = Marshal.OffsetOf(typeof(KSTM_INFO_MAP), 'UsbHandle').ToInt32() + + private static final ofsPipeID as int = Marshal.OffsetOf(typeof(KSTM_INFO_MAP), 'PipeID').ToInt32() + + private static final ofsMaxPendingTransfers as int = Marshal.OffsetOf(typeof(KSTM_INFO_MAP), 'MaxPendingTransfers').ToInt32() + + private static final ofsMaxTransferSize as int = Marshal.OffsetOf(typeof(KSTM_INFO_MAP), 'MaxTransferSize').ToInt32() + + private static final ofsMaxPendingIO as int = Marshal.OffsetOf(typeof(KSTM_INFO_MAP), 'MaxPendingIO').ToInt32() + + private static final ofsEndpointDescriptor as int = Marshal.OffsetOf(typeof(KSTM_INFO_MAP), 'EndpointDescriptor').ToInt32() + + private static final ofsDriverAPI as int = Marshal.OffsetOf(typeof(KSTM_INFO_MAP), 'DriverAPI').ToInt32() + + private static final ofsDeviceHandle as int = Marshal.OffsetOf(typeof(KSTM_INFO_MAP), 'DeviceHandle').ToInt32() + + private static final ofsStreamHandle as int = Marshal.OffsetOf(typeof(KSTM_INFO_MAP), 'StreamHandle').ToInt32() + + private static final ofsUserState as int = Marshal.OffsetOf(typeof(KSTM_INFO_MAP), 'UserState').ToInt32() + + + + public UsbHandle as IntPtr: + get: + return Marshal.ReadIntPtr(mHandlePtr, ofsUsbHandle) + + + + public PipeID as byte: + get: + return Marshal.ReadByte(mHandlePtr, ofsPipeID) + + + + public MaxPendingTransfers as int: + get: + return Marshal.ReadInt32(mHandlePtr, ofsMaxPendingTransfers) + + + + public MaxTransferSize as int: + get: + return Marshal.ReadInt32(mHandlePtr, ofsMaxTransferSize) + + + + public MaxPendingIO as int: + get: + return Marshal.ReadInt32(mHandlePtr, ofsMaxPendingIO) + + + + public EndpointDescriptor as USB_ENDPOINT_DESCRIPTOR: + get: + return (Marshal.PtrToStructure(IntPtr((mHandlePtr.ToInt64() + ofsEndpointDescriptor)), typeof(USB_ENDPOINT_DESCRIPTOR)) cast USB_ENDPOINT_DESCRIPTOR) + + + + public DriverAPI as KUSB_DRIVER_API: + get: + return (Marshal.PtrToStructure(IntPtr((mHandlePtr.ToInt64() + ofsDriverAPI)), typeof(KUSB_DRIVER_API)) cast KUSB_DRIVER_API) + + + + public DeviceHandle as IntPtr: + get: + return Marshal.ReadIntPtr(mHandlePtr, ofsDeviceHandle) + + + + public StreamHandle as IntPtr: + get: + return Marshal.ReadIntPtr(mHandlePtr, ofsStreamHandle) + + + + public UserState as IntPtr: + get: + return Marshal.ReadIntPtr(mHandlePtr, ofsUserState) + set: + Marshal.WriteIntPtr(mHandlePtr, ofsUserState, value) + + + + public override def ToString() as string: + return string.Format('UsbHandle: {0}\nPipeID: {1}\nMaxPendingTransfers: {2}\nMaxTransferSize: {3}\nMaxPendingIO: {4}\nDeviceHandle: {5}\nStreamHandle: {6}\nUserState: {7}\n', (UsbHandle.ToString('X16') + 'h'), (PipeID.ToString('X2') + 'h'), MaxPendingTransfers, MaxTransferSize, MaxPendingIO, (DeviceHandle.ToString('X16') + 'h'), (StreamHandle.ToString('X16') + 'h'), (UserState.ToString('X16') + 'h')) + + +[StructLayout(LayoutKind.Sequential, CharSet: CharSet.Ansi, Size: 64)] +public struct KSTM_CALLBACK: + + [MarshalAs(UnmanagedType.FunctionPtr)] + public Error as KSTM_ERROR_CB + + + [MarshalAs(UnmanagedType.FunctionPtr)] + public Submit as KSTM_SUBMIT_CB + + + [MarshalAs(UnmanagedType.FunctionPtr)] + public Complete as KSTM_COMPLETE_CB + + + [MarshalAs(UnmanagedType.FunctionPtr)] + public Started as KSTM_STARTED_CB + + + [MarshalAs(UnmanagedType.FunctionPtr)] + public Stopped as KSTM_STOPPED_CB + + + [MarshalAs(UnmanagedType.FunctionPtr)] + public BeforeComplete as KSTM_BEFORE_COMPLETE_CB + + +#endregion + +#region Delegates + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KLIB_HANDLE_CLEANUP_CB([In] Handle as IntPtr, HandleType as KLIB_HANDLE_TYPE, UserContext as IntPtr) as int + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KISO_ENUM_PACKETS_CB(PacketIndex as int, [In] ref IsoPacket as KISO_PACKET, UserState as IntPtr) as bool + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KLST_ENUM_DEVINFO_CB([In] DeviceList as KLST_HANDLE, [In] DeviceInfo as KLST_DEVINFO_HANDLE, Context as IntPtr) as bool + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KUSB_InitDelegate([Out] ref InterfaceHandle as KUSB_HANDLE, [In] DevInfo as KLST_DEVINFO_HANDLE) as bool + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KUSB_FreeDelegate([In] InterfaceHandle as KUSB_HANDLE) as bool + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KUSB_ClaimInterfaceDelegate([In] InterfaceHandle as KUSB_HANDLE, NumberOrIndex as byte, IsIndex as bool) as bool + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KUSB_ReleaseInterfaceDelegate([In] InterfaceHandle as KUSB_HANDLE, NumberOrIndex as byte, IsIndex as bool) as bool + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KUSB_SetAltInterfaceDelegate([In] InterfaceHandle as KUSB_HANDLE, NumberOrIndex as byte, IsIndex as bool, AltSettingNumber as byte) as bool + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KUSB_GetAltInterfaceDelegate([In] InterfaceHandle as KUSB_HANDLE, NumberOrIndex as byte, IsIndex as bool, ref AltSettingNumber as byte) as bool + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KUSB_GetDescriptorDelegate([In] InterfaceHandle as KUSB_HANDLE, DescriptorType as byte, Index as byte, LanguageID as ushort, Buffer as IntPtr, BufferLength as int, ref LengthTransferred as int) as bool + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KUSB_ControlTransferDelegate([In] InterfaceHandle as KUSB_HANDLE, SetupPacket as WINUSB_SETUP_PACKET, Buffer as IntPtr, BufferLength as int, ref LengthTransferred as int, Overlapped as IntPtr) as bool + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KUSB_SetPowerPolicyDelegate([In] InterfaceHandle as KUSB_HANDLE, PolicyType as int, ValueLength as int, Value as IntPtr) as bool + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KUSB_GetPowerPolicyDelegate([In] InterfaceHandle as KUSB_HANDLE, PolicyType as int, ref ValueLength as int, Value as IntPtr) as bool + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KUSB_SetConfigurationDelegate([In] InterfaceHandle as KUSB_HANDLE, ConfigurationNumber as byte) as bool + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KUSB_GetConfigurationDelegate([In] InterfaceHandle as KUSB_HANDLE, ref ConfigurationNumber as byte) as bool + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KUSB_ResetDeviceDelegate([In] InterfaceHandle as KUSB_HANDLE) as bool + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KUSB_InitializeDelegate(DeviceHandle as IntPtr, [Out] ref InterfaceHandle as KUSB_HANDLE) as bool + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KUSB_SelectInterfaceDelegate([In] InterfaceHandle as KUSB_HANDLE, NumberOrIndex as byte, IsIndex as bool) as bool + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KUSB_GetAssociatedInterfaceDelegate([In] InterfaceHandle as KUSB_HANDLE, AssociatedInterfaceIndex as byte, [Out] ref AssociatedInterfaceHandle as KUSB_HANDLE) as bool + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KUSB_CloneDelegate([In] InterfaceHandle as KUSB_HANDLE, [Out] ref DstInterfaceHandle as KUSB_HANDLE) as bool + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KUSB_QueryInterfaceSettingsDelegate([In] InterfaceHandle as KUSB_HANDLE, AltSettingIndex as byte, [Out] ref UsbAltInterfaceDescriptor as USB_INTERFACE_DESCRIPTOR) as bool + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KUSB_QueryDeviceInformationDelegate([In] InterfaceHandle as KUSB_HANDLE, InformationType as int, ref BufferLength as int, Buffer as IntPtr) as bool + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KUSB_SetCurrentAlternateSettingDelegate([In] InterfaceHandle as KUSB_HANDLE, AltSettingNumber as byte) as bool + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KUSB_GetCurrentAlternateSettingDelegate([In] InterfaceHandle as KUSB_HANDLE, ref AltSettingNumber as byte) as bool + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KUSB_QueryPipeDelegate([In] InterfaceHandle as KUSB_HANDLE, AltSettingNumber as byte, PipeIndex as byte, [Out] ref PipeInformation as WINUSB_PIPE_INFORMATION) as bool + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KUSB_SetPipePolicyDelegate([In] InterfaceHandle as KUSB_HANDLE, PipeID as byte, PolicyType as int, ValueLength as int, Value as IntPtr) as bool + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KUSB_GetPipePolicyDelegate([In] InterfaceHandle as KUSB_HANDLE, PipeID as byte, PolicyType as int, ref ValueLength as int, Value as IntPtr) as bool + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KUSB_ReadPipeDelegate([In] InterfaceHandle as KUSB_HANDLE, PipeID as byte, Buffer as IntPtr, BufferLength as int, ref LengthTransferred as int, Overlapped as IntPtr) as bool + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KUSB_WritePipeDelegate([In] InterfaceHandle as KUSB_HANDLE, PipeID as byte, Buffer as IntPtr, BufferLength as int, ref LengthTransferred as int, Overlapped as IntPtr) as bool + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KUSB_ResetPipeDelegate([In] InterfaceHandle as KUSB_HANDLE, PipeID as byte) as bool + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KUSB_AbortPipeDelegate([In] InterfaceHandle as KUSB_HANDLE, PipeID as byte) as bool + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KUSB_FlushPipeDelegate([In] InterfaceHandle as KUSB_HANDLE, PipeID as byte) as bool + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KUSB_IsoReadPipeDelegate([In] InterfaceHandle as KUSB_HANDLE, PipeID as byte, Buffer as IntPtr, BufferLength as int, Overlapped as IntPtr, [In] IsoContext as KISO_CONTEXT) as bool + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KUSB_IsoWritePipeDelegate([In] InterfaceHandle as KUSB_HANDLE, PipeID as byte, Buffer as IntPtr, BufferLength as int, Overlapped as IntPtr, [In] IsoContext as KISO_CONTEXT) as bool + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KUSB_GetCurrentFrameNumberDelegate([In] InterfaceHandle as KUSB_HANDLE, ref FrameNumber as int) as bool + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KUSB_GetOverlappedResultDelegate([In] InterfaceHandle as KUSB_HANDLE, Overlapped as IntPtr, ref lpNumberOfBytesTransferred as int, bWait as bool) as bool + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KUSB_GetPropertyDelegate([In] InterfaceHandle as KUSB_HANDLE, PropertyType as KUSB_PROPERTY, ref PropertySize as int, Value as IntPtr) as bool + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KHOT_PLUG_CB([In] HotHandle as KHOT_HANDLE, [In] DeviceInfo as KLST_DEVINFO_HANDLE, PlugType as KLST_SYNC_FLAG) as void + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KSTM_ERROR_CB([In] StreamInfo as KSTM_INFO, [In] XferContext as KSTM_XFER_CONTEXT, XferContextIndex as int, ErrorCode as int) as int + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KSTM_SUBMIT_CB([In] StreamInfo as KSTM_INFO, [In] XferContext as KSTM_XFER_CONTEXT, XferContextIndex as int, Overlapped as IntPtr) as int + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KSTM_STARTED_CB([In] StreamInfo as KSTM_INFO, [In] XferContext as KSTM_XFER_CONTEXT, XferContextIndex as int) as int + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KSTM_STOPPED_CB([In] StreamInfo as KSTM_INFO, [In] XferContext as KSTM_XFER_CONTEXT, XferContextIndex as int) as int + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KSTM_COMPLETE_CB([In] StreamInfo as KSTM_INFO, [In] XferContext as KSTM_XFER_CONTEXT, XferContextIndex as int, ErrorCode as int) as int + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KSTM_BEFORE_COMPLETE_CB([In] StreamInfo as KSTM_INFO, [In] XferContext as KSTM_XFER_CONTEXT, XferContextIndex as int, ref ErrorCode as int) as KSTM_COMPLETE_RESULT + +#endregion + +public class LstK(IDisposable): + + protected mHandleStruct as KLST_HANDLE + + protected mbDisposed as bool + + + protected def constructor(): + pass + + + #region IDisposable Members + + public virtual def Dispose(): + Dispose(true) + GC.SuppressFinalize(self) + + + #endregion + + def destructor(): + Dispose(false) + + + protected virtual def Dispose(disposing as bool): + if not mbDisposed: + if mHandleStruct.Pointer != IntPtr.Zero: + AllKFunctions.LstK_Free(mHandleStruct) + Debug.Print('{0} Dispose: Freed Handle:{1:X16}h Explicit:{2}', GetType().Name, mHandleStruct.Pointer.ToInt64(), disposing) + else: + Debug.Print('{0} Dispose: [WARNING] Handle is null', GetType().Name) + + mHandleStruct = KLST_HANDLE(IntPtr.Zero) + mbDisposed = true + + + protected def Init(Flags as KLST_FLAG) as bool: + success as bool = AllKFunctions.LstK_Init(mHandleStruct, Flags) + + if not success: + raise Exception(string.Format('{0} failed initializing. ErrorCode={1:X8}h', GetType().Name, Marshal.GetLastWin32Error())) + + Debug.Print('{0} Init: handle 0x{1:X16}', GetType().Name, mHandleStruct.Pointer.ToInt64()) + return true + + + protected def InitEx(Flags as KLST_FLAG, ref PatternMatch as KLST_PATTERN_MATCH) as bool: + success as bool = AllKFunctions.LstK_InitEx(mHandleStruct, Flags, PatternMatch) + + if not success: + raise Exception(string.Format('{0} failed initializing. ErrorCode={1:X8}h', GetType().Name, Marshal.GetLastWin32Error())) + + Debug.Print('{0} Init: handle 0x{1:X16}', GetType().Name, mHandleStruct.Pointer.ToInt64()) + return true + + + #region Public Members + + public def constructor(Flags as KLST_FLAG): + success as bool = AllKFunctions.LstK_Init(mHandleStruct, Flags) + + if not success: + raise Exception(string.Format('{0} failed initializing. ErrorCode={1:X8}h', GetType().Name, Marshal.GetLastWin32Error())) + + Debug.Print('{0} Init: handle 0x{1:X16}', GetType().Name, mHandleStruct.Pointer.ToInt64()) + + + public def constructor(Flags as KLST_FLAG, ref PatternMatch as KLST_PATTERN_MATCH): + success as bool = AllKFunctions.LstK_InitEx(mHandleStruct, Flags, PatternMatch) + + if not success: + raise Exception(string.Format('{0} failed initializing. ErrorCode={1:X8}h', GetType().Name, Marshal.GetLastWin32Error())) + + Debug.Print('{0} Init: handle 0x{1:X16}', GetType().Name, mHandleStruct.Pointer.ToInt64()) + + + public virtual def Count(ref Count as int) as bool: + return AllKFunctions.LstK_Count(mHandleStruct, Count) + + + public virtual def Current(ref DeviceInfo as KLST_DEVINFO_HANDLE) as bool: + return AllKFunctions.LstK_Current(mHandleStruct, DeviceInfo) + + + public virtual def Enumerate(EnumDevListCB as KLST_ENUM_DEVINFO_CB, Context as IntPtr) as bool: + return AllKFunctions.LstK_Enumerate(mHandleStruct, EnumDevListCB, Context) + + + public virtual def FindByVidPid(Vid as int, Pid as int, ref DeviceInfo as KLST_DEVINFO_HANDLE) as bool: + return AllKFunctions.LstK_FindByVidPid(mHandleStruct, Vid, Pid, DeviceInfo) + + + public virtual def Free(): + Dispose() + + + public Handle as KLST_HANDLE: + get: + return mHandleStruct + + + public virtual def MoveNext(ref DeviceInfo as KLST_DEVINFO_HANDLE) as bool: + return AllKFunctions.LstK_MoveNext(mHandleStruct, DeviceInfo) + + + public virtual def MoveReset(): + AllKFunctions.LstK_MoveReset(mHandleStruct) + + #endregion + + +public class HotK(IDisposable): + + protected mHandleStruct as KHOT_HANDLE + + protected mbDisposed as bool + + + protected def constructor(): + pass + + + #region IDisposable Members + + public virtual def Dispose(): + Dispose(true) + GC.SuppressFinalize(self) + + + #endregion + + def destructor(): + Dispose(false) + + + protected virtual def Dispose(disposing as bool): + if not mbDisposed: + if mHandleStruct.Pointer != IntPtr.Zero: + AllKFunctions.HotK_Free(mHandleStruct) + Debug.Print('{0} Dispose: Freed Handle:{1:X16}h Explicit:{2}', GetType().Name, mHandleStruct.Pointer.ToInt64(), disposing) + else: + Debug.Print('{0} Dispose: [WARNING] Handle is null', GetType().Name) + + mHandleStruct = KHOT_HANDLE(IntPtr.Zero) + mbDisposed = true + + + protected def Init(ref InitParams as KHOT_PARAMS) as bool: + success as bool = AllKFunctions.HotK_Init(mHandleStruct, InitParams) + + if not success: + raise Exception(string.Format('{0} failed initializing. ErrorCode={1:X8}h', GetType().Name, Marshal.GetLastWin32Error())) + + Debug.Print('{0} Init: handle 0x{1:X16}', GetType().Name, mHandleStruct.Pointer.ToInt64()) + return true + + + #region Public Members + + public def constructor(ref InitParams as KHOT_PARAMS): + success as bool = AllKFunctions.HotK_Init(mHandleStruct, InitParams) + + if not success: + raise Exception(string.Format('{0} failed initializing. ErrorCode={1:X8}h', GetType().Name, Marshal.GetLastWin32Error())) + + Debug.Print('{0} Init: handle 0x{1:X16}', GetType().Name, mHandleStruct.Pointer.ToInt64()) + + + public virtual def Free(): + Dispose() + + + public virtual def FreeAll(): + AllKFunctions.HotK_FreeAll() + + + public Handle as KHOT_HANDLE: + get: + return mHandleStruct + + #endregion + + +public class UsbK(IDisposable): + + protected driverAPI as KUSB_DRIVER_API + + protected mHandleStruct as KUSB_HANDLE + + protected mbDisposed as bool + + + protected def constructor(): + pass + + + #region IDisposable Members + + public virtual def Dispose(): + Dispose(true) + GC.SuppressFinalize(self) + + + #endregion + + def destructor(): + Dispose(false) + + + protected virtual def Dispose(disposing as bool): + if not mbDisposed: + if mHandleStruct.Pointer != IntPtr.Zero: + AllKFunctions.UsbK_Free(mHandleStruct) + Debug.Print('{0} Dispose: Freed Handle:{1:X16}h Explicit:{2}', GetType().Name, mHandleStruct.Pointer.ToInt64(), disposing) + else: + Debug.Print('{0} Dispose: [WARNING] Handle is null', GetType().Name) + + mHandleStruct = KUSB_HANDLE(IntPtr.Zero) + mbDisposed = true + + + protected def Init(DevInfo as KLST_DEVINFO_HANDLE) as bool: + success as bool = AllKFunctions.LibK_LoadDriverAPI(driverAPI, DevInfo.DriverID) + + if not success: + raise Exception(string.Format('{0} failed loading Driver API. ErrorCode={1:X8}h', GetType().Name, Marshal.GetLastWin32Error())) + + success = driverAPI.Init(mHandleStruct, DevInfo) + + if not success: + raise Exception(string.Format('{0} failed initializing usb device. ErrorCode={1:X8}h', GetType().Name, Marshal.GetLastWin32Error())) + + Debug.Print('{0} Init: handle 0x{1:X16}', GetType().Name, mHandleStruct.Pointer.ToInt64()) + return true + + + protected def Initialize(DeviceHandle as IntPtr, driverID as KUSB_DRVID) as bool: + success as bool = AllKFunctions.LibK_LoadDriverAPI(driverAPI, (driverID cast int)) + + if not success: + raise Exception(string.Format('{0} failed loading Driver API. ErrorCode={1:X8}h', GetType().Name, Marshal.GetLastWin32Error())) + + success = driverAPI.Initialize(DeviceHandle, mHandleStruct) + + if not success: + raise Exception(string.Format('{0} failed initializing usb device. ErrorCode={1:X8}h', GetType().Name, Marshal.GetLastWin32Error())) + + Debug.Print('{0} Init: handle 0x{1:X16}', GetType().Name, mHandleStruct.Pointer.ToInt64()) + return true + + + #region Public Members + + public def constructor(DevInfo as KLST_DEVINFO_HANDLE): + success as bool = AllKFunctions.LibK_LoadDriverAPI(driverAPI, DevInfo.DriverID) + + if not success: + raise Exception(string.Format('{0} failed loading Driver API. ErrorCode={1:X8}h', GetType().Name, Marshal.GetLastWin32Error())) + + success = driverAPI.Init(mHandleStruct, DevInfo) + + if not success: + raise Exception(string.Format('{0} failed initializing usb device. ErrorCode={1:X8}h', GetType().Name, Marshal.GetLastWin32Error())) + + Debug.Print('{0} Init: handle 0x{1:X16}', GetType().Name, mHandleStruct.Pointer.ToInt64()) + + + public def constructor(DeviceHandle as IntPtr, driverID as KUSB_DRVID): + success as bool = AllKFunctions.LibK_LoadDriverAPI(driverAPI, (driverID cast int)) + + if not success: + raise Exception(string.Format('{0} failed loading Driver API. ErrorCode={1:X8}h', GetType().Name, Marshal.GetLastWin32Error())) + + success = driverAPI.Initialize(DeviceHandle, mHandleStruct) + + if not success: + raise Exception(string.Format('{0} failed initializing usb device. ErrorCode={1:X8}h', GetType().Name, Marshal.GetLastWin32Error())) + + Debug.Print('{0} Init: handle 0x{1:X16}', GetType().Name, mHandleStruct.Pointer.ToInt64()) + + + public virtual def AbortPipe(PipeID as byte) as bool: + return driverAPI.AbortPipe(mHandleStruct, PipeID) + + + public virtual def ClaimInterface(NumberOrIndex as byte, IsIndex as bool) as bool: + return driverAPI.ClaimInterface(mHandleStruct, NumberOrIndex, IsIndex) + + + public virtual def Clone(ref DstInterfaceHandle as KUSB_HANDLE) as bool: + return driverAPI.Clone(mHandleStruct, DstInterfaceHandle) + + + public virtual def ControlTransfer(SetupPacket as WINUSB_SETUP_PACKET, Buffer as IntPtr, BufferLength as int, ref LengthTransferred as int, Overlapped as IntPtr) as bool: + return driverAPI.ControlTransfer(mHandleStruct, SetupPacket, Buffer, BufferLength, LengthTransferred, Overlapped) + + + public virtual def ControlTransfer(SetupPacket as WINUSB_SETUP_PACKET, Buffer as Array, BufferLength as int, ref LengthTransferred as int, Overlapped as IntPtr) as bool: + return driverAPI.ControlTransfer(mHandleStruct, SetupPacket, Marshal.UnsafeAddrOfPinnedArrayElement(Buffer, 0), BufferLength, LengthTransferred, Overlapped) + + + public virtual def ControlTransfer(SetupPacket as WINUSB_SETUP_PACKET, Buffer as Array, BufferLength as int, ref LengthTransferred as int, Overlapped as KOVL_HANDLE) as bool: + return driverAPI.ControlTransfer(mHandleStruct, SetupPacket, Marshal.UnsafeAddrOfPinnedArrayElement(Buffer, 0), BufferLength, LengthTransferred, Overlapped.Pointer) + + + public virtual def ControlTransfer(SetupPacket as WINUSB_SETUP_PACKET, Buffer as IntPtr, BufferLength as int, ref LengthTransferred as int, Overlapped as KOVL_HANDLE) as bool: + return driverAPI.ControlTransfer(mHandleStruct, SetupPacket, Buffer, BufferLength, LengthTransferred, Overlapped.Pointer) + + + public virtual def FlushPipe(PipeID as byte) as bool: + return driverAPI.FlushPipe(mHandleStruct, PipeID) + + + public virtual def Free(): + Dispose() + + + public virtual def GetAltInterface(NumberOrIndex as byte, IsIndex as bool, ref AltSettingNumber as byte) as bool: + return driverAPI.GetAltInterface(mHandleStruct, NumberOrIndex, IsIndex, AltSettingNumber) + + + public virtual def GetAssociatedInterface(AssociatedInterfaceIndex as byte, ref AssociatedInterfaceHandle as KUSB_HANDLE) as bool: + return driverAPI.GetAssociatedInterface(mHandleStruct, AssociatedInterfaceIndex, AssociatedInterfaceHandle) + + + public virtual def GetConfiguration(ref ConfigurationNumber as byte) as bool: + return driverAPI.GetConfiguration(mHandleStruct, ConfigurationNumber) + + + public virtual def GetCurrentAlternateSetting(ref AltSettingNumber as byte) as bool: + return driverAPI.GetCurrentAlternateSetting(mHandleStruct, AltSettingNumber) + + + public virtual def GetCurrentFrameNumber(ref FrameNumber as int) as bool: + return driverAPI.GetCurrentFrameNumber(mHandleStruct, FrameNumber) + + + public virtual def GetDescriptor(DescriptorType as byte, Index as byte, LanguageID as int, Buffer as IntPtr, BufferLength as int, ref LengthTransferred as int) as bool: + return driverAPI.GetDescriptor(mHandleStruct, DescriptorType, Index, (LanguageID cast ushort), Buffer, BufferLength, LengthTransferred) + + + public virtual def GetDescriptor(DescriptorType as byte, Index as byte, LanguageID as int, Buffer as Array, BufferLength as int, ref LengthTransferred as int) as bool: + return driverAPI.GetDescriptor(mHandleStruct, DescriptorType, Index, (LanguageID cast ushort), Marshal.UnsafeAddrOfPinnedArrayElement(Buffer, 0), BufferLength, LengthTransferred) + + + public virtual def GetOverlappedResult(Overlapped as IntPtr, ref lpNumberOfBytesTransferred as int, bWait as bool) as bool: + return driverAPI.GetOverlappedResult(mHandleStruct, Overlapped, lpNumberOfBytesTransferred, bWait) + + + public virtual def GetOverlappedResult(Overlapped as KOVL_HANDLE, ref lpNumberOfBytesTransferred as int, bWait as bool) as bool: + return driverAPI.GetOverlappedResult(mHandleStruct, Overlapped.Pointer, lpNumberOfBytesTransferred, bWait) + + + public virtual def GetPipePolicy(PipeID as byte, PolicyType as int, ref ValueLength as int, Value as IntPtr) as bool: + return driverAPI.GetPipePolicy(mHandleStruct, PipeID, PolicyType, ValueLength, Value) + + + public virtual def GetPipePolicy(PipeID as byte, PolicyType as int, ref ValueLength as int, Value as Array) as bool: + return driverAPI.GetPipePolicy(mHandleStruct, PipeID, PolicyType, ValueLength, Marshal.UnsafeAddrOfPinnedArrayElement(Value, 0)) + + + public virtual def GetPowerPolicy(PolicyType as int, ref ValueLength as int, Value as IntPtr) as bool: + return driverAPI.GetPowerPolicy(mHandleStruct, PolicyType, ValueLength, Value) + + + public virtual def GetPowerPolicy(PolicyType as int, ref ValueLength as int, Value as Array) as bool: + return driverAPI.GetPowerPolicy(mHandleStruct, PolicyType, ValueLength, Marshal.UnsafeAddrOfPinnedArrayElement(Value, 0)) + + + public virtual def GetProperty(PropertyType as KUSB_PROPERTY, ref PropertySize as int, Value as IntPtr) as bool: + return driverAPI.GetProperty(mHandleStruct, PropertyType, PropertySize, Value) + + + public virtual def GetProperty(PropertyType as KUSB_PROPERTY, ref PropertySize as int, Value as Array) as bool: + return driverAPI.GetProperty(mHandleStruct, PropertyType, PropertySize, Marshal.UnsafeAddrOfPinnedArrayElement(Value, 0)) + + + public Handle as KUSB_HANDLE: + get: + return mHandleStruct + + + public virtual def IsoReadPipe(PipeID as byte, Buffer as IntPtr, BufferLength as int, Overlapped as IntPtr, IsoContext as KISO_CONTEXT) as bool: + return driverAPI.IsoReadPipe(mHandleStruct, PipeID, Buffer, BufferLength, Overlapped, IsoContext) + + + public virtual def IsoReadPipe(PipeID as byte, Buffer as Array, BufferLength as int, Overlapped as IntPtr, IsoContext as KISO_CONTEXT) as bool: + return driverAPI.IsoReadPipe(mHandleStruct, PipeID, Marshal.UnsafeAddrOfPinnedArrayElement(Buffer, 0), BufferLength, Overlapped, IsoContext) + + + public virtual def IsoReadPipe(PipeID as byte, Buffer as Array, BufferLength as int, Overlapped as KOVL_HANDLE, IsoContext as KISO_CONTEXT) as bool: + return driverAPI.IsoReadPipe(mHandleStruct, PipeID, Marshal.UnsafeAddrOfPinnedArrayElement(Buffer, 0), BufferLength, Overlapped.Pointer, IsoContext) + + + public virtual def IsoReadPipe(PipeID as byte, Buffer as IntPtr, BufferLength as int, Overlapped as KOVL_HANDLE, IsoContext as KISO_CONTEXT) as bool: + return driverAPI.IsoReadPipe(mHandleStruct, PipeID, Buffer, BufferLength, Overlapped.Pointer, IsoContext) + + + public virtual def IsoWritePipe(PipeID as byte, Buffer as IntPtr, BufferLength as int, Overlapped as IntPtr, IsoContext as KISO_CONTEXT) as bool: + return driverAPI.IsoWritePipe(mHandleStruct, PipeID, Buffer, BufferLength, Overlapped, IsoContext) + + + public virtual def IsoWritePipe(PipeID as byte, Buffer as Array, BufferLength as int, Overlapped as IntPtr, IsoContext as KISO_CONTEXT) as bool: + return driverAPI.IsoWritePipe(mHandleStruct, PipeID, Marshal.UnsafeAddrOfPinnedArrayElement(Buffer, 0), BufferLength, Overlapped, IsoContext) + + + public virtual def IsoWritePipe(PipeID as byte, Buffer as Array, BufferLength as int, Overlapped as KOVL_HANDLE, IsoContext as KISO_CONTEXT) as bool: + return driverAPI.IsoWritePipe(mHandleStruct, PipeID, Marshal.UnsafeAddrOfPinnedArrayElement(Buffer, 0), BufferLength, Overlapped.Pointer, IsoContext) + + + public virtual def IsoWritePipe(PipeID as byte, Buffer as IntPtr, BufferLength as int, Overlapped as KOVL_HANDLE, IsoContext as KISO_CONTEXT) as bool: + return driverAPI.IsoWritePipe(mHandleStruct, PipeID, Buffer, BufferLength, Overlapped.Pointer, IsoContext) + + + public virtual def QueryDeviceInformation(InformationType as int, ref BufferLength as int, Buffer as IntPtr) as bool: + return driverAPI.QueryDeviceInformation(mHandleStruct, InformationType, BufferLength, Buffer) + + + public virtual def QueryInterfaceSettings(AltSettingIndex as byte, ref UsbAltInterfaceDescriptor as USB_INTERFACE_DESCRIPTOR) as bool: + return driverAPI.QueryInterfaceSettings(mHandleStruct, AltSettingIndex, UsbAltInterfaceDescriptor) + + + public virtual def QueryPipe(AltSettingNumber as byte, PipeIndex as byte, ref PipeInformation as WINUSB_PIPE_INFORMATION) as bool: + return driverAPI.QueryPipe(mHandleStruct, AltSettingNumber, PipeIndex, PipeInformation) + + + public virtual def ReadPipe(PipeID as byte, Buffer as IntPtr, BufferLength as int, ref LengthTransferred as int, Overlapped as IntPtr) as bool: + return driverAPI.ReadPipe(mHandleStruct, PipeID, Buffer, BufferLength, LengthTransferred, Overlapped) + + + public virtual def ReadPipe(PipeID as byte, Buffer as Array, BufferLength as int, ref LengthTransferred as int, Overlapped as IntPtr) as bool: + return driverAPI.ReadPipe(mHandleStruct, PipeID, Marshal.UnsafeAddrOfPinnedArrayElement(Buffer, 0), BufferLength, LengthTransferred, Overlapped) + + + public virtual def ReadPipe(PipeID as byte, Buffer as Array, BufferLength as int, ref LengthTransferred as int, Overlapped as KOVL_HANDLE) as bool: + return driverAPI.ReadPipe(mHandleStruct, PipeID, Marshal.UnsafeAddrOfPinnedArrayElement(Buffer, 0), BufferLength, LengthTransferred, Overlapped.Pointer) + + + public virtual def ReadPipe(PipeID as byte, Buffer as IntPtr, BufferLength as int, ref LengthTransferred as int, Overlapped as KOVL_HANDLE) as bool: + return driverAPI.ReadPipe(mHandleStruct, PipeID, Buffer, BufferLength, LengthTransferred, Overlapped.Pointer) + + + public virtual def ReleaseInterface(NumberOrIndex as byte, IsIndex as bool) as bool: + return driverAPI.ReleaseInterface(mHandleStruct, NumberOrIndex, IsIndex) + + + public virtual def ResetDevice() as bool: + return driverAPI.ResetDevice(mHandleStruct) + + + public virtual def ResetPipe(PipeID as byte) as bool: + return driverAPI.ResetPipe(mHandleStruct, PipeID) + + + public virtual def SelectInterface(NumberOrIndex as byte, IsIndex as bool) as bool: + return driverAPI.SelectInterface(mHandleStruct, NumberOrIndex, IsIndex) + + + public virtual def SetAltInterface(NumberOrIndex as byte, IsIndex as bool, AltSettingNumber as byte) as bool: + return driverAPI.SetAltInterface(mHandleStruct, NumberOrIndex, IsIndex, AltSettingNumber) + + + public virtual def SetConfiguration(ConfigurationNumber as byte) as bool: + return driverAPI.SetConfiguration(mHandleStruct, ConfigurationNumber) + + + public virtual def SetCurrentAlternateSetting(AltSettingNumber as byte) as bool: + return driverAPI.SetCurrentAlternateSetting(mHandleStruct, AltSettingNumber) + + + public virtual def SetPipePolicy(PipeID as byte, PolicyType as int, ValueLength as int, Value as IntPtr) as bool: + return driverAPI.SetPipePolicy(mHandleStruct, PipeID, PolicyType, ValueLength, Value) + + + public virtual def SetPipePolicy(PipeID as byte, PolicyType as int, ValueLength as int, Value as Array) as bool: + return driverAPI.SetPipePolicy(mHandleStruct, PipeID, PolicyType, ValueLength, Marshal.UnsafeAddrOfPinnedArrayElement(Value, 0)) + + + public virtual def SetPowerPolicy(PolicyType as int, ValueLength as int, Value as IntPtr) as bool: + return driverAPI.SetPowerPolicy(mHandleStruct, PolicyType, ValueLength, Value) + + + public virtual def SetPowerPolicy(PolicyType as int, ValueLength as int, Value as Array) as bool: + return driverAPI.SetPowerPolicy(mHandleStruct, PolicyType, ValueLength, Marshal.UnsafeAddrOfPinnedArrayElement(Value, 0)) + + + public virtual def WritePipe(PipeID as byte, Buffer as IntPtr, BufferLength as int, ref LengthTransferred as int, Overlapped as IntPtr) as bool: + return driverAPI.WritePipe(mHandleStruct, PipeID, Buffer, BufferLength, LengthTransferred, Overlapped) + + + public virtual def WritePipe(PipeID as byte, Buffer as Array, BufferLength as int, ref LengthTransferred as int, Overlapped as IntPtr) as bool: + return driverAPI.WritePipe(mHandleStruct, PipeID, Marshal.UnsafeAddrOfPinnedArrayElement(Buffer, 0), BufferLength, LengthTransferred, Overlapped) + + + public virtual def WritePipe(PipeID as byte, Buffer as Array, BufferLength as int, ref LengthTransferred as int, Overlapped as KOVL_HANDLE) as bool: + return driverAPI.WritePipe(mHandleStruct, PipeID, Marshal.UnsafeAddrOfPinnedArrayElement(Buffer, 0), BufferLength, LengthTransferred, Overlapped.Pointer) + + + public virtual def WritePipe(PipeID as byte, Buffer as IntPtr, BufferLength as int, ref LengthTransferred as int, Overlapped as KOVL_HANDLE) as bool: + return driverAPI.WritePipe(mHandleStruct, PipeID, Buffer, BufferLength, LengthTransferred, Overlapped.Pointer) + + #endregion + + +public class OvlK(IDisposable): + + protected mHandleStruct as KOVL_POOL_HANDLE + + protected mbDisposed as bool + + + protected def constructor(): + pass + + + #region IDisposable Members + + public virtual def Dispose(): + Dispose(true) + GC.SuppressFinalize(self) + + + #endregion + + def destructor(): + Dispose(false) + + + protected virtual def Dispose(disposing as bool): + if not mbDisposed: + if mHandleStruct.Pointer != IntPtr.Zero: + AllKFunctions.OvlK_Free(mHandleStruct) + Debug.Print('{0} Dispose: Freed Handle:{1:X16}h Explicit:{2}', GetType().Name, mHandleStruct.Pointer.ToInt64(), disposing) + else: + Debug.Print('{0} Dispose: [WARNING] Handle is null', GetType().Name) + + mHandleStruct = KOVL_POOL_HANDLE(IntPtr.Zero) + mbDisposed = true + + + protected def Init(UsbHandle as KUSB_HANDLE, MaxOverlappedCount as int, Flags as KOVL_POOL_FLAG) as bool: + success as bool = AllKFunctions.OvlK_Init(mHandleStruct, UsbHandle, MaxOverlappedCount, Flags) + + if not success: + raise Exception(string.Format('{0} failed initializing. ErrorCode={1:X8}h', GetType().Name, Marshal.GetLastWin32Error())) + + Debug.Print('{0} Init: handle 0x{1:X16}', GetType().Name, mHandleStruct.Pointer.ToInt64()) + return true + + + #region Public Members + + public def constructor(UsbHandle as KUSB_HANDLE, MaxOverlappedCount as int, Flags as KOVL_POOL_FLAG): + success as bool = AllKFunctions.OvlK_Init(mHandleStruct, UsbHandle, MaxOverlappedCount, Flags) + + if not success: + raise Exception(string.Format('{0} failed initializing. ErrorCode={1:X8}h', GetType().Name, Marshal.GetLastWin32Error())) + + Debug.Print('{0} Init: handle 0x{1:X16}', GetType().Name, mHandleStruct.Pointer.ToInt64()) + + + public virtual def Acquire(ref OverlappedK as KOVL_HANDLE) as bool: + return AllKFunctions.OvlK_Acquire(OverlappedK, mHandleStruct) + + + public virtual def Free(): + Dispose() + + + public virtual def GetEventHandle(OverlappedK as KOVL_HANDLE) as IntPtr: + return AllKFunctions.OvlK_GetEventHandle(OverlappedK) + + + public Handle as KOVL_POOL_HANDLE: + get: + return mHandleStruct + + + public virtual def IsComplete(OverlappedK as KOVL_HANDLE) as bool: + return AllKFunctions.OvlK_IsComplete(OverlappedK) + + + public virtual def ReUse(OverlappedK as KOVL_HANDLE) as bool: + return AllKFunctions.OvlK_ReUse(OverlappedK) + + + public virtual def Release(OverlappedK as KOVL_HANDLE) as bool: + return AllKFunctions.OvlK_Release(OverlappedK) + + + public virtual def Wait(OverlappedK as KOVL_HANDLE, TimeoutMS as int, WaitFlags as KOVL_WAIT_FLAG, ref TransferredLength as int) as bool: + return AllKFunctions.OvlK_Wait(OverlappedK, TimeoutMS, WaitFlags, TransferredLength) + + + public virtual def WaitAndRelease(OverlappedK as KOVL_HANDLE, TimeoutMS as int, ref TransferredLength as int) as bool: + return AllKFunctions.OvlK_WaitAndRelease(OverlappedK, TimeoutMS, TransferredLength) + + + public virtual def WaitOldest(ref OverlappedK as KOVL_HANDLE, TimeoutMS as int, WaitFlags as KOVL_WAIT_FLAG, ref TransferredLength as int) as bool: + return AllKFunctions.OvlK_WaitOldest(mHandleStruct, OverlappedK, TimeoutMS, WaitFlags, TransferredLength) + + + public virtual def WaitOrCancel(OverlappedK as KOVL_HANDLE, TimeoutMS as int, ref TransferredLength as int) as bool: + return AllKFunctions.OvlK_WaitOrCancel(OverlappedK, TimeoutMS, TransferredLength) + + #endregion + + +public class StmK(IDisposable): + + protected mHandleStruct as KSTM_HANDLE + + protected mbDisposed as bool + + + protected def constructor(): + pass + + + #region IDisposable Members + + public virtual def Dispose(): + Dispose(true) + GC.SuppressFinalize(self) + + + #endregion + + def destructor(): + Dispose(false) + + + protected virtual def Dispose(disposing as bool): + if not mbDisposed: + if mHandleStruct.Pointer != IntPtr.Zero: + AllKFunctions.StmK_Free(mHandleStruct) + Debug.Print('{0} Dispose: Freed Handle:{1:X16}h Explicit:{2}', GetType().Name, mHandleStruct.Pointer.ToInt64(), disposing) + else: + Debug.Print('{0} Dispose: [WARNING] Handle is null', GetType().Name) + + mHandleStruct = KSTM_HANDLE(IntPtr.Zero) + mbDisposed = true + + + protected def Init(UsbHandle as KUSB_HANDLE, PipeID as byte, MaxTransferSize as int, MaxPendingTransfers as int, MaxPendingIO as int, ref Callbacks as KSTM_CALLBACK, Flags as KSTM_FLAG) as bool: + success as bool = AllKFunctions.StmK_Init(mHandleStruct, UsbHandle, PipeID, MaxTransferSize, MaxPendingTransfers, MaxPendingIO, Callbacks, Flags) + + if not success: + raise Exception(string.Format('{0} failed initializing. ErrorCode={1:X8}h', GetType().Name, Marshal.GetLastWin32Error())) + + Debug.Print('{0} Init: handle 0x{1:X16}', GetType().Name, mHandleStruct.Pointer.ToInt64()) + return true + + + #region Public Members + + public def constructor(UsbHandle as KUSB_HANDLE, PipeID as byte, MaxTransferSize as int, MaxPendingTransfers as int, MaxPendingIO as int, ref Callbacks as KSTM_CALLBACK, Flags as KSTM_FLAG): + success as bool = AllKFunctions.StmK_Init(mHandleStruct, UsbHandle, PipeID, MaxTransferSize, MaxPendingTransfers, MaxPendingIO, Callbacks, Flags) + + if not success: + raise Exception(string.Format('{0} failed initializing. ErrorCode={1:X8}h', GetType().Name, Marshal.GetLastWin32Error())) + + Debug.Print('{0} Init: handle 0x{1:X16}', GetType().Name, mHandleStruct.Pointer.ToInt64()) + + + public virtual def Free(): + Dispose() + + + public Handle as KSTM_HANDLE: + get: + return mHandleStruct + + + public virtual def Read(Buffer as IntPtr, Offset as int, Length as int, ref TransferredLength as int) as bool: + return AllKFunctions.StmK_Read(mHandleStruct, Buffer, Offset, Length, TransferredLength) + + + public virtual def Read(Buffer as Array, Offset as int, Length as int, ref TransferredLength as int) as bool: + return AllKFunctions.StmK_Read(mHandleStruct, Marshal.UnsafeAddrOfPinnedArrayElement(Buffer, 0), Offset, Length, TransferredLength) + + + public virtual def Start() as bool: + return AllKFunctions.StmK_Start(mHandleStruct) + + + public virtual def Stop(TimeoutCancelMS as int) as bool: + return AllKFunctions.StmK_Stop(mHandleStruct, TimeoutCancelMS) + + + public virtual def Write(Buffer as IntPtr, Offset as int, Length as int, ref TransferredLength as int) as bool: + return AllKFunctions.StmK_Write(mHandleStruct, Buffer, Offset, Length, TransferredLength) + + + public virtual def Write(Buffer as Array, Offset as int, Length as int, ref TransferredLength as int) as bool: + return AllKFunctions.StmK_Write(mHandleStruct, Marshal.UnsafeAddrOfPinnedArrayElement(Buffer, 0), Offset, Length, TransferredLength) + + #endregion + + +public class IsoK(IDisposable): + + protected mHandleStruct as KISO_CONTEXT + + protected mbDisposed as bool + + + protected def constructor(): + pass + + + #region IDisposable Members + + public virtual def Dispose(): + Dispose(true) + GC.SuppressFinalize(self) + + + #endregion + + def destructor(): + Dispose(false) + + + protected virtual def Dispose(disposing as bool): + if not mbDisposed: + if mHandleStruct.Pointer != IntPtr.Zero: + AllKFunctions.IsoK_Free(mHandleStruct) + Debug.Print('{0} Dispose: Freed Handle:{1:X16}h Explicit:{2}', GetType().Name, mHandleStruct.Pointer.ToInt64(), disposing) + else: + Debug.Print('{0} Dispose: [WARNING] Handle is null', GetType().Name) + + mHandleStruct = KISO_CONTEXT(IntPtr.Zero) + mbDisposed = true + + + protected def Init(NumberOfPackets as int, StartFrame as int) as bool: + success as bool = AllKFunctions.IsoK_Init(mHandleStruct, NumberOfPackets, StartFrame) + + if not success: + raise Exception(string.Format('{0} failed initializing. ErrorCode={1:X8}h', GetType().Name, Marshal.GetLastWin32Error())) + + Debug.Print('{0} Init: handle 0x{1:X16}', GetType().Name, mHandleStruct.Pointer.ToInt64()) + return true + + + #region Nested Structs + + [StructLayout(LayoutKind.Sequential, CharSet: CharSet.Ansi, Pack: 1)] + private struct KISO_CONTEXT_MAP: + + private final Flags as KISO_FLAG + + + private final StartFrame as int + + + private final ErrorCount as short + + + private final NumberOfPackets as short + + + private final UrbHdrStatus as int + + + #endregion + + #region Public Members + + public def constructor(NumberOfPackets as int, StartFrame as int): + success as bool = AllKFunctions.IsoK_Init(mHandleStruct, NumberOfPackets, StartFrame) + + if not success: + raise Exception(string.Format('{0} failed initializing. ErrorCode={1:X8}h', GetType().Name, Marshal.GetLastWin32Error())) + + Debug.Print('{0} Init: handle 0x{1:X16}', GetType().Name, mHandleStruct.Pointer.ToInt64()) + + + public virtual def EnumPackets(EnumPackets as KISO_ENUM_PACKETS_CB, StartPacketIndex as int, UserState as IntPtr) as bool: + return AllKFunctions.IsoK_EnumPackets(mHandleStruct, EnumPackets, StartPacketIndex, UserState) + + + public ErrorCount as short: + get: + return Marshal.ReadInt16(mHandleStruct.Pointer, ofsErrorCount) + set: + Marshal.WriteInt16(mHandleStruct.Pointer, ofsErrorCount, value) + + + public Flags as KISO_FLAG: + get: + return (Marshal.ReadInt32(mHandleStruct.Pointer, ofsFlags) cast KISO_FLAG) + set: + Marshal.WriteInt32(mHandleStruct.Pointer, ofsFlags, (value cast int)) + + + public virtual def Free(): + Dispose() + + + public virtual def GetPacket(PacketIndex as int, ref IsoPacket as KISO_PACKET) as bool: + return AllKFunctions.IsoK_GetPacket(mHandleStruct, PacketIndex, IsoPacket) + + + public Handle as KISO_CONTEXT: + get: + return mHandleStruct + + + public NumberOfPackets as short: + get: + return Marshal.ReadInt16(mHandleStruct.Pointer, ofsNumberOfPackets) + set: + Marshal.WriteInt16(mHandleStruct.Pointer, ofsNumberOfPackets, value) + + + public virtual def ReUse() as bool: + return AllKFunctions.IsoK_ReUse(mHandleStruct) + + + public virtual def SetPacket(PacketIndex as int, ref IsoPacket as KISO_PACKET) as bool: + return AllKFunctions.IsoK_SetPacket(mHandleStruct, PacketIndex, IsoPacket) + + + public virtual def SetPackets(PacketSize as int) as bool: + return AllKFunctions.IsoK_SetPackets(mHandleStruct, PacketSize) + + + public StartFrame as int: + get: + return Marshal.ReadInt32(mHandleStruct.Pointer, ofsStartFrame) + set: + Marshal.WriteInt32(mHandleStruct.Pointer, ofsStartFrame, value) + + + public UrbHdrStatus as int: + get: + return Marshal.ReadInt32(mHandleStruct.Pointer, ofsUrbHdrStatus) + set: + Marshal.WriteInt32(mHandleStruct.Pointer, ofsUrbHdrStatus, value) + + + #endregion + + #region Private Members + + private static final ofsErrorCount as int = Marshal.OffsetOf(typeof(KISO_CONTEXT_MAP), 'ErrorCount').ToInt32() + + private static final ofsFlags as int = Marshal.OffsetOf(typeof(KISO_CONTEXT_MAP), 'Flags').ToInt32() + + private static final ofsNumberOfPackets as int = Marshal.OffsetOf(typeof(KISO_CONTEXT_MAP), 'NumberOfPackets').ToInt32() + + private static final ofsStartFrame as int = Marshal.OffsetOf(typeof(KISO_CONTEXT_MAP), 'StartFrame').ToInt32() + + private static final ofsUrbHdrStatus as int = Marshal.OffsetOf(typeof(KISO_CONTEXT_MAP), 'UrbHdrStatus').ToInt32() + + #endregion + diff --git a/Old Matlab Interface/.svn/pristine/f4/f4dda42d5cff055dd900dc56988ee4a55c7431e2.svn-base b/Old Matlab Interface/.svn/pristine/f4/f4dda42d5cff055dd900dc56988ee4a55c7431e2.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..7f2cb1cf25a8c212ea0074dc181d414fb67b8263 GIT binary patch literal 11809 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 + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {E9566BFF-3BEC-4358-9871-C1700CB73C2B} + Exe + Properties + Hot.Plug.Detect + Hot.Plug.Detect + v2.0 + 512 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + libusbK.cs + + + + + + + \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/f7/f701f327c83d2ffcf07fb071e5c135e223413720.svn-base b/Old Matlab Interface/.svn/pristine/f7/f701f327c83d2ffcf07fb071e5c135e223413720.svn-base new file mode 100644 index 00000000..8b63a448 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/f7/f701f327c83d2ffcf07fb071e5c135e223413720.svn-base @@ -0,0 +1,67 @@ +//MATLAB INCLUDES +#include +#include + +//LIBUSBK INCLUDES +#include +#include +#include +#include +#include "libusbk.h" + +#define DEBUG_SHOWCTRL 1 +#define ISO_PACKETS_TO_READ 30 +#define ISO_PACKET_SIZE 750 +#define HALFBUFFER_SIZE (ISO_PACKETS_TO_READ*ISO_PACKET_SIZE) + +void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) +{ + + //Vars: + //Imports + char *HANDLE_CHAR; + KUSB_HANDLE handle = NULL; + char *stm_handle_string; + KSTM_HANDLE stm_handle = NULL; + unsigned char pipeID = 0x83; + //Internals + unsigned char *tempBuffer; + unsigned char success; + DWORD errorCode = ERROR_SUCCESS; + ULONG length; + unsigned int n; + //Exports + char *transfer_contents; + unsigned int *error_export; + + //Initialise Data + HANDLE_CHAR = mxArrayToString(prhs[0]); + sscanf(HANDLE_CHAR, "%16x", &handle); + + stm_handle_string = mxArrayToString(prhs[1]); + sscanf(stm_handle_string, "%16x", &stm_handle); + + //Actual Function + tempBuffer = mxMalloc(HALFBUFFER_SIZE); + success = StmK_Read(stm_handle, tempBuffer, 0, HALFBUFFER_SIZE, &length); + printf("%d bytes copied, out of a possible %d\n", length, HALFBUFFER_SIZE); + if (!success) { + errorCode = GetLastError(); + printf("StmkK_Read failed. ErrorCode: %08Xh\n", errorCode); + //printf("No more items = %08Xh\n", ERROR_NO_MORE_ITEMS); + } + + //Export Data + transfer_contents = mxMalloc(HALFBUFFER_SIZE); + for (n=0;nsamplestoshow + if (samplestoshow>500) + temp_waveform = buffer((length(buffer) - samplestoshow - delay_sample):samplestoshow/500: (length(buffer) - delay_sample)); + else + temp_waveform = buffer((length(buffer) - samplestoshow - delay_sample): (length(buffer) - delay_sample)); + end + cool_waveform = undofrontend(temp_waveform, channel); + taxis = linspace(-scope_window_time-delay_sec,-delay_sec,length(cool_waveform)); + return + end + + taxis = []; + cool_waveform = []; \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/f8/f89ac51bd77fc899b6f8fe81d7957e17659037cd.svn-base b/Old Matlab Interface/.svn/pristine/f8/f89ac51bd77fc899b6f8fe81d7957e17659037cd.svn-base new file mode 100644 index 00000000..d471ccea --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/f8/f89ac51bd77fc899b6f8fe81d7957e17659037cd.svn-base @@ -0,0 +1,66 @@ +function [] = tiny_send_waveform(waveform, amplitude, frequency); + +global scope_mode +global gui_axes + +offset = 375; +waveform = tiny_wave_conv(waveform, amplitude); +waveform = uint8(waveform); +%waveform; + +wave_length = length(waveform); + +f_invalid = 1; + +valid_clock_div = [1,2,4,8,64,256,1024]; +f0=24e6; + +if(frequency*wave_length)>1e6 + error('Frequency is too high') +end + +for clk_setting = 1:length(valid_clock_div) + f_test = f0 / valid_clock_div(clk_setting); + if (f_test/frequency)<65535 + f_invalid = 0; + break + end +end + +if (f_invalid) + error('Frequency is too low!') +end + +tccper = round(f_test / frequency / wave_length); +tccper = uint16(tccper); + +clk_setting = uint16(clk_setting); +%clk_setting; + +%stairs(uint8(waveform)); + +wavestring = []; +for n=1:wave_length + wavestring = [wavestring [sprintf('%3d, ', waveform(n)) ' ']]; +end + +%%Exception for mode 5 +if (scope_mode ==5) + mex_usb_send_control('40', 'a1', dec2hex(tccper), dec2hex(clk_setting), dec2hex(wave_length), uint8(waveform)); + stairs(gui_axes, waveform, 'y') + set(gui_axes, 'Color', [0 0 0], 'Box', 'on', 'XColor', [1 1 1], 'Ycolor', [1 1 1]); + return +end + + +mex_usb_send_control('40', 'a1', dec2hex(tccper), dec2hex(clk_setting + 16*offset), dec2hex(min(375,wave_length)), uint8(waveform(1:min(375,wave_length)))); + +if(wave_length>375) + warning('\nWave Length > 375') + mex_usb_send_control('40', 'a1', dec2hex(tccper), dec2hex(clk_setting + 16*(offset+750) + 32768), dec2hex(wave_length-375), uint8(waveform(376:end))); +end + + +% driverLocation = 'c:\libusbk\examples\open-device\debug\win32'; +% command = [driverLocation '\open-device "03eb" "a000" "' command '" "' num2str(tccper) '" "' num2str(clk_setting) '" "' num2str(wave_length) '" "' wavestring '"'] +% system(command); \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/fa/fa8489441ac82d22567b5c3d5b494576df54f37d.svn-base b/Old Matlab Interface/.svn/pristine/fa/fa8489441ac82d22567b5c3d5b494576df54f37d.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..d8112b9e825d4ea9ab0ee96685aa18b02ab58e4f GIT binary patch literal 99128 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 +// All rights reserved. +// +// AssemblyInfo.cs +// +// Created: 03.05.2012 +// Last Updated: 03.05.2012 +// +// 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. +// +// 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 TRAVIS LEE ROBINSON +// 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. +#endregion + + +using System.Reflection; +using System.Runtime.InteropServices; + + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. + +[assembly: AssemblyTitle("Read.Isochronous")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("Read.Isochronous")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2012")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. + +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM + +[assembly: Guid("b345e710-181d-481f-a62c-7e434534e582")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] + +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/fb/fb57921a14cfc57fcfdc9ae090915910e58b90e4.svn-base b/Old Matlab Interface/.svn/pristine/fb/fb57921a14cfc57fcfdc9ae090915910e58b90e4.svn-base new file mode 100644 index 00000000..20150cf9 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/fb/fb57921a14cfc57fcfdc9ae090915910e58b90e4.svn-base @@ -0,0 +1,41 @@ +global gui_hori_cursor_a_pos +global gui_hori_cursor_b_pos +global gui_vert_cursor_a_pos +global gui_vert_cursor_b_pos +global scope_window_time +global scope_window_max +global scope_window_min + +global gui_cursor_mode +global gui_axes +global scope_mode + +if(scope_mode==2) + switch(gui_cursor_mode) + case 1 + plot(gui_axes, taxis_ch1, cool_waveform_ch1, 'y', taxis_ch2, cool_waveform_ch2, 'c'); + case 2 + plot(gui_axes, taxis_ch1, cool_waveform_ch1, 'y', taxis_ch2, cool_waveform_ch2, 'c', [-scope_window_time 0], [gui_hori_cursor_a_pos gui_hori_cursor_a_pos], 'w', [-scope_window_time 0], [gui_hori_cursor_b_pos gui_hori_cursor_b_pos], 'w:'); + case 3 + plot(gui_axes, taxis_ch1, cool_waveform_ch1, 'y', taxis_ch2, cool_waveform_ch2, 'c', [gui_vert_cursor_a_pos gui_vert_cursor_a_pos], [scope_window_min scope_window_max], 'w', [gui_vert_cursor_b_pos gui_vert_cursor_b_pos], [scope_window_min scope_window_max], 'w:'); + case 4 + plot(gui_axes, taxis_ch1, cool_waveform_ch1, 'y', taxis_ch2, cool_waveform_ch2, 'c', [gui_vert_cursor_a_pos gui_vert_cursor_a_pos], [scope_window_min scope_window_max], 'w', [gui_vert_cursor_b_pos gui_vert_cursor_b_pos], [scope_window_min scope_window_max], 'w:', [-scope_window_time 0], [gui_hori_cursor_a_pos gui_hori_cursor_a_pos], 'w', [-scope_window_time 0], [gui_hori_cursor_b_pos gui_hori_cursor_b_pos], 'w:'); + otherwise + error('Gui_axes is in an invalid state'); + end +else + switch(gui_cursor_mode) + case 1 + plot(gui_axes, taxis, cool_waveform, 'y'); + case 2 + plot(gui_axes, taxis, cool_waveform, 'y', [-scope_window_time 0], [gui_hori_cursor_a_pos gui_hori_cursor_a_pos], 'w', [-scope_window_time 0], [gui_hori_cursor_b_pos gui_hori_cursor_b_pos], 'w:'); + case 3 + plot(gui_axes, taxis, cool_waveform, 'y', [gui_vert_cursor_a_pos gui_vert_cursor_a_pos], [scope_window_min scope_window_max], 'w', [gui_vert_cursor_b_pos gui_vert_cursor_b_pos], [scope_window_min scope_window_max], 'w:'); + case 4 + plot(gui_axes, taxis, cool_waveform, 'y', [gui_vert_cursor_a_pos gui_vert_cursor_a_pos], [scope_window_min scope_window_max], 'w', [gui_vert_cursor_b_pos gui_vert_cursor_b_pos], [scope_window_min scope_window_max], 'w:', [-scope_window_time 0], [gui_hori_cursor_a_pos gui_hori_cursor_a_pos], 'w', [-scope_window_time 0], [gui_hori_cursor_b_pos gui_hori_cursor_b_pos], 'w:'); + otherwise + error('Gui_axes is in an invalid state'); + end +end +set(gui_axes, 'Ylim', [scope_window_min, scope_window_max], 'Xlim', [-scope_window_time, 0], 'Color', [0 0 0], 'Box', 'on', 'XColor', [1 1 1], 'Ycolor', [1 1 1]); + diff --git a/Old Matlab Interface/.svn/pristine/fb/fb80c8c407241aa3266ea0297d0973b4109368c7.svn-base b/Old Matlab Interface/.svn/pristine/fb/fb80c8c407241aa3266ea0297d0973b4109368c7.svn-base new file mode 100644 index 00000000..f3f07224 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/fb/fb80c8c407241aa3266ea0297d0973b4109368c7.svn-base @@ -0,0 +1,118 @@ +%mex USB_ISO_LOOP.c -Iincludes -llibusbK -Lbin\lib\amd64 +%clear all + +global usb_handle +global scope_gain +global scope_window_time +global scope_window_max +global scope_window_min +global scope_mode +global gui_scope_running + +global gui_hori_cursor_a_pos +global gui_hori_cursor_b_pos +global gui_vert_cursor_a_pos +global gui_vert_cursor_b_pos +global gui_cursor_mode +global saved_waveform_ch1 +global saved_waveform_ch2 + +dotheplot + +if ~length(usb_handle) + warning('USB Handle not initialised. Initialising!') + mex_usb_init('03eb', 'a000') +end + +[isoCtx_0, isoCtx_1, ovlkHandle_0, ovlkHandle_1, ovlPool, isoBuffer] = USB_ISO_INIT(usb_handle) + +refreshrate = 4; +refreshrate_temp = refreshrate; + +if(isempty(max_n)) + max_n = 10 +end +saved_waveform_ch1 = int8([]); + +if isempty(scope_mode) + error('You didn''t set the scope mode!'); +end + +if isempty(scope_window_time) + error('You didn''t set the window time (x) value!'); +end + +if (scope_window_time < 1/375000) + error('Scope window size is too small!'); +end + +if(scope_mode==0) + if isempty(scope_gain) + error('You didn''t set the gain!'); + end + + if isempty(scope_window_min) + error('You didn''t set the minimum window voltage value!'); + end + + if isempty(scope_window_max) + error('You didn''t set the maximum window voltage value!'); + end +end + +dropped_packets = 0; +waveform_exists = 0; + +for n=1:max_n + %[transfer_contents_0] = USB_ISO_LOOP(usb_handle, isoCtx_0, ovlkHandle_0, ovlPool, isoBuffer, uint8(0)); + [transfer_contents_0, libk_error] = USB_ISO_LOOP(usb_handle, isoCtx_0, ovlkHandle_0, ovlPool, isoBuffer, uint8(0)); + keep_in_sync + displaypacket(transfer_contents_0) + if(gui_scope_running) + updatescopeaxes + else + switch(gui_cursor_mode) + case 1 + plot(gui_axes, taxis, cool_waveform, 'y'); + case 2 + plot(gui_axes, taxis, cool_waveform, 'y', [-scope_window_time 0], [gui_hori_cursor_a_pos gui_hori_cursor_a_pos], 'w', [-scope_window_time 0], [gui_hori_cursor_b_pos gui_hori_cursor_b_pos], 'w:'); + case 3 + plot(gui_axes, taxis, cool_waveform, 'y', [gui_vert_cursor_a_pos gui_vert_cursor_a_pos], [scope_window_min scope_window_max], 'w', [gui_vert_cursor_b_pos gui_vert_cursor_b_pos], [scope_window_min scope_window_max], 'w:'); + case 4 + plot(gui_axes, taxis, cool_waveform, 'y', [gui_vert_cursor_a_pos gui_vert_cursor_a_pos], [scope_window_min scope_window_max], 'w', [gui_vert_cursor_b_pos gui_vert_cursor_b_pos], [scope_window_min scope_window_max], 'w:', [-scope_window_time 0], [gui_hori_cursor_a_pos gui_hori_cursor_a_pos], 'w', [-scope_window_time 0], [gui_hori_cursor_b_pos gui_hori_cursor_b_pos], 'w:'); + + otherwise + error('Gui_axes is in an invalid state'); + end + set(gui_axes, 'Ylim', [scope_window_min, scope_window_max], 'Xlim', [-scope_window_time, 0], 'Color', [0 0 0], 'Box', 'on', 'XColor', [1 1 1], 'Ycolor', [1 1 1]); + drawnow + end + + %[transfer_contents_1] = USB_ISO_LOOP(usb_handle, isoCtx_1, ovlkHandle_1, ovlPool, isoBuffer, uint8(1)); + [transfer_contents_1, libk_error] = USB_ISO_LOOP(usb_handle, isoCtx_1, ovlkHandle_1, ovlPool, isoBuffer, uint8(1)); + keep_in_sync + displaypacket(transfer_contents_1) + if(gui_scope_running) + updatescopeaxes + else + switch(gui_cursor_mode) + case 1 + plot(gui_axes, taxis, cool_waveform, 'y'); + case 2 + plot(gui_axes, taxis, cool_waveform, 'y', [-scope_window_time 0], [gui_hori_cursor_a_pos gui_hori_cursor_a_pos], 'w', [-scope_window_time 0], [gui_hori_cursor_b_pos gui_hori_cursor_b_pos], 'w:'); + case 3 + plot(gui_axes, taxis, cool_waveform, 'y', [gui_vert_cursor_a_pos gui_vert_cursor_a_pos], [scope_window_min scope_window_max], 'w', [gui_vert_cursor_b_pos gui_vert_cursor_b_pos], [scope_window_min scope_window_max], 'w:'); + case 4 + plot(gui_axes, taxis, cool_waveform, 'y', [gui_vert_cursor_a_pos gui_vert_cursor_a_pos], [scope_window_min scope_window_max], 'w', [gui_vert_cursor_b_pos gui_vert_cursor_b_pos], [scope_window_min scope_window_max], 'w:', [-scope_window_time 0], [gui_hori_cursor_a_pos gui_hori_cursor_a_pos], 'w', [-scope_window_time 0], [gui_hori_cursor_b_pos gui_hori_cursor_b_pos], 'w:'); + + otherwise + error('Gui_axes is in an invalid state'); + end + set(gui_axes, 'Ylim', [scope_window_min, scope_window_max], 'Xlim', [-scope_window_time, 0], 'Color', [0 0 0], 'Box', 'on', 'XColor', [1 1 1], 'Ycolor', [1 1 1]); + drawnow + end +end + +clear all +max_n = 2000 +mex_usb_iso_loop \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/fb/fbaab675ab97abde1c3353748e9f3d129bd92023.svn-base b/Old Matlab Interface/.svn/pristine/fb/fbaab675ab97abde1c3353748e9f3d129bd92023.svn-base new file mode 100644 index 00000000..c5b23ee7 --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/fb/fbaab675ab97abde1c3353748e9f3d129bd92023.svn-base @@ -0,0 +1,13 @@ +function [wave] = tiny_wave_conv(wave, amplitude); +if length(wave)>750 + wave=imresize(wave,750/length(wave)); + warning('Vector length is greater than 128. It has been scaled down.') +end + +if (amplitude>255 | amplitude<0 | amplitude ~= round(amplitude)) + error('Amplitude must be an integer between 0 and 255 for an 8 bit waveform!') +end + +wave = wave - min(wave); +wave = wave * amplitude / max(wave); +wave = round(wave); \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/fc/fc2350e45b0c7bdac7ac35f42b65f5fdfd622464.svn-base b/Old Matlab Interface/.svn/pristine/fc/fc2350e45b0c7bdac7ac35f42b65f5fdfd622464.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..0d41062911fabaa111324b1e7887ccee4f491000 GIT binary patch literal 84280 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 IIt$qT3nao=f&c&j literal 0 HcmV?d00001 diff --git a/Old Matlab Interface/.svn/pristine/fc/fc253270c36a209bcb1a8a7efc73b7bc27c5dec6.svn-base b/Old Matlab Interface/.svn/pristine/fc/fc253270c36a209bcb1a8a7efc73b7bc27c5dec6.svn-base new file mode 100644 index 00000000..b733556e --- /dev/null +++ b/Old Matlab Interface/.svn/pristine/fc/fc253270c36a209bcb1a8a7efc73b7bc27c5dec6.svn-base @@ -0,0 +1,13 @@ +function [wave] = tiny_wave_conv(wave, amplitude); +if length(wave)>128 + wave=imresize(wave,128/length(wave)); + warning('Vector length is greater than 128. It has been scaled down.') +end + +if (amplitude>255 | amplitude<0 | amplitude ~= round(amplitude)) + error('Amplitude must be an integer between 0 and 255 for an 8 bit waveform!') +end + +wave = wave - min(wave); +wave = wave * amplitude / max(wave); +wave = round(wave); \ No newline at end of file diff --git a/Old Matlab Interface/.svn/pristine/fe/fec3f9b96c660796ba167efb57158c7afe7d751e.svn-base b/Old Matlab Interface/.svn/pristine/fe/fec3f9b96c660796ba167efb57158c7afe7d751e.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..0e43a803c20310a795d9778dea7ab4827364daaa GIT binary patch literal 1437590 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 z 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®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%0D#;?0njhp9_~3DKn?h97`tPeT_SJL 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 literal 0 HcmV?d00001 diff --git a/Old Matlab Interface/.svn/pristine/fe/fed3c95fe8e06ff11d5eaaafdea8c28f8c7577ed.svn-base b/Old Matlab Interface/.svn/pristine/fe/fed3c95fe8e06ff11d5eaaafdea8c28f8c7577ed.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..4cabd8c0374aa1ca34f36c143f476a5882feb4a1 GIT binary patch literal 7168 zcmeHL4Qw0L9e+;Zkk2~Z@F<1QYwAdqfYhyFq$DXeN#J?AfJsvbp~ZFWOJnLU?#^v8 zu_=%`#d-@Wtm0z>#wJZ;h!%~{$J2BH;Tx8J)vyJ^`v zrfHM5_9gHAzyJUD{_lV9`L3;ND=8#|6rpPxAv*whbL-=oheHt0S@8TEvb}WQ!W|ZI z-@=Zbup%Vn_H4+UFJHUgHawW? zpZBd9{2u7f`!)BZbC8u`L>pjiahZzAOazW&Y)hWO1&!N?Ijral=<5Erq5~u zA#3a8P(Te3@`M!vFi0`FnIm9&b7R(Zh8pSQ949(Y6VKtS=El&k0Wy_csrHR&(omQX~#VJx6OHQKbl_0c4*t@IT?i%03Rg>CR6SXZX-T>~(OuYs$@Ug{~8U>Qi6MOHAnR=x%pQ+cY z^-NjKMC}5Z%BU4ap02?LPOqRt_Fg`fp~?WjsP!S}@U&*h;M_L0`+2VJW&1Syt&nKei!kos zfq3z{DT_ELWp_DzA`3Y>c~yD*p4&ZZP+BKzE1}nxrvs(z^s*WDvB>`L0{4;b%%<(n z;7UjxNPcCxeHXA~nd>0fQ~M!C-c;+r#|6o&D6_tV^q>;d5^aJ_rdu3B>Y#1&lh6{` z%j^y8P}cdGrkNrX%+PF6H5O!u1~g0ZO5|rL%v=Y!nFX>uar9G76It~t1ZztjRLgS$ zkM?Rx!(_C=2AyP$l0@}fP9_OdtAqC-$G#ysbn^Q_9L<>otGjFqi+2&2{)E+zj3ljD1$!d0QGUSeKm82Z^0}t*+z(auA?EwVLi=`I+nv{Dl`T4_ z&g5YKVY!%7Y)l+#K|u_4IO?+xz#fkiWul{AvzO@F*10g{9Jglw2)8Jnp5wTHjDWZ4 z1|!C)gfdy2y&n0YNN(o%q&5cr;*oLv%+(JjI#fNvoenj<2rxZ|vO-=O1=<817%8C* zZ_CGwyzpann#4pkVxjWqOdMuH&uuY2jnv5 zDJgtOY?zR39&MNo3@>hN*ek!oBd}p!2xj9s5!tXfRC&*org_<(>>WrD)?Cwe>9Chg zaL&CvWnkHu+cBJ7aC~CmkY&0+KkJb_tu|YVy{~;sA0O4nL4CXzBlpjXtBMXZ-NJw4 zB#SlsRS+1@dOrX2jQlfe;f35NPJ{E{o{H4QR`O?YX-icU{J|ZJ6QD^n;wA zYyUGDsNuil&?-#$k;9-O?a;f|7b$P3YW4;&o|+Riwud+q`OSmW5R?9 zkC=MDH{pI0zGTAfCcMnl&&7MxC?VC$E}XgGkbUApdkL|FZx59c zJNWkYxtZN~N5Vl&Zu}}CSK_@YgNKzvFX#rq8PL30Y{kSDI*-_{09;m{Fyr~=nsK=w zzRttk){fUc^PS34Rz%8RQ?{%)QCegnMb{FN)7=D{r_i0y<?|cH@Eobo>dEJ5ckJ|rxeL4!Gy&hQ(^mW8ns&Y8Cotg4b6C0kD7eu)IF-LfPR z@>h#riUslECFGAK;rDTiKM+;c`=#EnO2{P^zrWe9B&1-tI~?@)1Y)6xBonfL^Am~A zU_!kv9D#d$?eP195h)P!t9=OxQM=>*SRg7XKp~F>B81#l@)N^e`V4 z_;v1Mg?^LMw({oY_N7jzzEtuT(yC9<7uS7}y`)9rQ_j(uqLmRzN|1L*OIQi4i%1Lul$!A8sUvRyoc7%f)bOs@NEufo| zvMj|^!;v?H*NRzOpBxWLiUM{&w_Vw%s8X~e9F;r@vLSJde6zLvhE~zF%viz63eJ6N zx(Bt*pS@h~1$`HKKRW*gvyDU2BOytf;&LQZhwa|<^(*+UUzdyp)o?t<75<}5|2={s z_tR(J8sR|q@AyxYbM36i0P65o^vpt3A|U^wvljRm;6mIrJ-{7+YjA&T2F|~eK8DWq zp9WlwJ7p3$hYGp_XS)jcH2Mjy19-&56SzyBK`(;N1mFkgT>nGBpW;5d3^>2%-bJ5) zEx+UVeZ_GOYfYTrOYJ6pR_xJ#VUb0842%BB6{+pdh0O5_z;ON@ekl|vWSu@jx-8gh z!+CI)>!BUZeNja?c>3#&XMp?Qui6~MC zH|s_m8<*r44fDn&xqPnhd3>Ih7Viz$cXpb{ze5wj_?CX+32frI IcGhL!Z*V|O-v9sr literal 0 HcmV?d00001 diff --git a/Old Matlab Interface/.svn/wc.db b/Old Matlab Interface/.svn/wc.db new file mode 100644 index 0000000000000000000000000000000000000000..a2b294875d161ce501ac72d9150ea4ee988c7dc0 GIT binary patch literal 159744 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 literal 0 HcmV?d00001 diff --git a/Old Matlab Interface/GUIDE/figstate_7a.p b/Old Matlab Interface/GUIDE/figstate_7a.p new file mode 100644 index 0000000000000000000000000000000000000000..0c8f63ccdefb03bbd30929c0c4987cbce9fc9557 GIT binary patch literal 1662 zcmZvcdo?^QVqz9aR)-x!k`R)H>?~Fj%4Mb@%5`!-nq)O;HVh3( zXiS-;Y1TdLuxPThlWiHALM}U`_UWuY_jk^F&hPxr`9AOSzQ5=5K^(IPk31V@V1Tu> zLLf5a5r}OF1VRB;Dy%QhoE&`r?-lV6JG$iC;+~2*In(!V>zvnq5>4PMaV1+Wb#lxe$|(_j`Qx9igsI>x_IN%@w5tb(f)T5Y%mhx>%_DL=rvf;HO-1p8t3K zS*bH`S`t|q*NS_Lm*h+_XQP}QB1`pXf3>gr(i=3Hv4n-$G4}#H9h(}#ka;Q(LaV%|Y@Al@lo6dFdc5KTMgJR{1Ier!9U0oV)Pw9lBE3#$i zX~RfJx9$QdqI)YB&oNK;hx5}sje@ux{GBRqUSg5kmz^#;4ysVu(E;%qhl%NOrZLYT zkJi$|*Wwa=FE;oyPw6(!mMR^!yT&<_epTGzh0QM?y9xXAOti7XLR+WRb=BM^$-Nzx zHA^>n{BX=8)#Qwbz~Ii0$V9c%4I@mwvIWu$_pKB&&WvDPyct#K`C5l-pJL|2y3yoX zL~aXAzUnc_w%lQ*kz<@BR~6&u)2c8PIDxl7uB!ccUQ=JMtg%)ryPqOlnh{JIx(=Z8 z%Na*ypCTN>w3|lZ{#u~_IEm#B+zjVb5}cn3`D(}?#6f=kI&*^1IQt@d>&jGuxxi8E zS~$>W#IU12i8#f&@d58mhX3cIQmiT5?d_LCJf0d}Ut^J$G^2HkmX(>PCbqh+-$SrQ z?{qJqke6m$_8Gc*b;A5{sh_3@Z*DYY!ThW^4(9#=`T1dGqI{}peQs2m!`@Q8&U)M` zy=#6%f3j?$c2jl%h0Zx6VBGE~+_pgYG0Of)wL#cPIRA3nr(_?MlahNS9F3fcaG0OH z(oGJBwSpDDN4C(>kT)K0oOOZw_ksCgh&xarvE#e8P*cn(kdN?gzVs007t4+wm1*Qm zdO?29B5iFn@K&ci?tpKV70l1L_3RLN-c7hvBbdCsxe&eO^;q7c6f<6!HuhE#`Ll!L z)!xSv%h4}vU)W&q$}8i%&CP85^ak59%pnDHVDQ8S+oU`GIvK#=7q%tk6Tv>B6w8Oe z;C^8695A>k&6ZcW!QfD4<;QucHR(7os16K9TwV+{nZz+NfWcpZ!ODk7uVdfT_O=0o zi_k+D^soqic?Nzl6y3-FjvE+Kw<3p369}XWN>{jqr8;>Ru`0^5kF1j~3pSIoBAb2@ zzHstw4fpt2f*L*Ucd=qSKc^lkHRW}Q_R~Du$LYiKl}uTgD(PHzJtZ-rKyXn!iP8lR z^g$0#p@(Zil+%%9ZZ8{pXao-|g9mD)=rxq6R&gYgsdgSXWPk^Pzymy+=PtJ30Rnj7 z5O}}_JmBfQ@_Bka*h9AG?r1@AnsJew8|JGhONT9`fwb%G4By`xQkXV`qS;#a2jGD& zfpI9?%fOSycudu)KF!Mc&?po+<*jp74okEHJT>kU5AZwRpR^$IqD6P{NMs2e2m9xP z2fVWjxMkph7Q^a+)qIzrchu+ACM*i}4S2w!)h9O=JYWkRVDh^#t-!G{cmM+)=x$(z z6zMWZw%rk2dyY%GIh_9vctFekyD2yDfD(AX%8{p{$yN-|(l93W$hpK^fjkvFAOR1M zzymhA{Mlh8jNMy~e0r<6-iw^yIrbJjFbp2(2M;WP2RM>}9eI94Vi_NW(UeXl9RUw; bzymSh0d4TWb@xz8IEN-^5T8Nyf(QNu=h`#O literal 0 HcmV?d00001 diff --git a/Old Matlab Interface/GUIDE/launchgui.m b/Old Matlab Interface/GUIDE/launchgui.m new file mode 100644 index 00000000..e69de29b diff --git a/Old Matlab Interface/GUIDE/maxfig.m b/Old Matlab Interface/GUIDE/maxfig.m new file mode 100644 index 00000000..69d31ae5 --- /dev/null +++ b/Old Matlab Interface/GUIDE/maxfig.m @@ -0,0 +1,12 @@ +%MAXFIG Maximize a figure +% MAXFIG(F,1) maximizes the figure window for the figure with handle F +% MAXFIG(F,0) restores figure F if F is maximized +% +% Example: +% If +% f = figure; +% surf(peaks) +% then +% maxfig(f,1) maximizes the figure +% +% See also MINFIG, FIGSTATE \ No newline at end of file diff --git a/Old Matlab Interface/GUIDE/maxfig.p b/Old Matlab Interface/GUIDE/maxfig.p new file mode 100644 index 0000000000000000000000000000000000000000..66fa3d1e6c95c4ad28ef89b0d5e514a14464ae13 GIT binary patch literal 504 zcmVvCqyK z<I-Nue}^pJsL-HpaZwQ77~g!Sl0p?{kTubVg11zXw@6h*7SAtI7t5CN zFsl`yeYO^8&^zTyJDKi2iI#zpi%bu<{dcF3bYjEDW@q-180G?pD_|q#MZU;;iu?KG u>sM`4$j=7zwM0)*eKKOYYt_K-o6MS(q9NTN#H6}^QGz3e3b literal 0 HcmV?d00001 diff --git a/Old Matlab Interface/GUIDE/maxfig_7a.p b/Old Matlab Interface/GUIDE/maxfig_7a.p new file mode 100644 index 0000000000000000000000000000000000000000..e24371147c5c261ed171450b03a67fb3b34b9b84 GIT binary patch literal 2552 zcma*pe>l_a8UXO&)k2ZHabwAH@-{1TGJVW?ykBB-;HaB;) zvqvC4|AIj1A`l29yefECo~s%N#2fhC4et+5O!3a54%Rm{o5`=WIMr#{5aAxax$lI1 zVCZd<1Lf~puN!}z8Pixdd{A#qmnG`OTnhRM+k}_e(|~ntS?|5F-pUglb}=F$88qX-vNPtztVAZ>~)_MH(^fXUip$a)L5wZ2vwHWC}M{U-s&tK|JkK+X6 zvXCs3=goz;zDby@G6#y$%hyzc_%TuFaHd{#t|jBeocrjrP5p7go&+p4xwjJ;=yzHr z*8U_;yN~%gj#HhH4I$YX^9DGjgt$G))4ZtboLhK5VZ=)$p0hkX1R zmg^VSdq3JTA>|i!SV2`Vq0zX#2TL|)jXt0EpRC`&j3Z4c-g)LZ2RK!We8bv&bcr7s zB3er261#tT8LBeA*sFt-#~igW%nnZw-k%KLt}d{Hs-DuEFEoe!-P*A^&NjWw4)%`zUUt-w~<*9qa7YtJ4@*P=z)03XflsU1vf37UPYC z&-g_Dll6g2k||fwr*+sl*sJId#&DZY!v&IcJM5pa$;9z#&o1oJ;`*F9`9mW?fOhyh zVFc#vczV*-ppfr52FhiAbAGpz9Q@dxzL{f``-Gtl<#@H&g zTi#?7UI*0gF`R#o+|Fpm(2I2h@_z;K7gyr(^9Bpbo6LR^S5ZjUojsf_b`2grm>=XY zc#1%K5*f=bo!;k{u>554h|X@gos|7G#W5c3SFImed5-eLxXswSUX%J&899VI(@Hs$;NgDe!g%? zDKYCWn|k0+&!dib6}d9X+wzU4NT-l4Pbx9wW4wI@-&>cGkLX;KKP=8N%x0NF|6s<| z_u3hUAW@plg;6 zN*DI`80n8A7c^X|g!xI1dT4|#@?w$PgRZyNs_(5bzJpB7NbEaZFEJY`n^NqdAD$IM z|F?x@<`Z*I4kSVT=h!B39t91{i!Hr6)AAT8Tdd9U*&l&f9gR~J%kB__kiQM|zjW|| z?Ujb}S5XjO2K{r0SiyKX=U#aL@^|dnwX6^OtD<70orYdk65;*W(ed=XO(h|O0jNL0 zUJ@D({qqgxuQ$G0W56QQXPP^BuO0mG+;l81RX<_5C3(Hh?x>ifSw&vqgV6u6wdw*R z*~YBH8G8&ul{d|t%PvqpXywhW$a(RnoV?d|rKsvOt4{mozHL9{bWN&znpj$PU58MDIUV#z_8&ZXj~E-!LiLu&O{9MdIK|Qw=G5tqqXnh1lq~P(?+a6v zt<0%193}c?Gc_{)nP@-c;|2M=gPK3wB#3M1F~Y7-=5^+C`io1&A)lCOFEOd(TU2VY zYUB*$gNA%^!E7v@;(XU>!ow--&+h0hDZ|=Dd(@ZB=f(QNb1A{SG*u;njdzsjPq*5&tjgH} zW@C%AStBqr8MR75Oi2wAuPN<&UY`+KWm-tt_L9V*Y>4&OU1oX8W0P6$~&##b0x|0n8@lRt#i<*?cfNw}*=E@Sj$RYVEP5wN|Q$pc(>Rv)CX5%qD`_Mqu_JnB8oF z?oP}VG3@59MUu%>9((1^gY$0&v%iDcp~4rKMd+V7FncqYU8tO9R*{w!P4tA>mUx1Q zHtd?u={m?*4Q6iuvyXt;Env0_nDslDeGbg70kfOH>_#yAEtoAP9k)&L9HvIh-12a; z*yQu5OC7aDV~%bfndFW11Y-N$T5`1Iy3#ChZ1{n+BX!TCzwY%Zac_TvzfqW>{BBlP zmid52pQkGMUZU3WyZJS1B@A8O917Dhq(f7!nj&lW?%d6dH zJH?Ryw7A1+<-Zde=5Pe&unp>ngE@R{{fc|o*TR;oMfzpu$x6|l4`Wg1i_sR*&4EsN MIc8qNIXig&0YW?Ug8%>k literal 0 HcmV?d00001 diff --git a/Old Matlab Interface/GUIDE/minfig.m b/Old Matlab Interface/GUIDE/minfig.m new file mode 100644 index 00000000..fff68b83 --- /dev/null +++ b/Old Matlab Interface/GUIDE/minfig.m @@ -0,0 +1,12 @@ +%MINFIG Minimize a figure +% MINFIG(F,1) minimizes the figure window for the figure with handle F +% MINFIG(F,0) restores figure F if F is minimized +% +% Example: +% If +% f = figure; +% surf(peaks); +% then +% minfig(f,1) minimizes the figure +% +% See also MAXFIG, FIGSTATE \ No newline at end of file diff --git a/Old Matlab Interface/GUIDE/minfig.p b/Old Matlab Interface/GUIDE/minfig.p new file mode 100644 index 0000000000000000000000000000000000000000..e236095849bbbff3d13c8a544e7c2fbf11e4c6e1 GIT binary patch literal 322 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 ZT?CSPCMX}dzC;dxO6p4x001Y)F;D=%74`rC literal 0 HcmV?d00001 diff --git a/Old Matlab Interface/GUIDE/untitled.m b/Old Matlab Interface/GUIDE/untitled.m new file mode 100644 index 00000000..9862dab0 --- /dev/null +++ b/Old Matlab Interface/GUIDE/untitled.m @@ -0,0 +1,211 @@ +function varargout = untitled(varargin) +% UNTITLED MATLAB code for untitled.fig +% UNTITLED, by itself, creates a new UNTITLED or raises the existing +% singleton*. +% +% H = UNTITLED returns the handle to a new UNTITLED or the handle to +% the existing singleton*. +% +% UNTITLED('CALLBACK',hObject,eventData,handles,...) calls the local +% function named CALLBACK in UNTITLED.M with the given input arguments. +% +% UNTITLED('Property','Value',...) creates a new UNTITLED or raises the +% existing singleton*. Starting from the left, property value pairs are +% applied to the GUI before untitled_OpeningFcn gets called. An +% unrecognized property name or invalid value makes property application +% stop. All inputs are passed to untitled_OpeningFcn via varargin. +% +% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one +% instance to run (singleton)". +% +% See also: GUIDE, GUIDATA, GUIHANDLES + +% Edit the above text to modify the response to help untitled + +% Last Modified by GUIDE v2.5 09-Jun-2015 16:00:50 + +% Begin initialization code - DO NOT EDIT +gui_Singleton = 1; +gui_State = struct('gui_Name', mfilename, ... + 'gui_Singleton', gui_Singleton, ... + 'gui_OpeningFcn', @untitled_OpeningFcn, ... + 'gui_OutputFcn', @untitled_OutputFcn, ... + 'gui_LayoutFcn', [] , ... + 'gui_Callback', []); +if nargin && ischar(varargin{1}) + gui_State.gui_Callback = str2func(varargin{1}); +end + +if nargout + [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); +else + gui_mainfcn(gui_State, varargin{:}); +end +% End initialization code - DO NOT EDIT + + +% --- Executes just before untitled is made visible. +function untitled_OpeningFcn(hObject, eventdata, handles, varargin) +% This function has no output args, see OutputFcn. +% hObject handle to figure +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) +% varargin command line arguments to untitled (see VARARGIN) + +handles.timer = timer(... + 'ExecutionMode', 'fixedRate', ... % Run timer repeatedly + 'Period', 0.0165, ... % 60fps. + 'TimerFcn', {@updateplot,hObject}); % Specify callback +start(handles.timer); + +global offset +global o_offset +global frac2disp + +frac2disp = 0.1; +offset = 0; +o_offset = 0; + +% Choose default command line output for untitled +handles.output = hObject; +% Update handles structure +guidata(hObject, handles); + +% UIWAIT makes untitled wait for user response (see UIRESUME) +% uiwait(handles.figure1); + +function updateplot(hObject, eventdata, hfigure) +%fprintf('updateplot running!!\n') + +global offset +global o_offset +global frac2disp + +handles = guidata(hfigure); +scaler = 10; + +offset = offset + o_offset; +x = [offset : 0.01 : (offset + 2*pi*frac2disp)]; +y = sin(x); +xrange = (x-offset-pi*frac2disp)*scaler; +plot(handles.axes1,xrange,y); +axis(handles.axes1,[-pi*scaler*frac2disp, pi*scaler*frac2disp, -1, 1]); +drawnow + + +% --- Outputs from this function are returned to the command line. +function varargout = untitled_OutputFcn(hObject, eventdata, handles) +% varargout cell array for returning output args (see VARARGOUT); +% hObject handle to figure +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) +% Get default command line output from handles structure +varargout{1} = handles.output; + + +% --- Executes on button press in pushbutton2. +function pushbutton2_Callback(hObject, eventdata, handles) +% hObject handle to pushbutton2 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + + +% --- Executes on button press in pushbutton3. +function pushbutton3_Callback(hObject, eventdata, handles) +% hObject handle to pushbutton3 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + + +% --- Executes on button press in pushbutton4. +function pushbutton4_Callback(hObject, eventdata, handles) +% hObject handle to pushbutton4 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + + +% --- Executes on slider movement. +function slider2_Callback(hObject, eventdata, handles) +global o_offset; +% hObject handle to slider2 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) +o_offset = 0.5*get(hObject,'Value')^0.33; +% Hints: get(hObject,'Value') returns position of slider +% get(hObject,'Min') and get(hObject,'Max') to determine range of slider + +% --- Executes during object creation, after setting all properties. +function slider2_CreateFcn(hObject, eventdata, handles) +% hObject handle to slider2 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: slider controls usually have a light gray background. +if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor',[.9 .9 .9]); +end + + +% --- Executes on selection change in popupmenu1. +function popupmenu1_Callback(hObject, eventdata, handles) +% hObject handle to popupmenu1 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) +contents = cellstr(get(hObject,'String')); +current = contents{get(hObject,'Value')}; +if isequal(current, contents{2}) + stop(handles.timer); +else start(handles.timer); +end + +% Hints: contents = cellstr(get(hObject,'String')) returns popupmenu1 contents as cell array +% contents{get(hObject,'Value')} returns selected item from popupmenu1 + + +% --- Executes during object creation, after setting all properties. +function popupmenu1_CreateFcn(hObject, eventdata, handles) +% hObject handle to popupmenu1 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: popupmenu controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end + + +% --- Executes on slider movement. +function slider4_Callback(hObject, eventdata, handles) +% hObject handle to slider4 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) +global frac2disp +frac2disp = get(hObject,'Value') * 10+0.1; +% Hints: get(hObject,'Value') returns position of slider +% get(hObject,'Min') and get(hObject,'Max') to determine range of slider + + +% --- Executes during object creation, after setting all properties. +function slider4_CreateFcn(hObject, eventdata, handles) +% hObject handle to slider4 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: slider controls usually have a light gray background. +if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor',[.9 .9 .9]); +end + + +% --- Executes on button press in pushbutton5. +function pushbutton5_Callback(hObject, eventdata, handles) +% hObject handle to pushbutton5 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) +timerdata = get(handles.timer); +if isequal(timerdata.Running,'on') + stop(handles.timer); +else + start(handles.timer); +end diff --git a/Old Matlab Interface/HelloWorld.exe b/Old Matlab Interface/HelloWorld.exe new file mode 100644 index 0000000000000000000000000000000000000000..7ac51320b9d104b06b06c75d84b5201fea80e0db GIT binary patch literal 31232 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 literal 0 HcmV?d00001 diff --git a/Old Matlab Interface/ISOLOOPTEST.m b/Old Matlab Interface/ISOLOOPTEST.m new file mode 100644 index 00000000..a93e068e --- /dev/null +++ b/Old Matlab Interface/ISOLOOPTEST.m @@ -0,0 +1,3 @@ +compile +mex_usb_iso_init +mex_usb_iso_loop \ No newline at end of file diff --git a/Old Matlab Interface/MYFIRSTWAVEFORM.txt b/Old Matlab Interface/MYFIRSTWAVEFORM.txt new file mode 100644 index 00000000..b1a4e14a --- /dev/null +++ b/Old Matlab Interface/MYFIRSTWAVEFORM.txt @@ -0,0 +1,11252 @@ +BEGIN PACKET 0 +182 +182 +182 +182 +182 +183 +183 +182 +183 +183 +183 +182 +182 +183 +182 +182 +182 +183 +182 +182 +182 +182 +182 +182 +181 +12 +11 +10 +11 +11 +11 +10 +182 +182 +183 +183 +182 +183 +182 +182 +182 +182 +183 +182 +182 +182 +181 +182 +183 +182 +183 +183 +182 +182 +182 +182 +182 +10 +9 +10 +11 +11 +11 +12 +182 +182 +182 +182 +182 +182 +182 +182 +182 +185 +183 +182 +183 +183 +180 +182 +179 +181 +181 +183 +183 +182 +182 +182 +182 +181 +182 +182 +182 +183 +183 +182 +182 +182 +182 +182 +182 +184 +183 +182 +182 +182 +182 +182 +182 +182 +182 +182 +12 +10 +10 +11 +11 +11 +10 +182 +182 +182 +182 +183 +182 +183 +182 +182 +183 +182 +182 +182 +182 +182 +179 +182 +182 +182 +182 +182 +182 +182 +182 +182 +12 +11 +11 +11 +11 +10 +11 +182 +182 +182 +181 +182 +182 +180 +182 +182 +183 +182 +183 +182 +182 +182 +182 +182 +182 +182 +182 +183 +182 +182 +182 +183 +13 +11 +10 +11 +11 +11 +11 +182 +182 +182 +182 +182 +182 +182 +183 +181 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +183 +182 +182 +182 +182 +12 +11 +11 +11 +11 +10 +10 +182 +182 +182 +182 +182 +182 +182 +184 +183 +182 +183 +183 +182 +182 +182 +182 +182 +182 +182 +183 +182 +182 +181 +182 +182 +11 +11 +11 +11 +11 +10 +11 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +183 +182 +182 +182 +182 +181 +182 +183 +182 +182 +182 +11 +11 +11 +11 +10 +11 +11 +183 +182 +182 +183 +182 +183 +182 +176 +182 +183 +182 +182 +183 +182 +182 +182 +182 +182 +182 +183 +182 +182 +183 +182 +182 +12 +11 +11 +11 +11 +10 +11 +182 +183 +182 +182 +183 +182 +182 +182 +182 +184 +182 +182 +182 +182 +184 +183 +182 +183 +182 +184 +182 +182 +182 +182 +185 +12 +11 +11 +11 +13 +10 +11 +182 +182 +180 +182 +182 +182 +182 +180 +182 +182 +183 +180 +179 +182 +182 +182 +182 +181 +182 +182 +182 +182 +182 +182 +182 +12 +11 +11 +11 +11 +10 +10 +183 +182 +12 +8 +11 +11 +11 +11 +11 +182 +182 +182 +182 +182 +182 +182 +183 +183 +183 +182 +182 +182 +184 +183 +182 +182 +182 +181 +183 +182 +182 +182 +183 +182 +12 +11 +11 +6 +11 +11 +11 +182 +181 +182 +182 +183 +182 +183 +182 +182 +182 +182 +181 +182 +182 +182 +183 +181 +182 +182 +183 +182 +183 +182 +182 +182 +12 +11 +10 +9 +11 +10 +10 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +183 +181 +183 +182 +183 +183 +13 +11 +11 +11 +10 +11 +11 +182 +182 +182 +182 +182 +182 +182 +182 +183 +182 +182 +183 +182 +183 +182 +183 +183 +182 +180 +182 +182 +182 +182 +183 +182 +12 +10 +10 +11 +11 +11 +10 +182 +182 +182 +182 +183 +183 +182 +182 +182 +181 +182 +182 +183 +182 +183 +183 +182 +182 +184 +182 +183 +183 +181 +182 +182 +12 +10 +10 +10 +11 +10 +10 +181 +182 +182 +182 +172 +182 +183 +182 +182 +182 +182 +182 +185 +182 +182 +183 +182 +182 +182 +183 +182 +182 +182 +182 +182 +12 +11 +11 +11 +12 +10 +10 +182 +182 +182 +182 +182 +182 +182 +183 +181 +182 +182 +182 +182 +182 +182 +183 +182 +183 +182 +183 +183 +183 +182 +182 +182 +12 +11 +10 +12 +11 +10 +11 +182 +182 +183 +182 +183 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +183 +183 +182 +183 +182 +183 +182 +182 +182 +12 +11 +11 +12 +10 +11 +11 +182 +182 +183 +182 +182 +182 +182 +183 +182 +183 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +12 +11 +11 +11 +10 +10 +10 +183 +182 +182 +182 +182 +182 +182 +183 +182 +182 +183 +182 +182 +182 +182 +182 +180 +183 +182 +182 +182 +188 +183 +182 +182 +12 +12 +11 +11 +11 +11 +8 +182 +182 +182 +182 +183 +182 +182 +182 +182 +183 +183 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +183 +179 +183 +12 +11 +11 +10 +10 +10 +10 +182 +182 +182 +182 +183 +183 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +183 +182 +183 +183 +182 +182 +181 +182 +182 +182 +183 +183 +182 +182 +184 +183 +184 +11 +11 +9 +9 +9 +12 +11 +182 +183 +183 +180 +182 +182 +183 +181 +183 +182 +181 +182 +183 +183 +182 +181 +182 +182 +181 +181 +182 +182 +183 +183 +182 +12 +11 +10 +11 +10 +10 +5 +183 +183 +184 +181 +183 +182 +181 +182 +181 +182 +183 +183 +183 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +181 +183 +11 +11 +10 +11 +12 +11 +9 +180 +181 +180 +183 +183 +182 +182 +183 +183 +182 +182 +181 +182 +181 +182 +182 +12 +10 +11 +11 +11 +11 +11 +182 +182 +182 +183 +182 +182 +182 +182 +182 +182 +183 +183 +182 +183 +182 +182 +181 +182 +182 +182 +182 +182 +182 +181 +183 +11 +10 +11 +11 +10 +9 +10 +183 +183 +183 +183 +182 +182 +182 +182 +181 +182 +182 +182 +182 +183 +181 +183 +182 +182 +182 +182 +182 +182 +181 +182 +182 +12 +10 +11 +10 +11 +11 +10 +182 +182 +181 +182 +182 +182 +183 +182 +182 +182 +182 +182 +182 +181 +182 +182 +182 +182 +182 +182 +182 +182 +183 +182 +182 +12 +11 +11 +11 +10 +11 +11 +182 +182 +183 +182 +183 +182 +183 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +181 +183 +180 +183 +182 +182 +183 +182 +11 +11 +10 +11 +11 +11 +11 +182 +182 +182 +182 +182 +182 +183 +182 +183 +182 +182 +182 +182 +181 +182 +182 +182 +182 +182 +182 +183 +182 +182 +182 +182 +12 +10 +10 +11 +11 +11 +10 +182 +182 +183 +181 +183 +182 +183 +182 +184 +182 +182 +183 +183 +180 +182 +182 +182 +183 +182 +182 +182 +183 +182 +186 +182 +12 +12 +10 +12 +11 +11 +11 +182 +188 +181 +183 +182 +182 +179 +182 +183 +183 +182 +189 +182 +182 +182 +182 +181 +182 +183 +182 +183 +183 +181 +180 +182 +10 +9 +10 +11 +11 +11 +9 +182 +181 +181 +183 +181 +183 +183 +182 +183 +181 +182 +182 +181 +182 +183 +183 +184 +182 +182 +182 +181 +182 +181 +182 +182 +12 +11 +11 +10 +10 +10 +10 +182 +183 +183 +180 +182 +182 +180 +181 +182 +182 +183 +183 +182 +182 +183 +183 +183 +183 +182 +182 +182 +182 +181 +181 +183 +181 +182 +181 +183 +182 +183 +182 +182 +182 +11 +10 +11 +11 +11 +10 +11 +182 +184 +183 +184 +182 +183 +181 +183 +183 +180 +182 +181 +182 +182 +182 +182 +180 +180 +182 +181 +182 +181 +182 +183 +184 +13 +11 +10 +10 +10 +10 +10 +181 +183 +182 +186 +184 +183 +181 +183 +182 +182 +182 +182 +182 +182 +183 +179 +182 +182 +183 +182 +182 +182 +182 +183 +182 +10 +10 +11 +11 +183 +182 +182 +182 +180 +181 +183 +182 +182 +183 +182 +182 +182 +181 +182 +185 +183 +183 +182 +12 +10 +10 +10 +9 +11 +11 +183 +183 +182 +183 +182 +182 +180 +182 +182 +183 +182 +180 +182 +181 +181 +184 +182 +183 +183 +181 +182 +183 +181 +184 +183 +12 +14 +10 +12 +9 +9 +11 +183 +183 +183 +181 +183 +181 +181 +183 +182 +183 +183 +181 +181 +181 +182 +182 +183 +183 +182 +182 +182 +182 +183 +181 +182 +12 +12 +12 +12 +11 +11 +10 +181 +182 +183 +183 +184 +182 +182 +181 +182 +181 +183 +183 +182 +182 +178 +182 +183 +182 +180 +181 +181 +182 +183 +182 +184 +13 +9 +10 +10 +13 +12 +12 +182 +182 +183 +182 +183 +182 +181 +183 +182 +182 +183 +182 +183 +182 +182 +183 +183 +182 +181 +182 +181 +182 +182 +185 +183 +14 +10 +11 +9 +9 +10 +10 +183 +183 +183 +183 +182 +183 +182 +182 +183 +182 +182 +181 +181 +182 +183 +182 +182 +182 +182 +183 +181 +182 +183 +183 +181 +12 +11 +10 +11 +11 +10 +10 +183 +182 +181 +183 +182 +183 +183 +183 +183 +184 +182 +182 +182 +182 +182 +181 +183 +183 +182 +183 +182 +183 +182 +182 +182 +13 +10 +11 +11 +11 +11 +10 +182 +182 +182 +183 +184 +183 +184 +182 +185 +183 +182 +182 +181 +182 +181 +182 +183 +182 +181 +182 +183 +183 +183 +182 +182 +11 +11 +11 +10 +8 +8 +10 +182 +182 +183 +183 +183 +182 +182 +182 +182 +182 +182 +181 +182 +185 +182 +182 +182 +182 +182 +182 +184 +182 +182 +182 +182 +13 +10 +11 +12 +10 +10 +11 +181 +182 +182 +183 +183 +11 +12 +10 +11 +183 +182 +182 +182 +182 +183 +183 +183 +183 +182 +182 +183 +183 +182 +182 +182 +181 +181 +182 +182 +181 +184 +182 +182 +182 +12 +11 +11 +11 +11 +11 +10 +182 +181 +182 +184 +183 +182 +181 +182 +183 +183 +183 +184 +182 +182 +182 +182 +182 +183 +182 +183 +183 +183 +182 +182 +183 +13 +11 +11 +11 +10 +10 +11 +183 +182 +181 +182 +182 +181 +182 +182 +182 +182 +183 +183 +183 +182 +182 +182 +183 +183 +181 +182 +181 +11 +10 +180 +181 +182 +181 +183 +182 +182 +182 +182 +183 +182 +182 +182 +181 +182 +182 +180 +180 +182 +181 +182 +182 +183 +182 +182 +12 +10 +11 +10 +10 +11 +11 +182 +183 +183 +182 +183 +181 +183 +182 +181 +182 +181 +181 +183 +182 +182 +182 +182 +182 +182 +183 +183 +183 +182 +183 +181 +10 +11 +9 +11 +10 +10 +10 +183 +182 +182 +183 +183 +182 +182 +181 +182 +183 +182 +182 +181 +183 +182 +181 +182 +182 +182 +182 +183 +185 +184 +183 +184 +9 +11 +9 +10 +10 +11 +10 +182 +182 +182 +182 +183 +182 +183 +182 +182 +183 +184 +182 +182 +183 +181 +181 +182 +181 +181 +182 +182 +183 +182 +182 +182 +12 +10 +7 +10 +8 +10 +10 +181 +181 +182 +182 +180 +183 +183 +183 +183 +182 +182 +182 +181 +180 +182 +182 +182 +184 +182 +183 +182 +183 +182 +183 +183 +12 +11 +7 +9 +10 +10 +8 +181 +182 +182 +183 +184 +186 +182 +181 +179 +182 +186 +182 +182 +183 +182 +186 +182 +182 +182 +182 +185 +181 +182 +183 +184 +12 +11 +12 +10 +10 +9 +11 +182 +182 +181 +181 +181 +182 +181 +182 +182 +182 +184 +183 +182 +182 +183 +182 +182 +182 +178 +183 +181 +182 +182 +182 +182 +12 +11 +11 +11 +11 +10 +11 +182 +183 +181 +183 +182 +182 +181 +181 +183 +181 +183 +182 +183 +183 +182 +182 +182 +182 +184 +183 +183 +182 +182 +182 +181 +12 +10 +11 +11 +11 +12 +10 +183 +182 +182 +182 +182 +182 +182 +182 +185 +183 +181 +182 +182 +182 +181 +182 +183 +184 +183 +184 +182 +183 +182 +182 +182 +11 +10 +10 +186 +182 +182 +183 +182 +182 +12 +10 +10 +11 +11 +11 +11 +182 +181 +181 +183 +184 +182 +182 +183 +182 +183 +183 +178 +182 +181 +182 +182 +186 +183 +184 +182 +182 +182 +186 +182 +182 +11 +12 +12 +10 +10 +10 +11 +183 +184 +182 +181 +183 +182 +183 +183 +182 +181 +181 +183 +182 +181 +182 +183 +183 +182 +180 +182 +182 +182 +183 +181 +182 +11 +10 +11 +11 +11 +8 +10 +182 +182 +183 +183 +182 +181 +183 +183 +182 +182 +182 +181 +182 +184 +183 +182 +11 +10 +11 +11 +12 +11 +11 +182 +181 +183 +182 +183 +181 +182 +182 +181 +183 +184 +181 +182 +182 +180 +182 +183 +183 +183 +181 +183 +182 +182 +181 +183 +11 +11 +12 +12 +10 +9 +10 +181 +183 +183 +181 +180 +182 +182 +184 +183 +182 +182 +182 +183 +183 +182 +181 +182 +182 +181 +181 +182 +183 +184 +182 +185 +11 +10 +10 +11 +11 +10 +11 +182 +182 +182 +182 +182 +183 +182 +182 +182 +184 +182 +183 +182 +181 +183 +182 +182 +183 +186 +181 +182 +181 +182 +183 +181 +11 +9 +12 +11 +11 +11 +7 +182 +182 +181 +183 +181 +181 +182 +183 +182 +180 +183 +182 +183 +183 +182 +182 +182 +182 +182 +183 +182 +183 +182 +182 +182 +10 +10 +11 +12 +11 +11 +11 +182 +181 +183 +182 +182 +181 +181 +182 +183 +183 +183 +183 +182 +182 +182 +183 +183 +181 +182 +182 +182 +183 +182 +181 +183 +11 +11 +11 +9 +11 +9 +11 +182 +181 +182 +182 +182 +182 +182 +183 +181 +183 +183 +182 +183 +181 +182 +182 +183 +183 +182 +183 +181 +184 +183 +184 +182 +11 +11 +11 +11 +12 +11 +11 +181 +182 +182 +182 +182 +183 +183 +182 +182 +183 +181 +181 +183 +182 +182 +182 +182 +181 +183 +180 +180 +182 +182 +183 +182 +13 +10 +11 +11 +10 +11 +9 +183 +182 +181 +183 +182 +183 +182 +181 +182 +182 +184 +183 +182 +182 +182 +182 +183 +183 +182 +182 +181 +183 +183 +184 +182 +12 +10 +11 +12 +11 +11 +10 +182 +182 +182 +182 +183 +183 +182 +182 +182 +182 +180 +182 +182 +183 +182 +182 +182 +183 +183 +181 +182 +183 +184 +182 +183 +182 +181 +183 +184 +182 +182 +182 +181 +183 +13 +9 +8 +11 +11 +11 +11 +184 +184 +182 +183 +183 +182 +182 +182 +183 +183 +182 +182 +181 +184 +182 +182 +181 +182 +182 +183 +184 +182 +182 +182 +182 +12 +11 +11 +9 +10 +10 +11 +183 +183 +182 +181 +183 +183 +182 +182 +182 +183 +182 +181 +183 +182 +182 +182 +183 +182 +182 +182 +183 +181 +182 +182 +182 +12 +10 +10 +10 +12 +10 +12 +182 +181 +182 +179 +181 +182 +181 +182 +181 +183 +182 +184 +183 +184 +181 +177 +12 +11 +11 +10 +11 +11 +11 +182 +182 +182 +183 +182 +182 +183 +182 +182 +182 +183 +182 +182 +182 +182 +182 +183 +182 +184 +182 +182 +182 +182 +182 +182 +11 +10 +11 +11 +15 +10 +10 +182 +182 +183 +183 +183 +181 +182 +182 +183 +182 +180 +180 +182 +183 +183 +183 +183 +181 +183 +182 +182 +181 +182 +185 +182 +12 +10 +11 +11 +10 +10 +9 +181 +183 +182 +182 +182 +183 +182 +183 +183 +183 +181 +181 +182 +182 +183 +182 +182 +182 +182 +183 +182 +181 +183 +183 +182 +12 +11 +10 +15 +11 +12 +11 +182 +182 +183 +180 +181 +182 +183 +183 +182 +182 +181 +182 +183 +184 +182 +183 +181 +182 +182 +183 +183 +183 +185 +182 +183 +12 +9 +11 +11 +11 +11 +9 +181 +183 +182 +183 +182 +182 +182 +184 +182 +184 +182 +181 +182 +182 +181 +182 +182 +182 +184 +182 +183 +182 +182 +182 +181 +12 +11 +10 +10 +11 +12 +11 +183 +180 +184 +184 +180 +182 +182 +183 +182 +181 +182 +183 +183 +182 +182 +181 +183 +183 +184 +182 +181 +183 +182 +183 +183 +11 +9 +11 +11 +11 +10 +9 +182 +183 +183 +182 +182 +182 +182 +182 +183 +182 +180 +182 +182 +183 +183 +182 +181 +182 +182 +183 +182 +183 +182 +182 +182 +10 +10 +11 +12 +11 +10 +10 +182 +183 +185 +182 +182 +181 +181 +182 +183 +181 +181 +182 +183 +182 +183 +182 +182 +183 +182 +180 +182 +182 +182 +182 +182 +11 +11 +9 +11 +11 +11 +10 +182 +184 +184 +182 +183 +182 +182 +182 +182 +182 +184 +181 +182 +182 +182 +182 +182 +180 +183 +182 +183 +183 +181 +182 +182 +183 +183 +184 +182 +182 +183 +182 +182 +181 +12 +11 +11 +12 +11 +10 +10 +183 +183 +181 +180 +182 +184 +182 +182 +182 +182 +182 +182 +182 +181 +182 +183 +183 +179 +181 +182 +182 +182 +182 +182 +181 +11 +11 +11 +11 +9 +10 +11 +184 +185 +182 +182 +183 +183 +182 +183 +183 +183 +182 +182 +181 +181 +181 +182 +182 +182 +179 +182 +183 +181 +182 +183 +181 +183 +183 +183 +182 +182 +183 +182 +182 +181 +181 +183 +181 +181 +180 +184 +181 +180 +182 +183 +185 +181 +182 +182 +14 +12 +12 +10 +11 +11 +11 +182 +183 +182 +183 +182 +183 +184 +182 +181 +181 +182 +184 +183 +182 +181 +182 +184 +183 +183 +182 +179 +182 +182 +182 +181 +10 +12 +11 +10 +10 +10 +8 +182 +183 +182 +181 +182 +181 +181 +182 +182 +184 +183 +181 +182 +181 +183 +182 +180 +182 +183 +183 +182 +182 +181 +182 +183 +12 +10 +9 +11 +10 +11 +11 +181 +181 +183 +184 +182 +182 +182 +182 +183 +182 +182 +182 +182 +182 +182 +183 +184 +182 +181 +182 +181 +182 +182 +180 +180 +12 +11 +11 +10 +10 +11 +10 +182 +183 +182 +182 +182 +182 +183 +183 +182 +182 +181 +184 +184 +183 +183 +181 +181 +182 +183 +182 +183 +182 +182 +182 +182 +10 +10 +11 +11 +11 +10 +11 +182 +182 +184 +183 +183 +181 +182 +181 +182 +183 +181 +182 +181 +183 +182 +182 +183 +182 +182 +183 +182 +183 +183 +182 +181 +12 +11 +13 +11 +12 +10 +9 +182 +181 +182 +182 +181 +182 +182 +182 +182 +182 +182 +177 +184 +182 +181 +183 +182 +183 +183 +181 +181 +183 +182 +183 +181 +12 +11 +11 +11 +9 +11 +11 +182 +182 +182 +182 +182 +183 +182 +182 +182 +182 +182 +183 +183 +183 +185 +182 +182 +182 +183 +183 +183 +183 +183 +182 +181 +11 +10 +11 +11 +12 +10 +10 +182 +184 +183 +182 +182 +182 +183 +182 +182 +182 +181 +182 +182 +181 +182 +183 +182 +182 +182 +182 +182 +183 +183 +182 +182 +11 +12 +11 +10 +10 +10 +11 +182 +183 +13 +11 +11 +10 +10 +12 +12 +182 +184 +182 +181 +182 +182 +182 +182 +181 +184 +184 +182 +184 +182 +183 +183 +183 +182 +182 +183 +181 +182 +182 +181 +183 +11 +9 +11 +11 +10 +11 +10 +182 +183 +182 +182 +181 +181 +183 +183 +182 +182 +181 +182 +183 +183 +182 +181 +182 +183 +184 +182 +182 +183 +182 +182 +183 +12 +11 +12 +10 +11 +7 +10 +182 +181 +182 +180 +182 +183 +181 +181 +183 +183 +181 +182 +182 +182 +181 +182 +12 +11 +10 +9 +10 +10 +12 +181 +182 +181 +182 +183 +181 +182 +182 +183 +182 +181 +182 +183 +183 +185 +181 +182 +182 +183 +183 +182 +182 +183 +182 +182 +11 +10 +10 +12 +10 +11 +11 +183 +182 +184 +185 +181 +181 +182 +183 +181 +181 +182 +182 +181 +182 +183 +182 +181 +183 +182 +181 +180 +181 +182 +183 +180 +12 +11 +9 +9 +11 +12 +10 +181 +183 +182 +182 +183 +183 +182 +182 +182 +183 +181 +182 +182 +183 +181 +183 +187 +183 +182 +182 +182 +183 +184 +182 +184 +11 +10 +11 +12 +11 +11 +10 +182 +182 +182 +182 +183 +182 +183 +182 +180 +183 +183 +182 +181 +182 +182 +184 +182 +184 +182 +181 +182 +182 +182 +182 +181 +12 +12 +12 +11 +11 +11 +11 +181 +183 +183 +183 +182 +181 +182 +182 +183 +183 +182 +182 +183 +183 +181 +181 +182 +182 +183 +181 +181 +182 +182 +182 +181 +12 +10 +11 +10 +11 +11 +10 +182 +181 +182 +182 +182 +182 +183 +184 +182 +182 +182 +182 +182 +182 +182 +182 +181 +183 +183 +181 +181 +182 +183 +182 +181 +12 +9 +11 +12 +10 +10 +8 +182 +183 +183 +183 +181 +183 +182 +182 +182 +183 +184 +183 +182 +182 +183 +183 +182 +183 +182 +182 +182 +182 +183 +182 +181 +12 +11 +11 +11 +11 +11 +10 +182 +182 +181 +181 +183 +177 +181 +182 +181 +184 +182 +182 +181 +183 +183 +184 +184 +181 +181 +182 +182 +182 +182 +182 +184 +11 +10 +10 +10 +11 +15 +10 +182 +183 +183 +182 +182 +183 +182 +183 +182 +181 +183 +181 +182 +183 +182 +182 +182 +182 +180 +183 +183 +181 +180 +182 +182 +183 +181 +182 +182 +183 +184 +182 +181 +182 +11 +12 +11 +11 +10 +11 +12 +183 +181 +181 +182 +182 +182 +182 +182 +182 +182 +182 +184 +182 +181 +182 +182 +182 +183 +181 +182 +183 +186 +183 +182 +182 +11 +11 +11 +10 +10 +11 +11 +181 +183 +183 +182 +182 +182 +182 +182 +183 +181 +180 +183 +182 +184 +182 +182 +181 +182 +183 +181 +183 +182 +183 +180 +183 +12 +10 +10 +11 +12 +10 +10 +181 +182 +183 +184 +183 +181 +182 +183 +182 +181 +182 +182 +181 +182 +179 +180 +12 +11 +11 +10 +11 +10 +13 +182 +181 +181 +181 +181 +182 +182 +182 +182 +182 +183 +181 +182 +182 +179 +182 +182 +183 +184 +180 +181 +182 +183 +182 +184 +11 +10 +10 +10 +10 +10 +10 +182 +182 +182 +182 +182 +183 +182 +180 +182 +183 +182 +181 +181 +181 +181 +183 +183 +181 +182 +182 +182 +181 +181 +182 +181 +10 +10 +10 +9 +11 +10 +10 +182 +182 +182 +181 +183 +184 +182 +182 +184 +183 +182 +180 +182 +182 +182 +183 +184 +182 +181 +183 +185 +183 +183 +182 +184 +12 +10 +11 +11 +11 +11 +11 +181 +182 +183 +182 +183 +182 +183 +181 +183 +182 +183 +182 +182 +182 +182 +182 +181 +182 +183 +183 +183 +182 +181 +182 +181 +13 +12 +8 +10 +10 +11 +10 +183 +184 +182 +183 +182 +182 +183 +183 +182 +182 +181 +181 +183 +183 +182 +181 +182 +182 +183 +183 +182 +182 +183 +182 +182 +12 +11 +11 +11 +10 +11 +10 +181 +182 +182 +181 +182 +186 +183 +183 +181 +181 +183 +183 +182 +182 +182 +181 +182 +182 +182 +183 +184 +183 +182 +177 +181 +13 +11 +10 +10 +10 +11 +11 +182 +182 +181 +182 +183 +182 +183 +182 +182 +182 +182 +180 +182 +182 +182 +181 +183 +182 +183 +184 +182 +179 +182 +182 +185 +11 +12 +10 +11 +10 +11 +10 +182 +181 +182 +182 +182 +182 +183 +183 +182 +182 +183 +182 +183 +183 +182 +181 +183 +183 +182 +180 +182 +183 +182 +183 +182 +13 +11 +10 +11 +10 +11 +11 +181 +181 +183 +184 +182 +182 +183 +183 +184 +183 +182 +182 +182 +182 +182 +182 +182 +181 +183 +182 +182 +182 +182 +182 +181 +182 +182 +182 +182 +184 +182 +183 +181 +182 +12 +12 +10 +10 +10 +10 +12 +182 +183 +183 +184 +185 +182 +182 +182 +179 +182 +182 +181 +182 +181 +182 +182 +184 +182 +184 +181 +181 +182 +181 +182 +184 +12 +10 +11 +11 +11 +11 +11 +182 +182 +182 +183 +181 +181 +183 +183 +181 +182 +182 +182 +182 +182 +176 +181 +182 +182 +184 +182 +182 +181 +182 +182 +182 +11 +9 +10 +181 +182 +183 +182 +183 +181 +182 +183 +182 +182 +183 +183 +188 +183 +182 +181 +183 +186 +182 +183 +12 +11 +12 +10 +11 +10 +11 +182 +180 +183 +183 +182 +182 +183 +182 +182 +183 +182 +183 +185 +183 +184 +183 +181 +182 +183 +181 +181 +183 +181 +181 +180 +12 +10 +11 +11 +10 +10 +10 +182 +182 +181 +181 +182 +182 +183 +183 +182 +182 +182 +182 +184 +182 +182 +181 +180 +183 +182 +180 +182 +181 +181 +182 +182 +12 +11 +10 +11 +10 +12 +11 +182 +181 +182 +183 +182 +182 +182 +181 +182 +182 +183 +183 +182 +182 +183 +182 +181 +182 +181 +183 +183 +184 +182 +183 +183 +11 +10 +10 +10 +11 +10 +10 +182 +182 +182 +182 +182 +182 +182 +183 +183 +182 +182 +182 +185 +183 +179 +183 +182 +181 +182 +183 +184 +182 +182 +182 +181 +13 +12 +10 +11 +11 +11 +10 +181 +183 +181 +183 +183 +182 +181 +181 +183 +182 +183 +181 +181 +183 +183 +183 +183 +185 +183 +183 +182 +182 +182 +182 +182 +13 +12 +10 +10 +10 +11 +11 +182 +183 +181 +181 +183 +183 +181 +181 +183 +182 +183 +182 +182 +179 +182 +183 +184 +181 +181 +182 +182 +183 +183 +182 +181 +12 +11 +10 +10 +10 +11 +10 +182 +182 +182 +183 +182 +182 +182 +181 +182 +183 +180 +182 +183 +182 +183 +181 +179 +180 +183 +183 +184 +182 +182 +183 +182 +12 +11 +11 +10 +11 +11 +11 +182 +181 +182 +182 +183 +185 +182 +182 +183 +183 +183 +183 +185 +182 +182 +183 +182 +182 +184 +182 +182 +182 +182 +183 +183 +12 +12 +10 +11 +10 +11 +12 +181 +181 +182 +182 +182 +182 +10 +10 +9 +182 +183 +181 +180 +182 +182 +183 +182 +182 +181 +183 +182 +185 +182 +184 +182 +182 +178 +183 +182 +182 +182 +184 +185 +182 +12 +10 +9 +11 +12 +11 +10 +182 +182 +182 +180 +182 +182 +182 +182 +183 +182 +182 +182 +182 +182 +182 +183 +182 +182 +183 +182 +182 +181 +183 +182 +183 +12 +10 +10 +10 +11 +10 +11 +183 +180 +183 +182 +182 +183 +185 +181 +181 +182 +184 +182 +183 +182 +182 +183 +181 +182 +10 +10 +12 +10 +10 +181 +181 +183 +183 +182 +181 +182 +182 +183 +183 +180 +180 +182 +182 +182 +181 +182 +181 +181 +181 +181 +182 +183 +182 +182 +11 +10 +10 +10 +10 +10 +11 +181 +181 +182 +182 +182 +181 +182 +179 +181 +181 +183 +183 +182 +179 +182 +183 +183 +181 +180 +181 +181 +182 +183 +181 +181 +11 +11 +10 +10 +10 +10 +12 +182 +181 +182 +181 +182 +181 +182 +182 +182 +182 +183 +183 +182 +181 +182 +181 +182 +184 +185 +182 +179 +182 +182 +183 +182 +12 +10 +13 +12 +13 +10 +8 +186 +182 +182 +183 +182 +178 +182 +182 +181 +183 +184 +182 +181 +182 +183 +183 +182 +182 +182 +183 +183 +182 +182 +183 +182 +11 +11 +10 +10 +10 +10 +10 +182 +183 +181 +182 +181 +182 +183 +182 +182 +183 +184 +182 +183 +182 +181 +183 +184 +181 +181 +182 +182 +182 +181 +182 +181 +12 +11 +11 +10 +10 +12 +12 +181 +181 +182 +182 +184 +182 +182 +182 +182 +181 +182 +182 +182 +181 +182 +183 +183 +182 +182 +181 +184 +182 +182 +182 +181 +11 +11 +12 +11 +11 +10 +9 +182 +184 +182 +181 +182 +183 +183 +181 +182 +182 +184 +182 +183 +182 +182 +183 +183 +181 +180 +182 +182 +182 +182 +181 +182 +12 +10 +10 +12 +12 +11 +11 +182 +181 +182 +183 +183 +182 +182 +184 +184 +182 +183 +182 +182 +183 +184 +181 +181 +182 +182 +182 +181 +182 +180 +183 +183 +12 +10 +9 +10 +10 +11 +10 +182 +182 +182 +182 +182 +182 +183 +181 +182 +181 +182 +183 +181 +182 +182 +183 +179 +182 +181 +182 +182 +182 +181 +183 +182 +11 +11 +10 +10 +182 +182 +182 +183 +183 +12 +11 +10 +9 +12 +11 +9 +181 +181 +183 +183 +184 +181 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +184 +183 +183 +181 +181 +182 +182 +12 +11 +11 +10 +10 +12 +11 +183 +182 +182 +182 +182 +182 +182 +182 +183 +180 +182 +182 +184 +182 +183 +182 +181 +183 +183 +186 +182 +182 +181 +182 +185 +11 +10 +12 +10 +10 +10 +10 +182 +181 +182 +182 +182 +182 +181 +182 +183 +182 +183 +182 +181 +183 +181 +181 +12 +11 +12 +10 +11 +10 +9 +184 +183 +183 +182 +183 +182 +183 +182 +181 +182 +183 +182 +182 +182 +182 +183 +182 +182 +182 +182 +183 +182 +182 +183 +182 +11 +11 +12 +9 +8 +8 +11 +183 +181 +182 +182 +183 +182 +180 +180 +181 +182 +183 +183 +181 +182 +182 +184 +182 +182 +182 +182 +183 +183 +182 +181 +182 +11 +11 +10 +10 +11 +12 +10 +174 +182 +182 +181 +184 +181 +181 +182 +182 +181 +179 +183 +182 +182 +182 +183 +183 +181 +183 +184 +182 +182 +182 +181 +182 +11 +10 +10 +8 +11 +11 +10 +181 +182 +183 +182 +184 +181 +181 +183 +184 +181 +182 +183 +182 +182 +182 +182 +182 +182 +182 +183 +182 +182 +183 +182 +182 +12 +8 +10 +12 +11 +10 +9 +182 +182 +184 +182 +182 +183 +182 +181 +182 +182 +181 +182 +181 +185 +182 +182 +182 +186 +183 +183 +182 +181 +180 +183 +182 +12 +9 +8 +11 +11 +11 +11 +182 +182 +182 +183 +182 +182 +179 +182 +183 +182 +182 +182 +183 +183 +182 +183 +182 +181 +183 +182 +183 +182 +183 +182 +182 +12 +11 +12 +12 +10 +9 +11 +182 +180 +183 +182 +181 +182 +183 +181 +180 +182 +182 +183 +182 +182 +182 +183 +184 +182 +182 +184 +182 +180 +183 +183 +183 +11 +10 +11 +11 +10 +10 +11 +184 +181 +181 +182 +182 +182 +182 +181 +181 +182 +183 +182 +182 +181 +182 +183 +185 +182 +182 +182 +182 +183 +183 +182 +182 +12 +11 +11 +11 +10 +11 +11 +182 +181 +182 +183 +184 +182 +181 +182 +183 +182 +183 +182 +182 +183 +183 +182 +181 +181 +183 +182 +182 +181 +182 +183 +184 +182 +180 +182 +182 +182 +181 +182 +183 +184 +11 +11 +11 +11 +11 +11 +10 +182 +182 +182 +181 +182 +182 +184 +181 +182 +182 +183 +181 +182 +183 +181 +182 +183 +185 +181 +182 +182 +183 +182 +183 +182 +11 +11 +12 +11 +10 +11 +12 +182 +182 +182 +182 +182 +182 +180 +182 +183 +183 +181 +182 +182 +184 +181 +182 +181 +182 +182 +183 +182 +182 +181 +181 +183 +13 +10 +11 +7 +10 +13 +183 +183 +182 +180 +182 +181 +184 +183 +182 +180 +182 +182 +182 +183 +182 +181 +183 +13 +12 +10 +10 +10 +11 +10 +182 +182 +181 +181 +183 +183 +181 +182 +181 +183 +182 +182 +182 +183 +182 +182 +183 +183 +182 +182 +183 +181 +182 +180 +184 +12 +10 +9 +11 +11 +11 +11 +181 +182 +182 +182 +182 +182 +181 +183 +184 +183 +182 +182 +180 +183 +183 +183 +182 +182 +183 +183 +182 +183 +182 +182 +181 +12 +11 +11 +10 +10 +10 +11 +182 +181 +182 +181 +182 +183 +182 +181 +181 +183 +183 +182 +181 +181 +182 +182 +181 +182 +182 +182 +182 +183 +183 +180 +182 +13 +9 +10 +10 +10 +10 +11 +182 +182 +179 +182 +183 +182 +182 +182 +183 +182 +183 +181 +182 +182 +181 +183 +182 +182 +183 +182 +181 +182 +183 +183 +182 +10 +10 +10 +11 +11 +10 +11 +182 +183 +183 +182 +182 +182 +182 +181 +184 +183 +182 +182 +181 +182 +183 +182 +183 +181 +182 +182 +183 +182 +182 +182 +182 +12 +11 +10 +10 +11 +10 +12 +182 +183 +183 +183 +184 +182 +182 +182 +182 +179 +183 +183 +182 +183 +182 +182 +182 +183 +182 +183 +182 +181 +182 +182 +183 +10 +8 +10 +11 +11 +10 +11 +181 +182 +183 +182 +182 +182 +183 +182 +182 +181 +183 +182 +183 +182 +180 +183 +182 +182 +182 +183 +181 +183 +182 +180 +181 +11 +11 +9 +10 +11 +11 +12 +181 +181 +179 +183 +182 +182 +182 +182 +185 +182 +181 +182 +181 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +181 +12 +11 +11 +9 +12 +11 +10 +182 +182 +182 +182 +182 +182 +180 +183 +182 +183 +181 +184 +182 +182 +182 +183 +184 +182 +181 +183 +183 +181 +182 +183 +183 +182 +182 +182 +182 +182 +182 +182 +182 +182 +11 +11 +11 +11 +11 +11 +10 +180 +179 +182 +182 +182 +183 +182 +183 +182 +181 +182 +183 +182 +182 +181 +182 +182 +182 +183 +183 +182 +182 +182 +180 +180 +12 +10 +12 +12 +11 +11 +11 +181 +183 +182 +182 +182 +184 +182 +182 +182 +183 +182 +181 +182 +181 +182 +183 +182 +183 +181 +182 +181 +13 +9 +181 +181 +186 +182 +182 +182 +184 +183 +181 +182 +180 +184 +183 +182 +182 +182 +183 +186 +182 +182 +182 +182 +183 +181 +181 +12 +13 +11 +10 +10 +10 +10 +183 +182 +181 +182 +182 +181 +181 +182 +182 +182 +182 +181 +182 +182 +183 +184 +181 +181 +183 +183 +182 +181 +185 +182 +183 +12 +10 +8 +10 +10 +10 +10 +180 +183 +182 +182 +181 +183 +181 +181 +182 +183 +181 +181 +182 +183 +182 +182 +182 +183 +181 +181 +183 +183 +183 +181 +182 +12 +11 +10 +10 +10 +11 +11 +181 +182 +183 +182 +182 +182 +182 +183 +182 +182 +182 +183 +181 +181 +183 +183 +184 +181 +182 +182 +182 +182 +182 +181 +182 +12 +10 +10 +10 +11 +10 +8 +180 +182 +183 +182 +181 +182 +183 +184 +182 +181 +182 +182 +183 +181 +181 +183 +185 +182 +183 +183 +182 +183 +183 +182 +181 +12 +11 +9 +9 +10 +11 +11 +181 +182 +182 +182 +182 +179 +180 +182 +182 +182 +183 +182 +182 +182 +182 +181 +182 +183 +184 +182 +182 +182 +182 +182 +183 +11 +11 +11 +10 +11 +12 +13 +181 +182 +182 +184 +182 +183 +182 +181 +184 +183 +182 +182 +182 +182 +182 +182 +181 +181 +183 +183 +182 +183 +183 +182 +182 +12 +10 +11 +11 +12 +12 +11 +182 +182 +182 +183 +182 +181 +183 +183 +182 +181 +182 +182 +182 +182 +182 +183 +182 +182 +182 +183 +183 +181 +181 +182 +183 +12 +9 +10 +11 +13 +10 +10 +182 +183 +184 +183 +182 +181 +182 +183 +182 +182 +182 +182 +183 +183 +182 +182 +182 +184 +180 +181 +182 +184 +182 +181 +182 +13 +11 +11 +11 +11 +10 +10 +181 +184 +14 +11 +11 +11 +10 +10 +11 +183 +182 +182 +182 +181 +183 +182 +183 +183 +183 +183 +182 +182 +182 +182 +182 +177 +183 +182 +182 +182 +182 +182 +182 +182 +12 +10 +11 +11 +11 +12 +11 +182 +182 +181 +183 +182 +183 +183 +182 +183 +180 +182 +183 +182 +181 +182 +184 +182 +181 +182 +180 +182 +182 +182 +183 +181 +11 +10 +11 +10 +10 +11 +11 +182 +180 +182 +182 +182 +181 +182 +180 +179 +181 +182 +183 +180 +182 +182 +182 +11 +11 +11 +10 +11 +10 +11 +182 +183 +182 +181 +181 +182 +182 +183 +184 +182 +182 +182 +181 +182 +182 +183 +184 +184 +183 +182 +183 +182 +183 +182 +182 +12 +11 +10 +9 +8 +13 +10 +183 +184 +182 +183 +182 +180 +182 +182 +183 +185 +182 +182 +182 +182 +182 +180 +180 +181 +182 +183 +183 +182 +182 +184 +181 +13 +11 +13 +11 +12 +10 +9 +182 +181 +182 +182 +182 +182 +183 +182 +183 +183 +182 +182 +181 +181 +183 +182 +185 +183 +184 +182 +182 +185 +182 +183 +181 +13 +9 +11 +10 +11 +10 +11 +183 +182 +182 +183 +183 +182 +181 +183 +182 +182 +182 +182 +183 +183 +183 +182 +176 +183 +182 +183 +182 +182 +182 +182 +183 +11 +10 +11 +12 +10 +10 +12 +181 +182 +183 +182 +182 +184 +182 +182 +182 +182 +182 +182 +182 +183 +183 +183 +182 +182 +182 +182 +182 +183 +182 +182 +182 +11 +9 +11 +12 +10 +12 +10 +182 +182 +181 +182 +182 +182 +182 +182 +183 +182 +182 +181 +182 +183 +183 +184 +183 +182 +182 +181 +181 +182 +182 +185 +184 +13 +10 +11 +11 +9 +12 +11 +182 +183 +181 +180 +182 +182 +183 +184 +182 +183 +181 +181 +182 +182 +182 +182 +183 +182 +182 +182 +182 +182 +183 +182 +180 +12 +10 +11 +12 +11 +11 +10 +181 +182 +182 +182 +183 +184 +182 +184 +181 +182 +183 +182 +182 +183 +183 +182 +182 +182 +181 +181 +182 +185 +183 +183 +185 +12 +11 +10 +10 +11 +11 +11 +182 +183 +182 +182 +182 +182 +180 +182 +183 +183 +181 +180 +181 +182 +183 +183 +183 +182 +182 +181 +182 +183 +183 +184 +183 +182 +182 +181 +180 +180 +183 +183 +183 +183 +12 +11 +11 +11 +12 +11 +12 +182 +182 +181 +182 +183 +182 +183 +182 +182 +184 +183 +183 +183 +181 +182 +181 +182 +183 +182 +181 +182 +182 +182 +182 +184 +13 +12 +10 +11 +9 +8 +11 +182 +183 +183 +182 +183 +182 +181 +182 +182 +183 +182 +182 +182 +182 +182 +184 +180 +181 +182 +183 +183 +182 +182 +182 +183 +13 +10 +10 +10 +9 +11 +10 +182 +182 +183 +182 +182 +182 +181 +180 +176 +183 +182 +182 +183 +181 +183 +183 +11 +11 +10 +11 +10 +10 +12 +183 +182 +182 +182 +180 +183 +181 +182 +184 +183 +179 +182 +181 +183 +183 +183 +182 +183 +182 +183 +182 +182 +180 +182 +182 +11 +10 +10 +11 +13 +11 +10 +183 +181 +182 +182 +183 +183 +182 +183 +185 +182 +183 +183 +183 +182 +182 +181 +179 +182 +182 +184 +183 +181 +183 +184 +180 +13 +9 +9 +10 +11 +10 +9 +182 +181 +182 +182 +184 +182 +183 +181 +183 +182 +181 +181 +181 +183 +184 +183 +183 +182 +181 +182 +182 +182 +183 +181 +182 +14 +10 +10 +8 +10 +10 +10 +181 +180 +183 +182 +183 +184 +182 +183 +182 +182 +181 +183 +183 +183 +182 +182 +182 +182 +182 +182 +178 +181 +182 +183 +181 +11 +11 +10 +10 +10 +10 +12 +183 +182 +182 +182 +181 +181 +182 +182 +184 +183 +182 +182 +182 +183 +183 +182 +182 +182 +181 +180 +180 +182 +182 +182 +182 +11 +10 +11 +11 +10 +9 +10 +182 +183 +182 +182 +182 +182 +182 +182 +180 +183 +182 +183 +183 +182 +182 +183 +182 +180 +182 +182 +183 +183 +184 +183 +184 +11 +10 +10 +10 +10 +10 +12 +183 +182 +183 +182 +181 +182 +182 +181 +182 +182 +182 +182 +183 +181 +182 +183 +182 +186 +184 +182 +183 +182 +185 +183 +182 +10 +10 +9 +10 +10 +11 +12 +183 +183 +182 +182 +181 +181 +182 +183 +185 +183 +182 +182 +183 +182 +183 +180 +181 +182 +182 +183 +182 +182 +182 +181 +182 +12 +11 +11 +9 +8 +10 +10 +182 +184 +182 +182 +182 +182 +182 +183 +183 +182 +182 +182 +181 +182 +182 +183 +183 +183 +183 +183 +182 +181 +182 +182 +180 +182 +183 +183 +184 +183 +183 +182 +182 +181 +12 +10 +11 +11 +10 +10 +11 +183 +182 +179 +183 +181 +182 +183 +181 +183 +182 +182 +182 +182 +182 +181 +182 +182 +182 +183 +182 +182 +182 +183 +184 +179 +13 +10 +10 +11 +10 +11 +10 +182 +182 +181 +182 +182 +182 +183 +182 +183 +183 +182 +182 +183 +183 +182 +182 +182 +182 +182 +181 +183 +181 +183 +183 +181 +10 +10 +10 +182 +183 +182 +183 +181 +182 +187 +182 +183 +183 +182 +181 +182 +181 +182 +182 +183 +183 +182 +182 +10 +11 +11 +10 +10 +10 +11 +182 +182 +182 +182 +183 +182 +182 +181 +181 +183 +183 +183 +182 +180 +180 +180 +182 +182 +182 +182 +182 +183 +184 +182 +183 +10 +9 +9 +10 +10 +12 +11 +183 +183 +181 +182 +181 +182 +182 +182 +182 +182 +183 +182 +182 +184 +182 +182 +182 +182 +182 +182 +182 +182 +181 +181 +182 +11 +10 +10 +11 +11 +10 +10 +182 +182 +182 +182 +182 +181 +181 +183 +182 +183 +183 +182 +181 +182 +182 +182 +181 +180 +182 +182 +183 +181 +181 +181 +183 +12 +11 +10 +11 +10 +11 +11 +182 +182 +183 +182 +182 +183 +181 +182 +182 +181 +182 +182 +183 +183 +182 +183 +177 +183 +182 +182 +181 +182 +182 +182 +183 +12 +10 +11 +10 +10 +12 +11 +186 +183 +183 +183 +185 +183 +186 +182 +181 +182 +182 +182 +183 +182 +182 +182 +182 +182 +182 +182 +183 +181 +182 +182 +182 +13 +13 +11 +11 +12 +10 +12 +181 +182 +182 +182 +182 +181 +181 +182 +182 +183 +182 +183 +184 +182 +184 +182 +182 +182 +183 +183 +184 +182 +181 +182 +182 +12 +10 +11 +11 +11 +10 +10 +182 +181 +181 +182 +182 +183 +184 +184 +182 +184 +181 +182 +182 +182 +183 +182 +182 +183 +182 +182 +182 +183 +182 +183 +182 +11 +11 +10 +10 +11 +10 +11 +184 +183 +184 +182 +182 +181 +181 +182 +182 +183 +183 +182 +182 +182 +182 +182 +182 +182 +183 +182 +183 +184 +184 +182 +179 +11 +10 +9 +12 +10 +11 +11 +184 +182 +182 +182 +183 +182 +181 +11 +9 +182 +183 +184 +183 +182 +182 +182 +183 +184 +182 +184 +182 +183 +182 +182 +183 +182 +183 +183 +182 +182 +182 +182 +182 +182 +13 +10 +10 +12 +10 +11 +12 +183 +182 +182 +182 +181 +182 +182 +182 +184 +184 +184 +183 +183 +181 +182 +182 +181 +182 +181 +182 +182 +183 +183 +183 +182 +11 +7 +9 +9 +10 +10 +11 +183 +183 +182 +182 +183 +183 +182 +184 +182 +181 +182 +183 +182 +181 +182 +182 +183 +182 +183 +9 +11 +11 +11 +183 +182 +182 +182 +182 +182 +184 +182 +179 +182 +182 +181 +182 +182 +183 +184 +182 +181 +182 +178 +181 +183 +182 +184 +182 +12 +11 +11 +10 +11 +11 +11 +182 +183 +182 +182 +179 +181 +183 +188 +183 +183 +182 +182 +181 +181 +182 +182 +184 +184 +184 +182 +181 +182 +183 +182 +181 +11 +9 +10 +9 +12 +11 +13 +183 +183 +181 +182 +182 +181 +182 +182 +181 +183 +182 +181 +181 +182 +182 +183 +182 +181 +182 +182 +183 +183 +182 +179 +182 +11 +11 +11 +10 +12 +12 +11 +184 +182 +182 +182 +182 +182 +183 +182 +181 +180 +182 +182 +182 +183 +182 +184 +183 +182 +182 +181 +182 +182 +182 +182 +182 +12 +10 +10 +10 +10 +11 +10 +182 +181 +182 +181 +182 +182 +182 +183 +183 +183 +183 +182 +180 +180 +182 +183 +183 +182 +182 +182 +182 +182 +181 +183 +183 +13 +12 +10 +9 +10 +10 +9 +181 +182 +182 +183 +185 +182 +182 +178 +182 +182 +181 +182 +182 +182 +182 +182 +183 +184 +182 +182 +182 +181 +182 +182 +182 +13 +11 +11 +13 +10 +12 +10 +182 +183 +181 +182 +183 +182 +178 +180 +182 +183 +183 +180 +182 +182 +181 +182 +181 +183 +182 +184 +182 +182 +182 +182 +182 +12 +9 +11 +10 +11 +11 +12 +182 +180 +182 +181 +182 +183 +182 +183 +183 +179 +182 +182 +182 +182 +183 +183 +185 +183 +183 +182 +183 +182 +182 +182 +184 +12 +12 +11 +10 +10 +10 +9 +183 +182 +183 +182 +182 +181 +182 +181 +182 +182 +184 +183 +182 +182 +182 +181 +183 +182 +182 +181 +181 +183 +181 +183 +183 +13 +10 +10 +10 +10 +183 +184 +183 +183 +11 +12 +10 +9 +10 +9 +9 +182 +183 +183 +182 +182 +182 +182 +183 +182 +182 +183 +182 +182 +182 +182 +181 +182 +183 +183 +182 +182 +183 +182 +180 +183 +11 +10 +10 +10 +10 +10 +11 +182 +183 +179 +181 +181 +182 +181 +176 +183 +183 +183 +183 +181 +182 +182 +182 +181 +184 +182 +182 +183 +183 +185 +182 +182 +12 +11 +10 +10 +10 +11 +9 +181 +182 +182 +185 +183 +183 +182 +180 +182 +182 +182 +181 +182 +182 +183 +184 +13 +11 +15 +12 +10 +11 +10 +181 +182 +183 +182 +183 +182 +183 +183 +183 +183 +182 +182 +182 +181 +183 +183 +183 +182 +182 +182 +182 +182 +183 +183 +182 +11 +11 +11 +10 +11 +11 +11 +184 +181 +183 +182 +182 +182 +183 +182 +183 +182 +183 +180 +180 +182 +182 +183 +186 +182 +181 +182 +182 +187 +182 +181 +182 +11 +14 +12 +10 +10 +11 +10 +182 +182 +182 +182 +183 +182 +183 +183 +182 +182 +180 +182 +182 +182 +182 +182 +184 +182 +183 +183 +182 +182 +182 +182 +183 +12 +10 +10 +10 +10 +9 +10 +182 +181 +180 +182 +183 +182 +182 +183 +182 +182 +184 +182 +183 +182 +181 +181 +183 +182 +182 +182 +183 +183 +181 +180 +181 +14 +9 +11 +11 +11 +13 +11 +183 +182 +184 +182 +182 +182 +180 +182 +182 +183 +183 +182 +182 +180 +182 +183 +182 +183 +183 +182 +182 +182 +182 +181 +182 +10 +11 +12 +11 +11 +10 +11 +182 +182 +183 +184 +182 +185 +184 +182 +182 +181 +183 +182 +182 +182 +182 +182 +181 +183 +182 +183 +183 +183 +183 +182 +182 +11 +10 +11 +10 +11 +11 +11 +184 +182 +184 +182 +182 +182 +181 +181 +181 +182 +182 +182 +182 +183 +182 +183 +183 +183 +183 +182 +182 +182 +180 +180 +182 +13 +12 +11 +11 +11 +12 +9 +182 +181 +182 +182 +182 +183 +182 +182 +183 +182 +183 +181 +181 +182 +181 +182 +182 +182 +181 +182 +186 +183 +181 +183 +182 +12 +11 +10 +11 +11 +11 +11 +182 +183 +182 +183 +182 +181 +182 +182 +180 +181 +182 +181 +181 +182 +183 +182 +183 +183 +182 +182 +181 +183 +182 +182 +182 +182 +183 +183 +182 +184 +182 +183 +182 +181 +12 +11 +10 +12 +10 +11 +11 +182 +183 +183 +180 +183 +182 +182 +182 +182 +183 +182 +182 +181 +182 +182 +182 +184 +183 +184 +183 +183 +181 +182 +182 +180 +12 +9 +11 +11 +11 +11 +10 +183 +182 +182 +180 +180 +182 +183 +184 +183 +182 +183 +181 +180 +182 +182 +182 +182 +182 +182 +183 +180 +181 +181 +183 +183 +11 +11 +10 +10 +10 +9 +11 +182 +183 +183 +182 +181 +182 +181 +183 +181 +183 +182 +183 +183 +184 +182 +184 +12 +9 +11 +9 +10 +11 +12 +182 +182 +181 +182 +182 +181 +181 +182 +183 +183 +183 +182 +183 +182 +181 +182 +183 +182 +181 +181 +182 +182 +181 +180 +181 +11 +10 +11 +10 +11 +13 +10 +182 +182 +183 +183 +183 +181 +181 +182 +180 +181 +181 +182 +184 +184 +183 +183 +182 +182 +181 +182 +183 +182 +183 +183 +183 +12 +10 +12 +11 +10 +11 +11 +182 +183 +182 +181 +182 +180 +180 +182 +182 +183 +184 +182 +181 +182 +182 +182 +183 +181 +183 +183 +182 +182 +184 +182 +182 +12 +11 +13 +11 +10 +10 +9 +181 +182 +182 +182 +182 +184 +182 +182 +182 +182 +183 +181 +182 +181 +183 +182 +183 +183 +182 +182 +184 +182 +181 +181 +182 +12 +11 +10 +11 +10 +10 +10 +182 +182 +182 +182 +183 +182 +184 +182 +181 +182 +181 +182 +183 +182 +183 +182 +183 +180 +180 +182 +183 +182 +182 +182 +181 +9 +11 +11 +10 +10 +10 +11 +182 +182 +183 +182 +182 +183 +181 +181 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +181 +182 +182 +182 +183 +183 +183 +10 +8 +11 +10 +11 +12 +11 +183 +183 +182 +182 +181 +182 +182 +182 +182 +182 +183 +183 +183 +184 +182 +185 +182 +181 +182 +182 +183 +183 +184 +182 +183 +11 +10 +10 +11 +11 +10 +8 +180 +183 +183 +183 +183 +182 +182 +182 +181 +182 +182 +182 +182 +182 +182 +183 +183 +182 +182 +182 +182 +182 +182 +183 +182 +12 +11 +11 +11 +11 +8 +9 +183 +182 +182 +182 +182 +181 +182 +182 +181 +183 +183 +183 +184 +183 +183 +185 +182 +181 +181 +182 +183 +182 +182 +182 +183 +180 +182 +181 +183 +182 +182 +183 +182 +182 +12 +10 +11 +10 +10 +11 +11 +182 +183 +182 +182 +182 +182 +182 +182 +182 +183 +184 +182 +184 +181 +182 +182 +181 +183 +182 +183 +184 +182 +182 +182 +181 +11 +10 +11 +11 +11 +10 +9 +182 +182 +182 +182 +182 +182 +183 +182 +182 +181 +182 +182 +182 +182 +181 +181 +181 +182 +183 +181 +182 +183 +182 +182 +181 +12 +183 +185 +182 +181 +182 +181 +182 +183 +183 +183 +183 +182 +181 +183 +183 +182 +184 +183 +183 +182 +182 +183 +12 +11 +11 +11 +12 +9 +11 +182 +183 +179 +183 +182 +183 +182 +184 +184 +183 +183 +182 +181 +183 +182 +182 +184 +183 +185 +181 +182 +182 +183 +185 +182 +11 +11 +11 +14 +11 +11 +10 +182 +185 +183 +181 +184 +182 +182 +181 +181 +182 +182 +182 +184 +182 +182 +183 +183 +183 +183 +182 +182 +183 +182 +182 +181 +11 +10 +11 +12 +12 +11 +10 +182 +181 +182 +182 +182 +183 +182 +183 +182 +181 +183 +182 +183 +182 +182 +182 +182 +182 +182 +180 +181 +182 +182 +184 +183 +12 +12 +11 +11 +10 +11 +10 +182 +182 +181 +182 +183 +183 +182 +184 +184 +183 +182 +181 +181 +181 +183 +182 +183 +179 +182 +184 +183 +180 +182 +181 +181 +13 +11 +11 +10 +10 +9 +11 +182 +182 +183 +181 +183 +182 +181 +182 +184 +182 +183 +182 +182 +184 +182 +182 +181 +184 +183 +184 +183 +182 +182 +182 +182 +11 +10 +10 +10 +10 +11 +10 +184 +183 +182 +182 +181 +181 +182 +182 +183 +183 +184 +182 +182 +182 +183 +182 +182 +182 +181 +181 +181 +183 +183 +183 +183 +12 +10 +10 +10 +11 +10 +12 +182 +184 +181 +182 +182 +182 +182 +183 +181 +179 +182 +182 +182 +183 +182 +183 +182 +182 +182 +182 +182 +183 +183 +183 +184 +12 +12 +11 +10 +11 +11 +11 +183 +182 +182 +183 +182 +182 +180 +182 +183 +183 +182 +181 +182 +182 +183 +182 +181 +183 +182 +183 +182 +183 +183 +182 +183 +12 +11 +11 +10 +10 +10 +10 +182 +182 +182 +11 +10 +8 +11 +10 +10 +183 +182 +183 +183 +183 +182 +182 +181 +181 +182 +182 +183 +183 +182 +182 +182 +182 +182 +182 +182 +182 +183 +182 +182 +182 +11 +9 +10 +11 +12 +12 +11 +183 +182 +182 +182 +184 +182 +182 +182 +182 +182 +181 +182 +182 +180 +186 +182 +183 +183 +183 +181 +182 +181 +182 +182 +181 +14 +10 +12 +11 +14 +11 +10 +182 +182 +182 +180 +182 +181 +180 +182 +182 +183 +182 +182 +182 +181 +182 +183 +183 +11 +11 +11 +10 +10 +10 +183 +182 +182 +181 +183 +184 +181 +182 +181 +182 +184 +182 +182 +181 +182 +179 +182 +181 +179 +182 +187 +182 +181 +182 +182 +8 +10 +9 +11 +10 +10 +9 +182 +182 +185 +182 +181 +181 +181 +183 +182 +183 +182 +183 +183 +180 +179 +182 +181 +182 +182 +183 +182 +183 +182 +182 +182 +12 +11 +11 +10 +10 +10 +10 +179 +179 +181 +182 +182 +181 +182 +182 +183 +184 +184 +184 +183 +182 +182 +181 +182 +181 +182 +183 +182 +182 +183 +182 +182 +11 +9 +11 +11 +10 +12 +11 +182 +182 +181 +181 +182 +182 +182 +181 +182 +182 +184 +184 +182 +182 +182 +182 +180 +182 +182 +182 +182 +182 +182 +182 +183 +11 +10 +9 +11 +11 +11 +12 +183 +183 +181 +181 +182 +183 +182 +182 +181 +181 +182 +182 +182 +183 +182 +184 +183 +182 +181 +182 +180 +181 +181 +182 +183 +14 +12 +10 +10 +11 +10 +12 +183 +183 +182 +182 +182 +183 +182 +182 +183 +183 +181 +180 +182 +182 +182 +183 +183 +183 +183 +181 +183 +182 +182 +182 +183 +11 +10 +10 +10 +11 +10 +10 +183 +183 +181 +183 +182 +180 +181 +182 +182 +183 +183 +182 +182 +182 +182 +183 +183 +182 +182 +183 +182 +182 +183 +182 +181 +11 +9 +10 +11 +11 +12 +12 +182 +182 +181 +181 +183 +182 +182 +183 +181 +181 +181 +182 +183 +183 +183 +182 +182 +181 +183 +182 +182 +183 +183 +182 +183 +12 +10 +11 +11 +11 +11 +10 +182 +182 +182 +182 +182 +181 +182 +182 +182 +182 +182 +181 +182 +182 +182 +182 +184 +183 +184 +183 +182 +182 +181 +183 +182 +12 +182 +182 +183 +182 +182 +182 +183 +183 +11 +11 +11 +9 +11 +10 +11 +181 +180 +182 +181 +181 +183 +182 +182 +182 +183 +182 +182 +182 +182 +182 +181 +183 +182 +183 +182 +182 +182 +182 +183 +183 +13 +11 +10 +10 +8 +9 +11 +182 +183 +183 +182 +182 +183 +182 +181 +182 +181 +182 +183 +183 +183 +182 +182 +181 +182 +182 +182 +183 +179 +183 +183 +182 +12 +10 +10 +10 +10 +10 +10 +182 +182 +182 +182 +183 +181 +182 +182 +182 +185 +182 +182 +183 +182 +183 +183 +13 +12 +10 +11 +10 +9 +11 +182 +183 +184 +184 +182 +183 +182 +183 +181 +182 +183 +183 +182 +182 +183 +183 +182 +182 +183 +181 +182 +182 +181 +182 +183 +12 +12 +10 +12 +11 +10 +11 +181 +183 +183 +183 +184 +182 +183 +184 +182 +184 +181 +181 +182 +182 +183 +181 +183 +184 +182 +182 +182 +182 +183 +181 +182 +11 +12 +11 +11 +10 +20 +9 +182 +182 +182 +182 +183 +182 +182 +182 +186 +181 +182 +182 +181 +180 +182 +183 +182 +181 +183 +182 +182 +182 +182 +181 +181 +11 +11 +14 +11 +13 +11 +11 +182 +181 +183 +183 +183 +183 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +185 +183 +181 +180 +182 +182 +11 +12 +10 +11 +11 +10 +10 +182 +183 +183 +183 +182 +182 +182 +182 +182 +183 +182 +182 +180 +181 +183 +182 +184 +183 +182 +182 +181 +181 +182 +182 +183 +12 +11 +11 +11 +11 +11 +7 +182 +182 +183 +182 +182 +183 +183 +183 +183 +182 +181 +182 +181 +182 +183 +184 +182 +183 +182 +182 +182 +182 +182 +180 +182 +10 +10 +10 +9 +12 +10 +11 +183 +183 +182 +183 +182 +181 +182 +182 +182 +181 +183 +183 +182 +182 +182 +182 +183 +183 +180 +182 +182 +182 +182 +182 +182 +12 +8 +10 +10 +10 +11 +10 +183 +184 +183 +184 +182 +183 +183 +180 +183 +183 +182 +181 +180 +180 +182 +182 +184 +184 +182 +182 +180 +182 +182 +182 +182 +10 +11 +11 +11 +10 +9 +10 +182 +181 +180 +185 +182 +181 +182 +182 +181 +183 +183 +182 +182 +182 +181 +182 +182 +183 +182 +181 +180 +180 +182 +183 +184 +182 +183 +182 +182 +183 +182 +182 +182 +182 +11 +11 +11 +11 +11 +11 +10 +182 +182 +182 +182 +182 +182 +181 +182 +182 +182 +183 +182 +182 +182 +182 +183 +183 +184 +183 +184 +182 +183 +181 +182 +181 +10 +11 +10 +8 +13 +11 +11 +182 +181 +181 +181 +182 +182 +182 +183 +181 +182 +182 +182 +180 +183 +182 +182 +183 +184 +181 +182 +182 +182 +180 +183 +182 +13 +12 +11 +10 +13 +10 +11 +181 +184 +183 +182 +183 +182 +181 +180 +179 +182 +182 +184 +182 +182 +181 +183 +13 +10 +10 +10 +11 +8 +12 +182 +182 +182 +182 +182 +182 +182 +182 +181 +182 +182 +181 +182 +182 +182 +182 +183 +181 +181 +183 +182 +183 +183 +182 +182 +17 +10 +12 +10 +9 +10 +11 +182 +183 +181 +182 +182 +182 +182 +182 +182 +183 +184 +182 +183 +181 +181 +183 +182 +183 +183 +183 +183 +182 +182 +182 +182 +12 +9 +11 +11 +10 +10 +10 +182 +183 +183 +184 +182 +180 +182 +182 +183 +181 +183 +182 +183 +184 +182 +182 +182 +182 +183 +182 +182 +182 +182 +181 +183 +12 +11 +11 +10 +11 +10 +11 +183 +182 +182 +182 +182 +182 +182 +183 +181 +182 +183 +182 +182 +182 +183 +182 +182 +183 +184 +182 +182 +182 +181 +182 +183 +12 +11 +12 +10 +12 +10 +11 +182 +181 +183 +182 +182 +182 +182 +183 +181 +181 +182 +182 +183 +182 +184 +182 +183 +182 +182 +184 +182 +182 +182 +183 +183 +12 +12 +9 +11 +11 +11 +14 +182 +184 +184 +182 +182 +181 +181 +182 +182 +183 +184 +184 +183 +183 +181 +183 +182 +181 +183 +181 +183 +182 +182 +183 +182 +11 +11 +11 +12 +12 +10 +10 +182 +182 +183 +182 +183 +182 +181 +182 +181 +183 +183 +182 +180 +181 +182 +182 +183 +184 +182 +184 +182 +182 +179 +181 +182 +12 +12 +11 +11 +11 +10 +10 +181 +181 +183 +182 +182 +182 +182 +182 +184 +182 +183 +182 +180 +182 +182 +183 +182 +182 +182 +182 +182 +181 +181 +182 +181 +12 +14 +12 +11 +11 +11 +11 +182 +182 +182 +183 +181 +182 +178 +182 +10 +182 +185 +182 +183 +183 +181 +183 +182 +182 +183 +182 +181 +183 +182 +181 +182 +181 +182 +184 +183 +182 +182 +182 +182 +182 +12 +11 +11 +10 +10 +11 +10 +181 +186 +181 +183 +185 +183 +183 +182 +180 +182 +182 +181 +182 +182 +181 +182 +183 +183 +182 +182 +182 +181 +181 +181 +183 +13 +11 +11 +10 +11 +9 +8 +182 +181 +182 +184 +183 +182 +182 +182 +182 +182 +182 +182 +182 +181 +179 +182 +182 +179 +182 +182 +181 +182 +184 +181 +182 +182 +183 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +183 +183 +182 +183 +183 +184 +183 +182 +182 +182 +182 +13 +10 +10 +11 +10 +10 +10 +182 +183 +184 +182 +183 +181 +181 +182 +181 +183 +182 +182 +183 +183 +182 +183 +182 +181 +183 +181 +182 +183 +182 +184 +182 +12 +11 +10 +10 +9 +11 +10 +182 +184 +181 +180 +182 +182 +181 +182 +181 +182 +182 +183 +183 +182 +182 +182 +183 +182 +183 +182 +183 +182 +182 +182 +181 +10 +11 +11 +10 +11 +11 +11 +182 +181 +183 +182 +183 +182 +182 +183 +182 +182 +182 +182 +183 +182 +182 +181 +180 +182 +181 +182 +182 +181 +182 +182 +183 +12 +11 +10 +10 +10 +11 +10 +181 +182 +181 +182 +182 +183 +183 +182 +183 +183 +182 +181 +182 +182 +182 +185 +183 +184 +183 +183 +182 +182 +180 +183 +182 +11 +11 +10 +11 +12 +11 +10 +182 +181 +182 +182 +182 +182 +182 +182 +183 +182 +182 +182 +183 +182 +184 +181 +182 +182 +181 +183 +182 +184 +183 +180 +183 +11 +11 +11 +9 +11 +10 +13 +183 +182 +181 +181 +179 +182 +183 +183 +183 +179 +182 +184 +182 +181 +183 +181 +183 +183 +183 +177 +183 +182 +182 +183 +184 +12 +11 +11 +10 +13 +10 +12 +182 +183 +181 +181 +184 +182 +181 +185 +181 +183 +183 +183 +181 +182 +182 +183 +183 +187 +181 +182 +183 +182 +186 +182 +183 +13 +10 +7 +10 +12 +11 +8 +178 +183 +182 +184 +183 +181 +182 +182 +182 +178 +182 +183 +182 +183 +182 +182 +182 +181 +183 +181 +184 +183 +182 +182 +182 +12 +9 +10 +9 +10 +11 +183 +183 +185 +13 +9 +8 +11 +6 +11 +11 +184 +183 +180 +182 +182 +182 +182 +183 +182 +183 +183 +179 +182 +182 +182 +182 +182 +182 +182 +183 +183 +181 +182 +183 +178 +10 +9 +11 +11 +12 +12 +10 +183 +181 +181 +183 +182 +184 +183 +184 +184 +182 +182 +182 +182 +183 +182 +183 +182 +182 +182 +182 +183 +183 +182 +181 +182 +11 +10 +11 +9 +11 +11 +10 +182 +182 +183 +181 +183 +182 +182 +183 +182 +182 +182 +182 +183 +183 +183 +182 +11 +10 +11 +11 +11 +11 +11 +182 +183 +181 +182 +182 +181 +181 +182 +181 +183 +183 +183 +182 +182 +182 +184 +183 +182 +182 +183 +182 +182 +182 +182 +182 +11 +10 +12 +11 +10 +9 +10 +182 +183 +183 +181 +182 +182 +182 +182 +183 +182 +185 +182 +184 +183 +182 +182 +182 +181 +181 +182 +182 +183 +183 +184 +183 +13 +9 +10 +10 +10 +11 +11 +181 +183 +183 +182 +189 +182 +183 +182 +182 +182 +183 +182 +182 +183 +183 +183 +181 +181 +183 +182 +182 +183 +182 +182 +182 +12 +10 +10 +11 +10 +10 +10 +185 +182 +183 +183 +182 +186 +181 +180 +182 +181 +180 +184 +182 +183 +182 +184 +182 +182 +182 +182 +184 +183 +182 +182 +182 +11 +11 +11 +11 +12 +10 +12 +182 +182 +181 +181 +183 +183 +183 +183 +182 +183 +181 +181 +183 +182 +182 +182 +184 +183 +184 +183 +184 +183 +184 +182 +181 +12 +9 +11 +12 +11 +10 +8 +182 +183 +183 +183 +184 +182 +182 +182 +181 +183 +183 +182 +183 +183 +182 +183 +183 +182 +182 +182 +182 +182 +182 +182 +183 +12 +10 +11 +11 +8 +11 +10 +181 +181 +182 +183 +182 +183 +183 +183 +182 +181 +182 +183 +183 +183 +182 +182 +182 +182 +182 +181 +181 +183 +182 +182 +181 +13 +10 +11 +10 +9 +11 +10 +183 +183 +182 +183 +182 +182 +182 +182 +182 +182 +183 +183 +183 +182 +182 +182 +182 +184 +182 +182 +184 +182 +184 +182 +181 +11 +11 +11 +10 +11 +11 +10 +182 +183 +182 +184 +182 +182 +182 +182 +181 +180 +183 +183 +183 +183 +183 +182 +182 +182 +181 +179 +182 +182 +183 +182 +182 +182 +181 +182 +182 +182 +183 +184 +183 +184 +12 +10 +10 +10 +10 +10 +10 +181 +182 +182 +182 +182 +182 +182 +182 +183 +184 +180 +183 +181 +181 +182 +182 +183 +183 +182 +182 +181 +182 +182 +181 +182 +11 +10 +10 +11 +11 +12 +10 +184 +182 +181 +181 +181 +182 +184 +183 +183 +182 +182 +181 +182 +183 +182 +182 +184 +184 +183 +182 +182 +181 +182 +182 +182 +11 +11 +11 +11 +12 +11 +9 +183 +181 +182 +182 +183 +182 +185 +183 +183 +182 +181 +182 +182 +183 +183 +182 +12 +9 +10 +11 +11 +11 +12 +183 +182 +180 +183 +183 +183 +183 +182 +182 +181 +182 +182 +182 +182 +182 +183 +182 +179 +183 +182 +182 +182 +182 +182 +184 +12 +11 +12 +11 +12 +10 +11 +183 +182 +183 +183 +182 +182 +182 +183 +180 +183 +180 +185 +182 +183 +182 +182 +183 +182 +183 +182 +183 +183 +185 +183 +184 +12 +10 +10 +10 +11 +11 +12 +183 +182 +182 +181 +182 +181 +183 +182 +182 +182 +184 +180 +182 +182 +183 +183 +182 +183 +181 +181 +183 +182 +183 +182 +180 +12 +10 +8 +9 +11 +11 +11 +183 +181 +182 +181 +183 +183 +182 +183 +182 +182 +183 +182 +183 +183 +182 +182 +183 +184 +183 +184 +181 +183 +182 +182 +183 +12 +10 +9 +10 +10 +10 +12 +183 +183 +183 +181 +181 +181 +182 +183 +183 +183 +185 +182 +183 +182 +182 +182 +183 +181 +180 +182 +182 +181 +182 +182 +182 +12 +11 +10 +11 +11 +11 +12 +182 +183 +182 +182 +182 +182 +182 +182 +183 +182 +181 +182 +184 +182 +183 +181 +181 +182 +180 +183 +183 +183 +183 +182 +183 +9 +8 +11 +10 +11 +10 +11 +182 +181 +182 +182 +183 +182 +183 +182 +182 +182 +183 +184 +182 +182 +182 +182 +182 +181 +182 +182 +184 +182 +182 +182 +183 +13 +12 +11 +10 +10 +11 +10 +185 +183 +184 +183 +184 +182 +184 +182 +182 +182 +181 +182 +182 +182 +182 +182 +181 +182 +182 +182 +182 +182 +182 +182 +182 +12 +11 +11 +12 +11 +11 +10 +182 +182 +182 +182 +183 +182 +182 +182 +182 +180 +182 +182 +182 +183 +182 +183 +182 +182 +182 +182 +182 +182 +182 +184 +183 +184 +185 +183 +184 +182 +181 +181 +181 +183 +12 +11 +10 +12 +11 +10 +10 +182 +182 +181 +182 +182 +182 +181 +185 +182 +182 +183 +182 +183 +182 +182 +182 +181 +180 +182 +182 +183 +182 +183 +183 +182 +14 +10 +11 +10 +9 +11 +10 +182 +183 +183 +183 +182 +181 +183 +182 +182 +182 +182 +183 +182 +182 +182 +181 +182 +182 +182 +182 +181 +182 +183 +183 +183 +11 +10 +9 +9 +182 +183 +183 +181 +181 +183 +182 +182 +183 +183 +183 +183 +182 +182 +181 +182 +182 +182 +182 +12 +11 +10 +8 +10 +10 +10 +183 +182 +182 +182 +183 +182 +182 +182 +183 +182 +183 +186 +181 +184 +182 +181 +181 +181 +183 +183 +183 +182 +183 +182 +182 +12 +11 +10 +11 +11 +10 +10 +180 +183 +183 +181 +181 +182 +182 +182 +181 +182 +183 +183 +184 +183 +183 +182 +182 +183 +182 +182 +182 +182 +182 +182 +182 +12 +10 +11 +8 +9 +11 +11 +182 +184 +182 +183 +185 +182 +182 +182 +182 +179 +181 +183 +182 +183 +182 +183 +182 +182 +181 +183 +182 +183 +183 +183 +183 +11 +10 +8 +8 +10 +10 +11 +182 +183 +183 +182 +181 +181 +182 +182 +183 +181 +184 +183 +183 +183 +182 +182 +174 +180 +182 +182 +183 +183 +183 +183 +183 +11 +10 +11 +10 +10 +11 +10 +181 +182 +182 +183 +182 +182 +183 +181 +181 +182 +182 +182 +183 +183 +182 +182 +182 +181 +182 +181 +182 +181 +183 +183 +183 +12 +11 +10 +9 +11 +11 +11 +183 +183 +182 +181 +181 +182 +182 +183 +182 +182 +183 +183 +183 +182 +182 +181 +182 +182 +181 +182 +180 +183 +183 +181 +181 +12 +10 +10 +10 +10 +10 +11 +182 +183 +182 +183 +182 +182 +181 +181 +182 +183 +183 +183 +183 +182 +183 +183 +181 +182 +182 +183 +183 +182 +182 +182 +182 +12 +11 +11 +11 +11 +9 +11 +182 +183 +183 +185 +183 +184 +182 +181 +184 +181 +183 +183 +182 +183 +182 +182 +183 +182 +184 +182 +182 +183 +182 +183 +185 +12 +12 +10 +11 +11 +9 +11 +181 +183 +186 +183 +10 +11 +11 +11 +11 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +180 +180 +182 +182 +186 +183 +182 +182 +182 +182 +183 +182 +182 +182 +183 +11 +9 +10 +9 +10 +10 +11 +182 +182 +182 +182 +183 +183 +182 +182 +182 +182 +182 +181 +182 +183 +182 +183 +182 +179 +182 +181 +181 +183 +182 +181 +182 +12 +11 +10 +9 +10 +10 +11 +182 +182 +182 +182 +183 +182 +183 +183 +182 +180 +182 +182 +184 +183 +183 +182 +183 +181 +181 +183 +11 +11 +12 +183 +182 +182 +181 +181 +183 +183 +182 +182 +179 +183 +183 +181 +183 +182 +182 +182 +182 +183 +184 +185 +185 +184 +182 +181 +12 +11 +11 +11 +11 +10 +10 +181 +183 +181 +180 +182 +182 +183 +184 +182 +183 +182 +181 +183 +181 +182 +184 +183 +182 +183 +181 +183 +183 +183 +182 +182 +13 +13 +11 +11 +11 +9 +10 +182 +182 +184 +182 +183 +184 +182 +183 +182 +182 +182 +185 +182 +183 +182 +182 +182 +182 +182 +180 +179 +182 +183 +184 +183 +12 +11 +10 +10 +11 +11 +10 +183 +184 +182 +183 +181 +182 +183 +182 +182 +183 +182 +183 +181 +181 +182 +181 +183 +182 +182 +183 +181 +180 +181 +182 +182 +12 +11 +10 +9 +11 +11 +10 +182 +184 +182 +183 +181 +182 +182 +182 +181 +182 +181 +185 +182 +182 +183 +184 +180 +184 +182 +181 +182 +183 +183 +183 +182 +11 +11 +11 +11 +14 +10 +11 +182 +181 +182 +180 +183 +182 +183 +182 +182 +182 +182 +183 +183 +183 +182 +183 +182 +181 +182 +182 +184 +184 +183 +185 +181 +11 +9 +9 +12 +11 +11 +12 +182 +183 +182 +182 +183 +181 +182 +182 +182 +182 +185 +182 +183 +181 +180 +183 +182 +183 +183 +182 +181 +182 +185 +182 +182 +14 +12 +11 +11 +10 +8 +11 +183 +182 +183 +183 +181 +182 +182 +181 +182 +183 +183 +184 +182 +182 +182 +182 +183 +182 +183 +183 +182 +182 +182 +181 +182 +12 +13 +12 +12 +10 +9 +11 +183 +182 +183 +182 +182 +182 +183 +182 +182 +182 +183 +183 +183 +182 +183 +184 +182 +182 +181 +183 +182 +182 +183 +181 +180 +12 +10 +END PACKET 0 diff --git a/Old Matlab Interface/MYFIRSTWAVEFORM_CLEANED.txt b/Old Matlab Interface/MYFIRSTWAVEFORM_CLEANED.txt new file mode 100644 index 00000000..01b9ce83 --- /dev/null +++ b/Old Matlab Interface/MYFIRSTWAVEFORM_CLEANED.txt @@ -0,0 +1,11250 @@ +182 +182 +182 +182 +182 +183 +183 +182 +183 +183 +183 +182 +182 +183 +182 +182 +182 +183 +182 +182 +182 +182 +182 +182 +181 +12 +11 +10 +11 +11 +11 +10 +182 +182 +183 +183 +182 +183 +182 +182 +182 +182 +183 +182 +182 +182 +181 +182 +183 +182 +183 +183 +182 +182 +182 +182 +182 +10 +9 +10 +11 +11 +11 +12 +182 +182 +182 +182 +182 +182 +182 +182 +182 +185 +183 +182 +183 +183 +180 +182 +179 +181 +181 +183 +183 +182 +182 +182 +182 +181 +182 +182 +182 +183 +183 +182 +182 +182 +182 +182 +182 +184 +183 +182 +182 +182 +182 +182 +182 +182 +182 +182 +12 +10 +10 +11 +11 +11 +10 +182 +182 +182 +182 +183 +182 +183 +182 +182 +183 +182 +182 +182 +182 +182 +179 +182 +182 +182 +182 +182 +182 +182 +182 +182 +12 +11 +11 +11 +11 +10 +11 +182 +182 +182 +181 +182 +182 +180 +182 +182 +183 +182 +183 +182 +182 +182 +182 +182 +182 +182 +182 +183 +182 +182 +182 +183 +13 +11 +10 +11 +11 +11 +11 +182 +182 +182 +182 +182 +182 +182 +183 +181 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +183 +182 +182 +182 +182 +12 +11 +11 +11 +11 +10 +10 +182 +182 +182 +182 +182 +182 +182 +184 +183 +182 +183 +183 +182 +182 +182 +182 +182 +182 +182 +183 +182 +182 +181 +182 +182 +11 +11 +11 +11 +11 +10 +11 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +183 +182 +182 +182 +182 +181 +182 +183 +182 +182 +182 +11 +11 +11 +11 +10 +11 +11 +183 +182 +182 +183 +182 +183 +182 +176 +182 +183 +182 +182 +183 +182 +182 +182 +182 +182 +182 +183 +182 +182 +183 +182 +182 +12 +11 +11 +11 +11 +10 +11 +182 +183 +182 +182 +183 +182 +182 +182 +182 +184 +182 +182 +182 +182 +184 +183 +182 +183 +182 +184 +182 +182 +182 +182 +185 +12 +11 +11 +11 +13 +10 +11 +182 +182 +180 +182 +182 +182 +182 +180 +182 +182 +183 +180 +179 +182 +182 +182 +182 +181 +182 +182 +182 +182 +182 +182 +182 +12 +11 +11 +11 +11 +10 +10 +183 +182 +12 +8 +11 +11 +11 +11 +11 +182 +182 +182 +182 +182 +182 +182 +183 +183 +183 +182 +182 +182 +184 +183 +182 +182 +182 +181 +183 +182 +182 +182 +183 +182 +12 +11 +11 +6 +11 +11 +11 +182 +181 +182 +182 +183 +182 +183 +182 +182 +182 +182 +181 +182 +182 +182 +183 +181 +182 +182 +183 +182 +183 +182 +182 +182 +12 +11 +10 +9 +11 +10 +10 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +183 +181 +183 +182 +183 +183 +13 +11 +11 +11 +10 +11 +11 +182 +182 +182 +182 +182 +182 +182 +182 +183 +182 +182 +183 +182 +183 +182 +183 +183 +182 +180 +182 +182 +182 +182 +183 +182 +12 +10 +10 +11 +11 +11 +10 +182 +182 +182 +182 +183 +183 +182 +182 +182 +181 +182 +182 +183 +182 +183 +183 +182 +182 +184 +182 +183 +183 +181 +182 +182 +12 +10 +10 +10 +11 +10 +10 +181 +182 +182 +182 +172 +182 +183 +182 +182 +182 +182 +182 +185 +182 +182 +183 +182 +182 +182 +183 +182 +182 +182 +182 +182 +12 +11 +11 +11 +12 +10 +10 +182 +182 +182 +182 +182 +182 +182 +183 +181 +182 +182 +182 +182 +182 +182 +183 +182 +183 +182 +183 +183 +183 +182 +182 +182 +12 +11 +10 +12 +11 +10 +11 +182 +182 +183 +182 +183 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +183 +183 +182 +183 +182 +183 +182 +182 +182 +12 +11 +11 +12 +10 +11 +11 +182 +182 +183 +182 +182 +182 +182 +183 +182 +183 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +12 +11 +11 +11 +10 +10 +10 +183 +182 +182 +182 +182 +182 +182 +183 +182 +182 +183 +182 +182 +182 +182 +182 +180 +183 +182 +182 +182 +188 +183 +182 +182 +12 +12 +11 +11 +11 +11 +8 +182 +182 +182 +182 +183 +182 +182 +182 +182 +183 +183 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +183 +179 +183 +12 +11 +11 +10 +10 +10 +10 +182 +182 +182 +182 +183 +183 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +183 +182 +183 +183 +182 +182 +181 +182 +182 +182 +183 +183 +182 +182 +184 +183 +184 +11 +11 +9 +9 +9 +12 +11 +182 +183 +183 +180 +182 +182 +183 +181 +183 +182 +181 +182 +183 +183 +182 +181 +182 +182 +181 +181 +182 +182 +183 +183 +182 +12 +11 +10 +11 +10 +10 +5 +183 +183 +184 +181 +183 +182 +181 +182 +181 +182 +183 +183 +183 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +181 +183 +11 +11 +10 +11 +12 +11 +9 +180 +181 +180 +183 +183 +182 +182 +183 +183 +182 +182 +181 +182 +181 +182 +182 +12 +10 +11 +11 +11 +11 +11 +182 +182 +182 +183 +182 +182 +182 +182 +182 +182 +183 +183 +182 +183 +182 +182 +181 +182 +182 +182 +182 +182 +182 +181 +183 +11 +10 +11 +11 +10 +9 +10 +183 +183 +183 +183 +182 +182 +182 +182 +181 +182 +182 +182 +182 +183 +181 +183 +182 +182 +182 +182 +182 +182 +181 +182 +182 +12 +10 +11 +10 +11 +11 +10 +182 +182 +181 +182 +182 +182 +183 +182 +182 +182 +182 +182 +182 +181 +182 +182 +182 +182 +182 +182 +182 +182 +183 +182 +182 +12 +11 +11 +11 +10 +11 +11 +182 +182 +183 +182 +183 +182 +183 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +181 +183 +180 +183 +182 +182 +183 +182 +11 +11 +10 +11 +11 +11 +11 +182 +182 +182 +182 +182 +182 +183 +182 +183 +182 +182 +182 +182 +181 +182 +182 +182 +182 +182 +182 +183 +182 +182 +182 +182 +12 +10 +10 +11 +11 +11 +10 +182 +182 +183 +181 +183 +182 +183 +182 +184 +182 +182 +183 +183 +180 +182 +182 +182 +183 +182 +182 +182 +183 +182 +186 +182 +12 +12 +10 +12 +11 +11 +11 +182 +188 +181 +183 +182 +182 +179 +182 +183 +183 +182 +189 +182 +182 +182 +182 +181 +182 +183 +182 +183 +183 +181 +180 +182 +10 +9 +10 +11 +11 +11 +9 +182 +181 +181 +183 +181 +183 +183 +182 +183 +181 +182 +182 +181 +182 +183 +183 +184 +182 +182 +182 +181 +182 +181 +182 +182 +12 +11 +11 +10 +10 +10 +10 +182 +183 +183 +180 +182 +182 +180 +181 +182 +182 +183 +183 +182 +182 +183 +183 +183 +183 +182 +182 +182 +182 +181 +181 +183 +181 +182 +181 +183 +182 +183 +182 +182 +182 +11 +10 +11 +11 +11 +10 +11 +182 +184 +183 +184 +182 +183 +181 +183 +183 +180 +182 +181 +182 +182 +182 +182 +180 +180 +182 +181 +182 +181 +182 +183 +184 +13 +11 +10 +10 +10 +10 +10 +181 +183 +182 +186 +184 +183 +181 +183 +182 +182 +182 +182 +182 +182 +183 +179 +182 +182 +183 +182 +182 +182 +182 +183 +182 +10 +10 +11 +11 +183 +182 +182 +182 +180 +181 +183 +182 +182 +183 +182 +182 +182 +181 +182 +185 +183 +183 +182 +12 +10 +10 +10 +9 +11 +11 +183 +183 +182 +183 +182 +182 +180 +182 +182 +183 +182 +180 +182 +181 +181 +184 +182 +183 +183 +181 +182 +183 +181 +184 +183 +12 +14 +10 +12 +9 +9 +11 +183 +183 +183 +181 +183 +181 +181 +183 +182 +183 +183 +181 +181 +181 +182 +182 +183 +183 +182 +182 +182 +182 +183 +181 +182 +12 +12 +12 +12 +11 +11 +10 +181 +182 +183 +183 +184 +182 +182 +181 +182 +181 +183 +183 +182 +182 +178 +182 +183 +182 +180 +181 +181 +182 +183 +182 +184 +13 +9 +10 +10 +13 +12 +12 +182 +182 +183 +182 +183 +182 +181 +183 +182 +182 +183 +182 +183 +182 +182 +183 +183 +182 +181 +182 +181 +182 +182 +185 +183 +14 +10 +11 +9 +9 +10 +10 +183 +183 +183 +183 +182 +183 +182 +182 +183 +182 +182 +181 +181 +182 +183 +182 +182 +182 +182 +183 +181 +182 +183 +183 +181 +12 +11 +10 +11 +11 +10 +10 +183 +182 +181 +183 +182 +183 +183 +183 +183 +184 +182 +182 +182 +182 +182 +181 +183 +183 +182 +183 +182 +183 +182 +182 +182 +13 +10 +11 +11 +11 +11 +10 +182 +182 +182 +183 +184 +183 +184 +182 +185 +183 +182 +182 +181 +182 +181 +182 +183 +182 +181 +182 +183 +183 +183 +182 +182 +11 +11 +11 +10 +8 +8 +10 +182 +182 +183 +183 +183 +182 +182 +182 +182 +182 +182 +181 +182 +185 +182 +182 +182 +182 +182 +182 +184 +182 +182 +182 +182 +13 +10 +11 +12 +10 +10 +11 +181 +182 +182 +183 +183 +11 +12 +10 +11 +183 +182 +182 +182 +182 +183 +183 +183 +183 +182 +182 +183 +183 +182 +182 +182 +181 +181 +182 +182 +181 +184 +182 +182 +182 +12 +11 +11 +11 +11 +11 +10 +182 +181 +182 +184 +183 +182 +181 +182 +183 +183 +183 +184 +182 +182 +182 +182 +182 +183 +182 +183 +183 +183 +182 +182 +183 +13 +11 +11 +11 +10 +10 +11 +183 +182 +181 +182 +182 +181 +182 +182 +182 +182 +183 +183 +183 +182 +182 +182 +183 +183 +181 +182 +181 +11 +10 +180 +181 +182 +181 +183 +182 +182 +182 +182 +183 +182 +182 +182 +181 +182 +182 +180 +180 +182 +181 +182 +182 +183 +182 +182 +12 +10 +11 +10 +10 +11 +11 +182 +183 +183 +182 +183 +181 +183 +182 +181 +182 +181 +181 +183 +182 +182 +182 +182 +182 +182 +183 +183 +183 +182 +183 +181 +10 +11 +9 +11 +10 +10 +10 +183 +182 +182 +183 +183 +182 +182 +181 +182 +183 +182 +182 +181 +183 +182 +181 +182 +182 +182 +182 +183 +185 +184 +183 +184 +9 +11 +9 +10 +10 +11 +10 +182 +182 +182 +182 +183 +182 +183 +182 +182 +183 +184 +182 +182 +183 +181 +181 +182 +181 +181 +182 +182 +183 +182 +182 +182 +12 +10 +7 +10 +8 +10 +10 +181 +181 +182 +182 +180 +183 +183 +183 +183 +182 +182 +182 +181 +180 +182 +182 +182 +184 +182 +183 +182 +183 +182 +183 +183 +12 +11 +7 +9 +10 +10 +8 +181 +182 +182 +183 +184 +186 +182 +181 +179 +182 +186 +182 +182 +183 +182 +186 +182 +182 +182 +182 +185 +181 +182 +183 +184 +12 +11 +12 +10 +10 +9 +11 +182 +182 +181 +181 +181 +182 +181 +182 +182 +182 +184 +183 +182 +182 +183 +182 +182 +182 +178 +183 +181 +182 +182 +182 +182 +12 +11 +11 +11 +11 +10 +11 +182 +183 +181 +183 +182 +182 +181 +181 +183 +181 +183 +182 +183 +183 +182 +182 +182 +182 +184 +183 +183 +182 +182 +182 +181 +12 +10 +11 +11 +11 +12 +10 +183 +182 +182 +182 +182 +182 +182 +182 +185 +183 +181 +182 +182 +182 +181 +182 +183 +184 +183 +184 +182 +183 +182 +182 +182 +11 +10 +10 +186 +182 +182 +183 +182 +182 +12 +10 +10 +11 +11 +11 +11 +182 +181 +181 +183 +184 +182 +182 +183 +182 +183 +183 +178 +182 +181 +182 +182 +186 +183 +184 +182 +182 +182 +186 +182 +182 +11 +12 +12 +10 +10 +10 +11 +183 +184 +182 +181 +183 +182 +183 +183 +182 +181 +181 +183 +182 +181 +182 +183 +183 +182 +180 +182 +182 +182 +183 +181 +182 +11 +10 +11 +11 +11 +8 +10 +182 +182 +183 +183 +182 +181 +183 +183 +182 +182 +182 +181 +182 +184 +183 +182 +11 +10 +11 +11 +12 +11 +11 +182 +181 +183 +182 +183 +181 +182 +182 +181 +183 +184 +181 +182 +182 +180 +182 +183 +183 +183 +181 +183 +182 +182 +181 +183 +11 +11 +12 +12 +10 +9 +10 +181 +183 +183 +181 +180 +182 +182 +184 +183 +182 +182 +182 +183 +183 +182 +181 +182 +182 +181 +181 +182 +183 +184 +182 +185 +11 +10 +10 +11 +11 +10 +11 +182 +182 +182 +182 +182 +183 +182 +182 +182 +184 +182 +183 +182 +181 +183 +182 +182 +183 +186 +181 +182 +181 +182 +183 +181 +11 +9 +12 +11 +11 +11 +7 +182 +182 +181 +183 +181 +181 +182 +183 +182 +180 +183 +182 +183 +183 +182 +182 +182 +182 +182 +183 +182 +183 +182 +182 +182 +10 +10 +11 +12 +11 +11 +11 +182 +181 +183 +182 +182 +181 +181 +182 +183 +183 +183 +183 +182 +182 +182 +183 +183 +181 +182 +182 +182 +183 +182 +181 +183 +11 +11 +11 +9 +11 +9 +11 +182 +181 +182 +182 +182 +182 +182 +183 +181 +183 +183 +182 +183 +181 +182 +182 +183 +183 +182 +183 +181 +184 +183 +184 +182 +11 +11 +11 +11 +12 +11 +11 +181 +182 +182 +182 +182 +183 +183 +182 +182 +183 +181 +181 +183 +182 +182 +182 +182 +181 +183 +180 +180 +182 +182 +183 +182 +13 +10 +11 +11 +10 +11 +9 +183 +182 +181 +183 +182 +183 +182 +181 +182 +182 +184 +183 +182 +182 +182 +182 +183 +183 +182 +182 +181 +183 +183 +184 +182 +12 +10 +11 +12 +11 +11 +10 +182 +182 +182 +182 +183 +183 +182 +182 +182 +182 +180 +182 +182 +183 +182 +182 +182 +183 +183 +181 +182 +183 +184 +182 +183 +182 +181 +183 +184 +182 +182 +182 +181 +183 +13 +9 +8 +11 +11 +11 +11 +184 +184 +182 +183 +183 +182 +182 +182 +183 +183 +182 +182 +181 +184 +182 +182 +181 +182 +182 +183 +184 +182 +182 +182 +182 +12 +11 +11 +9 +10 +10 +11 +183 +183 +182 +181 +183 +183 +182 +182 +182 +183 +182 +181 +183 +182 +182 +182 +183 +182 +182 +182 +183 +181 +182 +182 +182 +12 +10 +10 +10 +12 +10 +12 +182 +181 +182 +179 +181 +182 +181 +182 +181 +183 +182 +184 +183 +184 +181 +177 +12 +11 +11 +10 +11 +11 +11 +182 +182 +182 +183 +182 +182 +183 +182 +182 +182 +183 +182 +182 +182 +182 +182 +183 +182 +184 +182 +182 +182 +182 +182 +182 +11 +10 +11 +11 +15 +10 +10 +182 +182 +183 +183 +183 +181 +182 +182 +183 +182 +180 +180 +182 +183 +183 +183 +183 +181 +183 +182 +182 +181 +182 +185 +182 +12 +10 +11 +11 +10 +10 +9 +181 +183 +182 +182 +182 +183 +182 +183 +183 +183 +181 +181 +182 +182 +183 +182 +182 +182 +182 +183 +182 +181 +183 +183 +182 +12 +11 +10 +15 +11 +12 +11 +182 +182 +183 +180 +181 +182 +183 +183 +182 +182 +181 +182 +183 +184 +182 +183 +181 +182 +182 +183 +183 +183 +185 +182 +183 +12 +9 +11 +11 +11 +11 +9 +181 +183 +182 +183 +182 +182 +182 +184 +182 +184 +182 +181 +182 +182 +181 +182 +182 +182 +184 +182 +183 +182 +182 +182 +181 +12 +11 +10 +10 +11 +12 +11 +183 +180 +184 +184 +180 +182 +182 +183 +182 +181 +182 +183 +183 +182 +182 +181 +183 +183 +184 +182 +181 +183 +182 +183 +183 +11 +9 +11 +11 +11 +10 +9 +182 +183 +183 +182 +182 +182 +182 +182 +183 +182 +180 +182 +182 +183 +183 +182 +181 +182 +182 +183 +182 +183 +182 +182 +182 +10 +10 +11 +12 +11 +10 +10 +182 +183 +185 +182 +182 +181 +181 +182 +183 +181 +181 +182 +183 +182 +183 +182 +182 +183 +182 +180 +182 +182 +182 +182 +182 +11 +11 +9 +11 +11 +11 +10 +182 +184 +184 +182 +183 +182 +182 +182 +182 +182 +184 +181 +182 +182 +182 +182 +182 +180 +183 +182 +183 +183 +181 +182 +182 +183 +183 +184 +182 +182 +183 +182 +182 +181 +12 +11 +11 +12 +11 +10 +10 +183 +183 +181 +180 +182 +184 +182 +182 +182 +182 +182 +182 +182 +181 +182 +183 +183 +179 +181 +182 +182 +182 +182 +182 +181 +11 +11 +11 +11 +9 +10 +11 +184 +185 +182 +182 +183 +183 +182 +183 +183 +183 +182 +182 +181 +181 +181 +182 +182 +182 +179 +182 +183 +181 +182 +183 +181 +183 +183 +183 +182 +182 +183 +182 +182 +181 +181 +183 +181 +181 +180 +184 +181 +180 +182 +183 +185 +181 +182 +182 +14 +12 +12 +10 +11 +11 +11 +182 +183 +182 +183 +182 +183 +184 +182 +181 +181 +182 +184 +183 +182 +181 +182 +184 +183 +183 +182 +179 +182 +182 +182 +181 +10 +12 +11 +10 +10 +10 +8 +182 +183 +182 +181 +182 +181 +181 +182 +182 +184 +183 +181 +182 +181 +183 +182 +180 +182 +183 +183 +182 +182 +181 +182 +183 +12 +10 +9 +11 +10 +11 +11 +181 +181 +183 +184 +182 +182 +182 +182 +183 +182 +182 +182 +182 +182 +182 +183 +184 +182 +181 +182 +181 +182 +182 +180 +180 +12 +11 +11 +10 +10 +11 +10 +182 +183 +182 +182 +182 +182 +183 +183 +182 +182 +181 +184 +184 +183 +183 +181 +181 +182 +183 +182 +183 +182 +182 +182 +182 +10 +10 +11 +11 +11 +10 +11 +182 +182 +184 +183 +183 +181 +182 +181 +182 +183 +181 +182 +181 +183 +182 +182 +183 +182 +182 +183 +182 +183 +183 +182 +181 +12 +11 +13 +11 +12 +10 +9 +182 +181 +182 +182 +181 +182 +182 +182 +182 +182 +182 +177 +184 +182 +181 +183 +182 +183 +183 +181 +181 +183 +182 +183 +181 +12 +11 +11 +11 +9 +11 +11 +182 +182 +182 +182 +182 +183 +182 +182 +182 +182 +182 +183 +183 +183 +185 +182 +182 +182 +183 +183 +183 +183 +183 +182 +181 +11 +10 +11 +11 +12 +10 +10 +182 +184 +183 +182 +182 +182 +183 +182 +182 +182 +181 +182 +182 +181 +182 +183 +182 +182 +182 +182 +182 +183 +183 +182 +182 +11 +12 +11 +10 +10 +10 +11 +182 +183 +13 +11 +11 +10 +10 +12 +12 +182 +184 +182 +181 +182 +182 +182 +182 +181 +184 +184 +182 +184 +182 +183 +183 +183 +182 +182 +183 +181 +182 +182 +181 +183 +11 +9 +11 +11 +10 +11 +10 +182 +183 +182 +182 +181 +181 +183 +183 +182 +182 +181 +182 +183 +183 +182 +181 +182 +183 +184 +182 +182 +183 +182 +182 +183 +12 +11 +12 +10 +11 +7 +10 +182 +181 +182 +180 +182 +183 +181 +181 +183 +183 +181 +182 +182 +182 +181 +182 +12 +11 +10 +9 +10 +10 +12 +181 +182 +181 +182 +183 +181 +182 +182 +183 +182 +181 +182 +183 +183 +185 +181 +182 +182 +183 +183 +182 +182 +183 +182 +182 +11 +10 +10 +12 +10 +11 +11 +183 +182 +184 +185 +181 +181 +182 +183 +181 +181 +182 +182 +181 +182 +183 +182 +181 +183 +182 +181 +180 +181 +182 +183 +180 +12 +11 +9 +9 +11 +12 +10 +181 +183 +182 +182 +183 +183 +182 +182 +182 +183 +181 +182 +182 +183 +181 +183 +187 +183 +182 +182 +182 +183 +184 +182 +184 +11 +10 +11 +12 +11 +11 +10 +182 +182 +182 +182 +183 +182 +183 +182 +180 +183 +183 +182 +181 +182 +182 +184 +182 +184 +182 +181 +182 +182 +182 +182 +181 +12 +12 +12 +11 +11 +11 +11 +181 +183 +183 +183 +182 +181 +182 +182 +183 +183 +182 +182 +183 +183 +181 +181 +182 +182 +183 +181 +181 +182 +182 +182 +181 +12 +10 +11 +10 +11 +11 +10 +182 +181 +182 +182 +182 +182 +183 +184 +182 +182 +182 +182 +182 +182 +182 +182 +181 +183 +183 +181 +181 +182 +183 +182 +181 +12 +9 +11 +12 +10 +10 +8 +182 +183 +183 +183 +181 +183 +182 +182 +182 +183 +184 +183 +182 +182 +183 +183 +182 +183 +182 +182 +182 +182 +183 +182 +181 +12 +11 +11 +11 +11 +11 +10 +182 +182 +181 +181 +183 +177 +181 +182 +181 +184 +182 +182 +181 +183 +183 +184 +184 +181 +181 +182 +182 +182 +182 +182 +184 +11 +10 +10 +10 +11 +15 +10 +182 +183 +183 +182 +182 +183 +182 +183 +182 +181 +183 +181 +182 +183 +182 +182 +182 +182 +180 +183 +183 +181 +180 +182 +182 +183 +181 +182 +182 +183 +184 +182 +181 +182 +11 +12 +11 +11 +10 +11 +12 +183 +181 +181 +182 +182 +182 +182 +182 +182 +182 +182 +184 +182 +181 +182 +182 +182 +183 +181 +182 +183 +186 +183 +182 +182 +11 +11 +11 +10 +10 +11 +11 +181 +183 +183 +182 +182 +182 +182 +182 +183 +181 +180 +183 +182 +184 +182 +182 +181 +182 +183 +181 +183 +182 +183 +180 +183 +12 +10 +10 +11 +12 +10 +10 +181 +182 +183 +184 +183 +181 +182 +183 +182 +181 +182 +182 +181 +182 +179 +180 +12 +11 +11 +10 +11 +10 +13 +182 +181 +181 +181 +181 +182 +182 +182 +182 +182 +183 +181 +182 +182 +179 +182 +182 +183 +184 +180 +181 +182 +183 +182 +184 +11 +10 +10 +10 +10 +10 +10 +182 +182 +182 +182 +182 +183 +182 +180 +182 +183 +182 +181 +181 +181 +181 +183 +183 +181 +182 +182 +182 +181 +181 +182 +181 +10 +10 +10 +9 +11 +10 +10 +182 +182 +182 +181 +183 +184 +182 +182 +184 +183 +182 +180 +182 +182 +182 +183 +184 +182 +181 +183 +185 +183 +183 +182 +184 +12 +10 +11 +11 +11 +11 +11 +181 +182 +183 +182 +183 +182 +183 +181 +183 +182 +183 +182 +182 +182 +182 +182 +181 +182 +183 +183 +183 +182 +181 +182 +181 +13 +12 +8 +10 +10 +11 +10 +183 +184 +182 +183 +182 +182 +183 +183 +182 +182 +181 +181 +183 +183 +182 +181 +182 +182 +183 +183 +182 +182 +183 +182 +182 +12 +11 +11 +11 +10 +11 +10 +181 +182 +182 +181 +182 +186 +183 +183 +181 +181 +183 +183 +182 +182 +182 +181 +182 +182 +182 +183 +184 +183 +182 +177 +181 +13 +11 +10 +10 +10 +11 +11 +182 +182 +181 +182 +183 +182 +183 +182 +182 +182 +182 +180 +182 +182 +182 +181 +183 +182 +183 +184 +182 +179 +182 +182 +185 +11 +12 +10 +11 +10 +11 +10 +182 +181 +182 +182 +182 +182 +183 +183 +182 +182 +183 +182 +183 +183 +182 +181 +183 +183 +182 +180 +182 +183 +182 +183 +182 +13 +11 +10 +11 +10 +11 +11 +181 +181 +183 +184 +182 +182 +183 +183 +184 +183 +182 +182 +182 +182 +182 +182 +182 +181 +183 +182 +182 +182 +182 +182 +181 +182 +182 +182 +182 +184 +182 +183 +181 +182 +12 +12 +10 +10 +10 +10 +12 +182 +183 +183 +184 +185 +182 +182 +182 +179 +182 +182 +181 +182 +181 +182 +182 +184 +182 +184 +181 +181 +182 +181 +182 +184 +12 +10 +11 +11 +11 +11 +11 +182 +182 +182 +183 +181 +181 +183 +183 +181 +182 +182 +182 +182 +182 +176 +181 +182 +182 +184 +182 +182 +181 +182 +182 +182 +11 +9 +10 +181 +182 +183 +182 +183 +181 +182 +183 +182 +182 +183 +183 +188 +183 +182 +181 +183 +186 +182 +183 +12 +11 +12 +10 +11 +10 +11 +182 +180 +183 +183 +182 +182 +183 +182 +182 +183 +182 +183 +185 +183 +184 +183 +181 +182 +183 +181 +181 +183 +181 +181 +180 +12 +10 +11 +11 +10 +10 +10 +182 +182 +181 +181 +182 +182 +183 +183 +182 +182 +182 +182 +184 +182 +182 +181 +180 +183 +182 +180 +182 +181 +181 +182 +182 +12 +11 +10 +11 +10 +12 +11 +182 +181 +182 +183 +182 +182 +182 +181 +182 +182 +183 +183 +182 +182 +183 +182 +181 +182 +181 +183 +183 +184 +182 +183 +183 +11 +10 +10 +10 +11 +10 +10 +182 +182 +182 +182 +182 +182 +182 +183 +183 +182 +182 +182 +185 +183 +179 +183 +182 +181 +182 +183 +184 +182 +182 +182 +181 +13 +12 +10 +11 +11 +11 +10 +181 +183 +181 +183 +183 +182 +181 +181 +183 +182 +183 +181 +181 +183 +183 +183 +183 +185 +183 +183 +182 +182 +182 +182 +182 +13 +12 +10 +10 +10 +11 +11 +182 +183 +181 +181 +183 +183 +181 +181 +183 +182 +183 +182 +182 +179 +182 +183 +184 +181 +181 +182 +182 +183 +183 +182 +181 +12 +11 +10 +10 +10 +11 +10 +182 +182 +182 +183 +182 +182 +182 +181 +182 +183 +180 +182 +183 +182 +183 +181 +179 +180 +183 +183 +184 +182 +182 +183 +182 +12 +11 +11 +10 +11 +11 +11 +182 +181 +182 +182 +183 +185 +182 +182 +183 +183 +183 +183 +185 +182 +182 +183 +182 +182 +184 +182 +182 +182 +182 +183 +183 +12 +12 +10 +11 +10 +11 +12 +181 +181 +182 +182 +182 +182 +10 +10 +9 +182 +183 +181 +180 +182 +182 +183 +182 +182 +181 +183 +182 +185 +182 +184 +182 +182 +178 +183 +182 +182 +182 +184 +185 +182 +12 +10 +9 +11 +12 +11 +10 +182 +182 +182 +180 +182 +182 +182 +182 +183 +182 +182 +182 +182 +182 +182 +183 +182 +182 +183 +182 +182 +181 +183 +182 +183 +12 +10 +10 +10 +11 +10 +11 +183 +180 +183 +182 +182 +183 +185 +181 +181 +182 +184 +182 +183 +182 +182 +183 +181 +182 +10 +10 +12 +10 +10 +181 +181 +183 +183 +182 +181 +182 +182 +183 +183 +180 +180 +182 +182 +182 +181 +182 +181 +181 +181 +181 +182 +183 +182 +182 +11 +10 +10 +10 +10 +10 +11 +181 +181 +182 +182 +182 +181 +182 +179 +181 +181 +183 +183 +182 +179 +182 +183 +183 +181 +180 +181 +181 +182 +183 +181 +181 +11 +11 +10 +10 +10 +10 +12 +182 +181 +182 +181 +182 +181 +182 +182 +182 +182 +183 +183 +182 +181 +182 +181 +182 +184 +185 +182 +179 +182 +182 +183 +182 +12 +10 +13 +12 +13 +10 +8 +186 +182 +182 +183 +182 +178 +182 +182 +181 +183 +184 +182 +181 +182 +183 +183 +182 +182 +182 +183 +183 +182 +182 +183 +182 +11 +11 +10 +10 +10 +10 +10 +182 +183 +181 +182 +181 +182 +183 +182 +182 +183 +184 +182 +183 +182 +181 +183 +184 +181 +181 +182 +182 +182 +181 +182 +181 +12 +11 +11 +10 +10 +12 +12 +181 +181 +182 +182 +184 +182 +182 +182 +182 +181 +182 +182 +182 +181 +182 +183 +183 +182 +182 +181 +184 +182 +182 +182 +181 +11 +11 +12 +11 +11 +10 +9 +182 +184 +182 +181 +182 +183 +183 +181 +182 +182 +184 +182 +183 +182 +182 +183 +183 +181 +180 +182 +182 +182 +182 +181 +182 +12 +10 +10 +12 +12 +11 +11 +182 +181 +182 +183 +183 +182 +182 +184 +184 +182 +183 +182 +182 +183 +184 +181 +181 +182 +182 +182 +181 +182 +180 +183 +183 +12 +10 +9 +10 +10 +11 +10 +182 +182 +182 +182 +182 +182 +183 +181 +182 +181 +182 +183 +181 +182 +182 +183 +179 +182 +181 +182 +182 +182 +181 +183 +182 +11 +11 +10 +10 +182 +182 +182 +183 +183 +12 +11 +10 +9 +12 +11 +9 +181 +181 +183 +183 +184 +181 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +184 +183 +183 +181 +181 +182 +182 +12 +11 +11 +10 +10 +12 +11 +183 +182 +182 +182 +182 +182 +182 +182 +183 +180 +182 +182 +184 +182 +183 +182 +181 +183 +183 +186 +182 +182 +181 +182 +185 +11 +10 +12 +10 +10 +10 +10 +182 +181 +182 +182 +182 +182 +181 +182 +183 +182 +183 +182 +181 +183 +181 +181 +12 +11 +12 +10 +11 +10 +9 +184 +183 +183 +182 +183 +182 +183 +182 +181 +182 +183 +182 +182 +182 +182 +183 +182 +182 +182 +182 +183 +182 +182 +183 +182 +11 +11 +12 +9 +8 +8 +11 +183 +181 +182 +182 +183 +182 +180 +180 +181 +182 +183 +183 +181 +182 +182 +184 +182 +182 +182 +182 +183 +183 +182 +181 +182 +11 +11 +10 +10 +11 +12 +10 +174 +182 +182 +181 +184 +181 +181 +182 +182 +181 +179 +183 +182 +182 +182 +183 +183 +181 +183 +184 +182 +182 +182 +181 +182 +11 +10 +10 +8 +11 +11 +10 +181 +182 +183 +182 +184 +181 +181 +183 +184 +181 +182 +183 +182 +182 +182 +182 +182 +182 +182 +183 +182 +182 +183 +182 +182 +12 +8 +10 +12 +11 +10 +9 +182 +182 +184 +182 +182 +183 +182 +181 +182 +182 +181 +182 +181 +185 +182 +182 +182 +186 +183 +183 +182 +181 +180 +183 +182 +12 +9 +8 +11 +11 +11 +11 +182 +182 +182 +183 +182 +182 +179 +182 +183 +182 +182 +182 +183 +183 +182 +183 +182 +181 +183 +182 +183 +182 +183 +182 +182 +12 +11 +12 +12 +10 +9 +11 +182 +180 +183 +182 +181 +182 +183 +181 +180 +182 +182 +183 +182 +182 +182 +183 +184 +182 +182 +184 +182 +180 +183 +183 +183 +11 +10 +11 +11 +10 +10 +11 +184 +181 +181 +182 +182 +182 +182 +181 +181 +182 +183 +182 +182 +181 +182 +183 +185 +182 +182 +182 +182 +183 +183 +182 +182 +12 +11 +11 +11 +10 +11 +11 +182 +181 +182 +183 +184 +182 +181 +182 +183 +182 +183 +182 +182 +183 +183 +182 +181 +181 +183 +182 +182 +181 +182 +183 +184 +182 +180 +182 +182 +182 +181 +182 +183 +184 +11 +11 +11 +11 +11 +11 +10 +182 +182 +182 +181 +182 +182 +184 +181 +182 +182 +183 +181 +182 +183 +181 +182 +183 +185 +181 +182 +182 +183 +182 +183 +182 +11 +11 +12 +11 +10 +11 +12 +182 +182 +182 +182 +182 +182 +180 +182 +183 +183 +181 +182 +182 +184 +181 +182 +181 +182 +182 +183 +182 +182 +181 +181 +183 +13 +10 +11 +7 +10 +13 +183 +183 +182 +180 +182 +181 +184 +183 +182 +180 +182 +182 +182 +183 +182 +181 +183 +13 +12 +10 +10 +10 +11 +10 +182 +182 +181 +181 +183 +183 +181 +182 +181 +183 +182 +182 +182 +183 +182 +182 +183 +183 +182 +182 +183 +181 +182 +180 +184 +12 +10 +9 +11 +11 +11 +11 +181 +182 +182 +182 +182 +182 +181 +183 +184 +183 +182 +182 +180 +183 +183 +183 +182 +182 +183 +183 +182 +183 +182 +182 +181 +12 +11 +11 +10 +10 +10 +11 +182 +181 +182 +181 +182 +183 +182 +181 +181 +183 +183 +182 +181 +181 +182 +182 +181 +182 +182 +182 +182 +183 +183 +180 +182 +13 +9 +10 +10 +10 +10 +11 +182 +182 +179 +182 +183 +182 +182 +182 +183 +182 +183 +181 +182 +182 +181 +183 +182 +182 +183 +182 +181 +182 +183 +183 +182 +10 +10 +10 +11 +11 +10 +11 +182 +183 +183 +182 +182 +182 +182 +181 +184 +183 +182 +182 +181 +182 +183 +182 +183 +181 +182 +182 +183 +182 +182 +182 +182 +12 +11 +10 +10 +11 +10 +12 +182 +183 +183 +183 +184 +182 +182 +182 +182 +179 +183 +183 +182 +183 +182 +182 +182 +183 +182 +183 +182 +181 +182 +182 +183 +10 +8 +10 +11 +11 +10 +11 +181 +182 +183 +182 +182 +182 +183 +182 +182 +181 +183 +182 +183 +182 +180 +183 +182 +182 +182 +183 +181 +183 +182 +180 +181 +11 +11 +9 +10 +11 +11 +12 +181 +181 +179 +183 +182 +182 +182 +182 +185 +182 +181 +182 +181 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +181 +12 +11 +11 +9 +12 +11 +10 +182 +182 +182 +182 +182 +182 +180 +183 +182 +183 +181 +184 +182 +182 +182 +183 +184 +182 +181 +183 +183 +181 +182 +183 +183 +182 +182 +182 +182 +182 +182 +182 +182 +182 +11 +11 +11 +11 +11 +11 +10 +180 +179 +182 +182 +182 +183 +182 +183 +182 +181 +182 +183 +182 +182 +181 +182 +182 +182 +183 +183 +182 +182 +182 +180 +180 +12 +10 +12 +12 +11 +11 +11 +181 +183 +182 +182 +182 +184 +182 +182 +182 +183 +182 +181 +182 +181 +182 +183 +182 +183 +181 +182 +181 +13 +9 +181 +181 +186 +182 +182 +182 +184 +183 +181 +182 +180 +184 +183 +182 +182 +182 +183 +186 +182 +182 +182 +182 +183 +181 +181 +12 +13 +11 +10 +10 +10 +10 +183 +182 +181 +182 +182 +181 +181 +182 +182 +182 +182 +181 +182 +182 +183 +184 +181 +181 +183 +183 +182 +181 +185 +182 +183 +12 +10 +8 +10 +10 +10 +10 +180 +183 +182 +182 +181 +183 +181 +181 +182 +183 +181 +181 +182 +183 +182 +182 +182 +183 +181 +181 +183 +183 +183 +181 +182 +12 +11 +10 +10 +10 +11 +11 +181 +182 +183 +182 +182 +182 +182 +183 +182 +182 +182 +183 +181 +181 +183 +183 +184 +181 +182 +182 +182 +182 +182 +181 +182 +12 +10 +10 +10 +11 +10 +8 +180 +182 +183 +182 +181 +182 +183 +184 +182 +181 +182 +182 +183 +181 +181 +183 +185 +182 +183 +183 +182 +183 +183 +182 +181 +12 +11 +9 +9 +10 +11 +11 +181 +182 +182 +182 +182 +179 +180 +182 +182 +182 +183 +182 +182 +182 +182 +181 +182 +183 +184 +182 +182 +182 +182 +182 +183 +11 +11 +11 +10 +11 +12 +13 +181 +182 +182 +184 +182 +183 +182 +181 +184 +183 +182 +182 +182 +182 +182 +182 +181 +181 +183 +183 +182 +183 +183 +182 +182 +12 +10 +11 +11 +12 +12 +11 +182 +182 +182 +183 +182 +181 +183 +183 +182 +181 +182 +182 +182 +182 +182 +183 +182 +182 +182 +183 +183 +181 +181 +182 +183 +12 +9 +10 +11 +13 +10 +10 +182 +183 +184 +183 +182 +181 +182 +183 +182 +182 +182 +182 +183 +183 +182 +182 +182 +184 +180 +181 +182 +184 +182 +181 +182 +13 +11 +11 +11 +11 +10 +10 +181 +184 +14 +11 +11 +11 +10 +10 +11 +183 +182 +182 +182 +181 +183 +182 +183 +183 +183 +183 +182 +182 +182 +182 +182 +177 +183 +182 +182 +182 +182 +182 +182 +182 +12 +10 +11 +11 +11 +12 +11 +182 +182 +181 +183 +182 +183 +183 +182 +183 +180 +182 +183 +182 +181 +182 +184 +182 +181 +182 +180 +182 +182 +182 +183 +181 +11 +10 +11 +10 +10 +11 +11 +182 +180 +182 +182 +182 +181 +182 +180 +179 +181 +182 +183 +180 +182 +182 +182 +11 +11 +11 +10 +11 +10 +11 +182 +183 +182 +181 +181 +182 +182 +183 +184 +182 +182 +182 +181 +182 +182 +183 +184 +184 +183 +182 +183 +182 +183 +182 +182 +12 +11 +10 +9 +8 +13 +10 +183 +184 +182 +183 +182 +180 +182 +182 +183 +185 +182 +182 +182 +182 +182 +180 +180 +181 +182 +183 +183 +182 +182 +184 +181 +13 +11 +13 +11 +12 +10 +9 +182 +181 +182 +182 +182 +182 +183 +182 +183 +183 +182 +182 +181 +181 +183 +182 +185 +183 +184 +182 +182 +185 +182 +183 +181 +13 +9 +11 +10 +11 +10 +11 +183 +182 +182 +183 +183 +182 +181 +183 +182 +182 +182 +182 +183 +183 +183 +182 +176 +183 +182 +183 +182 +182 +182 +182 +183 +11 +10 +11 +12 +10 +10 +12 +181 +182 +183 +182 +182 +184 +182 +182 +182 +182 +182 +182 +182 +183 +183 +183 +182 +182 +182 +182 +182 +183 +182 +182 +182 +11 +9 +11 +12 +10 +12 +10 +182 +182 +181 +182 +182 +182 +182 +182 +183 +182 +182 +181 +182 +183 +183 +184 +183 +182 +182 +181 +181 +182 +182 +185 +184 +13 +10 +11 +11 +9 +12 +11 +182 +183 +181 +180 +182 +182 +183 +184 +182 +183 +181 +181 +182 +182 +182 +182 +183 +182 +182 +182 +182 +182 +183 +182 +180 +12 +10 +11 +12 +11 +11 +10 +181 +182 +182 +182 +183 +184 +182 +184 +181 +182 +183 +182 +182 +183 +183 +182 +182 +182 +181 +181 +182 +185 +183 +183 +185 +12 +11 +10 +10 +11 +11 +11 +182 +183 +182 +182 +182 +182 +180 +182 +183 +183 +181 +180 +181 +182 +183 +183 +183 +182 +182 +181 +182 +183 +183 +184 +183 +182 +182 +181 +180 +180 +183 +183 +183 +183 +12 +11 +11 +11 +12 +11 +12 +182 +182 +181 +182 +183 +182 +183 +182 +182 +184 +183 +183 +183 +181 +182 +181 +182 +183 +182 +181 +182 +182 +182 +182 +184 +13 +12 +10 +11 +9 +8 +11 +182 +183 +183 +182 +183 +182 +181 +182 +182 +183 +182 +182 +182 +182 +182 +184 +180 +181 +182 +183 +183 +182 +182 +182 +183 +13 +10 +10 +10 +9 +11 +10 +182 +182 +183 +182 +182 +182 +181 +180 +176 +183 +182 +182 +183 +181 +183 +183 +11 +11 +10 +11 +10 +10 +12 +183 +182 +182 +182 +180 +183 +181 +182 +184 +183 +179 +182 +181 +183 +183 +183 +182 +183 +182 +183 +182 +182 +180 +182 +182 +11 +10 +10 +11 +13 +11 +10 +183 +181 +182 +182 +183 +183 +182 +183 +185 +182 +183 +183 +183 +182 +182 +181 +179 +182 +182 +184 +183 +181 +183 +184 +180 +13 +9 +9 +10 +11 +10 +9 +182 +181 +182 +182 +184 +182 +183 +181 +183 +182 +181 +181 +181 +183 +184 +183 +183 +182 +181 +182 +182 +182 +183 +181 +182 +14 +10 +10 +8 +10 +10 +10 +181 +180 +183 +182 +183 +184 +182 +183 +182 +182 +181 +183 +183 +183 +182 +182 +182 +182 +182 +182 +178 +181 +182 +183 +181 +11 +11 +10 +10 +10 +10 +12 +183 +182 +182 +182 +181 +181 +182 +182 +184 +183 +182 +182 +182 +183 +183 +182 +182 +182 +181 +180 +180 +182 +182 +182 +182 +11 +10 +11 +11 +10 +9 +10 +182 +183 +182 +182 +182 +182 +182 +182 +180 +183 +182 +183 +183 +182 +182 +183 +182 +180 +182 +182 +183 +183 +184 +183 +184 +11 +10 +10 +10 +10 +10 +12 +183 +182 +183 +182 +181 +182 +182 +181 +182 +182 +182 +182 +183 +181 +182 +183 +182 +186 +184 +182 +183 +182 +185 +183 +182 +10 +10 +9 +10 +10 +11 +12 +183 +183 +182 +182 +181 +181 +182 +183 +185 +183 +182 +182 +183 +182 +183 +180 +181 +182 +182 +183 +182 +182 +182 +181 +182 +12 +11 +11 +9 +8 +10 +10 +182 +184 +182 +182 +182 +182 +182 +183 +183 +182 +182 +182 +181 +182 +182 +183 +183 +183 +183 +183 +182 +181 +182 +182 +180 +182 +183 +183 +184 +183 +183 +182 +182 +181 +12 +10 +11 +11 +10 +10 +11 +183 +182 +179 +183 +181 +182 +183 +181 +183 +182 +182 +182 +182 +182 +181 +182 +182 +182 +183 +182 +182 +182 +183 +184 +179 +13 +10 +10 +11 +10 +11 +10 +182 +182 +181 +182 +182 +182 +183 +182 +183 +183 +182 +182 +183 +183 +182 +182 +182 +182 +182 +181 +183 +181 +183 +183 +181 +10 +10 +10 +182 +183 +182 +183 +181 +182 +187 +182 +183 +183 +182 +181 +182 +181 +182 +182 +183 +183 +182 +182 +10 +11 +11 +10 +10 +10 +11 +182 +182 +182 +182 +183 +182 +182 +181 +181 +183 +183 +183 +182 +180 +180 +180 +182 +182 +182 +182 +182 +183 +184 +182 +183 +10 +9 +9 +10 +10 +12 +11 +183 +183 +181 +182 +181 +182 +182 +182 +182 +182 +183 +182 +182 +184 +182 +182 +182 +182 +182 +182 +182 +182 +181 +181 +182 +11 +10 +10 +11 +11 +10 +10 +182 +182 +182 +182 +182 +181 +181 +183 +182 +183 +183 +182 +181 +182 +182 +182 +181 +180 +182 +182 +183 +181 +181 +181 +183 +12 +11 +10 +11 +10 +11 +11 +182 +182 +183 +182 +182 +183 +181 +182 +182 +181 +182 +182 +183 +183 +182 +183 +177 +183 +182 +182 +181 +182 +182 +182 +183 +12 +10 +11 +10 +10 +12 +11 +186 +183 +183 +183 +185 +183 +186 +182 +181 +182 +182 +182 +183 +182 +182 +182 +182 +182 +182 +182 +183 +181 +182 +182 +182 +13 +13 +11 +11 +12 +10 +12 +181 +182 +182 +182 +182 +181 +181 +182 +182 +183 +182 +183 +184 +182 +184 +182 +182 +182 +183 +183 +184 +182 +181 +182 +182 +12 +10 +11 +11 +11 +10 +10 +182 +181 +181 +182 +182 +183 +184 +184 +182 +184 +181 +182 +182 +182 +183 +182 +182 +183 +182 +182 +182 +183 +182 +183 +182 +11 +11 +10 +10 +11 +10 +11 +184 +183 +184 +182 +182 +181 +181 +182 +182 +183 +183 +182 +182 +182 +182 +182 +182 +182 +183 +182 +183 +184 +184 +182 +179 +11 +10 +9 +12 +10 +11 +11 +184 +182 +182 +182 +183 +182 +181 +11 +9 +182 +183 +184 +183 +182 +182 +182 +183 +184 +182 +184 +182 +183 +182 +182 +183 +182 +183 +183 +182 +182 +182 +182 +182 +182 +13 +10 +10 +12 +10 +11 +12 +183 +182 +182 +182 +181 +182 +182 +182 +184 +184 +184 +183 +183 +181 +182 +182 +181 +182 +181 +182 +182 +183 +183 +183 +182 +11 +7 +9 +9 +10 +10 +11 +183 +183 +182 +182 +183 +183 +182 +184 +182 +181 +182 +183 +182 +181 +182 +182 +183 +182 +183 +9 +11 +11 +11 +183 +182 +182 +182 +182 +182 +184 +182 +179 +182 +182 +181 +182 +182 +183 +184 +182 +181 +182 +178 +181 +183 +182 +184 +182 +12 +11 +11 +10 +11 +11 +11 +182 +183 +182 +182 +179 +181 +183 +188 +183 +183 +182 +182 +181 +181 +182 +182 +184 +184 +184 +182 +181 +182 +183 +182 +181 +11 +9 +10 +9 +12 +11 +13 +183 +183 +181 +182 +182 +181 +182 +182 +181 +183 +182 +181 +181 +182 +182 +183 +182 +181 +182 +182 +183 +183 +182 +179 +182 +11 +11 +11 +10 +12 +12 +11 +184 +182 +182 +182 +182 +182 +183 +182 +181 +180 +182 +182 +182 +183 +182 +184 +183 +182 +182 +181 +182 +182 +182 +182 +182 +12 +10 +10 +10 +10 +11 +10 +182 +181 +182 +181 +182 +182 +182 +183 +183 +183 +183 +182 +180 +180 +182 +183 +183 +182 +182 +182 +182 +182 +181 +183 +183 +13 +12 +10 +9 +10 +10 +9 +181 +182 +182 +183 +185 +182 +182 +178 +182 +182 +181 +182 +182 +182 +182 +182 +183 +184 +182 +182 +182 +181 +182 +182 +182 +13 +11 +11 +13 +10 +12 +10 +182 +183 +181 +182 +183 +182 +178 +180 +182 +183 +183 +180 +182 +182 +181 +182 +181 +183 +182 +184 +182 +182 +182 +182 +182 +12 +9 +11 +10 +11 +11 +12 +182 +180 +182 +181 +182 +183 +182 +183 +183 +179 +182 +182 +182 +182 +183 +183 +185 +183 +183 +182 +183 +182 +182 +182 +184 +12 +12 +11 +10 +10 +10 +9 +183 +182 +183 +182 +182 +181 +182 +181 +182 +182 +184 +183 +182 +182 +182 +181 +183 +182 +182 +181 +181 +183 +181 +183 +183 +13 +10 +10 +10 +10 +183 +184 +183 +183 +11 +12 +10 +9 +10 +9 +9 +182 +183 +183 +182 +182 +182 +182 +183 +182 +182 +183 +182 +182 +182 +182 +181 +182 +183 +183 +182 +182 +183 +182 +180 +183 +11 +10 +10 +10 +10 +10 +11 +182 +183 +179 +181 +181 +182 +181 +176 +183 +183 +183 +183 +181 +182 +182 +182 +181 +184 +182 +182 +183 +183 +185 +182 +182 +12 +11 +10 +10 +10 +11 +9 +181 +182 +182 +185 +183 +183 +182 +180 +182 +182 +182 +181 +182 +182 +183 +184 +13 +11 +15 +12 +10 +11 +10 +181 +182 +183 +182 +183 +182 +183 +183 +183 +183 +182 +182 +182 +181 +183 +183 +183 +182 +182 +182 +182 +182 +183 +183 +182 +11 +11 +11 +10 +11 +11 +11 +184 +181 +183 +182 +182 +182 +183 +182 +183 +182 +183 +180 +180 +182 +182 +183 +186 +182 +181 +182 +182 +187 +182 +181 +182 +11 +14 +12 +10 +10 +11 +10 +182 +182 +182 +182 +183 +182 +183 +183 +182 +182 +180 +182 +182 +182 +182 +182 +184 +182 +183 +183 +182 +182 +182 +182 +183 +12 +10 +10 +10 +10 +9 +10 +182 +181 +180 +182 +183 +182 +182 +183 +182 +182 +184 +182 +183 +182 +181 +181 +183 +182 +182 +182 +183 +183 +181 +180 +181 +14 +9 +11 +11 +11 +13 +11 +183 +182 +184 +182 +182 +182 +180 +182 +182 +183 +183 +182 +182 +180 +182 +183 +182 +183 +183 +182 +182 +182 +182 +181 +182 +10 +11 +12 +11 +11 +10 +11 +182 +182 +183 +184 +182 +185 +184 +182 +182 +181 +183 +182 +182 +182 +182 +182 +181 +183 +182 +183 +183 +183 +183 +182 +182 +11 +10 +11 +10 +11 +11 +11 +184 +182 +184 +182 +182 +182 +181 +181 +181 +182 +182 +182 +182 +183 +182 +183 +183 +183 +183 +182 +182 +182 +180 +180 +182 +13 +12 +11 +11 +11 +12 +9 +182 +181 +182 +182 +182 +183 +182 +182 +183 +182 +183 +181 +181 +182 +181 +182 +182 +182 +181 +182 +186 +183 +181 +183 +182 +12 +11 +10 +11 +11 +11 +11 +182 +183 +182 +183 +182 +181 +182 +182 +180 +181 +182 +181 +181 +182 +183 +182 +183 +183 +182 +182 +181 +183 +182 +182 +182 +182 +183 +183 +182 +184 +182 +183 +182 +181 +12 +11 +10 +12 +10 +11 +11 +182 +183 +183 +180 +183 +182 +182 +182 +182 +183 +182 +182 +181 +182 +182 +182 +184 +183 +184 +183 +183 +181 +182 +182 +180 +12 +9 +11 +11 +11 +11 +10 +183 +182 +182 +180 +180 +182 +183 +184 +183 +182 +183 +181 +180 +182 +182 +182 +182 +182 +182 +183 +180 +181 +181 +183 +183 +11 +11 +10 +10 +10 +9 +11 +182 +183 +183 +182 +181 +182 +181 +183 +181 +183 +182 +183 +183 +184 +182 +184 +12 +9 +11 +9 +10 +11 +12 +182 +182 +181 +182 +182 +181 +181 +182 +183 +183 +183 +182 +183 +182 +181 +182 +183 +182 +181 +181 +182 +182 +181 +180 +181 +11 +10 +11 +10 +11 +13 +10 +182 +182 +183 +183 +183 +181 +181 +182 +180 +181 +181 +182 +184 +184 +183 +183 +182 +182 +181 +182 +183 +182 +183 +183 +183 +12 +10 +12 +11 +10 +11 +11 +182 +183 +182 +181 +182 +180 +180 +182 +182 +183 +184 +182 +181 +182 +182 +182 +183 +181 +183 +183 +182 +182 +184 +182 +182 +12 +11 +13 +11 +10 +10 +9 +181 +182 +182 +182 +182 +184 +182 +182 +182 +182 +183 +181 +182 +181 +183 +182 +183 +183 +182 +182 +184 +182 +181 +181 +182 +12 +11 +10 +11 +10 +10 +10 +182 +182 +182 +182 +183 +182 +184 +182 +181 +182 +181 +182 +183 +182 +183 +182 +183 +180 +180 +182 +183 +182 +182 +182 +181 +9 +11 +11 +10 +10 +10 +11 +182 +182 +183 +182 +182 +183 +181 +181 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +181 +182 +182 +182 +183 +183 +183 +10 +8 +11 +10 +11 +12 +11 +183 +183 +182 +182 +181 +182 +182 +182 +182 +182 +183 +183 +183 +184 +182 +185 +182 +181 +182 +182 +183 +183 +184 +182 +183 +11 +10 +10 +11 +11 +10 +8 +180 +183 +183 +183 +183 +182 +182 +182 +181 +182 +182 +182 +182 +182 +182 +183 +183 +182 +182 +182 +182 +182 +182 +183 +182 +12 +11 +11 +11 +11 +8 +9 +183 +182 +182 +182 +182 +181 +182 +182 +181 +183 +183 +183 +184 +183 +183 +185 +182 +181 +181 +182 +183 +182 +182 +182 +183 +180 +182 +181 +183 +182 +182 +183 +182 +182 +12 +10 +11 +10 +10 +11 +11 +182 +183 +182 +182 +182 +182 +182 +182 +182 +183 +184 +182 +184 +181 +182 +182 +181 +183 +182 +183 +184 +182 +182 +182 +181 +11 +10 +11 +11 +11 +10 +9 +182 +182 +182 +182 +182 +182 +183 +182 +182 +181 +182 +182 +182 +182 +181 +181 +181 +182 +183 +181 +182 +183 +182 +182 +181 +12 +183 +185 +182 +181 +182 +181 +182 +183 +183 +183 +183 +182 +181 +183 +183 +182 +184 +183 +183 +182 +182 +183 +12 +11 +11 +11 +12 +9 +11 +182 +183 +179 +183 +182 +183 +182 +184 +184 +183 +183 +182 +181 +183 +182 +182 +184 +183 +185 +181 +182 +182 +183 +185 +182 +11 +11 +11 +14 +11 +11 +10 +182 +185 +183 +181 +184 +182 +182 +181 +181 +182 +182 +182 +184 +182 +182 +183 +183 +183 +183 +182 +182 +183 +182 +182 +181 +11 +10 +11 +12 +12 +11 +10 +182 +181 +182 +182 +182 +183 +182 +183 +182 +181 +183 +182 +183 +182 +182 +182 +182 +182 +182 +180 +181 +182 +182 +184 +183 +12 +12 +11 +11 +10 +11 +10 +182 +182 +181 +182 +183 +183 +182 +184 +184 +183 +182 +181 +181 +181 +183 +182 +183 +179 +182 +184 +183 +180 +182 +181 +181 +13 +11 +11 +10 +10 +9 +11 +182 +182 +183 +181 +183 +182 +181 +182 +184 +182 +183 +182 +182 +184 +182 +182 +181 +184 +183 +184 +183 +182 +182 +182 +182 +11 +10 +10 +10 +10 +11 +10 +184 +183 +182 +182 +181 +181 +182 +182 +183 +183 +184 +182 +182 +182 +183 +182 +182 +182 +181 +181 +181 +183 +183 +183 +183 +12 +10 +10 +10 +11 +10 +12 +182 +184 +181 +182 +182 +182 +182 +183 +181 +179 +182 +182 +182 +183 +182 +183 +182 +182 +182 +182 +182 +183 +183 +183 +184 +12 +12 +11 +10 +11 +11 +11 +183 +182 +182 +183 +182 +182 +180 +182 +183 +183 +182 +181 +182 +182 +183 +182 +181 +183 +182 +183 +182 +183 +183 +182 +183 +12 +11 +11 +10 +10 +10 +10 +182 +182 +182 +11 +10 +8 +11 +10 +10 +183 +182 +183 +183 +183 +182 +182 +181 +181 +182 +182 +183 +183 +182 +182 +182 +182 +182 +182 +182 +182 +183 +182 +182 +182 +11 +9 +10 +11 +12 +12 +11 +183 +182 +182 +182 +184 +182 +182 +182 +182 +182 +181 +182 +182 +180 +186 +182 +183 +183 +183 +181 +182 +181 +182 +182 +181 +14 +10 +12 +11 +14 +11 +10 +182 +182 +182 +180 +182 +181 +180 +182 +182 +183 +182 +182 +182 +181 +182 +183 +183 +11 +11 +11 +10 +10 +10 +183 +182 +182 +181 +183 +184 +181 +182 +181 +182 +184 +182 +182 +181 +182 +179 +182 +181 +179 +182 +187 +182 +181 +182 +182 +8 +10 +9 +11 +10 +10 +9 +182 +182 +185 +182 +181 +181 +181 +183 +182 +183 +182 +183 +183 +180 +179 +182 +181 +182 +182 +183 +182 +183 +182 +182 +182 +12 +11 +11 +10 +10 +10 +10 +179 +179 +181 +182 +182 +181 +182 +182 +183 +184 +184 +184 +183 +182 +182 +181 +182 +181 +182 +183 +182 +182 +183 +182 +182 +11 +9 +11 +11 +10 +12 +11 +182 +182 +181 +181 +182 +182 +182 +181 +182 +182 +184 +184 +182 +182 +182 +182 +180 +182 +182 +182 +182 +182 +182 +182 +183 +11 +10 +9 +11 +11 +11 +12 +183 +183 +181 +181 +182 +183 +182 +182 +181 +181 +182 +182 +182 +183 +182 +184 +183 +182 +181 +182 +180 +181 +181 +182 +183 +14 +12 +10 +10 +11 +10 +12 +183 +183 +182 +182 +182 +183 +182 +182 +183 +183 +181 +180 +182 +182 +182 +183 +183 +183 +183 +181 +183 +182 +182 +182 +183 +11 +10 +10 +10 +11 +10 +10 +183 +183 +181 +183 +182 +180 +181 +182 +182 +183 +183 +182 +182 +182 +182 +183 +183 +182 +182 +183 +182 +182 +183 +182 +181 +11 +9 +10 +11 +11 +12 +12 +182 +182 +181 +181 +183 +182 +182 +183 +181 +181 +181 +182 +183 +183 +183 +182 +182 +181 +183 +182 +182 +183 +183 +182 +183 +12 +10 +11 +11 +11 +11 +10 +182 +182 +182 +182 +182 +181 +182 +182 +182 +182 +182 +181 +182 +182 +182 +182 +184 +183 +184 +183 +182 +182 +181 +183 +182 +12 +182 +182 +183 +182 +182 +182 +183 +183 +11 +11 +11 +9 +11 +10 +11 +181 +180 +182 +181 +181 +183 +182 +182 +182 +183 +182 +182 +182 +182 +182 +181 +183 +182 +183 +182 +182 +182 +182 +183 +183 +13 +11 +10 +10 +8 +9 +11 +182 +183 +183 +182 +182 +183 +182 +181 +182 +181 +182 +183 +183 +183 +182 +182 +181 +182 +182 +182 +183 +179 +183 +183 +182 +12 +10 +10 +10 +10 +10 +10 +182 +182 +182 +182 +183 +181 +182 +182 +182 +185 +182 +182 +183 +182 +183 +183 +13 +12 +10 +11 +10 +9 +11 +182 +183 +184 +184 +182 +183 +182 +183 +181 +182 +183 +183 +182 +182 +183 +183 +182 +182 +183 +181 +182 +182 +181 +182 +183 +12 +12 +10 +12 +11 +10 +11 +181 +183 +183 +183 +184 +182 +183 +184 +182 +184 +181 +181 +182 +182 +183 +181 +183 +184 +182 +182 +182 +182 +183 +181 +182 +11 +12 +11 +11 +10 +20 +9 +182 +182 +182 +182 +183 +182 +182 +182 +186 +181 +182 +182 +181 +180 +182 +183 +182 +181 +183 +182 +182 +182 +182 +181 +181 +11 +11 +14 +11 +13 +11 +11 +182 +181 +183 +183 +183 +183 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +185 +183 +181 +180 +182 +182 +11 +12 +10 +11 +11 +10 +10 +182 +183 +183 +183 +182 +182 +182 +182 +182 +183 +182 +182 +180 +181 +183 +182 +184 +183 +182 +182 +181 +181 +182 +182 +183 +12 +11 +11 +11 +11 +11 +7 +182 +182 +183 +182 +182 +183 +183 +183 +183 +182 +181 +182 +181 +182 +183 +184 +182 +183 +182 +182 +182 +182 +182 +180 +182 +10 +10 +10 +9 +12 +10 +11 +183 +183 +182 +183 +182 +181 +182 +182 +182 +181 +183 +183 +182 +182 +182 +182 +183 +183 +180 +182 +182 +182 +182 +182 +182 +12 +8 +10 +10 +10 +11 +10 +183 +184 +183 +184 +182 +183 +183 +180 +183 +183 +182 +181 +180 +180 +182 +182 +184 +184 +182 +182 +180 +182 +182 +182 +182 +10 +11 +11 +11 +10 +9 +10 +182 +181 +180 +185 +182 +181 +182 +182 +181 +183 +183 +182 +182 +182 +181 +182 +182 +183 +182 +181 +180 +180 +182 +183 +184 +182 +183 +182 +182 +183 +182 +182 +182 +182 +11 +11 +11 +11 +11 +11 +10 +182 +182 +182 +182 +182 +182 +181 +182 +182 +182 +183 +182 +182 +182 +182 +183 +183 +184 +183 +184 +182 +183 +181 +182 +181 +10 +11 +10 +8 +13 +11 +11 +182 +181 +181 +181 +182 +182 +182 +183 +181 +182 +182 +182 +180 +183 +182 +182 +183 +184 +181 +182 +182 +182 +180 +183 +182 +13 +12 +11 +10 +13 +10 +11 +181 +184 +183 +182 +183 +182 +181 +180 +179 +182 +182 +184 +182 +182 +181 +183 +13 +10 +10 +10 +11 +8 +12 +182 +182 +182 +182 +182 +182 +182 +182 +181 +182 +182 +181 +182 +182 +182 +182 +183 +181 +181 +183 +182 +183 +183 +182 +182 +17 +10 +12 +10 +9 +10 +11 +182 +183 +181 +182 +182 +182 +182 +182 +182 +183 +184 +182 +183 +181 +181 +183 +182 +183 +183 +183 +183 +182 +182 +182 +182 +12 +9 +11 +11 +10 +10 +10 +182 +183 +183 +184 +182 +180 +182 +182 +183 +181 +183 +182 +183 +184 +182 +182 +182 +182 +183 +182 +182 +182 +182 +181 +183 +12 +11 +11 +10 +11 +10 +11 +183 +182 +182 +182 +182 +182 +182 +183 +181 +182 +183 +182 +182 +182 +183 +182 +182 +183 +184 +182 +182 +182 +181 +182 +183 +12 +11 +12 +10 +12 +10 +11 +182 +181 +183 +182 +182 +182 +182 +183 +181 +181 +182 +182 +183 +182 +184 +182 +183 +182 +182 +184 +182 +182 +182 +183 +183 +12 +12 +9 +11 +11 +11 +14 +182 +184 +184 +182 +182 +181 +181 +182 +182 +183 +184 +184 +183 +183 +181 +183 +182 +181 +183 +181 +183 +182 +182 +183 +182 +11 +11 +11 +12 +12 +10 +10 +182 +182 +183 +182 +183 +182 +181 +182 +181 +183 +183 +182 +180 +181 +182 +182 +183 +184 +182 +184 +182 +182 +179 +181 +182 +12 +12 +11 +11 +11 +10 +10 +181 +181 +183 +182 +182 +182 +182 +182 +184 +182 +183 +182 +180 +182 +182 +183 +182 +182 +182 +182 +182 +181 +181 +182 +181 +12 +14 +12 +11 +11 +11 +11 +182 +182 +182 +183 +181 +182 +178 +182 +10 +182 +185 +182 +183 +183 +181 +183 +182 +182 +183 +182 +181 +183 +182 +181 +182 +181 +182 +184 +183 +182 +182 +182 +182 +182 +12 +11 +11 +10 +10 +11 +10 +181 +186 +181 +183 +185 +183 +183 +182 +180 +182 +182 +181 +182 +182 +181 +182 +183 +183 +182 +182 +182 +181 +181 +181 +183 +13 +11 +11 +10 +11 +9 +8 +182 +181 +182 +184 +183 +182 +182 +182 +182 +182 +182 +182 +182 +181 +179 +182 +182 +179 +182 +182 +181 +182 +184 +181 +182 +182 +183 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +183 +183 +182 +183 +183 +184 +183 +182 +182 +182 +182 +13 +10 +10 +11 +10 +10 +10 +182 +183 +184 +182 +183 +181 +181 +182 +181 +183 +182 +182 +183 +183 +182 +183 +182 +181 +183 +181 +182 +183 +182 +184 +182 +12 +11 +10 +10 +9 +11 +10 +182 +184 +181 +180 +182 +182 +181 +182 +181 +182 +182 +183 +183 +182 +182 +182 +183 +182 +183 +182 +183 +182 +182 +182 +181 +10 +11 +11 +10 +11 +11 +11 +182 +181 +183 +182 +183 +182 +182 +183 +182 +182 +182 +182 +183 +182 +182 +181 +180 +182 +181 +182 +182 +181 +182 +182 +183 +12 +11 +10 +10 +10 +11 +10 +181 +182 +181 +182 +182 +183 +183 +182 +183 +183 +182 +181 +182 +182 +182 +185 +183 +184 +183 +183 +182 +182 +180 +183 +182 +11 +11 +10 +11 +12 +11 +10 +182 +181 +182 +182 +182 +182 +182 +182 +183 +182 +182 +182 +183 +182 +184 +181 +182 +182 +181 +183 +182 +184 +183 +180 +183 +11 +11 +11 +9 +11 +10 +13 +183 +182 +181 +181 +179 +182 +183 +183 +183 +179 +182 +184 +182 +181 +183 +181 +183 +183 +183 +177 +183 +182 +182 +183 +184 +12 +11 +11 +10 +13 +10 +12 +182 +183 +181 +181 +184 +182 +181 +185 +181 +183 +183 +183 +181 +182 +182 +183 +183 +187 +181 +182 +183 +182 +186 +182 +183 +13 +10 +7 +10 +12 +11 +8 +178 +183 +182 +184 +183 +181 +182 +182 +182 +178 +182 +183 +182 +183 +182 +182 +182 +181 +183 +181 +184 +183 +182 +182 +182 +12 +9 +10 +9 +10 +11 +183 +183 +185 +13 +9 +8 +11 +6 +11 +11 +184 +183 +180 +182 +182 +182 +182 +183 +182 +183 +183 +179 +182 +182 +182 +182 +182 +182 +182 +183 +183 +181 +182 +183 +178 +10 +9 +11 +11 +12 +12 +10 +183 +181 +181 +183 +182 +184 +183 +184 +184 +182 +182 +182 +182 +183 +182 +183 +182 +182 +182 +182 +183 +183 +182 +181 +182 +11 +10 +11 +9 +11 +11 +10 +182 +182 +183 +181 +183 +182 +182 +183 +182 +182 +182 +182 +183 +183 +183 +182 +11 +10 +11 +11 +11 +11 +11 +182 +183 +181 +182 +182 +181 +181 +182 +181 +183 +183 +183 +182 +182 +182 +184 +183 +182 +182 +183 +182 +182 +182 +182 +182 +11 +10 +12 +11 +10 +9 +10 +182 +183 +183 +181 +182 +182 +182 +182 +183 +182 +185 +182 +184 +183 +182 +182 +182 +181 +181 +182 +182 +183 +183 +184 +183 +13 +9 +10 +10 +10 +11 +11 +181 +183 +183 +182 +189 +182 +183 +182 +182 +182 +183 +182 +182 +183 +183 +183 +181 +181 +183 +182 +182 +183 +182 +182 +182 +12 +10 +10 +11 +10 +10 +10 +185 +182 +183 +183 +182 +186 +181 +180 +182 +181 +180 +184 +182 +183 +182 +184 +182 +182 +182 +182 +184 +183 +182 +182 +182 +11 +11 +11 +11 +12 +10 +12 +182 +182 +181 +181 +183 +183 +183 +183 +182 +183 +181 +181 +183 +182 +182 +182 +184 +183 +184 +183 +184 +183 +184 +182 +181 +12 +9 +11 +12 +11 +10 +8 +182 +183 +183 +183 +184 +182 +182 +182 +181 +183 +183 +182 +183 +183 +182 +183 +183 +182 +182 +182 +182 +182 +182 +182 +183 +12 +10 +11 +11 +8 +11 +10 +181 +181 +182 +183 +182 +183 +183 +183 +182 +181 +182 +183 +183 +183 +182 +182 +182 +182 +182 +181 +181 +183 +182 +182 +181 +13 +10 +11 +10 +9 +11 +10 +183 +183 +182 +183 +182 +182 +182 +182 +182 +182 +183 +183 +183 +182 +182 +182 +182 +184 +182 +182 +184 +182 +184 +182 +181 +11 +11 +11 +10 +11 +11 +10 +182 +183 +182 +184 +182 +182 +182 +182 +181 +180 +183 +183 +183 +183 +183 +182 +182 +182 +181 +179 +182 +182 +183 +182 +182 +182 +181 +182 +182 +182 +183 +184 +183 +184 +12 +10 +10 +10 +10 +10 +10 +181 +182 +182 +182 +182 +182 +182 +182 +183 +184 +180 +183 +181 +181 +182 +182 +183 +183 +182 +182 +181 +182 +182 +181 +182 +11 +10 +10 +11 +11 +12 +10 +184 +182 +181 +181 +181 +182 +184 +183 +183 +182 +182 +181 +182 +183 +182 +182 +184 +184 +183 +182 +182 +181 +182 +182 +182 +11 +11 +11 +11 +12 +11 +9 +183 +181 +182 +182 +183 +182 +185 +183 +183 +182 +181 +182 +182 +183 +183 +182 +12 +9 +10 +11 +11 +11 +12 +183 +182 +180 +183 +183 +183 +183 +182 +182 +181 +182 +182 +182 +182 +182 +183 +182 +179 +183 +182 +182 +182 +182 +182 +184 +12 +11 +12 +11 +12 +10 +11 +183 +182 +183 +183 +182 +182 +182 +183 +180 +183 +180 +185 +182 +183 +182 +182 +183 +182 +183 +182 +183 +183 +185 +183 +184 +12 +10 +10 +10 +11 +11 +12 +183 +182 +182 +181 +182 +181 +183 +182 +182 +182 +184 +180 +182 +182 +183 +183 +182 +183 +181 +181 +183 +182 +183 +182 +180 +12 +10 +8 +9 +11 +11 +11 +183 +181 +182 +181 +183 +183 +182 +183 +182 +182 +183 +182 +183 +183 +182 +182 +183 +184 +183 +184 +181 +183 +182 +182 +183 +12 +10 +9 +10 +10 +10 +12 +183 +183 +183 +181 +181 +181 +182 +183 +183 +183 +185 +182 +183 +182 +182 +182 +183 +181 +180 +182 +182 +181 +182 +182 +182 +12 +11 +10 +11 +11 +11 +12 +182 +183 +182 +182 +182 +182 +182 +182 +183 +182 +181 +182 +184 +182 +183 +181 +181 +182 +180 +183 +183 +183 +183 +182 +183 +9 +8 +11 +10 +11 +10 +11 +182 +181 +182 +182 +183 +182 +183 +182 +182 +182 +183 +184 +182 +182 +182 +182 +182 +181 +182 +182 +184 +182 +182 +182 +183 +13 +12 +11 +10 +10 +11 +10 +185 +183 +184 +183 +184 +182 +184 +182 +182 +182 +181 +182 +182 +182 +182 +182 +181 +182 +182 +182 +182 +182 +182 +182 +182 +12 +11 +11 +12 +11 +11 +10 +182 +182 +182 +182 +183 +182 +182 +182 +182 +180 +182 +182 +182 +183 +182 +183 +182 +182 +182 +182 +182 +182 +182 +184 +183 +184 +185 +183 +184 +182 +181 +181 +181 +183 +12 +11 +10 +12 +11 +10 +10 +182 +182 +181 +182 +182 +182 +181 +185 +182 +182 +183 +182 +183 +182 +182 +182 +181 +180 +182 +182 +183 +182 +183 +183 +182 +14 +10 +11 +10 +9 +11 +10 +182 +183 +183 +183 +182 +181 +183 +182 +182 +182 +182 +183 +182 +182 +182 +181 +182 +182 +182 +182 +181 +182 +183 +183 +183 +11 +10 +9 +9 +182 +183 +183 +181 +181 +183 +182 +182 +183 +183 +183 +183 +182 +182 +181 +182 +182 +182 +182 +12 +11 +10 +8 +10 +10 +10 +183 +182 +182 +182 +183 +182 +182 +182 +183 +182 +183 +186 +181 +184 +182 +181 +181 +181 +183 +183 +183 +182 +183 +182 +182 +12 +11 +10 +11 +11 +10 +10 +180 +183 +183 +181 +181 +182 +182 +182 +181 +182 +183 +183 +184 +183 +183 +182 +182 +183 +182 +182 +182 +182 +182 +182 +182 +12 +10 +11 +8 +9 +11 +11 +182 +184 +182 +183 +185 +182 +182 +182 +182 +179 +181 +183 +182 +183 +182 +183 +182 +182 +181 +183 +182 +183 +183 +183 +183 +11 +10 +8 +8 +10 +10 +11 +182 +183 +183 +182 +181 +181 +182 +182 +183 +181 +184 +183 +183 +183 +182 +182 +174 +180 +182 +182 +183 +183 +183 +183 +183 +11 +10 +11 +10 +10 +11 +10 +181 +182 +182 +183 +182 +182 +183 +181 +181 +182 +182 +182 +183 +183 +182 +182 +182 +181 +182 +181 +182 +181 +183 +183 +183 +12 +11 +10 +9 +11 +11 +11 +183 +183 +182 +181 +181 +182 +182 +183 +182 +182 +183 +183 +183 +182 +182 +181 +182 +182 +181 +182 +180 +183 +183 +181 +181 +12 +10 +10 +10 +10 +10 +11 +182 +183 +182 +183 +182 +182 +181 +181 +182 +183 +183 +183 +183 +182 +183 +183 +181 +182 +182 +183 +183 +182 +182 +182 +182 +12 +11 +11 +11 +11 +9 +11 +182 +183 +183 +185 +183 +184 +182 +181 +184 +181 +183 +183 +182 +183 +182 +182 +183 +182 +184 +182 +182 +183 +182 +183 +185 +12 +12 +10 +11 +11 +9 +11 +181 +183 +186 +183 +10 +11 +11 +11 +11 +182 +182 +182 +182 +182 +182 +182 +182 +182 +182 +180 +180 +182 +182 +186 +183 +182 +182 +182 +182 +183 +182 +182 +182 +183 +11 +9 +10 +9 +10 +10 +11 +182 +182 +182 +182 +183 +183 +182 +182 +182 +182 +182 +181 +182 +183 +182 +183 +182 +179 +182 +181 +181 +183 +182 +181 +182 +12 +11 +10 +9 +10 +10 +11 +182 +182 +182 +182 +183 +182 +183 +183 +182 +180 +182 +182 +184 +183 +183 +182 +183 +181 +181 +183 +11 +11 +12 +183 +182 +182 +181 +181 +183 +183 +182 +182 +179 +183 +183 +181 +183 +182 +182 +182 +182 +183 +184 +185 +185 +184 +182 +181 +12 +11 +11 +11 +11 +10 +10 +181 +183 +181 +180 +182 +182 +183 +184 +182 +183 +182 +181 +183 +181 +182 +184 +183 +182 +183 +181 +183 +183 +183 +182 +182 +13 +13 +11 +11 +11 +9 +10 +182 +182 +184 +182 +183 +184 +182 +183 +182 +182 +182 +185 +182 +183 +182 +182 +182 +182 +182 +180 +179 +182 +183 +184 +183 +12 +11 +10 +10 +11 +11 +10 +183 +184 +182 +183 +181 +182 +183 +182 +182 +183 +182 +183 +181 +181 +182 +181 +183 +182 +182 +183 +181 +180 +181 +182 +182 +12 +11 +10 +9 +11 +11 +10 +182 +184 +182 +183 +181 +182 +182 +182 +181 +182 +181 +185 +182 +182 +183 +184 +180 +184 +182 +181 +182 +183 +183 +183 +182 +11 +11 +11 +11 +14 +10 +11 +182 +181 +182 +180 +183 +182 +183 +182 +182 +182 +182 +183 +183 +183 +182 +183 +182 +181 +182 +182 +184 +184 +183 +185 +181 +11 +9 +9 +12 +11 +11 +12 +182 +183 +182 +182 +183 +181 +182 +182 +182 +182 +185 +182 +183 +181 +180 +183 +182 +183 +183 +182 +181 +182 +185 +182 +182 +14 +12 +11 +11 +10 +8 +11 +183 +182 +183 +183 +181 +182 +182 +181 +182 +183 +183 +184 +182 +182 +182 +182 +183 +182 +183 +183 +182 +182 +182 +181 +182 +12 +13 +12 +12 +10 +9 +11 +183 +182 +183 +182 +182 +182 +183 +182 +182 +182 +183 +183 +183 +182 +183 +184 +182 +182 +181 +183 +182 +182 +183 +181 +180 +12 +10 \ No newline at end of file diff --git a/Old Matlab Interface/USB_CTRL_SEND.c b/Old Matlab Interface/USB_CTRL_SEND.c new file mode 100644 index 00000000..23b6868b --- /dev/null +++ b/Old Matlab Interface/USB_CTRL_SEND.c @@ -0,0 +1,79 @@ +//MATLAB INCLUDES +#include +#include + +//LIBUSBK INCLUDES +#include +#include +#include +#include +#include "libusbk.h" + +//MISC INCLUDES +#include +#include + +#define BUFFERSIZE 256 + +void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) +{ + //Internals + WINUSB_SETUP_PACKET setupPacket; + KUSB_HANDLE handle; + char *HANDLE_CHAR; + char *RequestType_CHAR; + char *Request_CHAR; + char *Value_CHAR; + char *Index_CHAR; + char *Length_CHAR; + unsigned char controlSuccess; + UINT bytesTransferred = 0; + unsigned int n; + + //To Export + unsigned char *controlBuffer; + int dims[2] = {1,BUFFERSIZE}; + unsigned char *out_ptr; + + //Actual functions: + HANDLE_CHAR = mxArrayToString(prhs[0]); + sscanf(HANDLE_CHAR, "%16x", &handle); + + RequestType_CHAR = mxArrayToString(prhs[1]); + sscanf(RequestType_CHAR, "%2x", &setupPacket.RequestType); + + Request_CHAR = mxArrayToString(prhs[2]); + sscanf(Request_CHAR, "%2x", &setupPacket.Request); + + Value_CHAR = mxArrayToString(prhs[3]); + sscanf(Value_CHAR, "%4x", &setupPacket.Value); + + Index_CHAR = mxArrayToString(prhs[4]); + sscanf(Index_CHAR, "%4x", &setupPacket.Index); + + Length_CHAR = mxArrayToString(prhs[5]); + sscanf(Length_CHAR, "%4x", &setupPacket.Length); + + mexPrintf("Value = %d\n", setupPacket.Value); + mexPrintf("Index = %d\n", setupPacket.Index); + mexPrintf("Length = %d\n", setupPacket.Length); + + controlBuffer = mxGetData(prhs[6]); + + mexPrintf("controlBuffer = %d\n", controlBuffer); + + mexPrintf("SENDING CONTROL PACKET\n"); + controlSuccess = UsbK_ControlTransfer(handle, setupPacket, controlBuffer, setupPacket.Length, &bytesTransferred, NULL); + if (controlSuccess) mexPrintf("%d BYTES TRANSFERRED", bytesTransferred); + else mexPrintf("ERROR"); + + out_ptr = mxMalloc(BUFFERSIZE); + for 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 QKQzxHn8Z`%q|3m60P9Z(1poj5 literal 0 HcmV?d00001 diff --git a/Old Matlab Interface/USB_INIT.c b/Old Matlab Interface/USB_INIT.c new file mode 100644 index 00000000..de01e97f --- /dev/null +++ b/Old Matlab Interface/USB_INIT.c @@ -0,0 +1,96 @@ +//MATLAB INCLUDES +#include +#include + +//LIBUSBK INCLUDES +#include +#include +#include +#include +#include "libusbk.h" + +//MISC INCLUDES +#include +#include + +void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) +{ + //Interals + KLST_HANDLE deviceList = NULL; + KLST_DEVINFO_HANDLE deviceInfo = NULL; + DWORD ec = ERROR_SUCCESS; + UCHAR pipeIndex = 0; + WINUSB_PIPE_INFORMATION pipeInfo; + ULONG VIDin, PIDin; + ULONG deviceCount = 0; + //To export: + KUSB_HANDLE handle = NULL; + char handle_string[17]; + + char *VID_CHAR, *PID_CHAR; + + VID_CHAR = mxArrayToString(prhs[0]); + PID_CHAR = mxArrayToString(prhs[1]); + + printf("VID=%s\n", VID_CHAR); + printf("PID=%s\n", PID_CHAR); + + sscanf(VID_CHAR, "%4x", &VIDin); + sscanf(PID_CHAR, "%04x", &PIDin); + + //Init device list! + if (!LstK_Init(&deviceList, 0)) { + mexPrintf("Error initializing device list.\n"); + return; + } + + //Check if device list is empty + LstK_Count(deviceList, &deviceCount); + if (!deviceCount) { + mexPrintf("Device list empty.\n"); + LstK_Free(deviceList); // If LstK_Init returns TRUE, the list must be freed. + return; + } + + mexPrintf("Looking for device vid/pid %04X/%04X..\n", VIDin, PIDin); + + //Set device info to the info specified by the INF that belongs to said VID/PID pair + LstK_FindByVidPid(deviceList, VIDin, PIDin, &deviceInfo); + if (deviceInfo){ + mexPrintf("Using %04X:%04X (%s): %s - %s\n", + deviceInfo->Common.Vid, + deviceInfo->Common.Pid, + deviceInfo->Common.InstanceID, + deviceInfo->DeviceDesc, + deviceInfo->Mfg); + } + else { + mexPrintf("Yeah nah kent couldn't find the device aye\n"); + return; + } + + // Initialize the device + if (!UsbK_Init(&handle, deviceInfo)){ + ec = GetLastError(); + mexPrintf("Usb.Init failed. ErrorCode: %08Xh\n", ec); + } + mexPrintf("Device opened successfully!\n"); + + mexPrintf("Pipe Information:\n"); + while (UsbK_QueryPipe(handle, 0, pipeIndex++, &pipeInfo)){ + mexPrintf(" PipeId=0x%02X PipeType=0x%02X Interval=%u MaximumPacketSize=%u\n", + pipeInfo.PipeId, pipeInfo.PipeType, pipeInfo.Interval, pipeInfo.MaximumPacketSize); + } + + + mexPrintf("Handle is %d bytes long\n", sizeof(handle)); + mexPrintf("Handle data is 0x%16x\n\n\n\n\n", handle); + + sprintf(handle_string, "%016x", handle); + + plhs[0] = mxCreateString(handle_string); + + LstK_Free(deviceList); + + return; +} diff --git a/Old Matlab Interface/USB_INIT.mexw64 b/Old Matlab Interface/USB_INIT.mexw64 new file mode 100644 index 0000000000000000000000000000000000000000..6bc5513127c9cba09384c151d6b164ce42c2e65d GIT binary patch literal 9728 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 literal 0 HcmV?d00001 diff --git a/Old Matlab Interface/USB_ISO_INIT.c b/Old Matlab Interface/USB_ISO_INIT.c new file mode 100644 index 00000000..47bf668b --- /dev/null +++ b/Old Matlab Interface/USB_ISO_INIT.c @@ -0,0 +1,68 @@ +//MATLAB INCLUDES +#include +#include + +//LIBUSBK INCLUDES +#include +#include +#include +#include +#include "libusbk.h" + +#define DEBUG_SHOWCTRL 1 +#define MAX_TRANSFER_SIZE 1023 +#define MAX_PENDING_TRANSFERS 16384 +#define MAX_PENDING_IO 16 + +void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) +{ + //Vars: + //Imports + char* HANDLE_CHAR; + KUSB_HANDLE handle = NULL; + unsigned char pipeID = 0x83; + //Internals + unsigned char success; + unsigned int transferred; + DWORD errorCode = ERROR_SUCCESS; + KSTM_HANDLE stm_handle = NULL; + //Exports + char stm_handle_string[17]; + + + //Initialise Data + HANDLE_CHAR = mxArrayToString(prhs[0]); + sscanf(HANDLE_CHAR, "%16x", &handle); + + //Actual Function + success = StmK_Init( + &stm_handle, + handle, + pipeID, + MAX_TRANSFER_SIZE, + MAX_PENDING_TRANSFERS, + MAX_PENDING_IO, + NULL, + KSTM_FLAG_NONE); + if (!success){ + errorCode = GetLastError(); + printf("StmK_Init failed. ErrorCode: %08Xh\n", errorCode); + } + + success = StmK_Start(stm_handle); + if (!success){ + errorCode = GetLastError(); + printf("StmK_Start failed. ErrorCode: %08Xh\n", errorCode); + } + else printf("[Start Stream] successful!\n"); + printf("stm_handle is %d bytes long\n", sizeof(stm_handle)); + printf("Value of stm_handle is 0x%16x\n\n\n\n\n\n", stm_handle); + + + //Export Data + + sprintf(stm_handle_string, "%016x", stm_handle); + plhs[0] = mxCreateString(stm_handle_string); + + return; +} \ No newline at end of file diff --git a/Old Matlab Interface/USB_ISO_INIT.mexw64 b/Old Matlab Interface/USB_ISO_INIT.mexw64 new file mode 100644 index 0000000000000000000000000000000000000000..4646c4f382d5b11b2028f67f67878c9603a473c9 GIT binary patch literal 8704 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 +#include + +//LIBUSBK INCLUDES +#include +#include +#include +#include +#include "libusbk.h" + +#define DEBUG_SHOWCTRL 1 +#define ISO_PACKETS_TO_READ 30 +#define ISO_PACKET_SIZE 750 +#define HALFBUFFER_SIZE (ISO_PACKETS_TO_READ*ISO_PACKET_SIZE) + +void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) +{ + + //Vars: + //Imports + char *HANDLE_CHAR; + KUSB_HANDLE handle = NULL; + char *stm_handle_string; + KSTM_HANDLE stm_handle = NULL; + unsigned char pipeID = 0x83; + //Internals + unsigned char *tempBuffer; + unsigned char success; + DWORD errorCode = ERROR_SUCCESS; + ULONG length; + unsigned int n; + //Exports + char *transfer_contents; + unsigned int *error_export; + + //Initialise Data + HANDLE_CHAR = mxArrayToString(prhs[0]); + sscanf(HANDLE_CHAR, "%16x", &handle); + + stm_handle_string = mxArrayToString(prhs[1]); + sscanf(stm_handle_string, "%16x", &stm_handle); + + //Actual Function + tempBuffer = mxMalloc(HALFBUFFER_SIZE); + success = StmK_Read(stm_handle, tempBuffer, 0, HALFBUFFER_SIZE, &length); + printf("%d bytes copied, out of a possible %d\n", length, HALFBUFFER_SIZE); + if (!success) { + errorCode = GetLastError(); + printf("StmkK_Read failed. ErrorCode: %08Xh\n", errorCode); + //printf("No more items = %08Xh\n", ERROR_NO_MORE_ITEMS); + } + + //Export Data + transfer_contents = mxMalloc(HALFBUFFER_SIZE); + for (n=0;nzNFJ)D5wa7I7pLBSd6R~C?9^Rj$DN=gdthU?3>9&B0u{_{oITD5sv z(NfS=nV$)D9R}$1pmmm40n@l1m9@lEY8m%#LOF%EF>`yNZKEs=VB*R4F?AJJe}dht|4Rz zOm~zK(#{<=67n<;ZsyGuPZWYq=oYxs60&*IdQ%?F|>+UMlr?NVCZ_2IB~u> zxj$Kv{b1=iL2h)tE6?k2%&F^1p(qsf9IXM9$GsYLRB;k=%P8^^`UM%FiIsNC(q+qO z=SioBjj8;|!(ONC9hy+>4&Jn|b$qm_H`WX0| zj>IQwwykgn>HUzh0XCd|36hNar+~S-#Zn$*P-H23-I>-*u}<9t85V%`nc@OZXDZjD z?R9OTpMe$&&H+0ItiC{VZE^f`x@H0+v#1ss<&S&zXM~?$|HKaQEz3v74`N` zwEg|gCd`7+P2gU$^}-A90UOk8KjwJC{J<0)Bsl0g5;rI7OheOY=X8>O1>Hl2G=TJz z8T@ZJ)zgmvN2)t_3%B?7_fxi;CR!{s(Ke1I+9!#LHG*rYYnh8rzEG((uwx=S(RIMu zRfQff^T$YQSIT^dYubhQ`tAUiHfEG@@y?qa{4tFtz@w z^i62Sj}PU$p6AJ8=G~w>&*Z4q?x~>DelsB_9)pOok{*aO+izeivSSnxH~m2OUh=3e zco2dHc2;D=l%;9sDT}B2q`ZR8{T@-@*KE&0O6R(X`WMO?;3mXrp0l5D1ka)QLX=bbey8cJ%=n$rF2zvWqkITbx@)rhW|v$duVg)I%V< zQfhG~Pt};fq50Tb_wueJOX2{1W(7Jtt?7vncctQ+pwN_2s0T=YjM?ZjH$aP@ie0DT zg_QNt&E^H*(7ClO0O~Y&TMQ(950nvbd;{CPi>rIse$93xB%1m3Rd^8aKzubjDGS*t zWp~&cMHaBP@KxpVx>mcezDKRCn7+1L%~(?o4;yBmi0se5<318C>4Yr_k6j1im(8_3 z1T0=yc?9eeuRx5vspig4a^g2rW!uyh64^`aFlH$2_)OCb z5f)5xv}iI0lo54mrudD>&n%c#9^hu5VT2>Z$+Ma!veNqztfA|OT9g&Iw1Zt5I-}*r zZypKw0+de=UbT1nKK6P-v+5QgYV`MAsLZ5j%E-wv*^%_Z3jU*y} z4%bROcl-?IhwV6hCwkZ!_6B9|BO`HhI;!`$j~_>`a1Rd3RC^UqzW2oDbDG9;pDbC5 zC@0Q9HFJhgeu$T}@zAyvxZ(Lp3!5`qyoj=Wn(Zak_tn`GUV`k=R8^t)3cs@kdBPL7MrZvsO_NKp$oySZ=Ir=$|%xUFYF|S(r_x1J(z5SWq?m)}^^My5zcGhm^Z@_rI zW}6B@W}lDbeo`j)%zXR`ZWORP2z_Dp<414!;dP*^`_y83dH@sM5Ao0jniTC0&GyRz z$oLx7Y`*|n&jvk}M>N}xQTP*F1=>|v;X`1Eu&EL&kIcufZGiCxB;IuU^ea+BTkmCH|Qz@h77poBE8>VL}%?UhWCyq8~JUPElp~8 z{X*{&$rlh>eZi0vs1V$;9F^M!|6jvc|cg(p-PJ2kH&&h;Cdk%SA}S+ z;1gm|MG3AANkVx5n&q=@(tj3a{r@XyD$XaxbBal^Y>5@D$!|2}=aBr_ISx~4F)7_$ zL`u~{QrbL*l+Lk`(%F-TuQ+BKFmxIx+bqNexh*h;*dVtp8J~I^`w9mfQ6>=bE&LWf zhTmu$hCzD)$Ke>~#bnJV)<6NV&HtxBNN{ixQNe=oOe5xF5 z_ulMqkQ<@b;0x)$)$P!8$+EAbIobq;$T|`Vt_``KY>z7q>caAq03970jhsoyixK|>6bE_;#g#6v)l_Gv@<$yO5M=u{Sd3|AJomXlP z;v>owlh<44RbrAq*c$YE+kBBgNRkPe%K5Qai$A8`8Vtcbz7Ki5{*dI0c-4-Wgs81i zZ^Rdt6rhktd?7+^&-2D3$kTd4p^cnGBYK#Ra=beCN4Z{u^Dc4goobBg)?^>4mv|?$ zbSkeYBuO#y7O4*^J{&F0ZJ3>a7+fp+NdKp{WRy)7=u9gULQ8kNJoh+nFU#(7`J zgFNHSLH~N4LC8K6=(@NpOA$5W$P>WNi&5N0IqH`b1?-L7wy8r=rEqgFEV&enU*gyW zTPynw?s42P{H(~<2S7iJ`Y0;@HuVgLWNFhaUQg3vuef+|V+9t;cW;`**UGK&h+hpx zBV6TD`HwTeA2_^ZpLY9K2?tsa@h8}&^0mkS_L+q5b}8J6c-xS7PzQjY1a#xh9|TST z@50@G7C8St-h*0I20g%yxZ^2s4!5JW0e=8+05!&S04=!7IldL}Rn$9x4+CC~w*}Xq z0N986FmV3fFysFJ5V81MgTEg*&Y|1D`TIaN@UO)j{SOA2r^hf6q@UM~*^pU&4jB08 z_c{I;C{V~+8VOlpBINCi0jcpRiWFWO>JZw)p@>pj7MCOQ6n~o(_9-`ngMK-xL|fGx z{L%0{pAxRvFsn?!Efj2(6m^*-D>&F|%Vt$L%I2383PO!4#}(CsTk|V=tIXKJQjz>| zIjDB%egu>nS^7>KQKSG~8yj#vt&@}y;b^hD9j5$-5v2`MNC@$^w#=t^A{(OXCAmz9 z2VH)C@70#I`a+6SHos=(i0=!HNBob{_+0dwnHTi6X6DGCVO}#co6q@;u0~gVy=T#a YmKFo~Z)hT9{tw0R7$)&j`PyaRAGK)eMF0Q* literal 0 HcmV?d00001 diff --git a/Old Matlab Interface/USB_POOL_FREE.c b/Old Matlab Interface/USB_POOL_FREE.c new file mode 100644 index 00000000..5a34b871 --- /dev/null +++ b/Old Matlab Interface/USB_POOL_FREE.c @@ -0,0 +1,46 @@ +//MATLAB INCLUDES +#include +#include + +//LIBUSBK INCLUDES +#include +#include +#include +#include +#include "libusbk.h" + +void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) +{ + //Vars: + //Imports + char* POOL_CHAR; + char* icx0, icx1; + char* HANDLE_CHAR; + KUSB_HANDLE handle = NULL; + PKISO_CONTEXT isoCtx_zero; + PKISO_CONTEXT isoCtx_one; + KOVL_POOL_HANDLE ovlPool = NULL; + + + + //Initialise Data + POOL_CHAR = mxArrayToString(prhs[0]); + sscanf(POOL_CHAR, "%16x", &ovlPool); + + icx0 = mxArrayToString(prhs[1]); + sscanf(icx0, "%16x", &isoCtx_zero); + + icx1 = mxArrayToString(prhs[2]); + sscanf(icx1, "%16x", &isoCtx_one); + + POOL_CHAR = mxArrayToString(prhs[3]); + sscanf(POOL_CHAR, "%16x", &ovlPool); + + + //Actual Function + UsbK_Free(handle); + IsoK_Free(isoCtx_zero); + IsoK_Free(isoCtx_one); + OvlK_Free(ovlPool); + return; +} \ No newline at end of file diff --git a/Old Matlab Interface/USB_POOL_FREE.mexw64 b/Old Matlab Interface/USB_POOL_FREE.mexw64 new file mode 100644 index 0000000000000000000000000000000000000000..00a8590e157f59889c5042113d70643d065e86c6 GIT binary patch literal 7168 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 + amp = amp/3; + trip_state = bitor(trip_state, channel) +end + +signal_trip(trip_state) +amp +bin = round(amp/dac_top*255) diff --git a/Old Matlab Interface/autogain.m b/Old Matlab Interface/autogain.m new file mode 100644 index 00000000..bea05bdc --- /dev/null +++ b/Old Matlab Interface/autogain.m @@ -0,0 +1,16 @@ +function gain = autogain(minrail, maxrail) +vcc = 3.3 +r1 = 1000 +r2 = 75 + +maxgain = vcc / (2 * (maxrail - vcc/2) * r2/(r1+r2)) +mingain = vcc / (2 * (minrail - vcc/2) * r2/(r1+r2)) + +maxgain = min(abs(mingain) * 0.9, abs(maxgain) * 0.9) + +for snap = [64 32 16 8 4 2 1 0.5] + if maxgain>snap + gain = snap + break + end +end diff --git a/Old Matlab Interface/avrbreak.m b/Old Matlab Interface/avrbreak.m new file mode 100644 index 00000000..400c2b7c --- /dev/null +++ b/Old Matlab Interface/avrbreak.m @@ -0,0 +1 @@ +mex_usb_send_control('40', 'a0', '0', '0', '0', '0'); diff --git a/Old Matlab Interface/avrbreakcl.m b/Old Matlab Interface/avrbreakcl.m new file mode 100644 index 00000000..49b1b909 --- /dev/null +++ b/Old Matlab Interface/avrbreakcl.m @@ -0,0 +1,2 @@ +clear all +avrbreak \ No newline at end of file diff --git a/Old Matlab Interface/axes1_ButtonDownFcn.m b/Old Matlab Interface/axes1_ButtonDownFcn.m new file mode 100644 index 00000000..e6dc5254 --- /dev/null +++ b/Old Matlab Interface/axes1_ButtonDownFcn.m @@ -0,0 +1,68 @@ +function axes1_ButtonDownFcn() + +persistent state +if isempty(state) + state = 0; +end + +global gui_hori_cursor_a_pos +global gui_hori_cursor_b_pos +global gui_vert_cursor_a_pos +global gui_vert_cursor_b_pos +global gui_figure1 +%gui_hori_cursor_a_pos = scope_window_min + (scope_window_max - scope_window_min) * get(hObject,'Value'); + + +clicktype = get(gui_figure1,'selectionType'); +pos = get (gca, 'CurrentPoint'); +pos = [pos(1,1), pos(1,2)] + +global gui_delay +delay_sec = get(gui_delay, 'Max') - get(gui_delay, 'Value') + + +switch (clicktype) + case 'normal' + switch(state) + case 0 + state=1; + gui_hori_cursor_a_pos = pos(2); + case 1 + state=0; + gui_hori_cursor_b_pos = pos(2); + otherwise + state = 0; + end + fprintf('LEFT CLICK @(%.2f, %.2f)\n', pos(1), pos(2)) + case 'alt' + switch(state) + case 0 + state=3; + gui_vert_cursor_a_pos = pos(1) + delay_sec; + case 3 + state=0; + gui_vert_cursor_b_pos = pos(1) + delay_sec; + otherwise + state = 0; + end + fprintf('RIGHT CLICK @(%.2f, %.2f)\n', pos(1), pos(2)) + otherwise + disp('OTHER') +end + +%disp('settan') + +global gui_cursor_mode +global text_box_2 + +switch gui_cursor_mode + case 1 + set(text_box_2, 'String', sprintf(' Vertical Cursor Disabled\n Vertical Cursor Disabled\n Vertical Cursor Disabled\n \n Horizontal cursor disabled \n Horizontal cursor disabled \n Horizontal cursor disabled \n ')) + case 2 + set(text_box_2, 'String', sprintf(' Vertical Cursor Disabled\n Vertical Cursor Disabled\n Vertical Cursor Disabled\n \n V1 = %s\n V2 = %s\n DeltaV = %s\n', sisprintf(gui_hori_cursor_a_pos,'V',3), sisprintf(gui_hori_cursor_b_pos,'V',3), sisprintf(gui_hori_cursor_a_pos - gui_hori_cursor_b_pos,'V',3))) + case 3 + set(text_box_2, 'String', sprintf(' T1 = %s\n T2 = %s\n DeltaT = %s\n \n Horizontal cursor disabled \n Horizontal cursor disabled \n Horizontal cursor disabled \n ', sisprintf(gui_vert_cursor_a_pos,'s',3), sisprintf(gui_vert_cursor_b_pos,'s',3), sisprintf(gui_vert_cursor_a_pos - gui_vert_cursor_b_pos,'s',3))) + case 4 + set(text_box_2, 'String', sprintf(' T1 = %s\n T2 = %s\n DeltaT = %s\n \n V1 = %s\n V2 = %s\n DeltaV = %s\n', sisprintf(gui_vert_cursor_a_pos,'s',3), sisprintf(gui_vert_cursor_b_pos,'s',3), sisprintf(gui_vert_cursor_a_pos - gui_vert_cursor_b_pos,'s',3), sisprintf(gui_hori_cursor_a_pos,'V',3), sisprintf(gui_hori_cursor_b_pos,'V',3), sisprintf(gui_hori_cursor_a_pos - gui_hori_cursor_b_pos,'V',3))) + otherwise error('Gui_cursor_mode is invalid') +end \ No newline at end of file diff --git a/Old Matlab Interface/bin/dll/amd64/libusbK.dll b/Old Matlab Interface/bin/dll/amd64/libusbK.dll new file mode 100644 index 0000000000000000000000000000000000000000..d8112b9e825d4ea9ab0ee96685aa18b02ab58e4f GIT binary patch literal 99128 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�n5-%C`_fI{R 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�!|hF?o8X@* z!QSJ(sMEoQKHa8CCBJI(%>R`Cy+~PEs>y-hfFIZu{XpV(@D$jK-4py?IifJJei^`1 zdYRz=68`tgD&I5zsNO&Jm3UvS|82aVr|_fNt9mzpWrz~m+Yx)R@}3^yN9ewPIl=yc zGv?2TwZs3IF_Hg8D*uYg-;mM4-<;slQ(rUVL(ree$S&-24q-n>(wr{_J+uE9{Q7-8 zkD*+|)kf&cruMS0AG_41cd7A}K1v0rV}`!G*X&r(J6$h#QG9{_y{|9t?}?SmzCODv z6`NPppB$iASwHr_-;1nE)%E*(#LV_i2b_8MDeK4k)2-F@ROqSb$93t8Ssz}vqqz^C zm;ECW`XPu~+za|p{sZOT#C`&O0143FKp#H6!ap`epSgP!f8(ZVKg6*Z^I>pcyS(z*XzCcKfCb$obpGKdVem%@eCIGr@TuE=Wpe|;r9nWh@(8> zF=D;850A1J@P4fLOHRALS}4YjW=fKhm4n{{NpfZ@1FFEB0SSuZmxpw0$+`U-_HNv1LcXh#{p` zhJUnHVn5WY_t3qrC#U^S;3xij1wfjpmbXg&Q&#bh5vE^WABWec$m`>BxuJi0eM&=E zAKxFT)<*=uKT5W~>H=#}(LeO>kk|!$#gi!8Y%hWTF$wv~_C&W8_>D|3{wOn0j_&|J zXaCp)^K%7{`{=<1uEAHVN2#_d@?L!Vs@eq_U+ zuiE216~vc%$mj7!Z5sMWB+~_WOG|HSvQ>TzvquBGzCXM?7Kot*xKn^?2{^BjY{Y)o~yU>u(?LDoFTi7(Xvi ztDR5&9ep$~$@w~*ZJ(&K<-9jjvTm5)LlXPfwAu=uYJBj1)m4A6Kkr8`k0*P2TqSP<{kOHv!B9`$hx?QL=f8A< zGVp(5=rTMZ>O;N~iCeWIKYtA8GkT(uKS=4Lk;H({pUU5(DZVeg`EWTu0p1_Sew^;F z+JA??3T}oSWHW!ty_fh5aq*1z$wSH?=pMlNz%%e(GV)WA)>=AwCw*4wuMwO17mx49 z-yr@ZVOfrz%?SLF&)0Na!pg1vbdycyL?Rt2nU}+!#PetTaJ=MNrTJbDiQB9IWu1w{*Dkf|8BzfjJ>y!+YXk+N{b|`M4B+M!ec(6@5hY4|pvcGB%19&_NdkQh#-6TT8w!5B}Pi zV*lC5QqWI)GxR~$N6jV+?{Af^$9{GU&i7b4shw&qo(R01vI9iBO~hB2R<0fO?ybyk zkueGLZ$epWALIN>cn`YKMt++Z-XDxh$Sde`(u$#+{N|6Y4drMlS>lJt=i%%_y_qr> zP$OwQBt*-eA6*j~jpO@xsHA<+2JQ0w*#(?WBSu2rnflSS8eP|Yf1)J2f8Gj|qJ9K2 z0MEDMeJ=Z@akMYlXzywqPllDv;y?Vq^J?GETjknqfAt{)p~~2A{O9~Lk{sm6!24WQ zG~03wAxKu_NG1y~R5lAdn)cu(KjP~x{?{d8`^D+l(mkDlB) zUX-0}k94iibS#0t?9|snqir2QVeQ@CVte5{@L8l5ZuDc zKe-O`+xU2@Z*9wAiTtDrpZ2~{ymy{kgYk1(3jF)n^SfnTdKsAlpy=ccq>+y$ee(S{ zFC1P*w)aiqtZIF&$mjR{jg6lWfpiZg*Y_=y9r?rCTinHvtX2Lb>HE8K)DegOzm+yS zOplTD$@#v2Tlx1^goaX>UoMow`i@ZIV8Hu$$F6gW&!w6^QA490|M16qph#l<*PwnT z|D#%5LRqb)c|A%V@a=Lw9HY3bagI>*V<$mB+UT6N#lqHlke_Nvfu1#op^d>6){Xs~ zJkgE$Zp3^G!)?f)^V;t*KdI28^!bTjp308{`i)i7FYNX6z`vLtKhOyJjLG1;SC4M95rSt@!-ySdat^Mw(1V6O* zZ>+P?#vnZ>V~a(6FVp*>Jz`rVm8#GS>Tzcx$Lk^Ve#k?Bozsgc`+Xv}CncA;53Enf zdg^N|gzZ9Qzk<;=7A&;X$?3Wp{oz-hJj!{zw6j_(+7uRQzAie=Mn?OwA5}enCA1N>?A z@+Yug?ETCSM&-HS|I81>Q=s>&5A*!##3i>s+r1z72o>6v28FmD{6Nf0gCC@*HD}o; zdRE(xKBV|Ti)>Fbe&kZn7taO%CD-Ma*@wOeU-SKp&0&a379-%{ECCBptM_JhCWv=vy- zCnVr?l333|mgl2m{|)kdj_5b`bu4l9!;MlOme~J=$vg3$UV2UwHn3 zVk_1+7rw2dHhJv$#X0F-^TZ5aS-!!f3UIT5^qF{yiiZSP4^YRW#)bgof>pvi1$C~8y!*0 z^k7QHcU;>lgm?z{4D}d|Tn`jW-NAZTw}?3+Z-QUAdJp39`s)^8J+x~9PkYa92!bK- zFKa)q-+u7NND=oI1%?7Xp@yueA3Zr0&zj@>x&riEmRBYQF^h`7GCx)Oson;E%{-$0 zUQc)H{t@W+qcPB@qul~}ct8`lO5el$#aokGhC#4DijaSnL{L(afyR5IeG7Ph^zr`C zI+{aHJ=n?qn zn1PQ1=L1aRz0Ro5Uxo?t+hUSe^R4DD`eXD_4MFkn*RSvCSfb+XLu4<{g}|c)Yng8&Q@bQ^>E;XlD90&iHAjW6-B_YifjL*XaeC`?t zKA%{CEk|Bg&x1#mt}AADhM>^XIa>YYKjt(MQ6- z``ysz6n=EzC*|M>Gm|EK2K&>#NI zo*yPxV}8G(^8@JTU-kKc_us#tA1dmGvAL_~CJm}o2)75ss zj|W-E=a(UzhXzrOjHb~ZCm7gA;C1Hrox5Ql(w2!R6<|*c2^_tm5+A@H0(%DT=ZlNe~d0-dwt5x^Z6{TZ^Zd* z;@+lonAYGveE#)o=fT=VBt~P}QY+V`;#nuYB+{=^e|K(|Rsy{CyuIDhoXDi+I!V1p z;JIO(XP0Ox)ayB(&yr&uFQlScn`IS#D4K2g>QCF!xc|H`cl~RC$KBY7?@fA4`^)hD(hFUmZQk9{_}mtHU@x39wa@Q2xE`~BR1$OBa4gZL*|159L9d&J)? z!+88YNMs0Ah_7pTd^_jIu} zf(+a#)E2_trQ436i7zcnhb9=G@C>lMi^m(wt|r*Ka6h4z;nDFv5&WMT=)ry}wD<*$ zHeo%Bum3?)%=ru8d&%{iR?Cj`jnQWNf_eCU{Ww;wm10+_@z@`#C+r(wGf_)J5C3cf7@4cRE z+bYzpET5-+{N%xwE+j3T#`nezut)C_!Y=nGIRC;J*2{bH)utD|o7iN@*W0JYLwxTA z5{5d0e^dYo5y~vY`to@ABjES#iz(O(yigAnr|nztHz0p+U5^HP3>lB9`%g2^_YUlT zh<63PJ#9!tT?6@rfN0XFpx?G|N&YzeV|W<_)=*d5ws48_63X?Xk755Pc44;0M=6 zM;i90ZY%7*zIj2+;rEb$KiIP$0X{}Q*1+pMxgGRS_zCutIQ}B+HO0p|<_h!y|IMq1 zDcwKL`6`~_@$pBFFWCtAefWlz{cm{L5bn3Hi^Ir%3;er&{73@+U8&*zRvF&u`@QyG z-oX5)9r1T2-|uyF@Smc=^oCf6te>CA=RYClKh^;9o4OkA&pJFmliF4egFZVnK|z#f z$FrCc*nxkJ=^K+oJUEvH@*Sr{0Qu^48eIOxPEUI{hRIKMyb`9^^8eOJecK;8?#CbZ z)o{G5>YwRxdi{xDk3)Q9mlkWa0wtuuWqg~Yd?zjZ6- zJNf3aXQ$iCT8HVCjxN8uou0dG;muCqpHA*P_A2JHTRRj#hwbMiCd^Gs<=-FR{%_{~ zk2p2MwD%bI_soeK^{W0z(QCM`hGeIs#^d&8-(ziVXR&X++(L;b;?FkFf{X9n91w`l zs{ylI5$UBaDUa5qmc zdgaZmS;_jC;XbdESAJ;$n|I5!cQT_#ao)4`>GL&1U-F?3kKX-V!9)7VgZ*cOa3A;7 zD%iuf9d4=*3c_~%gup+aT|49N}Z~M&P(HbrCUD=`wCq-Uub3{SIoqD>2(6mOM6g1T_VnF z=8nvOe#MVzzoZCx^Lf}v--ECtNbQsAqV~o8h4XFqwJH4l_hjBaar$xXQw;TK^4N0Z z-@rS^@UFIP=3?bsbq)HbOcm+d^%=(ZSIzP)v+VIx+CTWg{t+MTBg%`?Lx28JvOX0S zw|7vO_O6dXKU}^O**oXY==-p3Pk_H(Pxg}aah`F%k4ERy3o;ca=~Fc8+rdfE5Ai;d zl~kZV5|!v3zWVw)v>uUNTDpzj-^eJaqiu>U5UHRfZJ zr6~_93mma|0tt!n9&>cwR}v$7F~h|+^ZQN;Xgqx|(}VN#j#|h04Bux&|H$06%WV50 zjrK5WjK0UG9bI(mYULCe_a$=rn5!hs`D%LqhyEJPxw6N36yFP&#QW!3$78AkvTw)gNp~{$Fd2sCzexiGLhG(7_?z$G` zvqK857eWU>FFD^l1Mk~u{KLnG-k;Qn5}!ZitM}CAh=>V$*4&sM(ECNSHu#>RR{HZw z#WBq8c6+?|z+JiaP`iNl?R@-5?FZjqlkYu9@=%z5V)n3W8=K}C9%g4Dm^A+3^Q+0j z4Eue7Lfba!rCsYMcODC%esr$z6pGG=f4Cmw!>SIXZ}EdXcz-BvK>DoqvnyV8bP6?Y zkJtl!gcm=I`wYS_*M3Iy?k4>>dlo3U?$@wYlkK}_#=Dss`a@Rx{o9lhtv*AjD%EEu{|)C!+U73C{TEfA z9G}g62;1A2bp3}NFZ2E-(f;~U`Wp#hp%(Un`}olw^8Oj$6QTZT*Zj}Dlc`YuSpA(V za>dx;o7p>D|C3|$R(izfZ8!4spwM^lr&k#7%Z>V&ooGLmM1Rl6bKwu)W*ASQJSFD{ zod*;d&O6ku!uZt4KmLl4h6y+s4|y~`o?$;Ky>9{G72du~X1`zFvEbFL5&;c3%G;pd zPx3#<>37D*Kbib}zpa1sQGZ|yOVpo*g&Gg+?XZaNuMO>lJvi#`^+?g$8jb!$$&|4lLI{6&L-BNcFAw`)mz-CoGY+Tj=@Jj)ry`pIQIbvwXs7xs%f zKafPuPm5verbl|@&?mDis-JrEqSqZd zlRf%!2NT87W9%%+{qCFV9i@NUc1MZm{Oi@l@}xgJiu-`w?aC?m)D0_qCtB!uHJ2S$ zlvftyQ2m3xv0s7mr%#=txRp7x9LnT8lu!W+zbh7sYo^Y8HGfUCLn*;l@AVkxL*GmD zQLAnC>{Nv&>_>IwoU&upbXC}MxiH*hwm0EXe80`D9ovEXfj<5Z^nYg#V|}V<67Ks9 z<5RQc+Vq-J6x_EF#QqWI$Xq3}4fI(<0`3!3oIw%$ctT4L<_`sBXGf^NaaDVENYjVEr(`p|G?eQI?erMqk;y!N4>;RIiiGh=M3{o} zUQVA!lro1`vFy>un{a++&%3Nn%Y5u++*k70jo9Cc@qR(3NcT^xY%cl>T+>yK`xjT( zzAuFJL=+0z|5;T2lBZC9;i;o*@y!h?zoS2!af33wllD_u`s4jwIl^;^-pA#G{zHlK z2dM~agg$)ELuV9=4?R}=cJ@%lwaoA6xX9D<9NF82!W(lsE^Tt|GV^o!_b5IhAz~0> zU}*&WMdvG57vmxNQ#M@Gk!#o&?@zhC8T1mTABOy1=bW{Uo z;S%T%^Pg*+9j#*Fe^UCd3*Pf!FI-=gAKcgCLH|%SX_J!a`8$m#>3pa59E}HD-(Rsl zyY>o%W5T=zBFM2mi0?ho{u^(uC}n)KYrR8f595wO*6ZT$RtYJA6_}U`iN2=LbvSaO| z>xH%=;63eoFD{mIZ(OS6v#PmDE>mil)!)oJ1N!Z>?yt;emGhKb)z#sh$-qzkGZG#WBnW@_q(+$8sv? zi8wUw6zi-UxrTXqgq1fp)ADtIO*J0|P>@}Zd$G^WUr_hHuy(dl&yo611 zt1(`6b>RNfVo&`0(WAI8p08Kf?IncuJ$w2R=LgYE`+!fx`lfXrQ4y%W$3s{U-N&o& z^Bw;m>UV_BCk`5Tx)h!jki^S7Lu8?=OU#Xnywh8SC>s zwZOB;o_PJOUWWS2+dCQdXtyt&(#Q9wJszFX4?91k^mp;}Z>ID=egynlmV+PCx7veX z{5&+ciVj(#{CTn7&Vrxj{F!f69xCo`oL?0A`B+)Q{pBjvUwsdqKWh_Y>waMV{tf3f zS%DXm(<)__1MjPX1y|F3SY2rCW-(U?=M}HU`N1HiUrXl|`Tg4-wh!%zOTv14EuCM} z1)RrZ?%49TaefWw9Z4SwA3tR)1eGhBoh+R`F1&U|0{I=Y9_jxiu|?@S7QHv?d@Kx z{GN&PLk4i32>m7A7qzIOv>W&HW{r56W0s8bZsz+?mErs=W4KR1{LAmvjx4bNc+Js) z_O%Am_d7#7=|^8USEbOw$&*8EF{d|5HvuaL`j?}Ypr zf1~zmk9<)nbN}$+m@(hM3l^h%7;A%msDHk@l$YnEF!VWjOho>1{tN9l?~nO?zlMHO z@AozItMK#3um|cda33*R%K{yxh4c}gsvu15JL+R_UE=-%(8Hclp0(}gpDh~awLv7} z{AOH#KHy=mxbGbuO;8Lw-FXjX6;XL$<%U&-d4Ht{7nb6EGucBD?}w=sv#ll~Uj39VL4+L&o?M|!t8PliR2ja^XkM+cYRD9=g19#XzX@s0Lil7#t0zSKziRUSqA5=50o z`!WmdONVv-8|Q(+&+8D;-cx&!-*zwBf9AaWN{z2KdwBaGf5)wmIAkwc++IZRo7^Tq zpTIyPLR%R#+s`U$zrvrQ{hW+%F|VG3xuRwNd7_Kj7lbvhn`IJfSTyG^GlhIfKX+6w zn>SNEa3{{!fDW&~4Em0oEjr5<^r?9>%IE22SgvKeQ9T5~GeepuO1UR7DeTW(@Qd6r zet)p!oATZyjj=L}j^gQ2d1Vd5N~Y0LYmx5p2+vI(VKjalu2p2|IowD0F5!RC1$@L= zG$I~3DIQ;O-v0_akadXScT;><>BuY_p3NeBG2u57K2n(l{<#!i>L&gf3e8`=H6^Sh z7_DKoPCB3aJ_^$uzbVKMbB1OV%@aKW+s35ZLJumAYBq_LiucFHilvz!vYk_zds6n0 zBSi0id}t)Hd}7II(^RRxq)1$(zrSH}n>cAU^syov@2d}qJDr_H3v)!@V{0-Icx zi;D8r!aRfnEKk@oMaoA0POSb}HP4{E+?PM34jfi`f)W&PDqox98z}k}e`YzOveq zBCT_9M${4Pn9fRcZNn`u6y85LP05mxp9k+(YoI?z6Z?fwP5JYFSQA=aA*@4rgyb3Q zuU#mzgM~bd^WV#U@z&m=(DHZgkFcGGA|mt?Dz9%Tk{vq`-$VM6%1YU_JsTiD3j_b) zEAOt$lb)sWIncIzPL3#F*r8y@%6f69UfqT;TeDGFerMrZcrl<7{ov^G8IoLy_->TX zvT4zWf+$bsnad7bUNt>O6!#;2D+_%W`jq8`Kk_ocSsDC0Kgc-$q5S18rexd+{W)`t^5y#bVi4soQU19;we}m1-u=gg4`F`} zg_Ua`bPGFkd(?}i;3?U~q2<@&{r`no>Nj&FmwZjW;?~-mP(dXX_p^peOQ&DU%YR4i zBeQb!g)+*257Kj>^<{!G6JJRz4`4U=o~d?wzuiUB=FJ;kp9@=V*pTh?qa+J%rFQ)Hh2@do(d5?p?0{)X($3~jJ zTj@b0q!&BzF#5BKMWA;dp!reW%|Vh6^L5s-T+NLNZE}GTt`g24@~|T<=Kh(flCWHj zI`gQ%Q!&5D(mZ?RmZOu*hnM)N-w4-W|PfpuY<`us*^2A1sZczws(~e~#uK^Jm`wgdCkNtT&!Z?bD?^ ze|?Gm$ERYyU^vnLtVjQY{gXQo9ru|@g3s!IylW_b6#suOe%F&tRk)|DdO=lKb}2rW{j<^u9O#qRK>pD>N_9ljnMwq z*roN^5~sK0HNyM&_k*ba4_EkH>vKmNKe=_1K_3R*=Nc88gM zu3Nnf>t`-CX9rVOLq2w_Y-M3AOEK};Sbx4_sNF4cebRbTVm=ik`Y4<3@q}J!V-heJ z&y3bEx2Wf|VzrCHc6z01ygd0nq0*S&G8VoTcpf(H&s48N{zj=h6pUAAYIsSR^nOO% z4tvOe{iz39$=3jqxhU(qCB#36(YlZ3$>7E^|&I zLXU>}7R4z8xPVdmPkO)~_n9-?|JjWF zFYb<+_Wc=5GV$&>{G`?$x;(+mCM{yKC0hu>fK zI@=h(-%S~Wytr@96QcX&q=Y^+r#=FGgb9z0!YGfDo6j)H!=7LHDd4gGP35&K4PM>P z`7efj(*0ry{)$t79r_3(erkE<>anFO3q^jv5h94$xG&2yjo+Wehgl-v1W%6EgNa zgu}7om4%+HN-I9@lcD%HA383681$2Izl+Di?{DGwT>ZL*_n#X4g_2XpMM+5zd^rJivem4Dx!#o_f;SZl?!%NO8!pp#q%P-dZvA-lsOOsz8 zz8CCP`2NNC`n^4W67X0rrS}QW?eX_NiS=XsUC4v=XTo0|$0zDnnDFSYai6DfOPch< zFMd+xfW6@Tnoy1YaCbDheyYIZ{TRKk=KW3dZiGh|`u|uN-ap_W#(P1WFTq9y>W}2R z68J~b;Mwh;P=7zi?C+Hi-hbmFdw#v`kY|k6^YyFH0sk{n;U z^%EK&;Xs)U&&Owmd?N4;ypLc;{~`Z8CH*k)82?!O$Ke%yoTczzHL5xuo4r^pxG34SAS z{fxt_gfFG>o$P>F>AP1XkGH~?^YWZ)@@L*lkUkS;=6S-^RkI`}BaHMB*75xnqd(#H zuQ;P;qJD%7Jorb2o6^{meqlVn4!qA}W5uT@^^f7T9FO$%cGw#mD=0|9d)FcTDuLb? z2?J^PdsZWUCl1`{{}un?H9}0lqUaC;PZ8kH}n+)eIBdSC1DbYMKrJa-^} z!}=nO$ISjA*`8y!17FR~K>fP1I=Oyn2a*5q9;B~gSsmY_D}%k(zMGd+zdVSa8>aNU zj=M$1)b?W-KT~>QJUzUhg+0h2vR{0_q$<0O_{Damq!-eVo}}>fW&$s)N|T-nJnA3% z?Xi+moE%u^%9PAMj|;aX)TM2!Q`kR&sk1rugWu z&|V#&_B6Hr#@yp@jHv2R<@4xjpvG1fJU??=Ql;KS;JW&*|Vl zO7^U~TFm-lw}15{ln44dtG&<=Mt(P(lLi{k{V=iAB`8D8?9^^OD3w{P+mBwq) zGWwo0ej?5T)T77c@~D)a&hb3G-Fk9+7yJnAkR8zY~PMF?G-x? zd?(ui{3E}Z5tMd!Cg(@}1o#;3Z(_0M(&!_I`1v}mml^VkMmU~7S%5x9c={t7)5MpZ zgcqp&asAQWKH}!YcJxV!Rn5k~*9IM2siz32f`>{kfg_({_D zcr=PXOyf;Yl-d&-pQ8Uleb&pdUZdRh^JIM}z&mQGzYyC5g=x{0?|BD-$N5Iw|0s`A zdmtk`73&>&IIR;ve$ar;YYKMz6PU}ArF z_{X3}`#|%NHgmpW=Pzn}yaT*~RIxuS`Flw$2t4w)9`T2#@v)_=qo!y?75` ze8Tau+pxa@X^^}vS6kzgD8-Kv|5$sv^*M@9?KAkd%}c{S8pp@VSH$@z^cN(2jP8q% zm8EMRd3-+p@*PNwpAzxI2cb{?{SAojz<&AX5FW!e2Gbrwn9ra;LO6D49m9Rm`;*rT zV|OBbg`xk@U6Q?hSDdj**q2E2AsfHwmy*NMz2MKstFgg(#Q*JN{_Kk!PyG{K>Ws%L zn2(`-qwzG_H`{nsak^I{eJ|3({1E+%?n>(a6lduLz=!VP`a^vlH{KsD13tVvSzhmL zpdZEjEp!0u!$x{`dy^H&i%-XqzI-I_tI7Ex`~>=vczW$f4?Co-_A7V=!hHN^l#jHK z;`9AkcOOV&uQKqUNBeEit3+?Cf90fG9}6x5J?7UIeH3BCUYToW8vfxDPEYlP+Y37v z^h`ilb1C-rl2y3qW^vB~=p#byu|)j^&YI*WjUROyzw`Dubf6)PeJdW|N2$Hm4_uG- zPfS_=&~uaUaw^_41@eXx{hJDUdpL$L){D?y#b`c+Ord?kdUL6nzi1BV5sv4V<`Xe$ zpA+_yRQ`X%c%X{6e>$~)L4+rl^7YAskDB?z`jJ$M{)P1A{X51V2&26mo~1a&3?1#e z>?pPRTM78Y_o9vcpZ4?!kNy<)8xw-EsN?RMB>jpb;E(kLtZx@k{m&SyMEjJe|Ae1B z!myt*{CdY35-=`ijQ>MI?M%$afya3a%=dvp`yf7w^r{7n=QP(odwpZhp`T(r7y3HV zL&(d{N+`kM&rec(0!1!~FqveP|RveS1>HF({`izM3-Hb4}+UI-Ox{md2y)2lf|CO&q zdc)M;q@UmTu0VOz3i0+UwSSLpLV9g9pVrE7UY^O9CDSVi0}uXs8OA$IGw|{8n@(Z$ zXV!SdyMgB)^;d0A*Z;}DkINtCFQ$EIf7_e9ex+T4@{Q2?6}NW-KYAB7f7pug^!Xlso`&kDQ#qHu7j*#pOAUEr%f{2^2I>1o z?Bkp8KE=BP`ZN09BdWbVYR;;!Q++uX_URMWK_AYCAWx(zdH&>G3_Ql;s82W0`0j6i zPkx^q1wJ)@X8K2;%(!~C4J9BG(TJb{?!7Nm$Mb=52d890-wr%at9y( zJ72W)7ZPNveURs&JQDb@>r0rw*znp}kO$v?LjPTJd$K;HuRe8KSJ@%@;`DcX?_t)!ADc@4D(@pDhBHd`jhF#>){moDEJxlp|teD6#5{|$9ewb zMSI-Eth94Q(tZU>Kfg^_XqA_S`FCzu!1!JKR^JSX`OX-xFO(PBlUVzHtGtnQYyRua z8&8j|`JneXsQn9{!rKpwm(sVN@<&IjK#%stXg`ApWB9r;oR9D#CX9sDY>P z3~%2&M>#&;zIhQwdi1`cjQZ| z@6XKN;q~VGdlv0L{3wlYb=>EYntzbf{A4sSzVjfQtskZSFDr;)N<@ zx&3pmMtONL-y3It3SKOFoI4=WydAj$1D&a#^-!#{78vD?I2mko^ zKXp7q_|*I%J?Mjdq%cXE_0crNUVhqS*jq3@zF-pO7nm>N>m1Bkfc!;vr1Y;e|G@VE zf#>@0dmK# za^EyNX}y`~G5$t-h4rg5g4*t?yPxo`S}nA zJUA<}SUv{EDE}gi)BYbu($**-korb^Y8lPXxZ*hN? zQ63V_rzFSSG=3K|4EeJ0KAn~7tX2t*lQ;Mkj2}kn{w?h&=5JagWqwKcY_H>9v`6v% zR%ZJ;^b@of#{AH6CG{usPTIlwn|RO5z^gQW!+BM+{lyI-GkivQGgmODh=mD{^&O9A z%ZysHy))zI9lizQ)rW!S>n-xMo73o1qxo#L1O1UaZN4x*e^MWfPuU!#pHu0w+S8nw z2bUW9QfYo2rTU~+X5u_!)+<#>>-`GNpGzH7U%9<2-#k|3mK`@@e77yDu!aN~YQJDxKFdsmDuG{^(~us%7YzG!4PigBZM+v-hw+&95b}fejqLSl zGrzC9HS7Hc+6%~|B>M9(!a}v^nl0*VDc(2G`8S-$o52dg?bqV`*zPxv-kpW>dZ$g( z%5Z*CnswSVMexq6%q(H=<9wa?Wt`_b5YCy-^fFvCE$MF^@+!`-i0|{MQqF~vQvTNa z8w4I-sqUCki|-xc{GG>l2F@pjC7e%u5b<;Ayk@Di7w7Xbye}SKn+rVdk6{u!xEtr+ zga!FklXB#lAvc}pgZ)i0&UY&B9Piyjctd|WrceS4Vt<=R&+f#OwBp2_)j!@ddz#mn5O%cs5w14(#7+<7^~N z@yTU@e-YvjyyxD(*Y9oj4+>odMS_mxKM8cRLD#E0T`Sr({<19{o##{15x-fw-~!8@ z+3gyMlJs*zI(kU_igjTM=pz0-j&?1>AR7`HlcC)#1XbM15rgxbiWnOJ;g{gV>1e|M zcjI2ESf^NrI5hNQOZ_u&BLA; zg7{hTOh)`7-6~c{~;_XjKyM^MA_)xl# zTJ4&Xz**^&-nd)!)@v^I~Qot~HQV5QDJJNSb7tRW%c-JH_+W3^w@&Q&@GKzFjSrUa38qeMC@uCunbgReR?^sfG5~iF!eH!TA@r`_Hr$ zoRyzbfk%7ngvuj+DbXHLe&}b>QND|e`ZeIcIXxY>*uix=D^!0{3_CSS+W2c3O*+2o zbb-3WpZE`E#u+E*jJ#00gY-$x0sqw#>l3+ABcu;Q{Pf|(woC71J_12HB${NHt< zb(zyOzTL3wAFGMb#s0ly{f0dgw91R>kyT!NC@>7$M*<1G5+#0vcq=(ceR2OG!|shz z8&7vK_*Ln`B&hC1@H^!H8p;Y4CzW3==+M6McG$llUYwkc>XVgEY9G%u+Tnix!V{I} zTy-znz5l7*Ao=D(xV^el@c)6@4a!{NN9j^Mr~Z%Ehx57G;sh3+>Km`Oeoe4bSa@pZ z`1ovsb}lh4T-@$ooG=TDFHmZObJV`V1ZR3qj`;F)&u;h6hds@Mr4YIGv(l&fJO>R= zpMO+e#uKKQICRxZV42N-H1P71x`8 z?l`=WZ;T64?AEGJTwiJ8CF2*3<4br`pH^34C>4J#y(Gq~Pp8dy+#dZiC*Y6%aesed z`~TEGqEYMjFHPb>!jK%~sJ%MN=zkvbcTU{C#PdUuZ9gkN2|HPzlosIyq9;2^qi2d| z*vF%3^}xr6h1|Z922A#J`Ml7-FKzsUeT|nZxg5RYMdUhL_SOXVg2)J9MY8 z60Nh}+m%FU$;s{b1bl4sR$&?OSv#JOp+`P0il<@mr+gaY)HP}I5pSQ)NkStJMt}J^ z#K(B)6dFR%{Kj8s^l{V=8skr^9MNy38Ap>n^M1;|HYov;&yXAaLrOftQU4Yn|6rV! z(!FsV8|5$u+9MW5m5M9C^bjv{d>&`btI(vRG9(&7oA7@uYL-i&; ze+!IDCN6h^PxUyx7;?nh&k5x)>POEwIVgUD|GKpN32(HoR&nj>?CxYf4tv60iNq`0zA#*&NTXmeyj^{mBy85%V)fwpMVeH&2gYTdXk)6 zPbY}a?QH@)>3J6Ht?!6S?Kv}{3rkOACo?hMwA-SkXQE+)CF)buxLDJ>3HntU$CaRw ze9HfhE0Ic~KVXAP)gh~qB5u~i!_2iM582&P@EP(ynUTuJu-iF<5o+#ea%ILPV8!R- zWlYv1e9T;KXThm0I!ec=|J#yi2%kxmgJ-FaS^X=?nwZX6V;4J|&`v3xvyh+17PkBE zbR{IFbjXq33L$SFjp6w|Sn(6~S2IC;KHeQSSh2@9(tlAvZsTbXo*bm3 z@p7U)vgv}*79Gi9@WEh*>aLBKMQ7y4rdL9kKTDp3UenhHZl|e>wBTXICpipz9bexB zN{i-~6WF=Yzg;qc9?#OT9`qQklb9lNVCA32&6vM9sOj zw_pBy$JLX#Jy3bXV;UYSe!?EEogg0z)j{OsMEO{VObk-HcSrhsP+FAVd7%52?sWRE zOFu3mx}@>bn)Gx=zM$U>(rf<~eL+)bqQ+6Y^k-d=|7;jR2?w`oMjdDf%2u`*sWl}lB z+jq)OO?rEyyz}z6*8eA{Cq!qfcMiXAVt%kDb-?JqthOepO(tF>Kee~U{HZIgo@l&k zw5R`hV*CX29+KA@x2Jz^Xvjh7@cv^0K7{9Tj$1b{;?ua#7-ua`YC$NU#(R?`XkP}u zr+%lHcTa{D(q9nRend}>#u-b{-e9QlJ=CG^`0vDeysZyU@SQ*Sq`Hr)wKY~qu(mO` z^PLZ-PlD+_|A$FBB{7`%XV_IS?mJf_mVKta2Ozy-og^Ff8S(!F^@I|@FF|MM1*05u zy~4m-e=T{aU5&3FToPwvk#Sv+JfwfVEQc-erl&-!;}1+kN@!`9#(v+7e@W= zOR_af4yymg`?~v`?f%BDbn_vSgXAsL`Fr{9bH`~rA#Y-y_rkdJjCzRo$_{#~{5Ja@ zURW7JA*=ErA@fJ_5k1*C-ZN7>{B5YpjOG8B-riZX1g-p9_D$M}p` ze7Id0>vuhi$CL5&h?dV2xP7Fp_HjD0S3X~$e&B<2_UdH3c^RzG*_6TO)q~b16FXl+ zPn5GnJ*O7K&{GBW{h(=i9!<+Z|7(-lHN1n)R$BCwGH1j$ z-YXjEPy}pgHeY8?2PE(&WO65H#4DWly$$NyS%T#ttR z_xi6%5{c6iosr%g-p*V7g~iCuCvNvU)AJ!(Dqpm#Sx`HgCDv%j&xNmOvA0bZz(7*Eep(Mc%G$O@RPo*9x2K8tPhr+|Ih#X8-o)Yc>bk z>RPaEmTlf#vAH=I*jl%(ZtLb+e?v_@Sg`HQ*KciVIlHF59(#>kTTOl!yXu;2>aIb= zjqo)G{aXX9&9!|?OXCel&4*|8kbBF{7NofgoVRb;ytTDy^L9USvK81iBQmRXK|Ftb zU~6N;^+*fSHEv<-DQKa=)Y!9l*3#%_nHe{1ZE4&N>;o?7gl8)N&RhI7b&Yim+Zx#| z2n9|5eU8nfIBbvKysZv8YGkhqo9mkcf$QoPm$08WH{Z}yN3sRMz1iQ=vXho=zV3ujU&3s&GM|<&x_IP4)g@Fi^8T(A-+z!WOfN`o`u! z71tWO%DJIF5D2nvqV+X3ZY`^+X$mysz|F;ub&dX-b#+^s{7pN{81p+f+)&rDwRU6U zMqaKsGU~XbwI$fvQW@CNdd&t{P{TE#YbH)M>AvRtyuYqxbz{>8;OhgIY`HeDwFRYL zfn2u)R$U)xXhE!dSY_b)x~+jVjTMazElrK}>~zW{M>E!$j>oDt_7ev(6{niVD*O#w z1NCcQU6+~sVP1hU_Aw)kn0aA+R$h@$(i~&$^yH$(n$~(#FOX;rJ*#MKYJz}9j@Q&M zHl6FYG5~vS+{vc#kdYI{eoE4`ZVy=cx!TYzg{F2U}X30;H)xTMPRp(KPM!1)8=s zHf<*rR5Z2%)x_SSJZ!AndL4hj*lJszsIZ{`Wa=KYr&ip?&ia-0zTTguO6bxkd;{`yS~H`Fyi$G@Uy z>lz!cYYnb$ZP-f8R>3BAGPZWr`iobsTeQ%q<9`>{2d?2+zsz6X8d!x-rm>&UGj8B( z13Ot+)!{KXeZb^h6a%`w=yupfbFD!nW5#aR><1y1F zjE9t+@7rXmsP{KFgX^GUW0Sw3xgNG;vS#dj#|E^(iIj$fwRQFNRD?||lS^@FYn>$t zJ1wpU&XeoyR&ao&Pz1J|N;uB!A;`(C-4uM&hE?k=jn)f@)f%jxA4rRocXyI2iv~EuzS*7(H{H({#EoAj;YRXux zg*7Fzq*!A;kH<1>0oA6dF&JoSK@)euIGQz9W-0?M{mrxXA~L zGwhT4*Zt>QwSi#&txi7Xz7BqJZ5T_&s_HHr)VQ9uVOL9CD4gP3nvpE zP=gD>=@b`fdq`$D72z132jN7-_2OC7Ohd;rm7e1ngHzy-!tF;nJ_C0M?&okv;Qj=6 z3@%e~vMF!{a0}on;5Nb4!nMKO2iF7l6x<7NzlHk~Tt>T-odSpNqOx<~mcd;B_j$N& zaBXn6!G+)+hU&T$)LfIA&-E?fy*6L;eG=58r&b?K7w=YcCvi9bK%y)T?cmu+(U5t;hu+k9qv8258zyTkPo;s;VR%Z z!!^L|f_nh22W~&yi*Rqi{TXh`?M^luZYf+9+~sgVxOTXE;JyX-GThs6$Ka;i;bcW{ z%iyZvu7|r5?rU%nxR>Dm1MaVIG|P1`Ix~^MCb3Mcab)3}Z)!4FjGau~5eHaEZ9$16HGh5T#xOOu&RX+dL>jEv!#seOMqtF@}7z2@r zvz~?=#zQpmcA9vwnPEV+cC$GOF~mrE!nv7Gf;%gl>M#^V<7h;q-oPBca1!1wZ}Ve> zn);acj^?P;BE2lo)Qn!+U`6B96z&kR0z;{W)?fw3-&>G*gOr}zQ$-lPa8jzxP-$69 zi+^kF8XBsvqc8>(4FQ|ihM|#`i802CMu0jDI|nL*Kok0G15HDT@|~B})%faa%qKKt z=ZR72BoZ)`NJ5YgV@XbPQRDT2i)ri^5AlJp5!|q|VJo}j`g-JJ>yFmCrhpOPrOqEi z*L+}Y&H?x{o{r&bu4vpItPem|9yUzD^z!kk@tlVB313+QCKxH$OX_PdbV$%#(qs(K z*@l+wrrmNMPn-MJ(@co_HnjMgS}bp4(C~epPlYzY{5O|vX>4lo)dd5L2Qjj!+aB+( zt!Gqf2HKcZ@R8FtjB)tG)%C5-wFwqnKO6!5l-0MSaHEIK&5c{@P>40-aWJcGb=S0_ zh{-N3Hs<^R+yYHB`iH%>U>cN)U)|*29=N!5`xZ+yUK^UXHq`}NFvGLBjho9^2+D-7 zvA%BW&N!{F@rFQC>N9hwV-Rtza}MOI^ViqiXle^h0~JIi5fGNc(ElXV;WFAsu6`-wvm+WK|+)bFuSd(rG-?-7a<;|DJFVqRNeH& z1bnJ~=~1eF6AHpW8EUmzsQG|e9?WdxMrb}xn4$H6ngY{5fz>6j6N#Rn!1&rSq{PE< zrj$V0GHZKi%dYv#yjh8J{NHw9^%4otcO!ByC#KX--L0B=s;eW_H6;q;S zn0)Br_{=0q55tE4tG{`S$#9)lIyuzfZ-bwpIG?d<_z5a-rSKDs!Fk}vfQZR(u`eJl zpavI(pP+aS#?tT;#9)baTmyQ*;1b4a;a31<+yfY*xPanPjQ5EiP&yysYn>d%;P>J= zhE~i67eQPZ5Cbh1x(?3)!=|60z6vtbJ2_M?fSia+Ft`TCpDA5Hbsc2B0&)TdFNS{` zo&#z=#)jc1C}IYuz)vs;r-EJq3{@jZJP#ARlCiM>dNt7iimk{a(EzGg zqpYQT0S4QUm#vT)(0ildmjGio8GbB#GUXQVB^p51Zukj$_P_@4Tm0Q#Ob{4${DJBD8*_+99S=mA6DGyGvd z_B_gkY!y&`0ebs9WB}CQM&KvtdlCAA-O7N{FycZ#1ocCp_ap90knN|)FZ>c<=vDB9 zKMd%74f+Rv3D7r+@OJP4RF0xv!%tBBgs~x{MbLK~dEW#YKvfX%QV22tdK?1Rl?WJw zqq?R5>Mnt`Aud66lEAzqGoYR+u-IjI4yb0~7G3x?z}RGg6_Lz2@Sh~Gp$p+ZSzuDG zz&eo@!6+_Msit}g7&;a45jPCTK8v*BCm5X}uu|d=sGTmbQ5pOJJq6$k`9;9!9N_R= z2b78gHjL*4mAL{7<2ga!Spw^z`~qqVARBZ=Fnq4SYVn+)ejXg!9D<$|pdtQ%;`st| zlONExQeZN8%7DJr0?Q*mpbAGerU7~`Fm(v%t%7_TArD}1jloj^6xTy1NQ)r53OMM5 zpl>tMY6MR}&lZH?7Xh_x;IkS00fTi&4?Gn>c{{@J6ZAHL9)7(IdEbRNRPKQK&EQ4P z0ljxY2Bal^5i)!UIss3D;@y-s{D9&;rXNs)8`*$#0fYA;E@%`$>3+z7{1Oa*4Km|7 zLC?d;7wAPm{p%>NtC23C_6W)aeuAEFzy^p0F!W8>0Q_M37KErJw=yy$hb?{{zzfBk~15LCy3N^o&7Qh${lh zAHg=RLb`x5K02#F9)hux9V~+9>@#>a!@=CBYXr5^anB5B2(pgCzFDpx!%F5 z;Ac00=We7&&-Vb{fii=ipbj?#KSAYA$Ob>bC>-fu2Ml*W?u(EX!F!-9_(ec(i1Y=X zfa+ez0KWz(eG4*NjOT!%eUJhEFrepg$Pd2==z9YE;gp5W?^i^!)_sQNIru`x)fNbG%ez>{U1){D9uyLQeQ4z~Fm^UjbzQ4PHb87knWEnKS8=%iu?p)a2ot{-;V+pqOt}I!-;rK zP=jlOpP(<_$vR<61Qj?hb+naAAxA2oDRLAEC_0Fo$wPB&j2m_1f|bm?bl~O`oIPG35MVl_zC(7 zoNO3=f;wC+bS}<>TyUjm!wLG}DDMP=a3nuL6>bDH1igiLcDVs%@_zwo0ftOJ!6;lC z`X+)gxH0&>vp@sqMIH&p;M{%#`ex%9o)eVeV(=4WbFlV}aRosME&@M61uhR`9)cmb zYWNApC=5SA&zX2$Z9oZr5As4VNY5!>fFU@_BS95T1U;t75E8?i;Qw17=o)p z84>iAAYJ$gYH%a)6O6&-Z80D_7c#(4&<7WSpP&ji0zW|=E^n&=y^BE)KS9Ox6I9`1 zcur7h3jDS36AUc{4g3UEIB}Z+b@*lY39@C-5BvmG zIO!S#YUhDpE%*a^SAYh7f-)SdGoS*075oIH^HE;#6BJiMSJxU)f!}={XaKzu^Z-A> zAY5s^0p&9Aho7LQ0({^ns8>Qi+YRVh1qeSu6|SnmfKm80_zAMr;N56IAN*nR|NHm9 zrh%e{*82Klbp3S=t<75!@3PGWw8YALN{S}lwl0`VVB+~YJ7LW51WTNDyln~7#?p*G z!K!0C{t4CzZOoG7nP^=xEq(GTqm3kyKiewgczo(Y=Y&ghdR}w!rVZtcty@zLi1(WudfBFi>lzwwXoxeY=Wi~( zBDT5Vb%;?u6wiEaz1fV@-?X@5@zTW$mz+C)$)d#z=P#^WvSdCUteU@Q(V~S5E6-h0 zQc|+`<~TXKX`y#f$)d7_OXn}HEL$+Yq_VtperegFiunr`uUfLC#Cz_N^3~_s=~pjZ zy=e971ts&#RxJd5X_*)F3(uWj>Rqs)Y)RSDMGGpI+URF{ORMM4_Lju|EUcdGT}UCr zlL`}(8NQqTQ3kfOiNmzxfBCTBiEz~yXDhh_dl$TJ@edtwDwrWMa`aQoFh;EW7dFGV zLJ+Gwvfa4-R6Q#Ybu*99Kq}GjxA8XXrcA&hB~}&X{EhH#&7Gk zYqnq0MEGomt(6R~%GZib0se}#M%;?GGkAg5*xD>^4{UF2+9|FOXSd?U;pQ!MEydYj zL9f*gr}gZJXCrmKl%Ze@(p4Pg@-Ev~p*I ze>?WW)z|M7@dvwI@upMsH;WB{Kuw@#8R@|O%UZi`!^X{(t1eq}@#;$qZSic10lfMK zG2ez@-(-gd1e@phCNSbN0emuX*y|2K4pSGnKwL0`q8{r?MQw|#P zwV5zzLfM4A380lsm5H~)QcAcqB^*l$YboJSO4#>;Azx}dE4}~o(1kJN(c{O@g(4=y zNpQz)HlrZi4qMCvbi;{ox5AD4g&k7-*>Fa}|B*ZHmmbN9`+d)TChnj0!4%7{e6@4B z}j7!qO zv9TvS?>zt9N0omV_{CrT{)e|NyzwhPTNOC`;{7N0KM~Gfj)u(>hUuMfA-+YS%ojW{ml2zTj2lFjVt||E_vEApZ_Yh3 z|F_@#>8r!8H~U9Yhqh#C|HprLw+IcOt}Drk5coV3^SW`*v(SE2fmjw@^qOPbFUN^V z7j`=1{2uyZ~bwFz#)U+kS=v+%qEG}~E_`9Z%E z()bZFmQZTJwFQ`E*z7j6lM*jIv`@B-IQ3#V-WuXxf>Ib0i#gw^m+SPMtPBVk`xb(h># z+ZF6;>r%Qpxvng0y7Ril?xJpQcWJlO zUDfUDuI`q*YrBKpZQV+DM|Y^Zvpd`!=~laky0z}%?r8T&x86P49qS(JW#fn>F5ddboPXMB0Xx)P>Ct;edtyCf zJ*?N=>*>ww6?=<%y}hNqQg2nSueZ8a?yc<&_O|sZy&b)w-p<}|Z=_f49qQG3hkK*F zBfWa>Xm6}{te5q<`#gPlePUlxpSQ2HPwK1c^YvBt$$hnb!M?UWrLUte)YsV;?u+!P zeM5a(-*8{FZ=_G}8|{nrjrFm9cfY4UuV3sh>i71S_DlU${l5O{e!0K4KiJ>auk?5H zhx$AF!~KzdwSTBz>mTlq_K)=I{iFS{{;_^G;2!V{R3=f7sBa{)%NMKMHREBO|Odd0DAP-C>0OUI03!+F-bSXqi zC8d)xM&VB)Bv~c}Bn>1%$x_L>$;9NCf6b1Q@UMSQ+(pZudsFjq=Oh%oUO6$yG=5>Nz$B=p#z_x+udQubut1gieK#8Fw zQ3?PRP!cgIDXB846STw6>c0TAG>{Cj`mapsOc_fdrpBZeq%uo)PHTe}$5Q#z2x*pS0clBT z18GpYRJv|DF+C=|Ae}#hkYSk-kdc&8nIT2hr4p$z)B-A#IzT047GyFr2Qr~7sVr3f zRR6l^mN^AEpwSBuYfPj7?aWL^%S{;4pN0@6pP!UYITd|>|u`07lK zp(at8M^Jb)i}nGeO?WEIp9R7?Q{|v+{%p%^Vm8WRIxh|6If8u|;ES2unOvDZmM+Dj zmOoP}lb9I*C`RbD%nHaV$YN$$g1w=r6H|4G$T)VO!I>`bER%^T1!-UevWYn{xl-WC zgT#LH^m7K!B?F8>CP*8dsymhrWuPu#Sow7TVQvFt;Q*)tHhO?FU|`=U3w?CH!c#_-y`sQ1b&ae|Jf1HkO8Ejfu2Q{QNVG^#~a0e z;DOlD`D7UhkR*bJAi_MD6UU}7AA=TS16#*&Tnab{3z1i$A#DCOcq^AImYUNhRwyF-p7>SO^og$2x@Y?OB_CSSx%~3U zl1?z0O$;Vu(fJrOghunt&+1(&+`H0dy*AfA%X4nGV4hiuAvQo8iA5^L3X2m&TWumN zfCX_N!X?P953YjJ1NVL4jeVU7qVPf_d7dC&NJz*^@WZ@FoL!K^%r(%{#gphukbuRIBrZWgaB6g?Ckb!r z>Wbg!=j7>2@|(@Y{4y6NL(+3c1!6;C$Ph1hx)2wd3_+;Wc#k32BlS*buaDgp9Lb@s zn{#r*x$0Bg6YpM>?6Q2>Ilg=CiK=W-__ONH4D*j{=DR+s1&OZV2$zko39j3d<}z|- ztmGMVRXH|TF|ud5XQyn+@tVE-0c?k@K1Ps~d1Ee4uGqEUa6zA_L#J3Ke^b^G`<{_! zYFjuqa*M4n*mZR9lsy}_vW%Qej~#hnEjp~o{jw%MiMfo_*eYtsWuIuue$ZT{oTHSd zTaaB?%Q9;le;=yw>0Qo`af{6QR?PqEwoc;>U1|%T=^#x``xJdJbNZ!F?!p;SC}_OnXHC#8A(!%-kGKuIcYdLj(4Nj*_7YFd__iF&O7X zGFTBn20M|6D?#qh}N=Q01uDP+#TFj?8z3>RE=Qv0MN8@+O|z zL9^Ja@={U_>9#hg^3bhYZgQ%bqqFvf)L-gSwke*J=1h!z)M~8X&%h0_*X>d%f81^q zvUC+;xFAwZ%e)&>R*e#?&?T7EH{>to$qyF^mUwGGeqyj)IQn8rOX{h!FHZL0!pBDV zQ=!*mCyUmbY-X=Hw#c)b_;|75o9dR>Cz9pC8*Y8Ita^@{9B*{ZS<<-)y(7qCKi{R% zLjWCD!(@!i6gqMd@n$DkVrJmf&i@Wv6va)5c@_~ z7au=g7lI@#ffVBsTwvzu9Oy^#a|;6S7wGRdb=?7BIlL6f#|Yx*<^y;H_jJr&u?29; zFNlSa1b~rh1Wi>n6%~My%F|IbB>E#p{(In7fR|6vB0a-i_#c4Vz?wx0!0f-p$mXkq zq$i(loE=nDR6f=>7_+YBnw;^e0Qsh#R8{vvE{PKkp2u`5FV!H^`C1eQ}wt z)u*;?i3_3vhSbiR1#+%Ar=?-BJ%k{Bu==vBK~_nb4@zhow)TwRuq78&S6BK^SK{6n zU5jI3wuui!O}6x`d}1fDX+;$Enix*F$b;0OiWRgi2=UHmhZD^aq z$e1=b<_e2b0HScg954=t1>k~$=Yf%4#ET#v6weY~Q$6T&GW5Qrmay`SRc8+-%|Xt}8uY> z17%%dob$hE_m-i#{VUdqzX*-GF}#7zamgJLF-dCVgokr~h5*AaUtr`;Uf12F+SQM( zCpvG$@CG#e5pgWB_gYUwS|MXBg+FqrjIg}a&dpyp_j7PdPqmn)e8(O(i~VIutrt_; z0*Z5sQvJ4afAqy)eEaZi%wBb*l`wx z?2LLy?3y@+gEr_Zsbf}BRa;ONO*HXN(+c z6TTejC2vYeePX)#i{v%@i|Zaad$&F#I-VPz-_j!*nfENTVSbrZF#BPeZ~uWE@?JTQ zp1Ri8D{A}nVtd^U)Ril+G4-V=U!rN+CEFW^4&^B^m4g}@_+2sV*Iw1yqqp3Rzah3v zwIac|s=fF=+1k&8F7(i5^ViAeFJC=R_Lp{yc_b%uA@3@$ag`cv8BdcKGrwXXVfwyn?&mg~Z}vRARiZy^NHTZp66#&s8xcn*?kOA)P;dG?;ex9? z+gM8FTF5hyHmq}UINgVO{@CHL_WFIvyL@s)aF(}=MK&ozOGSx8ak_oYqeHD9F!}Q$AQ_Z})mn75bK5M)@ z`B-b{nOOj>GfLHY<_aILFKB|PG`x7?l>wnh$6* z&LXp~(e{^a88k(5&>@wpD!0vH;m4EG$}5MXR*z0dDi5d0b-n)TvpMce&)|*D`{ET1 zHoH>yz|gdsh*1ObmGG0AhiLHMG!tPYCWq)LbM-zBFvjPR96Xi`odS_6@Gh8D%GeWkt;%E{k?boxw}nT+9er(%v~yN!=?hEVRU^}ScA)5` zO4Or=xgX(3gaH;~cfvuiM!tH!YP|A{X8e=tKQmpYA;DOGS`YUAx#kaxfWNL8GQ%-I zllOu>|Dh(YJ5vir$E(fI`=2!VA4v}S0XkXAIwPn-2W7f*f!vlg-4d9|NP{Z|0&Y*2 zxjNqNTV4H;hgqg__-)K-;#lq{s@1IrhI(hB*NhomUFQy4FTVb^!!)j8Z_$xU1H7d; zyACB^`(DwZ(Y??6|EyT!jXy;4i@Ld2q(8np>+_N42Lhkz^40~^Xsj4tUezN}m@EFm zLB6hc6@H-Y>}ZF#cX4%Fp2_>okCv#eSy{(akf?p%wB~E4qNK&!)GOm(UXtz^*NDG; zH(5+!Y6^+p9tjZNLH+bmCrh8Ue7==^XkBelY?D7U>ZUVT9;P~=V1_ABd~$EIlgLO9 z=l(+aP3|k^V&^jDLOnARZ`dS0=t~&wcDD~I&ON3Nq)j7`HuPy}gTB}~xX;9c+xp;9 zY*dt)!w*CDU)G2b8wLReHj8Pa1<=pcK@^^`Vf?QcR{qYEacM&4N$S#z(LzPh$__e5 z5Bm9E7*r1k&X5Vf7k$ zmXH&5L|?CX{?zno1e;jhWCEx8l2xy?iattvC$yM|6JM9}+56RZhGpA`I1avCUW1V@ zx;_>wYVOHKTE_WFnlD8i zuDg8m%0sTGo8ij%wcbnWs5H&W`n1dRXYXFFcWbU55*V+}$ej$@N>+NKTHi0ZXWb9*m*P+x~75(H+t_EPiV1LP?7E#hfe8VKX9@&q3f~mqo?m5 zt{vdKkQ=6_x7*5=?RW}b^9mlX3rC)Z4t9myth<{<-F?P1Ss}NfD53IxMU!b)MmDCo z+(BHQS7p_LM{Scz*4@HI+pXMl3tR80dUKOZYIYT!s(z-14)uS53UB+o!CYGXtWaFb z;iUV#+QA1}=OsJ^QtTR#Vl~rJ4EJRMla4w59K|)fZt2-G;y+3;*YDRW|9;IR3rhp8 z0&6Dm87*hZ7C*ISLbwkx=m7Brs{`RRwM>Fp=A}7N_`k7q`#WhhL{`k4Xl?u>tvH&b zP6!__%33~tr0BF5yemoF2Hq9Y^=d6VZ`v^4J>R$q4;Zkjyy;Zxx? zKa$MXGHW)$w#&JDTkT z{)icf^(B+mE!iMMDYtRsx_Izh*L7U^@i;%DxNLKs(_^NuE2y8|U)Qm-eP24JRPiEF z`n8vcYbBF({MOj*c1f-v+dt|&qH23WxRzQ+@H!Q(QxtoV zCFH_po;nb6KCst66mohqwSbUYH6xM!(Sl~Kc#D}5Z-_@kD<7=p;#Fsw`b*(9yD*w< z$NT5He<9X>Rri}f`{iPEu0S&wF06Q)+(srSTJA3?k;;AJbA|T@bY?Bf)?2J?sa+;p zqOs`I_T?2D+c!QV7&5GFclGeh)2)8>B6x9-#_K9uVqs2Nlf`55X_?M5TJeF$HA2gR z?G`Rn4K&=7YTY?}Ry{7{s%-Hatf&?3>7%C%r)!_~D^eOSbk(Fb*qc|fbv2{R(quDhDF58KFdoTHzvdyriBFbR*G-fAidrmeMxNN?;=jRa+XY;rC z0$>}Q@$hqE3Bai-wa1~j|A}2}rN$$+iz*Y6Dg{=|xm*I=#{g7OkuCc}s>b%@JmPb@ z>8>QRDOCIQEv-ntgPKYX=oboxAJeX7-Vl2#AI{jQRdNb-k6Z4p-}5cat>fmgY76$q z_Hn#7s>o1D19d2%J!CX-;9erW&pef~#JFOOT|653=~pR%Rh_jFVDBw6XaP?}c8 z-4`N|;oAz{30M}r%wFKJ(TRbV-bHVEFCTS4-|vlAewx4Z^c$(xrBY2<{lh^JYWLpSO91uK9>~D0^T#57}WS zEOvPDICAfITJ2xv(Ww-%eTAk(wD^P3;?#2Dn1XgTanRDkbYkbghYG#20y3HxCZmCA zXnKDHCyqddJ_ETjj_}RS|AvBr=KIM&J%>x|V3BXcVF=$S1$IV>Z#irP-l^RR%Bu+K z%HWobZ9lPuW8+XfswwmRC8N>KTbE@6V+pW&MO4vSQLdij)m{T^4W3KC zRDH=zG1&WJVwb02Nq7w|&Qw#>{58!eu4F~qi%X7OoCnAw5*2W>-ef|1VsPuKp1t9( zOa+c~G(A|?rLVGLVO6__45L3^+@heNv1w%j#j}n3%2{@23G0M~b(*Bg4~CY)YsNYz zwwdFxzGZ%dR8p;t6jWz)RyOuDo>_q(uNtm7SGHZf`=z~aYvc6}E8#18c1)3t+v4sN z2btavz9Za@&crA22p0wpiysMfKN6g5m@rE7v2zc!3K}@s$TMy$W4G^2qd=RlVq$O_ k?n}g`gbb_phtg-YhfAZXAE(32HRayLc@L5`AJ(A$2dd%~@&Et; literal 0 HcmV?d00001 diff --git a/Old Matlab Interface/bin/dll/x86/libusbK.dll b/Old Matlab Interface/bin/dll/x86/libusbK.dll new file mode 100644 index 0000000000000000000000000000000000000000..0d41062911fabaa111324b1e7887ccee4f491000 GIT binary patch literal 84280 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 IIt$qT3nao=f&c&j literal 0 HcmV?d00001 diff --git a/Old Matlab Interface/bin/lib/amd64/libusbK.lib b/Old Matlab Interface/bin/lib/amd64/libusbK.lib new file mode 100644 index 0000000000000000000000000000000000000000..c8358a402616820ce03836fde9ec66d91c8f0293 GIT binary patch literal 23804 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 UYeC6J?9f^eo6qYGF~jfqKT!rjL;wH) literal 0 HcmV?d00001 diff --git a/Old Matlab Interface/bin/lib/ia64/libusbK.lib b/Old Matlab Interface/bin/lib/ia64/libusbK.lib new file mode 100644 index 0000000000000000000000000000000000000000..b8bdd81676ebb6d619fc044141a7fa6b07465f60 GIT binary patch literal 28414 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%0DaICza6FU$L{#*=rB6OXCZ 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 literal 0 HcmV?d00001 diff --git a/Old Matlab Interface/bin/lib/static/ia64/libusbK.lib b/Old Matlab Interface/bin/lib/static/ia64/libusbK.lib new file mode 100644 index 0000000000000000000000000000000000000000..0e43a803c20310a795d9778dea7ab4827364daaa GIT binary patch literal 1437590 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 z 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®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%0D#;?0njhp9_~3DKn?h97`tPeT_SJL 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 literal 0 HcmV?d00001 diff --git a/Old Matlab Interface/bin/lib/static/x86/libusbK.lib b/Old Matlab Interface/bin/lib/static/x86/libusbK.lib new file mode 100644 index 0000000000000000000000000000000000000000..f5ccfdfb550ef5608c7faac6769f63905ab5b927 GIT binary patch literal 1079964 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 Q)4!|Jzq`}_*$&qiv10k3PXCXpSC;kcQp{vt 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%0DIcJ6{uJ777^H+ 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�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%0AAsWA?k0u~ce;XczQJrC;)FZ~e&|Kz1K@`;zc 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

    m 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 +// All rights reserved. +// +// BenchmarkTestDevice.cs +// +// Created: 03.05.2012 +// Last Updated: 03.05.2012 +// +// 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. +// +// 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 TRAVIS LEE ROBINSON +// 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. +#endregion + + +using System; +using System.Runtime.InteropServices; +using libusbK; + + +// ReSharper disable CheckNamespace + +namespace Test.Devices +// ReSharper restore CheckNamespace +{ + public enum BM_COMMAND + { + SET_TEST = 0x0E, + GET_TEST = 0x0F, + }; + + public enum BM_TEST_TYPE + { + NONE = 0x00, + READ = 0x01, + WRITE = 0x02, + LOOP = READ | WRITE, + }; + + public static class Benchmark + { + //! Custom vendor requests that must be implemented in the benchmark firmware. + + + #region Public Members + public static bool Configure(UsbK usb, + BM_COMMAND command, + byte interfaceNumber, + ref BM_TEST_TYPE testType) + { + int transferred; + WINUSB_SETUP_PACKET pkt; + byte[] data = new byte[1]; + + pkt.RequestType = (1 << 7) | (2 << 5); + pkt.Request = (byte) command; + + pkt.Value = (ushort) testType; + pkt.Index = interfaceNumber; + pkt.Length = 1; + + bool success = usb.ControlTransfer(pkt, + Marshal.UnsafeAddrOfPinnedArrayElement(data, + 0), + 1, + out transferred, + IntPtr.Zero); + testType = (BM_TEST_TYPE) data[0]; + return success; + } + #endregion + } +} \ No newline at end of file diff --git a/Old Matlab Interface/bindings/examples_csharp/Handle.Test/Handle.Test.csproj b/Old Matlab Interface/bindings/examples_csharp/Handle.Test/Handle.Test.csproj new file mode 100644 index 00000000..acc8fef1 --- /dev/null +++ b/Old Matlab Interface/bindings/examples_csharp/Handle.Test/Handle.Test.csproj @@ -0,0 +1,84 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {204628C0-DFA7-4DA8-BF4A-3AFB81E74F89} + WinExe + Properties + Handle.Test + Handle.Test + v2.0 + 512 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + libusbK.cs + + + Form + + + fHandleTest.cs + + + + + fHandleTest.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + \ No newline at end of file diff --git a/Old Matlab Interface/bindings/examples_csharp/Handle.Test/Program.cs b/Old Matlab Interface/bindings/examples_csharp/Handle.Test/Program.cs new file mode 100644 index 00000000..c361e69d --- /dev/null +++ b/Old Matlab Interface/bindings/examples_csharp/Handle.Test/Program.cs @@ -0,0 +1,49 @@ +#region Copyright(c) Travis Robinson +// Copyright (c) 2012 Travis Robinson +// All rights reserved. +// +// Program.cs +// +// Created: 03.02.2012 +// Last Updated: 03.03.2012 +// +// 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. +// +// 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 TRAVIS LEE ROBINSON +// 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. +#endregion + + +using System; +using System.Windows.Forms; + + +namespace Handle.Test +{ + internal static class Program + { + ///

    + /// The main entry point for the application. + /// + [STAThread] + private static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new fHandleTest()); + } + } +} \ No newline at end of file diff --git a/Old Matlab Interface/bindings/examples_csharp/Handle.Test/Properties/AssemblyInfo.cs b/Old Matlab Interface/bindings/examples_csharp/Handle.Test/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..7e54ebd9 --- /dev/null +++ b/Old Matlab Interface/bindings/examples_csharp/Handle.Test/Properties/AssemblyInfo.cs @@ -0,0 +1,69 @@ +#region Copyright(c) Travis Robinson +// Copyright (c) 2012 Travis Robinson +// All rights reserved. +// +// AssemblyInfo.cs +// +// Created: 03.02.2012 +// Last Updated: 03.03.2012 +// +// 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. +// +// 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 TRAVIS LEE ROBINSON +// 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. +#endregion + + +using System.Reflection; +using System.Runtime.InteropServices; + + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. + +[assembly: AssemblyTitle("Handle.Test")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("Handle.Test")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2012")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. + +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM + +[assembly: Guid("88461b6f-5eb8-47ed-b3f1-0105e1c85f86")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] + +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] \ No newline at end of file diff --git a/Old Matlab Interface/bindings/examples_csharp/Handle.Test/Properties/Resources.Designer.cs b/Old Matlab Interface/bindings/examples_csharp/Handle.Test/Properties/Resources.Designer.cs new file mode 100644 index 00000000..fe0a0794 --- /dev/null +++ b/Old Matlab Interface/bindings/examples_csharp/Handle.Test/Properties/Resources.Designer.cs @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.4959 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Handle.Test.Properties +{ + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Handle.Test.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/Old Matlab Interface/bindings/examples_csharp/Handle.Test/Properties/Resources.resx b/Old Matlab Interface/bindings/examples_csharp/Handle.Test/Properties/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/Old Matlab Interface/bindings/examples_csharp/Handle.Test/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Old Matlab Interface/bindings/examples_csharp/Handle.Test/Properties/Settings.Designer.cs b/Old Matlab Interface/bindings/examples_csharp/Handle.Test/Properties/Settings.Designer.cs new file mode 100644 index 00000000..9beca6a8 --- /dev/null +++ b/Old Matlab Interface/bindings/examples_csharp/Handle.Test/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.4959 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Handle.Test.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/Old Matlab Interface/bindings/examples_csharp/Handle.Test/Properties/Settings.settings b/Old Matlab Interface/bindings/examples_csharp/Handle.Test/Properties/Settings.settings new file mode 100644 index 00000000..39645652 --- /dev/null +++ b/Old Matlab Interface/bindings/examples_csharp/Handle.Test/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Old Matlab Interface/bindings/examples_csharp/Handle.Test/TextBoxTraceListener.cs b/Old Matlab Interface/bindings/examples_csharp/Handle.Test/TextBoxTraceListener.cs new file mode 100644 index 00000000..53654e97 --- /dev/null +++ b/Old Matlab Interface/bindings/examples_csharp/Handle.Test/TextBoxTraceListener.cs @@ -0,0 +1,160 @@ +#region Copyright(c) Travis Robinson +// Copyright (c) 2012 Travis Robinson +// All rights reserved. +// +// TextBoxTraceListener.cs +// +// Created: 03.02.2012 +// Last Updated: 03.03.2012 +// +// 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. +// +// 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 TRAVIS LEE ROBINSON +// 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. +#endregion + + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Diagnostics; +using System.Threading; +using System.Windows.Forms; + + +namespace Handle.Test +{ + public class TestListener + { + #region Public Members + public TestListener(int threadCount) + { + mThreadCount = threadCount; + while (threadCount-- > 0) + mThreadList.Add(new Thread(DebugDumpProc)); + + threadCount = mThreadCount; + + foreach (Thread thread in mThreadList) + thread.Start((mThreadCount) - (threadCount--)); + + Thread.Sleep(0); + } + #endregion + + + #region Private Members + private static void DebugDumpProc(object state) + { + for (int iLine = 0; iLine < 64; iLine++) + Debug.Print("Debug test output. ThreadIndex:{0:000} Line:{1:000}", (int) state, iLine); + } + + private readonly int mThreadCount; + private readonly List mThreadList = new List(); + #endregion + } + + public class TextBoxTraceListener : TraceListener + { + #region Nested Delegates + private delegate void WriteDelegate(string message); + #endregion + + + #region Public Members + public TextBoxTraceListener(TextBox textBox, ThreadPriority priority) + { + mTraceLines = ArrayList.Synchronized(mTraceLinesUnsafe); + mTextBox = textBox; + writeInvokeCb = WriteInvoke; + mUiThread = new Thread(ListenerOutputProc); + mUiThread.Priority = priority; + + mUiThread.Start(this); + } + + /// Calls the dispose method. + public virtual void Free() + { + if (mUiThread != null) + mCancelEvent.Set(); + + mUiThread = null; + } + + public override void Write(string message) + { + ArrayList traceLines = mTraceLines; + traceLines.Add(message); + mOutputReadySemaphore.Release(); + } + + public override void WriteLine(string message) + { + Write(message + Environment.NewLine); + } + #endregion + + + #region Private Members + private static void ListenerOutputProc(object state) + { + TextBoxTraceListener listener = (TextBoxTraceListener) state; + + while (true) + { + int waitRet = WaitHandle.WaitAny(new WaitHandle[] {listener.mOutputReadySemaphore, listener.mCancelEvent}); + if (waitRet != 0) break; + + ArrayList traceLines = listener.mTraceLines; + String sLines = String.Empty; + DateTime dtNow = DateTime.Now; + while (true) + { + sLines += String.Format("[{0:00}:{1:00}:{2:00}:{3:000}] {4}", dtNow.Hour, dtNow.Minute, dtNow.Second, dtNow.Millisecond, traceLines[0] as string); + traceLines.RemoveAt(0); + + if (!listener.mOutputReadySemaphore.WaitOne(0)) break; + } + + try + { + listener.mTextBox.Invoke(listener.writeInvokeCb, new object[] {sLines}); + } + catch + { + break; + } + } + } + + private void WriteInvoke(string message) + { + mTextBox.AppendText(message); + } + + private readonly ManualResetEvent mCancelEvent = new ManualResetEvent(false); + + private readonly Semaphore mOutputReadySemaphore = new Semaphore(0, int.MaxValue); + private readonly TextBox mTextBox; + private readonly ArrayList mTraceLines; + private readonly ArrayList mTraceLinesUnsafe = new ArrayList(); + private Thread mUiThread; + private readonly WriteDelegate writeInvokeCb; + #endregion + } +} \ No newline at end of file diff --git a/Old Matlab Interface/bindings/examples_csharp/Handle.Test/fHandleTest.Designer.cs b/Old Matlab Interface/bindings/examples_csharp/Handle.Test/fHandleTest.Designer.cs new file mode 100644 index 00000000..b2be8047 --- /dev/null +++ b/Old Matlab Interface/bindings/examples_csharp/Handle.Test/fHandleTest.Designer.cs @@ -0,0 +1,198 @@ +namespace Handle.Test +{ + partial class fHandleTest + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.menuStrip1 = new System.Windows.Forms.MenuStrip(); + this.disposingToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.createAndExplictlyDestroyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.createWithoutExplictDestroyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); + this.runGarbageCollectorToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.createToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.referenceToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.derefrenceToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator(); + this.exhaustAllHandlesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.txtOutput = new System.Windows.Forms.TextBox(); + this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator(); + this.testListenerToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.menuStrip1.SuspendLayout(); + this.SuspendLayout(); + // + // menuStrip1 + // + this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.disposingToolStripMenuItem}); + this.menuStrip1.Location = new System.Drawing.Point(0, 0); + this.menuStrip1.Name = "menuStrip1"; + this.menuStrip1.Size = new System.Drawing.Size(674, 24); + this.menuStrip1.TabIndex = 1; + this.menuStrip1.Text = "menuStrip1"; + // + // disposingToolStripMenuItem + // + this.disposingToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.createAndExplictlyDestroyToolStripMenuItem, + this.createWithoutExplictDestroyToolStripMenuItem, + this.toolStripSeparator1, + this.runGarbageCollectorToolStripMenuItem, + this.createToolStripMenuItem, + this.toolStripSeparator2, + this.exhaustAllHandlesToolStripMenuItem, + this.toolStripSeparator3, + this.testListenerToolStripMenuItem}); + this.disposingToolStripMenuItem.Name = "disposingToolStripMenuItem"; + this.disposingToolStripMenuItem.Size = new System.Drawing.Size(71, 20); + this.disposingToolStripMenuItem.Text = "Disposing"; + // + // createAndExplictlyDestroyToolStripMenuItem + // + this.createAndExplictlyDestroyToolStripMenuItem.Name = "createAndExplictlyDestroyToolStripMenuItem"; + this.createAndExplictlyDestroyToolStripMenuItem.Size = new System.Drawing.Size(234, 22); + this.createAndExplictlyDestroyToolStripMenuItem.Text = "Create and Explictly Destroy"; + this.createAndExplictlyDestroyToolStripMenuItem.Click += new System.EventHandler(this.createAndExplictlyDestroyToolStripMenuItem_Click); + // + // createWithoutExplictDestroyToolStripMenuItem + // + this.createWithoutExplictDestroyToolStripMenuItem.Name = "createWithoutExplictDestroyToolStripMenuItem"; + this.createWithoutExplictDestroyToolStripMenuItem.Size = new System.Drawing.Size(234, 22); + this.createWithoutExplictDestroyToolStripMenuItem.Text = "Create Without Explict Destroy"; + this.createWithoutExplictDestroyToolStripMenuItem.Click += new System.EventHandler(this.createWithoutExplictDestroyToolStripMenuItem_Click); + // + // toolStripSeparator1 + // + this.toolStripSeparator1.Name = "toolStripSeparator1"; + this.toolStripSeparator1.Size = new System.Drawing.Size(231, 6); + // + // runGarbageCollectorToolStripMenuItem + // + this.runGarbageCollectorToolStripMenuItem.Name = "runGarbageCollectorToolStripMenuItem"; + this.runGarbageCollectorToolStripMenuItem.Size = new System.Drawing.Size(234, 22); + this.runGarbageCollectorToolStripMenuItem.Text = "Run Garbage Collector"; + this.runGarbageCollectorToolStripMenuItem.Click += new System.EventHandler(this.runGarbageCollectorToolStripMenuItem_Click); + // + // createToolStripMenuItem + // + this.createToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.referenceToolStripMenuItem, + this.derefrenceToolStripMenuItem}); + this.createToolStripMenuItem.Name = "createToolStripMenuItem"; + this.createToolStripMenuItem.Size = new System.Drawing.Size(234, 22); + this.createToolStripMenuItem.Text = "Create"; + // + // referenceToolStripMenuItem + // + this.referenceToolStripMenuItem.Name = "referenceToolStripMenuItem"; + this.referenceToolStripMenuItem.Size = new System.Drawing.Size(131, 22); + this.referenceToolStripMenuItem.Text = "Reference"; + this.referenceToolStripMenuItem.Click += new System.EventHandler(this.referenceToolStripMenuItem_Click); + // + // derefrenceToolStripMenuItem + // + this.derefrenceToolStripMenuItem.Name = "derefrenceToolStripMenuItem"; + this.derefrenceToolStripMenuItem.Size = new System.Drawing.Size(131, 22); + this.derefrenceToolStripMenuItem.Text = "Derefrence"; + this.derefrenceToolStripMenuItem.Click += new System.EventHandler(this.derefrenceToolStripMenuItem_Click); + // + // toolStripSeparator2 + // + this.toolStripSeparator2.Name = "toolStripSeparator2"; + this.toolStripSeparator2.Size = new System.Drawing.Size(231, 6); + // + // exhaustAllHandlesToolStripMenuItem + // + this.exhaustAllHandlesToolStripMenuItem.Name = "exhaustAllHandlesToolStripMenuItem"; + this.exhaustAllHandlesToolStripMenuItem.Size = new System.Drawing.Size(234, 22); + this.exhaustAllHandlesToolStripMenuItem.Text = "Exhaust All Handles"; + this.exhaustAllHandlesToolStripMenuItem.Click += new System.EventHandler(this.exhaustAllHandlesToolStripMenuItem_Click); + // + // txtOutput + // + this.txtOutput.Dock = System.Windows.Forms.DockStyle.Fill; + this.txtOutput.Font = new System.Drawing.Font("Courier New", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.txtOutput.Location = new System.Drawing.Point(0, 24); + this.txtOutput.MaxLength = 0; + this.txtOutput.Multiline = true; + this.txtOutput.Name = "txtOutput"; + this.txtOutput.ReadOnly = true; + this.txtOutput.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.txtOutput.Size = new System.Drawing.Size(674, 272); + this.txtOutput.TabIndex = 2; + this.txtOutput.WordWrap = false; + // + // toolStripSeparator3 + // + this.toolStripSeparator3.Name = "toolStripSeparator3"; + this.toolStripSeparator3.Size = new System.Drawing.Size(231, 6); + // + // testListenerToolStripMenuItem + // + this.testListenerToolStripMenuItem.Name = "testListenerToolStripMenuItem"; + this.testListenerToolStripMenuItem.Size = new System.Drawing.Size(234, 22); + this.testListenerToolStripMenuItem.Text = "Test Listener"; + this.testListenerToolStripMenuItem.Click += new System.EventHandler(this.testListenerToolStripMenuItem_Click); + // + // fHandleTest + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(674, 296); + this.Controls.Add(this.txtOutput); + this.Controls.Add(this.menuStrip1); + this.MainMenuStrip = this.menuStrip1; + this.Name = "fHandleTest"; + this.Text = "libusbK Handles Example"; + this.Load += new System.EventHandler(this.fHandleTest_Load); + this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.fHandleTest_FormClosed); + this.menuStrip1.ResumeLayout(false); + this.menuStrip1.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.MenuStrip menuStrip1; + private System.Windows.Forms.ToolStripMenuItem disposingToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem createAndExplictlyDestroyToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; + private System.Windows.Forms.ToolStripMenuItem runGarbageCollectorToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem createWithoutExplictDestroyToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem createToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem referenceToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem derefrenceToolStripMenuItem; + private System.Windows.Forms.TextBox txtOutput; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator2; + private System.Windows.Forms.ToolStripMenuItem exhaustAllHandlesToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator3; + private System.Windows.Forms.ToolStripMenuItem testListenerToolStripMenuItem; + } +} + diff --git a/Old Matlab Interface/bindings/examples_csharp/Handle.Test/fHandleTest.cs b/Old Matlab Interface/bindings/examples_csharp/Handle.Test/fHandleTest.cs new file mode 100644 index 00000000..f6623d60 --- /dev/null +++ b/Old Matlab Interface/bindings/examples_csharp/Handle.Test/fHandleTest.cs @@ -0,0 +1,130 @@ +#region Copyright(c) Travis Robinson +// Copyright (c) 2012 Travis Robinson +// All rights reserved. +// +// fHandleTest.cs +// +// Created: 03.02.2012 +// Last Updated: 03.03.2012 +// +// 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. +// +// 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 TRAVIS LEE ROBINSON +// 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. +#endregion + + +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Threading; +using System.Windows.Forms; +using libusbK; + + +namespace Handle.Test +{ + public partial class fHandleTest : Form + { + private LstK LstKField; + private List LstKList = new List(); + + private TextBoxTraceListener mListener; + + public fHandleTest() + { + InitializeComponent(); + } + + ~fHandleTest() + { + } + + private void createAndExplictlyDestroyToolStripMenuItem_Click(object sender, EventArgs e) + { + LstK lstTemp = new LstK(KLST_FLAG.NONE); + lstTemp.Dispose(); + } + + private void runGarbageCollectorToolStripMenuItem_Click(object sender, EventArgs e) + { + GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced); + } + + private void referenceToolStripMenuItem_Click(object sender, EventArgs e) + { + LstK lstTemp = new LstK(KLST_FLAG.NONE); + LstKList.Add(lstTemp); + LstKField = lstTemp; + } + + private void derefrenceToolStripMenuItem_Click(object sender, EventArgs e) + { + if (LstKList.Count > 0) + { + LstKList.Clear(); + } + else + { + LstKField = null; + } + } + + private void createWithoutExplictDestroyToolStripMenuItem_Click(object sender, EventArgs e) + { + LstK lstTemp = new LstK(KLST_FLAG.NONE); + int count = 0; + lstTemp.Count(ref count); + } + + private void fHandleTest_Load(object sender, EventArgs e) + { + mListener = new TextBoxTraceListener(txtOutput, ThreadPriority.Lowest); + Debug.Listeners.Add(mListener); + } + + private void fHandleTest_FormClosed(object sender, FormClosedEventArgs e) + { + Debug.Listeners.Remove(mListener); + mListener.Free(); + } + + private void exhaustAllHandlesToolStripMenuItem_Click(object sender, EventArgs e) + { + LstKList.Clear(); + LstKField = null; + int count = 0; + try + { + while (true) + { + new LstK(KLST_FLAG.NONE); + count++; + } + } + catch + { + } + + Debug.Print("All handles exhausted. Count:{0}", count); + } + + private void testListenerToolStripMenuItem_Click(object sender, EventArgs e) + { + new TestListener(64); + } + } +} \ No newline at end of file diff --git a/Old Matlab Interface/bindings/examples_csharp/Handle.Test/fHandleTest.resx b/Old Matlab Interface/bindings/examples_csharp/Handle.Test/fHandleTest.resx new file mode 100644 index 00000000..541af56e --- /dev/null +++ b/Old Matlab Interface/bindings/examples_csharp/Handle.Test/fHandleTest.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/Old Matlab Interface/bindings/examples_csharp/HiPerfTimer.cs b/Old Matlab Interface/bindings/examples_csharp/HiPerfTimer.cs new file mode 100644 index 00000000..d81057dd --- /dev/null +++ b/Old Matlab Interface/bindings/examples_csharp/HiPerfTimer.cs @@ -0,0 +1,126 @@ +#region Copyright(c) Travis Robinson +// Copyright (c) 2012 Travis Robinson +// All rights reserved. +// +// HiPerfTimer.cs +// +// Created: 03.05.2012 +// Last Updated: 03.05.2012 +// +// 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. +// +// 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 TRAVIS LEE ROBINSON +// 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. +#endregion + + +using System.ComponentModel; +using System.Runtime.InteropServices; + + +namespace Win32 +{ + internal class HiPerfTimer + { + #region Public Members + public HiPerfTimer() + { + startTime = 0; + stopTime = 0; + length = 0; + + if (QueryPerformanceFrequency(out freq) == false) + { + // high-performance counter not supported + throw new Win32Exception(); + } + } + + /// + /// Gets the bytes per second + /// + public double Bps + { + get + { + double duration = Duration; + if (duration.Equals(0.0)) return 0.0; + return length/duration; + } + } + + /// + /// Gets the duration of the timer (in seconds) + /// + public double Duration + { + get + { + return (stopTime - startTime)/(double) freq; + } + } + + /// + /// Gets the duration of the timer (in seconds) + /// + public long Ticks + { + get + { + long tDiff = stopTime - startTime; + tDiff = (tDiff*10000000)/freq; + + return tDiff; + } + } + /// + /// Start the timer + /// + public void Start() + { + length = 0; + QueryPerformanceCounter(out startTime); + } + + /// + /// Stop the timer + /// + public void Stop() + { + QueryPerformanceCounter(out stopTime); + } + + public void Stop(int addLength) + { + QueryPerformanceCounter(out stopTime); + length += addLength; + } + #endregion + + + #region Private Members + [DllImport("Kernel32.dll")] + private static extern bool QueryPerformanceCounter(out long lpPerformanceCount); + + [DllImport("Kernel32.dll")] + private static extern bool QueryPerformanceFrequency(out long lpFrequency); + + private readonly long freq; + private long length; + private long startTime, stopTime; + #endregion + } +} \ No newline at end of file diff --git a/Old Matlab Interface/bindings/examples_csharp/Hot.Plug.Detect.GUI/Form1.Designer.cs b/Old Matlab Interface/bindings/examples_csharp/Hot.Plug.Detect.GUI/Form1.Designer.cs new file mode 100644 index 00000000..a266b826 --- /dev/null +++ b/Old Matlab Interface/bindings/examples_csharp/Hot.Plug.Detect.GUI/Form1.Designer.cs @@ -0,0 +1,118 @@ +namespace Hot.Plug.Detect.GUI +{ + partial class Form1 + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.dgvDevices = new System.Windows.Forms.DataGridView(); + this.label1 = new System.Windows.Forms.Label(); + this.colSymbolicLink = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colDeviceDesc = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colInstanceID = new System.Windows.Forms.DataGridViewTextBoxColumn(); + ((System.ComponentModel.ISupportInitialize)(this.dgvDevices)).BeginInit(); + this.SuspendLayout(); + // + // dgvDevices + // + this.dgvDevices.AllowUserToAddRows = false; + this.dgvDevices.AllowUserToDeleteRows = false; + this.dgvDevices.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.dgvDevices.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dgvDevices.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.colSymbolicLink, + this.colDeviceDesc, + this.colInstanceID}); + this.dgvDevices.Location = new System.Drawing.Point(12, 38); + this.dgvDevices.MultiSelect = false; + this.dgvDevices.Name = "dgvDevices"; + this.dgvDevices.ReadOnly = true; + this.dgvDevices.RowHeadersVisible = false; + this.dgvDevices.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.dgvDevices.ShowEditingIcon = false; + this.dgvDevices.Size = new System.Drawing.Size(419, 179); + this.dgvDevices.TabIndex = 0; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(12, 22); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(104, 13); + this.label1.TabIndex = 1; + this.label1.Text = "Connected Devices:"; + // + // colSymbolicLink + // + this.colSymbolicLink.HeaderText = "SymbolicLink"; + this.colSymbolicLink.Name = "colSymbolicLink"; + this.colSymbolicLink.ReadOnly = true; + this.colSymbolicLink.Visible = false; + // + // colDeviceDesc + // + this.colDeviceDesc.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.colDeviceDesc.HeaderText = "Name"; + this.colDeviceDesc.Name = "colDeviceDesc"; + this.colDeviceDesc.ReadOnly = true; + // + // colInstanceID + // + this.colInstanceID.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.colInstanceID.HeaderText = "Instance ID"; + this.colInstanceID.Name = "colInstanceID"; + this.colInstanceID.ReadOnly = true; + // + // Form1 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(443, 229); + this.Controls.Add(this.label1); + this.Controls.Add(this.dgvDevices); + this.Name = "Form1"; + this.Text = "Hot Plug Detection GUI Example"; + this.Load += new System.EventHandler(this.Form1_Load); + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Form1_FormClosing); + ((System.ComponentModel.ISupportInitialize)(this.dgvDevices)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.DataGridView dgvDevices; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.DataGridViewTextBoxColumn colSymbolicLink; + private System.Windows.Forms.DataGridViewTextBoxColumn colDeviceDesc; + private System.Windows.Forms.DataGridViewTextBoxColumn colInstanceID; + + } +} + diff --git a/Old Matlab Interface/bindings/examples_csharp/Hot.Plug.Detect.GUI/Form1.cs b/Old Matlab Interface/bindings/examples_csharp/Hot.Plug.Detect.GUI/Form1.cs new file mode 100644 index 00000000..339bc805 --- /dev/null +++ b/Old Matlab Interface/bindings/examples_csharp/Hot.Plug.Detect.GUI/Form1.cs @@ -0,0 +1,116 @@ +#region Copyright(c) Travis Robinson + +// Copyright (c) 2011-2012 Travis Robinson +// All rights reserved. +// +// Hot.Plug.Detect.GUI +// +// Last Updated: 03.08.2012 +// +// 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. +// +// 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 TRAVIS LEE ROBINSON +// 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. + +#endregion + +using System; +using System.Windows.Forms; +using libusbK; + +namespace Hot.Plug.Detect.GUI +{ + public partial class Form1 : Form + { + private const int WM_USER = 0x400; + + private const int WM_USER_HOT_BASE = WM_USER; + private const int WM_USER_HOT_REMOVAL = WM_USER_HOT_BASE; + private const int WM_USER_HOT_ARRIVAL = WM_USER_HOT_BASE + 1; + private HotK mHotK; + private KHOT_PARAMS mHotParams; + + public Form1() + { + InitializeComponent(); + } + + private void Form1_Load(object sender, EventArgs e) + { + mHotParams.PatternMatch.DeviceInterfaceGUID = "*"; + + // Set the Hwnd handle. + mHotParams.UserHwnd = Handle; + + // Set the base user message. This can be any value greater than or equal to 0x400 + mHotParams.UserMessage = WM_USER_HOT_BASE; + + // After initializing, send plug events for devices that are currently connected. + mHotParams.Flags = KHOT_FLAG.PLUG_ALL_ON_INIT; + + // This will cause HotK to use PostMessage instead of SendMessage. + mHotParams.Flags |= KHOT_FLAG.POST_USER_MESSAGE; + + mHotK = new HotK(ref mHotParams); + } + + private void OnHotPlugInvoked(KHOT_HANDLE hotHandle, KLST_DEVINFO_HANDLE deviceInfo, KLST_SYNC_FLAG plugType) + { + string symbolicLink = deviceInfo.SymbolicLink; + switch (plugType) + { + case KLST_SYNC_FLAG.ADDED: + int iRow = dgvDevices.Rows.Add(new object[] {symbolicLink, deviceInfo.DeviceDesc, deviceInfo.DeviceID}); + dgvDevices.Rows[iRow].Cells[1].ToolTipText = deviceInfo.ToString(); + dgvDevices.Rows[iRow].Cells[2].ToolTipText = deviceInfo.Common.ToString(); + break; + case KLST_SYNC_FLAG.REMOVED: + foreach (DataGridViewRow row in dgvDevices.Rows) + { + if (row.Cells[0].Value as string != symbolicLink) continue; + dgvDevices.Rows.Remove(row); + break; + } + break; + default: + throw new ArgumentOutOfRangeException("plugType"); + } + } + + protected override void WndProc(ref Message m) + { + /* When using the HotK UserHwnd and UserMsg, the add/remove events are seperated into to different messages. + * Removal = UserMsg + 0 + * Arrival = UserMsg + 1 + */ + if (m.Msg == WM_USER_HOT_REMOVAL || m.Msg == WM_USER_HOT_ARRIVAL) + { + KHOT_HANDLE hotHandle = new KHOT_HANDLE(m.WParam); + KLST_DEVINFO_HANDLE deviceInfo = new KLST_DEVINFO_HANDLE(m.LParam); + KLST_SYNC_FLAG plugType = (m.Msg == WM_USER_HOT_REMOVAL) ? KLST_SYNC_FLAG.REMOVED : KLST_SYNC_FLAG.ADDED; + + OnHotPlugInvoked(hotHandle, deviceInfo, plugType); + return; + } + base.WndProc(ref m); + } + + private void Form1_FormClosing(object sender, FormClosingEventArgs e) + { + mHotK.Dispose(); + } + } +} \ No newline at end of file diff --git a/Old Matlab Interface/bindings/examples_csharp/Hot.Plug.Detect.GUI/Form1.resx b/Old Matlab Interface/bindings/examples_csharp/Hot.Plug.Detect.GUI/Form1.resx new file mode 100644 index 00000000..f5b0ea0c --- /dev/null +++ b/Old Matlab Interface/bindings/examples_csharp/Hot.Plug.Detect.GUI/Form1.resx @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + + True + + \ No newline at end of file diff --git a/Old Matlab Interface/bindings/examples_csharp/Hot.Plug.Detect.GUI/Hot.Plug.Detect.GUI.csproj b/Old Matlab Interface/bindings/examples_csharp/Hot.Plug.Detect.GUI/Hot.Plug.Detect.GUI.csproj new file mode 100644 index 00000000..20ca2cfe --- /dev/null +++ b/Old Matlab Interface/bindings/examples_csharp/Hot.Plug.Detect.GUI/Hot.Plug.Detect.GUI.csproj @@ -0,0 +1,83 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {CFB108D9-5489-48D4-AAFD-5FBCB3C00582} + WinExe + Properties + Hot.Plug.Detect.GUI + Hot.Plug.Detect.GUI + v2.0 + 512 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + libusbK.cs + + + Form + + + Form1.cs + + + + + Form1.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + \ No newline at end of file diff --git a/Old Matlab Interface/bindings/examples_csharp/Hot.Plug.Detect.GUI/Program.cs b/Old Matlab Interface/bindings/examples_csharp/Hot.Plug.Detect.GUI/Program.cs new file mode 100644 index 00000000..7e23f28d --- /dev/null +++ b/Old Matlab Interface/bindings/examples_csharp/Hot.Plug.Detect.GUI/Program.cs @@ -0,0 +1,48 @@ +#region Copyright(c) Travis Robinson + +// Copyright (c) 2011-2012 Travis Robinson +// All rights reserved. +// +// Hot.Plug.Detect.GUI +// +// Last Updated: 03.08.2012 +// +// 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. +// +// 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 TRAVIS LEE ROBINSON +// 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. + +#endregion + +using System; +using System.Windows.Forms; + +namespace Hot.Plug.Detect.GUI +{ + internal static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + private static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new Form1()); + } + } +} \ No newline at end of file diff --git a/Old Matlab Interface/bindings/examples_csharp/Hot.Plug.Detect.GUI/Properties/AssemblyInfo.cs b/Old Matlab Interface/bindings/examples_csharp/Hot.Plug.Detect.GUI/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..a3f6e422 --- /dev/null +++ b/Old Matlab Interface/bindings/examples_csharp/Hot.Plug.Detect.GUI/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Hot.Plug.Detect.GUI")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("Hot.Plug.Detect.GUI")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2012")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("c3a55330-daa9-4501-8852-8ec0dcd33cc5")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Old Matlab Interface/bindings/examples_csharp/Hot.Plug.Detect.GUI/Properties/Resources.Designer.cs b/Old Matlab Interface/bindings/examples_csharp/Hot.Plug.Detect.GUI/Properties/Resources.Designer.cs new file mode 100644 index 00000000..910ca72b --- /dev/null +++ b/Old Matlab Interface/bindings/examples_csharp/Hot.Plug.Detect.GUI/Properties/Resources.Designer.cs @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.4959 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Hot.Plug.Detect.GUI.Properties +{ + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Hot.Plug.Detect.GUI.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/Old Matlab Interface/bindings/examples_csharp/Hot.Plug.Detect.GUI/Properties/Resources.resx b/Old Matlab Interface/bindings/examples_csharp/Hot.Plug.Detect.GUI/Properties/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/Old Matlab Interface/bindings/examples_csharp/Hot.Plug.Detect.GUI/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Old Matlab Interface/bindings/examples_csharp/Hot.Plug.Detect.GUI/Properties/Settings.Designer.cs b/Old Matlab Interface/bindings/examples_csharp/Hot.Plug.Detect.GUI/Properties/Settings.Designer.cs new file mode 100644 index 00000000..276ddd0a --- /dev/null +++ b/Old Matlab Interface/bindings/examples_csharp/Hot.Plug.Detect.GUI/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.4959 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Hot.Plug.Detect.GUI.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/Old Matlab Interface/bindings/examples_csharp/Hot.Plug.Detect.GUI/Properties/Settings.settings b/Old Matlab Interface/bindings/examples_csharp/Hot.Plug.Detect.GUI/Properties/Settings.settings new file mode 100644 index 00000000..39645652 --- /dev/null +++ b/Old Matlab Interface/bindings/examples_csharp/Hot.Plug.Detect.GUI/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Old Matlab Interface/bindings/examples_csharp/Hot.Plug.Detect/Hot.Plug.Detect.csproj b/Old Matlab Interface/bindings/examples_csharp/Hot.Plug.Detect/Hot.Plug.Detect.csproj new file mode 100644 index 00000000..baf03dbe --- /dev/null +++ b/Old Matlab Interface/bindings/examples_csharp/Hot.Plug.Detect/Hot.Plug.Detect.csproj @@ -0,0 +1,52 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {E9566BFF-3BEC-4358-9871-C1700CB73C2B} + Exe + Properties + Hot.Plug.Detect + Hot.Plug.Detect + v2.0 + 512 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + libusbK.cs + + + + + + + \ No newline at end of file diff --git a/Old Matlab Interface/bindings/examples_csharp/Hot.Plug.Detect/Program.cs b/Old Matlab Interface/bindings/examples_csharp/Hot.Plug.Detect/Program.cs new file mode 100644 index 00000000..6dbbd773 --- /dev/null +++ b/Old Matlab Interface/bindings/examples_csharp/Hot.Plug.Detect/Program.cs @@ -0,0 +1,118 @@ +#region Copyright(c) Travis Robinson + +// Copyright (c) 2012 Travis Robinson +// All rights reserved. +// +// Hot.Plug.Detect +// +// Last Updated: 04.28.2012 +// +// 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. +// +// 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 TRAVIS LEE ROBINSON +// 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. + +#endregion + +using System; +using libusbK; + +namespace Hot.Plug.Detect +{ + internal class Program + { + // ReSharper disable InconsistentNaming + + #region For Window Applications + private const int WM_USER = 0x400; + private const int WM_USER_HOT_BASE = WM_USER; + private const int WM_USER_HOT_REMOVAL = WM_USER_HOT_BASE; + private const int WM_USER_HOT_ARRIVAL = WM_USER_HOT_BASE + 1; + #endregion + + private static void Main() + { + KHOT_PARAMS hotInitParams = new KHOT_PARAMS(); + + // In the real world, you would want to filter for only *your* device(s). + hotInitParams.PatternMatch.DeviceInterfaceGUID = "*"; + + // The PLUG_ALL_ON_INIT flag will force plug events for matching devices that are already connected. + hotInitParams.Flags = KHOT_FLAG.PLUG_ALL_ON_INIT; + + hotInitParams.OnHotPlug = OnHotPlug; + + /* Instead of a callback you can send/post messages directly to a window handle. + hotInitParams.UserHwnd = MyForm.Handle; + hotInitParams.UserMessage = WM_USER_HOT_BASE; + */ + + Console.WriteLine("Monitoring libusbK arrival/removal events."); + Console.WriteLine("[PatternMatch]"); + Console.WriteLine(hotInitParams.PatternMatch.ToString()); + Console.WriteLine("Press [ENTER] to exit.."); + + while (Console.KeyAvailable) Console.ReadKey(true); + + // You may set your initial hot handle user context like this. + // This example is using it to count connected devices and detect the first OnHotPlug event (Int32.MaxValue). + AllKFunctions.LibK_SetDefaultContext(KLIB_HANDLE_TYPE.HOTK, new IntPtr(Int32.MaxValue)); + + // Start hot-plug detection. + HotK hot = new HotK(ref hotInitParams); + + Console.ReadLine(); + + hot.Free(); + } + + private static void OnHotPlug(KHOT_HANDLE hotHandle, + KLST_DEVINFO_HANDLE deviceInfo, + KLST_SYNC_FLAG plugType) + { + string plugText; + + int totalPluggedDeviceCount = (int) hotHandle.GetContext().ToInt64(); + if (totalPluggedDeviceCount == int.MaxValue) + { + Console.WriteLine("OnHotPlug is being called for the first time on handle:{0}", hotHandle.Pointer); + totalPluggedDeviceCount = 0; + } + + switch (plugType) + { + case KLST_SYNC_FLAG.ADDED: + plugText = "Arrival"; + totalPluggedDeviceCount++; + break; + case KLST_SYNC_FLAG.REMOVED: + plugText = "Removal"; + totalPluggedDeviceCount--; + break; + default: + throw new ArgumentOutOfRangeException("plugType"); + } + + hotHandle.SetContext(new IntPtr(totalPluggedDeviceCount)); + + Console.WriteLine("\n[OnHotPlug] Device {0}:{1} \n", + plugText, + deviceInfo); + Console.WriteLine("Total Plugged Device Count: {0}", + totalPluggedDeviceCount); + } + } +} \ No newline at end of file diff --git a/Old Matlab Interface/bindings/examples_csharp/Hot.Plug.Detect/Properties/AssemblyInfo.cs b/Old Matlab Interface/bindings/examples_csharp/Hot.Plug.Detect/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..252ebda4 --- /dev/null +++ b/Old Matlab Interface/bindings/examples_csharp/Hot.Plug.Detect/Properties/AssemblyInfo.cs @@ -0,0 +1,69 @@ +#region Copyright(c) Travis Robinson +// Copyright (c) 2012 Travis Robinson +// All rights reserved. +// +// AssemblyInfo.cs +// +// Created: 03.05.2012 +// Last Updated: 03.05.2012 +// +// 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. +// +// 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 TRAVIS LEE ROBINSON +// 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. +#endregion + + +using System.Reflection; +using System.Runtime.InteropServices; + + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. + +[assembly: AssemblyTitle("Hot.Plug.Detect")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("Hot.Plug.Detect")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2012")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. + +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM + +[assembly: Guid("f58e935c-8222-42fa-9ccb-2bec7a9eae8d")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] + +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] \ No newline at end of file diff --git a/Old Matlab Interface/bindings/examples_csharp/List.Devices/List.Devices.csproj b/Old Matlab Interface/bindings/examples_csharp/List.Devices/List.Devices.csproj new file mode 100644 index 00000000..bbca8d48 --- /dev/null +++ b/Old Matlab Interface/bindings/examples_csharp/List.Devices/List.Devices.csproj @@ -0,0 +1,52 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {4FA292D2-945A-48B5-B040-3AF7E482AB31} + Exe + Properties + List.Devices + List.Devices + v2.0 + 512 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + libusbK.cs + + + + + + + \ No newline at end of file diff --git a/Old Matlab Interface/bindings/examples_csharp/List.Devices/Program.cs b/Old Matlab Interface/bindings/examples_csharp/List.Devices/Program.cs new file mode 100644 index 00000000..4d5d74c2 --- /dev/null +++ b/Old Matlab Interface/bindings/examples_csharp/List.Devices/Program.cs @@ -0,0 +1,63 @@ +#region Copyright(c) Travis Robinson + +// Copyright (c) 2011-2012 Travis Robinson +// All rights reserved. +// +// List.Devices +// +// Last Updated: 03.08.2012 +// +// 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. +// +// 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 TRAVIS LEE ROBINSON +// 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. + +#endregion + +using System; +using libusbK; + +namespace List.Devices +{ + internal class Program + { + private static void Main() + { + int deviceIndex = 0; + int deviceCount = 0; + KLST_DEVINFO_HANDLE deviceInfo; + LstK lst = new LstK(KLST_FLAG.NONE); + + lst.Count(ref deviceCount); + while (lst.MoveNext(out deviceInfo)) + { + // Write some information about the device. + string displayLine = String.Format("{0} of {1}: {2}", + ++deviceIndex, + deviceCount, + deviceInfo.DeviceDesc); + Console.WriteLine(displayLine); + Console.WriteLine("- " + deviceInfo.DeviceID); + Console.WriteLine(); + } + + if (deviceCount == 0) + Console.WriteLine("No devices found!\n"); + + lst.Free(); + } + } +} \ No newline at end of file diff --git a/Old Matlab Interface/bindings/examples_csharp/List.Devices/Properties/AssemblyInfo.cs b/Old Matlab Interface/bindings/examples_csharp/List.Devices/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..bdd2f770 --- /dev/null +++ b/Old Matlab Interface/bindings/examples_csharp/List.Devices/Properties/AssemblyInfo.cs @@ -0,0 +1,69 @@ +#region Copyright(c) Travis Robinson +// Copyright (c) 2012 Travis Robinson +// All rights reserved. +// +// AssemblyInfo.cs +// +// Created: 03.05.2012 +// Last Updated: 03.05.2012 +// +// 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. +// +// 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 TRAVIS LEE ROBINSON +// 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. +#endregion + + +using System.Reflection; +using System.Runtime.InteropServices; + + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. + +[assembly: AssemblyTitle("List.Devices")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("List.Devices")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2012")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. + +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM + +[assembly: Guid("535a41bb-2086-4cb2-8d38-2e12743bcb73")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] + +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] \ No newline at end of file diff --git a/Old Matlab Interface/bindings/examples_csharp/Read.Isochronous/Program.cs b/Old Matlab Interface/bindings/examples_csharp/Read.Isochronous/Program.cs new file mode 100644 index 00000000..fae4ac32 --- /dev/null +++ b/Old Matlab Interface/bindings/examples_csharp/Read.Isochronous/Program.cs @@ -0,0 +1,323 @@ +#region Copyright(c) Travis Robinson + +// Copyright (c) 2011-2012 Travis Robinson +// All rights reserved. +// +// Read.Isochronous +// +// Last Updated: 03.08.2012 +// +// 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. +// +// 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 TRAVIS LEE ROBINSON +// 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. + +#endregion + +#define BMFW + +using System; +using System.Collections.Generic; +using System.Runtime.InteropServices; +using System.Threading; +using Test.Devices; +using libusbK; +using libusbK.Examples; + +namespace Read.Isochronous +{ + // ReSharper disable InconsistentNaming + + internal class Program + { + #region TODO USER: Set the test parameters for your device. + + public static IsoTestParameters Test = new IsoTestParameters(0x04d8, 0xfa2e, 0, 0x82, 3, 64, "xfer-iso-read.txt", 24); + + #endregion + + private static void Main(string[] args) + { + bool success; + WINUSB_PIPE_INFORMATION pipeInfo; + UsbK usb; + USB_INTERFACE_DESCRIPTOR interfaceDescriptor; + + // Find and configure the device. + if (!Test.ConfigureDevice(out pipeInfo, out usb, out interfaceDescriptor)) return; + +#if BMFW + // TODO FOR USER: Remove this block if not using benchmark firmware. + // This configures devices running benchmark firmware for streaming DeviceToHost transfers. + Console.WriteLine("Configuring for benchmark device.."); + BM_TEST_TYPE testType = BM_TEST_TYPE.READ; + success = Benchmark.Configure(usb, BM_COMMAND.SET_TEST, interfaceDescriptor.bInterfaceNumber, ref testType); + if (!success) + { + Console.WriteLine("Bench_Configure failed."); + } +#endif + // Create the ISO transfer queue. This class manages the pending and outstanding transfer lists. + ReadIsoTransferQueue readXfers = new ReadIsoTransferQueue(usb, ref pipeInfo, Test.MaxOutstandingTransfers, Test.IsoPacketsPerTransfer); + + if (!Test.ShowTestReady()) goto Done; + + // Always issue a reset pipe prior to re/starting an ISO stream. + usb.ResetPipe(pipeInfo.PipeId); + + // This example will not manage the start frame manually, but this is + // how I might caculate the starting point. + usb.GetCurrentFrameNumber(out readXfers.FrameNumber); + unchecked + { + // Add some start latency + readXfers.FrameNumber += 32; + + // Start FrameNumber at an interval of 8. + readXfers.FrameNumber -= ((readXfers.FrameNumber)%8); + } + + // This is a counter/timer used only for statistics gathering. + Thread.Sleep(0); + Test.Dcs.Start(); + + // Transfer processing loop + do + { + IsoTransferItem isoTransferItem; + int transferred; + int errorCode; + // While buffers exist in the completed list, submit them. + while (readXfers.Completed.Count > 0 && readXfers.TotalSubmittedCount < Test.MaxTransfersTotal) + { + errorCode = readXfers.SubmitNextRead(); + if (errorCode != 0) + { + Console.WriteLine("IsoReadPipe failed. ErrorCode: {0:X8}h", errorCode); + goto Done; + } + } + + if (readXfers.Outstanding.Count == 0) + { + // The MAX_TRANSFERS_TOTAL test limit hit. + Console.WriteLine("Done!"); + goto Done; + } + + // Wait for the oldest transfer to complete. + errorCode = readXfers.WaitRead(out isoTransferItem, 1000, out transferred); + if (errorCode != 0) + { + Console.WriteLine("OvlPool.Wait failed. ErrorCode: {0:X8}h", errorCode); + goto Done; + } + + // Report iso status. + IsoXferReport(readXfers, isoTransferItem, transferred); + + if (readXfers.CompletedCount == 1) Test.Dcs.Start(); + } while (true); + + Done: + readXfers.Destroy(); + Test.Free(); + + usb.Free(); + } + + private static void IsoXferReport(ReadIsoTransferQueue readIsoTransfers, IsoTransferItem isoTransferItem, int transferLength) + { + int packetPos; + Test.Dcs.Stop(transferLength); + if (readIsoTransfers.LastStartFrame == 0) + { + Test.LogLn("#{0}: StartFrame={1:X8}h TransferLength={2} BPS-average:{3}", + readIsoTransfers.CompletedCount, + isoTransferItem.Iso.StartFrame, + transferLength, + Math.Round(Test.Dcs.Bps, 2)); + } + else + { + int lastFrameCount = isoTransferItem.Iso.StartFrame - readIsoTransfers.LastStartFrame; + Test.LogLn("#{0}: StartFrame={1:X8}h TransferLength={2} BPS-average:{3} LastFrameCount={4}", + readIsoTransfers.CompletedCount, + isoTransferItem.Iso.StartFrame, + transferLength, + Math.Round(Test.Dcs.Bps, 2), + lastFrameCount); + } + + int numPackets = isoTransferItem.Iso.NumberOfPackets; + for (packetPos = 0; packetPos < numPackets; packetPos++) + { + KISO_PACKET isoPacket; + isoTransferItem.Iso.GetPacket(packetPos, out isoPacket); + if (isoPacket.Length > 1) + { + // This is somewhat specific to data that is returned by the benchmark firmware. + byte firstPacketByte = isoTransferItem.Buffer[isoPacket.Offset]; + byte secondPacketByte = isoTransferItem.Buffer[isoPacket.Offset + 1]; + Test.LogLn(" [{0:000}] Length={1} B0={2:X2}h B1={3:X2}h", packetPos, isoPacket.Length, firstPacketByte, secondPacketByte); + } + else + { + Test.LogLn(" [{0:000}] Empty Packet", packetPos); + } + } + + readIsoTransfers.CompletedCount++; + readIsoTransfers.LastStartFrame = isoTransferItem.Iso.StartFrame; + } + } + + internal class IsoTransferItem + { + public byte[] Buffer; + public GCHandle BufferGC; + public IsoK Iso; + public KOVL_HANDLE Ovl; + } + + internal class ReadIsoTransferQueue + { + #region Transfer lists + + public LinkedList Completed = new LinkedList(); + public LinkedList Master = new LinkedList(); + public LinkedList Outstanding = new LinkedList(); + + #endregion + + #region Core queue members + + public readonly int DataBufferSize; + public readonly OvlK OvlPool; + public readonly WINUSB_PIPE_INFORMATION PipeInfo; + public readonly UsbK Usb; + + #endregion + + #region Frame management + + public int FrameNumber; + public int LastStartFrame; + + #endregion + + #region Statisitics + + public uint CompletedCount; + public uint TotalSubmittedCount; + + #endregion + + public ReadIsoTransferQueue(UsbK usb, ref WINUSB_PIPE_INFORMATION pipeInfo, int maxPendingTransfers, int numberOfPackets) + { + PipeInfo = pipeInfo; + Usb = usb; + OvlPool = new OvlK(usb.Handle, maxPendingTransfers, KOVL_POOL_FLAG.NONE); + DataBufferSize = (pipeInfo.MaximumPacketSize*numberOfPackets); + for (int pos = 0; pos < maxPendingTransfers; pos++) + { + IsoTransferItem isoTransferItem = new IsoTransferItem(); + + isoTransferItem.Buffer = new byte[pipeInfo.MaximumPacketSize*numberOfPackets]; + isoTransferItem.BufferGC = GCHandle.Alloc(isoTransferItem.Buffer, GCHandleType.Pinned); + + isoTransferItem.Iso = new IsoK(numberOfPackets, 0); + isoTransferItem.Iso.SetPackets(pipeInfo.MaximumPacketSize); + + OvlPool.Acquire(out isoTransferItem.Ovl); + + Master.AddLast(isoTransferItem); + Completed.AddLast(isoTransferItem); + } + } + + public void Destroy() + { + // Cancel any outstanding IO and release the OvlK. + foreach (IsoTransferItem myIsoBuffer in Outstanding) + { + int transferred; + OvlPool.WaitAndRelease(myIsoBuffer.Ovl, 0, out transferred); + } + Completed.Clear(); + Outstanding.Clear(); + + foreach (IsoTransferItem myIsoBuffer in Master) + { + myIsoBuffer.Iso.Free(); + myIsoBuffer.BufferGC.Free(); + } + Master.Clear(); + OvlPool.Free(); + } + + private static void SetNextFrameNumber(IsoTransferItem isoTransferItem) + { + } + + public int SubmitNextRead() + { + // Pull from head of Completed list and push to end of Outstanding list + IsoTransferItem isoTransferItem = Completed.First.Value; + Completed.RemoveFirst(); + Outstanding.AddLast(isoTransferItem); + + // If managing a start frame manually, set it here and update the the frame counter for the next transfer. + SetNextFrameNumber(isoTransferItem); + + // Prepare the OvlK handle to be submitted. + OvlPool.ReUse(isoTransferItem.Ovl); + + // The data buffer was pinned earlier when it was allocated. Always pin managed memory before using it + // in an asynchronous function to keep the framework from tampering with it. + Usb.IsoReadPipe(PipeInfo.PipeId, + isoTransferItem.Buffer, + DataBufferSize, + isoTransferItem.Ovl, + isoTransferItem.Iso.Handle); + + int errorCode = Marshal.GetLastWin32Error(); + + // 997 is ERROR_IO_PENDING. For async, this means so far so good. + // IE: The transfer is submitted but we won't know if a problem occurs until it is completed. + if (errorCode != ErrorCodes.IoPending) return errorCode; + + TotalSubmittedCount++; + + return 0; + } + + public int WaitRead(out IsoTransferItem isoTransferItem, int i, out int transferred) + { + isoTransferItem = Outstanding.First.Value; + bool success = OvlPool.Wait(isoTransferItem.Ovl, 1000, KOVL_WAIT_FLAG.NONE, out transferred); + if (!success) + { + return Marshal.GetLastWin32Error(); + } + + Outstanding.RemoveFirst(); + Completed.AddLast(isoTransferItem); + + return 0; + } + } +} \ No newline at end of file diff --git a/Old Matlab Interface/bindings/examples_csharp/Read.Isochronous/Properties/AssemblyInfo.cs b/Old Matlab Interface/bindings/examples_csharp/Read.Isochronous/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..6b77b17d --- /dev/null +++ b/Old Matlab Interface/bindings/examples_csharp/Read.Isochronous/Properties/AssemblyInfo.cs @@ -0,0 +1,69 @@ +#region Copyright(c) Travis Robinson +// Copyright (c) 2012 Travis Robinson +// All rights reserved. +// +// AssemblyInfo.cs +// +// Created: 03.05.2012 +// Last Updated: 03.05.2012 +// +// 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. +// +// 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 TRAVIS LEE ROBINSON +// 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. +#endregion + + +using System.Reflection; +using System.Runtime.InteropServices; + + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. + +[assembly: AssemblyTitle("Read.Isochronous")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("Read.Isochronous")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2012")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. + +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM + +[assembly: Guid("b345e710-181d-481f-a62c-7e434534e582")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] + +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] \ No newline at end of file diff --git a/Old Matlab Interface/bindings/examples_csharp/Read.Isochronous/Read.Isochronous.csproj b/Old Matlab Interface/bindings/examples_csharp/Read.Isochronous/Read.Isochronous.csproj new file mode 100644 index 00000000..6f1e8d30 --- /dev/null +++ b/Old Matlab Interface/bindings/examples_csharp/Read.Isochronous/Read.Isochronous.csproj @@ -0,0 +1,66 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {97DB9A34-994D-470E-A415-AC54ACD96713} + Exe + Properties + Read.Isochronous + Read.Isochronous + v2.0 + 512 + + + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + libusbK.cs + + + Common\BenchmarkTestDevice.cs + + + Common\HiPerfTimer.cs + + + Common\TestParameters.cs + + + + + + + + + + \ No newline at end of file diff --git a/Old Matlab Interface/bindings/examples_csharp/Read.Isochronous/app.config b/Old Matlab Interface/bindings/examples_csharp/Read.Isochronous/app.config new file mode 100644 index 00000000..df20690a --- /dev/null +++ b/Old Matlab Interface/bindings/examples_csharp/Read.Isochronous/app.config @@ -0,0 +1,3 @@ + + + diff --git a/Old Matlab Interface/bindings/examples_csharp/TestParameters.cs b/Old Matlab Interface/bindings/examples_csharp/TestParameters.cs new file mode 100644 index 00000000..462e7ecd --- /dev/null +++ b/Old Matlab Interface/bindings/examples_csharp/TestParameters.cs @@ -0,0 +1,540 @@ +#region Copyright(c) Travis Robinson +// Copyright (c) 2012 Travis Robinson +// All rights reserved. +// +// TestParameters.cs +// +// Created: 03.05.2012 +// Last Updated: 03.05.2012 +// +// 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. +// +// 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 TRAVIS LEE ROBINSON +// 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. +#endregion + + +using System; +using System.Globalization; +using System.IO; +using System.Runtime.InteropServices; +using System.Text.RegularExpressions; +using Win32; + + +namespace libusbK.Examples +{ + internal abstract class TestParameters + { + protected TestParameters(int vid, + int pid, + int altInterfaceId, + int pipeId, + int maxTransfersTotal, + string logFilename) + { + MI = -1; + ; + Vid = vid; + Pid = pid; + PipeId = pipeId; + AltInterfaceId = altInterfaceId; + MaxTransfersTotal = maxTransfersTotal; + LogFilename = logFilename; + } + + + #region Public Members + public int AltInterfaceId; + + public bool ConfigureDevice(out WINUSB_PIPE_INFORMATION pipeInfo, + out UsbK usb, + out USB_INTERFACE_DESCRIPTOR interfaceDescriptor) + { + bool success; + Console.WriteLine("Finding usb device by VID/PID.. ({0:X4}h / {1:X4}h)", + Vid, + Pid); + + // Use a patttern match to include only matching devices. + // NOTE: You can use the '*' and '?' chars as wildcards for all chars or a single char (respectively). + KLST_PATTERN_MATCH patternMatch = new KLST_PATTERN_MATCH(); + if (MI != -1) + patternMatch.DeviceID = String.Format("USB\\VID_{0:X4}&PID_{1:X4}&MI_{2:X2}*", + Vid, + Pid, + MI); + else + patternMatch.DeviceID = String.Format("USB\\VID_{0:X4}&PID_{1:X4}*", + Vid, + Pid); + + LstK deviceList = new LstK(KLST_FLAG.NONE, + ref patternMatch); + KLST_DEVINFO_HANDLE deviceInfo; + interfaceDescriptor = new USB_INTERFACE_DESCRIPTOR(); + pipeInfo = new WINUSB_PIPE_INFORMATION(); + usb = null; + + // Iterate the devices looking for a matching alt-interface and endpoint id. + while (deviceList.MoveNext(out deviceInfo)) + { + // libusbK class contructors can throw exceptions; For instance, if the device is + // using the WinUsb driver and already in-use by another application. + Console.WriteLine("Opening usb device.."); + usb = new UsbK(deviceInfo); + + Console.WriteLine("Finding interface and endpoint by PipeId.."); + success = FindPipeAndInterface(usb, + out interfaceDescriptor, + out pipeInfo); + if (success) break; + + Console.WriteLine("PipeId {0:X2}h not found on this device.", + PipeId); + usb.Free(); + usb = null; + } + if (ReferenceEquals(usb, + null)) + { + Console.WriteLine("Usb device not found: {0}", + patternMatch.DeviceID); + success = false; + goto Done; + } + + MI = interfaceDescriptor.bInterfaceNumber; + AltInterfaceId = interfaceDescriptor.bAlternateSetting; + PipeId = pipeInfo.PipeId; + + // Set interface alt setting. + Console.WriteLine("Setting interface #{0} to bAlternateSetting #{1}..", + interfaceDescriptor.bInterfaceNumber, + interfaceDescriptor.bAlternateSetting); + success = usb.SetAltInterface(interfaceDescriptor.bInterfaceNumber, + false, + interfaceDescriptor.bAlternateSetting); + if (!success) + { + Console.WriteLine("SetAltInterface failed. ErrorCode={0:X8}h", + Marshal.GetLastWin32Error()); + Console.WriteLine(interfaceDescriptor.ToString()); + } + + Done: + deviceList.Free(); + + return success; + } + + public HiPerfTimer Dcs = new HiPerfTimer(); + + public void FillFromCommandLine(string commandLine) + { + commandLine = Regex.Replace(commandLine, + "^(\".+?\"|\\S+)\\s*", + ""); + string exp = String.Empty; + exp += makeArgExpression("Vid", + NumberStyles.HexNumber) + "|"; + exp += makeArgExpression("Pid", + NumberStyles.HexNumber) + "|"; + exp += makeArgExpression("PipeId", + NumberStyles.HexNumber) + "|"; + exp += makeArgExpression("AltId", + NumberStyles.Integer) + "|"; + exp += makeArgExpression("MI", + NumberStyles.Integer) + "|"; + exp += makeArgExpression("Log", + NumberStyles.None); + + m_CommandArguments = Regex.Matches(commandLine, + exp, + RegexOptions.ExplicitCapture | RegexOptions.IgnoreCase | + RegexOptions.IgnorePatternWhitespace); + + foreach (Match m in m_CommandArguments) + { + Group gVid = m.Groups["Vid"]; + Group gPid = m.Groups["Pid"]; + Group gMI = m.Groups["MI"]; + Group gPipeId = m.Groups["PipeId"]; + Group gAltId = m.Groups["AltId"]; + Group gLog = m.Groups["Log"]; + Group gIsHex = m.Groups["IsHex"]; + + if (gVid.Success) + Vid = gIsHex.Success + ? UInt16.Parse(gVid.Value, + NumberStyles.HexNumber) + : UInt16.Parse(gVid.Value); + else if (gPid.Success) + Pid = gIsHex.Success + ? UInt16.Parse(gPid.Value, + NumberStyles.HexNumber) + : UInt16.Parse(gPid.Value); + else if (gMI.Success) + MI = gIsHex.Success + ? UInt16.Parse(gMI.Value, + NumberStyles.HexNumber) + : UInt16.Parse(gMI.Value); + else if (gPipeId.Success) + PipeId = gIsHex.Success + ? Byte.Parse(gPipeId.Value, + NumberStyles.HexNumber) + : Byte.Parse(gPipeId.Value); + else if (gAltId.Success) + AltInterfaceId = gIsHex.Success + ? Byte.Parse(gAltId.Value, + NumberStyles.HexNumber) + : Byte.Parse(gAltId.Value); + else if (gLog.Success) + LogFilename = gLog.Value; + else + { + throw new Exception("Invalid argument:" + m.Value); + } + } + } + + public bool FindPipeAndInterface(UsbK usb, + out USB_INTERFACE_DESCRIPTOR interfaceDescriptor, + out WINUSB_PIPE_INFORMATION pipeInfo) + { + if (FindPipeAndInterface(usb, + out interfaceDescriptor, + out pipeInfo, + AltInterfaceId, + PipeId)) + { + AltInterfaceId = interfaceDescriptor.bAlternateSetting; + PipeId = pipeInfo.PipeId; + + return true; + } + return false; + } + + public static bool FindPipeAndInterface(UsbK usb, + out USB_INTERFACE_DESCRIPTOR interfaceDescriptor, + out WINUSB_PIPE_INFORMATION pipeInfo, + int altInterfaceId, + int pipeId) + { + byte interfaceIndex = 0; + interfaceDescriptor = new USB_INTERFACE_DESCRIPTOR(); + pipeInfo = new WINUSB_PIPE_INFORMATION(); + while (usb.SelectInterface(interfaceIndex, + true)) + { + byte altSettingNumber = 0; + while (usb.QueryInterfaceSettings(altSettingNumber, + out interfaceDescriptor)) + { + if (altInterfaceId == -1 || altInterfaceId == altSettingNumber) + { + byte pipeIndex = 0; + while (usb.QueryPipe(altSettingNumber, + pipeIndex++, + out pipeInfo)) + { + if ((pipeInfo.MaximumPacketSize > 0) && + pipeId == -1 || pipeInfo.PipeId == pipeId || + ((pipeId & 0xF) == 0 && ((pipeId & 0x80) == (pipeInfo.PipeId & 0x80)))) + { + goto FindInterfaceDone; + } + pipeInfo.PipeId = 0; + } + } + altSettingNumber++; + } + interfaceIndex++; + } + + FindInterfaceDone: + return pipeInfo.PipeId != 0; + } + + public void Free() + { + if (fileLoggingEnabled && logStream != null) + { + logStream.Flush(); + logStream.Close(); + logStream = null; + } + } + + public void Init() + { + if (!String.IsNullOrEmpty(LogFilename)) + { + logStream = new StreamWriter(LogFilename); + fileLoggingEnabled = true; + } + } + + public void Log(String text) + { + if (fileLoggingEnabled) logStream.Write(text); + else Console.Write(text); + } + + public void Log(String format, + params object[] args) + { + if (fileLoggingEnabled) + logStream.Write(format, + args); + else + Console.Write(format, + args); + } + + public string LogFilename; + + public void LogLn(String text) + { + if (fileLoggingEnabled) logStream.WriteLine(text); + else Console.WriteLine(text); + } + + public void LogLn(String format, + params object[] args) + { + if (fileLoggingEnabled) + logStream.WriteLine(format, + args); + else + Console.WriteLine(format, + args); + } + + public int MI; + public int MaxTransfersTotal; + public int Pid; + public int PipeId; + + public bool ShowTestReady() + { + while (Console.KeyAvailable) + Console.ReadKey(true); + + Console.WriteLine("Test ready:"); + Console.Write(ToString()); + + if (!String.IsNullOrEmpty(LogFilename)) + Console.WriteLine("Logging output to file: {0}", + LogFilename); + + Console.WriteLine("Press 'Q' to abort or any other key to continue.."); + ConsoleKeyInfo key = Console.ReadKey(true); + if (key.KeyChar == 'q' || key.KeyChar == 'Q') return false; + + Console.WriteLine(); + Console.WriteLine("Starting test.."); + Console.WriteLine(); + + return true; + } + + public override string ToString() + { + return + String.Format( + "Vid: {0:X4}h\nPid: {1:X4}h\nMI: {2:X2}h\nPipeId: {3:X2}h\nMaxTransfersTotal: {4}\n\nLogFilename: {5}\n", + Vid, + Pid, + MI, + PipeId, + MaxTransfersTotal, + LogFilename); + } + + public int Vid; + #endregion + + + #region Private Members + private bool fileLoggingEnabled; + + private StreamWriter logStream; + private MatchCollection m_CommandArguments; + + private string makeArgExpression(string argName, + NumberStyles argType) + { + const string argsep = @"\W\s*"; + + switch (argType) + { + case NumberStyles.None: + return String.Format(@"(({0}{1}(?<{0}>{2}))\s*)", + argName, + argsep, + "(\".+?\"|\\S+)"); + case NumberStyles.Integer: + case NumberStyles.HexNumber: + return String.Format(@"(({0}{1}(?0x)?(?<{0}>[0-9A-F]+))(?h)?\s*)", + argName, + argsep); + default: + throw new Exception(); + } + } + #endregion + } + + internal class IsoTestParameters : TestParameters + { + #region Public Members + public IsoTestParameters(int vid, + int pid, + int altInterfaceId, + int pipeId, + int maxOutstandingTransfers, + int maxTransfersTotal, + string logFilename, + int isoPacketsPerTransfer) + : base(vid, + pid, + altInterfaceId, + pipeId, + maxTransfersTotal, + logFilename) + { + IsoPacketsPerTransfer = isoPacketsPerTransfer; + MaxOutstandingTransfers = maxOutstandingTransfers; + + FillFromCommandLine(Environment.CommandLine); + Init(); + } + + public int IsoPacketsPerTransfer; + public int MaxOutstandingTransfers; + + public override string ToString() + { + string fmt = String.Empty; + fmt += "IsoPacketsPerTransfer: {0}\n"; + fmt += "MaxOutstandingTransfers: {1}\n"; + + object[] args = new object[] + { + IsoPacketsPerTransfer, MaxOutstandingTransfers + }; + return base.ToString() + string.Format(fmt, + args); + } + #endregion + } + + internal class StmTestParameters : TestParameters + { + #region Public Members + public StmTestParameters(int vid, + int pid, + int altInterfaceId, + byte pipeId, + int maxTransfersTotal, + string logFilename, + int transferBufferSize, + int maxPendingIO, + int maxPendingTransfers) + : base(vid, + pid, + altInterfaceId, + pipeId, + maxTransfersTotal, + logFilename) + { + TransferBufferSize = transferBufferSize; + MaxPendingIO = maxPendingIO; + MaxPendingTransfers = maxPendingTransfers; + + FillFromCommandLine(Environment.CommandLine); + Init(); + } + + public int MaxPendingIO; + public int MaxPendingTransfers; + + public override string ToString() + { + string fmt = String.Empty; + fmt += "TransferBufferSize: {0}\n"; + fmt += "MaxPendingIO: {1}\n"; + fmt += "MaxPendingTransfers: {2}\n"; + + object[] args = new object[] + { + TransferBufferSize, MaxPendingIO, MaxPendingTransfers + }; + return base.ToString() + string.Format(fmt, + args); + } + + public int TransferBufferSize; + #endregion + } + + internal class AsyncTestParameters : TestParameters + { + #region Public Members + public AsyncTestParameters(int vid, + int pid, + int altInterfaceId, + byte pipeId, + int maxTransfersTotal, + string logFilename, + int transferBufferSize, + int maxPendingIO) + : base(vid, + pid, + altInterfaceId, + pipeId, + maxTransfersTotal, + logFilename) + { + TransferBufferSize = transferBufferSize; + MaxPendingIO = maxPendingIO; + + FillFromCommandLine(Environment.CommandLine); + Init(); + } + + public int MaxPendingIO; + + public override string ToString() + { + string fmt = String.Empty; + fmt += "TransferBufferSize: {0}\n"; + fmt += "MaxPendingIO: {1}\n"; + + object[] args = new object[] + { + TransferBufferSize, MaxPendingIO + }; + return base.ToString() + string.Format(fmt, + args); + } + + public int TransferBufferSize; + #endregion + } +} \ No newline at end of file diff --git a/Old Matlab Interface/bindings/examples_csharp/Xfer.Async/Program.cs b/Old Matlab Interface/bindings/examples_csharp/Xfer.Async/Program.cs new file mode 100644 index 00000000..0ba38030 --- /dev/null +++ b/Old Matlab Interface/bindings/examples_csharp/Xfer.Async/Program.cs @@ -0,0 +1,210 @@ +#region Copyright(c) Travis Robinson + +// Copyright (c) 2011-2012 Travis Robinson +// All rights reserved. +// +// Xfer.Async +// +// Last Updated: 03.09.2012 +// +// 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. +// +// 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 TRAVIS LEE ROBINSON +// 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. + +#endregion + +#define BMFW + +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Runtime.InteropServices; +using Test.Devices; +using libusbK; +using libusbK.Examples; + +// ReSharper disable InconsistentNaming + +namespace Xfer.Async +{ + internal class Program + { + #region TODO USER: Set the test parameters for your device. + + public static AsyncTestParameters Test = new AsyncTestParameters(0x04d8, 0xfa2e, 0, 0x81, 9, null, -1, 3); + + #endregion + + private static void Main() + { + bool success; + + WINUSB_PIPE_INFORMATION pipeInfo; + UsbK usb; + USB_INTERFACE_DESCRIPTOR interfaceDescriptor; + + // Find and configure the device. + if (!Test.ConfigureDevice(out pipeInfo, out usb, out interfaceDescriptor)) return; + if (Test.TransferBufferSize == -1) + Test.TransferBufferSize = pipeInfo.MaximumPacketSize * 64; + +#if BMFW + // TODO FOR USER: Remove this block if not using benchmark firmware. + // This configures devices running benchmark firmware for streaming DeviceToHost transfers. + Console.WriteLine("Configuring for benchmark device.."); + BM_TEST_TYPE testType = ((Test.PipeId & 0x80) > 0) ? BM_TEST_TYPE.READ : BM_TEST_TYPE.WRITE; + success = Benchmark.Configure(usb, BM_COMMAND.SET_TEST, interfaceDescriptor.bInterfaceNumber, ref testType); + if (!success) + { + Console.WriteLine("Bench_Configure failed."); + } +#endif + if (!Test.ShowTestReady()) goto Done; + + /* In most cases, you should clear the pipe timeout policy before using asynchronous I/O. (INFINITE) + * This decreases overhead in the driver and generally we managed the timeout ourselves from user code. + * + * Set the PIPE_TRANSFER_TIMEOUT policy to INFINITE: + */ + int[] pipeTimeoutMS = new[] {0}; + usb.SetPipePolicy((byte) Test.PipeId, + (int) PipePolicyType.PIPE_TRANSFER_TIMEOUT, + Marshal.SizeOf(typeof (int)), + pipeTimeoutMS); + + + /* In some cases, you may want to set the RAW_IO pipe policy. This will impose more restrictions on the + * allowable transfer buffer sizes but will improve performance. (See documentation for restrictions) + * + * Set the RAW_IO policy to TRUE: + */ + int[] useRawIO = new[] {1}; + usb.SetPipePolicy((byte)Test.PipeId, + (int)PipePolicyType.RAW_IO, + Marshal.SizeOf(typeof(int)), + useRawIO); + + int totalSubmittedTransfers = 0; + int totalCompletedTransfers = 0; + + /* We need a different buffer for each MaxPendingIO slot because they will all be submitted to the driver + * (outstanding) at the same time. + */ + byte[][] transferBuffers = new byte[Test.MaxPendingIO][]; + + OvlK ovlPool = new OvlK(usb.Handle, Test.MaxPendingIO, KOVL_POOL_FLAG.NONE); + List transferBufferGCList = new List(Test.MaxPendingIO); + success = true; + + // Start transferring data synchronously; one transfer at a time until the test limit (MaxTransfersTotal) is hit. + while (success && totalCompletedTransfers < Test.MaxTransfersTotal) + { + KOVL_HANDLE ovlHandle; + int transferred; + while (success && totalSubmittedTransfers < Test.MaxTransfersTotal) + { + // Get the next KOVL_HANDLE + if (!ovlPool.Acquire(out ovlHandle)) + { + // This example expects a failure of NoMoreItems when the pool has no more handles to acquire. This is + // our indication that it is time to begin waiting for a completion. + Debug.Assert(Marshal.GetLastWin32Error() == ErrorCodes.NoMoreItems); + break; + } + + // Get the next transfer buffer + int transferBufferIndex = totalSubmittedTransfers % Test.MaxPendingIO; + if (transferBuffers[transferBufferIndex] == null) + { + /* This index has not been allocated yet. We need a different buffer for each MaxPendingIO + * slot because they will all be submitted to the driver (outstanding) at the same time. + */ + + Console.WriteLine("Allocating transfer buffer at index:{0}", transferBufferIndex); + transferBuffers[transferBufferIndex] = new byte[Test.TransferBufferSize]; + + // Transfer buffers should be pinned so the garbage collector cannot move the memory. + transferBufferGCList.Add(GCHandle.Alloc(transferBuffers[transferBufferIndex], GCHandleType.Pinned)); + } + + byte[] transferBuffer = transferBuffers[transferBufferIndex]; + + int not_used_for_async; + if ((Test.PipeId & AllKConstants.USB_ENDPOINT_DIRECTION_MASK) > 0) + { + success = usb.ReadPipe((byte) Test.PipeId, transferBuffer, transferBuffer.Length, out not_used_for_async, ovlHandle); + } + else + { + FillMyBufferForWrite(transferBuffer, out transferred); + success = usb.WritePipe((byte)Test.PipeId, transferBuffer, transferred, out not_used_for_async, ovlHandle); + } + + if (Marshal.GetLastWin32Error() == ErrorCodes.IoPending) + { + success = true; + totalSubmittedTransfers++; + Console.WriteLine("Pending #{0:0000} {1} bytes.", totalSubmittedTransfers, transferBuffer.Length); + } + else + Console.WriteLine("Pending #{0:0000} failed. ErrorCode={1:X8}h", totalSubmittedTransfers, Marshal.GetLastWin32Error()); + } + if (!success) break; + + // Wait for the oldest transfer to complete and release the ovlHandle to the pool so it can be re-acquired. + success = ovlPool.WaitOldest(out ovlHandle, 1000, KOVL_WAIT_FLAG.RELEASE_ALWAYS, out transferred); + totalCompletedTransfers++; + + if (success) + { + if ((Test.PipeId & AllKConstants.USB_ENDPOINT_DIRECTION_MASK) > 0) + { + ProcessMyBufferFromRead(transferBuffers[(totalCompletedTransfers-1) % Test.MaxPendingIO], transferred); + } + Console.WriteLine("Complete #{0:0000} {1} bytes.", totalCompletedTransfers, transferred); + } + else + Console.WriteLine("Complete #{0:0000} Wait failed. ErrorCode={1:X8}h", totalCompletedTransfers, Marshal.GetLastWin32Error()); + } + + if (!success) + Console.WriteLine("An error occured transferring data. ErrorCode: {0:X8}h", Marshal.GetLastWin32Error()); + + ovlPool.Free(); + + // Free the GC handles allocated for the transfer buffers + foreach (GCHandle gcHandle in transferBufferGCList) + gcHandle.Free(); + + Done: + usb.Free(); + } + + #region TODO USER: Use these functions to process and fill the transfer buffers + + private static void ProcessMyBufferFromRead(byte[] transferBuffer, int transferred) + { + } + + private static void FillMyBufferForWrite(byte[] transferBuffer, out int length) + { + length = transferBuffer.Length; + } + + #endregion + } +} \ No newline at end of file diff --git a/Old Matlab Interface/bindings/examples_csharp/Xfer.Async/Properties/AssemblyInfo.cs b/Old Matlab Interface/bindings/examples_csharp/Xfer.Async/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..5e9d6a49 --- /dev/null +++ b/Old Matlab Interface/bindings/examples_csharp/Xfer.Async/Properties/AssemblyInfo.cs @@ -0,0 +1,69 @@ +#region Copyright(c) Travis Robinson +// Copyright (c) 2012 Travis Robinson +// All rights reserved. +// +// AssemblyInfo.cs +// +// Created: 03.05.2012 +// Last Updated: 03.05.2012 +// +// 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. +// +// 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 TRAVIS LEE ROBINSON +// 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. +#endregion + + +using System.Reflection; +using System.Runtime.InteropServices; + + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. + +[assembly: AssemblyTitle("Xfer.Async")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("Xfer.Async")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2012")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. + +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM + +[assembly: Guid("bfe3ff24-a3d7-4ccc-b010-df007284dc6a")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] + +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] \ No newline at end of file diff --git a/Old Matlab Interface/bindings/examples_csharp/Xfer.Async/Xfer.Async.csproj b/Old Matlab Interface/bindings/examples_csharp/Xfer.Async/Xfer.Async.csproj new file mode 100644 index 00000000..cdb959ec --- /dev/null +++ b/Old Matlab Interface/bindings/examples_csharp/Xfer.Async/Xfer.Async.csproj @@ -0,0 +1,62 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {67C87F34-0DD6-41DB-B95B-0BFF24D8C4E8} + Exe + Properties + Xfer.Async + Xfer.Async + v2.0 + 512 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + libusbK.cs + + + Common\BenchmarkTestDevice.cs + + + Common\HiPerfTimer.cs + + + Common\TestParameters.cs + + + + + + + \ No newline at end of file diff --git a/Old Matlab Interface/bindings/examples_csharp/Xfer.Sync/Program.cs b/Old Matlab Interface/bindings/examples_csharp/Xfer.Sync/Program.cs new file mode 100644 index 00000000..02a976c5 --- /dev/null +++ b/Old Matlab Interface/bindings/examples_csharp/Xfer.Sync/Program.cs @@ -0,0 +1,109 @@ +#region Copyright(c) Travis Robinson + +// Copyright (c) 2011-2012 Travis Robinson +// All rights reserved. +// +// Xfer.Sync +// +// Last Updated: 03.08.2012 +// +// 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. +// +// 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 TRAVIS LEE ROBINSON +// 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. + +#endregion + +#define BMFW + +using System; +using System.Runtime.InteropServices; +using Test.Devices; +using libusbK; +using libusbK.Examples; + +// ReSharper disable InconsistentNaming + +namespace Xfer.Sync +{ + internal class Program + { + #region TODO USER: Set the test parameters for your device. + + public static StmTestParameters Test = new StmTestParameters(0x04d8, 0xfa2e, 0, 0x01, 1024, null, -1, 4, 64); + + #endregion + + private static void Main() + { + bool success; + WINUSB_PIPE_INFORMATION pipeInfo; + UsbK usb; + USB_INTERFACE_DESCRIPTOR interfaceDescriptor; + + // Find and configure the device. + if (!Test.ConfigureDevice(out pipeInfo, out usb, out interfaceDescriptor)) return; + if (Test.TransferBufferSize == -1) + Test.TransferBufferSize = pipeInfo.MaximumPacketSize*64; + +#if BMFW + // TODO FOR USER: Remove this block if not using benchmark firmware. + // This configures devices running benchmark firmware for streaming DeviceToHost transfers. + Console.WriteLine("Configuring for benchmark device.."); + BM_TEST_TYPE testType = ((Test.PipeId & 0x80) > 0) ? BM_TEST_TYPE.READ : BM_TEST_TYPE.WRITE; + success = Benchmark.Configure(usb, BM_COMMAND.SET_TEST, interfaceDescriptor.bInterfaceNumber, ref testType); + if (!success) + { + Console.WriteLine("Bench_Configure failed."); + } +#endif + if (!Test.ShowTestReady()) goto Done; + + // In most cases, you should to set the pipe timeout policy before using synchronous I/O. + // By default, sync transfers wait infinitely for a transfer to complete. + + // Set the pipe timeout policy to 3000ms + int[] pipeTimeoutMS = new[] {3000}; + usb.SetPipePolicy( + (byte) Test.PipeId, + (int) PipePolicyType.PIPE_TRANSFER_TIMEOUT, + Marshal.SizeOf(typeof (int)), + pipeTimeoutMS); + + int totalTransfers = 0; + success = true; + byte[] tempBuffer = new byte[Test.TransferBufferSize]; + while (success && totalTransfers++ < Test.MaxTransfersTotal) + { + int transferred; + if ((Test.PipeId & 0x80) > 0) + success = usb.ReadPipe((byte) Test.PipeId, tempBuffer, tempBuffer.Length, out transferred, IntPtr.Zero); + else + success = usb.WritePipe((byte) Test.PipeId, tempBuffer, tempBuffer.Length, out transferred, IntPtr.Zero); + + Console.WriteLine("#{0:0000} Transferred {1} bytes.", totalTransfers, transferred); + } + + if (!success) + { + Console.WriteLine("An error occured transferring data. ErrorCode: {0:X8}h", Marshal.GetLastWin32Error()); + } + + Done: + usb.Free(); + } + } +} \ No newline at end of file diff --git a/Old Matlab Interface/bindings/examples_csharp/Xfer.Sync/Properties/AssemblyInfo.cs b/Old Matlab Interface/bindings/examples_csharp/Xfer.Sync/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..1be234ab --- /dev/null +++ b/Old Matlab Interface/bindings/examples_csharp/Xfer.Sync/Properties/AssemblyInfo.cs @@ -0,0 +1,69 @@ +#region Copyright(c) Travis Robinson +// Copyright (c) 2012 Travis Robinson +// All rights reserved. +// +// AssemblyInfo.cs +// +// Created: 03.05.2012 +// Last Updated: 03.05.2012 +// +// 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. +// +// 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 TRAVIS LEE ROBINSON +// 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. +#endregion + + +using System.Reflection; +using System.Runtime.InteropServices; + + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. + +[assembly: AssemblyTitle("Xfer.Sync")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("Xfer.Sync")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2012")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. + +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM + +[assembly: Guid("bd85bac8-7975-4bcd-8e0b-b0e84e558546")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] + +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] \ No newline at end of file diff --git a/Old Matlab Interface/bindings/examples_csharp/Xfer.Sync/Xfer.Sync.csproj b/Old Matlab Interface/bindings/examples_csharp/Xfer.Sync/Xfer.Sync.csproj new file mode 100644 index 00000000..1479c989 --- /dev/null +++ b/Old Matlab Interface/bindings/examples_csharp/Xfer.Sync/Xfer.Sync.csproj @@ -0,0 +1,62 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {68CE8DCE-504B-4C73-B788-F6BB7911EDAA} + Exe + Properties + Xfer.Sync + Xfer.Sync + v2.0 + 512 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + libusbK.cs + + + Common\BenchmarkTestDevice.cs + + + Common\HiPerfTimer.cs + + + Common\TestParameters.cs + + + + + + + \ No newline at end of file diff --git a/Old Matlab Interface/bindings/examples_csharp/Xfer.Threaded.Stream/Program.cs b/Old Matlab Interface/bindings/examples_csharp/Xfer.Threaded.Stream/Program.cs new file mode 100644 index 00000000..c8e97154 --- /dev/null +++ b/Old Matlab Interface/bindings/examples_csharp/Xfer.Threaded.Stream/Program.cs @@ -0,0 +1,140 @@ +#region Copyright(c) Travis Robinson + +// Copyright (c) 2011-2012 Travis Robinson +// All rights reserved. +// +// Xfer.Stm +// +// Last Updated: 03.08.2012 +// +// 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. +// +// 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 TRAVIS LEE ROBINSON +// 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. + +#endregion + +#define BMFW + +using System; +using System.Runtime.InteropServices; +using System.Threading; +using Test.Devices; +using libusbK; +using libusbK.Examples; + +// ReSharper disable InconsistentNaming + +namespace Xfer.Stm +{ + internal class Program + { + #region TODO USER: Set the test parameters for your device. + + public static StmTestParameters Test = new StmTestParameters(0x04d8, 0xfa2e, 0, 0x81, 1024, null, -1, 4, 64); + + #endregion + + private static void Main() + { + bool success; + WINUSB_PIPE_INFORMATION pipeInfo; + UsbK usb; + USB_INTERFACE_DESCRIPTOR interfaceDescriptor; + + // Find and configure the device. + if (!Test.ConfigureDevice(out pipeInfo, out usb, out interfaceDescriptor)) return; + if (Test.TransferBufferSize == -1) + Test.TransferBufferSize = pipeInfo.MaximumPacketSize*64; + +#if BMFW + // TODO FOR USER: Remove this block if not using benchmark firmware. + // This configures devices running benchmark firmware for streaming DeviceToHost transfers. + Console.WriteLine("Configuring for benchmark device.."); + BM_TEST_TYPE testType = ((Test.PipeId & 0x80) > 0) ? BM_TEST_TYPE.READ : BM_TEST_TYPE.WRITE; + success = Benchmark.Configure(usb, BM_COMMAND.SET_TEST, interfaceDescriptor.bInterfaceNumber, ref testType); + if (!success) + { + Console.WriteLine("Bench_Configure failed."); + } +#endif + if (!Test.ShowTestReady()) goto Done; + + KSTM_CALLBACK callback = new KSTM_CALLBACK(); + StmK stm = new StmK( + usb.Handle, + pipeInfo.PipeId, + Test.TransferBufferSize, + Test.MaxPendingTransfers, + Test.MaxPendingIO, + ref callback, + KSTM_FLAG.USE_TIMEOUT | (KSTM_FLAG) 3000); + + byte[] tempBuffer = new byte[Test.TransferBufferSize]; + + Thread.Sleep(0); + // This is just a counter/timer for statistics gathering. + Test.Dcs.Start(); + success = stm.Start(); + + long totalTransferCount = 0; + while (success) + { + int transferred; + if ((pipeInfo.PipeId & 0x80) == 0x80) + { + success = stm.Read(tempBuffer, 0, tempBuffer.Length, out transferred); + if (!success) break; + } + else + { + success = stm.Write(tempBuffer, 0, tempBuffer.Length, out transferred); + if (!success) break; + } + + string dataPrefix = String.Format(" Data Prefix: [{0:X2} {1:X2} {2:X2} {3:X2} {4:X2} {5:X2} {6:X2} {7:X2}] ", + tempBuffer[0], + tempBuffer[1], + tempBuffer[2], + tempBuffer[3], + tempBuffer[4], + tempBuffer[5], + tempBuffer[6], + tempBuffer[7]); + + Console.WriteLine( + totalTransferCount > Test.MaxTransfersTotal + ? "#{0}: [Stream Stopped] {1} transferred. {2}" + : "#{0}: {1} transferred. {2}", + totalTransferCount.ToString("0000"), + transferred, + dataPrefix); + + totalTransferCount++; + + if (totalTransferCount == Test.MaxTransfersTotal) + success = stm.Stop(3000); + } + + Console.WriteLine("Done. TotalTransfers:{0} ErrorCode:{1:X8}h", totalTransferCount, Marshal.GetLastWin32Error()); + + stm.Free(); + + Done: + usb.Free(); + } + } +} \ No newline at end of file diff --git a/Old Matlab Interface/bindings/examples_csharp/Xfer.Threaded.Stream/Properties/AssemblyInfo.cs b/Old Matlab Interface/bindings/examples_csharp/Xfer.Threaded.Stream/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..ddc00a05 --- /dev/null +++ b/Old Matlab Interface/bindings/examples_csharp/Xfer.Threaded.Stream/Properties/AssemblyInfo.cs @@ -0,0 +1,69 @@ +#region Copyright(c) Travis Robinson +// Copyright (c) 2012 Travis Robinson +// All rights reserved. +// +// AssemblyInfo.cs +// +// Created: 03.05.2012 +// Last Updated: 03.05.2012 +// +// 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. +// +// 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 TRAVIS LEE ROBINSON +// 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. +#endregion + + +using System.Reflection; +using System.Runtime.InteropServices; + + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. + +[assembly: AssemblyTitle("Xfer.Threaded.Stream")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("Xfer.Threaded.Stream")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2012")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. + +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM + +[assembly: Guid("e66b3bbf-a288-4a3e-9468-2f3bfd7303f6")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] + +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] \ No newline at end of file diff --git a/Old Matlab Interface/bindings/examples_csharp/Xfer.Threaded.Stream/Xfer.Stm.csproj b/Old Matlab Interface/bindings/examples_csharp/Xfer.Threaded.Stream/Xfer.Stm.csproj new file mode 100644 index 00000000..84b1c5d3 --- /dev/null +++ b/Old Matlab Interface/bindings/examples_csharp/Xfer.Threaded.Stream/Xfer.Stm.csproj @@ -0,0 +1,62 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {AB79B52F-49BA-4424-8DD3-CC61489EFC1E} + Exe + Properties + Xfer.Stm + Xfer.Stm + v2.0 + 512 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + false + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + libusbK.cs + + + Common\BenchmarkTestDevice.cs + + + Common\HiPerfTimer.cs + + + Common\TestParameters.cs + + + + + + + \ No newline at end of file diff --git a/Old Matlab Interface/bindings/examples_csharp/Xfer.UsbStream/Program.cs b/Old Matlab Interface/bindings/examples_csharp/Xfer.UsbStream/Program.cs new file mode 100644 index 00000000..448c3b1d --- /dev/null +++ b/Old Matlab Interface/bindings/examples_csharp/Xfer.UsbStream/Program.cs @@ -0,0 +1,187 @@ +#region Copyright(c) Travis Robinson + +// Copyright (c) 2011-2012 Travis Robinson +// All rights reserved. +// +// Xfer.UsbStream +// +// Last Updated: 03.08.2012 +// +// 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. +// +// 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 TRAVIS LEE ROBINSON +// 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. + +#endregion + +#define BMFW + +using System; +using System.Diagnostics; +using System.IO; +using System.Threading; +using Test.Devices; +using libusbK; +using libusbK.Examples; + +namespace Xfer.UsbStream +{ + internal class Program + { + #region TODO USER: Set the test parameters for your device. + + public static StmTestParameters Test = new StmTestParameters(0x04d8, 0xfa2e, 0, 0x81, 1024, null, -1, 4, 64); + + #endregion + + private static bool FormatBrokenStrings(int fixedLength, string preAdd, ref string sPartialRead, ref string sRead) + { + if (sRead.Length != fixedLength) + { + // partial read. + if (!String.IsNullOrEmpty(sPartialRead)) + { + sPartialRead += sRead; + if (sPartialRead.Length != fixedLength) + return false; + + sRead = sPartialRead; + sPartialRead = String.Empty; + } + else + { + sPartialRead = sRead; + return false; + } + } + sRead = preAdd + sRead.Substring(preAdd.Length); + return true; + } + + private static void Main() + { + bool success; + UsbK usb; + WINUSB_PIPE_INFORMATION pipeInfoRead; + USB_INTERFACE_DESCRIPTOR interfaceDescriptorRead; + + WINUSB_PIPE_INFORMATION pipeInfoWrite; + USB_INTERFACE_DESCRIPTOR interfaceDescriptorWrite; + + // Find the IN endpoint and configure the device. + Test.PipeId = Test.PipeId | AllKConstants.USB_ENDPOINT_DIRECTION_MASK; + if (!Test.ConfigureDevice(out pipeInfoRead, out usb, out interfaceDescriptorRead)) return; + + // Find the OUT endpoint. + Test.PipeId = Test.PipeId & ~AllKConstants.USB_ENDPOINT_DIRECTION_MASK; + if (!Test.FindPipeAndInterface(usb, out interfaceDescriptorWrite, out pipeInfoWrite)) return; + + Debug.Assert( + interfaceDescriptorRead.bInterfaceNumber == interfaceDescriptorWrite.bInterfaceNumber, + "This example requires the IN and OUT endpoints have the same bInterfaceNumber."); + + Debug.Assert( + pipeInfoRead.MaximumPacketSize > 0 && + pipeInfoRead.MaximumPacketSize == pipeInfoWrite.MaximumPacketSize, + "This example requires the IN and OUT endpoints have the same MaximumPacketSize."); + + // We will keep the buffer >= 1024. + // To satisfy StmK it must also be an interval of MaximumPacketSize + if (Test.TransferBufferSize == -1) + Test.TransferBufferSize = pipeInfoWrite.MaximumPacketSize * ((1024 + pipeInfoWrite.MaximumPacketSize-1) / pipeInfoWrite.MaximumPacketSize); + +#if BMFW + // TODO FOR USER: Remove this block if not using benchmark firmware. + // This configures devices running benchmark firmware for streaming DeviceToHost transfers. + Console.WriteLine("Configuring for benchmark device.."); + BM_TEST_TYPE testType = BM_TEST_TYPE.LOOP; + success = Benchmark.Configure(usb, BM_COMMAND.SET_TEST, interfaceDescriptorRead.bInterfaceNumber, ref testType); + if (!success) + { + Console.WriteLine("Bench_Configure failed."); + } +#endif + if (!Test.ShowTestReady()) goto Done; + + UsbStream stmRead = new UsbStream(usb, + pipeInfoRead.PipeId, + Test.TransferBufferSize, + Test.MaxPendingTransfers, + Test.MaxPendingIO, + true, + 1); + UsbStream stmWrite = new UsbStream(usb, + pipeInfoWrite.PipeId, + Test.TransferBufferSize, + Test.MaxPendingTransfers, + Test.MaxPendingIO, + true, + 3000); + + StreamReader stmReader = new StreamReader(stmRead); + StreamWriter stmWriter = new StreamWriter(stmWrite); + + stmRead.Start(); + stmWrite.Start(); + + Char[] chTemp = new char[Test.TransferBufferSize]; + while (stmReader.Read(chTemp, 0, chTemp.Length) > 0) + { + Console.WriteLine("Flushing packets.."); + } + string sWrite = String.Empty; + string sPartialRead = String.Empty; + string sRead; + const string lineFormat = "Tx#{0:000000} This string is being looped through endpoints {1:X2}h and {2:X2}h"; + int lineLength = String.Format(lineFormat, 0, 0, 0).Length; + + // This is a counter/timer used only for statistics gathering. + Thread.Sleep(0); + Test.Dcs.Start(); + + for (int iTransfers = 0; iTransfers < Test.MaxTransfersTotal; iTransfers++) + { + sWrite = String.Format(lineFormat, iTransfers, pipeInfoWrite.PipeId, pipeInfoRead.PipeId); + stmWriter.WriteLine(sWrite); + Console.WriteLine(sWrite); + + if ((iTransfers & 8) > 0) stmWriter.Flush(); + if (iTransfers <= 16 || (String.IsNullOrEmpty((sRead = stmReader.ReadLine())))) + continue; + + if (!FormatBrokenStrings(lineLength, "Rx", ref sPartialRead, ref sRead)) continue; + Console.WriteLine(sRead); + } + + stmWriter.Flush(); + while (!(String.IsNullOrEmpty((sRead = stmReader.ReadLine())))) + { + if (!FormatBrokenStrings(lineLength, "Rx", ref sPartialRead, ref sRead)) continue; + Console.WriteLine(sRead); + } + + Test.Dcs.Stop(); + TimeSpan ts = new TimeSpan(Test.Dcs.Ticks); + Console.WriteLine("Elapsed Time:\n\t{0} mins\n\t{1} secs\n\t{2} msecs", Math.Floor(ts.TotalMinutes), ts.Seconds, ts.Milliseconds); + + stmWriter.Dispose(); + stmReader.Dispose(); + + Done: + usb.Free(); + } + } +} \ No newline at end of file diff --git a/Old Matlab Interface/bindings/examples_csharp/Xfer.UsbStream/Properties/AssemblyInfo.cs b/Old Matlab Interface/bindings/examples_csharp/Xfer.UsbStream/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..be39bb28 --- /dev/null +++ b/Old Matlab Interface/bindings/examples_csharp/Xfer.UsbStream/Properties/AssemblyInfo.cs @@ -0,0 +1,69 @@ +#region Copyright(c) Travis Robinson +// Copyright (c) 2012 Travis Robinson +// All rights reserved. +// +// AssemblyInfo.cs +// +// Created: 03.05.2012 +// Last Updated: 03.05.2012 +// +// 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. +// +// 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 TRAVIS LEE ROBINSON +// 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. +#endregion + + +using System.Reflection; +using System.Runtime.InteropServices; + + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. + +[assembly: AssemblyTitle("Xfer.UsbStream")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("Xfer.UsbStream")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2012")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. + +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM + +[assembly: Guid("3d6a566f-2b7f-4ada-9e61-8691a59bd3bc")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] + +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] \ No newline at end of file diff --git a/Old Matlab Interface/bindings/examples_csharp/Xfer.UsbStream/UsbStream.cs b/Old Matlab Interface/bindings/examples_csharp/Xfer.UsbStream/UsbStream.cs new file mode 100644 index 00000000..4280bc3c --- /dev/null +++ b/Old Matlab Interface/bindings/examples_csharp/Xfer.UsbStream/UsbStream.cs @@ -0,0 +1,258 @@ +#region Copyright(c) Travis Robinson + +// Copyright (c) 2012 Travis Robinson +// All rights reserved. +// +// UsbStream.cs +// +// Created: 03.05.2012 +// Last Updated: 03.07.2012 +// +// 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. +// +// 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 TRAVIS LEE ROBINSON +// 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. + +#endregion + +using System; +using System.Diagnostics; +using System.IO; +using System.Runtime.InteropServices; +using libusbK; + +namespace Xfer.UsbStream +{ + // ReSharper disable InconsistentNaming + + public class UsbStream : Stream + { + public static bool UseCallbacks = true; + + private readonly KSTM_CALLBACK mCallbacks; + protected readonly byte mPipeId; + protected StmK mStm; + protected UsbK mUsb; + private bool mbDisposed; + + public UsbStream(UsbK usb, + byte pipeId, + int maxTransferSize, + int maxPendingTransfers, + int maxPendingIo, + bool useTimeout, + UInt16 timeout) + { + mUsb = usb; + mPipeId = pipeId; + + if (UseCallbacks) + { + mCallbacks.Complete = StmComplete; + if (((mPipeId & AllKConstants.USB_ENDPOINT_DIRECTION_MASK) > 0)) + { + mCallbacks.Submit = StmSubmitRead; + } + else + { + mCallbacks.Submit = StmSubmitWrite; + } + } + KSTM_FLAG flags = useTimeout ? KSTM_FLAG.USE_TIMEOUT | (KSTM_FLAG) timeout : KSTM_FLAG.NONE; + + mStm = new StmK(mUsb.Handle, + pipeId, + maxTransferSize, + maxPendingTransfers, + maxPendingIo, + ref mCallbacks, + flags); + } + + public override bool CanRead + { + get + { + return ((mPipeId & AllKConstants.USB_ENDPOINT_DIRECTION_MASK) > 0); + } + } + + public override bool CanSeek + { + get + { + return false; + } + } + + public override bool CanWrite + { + get + { + return ((mPipeId & AllKConstants.USB_ENDPOINT_DIRECTION_MASK) == 0); + } + } + + protected override void Dispose(bool disposing) + { + if (!mbDisposed) + { + mStm.Dispose(); + mStm = null; + mUsb = null; + mbDisposed = true; + } + base.Dispose(disposing); + } + + public override int Read(byte[] buffer, int offset, int count) + { + int transferred; + bool success = mStm.Read(buffer, offset, count, out transferred); + + Debug.WriteLineIf(!success, + String.Format("Failed reading from usb stream. ErrorCode={0:X8}h", + Marshal.GetLastWin32Error()), + "ERROR"); + + return !success ? 0 : transferred; + } + + public bool Start() + { + return mStm.Start(); + } + + public bool Stop(int timeoutCancelMs) + { + return mStm.Stop(timeoutCancelMs); + } + + public override void Write(byte[] buffer, int offset, int count) + { + int transferred; + + bool success = mStm.Write(buffer, offset, count, out transferred); + if (!success) + { + // This is caused by a lack of 'PendingTransfer' slots. + Debug.WriteLine( + String.Format("Failed writing to usb stream. ErrorCode={0:X8}h", + Marshal.GetLastWin32Error()), + "ERROR"); + return; + } + + // If the KSTM_FLAG.NO_PARTIAL_XFERS is *not* set, StmK will transfer as many bytes as it can and return true. + Debug.WriteLineIf(transferred != count, + String.Format("Not all bytes were written. Expected:{0} Transferred:{1}", + count, + transferred), + "ERROR"); + } + + public override void Flush() + { + } + + private int StmComplete(KSTM_INFO stmInfo, KSTM_XFER_CONTEXT xferContext, int stmXferContextIndex, int errorCode) + { + Debug.WriteLineIf(errorCode != ErrorCodes.Success, + String.Format("Failed completing transfer. PipeID:{0:X2}h ErrorCode:{1:X8}h", + mPipeId, + errorCode), + "ERROR"); + return errorCode; + } + + private int StmSubmitRead(KSTM_INFO info, + KSTM_XFER_CONTEXT xferContext, + int xferContextIndex, + IntPtr nativeOverlapped) + { + int notUsedForAsync; + int bufferSize = xferContext.BufferSize; + + bool success = mUsb.ReadPipe(mPipeId, xferContext.Buffer, bufferSize, out notUsedForAsync, nativeOverlapped); + int errorCode = Marshal.GetLastWin32Error(); + + if (!success && errorCode == ErrorCodes.IoPending) return ErrorCodes.Success; + + Debug.WriteLine( + String.Format("Failed submitting transfer. PipeID:{0:X2}h ErrorCode:{1:X8}h", + mPipeId, + errorCode), + "ERROR"); + return errorCode; + } + + private int StmSubmitWrite(KSTM_INFO info, + KSTM_XFER_CONTEXT xferContext, + int xferContextIndex, + IntPtr nativeOverlapped) + { + int notUsedForAsync; + int bufferSize = xferContext.TransferLength; + + bool success = mUsb.WritePipe(mPipeId, xferContext.Buffer, bufferSize, out notUsedForAsync, nativeOverlapped); + int errorCode = Marshal.GetLastWin32Error(); + + if (!success && errorCode == ErrorCodes.IoPending) return ErrorCodes.Success; + + Debug.WriteLine( + String.Format("Failed submitting transfer. PipeID:{0:X2}h ErrorCode:{1:X8}h", + mPipeId, + errorCode), + "ERROR"); + + return errorCode; + } + + #region Not Supported + + public override long Length + { + get + { + throw new NotSupportedException(); + } + } + + public override long Position + { + get + { + throw new NotSupportedException(); + } + set + { + throw new NotSupportedException(); + } + } + + public override long Seek(long offset, SeekOrigin origin) + { + throw new NotSupportedException(); + } + + public override void SetLength(long value) + { + throw new NotSupportedException(); + } + + #endregion + } +} \ No newline at end of file diff --git a/Old Matlab Interface/bindings/examples_csharp/Xfer.UsbStream/Xfer.UsbStream.csproj b/Old Matlab Interface/bindings/examples_csharp/Xfer.UsbStream/Xfer.UsbStream.csproj new file mode 100644 index 00000000..c230e609 --- /dev/null +++ b/Old Matlab Interface/bindings/examples_csharp/Xfer.UsbStream/Xfer.UsbStream.csproj @@ -0,0 +1,106 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {6A4CD32B-560F-4967-9112-37B3FD5699CC} + Exe + Properties + Xfer.UsbStream + Xfer.UsbStream + v2.0 + 512 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + true + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + libusbK.cs + + + Common\BenchmarkTestDevice.cs + + + Common\HiPerfTimer.cs + + + Common\TestParameters.cs + + + + + + + + False + .NET Framework Client Profile + false + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + False + .NET Framework 3.5 SP1 + false + + + + + \ No newline at end of file diff --git a/Old Matlab Interface/bindings/examples_csharp/libusbK_Examples.sln b/Old Matlab Interface/bindings/examples_csharp/libusbK_Examples.sln new file mode 100644 index 00000000..7c032cf3 --- /dev/null +++ b/Old Matlab Interface/bindings/examples_csharp/libusbK_Examples.sln @@ -0,0 +1,62 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Read.Isochronous", "Read.Isochronous\Read.Isochronous.csproj", "{97DB9A34-994D-470E-A415-AC54ACD96713}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Xfer.Stm", "Xfer.Threaded.Stream\Xfer.Stm.csproj", "{AB79B52F-49BA-4424-8DD3-CC61489EFC1E}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Hot.Plug.Detect", "Hot.Plug.Detect\Hot.Plug.Detect.csproj", "{E9566BFF-3BEC-4358-9871-C1700CB73C2B}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "List.Devices", "List.Devices\List.Devices.csproj", "{4FA292D2-945A-48B5-B040-3AF7E482AB31}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Xfer.Sync", "Xfer.Sync\Xfer.Sync.csproj", "{68CE8DCE-504B-4C73-B788-F6BB7911EDAA}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Xfer.Async", "Xfer.Async\Xfer.Async.csproj", "{67C87F34-0DD6-41DB-B95B-0BFF24D8C4E8}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Xfer.UsbStream", "Xfer.UsbStream\Xfer.UsbStream.csproj", "{6A4CD32B-560F-4967-9112-37B3FD5699CC}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Hot.Plug.Detect.GUI", "Hot.Plug.Detect.GUI\Hot.Plug.Detect.GUI.csproj", "{CFB108D9-5489-48D4-AAFD-5FBCB3C00582}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {97DB9A34-994D-470E-A415-AC54ACD96713}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {97DB9A34-994D-470E-A415-AC54ACD96713}.Debug|Any CPU.Build.0 = Debug|Any CPU + {97DB9A34-994D-470E-A415-AC54ACD96713}.Release|Any CPU.ActiveCfg = Release|Any CPU + {97DB9A34-994D-470E-A415-AC54ACD96713}.Release|Any CPU.Build.0 = Release|Any CPU + {AB79B52F-49BA-4424-8DD3-CC61489EFC1E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AB79B52F-49BA-4424-8DD3-CC61489EFC1E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AB79B52F-49BA-4424-8DD3-CC61489EFC1E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AB79B52F-49BA-4424-8DD3-CC61489EFC1E}.Release|Any CPU.Build.0 = Release|Any CPU + {E9566BFF-3BEC-4358-9871-C1700CB73C2B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E9566BFF-3BEC-4358-9871-C1700CB73C2B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E9566BFF-3BEC-4358-9871-C1700CB73C2B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E9566BFF-3BEC-4358-9871-C1700CB73C2B}.Release|Any CPU.Build.0 = Release|Any CPU + {4FA292D2-945A-48B5-B040-3AF7E482AB31}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4FA292D2-945A-48B5-B040-3AF7E482AB31}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4FA292D2-945A-48B5-B040-3AF7E482AB31}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4FA292D2-945A-48B5-B040-3AF7E482AB31}.Release|Any CPU.Build.0 = Release|Any CPU + {68CE8DCE-504B-4C73-B788-F6BB7911EDAA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {68CE8DCE-504B-4C73-B788-F6BB7911EDAA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {68CE8DCE-504B-4C73-B788-F6BB7911EDAA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {68CE8DCE-504B-4C73-B788-F6BB7911EDAA}.Release|Any CPU.Build.0 = Release|Any CPU + {67C87F34-0DD6-41DB-B95B-0BFF24D8C4E8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {67C87F34-0DD6-41DB-B95B-0BFF24D8C4E8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {67C87F34-0DD6-41DB-B95B-0BFF24D8C4E8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {67C87F34-0DD6-41DB-B95B-0BFF24D8C4E8}.Release|Any CPU.Build.0 = Release|Any CPU + {6A4CD32B-560F-4967-9112-37B3FD5699CC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6A4CD32B-560F-4967-9112-37B3FD5699CC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6A4CD32B-560F-4967-9112-37B3FD5699CC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6A4CD32B-560F-4967-9112-37B3FD5699CC}.Release|Any CPU.Build.0 = Release|Any CPU + {CFB108D9-5489-48D4-AAFD-5FBCB3C00582}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CFB108D9-5489-48D4-AAFD-5FBCB3C00582}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CFB108D9-5489-48D4-AAFD-5FBCB3C00582}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CFB108D9-5489-48D4-AAFD-5FBCB3C00582}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Old Matlab Interface/bindings/examples_delphi/enumerate.dpr b/Old Matlab Interface/bindings/examples_delphi/enumerate.dpr new file mode 100644 index 00000000..25fbf807 --- /dev/null +++ b/Old Matlab Interface/bindings/examples_delphi/enumerate.dpr @@ -0,0 +1,99 @@ +program enumerate; + +{$APPTYPE CONSOLE} +uses + SysUtils, + libusbK in '..\libusbK.pas'; + +procedure EnumerateAttachedDevices; +var + deviceCount : Cardinal; + lDeviceList : KLST_HANDLE; + lDeviceInfo : KLST_DEVINFO_HANDLE; + i : Integer; +begin + deviceCount := 0; + lDeviceList := Nil; + lDeviceInfo := Nil; + // Get the device list + if (not LstK_Init(lDeviceList, 0)) then + begin + WriteLn('Error in LstK_Init!'); + Exit; + end; + try // make sure list is freed under all circumstances + LstK_Count(lDeviceList, deviceCount); + if (deviceCount = 0) then + begin + WriteLn('No devices found!'); + Exit; // lDeviceList is freed in finally + end; + i := -1; + while LstK_MoveNext(lDeviceList, lDeviceInfo) do + begin + Inc(i); + if Assigned(lDeviceInfo) then + begin + WriteLn('Device ',i,' ---------------------------------'); + WriteLn('VID: ',lDeviceInfo.Common.Vid); + WriteLn('PID: ',lDeviceInfo.Common.Pid); + WriteLn('MI: ',lDeviceInfo.Common.MI); + WriteLn('InstanceID: ',lDeviceInfo.Common.InstanceID); + WriteLn('DriverID: ',lDeviceInfo.DriverID); + WriteLn('DeviceInterfaceGUID: ',lDeviceInfo.DeviceInterfaceGUID); + WriteLn('InstanceID: ',lDeviceInfo.InstanceID); + WriteLn('ClassGUID: ',lDeviceInfo.ClassGUID); + WriteLn('Mfg: ',lDeviceInfo.Mfg); + WriteLn('DeviceDesc: ',lDeviceInfo.DeviceDesc); + WriteLn('Service: ',lDeviceInfo.Service); + WriteLn('SymbolicLink: ',lDeviceInfo.SymbolicLink); + WriteLn('DevicePath: ',lDeviceInfo.DevicePath); + WriteLn('LUsb0FilterIndex: ',lDeviceInfo.LUsb0FilterIndex); + if lDeviceInfo.Connected then + WriteLn('Connected: True') + else + WriteLn('Connected: False'); + WriteLn('SyncFlags: '+Format('%x',[lDeviceInfo.SyncFlags])); + end; + end; + finally + if Assigned(lDeviceList) then + LstK_Free(lDeviceList); + end; +end; + + +begin + WriteLn('libusbK Device enumeration demo'); + if not libusbK.DllAvailable then + begin + WriteLn('Error: '+libusbK.LIBUSBK_DLL+' not available!'); + Halt(1); + end; + EnumerateAttachedDevices; + WriteLn('libusbK Device enumeration done'); + +(* Example output +libusbK Device enumeration demo +Device 0 --------------------------------- +VID: 1204 +PID: 34323 +MI: -1 +InstanceID: 6&564E695&0&1 +DriverID: 0 +DeviceInterfaceGUID: {53373f62-b5e4-d526-b292-f86533b3e7df} +InstanceID: USB\Vid_04b4&Pid_8613\6&564e695&0&1 +ClassGUID: {ECFB0CFD-74C4-4F52-BBF7-343461CD72AC} +Mfg: Cypress Semiconductor Corp. +DeviceDesc: Cypress Generic USB Device (LibUSB) +Service: libusbK +SymbolicLink: \\?\USB#Vid_04b4&Pid_8613#6&564e695&0&1#{53373f62-b5e4-d526-b292-f86533b3e7df} +DevicePath: \\?\USB#Vid_04b4&Pid_8613#6&564e695&0&1#{53373f62-b5e4-d526-b292-f86533b3e7df} +LUsb0FilterIndex: -1 +Connected: True +SyncFlags: 0 +libusbK Device enumeration done +*) + + +end. diff --git a/Old Matlab Interface/bindings/examples_delphi/opendevice.dpr b/Old Matlab Interface/bindings/examples_delphi/opendevice.dpr new file mode 100644 index 00000000..ca0f7a9f --- /dev/null +++ b/Old Matlab Interface/bindings/examples_delphi/opendevice.dpr @@ -0,0 +1,136 @@ +program opendevice; + +{$APPTYPE CONSOLE} + +uses + SysUtils, Classes, + libusbK in '..\libusbK.pas', + UExampleHelpers; +var + VID, PID : Integer; +procedure EvaluateCommandLine; +var + i : Integer; + s, s0,s1 : String; + n : Integer; +begin + for i := 1 to ParamCount do + begin + s := Uppercase(ParamStr(i)); //copy the whole current param string and convert to upper cases + s0 := Copy(s,1,4); // copy the first 4 signs + if (s0 = 'VID=') or + (s0 = 'PID=') then + begin // we got a vid or pid parm + s1 := Copy(s,5,MaxInt); // copy everything behind the '=' + if Copy(s1,1,2) = '0X' then // check the c-style hex notation + s1 := '$'+ Copy(s1,3,MaxInt); // replace by delphi hex-notation + n := StrToIntDef(s1,-1); // convert, place -1 on any convert error + if (s0 = 'VID=') then + VID := n + else if (s0 = 'PID=') then + PID := n; + end; + end; +end; +const + UsbPipeTypeString : array[USBD_PIPE_TYPE] of String = ( + 'Control', + 'Isochronous', + 'Bulk,', + 'Interrupt' + ); + +var + devlist : TStringList; + i,j,k : Integer; + devhandle : KUSB_HANDLE; + pipeinfo : WINUSB_PIPE_INFORMATION; +begin + WriteLn('OpenDevice test for LibusbK'); + WriteLn('Returns Pipe info for all devices, or limited to a given VID/PID pair'); + WriteLn('usage:'); + WriteLn('opendevice [VID=nnnn] [PID=nnnn]'); + WriteLn('VID and PID may use decimal or hexadecimal notation'); + VID := -1; + PID := -1; + EvaluateCommandLine; + if VID < 0 then + WriteLn('VID is not used!') + else + WriteLn('VID used '+Format('%d (0x%x',[VID,VID])); + if VID < 0 then + WriteLn('PID is not used!') + else + WriteLn('PID used '+Format('%d (0x%x',[PID,PID])); + devlist := TStringList.Create; + try + ListLibusbKDevices(devlist,VID,PID); + if devlist.Count <= 0 then + begin + WriteLn('Error: No device found!'); + Exit; + end; + for i := 0 to devlist.Count-1 do + begin + if UsbK_InitFromDevicePath(devlist[i],devhandle) then + begin + try + WriteLn('Opened device "'+devlist[i]+'"'); + j := 0; + while UsbK_SetCurrentAlternateSetting(devhandle,j) do + begin + WriteLn('Using AlternateSetting ',j); + k := 0; + while UsbK_QueryPipe(devhandle,j,k,pipeinfo) do + begin + WriteLn(Format(' PipeId=0x%2.2x PipeType=0x%2.2x ("%s") Interval=%u MaximumPacketSize=%u', + [pipeInfo.PipeId, Byte(pipeInfo.PipeType),UsbPipeTypeString[pipeInfo.PipeType], pipeInfo.Interval, pipeInfo.MaximumPacketSize])); + Inc(k); + end; + Inc(j); + end; + finally + UsbK_Free(devhandle); + end; + end + else + WriteLn('Error: can not open device "'+devlist[i]+'"'); + end; + finally + devlist.Free; + end; +(* Example output +OpenDevice test for LibusbK +Returns Pipe info for all devices, or limited to a given VID/PID pair +usage: +opendevice [VID=nnnn] [PID=nnnn] +VID and PID may use decimal or hexadecimal notation +VID is not used! +PID is not used! +Opened device "\\?\USB#Vid_04b4&Pid_8613#6&1b8c4f52&0&1#{53373f62-b5e4-d526-b292 +-f86533b3e7df}" +Using AlternateSetting 0 +Using AlternateSetting 1 + PipeId=0x01 PipeType=0x02 ("Bulk,") Interval=0 MaximumPacketSize=512 + PipeId=0x81 PipeType=0x02 ("Bulk,") Interval=0 MaximumPacketSize=512 + PipeId=0x02 PipeType=0x02 ("Bulk,") Interval=0 MaximumPacketSize=512 + PipeId=0x04 PipeType=0x02 ("Bulk,") Interval=0 MaximumPacketSize=512 + PipeId=0x86 PipeType=0x02 ("Bulk,") Interval=0 MaximumPacketSize=512 + PipeId=0x88 PipeType=0x02 ("Bulk,") Interval=0 MaximumPacketSize=512 +Using AlternateSetting 2 + PipeId=0x01 PipeType=0x03 ("Interrupt") Interval=1 MaximumPacketSize=64 + PipeId=0x81 PipeType=0x03 ("Interrupt") Interval=1 MaximumPacketSize=64 + PipeId=0x02 PipeType=0x03 ("Interrupt") Interval=1 MaximumPacketSize=512 + PipeId=0x04 PipeType=0x02 ("Bulk,") Interval=0 MaximumPacketSize=512 + PipeId=0x86 PipeType=0x03 ("Interrupt") Interval=1 MaximumPacketSize=512 + PipeId=0x88 PipeType=0x02 ("Bulk,") Interval=0 MaximumPacketSize=512 +Using AlternateSetting 3 + PipeId=0x01 PipeType=0x03 ("Interrupt") Interval=1 MaximumPacketSize=64 + PipeId=0x81 PipeType=0x03 ("Interrupt") Interval=1 MaximumPacketSize=64 + PipeId=0x02 PipeType=0x01 ("Isochronous") Interval=1 MaximumPacketSize=512 + PipeId=0x04 PipeType=0x02 ("Bulk,") Interval=0 MaximumPacketSize=512 + PipeId=0x86 PipeType=0x01 ("Isochronous") Interval=1 MaximumPacketSize=512 + PipeId=0x88 PipeType=0x02 ("Bulk,") Interval=0 MaximumPacketSize=512} +*) + +end. diff --git a/Old Matlab Interface/bindings/libusbK.boo b/Old Matlab Interface/bindings/libusbK.boo new file mode 100644 index 00000000..64876bbd --- /dev/null +++ b/Old Matlab Interface/bindings/libusbK.boo @@ -0,0 +1,3290 @@ +ERROR: Z:\SVNMAIN\GoogleCode\usb-travis\trunk\libusbK\bindings\libusbK.cs(1281,9): BCE0000: enum member initializer must be integer value + +#region Copyright (c) Travis Robinson + +// Copyright (c) 2012 Travis Robinson +// All rights reserved. +// +// C# libusbK Bindings +// Auto-generated on: 04.28.2011 +// +// 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. +// +// 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 TRAVIS LEE ROBINSON +// 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. + +#endregion + + +// ReSharper disable InconsistentNaming +// ReSharper disable CheckNamespace +// ReSharper disable UnassignedReadonlyField + +namespace libusbK + +import System +import System.Diagnostics +import System.Runtime.InteropServices + +public static class AllKOptions: + + #region Public Members + + public static LIBUSBK_FULLPATH_TO_ALTERNATE_DLL as string + + #endregion + + +public static class AllKConstants: + + #region Public Members + + public static final KLST_STRING_MAX_LEN = 256 + + + public static final LIBUSBK_DLL = 'libusbK.dll' + + + public static final USB_CONFIG_POWERED_MASK as byte = 192 + + + public static final USB_ENDPOINT_ADDRESS_MASK as byte = 15 + + + public static final USB_ENDPOINT_DIRECTION_MASK as byte = 128 + + #endregion + + +public enum PipePolicyType: + + SHORT_PACKET_TERMINATE = 1 + + AUTO_CLEAR_STALL = 2 + + PIPE_TRANSFER_TIMEOUT = 3 + + IGNORE_SHORT_PACKETS = 4 + + ALLOW_PARTIAL_READS = 5 + + AUTO_FLUSH = 6 + + RAW_IO = 7 + + MAXIMUM_TRANSFER_SIZE = 8 + + RESET_PIPE_ON_RESUME = 9 + + + ISO_START_LATENCY = 32 + + ISO_ALWAYS_START_ASAP = 33 + + ISO_NUM_FIXED_PACKETS = 34 + + + SIMUL_PARALLEL_REQUESTS = 48 + + +public enum PowerPolicyType: + + AUTO_SUSPEND = 129 + + SUSPEND_DELAY = 131 + + +public enum DeviceInformationType: + + DEVICE_SPEED = 1 + + +public enum EndpointType: + + CONTROL = 0 + + + ISOCHRONOUS = 1 + + + BULK = 2 + + + INTERRUPT = 3 + + + MASK = 3 + + +public static class ErrorCodes: + + #region Public Members + + public static final AccessDenied = 5 + + + public static final Busy = 170 + + + public static final Cancelled = 1223 + + + public static final Empty = 4306 + + + public static final InvalidHandle = 6 + + + public static final InvalidParameter = 87 + + + public static final IoIncomplete = 996 + + + public static final IoPending = 997 + + + public static final MoreData = 234 + + + public static final NoMoreItems = 259 + + + public static final NotEnoughMemory = 8 + + + public static final NotFound = 1168 + + + public static final NotSupported = 50 + + + public static final OperationAborted = 995 + + + public static final ResourceNotAvailable = 5006 + + + public static final ResourceNotFound = 5007 + + + public static final SemTimeout = 121 + + + public static final Success = 0 + + + public static final ThreadNotInProcess = 566 + + + public static final ThreadWasSuspended = 699 + + + public static final TooManyModules = 214 + + #endregion + + +public interface IKLIB_HANDLE: + + #region Public Members + + def GetContext() as IntPtr + + HandleType as KLIB_HANDLE_TYPE: + get + + Pointer as IntPtr: + get + + def SetCleanupCallback(CleanupCallback as KLIB_HANDLE_CLEANUP_CB) as bool + + def SetContext(UserContext as IntPtr) as bool + + #endregion + + +#region Opaque library handles + +public struct KLST_HANDLE(IKLIB_HANDLE): + + #region IKLIB_HANDLE Members + + public Pointer as IntPtr: + get: + return mHandlePtr + + + public HandleType as KLIB_HANDLE_TYPE: + get: + return KLIB_HANDLE_TYPE.LSTK + + + public def GetContext() as IntPtr: + return AllKFunctions.LibK_GetContext(mHandlePtr, HandleType) + + + public def SetContext(UserContext as IntPtr) as bool: + return AllKFunctions.LibK_SetContext(mHandlePtr, HandleType, UserContext) + + + public def SetCleanupCallback(CleanupCallback as KLIB_HANDLE_CLEANUP_CB) as bool: + return AllKFunctions.LibK_SetCleanupCallback(mHandlePtr, HandleType, CleanupCallback) + + + #endregion + + #region Public Members + + public def constructor(Handle as IntPtr): + mHandlePtr = Handle + + + #endregion + + #region Private Members + + private final mHandlePtr as IntPtr + + #endregion + + +public struct KHOT_HANDLE(IKLIB_HANDLE): + + #region IKLIB_HANDLE Members + + public Pointer as IntPtr: + get: + return mHandlePtr + + + public HandleType as KLIB_HANDLE_TYPE: + get: + return KLIB_HANDLE_TYPE.HOTK + + + public def GetContext() as IntPtr: + return AllKFunctions.LibK_GetContext(mHandlePtr, HandleType) + + + public def SetContext(UserContext as IntPtr) as bool: + return AllKFunctions.LibK_SetContext(mHandlePtr, HandleType, UserContext) + + + public def SetCleanupCallback(CleanupCallback as KLIB_HANDLE_CLEANUP_CB) as bool: + return AllKFunctions.LibK_SetCleanupCallback(mHandlePtr, HandleType, CleanupCallback) + + + #endregion + + #region Public Members + + public def constructor(Handle as IntPtr): + mHandlePtr = Handle + + + #endregion + + #region Private Members + + private final mHandlePtr as IntPtr + + #endregion + + +public struct KUSB_HANDLE(IKLIB_HANDLE): + + #region IKLIB_HANDLE Members + + public Pointer as IntPtr: + get: + return mHandlePtr + + + public HandleType as KLIB_HANDLE_TYPE: + get: + return KLIB_HANDLE_TYPE.USBK + + + public def GetContext() as IntPtr: + return AllKFunctions.LibK_GetContext(mHandlePtr, HandleType) + + + public def SetContext(UserContext as IntPtr) as bool: + return AllKFunctions.LibK_SetContext(mHandlePtr, HandleType, UserContext) + + + public def SetCleanupCallback(CleanupCallback as KLIB_HANDLE_CLEANUP_CB) as bool: + return AllKFunctions.LibK_SetCleanupCallback(mHandlePtr, HandleType, CleanupCallback) + + + #endregion + + #region USB Shared Device Context + + public def GetSharedContext() as IntPtr: + return AllKFunctions.LibK_GetContext(mHandlePtr, KLIB_HANDLE_TYPE.USBSHAREDK) + + + public def SetSharedCleanupCallback(CleanupCallback as KLIB_HANDLE_CLEANUP_CB) as bool: + return AllKFunctions.LibK_SetCleanupCallback(mHandlePtr, KLIB_HANDLE_TYPE.USBSHAREDK, CleanupCallback) + + + public def SetSharedContext(UserContext as IntPtr) as bool: + return AllKFunctions.LibK_SetContext(mHandlePtr, KLIB_HANDLE_TYPE.USBSHAREDK, UserContext) + + + #endregion + + #region Public Members + + public def constructor(Handle as IntPtr): + mHandlePtr = Handle + + + #endregion + + #region Private Members + + private final mHandlePtr as IntPtr + + #endregion + + +public struct KOVL_POOL_HANDLE(IKLIB_HANDLE): + + #region IKLIB_HANDLE Members + + public Pointer as IntPtr: + get: + return mHandlePtr + + + public HandleType as KLIB_HANDLE_TYPE: + get: + return KLIB_HANDLE_TYPE.OVLPOOLK + + + public def GetContext() as IntPtr: + return AllKFunctions.LibK_GetContext(mHandlePtr, HandleType) + + + public def SetContext(UserContext as IntPtr) as bool: + return AllKFunctions.LibK_SetContext(mHandlePtr, HandleType, UserContext) + + + public def SetCleanupCallback(CleanupCallback as KLIB_HANDLE_CLEANUP_CB) as bool: + return AllKFunctions.LibK_SetCleanupCallback(mHandlePtr, HandleType, CleanupCallback) + + + #endregion + + #region Public Members + + public def constructor(Handle as IntPtr): + mHandlePtr = Handle + + + #endregion + + #region Private Members + + private final mHandlePtr as IntPtr + + #endregion + + +public struct KOVL_HANDLE(IKLIB_HANDLE): + + #region IKLIB_HANDLE Members + + public Pointer as IntPtr: + get: + return mHandlePtr + + + public HandleType as KLIB_HANDLE_TYPE: + get: + return KLIB_HANDLE_TYPE.OVLK + + + public def GetContext() as IntPtr: + return AllKFunctions.LibK_GetContext(mHandlePtr, HandleType) + + + public def SetContext(UserContext as IntPtr) as bool: + return AllKFunctions.LibK_SetContext(mHandlePtr, HandleType, UserContext) + + + public def SetCleanupCallback(CleanupCallback as KLIB_HANDLE_CLEANUP_CB) as bool: + return AllKFunctions.LibK_SetCleanupCallback(mHandlePtr, HandleType, CleanupCallback) + + + #endregion + + #region Public Members + + public def constructor(Handle as IntPtr): + mHandlePtr = Handle + + + #endregion + + #region Private Members + + private final mHandlePtr as IntPtr + + #endregion + + +public struct KSTM_HANDLE(IKLIB_HANDLE): + + #region IKLIB_HANDLE Members + + public Pointer as IntPtr: + get: + return mHandlePtr + + + public HandleType as KLIB_HANDLE_TYPE: + get: + return KLIB_HANDLE_TYPE.STMK + + + public def GetContext() as IntPtr: + return AllKFunctions.LibK_GetContext(mHandlePtr, HandleType) + + + public def SetContext(UserContext as IntPtr) as bool: + return AllKFunctions.LibK_SetContext(mHandlePtr, HandleType, UserContext) + + + public def SetCleanupCallback(CleanupCallback as KLIB_HANDLE_CLEANUP_CB) as bool: + return AllKFunctions.LibK_SetCleanupCallback(mHandlePtr, HandleType, CleanupCallback) + + + #endregion + + #region Public Members + + public def constructor(Handle as IntPtr): + mHandlePtr = Handle + + + #endregion + + #region Private Members + + private final mHandlePtr as IntPtr + + #endregion + + +#endregion + +#region Internal Function Imports + +internal static class AllKFunctions: + + #region Delegates + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable HotK_FreeAllDelegate() as void + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable HotK_FreeDelegate([In] Handle as KHOT_HANDLE) as bool + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable HotK_InitDelegate([Out] ref Handle as KHOT_HANDLE, [In] [Out] ref InitParams as KHOT_PARAMS) as bool + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable IsoK_EnumPacketsDelegate([In] IsoContext as KISO_CONTEXT, EnumPackets as KISO_ENUM_PACKETS_CB, StartPacketIndex as int, UserState as IntPtr) as bool + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable IsoK_FreeDelegate([In] IsoContext as KISO_CONTEXT) as bool + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable IsoK_GetPacketDelegate([In] IsoContext as KISO_CONTEXT, PacketIndex as int, [Out] ref IsoPacket as KISO_PACKET) as bool + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable IsoK_InitDelegate([Out] ref IsoContext as KISO_CONTEXT, NumberOfPackets as int, StartFrame as int) as bool + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable IsoK_ReUseDelegate([In] IsoContext as KISO_CONTEXT) as bool + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable IsoK_SetPacketDelegate([In] IsoContext as KISO_CONTEXT, PacketIndex as int, [In] ref IsoPacket as KISO_PACKET) as bool + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable IsoK_SetPacketsDelegate([In] IsoContext as KISO_CONTEXT, PacketSize as int) as bool + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable LibK_Context_FreeDelegate() as void + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable LibK_Context_InitDelegate(Heap as IntPtr, Reserved as IntPtr) as bool + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable LibK_CopyDriverAPIDelegate([Out] ref DriverAPI as KUSB_DRIVER_API, [In] UsbHandle as KUSB_HANDLE) as bool + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable LibK_GetContextDelegate([In] Handle as IntPtr, HandleType as KLIB_HANDLE_TYPE) as IntPtr + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable LibK_GetDefaultContextDelegate(HandleType as KLIB_HANDLE_TYPE) as IntPtr + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable LibK_GetProcAddressDelegate(ProcAddress as IntPtr, DriverID as int, FunctionID as int) as bool + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable LibK_GetVersionDelegate([Out] ref Version as KLIB_VERSION) as void + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable LibK_LoadDriverAPIDelegate([Out] ref DriverAPI as KUSB_DRIVER_API, DriverID as int) as bool + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable LibK_SetCleanupCallbackDelegate([In] Handle as IntPtr, HandleType as KLIB_HANDLE_TYPE, CleanupCB as KLIB_HANDLE_CLEANUP_CB) as bool + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable LibK_SetContextDelegate([In] Handle as IntPtr, HandleType as KLIB_HANDLE_TYPE, ContextValue as IntPtr) as bool + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable LibK_SetDefaultContextDelegate(HandleType as KLIB_HANDLE_TYPE, ContextValue as IntPtr) as bool + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable LstK_CountDelegate([In] DeviceList as KLST_HANDLE, ref Count as int) as bool + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable LstK_CurrentDelegate([In] DeviceList as KLST_HANDLE, [Out] ref DeviceInfo as KLST_DEVINFO_HANDLE) as bool + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable LstK_EnumerateDelegate([In] DeviceList as KLST_HANDLE, EnumDevListCB as KLST_ENUM_DEVINFO_CB, Context as IntPtr) as bool + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable LstK_FindByVidPidDelegate([In] DeviceList as KLST_HANDLE, Vid as int, Pid as int, [Out] ref DeviceInfo as KLST_DEVINFO_HANDLE) as bool + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable LstK_FreeDelegate([In] DeviceList as KLST_HANDLE) as bool + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable LstK_InitDelegate([Out] ref DeviceList as KLST_HANDLE, Flags as KLST_FLAG) as bool + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable LstK_InitExDelegate([Out] ref DeviceList as KLST_HANDLE, Flags as KLST_FLAG, [In] ref PatternMatch as KLST_PATTERN_MATCH) as bool + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable LstK_MoveNextDelegate([In] DeviceList as KLST_HANDLE, [Out] ref DeviceInfo as KLST_DEVINFO_HANDLE) as bool + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable LstK_MoveResetDelegate([In] DeviceList as KLST_HANDLE) as void + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable OvlK_AcquireDelegate([Out] ref OverlappedK as KOVL_HANDLE, [In] PoolHandle as KOVL_POOL_HANDLE) as bool + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable OvlK_FreeDelegate([In] PoolHandle as KOVL_POOL_HANDLE) as bool + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable OvlK_GetEventHandleDelegate([In] OverlappedK as KOVL_HANDLE) as IntPtr + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable OvlK_InitDelegate([Out] ref PoolHandle as KOVL_POOL_HANDLE, [In] UsbHandle as KUSB_HANDLE, MaxOverlappedCount as int, Flags as KOVL_POOL_FLAG) as bool + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable OvlK_IsCompleteDelegate([In] OverlappedK as KOVL_HANDLE) as bool + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable OvlK_ReUseDelegate([In] OverlappedK as KOVL_HANDLE) as bool + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable OvlK_ReleaseDelegate([In] OverlappedK as KOVL_HANDLE) as bool + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable OvlK_WaitAndReleaseDelegate([In] OverlappedK as KOVL_HANDLE, TimeoutMS as int, ref TransferredLength as int) as bool + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable OvlK_WaitDelegate([In] OverlappedK as KOVL_HANDLE, TimeoutMS as int, WaitFlags as KOVL_WAIT_FLAG, ref TransferredLength as int) as bool + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable OvlK_WaitOldestDelegate([In] PoolHandle as KOVL_POOL_HANDLE, [Out] ref OverlappedK as KOVL_HANDLE, TimeoutMS as int, WaitFlags as KOVL_WAIT_FLAG, ref TransferredLength as int) as bool + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable OvlK_WaitOrCancelDelegate([In] OverlappedK as KOVL_HANDLE, TimeoutMS as int, ref TransferredLength as int) as bool + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable StmK_FreeDelegate([In] StreamHandle as KSTM_HANDLE) as bool + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable StmK_InitDelegate([Out] ref StreamHandle as KSTM_HANDLE, [In] UsbHandle as KUSB_HANDLE, PipeID as byte, MaxTransferSize as int, MaxPendingTransfers as int, MaxPendingIO as int, [In] ref Callbacks as KSTM_CALLBACK, Flags as KSTM_FLAG) as bool + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable StmK_ReadDelegate([In] StreamHandle as KSTM_HANDLE, Buffer as IntPtr, Offset as int, Length as int, ref TransferredLength as int) as bool + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable StmK_StartDelegate([In] StreamHandle as KSTM_HANDLE) as bool + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable StmK_StopDelegate([In] StreamHandle as KSTM_HANDLE, TimeoutCancelMS as int) as bool + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable StmK_WriteDelegate([In] StreamHandle as KSTM_HANDLE, Buffer as IntPtr, Offset as int, Length as int, ref TransferredLength as int) as bool + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] + public static callable UsbK_FreeDelegate([In] InterfaceHandle as KUSB_HANDLE) as bool + + #endregion + + private static def constructor(): + if String.IsNullOrEmpty(AllKOptions.LIBUSBK_FULLPATH_TO_ALTERNATE_DLL): + mModuleLibusbK = LoadLibraryEx(AllKConstants.LIBUSBK_DLL, IntPtr.Zero, LoadLibraryFlags.NONE) + else: + mModuleLibusbK = LoadLibraryEx(AllKOptions.LIBUSBK_FULLPATH_TO_ALTERNATE_DLL, IntPtr.Zero, LoadLibraryFlags.LOAD_WITH_ALTERED_SEARCH_PATH) + + if mModuleLibusbK == IntPtr.Zero: + raise DllNotFoundException('libusbK.dll not found. Please install drivers/applications and retry.') + + LoadDynamicFunctions() + + + #region Nested Enumerations + + [Flags] + private enum LoadLibraryFlags: + + NONE = 0 + + DONT_RESOLVE_DLL_REFERENCES = 1 + + LOAD_IGNORE_CODE_AUTHZ_LEVEL = 16 + + LOAD_LIBRARY_AS_DATAFILE = 2 + + LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE = 64 + + LOAD_LIBRARY_AS_IMAGE_RESOURCE = 32 + + LOAD_WITH_ALTERED_SEARCH_PATH = 8 + + + #endregion + + #region Public Members + + public static HotK_Free as HotK_FreeDelegate + + public static HotK_FreeAll as HotK_FreeAllDelegate + + public static HotK_Init as HotK_InitDelegate + + public static IsoK_EnumPackets as IsoK_EnumPacketsDelegate + + public static IsoK_Free as IsoK_FreeDelegate + + public static IsoK_GetPacket as IsoK_GetPacketDelegate + + public static IsoK_Init as IsoK_InitDelegate + + public static IsoK_ReUse as IsoK_ReUseDelegate + + public static IsoK_SetPacket as IsoK_SetPacketDelegate + + public static IsoK_SetPackets as IsoK_SetPacketsDelegate + + public static LibK_Context_Free as LibK_Context_FreeDelegate + + public static LibK_Context_Init as LibK_Context_InitDelegate + + + public static LibK_CopyDriverAPI as LibK_CopyDriverAPIDelegate + + public static LibK_GetContext as LibK_GetContextDelegate + + public static LibK_GetDefaultContext as LibK_GetDefaultContextDelegate + + public static LibK_GetProcAddress as LibK_GetProcAddressDelegate + + public static LibK_GetVersion as LibK_GetVersionDelegate + + public static LibK_LoadDriverAPI as LibK_LoadDriverAPIDelegate + + public static LibK_SetCleanupCallback as LibK_SetCleanupCallbackDelegate + + public static LibK_SetContext as LibK_SetContextDelegate + + public static LibK_SetDefaultContext as LibK_SetDefaultContextDelegate + + public static LstK_Count as LstK_CountDelegate + + public static LstK_Current as LstK_CurrentDelegate + + public static LstK_Enumerate as LstK_EnumerateDelegate + + public static LstK_FindByVidPid as LstK_FindByVidPidDelegate + + public static LstK_Free as LstK_FreeDelegate + + public static LstK_Init as LstK_InitDelegate + + public static LstK_InitEx as LstK_InitExDelegate + + public static LstK_MoveNext as LstK_MoveNextDelegate + + public static LstK_MoveReset as LstK_MoveResetDelegate + + public static OvlK_Acquire as OvlK_AcquireDelegate + + public static OvlK_Free as OvlK_FreeDelegate + + public static OvlK_GetEventHandle as OvlK_GetEventHandleDelegate + + public static OvlK_Init as OvlK_InitDelegate + + public static OvlK_IsComplete as OvlK_IsCompleteDelegate + + public static OvlK_ReUse as OvlK_ReUseDelegate + + public static OvlK_Release as OvlK_ReleaseDelegate + + public static OvlK_Wait as OvlK_WaitDelegate + + public static OvlK_WaitAndRelease as OvlK_WaitAndReleaseDelegate + + public static OvlK_WaitOldest as OvlK_WaitOldestDelegate + + public static OvlK_WaitOrCancel as OvlK_WaitOrCancelDelegate + + public static StmK_Free as StmK_FreeDelegate + + public static StmK_Init as StmK_InitDelegate + + public static StmK_Read as StmK_ReadDelegate + + public static StmK_Start as StmK_StartDelegate + + public static StmK_Stop as StmK_StopDelegate + + public static StmK_Write as StmK_WriteDelegate + + public static UsbK_Free as UsbK_FreeDelegate + + + #endregion + + #region Private Members + + [DllImport('kernel32.dll', CharSet: CharSet.Ansi, ExactSpelling: true, SetLastError: true)] + private static def GetProcAddress(hModule as IntPtr, procName as string) as IntPtr: + pass + + + private static def LoadDynamicFunctions(): + LibK_GetVersion = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'LibK_GetVersion'), typeof(LibK_GetVersionDelegate)) cast LibK_GetVersionDelegate) + LibK_GetContext = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'LibK_GetContext'), typeof(LibK_GetContextDelegate)) cast LibK_GetContextDelegate) + LibK_SetContext = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'LibK_SetContext'), typeof(LibK_SetContextDelegate)) cast LibK_SetContextDelegate) + LibK_SetCleanupCallback = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'LibK_SetCleanupCallback'), typeof(LibK_SetCleanupCallbackDelegate)) cast LibK_SetCleanupCallbackDelegate) + LibK_LoadDriverAPI = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'LibK_LoadDriverAPI'), typeof(LibK_LoadDriverAPIDelegate)) cast LibK_LoadDriverAPIDelegate) + LibK_CopyDriverAPI = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'LibK_CopyDriverAPI'), typeof(LibK_CopyDriverAPIDelegate)) cast LibK_CopyDriverAPIDelegate) + LibK_GetProcAddress = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'LibK_GetProcAddress'), typeof(LibK_GetProcAddressDelegate)) cast LibK_GetProcAddressDelegate) + LibK_SetDefaultContext = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'LibK_SetDefaultContext'), typeof(LibK_SetDefaultContextDelegate)) cast LibK_SetDefaultContextDelegate) + LibK_GetDefaultContext = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'LibK_GetDefaultContext'), typeof(LibK_GetDefaultContextDelegate)) cast LibK_GetDefaultContextDelegate) + LibK_Context_Init = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'LibK_Context_Init'), typeof(LibK_Context_InitDelegate)) cast LibK_Context_InitDelegate) + LibK_Context_Free = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'LibK_Context_Free'), typeof(LibK_Context_FreeDelegate)) cast LibK_Context_FreeDelegate) + UsbK_Free = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'UsbK_Free'), typeof(UsbK_FreeDelegate)) cast UsbK_FreeDelegate) + LstK_Init = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'LstK_Init'), typeof(LstK_InitDelegate)) cast LstK_InitDelegate) + LstK_InitEx = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'LstK_InitEx'), typeof(LstK_InitExDelegate)) cast LstK_InitExDelegate) + LstK_Free = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'LstK_Free'), typeof(LstK_FreeDelegate)) cast LstK_FreeDelegate) + LstK_Enumerate = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'LstK_Enumerate'), typeof(LstK_EnumerateDelegate)) cast LstK_EnumerateDelegate) + LstK_Current = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'LstK_Current'), typeof(LstK_CurrentDelegate)) cast LstK_CurrentDelegate) + LstK_MoveNext = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'LstK_MoveNext'), typeof(LstK_MoveNextDelegate)) cast LstK_MoveNextDelegate) + LstK_MoveReset = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'LstK_MoveReset'), typeof(LstK_MoveResetDelegate)) cast LstK_MoveResetDelegate) + LstK_FindByVidPid = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'LstK_FindByVidPid'), typeof(LstK_FindByVidPidDelegate)) cast LstK_FindByVidPidDelegate) + LstK_Count = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'LstK_Count'), typeof(LstK_CountDelegate)) cast LstK_CountDelegate) + HotK_Init = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'HotK_Init'), typeof(HotK_InitDelegate)) cast HotK_InitDelegate) + HotK_Free = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'HotK_Free'), typeof(HotK_FreeDelegate)) cast HotK_FreeDelegate) + HotK_FreeAll = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'HotK_FreeAll'), typeof(HotK_FreeAllDelegate)) cast HotK_FreeAllDelegate) + OvlK_Acquire = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'OvlK_Acquire'), typeof(OvlK_AcquireDelegate)) cast OvlK_AcquireDelegate) + OvlK_Release = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'OvlK_Release'), typeof(OvlK_ReleaseDelegate)) cast OvlK_ReleaseDelegate) + OvlK_Init = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'OvlK_Init'), typeof(OvlK_InitDelegate)) cast OvlK_InitDelegate) + OvlK_Free = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'OvlK_Free'), typeof(OvlK_FreeDelegate)) cast OvlK_FreeDelegate) + OvlK_GetEventHandle = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'OvlK_GetEventHandle'), typeof(OvlK_GetEventHandleDelegate)) cast OvlK_GetEventHandleDelegate) + OvlK_Wait = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'OvlK_Wait'), typeof(OvlK_WaitDelegate)) cast OvlK_WaitDelegate) + OvlK_WaitOldest = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'OvlK_WaitOldest'), typeof(OvlK_WaitOldestDelegate)) cast OvlK_WaitOldestDelegate) + OvlK_WaitOrCancel = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'OvlK_WaitOrCancel'), typeof(OvlK_WaitOrCancelDelegate)) cast OvlK_WaitOrCancelDelegate) + OvlK_WaitAndRelease = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'OvlK_WaitAndRelease'), typeof(OvlK_WaitAndReleaseDelegate)) cast OvlK_WaitAndReleaseDelegate) + OvlK_IsComplete = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'OvlK_IsComplete'), typeof(OvlK_IsCompleteDelegate)) cast OvlK_IsCompleteDelegate) + OvlK_ReUse = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'OvlK_ReUse'), typeof(OvlK_ReUseDelegate)) cast OvlK_ReUseDelegate) + StmK_Init = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'StmK_Init'), typeof(StmK_InitDelegate)) cast StmK_InitDelegate) + StmK_Free = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'StmK_Free'), typeof(StmK_FreeDelegate)) cast StmK_FreeDelegate) + StmK_Start = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'StmK_Start'), typeof(StmK_StartDelegate)) cast StmK_StartDelegate) + StmK_Stop = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'StmK_Stop'), typeof(StmK_StopDelegate)) cast StmK_StopDelegate) + StmK_Read = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'StmK_Read'), typeof(StmK_ReadDelegate)) cast StmK_ReadDelegate) + StmK_Write = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'StmK_Write'), typeof(StmK_WriteDelegate)) cast StmK_WriteDelegate) + IsoK_Init = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'IsoK_Init'), typeof(IsoK_InitDelegate)) cast IsoK_InitDelegate) + IsoK_Free = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'IsoK_Free'), typeof(IsoK_FreeDelegate)) cast IsoK_FreeDelegate) + IsoK_SetPackets = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'IsoK_SetPackets'), typeof(IsoK_SetPacketsDelegate)) cast IsoK_SetPacketsDelegate) + IsoK_SetPacket = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'IsoK_SetPacket'), typeof(IsoK_SetPacketDelegate)) cast IsoK_SetPacketDelegate) + IsoK_GetPacket = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'IsoK_GetPacket'), typeof(IsoK_GetPacketDelegate)) cast IsoK_GetPacketDelegate) + IsoK_EnumPackets = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'IsoK_EnumPackets'), typeof(IsoK_EnumPacketsDelegate)) cast IsoK_EnumPacketsDelegate) + IsoK_ReUse = (Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, 'IsoK_ReUse'), typeof(IsoK_ReUseDelegate)) cast IsoK_ReUseDelegate) + + + [DllImport('kernel32.dll')] + private static def LoadLibraryEx(lpFileName as string, hReservedNull as IntPtr, dwFlags as LoadLibraryFlags) as IntPtr: + pass + + + private static final mModuleLibusbK as IntPtr = IntPtr.Zero + + #endregion + + +#endregion + +#region Enumerations + +public enum USBD_PIPE_TYPE: + + UsbdPipeTypeControl + + + UsbdPipeTypeIsochronous + + + UsbdPipeTypeBulk + + + UsbdPipeTypeInterrupt + + +[Flags] +public enum KISO_FLAG: + + NONE = 0 + + + SET_START_FRAME = 1 + + +public enum KLIB_HANDLE_TYPE: + + HOTK + + + USBK + + + USBSHAREDK + + + LSTK + + + LSTINFOK + + + OVLK + + + OVLPOOLK + + + STMK + + + COUNT + + +[Flags] +public enum KLST_SYNC_FLAG: + + NONE = 0 + + + UNCHANGED = 1 + + + ADDED = 2 + + + REMOVED = 4 + + + CONNECT_CHANGE = 8 + + + MASK = 15 + + +[Flags] +public enum KLST_FLAG: + + NONE = 0 + + + INCLUDE_RAWGUID = 1 + + + INCLUDE_DISCONNECT = 2 + + +public enum BMREQUEST_DIR: + + HOST_TO_DEVICE = 0 + + DEVICE_TO_HOST = 1 + + +public enum BMREQUEST_TYPE: + + STANDARD = 0 + + + CLASS = 1 + + + VENDOR = 2 + + +public enum BMREQUEST_RECIPIENT: + + DEVICE = 0 + + + INTERFACE = 1 + + + ENDPOINT = 2 + + + OTHER = 3 + + +public enum USB_GETSTATUS: + + SELF_POWERED = 1 + + + REMOTE_WAKEUP_ENABLED = 2 + + +public enum USB_DESCRIPTOR_TYPE: + + DEVICE = 1 + + + CONFIGURATION = 2 + + + STRING = 3 + + + INTERFACE = 4 + + + ENDPOINT = 5 + + + DEVICE_QUALIFIER = 6 + + + CONFIG_POWER = 7 + + + INTERFACE_POWER = 8 + + + INTERFACE_ASSOCIATION = 11 + + +public enum KUSB_PROPERTY: + + DEVICE_FILE_HANDLE + + + COUNT + + +public enum KUSB_DRVID: + + LIBUSBK + + + LIBUSB0 + + + WINUSB + + + LIBUSB0_FILTER + + + COUNT + + +public enum KUSB_FNID: + + Init + + + Free + + + ClaimInterface + + + ReleaseInterface + + + SetAltInterface + + + GetAltInterface + + + GetDescriptor + + + ControlTransfer + + + SetPowerPolicy + + + GetPowerPolicy + + + SetConfiguration + + + GetConfiguration + + + ResetDevice + + + Initialize + + + SelectInterface + + + GetAssociatedInterface + + + Clone + + + QueryInterfaceSettings + + + QueryDeviceInformation + + + SetCurrentAlternateSetting + + + GetCurrentAlternateSetting + + + QueryPipe + + + SetPipePolicy + + + GetPipePolicy + + + ReadPipe + + + WritePipe + + + ResetPipe + + + AbortPipe + + + FlushPipe + + + IsoReadPipe + + + IsoWritePipe + + + GetCurrentFrameNumber + + + GetOverlappedResult + + + GetProperty + + + + COUNT + + +[Flags] +public enum KHOT_FLAG: + + NONE + + + PLUG_ALL_ON_INIT = 1 + + + PASS_DUPE_INSTANCE = 2 + + + POST_USER_MESSAGE = 4 + + +[Flags] +public enum KOVL_WAIT_FLAG: + + NONE = 0 + + + RELEASE_ON_SUCCESS = 1 + + + RELEASE_ON_FAIL = 2 + + + RELEASE_ON_SUCCESS_FAIL = 3 + + + CANCEL_ON_TIMEOUT = 4 + + + RELEASE_ON_TIMEOUT = 12 + + + RELEASE_ALWAYS = 15 + + + ALERTABLE = 16 + + +[Flags] +public enum KOVL_POOL_FLAG: + + NONE = 0 + + +[Flags] +public enum KSTM_FLAG(uint): + + NONE = 0 + + NO_PARTIAL_XFERS = 1048576 + + TIMEOUT_MASK = 131071 + + +public enum KSTM_COMPLETE_RESULT: + + VALID = 0 + + + INVALID + + +#endregion + +#region Structs + +[StructLayout(LayoutKind.Sequential, CharSet: CharSet.Ansi)] +public struct WINUSB_PIPE_INFORMATION: + + public PipeType as USBD_PIPE_TYPE + + + public PipeId as byte + + + public MaximumPacketSize as ushort + + + public Interval as byte + + + + public override def ToString() as string: + return string.Format('PipeType: {0}\nPipeId: {1}\nMaximumPacketSize: {2}\nInterval: {3}\n', PipeType, (PipeId.ToString('X2') + 'h'), MaximumPacketSize, (Interval.ToString('X2') + 'h')) + + +[StructLayout(LayoutKind.Sequential, CharSet: CharSet.Ansi, Pack: 1)] +public struct WINUSB_SETUP_PACKET: + + public RequestType as byte + + + public Request as byte + + + public Value as ushort + + + public Index as ushort + + + public Length as ushort + + + + public override def ToString() as string: + return string.Format('RequestType: {0}\nRequest: {1}\nValue: {2}\nIndex: {3}\nLength: {4}\n', (RequestType.ToString('X2') + 'h'), (Request.ToString('X2') + 'h'), (Value.ToString('X4') + 'h'), (Index.ToString('X4') + 'h'), Length) + + +[StructLayout(LayoutKind.Sequential, CharSet: CharSet.Ansi, Pack: 1)] +public struct KISO_PACKET: + + public Offset as int + + + public Length as ushort + + + public Status as ushort + + + + public override def ToString() as string: + return string.Format('Offset: {0}\nLength: {1}\nStatus: {2}\n', Offset, Length, (Status.ToString('X4') + 'h')) + + +[StructLayout(LayoutKind.Sequential)] +public struct KISO_CONTEXT: + + private final mHandlePtr as IntPtr + + + public def constructor(Handle as IntPtr): + mHandlePtr = Handle + + + public Pointer as IntPtr: + get: + return mHandlePtr + + + [StructLayout(LayoutKind.Sequential, CharSet: CharSet.Ansi, Pack: 1)] + private struct KISO_CONTEXT_MAP: + + private final Flags as KISO_FLAG + + + private final StartFrame as int + + + private final ErrorCount as short + + + private final NumberOfPackets as short + + + private final UrbHdrStatus as int + + + private static final ofsFlags as int = Marshal.OffsetOf(typeof(KISO_CONTEXT_MAP), 'Flags').ToInt32() + + private static final ofsStartFrame as int = Marshal.OffsetOf(typeof(KISO_CONTEXT_MAP), 'StartFrame').ToInt32() + + private static final ofsErrorCount as int = Marshal.OffsetOf(typeof(KISO_CONTEXT_MAP), 'ErrorCount').ToInt32() + + private static final ofsNumberOfPackets as int = Marshal.OffsetOf(typeof(KISO_CONTEXT_MAP), 'NumberOfPackets').ToInt32() + + private static final ofsUrbHdrStatus as int = Marshal.OffsetOf(typeof(KISO_CONTEXT_MAP), 'UrbHdrStatus').ToInt32() + + + + public Flags as KISO_FLAG: + get: + return (Marshal.ReadInt32(mHandlePtr, ofsFlags) cast KISO_FLAG) + + + + public StartFrame as int: + get: + return Marshal.ReadInt32(mHandlePtr, ofsStartFrame) + + + + public ErrorCount as short: + get: + return Marshal.ReadInt16(mHandlePtr, ofsErrorCount) + + + + public NumberOfPackets as short: + get: + return Marshal.ReadInt16(mHandlePtr, ofsNumberOfPackets) + + + + public UrbHdrStatus as int: + get: + return Marshal.ReadInt32(mHandlePtr, ofsUrbHdrStatus) + + + + public override def ToString() as string: + return string.Format('Flags: {0}\nStartFrame: {1}\nErrorCount: {2}\nNumberOfPackets: {3}\nUrbHdrStatus: {4}\n', Flags.ToString(), StartFrame, ErrorCount, NumberOfPackets, (UrbHdrStatus.ToString('X8') + 'h')) + + +[StructLayout(LayoutKind.Sequential, CharSet: CharSet.Ansi)] +public struct KLIB_VERSION: + + public Major as int + + + public Minor as int + + + public Micro as int + + + public Nano as int + + + public override def ToString() as string: + return string.Format('Major: {0}\nMinor: {1}\nMicro: {2}\nNano: {3}\n', Major, Minor, Micro, Nano) + + +[StructLayout(LayoutKind.Sequential, CharSet: CharSet.Ansi)] +public struct KLST_DEV_COMMON_INFO: + + public Vid as int + + + public Pid as int + + + public MI as int + + + // An ID that uniquely identifies a USB device. + [MarshalAs(UnmanagedType.ByValTStr, SizeConst: AllKConstants.KLST_STRING_MAX_LEN)] + public InstanceID as string + + + + public override def ToString() as string: + return string.Format('Vid: {0}\nPid: {1}\nMI: {2}\nInstanceID: {3}\n', (Vid.ToString('X4') + 'h'), (Pid.ToString('X4') + 'h'), (MI.ToString('X2') + 'h'), InstanceID) + + +[StructLayout(LayoutKind.Sequential)] +public struct KLST_DEVINFO_HANDLE(IKLIB_HANDLE): + + private final mHandlePtr as IntPtr + + + public def constructor(Handle as IntPtr): + mHandlePtr = Handle + + + public Pointer as IntPtr: + get: + return mHandlePtr + + + public HandleType as KLIB_HANDLE_TYPE: + get: + return KLIB_HANDLE_TYPE.LSTINFOK + + + public def GetContext() as IntPtr: + return AllKFunctions.LibK_GetContext(mHandlePtr, HandleType) + + + public def SetContext(UserContext as IntPtr) as bool: + return AllKFunctions.LibK_SetContext(mHandlePtr, HandleType, UserContext) + + + public def SetCleanupCallback(CleanupCallback as KLIB_HANDLE_CLEANUP_CB) as bool: + return AllKFunctions.LibK_SetCleanupCallback(mHandlePtr, HandleType, CleanupCallback) + + + [StructLayout(LayoutKind.Sequential, CharSet: CharSet.Ansi)] + private struct KLST_DEVINFO_MAP: + + private final Common as KLST_DEV_COMMON_INFO + + + private final DriverID as int + + + [MarshalAs(UnmanagedType.ByValTStr, SizeConst: AllKConstants.KLST_STRING_MAX_LEN)] + private final DeviceInterfaceGUID as string + + + [MarshalAs(UnmanagedType.ByValTStr, SizeConst: AllKConstants.KLST_STRING_MAX_LEN)] + private final DeviceID as string + + + [MarshalAs(UnmanagedType.ByValTStr, SizeConst: AllKConstants.KLST_STRING_MAX_LEN)] + private final ClassGUID as string + + + [MarshalAs(UnmanagedType.ByValTStr, SizeConst: AllKConstants.KLST_STRING_MAX_LEN)] + private final Mfg as string + + + [MarshalAs(UnmanagedType.ByValTStr, SizeConst: AllKConstants.KLST_STRING_MAX_LEN)] + private final DeviceDesc as string + + + [MarshalAs(UnmanagedType.ByValTStr, SizeConst: AllKConstants.KLST_STRING_MAX_LEN)] + private final Service as string + + + [MarshalAs(UnmanagedType.ByValTStr, SizeConst: AllKConstants.KLST_STRING_MAX_LEN)] + private final SymbolicLink as string + + + [MarshalAs(UnmanagedType.ByValTStr, SizeConst: AllKConstants.KLST_STRING_MAX_LEN)] + private final DevicePath as string + + + private final LUsb0FilterIndex as int + + + private final Connected as bool + + + private final SyncFlags as KLST_SYNC_FLAG + + + private final BusNumber as int + + + private final DeviceAddress as int + + + [MarshalAs(UnmanagedType.ByValTStr, SizeConst: AllKConstants.KLST_STRING_MAX_LEN)] + private final SerialNumber as string + + + private static final ofsCommon as int = Marshal.OffsetOf(typeof(KLST_DEVINFO_MAP), 'Common').ToInt32() + + private static final ofsDriverID as int = Marshal.OffsetOf(typeof(KLST_DEVINFO_MAP), 'DriverID').ToInt32() + + private static final ofsDeviceInterfaceGUID as int = Marshal.OffsetOf(typeof(KLST_DEVINFO_MAP), 'DeviceInterfaceGUID').ToInt32() + + private static final ofsDeviceID as int = Marshal.OffsetOf(typeof(KLST_DEVINFO_MAP), 'DeviceID').ToInt32() + + private static final ofsClassGUID as int = Marshal.OffsetOf(typeof(KLST_DEVINFO_MAP), 'ClassGUID').ToInt32() + + private static final ofsMfg as int = Marshal.OffsetOf(typeof(KLST_DEVINFO_MAP), 'Mfg').ToInt32() + + private static final ofsDeviceDesc as int = Marshal.OffsetOf(typeof(KLST_DEVINFO_MAP), 'DeviceDesc').ToInt32() + + private static final ofsService as int = Marshal.OffsetOf(typeof(KLST_DEVINFO_MAP), 'Service').ToInt32() + + private static final ofsSymbolicLink as int = Marshal.OffsetOf(typeof(KLST_DEVINFO_MAP), 'SymbolicLink').ToInt32() + + private static final ofsDevicePath as int = Marshal.OffsetOf(typeof(KLST_DEVINFO_MAP), 'DevicePath').ToInt32() + + private static final ofsLUsb0FilterIndex as int = Marshal.OffsetOf(typeof(KLST_DEVINFO_MAP), 'LUsb0FilterIndex').ToInt32() + + private static final ofsConnected as int = Marshal.OffsetOf(typeof(KLST_DEVINFO_MAP), 'Connected').ToInt32() + + private static final ofsSyncFlags as int = Marshal.OffsetOf(typeof(KLST_DEVINFO_MAP), 'SyncFlags').ToInt32() + + private static final ofsBusNumber as int = Marshal.OffsetOf(typeof(KLST_DEVINFO_MAP), 'BusNumber').ToInt32() + + private static final ofsDeviceAddress as int = Marshal.OffsetOf(typeof(KLST_DEVINFO_MAP), 'DeviceAddress').ToInt32() + + private static final ofsSerialNumber as int = Marshal.OffsetOf(typeof(KLST_DEVINFO_MAP), 'SerialNumber').ToInt32() + + + + public Common as KLST_DEV_COMMON_INFO: + get: + return (Marshal.PtrToStructure(IntPtr((mHandlePtr.ToInt64() + ofsCommon)), typeof(KLST_DEV_COMMON_INFO)) cast KLST_DEV_COMMON_INFO) + + + + public DriverID as int: + get: + return Marshal.ReadInt32(mHandlePtr, ofsDriverID) + + + + public DeviceInterfaceGUID as string: + get: + return Marshal.PtrToStringAnsi(IntPtr((mHandlePtr.ToInt64() + ofsDeviceInterfaceGUID))) + + + + public DeviceID as string: + get: + return Marshal.PtrToStringAnsi(IntPtr((mHandlePtr.ToInt64() + ofsDeviceID))) + + + + public ClassGUID as string: + get: + return Marshal.PtrToStringAnsi(IntPtr((mHandlePtr.ToInt64() + ofsClassGUID))) + + + + public Mfg as string: + get: + return Marshal.PtrToStringAnsi(IntPtr((mHandlePtr.ToInt64() + ofsMfg))) + + + + public DeviceDesc as string: + get: + return Marshal.PtrToStringAnsi(IntPtr((mHandlePtr.ToInt64() + ofsDeviceDesc))) + + + + public Service as string: + get: + return Marshal.PtrToStringAnsi(IntPtr((mHandlePtr.ToInt64() + ofsService))) + + + + public SymbolicLink as string: + get: + return Marshal.PtrToStringAnsi(IntPtr((mHandlePtr.ToInt64() + ofsSymbolicLink))) + + + + public DevicePath as string: + get: + return Marshal.PtrToStringAnsi(IntPtr((mHandlePtr.ToInt64() + ofsDevicePath))) + + + + public LUsb0FilterIndex as int: + get: + return Marshal.ReadInt32(mHandlePtr, ofsLUsb0FilterIndex) + + + + public Connected as bool: + get: + return (Marshal.ReadInt32(mHandlePtr, ofsConnected) != 0) + + + + public SyncFlags as KLST_SYNC_FLAG: + get: + return (Marshal.ReadInt32(mHandlePtr, ofsSyncFlags) cast KLST_SYNC_FLAG) + + + + public BusNumber as int: + get: + return Marshal.ReadInt32(mHandlePtr, ofsBusNumber) + + + + public DeviceAddress as int: + get: + return Marshal.ReadInt32(mHandlePtr, ofsDeviceAddress) + + + + public SerialNumber as string: + get: + return Marshal.PtrToStringAnsi(IntPtr((mHandlePtr.ToInt64() + ofsSerialNumber))) + + + + public override def ToString() as string: + return string.Format('DriverID: {0}\nDeviceInterfaceGUID: {1}\nDeviceID: {2}\nClassGUID: {3}\nMfg: {4}\nDeviceDesc: {5}\nService: {6}\nSymbolicLink: {7}\nDevicePath: {8}\nLUsb0FilterIndex: {9}\nConnected: {10}\nSyncFlags: {11}\nBusNumber: {12}\nDeviceAddress: {13}\nSerialNumber: {14}\n', DriverID, DeviceInterfaceGUID, DeviceID, ClassGUID, Mfg, DeviceDesc, Service, SymbolicLink, DevicePath, LUsb0FilterIndex, Connected, SyncFlags.ToString(), BusNumber, DeviceAddress, SerialNumber) + + +[StructLayout(LayoutKind.Sequential, CharSet: CharSet.Ansi, Size: 1024)] +public struct KLST_PATTERN_MATCH: + + [MarshalAs(UnmanagedType.ByValTStr, SizeConst: AllKConstants.KLST_STRING_MAX_LEN)] + public DeviceID as string + + + [MarshalAs(UnmanagedType.ByValTStr, SizeConst: AllKConstants.KLST_STRING_MAX_LEN)] + public DeviceInterfaceGUID as string + + + [MarshalAs(UnmanagedType.ByValTStr, SizeConst: AllKConstants.KLST_STRING_MAX_LEN)] + public ClassGUID as string + + + + public override def ToString() as string: + return string.Format('DeviceID: {0}\nDeviceInterfaceGUID: {1}\nClassGUID: {2}\n', DeviceID, DeviceInterfaceGUID, ClassGUID) + + +[StructLayout(LayoutKind.Sequential, CharSet: CharSet.Ansi, Pack: 1)] +public struct USB_DEVICE_DESCRIPTOR: + + public bLength as byte + + + public bDescriptorType as byte + + + public bcdUSB as ushort + + + public bDeviceClass as byte + + + public bDeviceSubClass as byte + + + public bDeviceProtocol as byte + + + public bMaxPacketSize0 as byte + + + public idVendor as ushort + + + public idProduct as ushort + + + public bcdDevice as ushort + + + public iManufacturer as byte + + + public iProduct as byte + + + public iSerialNumber as byte + + + public bNumConfigurations as byte + + + + public override def ToString() as string: + return string.Format('bLength: {0}\nbDescriptorType: {1}\nbcdUSB: {2}\nbDeviceClass: {3}\nbDeviceSubClass: {4}\nbDeviceProtocol: {5}\nbMaxPacketSize0: {6}\nidVendor: {7}\nidProduct: {8}\nbcdDevice: {9}\niManufacturer: {10}\niProduct: {11}\niSerialNumber: {12}\nbNumConfigurations: {13}\n', bLength, (bDescriptorType.ToString('X2') + 'h'), (bcdUSB.ToString('X4') + 'h'), (bDeviceClass.ToString('X2') + 'h'), (bDeviceSubClass.ToString('X2') + 'h'), (bDeviceProtocol.ToString('X2') + 'h'), bMaxPacketSize0, (idVendor.ToString('X4') + 'h'), (idProduct.ToString('X4') + 'h'), (bcdDevice.ToString('X4') + 'h'), iManufacturer, iProduct, iSerialNumber, bNumConfigurations) + + +[StructLayout(LayoutKind.Sequential, CharSet: CharSet.Ansi, Pack: 1)] +public struct USB_ENDPOINT_DESCRIPTOR: + + public bLength as byte + + + public bDescriptorType as byte + + + public bEndpointAddress as byte + + + public bmAttributes as byte + + + public wMaxPacketSize as ushort + + + public bInterval as byte + + + + public override def ToString() as string: + return string.Format('bLength: {0}\nbDescriptorType: {1}\nbEndpointAddress: {2}\nbmAttributes: {3}\nwMaxPacketSize: {4}\nbInterval: {5}\n', bLength, (bDescriptorType.ToString('X2') + 'h'), (bEndpointAddress.ToString('X2') + 'h'), (bmAttributes.ToString('X2') + 'h'), wMaxPacketSize, bInterval) + + +[StructLayout(LayoutKind.Sequential, CharSet: CharSet.Ansi, Pack: 1)] +public struct USB_CONFIGURATION_DESCRIPTOR: + + public bLength as byte + + + public bDescriptorType as byte + + + public wTotalLength as ushort + + + public bNumInterfaces as byte + + + public bConfigurationValue as byte + + + public iConfiguration as byte + + + public bmAttributes as byte + + + public MaxPower as byte + + + public override def ToString() as string: + return string.Format('bLength: {0}\nbDescriptorType: {1}\nwTotalLength: {2}\nbNumInterfaces: {3}\nbConfigurationValue: {4}\niConfiguration: {5}\nbmAttributes: {6}\nMaxPower: {7}\n', bLength, (bDescriptorType.ToString('X2') + 'h'), wTotalLength, bNumInterfaces, bConfigurationValue, iConfiguration, (bmAttributes.ToString('X2') + 'h'), MaxPower) + + +[StructLayout(LayoutKind.Sequential, CharSet: CharSet.Ansi, Pack: 1)] +public struct USB_INTERFACE_DESCRIPTOR: + + public bLength as byte + + + public bDescriptorType as byte + + + public bInterfaceNumber as byte + + + public bAlternateSetting as byte + + + public bNumEndpoints as byte + + + public bInterfaceClass as byte + + + public bInterfaceSubClass as byte + + + public bInterfaceProtocol as byte + + + public iInterface as byte + + + + public override def ToString() as string: + return string.Format('bLength: {0}\nbDescriptorType: {1}\nbInterfaceNumber: {2}\nbAlternateSetting: {3}\nbNumEndpoints: {4}\nbInterfaceClass: {5}\nbInterfaceSubClass: {6}\nbInterfaceProtocol: {7}\niInterface: {8}\n', bLength, (bDescriptorType.ToString('X2') + 'h'), bInterfaceNumber, bAlternateSetting, bNumEndpoints, (bInterfaceClass.ToString('X2') + 'h'), (bInterfaceSubClass.ToString('X2') + 'h'), (bInterfaceProtocol.ToString('X2') + 'h'), iInterface) + + +[StructLayout(LayoutKind.Sequential, CharSet: CharSet.Unicode, Pack: 1)] +public struct USB_STRING_DESCRIPTOR: + + public bLength as byte + + + public bDescriptorType as byte + + + [MarshalAs(UnmanagedType.ByValTStr, SizeConst: AllKConstants.KLST_STRING_MAX_LEN)] + public bString as string + + + + public override def ToString() as string: + return string.Format('bLength: {0}\nbDescriptorType: {1}\nbString: {2}\n', bLength, (bDescriptorType.ToString('X2') + 'h'), bString) + + +[StructLayout(LayoutKind.Sequential, CharSet: CharSet.Ansi, Pack: 1)] +public struct USB_COMMON_DESCRIPTOR: + + public bLength as byte + + + public bDescriptorType as byte + + + + public override def ToString() as string: + return string.Format('bLength: {0}\nbDescriptorType: {1}\n', bLength, (bDescriptorType.ToString('X2') + 'h')) + + +[StructLayout(LayoutKind.Sequential, CharSet: CharSet.Ansi, Pack: 1)] +public struct USB_INTERFACE_ASSOCIATION_DESCRIPTOR: + + public bLength as byte + + + public bDescriptorType as byte + + + public bFirstInterface as byte + + + public bInterfaceCount as byte + + + public bFunctionClass as byte + + + public bFunctionSubClass as byte + + + public bFunctionProtocol as byte + + + public iFunction as byte + + + + public override def ToString() as string: + return string.Format('bLength: {0}\nbDescriptorType: {1}\nbFirstInterface: {2}\nbInterfaceCount: {3}\nbFunctionClass: {4}\nbFunctionSubClass: {5}\nbFunctionProtocol: {6}\niFunction: {7}\n', bLength, (bDescriptorType.ToString('X2') + 'h'), bFirstInterface, bInterfaceCount, (bFunctionClass.ToString('X2') + 'h'), (bFunctionSubClass.ToString('X2') + 'h'), (bFunctionProtocol.ToString('X2') + 'h'), iFunction) + + +[StructLayout(LayoutKind.Sequential, CharSet: CharSet.Ansi)] +public struct KUSB_DRIVER_API_INFO: + + public DriverID as int + + + public FunctionCount as int + + + + public override def ToString() as string: + return string.Format('DriverID: {0}\nFunctionCount: {1}\n', DriverID, FunctionCount) + + +[StructLayout(LayoutKind.Sequential, CharSet: CharSet.Ansi, Size: 512)] +public struct KUSB_DRIVER_API: + + public Info as KUSB_DRIVER_API_INFO + + + + [MarshalAs(UnmanagedType.FunctionPtr)] + public Init as KUSB_InitDelegate + + + + [MarshalAs(UnmanagedType.FunctionPtr)] + public Free as KUSB_FreeDelegate + + + + [MarshalAs(UnmanagedType.FunctionPtr)] + public ClaimInterface as KUSB_ClaimInterfaceDelegate + + + + [MarshalAs(UnmanagedType.FunctionPtr)] + public ReleaseInterface as KUSB_ReleaseInterfaceDelegate + + + + [MarshalAs(UnmanagedType.FunctionPtr)] + public SetAltInterface as KUSB_SetAltInterfaceDelegate + + + + [MarshalAs(UnmanagedType.FunctionPtr)] + public GetAltInterface as KUSB_GetAltInterfaceDelegate + + + + [MarshalAs(UnmanagedType.FunctionPtr)] + public GetDescriptor as KUSB_GetDescriptorDelegate + + + + [MarshalAs(UnmanagedType.FunctionPtr)] + public ControlTransfer as KUSB_ControlTransferDelegate + + + + [MarshalAs(UnmanagedType.FunctionPtr)] + public SetPowerPolicy as KUSB_SetPowerPolicyDelegate + + + + [MarshalAs(UnmanagedType.FunctionPtr)] + public GetPowerPolicy as KUSB_GetPowerPolicyDelegate + + + + [MarshalAs(UnmanagedType.FunctionPtr)] + public SetConfiguration as KUSB_SetConfigurationDelegate + + + + [MarshalAs(UnmanagedType.FunctionPtr)] + public GetConfiguration as KUSB_GetConfigurationDelegate + + + + [MarshalAs(UnmanagedType.FunctionPtr)] + public ResetDevice as KUSB_ResetDeviceDelegate + + + + [MarshalAs(UnmanagedType.FunctionPtr)] + public Initialize as KUSB_InitializeDelegate + + + + [MarshalAs(UnmanagedType.FunctionPtr)] + public SelectInterface as KUSB_SelectInterfaceDelegate + + + + [MarshalAs(UnmanagedType.FunctionPtr)] + public GetAssociatedInterface as KUSB_GetAssociatedInterfaceDelegate + + + + [MarshalAs(UnmanagedType.FunctionPtr)] + public Clone as KUSB_CloneDelegate + + + + [MarshalAs(UnmanagedType.FunctionPtr)] + public QueryInterfaceSettings as KUSB_QueryInterfaceSettingsDelegate + + + + [MarshalAs(UnmanagedType.FunctionPtr)] + public QueryDeviceInformation as KUSB_QueryDeviceInformationDelegate + + + + [MarshalAs(UnmanagedType.FunctionPtr)] + public SetCurrentAlternateSetting as KUSB_SetCurrentAlternateSettingDelegate + + + + [MarshalAs(UnmanagedType.FunctionPtr)] + public GetCurrentAlternateSetting as KUSB_GetCurrentAlternateSettingDelegate + + + + [MarshalAs(UnmanagedType.FunctionPtr)] + public QueryPipe as KUSB_QueryPipeDelegate + + + + [MarshalAs(UnmanagedType.FunctionPtr)] + public SetPipePolicy as KUSB_SetPipePolicyDelegate + + + + [MarshalAs(UnmanagedType.FunctionPtr)] + public GetPipePolicy as KUSB_GetPipePolicyDelegate + + + + [MarshalAs(UnmanagedType.FunctionPtr)] + public ReadPipe as KUSB_ReadPipeDelegate + + + + [MarshalAs(UnmanagedType.FunctionPtr)] + public WritePipe as KUSB_WritePipeDelegate + + + + [MarshalAs(UnmanagedType.FunctionPtr)] + public ResetPipe as KUSB_ResetPipeDelegate + + + + [MarshalAs(UnmanagedType.FunctionPtr)] + public AbortPipe as KUSB_AbortPipeDelegate + + + + [MarshalAs(UnmanagedType.FunctionPtr)] + public FlushPipe as KUSB_FlushPipeDelegate + + + + [MarshalAs(UnmanagedType.FunctionPtr)] + public IsoReadPipe as KUSB_IsoReadPipeDelegate + + + + [MarshalAs(UnmanagedType.FunctionPtr)] + public IsoWritePipe as KUSB_IsoWritePipeDelegate + + + + [MarshalAs(UnmanagedType.FunctionPtr)] + public GetCurrentFrameNumber as KUSB_GetCurrentFrameNumberDelegate + + + + [MarshalAs(UnmanagedType.FunctionPtr)] + public GetOverlappedResult as KUSB_GetOverlappedResultDelegate + + + + [MarshalAs(UnmanagedType.FunctionPtr)] + public GetProperty as KUSB_GetPropertyDelegate + + +[StructLayout(LayoutKind.Sequential, CharSet: CharSet.Ansi, Size: 2048)] +public struct KHOT_PARAMS: + + public UserHwnd as IntPtr + + + public UserMessage as int + + + public Flags as KHOT_FLAG + + + public PatternMatch as KLST_PATTERN_MATCH + + + [MarshalAs(UnmanagedType.FunctionPtr)] + public OnHotPlug as KHOT_PLUG_CB + + + + public override def ToString() as string: + return string.Format('UserHwnd: {0}\nUserMessage: {1}\nFlags: {2}\n', (UserHwnd.ToString('X16') + 'h'), (UserMessage.ToString('X8') + 'h'), Flags.ToString()) + + +[StructLayout(LayoutKind.Sequential)] +public struct KSTM_XFER_CONTEXT: + + private final mHandlePtr as IntPtr + + + public def constructor(Handle as IntPtr): + mHandlePtr = Handle + + + public Pointer as IntPtr: + get: + return mHandlePtr + + + [StructLayout(LayoutKind.Sequential, CharSet: CharSet.Ansi)] + private struct KSTM_XFER_CONTEXT_MAP: + + private final Buffer as IntPtr + + + private final BufferSize as int + + + private final TransferLength as int + + + private final UserState as IntPtr + + + private static final ofsBuffer as int = Marshal.OffsetOf(typeof(KSTM_XFER_CONTEXT_MAP), 'Buffer').ToInt32() + + private static final ofsBufferSize as int = Marshal.OffsetOf(typeof(KSTM_XFER_CONTEXT_MAP), 'BufferSize').ToInt32() + + private static final ofsTransferLength as int = Marshal.OffsetOf(typeof(KSTM_XFER_CONTEXT_MAP), 'TransferLength').ToInt32() + + private static final ofsUserState as int = Marshal.OffsetOf(typeof(KSTM_XFER_CONTEXT_MAP), 'UserState').ToInt32() + + + + public Buffer as IntPtr: + get: + return Marshal.ReadIntPtr(mHandlePtr, ofsBuffer) + + + + public BufferSize as int: + get: + return Marshal.ReadInt32(mHandlePtr, ofsBufferSize) + + + + public TransferLength as int: + get: + return Marshal.ReadInt32(mHandlePtr, ofsTransferLength) + + + + public UserState as IntPtr: + get: + return Marshal.ReadIntPtr(mHandlePtr, ofsUserState) + set: + Marshal.WriteIntPtr(mHandlePtr, ofsUserState, value) + + + + public override def ToString() as string: + return string.Format('Buffer: {0}\nBufferSize: {1}\nTransferLength: {2}\nUserState: {3}\n', (Buffer.ToString('X16') + 'h'), BufferSize, TransferLength, (UserState.ToString('X16') + 'h')) + + +[StructLayout(LayoutKind.Sequential)] +public struct KSTM_INFO: + + private final mHandlePtr as IntPtr + + + public def constructor(Handle as IntPtr): + mHandlePtr = Handle + + + public Pointer as IntPtr: + get: + return mHandlePtr + + + [StructLayout(LayoutKind.Sequential, CharSet: CharSet.Ansi)] + private struct KSTM_INFO_MAP: + + private final UsbHandle as IntPtr + + + private final PipeID as byte + + + private final MaxPendingTransfers as int + + + private final MaxTransferSize as int + + + private final MaxPendingIO as int + + + private final EndpointDescriptor as USB_ENDPOINT_DESCRIPTOR + + + private final DriverAPI as KUSB_DRIVER_API + + + private final DeviceHandle as IntPtr + + + private final StreamHandle as IntPtr + + + private final UserState as IntPtr + + + private static final ofsUsbHandle as int = Marshal.OffsetOf(typeof(KSTM_INFO_MAP), 'UsbHandle').ToInt32() + + private static final ofsPipeID as int = Marshal.OffsetOf(typeof(KSTM_INFO_MAP), 'PipeID').ToInt32() + + private static final ofsMaxPendingTransfers as int = Marshal.OffsetOf(typeof(KSTM_INFO_MAP), 'MaxPendingTransfers').ToInt32() + + private static final ofsMaxTransferSize as int = Marshal.OffsetOf(typeof(KSTM_INFO_MAP), 'MaxTransferSize').ToInt32() + + private static final ofsMaxPendingIO as int = Marshal.OffsetOf(typeof(KSTM_INFO_MAP), 'MaxPendingIO').ToInt32() + + private static final ofsEndpointDescriptor as int = Marshal.OffsetOf(typeof(KSTM_INFO_MAP), 'EndpointDescriptor').ToInt32() + + private static final ofsDriverAPI as int = Marshal.OffsetOf(typeof(KSTM_INFO_MAP), 'DriverAPI').ToInt32() + + private static final ofsDeviceHandle as int = Marshal.OffsetOf(typeof(KSTM_INFO_MAP), 'DeviceHandle').ToInt32() + + private static final ofsStreamHandle as int = Marshal.OffsetOf(typeof(KSTM_INFO_MAP), 'StreamHandle').ToInt32() + + private static final ofsUserState as int = Marshal.OffsetOf(typeof(KSTM_INFO_MAP), 'UserState').ToInt32() + + + + public UsbHandle as IntPtr: + get: + return Marshal.ReadIntPtr(mHandlePtr, ofsUsbHandle) + + + + public PipeID as byte: + get: + return Marshal.ReadByte(mHandlePtr, ofsPipeID) + + + + public MaxPendingTransfers as int: + get: + return Marshal.ReadInt32(mHandlePtr, ofsMaxPendingTransfers) + + + + public MaxTransferSize as int: + get: + return Marshal.ReadInt32(mHandlePtr, ofsMaxTransferSize) + + + + public MaxPendingIO as int: + get: + return Marshal.ReadInt32(mHandlePtr, ofsMaxPendingIO) + + + + public EndpointDescriptor as USB_ENDPOINT_DESCRIPTOR: + get: + return (Marshal.PtrToStructure(IntPtr((mHandlePtr.ToInt64() + ofsEndpointDescriptor)), typeof(USB_ENDPOINT_DESCRIPTOR)) cast USB_ENDPOINT_DESCRIPTOR) + + + + public DriverAPI as KUSB_DRIVER_API: + get: + return (Marshal.PtrToStructure(IntPtr((mHandlePtr.ToInt64() + ofsDriverAPI)), typeof(KUSB_DRIVER_API)) cast KUSB_DRIVER_API) + + + + public DeviceHandle as IntPtr: + get: + return Marshal.ReadIntPtr(mHandlePtr, ofsDeviceHandle) + + + + public StreamHandle as IntPtr: + get: + return Marshal.ReadIntPtr(mHandlePtr, ofsStreamHandle) + + + + public UserState as IntPtr: + get: + return Marshal.ReadIntPtr(mHandlePtr, ofsUserState) + set: + Marshal.WriteIntPtr(mHandlePtr, ofsUserState, value) + + + + public override def ToString() as string: + return string.Format('UsbHandle: {0}\nPipeID: {1}\nMaxPendingTransfers: {2}\nMaxTransferSize: {3}\nMaxPendingIO: {4}\nDeviceHandle: {5}\nStreamHandle: {6}\nUserState: {7}\n', (UsbHandle.ToString('X16') + 'h'), (PipeID.ToString('X2') + 'h'), MaxPendingTransfers, MaxTransferSize, MaxPendingIO, (DeviceHandle.ToString('X16') + 'h'), (StreamHandle.ToString('X16') + 'h'), (UserState.ToString('X16') + 'h')) + + +[StructLayout(LayoutKind.Sequential, CharSet: CharSet.Ansi, Size: 64)] +public struct KSTM_CALLBACK: + + [MarshalAs(UnmanagedType.FunctionPtr)] + public Error as KSTM_ERROR_CB + + + [MarshalAs(UnmanagedType.FunctionPtr)] + public Submit as KSTM_SUBMIT_CB + + + [MarshalAs(UnmanagedType.FunctionPtr)] + public Complete as KSTM_COMPLETE_CB + + + [MarshalAs(UnmanagedType.FunctionPtr)] + public Started as KSTM_STARTED_CB + + + [MarshalAs(UnmanagedType.FunctionPtr)] + public Stopped as KSTM_STOPPED_CB + + + [MarshalAs(UnmanagedType.FunctionPtr)] + public BeforeComplete as KSTM_BEFORE_COMPLETE_CB + + +#endregion + +#region Delegates + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KLIB_HANDLE_CLEANUP_CB([In] Handle as IntPtr, HandleType as KLIB_HANDLE_TYPE, UserContext as IntPtr) as int + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KISO_ENUM_PACKETS_CB(PacketIndex as int, [In] ref IsoPacket as KISO_PACKET, UserState as IntPtr) as bool + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KLST_ENUM_DEVINFO_CB([In] DeviceList as KLST_HANDLE, [In] DeviceInfo as KLST_DEVINFO_HANDLE, Context as IntPtr) as bool + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KUSB_InitDelegate([Out] ref InterfaceHandle as KUSB_HANDLE, [In] DevInfo as KLST_DEVINFO_HANDLE) as bool + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KUSB_FreeDelegate([In] InterfaceHandle as KUSB_HANDLE) as bool + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KUSB_ClaimInterfaceDelegate([In] InterfaceHandle as KUSB_HANDLE, NumberOrIndex as byte, IsIndex as bool) as bool + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KUSB_ReleaseInterfaceDelegate([In] InterfaceHandle as KUSB_HANDLE, NumberOrIndex as byte, IsIndex as bool) as bool + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KUSB_SetAltInterfaceDelegate([In] InterfaceHandle as KUSB_HANDLE, NumberOrIndex as byte, IsIndex as bool, AltSettingNumber as byte) as bool + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KUSB_GetAltInterfaceDelegate([In] InterfaceHandle as KUSB_HANDLE, NumberOrIndex as byte, IsIndex as bool, ref AltSettingNumber as byte) as bool + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KUSB_GetDescriptorDelegate([In] InterfaceHandle as KUSB_HANDLE, DescriptorType as byte, Index as byte, LanguageID as ushort, Buffer as IntPtr, BufferLength as int, ref LengthTransferred as int) as bool + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KUSB_ControlTransferDelegate([In] InterfaceHandle as KUSB_HANDLE, SetupPacket as WINUSB_SETUP_PACKET, Buffer as IntPtr, BufferLength as int, ref LengthTransferred as int, Overlapped as IntPtr) as bool + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KUSB_SetPowerPolicyDelegate([In] InterfaceHandle as KUSB_HANDLE, PolicyType as int, ValueLength as int, Value as IntPtr) as bool + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KUSB_GetPowerPolicyDelegate([In] InterfaceHandle as KUSB_HANDLE, PolicyType as int, ref ValueLength as int, Value as IntPtr) as bool + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KUSB_SetConfigurationDelegate([In] InterfaceHandle as KUSB_HANDLE, ConfigurationNumber as byte) as bool + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KUSB_GetConfigurationDelegate([In] InterfaceHandle as KUSB_HANDLE, ref ConfigurationNumber as byte) as bool + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KUSB_ResetDeviceDelegate([In] InterfaceHandle as KUSB_HANDLE) as bool + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KUSB_InitializeDelegate(DeviceHandle as IntPtr, [Out] ref InterfaceHandle as KUSB_HANDLE) as bool + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KUSB_SelectInterfaceDelegate([In] InterfaceHandle as KUSB_HANDLE, NumberOrIndex as byte, IsIndex as bool) as bool + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KUSB_GetAssociatedInterfaceDelegate([In] InterfaceHandle as KUSB_HANDLE, AssociatedInterfaceIndex as byte, [Out] ref AssociatedInterfaceHandle as KUSB_HANDLE) as bool + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KUSB_CloneDelegate([In] InterfaceHandle as KUSB_HANDLE, [Out] ref DstInterfaceHandle as KUSB_HANDLE) as bool + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KUSB_QueryInterfaceSettingsDelegate([In] InterfaceHandle as KUSB_HANDLE, AltSettingIndex as byte, [Out] ref UsbAltInterfaceDescriptor as USB_INTERFACE_DESCRIPTOR) as bool + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KUSB_QueryDeviceInformationDelegate([In] InterfaceHandle as KUSB_HANDLE, InformationType as int, ref BufferLength as int, Buffer as IntPtr) as bool + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KUSB_SetCurrentAlternateSettingDelegate([In] InterfaceHandle as KUSB_HANDLE, AltSettingNumber as byte) as bool + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KUSB_GetCurrentAlternateSettingDelegate([In] InterfaceHandle as KUSB_HANDLE, ref AltSettingNumber as byte) as bool + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KUSB_QueryPipeDelegate([In] InterfaceHandle as KUSB_HANDLE, AltSettingNumber as byte, PipeIndex as byte, [Out] ref PipeInformation as WINUSB_PIPE_INFORMATION) as bool + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KUSB_SetPipePolicyDelegate([In] InterfaceHandle as KUSB_HANDLE, PipeID as byte, PolicyType as int, ValueLength as int, Value as IntPtr) as bool + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KUSB_GetPipePolicyDelegate([In] InterfaceHandle as KUSB_HANDLE, PipeID as byte, PolicyType as int, ref ValueLength as int, Value as IntPtr) as bool + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KUSB_ReadPipeDelegate([In] InterfaceHandle as KUSB_HANDLE, PipeID as byte, Buffer as IntPtr, BufferLength as int, ref LengthTransferred as int, Overlapped as IntPtr) as bool + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KUSB_WritePipeDelegate([In] InterfaceHandle as KUSB_HANDLE, PipeID as byte, Buffer as IntPtr, BufferLength as int, ref LengthTransferred as int, Overlapped as IntPtr) as bool + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KUSB_ResetPipeDelegate([In] InterfaceHandle as KUSB_HANDLE, PipeID as byte) as bool + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KUSB_AbortPipeDelegate([In] InterfaceHandle as KUSB_HANDLE, PipeID as byte) as bool + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KUSB_FlushPipeDelegate([In] InterfaceHandle as KUSB_HANDLE, PipeID as byte) as bool + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KUSB_IsoReadPipeDelegate([In] InterfaceHandle as KUSB_HANDLE, PipeID as byte, Buffer as IntPtr, BufferLength as int, Overlapped as IntPtr, [In] IsoContext as KISO_CONTEXT) as bool + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KUSB_IsoWritePipeDelegate([In] InterfaceHandle as KUSB_HANDLE, PipeID as byte, Buffer as IntPtr, BufferLength as int, Overlapped as IntPtr, [In] IsoContext as KISO_CONTEXT) as bool + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KUSB_GetCurrentFrameNumberDelegate([In] InterfaceHandle as KUSB_HANDLE, ref FrameNumber as int) as bool + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KUSB_GetOverlappedResultDelegate([In] InterfaceHandle as KUSB_HANDLE, Overlapped as IntPtr, ref lpNumberOfBytesTransferred as int, bWait as bool) as bool + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KUSB_GetPropertyDelegate([In] InterfaceHandle as KUSB_HANDLE, PropertyType as KUSB_PROPERTY, ref PropertySize as int, Value as IntPtr) as bool + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KHOT_PLUG_CB([In] HotHandle as KHOT_HANDLE, [In] DeviceInfo as KLST_DEVINFO_HANDLE, PlugType as KLST_SYNC_FLAG) as void + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KSTM_ERROR_CB([In] StreamInfo as KSTM_INFO, [In] XferContext as KSTM_XFER_CONTEXT, XferContextIndex as int, ErrorCode as int) as int + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KSTM_SUBMIT_CB([In] StreamInfo as KSTM_INFO, [In] XferContext as KSTM_XFER_CONTEXT, XferContextIndex as int, Overlapped as IntPtr) as int + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KSTM_STARTED_CB([In] StreamInfo as KSTM_INFO, [In] XferContext as KSTM_XFER_CONTEXT, XferContextIndex as int) as int + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KSTM_STOPPED_CB([In] StreamInfo as KSTM_INFO, [In] XferContext as KSTM_XFER_CONTEXT, XferContextIndex as int) as int + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KSTM_COMPLETE_CB([In] StreamInfo as KSTM_INFO, [In] XferContext as KSTM_XFER_CONTEXT, XferContextIndex as int, ErrorCode as int) as int + +[UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet: CharSet.Ansi, SetLastError: true)] +public callable KSTM_BEFORE_COMPLETE_CB([In] StreamInfo as KSTM_INFO, [In] XferContext as KSTM_XFER_CONTEXT, XferContextIndex as int, ref ErrorCode as int) as KSTM_COMPLETE_RESULT + +#endregion + +public class LstK(IDisposable): + + protected mHandleStruct as KLST_HANDLE + + protected mbDisposed as bool + + + protected def constructor(): + pass + + + #region IDisposable Members + + public virtual def Dispose(): + Dispose(true) + GC.SuppressFinalize(self) + + + #endregion + + def destructor(): + Dispose(false) + + + protected virtual def Dispose(disposing as bool): + if not mbDisposed: + if mHandleStruct.Pointer != IntPtr.Zero: + AllKFunctions.LstK_Free(mHandleStruct) + Debug.Print('{0} Dispose: Freed Handle:{1:X16}h Explicit:{2}', GetType().Name, mHandleStruct.Pointer.ToInt64(), disposing) + else: + Debug.Print('{0} Dispose: [WARNING] Handle is null', GetType().Name) + + mHandleStruct = KLST_HANDLE(IntPtr.Zero) + mbDisposed = true + + + protected def Init(Flags as KLST_FLAG) as bool: + success as bool = AllKFunctions.LstK_Init(mHandleStruct, Flags) + + if not success: + raise Exception(string.Format('{0} failed initializing. ErrorCode={1:X8}h', GetType().Name, Marshal.GetLastWin32Error())) + + Debug.Print('{0} Init: handle 0x{1:X16}', GetType().Name, mHandleStruct.Pointer.ToInt64()) + return true + + + protected def InitEx(Flags as KLST_FLAG, ref PatternMatch as KLST_PATTERN_MATCH) as bool: + success as bool = AllKFunctions.LstK_InitEx(mHandleStruct, Flags, PatternMatch) + + if not success: + raise Exception(string.Format('{0} failed initializing. ErrorCode={1:X8}h', GetType().Name, Marshal.GetLastWin32Error())) + + Debug.Print('{0} Init: handle 0x{1:X16}', GetType().Name, mHandleStruct.Pointer.ToInt64()) + return true + + + #region Public Members + + public def constructor(Flags as KLST_FLAG): + success as bool = AllKFunctions.LstK_Init(mHandleStruct, Flags) + + if not success: + raise Exception(string.Format('{0} failed initializing. ErrorCode={1:X8}h', GetType().Name, Marshal.GetLastWin32Error())) + + Debug.Print('{0} Init: handle 0x{1:X16}', GetType().Name, mHandleStruct.Pointer.ToInt64()) + + + public def constructor(Flags as KLST_FLAG, ref PatternMatch as KLST_PATTERN_MATCH): + success as bool = AllKFunctions.LstK_InitEx(mHandleStruct, Flags, PatternMatch) + + if not success: + raise Exception(string.Format('{0} failed initializing. ErrorCode={1:X8}h', GetType().Name, Marshal.GetLastWin32Error())) + + Debug.Print('{0} Init: handle 0x{1:X16}', GetType().Name, mHandleStruct.Pointer.ToInt64()) + + + public virtual def Count(ref Count as int) as bool: + return AllKFunctions.LstK_Count(mHandleStruct, Count) + + + public virtual def Current(ref DeviceInfo as KLST_DEVINFO_HANDLE) as bool: + return AllKFunctions.LstK_Current(mHandleStruct, DeviceInfo) + + + public virtual def Enumerate(EnumDevListCB as KLST_ENUM_DEVINFO_CB, Context as IntPtr) as bool: + return AllKFunctions.LstK_Enumerate(mHandleStruct, EnumDevListCB, Context) + + + public virtual def FindByVidPid(Vid as int, Pid as int, ref DeviceInfo as KLST_DEVINFO_HANDLE) as bool: + return AllKFunctions.LstK_FindByVidPid(mHandleStruct, Vid, Pid, DeviceInfo) + + + public virtual def Free(): + Dispose() + + + public Handle as KLST_HANDLE: + get: + return mHandleStruct + + + public virtual def MoveNext(ref DeviceInfo as KLST_DEVINFO_HANDLE) as bool: + return AllKFunctions.LstK_MoveNext(mHandleStruct, DeviceInfo) + + + public virtual def MoveReset(): + AllKFunctions.LstK_MoveReset(mHandleStruct) + + #endregion + + +public class HotK(IDisposable): + + protected mHandleStruct as KHOT_HANDLE + + protected mbDisposed as bool + + + protected def constructor(): + pass + + + #region IDisposable Members + + public virtual def Dispose(): + Dispose(true) + GC.SuppressFinalize(self) + + + #endregion + + def destructor(): + Dispose(false) + + + protected virtual def Dispose(disposing as bool): + if not mbDisposed: + if mHandleStruct.Pointer != IntPtr.Zero: + AllKFunctions.HotK_Free(mHandleStruct) + Debug.Print('{0} Dispose: Freed Handle:{1:X16}h Explicit:{2}', GetType().Name, mHandleStruct.Pointer.ToInt64(), disposing) + else: + Debug.Print('{0} Dispose: [WARNING] Handle is null', GetType().Name) + + mHandleStruct = KHOT_HANDLE(IntPtr.Zero) + mbDisposed = true + + + protected def Init(ref InitParams as KHOT_PARAMS) as bool: + success as bool = AllKFunctions.HotK_Init(mHandleStruct, InitParams) + + if not success: + raise Exception(string.Format('{0} failed initializing. ErrorCode={1:X8}h', GetType().Name, Marshal.GetLastWin32Error())) + + Debug.Print('{0} Init: handle 0x{1:X16}', GetType().Name, mHandleStruct.Pointer.ToInt64()) + return true + + + #region Public Members + + public def constructor(ref InitParams as KHOT_PARAMS): + success as bool = AllKFunctions.HotK_Init(mHandleStruct, InitParams) + + if not success: + raise Exception(string.Format('{0} failed initializing. ErrorCode={1:X8}h', GetType().Name, Marshal.GetLastWin32Error())) + + Debug.Print('{0} Init: handle 0x{1:X16}', GetType().Name, mHandleStruct.Pointer.ToInt64()) + + + public virtual def Free(): + Dispose() + + + public virtual def FreeAll(): + AllKFunctions.HotK_FreeAll() + + + public Handle as KHOT_HANDLE: + get: + return mHandleStruct + + #endregion + + +public class UsbK(IDisposable): + + protected driverAPI as KUSB_DRIVER_API + + protected mHandleStruct as KUSB_HANDLE + + protected mbDisposed as bool + + + protected def constructor(): + pass + + + #region IDisposable Members + + public virtual def Dispose(): + Dispose(true) + GC.SuppressFinalize(self) + + + #endregion + + def destructor(): + Dispose(false) + + + protected virtual def Dispose(disposing as bool): + if not mbDisposed: + if mHandleStruct.Pointer != IntPtr.Zero: + AllKFunctions.UsbK_Free(mHandleStruct) + Debug.Print('{0} Dispose: Freed Handle:{1:X16}h Explicit:{2}', GetType().Name, mHandleStruct.Pointer.ToInt64(), disposing) + else: + Debug.Print('{0} Dispose: [WARNING] Handle is null', GetType().Name) + + mHandleStruct = KUSB_HANDLE(IntPtr.Zero) + mbDisposed = true + + + protected def Init(DevInfo as KLST_DEVINFO_HANDLE) as bool: + success as bool = AllKFunctions.LibK_LoadDriverAPI(driverAPI, DevInfo.DriverID) + + if not success: + raise Exception(string.Format('{0} failed loading Driver API. ErrorCode={1:X8}h', GetType().Name, Marshal.GetLastWin32Error())) + + success = driverAPI.Init(mHandleStruct, DevInfo) + + if not success: + raise Exception(string.Format('{0} failed initializing usb device. ErrorCode={1:X8}h', GetType().Name, Marshal.GetLastWin32Error())) + + Debug.Print('{0} Init: handle 0x{1:X16}', GetType().Name, mHandleStruct.Pointer.ToInt64()) + return true + + + protected def Initialize(DeviceHandle as IntPtr, driverID as KUSB_DRVID) as bool: + success as bool = AllKFunctions.LibK_LoadDriverAPI(driverAPI, (driverID cast int)) + + if not success: + raise Exception(string.Format('{0} failed loading Driver API. ErrorCode={1:X8}h', GetType().Name, Marshal.GetLastWin32Error())) + + success = driverAPI.Initialize(DeviceHandle, mHandleStruct) + + if not success: + raise Exception(string.Format('{0} failed initializing usb device. ErrorCode={1:X8}h', GetType().Name, Marshal.GetLastWin32Error())) + + Debug.Print('{0} Init: handle 0x{1:X16}', GetType().Name, mHandleStruct.Pointer.ToInt64()) + return true + + + #region Public Members + + public def constructor(DevInfo as KLST_DEVINFO_HANDLE): + success as bool = AllKFunctions.LibK_LoadDriverAPI(driverAPI, DevInfo.DriverID) + + if not success: + raise Exception(string.Format('{0} failed loading Driver API. ErrorCode={1:X8}h', GetType().Name, Marshal.GetLastWin32Error())) + + success = driverAPI.Init(mHandleStruct, DevInfo) + + if not success: + raise Exception(string.Format('{0} failed initializing usb device. ErrorCode={1:X8}h', GetType().Name, Marshal.GetLastWin32Error())) + + Debug.Print('{0} Init: handle 0x{1:X16}', GetType().Name, mHandleStruct.Pointer.ToInt64()) + + + public def constructor(DeviceHandle as IntPtr, driverID as KUSB_DRVID): + success as bool = AllKFunctions.LibK_LoadDriverAPI(driverAPI, (driverID cast int)) + + if not success: + raise Exception(string.Format('{0} failed loading Driver API. ErrorCode={1:X8}h', GetType().Name, Marshal.GetLastWin32Error())) + + success = driverAPI.Initialize(DeviceHandle, mHandleStruct) + + if not success: + raise Exception(string.Format('{0} failed initializing usb device. ErrorCode={1:X8}h', GetType().Name, Marshal.GetLastWin32Error())) + + Debug.Print('{0} Init: handle 0x{1:X16}', GetType().Name, mHandleStruct.Pointer.ToInt64()) + + + public virtual def AbortPipe(PipeID as byte) as bool: + return driverAPI.AbortPipe(mHandleStruct, PipeID) + + + public virtual def ClaimInterface(NumberOrIndex as byte, IsIndex as bool) as bool: + return driverAPI.ClaimInterface(mHandleStruct, NumberOrIndex, IsIndex) + + + public virtual def Clone(ref DstInterfaceHandle as KUSB_HANDLE) as bool: + return driverAPI.Clone(mHandleStruct, DstInterfaceHandle) + + + public virtual def ControlTransfer(SetupPacket as WINUSB_SETUP_PACKET, Buffer as IntPtr, BufferLength as int, ref LengthTransferred as int, Overlapped as IntPtr) as bool: + return driverAPI.ControlTransfer(mHandleStruct, SetupPacket, Buffer, BufferLength, LengthTransferred, Overlapped) + + + public virtual def ControlTransfer(SetupPacket as WINUSB_SETUP_PACKET, Buffer as Array, BufferLength as int, ref LengthTransferred as int, Overlapped as IntPtr) as bool: + return driverAPI.ControlTransfer(mHandleStruct, SetupPacket, Marshal.UnsafeAddrOfPinnedArrayElement(Buffer, 0), BufferLength, LengthTransferred, Overlapped) + + + public virtual def ControlTransfer(SetupPacket as WINUSB_SETUP_PACKET, Buffer as Array, BufferLength as int, ref LengthTransferred as int, Overlapped as KOVL_HANDLE) as bool: + return driverAPI.ControlTransfer(mHandleStruct, SetupPacket, Marshal.UnsafeAddrOfPinnedArrayElement(Buffer, 0), BufferLength, LengthTransferred, Overlapped.Pointer) + + + public virtual def ControlTransfer(SetupPacket as WINUSB_SETUP_PACKET, Buffer as IntPtr, BufferLength as int, ref LengthTransferred as int, Overlapped as KOVL_HANDLE) as bool: + return driverAPI.ControlTransfer(mHandleStruct, SetupPacket, Buffer, BufferLength, LengthTransferred, Overlapped.Pointer) + + + public virtual def FlushPipe(PipeID as byte) as bool: + return driverAPI.FlushPipe(mHandleStruct, PipeID) + + + public virtual def Free(): + Dispose() + + + public virtual def GetAltInterface(NumberOrIndex as byte, IsIndex as bool, ref AltSettingNumber as byte) as bool: + return driverAPI.GetAltInterface(mHandleStruct, NumberOrIndex, IsIndex, AltSettingNumber) + + + public virtual def GetAssociatedInterface(AssociatedInterfaceIndex as byte, ref AssociatedInterfaceHandle as KUSB_HANDLE) as bool: + return driverAPI.GetAssociatedInterface(mHandleStruct, AssociatedInterfaceIndex, AssociatedInterfaceHandle) + + + public virtual def GetConfiguration(ref ConfigurationNumber as byte) as bool: + return driverAPI.GetConfiguration(mHandleStruct, ConfigurationNumber) + + + public virtual def GetCurrentAlternateSetting(ref AltSettingNumber as byte) as bool: + return driverAPI.GetCurrentAlternateSetting(mHandleStruct, AltSettingNumber) + + + public virtual def GetCurrentFrameNumber(ref FrameNumber as int) as bool: + return driverAPI.GetCurrentFrameNumber(mHandleStruct, FrameNumber) + + + public virtual def GetDescriptor(DescriptorType as byte, Index as byte, LanguageID as int, Buffer as IntPtr, BufferLength as int, ref LengthTransferred as int) as bool: + return driverAPI.GetDescriptor(mHandleStruct, DescriptorType, Index, (LanguageID cast ushort), Buffer, BufferLength, LengthTransferred) + + + public virtual def GetDescriptor(DescriptorType as byte, Index as byte, LanguageID as int, Buffer as Array, BufferLength as int, ref LengthTransferred as int) as bool: + return driverAPI.GetDescriptor(mHandleStruct, DescriptorType, Index, (LanguageID cast ushort), Marshal.UnsafeAddrOfPinnedArrayElement(Buffer, 0), BufferLength, LengthTransferred) + + + public virtual def GetOverlappedResult(Overlapped as IntPtr, ref lpNumberOfBytesTransferred as int, bWait as bool) as bool: + return driverAPI.GetOverlappedResult(mHandleStruct, Overlapped, lpNumberOfBytesTransferred, bWait) + + + public virtual def GetOverlappedResult(Overlapped as KOVL_HANDLE, ref lpNumberOfBytesTransferred as int, bWait as bool) as bool: + return driverAPI.GetOverlappedResult(mHandleStruct, Overlapped.Pointer, lpNumberOfBytesTransferred, bWait) + + + public virtual def GetPipePolicy(PipeID as byte, PolicyType as int, ref ValueLength as int, Value as IntPtr) as bool: + return driverAPI.GetPipePolicy(mHandleStruct, PipeID, PolicyType, ValueLength, Value) + + + public virtual def GetPipePolicy(PipeID as byte, PolicyType as int, ref ValueLength as int, Value as Array) as bool: + return driverAPI.GetPipePolicy(mHandleStruct, PipeID, PolicyType, ValueLength, Marshal.UnsafeAddrOfPinnedArrayElement(Value, 0)) + + + public virtual def GetPowerPolicy(PolicyType as int, ref ValueLength as int, Value as IntPtr) as bool: + return driverAPI.GetPowerPolicy(mHandleStruct, PolicyType, ValueLength, Value) + + + public virtual def GetPowerPolicy(PolicyType as int, ref ValueLength as int, Value as Array) as bool: + return driverAPI.GetPowerPolicy(mHandleStruct, PolicyType, ValueLength, Marshal.UnsafeAddrOfPinnedArrayElement(Value, 0)) + + + public virtual def GetProperty(PropertyType as KUSB_PROPERTY, ref PropertySize as int, Value as IntPtr) as bool: + return driverAPI.GetProperty(mHandleStruct, PropertyType, PropertySize, Value) + + + public virtual def GetProperty(PropertyType as KUSB_PROPERTY, ref PropertySize as int, Value as Array) as bool: + return driverAPI.GetProperty(mHandleStruct, PropertyType, PropertySize, Marshal.UnsafeAddrOfPinnedArrayElement(Value, 0)) + + + public Handle as KUSB_HANDLE: + get: + return mHandleStruct + + + public virtual def IsoReadPipe(PipeID as byte, Buffer as IntPtr, BufferLength as int, Overlapped as IntPtr, IsoContext as KISO_CONTEXT) as bool: + return driverAPI.IsoReadPipe(mHandleStruct, PipeID, Buffer, BufferLength, Overlapped, IsoContext) + + + public virtual def IsoReadPipe(PipeID as byte, Buffer as Array, BufferLength as int, Overlapped as IntPtr, IsoContext as KISO_CONTEXT) as bool: + return driverAPI.IsoReadPipe(mHandleStruct, PipeID, Marshal.UnsafeAddrOfPinnedArrayElement(Buffer, 0), BufferLength, Overlapped, IsoContext) + + + public virtual def IsoReadPipe(PipeID as byte, Buffer as Array, BufferLength as int, Overlapped as KOVL_HANDLE, IsoContext as KISO_CONTEXT) as bool: + return driverAPI.IsoReadPipe(mHandleStruct, PipeID, Marshal.UnsafeAddrOfPinnedArrayElement(Buffer, 0), BufferLength, Overlapped.Pointer, IsoContext) + + + public virtual def IsoReadPipe(PipeID as byte, Buffer as IntPtr, BufferLength as int, Overlapped as KOVL_HANDLE, IsoContext as KISO_CONTEXT) as bool: + return driverAPI.IsoReadPipe(mHandleStruct, PipeID, Buffer, BufferLength, Overlapped.Pointer, IsoContext) + + + public virtual def IsoWritePipe(PipeID as byte, Buffer as IntPtr, BufferLength as int, Overlapped as IntPtr, IsoContext as KISO_CONTEXT) as bool: + return driverAPI.IsoWritePipe(mHandleStruct, PipeID, Buffer, BufferLength, Overlapped, IsoContext) + + + public virtual def IsoWritePipe(PipeID as byte, Buffer as Array, BufferLength as int, Overlapped as IntPtr, IsoContext as KISO_CONTEXT) as bool: + return driverAPI.IsoWritePipe(mHandleStruct, PipeID, Marshal.UnsafeAddrOfPinnedArrayElement(Buffer, 0), BufferLength, Overlapped, IsoContext) + + + public virtual def IsoWritePipe(PipeID as byte, Buffer as Array, BufferLength as int, Overlapped as KOVL_HANDLE, IsoContext as KISO_CONTEXT) as bool: + return driverAPI.IsoWritePipe(mHandleStruct, PipeID, Marshal.UnsafeAddrOfPinnedArrayElement(Buffer, 0), BufferLength, Overlapped.Pointer, IsoContext) + + + public virtual def IsoWritePipe(PipeID as byte, Buffer as IntPtr, BufferLength as int, Overlapped as KOVL_HANDLE, IsoContext as KISO_CONTEXT) as bool: + return driverAPI.IsoWritePipe(mHandleStruct, PipeID, Buffer, BufferLength, Overlapped.Pointer, IsoContext) + + + public virtual def QueryDeviceInformation(InformationType as int, ref BufferLength as int, Buffer as IntPtr) as bool: + return driverAPI.QueryDeviceInformation(mHandleStruct, InformationType, BufferLength, Buffer) + + + public virtual def QueryInterfaceSettings(AltSettingIndex as byte, ref UsbAltInterfaceDescriptor as USB_INTERFACE_DESCRIPTOR) as bool: + return driverAPI.QueryInterfaceSettings(mHandleStruct, AltSettingIndex, UsbAltInterfaceDescriptor) + + + public virtual def QueryPipe(AltSettingNumber as byte, PipeIndex as byte, ref PipeInformation as WINUSB_PIPE_INFORMATION) as bool: + return driverAPI.QueryPipe(mHandleStruct, AltSettingNumber, PipeIndex, PipeInformation) + + + public virtual def ReadPipe(PipeID as byte, Buffer as IntPtr, BufferLength as int, ref LengthTransferred as int, Overlapped as IntPtr) as bool: + return driverAPI.ReadPipe(mHandleStruct, PipeID, Buffer, BufferLength, LengthTransferred, Overlapped) + + + public virtual def ReadPipe(PipeID as byte, Buffer as Array, BufferLength as int, ref LengthTransferred as int, Overlapped as IntPtr) as bool: + return driverAPI.ReadPipe(mHandleStruct, PipeID, Marshal.UnsafeAddrOfPinnedArrayElement(Buffer, 0), BufferLength, LengthTransferred, Overlapped) + + + public virtual def ReadPipe(PipeID as byte, Buffer as Array, BufferLength as int, ref LengthTransferred as int, Overlapped as KOVL_HANDLE) as bool: + return driverAPI.ReadPipe(mHandleStruct, PipeID, Marshal.UnsafeAddrOfPinnedArrayElement(Buffer, 0), BufferLength, LengthTransferred, Overlapped.Pointer) + + + public virtual def ReadPipe(PipeID as byte, Buffer as IntPtr, BufferLength as int, ref LengthTransferred as int, Overlapped as KOVL_HANDLE) as bool: + return driverAPI.ReadPipe(mHandleStruct, PipeID, Buffer, BufferLength, LengthTransferred, Overlapped.Pointer) + + + public virtual def ReleaseInterface(NumberOrIndex as byte, IsIndex as bool) as bool: + return driverAPI.ReleaseInterface(mHandleStruct, NumberOrIndex, IsIndex) + + + public virtual def ResetDevice() as bool: + return driverAPI.ResetDevice(mHandleStruct) + + + public virtual def ResetPipe(PipeID as byte) as bool: + return driverAPI.ResetPipe(mHandleStruct, PipeID) + + + public virtual def SelectInterface(NumberOrIndex as byte, IsIndex as bool) as bool: + return driverAPI.SelectInterface(mHandleStruct, NumberOrIndex, IsIndex) + + + public virtual def SetAltInterface(NumberOrIndex as byte, IsIndex as bool, AltSettingNumber as byte) as bool: + return driverAPI.SetAltInterface(mHandleStruct, NumberOrIndex, IsIndex, AltSettingNumber) + + + public virtual def SetConfiguration(ConfigurationNumber as byte) as bool: + return driverAPI.SetConfiguration(mHandleStruct, ConfigurationNumber) + + + public virtual def SetCurrentAlternateSetting(AltSettingNumber as byte) as bool: + return driverAPI.SetCurrentAlternateSetting(mHandleStruct, AltSettingNumber) + + + public virtual def SetPipePolicy(PipeID as byte, PolicyType as int, ValueLength as int, Value as IntPtr) as bool: + return driverAPI.SetPipePolicy(mHandleStruct, PipeID, PolicyType, ValueLength, Value) + + + public virtual def SetPipePolicy(PipeID as byte, PolicyType as int, ValueLength as int, Value as Array) as bool: + return driverAPI.SetPipePolicy(mHandleStruct, PipeID, PolicyType, ValueLength, Marshal.UnsafeAddrOfPinnedArrayElement(Value, 0)) + + + public virtual def SetPowerPolicy(PolicyType as int, ValueLength as int, Value as IntPtr) as bool: + return driverAPI.SetPowerPolicy(mHandleStruct, PolicyType, ValueLength, Value) + + + public virtual def SetPowerPolicy(PolicyType as int, ValueLength as int, Value as Array) as bool: + return driverAPI.SetPowerPolicy(mHandleStruct, PolicyType, ValueLength, Marshal.UnsafeAddrOfPinnedArrayElement(Value, 0)) + + + public virtual def WritePipe(PipeID as byte, Buffer as IntPtr, BufferLength as int, ref LengthTransferred as int, Overlapped as IntPtr) as bool: + return driverAPI.WritePipe(mHandleStruct, PipeID, Buffer, BufferLength, LengthTransferred, Overlapped) + + + public virtual def WritePipe(PipeID as byte, Buffer as Array, BufferLength as int, ref LengthTransferred as int, Overlapped as IntPtr) as bool: + return driverAPI.WritePipe(mHandleStruct, PipeID, Marshal.UnsafeAddrOfPinnedArrayElement(Buffer, 0), BufferLength, LengthTransferred, Overlapped) + + + public virtual def WritePipe(PipeID as byte, Buffer as Array, BufferLength as int, ref LengthTransferred as int, Overlapped as KOVL_HANDLE) as bool: + return driverAPI.WritePipe(mHandleStruct, PipeID, Marshal.UnsafeAddrOfPinnedArrayElement(Buffer, 0), BufferLength, LengthTransferred, Overlapped.Pointer) + + + public virtual def WritePipe(PipeID as byte, Buffer as IntPtr, BufferLength as int, ref LengthTransferred as int, Overlapped as KOVL_HANDLE) as bool: + return driverAPI.WritePipe(mHandleStruct, PipeID, Buffer, BufferLength, LengthTransferred, Overlapped.Pointer) + + #endregion + + +public class OvlK(IDisposable): + + protected mHandleStruct as KOVL_POOL_HANDLE + + protected mbDisposed as bool + + + protected def constructor(): + pass + + + #region IDisposable Members + + public virtual def Dispose(): + Dispose(true) + GC.SuppressFinalize(self) + + + #endregion + + def destructor(): + Dispose(false) + + + protected virtual def Dispose(disposing as bool): + if not mbDisposed: + if mHandleStruct.Pointer != IntPtr.Zero: + AllKFunctions.OvlK_Free(mHandleStruct) + Debug.Print('{0} Dispose: Freed Handle:{1:X16}h Explicit:{2}', GetType().Name, mHandleStruct.Pointer.ToInt64(), disposing) + else: + Debug.Print('{0} Dispose: [WARNING] Handle is null', GetType().Name) + + mHandleStruct = KOVL_POOL_HANDLE(IntPtr.Zero) + mbDisposed = true + + + protected def Init(UsbHandle as KUSB_HANDLE, MaxOverlappedCount as int, Flags as KOVL_POOL_FLAG) as bool: + success as bool = AllKFunctions.OvlK_Init(mHandleStruct, UsbHandle, MaxOverlappedCount, Flags) + + if not success: + raise Exception(string.Format('{0} failed initializing. ErrorCode={1:X8}h', GetType().Name, Marshal.GetLastWin32Error())) + + Debug.Print('{0} Init: handle 0x{1:X16}', GetType().Name, mHandleStruct.Pointer.ToInt64()) + return true + + + #region Public Members + + public def constructor(UsbHandle as KUSB_HANDLE, MaxOverlappedCount as int, Flags as KOVL_POOL_FLAG): + success as bool = AllKFunctions.OvlK_Init(mHandleStruct, UsbHandle, MaxOverlappedCount, Flags) + + if not success: + raise Exception(string.Format('{0} failed initializing. ErrorCode={1:X8}h', GetType().Name, Marshal.GetLastWin32Error())) + + Debug.Print('{0} Init: handle 0x{1:X16}', GetType().Name, mHandleStruct.Pointer.ToInt64()) + + + public virtual def Acquire(ref OverlappedK as KOVL_HANDLE) as bool: + return AllKFunctions.OvlK_Acquire(OverlappedK, mHandleStruct) + + + public virtual def Free(): + Dispose() + + + public virtual def GetEventHandle(OverlappedK as KOVL_HANDLE) as IntPtr: + return AllKFunctions.OvlK_GetEventHandle(OverlappedK) + + + public Handle as KOVL_POOL_HANDLE: + get: + return mHandleStruct + + + public virtual def IsComplete(OverlappedK as KOVL_HANDLE) as bool: + return AllKFunctions.OvlK_IsComplete(OverlappedK) + + + public virtual def ReUse(OverlappedK as KOVL_HANDLE) as bool: + return AllKFunctions.OvlK_ReUse(OverlappedK) + + + public virtual def Release(OverlappedK as KOVL_HANDLE) as bool: + return AllKFunctions.OvlK_Release(OverlappedK) + + + public virtual def Wait(OverlappedK as KOVL_HANDLE, TimeoutMS as int, WaitFlags as KOVL_WAIT_FLAG, ref TransferredLength as int) as bool: + return AllKFunctions.OvlK_Wait(OverlappedK, TimeoutMS, WaitFlags, TransferredLength) + + + public virtual def WaitAndRelease(OverlappedK as KOVL_HANDLE, TimeoutMS as int, ref TransferredLength as int) as bool: + return AllKFunctions.OvlK_WaitAndRelease(OverlappedK, TimeoutMS, TransferredLength) + + + public virtual def WaitOldest(ref OverlappedK as KOVL_HANDLE, TimeoutMS as int, WaitFlags as KOVL_WAIT_FLAG, ref TransferredLength as int) as bool: + return AllKFunctions.OvlK_WaitOldest(mHandleStruct, OverlappedK, TimeoutMS, WaitFlags, TransferredLength) + + + public virtual def WaitOrCancel(OverlappedK as KOVL_HANDLE, TimeoutMS as int, ref TransferredLength as int) as bool: + return AllKFunctions.OvlK_WaitOrCancel(OverlappedK, TimeoutMS, TransferredLength) + + #endregion + + +public class StmK(IDisposable): + + protected mHandleStruct as KSTM_HANDLE + + protected mbDisposed as bool + + + protected def constructor(): + pass + + + #region IDisposable Members + + public virtual def Dispose(): + Dispose(true) + GC.SuppressFinalize(self) + + + #endregion + + def destructor(): + Dispose(false) + + + protected virtual def Dispose(disposing as bool): + if not mbDisposed: + if mHandleStruct.Pointer != IntPtr.Zero: + AllKFunctions.StmK_Free(mHandleStruct) + Debug.Print('{0} Dispose: Freed Handle:{1:X16}h Explicit:{2}', GetType().Name, mHandleStruct.Pointer.ToInt64(), disposing) + else: + Debug.Print('{0} Dispose: [WARNING] Handle is null', GetType().Name) + + mHandleStruct = KSTM_HANDLE(IntPtr.Zero) + mbDisposed = true + + + protected def Init(UsbHandle as KUSB_HANDLE, PipeID as byte, MaxTransferSize as int, MaxPendingTransfers as int, MaxPendingIO as int, ref Callbacks as KSTM_CALLBACK, Flags as KSTM_FLAG) as bool: + success as bool = AllKFunctions.StmK_Init(mHandleStruct, UsbHandle, PipeID, MaxTransferSize, MaxPendingTransfers, MaxPendingIO, Callbacks, Flags) + + if not success: + raise Exception(string.Format('{0} failed initializing. ErrorCode={1:X8}h', GetType().Name, Marshal.GetLastWin32Error())) + + Debug.Print('{0} Init: handle 0x{1:X16}', GetType().Name, mHandleStruct.Pointer.ToInt64()) + return true + + + #region Public Members + + public def constructor(UsbHandle as KUSB_HANDLE, PipeID as byte, MaxTransferSize as int, MaxPendingTransfers as int, MaxPendingIO as int, ref Callbacks as KSTM_CALLBACK, Flags as KSTM_FLAG): + success as bool = AllKFunctions.StmK_Init(mHandleStruct, UsbHandle, PipeID, MaxTransferSize, MaxPendingTransfers, MaxPendingIO, Callbacks, Flags) + + if not success: + raise Exception(string.Format('{0} failed initializing. ErrorCode={1:X8}h', GetType().Name, Marshal.GetLastWin32Error())) + + Debug.Print('{0} Init: handle 0x{1:X16}', GetType().Name, mHandleStruct.Pointer.ToInt64()) + + + public virtual def Free(): + Dispose() + + + public Handle as KSTM_HANDLE: + get: + return mHandleStruct + + + public virtual def Read(Buffer as IntPtr, Offset as int, Length as int, ref TransferredLength as int) as bool: + return AllKFunctions.StmK_Read(mHandleStruct, Buffer, Offset, Length, TransferredLength) + + + public virtual def Read(Buffer as Array, Offset as int, Length as int, ref TransferredLength as int) as bool: + return AllKFunctions.StmK_Read(mHandleStruct, Marshal.UnsafeAddrOfPinnedArrayElement(Buffer, 0), Offset, Length, TransferredLength) + + + public virtual def Start() as bool: + return AllKFunctions.StmK_Start(mHandleStruct) + + + public virtual def Stop(TimeoutCancelMS as int) as bool: + return AllKFunctions.StmK_Stop(mHandleStruct, TimeoutCancelMS) + + + public virtual def Write(Buffer as IntPtr, Offset as int, Length as int, ref TransferredLength as int) as bool: + return AllKFunctions.StmK_Write(mHandleStruct, Buffer, Offset, Length, TransferredLength) + + + public virtual def Write(Buffer as Array, Offset as int, Length as int, ref TransferredLength as int) as bool: + return AllKFunctions.StmK_Write(mHandleStruct, Marshal.UnsafeAddrOfPinnedArrayElement(Buffer, 0), Offset, Length, TransferredLength) + + #endregion + + +public class IsoK(IDisposable): + + protected mHandleStruct as KISO_CONTEXT + + protected mbDisposed as bool + + + protected def constructor(): + pass + + + #region IDisposable Members + + public virtual def Dispose(): + Dispose(true) + GC.SuppressFinalize(self) + + + #endregion + + def destructor(): + Dispose(false) + + + protected virtual def Dispose(disposing as bool): + if not mbDisposed: + if mHandleStruct.Pointer != IntPtr.Zero: + AllKFunctions.IsoK_Free(mHandleStruct) + Debug.Print('{0} Dispose: Freed Handle:{1:X16}h Explicit:{2}', GetType().Name, mHandleStruct.Pointer.ToInt64(), disposing) + else: + Debug.Print('{0} Dispose: [WARNING] Handle is null', GetType().Name) + + mHandleStruct = KISO_CONTEXT(IntPtr.Zero) + mbDisposed = true + + + protected def Init(NumberOfPackets as int, StartFrame as int) as bool: + success as bool = AllKFunctions.IsoK_Init(mHandleStruct, NumberOfPackets, StartFrame) + + if not success: + raise Exception(string.Format('{0} failed initializing. ErrorCode={1:X8}h', GetType().Name, Marshal.GetLastWin32Error())) + + Debug.Print('{0} Init: handle 0x{1:X16}', GetType().Name, mHandleStruct.Pointer.ToInt64()) + return true + + + #region Nested Structs + + [StructLayout(LayoutKind.Sequential, CharSet: CharSet.Ansi, Pack: 1)] + private struct KISO_CONTEXT_MAP: + + private final Flags as KISO_FLAG + + + private final StartFrame as int + + + private final ErrorCount as short + + + private final NumberOfPackets as short + + + private final UrbHdrStatus as int + + + #endregion + + #region Public Members + + public def constructor(NumberOfPackets as int, StartFrame as int): + success as bool = AllKFunctions.IsoK_Init(mHandleStruct, NumberOfPackets, StartFrame) + + if not success: + raise Exception(string.Format('{0} failed initializing. ErrorCode={1:X8}h', GetType().Name, Marshal.GetLastWin32Error())) + + Debug.Print('{0} Init: handle 0x{1:X16}', GetType().Name, mHandleStruct.Pointer.ToInt64()) + + + public virtual def EnumPackets(EnumPackets as KISO_ENUM_PACKETS_CB, StartPacketIndex as int, UserState as IntPtr) as bool: + return AllKFunctions.IsoK_EnumPackets(mHandleStruct, EnumPackets, StartPacketIndex, UserState) + + + public ErrorCount as short: + get: + return Marshal.ReadInt16(mHandleStruct.Pointer, ofsErrorCount) + set: + Marshal.WriteInt16(mHandleStruct.Pointer, ofsErrorCount, value) + + + public Flags as KISO_FLAG: + get: + return (Marshal.ReadInt32(mHandleStruct.Pointer, ofsFlags) cast KISO_FLAG) + set: + Marshal.WriteInt32(mHandleStruct.Pointer, ofsFlags, (value cast int)) + + + public virtual def Free(): + Dispose() + + + public virtual def GetPacket(PacketIndex as int, ref IsoPacket as KISO_PACKET) as bool: + return AllKFunctions.IsoK_GetPacket(mHandleStruct, PacketIndex, IsoPacket) + + + public Handle as KISO_CONTEXT: + get: + return mHandleStruct + + + public NumberOfPackets as short: + get: + return Marshal.ReadInt16(mHandleStruct.Pointer, ofsNumberOfPackets) + set: + Marshal.WriteInt16(mHandleStruct.Pointer, ofsNumberOfPackets, value) + + + public virtual def ReUse() as bool: + return AllKFunctions.IsoK_ReUse(mHandleStruct) + + + public virtual def SetPacket(PacketIndex as int, ref IsoPacket as KISO_PACKET) as bool: + return AllKFunctions.IsoK_SetPacket(mHandleStruct, PacketIndex, IsoPacket) + + + public virtual def SetPackets(PacketSize as int) as bool: + return AllKFunctions.IsoK_SetPackets(mHandleStruct, PacketSize) + + + public StartFrame as int: + get: + return Marshal.ReadInt32(mHandleStruct.Pointer, ofsStartFrame) + set: + Marshal.WriteInt32(mHandleStruct.Pointer, ofsStartFrame, value) + + + public UrbHdrStatus as int: + get: + return Marshal.ReadInt32(mHandleStruct.Pointer, ofsUrbHdrStatus) + set: + Marshal.WriteInt32(mHandleStruct.Pointer, ofsUrbHdrStatus, value) + + + #endregion + + #region Private Members + + private static final ofsErrorCount as int = Marshal.OffsetOf(typeof(KISO_CONTEXT_MAP), 'ErrorCount').ToInt32() + + private static final ofsFlags as int = Marshal.OffsetOf(typeof(KISO_CONTEXT_MAP), 'Flags').ToInt32() + + private static final ofsNumberOfPackets as int = Marshal.OffsetOf(typeof(KISO_CONTEXT_MAP), 'NumberOfPackets').ToInt32() + + private static final ofsStartFrame as int = Marshal.OffsetOf(typeof(KISO_CONTEXT_MAP), 'StartFrame').ToInt32() + + private static final ofsUrbHdrStatus as int = Marshal.OffsetOf(typeof(KISO_CONTEXT_MAP), 'UrbHdrStatus').ToInt32() + + #endregion + diff --git a/Old Matlab Interface/bindings/libusbK.cs b/Old Matlab Interface/bindings/libusbK.cs new file mode 100644 index 00000000..80402b0e --- /dev/null +++ b/Old Matlab Interface/bindings/libusbK.cs @@ -0,0 +1,3836 @@ +#region Copyright (c) Travis Robinson + +// Copyright (c) 2012 Travis Robinson +// All rights reserved. +// +// C# libusbK Bindings +// Auto-generated on: 04.28.2011 +// +// 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. +// +// 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 TRAVIS LEE ROBINSON +// 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. + +#endregion + +using System; +using System.Diagnostics; +using System.Runtime.InteropServices; + +// ReSharper disable InconsistentNaming +// ReSharper disable CheckNamespace +// ReSharper disable UnassignedReadonlyField + +namespace libusbK +{ + public static class AllKOptions + { + #region Public Members + + /// + /// Alternate libusbK library to use. This must be assigned before any libusbK functions are called and it must be the full path and file name to a libusbK.dll. + /// + public static string LIBUSBK_FULLPATH_TO_ALTERNATE_DLL; + + #endregion + } + + public static class AllKConstants + { + #region Public Members + + /// + /// Allocated length for all strings in a \ref KLST_DEVINFO structure. + /// + public const int KLST_STRING_MAX_LEN = 256; + + /// + /// libusbK library + /// + public const string LIBUSBK_DLL = "libusbK.dll"; + + /// + /// Config power mask for the \c bmAttributes field of a \ref USB_CONFIGURATION_DESCRIPTOR + /// + public const byte USB_CONFIG_POWERED_MASK = 0xC0; + + /// + /// Endpoint address mask for the \c bEndpointAddress field of a \ref USB_ENDPOINT_DESCRIPTOR + /// + public const byte USB_ENDPOINT_ADDRESS_MASK = 0x0F; + + /// + /// Endpoint direction mask for the \c bEndpointAddress field of a \ref USB_ENDPOINT_DESCRIPTOR + /// + public const byte USB_ENDPOINT_DIRECTION_MASK = 0x80; + + #endregion + } + + public enum PipePolicyType + { + SHORT_PACKET_TERMINATE = 0x01, + AUTO_CLEAR_STALL = 0x02, + PIPE_TRANSFER_TIMEOUT = 0x03, + IGNORE_SHORT_PACKETS = 0x04, + ALLOW_PARTIAL_READS = 0x05, + AUTO_FLUSH = 0x06, + RAW_IO = 0x07, + MAXIMUM_TRANSFER_SIZE = 0x08, + RESET_PIPE_ON_RESUME = 0x09, + + ISO_START_LATENCY = 0x20, + ISO_ALWAYS_START_ASAP = 0x21, + ISO_NUM_FIXED_PACKETS = 0x22, + + SIMUL_PARALLEL_REQUESTS = 0x30, + } + + public enum PowerPolicyType + { + AUTO_SUSPEND = 0x81, + SUSPEND_DELAY = 0x83, + } + + public enum DeviceInformationType + { + DEVICE_SPEED = 0x01, + } + + public enum EndpointType + { + /// + /// Indicates a control endpoint + /// + CONTROL = 0x00, + + /// + /// Indicates an isochronous endpoint + /// + ISOCHRONOUS = 0x01, + + /// + /// Indicates a bulk endpoint + /// + BULK = 0x02, + + /// + /// Indicates an interrupt endpoint + /// + INTERRUPT = 0x03, + + /// + /// Endpoint type mask for the \c bmAttributes field of a \ref USB_ENDPOINT_DESCRIPTOR + /// + MASK = 0x03, + } + + public static class ErrorCodes + { + #region Public Members + + /// + /// Access is denied. + /// + public const int AccessDenied = 5; + + /// + /// The requested resource is in use. + /// + public const int Busy = 170; + + /// + /// The operation was canceled by the user. + /// + public const int Cancelled = 1223; + + /// + /// The library, drive, or media pool is empty. + /// + public const int Empty = 4306; + + /// + /// The handle is invalid. + /// + public const int InvalidHandle = 6; + + /// + /// The parameter is incorrect. + /// + public const int InvalidParameter = 87; + + /// + /// Overlapped I/O event is not in a signaled state. + /// + public const int IoIncomplete = 996; + + /// + /// Overlapped I/O operation is in progress. + /// + public const int IoPending = 997; + + /// + /// More data is available. + /// + public const int MoreData = 234; + + /// + /// No more data is available. + /// + public const int NoMoreItems = 259; + + /// + /// Not enough storage is available to process this command. + /// + public const int NotEnoughMemory = 8; + + /// + /// Element not found. + /// + public const int NotFound = 1168; + + /// + /// The request is not supported. + /// + public const int NotSupported = 50; + + /// + /// The I/O operation has been aborted because of either a thread exit or an application request. + /// + public const int OperationAborted = 995; + + /// + /// The cluster resource is not available. + /// + public const int ResourceNotAvailable = 5006; + + /// + /// The cluster resource could not be found. + /// + public const int ResourceNotFound = 5007; + + /// + /// The semaphore timeout period has expired. + /// + public const int SemTimeout = 121; + + /// + /// The operation completed successfully. + /// + public const int Success = 0; + + /// + /// An attempt was made to operate on a thread within a specific process, but the thread specified is not in the process specified. + /// + public const int ThreadNotInProcess = 566; + + /// + /// A thread termination occurred while the thread was suspended. The thread was resumed, and termination proceeded. + /// + public const int ThreadWasSuspended = 699; + + /// + /// Too many dynamic-link modules are attached to this program or dynamic-link module. + /// + public const int TooManyModules = 214; + + #endregion + } + + public interface IKLIB_HANDLE + { + #region Public Members + + IntPtr GetContext(); + KLIB_HANDLE_TYPE HandleType { get; } + IntPtr Pointer { get; } + bool SetCleanupCallback(KLIB_HANDLE_CLEANUP_CB CleanupCallback); + bool SetContext(IntPtr UserContext); + + #endregion + } + + #region Opaque library handles + + public struct KLST_HANDLE : IKLIB_HANDLE + { + #region IKLIB_HANDLE Members + + public IntPtr Pointer + { + get + { + return mHandlePtr; + } + } + + public KLIB_HANDLE_TYPE HandleType + { + get + { + return KLIB_HANDLE_TYPE.LSTK; + } + } + + public IntPtr GetContext() + { + return AllKFunctions.LibK_GetContext(mHandlePtr, HandleType); + } + + public bool SetContext(IntPtr UserContext) + { + return AllKFunctions.LibK_SetContext(mHandlePtr, HandleType, UserContext); + } + + public bool SetCleanupCallback(KLIB_HANDLE_CLEANUP_CB CleanupCallback) + { + return AllKFunctions.LibK_SetCleanupCallback(mHandlePtr, HandleType, CleanupCallback); + } + + #endregion + + #region Public Members + + public KLST_HANDLE(IntPtr Handle) + { + mHandlePtr = Handle; + } + + #endregion + + #region Private Members + + private readonly IntPtr mHandlePtr; + + #endregion + } + + public struct KHOT_HANDLE : IKLIB_HANDLE + { + #region IKLIB_HANDLE Members + + public IntPtr Pointer + { + get + { + return mHandlePtr; + } + } + + public KLIB_HANDLE_TYPE HandleType + { + get + { + return KLIB_HANDLE_TYPE.HOTK; + } + } + + public IntPtr GetContext() + { + return AllKFunctions.LibK_GetContext(mHandlePtr, HandleType); + } + + public bool SetContext(IntPtr UserContext) + { + return AllKFunctions.LibK_SetContext(mHandlePtr, HandleType, UserContext); + } + + public bool SetCleanupCallback(KLIB_HANDLE_CLEANUP_CB CleanupCallback) + { + return AllKFunctions.LibK_SetCleanupCallback(mHandlePtr, HandleType, CleanupCallback); + } + + #endregion + + #region Public Members + + public KHOT_HANDLE(IntPtr Handle) + { + mHandlePtr = Handle; + } + + #endregion + + #region Private Members + + private readonly IntPtr mHandlePtr; + + #endregion + } + + public struct KUSB_HANDLE : IKLIB_HANDLE + { + #region IKLIB_HANDLE Members + + public IntPtr Pointer + { + get + { + return mHandlePtr; + } + } + + public KLIB_HANDLE_TYPE HandleType + { + get + { + return KLIB_HANDLE_TYPE.USBK; + } + } + + public IntPtr GetContext() + { + return AllKFunctions.LibK_GetContext(mHandlePtr, HandleType); + } + + public bool SetContext(IntPtr UserContext) + { + return AllKFunctions.LibK_SetContext(mHandlePtr, HandleType, UserContext); + } + + public bool SetCleanupCallback(KLIB_HANDLE_CLEANUP_CB CleanupCallback) + { + return AllKFunctions.LibK_SetCleanupCallback(mHandlePtr, HandleType, CleanupCallback); + } + + #endregion + + #region USB Shared Device Context + + public IntPtr GetSharedContext() + { + return AllKFunctions.LibK_GetContext(mHandlePtr, KLIB_HANDLE_TYPE.USBSHAREDK); + } + + public bool SetSharedCleanupCallback(KLIB_HANDLE_CLEANUP_CB CleanupCallback) + { + return AllKFunctions.LibK_SetCleanupCallback(mHandlePtr, KLIB_HANDLE_TYPE.USBSHAREDK, CleanupCallback); + } + + public bool SetSharedContext(IntPtr UserContext) + { + return AllKFunctions.LibK_SetContext(mHandlePtr, KLIB_HANDLE_TYPE.USBSHAREDK, UserContext); + } + + #endregion + + #region Public Members + + public KUSB_HANDLE(IntPtr Handle) + { + mHandlePtr = Handle; + } + + #endregion + + #region Private Members + + private readonly IntPtr mHandlePtr; + + #endregion + } + + public struct KOVL_POOL_HANDLE : IKLIB_HANDLE + { + #region IKLIB_HANDLE Members + + public IntPtr Pointer + { + get + { + return mHandlePtr; + } + } + + public KLIB_HANDLE_TYPE HandleType + { + get + { + return KLIB_HANDLE_TYPE.OVLPOOLK; + } + } + + public IntPtr GetContext() + { + return AllKFunctions.LibK_GetContext(mHandlePtr, HandleType); + } + + public bool SetContext(IntPtr UserContext) + { + return AllKFunctions.LibK_SetContext(mHandlePtr, HandleType, UserContext); + } + + public bool SetCleanupCallback(KLIB_HANDLE_CLEANUP_CB CleanupCallback) + { + return AllKFunctions.LibK_SetCleanupCallback(mHandlePtr, HandleType, CleanupCallback); + } + + #endregion + + #region Public Members + + public KOVL_POOL_HANDLE(IntPtr Handle) + { + mHandlePtr = Handle; + } + + #endregion + + #region Private Members + + private readonly IntPtr mHandlePtr; + + #endregion + } + + public struct KOVL_HANDLE : IKLIB_HANDLE + { + #region IKLIB_HANDLE Members + + public IntPtr Pointer + { + get + { + return mHandlePtr; + } + } + + public KLIB_HANDLE_TYPE HandleType + { + get + { + return KLIB_HANDLE_TYPE.OVLK; + } + } + + public IntPtr GetContext() + { + return AllKFunctions.LibK_GetContext(mHandlePtr, HandleType); + } + + public bool SetContext(IntPtr UserContext) + { + return AllKFunctions.LibK_SetContext(mHandlePtr, HandleType, UserContext); + } + + public bool SetCleanupCallback(KLIB_HANDLE_CLEANUP_CB CleanupCallback) + { + return AllKFunctions.LibK_SetCleanupCallback(mHandlePtr, HandleType, CleanupCallback); + } + + #endregion + + #region Public Members + + public KOVL_HANDLE(IntPtr Handle) + { + mHandlePtr = Handle; + } + + #endregion + + #region Private Members + + private readonly IntPtr mHandlePtr; + + #endregion + } + + public struct KSTM_HANDLE : IKLIB_HANDLE + { + #region IKLIB_HANDLE Members + + public IntPtr Pointer + { + get + { + return mHandlePtr; + } + } + + public KLIB_HANDLE_TYPE HandleType + { + get + { + return KLIB_HANDLE_TYPE.STMK; + } + } + + public IntPtr GetContext() + { + return AllKFunctions.LibK_GetContext(mHandlePtr, HandleType); + } + + public bool SetContext(IntPtr UserContext) + { + return AllKFunctions.LibK_SetContext(mHandlePtr, HandleType, UserContext); + } + + public bool SetCleanupCallback(KLIB_HANDLE_CLEANUP_CB CleanupCallback) + { + return AllKFunctions.LibK_SetCleanupCallback(mHandlePtr, HandleType, CleanupCallback); + } + + #endregion + + #region Public Members + + public KSTM_HANDLE(IntPtr Handle) + { + mHandlePtr = Handle; + } + + #endregion + + #region Private Members + + private readonly IntPtr mHandlePtr; + + #endregion + } + + #endregion + + #region Internal Function Imports + + internal static class AllKFunctions + { + #region Delegates + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate void HotK_FreeAllDelegate(); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool HotK_FreeDelegate([In] KHOT_HANDLE Handle); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool HotK_InitDelegate([Out] out KHOT_HANDLE Handle, [In, Out] ref KHOT_PARAMS InitParams); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool IsoK_EnumPacketsDelegate([In] KISO_CONTEXT IsoContext, KISO_ENUM_PACKETS_CB EnumPackets, int StartPacketIndex, IntPtr UserState); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool IsoK_FreeDelegate([In] KISO_CONTEXT IsoContext); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool IsoK_GetPacketDelegate([In] KISO_CONTEXT IsoContext, int PacketIndex, [Out] out KISO_PACKET IsoPacket); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool IsoK_InitDelegate([Out] out KISO_CONTEXT IsoContext, int NumberOfPackets, int StartFrame); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool IsoK_ReUseDelegate([In] KISO_CONTEXT IsoContext); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool IsoK_SetPacketDelegate([In] KISO_CONTEXT IsoContext, int PacketIndex, [In] ref KISO_PACKET IsoPacket); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool IsoK_SetPacketsDelegate([In] KISO_CONTEXT IsoContext, int PacketSize); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate void LibK_Context_FreeDelegate(); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool LibK_Context_InitDelegate(IntPtr Heap, IntPtr Reserved); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool LibK_CopyDriverAPIDelegate([Out] out KUSB_DRIVER_API DriverAPI, [In] KUSB_HANDLE UsbHandle); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate IntPtr LibK_GetContextDelegate([In] IntPtr Handle, KLIB_HANDLE_TYPE HandleType); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate IntPtr LibK_GetDefaultContextDelegate(KLIB_HANDLE_TYPE HandleType); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool LibK_GetProcAddressDelegate(IntPtr ProcAddress, int DriverID, int FunctionID); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate void LibK_GetVersionDelegate([Out] out KLIB_VERSION Version); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool LibK_LoadDriverAPIDelegate([Out] out KUSB_DRIVER_API DriverAPI, int DriverID); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool LibK_SetCleanupCallbackDelegate([In] IntPtr Handle, KLIB_HANDLE_TYPE HandleType, KLIB_HANDLE_CLEANUP_CB CleanupCB); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool LibK_SetContextDelegate([In] IntPtr Handle, KLIB_HANDLE_TYPE HandleType, IntPtr ContextValue); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool LibK_SetDefaultContextDelegate(KLIB_HANDLE_TYPE HandleType, IntPtr ContextValue); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool LstK_CountDelegate([In] KLST_HANDLE DeviceList, ref int Count); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool LstK_CurrentDelegate([In] KLST_HANDLE DeviceList, [Out] out KLST_DEVINFO_HANDLE DeviceInfo); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool LstK_EnumerateDelegate([In] KLST_HANDLE DeviceList, KLST_ENUM_DEVINFO_CB EnumDevListCB, IntPtr Context); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool LstK_FindByVidPidDelegate([In] KLST_HANDLE DeviceList, int Vid, int Pid, [Out] out KLST_DEVINFO_HANDLE DeviceInfo); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool LstK_FreeDelegate([In] KLST_HANDLE DeviceList); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool LstK_InitDelegate([Out] out KLST_HANDLE DeviceList, KLST_FLAG Flags); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool LstK_InitExDelegate([Out] out KLST_HANDLE DeviceList, KLST_FLAG Flags, [In] ref KLST_PATTERN_MATCH PatternMatch); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool LstK_MoveNextDelegate([In] KLST_HANDLE DeviceList, [Out] out KLST_DEVINFO_HANDLE DeviceInfo); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate void LstK_MoveResetDelegate([In] KLST_HANDLE DeviceList); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool OvlK_AcquireDelegate([Out] out KOVL_HANDLE OverlappedK, [In] KOVL_POOL_HANDLE PoolHandle); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool OvlK_FreeDelegate([In] KOVL_POOL_HANDLE PoolHandle); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate IntPtr OvlK_GetEventHandleDelegate([In] KOVL_HANDLE OverlappedK); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool OvlK_InitDelegate([Out] out KOVL_POOL_HANDLE PoolHandle, [In] KUSB_HANDLE UsbHandle, int MaxOverlappedCount, KOVL_POOL_FLAG Flags); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool OvlK_IsCompleteDelegate([In] KOVL_HANDLE OverlappedK); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool OvlK_ReUseDelegate([In] KOVL_HANDLE OverlappedK); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool OvlK_ReleaseDelegate([In] KOVL_HANDLE OverlappedK); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool OvlK_WaitAndReleaseDelegate([In] KOVL_HANDLE OverlappedK, int TimeoutMS, out int TransferredLength); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool OvlK_WaitDelegate([In] KOVL_HANDLE OverlappedK, int TimeoutMS, KOVL_WAIT_FLAG WaitFlags, out int TransferredLength); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool OvlK_WaitOldestDelegate([In] KOVL_POOL_HANDLE PoolHandle, [Out] out KOVL_HANDLE OverlappedK, int TimeoutMS, KOVL_WAIT_FLAG WaitFlags, out int TransferredLength); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool OvlK_WaitOrCancelDelegate([In] KOVL_HANDLE OverlappedK, int TimeoutMS, out int TransferredLength); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool StmK_FreeDelegate([In] KSTM_HANDLE StreamHandle); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool StmK_InitDelegate( + [Out] out KSTM_HANDLE StreamHandle, [In] KUSB_HANDLE UsbHandle, byte PipeID, int MaxTransferSize, int MaxPendingTransfers, int MaxPendingIO, [In] ref KSTM_CALLBACK Callbacks, KSTM_FLAG Flags); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool StmK_ReadDelegate([In] KSTM_HANDLE StreamHandle, IntPtr Buffer, int Offset, int Length, out int TransferredLength); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool StmK_StartDelegate([In] KSTM_HANDLE StreamHandle); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool StmK_StopDelegate([In] KSTM_HANDLE StreamHandle, int TimeoutCancelMS); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool StmK_WriteDelegate([In] KSTM_HANDLE StreamHandle, IntPtr Buffer, int Offset, int Length, out int TransferredLength); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool UsbK_FreeDelegate([In] KUSB_HANDLE InterfaceHandle); + + #endregion + + static AllKFunctions() + { + if (String.IsNullOrEmpty(AllKOptions.LIBUSBK_FULLPATH_TO_ALTERNATE_DLL)) + mModuleLibusbK = LoadLibraryEx(AllKConstants.LIBUSBK_DLL, IntPtr.Zero, LoadLibraryFlags.NONE); + else + mModuleLibusbK = LoadLibraryEx(AllKOptions.LIBUSBK_FULLPATH_TO_ALTERNATE_DLL, IntPtr.Zero, LoadLibraryFlags.LOAD_WITH_ALTERED_SEARCH_PATH); + + if (mModuleLibusbK == IntPtr.Zero) + throw new DllNotFoundException("libusbK.dll not found. Please install drivers/applications and retry."); + + LoadDynamicFunctions(); + } + + #region Nested Enumerations + + [Flags] + private enum LoadLibraryFlags + { + NONE = 0, + DONT_RESOLVE_DLL_REFERENCES = 0x00000001, + LOAD_IGNORE_CODE_AUTHZ_LEVEL = 0x00000010, + LOAD_LIBRARY_AS_DATAFILE = 0x00000002, + LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE = 0x00000040, + LOAD_LIBRARY_AS_IMAGE_RESOURCE = 0x00000020, + LOAD_WITH_ALTERED_SEARCH_PATH = 0x00000008 + } + + #endregion + + #region Public Members + + public static HotK_FreeDelegate HotK_Free; + public static HotK_FreeAllDelegate HotK_FreeAll; + public static HotK_InitDelegate HotK_Init; + public static IsoK_EnumPacketsDelegate IsoK_EnumPackets; + public static IsoK_FreeDelegate IsoK_Free; + public static IsoK_GetPacketDelegate IsoK_GetPacket; + public static IsoK_InitDelegate IsoK_Init; + public static IsoK_ReUseDelegate IsoK_ReUse; + public static IsoK_SetPacketDelegate IsoK_SetPacket; + public static IsoK_SetPacketsDelegate IsoK_SetPackets; + public static LibK_Context_FreeDelegate LibK_Context_Free; + public static LibK_Context_InitDelegate LibK_Context_Init; + + public static LibK_CopyDriverAPIDelegate LibK_CopyDriverAPI; + public static LibK_GetContextDelegate LibK_GetContext; + public static LibK_GetDefaultContextDelegate LibK_GetDefaultContext; + public static LibK_GetProcAddressDelegate LibK_GetProcAddress; + public static LibK_GetVersionDelegate LibK_GetVersion; + public static LibK_LoadDriverAPIDelegate LibK_LoadDriverAPI; + public static LibK_SetCleanupCallbackDelegate LibK_SetCleanupCallback; + public static LibK_SetContextDelegate LibK_SetContext; + public static LibK_SetDefaultContextDelegate LibK_SetDefaultContext; + public static LstK_CountDelegate LstK_Count; + public static LstK_CurrentDelegate LstK_Current; + public static LstK_EnumerateDelegate LstK_Enumerate; + public static LstK_FindByVidPidDelegate LstK_FindByVidPid; + public static LstK_FreeDelegate LstK_Free; + public static LstK_InitDelegate LstK_Init; + public static LstK_InitExDelegate LstK_InitEx; + public static LstK_MoveNextDelegate LstK_MoveNext; + public static LstK_MoveResetDelegate LstK_MoveReset; + public static OvlK_AcquireDelegate OvlK_Acquire; + public static OvlK_FreeDelegate OvlK_Free; + public static OvlK_GetEventHandleDelegate OvlK_GetEventHandle; + public static OvlK_InitDelegate OvlK_Init; + public static OvlK_IsCompleteDelegate OvlK_IsComplete; + public static OvlK_ReUseDelegate OvlK_ReUse; + public static OvlK_ReleaseDelegate OvlK_Release; + public static OvlK_WaitDelegate OvlK_Wait; + public static OvlK_WaitAndReleaseDelegate OvlK_WaitAndRelease; + public static OvlK_WaitOldestDelegate OvlK_WaitOldest; + public static OvlK_WaitOrCancelDelegate OvlK_WaitOrCancel; + public static StmK_FreeDelegate StmK_Free; + public static StmK_InitDelegate StmK_Init; + public static StmK_ReadDelegate StmK_Read; + public static StmK_StartDelegate StmK_Start; + public static StmK_StopDelegate StmK_Stop; + public static StmK_WriteDelegate StmK_Write; + public static UsbK_FreeDelegate UsbK_Free; + + #endregion + + #region Private Members + + [DllImport("kernel32.dll", CharSet = CharSet.Ansi, ExactSpelling = true, SetLastError = true)] + private static extern IntPtr GetProcAddress(IntPtr hModule, string procName); + + private static void LoadDynamicFunctions() + { + LibK_GetVersion = (LibK_GetVersionDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "LibK_GetVersion"), typeof (LibK_GetVersionDelegate)); + LibK_GetContext = (LibK_GetContextDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "LibK_GetContext"), typeof (LibK_GetContextDelegate)); + LibK_SetContext = (LibK_SetContextDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "LibK_SetContext"), typeof (LibK_SetContextDelegate)); + LibK_SetCleanupCallback = (LibK_SetCleanupCallbackDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "LibK_SetCleanupCallback"), typeof (LibK_SetCleanupCallbackDelegate)); + LibK_LoadDriverAPI = (LibK_LoadDriverAPIDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "LibK_LoadDriverAPI"), typeof (LibK_LoadDriverAPIDelegate)); + LibK_CopyDriverAPI = (LibK_CopyDriverAPIDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "LibK_CopyDriverAPI"), typeof (LibK_CopyDriverAPIDelegate)); + LibK_GetProcAddress = (LibK_GetProcAddressDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "LibK_GetProcAddress"), typeof (LibK_GetProcAddressDelegate)); + LibK_SetDefaultContext = (LibK_SetDefaultContextDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "LibK_SetDefaultContext"), typeof (LibK_SetDefaultContextDelegate)); + LibK_GetDefaultContext = (LibK_GetDefaultContextDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "LibK_GetDefaultContext"), typeof (LibK_GetDefaultContextDelegate)); + LibK_Context_Init = (LibK_Context_InitDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "LibK_Context_Init"), typeof (LibK_Context_InitDelegate)); + LibK_Context_Free = (LibK_Context_FreeDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "LibK_Context_Free"), typeof (LibK_Context_FreeDelegate)); + UsbK_Free = (UsbK_FreeDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "UsbK_Free"), typeof (UsbK_FreeDelegate)); + LstK_Init = (LstK_InitDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "LstK_Init"), typeof (LstK_InitDelegate)); + LstK_InitEx = (LstK_InitExDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "LstK_InitEx"), typeof (LstK_InitExDelegate)); + LstK_Free = (LstK_FreeDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "LstK_Free"), typeof (LstK_FreeDelegate)); + LstK_Enumerate = (LstK_EnumerateDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "LstK_Enumerate"), typeof (LstK_EnumerateDelegate)); + LstK_Current = (LstK_CurrentDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "LstK_Current"), typeof (LstK_CurrentDelegate)); + LstK_MoveNext = (LstK_MoveNextDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "LstK_MoveNext"), typeof (LstK_MoveNextDelegate)); + LstK_MoveReset = (LstK_MoveResetDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "LstK_MoveReset"), typeof (LstK_MoveResetDelegate)); + LstK_FindByVidPid = (LstK_FindByVidPidDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "LstK_FindByVidPid"), typeof (LstK_FindByVidPidDelegate)); + LstK_Count = (LstK_CountDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "LstK_Count"), typeof (LstK_CountDelegate)); + HotK_Init = (HotK_InitDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "HotK_Init"), typeof (HotK_InitDelegate)); + HotK_Free = (HotK_FreeDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "HotK_Free"), typeof (HotK_FreeDelegate)); + HotK_FreeAll = (HotK_FreeAllDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "HotK_FreeAll"), typeof (HotK_FreeAllDelegate)); + OvlK_Acquire = (OvlK_AcquireDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "OvlK_Acquire"), typeof (OvlK_AcquireDelegate)); + OvlK_Release = (OvlK_ReleaseDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "OvlK_Release"), typeof (OvlK_ReleaseDelegate)); + OvlK_Init = (OvlK_InitDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "OvlK_Init"), typeof (OvlK_InitDelegate)); + OvlK_Free = (OvlK_FreeDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "OvlK_Free"), typeof (OvlK_FreeDelegate)); + OvlK_GetEventHandle = (OvlK_GetEventHandleDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "OvlK_GetEventHandle"), typeof (OvlK_GetEventHandleDelegate)); + OvlK_Wait = (OvlK_WaitDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "OvlK_Wait"), typeof (OvlK_WaitDelegate)); + OvlK_WaitOldest = (OvlK_WaitOldestDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "OvlK_WaitOldest"), typeof (OvlK_WaitOldestDelegate)); + OvlK_WaitOrCancel = (OvlK_WaitOrCancelDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "OvlK_WaitOrCancel"), typeof (OvlK_WaitOrCancelDelegate)); + OvlK_WaitAndRelease = (OvlK_WaitAndReleaseDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "OvlK_WaitAndRelease"), typeof (OvlK_WaitAndReleaseDelegate)); + OvlK_IsComplete = (OvlK_IsCompleteDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "OvlK_IsComplete"), typeof (OvlK_IsCompleteDelegate)); + OvlK_ReUse = (OvlK_ReUseDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "OvlK_ReUse"), typeof (OvlK_ReUseDelegate)); + StmK_Init = (StmK_InitDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "StmK_Init"), typeof (StmK_InitDelegate)); + StmK_Free = (StmK_FreeDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "StmK_Free"), typeof (StmK_FreeDelegate)); + StmK_Start = (StmK_StartDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "StmK_Start"), typeof (StmK_StartDelegate)); + StmK_Stop = (StmK_StopDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "StmK_Stop"), typeof (StmK_StopDelegate)); + StmK_Read = (StmK_ReadDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "StmK_Read"), typeof (StmK_ReadDelegate)); + StmK_Write = (StmK_WriteDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "StmK_Write"), typeof (StmK_WriteDelegate)); + IsoK_Init = (IsoK_InitDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "IsoK_Init"), typeof (IsoK_InitDelegate)); + IsoK_Free = (IsoK_FreeDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "IsoK_Free"), typeof (IsoK_FreeDelegate)); + IsoK_SetPackets = (IsoK_SetPacketsDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "IsoK_SetPackets"), typeof (IsoK_SetPacketsDelegate)); + IsoK_SetPacket = (IsoK_SetPacketDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "IsoK_SetPacket"), typeof (IsoK_SetPacketDelegate)); + IsoK_GetPacket = (IsoK_GetPacketDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "IsoK_GetPacket"), typeof (IsoK_GetPacketDelegate)); + IsoK_EnumPackets = (IsoK_EnumPacketsDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "IsoK_EnumPackets"), typeof (IsoK_EnumPacketsDelegate)); + IsoK_ReUse = (IsoK_ReUseDelegate) Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "IsoK_ReUse"), typeof (IsoK_ReUseDelegate)); + } + + [DllImport("kernel32.dll")] + private static extern IntPtr LoadLibraryEx(string lpFileName, IntPtr hReservedNull, LoadLibraryFlags dwFlags); + + private static readonly IntPtr mModuleLibusbK = IntPtr.Zero; + + #endregion + } + + #endregion + + #region Enumerations + + /// Values used in the \c bmAttributes field of a \ref USB_ENDPOINT_DESCRIPTOR + public enum USBD_PIPE_TYPE + { + /// Indicates a control endpoint + UsbdPipeTypeControl, + + /// Indicates an isochronous endpoint + UsbdPipeTypeIsochronous, + + /// Indicates a bulk endpoint + UsbdPipeTypeBulk, + + /// Indicates an interrupt endpoint + UsbdPipeTypeInterrupt, + } + + /// Additional ISO transfer flags. + [Flags] + public enum KISO_FLAG + { + NONE = 0, + + /// Do not start the transfer immediately, instead use \ref KISO_CONTEXT::StartFrame. + SET_START_FRAME = 0x00000001, + } + + /// Handle type enumeration. + public enum KLIB_HANDLE_TYPE + { + /// Hot plug handle. \ref KHOT_HANDLE + HOTK, + + /// USB handle. \ref KUSB_HANDLE + USBK, + + /// Shared USB handle. \ref KUSB_HANDLE + USBSHAREDK, + + /// Device list handle. \ref KLST_HANDLE + LSTK, + + /// Device info handle. \ref KLST_DEVINFO_HANDLE + LSTINFOK, + + /// Overlapped handle. \ref KOVL_HANDLE + OVLK, + + /// Overlapped pool handle. \ref KOVL_POOL_HANDLE + OVLPOOLK, + + /// Pipe stream handle. \ref KSTM_HANDLE + STMK, + + /// Max handle type count. + COUNT + } + + /// Device list sync flags. + [Flags] + public enum KLST_SYNC_FLAG + { + /// Cleared/invalid state. + NONE = 0, + + /// Unchanged state, + UNCHANGED = 0x0001, + + /// Added (Arrival) state, + ADDED = 0x0002, + + /// Removed (Unplugged) state, + REMOVED = 0x0004, + + /// Connect changed state. + CONNECT_CHANGE = 0x0008, + + /// All states. + MASK = 0x000F, + } + + /// Device list initialization flags. + [Flags] + public enum KLST_FLAG + { + /// No flags (or 0) + NONE = 0, + + /// Enable listings for the raw device interface GUID \b only. {A5DCBF10-6530-11D2-901F-00C04FB951ED} + INCLUDE_RAWGUID = 0x0001, + + /// List all libusbK devices including those not currently connected. + INCLUDE_DISCONNECT = 0x0002, + } + + /// bmRequest.Dir + public enum BMREQUEST_DIR + { + HOST_TO_DEVICE = 0, + DEVICE_TO_HOST = 1, + } + + /// bmRequest.Type + public enum BMREQUEST_TYPE + { + /// Standard request. See \ref USB_REQUEST_ENUM + STANDARD = 0, + + /// Class-specific request. + CLASS = 1, + + /// Vendor-specific request + VENDOR = 2, + } + + /// bmRequest.Recipient + public enum BMREQUEST_RECIPIENT + { + /// Request is for a device. + DEVICE = 0, + + /// Request is for an interface of a device. + INTERFACE = 1, + + /// Request is for an endpoint of a device. + ENDPOINT = 2, + + /// Request is for a vendor-specific purpose. + OTHER = 3, + } + + /// Values for the bits returned by the \ref USB_REQUEST_GET_STATUS request. + public enum USB_GETSTATUS + { + /// Device is self powered + SELF_POWERED = 0x01, + + /// Device can wake the system from a low power/sleeping state. + REMOTE_WAKEUP_ENABLED = 0x02 + } + + /// Standard USB descriptor types. For more information, see section 9-5 of the USB 3.0 specifications. + public enum USB_DESCRIPTOR_TYPE + { + /// Device descriptor type. + DEVICE = 0x01, + + /// Configuration descriptor type. + CONFIGURATION = 0x02, + + /// String descriptor type. + STRING = 0x03, + + /// Interface descriptor type. + INTERFACE = 0x04, + + /// Endpoint descriptor type. + ENDPOINT = 0x05, + + /// Device qualifier descriptor type. + DEVICE_QUALIFIER = 0x06, + + /// Config power descriptor type. + CONFIG_POWER = 0x07, + + /// Interface power descriptor type. + INTERFACE_POWER = 0x08, + + /// Interface association descriptor type. + INTERFACE_ASSOCIATION = 0x0B, + } + + /// Usb handle specific properties that can be retrieved with \ref UsbK_GetProperty. + public enum KUSB_PROPERTY + { + /// Get the internal device file handle used for operations such as GetOverlappedResult or DeviceIoControl. + DEVICE_FILE_HANDLE, + + COUNT + } + + /// Supported driver id enumeration. + public enum KUSB_DRVID + { + /// libusbK.sys driver ID + LIBUSBK, + + /// libusb0.sys driver ID + LIBUSB0, + + /// WinUSB.sys driver ID + WINUSB, + + /// libusb0.sys filter driver ID + LIBUSB0_FILTER, + + /// Supported driver count + COUNT + } + + /// Supported function id enumeration. + public enum KUSB_FNID + { + /// \ref UsbK_Init dynamic driver function id. + Init, + + /// \ref UsbK_Free dynamic driver function id. + Free, + + /// \ref UsbK_ClaimInterface dynamic driver function id. + ClaimInterface, + + /// \ref UsbK_ReleaseInterface dynamic driver function id. + ReleaseInterface, + + /// \ref UsbK_SetAltInterface dynamic driver function id. + SetAltInterface, + + /// \ref UsbK_GetAltInterface dynamic driver function id. + GetAltInterface, + + /// \ref UsbK_GetDescriptor dynamic driver function id. + GetDescriptor, + + /// \ref UsbK_ControlTransfer dynamic driver function id. + ControlTransfer, + + /// \ref UsbK_SetPowerPolicy dynamic driver function id. + SetPowerPolicy, + + /// \ref UsbK_GetPowerPolicy dynamic driver function id. + GetPowerPolicy, + + /// \ref UsbK_SetConfiguration dynamic driver function id. + SetConfiguration, + + /// \ref UsbK_GetConfiguration dynamic driver function id. + GetConfiguration, + + /// \ref UsbK_ResetDevice dynamic driver function id. + ResetDevice, + + /// \ref UsbK_Initialize dynamic driver function id. + Initialize, + + /// \ref UsbK_SelectInterface dynamic driver function id. + SelectInterface, + + /// \ref UsbK_GetAssociatedInterface dynamic driver function id. + GetAssociatedInterface, + + /// \ref UsbK_Clone dynamic driver function id. + Clone, + + /// \ref UsbK_QueryInterfaceSettings dynamic driver function id. + QueryInterfaceSettings, + + /// \ref UsbK_QueryDeviceInformation dynamic driver function id. + QueryDeviceInformation, + + /// \ref UsbK_SetCurrentAlternateSetting dynamic driver function id. + SetCurrentAlternateSetting, + + /// \ref UsbK_GetCurrentAlternateSetting dynamic driver function id. + GetCurrentAlternateSetting, + + /// \ref UsbK_QueryPipe dynamic driver function id. + QueryPipe, + + /// \ref UsbK_SetPipePolicy dynamic driver function id. + SetPipePolicy, + + /// \ref UsbK_GetPipePolicy dynamic driver function id. + GetPipePolicy, + + /// \ref UsbK_ReadPipe dynamic driver function id. + ReadPipe, + + /// \ref UsbK_WritePipe dynamic driver function id. + WritePipe, + + /// \ref UsbK_ResetPipe dynamic driver function id. + ResetPipe, + + /// \ref UsbK_AbortPipe dynamic driver function id. + AbortPipe, + + /// \ref UsbK_FlushPipe dynamic driver function id. + FlushPipe, + + /// \ref UsbK_IsoReadPipe dynamic driver function id. + IsoReadPipe, + + /// \ref UsbK_IsoWritePipe dynamic driver function id. + IsoWritePipe, + + /// \ref UsbK_GetCurrentFrameNumber dynamic driver function id. + GetCurrentFrameNumber, + + /// \ref UsbK_GetOverlappedResult dynamic driver function id. + GetOverlappedResult, + + /// \ref UsbK_GetProperty dynamic driver function id. + GetProperty, + + + /// Supported function count + COUNT, + } + + /// Hot plug config flags. + [Flags] + public enum KHOT_FLAG + { + /// No flags (or 0) + NONE, + + /// Notify all devices which match upon a succuessful call to \ref HotK_Init. + PLUG_ALL_ON_INIT = 0x0001, + + /// Allow other \ref KHOT_HANDLE instances to consume this match. + PASS_DUPE_INSTANCE = 0x0002, + + /// If a \c UserHwnd is specified, use \c PostMessage instead of \c SendMessage. + POST_USER_MESSAGE = 0x0004, + } + + /// \c WaitFlags used by \ref OvlK_Wait. + [Flags] + public enum KOVL_WAIT_FLAG + { + /// Do not perform any additional actions upon exiting \ref OvlK_Wait. + NONE = 0, + + /// If the i/o operation completes successfully, release the OverlappedK back to it's pool. + RELEASE_ON_SUCCESS = 0x0001, + + /// If the i/o operation fails, release the OverlappedK back to it's pool. + RELEASE_ON_FAIL = 0x0002, + + /// If the i/o operation fails or completes successfully, release the OverlappedK back to its pool. Perform no actions if it times-out. + RELEASE_ON_SUCCESS_FAIL = 0x0003, + + /// If the i/o operation times-out cancel it, but do not release the OverlappedK back to its pool. + CANCEL_ON_TIMEOUT = 0x0004, + + /// If the i/o operation times-out, cancel it and release the OverlappedK back to its pool. + RELEASE_ON_TIMEOUT = 0x000C, + + /// Always release the OverlappedK back to its pool. If the operation timed-out, cancel it before releasing back to its pool. + RELEASE_ALWAYS = 0x000F, + + /// Uses alterable wait functions. See http://msdn.microsoft.com/en-us/library/windows/desktop/ms687036%28v=vs.85%29.aspx + ALERTABLE = 0x0010, + } + + /// \c Overlapped pool config flags. + [Flags] + public enum KOVL_POOL_FLAG + { + NONE = 0, + } + + /// Stream config flags. + [Flags] + public enum KSTM_FLAG : uint + { + /// None + NONE = 0, + NO_PARTIAL_XFERS = 0x00100000, + USE_TIMEOUT = 0x80000000, + TIMEOUT_MASK = 0x0001FFFF + } + + /// Stream config flags. + public enum KSTM_COMPLETE_RESULT + { + /// Valid + VALID = 0, + + /// Invalid + INVALID, + } + + #endregion + + #region Structs + + /// The \c WINUSB_PIPE_INFORMATION structure contains pipe information that the \ref UsbK_QueryPipe routine retrieves. + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] + public struct WINUSB_PIPE_INFORMATION + { + /// A \c USBD_PIPE_TYPE enumeration value that specifies the pipe type + public USBD_PIPE_TYPE PipeType; + + /// The pipe identifier (ID) + public byte PipeId; + + /// The maximum size, in bytes, of the packets that are transmitted on the pipe + public ushort MaximumPacketSize; + + /// The pipe interval + public byte Interval; + + + public override string ToString() + { + return string.Format("PipeType: {0}\nPipeId: {1}\nMaximumPacketSize: {2}\nInterval: {3}\n", PipeType, PipeId.ToString("X2") + "h", MaximumPacketSize, Interval.ToString("X2") + "h"); + } + }; + + /// The \c WINUSB_SETUP_PACKET structure describes a USB setup packet. + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)] + public struct WINUSB_SETUP_PACKET + { + /// The request type. The values that are assigned to this member are defined in Table 9.2 of section 9.3 of the Universal Serial Bus (USB) specification (www.usb.org). + public byte RequestType; + + /// The device request. The values that are assigned to this member are defined in Table 9.3 of section 9.4 of the Universal Serial Bus (USB) specification. + public byte Request; + + /// The meaning of this member varies according to the request. For an explanation of this member, see the Universal Serial Bus (USB) specification. + public ushort Value; + + /// The meaning of this member varies according to the request. For an explanation of this member, see the Universal Serial Bus (USB) specification. + public ushort Index; + + /// The number of bytes to transfer. (not including the \c WINUSB_SETUP_PACKET itself) + public ushort Length; + + + public override string ToString() + { + return string.Format("RequestType: {0}\nRequest: {1}\nValue: {2}\nIndex: {3}\nLength: {4}\n", + RequestType.ToString("X2") + "h", + Request.ToString("X2") + "h", + Value.ToString("X4") + "h", + Index.ToString("X4") + "h", + Length); + } + }; + + /// Structure describing an isochronous transfer packet. + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)] + public struct KISO_PACKET + { + /// Specifies the offset, in bytes, of the buffer for this packet from the beginning of the entire isochronous transfer data buffer. + public int Offset; + + /// Set by the host controller to indicate the actual number of bytes received by the device for isochronous IN transfers. Length not used for isochronous OUT transfers. + public ushort Length; + + /// Contains the 16 least significant USBD status bits, on return from the host controller driver, of this transfer packet. + public ushort Status; + + + public override string ToString() + { + return string.Format("Offset: {0}\nLength: {1}\nStatus: {2}\n", Offset, Length, Status.ToString("X4") + "h"); + } + }; + + [StructLayout(LayoutKind.Sequential)] + public struct KISO_CONTEXT + { + private readonly IntPtr mHandlePtr; + + public KISO_CONTEXT(IntPtr Handle) + { + mHandlePtr = Handle; + } + + public IntPtr Pointer + { + get + { + return mHandlePtr; + } + } + + /// KISO_CONTEXT_MAP is used for calculating field offsets only + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)] + private struct KISO_CONTEXT_MAP + { + /// Additional ISO transfer flags. See \ref KISO_FLAG. + private readonly KISO_FLAG Flags; + + /// Specifies the frame number that the transfer should begin on (0 for ASAP). + private readonly int StartFrame; + + /// Contains the number of packets that completed with an error condition on return from the host controller driver. + private readonly short ErrorCount; + + /// Specifies the number of packets that are described by the variable-length array member \c IsoPacket. + private readonly short NumberOfPackets; + + /// Contains the URB Hdr.Status value on return from the host controller driver. + private readonly int UrbHdrStatus; + }; + + private static readonly int ofsFlags = Marshal.OffsetOf(typeof (KISO_CONTEXT_MAP), "Flags").ToInt32(); + private static readonly int ofsStartFrame = Marshal.OffsetOf(typeof (KISO_CONTEXT_MAP), "StartFrame").ToInt32(); + private static readonly int ofsErrorCount = Marshal.OffsetOf(typeof (KISO_CONTEXT_MAP), "ErrorCount").ToInt32(); + private static readonly int ofsNumberOfPackets = Marshal.OffsetOf(typeof (KISO_CONTEXT_MAP), "NumberOfPackets").ToInt32(); + private static readonly int ofsUrbHdrStatus = Marshal.OffsetOf(typeof (KISO_CONTEXT_MAP), "UrbHdrStatus").ToInt32(); + + + /// Additional ISO transfer flags. See \ref KISO_FLAG. + public KISO_FLAG Flags + { + get + { + return (KISO_FLAG) Marshal.ReadInt32(mHandlePtr, ofsFlags); + } + } + + + /// Specifies the frame number that the transfer should begin on (0 for ASAP). + public int StartFrame + { + get + { + return Marshal.ReadInt32(mHandlePtr, ofsStartFrame); + } + } + + + /// Contains the number of packets that completed with an error condition on return from the host controller driver. + public short ErrorCount + { + get + { + return Marshal.ReadInt16(mHandlePtr, ofsErrorCount); + } + } + + + /// Specifies the number of packets that are described by the variable-length array member \c IsoPacket. + public short NumberOfPackets + { + get + { + return Marshal.ReadInt16(mHandlePtr, ofsNumberOfPackets); + } + } + + + /// Contains the URB Hdr.Status value on return from the host controller driver. + public int UrbHdrStatus + { + get + { + return Marshal.ReadInt32(mHandlePtr, ofsUrbHdrStatus); + } + } + + + public override string ToString() + { + return string.Format("Flags: {0}\nStartFrame: {1}\nErrorCount: {2}\nNumberOfPackets: {3}\nUrbHdrStatus: {4}\n", + Flags.ToString(), + StartFrame, + ErrorCount, + NumberOfPackets, + UrbHdrStatus.ToString("X8") + "h"); + } + } + + /// libusbK verson information structure. + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] + public struct KLIB_VERSION + { + /// Major version number. + public int Major; + + /// Minor version number. + public int Minor; + + /// Micro version number. + public int Micro; + + /// Nano version number. + public int Nano; + + public override string ToString() + { + return string.Format("Major: {0}\nMinor: {1}\nMicro: {2}\nNano: {3}\n", Major, Minor, Micro, Nano); + } + }; + + /// Common usb device information structure + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] + public struct KLST_DEV_COMMON_INFO + { + /// VendorID parsed from \ref KLST_DEVINFO::DeviceID + public int Vid; + + /// ProductID parsed from \ref KLST_DEVINFO::DeviceID + public int Pid; + + /// Composite interface number parsed from \ref KLST_DEVINFO::DeviceID. Set to \b -1 for devices that do not have the composite parent driver. + public int MI; + + // An ID that uniquely identifies a USB device. + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = AllKConstants.KLST_STRING_MAX_LEN)] public string InstanceID; + + + public override string ToString() + { + return string.Format("Vid: {0}\nPid: {1}\nMI: {2}\nInstanceID: {3}\n", Vid.ToString("X4") + "h", Pid.ToString("X4") + "h", MI.ToString("X2") + "h", InstanceID); + } + }; + + [StructLayout(LayoutKind.Sequential)] + public struct KLST_DEVINFO_HANDLE : IKLIB_HANDLE + { + private readonly IntPtr mHandlePtr; + + public KLST_DEVINFO_HANDLE(IntPtr Handle) + { + mHandlePtr = Handle; + } + + public IntPtr Pointer + { + get + { + return mHandlePtr; + } + } + + public KLIB_HANDLE_TYPE HandleType + { + get + { + return KLIB_HANDLE_TYPE.LSTINFOK; + } + } + + public IntPtr GetContext() + { + return AllKFunctions.LibK_GetContext(mHandlePtr, HandleType); + } + + public bool SetContext(IntPtr UserContext) + { + return AllKFunctions.LibK_SetContext(mHandlePtr, HandleType, UserContext); + } + + public bool SetCleanupCallback(KLIB_HANDLE_CLEANUP_CB CleanupCallback) + { + return AllKFunctions.LibK_SetCleanupCallback(mHandlePtr, HandleType, CleanupCallback); + } + + /// KLST_DEVINFO_MAP is used for calculating field offsets only + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] + private struct KLST_DEVINFO_MAP + { + /// Common usb device information + private readonly KLST_DEV_COMMON_INFO Common; + + /// Driver id this device element is using + private readonly int DriverID; + + /// Device interface GUID + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = AllKConstants.KLST_STRING_MAX_LEN)] private readonly string DeviceInterfaceGUID; + + /// Device instance ID. + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = AllKConstants.KLST_STRING_MAX_LEN)] private readonly string DeviceID; + + /// Class GUID. + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = AllKConstants.KLST_STRING_MAX_LEN)] private readonly string ClassGUID; + + /// Manufacturer name as specified in the INF file. + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = AllKConstants.KLST_STRING_MAX_LEN)] private readonly string Mfg; + + /// Device description as specified in the INF file. + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = AllKConstants.KLST_STRING_MAX_LEN)] private readonly string DeviceDesc; + + /// Driver service name. + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = AllKConstants.KLST_STRING_MAX_LEN)] private readonly string Service; + + /// Unique identifier. + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = AllKConstants.KLST_STRING_MAX_LEN)] private readonly string SymbolicLink; + + /// physical device filename used with the Windows \c CreateFile() + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = AllKConstants.KLST_STRING_MAX_LEN)] private readonly string DevicePath; + + /// libusb-win32 filter index id. + private readonly int LUsb0FilterIndex; + + /// Indicates the devices connection state. + private readonly bool Connected; + + /// Synchronization flags. (internal use only) + private readonly KLST_SYNC_FLAG SyncFlags; + + private readonly int BusNumber; + + private readonly int DeviceAddress; + + /// If the the device is serialized, represents the string value of \ref USB_DEVICE_DESCRIPTOR::iSerialNumber. For Devices without a \b iSerialNumber, represents the unique \b InstanceID assigned by \b Windows. + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = AllKConstants.KLST_STRING_MAX_LEN)] private readonly string SerialNumber; + }; + + private static readonly int ofsCommon = Marshal.OffsetOf(typeof (KLST_DEVINFO_MAP), "Common").ToInt32(); + private static readonly int ofsDriverID = Marshal.OffsetOf(typeof (KLST_DEVINFO_MAP), "DriverID").ToInt32(); + private static readonly int ofsDeviceInterfaceGUID = Marshal.OffsetOf(typeof (KLST_DEVINFO_MAP), "DeviceInterfaceGUID").ToInt32(); + private static readonly int ofsDeviceID = Marshal.OffsetOf(typeof (KLST_DEVINFO_MAP), "DeviceID").ToInt32(); + private static readonly int ofsClassGUID = Marshal.OffsetOf(typeof (KLST_DEVINFO_MAP), "ClassGUID").ToInt32(); + private static readonly int ofsMfg = Marshal.OffsetOf(typeof (KLST_DEVINFO_MAP), "Mfg").ToInt32(); + private static readonly int ofsDeviceDesc = Marshal.OffsetOf(typeof (KLST_DEVINFO_MAP), "DeviceDesc").ToInt32(); + private static readonly int ofsService = Marshal.OffsetOf(typeof (KLST_DEVINFO_MAP), "Service").ToInt32(); + private static readonly int ofsSymbolicLink = Marshal.OffsetOf(typeof (KLST_DEVINFO_MAP), "SymbolicLink").ToInt32(); + private static readonly int ofsDevicePath = Marshal.OffsetOf(typeof (KLST_DEVINFO_MAP), "DevicePath").ToInt32(); + private static readonly int ofsLUsb0FilterIndex = Marshal.OffsetOf(typeof (KLST_DEVINFO_MAP), "LUsb0FilterIndex").ToInt32(); + private static readonly int ofsConnected = Marshal.OffsetOf(typeof (KLST_DEVINFO_MAP), "Connected").ToInt32(); + private static readonly int ofsSyncFlags = Marshal.OffsetOf(typeof (KLST_DEVINFO_MAP), "SyncFlags").ToInt32(); + private static readonly int ofsBusNumber = Marshal.OffsetOf(typeof (KLST_DEVINFO_MAP), "BusNumber").ToInt32(); + private static readonly int ofsDeviceAddress = Marshal.OffsetOf(typeof (KLST_DEVINFO_MAP), "DeviceAddress").ToInt32(); + private static readonly int ofsSerialNumber = Marshal.OffsetOf(typeof (KLST_DEVINFO_MAP), "SerialNumber").ToInt32(); + + + /// Common usb device information + public KLST_DEV_COMMON_INFO Common + { + get + { + return (KLST_DEV_COMMON_INFO) Marshal.PtrToStructure(new IntPtr(mHandlePtr.ToInt64() + ofsCommon), typeof (KLST_DEV_COMMON_INFO)); + } + } + + + /// Driver id this device element is using + public int DriverID + { + get + { + return Marshal.ReadInt32(mHandlePtr, ofsDriverID); + } + } + + + /// Device interface GUID + public string DeviceInterfaceGUID + { + get + { + return Marshal.PtrToStringAnsi(new IntPtr(mHandlePtr.ToInt64() + ofsDeviceInterfaceGUID)); + } + } + + + /// Device instance ID. + public string DeviceID + { + get + { + return Marshal.PtrToStringAnsi(new IntPtr(mHandlePtr.ToInt64() + ofsDeviceID)); + } + } + + + /// Class GUID. + public string ClassGUID + { + get + { + return Marshal.PtrToStringAnsi(new IntPtr(mHandlePtr.ToInt64() + ofsClassGUID)); + } + } + + + /// Manufacturer name as specified in the INF file. + public string Mfg + { + get + { + return Marshal.PtrToStringAnsi(new IntPtr(mHandlePtr.ToInt64() + ofsMfg)); + } + } + + + /// Device description as specified in the INF file. + public string DeviceDesc + { + get + { + return Marshal.PtrToStringAnsi(new IntPtr(mHandlePtr.ToInt64() + ofsDeviceDesc)); + } + } + + + /// Driver service name. + public string Service + { + get + { + return Marshal.PtrToStringAnsi(new IntPtr(mHandlePtr.ToInt64() + ofsService)); + } + } + + + /// Unique identifier. + public string SymbolicLink + { + get + { + return Marshal.PtrToStringAnsi(new IntPtr(mHandlePtr.ToInt64() + ofsSymbolicLink)); + } + } + + + /// physical device filename used with the Windows \c CreateFile() + public string DevicePath + { + get + { + return Marshal.PtrToStringAnsi(new IntPtr(mHandlePtr.ToInt64() + ofsDevicePath)); + } + } + + + /// libusb-win32 filter index id. + public int LUsb0FilterIndex + { + get + { + return Marshal.ReadInt32(mHandlePtr, ofsLUsb0FilterIndex); + } + } + + + /// Indicates the devices connection state. + public bool Connected + { + get + { + return Marshal.ReadInt32(mHandlePtr, ofsConnected) != 0; + } + } + + + /// Synchronization flags. (internal use only) + public KLST_SYNC_FLAG SyncFlags + { + get + { + return (KLST_SYNC_FLAG) Marshal.ReadInt32(mHandlePtr, ofsSyncFlags); + } + } + + + public int BusNumber + { + get + { + return Marshal.ReadInt32(mHandlePtr, ofsBusNumber); + } + } + + + public int DeviceAddress + { + get + { + return Marshal.ReadInt32(mHandlePtr, ofsDeviceAddress); + } + } + + + /// If the the device is serialized, represents the string value of \ref USB_DEVICE_DESCRIPTOR::iSerialNumber. For Devices without a \b iSerialNumber, represents the unique \b InstanceID assigned by \b Windows. + public string SerialNumber + { + get + { + return Marshal.PtrToStringAnsi(new IntPtr(mHandlePtr.ToInt64() + ofsSerialNumber)); + } + } + + + public override string ToString() + { + return + string.Format( + "DriverID: {0}\nDeviceInterfaceGUID: {1}\nDeviceID: {2}\nClassGUID: {3}\nMfg: {4}\nDeviceDesc: {5}\nService: {6}\nSymbolicLink: {7}\nDevicePath: {8}\nLUsb0FilterIndex: {9}\nConnected: {10}\nSyncFlags: {11}\nBusNumber: {12}\nDeviceAddress: {13}\nSerialNumber: {14}\n", + DriverID, + DeviceInterfaceGUID, + DeviceID, + ClassGUID, + Mfg, + DeviceDesc, + Service, + SymbolicLink, + DevicePath, + LUsb0FilterIndex, + Connected, + SyncFlags.ToString(), + BusNumber, + DeviceAddress, + SerialNumber); + } + } + + /// Device list/hot-plug pattern match structure. + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Size = 1024)] + public struct KLST_PATTERN_MATCH + { + /// Pattern match a device instance id. + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = AllKConstants.KLST_STRING_MAX_LEN)] public string DeviceID; + + /// Pattern match a device interface guid. + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = AllKConstants.KLST_STRING_MAX_LEN)] public string DeviceInterfaceGUID; + + /// Pattern match a symbolic link. + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = AllKConstants.KLST_STRING_MAX_LEN)] public string ClassGUID; + + + public override string ToString() + { + return string.Format("DeviceID: {0}\nDeviceInterfaceGUID: {1}\nClassGUID: {2}\n", DeviceID, DeviceInterfaceGUID, ClassGUID); + } + }; + + /// A structure representing the standard USB device descriptor. + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)] + public struct USB_DEVICE_DESCRIPTOR + { + /// Size of this descriptor (in bytes) + public byte bLength; + + /// Descriptor type + public byte bDescriptorType; + + /// USB specification release number in binary-coded decimal. + public ushort bcdUSB; + + /// USB-IF class code for the device + public byte bDeviceClass; + + /// USB-IF subclass code for the device + public byte bDeviceSubClass; + + /// USB-IF protocol code for the device + public byte bDeviceProtocol; + + /// Maximum packet size for control endpoint 0 + public byte bMaxPacketSize0; + + /// USB-IF vendor ID + public ushort idVendor; + + /// USB-IF product ID + public ushort idProduct; + + /// Device release number in binary-coded decimal + public ushort bcdDevice; + + /// Index of string descriptor describing manufacturer + public byte iManufacturer; + + /// Index of string descriptor describing product + public byte iProduct; + + /// Index of string descriptor containing device serial number + public byte iSerialNumber; + + /// Number of possible configurations + public byte bNumConfigurations; + + + public override string ToString() + { + return + string.Format( + "bLength: {0}\nbDescriptorType: {1}\nbcdUSB: {2}\nbDeviceClass: {3}\nbDeviceSubClass: {4}\nbDeviceProtocol: {5}\nbMaxPacketSize0: {6}\nidVendor: {7}\nidProduct: {8}\nbcdDevice: {9}\niManufacturer: {10}\niProduct: {11}\niSerialNumber: {12}\nbNumConfigurations: {13}\n", + bLength, + bDescriptorType.ToString("X2") + "h", + bcdUSB.ToString("X4") + "h", + bDeviceClass.ToString("X2") + "h", + bDeviceSubClass.ToString("X2") + "h", + bDeviceProtocol.ToString("X2") + "h", + bMaxPacketSize0, + idVendor.ToString("X4") + "h", + idProduct.ToString("X4") + "h", + bcdDevice.ToString("X4") + "h", + iManufacturer, + iProduct, + iSerialNumber, + bNumConfigurations); + } + }; + + /// A structure representing the standard USB endpoint descriptor. + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)] + public struct USB_ENDPOINT_DESCRIPTOR + { + /// Size of this descriptor (in bytes) + public byte bLength; + + /// Descriptor type + public byte bDescriptorType; + + /// The address of the endpoint described by this descriptor. + public byte bEndpointAddress; + + /// Attributes which apply to the endpoint when it is configured using the bConfigurationValue. + public byte bmAttributes; + + /// Maximum packet size this endpoint is capable of sending/receiving. + public ushort wMaxPacketSize; + + /// Interval for polling endpoint for data transfers. + public byte bInterval; + + + public override string ToString() + { + return string.Format("bLength: {0}\nbDescriptorType: {1}\nbEndpointAddress: {2}\nbmAttributes: {3}\nwMaxPacketSize: {4}\nbInterval: {5}\n", + bLength, + bDescriptorType.ToString("X2") + "h", + bEndpointAddress.ToString("X2") + "h", + bmAttributes.ToString("X2") + "h", + wMaxPacketSize, + bInterval); + } + }; + + /// A structure representing the standard USB configuration descriptor. + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)] + public struct USB_CONFIGURATION_DESCRIPTOR + { + /// Size of this descriptor (in bytes) + public byte bLength; + + /// Descriptor type + public byte bDescriptorType; + + /// Total length of data returned for this configuration + public ushort wTotalLength; + + /// Number of interfaces supported by this configuration + public byte bNumInterfaces; + + /// Identifier value for this configuration + public byte bConfigurationValue; + + /// Index of string descriptor describing this configuration + public byte iConfiguration; + + /// Configuration characteristics + public byte bmAttributes; + + /// Maximum power consumption of the USB device from this bus in this configuration when the device is fully operation. + public byte MaxPower; + + public override string ToString() + { + return string.Format("bLength: {0}\nbDescriptorType: {1}\nwTotalLength: {2}\nbNumInterfaces: {3}\nbConfigurationValue: {4}\niConfiguration: {5}\nbmAttributes: {6}\nMaxPower: {7}\n", + bLength, + bDescriptorType.ToString("X2") + "h", + wTotalLength, + bNumInterfaces, + bConfigurationValue, + iConfiguration, + bmAttributes.ToString("X2") + "h", + MaxPower); + } + }; + + /// A structure representing the standard USB interface descriptor. + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)] + public struct USB_INTERFACE_DESCRIPTOR + { + /// Size of this descriptor (in bytes) + public byte bLength; + + /// Descriptor type + public byte bDescriptorType; + + /// Number of this interface + public byte bInterfaceNumber; + + /// Value used to select this alternate setting for this interface + public byte bAlternateSetting; + + /// Number of endpoints used by this interface (excluding the control endpoint) + public byte bNumEndpoints; + + /// USB-IF class code for this interface + public byte bInterfaceClass; + + /// USB-IF subclass code for this interface + public byte bInterfaceSubClass; + + /// USB-IF protocol code for this interface + public byte bInterfaceProtocol; + + /// Index of string descriptor describing this interface + public byte iInterface; + + + public override string ToString() + { + return + string.Format( + "bLength: {0}\nbDescriptorType: {1}\nbInterfaceNumber: {2}\nbAlternateSetting: {3}\nbNumEndpoints: {4}\nbInterfaceClass: {5}\nbInterfaceSubClass: {6}\nbInterfaceProtocol: {7}\niInterface: {8}\n", + bLength, + bDescriptorType.ToString("X2") + "h", + bInterfaceNumber, + bAlternateSetting, + bNumEndpoints, + bInterfaceClass.ToString("X2") + "h", + bInterfaceSubClass.ToString("X2") + "h", + bInterfaceProtocol.ToString("X2") + "h", + iInterface); + } + }; + + /// A structure representing the standard USB string descriptor. + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode, Pack = 1)] + public struct USB_STRING_DESCRIPTOR + { + /// Size of this descriptor (in bytes) + public byte bLength; + + /// Descriptor type + public byte bDescriptorType; + + /// Content of the string + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = AllKConstants.KLST_STRING_MAX_LEN)] public string bString; + + + public override string ToString() + { + return string.Format("bLength: {0}\nbDescriptorType: {1}\nbString: {2}\n", bLength, bDescriptorType.ToString("X2") + "h", bString); + } + }; + + /// A structure representing the common USB descriptor. + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)] + public struct USB_COMMON_DESCRIPTOR + { + /// Size of this descriptor (in bytes) + public byte bLength; + + /// Descriptor type + public byte bDescriptorType; + + + public override string ToString() + { + return string.Format("bLength: {0}\nbDescriptorType: {1}\n", bLength, bDescriptorType.ToString("X2") + "h"); + } + }; + + /// Allows hardware manufacturers to define groupings of interfaces. + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)] + public struct USB_INTERFACE_ASSOCIATION_DESCRIPTOR + { + /// Size of this descriptor (in bytes) + public byte bLength; + + /// Descriptor type + public byte bDescriptorType; + + /// First interface number of the set of interfaces that follow this descriptor + public byte bFirstInterface; + + /// The Number of interfaces follow this descriptor that are considered "associated" + public byte bInterfaceCount; + + /// \c bInterfaceClass used for this associated interfaces + public byte bFunctionClass; + + /// \c bInterfaceSubClass used for the associated interfaces + public byte bFunctionSubClass; + + /// \c bInterfaceProtocol used for the associated interfaces + public byte bFunctionProtocol; + + /// Index of string descriptor describing the associated interfaces + public byte iFunction; + + + public override string ToString() + { + return string.Format("bLength: {0}\nbDescriptorType: {1}\nbFirstInterface: {2}\nbInterfaceCount: {3}\nbFunctionClass: {4}\nbFunctionSubClass: {5}\nbFunctionProtocol: {6}\niFunction: {7}\n", + bLength, + bDescriptorType.ToString("X2") + "h", + bFirstInterface, + bInterfaceCount, + bFunctionClass.ToString("X2") + "h", + bFunctionSubClass.ToString("X2") + "h", + bFunctionProtocol.ToString("X2") + "h", + iFunction); + } + }; + + /// USB core driver API information structure. + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] + public struct KUSB_DRIVER_API_INFO + { + /// \readonly Driver id of the driver api. + public int DriverID; + + /// \readonly Number of valid functions contained in the driver API. + public int FunctionCount; + + + public override string ToString() + { + return string.Format("DriverID: {0}\nFunctionCount: {1}\n", DriverID, FunctionCount); + } + }; + + /// Driver API function set structure. + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Size = 512)] + public struct KUSB_DRIVER_API + { + /// Driver API information. + public KUSB_DRIVER_API_INFO Info; + + + [MarshalAs(UnmanagedType.FunctionPtr)] public KUSB_InitDelegate Init; + + + [MarshalAs(UnmanagedType.FunctionPtr)] public KUSB_FreeDelegate Free; + + + [MarshalAs(UnmanagedType.FunctionPtr)] public KUSB_ClaimInterfaceDelegate ClaimInterface; + + + [MarshalAs(UnmanagedType.FunctionPtr)] public KUSB_ReleaseInterfaceDelegate ReleaseInterface; + + + [MarshalAs(UnmanagedType.FunctionPtr)] public KUSB_SetAltInterfaceDelegate SetAltInterface; + + + [MarshalAs(UnmanagedType.FunctionPtr)] public KUSB_GetAltInterfaceDelegate GetAltInterface; + + + [MarshalAs(UnmanagedType.FunctionPtr)] public KUSB_GetDescriptorDelegate GetDescriptor; + + + [MarshalAs(UnmanagedType.FunctionPtr)] public KUSB_ControlTransferDelegate ControlTransfer; + + + [MarshalAs(UnmanagedType.FunctionPtr)] public KUSB_SetPowerPolicyDelegate SetPowerPolicy; + + + [MarshalAs(UnmanagedType.FunctionPtr)] public KUSB_GetPowerPolicyDelegate GetPowerPolicy; + + + [MarshalAs(UnmanagedType.FunctionPtr)] public KUSB_SetConfigurationDelegate SetConfiguration; + + + [MarshalAs(UnmanagedType.FunctionPtr)] public KUSB_GetConfigurationDelegate GetConfiguration; + + + [MarshalAs(UnmanagedType.FunctionPtr)] public KUSB_ResetDeviceDelegate ResetDevice; + + + [MarshalAs(UnmanagedType.FunctionPtr)] public KUSB_InitializeDelegate Initialize; + + + [MarshalAs(UnmanagedType.FunctionPtr)] public KUSB_SelectInterfaceDelegate SelectInterface; + + + [MarshalAs(UnmanagedType.FunctionPtr)] public KUSB_GetAssociatedInterfaceDelegate GetAssociatedInterface; + + + [MarshalAs(UnmanagedType.FunctionPtr)] public KUSB_CloneDelegate Clone; + + + [MarshalAs(UnmanagedType.FunctionPtr)] public KUSB_QueryInterfaceSettingsDelegate QueryInterfaceSettings; + + + [MarshalAs(UnmanagedType.FunctionPtr)] public KUSB_QueryDeviceInformationDelegate QueryDeviceInformation; + + + [MarshalAs(UnmanagedType.FunctionPtr)] public KUSB_SetCurrentAlternateSettingDelegate SetCurrentAlternateSetting; + + + [MarshalAs(UnmanagedType.FunctionPtr)] public KUSB_GetCurrentAlternateSettingDelegate GetCurrentAlternateSetting; + + + [MarshalAs(UnmanagedType.FunctionPtr)] public KUSB_QueryPipeDelegate QueryPipe; + + + [MarshalAs(UnmanagedType.FunctionPtr)] public KUSB_SetPipePolicyDelegate SetPipePolicy; + + + [MarshalAs(UnmanagedType.FunctionPtr)] public KUSB_GetPipePolicyDelegate GetPipePolicy; + + + [MarshalAs(UnmanagedType.FunctionPtr)] public KUSB_ReadPipeDelegate ReadPipe; + + + [MarshalAs(UnmanagedType.FunctionPtr)] public KUSB_WritePipeDelegate WritePipe; + + + [MarshalAs(UnmanagedType.FunctionPtr)] public KUSB_ResetPipeDelegate ResetPipe; + + + [MarshalAs(UnmanagedType.FunctionPtr)] public KUSB_AbortPipeDelegate AbortPipe; + + + [MarshalAs(UnmanagedType.FunctionPtr)] public KUSB_FlushPipeDelegate FlushPipe; + + + [MarshalAs(UnmanagedType.FunctionPtr)] public KUSB_IsoReadPipeDelegate IsoReadPipe; + + + [MarshalAs(UnmanagedType.FunctionPtr)] public KUSB_IsoWritePipeDelegate IsoWritePipe; + + + [MarshalAs(UnmanagedType.FunctionPtr)] public KUSB_GetCurrentFrameNumberDelegate GetCurrentFrameNumber; + + + [MarshalAs(UnmanagedType.FunctionPtr)] public KUSB_GetOverlappedResultDelegate GetOverlappedResult; + + + [MarshalAs(UnmanagedType.FunctionPtr)] public KUSB_GetPropertyDelegate GetProperty; + }; + + /// Hot plug parameter structure. + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Size = 2048)] + public struct KHOT_PARAMS + { + /// Hot plug event window handle to send/post messages when notifications occur. + public IntPtr UserHwnd; + + /// WM_USER message start offset used when sending/posting messages, See details. + public int UserMessage; + + /// Additional init/config parameters + public KHOT_FLAG Flags; + + /// File pattern matches for restricting notifcations to a single/group or all supported usb devices. + public KLST_PATTERN_MATCH PatternMatch; + + /// Hot plug event callback function invoked when notifications occur. + [MarshalAs(UnmanagedType.FunctionPtr)] public KHOT_PLUG_CB OnHotPlug; + + + public override string ToString() + { + return string.Format("UserHwnd: {0}\nUserMessage: {1}\nFlags: {2}\n", UserHwnd.ToString("X16") + "h", UserMessage.ToString("X8") + "h", Flags.ToString()); + } + }; + + [StructLayout(LayoutKind.Sequential)] + public struct KSTM_XFER_CONTEXT + { + private readonly IntPtr mHandlePtr; + + public KSTM_XFER_CONTEXT(IntPtr Handle) + { + mHandlePtr = Handle; + } + + public IntPtr Pointer + { + get + { + return mHandlePtr; + } + } + + /// KSTM_XFER_CONTEXT_MAP is used for calculating field offsets only + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] + private struct KSTM_XFER_CONTEXT_MAP + { + /// Internal stream buffer. + private readonly IntPtr Buffer; + + /// Size of internal stream buffer. + private readonly int BufferSize; + + /// Number of bytes to write or number of bytes read. + private readonly int TransferLength; + + /// User defined state. + private readonly IntPtr UserState; + }; + + private static readonly int ofsBuffer = Marshal.OffsetOf(typeof (KSTM_XFER_CONTEXT_MAP), "Buffer").ToInt32(); + private static readonly int ofsBufferSize = Marshal.OffsetOf(typeof (KSTM_XFER_CONTEXT_MAP), "BufferSize").ToInt32(); + private static readonly int ofsTransferLength = Marshal.OffsetOf(typeof (KSTM_XFER_CONTEXT_MAP), "TransferLength").ToInt32(); + private static readonly int ofsUserState = Marshal.OffsetOf(typeof (KSTM_XFER_CONTEXT_MAP), "UserState").ToInt32(); + + + /// Internal stream buffer. + public IntPtr Buffer + { + get + { + return Marshal.ReadIntPtr(mHandlePtr, ofsBuffer); + } + } + + + /// Size of internal stream buffer. + public int BufferSize + { + get + { + return Marshal.ReadInt32(mHandlePtr, ofsBufferSize); + } + } + + + /// Number of bytes to write or number of bytes read. + public int TransferLength + { + get + { + return Marshal.ReadInt32(mHandlePtr, ofsTransferLength); + } + } + + + /// User defined state. + public IntPtr UserState + { + get + { + return Marshal.ReadIntPtr(mHandlePtr, ofsUserState); + } + set + { + Marshal.WriteIntPtr(mHandlePtr, ofsUserState, value); + } + } + + + public override string ToString() + { + return string.Format("Buffer: {0}\nBufferSize: {1}\nTransferLength: {2}\nUserState: {3}\n", Buffer.ToString("X16") + "h", BufferSize, TransferLength, UserState.ToString("X16") + "h"); + } + } + + [StructLayout(LayoutKind.Sequential)] + public struct KSTM_INFO + { + private readonly IntPtr mHandlePtr; + + public KSTM_INFO(IntPtr Handle) + { + mHandlePtr = Handle; + } + + public IntPtr Pointer + { + get + { + return mHandlePtr; + } + } + + /// KSTM_INFO_MAP is used for calculating field offsets only + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] + private struct KSTM_INFO_MAP + { + /// \ref KUSB_HANDLE this stream uses. + private readonly IntPtr UsbHandle; + + /// This parameter corresponds to the bEndpointAddress field in the endpoint descriptor. + private readonly byte PipeID; + + /// Maximum transfer read/write request allowed pending. + private readonly int MaxPendingTransfers; + + /// Maximum transfer sage size. + private readonly int MaxTransferSize; + + /// Maximum number of I/O request allowed pending. + private readonly int MaxPendingIO; + + /// Populated with the endpoint descriptor for the specified \c PipeID. + private readonly USB_ENDPOINT_DESCRIPTOR EndpointDescriptor; + + /// Populated with the driver api for the specified \c UsbHandle. + private readonly KUSB_DRIVER_API DriverAPI; + + /// Populated with the device file handle for the specified \c UsbHandle. + private readonly IntPtr DeviceHandle; + + /// Stream handle. + private readonly IntPtr StreamHandle; + + /// Stream info user defined state. + private readonly IntPtr UserState; + }; + + private static readonly int ofsUsbHandle = Marshal.OffsetOf(typeof (KSTM_INFO_MAP), "UsbHandle").ToInt32(); + private static readonly int ofsPipeID = Marshal.OffsetOf(typeof (KSTM_INFO_MAP), "PipeID").ToInt32(); + private static readonly int ofsMaxPendingTransfers = Marshal.OffsetOf(typeof (KSTM_INFO_MAP), "MaxPendingTransfers").ToInt32(); + private static readonly int ofsMaxTransferSize = Marshal.OffsetOf(typeof (KSTM_INFO_MAP), "MaxTransferSize").ToInt32(); + private static readonly int ofsMaxPendingIO = Marshal.OffsetOf(typeof (KSTM_INFO_MAP), "MaxPendingIO").ToInt32(); + private static readonly int ofsEndpointDescriptor = Marshal.OffsetOf(typeof (KSTM_INFO_MAP), "EndpointDescriptor").ToInt32(); + private static readonly int ofsDriverAPI = Marshal.OffsetOf(typeof (KSTM_INFO_MAP), "DriverAPI").ToInt32(); + private static readonly int ofsDeviceHandle = Marshal.OffsetOf(typeof (KSTM_INFO_MAP), "DeviceHandle").ToInt32(); + private static readonly int ofsStreamHandle = Marshal.OffsetOf(typeof (KSTM_INFO_MAP), "StreamHandle").ToInt32(); + private static readonly int ofsUserState = Marshal.OffsetOf(typeof (KSTM_INFO_MAP), "UserState").ToInt32(); + + + /// \ref KUSB_HANDLE this stream uses. + public IntPtr UsbHandle + { + get + { + return Marshal.ReadIntPtr(mHandlePtr, ofsUsbHandle); + } + } + + + /// This parameter corresponds to the bEndpointAddress field in the endpoint descriptor. + public byte PipeID + { + get + { + return Marshal.ReadByte(mHandlePtr, ofsPipeID); + } + } + + + /// Maximum transfer read/write request allowed pending. + public int MaxPendingTransfers + { + get + { + return Marshal.ReadInt32(mHandlePtr, ofsMaxPendingTransfers); + } + } + + + /// Maximum transfer sage size. + public int MaxTransferSize + { + get + { + return Marshal.ReadInt32(mHandlePtr, ofsMaxTransferSize); + } + } + + + /// Maximum number of I/O request allowed pending. + public int MaxPendingIO + { + get + { + return Marshal.ReadInt32(mHandlePtr, ofsMaxPendingIO); + } + } + + + /// Populated with the endpoint descriptor for the specified \c PipeID. + public USB_ENDPOINT_DESCRIPTOR EndpointDescriptor + { + get + { + return (USB_ENDPOINT_DESCRIPTOR) Marshal.PtrToStructure(new IntPtr(mHandlePtr.ToInt64() + ofsEndpointDescriptor), typeof (USB_ENDPOINT_DESCRIPTOR)); + } + } + + + /// Populated with the driver api for the specified \c UsbHandle. + public KUSB_DRIVER_API DriverAPI + { + get + { + return (KUSB_DRIVER_API) Marshal.PtrToStructure(new IntPtr(mHandlePtr.ToInt64() + ofsDriverAPI), typeof (KUSB_DRIVER_API)); + } + } + + + /// Populated with the device file handle for the specified \c UsbHandle. + public IntPtr DeviceHandle + { + get + { + return Marshal.ReadIntPtr(mHandlePtr, ofsDeviceHandle); + } + } + + + /// Stream handle. + public IntPtr StreamHandle + { + get + { + return Marshal.ReadIntPtr(mHandlePtr, ofsStreamHandle); + } + } + + + /// Stream info user defined state. + public IntPtr UserState + { + get + { + return Marshal.ReadIntPtr(mHandlePtr, ofsUserState); + } + set + { + Marshal.WriteIntPtr(mHandlePtr, ofsUserState, value); + } + } + + + public override string ToString() + { + return string.Format("UsbHandle: {0}\nPipeID: {1}\nMaxPendingTransfers: {2}\nMaxTransferSize: {3}\nMaxPendingIO: {4}\nDeviceHandle: {5}\nStreamHandle: {6}\nUserState: {7}\n", + UsbHandle.ToString("X16") + "h", + PipeID.ToString("X2") + "h", + MaxPendingTransfers, + MaxTransferSize, + MaxPendingIO, + DeviceHandle.ToString("X16") + "h", + StreamHandle.ToString("X16") + "h", + UserState.ToString("X16") + "h"); + } + } + + /// Stream callback structure. + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Size = 64)] + public struct KSTM_CALLBACK + { + /// Executed when a transfer error occurs. + [MarshalAs(UnmanagedType.FunctionPtr)] public KSTM_ERROR_CB Error; + + /// Executed to submit a transfer. + [MarshalAs(UnmanagedType.FunctionPtr)] public KSTM_SUBMIT_CB Submit; + + /// Executed when a valid transfer completes. + [MarshalAs(UnmanagedType.FunctionPtr)] public KSTM_COMPLETE_CB Complete; + + /// Executed for every transfer context when the stream is started with \ref StmK_Start. + [MarshalAs(UnmanagedType.FunctionPtr)] public KSTM_STARTED_CB Started; + + /// Executed for every transfer context when the stream is stopped with \ref StmK_Stop. + [MarshalAs(UnmanagedType.FunctionPtr)] public KSTM_STOPPED_CB Stopped; + + /// Executed immediately after a transfer completes. + [MarshalAs(UnmanagedType.FunctionPtr)] public KSTM_BEFORE_COMPLETE_CB BeforeComplete; + }; + + #endregion + + #region Delegates + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate int KLIB_HANDLE_CLEANUP_CB([In] IntPtr Handle, KLIB_HANDLE_TYPE HandleType, IntPtr UserContext); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool KISO_ENUM_PACKETS_CB(int PacketIndex, [In] ref KISO_PACKET IsoPacket, IntPtr UserState); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool KLST_ENUM_DEVINFO_CB([In] KLST_HANDLE DeviceList, [In] KLST_DEVINFO_HANDLE DeviceInfo, IntPtr Context); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool KUSB_InitDelegate([Out] out KUSB_HANDLE InterfaceHandle, [In] KLST_DEVINFO_HANDLE DevInfo); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool KUSB_FreeDelegate([In] KUSB_HANDLE InterfaceHandle); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool KUSB_ClaimInterfaceDelegate([In] KUSB_HANDLE InterfaceHandle, byte NumberOrIndex, bool IsIndex); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool KUSB_ReleaseInterfaceDelegate([In] KUSB_HANDLE InterfaceHandle, byte NumberOrIndex, bool IsIndex); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool KUSB_SetAltInterfaceDelegate([In] KUSB_HANDLE InterfaceHandle, byte NumberOrIndex, bool IsIndex, byte AltSettingNumber); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool KUSB_GetAltInterfaceDelegate([In] KUSB_HANDLE InterfaceHandle, byte NumberOrIndex, bool IsIndex, out byte AltSettingNumber); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool KUSB_GetDescriptorDelegate([In] KUSB_HANDLE InterfaceHandle, byte DescriptorType, byte Index, ushort LanguageID, IntPtr Buffer, int BufferLength, out int LengthTransferred); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool KUSB_ControlTransferDelegate([In] KUSB_HANDLE InterfaceHandle, WINUSB_SETUP_PACKET SetupPacket, IntPtr Buffer, int BufferLength, out int LengthTransferred, IntPtr Overlapped); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool KUSB_SetPowerPolicyDelegate([In] KUSB_HANDLE InterfaceHandle, int PolicyType, int ValueLength, IntPtr Value); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool KUSB_GetPowerPolicyDelegate([In] KUSB_HANDLE InterfaceHandle, int PolicyType, ref int ValueLength, IntPtr Value); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool KUSB_SetConfigurationDelegate([In] KUSB_HANDLE InterfaceHandle, byte ConfigurationNumber); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool KUSB_GetConfigurationDelegate([In] KUSB_HANDLE InterfaceHandle, out byte ConfigurationNumber); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool KUSB_ResetDeviceDelegate([In] KUSB_HANDLE InterfaceHandle); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool KUSB_InitializeDelegate(IntPtr DeviceHandle, [Out] out KUSB_HANDLE InterfaceHandle); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool KUSB_SelectInterfaceDelegate([In] KUSB_HANDLE InterfaceHandle, byte NumberOrIndex, bool IsIndex); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool KUSB_GetAssociatedInterfaceDelegate([In] KUSB_HANDLE InterfaceHandle, byte AssociatedInterfaceIndex, [Out] out KUSB_HANDLE AssociatedInterfaceHandle); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool KUSB_CloneDelegate([In] KUSB_HANDLE InterfaceHandle, [Out] out KUSB_HANDLE DstInterfaceHandle); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool KUSB_QueryInterfaceSettingsDelegate([In] KUSB_HANDLE InterfaceHandle, byte AltSettingIndex, [Out] out USB_INTERFACE_DESCRIPTOR UsbAltInterfaceDescriptor); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool KUSB_QueryDeviceInformationDelegate([In] KUSB_HANDLE InterfaceHandle, int InformationType, ref int BufferLength, IntPtr Buffer); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool KUSB_SetCurrentAlternateSettingDelegate([In] KUSB_HANDLE InterfaceHandle, byte AltSettingNumber); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool KUSB_GetCurrentAlternateSettingDelegate([In] KUSB_HANDLE InterfaceHandle, out byte AltSettingNumber); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool KUSB_QueryPipeDelegate([In] KUSB_HANDLE InterfaceHandle, byte AltSettingNumber, byte PipeIndex, [Out] out WINUSB_PIPE_INFORMATION PipeInformation); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool KUSB_SetPipePolicyDelegate([In] KUSB_HANDLE InterfaceHandle, byte PipeID, int PolicyType, int ValueLength, IntPtr Value); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool KUSB_GetPipePolicyDelegate([In] KUSB_HANDLE InterfaceHandle, byte PipeID, int PolicyType, ref int ValueLength, IntPtr Value); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool KUSB_ReadPipeDelegate([In] KUSB_HANDLE InterfaceHandle, byte PipeID, IntPtr Buffer, int BufferLength, out int LengthTransferred, IntPtr Overlapped); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool KUSB_WritePipeDelegate([In] KUSB_HANDLE InterfaceHandle, byte PipeID, IntPtr Buffer, int BufferLength, out int LengthTransferred, IntPtr Overlapped); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool KUSB_ResetPipeDelegate([In] KUSB_HANDLE InterfaceHandle, byte PipeID); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool KUSB_AbortPipeDelegate([In] KUSB_HANDLE InterfaceHandle, byte PipeID); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool KUSB_FlushPipeDelegate([In] KUSB_HANDLE InterfaceHandle, byte PipeID); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool KUSB_IsoReadPipeDelegate([In] KUSB_HANDLE InterfaceHandle, byte PipeID, IntPtr Buffer, int BufferLength, IntPtr Overlapped, [In] KISO_CONTEXT IsoContext); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool KUSB_IsoWritePipeDelegate([In] KUSB_HANDLE InterfaceHandle, byte PipeID, IntPtr Buffer, int BufferLength, IntPtr Overlapped, [In] KISO_CONTEXT IsoContext); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool KUSB_GetCurrentFrameNumberDelegate([In] KUSB_HANDLE InterfaceHandle, out int FrameNumber); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool KUSB_GetOverlappedResultDelegate([In] KUSB_HANDLE InterfaceHandle, IntPtr Overlapped, out int lpNumberOfBytesTransferred, bool bWait); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate bool KUSB_GetPropertyDelegate([In] KUSB_HANDLE InterfaceHandle, KUSB_PROPERTY PropertyType, ref int PropertySize, IntPtr Value); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate void KHOT_PLUG_CB([In] KHOT_HANDLE HotHandle, [In] KLST_DEVINFO_HANDLE DeviceInfo, KLST_SYNC_FLAG PlugType); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate int KSTM_ERROR_CB([In] KSTM_INFO StreamInfo, [In] KSTM_XFER_CONTEXT XferContext, int XferContextIndex, int ErrorCode); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate int KSTM_SUBMIT_CB([In] KSTM_INFO StreamInfo, [In] KSTM_XFER_CONTEXT XferContext, int XferContextIndex, IntPtr Overlapped); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate int KSTM_STARTED_CB([In] KSTM_INFO StreamInfo, [In] KSTM_XFER_CONTEXT XferContext, int XferContextIndex); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate int KSTM_STOPPED_CB([In] KSTM_INFO StreamInfo, [In] KSTM_XFER_CONTEXT XferContext, int XferContextIndex); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate int KSTM_COMPLETE_CB([In] KSTM_INFO StreamInfo, [In] KSTM_XFER_CONTEXT XferContext, int XferContextIndex, int ErrorCode); + + [UnmanagedFunctionPointer(CallingConvention.Winapi, CharSet = CharSet.Ansi, SetLastError = true)] + public delegate KSTM_COMPLETE_RESULT KSTM_BEFORE_COMPLETE_CB([In] KSTM_INFO StreamInfo, [In] KSTM_XFER_CONTEXT XferContext, int XferContextIndex, ref int ErrorCode); + + #endregion + + public class LstK : IDisposable + { + protected KLST_HANDLE mHandleStruct; + protected bool mbDisposed; + + protected LstK() + { + } + + #region IDisposable Members + + /// Explicitly closes and frees the handle. + public virtual void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + #endregion + + ~LstK() + { + Dispose(false); + } + + protected virtual void Dispose(bool disposing) + { + if (!mbDisposed) + { + if (mHandleStruct.Pointer != IntPtr.Zero) + { + AllKFunctions.LstK_Free(mHandleStruct); + Debug.Print("{0} Dispose: Freed Handle:{1:X16}h Explicit:{2}", GetType().Name, mHandleStruct.Pointer.ToInt64(), disposing); + } + else + Debug.Print("{0} Dispose: [WARNING] Handle is null", GetType().Name); + + mHandleStruct = new KLST_HANDLE(IntPtr.Zero); + mbDisposed = true; + } + } + + /// Initializes a new usb device list containing all supported devices. + protected bool Init(KLST_FLAG Flags) + { + bool success = AllKFunctions.LstK_Init(out mHandleStruct, Flags); + + if (!success) throw new Exception(string.Format("{0} failed initializing. ErrorCode={1:X8}h", GetType().Name, Marshal.GetLastWin32Error())); + + Debug.Print("{0} Init: handle 0x{1:X16}", GetType().Name, mHandleStruct.Pointer.ToInt64()); + return true; + } + + /// Initializes a new usb device list containing only devices matching a specific class GUID. + protected bool InitEx(KLST_FLAG Flags, ref KLST_PATTERN_MATCH PatternMatch) + { + bool success = AllKFunctions.LstK_InitEx(out mHandleStruct, Flags, ref PatternMatch); + + if (!success) throw new Exception(string.Format("{0} failed initializing. ErrorCode={1:X8}h", GetType().Name, Marshal.GetLastWin32Error())); + + Debug.Print("{0} Init: handle 0x{1:X16}", GetType().Name, mHandleStruct.Pointer.ToInt64()); + return true; + } + + #region Public Members + + /// Initializes a new usb device list containing all supported devices. + public LstK(KLST_FLAG Flags) + { + bool success = AllKFunctions.LstK_Init(out mHandleStruct, Flags); + + if (!success) throw new Exception(string.Format("{0} failed initializing. ErrorCode={1:X8}h", GetType().Name, Marshal.GetLastWin32Error())); + + Debug.Print("{0} Init: handle 0x{1:X16}", GetType().Name, mHandleStruct.Pointer.ToInt64()); + } + + /// Initializes a new usb device list containing only devices matching a specific class GUID. + public LstK(KLST_FLAG Flags, ref KLST_PATTERN_MATCH PatternMatch) + { + bool success = AllKFunctions.LstK_InitEx(out mHandleStruct, Flags, ref PatternMatch); + + if (!success) throw new Exception(string.Format("{0} failed initializing. ErrorCode={1:X8}h", GetType().Name, Marshal.GetLastWin32Error())); + + Debug.Print("{0} Init: handle 0x{1:X16}", GetType().Name, mHandleStruct.Pointer.ToInt64()); + } + + /// Counts the number of device info elements in a device list. + public virtual bool Count(ref int Count) + { + return AllKFunctions.LstK_Count(mHandleStruct, ref Count); + } + + /// Gets the \ref KLST_DEVINFO element for the current position. + public virtual bool Current(out KLST_DEVINFO_HANDLE DeviceInfo) + { + return AllKFunctions.LstK_Current(mHandleStruct, out DeviceInfo); + } + + /// Enumerates \ref KLST_DEVINFO elements of a \ref KLST_HANDLE. + public virtual bool Enumerate(KLST_ENUM_DEVINFO_CB EnumDevListCB, IntPtr Context) + { + return AllKFunctions.LstK_Enumerate(mHandleStruct, EnumDevListCB, Context); + } + + /// Find a device by vendor and product id + public virtual bool FindByVidPid(int Vid, int Pid, out KLST_DEVINFO_HANDLE DeviceInfo) + { + return AllKFunctions.LstK_FindByVidPid(mHandleStruct, Vid, Pid, out DeviceInfo); + } + + /// Calls the dispose method. + public virtual void Free() + { + Dispose(); + } + + /// Gets the handle class structure. + public KLST_HANDLE Handle + { + get + { + return mHandleStruct; + } + } + + /// Advances the device list current \ref KLST_DEVINFO position. + public virtual bool MoveNext(out KLST_DEVINFO_HANDLE DeviceInfo) + { + return AllKFunctions.LstK_MoveNext(mHandleStruct, out DeviceInfo); + } + + /// Sets the device list to its initial position, which is before the first element in the list. + public virtual void MoveReset() + { + AllKFunctions.LstK_MoveReset(mHandleStruct); + } + + #endregion + } + + public class HotK : IDisposable + { + protected KHOT_HANDLE mHandleStruct; + protected bool mbDisposed; + + protected HotK() + { + } + + #region IDisposable Members + + /// Explicitly closes and frees the handle. + public virtual void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + #endregion + + ~HotK() + { + Dispose(false); + } + + protected virtual void Dispose(bool disposing) + { + if (!mbDisposed) + { + if (mHandleStruct.Pointer != IntPtr.Zero) + { + AllKFunctions.HotK_Free(mHandleStruct); + Debug.Print("{0} Dispose: Freed Handle:{1:X16}h Explicit:{2}", GetType().Name, mHandleStruct.Pointer.ToInt64(), disposing); + } + else + Debug.Print("{0} Dispose: [WARNING] Handle is null", GetType().Name); + + mHandleStruct = new KHOT_HANDLE(IntPtr.Zero); + mbDisposed = true; + } + } + + /// Creates a new hot-plug handle for USB device arrival/removal event monitoring. + protected bool Init(ref KHOT_PARAMS InitParams) + { + bool success = AllKFunctions.HotK_Init(out mHandleStruct, ref InitParams); + + if (!success) throw new Exception(string.Format("{0} failed initializing. ErrorCode={1:X8}h", GetType().Name, Marshal.GetLastWin32Error())); + + Debug.Print("{0} Init: handle 0x{1:X16}", GetType().Name, mHandleStruct.Pointer.ToInt64()); + return true; + } + + #region Public Members + + /// Creates a new hot-plug handle for USB device arrival/removal event monitoring. + public HotK(ref KHOT_PARAMS InitParams) + { + bool success = AllKFunctions.HotK_Init(out mHandleStruct, ref InitParams); + + if (!success) throw new Exception(string.Format("{0} failed initializing. ErrorCode={1:X8}h", GetType().Name, Marshal.GetLastWin32Error())); + + Debug.Print("{0} Init: handle 0x{1:X16}", GetType().Name, mHandleStruct.Pointer.ToInt64()); + } + + /// Calls the dispose method. + public virtual void Free() + { + Dispose(); + } + + /// Frees all hot-plug handles initialized with \ref HotK_Init. + public virtual void FreeAll() + { + AllKFunctions.HotK_FreeAll(); + } + + /// Gets the handle class structure. + public KHOT_HANDLE Handle + { + get + { + return mHandleStruct; + } + } + + #endregion + } + + public class UsbK : IDisposable + { + protected KUSB_DRIVER_API driverAPI; + protected KUSB_HANDLE mHandleStruct; + protected bool mbDisposed; + + protected UsbK() + { + } + + #region IDisposable Members + + /// Explicitly closes and frees the handle. + public virtual void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + #endregion + + ~UsbK() + { + Dispose(false); + } + + protected virtual void Dispose(bool disposing) + { + if (!mbDisposed) + { + if (mHandleStruct.Pointer != IntPtr.Zero) + { + AllKFunctions.UsbK_Free(mHandleStruct); + Debug.Print("{0} Dispose: Freed Handle:{1:X16}h Explicit:{2}", GetType().Name, mHandleStruct.Pointer.ToInt64(), disposing); + } + else + Debug.Print("{0} Dispose: [WARNING] Handle is null", GetType().Name); + + mHandleStruct = new KUSB_HANDLE(IntPtr.Zero); + mbDisposed = true; + } + } + + /// Creates/opens a libusbK interface handle from the device list. This is a preferred method. + protected bool Init(KLST_DEVINFO_HANDLE DevInfo) + { + bool success = AllKFunctions.LibK_LoadDriverAPI(out driverAPI, DevInfo.DriverID); + + if (!success) throw new Exception(string.Format("{0} failed loading Driver API. ErrorCode={1:X8}h", GetType().Name, Marshal.GetLastWin32Error())); + + success = driverAPI.Init(out mHandleStruct, DevInfo); + + if (!success) + throw new Exception(string.Format("{0} failed initializing usb device. ErrorCode={1:X8}h", GetType().Name, Marshal.GetLastWin32Error())); + + Debug.Print("{0} Init: handle 0x{1:X16}", GetType().Name, mHandleStruct.Pointer.ToInt64()); + return true; + } + + /// Creates a libusbK handle for the device specified by a file handle. + protected bool Initialize(IntPtr DeviceHandle, KUSB_DRVID driverID) + { + bool success = AllKFunctions.LibK_LoadDriverAPI(out driverAPI, (int) driverID); + + if (!success) throw new Exception(string.Format("{0} failed loading Driver API. ErrorCode={1:X8}h", GetType().Name, Marshal.GetLastWin32Error())); + + success = driverAPI.Initialize(DeviceHandle, out mHandleStruct); + + if (!success) + throw new Exception(string.Format("{0} failed initializing usb device. ErrorCode={1:X8}h", GetType().Name, Marshal.GetLastWin32Error())); + + Debug.Print("{0} Init: handle 0x{1:X16}", GetType().Name, mHandleStruct.Pointer.ToInt64()); + return true; + } + + #region Public Members + + /// Creates/opens a libusbK interface handle from the device list. This is a preferred method. + public UsbK(KLST_DEVINFO_HANDLE DevInfo) + { + bool success = AllKFunctions.LibK_LoadDriverAPI(out driverAPI, DevInfo.DriverID); + + if (!success) throw new Exception(string.Format("{0} failed loading Driver API. ErrorCode={1:X8}h", GetType().Name, Marshal.GetLastWin32Error())); + + success = driverAPI.Init(out mHandleStruct, DevInfo); + + if (!success) + throw new Exception(string.Format("{0} failed initializing usb device. ErrorCode={1:X8}h", GetType().Name, Marshal.GetLastWin32Error())); + + Debug.Print("{0} Init: handle 0x{1:X16}", GetType().Name, mHandleStruct.Pointer.ToInt64()); + } + + /// Creates a libusbK handle for the device specified by a file handle. + public UsbK(IntPtr DeviceHandle, KUSB_DRVID driverID) + { + bool success = AllKFunctions.LibK_LoadDriverAPI(out driverAPI, (int) driverID); + + if (!success) throw new Exception(string.Format("{0} failed loading Driver API. ErrorCode={1:X8}h", GetType().Name, Marshal.GetLastWin32Error())); + + success = driverAPI.Initialize(DeviceHandle, out mHandleStruct); + + if (!success) + throw new Exception(string.Format("{0} failed initializing usb device. ErrorCode={1:X8}h", GetType().Name, Marshal.GetLastWin32Error())); + + Debug.Print("{0} Init: handle 0x{1:X16}", GetType().Name, mHandleStruct.Pointer.ToInt64()); + } + + /// Aborts all of the pending transfers for a pipe. + public virtual bool AbortPipe(byte PipeID) + { + return driverAPI.AbortPipe(mHandleStruct, PipeID); + } + + /// Claims the specified interface by number or index. + public virtual bool ClaimInterface(byte NumberOrIndex, bool IsIndex) + { + return driverAPI.ClaimInterface(mHandleStruct, NumberOrIndex, IsIndex); + } + + /// Clones the specified interface handle. + public virtual bool Clone(out KUSB_HANDLE DstInterfaceHandle) + { + return driverAPI.Clone(mHandleStruct, out DstInterfaceHandle); + } + + /// Transmits control data over a default control endpoint. + public virtual bool ControlTransfer(WINUSB_SETUP_PACKET SetupPacket, IntPtr Buffer, int BufferLength, out int LengthTransferred, IntPtr Overlapped) + { + return driverAPI.ControlTransfer(mHandleStruct, SetupPacket, Buffer, BufferLength, out LengthTransferred, Overlapped); + } + + /// Transmits control data over a default control endpoint. + public virtual bool ControlTransfer(WINUSB_SETUP_PACKET SetupPacket, Array Buffer, int BufferLength, out int LengthTransferred, IntPtr Overlapped) + { + return driverAPI.ControlTransfer(mHandleStruct, SetupPacket, Marshal.UnsafeAddrOfPinnedArrayElement(Buffer, 0), BufferLength, out LengthTransferred, Overlapped); + } + + /// Transmits control data over a default control endpoint. + public virtual bool ControlTransfer(WINUSB_SETUP_PACKET SetupPacket, Array Buffer, int BufferLength, out int LengthTransferred, KOVL_HANDLE Overlapped) + { + return driverAPI.ControlTransfer(mHandleStruct, SetupPacket, Marshal.UnsafeAddrOfPinnedArrayElement(Buffer, 0), BufferLength, out LengthTransferred, Overlapped.Pointer); + } + + /// Transmits control data over a default control endpoint. + public virtual bool ControlTransfer(WINUSB_SETUP_PACKET SetupPacket, IntPtr Buffer, int BufferLength, out int LengthTransferred, KOVL_HANDLE Overlapped) + { + return driverAPI.ControlTransfer(mHandleStruct, SetupPacket, Buffer, BufferLength, out LengthTransferred, Overlapped.Pointer); + } + + /// Discards any data that is cached in a pipe. + public virtual bool FlushPipe(byte PipeID) + { + return driverAPI.FlushPipe(mHandleStruct, PipeID); + } + + /// Calls the dispose method. + public virtual void Free() + { + Dispose(); + } + + /// Gets the alternate setting for the specified interface. + public virtual bool GetAltInterface(byte NumberOrIndex, bool IsIndex, out byte AltSettingNumber) + { + return driverAPI.GetAltInterface(mHandleStruct, NumberOrIndex, IsIndex, out AltSettingNumber); + } + + /// Retrieves a handle for an associated interface. + public virtual bool GetAssociatedInterface(byte AssociatedInterfaceIndex, out KUSB_HANDLE AssociatedInterfaceHandle) + { + return driverAPI.GetAssociatedInterface(mHandleStruct, AssociatedInterfaceIndex, out AssociatedInterfaceHandle); + } + + /// Gets the device current configuration number. + public virtual bool GetConfiguration(out byte ConfigurationNumber) + { + return driverAPI.GetConfiguration(mHandleStruct, out ConfigurationNumber); + } + + /// Gets the current alternate interface setting for an interface. + public virtual bool GetCurrentAlternateSetting(out byte AltSettingNumber) + { + return driverAPI.GetCurrentAlternateSetting(mHandleStruct, out AltSettingNumber); + } + + /// Retrieves the current USB frame number. + public virtual bool GetCurrentFrameNumber(out int FrameNumber) + { + return driverAPI.GetCurrentFrameNumber(mHandleStruct, out FrameNumber); + } + + /// Gets the requested descriptor. This is a synchronous operation. + public virtual bool GetDescriptor(byte DescriptorType, byte Index, int LanguageID, IntPtr Buffer, int BufferLength, out int LengthTransferred) + { + return driverAPI.GetDescriptor(mHandleStruct, DescriptorType, Index, (ushort) LanguageID, Buffer, BufferLength, out LengthTransferred); + } + + /// Gets the requested descriptor. This is a synchronous operation. + public virtual bool GetDescriptor(byte DescriptorType, byte Index, int LanguageID, Array Buffer, int BufferLength, out int LengthTransferred) + { + return driverAPI.GetDescriptor(mHandleStruct, DescriptorType, Index, (ushort) LanguageID, Marshal.UnsafeAddrOfPinnedArrayElement(Buffer, 0), BufferLength, out LengthTransferred); + } + + /// Retrieves the results of an overlapped operation on the specified libusbK handle. + public virtual bool GetOverlappedResult(IntPtr Overlapped, out int lpNumberOfBytesTransferred, bool bWait) + { + return driverAPI.GetOverlappedResult(mHandleStruct, Overlapped, out lpNumberOfBytesTransferred, bWait); + } + + /// Retrieves the results of an overlapped operation on the specified libusbK handle. + public virtual bool GetOverlappedResult(KOVL_HANDLE Overlapped, out int lpNumberOfBytesTransferred, bool bWait) + { + return driverAPI.GetOverlappedResult(mHandleStruct, Overlapped.Pointer, out lpNumberOfBytesTransferred, bWait); + } + + /// Gets the policy for a specific pipe (endpoint). + public virtual bool GetPipePolicy(byte PipeID, int PolicyType, ref int ValueLength, IntPtr Value) + { + return driverAPI.GetPipePolicy(mHandleStruct, PipeID, PolicyType, ref ValueLength, Value); + } + + /// Gets the policy for a specific pipe (endpoint). + public virtual bool GetPipePolicy(byte PipeID, int PolicyType, ref int ValueLength, Array Value) + { + return driverAPI.GetPipePolicy(mHandleStruct, PipeID, PolicyType, ref ValueLength, Marshal.UnsafeAddrOfPinnedArrayElement(Value, 0)); + } + + /// Gets the power policy for a device. + public virtual bool GetPowerPolicy(int PolicyType, ref int ValueLength, IntPtr Value) + { + return driverAPI.GetPowerPolicy(mHandleStruct, PolicyType, ref ValueLength, Value); + } + + /// Gets the power policy for a device. + public virtual bool GetPowerPolicy(int PolicyType, ref int ValueLength, Array Value) + { + return driverAPI.GetPowerPolicy(mHandleStruct, PolicyType, ref ValueLength, Marshal.UnsafeAddrOfPinnedArrayElement(Value, 0)); + } + + /// Gets a USB device (driver specific) property from usb handle. + public virtual bool GetProperty(KUSB_PROPERTY PropertyType, ref int PropertySize, IntPtr Value) + { + return driverAPI.GetProperty(mHandleStruct, PropertyType, ref PropertySize, Value); + } + + /// Gets a USB device (driver specific) property from usb handle. + public virtual bool GetProperty(KUSB_PROPERTY PropertyType, ref int PropertySize, Array Value) + { + return driverAPI.GetProperty(mHandleStruct, PropertyType, ref PropertySize, Marshal.UnsafeAddrOfPinnedArrayElement(Value, 0)); + } + + /// Gets the handle class structure. + public KUSB_HANDLE Handle + { + get + { + return mHandleStruct; + } + } + + /// Reads from an isochronous pipe. + public virtual bool IsoReadPipe(byte PipeID, IntPtr Buffer, int BufferLength, IntPtr Overlapped, KISO_CONTEXT IsoContext) + { + return driverAPI.IsoReadPipe(mHandleStruct, PipeID, Buffer, BufferLength, Overlapped, IsoContext); + } + + /// Reads from an isochronous pipe. + public virtual bool IsoReadPipe(byte PipeID, Array Buffer, int BufferLength, IntPtr Overlapped, KISO_CONTEXT IsoContext) + { + return driverAPI.IsoReadPipe(mHandleStruct, PipeID, Marshal.UnsafeAddrOfPinnedArrayElement(Buffer, 0), BufferLength, Overlapped, IsoContext); + } + + /// Reads from an isochronous pipe. + public virtual bool IsoReadPipe(byte PipeID, Array Buffer, int BufferLength, KOVL_HANDLE Overlapped, KISO_CONTEXT IsoContext) + { + return driverAPI.IsoReadPipe(mHandleStruct, PipeID, Marshal.UnsafeAddrOfPinnedArrayElement(Buffer, 0), BufferLength, Overlapped.Pointer, IsoContext); + } + + /// Reads from an isochronous pipe. + public virtual bool IsoReadPipe(byte PipeID, IntPtr Buffer, int BufferLength, KOVL_HANDLE Overlapped, KISO_CONTEXT IsoContext) + { + return driverAPI.IsoReadPipe(mHandleStruct, PipeID, Buffer, BufferLength, Overlapped.Pointer, IsoContext); + } + + /// Writes to an isochronous pipe. + public virtual bool IsoWritePipe(byte PipeID, IntPtr Buffer, int BufferLength, IntPtr Overlapped, KISO_CONTEXT IsoContext) + { + return driverAPI.IsoWritePipe(mHandleStruct, PipeID, Buffer, BufferLength, Overlapped, IsoContext); + } + + /// Writes to an isochronous pipe. + public virtual bool IsoWritePipe(byte PipeID, Array Buffer, int BufferLength, IntPtr Overlapped, KISO_CONTEXT IsoContext) + { + return driverAPI.IsoWritePipe(mHandleStruct, PipeID, Marshal.UnsafeAddrOfPinnedArrayElement(Buffer, 0), BufferLength, Overlapped, IsoContext); + } + + /// Writes to an isochronous pipe. + public virtual bool IsoWritePipe(byte PipeID, Array Buffer, int BufferLength, KOVL_HANDLE Overlapped, KISO_CONTEXT IsoContext) + { + return driverAPI.IsoWritePipe(mHandleStruct, PipeID, Marshal.UnsafeAddrOfPinnedArrayElement(Buffer, 0), BufferLength, Overlapped.Pointer, IsoContext); + } + + /// Writes to an isochronous pipe. + public virtual bool IsoWritePipe(byte PipeID, IntPtr Buffer, int BufferLength, KOVL_HANDLE Overlapped, KISO_CONTEXT IsoContext) + { + return driverAPI.IsoWritePipe(mHandleStruct, PipeID, Buffer, BufferLength, Overlapped.Pointer, IsoContext); + } + + /// Retrieves information about the physical device that is associated with a libusbK handle. + public virtual bool QueryDeviceInformation(int InformationType, ref int BufferLength, IntPtr Buffer) + { + return driverAPI.QueryDeviceInformation(mHandleStruct, InformationType, ref BufferLength, Buffer); + } + + /// Retrieves the interface descriptor for the specified alternate interface settings for a particular interface handle. + public virtual bool QueryInterfaceSettings(byte AltSettingIndex, out USB_INTERFACE_DESCRIPTOR UsbAltInterfaceDescriptor) + { + return driverAPI.QueryInterfaceSettings(mHandleStruct, AltSettingIndex, out UsbAltInterfaceDescriptor); + } + + /// Retrieves information about a pipe that is associated with an interface. + public virtual bool QueryPipe(byte AltSettingNumber, byte PipeIndex, out WINUSB_PIPE_INFORMATION PipeInformation) + { + return driverAPI.QueryPipe(mHandleStruct, AltSettingNumber, PipeIndex, out PipeInformation); + } + + /// Reads data from the specified pipe. + public virtual bool ReadPipe(byte PipeID, IntPtr Buffer, int BufferLength, out int LengthTransferred, IntPtr Overlapped) + { + return driverAPI.ReadPipe(mHandleStruct, PipeID, Buffer, BufferLength, out LengthTransferred, Overlapped); + } + + /// Reads data from the specified pipe. + public virtual bool ReadPipe(byte PipeID, Array Buffer, int BufferLength, out int LengthTransferred, IntPtr Overlapped) + { + return driverAPI.ReadPipe(mHandleStruct, PipeID, Marshal.UnsafeAddrOfPinnedArrayElement(Buffer, 0), BufferLength, out LengthTransferred, Overlapped); + } + + /// Reads data from the specified pipe. + public virtual bool ReadPipe(byte PipeID, Array Buffer, int BufferLength, out int LengthTransferred, KOVL_HANDLE Overlapped) + { + return driverAPI.ReadPipe(mHandleStruct, PipeID, Marshal.UnsafeAddrOfPinnedArrayElement(Buffer, 0), BufferLength, out LengthTransferred, Overlapped.Pointer); + } + + /// Reads data from the specified pipe. + public virtual bool ReadPipe(byte PipeID, IntPtr Buffer, int BufferLength, out int LengthTransferred, KOVL_HANDLE Overlapped) + { + return driverAPI.ReadPipe(mHandleStruct, PipeID, Buffer, BufferLength, out LengthTransferred, Overlapped.Pointer); + } + + /// Releases the specified interface by number or index. + public virtual bool ReleaseInterface(byte NumberOrIndex, bool IsIndex) + { + return driverAPI.ReleaseInterface(mHandleStruct, NumberOrIndex, IsIndex); + } + + /// Resets the usb device of the specified interface handle. (port cycle). + public virtual bool ResetDevice() + { + return driverAPI.ResetDevice(mHandleStruct); + } + + /// Resets the data toggle and clears the stall condition on a pipe. + public virtual bool ResetPipe(byte PipeID) + { + return driverAPI.ResetPipe(mHandleStruct, PipeID); + } + + /// Selects the specified interface by number or index as the current interface. + public virtual bool SelectInterface(byte NumberOrIndex, bool IsIndex) + { + return driverAPI.SelectInterface(mHandleStruct, NumberOrIndex, IsIndex); + } + + /// Sets the alternate setting of the specified interface. + public virtual bool SetAltInterface(byte NumberOrIndex, bool IsIndex, byte AltSettingNumber) + { + return driverAPI.SetAltInterface(mHandleStruct, NumberOrIndex, IsIndex, AltSettingNumber); + } + + /// Sets the device configuration number. + public virtual bool SetConfiguration(byte ConfigurationNumber) + { + return driverAPI.SetConfiguration(mHandleStruct, ConfigurationNumber); + } + + /// Sets the alternate setting of an interface. + public virtual bool SetCurrentAlternateSetting(byte AltSettingNumber) + { + return driverAPI.SetCurrentAlternateSetting(mHandleStruct, AltSettingNumber); + } + + /// Sets the policy for a specific pipe associated with an endpoint on the device. This is a synchronous operation. + public virtual bool SetPipePolicy(byte PipeID, int PolicyType, int ValueLength, IntPtr Value) + { + return driverAPI.SetPipePolicy(mHandleStruct, PipeID, PolicyType, ValueLength, Value); + } + + /// Sets the policy for a specific pipe associated with an endpoint on the device. This is a synchronous operation. + public virtual bool SetPipePolicy(byte PipeID, int PolicyType, int ValueLength, Array Value) + { + return driverAPI.SetPipePolicy(mHandleStruct, PipeID, PolicyType, ValueLength, Marshal.UnsafeAddrOfPinnedArrayElement(Value, 0)); + } + + /// Sets the power policy for a device. + public virtual bool SetPowerPolicy(int PolicyType, int ValueLength, IntPtr Value) + { + return driverAPI.SetPowerPolicy(mHandleStruct, PolicyType, ValueLength, Value); + } + + /// Sets the power policy for a device. + public virtual bool SetPowerPolicy(int PolicyType, int ValueLength, Array Value) + { + return driverAPI.SetPowerPolicy(mHandleStruct, PolicyType, ValueLength, Marshal.UnsafeAddrOfPinnedArrayElement(Value, 0)); + } + + /// Writes data to a pipe. + public virtual bool WritePipe(byte PipeID, IntPtr Buffer, int BufferLength, out int LengthTransferred, IntPtr Overlapped) + { + return driverAPI.WritePipe(mHandleStruct, PipeID, Buffer, BufferLength, out LengthTransferred, Overlapped); + } + + /// Writes data to a pipe. + public virtual bool WritePipe(byte PipeID, Array Buffer, int BufferLength, out int LengthTransferred, IntPtr Overlapped) + { + return driverAPI.WritePipe(mHandleStruct, PipeID, Marshal.UnsafeAddrOfPinnedArrayElement(Buffer, 0), BufferLength, out LengthTransferred, Overlapped); + } + + /// Writes data to a pipe. + public virtual bool WritePipe(byte PipeID, Array Buffer, int BufferLength, out int LengthTransferred, KOVL_HANDLE Overlapped) + { + return driverAPI.WritePipe(mHandleStruct, PipeID, Marshal.UnsafeAddrOfPinnedArrayElement(Buffer, 0), BufferLength, out LengthTransferred, Overlapped.Pointer); + } + + /// Writes data to a pipe. + public virtual bool WritePipe(byte PipeID, IntPtr Buffer, int BufferLength, out int LengthTransferred, KOVL_HANDLE Overlapped) + { + return driverAPI.WritePipe(mHandleStruct, PipeID, Buffer, BufferLength, out LengthTransferred, Overlapped.Pointer); + } + + #endregion + } + + public class OvlK : IDisposable + { + protected KOVL_POOL_HANDLE mHandleStruct; + protected bool mbDisposed; + + protected OvlK() + { + } + + #region IDisposable Members + + /// Explicitly closes and frees the handle. + public virtual void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + #endregion + + ~OvlK() + { + Dispose(false); + } + + protected virtual void Dispose(bool disposing) + { + if (!mbDisposed) + { + if (mHandleStruct.Pointer != IntPtr.Zero) + { + AllKFunctions.OvlK_Free(mHandleStruct); + Debug.Print("{0} Dispose: Freed Handle:{1:X16}h Explicit:{2}", GetType().Name, mHandleStruct.Pointer.ToInt64(), disposing); + } + else + Debug.Print("{0} Dispose: [WARNING] Handle is null", GetType().Name); + + mHandleStruct = new KOVL_POOL_HANDLE(IntPtr.Zero); + mbDisposed = true; + } + } + + /// Creates a new overlapped pool. + protected bool Init(KUSB_HANDLE UsbHandle, int MaxOverlappedCount, KOVL_POOL_FLAG Flags) + { + bool success = AllKFunctions.OvlK_Init(out mHandleStruct, UsbHandle, MaxOverlappedCount, Flags); + + if (!success) throw new Exception(string.Format("{0} failed initializing. ErrorCode={1:X8}h", GetType().Name, Marshal.GetLastWin32Error())); + + Debug.Print("{0} Init: handle 0x{1:X16}", GetType().Name, mHandleStruct.Pointer.ToInt64()); + return true; + } + + #region Public Members + + /// Creates a new overlapped pool. + public OvlK(KUSB_HANDLE UsbHandle, int MaxOverlappedCount, KOVL_POOL_FLAG Flags) + { + bool success = AllKFunctions.OvlK_Init(out mHandleStruct, UsbHandle, MaxOverlappedCount, Flags); + + if (!success) throw new Exception(string.Format("{0} failed initializing. ErrorCode={1:X8}h", GetType().Name, Marshal.GetLastWin32Error())); + + Debug.Print("{0} Init: handle 0x{1:X16}", GetType().Name, mHandleStruct.Pointer.ToInt64()); + } + + /// Gets a preallocated \c OverlappedK structure from the specified/default pool. + public virtual bool Acquire(out KOVL_HANDLE OverlappedK) + { + return AllKFunctions.OvlK_Acquire(out OverlappedK, mHandleStruct); + } + + /// Calls the dispose method. + public virtual void Free() + { + Dispose(); + } + + /// Returns the internal event handle used to signal IO operations. + public virtual IntPtr GetEventHandle(KOVL_HANDLE OverlappedK) + { + return AllKFunctions.OvlK_GetEventHandle(OverlappedK); + } + + /// Gets the handle class structure. + public KOVL_POOL_HANDLE Handle + { + get + { + return mHandleStruct; + } + } + + /// Checks for i/o completion; returns immediately. (polling) + public virtual bool IsComplete(KOVL_HANDLE OverlappedK) + { + return AllKFunctions.OvlK_IsComplete(OverlappedK); + } + + /// Initializes an overlappedK for re-use. The overlappedK is not return to its pool. + public virtual bool ReUse(KOVL_HANDLE OverlappedK) + { + return AllKFunctions.OvlK_ReUse(OverlappedK); + } + + /// Returns an \c OverlappedK structure to it's pool. + public virtual bool Release(KOVL_HANDLE OverlappedK) + { + return AllKFunctions.OvlK_Release(OverlappedK); + } + + /// Waits for overlapped I/O completion, and performs actions specified in \c WaitFlags. + public virtual bool Wait(KOVL_HANDLE OverlappedK, int TimeoutMS, KOVL_WAIT_FLAG WaitFlags, out int TransferredLength) + { + return AllKFunctions.OvlK_Wait(OverlappedK, TimeoutMS, WaitFlags, out TransferredLength); + } + + /// Waits for overlapped I/O completion, cancels on a timeout error and always releases the OvlK handle back to its pool. + public virtual bool WaitAndRelease(KOVL_HANDLE OverlappedK, int TimeoutMS, out int TransferredLength) + { + return AllKFunctions.OvlK_WaitAndRelease(OverlappedK, TimeoutMS, out TransferredLength); + } + + /// Waits for overlapped I/O completion on the oldest acquired OverlappedK handle and performs actions specified in \c WaitFlags. + public virtual bool WaitOldest(out KOVL_HANDLE OverlappedK, int TimeoutMS, KOVL_WAIT_FLAG WaitFlags, out int TransferredLength) + { + return AllKFunctions.OvlK_WaitOldest(mHandleStruct, out OverlappedK, TimeoutMS, WaitFlags, out TransferredLength); + } + + /// Waits for overlapped I/O completion, cancels on a timeout error. + public virtual bool WaitOrCancel(KOVL_HANDLE OverlappedK, int TimeoutMS, out int TransferredLength) + { + return AllKFunctions.OvlK_WaitOrCancel(OverlappedK, TimeoutMS, out TransferredLength); + } + + #endregion + } + + public class StmK : IDisposable + { + protected KSTM_HANDLE mHandleStruct; + protected bool mbDisposed; + + protected StmK() + { + } + + #region IDisposable Members + + /// Explicitly closes and frees the handle. + public virtual void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + #endregion + + ~StmK() + { + Dispose(false); + } + + protected virtual void Dispose(bool disposing) + { + if (!mbDisposed) + { + if (mHandleStruct.Pointer != IntPtr.Zero) + { + AllKFunctions.StmK_Free(mHandleStruct); + Debug.Print("{0} Dispose: Freed Handle:{1:X16}h Explicit:{2}", GetType().Name, mHandleStruct.Pointer.ToInt64(), disposing); + } + else + Debug.Print("{0} Dispose: [WARNING] Handle is null", GetType().Name); + + mHandleStruct = new KSTM_HANDLE(IntPtr.Zero); + mbDisposed = true; + } + } + + /// Initializes a new uni-directional pipe stream. + protected bool Init(KUSB_HANDLE UsbHandle, byte PipeID, int MaxTransferSize, int MaxPendingTransfers, int MaxPendingIO, ref KSTM_CALLBACK Callbacks, KSTM_FLAG Flags) + { + bool success = AllKFunctions.StmK_Init(out mHandleStruct, UsbHandle, PipeID, MaxTransferSize, MaxPendingTransfers, MaxPendingIO, ref Callbacks, Flags); + + if (!success) throw new Exception(string.Format("{0} failed initializing. ErrorCode={1:X8}h", GetType().Name, Marshal.GetLastWin32Error())); + + Debug.Print("{0} Init: handle 0x{1:X16}", GetType().Name, mHandleStruct.Pointer.ToInt64()); + return true; + } + + #region Public Members + + /// Initializes a new uni-directional pipe stream. + public StmK(KUSB_HANDLE UsbHandle, byte PipeID, int MaxTransferSize, int MaxPendingTransfers, int MaxPendingIO, ref KSTM_CALLBACK Callbacks, KSTM_FLAG Flags) + { + bool success = AllKFunctions.StmK_Init(out mHandleStruct, UsbHandle, PipeID, MaxTransferSize, MaxPendingTransfers, MaxPendingIO, ref Callbacks, Flags); + + if (!success) throw new Exception(string.Format("{0} failed initializing. ErrorCode={1:X8}h", GetType().Name, Marshal.GetLastWin32Error())); + + Debug.Print("{0} Init: handle 0x{1:X16}", GetType().Name, mHandleStruct.Pointer.ToInt64()); + } + + /// Calls the dispose method. + public virtual void Free() + { + Dispose(); + } + + /// Gets the handle class structure. + public KSTM_HANDLE Handle + { + get + { + return mHandleStruct; + } + } + + /// Reads data from the stream buffer. + public virtual bool Read(IntPtr Buffer, int Offset, int Length, out int TransferredLength) + { + return AllKFunctions.StmK_Read(mHandleStruct, Buffer, Offset, Length, out TransferredLength); + } + + /// Reads data from the stream buffer. + public virtual bool Read(Array Buffer, int Offset, int Length, out int TransferredLength) + { + return AllKFunctions.StmK_Read(mHandleStruct, Marshal.UnsafeAddrOfPinnedArrayElement(Buffer, 0), Offset, Length, out TransferredLength); + } + + /// Starts the internal stream thread. + public virtual bool Start() + { + return AllKFunctions.StmK_Start(mHandleStruct); + } + + /// Stops the internal stream thread. + public virtual bool Stop(int TimeoutCancelMS) + { + return AllKFunctions.StmK_Stop(mHandleStruct, TimeoutCancelMS); + } + + /// Writes data to the stream buffer. + public virtual bool Write(IntPtr Buffer, int Offset, int Length, out int TransferredLength) + { + return AllKFunctions.StmK_Write(mHandleStruct, Buffer, Offset, Length, out TransferredLength); + } + + /// Writes data to the stream buffer. + public virtual bool Write(Array Buffer, int Offset, int Length, out int TransferredLength) + { + return AllKFunctions.StmK_Write(mHandleStruct, Marshal.UnsafeAddrOfPinnedArrayElement(Buffer, 0), Offset, Length, out TransferredLength); + } + + #endregion + } + + public class IsoK : IDisposable + { + protected KISO_CONTEXT mHandleStruct; + protected bool mbDisposed; + + protected IsoK() + { + } + + #region IDisposable Members + + /// Explicitly closes and frees the handle. + public virtual void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + #endregion + + ~IsoK() + { + Dispose(false); + } + + protected virtual void Dispose(bool disposing) + { + if (!mbDisposed) + { + if (mHandleStruct.Pointer != IntPtr.Zero) + { + AllKFunctions.IsoK_Free(mHandleStruct); + Debug.Print("{0} Dispose: Freed Handle:{1:X16}h Explicit:{2}", GetType().Name, mHandleStruct.Pointer.ToInt64(), disposing); + } + else + Debug.Print("{0} Dispose: [WARNING] Handle is null", GetType().Name); + + mHandleStruct = new KISO_CONTEXT(IntPtr.Zero); + mbDisposed = true; + } + } + + /// Creates a new isochronous transfer context. + protected bool Init(int NumberOfPackets, int StartFrame) + { + bool success = AllKFunctions.IsoK_Init(out mHandleStruct, NumberOfPackets, StartFrame); + + if (!success) throw new Exception(string.Format("{0} failed initializing. ErrorCode={1:X8}h", GetType().Name, Marshal.GetLastWin32Error())); + + Debug.Print("{0} Init: handle 0x{1:X16}", GetType().Name, mHandleStruct.Pointer.ToInt64()); + return true; + } + + #region Nested Structs + + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)] + private struct KISO_CONTEXT_MAP + { + /// Additional ISO transfer flags. See \ref KISO_FLAG. + private readonly KISO_FLAG Flags; + + /// Specifies the frame number that the transfer should begin on (0 for ASAP). + private readonly int StartFrame; + + /// Contains the number of packets that completed with an error condition on return from the host controller driver. + private readonly short ErrorCount; + + /// Specifies the number of packets that are described by the variable-length array member \c IsoPacket. + private readonly short NumberOfPackets; + + /// Contains the URB Hdr.Status value on return from the host controller driver. + private readonly int UrbHdrStatus; + }; + + #endregion + + #region Public Members + + /// Creates a new isochronous transfer context. + public IsoK(int NumberOfPackets, int StartFrame) + { + bool success = AllKFunctions.IsoK_Init(out mHandleStruct, NumberOfPackets, StartFrame); + + if (!success) throw new Exception(string.Format("{0} failed initializing. ErrorCode={1:X8}h", GetType().Name, Marshal.GetLastWin32Error())); + + Debug.Print("{0} Init: handle 0x{1:X16}", GetType().Name, mHandleStruct.Pointer.ToInt64()); + } + + /// Convenience function for enumerating ISO packets of an isochronous transfer context. + public virtual bool EnumPackets(KISO_ENUM_PACKETS_CB EnumPackets, int StartPacketIndex, IntPtr UserState) + { + return AllKFunctions.IsoK_EnumPackets(mHandleStruct, EnumPackets, StartPacketIndex, UserState); + } + + /// Contains the number of packets that completed with an error condition on return from the host controller driver. + public short ErrorCount + { + get + { + return Marshal.ReadInt16(mHandleStruct.Pointer, ofsErrorCount); + } + set + { + Marshal.WriteInt16(mHandleStruct.Pointer, ofsErrorCount, value); + } + } + + /// Additional ISO transfer flags. See \ref KISO_FLAG. + public KISO_FLAG Flags + { + get + { + return (KISO_FLAG) Marshal.ReadInt32(mHandleStruct.Pointer, ofsFlags); + } + set + { + Marshal.WriteInt32(mHandleStruct.Pointer, ofsFlags, (int) value); + } + } + + /// Calls the dispose method. + public virtual void Free() + { + Dispose(); + } + + /// Convenience function for getting all fields of a \ref KISO_PACKET. + public virtual bool GetPacket(int PacketIndex, out KISO_PACKET IsoPacket) + { + return AllKFunctions.IsoK_GetPacket(mHandleStruct, PacketIndex, out IsoPacket); + } + + /// Gets the handle class structure. + public KISO_CONTEXT Handle + { + get + { + return mHandleStruct; + } + } + + /// Specifies the number of packets that are described by the variable-length array member \c IsoPacket. + public short NumberOfPackets + { + get + { + return Marshal.ReadInt16(mHandleStruct.Pointer, ofsNumberOfPackets); + } + set + { + Marshal.WriteInt16(mHandleStruct.Pointer, ofsNumberOfPackets, value); + } + } + + /// Convenience function for re-using an isochronous transfer context in a subsequent request. + public virtual bool ReUse() + { + return AllKFunctions.IsoK_ReUse(mHandleStruct); + } + + /// Convenience function for setting all fields of a \ref KISO_PACKET. + public virtual bool SetPacket(int PacketIndex, ref KISO_PACKET IsoPacket) + { + return AllKFunctions.IsoK_SetPacket(mHandleStruct, PacketIndex, ref IsoPacket); + } + + /// Convenience function for setting the offset of all ISO packets of an isochronous transfer context. + public virtual bool SetPackets(int PacketSize) + { + return AllKFunctions.IsoK_SetPackets(mHandleStruct, PacketSize); + } + + /// Specifies the frame number that the transfer should begin on (0 for ASAP). + public int StartFrame + { + get + { + return Marshal.ReadInt32(mHandleStruct.Pointer, ofsStartFrame); + } + set + { + Marshal.WriteInt32(mHandleStruct.Pointer, ofsStartFrame, value); + } + } + + /// Contains the URB Hdr.Status value on return from the host controller driver. + public int UrbHdrStatus + { + get + { + return Marshal.ReadInt32(mHandleStruct.Pointer, ofsUrbHdrStatus); + } + set + { + Marshal.WriteInt32(mHandleStruct.Pointer, ofsUrbHdrStatus, value); + } + } + + #endregion + + #region Private Members + + private static readonly int ofsErrorCount = Marshal.OffsetOf(typeof (KISO_CONTEXT_MAP), "ErrorCount").ToInt32(); + private static readonly int ofsFlags = Marshal.OffsetOf(typeof (KISO_CONTEXT_MAP), "Flags").ToInt32(); + private static readonly int ofsNumberOfPackets = Marshal.OffsetOf(typeof (KISO_CONTEXT_MAP), "NumberOfPackets").ToInt32(); + private static readonly int ofsStartFrame = Marshal.OffsetOf(typeof (KISO_CONTEXT_MAP), "StartFrame").ToInt32(); + private static readonly int ofsUrbHdrStatus = Marshal.OffsetOf(typeof (KISO_CONTEXT_MAP), "UrbHdrStatus").ToInt32(); + + #endregion + } +} \ No newline at end of file diff --git a/Old Matlab Interface/bindings/libusbK.pas b/Old Matlab Interface/bindings/libusbK.pas new file mode 100644 index 00000000..b0e2050b --- /dev/null +++ b/Old Matlab Interface/bindings/libusbK.pas @@ -0,0 +1,1630 @@ +// Copyright (c) 2011 Ekkehard Domning (edomning@adcocom-broadcast.com) +// Portions Copyright (c) 2012 Alberto Semenzato +// All rights reserved. +// +// Pascal libusbK Bindings +// Created on: 12.8.2011 +// +// History: +// +// 2011-08-12 Initial release (Ekkehard Domning) +// +// 2012-02-10 Added Hotplug Event Notifier API, LstK_InitEx, implicit linking +// and minor stuff (Alberto Semenzato) +// +// 2012-03-09 Added LibK_SetContext, LibK_GetContext, HotK_FreeAll, +// KSTM_BEFORE_COMPLETE_CB, OvlK_WaitOldest, +// LibK_SetDefaultContext, LibK_GetDefaultContext, +// 3.0.5.10 changes has been applied (Alberto Semenzato) +// +// Functions not in the original sources: +// +// GetIsoPacketFromIsoContext: helper to get a pointer to a specific packet +// +// UsbK_InitFromDevicePath: example showing a way to init a device +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// Notes: +// +// Default setting uses dynamic linking, see below and remove the compiler +// directive to change to implicit linking +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 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 TRAVIS LEE ROBINSON +// OR EKKEHARD DOMNING OR ALBERTO SEMENZATO 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. + +unit libusbK; + +// Import of the functions of libusbK.dll + +// Conditional compiling "DynamicLink" +// defined: the unit will load the DLL on startup and assign all functions, +// if all functions available the variable "DllAvailable" becomes +// true +// undefined: implicit linking, the application failes if the DLL is not +// available + +{$DEFINE DynamicLink} + +interface + + uses + + Windows; + + const + + LIBUSBK_DLL = 'libusbK.dll'; + + const + + // pipe policy types + SHORT_PACKET_TERMINATE = $01; + AUTO_CLEAR_STALL = $02; + PIPE_TRANSFER_TIMEOUT = $03; + IGNORE_SHORT_PACKETS = $04; + ALLOW_PARTIAL_READS = $05; + AUTO_FLUSH = $06; + RAW_IO = $07; + MAXIMUM_TRANSFER_SIZE = $08; + RESET_PIPE_ON_RESUME = $09; + + // libusbK ISO pipe policy types + ISO_START_LATENCY = $20; + ISO_ALWAYS_START_ASAP = $21; + ISO_NUM_FIXED_PACKETS = $22; + + // http://msdn.microsoft.com/en-us/library/windows/hardware/ff552359%28v=vs.85%29.aspx + // Settings.Parallel.NumberOfPresentedRequests + // Maximum number of transfers that can be asynchronously delivered at a + // time. Available in version 1.9 and later versions of KMDF. + SIMUL_PARALLEL_REQUESTS = $30; + + // Power policy types + AUTO_SUSPEND = $81; + SUSPEND_DELAY = $83; + + // Device Information types + DEVICE_SPEED = $01; + + // Device Speeds + LowSpeed = $01; + FullSpeed = $02; + HighSpeed = $03; + + USB_DESCRIPTOR_TYPE_DEVICE = $01; + USB_DESCRIPTOR_TYPE_CONFIGURATION = $02; + USB_DESCRIPTOR_TYPE_STRING = $03; + USB_DESCRIPTOR_TYPE_INTERFACE = $04; + USB_DESCRIPTOR_TYPE_ENDPOINT = $05; + USB_DESCRIPTOR_TYPE_DEVICE_QUALIFIER = $06; + USB_DESCRIPTOR_TYPE_CONFIG_POWER = $07; + USB_DESCRIPTOR_TYPE_INTERFACE_POWER = $08; + USB_DESCRIPTOR_TYPE_INTERFACE_ASSOCIATION = $0B; + + USB_REQUEST_GET_STATUS = $00; + USB_REQUEST_CLEAR_FEATURE = $01; + USB_REQUEST_SET_FEATURE = $03; + USB_REQUEST_SET_ADDRESS = $05; + USB_REQUEST_GET_DESCRIPTOR = $06; + USB_REQUEST_SET_DESCRIPTOR = $07; + USB_REQUEST_GET_CONFIGURATION = $08; + USB_REQUEST_SET_CONFIGURATION = $09; + USB_REQUEST_GET_INTERFACE = $0A; + USB_REQUEST_SET_INTERFACE = $0B; + USB_REQUEST_SYNC_FRAME = $0C; + + type + + USBD_PIPE_TYPE = (UsbdPipeTypeControl, UsbdPipeTypeIsochronous, + UsbdPipeTypeBulk, UsbdPipeTypeInterrupt); + + PWINUSB_PIPE_INFORMATION = ^WINUSB_PIPE_INFORMATION; + + WINUSB_PIPE_INFORMATION = packed record + PipeType: USBD_PIPE_TYPE; + dummy0: array [0 .. 2] of Byte; + PipeId: Byte; + dummy1: Byte; + MaximumPacketSize: Word; + Interval: Byte; + dummy2: array [0 .. 2] of Byte; + end; + + WINUSB_SETUP_PACKET_INT64 = Int64; + + PWINUSB_SETUP_PACKET = ^WINUSB_SETUP_PACKET; + + WINUSB_SETUP_PACKET = packed record + case Integer of + 0: + (AsInt64: WINUSB_SETUP_PACKET_INT64); + 1: + (RequestType: Byte; + Request: Byte; + Value: Word; + Index: Word; + Length: Word + ); + end; + + // Structure describing an isochronous transfer packet. + PKISO_PACKET = ^KISO_PACKET; + + KISO_PACKET = packed record + Offset: Cardinal; + Length: SmallInt; + Status: Word; + end; + + PKISO_PACKET_ARRAY = ^KISO_PACKET_ARRAY; + + KISO_PACKET_ARRAY = array [0 .. (MaxInt div SizeOf(KISO_PACKET)) - 1] + of KISO_PACKET; + + const + + KISO_FLAG_NONE = 0; + KISO_FLAG_SET_START_FRAME = $00000001; + + type + + KISO_FLAG = Cardinal; + + // Structure describing a user defined isochronous transfer. + PKISO_CONTEXT = ^KISO_CONTEXT; + + KISO_CONTEXT = packed record + Flags: Cardinal; + StartFrame: Cardinal; + ErrorCount: SmallInt; + NumberOfPackets: SmallInt; + UrbHdrStatus: Cardinal; + // Contains a variable-length array of KISO_PACKET structures that + // describe the isochronous transfer packets to be transferred on the + // USB bus. + // note This field is assigned by the user application, used by the driver + // upon transfer submission, and updated by the driver upon transfer + // completion. + // Translation to Delphi is difficult, since you can not declare array + // with the length of zero, so you must use a Type cast to access the + // (optional) array members PKISO_PACKET_ARRAY(@x.IsoPackets)^[n] + // I made the function GetIsoPacketFromIsoContext that returns a pointer + // to a specific packet. + IsoPackets: record end; + end; + + KLIB_USER_CONTEXT = pointer; + + // pointer to a \c KISO_CONTEXT structure + KLIB_HANDLE = pointer; + + // Opaque UsbK handle, see \ref UsbK_Init. + KUSB_HANDLE = KLIB_HANDLE; + + // Opaque LstK handle, see \ref LstK_Init. + KLST_HANDLE = KLIB_HANDLE; + + // Opaque HotK handle, see \ref HotK_Init. + KHOT_HANDLE = KLIB_HANDLE; + + // Opaque OvlK handle, see \ref OvlK_Acquire. + KOVL_HANDLE = KLIB_HANDLE; + + // Opaque OvlPoolK handle, see \ref OvlK_Init. + KOVL_POOL_HANDLE = KLIB_HANDLE; + + // Opaque StmK handle, see \ref StmK_Init. + KSTM_HANDLE = KLIB_HANDLE; + + // Handle type enumeration. + KLIB_HANDLE_TYPE = (KLIB_HANDLE_TYPE_HOTK, KLIB_HANDLE_TYPE_USBK, + KLIB_HANDLE_TYPE_USBSHAREDK, KLIB_HANDLE_TYPE_LSTK, + KLIB_HANDLE_TYPE_LSTINFOK, KLIB_HANDLE_TYPE_OVLK, + KLIB_HANDLE_TYPE_OVLPOOLK, KLIB_HANDLE_TYPE_STMK, KLIB_HANDLE_TYPE_COUNT); + + PKLIB_VERSION = ^KLIB_VERSION; + + KLIB_VERSION = record + Major: Integer; + Minor: Integer; + Micro: Integer; + Nano: Integer; + end; + + // Callback function typedef for \ref IsoK_EnumPackets + KISO_ENUM_PACKETS_CB = function(const PacketIndex: Cardinal; + const IsoPacket: PKISO_PACKET; const UserState: pointer): Bool; stdcall; + + const + + KLST_STRING_MAX_LEN = 256; + + KLST_SYNC_FLAG_NONE = $0000; + KLST_SYNC_FLAG_UNCHANGED = $0001; + KLST_SYNC_FLAG_ADDED = $0002; + KLST_SYNC_FLAG_REMOVED = $0004; + KLST_SYNC_FLAG_CONNECT_CHANGE = $0008; + KLST_SYNC_FLAG_MASK = $000F; + + type + + KLST_SYNC_FLAG = Cardinal; + + // Common usb device information structure + PKLST_DEV_COMMON_INFO = ^KLST_DEV_COMMON_INFO; + + KLST_DEV_COMMON_INFO = packed record + Vid: Integer; + Pid: Integer; + MI: Integer; + InstanceID: array [0 .. KLST_STRING_MAX_LEN - 1] of AnsiChar; + end; + + KLST_DEVINFO_HANDLE = ^KLST_DEVINFO; + + KLST_DEVINFO = packed record + Common: KLST_DEV_COMMON_INFO; + DriverID: Integer; + DeviceInterfaceGUID: array [0 .. KLST_STRING_MAX_LEN - 1] of AnsiChar; + InstanceID: array [0 .. KLST_STRING_MAX_LEN - 1] of AnsiChar; + ClassGUID: array [0 .. KLST_STRING_MAX_LEN - 1] of AnsiChar; + Mfg: array [0 .. KLST_STRING_MAX_LEN - 1] of AnsiChar; + DeviceDesc: array [0 .. KLST_STRING_MAX_LEN - 1] of AnsiChar; + Service: array [0 .. KLST_STRING_MAX_LEN - 1] of AnsiChar; + SymbolicLink: array [0 .. KLST_STRING_MAX_LEN - 1] of AnsiChar; + DevicePath: array [0 .. KLST_STRING_MAX_LEN - 1] of AnsiChar; + LUsb0FilterIndex: Integer; + Connected: Bool; + SyncFlags: KLST_SYNC_FLAG; + end; + + const + + KLST_FLAG_NONE = $0000; + KLST_FLAG_INCLUDE_RAWGUID = $0001; + KLST_FLAG_INCLUDE_DISCONNECT = $0002; + + type + + KLST_FLAG = Cardinal; + + KLST_ENUM_DEVINFO_CB = function(const DeviceList: KLST_HANDLE; + const DeviceInfo: KLST_DEVINFO_HANDLE; const Contex: pointer) + : Bool; stdcall; + + PUSB_INTERFACE_DESCRIPTOR = ^USB_INTERFACE_DESCRIPTOR; + + USB_INTERFACE_DESCRIPTOR = packed record + bLength: Byte; + bDescriptorType: Byte; + bInterfaceNumber: Byte; + bAlternateSetting: Byte; + bNumEndpoints: Byte; + bInterfaceClass: Byte; + bInterfaceSubClass: Byte; + bInterfaceProtocol: Byte; + iInterface: Byte; + end; + + PUSB_DEVICE_DESCRIPTOR = ^USB_DEVICE_DESCRIPTOR; + + USB_DEVICE_DESCRIPTOR = packed record + bLength: Byte; + bDescriptorType: Byte; + bcdUSB: Word; + bDeviceClass: Byte; + bDeviceSubClass: Byte; + bDeviceProtocol: Byte; + bMaxPacketSize0: Byte; + idVendor: Word; + idProduct: Word; + bcdDevice: Word; + iManufacturer: Byte; + iProduct: Byte; + iSerialNumber: Byte; + bNumConfigurations: Byte; + end; + + PUSB_ENDPOINT_DESCRIPTOR = ^USB_ENDPOINT_DESCRIPTOR; + + USB_ENDPOINT_DESCRIPTOR = packed record + bLength: Byte; + bDescriptorType: Byte; + bEndpointAddress: Byte; + bmAttributes: Byte; + wMaxPacketSize: SmallInt; + bInterval: Byte; + end; + + KUSB_PROPERTY = (KUSB_PROPERTY_DEVICE_FILE_HANDLE, KUSB_PROPERTY_COUNT); + + const + + KHOT_FLAG_NONE: UINT = 0; + KHOT_FLAG_PLUG_ALL_ON_INIT: UINT = $0001; + KHOT_FLAG_PASS_DUPE_INSTANCE: UINT = $0002; + KHOT_FLAG_POST_USER_MESSAGE: UINT = $0004; + + type + + KLST_PATTERN_MATCH = packed record + InstanceID: array [0 .. KLST_STRING_MAX_LEN - 1] of AnsiChar; + DeviceInterfaceGUID: array [0 .. KLST_STRING_MAX_LEN - 1] of AnsiChar; + SymbolicLink: array [0 .. KLST_STRING_MAX_LEN - 1] of AnsiChar; + z_F_i_x_e_d: array [0 .. (1024 - (KLST_STRING_MAX_LEN * 3)) - 1] of Byte; + end; + + PKLST_PATTERN_MATCH = ^KLST_PATTERN_MATCH; + + KHOT_PLUG_CB = procedure(HotHandle: KHOT_HANDLE; + DeviceInfo: KLST_DEVINFO_HANDLE; PlugType: KLST_SYNC_FLAG); stdcall; + + KHOT_PARAMS = packed record + UserHwnd: HWND; + UserMessage: UINT; + Flags: UINT; + PatternMatch: KLST_PATTERN_MATCH; + OnHotPlug: KHOT_PLUG_CB; + z_F_i_x_e_d: array [0 .. (2048 - SizeOf(KLST_PATTERN_MATCH) - + SizeOf(PUINT) * 2 - (SizeOf(UINT) * 2)) - 1] of Byte; + end; + + PKHOT_PARAMS = ^KHOT_PARAMS; + + const + + USBD_ISO_START_FRAME_RANGE = 1024; + + type + + KUSB_DRIVER_API_INFO = packed record + DriverID: Integer; + FunctionCount: Integer; + end; + + // Supported function id enumeration. + KUSB_FNID = (KUSB_FNID_Init, KUSB_FNID_Free, KUSB_FNID_ClaimInterface, + KUSB_FNID_ReleaseInterface, KUSB_FNID_SetAltInterface, + KUSB_FNID_GetAltInterface, KUSB_FNID_GetDescriptor, + KUSB_FNID_ControlTransfer, KUSB_FNID_SetPowerPolicy, + KUSB_FNID_GetPowerPolicy, KUSB_FNID_SetConfiguration, + KUSB_FNID_GetConfiguration, KUSB_FNID_ResetDevice, KUSB_FNID_Initialize, + KUSB_FNID_SelectInterface, KUSB_FNID_GetAssociatedInterface, + KUSB_FNID_Clone, KUSB_FNID_QueryInterfaceSettings, + KUSB_FNID_QueryDeviceInformation, KUSB_FNID_SetCurrentAlternateSetting, + KUSB_FNID_GetCurrentAlternateSetting, KUSB_FNID_QueryPipe, + KUSB_FNID_SetPipePolicy, KUSB_FNID_GetPipePolicy, KUSB_FNID_ReadPipe, + KUSB_FNID_WritePipe, KUSB_FNID_ResetPipe, KUSB_FNID_AbortPipe, + KUSB_FNID_FlushPipe, KUSB_FNID_IsoReadPipe, KUSB_FNID_IsoWritePipe, + KUSB_FNID_GetCurrentFrameNumber, KUSB_FNID_GetOverlappedResult, + KUSB_FNID_GetProperty, + // Supported function count + KUSB_FNID_COUNT); + + KUSB_Init = function(var InterfaceHandle: KUSB_HANDLE; + const DevInfo: KLST_DEVINFO_HANDLE): Bool; stdcall; + + KUSB_Free = function(const InterfaceHandle: KUSB_HANDLE): Bool; stdcall; + + KUSB_ClaimInterface = function(const InterfaceHandle: KUSB_HANDLE; + const NumberOrIndex: Byte; const IsIndex: Bool): Bool; stdcall; + + KUSB_ReleaseInterface = function(const InterfaceHandle: KUSB_HANDLE; + const NumberOrIndex: Byte; const IsIndex: Bool): Bool; stdcall; + + KUSB_SetAltInterface = function(const InterfaceHandle: KUSB_HANDLE; + const NumberOrIndex: Byte; const IsIndex: Bool; + const AltSettingNumber: Byte): Bool; stdcall; + + KUSB_GetAltInterface = function(const InterfaceHandle: KUSB_HANDLE; + const NumberOrIndex: Byte; const IsIndex: Bool; + var AltSettingNumber: Byte): Bool; stdcall; + + KUSB_GetDescriptor = function(const InterfaceHandle: KUSB_HANDLE; + const DescriptorType: Byte; const Index: Byte; const LanguageID: Word; + var Buffer; const BufferLength: Cardinal; var LengthTransferred: Cardinal) + : Bool; stdcall; + + KUSB_ControlTransfer = function(const InterfaceHandle: KUSB_HANDLE; + const SetupPacket: WINUSB_SETUP_PACKET_INT64; const PBuffer: PByte; + //optional may be Nil + const BufferLength: Cardinal; const LengthTransferred: PCardinal; + //Optional may be Nil + const Overlapped: POverlapped //Optional + ): Bool; stdcall; + + KUSB_SetPowerPolicy = function(const InterfaceHandle: KUSB_HANDLE; + const PolicyType: Cardinal; const ValueLength: Cardinal; const Value) + : Bool; stdcall; + + KUSB_GetPowerPolicy = function(const InterfaceHandle: KUSB_HANDLE; + const PolicyType: Cardinal; var ValueLength: Cardinal; + //Input: Size of Value, output : copied bytes + var Value): Bool; stdcall; + + KUSB_SetConfiguration = function(const InterfaceHandle: KUSB_HANDLE; + const ConfigurationNumber: Byte): Bool; stdcall; + + KUSB_GetConfiguration = function(const InterfaceHandle: KUSB_HANDLE; + var ConfigurationNumber: Byte): Bool; stdcall; + + KUSB_ResetDevice = function(const InterfaceHandle: KUSB_HANDLE) + : Bool; stdcall; + + KUSB_Initialize = function(const DeviceHandle: KUSB_HANDLE; + var InterfaceHandle: KUSB_HANDLE): Bool; stdcall; + + KUSB_SelectInterface = function(const InterfaceHandle: KUSB_HANDLE; + const NumberOrIndex: Byte; const IsIndex: Bool): Bool; stdcall; + + KUSB_GetAssociatedInterface = function(const InterfaceHandle: KUSB_HANDLE; + const AssociatedInterfaceIndex: Byte; + var AssociatedInterfaceHandle: KUSB_HANDLE): Bool; stdcall; + + KUSB_Clone = function(const InterfaceHandle: KUSB_HANDLE; + var DstInterfaceHandle: KUSB_HANDLE): Bool; stdcall; + + KUSB_QueryInterfaceSettings = function(const InterfaceHandle: KUSB_HANDLE; + const AltSettingNumber: Byte; + var UsbAltInterfaceDescriptor: USB_INTERFACE_DESCRIPTOR): Bool; stdcall; + + KUSB_QueryDeviceInformation = function(const InterfaceHandle: KUSB_HANDLE; + const InformationType: Cardinal; var BufferLength: Cardinal; + // Input: Length of Buffer, copied Bytes in Buffer + var Buffer): Bool; stdcall; + + KUSB_SetCurrentAlternateSetting = function(const InterfaceHandle + : KUSB_HANDLE; const AltSettingNumber: Byte): Bool; stdcall; + + KUSB_GetCurrentAlternateSetting = function(const InterfaceHandle + : KUSB_HANDLE; var AltSettingNumber: Byte): Bool; stdcall; + + KUSB_QueryPipe = function(const InterfaceHandle: KUSB_HANDLE; + const AltSettingNumber: Byte; const PipeIndex: Byte; + var PipeInformation: WINUSB_PIPE_INFORMATION): Bool; stdcall; + + KUSB_SetPipePolicy = function(const InterfaceHandle: KUSB_HANDLE; + const PipeId: Byte; const PolicyType: Cardinal; + const ValueLength: Cardinal; const Value): Bool; stdcall; + + KUSB_GetPipePolicy = function(const InterfaceHandle: KUSB_HANDLE; + const PipeId: Byte; const PolicyType: Cardinal; var ValueLength: Cardinal; + // Input: Length of Value, copied Bytes in Value + var Value): Bool; stdcall; + + KUSB_ReadPipe = function(const InterfaceHandle: KUSB_HANDLE; + const PipeId: Byte; var Buffer; const BufferLength: Cardinal; + const LengthTransferred: PCardinal; // optional may be Nil + const Overlapped: POverlapped //Optional + ): Bool; stdcall; + + KUSB_WritePipe = function(const InterfaceHandle: KUSB_HANDLE; + const PipeId: Byte; const Buffer; const BufferLength: Cardinal; + const LengthTransferred: PCardinal; // optional may be Nil + const Overlapped: POverlapped //Optional + ): Bool; stdcall; + + KUSB_ResetPipe = function(const InterfaceHandle: KUSB_HANDLE; + const PipeId: Byte): Bool; stdcall; + + KUSB_AbortPipe = function(const InterfaceHandle: KUSB_HANDLE; + const PipeId: Byte): Bool; stdcall; + + KUSB_FlushPipe = function(const InterfaceHandle: KUSB_HANDLE; + const PipeId: Byte): Bool; stdcall; + + KUSB_IsoReadPipe = function(const InterfaceHandle: KUSB_HANDLE; + const PipeId: Byte; var Buffer; const BufferLength: Cardinal; + const Overlapped: POverlapped; //Optional + const IsoContext: PKISO_CONTEXT // optional + ): Bool; stdcall; + + KUSB_IsoWritePipe = function(const InterfaceHandle: KUSB_HANDLE; + const PipeId: Byte; const Buffer; const BufferLength: Cardinal; + const Overlapped: POverlapped; //Optional + const IsoContext: PKISO_CONTEXT // optional + ): Bool; stdcall; + + KUSB_GetCurrentFrameNumber = function(const InterfaceHandle: KUSB_HANDLE; + var FrameNumber: Cardinal): Bool; stdcall; + + KUSB_GetOverlappedResult = function(const InterfaceHandle: KUSB_HANDLE; + const lpOverlapped: POverlapped; //Optional + var lpNumberOfBytesTransferred: Cardinal; const bWait: Bool) + : Bool; stdcall; + + KUSB_GetProperty = function(const InterfaceHandle: KUSB_HANDLE; + const PropertyType: KUSB_PROPERTY; var PropertySize: Cardinal; + // Input: Length of Property Buffer, copied Bytes in Property Buffer + var TheProperty + // Parameter name changed, since "property" is a reserved word in Delphi + ): Bool; stdcall; + + // Driver API function set structure. + PKUSB_DRIVER_API = ^KUSB_DRIVER_API; + + KUSB_DRIVER_API = packed record + Info: KUSB_DRIVER_API_INFO; + Init: KUSB_Init; + Free: KUSB_Free; + ClaimInterface: KUSB_ClaimInterface; + ReleaseInterface: KUSB_ReleaseInterface; + SetAltInterface: KUSB_SetAltInterface; + GetAltInterface: KUSB_GetAltInterface; + GetDescriptor: KUSB_GetDescriptor; + ControlTransfer: KUSB_ControlTransfer; + SetPowerPolicy: KUSB_SetPowerPolicy; + GetPowerPolicy: KUSB_GetPowerPolicy; + SetConfiguration: KUSB_SetConfiguration; + GetConfiguration: KUSB_GetConfiguration; + ResetDevice: KUSB_ResetDevice; + Initialize: KUSB_Initialize; + SelectInterface: KUSB_SelectInterface; + GetAssociatedInterface: KUSB_GetAssociatedInterface; + Clone: KUSB_Clone; + QueryInterfaceSettings: KUSB_QueryInterfaceSettings; + QueryDeviceInformation: KUSB_QueryDeviceInformation; + SetCurrentAlternateSetting: KUSB_SetCurrentAlternateSetting; + GetCurrentAlternateSetting: KUSB_GetCurrentAlternateSetting; + QueryPipe: KUSB_QueryPipe; + SetPipePolicy: KUSB_SetPipePolicy; + GetPipePolicy: KUSB_GetPipePolicy; + ReadPipe: KUSB_ReadPipe; + WritePipe: KUSB_WritePipe; + ResetPipe: KUSB_ResetPipe; + AbortPipe: KUSB_AbortPipe; + FlushPipe: KUSB_FlushPipe; + IsoReadPipe: KUSB_IsoReadPipe; + IsoWritePipe: KUSB_IsoWritePipe; + GetCurrentFrameNumber: KUSB_GetCurrentFrameNumber; + GetOverlappedResult: KUSB_GetOverlappedResult; + GetProperty: KUSB_GetProperty; + // fixed structure padding. + z_F_i_x_e_d: array [0 .. 512 - SizeOf(KUSB_DRIVER_API_INFO) - + (SizeOf(pointer) * Ord(KUSB_FNID_COUNT)) - 1] of Byte; + end; + + // StmK + + type + + KSTM_FLAG = Cardinal; + + KSTM_COMPLETE_RESULT = Cardinal; + + const + + KSTM_FLAG_NONE = 0; + KSTM_FLAG_USE_TIMEOUT = $80000000; + KSTM_FLAG_NO_PARTIAL_XFERS = $00100000; + KSTM_FLAG_TIMEOUT_MASK = $0001FFFF; + + KSTM_COMPLETE_RESULT_VALID = 0; + KSTM_COMPLETE_RESULT_INVALID = 1; + + type + + PKSTM_XFER_CONTEXT = ^KSTM_XFER_CONTEXT; + + KSTM_XFER_CONTEXT = packed record + Buffer: PByte; + BufferSize: Integer; + TransferLength: Integer; + UserState: pointer; + end; + + PKSTM_INFO = ^KSTM_INFO; + + KSTM_INFO = packed record + UsbHandle: KUSB_HANDLE; + PipeId: Byte; + MaxPendingTransfers: Integer; + MaxTransferSize: Integer; + MaxPendingIO: Integer; + EndpointDescriptor: USB_ENDPOINT_DESCRIPTOR; + DriverAPI: KUSB_DRIVER_API; + DeviceHandle: THandle; + StreamHandle: KSTM_HANDLE; + UserState: pointer; + end; + + PInteger = ^Integer; + + KSTM_ERROR_CB = function(const StreamInfo: PKSTM_INFO; + const XferContext: PKSTM_XFER_CONTEXT; const XferContextIndex: Integer; + const ErrorCode: Integer): Integer; stdcall; + KSTM_SUBMIT_CB = function(const StreamInfo: PKSTM_INFO; + const XferContext: PKSTM_XFER_CONTEXT; const XferContextIndex: Integer; + Overlapped: POverlapped): Integer; stdcall; + KSTM_STARTED_CB = function(const StreamInfo: PKSTM_INFO; + const XferContext: PKSTM_XFER_CONTEXT; const XferContextIndex: Integer) + : Integer; stdcall; + KSTM_STOPPED_CB = function(const StreamInfo: PKSTM_INFO; + const XferContext: PKSTM_XFER_CONTEXT; const XferContextIndex: Integer) + : Integer; stdcall; + KSTM_COMPLETE_CB = function(const StreamInfo: PKSTM_INFO; + const XferContext: PKSTM_XFER_CONTEXT; const XferContextIndex: Integer; + const ErrorCode: Integer): Integer; stdcall; + KSTM_BEFORE_COMPLETE_CB = function(const StreamInfo: PKSTM_INFO; + const XferContext: PKSTM_XFER_CONTEXT; const XferContextIndex: Integer; + const ErrorCode: PInteger): KSTM_COMPLETE_RESULT; stdcall; + + PKSTM_CALLBACK = ^KSTM_CALLBACK; + + KSTM_CALLBACK = packed record + Error: KSTM_ERROR_CB; + Submit: KSTM_SUBMIT_CB; + Complete: KSTM_COMPLETE_CB; + Started: KSTM_STARTED_CB; + Stopped: KSTM_STOPPED_CB; + BeforeComplete: KSTM_BEFORE_COMPLETE_CB; + z_F_i_x_e_d: array [0 .. (64 - SizeOf(pointer) * 6) - 1] of Byte; + end; + + KOVL_POOL_FLAG = (KOVL_POOL_FLAG_NONE); + KOVL_WAIT_FLAG = Cardinal; + + const + + KOVL_WAIT_FLAG_NONE = 0; + KOVL_WAIT_FLAG_RELEASE_ON_SUCCESS = $0001; + KOVL_WAIT_FLAG_RELEASE_ON_FAIL = $0002; + KOVL_WAIT_FLAG_RELEASE_ON_SUCCESS_FAIL = $0003; + KOVL_WAIT_FLAG_CANCEL_ON_TIMEOUT = $0004; + KOVL_WAIT_FLAG_RELEASE_ON_TIMEOUT = $000C; + KOVL_WAIT_FLAG_RELEASE_ALWAYS = $000F; + KOVL_WAIT_FLAG_ALERTABLE = $0010; + + var + + DllAvailable: Boolean; + + {$IFDEF DynamicLink} + + var + + HLIBUSBKDll: THandle; + + HotK_Init: function(var Handle: KHOT_HANDLE; const InitParams: PKHOT_PARAMS) + : Bool; stdcall; + HotK_Free: function(const Handle: KHOT_HANDLE): Bool; stdcall; + HotK_FreeAll: procedure; stdcall; + IsoK_EnumPackets: function(const IsoContext: PKISO_CONTEXT; + const EnumPackets: KISO_ENUM_PACKETS_CB; const StartPacketIndex: Integer; + const UserState): Bool; stdcall; + IsoK_Free: function(const IsoContext: PKISO_CONTEXT): Bool; stdcall; + IsoK_GetPacket: function(const IsoContext: PKISO_CONTEXT; + const PacketIndex: Integer; const IsoPacket: PKISO_PACKET): Bool; stdcall; + IsoK_Init: function(var IsoContext: PKISO_CONTEXT; + const NumberOfPackets: Integer; const StartFrame: Integer): Bool; stdcall; + IsoK_ReUse: function(const IsoContext: PKISO_CONTEXT): Bool; stdcall; + IsoK_SetPacket: function(const IsoContext: PKISO_CONTEXT; + const PacketIndex: Integer; const IsoPacket: PKISO_PACKET): Bool; stdcall; + IsoK_SetPackets: function(const IsoContext: PKISO_CONTEXT; + const PacketSize: Integer): Bool; stdcall; + LibK_CopyDriverAPI: function: Bool; stdcall; + LibK_GetContext: function(const Handle: KLIB_HANDLE; + const HandleType: KLIB_HANDLE_TYPE): KLIB_USER_CONTEXT; stdcall; + LibK_GetProcAddress: function: Bool; stdcall; + LibK_GetVersion: function: Bool; stdcall; + LibK_LoadDriverAPI: function(var DriverAPI: KUSB_DRIVER_API; + const DriverID: Integer): Bool; stdcall; + LibK_SetCleanupCallback: function: Bool; stdcall; + LibK_SetContext: function(const Handle: KLIB_HANDLE; + const HandleType: KLIB_HANDLE_TYPE; const ContextValue: KLIB_USER_CONTEXT) + : Bool; stdcall; + LibK_SetDefaultContext: function(const HandleType: KLIB_HANDLE_TYPE; + const UserContext: KLIB_USER_CONTEXT): Bool; stdcall; + LibK_GetDefaultContext: function(const HandleType: KLIB_HANDLE_TYPE) + : KLIB_USER_CONTEXT; stdcall; + LstK_AttachInfo: function: Bool; stdcall; + LstK_Clone: function(const InterfaceHandle: KUSB_HANDLE; + var DstInterfaceHandle: KUSB_HANDLE): Bool; stdcall; + LstK_CloneInfo: function: Bool; stdcall; + LstK_Count: function(const DeviceList: KLST_HANDLE; var Count: Cardinal) + : Bool; stdcall; + LstK_Current: function: Bool; stdcall; + LstK_DetachInfo: function: Bool; stdcall; + LstK_Enumerate: function: Bool; stdcall; + LstK_FindByVidPid: function(const DeviceList: KLST_HANDLE; + const Vid: Integer; const Pid: Integer; + var DeviceInfo: KLST_DEVINFO_HANDLE): Bool; stdcall; + LstK_Free: function(const DeviceList: KLST_HANDLE): Bool; stdcall; + LstK_FreeInfo: function: Bool; stdcall; + LstK_Init: function(var DeviceList: KLST_HANDLE; const Flags: KLST_FLAG) + : Bool; stdcall; + LstK_InitEx: function(var DeviceList: KLST_HANDLE; const Flags: KLST_FLAG; + const PatternMatch: PKLST_PATTERN_MATCH): Bool; stdcall; + LstK_MoveNext: function(const DeviceList: KLST_HANDLE; + var DevInfo: KLST_DEVINFO_HANDLE): Bool; stdcall; + LstK_MoveReset: function(const DeviceList: KLST_HANDLE): Bool; stdcall; + LstK_Sync: function: Bool; stdcall; + OvlK_Acquire: function(var OverlappedK: KOVL_HANDLE; + const PoolHandle: KOVL_POOL_HANDLE): Bool; stdcall; + OvlK_Free: function(const PoolHandle: KOVL_POOL_HANDLE): Bool; stdcall; + OvlK_GetEventHandle: function: Bool; stdcall; + OvlK_Init: function(var PoolHandle: KOVL_POOL_HANDLE; + const UsbHandle: KUSB_HANDLE; const MaxOverlappedCount: Integer; + const Flags: KOVL_POOL_FLAG): Bool; stdcall; + OvlK_IsComplete: function: Bool; stdcall; + OvlK_ReUse: function(const OverlappedK: KOVL_HANDLE): Bool; stdcall; + OvlK_Release: function(const OverlappedK: KOVL_HANDLE): Bool; stdcall; + OvlK_Wait: function(const OverlappedK: KOVL_HANDLE; + const TimeoutMS: Integer; const WaitFlags: KOVL_WAIT_FLAG; + var TransferredLength: Cardinal): Bool; stdcall; + OvlK_WaitOldest: function(const PoolHandle: KOVL_POOL_HANDLE; + var OverlappedK: KOVL_HANDLE; const TimeoutMS: Integer; + const WaitFlags: KOVL_WAIT_FLAG; var TransferredLength: Cardinal) + : Bool; stdcall; + OvlK_WaitAndRelease: function(const OverlappedK: KOVL_HANDLE; + const TimeoutMS: Integer; var TransferredLength: Cardinal): Bool; stdcall; + OvlK_WaitOrCancel: function(const OverlappedK: KOVL_HANDLE; + const TimeoutMS: Integer; var TransferredLength: Cardinal): Bool; stdcall; + StmK_Free: function(const StreamHandle: KSTM_HANDLE): Bool; stdcall; + StmK_Init: function(var StreamHandle: KSTM_HANDLE; + const UsbHandle: KUSB_HANDLE; const PipeId: Byte; + const MaxTransferSize: Integer; const MaxPendingTransfers: Integer; + const MaxPendingIO: Integer; const Callbacks: PKSTM_CALLBACK; + const Flags: KSTM_FLAG): Bool; stdcall; + StmK_Read: function(const StreamHandle: KSTM_HANDLE; var Buffer; + const Offset: Integer; const Length: Integer; + var TransferredLength: Cardinal): Bool; stdcall; + StmK_Start: function(const StreamHandle: KSTM_HANDLE): Bool; stdcall; + StmK_Stop: function(const StreamHandle: KSTM_HANDLE; + const TimeoutCancelMS: Integer): Bool; stdcall; + StmK_Write: function(const StreamHandle: KSTM_HANDLE; const Buffer; + const Offset: Integer; const Length: Integer; + var TransferredLength: Cardinal): Bool; stdcall; + UsbK_AbortPipe: function(const InterfaceHandle: KUSB_HANDLE; + const PipeId: Byte): Bool; stdcall; + UsbK_ClaimInterface: function(const InterfaceHandle: KUSB_HANDLE; + const NumberOrIndex: Byte; const IsIndex: Bool): Bool; stdcall; + UsbK_Clone: function(const InterfaceHandle: KUSB_HANDLE; + var DstInterfaceHandle: KUSB_HANDLE): Bool; stdcall; + UsbK_ControlTransfer: function(const InterfaceHandle: KUSB_HANDLE; + const SetupPacket: WINUSB_SETUP_PACKET_INT64; var Buffer; + const BufferLength: Cardinal; const LengthTransferred: PCardinal; + //Optional may be Nil + const Overlapped: POverlapped): Bool; stdcall; + UsbK_FlushPipe: function: Bool; stdcall; + UsbK_Free: function(const InterfaceHandle: KUSB_HANDLE): Bool; stdcall; + UsbK_GetAltInterface: function(const InterfaceHandle: KUSB_HANDLE; + const NumberOrIndex: Byte; const IsIndex: Bool; + var AltSettingNumber: Byte): Bool; stdcall; + UsbK_GetAssociatedInterface: function: Bool; stdcall; + UsbK_GetConfiguration: function: Bool; stdcall; + UsbK_GetCurrentAlternateSetting: function: Bool; stdcall; + UsbK_GetCurrentFrameNumber: function(const InterfaceHandle: KUSB_HANDLE; + var FrameNumber: Cardinal): Bool; stdcall; + UsbK_GetDescriptor: function(const InterfaceHandle: KUSB_HANDLE; + const DescriptorType: Byte; const Index: Byte; const LanguageID: Word; + var Buffer; const BufferLength: Cardinal; var LengthTransferred: Cardinal) + : Bool; stdcall; + UsbK_GetOverlappedResult: function: Bool; stdcall; + UsbK_GetPipePolicy: function: Bool; stdcall; + UsbK_GetPowerPolicy: function: Bool; stdcall; + UsbK_GetProperty: function: Bool; stdcall; + UsbK_Init: function(var InterfaceHandle: KUSB_HANDLE; + const DevInfo: KLST_DEVINFO_HANDLE): Bool; stdcall; + UsbK_Initialize: function: Bool; stdcall; + UsbK_IsoReadPipe: function(const InterfaceHandle: KUSB_HANDLE; + const PipeId: Byte; var Buffer; const BufferLength: Cardinal; + const Overlapped: POverlapped; const IsoContext: PKISO_CONTEXT) + : Bool; stdcall; + UsbK_IsoWritePipe: function: Bool; stdcall; + UsbK_QueryDeviceInformation: function: Bool; stdcall; + UsbK_QueryInterfaceSettings: function(const InterfaceHandle: KUSB_HANDLE; + const AltSettingNumber: Byte; + var UsbAltInterfaceDescriptor: USB_INTERFACE_DESCRIPTOR): Bool; stdcall; + UsbK_QueryPipe: function(const InterfaceHandle: KUSB_HANDLE; + const AltSettingNumber: Byte; const PipeIndex: Byte; + var PipeInformation: WINUSB_PIPE_INFORMATION): Bool; stdcall; + UsbK_ReadPipe: function(const InterfaceHandle: KUSB_HANDLE; + const PipeId: Byte; var Buffer; const BufferLength: Cardinal; + const LengthTransferred: PCardinal; //Optional may be Nil + const Overlapped: POverlapped): Bool; stdcall; + UsbK_ReleaseInterface: function(const InterfaceHandle: KUSB_HANDLE; + const NumberOrIndex: Byte; const IsIndex: Bool): Bool; stdcall; + UsbK_ResetDevice: function: Bool; stdcall; + UsbK_ResetPipe: function(const InterfaceHandle: KUSB_HANDLE; + const PipeId: Byte): Bool; stdcall; + UsbK_SelectInterface: function(const InterfaceHandle: KUSB_HANDLE; + const NumberOrIndex: Byte; const IsIndex: Bool): Bool; stdcall; + UsbK_SetAltInterface: function(const InterfaceHandle: KUSB_HANDLE; + const NumberOrIndex: Byte; const IsIndex: Bool; + const AltSettingNumber: Byte): Bool; stdcall; + UsbK_SetConfiguration: function(const InterfaceHandle: KUSB_HANDLE; + const ConfigurationNumber: Byte): Bool; stdcall; + UsbK_SetCurrentAlternateSetting + : function(const InterfaceHandle: KUSB_HANDLE; + const AltSettingNumber: Byte): Bool; stdcall; + UsbK_SetPipePolicy: function(const InterfaceHandle: KUSB_HANDLE; + const PipeId: Byte; const PolicyType: Cardinal; + const ValueLength: Cardinal; const Value): Bool; stdcall; + UsbK_SetPowerPolicy: function: Bool; stdcall; + + UsbK_WritePipe: function(const InterfaceHandle: KUSB_HANDLE; + const PipeId: Byte; var Buffer; const BufferLength: Cardinal; + const LengthTransferred: PCardinal; + const Overlapped: POverlapped): Bool; stdcall; + + WinUsb_AbortPipe: function: Bool; stdcall; + WinUsb_ControlTransfer: function: Bool; stdcall; + WinUsb_FlushPipe: function: Bool; stdcall; + WinUsb_Free: function: Bool; stdcall; + WinUsb_GetAssociatedInterface: function: Bool; stdcall; + WinUsb_GetCurrentAlternateSetting: function: Bool; stdcall; + WinUsb_GetDescriptor: function: Bool; stdcall; + WinUsb_GetOverlappedResult: function: Bool; stdcall; + WinUsb_GetPipePolicy: function: Bool; stdcall; + WinUsb_GetPowerPolicy: function: Bool; stdcall; + WinUsb_Initialize: function: Bool; stdcall; + WinUsb_QueryDeviceInformation: function: Bool; stdcall; + WinUsb_QueryInterfaceSettings: function: Bool; stdcall; + WinUsb_QueryPipe: function: Bool; stdcall; + WinUsb_ReadPipe: function: Bool; stdcall; + WinUsb_ResetPipe: function: Bool; stdcall; + WinUsb_SetCurrentAlternateSetting: function: Bool; stdcall; + WinUsb_SetPipePolicy: function: Bool; stdcall; + WinUsb_SetPowerPolicy: function: Bool; stdcall; + WinUsb_WritePipe: function: Bool; stdcall; + + {$ELSE} + function HotK_Init(var Handle: KHOT_HANDLE; const InitParams: PKHOT_PARAMS) + : Bool; stdcall; external LIBUSBK_DLL name 'HotK_Init'; + function HotK_Free(const Handle: KHOT_HANDLE): Bool; stdcall; + external LIBUSBK_DLL name 'HotK_Free'; + procedure HotK_FreeAll; stdcall; external LIBUSBK_DLL name 'HotK_FreeAll'; + function IsoK_EnumPackets(const IsoContext: PKISO_CONTEXT; + const EnumPackets: KISO_ENUM_PACKETS_CB; const StartPacketIndex: Integer; + const UserState): Bool; stdcall; + external LIBUSBK_DLL name 'IsoK_EnumPackets'; + function IsoK_Free(const IsoContext: PKISO_CONTEXT): Bool; stdcall; + external LIBUSBK_DLL name 'IsoK_Free'; + function IsoK_GetPacket(const IsoContext: PKISO_CONTEXT; + const PacketIndex: Integer; const IsoPacket: PKISO_PACKET): Bool; stdcall; + external LIBUSBK_DLL name 'IsoK_GetPacket'; + function IsoK_Init(var IsoContext: PKISO_CONTEXT; + const NumberOfPackets: Integer; const StartFrame: Integer): Bool; stdcall; + external LIBUSBK_DLL name 'IsoK_Init'; + function IsoK_ReUse(const IsoContext: PKISO_CONTEXT): Bool; stdcall; + external LIBUSBK_DLL name 'IsoK_ReUse'; + function IsoK_SetPacket(const IsoContext: PKISO_CONTEXT; + const PacketIndex: Integer; const IsoPacket: PKISO_PACKET): Bool; stdcall; + external LIBUSBK_DLL name 'IsoK_SetPacket'; + function IsoK_SetPackets(const IsoContext: PKISO_CONTEXT; + const PacketSize: Integer): Bool; stdcall; + external LIBUSBK_DLL name 'IsoK_SetPackets'; + function LibK_CopyDriverAPI: Bool; stdcall; + external LIBUSBK_DLL name 'LibK_CopyDriverAPI'; + function LibK_GetContext(const Handle: KLIB_HANDLE; + const HandleType: KLIB_HANDLE_TYPE): KLIB_USER_CONTEXT; stdcall; + external LIBUSBK_DLL name 'LibK_GetContext'; + function LibK_GetProcAddress: Bool; stdcall; + external LIBUSBK_DLL name 'LibK_GetProcAddress'; + function LibK_GetVersion: Bool; stdcall; + external LIBUSBK_DLL name 'LibK_GetVersion'; + function LibK_LoadDriverAPI(var DriverAPI: KUSB_DRIVER_API; + const DriverID: Integer): Bool; stdcall; + external LIBUSBK_DLL name 'LibK_LoadDriverAPI'; + function LibK_SetCleanupCallback: Bool; stdcall; + external LIBUSBK_DLL name 'LibK_SetCleanupCallback'; + function LibK_SetContext(const Handle: KLIB_HANDLE; + const HandleType: KLIB_HANDLE_TYPE; const ContextValue: KLIB_USER_CONTEXT) + : Bool; stdcall; external LIBUSBK_DLL name 'LibK_SetContext'; + function LibK_SetDefaultContext(const HandleType: KLIB_HANDLE_TYPE; + const UserContext: KLIB_USER_CONTEXT): Bool; stdcall; + external LIBUSBK_DLL name 'LibK_SetDefaultContext'; + function LibK_GetDefaultContext(const HandleType: KLIB_HANDLE_TYPE) + : KLIB_USER_CONTEXT; stdcall; + external LIBUSBK_DLL name 'LibK_GetDefaultContext'; + function LstK_AttachInfo: Bool; stdcall; + external LIBUSBK_DLL name 'LstK_AttachInfo'; + function LstK_Clone(const InterfaceHandle: KUSB_HANDLE; + var DstInterfaceHandle: KUSB_HANDLE): Bool; stdcall; + external LIBUSBK_DLL name 'LstK_Clone'; + function LstK_CloneInfo: Bool; stdcall; + external LIBUSBK_DLL name 'LstK_CloneInfo'; + function LstK_Count(const DeviceList: KLST_HANDLE; var Count: Cardinal): Bool; + stdcall; external LIBUSBK_DLL name 'LstK_Count'; + function LstK_Current: Bool; stdcall; + external LIBUSBK_DLL name 'LstK_Current'; + function LstK_DetachInfo: Bool; stdcall; + external LIBUSBK_DLL name 'LstK_Current'; + function LstK_Enumerate: Bool; stdcall; + external LIBUSBK_DLL name 'LstK_Enumerate'; + function LstK_FindByVidPid(const DeviceList: KLST_HANDLE; const Vid: Integer; + const Pid: Integer; var DeviceInfo: KLST_DEVINFO_HANDLE): Bool; stdcall; + external LIBUSBK_DLL name 'LstK_FindByVidPid'; + function LstK_Free(const DeviceList: KLST_HANDLE): Bool; stdcall; + external LIBUSBK_DLL name 'LstK_Free'; + function LstK_FreeInfo: Bool; stdcall; + external LIBUSBK_DLL name 'LstK_FreeInfo'; + function LstK_Init(var DeviceList: KLST_HANDLE; const Flags: KLST_FLAG): Bool; + stdcall; external LIBUSBK_DLL name 'LstK_Init'; + function LstK_InitEx(var DeviceList: KLST_HANDLE; const Flags: KLST_FLAG; + const PatternMatch: PKLST_PATTERN_MATCH): Bool; stdcall; + external LIBUSBK_DLL name 'LstK_InitEx'; + function LstK_MoveNext(const DeviceList: KLST_HANDLE; + var DevInfo: KLST_DEVINFO_HANDLE): Bool; stdcall; + external LIBUSBK_DLL name 'LstK_MoveNext'; + function LstK_MoveReset(const DeviceList: KLST_HANDLE): Bool; stdcall; + external LIBUSBK_DLL name 'LstK_MoveReset'; + function LstK_Sync: Bool; stdcall; external LIBUSBK_DLL name 'LstK_Sync'; + function OvlK_Acquire(var OverlappedK: KOVL_HANDLE; + const PoolHandle: KOVL_POOL_HANDLE): Bool; stdcall; + external LIBUSBK_DLL name 'OvlK_Acquire'; + function OvlK_Free(const PoolHandle: KOVL_POOL_HANDLE): Bool; stdcall; + external LIBUSBK_DLL name 'OvlK_Free'; + function OvlK_GetEventHandle: Bool; stdcall; + external LIBUSBK_DLL name 'OvlK_GetEventHandle'; + function OvlK_Init(var PoolHandle: KOVL_POOL_HANDLE; + const UsbHandle: KUSB_HANDLE; const MaxOverlappedCount: Integer; + const Flags: KOVL_POOL_FLAG): Bool; stdcall; + external LIBUSBK_DLL name 'OvlK_Init'; + function OvlK_IsComplete: Bool; stdcall; + external LIBUSBK_DLL name 'OvlK_IsComplete'; + function OvlK_ReUse(const OverlappedK: KOVL_HANDLE): Bool; stdcall; + external LIBUSBK_DLL name 'OvlK_ReUse'; + function OvlK_Release(const OverlappedK: KOVL_HANDLE): Bool; stdcall; + external LIBUSBK_DLL name 'OvlK_Release'; + function OvlK_Wait(const OverlappedK: KOVL_HANDLE; const TimeoutMS: Integer; + const WaitFlags: KOVL_WAIT_FLAG; var TransferredLength: Cardinal): Bool; + stdcall; external LIBUSBK_DLL name 'OvlK_Wait'; + function OvlK_WaitOldest(const PoolHandle: KOVL_POOL_HANDLE; + var OverlappedK: KOVL_HANDLE; const TimeoutMS: Integer; + const WaitFlags: KOVL_WAIT_FLAG; var TransferredLength: Cardinal): Bool; + stdcall; external LIBUSBK_DLL name 'OvlK_WaitOldest'; + function OvlK_WaitAndRelease(const OverlappedK: KOVL_HANDLE; + const TimeoutMS: Integer; var TransferredLength: Cardinal): Bool; stdcall; + external LIBUSBK_DLL name 'OvlK_WaitAndRelease'; + function OvlK_WaitOrCancel(const OverlappedK: KOVL_HANDLE; + const TimeoutMS: Integer; var TransferredLength: Cardinal): Bool; stdcall; + external LIBUSBK_DLL name 'OvlK_WaitOrCancel'; + function StmK_Free(const StreamHandle: KSTM_HANDLE): Bool; stdcall; + external LIBUSBK_DLL name 'StmK_Free'; + function StmK_Init(var StreamHandle: KSTM_HANDLE; + const UsbHandle: KUSB_HANDLE; const PipeId: Byte; + const MaxTransferSize: Integer; const MaxPendingTransfers: Integer; + const MaxPendingIO: Integer; const Callbacks: PKSTM_CALLBACK; + const Flags: KSTM_FLAG): Bool; stdcall; + external LIBUSBK_DLL name 'StmK_Init'; + function StmK_Read(const StreamHandle: KSTM_HANDLE; var Buffer; + const Offset: Integer; const Length: Integer; + var TransferredLength: Cardinal): Bool; stdcall; + external LIBUSBK_DLL name 'StmK_Read'; + function StmK_Start(const StreamHandle: KSTM_HANDLE): Bool; stdcall; + external LIBUSBK_DLL name 'StmK_Start'; + function StmK_Stop(const StreamHandle: KSTM_HANDLE; + const TimeoutCancelMS: Integer): Bool; stdcall; + external LIBUSBK_DLL name 'StmK_Stop'; + function StmK_Write(const StreamHandle: KSTM_HANDLE; const Buffer; + const Offset: Integer; const Length: Integer; + var TransferredLength: Cardinal): Bool; stdcall; + external LIBUSBK_DLL name 'StmK_Write'; + function UsbK_AbortPipe(const InterfaceHandle: KUSB_HANDLE; + const PipeId: Byte): Bool; stdcall; + external LIBUSBK_DLL name 'UsbK_AbortPipe'; + function UsbK_ClaimInterface(const InterfaceHandle: KUSB_HANDLE; + const NumberOrIndex: Byte; const IsIndex: Bool): Bool; stdcall; + external LIBUSBK_DLL name 'UsbK_ClaimInterface'; + function UsbK_Clone(const InterfaceHandle: KUSB_HANDLE; + var DstInterfaceHandle: KUSB_HANDLE): Bool; stdcall; + external LIBUSBK_DLL name 'UsbK_Clone'; + function UsbK_ControlTransfer(const InterfaceHandle: KUSB_HANDLE; + const SetupPacket: WINUSB_SETUP_PACKET_INT64; var Buffer; + const BufferLength: Cardinal; const LengthTransferred: PCardinal; + //Optional may be Nil + const Overlapped: POverlapped): Bool; stdcall; + external LIBUSBK_DLL name 'UsbK_ControlTransfer'; + function UsbK_FlushPipe: Bool; stdcall; + external LIBUSBK_DLL name 'UsbK_FlushPipe'; + function UsbK_Free(const InterfaceHandle: KUSB_HANDLE): Bool; stdcall; + external LIBUSBK_DLL name 'UsbK_Free'; + function UsbK_GetAltInterface(const InterfaceHandle: KUSB_HANDLE; + const NumberOrIndex: Byte; const IsIndex: Bool; var AltSettingNumber: Byte) + : Bool; stdcall; external LIBUSBK_DLL name 'UsbK_GetAltInterface'; + function UsbK_GetAssociatedInterface: Bool; stdcall; + external LIBUSBK_DLL name 'UsbK_GetAssociatedInterface'; + function UsbK_GetConfiguration: Bool; stdcall; + external LIBUSBK_DLL name 'UsbK_GetConfiguration'; + function UsbK_GetCurrentAlternateSetting: Bool; stdcall; + external LIBUSBK_DLL name 'UsbK_GetCurrentAlternateSetting'; + function UsbK_GetCurrentFrameNumber(const InterfaceHandle: KUSB_HANDLE; + var FrameNumber: Cardinal): Bool; stdcall; + external LIBUSBK_DLL name 'UsbK_GetCurrentFrameNumber'; + function UsbK_GetDescriptor(const InterfaceHandle: KUSB_HANDLE; + const DescriptorType: Byte; const Index: Byte; const LanguageID: Word; + var Buffer; const BufferLength: Cardinal; var LengthTransferred: Cardinal) + : Bool; stdcall; external LIBUSBK_DLL name 'UsbK_GetDescriptor'; + function UsbK_GetOverlappedResult: Bool; stdcall; + external LIBUSBK_DLL name 'UsbK_GetOverlappedResult'; + function UsbK_GetPipePolicy: Bool; stdcall; + external LIBUSBK_DLL name 'UsbK_GetPipePolicy'; + function UsbK_GetPowerPolicy: Bool; stdcall; + external LIBUSBK_DLL name 'UsbK_GetPowerPolicy'; + function UsbK_GetProperty: Bool; stdcall; + external LIBUSBK_DLL name 'UsbK_GetProperty'; + function UsbK_Init(var InterfaceHandle: KUSB_HANDLE; + const DevInfo: KLST_DEVINFO_HANDLE): Bool; stdcall; + external LIBUSBK_DLL name 'UsbK_Init'; + function UsbK_Initialize: Bool; stdcall; + external LIBUSBK_DLL name 'UsbK_Initialize'; + function UsbK_IsoReadPipe(const InterfaceHandle: KUSB_HANDLE; + const PipeId: Byte; var Buffer; const BufferLength: Cardinal; + const Overlapped: POverlapped; const IsoContext: PKISO_CONTEXT): Bool; + stdcall; external LIBUSBK_DLL name 'UsbK_IsoReadPipe'; + function UsbK_IsoWritePipe: Bool; stdcall; + external LIBUSBK_DLL name 'UsbK_IsoWritePipe'; + function UsbK_QueryDeviceInformation: Bool; stdcall; + external LIBUSBK_DLL name 'UsbK_QueryDeviceInformation'; + function UsbK_QueryInterfaceSettings(const InterfaceHandle: KUSB_HANDLE; + const AltSettingNumber: Byte; + var UsbAltInterfaceDescriptor: USB_INTERFACE_DESCRIPTOR): Bool; stdcall; + external LIBUSBK_DLL name 'UsbK_QueryInterfaceSettings'; + function UsbK_QueryPipe(const InterfaceHandle: KUSB_HANDLE; + const AltSettingNumber: Byte; const PipeIndex: Byte; + var PipeInformation: WINUSB_PIPE_INFORMATION): Bool; stdcall; + external LIBUSBK_DLL name 'UsbK_QueryPipe'; + function UsbK_ReadPipe(const InterfaceHandle: KUSB_HANDLE; const PipeId: Byte; + var Buffer; const BufferLength: Cardinal; + const LengthTransferred: PCardinal; //Optional may be Nil + const Overlapped: POverlapped): Bool; stdcall; + external LIBUSBK_DLL name 'UsbK_ReadPipe'; + function UsbK_ReleaseInterface(const InterfaceHandle: KUSB_HANDLE; + const NumberOrIndex: Byte; const IsIndex: Bool): Bool; stdcall; + external LIBUSBK_DLL name 'UsbK_ReleaseInterface'; + function UsbK_ResetDevice: Bool; stdcall; + external LIBUSBK_DLL name 'UsbK_ResetDevice'; + function UsbK_ResetPipe(const InterfaceHandle: KUSB_HANDLE; + const PipeId: Byte): Bool; stdcall; + external LIBUSBK_DLL name 'UsbK_ResetPipe'; + function UsbK_SelectInterface(const InterfaceHandle: KUSB_HANDLE; + const NumberOrIndex: Byte; const IsIndex: Bool): Bool; stdcall; + external LIBUSBK_DLL name 'UsbK_SelectInterface'; + function UsbK_SetAltInterface(const InterfaceHandle: KUSB_HANDLE; + const NumberOrIndex: Byte; const IsIndex: Bool; + const AltSettingNumber: Byte): Bool; stdcall; + external LIBUSBK_DLL name 'UsbK_SetAltInterface'; + function UsbK_SetConfiguration(const InterfaceHandle: KUSB_HANDLE; + const ConfigurationNumber: Byte): Bool; stdcall; + external LIBUSBK_DLL name 'UsbK_SetConfiguration'; + function UsbK_SetCurrentAlternateSetting(const InterfaceHandle: KUSB_HANDLE; + const AltSettingNumber: Byte): Bool; stdcall; + external LIBUSBK_DLL name 'UsbK_SetCurrentAlternateSetting'; + function UsbK_SetPipePolicy(const InterfaceHandle: KUSB_HANDLE; + const PipeId: Byte; const PolicyType: Cardinal; const ValueLength: Cardinal; + const Value): Bool; stdcall; external LIBUSBK_DLL name 'UsbK_SetPipePolicy'; + + function UsbK_SetPowerPolicy: Bool; stdcall; + external LIBUSBK_DLL name 'UsbK_SetPowerPolicy'; + + function UsbK_WritePipe(const InterfaceHandle: KUSB_HANDLE; const PipeId: Byte; + var Buffer; const BufferLength: Cardinal; + const LengthTransferred: PCardinal; + const Overlapped: POverlapped): Bool; stdcall; + external LIBUSBK_DLL name 'UsbK_WritePipe'; + + function WinUsb_AbortPipe: Bool; stdcall; + external LIBUSBK_DLL name 'WinUsb_AbortPipe'; + function WinUsb_ControlTransfer: Bool; stdcall; + external LIBUSBK_DLL name 'WinUsb_ControlTransfer'; + function WinUsb_FlushPipe: Bool; stdcall; + external LIBUSBK_DLL name 'WinUsb_FlushPipe'; + function WinUsb_Free: Bool; stdcall; external LIBUSBK_DLL name 'WinUsb_Free'; + function WinUsb_GetAssociatedInterface: Bool; stdcall; + external LIBUSBK_DLL name 'WinUsb_GetAssociatedInterface'; + function WinUsb_GetCurrentAlternateSetting: Bool; stdcall; + external LIBUSBK_DLL name 'WinUsb_GetCurrentAlternateSetting'; + function WinUsb_GetDescriptor: Bool; stdcall; + external LIBUSBK_DLL name 'WinUsb_GetDescriptor'; + function WinUsb_GetOverlappedResult: Bool; stdcall; + external LIBUSBK_DLL name 'WinUsb_GetOverlappedResult'; + function WinUsb_GetPipePolicy: Bool; stdcall; + external LIBUSBK_DLL name 'WinUsb_GetPipePolicy'; + function WinUsb_GetPowerPolicy: Bool; stdcall; + external LIBUSBK_DLL name 'WinUsb_GetPowerPolicy'; + function WinUsb_Initialize: Bool; stdcall; + external LIBUSBK_DLL name 'WinUsb_Initialize'; + function WinUsb_QueryDeviceInformation: Bool; stdcall; + external LIBUSBK_DLL name 'WinUsb_QueryDeviceInformation'; + function WinUsb_QueryInterfaceSettings: Bool; stdcall; + external LIBUSBK_DLL name 'WinUsb_QueryInterfaceSettings'; + function WinUsb_QueryPipe: Bool; stdcall; + external LIBUSBK_DLL name 'WinUsb_QueryPipe'; + function WinUsb_ReadPipe: Bool; stdcall; + external LIBUSBK_DLL name 'WinUsb_ReadPipe'; + function WinUsb_ResetPipe: Bool; stdcall; + external LIBUSBK_DLL name 'WinUsb_ResetPipe'; + function WinUsb_SetCurrentAlternateSetting: Bool; stdcall; + external LIBUSBK_DLL name 'WinUsb_SetCurrentAlternateSetting'; + function WinUsb_SetPipePolicy: Bool; stdcall; + external LIBUSBK_DLL name 'WinUsb_SetPipePolicy'; + function WinUsb_SetPowerPolicy: Bool; stdcall; + external LIBUSBK_DLL name 'WinUsb_SetPowerPolicy'; + function WinUsb_WritePipe: Bool; stdcall; + external LIBUSBK_DLL name 'WinUsb_WritePipe'; + + {$ENDIF} + function GetIsoPacketFromIsoContext(const AIsoContext: PKISO_CONTEXT; + const AIndex: Integer): PKISO_PACKET; + + function UsbK_InitFromDevicePath(const ADevicePath: String; + var InterfaceHandle: KUSB_HANDLE): Boolean; + + function USB_DESCRIPTOR_MAKE_TYPE_AND_INDEX(const DescriptorType: Byte; + const Index: Byte): Word; + +implementation + + function GetIsoPacketFromIsoContext(const AIsoContext: PKISO_CONTEXT; + const AIndex: Integer): PKISO_PACKET; + begin + if not Assigned(AIsoContext) or (AIndex < 0) or + (AIndex >= AIsoContext.NumberOfPackets) then + Result:= Nil + else + Result:= @PKISO_PACKET_ARRAY(@AIsoContext.IsoPackets)^[AIndex]; + // isoCtx.IsoPackets[posPacket]; + end; + + function UsbK_InitFromDevicePath(const ADevicePath: String; + var InterfaceHandle: KUSB_HANDLE): Boolean; + var + deviceCount: Cardinal; + lDeviceList: KLST_HANDLE; + lDeviceInfo: KLST_DEVINFO_HANDLE; + begin + Result:= False; + if not DllAvailable then + Exit; + InterfaceHandle:= Nil; + deviceCount:= 0; + lDeviceList:= Nil; + lDeviceInfo:= Nil; + // Get the device list + if (not LstK_Init(lDeviceList, 0)) then + Exit; + try + LstK_Count(lDeviceList, deviceCount); + if (deviceCount = 0) then + Exit; // List is freed in finally + while LstK_MoveNext(lDeviceList, lDeviceInfo) do + begin + if Assigned(lDeviceInfo) then + begin + if ADevicePath = lDeviceInfo.DevicePath then + begin + if UsbK_Init(InterfaceHandle, lDeviceInfo) then + begin + Result:= True; + Exit; + end; + InterfaceHandle:= Nil; + end; + end; + end; + finally + // If lDeviceList is still assigned than free + if Assigned(lDeviceList) then + LstK_Free(lDeviceList); + end; + end; + + function USB_DESCRIPTOR_MAKE_TYPE_AND_INDEX(const DescriptorType: Byte; + const Index: Byte): Word; + begin + Result:= (Word(DescriptorType) shl 8) or Index; + end; + + function InitDllImport: Boolean; + begin + Result:= False; + {$IFDEF DynamicLink} + HLIBUSBKDll:= LoadLibrary(LIBUSBK_DLL); + if HLIBUSBKDll >= 32 then { success } + begin + HotK_Init:= GetProcAddress(HLIBUSBKDll, 'HotK_Init'); + HotK_Free:= GetProcAddress(HLIBUSBKDll, 'HotK_Free'); + HotK_FreeAll:= GetProcAddress(HLIBUSBKDll, 'HotK_FreeAll'); + IsoK_EnumPackets:= GetProcAddress(HLIBUSBKDll, 'IsoK_EnumPackets'); + IsoK_Free:= GetProcAddress(HLIBUSBKDll, 'IsoK_Free'); + IsoK_GetPacket:= GetProcAddress(HLIBUSBKDll, 'IsoK_GetPacket'); + IsoK_Init:= GetProcAddress(HLIBUSBKDll, 'IsoK_Init'); + IsoK_ReUse:= GetProcAddress(HLIBUSBKDll, 'IsoK_ReUse'); + IsoK_SetPacket:= GetProcAddress(HLIBUSBKDll, 'IsoK_SetPacket'); + IsoK_SetPackets:= GetProcAddress(HLIBUSBKDll, 'IsoK_SetPackets'); + LibK_CopyDriverAPI:= GetProcAddress(HLIBUSBKDll, 'LibK_CopyDriverAPI'); + LibK_GetContext:= GetProcAddress(HLIBUSBKDll, 'LibK_GetContext'); + LibK_GetProcAddress:= GetProcAddress(HLIBUSBKDll, 'LibK_GetProcAddress'); + LibK_GetVersion:= GetProcAddress(HLIBUSBKDll, 'LibK_GetVersion'); + LibK_LoadDriverAPI:= GetProcAddress(HLIBUSBKDll, 'LibK_LoadDriverAPI'); + LibK_SetCleanupCallback:= GetProcAddress(HLIBUSBKDll, + 'LibK_SetCleanupCallback'); + LibK_SetContext:= GetProcAddress(HLIBUSBKDll, 'LibK_SetContext'); + LibK_SetDefaultContext:= GetProcAddress(HLIBUSBKDll, + 'LibK_SetDefaultContext'); + LibK_GetDefaultContext:= GetProcAddress(HLIBUSBKDll, + 'LibK_GetDefaultContext'); + LstK_AttachInfo:= GetProcAddress(HLIBUSBKDll, 'LstK_AttachInfo'); + LstK_Clone:= GetProcAddress(HLIBUSBKDll, 'LstK_Clone'); + LstK_CloneInfo:= GetProcAddress(HLIBUSBKDll, 'LstK_CloneInfo'); + LstK_Count:= GetProcAddress(HLIBUSBKDll, 'LstK_Count'); + LstK_Current:= GetProcAddress(HLIBUSBKDll, 'LstK_Current'); + LstK_DetachInfo:= GetProcAddress(HLIBUSBKDll, 'LstK_DetachInfo'); + LstK_Enumerate:= GetProcAddress(HLIBUSBKDll, 'LstK_Enumerate'); + LstK_FindByVidPid:= GetProcAddress(HLIBUSBKDll, 'LstK_FindByVidPid'); + LstK_Free:= GetProcAddress(HLIBUSBKDll, 'LstK_Free'); + LstK_FreeInfo:= GetProcAddress(HLIBUSBKDll, 'LstK_FreeInfo'); + LstK_Init:= GetProcAddress(HLIBUSBKDll, 'LstK_Init'); + LstK_InitEx:= GetProcAddress(HLIBUSBKDll, 'LstK_InitEx'); + LstK_MoveNext:= GetProcAddress(HLIBUSBKDll, 'LstK_MoveNext'); + LstK_MoveReset:= GetProcAddress(HLIBUSBKDll, 'LstK_MoveReset'); + LstK_Sync:= GetProcAddress(HLIBUSBKDll, 'LstK_Sync'); + OvlK_Acquire:= GetProcAddress(HLIBUSBKDll, 'OvlK_Acquire'); + OvlK_Free:= GetProcAddress(HLIBUSBKDll, 'OvlK_Free'); + OvlK_GetEventHandle:= GetProcAddress(HLIBUSBKDll, 'OvlK_GetEventHandle'); + OvlK_Init:= GetProcAddress(HLIBUSBKDll, 'OvlK_Init'); + OvlK_IsComplete:= GetProcAddress(HLIBUSBKDll, 'OvlK_IsComplete'); + OvlK_ReUse:= GetProcAddress(HLIBUSBKDll, 'OvlK_ReUse'); + OvlK_Release:= GetProcAddress(HLIBUSBKDll, 'OvlK_Release'); + OvlK_Wait:= GetProcAddress(HLIBUSBKDll, 'OvlK_Wait'); + OvlK_WaitOldest:= GetProcAddress(HLIBUSBKDll, 'OvlK_WaitOldest'); + OvlK_WaitAndRelease:= GetProcAddress(HLIBUSBKDll, 'OvlK_WaitAndRelease'); + OvlK_WaitOrCancel:= GetProcAddress(HLIBUSBKDll, 'OvlK_WaitOrCancel'); + StmK_Free:= GetProcAddress(HLIBUSBKDll, 'StmK_Free'); + StmK_Init:= GetProcAddress(HLIBUSBKDll, 'StmK_Init'); + StmK_Read:= GetProcAddress(HLIBUSBKDll, 'StmK_Read'); + StmK_Start:= GetProcAddress(HLIBUSBKDll, 'StmK_Start'); + StmK_Stop:= GetProcAddress(HLIBUSBKDll, 'StmK_Stop'); + StmK_Write:= GetProcAddress(HLIBUSBKDll, 'StmK_Write'); + UsbK_AbortPipe:= GetProcAddress(HLIBUSBKDll, 'UsbK_AbortPipe'); + UsbK_ClaimInterface:= GetProcAddress(HLIBUSBKDll, 'UsbK_ClaimInterface'); + UsbK_Clone:= GetProcAddress(HLIBUSBKDll, 'UsbK_Clone'); + UsbK_ControlTransfer:= GetProcAddress(HLIBUSBKDll, + 'UsbK_ControlTransfer'); + UsbK_FlushPipe:= GetProcAddress(HLIBUSBKDll, 'UsbK_FlushPipe'); + UsbK_Free:= GetProcAddress(HLIBUSBKDll, 'UsbK_Free'); + UsbK_GetAltInterface:= GetProcAddress(HLIBUSBKDll, + 'UsbK_GetAltInterface'); + UsbK_GetAssociatedInterface:= GetProcAddress(HLIBUSBKDll, + 'UsbK_GetAssociatedInterface'); + UsbK_GetConfiguration:= GetProcAddress(HLIBUSBKDll, + 'UsbK_GetConfiguration'); + UsbK_GetCurrentAlternateSetting:= GetProcAddress(HLIBUSBKDll, + 'UsbK_GetCurrentAlternateSetting'); + UsbK_GetCurrentFrameNumber:= GetProcAddress(HLIBUSBKDll, + 'UsbK_GetCurrentFrameNumber'); + UsbK_GetDescriptor:= GetProcAddress(HLIBUSBKDll, 'UsbK_GetDescriptor'); + UsbK_GetOverlappedResult:= GetProcAddress(HLIBUSBKDll, + 'UsbK_GetOverlappedResult'); + UsbK_GetPipePolicy:= GetProcAddress(HLIBUSBKDll, 'UsbK_GetPipePolicy'); + UsbK_GetPowerPolicy:= GetProcAddress(HLIBUSBKDll, 'UsbK_GetPowerPolicy'); + UsbK_GetProperty:= GetProcAddress(HLIBUSBKDll, 'UsbK_GetProperty'); + UsbK_Init:= GetProcAddress(HLIBUSBKDll, 'UsbK_Init'); + UsbK_Initialize:= GetProcAddress(HLIBUSBKDll, 'UsbK_Initialize'); + UsbK_IsoReadPipe:= GetProcAddress(HLIBUSBKDll, 'UsbK_IsoReadPipe'); + UsbK_IsoWritePipe:= GetProcAddress(HLIBUSBKDll, 'UsbK_IsoWritePipe'); + UsbK_QueryDeviceInformation:= GetProcAddress(HLIBUSBKDll, + 'UsbK_QueryDeviceInformation'); + UsbK_QueryInterfaceSettings:= GetProcAddress(HLIBUSBKDll, + 'UsbK_QueryInterfaceSettings'); + UsbK_QueryPipe:= GetProcAddress(HLIBUSBKDll, 'UsbK_QueryPipe'); + UsbK_ReadPipe:= GetProcAddress(HLIBUSBKDll, 'UsbK_ReadPipe'); + UsbK_ReleaseInterface:= GetProcAddress(HLIBUSBKDll, + 'UsbK_ReleaseInterface'); + UsbK_ResetDevice:= GetProcAddress(HLIBUSBKDll, 'UsbK_ResetDevice'); + UsbK_ResetPipe:= GetProcAddress(HLIBUSBKDll, 'UsbK_ResetPipe'); + UsbK_SelectInterface:= GetProcAddress(HLIBUSBKDll, + 'UsbK_SelectInterface'); + UsbK_SetAltInterface:= GetProcAddress(HLIBUSBKDll, + 'UsbK_SetAltInterface'); + UsbK_SetConfiguration:= GetProcAddress(HLIBUSBKDll, + 'UsbK_SetConfiguration'); + UsbK_SetCurrentAlternateSetting:= GetProcAddress(HLIBUSBKDll, + 'UsbK_SetCurrentAlternateSetting'); + UsbK_SetPipePolicy:= GetProcAddress(HLIBUSBKDll, 'UsbK_SetPipePolicy'); + UsbK_SetPowerPolicy:= GetProcAddress(HLIBUSBKDll, 'UsbK_SetPowerPolicy'); + UsbK_WritePipe:= GetProcAddress(HLIBUSBKDll, 'UsbK_WritePipe'); + WinUsb_AbortPipe:= GetProcAddress(HLIBUSBKDll, 'WinUsb_AbortPipe'); + WinUsb_ControlTransfer:= GetProcAddress(HLIBUSBKDll, + 'WinUsb_ControlTransfer'); + WinUsb_FlushPipe:= GetProcAddress(HLIBUSBKDll, 'WinUsb_FlushPipe'); + WinUsb_Free:= GetProcAddress(HLIBUSBKDll, 'WinUsb_Free'); + WinUsb_GetAssociatedInterface:= GetProcAddress(HLIBUSBKDll, + 'WinUsb_GetAssociatedInterface'); + WinUsb_GetCurrentAlternateSetting:= GetProcAddress(HLIBUSBKDll, + 'WinUsb_GetCurrentAlternateSetting'); + WinUsb_GetDescriptor:= GetProcAddress(HLIBUSBKDll, + 'WinUsb_GetDescriptor'); + WinUsb_GetOverlappedResult:= GetProcAddress(HLIBUSBKDll, + 'WinUsb_GetOverlappedResult'); + WinUsb_GetPipePolicy:= GetProcAddress(HLIBUSBKDll, + 'WinUsb_GetPipePolicy'); + WinUsb_GetPowerPolicy:= GetProcAddress(HLIBUSBKDll, + 'WinUsb_GetPowerPolicy'); + WinUsb_Initialize:= GetProcAddress(HLIBUSBKDll, 'WinUsb_Initialize'); + WinUsb_QueryDeviceInformation:= GetProcAddress(HLIBUSBKDll, + 'WinUsb_QueryDeviceInformation'); + WinUsb_QueryInterfaceSettings:= GetProcAddress(HLIBUSBKDll, + 'WinUsb_QueryInterfaceSettings'); + WinUsb_QueryPipe:= GetProcAddress(HLIBUSBKDll, 'WinUsb_QueryPipe'); + WinUsb_ReadPipe:= GetProcAddress(HLIBUSBKDll, 'WinUsb_ReadPipe'); + WinUsb_ResetPipe:= GetProcAddress(HLIBUSBKDll, 'WinUsb_ResetPipe'); + WinUsb_SetCurrentAlternateSetting:= GetProcAddress(HLIBUSBKDll, + 'WinUsb_SetCurrentAlternateSetting'); + WinUsb_SetPipePolicy:= GetProcAddress(HLIBUSBKDll, + 'WinUsb_SetPipePolicy'); + WinUsb_SetPowerPolicy:= GetProcAddress(HLIBUSBKDll, + 'WinUsb_SetPowerPolicy'); + WinUsb_WritePipe:= GetProcAddress(HLIBUSBKDll, 'WinUsb_WritePipe'); + Result:= True; + Result:= Result and Assigned(HotK_Init); + Result:= Result and Assigned(HotK_Free); + Result:= Result and Assigned(HotK_FreeAll); + Result:= Result and Assigned(IsoK_EnumPackets); + Result:= Result and Assigned(IsoK_Free); + Result:= Result and Assigned(IsoK_GetPacket); + Result:= Result and Assigned(IsoK_Init); + Result:= Result and Assigned(IsoK_ReUse); + Result:= Result and Assigned(IsoK_SetPacket); + Result:= Result and Assigned(IsoK_SetPackets); + Result:= Result and Assigned(LibK_CopyDriverAPI); + Result:= Result and Assigned(LibK_GetContext); + Result:= Result and Assigned(LibK_GetProcAddress); + Result:= Result and Assigned(LibK_GetVersion); + Result:= Result and Assigned(LibK_LoadDriverAPI); + Result:= Result and Assigned(LibK_SetCleanupCallback); + Result:= Result and Assigned(LibK_SetContext); + Result:= Result and Assigned(LibK_SetDefaultContext); + Result:= Result and Assigned(LibK_GetDefaultContext); + Result:= Result and Assigned(LstK_AttachInfo); + Result:= Result and Assigned(LstK_Clone); + Result:= Result and Assigned(LstK_CloneInfo); + Result:= Result and Assigned(LstK_Count); + Result:= Result and Assigned(LstK_Current); + Result:= Result and Assigned(LstK_DetachInfo); + Result:= Result and Assigned(LstK_Enumerate); + Result:= Result and Assigned(LstK_FindByVidPid); + Result:= Result and Assigned(LstK_Free); + Result:= Result and Assigned(LstK_FreeInfo); + Result:= Result and Assigned(LstK_Init); + Result:= Result and Assigned(LstK_InitEx); + Result:= Result and Assigned(LstK_MoveNext); + Result:= Result and Assigned(LstK_MoveReset); + Result:= Result and Assigned(LstK_Sync); + Result:= Result and Assigned(OvlK_Acquire); + Result:= Result and Assigned(OvlK_Free); + Result:= Result and Assigned(OvlK_GetEventHandle); + Result:= Result and Assigned(OvlK_Init); + Result:= Result and Assigned(OvlK_IsComplete); + Result:= Result and Assigned(OvlK_ReUse); + Result:= Result and Assigned(OvlK_Release); + Result:= Result and Assigned(OvlK_Wait); + Result:= Result and Assigned(OvlK_WaitOldest); + Result:= Result and Assigned(OvlK_WaitAndRelease); + Result:= Result and Assigned(OvlK_WaitOrCancel); + Result:= Result and Assigned(StmK_Free); + Result:= Result and Assigned(StmK_Init); + Result:= Result and Assigned(StmK_Read); + Result:= Result and Assigned(StmK_Start); + Result:= Result and Assigned(StmK_Stop); + Result:= Result and Assigned(StmK_Write); + Result:= Result and Assigned(UsbK_AbortPipe); + Result:= Result and Assigned(UsbK_ClaimInterface); + Result:= Result and Assigned(UsbK_Clone); + Result:= Result and Assigned(UsbK_ControlTransfer); + Result:= Result and Assigned(UsbK_FlushPipe); + Result:= Result and Assigned(UsbK_Free); + Result:= Result and Assigned(UsbK_GetAltInterface); + Result:= Result and Assigned(UsbK_GetAssociatedInterface); + Result:= Result and Assigned(UsbK_GetConfiguration); + Result:= Result and Assigned(UsbK_GetCurrentAlternateSetting); + Result:= Result and Assigned(UsbK_GetCurrentFrameNumber); + Result:= Result and Assigned(UsbK_GetDescriptor); + Result:= Result and Assigned(UsbK_GetOverlappedResult); + Result:= Result and Assigned(UsbK_GetPipePolicy); + Result:= Result and Assigned(UsbK_GetPowerPolicy); + Result:= Result and Assigned(UsbK_GetProperty); + Result:= Result and Assigned(UsbK_Init); + Result:= Result and Assigned(UsbK_Initialize); + Result:= Result and Assigned(UsbK_IsoReadPipe); + Result:= Result and Assigned(UsbK_IsoWritePipe); + Result:= Result and Assigned(UsbK_QueryDeviceInformation); + Result:= Result and Assigned(UsbK_QueryInterfaceSettings); + Result:= Result and Assigned(UsbK_QueryPipe); + Result:= Result and Assigned(UsbK_ReadPipe); + Result:= Result and Assigned(UsbK_ReleaseInterface); + Result:= Result and Assigned(UsbK_ResetDevice); + Result:= Result and Assigned(UsbK_ResetPipe); + Result:= Result and Assigned(UsbK_SelectInterface); + Result:= Result and Assigned(UsbK_SetAltInterface); + Result:= Result and Assigned(UsbK_SetConfiguration); + Result:= Result and Assigned(UsbK_SetCurrentAlternateSetting); + Result:= Result and Assigned(UsbK_SetPipePolicy); + Result:= Result and Assigned(UsbK_SetPowerPolicy); + Result:= Result and Assigned(UsbK_WritePipe); + Result:= Result and Assigned(WinUsb_AbortPipe); + Result:= Result and Assigned(WinUsb_ControlTransfer); + Result:= Result and Assigned(WinUsb_FlushPipe); + Result:= Result and Assigned(WinUsb_Free); + Result:= Result and Assigned(WinUsb_GetAssociatedInterface); + Result:= Result and Assigned(WinUsb_GetCurrentAlternateSetting); + Result:= Result and Assigned(WinUsb_GetDescriptor); + Result:= Result and Assigned(WinUsb_GetOverlappedResult); + Result:= Result and Assigned(WinUsb_GetPipePolicy); + Result:= Result and Assigned(WinUsb_GetPowerPolicy); + Result:= Result and Assigned(WinUsb_Initialize); + Result:= Result and Assigned(WinUsb_QueryDeviceInformation); + Result:= Result and Assigned(WinUsb_QueryInterfaceSettings); + Result:= Result and Assigned(WinUsb_QueryPipe); + Result:= Result and Assigned(WinUsb_ReadPipe); + Result:= Result and Assigned(WinUsb_ResetPipe); + Result:= Result and Assigned(WinUsb_SetCurrentAlternateSetting); + Result:= Result and Assigned(WinUsb_SetPipePolicy); + Result:= Result and Assigned(WinUsb_SetPowerPolicy); + Result:= Result and Assigned(WinUsb_WritePipe); + end + else + begin + HotK_Init:= Nil; + HotK_Free:= Nil; + HotK_FreeAll:= Nil; + IsoK_EnumPackets:= Nil; + IsoK_Free:= Nil; + IsoK_GetPacket:= Nil; + IsoK_Init:= Nil; + IsoK_ReUse:= Nil; + IsoK_SetPacket:= Nil; + IsoK_SetPackets:= Nil; + LibK_CopyDriverAPI:= Nil; + LibK_GetContext:= Nil; + LibK_GetProcAddress:= Nil; + LibK_GetVersion:= Nil; + LibK_LoadDriverAPI:= Nil; + LibK_SetCleanupCallback:= Nil; + LibK_SetContext:= Nil; + LibK_SetDefaultContext:= Nil; + LibK_GetDefaultContext:= Nil; + LstK_AttachInfo:= Nil; + LstK_Clone:= Nil; + LstK_CloneInfo:= Nil; + LstK_Count:= Nil; + LstK_Current:= Nil; + LstK_DetachInfo:= Nil; + LstK_Enumerate:= Nil; + LstK_FindByVidPid:= Nil; + LstK_Free:= Nil; + LstK_FreeInfo:= Nil; + LstK_Init:= Nil; + LstK_InitEx:= Nil; + LstK_MoveNext:= Nil; + LstK_MoveReset:= Nil; + LstK_Sync:= Nil; + OvlK_Acquire:= Nil; + OvlK_Free:= Nil; + OvlK_GetEventHandle:= Nil; + OvlK_Init:= Nil; + OvlK_IsComplete:= Nil; + OvlK_ReUse:= Nil; + OvlK_Release:= Nil; + OvlK_Wait:= Nil; + OvlK_WaitOldest:= Nil; + OvlK_WaitAndRelease:= Nil; + OvlK_WaitOrCancel:= Nil; + StmK_Free:= Nil; + StmK_Init:= Nil; + StmK_Read:= Nil; + StmK_Start:= Nil; + StmK_Stop:= Nil; + StmK_Write:= Nil; + UsbK_AbortPipe:= Nil; + UsbK_ClaimInterface:= Nil; + UsbK_Clone:= Nil; + UsbK_ControlTransfer:= Nil; + UsbK_FlushPipe:= Nil; + UsbK_Free:= Nil; + UsbK_GetAltInterface:= Nil; + UsbK_GetAssociatedInterface:= Nil; + UsbK_GetConfiguration:= Nil; + UsbK_GetCurrentAlternateSetting:= Nil; + UsbK_GetCurrentFrameNumber:= Nil; + UsbK_GetDescriptor:= Nil; + UsbK_GetOverlappedResult:= Nil; + UsbK_GetPipePolicy:= Nil; + UsbK_GetPowerPolicy:= Nil; + UsbK_GetProperty:= Nil; + UsbK_Init:= Nil; + UsbK_Initialize:= Nil; + UsbK_IsoReadPipe:= Nil; + UsbK_IsoWritePipe:= Nil; + UsbK_QueryDeviceInformation:= Nil; + UsbK_QueryInterfaceSettings:= Nil; + UsbK_QueryPipe:= Nil; + UsbK_ReadPipe:= Nil; + UsbK_ReleaseInterface:= Nil; + UsbK_ResetDevice:= Nil; + UsbK_ResetPipe:= Nil; + UsbK_SelectInterface:= Nil; + UsbK_SetAltInterface:= Nil; + UsbK_SetConfiguration:= Nil; + UsbK_SetCurrentAlternateSetting:= Nil; + UsbK_SetPipePolicy:= Nil; + UsbK_SetPowerPolicy:= Nil; + UsbK_WritePipe:= Nil; + WinUsb_AbortPipe:= Nil; + WinUsb_ControlTransfer:= Nil; + WinUsb_FlushPipe:= Nil; + WinUsb_Free:= Nil; + WinUsb_GetAssociatedInterface:= Nil; + WinUsb_GetCurrentAlternateSetting:= Nil; + WinUsb_GetDescriptor:= Nil; + WinUsb_GetOverlappedResult:= Nil; + WinUsb_GetPipePolicy:= Nil; + WinUsb_GetPowerPolicy:= Nil; + WinUsb_Initialize:= Nil; + WinUsb_QueryDeviceInformation:= Nil; + WinUsb_QueryInterfaceSettings:= Nil; + WinUsb_QueryPipe:= Nil; + WinUsb_ReadPipe:= Nil; + WinUsb_ResetPipe:= Nil; + WinUsb_SetCurrentAlternateSetting:= Nil; + WinUsb_SetPipePolicy:= Nil; + WinUsb_SetPowerPolicy:= Nil; + WinUsb_WritePipe:= Nil; + end; + {$ELSE} + Result:= True; + {$ENDIF} + end; + + procedure DoneDllImport; + begin + {$IFDEF DynamicLink} + if DllAvailable then + FreeLibrary(HLIBUSBKDll); + {$ENDIF} + end; + +initialization + + {$IFDEF DynamicLink} + DllAvailable:= InitDllImport; + {$ELSE} + // Anyway the program will not start if the DLL is not available + DllAvailable:= True; + {$ENDIF} + // Delphi will show a Breakpoint if Assert violates, if no violation is + // detected by the compiler, the linker will eliminate the calls + Assert((SizeOf(WINUSB_PIPE_INFORMATION) = 12), + 'WINUSB_PIPE_INFORMATION size violation'); + Assert((SizeOf(WINUSB_SETUP_PACKET) = 8), + 'WINUSB_SETUP_PACKET size violation'); + Assert((SizeOf(KISO_CONTEXT) = 16), 'KISO_CONTEXT size violation'); + Assert((SizeOf(KUSB_DRIVER_API) = 512), 'KUSB_DRIVER_API size violation'); + Assert((SizeOf(KSTM_CALLBACK) = 64), 'KSTM_CALLBACK size violation'); + Assert((SizeOf(KLST_PATTERN_MATCH) = 1024), + 'KLST_PATTERN_MATCH size violation'); + Assert((SizeOf(KHOT_PARAMS) = 2048), 'KHOT_PARAMS size violation'); + +finalization + + {$IFDEF DynamicLink} + DoneDllImport; + {$ENDIF} + +end. diff --git a/Old Matlab Interface/bindings/libusbK.vb b/Old Matlab Interface/bindings/libusbK.vb new file mode 100644 index 00000000..906db7fc --- /dev/null +++ b/Old Matlab Interface/bindings/libusbK.vb @@ -0,0 +1,3513 @@ +#Region "Copyright (c) Travis Robinson" + +' Copyright (c) 2012 Travis Robinson +' All rights reserved. +' +' C# libusbK Bindings +' Auto-generated on: 04.28.2011 +' +' 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. +' +' 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 TRAVIS LEE ROBINSON +' 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. + +#End Region + +Imports System +Imports System.Diagnostics +Imports System.Runtime.InteropServices + +' ReSharper disable InconsistentNaming +' ReSharper disable CheckNamespace +' ReSharper disable UnassignedReadonlyField + +Namespace libusbK + Public NotInheritable Class AllKOptions + Private Sub New() + End Sub + #Region "Public Members" + + ''' + ''' Alternate libusbK library to use. This must be assigned before any libusbK functions are called and it must be the full path and file name to a libusbK.dll. + ''' + Public Shared LIBUSBK_FULLPATH_TO_ALTERNATE_DLL As String + + #End Region + End Class + + Public NotInheritable Class AllKConstants + Private Sub New() + End Sub + #Region "Public Members" + + ''' + ''' Allocated length for all strings in a \ref KLST_DEVINFO structure. + ''' + Public Const KLST_STRING_MAX_LEN As Integer = 256 + + ''' + ''' libusbK library + ''' + Public Const LIBUSBK_DLL As String = "libusbK.dll" + + ''' + ''' Config power mask for the \c bmAttributes field of a \ref USB_CONFIGURATION_DESCRIPTOR + ''' + Public Const USB_CONFIG_POWERED_MASK As Byte = &Hc0 + + ''' + ''' Endpoint address mask for the \c bEndpointAddress field of a \ref USB_ENDPOINT_DESCRIPTOR + ''' + Public Const USB_ENDPOINT_ADDRESS_MASK As Byte = &Hf + + ''' + ''' Endpoint direction mask for the \c bEndpointAddress field of a \ref USB_ENDPOINT_DESCRIPTOR + ''' + Public Const USB_ENDPOINT_DIRECTION_MASK As Byte = &H80 + + #End Region + End Class + + Public Enum PipePolicyType + SHORT_PACKET_TERMINATE = &H1 + AUTO_CLEAR_STALL = &H2 + PIPE_TRANSFER_TIMEOUT = &H3 + IGNORE_SHORT_PACKETS = &H4 + ALLOW_PARTIAL_READS = &H5 + AUTO_FLUSH = &H6 + RAW_IO = &H7 + MAXIMUM_TRANSFER_SIZE = &H8 + RESET_PIPE_ON_RESUME = &H9 + + ISO_START_LATENCY = &H20 + ISO_ALWAYS_START_ASAP = &H21 + ISO_NUM_FIXED_PACKETS = &H22 + + SIMUL_PARALLEL_REQUESTS = &H30 + End Enum + + Public Enum PowerPolicyType + AUTO_SUSPEND = &H81 + SUSPEND_DELAY = &H83 + End Enum + + Public Enum DeviceInformationType + DEVICE_SPEED = &H1 + End Enum + + Public Enum EndpointType + ''' + ''' Indicates a control endpoint + ''' + CONTROL = &H0 + + ''' + ''' Indicates an isochronous endpoint + ''' + ISOCHRONOUS = &H1 + + ''' + ''' Indicates a bulk endpoint + ''' + BULK = &H2 + + ''' + ''' Indicates an interrupt endpoint + ''' + INTERRUPT = &H3 + + ''' + ''' Endpoint type mask for the \c bmAttributes field of a \ref USB_ENDPOINT_DESCRIPTOR + ''' + MASK = &H3 + End Enum + + Public NotInheritable Class ErrorCodes + Private Sub New() + End Sub + #Region "Public Members" + + ''' + ''' Access is denied. + ''' + Public Const AccessDenied As Integer = 5 + + ''' + ''' The requested resource is in use. + ''' + Public Const Busy As Integer = 170 + + ''' + ''' The operation was canceled by the user. + ''' + Public Const Cancelled As Integer = 1223 + + ''' + ''' The library, drive, or media pool is empty. + ''' + Public Const Empty As Integer = 4306 + + ''' + ''' The handle is invalid. + ''' + Public Const InvalidHandle As Integer = 6 + + ''' + ''' The parameter is incorrect. + ''' + Public Const InvalidParameter As Integer = 87 + + ''' + ''' Overlapped I/O event is not in a signaled state. + ''' + Public Const IoIncomplete As Integer = 996 + + ''' + ''' Overlapped I/O operation is in progress. + ''' + Public Const IoPending As Integer = 997 + + ''' + ''' More data is available. + ''' + Public Const MoreData As Integer = 234 + + ''' + ''' No more data is available. + ''' + Public Const NoMoreItems As Integer = 259 + + ''' + ''' Not enough storage is available to process this command. + ''' + Public Const NotEnoughMemory As Integer = 8 + + ''' + ''' Element not found. + ''' + Public Const NotFound As Integer = 1168 + + ''' + ''' The request is not supported. + ''' + Public Const NotSupported As Integer = 50 + + ''' + ''' The I/O operation has been aborted because of either a thread exit or an application request. + ''' + Public Const OperationAborted As Integer = 995 + + ''' + ''' The cluster resource is not available. + ''' + Public Const ResourceNotAvailable As Integer = 5006 + + ''' + ''' The cluster resource could not be found. + ''' + Public Const ResourceNotFound As Integer = 5007 + + ''' + ''' The semaphore timeout period has expired. + ''' + Public Const SemTimeout As Integer = 121 + + ''' + ''' The operation completed successfully. + ''' + Public Const Success As Integer = 0 + + ''' + ''' An attempt was made to operate on a thread within a specific process, but the thread specified is not in the process specified. + ''' + Public Const ThreadNotInProcess As Integer = 566 + + ''' + ''' A thread termination occurred while the thread was suspended. The thread was resumed, and termination proceeded. + ''' + Public Const ThreadWasSuspended As Integer = 699 + + ''' + ''' Too many dynamic-link modules are attached to this program or dynamic-link module. + ''' + Public Const TooManyModules As Integer = 214 + + #End Region + End Class + + Public Interface IKLIB_HANDLE + #Region "Public Members" + + Function GetContext() As IntPtr + ReadOnly Property HandleType() As KLIB_HANDLE_TYPE + ReadOnly Property Pointer() As IntPtr + Function SetCleanupCallback(CleanupCallback As KLIB_HANDLE_CLEANUP_CB) As Boolean + Function SetContext(UserContext As IntPtr) As Boolean + + #End Region + End Interface + + #Region "Opaque library handles" + + Public Structure KLST_HANDLE + Implements IKLIB_HANDLE + #Region "IKLIB_HANDLE Members" + + Public ReadOnly Property Pointer() As IntPtr Implements IKLIB_HANDLE.Pointer + Get + Return mHandlePtr + End Get + End Property + + Public ReadOnly Property HandleType() As KLIB_HANDLE_TYPE Implements IKLIB_HANDLE.HandleType + Get + Return KLIB_HANDLE_TYPE.LSTK + End Get + End Property + + Public Function GetContext() As IntPtr Implements IKLIB_HANDLE.GetContext + Return AllKFunctions.LibK_GetContext(mHandlePtr, HandleType) + End Function + + Public Function SetContext(UserContext As IntPtr) As Boolean Implements IKLIB_HANDLE.SetContext + Return AllKFunctions.LibK_SetContext(mHandlePtr, HandleType, UserContext) + End Function + + Public Function SetCleanupCallback(CleanupCallback As KLIB_HANDLE_CLEANUP_CB) As Boolean Implements IKLIB_HANDLE.SetCleanupCallback + Return AllKFunctions.LibK_SetCleanupCallback(mHandlePtr, HandleType, CleanupCallback) + End Function + + #End Region + + #Region "Public Members" + + Public Sub New(Handle As IntPtr) + mHandlePtr = Handle + End Sub + + #End Region + + #Region "Private Members" + + Private ReadOnly mHandlePtr As IntPtr + + #End Region + End Structure + + Public Structure KHOT_HANDLE + Implements IKLIB_HANDLE + #Region "IKLIB_HANDLE Members" + + Public ReadOnly Property Pointer() As IntPtr Implements IKLIB_HANDLE.Pointer + Get + Return mHandlePtr + End Get + End Property + + Public ReadOnly Property HandleType() As KLIB_HANDLE_TYPE Implements IKLIB_HANDLE.HandleType + Get + Return KLIB_HANDLE_TYPE.HOTK + End Get + End Property + + Public Function GetContext() As IntPtr Implements IKLIB_HANDLE.GetContext + Return AllKFunctions.LibK_GetContext(mHandlePtr, HandleType) + End Function + + Public Function SetContext(UserContext As IntPtr) As Boolean Implements IKLIB_HANDLE.SetContext + Return AllKFunctions.LibK_SetContext(mHandlePtr, HandleType, UserContext) + End Function + + Public Function SetCleanupCallback(CleanupCallback As KLIB_HANDLE_CLEANUP_CB) As Boolean Implements IKLIB_HANDLE.SetCleanupCallback + Return AllKFunctions.LibK_SetCleanupCallback(mHandlePtr, HandleType, CleanupCallback) + End Function + + #End Region + + #Region "Public Members" + + Public Sub New(Handle As IntPtr) + mHandlePtr = Handle + End Sub + + #End Region + + #Region "Private Members" + + Private ReadOnly mHandlePtr As IntPtr + + #End Region + End Structure + + Public Structure KUSB_HANDLE + Implements IKLIB_HANDLE + #Region "IKLIB_HANDLE Members" + + Public ReadOnly Property Pointer() As IntPtr Implements IKLIB_HANDLE.Pointer + Get + Return mHandlePtr + End Get + End Property + + Public ReadOnly Property HandleType() As KLIB_HANDLE_TYPE Implements IKLIB_HANDLE.HandleType + Get + Return KLIB_HANDLE_TYPE.USBK + End Get + End Property + + Public Function GetContext() As IntPtr Implements IKLIB_HANDLE.GetContext + Return AllKFunctions.LibK_GetContext(mHandlePtr, HandleType) + End Function + + Public Function SetContext(UserContext As IntPtr) As Boolean Implements IKLIB_HANDLE.SetContext + Return AllKFunctions.LibK_SetContext(mHandlePtr, HandleType, UserContext) + End Function + + Public Function SetCleanupCallback(CleanupCallback As KLIB_HANDLE_CLEANUP_CB) As Boolean Implements IKLIB_HANDLE.SetCleanupCallback + Return AllKFunctions.LibK_SetCleanupCallback(mHandlePtr, HandleType, CleanupCallback) + End Function + + #End Region + + #Region "USB Shared Device Context" + + Public Function GetSharedContext() As IntPtr + Return AllKFunctions.LibK_GetContext(mHandlePtr, KLIB_HANDLE_TYPE.USBSHAREDK) + End Function + + Public Function SetSharedCleanupCallback(CleanupCallback As KLIB_HANDLE_CLEANUP_CB) As Boolean + Return AllKFunctions.LibK_SetCleanupCallback(mHandlePtr, KLIB_HANDLE_TYPE.USBSHAREDK, CleanupCallback) + End Function + + Public Function SetSharedContext(UserContext As IntPtr) As Boolean + Return AllKFunctions.LibK_SetContext(mHandlePtr, KLIB_HANDLE_TYPE.USBSHAREDK, UserContext) + End Function + + #End Region + + #Region "Public Members" + + Public Sub New(Handle As IntPtr) + mHandlePtr = Handle + End Sub + + #End Region + + #Region "Private Members" + + Private ReadOnly mHandlePtr As IntPtr + + #End Region + End Structure + + Public Structure KOVL_POOL_HANDLE + Implements IKLIB_HANDLE + #Region "IKLIB_HANDLE Members" + + Public ReadOnly Property Pointer() As IntPtr Implements IKLIB_HANDLE.Pointer + Get + Return mHandlePtr + End Get + End Property + + Public ReadOnly Property HandleType() As KLIB_HANDLE_TYPE Implements IKLIB_HANDLE.HandleType + Get + Return KLIB_HANDLE_TYPE.OVLPOOLK + End Get + End Property + + Public Function GetContext() As IntPtr Implements IKLIB_HANDLE.GetContext + Return AllKFunctions.LibK_GetContext(mHandlePtr, HandleType) + End Function + + Public Function SetContext(UserContext As IntPtr) As Boolean Implements IKLIB_HANDLE.SetContext + Return AllKFunctions.LibK_SetContext(mHandlePtr, HandleType, UserContext) + End Function + + Public Function SetCleanupCallback(CleanupCallback As KLIB_HANDLE_CLEANUP_CB) As Boolean Implements IKLIB_HANDLE.SetCleanupCallback + Return AllKFunctions.LibK_SetCleanupCallback(mHandlePtr, HandleType, CleanupCallback) + End Function + + #End Region + + #Region "Public Members" + + Public Sub New(Handle As IntPtr) + mHandlePtr = Handle + End Sub + + #End Region + + #Region "Private Members" + + Private ReadOnly mHandlePtr As IntPtr + + #End Region + End Structure + + Public Structure KOVL_HANDLE + Implements IKLIB_HANDLE + #Region "IKLIB_HANDLE Members" + + Public ReadOnly Property Pointer() As IntPtr Implements IKLIB_HANDLE.Pointer + Get + Return mHandlePtr + End Get + End Property + + Public ReadOnly Property HandleType() As KLIB_HANDLE_TYPE Implements IKLIB_HANDLE.HandleType + Get + Return KLIB_HANDLE_TYPE.OVLK + End Get + End Property + + Public Function GetContext() As IntPtr Implements IKLIB_HANDLE.GetContext + Return AllKFunctions.LibK_GetContext(mHandlePtr, HandleType) + End Function + + Public Function SetContext(UserContext As IntPtr) As Boolean Implements IKLIB_HANDLE.SetContext + Return AllKFunctions.LibK_SetContext(mHandlePtr, HandleType, UserContext) + End Function + + Public Function SetCleanupCallback(CleanupCallback As KLIB_HANDLE_CLEANUP_CB) As Boolean Implements IKLIB_HANDLE.SetCleanupCallback + Return AllKFunctions.LibK_SetCleanupCallback(mHandlePtr, HandleType, CleanupCallback) + End Function + + #End Region + + #Region "Public Members" + + Public Sub New(Handle As IntPtr) + mHandlePtr = Handle + End Sub + + #End Region + + #Region "Private Members" + + Private ReadOnly mHandlePtr As IntPtr + + #End Region + End Structure + + Public Structure KSTM_HANDLE + Implements IKLIB_HANDLE + #Region "IKLIB_HANDLE Members" + + Public ReadOnly Property Pointer() As IntPtr Implements IKLIB_HANDLE.Pointer + Get + Return mHandlePtr + End Get + End Property + + Public ReadOnly Property HandleType() As KLIB_HANDLE_TYPE Implements IKLIB_HANDLE.HandleType + Get + Return KLIB_HANDLE_TYPE.STMK + End Get + End Property + + Public Function GetContext() As IntPtr Implements IKLIB_HANDLE.GetContext + Return AllKFunctions.LibK_GetContext(mHandlePtr, HandleType) + End Function + + Public Function SetContext(UserContext As IntPtr) As Boolean Implements IKLIB_HANDLE.SetContext + Return AllKFunctions.LibK_SetContext(mHandlePtr, HandleType, UserContext) + End Function + + Public Function SetCleanupCallback(CleanupCallback As KLIB_HANDLE_CLEANUP_CB) As Boolean Implements IKLIB_HANDLE.SetCleanupCallback + Return AllKFunctions.LibK_SetCleanupCallback(mHandlePtr, HandleType, CleanupCallback) + End Function + + #End Region + + #Region "Public Members" + + Public Sub New(Handle As IntPtr) + mHandlePtr = Handle + End Sub + + #End Region + + #Region "Private Members" + + Private ReadOnly mHandlePtr As IntPtr + + #End Region + End Structure + + #End Region + + #Region "Internal Function Imports" + + Friend NotInheritable Class AllKFunctions + Private Sub New() + End Sub + #Region "Delegates" + + _ + Public Delegate Sub HotK_FreeAllDelegate() + + _ + Public Delegate Function HotK_FreeDelegate(<[In]> Handle As KHOT_HANDLE) As Boolean + + _ + Public Delegate Function HotK_InitDelegate( ByRef Handle As KHOT_HANDLE, <[In], Out> ByRef InitParams As KHOT_PARAMS) As Boolean + + _ + Public Delegate Function IsoK_EnumPacketsDelegate(<[In]> IsoContext As KISO_CONTEXT, EnumPackets As KISO_ENUM_PACKETS_CB, StartPacketIndex As Integer, UserState As IntPtr) As Boolean + + _ + Public Delegate Function IsoK_FreeDelegate(<[In]> IsoContext As KISO_CONTEXT) As Boolean + + _ + Public Delegate Function IsoK_GetPacketDelegate(<[In]> IsoContext As KISO_CONTEXT, PacketIndex As Integer, ByRef IsoPacket As KISO_PACKET) As Boolean + + _ + Public Delegate Function IsoK_InitDelegate( ByRef IsoContext As KISO_CONTEXT, NumberOfPackets As Integer, StartFrame As Integer) As Boolean + + _ + Public Delegate Function IsoK_ReUseDelegate(<[In]> IsoContext As KISO_CONTEXT) As Boolean + + _ + Public Delegate Function IsoK_SetPacketDelegate(<[In]> IsoContext As KISO_CONTEXT, PacketIndex As Integer, <[In]> ByRef IsoPacket As KISO_PACKET) As Boolean + + _ + Public Delegate Function IsoK_SetPacketsDelegate(<[In]> IsoContext As KISO_CONTEXT, PacketSize As Integer) As Boolean + + _ + Public Delegate Sub LibK_Context_FreeDelegate() + + _ + Public Delegate Function LibK_Context_InitDelegate(Heap As IntPtr, Reserved As IntPtr) As Boolean + + _ + Public Delegate Function LibK_CopyDriverAPIDelegate( ByRef DriverAPI As KUSB_DRIVER_API, <[In]> UsbHandle As KUSB_HANDLE) As Boolean + + _ + Public Delegate Function LibK_GetContextDelegate(<[In]> Handle As IntPtr, HandleType As KLIB_HANDLE_TYPE) As IntPtr + + _ + Public Delegate Function LibK_GetDefaultContextDelegate(HandleType As KLIB_HANDLE_TYPE) As IntPtr + + _ + Public Delegate Function LibK_GetProcAddressDelegate(ProcAddress As IntPtr, DriverID As Integer, FunctionID As Integer) As Boolean + + _ + Public Delegate Sub LibK_GetVersionDelegate( ByRef Version As KLIB_VERSION) + + _ + Public Delegate Function LibK_LoadDriverAPIDelegate( ByRef DriverAPI As KUSB_DRIVER_API, DriverID As Integer) As Boolean + + _ + Public Delegate Function LibK_SetCleanupCallbackDelegate(<[In]> Handle As IntPtr, HandleType As KLIB_HANDLE_TYPE, CleanupCB As KLIB_HANDLE_CLEANUP_CB) As Boolean + + _ + Public Delegate Function LibK_SetContextDelegate(<[In]> Handle As IntPtr, HandleType As KLIB_HANDLE_TYPE, ContextValue As IntPtr) As Boolean + + _ + Public Delegate Function LibK_SetDefaultContextDelegate(HandleType As KLIB_HANDLE_TYPE, ContextValue As IntPtr) As Boolean + + _ + Public Delegate Function LstK_CountDelegate(<[In]> DeviceList As KLST_HANDLE, ByRef Count As Integer) As Boolean + + _ + Public Delegate Function LstK_CurrentDelegate(<[In]> DeviceList As KLST_HANDLE, ByRef DeviceInfo As KLST_DEVINFO_HANDLE) As Boolean + + _ + Public Delegate Function LstK_EnumerateDelegate(<[In]> DeviceList As KLST_HANDLE, EnumDevListCB As KLST_ENUM_DEVINFO_CB, Context As IntPtr) As Boolean + + _ + Public Delegate Function LstK_FindByVidPidDelegate(<[In]> DeviceList As KLST_HANDLE, Vid As Integer, Pid As Integer, ByRef DeviceInfo As KLST_DEVINFO_HANDLE) As Boolean + + _ + Public Delegate Function LstK_FreeDelegate(<[In]> DeviceList As KLST_HANDLE) As Boolean + + _ + Public Delegate Function LstK_InitDelegate( ByRef DeviceList As KLST_HANDLE, Flags As KLST_FLAG) As Boolean + + _ + Public Delegate Function LstK_InitExDelegate( ByRef DeviceList As KLST_HANDLE, Flags As KLST_FLAG, <[In]> ByRef PatternMatch As KLST_PATTERN_MATCH) As Boolean + + _ + Public Delegate Function LstK_MoveNextDelegate(<[In]> DeviceList As KLST_HANDLE, ByRef DeviceInfo As KLST_DEVINFO_HANDLE) As Boolean + + _ + Public Delegate Sub LstK_MoveResetDelegate(<[In]> DeviceList As KLST_HANDLE) + + _ + Public Delegate Function OvlK_AcquireDelegate( ByRef OverlappedK As KOVL_HANDLE, <[In]> PoolHandle As KOVL_POOL_HANDLE) As Boolean + + _ + Public Delegate Function OvlK_FreeDelegate(<[In]> PoolHandle As KOVL_POOL_HANDLE) As Boolean + + _ + Public Delegate Function OvlK_GetEventHandleDelegate(<[In]> OverlappedK As KOVL_HANDLE) As IntPtr + + _ + Public Delegate Function OvlK_InitDelegate( ByRef PoolHandle As KOVL_POOL_HANDLE, <[In]> UsbHandle As KUSB_HANDLE, MaxOverlappedCount As Integer, Flags As KOVL_POOL_FLAG) As Boolean + + _ + Public Delegate Function OvlK_IsCompleteDelegate(<[In]> OverlappedK As KOVL_HANDLE) As Boolean + + _ + Public Delegate Function OvlK_ReUseDelegate(<[In]> OverlappedK As KOVL_HANDLE) As Boolean + + _ + Public Delegate Function OvlK_ReleaseDelegate(<[In]> OverlappedK As KOVL_HANDLE) As Boolean + + _ + Public Delegate Function OvlK_WaitAndReleaseDelegate(<[In]> OverlappedK As KOVL_HANDLE, TimeoutMS As Integer, ByRef TransferredLength As Integer) As Boolean + + _ + Public Delegate Function OvlK_WaitDelegate(<[In]> OverlappedK As KOVL_HANDLE, TimeoutMS As Integer, WaitFlags As KOVL_WAIT_FLAG, ByRef TransferredLength As Integer) As Boolean + + _ + Public Delegate Function OvlK_WaitOldestDelegate(<[In]> PoolHandle As KOVL_POOL_HANDLE, ByRef OverlappedK As KOVL_HANDLE, TimeoutMS As Integer, WaitFlags As KOVL_WAIT_FLAG, ByRef TransferredLength As Integer) As Boolean + + _ + Public Delegate Function OvlK_WaitOrCancelDelegate(<[In]> OverlappedK As KOVL_HANDLE, TimeoutMS As Integer, ByRef TransferredLength As Integer) As Boolean + + _ + Public Delegate Function StmK_FreeDelegate(<[In]> StreamHandle As KSTM_HANDLE) As Boolean + + _ + Public Delegate Function StmK_InitDelegate( ByRef StreamHandle As KSTM_HANDLE, <[In]> UsbHandle As KUSB_HANDLE, PipeID As Byte, MaxTransferSize As Integer, MaxPendingTransfers As Integer, MaxPendingIO As Integer, _ + <[In]> ByRef Callbacks As KSTM_CALLBACK, Flags As KSTM_FLAG) As Boolean + + _ + Public Delegate Function StmK_ReadDelegate(<[In]> StreamHandle As KSTM_HANDLE, Buffer As IntPtr, Offset As Integer, Length As Integer, ByRef TransferredLength As Integer) As Boolean + + _ + Public Delegate Function StmK_StartDelegate(<[In]> StreamHandle As KSTM_HANDLE) As Boolean + + _ + Public Delegate Function StmK_StopDelegate(<[In]> StreamHandle As KSTM_HANDLE, TimeoutCancelMS As Integer) As Boolean + + _ + Public Delegate Function StmK_WriteDelegate(<[In]> StreamHandle As KSTM_HANDLE, Buffer As IntPtr, Offset As Integer, Length As Integer, ByRef TransferredLength As Integer) As Boolean + + _ + Public Delegate Function UsbK_FreeDelegate(<[In]> InterfaceHandle As KUSB_HANDLE) As Boolean + + #End Region + + Shared Sub New() + If [String].IsNullOrEmpty(AllKOptions.LIBUSBK_FULLPATH_TO_ALTERNATE_DLL) Then + mModuleLibusbK = LoadLibraryEx(AllKConstants.LIBUSBK_DLL, IntPtr.Zero, LoadLibraryFlags.NONE) + Else + mModuleLibusbK = LoadLibraryEx(AllKOptions.LIBUSBK_FULLPATH_TO_ALTERNATE_DLL, IntPtr.Zero, LoadLibraryFlags.LOAD_WITH_ALTERED_SEARCH_PATH) + End If + + If mModuleLibusbK = IntPtr.Zero Then + Throw New DllNotFoundException("libusbK.dll not found. Please install drivers/applications and retry.") + End If + + LoadDynamicFunctions() + End Sub + + #Region "Nested Enumerations" + + _ + Private Enum LoadLibraryFlags + NONE = 0 + DONT_RESOLVE_DLL_REFERENCES = &H1 + LOAD_IGNORE_CODE_AUTHZ_LEVEL = &H10 + LOAD_LIBRARY_AS_DATAFILE = &H2 + LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE = &H40 + LOAD_LIBRARY_AS_IMAGE_RESOURCE = &H20 + LOAD_WITH_ALTERED_SEARCH_PATH = &H8 + End Enum + + #End Region + + #Region "Public Members" + + Public Shared HotK_Free As HotK_FreeDelegate + Public Shared HotK_FreeAll As HotK_FreeAllDelegate + Public Shared HotK_Init As HotK_InitDelegate + Public Shared IsoK_EnumPackets As IsoK_EnumPacketsDelegate + Public Shared IsoK_Free As IsoK_FreeDelegate + Public Shared IsoK_GetPacket As IsoK_GetPacketDelegate + Public Shared IsoK_Init As IsoK_InitDelegate + Public Shared IsoK_ReUse As IsoK_ReUseDelegate + Public Shared IsoK_SetPacket As IsoK_SetPacketDelegate + Public Shared IsoK_SetPackets As IsoK_SetPacketsDelegate + Public Shared LibK_Context_Free As LibK_Context_FreeDelegate + Public Shared LibK_Context_Init As LibK_Context_InitDelegate + + Public Shared LibK_CopyDriverAPI As LibK_CopyDriverAPIDelegate + Public Shared LibK_GetContext As LibK_GetContextDelegate + Public Shared LibK_GetDefaultContext As LibK_GetDefaultContextDelegate + Public Shared LibK_GetProcAddress As LibK_GetProcAddressDelegate + Public Shared LibK_GetVersion As LibK_GetVersionDelegate + Public Shared LibK_LoadDriverAPI As LibK_LoadDriverAPIDelegate + Public Shared LibK_SetCleanupCallback As LibK_SetCleanupCallbackDelegate + Public Shared LibK_SetContext As LibK_SetContextDelegate + Public Shared LibK_SetDefaultContext As LibK_SetDefaultContextDelegate + Public Shared LstK_Count As LstK_CountDelegate + Public Shared LstK_Current As LstK_CurrentDelegate + Public Shared LstK_Enumerate As LstK_EnumerateDelegate + Public Shared LstK_FindByVidPid As LstK_FindByVidPidDelegate + Public Shared LstK_Free As LstK_FreeDelegate + Public Shared LstK_Init As LstK_InitDelegate + Public Shared LstK_InitEx As LstK_InitExDelegate + Public Shared LstK_MoveNext As LstK_MoveNextDelegate + Public Shared LstK_MoveReset As LstK_MoveResetDelegate + Public Shared OvlK_Acquire As OvlK_AcquireDelegate + Public Shared OvlK_Free As OvlK_FreeDelegate + Public Shared OvlK_GetEventHandle As OvlK_GetEventHandleDelegate + Public Shared OvlK_Init As OvlK_InitDelegate + Public Shared OvlK_IsComplete As OvlK_IsCompleteDelegate + Public Shared OvlK_ReUse As OvlK_ReUseDelegate + Public Shared OvlK_Release As OvlK_ReleaseDelegate + Public Shared OvlK_Wait As OvlK_WaitDelegate + Public Shared OvlK_WaitAndRelease As OvlK_WaitAndReleaseDelegate + Public Shared OvlK_WaitOldest As OvlK_WaitOldestDelegate + Public Shared OvlK_WaitOrCancel As OvlK_WaitOrCancelDelegate + Public Shared StmK_Free As StmK_FreeDelegate + Public Shared StmK_Init As StmK_InitDelegate + Public Shared StmK_Read As StmK_ReadDelegate + Public Shared StmK_Start As StmK_StartDelegate + Public Shared StmK_Stop As StmK_StopDelegate + Public Shared StmK_Write As StmK_WriteDelegate + Public Shared UsbK_Free As UsbK_FreeDelegate + + #End Region + + #Region "Private Members" + + Private Declare Ansi Function GetProcAddress Lib "kernel32.dll" (hModule As IntPtr, procName As String) As IntPtr + + Private Shared Sub LoadDynamicFunctions() + LibK_GetVersion = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "LibK_GetVersion"), GetType(LibK_GetVersionDelegate)), LibK_GetVersionDelegate) + LibK_GetContext = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "LibK_GetContext"), GetType(LibK_GetContextDelegate)), LibK_GetContextDelegate) + LibK_SetContext = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "LibK_SetContext"), GetType(LibK_SetContextDelegate)), LibK_SetContextDelegate) + LibK_SetCleanupCallback = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "LibK_SetCleanupCallback"), GetType(LibK_SetCleanupCallbackDelegate)), LibK_SetCleanupCallbackDelegate) + LibK_LoadDriverAPI = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "LibK_LoadDriverAPI"), GetType(LibK_LoadDriverAPIDelegate)), LibK_LoadDriverAPIDelegate) + LibK_CopyDriverAPI = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "LibK_CopyDriverAPI"), GetType(LibK_CopyDriverAPIDelegate)), LibK_CopyDriverAPIDelegate) + LibK_GetProcAddress = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "LibK_GetProcAddress"), GetType(LibK_GetProcAddressDelegate)), LibK_GetProcAddressDelegate) + LibK_SetDefaultContext = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "LibK_SetDefaultContext"), GetType(LibK_SetDefaultContextDelegate)), LibK_SetDefaultContextDelegate) + LibK_GetDefaultContext = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "LibK_GetDefaultContext"), GetType(LibK_GetDefaultContextDelegate)), LibK_GetDefaultContextDelegate) + LibK_Context_Init = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "LibK_Context_Init"), GetType(LibK_Context_InitDelegate)), LibK_Context_InitDelegate) + LibK_Context_Free = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "LibK_Context_Free"), GetType(LibK_Context_FreeDelegate)), LibK_Context_FreeDelegate) + UsbK_Free = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "UsbK_Free"), GetType(UsbK_FreeDelegate)), UsbK_FreeDelegate) + LstK_Init = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "LstK_Init"), GetType(LstK_InitDelegate)), LstK_InitDelegate) + LstK_InitEx = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "LstK_InitEx"), GetType(LstK_InitExDelegate)), LstK_InitExDelegate) + LstK_Free = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "LstK_Free"), GetType(LstK_FreeDelegate)), LstK_FreeDelegate) + LstK_Enumerate = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "LstK_Enumerate"), GetType(LstK_EnumerateDelegate)), LstK_EnumerateDelegate) + LstK_Current = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "LstK_Current"), GetType(LstK_CurrentDelegate)), LstK_CurrentDelegate) + LstK_MoveNext = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "LstK_MoveNext"), GetType(LstK_MoveNextDelegate)), LstK_MoveNextDelegate) + LstK_MoveReset = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "LstK_MoveReset"), GetType(LstK_MoveResetDelegate)), LstK_MoveResetDelegate) + LstK_FindByVidPid = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "LstK_FindByVidPid"), GetType(LstK_FindByVidPidDelegate)), LstK_FindByVidPidDelegate) + LstK_Count = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "LstK_Count"), GetType(LstK_CountDelegate)), LstK_CountDelegate) + HotK_Init = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "HotK_Init"), GetType(HotK_InitDelegate)), HotK_InitDelegate) + HotK_Free = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "HotK_Free"), GetType(HotK_FreeDelegate)), HotK_FreeDelegate) + HotK_FreeAll = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "HotK_FreeAll"), GetType(HotK_FreeAllDelegate)), HotK_FreeAllDelegate) + OvlK_Acquire = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "OvlK_Acquire"), GetType(OvlK_AcquireDelegate)), OvlK_AcquireDelegate) + OvlK_Release = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "OvlK_Release"), GetType(OvlK_ReleaseDelegate)), OvlK_ReleaseDelegate) + OvlK_Init = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "OvlK_Init"), GetType(OvlK_InitDelegate)), OvlK_InitDelegate) + OvlK_Free = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "OvlK_Free"), GetType(OvlK_FreeDelegate)), OvlK_FreeDelegate) + OvlK_GetEventHandle = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "OvlK_GetEventHandle"), GetType(OvlK_GetEventHandleDelegate)), OvlK_GetEventHandleDelegate) + OvlK_Wait = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "OvlK_Wait"), GetType(OvlK_WaitDelegate)), OvlK_WaitDelegate) + OvlK_WaitOldest = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "OvlK_WaitOldest"), GetType(OvlK_WaitOldestDelegate)), OvlK_WaitOldestDelegate) + OvlK_WaitOrCancel = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "OvlK_WaitOrCancel"), GetType(OvlK_WaitOrCancelDelegate)), OvlK_WaitOrCancelDelegate) + OvlK_WaitAndRelease = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "OvlK_WaitAndRelease"), GetType(OvlK_WaitAndReleaseDelegate)), OvlK_WaitAndReleaseDelegate) + OvlK_IsComplete = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "OvlK_IsComplete"), GetType(OvlK_IsCompleteDelegate)), OvlK_IsCompleteDelegate) + OvlK_ReUse = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "OvlK_ReUse"), GetType(OvlK_ReUseDelegate)), OvlK_ReUseDelegate) + StmK_Init = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "StmK_Init"), GetType(StmK_InitDelegate)), StmK_InitDelegate) + StmK_Free = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "StmK_Free"), GetType(StmK_FreeDelegate)), StmK_FreeDelegate) + StmK_Start = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "StmK_Start"), GetType(StmK_StartDelegate)), StmK_StartDelegate) + StmK_Stop = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "StmK_Stop"), GetType(StmK_StopDelegate)), StmK_StopDelegate) + StmK_Read = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "StmK_Read"), GetType(StmK_ReadDelegate)), StmK_ReadDelegate) + StmK_Write = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "StmK_Write"), GetType(StmK_WriteDelegate)), StmK_WriteDelegate) + IsoK_Init = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "IsoK_Init"), GetType(IsoK_InitDelegate)), IsoK_InitDelegate) + IsoK_Free = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "IsoK_Free"), GetType(IsoK_FreeDelegate)), IsoK_FreeDelegate) + IsoK_SetPackets = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "IsoK_SetPackets"), GetType(IsoK_SetPacketsDelegate)), IsoK_SetPacketsDelegate) + IsoK_SetPacket = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "IsoK_SetPacket"), GetType(IsoK_SetPacketDelegate)), IsoK_SetPacketDelegate) + IsoK_GetPacket = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "IsoK_GetPacket"), GetType(IsoK_GetPacketDelegate)), IsoK_GetPacketDelegate) + IsoK_EnumPackets = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "IsoK_EnumPackets"), GetType(IsoK_EnumPacketsDelegate)), IsoK_EnumPacketsDelegate) + IsoK_ReUse = DirectCast(Marshal.GetDelegateForFunctionPointer(GetProcAddress(mModuleLibusbK, "IsoK_ReUse"), GetType(IsoK_ReUseDelegate)), IsoK_ReUseDelegate) + End Sub + + _ + Private Shared Function LoadLibraryEx(lpFileName As String, hReservedNull As IntPtr, dwFlags As LoadLibraryFlags) As IntPtr + End Function + + Private Shared ReadOnly mModuleLibusbK As IntPtr = IntPtr.Zero + + #End Region + End Class + + #End Region + + #Region "Enumerations" + + ''' Values used in the \c bmAttributes field of a \ref USB_ENDPOINT_DESCRIPTOR + Public Enum USBD_PIPE_TYPE + ''' Indicates a control endpoint + UsbdPipeTypeControl + + ''' Indicates an isochronous endpoint + UsbdPipeTypeIsochronous + + ''' Indicates a bulk endpoint + UsbdPipeTypeBulk + + ''' Indicates an interrupt endpoint + UsbdPipeTypeInterrupt + End Enum + + ''' Additional ISO transfer flags. + _ + Public Enum KISO_FLAG + NONE = 0 + + ''' Do not start the transfer immediately, instead use \ref KISO_CONTEXT::StartFrame. + SET_START_FRAME = &H1 + End Enum + + ''' Handle type enumeration. + Public Enum KLIB_HANDLE_TYPE + ''' Hot plug handle. \ref KHOT_HANDLE + HOTK + + ''' USB handle. \ref KUSB_HANDLE + USBK + + ''' Shared USB handle. \ref KUSB_HANDLE + USBSHAREDK + + ''' Device list handle. \ref KLST_HANDLE + LSTK + + ''' Device info handle. \ref KLST_DEVINFO_HANDLE + LSTINFOK + + ''' Overlapped handle. \ref KOVL_HANDLE + OVLK + + ''' Overlapped pool handle. \ref KOVL_POOL_HANDLE + OVLPOOLK + + ''' Pipe stream handle. \ref KSTM_HANDLE + STMK + + ''' Max handle type count. + COUNT + End Enum + + ''' Device list sync flags. + _ + Public Enum KLST_SYNC_FLAG + ''' Cleared/invalid state. + NONE = 0 + + ''' Unchanged state, + UNCHANGED = &H1 + + ''' Added (Arrival) state, + ADDED = &H2 + + ''' Removed (Unplugged) state, + REMOVED = &H4 + + ''' Connect changed state. + CONNECT_CHANGE = &H8 + + ''' All states. + MASK = &Hf + End Enum + + ''' Device list initialization flags. + _ + Public Enum KLST_FLAG + ''' No flags (or 0) + NONE = 0 + + ''' Enable listings for the raw device interface GUID \b only. {A5DCBF10-6530-11D2-901F-00C04FB951ED} + INCLUDE_RAWGUID = &H1 + + ''' List all libusbK devices including those not currently connected. + INCLUDE_DISCONNECT = &H2 + End Enum + + ''' bmRequest.Dir + Public Enum BMREQUEST_DIR + HOST_TO_DEVICE = 0 + DEVICE_TO_HOST = 1 + End Enum + + ''' bmRequest.Type + Public Enum BMREQUEST_TYPE + ''' Standard request. See \ref USB_REQUEST_ENUM + STANDARD = 0 + + ''' Class-specific request. + [CLASS] = 1 + + ''' Vendor-specific request + VENDOR = 2 + End Enum + + ''' bmRequest.Recipient + Public Enum BMREQUEST_RECIPIENT + ''' Request is for a device. + DEVICE = 0 + + ''' Request is for an interface of a device. + [INTERFACE] = 1 + + ''' Request is for an endpoint of a device. + ENDPOINT = 2 + + ''' Request is for a vendor-specific purpose. + OTHER = 3 + End Enum + + ''' Values for the bits returned by the \ref USB_REQUEST_GET_STATUS request. + Public Enum USB_GETSTATUS + ''' Device is self powered + SELF_POWERED = &H1 + + ''' Device can wake the system from a low power/sleeping state. + REMOTE_WAKEUP_ENABLED = &H2 + End Enum + + ''' Standard USB descriptor types. For more information, see section 9-5 of the USB 3.0 specifications. + Public Enum USB_DESCRIPTOR_TYPE + ''' Device descriptor type. + DEVICE = &H1 + + ''' Configuration descriptor type. + CONFIGURATION = &H2 + + ''' String descriptor type. + [STRING] = &H3 + + ''' Interface descriptor type. + [INTERFACE] = &H4 + + ''' Endpoint descriptor type. + ENDPOINT = &H5 + + ''' Device qualifier descriptor type. + DEVICE_QUALIFIER = &H6 + + ''' Config power descriptor type. + CONFIG_POWER = &H7 + + ''' Interface power descriptor type. + INTERFACE_POWER = &H8 + + ''' Interface association descriptor type. + INTERFACE_ASSOCIATION = &Hb + End Enum + + ''' Usb handle specific properties that can be retrieved with \ref UsbK_GetProperty. + Public Enum KUSB_PROPERTY + ''' Get the internal device file handle used for operations such as GetOverlappedResult or DeviceIoControl. + DEVICE_FILE_HANDLE + + COUNT + End Enum + + ''' Supported driver id enumeration. + Public Enum KUSB_DRVID + ''' libusbK.sys driver ID + LIBUSBK + + ''' libusb0.sys driver ID + LIBUSB0 + + ''' WinUSB.sys driver ID + WINUSB + + ''' libusb0.sys filter driver ID + LIBUSB0_FILTER + + ''' Supported driver count + COUNT + End Enum + + ''' Supported function id enumeration. + Public Enum KUSB_FNID + ''' \ref UsbK_Init dynamic driver function id. + Init + + ''' \ref UsbK_Free dynamic driver function id. + Free + + ''' \ref UsbK_ClaimInterface dynamic driver function id. + ClaimInterface + + ''' \ref UsbK_ReleaseInterface dynamic driver function id. + ReleaseInterface + + ''' \ref UsbK_SetAltInterface dynamic driver function id. + SetAltInterface + + ''' \ref UsbK_GetAltInterface dynamic driver function id. + GetAltInterface + + ''' \ref UsbK_GetDescriptor dynamic driver function id. + GetDescriptor + + ''' \ref UsbK_ControlTransfer dynamic driver function id. + ControlTransfer + + ''' \ref UsbK_SetPowerPolicy dynamic driver function id. + SetPowerPolicy + + ''' \ref UsbK_GetPowerPolicy dynamic driver function id. + GetPowerPolicy + + ''' \ref UsbK_SetConfiguration dynamic driver function id. + SetConfiguration + + ''' \ref UsbK_GetConfiguration dynamic driver function id. + GetConfiguration + + ''' \ref UsbK_ResetDevice dynamic driver function id. + ResetDevice + + ''' \ref UsbK_Initialize dynamic driver function id. + Initialize + + ''' \ref UsbK_SelectInterface dynamic driver function id. + SelectInterface + + ''' \ref UsbK_GetAssociatedInterface dynamic driver function id. + GetAssociatedInterface + + ''' \ref UsbK_Clone dynamic driver function id. + Clone + + ''' \ref UsbK_QueryInterfaceSettings dynamic driver function id. + QueryInterfaceSettings + + ''' \ref UsbK_QueryDeviceInformation dynamic driver function id. + QueryDeviceInformation + + ''' \ref UsbK_SetCurrentAlternateSetting dynamic driver function id. + SetCurrentAlternateSetting + + ''' \ref UsbK_GetCurrentAlternateSetting dynamic driver function id. + GetCurrentAlternateSetting + + ''' \ref UsbK_QueryPipe dynamic driver function id. + QueryPipe + + ''' \ref UsbK_SetPipePolicy dynamic driver function id. + SetPipePolicy + + ''' \ref UsbK_GetPipePolicy dynamic driver function id. + GetPipePolicy + + ''' \ref UsbK_ReadPipe dynamic driver function id. + ReadPipe + + ''' \ref UsbK_WritePipe dynamic driver function id. + WritePipe + + ''' \ref UsbK_ResetPipe dynamic driver function id. + ResetPipe + + ''' \ref UsbK_AbortPipe dynamic driver function id. + AbortPipe + + ''' \ref UsbK_FlushPipe dynamic driver function id. + FlushPipe + + ''' \ref UsbK_IsoReadPipe dynamic driver function id. + IsoReadPipe + + ''' \ref UsbK_IsoWritePipe dynamic driver function id. + IsoWritePipe + + ''' \ref UsbK_GetCurrentFrameNumber dynamic driver function id. + GetCurrentFrameNumber + + ''' \ref UsbK_GetOverlappedResult dynamic driver function id. + GetOverlappedResult + + ''' \ref UsbK_GetProperty dynamic driver function id. + GetProperty + + + ''' Supported function count + COUNT + End Enum + + ''' Hot plug config flags. + _ + Public Enum KHOT_FLAG + ''' No flags (or 0) + NONE + + ''' Notify all devices which match upon a succuessful call to \ref HotK_Init. + PLUG_ALL_ON_INIT = &H1 + + ''' Allow other \ref KHOT_HANDLE instances to consume this match. + PASS_DUPE_INSTANCE = &H2 + + ''' If a \c UserHwnd is specified, use \c PostMessage instead of \c SendMessage. + POST_USER_MESSAGE = &H4 + End Enum + + ''' \c WaitFlags used by \ref OvlK_Wait. + _ + Public Enum KOVL_WAIT_FLAG + ''' Do not perform any additional actions upon exiting \ref OvlK_Wait. + NONE = 0 + + ''' If the i/o operation completes successfully, release the OverlappedK back to it's pool. + RELEASE_ON_SUCCESS = &H1 + + ''' If the i/o operation fails, release the OverlappedK back to it's pool. + RELEASE_ON_FAIL = &H2 + + ''' If the i/o operation fails or completes successfully, release the OverlappedK back to its pool. Perform no actions if it times-out. + RELEASE_ON_SUCCESS_FAIL = &H3 + + ''' If the i/o operation times-out cancel it, but do not release the OverlappedK back to its pool. + CANCEL_ON_TIMEOUT = &H4 + + ''' If the i/o operation times-out, cancel it and release the OverlappedK back to its pool. + RELEASE_ON_TIMEOUT = &Hc + + ''' Always release the OverlappedK back to its pool. If the operation timed-out, cancel it before releasing back to its pool. + RELEASE_ALWAYS = &Hf + + ''' Uses alterable wait functions. See http://msdn.microsoft.com/en-us/library/windows/desktop/ms687036%28v=vs.85%29.aspx + ALERTABLE = &H10 + End Enum + + ''' \c Overlapped pool config flags. + _ + Public Enum KOVL_POOL_FLAG + NONE = 0 + End Enum + + ''' Stream config flags. + _ + Public Enum KSTM_FLAG As UInteger + ''' None + NONE = 0 + NO_PARTIAL_XFERS = &H100000 + USE_TIMEOUT = &H80000000UI + TIMEOUT_MASK = &H1ffff + End Enum + + ''' Stream config flags. + Public Enum KSTM_COMPLETE_RESULT + ''' Valid + VALID = 0 + + ''' Invalid + INVALID + End Enum + + #End Region + + #Region "Structs" + + ''' The \c WINUSB_PIPE_INFORMATION structure contains pipe information that the \ref UsbK_QueryPipe routine retrieves. + _ + Public Structure WINUSB_PIPE_INFORMATION + ''' A \c USBD_PIPE_TYPE enumeration value that specifies the pipe type + Public PipeType As USBD_PIPE_TYPE + + ''' The pipe identifier (ID) + Public PipeId As Byte + + ''' The maximum size, in bytes, of the packets that are transmitted on the pipe + Public MaximumPacketSize As UShort + + ''' The pipe interval + Public Interval As Byte + + + Public Overrides Function ToString() As String + Return String.Format("PipeType: {0}" & vbLf & "PipeId: {1}" & vbLf & "MaximumPacketSize: {2}" & vbLf & "Interval: {3}" & vbLf, PipeType, PipeId.ToString("X2") & "h", MaximumPacketSize, Interval.ToString("X2") & "h") + End Function + End Structure + + ''' The \c WINUSB_SETUP_PACKET structure describes a USB setup packet. + _ + Public Structure WINUSB_SETUP_PACKET + ''' The request type. The values that are assigned to this member are defined in Table 9.2 of section 9.3 of the Universal Serial Bus (USB) specification (www.usb.org). + Public RequestType As Byte + + ''' The device request. The values that are assigned to this member are defined in Table 9.3 of section 9.4 of the Universal Serial Bus (USB) specification. + Public Request As Byte + + ''' The meaning of this member varies according to the request. For an explanation of this member, see the Universal Serial Bus (USB) specification. + Public Value As UShort + + ''' The meaning of this member varies according to the request. For an explanation of this member, see the Universal Serial Bus (USB) specification. + Public Index As UShort + + ''' The number of bytes to transfer. (not including the \c WINUSB_SETUP_PACKET itself) + Public Length As UShort + + + Public Overrides Function ToString() As String + Return String.Format("RequestType: {0}" & vbLf & "Request: {1}" & vbLf & "Value: {2}" & vbLf & "Index: {3}" & vbLf & "Length: {4}" & vbLf, RequestType.ToString("X2") & "h", Request.ToString("X2") & "h", Value.ToString("X4") & "h", Index.ToString("X4") & "h", Length) + End Function + End Structure + + ''' Structure describing an isochronous transfer packet. + _ + Public Structure KISO_PACKET + ''' Specifies the offset, in bytes, of the buffer for this packet from the beginning of the entire isochronous transfer data buffer. + Public Offset As Integer + + ''' Set by the host controller to indicate the actual number of bytes received by the device for isochronous IN transfers. Length not used for isochronous OUT transfers. + Public Length As UShort + + ''' Contains the 16 least significant USBD status bits, on return from the host controller driver, of this transfer packet. + Public Status As UShort + + + Public Overrides Function ToString() As String + Return String.Format("Offset: {0}" & vbLf & "Length: {1}" & vbLf & "Status: {2}" & vbLf, Offset, Length, Status.ToString("X4") & "h") + End Function + End Structure + + _ + Public Structure KISO_CONTEXT + Private ReadOnly mHandlePtr As IntPtr + + Public Sub New(Handle As IntPtr) + mHandlePtr = Handle + End Sub + + Public ReadOnly Property Pointer() As IntPtr + Get + Return mHandlePtr + End Get + End Property + + ''' KISO_CONTEXT_MAP is used for calculating field offsets only + _ + Private Structure KISO_CONTEXT_MAP + ''' Additional ISO transfer flags. See \ref KISO_FLAG. + Private ReadOnly Flags As KISO_FLAG + + ''' Specifies the frame number that the transfer should begin on (0 for ASAP). + Private ReadOnly StartFrame As Integer + + ''' Contains the number of packets that completed with an error condition on return from the host controller driver. + Private ReadOnly ErrorCount As Short + + ''' Specifies the number of packets that are described by the variable-length array member \c IsoPacket. + Private ReadOnly NumberOfPackets As Short + + ''' Contains the URB Hdr.Status value on return from the host controller driver. + Private ReadOnly UrbHdrStatus As Integer + End Structure + + Private Shared ReadOnly ofsFlags As Integer = Marshal.OffsetOf(GetType(KISO_CONTEXT_MAP), "Flags").ToInt32() + Private Shared ReadOnly ofsStartFrame As Integer = Marshal.OffsetOf(GetType(KISO_CONTEXT_MAP), "StartFrame").ToInt32() + Private Shared ReadOnly ofsErrorCount As Integer = Marshal.OffsetOf(GetType(KISO_CONTEXT_MAP), "ErrorCount").ToInt32() + Private Shared ReadOnly ofsNumberOfPackets As Integer = Marshal.OffsetOf(GetType(KISO_CONTEXT_MAP), "NumberOfPackets").ToInt32() + Private Shared ReadOnly ofsUrbHdrStatus As Integer = Marshal.OffsetOf(GetType(KISO_CONTEXT_MAP), "UrbHdrStatus").ToInt32() + + + ''' Additional ISO transfer flags. See \ref KISO_FLAG. + Public ReadOnly Property Flags() As KISO_FLAG + Get + Return CType(Marshal.ReadInt32(mHandlePtr, ofsFlags), KISO_FLAG) + End Get + End Property + + + ''' Specifies the frame number that the transfer should begin on (0 for ASAP). + Public ReadOnly Property StartFrame() As Integer + Get + Return Marshal.ReadInt32(mHandlePtr, ofsStartFrame) + End Get + End Property + + + ''' Contains the number of packets that completed with an error condition on return from the host controller driver. + Public ReadOnly Property ErrorCount() As Short + Get + Return Marshal.ReadInt16(mHandlePtr, ofsErrorCount) + End Get + End Property + + + ''' Specifies the number of packets that are described by the variable-length array member \c IsoPacket. + Public ReadOnly Property NumberOfPackets() As Short + Get + Return Marshal.ReadInt16(mHandlePtr, ofsNumberOfPackets) + End Get + End Property + + + ''' Contains the URB Hdr.Status value on return from the host controller driver. + Public ReadOnly Property UrbHdrStatus() As Integer + Get + Return Marshal.ReadInt32(mHandlePtr, ofsUrbHdrStatus) + End Get + End Property + + + Public Overrides Function ToString() As String + Return String.Format("Flags: {0}" & vbLf & "StartFrame: {1}" & vbLf & "ErrorCount: {2}" & vbLf & "NumberOfPackets: {3}" & vbLf & "UrbHdrStatus: {4}" & vbLf, Flags.ToString(), StartFrame, ErrorCount, NumberOfPackets, UrbHdrStatus.ToString("X8") & "h") + End Function + End Structure + + ''' libusbK verson information structure. + _ + Public Structure KLIB_VERSION + ''' Major version number. + Public Major As Integer + + ''' Minor version number. + Public Minor As Integer + + ''' Micro version number. + Public Micro As Integer + + ''' Nano version number. + Public Nano As Integer + + Public Overrides Function ToString() As String + Return String.Format("Major: {0}" & vbLf & "Minor: {1}" & vbLf & "Micro: {2}" & vbLf & "Nano: {3}" & vbLf, Major, Minor, Micro, Nano) + End Function + End Structure + + ''' Common usb device information structure + _ + Public Structure KLST_DEV_COMMON_INFO + ''' VendorID parsed from \ref KLST_DEVINFO::DeviceID + Public Vid As Integer + + ''' ProductID parsed from \ref KLST_DEVINFO::DeviceID + Public Pid As Integer + + ''' Composite interface number parsed from \ref KLST_DEVINFO::DeviceID. Set to \b -1 for devices that do not have the composite parent driver. + Public MI As Integer + + ' An ID that uniquely identifies a USB device. + _ + Public InstanceID As String + + + Public Overrides Function ToString() As String + Return String.Format("Vid: {0}" & vbLf & "Pid: {1}" & vbLf & "MI: {2}" & vbLf & "InstanceID: {3}" & vbLf, Vid.ToString("X4") & "h", Pid.ToString("X4") & "h", MI.ToString("X2") & "h", InstanceID) + End Function + End Structure + + _ + Public Structure KLST_DEVINFO_HANDLE + Implements IKLIB_HANDLE + Private ReadOnly mHandlePtr As IntPtr + + Public Sub New(Handle As IntPtr) + mHandlePtr = Handle + End Sub + + Public ReadOnly Property Pointer() As IntPtr Implements IKLIB_HANDLE.Pointer + Get + Return mHandlePtr + End Get + End Property + + Public ReadOnly Property HandleType() As KLIB_HANDLE_TYPE Implements IKLIB_HANDLE.HandleType + Get + Return KLIB_HANDLE_TYPE.LSTINFOK + End Get + End Property + + Public Function GetContext() As IntPtr Implements IKLIB_HANDLE.GetContext + Return AllKFunctions.LibK_GetContext(mHandlePtr, HandleType) + End Function + + Public Function SetContext(UserContext As IntPtr) As Boolean Implements IKLIB_HANDLE.SetContext + Return AllKFunctions.LibK_SetContext(mHandlePtr, HandleType, UserContext) + End Function + + Public Function SetCleanupCallback(CleanupCallback As KLIB_HANDLE_CLEANUP_CB) As Boolean Implements IKLIB_HANDLE.SetCleanupCallback + Return AllKFunctions.LibK_SetCleanupCallback(mHandlePtr, HandleType, CleanupCallback) + End Function + + ''' KLST_DEVINFO_MAP is used for calculating field offsets only + _ + Private Structure KLST_DEVINFO_MAP + ''' Common usb device information + Private ReadOnly Common As KLST_DEV_COMMON_INFO + + ''' Driver id this device element is using + Private ReadOnly DriverID As Integer + + ''' Device interface GUID + _ + Private ReadOnly DeviceInterfaceGUID As String + + ''' Device instance ID. + _ + Private ReadOnly DeviceID As String + + ''' Class GUID. + _ + Private ReadOnly ClassGUID As String + + ''' Manufacturer name as specified in the INF file. + _ + Private ReadOnly Mfg As String + + ''' Device description as specified in the INF file. + _ + Private ReadOnly DeviceDesc As String + + ''' Driver service name. + _ + Private ReadOnly Service As String + + ''' Unique identifier. + _ + Private ReadOnly SymbolicLink As String + + ''' physical device filename used with the Windows \c CreateFile() + _ + Private ReadOnly DevicePath As String + + ''' libusb-win32 filter index id. + Private ReadOnly LUsb0FilterIndex As Integer + + ''' Indicates the devices connection state. + Private ReadOnly Connected As Boolean + + ''' Synchronization flags. (internal use only) + Private ReadOnly SyncFlags As KLST_SYNC_FLAG + + Private ReadOnly BusNumber As Integer + + Private ReadOnly DeviceAddress As Integer + + ''' If the the device is serialized, represents the string value of \ref USB_DEVICE_DESCRIPTOR::iSerialNumber. For Devices without a \b iSerialNumber, represents the unique \b InstanceID assigned by \b Windows. + _ + Private ReadOnly SerialNumber As String + End Structure + + Private Shared ReadOnly ofsCommon As Integer = Marshal.OffsetOf(GetType(KLST_DEVINFO_MAP), "Common").ToInt32() + Private Shared ReadOnly ofsDriverID As Integer = Marshal.OffsetOf(GetType(KLST_DEVINFO_MAP), "DriverID").ToInt32() + Private Shared ReadOnly ofsDeviceInterfaceGUID As Integer = Marshal.OffsetOf(GetType(KLST_DEVINFO_MAP), "DeviceInterfaceGUID").ToInt32() + Private Shared ReadOnly ofsDeviceID As Integer = Marshal.OffsetOf(GetType(KLST_DEVINFO_MAP), "DeviceID").ToInt32() + Private Shared ReadOnly ofsClassGUID As Integer = Marshal.OffsetOf(GetType(KLST_DEVINFO_MAP), "ClassGUID").ToInt32() + Private Shared ReadOnly ofsMfg As Integer = Marshal.OffsetOf(GetType(KLST_DEVINFO_MAP), "Mfg").ToInt32() + Private Shared ReadOnly ofsDeviceDesc As Integer = Marshal.OffsetOf(GetType(KLST_DEVINFO_MAP), "DeviceDesc").ToInt32() + Private Shared ReadOnly ofsService As Integer = Marshal.OffsetOf(GetType(KLST_DEVINFO_MAP), "Service").ToInt32() + Private Shared ReadOnly ofsSymbolicLink As Integer = Marshal.OffsetOf(GetType(KLST_DEVINFO_MAP), "SymbolicLink").ToInt32() + Private Shared ReadOnly ofsDevicePath As Integer = Marshal.OffsetOf(GetType(KLST_DEVINFO_MAP), "DevicePath").ToInt32() + Private Shared ReadOnly ofsLUsb0FilterIndex As Integer = Marshal.OffsetOf(GetType(KLST_DEVINFO_MAP), "LUsb0FilterIndex").ToInt32() + Private Shared ReadOnly ofsConnected As Integer = Marshal.OffsetOf(GetType(KLST_DEVINFO_MAP), "Connected").ToInt32() + Private Shared ReadOnly ofsSyncFlags As Integer = Marshal.OffsetOf(GetType(KLST_DEVINFO_MAP), "SyncFlags").ToInt32() + Private Shared ReadOnly ofsBusNumber As Integer = Marshal.OffsetOf(GetType(KLST_DEVINFO_MAP), "BusNumber").ToInt32() + Private Shared ReadOnly ofsDeviceAddress As Integer = Marshal.OffsetOf(GetType(KLST_DEVINFO_MAP), "DeviceAddress").ToInt32() + Private Shared ReadOnly ofsSerialNumber As Integer = Marshal.OffsetOf(GetType(KLST_DEVINFO_MAP), "SerialNumber").ToInt32() + + + ''' Common usb device information + Public ReadOnly Property Common() As KLST_DEV_COMMON_INFO + Get + Return CType(Marshal.PtrToStructure(New IntPtr(mHandlePtr.ToInt64() + ofsCommon), GetType(KLST_DEV_COMMON_INFO)), KLST_DEV_COMMON_INFO) + End Get + End Property + + + ''' Driver id this device element is using + Public ReadOnly Property DriverID() As Integer + Get + Return Marshal.ReadInt32(mHandlePtr, ofsDriverID) + End Get + End Property + + + ''' Device interface GUID + Public ReadOnly Property DeviceInterfaceGUID() As String + Get + Return Marshal.PtrToStringAnsi(New IntPtr(mHandlePtr.ToInt64() + ofsDeviceInterfaceGUID)) + End Get + End Property + + + ''' Device instance ID. + Public ReadOnly Property DeviceID() As String + Get + Return Marshal.PtrToStringAnsi(New IntPtr(mHandlePtr.ToInt64() + ofsDeviceID)) + End Get + End Property + + + ''' Class GUID. + Public ReadOnly Property ClassGUID() As String + Get + Return Marshal.PtrToStringAnsi(New IntPtr(mHandlePtr.ToInt64() + ofsClassGUID)) + End Get + End Property + + + ''' Manufacturer name as specified in the INF file. + Public ReadOnly Property Mfg() As String + Get + Return Marshal.PtrToStringAnsi(New IntPtr(mHandlePtr.ToInt64() + ofsMfg)) + End Get + End Property + + + ''' Device description as specified in the INF file. + Public ReadOnly Property DeviceDesc() As String + Get + Return Marshal.PtrToStringAnsi(New IntPtr(mHandlePtr.ToInt64() + ofsDeviceDesc)) + End Get + End Property + + + ''' Driver service name. + Public ReadOnly Property Service() As String + Get + Return Marshal.PtrToStringAnsi(New IntPtr(mHandlePtr.ToInt64() + ofsService)) + End Get + End Property + + + ''' Unique identifier. + Public ReadOnly Property SymbolicLink() As String + Get + Return Marshal.PtrToStringAnsi(New IntPtr(mHandlePtr.ToInt64() + ofsSymbolicLink)) + End Get + End Property + + + ''' physical device filename used with the Windows \c CreateFile() + Public ReadOnly Property DevicePath() As String + Get + Return Marshal.PtrToStringAnsi(New IntPtr(mHandlePtr.ToInt64() + ofsDevicePath)) + End Get + End Property + + + ''' libusb-win32 filter index id. + Public ReadOnly Property LUsb0FilterIndex() As Integer + Get + Return Marshal.ReadInt32(mHandlePtr, ofsLUsb0FilterIndex) + End Get + End Property + + + ''' Indicates the devices connection state. + Public ReadOnly Property Connected() As Boolean + Get + Return Marshal.ReadInt32(mHandlePtr, ofsConnected) <> 0 + End Get + End Property + + + ''' Synchronization flags. (internal use only) + Public ReadOnly Property SyncFlags() As KLST_SYNC_FLAG + Get + Return CType(Marshal.ReadInt32(mHandlePtr, ofsSyncFlags), KLST_SYNC_FLAG) + End Get + End Property + + + Public ReadOnly Property BusNumber() As Integer + Get + Return Marshal.ReadInt32(mHandlePtr, ofsBusNumber) + End Get + End Property + + + Public ReadOnly Property DeviceAddress() As Integer + Get + Return Marshal.ReadInt32(mHandlePtr, ofsDeviceAddress) + End Get + End Property + + + ''' If the the device is serialized, represents the string value of \ref USB_DEVICE_DESCRIPTOR::iSerialNumber. For Devices without a \b iSerialNumber, represents the unique \b InstanceID assigned by \b Windows. + Public ReadOnly Property SerialNumber() As String + Get + Return Marshal.PtrToStringAnsi(New IntPtr(mHandlePtr.ToInt64() + ofsSerialNumber)) + End Get + End Property + + + Public Overrides Function ToString() As String + Return String.Format("DriverID: {0}" & vbLf & "DeviceInterfaceGUID: {1}" & vbLf & "DeviceID: {2}" & vbLf & "ClassGUID: {3}" & vbLf & "Mfg: {4}" & vbLf & "DeviceDesc: {5}" & vbLf & "Service: {6}" & vbLf & "SymbolicLink: {7}" & vbLf & "DevicePath: {8}" & vbLf & "LUsb0FilterIndex: {9}" & vbLf & "Connected: {10}" & vbLf & "SyncFlags: {11}" & vbLf & "BusNumber: {12}" & vbLf & "DeviceAddress: {13}" & vbLf & "SerialNumber: {14}" & vbLf, DriverID, DeviceInterfaceGUID, DeviceID, ClassGUID, Mfg, _ + DeviceDesc, Service, SymbolicLink, DevicePath, LUsb0FilterIndex, Connected, _ + SyncFlags.ToString(), BusNumber, DeviceAddress, SerialNumber) + End Function + End Structure + + ''' Device list/hot-plug pattern match structure. + _ + Public Structure KLST_PATTERN_MATCH + ''' Pattern match a device instance id. + _ + Public DeviceID As String + + ''' Pattern match a device interface guid. + _ + Public DeviceInterfaceGUID As String + + ''' Pattern match a symbolic link. + _ + Public ClassGUID As String + + + Public Overrides Function ToString() As String + Return String.Format("DeviceID: {0}" & vbLf & "DeviceInterfaceGUID: {1}" & vbLf & "ClassGUID: {2}" & vbLf, DeviceID, DeviceInterfaceGUID, ClassGUID) + End Function + End Structure + + ''' A structure representing the standard USB device descriptor. + _ + Public Structure USB_DEVICE_DESCRIPTOR + ''' Size of this descriptor (in bytes) + Public bLength As Byte + + ''' Descriptor type + Public bDescriptorType As Byte + + ''' USB specification release number in binary-coded decimal. + Public bcdUSB As UShort + + ''' USB-IF class code for the device + Public bDeviceClass As Byte + + ''' USB-IF subclass code for the device + Public bDeviceSubClass As Byte + + ''' USB-IF protocol code for the device + Public bDeviceProtocol As Byte + + ''' Maximum packet size for control endpoint 0 + Public bMaxPacketSize0 As Byte + + ''' USB-IF vendor ID + Public idVendor As UShort + + ''' USB-IF product ID + Public idProduct As UShort + + ''' Device release number in binary-coded decimal + Public bcdDevice As UShort + + ''' Index of string descriptor describing manufacturer + Public iManufacturer As Byte + + ''' Index of string descriptor describing product + Public iProduct As Byte + + ''' Index of string descriptor containing device serial number + Public iSerialNumber As Byte + + ''' Number of possible configurations + Public bNumConfigurations As Byte + + + Public Overrides Function ToString() As String + Return String.Format("bLength: {0}" & vbLf & "bDescriptorType: {1}" & vbLf & "bcdUSB: {2}" & vbLf & "bDeviceClass: {3}" & vbLf & "bDeviceSubClass: {4}" & vbLf & "bDeviceProtocol: {5}" & vbLf & "bMaxPacketSize0: {6}" & vbLf & "idVendor: {7}" & vbLf & "idProduct: {8}" & vbLf & "bcdDevice: {9}" & vbLf & "iManufacturer: {10}" & vbLf & "iProduct: {11}" & vbLf & "iSerialNumber: {12}" & vbLf & "bNumConfigurations: {13}" & vbLf, bLength, bDescriptorType.ToString("X2") & "h", bcdUSB.ToString("X4") & "h", bDeviceClass.ToString("X2") & "h", bDeviceSubClass.ToString("X2") & "h", _ + bDeviceProtocol.ToString("X2") & "h", bMaxPacketSize0, idVendor.ToString("X4") & "h", idProduct.ToString("X4") & "h", bcdDevice.ToString("X4") & "h", iManufacturer, _ + iProduct, iSerialNumber, bNumConfigurations) + End Function + End Structure + + ''' A structure representing the standard USB endpoint descriptor. + _ + Public Structure USB_ENDPOINT_DESCRIPTOR + ''' Size of this descriptor (in bytes) + Public bLength As Byte + + ''' Descriptor type + Public bDescriptorType As Byte + + ''' The address of the endpoint described by this descriptor. + Public bEndpointAddress As Byte + + ''' Attributes which apply to the endpoint when it is configured using the bConfigurationValue. + Public bmAttributes As Byte + + ''' Maximum packet size this endpoint is capable of sending/receiving. + Public wMaxPacketSize As UShort + + ''' Interval for polling endpoint for data transfers. + Public bInterval As Byte + + + Public Overrides Function ToString() As String + Return String.Format("bLength: {0}" & vbLf & "bDescriptorType: {1}" & vbLf & "bEndpointAddress: {2}" & vbLf & "bmAttributes: {3}" & vbLf & "wMaxPacketSize: {4}" & vbLf & "bInterval: {5}" & vbLf, bLength, bDescriptorType.ToString("X2") & "h", bEndpointAddress.ToString("X2") & "h", bmAttributes.ToString("X2") & "h", wMaxPacketSize, _ + bInterval) + End Function + End Structure + + ''' A structure representing the standard USB configuration descriptor. + _ + Public Structure USB_CONFIGURATION_DESCRIPTOR + ''' Size of this descriptor (in bytes) + Public bLength As Byte + + ''' Descriptor type + Public bDescriptorType As Byte + + ''' Total length of data returned for this configuration + Public wTotalLength As UShort + + ''' Number of interfaces supported by this configuration + Public bNumInterfaces As Byte + + ''' Identifier value for this configuration + Public bConfigurationValue As Byte + + ''' Index of string descriptor describing this configuration + Public iConfiguration As Byte + + ''' Configuration characteristics + Public bmAttributes As Byte + + ''' Maximum power consumption of the USB device from this bus in this configuration when the device is fully operation. + Public MaxPower As Byte + + Public Overrides Function ToString() As String + Return String.Format("bLength: {0}" & vbLf & "bDescriptorType: {1}" & vbLf & "wTotalLength: {2}" & vbLf & "bNumInterfaces: {3}" & vbLf & "bConfigurationValue: {4}" & vbLf & "iConfiguration: {5}" & vbLf & "bmAttributes: {6}" & vbLf & "MaxPower: {7}" & vbLf, bLength, bDescriptorType.ToString("X2") & "h", wTotalLength, bNumInterfaces, bConfigurationValue, _ + iConfiguration, bmAttributes.ToString("X2") & "h", MaxPower) + End Function + End Structure + + ''' A structure representing the standard USB interface descriptor. + _ + Public Structure USB_INTERFACE_DESCRIPTOR + ''' Size of this descriptor (in bytes) + Public bLength As Byte + + ''' Descriptor type + Public bDescriptorType As Byte + + ''' Number of this interface + Public bInterfaceNumber As Byte + + ''' Value used to select this alternate setting for this interface + Public bAlternateSetting As Byte + + ''' Number of endpoints used by this interface (excluding the control endpoint) + Public bNumEndpoints As Byte + + ''' USB-IF class code for this interface + Public bInterfaceClass As Byte + + ''' USB-IF subclass code for this interface + Public bInterfaceSubClass As Byte + + ''' USB-IF protocol code for this interface + Public bInterfaceProtocol As Byte + + ''' Index of string descriptor describing this interface + Public iInterface As Byte + + + Public Overrides Function ToString() As String + Return String.Format("bLength: {0}" & vbLf & "bDescriptorType: {1}" & vbLf & "bInterfaceNumber: {2}" & vbLf & "bAlternateSetting: {3}" & vbLf & "bNumEndpoints: {4}" & vbLf & "bInterfaceClass: {5}" & vbLf & "bInterfaceSubClass: {6}" & vbLf & "bInterfaceProtocol: {7}" & vbLf & "iInterface: {8}" & vbLf, bLength, bDescriptorType.ToString("X2") & "h", bInterfaceNumber, bAlternateSetting, bNumEndpoints, _ + bInterfaceClass.ToString("X2") & "h", bInterfaceSubClass.ToString("X2") & "h", bInterfaceProtocol.ToString("X2") & "h", iInterface) + End Function + End Structure + + ''' A structure representing the standard USB string descriptor. + _ + Public Structure USB_STRING_DESCRIPTOR + ''' Size of this descriptor (in bytes) + Public bLength As Byte + + ''' Descriptor type + Public bDescriptorType As Byte + + ''' Content of the string + _ + Public bString As String + + + Public Overrides Function ToString() As String + Return String.Format("bLength: {0}" & vbLf & "bDescriptorType: {1}" & vbLf & "bString: {2}" & vbLf, bLength, bDescriptorType.ToString("X2") & "h", bString) + End Function + End Structure + + ''' A structure representing the common USB descriptor. + _ + Public Structure USB_COMMON_DESCRIPTOR + ''' Size of this descriptor (in bytes) + Public bLength As Byte + + ''' Descriptor type + Public bDescriptorType As Byte + + + Public Overrides Function ToString() As String + Return String.Format("bLength: {0}" & vbLf & "bDescriptorType: {1}" & vbLf, bLength, bDescriptorType.ToString("X2") & "h") + End Function + End Structure + + ''' Allows hardware manufacturers to define groupings of interfaces. + _ + Public Structure USB_INTERFACE_ASSOCIATION_DESCRIPTOR + ''' Size of this descriptor (in bytes) + Public bLength As Byte + + ''' Descriptor type + Public bDescriptorType As Byte + + ''' First interface number of the set of interfaces that follow this descriptor + Public bFirstInterface As Byte + + ''' The Number of interfaces follow this descriptor that are considered "associated" + Public bInterfaceCount As Byte + + ''' \c bInterfaceClass used for this associated interfaces + Public bFunctionClass As Byte + + ''' \c bInterfaceSubClass used for the associated interfaces + Public bFunctionSubClass As Byte + + ''' \c bInterfaceProtocol used for the associated interfaces + Public bFunctionProtocol As Byte + + ''' Index of string descriptor describing the associated interfaces + Public iFunction As Byte + + + Public Overrides Function ToString() As String + Return String.Format("bLength: {0}" & vbLf & "bDescriptorType: {1}" & vbLf & "bFirstInterface: {2}" & vbLf & "bInterfaceCount: {3}" & vbLf & "bFunctionClass: {4}" & vbLf & "bFunctionSubClass: {5}" & vbLf & "bFunctionProtocol: {6}" & vbLf & "iFunction: {7}" & vbLf, bLength, bDescriptorType.ToString("X2") & "h", bFirstInterface, bInterfaceCount, bFunctionClass.ToString("X2") & "h", _ + bFunctionSubClass.ToString("X2") & "h", bFunctionProtocol.ToString("X2") & "h", iFunction) + End Function + End Structure + + ''' USB core driver API information structure. + _ + Public Structure KUSB_DRIVER_API_INFO + ''' \readonly Driver id of the driver api. + Public DriverID As Integer + + ''' \readonly Number of valid functions contained in the driver API. + Public FunctionCount As Integer + + + Public Overrides Function ToString() As String + Return String.Format("DriverID: {0}" & vbLf & "FunctionCount: {1}" & vbLf, DriverID, FunctionCount) + End Function + End Structure + + ''' Driver API function set structure. + _ + Public Structure KUSB_DRIVER_API + ''' Driver API information. + Public Info As KUSB_DRIVER_API_INFO + + + _ + Public Init As KUSB_InitDelegate + + + _ + Public Free As KUSB_FreeDelegate + + + _ + Public ClaimInterface As KUSB_ClaimInterfaceDelegate + + + _ + Public ReleaseInterface As KUSB_ReleaseInterfaceDelegate + + + _ + Public SetAltInterface As KUSB_SetAltInterfaceDelegate + + + _ + Public GetAltInterface As KUSB_GetAltInterfaceDelegate + + + _ + Public GetDescriptor As KUSB_GetDescriptorDelegate + + + _ + Public ControlTransfer As KUSB_ControlTransferDelegate + + + _ + Public SetPowerPolicy As KUSB_SetPowerPolicyDelegate + + + _ + Public GetPowerPolicy As KUSB_GetPowerPolicyDelegate + + + _ + Public SetConfiguration As KUSB_SetConfigurationDelegate + + + _ + Public GetConfiguration As KUSB_GetConfigurationDelegate + + + _ + Public ResetDevice As KUSB_ResetDeviceDelegate + + + _ + Public Initialize As KUSB_InitializeDelegate + + + _ + Public SelectInterface As KUSB_SelectInterfaceDelegate + + + _ + Public GetAssociatedInterface As KUSB_GetAssociatedInterfaceDelegate + + + _ + Public Clone As KUSB_CloneDelegate + + + _ + Public QueryInterfaceSettings As KUSB_QueryInterfaceSettingsDelegate + + + _ + Public QueryDeviceInformation As KUSB_QueryDeviceInformationDelegate + + + _ + Public SetCurrentAlternateSetting As KUSB_SetCurrentAlternateSettingDelegate + + + _ + Public GetCurrentAlternateSetting As KUSB_GetCurrentAlternateSettingDelegate + + + _ + Public QueryPipe As KUSB_QueryPipeDelegate + + + _ + Public SetPipePolicy As KUSB_SetPipePolicyDelegate + + + _ + Public GetPipePolicy As KUSB_GetPipePolicyDelegate + + + _ + Public ReadPipe As KUSB_ReadPipeDelegate + + + _ + Public WritePipe As KUSB_WritePipeDelegate + + + _ + Public ResetPipe As KUSB_ResetPipeDelegate + + + _ + Public AbortPipe As KUSB_AbortPipeDelegate + + + _ + Public FlushPipe As KUSB_FlushPipeDelegate + + + _ + Public IsoReadPipe As KUSB_IsoReadPipeDelegate + + + _ + Public IsoWritePipe As KUSB_IsoWritePipeDelegate + + + _ + Public GetCurrentFrameNumber As KUSB_GetCurrentFrameNumberDelegate + + + _ + Public GetOverlappedResult As KUSB_GetOverlappedResultDelegate + + + _ + Public GetProperty As KUSB_GetPropertyDelegate + End Structure + + ''' Hot plug parameter structure. + _ + Public Structure KHOT_PARAMS + ''' Hot plug event window handle to send/post messages when notifications occur. + Public UserHwnd As IntPtr + + ''' WM_USER message start offset used when sending/posting messages, See details. + Public UserMessage As Integer + + ''' Additional init/config parameters + Public Flags As KHOT_FLAG + + ''' File pattern matches for restricting notifcations to a single/group or all supported usb devices. + Public PatternMatch As KLST_PATTERN_MATCH + + ''' Hot plug event callback function invoked when notifications occur. + _ + Public OnHotPlug As KHOT_PLUG_CB + + + Public Overrides Function ToString() As String + Return String.Format("UserHwnd: {0}" & vbLf & "UserMessage: {1}" & vbLf & "Flags: {2}" & vbLf, UserHwnd.ToString("X16") & "h", UserMessage.ToString("X8") & "h", Flags.ToString()) + End Function + End Structure + + _ + Public Structure KSTM_XFER_CONTEXT + Private ReadOnly mHandlePtr As IntPtr + + Public Sub New(Handle As IntPtr) + mHandlePtr = Handle + End Sub + + Public ReadOnly Property Pointer() As IntPtr + Get + Return mHandlePtr + End Get + End Property + + ''' KSTM_XFER_CONTEXT_MAP is used for calculating field offsets only + _ + Private Structure KSTM_XFER_CONTEXT_MAP + ''' Internal stream buffer. + Private ReadOnly Buffer As IntPtr + + ''' Size of internal stream buffer. + Private ReadOnly BufferSize As Integer + + ''' Number of bytes to write or number of bytes read. + Private ReadOnly TransferLength As Integer + + ''' User defined state. + Private ReadOnly UserState As IntPtr + End Structure + + Private Shared ReadOnly ofsBuffer As Integer = Marshal.OffsetOf(GetType(KSTM_XFER_CONTEXT_MAP), "Buffer").ToInt32() + Private Shared ReadOnly ofsBufferSize As Integer = Marshal.OffsetOf(GetType(KSTM_XFER_CONTEXT_MAP), "BufferSize").ToInt32() + Private Shared ReadOnly ofsTransferLength As Integer = Marshal.OffsetOf(GetType(KSTM_XFER_CONTEXT_MAP), "TransferLength").ToInt32() + Private Shared ReadOnly ofsUserState As Integer = Marshal.OffsetOf(GetType(KSTM_XFER_CONTEXT_MAP), "UserState").ToInt32() + + + ''' Internal stream buffer. + Public ReadOnly Property Buffer() As IntPtr + Get + Return Marshal.ReadIntPtr(mHandlePtr, ofsBuffer) + End Get + End Property + + + ''' Size of internal stream buffer. + Public ReadOnly Property BufferSize() As Integer + Get + Return Marshal.ReadInt32(mHandlePtr, ofsBufferSize) + End Get + End Property + + + ''' Number of bytes to write or number of bytes read. + Public ReadOnly Property TransferLength() As Integer + Get + Return Marshal.ReadInt32(mHandlePtr, ofsTransferLength) + End Get + End Property + + + ''' User defined state. + Public Property UserState() As IntPtr + Get + Return Marshal.ReadIntPtr(mHandlePtr, ofsUserState) + End Get + Set + Marshal.WriteIntPtr(mHandlePtr, ofsUserState, value) + End Set + End Property + + + Public Overrides Function ToString() As String + Return String.Format("Buffer: {0}" & vbLf & "BufferSize: {1}" & vbLf & "TransferLength: {2}" & vbLf & "UserState: {3}" & vbLf, Buffer.ToString("X16") & "h", BufferSize, TransferLength, UserState.ToString("X16") & "h") + End Function + End Structure + + _ + Public Structure KSTM_INFO + Private ReadOnly mHandlePtr As IntPtr + + Public Sub New(Handle As IntPtr) + mHandlePtr = Handle + End Sub + + Public ReadOnly Property Pointer() As IntPtr + Get + Return mHandlePtr + End Get + End Property + + ''' KSTM_INFO_MAP is used for calculating field offsets only + _ + Private Structure KSTM_INFO_MAP + ''' \ref KUSB_HANDLE this stream uses. + Private ReadOnly UsbHandle As IntPtr + + ''' This parameter corresponds to the bEndpointAddress field in the endpoint descriptor. + Private ReadOnly PipeID As Byte + + ''' Maximum transfer read/write request allowed pending. + Private ReadOnly MaxPendingTransfers As Integer + + ''' Maximum transfer sage size. + Private ReadOnly MaxTransferSize As Integer + + ''' Maximum number of I/O request allowed pending. + Private ReadOnly MaxPendingIO As Integer + + ''' Populated with the endpoint descriptor for the specified \c PipeID. + Private ReadOnly EndpointDescriptor As USB_ENDPOINT_DESCRIPTOR + + ''' Populated with the driver api for the specified \c UsbHandle. + Private ReadOnly DriverAPI As KUSB_DRIVER_API + + ''' Populated with the device file handle for the specified \c UsbHandle. + Private ReadOnly DeviceHandle As IntPtr + + ''' Stream handle. + Private ReadOnly StreamHandle As IntPtr + + ''' Stream info user defined state. + Private ReadOnly UserState As IntPtr + End Structure + + Private Shared ReadOnly ofsUsbHandle As Integer = Marshal.OffsetOf(GetType(KSTM_INFO_MAP), "UsbHandle").ToInt32() + Private Shared ReadOnly ofsPipeID As Integer = Marshal.OffsetOf(GetType(KSTM_INFO_MAP), "PipeID").ToInt32() + Private Shared ReadOnly ofsMaxPendingTransfers As Integer = Marshal.OffsetOf(GetType(KSTM_INFO_MAP), "MaxPendingTransfers").ToInt32() + Private Shared ReadOnly ofsMaxTransferSize As Integer = Marshal.OffsetOf(GetType(KSTM_INFO_MAP), "MaxTransferSize").ToInt32() + Private Shared ReadOnly ofsMaxPendingIO As Integer = Marshal.OffsetOf(GetType(KSTM_INFO_MAP), "MaxPendingIO").ToInt32() + Private Shared ReadOnly ofsEndpointDescriptor As Integer = Marshal.OffsetOf(GetType(KSTM_INFO_MAP), "EndpointDescriptor").ToInt32() + Private Shared ReadOnly ofsDriverAPI As Integer = Marshal.OffsetOf(GetType(KSTM_INFO_MAP), "DriverAPI").ToInt32() + Private Shared ReadOnly ofsDeviceHandle As Integer = Marshal.OffsetOf(GetType(KSTM_INFO_MAP), "DeviceHandle").ToInt32() + Private Shared ReadOnly ofsStreamHandle As Integer = Marshal.OffsetOf(GetType(KSTM_INFO_MAP), "StreamHandle").ToInt32() + Private Shared ReadOnly ofsUserState As Integer = Marshal.OffsetOf(GetType(KSTM_INFO_MAP), "UserState").ToInt32() + + + ''' \ref KUSB_HANDLE this stream uses. + Public ReadOnly Property UsbHandle() As IntPtr + Get + Return Marshal.ReadIntPtr(mHandlePtr, ofsUsbHandle) + End Get + End Property + + + ''' This parameter corresponds to the bEndpointAddress field in the endpoint descriptor. + Public ReadOnly Property PipeID() As Byte + Get + Return Marshal.ReadByte(mHandlePtr, ofsPipeID) + End Get + End Property + + + ''' Maximum transfer read/write request allowed pending. + Public ReadOnly Property MaxPendingTransfers() As Integer + Get + Return Marshal.ReadInt32(mHandlePtr, ofsMaxPendingTransfers) + End Get + End Property + + + ''' Maximum transfer sage size. + Public ReadOnly Property MaxTransferSize() As Integer + Get + Return Marshal.ReadInt32(mHandlePtr, ofsMaxTransferSize) + End Get + End Property + + + ''' Maximum number of I/O request allowed pending. + Public ReadOnly Property MaxPendingIO() As Integer + Get + Return Marshal.ReadInt32(mHandlePtr, ofsMaxPendingIO) + End Get + End Property + + + ''' Populated with the endpoint descriptor for the specified \c PipeID. + Public ReadOnly Property EndpointDescriptor() As USB_ENDPOINT_DESCRIPTOR + Get + Return CType(Marshal.PtrToStructure(New IntPtr(mHandlePtr.ToInt64() + ofsEndpointDescriptor), GetType(USB_ENDPOINT_DESCRIPTOR)), USB_ENDPOINT_DESCRIPTOR) + End Get + End Property + + + ''' Populated with the driver api for the specified \c UsbHandle. + Public ReadOnly Property DriverAPI() As KUSB_DRIVER_API + Get + Return CType(Marshal.PtrToStructure(New IntPtr(mHandlePtr.ToInt64() + ofsDriverAPI), GetType(KUSB_DRIVER_API)), KUSB_DRIVER_API) + End Get + End Property + + + ''' Populated with the device file handle for the specified \c UsbHandle. + Public ReadOnly Property DeviceHandle() As IntPtr + Get + Return Marshal.ReadIntPtr(mHandlePtr, ofsDeviceHandle) + End Get + End Property + + + ''' Stream handle. + Public ReadOnly Property StreamHandle() As IntPtr + Get + Return Marshal.ReadIntPtr(mHandlePtr, ofsStreamHandle) + End Get + End Property + + + ''' Stream info user defined state. + Public Property UserState() As IntPtr + Get + Return Marshal.ReadIntPtr(mHandlePtr, ofsUserState) + End Get + Set + Marshal.WriteIntPtr(mHandlePtr, ofsUserState, value) + End Set + End Property + + + Public Overrides Function ToString() As String + Return String.Format("UsbHandle: {0}" & vbLf & "PipeID: {1}" & vbLf & "MaxPendingTransfers: {2}" & vbLf & "MaxTransferSize: {3}" & vbLf & "MaxPendingIO: {4}" & vbLf & "DeviceHandle: {5}" & vbLf & "StreamHandle: {6}" & vbLf & "UserState: {7}" & vbLf, UsbHandle.ToString("X16") & "h", PipeID.ToString("X2") & "h", MaxPendingTransfers, MaxTransferSize, MaxPendingIO, _ + DeviceHandle.ToString("X16") & "h", StreamHandle.ToString("X16") & "h", UserState.ToString("X16") & "h") + End Function + End Structure + + ''' Stream callback structure. + _ + Public Structure KSTM_CALLBACK + ''' Executed when a transfer error occurs. + _ + Public [Error] As KSTM_ERROR_CB + + ''' Executed to submit a transfer. + _ + Public Submit As KSTM_SUBMIT_CB + + ''' Executed when a valid transfer completes. + _ + Public Complete As KSTM_COMPLETE_CB + + ''' Executed for every transfer context when the stream is started with \ref StmK_Start. + _ + Public Started As KSTM_STARTED_CB + + ''' Executed for every transfer context when the stream is stopped with \ref StmK_Stop. + _ + Public Stopped As KSTM_STOPPED_CB + + ''' Executed immediately after a transfer completes. + _ + Public BeforeComplete As KSTM_BEFORE_COMPLETE_CB + End Structure + + #End Region + + #Region "Delegates" + + _ + Public Delegate Function KLIB_HANDLE_CLEANUP_CB(<[In]> Handle As IntPtr, HandleType As KLIB_HANDLE_TYPE, UserContext As IntPtr) As Integer + + _ + Public Delegate Function KISO_ENUM_PACKETS_CB(PacketIndex As Integer, <[In]> ByRef IsoPacket As KISO_PACKET, UserState As IntPtr) As Boolean + + _ + Public Delegate Function KLST_ENUM_DEVINFO_CB(<[In]> DeviceList As KLST_HANDLE, <[In]> DeviceInfo As KLST_DEVINFO_HANDLE, Context As IntPtr) As Boolean + + _ + Public Delegate Function KUSB_InitDelegate( ByRef InterfaceHandle As KUSB_HANDLE, <[In]> DevInfo As KLST_DEVINFO_HANDLE) As Boolean + + _ + Public Delegate Function KUSB_FreeDelegate(<[In]> InterfaceHandle As KUSB_HANDLE) As Boolean + + _ + Public Delegate Function KUSB_ClaimInterfaceDelegate(<[In]> InterfaceHandle As KUSB_HANDLE, NumberOrIndex As Byte, IsIndex As Boolean) As Boolean + + _ + Public Delegate Function KUSB_ReleaseInterfaceDelegate(<[In]> InterfaceHandle As KUSB_HANDLE, NumberOrIndex As Byte, IsIndex As Boolean) As Boolean + + _ + Public Delegate Function KUSB_SetAltInterfaceDelegate(<[In]> InterfaceHandle As KUSB_HANDLE, NumberOrIndex As Byte, IsIndex As Boolean, AltSettingNumber As Byte) As Boolean + + _ + Public Delegate Function KUSB_GetAltInterfaceDelegate(<[In]> InterfaceHandle As KUSB_HANDLE, NumberOrIndex As Byte, IsIndex As Boolean, ByRef AltSettingNumber As Byte) As Boolean + + _ + Public Delegate Function KUSB_GetDescriptorDelegate(<[In]> InterfaceHandle As KUSB_HANDLE, DescriptorType As Byte, Index As Byte, LanguageID As UShort, Buffer As IntPtr, BufferLength As Integer, _ + ByRef LengthTransferred As Integer) As Boolean + + _ + Public Delegate Function KUSB_ControlTransferDelegate(<[In]> InterfaceHandle As KUSB_HANDLE, SetupPacket As WINUSB_SETUP_PACKET, Buffer As IntPtr, BufferLength As Integer, ByRef LengthTransferred As Integer, Overlapped As IntPtr) As Boolean + + _ + Public Delegate Function KUSB_SetPowerPolicyDelegate(<[In]> InterfaceHandle As KUSB_HANDLE, PolicyType As Integer, ValueLength As Integer, Value As IntPtr) As Boolean + + _ + Public Delegate Function KUSB_GetPowerPolicyDelegate(<[In]> InterfaceHandle As KUSB_HANDLE, PolicyType As Integer, ByRef ValueLength As Integer, Value As IntPtr) As Boolean + + _ + Public Delegate Function KUSB_SetConfigurationDelegate(<[In]> InterfaceHandle As KUSB_HANDLE, ConfigurationNumber As Byte) As Boolean + + _ + Public Delegate Function KUSB_GetConfigurationDelegate(<[In]> InterfaceHandle As KUSB_HANDLE, ByRef ConfigurationNumber As Byte) As Boolean + + _ + Public Delegate Function KUSB_ResetDeviceDelegate(<[In]> InterfaceHandle As KUSB_HANDLE) As Boolean + + _ + Public Delegate Function KUSB_InitializeDelegate(DeviceHandle As IntPtr, ByRef InterfaceHandle As KUSB_HANDLE) As Boolean + + _ + Public Delegate Function KUSB_SelectInterfaceDelegate(<[In]> InterfaceHandle As KUSB_HANDLE, NumberOrIndex As Byte, IsIndex As Boolean) As Boolean + + _ + Public Delegate Function KUSB_GetAssociatedInterfaceDelegate(<[In]> InterfaceHandle As KUSB_HANDLE, AssociatedInterfaceIndex As Byte, ByRef AssociatedInterfaceHandle As KUSB_HANDLE) As Boolean + + _ + Public Delegate Function KUSB_CloneDelegate(<[In]> InterfaceHandle As KUSB_HANDLE, ByRef DstInterfaceHandle As KUSB_HANDLE) As Boolean + + _ + Public Delegate Function KUSB_QueryInterfaceSettingsDelegate(<[In]> InterfaceHandle As KUSB_HANDLE, AltSettingIndex As Byte, ByRef UsbAltInterfaceDescriptor As USB_INTERFACE_DESCRIPTOR) As Boolean + + _ + Public Delegate Function KUSB_QueryDeviceInformationDelegate(<[In]> InterfaceHandle As KUSB_HANDLE, InformationType As Integer, ByRef BufferLength As Integer, Buffer As IntPtr) As Boolean + + _ + Public Delegate Function KUSB_SetCurrentAlternateSettingDelegate(<[In]> InterfaceHandle As KUSB_HANDLE, AltSettingNumber As Byte) As Boolean + + _ + Public Delegate Function KUSB_GetCurrentAlternateSettingDelegate(<[In]> InterfaceHandle As KUSB_HANDLE, ByRef AltSettingNumber As Byte) As Boolean + + _ + Public Delegate Function KUSB_QueryPipeDelegate(<[In]> InterfaceHandle As KUSB_HANDLE, AltSettingNumber As Byte, PipeIndex As Byte, ByRef PipeInformation As WINUSB_PIPE_INFORMATION) As Boolean + + _ + Public Delegate Function KUSB_SetPipePolicyDelegate(<[In]> InterfaceHandle As KUSB_HANDLE, PipeID As Byte, PolicyType As Integer, ValueLength As Integer, Value As IntPtr) As Boolean + + _ + Public Delegate Function KUSB_GetPipePolicyDelegate(<[In]> InterfaceHandle As KUSB_HANDLE, PipeID As Byte, PolicyType As Integer, ByRef ValueLength As Integer, Value As IntPtr) As Boolean + + _ + Public Delegate Function KUSB_ReadPipeDelegate(<[In]> InterfaceHandle As KUSB_HANDLE, PipeID As Byte, Buffer As IntPtr, BufferLength As Integer, ByRef LengthTransferred As Integer, Overlapped As IntPtr) As Boolean + + _ + Public Delegate Function KUSB_WritePipeDelegate(<[In]> InterfaceHandle As KUSB_HANDLE, PipeID As Byte, Buffer As IntPtr, BufferLength As Integer, ByRef LengthTransferred As Integer, Overlapped As IntPtr) As Boolean + + _ + Public Delegate Function KUSB_ResetPipeDelegate(<[In]> InterfaceHandle As KUSB_HANDLE, PipeID As Byte) As Boolean + + _ + Public Delegate Function KUSB_AbortPipeDelegate(<[In]> InterfaceHandle As KUSB_HANDLE, PipeID As Byte) As Boolean + + _ + Public Delegate Function KUSB_FlushPipeDelegate(<[In]> InterfaceHandle As KUSB_HANDLE, PipeID As Byte) As Boolean + + _ + Public Delegate Function KUSB_IsoReadPipeDelegate(<[In]> InterfaceHandle As KUSB_HANDLE, PipeID As Byte, Buffer As IntPtr, BufferLength As Integer, Overlapped As IntPtr, <[In]> IsoContext As KISO_CONTEXT) As Boolean + + _ + Public Delegate Function KUSB_IsoWritePipeDelegate(<[In]> InterfaceHandle As KUSB_HANDLE, PipeID As Byte, Buffer As IntPtr, BufferLength As Integer, Overlapped As IntPtr, <[In]> IsoContext As KISO_CONTEXT) As Boolean + + _ + Public Delegate Function KUSB_GetCurrentFrameNumberDelegate(<[In]> InterfaceHandle As KUSB_HANDLE, ByRef FrameNumber As Integer) As Boolean + + _ + Public Delegate Function KUSB_GetOverlappedResultDelegate(<[In]> InterfaceHandle As KUSB_HANDLE, Overlapped As IntPtr, ByRef lpNumberOfBytesTransferred As Integer, bWait As Boolean) As Boolean + + _ + Public Delegate Function KUSB_GetPropertyDelegate(<[In]> InterfaceHandle As KUSB_HANDLE, PropertyType As KUSB_PROPERTY, ByRef PropertySize As Integer, Value As IntPtr) As Boolean + + _ + Public Delegate Sub KHOT_PLUG_CB(<[In]> HotHandle As KHOT_HANDLE, <[In]> DeviceInfo As KLST_DEVINFO_HANDLE, PlugType As KLST_SYNC_FLAG) + + _ + Public Delegate Function KSTM_ERROR_CB(<[In]> StreamInfo As KSTM_INFO, <[In]> XferContext As KSTM_XFER_CONTEXT, XferContextIndex As Integer, ErrorCode As Integer) As Integer + + _ + Public Delegate Function KSTM_SUBMIT_CB(<[In]> StreamInfo As KSTM_INFO, <[In]> XferContext As KSTM_XFER_CONTEXT, XferContextIndex As Integer, Overlapped As IntPtr) As Integer + + _ + Public Delegate Function KSTM_STARTED_CB(<[In]> StreamInfo As KSTM_INFO, <[In]> XferContext As KSTM_XFER_CONTEXT, XferContextIndex As Integer) As Integer + + _ + Public Delegate Function KSTM_STOPPED_CB(<[In]> StreamInfo As KSTM_INFO, <[In]> XferContext As KSTM_XFER_CONTEXT, XferContextIndex As Integer) As Integer + + _ + Public Delegate Function KSTM_COMPLETE_CB(<[In]> StreamInfo As KSTM_INFO, <[In]> XferContext As KSTM_XFER_CONTEXT, XferContextIndex As Integer, ErrorCode As Integer) As Integer + + _ + Public Delegate Function KSTM_BEFORE_COMPLETE_CB(<[In]> StreamInfo As KSTM_INFO, <[In]> XferContext As KSTM_XFER_CONTEXT, XferContextIndex As Integer, ByRef ErrorCode As Integer) As KSTM_COMPLETE_RESULT + + #End Region + + Public Class LstK + Implements IDisposable + Protected mHandleStruct As KLST_HANDLE + Protected mbDisposed As Boolean + + Protected Sub New() + End Sub + + #Region "IDisposable Members" + + ''' Explicitly closes and frees the handle. + Public Overridable Sub Dispose() Implements IDisposable.Dispose + Dispose(True) + GC.SuppressFinalize(Me) + End Sub + + #End Region + + Protected Overrides Sub Finalize() + Try + Dispose(False) + Finally + MyBase.Finalize() + End Try + End Sub + + Protected Overridable Sub Dispose(disposing As Boolean) + If Not mbDisposed Then + If mHandleStruct.Pointer <> IntPtr.Zero Then + AllKFunctions.LstK_Free(mHandleStruct) + Debug.Print("{0} Dispose: Freed Handle:{1:X16}h Explicit:{2}", [GetType]().Name, mHandleStruct.Pointer.ToInt64(), disposing) + Else + Debug.Print("{0} Dispose: [WARNING] Handle is null", [GetType]().Name) + End If + + mHandleStruct = New KLST_HANDLE(IntPtr.Zero) + mbDisposed = True + End If + End Sub + + ''' Initializes a new usb device list containing all supported devices. + Protected Function Init(Flags As KLST_FLAG) As Boolean + Dim success As Boolean = AllKFunctions.LstK_Init(mHandleStruct, Flags) + + If Not success Then + Throw New Exception(String.Format("{0} failed initializing. ErrorCode={1:X8}h", [GetType]().Name, Marshal.GetLastWin32Error())) + End If + + Debug.Print("{0} Init: handle 0x{1:X16}", [GetType]().Name, mHandleStruct.Pointer.ToInt64()) + Return True + End Function + + ''' Initializes a new usb device list containing only devices matching a specific class GUID. + Protected Function InitEx(Flags As KLST_FLAG, ByRef PatternMatch As KLST_PATTERN_MATCH) As Boolean + Dim success As Boolean = AllKFunctions.LstK_InitEx(mHandleStruct, Flags, PatternMatch) + + If Not success Then + Throw New Exception(String.Format("{0} failed initializing. ErrorCode={1:X8}h", [GetType]().Name, Marshal.GetLastWin32Error())) + End If + + Debug.Print("{0} Init: handle 0x{1:X16}", [GetType]().Name, mHandleStruct.Pointer.ToInt64()) + Return True + End Function + + #Region "Public Members" + + ''' Initializes a new usb device list containing all supported devices. + Public Sub New(Flags As KLST_FLAG) + Dim success As Boolean = AllKFunctions.LstK_Init(mHandleStruct, Flags) + + If Not success Then + Throw New Exception(String.Format("{0} failed initializing. ErrorCode={1:X8}h", [GetType]().Name, Marshal.GetLastWin32Error())) + End If + + Debug.Print("{0} Init: handle 0x{1:X16}", [GetType]().Name, mHandleStruct.Pointer.ToInt64()) + End Sub + + ''' Initializes a new usb device list containing only devices matching a specific class GUID. + Public Sub New(Flags As KLST_FLAG, ByRef PatternMatch As KLST_PATTERN_MATCH) + Dim success As Boolean = AllKFunctions.LstK_InitEx(mHandleStruct, Flags, PatternMatch) + + If Not success Then + Throw New Exception(String.Format("{0} failed initializing. ErrorCode={1:X8}h", [GetType]().Name, Marshal.GetLastWin32Error())) + End If + + Debug.Print("{0} Init: handle 0x{1:X16}", [GetType]().Name, mHandleStruct.Pointer.ToInt64()) + End Sub + + ''' Counts the number of device info elements in a device list. + Public Overridable Function Count(ByRef Count As Integer) As Boolean + Return AllKFunctions.LstK_Count(mHandleStruct, Count) + End Function + + ''' Gets the \ref KLST_DEVINFO element for the current position. + Public Overridable Function Current(ByRef DeviceInfo As KLST_DEVINFO_HANDLE) As Boolean + Return AllKFunctions.LstK_Current(mHandleStruct, DeviceInfo) + End Function + + ''' Enumerates \ref KLST_DEVINFO elements of a \ref KLST_HANDLE. + Public Overridable Function Enumerate(EnumDevListCB As KLST_ENUM_DEVINFO_CB, Context As IntPtr) As Boolean + Return AllKFunctions.LstK_Enumerate(mHandleStruct, EnumDevListCB, Context) + End Function + + ''' Find a device by vendor and product id + Public Overridable Function FindByVidPid(Vid As Integer, Pid As Integer, ByRef DeviceInfo As KLST_DEVINFO_HANDLE) As Boolean + Return AllKFunctions.LstK_FindByVidPid(mHandleStruct, Vid, Pid, DeviceInfo) + End Function + + ''' Calls the dispose method. + Public Overridable Sub Free() + Dispose() + End Sub + + ''' Gets the handle class structure. + Public ReadOnly Property Handle() As KLST_HANDLE + Get + Return mHandleStruct + End Get + End Property + + ''' Advances the device list current \ref KLST_DEVINFO position. + Public Overridable Function MoveNext(ByRef DeviceInfo As KLST_DEVINFO_HANDLE) As Boolean + Return AllKFunctions.LstK_MoveNext(mHandleStruct, DeviceInfo) + End Function + + ''' Sets the device list to its initial position, which is before the first element in the list. + Public Overridable Sub MoveReset() + AllKFunctions.LstK_MoveReset(mHandleStruct) + End Sub + + #End Region + End Class + + Public Class HotK + Implements IDisposable + Protected mHandleStruct As KHOT_HANDLE + Protected mbDisposed As Boolean + + Protected Sub New() + End Sub + + #Region "IDisposable Members" + + ''' Explicitly closes and frees the handle. + Public Overridable Sub Dispose() Implements IDisposable.Dispose + Dispose(True) + GC.SuppressFinalize(Me) + End Sub + + #End Region + + Protected Overrides Sub Finalize() + Try + Dispose(False) + Finally + MyBase.Finalize() + End Try + End Sub + + Protected Overridable Sub Dispose(disposing As Boolean) + If Not mbDisposed Then + If mHandleStruct.Pointer <> IntPtr.Zero Then + AllKFunctions.HotK_Free(mHandleStruct) + Debug.Print("{0} Dispose: Freed Handle:{1:X16}h Explicit:{2}", [GetType]().Name, mHandleStruct.Pointer.ToInt64(), disposing) + Else + Debug.Print("{0} Dispose: [WARNING] Handle is null", [GetType]().Name) + End If + + mHandleStruct = New KHOT_HANDLE(IntPtr.Zero) + mbDisposed = True + End If + End Sub + + ''' Creates a new hot-plug handle for USB device arrival/removal event monitoring. + Protected Function Init(ByRef InitParams As KHOT_PARAMS) As Boolean + Dim success As Boolean = AllKFunctions.HotK_Init(mHandleStruct, InitParams) + + If Not success Then + Throw New Exception(String.Format("{0} failed initializing. ErrorCode={1:X8}h", [GetType]().Name, Marshal.GetLastWin32Error())) + End If + + Debug.Print("{0} Init: handle 0x{1:X16}", [GetType]().Name, mHandleStruct.Pointer.ToInt64()) + Return True + End Function + + #Region "Public Members" + + ''' Creates a new hot-plug handle for USB device arrival/removal event monitoring. + Public Sub New(ByRef InitParams As KHOT_PARAMS) + Dim success As Boolean = AllKFunctions.HotK_Init(mHandleStruct, InitParams) + + If Not success Then + Throw New Exception(String.Format("{0} failed initializing. ErrorCode={1:X8}h", [GetType]().Name, Marshal.GetLastWin32Error())) + End If + + Debug.Print("{0} Init: handle 0x{1:X16}", [GetType]().Name, mHandleStruct.Pointer.ToInt64()) + End Sub + + ''' Calls the dispose method. + Public Overridable Sub Free() + Dispose() + End Sub + + ''' Frees all hot-plug handles initialized with \ref HotK_Init. + Public Overridable Sub FreeAll() + AllKFunctions.HotK_FreeAll() + End Sub + + ''' Gets the handle class structure. + Public ReadOnly Property Handle() As KHOT_HANDLE + Get + Return mHandleStruct + End Get + End Property + + #End Region + End Class + + Public Class UsbK + Implements IDisposable + Protected driverAPI As KUSB_DRIVER_API + Protected mHandleStruct As KUSB_HANDLE + Protected mbDisposed As Boolean + + Protected Sub New() + End Sub + + #Region "IDisposable Members" + + ''' Explicitly closes and frees the handle. + Public Overridable Sub Dispose() Implements IDisposable.Dispose + Dispose(True) + GC.SuppressFinalize(Me) + End Sub + + #End Region + + Protected Overrides Sub Finalize() + Try + Dispose(False) + Finally + MyBase.Finalize() + End Try + End Sub + + Protected Overridable Sub Dispose(disposing As Boolean) + If Not mbDisposed Then + If mHandleStruct.Pointer <> IntPtr.Zero Then + AllKFunctions.UsbK_Free(mHandleStruct) + Debug.Print("{0} Dispose: Freed Handle:{1:X16}h Explicit:{2}", [GetType]().Name, mHandleStruct.Pointer.ToInt64(), disposing) + Else + Debug.Print("{0} Dispose: [WARNING] Handle is null", [GetType]().Name) + End If + + mHandleStruct = New KUSB_HANDLE(IntPtr.Zero) + mbDisposed = True + End If + End Sub + + ''' Creates/opens a libusbK interface handle from the device list. This is a preferred method. + Protected Function Init(DevInfo As KLST_DEVINFO_HANDLE) As Boolean + Dim success As Boolean = AllKFunctions.LibK_LoadDriverAPI(driverAPI, DevInfo.DriverID) + + If Not success Then + Throw New Exception(String.Format("{0} failed loading Driver API. ErrorCode={1:X8}h", [GetType]().Name, Marshal.GetLastWin32Error())) + End If + + success = driverAPI.Init(mHandleStruct, DevInfo) + + If Not success Then + Throw New Exception(String.Format("{0} failed initializing usb device. ErrorCode={1:X8}h", [GetType]().Name, Marshal.GetLastWin32Error())) + End If + + Debug.Print("{0} Init: handle 0x{1:X16}", [GetType]().Name, mHandleStruct.Pointer.ToInt64()) + Return True + End Function + + ''' Creates a libusbK handle for the device specified by a file handle. + Protected Function Initialize(DeviceHandle As IntPtr, driverID As KUSB_DRVID) As Boolean + Dim success As Boolean = AllKFunctions.LibK_LoadDriverAPI(driverAPI, CInt(driverID)) + + If Not success Then + Throw New Exception(String.Format("{0} failed loading Driver API. ErrorCode={1:X8}h", [GetType]().Name, Marshal.GetLastWin32Error())) + End If + + success = driverAPI.Initialize(DeviceHandle, mHandleStruct) + + If Not success Then + Throw New Exception(String.Format("{0} failed initializing usb device. ErrorCode={1:X8}h", [GetType]().Name, Marshal.GetLastWin32Error())) + End If + + Debug.Print("{0} Init: handle 0x{1:X16}", [GetType]().Name, mHandleStruct.Pointer.ToInt64()) + Return True + End Function + + #Region "Public Members" + + ''' Creates/opens a libusbK interface handle from the device list. This is a preferred method. + Public Sub New(DevInfo As KLST_DEVINFO_HANDLE) + Dim success As Boolean = AllKFunctions.LibK_LoadDriverAPI(driverAPI, DevInfo.DriverID) + + If Not success Then + Throw New Exception(String.Format("{0} failed loading Driver API. ErrorCode={1:X8}h", [GetType]().Name, Marshal.GetLastWin32Error())) + End If + + success = driverAPI.Init(mHandleStruct, DevInfo) + + If Not success Then + Throw New Exception(String.Format("{0} failed initializing usb device. ErrorCode={1:X8}h", [GetType]().Name, Marshal.GetLastWin32Error())) + End If + + Debug.Print("{0} Init: handle 0x{1:X16}", [GetType]().Name, mHandleStruct.Pointer.ToInt64()) + End Sub + + ''' Creates a libusbK handle for the device specified by a file handle. + Public Sub New(DeviceHandle As IntPtr, driverID As KUSB_DRVID) + Dim success As Boolean = AllKFunctions.LibK_LoadDriverAPI(driverAPI, CInt(driverID)) + + If Not success Then + Throw New Exception(String.Format("{0} failed loading Driver API. ErrorCode={1:X8}h", [GetType]().Name, Marshal.GetLastWin32Error())) + End If + + success = driverAPI.Initialize(DeviceHandle, mHandleStruct) + + If Not success Then + Throw New Exception(String.Format("{0} failed initializing usb device. ErrorCode={1:X8}h", [GetType]().Name, Marshal.GetLastWin32Error())) + End If + + Debug.Print("{0} Init: handle 0x{1:X16}", [GetType]().Name, mHandleStruct.Pointer.ToInt64()) + End Sub + + ''' Aborts all of the pending transfers for a pipe. + Public Overridable Function AbortPipe(PipeID As Byte) As Boolean + Return driverAPI.AbortPipe(mHandleStruct, PipeID) + End Function + + ''' Claims the specified interface by number or index. + Public Overridable Function ClaimInterface(NumberOrIndex As Byte, IsIndex As Boolean) As Boolean + Return driverAPI.ClaimInterface(mHandleStruct, NumberOrIndex, IsIndex) + End Function + + ''' Clones the specified interface handle. + Public Overridable Function Clone(ByRef DstInterfaceHandle As KUSB_HANDLE) As Boolean + Return driverAPI.Clone(mHandleStruct, DstInterfaceHandle) + End Function + + ''' Transmits control data over a default control endpoint. + Public Overridable Function ControlTransfer(SetupPacket As WINUSB_SETUP_PACKET, Buffer As IntPtr, BufferLength As Integer, ByRef LengthTransferred As Integer, Overlapped As IntPtr) As Boolean + Return driverAPI.ControlTransfer(mHandleStruct, SetupPacket, Buffer, BufferLength, LengthTransferred, Overlapped) + End Function + + ''' Transmits control data over a default control endpoint. + Public Overridable Function ControlTransfer(SetupPacket As WINUSB_SETUP_PACKET, Buffer As Array, BufferLength As Integer, ByRef LengthTransferred As Integer, Overlapped As IntPtr) As Boolean + Return driverAPI.ControlTransfer(mHandleStruct, SetupPacket, Marshal.UnsafeAddrOfPinnedArrayElement(Buffer, 0), BufferLength, LengthTransferred, Overlapped) + End Function + + ''' Transmits control data over a default control endpoint. + Public Overridable Function ControlTransfer(SetupPacket As WINUSB_SETUP_PACKET, Buffer As Array, BufferLength As Integer, ByRef LengthTransferred As Integer, Overlapped As KOVL_HANDLE) As Boolean + Return driverAPI.ControlTransfer(mHandleStruct, SetupPacket, Marshal.UnsafeAddrOfPinnedArrayElement(Buffer, 0), BufferLength, LengthTransferred, Overlapped.Pointer) + End Function + + ''' Transmits control data over a default control endpoint. + Public Overridable Function ControlTransfer(SetupPacket As WINUSB_SETUP_PACKET, Buffer As IntPtr, BufferLength As Integer, ByRef LengthTransferred As Integer, Overlapped As KOVL_HANDLE) As Boolean + Return driverAPI.ControlTransfer(mHandleStruct, SetupPacket, Buffer, BufferLength, LengthTransferred, Overlapped.Pointer) + End Function + + ''' Discards any data that is cached in a pipe. + Public Overridable Function FlushPipe(PipeID As Byte) As Boolean + Return driverAPI.FlushPipe(mHandleStruct, PipeID) + End Function + + ''' Calls the dispose method. + Public Overridable Sub Free() + Dispose() + End Sub + + ''' Gets the alternate setting for the specified interface. + Public Overridable Function GetAltInterface(NumberOrIndex As Byte, IsIndex As Boolean, ByRef AltSettingNumber As Byte) As Boolean + Return driverAPI.GetAltInterface(mHandleStruct, NumberOrIndex, IsIndex, AltSettingNumber) + End Function + + ''' Retrieves a handle for an associated interface. + Public Overridable Function GetAssociatedInterface(AssociatedInterfaceIndex As Byte, ByRef AssociatedInterfaceHandle As KUSB_HANDLE) As Boolean + Return driverAPI.GetAssociatedInterface(mHandleStruct, AssociatedInterfaceIndex, AssociatedInterfaceHandle) + End Function + + ''' Gets the device current configuration number. + Public Overridable Function GetConfiguration(ByRef ConfigurationNumber As Byte) As Boolean + Return driverAPI.GetConfiguration(mHandleStruct, ConfigurationNumber) + End Function + + ''' Gets the current alternate interface setting for an interface. + Public Overridable Function GetCurrentAlternateSetting(ByRef AltSettingNumber As Byte) As Boolean + Return driverAPI.GetCurrentAlternateSetting(mHandleStruct, AltSettingNumber) + End Function + + ''' Retrieves the current USB frame number. + Public Overridable Function GetCurrentFrameNumber(ByRef FrameNumber As Integer) As Boolean + Return driverAPI.GetCurrentFrameNumber(mHandleStruct, FrameNumber) + End Function + + ''' Gets the requested descriptor. This is a synchronous operation. + Public Overridable Function GetDescriptor(DescriptorType As Byte, Index As Byte, LanguageID As Integer, Buffer As IntPtr, BufferLength As Integer, ByRef LengthTransferred As Integer) As Boolean + Return driverAPI.GetDescriptor(mHandleStruct, DescriptorType, Index, CUShort(LanguageID), Buffer, BufferLength, _ + LengthTransferred) + End Function + + ''' Gets the requested descriptor. This is a synchronous operation. + Public Overridable Function GetDescriptor(DescriptorType As Byte, Index As Byte, LanguageID As Integer, Buffer As Array, BufferLength As Integer, ByRef LengthTransferred As Integer) As Boolean + Return driverAPI.GetDescriptor(mHandleStruct, DescriptorType, Index, CUShort(LanguageID), Marshal.UnsafeAddrOfPinnedArrayElement(Buffer, 0), BufferLength, _ + LengthTransferred) + End Function + + ''' Retrieves the results of an overlapped operation on the specified libusbK handle. + Public Overridable Function GetOverlappedResult(Overlapped As IntPtr, ByRef lpNumberOfBytesTransferred As Integer, bWait As Boolean) As Boolean + Return driverAPI.GetOverlappedResult(mHandleStruct, Overlapped, lpNumberOfBytesTransferred, bWait) + End Function + + ''' Retrieves the results of an overlapped operation on the specified libusbK handle. + Public Overridable Function GetOverlappedResult(Overlapped As KOVL_HANDLE, ByRef lpNumberOfBytesTransferred As Integer, bWait As Boolean) As Boolean + Return driverAPI.GetOverlappedResult(mHandleStruct, Overlapped.Pointer, lpNumberOfBytesTransferred, bWait) + End Function + + ''' Gets the policy for a specific pipe (endpoint). + Public Overridable Function GetPipePolicy(PipeID As Byte, PolicyType As Integer, ByRef ValueLength As Integer, Value As IntPtr) As Boolean + Return driverAPI.GetPipePolicy(mHandleStruct, PipeID, PolicyType, ValueLength, Value) + End Function + + ''' Gets the policy for a specific pipe (endpoint). + Public Overridable Function GetPipePolicy(PipeID As Byte, PolicyType As Integer, ByRef ValueLength As Integer, Value As Array) As Boolean + Return driverAPI.GetPipePolicy(mHandleStruct, PipeID, PolicyType, ValueLength, Marshal.UnsafeAddrOfPinnedArrayElement(Value, 0)) + End Function + + ''' Gets the power policy for a device. + Public Overridable Function GetPowerPolicy(PolicyType As Integer, ByRef ValueLength As Integer, Value As IntPtr) As Boolean + Return driverAPI.GetPowerPolicy(mHandleStruct, PolicyType, ValueLength, Value) + End Function + + ''' Gets the power policy for a device. + Public Overridable Function GetPowerPolicy(PolicyType As Integer, ByRef ValueLength As Integer, Value As Array) As Boolean + Return driverAPI.GetPowerPolicy(mHandleStruct, PolicyType, ValueLength, Marshal.UnsafeAddrOfPinnedArrayElement(Value, 0)) + End Function + + ''' Gets a USB device (driver specific) property from usb handle. + Public Overridable Function GetProperty(PropertyType As KUSB_PROPERTY, ByRef PropertySize As Integer, Value As IntPtr) As Boolean + Return driverAPI.GetProperty(mHandleStruct, PropertyType, PropertySize, Value) + End Function + + ''' Gets a USB device (driver specific) property from usb handle. + Public Overridable Function GetProperty(PropertyType As KUSB_PROPERTY, ByRef PropertySize As Integer, Value As Array) As Boolean + Return driverAPI.GetProperty(mHandleStruct, PropertyType, PropertySize, Marshal.UnsafeAddrOfPinnedArrayElement(Value, 0)) + End Function + + ''' Gets the handle class structure. + Public ReadOnly Property Handle() As KUSB_HANDLE + Get + Return mHandleStruct + End Get + End Property + + ''' Reads from an isochronous pipe. + Public Overridable Function IsoReadPipe(PipeID As Byte, Buffer As IntPtr, BufferLength As Integer, Overlapped As IntPtr, IsoContext As KISO_CONTEXT) As Boolean + Return driverAPI.IsoReadPipe(mHandleStruct, PipeID, Buffer, BufferLength, Overlapped, IsoContext) + End Function + + ''' Reads from an isochronous pipe. + Public Overridable Function IsoReadPipe(PipeID As Byte, Buffer As Array, BufferLength As Integer, Overlapped As IntPtr, IsoContext As KISO_CONTEXT) As Boolean + Return driverAPI.IsoReadPipe(mHandleStruct, PipeID, Marshal.UnsafeAddrOfPinnedArrayElement(Buffer, 0), BufferLength, Overlapped, IsoContext) + End Function + + ''' Reads from an isochronous pipe. + Public Overridable Function IsoReadPipe(PipeID As Byte, Buffer As Array, BufferLength As Integer, Overlapped As KOVL_HANDLE, IsoContext As KISO_CONTEXT) As Boolean + Return driverAPI.IsoReadPipe(mHandleStruct, PipeID, Marshal.UnsafeAddrOfPinnedArrayElement(Buffer, 0), BufferLength, Overlapped.Pointer, IsoContext) + End Function + + ''' Reads from an isochronous pipe. + Public Overridable Function IsoReadPipe(PipeID As Byte, Buffer As IntPtr, BufferLength As Integer, Overlapped As KOVL_HANDLE, IsoContext As KISO_CONTEXT) As Boolean + Return driverAPI.IsoReadPipe(mHandleStruct, PipeID, Buffer, BufferLength, Overlapped.Pointer, IsoContext) + End Function + + ''' Writes to an isochronous pipe. + Public Overridable Function IsoWritePipe(PipeID As Byte, Buffer As IntPtr, BufferLength As Integer, Overlapped As IntPtr, IsoContext As KISO_CONTEXT) As Boolean + Return driverAPI.IsoWritePipe(mHandleStruct, PipeID, Buffer, BufferLength, Overlapped, IsoContext) + End Function + + ''' Writes to an isochronous pipe. + Public Overridable Function IsoWritePipe(PipeID As Byte, Buffer As Array, BufferLength As Integer, Overlapped As IntPtr, IsoContext As KISO_CONTEXT) As Boolean + Return driverAPI.IsoWritePipe(mHandleStruct, PipeID, Marshal.UnsafeAddrOfPinnedArrayElement(Buffer, 0), BufferLength, Overlapped, IsoContext) + End Function + + ''' Writes to an isochronous pipe. + Public Overridable Function IsoWritePipe(PipeID As Byte, Buffer As Array, BufferLength As Integer, Overlapped As KOVL_HANDLE, IsoContext As KISO_CONTEXT) As Boolean + Return driverAPI.IsoWritePipe(mHandleStruct, PipeID, Marshal.UnsafeAddrOfPinnedArrayElement(Buffer, 0), BufferLength, Overlapped.Pointer, IsoContext) + End Function + + ''' Writes to an isochronous pipe. + Public Overridable Function IsoWritePipe(PipeID As Byte, Buffer As IntPtr, BufferLength As Integer, Overlapped As KOVL_HANDLE, IsoContext As KISO_CONTEXT) As Boolean + Return driverAPI.IsoWritePipe(mHandleStruct, PipeID, Buffer, BufferLength, Overlapped.Pointer, IsoContext) + End Function + + ''' Retrieves information about the physical device that is associated with a libusbK handle. + Public Overridable Function QueryDeviceInformation(InformationType As Integer, ByRef BufferLength As Integer, Buffer As IntPtr) As Boolean + Return driverAPI.QueryDeviceInformation(mHandleStruct, InformationType, BufferLength, Buffer) + End Function + + ''' Retrieves the interface descriptor for the specified alternate interface settings for a particular interface handle. + Public Overridable Function QueryInterfaceSettings(AltSettingIndex As Byte, ByRef UsbAltInterfaceDescriptor As USB_INTERFACE_DESCRIPTOR) As Boolean + Return driverAPI.QueryInterfaceSettings(mHandleStruct, AltSettingIndex, UsbAltInterfaceDescriptor) + End Function + + ''' Retrieves information about a pipe that is associated with an interface. + Public Overridable Function QueryPipe(AltSettingNumber As Byte, PipeIndex As Byte, ByRef PipeInformation As WINUSB_PIPE_INFORMATION) As Boolean + Return driverAPI.QueryPipe(mHandleStruct, AltSettingNumber, PipeIndex, PipeInformation) + End Function + + ''' Reads data from the specified pipe. + Public Overridable Function ReadPipe(PipeID As Byte, Buffer As IntPtr, BufferLength As Integer, ByRef LengthTransferred As Integer, Overlapped As IntPtr) As Boolean + Return driverAPI.ReadPipe(mHandleStruct, PipeID, Buffer, BufferLength, LengthTransferred, Overlapped) + End Function + + ''' Reads data from the specified pipe. + Public Overridable Function ReadPipe(PipeID As Byte, Buffer As Array, BufferLength As Integer, ByRef LengthTransferred As Integer, Overlapped As IntPtr) As Boolean + Return driverAPI.ReadPipe(mHandleStruct, PipeID, Marshal.UnsafeAddrOfPinnedArrayElement(Buffer, 0), BufferLength, LengthTransferred, Overlapped) + End Function + + ''' Reads data from the specified pipe. + Public Overridable Function ReadPipe(PipeID As Byte, Buffer As Array, BufferLength As Integer, ByRef LengthTransferred As Integer, Overlapped As KOVL_HANDLE) As Boolean + Return driverAPI.ReadPipe(mHandleStruct, PipeID, Marshal.UnsafeAddrOfPinnedArrayElement(Buffer, 0), BufferLength, LengthTransferred, Overlapped.Pointer) + End Function + + ''' Reads data from the specified pipe. + Public Overridable Function ReadPipe(PipeID As Byte, Buffer As IntPtr, BufferLength As Integer, ByRef LengthTransferred As Integer, Overlapped As KOVL_HANDLE) As Boolean + Return driverAPI.ReadPipe(mHandleStruct, PipeID, Buffer, BufferLength, LengthTransferred, Overlapped.Pointer) + End Function + + ''' Releases the specified interface by number or index. + Public Overridable Function ReleaseInterface(NumberOrIndex As Byte, IsIndex As Boolean) As Boolean + Return driverAPI.ReleaseInterface(mHandleStruct, NumberOrIndex, IsIndex) + End Function + + ''' Resets the usb device of the specified interface handle. (port cycle). + Public Overridable Function ResetDevice() As Boolean + Return driverAPI.ResetDevice(mHandleStruct) + End Function + + ''' Resets the data toggle and clears the stall condition on a pipe. + Public Overridable Function ResetPipe(PipeID As Byte) As Boolean + Return driverAPI.ResetPipe(mHandleStruct, PipeID) + End Function + + ''' Selects the specified interface by number or index as the current interface. + Public Overridable Function SelectInterface(NumberOrIndex As Byte, IsIndex As Boolean) As Boolean + Return driverAPI.SelectInterface(mHandleStruct, NumberOrIndex, IsIndex) + End Function + + ''' Sets the alternate setting of the specified interface. + Public Overridable Function SetAltInterface(NumberOrIndex As Byte, IsIndex As Boolean, AltSettingNumber As Byte) As Boolean + Return driverAPI.SetAltInterface(mHandleStruct, NumberOrIndex, IsIndex, AltSettingNumber) + End Function + + ''' Sets the device configuration number. + Public Overridable Function SetConfiguration(ConfigurationNumber As Byte) As Boolean + Return driverAPI.SetConfiguration(mHandleStruct, ConfigurationNumber) + End Function + + ''' Sets the alternate setting of an interface. + Public Overridable Function SetCurrentAlternateSetting(AltSettingNumber As Byte) As Boolean + Return driverAPI.SetCurrentAlternateSetting(mHandleStruct, AltSettingNumber) + End Function + + ''' Sets the policy for a specific pipe associated with an endpoint on the device. This is a synchronous operation. + Public Overridable Function SetPipePolicy(PipeID As Byte, PolicyType As Integer, ValueLength As Integer, Value As IntPtr) As Boolean + Return driverAPI.SetPipePolicy(mHandleStruct, PipeID, PolicyType, ValueLength, Value) + End Function + + ''' Sets the policy for a specific pipe associated with an endpoint on the device. This is a synchronous operation. + Public Overridable Function SetPipePolicy(PipeID As Byte, PolicyType As Integer, ValueLength As Integer, Value As Array) As Boolean + Return driverAPI.SetPipePolicy(mHandleStruct, PipeID, PolicyType, ValueLength, Marshal.UnsafeAddrOfPinnedArrayElement(Value, 0)) + End Function + + ''' Sets the power policy for a device. + Public Overridable Function SetPowerPolicy(PolicyType As Integer, ValueLength As Integer, Value As IntPtr) As Boolean + Return driverAPI.SetPowerPolicy(mHandleStruct, PolicyType, ValueLength, Value) + End Function + + ''' Sets the power policy for a device. + Public Overridable Function SetPowerPolicy(PolicyType As Integer, ValueLength As Integer, Value As Array) As Boolean + Return driverAPI.SetPowerPolicy(mHandleStruct, PolicyType, ValueLength, Marshal.UnsafeAddrOfPinnedArrayElement(Value, 0)) + End Function + + ''' Writes data to a pipe. + Public Overridable Function WritePipe(PipeID As Byte, Buffer As IntPtr, BufferLength As Integer, ByRef LengthTransferred As Integer, Overlapped As IntPtr) As Boolean + Return driverAPI.WritePipe(mHandleStruct, PipeID, Buffer, BufferLength, LengthTransferred, Overlapped) + End Function + + ''' Writes data to a pipe. + Public Overridable Function WritePipe(PipeID As Byte, Buffer As Array, BufferLength As Integer, ByRef LengthTransferred As Integer, Overlapped As IntPtr) As Boolean + Return driverAPI.WritePipe(mHandleStruct, PipeID, Marshal.UnsafeAddrOfPinnedArrayElement(Buffer, 0), BufferLength, LengthTransferred, Overlapped) + End Function + + ''' Writes data to a pipe. + Public Overridable Function WritePipe(PipeID As Byte, Buffer As Array, BufferLength As Integer, ByRef LengthTransferred As Integer, Overlapped As KOVL_HANDLE) As Boolean + Return driverAPI.WritePipe(mHandleStruct, PipeID, Marshal.UnsafeAddrOfPinnedArrayElement(Buffer, 0), BufferLength, LengthTransferred, Overlapped.Pointer) + End Function + + ''' Writes data to a pipe. + Public Overridable Function WritePipe(PipeID As Byte, Buffer As IntPtr, BufferLength As Integer, ByRef LengthTransferred As Integer, Overlapped As KOVL_HANDLE) As Boolean + Return driverAPI.WritePipe(mHandleStruct, PipeID, Buffer, BufferLength, LengthTransferred, Overlapped.Pointer) + End Function + + #End Region + End Class + + Public Class OvlK + Implements IDisposable + Protected mHandleStruct As KOVL_POOL_HANDLE + Protected mbDisposed As Boolean + + Protected Sub New() + End Sub + + #Region "IDisposable Members" + + ''' Explicitly closes and frees the handle. + Public Overridable Sub Dispose() Implements IDisposable.Dispose + Dispose(True) + GC.SuppressFinalize(Me) + End Sub + + #End Region + + Protected Overrides Sub Finalize() + Try + Dispose(False) + Finally + MyBase.Finalize() + End Try + End Sub + + Protected Overridable Sub Dispose(disposing As Boolean) + If Not mbDisposed Then + If mHandleStruct.Pointer <> IntPtr.Zero Then + AllKFunctions.OvlK_Free(mHandleStruct) + Debug.Print("{0} Dispose: Freed Handle:{1:X16}h Explicit:{2}", [GetType]().Name, mHandleStruct.Pointer.ToInt64(), disposing) + Else + Debug.Print("{0} Dispose: [WARNING] Handle is null", [GetType]().Name) + End If + + mHandleStruct = New KOVL_POOL_HANDLE(IntPtr.Zero) + mbDisposed = True + End If + End Sub + + ''' Creates a new overlapped pool. + Protected Function Init(UsbHandle As KUSB_HANDLE, MaxOverlappedCount As Integer, Flags As KOVL_POOL_FLAG) As Boolean + Dim success As Boolean = AllKFunctions.OvlK_Init(mHandleStruct, UsbHandle, MaxOverlappedCount, Flags) + + If Not success Then + Throw New Exception(String.Format("{0} failed initializing. ErrorCode={1:X8}h", [GetType]().Name, Marshal.GetLastWin32Error())) + End If + + Debug.Print("{0} Init: handle 0x{1:X16}", [GetType]().Name, mHandleStruct.Pointer.ToInt64()) + Return True + End Function + + #Region "Public Members" + + ''' Creates a new overlapped pool. + Public Sub New(UsbHandle As KUSB_HANDLE, MaxOverlappedCount As Integer, Flags As KOVL_POOL_FLAG) + Dim success As Boolean = AllKFunctions.OvlK_Init(mHandleStruct, UsbHandle, MaxOverlappedCount, Flags) + + If Not success Then + Throw New Exception(String.Format("{0} failed initializing. ErrorCode={1:X8}h", [GetType]().Name, Marshal.GetLastWin32Error())) + End If + + Debug.Print("{0} Init: handle 0x{1:X16}", [GetType]().Name, mHandleStruct.Pointer.ToInt64()) + End Sub + + ''' Gets a preallocated \c OverlappedK structure from the specified/default pool. + Public Overridable Function Acquire(ByRef OverlappedK As KOVL_HANDLE) As Boolean + Return AllKFunctions.OvlK_Acquire(OverlappedK, mHandleStruct) + End Function + + ''' Calls the dispose method. + Public Overridable Sub Free() + Dispose() + End Sub + + ''' Returns the internal event handle used to signal IO operations. + Public Overridable Function GetEventHandle(OverlappedK As KOVL_HANDLE) As IntPtr + Return AllKFunctions.OvlK_GetEventHandle(OverlappedK) + End Function + + ''' Gets the handle class structure. + Public ReadOnly Property Handle() As KOVL_POOL_HANDLE + Get + Return mHandleStruct + End Get + End Property + + ''' Checks for i/o completion; returns immediately. (polling) + Public Overridable Function IsComplete(OverlappedK As KOVL_HANDLE) As Boolean + Return AllKFunctions.OvlK_IsComplete(OverlappedK) + End Function + + ''' Initializes an overlappedK for re-use. The overlappedK is not return to its pool. + Public Overridable Function ReUse(OverlappedK As KOVL_HANDLE) As Boolean + Return AllKFunctions.OvlK_ReUse(OverlappedK) + End Function + + ''' Returns an \c OverlappedK structure to it's pool. + Public Overridable Function Release(OverlappedK As KOVL_HANDLE) As Boolean + Return AllKFunctions.OvlK_Release(OverlappedK) + End Function + + ''' Waits for overlapped I/O completion, and performs actions specified in \c WaitFlags. + Public Overridable Function Wait(OverlappedK As KOVL_HANDLE, TimeoutMS As Integer, WaitFlags As KOVL_WAIT_FLAG, ByRef TransferredLength As Integer) As Boolean + Return AllKFunctions.OvlK_Wait(OverlappedK, TimeoutMS, WaitFlags, TransferredLength) + End Function + + ''' Waits for overlapped I/O completion, cancels on a timeout error and always releases the OvlK handle back to its pool. + Public Overridable Function WaitAndRelease(OverlappedK As KOVL_HANDLE, TimeoutMS As Integer, ByRef TransferredLength As Integer) As Boolean + Return AllKFunctions.OvlK_WaitAndRelease(OverlappedK, TimeoutMS, TransferredLength) + End Function + + ''' Waits for overlapped I/O completion on the oldest acquired OverlappedK handle and performs actions specified in \c WaitFlags. + Public Overridable Function WaitOldest(ByRef OverlappedK As KOVL_HANDLE, TimeoutMS As Integer, WaitFlags As KOVL_WAIT_FLAG, ByRef TransferredLength As Integer) As Boolean + Return AllKFunctions.OvlK_WaitOldest(mHandleStruct, OverlappedK, TimeoutMS, WaitFlags, TransferredLength) + End Function + + ''' Waits for overlapped I/O completion, cancels on a timeout error. + Public Overridable Function WaitOrCancel(OverlappedK As KOVL_HANDLE, TimeoutMS As Integer, ByRef TransferredLength As Integer) As Boolean + Return AllKFunctions.OvlK_WaitOrCancel(OverlappedK, TimeoutMS, TransferredLength) + End Function + + #End Region + End Class + + Public Class StmK + Implements IDisposable + Protected mHandleStruct As KSTM_HANDLE + Protected mbDisposed As Boolean + + Protected Sub New() + End Sub + + #Region "IDisposable Members" + + ''' Explicitly closes and frees the handle. + Public Overridable Sub Dispose() Implements IDisposable.Dispose + Dispose(True) + GC.SuppressFinalize(Me) + End Sub + + #End Region + + Protected Overrides Sub Finalize() + Try + Dispose(False) + Finally + MyBase.Finalize() + End Try + End Sub + + Protected Overridable Sub Dispose(disposing As Boolean) + If Not mbDisposed Then + If mHandleStruct.Pointer <> IntPtr.Zero Then + AllKFunctions.StmK_Free(mHandleStruct) + Debug.Print("{0} Dispose: Freed Handle:{1:X16}h Explicit:{2}", [GetType]().Name, mHandleStruct.Pointer.ToInt64(), disposing) + Else + Debug.Print("{0} Dispose: [WARNING] Handle is null", [GetType]().Name) + End If + + mHandleStruct = New KSTM_HANDLE(IntPtr.Zero) + mbDisposed = True + End If + End Sub + + ''' Initializes a new uni-directional pipe stream. + Protected Function Init(UsbHandle As KUSB_HANDLE, PipeID As Byte, MaxTransferSize As Integer, MaxPendingTransfers As Integer, MaxPendingIO As Integer, ByRef Callbacks As KSTM_CALLBACK, _ + Flags As KSTM_FLAG) As Boolean + Dim success As Boolean = AllKFunctions.StmK_Init(mHandleStruct, UsbHandle, PipeID, MaxTransferSize, MaxPendingTransfers, MaxPendingIO, _ + Callbacks, Flags) + + If Not success Then + Throw New Exception(String.Format("{0} failed initializing. ErrorCode={1:X8}h", [GetType]().Name, Marshal.GetLastWin32Error())) + End If + + Debug.Print("{0} Init: handle 0x{1:X16}", [GetType]().Name, mHandleStruct.Pointer.ToInt64()) + Return True + End Function + + #Region "Public Members" + + ''' Initializes a new uni-directional pipe stream. + Public Sub New(UsbHandle As KUSB_HANDLE, PipeID As Byte, MaxTransferSize As Integer, MaxPendingTransfers As Integer, MaxPendingIO As Integer, ByRef Callbacks As KSTM_CALLBACK, _ + Flags As KSTM_FLAG) + Dim success As Boolean = AllKFunctions.StmK_Init(mHandleStruct, UsbHandle, PipeID, MaxTransferSize, MaxPendingTransfers, MaxPendingIO, _ + Callbacks, Flags) + + If Not success Then + Throw New Exception(String.Format("{0} failed initializing. ErrorCode={1:X8}h", [GetType]().Name, Marshal.GetLastWin32Error())) + End If + + Debug.Print("{0} Init: handle 0x{1:X16}", [GetType]().Name, mHandleStruct.Pointer.ToInt64()) + End Sub + + ''' Calls the dispose method. + Public Overridable Sub Free() + Dispose() + End Sub + + ''' Gets the handle class structure. + Public ReadOnly Property Handle() As KSTM_HANDLE + Get + Return mHandleStruct + End Get + End Property + + ''' Reads data from the stream buffer. + Public Overridable Function Read(Buffer As IntPtr, Offset As Integer, Length As Integer, ByRef TransferredLength As Integer) As Boolean + Return AllKFunctions.StmK_Read(mHandleStruct, Buffer, Offset, Length, TransferredLength) + End Function + + ''' Reads data from the stream buffer. + Public Overridable Function Read(Buffer As Array, Offset As Integer, Length As Integer, ByRef TransferredLength As Integer) As Boolean + Return AllKFunctions.StmK_Read(mHandleStruct, Marshal.UnsafeAddrOfPinnedArrayElement(Buffer, 0), Offset, Length, TransferredLength) + End Function + + ''' Starts the internal stream thread. + Public Overridable Function Start() As Boolean + Return AllKFunctions.StmK_Start(mHandleStruct) + End Function + + ''' Stops the internal stream thread. + Public Overridable Function [Stop](TimeoutCancelMS As Integer) As Boolean + Return AllKFunctions.StmK_Stop(mHandleStruct, TimeoutCancelMS) + End Function + + ''' Writes data to the stream buffer. + Public Overridable Function Write(Buffer As IntPtr, Offset As Integer, Length As Integer, ByRef TransferredLength As Integer) As Boolean + Return AllKFunctions.StmK_Write(mHandleStruct, Buffer, Offset, Length, TransferredLength) + End Function + + ''' Writes data to the stream buffer. + Public Overridable Function Write(Buffer As Array, Offset As Integer, Length As Integer, ByRef TransferredLength As Integer) As Boolean + Return AllKFunctions.StmK_Write(mHandleStruct, Marshal.UnsafeAddrOfPinnedArrayElement(Buffer, 0), Offset, Length, TransferredLength) + End Function + + #End Region + End Class + + Public Class IsoK + Implements IDisposable + Protected mHandleStruct As KISO_CONTEXT + Protected mbDisposed As Boolean + + Protected Sub New() + End Sub + + #Region "IDisposable Members" + + ''' Explicitly closes and frees the handle. + Public Overridable Sub Dispose() Implements IDisposable.Dispose + Dispose(True) + GC.SuppressFinalize(Me) + End Sub + + #End Region + + Protected Overrides Sub Finalize() + Try + Dispose(False) + Finally + MyBase.Finalize() + End Try + End Sub + + Protected Overridable Sub Dispose(disposing As Boolean) + If Not mbDisposed Then + If mHandleStruct.Pointer <> IntPtr.Zero Then + AllKFunctions.IsoK_Free(mHandleStruct) + Debug.Print("{0} Dispose: Freed Handle:{1:X16}h Explicit:{2}", [GetType]().Name, mHandleStruct.Pointer.ToInt64(), disposing) + Else + Debug.Print("{0} Dispose: [WARNING] Handle is null", [GetType]().Name) + End If + + mHandleStruct = New KISO_CONTEXT(IntPtr.Zero) + mbDisposed = True + End If + End Sub + + ''' Creates a new isochronous transfer context. + Protected Function Init(NumberOfPackets As Integer, StartFrame As Integer) As Boolean + Dim success As Boolean = AllKFunctions.IsoK_Init(mHandleStruct, NumberOfPackets, StartFrame) + + If Not success Then + Throw New Exception(String.Format("{0} failed initializing. ErrorCode={1:X8}h", [GetType]().Name, Marshal.GetLastWin32Error())) + End If + + Debug.Print("{0} Init: handle 0x{1:X16}", [GetType]().Name, mHandleStruct.Pointer.ToInt64()) + Return True + End Function + + #Region "Nested Structs" + + _ + Private Structure KISO_CONTEXT_MAP + ''' Additional ISO transfer flags. See \ref KISO_FLAG. + Private ReadOnly Flags As KISO_FLAG + + ''' Specifies the frame number that the transfer should begin on (0 for ASAP). + Private ReadOnly StartFrame As Integer + + ''' Contains the number of packets that completed with an error condition on return from the host controller driver. + Private ReadOnly ErrorCount As Short + + ''' Specifies the number of packets that are described by the variable-length array member \c IsoPacket. + Private ReadOnly NumberOfPackets As Short + + ''' Contains the URB Hdr.Status value on return from the host controller driver. + Private ReadOnly UrbHdrStatus As Integer + End Structure + + #End Region + + #Region "Public Members" + + ''' Creates a new isochronous transfer context. + Public Sub New(NumberOfPackets As Integer, StartFrame As Integer) + Dim success As Boolean = AllKFunctions.IsoK_Init(mHandleStruct, NumberOfPackets, StartFrame) + + If Not success Then + Throw New Exception(String.Format("{0} failed initializing. ErrorCode={1:X8}h", [GetType]().Name, Marshal.GetLastWin32Error())) + End If + + Debug.Print("{0} Init: handle 0x{1:X16}", [GetType]().Name, mHandleStruct.Pointer.ToInt64()) + End Sub + + ''' Convenience function for enumerating ISO packets of an isochronous transfer context. + Public Overridable Function EnumPackets(EnumPackets As KISO_ENUM_PACKETS_CB, StartPacketIndex As Integer, UserState As IntPtr) As Boolean + Return AllKFunctions.IsoK_EnumPackets(mHandleStruct, EnumPackets, StartPacketIndex, UserState) + End Function + + ''' Contains the number of packets that completed with an error condition on return from the host controller driver. + Public Property ErrorCount() As Short + Get + Return Marshal.ReadInt16(mHandleStruct.Pointer, ofsErrorCount) + End Get + Set + Marshal.WriteInt16(mHandleStruct.Pointer, ofsErrorCount, value) + End Set + End Property + + ''' Additional ISO transfer flags. See \ref KISO_FLAG. + Public Property Flags() As KISO_FLAG + Get + Return CType(Marshal.ReadInt32(mHandleStruct.Pointer, ofsFlags), KISO_FLAG) + End Get + Set + Marshal.WriteInt32(mHandleStruct.Pointer, ofsFlags, CInt(value)) + End Set + End Property + + ''' Calls the dispose method. + Public Overridable Sub Free() + Dispose() + End Sub + + ''' Convenience function for getting all fields of a \ref KISO_PACKET. + Public Overridable Function GetPacket(PacketIndex As Integer, ByRef IsoPacket As KISO_PACKET) As Boolean + Return AllKFunctions.IsoK_GetPacket(mHandleStruct, PacketIndex, IsoPacket) + End Function + + ''' Gets the handle class structure. + Public ReadOnly Property Handle() As KISO_CONTEXT + Get + Return mHandleStruct + End Get + End Property + + ''' Specifies the number of packets that are described by the variable-length array member \c IsoPacket. + Public Property NumberOfPackets() As Short + Get + Return Marshal.ReadInt16(mHandleStruct.Pointer, ofsNumberOfPackets) + End Get + Set + Marshal.WriteInt16(mHandleStruct.Pointer, ofsNumberOfPackets, value) + End Set + End Property + + ''' Convenience function for re-using an isochronous transfer context in a subsequent request. + Public Overridable Function ReUse() As Boolean + Return AllKFunctions.IsoK_ReUse(mHandleStruct) + End Function + + ''' Convenience function for setting all fields of a \ref KISO_PACKET. + Public Overridable Function SetPacket(PacketIndex As Integer, ByRef IsoPacket As KISO_PACKET) As Boolean + Return AllKFunctions.IsoK_SetPacket(mHandleStruct, PacketIndex, IsoPacket) + End Function + + ''' Convenience function for setting the offset of all ISO packets of an isochronous transfer context. + Public Overridable Function SetPackets(PacketSize As Integer) As Boolean + Return AllKFunctions.IsoK_SetPackets(mHandleStruct, PacketSize) + End Function + + ''' Specifies the frame number that the transfer should begin on (0 for ASAP). + Public Property StartFrame() As Integer + Get + Return Marshal.ReadInt32(mHandleStruct.Pointer, ofsStartFrame) + End Get + Set + Marshal.WriteInt32(mHandleStruct.Pointer, ofsStartFrame, value) + End Set + End Property + + ''' Contains the URB Hdr.Status value on return from the host controller driver. + Public Property UrbHdrStatus() As Integer + Get + Return Marshal.ReadInt32(mHandleStruct.Pointer, ofsUrbHdrStatus) + End Get + Set + Marshal.WriteInt32(mHandleStruct.Pointer, ofsUrbHdrStatus, value) + End Set + End Property + + #End Region + + #Region "Private Members" + + Private Shared ReadOnly ofsErrorCount As Integer = Marshal.OffsetOf(GetType(KISO_CONTEXT_MAP), "ErrorCount").ToInt32() + Private Shared ReadOnly ofsFlags As Integer = Marshal.OffsetOf(GetType(KISO_CONTEXT_MAP), "Flags").ToInt32() + Private Shared ReadOnly ofsNumberOfPackets As Integer = Marshal.OffsetOf(GetType(KISO_CONTEXT_MAP), "NumberOfPackets").ToInt32() + Private Shared ReadOnly ofsStartFrame As Integer = Marshal.OffsetOf(GetType(KISO_CONTEXT_MAP), "StartFrame").ToInt32() + Private Shared ReadOnly ofsUrbHdrStatus As Integer = Marshal.OffsetOf(GetType(KISO_CONTEXT_MAP), "UrbHdrStatus").ToInt32() + + #End Region + End Class +End Namespace diff --git a/Old Matlab Interface/cmeasuretest.m b/Old Matlab Interface/cmeasuretest.m new file mode 100644 index 00000000..d83acd1d --- /dev/null +++ b/Old Matlab Interface/cmeasuretest.m @@ -0,0 +1,66 @@ +vref = 3.3/2; +R4 = 75e3; +R3 = 1e6; +scope_gain = 4; +TOP = 2048; +global saved_waveform_ch1; +global fastmode + +tt = 2.5; +bt = 0.8; +vcc = 3.3; + +tic +top_val = (tt/vref * R4/(R3+R4) * scope_gain * TOP) +bot_val = (bt/vref * R4/(R3+R4) * scope_gain * TOP) + +samples_per_sec = 375000 / (3 * fastmode + 1) +range = length(saved_waveform_ch1) - samples_per_sec / 5 + + +gtt = saved_waveform_ch1(range:end)>top_val; +gtb = saved_waveform_ch1(range:end)hi, 1, 'first') + begin + if ~isempty(first) + draw_triggered; + else + taxis = [] + cool_waveform = [] + update_enable = 0 + pause(0.001) + end + end + end + return + + + diff --git a/Old Matlab Interface/conv_ana_notrig.m b/Old Matlab Interface/conv_ana_notrig.m new file mode 100644 index 00000000..f7569a7d --- /dev/null +++ b/Old Matlab Interface/conv_ana_notrig.m @@ -0,0 +1,28 @@ + global scope_window_time + global gui_delay + + update_enable = 1; + + delay_sec = get(gui_delay, 'Max') - get(gui_delay, 'Value'); + delay_sample = delay_sec*(samplestoshow/scope_window_time); + global scope_filter_value + global scope_filter_enabled + + nshow = 500; + if(scope_filter_enabled) + nshow = nshow + scope_filter_value; + end + + if length(buffer)>samplestoshow + if (samplestoshow>nshow) + temp_waveform = buffer((length(buffer) - samplestoshow - delay_sample):samplestoshow/nshow: (length(buffer) - delay_sample)); + else + temp_waveform = buffer((length(buffer) - samplestoshow - delay_sample): (length(buffer) - delay_sample)); + end + cool_waveform = undofrontend(temp_waveform, channel); + taxis = linspace(-scope_window_time-delay_sec,-delay_sec,length(cool_waveform)); + return + end + + taxis = []; + cool_waveform = []; diff --git a/Old Matlab Interface/conv_dig.m b/Old Matlab Interface/conv_dig.m new file mode 100644 index 00000000..3e1285c0 --- /dev/null +++ b/Old Matlab Interface/conv_dig.m @@ -0,0 +1,35 @@ +function [taxis, temp_waveform] = conv_dig(buffer, samplestoshow) +global scope_window_time +global gui_delay + +delay_sec = get(gui_delay, 'Max') - get(gui_delay, 'Value'); +delay_sample = delay_sec*(samplestoshow/scope_window_time); + +if length(buffer)>samplestoshow + if (scope_window_time>(500/375000)) + temp_waveform = buffer((length(buffer) - samplestoshow - delay_sample):samplestoshow/500: (length(buffer) - delay_sample)); + temp_waveform = typecast(temp_waveform, 'uint8'); + temp_waveform = logical(bitand(temp_waveform,16)); + else + throwaway = round((ceil(samplestoshow)-samplestoshow)*8); + dig_samples = buffer((length(buffer) - samplestoshow - delay_sample) : (length(buffer) - delay_sample)); + dig_samples = typecast(dig_samples, 'uint8'); + temp_waveform = false(1,length(dig_samples)*8); + temp_waveform(1:8:length(temp_waveform)) = bitand(dig_samples,128); + temp_waveform(2:8:length(temp_waveform)) = bitand(dig_samples,64); + temp_waveform(3:8:length(temp_waveform)) = bitand(dig_samples,32); + temp_waveform(4:8:length(temp_waveform)) = bitand(dig_samples,16); + temp_waveform(5:8:length(temp_waveform)) = bitand(dig_samples,8); + temp_waveform(6:8:length(temp_waveform)) = bitand(dig_samples,4); + temp_waveform(7:8:length(temp_waveform)) = bitand(dig_samples,2); + temp_waveform(8:8:length(temp_waveform)) = bitand(dig_samples,1); + + temp_waveform = temp_waveform((throwaway+1):end); + temp_waveform = temp_waveform(1:length(temp_waveform)/500:end); + end + taxis = linspace(-scope_window_time-delay_sec,-delay_sec,length(temp_waveform)); + return +end + +taxis = []; +temp_waveform = []; \ No newline at end of file diff --git a/Old Matlab Interface/crash_recover.m b/Old Matlab Interface/crash_recover.m new file mode 100644 index 00000000..f9649c33 --- /dev/null +++ b/Old Matlab Interface/crash_recover.m @@ -0,0 +1,19 @@ +global num_lc +global gui_static_text_scope +global saved_waveform_ch1 +global saved_waveform_ch2 +global usb_handle +global gui_delay + +num_lc = num_lc + 1; +max_n = 100000000; +%USB_POOL_FREE(ovlPool, ovlkHandle_0, ovlkHandle_1, usb_handle); //It +%crashes when I clear the handles. No idea why, but it's fine when I don't +clear usb_handle +set(gui_static_text_scope, 'String', sprintf('THE SCOPE (Reconnected %d times)', num_lc)); +saved_waveform_ch1 = [] +saved_waveform_ch2 = [] +set(gui_delay, 'Value', get(gui_delay, 'Max')); + +mex_usb_iso_loop + diff --git a/Old Matlab Interface/displaypacket.m b/Old Matlab Interface/displaypacket.m new file mode 100644 index 00000000..867ff334 --- /dev/null +++ b/Old Matlab Interface/displaypacket.m @@ -0,0 +1,78 @@ +function [] = displaypacket(new_packets) + +global saved_waveform_ch1 +global saved_waveform_ch2 +global scope_mode +global gui_scope_running +global fastmode + + +%Keep the arrays small(ish) +if length(saved_waveform_ch1)>3.75e6/(16*fastmode) + saved_waveform_ch1 = saved_waveform_ch1(length(saved_waveform_ch1)-3.75e6/(16*fastmode):end); +end +if length(saved_waveform_ch2)>1e6 + saved_waveform_ch2 = saved_waveform_ch2(length(saved_waveform_ch2)-1e6:end); +end + + + +%%Insta-return if scope is paused +if(~gui_scope_running) + return +end + +%%Exception for mode 6 +if (scope_mode == 6) + transfer_contents_temp = []; + for tempovar = 0:length(new_packets)/750 - 1 + transfer_contents_temp = [transfer_contents_temp new_packets((tempovar*750+1):(tempovar*750+748))]; + end + saved_waveform_ch1 = [saved_waveform_ch1 transfer_contents_temp]; + return +end + +%%Exception for mode 7 +if (scope_mode == 7) + new_packets = double(new_packets); + + topbytes = new_packets(~logical(mod(1:length(new_packets),2))); + botbytes = new_packets(logical(mod(1:length(new_packets),2))); + + botbytes = sign(topbytes) .* abs(botbytes); %lower bytes should steal sign info from top byte + + realval = topbytes*16 + botbytes/16; + + transfer_contents_temp = []; + for tempovar = 0:length(realval)/375 - 1 + transfer_contents_temp = [transfer_contents_temp realval((tempovar*375+1):(3*fastmode+1):(tempovar*375+374))]; + end + saved_waveform_ch1 = [saved_waveform_ch1 transfer_contents_temp]; + return +end + + +%%Pull out CH1 data +if scope_mode < 5 + transfer_contents_temp = []; + for tempovar = 0:length(new_packets)/750 - 1 + transfer_contents_temp = [transfer_contents_temp new_packets((tempovar*750+1):(tempovar*750+374))]; + end + saved_waveform_ch1 = [saved_waveform_ch1 transfer_contents_temp]; +end + +%%Pull out CH2 data for relevant states +if (scope_mode == 1 | scope_mode == 2 | scope_mode == 4) + transfer_contents_temp = []; + for tempovar = 0:length(new_packets)/750 - 1 + transfer_contents_temp = [transfer_contents_temp new_packets((tempovar*750+376):(tempovar*750+748))]; + end + saved_waveform_ch2 = [saved_waveform_ch2 transfer_contents_temp]; +end + +% transfer_contents_whole = [transfer_contents_0 transfer_contents_1] +% transfer_contents_temp = []; +% for tempovar = 0:length(transfer_contents_whole)/750 - 1 +% transfer_contents_temp = [transfer_contents_temp transfer_contents_whole((tempovar*750+1):(tempovar*750+748))]; +% end +% plot(transfer_contents_temp) diff --git a/Old Matlab Interface/dofrontend.m b/Old Matlab Interface/dofrontend.m new file mode 100644 index 00000000..4d8d7618 --- /dev/null +++ b/Old Matlab Interface/dofrontend.m @@ -0,0 +1,27 @@ +function [expected] = dofrontend(vin, channel) + +vcc = 3.3; +TOP = 128; +r4 = 75e3; +r3 = 1e6; +r2 = 1e3; +r1 = 1e3; + +global scope_gain_0 +global scope_gain_1 +global CH1_AC +global CH2_AC + +if channel == 1 + scope_gain = scope_gain_1; + AC_offset = CH2_AC * 1.65; +else + scope_gain = scope_gain_0; + AC_offset = CH1_AC * 1.65; +end + +vn = vcc * (r2/(r1+r2)); +vx = vn + (vin - vn) * (r4 / (r3+r4)); +vref = vcc/2; + +expected = int8((vx - vn)/vref * scope_gain * TOP); \ No newline at end of file diff --git a/Old Matlab Interface/dotheplot.m b/Old Matlab Interface/dotheplot.m new file mode 100644 index 00000000..2906160b --- /dev/null +++ b/Old Matlab Interface/dotheplot.m @@ -0,0 +1,8 @@ +global gui_axes + +tic +for n = 1:10 + plot(gui_axes, 1, 1) + drawnow +end +toc \ No newline at end of file diff --git a/Old Matlab Interface/draw_triggered.m b/Old Matlab Interface/draw_triggered.m new file mode 100644 index 00000000..9f980ed9 --- /dev/null +++ b/Old Matlab Interface/draw_triggered.m @@ -0,0 +1,29 @@ +global scope_window_time +global gui_delay +global trigger + +pause(0.001) +%Will be buggy with delay +delay_sec = get(gui_delay, 'Max') - get(gui_delay, 'Value'); +delay_sample = delay_sec*(samplestoshow/scope_window_time); + +first + +if (length(buffer)>samplestoshow) & ((length(buffer) - first) > (floor(samplestoshow/2))) + if (samplestoshow>500) + temp_waveform = buffer((first - floor(samplestoshow/2)) : (samplestoshow/500) : (first + floor(samplestoshow/2))); + else + temp_waveform = buffer((first - floor(samplestoshow/2)) : (first + floor(samplestoshow/2))); + end + trigger.begin = length(buffer) + trigger.state = 0; + update_enable = 1 + cool_waveform = undofrontend(temp_waveform, channel); + taxis = linspace(-scope_window_time-delay_sec,-delay_sec,length(cool_waveform)); + return +end + +update_enable = 0 +taxis = [] +cool_waveform = [] +pause(0.001) \ No newline at end of file diff --git a/Old Matlab Interface/drawdick.m b/Old Matlab Interface/drawdick.m new file mode 100644 index 00000000..930d948b --- /dev/null +++ b/Old Matlab Interface/drawdick.m @@ -0,0 +1,28 @@ +x = -21:20 +leftBall = sqrt(21.^2 - x.^2) +rightBall = fliplr(leftBall) +x = -21:0 + +length = 156 +leftCockHalf = sqrt(21.^2 - x.^2) + length +centreDip = length + 21/2 +rightCockHalf = fliplr(leftCockHalf) + +penis = [leftCockHalf centreDip rightCockHalf] + +cockAndBalls = [leftBall penis rightBall] + +plot(cockAndBalls) +diff = (length + 21 - 128)/2 +axis([-diff, 128 + diff, 0, length + 21]) + +cockAndBalls = cockAndBalls * 255/max(cockAndBalls) +cockAndBalls = uint8(cockAndBalls) + +for i=1:128 + fprintf('%d\t', cockAndBalls(i)) +end + +% length = 156 +% plot([sqrt(21.^2 - [-21:20].^2), [sqrt(21.^2 - [-21:0].^2) + 156, 156 + 21/2, fliplr(sqrt(21.^2 - [-21:0].^2)+156)] fliplr(sqrt(21.^2 - [-21:20].^2))]) +% axis([-(156+21-128)/2, 128 + (156+21-128)/2, 0, length + 21]) diff --git a/Old Matlab Interface/expected_adc.m b/Old Matlab Interface/expected_adc.m new file mode 100644 index 00000000..0a21e192 --- /dev/null +++ b/Old Matlab Interface/expected_adc.m @@ -0,0 +1,9 @@ +function [res] = expected_adc(vout) + +vinp = vout/11; +vinn = 0; +vref = 1.65; +gain = 1; +top = 128; + +res = int16((vinp - vinn)/vref * gain * top); \ No newline at end of file diff --git a/Old Matlab Interface/findtest.m b/Old Matlab Interface/findtest.m new file mode 100644 index 00000000..f86821bd --- /dev/null +++ b/Old Matlab Interface/findtest.m @@ -0,0 +1,6 @@ +a = 324567890; +tic +b = find(a>9999999,1, 'first'); +toc + +b; \ No newline at end of file diff --git a/Old Matlab Interface/first_gui.fig b/Old Matlab Interface/first_gui.fig new file mode 100644 index 0000000000000000000000000000000000000000..b14b8e292a65b26e3f34cba72444147972548e6b GIT binary patch literal 14383 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 literal 0 HcmV?d00001 diff --git a/Old Matlab Interface/first_gui.m b/Old Matlab Interface/first_gui.m new file mode 100644 index 00000000..ae9e431d --- /dev/null +++ b/Old Matlab Interface/first_gui.m @@ -0,0 +1,1425 @@ +function varargout = first_gui(varargin) +% FIRST_GUI MATLAB code for first_gui.fig +% FIRST_GUI, by itself, creates a new FIRST_GUI or raises the existing +% singleton*. +% +% H = FIRST_GUI returns the handle to a new FIRST_GUI or the handle to +% the existing singleton*. +% +% FIRST_GUI('CALLBACK',hObject,eventData,handles,...) calls the local +% function named CALLBACK in FIRST_GUI.M with the given input arguments. +% +% FIRST_GUI('Property','Value',...) creates a new FIRST_GUI or raises the +% existing singleton*. Starting from the left, property value pairs are +% applied to the GUI before first_gui_OpeningFcn gets called. An +% unrecognized property name or invalid value makes property application +% stop. All inputs are passed to first_gui_OpeningFcn via varargin. +% +% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one +% instance to run (singleton)". +% +% See also: GUIDE, GUIDATA, GUIHANDLES + +% Edit the above text to modify the response to help first_gui + +% Last Modified by GUIDE v2.5 26-Feb-2016 12:00:46 + +% Begin initialization code - DO NOT EDIT +gui_Singleton = 1; +gui_State = struct('gui_Name', mfilename, ... + 'gui_Singleton', gui_Singleton, ... + 'gui_OpeningFcn', @first_gui_OpeningFcn, ... + 'gui_OutputFcn', @first_gui_OutputFcn, ... + 'gui_LayoutFcn', [] , ... + 'gui_Callback', []); +if nargin && ischar(varargin{1}) + gui_State.gui_Callback = str2func(varargin{1}); +end + +if nargout + [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); +else + gui_mainfcn(gui_State, varargin{:}); +end +% End initialization code - DO NOT EDIT + + +% --- Executes just before first_gui is made visible. +function first_gui_OpeningFcn(hObject, eventdata, handles, varargin) +% This function has no output args, see OutputFcn. +% hObject handle to figure +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) +% varargin command line arguments to first_gui (see VARARGIN) + +% Choose default command line output for first_gui +handles.output = hObject; + +handles + +movegui(handles.figure1,[128,128]) + +global gui_axes +global gui_delay +global text_box_1 +global text_box_2 +global text_box_c +global gui_figure1 + +text_box_c = handles.text14; + +gui_delay = handles.slider6 +gui_axes = handles.axes1; +text_box_1 = handles.edit1; +text_box_2 = handles.text9; +gui_figure1 = handles.figure1; + + + +%get(handles.axes1) + +% Update handles structure +guidata(hObject, handles); + +% UIWAIT makes first_gui wait for user response (see UIRESUME) +% uiwait(handles.figure1); + + +% --- Outputs from this function are returned to the command line. +function varargout = first_gui_OutputFcn(hObject, eventdata, handles) +% varargout cell array for returning output args (see VARARGOUT); +% hObject handle to figure +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +% Get default command line output from handles structure +varargout{1} = handles.output; + + + +function edit1_Callback(hObject, eventdata, handles) +% hObject handle to edit1 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +% Hints: get(hObject,'String') returns contents of edit1 as text +% str2double(get(hObject,'String')) returns contents of edit1 as a double + + +% --- Executes during object creation, after setting all properties. +function edit1_CreateFcn(hObject, eventdata, handles) +% hObject handle to edit1 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: edit controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end + + + +function edit2_Callback(hObject, eventdata, handles) +% hObject handle to edit2 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +% Hints: get(hObject,'String') returns contents of edit2 as text +% str2double(get(hObject,'String')) returns contents of edit2 as a double + + +% --- Executes during object creation, after setting all properties. +function edit2_CreateFcn(hObject, eventdata, handles) +% hObject handle to edit2 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: edit controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end + + + +function edit3_Callback(hObject, eventdata, handles) +% hObject handle to edit3 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +% Hints: get(hObject,'String') returns contents of edit3 as text +% str2double(get(hObject,'String')) returns contents of edit3 as a double + + +% --- Executes during object creation, after setting all properties. +function edit3_CreateFcn(hObject, eventdata, handles) +% hObject handle to edit3 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: edit controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end + + + +function edit4_Callback(hObject, eventdata, handles) +% hObject handle to edit4 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +% Hints: get(hObject,'String') returns contents of edit4 as text +% str2double(get(hObject,'String')) returns contents of edit4 as a double + + +% --- Executes during object creation, after setting all properties. +function edit4_CreateFcn(hObject, eventdata, handles) +% hObject handle to edit4 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: edit controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end + + +% --- Executes on slider movement. +function slider1_Callback(hObject, eventdata, handles) +global scope_window_time +global gui_delay +% hObject handle to slider1 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) +scope_window_time = 10^(-get(hObject, 'value')) +set(gui_delay, 'SliderStep', [scope_window_time/100, scope_window_time/10]); +% Hints: get(hObject,'Value') returns position of slider +% get(hObject,'Min') and get(hObject,'Max') to determine range of slider + + +% --- Executes during object creation, after setting all properties. +function slider1_CreateFcn(hObject, eventdata, handles) +% hObject handle to slider1 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: slider controls usually have a light gray background. +if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor',[.9 .9 .9]); +end + + + +function edit5_Callback(hObject, eventdata, handles) +% hObject handle to edit5 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +% Hints: get(hObject,'String') returns contents of edit5 as text +% str2double(get(hObject,'String')) returns contents of edit5 as a double + + +% --- Executes during object creation, after setting all properties. +function edit5_CreateFcn(hObject, eventdata, handles) +% hObject handle to edit5 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: edit controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end + + +% --- Executes on button press in pushbutton1. +function pushbutton1_Callback(hObject, eventdata, handles) +% hObject handle to pushbutton1 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + + +% --- Executes on slider movement. +function slider2_Callback(hObject, eventdata, handles) +% hObject handle to slider2 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +global gui_hori_cursor_a_pos +global scope_window_max +global scope_window_min +global text_box_2 +global gui_cursor_mode + +gui_hori_cursor_a_pos = scope_window_min + (scope_window_max - scope_window_min) * get(hObject,'Value'); + +global gui_hori_cursor_b_pos +global gui_vert_cursor_a_pos +global gui_vert_cursor_b_pos +switch gui_cursor_mode + case 1 + set(text_box_2, 'String', sprintf(' Vertical Cursor Disabled\n Vertical Cursor Disabled\n Vertical Cursor Disabled\n \n Horizontal cursor disabled \n Horizontal cursor disabled \n Horizontal cursor disabled \n ')) + case 2 + set(text_box_2, 'String', sprintf(' Vertical Cursor Disabled\n Vertical Cursor Disabled\n Vertical Cursor Disabled\n \n V1 = %s\n V2 = %s\n DeltaV = %s\n', sisprintf(gui_hori_cursor_a_pos,'V',3), sisprintf(gui_hori_cursor_b_pos,'V',3), sisprintf(gui_hori_cursor_a_pos - gui_hori_cursor_b_pos,'V',3))) + case 3 + set(text_box_2, 'String', sprintf(' T1 = %s\n T2 = %s\n DeltaT = %s\n \n Horizontal cursor disabled \n Horizontal cursor disabled \n Horizontal cursor disabled \n ', sisprintf(gui_vert_cursor_a_pos,'s',3), sisprintf(gui_vert_cursor_b_pos,'s',3), sisprintf(gui_vert_cursor_a_pos - gui_vert_cursor_b_pos,'s',3))) + case 4 + set(text_box_2, 'String', sprintf(' T1 = %s\n T2 = %s\n DeltaT = %s\n \n V1 = %s\n V2 = %s\n DeltaV = %s\n', sisprintf(gui_vert_cursor_a_pos,'s',3), sisprintf(gui_vert_cursor_b_pos,'s',3), sisprintf(gui_vert_cursor_a_pos - gui_vert_cursor_b_pos,'s',3), sisprintf(gui_hori_cursor_a_pos,'v',3), sisprintf(gui_hori_cursor_b_pos,'v',3), sisprintf(gui_hori_cursor_a_pos - gui_hori_cursor_b_pos,'v',3))) + otherwise error('Gui_cursor_mode is invalid') +end +% Hints: get(hObject,'Value') returns position of slider +% get(hObject,'Min') and get(hObject,'Max') to determine range of slider + + +% --- Executes during object creation, after setting all properties. +function slider2_CreateFcn(hObject, eventdata, handles) +% hObject handle to slider2 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: slider controls usually have a light gray background. +if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor',[.9 .9 .9]); +end + + +% --- Executes on selection change in popupmenu1. +function popupmenu1_Callback(hObject, eventdata, handles) +% hObject handle to popupmenu1 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +global gui_cursor_mode +gui_cursor_mode = get(hObject,'Value') + +% Hints: contents = cellstr(get(hObject,'String')) returns popupmenu1 contents as cell array +% contents{get(hObject,'Value')} returns selected item from popupmenu1 + + +% --- Executes during object creation, after setting all properties. +function popupmenu1_CreateFcn(hObject, eventdata, handles) +% hObject handle to popupmenu1 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: popupmenu controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end + + +% --- Executes on slider movement. +function slider3_Callback(hObject, eventdata, handles) +% hObject handle to slider3 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +global gui_hori_cursor_b_pos +global scope_window_max +global scope_window_min +global text_box_2 +global gui_cursor_mode + +gui_hori_cursor_b_pos = scope_window_min + (scope_window_max - scope_window_min) * get(hObject,'Value'); + +global gui_hori_cursor_a_pos +global gui_vert_cursor_a_pos +global gui_vert_cursor_b_pos +switch gui_cursor_mode + case 1 + set(text_box_2, 'String', sprintf(' Vertical Cursor Disabled\n Vertical Cursor Disabled\n Vertical Cursor Disabled\n \n Horizontal cursor disabled \n Horizontal cursor disabled \n Horizontal cursor disabled \n ')) + case 2 + set(text_box_2, 'String', sprintf(' Vertical Cursor Disabled\n Vertical Cursor Disabled\n Vertical Cursor Disabled\n \n V1 = %s\n V2 = %s\n DeltaV = %s\n', sisprintf(gui_hori_cursor_a_pos,'V',3), sisprintf(gui_hori_cursor_b_pos,'V',3), sisprintf(gui_hori_cursor_a_pos - gui_hori_cursor_b_pos,'V',3))) + case 3 + set(text_box_2, 'String', sprintf(' T1 = %s\n T2 = %s\n DeltaT = %s\n \n Horizontal cursor disabled \n Horizontal cursor disabled \n Horizontal cursor disabled \n ', sisprintf(gui_vert_cursor_a_pos,'s',3), sisprintf(gui_vert_cursor_b_pos,'s',3), sisprintf(gui_vert_cursor_a_pos - gui_vert_cursor_b_pos,'s',3))) + case 4 + set(text_box_2, 'String', sprintf(' T1 = %s\n T2 = %s\n DeltaT = %s\n \n V1 = %s\n V2 = %s\n DeltaV = %s\n', sisprintf(gui_vert_cursor_a_pos,'s',3), sisprintf(gui_vert_cursor_b_pos,'s',3), sisprintf(gui_vert_cursor_a_pos - gui_vert_cursor_b_pos,'s',3), sisprintf(gui_hori_cursor_a_pos,'v',3), sisprintf(gui_hori_cursor_b_pos,'v',3), sisprintf(gui_hori_cursor_a_pos - gui_hori_cursor_b_pos,'v',3))) + otherwise error('Gui_cursor_mode is invalid') +end +% Hints: get(hObject,'Value') returns position of slider +% get(hObject,'Min') and get(hObject,'Max') to determine range of slider + + +% --- Executes during object creation, after setting all properties. +function slider3_CreateFcn(hObject, eventdata, handles) +% hObject handle to slider3 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: slider controls usually have a light gray background. +if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor',[.9 .9 .9]); +end + + + +function edit6_Callback(hObject, eventdata, handles) +% hObject handle to edit6 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +global gui_awg_waveform +gui_awg_waveform = get(hObject,'String'); + + +% Hints: get(hObject,'String') returns contents of edit6 as text +% str2double(get(hObject,'String')) returns contents of edit6 as a double + + +% --- Executes during object creation, after setting all properties. +function edit6_CreateFcn(hObject, eventdata, handles) +% hObject handle to edit6 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: edit controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end + + +% --- Executes on button press in pushbutton3. +function pushbutton3_Callback(hObject, eventdata, handles) +% hObject handle to pushbutton3 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) +global gui_awg_waveform +global gui_awg_amplitude +global gui_awg_frequency +global scope_mode + +gui_awg_waveform +gui_awg_amplitude +gui_awg_frequency +if scope_mode == 0 | scope_mode == 3 | scope_mode == 5 + tiny_send_waveform(eval(gui_awg_waveform), amp2bin(str2num(gui_awg_amplitude),1), str2num(gui_awg_frequency)); + fprintf('\nStandard\n') +else + error('Can''t send, breh!') +end + + +function edit7_Callback(hObject, eventdata, handles) +% hObject handle to edit7 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +global gui_awg_amplitude +gui_awg_amplitude = get(hObject,'String'); + +% Hints: get(hObject,'String') returns contents of edit7 as text +% str2double(get(hObject,'String')) returns contents of edit7 as a double + + +% --- Executes during object creation, after setting all properties. +function edit7_CreateFcn(hObject, eventdata, handles) +% hObject handle to edit7 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: edit controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end + + + +function edit8_Callback(hObject, eventdata, handles) +% hObject handle to edit8 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +global gui_awg_frequency +gui_awg_frequency = get(hObject,'String'); +% Hints: get(hObject,'String') returns contents of edit8 as text +% str2double(get(hObject,'String')) returns contents of edit8 as a double + + +% --- Executes during object creation, after setting all properties. +function edit8_CreateFcn(hObject, eventdata, handles) +% hObject handle to edit8 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: edit controls usually have a white background on Windows. +% See ISPC and COMPUTER. + +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end + + +% --- Executes on button press in pushbutton4. +function pushbutton4_Callback(hObject, eventdata, handles) +% hObject handle to pushbutton4 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) +global gui_scope_running +gui_scope_running = ~gui_scope_running + + + +function edit9_Callback(hObject, eventdata, handles) +% hObject handle to edit9 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +global gui_vo; +gui_vo = str2num(get(hObject, 'String')); +setpsu_boost(gui_vo); + + +% Hints: get(hObject,'String') returns contents of edit9 as text +% str2double(get(hObject,'String')) returns contents of edit9 as a double + + +% --- Executes during object creation, after setting all properties. +function edit9_CreateFcn(hObject, eventdata, handles) +% hObject handle to edit9 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: edit controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end + + + +function edit10_Callback(hObject, eventdata, handles) +% hObject handle to edit10 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) +global gui_ro; +gui_ro = str2num(get(hObject, 'String')); +% Hints: get(hObject,'String') returns contents of edit10 as text +% str2double(get(hObject,'String')) returns contents of edit10 as a double + + +% --- Executes during object creation, after setting all properties. +function edit10_CreateFcn(hObject, eventdata, handles) +% hObject handle to edit10 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: edit controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end + + +% --- Executes on button press in pushbutton5. +function pushbutton5_Callback(hObject, eventdata, handles) +% hObject handle to pushbutton5 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + + +% --- Executes on slider movement. +function slider4_Callback(hObject, eventdata, handles) +% hObject handle to slider4 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +global gui_vert_cursor_a_pos +global scope_window_time +global text_box_2 +global gui_cursor_mode + +gui_vert_cursor_a_pos = -scope_window_time + (scope_window_time) * get(hObject,'Value'); + +global gui_hori_cursor_a_pos +global gui_hori_cursor_b_pos +global gui_vert_cursor_b_pos +switch gui_cursor_mode + case 1 + set(text_box_2, 'String', sprintf(' Vertical Cursor Disabled\n Vertical Cursor Disabled\n Vertical Cursor Disabled\n \n Horizontal cursor disabled \n Horizontal cursor disabled \n Horizontal cursor disabled \n ')) + case 2 + set(text_box_2, 'String', sprintf(' Vertical Cursor Disabled\n Vertical Cursor Disabled\n Vertical Cursor Disabled\n \n V1 = %s\n V2 = %s\n DeltaV = %s\n', sisprintf(gui_hori_cursor_a_pos,'V',3), sisprintf(gui_hori_cursor_b_pos,'V',3), sisprintf(gui_hori_cursor_a_pos - gui_hori_cursor_b_pos,'V',3))) + case 3 + set(text_box_2, 'String', sprintf(' T1 = %s\n T2 = %s\n DeltaT = %s\n \n Horizontal cursor disabled \n Horizontal cursor disabled \n Horizontal cursor disabled \n ', sisprintf(gui_vert_cursor_a_pos,'s',3), sisprintf(gui_vert_cursor_b_pos,'s',3), sisprintf(gui_vert_cursor_a_pos - gui_vert_cursor_b_pos,'s',3))) + case 4 + set(text_box_2, 'String', sprintf(' T1 = %s\n T2 = %s\n DeltaT = %s\n \n V1 = %s\n V2 = %s\n DeltaV = %s\n', sisprintf(gui_vert_cursor_a_pos,'s',3), sisprintf(gui_vert_cursor_b_pos,'s',3), sisprintf(gui_vert_cursor_a_pos - gui_vert_cursor_b_pos,'s',3), sisprintf(gui_hori_cursor_a_pos,'v',3), sisprintf(gui_hori_cursor_b_pos,'v',3), sisprintf(gui_hori_cursor_a_pos - gui_hori_cursor_b_pos,'v',3))) + otherwise error('Gui_cursor_mode is invalid') +end +% Hints: get(hObject,'Value') returns position of slider +% get(hObject,'Min') and get(hObject,'Max') to determine range of slider + + +% --- Executes during object creation, after setting all properties. +function slider4_CreateFcn(hObject, eventdata, handles) +% hObject handle to slider4 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: slider controls usually have a light gray background. +if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor',[.9 .9 .9]); +end + + +% --- Executes on slider movement. +function slider5_Callback(hObject, eventdata, handles) +% hObject handle to slider5 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +global gui_vert_cursor_b_pos +global scope_window_time +global text_box_2 +global gui_cursor_mode +gui_vert_cursor_b_pos = -scope_window_time + (scope_window_time) * get(hObject,'Value'); + +global gui_hori_cursor_a_pos +global gui_hori_cursor_b_pos +global gui_vert_cursor_a_pos +switch gui_cursor_mode + case 1 + set(text_box_2, 'String', sprintf(' Vertical Cursor Disabled\n Vertical Cursor Disabled\n Vertical Cursor Disabled\n \n Horizontal cursor disabled \n Horizontal cursor disabled \n Horizontal cursor disabled \n ')) + case 2 + set(text_box_2, 'String', sprintf(' Vertical Cursor Disabled\n Vertical Cursor Disabled\n Vertical Cursor Disabled\n \n V1 = %s\n V2 = %s\n DeltaV = %s\n', sisprintf(gui_hori_cursor_a_pos,'V',3), sisprintf(gui_hori_cursor_b_pos,'V',3), sisprintf(gui_hori_cursor_a_pos - gui_hori_cursor_b_pos,'V',3))) + case 3 + set(text_box_2, 'String', sprintf(' T1 = %s\n T2 = %s\n DeltaT = %s\n \n Horizontal cursor disabled \n Horizontal cursor disabled \n Horizontal cursor disabled \n ', sisprintf(gui_vert_cursor_a_pos,'s',3), sisprintf(gui_vert_cursor_b_pos,'s',3), sisprintf(gui_vert_cursor_a_pos - gui_vert_cursor_b_pos,'s',3))) + case 4 + set(text_box_2, 'String', sprintf(' T1 = %s\n T2 = %s\n DeltaT = %s\n \n V1 = %s\n V2 = %s\n DeltaV = %s\n', sisprintf(gui_vert_cursor_a_pos,'s',3), sisprintf(gui_vert_cursor_b_pos,'s',3), sisprintf(gui_vert_cursor_a_pos - gui_vert_cursor_b_pos,'s',3), sisprintf(gui_hori_cursor_a_pos,'v',3), sisprintf(gui_hori_cursor_b_pos,'v',3), sisprintf(gui_hori_cursor_a_pos - gui_hori_cursor_b_pos,'v',3))) + otherwise error('Gui_cursor_mode is invalid') +end +% Hints: get(hObject,'Value') returns position of slider +% get(hObject,'Min') and get(hObject,'Max') to determine range of slider + + +% --- Executes during object creation, after setting all properties. +function slider5_CreateFcn(hObject, eventdata, handles) +% hObject handle to slider5 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: slider controls usually have a light gray background. +if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor',[.9 .9 .9]); +end + + +% --- Executes on selection change in popupmenu2. +function popupmenu2_Callback(hObject, eventdata, handles) +% hObject handle to popupmenu2 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) +global scope_mode +global scope_gain_0 +global scope_gain_1 +global refreshrate +global refreshrate_temp +global waveform_exists +global saved_waveform_ch1 +global saved_waveform_ch2 +global gui_delay + +refreshrate_temp = refreshrate; +waveform_exists = 0 + +contents = cellstr(get(hObject,'String')); +tempstring = contents{get(hObject,'Value')}; + +mode = str2num(tempstring(6)); +setscopemode(mode, scope_gain_0, scope_gain_1) + +saved_waveform_ch1 = []; +saved_waveform_ch2 = []; +set(gui_delay, 'Value', get(gui_delay, 'Max')) + +if(mode==7) + set(handles.popupmenu3, 'Visible', 'on') + set(handles.popupmenu4, 'Visible', 'on') + set(handles.popupmenu7, 'Visible', 'on') +else + set(handles.popupmenu3, 'Visible', 'off') + set(handles.popupmenu4, 'Visible', 'off') + set(handles.popupmenu7, 'Visible', 'off') + set_gain_auto +end + +% Hints: contents = cellstr(get(hObject,'String')) returns popupmenu2 contents as cell array +% contents{get(hObject,'Value')} returns selected item from popupmenu2 + + +% --- Executes during object creation, after setting all properties. +function popupmenu2_CreateFcn(hObject, eventdata, handles) +% hObject handle to popupmenu2 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: popupmenu controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end + + +% --- Executes on slider movement. +function slider6_Callback(hObject, eventdata, handles) +% hObject handle to slider6 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +% Hints: get(hObject,'Value') returns position of slider +% get(hObject,'Min') and get(hObject,'Max') to determine range of slider + + +% --- Executes during object creation, after setting all properties. +function slider6_CreateFcn(hObject, eventdata, handles) +% hObject handle to slider6 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: slider controls usually have a light gray background. +if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor',[.9 .9 .9]); +end +set(hObject,'Value', 1); + + + +function edit11_Callback(hObject, eventdata, handles) +% hObject handle to edit11 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) +global gui_delay + +boxvar = str2num(get(hObject,'String')); +if boxvar1.1e-5) + scope_window_time = scope_window_time / sqrt(sqrt(10)); +end + +scope_window_time + + +% --- Executes on button press in checkbox4. +function checkbox4_Callback(hObject, eventdata, handles) +% hObject handle to checkbox4 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +% Hint: get(hObject,'Value') returns toggle state of checkbox4 + +global gui_cursor_mode +switch(gui_cursor_mode) + case 1 + gui_cursor_mode = 3; + case 2 + gui_cursor_mode = 4; + case 3 + gui_cursor_mode = 1; + case 4 + gui_cursor_mode = 2; +end + +if(gui_cursor_mode>1) + set(handles.text9, 'Visible', 'on') +else + set(handles.text9, 'Visible', 'off') +end + +% --- Executes on button press in checkbox5. +function checkbox5_Callback(hObject, eventdata, handles) +% hObject handle to checkbox5 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +% Hint: get(hObject,'Value') returns toggle state of checkbox5 +global gui_cursor_mode +switch(gui_cursor_mode) + case 1 + gui_cursor_mode = 2; + case 2 + gui_cursor_mode = 1; + case 3 + gui_cursor_mode = 4; + case 4 + gui_cursor_mode = 3; +end + +if(gui_cursor_mode>1) + set(handles.text9, 'Visible', 'on') +else + set(handles.text9, 'Visible', 'off') +end + + + +% --- Executes on button press in checkbox6. +function checkbox6_Callback(hObject, eventdata, handles) +% hObject handle to checkbox6 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +% Hint: get(hObject,'Value') returns toggle state of checkbox6 +global CH1_AC +CH1_AC = get(hObject,'Value') + +% --- Executes on button press in checkbox7. +function checkbox7_Callback(hObject, eventdata, handles) +% hObject handle to checkbox7 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +% Hint: get(hObject,'Value') returns toggle state of checkbox7 +global CH2_AC +CH2_AC = get(hObject,'Value') + + +% --- Executes on button press in togglebutton6. +function togglebutton6_Callback(hObject, eventdata, handles) +% hObject handle to togglebutton6 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +% Hint: get(hObject,'Value') returns toggle state of togglebutton6 + + + +function edit23_Callback(hObject, eventdata, handles) +% hObject handle to edit23 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +% Hints: get(hObject,'String') returns contents of edit23 as text +% str2double(get(hObject,'String')) returns contents of edit23 as a double +global trigger +trigger.h = str2double(get(hObject,'String')) + + +% --- Executes during object creation, after setting all properties. +function edit23_CreateFcn(hObject, eventdata, handles) +% hObject handle to edit23 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: edit controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end + + + +function edit24_Callback(hObject, eventdata, handles) +% hObject handle to edit24 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +% Hints: get(hObject,'String') returns contents of edit24 as text +% str2double(get(hObject,'String')) returns contents of edit24 as a double +global trigger +trigger.l = str2double(get(hObject,'String')) + + +% --- Executes during object creation, after setting all properties. +function edit24_CreateFcn(hObject, eventdata, handles) +% hObject handle to edit24 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: edit controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end + + +% --- Executes on button press in togglebutton7. +function togglebutton7_Callback(hObject, eventdata, handles) +% hObject handle to togglebutton7 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +% Hint: get(hObject,'Value') returns toggle state of togglebutton7 +global trigger +trigger.enabled = get(hObject,'Value') + + +if(trigger.enabled == 1) + set(handles.edit23, 'Visible', 'on') + set(handles.edit24, 'Visible', 'on') +else + set(handles.edit23, 'Visible', 'off') + set(handles.edit24, 'Visible', 'off') +end diff --git a/Old Matlab Interface/first_gui_test.m b/Old Matlab Interface/first_gui_test.m new file mode 100644 index 00000000..9409e06c --- /dev/null +++ b/Old Matlab Interface/first_gui_test.m @@ -0,0 +1,4 @@ +first_gui + +%global gui_axes +%plot(gui_axes, linspace(0,2*pi,1000), sin(linspace(0,2*pi,1000))) \ No newline at end of file diff --git a/Old Matlab Interface/helloworld.cpp b/Old Matlab Interface/helloworld.cpp new file mode 100644 index 00000000..7c3080c9 --- /dev/null +++ b/Old Matlab Interface/helloworld.cpp @@ -0,0 +1,19 @@ +#include +#include +#include + +void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) +{ + unsigned char n; + char *garen; + + garen = mxArrayToString(prhs[0]); + + mexPrintf("nlhs = %d\n", nlhs); + mexPrintf("nrhs = %d\n", nrhs); + mexPrintf("STRING = %s\n", garen); + + + + return; +} \ No newline at end of file diff --git a/Old Matlab Interface/helloworld.mexw64 b/Old Matlab Interface/helloworld.mexw64 new file mode 100644 index 0000000000000000000000000000000000000000..4cabd8c0374aa1ca34f36c143f476a5882feb4a1 GIT binary patch literal 7168 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 IcGhL!Z*V|O-v9sr literal 0 HcmV?d00001 diff --git a/Old Matlab Interface/hexoffset.m b/Old Matlab Interface/hexoffset.m new file mode 100644 index 00000000..2a9d895a --- /dev/null +++ b/Old Matlab Interface/hexoffset.m @@ -0,0 +1,3 @@ +function [offset] = hexoffset(hexin) + decin = hex2dec(hexin); + offset = dec2hex(decin+750); \ No newline at end of file diff --git a/Old Matlab Interface/hs_err_pid1976.log b/Old Matlab Interface/hs_err_pid1976.log new file mode 100644 index 00000000..8a6a7a40 --- /dev/null +++ b/Old Matlab Interface/hs_err_pid1976.log @@ -0,0 +1,272 @@ +# +# A fatal error has been detected by the Java Runtime Environment: +# +# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x0000000078c39eba, pid=1976, tid=4708 +# +# JRE version: 6.0_17-b04 +# Java VM: Java HotSpot(TM) 64-Bit Server VM (14.3-b01 mixed mode windows-amd64 ) +# Problematic frame: +# C 0x0000000078c39eba +# +# If you would like to submit a bug report, please visit: +# http://java.sun.com/webapps/bugreport/crash.jsp +# + +--------------- T H R E A D --------------- + +Current thread (0x0000000005eb6800): GCTaskThread [stack: 0x0000000044b90000,0x0000000048b90000] [id=4708] + +siginfo: ExceptionCode=0xc0000005, reading address 0x00000000000000a0 + +Registers: +EAX=0x0000000000000000, EBX=0x000000003fdd1d00, ECX=0x000000002cc752c8, EDX=0x000000003f3848c0 +ESP=0x0000000048b8f5f0, EBP=0x0000000000000001, ESI=0x0000000005f7ea20, EDI=0x000000003f3848c0 +EIP=0x0000000078c39eba, EFLAGS=0x0000000000010246 + +Top of Stack: (sp=0x0000000048b8f5f0) +0x0000000048b8f5f0: 000000003fdd1db8 0000000000000008 +0x0000000048b8f600: 0000000005f7ea20 000000003fdd1df8 +0x0000000048b8f610: 000000003fdd0908 0000000000001000 +0x0000000048b8f620: 0000000005f7ea20 000000003f1ad550 +0x0000000048b8f630: 0000000000000000 0000000005eb7101 +0x0000000048b8f640: 000000005b409a60 0000000005f7ea20 +0x0000000048b8f650: 00000000000008bd 0000000005f7ea20 +0x0000000048b8f660: 0000000000000001 0000000078c3b371 +0x0000000048b8f670: 000000005b4096a0 0000000000000011 +0x0000000048b8f680: 00000000593ecd01 000000003fdd1d00 +0x0000000048b8f690: 0000000048b8f701 0000000078c9f391 +0x0000000048b8f6a0: 000000000dcee201 000000003fdd1d00 +0x0000000048b8f6b0: 0000000005eb7140 0000000005eb7130 +0x0000000048b8f6c0: 0000000005eb34e0 0000000078b4b4be +0x0000000048b8f6d0: 0000000048b8f720 0000000005eb7518 +0x0000000048b8f6e0: 0000000005eb7140 000000005b409a60 + +Instructions: (pc=0x0000000078c39eba) +0x0000000078c39eaa: c1 e8 03 eb 11 49 8b 40 10 49 8d 48 10 48 8b d7 +0x0000000078c39eba: ff 90 a0 00 00 00 48 63 e8 41 0f b6 c5 f6 d0 a8 + + +Stack: [0x0000000044b90000,0x0000000048b90000], sp=0x0000000048b8f5f0, free space=65533k +Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code) +C 0x0000000078c39eba + + +--------------- P R O C E S S --------------- + +Java Threads: ( => current thread ) + 0x0000000059654000 JavaThread "Thread-42" [_thread_blocked, id=5668, stack(0x0000000029330000,0x00000000293b0000)] + 0x000000000ed84000 JavaThread "Code Analyzer updating thread" [_thread_blocked, id=5416, stack(0x0000000060b00000,0x0000000060b80000)] + 0x000000000ed83000 JavaThread "Code Analyzer updating thread" [_thread_blocked, id=5412, stack(0x0000000060bc0000,0x0000000060c40000)] + 0x000000000ed82800 JavaThread "Code Analyzer updating thread" [_thread_blocked, id=5408, stack(0x0000000060680000,0x0000000060700000)] + 0x000000005965f800 JavaThread "Code Analyzer updating thread" [_thread_blocked, id=5404, stack(0x0000000060980000,0x0000000060a00000)] + 0x000000005965e000 JavaThread "Code Analyzer updating thread" [_thread_blocked, id=5400, stack(0x0000000060a70000,0x0000000060af0000)] + 0x000000005965d800 JavaThread "Code Analyzer updating thread" [_thread_blocked, id=5396, stack(0x00000000608b0000,0x0000000060930000)] + 0x000000005965c800 JavaThread "Code Analyzer updating thread" [_thread_blocked, id=5392, stack(0x00000000607d0000,0x0000000060850000)] + 0x000000005965c000 JavaThread "Code Analyzer updating thread" [_thread_blocked, id=5388, stack(0x000000005fc40000,0x000000005fcc0000)] + 0x000000005965b000 JavaThread "Code Analyzer updating thread" [_thread_blocked, id=5384, stack(0x0000000060700000,0x0000000060780000)] + 0x000000005965a800 JavaThread "Code Analyzer updating thread" [_thread_blocked, id=5380, stack(0x000000005bbc0000,0x000000005bc40000)] + 0x0000000059658000 JavaThread "Active Reference Queue Daemon" daemon [_thread_blocked, id=5372, stack(0x000000005ba20000,0x000000005baa0000)] + 0x0000000059659800 JavaThread "Timer-7" daemon [_thread_blocked, id=5368, stack(0x0000000060ec0000,0x0000000060f40000)] + 0x0000000059659000 JavaThread "Timer-6" daemon [_thread_blocked, id=5360, stack(0x000000005fcc0000,0x000000005fd40000)] + 0x0000000059657800 JavaThread "Explorer NavigationContext request queue" [_thread_blocked, id=5336, stack(0x000000005bb20000,0x000000005bba0000)] + 0x0000000059656000 JavaThread "AddressBar directory emptiness poller" [_thread_blocked, id=5324, stack(0x0000000044b10000,0x0000000044b90000)] + 0x0000000059655800 JavaThread "Explorer Refresh Service 196620025" [_thread_blocked, id=5320, stack(0x0000000048cf0000,0x0000000048d70000)] + 0x0000000059654800 JavaThread "Timer-1" daemon [_thread_blocked, id=5308, stack(0x0000000054fa0000,0x0000000055020000)] + 0x0000000059651800 JavaThread "TimerQueue" daemon [_thread_blocked, id=5192, stack(0x000000000fda0000,0x000000000fe20000)] + 0x0000000059651000 JavaThread "Thread-5" daemon [_thread_blocked, id=5164, stack(0x000000000ff20000,0x000000000ffa0000)] + 0x0000000059650800 JavaThread "FelixPackageAdmin" daemon [_thread_blocked, id=5160, stack(0x000000000fe20000,0x000000000fea0000)] + 0x00000000596d6000 JavaThread "FelixStartLevel" daemon [_thread_blocked, id=5156, stack(0x0000000014ec0000,0x0000000014f40000)] + 0x0000000059801000 JavaThread "FelixDispatchQueue" daemon [_thread_blocked, id=5152, stack(0x0000000008e50000,0x0000000008ed0000)] + 0x00000000593db000 JavaThread "AWT-EventQueue-0" [_thread_blocked, id=5144, stack(0x0000000008c20000,0x0000000008ca0000)] + 0x00000000593ef800 JavaThread "com.google.common.base.internal.Finalizer" daemon [_thread_blocked, id=5140, stack(0x00000000089c0000,0x0000000008a40000)] + 0x0000000059308800 JavaThread "AWT-Windows" daemon [_thread_in_native, id=5132, stack(0x00000000088b0000,0x0000000008930000)] + 0x0000000059308000 JavaThread "AWT-Shutdown" [_thread_blocked, id=5128, stack(0x0000000008aa0000,0x0000000008b20000)] + 0x0000000059307000 JavaThread "Java2D Disposer" daemon [_thread_blocked, id=5124, stack(0x0000000008930000,0x00000000089b0000)] + 0x00000000590ef000 JavaThread "Timer-0" [_thread_blocked, id=2064, stack(0x000000000ee20000,0x000000000eea0000)] + 0x000000000fca9000 JavaThread "EventMgr Dispatcher" daemon [_thread_in_native, id=4820, stack(0x0000000009290000,0x000000000d290000)] + 0x000000000ecac000 JavaThread "Low Memory Detector" daemon [_thread_blocked, id=4476, stack(0x000000000f0f0000,0x000000000f170000)] + 0x000000000ecaa000 JavaThread "CompilerThread1" daemon [_thread_blocked, id=2884, stack(0x0000000050f80000,0x0000000054f80000)] + 0x000000000eca4000 JavaThread "CompilerThread0" daemon [_thread_blocked, id=1444, stack(0x000000004ce00000,0x0000000050e00000)] + 0x000000000eca3800 JavaThread "Attach Listener" daemon [_thread_blocked, id=4136, stack(0x000000000ef70000,0x000000000eff0000)] + 0x000000000ec48000 JavaThread "Finalizer" daemon [_thread_blocked, id=4300, stack(0x000000000eef0000,0x000000000ef70000)] + 0x000000000ec45000 JavaThread "Reference Handler" daemon [_thread_blocked, id=1980, stack(0x000000000ddf0000,0x000000000de70000)] + 0x0000000005e7e800 JavaThread "main" [_thread_in_native, id=1936, stack(0x0000000000220000,0x0000000004220000)] + +Other Threads: + 0x000000000ec41000 VMThread [stack: 0x0000000048d80000,0x000000004cd80000] [id=4332] + 0x000000000ece3800 WatcherThread [stack: 0x0000000055080000,0x0000000059080000] [id=3408] + +=>0x0000000005eb6800 (exited) GCTaskThread [stack: 0x0000000044b90000,0x0000000048b90000] [id=4708] + +VM state:at safepoint (normal execution) + +VM Mutex/Monitor currently owned by a thread: ([mutex/lock_event]) +[0x0000000005eaa660] Threads_lock - owner thread: 0x000000000ec41000 +[0x0000000005eaab60] Heap_lock - owner thread: 0x00000000593db000 + +Heap + PSYoungGen total 38592K, used 29570K [0x000000003d6b0000, 0x0000000040690000, 0x00000000407b0000) + eden space 27776K, 100% used [0x000000003d6b0000,0x000000003f1d0000,0x000000003f1d0000) + from space 10816K, 16% used [0x000000003f1d0000,0x000000003f390908,0x000000003fc60000) + to space 10368K, 18% used [0x000000003fc70000,0x000000003fe562e8,0x0000000040690000) + PSOldGen total 108032K, used 65756K [0x00000000343b0000, 0x000000003ad30000, 0x000000003d6b0000) + object space 108032K, 60% used [0x00000000343b0000,0x00000000383e7188,0x000000003ad30000) + PSPermGen total 123968K, used 61741K [0x000000002c3b0000, 0x0000000033cc0000, 0x00000000343b0000) + object space 123968K, 49% used [0x000000002c3b0000,0x000000002fffb440,0x0000000033cc0000) + +Dynamic libraries: +0x000000013f5d0000 - 0x000000013f5fd000 C:\Program Files\MATLAB\R2012b\bin\win64\MATLAB.exe +0x0000000077b60000 - 0x0000000077d09000 C:\Windows\SYSTEM32\ntdll.dll +0x0000000077940000 - 0x0000000077a5f000 C:\Windows\system32\kernel32.dll +0x000007fefda60000 - 0x000007fefdacc000 C:\Windows\system32\KERNELBASE.dll +0x0000000074460000 - 0x000000007451f000 C:\Program Files\MATLAB\R2012b\bin\win64\libut.dll +0x00000000758a0000 - 0x000000007595c000 C:\Program Files\MATLAB\R2012b\bin\win64\libmwi18n.dll +0x0000000180000000 - 0x000000018000b000 C:\Program Files\MATLAB\R2012b\bin\win64\libmwresource_core.dll +0x0000000072ed0000 - 0x0000000072fa3000 C:\Windows\WinSxS\amd64_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.6161_none_08e61857a83bc251\MSVCP90.dll +0x0000000072e20000 - 0x0000000072ec3000 C:\Windows\WinSxS\amd64_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.6161_none_08e61857a83bc251\MSVCR90.dll +0x000000007a170000 - 0x000000007a19c000 C:\Program Files\MATLAB\R2012b\bin\win64\boost_filesystem-vc90-mt-1_44.dll +0x000000007a560000 - 0x000000007a569000 C:\Program Files\MATLAB\R2012b\bin\win64\boost_system-vc90-mt-1_44.dll +0x000007feffd90000 - 0x000007feffe6b000 C:\Windows\system32\ADVAPI32.dll +0x000007fefdfd0000 - 0x000007fefe06f000 C:\Windows\system32\msvcrt.dll +0x000007feff250000 - 0x000007feff26f000 C:\Windows\SYSTEM32\sechost.dll +0x000007feff7d0000 - 0x000007feff8fd000 C:\Windows\system32\RPCRT4.dll +0x000000007a010000 - 0x000000007a035000 C:\Program Files\MATLAB\R2012b\bin\win64\LIBEXPAT.dll +0x000000006e870000 - 0x000000006ea61000 C:\Program Files\MATLAB\R2012b\bin\win64\icuin44.dll +0x000000006e6f0000 - 0x000000006e861000 C:\Program Files\MATLAB\R2012b\bin\win64\icuuc44.dll +0x0000000010000000 - 0x0000000010e41000 C:\Program Files\MATLAB\R2012b\bin\win64\icudt44.dll +0x0000000073f70000 - 0x000000007411d000 C:\Program Files\MATLAB\R2012b\bin\win64\libmwfl.dll +0x0000000004440000 - 0x00000000047f6000 C:\Program Files\MATLAB\R2012b\bin\win64\libmwMATLAB_res.dll +0x000000007a3b0000 - 0x000000007a3c0000 C:\Program Files\MATLAB\R2012b\bin\win64\boost_date_time-vc90-mt-1_44.dll +0x000000007a250000 - 0x000000007a263000 C:\Program Files\MATLAB\R2012b\bin\win64\boost_signals-vc90-mt-1_44.dll +0x000000007a2d0000 - 0x000000007a2e2000 C:\Program Files\MATLAB\R2012b\bin\win64\boost_thread-vc90-mt-1_44.dll +0x0000000004220000 - 0x00000000042dd000 C:\Program Files\MATLAB\R2012b\bin\win64\boost_log-vc90-mt-1_44.dll +0x0000000077d20000 - 0x0000000077d27000 C:\Windows\system32\PSAPI.DLL +0x000007fefe300000 - 0x000007fefe34d000 C:\Windows\system32\WS2_32.dll +0x000007feff240000 - 0x000007feff248000 C:\Windows\system32\NSI.dll +0x00000000001b0000 - 0x00000000001f6000 C:\Program Files\MATLAB\R2012b\bin\win64\tbb.dll +0x000007fefe2e0000 - 0x000007fefe2f9000 C:\Windows\system32\imagehlp.dll +0x0000000073010000 - 0x0000000073023000 C:\Program Files\MATLAB\R2012b\bin\win64\icuio44.dll +0x000007fef6de0000 - 0x000007fef6f05000 C:\Windows\system32\dbghelp.dll +0x0000000077a60000 - 0x0000000077b5a000 C:\Windows\system32\USER32.dll +0x000007feffd20000 - 0x000007feffd87000 C:\Windows\system32\GDI32.dll +0x000007feff340000 - 0x000007feff34e000 C:\Windows\system32\LPK.dll +0x000007feff270000 - 0x000007feff339000 C:\Windows\system32\USP10.dll +0x0000000004800000 - 0x0000000004adc000 C:\Program Files\MATLAB\R2012b\bin\win64\libmwservices.dll +0x0000000075a20000 - 0x0000000075af3000 C:\Program Files\MATLAB\R2012b\bin\win64\libmx.dll +0x0000000004300000 - 0x0000000004329000 C:\Program Files\MATLAB\R2012b\bin\win64\tbbmalloc.dll +0x000000007a210000 - 0x000000007a228000 C:\Program Files\MATLAB\R2012b\bin\win64\zlib1.dll +0x0000000004af0000 - 0x0000000004b3d000 C:\Program Files\MATLAB\R2012b\bin\win64\libmwregexp.dll +0x0000000004b50000 - 0x0000000004b73000 C:\Program Files\MATLAB\R2012b\bin\win64\libmwmfl_scalar.dll +0x0000000075f10000 - 0x0000000075f60000 C:\Program Files\MATLAB\R2012b\bin\win64\mpath.dll +0x000000007b680000 - 0x000000007bc9a000 C:\Program Files\MATLAB\R2012b\bin\win64\mlutil.dll +0x00000000754d0000 - 0x0000000075551000 C:\Program Files\MATLAB\R2012b\bin\win64\xmlcore.dll +0x0000000004bc0000 - 0x0000000004e13000 C:\Program Files\MATLAB\R2012b\bin\win64\xerces-c_2_7.dll +0x0000000004e30000 - 0x0000000004e50000 C:\Program Files\MATLAB\R2012b\bin\win64\libmwMATLAB_settings_res.dll +0x0000000004e60000 - 0x0000000004e70000 C:\Program Files\MATLAB\R2012b\bin\win64\boost_iostreams-vc90-mt-1_44.dll +0x0000000004e80000 - 0x0000000004ec7000 C:\Program Files\MATLAB\R2012b\bin\win64\boost_serialization-vc90-mt-1_44.dll +0x000007fefe4b0000 - 0x000007feff239000 C:\Windows\system32\SHELL32.dll +0x000007fefe350000 - 0x000007fefe3c1000 C:\Windows\system32\SHLWAPI.dll +0x000007fefab10000 - 0x000007fefabb0000 C:\Windows\WinSxS\amd64_microsoft.windows.common-controls_6595b64144ccf1df_5.82.7601.18837_none_a4d981ff711297b6\COMCTL32.dll +0x000007fefdf30000 - 0x000007fefdfc7000 C:\Windows\system32\COMDLG32.dll +0x000007fefb310000 - 0x000007fefb326000 C:\Windows\system32\NETAPI32.dll +0x000007fefb300000 - 0x000007fefb30c000 C:\Windows\system32\netutils.dll +0x000007fefd360000 - 0x000007fefd383000 C:\Windows\system32\srvcli.dll +0x000007fefb2e0000 - 0x000007fefb2f5000 C:\Windows\system32\wkscli.dll +0x000007feffb10000 - 0x000007feffd13000 C:\Windows\system32\ole32.dll +0x000007fefe3d0000 - 0x000007fefe4a7000 C:\Windows\system32\OLEAUT32.dll +0x0000000074970000 - 0x0000000074a31000 C:\Program Files\MATLAB\R2012b\bin\win64\mcr.dll +0x0000000075000000 - 0x00000000753e9000 C:\Program Files\MATLAB\R2012b\bin\win64\iqm.dll +0x0000000074e80000 - 0x0000000074f38000 C:\Program Files\MATLAB\R2012b\bin\win64\m_dispatcher.dll +0x0000000074880000 - 0x000000007496d000 C:\Program Files\MATLAB\R2012b\bin\win64\boost_regex-vc90-mt-1_44.dll +0x000007feec490000 - 0x000007feecd01000 C:\Program Files\MATLAB\R2012b\bin\win64\m_interpreter.dll +0x0000000071610000 - 0x0000000071637000 C:\Program Files\MATLAB\R2012b\bin\win64\libmex.dll +0x0000000063880000 - 0x0000000063904000 C:\Program Files\MATLAB\R2012b\bin\win64\profiler.dll +0x0000000004f50000 - 0x00000000051ba000 C:\Program Files\MATLAB\R2012b\bin\win64\libmwmathutil.dll +0x0000000079f40000 - 0x0000000079f6e000 C:\Program Files\MATLAB\R2012b\bin\win64\libmwmathrng.dll +0x00000000051e0000 - 0x00000000051f2000 C:\Program Files\MATLAB\R2012b\bin\win64\libmwmfl_rng.dll +0x0000000074c10000 - 0x0000000074cee000 C:\Program Files\MATLAB\R2012b\bin\win64\libmwmathcore.dll +0x0000000076160000 - 0x00000000761ca000 C:\Program Files\MATLAB\R2012b\bin\win64\libmwspmatrix.dll +0x0000000075ea0000 - 0x0000000075f02000 C:\Program Files\MATLAB\R2012b\bin\win64\libmwcholmod.dll +0x000000007a460000 - 0x000000007a46d000 C:\Program Files\MATLAB\R2012b\bin\win64\libmwamd.dll +0x000000007a4b0000 - 0x000000007a4bc000 C:\Program Files\MATLAB\R2012b\bin\win64\libmwcolamd.dll +0x000000007a290000 - 0x000000007a2a9000 C:\Program Files\MATLAB\R2012b\bin\win64\libmwblas.dll +0x000000007a310000 - 0x000000007a321000 C:\Program Files\MATLAB\R2012b\bin\win64\libmwbinder.dll +0x000000007a4d0000 - 0x000000007a4dc000 C:\Program Files\MATLAB\R2012b\bin\win64\libmwompwrapper.dll +0x0000000005290000 - 0x0000000005315000 C:\Program Files\MATLAB\R2012b\bin\win64\libmwlapack.dll +0x0000000071500000 - 0x0000000071521000 C:\Program Files\MATLAB\R2012b\bin\win64\m_pcodeio.dll +0x0000000079b10000 - 0x0000000079b77000 C:\Program Files\MATLAB\R2012b\bin\win64\m_ir.dll +0x0000000062600000 - 0x0000000062c70000 C:\Program Files\MATLAB\R2012b\bin\win64\m_parser.dll +0x00000000715f0000 - 0x000000007160a000 C:\Program Files\MATLAB\R2012b\bin\win64\ir_xfmr.dll +0x000007feeb310000 - 0x000007feeb5a6000 C:\Program Files\MATLAB\R2012b\bin\win64\mcos.dll +0x00000000714e0000 - 0x00000000714f1000 C:\Program Files\MATLAB\R2012b\bin\win64\mtok.dll +0x000000006e6b0000 - 0x000000006e6e1000 C:\Program Files\MATLAB\R2012b\bin\win64\m_pcodegen.dll +0x0000000079fb0000 - 0x0000000079fe6000 C:\Program Files\MATLAB\R2012b\bin\win64\libmwbridge.dll +0x00000000637b0000 - 0x0000000063878000 C:\Program Files\MATLAB\R2012b\bin\win64\udd.dll +0x00000000624a0000 - 0x00000000625f2000 C:\Program Files\MATLAB\R2012b\bin\win64\libmwgui.dll +0x00000000714c0000 - 0x00000000714d7000 C:\Program Files\MATLAB\R2012b\bin\win64\graphics_util.dll +0x0000000061a40000 - 0x000000006249f000 C:\Program Files\MATLAB\R2012b\bin\win64\hg.dll +0x00000000053f0000 - 0x0000000005458000 C:\Program Files\MATLAB\R2012b\bin\win64\libmat.dll +0x0000000005470000 - 0x0000000005684000 C:\Program Files\MATLAB\R2012b\bin\win64\hdf5dll.dll +0x0000000075710000 - 0x00000000757de000 C:\Program Files\MATLAB\R2012b\bin\win64\jmi.dll +0x00000000056b0000 - 0x00000000056bd000 C:\Program Files\MATLAB\R2012b\bin\win64\nativejava_services.dll +0x0000000063760000 - 0x00000000637a6000 C:\Program Files\MATLAB\R2012b\bin\win64\libmwhardcopy.dll +0x00000000619d0000 - 0x0000000061a33000 C:\Program Files\MATLAB\R2012b\bin\win64\libuij.dll +0x0000000061760000 - 0x00000000619c4000 C:\Program Files\MATLAB\R2012b\bin\win64\hgdatatypes.dll +0x0000000061640000 - 0x000000006175f000 C:\Program Files\MATLAB\R2012b\bin\win64\hgutils.dll +0x0000000061580000 - 0x0000000061640000 C:\Program Files\MATLAB\R2012b\bin\win64\udd_mi.dll +0x0000000005720000 - 0x000000000575b000 C:\Program Files\MATLAB\R2012b\bin\win64\libmwgbtutils.dll +0x0000000005770000 - 0x000000000578b000 C:\Program Files\MATLAB\R2012b\bin\win64\libmwgbt.dll +0x00000000057a0000 - 0x0000000005a71000 C:\Program Files\MATLAB\R2012b\bin\win64\uiw.dll +0x0000000073070000 - 0x000000007307f000 C:\Program Files\MATLAB\R2012b\bin\win64\uinone.dll +0x0000000005aa0000 - 0x0000000005ac9000 C:\Program Files\MATLAB\R2012b\bin\win64\libmwnativefiledialogs.dll +0x0000000005ae0000 - 0x0000000005ae8000 C:\Program Files\MATLAB\R2012b\bin\win64\libmwplatform_res.dll +0x000007fefa8e0000 - 0x000007fefa8f8000 C:\Windows\system32\MPR.dll +0x0000000060150000 - 0x0000000060634000 C:\Windows\WinSxS\amd64_microsoft.vc90.mfc_1fc8b3b9a1e18e3b_9.0.30729.6161_none_044aad0bab1eb146\mfc90.dll +0x000007fefaae0000 - 0x000007fefaae7000 C:\Windows\system32\MSIMG32.dll +0x000007fefaa60000 - 0x000007fefaad1000 C:\Windows\system32\WINSPOOL.DRV +0x0000000061550000 - 0x0000000061572000 C:\Program Files\MATLAB\R2012b\bin\win64\mwoles05.DLL +0x00000000614d0000 - 0x000000006154d000 C:\Program Files\MATLAB\R2012b\bin\win64\comcli.dll +0x00000000614a0000 - 0x00000000614cf000 C:\Windows\WinSxS\amd64_microsoft.vc90.atl_1fc8b3b9a1e18e3b_9.0.30729.6161_none_0a1fd3a3a768b895\ATL90.DLL +0x000000006e6a0000 - 0x000000006e6ac000 C:\Program Files\MATLAB\R2012b\bin\win64\mlautoregister.dll +0x000007fefd750000 - 0x000007fefd7a7000 C:\Windows\system32\apphelp.dll +0x000007fef6140000 - 0x000007fef6191000 C:\Windows\AppPatch\AppPatch64\AcGenral.DLL +0x000007fefd720000 - 0x000007fefd745000 C:\Windows\system32\SspiCli.dll +0x0000000072500000 - 0x0000000072503000 C:\Windows\system32\sfc.dll +0x000007fef6130000 - 0x000007fef6140000 C:\Windows\system32\sfc_os.DLL +0x000007fefd930000 - 0x000007fefd94e000 C:\Windows\system32\USERENV.dll +0x000007fefd920000 - 0x000007fefd92f000 C:\Windows\system32\profapi.dll +0x000007fefbbd0000 - 0x000007fefbbe8000 C:\Windows\system32\dwmapi.dll +0x000007feffae0000 - 0x000007feffb0e000 C:\Windows\system32\IMM32.DLL +0x000007feff350000 - 0x000007feff459000 C:\Windows\system32\MSCTF.dll +0x000007fefc030000 - 0x000007fefc086000 C:\Windows\system32\UxTheme.dll +0x000000006e690000 - 0x000000006e69d000 C:\Windows\WinSxS\amd64_microsoft.vc90.mfcloc_1fc8b3b9a1e18e3b_9.0.30729.6161_none_01c9581e60cbee58\MFC90ENU.DLL +0x0000000005c80000 - 0x0000000005c92000 C:\Program Files\Logitech\SetPoint\GameHook.dll +0x0000000005de0000 - 0x0000000005df1000 C:\Program Files\Logitech\SetPoint\lgscroll.dll +0x0000000073410000 - 0x00000000734d9000 C:\Windows\WinSxS\amd64_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.6229_none_88dcc0bf2fb1b808\MSVCR80.dll + +VM Arguments: +jvm_args: -Xss512k -XX:PermSize=32m -Xms64m -XX:NewRatio=3 -XX:MaxPermSize=128m -Xmx196m -XX:MaxDirectMemorySize=2147400000 -Dsun.java2d.noddraw=true -Dsun.awt.nopixfmt=true -Xshare:off -Xrs -Dsun.awt.disableMixing=true -Djava.library.path=C:\Program Files\MATLAB\R2012b\bin\win64;C:\Program Files\MATLAB\R2012b\sys\jxbrowser\win64\lib vfprintf abort +java_command: +Launcher Type: generic + +Environment Variables: +PATH=C:\Program Files\Common Files\Microsoft Shared\Windows Live;C:\Program Files (x86)\Common Files\Microsoft Shared\Windows Live;C:\Program Files (x86)\Qucs\bin;C:\ProgramData\Oracle\Java\javapath;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\MATLAB\R2012b\runtime\win64;C:\Program Files\MATLAB\R2012b\bin;C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit\;C:\Program Files\Microsoft SQL Server\110\Tools\Binn\;C:\Program Files (x86)\Microsoft SDKs\TypeScript\1.0\;C:\Program Files\TortoiseSVN\bin;C:\Program Files (x86)\mingw32\bin;c:\iverilog\bin;c:\iverilog\gtkwave\bin;C:\Program Files (x86)\Windows Live\Shared;C:\Program Files\Microsoft Windows Performance Toolkit\;C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Common Files\Intel\WirelessCommon\;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files\Calibre2\;C:\Program Files (x86)\Brackets\command;C:\Program Files (x86)\Skype\Phone\;C:\Program Files (x86)\Atmel\Flip 3.4.7\bin;C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Common Files\Intel\WirelessCommon\ +USERNAME=Esposch +OS=Windows_NT +PROCESSOR_IDENTIFIER=Intel64 Family 6 Model 15 Stepping 11, GenuineIntel + + + +--------------- S Y S T E M --------------- + +OS: Windows 7 Build 7601 Service Pack 1 + +CPU:total 2 (2 cores per cpu, 1 threads per core) family 6 model 15 stepping 11, cmov, cx8, fxsr, mmx, sse, sse2, sse3, ssse3 + +Memory: 4k page, physical 8387696k(5975848k free), swap 16773552k(14257900k free) + +vm_info: Java HotSpot(TM) 64-Bit Server VM (14.3-b01) for windows-amd64 JRE (1.6.0_17-b04), built on Oct 11 2009 00:46:08 by "java_re" with MS VC++ 8.0 + +time: Fri Jan 29 11:51:11 2016 +elapsed time: 127 seconds + diff --git a/Old Matlab Interface/hs_err_pid4968.log b/Old Matlab Interface/hs_err_pid4968.log new file mode 100644 index 00000000..e27026ef --- /dev/null +++ b/Old Matlab Interface/hs_err_pid4968.log @@ -0,0 +1,268 @@ +# +# A fatal error has been detected by the Java Runtime Environment: +# +# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x00000000352cf9df, pid=4968, tid=1544 +# +# JRE version: 6.0_17-b04 +# Java VM: Java HotSpot(TM) 64-Bit Server VM (14.3-b01 mixed mode windows-amd64 ) +# Problematic frame: +# C 0x00000000352cf9df +# +# If you would like to submit a bug report, please visit: +# http://java.sun.com/webapps/bugreport/crash.jsp +# + +--------------- T H R E A D --------------- + +Current thread (0x0000000005ef6800): GCTaskThread [stack: 0x00000000449f0000,0x00000000489f0000] [id=1544] + +siginfo: ExceptionCode=0xc0000005, writing address 0x000000003f530afe + +Registers: +EAX=0x000000003f246898, EBX=0x000000003f246898, ECX=0x000000003f2468c8, EDX=0x0000000005fbea20 +ESP=0x00000000489ef8d8, EBP=0x0000000006a59f3b, ESI=0x00000000352cf5b8, EDI=0x0000000005fbea20 +EIP=0x00000000352cf9df, EFLAGS=0x0000000000010a17 + +Top of Stack: (sp=0x00000000489ef8d8) +0x00000000489ef8d8: 0000000078c39d54 0000000000000000 +0x00000000489ef8e8: 00000000352cf9d8 0000000005fbea20 +0x00000000489ef8f8: 0000000005ef0740 0000000005fbea48 +0x00000000489ef908: 0000000078c3a0ad 0000000000000000 +0x00000000489ef918: 0000000000000000 0000000005fbea20 +0x00000000489ef928: 000000003f246898 000000003ef18000 +0x00000000489ef938: 0000000000001000 0000000000000000 +0x00000000489ef948: 000007fefdb21203 0000000000000000 +0x00000000489ef958: 0000000005ef0500 0000000005fbea20 +0x00000000489ef968: 0000000005fbea20 000000000eb5182f +0x00000000489ef978: 0000000036595e00 0000000000003de4 +0x00000000489ef988: 0000000078c3b7b9 0000000000000048 +0x00000000489ef998: 000000000000003d 0000000000000001 +0x00000000489ef9a8: 000000003ef1cfc8 0000000000000000 +0x00000000489ef9b8: 0000000000000000 0000000000000000 +0x00000000489ef9c8: 000000003ef1cfc8 0000000000000000 + +Instructions: (pc=0x00000000352cf9df) +0x00000000352cf9cf: 00 a8 62 34 2c 00 00 00 00 05 00 00 00 00 00 00 +0x00000000352cf9df: 00 b0 66 a2 2e 00 00 00 00 5b 75 01 00 02 1f 03 + + +Stack: [0x00000000449f0000,0x00000000489f0000], sp=0x00000000489ef8d8, free space=65534k +Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code) +C 0x00000000352cf9df + + +--------------- P R O C E S S --------------- + +Java Threads: ( => current thread ) + 0x0000000060f92800 JavaThread "Code Analyzer updating thread" [_thread_blocked, id=1356, stack(0x00000000624e0000,0x0000000062560000)] + 0x0000000060f91800 JavaThread "Code Analyzer updating thread" [_thread_blocked, id=2584, stack(0x0000000062010000,0x0000000062090000)] + 0x0000000060f93000 JavaThread "Code Analyzer updating thread" [_thread_blocked, id=3492, stack(0x0000000062130000,0x00000000621b0000)] + 0x0000000059309800 JavaThread "Foxtrot Multi Worker Thread Runner #1" daemon [_thread_blocked, id=4604, stack(0x00000000406a0000,0x0000000040720000)] + 0x0000000059308000 JavaThread "pool-4-thread-1" [_thread_blocked, id=5856, stack(0x0000000028620000,0x00000000286a0000)] + 0x000000005930c800 JavaThread "Active Reference Queue Daemon" daemon [_thread_blocked, id=4512, stack(0x0000000059ef0000,0x0000000059f70000)] + 0x000000005930c000 JavaThread "Timer-21" daemon [_thread_blocked, id=2512, stack(0x0000000028eb0000,0x0000000028f30000)] + 0x000000005930b000 JavaThread "Prefs Updater" daemon [_thread_blocked, id=3100, stack(0x00000000285a0000,0x0000000028620000)] + 0x0000000059307800 JavaThread "Thread-39" [_thread_blocked, id=1732, stack(0x0000000048a30000,0x0000000048ab0000)] + 0x0000000059306800 JavaThread "Timer-6" daemon [_thread_blocked, id=188, stack(0x0000000062220000,0x00000000622a0000)] + 0x0000000059305800 JavaThread "Explorer NavigationContext request queue" [_thread_blocked, id=2988, stack(0x00000000620a0000,0x0000000062120000)] + 0x0000000059304000 JavaThread "AddressBar directory emptiness poller" [_thread_blocked, id=5308, stack(0x0000000059d00000,0x0000000059d80000)] + 0x0000000059303000 JavaThread "Explorer Refresh Service 1569840413" [_thread_blocked, id=2040, stack(0x000000005c950000,0x000000005c9d0000)] + 0x0000000059301800 JavaThread "Timer-1" daemon [_thread_blocked, id=6092, stack(0x000000000f110000,0x000000000f190000)] + 0x0000000059301000 JavaThread "TimerQueue" daemon [_thread_blocked, id=5932, stack(0x000000000f1a0000,0x000000000f220000)] + 0x00000000592fe000 JavaThread "Thread-5" daemon [_thread_blocked, id=2428, stack(0x000000000f040000,0x000000000f0c0000)] + 0x0000000059300000 JavaThread "FelixPackageAdmin" daemon [_thread_blocked, id=5920, stack(0x0000000059fc0000,0x000000005a040000)] + 0x00000000592ff800 JavaThread "FelixStartLevel" daemon [_thread_blocked, id=4728, stack(0x0000000018fe0000,0x0000000019060000)] + 0x00000000592ff000 JavaThread "FelixDispatchQueue" daemon [_thread_blocked, id=1428, stack(0x0000000059da0000,0x0000000059e20000)] + 0x0000000058eea800 JavaThread "AWT-EventQueue-0" [_thread_blocked, id=4276, stack(0x0000000059c30000,0x0000000059cb0000)] + 0x0000000058d9b800 JavaThread "com.google.common.base.internal.Finalizer" daemon [_thread_blocked, id=5616, stack(0x00000000448e0000,0x0000000044960000)] + 0x0000000058c5c000 JavaThread "AWT-Windows" daemon [_thread_in_native, id=5636, stack(0x0000000008e90000,0x0000000008f10000)] + 0x0000000058c5b000 JavaThread "AWT-Shutdown" [_thread_blocked, id=5964, stack(0x0000000010e50000,0x0000000010ed0000)] + 0x000000000ec08800 JavaThread "Java2D Disposer" daemon [_thread_blocked, id=5108, stack(0x0000000008f10000,0x0000000008f90000)] + 0x000000000fe32000 JavaThread "Timer-0" [_thread_blocked, id=604, stack(0x0000000008d10000,0x0000000008d90000)] + 0x000000000fdaa800 JavaThread "EventMgr Dispatcher" daemon [_thread_in_native, id=2236, stack(0x0000000009260000,0x000000000d260000)] + 0x000000000ec60800 JavaThread "Low Memory Detector" daemon [_thread_blocked, id=1300, stack(0x000000000ef10000,0x000000000ef90000)] + 0x000000000ec5e800 JavaThread "CompilerThread1" daemon [_thread_blocked, id=3504, stack(0x0000000050ae0000,0x0000000054ae0000)] + 0x000000000ec56800 JavaThread "CompilerThread0" daemon [_thread_blocked, id=5944, stack(0x000000004cae0000,0x0000000050ae0000)] + 0x000000000ec56000 JavaThread "Attach Listener" daemon [_thread_blocked, id=1124, stack(0x000000000da10000,0x000000000da90000)] + 0x000000000ebfd800 JavaThread "Finalizer" daemon [_thread_blocked, id=1712, stack(0x000000000ee10000,0x000000000ee90000)] + 0x000000000ebf5000 JavaThread "Reference Handler" daemon [_thread_blocked, id=3260, stack(0x000000000ee90000,0x000000000ef10000)] + 0x0000000005ffe800 JavaThread "main" [_thread_blocked, id=1268, stack(0x00000000000c0000,0x00000000040c0000)] + +Other Threads: + 0x000000000ebf1000 VMThread [stack: 0x0000000048ae0000,0x000000004cae0000] [id=5104] + 0x000000000ecad000 WatcherThread [stack: 0x0000000054ae0000,0x0000000058ae0000] [id=6048] + +=>0x0000000005ef6800 (exited) GCTaskThread [stack: 0x00000000449f0000,0x00000000489f0000] [id=1544] + +VM state:at safepoint (normal execution) + +VM Mutex/Monitor currently owned by a thread: ([mutex/lock_event]) +[0x0000000005eea660] Threads_lock - owner thread: 0x000000000ebf1000 +[0x0000000005eeab60] Heap_lock - owner thread: 0x0000000005ffe800 + +Heap + PSYoungGen total 25984K, used 25984K [0x000000003d590000, 0x000000003f2e0000, 0x0000000040690000) + eden space 24256K, 100% used [0x000000003d590000,0x000000003ed40000,0x000000003ed40000) + from space 1728K, 100% used [0x000000003f130000,0x000000003f2e0000,0x000000003f2e0000) + to space 2560K, 60% used [0x000000003ede0000,0x000000003ef60000,0x000000003f060000) + PSOldGen total 150528K, used 91202K [0x0000000034290000, 0x000000003d590000, 0x000000003d590000) + object space 150528K, 60% used [0x0000000034290000,0x0000000039ba09d0,0x000000003d590000) + PSPermGen total 123200K, used 73638K [0x000000002c290000, 0x0000000033ae0000, 0x0000000034290000) + object space 123200K, 59% used [0x000000002c290000,0x0000000030a79ae0,0x0000000033ae0000) + +Dynamic libraries: +0x000000013f710000 - 0x000000013f73d000 C:\Program Files\MATLAB\R2012b\bin\win64\MATLAB.exe +0x0000000077b00000 - 0x0000000077ca9000 C:\Windows\SYSTEM32\ntdll.dll +0x00000000779e0000 - 0x0000000077aff000 C:\Windows\system32\kernel32.dll +0x000007fefdb20000 - 0x000007fefdb8c000 C:\Windows\system32\KERNELBASE.dll +0x0000000074460000 - 0x000000007451f000 C:\Program Files\MATLAB\R2012b\bin\win64\libut.dll +0x00000000758a0000 - 0x000000007595c000 C:\Program Files\MATLAB\R2012b\bin\win64\libmwi18n.dll +0x0000000180000000 - 0x000000018000b000 C:\Program Files\MATLAB\R2012b\bin\win64\libmwresource_core.dll +0x000000005cfd0000 - 0x000000005d0a3000 C:\Windows\WinSxS\amd64_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.6161_none_08e61857a83bc251\MSVCP90.dll +0x000000006e950000 - 0x000000006e9f3000 C:\Windows\WinSxS\amd64_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.6161_none_08e61857a83bc251\MSVCR90.dll +0x000000007a170000 - 0x000000007a19c000 C:\Program Files\MATLAB\R2012b\bin\win64\boost_filesystem-vc90-mt-1_44.dll +0x000000007a560000 - 0x000000007a569000 C:\Program Files\MATLAB\R2012b\bin\win64\boost_system-vc90-mt-1_44.dll +0x000007feffd00000 - 0x000007feffddb000 C:\Windows\system32\ADVAPI32.dll +0x000007feffc60000 - 0x000007feffcff000 C:\Windows\system32\msvcrt.dll +0x000007fefe550000 - 0x000007fefe56f000 C:\Windows\SYSTEM32\sechost.dll +0x000007fefdc70000 - 0x000007fefdd9d000 C:\Windows\system32\RPCRT4.dll +0x000000007a010000 - 0x000000007a035000 C:\Program Files\MATLAB\R2012b\bin\win64\LIBEXPAT.dll +0x00000000626b0000 - 0x00000000628a1000 C:\Program Files\MATLAB\R2012b\bin\win64\icuin44.dll +0x000000005ce50000 - 0x000000005cfc1000 C:\Program Files\MATLAB\R2012b\bin\win64\icuuc44.dll +0x0000000010000000 - 0x0000000010e41000 C:\Program Files\MATLAB\R2012b\bin\win64\icudt44.dll +0x0000000073f70000 - 0x000000007411d000 C:\Program Files\MATLAB\R2012b\bin\win64\libmwfl.dll +0x0000000004310000 - 0x00000000046c6000 C:\Program Files\MATLAB\R2012b\bin\win64\libmwMATLAB_res.dll +0x000000007a3b0000 - 0x000000007a3c0000 C:\Program Files\MATLAB\R2012b\bin\win64\boost_date_time-vc90-mt-1_44.dll +0x000000007a250000 - 0x000000007a263000 C:\Program Files\MATLAB\R2012b\bin\win64\boost_signals-vc90-mt-1_44.dll +0x000000007a2d0000 - 0x000000007a2e2000 C:\Program Files\MATLAB\R2012b\bin\win64\boost_thread-vc90-mt-1_44.dll +0x00000000046d0000 - 0x000000000478d000 C:\Program Files\MATLAB\R2012b\bin\win64\boost_log-vc90-mt-1_44.dll +0x0000000077cd0000 - 0x0000000077cd7000 C:\Windows\system32\PSAPI.DLL +0x000007fefed00000 - 0x000007fefed4d000 C:\Windows\system32\WS2_32.dll +0x000007fefe540000 - 0x000007fefe548000 C:\Windows\system32\NSI.dll +0x00000000041b0000 - 0x00000000041f6000 C:\Program Files\MATLAB\R2012b\bin\win64\tbb.dll +0x000007fefe300000 - 0x000007fefe319000 C:\Windows\system32\imagehlp.dll +0x0000000072db0000 - 0x0000000072dc3000 C:\Program Files\MATLAB\R2012b\bin\win64\icuio44.dll +0x000007fef6840000 - 0x000007fef6965000 C:\Windows\system32\dbghelp.dll +0x00000000778e0000 - 0x00000000779da000 C:\Windows\system32\USER32.dll +0x000007feffbf0000 - 0x000007feffc57000 C:\Windows\system32\GDI32.dll +0x000007fefe320000 - 0x000007fefe32e000 C:\Windows\system32\LPK.dll +0x000007fefec30000 - 0x000007fefecf9000 C:\Windows\system32\USP10.dll +0x00000000047a0000 - 0x0000000004a7c000 C:\Program Files\MATLAB\R2012b\bin\win64\libmwservices.dll +0x0000000075a20000 - 0x0000000075af3000 C:\Program Files\MATLAB\R2012b\bin\win64\libmx.dll +0x0000000004aa0000 - 0x0000000004ac9000 C:\Program Files\MATLAB\R2012b\bin\win64\tbbmalloc.dll +0x000000007a210000 - 0x000000007a228000 C:\Program Files\MATLAB\R2012b\bin\win64\zlib1.dll +0x0000000004af0000 - 0x0000000004b3d000 C:\Program Files\MATLAB\R2012b\bin\win64\libmwregexp.dll +0x0000000004b50000 - 0x0000000004b73000 C:\Program Files\MATLAB\R2012b\bin\win64\libmwmfl_scalar.dll +0x0000000075f10000 - 0x0000000075f60000 C:\Program Files\MATLAB\R2012b\bin\win64\mpath.dll +0x000000007b680000 - 0x000000007bc9a000 C:\Program Files\MATLAB\R2012b\bin\win64\mlutil.dll +0x00000000754d0000 - 0x0000000075551000 C:\Program Files\MATLAB\R2012b\bin\win64\xmlcore.dll +0x0000000004bc0000 - 0x0000000004e13000 C:\Program Files\MATLAB\R2012b\bin\win64\xerces-c_2_7.dll +0x0000000004e30000 - 0x0000000004e50000 C:\Program Files\MATLAB\R2012b\bin\win64\libmwMATLAB_settings_res.dll +0x0000000004e60000 - 0x0000000004e70000 C:\Program Files\MATLAB\R2012b\bin\win64\boost_iostreams-vc90-mt-1_44.dll +0x0000000004e80000 - 0x0000000004ec7000 C:\Program Files\MATLAB\R2012b\bin\win64\boost_serialization-vc90-mt-1_44.dll +0x000007fefee60000 - 0x000007feffbe9000 C:\Windows\system32\SHELL32.dll +0x000007fefead0000 - 0x000007fefeb41000 C:\Windows\system32\SHLWAPI.dll +0x000007fefa150000 - 0x000007fefa1f0000 C:\Windows\WinSxS\amd64_microsoft.windows.common-controls_6595b64144ccf1df_5.82.7601.18837_none_a4d981ff711297b6\COMCTL32.dll +0x000007fefe080000 - 0x000007fefe117000 C:\Windows\system32\COMDLG32.dll +0x000007fefb320000 - 0x000007fefb336000 C:\Windows\system32\NETAPI32.dll +0x000007fefb310000 - 0x000007fefb31c000 C:\Windows\system32\netutils.dll +0x000007fefd370000 - 0x000007fefd393000 C:\Windows\system32\srvcli.dll +0x000007fefb2f0000 - 0x000007fefb305000 C:\Windows\system32\wkscli.dll +0x000007fefe330000 - 0x000007fefe533000 C:\Windows\system32\ole32.dll +0x000007fefeb50000 - 0x000007fefec27000 C:\Windows\system32\OLEAUT32.dll +0x0000000074970000 - 0x0000000074a31000 C:\Program Files\MATLAB\R2012b\bin\win64\mcr.dll +0x0000000075000000 - 0x00000000753e9000 C:\Program Files\MATLAB\R2012b\bin\win64\iqm.dll +0x0000000074e80000 - 0x0000000074f38000 C:\Program Files\MATLAB\R2012b\bin\win64\m_dispatcher.dll +0x0000000074880000 - 0x000000007496d000 C:\Program Files\MATLAB\R2012b\bin\win64\boost_regex-vc90-mt-1_44.dll +0x000007fee8f40000 - 0x000007fee97b1000 C:\Program Files\MATLAB\R2012b\bin\win64\m_interpreter.dll +0x000000006e390000 - 0x000000006e3b7000 C:\Program Files\MATLAB\R2012b\bin\win64\libmex.dll +0x0000000062620000 - 0x00000000626a4000 C:\Program Files\MATLAB\R2012b\bin\win64\profiler.dll +0x0000000004f50000 - 0x00000000051ba000 C:\Program Files\MATLAB\R2012b\bin\win64\libmwmathutil.dll +0x0000000079f40000 - 0x0000000079f6e000 C:\Program Files\MATLAB\R2012b\bin\win64\libmwmathrng.dll +0x00000000051e0000 - 0x00000000051f2000 C:\Program Files\MATLAB\R2012b\bin\win64\libmwmfl_rng.dll +0x0000000074c10000 - 0x0000000074cee000 C:\Program Files\MATLAB\R2012b\bin\win64\libmwmathcore.dll +0x0000000076160000 - 0x00000000761ca000 C:\Program Files\MATLAB\R2012b\bin\win64\libmwspmatrix.dll +0x0000000075ea0000 - 0x0000000075f02000 C:\Program Files\MATLAB\R2012b\bin\win64\libmwcholmod.dll +0x000000007a460000 - 0x000000007a46d000 C:\Program Files\MATLAB\R2012b\bin\win64\libmwamd.dll +0x000000007a4b0000 - 0x000000007a4bc000 C:\Program Files\MATLAB\R2012b\bin\win64\libmwcolamd.dll +0x000000007a290000 - 0x000000007a2a9000 C:\Program Files\MATLAB\R2012b\bin\win64\libmwblas.dll +0x000000007a310000 - 0x000000007a321000 C:\Program Files\MATLAB\R2012b\bin\win64\libmwbinder.dll +0x000000007a4d0000 - 0x000000007a4dc000 C:\Program Files\MATLAB\R2012b\bin\win64\libmwompwrapper.dll +0x0000000005290000 - 0x0000000005315000 C:\Program Files\MATLAB\R2012b\bin\win64\libmwlapack.dll +0x00000000625f0000 - 0x0000000062611000 C:\Program Files\MATLAB\R2012b\bin\win64\m_pcodeio.dll +0x0000000079b10000 - 0x0000000079b77000 C:\Program Files\MATLAB\R2012b\bin\win64\m_ir.dll +0x000000005c2a0000 - 0x000000005c910000 C:\Program Files\MATLAB\R2012b\bin\win64\m_parser.dll +0x00000000625d0000 - 0x00000000625ea000 C:\Program Files\MATLAB\R2012b\bin\win64\ir_xfmr.dll +0x000007feea390000 - 0x000007feea626000 C:\Program Files\MATLAB\R2012b\bin\win64\mcos.dll +0x000000005ce30000 - 0x000000005ce41000 C:\Program Files\MATLAB\R2012b\bin\win64\mtok.dll +0x000000005cdf0000 - 0x000000005ce21000 C:\Program Files\MATLAB\R2012b\bin\win64\m_pcodegen.dll +0x0000000079fb0000 - 0x0000000079fe6000 C:\Program Files\MATLAB\R2012b\bin\win64\libmwbridge.dll +0x000000005cd20000 - 0x000000005cde8000 C:\Program Files\MATLAB\R2012b\bin\win64\udd.dll +0x000000005cbc0000 - 0x000000005cd12000 C:\Program Files\MATLAB\R2012b\bin\win64\libmwgui.dll +0x000000005cba0000 - 0x000000005cbb7000 C:\Program Files\MATLAB\R2012b\bin\win64\graphics_util.dll +0x000000005b840000 - 0x000000005c29f000 C:\Program Files\MATLAB\R2012b\bin\win64\hg.dll +0x00000000053f0000 - 0x0000000005458000 C:\Program Files\MATLAB\R2012b\bin\win64\libmat.dll +0x0000000005470000 - 0x0000000005684000 C:\Program Files\MATLAB\R2012b\bin\win64\hdf5dll.dll +0x0000000075710000 - 0x00000000757de000 C:\Program Files\MATLAB\R2012b\bin\win64\jmi.dll +0x00000000056b0000 - 0x00000000056bd000 C:\Program Files\MATLAB\R2012b\bin\win64\nativejava_services.dll +0x000000005cb50000 - 0x000000005cb96000 C:\Program Files\MATLAB\R2012b\bin\win64\libmwhardcopy.dll +0x000000005cae0000 - 0x000000005cb43000 C:\Program Files\MATLAB\R2012b\bin\win64\libuij.dll +0x000000005b5d0000 - 0x000000005b834000 C:\Program Files\MATLAB\R2012b\bin\win64\hgdatatypes.dll +0x000000005b4b0000 - 0x000000005b5cf000 C:\Program Files\MATLAB\R2012b\bin\win64\hgutils.dll +0x000000005b3f0000 - 0x000000005b4b0000 C:\Program Files\MATLAB\R2012b\bin\win64\udd_mi.dll +0x0000000005720000 - 0x000000000575b000 C:\Program Files\MATLAB\R2012b\bin\win64\libmwgbtutils.dll +0x0000000005770000 - 0x000000000578b000 C:\Program Files\MATLAB\R2012b\bin\win64\libmwgbt.dll +0x00000000057a0000 - 0x0000000005a71000 C:\Program Files\MATLAB\R2012b\bin\win64\uiw.dll +0x0000000073df0000 - 0x0000000073dff000 C:\Program Files\MATLAB\R2012b\bin\win64\uinone.dll +0x0000000005aa0000 - 0x0000000005ac9000 C:\Program Files\MATLAB\R2012b\bin\win64\libmwnativefiledialogs.dll +0x0000000005ae0000 - 0x0000000005ae8000 C:\Program Files\MATLAB\R2012b\bin\win64\libmwplatform_res.dll +0x000007fef9180000 - 0x000007fef9198000 C:\Windows\system32\MPR.dll +0x000000005af00000 - 0x000000005b3e4000 C:\Windows\WinSxS\amd64_microsoft.vc90.mfc_1fc8b3b9a1e18e3b_9.0.30729.6161_none_044aad0bab1eb146\mfc90.dll +0x000007fefa250000 - 0x000007fefa257000 C:\Windows\system32\MSIMG32.dll +0x000007fefa0d0000 - 0x000007fefa141000 C:\Windows\system32\WINSPOOL.DRV +0x000000005cab0000 - 0x000000005cad2000 C:\Program Files\MATLAB\R2012b\bin\win64\mwoles05.DLL +0x000000005ae80000 - 0x000000005aefd000 C:\Program Files\MATLAB\R2012b\bin\win64\comcli.dll +0x000000005ca80000 - 0x000000005caaf000 C:\Windows\WinSxS\amd64_microsoft.vc90.atl_1fc8b3b9a1e18e3b_9.0.30729.6161_none_0a1fd3a3a768b895\ATL90.DLL +0x0000000072da0000 - 0x0000000072dac000 C:\Program Files\MATLAB\R2012b\bin\win64\mlautoregister.dll +0x000007fefd6f0000 - 0x000007fefd747000 C:\Windows\system32\apphelp.dll +0x000007fef51c0000 - 0x000007fef5211000 C:\Windows\AppPatch\AppPatch64\AcGenral.DLL +0x000007fefd6c0000 - 0x000007fefd6e5000 C:\Windows\system32\SspiCli.dll +0x00000000700e0000 - 0x00000000700e3000 C:\Windows\system32\sfc.dll +0x000007fef5290000 - 0x000007fef52a0000 C:\Windows\system32\sfc_os.DLL +0x000007fefdbf0000 - 0x000007fefdc0e000 C:\Windows\system32\USERENV.dll +0x000007fefd8c0000 - 0x000007fefd8cf000 C:\Windows\system32\profapi.dll +0x000007fefbb70000 - 0x000007fefbb88000 C:\Windows\system32\dwmapi.dll +0x000007feffde0000 - 0x000007feffe0e000 C:\Windows\system32\IMM32.DLL +0x000007fefed50000 - 0x000007fefee59000 C:\Windows\system32\MSCTF.dll +0x000007fefbfd0000 - 0x000007fefc026000 C:\Windows\system32\UxTheme.dll +0x000000006e380000 - 0x000000006e38d000 C:\Windows\WinSxS\amd64_microsoft.vc90.mfcloc_1fc8b3b9a1e18e3b_9.0.30729.6161_none_01c9581e60cbee58\MFC90ENU.DLL +0x0000000005b80000 - 0x0000000005b92000 C:\Program Files\Logitech\SetPoint\GameHook.dll +0x0000000005bc0000 - 0x0000000005bd1000 C:\Program Files\Logitech\SetPoint\lgscroll.dll +0x000000006f600000 - 0x000000006f6c9000 C:\Windows\WinSxS\amd64_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.6229_none_88dcc0bf2fb1b808\MSVCR80.dll + +VM Arguments: +jvm_args: -Xss512k -XX:PermSize=32m -Xms64m -XX:NewRatio=3 -XX:MaxPermSize=128m -Xmx196m -XX:MaxDirectMemorySize=2147400000 -Dsun.java2d.noddraw=true -Dsun.awt.nopixfmt=true -Xshare:off -Xrs -Dsun.awt.disableMixing=true -Djava.library.path=C:\Program Files\MATLAB\R2012b\bin\win64;C:\Program Files\MATLAB\R2012b\sys\jxbrowser\win64\lib vfprintf abort +java_command: +Launcher Type: generic + +Environment Variables: +PATH=C:\Program Files\Common Files\Microsoft Shared\Windows Live;C:\Program Files (x86)\Common Files\Microsoft Shared\Windows Live;C:\Program Files (x86)\Qucs\bin;C:\ProgramData\Oracle\Java\javapath;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\MATLAB\R2012b\runtime\win64;C:\Program Files\MATLAB\R2012b\bin;C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit\;C:\Program Files\Microsoft SQL Server\110\Tools\Binn\;C:\Program Files (x86)\Microsoft SDKs\TypeScript\1.0\;C:\Program Files\TortoiseSVN\bin;C:\Program Files (x86)\mingw32\bin;c:\iverilog\bin;c:\iverilog\gtkwave\bin;C:\Program Files (x86)\Windows Live\Shared;C:\Program Files\Microsoft Windows Performance Toolkit\;C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Common Files\Intel\WirelessCommon\;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files\Calibre2\;C:\Program Files (x86)\Brackets\command;C:\Program Files (x86)\Skype\Phone\;C:\Program Files (x86)\Atmel\Flip 3.4.7\bin;C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Common Files\Intel\WirelessCommon\ +USERNAME=Esposch +OS=Windows_NT +PROCESSOR_IDENTIFIER=Intel64 Family 6 Model 15 Stepping 11, GenuineIntel + + + +--------------- S Y S T E M --------------- + +OS: Windows 7 Build 7601 Service Pack 1 + +CPU:total 2 (2 cores per cpu, 1 threads per core) family 6 model 15 stepping 11, cmov, cx8, fxsr, mmx, sse, sse2, sse3, ssse3 + +Memory: 4k page, physical 8387696k(3509800k free), swap 16773552k(11408064k free) + +vm_info: Java HotSpot(TM) 64-Bit Server VM (14.3-b01) for windows-amd64 JRE (1.6.0_17-b04), built on Oct 11 2009 00:46:08 by "java_re" with MS VC++ 8.0 + +time: Fri Jan 29 23:06:01 2016 +elapsed time: 2766 seconds + diff --git a/Old Matlab Interface/includes/libusbk.h b/Old Matlab Interface/includes/libusbk.h new file mode 100644 index 00000000..bac5f81b --- /dev/null +++ b/Old Matlab Interface/includes/libusbk.h @@ -0,0 +1,4000 @@ +/*! \file libusbk.h +* \brief functions for usb device communication. +* +* \note +* This is the \b main libusbK USB user include file. +*/ + +#ifndef _LIBUSBK_H__ +#define _LIBUSBK_H__ + +#include "lusbk_shared.h" + +/////////////////////////////////////////////////////////////////////// +// L I B U S B K PUBLIC STRUCTS, DEFINES, AND ENUMS ////////////////// +/////////////////////////////////////////////////////////////////////// + +#ifndef _LIBUSBK_LIBK_TYPES + +/*! \addtogroup libk +* @{ +*/ + +#define _in +#define _inopt +#define _out +#define _outopt +#define _ref +#define _refopt + +//! UsbK base function pointer, See \ref LibK_GetProcAddress. +typedef INT_PTR (FAR WINAPI* KPROC)(); + +//! Indicates that a function is an exported API call. +#if defined(DYNAMIC_DLL) +#define KUSB_EXP +#else +#define KUSB_EXP +#endif + +//! Indicates the calling convention. This is always WINAPI (stdcall) by default. +#if !defined(KUSB_API) +#define KUSB_API WINAPI +#endif + +#pragma warning(disable:4201) + +#if _MSC_VER >= 1200 +#pragma warning(push) +#endif +#pragma warning (disable:4201) +#pragma warning(disable:4214) // named type definition in parentheses + +//! User defined handle context space, see \ref LibK_GetContext. +typedef INT_PTR KLIB_USER_CONTEXT; + +//! KUSB control setup packet. +/*! +* This union structure is identical in size to a \ref WINUSB_SETUP_PACKET, +* but provides additional field accessors. (see \ref libusbk.h for structure details) +*/ +typedef union _KUSB_SETUP_PACKET +{ + UCHAR Bytes[8]; + USHORT Words[4]; + struct + { + //! Request value + struct + { + UCHAR Recipient: 2; + UCHAR Reserved: 3; + UCHAR Type: 2; + UCHAR Dir: 1; + } BmRequest; + + //! Request type value + UCHAR Request; + + //! wValue + USHORT Value; + + //! wIndex + USHORT Index; + + //! wLength ushort value + USHORT Length; + }; + struct + { + struct + { + UCHAR b0: 1; + UCHAR b1: 1; + UCHAR b2: 1; + UCHAR b3: 1; + UCHAR b4: 1; + UCHAR b5: 1; + UCHAR b6: 1; + UCHAR b7: 1; + } BmRequestBits; + + struct + { + UCHAR b0: 1; + UCHAR b1: 1; + UCHAR b2: 1; + UCHAR b3: 1; + UCHAR b4: 1; + UCHAR b5: 1; + UCHAR b6: 1; + UCHAR b7: 1; + } RequestBits; + + UCHAR ValueLo; + UCHAR ValueHi; + UCHAR IndexLo; + UCHAR IndexHi; + UCHAR LengthLo; + UCHAR LengthHi; + }; +} KUSB_SETUP_PACKET; +// setup packet is eight bytes -- defined by spec +C_ASSERT(sizeof(KUSB_SETUP_PACKET) == 8); + +#if _MSC_VER >= 1200 +#pragma warning(pop) +#endif + + +//! Base handle type for all library handles, See \ref KLIB_HANDLE_TYPE. +typedef void* KLIB_HANDLE; + +//! Opaque UsbK handle, see \ref UsbK_Init. +typedef KLIB_HANDLE KUSB_HANDLE; + +//! Opaque LstK handle, see \ref LstK_Init. +typedef KLIB_HANDLE KLST_HANDLE; + +//! Opaque HotK handle, see \ref HotK_Init. +typedef KLIB_HANDLE KHOT_HANDLE; + +//! Opaque OvlK handle, see \ref OvlK_Acquire. +typedef KLIB_HANDLE KOVL_HANDLE; + + +//! Opaque OvlPoolK handle, see \ref OvlK_Init. +typedef KLIB_HANDLE KOVL_POOL_HANDLE; + +//! Opaque StmK handle, see \ref StmK_Init. +typedef KLIB_HANDLE KSTM_HANDLE; + +//! Handle type enumeration. +typedef enum _KLIB_HANDLE_TYPE +{ + //! Hot plug handle. \ref KHOT_HANDLE + KLIB_HANDLE_TYPE_HOTK, + + //! USB handle. \ref KUSB_HANDLE + KLIB_HANDLE_TYPE_USBK, + + //! Shared USB handle. \ref KUSB_HANDLE + KLIB_HANDLE_TYPE_USBSHAREDK, + + //! Device list handle. \ref KLST_HANDLE + KLIB_HANDLE_TYPE_LSTK, + + //! Device info handle. \ref KLST_DEVINFO_HANDLE + KLIB_HANDLE_TYPE_LSTINFOK, + + //! Overlapped handle. \ref KOVL_HANDLE + KLIB_HANDLE_TYPE_OVLK, + + //! Overlapped pool handle. \ref KOVL_POOL_HANDLE + KLIB_HANDLE_TYPE_OVLPOOLK, + + //! Pipe stream handle. \ref KSTM_HANDLE + KLIB_HANDLE_TYPE_STMK, + + //! Max handle type count. + KLIB_HANDLE_TYPE_COUNT +} KLIB_HANDLE_TYPE; + +//! Function typedef for \ref LibK_SetCleanupCallback. +typedef INT KUSB_API KLIB_HANDLE_CLEANUP_CB (_in KLIB_HANDLE Handle, _in KLIB_HANDLE_TYPE HandleType, _in KLIB_USER_CONTEXT UserContext); + +//! libusbK verson information structure. +typedef struct _KLIB_VERSION +{ + //! Major version number. + INT Major; + + //! Minor version number. + INT Minor; + + //! Micro version number. + INT Micro; + + //! Nano version number. + INT Nano; +} KLIB_VERSION; +//! Pointer to a \copybrief KLIB_VERSION +typedef KLIB_VERSION* PKLIB_VERSION; + +/*! @} */ +#endif + +#ifndef _LIBUSBK_ISOK_TYPES +/*! \addtogroup isok +* @{ +*/ + + +//! Callback function typedef for \ref IsoK_EnumPackets +typedef BOOL KUSB_API KISO_ENUM_PACKETS_CB (_in UINT PacketIndex, _in PKISO_PACKET IsoPacket, _in PVOID UserState); + +/*! @} */ +#endif + +#ifndef _LIBUSBK_LSTK_TYPES + +/*! \addtogroup lstk +* @{ +*/ + +//! Allocated length for all strings in a \ref KLST_DEVINFO structure. +#define KLST_STRING_MAX_LEN 256 + +//! Device list sync flags. +/*! +* These sync flags are also use by the hot plug module to indicate device +* arrival/removal notifications: +* - \b DeviceArrival = KLST_SYNC_FLAG_ADDED +* - \b DeviceRemoval = KLST_SYNC_FLAG_REMOVED +*/ +typedef enum _KLST_SYNC_FLAG +{ + //! Cleared/invalid state. + KLST_SYNC_FLAG_NONE = 0L, + + //! Unchanged state, + KLST_SYNC_FLAG_UNCHANGED = 0x0001, + + //! Added (Arrival) state, + KLST_SYNC_FLAG_ADDED = 0x0002, + + //! Removed (Unplugged) state, + KLST_SYNC_FLAG_REMOVED = 0x0004, + + //! Connect changed state. + KLST_SYNC_FLAG_CONNECT_CHANGE = 0x0008, + + //! All states. + KLST_SYNC_FLAG_MASK = 0x000F, +} KLST_SYNC_FLAG; + +//! Common usb device information structure +typedef struct _KLST_DEV_COMMON_INFO +{ + //! VendorID parsed from \ref KLST_DEVINFO::DeviceID + INT Vid; + + //! ProductID parsed from \ref KLST_DEVINFO::DeviceID + INT Pid; + + //! Composite interface number parsed from \ref KLST_DEVINFO::DeviceID. Set to \b -1 for devices that do not have the composite parent driver. + INT MI; + + // An ID that uniquely identifies a USB device. + CHAR InstanceID[KLST_STRING_MAX_LEN]; + +} KLST_DEV_COMMON_INFO; +//! Pointer to a \c KLST_DEV_COMMON_INFO structure. +typedef KLST_DEV_COMMON_INFO* PKLST_DEV_COMMON_INFO; + +//! Semi-opaque device information structure of a device list. +/*! +* +* \attention This structure is semi-opaque. +* +*/ +typedef struct _KLST_DEVINFO +{ + //! Common usb device information + KLST_DEV_COMMON_INFO Common; + + //! Driver id this device element is using + INT DriverID; + + //! Device interface GUID + CHAR DeviceInterfaceGUID[KLST_STRING_MAX_LEN]; + + //! Device instance ID. + /*! + * A Device instance ID has the following format: + * [enumerator]\[enumerator-specific-device-ID]\[instance-specific-ID] + * - [enumerator] + * - For USB device, the enumerator is always \c USB + * - [enumerator-specific-device-ID] + * - Contains the vendor and product id (VID_xxxx&PID_xxxx) + * - If present, contains the usbccgp (windows composite device layer) interface number (MI_xx) + * - [instance-specific-ID] + * - If the device is composite, contains a unique interface ID generated by Windows. + * - If the device is not composite and has a serial number, contains the devices serial number. + * - If the device does not have a serial number, contains a unique ID generated by Windows. + */ + CHAR DeviceID[KLST_STRING_MAX_LEN]; + + //! Class GUID. + CHAR ClassGUID[KLST_STRING_MAX_LEN]; + + //! Manufacturer name as specified in the INF file. + CHAR Mfg[KLST_STRING_MAX_LEN]; + + //! Device description as specified in the INF file. + CHAR DeviceDesc[KLST_STRING_MAX_LEN]; + + //! Driver service name. + CHAR Service[KLST_STRING_MAX_LEN]; + + //! Unique identifier. + CHAR SymbolicLink[KLST_STRING_MAX_LEN]; + + //! physical device filename used with the Windows \c CreateFile() + CHAR DevicePath[KLST_STRING_MAX_LEN]; + + //! libusb-win32 filter index id. + INT LUsb0FilterIndex; + + //! Indicates the devices connection state. + BOOL Connected; + + //! Synchronization flags. (internal use only) + KLST_SYNC_FLAG SyncFlags; + + INT BusNumber; + + INT DeviceAddress; + + //! If the the device is serialized, represents the string value of \ref USB_DEVICE_DESCRIPTOR::iSerialNumber. For Devices without a \b iSerialNumber, represents the unique \b InstanceID assigned by \b Windows. + CHAR SerialNumber[KLST_STRING_MAX_LEN]; + +} KLST_DEVINFO; +//! Pointer to a \ref KLST_DEVINFO structure. (semi-opaque) +typedef KLST_DEVINFO* KLST_DEVINFO_HANDLE; + +//! Device list initialization flags. +typedef enum _KLST_FLAG +{ + //! No flags (or 0) + KLST_FLAG_NONE = 0L, + + //! Enable listings for the raw device interface GUID \b only. {A5DCBF10-6530-11D2-901F-00C04FB951ED} + KLST_FLAG_INCLUDE_RAWGUID = 0x0001, + + //! List all libusbK devices including those not currently connected. + KLST_FLAG_INCLUDE_DISCONNECT = 0x0002, + +} KLST_FLAG; + +//! Device list/hot-plug pattern match structure. +/*! +* \fixedstruct{1024} +* +* These ansi char strings are used to specify which devices should be included in a device list. +* All strings file pattern match strings allowing asterisk or question mark chars as wildcards. +* +*/ +typedef struct _KLST_PATTERN_MATCH +{ + //! Pattern match a device instance id. + CHAR DeviceID[KLST_STRING_MAX_LEN]; + + //! Pattern match a device interface guid. + CHAR DeviceInterfaceGUID[KLST_STRING_MAX_LEN]; + + //! Pattern match a symbolic link. + CHAR ClassGUID[KLST_STRING_MAX_LEN]; + + //! fixed structure padding. + UCHAR z_F_i_x_e_d[1024 - KLST_STRING_MAX_LEN * 3]; + +} KLST_PATTERN_MATCH; +C_ASSERT(sizeof(KLST_PATTERN_MATCH) == 1024); + +//! Pointer to a \ref KLST_PATTERN_MATCH structure. +typedef KLST_PATTERN_MATCH* PKLST_PATTERN_MATCH; + +//! Device list enumeration function callback typedef. +/*! +* +* \param DeviceList +* The device list \c DeviceInfo belongs to +* +* \param DeviceInfo +* Device information +* +* \param Context +* User context that was passed into \ref LstK_Enumerate +* +* Use this typedef as a prototype for an enumeration function with \ref LstK_Enumerate. +* +*/ +typedef BOOL KUSB_API KLST_ENUM_DEVINFO_CB ( + _in KLST_HANDLE DeviceList, + _in KLST_DEVINFO_HANDLE DeviceInfo, + _in PVOID Context); + +/*! @} */ + +#endif + +#ifndef __USB_H__ + +#include + +/*! \addtogroup libk +* @{ +*/ + +//! Maximum value that can be added to the current start frame. +#define USBD_ISO_START_FRAME_RANGE 1024 + + +//! bmRequest.Dir +typedef enum _BMREQUEST_DIR +{ + BMREQUEST_DIR_HOST_TO_DEVICE = 0, + BMREQUEST_DIR_DEVICE_TO_HOST = 1, +} BMREQUEST_DIR; + +//! bmRequest.Type +typedef enum _BMREQUEST_TYPE +{ + //! Standard request. See \ref USB_REQUEST_ENUM + BMREQUEST_TYPE_STANDARD = 0, + + //! Class-specific request. + BMREQUEST_TYPE_CLASS = 1, + + //! Vendor-specific request + BMREQUEST_TYPE_VENDOR = 2, +} BMREQUEST_TYPE; + +//! bmRequest.Recipient +typedef enum _BMREQUEST_RECIPIENT +{ + //! Request is for a device. + BMREQUEST_RECIPIENT_DEVICE = 0, + + //! Request is for an interface of a device. + BMREQUEST_RECIPIENT_INTERFACE = 1, + + //! Request is for an endpoint of a device. + BMREQUEST_RECIPIENT_ENDPOINT = 2, + + //! Request is for a vendor-specific purpose. + BMREQUEST_RECIPIENT_OTHER = 3, +} BMREQUEST_RECIPIENT; + +//! Maximum length (in bytes) of a usb string. USB strings are always stored in wide-char format. +#define MAXIMUM_USB_STRING_LENGTH 255 + +//! Values for the bits returned by the \ref USB_REQUEST_GET_STATUS request. +typedef enum _USB_GETSTATUS +{ + //! Device is self powered + USB_GETSTATUS_SELF_POWERED = 0x01, + + //! Device can wake the system from a low power/sleeping state. + USB_GETSTATUS_REMOTE_WAKEUP_ENABLED = 0x02 +} USB_GETSTATUS; + +//! Standard USB descriptor types. For more information, see section 9-5 of the USB 3.0 specifications. +typedef enum _USB_DESCRIPTOR_TYPE +{ + //! Device descriptor type. + USB_DESCRIPTOR_TYPE_DEVICE = 0x01, + + //! Configuration descriptor type. + USB_DESCRIPTOR_TYPE_CONFIGURATION = 0x02, + + //! String descriptor type. + USB_DESCRIPTOR_TYPE_STRING = 0x03, + + //! Interface descriptor type. + USB_DESCRIPTOR_TYPE_INTERFACE = 0x04, + + //! Endpoint descriptor type. + USB_DESCRIPTOR_TYPE_ENDPOINT = 0x05, + + //! Device qualifier descriptor type. + USB_DESCRIPTOR_TYPE_DEVICE_QUALIFIER = 0x06, + + //! Config power descriptor type. + USB_DESCRIPTOR_TYPE_CONFIG_POWER = 0x07, + + //! Interface power descriptor type. + USB_DESCRIPTOR_TYPE_INTERFACE_POWER = 0x08, + + //! Interface association descriptor type. + USB_DESCRIPTOR_TYPE_INTERFACE_ASSOCIATION = 0x0B, +} USB_DESCRIPTOR_TYPE; + +//! Makes \c wValue for a \ref USB_REQUEST_GET_DESCRIPTOR or \ref USB_REQUEST_SET_DESCRIPTOR request. +#define USB_DESCRIPTOR_MAKE_TYPE_AND_INDEX(d, i) \ + ((USHORT)((USHORT)d<<8 | i)) + +//! Endpoint type mask for the \c bmAttributes field of a \ref USB_ENDPOINT_DESCRIPTOR +#define USB_ENDPOINT_TYPE_MASK 0x03 + +//! Indicates a control endpoint +#define USB_ENDPOINT_TYPE_CONTROL 0x00 + +//! Indicates an isochronous endpoint +#define USB_ENDPOINT_TYPE_ISOCHRONOUS 0x01 + +//! Indicates a bulk endpoint +#define USB_ENDPOINT_TYPE_BULK 0x02 + +//! Indicates an interrupt endpoint +#define USB_ENDPOINT_TYPE_INTERRUPT 0x03 + +//! Config power mask for the \c bmAttributes field of a \ref USB_CONFIGURATION_DESCRIPTOR +#define USB_CONFIG_POWERED_MASK 0xc0 + +//! Values used in the \c bmAttributes field of a \ref USB_CONFIGURATION_DESCRIPTOR +enum USB_CONFIG_BM_ATTRIBUTE_ENUM +{ + //! The device is powered by it's host. + USB_CONFIG_BUS_POWERED = 0x80, + + //! The device has an external power source. + USB_CONFIG_SELF_POWERED = 0x40, + + //! The device is capable of waking the the host from a low power/sleeping state. + USB_CONFIG_REMOTE_WAKEUP = 0x20, +}; + +//! Endpoint direction mask for the \c bEndpointAddress field of a \ref USB_ENDPOINT_DESCRIPTOR +#define USB_ENDPOINT_DIRECTION_MASK 0x80 + +//! Endpoint address mask for the \c bEndpointAddress field of a \ref USB_ENDPOINT_DESCRIPTOR +#define USB_ENDPOINT_ADDRESS_MASK 0x0F + +//! Tests the \c bEndpointAddress direction bit. TRUE if the endpoint address is an OUT endpoint. (HostToDevice, PC Write) +/*! +* \param addr \c bEndpointAddress field of a \ref USB_ENDPOINT_DESCRIPTOR +*/ +#define USB_ENDPOINT_DIRECTION_OUT(addr) (!((addr) & USB_ENDPOINT_DIRECTION_MASK)) + +//! Tests the \c bEndpointAddress direction bit. TRUE if the endpoint address is an IN endpoint. (DeviceToHost, PC Read) +/*! +* \param addr \c bEndpointAddress field of a \ref USB_ENDPOINT_DESCRIPTOR +*/ +#define USB_ENDPOINT_DIRECTION_IN(addr) ((addr) & USB_ENDPOINT_DIRECTION_MASK) + +//! USB defined request codes +/* +* see Chapter 9 of the USB 2.0 specification for +* more information. +* +* These are the correct values based on the USB 2.0 specification. +*/ +enum USB_REQUEST_ENUM +{ + //! Request status of the specific recipient + USB_REQUEST_GET_STATUS = 0x00, + + //! Clear or disable a specific feature + USB_REQUEST_CLEAR_FEATURE = 0x01, + + //! Set or enable a specific feature + USB_REQUEST_SET_FEATURE = 0x03, + + //! Set device address for all future accesses + USB_REQUEST_SET_ADDRESS = 0x05, + + //! Get the specified descriptor + USB_REQUEST_GET_DESCRIPTOR = 0x06, + + //! Update existing descriptors or add new descriptors + USB_REQUEST_SET_DESCRIPTOR = 0x07, + + //! Get the current device configuration value + USB_REQUEST_GET_CONFIGURATION = 0x08, + + //! Set device configuration + USB_REQUEST_SET_CONFIGURATION = 0x09, + + //! Return the selected alternate setting for the specified interface + USB_REQUEST_GET_INTERFACE = 0x0A, + + //! Select an alternate interface for the specified interface + USB_REQUEST_SET_INTERFACE = 0x0B, + + //! Set then report an endpoint's synchronization frame + USB_REQUEST_SYNC_FRAME = 0x0C, +}; + +//! USB defined class codes +/*! +* see http://www.usb.org/developers/defined_class for more information. +* +*/ +enum USB_DEVICE_CLASS_ENUM +{ + //! Reserved class + USB_DEVICE_CLASS_RESERVED = 0x00, + + //! Audio class + USB_DEVICE_CLASS_AUDIO = 0x01, + + //! Communications class + USB_DEVICE_CLASS_COMMUNICATIONS = 0x02, + + //! Human Interface Device class + USB_DEVICE_CLASS_HUMAN_INTERFACE = 0x03, + + //! Imaging class + USB_DEVICE_CLASS_IMAGING = 0x06, + + //! Printer class + USB_DEVICE_CLASS_PRINTER = 0x07, + + //! Mass storage class + USB_DEVICE_CLASS_STORAGE = 0x08, + + //! Hub class + USB_DEVICE_CLASS_HUB = 0x09, + + //! vendor-specific class + USB_DEVICE_CLASS_VENDOR_SPECIFIC = 0xFF, +}; + +//! A structure representing the standard USB device descriptor. +/*! +* This descriptor is documented in section 9.6.1 of the USB 2.0 specification. +* All multiple-byte fields are represented in host-endian format. +*/ +typedef struct _USB_DEVICE_DESCRIPTOR +{ + //! Size of this descriptor (in bytes) + UCHAR bLength; + + //! Descriptor type + UCHAR bDescriptorType; + + //! USB specification release number in binary-coded decimal. + /*! + * A value of 0x0200 indicates USB 2.0, 0x0110 indicates USB 1.1, etc. + */ + USHORT bcdUSB; + + //! USB-IF class code for the device + UCHAR bDeviceClass; + + //! USB-IF subclass code for the device + UCHAR bDeviceSubClass; + + //! USB-IF protocol code for the device + UCHAR bDeviceProtocol; + + //! Maximum packet size for control endpoint 0 + UCHAR bMaxPacketSize0; + + //! USB-IF vendor ID + USHORT idVendor; + + //! USB-IF product ID + USHORT idProduct; + + //! Device release number in binary-coded decimal + USHORT bcdDevice; + + //! Index of string descriptor describing manufacturer + UCHAR iManufacturer; + + //! Index of string descriptor describing product + UCHAR iProduct; + + //! Index of string descriptor containing device serial number + UCHAR iSerialNumber; + + //! Number of possible configurations + UCHAR bNumConfigurations; + +} USB_DEVICE_DESCRIPTOR; +//! pointer to a \c USB_DEVICE_DESCRIPTOR +typedef USB_DEVICE_DESCRIPTOR* PUSB_DEVICE_DESCRIPTOR; + +//! A structure representing the standard USB endpoint descriptor. +/*! +* This descriptor is documented in section 9.6.3 of the USB 2.0 specification. +* All multiple-byte fields are represented in host-endian format. +*/ +typedef struct _USB_ENDPOINT_DESCRIPTOR +{ + //! Size of this descriptor (in bytes) + UCHAR bLength; + + //! Descriptor type + UCHAR bDescriptorType; + + //! The address of the endpoint described by this descriptor. + /*! + * - Bits 0:3 are the endpoint number + * - Bits 4:6 are reserved + * - Bit 7 indicates direction + */ + UCHAR bEndpointAddress; + + //! Attributes which apply to the endpoint when it is configured using the bConfigurationValue. + /*! + * - Bits 0:1 determine the transfer type. + * - Bits 2:3 are only used for isochronous endpoints and refer to sync type. + * - Bits 4:5 are also only used for isochronous endpoints and refer to usage type. + * - Bits 6:7 are reserved. + */ + UCHAR bmAttributes; + + //! Maximum packet size this endpoint is capable of sending/receiving. + USHORT wMaxPacketSize; + + //! Interval for polling endpoint for data transfers. + UCHAR bInterval; + +} USB_ENDPOINT_DESCRIPTOR; +//! pointer to a \c USB_ENDPOINT_DESCRIPTOR +typedef USB_ENDPOINT_DESCRIPTOR* PUSB_ENDPOINT_DESCRIPTOR; + +//! A structure representing the standard USB configuration descriptor. +/* +* +* This descriptor is documented in section 9.6.3 of the USB 2.0 specification. +* All multiple-byte fields are represented in host-endian format. +* +*/ +typedef struct _USB_CONFIGURATION_DESCRIPTOR +{ + //! Size of this descriptor (in bytes) + UCHAR bLength; + + //! Descriptor type + UCHAR bDescriptorType; + + //! Total length of data returned for this configuration + USHORT wTotalLength; + + //! Number of interfaces supported by this configuration + UCHAR bNumInterfaces; + + //! Identifier value for this configuration + UCHAR bConfigurationValue; + + //! Index of string descriptor describing this configuration + UCHAR iConfiguration; + + //! Configuration characteristics + UCHAR bmAttributes; + + //! Maximum power consumption of the USB device from this bus in this configuration when the device is fully operation. + /*! + * Expressed in units of 2 mA. + */ + UCHAR MaxPower; +} USB_CONFIGURATION_DESCRIPTOR; +//! pointer to a \c USB_CONFIGURATION_DESCRIPTOR +typedef USB_CONFIGURATION_DESCRIPTOR* PUSB_CONFIGURATION_DESCRIPTOR; + +//! A structure representing the standard USB interface descriptor. +/*! +* This descriptor is documented in section 9.6.5 of the USB 2.0 specification. +* All multiple-byte fields are represented in host-endian format. +*/ +typedef struct _USB_INTERFACE_DESCRIPTOR +{ + //! Size of this descriptor (in bytes) + UCHAR bLength; + + //! Descriptor type + UCHAR bDescriptorType; + + //! Number of this interface + UCHAR bInterfaceNumber; + + //! Value used to select this alternate setting for this interface + UCHAR bAlternateSetting; + + //! Number of endpoints used by this interface (excluding the control endpoint) + UCHAR bNumEndpoints; + + //! USB-IF class code for this interface + UCHAR bInterfaceClass; + + //! USB-IF subclass code for this interface + UCHAR bInterfaceSubClass; + + //! USB-IF protocol code for this interface + UCHAR bInterfaceProtocol; + + //! Index of string descriptor describing this interface + UCHAR iInterface; + +} USB_INTERFACE_DESCRIPTOR; +//! pointer to a \c USB_INTERFACE_DESCRIPTOR +typedef USB_INTERFACE_DESCRIPTOR* PUSB_INTERFACE_DESCRIPTOR; + +//! A structure representing the standard USB string descriptor. +/*! +* This descriptor is documented in section 9.6.5 of the USB 2.0 specification. +* All multiple-byte fields are represented in host-endian format. +*/ +typedef struct _USB_STRING_DESCRIPTOR +{ + //! Size of this descriptor (in bytes) + UCHAR bLength; + + //! Descriptor type + UCHAR bDescriptorType; + + //! Content of the string + WCHAR bString[1]; + +} USB_STRING_DESCRIPTOR; +//! pointer to a \c USB_STRING_DESCRIPTOR +typedef USB_STRING_DESCRIPTOR* PUSB_STRING_DESCRIPTOR; + +//! A structure representing the common USB descriptor. +typedef struct _USB_COMMON_DESCRIPTOR +{ + //! Size of this descriptor (in bytes) + UCHAR bLength; + + //! Descriptor type + UCHAR bDescriptorType; + +} USB_COMMON_DESCRIPTOR; +//! pointer to a \c USB_COMMON_DESCRIPTOR +typedef USB_COMMON_DESCRIPTOR* PUSB_COMMON_DESCRIPTOR; + +#if _MSC_VER >= 1200 +#pragma warning(push) +#endif +#pragma warning (disable:4201) +#pragma warning(disable:4214) // named type definition in parentheses + +//! Allows hardware manufacturers to define groupings of interfaces. +/*! +* +* The ECN specifies a USB descriptor, called the Interface Association +* Descriptor (IAD). +* +* The Universal Serial Bus Specification, revision 2.0, does not support +* grouping more than one interface of a composite device within a single +* function. However, the USB Device Working Group (DWG) created USB device +* classes that allow for functions with multiple interfaces, and the USB +* Implementor's Forum issued an Engineering Change Notification (ECN) that +* defines a mechanism for grouping interfaces. +* +*/ +typedef struct _USB_INTERFACE_ASSOCIATION_DESCRIPTOR +{ + //! Size of this descriptor (in bytes) + UCHAR bLength; + + //! Descriptor type + UCHAR bDescriptorType; + + //! First interface number of the set of interfaces that follow this descriptor + UCHAR bFirstInterface; + + //! The Number of interfaces follow this descriptor that are considered "associated" + UCHAR bInterfaceCount; + + //! \c bInterfaceClass used for this associated interfaces + UCHAR bFunctionClass; + + //! \c bInterfaceSubClass used for the associated interfaces + UCHAR bFunctionSubClass; + + //! \c bInterfaceProtocol used for the associated interfaces + UCHAR bFunctionProtocol; + + //! Index of string descriptor describing the associated interfaces + UCHAR iFunction; + +} USB_INTERFACE_ASSOCIATION_DESCRIPTOR; +//! pointer to a \c USB_INTERFACE_ASSOCIATION_DESCRIPTOR +typedef USB_INTERFACE_ASSOCIATION_DESCRIPTOR* PUSB_INTERFACE_ASSOCIATION_DESCRIPTOR; + +#if _MSC_VER >= 1200 +#pragma warning(pop) +#endif + +/*! @} */ + +#include +#endif // __USB_H__ + +#ifndef _LIBUSBK_LIBK_TYPES + +/*! \addtogroup libk +* @{ +*/ + +//! Usb handle specific properties that can be retrieved with \ref UsbK_GetProperty. +typedef enum _KUSB_PROPERTY +{ + //! Get the internal device file handle used for operations such as GetOverlappedResult or DeviceIoControl. + KUSB_PROPERTY_DEVICE_FILE_HANDLE, + + KUSB_PROPERTY_COUNT + +} KUSB_PROPERTY; + +//! Supported driver id enumeration. +typedef enum _KUSB_DRVID +{ + //! libusbK.sys driver ID + KUSB_DRVID_LIBUSBK, + + //! libusb0.sys driver ID + KUSB_DRVID_LIBUSB0, + + //! WinUSB.sys driver ID + KUSB_DRVID_WINUSB, + + //! libusb0.sys filter driver ID + KUSB_DRVID_LIBUSB0_FILTER, + + //! Supported driver count + KUSB_DRVID_COUNT + +} KUSB_DRVID; + +//! Supported function id enumeration. +typedef enum _KUSB_FNID +{ + //! \ref UsbK_Init dynamic driver function id. + KUSB_FNID_Init, + + //! \ref UsbK_Free dynamic driver function id. + KUSB_FNID_Free, + + //! \ref UsbK_ClaimInterface dynamic driver function id. + KUSB_FNID_ClaimInterface, + + //! \ref UsbK_ReleaseInterface dynamic driver function id. + KUSB_FNID_ReleaseInterface, + + //! \ref UsbK_SetAltInterface dynamic driver function id. + KUSB_FNID_SetAltInterface, + + //! \ref UsbK_GetAltInterface dynamic driver function id. + KUSB_FNID_GetAltInterface, + + //! \ref UsbK_GetDescriptor dynamic driver function id. + KUSB_FNID_GetDescriptor, + + //! \ref UsbK_ControlTransfer dynamic driver function id. + KUSB_FNID_ControlTransfer, + + //! \ref UsbK_SetPowerPolicy dynamic driver function id. + KUSB_FNID_SetPowerPolicy, + + //! \ref UsbK_GetPowerPolicy dynamic driver function id. + KUSB_FNID_GetPowerPolicy, + + //! \ref UsbK_SetConfiguration dynamic driver function id. + KUSB_FNID_SetConfiguration, + + //! \ref UsbK_GetConfiguration dynamic driver function id. + KUSB_FNID_GetConfiguration, + + //! \ref UsbK_ResetDevice dynamic driver function id. + KUSB_FNID_ResetDevice, + + //! \ref UsbK_Initialize dynamic driver function id. + KUSB_FNID_Initialize, + + //! \ref UsbK_SelectInterface dynamic driver function id. + KUSB_FNID_SelectInterface, + + //! \ref UsbK_GetAssociatedInterface dynamic driver function id. + KUSB_FNID_GetAssociatedInterface, + + //! \ref UsbK_Clone dynamic driver function id. + KUSB_FNID_Clone, + + //! \ref UsbK_QueryInterfaceSettings dynamic driver function id. + KUSB_FNID_QueryInterfaceSettings, + + //! \ref UsbK_QueryDeviceInformation dynamic driver function id. + KUSB_FNID_QueryDeviceInformation, + + //! \ref UsbK_SetCurrentAlternateSetting dynamic driver function id. + KUSB_FNID_SetCurrentAlternateSetting, + + //! \ref UsbK_GetCurrentAlternateSetting dynamic driver function id. + KUSB_FNID_GetCurrentAlternateSetting, + + //! \ref UsbK_QueryPipe dynamic driver function id. + KUSB_FNID_QueryPipe, + + //! \ref UsbK_SetPipePolicy dynamic driver function id. + KUSB_FNID_SetPipePolicy, + + //! \ref UsbK_GetPipePolicy dynamic driver function id. + KUSB_FNID_GetPipePolicy, + + //! \ref UsbK_ReadPipe dynamic driver function id. + KUSB_FNID_ReadPipe, + + //! \ref UsbK_WritePipe dynamic driver function id. + KUSB_FNID_WritePipe, + + //! \ref UsbK_ResetPipe dynamic driver function id. + KUSB_FNID_ResetPipe, + + //! \ref UsbK_AbortPipe dynamic driver function id. + KUSB_FNID_AbortPipe, + + //! \ref UsbK_FlushPipe dynamic driver function id. + KUSB_FNID_FlushPipe, + + //! \ref UsbK_IsoReadPipe dynamic driver function id. + KUSB_FNID_IsoReadPipe, + + //! \ref UsbK_IsoWritePipe dynamic driver function id. + KUSB_FNID_IsoWritePipe, + + //! \ref UsbK_GetCurrentFrameNumber dynamic driver function id. + KUSB_FNID_GetCurrentFrameNumber, + + //! \ref UsbK_GetOverlappedResult dynamic driver function id. + KUSB_FNID_GetOverlappedResult, + + //! \ref UsbK_GetProperty dynamic driver function id. + KUSB_FNID_GetProperty, + + + //! Supported function count + KUSB_FNID_COUNT, + +} KUSB_FNID; + +typedef BOOL KUSB_API KUSB_Init ( + _out KUSB_HANDLE* InterfaceHandle, + _in KLST_DEVINFO_HANDLE DevInfo); + +typedef BOOL KUSB_API KUSB_Free ( + _in KUSB_HANDLE InterfaceHandle); + +typedef BOOL KUSB_API KUSB_ClaimInterface ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR NumberOrIndex, + _in BOOL IsIndex); + +typedef BOOL KUSB_API KUSB_ReleaseInterface ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR NumberOrIndex, + _in BOOL IsIndex); + +typedef BOOL KUSB_API KUSB_SetAltInterface ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR NumberOrIndex, + _in BOOL IsIndex, + _in UCHAR AltSettingNumber); + +typedef BOOL KUSB_API KUSB_GetAltInterface ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR NumberOrIndex, + _in BOOL IsIndex, + _out PUCHAR AltSettingNumber); + +typedef BOOL KUSB_API KUSB_GetDescriptor ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR DescriptorType, + _in UCHAR Index, + _in USHORT LanguageID, + _out PUCHAR Buffer, + _in UINT BufferLength, + _outopt PUINT LengthTransferred); + +typedef BOOL KUSB_API KUSB_ControlTransfer ( + _in KUSB_HANDLE InterfaceHandle, + _in WINUSB_SETUP_PACKET SetupPacket, + _refopt PUCHAR Buffer, + _in UINT BufferLength, + _outopt PUINT LengthTransferred, + _inopt LPOVERLAPPED Overlapped); + +typedef BOOL KUSB_API KUSB_SetPowerPolicy ( + _in KUSB_HANDLE InterfaceHandle, + _in UINT PolicyType, + _in UINT ValueLength, + _in PVOID Value); + +typedef BOOL KUSB_API KUSB_GetPowerPolicy ( + _in KUSB_HANDLE InterfaceHandle, + _in UINT PolicyType, + _ref PUINT ValueLength, + _out PVOID Value); + +typedef BOOL KUSB_API KUSB_SetConfiguration ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR ConfigurationNumber); + +typedef BOOL KUSB_API KUSB_GetConfiguration ( + _in KUSB_HANDLE InterfaceHandle, + _out PUCHAR ConfigurationNumber); + +typedef BOOL KUSB_API KUSB_ResetDevice ( + _in KUSB_HANDLE InterfaceHandle); + +typedef BOOL KUSB_API KUSB_Initialize ( + _in HANDLE DeviceHandle, + _out KUSB_HANDLE* InterfaceHandle); + +typedef BOOL KUSB_API KUSB_SelectInterface ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR NumberOrIndex, + _in BOOL IsIndex); + +typedef BOOL KUSB_API KUSB_GetAssociatedInterface ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR AssociatedInterfaceIndex, + _out KUSB_HANDLE* AssociatedInterfaceHandle); + +typedef BOOL KUSB_API KUSB_Clone ( + _in KUSB_HANDLE InterfaceHandle, + _out KUSB_HANDLE* DstInterfaceHandle); + +typedef BOOL KUSB_API KUSB_QueryInterfaceSettings ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR AltSettingIndex, + _out PUSB_INTERFACE_DESCRIPTOR UsbAltInterfaceDescriptor); + +typedef BOOL KUSB_API KUSB_QueryDeviceInformation ( + _in KUSB_HANDLE InterfaceHandle, + _in UINT InformationType, + _ref PUINT BufferLength, + _ref PVOID Buffer); + +typedef BOOL KUSB_API KUSB_SetCurrentAlternateSetting ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR AltSettingNumber); + +typedef BOOL KUSB_API KUSB_GetCurrentAlternateSetting ( + _in KUSB_HANDLE InterfaceHandle, + _out PUCHAR AltSettingNumber); + +typedef BOOL KUSB_API KUSB_QueryPipe ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR AltSettingNumber, + _in UCHAR PipeIndex, + _out PWINUSB_PIPE_INFORMATION PipeInformation); + +typedef BOOL KUSB_API KUSB_SetPipePolicy ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID, + _in UINT PolicyType, + _in UINT ValueLength, + _in PVOID Value); + +typedef BOOL KUSB_API KUSB_GetPipePolicy ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID, + _in UINT PolicyType, + _ref PUINT ValueLength, + _out PVOID Value); + +typedef BOOL KUSB_API KUSB_ReadPipe ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID, + _out PUCHAR Buffer, + _in UINT BufferLength, + _outopt PUINT LengthTransferred, + _inopt LPOVERLAPPED Overlapped); + +typedef BOOL KUSB_API KUSB_WritePipe ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID, + _in PUCHAR Buffer, + _in UINT BufferLength, + _outopt PUINT LengthTransferred, + _inopt LPOVERLAPPED Overlapped); + +typedef BOOL KUSB_API KUSB_ResetPipe ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID); + +typedef BOOL KUSB_API KUSB_AbortPipe ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID); + +typedef BOOL KUSB_API KUSB_FlushPipe ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID); + +typedef BOOL KUSB_API KUSB_IsoReadPipe ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID, + _out PUCHAR Buffer, + _in UINT BufferLength, + _in LPOVERLAPPED Overlapped, + _refopt PKISO_CONTEXT IsoContext); + +typedef BOOL KUSB_API KUSB_IsoWritePipe ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID, + _in PUCHAR Buffer, + _in UINT BufferLength, + _in LPOVERLAPPED Overlapped, + _refopt PKISO_CONTEXT IsoContext); + +typedef BOOL KUSB_API KUSB_GetCurrentFrameNumber ( + _in KUSB_HANDLE InterfaceHandle, + _out PUINT FrameNumber); + +typedef BOOL KUSB_API KUSB_GetOverlappedResult ( + _in KUSB_HANDLE InterfaceHandle, + _in LPOVERLAPPED Overlapped, + _out PUINT lpNumberOfBytesTransferred, + _in BOOL bWait); + +typedef BOOL KUSB_API KUSB_GetProperty ( + _in KUSB_HANDLE InterfaceHandle, + _in KUSB_PROPERTY PropertyType, + _ref PUINT PropertySize, + _out PVOID Value); + + + +//! USB core driver API information structure. +/*! +* This structure is part of \ref KUSB_DRIVER_API and contains +* driver and user specific information. +* +*/ +typedef struct _KUSB_DRIVER_API_INFO +{ + //! \readonly Driver id of the driver api. + INT DriverID; + + //! \readonly Number of valid functions contained in the driver API. + INT FunctionCount; + +} KUSB_DRIVER_API_INFO; + +//! Driver API function set structure. +/* +* Contains the driver specific USB core function pointer set. +* +* \note +* This structure has a fixed 512 byte structure size. +*/ +typedef struct _KUSB_DRIVER_API +{ + //! Driver API information. + KUSB_DRIVER_API_INFO Info; + + /*! \fn BOOL KUSB_API Init (_out KUSB_HANDLE* InterfaceHandle, _in KLST_DEVINFO_HANDLE DevInfo) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_Init + */ + KUSB_Init* Init; + + /*! \fn BOOL KUSB_API Free (_in KUSB_HANDLE InterfaceHandle) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_Free + */ + KUSB_Free* Free; + + /*! \fn BOOL KUSB_API ClaimInterface (_in KUSB_HANDLE InterfaceHandle, _in UCHAR NumberOrIndex, _in BOOL IsIndex) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_ClaimInterface + */ + KUSB_ClaimInterface* ClaimInterface; + + /*! \fn BOOL KUSB_API ReleaseInterface (_in KUSB_HANDLE InterfaceHandle, _in UCHAR NumberOrIndex, _in BOOL IsIndex) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_ReleaseInterface + */ + KUSB_ReleaseInterface* ReleaseInterface; + + /*! \fn BOOL KUSB_API SetAltInterface (_in KUSB_HANDLE InterfaceHandle, _in UCHAR NumberOrIndex, _in BOOL IsIndex, _in UCHAR AltSettingNumber) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_SetAltInterface + */ + KUSB_SetAltInterface* SetAltInterface; + + /*! \fn BOOL KUSB_API GetAltInterface (_in KUSB_HANDLE InterfaceHandle, _in UCHAR NumberOrIndex, _in BOOL IsIndex, _out PUCHAR AltSettingNumber) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_GetAltInterface + */ + KUSB_GetAltInterface* GetAltInterface; + + /*! \fn BOOL KUSB_API GetDescriptor (_in KUSB_HANDLE InterfaceHandle, _in UCHAR DescriptorType, _in UCHAR Index, _in USHORT LanguageID, _out PUCHAR Buffer, _in UINT BufferLength, _outopt PUINT LengthTransferred) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_GetDescriptor + */ + KUSB_GetDescriptor* GetDescriptor; + + /*! \fn BOOL KUSB_API ControlTransfer (_in KUSB_HANDLE InterfaceHandle, _in WINUSB_SETUP_PACKET SetupPacket, _refopt PUCHAR Buffer, _in UINT BufferLength, _outopt PUINT LengthTransferred, _inopt LPOVERLAPPED Overlapped) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_ControlTransfer + */ + KUSB_ControlTransfer* ControlTransfer; + + /*! \fn BOOL KUSB_API SetPowerPolicy (_in KUSB_HANDLE InterfaceHandle, _in UINT PolicyType, _in UINT ValueLength, _in PVOID Value) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_SetPowerPolicy + */ + KUSB_SetPowerPolicy* SetPowerPolicy; + + /*! \fn BOOL KUSB_API GetPowerPolicy (_in KUSB_HANDLE InterfaceHandle, _in UINT PolicyType, _ref PUINT ValueLength, _out PVOID Value) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_GetPowerPolicy + */ + KUSB_GetPowerPolicy* GetPowerPolicy; + + /*! \fn BOOL KUSB_API SetConfiguration (_in KUSB_HANDLE InterfaceHandle, _in UCHAR ConfigurationNumber) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_SetConfiguration + */ + KUSB_SetConfiguration* SetConfiguration; + + /*! \fn BOOL KUSB_API GetConfiguration (_in KUSB_HANDLE InterfaceHandle, _out PUCHAR ConfigurationNumber) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_GetConfiguration + */ + KUSB_GetConfiguration* GetConfiguration; + + /*! \fn BOOL KUSB_API ResetDevice (_in KUSB_HANDLE InterfaceHandle) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_ResetDevice + */ + KUSB_ResetDevice* ResetDevice; + + /*! \fn BOOL KUSB_API Initialize (_in HANDLE DeviceHandle, _out KUSB_HANDLE* InterfaceHandle) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_Initialize + */ + KUSB_Initialize* Initialize; + + /*! \fn BOOL KUSB_API SelectInterface (_in KUSB_HANDLE InterfaceHandle, _in UCHAR NumberOrIndex, _in BOOL IsIndex) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_SelectInterface + */ + KUSB_SelectInterface* SelectInterface; + + /*! \fn BOOL KUSB_API GetAssociatedInterface (_in KUSB_HANDLE InterfaceHandle, _in UCHAR AssociatedInterfaceIndex, _out KUSB_HANDLE* AssociatedInterfaceHandle) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_GetAssociatedInterface + */ + KUSB_GetAssociatedInterface* GetAssociatedInterface; + + /*! \fn BOOL KUSB_API Clone (_in KUSB_HANDLE InterfaceHandle, _out KUSB_HANDLE* DstInterfaceHandle) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_Clone + */ + KUSB_Clone* Clone; + + /*! \fn BOOL KUSB_API QueryInterfaceSettings (_in KUSB_HANDLE InterfaceHandle, _in UCHAR AltSettingIndex, _out PUSB_INTERFACE_DESCRIPTOR UsbAltInterfaceDescriptor) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_QueryInterfaceSettings + */ + KUSB_QueryInterfaceSettings* QueryInterfaceSettings; + + /*! \fn BOOL KUSB_API QueryDeviceInformation (_in KUSB_HANDLE InterfaceHandle, _in UINT InformationType, _ref PUINT BufferLength, _ref PVOID Buffer) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_QueryDeviceInformation + */ + KUSB_QueryDeviceInformation* QueryDeviceInformation; + + /*! \fn BOOL KUSB_API SetCurrentAlternateSetting (_in KUSB_HANDLE InterfaceHandle, _in UCHAR AltSettingNumber) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_SetCurrentAlternateSetting + */ + KUSB_SetCurrentAlternateSetting* SetCurrentAlternateSetting; + + /*! \fn BOOL KUSB_API GetCurrentAlternateSetting (_in KUSB_HANDLE InterfaceHandle, _out PUCHAR AltSettingNumber) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_GetCurrentAlternateSetting + */ + KUSB_GetCurrentAlternateSetting* GetCurrentAlternateSetting; + + /*! \fn BOOL KUSB_API QueryPipe (_in KUSB_HANDLE InterfaceHandle, _in UCHAR AltSettingNumber, _in UCHAR PipeIndex, _out PWINUSB_PIPE_INFORMATION PipeInformation) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_QueryPipe + */ + KUSB_QueryPipe* QueryPipe; + + /*! \fn BOOL KUSB_API SetPipePolicy (_in KUSB_HANDLE InterfaceHandle, _in UCHAR PipeID, _in UINT PolicyType, _in UINT ValueLength, _in PVOID Value) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_SetPipePolicy + */ + KUSB_SetPipePolicy* SetPipePolicy; + + /*! \fn BOOL KUSB_API GetPipePolicy (_in KUSB_HANDLE InterfaceHandle, _in UCHAR PipeID, _in UINT PolicyType, _ref PUINT ValueLength, _out PVOID Value) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_GetPipePolicy + */ + KUSB_GetPipePolicy* GetPipePolicy; + + /*! \fn BOOL KUSB_API ReadPipe (_in KUSB_HANDLE InterfaceHandle, _in UCHAR PipeID, _out PUCHAR Buffer, _in UINT BufferLength, _outopt PUINT LengthTransferred, _inopt LPOVERLAPPED Overlapped) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_ReadPipe + */ + KUSB_ReadPipe* ReadPipe; + + /*! \fn BOOL KUSB_API WritePipe (_in KUSB_HANDLE InterfaceHandle, _in UCHAR PipeID, _in PUCHAR Buffer, _in UINT BufferLength, _outopt PUINT LengthTransferred, _inopt LPOVERLAPPED Overlapped) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_WritePipe + */ + KUSB_WritePipe* WritePipe; + + /*! \fn BOOL KUSB_API ResetPipe (_in KUSB_HANDLE InterfaceHandle, _in UCHAR PipeID) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_ResetPipe + */ + KUSB_ResetPipe* ResetPipe; + + /*! \fn BOOL KUSB_API AbortPipe (_in KUSB_HANDLE InterfaceHandle, _in UCHAR PipeID) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_AbortPipe + */ + KUSB_AbortPipe* AbortPipe; + + /*! \fn BOOL KUSB_API FlushPipe (_in KUSB_HANDLE InterfaceHandle, _in UCHAR PipeID) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_FlushPipe + */ + KUSB_FlushPipe* FlushPipe; + + /*! \fn BOOL KUSB_API IsoReadPipe (_in KUSB_HANDLE InterfaceHandle, _in UCHAR PipeID, _out PUCHAR Buffer, _in UINT BufferLength, _in LPOVERLAPPED Overlapped, _refopt PKISO_CONTEXT IsoContext) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_IsoReadPipe + */ + KUSB_IsoReadPipe* IsoReadPipe; + + /*! \fn BOOL KUSB_API IsoWritePipe (_in KUSB_HANDLE InterfaceHandle, _in UCHAR PipeID, _in PUCHAR Buffer, _in UINT BufferLength, _in LPOVERLAPPED Overlapped, _refopt PKISO_CONTEXT IsoContext) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_IsoWritePipe + */ + KUSB_IsoWritePipe* IsoWritePipe; + + /*! \fn BOOL KUSB_API GetCurrentFrameNumber (_in KUSB_HANDLE InterfaceHandle, _out PUINT FrameNumber) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_GetCurrentFrameNumber + */ + KUSB_GetCurrentFrameNumber* GetCurrentFrameNumber; + + /*! \fn BOOL KUSB_API GetOverlappedResult (_in KUSB_HANDLE InterfaceHandle, _in LPOVERLAPPED Overlapped, _out PUINT lpNumberOfBytesTransferred, _in BOOL bWait) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_GetOverlappedResult + */ + KUSB_GetOverlappedResult* GetOverlappedResult; + + /*! \fn BOOL KUSB_API GetProperty (_in KUSB_HANDLE InterfaceHandle, _in KUSB_PROPERTY PropertyType, _ref PUINT PropertySize, _out PVOID Value) + * \memberof KUSB_DRIVER_API + * \copydoc UsbK_GetProperty + */ + KUSB_GetProperty* GetProperty; + + //! fixed structure padding. + UCHAR z_F_i_x_e_d[512 - sizeof(KUSB_DRIVER_API_INFO) - sizeof(UINT_PTR) * KUSB_FNID_COUNT]; + +} KUSB_DRIVER_API; +typedef KUSB_DRIVER_API* PKUSB_DRIVER_API; +C_ASSERT(sizeof(KUSB_DRIVER_API) == 512); +/**@}*/ +#endif + +#ifndef _LIBUSBK_HOTK_TYPES + +/*! \addtogroup hotk +* @{ +*/ + +//! Hot plug config flags. +typedef enum _KHOT_FLAG +{ + //! No flags (or 0) + KHOT_FLAG_NONE, + + //! Notify all devices which match upon a succuessful call to \ref HotK_Init. + KHOT_FLAG_PLUG_ALL_ON_INIT = 0x0001, + + //! Allow other \ref KHOT_HANDLE instances to consume this match. + KHOT_FLAG_PASS_DUPE_INSTANCE = 0x0002, + + //! If a \c UserHwnd is specified, use \c PostMessage instead of \c SendMessage. + KHOT_FLAG_POST_USER_MESSAGE = 0x0004, +} KHOT_FLAG; + +//! Hot plug event function definition. +typedef VOID KUSB_API KHOT_PLUG_CB( + _in KHOT_HANDLE HotHandle, + _in KLST_DEVINFO_HANDLE DeviceInfo, + _in KLST_SYNC_FLAG PlugType); + +//! Power broadcast event function definition. +typedef VOID KUSB_API KHOT_POWER_BROADCAST_CB( + _in KHOT_HANDLE HotHandle, + _in KLST_DEVINFO_HANDLE DeviceInfo, + _in UINT PbtEvent); + +//! Hot plug parameter structure. +/*! +* \fixedstruct{2048} +* +* This structure is intially passed as a parameter to \ref HotK_Init. +* +*/ +typedef struct _KHOT_PARAMS +{ + //! Hot plug event window handle to send/post messages when notifications occur. + HWND UserHwnd; + + //! WM_USER message start offset used when sending/posting messages, See details. + /*! + * \attention The \ref hotk will send UserMessage+1 for arrival notifications and UserMessage+0 for removal notifications. + * + * - WPARAM = \ref KHOT_HANDLE + * - LPARAM = \ref KLST_DEVINFO_HANDLE + */ + UINT UserMessage; + + //! Additional init/config parameters + KHOT_FLAG Flags; + + //! File pattern matches for restricting notifcations to a single/group or all supported usb devices. + KLST_PATTERN_MATCH PatternMatch; + + //! Hot plug event callback function invoked when notifications occur. + /*! \fn VOID KUSB_API OnHotPlug (_in KHOT_HANDLE HotHandle, _in KLST_DEVINFO_HANDLE DeviceInfo, _in KLST_SYNC_FLAG PlugType) + * \memberof KHOT_PARAMS + */ + KHOT_PLUG_CB* OnHotPlug; + + //! \b WM_POWERBROADCAST event callback function invoked when a power-management event has occurred. + /*! \fn VOID KUSB_API OnPowerBroadcast (_in KHOT_HANDLE HotHandle, _in KLST_DEVINFO_HANDLE DeviceInfo, _in UINT PbtEvent) + * \memberof KHOT_PARAMS + */ + KHOT_POWER_BROADCAST_CB* OnPowerBroadcast; + + //! fixed structure padding. + UCHAR z_F_i_x_e_d[2048 - sizeof(KLST_PATTERN_MATCH) - sizeof(UINT_PTR) * 3 - sizeof(UINT) * 2]; + +} KHOT_PARAMS; +C_ASSERT(sizeof(KHOT_PARAMS) == 2048); + +//! Pointer to a \ref KHOT_PARAMS structure. +typedef KHOT_PARAMS* PKHOT_PARAMS; + +/**@}*/ + +#endif + +#ifndef _LIBUSBK_OVLK_TYPES + +/*! \addtogroup ovlk +* @{ +*/ + +//! \c WaitFlags used by \ref OvlK_Wait. +/*! +* +*/ +typedef enum _KOVL_WAIT_FLAG +{ + //! Do not perform any additional actions upon exiting \ref OvlK_Wait. + KOVL_WAIT_FLAG_NONE = 0L, + + //! If the i/o operation completes successfully, release the OverlappedK back to it's pool. + KOVL_WAIT_FLAG_RELEASE_ON_SUCCESS = 0x0001, + + //! If the i/o operation fails, release the OverlappedK back to it's pool. + KOVL_WAIT_FLAG_RELEASE_ON_FAIL = 0x0002, + + //! If the i/o operation fails or completes successfully, release the OverlappedK back to its pool. Perform no actions if it times-out. + KOVL_WAIT_FLAG_RELEASE_ON_SUCCESS_FAIL = 0x0003, + + //! If the i/o operation times-out cancel it, but do not release the OverlappedK back to its pool. + KOVL_WAIT_FLAG_CANCEL_ON_TIMEOUT = 0x0004, + + //! If the i/o operation times-out, cancel it and release the OverlappedK back to its pool. + KOVL_WAIT_FLAG_RELEASE_ON_TIMEOUT = 0x000C, + + //! Always release the OverlappedK back to its pool. If the operation timed-out, cancel it before releasing back to its pool. + KOVL_WAIT_FLAG_RELEASE_ALWAYS = 0x000F, + + //! Uses alterable wait functions. See http://msdn.microsoft.com/en-us/library/windows/desktop/ms687036%28v=vs.85%29.aspx + KOVL_WAIT_FLAG_ALERTABLE = 0x0010, + +} KOVL_WAIT_FLAG; + +//! \c Overlapped pool config flags. +/*! +* \attention Currently not used. +*/ +typedef enum _KOVL_POOL_FLAG +{ + KOVL_POOL_FLAG_NONE = 0L, +} KOVL_POOL_FLAG; + +/**@}*/ + +#endif + +#ifndef _LIBUSBK_STMK_TYPES + +/*! \addtogroup stmk +* @{ +*/ +//! Stream config flags. +/*! +* \attention Currently not used. +*/ +typedef enum _KSTM_FLAG +{ + //! None + KSTM_FLAG_NONE = 0L, + KSTM_FLAG_NO_PARTIAL_XFERS = 0x00100000, + KSTM_FLAG_USE_TIMEOUT = 0x80000000, + KSTM_FLAG_TIMEOUT_MASK = 0x0001FFFF +} KSTM_FLAG; + +//! Stream config flags. +/*! +* \attention Currently not used. +*/ +typedef enum _KSTM_COMPLETE_RESULT +{ + //! Valid + KSTM_COMPLETE_RESULT_VALID = 0L, + //! Invalid + KSTM_COMPLETE_RESULT_INVALID, +} KSTM_COMPLETE_RESULT; + +//! Stream transfer context structure. +/*! +* This structure is passed into the stream callback functions. +* The stream transfer context list is allocated upon a successful call to \ref StmK_Init. There is one +* transfer context for each transfer. (0 to \c MaxPendingTransfers). +* +*/ +typedef struct _KSTM_XFER_CONTEXT +{ + + //! Internal stream buffer. + PUCHAR Buffer; + + //! Size of internal stream buffer. + INT BufferSize; + + //! Number of bytes to write or number of bytes read. + INT TransferLength; + + //! User defined state. + PVOID UserState; + +} KSTM_XFER_CONTEXT; +//! Pointer to a \ref KSTM_XFER_CONTEXT structure. +typedef KSTM_XFER_CONTEXT* PKSTM_XFER_CONTEXT; + +//! Stream information structure. +/*! +* This structure is passed into the stream callback functions. +* The stream context is allocated upon a successful call to \ref StmK_Init. There is only one +* stream context per stream. +* +*/ +typedef struct _KSTM_INFO +{ + //! \ref KUSB_HANDLE this stream uses. + KUSB_HANDLE UsbHandle; + + //! This parameter corresponds to the bEndpointAddress field in the endpoint descriptor. + UCHAR PipeID; + + //! Maximum transfer read/write request allowed pending. + INT MaxPendingTransfers; + + //! Maximum transfer sage size. + INT MaxTransferSize; + + //! Maximum number of I/O request allowed pending. + INT MaxPendingIO; + + //! Populated with the endpoint descriptor for the specified \c PipeID. + USB_ENDPOINT_DESCRIPTOR EndpointDescriptor; + + //! Populated with the driver api for the specified \c UsbHandle. + KUSB_DRIVER_API DriverAPI; + + //! Populated with the device file handle for the specified \c UsbHandle. + HANDLE DeviceHandle; + + //! Stream handle. + KSTM_HANDLE StreamHandle; + + //! Stream info user defined state. + PVOID UserState; + +} KSTM_INFO; +//! Pointer to a \ref KSTM_INFO structure. +typedef KSTM_INFO* PKSTM_INFO; + +//! Function definition for an optional user-defined callback; executed when a transfer error occurs. +/*! \fn INT KUSB_API KSTM_ERROR_CB(_in PKSTM_INFO StreamInfo, _in PKSTM_XFER_CONTEXT XferContext, _in INT XferContextIndex, _in INT ErrorCode) +* \memberof KSTM_CALLBACK +*/ +typedef INT KUSB_API KSTM_ERROR_CB(_in PKSTM_INFO StreamInfo, _in PKSTM_XFER_CONTEXT XferContext, _in INT XferContextIndex, _in INT ErrorCode); + +//! Function definition for an optional user-defined callback; executed to submit a transfer. +/*! \fn INT KUSB_API KSTM_SUBMIT_CB(_in PKSTM_INFO StreamInfo, _in PKSTM_XFER_CONTEXT XferContext, _in INT XferContextIndex, _in LPOVERLAPPED Overlapped) +* \memberof KSTM_CALLBACK +*/ +typedef INT KUSB_API KSTM_SUBMIT_CB(_in PKSTM_INFO StreamInfo, _in PKSTM_XFER_CONTEXT XferContext, _in INT XferContextIndex, _in LPOVERLAPPED Overlapped); + +//! Function definition for an optional user-defined callback; executed for each transfer context when the stream is started with \ref StmK_Start. +/*! \fn INT KUSB_API KSTM_STARTED_CB(_in PKSTM_INFO StreamInfo, _in PKSTM_XFER_CONTEXT XferContext, _in INT XferContextIndex) +* \memberof KSTM_CALLBACK +*/ +typedef INT KUSB_API KSTM_STARTED_CB(_in PKSTM_INFO StreamInfo, _in PKSTM_XFER_CONTEXT XferContext, _in INT XferContextIndex); + +//! Function definition for an optional user-defined callback; executed for each transfer context when the stream is stopped with \ref StmK_Stop. +/*! \fn INT KUSB_API KSTM_STOPPED_CB(_in PKSTM_INFO StreamInfo, _in PKSTM_XFER_CONTEXT XferContext, _in INT XferContextIndex) +* \memberof KSTM_CALLBACK +*/ +typedef INT KUSB_API KSTM_STOPPED_CB(_in PKSTM_INFO StreamInfo, _in PKSTM_XFER_CONTEXT XferContext, _in INT XferContextIndex); + +//! Function definition for an optional user-defined callback; executed when a valid transfer completes. +/*! \fn INT KUSB_API KSTM_COMPLETE_CB(_in PKSTM_INFO StreamInfo, _in PKSTM_XFER_CONTEXT XferContext, _in INT XferContextIndex, _in INT ErrorCode) +* \memberof KSTM_CALLBACK +*/ +typedef INT KUSB_API KSTM_COMPLETE_CB(_in PKSTM_INFO StreamInfo, _in PKSTM_XFER_CONTEXT XferContext, _in INT XferContextIndex, _in INT ErrorCode); + +//! Function definition for an optional user-defined callback; executed immediately after a transfer completes. +/*! \fn KSTM_COMPLETE_RESULT KUSB_API KSTM_BEFORE_COMPLETE_CB(_in PKSTM_INFO StreamInfo, _in PKSTM_XFER_CONTEXT XferContext, _in INT XferContextIndex, _ref PINT ErrorCode) +* \memberof KSTM_CALLBACK +* +* This callback function allows the user to accept or reject the transfer: +* - IN (Read, DeviceToHost) endpoints. +* - KSTM_COMPLETE_RESULT_VALID +* Continue normal processing; add the transfer to the internal complete list and make it available to \ref StmK_Read. +* - KSTM_COMPLETE_RESULT_INVALID +* Ignore this transfer. +* - OUT (Write, HostToDevice) endpoints. +* - KSTM_COMPLETE_RESULT_VALID +* Continue normal processing; add the transfer to the internal complete list and make it available subsequent \ref StmK_Write requests. +* - KSTM_COMPLETE_RESULT_INVALID +* Return this transfer to the internal queued list for automatic resubmission to the device. +* +*/ +typedef KSTM_COMPLETE_RESULT KUSB_API KSTM_BEFORE_COMPLETE_CB(_in PKSTM_INFO StreamInfo, _in PKSTM_XFER_CONTEXT XferContext, _in INT XferContextIndex, _in PINT ErrorCode); + +//! Stream callback structure. +/*! +* \fixedstruct{64} +* +* These optional callback functions are executed from the streams internal thread at various stages of operation. +* +*/ +typedef struct _KSTM_CALLBACK +{ + //! Executed when a transfer error occurs. + KSTM_ERROR_CB* Error; + + //! Executed to submit a transfer. + KSTM_SUBMIT_CB* Submit; + + //! Executed when a valid transfer completes. + KSTM_COMPLETE_CB* Complete; + + //! Executed for every transfer context when the stream is started with \ref StmK_Start. + KSTM_STARTED_CB* Started; + + //! Executed for every transfer context when the stream is stopped with \ref StmK_Stop. + KSTM_STOPPED_CB* Stopped; + + //! Executed immediately after a transfer completes. + KSTM_BEFORE_COMPLETE_CB* BeforeComplete; + + //! fixed structure padding. + UCHAR z_F_i_x_e_d[64 - sizeof(UINT_PTR) * 6]; + +} KSTM_CALLBACK; +//! Pointer to a \ref KSTM_CALLBACK structure. +typedef KSTM_CALLBACK* PKSTM_CALLBACK; +C_ASSERT(sizeof(KSTM_CALLBACK) == 64); + +/**@}*/ + +#endif +/////////////////////////////////////////////////////////////////////// +// L I B U S B K PUBLIC FUNCTIONS //////////////////////////////////// +/////////////////////////////////////////////////////////////////////// + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef _LIBUSBK_LIBK_FUNCTIONS + /*! \addtogroup libk + * @{ + */ + +//! Gets the internal user context for the specified \ref KLIB_HANDLE. + /*! + * + * \param[out] Version + * Receives the libusbK library verson information. + * + * \returns NONE + */ + KUSB_EXP VOID KUSB_API LibK_GetVersion(_out PKLIB_VERSION Version); + +//! Gets the internal user context for the specified \ref KLIB_HANDLE. + /*! + * + * \param[in] Handle + * The handle containg the context to retrieve. + * + * \param[in] HandleType + * Handle type of \c Handle. + * + * \returns + * - on success, The user context value. + * - On failure, returns NULL and sets last error to \c ERROR_INVALID_HANDLE. + * + */ + KUSB_EXP KLIB_USER_CONTEXT KUSB_API LibK_GetContext( + _in KLIB_HANDLE Handle, + _in KLIB_HANDLE_TYPE HandleType); + +//! Sets internal user context for the specified \ref KLIB_HANDLE. + /*! + * + * \param[in] Handle + * The handle containg the context to set. + * + * \param[in] HandleType + * Handle type of \c Handle. + * + * \param[in] ContextValue + * Value to assign to the handle user context space. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP BOOL KUSB_API LibK_SetContext( + _in KLIB_HANDLE Handle, + _in KLIB_HANDLE_TYPE HandleType, + _in KLIB_USER_CONTEXT ContextValue); + +//! Assigns a cleanup callback function to a \ref KLIB_HANDLE. + /*! + * + * \param[in] Handle + * The handle containg the cleanup callback function to set. + * + * \param[in] HandleType + * Handle type of \c Handle. + * + * \param[in] CleanupCB + * User supplied callback function to execute when the handles internal reference count reaches 0. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP BOOL KUSB_API LibK_SetCleanupCallback( + _in KLIB_HANDLE Handle, + _in KLIB_HANDLE_TYPE HandleType, + _in KLIB_HANDLE_CLEANUP_CB* CleanupCB); + +//! Initialize a driver API set. + /*! + * + * \param[out] DriverAPI + * A driver API structure to populate. + * + * \param[in] DriverID + * The driver id of the API set to retrieve. See \ref KUSB_DRVID + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP BOOL KUSB_API LibK_LoadDriverAPI( + _out PKUSB_DRIVER_API DriverAPI, + _in INT DriverID); + +//! Copies the driver API set out of a \ref KUSB_HANDLE + /*! + * + * \param[out] DriverAPI + * A driver API structure to populate. + * + * \param[in] UsbHandle + * Handle containing the desired driver API. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP BOOL KUSB_API LibK_CopyDriverAPI( + _out PKUSB_DRIVER_API DriverAPI, + _in KUSB_HANDLE UsbHandle); + +//! Initialize a driver API function. + /*! + * \param[out] ProcAddress + * Reference to a function pointer that will receive the API function pointer. + * + * \param[in] DriverID + * The driver id of the API to use. See \ref KUSB_DRVID + * + * \param[in] FunctionID + * The function id. See \ref KUSB_FNID + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP BOOL KUSB_API LibK_GetProcAddress( + _out KPROC* ProcAddress, + _in INT DriverID, + _in INT FunctionID); + +//! Sets the default user context for the specified \ref KLIB_HANDLE_TYPE. + /*! + * + * \param[in] HandleType + * The handle type which will be assigned the default ContextValue. + * + * \param[in] ContextValue + * Value assigned to the default user context for the specified \ref KLIB_HANDLE_TYPE. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP BOOL KUSB_API LibK_SetDefaultContext( + _in KLIB_HANDLE_TYPE HandleType, + _in KLIB_USER_CONTEXT ContextValue); + +//! Gets the default user context for the specified \ref KLIB_HANDLE_TYPE. + /*! + * + * \param[in] HandleType + * Handle type used to retrieve the default user context. + * + * \returns + * - on success, The default user context value. + * - On failure, returns NULL and sets last error to \c ERROR_INVALID_HANDLE. + * + */ + KUSB_EXP KLIB_USER_CONTEXT KUSB_API LibK_GetDefaultContext( + _in KLIB_HANDLE_TYPE HandleType); + +//! Initializes the global libusbK process context. + /*! + * + * If this function is not called at startup, libusbK initializes the global libusbK process context automatically. + * + * \param[in] Heap + * A handle to the memory heap libusbK will use for dynamic memory allocation. + * \note The process context itself is always allocated from the proccess heap. + * \note If \b Heap is \b NULL, dynamic memory is allocated from the proccess heap. + * + * \param[in] Reserved + * Reserved for future use. Must set to \b NULL. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP BOOL KUSB_API LibK_Context_Init( + _inopt HANDLE Heap, + _in PVOID Reserved); + +//! Frees the global libusbK process context. + /*! + * + * If this function is not called on exit, libusbK frees the global libusbK process context automatically when it terminates. + * + * \returns NONE. + * + */ + KUSB_EXP VOID KUSB_API LibK_Context_Free(VOID); + + + /**@}*/ +#endif + +#ifndef _LIBUSBK_USBK_FUNCTIONS + /*! \addtogroup usbk + * @{ + */ + +//! Creates/opens a libusbK interface handle from the device list. This is a preferred method. + /*! + * + * \param[out] InterfaceHandle + * Receives a handle configured to the first (default) interface on the device. This handle is required by + * other libusbK routines that perform operations on the default interface. The handle is opaque. To release + * this handle, call the \ref UsbK_Free function. + * + * \param[in] DevInfo + * The device list element to open. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * \c UsbK_Init performs the same tasks as \ref UsbK_Initialize with the following exceptions: + * - Uses a \ref KLST_DEVINFO instead of a file handle created with the Windows CreateFile() API function. + * - File handles are managed internally and are closed when the last \ref KUSB_HANDLE is closed with + * \ref UsbK_Free. To obtain the internal file device handle, See \ref UsbK_GetProperty. + * + * \note + * A \c KUSB_HANDLE is required by other library routines that perform operations on a device. Once + * initialized, it can access all interfaces/endpoints of a device. An initialized handle can be cloned with + * \ref UsbK_Clone or \ref UsbK_GetAssociatedInterface. A Cloned handle will behave just as the orignal + * except in will maintain it's own \b selected interface setting. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_Init ( + _out KUSB_HANDLE* InterfaceHandle, + _in KLST_DEVINFO_HANDLE DevInfo); + +//! Frees a libusbK interface handle. + /*! + * + * \param[in] InterfaceHandle + * Handle to an interface on the device. This handle must be created by a previous call to \ref UsbK_Init, + * \ref UsbK_Initialize, \ref UsbK_GetAssociatedInterface, or \ref UsbK_Clone. + * + * \returns TRUE. + * + * The \ref UsbK_Free function releases resources alocated to the InterfaceHandle. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_Free ( + _in KUSB_HANDLE InterfaceHandle); + +//! Claims the specified interface by number or index. + /*! + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[in] NumberOrIndex + * Interfaces can be claimed or released by a interface index or \c bInterfaceNumber. + * - Interface indexes always start from 0 and continue sequentially for all interfaces of the device. + * - An interface number always represents the actual \ref USB_INTERFACE_DESCRIPTOR::bInterfaceNumber. + * Interface numbers are not guaranteed to be zero based or sequential. + * + * \param[in] IsIndex + * If TRUE, \c NumberOrIndex represents an interface index.\n if FALSE \c NumberOrIndex represents a + * \c bInterfaceNumber. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * Claiming an interface allows applications a way to prevent other applications or multiple instances of the + * same application from using an interface at the same time. + * + * When an interface is claimed with \ref UsbK_ClaimInterface it performs the following actions: + * - Checks if the interface exists. If it does not, returns FALSE and sets last error to + * ERROR_NO_MORE_ITEMS. + * - The default (or current) interface for the device is changed to \c NumberOrIndex. + * - libusb0.sys and libusbK.sys: + * - A request to claim the interface is sent to the driver. If the interface is not claimed or already + * claimed by the application the request succeeds. If the interface is claimed by another application, + * \ref UsbK_ClaimInterface returns FALSE and sets last error to \c ERROR_BUSY. In this case the The + * default (or current) interface for the device is \b still changed to \c NumberOrIndex. + * - WinUSB.sys: All WinUSB device interfaces are claimed when the device is opened. This function performs + * identically to \ref UsbK_SelectInterface + * + */ + KUSB_EXP BOOL KUSB_API UsbK_ClaimInterface ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR NumberOrIndex, + _in BOOL IsIndex); + +//! Releases the specified interface by number or index. + /*! + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[in] NumberOrIndex + * Interfaces can be claimed or released by a interface index or \c bInterfaceNumber. + * - Interface indexes always start from 0 and continue sequentially for all interfaces of the device. + * - An interface number always represents the actual \ref USB_INTERFACE_DESCRIPTOR::bInterfaceNumber. + * Interface numbers are not guaranteed to be zero based or sequential. + * + * \param[in] IsIndex + * If TRUE, \c NumberOrIndex represents an interface index.\n if FALSE \c NumberOrIndex represents a + * \c bInterfaceNumber. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * When an interface is release with \ref UsbK_ReleaseInterface it performs the following actions: + * - Checks if the interface exists. If it does not, returns FALSE and sets last error to + * ERROR_NO_MORE_ITEMS. + * - The default (or current) interface for the device is changed to the previously claimed interface. + * - libusb0.sys and libusbK.sys: + * - A request to release the interface is sent to the driver. If the interface is not claimed by a + * different application the request succeeds. If the interface is claimed by another application, + * \ref UsbK_ReleaseInterface returns FALSE and sets last error to \c ERROR_BUSY. In this case, the + * default/current interface for the device is \b still changed to the previously claimed interface. + * - WinUSB.sys: No other action needed, returns TRUE. + * + * \note + * When an interface is released, it is moved to the bottom if an interface stack making a previously claimed + * interface the current. This will continue to occur regardless of whether the interface is claimed. For + * this reason, \ref UsbK_ReleaseInterface can be used as a means to change the current/default interface of + * an \c InterfaceHandle without claiming the interface. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_ReleaseInterface ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR NumberOrIndex, + _in BOOL IsIndex); + +//! Sets the alternate setting of the specified interface. + /*! + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[in] NumberOrIndex + * Interfaces can be specified by a interface index or \c bInterfaceNumber. + * - Interface indexes always start from 0 and continue sequentially for all interfaces of the device. + * - An interface number always represents the actual \ref USB_INTERFACE_DESCRIPTOR::bInterfaceNumber. + * Interface numbers are not guaranteed to be zero based or sequential. + * + * \param[in] IsIndex + * If TRUE, \c NumberOrIndex represents an interface index.\n if FALSE \c NumberOrIndex represents a + * \c bInterfaceNumber. + * + * \param[in] AltSettingNumber + * The bAlternateSetting to activate. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * \ref UsbK_SetAltInterface performs the same task as \ref UsbK_SetCurrentAlternateSetting except it + * provides the option of specifying which interfaces alternate setting to activate. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_SetAltInterface ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR NumberOrIndex, + _in BOOL IsIndex, + _in UCHAR AltSettingNumber); + +//! Gets the alternate setting for the specified interface. + /*! + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[in] NumberOrIndex + * Interfaces can be specified by a interface index or \c bInterfaceNumber. + * - Interface indexes always start from 0 and continue sequentially for all interfaces of the device. + * - An interface number always represents the actual \ref USB_INTERFACE_DESCRIPTOR::bInterfaceNumber. + * Interface numbers are not guaranteed to be zero based or sequential. + * + * \param[in] IsIndex + * If TRUE, \c NumberOrIndex represents an interface index.\n if FALSE \c NumberOrIndex represents a + * \c bInterfaceNumber. + * + * \param[out] AltSettingNumber + * On success, returns the active bAlternateSetting. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * \ref UsbK_GetAltInterface performs the same task as \ref UsbK_GetCurrentAlternateSetting except it + * provides the option of specifying which interfaces alternate setting is to be retrieved. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_GetAltInterface ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR NumberOrIndex, + _in BOOL IsIndex, + _out PUCHAR AltSettingNumber); + +//! Gets the requested descriptor. This is a synchronous operation. + /*! + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[in] DescriptorType + * A value that specifies the type of descriptor to return. This parameter corresponds to the bDescriptorType + * field of a standard device descriptor, whose values are described in the Universal Serial Bus + * specification. + * + * \param[in] Index + * The descriptor index. For an explanation of the descriptor index, see the Universal Serial Bus + * specification (www.usb.org). + * + * \param[in] LanguageID + * A value that specifies the language identifier, if the requested descriptor is a string descriptor. + * + * \param[out] Buffer + * A caller-allocated buffer that receives the requested descriptor. + * + * \param[in] BufferLength + * The length, in bytes, of Buffer. + * + * \param[out] LengthTransferred + * The number of bytes that were copied into Buffer. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * If the device descriptor or active config descriptor is requested, \ref UsbK_GetDescriptor retrieves + * cached data and this becomes a non-blocking, non I/O request. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_GetDescriptor ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR DescriptorType, + _in UCHAR Index, + _in USHORT LanguageID, + _out PUCHAR Buffer, + _in UINT BufferLength, + _outopt PUINT LengthTransferred); + +//! Transmits control data over a default control endpoint. + /*! + * + * \param[in] InterfaceHandle + * A valid libusbK interface handle returned by: + * - \ref UsbK_Init + * - \ref UsbK_Initialize + * - \ref UsbK_GetAssociatedInterface + * - \ref UsbK_Clone + * + * \param[in] SetupPacket + * The 8-byte setup packet of type WINUSB_SETUP_PACKET. + * + * \param[in,out] Buffer + * A caller-allocated buffer that contains the data to transfer. + * + * \param[in] BufferLength + * The number of bytes to transfer, not including the setup packet. This number must be less than or equal to + * the size, in bytes, of Buffer. + * + * \param[out] LengthTransferred + * A pointer to a UINT variable that receives the actual number of transferred bytes. If the application + * does not expect any data to be transferred during the data phase (BufferLength is zero), LengthTransferred + * can be NULL. + * + * \param[in] Overlapped + * An optional pointer to an OVERLAPPED structure, which is used for asynchronous operations. If this + * parameter is specified, \ref UsbK_ControlTransfer immediately returns, and the event is signaled when the + * operation is complete. If Overlapped is not supplied, the \ref UsbK_ControlTransfer function transfers + * data synchronously. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. If an + * \c Overlapped member is supplied and the operation succeeds this function returns FALSE and sets last + * error to ERROR_IO_PENDING. + * + * A \ref UsbK_ControlTransfer is never cached. These requests always go directly to the usb device. + * + * \attention + * This function should not be used for operations supported by the library.\n e.g. + * \ref UsbK_SetConfiguration, \ref UsbK_SetAltInterface, etc.. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_ControlTransfer ( + _in KUSB_HANDLE InterfaceHandle, + _in WINUSB_SETUP_PACKET SetupPacket, + _refopt PUCHAR Buffer, + _in UINT BufferLength, + _outopt PUINT LengthTransferred, + _inopt LPOVERLAPPED Overlapped); + +//! Sets the power policy for a device. + /*! + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[in] PolicyType + * A value that specifies the power policy to set. The following table describes symbolic constants that are + * defined in \ref lusbk_shared.h. + * + * - AUTO_SUSPEND (0x81) + * - Specifies the auto-suspend policy type; the power policy parameter must be specified by the caller in + * the Value parameter. + * - For auto-suspend, the Value parameter must point to a UCHAR variable. + * - If Value is TRUE (nonzero), the USB stack suspends the device if the device is idle. A device is idle + * if there are no transfers pending, or if the only pending transfers are IN transfers to interrupt or + * bulk endpoints. + * - The default value is determined by the value set in the DefaultIdleState registry setting. By default, + * this value is TRUE. + * + * - SUSPEND_DELAY (0x83) + * - Specifies the suspend-delay policy type; the power policy parameter must be specified by the caller in + * the Value parameter. + * - For suspend-delay, Value must point to a UINT variable. + * - Value specifies the minimum amount of time, in milliseconds, that the driver must wait post transfer + * before it can suspend the device. + * - The default value is determined by the value set in the DefaultIdleTimeout registry setting. By + * default, this value is five seconds. + * + * \param[in] ValueLength + * The size, in bytes, of the buffer at Value. + * + * \param[in] Value + * The new value for the power policy parameter. Data type and value for Value depends on the type of power + * policy passed in PolicyType. For more information, see PolicyType. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * The following list summarizes the effects of changes to power management states: + * - All pipe handles, interface handles, locks, and alternate settings are preserved across power management + * events. + * - Any transfers that are in progress are suspended when a device transfers to a low power state, and they + * are resumed when the device is restored to a working state. + * - The device and system must be in a working state before the client can restore a device-specific + * configuration. Clients can determine whether the device and system are in a working state from the + * WM_POWERBROADCAST message. + * - The client can indicate that an interface is idle by calling \ref UsbK_SetPowerPolicy. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_SetPowerPolicy ( + _in KUSB_HANDLE InterfaceHandle, + _in UINT PolicyType, + _in UINT ValueLength, + _in PVOID Value); + +//! Gets the power policy for a device. + /*! + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[in] PolicyType + * A value that specifies the power policy parameter to retrieve in Value. The following table describes + * symbolic constants that are defined in \ref lusbk_shared.h. + * + * - AUTO_SUSPEND (0x81) + * - If the caller specifies a power policy of AUTO_SUSPEND, \ref UsbK_GetPowerPolicy returns the value of + * the auto suspend policy parameter in the Value parameter. + * - If Value is TRUE (that is, nonzero), the USB stack suspends the device when no transfers are pending + * or the only transfers pending are IN transfers on an interrupt or bulk endpoint. + * - The value of the DefaultIdleState registry value determines the default value of the auto suspend + * policy parameter. + * - The Value parameter must point to a UCHAR variable. + * + * - SUSPEND_DELAY (0x83) + * - If the caller specifies a power policy of SUSPEND_DELAY, \ref UsbK_GetPowerPolicy returns the value of + * the suspend delay policy parameter in Value. + * - The suspend delay policy parameter specifies the minimum amount of time, in milliseconds, that the + * driver must wait after any transfer before it can suspend the device. + * - Value must point to a UINT variable. + * + * \param[in,out] ValueLength + * A pointer to the size of the buffer that Value. On output, ValueLength receives the size of the data that + * was copied into the Value buffer. + * + * \param[out] Value + * A buffer that receives the specified power policy parameter. For more information, see PolicyType. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_GetPowerPolicy ( + _in KUSB_HANDLE InterfaceHandle, + _in UINT PolicyType, + _ref PUINT ValueLength, + _out PVOID Value); + +//! Sets the device configuration number. + /*! + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[in] ConfigurationNumber + * The configuration number to activate. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * \ref UsbK_SetConfiguration is only supported with libusb0.sys. If the driver in not libusb0.sys, this + * function performs the following emulation actions: + * - If the requested configuration number is the current configuration number, returns TRUE. + * - If the requested configuration number is one other than the current configuration number, returns FALSE + * and set last error to \c ERROR_NO_MORE_ITEMS. + * + * This function will fail if there are pending I/O operations or there are other libusbK interface handles + * referencing the device. \sa UsbK_Free + * + */ + KUSB_EXP BOOL KUSB_API UsbK_SetConfiguration ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR ConfigurationNumber); + +//! Gets the device current configuration number. + /*! + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[out] ConfigurationNumber + * On success, receives the active configuration number. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_GetConfiguration ( + _in KUSB_HANDLE InterfaceHandle, + _out PUCHAR ConfigurationNumber); + +//! Resets the usb device of the specified interface handle. (port cycle). + /*! + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_ResetDevice ( + _in KUSB_HANDLE InterfaceHandle); + +//! Creates a libusbK handle for the device specified by a file handle. + /*! + * + * \attention + * This function is supported for WinUSB API compatibility only and is not intended for new development. + * libusbK library users should use \ref UsbK_Init instead. (regardless of the driver they've selected) + * + * \param[in] DeviceHandle + * The handle to the device that CreateFile returned. libusbK uses overlapped I/O, so FILE_FLAG_OVERLAPPED + * must be specified in the dwFlagsAndAttributes parameter of CreateFile call for DeviceHandle to have the + * characteristics necessary for this to function properly. + * + * \param[out] InterfaceHandle + * Receives a handle configured to the first (default) interface on the device. This handle is required by + * other libusbK routines that perform operations on the default interface. The handle is opaque. To release + * this handle, call the \ref UsbK_Free function. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * When \ref UsbK_Initialize is called, the policy settings of the interface are reset to the default values. + * + * The \ref UsbK_Initialize call queries the underlying USB stack for various descriptors and allocates + * enough memory to store the retrieved descriptor data. + * + * \ref UsbK_Initialize first retrieves the device descriptor and then gets the associated configuration + * descriptor. From the configuration descriptor, the call derives the associated interface descriptors and + * stores them in an array. The interfaces in the array are identified by zero-based indexes. An index value + * of 0 indicates the first interface (the default interface), a value of 1 indicates the second associated + * interface, and so on. \ref UsbK_Initialize parses the default interface descriptor for the endpoint + * descriptors and caches information such as the associated pipes or state specific data. The handle + * received in the InterfaceHandle parameter will have its default interface configured to the first + * interface in the array. + * + * If an application wants to use another interface on the device, it can call + * \ref UsbK_GetAssociatedInterface, or \ref UsbK_ClaimInterface. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_Initialize ( + _in HANDLE DeviceHandle, + _out KUSB_HANDLE* InterfaceHandle); + +//! Selects the specified interface by number or index as the current interface. + /*! + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[in] NumberOrIndex + * Interfaces can be claimed or released by a interface index or \c bInterfaceNumber. + * - Interface indexes always start from 0 and continue sequentially for all interfaces of the device. + * - An interface number always represents the actual \ref USB_INTERFACE_DESCRIPTOR::bInterfaceNumber. + * Interface numbers are not guaranteed to be zero based or sequential. + * + * \param[in] IsIndex + * If TRUE, \c NumberOrIndex represents an interface index.\n if FALSE \c NumberOrIndex represents a + * \c bInterfaceNumber. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * \sa UsbK_ClaimInterface + * + */ + KUSB_EXP BOOL KUSB_API UsbK_SelectInterface ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR NumberOrIndex, + _in BOOL IsIndex); + +//! Retrieves a handle for an associated interface. + /*! + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[in] AssociatedInterfaceIndex + * An index that specifies the associated interface to retrieve. A value of 0 indicates the first associated + * interface, a value of 1 indicates the second associated interface, and so on. + * + * \param[out] AssociatedInterfaceHandle + * A handle for the associated interface. Callers must pass this interface handle to libusbK Functions + * exposed by libusbK.dll. To close this handle, call \ref UsbK_Free. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * The \ref UsbK_GetAssociatedInterface function retrieves an opaque handle for an associated interface. This + * is a synchronous operation. + * + * The first associated interface is the interface that immediately follows the current (or default) + * interface of the specified /c InterfaceHandle. + * + * The handle that \ref UsbK_GetAssociatedInterface returns must be released by calling \ref UsbK_Free. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_GetAssociatedInterface ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR AssociatedInterfaceIndex, + _out KUSB_HANDLE* AssociatedInterfaceHandle); + +//! Clones the specified interface handle. + /*! + * + * Each cloned interface handle maintains it's own selected interface. + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[out] DstInterfaceHandle + * On success, the cloned return handle. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_Clone ( + _in KUSB_HANDLE InterfaceHandle, + _out KUSB_HANDLE* DstInterfaceHandle); + +//! Retrieves the interface descriptor for the specified alternate interface settings for a particular interface handle. + /*! + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[in] AltSettingIndex + * A value that indicates which alternate setting index to return. A value of 0 indicates the first alternate + * setting, a value of 1 indicates the second alternate setting, and so on. + * + * \param[out] UsbAltInterfaceDescriptor + * A pointer to a caller-allocated \ref USB_INTERFACE_DESCRIPTOR structure that contains information about + * the interface that AltSettingNumber specified. + * + * The \ref UsbK_QueryInterfaceSettings call searches the current/default interface array for the alternate + * interface specified by the caller in the AltSettingIndex. If the specified alternate interface is found, + * the function populates the caller-allocated USB_INTERFACE_DESCRIPTOR structure. If the specified alternate + * interface is not found, then the call fails with the ERROR_NO_MORE_ITEMS code. + * + * To change the current/default interface, see \ref UsbK_SelectInterface and \ref UsbK_ClaimInterface + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_QueryInterfaceSettings ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR AltSettingIndex, + _out PUSB_INTERFACE_DESCRIPTOR UsbAltInterfaceDescriptor); + +//! Retrieves information about the physical device that is associated with a libusbK handle. + /*! + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[in] InformationType + * A value that specifies which interface information value to retrieve. On input, InformationType must have + * the following value: \c DEVICE_SPEED (0x01). + * + * \param[in,out] BufferLength + * The maximum number of bytes to read. This number must be less than or equal to the size, in bytes, of + * Buffer. On output, BufferLength is set to the actual number of bytes that were copied into Buffer. + * + * \param[in,out] Buffer + * A caller-allocated buffer that receives the requested value. On output, Buffer indicates the device speed: + * - (0x01) low/full speed device. + * - (0x03) high speed device. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_QueryDeviceInformation ( + _in KUSB_HANDLE InterfaceHandle, + _in UINT InformationType, + _ref PUINT BufferLength, + _ref PVOID Buffer); + +//! Sets the alternate setting of an interface. + /*! + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[in] AltSettingNumber + * The value that is contained in the bAlternateSetting member of the \ref USB_INTERFACE_DESCRIPTOR + * structure. This structure can be populated by the \ref UsbK_QueryInterfaceSettings routine. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * Sets the active bAlternateSetting for the current/default interface. + * + * To change the default/current interface see \ref UsbK_ClaimInterface and \ref UsbK_ReleaseInterface + * \sa UsbK_SetAltInterface + * + */ + KUSB_EXP BOOL KUSB_API UsbK_SetCurrentAlternateSetting ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR AltSettingNumber); + +//! Gets the current alternate interface setting for an interface. + /*! + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[out] AltSettingNumber + * A pointer to an unsigned character that receives an integer that indicates the current alternate setting. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * Gets the active bAlternateSetting for the current/default interface. + * + * To change the default/current interface see \ref UsbK_ClaimInterface and \ref UsbK_ReleaseInterface + * \sa UsbK_GetAltInterface + * + */ + KUSB_EXP BOOL KUSB_API UsbK_GetCurrentAlternateSetting ( + _in KUSB_HANDLE InterfaceHandle, + _out PUCHAR AltSettingNumber); + +//! Retrieves information about a pipe that is associated with an interface. + /*! + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[in] AltSettingNumber + * A value that specifies the alternate interface to return the information for. + * + * \param[in] PipeIndex + * A value that specifies the pipe to return information about. This value is not the same as the + * bEndpointAddress field in the endpoint descriptor. A PipeIndex value of 0 signifies the first endpoint + * that is associated with the interface, a value of 1 signifies the second endpoint, and so on. PipeIndex + * must be less than the value in the bNumEndpoints field of the interface descriptor. + * + * \param[out] PipeInformation + * A pointer, on output, to a caller-allocated \ref WINUSB_PIPE_INFORMATION structure that contains pipe + * information. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * The \ref UsbK_QueryPipe function does not retrieve information about the control pipe. + * + * Each interface on the USB device can have multiple endpoints. To communicate with each of these endpoints, + * the bus driver creates pipes for each endpoint on the interface. The pipe indices are zero-based. + * Therefore for n number of endpoints, the pipes' indices are set from n-1. \ref UsbK_QueryPipe parses the + * configuration descriptor to get the interface specified by the caller. It searches the interface + * descriptor for the endpoint descriptor associated with the caller-specified pipe. If the endpoint is + * found, the function populates the caller-allocated \ref WINUSB_PIPE_INFORMATION structure with information + * from the endpoint descriptor. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_QueryPipe ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR AltSettingNumber, + _in UCHAR PipeIndex, + _out PWINUSB_PIPE_INFORMATION PipeInformation); + +//! Sets the policy for a specific pipe associated with an endpoint on the device. This is a synchronous operation. + /*! + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[in] PipeID + * An 8-bit value that consists of a 7-bit address and a direction bit. This parameter corresponds to the + * bEndpointAddress field in the endpoint descriptor. + * + * \param[in] PolicyType + * A UINT variable that specifies the policy parameter to change. The Value parameter contains the new value + * for the policy parameter. See the remarks section for information about each of the pipe policies and the + * resulting behavior. + * + * \param[in] ValueLength + * The size, in bytes, of the buffer at Value. + * + * \param[in] Value + * The new value for the policy parameter that PolicyType specifies. The size of this input parameter depends + * on the policy to change. For information about the size of this parameter, see the description of the + * PolicyType parameter. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * The following list describes symbolic constants that are defined in \ref lusbk_shared.h + * + * - \c SHORT_PACKET_TERMINATE (0x01) + * - The default value is \c FALSE. + * - To enable \c SHORT_PACKET_TERMINATE, in Value pass the address of a caller-allocated \c UCHAR variable + * set to \c TRUE (nonzero). + * - Enabling \c SHORT_PACKET_TERMINATE causes the driver to send a zero-length packet at the end of every + * write request to the host controller. + * + * - \c AUTO_CLEAR_STALL (0x02) + * - The default value is \c FALSE. To enable \c AUTO_CLEAR_STALL, in Value pass the address of a + * caller-allocated \c UCHAR variable set to \c TRUE (nonzero). + * - Enabling \c AUTO_CLEAR_STALL causes libusbK to reset the pipe in order to automatically clear the + * stall condition. Data continues to flow on the bulk and interrupt \c IN endpoints again as soon as a + * new or a queued transfer arrives on the endpoint. This policy parameter does not affect control pipes. + * - Disabling \c AUTO_CLEAR_STALL causes all transfers (that arrive to the endpoint after the stalled + * transfer) to fail until the caller manually resets the endpoint's pipe by calling \ref UsbK_ResetPipe. + * + * - \c PIPE_TRANSFER_TIMEOUT (0x03) + * - The default value is zero. To set a time-out value, in Value pass the address of a caller-allocated + * \c UINT variable that contains the time-out interval. + * - The \c PIPE_TRANSFER_TIMEOUT value specifies the time-out interval, in milliseconds. The host + * controller cancels transfers that do not complete within the specified time-out interval. + * - A value of zero (default) indicates that transfers do not time out because the host controller never + * cancels the transfer. + * + * - \c IGNORE_SHORT_PACKETS (0x04) + * - The default value is \c FALSE. To enable \c IGNORE_SHORT_PACKETS, in Value pass the address of a + * caller-allocated \c UCHAR variable set to \c TRUE (nonzero). + * - Enabling \c IGNORE_SHORT_PACKETS causes the host controller to not complete a read operation after it + * receives a short packet. Instead, the host controller completes the operation only after the host has + * read the specified number of bytes. + * - Disabling \c IGNORE_SHORT_PACKETS causes the host controller to complete a read operation when either + * the host has read the specified number of bytes or the host has received a short packet. + * + * - \c ALLOW_PARTIAL_READS (0x05) + * - The default value is \c TRUE (nonzero). To disable \c ALLOW_PARTIAL_READS, in Value pass the address + * of a caller-allocated \c UCHAR variable set to \c FALSE (zero). + * - Disabling \c ALLOW_PARTIAL_READS causes the read requests to fail whenever the device returns more + * data (on bulk and interrupt \c IN endpoints) than the caller requested. + * - Enabling \c ALLOW_PARTIAL_READS causes libusbK to save or discard the extra data when the device + * returns more data (on bulk and interrupt \c IN endpoints) than the caller requested. This behavior is + * defined by setting the \c AUTO_FLUSH value. + * + * - \c AUTO_FLUSH (0x06) + * - The default value is \c FALSE (zero). To enable \c AUTO_FLUSH, in Value pass the address of a + * caller-allocated \c UCHAR variable set to \c TRUE (nonzero). + * - \c AUTO_FLUSH must be used with \c ALLOW_PARTIAL_READS enabled. If \c ALLOW_PARTIAL_READS is \c TRUE, + * the value of \c AUTO_FLUSH determines the action taken by libusbK when the device returns more data + * than the caller requested. + * - Disabling \c ALLOW_PARTIAL_READS causes libusbK to ignore the \c AUTO_FLUSH value. + * - Disabling \c AUTO_FLUSH with \c ALLOW_PARTIAL_READS enabled causes libusbK to save the extra data, add + * the data to the beginning of the caller's next read request, and send it to the caller in the next + * read operation. + * - Enabling \c AUTO_FLUSH with \c ALLOW_PARTIAL_READS enabled causes libusbK to discard the extra data + * remaining from the read request. + * + * - \c RAW_IO (0x07) + * - The default value is \c FALSE (zero). To enable \c RAW_IO, in Value pass the address of a + * caller-allocated \c UCHAR variable set to \c TRUE (nonzero). + * - Enabling \c RAW_IO causes libusbK to send data directly to the \c USB driver stack, bypassing + * libusbK's queuing and error handling mechanism. + * - The buffers that are passed to \ref UsbK_ReadPipe must be configured by the caller as follows: + * - The buffer length must be a multiple of the maximum endpoint packet size. + * - The length must be less than or equal to the value of \c MAXIMUM_TRANSFER_SIZE retrieved by + * \ref UsbK_GetPipePolicy. + * - Disabling \c RAW_IO (\c FALSE) does not impose any restriction on the buffers that are passed to + * \ref UsbK_ReadPipe. + * + * - \c RESET_PIPE_ON_RESUME (0x09) + * - The default value is \c FALSE (zero). To enable \c RESET_PIPE_ON_RESUME, in Value pass the address of + * a caller-allocated \c UCHAR variable set to \c TRUE (nonzero). + * - \c TRUE (or a nonzero value) indicates that on resume from suspend, libusbK resets the endpoint before + * it allows the caller to send new requests to the endpoint. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_SetPipePolicy ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID, + _in UINT PolicyType, + _in UINT ValueLength, + _in PVOID Value); + +//! Gets the policy for a specific pipe (endpoint). + /*! + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[in] PipeID + * An 8-bit value that consists of a 7-bit address and a direction bit. This parameter corresponds to the + * bEndpointAddress field in the endpoint descriptor. + * + * \param[in] PolicyType + * A UINT variable that specifies the policy parameter to retrieve. The current value for the policy + * parameter is retrieved the Value parameter. + * + * \param[in,out] ValueLength + * A pointer to the size, in bytes, of the buffer that Value points to. On output, ValueLength receives the + * size, in bytes, of the data that was copied into the Value buffer. + * + * \param[out] Value + * A pointer to a buffer that receives the specified pipe policy value. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_GetPipePolicy ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID, + _in UINT PolicyType, + _ref PUINT ValueLength, + _out PVOID Value); + +//! Reads data from the specified pipe. + /*! + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[in] PipeID + * An 8-bit value that consists of a 7-bit address and a direction bit. This parameter corresponds to the + * bEndpointAddress field in the endpoint descriptor. + * + * \param[out] Buffer + * A caller-allocated buffer that receives the data that is read. + * + * \param[in] BufferLength + * The maximum number of bytes to read. This number must be less than or equal to the size, in bytes, of + * Buffer. + * + * \param[out] LengthTransferred + * A pointer to a UINT variable that receives the actual number of bytes that were copied into Buffer. For + * more information, see Remarks. + * + * \param[in] Overlapped + * An optional pointer to an overlapped structure for asynchronous operations. This can be a \ref KOVL_HANDLE + * or a pointer to a standard windows OVERLAPPED structure. If this parameter is specified, \c UsbK_ReadPipe + * returns immediately rather than waiting synchronously for the operation to complete before returning. An + * event is signaled when the operation is complete. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_ReadPipe ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID, + _out PUCHAR Buffer, + _in UINT BufferLength, + _outopt PUINT LengthTransferred, + _inopt LPOVERLAPPED Overlapped); + +//! Writes data to a pipe. + /*! + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[in] PipeID + * An 8-bit value that consists of a 7-bit address and a direction bit. This parameter corresponds to the + * bEndpointAddress field in the endpoint descriptor. + * + * \param[in] Buffer + * A caller-allocated buffer the data is written from. + * + * \param[in] BufferLength + * The maximum number of bytes to write. This number must be less than or equal to the size, in bytes, of + * Buffer. + * + * \param[out] LengthTransferred + * A pointer to a UINT variable that receives the actual number of bytes that were transferred from Buffer. + * For more information, see Remarks. + * + * \param[in] Overlapped + * An optional pointer to an overlapped structure for asynchronous operations. This can be a \ref KOVL_HANDLE + * or a pointer to a standard windows OVERLAPPED structure. If this parameter is specified, \c UsbK_WritePipe + * returns immediately rather than waiting synchronously for the operation to complete before returning. An + * event is signaled when the operation is complete. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_WritePipe ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID, + _in PUCHAR Buffer, + _in UINT BufferLength, + _outopt PUINT LengthTransferred, + _inopt LPOVERLAPPED Overlapped); + +//! Resets the data toggle and clears the stall condition on a pipe. + /*! + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[in] PipeID + * An 8-bit value that consists of a 7-bit address and a direction bit. This parameter corresponds to the + * bEndpointAddress field in the endpoint descriptor. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_ResetPipe ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID); + +//! Aborts all of the pending transfers for a pipe. + /*! + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[in] PipeID + * An 8-bit value that consists of a 7-bit address and a direction bit. This parameter corresponds to the + * bEndpointAddress field in the endpoint descriptor. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_AbortPipe ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID); + +//! Discards any data that is cached in a pipe. + /*! + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[in] PipeID + * An 8-bit value that consists of a 7-bit address and a direction bit. This parameter corresponds to the + * bEndpointAddress field in the endpoint descriptor. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_FlushPipe ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID); + +//! Reads from an isochronous pipe. + /*! + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[in] PipeID + * An 8-bit value that consists of a 7-bit address and a direction bit. This parameter corresponds to the + * bEndpointAddress field in the endpoint descriptor. + * + * \param[out] Buffer + * A caller-allocated buffer that receives the data that is read. + * + * \param[in] BufferLength + * The maximum number of bytes to read. This number must be less than or equal to the size, in bytes, of + * Buffer. + * + * \param[in] Overlapped + * A \b required pointer to an overlapped structure for asynchronous operations. This can be a + * \ref KOVL_HANDLE or a pointer to a standard windows OVERLAPPED structure. If this parameter is specified, + * \c UsbK_IsoReadPipe returns immediately rather than waiting synchronously for the operation to complete + * before returning. An event is signaled when the operation is complete. + * + * \param[in,out] IsoContext + * Pointer to an isochronous transfer context created with \ref IsoK_Init. If \c IsoContext is NULL, + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * \par Overlapped I/O considerations + * If an \c Overlapped parameter is specified and the transfer is submitted successfully, the function + * returns \b FALSE and sets last error to \c ERROR_IO_PENDING. When using overlapped I/O, users may ignore + * the return results of this function and instead use the return results from one of the \ref ovlk wait + * functions or from \ref UsbK_GetOverlappedResult. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_IsoReadPipe ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID, + _out PUCHAR Buffer, + _in UINT BufferLength, + _in LPOVERLAPPED Overlapped, + _refopt PKISO_CONTEXT IsoContext); + +//! Writes to an isochronous pipe. + /*! + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[in] PipeID + * An 8-bit value that consists of a 7-bit address and a direction bit. This parameter corresponds to the + * bEndpointAddress field in the endpoint descriptor. + * + * \param[in] Buffer + * A caller-allocated buffer that receives the data that is read. + * + * \param[in] BufferLength + * The maximum number of bytes to write. This number must be less than or equal to the size, in bytes, of + * Buffer. + * + * \param[in] Overlapped + * An optional pointer to an overlapped structure for asynchronous operations. This can be a \ref KOVL_HANDLE + * or a pointer to a standard windows OVERLAPPED structure. If this parameter is specified, + * \c UsbK_IsoWritePipe returns immediately rather than waiting synchronously for the operation to complete + * before returning. An event is signaled when the operation is complete. + * + * \param[in,out] IsoContext + * Pointer to an isochronous transfer context created with \ref IsoK_Init. See remarks below. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_IsoWritePipe ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID, + _in PUCHAR Buffer, + _in UINT BufferLength, + _in LPOVERLAPPED Overlapped, + _refopt PKISO_CONTEXT IsoContext); + +//! Retrieves the current USB frame number. + /*! + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[out] FrameNumber + * A pointer to a location that receives the current 32-bit frame number on the USB bus (from the host + * controller driver). + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_GetCurrentFrameNumber ( + _in KUSB_HANDLE InterfaceHandle, + _out PUINT FrameNumber); + +//! Retrieves the results of an overlapped operation on the specified libusbK handle. + /*! + * + * \param[in] InterfaceHandle + * An initialized usb handle, see \ref UsbK_Init. + * + * \param[in] Overlapped + * A pointer to a standard windows OVERLAPPED structure that was specified when the overlapped operation was + * started. + * + * \param[out] lpNumberOfBytesTransferred + * A pointer to a variable that receives the number of bytes that were actually transferred by a read or + * write operation. + * + * \param[in] bWait + * If this parameter is TRUE, the function does not return until the operation has been completed. If this + * parameter is FALSE and the operation is still pending, the function returns FALSE and the GetLastError + * function returns ERROR_IO_INCOMPLETE. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * This function is like the Win32 API routine, GetOverlappedResult, with one difference; instead of passing + * a file handle that is returned from CreateFile, the caller passes an interface handle that is returned + * from \ref UsbK_Initialize, \ref UsbK_Init, or \ref UsbK_GetAssociatedInterface. The caller can use either + * API routine, if the appropriate handle is passed. The \ref UsbK_GetOverlappedResult function extracts the + * file handle from the interface handle and then calls GetOverlappedResult. \n + * + * The results that are reported by the \ref UsbK_GetOverlappedResult function are those from the specified + * handle's last overlapped operation to which the specified standard windows OVERLAPPED structure was + * provided, and for which the operation's results were pending. A pending operation is indicated when the + * function that started the operation returns FALSE, and the GetLastError routine returns ERROR_IO_PENDING. + * When an I/O operation is pending, the function that started the operation resets the hEvent member of the + * standard windows OVERLAPPED structure to the nonsignaled state. Then when the pending operation has been + * completed, the system sets the event object to the signaled state. \n + * + * The caller can specify that an event object is manually reset in the standard windows OVERLAPPED + * structure. If an automatic reset event object is used, the event handle must not be specified in any other + * wait operation in the interval between starting the overlapped operation and the call to + * \ref UsbK_GetOverlappedResult. For example, the event object is sometimes specified in one of the wait + * routines to wait for the operation to be completed. When the wait routine returns, the system sets an + * auto-reset event's state to nonsignaled, and a successive call to \ref UsbK_GetOverlappedResult with the + * bWait parameter set to TRUE causes the function to be blocked indefinitely. + * + * If the bWait parameter is TRUE, \ref UsbK_GetOverlappedResult determines whether the pending operation has + * been completed by waiting for the event object to be in the signaled state. + * + * If the hEvent member of the standard windows OVERLAPPED structure is NULL, the system uses the state of + * the file handle to signal when the operation has been completed. Do not use file handles for this purpose. + * It is better to use an event object because of the confusion that can occur when multiple concurrent + * overlapped operations are performed on the same file. In this situation, you cannot know which operation + * caused the state of the object to be signaled. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_GetOverlappedResult ( + _in KUSB_HANDLE InterfaceHandle, + _in LPOVERLAPPED Overlapped, + _out PUINT lpNumberOfBytesTransferred, + _in BOOL bWait); + +//! Gets a USB device (driver specific) property from usb handle. + /*! + * + * \param[in] InterfaceHandle + * USB handle of the property to retrieve. + * + * \param[in] PropertyType + * The propety type to retrieve. + * + * \param[in,out] PropertySize + * Size in bytes of \c Value. + * + * \param[out] Value + * On success, receives the proprty data. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP BOOL KUSB_API UsbK_GetProperty ( + _in KUSB_HANDLE InterfaceHandle, + _in KUSB_PROPERTY PropertyType, + _ref PUINT PropertySize, + _out PVOID Value); + + /*! @} */ + + +#endif + +#ifndef _LIBUSBK_LSTK_FUNCTIONS + /*! \addtogroup lstk + *@{ + */ + +//! Initializes a new usb device list containing all supported devices. + /*! + * + * \param[out] DeviceList + * Pointer reference that will receive a populated device list. + * + * \param[in] Flags + * Search, filter, and listing options. see \c KLST_FLAG + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * \c LstK_Init populates \c DeviceList with connected usb devices that can be used by libusbK. + * + * \note if \ref LstK_Init returns TRUE, the device list must be freed with \ref LstK_Free when it is no + * longer needed. + * + */ + KUSB_EXP BOOL KUSB_API LstK_Init( + _out KLST_HANDLE* DeviceList, + _in KLST_FLAG Flags); + +//! Initializes a new usb device list containing only devices matching a specific class GUID. + /*! + * + * \param[out] DeviceList + * Pointer reference that will receive a populated device list. + * + * \param[in] Flags + * Search, filter, and listing options. see \c KLST_FLAG + * + * \param[in] PatternMatch + * Pattern Search filter. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * \c LstK_InitEx populates \c DeviceList with usb devices that can be used by libusbK. Only device + * matching the \ref KLST_PATTERN_MATCH string are included in the list. + * + * \note + * This function significantly improves performance when used with a device interface guid pattern patch. + * + * \note if \ref LstK_InitEx returns TRUE, the device list must be freed with \ref LstK_Free when it it's no + * longer needed. + * + */ + KUSB_EXP BOOL KUSB_API LstK_InitEx( + _out KLST_HANDLE* DeviceList, + _in KLST_FLAG Flags, + _in PKLST_PATTERN_MATCH PatternMatch); + + //! Frees a usb device list. + /*! + * + * \note if \ref LstK_Init returns TRUE, the device list must be freed with \ref LstK_Free when it is no + * longer needed. + * + * \param[in] DeviceList + * The \c DeviceList to free. + * + * \returns NONE + * + * Frees all resources that were allocated to \c DeviceList by \ref LstK_Init. + * + */ + KUSB_EXP BOOL KUSB_API LstK_Free( + _in KLST_HANDLE DeviceList); + +//! Enumerates \ref KLST_DEVINFO elements of a \ref KLST_HANDLE. + /*! + * + * \param[in] DeviceList + * The \c DeviceList to enumerate. + * + * \param[in] EnumDevListCB + * Function to call for each iteration. + * + * \param[in] Context + * Optional user context pointer. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * Calls \c EnumDevListCB for each element in the device list or until \c EnumDevListCB returns FALSE. + * + */ + KUSB_EXP BOOL KUSB_API LstK_Enumerate( + _in KLST_HANDLE DeviceList, + _in KLST_ENUM_DEVINFO_CB* EnumDevListCB, + _inopt PVOID Context); + +//! Gets the \ref KLST_DEVINFO element for the current position. + /*! + * + * \param[in] DeviceList + * The \c DeviceList to retrieve a current \ref KLST_DEVINFO for. + * + * \param[out] DeviceInfo + * The device information. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * After a \c DeviceList is created or after the \ref LstK_MoveReset method is called, the \c LstK_MoveNext + * method must be called to advance the device list enumerator to the first element of the \c DeviceList + * before calling \c LstK_Current otherwise, \c DeviceInfo is undefined. + * + * \c LstK_Current returns \c FALSE and sets last error to \c ERROR_NO_MORE_ITEMS if the last call to + * \c LstK_MoveNext returned \c FALSE, which indicates the end of the \c DeviceList. + * + * \c LstK_Current does not move the position of the device list enumerator, and consecutive calls to + * \c LstK_Current return the same object until either \c LstK_MoveNext or \ref LstK_MoveReset is called. + * + */ + KUSB_EXP BOOL KUSB_API LstK_Current( + _in KLST_HANDLE DeviceList, + _out KLST_DEVINFO_HANDLE* DeviceInfo); + +//! Advances the device list current \ref KLST_DEVINFO position. + /*! + * \param[in] DeviceList + * A usb device list returned by \ref LstK_Init + * + * \param[out] DeviceInfo + * On success, contains a pointer to the device information for the current enumerators position. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * After a \c DeviceList is created or after \ref LstK_MoveReset is called, an enumerator is positioned + * before the first element of the \c DeviceList and the \b first call to \c LstK_MoveNext moves the + * enumerator over the first element of the \c DeviceList. + * + * If \c LstK_MoveNext passes the end of the \c DeviceList, the enumerator is positioned after the last + * element in the \c DeviceList and \c LstK_MoveNext returns \c FALSE. When the enumerator is at this + * position, a subsequent call to \c LstK_MoveNext will reset the enumerator and it continues from the + * beginning. + * + */ + KUSB_EXP BOOL KUSB_API LstK_MoveNext( + _in KLST_HANDLE DeviceList, + _outopt KLST_DEVINFO_HANDLE* DeviceInfo); + +//! Sets the device list to its initial position, which is before the first element in the list. + /*! + * + * \param[in] DeviceList + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP VOID KUSB_API LstK_MoveReset( + _in KLST_HANDLE DeviceList); + +//! Find a device by vendor and product id + /*! + * + * \param[in] DeviceList + * The \c DeviceList to retrieve a current \ref KLST_DEVINFO for. + * + * \param[in] Vid + * ID is used in conjunction with the \c Pid to uniquely identify USB devices, providing traceability to the + * OEM. + * + * \param[in] Pid + * ID is used in conjunction with the \c Pid to uniquely identify USB devices, providing traceability to the + * OEM. + * + * \param[out] DeviceInfo + * On success, the device information pointer, otherwise NULL. + * + * \returns + * - TRUE if the device was found + * - FALSE if the device was \b not found or an error occurred. + * - Sets last error to \c ERROR_NO_MORE_ITEMS if the device was \b not found. + * + * Searches all elements in \c DeviceList for usb device matching the specified. + * + */ + KUSB_EXP BOOL KUSB_API LstK_FindByVidPid( + _in KLST_HANDLE DeviceList, + _in INT Vid, + _in INT Pid, + _out KLST_DEVINFO_HANDLE* DeviceInfo); + +//! Counts the number of device info elements in a device list. + /*! + * + * \param[in] DeviceList + * The deice list to count. + * + * \param[in,out] Count + * On success, receives the number of \ref KLST_DEVINFO elements in the list. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP BOOL KUSB_API LstK_Count( + _in KLST_HANDLE DeviceList, + _ref PUINT Count); + + + /**@}*/ + +#endif + +#ifndef _LIBUSBK_HOTK_FUNCTIONS + /*! \addtogroup hotk + * @{ + */ + +//! Creates a new hot-plug handle for USB device arrival/removal event monitoring. + /*! + * + * \param[out] Handle + * Reference to a handle pointer that will receive the initialized hot-plug handle. + * + * \param[in,out] InitParams + * Hot plug handle initialization structure. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP BOOL KUSB_API HotK_Init( + _out KHOT_HANDLE* Handle, + _ref PKHOT_PARAMS InitParams); + +//! Frees the specified hot-plug handle. + /*! + * + * \param[in] Handle + * hot-plug handle pointer to free. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP BOOL KUSB_API HotK_Free( + _in KHOT_HANDLE Handle); + + //! Frees all hot-plug handles initialized with \ref HotK_Init. + /*! + * + */ + KUSB_EXP VOID KUSB_API HotK_FreeAll(VOID); + + /**@}*/ + +#endif + +#ifndef _LIBUSBK_OVLK_FUNCTIONS + /*! \addtogroup ovlk + * @{ + */ + +//! Gets a preallocated \c OverlappedK structure from the specified/default pool. + /*! + * + * \param[out] OverlappedK + * On Success, receives the overlapped handle. + * + * \param[in] PoolHandle + * The overlapped pool used to retrieve the next available \c OverlappedK. + * + * \returns On success, the next unused overlappedK available in the pool. Otherwise NULL. Use + * \c GetLastError() to get extended error information. + * + * After calling \ref OvlK_Acquire or \ref OvlK_ReUse the \c OverlappedK is ready to be used in an I/O + * operation. See one of the \c UsbK core transfer functions such as \ref UsbK_ReadPipe or + * \ref UsbK_WritePipe for more information. + * + * If the pools internal refurbished list (a re-usable list of \c OverlappedK structures) is not empty, the + * \ref OvlK_Acquire function will choose an overlapped from the refurbished list. + * + */ + KUSB_EXP BOOL KUSB_API OvlK_Acquire( + _out KOVL_HANDLE* OverlappedK, + _in KOVL_POOL_HANDLE PoolHandle); + +//! Returns an \c OverlappedK structure to it's pool. + /*! + * + * \param[in] OverlappedK + * The overlappedK to release. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * When an overlapped is returned to pool, it resources are \b not freed. Instead, it is added to an internal + * refurbished list (a re-usable list of \c OverlappedK structures). + * + * \warning This function must not be called when the OverlappedK is in-use. If unsure, consider using + * \ref OvlK_WaitAndRelease instead. + * + */ + KUSB_EXP BOOL KUSB_API OvlK_Release( + _in KOVL_HANDLE OverlappedK); + + +//! Creates a new overlapped pool. + /*! + * + * \param[out] PoolHandle + * On success, receives the new pool handle. + * + * \param[in] UsbHandle + * USB handle to associate with the pool. + * + * \param[in] MaxOverlappedCount + * Maximum number of overkappedK handles allowed in the pool. + * + * \param[in] Flags + * Pool flags. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP BOOL KUSB_API OvlK_Init ( + _out KOVL_POOL_HANDLE* PoolHandle, + _in KUSB_HANDLE UsbHandle, + _in INT MaxOverlappedCount, + _inopt KOVL_POOL_FLAG Flags); + +//! Destroys the specified pool and all resources it created. + /*! + * + * \param[in] PoolHandle + * The overlapped pool to destroy. Once destroyed, the pool and all resources which belong to it can no + * longer be used. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * \warning A pool should not be destroyed until all OverlappedKs acquired from it are no longer in-use. For + * more information see \ref OvlK_WaitAndRelease or \ref OvlK_Release. + * + */ + KUSB_EXP BOOL KUSB_API OvlK_Free( + _in KOVL_POOL_HANDLE PoolHandle); + + +//! Returns the internal event handle used to signal IO operations. + /*! + * + * \param[in] OverlappedK + * The overlappedK used to return the internal event handle. + * + * \returns On success, The manual reset event handle being used by this overlappedK. Otherwise NULL. Use + * \c GetLastError() to get extended error information. + * + * \ref OvlK_GetEventHandle is useful for applications that must to their own event handling. It exposes the + * windows \c OVERLAPPED \c hEvent used for i/o completion signaling. This event handle can be used by the + * standard event wait functions; /c WaitForMultipleObjectsEx for example. + * + * \warning Use \ref OvlK_GetEventHandle with caution. Event handles returned by this function should never + * be used unless the OverlappedK has been \b acquired by the application. + * + */ + KUSB_EXP HANDLE KUSB_API OvlK_GetEventHandle( + _in KOVL_HANDLE OverlappedK); + +//! Waits for overlapped I/O completion, and performs actions specified in \c WaitFlags. + /*! + * + * \param[in] OverlappedK + * The overlappedK to wait on. + * + * \param[in] TimeoutMS + * Number of milliseconds to wait for overlapped completion. + * + * \param[in] WaitFlags + * See /ref KOVL_WAIT_FLAG + * + * \param[out] TransferredLength + * On success, returns the number of bytes transferred by this overlappedK. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. See + * the remarks section below for details on relevant error codes. + * + * \c OvlK_Wait waits the time interval specified in \c TimeoutMS for the overlapped I/O operation to + * complete. Different actions can then taken depending on the flags specified in \c WaitFlags. + * + * \WINERRORTABLE + * + * \WINERROR{ERROR_CANCELLED,1223} + * - The I/O was cancelled by the user. The transfer complete event was not signalled within the alotted + * transfer timeout time and the OvlK_Wait function issued a CancelIoEx/CancelIo request because the + * \ref KOVL_WAIT_FLAG_CANCEL_ON_TIMEOUT flag bit was set. + * \ENDWINERROR + * + * \WINERROR{ERROR_OPERATION_ABORTED,995} + * - The transfer complete event is signalled but the overlapped result was allready cancelled. The + * overlapped I/O may have bee cancelled for one of the following reasons: + * - Driver cancelled because of pipe timeout policy expiration. + * - The device was disconnected. + * - A \ref UsbK_AbortPipe request was issued. + * \ENDWINERROR + * + * \ENDWINERRORTABLE + * + */ + KUSB_EXP BOOL KUSB_API OvlK_Wait( + _in KOVL_HANDLE OverlappedK, + _inopt INT TimeoutMS, + _inopt KOVL_WAIT_FLAG WaitFlags, + _out PUINT TransferredLength); + +//! Waits for overlapped I/O completion on the oldest acquired OverlappedK handle and performs actions specified in \c WaitFlags. + /*! + * + * \param[in] PoolHandle + * The pool handle containing one or more acuired OverlappedKs. + * + * \param[out] OverlappedK + * On success, set to the oldest overlappedK in the acquired list. + * + * \param[in] TimeoutMS + * See /ref OvlK_Wait + * + * \param[in] WaitFlags + * See /ref KOVL_WAIT_FLAG + * + * \param[out] TransferredLength + * See /ref OvlK_Wait + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. See + * See /ref OvlK_Wait + */ + KUSB_EXP BOOL KUSB_API OvlK_WaitOldest( + _in KOVL_POOL_HANDLE PoolHandle, + _outopt KOVL_HANDLE* OverlappedK, + _inopt INT TimeoutMS, + _inopt KOVL_WAIT_FLAG WaitFlags, + _out PUINT TransferredLength); + +//! Waits for overlapped I/O completion, cancels on a timeout error. + /*! + * + * \param[in] OverlappedK + * The overlappedK to wait on. + * + * \param[in] TimeoutMS + * Number of milliseconds to wait for overlapped completion. + * + * \param[out] TransferredLength + * On success, returns the number of bytes transferred by this overlappedK. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. See + * \ref OvlK_Wait for details on relevant win32 error codes. + * + * \note This convenience function calls \ref OvlK_Wait with \ref KOVL_WAIT_FLAG_CANCEL_ON_TIMEOUT. + * + * \c OvlK_WaitOrCancel waits the the time interval specified by \c TimeoutMS for an overlapped result. If + * the \c TimeoutMS interval expires the I/O operation is cancelled. The \c OverlappedK is not released back + * to its pool. + * + */ + KUSB_EXP BOOL KUSB_API OvlK_WaitOrCancel( + _in KOVL_HANDLE OverlappedK, + _inopt INT TimeoutMS, + _out PUINT TransferredLength); + +//! Waits for overlapped I/O completion, cancels on a timeout error and always releases the OvlK handle back to its pool. + /*! + * + * \param[in] OverlappedK + * The overlappedK to wait on. + * + * \param[in] TimeoutMS + * Number of milliseconds to wait for overlapped completion. + * + * \param[out] TransferredLength + * On success, returns the number of bytes transferred by this overlappedK. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. See + * \ref OvlK_Wait for details on relevant win32 error codes. + * + * \note This convenience function calls \ref OvlK_Wait with \ref KOVL_WAIT_FLAG_RELEASE_ALWAYS. + * + * \c OvlK_WaitAndRelease waits the the time interval specified by \c TimeoutMS for an overlapped result. + * When \c OvlK_WaitOrCancel returns, the I/O operation has either been completed or cancelled. The + * \c OverlappedK is always released back to its pool where it can be re-acquired with \ref OvlK_Acquire. + * + */ + KUSB_EXP BOOL KUSB_API OvlK_WaitAndRelease( + _in KOVL_HANDLE OverlappedK, + _inopt INT TimeoutMS, + _out PUINT TransferredLength); + +//! Checks for i/o completion; returns immediately. (polling) + /*! + * + * \param[in] OverlappedK + * The overlappedK to check for completion. + * + * \warning \ref OvlK_IsComplete does \b no validation on the OverlappedK. It's purpose is to check the event + * signal state as fast as possible. + * + * \returns TRUE if the \c OverlappedK has completed, otherwise FALSE. + * + * \c OvlK_IsComplete quickly checks if the \c OverlappedK i/o operation has completed. + */ + KUSB_EXP BOOL KUSB_API OvlK_IsComplete( + _in KOVL_HANDLE OverlappedK); + +//! Initializes an overlappedK for re-use. The overlappedK is not return to its pool. + /*! + * + * \param[in] OverlappedK + * The overlappedK to re-use. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * This function performs the following actions: + * - Resets the overlapped event to non-signaled via ResetEvent(). + * - Clears the internal overlapped information. + * - Clears the 'Internal' and 'InternalHigh' members of the windows overlapped structure. + * + * \note + * Re-using OverlappedKs is the most efficient means of OverlappedK management. When an OverlappedK is + * "re-used" it is not returned to the pool. Instead, the application retains ownership for use in another + * i/o operation. + * + */ + KUSB_EXP BOOL KUSB_API OvlK_ReUse( + _in KOVL_HANDLE OverlappedK); + + /**@}*/ + +#endif + +#ifndef _LIBUSBK_STMK_FUNCTIONS + + /*! \addtogroup stmk + * @{ + */ + +//! Initializes a new uni-directional pipe stream. + /*! + * + * \param[out] StreamHandle + * On success, receives the new stream handle. + * + * \param[in] UsbHandle + * Usb handle to associate with this stream. + * + * \param[in] PipeID + * Endpoint address of USB pipe to associate with this stream. + * + * \param[in] MaxTransferSize + * Maximum number of bytes transferred at once. Larger transfers committed with the stream read/write + * functions are automatically split into multiple smaller chunks. + * + * \param[in] MaxPendingTransfers + * Maximum number of transfers allowed to be outstanding and the total number of transfer contexts that are + * allocated to the stream. + * + * \param[in] MaxPendingIO + * Maximum number of I/O requests the internal stream thread is allowed to have submit at any given time. + * (Pending I/O) + * + * \param[in] Callbacks + * Optional user callback functions. If specified, these callback functions will be executed in real time + * (from within the context of the internal stream thread) as transfers go through the various states. + * + * \param[in] Flags + * Additional stream flags. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * \par + * When a stream is initialized, it validates input parameters and allocates the required memory for the + * transfer context array and transfer lists from a private memory heap. The stream is not started and no I/O + * requests are sent to the device until \ref StmK_Start is executed. + * + */ + KUSB_EXP BOOL KUSB_API StmK_Init( + _out KSTM_HANDLE* StreamHandle, + _in KUSB_HANDLE UsbHandle, + _in UCHAR PipeID, + _in INT MaxTransferSize, + _in INT MaxPendingTransfers, + _in INT MaxPendingIO, + _inopt PKSTM_CALLBACK Callbacks, + _inopt KSTM_FLAG Flags); + +//! Frees resources allocated by a stream handle. + /*! + * + * \param[in] StreamHandle + * The stream handle to free. + * + * \returns TRUE. + * + * If the stream is currently started it is automatically stopped before its resources are freed. + * + */ + KUSB_EXP BOOL KUSB_API StmK_Free( + _in KSTM_HANDLE StreamHandle); + +//! Starts the internal stream thread. + /*! + * + * \param[in] StreamHandle + * The stream to start. A stream handle is created with \ref StmK_Init. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * \par + * When a stream is started, an internal thread is created for managing pipe I/O operations. If a + * \ref KSTM_CALLBACK::Started callback function is assgined, it is executed \b for each transfer context. + * (\b MaxPendingTransfers) See \ref StmK_Init. + * + */ + KUSB_EXP BOOL KUSB_API StmK_Start( + _in KSTM_HANDLE StreamHandle); + +//! Stops the internal stream thread. + /*! + * + * \param[in] StreamHandle + * The stream to stop. + * + * \param[in] TimeoutCancelMS + * Number of milliseconds the internal stream thread should wait for pending I/O to complete before + * cancelling all pending requests. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + */ + KUSB_EXP BOOL KUSB_API StmK_Stop( + _in KSTM_HANDLE StreamHandle, + _in INT TimeoutCancelMS); + +//! Reads data from the stream buffer. + /*! + * + * \param[in] StreamHandle + * The stream to read. + * + * \param[out] Buffer + * A caller-allocated buffer that receives the data that is read. + * + * \param[in] Offset + * Read start offset of \c Buffer. + * + * \param[in] Length + * Size of \c Buffer. + * + * \param[out] TransferredLength + * On success, receives the actual number of bytes that were copied into \c Buffer. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * - Read Stream Operations: + * -# The internal stream thread will always try and keep reads pending as specified by \b MaxPendingIO in + * \ref StmK_Init. + * -# As the stream submits transfers, it increments the \b PendingIO and \b PendingTransfer counts. As it + * completes transfers, it decrements the \b PendingIO count. As the user processes transfers with + * \ref StmK_Read, it decrements the \b PendingTransfer count and release control of the transfer context + * back to the stream where it is re-used. + * -# When the pending I/O count reaches \c MaxPendingIO, the stream completes the oldest + * \b PendingTransfer and moves it into a FIFO complete where it awaits user processing via the + * \ref StmK_Read function. + * -# If the stream has not exhausted its MaxPendingTransfers count, another read request is submitted + * immediately to satisfy \b MaxPendingIO. + * + */ + KUSB_EXP BOOL KUSB_API StmK_Read( + _in KSTM_HANDLE StreamHandle, + _out PUCHAR Buffer, + _in INT Offset, + _in INT Length, + _out PUINT TransferredLength); + +//! Writes data to the stream buffer. + /*! + * + * \param[in] StreamHandle + * The stream to write. + * + * \param[in] Buffer + * A caller-allocated buffer the data is written from. + * + * \param[in] Offset + * Write start offset of \c Buffer. + * + * \param[in] Length + * Number of bytes to copy into the stream buffer. + * + * \param[out] TransferredLength + * On success, receives the actual number of bytes that were copied into the stream buffer. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * - Write Stream Operations: + * -# The internal stream thread will always try and exhaust all pending transfers submitted by the user + * via \ref StmK_Write. + * -# As the user submits transfers via \ref StmK_Write, the \b PendingTransfer count is inceremented and + * transfers are added to a queued FIFO list where they await processing by the internal stream thread. + * -# While the queued FIFO list is not empty and \b PendingIO count is less than \b MaxPendingIO, The + * \b PendingIO count increments and the request is sent to the device. + * -# When a transfer completes, the internal pending I/O count is decremented and the transfers is moved + * back into the idle list where it can be reused again by subsequent \ref StmK_Write requests. + * + */ + KUSB_EXP BOOL KUSB_API StmK_Write( + _in KSTM_HANDLE StreamHandle, + _in PUCHAR Buffer, + _in INT Offset, + _in INT Length, + _out PUINT TransferredLength); + /**@}*/ + +#endif + +#ifndef _LIBUSBK_ISOK_FUNCTIONS + /*! \addtogroup isok + * @{ + */ + +//! Creates a new isochronous transfer context. + /*! + * + * \param[out] IsoContext + * Receives a new isochronous transfer context. + * + * \param[in] NumberOfPackets + * The number of \ref KISO_PACKET structures allocated to \c IsoContext. Assigned to + * \ref KISO_CONTEXT::NumberOfPackets. The \ref KISO_CONTEXT::NumberOfPackets field is assignable by + * \c IsoK_Init only and must not be changed by the user. + * + * \param[in] StartFrame + * The USB frame number this request must start on (or \b 0 for ASAP) and assigned to + * \ref KISO_CONTEXT::StartFrame. The \ref KISO_CONTEXT::StartFrame may be chamged by the user in subsequent + * request. For more information, see \ref KISO_CONTEXT::StartFrame. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * \c IsoK_Init is performs the following tasks in order: + * -# Allocates the \c IsoContext and the required \ref KISO_PACKET structures. + * -# Zero-initializes all ISO context memory. + * -# Assigns \b NumberOfPackets, \b PipeID, and \b StartFrame to \c IsoContext. + * + */ + KUSB_EXP BOOL KUSB_API IsoK_Init( + _out PKISO_CONTEXT* IsoContext, + _in INT NumberOfPackets, + _inopt INT StartFrame); + +//! Destroys an isochronous transfer context. + /*! + * \param[in] IsoContext + * A pointer to an isochronous transfer context created with \ref IsoK_Init. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + */ + KUSB_EXP BOOL KUSB_API IsoK_Free( + _in PKISO_CONTEXT IsoContext); + +//! Convenience function for setting the offset of all ISO packets of an isochronous transfer context. + /*! + * \param[in] IsoContext + * A pointer to an isochronous transfer context. + * + * \param[in] PacketSize + * The packet size used to calculate and assign the absolute data offset for each \ref KISO_PACKET in + * \c IsoContext. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * \c IsoK_SetPackets updates all \ref KISO_PACKET::Offset fields in a \ref KISO_CONTEXT so all offset are + * \c PacketSize apart. For example: + * - The offset of the first (0-index) packet is 0. + * - The offset of the second (1-index) packet is PacketSize. + * - The offset of the third (2-index) packet is PacketSize*2. + * + * \code + * for (packetIndex = 0; packetIndex < IsoContext->NumberOfPackets; packetIndex++) + * IsoContext->IsoPackets[packetIndex].Offset = packetIndex * PacketSize; + * \endcode + * + */ + KUSB_EXP BOOL KUSB_API IsoK_SetPackets( + _in PKISO_CONTEXT IsoContext, + _in INT PacketSize); + +//! Convenience function for setting all fields of a \ref KISO_PACKET. + /*! + * \param[in] IsoContext + * A pointer to an isochronous transfer context. + * + * \param[in] PacketIndex + * The packet index to set. + * + * \param[in] IsoPacket + * Pointer to a user allocated \c KISO_PACKET which is copied into the PKISO_CONTEXT::IsoPackets array at the + * specified index. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + */ + KUSB_EXP BOOL KUSB_API IsoK_SetPacket( + _in PKISO_CONTEXT IsoContext, + _in INT PacketIndex, + _in PKISO_PACKET IsoPacket); + +//! Convenience function for getting all fields of a \ref KISO_PACKET. + /*! + * \param[in] IsoContext + * A pointer to an isochronous transfer context. + * + * \param[in] PacketIndex + * The packet index to get. + * + * \param[out] IsoPacket + * Pointer to a user allocated \c KISO_PACKET which receives a copy of the ISO packet in the + * PKISO_CONTEXT::IsoPackets array at the specified index. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + */ + KUSB_EXP BOOL KUSB_API IsoK_GetPacket( + _in PKISO_CONTEXT IsoContext, + _in INT PacketIndex, + _out PKISO_PACKET IsoPacket); + +//! Convenience function for enumerating ISO packets of an isochronous transfer context. + /*! + * \param[in] IsoContext + * A pointer to an isochronous transfer context. + * + * \param[in] EnumPackets + * Pointer to a user supplied callback function which is executed for all ISO packets in \c IsoContext or + * until the user supplied callback function returns \c FALSE. + * + * \param[in] StartPacketIndex + * The zero-based ISO packet index to begin enumeration at. + * + * \param[in] UserState + * A user defined value which is passed as a parameter to the user supplied callback function. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + */ + KUSB_EXP BOOL KUSB_API IsoK_EnumPackets( + _in PKISO_CONTEXT IsoContext, + _in KISO_ENUM_PACKETS_CB* EnumPackets, + _inopt INT StartPacketIndex, + _inopt PVOID UserState); + +//! Convenience function for re-using an isochronous transfer context in a subsequent request. + /*! + * \param[in,out] IsoContext + * A pointer to an isochronous transfer context. + * + * \returns On success, TRUE. Otherwise FALSE. Use \c GetLastError() to get extended error information. + * + * \c IsoK_ReUse does the following: + * -# Zero-initializes the \b Length and \b Status fields of all \ref KISO_PACKET structures. + * -# Zero-initializes the \b StartFrame and \b ErrorCount of the \ref KISO_CONTEXT. + * + */ + KUSB_EXP BOOL KUSB_API IsoK_ReUse( + _ref PKISO_CONTEXT IsoContext); + + /*! @} */ + +#endif + +#ifdef __cplusplus +} +#endif + +#endif // _LIBUSBK_H__ diff --git a/Old Matlab Interface/includes/lusbk_dynapi.c b/Old Matlab Interface/includes/lusbk_dynapi.c new file mode 100644 index 00000000..3b414327 --- /dev/null +++ b/Old Matlab Interface/includes/lusbk_dynapi.c @@ -0,0 +1,1915 @@ +/*!******************************************************************** +libusbK - Multi-driver USB library. +Copyright (C) 2012 Travis Lee Robinson. All Rights Reserved. +libusb-win32.sourceforge.net + +Development : Travis Lee Robinson (libusbdotnet@gmail.com) +Testing : Xiaofan Chen (xiaofanc@gmail.com) + +At the discretion of the user of this library, this software may be +licensed under the terms of the GNU Public License v3 or a BSD-Style +license as outlined in the following files: +* LICENSE-gpl3.txt +* LICENSE-bsd.txt + +License files are located in a license folder at the root of source and +binary distributions. +********************************************************************!*/ + +#include +#include "libusbk.h" + +#define mLoadLibraryExA LoadLibraryExA +#define mFreeLibrary FreeLibrary + +HMODULE mLibusbK_ModuleHandle = NULL; + +VOID LibusbK_DynApi_Free(VOID); +INT LibusbK_DynApi_Init(_inopt LPCSTR DllFullPathName); + +// Function typedefs: + +typedef VOID KUSB_API LibK_GetVersion_T(_out PKLIB_VERSION Version); + +typedef KLIB_USER_CONTEXT KUSB_API LibK_GetContext_T( + _in KLIB_HANDLE Handle, + _in KLIB_HANDLE_TYPE HandleType); + +typedef BOOL KUSB_API LibK_SetContext_T( + _in KLIB_HANDLE Handle, + _in KLIB_HANDLE_TYPE HandleType, + _in KLIB_USER_CONTEXT ContextValue); + +typedef BOOL KUSB_API LibK_SetCleanupCallback_T( + _in KLIB_HANDLE Handle, + _in KLIB_HANDLE_TYPE HandleType, + _in KLIB_HANDLE_CLEANUP_CB* CleanupCB); + +typedef BOOL KUSB_API LibK_LoadDriverAPI_T( + _out PKUSB_DRIVER_API DriverAPI, + _in INT DriverID); + +typedef BOOL KUSB_API LibK_CopyDriverAPI_T( + _out PKUSB_DRIVER_API DriverAPI, + _in KUSB_HANDLE UsbHandle); + +typedef BOOL KUSB_API LibK_GetProcAddress_T( + _out KPROC* ProcAddress, + _in INT DriverID, + _in INT FunctionID); + +typedef BOOL KUSB_API LibK_SetDefaultContext_T( + _in KLIB_HANDLE_TYPE HandleType, + _in KLIB_USER_CONTEXT ContextValue); + +typedef KLIB_USER_CONTEXT KUSB_API LibK_GetDefaultContext_T( + _in KLIB_HANDLE_TYPE HandleType); + +typedef BOOL KUSB_API LibK_Context_Init_T( + _inopt HANDLE Heap, + _in PVOID Reserved); + +typedef VOID KUSB_API LibK_Context_Free_T(VOID); + +typedef BOOL KUSB_API UsbK_Init_T ( + _out KUSB_HANDLE* InterfaceHandle, + _in KLST_DEVINFO_HANDLE DevInfo); + +typedef BOOL KUSB_API UsbK_Free_T ( + _in KUSB_HANDLE InterfaceHandle); + +typedef BOOL KUSB_API UsbK_ClaimInterface_T ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR NumberOrIndex, + _in BOOL IsIndex); + +typedef BOOL KUSB_API UsbK_ReleaseInterface_T ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR NumberOrIndex, + _in BOOL IsIndex); + +typedef BOOL KUSB_API UsbK_SetAltInterface_T ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR NumberOrIndex, + _in BOOL IsIndex, + _in UCHAR AltSettingNumber); + +typedef BOOL KUSB_API UsbK_GetAltInterface_T ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR NumberOrIndex, + _in BOOL IsIndex, + _out PUCHAR AltSettingNumber); + +typedef BOOL KUSB_API UsbK_GetDescriptor_T ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR DescriptorType, + _in UCHAR Index, + _in USHORT LanguageID, + _out PUCHAR Buffer, + _in UINT BufferLength, + _outopt PUINT LengthTransferred); + +typedef BOOL KUSB_API UsbK_ControlTransfer_T ( + _in KUSB_HANDLE InterfaceHandle, + _in WINUSB_SETUP_PACKET SetupPacket, + _refopt PUCHAR Buffer, + _in UINT BufferLength, + _outopt PUINT LengthTransferred, + _inopt LPOVERLAPPED Overlapped); + +typedef BOOL KUSB_API UsbK_SetPowerPolicy_T ( + _in KUSB_HANDLE InterfaceHandle, + _in UINT PolicyType, + _in UINT ValueLength, + _in PVOID Value); + +typedef BOOL KUSB_API UsbK_GetPowerPolicy_T ( + _in KUSB_HANDLE InterfaceHandle, + _in UINT PolicyType, + _ref PUINT ValueLength, + _out PVOID Value); + +typedef BOOL KUSB_API UsbK_SetConfiguration_T ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR ConfigurationNumber); + +typedef BOOL KUSB_API UsbK_GetConfiguration_T ( + _in KUSB_HANDLE InterfaceHandle, + _out PUCHAR ConfigurationNumber); + +typedef BOOL KUSB_API UsbK_ResetDevice_T ( + _in KUSB_HANDLE InterfaceHandle); + +typedef BOOL KUSB_API UsbK_Initialize_T ( + _in HANDLE DeviceHandle, + _out KUSB_HANDLE* InterfaceHandle); + +typedef BOOL KUSB_API UsbK_SelectInterface_T ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR NumberOrIndex, + _in BOOL IsIndex); + +typedef BOOL KUSB_API UsbK_GetAssociatedInterface_T ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR AssociatedInterfaceIndex, + _out KUSB_HANDLE* AssociatedInterfaceHandle); + +typedef BOOL KUSB_API UsbK_Clone_T ( + _in KUSB_HANDLE InterfaceHandle, + _out KUSB_HANDLE* DstInterfaceHandle); + +typedef BOOL KUSB_API UsbK_QueryInterfaceSettings_T ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR AltSettingIndex, + _out PUSB_INTERFACE_DESCRIPTOR UsbAltInterfaceDescriptor); + +typedef BOOL KUSB_API UsbK_QueryDeviceInformation_T ( + _in KUSB_HANDLE InterfaceHandle, + _in UINT InformationType, + _ref PUINT BufferLength, + _ref PVOID Buffer); + +typedef BOOL KUSB_API UsbK_SetCurrentAlternateSetting_T ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR AltSettingNumber); + +typedef BOOL KUSB_API UsbK_GetCurrentAlternateSetting_T ( + _in KUSB_HANDLE InterfaceHandle, + _out PUCHAR AltSettingNumber); + +typedef BOOL KUSB_API UsbK_QueryPipe_T ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR AltSettingNumber, + _in UCHAR PipeIndex, + _out PWINUSB_PIPE_INFORMATION PipeInformation); + +typedef BOOL KUSB_API UsbK_SetPipePolicy_T ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID, + _in UINT PolicyType, + _in UINT ValueLength, + _in PVOID Value); + +typedef BOOL KUSB_API UsbK_GetPipePolicy_T ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID, + _in UINT PolicyType, + _ref PUINT ValueLength, + _out PVOID Value); + +typedef BOOL KUSB_API UsbK_ReadPipe_T ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID, + _out PUCHAR Buffer, + _in UINT BufferLength, + _outopt PUINT LengthTransferred, + _inopt LPOVERLAPPED Overlapped); + +typedef BOOL KUSB_API UsbK_WritePipe_T ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID, + _in PUCHAR Buffer, + _in UINT BufferLength, + _outopt PUINT LengthTransferred, + _inopt LPOVERLAPPED Overlapped); + +typedef BOOL KUSB_API UsbK_ResetPipe_T ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID); + +typedef BOOL KUSB_API UsbK_AbortPipe_T ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID); + +typedef BOOL KUSB_API UsbK_FlushPipe_T ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID); + +typedef BOOL KUSB_API UsbK_IsoReadPipe_T ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID, + _out PUCHAR Buffer, + _in UINT BufferLength, + _in LPOVERLAPPED Overlapped, + _refopt PKISO_CONTEXT IsoContext); + +typedef BOOL KUSB_API UsbK_IsoWritePipe_T ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID, + _in PUCHAR Buffer, + _in UINT BufferLength, + _in LPOVERLAPPED Overlapped, + _refopt PKISO_CONTEXT IsoContext); + +typedef BOOL KUSB_API UsbK_GetCurrentFrameNumber_T ( + _in KUSB_HANDLE InterfaceHandle, + _out PUINT FrameNumber); + +typedef BOOL KUSB_API UsbK_GetOverlappedResult_T ( + _in KUSB_HANDLE InterfaceHandle, + _in LPOVERLAPPED Overlapped, + _out PUINT lpNumberOfBytesTransferred, + _in BOOL bWait); + +typedef BOOL KUSB_API UsbK_GetProperty_T ( + _in KUSB_HANDLE InterfaceHandle, + _in KUSB_PROPERTY PropertyType, + _ref PUINT PropertySize, + _out PVOID Value); + +typedef BOOL KUSB_API LstK_Init_T( + _out KLST_HANDLE* DeviceList, + _in KLST_FLAG Flags); + +typedef BOOL KUSB_API LstK_InitEx_T( + _out KLST_HANDLE* DeviceList, + _in KLST_FLAG Flags, + _in PKLST_PATTERN_MATCH PatternMatch); + +typedef BOOL KUSB_API LstK_Free_T( + _in KLST_HANDLE DeviceList); + +typedef BOOL KUSB_API LstK_Enumerate_T( + _in KLST_HANDLE DeviceList, + _in KLST_ENUM_DEVINFO_CB* EnumDevListCB, + _inopt PVOID Context); + +typedef BOOL KUSB_API LstK_Current_T( + _in KLST_HANDLE DeviceList, + _out KLST_DEVINFO_HANDLE* DeviceInfo); + +typedef BOOL KUSB_API LstK_MoveNext_T( + _in KLST_HANDLE DeviceList, + _outopt KLST_DEVINFO_HANDLE* DeviceInfo); + +typedef VOID KUSB_API LstK_MoveReset_T( + _in KLST_HANDLE DeviceList); + +typedef BOOL KUSB_API LstK_FindByVidPid_T( + _in KLST_HANDLE DeviceList, + _in INT Vid, + _in INT Pid, + _out KLST_DEVINFO_HANDLE* DeviceInfo); + +typedef BOOL KUSB_API LstK_Count_T( + _in KLST_HANDLE DeviceList, + _ref PUINT Count); + +typedef BOOL KUSB_API HotK_Init_T( + _out KHOT_HANDLE* Handle, + _ref PKHOT_PARAMS InitParams); + +typedef BOOL KUSB_API HotK_Free_T( + _in KHOT_HANDLE Handle); + +typedef VOID KUSB_API HotK_FreeAll_T(VOID); + +typedef BOOL KUSB_API OvlK_Acquire_T( + _out KOVL_HANDLE* OverlappedK, + _in KOVL_POOL_HANDLE PoolHandle); + +typedef BOOL KUSB_API OvlK_Release_T( + _in KOVL_HANDLE OverlappedK); + +typedef BOOL KUSB_API OvlK_Init_T ( + _out KOVL_POOL_HANDLE* PoolHandle, + _in KUSB_HANDLE UsbHandle, + _in INT MaxOverlappedCount, + _inopt KOVL_POOL_FLAG Flags); + +typedef BOOL KUSB_API OvlK_Free_T( + _in KOVL_POOL_HANDLE PoolHandle); + +typedef HANDLE KUSB_API OvlK_GetEventHandle_T( + _in KOVL_HANDLE OverlappedK); + +typedef BOOL KUSB_API OvlK_Wait_T( + _in KOVL_HANDLE OverlappedK, + _inopt INT TimeoutMS, + _inopt KOVL_WAIT_FLAG WaitFlags, + _out PUINT TransferredLength); + +typedef BOOL KUSB_API OvlK_WaitOldest_T( + _in KOVL_POOL_HANDLE PoolHandle, + _outopt KOVL_HANDLE* OverlappedK, + _inopt INT TimeoutMS, + _inopt KOVL_WAIT_FLAG WaitFlags, + _out PUINT TransferredLength); + +typedef BOOL KUSB_API OvlK_WaitOrCancel_T( + _in KOVL_HANDLE OverlappedK, + _inopt INT TimeoutMS, + _out PUINT TransferredLength); + +typedef BOOL KUSB_API OvlK_WaitAndRelease_T( + _in KOVL_HANDLE OverlappedK, + _inopt INT TimeoutMS, + _out PUINT TransferredLength); + +typedef BOOL KUSB_API OvlK_IsComplete_T( + _in KOVL_HANDLE OverlappedK); + +typedef BOOL KUSB_API OvlK_ReUse_T( + _in KOVL_HANDLE OverlappedK); + +typedef BOOL KUSB_API StmK_Init_T( + _out KSTM_HANDLE* StreamHandle, + _in KUSB_HANDLE UsbHandle, + _in UCHAR PipeID, + _in INT MaxTransferSize, + _in INT MaxPendingTransfers, + _in INT MaxPendingIO, + _inopt PKSTM_CALLBACK Callbacks, + _inopt KSTM_FLAG Flags); + +typedef BOOL KUSB_API StmK_Free_T( + _in KSTM_HANDLE StreamHandle); + +typedef BOOL KUSB_API StmK_Start_T( + _in KSTM_HANDLE StreamHandle); + +typedef BOOL KUSB_API StmK_Stop_T( + _in KSTM_HANDLE StreamHandle, + _in INT TimeoutCancelMS); + +typedef BOOL KUSB_API StmK_Read_T( + _in KSTM_HANDLE StreamHandle, + _out PUCHAR Buffer, + _in INT Offset, + _in INT Length, + _out PUINT TransferredLength); + +typedef BOOL KUSB_API StmK_Write_T( + _in KSTM_HANDLE StreamHandle, + _in PUCHAR Buffer, + _in INT Offset, + _in INT Length, + _out PUINT TransferredLength); + +typedef BOOL KUSB_API IsoK_Init_T( + _out PKISO_CONTEXT* IsoContext, + _in INT NumberOfPackets, + _inopt INT StartFrame); + +typedef BOOL KUSB_API IsoK_Free_T( + _in PKISO_CONTEXT IsoContext); + +typedef BOOL KUSB_API IsoK_SetPackets_T( + _in PKISO_CONTEXT IsoContext, + _in INT PacketSize); + +typedef BOOL KUSB_API IsoK_SetPacket_T( + _in PKISO_CONTEXT IsoContext, + _in INT PacketIndex, + _in PKISO_PACKET IsoPacket); + +typedef BOOL KUSB_API IsoK_GetPacket_T( + _in PKISO_CONTEXT IsoContext, + _in INT PacketIndex, + _out PKISO_PACKET IsoPacket); + +typedef BOOL KUSB_API IsoK_EnumPackets_T( + _in PKISO_CONTEXT IsoContext, + _in KISO_ENUM_PACKETS_CB* EnumPackets, + _inopt INT StartPacketIndex, + _inopt PVOID UserState); + +typedef BOOL KUSB_API IsoK_ReUse_T( + _ref PKISO_CONTEXT IsoContext); + + + +/////////////////////////////////////////////////////////////////////// + +// Function pointers: + +static LibK_GetVersion_T* pLibK_GetVersion = NULL; + +static LibK_GetContext_T* pLibK_GetContext = NULL; + +static LibK_SetContext_T* pLibK_SetContext = NULL; + +static LibK_SetCleanupCallback_T* pLibK_SetCleanupCallback = NULL; + +static LibK_LoadDriverAPI_T* pLibK_LoadDriverAPI = NULL; + +static LibK_CopyDriverAPI_T* pLibK_CopyDriverAPI = NULL; + +static LibK_GetProcAddress_T* pLibK_GetProcAddress = NULL; + +static LibK_SetDefaultContext_T* pLibK_SetDefaultContext = NULL; + +static LibK_GetDefaultContext_T* pLibK_GetDefaultContext = NULL; + +static LibK_Context_Init_T* pLibK_Context_Init = NULL; + +static LibK_Context_Free_T* pLibK_Context_Free = NULL; + +static UsbK_Init_T* pUsbK_Init = NULL; + +static UsbK_Free_T* pUsbK_Free = NULL; + +static UsbK_ClaimInterface_T* pUsbK_ClaimInterface = NULL; + +static UsbK_ReleaseInterface_T* pUsbK_ReleaseInterface = NULL; + +static UsbK_SetAltInterface_T* pUsbK_SetAltInterface = NULL; + +static UsbK_GetAltInterface_T* pUsbK_GetAltInterface = NULL; + +static UsbK_GetDescriptor_T* pUsbK_GetDescriptor = NULL; + +static UsbK_ControlTransfer_T* pUsbK_ControlTransfer = NULL; + +static UsbK_SetPowerPolicy_T* pUsbK_SetPowerPolicy = NULL; + +static UsbK_GetPowerPolicy_T* pUsbK_GetPowerPolicy = NULL; + +static UsbK_SetConfiguration_T* pUsbK_SetConfiguration = NULL; + +static UsbK_GetConfiguration_T* pUsbK_GetConfiguration = NULL; + +static UsbK_ResetDevice_T* pUsbK_ResetDevice = NULL; + +static UsbK_Initialize_T* pUsbK_Initialize = NULL; + +static UsbK_SelectInterface_T* pUsbK_SelectInterface = NULL; + +static UsbK_GetAssociatedInterface_T* pUsbK_GetAssociatedInterface = NULL; + +static UsbK_Clone_T* pUsbK_Clone = NULL; + +static UsbK_QueryInterfaceSettings_T* pUsbK_QueryInterfaceSettings = NULL; + +static UsbK_QueryDeviceInformation_T* pUsbK_QueryDeviceInformation = NULL; + +static UsbK_SetCurrentAlternateSetting_T* pUsbK_SetCurrentAlternateSetting = NULL; + +static UsbK_GetCurrentAlternateSetting_T* pUsbK_GetCurrentAlternateSetting = NULL; + +static UsbK_QueryPipe_T* pUsbK_QueryPipe = NULL; + +static UsbK_SetPipePolicy_T* pUsbK_SetPipePolicy = NULL; + +static UsbK_GetPipePolicy_T* pUsbK_GetPipePolicy = NULL; + +static UsbK_ReadPipe_T* pUsbK_ReadPipe = NULL; + +static UsbK_WritePipe_T* pUsbK_WritePipe = NULL; + +static UsbK_ResetPipe_T* pUsbK_ResetPipe = NULL; + +static UsbK_AbortPipe_T* pUsbK_AbortPipe = NULL; + +static UsbK_FlushPipe_T* pUsbK_FlushPipe = NULL; + +static UsbK_IsoReadPipe_T* pUsbK_IsoReadPipe = NULL; + +static UsbK_IsoWritePipe_T* pUsbK_IsoWritePipe = NULL; + +static UsbK_GetCurrentFrameNumber_T* pUsbK_GetCurrentFrameNumber = NULL; + +static UsbK_GetOverlappedResult_T* pUsbK_GetOverlappedResult = NULL; + +static UsbK_GetProperty_T* pUsbK_GetProperty = NULL; + +static LstK_Init_T* pLstK_Init = NULL; + +static LstK_InitEx_T* pLstK_InitEx = NULL; + +static LstK_Free_T* pLstK_Free = NULL; + +static LstK_Enumerate_T* pLstK_Enumerate = NULL; + +static LstK_Current_T* pLstK_Current = NULL; + +static LstK_MoveNext_T* pLstK_MoveNext = NULL; + +static LstK_MoveReset_T* pLstK_MoveReset = NULL; + +static LstK_FindByVidPid_T* pLstK_FindByVidPid = NULL; + +static LstK_Count_T* pLstK_Count = NULL; + +static HotK_Init_T* pHotK_Init = NULL; + +static HotK_Free_T* pHotK_Free = NULL; + +static HotK_FreeAll_T* pHotK_FreeAll = NULL; + +static OvlK_Acquire_T* pOvlK_Acquire = NULL; + +static OvlK_Release_T* pOvlK_Release = NULL; + +static OvlK_Init_T* pOvlK_Init = NULL; + +static OvlK_Free_T* pOvlK_Free = NULL; + +static OvlK_GetEventHandle_T* pOvlK_GetEventHandle = NULL; + +static OvlK_Wait_T* pOvlK_Wait = NULL; + +static OvlK_WaitOldest_T* pOvlK_WaitOldest = NULL; + +static OvlK_WaitOrCancel_T* pOvlK_WaitOrCancel = NULL; + +static OvlK_WaitAndRelease_T* pOvlK_WaitAndRelease = NULL; + +static OvlK_IsComplete_T* pOvlK_IsComplete = NULL; + +static OvlK_ReUse_T* pOvlK_ReUse = NULL; + +static StmK_Init_T* pStmK_Init = NULL; + +static StmK_Free_T* pStmK_Free = NULL; + +static StmK_Start_T* pStmK_Start = NULL; + +static StmK_Stop_T* pStmK_Stop = NULL; + +static StmK_Read_T* pStmK_Read = NULL; + +static StmK_Write_T* pStmK_Write = NULL; + +static IsoK_Init_T* pIsoK_Init = NULL; + +static IsoK_Free_T* pIsoK_Free = NULL; + +static IsoK_SetPackets_T* pIsoK_SetPackets = NULL; + +static IsoK_SetPacket_T* pIsoK_SetPacket = NULL; + +static IsoK_GetPacket_T* pIsoK_GetPacket = NULL; + +static IsoK_EnumPackets_T* pIsoK_EnumPackets = NULL; + +static IsoK_ReUse_T* pIsoK_ReUse = NULL; + + + +/////////////////////////////////////////////////////////////////////// + + +VOID LibusbK_DynApi_Free(VOID) +{ + if (mLibusbK_ModuleHandle) + { + mFreeLibrary(mLibusbK_ModuleHandle); + mLibusbK_ModuleHandle = NULL; + + // Set all function pointers to null: + + pLibK_GetVersion = NULL; + + pLibK_GetContext = NULL; + + pLibK_SetContext = NULL; + + pLibK_SetCleanupCallback = NULL; + + pLibK_LoadDriverAPI = NULL; + + pLibK_CopyDriverAPI = NULL; + + pLibK_GetProcAddress = NULL; + + pLibK_SetDefaultContext = NULL; + + pLibK_GetDefaultContext = NULL; + + pLibK_Context_Init = NULL; + + pLibK_Context_Free = NULL; + + pUsbK_Init = NULL; + + pUsbK_Free = NULL; + + pUsbK_ClaimInterface = NULL; + + pUsbK_ReleaseInterface = NULL; + + pUsbK_SetAltInterface = NULL; + + pUsbK_GetAltInterface = NULL; + + pUsbK_GetDescriptor = NULL; + + pUsbK_ControlTransfer = NULL; + + pUsbK_SetPowerPolicy = NULL; + + pUsbK_GetPowerPolicy = NULL; + + pUsbK_SetConfiguration = NULL; + + pUsbK_GetConfiguration = NULL; + + pUsbK_ResetDevice = NULL; + + pUsbK_Initialize = NULL; + + pUsbK_SelectInterface = NULL; + + pUsbK_GetAssociatedInterface = NULL; + + pUsbK_Clone = NULL; + + pUsbK_QueryInterfaceSettings = NULL; + + pUsbK_QueryDeviceInformation = NULL; + + pUsbK_SetCurrentAlternateSetting = NULL; + + pUsbK_GetCurrentAlternateSetting = NULL; + + pUsbK_QueryPipe = NULL; + + pUsbK_SetPipePolicy = NULL; + + pUsbK_GetPipePolicy = NULL; + + pUsbK_ReadPipe = NULL; + + pUsbK_WritePipe = NULL; + + pUsbK_ResetPipe = NULL; + + pUsbK_AbortPipe = NULL; + + pUsbK_FlushPipe = NULL; + + pUsbK_IsoReadPipe = NULL; + + pUsbK_IsoWritePipe = NULL; + + pUsbK_GetCurrentFrameNumber = NULL; + + pUsbK_GetOverlappedResult = NULL; + + pUsbK_GetProperty = NULL; + + pLstK_Init = NULL; + + pLstK_InitEx = NULL; + + pLstK_Free = NULL; + + pLstK_Enumerate = NULL; + + pLstK_Current = NULL; + + pLstK_MoveNext = NULL; + + pLstK_MoveReset = NULL; + + pLstK_FindByVidPid = NULL; + + pLstK_Count = NULL; + + pHotK_Init = NULL; + + pHotK_Free = NULL; + + pHotK_FreeAll = NULL; + + pOvlK_Acquire = NULL; + + pOvlK_Release = NULL; + + pOvlK_Init = NULL; + + pOvlK_Free = NULL; + + pOvlK_GetEventHandle = NULL; + + pOvlK_Wait = NULL; + + pOvlK_WaitOldest = NULL; + + pOvlK_WaitOrCancel = NULL; + + pOvlK_WaitAndRelease = NULL; + + pOvlK_IsComplete = NULL; + + pOvlK_ReUse = NULL; + + pStmK_Init = NULL; + + pStmK_Free = NULL; + + pStmK_Start = NULL; + + pStmK_Stop = NULL; + + pStmK_Read = NULL; + + pStmK_Write = NULL; + + pIsoK_Init = NULL; + + pIsoK_Free = NULL; + + pIsoK_SetPackets = NULL; + + pIsoK_SetPacket = NULL; + + pIsoK_GetPacket = NULL; + + pIsoK_EnumPackets = NULL; + + pIsoK_ReUse = NULL; + + + + /////////////////////////////////////////////////////////////////////// + } +} + +INT LibusbK_DynApi_Init(_inopt LPCSTR DllFullPathName) +{ + LPCSTR dllFullPathName = (DllFullPathName == NULL) ? "libusbK.dll" : DllFullPathName; + INT funcLoadFailCount = 0; + + if (mLibusbK_ModuleHandle) LibusbK_DynApi_Free(); + + if (DllFullPathName) + mLibusbK_ModuleHandle = mLoadLibraryExA(dllFullPathName, NULL, LOAD_WITH_ALTERED_SEARCH_PATH); + else + mLibusbK_ModuleHandle = mLoadLibraryExA(dllFullPathName, NULL, 0); + + if (mLibusbK_ModuleHandle == NULL) return -1; + + + // Function loads: + + if ((pLibK_GetVersion = (LibK_GetVersion_T*)GetProcAddress(mLibusbK_ModuleHandle, "LibK_GetVersion")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function LibK_GetVersion.\n"); + } + + if ((pLibK_GetContext = (LibK_GetContext_T*)GetProcAddress(mLibusbK_ModuleHandle, "LibK_GetContext")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function LibK_GetContext.\n"); + } + + if ((pLibK_SetContext = (LibK_SetContext_T*)GetProcAddress(mLibusbK_ModuleHandle, "LibK_SetContext")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function LibK_SetContext.\n"); + } + + if ((pLibK_SetCleanupCallback = (LibK_SetCleanupCallback_T*)GetProcAddress(mLibusbK_ModuleHandle, "LibK_SetCleanupCallback")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function LibK_SetCleanupCallback.\n"); + } + + if ((pLibK_LoadDriverAPI = (LibK_LoadDriverAPI_T*)GetProcAddress(mLibusbK_ModuleHandle, "LibK_LoadDriverAPI")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function LibK_LoadDriverAPI.\n"); + } + + if ((pLibK_CopyDriverAPI = (LibK_CopyDriverAPI_T*)GetProcAddress(mLibusbK_ModuleHandle, "LibK_CopyDriverAPI")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function LibK_CopyDriverAPI.\n"); + } + + if ((pLibK_GetProcAddress = (LibK_GetProcAddress_T*)GetProcAddress(mLibusbK_ModuleHandle, "LibK_GetProcAddress")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function LibK_GetProcAddress.\n"); + } + + if ((pLibK_SetDefaultContext = (LibK_SetDefaultContext_T*)GetProcAddress(mLibusbK_ModuleHandle, "LibK_SetDefaultContext")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function LibK_SetDefaultContext.\n"); + } + + if ((pLibK_GetDefaultContext = (LibK_GetDefaultContext_T*)GetProcAddress(mLibusbK_ModuleHandle, "LibK_GetDefaultContext")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function LibK_GetDefaultContext.\n"); + } + + if ((pLibK_Context_Init = (LibK_Context_Init_T*)GetProcAddress(mLibusbK_ModuleHandle, "LibK_Context_Init")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function LibK_Context_Init.\n"); + } + + if ((pLibK_Context_Free = (LibK_Context_Free_T*)GetProcAddress(mLibusbK_ModuleHandle, "LibK_Context_Free")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function LibK_Context_Free.\n"); + } + + if ((pUsbK_Init = (UsbK_Init_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_Init")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_Init.\n"); + } + + if ((pUsbK_Free = (UsbK_Free_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_Free")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_Free.\n"); + } + + if ((pUsbK_ClaimInterface = (UsbK_ClaimInterface_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_ClaimInterface")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_ClaimInterface.\n"); + } + + if ((pUsbK_ReleaseInterface = (UsbK_ReleaseInterface_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_ReleaseInterface")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_ReleaseInterface.\n"); + } + + if ((pUsbK_SetAltInterface = (UsbK_SetAltInterface_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_SetAltInterface")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_SetAltInterface.\n"); + } + + if ((pUsbK_GetAltInterface = (UsbK_GetAltInterface_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_GetAltInterface")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_GetAltInterface.\n"); + } + + if ((pUsbK_GetDescriptor = (UsbK_GetDescriptor_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_GetDescriptor")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_GetDescriptor.\n"); + } + + if ((pUsbK_ControlTransfer = (UsbK_ControlTransfer_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_ControlTransfer")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_ControlTransfer.\n"); + } + + if ((pUsbK_SetPowerPolicy = (UsbK_SetPowerPolicy_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_SetPowerPolicy")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_SetPowerPolicy.\n"); + } + + if ((pUsbK_GetPowerPolicy = (UsbK_GetPowerPolicy_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_GetPowerPolicy")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_GetPowerPolicy.\n"); + } + + if ((pUsbK_SetConfiguration = (UsbK_SetConfiguration_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_SetConfiguration")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_SetConfiguration.\n"); + } + + if ((pUsbK_GetConfiguration = (UsbK_GetConfiguration_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_GetConfiguration")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_GetConfiguration.\n"); + } + + if ((pUsbK_ResetDevice = (UsbK_ResetDevice_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_ResetDevice")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_ResetDevice.\n"); + } + + if ((pUsbK_Initialize = (UsbK_Initialize_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_Initialize")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_Initialize.\n"); + } + + if ((pUsbK_SelectInterface = (UsbK_SelectInterface_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_SelectInterface")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_SelectInterface.\n"); + } + + if ((pUsbK_GetAssociatedInterface = (UsbK_GetAssociatedInterface_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_GetAssociatedInterface")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_GetAssociatedInterface.\n"); + } + + if ((pUsbK_Clone = (UsbK_Clone_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_Clone")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_Clone.\n"); + } + + if ((pUsbK_QueryInterfaceSettings = (UsbK_QueryInterfaceSettings_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_QueryInterfaceSettings")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_QueryInterfaceSettings.\n"); + } + + if ((pUsbK_QueryDeviceInformation = (UsbK_QueryDeviceInformation_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_QueryDeviceInformation")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_QueryDeviceInformation.\n"); + } + + if ((pUsbK_SetCurrentAlternateSetting = (UsbK_SetCurrentAlternateSetting_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_SetCurrentAlternateSetting")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_SetCurrentAlternateSetting.\n"); + } + + if ((pUsbK_GetCurrentAlternateSetting = (UsbK_GetCurrentAlternateSetting_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_GetCurrentAlternateSetting")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_GetCurrentAlternateSetting.\n"); + } + + if ((pUsbK_QueryPipe = (UsbK_QueryPipe_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_QueryPipe")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_QueryPipe.\n"); + } + + if ((pUsbK_SetPipePolicy = (UsbK_SetPipePolicy_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_SetPipePolicy")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_SetPipePolicy.\n"); + } + + if ((pUsbK_GetPipePolicy = (UsbK_GetPipePolicy_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_GetPipePolicy")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_GetPipePolicy.\n"); + } + + if ((pUsbK_ReadPipe = (UsbK_ReadPipe_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_ReadPipe")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_ReadPipe.\n"); + } + + if ((pUsbK_WritePipe = (UsbK_WritePipe_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_WritePipe")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_WritePipe.\n"); + } + + if ((pUsbK_ResetPipe = (UsbK_ResetPipe_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_ResetPipe")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_ResetPipe.\n"); + } + + if ((pUsbK_AbortPipe = (UsbK_AbortPipe_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_AbortPipe")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_AbortPipe.\n"); + } + + if ((pUsbK_FlushPipe = (UsbK_FlushPipe_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_FlushPipe")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_FlushPipe.\n"); + } + + if ((pUsbK_IsoReadPipe = (UsbK_IsoReadPipe_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_IsoReadPipe")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_IsoReadPipe.\n"); + } + + if ((pUsbK_IsoWritePipe = (UsbK_IsoWritePipe_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_IsoWritePipe")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_IsoWritePipe.\n"); + } + + if ((pUsbK_GetCurrentFrameNumber = (UsbK_GetCurrentFrameNumber_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_GetCurrentFrameNumber")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_GetCurrentFrameNumber.\n"); + } + + if ((pUsbK_GetOverlappedResult = (UsbK_GetOverlappedResult_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_GetOverlappedResult")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_GetOverlappedResult.\n"); + } + + if ((pUsbK_GetProperty = (UsbK_GetProperty_T*)GetProcAddress(mLibusbK_ModuleHandle, "UsbK_GetProperty")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function UsbK_GetProperty.\n"); + } + + if ((pLstK_Init = (LstK_Init_T*)GetProcAddress(mLibusbK_ModuleHandle, "LstK_Init")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function LstK_Init.\n"); + } + + if ((pLstK_InitEx = (LstK_InitEx_T*)GetProcAddress(mLibusbK_ModuleHandle, "LstK_InitEx")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function LstK_InitEx.\n"); + } + + if ((pLstK_Free = (LstK_Free_T*)GetProcAddress(mLibusbK_ModuleHandle, "LstK_Free")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function LstK_Free.\n"); + } + + if ((pLstK_Enumerate = (LstK_Enumerate_T*)GetProcAddress(mLibusbK_ModuleHandle, "LstK_Enumerate")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function LstK_Enumerate.\n"); + } + + if ((pLstK_Current = (LstK_Current_T*)GetProcAddress(mLibusbK_ModuleHandle, "LstK_Current")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function LstK_Current.\n"); + } + + if ((pLstK_MoveNext = (LstK_MoveNext_T*)GetProcAddress(mLibusbK_ModuleHandle, "LstK_MoveNext")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function LstK_MoveNext.\n"); + } + + if ((pLstK_MoveReset = (LstK_MoveReset_T*)GetProcAddress(mLibusbK_ModuleHandle, "LstK_MoveReset")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function LstK_MoveReset.\n"); + } + + if ((pLstK_FindByVidPid = (LstK_FindByVidPid_T*)GetProcAddress(mLibusbK_ModuleHandle, "LstK_FindByVidPid")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function LstK_FindByVidPid.\n"); + } + + if ((pLstK_Count = (LstK_Count_T*)GetProcAddress(mLibusbK_ModuleHandle, "LstK_Count")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function LstK_Count.\n"); + } + + if ((pHotK_Init = (HotK_Init_T*)GetProcAddress(mLibusbK_ModuleHandle, "HotK_Init")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function HotK_Init.\n"); + } + + if ((pHotK_Free = (HotK_Free_T*)GetProcAddress(mLibusbK_ModuleHandle, "HotK_Free")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function HotK_Free.\n"); + } + + if ((pHotK_FreeAll = (HotK_FreeAll_T*)GetProcAddress(mLibusbK_ModuleHandle, "HotK_FreeAll")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function HotK_FreeAll.\n"); + } + + if ((pOvlK_Acquire = (OvlK_Acquire_T*)GetProcAddress(mLibusbK_ModuleHandle, "OvlK_Acquire")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function OvlK_Acquire.\n"); + } + + if ((pOvlK_Release = (OvlK_Release_T*)GetProcAddress(mLibusbK_ModuleHandle, "OvlK_Release")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function OvlK_Release.\n"); + } + + if ((pOvlK_Init = (OvlK_Init_T*)GetProcAddress(mLibusbK_ModuleHandle, "OvlK_Init")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function OvlK_Init.\n"); + } + + if ((pOvlK_Free = (OvlK_Free_T*)GetProcAddress(mLibusbK_ModuleHandle, "OvlK_Free")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function OvlK_Free.\n"); + } + + if ((pOvlK_GetEventHandle = (OvlK_GetEventHandle_T*)GetProcAddress(mLibusbK_ModuleHandle, "OvlK_GetEventHandle")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function OvlK_GetEventHandle.\n"); + } + + if ((pOvlK_Wait = (OvlK_Wait_T*)GetProcAddress(mLibusbK_ModuleHandle, "OvlK_Wait")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function OvlK_Wait.\n"); + } + + if ((pOvlK_WaitOldest = (OvlK_WaitOldest_T*)GetProcAddress(mLibusbK_ModuleHandle, "OvlK_WaitOldest")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function OvlK_WaitOldest.\n"); + } + + if ((pOvlK_WaitOrCancel = (OvlK_WaitOrCancel_T*)GetProcAddress(mLibusbK_ModuleHandle, "OvlK_WaitOrCancel")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function OvlK_WaitOrCancel.\n"); + } + + if ((pOvlK_WaitAndRelease = (OvlK_WaitAndRelease_T*)GetProcAddress(mLibusbK_ModuleHandle, "OvlK_WaitAndRelease")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function OvlK_WaitAndRelease.\n"); + } + + if ((pOvlK_IsComplete = (OvlK_IsComplete_T*)GetProcAddress(mLibusbK_ModuleHandle, "OvlK_IsComplete")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function OvlK_IsComplete.\n"); + } + + if ((pOvlK_ReUse = (OvlK_ReUse_T*)GetProcAddress(mLibusbK_ModuleHandle, "OvlK_ReUse")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function OvlK_ReUse.\n"); + } + + if ((pStmK_Init = (StmK_Init_T*)GetProcAddress(mLibusbK_ModuleHandle, "StmK_Init")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function StmK_Init.\n"); + } + + if ((pStmK_Free = (StmK_Free_T*)GetProcAddress(mLibusbK_ModuleHandle, "StmK_Free")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function StmK_Free.\n"); + } + + if ((pStmK_Start = (StmK_Start_T*)GetProcAddress(mLibusbK_ModuleHandle, "StmK_Start")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function StmK_Start.\n"); + } + + if ((pStmK_Stop = (StmK_Stop_T*)GetProcAddress(mLibusbK_ModuleHandle, "StmK_Stop")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function StmK_Stop.\n"); + } + + if ((pStmK_Read = (StmK_Read_T*)GetProcAddress(mLibusbK_ModuleHandle, "StmK_Read")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function StmK_Read.\n"); + } + + if ((pStmK_Write = (StmK_Write_T*)GetProcAddress(mLibusbK_ModuleHandle, "StmK_Write")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function StmK_Write.\n"); + } + + if ((pIsoK_Init = (IsoK_Init_T*)GetProcAddress(mLibusbK_ModuleHandle, "IsoK_Init")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function IsoK_Init.\n"); + } + + if ((pIsoK_Free = (IsoK_Free_T*)GetProcAddress(mLibusbK_ModuleHandle, "IsoK_Free")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function IsoK_Free.\n"); + } + + if ((pIsoK_SetPackets = (IsoK_SetPackets_T*)GetProcAddress(mLibusbK_ModuleHandle, "IsoK_SetPackets")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function IsoK_SetPackets.\n"); + } + + if ((pIsoK_SetPacket = (IsoK_SetPacket_T*)GetProcAddress(mLibusbK_ModuleHandle, "IsoK_SetPacket")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function IsoK_SetPacket.\n"); + } + + if ((pIsoK_GetPacket = (IsoK_GetPacket_T*)GetProcAddress(mLibusbK_ModuleHandle, "IsoK_GetPacket")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function IsoK_GetPacket.\n"); + } + + if ((pIsoK_EnumPackets = (IsoK_EnumPackets_T*)GetProcAddress(mLibusbK_ModuleHandle, "IsoK_EnumPackets")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function IsoK_EnumPackets.\n"); + } + + if ((pIsoK_ReUse = (IsoK_ReUse_T*)GetProcAddress(mLibusbK_ModuleHandle, "IsoK_ReUse")) == NULL) + { + funcLoadFailCount++; + OutputDebugStringA("Failed loading function IsoK_ReUse.\n"); + } + + + + /////////////////////////////////////////////////////////////////////// + + return funcLoadFailCount; +} + +// Function wrappers: + +KUSB_EXP VOID KUSB_API LibK_GetVersion(_out PKLIB_VERSION Version) +{ + pLibK_GetVersion(Version); +} + +KUSB_EXP KLIB_USER_CONTEXT KUSB_API LibK_GetContext( + _in KLIB_HANDLE Handle, + _in KLIB_HANDLE_TYPE HandleType) +{ + return pLibK_GetContext(Handle, HandleType); +} + +KUSB_EXP BOOL KUSB_API LibK_SetContext( + _in KLIB_HANDLE Handle, + _in KLIB_HANDLE_TYPE HandleType, + _in KLIB_USER_CONTEXT ContextValue) +{ + return pLibK_SetContext(Handle, HandleType, ContextValue); +} + +KUSB_EXP BOOL KUSB_API LibK_SetCleanupCallback( + _in KLIB_HANDLE Handle, + _in KLIB_HANDLE_TYPE HandleType, + _in KLIB_HANDLE_CLEANUP_CB* CleanupCB) +{ + return pLibK_SetCleanupCallback(Handle, HandleType, CleanupCB); +} + +KUSB_EXP BOOL KUSB_API LibK_LoadDriverAPI( + _out PKUSB_DRIVER_API DriverAPI, + _in INT DriverID) +{ + return pLibK_LoadDriverAPI(DriverAPI, DriverID); +} + +KUSB_EXP BOOL KUSB_API LibK_CopyDriverAPI( + _out PKUSB_DRIVER_API DriverAPI, + _in KUSB_HANDLE UsbHandle) +{ + return pLibK_CopyDriverAPI(DriverAPI, UsbHandle); +} + +KUSB_EXP BOOL KUSB_API LibK_GetProcAddress( + _out KPROC* ProcAddress, + _in INT DriverID, + _in INT FunctionID) +{ + return pLibK_GetProcAddress(ProcAddress, DriverID, FunctionID); +} + +KUSB_EXP BOOL KUSB_API LibK_SetDefaultContext( + _in KLIB_HANDLE_TYPE HandleType, + _in KLIB_USER_CONTEXT ContextValue) +{ + return pLibK_SetDefaultContext(HandleType, ContextValue); +} + +KUSB_EXP KLIB_USER_CONTEXT KUSB_API LibK_GetDefaultContext( + _in KLIB_HANDLE_TYPE HandleType) +{ + return pLibK_GetDefaultContext(HandleType); +} + +KUSB_EXP BOOL KUSB_API LibK_Context_Init( + _inopt HANDLE Heap, + _in PVOID Reserved) +{ + return pLibK_Context_Init(Heap, Reserved); +} + +KUSB_EXP VOID KUSB_API LibK_Context_Free(VOID) +{ + pLibK_Context_Free(); +} + +KUSB_EXP BOOL KUSB_API UsbK_Init ( + _out KUSB_HANDLE* InterfaceHandle, + _in KLST_DEVINFO_HANDLE DevInfo) +{ + return pUsbK_Init(InterfaceHandle, DevInfo); +} + +KUSB_EXP BOOL KUSB_API UsbK_Free ( + _in KUSB_HANDLE InterfaceHandle) +{ + return pUsbK_Free(InterfaceHandle); +} + +KUSB_EXP BOOL KUSB_API UsbK_ClaimInterface ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR NumberOrIndex, + _in BOOL IsIndex) +{ + return pUsbK_ClaimInterface(InterfaceHandle, NumberOrIndex, IsIndex); +} + +KUSB_EXP BOOL KUSB_API UsbK_ReleaseInterface ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR NumberOrIndex, + _in BOOL IsIndex) +{ + return pUsbK_ReleaseInterface(InterfaceHandle, NumberOrIndex, IsIndex); +} + +KUSB_EXP BOOL KUSB_API UsbK_SetAltInterface ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR NumberOrIndex, + _in BOOL IsIndex, + _in UCHAR AltSettingNumber) +{ + return pUsbK_SetAltInterface(InterfaceHandle, NumberOrIndex, IsIndex, AltSettingNumber); +} + +KUSB_EXP BOOL KUSB_API UsbK_GetAltInterface ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR NumberOrIndex, + _in BOOL IsIndex, + _out PUCHAR AltSettingNumber) +{ + return pUsbK_GetAltInterface(InterfaceHandle, NumberOrIndex, IsIndex, AltSettingNumber); +} + +KUSB_EXP BOOL KUSB_API UsbK_GetDescriptor ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR DescriptorType, + _in UCHAR Index, + _in USHORT LanguageID, + _out PUCHAR Buffer, + _in UINT BufferLength, + _outopt PUINT LengthTransferred) +{ + return pUsbK_GetDescriptor(InterfaceHandle, DescriptorType, Index, LanguageID, Buffer, BufferLength, LengthTransferred); +} + +KUSB_EXP BOOL KUSB_API UsbK_ControlTransfer ( + _in KUSB_HANDLE InterfaceHandle, + _in WINUSB_SETUP_PACKET SetupPacket, + _refopt PUCHAR Buffer, + _in UINT BufferLength, + _outopt PUINT LengthTransferred, + _inopt LPOVERLAPPED Overlapped) +{ + return pUsbK_ControlTransfer(InterfaceHandle, SetupPacket, Buffer, BufferLength, LengthTransferred, Overlapped); +} + +KUSB_EXP BOOL KUSB_API UsbK_SetPowerPolicy ( + _in KUSB_HANDLE InterfaceHandle, + _in UINT PolicyType, + _in UINT ValueLength, + _in PVOID Value) +{ + return pUsbK_SetPowerPolicy(InterfaceHandle, PolicyType, ValueLength, Value); +} + +KUSB_EXP BOOL KUSB_API UsbK_GetPowerPolicy ( + _in KUSB_HANDLE InterfaceHandle, + _in UINT PolicyType, + _ref PUINT ValueLength, + _out PVOID Value) +{ + return pUsbK_GetPowerPolicy(InterfaceHandle, PolicyType, ValueLength, Value); +} + +KUSB_EXP BOOL KUSB_API UsbK_SetConfiguration ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR ConfigurationNumber) +{ + return pUsbK_SetConfiguration(InterfaceHandle, ConfigurationNumber); +} + +KUSB_EXP BOOL KUSB_API UsbK_GetConfiguration ( + _in KUSB_HANDLE InterfaceHandle, + _out PUCHAR ConfigurationNumber) +{ + return pUsbK_GetConfiguration(InterfaceHandle, ConfigurationNumber); +} + +KUSB_EXP BOOL KUSB_API UsbK_ResetDevice ( + _in KUSB_HANDLE InterfaceHandle) +{ + return pUsbK_ResetDevice(InterfaceHandle); +} + +KUSB_EXP BOOL KUSB_API UsbK_Initialize ( + _in HANDLE DeviceHandle, + _out KUSB_HANDLE* InterfaceHandle) +{ + return pUsbK_Initialize(DeviceHandle, InterfaceHandle); +} + +KUSB_EXP BOOL KUSB_API UsbK_SelectInterface ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR NumberOrIndex, + _in BOOL IsIndex) +{ + return pUsbK_SelectInterface(InterfaceHandle, NumberOrIndex, IsIndex); +} + +KUSB_EXP BOOL KUSB_API UsbK_GetAssociatedInterface ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR AssociatedInterfaceIndex, + _out KUSB_HANDLE* AssociatedInterfaceHandle) +{ + return pUsbK_GetAssociatedInterface(InterfaceHandle, AssociatedInterfaceIndex, AssociatedInterfaceHandle); +} + +KUSB_EXP BOOL KUSB_API UsbK_Clone ( + _in KUSB_HANDLE InterfaceHandle, + _out KUSB_HANDLE* DstInterfaceHandle) +{ + return pUsbK_Clone(InterfaceHandle, DstInterfaceHandle); +} + +KUSB_EXP BOOL KUSB_API UsbK_QueryInterfaceSettings ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR AltSettingIndex, + _out PUSB_INTERFACE_DESCRIPTOR UsbAltInterfaceDescriptor) +{ + return pUsbK_QueryInterfaceSettings(InterfaceHandle, AltSettingIndex, UsbAltInterfaceDescriptor); +} + +KUSB_EXP BOOL KUSB_API UsbK_QueryDeviceInformation ( + _in KUSB_HANDLE InterfaceHandle, + _in UINT InformationType, + _ref PUINT BufferLength, + _ref PVOID Buffer) +{ + return pUsbK_QueryDeviceInformation(InterfaceHandle, InformationType, BufferLength, Buffer); +} + +KUSB_EXP BOOL KUSB_API UsbK_SetCurrentAlternateSetting ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR AltSettingNumber) +{ + return pUsbK_SetCurrentAlternateSetting(InterfaceHandle, AltSettingNumber); +} + +KUSB_EXP BOOL KUSB_API UsbK_GetCurrentAlternateSetting ( + _in KUSB_HANDLE InterfaceHandle, + _out PUCHAR AltSettingNumber) +{ + return pUsbK_GetCurrentAlternateSetting(InterfaceHandle, AltSettingNumber); +} + +KUSB_EXP BOOL KUSB_API UsbK_QueryPipe ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR AltSettingNumber, + _in UCHAR PipeIndex, + _out PWINUSB_PIPE_INFORMATION PipeInformation) +{ + return pUsbK_QueryPipe(InterfaceHandle, AltSettingNumber, PipeIndex, PipeInformation); +} + +KUSB_EXP BOOL KUSB_API UsbK_SetPipePolicy ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID, + _in UINT PolicyType, + _in UINT ValueLength, + _in PVOID Value) +{ + return pUsbK_SetPipePolicy(InterfaceHandle, PipeID, PolicyType, ValueLength, Value); +} + +KUSB_EXP BOOL KUSB_API UsbK_GetPipePolicy ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID, + _in UINT PolicyType, + _ref PUINT ValueLength, + _out PVOID Value) +{ + return pUsbK_GetPipePolicy(InterfaceHandle, PipeID, PolicyType, ValueLength, Value); +} + +KUSB_EXP BOOL KUSB_API UsbK_ReadPipe ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID, + _out PUCHAR Buffer, + _in UINT BufferLength, + _outopt PUINT LengthTransferred, + _inopt LPOVERLAPPED Overlapped) +{ + return pUsbK_ReadPipe(InterfaceHandle, PipeID, Buffer, BufferLength, LengthTransferred, Overlapped); +} + +KUSB_EXP BOOL KUSB_API UsbK_WritePipe ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID, + _in PUCHAR Buffer, + _in UINT BufferLength, + _outopt PUINT LengthTransferred, + _inopt LPOVERLAPPED Overlapped) +{ + return pUsbK_WritePipe(InterfaceHandle, PipeID, Buffer, BufferLength, LengthTransferred, Overlapped); +} + +KUSB_EXP BOOL KUSB_API UsbK_ResetPipe ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID) +{ + return pUsbK_ResetPipe(InterfaceHandle, PipeID); +} + +KUSB_EXP BOOL KUSB_API UsbK_AbortPipe ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID) +{ + return pUsbK_AbortPipe(InterfaceHandle, PipeID); +} + +KUSB_EXP BOOL KUSB_API UsbK_FlushPipe ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID) +{ + return pUsbK_FlushPipe(InterfaceHandle, PipeID); +} + +KUSB_EXP BOOL KUSB_API UsbK_IsoReadPipe ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID, + _out PUCHAR Buffer, + _in UINT BufferLength, + _in LPOVERLAPPED Overlapped, + _refopt PKISO_CONTEXT IsoContext) +{ + return pUsbK_IsoReadPipe(InterfaceHandle, PipeID, Buffer, BufferLength, Overlapped, IsoContext); +} + +KUSB_EXP BOOL KUSB_API UsbK_IsoWritePipe ( + _in KUSB_HANDLE InterfaceHandle, + _in UCHAR PipeID, + _in PUCHAR Buffer, + _in UINT BufferLength, + _in LPOVERLAPPED Overlapped, + _refopt PKISO_CONTEXT IsoContext) +{ + return pUsbK_IsoWritePipe(InterfaceHandle, PipeID, Buffer, BufferLength, Overlapped, IsoContext); +} + +KUSB_EXP BOOL KUSB_API UsbK_GetCurrentFrameNumber ( + _in KUSB_HANDLE InterfaceHandle, + _out PUINT FrameNumber) +{ + return pUsbK_GetCurrentFrameNumber(InterfaceHandle, FrameNumber); +} + +KUSB_EXP BOOL KUSB_API UsbK_GetOverlappedResult ( + _in KUSB_HANDLE InterfaceHandle, + _in LPOVERLAPPED Overlapped, + _out PUINT lpNumberOfBytesTransferred, + _in BOOL bWait) +{ + return pUsbK_GetOverlappedResult(InterfaceHandle, Overlapped, lpNumberOfBytesTransferred, bWait); +} + +KUSB_EXP BOOL KUSB_API UsbK_GetProperty ( + _in KUSB_HANDLE InterfaceHandle, + _in KUSB_PROPERTY PropertyType, + _ref PUINT PropertySize, + _out PVOID Value) +{ + return pUsbK_GetProperty(InterfaceHandle, PropertyType, PropertySize, Value); +} + +KUSB_EXP BOOL KUSB_API LstK_Init( + _out KLST_HANDLE* DeviceList, + _in KLST_FLAG Flags) +{ + return pLstK_Init(DeviceList, Flags); +} + +KUSB_EXP BOOL KUSB_API LstK_InitEx( + _out KLST_HANDLE* DeviceList, + _in KLST_FLAG Flags, + _in PKLST_PATTERN_MATCH PatternMatch) +{ + return pLstK_InitEx(DeviceList, Flags, PatternMatch); +} + +KUSB_EXP BOOL KUSB_API LstK_Free( + _in KLST_HANDLE DeviceList) +{ + return pLstK_Free(DeviceList); +} + +KUSB_EXP BOOL KUSB_API LstK_Enumerate( + _in KLST_HANDLE DeviceList, + _in KLST_ENUM_DEVINFO_CB* EnumDevListCB, + _inopt PVOID Context) +{ + return pLstK_Enumerate(DeviceList, EnumDevListCB, Context); +} + +KUSB_EXP BOOL KUSB_API LstK_Current( + _in KLST_HANDLE DeviceList, + _out KLST_DEVINFO_HANDLE* DeviceInfo) +{ + return pLstK_Current(DeviceList, DeviceInfo); +} + +KUSB_EXP BOOL KUSB_API LstK_MoveNext( + _in KLST_HANDLE DeviceList, + _outopt KLST_DEVINFO_HANDLE* DeviceInfo) +{ + return pLstK_MoveNext(DeviceList, DeviceInfo); +} + +KUSB_EXP VOID KUSB_API LstK_MoveReset( + _in KLST_HANDLE DeviceList) +{ + pLstK_MoveReset(DeviceList); +} + +KUSB_EXP BOOL KUSB_API LstK_FindByVidPid( + _in KLST_HANDLE DeviceList, + _in INT Vid, + _in INT Pid, + _out KLST_DEVINFO_HANDLE* DeviceInfo) +{ + return pLstK_FindByVidPid(DeviceList, Vid, Pid, DeviceInfo); +} + +KUSB_EXP BOOL KUSB_API LstK_Count( + _in KLST_HANDLE DeviceList, + _ref PUINT Count) +{ + return pLstK_Count(DeviceList, Count); +} + +KUSB_EXP BOOL KUSB_API HotK_Init( + _out KHOT_HANDLE* Handle, + _ref PKHOT_PARAMS InitParams) +{ + return pHotK_Init(Handle, InitParams); +} + +KUSB_EXP BOOL KUSB_API HotK_Free( + _in KHOT_HANDLE Handle) +{ + return pHotK_Free(Handle); +} + +KUSB_EXP VOID KUSB_API HotK_FreeAll(VOID) +{ + pHotK_FreeAll(); +} + +KUSB_EXP BOOL KUSB_API OvlK_Acquire( + _out KOVL_HANDLE* OverlappedK, + _in KOVL_POOL_HANDLE PoolHandle) +{ + return pOvlK_Acquire(OverlappedK, PoolHandle); +} + +KUSB_EXP BOOL KUSB_API OvlK_Release( + _in KOVL_HANDLE OverlappedK) +{ + return pOvlK_Release(OverlappedK); +} + +KUSB_EXP BOOL KUSB_API OvlK_Init ( + _out KOVL_POOL_HANDLE* PoolHandle, + _in KUSB_HANDLE UsbHandle, + _in INT MaxOverlappedCount, + _inopt KOVL_POOL_FLAG Flags) +{ + return pOvlK_Init(PoolHandle, UsbHandle, MaxOverlappedCount, Flags); +} + +KUSB_EXP BOOL KUSB_API OvlK_Free( + _in KOVL_POOL_HANDLE PoolHandle) +{ + return pOvlK_Free(PoolHandle); +} + +KUSB_EXP HANDLE KUSB_API OvlK_GetEventHandle( + _in KOVL_HANDLE OverlappedK) +{ + return pOvlK_GetEventHandle(OverlappedK); +} + +KUSB_EXP BOOL KUSB_API OvlK_Wait( + _in KOVL_HANDLE OverlappedK, + _inopt INT TimeoutMS, + _inopt KOVL_WAIT_FLAG WaitFlags, + _out PUINT TransferredLength) +{ + return pOvlK_Wait(OverlappedK, TimeoutMS, WaitFlags, TransferredLength); +} + +KUSB_EXP BOOL KUSB_API OvlK_WaitOldest( + _in KOVL_POOL_HANDLE PoolHandle, + _outopt KOVL_HANDLE* OverlappedK, + _inopt INT TimeoutMS, + _inopt KOVL_WAIT_FLAG WaitFlags, + _out PUINT TransferredLength) +{ + return pOvlK_WaitOldest(PoolHandle, OverlappedK, TimeoutMS, WaitFlags, TransferredLength); +} + +KUSB_EXP BOOL KUSB_API OvlK_WaitOrCancel( + _in KOVL_HANDLE OverlappedK, + _inopt INT TimeoutMS, + _out PUINT TransferredLength) +{ + return pOvlK_WaitOrCancel(OverlappedK, TimeoutMS, TransferredLength); +} + +KUSB_EXP BOOL KUSB_API OvlK_WaitAndRelease( + _in KOVL_HANDLE OverlappedK, + _inopt INT TimeoutMS, + _out PUINT TransferredLength) +{ + return pOvlK_WaitAndRelease(OverlappedK, TimeoutMS, TransferredLength); +} + +KUSB_EXP BOOL KUSB_API OvlK_IsComplete( + _in KOVL_HANDLE OverlappedK) +{ + return pOvlK_IsComplete(OverlappedK); +} + +KUSB_EXP BOOL KUSB_API OvlK_ReUse( + _in KOVL_HANDLE OverlappedK) +{ + return pOvlK_ReUse(OverlappedK); +} + +KUSB_EXP BOOL KUSB_API StmK_Init( + _out KSTM_HANDLE* StreamHandle, + _in KUSB_HANDLE UsbHandle, + _in UCHAR PipeID, + _in INT MaxTransferSize, + _in INT MaxPendingTransfers, + _in INT MaxPendingIO, + _inopt PKSTM_CALLBACK Callbacks, + _inopt KSTM_FLAG Flags) +{ + return pStmK_Init(StreamHandle, UsbHandle, PipeID, MaxTransferSize, MaxPendingTransfers, MaxPendingIO, Callbacks, Flags); +} + +KUSB_EXP BOOL KUSB_API StmK_Free( + _in KSTM_HANDLE StreamHandle) +{ + return pStmK_Free(StreamHandle); +} + +KUSB_EXP BOOL KUSB_API StmK_Start( + _in KSTM_HANDLE StreamHandle) +{ + return pStmK_Start(StreamHandle); +} + +KUSB_EXP BOOL KUSB_API StmK_Stop( + _in KSTM_HANDLE StreamHandle, + _in INT TimeoutCancelMS) +{ + return pStmK_Stop(StreamHandle, TimeoutCancelMS); +} + +KUSB_EXP BOOL KUSB_API StmK_Read( + _in KSTM_HANDLE StreamHandle, + _out PUCHAR Buffer, + _in INT Offset, + _in INT Length, + _out PUINT TransferredLength) +{ + return pStmK_Read(StreamHandle, Buffer, Offset, Length, TransferredLength); +} + +KUSB_EXP BOOL KUSB_API StmK_Write( + _in KSTM_HANDLE StreamHandle, + _in PUCHAR Buffer, + _in INT Offset, + _in INT Length, + _out PUINT TransferredLength) +{ + return pStmK_Write(StreamHandle, Buffer, Offset, Length, TransferredLength); +} + +KUSB_EXP BOOL KUSB_API IsoK_Init( + _out PKISO_CONTEXT* IsoContext, + _in INT NumberOfPackets, + _inopt INT StartFrame) +{ + return pIsoK_Init(IsoContext, NumberOfPackets, StartFrame); +} + +KUSB_EXP BOOL KUSB_API IsoK_Free( + _in PKISO_CONTEXT IsoContext) +{ + return pIsoK_Free(IsoContext); +} + +KUSB_EXP BOOL KUSB_API IsoK_SetPackets( + _in PKISO_CONTEXT IsoContext, + _in INT PacketSize) +{ + return pIsoK_SetPackets(IsoContext, PacketSize); +} + +KUSB_EXP BOOL KUSB_API IsoK_SetPacket( + _in PKISO_CONTEXT IsoContext, + _in INT PacketIndex, + _in PKISO_PACKET IsoPacket) +{ + return pIsoK_SetPacket(IsoContext, PacketIndex, IsoPacket); +} + +KUSB_EXP BOOL KUSB_API IsoK_GetPacket( + _in PKISO_CONTEXT IsoContext, + _in INT PacketIndex, + _out PKISO_PACKET IsoPacket) +{ + return pIsoK_GetPacket(IsoContext, PacketIndex, IsoPacket); +} + +KUSB_EXP BOOL KUSB_API IsoK_EnumPackets( + _in PKISO_CONTEXT IsoContext, + _in KISO_ENUM_PACKETS_CB* EnumPackets, + _inopt INT StartPacketIndex, + _inopt PVOID UserState) +{ + return pIsoK_EnumPackets(IsoContext, EnumPackets, StartPacketIndex, UserState); +} + +KUSB_EXP BOOL KUSB_API IsoK_ReUse( + _ref PKISO_CONTEXT IsoContext) +{ + return pIsoK_ReUse(IsoContext); +} + + + +/////////////////////////////////////////////////////////////////////// diff --git a/Old Matlab Interface/includes/lusbk_shared.h b/Old Matlab Interface/includes/lusbk_shared.h new file mode 100644 index 00000000..ddfa3fa9 --- /dev/null +++ b/Old Matlab Interface/includes/lusbk_shared.h @@ -0,0 +1,309 @@ +/*! \file lusbk_shared.h +* \brief Types and defines shared with the driver. +*/ + +#ifndef __LUSBK_SHARED_H_ +#define __LUSBK_SHARED_H_ + +#ifndef __USB_H__ + +//! Values used in the \c bmAttributes field of a \ref USB_ENDPOINT_DESCRIPTOR +typedef enum _USBD_PIPE_TYPE +{ + //! Indicates a control endpoint + UsbdPipeTypeControl, + + //! Indicates an isochronous endpoint + UsbdPipeTypeIsochronous, + + //! Indicates a bulk endpoint + UsbdPipeTypeBulk, + + //! Indicates an interrupt endpoint + UsbdPipeTypeInterrupt, +} USBD_PIPE_TYPE; + +#endif + +#if !defined(__WINUSB_COMPAT_IO_H__) && !defined(__WUSBIO_H__) + +// pipe policy types /////////////// +#define SHORT_PACKET_TERMINATE 0x01 +#define AUTO_CLEAR_STALL 0x02 +#define PIPE_TRANSFER_TIMEOUT 0x03 +#define IGNORE_SHORT_PACKETS 0x04 +#define ALLOW_PARTIAL_READS 0x05 +#define AUTO_FLUSH 0x06 +#define RAW_IO 0x07 +#define MAXIMUM_TRANSFER_SIZE 0x08 +#define RESET_PIPE_ON_RESUME 0x09 + +// libusbK ISO pipe policy types /// +#define ISO_START_LATENCY 0x20 +#define ISO_ALWAYS_START_ASAP 0x21 +#define ISO_NUM_FIXED_PACKETS 0x22 + +// http://msdn.microsoft.com/en-us/library/windows/hardware/ff552359%28v=vs.85%29.aspx +// Settings.Parallel.NumberOfPresentedRequests +// Maximum number of transfers that can be asynchronously delivered at a +// time. Available in version 1.9 and later versions of KMDF. +#define SIMUL_PARALLEL_REQUESTS 0x30 + +// Power policy types ////////////// +#define AUTO_SUSPEND 0x81 +#define SUSPEND_DELAY 0x83 + +// Device Information types //////// +#define DEVICE_SPEED 0x01 + +// Device Speeds +#define LowSpeed 0x01 +#define FullSpeed 0x02 +#define HighSpeed 0x03 + +//! The \c WINUSB_PIPE_INFORMATION structure contains pipe information that the \ref UsbK_QueryPipe routine retrieves. +typedef struct _WINUSB_PIPE_INFORMATION +{ + //! A \c USBD_PIPE_TYPE enumeration value that specifies the pipe type + USBD_PIPE_TYPE PipeType; + + //! The pipe identifier (ID) + UCHAR PipeId; + + //! The maximum size, in bytes, of the packets that are transmitted on the pipe + USHORT MaximumPacketSize; + + //! The pipe interval + UCHAR Interval; + +} WINUSB_PIPE_INFORMATION; +//! Pointer to a \ref WINUSB_PIPE_INFORMATION structure +typedef WINUSB_PIPE_INFORMATION* PWINUSB_PIPE_INFORMATION; +C_ASSERT(sizeof(WINUSB_PIPE_INFORMATION) == 12); + +#include + +//! The \c WINUSB_SETUP_PACKET structure describes a USB setup packet. +/*! +* It is often more convient to use this structure in combination with a \ref KUSB_SETUP_PACKET. +* For example: +* \code + +* \endcode +*/ +typedef struct _WINUSB_SETUP_PACKET +{ + //! The request type. The values that are assigned to this member are defined in Table 9.2 of section 9.3 of the Universal Serial Bus (USB) specification (www.usb.org). + UCHAR RequestType; + + //! The device request. The values that are assigned to this member are defined in Table 9.3 of section 9.4 of the Universal Serial Bus (USB) specification. + UCHAR Request; + + //! The meaning of this member varies according to the request. For an explanation of this member, see the Universal Serial Bus (USB) specification. + USHORT Value; + + //! The meaning of this member varies according to the request. For an explanation of this member, see the Universal Serial Bus (USB) specification. + USHORT Index; + + //! The number of bytes to transfer. (not including the \c WINUSB_SETUP_PACKET itself) + USHORT Length; + +} WINUSB_SETUP_PACKET; +//! pointer to a \c WINUSB_SETUP_PACKET structure +typedef WINUSB_SETUP_PACKET* PWINUSB_SETUP_PACKET; +C_ASSERT(sizeof(WINUSB_SETUP_PACKET) == 8); + +#include + +#endif // __WUSBIO_H__ __WINUSB_COMPAT_IO_H__ + +#include + +/*! \addtogroup isok +* @{ +*/ + +//! Structure describing an isochronous transfer packet. +typedef struct _KISO_PACKET +{ + //! Specifies the offset, in bytes, of the buffer for this packet from the beginning of the entire isochronous transfer data buffer. + /*! + * \c Offset represents an absolute data offset from the start of the \c Buffer parameter \ref UsbK_IsoReadPipe or \ref UsbK_IsoWritePipe. + * + * \note This field is assigned by the user application only and used by the driver upon transfer submission and completion. + */ + UINT Offset; + + //! Set by the host controller to indicate the actual number of bytes received by the device for isochronous IN transfers. Length not used for isochronous OUT transfers. + /*! + * \note This field is is not user assignable and is updated by the driver upon transfer completion. + */ + USHORT Length; + + //! Contains the 16 least significant USBD status bits, on return from the host controller driver, of this transfer packet. + /*! + * See MSDN for USBD status codes: USBD status code reference + * + * \note This field is is not user assignable and is updated by the driver upon transfer completion. + */ + USHORT Status; + +} KISO_PACKET; +//! pointer to a \c KISO_PACKET structure +typedef KISO_PACKET* PKISO_PACKET; + +#pragma warning(disable:4200) + +//! Additional ISO transfer flags. +typedef enum _KISO_FLAG +{ + KISO_FLAG_NONE = 0, + + //! Do not start the transfer immediately, instead use \ref KISO_CONTEXT::StartFrame. + /*! + * By default, isochronous transfers start on the next frame and \ref KISO_CONTEXT::StartFrame is + * ignored. If this flag is specified, the transfer is postponed until the current usb frame number + * equals that specified by \ref KISO_CONTEXT::StartFrame. + * + * Under certain circumstances, the driver can specify 0 for \ref KISO_CONTEXT::StartFrame, and the bus + * driver will begin the transaction in the next available frame. + * + * Specifing \b 0 for \ref KISO_CONTEXT::StartFrame (start transfer ASAP) is restricted to the first + * transaction on a newly opened or reset pipe. Furthermore, the USB stack contains a bug in Microsoft + * Windows Server 2003 and Windows XP that limits the use of this to an isochronous context with 255 or fewer + * packets. + * + * For more information about resetting pipes, see \ref UsbK_ResetPipe. + */ + KISO_FLAG_SET_START_FRAME = 0x00000001, +} KISO_FLAG; + +//! Structure describing a user defined isochronous transfer. +/*! +* +* \fixedstruct{16} +* +* The \ref KISO_CONTEXT::StartFrame member of the \ref KISO_CONTEXT specifies the starting USB frame number +* for the transaction. The driver can use \ref UsbK_GetCurrentFrameNumber to request the current frame +* number. +* +* In full-speed transmissions, the frame number for any particular packet will be the sum of the start frame +* number and the packet index. For instance, the fourth packet in the \ref KISO_CONTEXT has an index of 3, so +* its frame number will be StartFrame + 3. In a write transfer, the port driver loads this frame with the +* buffer data at the data buffer offset specified by IsoPacket[3].Offset. +* +* When the driver processes the \ref KISO_CONTEXT, it discards all packets in the \ref KISO_CONTEXT whose +* frame numbers are lower than the current frame number. The port driver sets the Status member of the packet +* descriptor for each discarded packet to USBD_STATUS_ISO_NA_LATE_USBPORT, USBD_STATUS_ISO_NOT_ACCESSED_BY_HW +* or USBD_STATUS_ISO_NOT_ACCESSED_LATE. Even if it discards some packets, the port driver attempts to +* transmit those packets in the \ref KISO_CONTEXT whose frame numbers are higher than the current frame +* number. +* +* The check for a valid StartFrame member is slightly more complicated in high-speed transmissions because +* the port driver loads each packet into a high-speed microframe; however, the value in StartFrame refers to +* the 1 millisecond (full-speed) frame number, not the microframe. For example, if the StartFrame value +* recorded in the \ref KISO_CONTEXT is one less than the current frame, the port driver will discard as many +* as eight packets. The exact number of packets that the port driver discards depends on the period +* associated with the isochronous pipe. +* +* High-speed isochronous pipes can have periods of 1, 2, 4, or 8. The period number specifies the frequency +* with which the port driver inserts packets into the data stream. If the period is 2, for example, the port +* driver will insert a packet into the data stream every two microframes. This means that it will only use +* four of the eight microframes available within each 1-millisecond frame for isochronous data transmission. +* +* In general, the higher the period, the fewer packets the port driver will discard when a \ref KISO_CONTEXT +* arrives late. Assume the period on an isochronous pipe is 2. With a period of 2, each 1-millisecond speed +* frame will carry four packets of isochronous data for that pipe. So, for example, if CurrentFrame - +* StartFrame = 3, the port driver will discard 3 * 4 = 12 packets. On the other hand, if the period is 4, +* each 1-millisecond frame carries only two packets of isochronous data for the pipe. Therefore, if the +* \ref KISO_CONTEXT arrives three 1-millisecond frames late, as in the previous example, the port driver will +* discard 3 * 2 = 6 packets, instead of 12 packets. +* +* For all types of isochronous pipe, the distance between the current frame and the StartFrame value +* specified in the \ref KISO_CONTEXT must be less than USBD_ISO_START_FRAME_RANGE. If StartFrame is not +* within the proper range, the driver sets the Status member of the \ref KISO_PACKET +* \c USBD_STATUS_BAD_START_FRAME and discards the entire \ref KISO_CONTEXT. The following code example shows +* the precise check that the port driver does on the \ref KISO_CONTEXT start frame: +* \code +* if (abs((CurrentFrame - StartFrame)) > USBD_ISO_START_FRAME_RANGE) +* { +* // discard the KISO_CONTEXT +* } +* \endcode +* +*/ +typedef struct _KISO_CONTEXT +{ + //! Additional ISO transfer flags. See \ref KISO_FLAG. + KISO_FLAG Flags; + + //! Specifies the frame number that the transfer should begin on (0 for ASAP). + /*! + * This variable must be within a system-defined range of the current frame. The range is specified by the + * constant \ref USBD_ISO_START_FRAME_RANGE. + * + * If /ref KISO_FLAG_SET_START_FRAME was specified, this member contains the frame number that the transfer should begin on. + * When the request is returned by the host controller driver, this member is updated to reflect the frame number this transfer + * did begin on. + * + * \note This field may be assigned by the user application and is updated by the driver upon transfer + * completion. + */ + UINT StartFrame; + + //! Contains the number of packets that completed with an error condition on return from the host controller driver. + /*! + * \note This field is is not user assignable and is updated by the driver upon transfer completion. + */ + SHORT ErrorCount; + + //! Specifies the number of packets that are described by the variable-length array member \c IsoPacket. + /* + * \note This field is assigned by the user application only and used by the driver upon transfer submission + * and completion. + */ + SHORT NumberOfPackets; + + //! Contains the URB Hdr.Status value on return from the host controller driver. + /*! + * \note This field is is not user assignable and is updated by the driver upon transfer completion. + * + * The USB bus driver always returns a value of USBD_STATUS_SUCCESS in + * Hdr.Status, unless every packet in the transfer generated an error or + * the request was not well-formed and could not be executed at all. The + * following table includes possible error codes returned in Hdr.Status: + * - USBD_STATUS_ISOCH_REQUEST_FAILED + * Indicates that every packet of an isochronous request was completed with + * errors. + * - USBD_STATUS_BAD_START_FRAME + * Indicates that the requested start frame is not within + * USBD_ISO_START_FRAME_RANGE of the current USB frame. + * - USBD_ISO_NOT_ACCESSED_LATE + * Indicates that every packet was submitted too late for the packet to be + * sent, based on the requested start frame. + * - USBD_STATUS_INVALID_PARAMETER + * Indicates that one of the URB parameters was incorrect. + */ + UINT UrbHdrStatus; + + //! Contains a variable-length array of \c KISO_PACKET structures that describe the isochronous transfer packets to be transferred on the USB bus. + /* + * \note This field is assigned by the user application, used by the driver upon transfer submission, and + * updated by the driver upon transfer completion. + */ + KISO_PACKET IsoPackets[0]; + +} KISO_CONTEXT; +C_ASSERT(sizeof(KISO_CONTEXT) == 16); + +//! pointer to a \c KISO_CONTEXT structure +typedef KISO_CONTEXT* PKISO_CONTEXT; + +/*! @} */ + +#pragma warning(default:4200) + +#include + +#endif // __LUSBK_SHARED_H_ + diff --git a/Old Matlab Interface/isoLog.txt b/Old Matlab Interface/isoLog.txt new file mode 100644 index 00000000..7d562888 --- /dev/null +++ b/Old Matlab Interface/isoLog.txt @@ -0,0 +1,375000 @@ +13 +14 +13 +14 +14 +14 +13 +14 +13 +13 +13 +13 +13 +14 +14 +14 +14 +13 +14 +14 +13 +14 +14 +13 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +28 +27 +27 +31 +31 +33 +33 +33 +36 +37 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +50 +51 +54 +54 +59 +58 +64 +64 +64 +68 +68 +72 +72 +72 +77 +76 +76 +76 +76 +83 +82 +86 +86 +86 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +116 +119 +120 +119 +126 +125 +130 +130 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +151 +151 +151 +157 +158 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +174 +175 +175 +178 +179 +183 +182 +183 +185 +185 +188 +188 +190 +191 +190 +194 +195 +197 +197 +196 +198 +198 +200 +200 +201 +201 +200 +202 +202 +202 +204 +205 +204 +204 +205 +206 +207 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +204 +204 +204 +204 +205 +202 +202 +202 +201 +201 +200 +200 +201 +198 +198 +196 +197 +194 +194 +195 +191 +191 +188 +189 +188 +184 +185 +185 +185 +185 +182 +183 +179 +179 +179 +175 +175 +173 +173 +171 +169 +169 +165 +165 +160 +161 +161 +157 +157 +151 +151 +151 +147 +147 +147 +146 +147 +143 +143 +139 +139 +140 +133 +133 +130 +129 +126 +125 +125 +119 +119 +116 +116 +115 +110 +109 +106 +105 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +87 +82 +82 +76 +77 +72 +72 +72 +68 +68 +65 +64 +65 +59 +58 +54 +55 +54 +51 +51 +46 +47 +47 +43 +43 +41 +41 +40 +37 +36 +33 +32 +32 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +13 +14 +13 +14 +14 +14 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +47 +47 +46 +50 +50 +54 +54 +54 +59 +58 +59 +58 +59 +65 +64 +68 +68 +69 +72 +72 +77 +76 +81 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +99 +106 +106 +110 +110 +109 +115 +116 +119 +119 +120 +125 +125 +129 +129 +132 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +164 +165 +169 +168 +169 +173 +173 +175 +175 +178 +178 +178 +183 +183 +184 +184 +184 +188 +189 +191 +191 +191 +195 +194 +197 +196 +196 +199 +198 +200 +201 +201 +200 +200 +202 +202 +205 +204 +204 +205 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +205 +204 +204 +203 +202 +201 +200 +200 +201 +201 +198 +198 +198 +196 +196 +197 +196 +196 +194 +194 +191 +191 +190 +189 +189 +184 +184 +185 +182 +183 +178 +178 +174 +175 +175 +173 +173 +169 +169 +169 +165 +165 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +144 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +126 +126 +120 +119 +116 +115 +115 +110 +110 +106 +105 +106 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +77 +76 +72 +72 +72 +68 +68 +64 +65 +65 +58 +59 +55 +55 +55 +51 +50 +47 +47 +43 +43 +42 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +12 +12 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +14 +14 +13 +13 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +28 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +46 +46 +46 +47 +51 +51 +55 +54 +55 +58 +58 +65 +65 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +91 +90 +96 +96 +96 +99 +100 +105 +106 +106 +110 +110 +116 +116 +119 +119 +119 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +178 +178 +183 +182 +182 +184 +185 +189 +188 +188 +190 +191 +194 +195 +195 +196 +196 +198 +198 +201 +200 +201 +200 +200 +203 +202 +203 +204 +204 +205 +205 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +207 +207 +206 +206 +204 +205 +205 +205 +205 +202 +202 +202 +202 +202 +200 +201 +200 +200 +200 +198 +199 +197 +197 +195 +195 +195 +190 +190 +188 +189 +188 +185 +185 +183 +183 +182 +179 +179 +179 +179 +179 +175 +175 +172 +173 +173 +169 +169 +165 +165 +164 +160 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +140 +139 +133 +133 +134 +129 +129 +125 +125 +126 +120 +119 +115 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +68 +68 +64 +65 +59 +58 +58 +55 +54 +51 +50 +50 +46 +46 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +14 +14 +13 +14 +14 +13 +13 +13 +13 +14 +13 +13 +14 +13 +14 +14 +13 +13 +13 +14 +14 +13 +13 +13 +13 +14 +14 +13 +15 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +26 +27 +27 +31 +31 +30 +31 +31 +33 +33 +37 +37 +37 +41 +40 +43 +43 +44 +47 +46 +51 +50 +54 +54 +54 +58 +59 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +83 +82 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +116 +120 +120 +125 +125 +125 +130 +129 +133 +133 +133 +139 +138 +143 +143 +146 +147 +148 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +184 +184 +189 +189 +189 +191 +190 +195 +195 +195 +196 +196 +198 +199 +199 +200 +200 +200 +200 +200 +203 +203 +204 +204 +205 +204 +204 +206 +206 +207 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +204 +204 +204 +204 +205 +203 +203 +202 +200 +200 +200 +200 +198 +199 +198 +196 +196 +194 +194 +195 +190 +190 +191 +191 +190 +188 +188 +185 +184 +185 +183 +183 +178 +179 +175 +175 +174 +173 +173 +169 +169 +168 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +140 +133 +133 +132 +129 +129 +125 +126 +120 +119 +119 +116 +116 +110 +110 +109 +106 +106 +100 +100 +100 +97 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +59 +59 +54 +54 +51 +51 +51 +47 +47 +42 +42 +43 +41 +41 +37 +37 +33 +33 +33 +31 +31 +31 +31 +31 +27 +27 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +18 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +14 +14 +14 +14 +13 +13 +13 +14 +13 +14 +14 +14 +14 +14 +13 +13 +14 +13 +13 +14 +13 +14 +14 +14 +13 +13 +14 +13 +14 +14 +13 +15 +15 +15 +15 +15 +17 +17 +17 +19 +19 +21 +21 +24 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +50 +54 +54 +59 +59 +64 +65 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +99 +100 +106 +106 +110 +110 +115 +115 +115 +119 +119 +125 +125 +125 +129 +129 +130 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +156 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +178 +183 +182 +183 +185 +185 +188 +189 +189 +191 +190 +194 +194 +196 +196 +197 +198 +198 +201 +201 +200 +200 +200 +201 +200 +200 +202 +202 +205 +204 +204 +204 +205 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +204 +205 +205 +204 +204 +204 +204 +202 +203 +203 +200 +200 +200 +200 +199 +198 +199 +196 +197 +194 +194 +195 +190 +190 +188 +188 +188 +185 +185 +183 +183 +183 +179 +178 +175 +175 +175 +173 +173 +168 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +140 +133 +133 +129 +129 +130 +126 +125 +119 +120 +116 +115 +115 +110 +109 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +65 +65 +64 +58 +58 +54 +54 +54 +50 +50 +46 +46 +47 +43 +43 +41 +41 +40 +37 +37 +33 +32 +33 +31 +31 +27 +26 +25 +24 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +14 +14 +14 +13 +13 +13 +14 +13 +13 +14 +14 +13 +13 +14 +13 +13 +14 +13 +13 +14 +14 +14 +13 +14 +13 +13 +13 +13 +15 +15 +17 +17 +19 +18 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +40 +43 +42 +46 +47 +47 +50 +50 +54 +54 +55 +58 +59 +64 +64 +65 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +109 +110 +116 +115 +116 +120 +120 +126 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +158 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +180 +183 +183 +184 +185 +188 +189 +188 +191 +191 +195 +194 +195 +197 +196 +199 +198 +198 +200 +201 +201 +200 +200 +202 +202 +204 +204 +204 +204 +205 +206 +207 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +201 +200 +200 +200 +200 +198 +199 +199 +197 +196 +195 +194 +195 +190 +191 +189 +189 +188 +185 +184 +182 +182 +183 +179 +179 +175 +174 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +150 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +126 +125 +126 +120 +119 +116 +116 +115 +110 +110 +106 +106 +106 +100 +100 +95 +96 +96 +90 +89 +86 +86 +86 +82 +82 +76 +76 +73 +72 +72 +68 +68 +64 +64 +64 +59 +59 +54 +55 +54 +50 +51 +47 +46 +46 +43 +43 +41 +41 +42 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +16 +13 +13 +12 +13 +14 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +13 +14 +14 +14 +14 +14 +14 +14 +13 +14 +14 +13 +13 +13 +14 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +46 +47 +50 +50 +50 +55 +55 +58 +59 +59 +64 +64 +68 +68 +68 +73 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +116 +119 +119 +120 +125 +126 +129 +129 +134 +133 +134 +139 +139 +143 +143 +143 +147 +147 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +166 +169 +169 +172 +173 +174 +175 +175 +179 +179 +182 +183 +182 +184 +184 +189 +188 +188 +190 +190 +194 +194 +194 +197 +197 +198 +198 +199 +201 +201 +200 +201 +202 +202 +203 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +204 +204 +204 +204 +205 +202 +202 +200 +200 +200 +200 +200 +198 +198 +199 +196 +197 +195 +194 +195 +191 +191 +189 +188 +184 +185 +184 +182 +182 +179 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +130 +125 +125 +125 +119 +119 +116 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +73 +72 +72 +68 +68 +65 +64 +64 +58 +58 +54 +54 +55 +50 +50 +46 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +27 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +14 +14 +13 +13 +13 +14 +14 +14 +14 +13 +13 +14 +13 +13 +14 +13 +14 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +26 +27 +27 +31 +31 +33 +34 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +46 +50 +50 +54 +54 +55 +58 +58 +64 +64 +69 +68 +68 +72 +72 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +115 +119 +120 +119 +126 +125 +129 +129 +129 +133 +133 +139 +140 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +168 +169 +169 +173 +173 +175 +175 +175 +178 +179 +178 +178 +179 +183 +183 +185 +184 +184 +188 +189 +191 +190 +192 +194 +194 +196 +196 +198 +198 +198 +200 +200 +200 +200 +200 +202 +202 +202 +202 +202 +204 +204 +204 +205 +204 +206 +207 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +203 +202 +200 +201 +200 +201 +201 +198 +198 +196 +196 +194 +194 +194 +190 +190 +188 +188 +189 +185 +184 +183 +183 +182 +178 +179 +174 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +130 +129 +125 +125 +120 +119 +120 +115 +115 +109 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +69 +65 +64 +58 +58 +55 +55 +54 +50 +51 +47 +47 +47 +43 +43 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +29 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +13 +14 +14 +14 +14 +14 +14 +14 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +15 +15 +15 +16 +17 +17 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +30 +31 +31 +33 +33 +37 +37 +37 +41 +40 +43 +43 +47 +46 +47 +51 +51 +55 +54 +54 +58 +58 +64 +65 +65 +68 +68 +73 +72 +72 +76 +76 +82 +82 +83 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +116 +116 +119 +120 +126 +126 +126 +129 +130 +133 +134 +133 +139 +139 +143 +143 +148 +147 +147 +151 +151 +157 +157 +157 +161 +161 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +178 +179 +183 +183 +185 +184 +184 +189 +188 +190 +190 +191 +194 +194 +195 +195 +195 +197 +196 +198 +198 +198 +200 +201 +200 +200 +201 +203 +203 +204 +204 +204 +205 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +204 +204 +204 +204 +202 +202 +202 +200 +200 +200 +201 +201 +198 +198 +197 +197 +196 +194 +195 +190 +190 +191 +189 +188 +184 +184 +185 +182 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +164 +161 +161 +161 +157 +157 +152 +151 +151 +147 +147 +143 +144 +143 +139 +140 +134 +133 +130 +129 +129 +125 +126 +120 +119 +120 +116 +116 +115 +116 +115 +110 +110 +106 +106 +105 +100 +100 +96 +96 +96 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +68 +68 +68 +64 +64 +59 +59 +59 +55 +55 +51 +50 +49 +47 +46 +43 +43 +40 +41 +41 +37 +37 +33 +32 +33 +31 +31 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +14 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +26 +32 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +50 +50 +54 +54 +59 +59 +59 +64 +64 +68 +68 +72 +72 +72 +76 +82 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +99 +105 +106 +109 +109 +111 +115 +116 +120 +120 +125 +126 +126 +129 +129 +133 +134 +133 +139 +139 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +156 +157 +158 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +179 +179 +179 +183 +182 +185 +185 +185 +188 +188 +191 +190 +194 +195 +195 +196 +196 +198 +198 +198 +201 +201 +200 +201 +200 +202 +202 +205 +204 +204 +204 +204 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +205 +204 +204 +204 +202 +202 +201 +200 +200 +200 +200 +198 +198 +199 +197 +196 +195 +194 +190 +191 +190 +188 +189 +184 +185 +184 +183 +183 +179 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +152 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +126 +119 +119 +115 +115 +116 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +69 +65 +64 +65 +58 +58 +54 +54 +51 +50 +51 +46 +47 +43 +43 +43 +41 +41 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +14 +13 +14 +13 +13 +13 +14 +14 +13 +13 +13 +13 +13 +14 +13 +13 +15 +15 +15 +17 +17 +20 +19 +21 +21 +21 +25 +24 +27 +27 +27 +31 +30 +33 +33 +33 +37 +37 +41 +41 +41 +43 +42 +46 +47 +47 +51 +50 +55 +54 +58 +58 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +101 +106 +105 +109 +110 +110 +115 +116 +119 +119 +120 +126 +126 +126 +125 +125 +129 +129 +134 +133 +133 +139 +139 +143 +143 +144 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +169 +169 +172 +173 +175 +175 +175 +178 +179 +183 +183 +183 +185 +185 +188 +189 +190 +190 +190 +194 +195 +196 +196 +196 +198 +198 +200 +201 +200 +200 +200 +202 +202 +203 +205 +204 +204 +204 +206 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +205 +204 +204 +205 +204 +202 +203 +203 +200 +201 +200 +200 +198 +198 +198 +196 +196 +194 +195 +194 +190 +191 +189 +188 +189 +185 +184 +183 +182 +182 +179 +179 +174 +175 +175 +172 +173 +169 +169 +165 +164 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +140 +139 +133 +133 +129 +129 +129 +125 +125 +119 +120 +115 +116 +116 +110 +110 +106 +106 +106 +100 +100 +100 +100 +99 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +68 +68 +68 +64 +65 +58 +59 +58 +54 +55 +55 +54 +55 +51 +51 +47 +46 +47 +43 +43 +41 +41 +39 +37 +37 +33 +33 +31 +31 +31 +28 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +14 +13 +14 +14 +14 +14 +14 +13 +13 +13 +14 +13 +13 +14 +13 +13 +14 +14 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +22 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +43 +43 +43 +46 +47 +50 +51 +51 +55 +55 +58 +58 +58 +65 +64 +68 +68 +69 +72 +72 +76 +76 +77 +82 +82 +86 +86 +90 +90 +90 +95 +96 +100 +100 +100 +105 +106 +106 +106 +106 +110 +110 +115 +116 +115 +120 +120 +126 +125 +126 +129 +130 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +172 +173 +173 +175 +174 +179 +178 +179 +183 +182 +184 +185 +185 +189 +189 +190 +190 +191 +194 +195 +196 +196 +197 +199 +198 +200 +200 +200 +200 +201 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +204 +204 +205 +204 +204 +202 +202 +200 +201 +200 +200 +200 +198 +199 +198 +196 +197 +195 +194 +194 +190 +191 +188 +189 +189 +185 +184 +182 +183 +179 +179 +179 +175 +174 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +134 +133 +133 +130 +130 +125 +126 +126 +119 +119 +120 +119 +119 +116 +116 +110 +109 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +87 +86 +86 +82 +82 +76 +76 +76 +72 +72 +72 +72 +72 +68 +68 +65 +64 +64 +58 +58 +55 +54 +53 +50 +50 +46 +47 +43 +43 +42 +41 +41 +37 +37 +37 +32 +33 +31 +30 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +13 +14 +14 +14 +13 +14 +14 +14 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +32 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +50 +54 +54 +58 +59 +59 +65 +65 +68 +68 +72 +72 +73 +76 +76 +82 +82 +82 +86 +86 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +107 +110 +110 +116 +116 +120 +120 +120 +125 +126 +129 +130 +129 +133 +133 +134 +133 +133 +139 +139 +143 +143 +144 +147 +147 +151 +151 +153 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +185 +185 +185 +188 +189 +191 +190 +194 +194 +194 +196 +196 +198 +199 +198 +201 +201 +200 +200 +201 +202 +202 +204 +205 +204 +204 +204 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +205 +205 +204 +205 +205 +205 +202 +202 +202 +200 +200 +200 +201 +200 +198 +199 +196 +197 +195 +194 +194 +191 +191 +188 +189 +188 +185 +185 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +156 +157 +157 +151 +151 +147 +147 +147 +144 +143 +143 +143 +143 +140 +139 +133 +133 +133 +129 +129 +125 +125 +123 +120 +119 +116 +116 +109 +110 +110 +106 +106 +100 +100 +100 +96 +96 +96 +96 +96 +90 +90 +86 +86 +87 +82 +82 +76 +76 +73 +72 +72 +68 +68 +64 +64 +64 +58 +58 +55 +55 +54 +51 +50 +47 +47 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +31 +31 +31 +27 +26 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +14 +14 +13 +13 +14 +14 +13 +14 +14 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +15 +15 +18 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +32 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +46 +50 +51 +51 +54 +55 +58 +59 +58 +64 +65 +64 +64 +64 +69 +68 +73 +72 +72 +76 +76 +82 +82 +83 +86 +87 +90 +90 +95 +96 +96 +100 +100 +105 +106 +106 +110 +109 +109 +110 +110 +115 +116 +119 +120 +120 +125 +125 +130 +130 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +172 +173 +175 +174 +178 +179 +179 +182 +183 +185 +184 +184 +189 +189 +190 +191 +190 +195 +194 +196 +196 +197 +199 +198 +201 +200 +201 +200 +201 +202 +202 +205 +204 +204 +204 +204 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +204 +205 +205 +204 +203 +202 +202 +200 +200 +200 +201 +200 +198 +198 +196 +197 +196 +195 +194 +191 +190 +191 +188 +189 +185 +185 +185 +183 +182 +179 +179 +175 +175 +174 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +141 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +120 +120 +115 +116 +115 +115 +115 +110 +110 +106 +106 +106 +99 +100 +96 +96 +93 +90 +90 +86 +86 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +69 +69 +64 +64 +59 +59 +58 +55 +54 +51 +50 +46 +47 +47 +42 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +16 +15 +15 +15 +16 +15 +15 +15 +13 +13 +12 +13 +13 +14 +14 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +13 +14 +14 +13 +14 +14 +13 +14 +13 +14 +14 +14 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +22 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +36 +41 +41 +41 +41 +41 +43 +43 +47 +47 +47 +50 +50 +54 +55 +55 +59 +58 +64 +64 +68 +68 +68 +73 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +97 +100 +100 +106 +106 +109 +110 +110 +116 +115 +119 +120 +119 +125 +125 +130 +129 +129 +133 +133 +139 +140 +139 +143 +143 +147 +147 +148 +151 +151 +157 +157 +161 +161 +162 +165 +165 +169 +169 +169 +173 +173 +175 +174 +175 +179 +179 +182 +183 +182 +184 +184 +188 +188 +189 +191 +191 +195 +194 +197 +197 +196 +198 +199 +200 +200 +201 +200 +201 +202 +202 +202 +204 +204 +204 +204 +204 +206 +207 +207 +206 +207 +206 +206 +206 +207 +207 +206 +207 +206 +206 +204 +204 +204 +205 +204 +202 +202 +202 +200 +201 +200 +201 +201 +198 +199 +197 +197 +197 +195 +195 +190 +190 +188 +189 +189 +185 +184 +183 +182 +182 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +160 +161 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +133 +133 +133 +129 +129 +125 +125 +126 +119 +119 +116 +115 +110 +109 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +59 +59 +59 +54 +54 +50 +50 +50 +46 +47 +43 +43 +43 +41 +40 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +22 +21 +21 +19 +19 +17 +18 +17 +14 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +14 +14 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +14 +13 +14 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +26 +25 +25 +27 +27 +31 +31 +31 +33 +33 +33 +33 +33 +37 +37 +40 +41 +41 +43 +43 +47 +47 +47 +51 +50 +54 +55 +58 +59 +59 +65 +64 +68 +68 +68 +72 +72 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +95 +97 +95 +100 +100 +105 +106 +106 +109 +110 +116 +115 +116 +120 +119 +125 +126 +125 +129 +129 +134 +133 +134 +139 +139 +143 +143 +146 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +164 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +184 +185 +188 +188 +188 +191 +191 +194 +194 +194 +197 +197 +198 +198 +198 +200 +201 +200 +200 +200 +203 +202 +204 +204 +205 +204 +205 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +204 +205 +204 +204 +204 +202 +202 +201 +200 +201 +200 +201 +199 +198 +196 +196 +197 +195 +194 +190 +191 +190 +188 +189 +189 +189 +188 +184 +185 +183 +183 +182 +179 +179 +175 +175 +173 +172 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +134 +133 +131 +129 +129 +125 +125 +119 +119 +119 +115 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +68 +68 +64 +64 +59 +58 +58 +55 +54 +51 +50 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +34 +33 +33 +31 +31 +27 +28 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +14 +13 +14 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +14 +14 +14 +14 +14 +14 +13 +14 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +38 +41 +41 +43 +43 +46 +47 +47 +51 +51 +54 +54 +54 +59 +58 +58 +58 +59 +64 +65 +68 +68 +68 +73 +72 +76 +76 +81 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +105 +106 +110 +110 +110 +116 +116 +119 +119 +120 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +152 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +178 +179 +178 +182 +183 +184 +185 +184 +188 +188 +191 +191 +191 +195 +194 +197 +197 +196 +199 +198 +200 +200 +200 +200 +200 +203 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +204 +204 +204 +204 +204 +202 +203 +200 +200 +201 +200 +200 +199 +198 +199 +197 +197 +197 +196 +196 +195 +194 +190 +190 +191 +189 +188 +185 +185 +185 +182 +183 +178 +178 +179 +178 +179 +175 +175 +173 +172 +173 +169 +169 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +148 +147 +147 +143 +143 +139 +139 +139 +134 +133 +130 +129 +129 +125 +125 +119 +119 +120 +115 +116 +109 +109 +110 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +77 +76 +72 +72 +68 +69 +68 +65 +64 +58 +58 +59 +55 +55 +51 +51 +47 +47 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +14 +13 +13 +14 +13 +14 +14 +14 +13 +13 +14 +14 +14 +13 +13 +13 +14 +13 +13 +14 +14 +13 +13 +14 +14 +13 +15 +15 +15 +15 +15 +17 +17 +17 +19 +19 +21 +21 +23 +25 +25 +27 +27 +31 +31 +31 +33 +33 +36 +36 +37 +41 +41 +41 +41 +41 +43 +43 +47 +47 +47 +51 +51 +55 +54 +58 +58 +58 +64 +64 +69 +68 +68 +72 +72 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +109 +109 +110 +116 +116 +120 +119 +119 +125 +125 +126 +126 +125 +129 +130 +134 +134 +133 +139 +139 +143 +143 +144 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +179 +182 +182 +184 +185 +185 +188 +188 +191 +190 +195 +194 +194 +196 +196 +199 +199 +198 +201 +200 +200 +201 +200 +200 +201 +203 +202 +202 +205 +204 +204 +204 +204 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +203 +200 +200 +200 +200 +201 +198 +198 +196 +197 +194 +195 +195 +190 +190 +189 +189 +188 +185 +185 +185 +184 +184 +183 +183 +179 +179 +178 +175 +175 +173 +172 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +134 +129 +129 +125 +125 +120 +119 +119 +115 +115 +110 +110 +109 +105 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +77 +76 +72 +72 +68 +68 +68 +64 +64 +58 +59 +58 +55 +55 +51 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +32 +31 +31 +28 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +14 +13 +14 +13 +13 +14 +14 +14 +14 +14 +13 +14 +13 +14 +14 +14 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +15 +15 +17 +16 +17 +19 +19 +21 +21 +21 +25 +25 +25 +25 +25 +27 +27 +30 +31 +31 +33 +33 +37 +37 +40 +41 +41 +43 +43 +47 +47 +47 +50 +50 +55 +54 +54 +58 +58 +64 +65 +64 +68 +68 +72 +72 +73 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +95 +96 +99 +100 +106 +106 +106 +110 +110 +115 +116 +116 +119 +119 +125 +125 +126 +129 +130 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +172 +175 +175 +179 +179 +183 +182 +183 +184 +185 +188 +188 +188 +191 +190 +195 +194 +194 +196 +196 +198 +198 +198 +200 +201 +200 +200 +201 +203 +203 +205 +205 +204 +204 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +205 +203 +202 +200 +200 +200 +201 +200 +198 +198 +198 +196 +196 +196 +196 +196 +194 +194 +190 +190 +191 +189 +188 +184 +184 +183 +183 +183 +179 +179 +174 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +152 +151 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +130 +129 +125 +126 +120 +119 +119 +116 +115 +110 +109 +110 +105 +106 +100 +100 +100 +96 +96 +89 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +58 +58 +54 +54 +51 +51 +51 +47 +47 +43 +42 +40 +41 +41 +37 +37 +33 +33 +33 +31 +31 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +20 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +12 +13 +13 +14 +13 +13 +14 +14 +14 +13 +14 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +14 +13 +13 +13 +14 +13 +13 +12 +15 +15 +15 +16 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +26 +27 +26 +31 +31 +33 +33 +33 +37 +37 +41 +41 +40 +43 +43 +46 +47 +47 +50 +50 +55 +55 +55 +59 +58 +64 +65 +68 +69 +68 +73 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +120 +119 +119 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +183 +184 +185 +189 +188 +189 +191 +190 +194 +195 +195 +196 +196 +198 +198 +200 +200 +201 +200 +200 +202 +203 +202 +204 +204 +205 +204 +204 +204 +204 +207 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +205 +204 +202 +202 +202 +202 +202 +200 +200 +200 +200 +200 +198 +199 +196 +196 +195 +194 +195 +190 +191 +188 +188 +189 +185 +185 +183 +183 +183 +178 +179 +175 +174 +175 +173 +173 +168 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +130 +129 +125 +125 +120 +119 +120 +116 +115 +110 +110 +106 +106 +106 +100 +99 +96 +95 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +73 +68 +68 +68 +64 +64 +58 +58 +55 +54 +54 +51 +51 +47 +47 +47 +42 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +22 +20 +19 +19 +17 +17 +15 +15 +15 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +13 +14 +14 +14 +14 +14 +13 +14 +14 +13 +13 +13 +14 +13 +13 +14 +13 +13 +14 +14 +13 +13 +13 +13 +14 +13 +12 +16 +15 +16 +17 +17 +19 +19 +22 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +36 +36 +41 +41 +41 +43 +43 +47 +47 +48 +51 +51 +55 +55 +58 +59 +58 +64 +64 +69 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +115 +120 +120 +119 +125 +126 +129 +129 +129 +134 +133 +139 +139 +139 +143 +143 +147 +147 +151 +151 +150 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +178 +179 +183 +182 +183 +185 +185 +188 +189 +190 +190 +190 +195 +194 +196 +196 +197 +198 +199 +199 +198 +198 +200 +201 +200 +201 +201 +202 +202 +205 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +204 +204 +205 +204 +204 +202 +202 +201 +200 +201 +200 +200 +198 +198 +198 +197 +197 +194 +194 +194 +191 +191 +189 +188 +189 +185 +184 +183 +183 +183 +178 +179 +175 +175 +173 +173 +172 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +125 +125 +125 +119 +120 +116 +115 +116 +110 +110 +106 +106 +106 +100 +96 +96 +96 +96 +90 +89 +86 +86 +87 +82 +82 +76 +76 +73 +72 +72 +68 +69 +64 +64 +64 +58 +58 +54 +54 +54 +51 +50 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +22 +21 +21 +21 +19 +20 +17 +18 +16 +15 +16 +15 +15 +15 +13 +13 +13 +13 +14 +13 +14 +14 +14 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +14 +14 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +30 +33 +33 +36 +36 +37 +41 +41 +43 +43 +43 +47 +47 +51 +50 +51 +55 +55 +58 +59 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +83 +82 +82 +86 +86 +90 +90 +90 +96 +96 +96 +96 +96 +100 +100 +105 +106 +106 +110 +110 +115 +115 +116 +119 +120 +125 +125 +130 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +166 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +182 +183 +185 +185 +188 +188 +189 +191 +191 +195 +194 +194 +196 +196 +198 +198 +199 +200 +201 +201 +200 +202 +203 +202 +204 +204 +204 +204 +205 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +205 +205 +204 +204 +204 +203 +203 +201 +200 +201 +200 +201 +198 +198 +198 +197 +196 +194 +195 +194 +191 +190 +189 +189 +184 +184 +185 +183 +183 +179 +178 +179 +175 +175 +173 +173 +172 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +144 +143 +143 +139 +139 +133 +133 +133 +129 +129 +129 +129 +129 +125 +126 +119 +120 +120 +115 +115 +110 +110 +110 +106 +106 +100 +99 +97 +96 +96 +90 +90 +86 +85 +86 +82 +82 +76 +77 +77 +72 +72 +68 +69 +68 +64 +64 +58 +58 +59 +55 +54 +51 +50 +47 +47 +47 +43 +43 +41 +40 +41 +37 +37 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +26 +26 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +14 +13 +14 +14 +14 +13 +14 +13 +13 +13 +14 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +40 +41 +43 +43 +47 +47 +47 +51 +50 +55 +55 +58 +58 +58 +65 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +95 +96 +100 +100 +106 +106 +111 +110 +110 +116 +115 +116 +116 +116 +120 +119 +125 +125 +126 +129 +129 +133 +133 +134 +139 +139 +143 +143 +143 +147 +148 +151 +151 +158 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +178 +178 +183 +183 +182 +184 +184 +189 +188 +190 +190 +190 +194 +194 +196 +196 +197 +198 +198 +200 +200 +201 +200 +201 +200 +201 +200 +202 +202 +205 +204 +205 +204 +205 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +207 +207 +204 +204 +204 +204 +205 +202 +202 +200 +200 +201 +200 +201 +199 +199 +197 +197 +197 +195 +194 +191 +190 +190 +188 +189 +185 +184 +184 +182 +182 +179 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +130 +126 +125 +119 +119 +116 +115 +116 +110 +110 +106 +105 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +72 +72 +68 +68 +65 +64 +64 +58 +58 +55 +54 +55 +51 +51 +51 +50 +50 +47 +46 +42 +43 +43 +41 +41 +37 +37 +35 +33 +33 +31 +31 +26 +27 +27 +25 +25 +21 +21 +21 +19 +19 +18 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +14 +13 +14 +14 +13 +14 +14 +13 +13 +14 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +15 +15 +17 +18 +18 +19 +19 +20 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +36 +37 +41 +41 +43 +43 +43 +46 +47 +51 +51 +51 +55 +55 +54 +54 +55 +59 +58 +64 +65 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +87 +86 +87 +90 +90 +96 +96 +96 +99 +100 +106 +105 +106 +110 +110 +115 +115 +115 +119 +119 +125 +126 +126 +129 +130 +133 +133 +140 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +182 +183 +182 +185 +184 +189 +188 +189 +191 +191 +191 +190 +191 +194 +194 +197 +196 +197 +198 +199 +201 +200 +201 +200 +201 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +204 +204 +205 +205 +205 +202 +203 +200 +200 +200 +200 +200 +198 +198 +198 +197 +196 +195 +194 +194 +190 +191 +188 +189 +189 +185 +184 +182 +182 +178 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +134 +134 +133 +129 +129 +125 +125 +126 +120 +120 +115 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +68 +68 +69 +64 +64 +58 +58 +59 +54 +55 +50 +50 +49 +47 +47 +42 +43 +41 +41 +41 +36 +37 +33 +33 +33 +31 +31 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +16 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +13 +14 +14 +13 +13 +14 +13 +14 +14 +13 +13 +13 +14 +13 +14 +13 +14 +14 +13 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +31 +31 +31 +33 +32 +37 +37 +37 +41 +41 +43 +42 +43 +47 +47 +50 +50 +51 +55 +54 +59 +58 +59 +64 +64 +69 +68 +73 +72 +72 +76 +76 +82 +82 +82 +86 +86 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +105 +106 +110 +110 +115 +116 +119 +119 +120 +125 +125 +129 +129 +129 +133 +134 +134 +133 +134 +139 +139 +143 +143 +143 +147 +147 +151 +151 +153 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +174 +175 +175 +179 +179 +183 +183 +183 +185 +185 +188 +188 +189 +190 +191 +195 +194 +197 +196 +197 +198 +198 +200 +201 +200 +201 +201 +202 +202 +202 +204 +204 +204 +205 +205 +206 +206 +206 +206 +206 +207 +207 +206 +207 +206 +206 +206 +207 +206 +204 +204 +205 +204 +204 +202 +202 +202 +200 +201 +201 +200 +201 +198 +199 +196 +197 +194 +195 +195 +191 +191 +189 +188 +189 +185 +185 +183 +182 +182 +179 +179 +175 +175 +175 +173 +173 +168 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +143 +143 +143 +139 +139 +133 +134 +133 +130 +129 +125 +125 +126 +120 +119 +116 +116 +109 +109 +110 +106 +106 +100 +100 +100 +96 +96 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +72 +72 +68 +68 +64 +64 +64 +59 +59 +54 +54 +55 +50 +51 +51 +51 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +34 +32 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +14 +13 +13 +13 +13 +13 +13 +14 +14 +14 +14 +13 +13 +13 +13 +14 +14 +14 +13 +14 +13 +13 +13 +14 +13 +12 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +42 +47 +47 +47 +50 +51 +55 +54 +55 +58 +58 +64 +64 +64 +69 +68 +72 +72 +73 +77 +76 +82 +82 +82 +86 +86 +90 +90 +97 +96 +96 +100 +100 +106 +106 +106 +110 +109 +116 +116 +116 +119 +119 +125 +125 +125 +129 +130 +134 +133 +134 +139 +140 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +176 +179 +179 +182 +182 +184 +184 +185 +188 +189 +190 +191 +190 +194 +194 +197 +197 +197 +198 +198 +201 +200 +201 +200 +201 +202 +203 +204 +205 +205 +205 +205 +206 +207 +206 +206 +206 +206 +207 +206 +206 +206 +207 +207 +206 +207 +206 +204 +204 +204 +204 +205 +202 +202 +201 +201 +201 +200 +201 +199 +198 +198 +197 +196 +194 +195 +195 +190 +191 +188 +189 +188 +185 +184 +183 +182 +183 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +164 +161 +161 +157 +157 +157 +152 +151 +147 +147 +147 +143 +143 +139 +139 +141 +133 +133 +129 +129 +126 +125 +126 +120 +120 +115 +116 +115 +110 +109 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +76 +77 +76 +72 +72 +69 +68 +68 +64 +65 +64 +65 +65 +58 +59 +55 +54 +55 +51 +50 +47 +47 +44 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +13 +14 +14 +14 +13 +14 +13 +13 +13 +14 +13 +14 +14 +14 +14 +14 +14 +13 +14 +14 +14 +14 +13 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +28 +31 +31 +33 +33 +38 +37 +37 +41 +40 +43 +43 +42 +47 +47 +50 +50 +51 +54 +55 +58 +59 +58 +65 +65 +68 +68 +68 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +91 +96 +96 +100 +100 +99 +106 +106 +110 +110 +110 +116 +115 +119 +119 +122 +125 +125 +129 +130 +133 +133 +134 +140 +139 +143 +143 +143 +147 +147 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +168 +169 +169 +173 +173 +175 +175 +175 +178 +178 +183 +183 +183 +184 +185 +188 +189 +188 +191 +191 +194 +195 +195 +196 +197 +198 +198 +200 +201 +200 +200 +200 +202 +202 +202 +204 +204 +204 +205 +204 +207 +206 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +205 +205 +204 +204 +202 +202 +202 +200 +200 +200 +201 +201 +199 +199 +197 +196 +196 +195 +195 +191 +191 +191 +188 +189 +185 +184 +183 +183 +183 +179 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +152 +147 +147 +143 +143 +139 +139 +140 +133 +133 +129 +129 +129 +125 +125 +120 +119 +120 +116 +115 +110 +109 +110 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +72 +72 +72 +68 +68 +64 +64 +64 +59 +59 +54 +54 +51 +50 +51 +47 +46 +42 +42 +42 +41 +41 +37 +37 +37 +32 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +13 +14 +13 +14 +13 +14 +14 +14 +13 +14 +14 +14 +13 +13 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +32 +31 +31 +33 +33 +37 +37 +37 +40 +41 +43 +43 +43 +46 +47 +51 +51 +51 +55 +55 +59 +58 +59 +64 +64 +68 +68 +73 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +105 +106 +110 +110 +112 +116 +115 +120 +119 +125 +125 +126 +129 +130 +133 +133 +134 +139 +139 +139 +139 +139 +143 +143 +147 +148 +147 +151 +151 +157 +157 +158 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +183 +185 +185 +189 +189 +189 +191 +191 +194 +194 +196 +196 +196 +199 +198 +200 +200 +200 +200 +200 +202 +202 +202 +204 +205 +205 +205 +204 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +207 +206 +207 +206 +204 +204 +205 +204 +204 +202 +202 +202 +201 +200 +200 +200 +200 +199 +199 +196 +197 +196 +195 +195 +191 +191 +189 +188 +189 +184 +185 +182 +182 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +148 +147 +147 +143 +143 +139 +139 +139 +133 +133 +133 +133 +133 +130 +130 +126 +125 +125 +120 +119 +115 +115 +113 +109 +110 +106 +106 +100 +99 +100 +96 +96 +90 +90 +90 +86 +86 +86 +86 +86 +82 +82 +76 +77 +77 +72 +72 +68 +69 +65 +64 +64 +58 +58 +55 +54 +55 +50 +50 +47 +47 +47 +42 +43 +41 +41 +41 +37 +37 +32 +33 +33 +31 +31 +27 +27 +26 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +14 +14 +14 +14 +13 +14 +14 +13 +14 +13 +14 +14 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +20 +19 +21 +21 +21 +25 +24 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +40 +41 +41 +43 +42 +47 +47 +47 +51 +50 +54 +55 +59 +58 +58 +64 +65 +68 +68 +69 +72 +72 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +92 +96 +96 +100 +100 +106 +106 +105 +110 +109 +115 +116 +116 +119 +120 +119 +119 +119 +126 +125 +129 +129 +129 +133 +133 +139 +139 +141 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +164 +165 +169 +169 +169 +173 +173 +175 +174 +175 +179 +178 +183 +183 +184 +185 +184 +189 +189 +190 +190 +191 +195 +195 +197 +196 +196 +198 +198 +201 +201 +201 +200 +200 +203 +202 +202 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +207 +206 +206 +206 +206 +204 +204 +204 +204 +204 +203 +203 +202 +200 +201 +200 +201 +199 +199 +199 +196 +196 +194 +195 +194 +190 +190 +188 +188 +189 +184 +185 +182 +182 +183 +178 +179 +175 +175 +175 +173 +173 +169 +169 +166 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +148 +143 +143 +139 +139 +139 +133 +133 +130 +130 +127 +125 +125 +119 +119 +115 +115 +116 +110 +110 +106 +106 +106 +100 +100 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +83 +83 +77 +76 +76 +72 +72 +68 +68 +69 +64 +64 +59 +59 +58 +54 +55 +50 +50 +51 +47 +47 +43 +43 +43 +41 +40 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +14 +14 +14 +14 +13 +14 +14 +13 +13 +13 +14 +13 +14 +13 +14 +14 +14 +13 +14 +13 +14 +13 +13 +14 +13 +13 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +42 +47 +47 +47 +50 +51 +55 +54 +54 +58 +58 +64 +64 +65 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +109 +110 +110 +115 +115 +119 +119 +120 +126 +125 +129 +129 +133 +133 +133 +140 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +168 +169 +169 +169 +169 +173 +173 +175 +175 +175 +178 +179 +183 +183 +183 +184 +185 +188 +189 +189 +190 +190 +195 +194 +194 +196 +197 +198 +199 +198 +200 +200 +200 +200 +202 +203 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +206 +204 +204 +205 +204 +204 +202 +202 +200 +200 +200 +200 +200 +199 +198 +198 +196 +197 +195 +195 +194 +191 +190 +188 +188 +189 +184 +185 +183 +183 +178 +178 +179 +175 +175 +173 +173 +173 +169 +169 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +149 +147 +147 +143 +143 +139 +139 +139 +133 +134 +129 +130 +129 +125 +125 +126 +125 +126 +120 +119 +115 +116 +116 +110 +109 +106 +106 +101 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +77 +72 +72 +72 +69 +69 +64 +64 +65 +58 +58 +54 +54 +51 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +13 +14 +13 +13 +14 +13 +14 +14 +14 +14 +14 +13 +14 +13 +14 +14 +13 +13 +13 +13 +13 +14 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +22 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +41 +41 +41 +43 +43 +47 +47 +47 +50 +51 +54 +54 +56 +58 +59 +64 +64 +69 +68 +68 +72 +73 +76 +76 +76 +82 +82 +82 +82 +82 +86 +87 +90 +90 +90 +96 +96 +100 +100 +102 +106 +106 +110 +110 +116 +116 +115 +119 +119 +125 +125 +125 +130 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +182 +183 +185 +185 +184 +189 +188 +191 +191 +194 +195 +194 +197 +197 +198 +198 +199 +201 +200 +201 +200 +200 +202 +202 +205 +204 +204 +204 +205 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +205 +202 +202 +201 +201 +201 +201 +200 +198 +198 +200 +196 +196 +195 +194 +191 +191 +190 +188 +189 +185 +185 +185 +183 +183 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +168 +167 +165 +165 +160 +161 +157 +157 +157 +151 +151 +147 +148 +147 +143 +143 +143 +143 +143 +139 +139 +133 +134 +134 +129 +129 +125 +126 +121 +120 +120 +116 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +77 +76 +72 +72 +69 +68 +68 +64 +65 +59 +59 +58 +54 +54 +51 +51 +51 +47 +47 +43 +43 +43 +41 +40 +37 +37 +37 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +14 +13 +12 +13 +14 +13 +13 +13 +13 +14 +14 +13 +14 +14 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +14 +14 +13 +13 +13 +13 +13 +13 +15 +15 +17 +17 +19 +20 +19 +21 +21 +25 +25 +25 +27 +27 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +42 +43 +42 +47 +46 +50 +51 +51 +55 +54 +58 +59 +59 +64 +65 +64 +65 +64 +69 +68 +72 +72 +72 +72 +72 +77 +77 +78 +82 +82 +87 +85 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +110 +110 +115 +116 +119 +119 +120 +125 +125 +130 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +179 +178 +179 +183 +182 +184 +184 +184 +189 +189 +191 +190 +191 +195 +194 +196 +196 +196 +198 +199 +201 +200 +201 +201 +200 +202 +202 +205 +204 +204 +204 +205 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +207 +205 +205 +205 +204 +204 +203 +202 +200 +201 +200 +200 +200 +198 +198 +199 +197 +197 +195 +195 +195 +191 +190 +189 +189 +189 +185 +185 +182 +183 +183 +179 +179 +175 +174 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +140 +139 +139 +133 +133 +129 +129 +130 +125 +125 +119 +119 +120 +115 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +95 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +69 +68 +64 +64 +59 +59 +58 +55 +54 +51 +50 +51 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +13 +14 +13 +14 +13 +14 +14 +13 +14 +13 +14 +13 +13 +14 +14 +14 +13 +13 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +15 +15 +15 +17 +17 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +28 +31 +31 +33 +33 +37 +36 +37 +41 +41 +43 +42 +43 +47 +46 +47 +47 +47 +50 +51 +55 +55 +55 +59 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +87 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +115 +119 +119 +119 +125 +125 +129 +129 +130 +133 +133 +139 +139 +140 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +168 +169 +169 +173 +173 +175 +174 +175 +179 +179 +183 +183 +183 +185 +185 +189 +188 +188 +191 +191 +194 +194 +195 +196 +196 +198 +199 +201 +200 +201 +200 +200 +202 +203 +203 +204 +204 +204 +205 +204 +206 +206 +206 +207 +206 +206 +207 +206 +207 +206 +207 +206 +206 +206 +204 +204 +206 +204 +204 +202 +202 +202 +200 +200 +200 +200 +200 +198 +198 +197 +196 +196 +194 +195 +190 +191 +191 +188 +189 +185 +184 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +173 +173 +173 +169 +170 +165 +165 +165 +161 +160 +157 +157 +151 +151 +151 +147 +147 +143 +143 +142 +139 +139 +134 +133 +133 +129 +129 +126 +126 +126 +120 +120 +116 +116 +116 +110 +110 +106 +106 +103 +100 +100 +97 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +69 +68 +65 +65 +65 +58 +58 +55 +54 +50 +50 +50 +47 +47 +43 +42 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +14 +13 +14 +14 +13 +14 +13 +14 +13 +13 +14 +14 +14 +13 +14 +13 +13 +13 +14 +14 +14 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +23 +25 +24 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +41 +41 +41 +43 +43 +47 +47 +47 +51 +51 +54 +54 +58 +58 +59 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +99 +100 +106 +106 +110 +109 +110 +116 +116 +120 +119 +119 +125 +125 +129 +130 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +162 +161 +161 +165 +165 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +185 +185 +185 +189 +188 +191 +191 +195 +194 +194 +196 +196 +198 +198 +198 +200 +200 +201 +200 +200 +203 +202 +205 +204 +204 +204 +204 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +200 +200 +201 +200 +200 +198 +198 +198 +196 +196 +195 +194 +191 +190 +190 +188 +188 +184 +185 +185 +183 +183 +183 +182 +183 +178 +178 +175 +175 +175 +173 +173 +169 +168 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +130 +126 +125 +119 +120 +119 +115 +116 +110 +110 +107 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +72 +72 +69 +68 +65 +64 +65 +58 +58 +55 +55 +54 +51 +51 +47 +47 +46 +43 +43 +41 +41 +40 +37 +37 +33 +33 +33 +31 +31 +27 +27 +26 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +13 +14 +14 +14 +14 +13 +13 +14 +14 +13 +13 +13 +14 +14 +13 +14 +13 +13 +13 +14 +13 +14 +14 +13 +13 +14 +14 +14 +13 +15 +15 +17 +17 +19 +19 +19 +21 +20 +25 +25 +25 +27 +27 +27 +27 +27 +31 +31 +33 +33 +33 +37 +36 +41 +41 +41 +43 +43 +47 +47 +51 +51 +51 +55 +54 +58 +58 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +77 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +109 +115 +116 +120 +119 +119 +125 +125 +129 +129 +129 +133 +133 +139 +139 +144 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +174 +175 +179 +179 +183 +183 +184 +185 +185 +188 +188 +190 +191 +191 +195 +195 +196 +196 +196 +198 +198 +201 +201 +200 +200 +201 +202 +202 +203 +204 +204 +204 +204 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +204 +204 +204 +204 +203 +202 +202 +200 +200 +200 +201 +201 +198 +198 +196 +196 +196 +194 +194 +195 +194 +195 +190 +190 +189 +189 +189 +185 +185 +182 +183 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +158 +158 +151 +151 +147 +147 +148 +143 +143 +139 +139 +135 +134 +133 +129 +129 +126 +126 +125 +119 +119 +115 +115 +115 +109 +109 +106 +106 +106 +100 +100 +95 +96 +96 +90 +90 +86 +86 +83 +82 +82 +76 +76 +72 +72 +72 +68 +69 +64 +65 +64 +59 +59 +55 +55 +55 +50 +50 +47 +47 +47 +43 +43 +41 +40 +38 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +13 +14 +13 +14 +13 +14 +14 +13 +14 +13 +14 +14 +14 +14 +13 +13 +13 +13 +13 +13 +14 +12 +15 +15 +15 +17 +17 +17 +17 +17 +19 +18 +21 +21 +21 +25 +25 +27 +27 +30 +30 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +50 +51 +55 +54 +58 +58 +59 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +109 +115 +115 +119 +120 +126 +126 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +173 +173 +173 +175 +174 +179 +179 +179 +182 +183 +185 +185 +185 +188 +189 +191 +190 +190 +194 +194 +196 +196 +197 +198 +198 +200 +200 +200 +200 +201 +203 +202 +204 +205 +204 +204 +204 +204 +204 +204 +207 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +205 +202 +202 +202 +200 +200 +201 +200 +200 +200 +200 +198 +198 +199 +196 +196 +195 +195 +191 +190 +190 +188 +188 +185 +184 +185 +182 +182 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +166 +161 +161 +157 +157 +152 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +130 +125 +125 +126 +119 +119 +115 +115 +116 +110 +110 +106 +105 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +65 +58 +55 +54 +51 +50 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +26 +27 +25 +25 +26 +21 +21 +19 +19 +17 +16 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +12 +13 +14 +13 +14 +13 +14 +13 +14 +14 +13 +13 +13 +14 +14 +14 +13 +14 +13 +14 +14 +14 +13 +14 +13 +13 +14 +14 +13 +14 +13 +13 +15 +15 +17 +17 +18 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +36 +37 +37 +41 +41 +43 +43 +42 +46 +47 +51 +50 +54 +55 +54 +58 +58 +65 +64 +64 +69 +68 +72 +72 +72 +76 +77 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +99 +106 +106 +106 +109 +110 +115 +115 +116 +119 +120 +125 +125 +125 +129 +129 +133 +134 +133 +139 +140 +144 +143 +143 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +178 +182 +183 +184 +185 +185 +189 +188 +190 +190 +194 +195 +195 +196 +196 +198 +198 +198 +200 +200 +200 +200 +200 +200 +200 +202 +202 +202 +204 +205 +204 +204 +205 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +205 +202 +203 +200 +200 +200 +200 +201 +198 +198 +196 +196 +197 +194 +195 +190 +191 +191 +189 +189 +185 +185 +185 +183 +183 +179 +179 +179 +174 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +140 +133 +133 +133 +129 +129 +126 +126 +120 +119 +120 +116 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +87 +82 +82 +82 +76 +76 +72 +72 +69 +68 +68 +64 +65 +58 +58 +59 +55 +55 +51 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +14 +12 +13 +13 +14 +14 +14 +14 +13 +13 +14 +13 +14 +14 +13 +14 +13 +14 +14 +13 +13 +14 +14 +14 +13 +14 +13 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +51 +54 +54 +55 +58 +58 +64 +64 +64 +69 +68 +72 +72 +72 +76 +76 +83 +82 +86 +86 +86 +90 +90 +96 +95 +96 +100 +99 +106 +105 +106 +110 +109 +116 +115 +116 +119 +119 +125 +125 +125 +129 +129 +134 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +183 +183 +182 +184 +184 +189 +189 +188 +190 +190 +191 +190 +190 +194 +194 +196 +196 +196 +198 +198 +200 +200 +201 +200 +201 +202 +202 +202 +202 +202 +205 +205 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +203 +202 +200 +200 +200 +200 +200 +199 +199 +198 +196 +197 +195 +194 +195 +191 +191 +189 +188 +184 +184 +185 +183 +183 +178 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +126 +125 +119 +119 +115 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +59 +59 +54 +54 +55 +51 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +20 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +13 +13 +13 +13 +14 +13 +14 +14 +14 +14 +13 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +50 +50 +54 +54 +59 +59 +65 +65 +64 +68 +68 +72 +72 +73 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +109 +116 +116 +116 +119 +120 +125 +126 +125 +130 +129 +133 +133 +134 +139 +139 +143 +143 +144 +147 +147 +151 +151 +151 +157 +157 +161 +161 +165 +165 +165 +168 +169 +173 +173 +173 +175 +175 +179 +179 +178 +182 +183 +185 +185 +185 +188 +189 +190 +190 +191 +194 +194 +197 +196 +198 +198 +198 +200 +200 +200 +200 +201 +203 +202 +203 +202 +202 +204 +204 +205 +204 +205 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +207 +206 +204 +204 +204 +204 +204 +203 +203 +202 +201 +200 +200 +200 +201 +198 +198 +197 +197 +195 +195 +195 +190 +191 +188 +188 +189 +184 +184 +183 +183 +183 +179 +179 +174 +175 +175 +173 +173 +169 +169 +168 +165 +165 +161 +161 +158 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +130 +130 +129 +125 +125 +119 +119 +119 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +69 +64 +64 +58 +59 +54 +54 +54 +51 +50 +47 +47 +47 +43 +43 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +29 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +14 +15 +13 +13 +13 +12 +13 +14 +14 +14 +13 +13 +14 +13 +14 +14 +13 +13 +13 +13 +14 +13 +13 +14 +14 +13 +13 +13 +13 +13 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +34 +37 +37 +41 +41 +41 +43 +43 +47 +47 +51 +51 +51 +54 +55 +59 +59 +59 +65 +65 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +87 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +109 +110 +116 +116 +119 +119 +120 +125 +125 +129 +129 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +165 +165 +164 +169 +169 +173 +173 +173 +175 +175 +178 +179 +180 +183 +182 +185 +185 +188 +189 +189 +190 +190 +195 +195 +194 +197 +196 +197 +196 +196 +198 +198 +200 +200 +200 +200 +200 +202 +202 +203 +204 +204 +204 +204 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +203 +200 +200 +201 +200 +200 +198 +199 +198 +196 +196 +195 +194 +194 +191 +190 +189 +189 +189 +184 +185 +183 +183 +183 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +130 +129 +125 +125 +125 +119 +119 +116 +116 +115 +110 +110 +106 +105 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +72 +72 +72 +68 +68 +65 +64 +64 +58 +59 +59 +58 +59 +55 +55 +50 +50 +51 +47 +47 +42 +43 +42 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +14 +14 +13 +14 +13 +13 +14 +13 +14 +13 +13 +14 +13 +13 +14 +13 +13 +14 +13 +14 +14 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +50 +50 +55 +55 +59 +58 +58 +64 +64 +68 +68 +69 +72 +72 +77 +76 +83 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +109 +110 +116 +116 +119 +120 +120 +125 +125 +129 +129 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +175 +175 +175 +179 +179 +182 +183 +182 +184 +185 +185 +184 +185 +188 +188 +190 +191 +191 +194 +194 +196 +196 +198 +199 +198 +200 +200 +200 +200 +200 +202 +202 +204 +204 +204 +205 +204 +206 +206 +207 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +203 +201 +200 +200 +200 +200 +199 +198 +199 +196 +196 +194 +194 +195 +190 +190 +189 +188 +184 +184 +185 +182 +183 +179 +179 +179 +174 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +158 +151 +151 +147 +147 +144 +143 +143 +139 +139 +133 +133 +133 +129 +130 +125 +125 +125 +119 +120 +116 +115 +116 +110 +109 +106 +106 +106 +100 +100 +96 +95 +90 +90 +90 +86 +86 +82 +82 +82 +77 +76 +72 +72 +73 +68 +68 +64 +64 +64 +58 +58 +54 +54 +55 +50 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +33 +33 +33 +31 +31 +26 +27 +27 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +14 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +13 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +40 +41 +41 +43 +42 +47 +47 +47 +50 +50 +55 +55 +56 +58 +58 +64 +64 +69 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +119 +119 +119 +125 +125 +130 +129 +129 +133 +133 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +153 +157 +157 +161 +161 +165 +165 +165 +169 +169 +172 +173 +173 +175 +175 +175 +175 +175 +178 +179 +183 +183 +183 +185 +184 +188 +189 +190 +190 +190 +194 +194 +196 +196 +196 +199 +198 +200 +200 +200 +200 +200 +203 +202 +202 +204 +204 +204 +204 +205 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +205 +204 +204 +204 +202 +202 +202 +200 +201 +200 +200 +201 +198 +198 +196 +196 +195 +194 +194 +190 +191 +188 +188 +189 +185 +185 +183 +183 +182 +179 +178 +175 +175 +175 +173 +173 +169 +168 +169 +165 +164 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +120 +119 +120 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +65 +59 +58 +58 +54 +55 +50 +51 +51 +47 +46 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +14 +13 +13 +14 +13 +14 +14 +13 +14 +14 +13 +13 +13 +13 +14 +13 +13 +14 +14 +13 +14 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +40 +41 +41 +42 +43 +47 +46 +51 +51 +50 +54 +55 +58 +59 +59 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +87 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +116 +115 +116 +116 +119 +120 +125 +125 +125 +129 +130 +133 +133 +135 +139 +139 +143 +143 +147 +147 +147 +151 +151 +156 +157 +157 +161 +161 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +178 +178 +179 +183 +182 +184 +185 +185 +188 +188 +190 +191 +190 +194 +194 +196 +197 +196 +198 +198 +201 +200 +201 +200 +201 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +201 +200 +200 +200 +200 +198 +198 +198 +196 +196 +195 +194 +194 +190 +190 +189 +188 +188 +185 +184 +182 +182 +183 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +141 +133 +133 +130 +129 +126 +125 +126 +119 +119 +116 +115 +115 +110 +110 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +64 +65 +64 +58 +58 +54 +55 +55 +50 +51 +47 +47 +44 +43 +42 +41 +40 +37 +37 +37 +33 +33 +31 +31 +32 +27 +27 +25 +25 +26 +21 +21 +19 +19 +20 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +13 +13 +14 +14 +13 +14 +13 +14 +13 +13 +13 +14 +14 +13 +14 +14 +14 +13 +13 +14 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +28 +31 +31 +33 +33 +37 +37 +37 +41 +40 +43 +43 +43 +47 +47 +50 +51 +51 +55 +55 +58 +58 +58 +64 +64 +68 +68 +68 +72 +73 +76 +76 +83 +82 +81 +86 +86 +90 +90 +90 +96 +96 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +116 +117 +119 +120 +125 +125 +130 +129 +130 +133 +134 +139 +139 +139 +143 +143 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +164 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +178 +182 +182 +185 +185 +185 +188 +188 +190 +190 +191 +194 +195 +196 +196 +198 +198 +199 +200 +200 +200 +200 +200 +202 +202 +204 +204 +204 +204 +204 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +204 +204 +204 +204 +204 +202 +203 +200 +200 +200 +200 +200 +198 +198 +198 +196 +197 +195 +194 +195 +191 +190 +189 +188 +185 +185 +185 +183 +183 +179 +179 +179 +175 +175 +173 +172 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +143 +143 +143 +139 +140 +134 +133 +133 +129 +129 +125 +125 +125 +119 +119 +115 +116 +116 +110 +109 +106 +106 +106 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +76 +76 +76 +72 +72 +68 +68 +68 +64 +65 +58 +59 +55 +54 +54 +50 +51 +47 +47 +48 +43 +43 +41 +40 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +14 +13 +14 +14 +14 +13 +14 +13 +13 +13 +14 +14 +13 +14 +14 +13 +12 +15 +15 +17 +17 +18 +19 +19 +21 +21 +26 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +40 +43 +43 +43 +47 +47 +51 +50 +51 +54 +54 +58 +59 +65 +65 +64 +69 +69 +72 +72 +72 +76 +76 +76 +76 +76 +82 +82 +86 +86 +86 +90 +89 +96 +96 +96 +100 +100 +105 +106 +109 +110 +110 +115 +116 +120 +119 +120 +125 +125 +126 +126 +125 +130 +130 +133 +133 +134 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +164 +169 +169 +173 +173 +173 +174 +175 +178 +179 +178 +183 +183 +185 +184 +188 +188 +188 +190 +191 +194 +194 +194 +196 +196 +199 +198 +198 +200 +200 +200 +201 +200 +202 +202 +204 +204 +204 +204 +204 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +205 +204 +204 +203 +202 +200 +200 +201 +200 +201 +198 +198 +197 +196 +197 +194 +195 +191 +190 +190 +188 +189 +185 +184 +184 +183 +182 +179 +179 +179 +175 +175 +172 +173 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +147 +147 +147 +143 +143 +139 +139 +140 +133 +134 +130 +129 +127 +125 +125 +119 +119 +116 +115 +116 +109 +110 +106 +106 +105 +100 +100 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +58 +58 +54 +54 +51 +51 +51 +47 +47 +42 +43 +43 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +16 +13 +13 +12 +13 +14 +13 +13 +13 +13 +14 +14 +13 +14 +13 +13 +13 +14 +13 +14 +13 +14 +14 +13 +13 +14 +13 +14 +13 +13 +13 +13 +16 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +31 +31 +31 +31 +33 +33 +37 +37 +38 +41 +41 +43 +43 +47 +47 +47 +50 +50 +54 +55 +55 +58 +59 +58 +59 +59 +65 +64 +68 +68 +68 +72 +72 +76 +76 +78 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +106 +106 +106 +110 +110 +116 +116 +115 +119 +119 +125 +125 +127 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +174 +175 +175 +179 +179 +183 +182 +183 +185 +184 +188 +188 +188 +190 +191 +195 +194 +195 +196 +196 +198 +198 +199 +200 +200 +200 +200 +202 +202 +202 +205 +205 +204 +204 +204 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +203 +202 +203 +200 +201 +200 +200 +200 +198 +198 +198 +198 +198 +197 +196 +195 +195 +194 +191 +191 +188 +189 +189 +184 +184 +183 +183 +178 +179 +178 +175 +175 +173 +173 +173 +169 +169 +169 +169 +169 +165 +165 +161 +161 +161 +157 +156 +151 +151 +149 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +130 +129 +125 +126 +125 +125 +125 +120 +119 +116 +116 +116 +110 +110 +106 +106 +101 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +68 +68 +64 +64 +64 +58 +58 +55 +54 +51 +51 +51 +47 +47 +42 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +13 +13 +13 +14 +13 +14 +13 +14 +13 +13 +14 +14 +14 +14 +13 +13 +14 +13 +14 +13 +14 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +22 +25 +25 +27 +27 +30 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +50 +50 +54 +54 +59 +58 +59 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +109 +109 +110 +110 +116 +116 +119 +119 +119 +125 +126 +129 +129 +129 +133 +134 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +174 +175 +174 +179 +179 +182 +183 +183 +185 +184 +188 +189 +188 +190 +191 +194 +194 +197 +197 +196 +199 +198 +201 +200 +200 +200 +201 +202 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +204 +204 +204 +205 +204 +203 +202 +202 +200 +200 +200 +200 +200 +199 +199 +196 +196 +197 +195 +194 +190 +190 +189 +188 +188 +185 +184 +182 +182 +183 +178 +179 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +163 +161 +161 +157 +157 +151 +151 +151 +147 +148 +143 +143 +143 +139 +139 +139 +139 +139 +133 +134 +129 +129 +130 +126 +125 +119 +119 +117 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +65 +64 +64 +58 +58 +55 +54 +54 +51 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +26 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +13 +14 +14 +14 +14 +13 +14 +13 +14 +13 +14 +13 +14 +14 +13 +13 +13 +13 +13 +13 +13 +14 +13 +12 +15 +15 +16 +17 +17 +19 +19 +22 +21 +21 +25 +25 +27 +27 +27 +31 +31 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +44 +47 +46 +51 +51 +55 +54 +54 +58 +58 +65 +64 +64 +68 +67 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +90 +90 +89 +96 +96 +100 +100 +100 +106 +106 +110 +109 +110 +115 +115 +119 +119 +120 +126 +125 +129 +129 +130 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +172 +175 +174 +175 +179 +179 +183 +183 +185 +184 +185 +188 +189 +190 +191 +191 +194 +195 +194 +195 +194 +196 +196 +198 +198 +198 +200 +200 +201 +200 +201 +202 +202 +204 +204 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +205 +204 +204 +205 +202 +202 +200 +200 +200 +200 +200 +199 +198 +196 +196 +197 +194 +195 +195 +195 +194 +191 +190 +189 +189 +189 +185 +184 +183 +183 +183 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +129 +129 +129 +126 +125 +120 +119 +119 +115 +116 +110 +109 +109 +106 +106 +100 +100 +100 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +59 +59 +55 +54 +51 +51 +50 +46 +47 +43 +42 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +13 +14 +14 +14 +14 +14 +13 +13 +14 +14 +14 +13 +13 +14 +13 +14 +14 +13 +14 +14 +13 +14 +13 +13 +14 +13 +13 +13 +15 +15 +15 +17 +17 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +29 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +46 +47 +47 +51 +51 +55 +54 +55 +59 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +119 +119 +119 +126 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +174 +175 +179 +179 +183 +182 +182 +184 +184 +188 +189 +188 +191 +190 +195 +195 +195 +196 +196 +198 +198 +201 +200 +200 +200 +200 +202 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +205 +204 +204 +204 +205 +202 +202 +202 +200 +200 +200 +200 +200 +201 +201 +198 +199 +199 +196 +196 +194 +194 +192 +190 +190 +189 +188 +184 +184 +185 +182 +182 +179 +178 +178 +175 +175 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +146 +147 +147 +143 +143 +140 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +119 +120 +116 +115 +110 +109 +108 +106 +106 +100 +100 +96 +96 +96 +89 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +59 +58 +54 +55 +54 +50 +50 +47 +47 +47 +43 +43 +40 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +14 +13 +13 +13 +14 +14 +13 +13 +14 +14 +14 +13 +13 +14 +13 +13 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +54 +55 +54 +58 +58 +64 +65 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +105 +106 +106 +110 +110 +116 +116 +115 +119 +119 +126 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +184 +185 +185 +189 +188 +190 +190 +195 +194 +194 +196 +197 +198 +198 +198 +200 +200 +200 +199 +201 +202 +202 +204 +204 +205 +205 +204 +206 +206 +207 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +200 +200 +200 +200 +200 +198 +198 +200 +196 +197 +194 +194 +190 +191 +190 +189 +188 +185 +185 +184 +182 +183 +183 +183 +182 +179 +178 +174 +175 +175 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +130 +125 +125 +119 +115 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +65 +64 +64 +58 +58 +54 +54 +54 +51 +51 +46 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +30 +30 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +14 +13 +14 +14 +13 +13 +14 +14 +14 +14 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +15 +15 +16 +17 +17 +19 +20 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +31 +31 +31 +33 +33 +37 +37 +37 +40 +41 +43 +43 +44 +47 +47 +51 +50 +54 +55 +54 +58 +59 +65 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +109 +116 +115 +115 +119 +119 +125 +126 +125 +129 +129 +133 +133 +133 +139 +140 +143 +143 +148 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +179 +182 +183 +184 +184 +189 +188 +188 +191 +191 +195 +194 +194 +196 +196 +198 +198 +198 +200 +200 +200 +200 +200 +202 +202 +204 +204 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +204 +204 +204 +204 +204 +202 +202 +201 +200 +200 +200 +200 +198 +198 +198 +197 +196 +194 +195 +194 +190 +191 +190 +191 +190 +189 +188 +185 +184 +185 +182 +183 +179 +179 +175 +175 +175 +173 +173 +169 +168 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +130 +129 +129 +125 +125 +119 +119 +119 +115 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +73 +72 +68 +68 +68 +64 +64 +58 +59 +59 +55 +54 +50 +52 +51 +47 +47 +43 +42 +44 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +16 +13 +13 +12 +13 +13 +14 +14 +14 +14 +13 +14 +14 +13 +13 +14 +13 +13 +14 +14 +13 +14 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +19 +19 +19 +21 +21 +24 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +50 +54 +55 +55 +59 +59 +64 +64 +65 +68 +68 +72 +72 +75 +76 +76 +82 +82 +86 +86 +86 +90 +90 +95 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +115 +116 +120 +120 +125 +125 +130 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +172 +175 +175 +175 +179 +179 +182 +182 +183 +185 +184 +185 +185 +184 +185 +185 +189 +189 +189 +191 +191 +194 +194 +195 +197 +196 +199 +198 +201 +200 +201 +200 +200 +202 +202 +203 +204 +204 +205 +204 +204 +204 +204 +206 +206 +206 +206 +207 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +205 +204 +204 +205 +204 +202 +202 +203 +202 +202 +200 +200 +201 +200 +201 +198 +199 +196 +195 +195 +194 +195 +191 +190 +188 +189 +189 +185 +185 +183 +183 +182 +178 +179 +175 +175 +175 +173 +173 +169 +169 +170 +165 +165 +161 +160 +158 +157 +157 +151 +151 +147 +147 +147 +143 +143 +140 +139 +139 +133 +133 +129 +129 +130 +125 +126 +119 +120 +119 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +95 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +73 +72 +68 +69 +68 +64 +64 +59 +59 +55 +54 +54 +50 +50 +47 +47 +47 +43 +43 +41 +41 +40 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +19 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +14 +13 +13 +14 +14 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +13 +14 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +54 +54 +54 +59 +58 +64 +65 +64 +68 +68 +72 +72 +72 +76 +77 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +106 +106 +105 +110 +110 +116 +115 +115 +120 +120 +125 +126 +126 +129 +129 +133 +134 +133 +140 +140 +143 +143 +144 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +172 +175 +176 +179 +178 +179 +183 +182 +185 +184 +185 +189 +188 +190 +191 +195 +194 +194 +197 +196 +198 +199 +198 +200 +200 +200 +200 +200 +202 +203 +204 +205 +204 +204 +204 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +204 +204 +202 +202 +202 +200 +200 +200 +200 +199 +198 +199 +196 +197 +194 +194 +194 +190 +190 +188 +188 +189 +185 +185 +182 +182 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +130 +125 +125 +119 +119 +116 +115 +115 +110 +110 +105 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +77 +76 +72 +72 +68 +68 +65 +64 +65 +58 +59 +55 +55 +55 +51 +51 +47 +47 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +34 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +14 +13 +13 +13 +13 +14 +14 +13 +14 +13 +13 +14 +14 +14 +14 +13 +13 +14 +14 +14 +14 +13 +13 +13 +13 +13 +13 +15 +15 +17 +16 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +36 +36 +41 +41 +43 +43 +43 +47 +46 +51 +51 +50 +55 +54 +58 +58 +58 +65 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +109 +115 +115 +120 +119 +120 +125 +125 +129 +129 +130 +133 +134 +139 +139 +144 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +164 +165 +169 +169 +169 +173 +173 +175 +175 +176 +179 +179 +183 +183 +185 +184 +184 +189 +188 +191 +190 +190 +194 +194 +194 +194 +194 +197 +196 +198 +198 +198 +201 +201 +200 +200 +201 +202 +202 +204 +204 +205 +205 +204 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +205 +204 +204 +204 +205 +203 +202 +200 +201 +201 +200 +200 +198 +198 +198 +197 +197 +194 +195 +194 +190 +191 +189 +189 +188 +184 +185 +183 +182 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +164 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +125 +119 +120 +116 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +83 +82 +83 +76 +76 +73 +72 +72 +69 +68 +64 +64 +64 +59 +59 +54 +54 +55 +51 +50 +46 +47 +47 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +14 +15 +15 +13 +13 +12 +12 +13 +14 +14 +14 +13 +13 +13 +14 +13 +14 +13 +13 +14 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +14 +14 +14 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +50 +50 +54 +54 +55 +58 +59 +64 +65 +64 +68 +68 +72 +72 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +105 +106 +106 +110 +109 +115 +116 +115 +119 +119 +125 +126 +130 +129 +130 +133 +133 +139 +139 +139 +143 +143 +143 +143 +143 +148 +147 +151 +151 +151 +156 +157 +161 +161 +162 +166 +165 +169 +169 +172 +173 +173 +175 +175 +178 +178 +179 +183 +183 +185 +185 +185 +188 +189 +190 +191 +190 +195 +195 +196 +197 +196 +198 +199 +201 +200 +200 +200 +200 +203 +202 +205 +205 +204 +204 +204 +205 +204 +204 +206 +206 +207 +206 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +204 +204 +205 +204 +205 +202 +202 +202 +200 +200 +200 +200 +200 +198 +198 +197 +196 +196 +194 +194 +190 +190 +189 +189 +189 +185 +185 +182 +183 +182 +179 +178 +175 +175 +175 +173 +173 +169 +168 +169 +165 +165 +161 +161 +161 +156 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +133 +133 +133 +129 +129 +125 +126 +125 +119 +119 +115 +115 +116 +110 +110 +106 +105 +101 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +73 +73 +68 +68 +64 +64 +65 +59 +58 +55 +55 +51 +50 +51 +47 +46 +43 +43 +43 +41 +41 +36 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +23 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +14 +14 +13 +13 +13 +13 +13 +14 +13 +14 +13 +14 +13 +13 +13 +14 +14 +13 +13 +13 +13 +16 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +30 +31 +33 +33 +33 +37 +37 +41 +41 +40 +43 +43 +47 +47 +47 +50 +50 +55 +54 +59 +58 +59 +64 +64 +68 +68 +69 +72 +72 +76 +76 +77 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +110 +110 +110 +115 +115 +116 +116 +116 +120 +120 +125 +126 +126 +129 +129 +133 +133 +134 +139 +139 +143 +143 +144 +147 +147 +151 +152 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +172 +172 +175 +174 +178 +179 +179 +183 +183 +185 +184 +185 +189 +188 +191 +191 +195 +194 +194 +197 +197 +198 +199 +198 +201 +200 +200 +200 +201 +201 +200 +202 +202 +203 +205 +205 +205 +204 +206 +207 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +207 +207 +207 +204 +204 +204 +204 +204 +202 +202 +203 +202 +203 +200 +200 +201 +201 +200 +199 +198 +197 +196 +196 +194 +195 +190 +190 +190 +189 +188 +185 +185 +184 +182 +182 +178 +179 +179 +175 +175 +173 +173 +170 +168 +168 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +146 +143 +143 +143 +139 +139 +134 +133 +134 +130 +130 +125 +126 +120 +120 +119 +116 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +69 +68 +68 +64 +64 +59 +59 +59 +54 +54 +50 +51 +51 +47 +47 +42 +43 +43 +40 +41 +37 +37 +37 +33 +33 +31 +31 +28 +27 +27 +25 +25 +21 +21 +21 +19 +19 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +14 +13 +13 +14 +14 +14 +14 +13 +13 +14 +13 +14 +13 +14 +13 +14 +13 +13 +13 +14 +13 +13 +14 +13 +13 +14 +14 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +50 +50 +54 +55 +58 +59 +58 +64 +64 +68 +68 +68 +72 +72 +77 +76 +77 +82 +82 +86 +86 +91 +90 +90 +96 +96 +100 +100 +100 +105 +106 +110 +110 +110 +116 +115 +119 +119 +119 +126 +125 +129 +130 +130 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +182 +182 +183 +184 +184 +189 +189 +188 +191 +191 +191 +190 +190 +194 +194 +197 +197 +197 +198 +199 +201 +201 +201 +200 +200 +203 +202 +204 +204 +204 +204 +204 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +207 +207 +204 +204 +204 +204 +205 +202 +202 +200 +200 +201 +200 +200 +198 +199 +198 +196 +196 +195 +194 +194 +190 +190 +189 +189 +189 +185 +185 +183 +183 +179 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +134 +133 +133 +129 +129 +125 +125 +126 +119 +119 +115 +116 +116 +110 +109 +106 +106 +106 +100 +100 +96 +96 +97 +90 +89 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +69 +68 +68 +64 +64 +58 +58 +58 +54 +54 +50 +50 +51 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +14 +13 +13 +14 +13 +14 +14 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +50 +50 +54 +55 +58 +59 +58 +64 +64 +68 +68 +73 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +99 +100 +106 +106 +110 +110 +110 +115 +115 +119 +120 +125 +125 +125 +129 +129 +133 +133 +133 +139 +139 +139 +139 +140 +144 +143 +147 +147 +147 +151 +151 +157 +157 +158 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +178 +179 +179 +178 +179 +183 +183 +185 +184 +185 +189 +189 +191 +191 +194 +194 +195 +196 +197 +198 +198 +198 +200 +201 +200 +201 +201 +203 +203 +204 +205 +204 +204 +204 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +204 +205 +205 +204 +204 +202 +203 +201 +201 +200 +200 +200 +198 +199 +198 +196 +196 +195 +194 +191 +191 +191 +189 +189 +184 +185 +184 +183 +183 +179 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +134 +133 +133 +129 +129 +125 +125 +125 +119 +119 +116 +115 +116 +110 +110 +106 +106 +99 +100 +100 +96 +96 +90 +90 +90 +87 +86 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +69 +65 +65 +59 +59 +55 +54 +54 +50 +50 +50 +51 +51 +47 +47 +47 +47 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +32 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +13 +13 +13 +13 +14 +14 +13 +14 +14 +14 +14 +14 +13 +14 +14 +13 +14 +14 +14 +14 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +40 +41 +43 +43 +47 +47 +50 +50 +50 +54 +55 +59 +58 +58 +64 +64 +68 +69 +68 +72 +72 +76 +76 +76 +82 +82 +85 +86 +86 +90 +90 +96 +96 +101 +100 +100 +106 +106 +109 +110 +110 +116 +116 +120 +119 +120 +125 +126 +130 +130 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +165 +165 +165 +169 +169 +173 +173 +173 +174 +175 +178 +179 +182 +182 +183 +185 +185 +188 +188 +188 +190 +190 +194 +194 +194 +197 +196 +198 +198 +198 +200 +200 +200 +201 +201 +202 +203 +204 +205 +204 +204 +204 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +206 +204 +205 +204 +204 +204 +202 +202 +201 +201 +200 +200 +201 +198 +198 +196 +196 +197 +195 +194 +190 +191 +191 +189 +189 +185 +185 +185 +183 +183 +179 +179 +179 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +156 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +134 +134 +130 +129 +126 +125 +119 +120 +119 +115 +116 +110 +110 +110 +106 +106 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +84 +82 +82 +77 +76 +72 +72 +72 +68 +68 +64 +64 +64 +58 +59 +58 +59 +59 +54 +55 +50 +51 +51 +47 +47 +43 +43 +42 +41 +40 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +14 +15 +15 +14 +13 +13 +12 +13 +13 +14 +14 +14 +14 +13 +13 +14 +13 +13 +14 +14 +14 +13 +13 +14 +14 +14 +13 +13 +14 +13 +14 +13 +14 +13 +13 +15 +15 +15 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +38 +37 +37 +41 +41 +43 +43 +43 +47 +46 +51 +51 +51 +55 +55 +58 +59 +58 +65 +64 +68 +68 +69 +73 +72 +77 +76 +81 +82 +82 +86 +86 +89 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +109 +110 +116 +115 +120 +119 +123 +125 +125 +129 +130 +134 +134 +134 +139 +139 +143 +143 +143 +147 +147 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +167 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +183 +184 +184 +188 +188 +188 +191 +191 +194 +195 +195 +197 +197 +199 +199 +199 +200 +200 +200 +200 +200 +200 +200 +202 +202 +205 +204 +204 +204 +205 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +204 +204 +204 +204 +204 +203 +203 +203 +202 +202 +200 +200 +201 +201 +200 +198 +198 +196 +196 +197 +195 +195 +190 +191 +189 +188 +188 +184 +185 +183 +182 +183 +179 +178 +175 +175 +175 +173 +173 +169 +168 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +147 +147 +147 +143 +143 +140 +139 +139 +133 +133 +134 +133 +133 +129 +129 +125 +125 +126 +120 +120 +116 +116 +112 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +65 +64 +64 +58 +59 +54 +54 +55 +50 +51 +46 +47 +47 +43 +43 +41 +41 +40 +37 +37 +33 +33 +33 +31 +31 +26 +27 +26 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +14 +14 +14 +14 +14 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +13 +14 +13 +14 +13 +14 +13 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +40 +41 +43 +43 +47 +47 +47 +51 +51 +54 +54 +58 +59 +58 +64 +64 +68 +68 +69 +72 +72 +72 +72 +72 +77 +76 +82 +82 +82 +86 +86 +90 +90 +91 +96 +96 +100 +100 +105 +106 +106 +110 +110 +116 +116 +116 +119 +120 +119 +120 +119 +126 +125 +129 +129 +130 +133 +133 +139 +139 +142 +143 +143 +147 +147 +150 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +185 +185 +185 +189 +189 +190 +191 +191 +195 +194 +196 +197 +196 +198 +198 +200 +200 +201 +201 +200 +202 +202 +202 +204 +205 +204 +204 +206 +207 +206 +207 +206 +207 +207 +206 +207 +206 +206 +207 +206 +207 +206 +206 +206 +206 +205 +204 +204 +204 +205 +202 +203 +200 +200 +200 +200 +200 +198 +198 +197 +196 +196 +194 +194 +190 +191 +190 +188 +189 +184 +184 +185 +183 +183 +178 +178 +179 +175 +175 +173 +173 +168 +169 +169 +165 +165 +161 +161 +161 +157 +157 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +140 +139 +137 +133 +133 +129 +129 +125 +125 +125 +119 +119 +116 +115 +116 +110 +110 +110 +110 +110 +106 +106 +100 +100 +100 +96 +95 +89 +90 +87 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +59 +59 +59 +54 +55 +50 +50 +51 +47 +47 +43 +42 +42 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +13 +14 +13 +14 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +14 +13 +13 +14 +14 +13 +13 +13 +13 +14 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +30 +32 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +51 +50 +50 +51 +54 +54 +58 +59 +58 +64 +65 +69 +68 +69 +72 +73 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +96 +96 +96 +100 +100 +105 +106 +106 +110 +110 +116 +116 +117 +119 +120 +126 +126 +129 +129 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +169 +169 +169 +173 +173 +174 +175 +175 +178 +178 +183 +182 +183 +184 +185 +189 +189 +189 +190 +191 +195 +195 +195 +196 +197 +199 +199 +200 +200 +200 +200 +200 +202 +203 +202 +204 +204 +205 +205 +204 +207 +206 +206 +207 +206 +207 +206 +206 +206 +207 +206 +206 +207 +206 +205 +204 +205 +204 +204 +202 +202 +203 +201 +200 +200 +201 +201 +198 +199 +197 +196 +197 +194 +195 +191 +191 +192 +189 +189 +184 +185 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +148 +144 +143 +143 +139 +139 +133 +133 +134 +129 +129 +130 +130 +130 +125 +125 +119 +120 +120 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +59 +58 +54 +55 +54 +51 +51 +47 +46 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +20 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +13 +14 +13 +13 +14 +13 +13 +13 +13 +14 +13 +14 +13 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +26 +27 +27 +31 +31 +33 +33 +33 +37 +37 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +52 +54 +54 +58 +58 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +99 +100 +100 +106 +106 +110 +110 +110 +116 +115 +120 +119 +120 +125 +125 +129 +129 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +172 +175 +175 +175 +179 +179 +183 +183 +183 +185 +185 +189 +189 +191 +191 +190 +195 +195 +196 +196 +196 +199 +199 +200 +200 +200 +200 +200 +202 +202 +202 +204 +205 +204 +205 +204 +206 +207 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +205 +204 +204 +205 +205 +202 +202 +202 +200 +200 +200 +201 +201 +198 +198 +197 +197 +194 +194 +194 +190 +190 +188 +188 +189 +185 +184 +185 +184 +184 +183 +183 +178 +179 +179 +175 +175 +173 +172 +171 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +127 +125 +125 +120 +119 +115 +115 +116 +110 +109 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +73 +72 +72 +68 +68 +64 +64 +64 +58 +58 +55 +55 +55 +50 +50 +46 +47 +47 +43 +43 +41 +40 +41 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +16 +13 +13 +12 +13 +14 +13 +13 +14 +14 +13 +13 +13 +13 +13 +13 +14 +14 +14 +14 +13 +13 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +16 +15 +15 +17 +17 +19 +19 +19 +21 +21 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +34 +37 +37 +41 +41 +43 +43 +43 +46 +47 +51 +51 +51 +55 +55 +55 +55 +54 +58 +59 +64 +65 +64 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +99 +100 +106 +106 +106 +110 +110 +115 +115 +116 +120 +120 +125 +126 +129 +130 +130 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +175 +175 +174 +178 +179 +183 +183 +183 +184 +184 +185 +185 +184 +188 +189 +191 +191 +190 +195 +195 +196 +197 +197 +199 +198 +200 +200 +201 +201 +200 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +206 +204 +204 +205 +204 +205 +202 +202 +200 +201 +200 +200 +201 +201 +200 +200 +198 +198 +197 +196 +197 +195 +194 +190 +191 +189 +189 +189 +185 +185 +182 +183 +183 +179 +179 +175 +175 +175 +173 +173 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +152 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +125 +120 +120 +116 +116 +115 +110 +110 +105 +106 +103 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +65 +64 +64 +59 +58 +54 +55 +51 +50 +50 +46 +47 +43 +43 +43 +40 +41 +36 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +20 +19 +17 +18 +17 +15 +15 +15 +16 +15 +13 +13 +12 +13 +14 +14 +13 +13 +14 +14 +14 +13 +13 +13 +14 +14 +13 +14 +14 +14 +13 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +37 +37 +37 +41 +41 +43 +42 +43 +47 +46 +51 +51 +52 +54 +54 +58 +58 +64 +64 +65 +68 +68 +72 +72 +72 +76 +76 +81 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +106 +106 +105 +110 +110 +116 +115 +116 +119 +119 +126 +125 +125 +129 +130 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +158 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +172 +175 +175 +179 +179 +179 +183 +183 +184 +184 +185 +188 +189 +191 +190 +195 +194 +195 +196 +196 +198 +199 +199 +200 +201 +201 +200 +200 +202 +202 +204 +205 +204 +204 +204 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +200 +200 +200 +201 +200 +198 +198 +196 +196 +197 +195 +195 +190 +190 +191 +188 +189 +189 +189 +188 +184 +185 +183 +182 +183 +178 +179 +174 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +148 +143 +143 +139 +139 +140 +134 +133 +129 +129 +125 +125 +125 +119 +119 +115 +115 +115 +110 +110 +110 +110 +111 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +72 +72 +72 +72 +72 +68 +68 +65 +64 +64 +58 +58 +54 +55 +55 +51 +50 +47 +46 +47 +43 +43 +41 +40 +38 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +14 +13 +13 +14 +13 +14 +14 +14 +13 +13 +13 +14 +13 +14 +13 +13 +13 +14 +13 +15 +15 +17 +17 +17 +19 +19 +19 +19 +19 +21 +21 +25 +24 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +41 +41 +40 +43 +43 +47 +47 +47 +50 +51 +54 +55 +55 +59 +58 +64 +64 +65 +69 +68 +76 +76 +81 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +105 +106 +110 +110 +110 +116 +115 +119 +119 +119 +126 +125 +129 +129 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +179 +179 +179 +183 +183 +185 +185 +184 +188 +188 +190 +190 +190 +194 +195 +196 +197 +196 +199 +198 +200 +201 +201 +201 +201 +202 +202 +204 +205 +204 +204 +204 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +200 +200 +201 +200 +200 +198 +198 +199 +196 +196 +197 +196 +196 +194 +194 +191 +191 +191 +188 +188 +185 +185 +183 +182 +183 +179 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +152 +147 +147 +143 +143 +140 +139 +139 +134 +134 +129 +129 +129 +126 +125 +120 +120 +120 +115 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +65 +58 +58 +58 +55 +55 +51 +51 +51 +47 +47 +43 +42 +42 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +14 +14 +14 +14 +13 +14 +14 +14 +13 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +13 +13 +13 +14 +13 +15 +16 +15 +17 +17 +17 +17 +18 +19 +19 +21 +21 +21 +25 +25 +27 +27 +29 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +50 +51 +55 +55 +58 +58 +58 +64 +64 +68 +68 +69 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +116 +120 +120 +126 +126 +125 +129 +129 +133 +133 +133 +139 +140 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +183 +183 +183 +184 +185 +189 +189 +189 +190 +191 +194 +194 +195 +196 +196 +198 +198 +200 +200 +200 +200 +201 +202 +202 +202 +204 +204 +204 +204 +205 +204 +204 +206 +206 +207 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +203 +202 +203 +202 +202 +200 +200 +201 +200 +200 +198 +199 +196 +196 +195 +194 +195 +190 +190 +189 +189 +189 +184 +184 +183 +183 +183 +178 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +134 +134 +129 +129 +129 +126 +125 +119 +119 +119 +115 +115 +110 +109 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +87 +86 +86 +82 +82 +76 +76 +76 +72 +73 +68 +68 +69 +64 +64 +59 +59 +55 +55 +54 +51 +50 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +32 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +20 +19 +19 +17 +17 +15 +15 +15 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +13 +14 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +14 +14 +14 +13 +14 +13 +13 +14 +13 +13 +15 +15 +16 +17 +17 +19 +19 +21 +20 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +42 +43 +47 +46 +50 +51 +51 +54 +55 +59 +58 +59 +65 +64 +69 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +109 +109 +115 +116 +120 +120 +119 +126 +125 +130 +129 +129 +133 +133 +139 +140 +139 +143 +143 +147 +147 +151 +151 +151 +157 +156 +161 +161 +161 +165 +165 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +185 +185 +189 +188 +188 +191 +190 +194 +195 +195 +196 +196 +197 +197 +196 +199 +199 +200 +201 +201 +200 +201 +202 +203 +203 +204 +205 +205 +204 +207 +207 +206 +207 +206 +207 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +204 +204 +204 +205 +203 +202 +203 +200 +201 +200 +200 +201 +198 +199 +197 +196 +196 +194 +194 +191 +190 +190 +188 +188 +185 +185 +185 +182 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +144 +143 +139 +139 +134 +133 +130 +129 +129 +125 +125 +120 +120 +119 +115 +116 +110 +110 +109 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +81 +76 +76 +76 +72 +73 +68 +69 +69 +64 +65 +59 +58 +59 +55 +54 +50 +51 +51 +47 +46 +43 +43 +43 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +13 +14 +13 +14 +14 +13 +13 +14 +13 +13 +14 +14 +14 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +13 +14 +14 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +26 +25 +25 +27 +27 +30 +31 +33 +33 +33 +36 +37 +41 +41 +41 +43 +43 +47 +46 +47 +51 +51 +55 +54 +55 +58 +58 +64 +64 +64 +68 +69 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +97 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +116 +119 +119 +125 +125 +130 +129 +129 +133 +133 +139 +139 +139 +144 +144 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +175 +175 +175 +179 +178 +183 +182 +183 +184 +184 +188 +188 +189 +190 +190 +195 +194 +195 +197 +196 +199 +198 +199 +200 +201 +201 +200 +202 +203 +202 +204 +204 +204 +205 +204 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +207 +206 +206 +207 +206 +206 +204 +205 +204 +205 +205 +202 +202 +201 +200 +200 +200 +200 +198 +198 +198 +196 +197 +194 +195 +195 +190 +191 +189 +188 +185 +184 +184 +183 +182 +179 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +150 +151 +147 +147 +143 +144 +143 +139 +139 +133 +134 +133 +130 +129 +125 +125 +125 +120 +119 +115 +115 +116 +109 +110 +106 +106 +106 +100 +100 +96 +96 +91 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +59 +58 +54 +54 +55 +51 +50 +47 +47 +42 +42 +42 +41 +41 +41 +41 +41 +36 +37 +37 +37 +37 +33 +33 +31 +31 +31 +27 +26 +25 +25 +23 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +14 +14 +14 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +30 +33 +33 +33 +37 +37 +40 +40 +41 +43 +43 +47 +47 +47 +51 +50 +54 +55 +58 +59 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +110 +110 +110 +115 +116 +120 +120 +119 +126 +125 +129 +129 +129 +134 +133 +139 +139 +139 +143 +143 +147 +147 +148 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +183 +185 +184 +188 +188 +189 +190 +191 +195 +194 +196 +196 +197 +198 +199 +201 +201 +200 +200 +200 +201 +200 +200 +202 +202 +205 +204 +205 +204 +205 +207 +206 +205 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +205 +204 +204 +204 +204 +202 +203 +200 +200 +201 +201 +201 +198 +198 +198 +196 +197 +195 +195 +190 +190 +190 +189 +189 +185 +184 +185 +182 +183 +179 +178 +179 +174 +175 +173 +173 +173 +169 +169 +165 +165 +162 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +125 +120 +119 +116 +116 +109 +109 +110 +106 +105 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +65 +59 +59 +58 +55 +54 +51 +50 +51 +47 +47 +46 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +32 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +14 +14 +13 +14 +13 +14 +13 +13 +14 +14 +13 +13 +14 +14 +13 +13 +13 +14 +14 +14 +13 +14 +14 +13 +13 +14 +13 +12 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +36 +37 +41 +41 +43 +42 +47 +47 +47 +51 +50 +54 +54 +55 +59 +58 +65 +64 +65 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +116 +119 +119 +125 +125 +125 +129 +130 +133 +133 +134 +139 +139 +143 +144 +147 +147 +148 +151 +151 +157 +157 +157 +161 +161 +161 +160 +161 +165 +165 +169 +169 +169 +172 +173 +175 +175 +175 +179 +179 +183 +183 +184 +185 +184 +188 +188 +190 +191 +191 +194 +194 +194 +194 +194 +197 +197 +198 +198 +199 +201 +201 +201 +201 +201 +202 +203 +204 +204 +204 +204 +205 +206 +206 +206 +207 +206 +206 +207 +207 +207 +206 +207 +206 +206 +206 +207 +204 +205 +204 +204 +202 +202 +203 +201 +200 +200 +200 +200 +198 +198 +197 +197 +196 +194 +195 +190 +190 +190 +188 +188 +184 +184 +184 +182 +183 +179 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +129 +129 +129 +125 +125 +120 +119 +119 +116 +116 +109 +110 +110 +106 +105 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +68 +68 +64 +64 +59 +58 +58 +55 +54 +51 +50 +50 +47 +46 +43 +43 +41 +40 +41 +37 +37 +33 +33 +32 +31 +31 +27 +27 +27 +25 +25 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +14 +13 +14 +13 +13 +14 +13 +14 +14 +14 +14 +14 +13 +14 +14 +13 +13 +14 +14 +13 +14 +14 +14 +14 +13 +12 +15 +15 +17 +18 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +42 +47 +47 +51 +50 +51 +54 +54 +58 +58 +58 +65 +64 +68 +68 +68 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +117 +119 +120 +126 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +162 +165 +165 +169 +169 +172 +173 +173 +175 +175 +178 +179 +178 +183 +182 +183 +183 +182 +184 +184 +189 +189 +189 +190 +191 +194 +194 +195 +196 +196 +198 +199 +200 +201 +200 +200 +200 +202 +202 +202 +204 +205 +204 +204 +204 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +203 +202 +200 +200 +201 +200 +200 +198 +198 +196 +196 +196 +195 +194 +190 +190 +189 +188 +188 +184 +184 +182 +182 +182 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +160 +161 +161 +157 +157 +151 +151 +147 +147 +147 +143 +143 +140 +140 +139 +134 +134 +129 +129 +129 +125 +125 +120 +120 +120 +116 +115 +110 +109 +110 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +65 +59 +58 +59 +54 +55 +50 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +36 +36 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +23 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +13 +14 +13 +14 +13 +13 +13 +14 +14 +14 +14 +13 +14 +14 +14 +14 +14 +14 +13 +13 +13 +14 +14 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +46 +51 +50 +51 +55 +54 +58 +58 +65 +64 +64 +68 +68 +72 +72 +72 +76 +76 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +109 +110 +110 +115 +115 +119 +119 +120 +125 +125 +125 +125 +125 +130 +130 +133 +133 +133 +139 +139 +143 +143 +144 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +169 +169 +169 +173 +173 +175 +174 +174 +179 +178 +183 +182 +184 +184 +185 +189 +188 +190 +190 +191 +194 +194 +197 +196 +196 +198 +198 +201 +201 +201 +201 +200 +203 +202 +203 +205 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +205 +204 +204 +204 +204 +203 +203 +203 +200 +201 +200 +200 +198 +198 +199 +196 +196 +195 +194 +194 +190 +190 +189 +188 +188 +185 +185 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +140 +139 +139 +133 +134 +129 +129 +130 +125 +125 +120 +119 +115 +115 +115 +110 +110 +106 +106 +106 +100 +100 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +79 +76 +76 +72 +72 +68 +68 +68 +64 +64 +59 +58 +59 +54 +55 +55 +55 +55 +51 +51 +47 +47 +47 +47 +46 +42 +43 +42 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +13 +14 +14 +14 +13 +13 +14 +14 +14 +14 +14 +13 +13 +14 +14 +13 +13 +14 +13 +13 +14 +14 +13 +14 +14 +13 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +30 +31 +31 +33 +33 +37 +37 +41 +41 +41 +43 +42 +46 +47 +47 +51 +50 +50 +50 +50 +55 +55 +58 +58 +58 +64 +64 +68 +68 +69 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +109 +115 +115 +119 +119 +119 +125 +125 +130 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +147 +147 +147 +151 +151 +157 +157 +158 +160 +161 +165 +165 +169 +169 +169 +173 +173 +175 +176 +175 +178 +179 +183 +182 +183 +185 +184 +189 +188 +189 +191 +191 +195 +194 +195 +196 +196 +198 +198 +200 +201 +200 +200 +201 +202 +202 +203 +204 +204 +205 +204 +205 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +205 +204 +204 +204 +204 +202 +202 +202 +200 +200 +201 +200 +200 +200 +200 +199 +198 +198 +197 +197 +195 +195 +195 +191 +190 +189 +188 +185 +184 +185 +182 +183 +178 +178 +178 +175 +175 +173 +172 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +158 +151 +151 +147 +147 +144 +143 +143 +139 +139 +133 +133 +133 +129 +129 +130 +129 +129 +125 +125 +119 +119 +119 +116 +116 +110 +110 +108 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +61 +58 +58 +55 +54 +51 +50 +51 +47 +47 +43 +42 +43 +41 +41 +36 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +14 +14 +14 +13 +13 +13 +14 +13 +13 +14 +13 +13 +14 +14 +13 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +26 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +36 +37 +41 +41 +43 +43 +43 +47 +47 +50 +50 +51 +55 +54 +58 +58 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +109 +110 +110 +115 +116 +119 +120 +119 +125 +125 +126 +125 +125 +129 +129 +133 +134 +134 +139 +140 +143 +143 +145 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +178 +179 +183 +183 +185 +185 +186 +188 +189 +191 +191 +194 +195 +195 +197 +196 +198 +198 +198 +200 +200 +201 +201 +200 +202 +203 +204 +204 +205 +204 +205 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +207 +207 +206 +206 +206 +204 +204 +204 +204 +204 +203 +203 +200 +200 +201 +201 +200 +198 +198 +197 +196 +196 +194 +194 +190 +191 +191 +188 +188 +185 +184 +184 +183 +183 +178 +179 +179 +175 +175 +173 +172 +173 +169 +168 +165 +165 +160 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +140 +133 +133 +133 +129 +130 +125 +125 +122 +119 +120 +115 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +96 +96 +96 +90 +90 +86 +86 +87 +82 +82 +76 +77 +73 +73 +72 +69 +68 +64 +65 +64 +58 +58 +54 +54 +54 +51 +50 +46 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +31 +31 +31 +27 +26 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +14 +13 +14 +14 +13 +13 +14 +13 +13 +13 +14 +13 +14 +13 +13 +13 +12 +15 +15 +18 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +26 +27 +31 +31 +32 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +46 +51 +51 +51 +55 +58 +58 +58 +58 +65 +64 +64 +64 +64 +68 +68 +72 +72 +72 +76 +77 +82 +82 +82 +86 +86 +90 +90 +96 +96 +97 +100 +100 +106 +106 +106 +110 +110 +110 +110 +110 +115 +116 +120 +120 +119 +126 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +148 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +178 +178 +179 +183 +182 +185 +185 +185 +188 +189 +191 +190 +190 +195 +195 +197 +196 +196 +198 +199 +200 +200 +200 +201 +200 +203 +202 +205 +205 +204 +204 +204 +206 +207 +207 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +204 +204 +204 +204 +205 +202 +202 +200 +200 +200 +200 +200 +198 +198 +198 +197 +196 +195 +194 +194 +191 +191 +188 +189 +189 +184 +184 +183 +182 +183 +179 +179 +175 +175 +172 +173 +173 +169 +169 +165 +165 +165 +161 +161 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +141 +139 +139 +134 +134 +129 +129 +129 +125 +125 +119 +120 +119 +116 +116 +116 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +91 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +59 +58 +55 +54 +55 +51 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +12 +13 +13 +13 +14 +14 +13 +14 +13 +13 +13 +13 +14 +14 +14 +13 +14 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +47 +47 +46 +51 +51 +55 +55 +54 +58 +59 +64 +64 +66 +69 +68 +72 +72 +76 +76 +76 +82 +82 +86 +87 +86 +90 +90 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +112 +116 +115 +120 +119 +125 +125 +125 +129 +129 +133 +134 +133 +139 +139 +144 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +165 +165 +165 +169 +169 +172 +173 +173 +175 +175 +179 +179 +178 +182 +182 +185 +184 +185 +188 +189 +190 +190 +190 +195 +195 +197 +196 +199 +198 +198 +200 +200 +200 +200 +200 +202 +203 +203 +202 +202 +205 +205 +204 +205 +204 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +204 +204 +204 +204 +204 +202 +203 +202 +201 +201 +200 +201 +200 +198 +199 +196 +197 +197 +195 +194 +191 +191 +188 +188 +189 +185 +184 +183 +183 +182 +179 +179 +179 +179 +179 +175 +175 +172 +173 +172 +169 +169 +165 +165 +164 +161 +161 +158 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +139 +139 +139 +133 +133 +129 +129 +129 +126 +125 +119 +120 +116 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +85 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +65 +64 +64 +58 +59 +55 +54 +54 +50 +50 +47 +47 +47 +43 +43 +41 +40 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +14 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +14 +13 +14 +13 +13 +14 +14 +14 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +12 +15 +15 +15 +17 +17 +19 +19 +22 +21 +21 +25 +25 +27 +27 +27 +31 +31 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +42 +43 +44 +47 +47 +51 +50 +54 +54 +55 +59 +59 +65 +64 +64 +68 +68 +68 +68 +68 +72 +72 +76 +76 +77 +82 +82 +86 +86 +89 +90 +90 +96 +96 +100 +100 +100 +106 +105 +109 +110 +110 +115 +115 +119 +119 +119 +125 +125 +129 +130 +130 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +172 +173 +175 +175 +175 +178 +179 +183 +183 +185 +185 +185 +188 +188 +191 +191 +191 +195 +195 +196 +197 +196 +199 +198 +200 +200 +200 +200 +200 +202 +203 +203 +205 +205 +204 +205 +207 +207 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +206 +205 +205 +204 +204 +204 +202 +202 +203 +201 +201 +200 +201 +198 +198 +198 +197 +197 +194 +194 +194 +190 +190 +191 +190 +190 +189 +188 +185 +184 +184 +183 +182 +179 +179 +178 +175 +175 +173 +173 +168 +169 +169 +165 +165 +161 +161 +161 +157 +157 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +134 +134 +133 +129 +129 +125 +125 +126 +119 +119 +115 +116 +115 +110 +110 +106 +105 +106 +100 +100 +96 +96 +96 +90 +89 +86 +86 +82 +82 +82 +76 +76 +76 +76 +76 +72 +73 +68 +68 +68 +65 +64 +58 +59 +58 +54 +54 +50 +50 +51 +47 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +18 +15 +15 +15 +15 +14 +13 +13 +12 +13 +14 +13 +13 +13 +14 +14 +14 +14 +14 +13 +13 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +14 +14 +13 +13 +15 +15 +15 +17 +17 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +26 +28 +31 +31 +33 +33 +36 +37 +37 +41 +41 +43 +43 +43 +47 +46 +47 +47 +47 +51 +51 +54 +54 +55 +59 +59 +65 +64 +66 +69 +68 +73 +72 +76 +76 +76 +82 +82 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +115 +116 +115 +120 +119 +125 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +156 +157 +161 +161 +165 +166 +165 +169 +169 +173 +172 +173 +175 +175 +179 +179 +179 +182 +182 +185 +185 +184 +188 +188 +191 +191 +191 +195 +194 +196 +196 +199 +199 +199 +201 +200 +200 +200 +200 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +205 +204 +204 +204 +202 +202 +202 +202 +202 +200 +200 +200 +201 +200 +198 +199 +197 +197 +197 +194 +195 +191 +191 +188 +189 +188 +184 +184 +182 +183 +183 +179 +179 +178 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +140 +133 +133 +133 +130 +129 +125 +125 +125 +120 +119 +115 +115 +116 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +65 +64 +59 +58 +59 +54 +54 +51 +51 +51 +46 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +14 +14 +14 +14 +13 +14 +13 +14 +14 +14 +14 +13 +14 +13 +14 +14 +14 +14 +13 +13 +14 +14 +14 +13 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +31 +30 +31 +33 +33 +37 +37 +36 +41 +41 +43 +43 +44 +47 +46 +50 +51 +55 +55 +55 +59 +59 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +95 +96 +96 +99 +100 +106 +106 +106 +109 +110 +116 +115 +115 +120 +120 +126 +126 +125 +130 +129 +133 +133 +133 +139 +139 +143 +143 +148 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +179 +183 +183 +184 +184 +189 +188 +189 +191 +191 +195 +195 +194 +196 +196 +199 +198 +198 +200 +200 +200 +200 +200 +202 +203 +204 +204 +205 +204 +205 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +203 +203 +200 +199 +200 +200 +201 +198 +199 +196 +196 +196 +194 +195 +191 +191 +190 +189 +188 +189 +189 +188 +185 +185 +183 +183 +183 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +140 +133 +133 +129 +130 +125 +125 +126 +120 +119 +116 +116 +116 +109 +110 +106 +106 +106 +100 +100 +95 +95 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +65 +59 +58 +55 +54 +55 +51 +51 +47 +47 +47 +42 +43 +40 +41 +41 +37 +37 +33 +33 +32 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +14 +14 +13 +14 +13 +14 +13 +13 +14 +14 +13 +14 +14 +14 +13 +14 +14 +14 +14 +13 +13 +12 +15 +15 +17 +17 +19 +19 +19 +21 +22 +21 +21 +21 +25 +25 +27 +27 +26 +31 +31 +33 +33 +36 +37 +37 +41 +41 +42 +42 +43 +46 +47 +50 +51 +51 +54 +55 +58 +58 +58 +64 +64 +68 +68 +69 +72 +72 +76 +76 +81 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +110 +110 +116 +116 +120 +120 +119 +125 +125 +130 +129 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +174 +175 +179 +178 +179 +182 +183 +184 +184 +185 +188 +188 +189 +189 +189 +190 +191 +194 +194 +194 +197 +197 +198 +198 +199 +200 +200 +200 +200 +202 +202 +203 +204 +204 +204 +204 +204 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +205 +204 +204 +204 +204 +203 +202 +202 +200 +201 +200 +201 +201 +198 +199 +199 +198 +198 +197 +196 +194 +194 +195 +190 +190 +188 +188 +185 +184 +185 +182 +182 +178 +179 +179 +174 +174 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +144 +143 +143 +139 +139 +133 +134 +133 +130 +129 +125 +125 +125 +120 +119 +116 +116 +115 +110 +110 +106 +106 +106 +100 +100 +95 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +73 +72 +68 +68 +64 +64 +64 +59 +58 +55 +55 +55 +50 +50 +47 +46 +44 +43 +43 +40 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +14 +14 +14 +14 +14 +14 +13 +14 +14 +13 +13 +14 +14 +14 +13 +13 +13 +14 +14 +14 +13 +14 +13 +13 +13 +14 +13 +13 +15 +15 +15 +15 +15 +17 +17 +17 +19 +19 +21 +21 +24 +25 +26 +27 +27 +30 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +42 +43 +47 +46 +51 +51 +51 +55 +54 +59 +58 +63 +64 +65 +69 +68 +72 +72 +72 +76 +76 +76 +76 +76 +82 +82 +86 +86 +87 +90 +89 +96 +96 +96 +99 +100 +106 +105 +110 +110 +110 +116 +116 +119 +119 +119 +125 +125 +125 +125 +126 +129 +129 +133 +133 +133 +140 +140 +143 +143 +143 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +178 +179 +183 +183 +185 +185 +185 +188 +189 +191 +190 +195 +195 +195 +197 +196 +198 +198 +198 +200 +200 +200 +200 +200 +201 +200 +203 +203 +202 +204 +204 +205 +204 +205 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +204 +204 +204 +204 +204 +202 +203 +200 +200 +200 +200 +201 +198 +198 +196 +196 +196 +194 +194 +191 +190 +190 +188 +189 +185 +185 +184 +183 +183 +179 +179 +179 +175 +175 +173 +172 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +126 +125 +120 +120 +120 +115 +115 +110 +109 +110 +106 +106 +99 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +77 +72 +73 +69 +68 +68 +64 +64 +58 +58 +59 +54 +55 +50 +51 +50 +46 +47 +42 +43 +42 +41 +40 +37 +37 +38 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +14 +13 +13 +14 +13 +13 +14 +14 +13 +13 +14 +13 +13 +13 +14 +14 +14 +14 +13 +13 +14 +14 +13 +13 +14 +14 +13 +12 +16 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +36 +41 +41 +43 +43 +42 +47 +46 +51 +51 +51 +55 +54 +54 +54 +54 +58 +59 +64 +64 +65 +68 +68 +72 +72 +73 +76 +77 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +105 +110 +110 +115 +115 +115 +119 +120 +126 +125 +125 +129 +130 +133 +134 +140 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +174 +174 +178 +179 +183 +183 +183 +185 +185 +189 +188 +189 +191 +190 +191 +191 +191 +194 +194 +197 +196 +196 +199 +199 +200 +200 +201 +201 +200 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +207 +207 +206 +205 +204 +205 +205 +205 +202 +202 +202 +200 +200 +200 +200 +200 +198 +199 +197 +197 +197 +195 +195 +191 +190 +191 +189 +189 +185 +185 +183 +182 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +139 +139 +140 +133 +133 +129 +130 +129 +125 +125 +119 +119 +119 +116 +115 +109 +109 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +87 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +59 +58 +55 +54 +50 +50 +51 +47 +47 +43 +43 +41 +41 +40 +37 +37 +37 +37 +37 +33 +33 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +14 +14 +14 +14 +13 +13 +14 +13 +13 +14 +14 +14 +14 +13 +13 +14 +14 +14 +14 +13 +14 +14 +14 +13 +14 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +46 +47 +51 +51 +51 +55 +55 +59 +59 +65 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +90 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +116 +115 +116 +119 +119 +126 +125 +125 +129 +129 +133 +133 +133 +140 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +172 +173 +175 +175 +175 +175 +175 +179 +178 +182 +182 +182 +185 +185 +188 +189 +189 +190 +190 +195 +194 +197 +196 +197 +199 +198 +200 +200 +200 +200 +200 +200 +200 +200 +202 +202 +204 +205 +204 +204 +205 +206 +206 +207 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +205 +204 +204 +204 +204 +202 +202 +203 +201 +201 +201 +200 +198 +198 +199 +196 +196 +194 +194 +194 +190 +190 +188 +188 +188 +185 +184 +183 +183 +183 +179 +179 +175 +174 +175 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +134 +134 +130 +129 +125 +125 +120 +120 +120 +115 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +83 +76 +76 +73 +72 +68 +68 +69 +64 +64 +59 +58 +59 +55 +55 +54 +54 +54 +50 +51 +47 +47 +47 +43 +43 +41 +40 +42 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +13 +13 +13 +14 +13 +14 +13 +14 +13 +14 +14 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +32 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +50 +55 +55 +55 +59 +59 +64 +65 +64 +68 +68 +72 +72 +72 +76 +76 +83 +82 +87 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +116 +119 +119 +125 +125 +126 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +168 +170 +170 +173 +173 +175 +175 +179 +179 +179 +183 +183 +185 +184 +184 +189 +189 +189 +188 +188 +191 +190 +195 +194 +195 +197 +197 +198 +198 +200 +200 +201 +200 +201 +202 +202 +202 +204 +205 +204 +204 +204 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +205 +204 +205 +205 +204 +202 +203 +202 +200 +200 +200 +201 +200 +198 +199 +196 +197 +196 +194 +194 +190 +190 +191 +189 +189 +184 +184 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +152 +147 +147 +143 +143 +140 +140 +139 +134 +134 +130 +129 +129 +125 +125 +119 +119 +120 +115 +115 +110 +110 +109 +106 +106 +100 +100 +100 +95 +96 +90 +90 +87 +86 +86 +82 +82 +76 +76 +76 +72 +72 +72 +72 +72 +69 +68 +64 +64 +65 +58 +58 +54 +54 +53 +51 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +36 +33 +33 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +13 +14 +14 +13 +14 +14 +14 +13 +14 +13 +14 +14 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +14 +13 +13 +15 +15 +15 +18 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +42 +43 +47 +47 +47 +51 +51 +55 +55 +55 +58 +58 +65 +65 +69 +69 +69 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +105 +106 +110 +109 +116 +116 +120 +119 +119 +125 +125 +129 +129 +130 +134 +134 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +152 +157 +157 +161 +161 +165 +165 +165 +168 +169 +173 +173 +173 +174 +175 +175 +175 +175 +178 +179 +182 +183 +182 +185 +185 +189 +188 +190 +190 +191 +195 +195 +196 +196 +196 +198 +198 +200 +201 +200 +201 +201 +202 +202 +203 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +205 +204 +204 +204 +202 +202 +202 +200 +201 +200 +200 +200 +198 +198 +196 +196 +195 +194 +194 +191 +190 +189 +188 +189 +185 +185 +185 +184 +185 +182 +183 +179 +178 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +134 +133 +129 +129 +126 +125 +125 +120 +119 +115 +116 +110 +110 +109 +106 +106 +100 +100 +100 +96 +96 +96 +96 +95 +90 +90 +86 +86 +86 +82 +82 +76 +77 +77 +72 +72 +68 +68 +64 +64 +64 +59 +58 +54 +55 +54 +51 +51 +50 +51 +50 +47 +46 +43 +43 +43 +40 +41 +37 +37 +37 +33 +32 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +18 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +14 +14 +13 +14 +13 +14 +13 +14 +13 +13 +13 +13 +14 +13 +13 +14 +13 +14 +13 +13 +14 +13 +13 +13 +13 +12 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +32 +37 +37 +37 +41 +41 +42 +43 +48 +47 +47 +51 +51 +55 +55 +55 +58 +58 +64 +64 +64 +69 +69 +73 +72 +72 +76 +76 +82 +82 +83 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +110 +110 +110 +116 +116 +119 +119 +119 +125 +125 +130 +130 +130 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +182 +183 +184 +184 +189 +188 +189 +190 +191 +195 +194 +194 +196 +196 +198 +199 +199 +201 +201 +200 +200 +202 +203 +203 +204 +204 +204 +205 +204 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +204 +204 +204 +204 +203 +202 +202 +200 +200 +200 +200 +201 +198 +198 +196 +196 +196 +194 +194 +191 +191 +190 +188 +189 +184 +184 +184 +183 +183 +179 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +160 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +130 +129 +129 +126 +125 +119 +119 +119 +116 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +76 +76 +76 +72 +73 +69 +69 +68 +64 +64 +64 +64 +64 +58 +58 +55 +55 +54 +50 +50 +47 +47 +47 +42 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +24 +21 +21 +19 +19 +19 +17 +17 +15 +16 +15 +15 +15 +13 +13 +12 +13 +13 +14 +13 +14 +13 +14 +14 +13 +14 +13 +14 +14 +13 +13 +13 +14 +13 +13 +14 +13 +14 +13 +13 +13 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +20 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +37 +37 +36 +41 +41 +43 +43 +43 +47 +47 +47 +46 +47 +50 +51 +54 +55 +55 +59 +58 +64 +64 +65 +68 +68 +73 +72 +76 +76 +76 +83 +82 +86 +86 +86 +90 +90 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +112 +116 +116 +119 +120 +125 +126 +125 +129 +129 +133 +133 +133 +139 +139 +139 +140 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +160 +161 +161 +165 +165 +169 +169 +169 +172 +173 +175 +174 +175 +179 +179 +183 +182 +183 +185 +185 +188 +188 +189 +191 +191 +195 +195 +196 +196 +196 +198 +198 +200 +200 +200 +200 +200 +203 +203 +202 +204 +204 +205 +204 +205 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +205 +204 +205 +204 +202 +203 +203 +201 +201 +200 +200 +200 +199 +198 +196 +196 +196 +194 +195 +191 +191 +189 +189 +188 +184 +184 +183 +183 +183 +179 +178 +175 +175 +175 +173 +172 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +130 +125 +126 +119 +120 +120 +116 +116 +110 +110 +108 +105 +105 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +82 +82 +82 +76 +76 +72 +72 +73 +68 +68 +64 +64 +61 +58 +58 +55 +54 +50 +50 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +13 +14 +14 +13 +14 +14 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +14 +13 +14 +14 +14 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +26 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +51 +51 +54 +55 +59 +58 +65 +64 +64 +69 +68 +72 +72 +72 +76 +76 +76 +76 +77 +82 +82 +86 +86 +86 +90 +90 +96 +95 +96 +100 +99 +106 +106 +110 +110 +110 +115 +115 +119 +120 +119 +125 +125 +125 +125 +125 +129 +129 +133 +133 +134 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +174 +175 +175 +179 +179 +183 +182 +184 +184 +184 +189 +188 +190 +190 +191 +194 +194 +197 +196 +196 +198 +198 +200 +200 +201 +200 +200 +202 +203 +202 +204 +205 +204 +205 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +205 +204 +204 +205 +204 +202 +202 +202 +201 +200 +200 +201 +199 +198 +199 +196 +196 +194 +195 +195 +191 +190 +188 +189 +189 +184 +184 +183 +182 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +140 +139 +133 +134 +129 +129 +127 +125 +125 +120 +119 +115 +116 +116 +110 +109 +106 +106 +106 +100 +100 +100 +100 +100 +96 +96 +89 +90 +90 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +59 +58 +54 +55 +51 +51 +51 +47 +47 +43 +43 +43 +41 +40 +37 +37 +33 +33 +32 +31 +31 +27 +27 +28 +25 +25 +21 +21 +21 +19 +19 +17 +18 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +14 +13 +13 +13 +14 +14 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +14 +13 +16 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +36 +38 +41 +40 +43 +43 +47 +47 +46 +50 +50 +54 +54 +55 +59 +58 +58 +58 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +106 +106 +105 +109 +109 +116 +116 +115 +119 +119 +125 +125 +125 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +175 +175 +175 +178 +178 +182 +182 +183 +185 +185 +184 +185 +185 +188 +188 +191 +191 +191 +195 +194 +196 +196 +196 +198 +199 +200 +200 +201 +200 +200 +202 +202 +204 +204 +204 +204 +204 +205 +205 +204 +207 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +206 +205 +205 +204 +205 +204 +202 +202 +203 +200 +200 +200 +200 +201 +198 +198 +196 +197 +196 +195 +195 +190 +191 +191 +188 +189 +185 +185 +182 +183 +183 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +149 +147 +147 +143 +143 +139 +139 +139 +133 +133 +130 +130 +129 +125 +125 +125 +126 +125 +120 +119 +115 +115 +116 +110 +110 +106 +106 +101 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +65 +65 +58 +58 +54 +54 +50 +50 +51 +46 +47 +43 +43 +42 +41 +41 +37 +37 +37 +33 +32 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +14 +13 +14 +13 +14 +14 +13 +14 +14 +14 +13 +13 +13 +14 +14 +14 +13 +13 +14 +14 +14 +13 +13 +13 +14 +14 +14 +13 +15 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +27 +27 +26 +31 +31 +33 +33 +33 +37 +37 +37 +37 +37 +41 +41 +43 +43 +43 +43 +43 +47 +46 +48 +50 +50 +54 +55 +58 +59 +58 +64 +65 +68 +69 +68 +72 +72 +72 +72 +73 +77 +76 +82 +82 +82 +86 +86 +90 +90 +95 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +116 +119 +119 +126 +125 +125 +129 +129 +133 +133 +134 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +161 +161 +161 +165 +165 +169 +170 +169 +173 +173 +175 +174 +175 +179 +179 +183 +182 +185 +184 +185 +188 +188 +190 +191 +190 +195 +195 +197 +196 +196 +198 +198 +200 +200 +200 +201 +200 +202 +202 +202 +204 +204 +204 +204 +207 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +205 +205 +202 +202 +203 +201 +201 +201 +201 +198 +199 +199 +197 +197 +195 +194 +195 +191 +190 +189 +188 +188 +185 +184 +183 +183 +183 +179 +178 +175 +175 +174 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +131 +130 +130 +125 +125 +119 +119 +119 +116 +115 +110 +109 +110 +105 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +76 +76 +76 +73 +72 +68 +69 +68 +64 +64 +59 +58 +59 +55 +54 +50 +50 +51 +47 +47 +43 +42 +43 +41 +41 +37 +37 +34 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +14 +14 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +14 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +20 +25 +24 +27 +27 +27 +31 +31 +33 +33 +34 +37 +37 +41 +41 +43 +43 +42 +47 +46 +47 +47 +46 +51 +50 +51 +50 +51 +55 +55 +59 +59 +58 +64 +64 +68 +68 +72 +73 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +109 +110 +115 +116 +119 +119 +124 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +168 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +184 +185 +185 +188 +188 +190 +190 +191 +195 +195 +196 +196 +196 +198 +199 +201 +200 +201 +200 +200 +202 +202 +204 +204 +204 +204 +205 +207 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +207 +206 +204 +205 +204 +204 +205 +202 +202 +200 +200 +200 +200 +200 +201 +200 +201 +198 +198 +196 +196 +197 +195 +195 +191 +190 +191 +189 +189 +184 +185 +182 +183 +183 +179 +179 +175 +175 +175 +172 +173 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +130 +129 +125 +125 +125 +119 +119 +116 +116 +116 +110 +109 +105 +106 +101 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +65 +59 +59 +55 +55 +51 +50 +50 +47 +46 +43 +42 +42 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +24 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +14 +14 +14 +14 +14 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +18 +19 +19 +21 +21 +25 +25 +25 +27 +27 +27 +27 +27 +31 +31 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +46 +47 +46 +51 +50 +55 +54 +54 +58 +58 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +83 +86 +86 +90 +90 +95 +96 +96 +100 +100 +105 +106 +106 +110 +110 +116 +115 +116 +119 +120 +126 +126 +125 +129 +129 +133 +133 +134 +139 +139 +143 +143 +148 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +179 +183 +183 +184 +184 +189 +189 +188 +191 +195 +195 +194 +194 +196 +196 +197 +196 +197 +199 +198 +201 +200 +201 +200 +200 +202 +203 +203 +205 +204 +205 +204 +206 +207 +206 +207 +206 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +204 +204 +204 +205 +205 +202 +202 +201 +200 +200 +200 +201 +198 +198 +198 +197 +197 +195 +195 +194 +191 +191 +190 +191 +191 +189 +189 +185 +185 +184 +182 +183 +179 +178 +176 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +144 +140 +139 +134 +134 +130 +129 +130 +125 +125 +119 +119 +119 +115 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +68 +68 +64 +64 +59 +59 +59 +55 +54 +50 +51 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +33 +33 +32 +31 +31 +27 +27 +27 +25 +25 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +12 +13 +14 +13 +14 +13 +14 +13 +14 +13 +13 +13 +14 +14 +13 +13 +13 +13 +14 +13 +13 +14 +14 +14 +14 +13 +14 +14 +14 +14 +14 +13 +15 +15 +15 +17 +17 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +31 +31 +30 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +51 +55 +54 +59 +59 +59 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +110 +109 +116 +116 +120 +120 +125 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +168 +169 +173 +173 +173 +175 +175 +178 +179 +179 +182 +183 +185 +184 +185 +188 +189 +191 +190 +191 +195 +195 +197 +197 +196 +198 +199 +201 +201 +201 +201 +200 +202 +203 +204 +204 +205 +204 +205 +205 +204 +205 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +204 +204 +204 +204 +204 +202 +202 +202 +200 +201 +200 +201 +201 +200 +200 +199 +199 +199 +197 +196 +194 +195 +193 +191 +191 +189 +188 +184 +185 +185 +182 +182 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +134 +129 +129 +125 +125 +125 +120 +120 +116 +115 +116 +110 +110 +106 +105 +100 +100 +100 +96 +96 +90 +90 +90 +85 +86 +82 +82 +82 +76 +76 +72 +72 +72 +69 +68 +64 +65 +65 +58 +59 +54 +54 +51 +51 +50 +46 +47 +43 +42 +43 +41 +40 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +14 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +14 +14 +13 +14 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +54 +54 +54 +58 +58 +64 +65 +65 +68 +68 +71 +72 +72 +76 +76 +83 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +116 +120 +119 +125 +125 +126 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +169 +169 +169 +173 +173 +175 +175 +175 +178 +179 +182 +182 +183 +184 +184 +188 +189 +191 +190 +191 +194 +194 +196 +196 +197 +198 +198 +200 +200 +200 +200 +201 +202 +202 +202 +204 +204 +204 +205 +205 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +205 +202 +202 +200 +201 +200 +201 +201 +198 +198 +196 +196 +197 +194 +194 +190 +190 +190 +188 +188 +184 +184 +185 +182 +183 +179 +178 +179 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +130 +130 +126 +125 +120 +120 +119 +115 +116 +110 +109 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +69 +68 +68 +65 +64 +59 +58 +59 +54 +54 +51 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +38 +33 +33 +31 +31 +28 +26 +27 +25 +25 +21 +22 +21 +19 +19 +17 +18 +17 +15 +15 +14 +16 +15 +13 +13 +12 +12 +14 +14 +13 +13 +14 +14 +13 +13 +14 +13 +14 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +14 +13 +13 +14 +13 +12 +15 +16 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +42 +47 +47 +51 +51 +50 +55 +55 +58 +58 +59 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +115 +120 +119 +119 +125 +125 +129 +129 +129 +133 +133 +139 +140 +144 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +172 +173 +175 +175 +175 +179 +179 +183 +183 +185 +185 +185 +189 +189 +190 +190 +191 +194 +195 +195 +194 +194 +197 +197 +198 +198 +198 +200 +200 +201 +201 +201 +202 +202 +204 +204 +204 +204 +204 +206 +207 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +207 +207 +206 +204 +204 +204 +204 +204 +202 +203 +200 +200 +200 +200 +200 +198 +198 +198 +196 +197 +195 +194 +195 +190 +191 +188 +189 +189 +185 +185 +182 +183 +179 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +134 +133 +134 +130 +129 +126 +125 +125 +119 +119 +116 +116 +115 +110 +110 +106 +106 +105 +99 +100 +96 +96 +96 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +69 +68 +64 +64 +64 +58 +58 +54 +54 +55 +51 +50 +46 +46 +48 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +14 +13 +14 +13 +14 +14 +13 +13 +13 +13 +14 +13 +13 +14 +13 +14 +13 +14 +13 +14 +14 +14 +13 +14 +13 +14 +14 +13 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +30 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +46 +47 +47 +51 +50 +54 +54 +55 +59 +59 +64 +65 +65 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +97 +100 +100 +106 +106 +105 +110 +110 +116 +115 +116 +120 +119 +126 +125 +130 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +174 +175 +175 +179 +179 +183 +183 +183 +185 +185 +185 +185 +185 +189 +189 +191 +190 +190 +194 +194 +196 +196 +196 +198 +199 +200 +201 +200 +200 +200 +202 +203 +205 +204 +204 +204 +204 +205 +204 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +207 +204 +204 +204 +204 +204 +202 +203 +202 +200 +200 +200 +201 +201 +198 +199 +196 +196 +197 +194 +195 +190 +191 +188 +189 +189 +184 +185 +185 +184 +184 +182 +182 +179 +178 +178 +174 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +152 +151 +151 +147 +147 +143 +143 +143 +139 +139 +134 +133 +133 +130 +129 +125 +125 +125 +120 +120 +116 +116 +116 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +73 +72 +69 +69 +64 +65 +65 +59 +59 +54 +55 +50 +50 +51 +47 +47 +43 +43 +43 +41 +41 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +28 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +13 +13 +14 +14 +13 +13 +13 +13 +14 +14 +14 +14 +13 +13 +14 +14 +13 +14 +14 +13 +14 +13 +13 +13 +13 +15 +15 +17 +17 +17 +19 +18 +21 +21 +25 +25 +25 +28 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +42 +43 +47 +47 +50 +51 +55 +55 +55 +58 +59 +64 +65 +65 +68 +69 +73 +72 +72 +76 +76 +82 +82 +82 +86 +87 +90 +90 +90 +96 +95 +100 +100 +106 +106 +106 +110 +110 +116 +116 +116 +120 +119 +120 +120 +119 +125 +126 +129 +129 +129 +133 +134 +139 +139 +140 +143 +143 +147 +147 +152 +151 +151 +157 +157 +161 +161 +161 +165 +165 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +182 +183 +185 +185 +188 +189 +189 +191 +191 +195 +194 +194 +197 +196 +196 +196 +197 +198 +198 +200 +200 +200 +200 +201 +202 +203 +204 +204 +204 +205 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +205 +204 +205 +205 +205 +203 +202 +200 +200 +200 +200 +200 +201 +200 +200 +199 +198 +197 +196 +197 +194 +194 +191 +191 +191 +188 +189 +185 +185 +184 +183 +183 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +140 +139 +133 +133 +130 +129 +129 +125 +126 +119 +120 +120 +115 +115 +110 +110 +109 +106 +105 +100 +100 +100 +96 +96 +90 +90 +91 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +65 +64 +65 +58 +58 +54 +54 +54 +51 +51 +47 +47 +48 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +14 +13 +13 +14 +14 +14 +14 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +26 +31 +31 +33 +33 +33 +37 +37 +40 +41 +41 +43 +43 +47 +46 +47 +50 +50 +54 +54 +54 +59 +58 +64 +65 +65 +68 +68 +72 +72 +73 +76 +76 +82 +83 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +109 +115 +115 +116 +119 +120 +125 +126 +130 +129 +129 +133 +133 +139 +139 +139 +143 +143 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +172 +173 +173 +175 +175 +179 +178 +178 +183 +183 +182 +182 +183 +184 +185 +188 +188 +189 +191 +190 +194 +194 +196 +196 +197 +199 +198 +201 +200 +201 +201 +200 +202 +202 +202 +204 +204 +204 +205 +205 +206 +206 +206 +206 +207 +207 +206 +207 +207 +206 +206 +207 +207 +206 +204 +204 +204 +204 +204 +203 +203 +202 +201 +200 +200 +200 +200 +199 +198 +197 +196 +197 +195 +194 +190 +190 +189 +188 +188 +184 +185 +182 +183 +183 +179 +179 +175 +174 +175 +173 +173 +169 +168 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +148 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +119 +119 +115 +115 +110 +109 +111 +106 +106 +100 +100 +95 +96 +96 +90 +90 +86 +86 +86 +82 +82 +83 +82 +82 +76 +76 +72 +72 +72 +69 +68 +65 +64 +61 +59 +58 +55 +55 +50 +51 +50 +47 +47 +43 +43 +43 +41 +41 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +26 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +14 +13 +14 +13 +13 +14 +14 +14 +13 +13 +13 +14 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +32 +37 +37 +41 +41 +41 +43 +43 +47 +46 +47 +51 +50 +55 +55 +59 +59 +59 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +109 +110 +110 +116 +116 +115 +115 +116 +119 +120 +125 +125 +125 +129 +129 +134 +133 +133 +139 +139 +143 +143 +144 +147 +147 +151 +152 +157 +157 +157 +161 +161 +161 +161 +161 +165 +165 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +182 +183 +183 +184 +185 +188 +188 +189 +191 +190 +195 +194 +195 +197 +196 +198 +198 +198 +200 +200 +200 +200 +201 +203 +202 +204 +204 +204 +204 +205 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +205 +205 +204 +204 +205 +203 +203 +200 +200 +201 +201 +201 +198 +198 +197 +196 +196 +194 +194 +190 +190 +190 +189 +189 +185 +184 +185 +182 +183 +178 +179 +179 +175 +175 +172 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +120 +119 +120 +116 +116 +109 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +83 +77 +76 +73 +72 +68 +69 +69 +64 +64 +59 +58 +58 +55 +54 +54 +55 +54 +51 +51 +47 +47 +47 +43 +42 +41 +41 +39 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +13 +14 +13 +13 +14 +13 +14 +14 +14 +14 +13 +14 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +14 +13 +13 +15 +15 +17 +17 +17 +20 +19 +19 +19 +19 +22 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +36 +42 +41 +41 +43 +43 +47 +47 +47 +51 +51 +55 +54 +54 +58 +59 +64 +64 +64 +68 +69 +72 +72 +73 +76 +76 +82 +83 +86 +86 +85 +90 +90 +96 +96 +96 +100 +100 +100 +100 +100 +106 +106 +110 +110 +110 +116 +116 +119 +120 +122 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +166 +169 +169 +173 +172 +175 +175 +175 +179 +179 +183 +183 +183 +185 +185 +189 +189 +188 +191 +191 +195 +195 +195 +196 +197 +198 +198 +201 +200 +200 +200 +200 +202 +203 +202 +204 +204 +204 +205 +204 +206 +207 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +205 +205 +204 +204 +204 +204 +204 +204 +202 +202 +201 +200 +200 +201 +200 +198 +198 +198 +196 +196 +194 +195 +195 +190 +191 +188 +189 +185 +185 +184 +183 +183 +179 +179 +178 +175 +175 +173 +172 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +158 +151 +151 +147 +147 +144 +143 +143 +139 +140 +133 +133 +133 +129 +130 +130 +129 +130 +125 +125 +120 +119 +119 +116 +115 +109 +110 +110 +106 +106 +100 +100 +95 +96 +96 +90 +90 +86 +86 +86 +82 +82 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +62 +59 +59 +55 +55 +50 +50 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +36 +33 +33 +30 +31 +31 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +14 +13 +14 +14 +14 +14 +13 +13 +13 +14 +13 +14 +13 +13 +13 +14 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +46 +48 +50 +50 +55 +55 +58 +59 +58 +65 +64 +68 +68 +68 +72 +72 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +92 +96 +96 +100 +100 +106 +106 +106 +110 +110 +110 +110 +110 +116 +116 +115 +115 +115 +119 +120 +125 +126 +126 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +182 +183 +183 +185 +185 +189 +188 +189 +190 +190 +194 +194 +194 +197 +196 +199 +198 +198 +200 +200 +200 +200 +200 +202 +202 +204 +204 +204 +204 +204 +206 +207 +206 +206 +207 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +203 +200 +200 +201 +200 +200 +198 +198 +196 +196 +196 +194 +195 +190 +190 +191 +189 +189 +185 +185 +184 +182 +183 +179 +178 +178 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +136 +134 +133 +129 +129 +125 +126 +125 +120 +119 +116 +116 +116 +110 +110 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +89 +86 +86 +82 +82 +76 +76 +77 +72 +72 +68 +68 +69 +64 +64 +59 +59 +59 +55 +55 +50 +51 +51 +46 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +13 +14 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +14 +14 +14 +14 +14 +14 +14 +13 +14 +13 +14 +14 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +26 +31 +31 +32 +33 +33 +37 +37 +41 +41 +40 +43 +43 +47 +47 +47 +51 +50 +50 +50 +50 +55 +55 +58 +59 +59 +64 +65 +68 +68 +69 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +116 +119 +119 +125 +125 +126 +129 +129 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +173 +173 +173 +174 +175 +179 +179 +179 +182 +183 +184 +184 +184 +188 +189 +191 +190 +191 +194 +194 +197 +196 +197 +199 +199 +200 +201 +201 +201 +201 +203 +202 +204 +205 +204 +205 +204 +206 +207 +206 +207 +206 +206 +207 +206 +206 +206 +207 +207 +207 +206 +206 +204 +204 +205 +204 +204 +202 +202 +200 +200 +200 +200 +200 +198 +199 +198 +196 +196 +194 +195 +195 +191 +191 +188 +188 +188 +185 +185 +182 +182 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +148 +143 +143 +139 +139 +133 +133 +133 +129 +130 +126 +125 +126 +119 +120 +119 +119 +119 +115 +115 +109 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +86 +86 +86 +82 +82 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +65 +65 +65 +59 +59 +54 +54 +53 +51 +51 +47 +47 +43 +43 +43 +41 +40 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +20 +21 +19 +19 +18 +16 +17 +15 +15 +15 +14 +15 +13 +13 +12 +12 +14 +13 +14 +13 +14 +14 +13 +13 +14 +14 +14 +14 +13 +13 +13 +14 +14 +14 +14 +13 +13 +13 +14 +13 +13 +13 +13 +12 +16 +15 +17 +17 +17 +19 +19 +21 +21 +22 +25 +25 +27 +27 +32 +31 +31 +33 +33 +37 +37 +36 +41 +41 +40 +41 +40 +43 +43 +47 +47 +47 +51 +51 +54 +54 +55 +59 +58 +64 +65 +69 +68 +68 +72 +72 +76 +76 +76 +82 +82 +82 +82 +82 +86 +86 +90 +90 +90 +96 +95 +100 +100 +105 +106 +105 +110 +109 +110 +110 +110 +115 +115 +119 +119 +119 +125 +126 +129 +129 +128 +133 +134 +139 +139 +139 +143 +144 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +183 +185 +185 +188 +188 +191 +190 +191 +194 +194 +196 +196 +197 +199 +199 +201 +201 +201 +201 +200 +202 +202 +202 +204 +204 +204 +204 +205 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +206 +206 +205 +204 +204 +204 +204 +202 +202 +202 +200 +201 +200 +201 +200 +198 +198 +196 +196 +194 +195 +194 +191 +191 +189 +189 +189 +185 +185 +185 +185 +185 +183 +183 +178 +178 +178 +175 +175 +173 +173 +171 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +127 +125 +125 +119 +119 +115 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +87 +82 +82 +76 +77 +72 +72 +73 +68 +69 +64 +64 +64 +57 +58 +55 +55 +54 +51 +51 +47 +46 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +32 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +14 +13 +13 +14 +14 +14 +13 +13 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +46 +47 +47 +51 +50 +55 +54 +55 +58 +58 +59 +59 +58 +64 +64 +68 +68 +69 +73 +73 +76 +76 +79 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +115 +119 +119 +121 +125 +126 +129 +129 +132 +133 +133 +139 +139 +143 +143 +143 +147 +148 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +179 +178 +178 +182 +182 +184 +184 +185 +189 +189 +188 +189 +189 +191 +191 +194 +194 +194 +196 +196 +198 +198 +198 +201 +201 +200 +200 +203 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +207 +206 +206 +205 +204 +204 +204 +204 +202 +202 +200 +200 +201 +200 +200 +200 +201 +200 +198 +199 +196 +196 +197 +194 +194 +191 +190 +189 +188 +189 +185 +185 +182 +183 +183 +179 +179 +175 +175 +175 +173 +173 +173 +173 +173 +169 +169 +165 +165 +165 +161 +160 +157 +157 +152 +151 +151 +147 +147 +143 +143 +143 +139 +139 +139 +139 +139 +134 +133 +129 +130 +130 +125 +125 +120 +120 +120 +116 +116 +110 +110 +107 +106 +106 +100 +100 +96 +96 +96 +89 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +69 +68 +68 +64 +64 +58 +58 +55 +55 +55 +51 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +20 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +14 +14 +13 +14 +14 +14 +13 +13 +14 +13 +13 +14 +14 +13 +13 +15 +16 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +37 +37 +37 +41 +41 +42 +43 +43 +47 +46 +51 +51 +52 +54 +54 +59 +58 +64 +65 +64 +68 +69 +72 +72 +72 +76 +76 +82 +82 +83 +86 +86 +90 +90 +91 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +115 +116 +120 +119 +125 +125 +125 +130 +129 +133 +133 +134 +139 +139 +143 +143 +144 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +184 +185 +185 +188 +189 +190 +191 +194 +195 +195 +197 +197 +198 +198 +198 +201 +200 +200 +201 +200 +203 +202 +205 +205 +204 +205 +205 +206 +206 +206 +206 +207 +206 +206 +206 +206 +207 +207 +206 +206 +207 +207 +206 +206 +206 +206 +206 +204 +205 +204 +204 +204 +202 +203 +200 +200 +201 +200 +200 +198 +199 +196 +196 +196 +195 +195 +190 +190 +190 +188 +188 +188 +188 +188 +185 +185 +183 +183 +183 +179 +179 +175 +174 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +148 +147 +147 +143 +143 +139 +139 +140 +133 +134 +129 +129 +126 +126 +125 +120 +119 +115 +116 +116 +109 +110 +106 +106 +106 +99 +100 +96 +96 +96 +90 +90 +85 +86 +86 +82 +82 +76 +76 +72 +73 +72 +68 +68 +65 +65 +64 +58 +58 +55 +54 +54 +51 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +14 +12 +13 +13 +14 +14 +14 +13 +13 +14 +14 +13 +13 +14 +14 +14 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +14 +14 +14 +13 +13 +13 +15 +16 +15 +17 +17 +19 +19 +19 +21 +21 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +50 +51 +55 +55 +59 +58 +58 +64 +64 +68 +69 +68 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +115 +119 +119 +119 +126 +126 +129 +129 +133 +134 +134 +140 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +160 +161 +161 +165 +165 +168 +169 +169 +172 +173 +175 +175 +179 +179 +179 +182 +183 +185 +185 +185 +188 +188 +191 +191 +191 +194 +195 +197 +196 +197 +198 +198 +200 +200 +201 +200 +201 +203 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +207 +204 +205 +205 +204 +204 +202 +202 +201 +200 +200 +200 +200 +198 +198 +198 +196 +197 +196 +196 +197 +195 +194 +191 +191 +190 +189 +188 +184 +185 +185 +183 +183 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +140 +139 +139 +133 +133 +129 +129 +129 +126 +125 +119 +120 +119 +116 +115 +109 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +87 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +59 +58 +58 +54 +54 +51 +51 +51 +47 +47 +43 +42 +41 +41 +40 +37 +37 +33 +33 +33 +31 +31 +27 +26 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +18 +15 +15 +15 +15 +14 +13 +13 +12 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +14 +14 +13 +13 +13 +14 +14 +14 +14 +14 +13 +14 +14 +13 +13 +13 +13 +12 +15 +15 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +26 +27 +27 +31 +31 +33 +33 +33 +37 +37 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +51 +51 +55 +55 +59 +59 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +116 +115 +115 +119 +119 +126 +126 +125 +129 +129 +133 +133 +134 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +165 +165 +165 +169 +169 +172 +173 +173 +175 +175 +178 +179 +179 +183 +183 +185 +184 +185 +188 +188 +190 +190 +191 +194 +195 +196 +196 +199 +199 +199 +200 +200 +200 +200 +201 +202 +202 +203 +202 +203 +204 +204 +205 +204 +204 +207 +207 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +204 +204 +204 +205 +204 +205 +204 +205 +203 +203 +201 +201 +201 +200 +201 +198 +199 +199 +197 +197 +194 +195 +190 +191 +191 +188 +189 +185 +185 +185 +183 +183 +179 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +144 +139 +139 +134 +133 +134 +129 +129 +125 +125 +126 +119 +119 +116 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +73 +72 +73 +68 +68 +65 +64 +59 +59 +58 +55 +54 +50 +51 +51 +47 +47 +47 +47 +47 +42 +42 +40 +41 +41 +37 +37 +33 +33 +33 +31 +31 +28 +27 +26 +25 +25 +21 +21 +19 +19 +19 +17 +17 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +14 +13 +14 +14 +13 +13 +13 +14 +14 +14 +14 +13 +13 +14 +14 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +32 +33 +33 +37 +37 +41 +41 +42 +43 +43 +47 +47 +50 +51 +50 +55 +54 +58 +58 +59 +64 +64 +68 +68 +69 +72 +72 +76 +76 +76 +82 +82 +87 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +105 +110 +110 +110 +115 +116 +119 +119 +120 +126 +125 +130 +129 +130 +133 +133 +139 +139 +144 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +182 +184 +185 +185 +189 +189 +191 +190 +191 +194 +194 +196 +196 +196 +199 +199 +200 +201 +201 +200 +200 +202 +202 +203 +205 +205 +204 +204 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +207 +204 +204 +205 +205 +202 +202 +200 +200 +200 +200 +200 +198 +199 +197 +196 +196 +194 +194 +190 +191 +190 +188 +189 +185 +185 +185 +183 +183 +179 +179 +175 +175 +174 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +130 +130 +129 +125 +125 +120 +119 +119 +115 +116 +110 +110 +110 +106 +106 +100 +100 +99 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +68 +68 +64 +64 +59 +59 +59 +55 +55 +50 +50 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +34 +33 +33 +31 +31 +27 +27 +27 +25 +25 +25 +25 +25 +21 +21 +19 +19 +19 +18 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +14 +14 +13 +14 +14 +13 +13 +14 +13 +13 +13 +13 +14 +13 +13 +14 +14 +13 +14 +13 +13 +13 +14 +14 +13 +14 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +30 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +50 +51 +54 +55 +55 +58 +59 +64 +64 +64 +69 +68 +72 +72 +77 +76 +76 +82 +82 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +105 +106 +109 +110 +110 +116 +116 +120 +120 +126 +126 +126 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +162 +165 +165 +169 +169 +172 +173 +173 +175 +175 +179 +179 +179 +183 +183 +183 +183 +182 +185 +184 +188 +189 +188 +190 +190 +195 +194 +195 +196 +197 +198 +199 +200 +200 +201 +201 +200 +202 +202 +202 +204 +204 +205 +204 +204 +205 +204 +206 +207 +207 +206 +207 +206 +207 +206 +206 +207 +206 +206 +207 +207 +206 +204 +204 +204 +204 +205 +202 +202 +200 +200 +201 +201 +200 +198 +198 +199 +196 +197 +194 +194 +190 +191 +191 +189 +189 +185 +185 +185 +183 +182 +179 +179 +179 +175 +174 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +134 +133 +133 +130 +130 +126 +125 +125 +120 +119 +116 +115 +116 +110 +110 +106 +106 +100 +99 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +65 +65 +65 +58 +59 +54 +55 +51 +51 +50 +47 +46 +43 +43 +43 +41 +41 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +20 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +13 +13 +14 +13 +13 +14 +14 +13 +14 +14 +14 +13 +13 +13 +14 +14 +14 +13 +14 +13 +13 +13 +14 +14 +14 +13 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +28 +31 +30 +31 +31 +31 +33 +33 +37 +37 +37 +40 +41 +42 +43 +42 +47 +47 +50 +50 +55 +55 +54 +58 +59 +64 +64 +64 +68 +68 +72 +72 +73 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +115 +116 +119 +119 +126 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +156 +157 +157 +161 +161 +165 +165 +165 +169 +169 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +182 +183 +183 +184 +184 +189 +188 +190 +190 +191 +195 +194 +196 +196 +196 +198 +199 +198 +199 +199 +200 +200 +200 +200 +200 +203 +203 +204 +204 +204 +204 +205 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +207 +207 +207 +204 +205 +205 +205 +205 +203 +203 +200 +200 +201 +200 +200 +199 +198 +196 +197 +196 +194 +195 +191 +191 +190 +188 +188 +185 +184 +185 +183 +183 +178 +179 +179 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +130 +129 +125 +125 +120 +120 +119 +116 +115 +109 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +83 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +59 +59 +54 +54 +54 +55 +55 +51 +51 +47 +47 +47 +43 +43 +41 +40 +41 +37 +37 +33 +33 +30 +31 +31 +27 +27 +25 +25 +25 +21 +21 +21 +21 +21 +19 +19 +17 +17 +16 +15 +15 +15 +15 +14 +13 +13 +12 +13 +13 +13 +13 +13 +13 +14 +14 +13 +14 +14 +13 +13 +14 +14 +13 +14 +14 +14 +13 +14 +14 +13 +14 +13 +13 +14 +13 +15 +15 +15 +17 +17 +19 +20 +19 +21 +21 +25 +25 +25 +27 +27 +31 +30 +31 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +50 +51 +55 +54 +55 +59 +58 +64 +65 +64 +68 +68 +72 +72 +72 +76 +77 +82 +82 +87 +86 +86 +90 +90 +96 +95 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +116 +120 +119 +125 +125 +125 +129 +129 +133 +133 +139 +140 +139 +143 +143 +143 +143 +143 +147 +147 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +166 +165 +166 +169 +169 +173 +172 +175 +175 +175 +178 +178 +182 +183 +182 +185 +184 +185 +185 +184 +188 +189 +190 +191 +191 +194 +195 +196 +196 +198 +198 +199 +200 +201 +200 +200 +201 +202 +202 +204 +205 +205 +204 +204 +206 +206 +206 +206 +206 +206 +207 +207 +207 +206 +206 +206 +206 +207 +206 +204 +204 +204 +204 +204 +203 +203 +201 +200 +201 +200 +200 +198 +198 +199 +196 +197 +194 +194 +194 +191 +190 +189 +188 +185 +185 +184 +182 +182 +178 +179 +179 +174 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +144 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +125 +120 +119 +115 +115 +115 +110 +110 +106 +106 +107 +100 +100 +96 +96 +91 +90 +90 +86 +86 +82 +82 +82 +76 +77 +77 +76 +76 +73 +72 +69 +69 +68 +65 +65 +59 +58 +59 +55 +54 +51 +51 +47 +47 +47 +42 +43 +41 +41 +41 +37 +37 +36 +37 +37 +33 +33 +31 +31 +31 +27 +26 +25 +25 +22 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +13 +13 +13 +14 +13 +13 +14 +14 +13 +14 +14 +14 +14 +14 +14 +13 +14 +14 +13 +14 +14 +13 +14 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +42 +47 +46 +51 +51 +50 +54 +54 +58 +58 +64 +65 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +115 +115 +116 +119 +119 +125 +125 +126 +129 +129 +129 +129 +129 +134 +133 +140 +140 +140 +143 +143 +147 +147 +147 +151 +151 +156 +157 +161 +161 +161 +165 +165 +169 +169 +169 +172 +173 +173 +172 +173 +175 +175 +178 +179 +179 +182 +183 +185 +184 +188 +188 +189 +190 +191 +194 +195 +195 +197 +197 +198 +199 +199 +200 +200 +200 +201 +200 +202 +202 +204 +204 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +204 +204 +204 +204 +204 +203 +202 +200 +200 +200 +200 +201 +199 +198 +197 +196 +196 +195 +194 +190 +190 +190 +188 +188 +184 +184 +184 +182 +183 +179 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +126 +119 +119 +116 +115 +109 +110 +110 +105 +106 +100 +100 +100 +96 +96 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +72 +72 +68 +68 +64 +64 +64 +58 +58 +55 +55 +54 +50 +51 +50 +51 +51 +46 +47 +43 +43 +43 +41 +41 +37 +37 +34 +33 +33 +31 +31 +27 +28 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +14 +14 +14 +13 +14 +13 +13 +13 +13 +14 +14 +14 +14 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +12 +16 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +30 +31 +33 +33 +37 +37 +37 +40 +41 +43 +42 +47 +46 +47 +51 +51 +55 +55 +55 +59 +58 +64 +65 +64 +68 +68 +72 +72 +73 +76 +76 +82 +82 +83 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +105 +106 +109 +110 +110 +110 +110 +116 +116 +119 +120 +120 +125 +125 +129 +130 +131 +134 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +157 +157 +157 +161 +161 +165 +165 +165 +168 +169 +173 +172 +174 +174 +175 +179 +179 +182 +182 +183 +185 +185 +189 +189 +189 +191 +191 +195 +194 +195 +197 +197 +198 +198 +199 +201 +201 +200 +200 +202 +202 +203 +205 +204 +205 +205 +205 +206 +206 +206 +206 +207 +206 +206 +207 +206 +207 +206 +207 +206 +206 +207 +204 +205 +204 +204 +202 +202 +202 +201 +200 +200 +200 +200 +198 +198 +196 +197 +196 +194 +195 +191 +190 +191 +188 +188 +185 +185 +185 +183 +183 +179 +179 +175 +175 +175 +172 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +158 +151 +151 +151 +147 +148 +143 +143 +144 +139 +140 +133 +133 +129 +130 +130 +125 +125 +119 +119 +119 +116 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +88 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +69 +64 +64 +64 +64 +64 +58 +58 +55 +55 +54 +51 +50 +47 +47 +43 +43 +42 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +28 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +14 +13 +14 +13 +13 +13 +13 +13 +13 +14 +14 +13 +14 +13 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +37 +37 +36 +41 +41 +43 +43 +43 +47 +47 +51 +51 +51 +55 +55 +58 +58 +59 +64 +64 +69 +68 +69 +72 +72 +76 +77 +83 +82 +82 +86 +86 +90 +90 +90 +96 +96 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +116 +117 +120 +120 +126 +126 +129 +130 +129 +133 +133 +139 +139 +139 +143 +143 +143 +143 +147 +147 +147 +151 +151 +151 +157 +157 +161 +161 +162 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +178 +182 +183 +185 +184 +185 +189 +189 +190 +191 +191 +195 +195 +196 +196 +198 +198 +198 +200 +201 +200 +200 +200 +202 +202 +205 +204 +204 +205 +205 +207 +206 +206 +206 +206 +207 +206 +207 +207 +206 +207 +206 +206 +206 +206 +204 +204 +204 +204 +205 +202 +202 +201 +201 +200 +200 +201 +198 +198 +198 +197 +196 +194 +195 +195 +190 +191 +189 +188 +185 +184 +184 +183 +182 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +158 +151 +151 +147 +147 +143 +143 +143 +140 +140 +133 +134 +134 +129 +129 +126 +126 +124 +120 +119 +116 +116 +116 +109 +110 +106 +105 +106 +100 +100 +96 +96 +89 +90 +90 +86 +86 +83 +82 +82 +76 +76 +77 +76 +76 +73 +72 +68 +69 +68 +64 +64 +59 +58 +55 +54 +54 +50 +50 +47 +47 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +24 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +13 +14 +14 +14 +13 +14 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +14 +14 +13 +15 +15 +15 +17 +17 +19 +19 +20 +21 +21 +24 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +36 +41 +41 +41 +43 +43 +47 +47 +47 +51 +51 +55 +54 +55 +59 +59 +64 +64 +69 +68 +68 +72 +72 +76 +76 +76 +83 +82 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +101 +106 +106 +110 +110 +115 +116 +116 +120 +120 +125 +126 +125 +129 +129 +129 +129 +130 +134 +133 +139 +139 +139 +143 +143 +147 +147 +148 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +182 +183 +185 +185 +189 +189 +190 +191 +190 +194 +194 +196 +196 +196 +199 +198 +200 +200 +200 +201 +200 +203 +202 +202 +204 +204 +204 +205 +205 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +206 +206 +205 +204 +204 +204 +204 +202 +202 +202 +200 +200 +200 +200 +200 +198 +199 +196 +197 +195 +195 +194 +190 +190 +188 +188 +189 +184 +184 +182 +182 +182 +179 +178 +175 +174 +174 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +143 +144 +143 +139 +139 +133 +133 +134 +130 +129 +125 +125 +123 +120 +119 +115 +116 +109 +110 +110 +106 +106 +100 +100 +100 +96 +96 +95 +96 +96 +90 +90 +86 +86 +87 +82 +82 +76 +76 +75 +72 +72 +68 +68 +65 +64 +64 +59 +59 +55 +55 +54 +50 +51 +47 +46 +47 +43 +43 +41 +41 +41 +37 +37 +33 +32 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +12 +13 +14 +13 +14 +13 +14 +13 +14 +14 +13 +13 +14 +14 +14 +13 +13 +14 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +13 +13 +15 +15 +17 +18 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +47 +47 +47 +51 +50 +55 +54 +55 +59 +59 +58 +59 +59 +65 +64 +69 +68 +68 +72 +72 +76 +76 +78 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +105 +106 +106 +106 +106 +110 +110 +115 +115 +115 +119 +120 +125 +125 +129 +130 +129 +134 +134 +139 +139 +140 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +174 +175 +175 +179 +179 +183 +183 +182 +185 +185 +189 +189 +188 +190 +191 +195 +194 +195 +196 +196 +199 +199 +198 +200 +200 +200 +200 +202 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +207 +207 +206 +206 +206 +204 +205 +205 +205 +203 +203 +202 +201 +200 +200 +200 +201 +198 +199 +197 +197 +196 +195 +195 +191 +191 +191 +189 +189 +185 +185 +185 +183 +183 +179 +178 +175 +175 +175 +173 +169 +169 +169 +169 +165 +165 +166 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +145 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +126 +125 +120 +119 +119 +120 +119 +116 +116 +110 +110 +110 +106 +106 +100 +100 +98 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +69 +68 +64 +65 +58 +59 +58 +55 +54 +50 +51 +46 +46 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +30 +31 +27 +27 +27 +25 +25 +21 +21 +22 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +14 +14 +13 +13 +14 +14 +13 +14 +13 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +34 +33 +33 +37 +37 +42 +41 +41 +43 +43 +42 +43 +43 +48 +47 +51 +50 +51 +55 +54 +58 +59 +59 +65 +64 +68 +69 +72 +73 +72 +76 +76 +82 +82 +82 +87 +86 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +107 +110 +110 +116 +116 +119 +120 +119 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +160 +161 +161 +165 +164 +169 +169 +169 +173 +173 +175 +175 +175 +178 +179 +183 +183 +183 +185 +185 +189 +188 +188 +190 +191 +194 +194 +196 +196 +196 +199 +198 +201 +201 +200 +200 +200 +202 +202 +203 +204 +205 +204 +204 +204 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +204 +205 +204 +204 +205 +203 +202 +202 +201 +200 +201 +201 +201 +198 +198 +196 +196 +197 +194 +195 +190 +190 +188 +189 +189 +185 +185 +183 +183 +183 +178 +179 +179 +179 +179 +175 +175 +172 +173 +173 +169 +169 +165 +165 +163 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +139 +139 +139 +133 +133 +129 +130 +130 +126 +125 +119 +119 +116 +115 +116 +110 +109 +105 +105 +105 +100 +100 +95 +96 +96 +90 +90 +86 +86 +82 +82 +76 +76 +77 +72 +72 +68 +68 +64 +64 +64 +58 +58 +55 +54 +55 +50 +50 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +14 +15 +15 +15 +15 +13 +13 +13 +12 +14 +13 +14 +13 +13 +13 +13 +13 +13 +14 +13 +14 +13 +14 +14 +13 +14 +14 +14 +13 +13 +13 +14 +14 +14 +14 +13 +14 +14 +13 +12 +15 +15 +17 +17 +20 +19 +19 +21 +21 +24 +25 +25 +27 +28 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +50 +51 +51 +55 +54 +58 +58 +58 +64 +64 +64 +64 +64 +68 +68 +73 +72 +72 +76 +76 +82 +82 +84 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +116 +120 +119 +126 +126 +126 +129 +130 +134 +134 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +182 +182 +182 +185 +185 +189 +188 +189 +190 +191 +195 +194 +195 +196 +196 +199 +199 +198 +201 +201 +201 +200 +201 +202 +202 +204 +204 +205 +204 +204 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +204 +204 +205 +204 +204 +202 +203 +200 +201 +200 +200 +201 +198 +198 +198 +196 +197 +197 +197 +197 +195 +194 +191 +191 +190 +189 +190 +184 +185 +184 +183 +182 +179 +179 +174 +175 +175 +173 +173 +169 +169 +169 +164 +165 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +148 +144 +143 +143 +139 +139 +133 +133 +133 +129 +129 +126 +126 +125 +120 +119 +116 +115 +115 +109 +110 +106 +105 +106 +100 +100 +96 +96 +91 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +69 +64 +64 +65 +58 +58 +54 +54 +55 +50 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +20 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +14 +14 +13 +14 +14 +13 +13 +13 +14 +13 +13 +14 +14 +14 +13 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +13 +15 +15 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +26 +27 +26 +31 +31 +32 +33 +33 +37 +37 +41 +41 +41 +43 +43 +43 +42 +43 +46 +47 +50 +51 +51 +54 +54 +58 +58 +60 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +99 +100 +100 +106 +106 +110 +110 +115 +116 +116 +119 +119 +125 +125 +125 +129 +129 +134 +133 +133 +139 +139 +143 +143 +143 +146 +147 +151 +151 +152 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +179 +183 +182 +185 +185 +185 +189 +188 +190 +190 +190 +195 +194 +196 +196 +199 +199 +199 +200 +200 +200 +201 +201 +203 +202 +204 +204 +204 +205 +204 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +207 +206 +207 +206 +206 +204 +204 +204 +204 +204 +203 +202 +202 +202 +202 +201 +200 +201 +201 +201 +199 +199 +197 +196 +195 +194 +195 +191 +191 +188 +189 +188 +185 +185 +183 +183 +182 +179 +179 +179 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +162 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +130 +126 +126 +125 +119 +119 +115 +116 +110 +110 +110 +106 +106 +100 +100 +100 +95 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +68 +68 +64 +64 +59 +59 +59 +55 +55 +50 +50 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +32 +27 +27 +25 +25 +22 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +14 +13 +14 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +27 +27 +27 +31 +31 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +44 +47 +46 +51 +51 +54 +54 +54 +58 +59 +64 +65 +64 +68 +69 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +95 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +115 +115 +119 +119 +126 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +147 +147 +148 +151 +151 +157 +157 +157 +161 +161 +165 +166 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +178 +183 +183 +185 +185 +188 +189 +189 +191 +191 +194 +195 +194 +196 +197 +198 +198 +198 +201 +201 +200 +201 +200 +202 +202 +205 +205 +205 +204 +204 +206 +207 +207 +206 +207 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +203 +201 +201 +200 +200 +199 +198 +199 +197 +196 +195 +195 +194 +191 +190 +191 +190 +191 +188 +188 +185 +184 +184 +183 +183 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +129 +129 +129 +125 +125 +120 +119 +119 +115 +116 +110 +110 +110 +105 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +68 +69 +65 +64 +58 +58 +58 +55 +54 +51 +51 +51 +47 +46 +43 +43 +43 +41 +41 +37 +36 +34 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +16 +13 +13 +12 +13 +14 +13 +13 +14 +14 +14 +14 +14 +14 +14 +13 +14 +14 +13 +13 +13 +13 +14 +13 +13 +14 +13 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +21 +21 +21 +25 +25 +27 +27 +28 +31 +31 +33 +33 +34 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +50 +51 +55 +55 +58 +58 +59 +64 +64 +68 +68 +69 +72 +71 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +116 +120 +119 +119 +126 +125 +130 +129 +134 +133 +133 +140 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +172 +173 +175 +175 +179 +179 +179 +182 +182 +184 +185 +185 +188 +188 +191 +191 +190 +194 +194 +197 +197 +197 +198 +198 +200 +200 +201 +201 +201 +202 +202 +205 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +205 +204 +204 +205 +204 +202 +202 +202 +200 +201 +200 +200 +200 +198 +199 +198 +198 +199 +196 +196 +195 +194 +195 +191 +191 +188 +188 +187 +185 +185 +183 +183 +178 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +143 +143 +143 +140 +139 +133 +133 +133 +130 +129 +126 +126 +125 +119 +119 +115 +116 +116 +110 +110 +106 +106 +105 +100 +100 +96 +96 +89 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +58 +58 +54 +54 +55 +50 +51 +47 +46 +43 +43 +43 +41 +41 +37 +37 +37 +33 +34 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +20 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +14 +14 +13 +14 +14 +14 +13 +13 +13 +14 +14 +14 +13 +14 +14 +14 +14 +13 +13 +14 +14 +13 +14 +13 +13 +12 +15 +15 +15 +15 +15 +17 +18 +19 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +30 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +46 +47 +47 +50 +51 +54 +54 +55 +59 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +77 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +115 +120 +120 +120 +125 +125 +129 +129 +129 +133 +134 +140 +139 +139 +143 +143 +147 +147 +147 +151 +151 +156 +157 +157 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +178 +179 +183 +183 +183 +185 +185 +188 +189 +188 +190 +190 +195 +195 +195 +196 +196 +199 +198 +201 +200 +200 +200 +200 +202 +202 +202 +204 +204 +205 +204 +205 +205 +204 +206 +206 +206 +207 +206 +207 +206 +206 +207 +206 +206 +207 +206 +206 +206 +204 +204 +204 +204 +204 +202 +203 +202 +202 +203 +200 +201 +200 +200 +200 +198 +198 +196 +196 +195 +195 +194 +191 +191 +188 +188 +189 +185 +184 +183 +183 +182 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +158 +157 +157 +151 +150 +147 +147 +147 +144 +143 +139 +139 +139 +133 +133 +129 +129 +130 +125 +125 +120 +119 +120 +116 +116 +110 +110 +106 +105 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +77 +76 +72 +72 +69 +68 +68 +65 +64 +59 +58 +54 +55 +54 +51 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +15 +15 +15 +13 +13 +13 +13 +14 +13 +14 +13 +14 +14 +13 +13 +13 +13 +14 +14 +13 +14 +14 +13 +14 +13 +13 +13 +14 +14 +14 +14 +13 +14 +13 +13 +14 +13 +15 +15 +16 +17 +17 +20 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +40 +41 +41 +43 +42 +47 +47 +50 +51 +50 +54 +55 +58 +59 +58 +65 +65 +68 +69 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +116 +120 +120 +119 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +152 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +172 +174 +175 +174 +175 +178 +178 +183 +182 +183 +185 +185 +189 +189 +191 +191 +190 +194 +195 +196 +196 +196 +198 +198 +199 +198 +199 +200 +201 +200 +200 +201 +203 +202 +204 +205 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +204 +204 +205 +204 +204 +202 +202 +201 +200 +201 +200 +200 +198 +198 +198 +197 +197 +195 +195 +195 +190 +190 +188 +189 +188 +185 +185 +183 +183 +183 +179 +178 +175 +174 +173 +172 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +140 +139 +133 +133 +129 +129 +125 +125 +125 +120 +120 +115 +115 +115 +110 +110 +106 +106 +106 +100 +100 +97 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +59 +59 +59 +58 +58 +55 +55 +51 +50 +50 +46 +46 +43 +42 +44 +41 +40 +37 +36 +33 +33 +32 +31 +31 +27 +27 +27 +25 +25 +25 +25 +24 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +14 +13 +14 +14 +14 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +46 +47 +51 +51 +54 +54 +54 +58 +58 +64 +64 +65 +68 +68 +72 +72 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +105 +109 +110 +115 +116 +115 +120 +119 +126 +125 +130 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +164 +165 +166 +169 +169 +173 +173 +175 +175 +175 +179 +178 +182 +183 +183 +185 +184 +185 +184 +185 +189 +189 +190 +191 +191 +195 +195 +196 +197 +197 +199 +199 +200 +200 +200 +200 +200 +202 +203 +205 +205 +205 +205 +204 +204 +205 +205 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +207 +207 +204 +205 +205 +205 +204 +202 +202 +202 +200 +200 +200 +200 +200 +198 +198 +196 +196 +197 +194 +194 +191 +191 +188 +189 +189 +184 +185 +183 +182 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +148 +147 +147 +143 +143 +139 +139 +139 +133 +133 +130 +129 +129 +126 +125 +120 +119 +116 +116 +110 +110 +110 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +59 +59 +59 +54 +55 +50 +51 +47 +46 +47 +43 +42 +41 +40 +41 +37 +37 +32 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +13 +13 +13 +14 +13 +14 +14 +13 +13 +14 +14 +14 +14 +13 +14 +13 +14 +14 +13 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +24 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +42 +42 +43 +47 +46 +50 +51 +51 +55 +55 +59 +58 +65 +64 +64 +68 +69 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +105 +110 +110 +116 +115 +115 +119 +119 +125 +125 +125 +129 +130 +133 +133 +133 +139 +139 +142 +143 +143 +147 +147 +151 +151 +152 +157 +157 +161 +161 +166 +165 +165 +169 +169 +173 +173 +172 +175 +175 +175 +175 +175 +178 +179 +182 +183 +183 +185 +185 +188 +188 +189 +191 +191 +194 +194 +196 +196 +196 +198 +198 +200 +200 +200 +200 +200 +201 +200 +201 +202 +202 +204 +205 +205 +205 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +204 +204 +205 +204 +204 +202 +202 +200 +200 +201 +200 +201 +198 +198 +196 +196 +196 +194 +194 +190 +190 +190 +189 +188 +185 +185 +185 +183 +182 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +146 +143 +143 +143 +139 +140 +133 +133 +133 +129 +129 +125 +125 +125 +120 +119 +116 +116 +111 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +74 +68 +68 +64 +64 +58 +58 +58 +54 +54 +51 +50 +51 +46 +47 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +32 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +14 +14 +14 +13 +14 +13 +14 +13 +14 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +13 +13 +13 +13 +13 +13 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +40 +41 +43 +42 +47 +46 +47 +50 +50 +55 +55 +55 +58 +59 +64 +65 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +95 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +116 +115 +119 +120 +125 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +176 +179 +179 +182 +183 +184 +184 +184 +188 +189 +190 +190 +190 +195 +194 +194 +194 +194 +196 +196 +198 +198 +199 +200 +201 +200 +200 +202 +203 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +205 +203 +203 +202 +200 +201 +200 +200 +200 +198 +198 +196 +196 +196 +195 +194 +190 +191 +190 +189 +188 +184 +184 +185 +182 +182 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +144 +139 +139 +133 +133 +130 +129 +129 +125 +125 +119 +119 +119 +116 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +68 +68 +64 +64 +64 +64 +65 +58 +58 +54 +54 +54 +51 +50 +47 +46 +48 +43 +43 +41 +41 +36 +37 +37 +33 +33 +31 +31 +31 +27 +27 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +14 +13 +13 +13 +13 +14 +13 +14 +14 +13 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +32 +37 +37 +41 +41 +41 +43 +43 +46 +47 +47 +51 +51 +55 +55 +54 +58 +58 +64 +64 +64 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +99 +106 +106 +105 +110 +110 +116 +116 +115 +119 +120 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +143 +143 +143 +147 +148 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +172 +173 +172 +175 +175 +179 +179 +179 +182 +183 +183 +183 +183 +185 +184 +188 +189 +189 +190 +191 +195 +195 +197 +196 +197 +199 +198 +201 +200 +200 +200 +201 +202 +202 +202 +204 +204 +205 +204 +205 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +204 +204 +204 +205 +204 +202 +202 +201 +200 +200 +200 +200 +198 +199 +198 +196 +197 +194 +194 +191 +190 +190 +188 +188 +185 +185 +184 +183 +183 +178 +179 +179 +175 +174 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +140 +133 +133 +133 +129 +130 +126 +125 +125 +119 +119 +115 +116 +116 +110 +109 +106 +106 +99 +100 +100 +96 +96 +90 +90 +90 +86 +86 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +66 +65 +64 +58 +58 +55 +54 +54 +50 +51 +47 +47 +47 +43 +43 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +28 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +18 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +13 +14 +14 +13 +14 +14 +14 +14 +13 +13 +14 +13 +13 +13 +13 +14 +13 +13 +14 +14 +13 +14 +13 +13 +13 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +50 +55 +54 +54 +58 +59 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +91 +96 +95 +100 +100 +106 +106 +106 +110 +109 +116 +115 +116 +119 +119 +125 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +145 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +182 +182 +185 +185 +185 +189 +189 +191 +190 +190 +194 +194 +196 +197 +196 +198 +199 +200 +200 +200 +201 +200 +202 +202 +203 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +203 +200 +200 +200 +201 +199 +198 +199 +197 +196 +195 +195 +194 +190 +191 +189 +188 +188 +185 +185 +182 +183 +183 +178 +179 +175 +175 +175 +172 +173 +169 +169 +165 +164 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +134 +129 +129 +130 +125 +125 +120 +119 +115 +115 +115 +110 +110 +106 +106 +106 +100 +100 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +79 +76 +76 +73 +72 +68 +68 +68 +65 +64 +58 +58 +58 +55 +55 +55 +55 +55 +51 +51 +46 +47 +47 +43 +42 +40 +41 +37 +37 +36 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +14 +13 +13 +13 +14 +14 +13 +14 +13 +14 +13 +14 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +40 +43 +42 +43 +47 +47 +50 +50 +51 +54 +54 +58 +58 +59 +64 +64 +68 +68 +69 +72 +72 +76 +76 +77 +82 +82 +86 +86 +90 +90 +90 +95 +96 +100 +100 +100 +106 +106 +106 +105 +106 +110 +110 +115 +115 +115 +120 +120 +125 +125 +126 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +172 +173 +173 +174 +175 +178 +179 +179 +183 +183 +185 +184 +184 +188 +188 +191 +190 +190 +194 +195 +196 +197 +197 +199 +199 +200 +201 +201 +200 +200 +202 +202 +204 +204 +204 +204 +204 +207 +206 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +204 +205 +205 +204 +204 +202 +202 +201 +201 +200 +201 +200 +199 +198 +198 +196 +196 +195 +194 +194 +191 +191 +188 +188 +188 +185 +185 +183 +183 +178 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +134 +133 +133 +129 +129 +126 +125 +125 +119 +119 +115 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +82 +82 +82 +76 +76 +73 +72 +72 +68 +69 +68 +68 +68 +64 +64 +59 +58 +59 +55 +54 +51 +51 +47 +47 +46 +43 +43 +41 +41 +40 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +14 +13 +13 +14 +13 +13 +14 +13 +13 +13 +14 +14 +13 +14 +14 +13 +14 +13 +14 +13 +13 +14 +14 +13 +13 +13 +15 +15 +15 +17 +17 +18 +19 +19 +21 +21 +25 +25 +26 +26 +27 +31 +31 +34 +32 +33 +37 +37 +41 +41 +41 +43 +43 +47 +46 +47 +50 +50 +54 +55 +55 +58 +58 +64 +64 +65 +68 +68 +72 +72 +76 +76 +76 +82 +82 +87 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +116 +117 +119 +120 +125 +125 +129 +129 +129 +134 +133 +139 +139 +139 +143 +143 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +162 +161 +163 +165 +165 +168 +169 +173 +173 +173 +175 +174 +179 +179 +179 +182 +183 +184 +185 +184 +189 +188 +191 +190 +191 +194 +195 +196 +197 +198 +198 +199 +200 +200 +200 +201 +200 +202 +202 +205 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +207 +206 +204 +204 +204 +204 +204 +203 +202 +202 +203 +203 +200 +200 +201 +200 +200 +198 +199 +196 +197 +197 +194 +194 +190 +190 +189 +188 +188 +185 +184 +183 +182 +182 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +148 +147 +147 +143 +143 +139 +140 +139 +133 +133 +133 +133 +133 +129 +129 +125 +126 +125 +120 +119 +116 +115 +113 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +67 +65 +64 +59 +58 +54 +54 +54 +51 +51 +47 +47 +47 +43 +42 +41 +41 +41 +37 +37 +33 +33 +34 +31 +31 +28 +27 +26 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +14 +14 +14 +14 +13 +14 +14 +14 +14 +13 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +13 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +22 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +32 +33 +37 +37 +40 +41 +41 +43 +43 +47 +47 +47 +51 +51 +55 +55 +58 +59 +58 +65 +65 +68 +68 +68 +72 +72 +76 +76 +76 +83 +82 +86 +86 +86 +89 +90 +96 +96 +97 +100 +100 +106 +106 +109 +110 +110 +115 +115 +119 +120 +119 +125 +125 +125 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +172 +173 +175 +175 +179 +179 +179 +182 +183 +185 +185 +188 +189 +189 +190 +190 +195 +195 +194 +196 +196 +198 +198 +198 +200 +200 +200 +200 +200 +202 +202 +204 +204 +204 +204 +204 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +203 +202 +200 +200 +200 +200 +201 +198 +198 +197 +197 +196 +194 +194 +191 +190 +191 +188 +189 +185 +185 +184 +183 +183 +179 +179 +179 +175 +175 +173 +172 +173 +169 +169 +165 +165 +160 +161 +161 +157 +157 +151 +151 +151 +147 +147 +147 +147 +147 +143 +143 +139 +139 +139 +134 +133 +130 +129 +128 +125 +125 +119 +119 +115 +115 +116 +110 +110 +106 +105 +106 +100 +100 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +79 +76 +76 +72 +72 +68 +68 +68 +64 +64 +59 +58 +58 +54 +54 +51 +51 +50 +46 +47 +43 +43 +43 +41 +40 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +14 +13 +14 +14 +14 +14 +14 +14 +13 +14 +13 +14 +14 +13 +13 +14 +14 +13 +14 +13 +14 +13 +13 +13 +13 +13 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +25 +27 +27 +30 +31 +31 +33 +33 +37 +37 +38 +41 +41 +42 +43 +47 +47 +47 +50 +50 +54 +54 +54 +58 +58 +59 +59 +59 +65 +65 +68 +68 +68 +72 +72 +76 +76 +79 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +106 +106 +106 +110 +109 +116 +116 +116 +119 +119 +125 +126 +127 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +174 +175 +175 +179 +179 +182 +182 +182 +185 +185 +189 +188 +188 +190 +190 +195 +195 +194 +197 +196 +198 +198 +198 +200 +200 +200 +200 +203 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +204 +204 +205 +204 +203 +202 +202 +201 +200 +200 +201 +200 +198 +198 +196 +196 +196 +195 +194 +191 +190 +191 +188 +189 +184 +185 +185 +183 +182 +179 +178 +175 +175 +175 +173 +173 +169 +169 +169 +164 +165 +165 +165 +165 +160 +161 +157 +157 +157 +151 +151 +147 +147 +145 +143 +143 +139 +139 +134 +133 +134 +129 +129 +125 +125 +125 +119 +119 +119 +119 +120 +115 +116 +109 +110 +110 +106 +106 +100 +100 +97 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +65 +58 +58 +59 +54 +54 +51 +50 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +14 +14 +13 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +34 +33 +33 +36 +37 +40 +41 +41 +42 +43 +47 +46 +46 +51 +51 +54 +54 +55 +58 +58 +65 +64 +65 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +110 +112 +116 +116 +119 +119 +125 +125 +125 +130 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +151 +151 +157 +157 +160 +161 +160 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +178 +183 +183 +183 +184 +184 +188 +188 +188 +191 +191 +194 +194 +197 +196 +196 +198 +199 +200 +200 +200 +200 +200 +203 +203 +202 +204 +204 +205 +204 +204 +206 +206 +206 +206 +207 +206 +207 +206 +206 +207 +206 +207 +206 +206 +204 +204 +204 +204 +204 +202 +202 +202 +200 +201 +200 +200 +201 +199 +199 +196 +196 +197 +194 +194 +190 +190 +189 +188 +189 +184 +185 +183 +183 +182 +178 +179 +179 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +166 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +139 +139 +139 +133 +133 +129 +129 +130 +125 +125 +120 +119 +116 +115 +116 +109 +109 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +72 +72 +68 +68 +64 +64 +65 +58 +59 +54 +55 +55 +51 +50 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +13 +13 +14 +13 +13 +13 +14 +13 +14 +13 +13 +14 +13 +13 +13 +14 +13 +13 +14 +14 +14 +13 +13 +14 +13 +13 +15 +15 +16 +17 +18 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +46 +47 +48 +51 +51 +54 +55 +58 +58 +58 +64 +64 +68 +68 +68 +72 +72 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +116 +119 +120 +126 +125 +125 +129 +129 +133 +133 +134 +140 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +179 +182 +182 +185 +185 +189 +189 +189 +191 +190 +194 +194 +195 +196 +197 +198 +198 +198 +200 +201 +201 +200 +200 +202 +203 +204 +204 +205 +204 +205 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +204 +204 +204 +204 +205 +202 +202 +201 +200 +201 +200 +200 +198 +198 +198 +196 +197 +194 +194 +190 +190 +191 +188 +188 +189 +189 +188 +185 +185 +182 +183 +183 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +130 +129 +129 +125 +125 +119 +120 +120 +116 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +65 +64 +59 +58 +58 +54 +55 +50 +51 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +16 +13 +13 +13 +13 +14 +13 +14 +13 +13 +14 +13 +14 +14 +14 +13 +13 +13 +14 +14 +13 +13 +14 +13 +13 +14 +13 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +39 +41 +40 +43 +43 +47 +47 +47 +51 +50 +55 +55 +55 +58 +59 +59 +59 +58 +64 +64 +68 +68 +69 +72 +72 +76 +76 +78 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +115 +120 +120 +120 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +179 +179 +179 +182 +182 +184 +184 +184 +188 +189 +190 +191 +191 +194 +194 +197 +196 +196 +198 +198 +200 +200 +200 +200 +201 +202 +202 +205 +204 +204 +204 +204 +206 +206 +207 +206 +206 +207 +206 +207 +206 +206 +206 +207 +206 +206 +207 +204 +204 +205 +204 +204 +202 +202 +200 +200 +200 +200 +200 +199 +199 +199 +196 +196 +197 +196 +196 +194 +194 +190 +190 +190 +188 +188 +185 +185 +183 +183 +183 +179 +178 +174 +175 +175 +172 +172 +169 +169 +169 +165 +165 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +144 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +125 +119 +119 +115 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +91 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +65 +58 +59 +54 +54 +55 +51 +50 +47 +46 +43 +42 +43 +41 +40 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +20 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +14 +13 +14 +13 +13 +13 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +30 +33 +33 +37 +37 +38 +41 +41 +43 +43 +43 +47 +47 +46 +47 +47 +51 +50 +54 +54 +54 +58 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +105 +106 +110 +110 +116 +115 +119 +119 +119 +126 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +169 +169 +169 +173 +172 +175 +175 +175 +178 +178 +182 +182 +182 +184 +185 +188 +189 +188 +190 +191 +194 +194 +195 +196 +197 +198 +198 +201 +200 +200 +200 +200 +202 +202 +202 +205 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +205 +204 +204 +205 +204 +202 +202 +202 +200 +200 +200 +200 +200 +198 +198 +196 +197 +197 +194 +194 +190 +191 +191 +188 +189 +184 +184 +182 +183 +182 +178 +178 +175 +175 +175 +173 +173 +173 +172 +172 +169 +169 +165 +165 +164 +161 +161 +157 +157 +157 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +125 +119 +119 +116 +116 +115 +110 +110 +106 +105 +101 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +69 +64 +64 +65 +58 +59 +54 +55 +51 +50 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +16 +15 +15 +13 +13 +12 +12 +13 +14 +13 +14 +14 +14 +14 +13 +13 +13 +14 +13 +14 +13 +14 +13 +14 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +20 +21 +21 +23 +25 +25 +27 +27 +31 +31 +30 +33 +33 +37 +37 +37 +41 +41 +40 +41 +41 +42 +42 +47 +47 +47 +50 +50 +54 +55 +56 +59 +58 +64 +64 +69 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +105 +106 +109 +110 +110 +116 +115 +119 +120 +119 +125 +126 +130 +130 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +161 +161 +161 +165 +165 +168 +169 +169 +173 +173 +175 +175 +175 +179 +178 +182 +183 +183 +184 +185 +188 +188 +189 +190 +190 +195 +194 +197 +196 +196 +198 +199 +200 +200 +200 +200 +200 +203 +202 +202 +204 +204 +204 +204 +204 +206 +207 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +205 +203 +202 +202 +201 +201 +200 +201 +201 +198 +198 +196 +197 +195 +194 +195 +190 +190 +188 +188 +189 +184 +185 +182 +183 +182 +179 +178 +179 +178 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +162 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +134 +133 +133 +130 +129 +126 +125 +126 +119 +120 +115 +116 +109 +110 +110 +105 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +58 +59 +58 +54 +54 +51 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +36 +36 +33 +33 +31 +31 +31 +26 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +12 +13 +14 +13 +13 +14 +14 +13 +14 +13 +13 +14 +13 +13 +13 +14 +14 +13 +13 +14 +13 +13 +13 +13 +14 +13 +13 +13 +12 +15 +15 +17 +16 +18 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +33 +33 +33 +37 +37 +41 +41 +41 +43 +42 +47 +47 +50 +50 +50 +54 +54 +59 +59 +58 +65 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +115 +120 +119 +119 +125 +125 +129 +130 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +182 +183 +182 +184 +185 +188 +189 +191 +190 +190 +194 +194 +196 +196 +196 +198 +198 +200 +200 +200 +200 +200 +203 +202 +202 +204 +204 +204 +204 +205 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +205 +204 +204 +204 +204 +202 +203 +200 +201 +200 +200 +201 +199 +198 +196 +196 +197 +194 +194 +190 +190 +190 +188 +188 +189 +188 +188 +184 +185 +183 +182 +183 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +140 +139 +139 +140 +133 +133 +129 +129 +129 +125 +125 +119 +120 +119 +116 +116 +110 +110 +110 +106 +106 +99 +100 +100 +96 +96 +89 +90 +90 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +58 +59 +55 +54 +50 +50 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +34 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +16 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +13 +14 +14 +13 +14 +14 +14 +13 +14 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +15 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +32 +33 +37 +37 +36 +41 +41 +43 +43 +43 +47 +47 +51 +51 +51 +54 +54 +58 +58 +59 +65 +64 +68 +68 +69 +72 +72 +76 +76 +81 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +115 +119 +120 +120 +125 +125 +129 +129 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +174 +179 +179 +179 +183 +182 +185 +184 +185 +188 +188 +191 +190 +190 +194 +194 +196 +197 +196 +198 +198 +200 +200 +201 +200 +201 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +205 +204 +205 +202 +202 +200 +200 +200 +200 +200 +198 +198 +198 +196 +196 +197 +196 +196 +194 +195 +191 +190 +190 +189 +189 +185 +184 +183 +183 +182 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +139 +139 +139 +133 +133 +130 +129 +129 +125 +126 +119 +119 +120 +115 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +87 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +59 +58 +59 +55 +54 +51 +51 +51 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +32 +33 +31 +32 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +14 +14 +14 +13 +13 +13 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +14 +14 +14 +14 +13 +14 +14 +14 +13 +13 +12 +15 +15 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +26 +31 +31 +32 +33 +33 +37 +36 +41 +41 +41 +43 +43 +47 +47 +47 +51 +51 +55 +55 +55 +59 +58 +65 +65 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +119 +120 +119 +125 +126 +129 +130 +129 +134 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +182 +182 +184 +184 +188 +188 +189 +190 +191 +194 +195 +195 +197 +196 +198 +198 +201 +200 +201 +200 +201 +202 +202 +202 +204 +204 +204 +204 +204 +204 +204 +206 +206 +207 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +201 +202 +203 +202 +200 +200 +200 +200 +201 +198 +199 +196 +196 +195 +195 +195 +190 +191 +189 +188 +188 +185 +185 +182 +183 +182 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +126 +119 +119 +120 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +69 +69 +64 +64 +59 +59 +55 +54 +54 +51 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +26 +27 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +14 +14 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +50 +54 +54 +58 +59 +58 +64 +64 +69 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +110 +110 +110 +115 +116 +119 +119 +119 +126 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +174 +175 +175 +179 +178 +182 +182 +182 +184 +184 +189 +189 +189 +191 +190 +194 +194 +196 +196 +196 +199 +198 +200 +201 +200 +200 +201 +200 +200 +200 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +204 +204 +202 +202 +203 +201 +200 +200 +200 +199 +198 +199 +196 +197 +194 +195 +195 +191 +191 +189 +188 +188 +184 +184 +182 +183 +183 +179 +179 +175 +175 +175 +173 +173 +168 +169 +165 +164 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +126 +125 +119 +119 +115 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +65 +64 +64 +59 +59 +55 +55 +54 +50 +51 +47 +47 +47 +43 +42 +41 +41 +41 +37 +36 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +13 +14 +14 +14 +14 +14 +14 +14 +13 +13 +13 +14 +13 +14 +14 +13 +13 +14 +13 +14 +13 +13 +14 +14 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +36 +41 +41 +42 +43 +42 +47 +47 +51 +51 +50 +55 +54 +59 +58 +59 +65 +64 +68 +68 +73 +72 +76 +76 +76 +82 +82 +86 +86 +91 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +116 +119 +119 +119 +125 +125 +130 +129 +130 +133 +133 +139 +139 +144 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +162 +161 +165 +165 +169 +168 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +184 +184 +184 +188 +189 +191 +191 +191 +195 +194 +195 +195 +194 +197 +196 +198 +199 +198 +201 +201 +200 +201 +202 +202 +203 +205 +204 +205 +205 +204 +207 +206 +206 +207 +206 +207 +206 +206 +206 +207 +206 +207 +206 +207 +206 +206 +207 +204 +204 +205 +205 +205 +202 +202 +200 +200 +201 +201 +200 +199 +199 +199 +197 +197 +195 +194 +195 +191 +191 +189 +188 +188 +185 +185 +182 +183 +183 +179 +179 +174 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +134 +133 +134 +129 +129 +125 +125 +126 +119 +120 +116 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +87 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +65 +64 +64 +59 +58 +54 +54 +54 +51 +50 +47 +47 +47 +43 +43 +41 +41 +38 +37 +37 +33 +33 +31 +31 +31 +27 +27 +27 +27 +27 +24 +25 +21 +21 +21 +19 +19 +17 +17 +16 +15 +15 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +14 +14 +14 +14 +13 +13 +14 +13 +13 +13 +14 +13 +13 +14 +13 +14 +14 +13 +13 +14 +13 +13 +14 +13 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +50 +54 +54 +55 +58 +58 +64 +65 +69 +68 +68 +72 +72 +76 +76 +76 +82 +82 +87 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +120 +119 +119 +125 +125 +129 +129 +130 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +158 +161 +161 +165 +165 +165 +165 +164 +169 +169 +173 +173 +173 +175 +175 +179 +179 +178 +182 +183 +184 +185 +185 +188 +188 +191 +190 +192 +195 +194 +197 +196 +198 +199 +199 +200 +200 +200 +200 +200 +202 +203 +203 +202 +202 +204 +204 +204 +204 +205 +206 +206 +206 +206 +207 +206 +206 +206 +207 +207 +206 +206 +207 +206 +204 +205 +204 +204 +204 +202 +202 +202 +200 +201 +201 +200 +200 +198 +199 +196 +197 +194 +194 +195 +190 +191 +188 +189 +189 +184 +185 +182 +183 +182 +179 +178 +175 +174 +175 +172 +172 +169 +168 +170 +165 +165 +161 +161 +158 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +134 +129 +129 +130 +126 +125 +120 +120 +119 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +59 +58 +55 +54 +54 +50 +51 +47 +47 +47 +43 +43 +43 +42 +43 +41 +41 +37 +37 +37 +34 +33 +31 +31 +32 +27 +27 +25 +25 +22 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +16 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +13 +14 +14 +14 +14 +13 +13 +14 +13 +13 +14 +14 +13 +14 +14 +13 +14 +14 +13 +14 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +46 +47 +51 +51 +51 +55 +55 +58 +58 +58 +64 +64 +64 +64 +64 +69 +68 +72 +72 +73 +76 +76 +82 +82 +83 +86 +86 +90 +90 +97 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +116 +119 +119 +126 +125 +125 +130 +130 +134 +133 +133 +140 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +176 +178 +179 +183 +183 +185 +184 +185 +188 +189 +191 +190 +190 +194 +194 +194 +195 +194 +196 +196 +199 +198 +199 +200 +200 +200 +201 +201 +203 +203 +204 +204 +204 +204 +204 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +207 +207 +204 +205 +205 +204 +203 +202 +202 +200 +200 +201 +200 +201 +199 +199 +197 +197 +196 +194 +194 +191 +190 +190 +189 +189 +184 +185 +185 +183 +182 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +152 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +130 +129 +129 +125 +125 +119 +120 +120 +116 +115 +110 +110 +109 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +73 +73 +68 +68 +69 +64 +64 +64 +64 +64 +59 +58 +54 +55 +55 +51 +50 +47 +47 +47 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +14 +14 +14 +13 +14 +14 +13 +13 +14 +14 +14 +13 +13 +13 +14 +14 +14 +14 +14 +13 +14 +14 +14 +13 +13 +15 +15 +15 +18 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +46 +51 +51 +55 +54 +55 +59 +59 +65 +64 +65 +68 +68 +72 +72 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +105 +106 +106 +110 +110 +116 +115 +116 +120 +120 +125 +125 +128 +129 +129 +133 +134 +139 +139 +139 +143 +143 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +162 +165 +165 +169 +169 +173 +173 +173 +174 +175 +179 +178 +178 +183 +182 +183 +182 +182 +185 +185 +189 +188 +189 +190 +191 +195 +195 +195 +196 +197 +199 +198 +200 +200 +200 +201 +200 +202 +202 +203 +204 +204 +205 +204 +205 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +202 +200 +201 +200 +201 +200 +198 +198 +196 +196 +196 +194 +195 +191 +190 +188 +189 +188 +185 +185 +182 +182 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +148 +147 +147 +143 +143 +139 +139 +140 +133 +133 +129 +129 +129 +125 +125 +119 +119 +119 +115 +115 +109 +110 +110 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +72 +72 +68 +68 +68 +65 +64 +59 +58 +59 +54 +55 +50 +51 +47 +46 +47 +43 +43 +41 +41 +41 +37 +36 +36 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +23 +21 +21 +18 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +14 +14 +14 +14 +14 +13 +14 +14 +13 +14 +13 +14 +14 +13 +14 +14 +13 +13 +13 +13 +13 +14 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +26 +25 +25 +27 +27 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +46 +46 +47 +51 +50 +55 +55 +59 +58 +58 +65 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +110 +110 +110 +115 +115 +119 +119 +120 +125 +125 +125 +125 +125 +129 +130 +133 +134 +133 +140 +139 +143 +143 +145 +147 +147 +151 +151 +156 +157 +157 +161 +161 +165 +165 +165 +169 +169 +169 +169 +169 +173 +173 +175 +175 +174 +179 +179 +183 +183 +183 +184 +185 +189 +189 +190 +191 +191 +194 +195 +197 +197 +197 +199 +199 +201 +200 +200 +200 +200 +202 +202 +203 +204 +205 +204 +205 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +206 +207 +205 +204 +204 +205 +204 +203 +203 +203 +201 +201 +201 +200 +199 +199 +198 +197 +197 +194 +195 +194 +190 +191 +189 +189 +188 +185 +185 +183 +183 +183 +179 +178 +175 +174 +175 +173 +173 +169 +169 +166 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +140 +139 +133 +133 +129 +129 +130 +125 +126 +119 +119 +115 +115 +115 +110 +110 +106 +106 +106 +100 +100 +99 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +83 +76 +76 +72 +72 +68 +69 +69 +64 +64 +59 +59 +59 +55 +54 +54 +55 +55 +51 +51 +47 +46 +47 +42 +43 +41 +41 +38 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +16 +15 +13 +13 +13 +12 +13 +14 +14 +14 +14 +14 +13 +13 +13 +13 +14 +13 +14 +14 +14 +14 +14 +13 +14 +14 +14 +13 +14 +14 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +36 +37 +41 +41 +43 +43 +43 +46 +47 +50 +51 +51 +54 +54 +58 +58 +58 +64 +65 +69 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +106 +106 +106 +110 +110 +115 +115 +115 +119 +120 +125 +125 +127 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +170 +173 +173 +175 +175 +179 +179 +179 +182 +183 +185 +185 +185 +189 +189 +191 +191 +191 +195 +194 +196 +196 +196 +198 +199 +200 +201 +200 +200 +200 +203 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +207 +204 +205 +204 +204 +204 +203 +203 +200 +200 +200 +201 +201 +198 +198 +198 +197 +197 +195 +195 +194 +191 +190 +189 +189 +189 +185 +184 +183 +182 +179 +178 +179 +175 +175 +173 +173 +173 +169 +168 +165 +165 +165 +161 +161 +157 +157 +157 +151 +150 +147 +147 +148 +143 +143 +139 +139 +134 +133 +133 +130 +130 +125 +125 +126 +120 +119 +120 +119 +120 +116 +116 +110 +110 +110 +106 +106 +100 +100 +101 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +72 +72 +72 +68 +68 +65 +64 +64 +59 +59 +54 +54 +51 +51 +50 +47 +47 +42 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +14 +13 +14 +14 +13 +14 +13 +13 +13 +13 +13 +14 +13 +14 +13 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +50 +50 +54 +54 +59 +58 +61 +65 +65 +68 +68 +73 +73 +72 +76 +76 +82 +82 +82 +86 +86 +86 +85 +86 +90 +90 +96 +96 +96 +100 +100 +106 +105 +106 +110 +110 +116 +115 +119 +119 +119 +125 +126 +130 +129 +129 +133 +133 +133 +134 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +154 +157 +157 +161 +161 +164 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +185 +185 +185 +188 +189 +190 +190 +194 +195 +195 +197 +196 +196 +197 +196 +199 +198 +200 +200 +200 +200 +200 +202 +203 +202 +204 +204 +204 +204 +204 +206 +207 +206 +206 +207 +207 +207 +206 +206 +206 +207 +206 +207 +206 +205 +204 +204 +204 +204 +202 +202 +202 +200 +201 +200 +200 +200 +199 +199 +197 +196 +195 +194 +195 +190 +190 +189 +189 +189 +185 +185 +183 +183 +183 +179 +179 +175 +175 +174 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +144 +143 +143 +139 +139 +133 +133 +133 +130 +130 +125 +125 +123 +120 +119 +116 +115 +109 +110 +110 +106 +105 +100 +100 +100 +96 +97 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +73 +72 +72 +68 +68 +64 +64 +64 +59 +58 +54 +54 +54 +50 +51 +46 +47 +47 +43 +43 +40 +41 +41 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +14 +13 +12 +13 +13 +13 +14 +13 +14 +14 +13 +14 +13 +14 +14 +14 +13 +13 +14 +14 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +32 +32 +32 +37 +37 +41 +41 +41 +43 +43 +47 +47 +51 +51 +50 +55 +55 +58 +58 +58 +65 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +87 +90 +91 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +115 +116 +116 +116 +120 +120 +125 +125 +125 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +152 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +182 +182 +183 +184 +184 +189 +188 +189 +191 +191 +191 +191 +191 +194 +194 +197 +197 +196 +199 +199 +200 +200 +201 +201 +201 +202 +203 +204 +204 +205 +205 +204 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +205 +204 +204 +205 +205 +202 +202 +201 +200 +200 +200 +200 +199 +199 +198 +197 +196 +196 +196 +196 +196 +196 +195 +194 +195 +190 +191 +188 +189 +189 +184 +184 +182 +183 +178 +179 +179 +175 +175 +173 +172 +173 +169 +168 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +145 +144 +143 +139 +139 +133 +134 +133 +129 +129 +125 +125 +125 +120 +119 +119 +119 +120 +116 +116 +110 +110 +110 +106 +106 +100 +100 +97 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +65 +58 +59 +59 +54 +53 +51 +51 +46 +47 +47 +42 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +26 +21 +21 +21 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +14 +14 +13 +13 +14 +13 +14 +14 +14 +14 +14 +13 +14 +14 +14 +13 +13 +14 +14 +14 +13 +13 +15 +15 +15 +15 +15 +17 +17 +17 +19 +19 +21 +21 +22 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +41 +40 +41 +43 +43 +47 +47 +47 +51 +50 +55 +54 +56 +58 +58 +64 +64 +67 +68 +68 +72 +72 +76 +76 +77 +82 +82 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +105 +106 +106 +109 +110 +115 +116 +115 +119 +119 +125 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +148 +151 +151 +157 +157 +156 +161 +161 +165 +165 +166 +168 +169 +173 +173 +173 +174 +175 +179 +178 +179 +183 +183 +185 +184 +184 +188 +188 +190 +191 +195 +194 +194 +196 +196 +196 +197 +197 +198 +198 +201 +201 +200 +201 +200 +202 +202 +202 +204 +204 +204 +204 +204 +206 +207 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +207 +206 +204 +204 +204 +204 +205 +203 +202 +202 +200 +200 +200 +200 +200 +198 +199 +196 +196 +194 +194 +195 +191 +190 +189 +188 +189 +185 +185 +182 +182 +183 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +164 +165 +161 +161 +157 +157 +156 +151 +151 +147 +147 +147 +143 +143 +143 +143 +143 +139 +139 +133 +133 +133 +129 +130 +126 +125 +120 +120 +120 +116 +116 +109 +109 +110 +105 +106 +100 +99 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +83 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +59 +59 +55 +55 +50 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +32 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +14 +13 +13 +14 +13 +14 +14 +13 +13 +14 +13 +13 +14 +14 +14 +14 +13 +13 +13 +13 +13 +14 +13 +14 +13 +14 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +34 +37 +36 +41 +41 +42 +43 +43 +47 +46 +51 +50 +50 +54 +55 +54 +54 +55 +59 +59 +64 +64 +65 +68 +68 +72 +72 +74 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +116 +119 +119 +125 +125 +129 +129 +130 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +182 +182 +185 +185 +185 +185 +184 +188 +188 +190 +190 +190 +194 +194 +196 +196 +197 +199 +198 +200 +201 +201 +201 +200 +203 +203 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +207 +206 +207 +205 +204 +205 +204 +204 +202 +202 +200 +200 +200 +200 +200 +201 +200 +200 +199 +199 +196 +197 +196 +195 +194 +191 +190 +191 +188 +189 +184 +184 +183 +183 +182 +178 +179 +175 +175 +175 +173 +173 +173 +173 +173 +169 +169 +165 +164 +165 +161 +161 +157 +157 +158 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +126 +126 +120 +119 +115 +115 +116 +109 +110 +106 +106 +100 +100 +99 +96 +96 +90 +90 +91 +86 +86 +82 +82 +82 +76 +77 +72 +72 +72 +68 +68 +64 +64 +65 +59 +59 +54 +55 +51 +51 +51 +47 +47 +43 +43 +43 +41 +40 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +14 +13 +14 +14 +14 +14 +14 +14 +14 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +13 +14 +13 +12 +15 +15 +17 +17 +18 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +48 +50 +50 +55 +54 +59 +58 +58 +64 +64 +68 +69 +68 +72 +72 +76 +76 +77 +82 +82 +86 +86 +87 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +109 +109 +116 +116 +120 +120 +119 +125 +126 +129 +129 +129 +133 +134 +139 +139 +139 +143 +143 +147 +147 +151 +151 +151 +157 +157 +160 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +178 +181 +182 +182 +184 +185 +189 +188 +191 +191 +191 +195 +194 +196 +196 +196 +199 +199 +200 +200 +201 +200 +200 +203 +203 +202 +204 +205 +204 +204 +205 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +203 +200 +200 +200 +201 +201 +199 +199 +196 +196 +194 +194 +194 +191 +190 +189 +188 +188 +185 +185 +185 +185 +185 +183 +183 +179 +179 +179 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +134 +134 +129 +129 +125 +125 +120 +119 +119 +116 +115 +109 +110 +110 +106 +105 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +83 +76 +76 +73 +72 +69 +69 +69 +64 +65 +58 +58 +58 +55 +54 +51 +50 +50 +46 +47 +43 +42 +43 +41 +40 +37 +36 +37 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +18 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +14 +13 +14 +14 +14 +13 +13 +14 +14 +13 +13 +13 +14 +14 +13 +13 +13 +13 +14 +14 +13 +13 +14 +14 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +38 +41 +41 +43 +42 +47 +47 +47 +50 +51 +54 +54 +54 +58 +59 +65 +64 +64 +68 +68 +73 +72 +72 +77 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +115 +119 +119 +125 +125 +125 +130 +129 +133 +133 +140 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +183 +183 +182 +185 +185 +188 +189 +189 +191 +190 +195 +195 +194 +197 +197 +199 +198 +198 +201 +200 +200 +200 +201 +202 +202 +205 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +204 +204 +205 +204 +205 +202 +203 +201 +200 +200 +201 +200 +198 +199 +197 +196 +196 +194 +195 +195 +195 +195 +191 +191 +189 +189 +188 +185 +185 +183 +182 +181 +179 +179 +174 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +144 +139 +139 +133 +133 +133 +129 +129 +125 +126 +125 +120 +119 +116 +116 +115 +110 +109 +106 +106 +105 +100 +100 +96 +96 +96 +90 +90 +86 +86 +83 +82 +82 +76 +76 +72 +72 +72 +68 +68 +65 +64 +65 +58 +58 +54 +55 +55 +50 +50 +47 +47 +47 +43 +43 +40 +41 +38 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +13 +13 +14 +14 +13 +14 +14 +14 +14 +14 +14 +14 +13 +13 +14 +14 +13 +14 +14 +13 +13 +13 +14 +13 +14 +13 +13 +15 +15 +15 +17 +17 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +30 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +50 +51 +54 +54 +59 +58 +58 +64 +64 +69 +68 +72 +73 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +115 +120 +119 +125 +125 +125 +130 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +178 +183 +182 +185 +185 +185 +189 +188 +190 +190 +190 +195 +195 +196 +196 +196 +199 +199 +200 +200 +200 +200 +201 +202 +202 +204 +204 +204 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +207 +206 +206 +204 +204 +204 +204 +204 +202 +203 +202 +200 +200 +201 +200 +200 +201 +201 +198 +198 +199 +196 +196 +195 +195 +191 +190 +191 +189 +189 +185 +185 +184 +183 +183 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +125 +120 +119 +116 +115 +115 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +65 +64 +58 +58 +55 +54 +54 +51 +51 +47 +47 +47 +43 +43 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +32 +27 +27 +25 +25 +20 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +14 +14 +14 +14 +14 +13 +13 +13 +13 +13 +14 +14 +13 +13 +12 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +46 +46 +47 +51 +51 +54 +54 +54 +58 +59 +65 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +96 +96 +95 +100 +100 +106 +106 +106 +110 +110 +116 +116 +116 +120 +120 +125 +126 +125 +129 +129 +133 +133 +134 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +161 +161 +161 +165 +165 +168 +169 +169 +173 +173 +175 +175 +175 +179 +178 +182 +182 +184 +184 +185 +188 +188 +191 +191 +191 +195 +194 +194 +195 +195 +197 +196 +198 +198 +198 +201 +200 +200 +200 +201 +202 +203 +204 +205 +204 +205 +205 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +204 +204 +204 +205 +205 +202 +203 +200 +201 +200 +201 +200 +198 +199 +199 +196 +196 +195 +194 +194 +191 +191 +188 +189 +189 +185 +185 +182 +183 +178 +179 +178 +175 +175 +173 +173 +173 +168 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +125 +120 +120 +115 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +83 +82 +82 +76 +76 +72 +72 +72 +68 +68 +65 +65 +64 +58 +58 +54 +54 +55 +51 +51 +46 +47 +47 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +13 +13 +13 +14 +14 +13 +13 +14 +14 +14 +14 +13 +13 +13 +14 +14 +13 +14 +13 +14 +13 +13 +13 +13 +13 +13 +12 +15 +16 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +30 +31 +32 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +51 +51 +55 +54 +59 +58 +59 +64 +65 +68 +68 +73 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +95 +96 +100 +100 +100 +106 +106 +109 +110 +110 +116 +115 +119 +119 +125 +126 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +150 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +173 +173 +173 +175 +174 +179 +179 +178 +183 +183 +183 +183 +183 +184 +184 +189 +189 +189 +191 +191 +194 +195 +194 +196 +197 +198 +198 +200 +201 +200 +201 +200 +203 +202 +202 +204 +205 +204 +204 +204 +204 +204 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +207 +204 +204 +204 +205 +204 +202 +202 +200 +200 +200 +200 +200 +199 +199 +199 +196 +197 +194 +194 +190 +191 +191 +188 +188 +185 +184 +185 +183 +182 +179 +179 +178 +175 +175 +173 +172 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +152 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +126 +119 +120 +115 +116 +116 +110 +110 +106 +105 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +65 +64 +58 +58 +54 +55 +50 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +23 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +12 +13 +13 +13 +14 +14 +13 +13 +14 +14 +13 +13 +13 +14 +14 +13 +14 +14 +14 +13 +14 +14 +13 +14 +14 +13 +13 +13 +13 +15 +15 +16 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +36 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +50 +55 +55 +58 +58 +59 +65 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +97 +96 +96 +100 +100 +106 +106 +110 +110 +110 +115 +116 +119 +120 +119 +126 +126 +129 +129 +129 +133 +133 +140 +139 +140 +143 +143 +147 +147 +147 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +173 +173 +173 +174 +175 +179 +178 +179 +183 +183 +184 +185 +184 +188 +189 +190 +191 +194 +194 +195 +196 +196 +198 +198 +198 +200 +200 +200 +200 +200 +200 +200 +203 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +202 +200 +200 +200 +200 +199 +198 +199 +196 +196 +194 +195 +195 +191 +190 +189 +188 +189 +185 +185 +183 +183 +183 +179 +178 +175 +175 +175 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +130 +130 +130 +125 +126 +119 +120 +116 +116 +116 +110 +110 +106 +106 +106 +100 +99 +96 +96 +96 +90 +90 +86 +86 +87 +82 +82 +76 +76 +77 +73 +72 +69 +68 +64 +64 +64 +58 +59 +55 +55 +55 +51 +51 +46 +47 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +32 +32 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +14 +14 +14 +14 +13 +13 +14 +13 +14 +13 +14 +14 +13 +13 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +47 +47 +47 +51 +51 +55 +54 +54 +58 +58 +65 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +110 +109 +109 +116 +116 +119 +120 +119 +125 +125 +129 +129 +130 +133 +133 +139 +139 +144 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +164 +165 +169 +169 +169 +173 +173 +175 +175 +176 +179 +179 +183 +183 +184 +185 +184 +189 +189 +191 +191 +191 +195 +195 +194 +194 +194 +197 +197 +198 +198 +199 +200 +201 +200 +200 +201 +202 +202 +205 +204 +204 +205 +205 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +207 +206 +205 +204 +204 +204 +202 +202 +202 +200 +200 +200 +200 +200 +198 +198 +198 +199 +198 +197 +196 +195 +194 +194 +191 +191 +188 +189 +188 +184 +185 +183 +183 +179 +179 +179 +175 +176 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +140 +139 +134 +133 +133 +130 +129 +125 +125 +125 +119 +120 +116 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +83 +82 +82 +76 +76 +72 +72 +72 +68 +69 +68 +68 +69 +65 +64 +58 +58 +59 +55 +55 +51 +51 +48 +47 +46 +43 +43 +41 +41 +41 +37 +37 +33 +32 +33 +31 +31 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +12 +13 +14 +13 +13 +14 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +42 +43 +43 +47 +47 +50 +51 +50 +55 +54 +58 +58 +59 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +99 +100 +100 +106 +106 +109 +110 +111 +116 +116 +119 +119 +126 +126 +126 +129 +129 +133 +133 +133 +139 +139 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +158 +161 +161 +165 +165 +168 +169 +169 +173 +173 +175 +174 +175 +179 +179 +179 +179 +179 +183 +183 +185 +184 +185 +189 +189 +191 +190 +192 +195 +195 +197 +196 +198 +198 +198 +200 +200 +200 +200 +201 +203 +202 +204 +204 +204 +205 +204 +206 +207 +206 +206 +207 +206 +207 +206 +207 +206 +206 +206 +206 +207 +206 +206 +206 +205 +204 +204 +204 +204 +202 +202 +202 +201 +201 +200 +201 +201 +198 +199 +197 +197 +195 +194 +195 +190 +191 +189 +188 +189 +185 +185 +183 +183 +182 +179 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +119 +119 +115 +116 +109 +110 +105 +106 +105 +100 +100 +96 +96 +96 +90 +90 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +68 +68 +64 +64 +59 +59 +58 +54 +55 +51 +50 +50 +47 +47 +47 +47 +47 +43 +42 +41 +41 +41 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +13 +14 +14 +14 +14 +14 +13 +14 +14 +13 +14 +14 +14 +13 +13 +14 +13 +13 +13 +14 +14 +14 +13 +14 +14 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +51 +51 +51 +54 +55 +59 +58 +59 +65 +64 +68 +68 +69 +72 +72 +76 +77 +76 +82 +82 +86 +86 +87 +90 +90 +96 +95 +100 +100 +100 +106 +106 +109 +110 +110 +115 +116 +116 +115 +115 +120 +120 +126 +125 +125 +129 +129 +133 +133 +135 +139 +140 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +160 +161 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +174 +175 +179 +178 +179 +182 +183 +184 +185 +185 +189 +188 +191 +191 +190 +194 +194 +196 +197 +196 +198 +198 +200 +200 +201 +200 +200 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +204 +205 +204 +204 +205 +202 +203 +201 +201 +200 +200 +200 +198 +198 +198 +197 +197 +195 +194 +194 +191 +191 +188 +188 +189 +184 +185 +182 +183 +182 +179 +178 +175 +175 +174 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +140 +134 +133 +129 +130 +126 +125 +125 +119 +120 +116 +116 +116 +110 +110 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +68 +68 +64 +65 +64 +64 +65 +58 +59 +54 +54 +54 +51 +51 +46 +47 +45 +43 +42 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +26 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +12 +13 +14 +13 +13 +13 +14 +13 +13 +14 +14 +13 +13 +13 +14 +13 +14 +13 +13 +14 +13 +14 +13 +14 +13 +14 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +42 +47 +47 +51 +51 +51 +54 +54 +58 +59 +58 +65 +64 +69 +68 +68 +73 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +116 +120 +120 +122 +126 +125 +130 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +147 +147 +147 +151 +151 +157 +157 +157 +160 +161 +165 +165 +168 +169 +169 +173 +173 +175 +174 +175 +179 +179 +183 +182 +183 +185 +184 +189 +189 +189 +191 +190 +195 +194 +195 +197 +197 +199 +199 +200 +200 +201 +200 +200 +202 +203 +202 +204 +204 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +205 +205 +205 +204 +204 +202 +202 +202 +201 +201 +201 +200 +200 +198 +198 +196 +197 +196 +194 +195 +191 +191 +191 +189 +189 +185 +185 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +158 +151 +151 +152 +147 +147 +143 +143 +140 +139 +140 +134 +133 +130 +130 +130 +125 +126 +125 +125 +126 +120 +120 +116 +115 +115 +110 +109 +106 +106 +103 +100 +100 +96 +96 +90 +90 +90 +86 +86 +86 +86 +86 +82 +82 +82 +82 +82 +76 +76 +73 +72 +72 +68 +68 +64 +64 +61 +58 +58 +55 +54 +51 +51 +51 +47 +47 +43 +43 +43 +41 +41 +36 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +22 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +14 +14 +14 +14 +14 +13 +14 +14 +13 +14 +14 +13 +13 +14 +14 +14 +14 +13 +13 +13 +14 +13 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +20 +25 +25 +26 +27 +27 +31 +31 +31 +33 +33 +37 +37 +36 +41 +41 +42 +43 +42 +47 +46 +50 +51 +50 +54 +54 +58 +58 +64 +64 +64 +68 +69 +72 +72 +72 +76 +76 +76 +77 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +98 +100 +100 +106 +106 +109 +110 +110 +116 +116 +119 +120 +119 +125 +126 +125 +125 +125 +130 +129 +133 +133 +134 +139 +139 +143 +143 +145 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +182 +183 +184 +185 +188 +188 +188 +190 +191 +195 +195 +195 +196 +196 +199 +198 +198 +201 +201 +201 +200 +201 +203 +202 +204 +204 +205 +204 +205 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +205 +204 +204 +204 +202 +202 +200 +200 +201 +200 +200 +198 +198 +197 +196 +196 +195 +195 +190 +190 +190 +188 +189 +185 +184 +184 +183 +183 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +161 +161 +161 +157 +156 +151 +151 +151 +147 +147 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +130 +125 +126 +120 +120 +115 +115 +115 +110 +110 +106 +106 +105 +100 +100 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +77 +72 +72 +68 +68 +68 +64 +64 +58 +59 +59 +55 +55 +51 +50 +51 +47 +46 +43 +42 +43 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +22 +21 +19 +19 +17 +17 +17 +15 +15 +15 +16 +15 +13 +13 +12 +13 +14 +13 +14 +14 +13 +14 +14 +13 +13 +13 +14 +14 +14 +13 +14 +13 +14 +13 +14 +13 +13 +13 +13 +13 +14 +13 +13 +16 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +30 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +47 +47 +46 +51 +51 +55 +55 +55 +59 +59 +65 +65 +65 +68 +68 +72 +72 +72 +76 +76 +82 +82 +83 +86 +86 +90 +90 +97 +96 +96 +100 +100 +106 +106 +106 +110 +110 +110 +110 +110 +116 +116 +119 +119 +119 +125 +125 +129 +130 +130 +133 +133 +139 +140 +144 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +172 +172 +175 +175 +178 +179 +178 +183 +183 +182 +182 +183 +184 +184 +189 +189 +188 +191 +191 +195 +194 +194 +196 +197 +199 +198 +198 +200 +201 +200 +201 +203 +202 +202 +204 +204 +205 +205 +204 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +205 +204 +204 +204 +203 +202 +202 +200 +200 +200 +201 +200 +199 +198 +197 +196 +197 +194 +194 +191 +190 +191 +188 +189 +185 +185 +185 +183 +182 +179 +179 +175 +175 +174 +173 +173 +169 +169 +169 +165 +165 +165 +165 +165 +161 +161 +157 +158 +157 +151 +151 +147 +148 +147 +143 +143 +140 +139 +133 +133 +133 +129 +129 +125 +125 +125 +120 +120 +119 +120 +120 +116 +116 +110 +110 +110 +106 +106 +100 +100 +97 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +65 +64 +58 +58 +59 +54 +54 +51 +50 +46 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +14 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +14 +13 +14 +14 +14 +14 +14 +13 +13 +13 +14 +13 +13 +13 +13 +16 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +26 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +43 +43 +43 +47 +47 +51 +50 +50 +54 +54 +58 +58 +61 +64 +64 +68 +68 +72 +72 +72 +77 +76 +82 +82 +82 +86 +86 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +105 +106 +107 +110 +110 +116 +116 +119 +120 +119 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +144 +147 +147 +148 +151 +151 +157 +157 +160 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +178 +183 +183 +183 +184 +184 +189 +188 +189 +191 +191 +194 +195 +196 +196 +196 +198 +198 +200 +201 +201 +201 +201 +203 +202 +202 +204 +204 +204 +205 +204 +206 +206 +207 +207 +207 +206 +207 +207 +206 +207 +206 +206 +206 +206 +205 +204 +205 +204 +204 +202 +203 +202 +201 +201 +200 +200 +200 +198 +198 +197 +196 +197 +194 +195 +190 +191 +188 +188 +189 +185 +184 +183 +182 +182 +179 +179 +179 +178 +179 +174 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +140 +139 +139 +133 +133 +129 +129 +130 +126 +125 +120 +120 +116 +115 +116 +110 +110 +106 +106 +106 +99 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +64 +65 +65 +59 +58 +55 +54 +54 +50 +50 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +34 +31 +31 +27 +27 +26 +25 +25 +20 +21 +20 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +13 +14 +13 +13 +14 +13 +14 +14 +14 +13 +13 +13 +14 +13 +13 +14 +14 +13 +14 +13 +13 +15 +15 +16 +17 +17 +19 +19 +22 +21 +21 +25 +25 +27 +27 +27 +31 +30 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +44 +47 +46 +51 +51 +54 +54 +54 +58 +59 +65 +64 +64 +68 +68 +68 +68 +68 +72 +72 +76 +76 +77 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +116 +120 +120 +119 +125 +125 +129 +130 +130 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +182 +185 +185 +185 +188 +188 +190 +190 +190 +194 +195 +197 +196 +197 +198 +199 +200 +201 +200 +200 +200 +202 +202 +203 +205 +204 +204 +205 +207 +206 +206 +206 +207 +206 +206 +207 +206 +207 +207 +206 +206 +207 +206 +205 +205 +204 +204 +204 +203 +203 +203 +200 +201 +200 +200 +199 +198 +199 +196 +197 +195 +195 +195 +191 +191 +191 +191 +190 +188 +189 +185 +185 +184 +182 +183 +178 +179 +177 +175 +175 +173 +172 +169 +169 +169 +164 +165 +161 +161 +161 +157 +157 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +134 +133 +133 +129 +129 +125 +126 +125 +119 +119 +115 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +82 +82 +82 +77 +76 +72 +72 +72 +69 +68 +64 +65 +65 +59 +58 +55 +54 +55 +51 +51 +47 +47 +47 +43 +43 +41 +41 +37 +37 +37 +33 +32 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +14 +13 +13 +13 +14 +13 +13 +13 +13 +14 +13 +14 +14 +14 +14 +13 +13 +14 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +28 +31 +31 +33 +33 +37 +37 +37 +40 +41 +43 +43 +43 +46 +47 +47 +47 +47 +51 +51 +55 +54 +55 +58 +58 +64 +64 +68 +68 +68 +72 +73 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +105 +106 +109 +110 +115 +116 +119 +120 +119 +126 +125 +129 +129 +129 +134 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +182 +185 +184 +189 +189 +188 +191 +191 +195 +194 +195 +197 +197 +199 +198 +201 +201 +200 +200 +200 +202 +202 +202 +204 +204 +204 +204 +205 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +205 +205 +204 +204 +204 +202 +202 +203 +200 +200 +200 +201 +200 +200 +201 +199 +199 +198 +196 +196 +194 +195 +195 +190 +191 +189 +189 +185 +185 +184 +183 +183 +179 +179 +179 +175 +175 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +119 +120 +115 +116 +109 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +69 +68 +64 +64 +58 +58 +54 +54 +54 +50 +51 +46 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +22 +20 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +13 +14 +13 +13 +14 +14 +13 +14 +14 +14 +14 +14 +13 +14 +13 +13 +14 +13 +14 +13 +13 +14 +14 +13 +13 +13 +13 +12 +15 +15 +17 +17 +18 +19 +19 +21 +20 +26 +25 +25 +27 +27 +31 +31 +31 +33 +33 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +48 +51 +50 +54 +54 +59 +59 +59 +65 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +98 +100 +100 +106 +106 +110 +110 +110 +115 +115 +119 +120 +119 +125 +126 +130 +130 +129 +133 +134 +139 +139 +139 +143 +143 +147 +148 +151 +151 +151 +157 +157 +161 +161 +161 +164 +164 +169 +169 +169 +173 +173 +174 +175 +175 +179 +178 +183 +183 +183 +184 +185 +188 +189 +191 +190 +190 +195 +195 +196 +196 +196 +198 +198 +200 +200 +201 +200 +200 +202 +202 +203 +204 +204 +205 +204 +205 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +205 +204 +203 +202 +202 +200 +200 +200 +201 +199 +198 +199 +196 +197 +194 +194 +195 +191 +190 +188 +188 +189 +184 +185 +185 +185 +184 +183 +182 +179 +179 +179 +175 +175 +173 +173 +171 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +134 +129 +130 +125 +125 +120 +119 +120 +115 +115 +110 +110 +110 +105 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +83 +75 +76 +72 +72 +69 +68 +68 +64 +64 +58 +59 +58 +55 +55 +51 +50 +50 +47 +47 +42 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +14 +13 +13 +14 +13 +13 +14 +13 +14 +14 +13 +13 +14 +13 +14 +14 +14 +14 +14 +14 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +13 +16 +15 +15 +17 +17 +19 +19 +19 +21 +21 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +34 +37 +37 +41 +41 +43 +43 +43 +47 +46 +51 +51 +51 +55 +54 +58 +59 +59 +64 +64 +68 +68 +68 +72 +72 +77 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +110 +109 +115 +116 +119 +120 +120 +125 +126 +129 +130 +134 +133 +133 +139 +140 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +172 +173 +175 +175 +179 +178 +178 +182 +183 +184 +185 +185 +188 +189 +191 +190 +190 +194 +194 +196 +196 +197 +198 +199 +200 +201 +201 +200 +200 +202 +202 +204 +204 +204 +205 +204 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +205 +204 +204 +204 +204 +202 +202 +202 +200 +200 +201 +200 +200 +199 +198 +198 +198 +198 +196 +196 +194 +194 +195 +191 +191 +188 +188 +185 +184 +185 +183 +183 +179 +179 +178 +175 +175 +172 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +129 +129 +129 +125 +126 +119 +119 +120 +115 +116 +110 +110 +110 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +69 +64 +65 +58 +58 +59 +54 +54 +51 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +20 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +14 +13 +13 +13 +13 +14 +13 +13 +14 +13 +14 +13 +13 +13 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +14 +15 +15 +15 +15 +15 +17 +17 +17 +19 +19 +21 +21 +22 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +38 +37 +41 +40 +43 +42 +43 +47 +47 +51 +51 +51 +54 +54 +58 +58 +64 +64 +64 +68 +68 +73 +72 +72 +76 +77 +82 +82 +83 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +109 +116 +115 +115 +119 +119 +125 +126 +125 +129 +130 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +165 +165 +165 +168 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +185 +185 +185 +189 +189 +190 +191 +191 +194 +194 +196 +196 +198 +198 +198 +200 +200 +200 +201 +200 +202 +203 +202 +202 +202 +204 +205 +204 +204 +204 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +205 +205 +204 +204 +205 +204 +204 +202 +202 +200 +200 +201 +200 +201 +198 +199 +197 +196 +197 +194 +194 +190 +191 +190 +188 +189 +189 +189 +189 +185 +185 +183 +183 +183 +179 +178 +175 +174 +175 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +130 +129 +126 +125 +119 +119 +116 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +77 +76 +72 +72 +68 +69 +64 +64 +65 +58 +58 +55 +55 +55 +51 +50 +46 +47 +47 +43 +42 +40 +41 +41 +37 +37 +33 +33 +34 +30 +31 +27 +27 +25 +25 +25 +21 +21 +19 +20 +19 +17 +17 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +14 +14 +13 +13 +14 +14 +14 +13 +13 +13 +14 +13 +13 +13 +14 +14 +14 +14 +14 +14 +13 +13 +13 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +36 +41 +41 +43 +43 +43 +47 +46 +51 +51 +50 +54 +55 +59 +58 +58 +65 +64 +68 +68 +68 +72 +72 +76 +76 +76 +83 +82 +87 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +116 +119 +119 +119 +126 +125 +130 +129 +130 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +176 +179 +179 +183 +183 +185 +185 +185 +188 +188 +191 +191 +191 +195 +194 +194 +195 +195 +197 +196 +199 +199 +198 +200 +200 +200 +200 +201 +202 +203 +204 +204 +204 +204 +204 +206 +206 +207 +206 +206 +206 +207 +206 +206 +207 +206 +206 +207 +207 +206 +206 +207 +205 +204 +205 +205 +204 +203 +202 +200 +200 +200 +200 +200 +199 +198 +198 +196 +197 +194 +194 +194 +190 +190 +188 +188 +189 +185 +185 +183 +183 +179 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +133 +133 +134 +130 +129 +125 +125 +125 +119 +120 +116 +116 +116 +110 +109 +106 +106 +105 +100 +100 +96 +96 +96 +90 +90 +86 +86 +83 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +65 +58 +59 +54 +55 +55 +51 +50 +47 +47 +47 +43 +43 +40 +41 +37 +37 +37 +33 +33 +31 +30 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +14 +14 +14 +14 +14 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +13 +14 +14 +14 +14 +13 +14 +14 +13 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +36 +41 +40 +41 +43 +43 +47 +47 +47 +51 +51 +54 +54 +54 +59 +58 +64 +65 +65 +68 +68 +72 +72 +77 +77 +76 +82 +82 +86 +85 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +116 +120 +119 +125 +126 +130 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +166 +169 +169 +173 +173 +176 +175 +175 +179 +178 +183 +182 +183 +184 +184 +184 +184 +184 +189 +189 +190 +191 +191 +195 +195 +196 +196 +196 +199 +198 +200 +201 +200 +201 +201 +202 +202 +202 +202 +203 +204 +204 +204 +204 +204 +204 +204 +206 +207 +206 +206 +207 +206 +207 +206 +206 +207 +206 +206 +206 +206 +206 +204 +204 +204 +204 +205 +202 +203 +201 +200 +200 +201 +200 +199 +199 +198 +197 +196 +194 +195 +191 +191 +191 +188 +189 +185 +184 +184 +182 +183 +179 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +152 +151 +151 +147 +147 +147 +147 +147 +143 +143 +140 +139 +139 +133 +133 +129 +129 +130 +125 +125 +119 +119 +120 +115 +116 +110 +110 +106 +106 +106 +99 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +69 +65 +64 +58 +59 +54 +55 +55 +50 +50 +47 +47 +46 +43 +43 +43 +43 +43 +41 +41 +37 +36 +37 +33 +33 +31 +31 +29 +27 +27 +25 +24 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +13 +13 +13 +14 +13 +14 +14 +14 +14 +13 +13 +14 +14 +14 +14 +14 +13 +14 +13 +14 +13 +14 +14 +14 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +51 +51 +51 +54 +54 +58 +58 +58 +65 +64 +68 +69 +69 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +100 +100 +100 +106 +105 +110 +110 +110 +116 +116 +120 +119 +119 +125 +125 +129 +129 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +152 +151 +151 +157 +157 +161 +161 +161 +165 +165 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +179 +183 +183 +185 +184 +189 +188 +189 +191 +191 +194 +194 +194 +196 +196 +197 +196 +197 +199 +198 +200 +201 +201 +200 +200 +202 +202 +203 +205 +205 +204 +204 +206 +207 +207 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +204 +204 +205 +204 +204 +202 +203 +200 +200 +201 +200 +200 +199 +198 +199 +197 +196 +194 +195 +194 +191 +191 +188 +189 +188 +184 +185 +183 +183 +183 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +158 +157 +157 +151 +151 +146 +147 +147 +143 +143 +139 +139 +140 +133 +133 +129 +130 +126 +126 +126 +119 +120 +115 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +83 +82 +76 +76 +72 +73 +73 +68 +69 +64 +64 +64 +59 +58 +58 +58 +58 +55 +54 +50 +50 +50 +46 +47 +43 +42 +42 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +25 +25 +25 +20 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +14 +14 +14 +13 +13 +13 +14 +14 +13 +13 +14 +13 +13 +14 +14 +14 +14 +13 +14 +13 +13 +14 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +37 +36 +37 +41 +41 +43 +43 +43 +47 +47 +51 +50 +51 +54 +55 +58 +59 +59 +64 +64 +69 +68 +68 +72 +72 +77 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +99 +99 +105 +106 +110 +110 +110 +115 +116 +119 +120 +120 +125 +126 +130 +129 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +182 +182 +184 +184 +184 +185 +184 +188 +188 +190 +190 +191 +194 +194 +197 +197 +198 +198 +199 +200 +201 +200 +200 +200 +202 +203 +204 +204 +205 +204 +205 +207 +207 +206 +206 +207 +207 +207 +207 +207 +206 +207 +207 +206 +207 +206 +205 +204 +204 +204 +204 +202 +202 +201 +200 +200 +200 +201 +198 +198 +198 +196 +197 +195 +195 +194 +190 +191 +189 +189 +185 +185 +185 +183 +182 +179 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +148 +147 +144 +142 +143 +139 +139 +133 +133 +133 +129 +129 +126 +125 +125 +120 +119 +116 +116 +116 +110 +110 +105 +106 +106 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +59 +59 +56 +55 +55 +50 +51 +46 +47 +47 +43 +43 +41 +41 +41 +37 +37 +37 +37 +37 +33 +33 +31 +31 +32 +27 +27 +25 +25 +23 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +14 +13 +13 +13 +14 +14 +14 +13 +13 +14 +14 +13 +14 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +26 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +36 +41 +41 +43 +43 +43 +47 +47 +51 +50 +51 +54 +55 +58 +58 +65 +64 +65 +68 +68 +72 +72 +72 +76 +76 +76 +76 +76 +82 +82 +86 +86 +86 +90 +89 +97 +96 +96 +100 +100 +106 +105 +109 +110 +110 +116 +115 +119 +120 +119 +125 +125 +126 +126 +125 +129 +130 +133 +133 +133 +139 +139 +143 +143 +144 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +182 +182 +183 +185 +185 +188 +189 +190 +191 +191 +194 +195 +197 +196 +197 +198 +198 +200 +200 +200 +200 +200 +202 +202 +203 +204 +205 +205 +205 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +205 +204 +204 +205 +204 +203 +202 +202 +201 +201 +200 +201 +199 +198 +198 +196 +197 +195 +194 +194 +190 +190 +189 +189 +188 +185 +185 +183 +182 +183 +178 +179 +175 +175 +174 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +120 +119 +116 +116 +116 +109 +110 +106 +106 +106 +100 +100 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +81 +82 +82 +76 +76 +72 +72 +68 +68 +68 +65 +64 +58 +58 +59 +54 +54 +54 +54 +55 +50 +50 +46 +47 +47 +43 +43 +41 +40 +37 +37 +37 +33 +32 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +20 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +14 +14 +13 +13 +14 +14 +14 +14 +13 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +26 +31 +31 +33 +33 +33 +37 +37 +40 +40 +44 +43 +42 +47 +47 +51 +50 +51 +54 +55 +58 +58 +58 +64 +64 +69 +68 +68 +72 +72 +76 +76 +77 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +106 +106 +106 +110 +110 +115 +116 +116 +120 +120 +125 +125 +127 +129 +129 +133 +133 +139 +139 +139 +143 +143 +143 +143 +143 +147 +147 +147 +147 +147 +151 +152 +157 +157 +157 +161 +161 +165 +165 +168 +169 +170 +173 +173 +175 +175 +175 +179 +178 +183 +182 +182 +185 +184 +189 +188 +189 +191 +191 +195 +194 +195 +196 +197 +198 +199 +201 +200 +200 +201 +200 +202 +202 +202 +204 +204 +204 +204 +204 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +203 +200 +201 +201 +200 +200 +199 +198 +196 +196 +196 +194 +195 +190 +190 +190 +188 +189 +184 +184 +183 +182 +183 +178 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +152 +147 +147 +143 +143 +140 +139 +139 +133 +134 +129 +129 +129 +125 +125 +125 +126 +126 +119 +120 +116 +116 +116 +110 +110 +106 +106 +107 +100 +99 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +76 +76 +76 +72 +72 +68 +68 +69 +64 +64 +58 +59 +57 +55 +54 +51 +51 +46 +46 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +14 +13 +14 +14 +13 +14 +13 +14 +13 +13 +14 +14 +13 +14 +13 +14 +13 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +36 +37 +41 +41 +41 +42 +43 +46 +47 +47 +50 +50 +54 +55 +55 +58 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +101 +106 +106 +109 +110 +115 +115 +116 +119 +119 +125 +125 +125 +130 +129 +129 +129 +130 +133 +133 +139 +139 +139 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +162 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +183 +185 +185 +189 +188 +190 +191 +190 +195 +194 +196 +196 +197 +198 +198 +200 +200 +201 +201 +201 +202 +202 +202 +205 +204 +204 +205 +204 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +205 +205 +204 +204 +204 +202 +202 +202 +200 +201 +200 +201 +200 +199 +198 +196 +196 +195 +195 +195 +190 +190 +188 +189 +188 +185 +185 +183 +183 +183 +179 +179 +175 +174 +175 +173 +173 +169 +169 +170 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +143 +143 +144 +139 +139 +133 +133 +133 +129 +129 +126 +126 +126 +119 +119 +116 +115 +109 +110 +110 +105 +106 +100 +100 +100 +96 +96 +96 +96 +96 +90 +90 +86 +86 +86 +86 +86 +82 +83 +79 +76 +76 +72 +72 +68 +68 +68 +64 +64 +59 +58 +59 +55 +54 +50 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +14 +13 +13 +13 +14 +14 +14 +14 +14 +14 +13 +14 +14 +14 +14 +13 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +15 +15 +17 +17 +19 +19 +19 +21 +22 +26 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +46 +47 +47 +51 +51 +55 +54 +55 +58 +59 +65 +65 +64 +68 +69 +72 +72 +72 +76 +76 +82 +82 +83 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +110 +110 +110 +117 +116 +120 +120 +120 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +174 +178 +179 +179 +183 +182 +185 +184 +185 +188 +189 +191 +190 +190 +195 +194 +197 +196 +197 +198 +198 +200 +200 +200 +200 +201 +202 +202 +205 +204 +204 +204 +205 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +204 +204 +205 +204 +205 +202 +202 +201 +200 +201 +200 +200 +198 +198 +198 +196 +196 +195 +194 +195 +190 +190 +189 +188 +189 +185 +185 +183 +183 +183 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +141 +139 +139 +133 +133 +129 +129 +129 +126 +126 +120 +119 +120 +116 +116 +116 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +93 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +69 +68 +64 +64 +65 +58 +58 +54 +54 +55 +50 +50 +47 +47 +42 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +13 +14 +13 +13 +14 +13 +14 +14 +14 +13 +13 +14 +14 +13 +14 +13 +13 +14 +14 +14 +13 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +38 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +51 +51 +55 +54 +59 +59 +59 +64 +65 +68 +68 +67 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +117 +120 +120 +125 +125 +130 +129 +129 +134 +134 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +168 +169 +169 +173 +172 +174 +175 +174 +179 +178 +182 +183 +183 +184 +185 +189 +189 +189 +190 +191 +194 +194 +195 +196 +196 +198 +198 +200 +200 +200 +200 +201 +202 +202 +202 +204 +204 +204 +204 +204 +207 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +205 +204 +204 +204 +204 +202 +202 +202 +200 +200 +201 +200 +200 +198 +198 +196 +196 +197 +195 +194 +190 +190 +189 +189 +189 +184 +184 +182 +183 +182 +179 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +149 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +126 +126 +126 +120 +119 +115 +116 +116 +110 +110 +106 +106 +103 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +65 +59 +58 +54 +55 +51 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +14 +14 +14 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +13 +15 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +27 +27 +27 +31 +33 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +50 +50 +55 +54 +56 +58 +58 +64 +64 +69 +69 +68 +73 +72 +76 +77 +76 +82 +82 +82 +82 +82 +86 +86 +90 +90 +90 +95 +96 +99 +100 +105 +106 +106 +110 +110 +115 +116 +116 +120 +119 +125 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +144 +147 +147 +151 +151 +157 +157 +157 +161 +160 +165 +165 +165 +169 +169 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +182 +183 +185 +185 +189 +188 +190 +190 +191 +195 +194 +196 +197 +197 +199 +199 +201 +200 +200 +200 +200 +202 +203 +202 +204 +205 +204 +204 +204 +206 +206 +206 +206 +207 +206 +206 +207 +207 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +203 +202 +201 +200 +200 +200 +199 +198 +198 +196 +196 +195 +194 +194 +190 +190 +189 +188 +188 +184 +184 +184 +184 +184 +183 +183 +179 +179 +178 +175 +175 +173 +172 +171 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +147 +147 +147 +143 +143 +139 +140 +140 +133 +133 +129 +129 +126 +125 +125 +119 +119 +116 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +59 +58 +55 +54 +55 +51 +50 +47 +47 +47 +43 +43 +41 +40 +41 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +14 +14 +13 +14 +13 +13 +14 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +26 +27 +27 +31 +31 +31 +33 +33 +37 +37 +38 +41 +41 +43 +43 +46 +46 +47 +50 +51 +54 +54 +55 +59 +59 +58 +58 +58 +64 +64 +69 +69 +68 +72 +72 +77 +77 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +116 +119 +119 +120 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +164 +165 +168 +169 +169 +173 +173 +174 +175 +179 +178 +178 +183 +183 +184 +184 +184 +188 +188 +191 +191 +190 +195 +194 +197 +197 +196 +198 +198 +200 +200 +201 +200 +201 +202 +203 +204 +204 +204 +204 +204 +206 +207 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +205 +204 +205 +205 +204 +202 +203 +201 +201 +200 +200 +200 +198 +198 +198 +196 +196 +197 +196 +196 +195 +194 +190 +190 +191 +188 +189 +185 +184 +185 +182 +183 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +165 +165 +164 +161 +161 +157 +157 +157 +151 +151 +147 +147 +144 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +125 +120 +119 +116 +116 +115 +110 +110 +106 +105 +106 +100 +100 +96 +96 +91 +90 +90 +86 +86 +82 +82 +82 +76 +76 +77 +76 +76 +73 +72 +68 +68 +69 +64 +64 +58 +58 +58 +55 +55 +51 +51 +47 +47 +46 +43 +42 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +26 +27 +25 +25 +21 +21 +22 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +14 +14 +13 +13 +14 +14 +13 +14 +13 +14 +13 +13 +13 +14 +13 +13 +14 +14 +13 +14 +13 +14 +13 +13 +15 +15 +15 +15 +15 +17 +17 +17 +19 +19 +21 +21 +23 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +41 +41 +41 +43 +43 +46 +47 +46 +50 +50 +55 +54 +56 +59 +59 +64 +64 +68 +69 +69 +73 +72 +76 +76 +76 +82 +82 +86 +86 +87 +90 +90 +96 +96 +96 +100 +100 +106 +106 +109 +110 +110 +115 +115 +120 +120 +119 +125 +125 +129 +129 +129 +134 +134 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +182 +182 +184 +184 +188 +189 +188 +191 +191 +195 +195 +197 +196 +197 +199 +198 +200 +200 +200 +200 +201 +200 +201 +201 +202 +202 +204 +204 +204 +205 +205 +206 +207 +207 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +207 +205 +204 +204 +204 +204 +203 +202 +200 +200 +200 +201 +200 +198 +198 +198 +196 +197 +195 +194 +191 +190 +191 +189 +189 +185 +185 +184 +183 +183 +183 +183 +183 +179 +179 +174 +175 +175 +173 +173 +169 +169 +168 +165 +165 +161 +161 +158 +157 +157 +151 +151 +147 +147 +147 +143 +143 +140 +139 +139 +133 +133 +129 +129 +129 +126 +125 +120 +120 +116 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +89 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +64 +65 +64 +58 +59 +55 +54 +55 +51 +51 +46 +47 +46 +43 +43 +41 +41 +41 +37 +37 +33 +32 +34 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +13 +14 +14 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +14 +14 +13 +14 +14 +13 +13 +13 +13 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +42 +43 +42 +47 +47 +51 +50 +51 +54 +55 +58 +58 +59 +64 +64 +68 +68 +69 +72 +72 +76 +76 +77 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +115 +120 +119 +119 +125 +125 +130 +129 +129 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +174 +178 +179 +182 +183 +185 +185 +185 +189 +188 +191 +191 +190 +194 +194 +196 +197 +197 +198 +199 +201 +200 +201 +201 +200 +202 +202 +203 +204 +204 +204 +204 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +205 +204 +203 +202 +202 +200 +201 +200 +200 +200 +198 +198 +197 +196 +197 +194 +195 +195 +195 +194 +190 +190 +189 +189 +189 +184 +185 +183 +182 +179 +179 +179 +175 +175 +173 +173 +173 +168 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +140 +139 +133 +134 +129 +130 +125 +125 +125 +119 +119 +116 +116 +116 +110 +110 +106 +106 +106 +100 +99 +96 +96 +97 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +65 +65 +58 +58 +55 +54 +55 +51 +50 +47 +46 +47 +43 +42 +41 +40 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +18 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +13 +13 +13 +14 +14 +14 +13 +14 +14 +13 +13 +14 +14 +14 +14 +13 +13 +14 +14 +13 +13 +13 +14 +14 +13 +13 +14 +13 +13 +13 +14 +13 +15 +15 +15 +17 +17 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +28 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +50 +51 +54 +54 +59 +58 +59 +65 +64 +68 +68 +72 +72 +73 +76 +77 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +109 +109 +115 +116 +120 +119 +125 +125 +126 +130 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +173 +173 +173 +175 +174 +179 +178 +179 +183 +183 +185 +185 +184 +188 +188 +190 +191 +191 +194 +195 +196 +196 +196 +199 +198 +201 +201 +200 +200 +200 +202 +202 +204 +204 +205 +204 +204 +205 +204 +204 +206 +207 +206 +207 +207 +206 +206 +206 +206 +207 +206 +207 +207 +206 +204 +204 +204 +204 +205 +202 +202 +202 +201 +201 +201 +201 +201 +200 +200 +198 +198 +198 +196 +197 +194 +195 +191 +190 +191 +189 +189 +185 +185 +184 +183 +183 +179 +179 +178 +175 +175 +173 +173 +173 +168 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +130 +126 +126 +126 +119 +119 +116 +115 +115 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +65 +64 +64 +58 +58 +54 +54 +51 +50 +51 +47 +47 +43 +43 +42 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +24 +25 +26 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +14 +14 +13 +13 +14 +14 +13 +13 +14 +13 +14 +14 +13 +13 +13 +14 +13 +13 +13 +14 +14 +13 +12 +15 +15 +17 +17 +18 +18 +19 +21 +21 +25 +24 +25 +27 +27 +31 +32 +31 +33 +33 +36 +37 +37 +41 +41 +43 +43 +43 +47 +46 +51 +50 +54 +55 +55 +58 +58 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +99 +100 +106 +106 +106 +110 +110 +116 +115 +115 +119 +119 +126 +125 +125 +129 +129 +133 +133 +133 +139 +140 +143 +143 +144 +147 +148 +151 +151 +158 +157 +157 +161 +161 +165 +164 +164 +169 +169 +169 +169 +168 +173 +173 +175 +175 +174 +179 +179 +182 +182 +183 +185 +185 +189 +188 +190 +190 +190 +194 +194 +196 +196 +196 +198 +198 +199 +199 +198 +201 +200 +200 +200 +200 +202 +202 +204 +204 +205 +204 +205 +207 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +204 +204 +205 +204 +204 +202 +203 +201 +200 +201 +200 +201 +198 +198 +198 +196 +196 +194 +194 +194 +191 +190 +189 +189 +189 +184 +185 +182 +183 +183 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +126 +126 +125 +119 +120 +115 +116 +115 +110 +109 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +73 +72 +72 +68 +68 +64 +64 +65 +59 +58 +54 +55 +55 +51 +50 +47 +46 +47 +43 +43 +41 +40 +37 +37 +37 +32 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +13 +13 +13 +13 +14 +13 +14 +14 +14 +14 +13 +13 +14 +14 +14 +13 +14 +14 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +14 +14 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +22 +26 +25 +28 +27 +27 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +51 +51 +55 +55 +59 +58 +58 +65 +65 +68 +68 +69 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +99 +106 +106 +110 +109 +110 +115 +115 +119 +119 +119 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +172 +174 +175 +175 +178 +179 +183 +182 +182 +185 +185 +185 +185 +184 +188 +189 +191 +190 +191 +194 +194 +196 +196 +196 +199 +199 +200 +200 +200 +200 +200 +202 +202 +202 +202 +202 +204 +204 +205 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +204 +204 +204 +204 +204 +202 +202 +201 +200 +201 +201 +201 +198 +198 +199 +196 +197 +194 +195 +190 +190 +191 +189 +188 +185 +184 +184 +183 +182 +179 +178 +178 +174 +175 +173 +172 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +152 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +130 +125 +125 +125 +119 +119 +115 +115 +116 +109 +110 +105 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +62 +59 +58 +54 +54 +50 +51 +50 +47 +47 +43 +43 +42 +41 +41 +41 +41 +41 +37 +37 +32 +33 +34 +31 +31 +27 +27 +27 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +14 +13 +13 +14 +13 +13 +14 +13 +14 +13 +13 +13 +13 +13 +14 +14 +13 +13 +14 +13 +13 +14 +13 +13 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +36 +41 +41 +41 +43 +43 +47 +46 +50 +50 +51 +55 +55 +59 +59 +58 +64 +64 +69 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +116 +120 +119 +120 +126 +126 +129 +129 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +152 +151 +151 +157 +157 +161 +161 +161 +165 +164 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +182 +183 +184 +185 +188 +188 +189 +190 +190 +194 +194 +194 +197 +196 +196 +196 +196 +198 +198 +200 +200 +201 +200 +201 +203 +202 +204 +204 +205 +204 +205 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +206 +204 +204 +205 +205 +204 +202 +202 +200 +200 +201 +200 +200 +198 +198 +199 +197 +196 +194 +194 +194 +190 +191 +189 +189 +189 +185 +185 +183 +183 +182 +179 +179 +175 +175 +173 +172 +172 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +140 +140 +133 +133 +129 +130 +126 +125 +125 +120 +120 +116 +115 +116 +110 +110 +109 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +65 +65 +64 +65 +65 +58 +58 +54 +54 +55 +50 +51 +46 +47 +45 +43 +42 +41 +41 +37 +37 +36 +32 +33 +31 +31 +31 +27 +27 +27 +27 +27 +25 +25 +21 +21 +22 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +14 +14 +13 +14 +14 +13 +14 +14 +14 +14 +14 +13 +14 +14 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +54 +54 +55 +54 +59 +59 +65 +64 +64 +68 +69 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +89 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +111 +115 +115 +119 +120 +126 +126 +126 +129 +129 +133 +133 +133 +139 +139 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +158 +161 +162 +165 +165 +169 +169 +168 +173 +173 +175 +175 +174 +179 +179 +178 +179 +179 +183 +183 +185 +185 +185 +188 +188 +190 +190 +194 +195 +194 +196 +197 +199 +198 +199 +201 +200 +200 +200 +200 +202 +202 +205 +204 +205 +205 +204 +206 +206 +207 +206 +206 +207 +206 +206 +207 +207 +206 +206 +206 +206 +206 +205 +204 +204 +204 +204 +202 +202 +200 +200 +200 +201 +201 +199 +198 +199 +197 +196 +194 +195 +191 +190 +191 +188 +188 +185 +184 +185 +183 +183 +183 +183 +182 +178 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +164 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +120 +119 +120 +115 +115 +109 +109 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +77 +76 +72 +72 +68 +69 +66 +64 +64 +58 +58 +54 +54 +55 +50 +51 +47 +47 +46 +43 +43 +43 +42 +43 +41 +41 +37 +37 +37 +33 +33 +31 +30 +28 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +13 +13 +13 +14 +14 +14 +14 +14 +13 +14 +14 +14 +13 +13 +14 +14 +14 +13 +14 +13 +13 +14 +14 +13 +13 +12 +15 +15 +17 +17 +20 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +55 +55 +54 +58 +58 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +91 +96 +96 +100 +100 +105 +106 +105 +110 +110 +115 +115 +115 +119 +119 +119 +120 +119 +126 +125 +129 +129 +130 +133 +133 +139 +140 +140 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +165 +165 +165 +169 +168 +173 +173 +173 +175 +175 +178 +179 +182 +183 +183 +184 +184 +188 +188 +188 +191 +191 +191 +191 +191 +195 +194 +197 +197 +197 +198 +199 +201 +200 +201 +200 +201 +202 +202 +204 +205 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +207 +206 +206 +206 +204 +204 +204 +204 +205 +202 +202 +201 +201 +201 +200 +201 +199 +198 +198 +196 +196 +195 +194 +194 +191 +190 +188 +188 +189 +185 +185 +182 +182 +182 +179 +179 +175 +175 +173 +173 +172 +168 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +130 +126 +126 +125 +119 +119 +116 +115 +116 +110 +110 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +76 +77 +76 +72 +72 +68 +68 +68 +64 +64 +64 +64 +64 +58 +58 +55 +54 +55 +51 +50 +46 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +24 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +12 +13 +13 +13 +13 +14 +13 +13 +14 +13 +14 +13 +14 +13 +14 +13 +13 +14 +13 +13 +13 +14 +13 +14 +14 +13 +13 +14 +12 +15 +15 +17 +17 +18 +19 +19 +21 +21 +20 +25 +25 +27 +27 +27 +31 +31 +33 +33 +38 +37 +37 +41 +40 +43 +43 +43 +46 +47 +50 +51 +51 +54 +55 +58 +58 +59 +64 +64 +68 +68 +68 +72 +73 +76 +76 +83 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +115 +120 +119 +122 +125 +125 +129 +129 +133 +133 +133 +140 +139 +143 +143 +143 +147 +147 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +169 +169 +169 +173 +173 +174 +175 +175 +179 +178 +182 +183 +183 +185 +185 +188 +188 +188 +191 +190 +194 +195 +195 +196 +196 +198 +198 +200 +200 +201 +200 +201 +202 +203 +203 +205 +204 +205 +205 +204 +204 +204 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +205 +204 +204 +204 +205 +202 +202 +200 +201 +201 +201 +201 +199 +198 +199 +196 +197 +194 +195 +194 +190 +191 +189 +189 +185 +185 +184 +183 +183 +179 +178 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +144 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +125 +119 +119 +116 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +91 +90 +90 +86 +86 +82 +82 +82 +76 +76 +76 +76 +77 +72 +72 +68 +69 +68 +65 +64 +58 +59 +58 +55 +55 +51 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +13 +14 +14 +13 +13 +14 +13 +13 +14 +13 +14 +13 +13 +14 +14 +13 +13 +13 +14 +14 +13 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +50 +55 +55 +55 +59 +59 +64 +64 +69 +69 +68 +72 +72 +76 +76 +76 +82 +82 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +102 +106 +106 +110 +110 +115 +116 +115 +119 +119 +125 +125 +125 +129 +130 +129 +129 +129 +133 +133 +139 +140 +139 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +182 +183 +183 +184 +185 +189 +189 +190 +190 +191 +194 +194 +196 +196 +197 +198 +199 +201 +200 +200 +200 +201 +203 +203 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +207 +206 +206 +206 +204 +205 +204 +205 +204 +202 +202 +202 +201 +201 +200 +200 +201 +198 +198 +196 +196 +195 +194 +194 +190 +191 +188 +188 +189 +185 +185 +183 +183 +182 +179 +179 +175 +175 +175 +173 +173 +169 +169 +170 +164 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +143 +143 +143 +139 +139 +133 +133 +133 +130 +130 +125 +126 +123 +120 +119 +116 +116 +109 +110 +109 +106 +106 +100 +100 +100 +96 +96 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +73 +72 +73 +69 +68 +64 +64 +64 +58 +59 +55 +54 +54 +50 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +13 +14 +13 +13 +14 +13 +14 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +14 +13 +13 +14 +14 +14 +13 +13 +15 +15 +18 +17 +17 +19 +19 +21 +21 +21 +25 +25 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +36 +38 +41 +41 +43 +43 +47 +47 +46 +51 +50 +55 +54 +55 +58 +59 +58 +58 +59 +64 +65 +68 +68 +68 +72 +72 +77 +76 +79 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +106 +106 +106 +109 +110 +115 +116 +116 +120 +119 +126 +126 +129 +129 +130 +134 +134 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +175 +175 +175 +178 +179 +183 +183 +182 +185 +185 +189 +189 +189 +190 +191 +194 +194 +194 +197 +196 +199 +198 +199 +200 +200 +201 +201 +203 +202 +202 +204 +204 +204 +204 +204 +207 +206 +207 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +207 +206 +204 +204 +204 +204 +203 +202 +202 +200 +200 +200 +200 +200 +198 +198 +197 +196 +196 +195 +194 +190 +190 +190 +189 +189 +185 +185 +185 +183 +183 +179 +178 +174 +175 +175 +173 +173 +169 +169 +169 +165 +165 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +148 +143 +143 +139 +139 +133 +133 +133 +130 +130 +126 +126 +126 +119 +120 +120 +120 +119 +115 +116 +110 +110 +110 +106 +106 +100 +100 +96 +95 +97 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +73 +73 +68 +69 +69 +64 +64 +59 +59 +59 +54 +54 +51 +50 +47 +47 +47 +43 +43 +41 +41 +40 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +20 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +14 +14 +13 +13 +14 +14 +13 +14 +14 +14 +14 +13 +13 +14 +13 +13 +14 +13 +13 +15 +14 +15 +17 +17 +19 +19 +19 +20 +22 +24 +25 +26 +27 +27 +31 +31 +34 +33 +33 +37 +37 +41 +41 +41 +43 +43 +43 +43 +43 +47 +47 +51 +51 +51 +54 +54 +59 +58 +59 +64 +64 +68 +69 +73 +72 +72 +76 +76 +82 +82 +82 +86 +86 +86 +87 +86 +90 +90 +96 +95 +96 +100 +100 +106 +106 +107 +110 +109 +116 +116 +120 +120 +120 +125 +126 +129 +130 +129 +133 +133 +139 +140 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +172 +173 +175 +175 +174 +179 +179 +183 +183 +183 +184 +185 +188 +188 +189 +191 +191 +194 +194 +196 +196 +197 +199 +199 +200 +201 +200 +201 +201 +202 +202 +202 +204 +204 +204 +204 +204 +207 +206 +206 +206 +206 +207 +207 +206 +207 +207 +206 +207 +206 +206 +204 +205 +205 +204 +204 +202 +202 +202 +200 +200 +200 +200 +200 +199 +199 +196 +196 +197 +195 +195 +191 +190 +188 +188 +188 +185 +185 +183 +182 +183 +178 +179 +179 +179 +179 +175 +175 +173 +173 +172 +169 +169 +165 +165 +163 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +140 +139 +140 +139 +140 +133 +133 +129 +129 +129 +125 +126 +119 +119 +118 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +72 +73 +68 +68 +64 +64 +64 +58 +58 +55 +54 +55 +51 +51 +47 +46 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +14 +13 +14 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +13 +14 +13 +14 +14 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +22 +21 +21 +25 +25 +27 +27 +27 +31 +31 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +44 +46 +47 +51 +50 +55 +55 +54 +59 +58 +64 +64 +64 +68 +68 +69 +69 +68 +72 +72 +76 +76 +77 +82 +82 +86 +86 +89 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +109 +110 +115 +115 +120 +119 +120 +124 +125 +129 +129 +130 +134 +133 +140 +139 +142 +143 +143 +147 +147 +151 +152 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +168 +173 +173 +175 +175 +174 +179 +179 +182 +183 +184 +185 +185 +189 +189 +190 +191 +191 +195 +194 +194 +194 +194 +197 +196 +198 +199 +198 +200 +200 +200 +201 +201 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +205 +204 +204 +204 +205 +203 +202 +201 +200 +200 +200 +200 +198 +198 +196 +196 +197 +195 +195 +195 +194 +195 +190 +190 +188 +189 +189 +185 +184 +183 +183 +181 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +140 +139 +140 +133 +133 +130 +129 +129 +125 +125 +119 +120 +119 +116 +115 +110 +109 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +86 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +68 +69 +64 +64 +58 +58 +59 +54 +55 +51 +50 +51 +47 +47 +44 +42 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +13 +14 +14 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +13 +14 +13 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +15 +15 +15 +17 +17 +17 +17 +17 +19 +19 +21 +21 +21 +21 +21 +25 +25 +26 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +43 +43 +43 +46 +47 +50 +50 +50 +55 +55 +58 +58 +61 +65 +64 +68 +68 +72 +73 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +115 +115 +115 +120 +119 +125 +126 +125 +129 +129 +133 +133 +134 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +166 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +179 +183 +183 +185 +184 +185 +189 +189 +191 +190 +190 +194 +194 +196 +196 +198 +199 +198 +201 +201 +200 +200 +200 +202 +202 +204 +205 +205 +205 +204 +207 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +203 +202 +202 +202 +200 +200 +200 +200 +200 +198 +199 +196 +197 +195 +194 +194 +191 +190 +188 +189 +189 +185 +184 +183 +183 +183 +178 +179 +179 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +130 +125 +125 +126 +120 +120 +115 +115 +111 +110 +109 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +69 +68 +65 +64 +59 +59 +59 +55 +55 +51 +51 +51 +46 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +32 +27 +27 +25 +25 +22 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +13 +13 +14 +14 +14 +13 +13 +14 +13 +13 +13 +14 +13 +14 +14 +14 +14 +14 +13 +13 +14 +13 +13 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +46 +46 +46 +50 +50 +54 +54 +54 +58 +58 +64 +64 +64 +68 +68 +72 +72 +73 +76 +76 +82 +82 +82 +86 +86 +91 +90 +95 +96 +96 +99 +100 +106 +106 +106 +110 +110 +115 +115 +116 +120 +120 +125 +125 +125 +130 +129 +133 +133 +133 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +172 +175 +175 +180 +179 +179 +183 +183 +184 +185 +189 +188 +188 +191 +190 +194 +194 +195 +196 +196 +199 +198 +198 +201 +201 +201 +201 +201 +202 +203 +204 +205 +204 +204 +205 +207 +206 +207 +206 +206 +207 +206 +206 +206 +206 +207 +206 +207 +207 +206 +204 +204 +205 +204 +204 +202 +202 +200 +201 +200 +200 +200 +199 +198 +196 +197 +197 +194 +194 +191 +191 +190 +188 +189 +189 +189 +188 +184 +184 +183 +183 +183 +179 +179 +175 +174 +175 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +140 +133 +133 +129 +130 +125 +125 +125 +119 +120 +115 +116 +116 +109 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +73 +72 +72 +69 +68 +64 +64 +65 +58 +58 +55 +54 +54 +51 +51 +47 +47 +47 +43 +42 +41 +41 +41 +37 +37 +33 +33 +32 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +13 +14 +14 +14 +14 +13 +14 +14 +14 +13 +13 +14 +14 +13 +14 +13 +13 +13 +13 +13 +14 +14 +14 +13 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +35 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +51 +54 +54 +58 +59 +58 +64 +64 +68 +68 +69 +73 +71 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +115 +119 +120 +119 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +172 +173 +175 +175 +179 +179 +179 +183 +184 +184 +184 +184 +189 +188 +190 +191 +190 +194 +194 +196 +196 +197 +198 +198 +200 +200 +201 +200 +200 +202 +202 +205 +204 +204 +205 +205 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +200 +200 +201 +200 +200 +198 +198 +198 +197 +196 +197 +197 +197 +195 +194 +191 +191 +191 +189 +189 +185 +185 +184 +183 +183 +179 +179 +174 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +148 +143 +143 +139 +139 +138 +133 +133 +129 +129 +130 +125 +125 +119 +120 +119 +115 +115 +110 +109 +110 +106 +106 +100 +100 +99 +96 +96 +89 +90 +86 +86 +87 +82 +82 +76 +76 +76 +72 +72 +68 +69 +68 +64 +64 +58 +58 +58 +54 +54 +51 +50 +51 +46 +47 +43 +43 +41 +40 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +16 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +13 +13 +13 +13 +14 +13 +14 +14 +14 +13 +14 +13 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +14 +14 +13 +13 +13 +13 +12 +15 +15 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +30 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +51 +54 +54 +56 +59 +58 +65 +64 +68 +68 +68 +72 +72 +76 +77 +76 +82 +82 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +110 +116 +116 +115 +120 +120 +125 +125 +125 +129 +130 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +179 +183 +182 +185 +185 +185 +189 +189 +191 +191 +191 +194 +194 +197 +196 +199 +198 +198 +200 +201 +200 +200 +200 +202 +203 +202 +202 +203 +204 +204 +204 +204 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +204 +204 +204 +204 +205 +204 +204 +204 +202 +203 +201 +200 +201 +200 +201 +198 +198 +198 +196 +197 +194 +195 +190 +190 +190 +189 +188 +185 +185 +185 +182 +183 +179 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +162 +161 +161 +157 +157 +151 +151 +151 +147 +148 +143 +143 +143 +139 +139 +133 +133 +133 +129 +130 +126 +125 +126 +119 +120 +116 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +59 +58 +58 +55 +54 +51 +51 +50 +46 +46 +43 +43 +43 +41 +41 +37 +36 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +22 +21 +20 +19 +19 +17 +17 +17 +15 +15 +15 +16 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +13 +13 +14 +14 +13 +13 +13 +13 +14 +13 +13 +14 +14 +14 +13 +13 +13 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +32 +37 +37 +37 +41 +41 +43 +42 +46 +46 +47 +50 +50 +55 +55 +55 +58 +58 +59 +59 +59 +64 +65 +68 +69 +68 +72 +72 +77 +76 +76 +82 +82 +86 +86 +90 +90 +90 +95 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +115 +120 +120 +119 +126 +125 +129 +129 +129 +133 +133 +139 +139 +144 +143 +143 +147 +147 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +183 +183 +183 +184 +185 +188 +189 +188 +191 +191 +194 +194 +195 +196 +196 +198 +199 +199 +201 +201 +200 +200 +201 +202 +203 +204 +204 +204 +205 +204 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +207 +206 +207 +206 +206 +205 +204 +204 +204 +205 +202 +202 +201 +200 +201 +200 +200 +198 +199 +198 +197 +197 +195 +194 +195 +190 +191 +188 +189 +189 +184 +185 +182 +182 +179 +179 +178 +175 +175 +173 +172 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +158 +151 +151 +147 +147 +148 +143 +143 +139 +139 +134 +134 +133 +129 +129 +126 +125 +125 +120 +120 +115 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +83 +82 +82 +76 +76 +72 +72 +73 +68 +68 +64 +65 +65 +58 +58 +55 +54 +54 +50 +50 +47 +46 +47 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +12 +13 +12 +13 +14 +13 +14 +14 +13 +13 +14 +13 +14 +14 +13 +14 +13 +14 +13 +14 +13 +14 +13 +13 +14 +14 +13 +14 +14 +13 +14 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +30 +31 +31 +33 +33 +37 +37 +36 +41 +41 +43 +42 +43 +47 +47 +50 +51 +51 +54 +54 +59 +58 +59 +64 +64 +68 +69 +73 +72 +72 +76 +76 +82 +83 +82 +86 +87 +90 +90 +90 +96 +96 +100 +99 +100 +106 +106 +110 +110 +110 +116 +116 +120 +119 +126 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +168 +172 +173 +173 +175 +175 +179 +178 +179 +183 +183 +183 +183 +183 +185 +185 +189 +189 +188 +191 +191 +195 +194 +195 +196 +197 +198 +198 +200 +200 +200 +200 +200 +202 +202 +202 +204 +204 +205 +204 +204 +204 +204 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +205 +205 +205 +204 +204 +202 +202 +201 +200 +201 +201 +201 +198 +198 +199 +196 +197 +195 +194 +190 +191 +190 +189 +188 +184 +185 +185 +182 +183 +179 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +139 +139 +139 +133 +133 +129 +129 +129 +126 +125 +119 +119 +120 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +69 +64 +64 +58 +58 +55 +55 +55 +50 +50 +47 +47 +47 +43 +42 +43 +43 +43 +41 +40 +37 +37 +37 +33 +33 +31 +31 +29 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +13 +14 +13 +13 +13 +13 +14 +14 +13 +13 +14 +14 +13 +14 +13 +14 +14 +14 +14 +13 +13 +14 +13 +14 +13 +12 +15 +15 +16 +17 +17 +19 +19 +22 +21 +21 +25 +25 +27 +27 +27 +31 +31 +32 +33 +33 +37 +37 +41 +40 +41 +43 +42 +47 +47 +50 +51 +50 +54 +54 +58 +58 +58 +64 +64 +64 +64 +64 +68 +68 +72 +72 +73 +76 +76 +82 +82 +83 +86 +86 +90 +90 +97 +96 +96 +100 +100 +106 +105 +106 +110 +110 +116 +116 +115 +120 +120 +125 +125 +125 +130 +129 +133 +133 +132 +139 +139 +143 +143 +143 +143 +144 +147 +147 +151 +151 +151 +157 +157 +157 +157 +157 +161 +160 +165 +165 +165 +169 +169 +172 +173 +173 +175 +175 +179 +178 +182 +182 +183 +185 +184 +188 +189 +188 +190 +190 +190 +191 +190 +194 +194 +197 +196 +197 +198 +198 +201 +201 +200 +201 +201 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +205 +204 +204 +204 +205 +202 +202 +200 +200 +200 +200 +200 +198 +198 +198 +196 +196 +195 +195 +194 +190 +190 +189 +188 +188 +185 +185 +183 +183 +179 +178 +179 +174 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +134 +134 +133 +129 +130 +125 +125 +126 +120 +120 +115 +115 +116 +110 +110 +106 +105 +106 +100 +100 +96 +95 +97 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +68 +68 +68 +65 +64 +58 +58 +59 +55 +54 +51 +51 +49 +47 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +14 +14 +14 +13 +13 +14 +13 +14 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +32 +31 +31 +33 +33 +37 +37 +37 +41 +41 +41 +40 +41 +43 +42 +47 +47 +46 +50 +51 +55 +55 +54 +59 +58 +64 +65 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +89 +90 +96 +96 +96 +100 +100 +106 +105 +106 +110 +110 +116 +115 +119 +119 +119 +125 +125 +129 +129 +130 +133 +134 +140 +139 +140 +143 +143 +147 +147 +147 +151 +151 +157 +157 +158 +161 +161 +165 +165 +170 +169 +169 +173 +173 +174 +175 +175 +179 +179 +179 +179 +178 +183 +182 +185 +184 +185 +189 +189 +190 +190 +194 +194 +195 +196 +196 +198 +199 +198 +201 +200 +201 +200 +200 +202 +202 +204 +204 +204 +205 +204 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +204 +204 +204 +204 +204 +202 +202 +201 +200 +201 +200 +200 +198 +198 +199 +196 +196 +195 +195 +190 +190 +190 +189 +189 +184 +184 +184 +182 +183 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +134 +134 +133 +129 +129 +125 +125 +125 +120 +119 +115 +115 +116 +109 +110 +106 +106 +100 +100 +100 +95 +96 +90 +90 +90 +86 +86 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +65 +65 +59 +59 +54 +54 +54 +51 +50 +47 +47 +47 +43 +43 +43 +42 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +28 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +14 +14 +13 +14 +13 +14 +14 +14 +14 +13 +13 +13 +14 +13 +14 +13 +12 +15 +15 +17 +16 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +51 +54 +55 +59 +59 +64 +65 +64 +68 +68 +72 +73 +73 +76 +76 +82 +82 +82 +86 +86 +90 +90 +91 +96 +96 +100 +100 +107 +106 +106 +110 +110 +116 +115 +115 +119 +120 +119 +120 +119 +125 +125 +130 +129 +130 +133 +133 +139 +139 +141 +143 +143 +147 +147 +151 +151 +151 +157 +158 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +178 +179 +182 +182 +184 +184 +185 +188 +188 +191 +190 +191 +194 +194 +196 +197 +196 +199 +198 +200 +201 +200 +200 +200 +203 +203 +202 +204 +204 +204 +205 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +205 +204 +204 +204 +205 +202 +203 +203 +200 +201 +201 +200 +198 +198 +199 +197 +196 +194 +194 +195 +190 +190 +188 +189 +189 +184 +185 +182 +182 +182 +179 +179 +175 +175 +175 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +148 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +130 +125 +126 +119 +119 +116 +116 +115 +109 +110 +106 +106 +106 +100 +100 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +79 +76 +76 +73 +72 +68 +68 +68 +65 +64 +58 +58 +58 +55 +54 +54 +54 +55 +51 +51 +47 +47 +47 +43 +42 +41 +41 +38 +37 +36 +33 +33 +31 +31 +31 +27 +27 +27 +27 +26 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +14 +14 +13 +14 +14 +14 +14 +13 +14 +13 +14 +13 +14 +13 +13 +14 +14 +13 +13 +13 +13 +14 +14 +14 +13 +13 +15 +15 +15 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +37 +37 +36 +41 +41 +43 +43 +43 +47 +47 +50 +51 +50 +54 +54 +58 +59 +58 +65 +64 +68 +69 +69 +72 +72 +76 +76 +83 +82 +82 +86 +86 +90 +90 +90 +96 +96 +96 +96 +96 +100 +100 +106 +106 +106 +110 +109 +115 +116 +117 +120 +119 +125 +125 +130 +129 +129 +134 +133 +133 +134 +133 +140 +139 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +160 +161 +161 +165 +165 +169 +169 +169 +173 +173 +174 +175 +175 +179 +179 +182 +183 +182 +184 +185 +188 +189 +189 +190 +191 +194 +194 +197 +197 +196 +199 +199 +200 +200 +200 +200 +200 +203 +202 +202 +204 +205 +204 +204 +204 +206 +206 +206 +207 +206 +207 +207 +206 +206 +207 +207 +206 +206 +206 +204 +204 +205 +204 +204 +203 +203 +202 +201 +200 +201 +201 +200 +199 +198 +197 +196 +196 +194 +195 +191 +190 +189 +189 +188 +185 +184 +182 +183 +182 +179 +179 +175 +175 +175 +173 +173 +169 +169 +168 +165 +165 +161 +161 +161 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +133 +133 +133 +129 +129 +125 +125 +125 +119 +119 +116 +115 +116 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +86 +87 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +65 +64 +64 +58 +58 +54 +55 +55 +51 +51 +46 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +24 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +14 +13 +14 +14 +14 +13 +14 +13 +13 +14 +14 +13 +13 +13 +14 +14 +13 +13 +14 +14 +13 +13 +13 +14 +13 +14 +14 +13 +12 +15 +15 +17 +17 +20 +19 +18 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +40 +43 +42 +43 +47 +47 +50 +50 +55 +55 +55 +58 +58 +64 +64 +64 +68 +68 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +88 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +109 +116 +116 +115 +116 +115 +120 +120 +125 +125 +125 +130 +129 +133 +134 +138 +139 +139 +143 +143 +147 +147 +147 +151 +152 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +178 +182 +183 +182 +184 +185 +188 +189 +188 +190 +191 +195 +194 +194 +196 +196 +199 +199 +198 +200 +200 +200 +200 +200 +203 +202 +204 +204 +205 +204 +204 +206 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +205 +202 +202 +200 +201 +201 +200 +201 +198 +199 +196 +196 +196 +194 +194 +191 +191 +190 +188 +189 +185 +185 +185 +183 +183 +178 +179 +178 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +137 +134 +134 +129 +129 +125 +125 +125 +120 +120 +115 +115 +116 +110 +110 +110 +109 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +88 +86 +86 +82 +82 +76 +76 +76 +73 +72 +68 +68 +68 +65 +65 +59 +59 +59 +55 +54 +51 +51 +51 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +26 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +13 +13 +14 +14 +14 +14 +14 +13 +13 +13 +14 +13 +14 +13 +14 +14 +13 +13 +14 +13 +13 +13 +14 +14 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +32 +33 +33 +36 +37 +41 +41 +41 +43 +43 +47 +46 +47 +50 +51 +50 +51 +51 +55 +55 +58 +59 +58 +64 +64 +69 +68 +70 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +96 +96 +96 +100 +100 +105 +105 +106 +110 +110 +115 +115 +119 +120 +120 +126 +126 +129 +129 +129 +134 +133 +139 +139 +139 +143 +143 +147 +147 +147 +152 +151 +157 +157 +157 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +178 +179 +183 +182 +183 +185 +184 +189 +188 +189 +190 +191 +194 +194 +195 +197 +196 +199 +198 +200 +200 +200 +201 +201 +202 +202 +203 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +205 +204 +204 +204 +204 +202 +202 +202 +200 +200 +200 +200 +200 +200 +200 +198 +198 +198 +196 +196 +194 +195 +195 +190 +190 +188 +188 +184 +185 +184 +183 +182 +179 +179 +179 +175 +175 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +159 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +134 +133 +133 +133 +130 +130 +125 +126 +125 +119 +119 +116 +115 +110 +110 +110 +105 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +73 +72 +73 +68 +68 +64 +64 +59 +58 +58 +54 +55 +50 +50 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +30 +31 +31 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +18 +16 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +14 +13 +14 +13 +13 +14 +14 +14 +13 +14 +13 +14 +13 +14 +13 +14 +14 +13 +13 +13 +13 +14 +14 +13 +12 +15 +15 +15 +15 +16 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +31 +31 +31 +32 +33 +37 +37 +36 +41 +41 +43 +43 +43 +47 +46 +50 +50 +54 +54 +54 +59 +58 +65 +64 +65 +68 +68 +72 +73 +72 +76 +76 +82 +82 +82 +86 +86 +89 +90 +95 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +115 +119 +119 +125 +125 +125 +129 +129 +133 +133 +134 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +156 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +178 +178 +183 +183 +184 +185 +189 +189 +188 +191 +190 +194 +194 +194 +196 +196 +198 +197 +198 +200 +200 +201 +200 +200 +202 +203 +204 +204 +205 +204 +204 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +203 +201 +200 +201 +201 +200 +198 +198 +196 +197 +196 +194 +194 +191 +191 +191 +188 +188 +188 +189 +189 +185 +185 +182 +183 +183 +179 +179 +175 +175 +174 +173 +173 +169 +169 +165 +165 +165 +161 +161 +161 +161 +161 +157 +157 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +137 +133 +133 +130 +129 +126 +126 +126 +119 +120 +116 +116 +116 +110 +109 +105 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +69 +68 +65 +64 +65 +58 +59 +54 +55 +55 +51 +51 +46 +47 +47 +43 +42 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +20 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +14 +14 +13 +14 +13 +14 +13 +14 +13 +14 +14 +13 +13 +14 +14 +13 +14 +14 +14 +13 +13 +14 +13 +15 +15 +15 +17 +17 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +28 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +46 +47 +46 +47 +47 +50 +51 +54 +55 +55 +58 +58 +65 +65 +65 +69 +68 +72 +72 +76 +77 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +115 +119 +119 +120 +125 +125 +130 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +169 +169 +169 +173 +172 +175 +175 +175 +179 +178 +183 +183 +183 +184 +185 +189 +188 +188 +191 +191 +194 +194 +194 +197 +197 +198 +199 +201 +201 +201 +200 +200 +202 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +207 +204 +204 +204 +205 +204 +202 +203 +202 +201 +200 +201 +200 +200 +199 +199 +196 +197 +196 +195 +195 +191 +190 +189 +188 +188 +185 +184 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +152 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +134 +133 +129 +129 +125 +126 +125 +120 +119 +115 +115 +116 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +69 +64 +64 +65 +59 +58 +55 +55 +51 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +12 +13 +14 +13 +13 +14 +14 +13 +13 +13 +14 +14 +13 +13 +14 +14 +13 +14 +13 +13 +13 +13 +14 +14 +14 +14 +14 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +51 +53 +54 +54 +59 +59 +64 +64 +64 +69 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +99 +105 +106 +106 +110 +110 +116 +115 +115 +120 +119 +125 +125 +125 +129 +129 +133 +134 +133 +140 +139 +143 +143 +143 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +169 +169 +169 +173 +173 +175 +175 +175 +178 +179 +183 +183 +183 +184 +185 +188 +188 +191 +191 +190 +194 +194 +196 +196 +196 +198 +199 +201 +200 +200 +200 +201 +202 +202 +203 +204 +204 +204 +205 +205 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +204 +204 +205 +204 +204 +202 +202 +202 +200 +201 +200 +200 +199 +198 +199 +196 +196 +194 +194 +194 +190 +191 +189 +188 +189 +184 +184 +184 +184 +184 +182 +182 +179 +179 +179 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +134 +134 +130 +129 +125 +125 +120 +120 +119 +116 +115 +109 +110 +110 +106 +106 +100 +100 +100 +96 +96 +91 +90 +90 +86 +86 +83 +82 +82 +76 +76 +72 +72 +68 +68 +68 +64 +64 +59 +59 +58 +54 +55 +50 +51 +51 +47 +47 +43 +43 +42 +41 +41 +37 +37 +37 +33 +32 +31 +31 +28 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +14 +13 +13 +14 +13 +13 +14 +13 +13 +13 +14 +14 +13 +14 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +13 +13 +15 +15 +17 +17 +19 +19 +19 +21 +21 +24 +25 +25 +27 +27 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +50 +51 +51 +55 +54 +58 +59 +59 +64 +64 +69 +68 +68 +72 +72 +76 +76 +77 +82 +82 +87 +86 +89 +90 +90 +96 +96 +100 +99 +100 +106 +105 +110 +109 +110 +115 +115 +119 +119 +120 +125 +126 +129 +129 +130 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +185 +184 +184 +188 +188 +191 +191 +191 +194 +195 +196 +196 +197 +198 +199 +200 +200 +201 +201 +201 +202 +202 +202 +205 +204 +204 +204 +207 +207 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +204 +204 +205 +204 +204 +202 +202 +200 +201 +200 +200 +200 +199 +198 +199 +196 +196 +196 +197 +196 +194 +194 +191 +191 +191 +189 +188 +185 +184 +183 +183 +183 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +152 +147 +147 +143 +143 +139 +140 +139 +134 +133 +130 +129 +129 +125 +125 +119 +119 +120 +115 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +95 +90 +90 +87 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +69 +68 +64 +64 +59 +59 +59 +55 +54 +51 +50 +51 +47 +47 +43 +42 +41 +40 +41 +37 +37 +33 +33 +33 +31 +32 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +18 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +13 +13 +14 +14 +13 +13 +14 +14 +14 +13 +14 +14 +14 +13 +13 +14 +14 +13 +14 +13 +12 +15 +15 +15 +15 +15 +17 +17 +20 +19 +19 +21 +21 +25 +25 +26 +27 +26 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +51 +55 +54 +55 +59 +58 +65 +64 +68 +69 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +105 +106 +110 +110 +115 +116 +120 +119 +119 +125 +125 +130 +129 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +147 +151 +151 +156 +157 +157 +161 +161 +165 +164 +169 +168 +169 +173 +173 +174 +175 +175 +179 +178 +179 +178 +178 +182 +183 +185 +184 +184 +188 +188 +190 +190 +191 +194 +195 +197 +197 +198 +198 +198 +200 +200 +200 +200 +200 +202 +202 +205 +204 +205 +204 +204 +207 +206 +206 +206 +207 +206 +206 +207 +206 +207 +207 +207 +207 +206 +206 +205 +204 +204 +204 +204 +202 +202 +202 +202 +202 +200 +200 +201 +200 +200 +198 +199 +197 +196 +196 +195 +194 +191 +191 +189 +188 +189 +185 +184 +183 +182 +183 +178 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +140 +139 +139 +133 +133 +129 +129 +129 +126 +126 +120 +119 +120 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +69 +64 +64 +58 +58 +55 +54 +54 +50 +50 +47 +46 +47 +42 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +28 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +14 +14 +14 +13 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +14 +13 +13 +14 +14 +13 +13 +14 +14 +13 +13 +13 +13 +15 +15 +16 +17 +16 +19 +18 +21 +21 +21 +25 +26 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +50 +50 +50 +55 +54 +58 +59 +59 +64 +64 +65 +64 +64 +68 +69 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +89 +90 +96 +96 +96 +100 +100 +106 +106 +106 +109 +110 +115 +116 +116 +120 +120 +125 +125 +125 +129 +129 +133 +134 +134 +139 +139 +143 +143 +148 +147 +147 +151 +151 +157 +157 +157 +161 +161 +166 +165 +165 +169 +169 +173 +173 +173 +173 +173 +175 +175 +175 +178 +179 +183 +182 +184 +185 +184 +189 +189 +191 +190 +190 +194 +194 +195 +194 +194 +197 +197 +199 +198 +198 +201 +201 +200 +201 +201 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +207 +207 +206 +204 +204 +204 +205 +204 +202 +202 +200 +200 +201 +201 +200 +199 +198 +198 +196 +196 +194 +193 +195 +190 +190 +188 +188 +189 +184 +185 +182 +182 +179 +179 +179 +175 +175 +172 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +140 +139 +137 +133 +133 +129 +129 +125 +125 +125 +120 +119 +115 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +69 +68 +65 +65 +64 +58 +59 +55 +55 +54 +50 +50 +47 +47 +47 +43 +43 +41 +41 +38 +37 +37 +33 +33 +31 +31 +31 +27 +27 +27 +27 +27 +25 +25 +20 +21 +21 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +13 +13 +14 +13 +14 +13 +14 +14 +13 +14 +13 +14 +13 +13 +14 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +46 +50 +51 +51 +55 +54 +58 +58 +58 +64 +64 +68 +68 +73 +72 +73 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +110 +110 +115 +116 +120 +120 +126 +125 +125 +130 +129 +133 +134 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +172 +174 +173 +175 +175 +179 +178 +179 +183 +183 +183 +183 +183 +185 +185 +189 +188 +189 +191 +191 +194 +195 +195 +196 +197 +199 +198 +200 +201 +200 +200 +200 +202 +202 +202 +204 +204 +204 +204 +204 +204 +204 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +203 +203 +201 +200 +201 +201 +200 +199 +198 +199 +196 +197 +194 +195 +191 +190 +191 +189 +189 +185 +185 +185 +182 +183 +178 +179 +179 +175 +175 +173 +173 +173 +168 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +140 +133 +133 +133 +129 +129 +125 +125 +125 +119 +119 +115 +115 +116 +110 +110 +106 +105 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +69 +64 +64 +58 +58 +55 +55 +54 +50 +50 +46 +47 +47 +43 +43 +43 +42 +42 +41 +40 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +22 +21 +22 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +14 +14 +14 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +14 +14 +13 +14 +13 +14 +14 +13 +13 +13 +13 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +46 +51 +51 +55 +54 +55 +58 +58 +64 +64 +64 +68 +68 +72 +72 +73 +76 +76 +82 +82 +82 +86 +86 +89 +90 +90 +96 +96 +100 +99 +106 +106 +105 +110 +110 +115 +115 +116 +119 +120 +120 +120 +119 +126 +125 +129 +129 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +182 +182 +185 +185 +188 +189 +188 +191 +190 +194 +195 +195 +196 +196 +196 +196 +196 +198 +198 +200 +200 +201 +200 +201 +202 +202 +204 +204 +204 +205 +204 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +204 +204 +205 +204 +204 +202 +202 +200 +201 +200 +200 +200 +198 +198 +199 +197 +197 +194 +194 +194 +190 +191 +188 +189 +189 +184 +185 +183 +182 +183 +179 +178 +175 +175 +173 +173 +173 +169 +169 +169 +169 +168 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +144 +140 +139 +133 +133 +130 +129 +129 +125 +125 +119 +120 +119 +116 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +83 +82 +76 +76 +76 +73 +72 +68 +68 +68 +64 +64 +65 +65 +64 +58 +58 +55 +55 +55 +51 +50 +46 +47 +47 +43 +42 +41 +41 +37 +37 +36 +33 +33 +31 +31 +31 +27 +27 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +13 +14 +13 +14 +13 +13 +13 +14 +13 +13 +14 +14 +14 +13 +14 +13 +13 +14 +13 +13 +13 +14 +14 +14 +14 +14 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +51 +50 +55 +55 +59 +59 +59 +65 +64 +69 +68 +73 +73 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +105 +106 +110 +109 +111 +115 +116 +119 +120 +125 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +160 +162 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +179 +182 +183 +183 +183 +183 +185 +185 +188 +188 +188 +190 +191 +194 +194 +195 +196 +196 +199 +198 +200 +200 +201 +200 +200 +202 +202 +202 +204 +204 +204 +204 +204 +207 +207 +207 +207 +206 +207 +207 +206 +206 +206 +206 +206 +207 +206 +204 +204 +204 +204 +205 +203 +202 +202 +200 +201 +201 +200 +200 +198 +198 +197 +196 +197 +194 +195 +190 +190 +189 +188 +189 +184 +185 +183 +183 +183 +179 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +134 +134 +130 +130 +129 +126 +125 +120 +119 +120 +115 +116 +110 +109 +110 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +69 +68 +69 +64 +64 +59 +58 +56 +54 +54 +51 +50 +47 +46 +46 +43 +43 +40 +41 +41 +37 +37 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +23 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +12 +14 +13 +13 +13 +14 +14 +13 +13 +13 +13 +14 +14 +13 +13 +14 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +42 +43 +43 +47 +47 +50 +50 +51 +54 +55 +59 +59 +64 +64 +64 +69 +68 +72 +73 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +99 +100 +106 +106 +110 +109 +116 +116 +116 +119 +119 +125 +126 +126 +130 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +153 +157 +157 +161 +160 +164 +165 +165 +169 +168 +173 +173 +173 +175 +175 +175 +174 +175 +178 +178 +183 +182 +183 +185 +185 +189 +188 +189 +191 +191 +195 +194 +196 +196 +196 +199 +198 +200 +200 +200 +200 +200 +202 +202 +202 +204 +204 +204 +204 +205 +207 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +202 +200 +200 +200 +200 +200 +198 +198 +196 +196 +194 +194 +194 +190 +190 +188 +188 +189 +185 +184 +182 +182 +182 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +158 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +130 +125 +126 +119 +119 +120 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +71 +68 +68 +64 +64 +59 +58 +59 +54 +55 +51 +50 +51 +47 +47 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +32 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +14 +13 +13 +14 +13 +14 +14 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +46 +51 +50 +50 +56 +55 +58 +58 +58 +65 +65 +68 +68 +69 +72 +72 +76 +76 +76 +82 +82 +86 +86 +87 +90 +90 +96 +96 +101 +100 +100 +106 +106 +110 +110 +110 +116 +115 +115 +116 +116 +119 +120 +125 +125 +125 +130 +129 +133 +133 +133 +139 +139 +143 +143 +148 +147 +147 +151 +151 +157 +157 +157 +161 +161 +161 +161 +161 +165 +165 +168 +169 +169 +173 +173 +174 +175 +176 +178 +179 +183 +182 +184 +185 +184 +189 +189 +191 +190 +191 +194 +194 +196 +197 +196 +198 +199 +200 +200 +201 +200 +201 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +207 +206 +206 +207 +204 +204 +204 +204 +204 +202 +202 +201 +200 +200 +200 +200 +199 +198 +198 +196 +196 +194 +194 +194 +190 +190 +188 +188 +188 +185 +185 +183 +182 +183 +179 +179 +175 +174 +173 +172 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +140 +139 +141 +133 +133 +129 +129 +126 +125 +125 +120 +120 +115 +115 +115 +110 +109 +110 +109 +110 +105 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +65 +64 +64 +64 +64 +58 +58 +54 +54 +55 +51 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +12 +13 +13 +14 +13 +13 +13 +14 +14 +14 +14 +13 +13 +13 +14 +14 +13 +13 +13 +13 +13 +14 +14 +13 +14 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +46 +51 +51 +51 +55 +55 +59 +58 +58 +64 +64 +68 +68 +67 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +109 +110 +116 +115 +119 +119 +120 +126 +125 +129 +130 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +166 +169 +169 +173 +173 +175 +175 +175 +179 +178 +182 +183 +183 +185 +184 +188 +189 +189 +190 +190 +195 +194 +195 +197 +196 +199 +198 +199 +200 +200 +200 +200 +202 +203 +202 +204 +204 +204 +205 +204 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +205 +202 +202 +202 +200 +200 +200 +200 +200 +198 +199 +196 +196 +196 +195 +194 +190 +190 +191 +189 +189 +184 +184 +183 +182 +183 +179 +179 +175 +175 +175 +172 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +120 +120 +115 +115 +110 +110 +110 +106 +106 +100 +100 +100 +95 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +72 +72 +72 +69 +68 +64 +64 +64 +59 +58 +54 +54 +51 +50 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +16 +13 +13 +12 +13 +14 +13 +14 +13 +13 +14 +14 +13 +14 +13 +14 +13 +14 +14 +13 +14 +13 +14 +13 +13 +14 +13 +14 +14 +13 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +40 +41 +43 +43 +43 +47 +47 +51 +50 +50 +54 +54 +58 +58 +59 +65 +64 +68 +68 +73 +72 +72 +76 +76 +82 +82 +82 +86 +87 +86 +86 +86 +90 +89 +96 +96 +96 +100 +100 +106 +106 +107 +109 +109 +116 +116 +120 +119 +119 +125 +126 +129 +129 +129 +133 +133 +134 +134 +134 +139 +140 +144 +143 +143 +147 +147 +151 +151 +153 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +179 +182 +183 +185 +185 +185 +188 +189 +190 +191 +194 +195 +195 +197 +197 +198 +199 +198 +200 +200 +200 +200 +200 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +200 +200 +200 +200 +201 +199 +198 +199 +196 +197 +195 +194 +191 +191 +190 +188 +189 +185 +184 +184 +183 +182 +179 +178 +179 +174 +175 +172 +173 +173 +168 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +139 +139 +139 +134 +133 +129 +129 +129 +125 +125 +119 +119 +118 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +71 +69 +68 +65 +65 +59 +58 +59 +54 +55 +51 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +14 +13 +14 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +13 +16 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +42 +43 +47 +47 +50 +50 +55 +55 +54 +58 +59 +64 +64 +64 +68 +68 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +87 +90 +89 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +115 +116 +115 +115 +120 +119 +125 +125 +126 +129 +130 +134 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +182 +182 +182 +184 +184 +188 +189 +189 +190 +191 +194 +195 +195 +196 +196 +198 +199 +199 +200 +201 +200 +200 +201 +203 +203 +204 +205 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +207 +207 +206 +206 +204 +204 +204 +204 +205 +202 +202 +200 +200 +200 +200 +201 +198 +199 +196 +196 +197 +194 +194 +191 +190 +190 +188 +188 +184 +185 +184 +182 +182 +179 +179 +178 +175 +175 +173 +173 +170 +169 +169 +165 +165 +161 +161 +161 +157 +157 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +141 +133 +133 +130 +129 +125 +125 +125 +119 +120 +116 +115 +116 +109 +110 +110 +110 +109 +106 +106 +100 +100 +100 +96 +96 +90 +90 +89 +86 +86 +82 +82 +76 +76 +76 +72 +72 +69 +68 +68 +64 +64 +58 +58 +59 +55 +54 +51 +50 +51 +47 +46 +43 +42 +41 +41 +40 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +13 +14 +13 +13 +14 +14 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +14 +13 +13 +14 +14 +14 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +41 +41 +41 +43 +42 +47 +46 +46 +51 +50 +50 +51 +51 +55 +55 +58 +58 +59 +64 +64 +68 +68 +70 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +117 +119 +120 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +168 +169 +169 +173 +173 +175 +175 +175 +179 +179 +182 +183 +182 +184 +185 +189 +189 +189 +190 +190 +195 +194 +194 +196 +197 +198 +198 +201 +200 +199 +200 +200 +203 +202 +203 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +205 +204 +204 +204 +204 +202 +202 +202 +200 +200 +200 +200 +200 +198 +198 +197 +196 +197 +194 +195 +190 +191 +191 +189 +188 +184 +185 +183 +182 +183 +179 +179 +179 +179 +179 +175 +175 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +152 +147 +147 +147 +143 +142 +139 +139 +139 +133 +134 +134 +133 +133 +129 +129 +125 +125 +126 +119 +119 +116 +116 +110 +109 +109 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +59 +58 +58 +54 +54 +51 +50 +51 +47 +47 +43 +43 +42 +41 +41 +37 +37 +37 +33 +33 +31 +31 +32 +27 +27 +25 +25 +22 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +14 +13 +14 +14 +13 +14 +14 +14 +13 +13 +14 +13 +14 +14 +14 +14 +13 +13 +13 +14 +13 +14 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +32 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +48 +51 +50 +55 +54 +58 +58 +58 +64 +64 +68 +68 +68 +72 +72 +72 +72 +72 +76 +76 +82 +82 +83 +86 +86 +90 +90 +92 +96 +96 +100 +100 +106 +105 +106 +110 +109 +116 +115 +116 +120 +120 +125 +126 +125 +129 +129 +133 +133 +134 +139 +140 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +179 +183 +183 +184 +184 +189 +189 +188 +190 +190 +194 +194 +194 +196 +196 +198 +199 +199 +200 +200 +201 +200 +201 +202 +202 +204 +204 +205 +204 +205 +207 +206 +207 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +200 +200 +201 +200 +200 +198 +198 +197 +196 +196 +195 +194 +191 +190 +191 +189 +188 +189 +189 +188 +185 +184 +182 +183 +183 +179 +179 +175 +175 +173 +173 +173 +169 +168 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +130 +129 +129 +125 +125 +119 +120 +119 +115 +116 +110 +110 +110 +106 +100 +100 +100 +100 +96 +96 +90 +90 +91 +86 +85 +82 +83 +77 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +58 +59 +55 +54 +50 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +13 +13 +14 +14 +13 +13 +14 +13 +13 +14 +13 +14 +13 +13 +13 +13 +14 +13 +13 +14 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +36 +37 +38 +41 +41 +43 +43 +47 +46 +47 +50 +50 +55 +54 +54 +58 +58 +58 +58 +58 +65 +64 +68 +68 +68 +72 +72 +76 +76 +81 +82 +82 +86 +86 +90 +90 +90 +96 +96 +96 +96 +96 +100 +100 +106 +106 +106 +110 +109 +116 +116 +116 +119 +120 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +175 +175 +175 +179 +179 +182 +183 +182 +184 +185 +188 +189 +188 +191 +190 +195 +194 +194 +196 +197 +198 +198 +199 +200 +200 +200 +200 +203 +203 +202 +204 +204 +204 +204 +205 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +207 +204 +204 +204 +204 +203 +202 +202 +200 +200 +200 +200 +200 +198 +198 +199 +199 +198 +196 +196 +194 +194 +195 +190 +190 +188 +189 +187 +184 +185 +182 +183 +179 +179 +179 +175 +175 +173 +173 +172 +169 +169 +169 +168 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +134 +133 +129 +129 +129 +125 +125 +119 +119 +119 +116 +116 +110 +110 +110 +105 +106 +100 +100 +96 +95 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +69 +68 +64 +64 +58 +58 +59 +54 +54 +50 +50 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +22 +22 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +14 +14 +13 +14 +13 +14 +14 +13 +13 +14 +13 +14 +13 +14 +13 +13 +14 +13 +14 +14 +14 +14 +13 +13 +13 +13 +15 +15 +15 +15 +15 +17 +17 +17 +19 +19 +21 +20 +24 +25 +25 +27 +27 +32 +31 +31 +33 +33 +37 +37 +37 +41 +41 +41 +41 +41 +43 +43 +47 +47 +47 +50 +50 +55 +54 +57 +58 +58 +64 +64 +68 +68 +68 +72 +73 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +107 +110 +110 +116 +116 +119 +120 +120 +125 +125 +130 +130 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +148 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +182 +183 +185 +186 +188 +188 +189 +191 +191 +195 +194 +197 +197 +197 +198 +198 +200 +200 +200 +200 +200 +203 +202 +203 +204 +204 +205 +204 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +207 +206 +207 +206 +206 +204 +204 +205 +204 +204 +204 +204 +204 +202 +202 +200 +200 +200 +200 +200 +198 +198 +197 +196 +197 +195 +194 +190 +190 +191 +188 +188 +185 +184 +184 +182 +183 +183 +182 +182 +178 +179 +175 +175 +175 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +130 +129 +125 +125 +119 +119 +115 +116 +116 +109 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +72 +72 +68 +68 +64 +64 +64 +58 +58 +55 +54 +54 +51 +51 +47 +46 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +13 +14 +13 +13 +13 +13 +13 +14 +14 +13 +14 +14 +14 +13 +14 +14 +13 +14 +14 +13 +13 +13 +13 +13 +14 +13 +15 +15 +16 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +31 +31 +31 +33 +33 +37 +37 +37 +41 +40 +43 +43 +46 +47 +47 +51 +51 +55 +55 +55 +58 +59 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +83 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +109 +110 +115 +115 +115 +119 +120 +125 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +172 +173 +175 +175 +178 +179 +178 +182 +183 +185 +184 +188 +188 +189 +191 +190 +194 +195 +195 +197 +197 +198 +198 +199 +200 +200 +200 +200 +201 +203 +203 +204 +204 +204 +204 +205 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +205 +204 +205 +204 +204 +202 +202 +203 +200 +201 +200 +200 +198 +198 +199 +196 +197 +194 +195 +194 +191 +190 +190 +190 +190 +189 +188 +185 +185 +185 +183 +183 +178 +179 +175 +175 +175 +173 +172 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +130 +129 +129 +126 +125 +120 +119 +119 +115 +116 +110 +109 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +68 +68 +64 +64 +59 +58 +59 +54 +54 +50 +51 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +18 +15 +15 +15 +15 +16 +13 +13 +12 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +14 +13 +13 +13 +13 +14 +14 +14 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +46 +46 +51 +50 +51 +54 +54 +58 +58 +59 +64 +64 +68 +68 +69 +72 +72 +76 +76 +81 +82 +82 +86 +86 +90 +90 +90 +96 +96 +101 +100 +100 +106 +106 +110 +110 +109 +115 +116 +119 +120 +120 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +160 +161 +165 +165 +169 +169 +169 +173 +173 +175 +174 +179 +178 +179 +183 +183 +185 +184 +185 +188 +188 +191 +190 +191 +194 +194 +197 +196 +196 +198 +199 +200 +200 +201 +200 +200 +202 +202 +205 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +207 +204 +205 +205 +204 +202 +202 +202 +200 +200 +200 +200 +200 +199 +199 +198 +199 +198 +197 +197 +195 +194 +194 +190 +191 +188 +189 +189 +184 +184 +183 +183 +179 +178 +179 +174 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +145 +143 +143 +139 +139 +133 +133 +134 +129 +129 +125 +125 +126 +119 +119 +115 +115 +116 +110 +110 +106 +105 +106 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +77 +76 +72 +72 +72 +68 +68 +65 +64 +64 +58 +58 +55 +55 +55 +50 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +30 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +20 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +14 +14 +13 +13 +14 +14 +13 +13 +12 +15 +15 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +24 +27 +27 +27 +31 +31 +33 +33 +33 +36 +37 +41 +41 +41 +43 +43 +46 +47 +47 +51 +50 +54 +54 +55 +59 +58 +64 +65 +68 +68 +68 +72 +72 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +120 +119 +120 +126 +126 +129 +129 +129 +133 +134 +140 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +174 +175 +178 +178 +182 +183 +183 +185 +185 +188 +189 +188 +190 +190 +195 +195 +196 +197 +198 +198 +200 +200 +200 +201 +200 +202 +202 +202 +204 +204 +204 +204 +204 +207 +206 +207 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +207 +204 +204 +204 +204 +204 +202 +203 +202 +200 +200 +200 +200 +200 +200 +200 +198 +198 +199 +196 +197 +194 +194 +193 +190 +191 +189 +188 +184 +184 +185 +182 +182 +179 +179 +179 +175 +175 +173 +173 +173 +169 +168 +165 +165 +165 +161 +161 +157 +157 +152 +151 +151 +147 +147 +144 +143 +143 +139 +139 +134 +133 +133 +129 +129 +125 +125 +126 +120 +119 +116 +116 +116 +110 +110 +105 +106 +101 +99 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +83 +76 +76 +72 +72 +72 +68 +68 +64 +64 +65 +58 +59 +55 +54 +51 +50 +51 +46 +48 +42 +43 +43 +41 +41 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +28 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +13 +14 +14 +13 +13 +13 +14 +13 +14 +14 +13 +14 +13 +14 +13 +14 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +12 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +46 +47 +50 +51 +51 +54 +54 +58 +58 +59 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +101 +100 +100 +106 +106 +110 +110 +110 +115 +116 +119 +120 +119 +125 +125 +130 +129 +130 +133 +133 +139 +139 +139 +143 +143 +147 +147 +152 +151 +151 +157 +157 +162 +161 +161 +164 +165 +169 +169 +169 +173 +173 +175 +175 +175 +178 +179 +183 +182 +183 +185 +185 +188 +189 +191 +190 +191 +194 +194 +197 +196 +197 +198 +198 +198 +198 +198 +200 +201 +200 +200 +201 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +204 +204 +205 +205 +204 +202 +202 +201 +200 +201 +200 +201 +198 +198 +198 +196 +197 +194 +195 +195 +190 +190 +189 +189 +188 +184 +185 +183 +183 +183 +178 +179 +174 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +148 +143 +143 +139 +140 +139 +133 +133 +129 +129 +126 +125 +125 +119 +119 +116 +116 +115 +109 +109 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +72 +72 +72 +69 +68 +65 +64 +64 +59 +58 +54 +55 +55 +50 +51 +47 +46 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +32 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +14 +13 +13 +14 +13 +14 +14 +13 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +51 +55 +54 +54 +58 +58 +64 +64 +65 +68 +68 +72 +72 +72 +76 +76 +82 +82 +87 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +109 +110 +116 +116 +115 +119 +119 +125 +125 +125 +129 +129 +133 +133 +140 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +172 +172 +174 +175 +175 +179 +179 +182 +183 +182 +184 +185 +189 +188 +189 +190 +190 +191 +191 +190 +195 +194 +197 +196 +196 +199 +198 +200 +201 +200 +200 +200 +202 +202 +204 +204 +204 +205 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +205 +204 +205 +204 +205 +203 +202 +202 +200 +201 +200 +200 +200 +199 +198 +197 +196 +196 +194 +195 +191 +190 +191 +188 +189 +185 +185 +183 +182 +182 +179 +179 +175 +174 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +140 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +119 +119 +115 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +59 +59 +55 +54 +51 +50 +51 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +13 +13 +14 +14 +13 +14 +13 +13 +14 +14 +13 +13 +14 +13 +14 +13 +13 +14 +13 +14 +14 +13 +13 +14 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +28 +31 +31 +33 +33 +37 +37 +36 +41 +41 +43 +43 +43 +47 +47 +50 +50 +51 +54 +54 +59 +59 +59 +65 +64 +68 +68 +72 +72 +71 +76 +76 +82 +82 +83 +86 +86 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +116 +120 +119 +119 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +158 +161 +161 +165 +165 +168 +169 +169 +173 +173 +175 +174 +175 +179 +178 +183 +183 +182 +184 +185 +188 +188 +188 +191 +190 +195 +194 +195 +196 +197 +198 +199 +200 +200 +200 +200 +201 +202 +202 +202 +204 +204 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +207 +206 +204 +204 +205 +204 +204 +202 +203 +201 +200 +200 +200 +200 +198 +198 +199 +196 +197 +194 +195 +190 +190 +191 +189 +189 +185 +185 +185 +182 +183 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +152 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +125 +119 +120 +116 +115 +117 +110 +110 +106 +106 +101 +100 +100 +96 +96 +91 +90 +90 +86 +86 +81 +82 +82 +76 +76 +73 +72 +72 +68 +68 +64 +64 +65 +58 +58 +55 +54 +50 +50 +51 +47 +47 +43 +43 +43 +41 +41 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +14 +14 +14 +13 +13 +14 +14 +14 +14 +14 +13 +14 +14 +13 +14 +14 +13 +13 +14 +13 +13 +13 +14 +13 +13 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +40 +43 +43 +43 +47 +46 +51 +51 +55 +54 +54 +58 +58 +65 +64 +65 +69 +69 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +99 +106 +106 +106 +110 +110 +116 +116 +116 +119 +120 +125 +125 +125 +129 +129 +133 +134 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +158 +157 +157 +161 +161 +165 +165 +165 +169 +169 +169 +169 +169 +173 +173 +175 +175 +175 +175 +175 +179 +178 +180 +183 +183 +185 +184 +188 +188 +189 +191 +191 +194 +194 +194 +197 +196 +196 +196 +197 +198 +198 +200 +200 +200 +200 +201 +202 +202 +204 +205 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +207 +206 +204 +204 +205 +205 +204 +202 +202 +200 +200 +200 +200 +200 +198 +198 +198 +196 +197 +194 +194 +194 +190 +191 +188 +188 +188 +185 +185 +183 +183 +183 +179 +178 +175 +175 +173 +173 +174 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +140 +133 +133 +130 +129 +126 +126 +125 +119 +119 +116 +116 +115 +110 +109 +106 +106 +106 +100 +100 +96 +95 +96 +90 +90 +86 +86 +87 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +65 +64 +59 +59 +55 +55 +54 +51 +50 +46 +47 +47 +43 +43 +41 +41 +39 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +13 +13 +13 +14 +14 +13 +14 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +14 +14 +13 +15 +15 +15 +17 +17 +19 +19 +18 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +32 +37 +36 +41 +41 +41 +43 +43 +47 +47 +47 +51 +51 +55 +55 +54 +58 +58 +64 +65 +64 +68 +68 +72 +72 +73 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +105 +109 +110 +115 +115 +115 +119 +120 +125 +125 +125 +129 +129 +133 +133 +140 +139 +139 +143 +143 +147 +147 +147 +151 +151 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +172 +175 +175 +178 +178 +179 +183 +182 +184 +185 +184 +189 +188 +189 +189 +188 +190 +190 +195 +194 +195 +196 +197 +198 +198 +200 +200 +200 +200 +201 +202 +202 +202 +204 +204 +204 +205 +204 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +206 +206 +207 +204 +204 +205 +204 +204 +202 +202 +202 +201 +200 +200 +200 +200 +198 +198 +196 +197 +196 +194 +194 +190 +191 +191 +188 +189 +185 +184 +182 +182 +182 +179 +178 +175 +175 +174 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +152 +147 +147 +143 +143 +140 +139 +140 +133 +133 +130 +129 +129 +125 +125 +119 +119 +120 +115 +116 +110 +110 +110 +106 +106 +100 +100 +101 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +65 +64 +59 +58 +58 +55 +54 +51 +51 +49 +47 +47 +43 +43 +41 +41 +41 +37 +36 +33 +33 +33 +31 +31 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +20 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +13 +13 +14 +13 +14 +13 +14 +13 +14 +13 +14 +14 +13 +14 +13 +13 +14 +13 +14 +13 +13 +13 +14 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +36 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +50 +54 +54 +58 +59 +59 +64 +64 +68 +68 +73 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +100 +100 +106 +106 +107 +110 +110 +115 +116 +120 +119 +119 +125 +125 +129 +129 +129 +134 +133 +133 +133 +134 +139 +139 +143 +143 +143 +147 +147 +151 +151 +152 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +175 +175 +174 +179 +178 +182 +183 +182 +185 +185 +188 +189 +189 +191 +191 +194 +195 +196 +196 +196 +198 +199 +200 +200 +200 +200 +201 +202 +202 +203 +204 +205 +204 +204 +205 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +205 +204 +205 +205 +202 +202 +202 +200 +200 +200 +200 +201 +198 +199 +196 +196 +195 +194 +195 +191 +191 +188 +189 +189 +184 +185 +183 +183 +182 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +140 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +120 +120 +116 +116 +109 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +90 +90 +90 +86 +86 +82 +82 +82 +77 +76 +72 +72 +70 +68 +68 +64 +64 +59 +58 +58 +54 +54 +51 +50 +51 +47 +47 +47 +47 +47 +43 +43 +41 +41 +41 +37 +36 +33 +33 +32 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +14 +14 +13 +14 +13 +13 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +12 +15 +15 +16 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +46 +51 +51 +50 +55 +54 +58 +59 +59 +64 +65 +68 +69 +69 +72 +72 +76 +76 +76 +82 +82 +86 +86 +87 +90 +90 +96 +96 +99 +100 +100 +106 +106 +110 +110 +110 +116 +115 +115 +115 +116 +120 +120 +126 +125 +125 +129 +129 +133 +133 +135 +139 +139 +143 +143 +147 +147 +147 +151 +151 +158 +157 +157 +161 +161 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +174 +174 +176 +178 +179 +183 +183 +184 +185 +185 +188 +188 +190 +190 +190 +194 +194 +197 +197 +196 +199 +199 +200 +201 +201 +200 +200 +202 +202 +204 +204 +205 +204 +205 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +207 +207 +207 +206 +207 +205 +204 +205 +205 +204 +202 +202 +201 +201 +200 +201 +200 +198 +199 +198 +197 +196 +194 +194 +194 +190 +191 +189 +188 +188 +185 +185 +183 +182 +183 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +141 +133 +133 +130 +129 +126 +125 +126 +119 +119 +115 +115 +115 +109 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +87 +86 +82 +82 +76 +76 +72 +72 +73 +68 +68 +65 +64 +64 +58 +59 +55 +55 +55 +51 +51 +47 +47 +47 +43 +43 +41 +41 +39 +37 +36 +32 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +13 +13 +13 +14 +13 +14 +14 +14 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +40 +43 +43 +43 +47 +47 +51 +50 +50 +55 +55 +58 +59 +59 +64 +64 +68 +68 +68 +72 +73 +76 +76 +77 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +106 +106 +106 +110 +110 +116 +115 +116 +119 +119 +125 +125 +126 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +151 +151 +151 +157 +157 +161 +160 +161 +165 +165 +169 +169 +172 +173 +173 +175 +174 +178 +179 +179 +183 +182 +185 +185 +184 +189 +188 +191 +190 +191 +195 +194 +197 +196 +197 +199 +199 +200 +200 +200 +200 +200 +202 +202 +204 +204 +205 +205 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +205 +205 +204 +205 +204 +202 +202 +202 +202 +202 +200 +200 +201 +201 +201 +198 +198 +196 +196 +196 +194 +195 +191 +190 +190 +188 +188 +184 +184 +183 +183 +183 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +160 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +128 +125 +126 +126 +125 +125 +120 +119 +115 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +89 +90 +90 +86 +86 +82 +82 +82 +76 +76 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +58 +56 +55 +54 +51 +51 +46 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +14 +14 +14 +14 +14 +14 +14 +14 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +36 +37 +41 +41 +41 +43 +43 +46 +47 +46 +51 +50 +55 +55 +55 +58 +59 +64 +64 +68 +69 +68 +72 +72 +76 +77 +76 +82 +82 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +102 +106 +106 +110 +109 +116 +115 +116 +119 +119 +126 +125 +125 +129 +129 +130 +129 +129 +133 +133 +140 +140 +139 +143 +143 +147 +147 +150 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +182 +183 +185 +185 +189 +188 +190 +190 +190 +194 +195 +197 +197 +197 +198 +199 +200 +200 +200 +200 +200 +202 +203 +202 +205 +204 +204 +204 +205 +206 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +204 +204 +204 +204 +205 +202 +202 +202 +200 +200 +200 +200 +201 +199 +198 +196 +197 +195 +194 +195 +190 +190 +188 +189 +188 +184 +184 +182 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +160 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +123 +120 +120 +116 +115 +110 +110 +109 +106 +106 +100 +100 +100 +96 +96 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +77 +76 +73 +72 +72 +68 +68 +64 +64 +64 +58 +58 +55 +55 +54 +50 +50 +46 +47 +47 +43 +43 +41 +40 +41 +37 +37 +33 +34 +32 +30 +31 +27 +27 +25 +25 +25 +21 +20 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +14 +13 +13 +14 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +14 +13 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +36 +41 +41 +41 +43 +43 +46 +46 +50 +51 +50 +54 +55 +59 +58 +58 +65 +65 +68 +68 +68 +72 +72 +77 +76 +76 +82 +82 +86 +86 +87 +90 +90 +96 +96 +99 +100 +100 +106 +106 +110 +110 +110 +115 +116 +116 +115 +116 +120 +120 +125 +125 +125 +129 +129 +133 +133 +135 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +182 +182 +182 +185 +185 +188 +188 +188 +191 +190 +195 +194 +195 +196 +196 +199 +199 +198 +200 +200 +200 +201 +201 +202 +203 +204 +205 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +203 +200 +200 +201 +201 +200 +198 +199 +196 +196 +196 +194 +194 +190 +190 +191 +189 +189 +185 +185 +185 +183 +183 +178 +179 +179 +175 +175 +173 +173 +169 +169 +169 +165 +164 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +134 +133 +131 +129 +129 +125 +125 +119 +120 +119 +116 +115 +110 +110 +110 +105 +106 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +84 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +65 +59 +58 +54 +54 +54 +51 +51 +47 +47 +47 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +14 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +19 +19 +18 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +36 +37 +42 +40 +41 +42 +43 +46 +47 +47 +51 +50 +50 +50 +50 +55 +54 +58 +58 +59 +65 +64 +69 +69 +68 +72 +72 +76 +76 +83 +82 +82 +86 +86 +90 +90 +90 +96 +96 +96 +96 +96 +100 +99 +106 +105 +106 +110 +110 +116 +116 +118 +120 +120 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +178 +179 +183 +182 +182 +185 +185 +188 +189 +189 +190 +191 +195 +194 +194 +196 +196 +198 +198 +200 +201 +200 +200 +200 +202 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +205 +204 +205 +204 +204 +202 +202 +202 +200 +200 +200 +200 +200 +199 +199 +197 +196 +197 +194 +195 +191 +191 +191 +189 +189 +185 +185 +182 +183 +182 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +149 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +130 +129 +125 +126 +125 +125 +125 +120 +119 +115 +116 +116 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +69 +64 +64 +64 +59 +58 +54 +54 +50 +50 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +13 +13 +14 +14 +13 +13 +14 +13 +13 +13 +13 +14 +13 +14 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +13 +12 +15 +14 +17 +17 +16 +19 +19 +21 +21 +22 +25 +24 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +41 +41 +41 +43 +43 +47 +47 +47 +51 +51 +55 +54 +57 +59 +59 +64 +65 +69 +68 +68 +72 +72 +76 +76 +76 +82 +82 +82 +82 +82 +86 +86 +89 +90 +90 +96 +96 +100 +100 +105 +106 +106 +110 +110 +116 +115 +116 +120 +119 +125 +125 +125 +129 +129 +133 +134 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +156 +157 +157 +161 +161 +165 +165 +165 +169 +169 +169 +168 +169 +173 +173 +175 +175 +175 +179 +179 +183 +182 +183 +185 +185 +188 +189 +191 +190 +190 +194 +194 +196 +196 +197 +198 +198 +201 +200 +200 +200 +200 +202 +202 +202 +204 +205 +204 +204 +205 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +204 +204 +204 +204 +204 +203 +202 +200 +200 +201 +200 +201 +198 +199 +196 +196 +196 +194 +194 +190 +190 +191 +189 +189 +188 +188 +189 +185 +185 +182 +183 +183 +179 +179 +175 +175 +174 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +151 +151 +151 +147 +147 +143 +143 +143 +140 +139 +133 +133 +130 +129 +129 +125 +125 +119 +120 +120 +116 +116 +109 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +65 +64 +58 +58 +58 +54 +54 +51 +50 +50 +46 +46 +43 +43 +43 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +14 +14 +14 +14 +14 +14 +13 +14 +14 +13 +14 +14 +14 +13 +14 +13 +14 +14 +13 +13 +14 +13 +15 +15 +15 +17 +17 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +28 +31 +31 +33 +33 +36 +37 +37 +41 +41 +43 +43 +43 +47 +47 +47 +47 +46 +50 +51 +55 +55 +54 +58 +58 +64 +64 +66 +69 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +105 +106 +106 +110 +110 +116 +116 +119 +120 +119 +125 +125 +129 +129 +129 +133 +133 +140 +139 +140 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +174 +178 +178 +183 +182 +182 +184 +185 +188 +188 +189 +191 +191 +194 +194 +194 +196 +197 +199 +199 +200 +201 +201 +200 +200 +202 +202 +202 +204 +204 +205 +204 +205 +206 +206 +207 +206 +206 +207 +206 +206 +207 +207 +206 +206 +206 +206 +205 +205 +205 +204 +204 +202 +202 +202 +200 +200 +200 +200 +201 +200 +200 +198 +198 +198 +197 +197 +194 +194 +193 +191 +190 +188 +188 +184 +184 +185 +183 +182 +183 +183 +182 +179 +179 +179 +179 +178 +175 +175 +173 +173 +173 +168 +169 +165 +165 +162 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +130 +125 +126 +126 +119 +120 +116 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +67 +68 +64 +64 +59 +58 +58 +54 +54 +51 +51 +51 +46 +47 +43 +42 +42 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +22 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +14 +13 +15 +14 +14 +13 +14 +14 +13 +13 +13 +14 +13 +14 +13 +14 +14 +14 +13 +14 +13 +14 +14 +14 +14 +14 +13 +15 +15 +16 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +31 +31 +31 +33 +33 +37 +36 +37 +41 +40 +43 +43 +44 +47 +46 +50 +51 +54 +54 +54 +58 +59 +65 +65 +64 +68 +69 +72 +72 +72 +76 +76 +82 +82 +83 +86 +86 +89 +90 +95 +95 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +115 +119 +119 +125 +125 +125 +129 +129 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +172 +173 +175 +175 +179 +179 +179 +183 +183 +185 +184 +189 +188 +189 +191 +191 +194 +195 +194 +196 +196 +198 +199 +198 +200 +201 +201 +201 +201 +203 +202 +204 +205 +204 +205 +204 +206 +207 +206 +207 +206 +206 +207 +207 +206 +206 +206 +206 +207 +206 +206 +204 +205 +205 +204 +205 +202 +202 +200 +200 +201 +200 +201 +198 +199 +196 +196 +196 +194 +195 +191 +190 +191 +189 +188 +188 +188 +189 +184 +184 +183 +183 +183 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +126 +125 +125 +120 +120 +116 +115 +116 +109 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +72 +72 +72 +68 +69 +65 +64 +64 +59 +59 +54 +55 +55 +50 +50 +47 +47 +47 +43 +42 +41 +41 +40 +37 +37 +33 +33 +32 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +14 +13 +13 +13 +13 +13 +14 +14 +13 +14 +14 +13 +14 +14 +13 +14 +14 +14 +14 +13 +13 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +38 +37 +37 +41 +41 +43 +42 +43 +47 +46 +51 +51 +51 +55 +55 +58 +58 +58 +65 +64 +68 +68 +69 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +115 +120 +120 +119 +125 +125 +129 +130 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +168 +169 +169 +173 +173 +175 +175 +179 +178 +179 +182 +183 +184 +184 +185 +188 +189 +191 +191 +190 +194 +194 +196 +197 +197 +198 +198 +201 +201 +201 +200 +200 +203 +202 +204 +204 +204 +205 +205 +206 +207 +207 +206 +207 +206 +206 +206 +207 +207 +207 +206 +207 +206 +206 +205 +204 +205 +204 +204 +202 +203 +200 +201 +200 +201 +200 +198 +198 +198 +197 +196 +196 +196 +196 +194 +195 +190 +191 +191 +188 +189 +185 +184 +183 +183 +183 +178 +179 +175 +174 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +152 +151 +151 +148 +147 +143 +143 +140 +139 +139 +133 +133 +129 +129 +130 +126 +125 +120 +119 +120 +115 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +58 +59 +54 +54 +51 +50 +51 +47 +46 +43 +42 +41 +41 +41 +37 +37 +33 +33 +33 +30 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +13 +14 +13 +14 +14 +14 +14 +14 +13 +13 +13 +13 +14 +14 +14 +14 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +12 +15 +15 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +26 +27 +27 +31 +30 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +50 +50 +55 +54 +55 +58 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +105 +106 +106 +110 +110 +115 +116 +120 +120 +119 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +178 +179 +183 +183 +182 +185 +185 +189 +188 +189 +191 +191 +195 +195 +195 +196 +197 +198 +198 +200 +201 +200 +200 +200 +202 +202 +202 +204 +204 +204 +205 +204 +204 +204 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +207 +206 +205 +207 +206 +204 +204 +204 +204 +204 +203 +202 +202 +202 +203 +200 +200 +200 +200 +201 +198 +198 +196 +196 +195 +195 +195 +191 +190 +188 +188 +189 +184 +185 +183 +183 +183 +178 +179 +175 +175 +175 +175 +176 +173 +173 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +125 +120 +120 +115 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +65 +64 +58 +58 +58 +54 +54 +50 +51 +51 +47 +47 +43 +43 +43 +41 +40 +37 +37 +37 +33 +32 +31 +31 +31 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +13 +14 +14 +13 +13 +14 +13 +13 +13 +14 +14 +14 +13 +14 +14 +13 +13 +13 +13 +13 +14 +14 +13 +14 +13 +14 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +20 +25 +25 +25 +25 +26 +27 +27 +31 +31 +32 +33 +33 +37 +37 +37 +41 +40 +43 +43 +47 +47 +47 +51 +51 +54 +54 +54 +58 +58 +65 +64 +64 +68 +69 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +95 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +115 +119 +119 +125 +125 +125 +130 +130 +133 +134 +133 +139 +139 +143 +144 +148 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +185 +184 +188 +189 +188 +191 +190 +195 +194 +194 +196 +197 +196 +196 +196 +198 +198 +200 +200 +200 +200 +201 +202 +203 +203 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +206 +207 +204 +204 +204 +204 +203 +202 +202 +200 +200 +200 +200 +200 +198 +198 +198 +198 +199 +196 +197 +194 +194 +195 +191 +191 +189 +188 +189 +185 +185 +183 +183 +179 +179 +178 +174 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +134 +133 +133 +129 +129 +129 +129 +129 +126 +125 +120 +119 +120 +115 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +87 +86 +86 +81 +82 +76 +76 +76 +73 +72 +68 +68 +68 +64 +64 +58 +58 +58 +55 +54 +51 +50 +51 +47 +47 +43 +42 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +14 +13 +14 +14 +14 +14 +14 +14 +13 +14 +14 +14 +13 +13 +14 +14 +13 +14 +13 +14 +14 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +40 +41 +43 +43 +43 +47 +47 +50 +50 +50 +54 +55 +58 +59 +58 +64 +64 +69 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +115 +119 +119 +126 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +152 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +172 +173 +173 +175 +175 +178 +178 +178 +183 +182 +183 +183 +183 +185 +185 +189 +188 +188 +190 +191 +195 +194 +195 +196 +197 +198 +198 +200 +200 +200 +201 +201 +202 +202 +203 +205 +204 +205 +205 +205 +204 +205 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +207 +207 +204 +204 +204 +204 +204 +202 +202 +201 +201 +201 +200 +200 +199 +198 +199 +196 +197 +195 +194 +190 +191 +191 +188 +189 +185 +184 +185 +182 +182 +183 +183 +183 +179 +179 +175 +175 +175 +173 +172 +169 +169 +168 +164 +165 +161 +161 +157 +157 +157 +151 +151 +146 +147 +147 +143 +143 +139 +139 +139 +134 +133 +130 +129 +129 +125 +126 +120 +120 +120 +116 +116 +109 +110 +107 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +73 +72 +68 +68 +69 +64 +64 +58 +58 +54 +54 +54 +50 +51 +46 +46 +47 +43 +42 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +30 +29 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +14 +14 +13 +13 +14 +13 +14 +13 +13 +13 +14 +14 +13 +14 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +15 +15 +16 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +28 +27 +31 +31 +32 +33 +33 +37 +37 +40 +41 +41 +43 +43 +47 +46 +49 +51 +50 +54 +54 +59 +58 +58 +64 +64 +68 +69 +68 +72 +72 +76 +76 +76 +83 +82 +86 +86 +86 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +115 +119 +119 +119 +125 +125 +129 +129 +130 +133 +133 +139 +139 +140 +143 +143 +147 +147 +152 +151 +151 +157 +157 +161 +161 +161 +165 +165 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +182 +183 +184 +185 +189 +189 +189 +190 +191 +194 +194 +194 +197 +197 +196 +197 +196 +198 +198 +200 +200 +201 +200 +200 +202 +202 +203 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +204 +204 +205 +204 +205 +202 +202 +200 +200 +200 +200 +201 +199 +198 +198 +196 +196 +194 +195 +195 +190 +191 +188 +188 +188 +185 +184 +182 +183 +183 +179 +179 +175 +175 +173 +173 +172 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +134 +133 +129 +129 +126 +125 +125 +120 +119 +115 +115 +116 +110 +110 +106 +106 +106 +100 +99 +96 +96 +96 +90 +90 +86 +86 +87 +82 +82 +76 +76 +73 +72 +72 +68 +68 +64 +64 +64 +59 +58 +59 +59 +58 +54 +54 +50 +50 +50 +47 +47 +43 +43 +42 +41 +41 +36 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +14 +13 +14 +13 +14 +13 +13 +13 +14 +13 +14 +13 +14 +13 +13 +13 +14 +13 +14 +14 +14 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +32 +37 +37 +37 +41 +40 +43 +42 +43 +47 +47 +51 +51 +51 +54 +55 +58 +58 +58 +65 +64 +68 +68 +69 +72 +72 +76 +76 +83 +82 +82 +86 +86 +90 +90 +90 +96 +96 +96 +95 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +116 +119 +119 +125 +125 +129 +129 +130 +133 +133 +139 +139 +139 +143 +143 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +162 +165 +165 +169 +169 +173 +173 +172 +175 +175 +179 +179 +179 +182 +182 +183 +183 +183 +185 +184 +188 +188 +189 +190 +191 +195 +195 +196 +196 +196 +199 +198 +200 +200 +200 +200 +200 +202 +202 +203 +204 +204 +204 +205 +205 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +207 +206 +204 +204 +204 +204 +204 +204 +205 +204 +202 +202 +200 +200 +200 +200 +200 +198 +198 +199 +196 +196 +194 +195 +191 +190 +191 +189 +188 +184 +185 +184 +183 +183 +179 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +130 +125 +126 +125 +119 +120 +116 +116 +116 +109 +109 +106 +105 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +61 +58 +58 +54 +55 +50 +51 +50 +47 +47 +43 +43 +43 +41 +41 +41 +40 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +26 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +13 +13 +14 +14 +14 +14 +14 +14 +13 +13 +14 +14 +14 +13 +13 +13 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +34 +33 +37 +37 +41 +41 +40 +43 +43 +47 +46 +47 +51 +51 +54 +55 +59 +58 +58 +64 +65 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +110 +110 +109 +116 +116 +119 +119 +119 +125 +125 +126 +126 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +145 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +169 +169 +169 +173 +173 +175 +174 +175 +179 +179 +182 +183 +183 +185 +185 +189 +188 +190 +191 +191 +194 +194 +196 +196 +197 +199 +199 +200 +201 +201 +200 +200 +202 +203 +203 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +204 +204 +204 +205 +205 +202 +203 +201 +201 +200 +200 +200 +199 +199 +196 +196 +196 +194 +194 +191 +190 +190 +188 +189 +185 +185 +184 +183 +183 +179 +178 +179 +175 +174 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +150 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +119 +120 +120 +115 +116 +109 +110 +110 +106 +106 +106 +105 +106 +100 +99 +96 +96 +96 +90 +90 +87 +86 +84 +82 +82 +76 +76 +72 +72 +73 +68 +68 +64 +64 +64 +58 +58 +58 +58 +58 +54 +54 +50 +51 +51 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +13 +14 +14 +14 +13 +14 +13 +13 +14 +13 +13 +13 +13 +14 +13 +14 +13 +14 +14 +13 +14 +14 +14 +14 +13 +14 +13 +13 +15 +15 +15 +17 +18 +19 +19 +19 +21 +21 +24 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +41 +40 +41 +42 +43 +47 +47 +47 +50 +51 +54 +55 +54 +58 +58 +64 +64 +64 +68 +69 +72 +72 +73 +76 +76 +82 +82 +87 +86 +86 +90 +90 +96 +96 +96 +100 +100 +101 +100 +100 +106 +106 +110 +110 +110 +116 +116 +119 +119 +120 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +147 +147 +147 +151 +151 +157 +157 +158 +161 +161 +165 +165 +168 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +182 +183 +184 +185 +189 +188 +188 +190 +191 +195 +195 +195 +196 +197 +199 +198 +200 +200 +200 +200 +200 +202 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +204 +205 +204 +204 +204 +202 +202 +203 +201 +201 +200 +201 +200 +198 +199 +196 +196 +196 +194 +195 +191 +191 +190 +189 +189 +184 +185 +182 +183 +183 +178 +178 +175 +175 +174 +173 +173 +169 +169 +169 +165 +165 +161 +161 +160 +157 +157 +151 +151 +151 +147 +147 +143 +143 +140 +139 +139 +133 +133 +129 +129 +129 +125 +126 +120 +120 +119 +116 +116 +110 +110 +110 +106 +106 +100 +100 +98 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +72 +72 +72 +68 +68 +65 +64 +65 +58 +58 +54 +54 +52 +50 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +20 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +14 +13 +14 +14 +14 +13 +13 +13 +14 +13 +14 +14 +13 +14 +14 +14 +14 +13 +14 +13 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +24 +25 +27 +27 +31 +30 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +50 +51 +55 +54 +59 +58 +59 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +81 +86 +86 +90 +90 +89 +96 +96 +100 +100 +100 +106 +106 +110 +110 +112 +115 +115 +119 +120 +125 +126 +125 +129 +130 +133 +134 +133 +139 +139 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +160 +161 +161 +165 +164 +169 +169 +169 +173 +173 +175 +175 +175 +178 +178 +183 +182 +183 +185 +185 +188 +189 +189 +190 +191 +194 +195 +196 +196 +197 +198 +198 +200 +201 +200 +201 +201 +202 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +207 +207 +207 +207 +206 +206 +207 +206 +204 +204 +204 +204 +204 +202 +202 +202 +200 +200 +200 +201 +200 +200 +200 +199 +198 +199 +196 +196 +194 +195 +191 +191 +191 +188 +189 +184 +184 +184 +183 +183 +179 +179 +178 +174 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +139 +139 +139 +133 +133 +129 +129 +129 +125 +126 +120 +119 +120 +115 +116 +110 +109 +106 +106 +106 +100 +100 +96 +95 +96 +90 +90 +91 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +69 +68 +69 +65 +64 +58 +58 +59 +54 +55 +50 +51 +50 +46 +47 +42 +42 +43 +41 +40 +36 +37 +37 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +13 +14 +13 +14 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +14 +14 +13 +14 +14 +14 +13 +13 +13 +14 +13 +13 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +28 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +40 +43 +42 +44 +47 +47 +51 +50 +55 +54 +54 +59 +58 +64 +65 +65 +68 +68 +68 +69 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +87 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +109 +110 +116 +115 +116 +116 +115 +119 +120 +125 +125 +125 +130 +129 +133 +133 +135 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +182 +182 +182 +184 +185 +188 +189 +189 +190 +191 +195 +194 +194 +196 +196 +199 +198 +198 +201 +200 +201 +200 +201 +202 +202 +204 +205 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +205 +205 +204 +204 +204 +202 +202 +200 +200 +201 +200 +201 +198 +198 +196 +197 +196 +194 +194 +190 +191 +190 +188 +189 +185 +185 +184 +182 +183 +179 +179 +179 +175 +174 +173 +173 +168 +169 +169 +164 +165 +161 +161 +161 +157 +157 +157 +157 +157 +151 +151 +147 +147 +147 +143 +139 +139 +139 +137 +133 +133 +129 +129 +125 +125 +125 +119 +119 +115 +116 +116 +110 +110 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +87 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +59 +59 +58 +55 +54 +50 +50 +51 +46 +47 +43 +43 +42 +41 +41 +37 +37 +33 +32 +33 +30 +31 +27 +27 +26 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +14 +14 +14 +13 +13 +14 +14 +14 +13 +13 +15 +15 +15 +17 +18 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +41 +41 +41 +43 +43 +46 +47 +47 +50 +51 +54 +55 +55 +58 +59 +64 +64 +64 +69 +68 +72 +72 +74 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +100 +100 +100 +105 +106 +109 +109 +110 +115 +116 +120 +120 +124 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +173 +173 +172 +175 +175 +178 +179 +179 +183 +182 +185 +184 +184 +188 +189 +191 +190 +190 +194 +194 +196 +196 +196 +198 +199 +200 +200 +201 +200 +200 +203 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +205 +205 +205 +204 +204 +202 +202 +200 +200 +200 +200 +201 +199 +198 +199 +196 +196 +194 +194 +194 +190 +190 +189 +188 +189 +184 +185 +183 +182 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +148 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +125 +119 +119 +120 +119 +119 +116 +115 +110 +110 +110 +105 +106 +100 +100 +97 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +69 +64 +64 +59 +59 +59 +55 +54 +51 +50 +47 +46 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +14 +14 +14 +14 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +13 +14 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +42 +43 +43 +47 +46 +50 +50 +51 +54 +55 +58 +59 +59 +65 +64 +68 +68 +72 +73 +72 +76 +76 +82 +82 +82 +86 +86 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +107 +110 +110 +116 +115 +119 +120 +120 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +157 +157 +161 +161 +164 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +178 +183 +183 +185 +184 +185 +188 +188 +191 +190 +195 +195 +195 +196 +196 +199 +199 +198 +200 +200 +201 +201 +200 +202 +202 +204 +204 +204 +204 +204 +206 +207 +207 +206 +206 +206 +206 +207 +207 +206 +206 +207 +207 +206 +206 +204 +204 +204 +204 +204 +202 +202 +200 +200 +200 +201 +200 +199 +198 +200 +196 +197 +194 +194 +190 +191 +191 +189 +188 +184 +184 +185 +183 +182 +183 +182 +183 +178 +178 +175 +175 +175 +172 +173 +169 +169 +169 +164 +164 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +120 +120 +119 +116 +116 +110 +109 +110 +105 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +83 +77 +76 +72 +72 +69 +68 +68 +64 +64 +58 +59 +58 +55 +54 +51 +51 +51 +47 +46 +42 +43 +43 +41 +41 +37 +37 +37 +33 +32 +31 +31 +28 +27 +26 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +14 +13 +13 +13 +14 +14 +14 +13 +14 +14 +14 +14 +13 +13 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +34 +33 +37 +36 +37 +41 +41 +42 +43 +43 +47 +47 +50 +50 +55 +55 +54 +59 +58 +64 +64 +64 +68 +68 +68 +68 +69 +72 +72 +76 +76 +76 +82 +82 +87 +86 +88 +90 +90 +96 +96 +100 +100 +100 +106 +106 +106 +106 +106 +110 +110 +115 +115 +115 +119 +120 +125 +125 +126 +129 +130 +133 +133 +138 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +164 +169 +169 +173 +172 +173 +175 +175 +179 +179 +183 +183 +183 +185 +185 +189 +189 +189 +191 +191 +194 +195 +195 +196 +197 +198 +198 +198 +200 +201 +201 +200 +201 +202 +202 +204 +204 +204 +205 +204 +206 +206 +206 +207 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +205 +202 +202 +200 +200 +200 +200 +200 +199 +198 +196 +197 +196 +195 +194 +194 +194 +194 +191 +190 +188 +189 +188 +185 +185 +183 +182 +181 +179 +179 +175 +175 +173 +172 +173 +169 +169 +165 +165 +165 +160 +161 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +140 +139 +139 +133 +133 +129 +129 +129 +125 +125 +120 +119 +119 +115 +115 +110 +109 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +86 +86 +85 +82 +82 +76 +76 +76 +72 +73 +68 +68 +68 +64 +64 +59 +58 +58 +54 +54 +51 +50 +51 +47 +47 +43 +43 +42 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +14 +14 +13 +14 +13 +14 +13 +14 +14 +14 +14 +13 +14 +14 +14 +14 +13 +13 +13 +13 +16 +15 +15 +17 +17 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +28 +31 +31 +33 +33 +36 +37 +37 +41 +41 +43 +43 +43 +47 +47 +47 +46 +46 +50 +50 +54 +55 +54 +58 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +89 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +115 +120 +120 +120 +125 +125 +129 +129 +129 +133 +133 +139 +140 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +168 +169 +169 +173 +173 +175 +175 +175 +179 +178 +183 +182 +182 +184 +184 +189 +188 +188 +190 +191 +195 +194 +195 +196 +197 +198 +199 +201 +201 +201 +200 +200 +202 +202 +202 +204 +204 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +207 +205 +204 +204 +205 +204 +202 +202 +202 +200 +200 +201 +200 +200 +201 +200 +197 +198 +198 +196 +196 +195 +194 +195 +191 +191 +189 +188 +184 +184 +184 +182 +182 +179 +179 +179 +175 +174 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +130 +130 +125 +125 +120 +119 +120 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +95 +90 +90 +86 +86 +87 +82 +82 +76 +77 +77 +72 +72 +68 +69 +69 +64 +64 +58 +58 +54 +55 +55 +51 +51 +47 +47 +47 +42 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +20 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +14 +14 +14 +14 +13 +13 +14 +13 +14 +14 +13 +13 +14 +14 +14 +14 +13 +13 +14 +14 +14 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +33 +33 +33 +37 +37 +41 +41 +41 +43 +42 +46 +46 +50 +50 +50 +54 +54 +58 +59 +59 +64 +64 +68 +69 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +99 +100 +100 +106 +106 +110 +110 +110 +116 +115 +120 +119 +120 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +152 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +168 +173 +173 +175 +175 +175 +179 +179 +183 +183 +183 +184 +185 +188 +188 +191 +191 +191 +194 +194 +197 +197 +196 +199 +198 +200 +200 +200 +200 +200 +202 +202 +202 +205 +205 +204 +205 +205 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +205 +204 +204 +204 +202 +202 +203 +200 +200 +200 +200 +200 +198 +199 +196 +197 +194 +194 +194 +191 +190 +188 +189 +189 +185 +185 +185 +185 +184 +182 +183 +179 +179 +179 +175 +175 +173 +173 +171 +169 +169 +165 +165 +161 +161 +160 +157 +158 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +134 +130 +129 +125 +125 +120 +119 +119 +116 +115 +109 +110 +110 +105 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +59 +58 +55 +54 +50 +51 +51 +47 +47 +43 +43 +43 +41 +40 +37 +37 +37 +33 +33 +31 +31 +28 +27 +27 +25 +25 +22 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +13 +13 +14 +14 +13 +13 +14 +14 +14 +13 +13 +14 +14 +14 +13 +14 +13 +13 +14 +13 +13 +14 +14 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +38 +41 +40 +42 +43 +47 +46 +47 +50 +50 +54 +54 +55 +59 +59 +65 +65 +64 +68 +69 +72 +73 +73 +77 +76 +82 +82 +85 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +116 +120 +119 +125 +125 +126 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +174 +179 +179 +179 +183 +183 +184 +184 +185 +189 +188 +190 +190 +190 +194 +195 +196 +196 +196 +198 +198 +200 +200 +201 +200 +200 +202 +202 +205 +204 +204 +204 +204 +206 +206 +207 +207 +206 +206 +206 +206 +207 +206 +207 +207 +206 +207 +206 +206 +206 +205 +204 +204 +204 +204 +202 +203 +203 +201 +200 +200 +200 +201 +198 +198 +198 +198 +198 +197 +197 +195 +195 +195 +191 +191 +189 +189 +185 +184 +184 +183 +183 +178 +179 +179 +175 +174 +173 +173 +173 +169 +168 +165 +165 +165 +161 +161 +157 +157 +158 +151 +151 +147 +147 +146 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +125 +119 +120 +115 +115 +115 +110 +109 +106 +106 +106 +100 +100 +96 +96 +90 +90 +89 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +65 +59 +59 +55 +54 +55 +50 +51 +47 +46 +44 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +18 +20 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +13 +14 +14 +13 +14 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +13 +13 +13 +12 +15 +15 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +26 +27 +27 +31 +31 +33 +33 +34 +37 +37 +41 +41 +41 +43 +43 +46 +46 +47 +50 +50 +54 +55 +55 +58 +58 +65 +64 +68 +69 +69 +73 +73 +76 +76 +76 +82 +82 +86 +87 +86 +90 +89 +96 +96 +96 +100 +100 +106 +106 +106 +109 +110 +116 +116 +120 +119 +119 +126 +126 +129 +130 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +178 +183 +183 +182 +184 +185 +189 +188 +189 +190 +191 +195 +194 +195 +196 +197 +198 +198 +200 +200 +200 +200 +200 +202 +202 +202 +204 +204 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +207 +207 +204 +204 +205 +204 +204 +203 +202 +202 +202 +203 +201 +200 +200 +201 +200 +198 +199 +196 +196 +195 +194 +195 +190 +190 +188 +188 +188 +184 +185 +182 +183 +183 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +158 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +134 +134 +129 +129 +129 +125 +125 +120 +120 +119 +115 +115 +110 +109 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +73 +68 +68 +69 +65 +64 +58 +59 +55 +54 +54 +51 +51 +46 +47 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +30 +27 +27 +27 +25 +25 +21 +21 +20 +19 +19 +17 +17 +15 +15 +15 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +13 +14 +14 +13 +14 +13 +14 +14 +13 +13 +14 +13 +13 +13 +13 +14 +14 +13 +13 +14 +14 +14 +14 +13 +14 +13 +13 +15 +15 +16 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +42 +43 +43 +47 +47 +50 +50 +51 +55 +55 +58 +58 +58 +64 +65 +69 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +99 +100 +100 +106 +106 +109 +110 +110 +116 +116 +120 +119 +120 +125 +125 +129 +129 +130 +134 +133 +139 +139 +139 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +182 +183 +185 +185 +188 +189 +191 +191 +191 +195 +195 +196 +197 +197 +199 +199 +201 +200 +201 +200 +201 +202 +203 +203 +205 +205 +204 +205 +205 +207 +206 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +207 +206 +204 +204 +204 +204 +205 +202 +202 +200 +200 +201 +200 +201 +199 +198 +196 +196 +196 +195 +194 +191 +191 +190 +188 +189 +185 +184 +185 +183 +183 +178 +179 +179 +175 +175 +173 +174 +168 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +144 +143 +139 +139 +133 +133 +133 +130 +129 +125 +126 +120 +119 +119 +116 +116 +110 +109 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +69 +69 +68 +64 +64 +59 +59 +59 +55 +54 +51 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +19 +19 +20 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +13 +13 +14 +14 +14 +14 +14 +13 +14 +14 +13 +13 +14 +14 +14 +14 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +47 +47 +47 +50 +51 +55 +54 +55 +58 +59 +64 +65 +64 +68 +68 +72 +72 +73 +76 +76 +82 +82 +86 +86 +87 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +115 +115 +120 +119 +126 +126 +126 +130 +129 +133 +134 +140 +140 +140 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +182 +183 +183 +185 +184 +188 +189 +188 +190 +191 +191 +191 +191 +195 +194 +197 +196 +197 +198 +199 +200 +200 +200 +200 +201 +202 +202 +204 +204 +205 +204 +205 +207 +207 +207 +206 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +205 +204 +204 +204 +204 +202 +202 +202 +200 +200 +200 +200 +200 +198 +198 +196 +197 +197 +195 +195 +191 +190 +191 +189 +189 +184 +185 +183 +183 +183 +179 +179 +174 +175 +175 +173 +173 +168 +169 +169 +164 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +140 +139 +139 +133 +133 +129 +129 +129 +126 +126 +120 +119 +120 +115 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +77 +76 +73 +72 +68 +68 +68 +65 +64 +58 +58 +59 +54 +55 +50 +51 +51 +47 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +13 +14 +14 +14 +13 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +20 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +42 +46 +47 +47 +51 +51 +54 +54 +54 +58 +59 +65 +65 +69 +68 +69 +73 +73 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +95 +100 +100 +106 +106 +106 +110 +110 +115 +116 +120 +120 +120 +125 +125 +129 +129 +130 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +164 +169 +169 +169 +173 +173 +175 +174 +175 +179 +179 +182 +182 +183 +185 +185 +188 +188 +189 +190 +191 +194 +194 +195 +196 +197 +199 +198 +200 +200 +200 +201 +200 +202 +202 +202 +204 +204 +205 +205 +204 +204 +204 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +205 +204 +205 +205 +204 +203 +202 +201 +201 +200 +200 +200 +199 +199 +199 +196 +197 +194 +195 +190 +191 +191 +188 +188 +184 +184 +185 +182 +183 +179 +179 +179 +175 +176 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +148 +147 +143 +143 +143 +139 +139 +133 +133 +134 +129 +129 +125 +125 +125 +120 +120 +116 +116 +116 +110 +110 +106 +106 +100 +100 +100 +96 +95 +90 +90 +90 +86 +86 +86 +86 +86 +82 +82 +77 +76 +76 +72 +72 +69 +68 +69 +64 +64 +58 +58 +55 +55 +54 +50 +50 +47 +46 +47 +42 +43 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +30 +31 +32 +27 +27 +25 +25 +21 +21 +21 +19 +19 +19 +19 +19 +17 +17 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +14 +13 +14 +14 +13 +14 +13 +14 +13 +13 +14 +13 +13 +14 +14 +13 +13 +13 +13 +13 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +44 +47 +47 +51 +50 +54 +54 +54 +58 +58 +65 +64 +65 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +110 +110 +109 +116 +116 +120 +119 +120 +126 +126 +130 +130 +129 +133 +133 +139 +139 +144 +143 +143 +147 +147 +151 +151 +151 +157 +157 +157 +157 +157 +160 +161 +164 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +182 +183 +182 +185 +184 +189 +189 +188 +191 +191 +191 +191 +191 +195 +195 +197 +196 +197 +199 +198 +200 +201 +200 +201 +201 +203 +202 +204 +205 +204 +204 +205 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +204 +204 +204 +204 +205 +203 +202 +200 +200 +200 +201 +201 +198 +198 +198 +196 +196 +195 +194 +195 +190 +190 +188 +188 +188 +184 +185 +183 +183 +178 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +134 +134 +133 +129 +129 +126 +125 +125 +120 +120 +115 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +97 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +69 +69 +69 +68 +64 +64 +59 +58 +58 +54 +55 +51 +50 +51 +47 +46 +43 +43 +40 +41 +41 +37 +36 +33 +33 +33 +31 +31 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +14 +13 +14 +14 +13 +14 +13 +13 +13 +14 +13 +14 +13 +14 +14 +13 +13 +13 +14 +14 +13 +14 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +24 +27 +27 +31 +31 +31 +33 +33 +37 +37 +36 +40 +41 +43 +43 +43 +46 +47 +51 +51 +50 +54 +55 +58 +58 +59 +64 +64 +68 +68 +73 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +105 +110 +110 +110 +115 +116 +119 +120 +125 +125 +125 +129 +129 +133 +133 +134 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +162 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +182 +182 +183 +183 +183 +185 +185 +189 +189 +189 +191 +190 +194 +195 +195 +197 +197 +198 +199 +200 +201 +200 +200 +200 +202 +202 +203 +204 +204 +204 +204 +204 +206 +207 +206 +206 +206 +207 +206 +206 +207 +207 +206 +206 +206 +206 +204 +204 +204 +205 +204 +203 +202 +203 +200 +200 +201 +201 +200 +198 +198 +197 +196 +196 +195 +195 +190 +190 +188 +189 +188 +185 +184 +182 +183 +183 +179 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +119 +119 +115 +116 +110 +110 +108 +105 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +65 +64 +61 +59 +58 +55 +55 +50 +51 +50 +47 +47 +43 +43 +43 +41 +41 +40 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +20 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +14 +14 +13 +14 +14 +14 +14 +14 +13 +13 +13 +14 +14 +14 +14 +13 +14 +13 +15 +15 +15 +18 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +40 +41 +41 +43 +43 +47 +47 +47 +50 +50 +54 +55 +59 +58 +58 +64 +65 +68 +68 +68 +72 +72 +76 +76 +76 +82 +81 +86 +86 +86 +90 +90 +96 +96 +97 +100 +100 +106 +106 +109 +110 +110 +116 +115 +119 +119 +120 +126 +125 +129 +129 +130 +133 +133 +139 +139 +139 +143 +143 +147 +147 +149 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +173 +173 +173 +175 +175 +179 +179 +179 +183 +182 +185 +184 +186 +188 +189 +191 +191 +194 +194 +195 +196 +196 +198 +198 +199 +201 +201 +200 +200 +201 +203 +202 +204 +204 +205 +204 +205 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +205 +204 +205 +205 +204 +203 +202 +200 +200 +200 +200 +201 +198 +199 +197 +196 +196 +195 +194 +190 +191 +190 +189 +188 +185 +184 +184 +182 +182 +179 +179 +179 +175 +175 +172 +173 +173 +169 +169 +165 +165 +160 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +140 +138 +133 +133 +133 +129 +128 +125 +125 +126 +119 +119 +116 +115 +110 +109 +110 +106 +106 +100 +99 +100 +96 +95 +96 +95 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +64 +64 +64 +58 +58 +54 +54 +54 +51 +50 +51 +51 +51 +47 +46 +43 +43 +43 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +14 +14 +14 +14 +14 +13 +14 +13 +14 +14 +13 +14 +14 +13 +13 +13 +14 +14 +14 +13 +14 +14 +13 +13 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +43 +43 +43 +46 +47 +51 +51 +51 +55 +54 +58 +58 +58 +64 +64 +68 +69 +68 +72 +72 +76 +76 +77 +82 +82 +86 +86 +89 +90 +90 +96 +96 +100 +100 +100 +106 +105 +106 +105 +106 +110 +110 +115 +116 +115 +120 +120 +125 +126 +127 +129 +129 +134 +133 +140 +139 +139 +143 +143 +147 +147 +147 +151 +151 +150 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +172 +173 +173 +175 +175 +178 +178 +179 +183 +183 +184 +185 +185 +188 +188 +191 +191 +191 +195 +195 +196 +197 +197 +198 +199 +200 +200 +200 +201 +201 +203 +203 +204 +204 +204 +205 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +207 +206 +206 +204 +204 +205 +204 +205 +202 +202 +201 +200 +200 +200 +200 +201 +200 +200 +199 +198 +197 +196 +196 +194 +194 +191 +191 +190 +188 +189 +184 +184 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +152 +147 +147 +143 +143 +139 +139 +139 +133 +133 +130 +129 +129 +125 +125 +126 +125 +125 +120 +119 +116 +116 +115 +110 +109 +106 +106 +106 +100 +100 +96 +96 +91 +90 +90 +86 +86 +82 +82 +82 +76 +76 +77 +76 +77 +72 +72 +68 +68 +68 +64 +65 +59 +59 +56 +54 +54 +50 +51 +47 +47 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +20 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +13 +14 +13 +13 +14 +14 +13 +13 +14 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +14 +14 +14 +14 +13 +15 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +27 +27 +27 +31 +30 +33 +33 +33 +37 +38 +40 +41 +41 +43 +43 +47 +47 +47 +50 +50 +55 +55 +55 +58 +59 +64 +64 +68 +68 +68 +72 +73 +76 +76 +76 +82 +82 +82 +82 +82 +86 +86 +90 +91 +90 +96 +96 +100 +100 +102 +106 +106 +110 +110 +115 +116 +116 +119 +119 +125 +125 +125 +129 +129 +129 +129 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +149 +151 +151 +157 +157 +160 +161 +161 +165 +165 +168 +169 +169 +173 +173 +175 +175 +174 +178 +179 +182 +183 +183 +185 +185 +189 +189 +190 +191 +190 +195 +194 +196 +196 +196 +198 +199 +201 +200 +200 +200 +200 +202 +202 +202 +204 +205 +204 +204 +204 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +207 +204 +204 +205 +204 +204 +202 +202 +200 +200 +200 +200 +201 +198 +198 +197 +197 +197 +195 +195 +191 +191 +191 +188 +188 +185 +184 +184 +183 +183 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +147 +147 +147 +143 +143 +140 +139 +139 +134 +134 +129 +129 +127 +125 +125 +119 +119 +116 +116 +115 +109 +109 +106 +106 +106 +100 +100 +100 +100 +100 +95 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +73 +72 +68 +68 +69 +65 +64 +59 +59 +59 +55 +54 +50 +50 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +33 +33 +33 +30 +31 +27 +27 +28 +25 +25 +21 +21 +21 +19 +19 +17 +16 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +14 +14 +13 +13 +13 +13 +14 +14 +14 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +43 +42 +43 +46 +47 +51 +51 +51 +55 +54 +54 +54 +55 +58 +59 +64 +64 +64 +68 +69 +72 +72 +73 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +95 +100 +100 +100 +100 +100 +106 +106 +109 +109 +110 +115 +115 +120 +119 +122 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +172 +173 +173 +175 +175 +179 +178 +179 +182 +183 +185 +184 +184 +189 +188 +191 +191 +191 +194 +195 +196 +196 +196 +198 +198 +200 +201 +200 +200 +200 +202 +203 +204 +204 +204 +204 +204 +206 +207 +206 +206 +207 +207 +207 +206 +207 +206 +206 +206 +206 +206 +207 +205 +204 +205 +204 +204 +202 +202 +202 +203 +202 +200 +200 +200 +201 +200 +199 +198 +196 +197 +196 +195 +194 +190 +190 +191 +188 +188 +185 +185 +182 +182 +183 +179 +179 +175 +175 +175 +173 +173 +173 +173 +173 +169 +168 +165 +165 +165 +161 +161 +157 +157 +158 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +129 +129 +129 +125 +125 +119 +119 +120 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +73 +72 +68 +68 +69 +64 +64 +58 +58 +54 +55 +55 +51 +51 +47 +47 +47 +43 +43 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +14 +14 +13 +13 +13 +14 +14 +13 +14 +14 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +28 +27 +27 +31 +31 +33 +33 +33 +37 +37 +37 +37 +37 +41 +41 +43 +43 +43 +47 +46 +50 +50 +52 +54 +55 +58 +58 +64 +64 +65 +68 +69 +72 +72 +72 +76 +77 +76 +76 +76 +82 +82 +86 +87 +86 +90 +90 +96 +96 +99 +100 +100 +106 +106 +109 +110 +110 +116 +115 +120 +120 +120 +125 +125 +129 +129 +129 +133 +133 +139 +140 +139 +144 +143 +147 +147 +149 +151 +151 +157 +157 +161 +161 +161 +165 +165 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +179 +182 +183 +184 +185 +189 +189 +189 +191 +190 +194 +195 +195 +196 +196 +198 +198 +198 +200 +200 +201 +200 +200 +202 +203 +205 +205 +204 +204 +204 +206 +206 +207 +206 +206 +207 +207 +206 +206 +207 +207 +206 +206 +207 +206 +204 +204 +204 +204 +204 +202 +202 +200 +200 +201 +200 +201 +198 +199 +196 +197 +197 +195 +195 +190 +191 +190 +188 +189 +189 +188 +189 +184 +185 +183 +182 +183 +178 +179 +175 +175 +175 +173 +173 +169 +169 +164 +165 +165 +161 +161 +157 +157 +157 +151 +151 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +130 +129 +129 +125 +125 +119 +120 +119 +116 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +72 +72 +69 +68 +68 +65 +64 +59 +58 +58 +54 +54 +50 +50 +51 +47 +46 +43 +43 +43 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +14 +13 +13 +14 +14 +14 +13 +14 +13 +14 +14 +13 +14 +13 +13 +14 +13 +13 +14 +13 +14 +14 +14 +14 +13 +13 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +40 +41 +41 +43 +43 +47 +47 +47 +51 +50 +50 +51 +51 +54 +55 +59 +59 +58 +64 +65 +68 +68 +70 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +110 +110 +116 +115 +119 +119 +124 +126 +125 +129 +129 +133 +134 +133 +140 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +179 +182 +183 +184 +184 +185 +188 +189 +191 +191 +190 +195 +194 +196 +196 +197 +199 +198 +200 +201 +201 +200 +201 +202 +202 +204 +204 +204 +204 +204 +204 +204 +204 +206 +206 +206 +206 +207 +206 +206 +207 +206 +207 +206 +206 +207 +206 +204 +204 +204 +204 +204 +202 +202 +203 +200 +200 +201 +201 +200 +201 +200 +198 +198 +199 +196 +196 +195 +194 +192 +190 +190 +188 +188 +184 +185 +185 +183 +182 +179 +179 +178 +175 +175 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +159 +157 +157 +151 +151 +147 +147 +147 +143 +143 +140 +139 +139 +133 +133 +129 +129 +130 +125 +125 +120 +120 +120 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +59 +55 +54 +55 +50 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +30 +27 +27 +27 +25 +25 +21 +21 +20 +20 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +14 +14 +13 +14 +13 +13 +14 +14 +14 +13 +13 +14 +14 +13 +13 +13 +13 +14 +13 +14 +13 +13 +12 +15 +15 +17 +17 +18 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +33 +33 +33 +37 +37 +41 +40 +41 +43 +42 +47 +47 +48 +50 +50 +55 +55 +58 +58 +58 +64 +64 +68 +68 +68 +72 +73 +76 +76 +77 +82 +82 +86 +86 +86 +90 +90 +96 +96 +99 +100 +100 +106 +106 +109 +110 +110 +115 +115 +120 +119 +119 +125 +126 +129 +130 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +168 +173 +173 +175 +175 +175 +179 +179 +182 +183 +182 +184 +185 +188 +188 +190 +191 +190 +195 +194 +196 +196 +197 +198 +198 +200 +200 +200 +200 +200 +202 +203 +202 +204 +205 +205 +204 +205 +206 +207 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +207 +205 +204 +204 +205 +204 +202 +202 +200 +200 +200 +201 +200 +199 +198 +197 +197 +196 +194 +194 +190 +190 +190 +188 +188 +188 +188 +188 +184 +185 +183 +182 +183 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +140 +133 +134 +129 +129 +127 +125 +126 +120 +120 +116 +116 +116 +110 +110 +106 +105 +105 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +73 +72 +72 +68 +68 +64 +65 +64 +58 +59 +54 +55 +55 +51 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +14 +13 +13 +13 +14 +14 +13 +13 +13 +13 +14 +13 +14 +13 +13 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +21 +21 +21 +26 +25 +27 +27 +27 +31 +31 +33 +33 +35 +37 +37 +41 +41 +43 +43 +43 +46 +47 +51 +50 +50 +54 +55 +59 +58 +59 +64 +65 +68 +68 +69 +72 +72 +76 +76 +82 +82 +83 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +116 +120 +119 +120 +126 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +161 +161 +165 +165 +165 +169 +169 +173 +173 +175 +175 +175 +179 +179 +182 +182 +183 +184 +185 +189 +188 +189 +191 +191 +195 +194 +195 +197 +197 +199 +199 +199 +200 +200 +201 +200 +202 +202 +203 +204 +204 +204 +205 +205 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +204 +204 +204 +204 +205 +202 +203 +200 +200 +200 +200 +200 +200 +201 +201 +198 +199 +196 +196 +197 +194 +194 +190 +190 +190 +188 +189 +185 +184 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +150 +147 +147 +143 +143 +139 +139 +140 +133 +133 +129 +129 +130 +125 +126 +119 +119 +119 +115 +116 +110 +110 +109 +105 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +69 +68 +65 +64 +58 +59 +58 +55 +54 +51 +50 +48 +47 +47 +42 +42 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +24 +21 +21 +21 +19 +20 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +14 +14 +14 +14 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +14 +13 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +46 +50 +50 +54 +54 +58 +58 +58 +64 +64 +68 +68 +69 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +110 +110 +110 +115 +116 +120 +119 +120 +125 +125 +130 +129 +130 +133 +133 +139 +139 +139 +143 +143 +147 +147 +148 +151 +151 +157 +157 +162 +161 +161 +165 +165 +168 +169 +169 +173 +173 +175 +175 +175 +178 +179 +183 +183 +183 +184 +185 +188 +189 +189 +191 +191 +194 +194 +197 +196 +196 +198 +198 +200 +200 +200 +200 +200 +201 +200 +200 +202 +202 +204 +205 +204 +204 +204 +206 +207 +207 +207 +207 +206 +207 +206 +206 +206 +207 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +201 +201 +201 +201 +200 +198 +199 +197 +196 +197 +194 +194 +190 +190 +191 +188 +189 +184 +184 +185 +183 +183 +179 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +130 +129 +125 +125 +126 +120 +120 +116 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +59 +58 +59 +55 +54 +51 +50 +50 +47 +47 +43 +43 +43 +41 +41 +36 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +16 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +14 +14 +14 +13 +14 +13 +13 +14 +14 +14 +14 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +13 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +36 +37 +37 +41 +40 +43 +43 +46 +47 +47 +50 +51 +55 +55 +54 +59 +59 +64 +64 +64 +69 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +116 +120 +120 +125 +125 +125 +129 +129 +133 +133 +134 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +172 +172 +173 +175 +175 +179 +179 +179 +183 +183 +184 +185 +188 +188 +188 +190 +191 +195 +194 +194 +197 +197 +197 +196 +196 +198 +198 +200 +201 +201 +200 +200 +202 +202 +203 +205 +205 +204 +204 +206 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +204 +204 +204 +204 +203 +203 +203 +200 +201 +200 +200 +200 +198 +199 +197 +196 +197 +195 +195 +191 +191 +191 +188 +189 +184 +185 +185 +183 +183 +179 +179 +175 +175 +174 +173 +173 +168 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +134 +133 +130 +129 +129 +125 +126 +120 +120 +119 +115 +115 +109 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +89 +86 +86 +83 +82 +77 +76 +76 +72 +72 +68 +68 +68 +64 +65 +58 +58 +58 +54 +54 +50 +51 +50 +47 +46 +43 +43 +43 +41 +41 +37 +37 +33 +33 +32 +31 +31 +27 +27 +27 +25 +25 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +13 +13 +13 +14 +13 +13 +14 +14 +13 +13 +14 +13 +13 +14 +13 +14 +13 +14 +14 +14 +14 +14 +14 +14 +13 +14 +13 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +50 +51 +54 +54 +58 +58 +58 +64 +64 +68 +68 +72 +72 +73 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +109 +110 +116 +115 +119 +120 +126 +126 +126 +130 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +162 +165 +165 +169 +169 +172 +173 +173 +175 +175 +178 +178 +179 +182 +183 +183 +183 +182 +185 +185 +189 +188 +189 +191 +190 +194 +194 +195 +197 +197 +198 +198 +200 +200 +200 +200 +200 +203 +202 +202 +204 +204 +205 +204 +204 +205 +204 +206 +206 +207 +206 +207 +206 +207 +206 +206 +207 +207 +206 +206 +207 +206 +204 +205 +204 +205 +204 +202 +202 +200 +200 +201 +200 +200 +198 +199 +198 +197 +197 +194 +194 +190 +191 +191 +188 +188 +184 +185 +185 +183 +182 +178 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +125 +119 +119 +116 +116 +116 +110 +110 +106 +106 +100 +100 +100 +96 +97 +90 +90 +90 +86 +86 +82 +82 +82 +76 +77 +73 +72 +72 +69 +68 +65 +64 +65 +59 +58 +54 +54 +50 +50 +51 +47 +46 +43 +42 +43 +41 +41 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +26 +25 +24 +21 +21 +19 +19 +19 +17 +17 +15 +14 +15 +15 +15 +15 +15 +15 +13 +13 +12 +12 +13 +13 +14 +13 +13 +14 +13 +13 +14 +14 +13 +13 +14 +14 +13 +14 +13 +13 +13 +14 +13 +13 +14 +13 +13 +14 +13 +12 +15 +15 +18 +17 +18 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +32 +37 +37 +37 +41 +40 +43 +42 +43 +47 +46 +51 +51 +52 +54 +54 +58 +58 +65 +64 +64 +68 +69 +72 +73 +72 +76 +76 +82 +82 +82 +87 +86 +90 +90 +91 +96 +96 +99 +100 +100 +100 +100 +106 +106 +110 +110 +110 +116 +116 +119 +120 +120 +126 +125 +129 +129 +129 +133 +134 +139 +139 +140 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +166 +165 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +180 +183 +183 +185 +184 +188 +189 +188 +190 +190 +194 +194 +195 +196 +197 +196 +197 +196 +199 +198 +200 +200 +201 +201 +200 +202 +202 +203 +205 +205 +205 +204 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +207 +206 +207 +206 +207 +205 +204 +205 +204 +204 +202 +202 +200 +200 +201 +200 +201 +198 +198 +198 +197 +196 +195 +195 +194 +190 +190 +189 +189 +189 +184 +185 +183 +183 +183 +179 +178 +175 +175 +173 +172 +173 +168 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +140 +139 +133 +133 +129 +130 +126 +125 +125 +119 +119 +116 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +72 +72 +73 +68 +68 +64 +65 +64 +59 +59 +54 +54 +54 +50 +51 +46 +46 +47 +43 +43 +41 +41 +39 +37 +36 +33 +33 +31 +31 +31 +27 +27 +25 +24 +25 +21 +21 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +12 +12 +13 +13 +13 +13 +13 +14 +14 +14 +14 +13 +13 +14 +14 +13 +14 +13 +14 +13 +14 +13 +13 +13 +14 +14 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +30 +31 +33 +33 +37 +37 +41 +41 +41 +42 +43 +46 +46 +47 +50 +50 +54 +54 +54 +59 +58 +64 +64 +64 +69 +68 +72 +72 +72 +76 +76 +82 +81 +86 +86 +86 +90 +90 +96 +96 +96 +100 +99 +106 +106 +106 +109 +110 +116 +116 +115 +119 +119 +125 +125 +125 +129 +129 +133 +133 +140 +139 +139 +143 +143 +147 +147 +147 +151 +151 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +168 +169 +169 +173 +173 +175 +175 +178 +179 +179 +182 +182 +185 +185 +184 +188 +188 +189 +189 +189 +190 +190 +195 +195 +195 +197 +197 +199 +198 +199 +201 +201 +200 +200 +202 +202 +203 +204 +205 +204 +204 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +207 +206 +207 +204 +204 +204 +204 +204 +202 +202 +202 +200 +200 +201 +200 +200 +198 +198 +197 +196 +197 +195 +195 +190 +190 +190 +190 +189 +185 +184 +183 +183 +183 +178 +178 +175 +175 +175 +172 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +144 +139 +139 +139 +133 +133 +129 +129 +130 +126 +126 +120 +119 +120 +116 +116 +110 +109 +110 +105 +105 +100 +100 +98 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +72 +72 +68 +68 +68 +64 +64 +58 +58 +59 +54 +54 +50 +51 +49 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +13 +14 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +15 +13 +14 +13 +14 +13 +14 +13 +13 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +50 +55 +54 +58 +59 +59 +65 +64 +68 +68 +73 +72 +72 +76 +76 +82 +82 +82 +85 +86 +90 +90 +90 +96 +96 +100 +99 +100 +106 +107 +110 +110 +110 +116 +116 +120 +119 +126 +125 +125 +130 +129 +133 +133 +133 +139 +140 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +158 +161 +161 +165 +165 +168 +169 +169 +173 +173 +175 +174 +175 +179 +178 +179 +179 +179 +182 +182 +184 +184 +185 +188 +189 +190 +190 +193 +194 +195 +196 +197 +199 +198 +198 +200 +200 +200 +201 +200 +203 +202 +204 +204 +204 +205 +204 +207 +206 +206 +207 +207 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +204 +204 +204 +204 +204 +203 +202 +201 +200 +200 +200 +201 +198 +198 +198 +197 +197 +195 +195 +194 +194 +195 +191 +190 +189 +188 +188 +185 +185 +183 +182 +182 +178 +179 +175 +175 +175 +173 +173 +169 +168 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +130 +129 +129 +125 +125 +119 +119 +120 +116 +116 +109 +109 +106 +106 +106 +100 +100 +96 +95 +96 +89 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +66 +64 +64 +58 +58 +54 +54 +54 +50 +51 +47 +47 +47 +43 +43 +43 +42 +43 +41 +41 +36 +37 +37 +33 +33 +31 +31 +29 +27 +27 +25 +25 +21 +21 +20 +19 +19 +17 +17 +18 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +14 +13 +14 +13 +13 +13 +14 +14 +13 +14 +14 +14 +14 +13 +14 +14 +14 +13 +14 +14 +14 +13 +14 +13 +12 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +44 +43 +43 +47 +47 +50 +50 +55 +54 +55 +58 +59 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +91 +96 +96 +100 +100 +105 +106 +106 +110 +110 +116 +115 +116 +120 +120 +119 +119 +120 +125 +125 +130 +129 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +165 +165 +165 +168 +169 +173 +173 +173 +175 +175 +179 +178 +182 +183 +183 +184 +184 +188 +188 +188 +190 +191 +194 +194 +194 +197 +197 +198 +198 +198 +200 +200 +200 +200 +201 +202 +202 +204 +204 +205 +204 +205 +207 +206 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +205 +204 +202 +203 +200 +200 +200 +201 +200 +198 +198 +197 +196 +197 +194 +195 +190 +190 +190 +189 +189 +185 +185 +184 +183 +183 +179 +179 +178 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +148 +143 +143 +143 +139 +139 +133 +133 +134 +129 +129 +125 +125 +119 +120 +119 +116 +115 +110 +110 +110 +106 +106 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +84 +82 +82 +76 +76 +72 +73 +72 +69 +68 +64 +64 +64 +59 +58 +58 +58 +59 +55 +54 +50 +50 +51 +47 +46 +43 +43 +42 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +20 +21 +21 +20 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +13 +14 +13 +13 +13 +14 +14 +14 +14 +14 +14 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +14 +14 +13 +13 +14 +13 +13 +15 +15 +15 +17 +17 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +46 +47 +51 +51 +51 +54 +54 +58 +58 +59 +64 +64 +68 +68 +68 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +95 +96 +96 +96 +100 +99 +106 +106 +106 +110 +110 +115 +115 +117 +119 +120 +125 +125 +129 +130 +130 +133 +133 +139 +139 +139 +143 +143 +143 +143 +143 +147 +147 +151 +151 +152 +157 +157 +161 +161 +165 +165 +165 +169 +168 +172 +173 +173 +175 +175 +179 +179 +179 +182 +182 +185 +184 +185 +189 +188 +190 +190 +191 +195 +195 +197 +196 +197 +197 +196 +198 +198 +200 +200 +200 +200 +200 +202 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +204 +204 +205 +204 +204 +203 +202 +203 +200 +200 +201 +201 +200 +199 +199 +197 +196 +197 +195 +194 +190 +190 +189 +188 +189 +185 +185 +182 +183 +182 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +164 +165 +161 +161 +161 +157 +157 +151 +151 +148 +147 +147 +143 +143 +139 +140 +140 +133 +134 +129 +129 +129 +125 +126 +120 +119 +120 +116 +116 +110 +109 +111 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +65 +65 +59 +59 +58 +55 +54 +50 +51 +50 +46 +47 +43 +43 +42 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +26 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +14 +13 +14 +14 +13 +14 +14 +14 +13 +13 +13 +14 +13 +14 +14 +13 +12 +15 +15 +17 +17 +18 +19 +19 +21 +21 +26 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +42 +43 +47 +47 +50 +50 +51 +55 +55 +59 +59 +64 +65 +64 +68 +69 +72 +73 +72 +77 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +101 +106 +106 +110 +110 +110 +110 +110 +116 +115 +119 +120 +120 +125 +125 +126 +126 +125 +129 +129 +133 +133 +134 +139 +139 +143 +143 +145 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +182 +183 +184 +185 +188 +188 +189 +190 +191 +195 +195 +195 +196 +196 +198 +198 +198 +201 +201 +201 +200 +201 +202 +203 +204 +204 +205 +205 +204 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +204 +204 +204 +204 +204 +203 +203 +200 +200 +201 +200 +201 +199 +198 +197 +196 +196 +194 +194 +190 +191 +191 +188 +188 +185 +184 +185 +182 +183 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +147 +147 +147 +143 +143 +140 +139 +139 +134 +133 +130 +129 +127 +126 +126 +120 +119 +116 +116 +116 +109 +110 +106 +106 +106 +100 +100 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +58 +58 +54 +54 +50 +50 +51 +47 +46 +42 +43 +43 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +14 +15 +15 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +14 +13 +13 +14 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +42 +43 +48 +47 +46 +51 +50 +54 +54 +54 +58 +58 +65 +64 +64 +68 +69 +72 +72 +72 +76 +76 +82 +82 +84 +86 +86 +90 +90 +96 +96 +96 +99 +100 +106 +106 +106 +110 +110 +110 +110 +110 +115 +116 +119 +120 +120 +125 +125 +129 +129 +131 +133 +134 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +174 +175 +178 +179 +179 +183 +183 +184 +185 +185 +188 +189 +191 +190 +191 +195 +195 +196 +197 +196 +198 +199 +200 +200 +201 +201 +200 +202 +202 +205 +204 +204 +204 +204 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +206 +207 +207 +204 +205 +204 +205 +204 +203 +203 +201 +200 +200 +201 +200 +198 +199 +198 +197 +197 +195 +194 +195 +190 +191 +189 +188 +189 +185 +185 +183 +183 +183 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +161 +161 +161 +157 +157 +151 +150 +151 +147 +147 +143 +144 +141 +139 +139 +134 +133 +129 +130 +129 +125 +125 +120 +120 +120 +115 +115 +115 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +91 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +69 +64 +65 +64 +58 +58 +54 +55 +55 +51 +51 +47 +46 +43 +43 +42 +41 +41 +37 +36 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +14 +13 +14 +14 +14 +14 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +14 +14 +14 +13 +14 +13 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +32 +36 +37 +37 +41 +41 +43 +43 +43 +47 +47 +47 +47 +47 +50 +50 +54 +55 +55 +58 +59 +65 +64 +66 +69 +68 +72 +72 +76 +76 +76 +82 +82 +82 +82 +82 +86 +86 +86 +86 +86 +90 +90 +95 +96 +96 +100 +100 +106 +106 +107 +110 +110 +116 +116 +119 +120 +120 +125 +125 +129 +129 +129 +133 +134 +140 +139 +139 +143 +143 +147 +147 +148 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +182 +182 +185 +184 +188 +189 +188 +190 +191 +194 +194 +197 +196 +196 +198 +198 +200 +200 +200 +201 +201 +203 +202 +202 +204 +204 +204 +204 +204 +206 +207 +206 +207 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +205 +204 +204 +204 +204 +203 +202 +202 +200 +200 +201 +201 +200 +198 +198 +196 +196 +197 +194 +194 +191 +191 +188 +189 +189 +185 +184 +183 +183 +182 +179 +178 +178 +178 +178 +174 +175 +173 +173 +173 +169 +169 +165 +165 +163 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +120 +118 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +72 +72 +68 +68 +64 +65 +65 +59 +58 +55 +54 +54 +50 +50 +46 +46 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +28 +25 +25 +22 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +12 +13 +12 +13 +14 +14 +14 +13 +13 +14 +13 +14 +14 +13 +14 +13 +13 +14 +13 +13 +14 +14 +14 +14 +13 +13 +13 +14 +14 +13 +13 +15 +15 +15 +18 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +44 +47 +47 +50 +51 +54 +54 +55 +59 +59 +65 +65 +64 +68 +68 +68 +68 +68 +72 +72 +76 +77 +77 +82 +82 +86 +86 +89 +90 +90 +96 +96 +100 +100 +99 +105 +106 +110 +110 +110 +115 +116 +119 +120 +120 +125 +126 +129 +129 +130 +133 +133 +139 +139 +142 +143 +143 +147 +148 +148 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +178 +179 +183 +182 +185 +185 +185 +189 +189 +191 +191 +191 +195 +194 +196 +196 +196 +199 +199 +200 +201 +200 +200 +201 +203 +202 +203 +205 +205 +204 +204 +207 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +204 +204 +204 +205 +204 +202 +202 +203 +200 +200 +200 +201 +198 +198 +198 +197 +196 +194 +195 +195 +190 +190 +191 +191 +191 +189 +188 +184 +184 +185 +182 +183 +179 +179 +177 +175 +175 +172 +173 +168 +169 +169 +165 +165 +161 +161 +161 +157 +157 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +137 +133 +133 +129 +129 +126 +125 +125 +119 +119 +116 +116 +116 +110 +109 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +83 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +58 +58 +54 +55 +55 +51 +50 +47 +46 +47 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +14 +14 +13 +13 +14 +13 +14 +13 +14 +14 +14 +13 +13 +15 +15 +15 +15 +15 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +42 +43 +43 +47 +47 +50 +51 +51 +54 +54 +58 +58 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +116 +116 +116 +120 +120 +125 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +144 +147 +147 +151 +151 +152 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +182 +184 +185 +184 +189 +189 +191 +191 +190 +194 +195 +196 +197 +199 +198 +198 +201 +201 +200 +201 +200 +202 +202 +205 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +207 +207 +207 +207 +206 +206 +204 +204 +204 +204 +204 +202 +202 +203 +200 +200 +200 +200 +200 +198 +198 +197 +196 +197 +194 +194 +191 +191 +191 +189 +189 +185 +185 +182 +183 +183 +179 +179 +175 +174 +174 +172 +173 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +152 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +126 +125 +125 +119 +119 +115 +115 +116 +110 +110 +106 +106 +101 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +73 +72 +73 +68 +68 +64 +65 +65 +59 +59 +55 +55 +51 +50 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +30 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +14 +14 +13 +14 +14 +14 +13 +13 +14 +13 +13 +14 +14 +14 +13 +13 +14 +13 +13 +13 +13 +15 +15 +17 +17 +18 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +33 +33 +33 +37 +37 +40 +41 +41 +43 +42 +47 +47 +50 +51 +50 +54 +54 +58 +58 +59 +65 +65 +68 +68 +68 +72 +73 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +116 +119 +119 +120 +125 +125 +129 +129 +129 +133 +133 +140 +139 +139 +143 +143 +146 +147 +152 +151 +151 +157 +157 +161 +161 +161 +165 +164 +169 +169 +169 +173 +173 +175 +175 +174 +179 +178 +183 +183 +183 +185 +185 +189 +189 +191 +191 +190 +194 +194 +196 +196 +197 +198 +199 +200 +200 +200 +200 +200 +202 +202 +202 +204 +204 +204 +204 +205 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +206 +206 +205 +204 +204 +204 +204 +202 +202 +200 +201 +200 +200 +201 +198 +198 +196 +196 +196 +195 +194 +191 +190 +190 +188 +189 +188 +188 +189 +185 +184 +183 +183 +183 +179 +179 +175 +174 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +140 +133 +133 +129 +129 +126 +125 +125 +119 +120 +115 +116 +116 +109 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +73 +72 +72 +68 +68 +64 +64 +64 +58 +58 +55 +55 +55 +50 +50 +46 +46 +46 +43 +43 +41 +41 +41 +36 +37 +33 +33 +32 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +14 +14 +14 +14 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +13 +13 +14 +14 +14 +14 +14 +13 +14 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +51 +54 +54 +58 +58 +58 +64 +64 +68 +69 +69 +72 +72 +76 +76 +81 +82 +83 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +110 +110 +116 +116 +119 +119 +119 +125 +125 +129 +129 +134 +134 +133 +139 +140 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +162 +161 +161 +165 +165 +169 +169 +169 +173 +173 +174 +175 +179 +179 +179 +183 +182 +185 +184 +185 +188 +188 +190 +191 +191 +194 +195 +197 +196 +196 +198 +199 +200 +201 +201 +201 +200 +202 +203 +205 +205 +205 +205 +204 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +205 +205 +202 +203 +200 +201 +200 +201 +200 +199 +198 +198 +197 +196 +197 +196 +196 +194 +195 +190 +191 +191 +188 +189 +185 +185 +184 +183 +183 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +152 +147 +147 +143 +143 +140 +139 +139 +134 +133 +129 +129 +130 +125 +125 +120 +120 +119 +116 +115 +110 +110 +110 +105 +106 +99 +100 +100 +96 +96 +90 +90 +86 +86 +86 +82 +82 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +65 +64 +58 +58 +54 +55 +55 +51 +51 +47 +46 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +20 +17 +17 +15 +15 +16 +15 +15 +13 +13 +12 +12 +14 +13 +13 +14 +13 +13 +14 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +14 +14 +13 +13 +15 +15 +15 +16 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +46 +47 +47 +51 +51 +55 +55 +54 +59 +58 +65 +65 +68 +68 +69 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +99 +106 +106 +106 +110 +110 +116 +115 +120 +119 +119 +125 +125 +129 +129 +129 +133 +134 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +182 +184 +185 +189 +189 +188 +191 +190 +195 +195 +195 +196 +197 +198 +198 +200 +200 +201 +201 +201 +202 +202 +202 +204 +204 +205 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +207 +207 +206 +206 +206 +204 +204 +205 +205 +204 +202 +202 +203 +202 +203 +200 +200 +200 +201 +201 +199 +199 +197 +197 +195 +194 +194 +190 +190 +188 +188 +189 +185 +185 +183 +183 +183 +179 +179 +175 +175 +174 +173 +173 +168 +169 +169 +165 +165 +161 +161 +158 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +130 +129 +130 +125 +125 +120 +119 +119 +115 +115 +109 +110 +106 +106 +106 +99 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +73 +72 +68 +68 +68 +64 +64 +58 +59 +55 +55 +55 +51 +51 +46 +46 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +20 +19 +19 +17 +17 +15 +15 +15 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +13 +14 +14 +14 +13 +13 +14 +13 +13 +13 +14 +13 +13 +14 +14 +14 +14 +13 +13 +14 +14 +13 +13 +13 +14 +13 +12 +15 +15 +16 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +40 +41 +42 +42 +43 +47 +46 +50 +51 +51 +55 +55 +58 +59 +58 +65 +65 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +97 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +116 +116 +119 +119 +125 +125 +125 +129 +130 +133 +133 +134 +139 +139 +143 +143 +148 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +182 +185 +184 +188 +188 +188 +190 +191 +195 +194 +194 +196 +197 +197 +197 +197 +199 +199 +201 +200 +200 +200 +200 +203 +202 +203 +204 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +207 +206 +206 +206 +206 +206 +204 +204 +204 +204 +203 +202 +203 +201 +201 +200 +200 +200 +199 +199 +196 +196 +197 +194 +195 +191 +190 +190 +189 +189 +185 +185 +185 +183 +183 +179 +178 +176 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +152 +151 +151 +147 +148 +144 +143 +143 +139 +139 +133 +133 +129 +129 +129 +126 +125 +119 +120 +119 +115 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +85 +86 +82 +82 +80 +76 +76 +72 +72 +69 +68 +68 +64 +64 +58 +58 +58 +55 +55 +51 +50 +50 +46 +47 +43 +42 +43 +41 +40 +37 +36 +33 +33 +33 +32 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +12 +14 +14 +13 +13 +14 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +14 +14 +14 +14 +13 +14 +13 +13 +14 +13 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +36 +37 +37 +41 +41 +41 +41 +40 +43 +43 +42 +43 +43 +47 +47 +50 +51 +51 +55 +54 +59 +58 +58 +64 +64 +68 +68 +72 +72 +73 +76 +76 +82 +82 +82 +86 +86 +86 +86 +86 +90 +90 +96 +95 +96 +100 +100 +106 +106 +106 +110 +110 +116 +115 +120 +120 +119 +126 +126 +129 +130 +129 +133 +134 +140 +139 +140 +144 +143 +147 +147 +147 +151 +151 +157 +157 +158 +161 +161 +165 +165 +168 +169 +169 +173 +173 +175 +175 +175 +179 +179 +179 +179 +179 +183 +182 +185 +185 +185 +189 +189 +191 +191 +192 +195 +194 +197 +197 +198 +199 +199 +200 +201 +200 +201 +201 +202 +202 +202 +202 +202 +204 +204 +204 +205 +205 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +207 +206 +206 +204 +204 +204 +204 +204 +203 +202 +202 +201 +200 +200 +200 +201 +198 +199 +196 +197 +194 +195 +194 +191 +190 +188 +188 +189 +184 +185 +183 +183 +183 +179 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +130 +129 +126 +125 +120 +120 +120 +115 +115 +110 +109 +106 +106 +105 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +73 +72 +68 +68 +69 +65 +64 +58 +58 +55 +54 +54 +51 +50 +47 +47 +47 +43 +43 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +29 +27 +26 +24 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +15 +15 +14 +13 +13 +12 +13 +14 +13 +14 +13 +14 +14 +14 +14 +13 +13 +13 +14 +13 +14 +14 +14 +14 +13 +13 +14 +13 +14 +13 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +32 +33 +37 +36 +41 +41 +40 +43 +43 +46 +47 +51 +50 +51 +55 +55 +58 +59 +59 +64 +65 +68 +68 +69 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +89 +96 +96 +100 +100 +100 +106 +106 +109 +110 +110 +115 +115 +119 +120 +119 +125 +125 +129 +130 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +152 +151 +151 +157 +157 +161 +161 +161 +165 +165 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +180 +182 +183 +185 +185 +188 +188 +188 +190 +190 +195 +195 +194 +196 +196 +196 +196 +196 +198 +198 +200 +200 +200 +200 +201 +202 +202 +203 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +205 +204 +204 +202 +202 +201 +201 +201 +200 +200 +198 +198 +199 +196 +196 +195 +194 +194 +191 +190 +188 +189 +188 +185 +185 +183 +183 +182 +179 +179 +175 +175 +172 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +140 +139 +140 +133 +133 +130 +129 +126 +126 +126 +120 +120 +115 +115 +115 +109 +110 +106 +105 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +87 +82 +82 +77 +76 +72 +72 +72 +68 +68 +64 +64 +64 +58 +58 +54 +55 +55 +51 +51 +47 +47 +46 +43 +43 +41 +41 +39 +37 +36 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +13 +14 +14 +13 +13 +13 +13 +13 +14 +14 +13 +13 +14 +13 +14 +13 +14 +13 +13 +13 +13 +13 +14 +14 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +51 +55 +55 +54 +58 +58 +64 +64 +64 +69 +69 +72 +73 +73 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +116 +119 +120 +125 +125 +126 +129 +130 +133 +133 +139 +139 +140 +143 +144 +147 +147 +147 +151 +151 +151 +151 +151 +157 +157 +162 +161 +161 +165 +165 +169 +169 +171 +173 +173 +175 +175 +179 +178 +179 +183 +183 +184 +185 +184 +189 +188 +189 +188 +189 +190 +190 +194 +195 +195 +197 +197 +198 +198 +200 +200 +201 +200 +201 +202 +202 +202 +204 +204 +204 +204 +204 +206 +206 +207 +206 +206 +206 +207 +206 +206 +207 +207 +206 +206 +207 +204 +204 +204 +204 +204 +203 +202 +203 +200 +200 +201 +201 +201 +199 +198 +197 +197 +197 +195 +194 +190 +191 +190 +189 +188 +185 +184 +183 +183 +182 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +160 +157 +157 +151 +151 +151 +147 +147 +143 +143 +140 +139 +139 +133 +133 +130 +130 +130 +126 +126 +120 +120 +119 +115 +115 +109 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +72 +72 +72 +69 +69 +64 +64 +64 +58 +58 +54 +55 +55 +50 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +20 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +14 +14 +13 +13 +14 +13 +13 +14 +13 +13 +14 +13 +14 +14 +13 +13 +13 +14 +14 +13 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +18 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +43 +43 +47 +47 +46 +51 +51 +55 +54 +55 +58 +58 +64 +64 +69 +69 +68 +72 +72 +76 +76 +76 +82 +83 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +119 +119 +120 +126 +125 +129 +129 +129 +133 +133 +133 +133 +133 +140 +139 +143 +143 +143 +147 +147 +151 +151 +153 +156 +157 +161 +161 +165 +165 +165 +169 +169 +169 +169 +169 +173 +173 +173 +174 +173 +174 +175 +179 +179 +179 +182 +183 +184 +184 +188 +189 +189 +190 +190 +194 +195 +194 +196 +197 +198 +198 +198 +200 +201 +200 +200 +200 +202 +203 +205 +204 +205 +204 +204 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +204 +204 +204 +204 +204 +202 +202 +200 +201 +200 +200 +201 +198 +198 +197 +197 +196 +194 +195 +190 +191 +191 +188 +188 +188 +188 +189 +184 +185 +183 +183 +183 +178 +179 +174 +175 +175 +173 +173 +169 +169 +166 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +134 +133 +130 +129 +130 +125 +125 +119 +119 +115 +115 +116 +109 +110 +106 +106 +106 +100 +100 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +79 +76 +76 +72 +72 +68 +69 +69 +64 +64 +58 +59 +59 +55 +54 +50 +51 +51 +47 +47 +43 +43 +43 +41 +40 +37 +37 +34 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +14 +14 +14 +14 +14 +14 +13 +14 +14 +14 +13 +14 +14 +13 +14 +14 +13 +13 +14 +14 +13 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +36 +37 +41 +40 +43 +43 +47 +47 +47 +50 +51 +54 +55 +55 +59 +59 +64 +65 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +83 +86 +86 +90 +90 +95 +96 +96 +100 +100 +106 +105 +106 +110 +110 +110 +109 +110 +116 +116 +120 +119 +119 +126 +125 +130 +130 +131 +134 +133 +140 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +182 +184 +185 +189 +188 +188 +190 +190 +195 +195 +194 +196 +196 +198 +198 +199 +201 +200 +200 +201 +202 +202 +203 +205 +204 +204 +204 +204 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +205 +204 +205 +205 +202 +202 +202 +200 +201 +200 +201 +201 +198 +198 +196 +196 +196 +194 +195 +191 +191 +190 +189 +189 +185 +185 +185 +183 +183 +179 +178 +175 +175 +174 +172 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +144 +139 +139 +133 +134 +130 +129 +129 +125 +125 +126 +125 +125 +119 +120 +119 +119 +119 +115 +115 +110 +110 +110 +110 +109 +106 +106 +103 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +76 +76 +76 +72 +73 +68 +68 +68 +64 +64 +58 +58 +55 +55 +54 +51 +50 +47 +47 +47 +42 +43 +41 +40 +41 +37 +37 +33 +33 +33 +31 +30 +27 +27 +27 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +16 +15 +15 +13 +13 +12 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +13 +14 +14 +13 +14 +14 +13 +13 +13 +14 +14 +14 +13 +14 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +42 +47 +46 +51 +51 +52 +55 +54 +58 +58 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +98 +100 +100 +106 +106 +109 +110 +110 +115 +116 +119 +120 +119 +125 +125 +125 +125 +126 +129 +129 +133 +133 +134 +140 +139 +143 +143 +147 +148 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +172 +175 +175 +179 +179 +179 +183 +183 +184 +184 +188 +188 +189 +190 +191 +195 +195 +194 +196 +197 +199 +198 +198 +200 +200 +200 +200 +200 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +207 +204 +204 +204 +204 +204 +203 +202 +200 +200 +200 +201 +201 +199 +198 +197 +196 +196 +195 +194 +190 +191 +190 +188 +189 +185 +184 +185 +183 +182 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +147 +147 +147 +143 +143 +139 +139 +140 +133 +134 +129 +129 +130 +126 +125 +119 +119 +116 +116 +116 +110 +110 +106 +106 +106 +100 +100 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +83 +76 +76 +72 +73 +69 +68 +68 +64 +64 +58 +59 +59 +54 +55 +50 +50 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +34 +33 +33 +31 +31 +27 +27 +27 +25 +25 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +14 +14 +13 +14 +14 +13 +13 +13 +13 +14 +14 +14 +13 +13 +14 +14 +13 +14 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +34 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +51 +50 +55 +55 +54 +55 +54 +58 +58 +64 +65 +64 +68 +68 +72 +72 +73 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +100 +100 +100 +106 +106 +110 +109 +110 +116 +116 +120 +120 +122 +125 +126 +129 +129 +133 +133 +133 +139 +140 +144 +144 +144 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +172 +173 +172 +175 +175 +179 +179 +179 +183 +183 +185 +185 +185 +188 +189 +191 +190 +190 +194 +195 +196 +196 +196 +199 +198 +201 +200 +201 +200 +201 +202 +203 +204 +204 +204 +204 +204 +207 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +205 +205 +205 +205 +204 +203 +202 +201 +200 +200 +200 +201 +198 +198 +198 +196 +197 +195 +195 +194 +195 +195 +191 +191 +191 +189 +189 +185 +185 +182 +183 +183 +179 +179 +175 +175 +175 +173 +173 +172 +173 +173 +169 +169 +165 +165 +165 +161 +161 +156 +157 +158 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +134 +129 +129 +129 +129 +129 +125 +125 +120 +120 +119 +115 +115 +109 +110 +108 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +69 +64 +65 +59 +58 +57 +54 +54 +51 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +14 +13 +14 +13 +14 +13 +14 +13 +13 +13 +14 +14 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +26 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +37 +37 +37 +41 +40 +43 +43 +43 +47 +47 +50 +50 +52 +55 +55 +59 +58 +64 +64 +64 +68 +68 +72 +72 +73 +76 +76 +76 +77 +77 +82 +82 +86 +86 +86 +90 +90 +96 +96 +99 +100 +100 +106 +106 +110 +109 +110 +116 +115 +119 +120 +119 +126 +125 +129 +129 +129 +134 +133 +139 +139 +140 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +168 +169 +173 +173 +175 +175 +175 +178 +178 +183 +183 +183 +184 +184 +188 +188 +190 +191 +191 +195 +194 +196 +196 +196 +198 +198 +201 +200 +201 +200 +200 +202 +203 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +207 +206 +205 +204 +205 +204 +204 +202 +202 +202 +200 +201 +200 +200 +201 +198 +199 +197 +197 +195 +195 +194 +190 +191 +188 +189 +189 +185 +185 +185 +185 +185 +183 +183 +179 +179 +179 +175 +175 +173 +173 +171 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +147 +147 +147 +143 +143 +139 +139 +140 +133 +133 +129 +129 +128 +125 +125 +119 +119 +116 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +87 +82 +82 +76 +76 +73 +72 +73 +69 +68 +64 +64 +64 +58 +58 +55 +54 +55 +50 +50 +46 +46 +47 +43 +43 +41 +41 +41 +37 +37 +33 +32 +31 +31 +30 +27 +27 +25 +25 +25 +21 +21 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +14 +14 +14 +14 +13 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +13 +14 +13 +14 +13 +14 +14 +13 +13 +13 +16 +15 +15 +17 +17 +19 +19 +19 +21 +21 +22 +21 +21 +25 +25 +27 +27 +27 +31 +30 +33 +33 +35 +37 +37 +41 +41 +43 +43 +42 +47 +47 +51 +50 +51 +54 +55 +55 +55 +55 +58 +58 +65 +64 +65 +68 +68 +72 +72 +74 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +105 +106 +110 +109 +115 +116 +116 +120 +119 +126 +125 +129 +129 +129 +133 +134 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +164 +169 +169 +173 +173 +174 +175 +175 +179 +179 +182 +183 +183 +185 +184 +189 +189 +188 +190 +191 +194 +194 +194 +196 +196 +198 +199 +199 +201 +200 +200 +201 +203 +202 +202 +204 +204 +204 +204 +204 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +204 +204 +204 +204 +205 +202 +203 +200 +200 +201 +201 +201 +201 +200 +200 +198 +198 +197 +196 +197 +194 +194 +191 +190 +189 +189 +189 +184 +185 +182 +183 +183 +179 +179 +175 +175 +175 +173 +173 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +152 +151 +152 +147 +147 +143 +143 +143 +140 +139 +133 +133 +133 +129 +129 +125 +125 +125 +119 +120 +115 +115 +116 +110 +109 +106 +106 +101 +100 +100 +96 +96 +91 +90 +90 +86 +86 +83 +82 +82 +76 +76 +72 +72 +72 +68 +68 +65 +64 +64 +59 +58 +54 +54 +51 +51 +51 +46 +43 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +14 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +14 +14 +13 +14 +13 +13 +14 +13 +13 +14 +14 +14 +13 +13 +14 +13 +14 +14 +13 +13 +13 +14 +13 +12 +15 +15 +17 +17 +18 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +49 +50 +50 +54 +55 +58 +58 +58 +64 +64 +68 +69 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +99 +100 +100 +106 +106 +110 +110 +110 +116 +115 +119 +119 +119 +125 +126 +129 +130 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +174 +175 +175 +179 +178 +183 +183 +183 +185 +185 +189 +189 +191 +191 +190 +195 +195 +196 +197 +196 +199 +198 +201 +200 +200 +200 +200 +202 +202 +202 +204 +204 +204 +205 +204 +206 +206 +206 +207 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +204 +204 +204 +204 +204 +203 +202 +202 +200 +200 +201 +200 +199 +198 +199 +197 +196 +194 +194 +194 +190 +191 +189 +188 +188 +185 +184 +185 +185 +185 +182 +183 +178 +178 +178 +175 +175 +173 +173 +170 +169 +169 +165 +166 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +134 +129 +129 +125 +125 +120 +120 +119 +115 +116 +109 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +69 +68 +68 +64 +64 +58 +58 +58 +55 +54 +50 +50 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +16 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +13 +14 +14 +14 +14 +13 +14 +13 +14 +13 +13 +14 +14 +13 +13 +13 +13 +14 +14 +14 +14 +13 +13 +13 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +22 +25 +25 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +40 +41 +40 +43 +42 +47 +47 +47 +51 +51 +54 +54 +55 +58 +59 +65 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +85 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +116 +116 +119 +119 +125 +125 +125 +129 +129 +134 +134 +139 +139 +139 +143 +143 +147 +147 +147 +150 +151 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +179 +179 +179 +182 +182 +185 +184 +185 +188 +188 +190 +191 +190 +194 +195 +196 +196 +197 +198 +198 +200 +200 +201 +200 +200 +202 +203 +204 +204 +204 +205 +204 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +205 +204 +205 +204 +204 +202 +203 +202 +200 +200 +200 +201 +201 +198 +198 +199 +198 +198 +196 +197 +194 +194 +194 +191 +191 +188 +189 +187 +185 +185 +183 +182 +178 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +158 +157 +151 +151 +147 +147 +144 +143 +143 +139 +139 +132 +133 +134 +129 +129 +126 +126 +125 +120 +119 +115 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +77 +76 +72 +72 +72 +68 +68 +64 +65 +64 +58 +58 +54 +54 +55 +50 +51 +47 +46 +44 +43 +43 +40 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +26 +25 +25 +25 +21 +21 +19 +19 +20 +17 +17 +15 +15 +15 +16 +15 +13 +13 +12 +13 +13 +13 +14 +14 +14 +14 +14 +14 +14 +14 +13 +13 +14 +14 +14 +14 +14 +14 +13 +14 +13 +13 +13 +13 +13 +14 +13 +12 +15 +15 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +32 +37 +37 +41 +41 +41 +42 +43 +47 +46 +47 +50 +50 +54 +54 +55 +58 +58 +65 +65 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +105 +106 +106 +110 +109 +116 +116 +119 +120 +120 +125 +126 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +164 +169 +169 +169 +173 +173 +175 +174 +175 +179 +178 +183 +183 +183 +184 +185 +189 +188 +189 +191 +191 +194 +195 +195 +197 +197 +198 +198 +201 +201 +201 +200 +200 +202 +202 +202 +204 +204 +204 +205 +204 +205 +204 +206 +206 +206 +206 +207 +207 +206 +207 +206 +206 +206 +206 +207 +206 +207 +205 +204 +204 +204 +204 +202 +203 +203 +202 +203 +200 +201 +200 +200 +201 +199 +199 +196 +196 +196 +195 +195 +190 +191 +188 +189 +188 +184 +184 +183 +183 +183 +179 +179 +175 +175 +174 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +130 +129 +125 +125 +120 +120 +119 +115 +116 +110 +110 +106 +106 +106 +100 +99 +96 +96 +96 +90 +90 +86 +87 +86 +83 +83 +76 +76 +76 +72 +72 +68 +68 +68 +65 +64 +59 +58 +55 +54 +54 +50 +51 +47 +47 +47 +43 +42 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +20 +19 +19 +17 +17 +15 +16 +15 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +14 +14 +13 +14 +13 +13 +14 +13 +12 +15 +15 +16 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +42 +42 +46 +47 +50 +51 +51 +55 +55 +58 +59 +59 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +85 +86 +86 +90 +90 +95 +96 +100 +100 +100 +105 +106 +110 +109 +109 +115 +115 +120 +119 +120 +125 +125 +129 +130 +129 +133 +134 +139 +139 +140 +143 +143 +147 +147 +152 +151 +151 +157 +161 +161 +161 +165 +164 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +182 +182 +183 +185 +185 +188 +188 +190 +191 +190 +194 +194 +197 +197 +197 +199 +198 +198 +199 +198 +200 +200 +200 +200 +200 +202 +202 +204 +204 +205 +205 +205 +206 +207 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +207 +204 +205 +205 +204 +204 +203 +202 +203 +200 +201 +200 +200 +198 +198 +198 +196 +196 +194 +195 +195 +190 +191 +189 +188 +189 +184 +185 +183 +183 +183 +179 +179 +175 +175 +172 +173 +173 +169 +169 +165 +165 +165 +162 +161 +157 +157 +157 +151 +151 +148 +147 +147 +144 +143 +139 +139 +140 +134 +133 +130 +129 +126 +125 +125 +119 +120 +116 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +58 +59 +54 +55 +51 +50 +51 +47 +47 +43 +43 +43 +41 +40 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +14 +14 +14 +14 +14 +13 +14 +13 +13 +13 +13 +14 +13 +13 +14 +13 +14 +13 +14 +14 +14 +13 +13 +12 +15 +15 +17 +18 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +30 +31 +31 +33 +33 +37 +37 +37 +41 +40 +43 +43 +43 +47 +47 +50 +51 +50 +55 +55 +59 +59 +58 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +116 +119 +119 +126 +125 +125 +129 +129 +133 +133 +133 +139 +139 +139 +139 +139 +144 +143 +147 +147 +147 +151 +151 +157 +157 +158 +160 +161 +165 +164 +169 +169 +169 +173 +173 +175 +175 +175 +179 +178 +179 +179 +178 +182 +183 +185 +185 +185 +188 +189 +190 +191 +192 +194 +194 +196 +197 +198 +198 +198 +200 +201 +200 +200 +201 +200 +200 +201 +200 +200 +203 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +207 +207 +207 +206 +206 +206 +204 +205 +204 +204 +204 +202 +202 +201 +201 +201 +200 +201 +198 +198 +196 +196 +196 +195 +194 +191 +191 +191 +188 +189 +184 +184 +185 +183 +183 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +125 +119 +119 +116 +115 +110 +110 +110 +106 +106 +100 +99 +100 +96 +96 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +73 +72 +69 +68 +65 +64 +64 +59 +58 +55 +55 +55 +50 +51 +51 +50 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +35 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +14 +13 +14 +14 +14 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +14 +13 +14 +13 +13 +14 +13 +14 +14 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +28 +31 +31 +33 +33 +33 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +51 +51 +55 +54 +58 +58 +59 +64 +65 +68 +68 +68 +73 +72 +76 +76 +77 +82 +82 +86 +86 +91 +90 +90 +95 +96 +100 +100 +100 +105 +106 +110 +110 +109 +116 +116 +120 +120 +120 +125 +125 +129 +129 +130 +133 +134 +139 +139 +144 +143 +143 +147 +147 +151 +151 +151 +157 +157 +157 +157 +157 +161 +161 +165 +165 +165 +169 +168 +172 +173 +173 +175 +175 +179 +179 +182 +182 +183 +185 +185 +189 +189 +188 +190 +191 +191 +191 +190 +194 +195 +196 +196 +197 +198 +198 +200 +200 +200 +200 +200 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +204 +204 +204 +205 +205 +202 +203 +200 +201 +200 +200 +200 +198 +198 +198 +197 +197 +195 +195 +194 +191 +190 +188 +188 +188 +185 +185 +183 +183 +179 +179 +179 +175 +175 +172 +173 +173 +169 +169 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +140 +139 +139 +134 +133 +129 +130 +129 +126 +126 +120 +120 +120 +116 +116 +110 +110 +110 +105 +106 +100 +100 +99 +96 +96 +90 +90 +87 +86 +87 +82 +82 +76 +76 +76 +72 +73 +72 +72 +72 +68 +68 +64 +65 +64 +58 +58 +55 +54 +55 +51 +50 +46 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +33 +33 +33 +31 +31 +27 +27 +27 +25 +24 +21 +21 +20 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +14 +14 +14 +13 +14 +14 +13 +13 +14 +14 +14 +13 +13 +13 +14 +14 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +36 +37 +41 +41 +41 +43 +43 +46 +47 +47 +51 +51 +55 +55 +55 +59 +58 +65 +64 +69 +68 +69 +72 +72 +76 +76 +76 +82 +82 +82 +83 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +116 +116 +115 +120 +119 +125 +125 +125 +130 +129 +129 +130 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +148 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +172 +173 +173 +173 +173 +175 +175 +179 +179 +179 +183 +182 +185 +184 +188 +188 +189 +191 +190 +194 +195 +194 +196 +196 +198 +198 +198 +200 +201 +201 +200 +200 +203 +202 +204 +205 +205 +205 +205 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +200 +200 +200 +200 +201 +198 +198 +197 +197 +196 +195 +194 +191 +191 +191 +189 +188 +184 +185 +185 +182 +182 +179 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +134 +133 +130 +129 +126 +126 +126 +119 +119 +115 +115 +109 +110 +110 +106 +106 +100 +100 +100 +96 +96 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +73 +72 +68 +68 +64 +65 +65 +58 +58 +55 +54 +55 +51 +51 +51 +51 +51 +47 +47 +43 +43 +43 +41 +40 +37 +37 +33 +33 +32 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +13 +13 +13 +13 +14 +13 +14 +13 +14 +14 +13 +13 +14 +13 +14 +14 +13 +13 +13 +14 +13 +13 +13 +13 +12 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +32 +33 +37 +37 +36 +41 +40 +43 +43 +47 +47 +47 +50 +50 +54 +55 +55 +58 +58 +58 +59 +59 +64 +64 +68 +68 +68 +72 +72 +76 +77 +77 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +105 +106 +106 +109 +110 +116 +116 +116 +119 +120 +125 +125 +127 +130 +129 +134 +133 +139 +139 +139 +143 +143 +143 +143 +143 +147 +148 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +166 +169 +169 +173 +173 +175 +175 +175 +179 +178 +179 +179 +179 +182 +182 +184 +184 +185 +188 +189 +190 +190 +191 +195 +195 +197 +197 +198 +198 +199 +201 +200 +201 +201 +200 +203 +202 +205 +204 +205 +204 +204 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +204 +204 +204 +204 +204 +202 +202 +201 +201 +201 +200 +200 +198 +199 +198 +197 +196 +195 +195 +195 +190 +191 +189 +189 +185 +185 +185 +183 +183 +179 +179 +179 +175 +175 +173 +173 +173 +168 +169 +165 +165 +165 +161 +161 +157 +157 +158 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +130 +129 +129 +125 +125 +120 +120 +119 +115 +116 +110 +109 +108 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +82 +82 +82 +76 +76 +72 +72 +72 +69 +68 +65 +65 +59 +59 +58 +54 +54 +51 +50 +51 +47 +47 +43 +43 +43 +40 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +14 +14 +13 +14 +14 +13 +14 +14 +13 +13 +14 +13 +13 +14 +14 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +26 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +42 +43 +47 +47 +51 +51 +51 +54 +54 +58 +58 +65 +64 +65 +68 +68 +72 +73 +73 +76 +76 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +105 +110 +110 +110 +115 +116 +119 +120 +120 +125 +125 +125 +125 +125 +130 +130 +134 +133 +133 +139 +139 +143 +143 +147 +147 +146 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +182 +183 +184 +185 +188 +188 +188 +191 +191 +194 +194 +194 +196 +196 +199 +198 +198 +200 +200 +201 +200 +200 +202 +203 +204 +204 +205 +204 +205 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +204 +204 +204 +204 +204 +203 +203 +201 +200 +201 +200 +200 +199 +198 +197 +197 +197 +194 +194 +190 +190 +190 +189 +188 +189 +188 +188 +185 +185 +183 +183 +183 +178 +178 +175 +174 +176 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +151 +151 +151 +147 +147 +144 +143 +143 +139 +139 +133 +133 +131 +129 +129 +125 +125 +119 +120 +119 +116 +116 +110 +110 +110 +106 +106 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +83 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +58 +59 +54 +54 +55 +51 +51 +47 +47 +47 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +14 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +14 +14 +13 +14 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +34 +37 +37 +41 +41 +43 +43 +43 +47 +46 +50 +51 +51 +55 +55 +55 +55 +55 +58 +58 +64 +65 +64 +68 +68 +73 +72 +74 +76 +76 +82 +82 +87 +86 +86 +89 +90 +96 +96 +96 +99 +100 +100 +100 +100 +106 +106 +110 +109 +110 +115 +116 +120 +119 +123 +126 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +160 +161 +161 +165 +165 +169 +169 +170 +173 +173 +175 +174 +179 +179 +179 +182 +183 +185 +184 +184 +188 +188 +190 +191 +190 +194 +195 +197 +196 +197 +199 +198 +201 +200 +200 +200 +201 +202 +202 +205 +204 +204 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +205 +204 +205 +204 +204 +203 +202 +202 +200 +200 +200 +200 +201 +198 +198 +196 +196 +197 +195 +195 +190 +191 +191 +189 +189 +185 +184 +183 +183 +183 +178 +178 +175 +175 +175 +173 +173 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +152 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +130 +129 +129 +129 +125 +125 +120 +120 +120 +115 +115 +110 +110 +107 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +69 +65 +64 +59 +58 +54 +55 +55 +51 +50 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +28 +27 +25 +25 +21 +21 +18 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +13 +14 +13 +14 +13 +13 +13 +14 +14 +13 +13 +14 +13 +13 +13 +14 +14 +13 +14 +13 +14 +13 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +50 +52 +55 +54 +59 +58 +64 +64 +68 +68 +68 +72 +72 +73 +76 +77 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +100 +100 +100 +105 +106 +110 +110 +110 +115 +115 +120 +119 +119 +125 +125 +129 +129 +130 +133 +133 +139 +139 +140 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +176 +175 +174 +179 +179 +183 +182 +183 +185 +184 +190 +188 +191 +191 +190 +194 +194 +196 +196 +196 +199 +198 +200 +200 +200 +200 +200 +202 +203 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +203 +202 +200 +201 +201 +201 +201 +198 +198 +196 +196 +195 +194 +195 +190 +190 +188 +188 +189 +184 +185 +185 +185 +184 +182 +183 +179 +179 +179 +175 +175 +172 +173 +171 +169 +169 +165 +165 +160 +161 +161 +157 +157 +151 +151 +151 +147 +147 +147 +147 +147 +143 +143 +140 +139 +139 +134 +134 +129 +129 +126 +126 +125 +119 +120 +115 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +72 +72 +72 +68 +68 +65 +64 +64 +58 +59 +55 +55 +54 +51 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +14 +14 +14 +13 +14 +14 +14 +13 +14 +13 +13 +13 +13 +14 +13 +14 +14 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +39 +41 +41 +43 +42 +47 +47 +47 +51 +50 +54 +55 +55 +58 +59 +58 +58 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +81 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +99 +106 +106 +110 +109 +110 +116 +115 +119 +119 +120 +125 +125 +130 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +161 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +174 +179 +178 +179 +182 +182 +184 +184 +185 +189 +189 +190 +191 +191 +194 +195 +196 +196 +196 +198 +199 +200 +200 +201 +200 +200 +202 +202 +205 +205 +204 +204 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +204 +204 +205 +204 +204 +202 +203 +201 +200 +200 +200 +201 +198 +198 +199 +196 +196 +196 +197 +196 +195 +194 +191 +190 +191 +188 +189 +184 +184 +185 +183 +183 +179 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +164 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +146 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +125 +120 +120 +115 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +73 +72 +72 +68 +69 +64 +65 +64 +58 +59 +54 +54 +55 +50 +51 +47 +47 +43 +43 +43 +41 +41 +37 +36 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +12 +13 +14 +14 +14 +13 +14 +13 +13 +13 +14 +13 +14 +14 +13 +14 +13 +14 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +15 +15 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +26 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +43 +43 +43 +46 +47 +50 +51 +51 +54 +54 +59 +59 +61 +64 +64 +69 +69 +72 +72 +73 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +105 +110 +110 +115 +116 +115 +119 +119 +125 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +165 +165 +165 +169 +168 +173 +173 +173 +175 +175 +179 +178 +178 +183 +182 +184 +185 +184 +188 +188 +190 +191 +191 +194 +194 +197 +196 +199 +198 +199 +200 +200 +200 +200 +200 +202 +203 +205 +204 +204 +204 +204 +206 +206 +206 +206 +207 +206 +207 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +204 +204 +204 +202 +202 +200 +200 +200 +201 +201 +198 +198 +197 +197 +196 +194 +194 +190 +190 +190 +188 +189 +185 +184 +184 +182 +183 +183 +183 +182 +179 +179 +175 +175 +175 +173 +173 +169 +168 +168 +165 +165 +161 +161 +156 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +131 +126 +125 +120 +119 +117 +115 +116 +110 +109 +105 +105 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +64 +64 +64 +59 +58 +54 +55 +54 +50 +50 +47 +47 +47 +43 +43 +40 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +26 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +14 +13 +13 +13 +14 +14 +14 +13 +13 +16 +15 +15 +17 +18 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +50 +54 +54 +58 +58 +59 +65 +65 +68 +68 +69 +72 +72 +76 +76 +76 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +105 +110 +109 +110 +115 +116 +119 +120 +120 +125 +125 +129 +129 +129 +133 +134 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +182 +182 +185 +184 +185 +188 +189 +190 +191 +190 +194 +194 +197 +196 +196 +199 +198 +200 +200 +201 +200 +200 +202 +202 +203 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +203 +202 +203 +200 +200 +200 +200 +200 +198 +198 +196 +196 +196 +194 +195 +194 +194 +194 +191 +190 +189 +188 +189 +185 +185 +183 +183 +181 +178 +179 +175 +175 +172 +173 +169 +169 +169 +169 +169 +165 +165 +161 +161 +160 +157 +157 +151 +151 +151 +147 +147 +143 +143 +140 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +119 +120 +116 +115 +109 +110 +110 +105 +106 +100 +100 +100 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +69 +65 +64 +58 +58 +58 +55 +54 +51 +51 +51 +47 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +13 +14 +14 +13 +13 +14 +13 +14 +14 +14 +13 +14 +13 +14 +14 +14 +13 +13 +15 +14 +14 +14 +13 +14 +13 +13 +13 +14 +13 +13 +12 +15 +15 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +26 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +50 +55 +54 +55 +59 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +83 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +116 +119 +120 +120 +126 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +169 +169 +169 +173 +173 +174 +175 +175 +179 +179 +183 +182 +183 +185 +185 +188 +188 +188 +190 +191 +194 +194 +195 +196 +196 +198 +198 +200 +200 +200 +201 +200 +202 +202 +202 +204 +204 +204 +204 +204 +204 +204 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +205 +204 +204 +204 +202 +203 +203 +202 +202 +200 +200 +200 +200 +201 +198 +199 +196 +196 +195 +194 +194 +190 +191 +188 +188 +189 +184 +184 +183 +183 +183 +179 +179 +175 +174 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +120 +119 +119 +116 +116 +110 +110 +106 +106 +106 +100 +100 +95 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +69 +64 +64 +59 +58 +55 +54 +54 +50 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +20 +19 +19 +17 +17 +15 +15 +15 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +13 +13 +14 +13 +13 +14 +14 +14 +13 +14 +14 +13 +13 +14 +13 +13 +14 +13 +13 +14 +14 +14 +13 +14 +14 +14 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +42 +47 +47 +50 +50 +50 +54 +54 +58 +59 +59 +64 +65 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +116 +115 +116 +115 +119 +119 +126 +125 +126 +129 +129 +133 +133 +134 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +178 +179 +183 +182 +184 +184 +189 +189 +189 +190 +191 +195 +195 +194 +197 +196 +196 +196 +196 +198 +198 +200 +200 +200 +200 +200 +202 +202 +203 +204 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +204 +204 +204 +204 +203 +202 +203 +200 +200 +200 +200 +200 +198 +198 +197 +196 +197 +194 +194 +190 +191 +191 +188 +188 +184 +185 +185 +183 +183 +179 +179 +175 +175 +174 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +129 +129 +129 +125 +125 +120 +120 +119 +115 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +68 +68 +65 +64 +58 +59 +58 +55 +55 +51 +51 +51 +47 +47 +43 +43 +44 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +22 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +36 +37 +41 +41 +41 +43 +42 +47 +46 +47 +51 +50 +54 +55 +54 +58 +58 +64 +64 +64 +68 +68 +72 +73 +77 +76 +77 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +116 +116 +120 +120 +125 +125 +130 +130 +129 +134 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +166 +169 +169 +173 +173 +175 +175 +175 +179 +178 +183 +182 +182 +184 +185 +185 +184 +184 +189 +188 +191 +191 +191 +196 +194 +197 +196 +197 +199 +199 +200 +200 +200 +200 +200 +202 +202 +204 +204 +204 +204 +204 +205 +204 +204 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +207 +206 +206 +204 +204 +204 +204 +204 +202 +202 +202 +200 +200 +200 +200 +200 +198 +199 +197 +196 +197 +194 +194 +190 +191 +188 +188 +189 +185 +185 +182 +183 +182 +179 +179 +174 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +134 +129 +129 +129 +126 +125 +120 +120 +120 +116 +116 +110 +110 +110 +106 +106 +100 +100 +97 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +69 +64 +64 +59 +59 +59 +55 +55 +51 +50 +46 +47 +47 +43 +43 +41 +41 +41 +37 +37 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +23 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +14 +13 +14 +14 +13 +14 +13 +14 +14 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +15 +15 +16 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +30 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +50 +51 +55 +54 +59 +58 +59 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +109 +109 +110 +115 +116 +120 +119 +119 +125 +126 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +148 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +173 +173 +172 +175 +175 +178 +178 +179 +182 +182 +184 +184 +185 +189 +189 +190 +190 +194 +194 +194 +196 +196 +198 +198 +198 +201 +200 +200 +200 +200 +200 +200 +202 +202 +202 +204 +204 +204 +204 +205 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +205 +202 +202 +203 +200 +200 +200 +200 +198 +198 +199 +196 +196 +194 +194 +194 +190 +190 +188 +189 +188 +184 +185 +183 +182 +182 +179 +178 +175 +174 +175 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +134 +134 +129 +129 +130 +125 +126 +119 +119 +116 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +64 +64 +64 +58 +59 +55 +54 +54 +51 +51 +46 +47 +47 +43 +42 +41 +41 +41 +37 +37 +33 +33 +32 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +13 +13 +13 +14 +14 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +47 +47 +46 +51 +50 +55 +54 +55 +58 +58 +64 +64 +64 +69 +68 +72 +72 +72 +76 +76 +82 +82 +83 +86 +86 +90 +90 +96 +96 +96 +100 +100 +105 +106 +106 +109 +110 +115 +115 +115 +119 +119 +126 +125 +125 +129 +129 +134 +133 +134 +139 +139 +143 +143 +148 +147 +147 +151 +151 +157 +157 +157 +161 +161 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +176 +179 +179 +183 +183 +184 +184 +185 +189 +188 +191 +190 +191 +195 +194 +194 +195 +194 +196 +197 +198 +198 +199 +200 +200 +200 +200 +202 +202 +202 +204 +205 +204 +205 +205 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +206 +206 +207 +204 +204 +204 +204 +203 +203 +202 +200 +200 +201 +200 +200 +198 +199 +196 +196 +197 +194 +194 +191 +191 +191 +189 +189 +185 +184 +185 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +144 +143 +144 +139 +140 +133 +133 +130 +130 +130 +125 +126 +120 +119 +120 +115 +115 +116 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +68 +68 +68 +64 +64 +58 +58 +59 +54 +54 +50 +51 +49 +46 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +14 +13 +13 +14 +14 +13 +14 +14 +14 +14 +13 +14 +13 +14 +14 +14 +13 +13 +14 +14 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +50 +50 +55 +54 +58 +59 +59 +64 +64 +68 +68 +73 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +109 +110 +116 +115 +119 +119 +126 +125 +125 +129 +129 +133 +133 +133 +139 +140 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +174 +179 +179 +179 +179 +179 +182 +183 +184 +184 +185 +189 +189 +191 +191 +191 +194 +195 +197 +196 +198 +198 +198 +200 +200 +201 +200 +200 +202 +202 +204 +204 +204 +205 +204 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +205 +204 +204 +202 +203 +201 +200 +200 +200 +200 +198 +198 +198 +197 +196 +194 +194 +190 +190 +191 +189 +188 +185 +185 +184 +182 +183 +179 +179 +178 +175 +175 +173 +173 +173 +169 +169 +164 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +130 +129 +125 +125 +125 +120 +120 +115 +116 +116 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +69 +68 +64 +64 +58 +59 +54 +55 +55 +50 +51 +47 +47 +47 +42 +43 +43 +43 +43 +41 +41 +37 +36 +37 +33 +32 +31 +31 +28 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +16 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +13 +14 +14 +14 +14 +13 +13 +14 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +14 +13 +13 +12 +15 +15 +17 +17 +20 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +46 +51 +51 +55 +54 +54 +58 +59 +65 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +91 +96 +96 +100 +100 +106 +106 +106 +109 +109 +115 +115 +115 +119 +119 +120 +119 +119 +125 +126 +129 +130 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +182 +182 +183 +185 +185 +188 +188 +189 +190 +191 +194 +194 +194 +197 +196 +198 +198 +198 +200 +200 +200 +201 +201 +202 +202 +205 +204 +204 +204 +204 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +200 +200 +200 +200 +200 +198 +198 +197 +197 +196 +194 +195 +191 +190 +190 +189 +188 +185 +184 +184 +182 +183 +179 +179 +179 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +140 +139 +133 +133 +134 +129 +129 +125 +126 +120 +119 +119 +116 +115 +110 +110 +110 +106 +106 +106 +106 +105 +100 +100 +96 +95 +96 +90 +90 +86 +86 +84 +82 +82 +76 +77 +72 +72 +72 +68 +69 +64 +64 +64 +58 +58 +59 +58 +59 +54 +54 +50 +51 +51 +47 +47 +43 +42 +43 +41 +40 +37 +37 +32 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +16 +15 +14 +13 +13 +12 +13 +14 +13 +13 +13 +14 +13 +14 +14 +14 +14 +13 +13 +14 +13 +14 +14 +14 +13 +14 +13 +14 +14 +14 +14 +13 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +36 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +51 +55 +55 +54 +59 +58 +64 +64 +65 +68 +68 +72 +72 +73 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +100 +100 +100 +106 +106 +110 +110 +110 +116 +116 +120 +119 +122 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +166 +169 +169 +173 +173 +175 +175 +175 +179 +178 +183 +183 +182 +184 +185 +189 +189 +188 +191 +191 +195 +194 +195 +196 +197 +198 +198 +200 +200 +201 +200 +200 +202 +202 +202 +204 +205 +204 +204 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +207 +205 +204 +204 +204 +204 +202 +202 +202 +200 +200 +200 +200 +200 +199 +198 +197 +196 +196 +194 +195 +190 +190 +191 +188 +189 +185 +184 +183 +183 +182 +179 +179 +175 +175 +175 +173 +173 +169 +169 +168 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +140 +139 +139 +133 +133 +129 +129 +129 +126 +125 +125 +125 +125 +119 +120 +116 +116 +115 +115 +116 +110 +110 +108 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +81 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +60 +59 +58 +54 +54 +50 +50 +50 +46 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +22 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +13 +13 +13 +13 +14 +13 +14 +13 +14 +14 +13 +13 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +46 +50 +50 +51 +54 +54 +59 +58 +65 +64 +64 +69 +68 +72 +72 +72 +76 +76 +82 +82 +82 +87 +86 +90 +90 +90 +95 +96 +100 +100 +101 +106 +106 +109 +110 +115 +116 +115 +120 +120 +126 +125 +126 +129 +130 +129 +129 +130 +133 +133 +139 +139 +139 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +182 +183 +183 +184 +185 +188 +189 +191 +190 +191 +194 +194 +197 +196 +196 +198 +198 +200 +200 +200 +200 +200 +202 +202 +203 +204 +204 +204 +205 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +207 +206 +204 +204 +205 +205 +205 +202 +202 +202 +200 +201 +200 +200 +200 +198 +199 +197 +197 +195 +194 +194 +191 +190 +188 +188 +188 +184 +184 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +123 +119 +119 +116 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +73 +73 +72 +68 +68 +65 +64 +64 +58 +59 +55 +55 +55 +51 +51 +47 +46 +47 +43 +43 +41 +41 +41 +37 +36 +32 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +14 +14 +13 +13 +13 +14 +14 +13 +13 +13 +13 +13 +13 +14 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +50 +51 +50 +54 +54 +58 +58 +58 +64 +64 +64 +64 +64 +68 +68 +72 +72 +72 +75 +76 +82 +82 +82 +86 +86 +90 +90 +95 +96 +96 +100 +100 +106 +106 +106 +110 +110 +110 +110 +110 +116 +116 +119 +120 +120 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +164 +165 +169 +169 +169 +173 +173 +175 +175 +178 +179 +178 +182 +183 +184 +185 +184 +189 +188 +190 +190 +190 +194 +194 +197 +196 +197 +199 +199 +200 +201 +201 +200 +201 +202 +202 +205 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +207 +207 +207 +206 +206 +206 +206 +207 +205 +204 +205 +204 +204 +202 +202 +201 +201 +200 +200 +200 +198 +198 +198 +197 +196 +194 +194 +194 +190 +190 +188 +189 +189 +184 +185 +182 +183 +183 +179 +178 +175 +175 +172 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +141 +133 +133 +129 +130 +125 +125 +125 +119 +120 +116 +116 +116 +110 +110 +110 +110 +109 +106 +106 +100 +100 +100 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +69 +64 +65 +59 +59 +59 +54 +55 +50 +50 +51 +47 +46 +43 +43 +40 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +13 +13 +13 +14 +14 +13 +14 +13 +14 +14 +13 +14 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +15 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +32 +33 +33 +37 +37 +40 +41 +41 +43 +43 +47 +47 +47 +51 +51 +54 +55 +55 +59 +58 +64 +64 +65 +69 +68 +72 +72 +74 +76 +76 +82 +82 +85 +86 +86 +90 +90 +96 +96 +96 +99 +100 +100 +100 +100 +106 +106 +109 +110 +110 +116 +116 +119 +119 +123 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +173 +173 +173 +175 +174 +179 +178 +179 +182 +183 +185 +184 +184 +188 +188 +191 +191 +190 +195 +195 +196 +196 +197 +198 +198 +200 +200 +200 +200 +200 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +207 +207 +206 +207 +206 +206 +206 +207 +207 +206 +205 +204 +205 +204 +204 +204 +204 +202 +203 +202 +200 +200 +200 +200 +200 +198 +198 +196 +197 +196 +195 +195 +191 +190 +191 +188 +188 +184 +185 +182 +183 +183 +178 +179 +175 +175 +175 +173 +173 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +154 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +129 +129 +129 +125 +125 +119 +119 +120 +115 +115 +109 +110 +106 +106 +106 +100 +100 +96 +95 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +69 +64 +64 +58 +58 +55 +54 +54 +51 +50 +47 +47 +47 +43 +43 +41 +40 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +26 +25 +25 +21 +21 +20 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +14 +13 +13 +14 +13 +13 +14 +13 +13 +13 +14 +14 +13 +14 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +51 +54 +54 +58 +59 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +76 +77 +82 +82 +86 +86 +86 +90 +90 +96 +96 +100 +100 +100 +106 +105 +110 +110 +110 +116 +115 +119 +119 +120 +125 +125 +130 +129 +130 +133 +133 +139 +139 +140 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +168 +169 +173 +172 +175 +175 +175 +179 +179 +183 +182 +183 +184 +184 +189 +189 +190 +190 +190 +195 +195 +196 +197 +196 +198 +198 +200 +200 +200 +200 +200 +202 +202 +202 +204 +204 +204 +204 +204 +206 +207 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +204 +205 +204 +204 +205 +202 +202 +203 +200 +201 +200 +200 +201 +198 +199 +196 +197 +195 +195 +194 +190 +190 +188 +189 +188 +185 +185 +184 +185 +184 +182 +182 +179 +179 +179 +175 +175 +173 +173 +171 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +147 +147 +147 +143 +143 +139 +139 +140 +133 +133 +130 +129 +126 +125 +125 +119 +119 +115 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +72 +72 +72 +68 +68 +65 +64 +64 +58 +58 +55 +54 +55 +50 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +20 +19 +19 +17 +17 +15 +15 +15 +16 +15 +13 +13 +13 +12 +14 +14 +13 +14 +13 +13 +14 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +13 +14 +14 +14 +13 +13 +14 +14 +14 +13 +13 +15 +15 +17 +16 +17 +19 +19 +21 +21 +21 +25 +25 +25 +25 +25 +27 +27 +31 +31 +31 +32 +33 +37 +37 +39 +41 +41 +43 +43 +47 +47 +47 +51 +50 +54 +56 +54 +58 +58 +59 +58 +59 +65 +64 +68 +69 +68 +73 +72 +77 +77 +81 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +105 +107 +110 +109 +110 +115 +115 +119 +120 +120 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +179 +179 +178 +183 +183 +185 +185 +185 +188 +188 +190 +191 +191 +194 +194 +197 +197 +196 +198 +198 +200 +200 +201 +200 +200 +202 +202 +205 +205 +205 +204 +205 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +207 +204 +204 +204 +204 +204 +202 +202 +200 +200 +200 +200 +200 +198 +199 +198 +196 +196 +197 +197 +197 +194 +194 +190 +191 +191 +188 +189 +185 +184 +183 +183 +183 +179 +179 +175 +175 +174 +173 +173 +168 +169 +169 +165 +165 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +145 +143 +143 +139 +139 +133 +133 +133 +129 +129 +126 +125 +125 +119 +119 +116 +116 +116 +110 +109 +106 +106 +106 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +73 +72 +68 +68 +64 +64 +64 +59 +58 +54 +55 +55 +51 +50 +47 +46 +44 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +12 +13 +13 +14 +13 +14 +13 +13 +14 +14 +13 +13 +14 +13 +13 +13 +13 +14 +13 +14 +13 +14 +13 +14 +14 +14 +13 +13 +13 +13 +15 +15 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +32 +33 +33 +37 +37 +41 +41 +41 +42 +43 +43 +43 +43 +46 +47 +50 +51 +50 +55 +54 +58 +58 +64 +64 +64 +68 +68 +72 +72 +73 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +115 +116 +116 +119 +119 +125 +126 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +152 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +172 +173 +175 +175 +179 +179 +179 +182 +183 +185 +184 +185 +189 +189 +191 +191 +191 +194 +195 +197 +196 +199 +199 +198 +200 +200 +200 +200 +201 +203 +202 +204 +204 +204 +204 +204 +206 +206 +207 +206 +207 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +204 +205 +205 +204 +204 +202 +203 +200 +200 +200 +201 +200 +199 +199 +198 +197 +197 +194 +194 +190 +191 +190 +188 +189 +185 +185 +184 +183 +182 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +167 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +134 +129 +130 +130 +125 +125 +120 +119 +115 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +95 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +64 +65 +65 +58 +58 +55 +54 +54 +51 +50 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +13 +12 +13 +14 +13 +14 +13 +14 +13 +14 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +13 +14 +13 +13 +12 +15 +16 +17 +17 +19 +20 +19 +21 +21 +25 +25 +25 +27 +27 +27 +27 +27 +31 +31 +33 +32 +33 +37 +37 +41 +41 +42 +43 +43 +47 +47 +51 +51 +50 +55 +54 +58 +58 +59 +65 +65 +68 +69 +68 +72 +72 +76 +76 +76 +83 +82 +86 +86 +89 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +110 +110 +116 +116 +119 +119 +120 +125 +125 +129 +129 +130 +133 +133 +139 +139 +144 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +174 +175 +175 +179 +179 +183 +183 +185 +184 +185 +189 +189 +190 +191 +190 +194 +194 +196 +197 +196 +198 +199 +201 +201 +200 +200 +201 +202 +203 +203 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +205 +204 +204 +202 +202 +201 +200 +201 +200 +200 +198 +198 +198 +197 +197 +194 +194 +194 +190 +190 +191 +191 +191 +189 +189 +185 +185 +185 +182 +183 +179 +179 +175 +175 +175 +173 +173 +168 +169 +169 +164 +165 +161 +161 +161 +158 +157 +151 +151 +151 +147 +147 +144 +143 +143 +139 +139 +133 +134 +130 +130 +129 +125 +126 +119 +120 +119 +115 +116 +110 +110 +110 +106 +106 +100 +99 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +77 +77 +72 +72 +72 +72 +72 +69 +69 +64 +64 +64 +59 +59 +55 +55 +55 +51 +50 +47 +46 +47 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +30 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +14 +14 +13 +14 +14 +13 +14 +14 +13 +13 +13 +13 +13 +14 +14 +13 +14 +13 +13 +13 +13 +13 +13 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +46 +46 +51 +51 +54 +54 +55 +59 +58 +64 +65 +65 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +109 +115 +116 +116 +119 +119 +126 +125 +130 +129 +130 +133 +133 +139 +140 +139 +143 +143 +143 +143 +143 +147 +147 +151 +151 +151 +156 +157 +161 +161 +161 +165 +165 +169 +169 +173 +172 +173 +175 +175 +179 +178 +179 +183 +183 +185 +184 +184 +188 +188 +191 +190 +190 +194 +195 +196 +196 +197 +198 +198 +201 +200 +201 +200 +200 +203 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +203 +200 +200 +200 +200 +201 +200 +200 +200 +198 +198 +196 +196 +196 +194 +194 +190 +190 +189 +188 +189 +184 +184 +183 +182 +182 +178 +178 +175 +174 +175 +173 +172 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +148 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +126 +126 +120 +120 +119 +115 +115 +110 +109 +110 +106 +106 +100 +100 +96 +96 +95 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +73 +68 +68 +68 +65 +65 +59 +59 +59 +55 +55 +51 +50 +47 +46 +47 +43 +43 +41 +41 +41 +37 +36 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +22 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +14 +14 +14 +14 +13 +14 +13 +13 +13 +13 +14 +14 +14 +14 +13 +14 +14 +13 +13 +14 +13 +13 +13 +13 +13 +15 +15 +15 +17 +17 +20 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +31 +32 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +51 +54 +54 +58 +59 +58 +65 +64 +68 +68 +69 +72 +73 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +105 +106 +110 +110 +110 +116 +115 +120 +120 +119 +125 +125 +130 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +148 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +174 +178 +179 +183 +183 +183 +185 +184 +189 +189 +189 +191 +191 +194 +194 +196 +197 +197 +199 +198 +200 +200 +200 +201 +201 +200 +201 +200 +202 +202 +205 +204 +204 +204 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +205 +204 +205 +204 +203 +202 +202 +201 +200 +200 +200 +198 +199 +198 +197 +196 +194 +195 +195 +190 +191 +189 +188 +188 +185 +185 +183 +182 +183 +178 +179 +175 +175 +174 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +140 +139 +139 +134 +133 +130 +129 +129 +125 +125 +120 +120 +116 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +72 +72 +68 +68 +65 +64 +64 +59 +58 +54 +55 +55 +51 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +34 +31 +31 +27 +27 +25 +26 +25 +21 +21 +19 +19 +19 +17 +17 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +14 +14 +14 +13 +14 +14 +14 +13 +13 +13 +13 +14 +14 +13 +14 +13 +14 +14 +13 +13 +14 +13 +13 +13 +14 +13 +13 +15 +15 +17 +17 +18 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +32 +33 +37 +37 +41 +41 +43 +43 +42 +47 +47 +50 +50 +51 +55 +55 +59 +58 +59 +65 +64 +68 +68 +69 +73 +72 +76 +76 +76 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +105 +106 +110 +110 +110 +116 +116 +119 +120 +120 +126 +126 +129 +130 +129 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +178 +179 +182 +182 +185 +185 +185 +188 +188 +190 +191 +191 +195 +194 +195 +194 +195 +196 +197 +199 +198 +198 +201 +200 +200 +201 +201 +202 +202 +205 +204 +204 +204 +204 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +207 +204 +204 +205 +204 +205 +202 +202 +200 +200 +200 +201 +200 +199 +198 +199 +196 +196 +195 +194 +194 +191 +190 +188 +189 +189 +185 +185 +183 +183 +179 +178 +179 +174 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +134 +133 +134 +130 +129 +125 +126 +125 +119 +119 +116 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +97 +90 +90 +86 +86 +83 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +65 +65 +58 +58 +54 +55 +55 +51 +50 +47 +47 +47 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +18 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +14 +13 +14 +14 +13 +14 +13 +14 +13 +13 +14 +13 +13 +13 +14 +14 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +20 +21 +21 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +40 +43 +43 +43 +47 +47 +50 +50 +50 +54 +55 +59 +59 +58 +65 +65 +69 +68 +73 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +105 +110 +110 +110 +115 +116 +119 +119 +126 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +162 +161 +165 +165 +168 +169 +173 +173 +172 +174 +175 +178 +178 +179 +183 +182 +183 +183 +182 +185 +184 +189 +189 +189 +190 +190 +195 +194 +195 +197 +197 +198 +198 +200 +200 +200 +200 +200 +203 +202 +202 +204 +204 +204 +204 +204 +204 +204 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +203 +200 +200 +200 +200 +201 +198 +199 +199 +196 +196 +194 +195 +190 +190 +190 +188 +188 +188 +188 +189 +184 +184 +183 +183 +182 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +150 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +119 +120 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +77 +76 +72 +72 +68 +68 +69 +65 +64 +58 +58 +55 +55 +54 +51 +50 +47 +47 +47 +43 +43 +43 +42 +43 +41 +41 +37 +37 +36 +33 +33 +31 +31 +29 +27 +27 +25 +25 +20 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +16 +15 +16 +15 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +14 +14 +14 +14 +14 +14 +13 +13 +13 +14 +13 +14 +13 +13 +13 +13 +13 +14 +13 +13 +15 +15 +16 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +42 +47 +47 +51 +50 +51 +55 +54 +58 +58 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +95 +101 +100 +100 +106 +106 +110 +109 +110 +115 +116 +119 +120 +120 +126 +126 +129 +129 +129 +133 +133 +139 +140 +140 +144 +144 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +174 +175 +178 +179 +182 +182 +183 +184 +185 +188 +189 +190 +190 +191 +195 +195 +196 +196 +197 +198 +198 +199 +198 +198 +201 +201 +200 +200 +200 +202 +203 +204 +204 +205 +204 +205 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +204 +205 +204 +204 +205 +202 +202 +200 +201 +200 +200 +200 +198 +199 +196 +196 +197 +195 +194 +190 +190 +190 +189 +188 +185 +184 +185 +182 +183 +179 +179 +178 +174 +175 +172 +173 +169 +168 +169 +165 +165 +161 +160 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +134 +133 +129 +129 +125 +126 +120 +119 +120 +116 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +83 +76 +76 +72 +72 +68 +68 +68 +64 +65 +59 +58 +58 +54 +54 +54 +54 +55 +50 +50 +47 +47 +47 +42 +43 +41 +41 +39 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +22 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +14 +14 +14 +14 +14 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +50 +55 +54 +54 +58 +58 +64 +64 +64 +68 +68 +72 +72 +73 +76 +76 +82 +82 +87 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +116 +116 +120 +119 +125 +125 +126 +130 +129 +133 +133 +133 +134 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +170 +173 +173 +175 +174 +178 +179 +178 +183 +183 +185 +185 +185 +189 +188 +189 +188 +188 +190 +190 +194 +195 +195 +197 +197 +199 +198 +200 +200 +200 +200 +200 +202 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +204 +204 +205 +205 +204 +202 +203 +202 +201 +201 +201 +200 +200 +198 +198 +196 +196 +196 +194 +194 +191 +190 +191 +188 +188 +184 +184 +183 +183 +182 +179 +179 +175 +175 +175 +173 +173 +169 +168 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +120 +120 +120 +116 +116 +110 +110 +110 +106 +105 +100 +100 +100 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +73 +72 +72 +72 +72 +68 +68 +64 +64 +64 +58 +58 +55 +55 +54 +50 +50 +46 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +19 +19 +19 +17 +17 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +13 +13 +14 +14 +13 +14 +14 +14 +14 +14 +13 +14 +14 +13 +13 +14 +14 +13 +13 +13 +13 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +51 +55 +54 +59 +58 +65 +64 +65 +68 +68 +73 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +101 +106 +106 +110 +110 +115 +115 +115 +120 +119 +125 +125 +126 +129 +130 +129 +129 +129 +134 +133 +139 +140 +139 +143 +143 +147 +147 +148 +151 +151 +157 +156 +161 +160 +161 +165 +165 +169 +169 +169 +173 +173 +173 +173 +173 +175 +175 +179 +178 +179 +183 +183 +184 +185 +188 +189 +188 +190 +190 +194 +195 +195 +196 +196 +199 +198 +198 +200 +200 +201 +200 +200 +202 +202 +204 +204 +205 +204 +205 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +204 +204 +204 +205 +204 +203 +203 +200 +200 +201 +201 +200 +198 +198 +197 +197 +196 +194 +195 +190 +191 +191 +188 +189 +185 +185 +185 +183 +183 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +162 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +126 +119 +119 +116 +115 +109 +110 +109 +106 +106 +100 +100 +100 +96 +96 +96 +97 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +75 +72 +72 +69 +69 +65 +64 +64 +58 +58 +55 +55 +55 +51 +50 +50 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +27 +26 +26 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +14 +15 +15 +13 +13 +12 +13 +13 +13 +13 +14 +14 +14 +13 +14 +14 +14 +13 +14 +14 +14 +13 +13 +13 +13 +13 +14 +14 +14 +14 +13 +13 +14 +13 +13 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +44 +43 +48 +46 +47 +50 +51 +54 +54 +54 +59 +58 +65 +64 +65 +68 +68 +72 +72 +72 +77 +77 +82 +82 +83 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +110 +110 +110 +115 +116 +119 +120 +119 +125 +125 +129 +130 +131 +133 +133 +139 +140 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +157 +157 +157 +161 +161 +165 +165 +164 +169 +169 +172 +173 +174 +175 +175 +179 +179 +183 +183 +183 +185 +184 +188 +189 +188 +190 +190 +195 +195 +195 +196 +197 +198 +198 +199 +200 +201 +200 +200 +202 +202 +202 +204 +205 +204 +205 +205 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +207 +204 +205 +205 +204 +202 +202 +202 +200 +200 +201 +200 +200 +198 +199 +197 +196 +196 +194 +194 +191 +190 +190 +188 +188 +184 +185 +184 +183 +183 +178 +179 +175 +175 +175 +172 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +148 +147 +143 +143 +143 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +119 +120 +116 +115 +116 +116 +115 +110 +110 +105 +106 +106 +100 +100 +96 +96 +93 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +68 +68 +69 +65 +64 +58 +58 +58 +54 +54 +50 +50 +47 +47 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +13 +13 +14 +14 +13 +14 +14 +14 +13 +13 +13 +14 +13 +14 +14 +14 +13 +13 +13 +14 +13 +14 +13 +13 +13 +13 +15 +16 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +42 +43 +47 +46 +47 +50 +50 +54 +54 +55 +59 +59 +64 +65 +65 +68 +68 +72 +72 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +99 +99 +105 +106 +106 +110 +109 +115 +115 +117 +119 +119 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +164 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +179 +182 +183 +185 +184 +185 +189 +188 +190 +190 +191 +195 +195 +196 +196 +198 +198 +199 +200 +200 +200 +200 +200 +201 +200 +203 +202 +202 +204 +204 +205 +204 +205 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +202 +200 +201 +200 +201 +200 +198 +198 +196 +196 +197 +195 +195 +191 +190 +189 +188 +189 +184 +185 +182 +183 +183 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +133 +133 +133 +129 +129 +126 +125 +126 +119 +119 +115 +116 +113 +110 +110 +106 +106 +100 +99 +100 +96 +96 +90 +91 +90 +86 +86 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +65 +64 +64 +58 +59 +54 +54 +55 +51 +50 +47 +47 +47 +43 +42 +40 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +17 +17 +18 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +14 +14 +14 +14 +13 +13 +13 +14 +14 +14 +14 +14 +13 +14 +14 +13 +14 +14 +13 +13 +14 +13 +13 +13 +12 +15 +15 +18 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +30 +33 +33 +37 +37 +37 +41 +41 +43 +43 +42 +47 +46 +50 +50 +55 +55 +55 +59 +58 +64 +64 +64 +68 +69 +73 +72 +72 +76 +76 +82 +82 +83 +86 +86 +90 +90 +92 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +115 +115 +119 +119 +120 +119 +119 +125 +125 +129 +130 +130 +133 +133 +139 +139 +142 +143 +143 +147 +147 +150 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +174 +175 +178 +179 +183 +182 +183 +185 +185 +188 +189 +191 +191 +191 +194 +194 +197 +196 +197 +198 +198 +200 +200 +201 +201 +200 +202 +202 +203 +204 +204 +204 +204 +207 +206 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +204 +204 +204 +205 +204 +202 +202 +203 +200 +201 +200 +201 +199 +198 +198 +196 +196 +194 +195 +194 +190 +190 +189 +188 +188 +185 +185 +183 +182 +182 +179 +179 +175 +175 +176 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +130 +130 +127 +126 +125 +119 +119 +115 +116 +115 +109 +110 +106 +106 +106 +100 +100 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +77 +76 +72 +72 +68 +68 +68 +64 +64 +59 +59 +59 +55 +55 +51 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +33 +32 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +16 +17 +17 +15 +15 +15 +15 +15 +12 +13 +12 +13 +14 +13 +14 +13 +13 +14 +14 +13 +13 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +31 +31 +31 +31 +33 +33 +37 +37 +38 +41 +41 +43 +43 +47 +47 +47 +51 +51 +55 +55 +55 +58 +59 +64 +65 +64 +68 +68 +72 +72 +72 +76 +77 +82 +82 +83 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +110 +110 +110 +116 +115 +119 +120 +120 +125 +125 +129 +129 +132 +133 +133 +139 +139 +144 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +172 +173 +175 +175 +176 +178 +179 +183 +183 +184 +184 +185 +188 +189 +190 +191 +190 +194 +195 +197 +196 +196 +198 +199 +201 +200 +200 +201 +201 +202 +203 +205 +205 +205 +204 +204 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +204 +205 +204 +204 +204 +202 +202 +201 +200 +201 +200 +200 +198 +199 +198 +197 +196 +196 +196 +196 +195 +195 +191 +190 +191 +189 +189 +185 +184 +185 +183 +183 +178 +179 +175 +174 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +144 +139 +139 +134 +134 +130 +129 +130 +125 +126 +120 +120 +119 +116 +115 +116 +116 +116 +110 +110 +105 +106 +106 +100 +100 +96 +96 +91 +90 +89 +86 +86 +82 +82 +83 +76 +76 +72 +72 +73 +68 +68 +64 +65 +65 +58 +58 +54 +55 +55 +51 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +12 +14 +13 +13 +13 +14 +14 +14 +13 +14 +13 +14 +14 +13 +14 +14 +14 +14 +13 +13 +13 +14 +14 +13 +14 +13 +13 +13 +12 +15 +15 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +26 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +43 +43 +43 +47 +47 +51 +51 +51 +55 +54 +58 +59 +61 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +105 +106 +106 +110 +110 +116 +115 +119 +119 +120 +125 +126 +129 +130 +129 +133 +134 +139 +139 +140 +143 +143 +147 +147 +147 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +178 +183 +182 +183 +184 +185 +189 +189 +189 +190 +191 +194 +194 +196 +196 +196 +198 +198 +200 +201 +200 +200 +200 +202 +203 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +207 +207 +207 +207 +206 +207 +206 +206 +206 +206 +207 +207 +206 +204 +205 +204 +204 +204 +203 +202 +201 +200 +200 +201 +200 +198 +198 +200 +196 +196 +194 +195 +191 +191 +191 +189 +188 +185 +185 +184 +182 +183 +183 +182 +182 +179 +178 +175 +175 +174 +173 +173 +169 +169 +169 +165 +165 +161 +161 +158 +157 +157 +151 +151 +147 +147 +147 +143 +143 +143 +143 +144 +133 +133 +129 +129 +130 +125 +125 +119 +120 +117 +115 +116 +110 +109 +106 +106 +106 +100 +100 +96 +96 +95 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +65 +64 +64 +59 +58 +55 +54 +54 +51 +50 +47 +46 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +26 +25 +25 +21 +21 +19 +19 +19 +18 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +13 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +13 +13 +14 +13 +14 +14 +13 +13 +14 +13 +13 +13 +15 +15 +16 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +31 +31 +31 +33 +33 +36 +37 +37 +41 +41 +43 +43 +44 +47 +47 +51 +51 +54 +54 +54 +58 +59 +58 +58 +59 +64 +64 +64 +64 +65 +69 +69 +72 +72 +72 +77 +76 +82 +83 +86 +87 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +116 +119 +120 +125 +125 +126 +129 +129 +134 +133 +138 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +183 +183 +182 +185 +185 +188 +188 +188 +190 +190 +190 +190 +191 +194 +195 +197 +197 +196 +198 +198 +201 +200 +201 +200 +200 +202 +202 +205 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +205 +204 +204 +202 +202 +200 +201 +200 +200 +200 +198 +198 +199 +196 +196 +195 +194 +194 +190 +191 +188 +189 +188 +184 +185 +183 +182 +181 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +161 +161 +160 +158 +157 +151 +151 +152 +147 +147 +143 +143 +141 +139 +139 +134 +133 +129 +129 +129 +125 +126 +120 +120 +120 +115 +116 +110 +110 +110 +106 +106 +100 +100 +100 +95 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +69 +69 +68 +64 +64 +58 +58 +58 +54 +55 +50 +50 +51 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +13 +13 +13 +14 +14 +14 +14 +14 +14 +14 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +14 +13 +14 +14 +13 +13 +14 +13 +13 +15 +15 +15 +17 +17 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +28 +31 +31 +33 +33 +37 +37 +37 +41 +41 +41 +41 +40 +43 +43 +42 +43 +43 +47 +47 +50 +51 +51 +55 +54 +59 +58 +63 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +109 +115 +115 +116 +119 +119 +125 +126 +125 +129 +129 +133 +133 +134 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +165 +165 +165 +168 +169 +173 +173 +173 +175 +175 +179 +179 +178 +182 +183 +184 +185 +184 +188 +189 +191 +190 +191 +194 +194 +197 +197 +199 +198 +199 +200 +200 +200 +200 +201 +202 +202 +204 +204 +204 +204 +205 +207 +207 +206 +206 +206 +207 +206 +207 +206 +206 +207 +206 +207 +206 +206 +204 +204 +204 +204 +205 +202 +202 +202 +202 +202 +200 +200 +200 +201 +199 +198 +196 +196 +197 +194 +194 +190 +191 +189 +188 +188 +185 +184 +182 +183 +183 +178 +179 +179 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +134 +133 +129 +130 +125 +126 +125 +119 +120 +115 +116 +110 +109 +109 +106 +106 +100 +100 +99 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +68 +68 +65 +64 +59 +59 +59 +54 +55 +51 +51 +51 +47 +47 +43 +43 +43 +41 +41 +36 +37 +36 +33 +33 +31 +31 +31 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +14 +13 +13 +14 +14 +14 +14 +14 +13 +13 +13 +14 +14 +13 +14 +14 +14 +13 +13 +14 +13 +13 +13 +13 +14 +14 +13 +13 +16 +16 +15 +17 +17 +19 +19 +22 +21 +21 +25 +25 +27 +27 +27 +31 +31 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +44 +47 +46 +50 +50 +50 +51 +51 +54 +54 +59 +59 +59 +64 +65 +68 +69 +68 +72 +72 +77 +76 +76 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +116 +119 +119 +119 +125 +125 +129 +129 +129 +133 +133 +139 +139 +144 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +164 +165 +169 +169 +169 +173 +173 +174 +175 +175 +179 +179 +183 +183 +185 +184 +185 +189 +189 +191 +190 +190 +195 +195 +196 +196 +197 +198 +199 +201 +201 +201 +201 +201 +202 +202 +203 +204 +204 +205 +204 +206 +207 +207 +206 +206 +206 +206 +206 +206 +207 +207 +207 +207 +206 +206 +207 +206 +206 +204 +205 +204 +204 +203 +202 +202 +200 +200 +200 +200 +201 +198 +198 +196 +197 +197 +195 +194 +195 +194 +194 +190 +190 +188 +189 +189 +185 +185 +182 +182 +179 +179 +179 +175 +175 +173 +173 +173 +168 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +137 +133 +133 +130 +130 +126 +125 +126 +120 +120 +115 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +83 +82 +82 +76 +76 +72 +72 +72 +68 +68 +69 +68 +68 +65 +64 +58 +58 +59 +55 +55 +50 +51 +51 +47 +47 +42 +42 +41 +40 +41 +37 +37 +33 +33 +33 +31 +31 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +20 +17 +17 +15 +15 +15 +14 +15 +13 +13 +12 +13 +13 +14 +14 +13 +14 +14 +13 +13 +13 +13 +14 +13 +14 +14 +13 +14 +14 +14 +13 +14 +14 +13 +13 +14 +13 +14 +14 +13 +13 +13 +15 +15 +15 +15 +15 +17 +17 +17 +19 +19 +21 +21 +23 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +50 +54 +54 +59 +58 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +115 +116 +116 +119 +120 +125 +125 +125 +129 +129 +134 +133 +133 +139 +140 +143 +143 +143 +147 +147 +151 +151 +152 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +182 +185 +185 +184 +189 +189 +191 +191 +191 +194 +194 +196 +196 +199 +198 +198 +200 +200 +200 +200 +200 +203 +203 +203 +202 +202 +205 +205 +204 +204 +204 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +204 +204 +204 +204 +204 +205 +204 +204 +202 +202 +201 +200 +201 +200 +200 +198 +198 +196 +197 +197 +194 +195 +191 +191 +190 +189 +188 +184 +185 +184 +182 +182 +179 +178 +178 +175 +174 +173 +172 +173 +169 +169 +165 +165 +160 +161 +160 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +134 +133 +129 +130 +125 +125 +125 +120 +119 +115 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +65 +65 +59 +59 +59 +55 +54 +55 +54 +54 +50 +51 +51 +51 +50 +47 +47 +43 +42 +43 +41 +40 +37 +37 +38 +33 +33 +31 +30 +28 +27 +27 +25 +25 +21 +21 +21 +19 +19 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +14 +13 +13 +14 +14 +14 +14 +13 +13 +13 +14 +14 +14 +13 +14 +14 +14 +14 +13 +13 +13 +14 +13 +14 +13 +14 +14 +14 +14 +14 +13 +13 +15 +15 +16 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +32 +37 +37 +40 +41 +41 +43 +43 +47 +47 +46 +50 +51 +54 +54 +55 +59 +59 +65 +65 +64 +68 +68 +72 +72 +73 +76 +76 +82 +82 +85 +86 +86 +90 +89 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +115 +116 +119 +119 +125 +126 +126 +129 +129 +133 +133 +140 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +182 +183 +183 +184 +184 +188 +188 +188 +190 +190 +191 +191 +190 +194 +194 +196 +197 +197 +199 +198 +200 +200 +200 +201 +200 +202 +202 +204 +205 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +207 +206 +206 +206 +205 +204 +204 +204 +205 +202 +202 +202 +200 +200 +200 +200 +201 +198 +198 +196 +197 +196 +195 +194 +190 +190 +191 +188 +189 +184 +185 +182 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +125 +126 +125 +119 +120 +115 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +73 +72 +68 +68 +64 +64 +64 +58 +58 +54 +55 +55 +51 +51 +47 +47 +42 +43 +43 +41 +41 +37 +37 +37 +33 +33 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +20 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +14 +14 +14 +14 +14 +13 +14 +13 +14 +14 +14 +14 +13 +14 +13 +13 +13 +13 +14 +13 +13 +14 +14 +13 +13 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +51 +54 +54 +58 +58 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +95 +96 +96 +100 +100 +106 +105 +109 +110 +110 +116 +116 +119 +119 +119 +125 +125 +129 +129 +129 +133 +133 +139 +140 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +168 +169 +172 +173 +175 +175 +175 +179 +179 +183 +182 +183 +184 +185 +189 +188 +190 +190 +191 +194 +194 +196 +196 +197 +198 +199 +200 +200 +200 +200 +201 +200 +201 +200 +202 +202 +204 +204 +204 +204 +205 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +203 +200 +200 +201 +201 +201 +199 +198 +196 +196 +197 +194 +194 +190 +190 +191 +189 +189 +184 +184 +184 +183 +182 +179 +179 +179 +175 +175 +174 +173 +173 +169 +169 +165 +165 +162 +161 +161 +158 +157 +151 +151 +151 +147 +147 +143 +143 +144 +139 +139 +133 +134 +133 +130 +129 +126 +125 +125 +120 +119 +116 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +68 +69 +64 +64 +58 +58 +58 +54 +55 +51 +51 +51 +47 +47 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +32 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +18 +17 +17 +17 +17 +15 +15 +15 +15 +16 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +14 +14 +13 +14 +14 +13 +14 +13 +13 +14 +13 +14 +14 +14 +13 +13 +14 +13 +13 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +40 +43 +43 +47 +46 +47 +51 +51 +54 +54 +55 +58 +58 +65 +64 +65 +68 +69 +72 +72 +72 +76 +76 +82 +82 +83 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +105 +110 +110 +115 +116 +116 +119 +120 +125 +125 +125 +129 +129 +133 +133 +133 +140 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +161 +160 +161 +165 +165 +169 +169 +169 +173 +173 +175 +174 +176 +179 +179 +183 +183 +185 +184 +185 +188 +188 +190 +191 +191 +195 +194 +195 +195 +194 +196 +196 +199 +199 +198 +200 +200 +200 +200 +202 +203 +202 +204 +204 +204 +204 +204 +206 +207 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +204 +205 +204 +204 +204 +202 +202 +200 +201 +200 +200 +200 +198 +198 +199 +199 +198 +196 +196 +195 +194 +194 +190 +190 +189 +188 +188 +189 +189 +185 +185 +183 +182 +183 +179 +179 +175 +175 +174 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +144 +140 +139 +139 +133 +134 +129 +129 +130 +125 +126 +120 +120 +120 +116 +116 +110 +109 +110 +106 +106 +100 +100 +101 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +72 +72 +72 +67 +68 +64 +64 +64 +59 +59 +54 +54 +52 +50 +51 +46 +47 +42 +43 +43 +41 +41 +37 +37 +37 +33 +33 +33 +33 +33 +31 +31 +26 +27 +27 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +13 +13 +14 +14 +13 +14 +13 +13 +14 +13 +14 +13 +13 +14 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +20 +19 +21 +21 +25 +25 +28 +27 +27 +31 +31 +33 +33 +34 +37 +37 +41 +40 +40 +43 +43 +47 +47 +47 +50 +50 +54 +54 +55 +58 +58 +65 +64 +69 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +99 +100 +106 +106 +106 +110 +110 +116 +115 +119 +120 +119 +125 +126 +129 +129 +130 +133 +133 +140 +140 +139 +143 +143 +147 +147 +147 +151 +151 +157 +156 +158 +161 +161 +165 +164 +168 +169 +169 +173 +172 +175 +175 +175 +179 +179 +178 +178 +179 +183 +183 +184 +185 +185 +189 +189 +190 +190 +194 +195 +195 +196 +196 +198 +199 +198 +200 +200 +201 +200 +200 +202 +203 +205 +204 +204 +204 +204 +206 +207 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +205 +204 +204 +204 +204 +202 +202 +201 +200 +201 +201 +200 +199 +198 +199 +197 +197 +194 +195 +191 +190 +191 +189 +189 +185 +185 +184 +183 +182 +179 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +144 +143 +143 +139 +139 +134 +134 +134 +129 +129 +126 +125 +126 +119 +120 +116 +115 +116 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +86 +86 +86 +82 +82 +76 +77 +76 +72 +72 +68 +68 +66 +64 +64 +59 +59 +54 +55 +54 +50 +50 +47 +46 +47 +43 +43 +42 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +29 +27 +27 +25 +25 +21 +20 +21 +19 +19 +17 +17 +17 +15 +15 +14 +15 +15 +13 +13 +12 +13 +14 +14 +13 +13 +14 +14 +14 +14 +14 +14 +14 +13 +13 +14 +14 +13 +13 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +12 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +55 +55 +54 +58 +58 +64 +64 +64 +68 +69 +72 +72 +73 +76 +76 +82 +82 +82 +86 +86 +90 +90 +91 +96 +96 +100 +100 +106 +106 +106 +109 +110 +116 +116 +116 +119 +120 +120 +120 +119 +126 +126 +129 +129 +130 +133 +134 +139 +139 +141 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +182 +182 +183 +185 +185 +188 +188 +189 +191 +190 +194 +194 +194 +196 +197 +198 +198 +198 +201 +201 +200 +200 +200 +200 +201 +202 +202 +204 +204 +204 +204 +205 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +204 +204 +205 +205 +204 +202 +203 +201 +201 +200 +200 +200 +198 +199 +199 +196 +196 +195 +195 +194 +190 +190 +189 +189 +189 +184 +184 +183 +183 +182 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +129 +129 +130 +126 +125 +119 +119 +119 +116 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +91 +86 +86 +82 +83 +77 +76 +76 +72 +72 +72 +72 +72 +68 +68 +69 +68 +69 +64 +64 +58 +58 +59 +54 +55 +51 +50 +48 +47 +47 +43 +43 +41 +41 +41 +37 +36 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +13 +14 +13 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +13 +14 +14 +13 +14 +14 +14 +13 +13 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +26 +27 +27 +31 +31 +33 +33 +33 +37 +36 +41 +41 +41 +43 +43 +47 +47 +47 +50 +50 +54 +55 +55 +59 +59 +65 +64 +65 +68 +68 +72 +72 +76 +76 +76 +82 +82 +82 +82 +82 +86 +86 +86 +86 +86 +90 +90 +96 +95 +96 +100 +100 +106 +106 +107 +109 +110 +116 +115 +119 +119 +119 +126 +126 +129 +129 +130 +133 +133 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +153 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +182 +183 +185 +185 +185 +189 +189 +191 +191 +194 +195 +194 +196 +197 +198 +199 +198 +200 +201 +201 +200 +200 +202 +202 +204 +204 +204 +204 +204 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +203 +200 +200 +200 +200 +201 +198 +198 +199 +196 +196 +194 +195 +191 +191 +190 +189 +188 +185 +185 +184 +183 +183 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +139 +139 +139 +133 +133 +129 +129 +130 +126 +125 +119 +119 +117 +116 +116 +110 +110 +105 +106 +106 +100 +100 +96 +96 +96 +90 +90 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +71 +68 +68 +65 +64 +58 +59 +58 +55 +55 +51 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +28 +27 +26 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +13 +14 +14 +13 +13 +14 +13 +13 +14 +14 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +20 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +36 +41 +41 +43 +43 +43 +47 +47 +51 +50 +55 +55 +54 +58 +59 +64 +64 +64 +68 +68 +72 +72 +73 +76 +77 +82 +82 +82 +86 +86 +90 +90 +91 +96 +96 +100 +100 +105 +106 +106 +110 +110 +116 +115 +116 +119 +119 +119 +120 +120 +126 +125 +129 +129 +129 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +178 +178 +183 +182 +184 +185 +184 +188 +189 +190 +190 +191 +194 +195 +197 +197 +196 +198 +199 +200 +200 +200 +201 +200 +202 +202 +202 +204 +205 +204 +204 +207 +207 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +207 +206 +206 +204 +204 +204 +205 +205 +202 +202 +202 +200 +200 +200 +201 +199 +198 +198 +196 +197 +195 +195 +195 +190 +191 +189 +189 +188 +184 +185 +183 +182 +182 +179 +179 +175 +175 +174 +173 +173 +168 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +131 +129 +129 +125 +126 +119 +120 +120 +116 +116 +116 +116 +115 +110 +110 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +87 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +69 +64 +64 +58 +58 +59 +55 +54 +51 +50 +51 +47 +46 +43 +43 +40 +41 +41 +36 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +16 +15 +15 +15 +14 +13 +13 +12 +13 +13 +13 +14 +13 +13 +14 +14 +14 +14 +13 +14 +14 +14 +14 +14 +14 +14 +13 +13 +14 +13 +13 +14 +14 +14 +13 +13 +15 +16 +15 +18 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +41 +41 +41 +42 +43 +47 +46 +47 +51 +50 +50 +51 +51 +55 +55 +58 +58 +58 +65 +64 +68 +68 +69 +72 +72 +76 +77 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +116 +119 +119 +119 +125 +125 +129 +130 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +168 +169 +169 +173 +172 +175 +175 +175 +178 +178 +183 +183 +183 +185 +184 +189 +189 +188 +191 +190 +194 +194 +195 +196 +197 +198 +199 +200 +201 +200 +201 +200 +202 +203 +203 +204 +205 +204 +204 +204 +206 +206 +206 +207 +206 +207 +206 +206 +206 +207 +207 +206 +206 +206 +204 +204 +204 +204 +204 +202 +203 +202 +200 +200 +201 +200 +200 +200 +200 +198 +198 +198 +197 +197 +195 +194 +195 +190 +191 +189 +188 +185 +184 +184 +183 +182 +179 +179 +178 +174 +175 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +162 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +133 +134 +133 +129 +129 +125 +125 +125 +120 +119 +115 +116 +111 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +68 +68 +64 +64 +58 +58 +59 +55 +54 +50 +51 +51 +47 +47 +43 +43 +43 +41 +41 +36 +37 +37 +33 +32 +31 +30 +31 +27 +27 +25 +25 +22 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +14 +13 +13 +14 +14 +13 +13 +13 +14 +13 +14 +13 +13 +13 +13 +14 +14 +14 +13 +13 +14 +14 +14 +14 +13 +12 +15 +15 +18 +17 +17 +19 +19 +21 +21 +26 +25 +25 +27 +27 +31 +31 +31 +33 +33 +33 +33 +33 +37 +37 +41 +41 +41 +42 +43 +47 +47 +47 +51 +50 +55 +54 +58 +58 +59 +64 +64 +68 +68 +69 +72 +72 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +95 +96 +96 +100 +100 +106 +106 +105 +109 +110 +115 +115 +115 +119 +120 +125 +126 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +158 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +178 +179 +183 +183 +184 +184 +189 +188 +189 +191 +190 +194 +194 +194 +196 +196 +198 +199 +199 +200 +201 +200 +201 +201 +202 +202 +204 +204 +204 +204 +204 +207 +206 +207 +206 +207 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +204 +204 +204 +204 +204 +203 +202 +201 +201 +201 +200 +200 +198 +198 +196 +197 +196 +194 +194 +190 +191 +190 +189 +188 +189 +188 +188 +185 +185 +183 +182 +182 +178 +179 +175 +175 +175 +172 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +151 +151 +151 +147 +147 +143 +144 +143 +139 +139 +133 +133 +130 +129 +129 +125 +126 +120 +119 +119 +115 +115 +110 +110 +110 +106 +106 +100 +99 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +69 +68 +65 +65 +58 +59 +58 +54 +55 +51 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +16 +13 +13 +12 +13 +14 +13 +13 +13 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +34 +34 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +51 +50 +55 +54 +54 +55 +55 +59 +58 +64 +64 +65 +68 +68 +72 +72 +75 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +116 +119 +120 +126 +125 +129 +129 +130 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +152 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +175 +175 +175 +178 +178 +182 +182 +183 +185 +185 +189 +188 +189 +191 +191 +195 +194 +194 +196 +196 +198 +198 +199 +200 +200 +200 +201 +203 +202 +202 +204 +204 +204 +205 +204 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +205 +205 +204 +205 +202 +202 +202 +201 +200 +200 +201 +200 +198 +198 +198 +199 +198 +196 +196 +194 +194 +195 +190 +191 +189 +189 +186 +184 +184 +182 +182 +179 +179 +179 +175 +175 +173 +173 +172 +169 +169 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +148 +147 +147 +143 +143 +139 +139 +139 +133 +134 +129 +129 +129 +125 +125 +119 +120 +119 +115 +115 +110 +110 +110 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +69 +68 +64 +64 +59 +58 +58 +54 +54 +51 +51 +46 +47 +47 +43 +43 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +14 +14 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +14 +14 +14 +14 +14 +13 +13 +14 +13 +14 +13 +14 +14 +13 +13 +12 +15 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +51 +54 +54 +55 +59 +59 +64 +65 +65 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +91 +96 +96 +100 +100 +105 +106 +106 +110 +110 +115 +116 +116 +120 +120 +125 +126 +125 +129 +129 +133 +133 +134 +139 +139 +143 +144 +143 +147 +148 +151 +151 +156 +157 +157 +161 +161 +165 +165 +165 +168 +169 +173 +173 +172 +175 +175 +179 +178 +179 +182 +183 +185 +185 +184 +189 +188 +190 +190 +195 +194 +194 +196 +196 +198 +198 +198 +200 +200 +201 +200 +200 +202 +202 +204 +204 +204 +204 +205 +206 +207 +207 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +204 +204 +204 +204 +204 +204 +205 +202 +202 +203 +201 +200 +200 +200 +199 +198 +198 +196 +196 +194 +194 +194 +190 +191 +188 +188 +188 +185 +184 +185 +185 +185 +183 +183 +179 +178 +179 +175 +175 +173 +172 +169 +169 +169 +165 +165 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +140 +133 +133 +129 +129 +125 +125 +126 +119 +119 +116 +116 +116 +110 +110 +110 +110 +110 +106 +106 +100 +100 +100 +96 +95 +90 +90 +90 +86 +86 +82 +82 +76 +76 +76 +72 +73 +68 +68 +68 +64 +64 +58 +58 +58 +54 +55 +50 +51 +51 +47 +47 +43 +43 +43 +41 +40 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +14 +14 +13 +13 +14 +14 +13 +13 +14 +14 +13 +13 +13 +13 +14 +13 +13 +14 +13 +14 +13 +13 +13 +13 +16 +15 +15 +17 +17 +19 +19 +19 +21 +21 +21 +20 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +36 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +51 +54 +55 +58 +58 +59 +64 +65 +69 +68 +69 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +110 +110 +115 +116 +119 +120 +119 +125 +125 +129 +129 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +168 +169 +169 +173 +173 +175 +175 +179 +178 +179 +183 +182 +185 +185 +185 +189 +189 +191 +191 +191 +195 +195 +196 +197 +197 +198 +198 +200 +200 +201 +201 +200 +202 +202 +204 +204 +205 +204 +204 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +205 +204 +204 +204 +202 +202 +202 +200 +200 +200 +200 +200 +198 +198 +198 +198 +198 +196 +196 +195 +194 +195 +190 +191 +188 +188 +188 +185 +184 +182 +183 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +158 +151 +151 +147 +147 +144 +143 +143 +139 +139 +133 +134 +133 +130 +129 +125 +125 +125 +120 +120 +116 +116 +115 +110 +109 +106 +105 +106 +100 +100 +95 +96 +91 +90 +90 +86 +86 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +65 +64 +58 +58 +58 +54 +54 +51 +51 +47 +47 +46 +43 +43 +42 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +22 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +14 +14 +14 +13 +14 +14 +13 +14 +14 +13 +13 +13 +13 +13 +14 +14 +13 +14 +13 +13 +14 +13 +13 +13 +13 +14 +13 +13 +13 +15 +15 +15 +17 +16 +19 +19 +20 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +42 +43 +42 +47 +46 +47 +50 +50 +54 +54 +58 +59 +59 +65 +65 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +109 +109 +110 +115 +115 +120 +119 +119 +125 +126 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +148 +151 +151 +157 +157 +162 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +174 +175 +179 +179 +183 +183 +183 +184 +185 +188 +188 +189 +191 +191 +194 +194 +197 +197 +196 +198 +198 +200 +200 +200 +200 +200 +200 +201 +200 +202 +202 +204 +204 +204 +205 +204 +207 +207 +207 +206 +206 +206 +207 +206 +207 +207 +206 +206 +206 +206 +207 +204 +204 +204 +205 +204 +204 +204 +202 +202 +203 +200 +201 +200 +200 +199 +198 +199 +197 +196 +194 +195 +194 +190 +190 +188 +188 +188 +185 +184 +183 +183 +183 +179 +178 +175 +174 +175 +173 +173 +169 +169 +167 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +130 +126 +125 +119 +120 +119 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +85 +82 +82 +76 +76 +76 +72 +72 +68 +68 +64 +65 +65 +59 +58 +55 +55 +55 +51 +51 +46 +47 +47 +43 +43 +41 +41 +41 +37 +36 +32 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +14 +13 +13 +13 +14 +13 +14 +14 +13 +14 +13 +13 +14 +13 +13 +14 +13 +14 +14 +14 +13 +13 +13 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +36 +40 +41 +43 +43 +43 +47 +47 +50 +51 +50 +55 +55 +59 +58 +58 +64 +65 +68 +68 +68 +73 +72 +76 +76 +76 +82 +82 +86 +86 +91 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +116 +119 +119 +120 +126 +125 +130 +129 +130 +133 +133 +139 +139 +144 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +176 +179 +179 +183 +183 +185 +185 +185 +188 +189 +190 +191 +191 +195 +195 +195 +194 +194 +197 +196 +199 +198 +198 +201 +201 +200 +200 +201 +203 +203 +205 +205 +204 +204 +204 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +205 +204 +204 +204 +205 +203 +202 +200 +201 +200 +201 +200 +199 +198 +199 +197 +197 +195 +195 +194 +191 +191 +189 +189 +189 +185 +185 +183 +183 +178 +179 +178 +175 +175 +173 +173 +173 +169 +169 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +130 +130 +126 +126 +119 +120 +119 +115 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +87 +86 +86 +82 +82 +76 +76 +76 +73 +72 +68 +68 +68 +64 +64 +58 +59 +59 +55 +54 +51 +51 +51 +47 +47 +42 +43 +42 +41 +41 +37 +37 +33 +33 +33 +31 +31 +31 +32 +31 +27 +27 +25 +24 +25 +21 +21 +19 +18 +20 +17 +17 +15 +14 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +13 +14 +14 +13 +14 +13 +14 +14 +14 +14 +13 +13 +14 +14 +13 +14 +14 +14 +14 +13 +13 +13 +13 +14 +14 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +31 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +42 +43 +47 +47 +50 +51 +51 +55 +55 +58 +59 +64 +64 +64 +69 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +101 +105 +106 +110 +110 +117 +116 +116 +120 +119 +125 +125 +125 +129 +129 +130 +129 +129 +133 +133 +140 +139 +139 +143 +143 +147 +147 +148 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +173 +173 +173 +175 +175 +179 +178 +179 +183 +183 +185 +185 +186 +189 +189 +191 +191 +194 +195 +194 +196 +196 +196 +196 +196 +199 +198 +198 +199 +199 +200 +201 +200 +200 +201 +202 +202 +204 +205 +204 +204 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +204 +204 +204 +204 +205 +202 +203 +200 +200 +201 +200 +200 +198 +199 +196 +197 +196 +194 +194 +191 +191 +191 +189 +189 +185 +185 +185 +183 +183 +178 +179 +178 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +134 +129 +129 +125 +125 +120 +119 +119 +116 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +77 +76 +72 +72 +68 +68 +68 +65 +65 +58 +58 +59 +54 +55 +51 +50 +50 +47 +47 +43 +44 +43 +40 +41 +37 +37 +35 +33 +32 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +18 +20 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +14 +14 +14 +13 +14 +14 +13 +14 +14 +13 +13 +14 +13 +13 +14 +14 +14 +13 +14 +14 +13 +14 +13 +14 +13 +13 +15 +14 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +43 +43 +42 +47 +47 +51 +51 +50 +54 +54 +58 +58 +58 +64 +64 +68 +68 +67 +72 +72 +76 +76 +77 +82 +82 +86 +86 +91 +90 +90 +96 +96 +100 +100 +100 +106 +106 +106 +106 +106 +110 +109 +116 +116 +116 +120 +119 +125 +126 +126 +130 +130 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +182 +183 +183 +184 +185 +189 +188 +189 +191 +190 +190 +191 +190 +194 +195 +196 +196 +197 +199 +198 +201 +200 +200 +201 +201 +202 +202 +204 +205 +204 +204 +204 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +207 +207 +206 +206 +204 +205 +204 +204 +204 +202 +202 +200 +200 +200 +200 +200 +198 +198 +198 +197 +196 +195 +194 +194 +190 +190 +189 +189 +188 +184 +185 +183 +183 +179 +179 +179 +175 +175 +172 +173 +173 +169 +169 +165 +165 +165 +161 +161 +156 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +134 +133 +133 +130 +129 +125 +125 +126 +119 +119 +119 +120 +120 +115 +116 +109 +110 +110 +106 +106 +100 +100 +101 +96 +96 +90 +90 +85 +86 +86 +82 +82 +76 +76 +76 +72 +73 +72 +73 +72 +68 +68 +64 +64 +65 +58 +58 +54 +54 +53 +50 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +32 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +14 +13 +12 +13 +13 +14 +14 +14 +14 +13 +14 +14 +13 +13 +13 +14 +14 +13 +14 +14 +14 +14 +13 +13 +13 +13 +13 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +38 +38 +41 +41 +41 +43 +44 +46 +47 +47 +50 +51 +54 +55 +55 +58 +58 +64 +65 +68 +69 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +116 +120 +119 +120 +126 +125 +129 +129 +129 +133 +133 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +153 +156 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +175 +175 +175 +179 +179 +183 +183 +183 +185 +184 +189 +188 +189 +190 +191 +194 +194 +196 +196 +196 +199 +199 +200 +200 +200 +200 +200 +202 +202 +202 +204 +204 +204 +204 +205 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +207 +206 +206 +207 +205 +204 +204 +204 +205 +202 +202 +203 +200 +201 +200 +200 +200 +198 +199 +196 +197 +194 +194 +195 +191 +191 +188 +189 +188 +185 +185 +183 +183 +183 +178 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +140 +133 +133 +129 +130 +129 +125 +125 +120 +119 +120 +115 +116 +109 +110 +107 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +69 +66 +64 +64 +59 +58 +55 +54 +54 +50 +50 +46 +47 +46 +43 +43 +43 +43 +43 +41 +41 +36 +36 +37 +33 +33 +31 +31 +29 +27 +27 +26 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +13 +14 +14 +13 +14 +14 +13 +13 +13 +14 +13 +13 +13 +14 +14 +14 +14 +13 +14 +14 +13 +14 +14 +13 +12 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +27 +27 +28 +31 +31 +33 +33 +33 +36 +37 +41 +41 +41 +43 +42 +47 +47 +51 +51 +50 +54 +54 +59 +59 +59 +64 +65 +68 +69 +69 +72 +72 +76 +77 +77 +82 +82 +86 +86 +87 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +116 +115 +115 +116 +119 +119 +125 +126 +125 +129 +129 +133 +133 +135 +139 +140 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +177 +178 +179 +182 +183 +184 +185 +184 +189 +188 +190 +191 +191 +195 +195 +196 +196 +196 +199 +198 +200 +201 +200 +200 +200 +203 +202 +204 +205 +205 +204 +204 +207 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +204 +204 +204 +204 +204 +202 +203 +201 +200 +200 +200 +200 +198 +198 +198 +196 +197 +195 +194 +195 +191 +190 +189 +189 +188 +185 +185 +183 +183 +183 +178 +178 +174 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +141 +133 +133 +130 +130 +125 +126 +125 +120 +119 +116 +115 +115 +110 +110 +110 +109 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +91 +86 +86 +82 +82 +76 +76 +76 +72 +72 +67 +68 +69 +64 +65 +64 +64 +65 +58 +59 +55 +55 +54 +51 +50 +47 +47 +43 +43 +42 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +16 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +13 +13 +14 +13 +14 +13 +14 +14 +13 +14 +13 +13 +14 +14 +13 +14 +14 +14 +14 +14 +14 +14 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +28 +31 +31 +33 +32 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +50 +51 +54 +54 +58 +59 +58 +65 +65 +68 +68 +68 +72 +72 +76 +76 +83 +82 +82 +86 +86 +90 +90 +90 +96 +96 +99 +100 +100 +106 +110 +110 +109 +110 +116 +116 +119 +119 +122 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +166 +169 +169 +172 +173 +174 +175 +175 +179 +179 +182 +183 +183 +185 +184 +189 +189 +189 +191 +191 +194 +194 +194 +197 +196 +198 +199 +199 +200 +201 +201 +200 +202 +202 +202 +204 +204 +204 +204 +204 +207 +206 +207 +206 +207 +207 +207 +207 +206 +206 +207 +206 +206 +207 +204 +205 +204 +204 +205 +202 +202 +202 +200 +201 +200 +200 +200 +198 +199 +197 +196 +197 +194 +195 +191 +191 +190 +188 +189 +185 +184 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +152 +147 +147 +143 +143 +139 +139 +139 +133 +133 +130 +129 +129 +125 +125 +126 +125 +125 +119 +119 +116 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +77 +76 +76 +76 +76 +72 +72 +68 +68 +69 +64 +64 +59 +59 +56 +54 +54 +51 +51 +47 +46 +47 +43 +43 +41 +41 +40 +37 +37 +33 +33 +33 +31 +31 +27 +27 +28 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +13 +14 +13 +13 +13 +13 +14 +13 +14 +13 +14 +13 +14 +14 +13 +14 +13 +14 +14 +14 +13 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +40 +41 +43 +43 +46 +47 +47 +50 +50 +54 +55 +55 +59 +58 +64 +64 +69 +69 +68 +72 +72 +76 +76 +76 +82 +82 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +102 +106 +106 +110 +110 +115 +116 +115 +119 +119 +125 +126 +125 +129 +130 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +148 +150 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +178 +182 +183 +183 +185 +185 +188 +190 +190 +190 +191 +195 +194 +194 +195 +194 +196 +196 +199 +199 +198 +200 +200 +201 +200 +200 +203 +203 +204 +204 +205 +204 +204 +206 +207 +207 +207 +206 +206 +206 +206 +207 +207 +207 +207 +206 +206 +206 +204 +204 +204 +204 +204 +203 +203 +200 +201 +201 +200 +200 +198 +198 +197 +197 +196 +194 +194 +190 +191 +191 +189 +188 +185 +184 +184 +182 +183 +179 +178 +178 +174 +174 +172 +173 +173 +169 +169 +165 +164 +162 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +140 +139 +134 +134 +134 +130 +129 +125 +126 +125 +120 +119 +115 +116 +109 +110 +110 +106 +105 +100 +100 +100 +96 +96 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +77 +73 +73 +72 +68 +68 +64 +64 +64 +58 +59 +55 +55 +55 +51 +51 +47 +47 +46 +42 +43 +41 +41 +41 +37 +37 +33 +33 +32 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +13 +12 +13 +14 +14 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +13 +13 +14 +13 +14 +14 +14 +13 +15 +15 +18 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +46 +47 +51 +50 +50 +54 +54 +58 +58 +59 +65 +65 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +83 +86 +86 +90 +90 +95 +96 +96 +100 +100 +106 +106 +106 +110 +110 +110 +110 +109 +116 +115 +119 +119 +120 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +164 +165 +169 +169 +169 +173 +173 +174 +175 +179 +179 +179 +183 +183 +185 +184 +184 +189 +188 +190 +190 +190 +194 +194 +196 +196 +196 +199 +199 +201 +200 +201 +201 +200 +202 +202 +205 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +204 +204 +205 +204 +204 +202 +202 +201 +200 +200 +200 +200 +198 +198 +197 +197 +197 +197 +196 +195 +194 +190 +190 +190 +188 +189 +184 +185 +185 +182 +183 +179 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +145 +143 +143 +139 +139 +134 +133 +134 +129 +129 +125 +125 +125 +119 +120 +119 +119 +119 +115 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +73 +69 +68 +68 +64 +64 +58 +59 +59 +54 +54 +50 +51 +47 +46 +47 +43 +43 +40 +41 +41 +37 +37 +33 +33 +32 +31 +31 +27 +27 +27 +25 +25 +21 +21 +22 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +13 +14 +14 +13 +14 +14 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +26 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +43 +43 +43 +47 +47 +51 +51 +50 +54 +54 +59 +58 +61 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +86 +86 +86 +90 +90 +96 +96 +96 +100 +101 +106 +105 +109 +110 +110 +116 +116 +119 +120 +119 +126 +125 +130 +130 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +148 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +168 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +183 +184 +185 +189 +189 +188 +190 +191 +194 +194 +197 +197 +196 +199 +198 +200 +200 +200 +200 +200 +202 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +204 +204 +204 +204 +204 +202 +202 +202 +200 +200 +200 +200 +201 +198 +198 +197 +196 +197 +194 +195 +190 +191 +188 +189 +188 +185 +184 +183 +182 +182 +178 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +162 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +134 +133 +133 +129 +129 +126 +125 +126 +119 +119 +116 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +65 +65 +58 +58 +59 +54 +54 +51 +51 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +38 +33 +33 +31 +31 +31 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +14 +13 +14 +14 +14 +14 +13 +13 +14 +14 +14 +13 +14 +13 +14 +14 +13 +13 +14 +12 +15 +15 +17 +17 +18 +19 +19 +22 +21 +26 +25 +25 +27 +27 +31 +31 +31 +33 +33 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +50 +50 +54 +54 +58 +58 +58 +64 +64 +72 +72 +72 +76 +76 +76 +76 +77 +82 +82 +86 +86 +86 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +110 +109 +115 +116 +120 +120 +119 +125 +125 +129 +129 +129 +134 +133 +139 +140 +140 +143 +143 +147 +147 +151 +152 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +172 +173 +175 +175 +174 +179 +178 +183 +182 +183 +184 +185 +189 +189 +191 +190 +191 +195 +194 +196 +196 +197 +198 +198 +200 +200 +200 +201 +200 +202 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +205 +205 +204 +204 +204 +202 +202 +202 +200 +201 +200 +200 +201 +198 +198 +197 +196 +194 +194 +195 +191 +191 +188 +188 +188 +185 +184 +185 +185 +185 +183 +183 +179 +179 +178 +175 +175 +173 +173 +174 +169 +169 +165 +165 +161 +161 +161 +156 +157 +151 +151 +151 +147 +147 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +130 +127 +125 +125 +120 +120 +115 +116 +115 +110 +109 +106 +105 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +72 +72 +72 +69 +68 +64 +64 +64 +58 +59 +55 +54 +55 +51 +51 +47 +47 +47 +43 +42 +41 +41 +41 +37 +37 +33 +32 +32 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +13 +14 +13 +14 +14 +13 +13 +14 +14 +14 +14 +13 +14 +13 +13 +13 +14 +13 +14 +14 +13 +13 +14 +14 +14 +12 +15 +15 +17 +17 +17 +19 +19 +21 +22 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +51 +51 +50 +54 +54 +58 +59 +59 +65 +64 +64 +65 +65 +68 +68 +72 +72 +72 +76 +76 +82 +82 +83 +87 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +109 +115 +116 +115 +119 +119 +126 +125 +125 +129 +129 +133 +133 +135 +139 +139 +143 +143 +146 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +168 +169 +173 +173 +173 +175 +175 +179 +179 +183 +182 +182 +185 +184 +188 +188 +188 +191 +190 +191 +190 +190 +194 +194 +197 +196 +196 +198 +199 +200 +200 +201 +200 +200 +202 +202 +205 +204 +205 +205 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +205 +204 +204 +202 +203 +200 +200 +200 +200 +200 +198 +199 +199 +196 +196 +196 +197 +196 +194 +194 +191 +190 +191 +188 +188 +184 +185 +185 +183 +183 +179 +178 +174 +175 +174 +173 +173 +169 +169 +169 +165 +165 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +144 +143 +143 +139 +140 +133 +134 +134 +129 +129 +125 +125 +125 +120 +119 +115 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +90 +90 +90 +86 +86 +83 +83 +82 +76 +76 +73 +73 +73 +68 +68 +64 +64 +64 +59 +59 +55 +54 +54 +50 +50 +47 +47 +44 +43 +43 +41 +40 +37 +37 +37 +33 +33 +31 +31 +31 +27 +26 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +12 +12 +13 +13 +13 +13 +13 +13 +14 +14 +13 +14 +14 +14 +13 +13 +13 +13 +14 +14 +14 +13 +14 +13 +13 +13 +13 +13 +12 +12 +15 +15 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +26 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +43 +42 +43 +47 +47 +51 +51 +51 +55 +55 +59 +59 +61 +65 +64 +68 +68 +72 +72 +72 +76 +77 +82 +83 +83 +86 +86 +90 +90 +91 +96 +96 +100 +100 +100 +106 +106 +110 +110 +115 +116 +116 +119 +119 +125 +125 +125 +129 +129 +134 +133 +134 +139 +139 +143 +143 +144 +147 +147 +151 +151 +151 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +182 +183 +185 +185 +184 +188 +188 +191 +191 +190 +195 +194 +196 +196 +199 +198 +199 +201 +201 +200 +200 +200 +202 +202 +205 +204 +204 +204 +204 +207 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +204 +204 +204 +205 +205 +202 +202 +203 +202 +202 +201 +200 +200 +200 +200 +198 +199 +196 +197 +197 +194 +194 +190 +191 +188 +189 +188 +185 +185 +183 +183 +182 +178 +179 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +163 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +126 +120 +119 +116 +116 +110 +110 +109 +106 +105 +100 +100 +101 +96 +96 +90 +90 +91 +86 +86 +82 +82 +82 +77 +76 +72 +72 +72 +68 +68 +64 +64 +59 +58 +58 +54 +54 +51 +50 +51 +47 +47 +42 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +13 +14 +13 +14 +14 +13 +13 +14 +14 +13 +13 +13 +14 +14 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +50 +51 +50 +55 +54 +58 +58 +58 +64 +64 +68 +69 +69 +72 +72 +76 +76 +76 +82 +86 +86 +86 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +116 +120 +120 +120 +126 +125 +129 +130 +129 +133 +133 +139 +140 +139 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +170 +169 +169 +172 +173 +175 +175 +175 +179 +178 +182 +183 +182 +184 +185 +189 +189 +191 +190 +190 +195 +195 +196 +196 +197 +198 +198 +200 +201 +201 +200 +200 +202 +202 +203 +204 +204 +204 +205 +205 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +205 +204 +205 +204 +204 +202 +202 +202 +200 +201 +200 +201 +200 +199 +198 +197 +197 +195 +194 +194 +191 +190 +189 +188 +188 +185 +184 +185 +185 +185 +183 +183 +178 +179 +179 +174 +175 +173 +173 +173 +169 +170 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +134 +129 +129 +125 +125 +120 +119 +119 +115 +116 +110 +110 +110 +105 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +68 +68 +68 +64 +65 +59 +58 +58 +55 +55 +51 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +14 +12 +13 +14 +13 +13 +13 +13 +13 +14 +13 +14 +14 +14 +13 +13 +14 +14 +14 +14 +13 +13 +14 +13 +14 +14 +13 +14 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +36 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +51 +51 +54 +54 +58 +58 +58 +64 +64 +68 +68 +69 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +109 +110 +116 +115 +119 +120 +119 +125 +125 +129 +129 +134 +133 +133 +139 +139 +143 +143 +143 +148 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +174 +175 +175 +175 +179 +179 +182 +182 +183 +185 +185 +185 +184 +184 +189 +189 +190 +191 +190 +194 +194 +196 +196 +196 +198 +198 +200 +200 +200 +200 +200 +202 +202 +204 +204 +204 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +205 +204 +204 +204 +205 +202 +202 +202 +200 +200 +200 +200 +200 +200 +201 +198 +198 +199 +196 +196 +195 +195 +192 +190 +191 +189 +189 +184 +185 +185 +183 +182 +178 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +140 +139 +133 +133 +134 +129 +129 +126 +126 +126 +120 +119 +116 +115 +116 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +65 +64 +64 +58 +58 +55 +54 +55 +51 +51 +47 +47 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +28 +25 +25 +21 +21 +20 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +14 +13 +14 +13 +14 +14 +13 +13 +13 +14 +14 +14 +13 +14 +14 +13 +13 +14 +14 +14 +14 +14 +14 +13 +13 +13 +13 +15 +15 +17 +17 +18 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +51 +54 +55 +55 +59 +58 +64 +65 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +116 +120 +120 +126 +125 +125 +130 +129 +133 +134 +133 +139 +139 +143 +143 +144 +147 +147 +151 +151 +158 +157 +157 +161 +161 +161 +161 +161 +164 +165 +169 +169 +169 +173 +173 +175 +175 +174 +179 +179 +182 +183 +183 +184 +185 +189 +188 +191 +191 +191 +194 +195 +197 +197 +196 +199 +199 +199 +198 +199 +200 +200 +201 +200 +200 +202 +203 +204 +204 +204 +204 +205 +206 +207 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +207 +206 +206 +206 +204 +204 +204 +204 +205 +202 +203 +201 +200 +201 +201 +200 +198 +199 +198 +196 +196 +194 +195 +195 +191 +190 +188 +188 +188 +184 +184 +183 +183 +183 +178 +179 +175 +174 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +140 +133 +133 +130 +129 +125 +125 +125 +119 +120 +115 +116 +115 +110 +109 +110 +109 +110 +106 +106 +100 +100 +100 +96 +96 +91 +90 +90 +86 +86 +82 +82 +76 +77 +76 +72 +72 +68 +68 +69 +65 +64 +58 +59 +58 +55 +55 +51 +50 +50 +47 +47 +43 +44 +43 +41 +41 +36 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +14 +13 +12 +13 +13 +14 +14 +13 +13 +14 +13 +13 +14 +13 +13 +13 +14 +13 +13 +14 +14 +13 +14 +14 +14 +14 +13 +13 +13 +14 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +50 +54 +54 +54 +58 +59 +64 +64 +65 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +116 +119 +119 +125 +125 +130 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +166 +169 +169 +173 +173 +174 +175 +175 +179 +179 +183 +182 +183 +184 +185 +185 +185 +185 +188 +189 +190 +191 +190 +194 +194 +196 +197 +196 +198 +198 +201 +200 +200 +200 +200 +202 +202 +204 +205 +204 +204 +204 +204 +204 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +204 +204 +205 +204 +204 +202 +203 +200 +201 +201 +200 +200 +198 +199 +199 +196 +197 +194 +194 +191 +191 +191 +188 +188 +185 +185 +184 +183 +183 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +152 +151 +151 +147 +147 +144 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +125 +120 +119 +115 +116 +116 +110 +110 +105 +105 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +68 +68 +64 +64 +65 +59 +58 +54 +54 +50 +50 +51 +47 +47 +43 +42 +43 +40 +41 +37 +37 +37 +32 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +14 +14 +14 +14 +14 +13 +14 +13 +14 +14 +14 +13 +13 +14 +13 +14 +14 +13 +13 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +46 +47 +50 +51 +54 +54 +58 +59 +58 +64 +64 +68 +68 +69 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +110 +110 +110 +115 +116 +120 +119 +119 +125 +125 +130 +130 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +148 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +172 +173 +174 +175 +174 +179 +179 +183 +182 +183 +185 +184 +189 +188 +189 +191 +191 +195 +194 +196 +196 +196 +199 +198 +200 +200 +201 +200 +200 +200 +200 +200 +203 +202 +204 +204 +205 +204 +205 +206 +207 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +204 +204 +204 +204 +205 +202 +203 +200 +201 +200 +200 +201 +198 +198 +196 +196 +197 +194 +195 +190 +190 +190 +188 +188 +185 +184 +184 +183 +183 +179 +179 +179 +174 +175 +173 +173 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +144 +139 +139 +134 +134 +133 +129 +130 +125 +125 +126 +119 +120 +116 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +91 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +74 +69 +69 +64 +58 +58 +58 +55 +55 +51 +50 +51 +47 +47 +47 +47 +46 +43 +42 +41 +41 +41 +37 +36 +33 +33 +32 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +17 +17 +17 +15 +15 +15 +15 +16 +13 +13 +12 +13 +14 +14 +14 +13 +13 +14 +14 +14 +13 +14 +13 +13 +13 +14 +14 +13 +14 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +12 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +46 +47 +47 +50 +50 +55 +54 +55 +58 +59 +65 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +83 +86 +86 +90 +90 +97 +96 +96 +100 +100 +106 +106 +106 +110 +110 +110 +110 +109 +115 +116 +120 +120 +119 +125 +125 +130 +130 +130 +133 +133 +140 +140 +143 +143 +143 +147 +147 +151 +151 +151 +156 +157 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +172 +173 +174 +175 +175 +179 +178 +182 +182 +183 +185 +184 +188 +189 +189 +190 +191 +191 +190 +190 +194 +194 +196 +196 +197 +198 +199 +201 +200 +200 +200 +200 +202 +202 +204 +204 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +207 +206 +207 +204 +205 +204 +204 +204 +203 +202 +200 +200 +200 +201 +200 +199 +198 +198 +196 +196 +195 +194 +195 +191 +191 +189 +188 +189 +185 +185 +182 +183 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +134 +133 +133 +129 +129 +125 +126 +126 +119 +119 +116 +116 +115 +110 +110 +105 +106 +106 +99 +100 +96 +96 +97 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +68 +68 +68 +65 +64 +58 +58 +58 +54 +54 +51 +51 +48 +47 +47 +43 +43 +41 +41 +41 +36 +37 +33 +33 +33 +31 +31 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +14 +14 +14 +13 +13 +13 +14 +14 +13 +14 +13 +13 +14 +14 +13 +13 +13 +14 +14 +14 +14 +13 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +42 +43 +47 +47 +50 +51 +50 +54 +54 +58 +58 +59 +65 +64 +69 +69 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +116 +119 +120 +126 +125 +125 +130 +130 +133 +133 +133 +139 +140 +139 +139 +139 +143 +143 +147 +147 +148 +151 +151 +157 +157 +158 +161 +161 +165 +165 +169 +169 +169 +173 +172 +175 +175 +175 +179 +178 +178 +178 +179 +182 +182 +185 +185 +185 +188 +189 +190 +190 +194 +194 +194 +196 +196 +198 +198 +199 +200 +200 +200 +200 +200 +202 +202 +204 +204 +204 +204 +205 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +205 +204 +202 +202 +200 +200 +200 +200 +200 +199 +198 +198 +196 +197 +195 +195 +191 +190 +190 +188 +188 +184 +184 +184 +183 +183 +179 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +152 +151 +151 +146 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +126 +125 +119 +120 +116 +116 +116 +110 +110 +106 +106 +99 +100 +100 +96 +96 +90 +90 +90 +87 +86 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +66 +64 +64 +58 +58 +54 +55 +55 +51 +51 +47 +47 +47 +43 +43 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +30 +28 +27 +27 +25 +25 +21 +22 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +14 +14 +13 +14 +14 +14 +14 +14 +14 +14 +14 +14 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +12 +15 +15 +17 +17 +20 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +36 +37 +37 +41 +41 +43 +43 +43 +47 +46 +51 +50 +55 +54 +55 +59 +59 +65 +65 +64 +68 +68 +73 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +116 +116 +119 +120 +120 +120 +120 +125 +125 +129 +130 +129 +134 +133 +139 +139 +141 +143 +143 +147 +147 +150 +151 +151 +157 +157 +161 +161 +161 +165 +165 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +181 +183 +183 +185 +185 +188 +188 +188 +190 +191 +194 +195 +194 +197 +196 +198 +198 +198 +200 +200 +200 +201 +201 +203 +203 +204 +204 +205 +205 +204 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +200 +200 +200 +200 +201 +198 +198 +196 +196 +196 +195 +195 +190 +190 +190 +188 +188 +185 +185 +184 +182 +183 +179 +179 +179 +174 +175 +173 +173 +170 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +134 +133 +134 +129 +129 +125 +125 +119 +119 +119 +116 +115 +110 +110 +110 +106 +106 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +87 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +59 +58 +59 +58 +59 +54 +55 +50 +51 +51 +47 +47 +43 +43 +42 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +12 +13 +13 +14 +14 +13 +13 +13 +14 +14 +14 +13 +13 +13 +14 +14 +14 +14 +14 +13 +13 +14 +14 +13 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +41 +41 +41 +43 +43 +46 +47 +47 +51 +51 +54 +54 +54 +59 +58 +64 +65 +64 +68 +68 +72 +72 +73 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +100 +100 +100 +106 +106 +110 +110 +110 +116 +115 +120 +119 +121 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +168 +169 +169 +173 +173 +174 +175 +175 +179 +179 +183 +182 +182 +184 +184 +189 +189 +189 +190 +190 +195 +194 +195 +196 +196 +198 +198 +199 +201 +201 +201 +200 +202 +202 +203 +205 +204 +205 +204 +204 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +204 +205 +204 +205 +204 +202 +203 +203 +201 +201 +201 +200 +200 +198 +199 +197 +196 +196 +194 +194 +191 +190 +190 +188 +189 +185 +185 +182 +182 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +138 +139 +140 +134 +133 +129 +129 +129 +125 +125 +126 +125 +125 +119 +119 +116 +116 +116 +110 +109 +106 +106 +106 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +76 +76 +76 +72 +72 +68 +68 +69 +64 +64 +59 +59 +55 +55 +54 +50 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +20 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +14 +14 +14 +14 +13 +13 +14 +14 +14 +13 +14 +13 +13 +14 +14 +14 +13 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +28 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +40 +42 +43 +47 +47 +47 +50 +50 +55 +54 +55 +59 +59 +64 +65 +69 +68 +68 +72 +72 +76 +76 +76 +82 +82 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +102 +106 +106 +110 +109 +115 +116 +116 +119 +120 +126 +125 +125 +129 +129 +129 +129 +130 +133 +133 +139 +139 +139 +143 +143 +147 +147 +151 +151 +151 +157 +157 +160 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +174 +175 +178 +179 +182 +182 +183 +185 +185 +188 +188 +190 +191 +190 +195 +194 +196 +197 +196 +198 +199 +200 +200 +200 +200 +200 +202 +202 +202 +204 +204 +205 +205 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +205 +204 +204 +204 +205 +202 +202 +202 +200 +201 +201 +201 +200 +198 +199 +196 +197 +195 +195 +194 +191 +191 +189 +189 +189 +184 +185 +185 +185 +185 +183 +183 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +162 +161 +161 +157 +157 +151 +151 +151 +147 +147 +147 +147 +147 +143 +143 +139 +139 +139 +133 +134 +129 +129 +130 +125 +125 +120 +120 +116 +116 +116 +110 +110 +106 +106 +106 +100 +100 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +73 +72 +68 +69 +68 +65 +64 +58 +58 +59 +55 +54 +50 +50 +50 +46 +47 +43 +43 +43 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +14 +14 +13 +14 +13 +13 +14 +13 +13 +13 +13 +14 +14 +14 +14 +13 +13 +13 +13 +13 +14 +14 +14 +13 +14 +13 +13 +16 +15 +15 +18 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +36 +37 +41 +41 +43 +43 +48 +47 +46 +50 +51 +55 +54 +54 +58 +58 +58 +58 +59 +64 +64 +68 +69 +68 +72 +72 +76 +76 +78 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +106 +106 +106 +110 +110 +115 +115 +115 +120 +119 +125 +126 +127 +130 +129 +133 +133 +139 +139 +139 +144 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +172 +173 +174 +175 +175 +178 +179 +183 +182 +183 +185 +185 +189 +189 +188 +190 +190 +194 +194 +194 +196 +197 +199 +198 +198 +200 +201 +201 +200 +202 +202 +202 +205 +204 +204 +204 +204 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +205 +205 +204 +204 +203 +202 +202 +200 +200 +200 +200 +200 +198 +198 +196 +196 +196 +194 +194 +190 +190 +189 +189 +189 +184 +185 +185 +182 +183 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +145 +143 +143 +139 +139 +133 +133 +133 +129 +129 +129 +129 +129 +125 +126 +126 +125 +126 +120 +119 +115 +115 +116 +110 +110 +105 +106 +101 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +65 +58 +58 +54 +54 +51 +50 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +14 +13 +14 +13 +14 +14 +13 +13 +14 +14 +15 +14 +13 +13 +13 +13 +14 +14 +14 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +23 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +46 +47 +50 +50 +51 +55 +55 +59 +58 +61 +64 +65 +68 +68 +72 +72 +73 +76 +76 +82 +82 +82 +86 +86 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +109 +110 +110 +115 +115 +120 +119 +119 +126 +125 +130 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +148 +151 +151 +157 +157 +160 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +174 +179 +178 +183 +183 +183 +184 +185 +188 +189 +188 +190 +191 +195 +194 +197 +196 +196 +198 +198 +200 +200 +200 +201 +201 +202 +202 +203 +204 +204 +204 +204 +204 +206 +206 +206 +207 +207 +206 +206 +207 +206 +207 +206 +207 +207 +207 +204 +205 +204 +204 +205 +202 +202 +202 +200 +201 +201 +200 +200 +199 +199 +196 +197 +197 +194 +194 +190 +190 +189 +189 +189 +185 +185 +183 +183 +183 +179 +178 +178 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +166 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +140 +140 +139 +139 +133 +133 +129 +129 +130 +125 +126 +120 +119 +116 +115 +110 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +83 +82 +76 +76 +77 +72 +72 +69 +69 +65 +64 +64 +58 +58 +54 +55 +55 +50 +50 +46 +47 +46 +43 +43 +40 +41 +41 +37 +37 +33 +33 +34 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +14 +13 +14 +14 +14 +14 +13 +14 +14 +13 +14 +14 +13 +13 +13 +15 +15 +16 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +50 +51 +55 +55 +59 +58 +58 +64 +64 +69 +68 +68 +73 +72 +71 +72 +72 +77 +76 +82 +82 +83 +86 +86 +90 +90 +90 +90 +90 +96 +96 +100 +100 +100 +105 +106 +110 +110 +110 +115 +115 +120 +119 +120 +126 +125 +129 +129 +130 +133 +133 +140 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +185 +185 +185 +189 +188 +191 +191 +191 +195 +194 +196 +197 +196 +198 +198 +200 +201 +200 +200 +201 +202 +202 +203 +205 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +205 +202 +203 +200 +200 +201 +200 +200 +198 +198 +196 +197 +197 +194 +195 +195 +194 +195 +191 +191 +189 +189 +189 +184 +184 +182 +182 +181 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +140 +140 +139 +133 +133 +129 +129 +129 +126 +126 +119 +119 +119 +115 +116 +110 +109 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +69 +68 +68 +64 +64 +59 +59 +59 +54 +55 +51 +51 +51 +47 +47 +42 +42 +42 +41 +41 +37 +37 +33 +33 +33 +31 +27 +27 +27 +27 +25 +25 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +16 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +14 +14 +14 +13 +14 +13 +14 +13 +14 +14 +14 +14 +13 +14 +13 +14 +13 +13 +13 +15 +15 +17 +17 +18 +19 +19 +21 +21 +20 +25 +25 +27 +27 +29 +31 +30 +33 +33 +37 +37 +37 +41 +40 +43 +43 +43 +47 +46 +47 +47 +47 +51 +50 +55 +54 +55 +59 +58 +65 +64 +67 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +117 +120 +120 +125 +125 +129 +129 +130 +133 +134 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +178 +178 +183 +183 +182 +185 +184 +189 +188 +188 +190 +191 +194 +195 +195 +196 +196 +199 +198 +201 +200 +200 +201 +201 +202 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +207 +207 +207 +206 +207 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +202 +200 +201 +201 +201 +200 +200 +200 +198 +198 +198 +197 +197 +194 +194 +192 +190 +191 +188 +189 +184 +184 +185 +183 +182 +178 +179 +179 +175 +175 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +159 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +140 +133 +133 +129 +130 +129 +125 +125 +119 +120 +120 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +58 +55 +54 +55 +51 +51 +47 +47 +47 +43 +43 +40 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +28 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +14 +13 +13 +14 +14 +13 +13 +13 +14 +14 +14 +13 +13 +14 +14 +14 +13 +13 +14 +13 +14 +14 +14 +14 +13 +14 +13 +14 +13 +12 +15 +15 +17 +17 +18 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +46 +46 +50 +50 +50 +55 +54 +58 +58 +59 +64 +64 +69 +68 +68 +73 +72 +76 +76 +76 +82 +82 +86 +86 +87 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +110 +110 +115 +115 +119 +119 +120 +125 +125 +129 +129 +130 +134 +133 +139 +139 +139 +143 +143 +147 +147 +151 +151 +151 +156 +157 +161 +161 +161 +166 +165 +169 +169 +169 +172 +173 +175 +175 +175 +178 +179 +183 +183 +182 +184 +185 +188 +188 +190 +191 +191 +195 +195 +196 +196 +196 +198 +198 +198 +198 +198 +200 +200 +201 +200 +200 +202 +203 +204 +204 +205 +205 +204 +207 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +205 +205 +202 +203 +201 +201 +201 +200 +200 +198 +198 +198 +196 +197 +195 +195 +195 +190 +191 +189 +188 +188 +184 +184 +183 +183 +183 +178 +179 +175 +174 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +158 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +134 +133 +129 +129 +125 +125 +125 +120 +120 +116 +116 +116 +110 +109 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +72 +72 +72 +69 +68 +64 +65 +64 +58 +59 +54 +55 +55 +50 +51 +46 +47 +47 +43 +43 +41 +41 +41 +37 +37 +32 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +16 +13 +13 +12 +13 +13 +13 +14 +14 +13 +13 +14 +13 +14 +14 +13 +14 +14 +13 +14 +13 +13 +14 +13 +14 +14 +13 +14 +14 +13 +13 +14 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +32 +33 +32 +37 +37 +41 +41 +41 +43 +43 +47 +47 +46 +50 +51 +54 +54 +55 +58 +58 +64 +65 +65 +69 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +99 +100 +106 +106 +106 +110 +110 +116 +116 +116 +120 +120 +126 +125 +129 +129 +129 +134 +133 +139 +139 +139 +143 +143 +147 +147 +147 +152 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +172 +173 +174 +175 +175 +179 +178 +183 +183 +183 +185 +185 +185 +184 +184 +189 +189 +190 +190 +190 +194 +194 +197 +196 +196 +199 +198 +200 +200 +201 +201 +200 +203 +202 +204 +204 +204 +204 +204 +204 +204 +204 +206 +207 +206 +206 +207 +207 +206 +206 +206 +207 +207 +207 +206 +206 +204 +204 +204 +204 +204 +203 +202 +203 +201 +200 +201 +200 +200 +200 +201 +199 +198 +198 +196 +197 +194 +194 +193 +191 +190 +188 +189 +184 +185 +184 +183 +182 +183 +183 +183 +179 +179 +175 +175 +174 +173 +173 +169 +169 +168 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +134 +129 +129 +129 +125 +126 +120 +119 +120 +116 +116 +110 +110 +105 +106 +106 +100 +100 +96 +96 +96 +90 +90 +90 +90 +90 +86 +86 +82 +82 +82 +77 +76 +72 +72 +73 +68 +68 +64 +64 +59 +58 +58 +54 +55 +51 +50 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +14 +14 +14 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +13 +14 +14 +14 +13 +14 +14 +14 +14 +14 +13 +14 +14 +13 +12 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +47 +47 +47 +51 +50 +55 +55 +55 +58 +58 +59 +58 +59 +65 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +116 +120 +119 +120 +125 +125 +130 +130 +130 +134 +133 +139 +139 +144 +143 +143 +147 +147 +151 +151 +151 +157 +161 +161 +161 +161 +164 +165 +169 +169 +169 +174 +173 +175 +175 +175 +178 +179 +182 +182 +185 +185 +185 +188 +189 +190 +190 +190 +194 +195 +196 +197 +196 +198 +198 +200 +201 +200 +200 +201 +202 +202 +203 +204 +204 +205 +204 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +205 +204 +205 +204 +202 +203 +200 +200 +200 +200 +200 +198 +199 +196 +197 +197 +195 +194 +191 +190 +191 +189 +188 +184 +184 +185 +182 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +158 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +130 +129 +129 +125 +125 +120 +119 +120 +115 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +58 +58 +54 +54 +50 +51 +50 +47 +47 +43 +43 +44 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +12 +13 +13 +14 +14 +13 +14 +14 +14 +14 +14 +13 +13 +14 +14 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +13 +14 +14 +13 +13 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +43 +42 +43 +47 +47 +51 +51 +51 +55 +54 +58 +59 +59 +65 +64 +69 +68 +73 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +116 +120 +119 +126 +125 +126 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +162 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +178 +183 +183 +183 +183 +182 +184 +184 +188 +188 +188 +191 +190 +194 +194 +195 +196 +197 +198 +198 +200 +200 +200 +201 +200 +202 +202 +202 +204 +204 +205 +204 +204 +204 +204 +207 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +205 +205 +204 +204 +204 +202 +202 +200 +201 +200 +200 +200 +198 +199 +199 +196 +196 +194 +195 +191 +190 +190 +189 +188 +185 +184 +185 +182 +182 +179 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +152 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +130 +129 +126 +125 +125 +119 +120 +116 +115 +116 +109 +110 +106 +106 +100 +100 +100 +95 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +65 +64 +58 +58 +55 +54 +52 +51 +51 +47 +46 +43 +43 +43 +41 +41 +41 +41 +41 +37 +37 +33 +33 +33 +30 +31 +27 +27 +28 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +14 +14 +13 +14 +14 +14 +13 +13 +14 +13 +13 +14 +14 +13 +14 +14 +13 +13 +13 +14 +14 +13 +14 +13 +13 +13 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +24 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +42 +43 +47 +47 +51 +51 +55 +54 +55 +59 +58 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +91 +96 +96 +100 +100 +106 +106 +106 +109 +110 +115 +116 +116 +119 +119 +126 +125 +125 +130 +129 +133 +133 +133 +139 +139 +143 +143 +144 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +183 +185 +185 +189 +189 +191 +191 +190 +195 +194 +196 +196 +197 +198 +199 +198 +199 +198 +201 +201 +201 +200 +201 +202 +202 +205 +205 +204 +204 +204 +207 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +207 +206 +207 +204 +204 +204 +204 +205 +202 +203 +200 +200 +200 +200 +200 +198 +198 +196 +197 +196 +194 +194 +191 +190 +190 +189 +189 +184 +184 +184 +182 +183 +179 +178 +179 +175 +175 +173 +173 +169 +169 +169 +165 +165 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +130 +126 +125 +126 +120 +119 +116 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +87 +82 +82 +76 +76 +73 +73 +73 +68 +68 +64 +64 +64 +58 +58 +54 +54 +54 +50 +51 +47 +47 +47 +43 +43 +40 +41 +39 +37 +36 +33 +32 +30 +31 +31 +27 +27 +25 +25 +25 +21 +21 +21 +21 +21 +19 +19 +17 +18 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +14 +13 +13 +14 +13 +13 +14 +13 +13 +13 +14 +14 +13 +14 +13 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +50 +55 +55 +55 +58 +58 +65 +64 +65 +68 +68 +72 +72 +72 +76 +77 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +105 +105 +106 +110 +110 +116 +116 +115 +119 +119 +125 +126 +126 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +148 +152 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +172 +173 +173 +175 +175 +179 +179 +182 +183 +183 +185 +185 +188 +188 +188 +191 +190 +191 +190 +191 +194 +194 +197 +197 +196 +198 +198 +200 +200 +201 +201 +200 +202 +202 +204 +204 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +204 +204 +204 +204 +205 +202 +202 +200 +200 +200 +200 +200 +199 +199 +198 +196 +197 +195 +195 +194 +190 +191 +189 +188 +189 +184 +185 +183 +182 +179 +179 +179 +175 +174 +173 +173 +172 +169 +168 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +134 +133 +133 +129 +129 +125 +126 +126 +119 +119 +116 +115 +115 +110 +110 +105 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +82 +82 +82 +76 +77 +72 +72 +72 +68 +68 +68 +68 +68 +64 +64 +58 +59 +59 +54 +54 +51 +51 +51 +47 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +14 +13 +14 +14 +14 +13 +14 +14 +14 +14 +13 +13 +13 +14 +13 +13 +13 +14 +14 +14 +13 +14 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +22 +25 +25 +27 +27 +31 +31 +30 +33 +33 +37 +36 +37 +41 +41 +43 +43 +43 +47 +47 +50 +51 +51 +55 +55 +58 +58 +59 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +87 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +105 +105 +106 +110 +109 +116 +116 +120 +119 +119 +126 +126 +129 +130 +129 +133 +133 +139 +140 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +158 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +178 +178 +178 +179 +178 +183 +182 +184 +184 +184 +189 +189 +190 +190 +192 +194 +195 +196 +197 +198 +198 +198 +200 +200 +200 +200 +200 +202 +203 +205 +204 +204 +204 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +204 +204 +204 +204 +204 +202 +202 +200 +200 +200 +200 +200 +198 +198 +199 +196 +196 +194 +194 +190 +190 +191 +188 +189 +184 +184 +185 +182 +183 +179 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +152 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +134 +134 +129 +130 +125 +125 +126 +119 +120 +115 +115 +116 +110 +110 +105 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +86 +86 +86 +82 +82 +76 +76 +76 +73 +72 +68 +69 +66 +64 +64 +58 +58 +55 +54 +54 +50 +50 +47 +47 +47 +43 +43 +42 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +16 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +13 +14 +14 +14 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +14 +14 +13 +14 +13 +13 +16 +15 +15 +17 +17 +20 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +46 +47 +51 +51 +56 +55 +55 +58 +59 +65 +65 +65 +68 +68 +72 +72 +73 +76 +77 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +107 +106 +106 +110 +110 +116 +116 +115 +120 +120 +125 +125 +126 +130 +129 +134 +133 +134 +139 +139 +143 +143 +144 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +168 +169 +169 +169 +169 +172 +173 +175 +175 +175 +179 +179 +183 +182 +184 +184 +185 +189 +189 +190 +191 +191 +194 +195 +197 +197 +197 +198 +198 +200 +200 +200 +201 +200 +202 +203 +203 +204 +205 +205 +204 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +204 +204 +205 +204 +205 +202 +202 +202 +200 +201 +200 +200 +199 +198 +198 +197 +197 +195 +194 +195 +190 +191 +189 +188 +189 +184 +185 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +166 +165 +165 +161 +161 +157 +157 +157 +151 +151 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +134 +129 +130 +125 +125 +119 +119 +120 +115 +116 +109 +109 +110 +106 +106 +106 +106 +105 +100 +100 +96 +96 +96 +90 +90 +86 +86 +87 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +65 +58 +58 +58 +59 +58 +55 +55 +51 +51 +51 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +14 +14 +14 +13 +14 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +14 +14 +13 +13 +14 +14 +14 +13 +13 +13 +15 +16 +15 +17 +17 +19 +19 +19 +21 +22 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +42 +41 +41 +43 +43 +47 +47 +47 +51 +51 +55 +54 +55 +58 +58 +64 +64 +64 +69 +68 +72 +72 +73 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +115 +119 +120 +126 +125 +126 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +151 +151 +151 +158 +157 +161 +161 +161 +164 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +178 +182 +183 +184 +184 +185 +188 +189 +191 +191 +190 +194 +195 +197 +196 +197 +198 +199 +200 +200 +200 +200 +201 +202 +203 +204 +205 +204 +204 +204 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +205 +204 +204 +204 +204 +203 +202 +200 +200 +200 +200 +200 +198 +198 +199 +196 +196 +195 +195 +194 +191 +191 +188 +189 +189 +184 +185 +183 +183 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +148 +143 +143 +139 +139 +133 +133 +134 +129 +129 +126 +125 +126 +120 +119 +119 +119 +120 +115 +116 +109 +110 +109 +106 +106 +100 +100 +98 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +72 +72 +72 +68 +68 +64 +64 +64 +58 +58 +55 +55 +51 +50 +50 +47 +47 +43 +43 +42 +40 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +14 +12 +13 +13 +14 +14 +14 +13 +14 +13 +13 +14 +13 +13 +14 +13 +13 +13 +14 +13 +14 +14 +13 +13 +14 +14 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +32 +31 +31 +33 +33 +37 +36 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +51 +54 +54 +58 +59 +59 +65 +64 +69 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +111 +115 +116 +119 +119 +125 +126 +125 +129 +129 +133 +133 +133 +139 +139 +139 +140 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +160 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +182 +182 +184 +185 +188 +188 +189 +190 +191 +194 +194 +196 +196 +197 +198 +198 +199 +201 +200 +201 +200 +202 +202 +202 +205 +205 +204 +204 +204 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +207 +204 +204 +204 +204 +204 +202 +202 +203 +200 +201 +201 +200 +200 +198 +198 +196 +196 +196 +194 +195 +190 +191 +188 +189 +188 +185 +185 +182 +183 +183 +179 +178 +175 +174 +175 +173 +172 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +152 +151 +148 +147 +147 +143 +143 +139 +139 +139 +133 +133 +133 +133 +134 +130 +130 +125 +125 +126 +119 +119 +115 +115 +116 +110 +110 +106 +105 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +65 +64 +64 +58 +58 +54 +55 +54 +50 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +13 +13 +13 +13 +14 +14 +13 +14 +13 +14 +14 +13 +14 +14 +14 +14 +14 +13 +13 +14 +13 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +40 +41 +43 +43 +47 +47 +47 +51 +51 +54 +54 +58 +58 +59 +64 +65 +68 +69 +68 +72 +72 +72 +72 +72 +76 +76 +81 +82 +82 +86 +86 +90 +90 +91 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +115 +119 +120 +119 +120 +119 +125 +125 +129 +129 +130 +133 +133 +139 +139 +141 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +184 +185 +185 +188 +188 +190 +190 +190 +194 +195 +197 +196 +197 +199 +199 +201 +200 +200 +200 +200 +202 +203 +204 +205 +204 +204 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +203 +200 +200 +200 +200 +199 +198 +198 +197 +197 +194 +195 +194 +190 +191 +188 +188 +188 +185 +185 +183 +182 +182 +179 +179 +175 +174 +175 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +150 +147 +147 +147 +143 +143 +139 +139 +140 +133 +133 +130 +130 +129 +125 +125 +119 +120 +115 +116 +115 +109 +110 +106 +106 +106 +100 +100 +99 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +83 +76 +76 +72 +72 +68 +69 +68 +64 +65 +58 +58 +58 +54 +54 +50 +51 +51 +46 +46 +42 +43 +43 +41 +41 +37 +37 +34 +33 +33 +31 +30 +27 +27 +27 +25 +25 +21 +21 +21 +20 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +13 +13 +14 +14 +14 +14 +14 +14 +14 +14 +14 +13 +13 +14 +14 +14 +14 +14 +13 +14 +13 +13 +13 +13 +16 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +36 +41 +41 +43 +43 +47 +47 +47 +50 +51 +55 +55 +55 +59 +58 +59 +59 +59 +64 +64 +68 +69 +68 +72 +72 +76 +76 +78 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +106 +106 +105 +110 +110 +116 +116 +116 +119 +119 +125 +126 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +175 +174 +175 +179 +178 +182 +183 +182 +185 +184 +189 +189 +189 +190 +190 +194 +194 +195 +196 +197 +198 +198 +198 +200 +200 +200 +200 +203 +202 +202 +204 +204 +204 +204 +205 +206 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +205 +203 +202 +202 +200 +201 +200 +200 +200 +198 +199 +196 +197 +197 +195 +194 +190 +190 +190 +188 +189 +185 +185 +185 +183 +183 +178 +179 +175 +174 +174 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +144 +144 +139 +139 +133 +133 +129 +129 +129 +126 +125 +120 +119 +120 +115 +116 +116 +116 +115 +110 +110 +105 +106 +106 +100 +100 +96 +96 +97 +90 +90 +86 +87 +83 +82 +82 +76 +77 +72 +72 +73 +68 +68 +64 +65 +65 +58 +59 +54 +55 +55 +51 +51 +47 +47 +45 +43 +43 +41 +41 +37 +37 +37 +33 +32 +33 +33 +33 +31 +31 +26 +27 +28 +25 +25 +21 +21 +22 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +13 +14 +14 +13 +13 +14 +14 +14 +14 +13 +13 +14 +14 +14 +13 +14 +14 +13 +13 +14 +14 +13 +13 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +26 +27 +27 +31 +31 +34 +33 +33 +37 +37 +41 +41 +41 +43 +42 +47 +47 +47 +50 +51 +54 +54 +55 +59 +58 +64 +64 +66 +68 +68 +72 +72 +76 +77 +76 +82 +82 +86 +86 +86 +90 +90 +90 +90 +90 +96 +96 +100 +99 +100 +106 +106 +110 +110 +115 +116 +115 +120 +119 +125 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +152 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +178 +182 +182 +185 +185 +185 +189 +189 +191 +191 +190 +195 +195 +197 +196 +199 +198 +198 +200 +200 +200 +200 +200 +202 +202 +204 +204 +204 +204 +205 +206 +206 +206 +206 +206 +206 +206 +207 +207 +207 +206 +206 +207 +207 +207 +205 +205 +204 +205 +205 +202 +202 +203 +203 +202 +200 +200 +200 +200 +201 +199 +199 +196 +196 +197 +195 +195 +191 +190 +188 +188 +189 +184 +185 +183 +183 +183 +179 +179 +178 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +163 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +139 +139 +139 +133 +133 +130 +129 +131 +125 +125 +119 +119 +115 +115 +116 +109 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +69 +68 +65 +64 +64 +58 +58 +54 +55 +55 +51 +50 +47 +46 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +14 +14 +14 +14 +14 +13 +14 +14 +14 +14 +14 +14 +13 +13 +14 +14 +13 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +46 +50 +50 +55 +55 +55 +59 +59 +65 +64 +64 +69 +68 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +88 +90 +90 +96 +96 +100 +100 +100 +106 +106 +106 +106 +106 +110 +110 +116 +116 +116 +119 +120 +125 +126 +126 +129 +130 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +183 +183 +183 +185 +185 +188 +189 +189 +190 +190 +195 +195 +195 +197 +197 +199 +198 +198 +200 +201 +200 +200 +200 +202 +203 +205 +205 +205 +204 +205 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +204 +205 +204 +204 +205 +202 +202 +200 +200 +200 +200 +200 +198 +198 +197 +196 +196 +194 +194 +190 +191 +191 +189 +188 +185 +185 +184 +183 +182 +178 +178 +177 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +157 +157 +157 +151 +151 +147 +147 +148 +143 +143 +139 +140 +134 +133 +134 +130 +130 +126 +125 +126 +120 +119 +116 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +82 +82 +82 +76 +76 +77 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +58 +58 +55 +55 +51 +51 +51 +47 +47 +43 +43 +41 +41 +41 +37 +36 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +20 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +13 +13 +14 +14 +13 +14 +13 +14 +14 +13 +13 +13 +13 +14 +14 +14 +13 +13 +14 +14 +13 +14 +13 +14 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +18 +21 +21 +25 +25 +25 +27 +27 +31 +31 +32 +32 +32 +37 +37 +40 +41 +41 +43 +43 +47 +47 +47 +50 +51 +50 +51 +51 +55 +55 +59 +58 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +82 +82 +82 +85 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +116 +119 +119 +124 +125 +125 +130 +129 +133 +133 +133 +140 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +178 +183 +182 +185 +185 +185 +188 +189 +190 +191 +191 +194 +195 +196 +197 +197 +198 +198 +200 +201 +201 +200 +200 +202 +202 +204 +204 +204 +205 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +207 +206 +204 +204 +204 +204 +205 +203 +202 +202 +200 +200 +200 +201 +200 +200 +200 +198 +198 +199 +196 +196 +194 +194 +193 +190 +190 +188 +189 +184 +184 +184 +183 +183 +179 +179 +179 +175 +175 +175 +175 +175 +173 +173 +168 +169 +169 +165 +165 +161 +161 +158 +157 +157 +151 +151 +147 +147 +147 +143 +143 +144 +143 +143 +139 +139 +133 +133 +134 +129 +129 +125 +126 +126 +120 +120 +115 +115 +111 +110 +109 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +68 +68 +64 +65 +59 +59 +58 +55 +55 +51 +51 +51 +47 +47 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +26 +25 +25 +21 +21 +19 +19 +19 +17 +17 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +13 +14 +14 +14 +13 +14 +13 +14 +14 +14 +14 +14 +14 +13 +14 +13 +13 +14 +14 +13 +13 +14 +14 +13 +14 +14 +12 +15 +15 +17 +17 +17 +20 +19 +21 +21 +21 +25 +26 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +40 +41 +41 +43 +43 +47 +47 +47 +50 +50 +54 +54 +55 +58 +59 +64 +65 +65 +69 +68 +72 +72 +72 +76 +76 +82 +82 +85 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +105 +106 +109 +110 +115 +115 +115 +119 +119 +125 +126 +126 +129 +130 +134 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +156 +157 +161 +161 +165 +165 +165 +169 +168 +173 +172 +173 +175 +175 +179 +179 +183 +182 +183 +184 +185 +189 +188 +188 +191 +191 +195 +194 +195 +196 +196 +199 +198 +198 +200 +201 +200 +201 +201 +202 +203 +204 +204 +205 +204 +205 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +206 +205 +206 +204 +204 +205 +204 +205 +203 +203 +200 +201 +200 +200 +200 +198 +198 +199 +197 +196 +197 +197 +196 +195 +194 +190 +191 +191 +188 +188 +184 +185 +183 +183 +183 +179 +179 +174 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +148 +143 +143 +140 +140 +139 +133 +133 +130 +130 +129 +126 +125 +120 +120 +119 +116 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +65 +65 +59 +58 +58 +55 +54 +50 +51 +50 +47 +47 +43 +43 +42 +41 +41 +37 +37 +33 +33 +32 +31 +31 +27 +27 +26 +25 +25 +21 +21 +21 +19 +19 +17 +17 +18 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +13 +13 +14 +13 +13 +14 +14 +13 +13 +13 +13 +14 +14 +13 +14 +14 +14 +14 +14 +14 +14 +13 +13 +14 +14 +14 +13 +12 +15 +15 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +50 +54 +54 +55 +58 +58 +65 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +109 +115 +116 +120 +120 +119 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +158 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +174 +179 +179 +183 +182 +183 +185 +184 +188 +188 +189 +190 +191 +194 +194 +195 +197 +196 +198 +198 +201 +200 +200 +200 +200 +202 +202 +202 +204 +204 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +203 +202 +203 +202 +202 +200 +200 +200 +200 +201 +198 +198 +196 +196 +196 +194 +195 +190 +190 +188 +188 +189 +184 +185 +183 +183 +182 +179 +179 +174 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +148 +147 +147 +143 +143 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +126 +119 +120 +115 +116 +110 +110 +110 +105 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +68 +68 +64 +65 +59 +58 +58 +54 +55 +50 +51 +50 +47 +47 +43 +43 +43 +41 +41 +36 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +14 +14 +14 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +42 +47 +47 +50 +51 +51 +55 +54 +59 +58 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +100 +100 +100 +106 +105 +110 +110 +110 +115 +115 +119 +119 +119 +126 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +152 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +172 +173 +175 +175 +174 +179 +179 +182 +182 +183 +184 +185 +189 +189 +190 +190 +190 +194 +195 +196 +196 +196 +198 +198 +200 +200 +200 +200 +200 +203 +203 +202 +204 +204 +204 +204 +205 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +205 +204 +204 +205 +202 +202 +200 +200 +201 +200 +201 +198 +199 +197 +197 +196 +194 +194 +190 +190 +190 +188 +189 +184 +184 +184 +182 +182 +178 +179 +179 +175 +175 +173 +173 +169 +168 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +119 +119 +119 +115 +116 +109 +110 +109 +106 +106 +100 +100 +100 +96 +96 +90 +90 +89 +86 +86 +82 +82 +83 +76 +76 +72 +72 +69 +68 +68 +64 +64 +58 +59 +59 +54 +55 +51 +51 +51 +47 +47 +42 +43 +43 +43 +42 +41 +41 +41 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +21 +21 +21 +19 +19 +17 +18 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +14 +14 +13 +14 +14 +13 +13 +14 +14 +14 +13 +13 +13 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +50 +51 +55 +54 +58 +58 +59 +64 +64 +68 +69 +68 +72 +72 +76 +76 +83 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +116 +119 +120 +120 +125 +125 +129 +129 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +168 +169 +173 +173 +175 +174 +179 +178 +179 +182 +183 +184 +184 +184 +189 +188 +189 +188 +188 +190 +191 +194 +194 +195 +196 +196 +198 +198 +199 +201 +201 +200 +200 +202 +202 +203 +204 +204 +204 +204 +204 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +204 +204 +204 +204 +205 +202 +203 +200 +200 +200 +200 +200 +198 +198 +198 +196 +197 +194 +195 +195 +190 +191 +188 +188 +184 +184 +184 +183 +183 +179 +179 +179 +174 +175 +173 +172 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +126 +125 +119 +119 +116 +116 +116 +110 +109 +105 +105 +106 +100 +100 +96 +96 +90 +90 +90 +87 +86 +82 +82 +82 +76 +77 +72 +72 +72 +69 +68 +64 +65 +65 +59 +59 +54 +54 +55 +50 +50 +47 +46 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +14 +13 +13 +14 +13 +14 +14 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +24 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +42 +43 +47 +47 +50 +51 +50 +54 +54 +59 +58 +65 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +109 +116 +115 +115 +120 +120 +125 +125 +126 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +152 +157 +157 +161 +160 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +175 +174 +175 +178 +179 +183 +183 +183 +184 +185 +189 +188 +189 +190 +191 +194 +194 +196 +197 +196 +198 +198 +200 +200 +200 +200 +201 +200 +200 +200 +202 +202 +204 +204 +205 +205 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +205 +204 +202 +202 +200 +201 +201 +200 +201 +198 +199 +196 +197 +196 +194 +195 +190 +190 +190 +188 +188 +184 +185 +185 +182 +182 +179 +179 +178 +175 +175 +173 +173 +173 +169 +168 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +140 +139 +133 +133 +133 +129 +129 +125 +126 +126 +119 +119 +115 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +77 +72 +72 +75 +69 +68 +64 +65 +58 +58 +58 +55 +55 +51 +51 +51 +47 +47 +47 +48 +47 +43 +43 +40 +41 +41 +37 +37 +33 +33 +34 +31 +31 +27 +26 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +14 +14 +13 +13 +14 +14 +13 +13 +14 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +13 +13 +14 +13 +13 +13 +13 +13 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +26 +31 +31 +31 +32 +33 +37 +37 +37 +41 +41 +43 +43 +47 +47 +47 +51 +51 +55 +55 +55 +58 +58 +58 +58 +59 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +91 +90 +90 +96 +96 +100 +100 +100 +105 +106 +110 +110 +110 +115 +116 +120 +120 +119 +126 +126 +129 +129 +130 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +174 +175 +175 +179 +179 +183 +183 +182 +184 +185 +188 +188 +188 +191 +190 +191 +190 +190 +195 +194 +196 +196 +197 +198 +199 +200 +200 +200 +201 +201 +203 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +207 +206 +206 +204 +204 +204 +204 +204 +202 +202 +201 +201 +200 +200 +200 +198 +199 +198 +196 +196 +195 +194 +195 +190 +190 +188 +188 +188 +185 +184 +183 +183 +179 +179 +179 +175 +175 +172 +173 +172 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +134 +133 +133 +129 +129 +125 +125 +125 +120 +120 +116 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +83 +82 +82 +76 +76 +72 +72 +72 +68 +68 +68 +68 +68 +64 +64 +58 +58 +58 +54 +51 +51 +50 +51 +47 +47 +47 +46 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +20 +19 +19 +17 +17 +15 +15 +14 +15 +15 +13 +13 +13 +12 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +13 +14 +14 +14 +14 +14 +13 +14 +14 +13 +13 +14 +14 +14 +13 +14 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +51 +54 +55 +54 +58 +58 +64 +64 +69 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +95 +99 +100 +106 +106 +106 +110 +110 +115 +115 +120 +119 +120 +126 +125 +125 +125 +126 +129 +129 +129 +129 +129 +134 +133 +140 +139 +139 +139 +139 +143 +143 +145 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +184 +185 +185 +188 +189 +191 +190 +191 +194 +194 +196 +196 +196 +198 +198 +201 +200 +201 +200 +201 +202 +202 +203 +204 +204 +204 +205 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +205 +204 +204 +204 +204 +202 +202 +203 +201 +200 +200 +200 +199 +198 +198 +196 +196 +194 +194 +195 +190 +191 +189 +188 +188 +184 +185 +183 +182 +183 +178 +179 +175 +174 +175 +173 +173 +169 +169 +166 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +140 +139 +133 +133 +129 +129 +130 +125 +125 +119 +119 +115 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +72 +72 +68 +68 +64 +64 +65 +59 +59 +54 +54 +54 +50 +50 +51 +50 +51 +47 +47 +43 +43 +43 +41 +41 +37 +36 +34 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +16 +13 +13 +12 +13 +14 +14 +13 +14 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +14 +13 +14 +13 +14 +13 +13 +14 +14 +13 +13 +13 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +34 +37 +37 +40 +41 +43 +43 +43 +47 +47 +50 +50 +51 +54 +55 +59 +59 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +77 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +99 +106 +106 +106 +106 +106 +110 +109 +115 +115 +115 +119 +119 +125 +125 +128 +129 +129 +133 +133 +140 +139 +139 +143 +143 +147 +147 +147 +151 +151 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +168 +171 +173 +173 +175 +174 +179 +179 +178 +183 +183 +184 +184 +185 +188 +189 +191 +190 +190 +194 +195 +196 +196 +196 +199 +199 +200 +200 +200 +200 +200 +202 +203 +204 +204 +204 +204 +204 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +205 +204 +204 +202 +202 +200 +200 +200 +200 +200 +199 +198 +198 +196 +196 +194 +195 +195 +191 +190 +188 +188 +188 +185 +185 +183 +182 +179 +178 +179 +175 +174 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +148 +143 +143 +139 +139 +133 +133 +133 +130 +129 +126 +125 +125 +119 +120 +120 +120 +119 +116 +115 +110 +110 +110 +106 +106 +100 +99 +98 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +72 +72 +72 +68 +68 +64 +64 +65 +58 +58 +54 +55 +51 +50 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +14 +13 +13 +14 +13 +13 +13 +13 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +13 +14 +13 +14 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +46 +47 +50 +51 +50 +54 +54 +59 +59 +59 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +86 +86 +86 +91 +90 +96 +96 +96 +100 +100 +106 +106 +107 +110 +110 +116 +116 +119 +120 +120 +125 +125 +129 +129 +129 +133 +133 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +156 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +172 +175 +175 +179 +179 +178 +182 +183 +184 +184 +185 +188 +188 +190 +191 +195 +195 +194 +196 +196 +199 +198 +198 +200 +201 +200 +200 +200 +202 +203 +204 +204 +204 +204 +205 +206 +206 +207 +206 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +205 +204 +204 +202 +202 +200 +200 +200 +200 +201 +198 +198 +199 +197 +197 +194 +194 +191 +190 +190 +188 +189 +185 +185 +185 +182 +183 +179 +179 +179 +175 +175 +173 +173 +172 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +140 +139 +140 +139 +133 +133 +129 +129 +129 +125 +125 +120 +119 +118 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +69 +68 +68 +64 +64 +59 +59 +58 +54 +54 +51 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +14 +13 +13 +14 +13 +13 +14 +13 +14 +14 +14 +13 +13 +14 +14 +13 +14 +13 +13 +15 +15 +17 +17 +20 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +46 +51 +51 +55 +55 +54 +58 +59 +64 +64 +64 +68 +68 +68 +68 +68 +72 +72 +76 +76 +77 +82 +82 +86 +86 +87 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +109 +116 +116 +115 +115 +116 +119 +120 +125 +126 +126 +129 +129 +133 +133 +135 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +164 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +182 +182 +182 +185 +184 +188 +188 +188 +190 +190 +194 +194 +194 +197 +196 +199 +198 +199 +200 +200 +200 +200 +200 +202 +203 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +205 +204 +204 +204 +204 +202 +203 +200 +200 +200 +200 +201 +198 +198 +196 +196 +196 +194 +194 +190 +191 +190 +189 +188 +184 +185 +184 +183 +183 +179 +178 +179 +175 +175 +173 +173 +168 +169 +169 +165 +165 +161 +161 +161 +157 +157 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +137 +133 +133 +129 +129 +125 +125 +125 +119 +119 +116 +115 +116 +110 +110 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +87 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +58 +59 +54 +54 +50 +51 +51 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +40 +41 +40 +43 +43 +47 +47 +47 +51 +51 +54 +55 +55 +59 +59 +64 +64 +64 +68 +68 +72 +72 +73 +76 +76 +81 +82 +86 +86 +86 +91 +90 +96 +96 +96 +100 +100 +100 +100 +100 +106 +106 +109 +110 +110 +116 +115 +119 +119 +125 +125 +125 +130 +130 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +160 +161 +161 +165 +165 +169 +169 +172 +173 +173 +175 +175 +179 +178 +179 +183 +182 +185 +185 +184 +188 +188 +191 +190 +190 +195 +194 +197 +196 +197 +198 +198 +200 +200 +200 +200 +200 +202 +204 +204 +204 +204 +204 +204 +207 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +204 +204 +205 +204 +205 +203 +202 +200 +200 +200 +200 +200 +198 +198 +198 +196 +196 +195 +194 +194 +190 +191 +188 +188 +189 +185 +185 +183 +183 +179 +178 +178 +175 +175 +172 +173 +173 +169 +169 +169 +169 +169 +165 +165 +160 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +139 +140 +139 +133 +133 +129 +129 +129 +125 +125 +125 +125 +125 +119 +119 +116 +116 +115 +110 +110 +106 +106 +107 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +58 +58 +55 +55 +52 +51 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +19 +19 +17 +17 +15 +15 +15 +16 +15 +13 +14 +13 +13 +13 +14 +14 +14 +13 +14 +14 +13 +14 +13 +13 +14 +13 +14 +13 +14 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +37 +37 +37 +41 +41 +43 +43 +42 +46 +47 +50 +51 +52 +55 +55 +59 +59 +64 +65 +64 +68 +68 +72 +72 +72 +76 +76 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +99 +100 +100 +106 +106 +110 +110 +110 +116 +115 +120 +119 +119 +126 +125 +129 +129 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +174 +175 +178 +179 +183 +183 +183 +184 +184 +188 +189 +191 +190 +190 +194 +194 +196 +196 +196 +198 +199 +201 +201 +200 +200 +201 +203 +203 +202 +204 +204 +204 +204 +205 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +203 +200 +200 +200 +200 +201 +198 +199 +197 +196 +195 +194 +195 +190 +190 +189 +188 +188 +185 +184 +185 +185 +182 +183 +179 +179 +178 +175 +175 +173 +173 +171 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +147 +147 +147 +143 +143 +139 +139 +140 +133 +133 +130 +129 +126 +125 +125 +119 +120 +116 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +73 +72 +72 +68 +68 +64 +64 +65 +59 +58 +55 +55 +55 +51 +51 +47 +47 +47 +42 +43 +41 +41 +41 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +14 +13 +13 +13 +13 +13 +14 +13 +13 +14 +14 +14 +14 +14 +14 +13 +13 +15 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +39 +41 +41 +43 +43 +47 +47 +47 +50 +50 +55 +55 +54 +59 +58 +58 +58 +58 +64 +64 +68 +68 +69 +72 +72 +76 +76 +81 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +116 +119 +119 +120 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +178 +179 +179 +183 +183 +185 +185 +184 +189 +188 +191 +190 +190 +194 +194 +196 +196 +196 +198 +199 +200 +201 +201 +200 +201 +202 +202 +205 +204 +204 +204 +204 +206 +207 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +204 +204 +205 +204 +204 +202 +203 +200 +200 +200 +200 +201 +199 +198 +199 +196 +197 +195 +195 +194 +191 +191 +189 +188 +188 +184 +184 +183 +182 +181 +178 +179 +175 +175 +173 +173 +173 +169 +168 +165 +165 +165 +161 +161 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +141 +139 +139 +133 +133 +129 +130 +129 +125 +125 +120 +120 +119 +115 +115 +110 +109 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +90 +89 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +65 +59 +58 +54 +55 +54 +51 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +30 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +12 +12 +13 +14 +13 +14 +13 +13 +14 +14 +13 +14 +14 +13 +13 +13 +13 +14 +13 +14 +13 +13 +14 +14 +13 +13 +14 +14 +13 +12 +15 +15 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +26 +27 +27 +31 +31 +32 +33 +33 +37 +37 +41 +41 +41 +43 +43 +43 +43 +43 +47 +47 +50 +51 +51 +55 +54 +58 +58 +62 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +89 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +115 +115 +115 +119 +120 +125 +125 +125 +129 +130 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +156 +157 +161 +161 +165 +165 +165 +169 +169 +172 +173 +173 +174 +175 +178 +178 +179 +182 +182 +184 +184 +184 +188 +189 +190 +191 +191 +195 +195 +197 +196 +199 +199 +199 +200 +200 +200 +200 +200 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +207 +207 +206 +206 +204 +204 +204 +204 +204 +202 +202 +202 +202 +202 +200 +200 +200 +200 +200 +198 +198 +196 +196 +197 +195 +195 +190 +190 +189 +189 +189 +184 +184 +182 +183 +183 +179 +178 +178 +178 +179 +175 +175 +173 +173 +173 +169 +169 +164 +164 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +130 +125 +125 +125 +119 +119 +116 +115 +110 +109 +110 +105 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +69 +65 +65 +58 +59 +58 +55 +55 +51 +50 +50 +47 +47 +43 +42 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +14 +14 +14 +13 +14 +13 +14 +14 +14 +13 +14 +14 +14 +13 +14 +14 +14 +13 +13 +14 +13 +14 +14 +13 +12 +15 +15 +17 +17 +18 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +33 +33 +33 +37 +37 +41 +41 +41 +42 +43 +47 +46 +49 +50 +50 +55 +54 +59 +58 +58 +64 +64 +68 +68 +69 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +99 +100 +100 +106 +106 +109 +110 +110 +115 +116 +120 +119 +119 +126 +125 +129 +129 +129 +134 +133 +139 +139 +139 +143 +143 +147 +147 +152 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +174 +175 +179 +179 +182 +183 +183 +184 +184 +188 +188 +189 +189 +188 +190 +190 +194 +194 +194 +197 +197 +199 +198 +198 +200 +201 +200 +200 +200 +202 +202 +204 +204 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +205 +204 +204 +204 +204 +202 +202 +201 +200 +200 +200 +200 +198 +198 +198 +196 +197 +194 +194 +194 +190 +191 +190 +191 +190 +188 +188 +185 +184 +185 +182 +183 +178 +178 +177 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +129 +129 +129 +126 +125 +119 +120 +120 +115 +115 +109 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +73 +72 +68 +68 +68 +64 +64 +57 +58 +58 +55 +54 +51 +50 +51 +46 +47 +42 +43 +43 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +16 +13 +13 +12 +13 +14 +13 +13 +13 +14 +13 +14 +13 +13 +13 +13 +13 +13 +14 +13 +14 +13 +14 +13 +13 +13 +14 +14 +14 +13 +13 +14 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +19 +18 +18 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +37 +40 +41 +41 +43 +43 +47 +47 +47 +51 +51 +54 +55 +55 +59 +58 +64 +64 +65 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +105 +106 +106 +110 +110 +115 +115 +116 +119 +120 +125 +125 +129 +129 +130 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +172 +176 +174 +175 +179 +178 +182 +183 +183 +184 +184 +188 +188 +188 +190 +190 +195 +195 +195 +196 +196 +198 +198 +198 +200 +200 +200 +200 +203 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +204 +205 +204 +204 +202 +202 +202 +200 +200 +200 +200 +200 +199 +198 +198 +198 +198 +196 +196 +194 +194 +195 +190 +191 +188 +189 +185 +185 +185 +183 +182 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +144 +143 +143 +140 +139 +133 +133 +133 +129 +129 +126 +125 +125 +120 +119 +115 +116 +117 +109 +110 +105 +106 +105 +100 +100 +96 +95 +91 +90 +90 +86 +86 +82 +82 +82 +76 +76 +73 +72 +72 +68 +68 +64 +64 +64 +58 +58 +54 +54 +55 +51 +50 +46 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +20 +17 +17 +15 +15 +16 +15 +15 +13 +13 +12 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +14 +14 +13 +15 +13 +14 +13 +13 +14 +14 +14 +13 +14 +14 +13 +13 +13 +13 +15 +15 +15 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +51 +55 +54 +58 +58 +64 +64 +65 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +109 +116 +116 +116 +119 +120 +125 +126 +125 +129 +129 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +160 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +179 +183 +182 +185 +185 +185 +188 +189 +190 +190 +191 +195 +194 +196 +196 +199 +198 +199 +200 +200 +200 +200 +200 +202 +202 +204 +204 +204 +204 +205 +206 +206 +207 +206 +206 +206 +207 +207 +206 +207 +206 +206 +206 +206 +206 +204 +205 +204 +204 +204 +203 +202 +203 +203 +202 +201 +200 +201 +201 +201 +198 +198 +196 +196 +197 +194 +194 +190 +190 +189 +189 +189 +185 +185 +183 +182 +182 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +158 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +140 +133 +134 +130 +130 +129 +125 +126 +120 +119 +120 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +77 +76 +76 +72 +72 +69 +68 +69 +65 +64 +58 +59 +55 +54 +54 +51 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +14 +13 +14 +13 +14 +14 +14 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +40 +43 +43 +43 +47 +46 +51 +50 +55 +54 +54 +58 +59 +65 +64 +64 +68 +69 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +116 +119 +119 +125 +125 +125 +130 +129 +134 +134 +133 +139 +139 +143 +143 +144 +147 +147 +152 +151 +158 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +178 +183 +183 +184 +185 +185 +189 +188 +190 +190 +194 +195 +194 +197 +197 +198 +198 +198 +200 +200 +200 +200 +200 +200 +200 +202 +202 +202 +204 +204 +204 +204 +205 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +203 +201 +200 +200 +200 +200 +198 +199 +196 +197 +196 +194 +195 +191 +191 +191 +189 +188 +185 +184 +185 +183 +183 +179 +178 +179 +175 +174 +172 +173 +168 +169 +168 +165 +164 +161 +161 +162 +157 +157 +157 +157 +158 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +125 +125 +126 +120 +120 +116 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +58 +59 +55 +54 +54 +51 +51 +46 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +14 +14 +14 +14 +14 +13 +13 +13 +13 +14 +13 +14 +14 +13 +14 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +13 +12 +15 +15 +18 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +36 +37 +37 +41 +41 +43 +43 +43 +46 +47 +50 +51 +50 +54 +55 +58 +58 +58 +65 +64 +68 +68 +69 +72 +72 +76 +76 +83 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +109 +110 +116 +116 +119 +120 +120 +125 +125 +130 +129 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +156 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +178 +179 +179 +183 +183 +184 +184 +185 +188 +188 +191 +190 +190 +194 +194 +197 +197 +196 +198 +198 +200 +201 +200 +200 +201 +202 +202 +204 +204 +204 +204 +205 +206 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +207 +204 +204 +204 +205 +205 +202 +203 +202 +200 +200 +201 +200 +200 +198 +199 +196 +197 +195 +194 +190 +190 +191 +188 +189 +185 +185 +182 +182 +182 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +119 +119 +115 +115 +109 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +87 +86 +86 +82 +82 +76 +76 +76 +72 +72 +72 +72 +72 +68 +68 +64 +64 +64 +58 +58 +54 +54 +55 +50 +51 +46 +47 +43 +43 +43 +41 +41 +36 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +20 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +14 +14 +13 +14 +14 +14 +13 +14 +13 +13 +14 +13 +13 +14 +13 +13 +14 +14 +14 +13 +14 +13 +13 +13 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +26 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +51 +54 +54 +54 +58 +58 +64 +64 +69 +68 +68 +72 +72 +76 +76 +76 +82 +82 +87 +86 +86 +90 +90 +95 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +116 +120 +120 +120 +125 +126 +129 +129 +130 +133 +134 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +158 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +178 +182 +183 +183 +184 +184 +188 +189 +189 +191 +190 +194 +195 +195 +196 +196 +198 +198 +200 +200 +200 +201 +201 +202 +202 +202 +204 +205 +205 +204 +204 +205 +204 +207 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +201 +200 +200 +200 +201 +199 +198 +199 +196 +197 +194 +194 +191 +191 +191 +188 +189 +184 +185 +185 +183 +183 +179 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +164 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +134 +133 +133 +130 +130 +126 +126 +125 +120 +119 +116 +116 +115 +110 +110 +106 +105 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +69 +68 +64 +65 +65 +59 +58 +55 +54 +50 +51 +51 +47 +46 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +30 +31 +27 +27 +25 +25 +26 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +14 +14 +14 +13 +14 +14 +14 +13 +13 +13 +14 +13 +14 +14 +14 +14 +13 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +27 +27 +27 +30 +31 +33 +33 +32 +37 +37 +41 +41 +41 +43 +42 +47 +47 +47 +51 +51 +54 +54 +58 +58 +58 +65 +64 +69 +68 +69 +73 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +110 +109 +109 +116 +115 +119 +120 +119 +125 +125 +129 +129 +129 +134 +134 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +160 +161 +161 +165 +165 +169 +169 +169 +173 +173 +173 +173 +173 +175 +175 +178 +179 +179 +182 +182 +184 +185 +186 +189 +189 +190 +190 +194 +194 +194 +197 +197 +198 +198 +198 +200 +200 +200 +201 +200 +200 +200 +203 +202 +203 +204 +204 +205 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +205 +204 +204 +204 +204 +202 +202 +203 +201 +201 +200 +200 +198 +198 +199 +196 +196 +194 +194 +195 +190 +190 +188 +188 +188 +184 +185 +183 +182 +183 +179 +179 +175 +175 +175 +173 +173 +168 +169 +166 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +119 +116 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +72 +72 +68 +68 +64 +65 +64 +59 +58 +54 +54 +55 +51 +51 +51 +51 +51 +47 +46 +43 +43 +43 +41 +41 +37 +37 +38 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +13 +14 +13 +14 +13 +14 +14 +14 +13 +13 +14 +14 +14 +14 +14 +14 +14 +13 +14 +13 +13 +13 +13 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +50 +50 +55 +55 +58 +58 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +115 +119 +119 +119 +125 +125 +129 +130 +130 +133 +133 +138 +139 +144 +143 +143 +147 +147 +151 +151 +151 +157 +157 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +174 +175 +175 +179 +179 +178 +178 +179 +183 +183 +184 +184 +185 +188 +188 +189 +189 +188 +190 +191 +195 +194 +195 +196 +197 +198 +198 +199 +201 +201 +200 +200 +202 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +204 +204 +204 +204 +204 +202 +202 +202 +200 +200 +201 +201 +201 +198 +199 +196 +196 +196 +195 +195 +190 +190 +190 +189 +189 +185 +184 +183 +182 +183 +178 +178 +175 +175 +174 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +158 +157 +151 +151 +151 +147 +147 +143 +143 +140 +140 +139 +133 +134 +129 +129 +130 +126 +126 +120 +119 +120 +116 +116 +110 +110 +110 +106 +106 +100 +100 +101 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +77 +76 +72 +72 +72 +72 +72 +68 +68 +64 +64 +64 +58 +59 +55 +54 +52 +50 +50 +47 +46 +43 +43 +43 +41 +41 +37 +37 +37 +32 +33 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +14 +14 +13 +14 +14 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +14 +14 +13 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +51 +55 +55 +55 +58 +58 +64 +65 +69 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +99 +106 +106 +106 +110 +110 +116 +115 +119 +119 +119 +125 +126 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +158 +161 +161 +165 +164 +169 +169 +169 +173 +173 +175 +175 +175 +179 +178 +179 +178 +178 +183 +182 +184 +185 +184 +189 +189 +191 +190 +191 +195 +195 +196 +197 +199 +199 +198 +200 +200 +200 +201 +201 +202 +202 +205 +204 +204 +204 +205 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +204 +204 +204 +204 +204 +204 +204 +203 +203 +202 +200 +200 +200 +200 +200 +199 +199 +196 +196 +195 +195 +194 +190 +191 +189 +189 +188 +185 +185 +183 +182 +182 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +158 +157 +157 +151 +151 +147 +147 +147 +143 +143 +143 +143 +143 +139 +140 +133 +133 +133 +129 +129 +125 +125 +126 +119 +119 +115 +116 +109 +110 +110 +106 +106 +99 +100 +100 +96 +96 +96 +96 +96 +90 +90 +87 +86 +86 +82 +82 +76 +76 +77 +72 +72 +68 +68 +64 +65 +64 +59 +58 +55 +55 +55 +50 +50 +50 +50 +50 +47 +46 +43 +43 +43 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +22 +19 +19 +17 +17 +17 +15 +16 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +14 +14 +13 +14 +14 +13 +13 +13 +13 +13 +13 +14 +14 +13 +14 +14 +14 +13 +13 +16 +15 +16 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +47 +47 +47 +51 +50 +55 +55 +54 +58 +58 +64 +64 +64 +68 +69 +72 +72 +72 +76 +76 +82 +82 +83 +86 +86 +90 +90 +96 +96 +95 +100 +100 +106 +105 +106 +110 +109 +110 +110 +110 +116 +115 +119 +120 +119 +126 +125 +129 +129 +131 +134 +134 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +172 +174 +175 +175 +178 +179 +183 +182 +183 +185 +184 +189 +189 +189 +190 +190 +195 +195 +194 +197 +197 +198 +198 +199 +201 +200 +201 +201 +202 +202 +203 +204 +204 +204 +204 +204 +207 +207 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +207 +206 +207 +205 +204 +204 +205 +203 +202 +202 +200 +200 +200 +200 +200 +199 +198 +196 +196 +196 +195 +194 +191 +190 +191 +188 +188 +184 +185 +184 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +133 +133 +133 +129 +129 +126 +125 +125 +120 +120 +115 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +93 +90 +90 +86 +86 +82 +82 +82 +77 +76 +72 +73 +72 +69 +68 +68 +68 +68 +64 +64 +58 +59 +59 +55 +54 +51 +51 +47 +47 +46 +43 +42 +41 +41 +41 +37 +37 +33 +32 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +14 +14 +14 +14 +13 +14 +14 +13 +13 +13 +13 +13 +14 +14 +13 +13 +14 +13 +13 +13 +13 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +50 +51 +54 +54 +54 +58 +58 +64 +64 +65 +68 +69 +72 +72 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +110 +112 +115 +116 +120 +119 +125 +125 +125 +129 +129 +133 +134 +134 +139 +139 +139 +139 +139 +143 +143 +148 +147 +147 +151 +151 +157 +157 +160 +161 +161 +165 +165 +168 +169 +169 +173 +173 +175 +174 +175 +178 +179 +183 +183 +182 +185 +184 +188 +188 +189 +190 +191 +195 +195 +196 +197 +196 +198 +199 +200 +200 +200 +201 +200 +202 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +205 +205 +204 +203 +202 +202 +200 +200 +201 +200 +200 +199 +198 +197 +197 +196 +195 +194 +190 +190 +188 +189 +189 +185 +185 +183 +182 +183 +179 +178 +174 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +147 +146 +147 +144 +143 +139 +140 +139 +133 +133 +130 +129 +130 +126 +125 +120 +120 +119 +115 +115 +109 +110 +108 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +82 +82 +82 +76 +76 +72 +72 +73 +68 +68 +65 +64 +59 +59 +58 +54 +54 +50 +50 +51 +47 +47 +43 +43 +43 +40 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +22 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +14 +13 +13 +14 +14 +14 +14 +14 +14 +13 +14 +13 +14 +14 +14 +13 +13 +14 +13 +14 +14 +14 +13 +14 +13 +13 +15 +15 +17 +17 +18 +19 +19 +21 +21 +26 +25 +25 +27 +27 +31 +31 +31 +33 +34 +37 +37 +37 +41 +41 +43 +43 +43 +47 +46 +51 +51 +51 +54 +54 +58 +58 +64 +64 +64 +69 +68 +72 +72 +72 +76 +76 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +97 +100 +100 +106 +106 +110 +110 +109 +116 +115 +119 +120 +120 +125 +125 +125 +125 +126 +129 +129 +133 +133 +133 +140 +140 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +172 +173 +173 +175 +175 +179 +179 +179 +183 +183 +184 +184 +188 +188 +189 +190 +190 +194 +194 +195 +197 +196 +199 +199 +199 +200 +200 +200 +200 +200 +202 +203 +204 +204 +205 +204 +204 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +204 +204 +204 +204 +204 +202 +203 +200 +201 +201 +200 +200 +198 +198 +197 +196 +196 +195 +195 +190 +191 +190 +189 +189 +185 +184 +184 +182 +183 +179 +179 +179 +174 +175 +173 +173 +173 +169 +169 +165 +165 +160 +161 +161 +157 +157 +151 +151 +151 +147 +147 +147 +147 +147 +143 +143 +139 +140 +139 +133 +133 +129 +129 +127 +125 +125 +119 +119 +115 +116 +116 +110 +110 +106 +106 +106 +100 +100 +100 +100 +100 +95 +96 +90 +90 +90 +86 +86 +82 +82 +79 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +58 +58 +54 +55 +51 +51 +51 +46 +47 +42 +43 +43 +41 +41 +37 +36 +36 +34 +33 +31 +31 +26 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +14 +13 +13 +14 +14 +14 +13 +13 +13 +14 +13 +13 +13 +14 +14 +14 +14 +13 +13 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +34 +37 +37 +41 +41 +42 +43 +43 +47 +47 +51 +51 +50 +54 +55 +55 +54 +54 +59 +58 +64 +65 +64 +68 +68 +72 +72 +73 +76 +77 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +100 +100 +100 +106 +106 +110 +110 +110 +116 +116 +119 +120 +125 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +144 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +172 +173 +173 +175 +175 +179 +179 +178 +183 +183 +184 +184 +184 +188 +188 +191 +190 +190 +195 +194 +196 +196 +197 +198 +198 +200 +200 +201 +200 +200 +202 +202 +204 +204 +204 +204 +204 +204 +204 +204 +207 +206 +206 +206 +206 +206 +207 +206 +206 +207 +207 +206 +206 +206 +205 +204 +204 +204 +204 +202 +202 +202 +200 +200 +200 +201 +200 +199 +198 +196 +196 +196 +195 +194 +190 +191 +191 +188 +188 +184 +184 +183 +182 +182 +178 +179 +175 +175 +174 +173 +173 +169 +169 +169 +164 +165 +161 +161 +161 +157 +157 +151 +150 +150 +147 +147 +144 +144 +139 +139 +139 +133 +133 +129 +130 +129 +126 +125 +125 +125 +124 +120 +119 +116 +115 +116 +110 +110 +106 +106 +102 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +65 +58 +58 +55 +55 +51 +50 +50 +46 +46 +43 +43 +43 +40 +40 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +16 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +14 +13 +14 +13 +13 +14 +14 +14 +14 +13 +14 +13 +14 +14 +14 +14 +13 +14 +13 +13 +14 +14 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +41 +41 +41 +43 +43 +47 +46 +47 +51 +51 +55 +54 +56 +58 +58 +64 +64 +68 +69 +68 +72 +72 +76 +76 +76 +82 +82 +82 +82 +82 +87 +86 +90 +90 +90 +96 +96 +100 +100 +102 +106 +106 +110 +110 +115 +115 +115 +119 +120 +125 +125 +126 +130 +129 +133 +133 +133 +139 +139 +143 +143 +144 +147 +147 +151 +151 +156 +157 +157 +161 +161 +165 +165 +165 +168 +169 +173 +173 +172 +175 +174 +178 +179 +179 +182 +182 +185 +185 +184 +189 +188 +190 +190 +194 +194 +194 +197 +196 +199 +198 +198 +200 +200 +200 +200 +201 +200 +201 +202 +202 +202 +204 +204 +204 +204 +204 +206 +207 +206 +206 +207 +206 +206 +207 +207 +206 +206 +206 +206 +206 +204 +205 +204 +204 +204 +203 +202 +202 +200 +201 +200 +201 +201 +198 +199 +197 +196 +194 +194 +194 +190 +190 +189 +188 +188 +185 +184 +185 +185 +184 +183 +183 +178 +178 +179 +175 +175 +173 +173 +171 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +152 +147 +147 +147 +147 +147 +143 +143 +139 +139 +140 +133 +133 +129 +129 +127 +125 +126 +120 +119 +116 +115 +116 +109 +110 +105 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +77 +73 +72 +72 +68 +68 +65 +64 +64 +58 +58 +59 +59 +58 +55 +54 +51 +51 +50 +47 +46 +43 +43 +43 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +13 +14 +14 +14 +14 +13 +14 +14 +14 +14 +14 +13 +13 +14 +14 +13 +14 +14 +13 +14 +14 +13 +14 +13 +14 +13 +12 +15 +15 +17 +18 +17 +19 +19 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +42 +41 +40 +43 +43 +47 +46 +47 +50 +51 +51 +51 +51 +54 +55 +58 +59 +58 +64 +64 +68 +69 +67 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +116 +120 +119 +125 +125 +125 +129 +129 +130 +129 +129 +133 +133 +140 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +156 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +178 +179 +182 +183 +182 +184 +184 +188 +188 +188 +190 +191 +194 +195 +195 +197 +196 +198 +199 +201 +200 +201 +200 +200 +202 +202 +203 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +202 +200 +200 +201 +200 +200 +200 +200 +198 +199 +198 +197 +196 +194 +194 +193 +190 +190 +188 +189 +185 +184 +185 +182 +183 +179 +178 +179 +175 +175 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +130 +125 +126 +119 +120 +120 +115 +115 +109 +110 +106 +106 +105 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +69 +65 +64 +58 +59 +55 +54 +54 +51 +50 +47 +46 +47 +42 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +26 +27 +27 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +16 +15 +13 +13 +13 +13 +14 +14 +14 +14 +13 +13 +14 +14 +14 +13 +14 +14 +13 +13 +13 +13 +13 +14 +14 +14 +14 +13 +13 +14 +14 +14 +13 +13 +13 +12 +15 +15 +17 +17 +18 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +33 +33 +33 +37 +37 +40 +41 +41 +43 +43 +47 +47 +49 +50 +50 +55 +54 +58 +58 +58 +64 +65 +69 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +100 +99 +100 +106 +106 +110 +109 +110 +116 +115 +120 +120 +119 +125 +125 +129 +129 +129 +133 +134 +139 +139 +140 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +183 +185 +184 +188 +189 +191 +190 +190 +194 +195 +196 +196 +196 +198 +198 +198 +198 +198 +200 +200 +200 +201 +200 +202 +202 +204 +205 +205 +204 +204 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +204 +204 +204 +204 +205 +202 +202 +201 +200 +201 +200 +200 +198 +199 +199 +196 +196 +195 +194 +194 +190 +191 +190 +191 +190 +188 +188 +185 +184 +184 +183 +182 +178 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +160 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +120 +119 +116 +116 +110 +110 +110 +106 +106 +100 +99 +100 +96 +95 +90 +90 +90 +86 +86 +82 +82 +77 +76 +77 +72 +72 +68 +68 +68 +64 +64 +58 +58 +59 +54 +55 +51 +51 +51 +47 +47 +43 +43 +43 +40 +40 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +26 +25 +21 +21 +21 +18 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +14 +13 +14 +14 +13 +14 +14 +14 +14 +14 +14 +13 +14 +13 +14 +14 +13 +14 +13 +13 +13 +13 +13 +13 +14 +13 +14 +13 +16 +15 +17 +17 +17 +19 +19 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +32 +31 +33 +33 +37 +37 +41 +40 +41 +43 +43 +47 +47 +47 +51 +50 +54 +55 +54 +59 +58 +64 +64 +65 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +95 +96 +100 +100 +105 +106 +106 +110 +110 +116 +115 +115 +119 +119 +126 +125 +129 +129 +130 +133 +133 +139 +139 +139 +143 +144 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +175 +174 +175 +179 +178 +182 +183 +183 +185 +185 +189 +188 +189 +190 +191 +194 +195 +195 +196 +196 +198 +198 +199 +200 +200 +200 +201 +203 +202 +202 +205 +205 +204 +204 +205 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +205 +204 +204 +204 +204 +203 +202 +200 +200 +200 +200 +200 +200 +200 +200 +198 +198 +197 +197 +197 +195 +195 +191 +190 +189 +188 +189 +185 +184 +182 +182 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +120 +119 +119 +115 +116 +110 +110 +109 +106 +106 +100 +100 +96 +96 +96 +91 +90 +85 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +59 +59 +54 +54 +51 +51 +48 +46 +47 +42 +43 +41 +41 +41 +37 +37 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +26 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +12 +13 +14 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +14 +13 +13 +14 +13 +14 +14 +13 +14 +13 +14 +14 +14 +14 +13 +13 +12 +15 +15 +17 +17 +18 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +36 +37 +41 +41 +43 +43 +43 +47 +46 +50 +50 +54 +54 +54 +59 +58 +64 +64 +64 +68 +68 +69 +69 +68 +72 +73 +76 +76 +76 +82 +82 +86 +86 +86 +91 +90 +96 +96 +99 +100 +100 +106 +106 +109 +110 +110 +115 +116 +116 +116 +116 +119 +119 +125 +125 +125 +129 +129 +133 +133 +134 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +161 +160 +161 +165 +165 +169 +169 +169 +173 +173 +175 +174 +175 +178 +179 +183 +183 +185 +185 +185 +189 +188 +191 +191 +190 +195 +194 +196 +196 +197 +198 +198 +200 +200 +201 +200 +200 +203 +202 +203 +204 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +207 +206 +207 +204 +204 +204 +205 +204 +202 +202 +201 +200 +200 +201 +200 +198 +198 +197 +196 +197 +194 +194 +190 +190 +191 +189 +188 +185 +185 +185 +183 +182 +179 +179 +174 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +130 +129 +129 +125 +126 +119 +119 +120 +116 +115 +110 +110 +109 +106 +106 +100 +100 +100 +96 +96 +90 +90 +91 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +68 +68 +64 +65 +58 +59 +58 +55 +55 +51 +50 +50 +47 +47 +43 +43 +44 +41 +41 +37 +37 +33 +33 +33 +30 +31 +27 +27 +27 +24 +25 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +16 +15 +15 +16 +15 +13 +13 +12 +13 +13 +14 +14 +14 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +13 +14 +13 +14 +14 +14 +14 +13 +13 +13 +14 +14 +13 +13 +14 +13 +15 +16 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +26 +27 +27 +31 +31 +33 +33 +33 +37 +37 +40 +41 +41 +43 +43 +47 +47 +47 +50 +50 +55 +54 +55 +58 +59 +64 +65 +64 +68 +68 +72 +73 +77 +76 +76 +83 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +109 +115 +116 +116 +120 +120 +125 +125 +130 +129 +129 +134 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +166 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +183 +185 +185 +185 +185 +185 +189 +189 +190 +191 +190 +195 +194 +197 +196 +196 +198 +198 +200 +200 +201 +200 +200 +202 +202 +204 +204 +204 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +204 +204 +204 +204 +204 +202 +202 +202 +200 +201 +201 +201 +201 +199 +199 +196 +197 +197 +195 +194 +191 +191 +189 +189 +189 +185 +185 +182 +182 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +133 +134 +133 +129 +129 +126 +125 +125 +119 +119 +116 +116 +115 +110 +110 +106 +106 +101 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +83 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +65 +58 +58 +54 +54 +50 +51 +51 +46 +46 +47 +47 +47 +43 +43 +42 +42 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +29 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +13 +13 +14 +14 +13 +14 +14 +13 +14 +14 +14 +14 +13 +14 +13 +13 +14 +13 +13 +14 +14 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +32 +33 +33 +37 +37 +41 +41 +41 +43 +42 +47 +47 +51 +50 +51 +55 +54 +59 +58 +59 +64 +65 +68 +69 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +109 +110 +116 +116 +119 +119 +119 +125 +125 +129 +130 +129 +133 +133 +139 +139 +140 +143 +143 +147 +146 +150 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +174 +175 +175 +179 +179 +183 +182 +183 +184 +185 +189 +189 +190 +191 +191 +194 +195 +196 +196 +196 +198 +199 +198 +198 +198 +201 +200 +200 +201 +201 +202 +203 +204 +204 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +205 +204 +204 +205 +203 +202 +200 +200 +200 +200 +201 +199 +198 +196 +196 +197 +194 +195 +191 +190 +190 +188 +189 +184 +184 +185 +183 +182 +178 +178 +178 +175 +175 +173 +173 +169 +169 +169 +165 +165 +160 +161 +161 +157 +157 +150 +151 +151 +147 +147 +144 +143 +143 +139 +139 +134 +133 +134 +129 +130 +126 +125 +120 +120 +120 +116 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +83 +82 +76 +76 +72 +72 +69 +68 +68 +64 +64 +59 +59 +59 +55 +54 +51 +51 +50 +46 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +20 +19 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +14 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +13 +14 +13 +14 +14 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +42 +43 +43 +47 +47 +51 +51 +50 +55 +54 +58 +58 +58 +65 +64 +68 +69 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +91 +90 +90 +96 +96 +100 +100 +100 +106 +106 +105 +106 +106 +110 +110 +115 +116 +115 +120 +119 +126 +125 +126 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +152 +151 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +170 +173 +173 +175 +175 +178 +179 +179 +183 +183 +184 +184 +184 +189 +188 +189 +189 +188 +190 +191 +195 +194 +195 +196 +197 +198 +198 +198 +200 +201 +201 +200 +202 +202 +202 +204 +204 +204 +204 +205 +206 +206 +206 +206 +206 +207 +206 +206 +207 +207 +206 +207 +206 +207 +204 +204 +204 +204 +204 +202 +202 +202 +200 +201 +200 +200 +200 +198 +198 +197 +197 +196 +195 +195 +190 +191 +190 +188 +188 +185 +185 +182 +182 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +140 +139 +139 +133 +133 +130 +130 +130 +125 +126 +120 +119 +119 +116 +116 +109 +110 +110 +106 +105 +100 +100 +101 +96 +96 +90 +90 +85 +86 +86 +83 +82 +76 +77 +76 +72 +72 +72 +72 +72 +68 +69 +65 +65 +64 +58 +58 +55 +54 +55 +51 +51 +46 +47 +43 +43 +43 +41 +40 +37 +37 +37 +33 +33 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +19 +19 +19 +17 +17 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +13 +13 +14 +14 +13 +13 +14 +13 +14 +13 +13 +14 +14 +13 +13 +14 +14 +13 +14 +13 +13 +13 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +30 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +51 +55 +55 +59 +59 +65 +65 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +101 +106 +106 +110 +110 +116 +115 +115 +119 +120 +125 +125 +125 +129 +130 +133 +133 +134 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +174 +175 +175 +179 +179 +183 +182 +183 +184 +185 +189 +189 +190 +191 +191 +194 +195 +196 +196 +196 +199 +198 +200 +201 +200 +200 +200 +202 +203 +202 +204 +204 +204 +204 +205 +206 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +205 +204 +204 +204 +202 +202 +203 +200 +200 +201 +201 +200 +198 +199 +196 +196 +195 +195 +194 +190 +190 +188 +189 +188 +185 +184 +183 +182 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +170 +165 +165 +161 +161 +158 +157 +157 +151 +151 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +130 +129 +125 +125 +126 +120 +119 +116 +116 +110 +109 +110 +106 +106 +100 +100 +100 +96 +96 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +73 +72 +68 +68 +64 +64 +64 +59 +58 +55 +55 +55 +50 +50 +51 +50 +50 +48 +47 +43 +43 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +12 +12 +14 +13 +14 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +14 +14 +13 +13 +13 +13 +13 +14 +14 +13 +14 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +36 +40 +41 +43 +43 +43 +47 +47 +51 +51 +51 +54 +54 +58 +59 +59 +64 +64 +68 +68 +69 +72 +72 +76 +76 +77 +82 +83 +86 +86 +91 +90 +90 +96 +96 +100 +100 +100 +106 +106 +106 +106 +106 +110 +110 +115 +115 +115 +120 +120 +125 +126 +126 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +174 +175 +175 +179 +179 +182 +183 +182 +185 +185 +189 +189 +188 +190 +190 +194 +194 +194 +196 +196 +198 +199 +199 +201 +201 +201 +200 +202 +202 +203 +205 +204 +204 +205 +204 +206 +206 +207 +206 +207 +207 +207 +206 +206 +206 +206 +207 +206 +206 +206 +204 +204 +205 +204 +203 +202 +202 +200 +201 +201 +200 +200 +198 +198 +197 +196 +197 +194 +195 +190 +190 +190 +189 +189 +184 +185 +185 +182 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +150 +151 +147 +147 +143 +143 +144 +139 +139 +133 +133 +130 +129 +129 +125 +125 +119 +119 +120 +115 +116 +116 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +93 +90 +90 +86 +86 +81 +82 +82 +76 +76 +72 +72 +73 +69 +68 +68 +68 +68 +64 +64 +58 +59 +59 +54 +54 +51 +51 +48 +47 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +26 +25 +21 +21 +21 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +14 +13 +14 +14 +13 +13 +14 +13 +13 +14 +13 +13 +14 +14 +13 +13 +14 +13 +14 +14 +14 +13 +13 +14 +13 +13 +15 +15 +15 +17 +16 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +34 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +51 +55 +54 +55 +59 +59 +65 +65 +65 +68 +68 +72 +73 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +105 +106 +110 +110 +116 +116 +116 +119 +119 +125 +125 +130 +130 +129 +133 +134 +139 +139 +139 +143 +143 +143 +143 +143 +147 +147 +151 +151 +150 +157 +157 +161 +161 +162 +165 +165 +169 +169 +172 +173 +173 +175 +175 +179 +179 +179 +182 +183 +184 +185 +184 +188 +188 +190 +191 +191 +195 +194 +196 +196 +195 +198 +198 +200 +200 +200 +201 +200 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +207 +207 +206 +206 +205 +204 +204 +204 +204 +202 +202 +200 +200 +200 +200 +200 +198 +198 +198 +196 +197 +194 +195 +195 +191 +191 +189 +189 +185 +185 +185 +183 +183 +179 +179 +178 +175 +175 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +133 +133 +133 +129 +129 +126 +126 +126 +120 +120 +116 +116 +113 +110 +109 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +66 +64 +65 +58 +58 +54 +54 +55 +51 +51 +47 +47 +47 +43 +43 +41 +40 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +24 +21 +22 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +13 +14 +14 +14 +13 +14 +14 +14 +14 +14 +14 +13 +14 +14 +13 +13 +13 +14 +13 +14 +14 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +40 +41 +41 +43 +43 +47 +46 +47 +50 +50 +55 +55 +58 +58 +58 +64 +68 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +97 +100 +100 +106 +105 +110 +109 +110 +115 +116 +119 +120 +120 +125 +125 +125 +125 +125 +129 +129 +133 +134 +133 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +179 +183 +183 +185 +185 +187 +188 +188 +190 +190 +194 +195 +194 +196 +196 +198 +198 +198 +200 +200 +200 +200 +201 +202 +202 +204 +204 +205 +204 +204 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +204 +204 +205 +204 +204 +202 +202 +200 +200 +201 +201 +200 +198 +198 +197 +197 +196 +195 +194 +190 +190 +191 +188 +188 +185 +185 +184 +183 +183 +178 +178 +179 +175 +175 +173 +173 +174 +169 +169 +165 +165 +161 +161 +161 +156 +157 +151 +151 +151 +147 +147 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +130 +129 +130 +125 +125 +119 +120 +116 +115 +115 +110 +110 +106 +106 +106 +100 +100 +100 +99 +100 +96 +96 +90 +90 +90 +85 +86 +82 +82 +77 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +58 +58 +54 +54 +50 +51 +51 +47 +47 +42 +42 +43 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +14 +13 +14 +13 +13 +14 +13 +13 +14 +13 +13 +14 +14 +13 +14 +13 +13 +13 +14 +14 +13 +13 +14 +13 +13 +14 +13 +16 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +38 +41 +41 +43 +43 +47 +47 +47 +50 +51 +55 +55 +55 +58 +59 +64 +64 +65 +68 +69 +72 +72 +72 +76 +76 +82 +82 +83 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +109 +110 +109 +110 +110 +116 +116 +119 +119 +120 +125 +125 +129 +129 +131 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +168 +169 +169 +173 +173 +174 +175 +178 +179 +178 +183 +183 +185 +184 +185 +189 +189 +191 +190 +190 +194 +194 +196 +196 +196 +198 +198 +200 +200 +201 +201 +201 +202 +202 +205 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +205 +206 +206 +206 +206 +206 +207 +206 +204 +204 +204 +204 +204 +203 +202 +200 +200 +201 +200 +200 +198 +198 +198 +196 +197 +194 +194 +195 +190 +190 +188 +189 +188 +184 +185 +183 +183 +183 +179 +179 +175 +175 +172 +172 +173 +169 +169 +165 +165 +165 +161 +161 +161 +161 +160 +157 +157 +151 +151 +151 +147 +147 +143 +143 +144 +139 +139 +133 +133 +130 +129 +129 +125 +125 +119 +119 +119 +116 +116 +116 +116 +116 +109 +109 +105 +106 +106 +100 +99 +96 +96 +91 +90 +90 +86 +86 +82 +82 +81 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +59 +58 +54 +54 +54 +50 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +12 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +14 +14 +14 +13 +14 +13 +13 +14 +13 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +30 +33 +33 +37 +36 +37 +41 +41 +43 +43 +43 +47 +47 +46 +47 +46 +51 +50 +55 +54 +55 +58 +58 +64 +64 +66 +69 +68 +72 +72 +76 +77 +76 +82 +82 +86 +86 +86 +90 +90 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +109 +115 +116 +116 +120 +120 +125 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +164 +165 +165 +169 +169 +173 +173 +173 +175 +175 +175 +175 +175 +178 +179 +183 +183 +183 +185 +185 +188 +188 +189 +191 +191 +194 +194 +196 +196 +197 +198 +199 +200 +200 +201 +200 +200 +202 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +204 +204 +205 +204 +204 +204 +204 +204 +202 +202 +201 +200 +201 +200 +200 +199 +198 +200 +196 +196 +194 +195 +190 +190 +190 +189 +189 +184 +185 +185 +183 +182 +183 +183 +183 +178 +178 +175 +174 +175 +173 +173 +169 +168 +167 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +144 +143 +143 +143 +139 +139 +133 +133 +134 +129 +129 +125 +125 +123 +119 +119 +116 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +77 +76 +72 +72 +71 +68 +69 +64 +64 +59 +58 +58 +55 +55 +51 +51 +50 +47 +46 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +27 +27 +26 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +16 +13 +13 +12 +13 +13 +13 +14 +14 +13 +14 +14 +14 +13 +13 +14 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +14 +13 +14 +14 +13 +13 +15 +15 +17 +17 +20 +19 +19 +21 +21 +25 +25 +25 +27 +27 +27 +27 +27 +31 +31 +32 +33 +33 +37 +37 +41 +41 +41 +43 +42 +46 +46 +51 +51 +50 +54 +54 +59 +58 +58 +65 +65 +64 +64 +65 +68 +68 +72 +72 +72 +76 +76 +82 +82 +85 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +115 +119 +119 +125 +125 +126 +130 +129 +133 +134 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +172 +175 +175 +179 +179 +183 +183 +182 +185 +185 +184 +184 +185 +189 +188 +191 +190 +191 +194 +195 +197 +196 +196 +198 +198 +200 +200 +200 +200 +201 +202 +202 +205 +204 +204 +204 +204 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +206 +206 +204 +205 +205 +204 +204 +202 +203 +200 +200 +200 +200 +200 +198 +198 +198 +196 +196 +197 +197 +197 +194 +194 +191 +190 +190 +188 +188 +185 +184 +184 +183 +183 +179 +178 +174 +174 +175 +173 +173 +169 +169 +169 +165 +165 +165 +165 +165 +161 +161 +158 +157 +157 +151 +151 +147 +147 +145 +143 +144 +139 +139 +133 +133 +133 +129 +130 +126 +125 +125 +120 +119 +115 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +90 +90 +90 +87 +86 +82 +82 +82 +76 +76 +72 +72 +73 +69 +68 +64 +65 +65 +58 +58 +55 +54 +54 +50 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +36 +33 +33 +31 +31 +30 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +12 +13 +13 +14 +13 +13 +14 +14 +14 +13 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +14 +13 +14 +14 +13 +14 +13 +12 +15 +16 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +26 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +42 +43 +43 +43 +46 +47 +50 +50 +51 +55 +55 +58 +59 +64 +64 +64 +68 +69 +72 +73 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +109 +115 +116 +116 +119 +119 +125 +125 +125 +129 +129 +134 +134 +134 +139 +139 +143 +143 +143 +147 +147 +151 +151 +152 +157 +157 +161 +161 +165 +165 +165 +169 +169 +172 +173 +173 +175 +175 +178 +179 +178 +183 +183 +185 +185 +184 +188 +188 +190 +191 +191 +194 +194 +196 +196 +199 +198 +198 +201 +200 +200 +200 +200 +203 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +207 +207 +207 +206 +207 +206 +206 +206 +206 +206 +205 +204 +204 +204 +204 +202 +202 +202 +202 +202 +200 +201 +200 +201 +200 +199 +198 +197 +197 +198 +195 +194 +190 +191 +188 +189 +189 +185 +185 +182 +183 +183 +179 +179 +178 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +130 +125 +126 +126 +119 +119 +116 +115 +111 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +58 +58 +58 +55 +55 +51 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +36 +33 +33 +31 +31 +31 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +14 +14 +13 +14 +13 +14 +13 +14 +13 +14 +13 +13 +13 +13 +14 +13 +14 +14 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +31 +32 +31 +33 +33 +37 +37 +37 +41 +41 +42 +43 +42 +47 +46 +51 +51 +55 +54 +55 +58 +58 +64 +64 +64 +68 +69 +72 +73 +72 +76 +76 +82 +82 +82 +86 +86 +90 +91 +95 +96 +96 +100 +100 +106 +106 +106 +110 +109 +116 +115 +116 +119 +119 +125 +125 +126 +129 +129 +133 +133 +133 +139 +140 +143 +143 +148 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +164 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +185 +184 +189 +188 +188 +190 +190 +195 +194 +194 +196 +196 +198 +198 +198 +200 +200 +200 +200 +200 +203 +203 +204 +205 +205 +204 +204 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +204 +205 +204 +205 +204 +202 +202 +200 +200 +200 +200 +200 +199 +198 +196 +197 +196 +194 +194 +191 +191 +191 +189 +188 +189 +188 +188 +184 +184 +183 +183 +183 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +164 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +140 +133 +133 +129 +129 +127 +126 +125 +119 +120 +115 +115 +115 +109 +109 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +87 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +58 +58 +55 +55 +55 +51 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +32 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +12 +13 +14 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +13 +13 +14 +13 +14 +14 +13 +13 +13 +14 +13 +13 +14 +13 +13 +14 +14 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +38 +41 +41 +43 +42 +46 +47 +47 +51 +50 +55 +55 +55 +59 +58 +64 +64 +65 +68 +68 +72 +72 +73 +76 +76 +82 +82 +85 +86 +86 +90 +90 +96 +96 +96 +100 +100 +105 +106 +105 +110 +110 +115 +115 +116 +120 +119 +125 +125 +126 +129 +129 +133 +133 +136 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +183 +182 +183 +184 +185 +188 +189 +188 +190 +191 +195 +195 +194 +196 +196 +198 +198 +199 +200 +201 +200 +200 +201 +202 +202 +204 +204 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +206 +204 +204 +205 +204 +204 +202 +202 +200 +200 +200 +200 +200 +199 +198 +198 +197 +196 +197 +196 +196 +195 +194 +190 +190 +190 +189 +189 +184 +184 +183 +182 +183 +179 +179 +174 +175 +175 +172 +173 +168 +169 +169 +164 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +126 +119 +119 +119 +116 +116 +110 +110 +110 +106 +105 +100 +100 +100 +96 +95 +90 +90 +87 +86 +86 +82 +82 +76 +77 +76 +72 +72 +68 +69 +68 +64 +64 +58 +58 +59 +55 +54 +51 +51 +51 +47 +47 +42 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +18 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +13 +14 +13 +14 +13 +14 +13 +14 +13 +14 +14 +14 +13 +14 +13 +14 +14 +14 +13 +13 +14 +14 +14 +13 +13 +13 +13 +13 +15 +15 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +32 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +50 +54 +54 +55 +59 +58 +65 +64 +68 +68 +68 +72 +72 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +101 +100 +106 +106 +106 +109 +110 +116 +116 +120 +120 +120 +125 +125 +129 +130 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +158 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +182 +183 +185 +185 +188 +188 +188 +190 +191 +195 +194 +194 +196 +196 +198 +198 +201 +201 +200 +200 +200 +202 +202 +202 +204 +204 +205 +204 +204 +204 +204 +206 +207 +207 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +203 +202 +202 +202 +203 +200 +200 +200 +200 +201 +198 +198 +196 +196 +195 +194 +195 +190 +191 +190 +191 +190 +189 +189 +185 +185 +184 +182 +182 +179 +178 +178 +175 +175 +173 +173 +173 +169 +169 +164 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +126 +125 +125 +119 +119 +115 +115 +110 +109 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +59 +59 +59 +55 +54 +55 +55 +54 +51 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +14 +14 +13 +14 +13 +13 +13 +14 +14 +14 +14 +13 +13 +13 +14 +14 +14 +13 +14 +14 +13 +13 +14 +14 +14 +13 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +32 +33 +36 +36 +41 +40 +42 +43 +43 +47 +47 +51 +51 +51 +54 +54 +58 +58 +58 +64 +64 +68 +68 +69 +72 +72 +76 +76 +76 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +99 +106 +106 +110 +110 +109 +115 +116 +120 +120 +120 +126 +126 +130 +129 +129 +134 +134 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +164 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +182 +184 +184 +185 +189 +188 +190 +191 +190 +194 +194 +194 +195 +194 +196 +196 +198 +198 +199 +200 +200 +200 +200 +201 +202 +203 +204 +205 +205 +205 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +205 +206 +206 +206 +206 +206 +206 +206 +204 +204 +205 +204 +205 +202 +202 +201 +200 +200 +200 +200 +198 +198 +198 +196 +196 +194 +194 +194 +191 +191 +188 +188 +189 +185 +185 +182 +183 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +134 +133 +133 +129 +129 +125 +126 +125 +119 +119 +116 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +97 +90 +90 +86 +86 +83 +82 +82 +76 +76 +76 +76 +77 +72 +73 +68 +68 +69 +64 +64 +58 +59 +58 +54 +54 +51 +51 +51 +47 +47 +43 +43 +40 +40 +40 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +18 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +14 +13 +13 +13 +14 +14 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +14 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +30 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +50 +51 +55 +55 +58 +58 +58 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +116 +119 +120 +126 +125 +126 +129 +129 +133 +134 +133 +140 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +162 +165 +165 +169 +169 +172 +173 +173 +175 +175 +179 +179 +179 +182 +182 +182 +182 +183 +185 +185 +189 +188 +188 +190 +191 +194 +195 +195 +196 +197 +198 +199 +200 +200 +201 +200 +201 +202 +203 +202 +205 +204 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +207 +206 +204 +204 +204 +204 +204 +202 +202 +201 +200 +200 +201 +200 +199 +198 +199 +197 +197 +194 +194 +191 +191 +191 +189 +188 +184 +185 +184 +183 +183 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +140 +140 +134 +133 +133 +129 +130 +126 +126 +125 +119 +119 +115 +115 +116 +110 +110 +106 +105 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +86 +86 +86 +81 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +59 +59 +55 +54 +54 +51 +51 +47 +47 +47 +43 +43 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +29 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +15 +15 +13 +13 +13 +13 +12 +13 +14 +14 +13 +14 +13 +13 +13 +13 +13 +14 +13 +13 +14 +14 +14 +14 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +42 +47 +47 +51 +51 +51 +55 +55 +59 +58 +58 +64 +64 +64 +64 +65 +69 +69 +72 +72 +72 +76 +76 +82 +83 +83 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +116 +120 +119 +126 +125 +125 +129 +130 +134 +133 +133 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +161 +161 +161 +165 +164 +169 +169 +169 +173 +173 +175 +175 +176 +178 +179 +182 +183 +184 +184 +184 +188 +189 +190 +191 +190 +194 +194 +194 +195 +194 +196 +196 +198 +199 +199 +200 +201 +200 +200 +201 +203 +203 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +204 +205 +204 +204 +203 +202 +202 +200 +200 +200 +200 +200 +199 +198 +199 +199 +199 +196 +196 +195 +195 +195 +190 +191 +188 +188 +188 +185 +184 +182 +183 +179 +178 +179 +175 +174 +173 +173 +173 +169 +169 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +140 +139 +139 +134 +133 +129 +129 +129 +125 +125 +120 +119 +120 +116 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +73 +72 +73 +72 +72 +68 +68 +65 +65 +65 +59 +58 +54 +54 +53 +51 +51 +47 +47 +42 +43 +43 +41 +41 +38 +37 +37 +33 +33 +33 +33 +33 +31 +31 +26 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +13 +13 +14 +13 +13 +13 +14 +13 +13 +14 +14 +14 +13 +13 +14 +13 +14 +14 +13 +14 +14 +13 +14 +14 +14 +13 +15 +15 +15 +17 +17 +20 +19 +19 +21 +22 +25 +25 +27 +27 +27 +31 +31 +33 +32 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +50 +50 +54 +55 +55 +59 +59 +65 +64 +69 +68 +68 +72 +72 +76 +76 +77 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +105 +106 +110 +110 +116 +115 +119 +119 +120 +126 +125 +129 +129 +129 +134 +133 +133 +134 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +153 +157 +157 +161 +161 +165 +165 +164 +169 +169 +173 +172 +172 +175 +175 +175 +175 +175 +179 +179 +183 +182 +183 +185 +185 +188 +188 +190 +190 +191 +194 +194 +196 +196 +197 +198 +198 +201 +200 +200 +200 +201 +203 +202 +202 +204 +205 +204 +204 +205 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +204 +204 +204 +204 +205 +202 +202 +202 +200 +200 +200 +201 +200 +198 +198 +196 +196 +195 +194 +194 +190 +191 +188 +188 +188 +184 +185 +183 +183 +182 +178 +179 +175 +174 +175 +173 +172 +169 +169 +169 +165 +165 +161 +161 +158 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +130 +130 +129 +129 +125 +126 +119 +119 +120 +115 +115 +110 +110 +105 +106 +106 +100 +100 +96 +96 +96 +90 +90 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +73 +72 +74 +69 +68 +65 +65 +58 +59 +59 +54 +55 +50 +51 +51 +47 +46 +47 +47 +47 +43 +43 +41 +40 +41 +36 +37 +33 +33 +34 +30 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +14 +13 +13 +14 +14 +14 +13 +13 +13 +14 +14 +13 +14 +14 +14 +13 +13 +13 +13 +14 +14 +14 +13 +14 +14 +14 +14 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +46 +51 +51 +50 +55 +54 +59 +59 +58 +65 +64 +64 +64 +65 +69 +68 +72 +72 +72 +76 +76 +82 +82 +83 +85 +86 +90 +90 +95 +96 +95 +100 +100 +106 +106 +106 +110 +110 +110 +110 +110 +115 +116 +119 +119 +119 +125 +125 +129 +130 +130 +133 +134 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +175 +175 +175 +178 +179 +182 +182 +182 +184 +185 +188 +189 +188 +190 +190 +195 +194 +194 +196 +197 +199 +198 +198 +200 +201 +200 +200 +202 +202 +203 +204 +204 +204 +205 +204 +207 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +204 +204 +205 +204 +204 +202 +202 +200 +200 +200 +200 +201 +199 +199 +198 +196 +196 +194 +194 +194 +190 +191 +189 +189 +189 +185 +185 +183 +183 +179 +179 +179 +174 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +133 +133 +133 +130 +129 +125 +125 +125 +120 +120 +115 +116 +115 +110 +110 +107 +106 +106 +100 +100 +97 +96 +93 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +69 +69 +68 +68 +68 +64 +64 +58 +59 +59 +54 +54 +50 +51 +51 +47 +46 +43 +42 +40 +41 +41 +36 +37 +33 +33 +32 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +13 +14 +13 +13 +14 +14 +13 +13 +13 +13 +13 +13 +14 +13 +14 +14 +14 +13 +13 +14 +14 +13 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +24 +25 +25 +27 +27 +31 +31 +33 +33 +33 +36 +37 +41 +41 +41 +43 +43 +47 +47 +46 +51 +51 +55 +55 +55 +59 +58 +64 +65 +65 +69 +68 +72 +72 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +112 +116 +116 +120 +119 +126 +125 +126 +129 +130 +133 +133 +133 +139 +139 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +160 +161 +161 +165 +165 +169 +169 +169 +173 +173 +173 +173 +173 +175 +175 +179 +179 +179 +182 +183 +184 +185 +185 +189 +189 +190 +190 +194 +194 +195 +196 +197 +199 +198 +198 +200 +200 +200 +200 +200 +202 +202 +205 +204 +204 +204 +205 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +201 +201 +200 +200 +200 +198 +198 +198 +196 +196 +194 +194 +191 +190 +191 +188 +189 +184 +185 +184 +182 +183 +179 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +139 +140 +139 +134 +133 +129 +129 +129 +125 +125 +119 +119 +117 +116 +116 +110 +110 +105 +106 +106 +101 +100 +96 +96 +96 +90 +90 +90 +90 +90 +86 +86 +82 +82 +82 +76 +77 +72 +72 +69 +68 +68 +64 +64 +58 +59 +59 +55 +54 +51 +51 +51 +47 +47 +42 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +16 +13 +13 +12 +13 +13 +13 +14 +13 +13 +13 +13 +14 +14 +14 +14 +13 +13 +13 +13 +14 +13 +14 +14 +14 +13 +13 +14 +13 +13 +13 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +42 +43 +43 +47 +47 +51 +51 +50 +54 +55 +58 +58 +59 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +87 +90 +90 +96 +96 +99 +100 +100 +106 +106 +110 +109 +110 +116 +115 +116 +115 +116 +119 +119 +125 +125 +125 +128 +129 +133 +133 +136 +139 +139 +143 +143 +146 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +164 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +182 +183 +183 +185 +185 +189 +188 +188 +191 +190 +195 +194 +194 +196 +196 +198 +198 +198 +200 +200 +200 +200 +200 +202 +202 +204 +204 +204 +204 +204 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +204 +204 +204 +204 +205 +202 +202 +201 +200 +201 +200 +200 +198 +198 +196 +197 +197 +195 +195 +191 +190 +191 +189 +189 +185 +185 +184 +183 +183 +178 +179 +178 +175 +175 +172 +173 +169 +169 +169 +165 +165 +160 +161 +161 +157 +157 +158 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +137 +133 +133 +130 +130 +125 +125 +125 +119 +119 +116 +115 +115 +109 +110 +109 +110 +110 +106 +106 +100 +99 +100 +96 +96 +90 +90 +88 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +65 +64 +59 +59 +59 +54 +55 +51 +51 +51 +47 +46 +43 +43 +41 +41 +42 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +14 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +14 +14 +14 +13 +13 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +32 +33 +33 +37 +37 +41 +40 +41 +43 +43 +47 +47 +47 +51 +50 +50 +51 +51 +54 +58 +59 +59 +64 +65 +68 +68 +69 +72 +73 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +95 +96 +96 +96 +100 +100 +106 +106 +106 +109 +110 +116 +116 +119 +120 +119 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +160 +164 +165 +168 +169 +169 +173 +173 +175 +174 +175 +179 +179 +183 +183 +183 +184 +185 +188 +189 +189 +191 +191 +194 +194 +195 +196 +197 +199 +198 +200 +201 +200 +201 +201 +202 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +204 +205 +205 +204 +204 +202 +202 +202 +200 +200 +200 +200 +201 +198 +198 +196 +196 +196 +195 +194 +190 +190 +191 +189 +188 +184 +184 +183 +183 +182 +178 +179 +175 +175 +175 +173 +173 +173 +173 +173 +169 +169 +165 +165 +165 +161 +160 +157 +157 +158 +151 +151 +147 +147 +143 +143 +143 +139 +140 +133 +133 +133 +129 +129 +125 +125 +125 +119 +119 +115 +116 +116 +109 +110 +106 +106 +101 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +77 +77 +72 +72 +73 +68 +68 +64 +65 +65 +59 +58 +55 +54 +51 +50 +50 +46 +46 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +14 +14 +13 +13 +14 +13 +14 +13 +14 +13 +14 +14 +14 +14 +14 +14 +14 +13 +13 +13 +13 +14 +14 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +22 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +42 +43 +42 +47 +47 +51 +51 +51 +54 +54 +58 +59 +59 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +107 +110 +109 +116 +115 +119 +119 +120 +125 +125 +129 +130 +129 +133 +133 +139 +139 +139 +144 +143 +147 +147 +147 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +172 +173 +175 +174 +175 +179 +179 +183 +183 +183 +184 +185 +189 +189 +188 +191 +191 +194 +194 +196 +197 +196 +198 +198 +200 +200 +200 +200 +200 +203 +202 +202 +204 +205 +204 +204 +204 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +205 +204 +204 +205 +203 +202 +202 +201 +200 +200 +200 +200 +199 +199 +197 +197 +197 +194 +195 +191 +191 +189 +188 +189 +184 +185 +182 +182 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +159 +157 +157 +151 +151 +147 +147 +148 +143 +143 +140 +139 +139 +133 +133 +133 +133 +134 +129 +130 +125 +125 +125 +119 +119 +116 +116 +113 +110 +110 +106 +106 +99 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +68 +68 +64 +64 +58 +58 +59 +54 +55 +51 +51 +51 +47 +47 +47 +46 +47 +43 +42 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +14 +13 +15 +15 +16 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +44 +46 +47 +51 +50 +54 +54 +55 +58 +59 +65 +64 +65 +68 +68 +68 +69 +68 +73 +72 +75 +76 +76 +82 +82 +86 +86 +89 +90 +90 +96 +96 +100 +100 +100 +105 +106 +110 +110 +110 +116 +115 +119 +120 +120 +125 +125 +129 +129 +130 +134 +133 +139 +140 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +178 +182 +182 +184 +184 +184 +189 +189 +190 +191 +190 +195 +195 +197 +197 +196 +198 +198 +200 +200 +201 +201 +200 +202 +202 +203 +204 +204 +204 +204 +207 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +207 +207 +204 +204 +204 +204 +204 +202 +202 +203 +200 +201 +200 +201 +198 +199 +199 +196 +196 +195 +194 +194 +191 +191 +188 +188 +188 +184 +184 +183 +183 +183 +178 +179 +175 +175 +175 +173 +173 +169 +168 +166 +165 +165 +161 +161 +157 +157 +157 +151 +152 +151 +152 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +131 +129 +129 +125 +125 +119 +120 +120 +115 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +80 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +59 +58 +54 +54 +51 +50 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +13 +14 +13 +14 +13 +14 +13 +14 +14 +13 +14 +13 +13 +13 +14 +13 +14 +13 +14 +13 +14 +14 +13 +13 +14 +13 +15 +15 +15 +17 +17 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +28 +31 +31 +33 +33 +36 +37 +37 +41 +41 +43 +43 +43 +47 +47 +47 +47 +47 +50 +51 +55 +55 +55 +59 +58 +64 +64 +66 +69 +68 +73 +72 +76 +77 +76 +82 +81 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +119 +120 +119 +125 +126 +129 +129 +129 +133 +133 +140 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +183 +185 +184 +188 +189 +189 +191 +190 +195 +195 +194 +196 +197 +198 +199 +201 +200 +201 +201 +200 +202 +203 +202 +205 +204 +205 +205 +205 +207 +206 +207 +206 +206 +206 +206 +207 +206 +207 +206 +207 +206 +206 +205 +204 +204 +204 +205 +202 +202 +202 +201 +201 +200 +200 +200 +200 +200 +199 +198 +199 +197 +197 +195 +194 +192 +191 +191 +188 +189 +184 +184 +184 +183 +183 +178 +179 +179 +175 +175 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +160 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +130 +125 +125 +120 +120 +120 +116 +116 +110 +110 +106 +106 +106 +100 +99 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +73 +72 +68 +68 +69 +64 +64 +59 +58 +55 +54 +54 +51 +50 +47 +47 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +26 +27 +25 +24 +21 +21 +19 +19 +19 +17 +17 +15 +16 +15 +15 +15 +15 +15 +15 +14 +13 +12 +13 +13 +13 +14 +14 +13 +14 +13 +14 +13 +13 +14 +14 +14 +14 +13 +14 +14 +14 +14 +13 +13 +13 +13 +14 +14 +13 +13 +12 +15 +15 +17 +17 +18 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +33 +33 +33 +37 +37 +41 +40 +41 +43 +43 +47 +46 +48 +50 +51 +54 +54 +59 +59 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +77 +82 +82 +86 +86 +86 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +110 +110 +115 +116 +119 +120 +119 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +151 +151 +151 +158 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +183 +184 +185 +188 +189 +191 +191 +191 +194 +195 +196 +197 +196 +198 +198 +201 +200 +200 +200 +200 +202 +202 +203 +204 +204 +204 +205 +205 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +206 +204 +204 +204 +204 +204 +202 +202 +201 +200 +200 +201 +201 +198 +198 +196 +196 +196 +195 +195 +190 +191 +191 +189 +189 +188 +189 +189 +184 +185 +183 +182 +182 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +140 +133 +133 +129 +129 +125 +125 +125 +119 +119 +115 +116 +116 +109 +110 +105 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +83 +76 +76 +73 +73 +72 +68 +69 +64 +64 +64 +59 +58 +58 +58 +58 +55 +54 +50 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +14 +15 +13 +13 +12 +13 +14 +14 +13 +13 +13 +14 +14 +14 +14 +14 +14 +13 +14 +14 +14 +13 +14 +14 +14 +14 +13 +14 +14 +13 +14 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +32 +33 +33 +37 +37 +41 +41 +41 +43 +43 +46 +47 +47 +51 +51 +54 +55 +54 +58 +59 +64 +64 +65 +68 +69 +72 +72 +76 +77 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +115 +116 +116 +116 +120 +119 +125 +125 +125 +130 +129 +134 +134 +134 +140 +139 +144 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +162 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +182 +182 +185 +185 +185 +188 +188 +191 +191 +190 +194 +195 +196 +197 +196 +199 +198 +201 +201 +201 +200 +200 +203 +202 +205 +204 +204 +204 +204 +204 +204 +204 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +205 +203 +203 +202 +200 +200 +200 +200 +200 +200 +200 +199 +199 +199 +196 +197 +195 +194 +191 +191 +190 +188 +188 +185 +185 +185 +183 +182 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +166 +160 +161 +157 +157 +151 +151 +151 +147 +147 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +119 +120 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +69 +64 +64 +59 +59 +55 +55 +54 +50 +50 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +28 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +13 +14 +13 +14 +14 +14 +13 +13 +14 +13 +14 +14 +14 +14 +14 +13 +13 +13 +14 +14 +13 +13 +13 +12 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +46 +50 +51 +53 +54 +54 +58 +59 +64 +64 +64 +68 +68 +72 +72 +73 +77 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +115 +120 +120 +126 +126 +126 +130 +129 +133 +133 +133 +140 +139 +143 +143 +143 +147 +147 +151 +151 +158 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +182 +183 +184 +185 +185 +188 +189 +191 +191 +194 +194 +194 +196 +196 +199 +198 +198 +201 +201 +201 +200 +200 +200 +200 +203 +202 +202 +204 +205 +204 +204 +205 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +205 +204 +203 +203 +200 +201 +200 +201 +201 +198 +199 +196 +196 +196 +194 +195 +191 +191 +191 +188 +189 +185 +184 +184 +183 +183 +179 +179 +179 +175 +175 +173 +173 +169 +168 +169 +165 +165 +161 +161 +161 +157 +157 +151 +152 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +134 +130 +130 +125 +126 +120 +120 +120 +116 +115 +109 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +73 +72 +69 +68 +68 +65 +64 +58 +58 +58 +54 +55 +51 +51 +51 +47 +47 +42 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +20 +19 +19 +19 +17 +18 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +14 +13 +14 +13 +14 +14 +14 +14 +14 +14 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +13 +14 +14 +13 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +50 +51 +55 +54 +58 +58 +59 +64 +65 +68 +68 +68 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +95 +96 +100 +100 +99 +106 +106 +110 +109 +109 +116 +116 +120 +119 +119 +126 +125 +129 +130 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +147 +147 +147 +151 +152 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +175 +175 +175 +178 +179 +183 +183 +182 +184 +184 +184 +185 +184 +188 +189 +190 +191 +190 +195 +195 +197 +197 +198 +199 +198 +201 +200 +200 +200 +200 +203 +202 +204 +204 +204 +204 +204 +205 +204 +205 +206 +206 +207 +207 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +203 +200 +200 +200 +200 +201 +198 +198 +196 +196 +197 +194 +195 +191 +190 +188 +188 +188 +185 +184 +182 +183 +182 +179 +179 +175 +175 +175 +173 +173 +169 +169 +170 +165 +165 +161 +161 +161 +157 +157 +151 +151 +148 +147 +147 +143 +143 +139 +139 +139 +133 +133 +130 +129 +129 +125 +125 +120 +119 +120 +116 +116 +110 +110 +110 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +59 +59 +59 +54 +55 +51 +51 +48 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +13 +14 +13 +14 +13 +14 +14 +13 +14 +14 +13 +13 +13 +13 +13 +14 +13 +14 +13 +14 +14 +13 +13 +14 +14 +13 +13 +13 +15 +15 +17 +18 +17 +19 +19 +22 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +36 +37 +41 +41 +43 +43 +43 +47 +47 +50 +50 +50 +54 +54 +58 +58 +65 +64 +64 +69 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +116 +115 +115 +119 +119 +125 +126 +125 +129 +129 +129 +130 +129 +133 +133 +140 +139 +139 +143 +143 +147 +147 +148 +151 +151 +157 +157 +161 +161 +161 +165 +165 +168 +169 +169 +173 +173 +173 +173 +173 +174 +174 +178 +179 +179 +183 +183 +184 +184 +186 +189 +189 +190 +191 +194 +194 +195 +196 +196 +197 +197 +196 +198 +199 +198 +199 +198 +200 +200 +200 +200 +201 +203 +203 +204 +204 +204 +204 +205 +206 +206 +206 +206 +206 +207 +207 +206 +206 +207 +206 +206 +207 +207 +207 +205 +205 +204 +205 +205 +202 +202 +201 +201 +201 +201 +200 +199 +199 +196 +197 +197 +194 +195 +191 +191 +190 +189 +188 +184 +185 +185 +182 +183 +179 +179 +179 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +120 +119 +119 +116 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +68 +68 +68 +64 +64 +59 +59 +58 +54 +54 +55 +55 +54 +50 +50 +46 +46 +46 +42 +43 +41 +41 +41 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +13 +14 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +14 +14 +14 +14 +14 +13 +14 +14 +14 +14 +13 +13 +13 +13 +15 +16 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +36 +41 +41 +41 +43 +43 +46 +47 +47 +51 +50 +55 +55 +55 +58 +58 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +87 +86 +86 +90 +89 +96 +95 +96 +100 +100 +105 +106 +106 +109 +109 +116 +116 +116 +120 +119 +125 +125 +126 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +170 +173 +173 +175 +175 +178 +178 +179 +182 +183 +183 +183 +183 +185 +185 +184 +185 +184 +189 +188 +191 +190 +191 +195 +195 +196 +196 +198 +198 +198 +200 +200 +200 +200 +200 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +207 +206 +207 +204 +204 +204 +204 +204 +202 +202 +200 +200 +200 +201 +200 +199 +199 +198 +196 +196 +194 +194 +195 +191 +190 +189 +188 +185 +185 +185 +183 +182 +179 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +134 +133 +129 +129 +125 +125 +125 +119 +120 +115 +115 +116 +110 +109 +106 +106 +103 +99 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +59 +58 +54 +54 +55 +51 +50 +47 +46 +46 +47 +47 +43 +43 +41 +41 +41 +37 +37 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +24 +25 +23 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +14 +13 +14 +14 +14 +13 +14 +13 +14 +13 +13 +14 +14 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +50 +51 +54 +54 +59 +58 +65 +65 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +101 +106 +106 +110 +109 +116 +115 +115 +120 +119 +125 +125 +125 +129 +129 +133 +134 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +153 +157 +157 +161 +161 +164 +165 +165 +169 +169 +173 +173 +173 +175 +175 +175 +175 +175 +179 +179 +183 +182 +183 +185 +185 +189 +188 +191 +191 +191 +195 +195 +196 +196 +196 +199 +198 +200 +201 +200 +201 +200 +202 +202 +202 +204 +204 +204 +205 +205 +207 +207 +206 +206 +207 +207 +206 +207 +207 +206 +206 +206 +206 +206 +205 +204 +204 +204 +204 +203 +202 +202 +200 +201 +201 +201 +200 +198 +199 +196 +196 +195 +194 +195 +191 +190 +188 +188 +189 +185 +185 +182 +183 +183 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +152 +147 +147 +147 +143 +143 +140 +140 +139 +133 +133 +129 +129 +129 +125 +125 +120 +119 +120 +116 +116 +110 +110 +107 +106 +105 +100 +100 +96 +96 +95 +90 +90 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +58 +58 +58 +54 +55 +50 +51 +51 +47 +47 +47 +47 +47 +43 +43 +40 +41 +41 +36 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +22 +19 +20 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +14 +14 +14 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +14 +14 +13 +13 +13 +14 +13 +14 +14 +13 +14 +13 +13 +15 +15 +18 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +51 +51 +51 +54 +54 +59 +59 +59 +64 +65 +68 +68 +68 +72 +73 +76 +76 +76 +82 +82 +86 +86 +87 +90 +90 +96 +96 +99 +100 +100 +105 +105 +110 +110 +110 +115 +116 +116 +116 +115 +120 +120 +125 +125 +126 +129 +130 +133 +134 +135 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +161 +161 +161 +165 +165 +168 +169 +169 +173 +173 +175 +175 +176 +178 +179 +183 +183 +185 +185 +185 +188 +189 +190 +190 +191 +195 +194 +196 +197 +196 +199 +198 +200 +201 +201 +200 +201 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +200 +200 +201 +200 +200 +198 +198 +199 +197 +196 +196 +196 +197 +195 +194 +191 +190 +190 +189 +188 +185 +184 +184 +182 +183 +178 +178 +175 +175 +175 +173 +172 +168 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +144 +139 +139 +133 +133 +129 +129 +130 +125 +125 +120 +120 +119 +115 +116 +116 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +93 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +68 +68 +68 +68 +68 +65 +64 +59 +59 +59 +54 +54 +51 +51 +49 +47 +46 +43 +43 +41 +40 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +14 +14 +14 +14 +13 +13 +13 +14 +14 +14 +13 +13 +13 +14 +13 +13 +14 +13 +13 +14 +14 +13 +14 +13 +14 +13 +15 +16 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +34 +33 +33 +37 +36 +41 +41 +40 +43 +43 +47 +47 +47 +51 +50 +55 +55 +54 +59 +58 +64 +65 +66 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +112 +116 +116 +119 +120 +125 +126 +125 +129 +129 +133 +133 +133 +139 +139 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +178 +179 +183 +183 +182 +184 +185 +189 +189 +189 +191 +191 +194 +195 +196 +196 +196 +198 +198 +200 +200 +200 +201 +200 +200 +200 +200 +202 +202 +205 +204 +204 +204 +204 +206 +206 +206 +207 +206 +206 +206 +207 +206 +207 +206 +206 +206 +207 +206 +204 +204 +205 +204 +204 +203 +203 +200 +200 +200 +200 +200 +198 +199 +198 +196 +196 +194 +194 +191 +191 +190 +188 +188 +185 +185 +184 +182 +183 +178 +178 +179 +174 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +150 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +130 +125 +126 +125 +119 +120 +116 +115 +113 +110 +110 +106 +106 +99 +100 +100 +96 +96 +90 +90 +90 +86 +86 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +69 +68 +65 +64 +64 +58 +58 +55 +55 +54 +51 +51 +47 +47 +46 +43 +43 +40 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +14 +14 +13 +13 +14 +13 +14 +14 +13 +14 +13 +14 +14 +13 +14 +14 +13 +13 +13 +14 +13 +13 +15 +15 +16 +17 +17 +19 +19 +21 +21 +21 +26 +25 +27 +26 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +46 +47 +47 +51 +50 +55 +55 +59 +59 +58 +65 +64 +68 +68 +68 +72 +72 +76 +76 +76 +83 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +110 +110 +109 +115 +116 +120 +120 +120 +125 +125 +125 +125 +125 +130 +130 +133 +133 +134 +139 +139 +143 +143 +146 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +184 +184 +188 +188 +188 +190 +190 +195 +195 +195 +197 +197 +198 +199 +198 +201 +200 +200 +200 +200 +202 +202 +204 +205 +204 +204 +204 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +204 +204 +204 +204 +204 +203 +202 +201 +201 +200 +200 +200 +198 +198 +197 +196 +196 +194 +195 +190 +191 +191 +188 +189 +189 +188 +189 +185 +185 +183 +182 +182 +179 +179 +175 +175 +175 +173 +173 +169 +169 +164 +165 +165 +161 +161 +157 +157 +157 +151 +151 +151 +151 +151 +147 +147 +144 +143 +143 +139 +139 +133 +134 +131 +129 +129 +126 +125 +119 +120 +120 +116 +116 +109 +110 +110 +106 +105 +106 +106 +106 +100 +100 +97 +96 +96 +90 +90 +86 +86 +84 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +59 +59 +54 +54 +55 +51 +50 +47 +47 +47 +43 +43 +41 +41 +38 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +14 +13 +13 +14 +14 +13 +13 +13 +13 +13 +14 +14 +13 +14 +13 +14 +13 +14 +13 +13 +14 +14 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +28 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +43 +43 +43 +46 +47 +51 +51 +51 +54 +55 +59 +58 +58 +64 +64 +68 +69 +68 +72 +72 +76 +76 +78 +82 +82 +86 +86 +91 +90 +90 +96 +96 +100 +100 +100 +106 +106 +106 +106 +106 +110 +110 +115 +115 +116 +119 +119 +125 +126 +127 +129 +129 +134 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +166 +169 +169 +173 +173 +174 +175 +175 +179 +179 +182 +182 +183 +184 +185 +189 +188 +188 +190 +190 +195 +194 +195 +197 +196 +198 +199 +199 +201 +201 +200 +200 +203 +202 +202 +205 +204 +204 +205 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +207 +204 +204 +204 +204 +203 +202 +202 +200 +201 +200 +200 +200 +199 +199 +198 +198 +198 +196 +196 +194 +194 +194 +190 +190 +188 +189 +189 +185 +185 +183 +182 +178 +179 +179 +175 +175 +173 +173 +173 +168 +169 +165 +165 +164 +161 +161 +157 +157 +157 +151 +151 +147 +147 +145 +143 +143 +139 +139 +133 +133 +134 +130 +129 +125 +125 +125 +119 +119 +119 +119 +120 +115 +116 +109 +110 +110 +105 +106 +99 +100 +97 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +69 +69 +64 +64 +59 +59 +59 +55 +54 +50 +51 +48 +47 +47 +43 +43 +41 +41 +41 +37 +37 +38 +37 +37 +33 +34 +30 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +14 +14 +13 +14 +14 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +20 +21 +21 +21 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +41 +41 +41 +43 +43 +47 +47 +47 +51 +50 +55 +54 +59 +59 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +82 +82 +83 +86 +86 +90 +90 +90 +96 +96 +100 +100 +102 +106 +106 +110 +110 +116 +116 +116 +120 +120 +125 +125 +126 +129 +129 +133 +133 +134 +139 +140 +143 +143 +144 +147 +147 +151 +151 +156 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +179 +182 +183 +184 +185 +185 +188 +189 +191 +190 +195 +194 +195 +197 +197 +198 +198 +199 +200 +201 +201 +201 +201 +202 +202 +204 +205 +204 +204 +205 +207 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +207 +207 +206 +206 +204 +205 +204 +204 +204 +202 +202 +201 +200 +201 +200 +200 +198 +199 +199 +196 +196 +194 +194 +191 +191 +190 +189 +189 +184 +185 +185 +183 +182 +182 +183 +183 +179 +178 +174 +175 +175 +173 +173 +168 +169 +167 +165 +165 +161 +161 +156 +157 +157 +151 +151 +147 +147 +147 +143 +143 +143 +143 +143 +139 +139 +134 +134 +134 +130 +129 +126 +125 +122 +120 +119 +115 +115 +110 +109 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +68 +68 +68 +64 +65 +58 +58 +59 +55 +55 +50 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +14 +14 +14 +14 +14 +14 +14 +13 +14 +13 +13 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +27 +27 +27 +31 +31 +33 +33 +33 +36 +37 +41 +41 +41 +43 +43 +47 +47 +50 +51 +51 +54 +55 +59 +59 +59 +65 +64 +64 +65 +65 +68 +68 +72 +73 +73 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +105 +110 +110 +115 +115 +116 +119 +119 +125 +125 +126 +130 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +151 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +174 +179 +178 +183 +183 +183 +184 +184 +188 +188 +188 +190 +191 +194 +194 +195 +197 +197 +198 +198 +198 +200 +201 +200 +200 +200 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +204 +204 +205 +204 +205 +203 +202 +201 +201 +200 +200 +200 +198 +198 +197 +197 +196 +194 +194 +195 +194 +194 +190 +190 +189 +189 +188 +184 +185 +182 +182 +180 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +164 +161 +161 +161 +161 +161 +157 +157 +152 +151 +152 +147 +147 +143 +143 +141 +139 +139 +133 +133 +129 +129 +129 +125 +125 +120 +119 +120 +116 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +86 +86 +85 +82 +82 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +65 +64 +59 +58 +54 +54 +55 +51 +50 +46 +46 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +12 +12 +13 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +13 +14 +14 +14 +13 +14 +14 +13 +14 +14 +14 +13 +13 +14 +14 +14 +13 +12 +15 +15 +15 +15 +15 +17 +17 +19 +20 +19 +21 +21 +25 +25 +26 +27 +27 +31 +31 +33 +33 +32 +37 +36 +41 +41 +41 +42 +43 +42 +43 +43 +47 +47 +50 +51 +51 +55 +54 +59 +58 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +105 +106 +110 +110 +115 +115 +115 +119 +120 +125 +126 +125 +129 +130 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +172 +173 +175 +175 +179 +179 +179 +182 +182 +185 +185 +184 +189 +189 +190 +190 +191 +194 +195 +196 +196 +199 +198 +198 +200 +200 +200 +201 +200 +202 +202 +205 +204 +205 +204 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +207 +207 +206 +204 +204 +204 +205 +204 +202 +203 +203 +202 +202 +200 +200 +200 +201 +200 +198 +198 +196 +196 +197 +195 +194 +191 +191 +188 +188 +189 +185 +184 +183 +183 +183 +179 +179 +179 +179 +179 +174 +174 +173 +173 +173 +169 +169 +165 +165 +163 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +126 +126 +120 +119 +115 +116 +109 +110 +109 +106 +106 +100 +100 +100 +96 +96 +90 +90 +89 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +59 +58 +58 +54 +54 +50 +51 +50 +46 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +32 +31 +31 +31 +27 +27 +26 +24 +22 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +14 +14 +14 +13 +13 +13 +14 +13 +13 +14 +14 +14 +13 +14 +13 +14 +14 +14 +13 +14 +13 +13 +14 +14 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +42 +43 +43 +47 +47 +51 +50 +51 +54 +55 +59 +59 +59 +64 +65 +69 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +115 +119 +120 +119 +125 +125 +129 +130 +129 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +168 +169 +173 +173 +175 +175 +175 +178 +179 +183 +182 +185 +185 +185 +189 +189 +190 +191 +191 +194 +195 +197 +196 +196 +198 +198 +201 +200 +201 +200 +200 +202 +202 +203 +204 +204 +204 +205 +206 +206 +206 +207 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +205 +204 +204 +204 +204 +202 +202 +201 +200 +200 +201 +201 +198 +198 +198 +197 +197 +194 +194 +194 +190 +190 +190 +190 +191 +189 +188 +184 +184 +185 +183 +182 +179 +176 +176 +175 +175 +173 +172 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +130 +130 +130 +126 +125 +119 +119 +119 +116 +115 +110 +110 +110 +106 +105 +100 +100 +100 +96 +96 +90 +90 +90 +86 +87 +82 +82 +76 +76 +76 +73 +72 +68 +68 +68 +64 +64 +58 +59 +58 +55 +54 +51 +50 +50 +47 +46 +43 +42 +43 +41 +41 +37 +36 +34 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +16 +13 +13 +12 +13 +14 +14 +14 +14 +13 +14 +13 +14 +14 +14 +13 +14 +13 +14 +13 +14 +14 +14 +13 +13 +13 +14 +14 +13 +13 +14 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +40 +42 +43 +47 +47 +47 +51 +51 +54 +55 +54 +58 +58 +64 +64 +65 +68 +68 +73 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +109 +110 +115 +116 +115 +119 +119 +125 +125 +130 +129 +129 +133 +133 +139 +140 +139 +143 +143 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +179 +183 +183 +182 +182 +183 +185 +185 +188 +189 +188 +191 +190 +194 +194 +195 +196 +197 +198 +199 +200 +200 +200 +201 +201 +202 +203 +202 +204 +204 +204 +205 +204 +204 +204 +207 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +205 +205 +204 +204 +204 +203 +202 +203 +202 +203 +200 +200 +200 +200 +200 +199 +199 +197 +196 +195 +194 +195 +191 +191 +188 +189 +188 +185 +185 +182 +183 +182 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +140 +139 +133 +133 +129 +129 +129 +126 +125 +119 +120 +119 +115 +116 +110 +109 +106 +106 +106 +100 +100 +96 +96 +90 +90 +90 +90 +90 +86 +86 +82 +82 +83 +77 +76 +72 +72 +72 +68 +68 +64 +64 +59 +58 +58 +54 +55 +51 +51 +51 +47 +46 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +24 +22 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +14 +13 +14 +13 +13 +13 +14 +14 +13 +14 +14 +13 +13 +13 +14 +13 +13 +15 +15 +17 +17 +19 +19 +19 +21 +21 +24 +25 +25 +27 +27 +31 +31 +31 +33 +33 +36 +37 +37 +41 +41 +43 +43 +47 +47 +47 +50 +51 +55 +54 +55 +59 +58 +64 +65 +64 +68 +69 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +95 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +115 +116 +119 +119 +125 +126 +125 +129 +129 +133 +133 +134 +139 +139 +143 +143 +148 +147 +147 +151 +151 +156 +157 +157 +161 +161 +165 +165 +164 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +182 +182 +185 +185 +188 +189 +189 +191 +190 +194 +194 +194 +196 +196 +196 +196 +196 +199 +199 +201 +200 +200 +200 +201 +202 +202 +203 +204 +204 +204 +204 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +207 +206 +206 +205 +204 +205 +204 +205 +202 +203 +200 +200 +200 +200 +200 +198 +198 +198 +197 +197 +195 +194 +194 +191 +191 +188 +189 +189 +185 +185 +183 +183 +180 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +133 +133 +133 +129 +130 +125 +125 +125 +120 +120 +116 +116 +116 +109 +110 +106 +106 +105 +100 +100 +96 +96 +96 +90 +90 +86 +86 +83 +82 +82 +76 +76 +72 +72 +72 +69 +68 +64 +64 +64 +59 +58 +55 +55 +55 +51 +50 +47 +47 +47 +43 +43 +41 +41 +36 +37 +37 +33 +33 +31 +31 +31 +27 +27 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +14 +13 +14 +13 +13 +14 +14 +13 +14 +14 +14 +13 +14 +14 +13 +13 +13 +13 +14 +14 +14 +14 +13 +14 +13 +13 +14 +13 +15 +15 +18 +17 +18 +19 +19 +21 +21 +21 +25 +25 +27 +27 +30 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +51 +51 +55 +55 +59 +59 +59 +64 +64 +69 +69 +72 +73 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +99 +106 +106 +110 +109 +110 +116 +116 +119 +119 +126 +125 +126 +129 +129 +133 +134 +134 +140 +139 +143 +143 +143 +147 +148 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +183 +182 +183 +185 +185 +189 +189 +189 +190 +190 +194 +194 +195 +196 +196 +198 +198 +200 +200 +201 +201 +201 +203 +203 +202 +204 +204 +204 +205 +204 +205 +205 +206 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +201 +200 +200 +200 +200 +199 +198 +199 +197 +196 +195 +194 +190 +191 +191 +188 +188 +184 +184 +185 +182 +183 +179 +178 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +134 +129 +129 +125 +126 +125 +120 +120 +116 +116 +115 +110 +110 +106 +106 +101 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +68 +68 +64 +64 +65 +58 +59 +54 +55 +50 +50 +50 +46 +47 +43 +43 +43 +41 +40 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +28 +27 +26 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +13 +14 +14 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +14 +13 +14 +13 +13 +14 +14 +14 +13 +13 +13 +13 +15 +15 +17 +18 +18 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +42 +43 +43 +47 +47 +51 +50 +54 +54 +54 +58 +58 +64 +64 +65 +68 +68 +72 +73 +72 +76 +77 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +106 +106 +105 +110 +110 +116 +115 +116 +120 +120 +126 +125 +125 +129 +129 +133 +133 +134 +139 +139 +143 +143 +143 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +179 +183 +182 +185 +184 +185 +188 +189 +190 +190 +195 +194 +194 +197 +196 +198 +199 +198 +200 +201 +201 +201 +200 +200 +200 +202 +202 +202 +204 +204 +204 +205 +205 +206 +207 +207 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +203 +200 +201 +200 +200 +198 +198 +198 +197 +196 +196 +197 +197 +194 +195 +191 +190 +191 +189 +188 +184 +185 +185 +182 +183 +179 +179 +178 +174 +175 +173 +173 +169 +169 +168 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +134 +129 +129 +125 +125 +120 +120 +120 +116 +115 +110 +110 +109 +106 +106 +100 +100 +99 +95 +96 +90 +90 +90 +86 +86 +82 +82 +83 +76 +76 +73 +72 +68 +68 +68 +64 +64 +58 +58 +59 +54 +54 +54 +54 +55 +50 +50 +47 +46 +47 +43 +43 +41 +41 +42 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +21 +21 +22 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +14 +14 +13 +14 +14 +14 +14 +14 +14 +13 +14 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +30 +31 +33 +33 +37 +37 +41 +41 +41 +42 +43 +47 +47 +47 +50 +51 +55 +54 +54 +59 +59 +64 +64 +64 +69 +68 +72 +72 +73 +76 +77 +82 +82 +87 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +115 +119 +120 +125 +125 +126 +130 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +170 +173 +173 +175 +175 +179 +178 +179 +183 +183 +185 +185 +184 +189 +189 +189 +189 +189 +191 +190 +195 +194 +194 +196 +196 +198 +198 +200 +200 +200 +200 +201 +202 +202 +203 +204 +204 +204 +204 +204 +207 +206 +207 +206 +206 +207 +206 +206 +207 +207 +206 +206 +207 +206 +205 +204 +204 +205 +204 +202 +202 +202 +201 +200 +200 +200 +200 +198 +198 +196 +196 +196 +195 +194 +190 +190 +191 +189 +189 +184 +184 +183 +182 +183 +179 +179 +175 +175 +175 +172 +173 +169 +168 +169 +166 +165 +161 +161 +160 +157 +157 +151 +151 +151 +147 +147 +143 +143 +140 +138 +139 +133 +133 +129 +130 +129 +125 +126 +119 +120 +120 +116 +116 +110 +109 +110 +106 +105 +100 +100 +100 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +77 +76 +72 +72 +73 +72 +72 +68 +68 +65 +64 +65 +59 +59 +55 +55 +52 +50 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +20 +19 +19 +18 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +14 +14 +14 +14 +13 +14 +14 +13 +14 +14 +13 +13 +14 +13 +13 +13 +14 +13 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +51 +55 +54 +55 +58 +58 +64 +65 +69 +68 +68 +72 +73 +77 +77 +77 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +119 +120 +119 +126 +125 +129 +129 +130 +133 +132 +133 +133 +133 +139 +140 +143 +143 +143 +147 +147 +151 +151 +153 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +175 +174 +175 +179 +179 +183 +183 +183 +185 +184 +188 +189 +189 +191 +190 +195 +194 +196 +196 +196 +198 +198 +198 +198 +198 +200 +200 +200 +200 +201 +203 +202 +204 +204 +204 +205 +204 +207 +206 +205 +207 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +204 +205 +204 +204 +204 +203 +203 +200 +200 +201 +201 +201 +199 +199 +197 +197 +197 +195 +195 +191 +191 +190 +189 +188 +185 +185 +185 +183 +183 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +152 +150 +151 +147 +147 +143 +143 +143 +139 +139 +134 +133 +134 +129 +130 +125 +125 +126 +120 +119 +116 +116 +110 +110 +109 +106 +106 +100 +100 +100 +96 +96 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +72 +72 +68 +68 +64 +64 +64 +59 +58 +55 +55 +54 +51 +51 +51 +51 +50 +47 +47 +42 +43 +43 +41 +41 +37 +36 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +14 +13 +13 +13 +14 +14 +14 +14 +14 +14 +13 +14 +14 +13 +14 +14 +13 +14 +13 +13 +13 +13 +14 +13 +13 +16 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +47 +47 +47 +51 +51 +55 +55 +55 +59 +58 +65 +65 +64 +69 +68 +72 +72 +72 +76 +76 +82 +82 +83 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +105 +110 +110 +110 +110 +110 +115 +116 +120 +119 +119 +125 +126 +129 +130 +130 +133 +133 +139 +139 +143 +144 +143 +147 +147 +151 +151 +151 +157 +157 +157 +157 +157 +161 +160 +165 +165 +165 +169 +169 +173 +173 +175 +175 +176 +179 +179 +182 +182 +182 +185 +184 +188 +189 +188 +190 +190 +194 +194 +194 +196 +197 +199 +199 +199 +200 +201 +200 +200 +202 +202 +202 +204 +204 +204 +204 +204 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +203 +203 +202 +200 +201 +200 +200 +200 +198 +199 +196 +196 +197 +194 +194 +191 +191 +191 +188 +188 +185 +184 +185 +182 +182 +179 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +134 +133 +133 +133 +133 +130 +129 +126 +125 +125 +119 +120 +116 +115 +116 +110 +110 +106 +106 +106 +100 +99 +96 +96 +96 +90 +90 +86 +86 +83 +82 +82 +76 +76 +72 +72 +72 +68 +69 +68 +68 +68 +65 +64 +59 +58 +59 +54 +54 +51 +51 +50 +47 +46 +43 +42 +41 +40 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +14 +13 +14 +13 +13 +13 +13 +13 +14 +14 +14 +14 +14 +14 +13 +13 +14 +14 +13 +13 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +26 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +46 +47 +46 +51 +51 +55 +54 +55 +58 +58 +64 +64 +65 +68 +68 +72 +73 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +90 +90 +90 +96 +95 +100 +100 +100 +106 +105 +110 +110 +112 +116 +115 +119 +119 +125 +126 +125 +130 +129 +133 +133 +133 +140 +140 +140 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +158 +161 +162 +165 +165 +169 +169 +169 +173 +173 +175 +175 +174 +179 +178 +183 +183 +183 +184 +185 +189 +188 +189 +190 +191 +194 +195 +196 +196 +196 +199 +198 +200 +200 +201 +200 +200 +202 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +205 +204 +204 +204 +204 +203 +202 +202 +201 +201 +200 +200 +200 +198 +198 +196 +197 +197 +194 +194 +190 +190 +189 +189 +189 +184 +185 +182 +183 +183 +179 +179 +175 +175 +174 +173 +173 +169 +168 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +148 +147 +147 +143 +143 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +119 +120 +116 +116 +110 +110 +108 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +82 +82 +82 +76 +76 +72 +72 +72 +68 +69 +65 +65 +59 +58 +58 +55 +55 +50 +51 +50 +47 +46 +43 +43 +43 +41 +41 +36 +37 +37 +33 +33 +31 +31 +32 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +13 +14 +13 +13 +14 +14 +14 +13 +14 +14 +14 +14 +13 +13 +13 +14 +14 +13 +14 +14 +14 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +42 +43 +43 +47 +46 +50 +50 +51 +55 +54 +58 +59 +64 +65 +64 +68 +68 +72 +72 +72 +76 +76 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +97 +100 +100 +106 +106 +110 +110 +109 +115 +116 +119 +119 +119 +125 +125 +126 +126 +125 +129 +129 +133 +134 +133 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +162 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +179 +183 +183 +184 +185 +188 +189 +188 +191 +191 +194 +195 +195 +196 +196 +199 +198 +198 +200 +200 +200 +200 +200 +203 +202 +204 +204 +204 +204 +204 +206 +207 +207 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +206 +206 +204 +204 +205 +205 +204 +203 +202 +200 +200 +201 +200 +200 +199 +198 +197 +197 +197 +195 +195 +190 +190 +190 +189 +189 +185 +185 +184 +183 +183 +179 +179 +178 +175 +175 +173 +173 +174 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +147 +147 +147 +143 +143 +139 +139 +139 +133 +134 +130 +129 +127 +125 +125 +120 +119 +115 +116 +116 +110 +110 +106 +106 +106 +100 +100 +100 +100 +100 +96 +96 +90 +90 +90 +86 +87 +82 +82 +77 +76 +76 +73 +73 +68 +68 +68 +64 +64 +58 +59 +58 +54 +54 +51 +50 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +12 +14 +13 +14 +13 +14 +13 +14 +13 +13 +13 +13 +14 +13 +14 +14 +14 +14 +14 +14 +14 +14 +13 +14 +14 +13 +13 +13 +16 +15 +15 +17 +18 +19 +19 +20 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +36 +37 +38 +41 +41 +43 +43 +46 +46 +46 +51 +50 +54 +55 +54 +58 +59 +58 +58 +59 +65 +64 +69 +68 +69 +72 +72 +76 +76 +77 +82 +82 +86 +86 +90 +90 +90 +95 +96 +100 +100 +100 +106 +106 +106 +106 +106 +110 +110 +116 +116 +116 +120 +119 +126 +126 +127 +129 +129 +133 +134 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +174 +175 +175 +179 +178 +183 +182 +183 +185 +184 +189 +188 +188 +191 +191 +194 +194 +194 +197 +196 +198 +198 +198 +200 +201 +200 +200 +203 +203 +202 +204 +204 +204 +204 +204 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +205 +204 +204 +203 +202 +203 +200 +200 +200 +201 +201 +199 +198 +196 +197 +196 +195 +195 +190 +191 +191 +188 +189 +185 +184 +185 +182 +183 +179 +179 +175 +175 +175 +173 +173 +168 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +144 +140 +140 +133 +133 +130 +130 +129 +126 +126 +119 +119 +119 +116 +116 +116 +115 +116 +110 +110 +105 +106 +106 +100 +100 +96 +96 +93 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +65 +58 +58 +54 +54 +55 +51 +51 +47 +47 +43 +43 +42 +41 +41 +37 +37 +37 +33 +33 +32 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +16 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +14 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +36 +37 +37 +41 +41 +43 +43 +43 +47 +47 +47 +46 +47 +51 +51 +55 +55 +55 +58 +59 +64 +64 +65 +69 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +109 +115 +116 +116 +119 +120 +125 +125 +126 +129 +129 +133 +133 +134 +139 +139 +143 +143 +143 +148 +147 +151 +151 +152 +157 +157 +161 +161 +164 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +185 +185 +185 +189 +189 +190 +190 +191 +195 +195 +196 +197 +198 +198 +199 +201 +201 +200 +200 +201 +203 +203 +205 +204 +205 +204 +205 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +206 +207 +207 +206 +204 +204 +204 +205 +205 +202 +203 +201 +200 +200 +200 +200 +199 +198 +199 +197 +197 +195 +195 +195 +190 +190 +189 +188 +184 +185 +185 +182 +182 +179 +179 +179 +175 +175 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +159 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +134 +133 +134 +133 +133 +129 +129 +125 +126 +125 +120 +120 +115 +115 +111 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +68 +68 +64 +65 +59 +59 +59 +54 +54 +51 +51 +50 +47 +47 +43 +42 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +22 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +14 +14 +14 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +18 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +33 +33 +32 +37 +37 +40 +41 +41 +43 +43 +47 +47 +47 +51 +51 +55 +54 +58 +59 +58 +64 +64 +68 +68 +68 +72 +73 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +98 +100 +100 +106 +106 +110 +110 +110 +115 +115 +120 +120 +120 +125 +126 +130 +129 +130 +134 +133 +139 +139 +140 +144 +144 +147 +147 +151 +151 +152 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +178 +179 +183 +182 +182 +184 +185 +188 +189 +190 +190 +191 +195 +195 +196 +196 +197 +198 +199 +199 +199 +198 +200 +200 +201 +200 +200 +202 +202 +204 +204 +205 +204 +205 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +205 +205 +204 +205 +203 +202 +201 +200 +201 +200 +201 +198 +198 +197 +196 +197 +195 +194 +190 +191 +190 +188 +189 +188 +188 +188 +185 +185 +182 +182 +183 +178 +179 +175 +175 +175 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +151 +151 +151 +147 +147 +143 +143 +144 +139 +140 +133 +133 +131 +130 +129 +126 +126 +119 +119 +119 +115 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +76 +76 +76 +72 +72 +69 +68 +69 +64 +65 +59 +59 +58 +55 +54 +51 +50 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +34 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +14 +13 +14 +14 +14 +14 +14 +13 +13 +13 +13 +13 +14 +14 +13 +13 +14 +14 +13 +14 +14 +13 +14 +13 +13 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +34 +36 +37 +41 +41 +43 +43 +43 +47 +47 +50 +51 +50 +54 +55 +55 +55 +54 +58 +59 +65 +64 +64 +68 +68 +72 +73 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +105 +106 +105 +110 +110 +115 +116 +116 +119 +119 +125 +126 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +161 +161 +161 +165 +165 +165 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +183 +185 +184 +188 +188 +189 +190 +190 +195 +194 +195 +196 +197 +199 +199 +199 +201 +200 +200 +201 +203 +202 +203 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +204 +204 +204 +204 +203 +202 +202 +200 +200 +200 +200 +200 +198 +199 +198 +199 +198 +196 +196 +194 +194 +195 +190 +191 +188 +188 +188 +185 +185 +182 +183 +178 +179 +179 +175 +174 +173 +173 +172 +169 +169 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +152 +147 +147 +143 +143 +140 +139 +139 +133 +133 +129 +129 +130 +126 +126 +119 +120 +120 +116 +116 +110 +110 +110 +106 +105 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +59 +59 +55 +54 +51 +51 +47 +47 +47 +42 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +26 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +14 +13 +13 +13 +13 +14 +14 +13 +14 +13 +14 +13 +14 +14 +14 +13 +14 +13 +14 +13 +13 +13 +13 +13 +13 +15 +15 +15 +17 +17 +20 +19 +19 +21 +21 +25 +25 +26 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +43 +43 +43 +47 +47 +50 +51 +51 +54 +55 +59 +59 +64 +64 +64 +68 +68 +72 +72 +72 +76 +77 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +115 +115 +115 +119 +119 +125 +126 +125 +129 +129 +133 +133 +133 +139 +140 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +165 +165 +165 +169 +168 +173 +173 +172 +175 +175 +179 +179 +179 +183 +182 +185 +185 +184 +188 +189 +190 +191 +190 +194 +194 +197 +197 +199 +198 +199 +200 +201 +200 +200 +200 +203 +203 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +205 +202 +202 +203 +203 +202 +200 +200 +201 +200 +201 +198 +198 +196 +196 +195 +194 +195 +190 +190 +188 +188 +189 +185 +185 +183 +183 +182 +179 +178 +179 +178 +179 +174 +175 +173 +173 +173 +169 +170 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +140 +139 +133 +133 +133 +129 +129 +125 +126 +126 +119 +119 +115 +116 +110 +109 +110 +106 +105 +100 +100 +100 +96 +96 +90 +90 +90 +87 +86 +82 +82 +82 +76 +76 +72 +72 +73 +68 +69 +65 +65 +58 +58 +59 +55 +55 +50 +50 +51 +46 +47 +43 +42 +43 +40 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +22 +21 +21 +19 +19 +17 +17 +17 +16 +15 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +14 +13 +14 +14 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +39 +41 +41 +42 +42 +47 +47 +47 +51 +51 +55 +54 +55 +58 +58 +64 +65 +65 +68 +68 +72 +73 +72 +75 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +116 +119 +120 +125 +126 +125 +129 +129 +133 +133 +140 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +172 +174 +175 +175 +179 +179 +183 +183 +183 +185 +185 +189 +189 +188 +190 +190 +191 +190 +191 +194 +194 +196 +196 +196 +198 +198 +200 +200 +201 +200 +201 +202 +203 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +205 +205 +205 +204 +204 +202 +202 +202 +200 +201 +200 +200 +201 +198 +198 +199 +198 +199 +196 +197 +195 +195 +195 +190 +190 +188 +188 +185 +184 +185 +183 +182 +178 +178 +178 +175 +173 +173 +173 +168 +169 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +119 +120 +116 +115 +110 +109 +110 +106 +106 +100 +100 +97 +96 +95 +89 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +58 +58 +54 +54 +51 +51 +47 +47 +47 +42 +43 +41 +40 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +18 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +14 +14 +13 +14 +14 +13 +14 +13 +14 +13 +13 +13 +14 +13 +13 +15 +15 +15 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +40 +43 +43 +43 +46 +47 +50 +51 +51 +55 +54 +59 +59 +64 +65 +64 +68 +69 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +109 +115 +115 +115 +120 +119 +125 +125 +125 +129 +129 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +174 +179 +178 +179 +182 +183 +184 +184 +185 +189 +189 +191 +190 +191 +194 +194 +196 +196 +198 +198 +198 +200 +201 +200 +200 +200 +202 +202 +203 +203 +202 +204 +204 +204 +204 +204 +206 +206 +206 +207 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +204 +205 +204 +204 +204 +205 +204 +204 +202 +202 +200 +200 +201 +200 +200 +199 +198 +198 +196 +196 +194 +194 +190 +190 +190 +189 +189 +185 +184 +184 +183 +183 +178 +179 +179 +175 +175 +173 +172 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +126 +126 +126 +120 +119 +115 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +75 +72 +73 +72 +72 +72 +68 +68 +65 +64 +64 +59 +59 +54 +55 +54 +51 +51 +47 +47 +46 +43 +43 +40 +41 +41 +37 +37 +33 +33 +34 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +14 +13 +13 +14 +13 +14 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +14 +14 +14 +13 +14 +13 +12 +15 +15 +18 +17 +17 +19 +19 +21 +21 +21 +24 +25 +27 +27 +27 +31 +31 +32 +33 +34 +38 +36 +41 +41 +42 +43 +42 +47 +47 +51 +51 +51 +55 +55 +55 +54 +55 +58 +58 +64 +64 +65 +68 +68 +72 +72 +72 +76 +76 +82 +82 +85 +86 +86 +90 +90 +96 +96 +95 +100 +100 +106 +106 +106 +110 +110 +116 +115 +116 +120 +120 +125 +125 +126 +129 +129 +133 +134 +140 +140 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +166 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +178 +182 +183 +183 +184 +184 +188 +189 +189 +191 +190 +191 +191 +191 +194 +195 +197 +197 +197 +199 +198 +200 +200 +200 +200 +200 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +205 +204 +204 +204 +204 +202 +203 +202 +200 +200 +200 +200 +200 +198 +198 +196 +196 +197 +194 +195 +190 +191 +191 +189 +189 +184 +185 +182 +183 +182 +178 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +142 +139 +139 +139 +133 +133 +129 +129 +130 +125 +125 +120 +120 +119 +115 +116 +110 +109 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +87 +86 +86 +82 +82 +76 +77 +76 +72 +72 +68 +68 +68 +65 +64 +58 +59 +58 +54 +54 +50 +50 +51 +47 +47 +43 +43 +40 +41 +41 +37 +37 +33 +33 +33 +31 +31 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +20 +17 +17 +16 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +13 +13 +13 +13 +14 +13 +13 +14 +14 +14 +14 +13 +14 +14 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +50 +50 +55 +55 +55 +59 +58 +64 +64 +68 +68 +69 +72 +72 +76 +76 +77 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +105 +106 +110 +110 +116 +115 +120 +119 +120 +125 +125 +129 +129 +130 +133 +133 +139 +139 +140 +143 +143 +147 +147 +147 +151 +151 +157 +157 +158 +161 +161 +165 +165 +169 +169 +170 +173 +173 +175 +175 +175 +179 +179 +179 +179 +179 +183 +183 +185 +185 +185 +189 +188 +191 +190 +191 +194 +195 +197 +196 +198 +198 +199 +201 +200 +200 +200 +200 +203 +202 +202 +202 +202 +204 +204 +204 +204 +205 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +206 +207 +205 +205 +204 +204 +205 +202 +202 +202 +200 +201 +200 +200 +201 +198 +199 +196 +196 +194 +194 +195 +191 +190 +188 +188 +189 +184 +185 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +130 +129 +126 +125 +120 +119 +120 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +69 +68 +69 +65 +64 +59 +59 +54 +55 +55 +51 +51 +47 +47 +46 +43 +43 +42 +42 +43 +41 +41 +36 +37 +37 +33 +33 +31 +31 +28 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +13 +14 +13 +14 +13 +14 +13 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +27 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +51 +50 +50 +55 +54 +59 +59 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +116 +120 +119 +120 +126 +126 +129 +129 +129 +134 +133 +139 +139 +140 +143 +143 +147 +147 +152 +151 +151 +157 +157 +161 +161 +161 +165 +165 +165 +165 +165 +169 +169 +172 +173 +173 +175 +174 +179 +179 +178 +182 +183 +185 +184 +188 +188 +188 +190 +191 +194 +195 +194 +196 +196 +196 +196 +196 +198 +199 +200 +200 +201 +200 +200 +202 +202 +203 +204 +204 +204 +205 +206 +206 +207 +206 +206 +206 +206 +207 +206 +207 +206 +206 +207 +206 +207 +204 +204 +205 +204 +205 +202 +202 +200 +201 +201 +200 +200 +199 +198 +199 +197 +197 +195 +194 +195 +190 +190 +189 +189 +188 +185 +185 +183 +183 +183 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +140 +133 +133 +130 +130 +126 +125 +125 +120 +118 +115 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +77 +77 +72 +72 +72 +69 +68 +64 +64 +65 +58 +59 +58 +58 +59 +54 +54 +50 +51 +51 +47 +47 +43 +43 +42 +41 +41 +37 +37 +33 +33 +33 +31 +31 +31 +31 +31 +27 +27 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +14 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +14 +13 +14 +13 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +50 +50 +55 +55 +54 +59 +58 +64 +65 +65 +69 +68 +72 +72 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +110 +110 +116 +115 +117 +119 +119 +126 +126 +130 +130 +129 +133 +133 +140 +139 +139 +143 +143 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +162 +165 +165 +169 +169 +173 +173 +173 +174 +175 +179 +178 +179 +182 +183 +183 +183 +182 +185 +185 +188 +189 +188 +191 +190 +195 +195 +196 +197 +197 +198 +198 +201 +200 +200 +200 +200 +202 +203 +202 +204 +204 +204 +204 +205 +206 +206 +207 +207 +207 +206 +207 +206 +207 +206 +206 +207 +206 +206 +204 +205 +204 +204 +205 +202 +202 +202 +201 +201 +201 +200 +200 +199 +199 +197 +196 +196 +194 +195 +190 +191 +189 +188 +188 +185 +185 +183 +183 +183 +179 +179 +174 +175 +175 +173 +173 +169 +169 +169 +164 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +139 +139 +140 +133 +133 +129 +129 +129 +125 +125 +119 +119 +120 +116 +116 +109 +110 +110 +106 +106 +100 +100 +95 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +69 +68 +68 +64 +65 +58 +59 +59 +55 +54 +51 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +26 +24 +23 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +14 +13 +13 +14 +14 +13 +13 +13 +14 +14 +14 +13 +13 +14 +13 +13 +13 +14 +14 +14 +14 +13 +13 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +26 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +40 +43 +43 +43 +47 +47 +50 +50 +51 +54 +54 +58 +59 +65 +64 +65 +69 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +91 +90 +96 +96 +100 +100 +101 +106 +105 +110 +110 +115 +116 +115 +120 +119 +126 +125 +125 +129 +129 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +149 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +173 +173 +173 +175 +175 +179 +179 +179 +182 +183 +185 +185 +188 +189 +189 +191 +191 +194 +195 +195 +197 +196 +198 +198 +198 +200 +200 +200 +200 +200 +202 +202 +204 +204 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +205 +202 +202 +200 +201 +201 +200 +201 +198 +199 +196 +196 +197 +194 +194 +190 +191 +190 +189 +189 +185 +185 +185 +183 +182 +179 +179 +178 +175 +175 +173 +172 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +140 +140 +133 +134 +133 +129 +129 +125 +125 +125 +119 +119 +116 +116 +110 +110 +110 +106 +105 +100 +100 +100 +96 +96 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +72 +72 +68 +68 +65 +64 +65 +58 +58 +55 +55 +55 +51 +51 +51 +50 +51 +46 +47 +43 +43 +43 +41 +41 +37 +37 +35 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +13 +14 +14 +13 +14 +13 +14 +14 +14 +14 +13 +13 +14 +14 +13 +13 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +38 +41 +41 +43 +43 +47 +47 +47 +51 +50 +55 +54 +55 +58 +59 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +83 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +110 +110 +110 +115 +115 +119 +119 +119 +125 +125 +130 +130 +131 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +183 +185 +185 +188 +189 +188 +190 +191 +195 +195 +195 +196 +197 +198 +198 +199 +201 +201 +200 +201 +202 +202 +202 +205 +204 +204 +204 +204 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +204 +204 +205 +204 +203 +202 +203 +200 +201 +200 +200 +200 +198 +199 +199 +199 +199 +197 +197 +194 +194 +194 +191 +191 +189 +189 +189 +184 +185 +182 +182 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +148 +143 +143 +139 +139 +133 +133 +133 +130 +129 +125 +126 +125 +119 +120 +119 +120 +119 +116 +115 +109 +109 +110 +106 +106 +100 +99 +100 +96 +96 +90 +90 +87 +86 +86 +82 +82 +76 +76 +77 +72 +72 +72 +72 +72 +68 +68 +64 +64 +64 +59 +58 +55 +55 +53 +51 +50 +47 +46 +43 +43 +42 +41 +41 +37 +37 +36 +33 +33 +31 +31 +31 +27 +27 +25 +25 +26 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +13 +13 +13 +14 +14 +14 +13 +14 +14 +13 +13 +13 +14 +13 +13 +14 +14 +13 +14 +14 +14 +14 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +32 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +42 +43 +46 +47 +51 +51 +51 +55 +54 +58 +58 +60 +65 +64 +68 +68 +73 +72 +72 +76 +77 +82 +82 +82 +86 +86 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +115 +119 +119 +120 +125 +125 +129 +129 +129 +133 +133 +133 +133 +133 +139 +139 +143 +143 +144 +147 +147 +151 +151 +157 +157 +157 +161 +161 +164 +165 +165 +168 +169 +173 +173 +173 +175 +175 +179 +179 +179 +182 +182 +185 +184 +185 +188 +189 +191 +190 +194 +194 +194 +196 +196 +198 +198 +198 +200 +200 +201 +200 +200 +202 +202 +205 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +200 +200 +200 +200 +200 +198 +198 +198 +196 +197 +194 +194 +191 +191 +191 +189 +188 +184 +185 +184 +182 +183 +179 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +119 +120 +115 +116 +109 +110 +105 +106 +106 +100 +100 +96 +96 +96 +90 +90 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +69 +68 +68 +64 +64 +58 +58 +59 +54 +54 +51 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +13 +13 +14 +14 +13 +14 +14 +13 +14 +13 +14 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +20 +19 +19 +22 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +36 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +50 +54 +54 +55 +58 +59 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +93 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +115 +119 +120 +119 +120 +120 +125 +125 +129 +129 +130 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +174 +175 +179 +179 +183 +183 +184 +185 +185 +189 +189 +190 +190 +191 +195 +194 +197 +197 +196 +198 +198 +200 +200 +200 +200 +200 +202 +202 +203 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +202 +200 +200 +200 +200 +198 +198 +198 +196 +196 +195 +195 +195 +190 +190 +189 +188 +188 +185 +185 +183 +183 +183 +178 +179 +175 +174 +175 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +127 +125 +125 +119 +119 +115 +116 +115 +110 +110 +106 +106 +106 +100 +100 +99 +100 +100 +96 +96 +90 +90 +90 +86 +85 +82 +82 +79 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +59 +58 +54 +54 +51 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +33 +33 +31 +31 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +43 +43 +43 +47 +46 +51 +51 +51 +54 +54 +54 +54 +55 +58 +58 +64 +64 +64 +68 +68 +72 +72 +73 +76 +76 +82 +82 +87 +86 +86 +90 +90 +96 +96 +96 +100 +100 +99 +99 +100 +106 +105 +110 +110 +110 +115 +116 +119 +119 +120 +126 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +162 +165 +165 +169 +169 +172 +173 +172 +175 +175 +179 +179 +179 +182 +183 +184 +184 +184 +189 +188 +190 +190 +191 +194 +194 +197 +196 +196 +198 +198 +200 +200 +201 +200 +200 +202 +202 +204 +205 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +204 +204 +205 +204 +204 +202 +203 +200 +200 +200 +201 +200 +199 +198 +198 +196 +196 +195 +194 +195 +191 +191 +188 +188 +189 +184 +185 +182 +182 +179 +178 +179 +175 +175 +173 +173 +173 +168 +168 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +126 +126 +125 +125 +120 +120 +115 +116 +116 +110 +110 +106 +105 +101 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +83 +76 +76 +72 +72 +72 +68 +68 +64 +64 +65 +58 +58 +55 +55 +51 +50 +51 +47 +47 +43 +43 +42 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +14 +14 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +13 +14 +14 +13 +14 +14 +14 +13 +14 +13 +13 +14 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +36 +37 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +52 +55 +54 +59 +58 +64 +64 +65 +68 +68 +72 +72 +72 +76 +76 +76 +76 +76 +82 +82 +86 +86 +87 +90 +90 +96 +96 +100 +100 +99 +106 +106 +110 +109 +110 +116 +116 +119 +119 +119 +125 +125 +129 +129 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +151 +151 +151 +157 +157 +160 +161 +161 +165 +165 +169 +169 +169 +173 +173 +174 +174 +175 +178 +179 +182 +183 +183 +185 +184 +188 +189 +191 +190 +190 +194 +194 +196 +197 +196 +198 +198 +200 +200 +200 +201 +200 +202 +202 +202 +204 +205 +204 +204 +204 +206 +206 +206 +206 +207 +206 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +200 +200 +201 +200 +200 +198 +198 +196 +196 +197 +194 +194 +190 +190 +191 +188 +189 +188 +188 +188 +184 +185 +183 +182 +183 +179 +179 +175 +175 +174 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +131 +129 +129 +125 +125 +119 +119 +119 +116 +116 +110 +109 +110 +106 +106 +100 +100 +99 +96 +96 +90 +90 +90 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +58 +59 +54 +54 +51 +51 +51 +47 +47 +42 +43 +43 +41 +41 +37 +36 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +16 +13 +13 +12 +13 +14 +14 +13 +14 +14 +14 +14 +14 +14 +13 +14 +13 +14 +14 +13 +13 +13 +14 +14 +13 +14 +13 +14 +13 +13 +14 +13 +16 +15 +15 +17 +17 +19 +19 +19 +21 +21 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +35 +36 +36 +41 +41 +43 +44 +43 +47 +47 +51 +51 +51 +54 +54 +55 +54 +55 +58 +58 +64 +64 +65 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +115 +116 +119 +119 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +168 +169 +172 +173 +174 +175 +174 +178 +179 +182 +183 +182 +185 +185 +188 +188 +189 +190 +191 +194 +194 +194 +197 +197 +198 +198 +198 +200 +201 +200 +200 +202 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +207 +204 +204 +205 +204 +202 +202 +202 +200 +200 +200 +201 +200 +198 +198 +198 +198 +198 +196 +196 +194 +194 +194 +190 +191 +188 +188 +187 +184 +185 +182 +183 +178 +178 +179 +175 +175 +173 +173 +173 +169 +169 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +148 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +120 +120 +116 +116 +110 +109 +110 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +59 +58 +58 +54 +54 +50 +50 +47 +47 +46 +43 +43 +41 +40 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +14 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +14 +14 +13 +13 +14 +13 +13 +13 +13 +13 +13 +14 +13 +13 +15 +15 +15 +15 +15 +17 +17 +17 +19 +19 +21 +21 +23 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +41 +40 +41 +43 +43 +47 +46 +47 +51 +50 +54 +54 +58 +58 +58 +64 +65 +68 +68 +68 +72 +72 +76 +76 +76 +82 +81 +86 +86 +86 +90 +90 +96 +96 +97 +100 +100 +106 +106 +109 +110 +110 +115 +116 +120 +119 +120 +125 +125 +129 +129 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +147 +151 +151 +157 +157 +162 +161 +161 +165 +165 +169 +169 +169 +172 +173 +175 +175 +175 +179 +179 +183 +182 +183 +185 +185 +189 +189 +189 +190 +191 +194 +194 +197 +196 +196 +198 +198 +200 +200 +200 +200 +201 +202 +202 +202 +204 +204 +205 +204 +204 +206 +207 +206 +207 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +205 +205 +204 +204 +202 +202 +202 +201 +200 +200 +200 +200 +198 +199 +196 +197 +196 +194 +195 +190 +191 +189 +189 +189 +184 +185 +183 +182 +182 +179 +179 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +163 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +130 +129 +125 +125 +125 +119 +119 +116 +115 +113 +110 +109 +105 +106 +99 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +71 +72 +72 +68 +68 +65 +64 +58 +58 +59 +55 +54 +51 +50 +51 +46 +47 +42 +43 +43 +41 +41 +37 +37 +37 +33 +32 +31 +31 +31 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +14 +13 +14 +14 +14 +14 +14 +14 +13 +13 +14 +14 +14 +13 +14 +13 +14 +13 +14 +14 +13 +14 +13 +13 +14 +13 +13 +15 +15 +16 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +31 +31 +31 +33 +33 +37 +37 +37 +41 +40 +43 +43 +44 +47 +47 +51 +51 +55 +54 +54 +58 +58 +64 +64 +65 +68 +69 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +95 +96 +95 +100 +100 +106 +106 +106 +110 +110 +116 +116 +116 +120 +119 +125 +125 +126 +130 +129 +133 +133 +133 +139 +139 +143 +143 +148 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +182 +183 +184 +184 +189 +188 +189 +191 +190 +194 +194 +194 +196 +196 +198 +198 +198 +200 +200 +200 +200 +201 +202 +202 +205 +204 +205 +204 +204 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +205 +204 +204 +204 +204 +202 +202 +203 +200 +201 +200 +200 +198 +198 +198 +196 +196 +194 +194 +194 +190 +191 +191 +190 +190 +188 +188 +184 +184 +185 +182 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +168 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +140 +133 +133 +130 +129 +129 +125 +125 +119 +120 +119 +115 +115 +110 +110 +109 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +83 +82 +77 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +59 +58 +54 +54 +50 +50 +51 +46 +47 +43 +42 +43 +41 +40 +37 +37 +34 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +16 +13 +13 +12 +13 +13 +13 +13 +14 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +13 +13 +13 +14 +14 +14 +14 +14 +14 +13 +13 +13 +14 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +51 +51 +55 +55 +58 +58 +59 +64 +64 +69 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +110 +110 +115 +116 +119 +119 +126 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +178 +182 +182 +185 +184 +185 +188 +188 +191 +190 +191 +195 +195 +197 +196 +196 +199 +198 +200 +200 +200 +200 +201 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +204 +204 +204 +205 +205 +202 +202 +200 +200 +200 +200 +200 +200 +200 +200 +198 +199 +196 +196 +196 +195 +195 +191 +190 +189 +188 +189 +184 +185 +183 +183 +182 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +160 +161 +157 +158 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +130 +129 +129 +125 +125 +119 +119 +120 +115 +115 +109 +110 +110 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +59 +58 +55 +55 +51 +51 +47 +47 +47 +43 +43 +40 +40 +41 +36 +37 +33 +33 +33 +30 +31 +27 +27 +27 +25 +24 +21 +21 +22 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +13 +14 +13 +13 +13 +13 +14 +13 +13 +14 +14 +14 +14 +13 +13 +14 +14 +13 +13 +14 +13 +13 +13 +14 +14 +14 +13 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +27 +27 +27 +31 +31 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +42 +43 +43 +47 +47 +51 +50 +54 +54 +55 +58 +59 +65 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +91 +96 +96 +100 +100 +106 +106 +106 +109 +110 +115 +116 +116 +119 +120 +126 +126 +125 +129 +130 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +158 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +179 +182 +183 +184 +185 +185 +188 +188 +190 +191 +194 +194 +194 +196 +196 +198 +198 +198 +200 +200 +200 +200 +200 +202 +202 +204 +204 +204 +204 +204 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +204 +204 +202 +202 +202 +201 +201 +200 +200 +199 +198 +198 +196 +197 +194 +195 +194 +190 +190 +188 +188 +188 +184 +185 +183 +183 +182 +178 +179 +175 +175 +175 +173 +173 +169 +169 +164 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +130 +129 +125 +125 +119 +120 +116 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +65 +65 +65 +58 +59 +54 +55 +54 +50 +50 +47 +47 +47 +43 +43 +41 +40 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +14 +14 +14 +13 +14 +13 +13 +14 +14 +13 +14 +14 +14 +14 +13 +13 +15 +15 +17 +17 +19 +18 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +38 +41 +40 +43 +43 +46 +47 +47 +51 +50 +55 +55 +55 +58 +58 +65 +64 +65 +68 +68 +72 +72 +72 +77 +76 +82 +82 +83 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +109 +116 +116 +116 +119 +120 +125 +126 +125 +129 +129 +133 +134 +134 +139 +139 +143 +143 +148 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +172 +175 +175 +179 +179 +179 +182 +182 +184 +184 +188 +189 +188 +191 +190 +195 +194 +194 +196 +196 +196 +196 +196 +198 +198 +200 +200 +200 +200 +200 +202 +202 +203 +204 +204 +204 +204 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +205 +205 +204 +204 +203 +203 +202 +200 +200 +200 +200 +200 +198 +198 +197 +196 +196 +194 +194 +191 +191 +190 +189 +189 +184 +184 +185 +183 +183 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +130 +129 +129 +125 +125 +119 +119 +119 +116 +116 +110 +110 +109 +106 +106 +100 +100 +100 +96 +96 +90 +90 +91 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +68 +68 +65 +64 +58 +59 +58 +55 +54 +51 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +36 +33 +33 +33 +30 +31 +27 +27 +27 +25 +25 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +12 +13 +14 +14 +13 +13 +14 +14 +14 +14 +13 +13 +14 +13 +13 +14 +13 +14 +13 +14 +14 +14 +13 +13 +14 +13 +14 +13 +14 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +50 +54 +55 +55 +58 +58 +64 +65 +65 +68 +68 +72 +72 +76 +76 +76 +82 +82 +87 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +109 +115 +116 +116 +120 +120 +125 +126 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +166 +169 +169 +173 +173 +175 +174 +175 +179 +179 +182 +182 +183 +184 +184 +185 +185 +184 +189 +189 +191 +191 +191 +195 +194 +196 +196 +197 +198 +198 +200 +200 +200 +200 +200 +203 +202 +202 +202 +202 +204 +204 +205 +204 +204 +204 +204 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +200 +200 +200 +200 +200 +199 +198 +199 +196 +197 +195 +194 +191 +190 +190 +189 +188 +184 +184 +185 +182 +182 +179 +179 +179 +175 +175 +173 +172 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +152 +151 +151 +147 +147 +143 +143 +143 +139 +139 +134 +133 +134 +130 +129 +125 +125 +125 +120 +120 +115 +115 +116 +110 +109 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +65 +58 +58 +55 +54 +51 +51 +51 +46 +47 +43 +43 +43 +41 +41 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +28 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +15 +15 +15 +13 +13 +12 +12 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +14 +14 +14 +14 +14 +14 +13 +14 +14 +13 +13 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +32 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +50 +55 +54 +55 +58 +59 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +91 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +115 +119 +119 +125 +125 +126 +130 +130 +133 +133 +134 +139 +139 +143 +143 +144 +147 +147 +151 +151 +158 +157 +157 +161 +161 +165 +165 +165 +169 +169 +169 +169 +169 +173 +173 +175 +175 +175 +178 +179 +183 +182 +183 +184 +185 +188 +188 +191 +190 +191 +195 +194 +196 +196 +196 +198 +199 +199 +198 +198 +201 +200 +200 +200 +200 +202 +203 +205 +204 +204 +204 +205 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +204 +204 +204 +204 +204 +203 +203 +200 +200 +200 +200 +201 +198 +198 +196 +196 +196 +194 +195 +190 +190 +190 +188 +188 +185 +185 +185 +183 +183 +179 +179 +179 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +134 +134 +129 +129 +126 +126 +120 +119 +120 +115 +116 +110 +110 +110 +106 +105 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +68 +68 +68 +65 +64 +59 +59 +58 +54 +54 +50 +51 +51 +47 +47 +42 +43 +43 +41 +41 +37 +36 +37 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +19 +19 +19 +17 +17 +15 +15 +15 +15 +14 +13 +13 +13 +12 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +14 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +14 +14 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +50 +54 +55 +59 +59 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +91 +89 +90 +96 +96 +100 +100 +100 +106 +105 +110 +109 +110 +116 +116 +119 +119 +119 +125 +125 +129 +129 +130 +133 +133 +139 +140 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +176 +179 +179 +182 +182 +184 +185 +184 +189 +188 +191 +191 +191 +194 +195 +194 +194 +194 +196 +196 +199 +199 +198 +200 +201 +199 +201 +201 +202 +202 +205 +204 +204 +204 +204 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +204 +204 +204 +204 +203 +203 +202 +200 +201 +200 +200 +200 +199 +198 +196 +196 +196 +194 +194 +191 +190 +190 +188 +189 +184 +184 +184 +182 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +130 +129 +129 +126 +125 +119 +119 +119 +115 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +68 +69 +64 +64 +64 +64 +64 +58 +58 +55 +54 +55 +50 +50 +47 +47 +45 +43 +42 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +16 +15 +14 +15 +15 +13 +13 +13 +12 +13 +14 +13 +13 +13 +14 +13 +14 +13 +13 +14 +13 +14 +13 +14 +13 +13 +14 +13 +13 +14 +13 +13 +14 +14 +14 +14 +12 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +46 +47 +51 +51 +54 +55 +55 +59 +58 +64 +64 +65 +68 +68 +72 +72 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +101 +105 +106 +106 +110 +109 +115 +115 +116 +120 +120 +125 +125 +129 +129 +130 +133 +133 +139 +139 +138 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +166 +169 +169 +173 +173 +174 +175 +175 +179 +178 +183 +182 +183 +185 +185 +185 +184 +185 +188 +188 +191 +191 +191 +194 +194 +196 +196 +197 +198 +199 +200 +201 +200 +200 +200 +202 +202 +205 +204 +204 +205 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +205 +205 +205 +204 +202 +202 +200 +200 +201 +200 +200 +198 +198 +198 +196 +196 +194 +194 +194 +190 +190 +188 +188 +184 +184 +185 +182 +183 +178 +179 +178 +174 +175 +173 +172 +172 +169 +168 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +144 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +125 +119 +119 +116 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +91 +90 +90 +86 +86 +83 +82 +82 +76 +76 +72 +72 +72 +68 +68 +65 +64 +65 +59 +58 +55 +55 +55 +51 +51 +47 +47 +43 +43 +43 +41 +40 +37 +37 +37 +33 +33 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +15 +15 +16 +13 +13 +12 +12 +13 +14 +13 +13 +13 +14 +13 +13 +13 +13 +14 +13 +14 +13 +13 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +26 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +42 +43 +43 +46 +47 +50 +51 +51 +54 +54 +58 +58 +65 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +101 +106 +106 +110 +109 +116 +115 +116 +119 +120 +125 +125 +125 +129 +129 +129 +129 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +148 +151 +151 +157 +157 +161 +161 +161 +165 +165 +168 +169 +169 +173 +173 +173 +173 +173 +175 +175 +178 +179 +179 +183 +182 +184 +184 +188 +188 +189 +190 +190 +195 +195 +194 +197 +196 +198 +199 +198 +200 +200 +201 +201 +200 +202 +202 +204 +204 +205 +204 +205 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +204 +204 +204 +204 +204 +202 +202 +201 +200 +201 +201 +200 +198 +198 +196 +196 +196 +194 +194 +190 +190 +190 +188 +189 +185 +185 +184 +182 +182 +179 +178 +178 +174 +175 +173 +173 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +126 +120 +120 +115 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +71 +69 +68 +64 +64 +58 +58 +58 +54 +54 +51 +50 +51 +47 +47 +47 +46 +47 +43 +42 +41 +41 +41 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +14 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +14 +13 +14 +14 +14 +13 +13 +13 +13 +15 +15 +18 +17 +17 +19 +18 +21 +21 +21 +25 +25 +27 +27 +27 +30 +31 +33 +33 +33 +33 +33 +37 +37 +37 +41 +41 +43 +43 +47 +46 +47 +51 +51 +54 +54 +55 +59 +59 +58 +59 +58 +65 +64 +69 +69 +69 +72 +72 +76 +76 +77 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +106 +106 +106 +110 +110 +115 +115 +116 +120 +119 +125 +126 +127 +130 +129 +133 +133 +139 +140 +139 +143 +143 +147 +147 +147 +151 +151 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +171 +173 +173 +175 +175 +179 +179 +179 +182 +183 +185 +185 +185 +188 +188 +190 +191 +190 +195 +195 +197 +196 +197 +199 +199 +200 +200 +200 +200 +200 +202 +202 +205 +205 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +207 +207 +204 +204 +205 +204 +204 +203 +202 +200 +200 +200 +200 +200 +198 +198 +198 +197 +196 +195 +194 +194 +191 +191 +189 +189 +189 +184 +185 +183 +182 +179 +179 +179 +175 +175 +173 +173 +173 +168 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +133 +133 +133 +130 +130 +125 +126 +125 +120 +119 +116 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +93 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +69 +68 +69 +64 +64 +59 +58 +59 +54 +54 +51 +50 +52 +47 +47 +43 +43 +41 +41 +41 +37 +37 +32 +33 +33 +31 +31 +26 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +13 +14 +13 +14 +14 +14 +14 +14 +14 +14 +13 +14 +14 +14 +14 +14 +14 +14 +14 +13 +13 +14 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +20 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +34 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +51 +54 +55 +55 +59 +58 +65 +64 +64 +68 +69 +72 +73 +77 +76 +77 +82 +83 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +117 +119 +119 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +162 +165 +165 +168 +169 +173 +173 +173 +175 +175 +178 +178 +179 +183 +182 +184 +185 +184 +189 +189 +191 +190 +191 +195 +195 +197 +196 +198 +198 +198 +200 +201 +200 +201 +200 +202 +202 +204 +204 +205 +204 +204 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +204 +204 +204 +204 +204 +202 +202 +201 +200 +200 +201 +200 +199 +198 +198 +197 +196 +194 +195 +194 +190 +190 +188 +188 +185 +184 +185 +183 +183 +179 +179 +179 +174 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +143 +143 +143 +139 +139 +134 +133 +133 +129 +129 +125 +125 +125 +119 +120 +116 +116 +116 +110 +110 +106 +106 +103 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +76 +76 +76 +72 +72 +68 +68 +69 +64 +65 +59 +59 +55 +54 +54 +50 +50 +47 +46 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +28 +25 +24 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +14 +14 +13 +14 +13 +14 +14 +13 +13 +13 +14 +13 +13 +13 +14 +14 +14 +14 +13 +13 +14 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +40 +41 +41 +42 +43 +47 +46 +47 +50 +51 +54 +54 +56 +58 +58 +65 +64 +69 +68 +68 +72 +72 +76 +76 +76 +82 +81 +82 +82 +82 +86 +86 +90 +90 +90 +96 +95 +100 +100 +100 +106 +105 +110 +110 +116 +115 +116 +120 +120 +125 +126 +126 +129 +129 +130 +129 +129 +133 +134 +139 +139 +140 +143 +143 +147 +147 +149 +151 +151 +157 +157 +160 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +182 +182 +184 +185 +188 +189 +190 +191 +190 +194 +194 +197 +196 +197 +198 +198 +198 +198 +198 +200 +201 +200 +200 +201 +202 +203 +204 +205 +205 +205 +205 +207 +207 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +207 +206 +206 +204 +204 +204 +204 +204 +202 +203 +200 +200 +200 +200 +200 +198 +198 +197 +196 +196 +195 +195 +190 +191 +191 +188 +189 +185 +185 +184 +183 +183 +178 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +130 +130 +126 +125 +126 +120 +119 +115 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +74 +72 +72 +68 +68 +64 +64 +64 +59 +58 +54 +54 +54 +50 +50 +47 +47 +47 +43 +43 +41 +41 +42 +37 +36 +33 +33 +31 +31 +31 +26 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +14 +14 +14 +14 +14 +14 +14 +13 +13 +14 +14 +14 +14 +13 +13 +13 +13 +14 +13 +14 +13 +14 +14 +14 +13 +13 +13 +13 +15 +15 +18 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +50 +51 +51 +55 +55 +59 +59 +58 +65 +64 +65 +64 +65 +68 +68 +72 +72 +72 +76 +76 +82 +82 +84 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +109 +109 +109 +115 +116 +119 +119 +120 +125 +125 +129 +129 +131 +133 +133 +139 +140 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +177 +179 +179 +182 +182 +184 +185 +185 +188 +188 +190 +190 +190 +194 +195 +196 +196 +197 +199 +198 +200 +201 +200 +201 +201 +203 +202 +204 +205 +204 +204 +204 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +204 +204 +204 +204 +205 +203 +202 +200 +200 +201 +201 +200 +198 +198 +198 +197 +197 +194 +195 +194 +191 +190 +189 +188 +189 +185 +185 +183 +182 +183 +179 +179 +175 +175 +172 +173 +173 +169 +169 +165 +165 +165 +161 +161 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +141 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +120 +120 +116 +116 +116 +116 +116 +109 +109 +106 +106 +106 +100 +100 +96 +96 +93 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +69 +68 +64 +64 +64 +58 +59 +54 +55 +55 +50 +51 +47 +47 +43 +43 +42 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +12 +13 +14 +13 +14 +14 +14 +13 +13 +14 +14 +14 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +13 +14 +14 +14 +13 +13 +15 +15 +17 +17 +17 +20 +19 +21 +21 +21 +25 +25 +27 +27 +28 +31 +31 +33 +33 +36 +37 +37 +40 +41 +43 +43 +43 +47 +47 +47 +47 +46 +50 +50 +54 +55 +55 +58 +59 +64 +65 +66 +68 +68 +72 +73 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +115 +115 +115 +119 +119 +125 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +165 +165 +164 +168 +169 +173 +173 +173 +175 +175 +179 +178 +179 +183 +183 +185 +185 +185 +189 +188 +190 +191 +190 +194 +194 +197 +197 +197 +199 +198 +200 +200 +200 +201 +200 +203 +203 +204 +204 +204 +204 +205 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +207 +206 +206 +206 +206 +205 +205 +205 +204 +204 +202 +202 +201 +201 +200 +200 +201 +199 +198 +199 +197 +196 +194 +195 +194 +190 +191 +189 +189 +184 +184 +185 +182 +183 +179 +179 +179 +175 +175 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +133 +133 +133 +129 +129 +125 +126 +126 +119 +119 +115 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +83 +82 +82 +76 +76 +72 +73 +73 +68 +68 +64 +65 +59 +58 +58 +55 +55 +51 +51 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +30 +31 +31 +27 +27 +25 +25 +22 +21 +21 +19 +19 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +14 +14 +13 +14 +13 +13 +14 +14 +13 +13 +14 +14 +13 +14 +14 +13 +13 +14 +14 +13 +14 +13 +14 +14 +13 +12 +15 +15 +16 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +42 +47 +46 +48 +50 +52 +54 +54 +58 +58 +58 +64 +65 +68 +68 +69 +73 +72 +72 +72 +73 +76 +76 +82 +82 +82 +86 +86 +90 +90 +95 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +116 +115 +119 +119 +126 +126 +125 +130 +129 +133 +133 +134 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +172 +173 +175 +175 +178 +179 +179 +182 +183 +184 +185 +188 +188 +188 +190 +191 +194 +194 +195 +196 +197 +198 +198 +201 +201 +200 +200 +201 +200 +203 +202 +205 +204 +204 +204 +204 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +204 +204 +204 +204 +205 +202 +202 +203 +200 +201 +200 +200 +198 +198 +198 +196 +196 +195 +194 +194 +191 +190 +191 +191 +191 +189 +188 +185 +185 +185 +182 +183 +178 +178 +179 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +160 +157 +157 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +138 +133 +133 +129 +129 +126 +125 +125 +119 +119 +115 +116 +115 +109 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +69 +68 +64 +64 +64 +58 +58 +54 +54 +55 +50 +51 +47 +47 +47 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +13 +14 +13 +13 +13 +13 +13 +13 +14 +13 +14 +14 +14 +13 +14 +13 +14 +14 +14 +13 +13 +14 +14 +14 +13 +14 +14 +14 +13 +13 +12 +15 +16 +17 +18 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +28 +31 +32 +33 +33 +37 +37 +37 +40 +41 +43 +43 +43 +47 +47 +46 +46 +47 +51 +51 +55 +55 +54 +58 +58 +64 +65 +68 +68 +68 +72 +73 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +115 +119 +120 +120 +125 +125 +129 +130 +129 +133 +133 +139 +139 +139 +143 +143 +147 +148 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +168 +169 +169 +173 +173 +175 +174 +175 +179 +178 +183 +183 +183 +184 +185 +189 +189 +188 +191 +190 +194 +194 +195 +197 +196 +198 +198 +200 +200 +200 +200 +200 +202 +203 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +207 +206 +206 +205 +204 +204 +204 +204 +202 +202 +202 +200 +200 +200 +200 +200 +198 +198 +197 +196 +197 +194 +190 +190 +191 +189 +188 +189 +184 +185 +182 +182 +183 +179 +178 +175 +175 +174 +173 +173 +172 +173 +172 +169 +169 +165 +165 +165 +161 +161 +157 +157 +154 +151 +151 +147 +147 +143 +143 +143 +139 +139 +134 +133 +133 +129 +129 +125 +126 +125 +119 +119 +115 +115 +116 +110 +110 +106 +106 +101 +100 +100 +95 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +73 +72 +68 +68 +64 +64 +65 +58 +58 +54 +55 +51 +50 +50 +47 +46 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +14 +14 +14 +14 +14 +13 +13 +14 +14 +14 +14 +14 +14 +14 +14 +13 +14 +13 +14 +13 +13 +14 +14 +13 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +37 +37 +37 +41 +41 +43 +43 +43 +47 +46 +51 +51 +54 +54 +54 +58 +59 +64 +64 +64 +68 +69 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +105 +106 +106 +109 +110 +116 +115 +116 +120 +119 +126 +125 +125 +130 +129 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +164 +169 +169 +173 +173 +173 +175 +175 +178 +179 +178 +183 +183 +184 +184 +185 +188 +188 +190 +190 +195 +194 +194 +196 +197 +198 +198 +198 +200 +200 +201 +200 +200 +200 +200 +202 +202 +203 +204 +204 +204 +204 +205 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +204 +204 +204 +204 +204 +202 +202 +200 +200 +200 +201 +200 +198 +199 +196 +196 +196 +194 +194 +195 +195 +194 +190 +190 +191 +191 +190 +188 +189 +184 +185 +185 +183 +182 +179 +179 +175 +175 +175 +173 +173 +168 +169 +168 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +130 +129 +130 +125 +119 +119 +119 +115 +116 +109 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +91 +86 +86 +82 +83 +77 +76 +76 +72 +73 +68 +69 +68 +64 +64 +58 +59 +58 +55 +54 +51 +51 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +22 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +14 +14 +14 +13 +13 +14 +14 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +19 +20 +20 +21 +21 +25 +25 +25 +27 +27 +31 +30 +33 +33 +33 +37 +37 +41 +40 +40 +43 +43 +47 +47 +46 +51 +50 +54 +55 +54 +58 +59 +64 +64 +65 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +105 +106 +109 +110 +115 +116 +115 +119 +119 +125 +125 +129 +130 +130 +133 +133 +139 +140 +140 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +175 +174 +175 +179 +178 +183 +183 +183 +185 +184 +185 +185 +185 +188 +188 +191 +190 +190 +195 +194 +196 +196 +196 +198 +198 +200 +200 +201 +200 +200 +202 +202 +204 +204 +204 +204 +204 +204 +204 +204 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +204 +204 +204 +204 +204 +202 +202 +202 +200 +200 +201 +200 +200 +200 +200 +198 +198 +198 +197 +197 +195 +195 +191 +190 +191 +188 +189 +185 +184 +185 +183 +183 +179 +179 +179 +175 +174 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +134 +133 +129 +129 +126 +125 +125 +119 +119 +115 +115 +115 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +73 +72 +72 +68 +69 +65 +64 +65 +58 +59 +55 +55 +51 +51 +51 +47 +47 +43 +42 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +12 +13 +13 +14 +13 +14 +14 +14 +14 +14 +14 +14 +14 +13 +14 +13 +14 +13 +13 +14 +13 +13 +13 +13 +14 +13 +14 +14 +13 +13 +14 +13 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +36 +41 +41 +43 +43 +43 +47 +46 +50 +51 +54 +54 +55 +59 +58 +64 +65 +64 +68 +68 +73 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +95 +96 +100 +100 +106 +106 +105 +109 +110 +115 +116 +116 +120 +120 +126 +126 +126 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +169 +169 +169 +173 +173 +175 +175 +175 +178 +179 +183 +183 +183 +184 +185 +189 +189 +190 +191 +190 +195 +194 +196 +196 +196 +199 +198 +198 +198 +198 +200 +200 +200 +200 +200 +202 +203 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +204 +204 +204 +204 +205 +202 +202 +201 +200 +201 +201 +200 +198 +198 +198 +196 +196 +195 +195 +195 +191 +191 +189 +189 +188 +184 +185 +183 +182 +183 +179 +179 +175 +175 +174 +173 +172 +169 +169 +164 +165 +165 +161 +161 +157 +157 +157 +151 +151 +148 +147 +147 +143 +143 +139 +140 +140 +133 +133 +129 +129 +126 +126 +125 +120 +119 +120 +119 +119 +115 +116 +110 +109 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +72 +72 +69 +68 +68 +64 +64 +64 +64 +65 +58 +58 +55 +55 +55 +51 +50 +47 +46 +48 +43 +43 +40 +41 +37 +37 +36 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +12 +13 +13 +14 +13 +14 +13 +14 +14 +13 +13 +13 +13 +13 +14 +14 +14 +13 +14 +14 +13 +13 +14 +13 +14 +14 +14 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +26 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +50 +50 +54 +55 +55 +59 +59 +64 +64 +64 +68 +68 +73 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +105 +105 +110 +110 +116 +115 +117 +119 +120 +126 +125 +129 +129 +129 +133 +133 +139 +140 +139 +143 +143 +148 +147 +147 +151 +151 +158 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +175 +175 +175 +179 +178 +183 +183 +183 +185 +184 +185 +185 +185 +188 +189 +191 +190 +191 +194 +194 +196 +197 +196 +198 +199 +201 +200 +201 +200 +200 +203 +202 +204 +204 +204 +204 +204 +205 +205 +204 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +204 +205 +204 +204 +204 +202 +202 +200 +201 +200 +200 +200 +198 +198 +199 +196 +197 +195 +195 +190 +190 +191 +189 +189 +185 +185 +184 +182 +183 +178 +178 +179 +175 +175 +172 +173 +173 +169 +169 +165 +165 +165 +161 +161 +158 +158 +151 +151 +151 +147 +147 +143 +143 +144 +139 +139 +133 +133 +133 +130 +129 +125 +126 +125 +119 +120 +116 +116 +116 +110 +110 +106 +105 +101 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +65 +58 +58 +55 +54 +51 +51 +51 +47 +47 +43 +43 +43 +41 +41 +40 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +26 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +13 +13 +13 +13 +13 +13 +14 +13 +14 +13 +14 +13 +13 +14 +14 +13 +13 +14 +13 +14 +14 +14 +13 +13 +13 +12 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +46 +51 +50 +55 +55 +55 +59 +65 +64 +64 +68 +68 +68 +69 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +87 +90 +90 +96 +96 +101 +100 +100 +106 +106 +110 +110 +110 +115 +115 +120 +119 +119 +125 +126 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +151 +151 +151 +157 +157 +160 +161 +160 +165 +165 +165 +165 +165 +169 +169 +173 +173 +172 +175 +175 +179 +178 +180 +182 +183 +185 +185 +189 +188 +188 +191 +190 +195 +194 +194 +196 +196 +197 +196 +197 +198 +198 +201 +200 +200 +200 +200 +203 +203 +203 +205 +205 +204 +204 +206 +207 +206 +207 +207 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +204 +205 +204 +204 +203 +202 +200 +200 +200 +201 +200 +198 +198 +199 +196 +196 +194 +194 +194 +190 +190 +189 +188 +189 +185 +185 +182 +182 +182 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +160 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +140 +133 +133 +129 +129 +126 +125 +125 +119 +119 +115 +116 +115 +109 +110 +106 +105 +105 +100 +100 +96 +95 +96 +90 +91 +86 +86 +86 +82 +82 +77 +76 +72 +73 +72 +68 +68 +65 +64 +64 +58 +58 +54 +54 +54 +50 +50 +47 +47 +47 +43 +42 +41 +41 +39 +37 +36 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +13 +13 +13 +13 +14 +14 +13 +13 +14 +13 +14 +13 +14 +13 +13 +14 +13 +14 +14 +14 +13 +13 +13 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +30 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +50 +50 +55 +54 +54 +58 +59 +64 +64 +64 +68 +68 +72 +72 +73 +76 +76 +82 +82 +87 +86 +86 +90 +90 +96 +96 +96 +100 +100 +100 +100 +100 +105 +105 +109 +110 +109 +115 +116 +120 +120 +120 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +147 +147 +147 +151 +151 +157 +157 +157 +157 +157 +161 +161 +162 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +178 +179 +182 +183 +182 +183 +183 +184 +185 +189 +188 +189 +191 +190 +195 +194 +196 +196 +197 +199 +199 +201 +201 +201 +200 +201 +202 +202 +202 +204 +205 +205 +204 +204 +207 +206 +206 +207 +207 +206 +206 +206 +206 +207 +206 +206 +206 +207 +204 +205 +204 +204 +204 +202 +202 +203 +201 +201 +201 +201 +201 +199 +198 +196 +197 +197 +194 +195 +191 +191 +189 +189 +188 +185 +184 +183 +182 +183 +179 +178 +178 +178 +179 +175 +175 +173 +172 +173 +169 +169 +165 +165 +166 +161 +161 +157 +157 +152 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +134 +129 +129 +126 +126 +126 +120 +119 +116 +115 +116 +110 +110 +106 +106 +100 +100 +99 +96 +96 +90 +90 +90 +86 +86 +87 +86 +86 +82 +82 +76 +77 +76 +72 +72 +68 +68 +66 +64 +64 +59 +59 +54 +55 +55 +51 +51 +47 +46 +46 +43 +43 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +28 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +12 +14 +13 +13 +14 +13 +13 +13 +13 +13 +14 +14 +14 +14 +13 +14 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +12 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +40 +42 +43 +43 +47 +47 +50 +51 +55 +54 +54 +58 +59 +64 +64 +64 +68 +68 +68 +68 +68 +73 +72 +76 +77 +76 +82 +82 +86 +86 +87 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +115 +115 +115 +116 +120 +120 +126 +125 +125 +129 +129 +133 +133 +135 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +178 +179 +179 +182 +183 +184 +185 +185 +188 +189 +190 +191 +190 +194 +194 +196 +197 +197 +198 +200 +200 +201 +200 +200 +202 +202 +203 +204 +204 +205 +204 +204 +204 +205 +204 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +204 +204 +204 +204 +202 +203 +202 +200 +200 +201 +200 +200 +198 +198 +196 +196 +196 +194 +194 +191 +191 +191 +189 +189 +185 +185 +185 +183 +182 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +152 +151 +147 +147 +143 +143 +144 +139 +139 +134 +133 +130 +129 +129 +125 +126 +119 +120 +120 +116 +115 +116 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +93 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +69 +68 +68 +64 +65 +58 +59 +58 +54 +54 +50 +50 +49 +47 +47 +43 +43 +41 +41 +41 +37 +37 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +13 +14 +14 +13 +13 +13 +14 +14 +13 +14 +13 +14 +14 +13 +13 +13 +13 +13 +14 +14 +14 +14 +13 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +18 +19 +19 +21 +21 +26 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +36 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +51 +54 +54 +58 +58 +65 +64 +64 +69 +68 +73 +72 +72 +76 +76 +76 +77 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +97 +100 +100 +105 +106 +110 +110 +110 +115 +116 +120 +120 +120 +125 +125 +126 +125 +125 +130 +129 +133 +133 +133 +140 +139 +143 +143 +145 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +170 +173 +173 +173 +175 +174 +179 +179 +179 +182 +183 +185 +185 +188 +189 +188 +191 +190 +194 +194 +194 +196 +196 +198 +199 +199 +200 +201 +201 +200 +200 +203 +203 +204 +204 +204 +204 +204 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +204 +204 +205 +205 +204 +203 +202 +201 +200 +201 +201 +200 +198 +198 +197 +196 +197 +194 +190 +190 +190 +190 +188 +189 +189 +189 +189 +184 +184 +183 +182 +182 +179 +179 +175 +174 +175 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +151 +151 +151 +147 +147 +143 +143 +144 +140 +139 +133 +133 +134 +129 +129 +126 +125 +120 +119 +120 +116 +116 +109 +110 +110 +106 +106 +106 +106 +105 +100 +100 +96 +96 +96 +90 +89 +86 +86 +85 +82 +82 +76 +76 +73 +72 +72 +69 +68 +64 +64 +65 +58 +58 +54 +55 +54 +51 +50 +47 +47 +47 +43 +42 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +18 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +13 +14 +14 +14 +13 +13 +14 +14 +13 +13 +13 +14 +14 +14 +14 +13 +14 +13 +13 +14 +14 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +34 +37 +37 +41 +41 +43 +43 +43 +47 +46 +50 +50 +50 +54 +55 +58 +59 +59 +64 +65 +68 +68 +68 +72 +72 +76 +76 +78 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +106 +106 +106 +110 +109 +115 +115 +116 +119 +119 +126 +126 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +170 +173 +173 +175 +175 +175 +179 +179 +182 +183 +183 +184 +184 +188 +189 +189 +191 +191 +195 +194 +194 +196 +196 +198 +198 +198 +200 +200 +200 +201 +202 +202 +202 +204 +204 +204 +204 +205 +206 +207 +207 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +204 +204 +205 +204 +203 +203 +203 +201 +200 +200 +200 +200 +199 +198 +197 +196 +196 +195 +195 +191 +191 +190 +188 +189 +185 +185 +185 +183 +183 +179 +179 +175 +175 +175 +172 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +144 +141 +139 +139 +134 +133 +129 +130 +129 +125 +125 +119 +119 +120 +115 +115 +116 +116 +110 +110 +106 +106 +106 +106 +105 +100 +100 +98 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +73 +68 +68 +68 +64 +64 +58 +59 +59 +55 +54 +51 +51 +46 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +32 +31 +31 +27 +27 +27 +25 +25 +22 +21 +21 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +13 +14 +14 +13 +14 +14 +13 +13 +13 +14 +13 +14 +14 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +18 +19 +21 +21 +25 +24 +26 +27 +27 +31 +31 +34 +33 +33 +37 +37 +41 +41 +41 +43 +43 +43 +43 +43 +46 +47 +51 +51 +50 +54 +55 +59 +58 +59 +64 +64 +68 +68 +73 +72 +72 +76 +76 +82 +82 +82 +86 +86 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +110 +110 +110 +115 +116 +119 +120 +119 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +144 +143 +147 +147 +148 +151 +151 +157 +157 +160 +161 +162 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +182 +185 +184 +188 +189 +189 +190 +191 +194 +195 +197 +196 +196 +198 +198 +200 +200 +200 +200 +200 +202 +202 +202 +204 +204 +204 +204 +204 +206 +207 +206 +206 +207 +206 +207 +206 +206 +207 +206 +207 +207 +206 +205 +204 +204 +204 +204 +202 +202 +202 +200 +200 +200 +200 +200 +198 +199 +197 +196 +197 +195 +194 +191 +190 +188 +188 +188 +185 +185 +182 +183 +183 +179 +178 +178 +178 +179 +175 +175 +173 +173 +173 +169 +170 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +139 +139 +139 +133 +133 +129 +129 +129 +126 +125 +120 +119 +118 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +64 +64 +64 +58 +58 +55 +54 +55 +51 +50 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +27 +27 +27 +25 +26 +25 +21 +21 +19 +19 +19 +17 +17 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +13 +13 +14 +13 +13 +14 +14 +13 +14 +13 +13 +13 +14 +14 +14 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +15 +15 +17 +17 +20 +19 +19 +21 +21 +25 +25 +25 +27 +27 +27 +27 +27 +31 +31 +32 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +46 +50 +51 +50 +54 +54 +58 +57 +58 +64 +64 +64 +64 +64 +68 +68 +72 +73 +72 +76 +76 +82 +82 +84 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +115 +119 +119 +125 +125 +126 +129 +129 +133 +133 +139 +140 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +172 +173 +175 +175 +179 +178 +182 +182 +183 +184 +184 +188 +189 +189 +191 +191 +194 +195 +194 +197 +197 +198 +199 +198 +200 +200 +200 +200 +201 +202 +203 +204 +204 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +205 +203 +202 +201 +200 +201 +200 +200 +198 +198 +197 +196 +196 +194 +194 +194 +195 +194 +191 +190 +188 +189 +189 +185 +185 +183 +183 +181 +179 +179 +175 +175 +172 +173 +172 +169 +169 +165 +165 +165 +161 +161 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +140 +139 +139 +133 +133 +129 +129 +129 +126 +125 +119 +119 +120 +115 +115 +110 +109 +109 +106 +106 +100 +100 +100 +96 +96 +90 +90 +86 +86 +86 +82 +83 +82 +82 +82 +76 +76 +73 +72 +72 +68 +69 +64 +64 +64 +58 +58 +54 +55 +55 +51 +51 +47 +46 +43 +43 +43 +41 +40 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +24 +25 +25 +21 +21 +19 +19 +20 +17 +17 +15 +15 +16 +15 +15 +13 +13 +12 +13 +14 +14 +13 +14 +14 +14 +14 +14 +13 +13 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +14 +14 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +42 +43 +47 +47 +46 +47 +47 +51 +51 +54 +54 +54 +58 +58 +64 +64 +68 +68 +68 +72 +72 +72 +72 +72 +75 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +109 +115 +115 +116 +119 +119 +126 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +152 +157 +157 +161 +161 +164 +165 +165 +169 +169 +173 +173 +173 +174 +175 +178 +178 +179 +183 +182 +185 +185 +185 +189 +188 +190 +190 +191 +195 +195 +196 +196 +199 +198 +199 +200 +200 +200 +201 +200 +203 +202 +205 +204 +204 +204 +204 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +207 +207 +206 +206 +204 +204 +204 +204 +204 +203 +203 +200 +200 +200 +200 +200 +198 +198 +198 +196 +197 +195 +194 +192 +191 +191 +189 +188 +184 +185 +185 +182 +182 +178 +178 +178 +175 +175 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +162 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +134 +134 +129 +129 +129 +125 +125 +119 +119 +120 +115 +115 +109 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +65 +64 +59 +59 +55 +55 +54 +51 +51 +47 +47 +47 +43 +43 +41 +40 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +20 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +14 +13 +14 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +13 +13 +13 +13 +14 +14 +14 +14 +14 +14 +14 +13 +14 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +26 +27 +27 +31 +31 +31 +33 +33 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +50 +50 +50 +54 +55 +59 +58 +58 +65 +65 +68 +68 +68 +72 +72 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +99 +100 +100 +106 +105 +110 +110 +109 +115 +116 +120 +119 +120 +125 +125 +129 +129 +129 +133 +134 +139 +139 +139 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +178 +178 +183 +183 +182 +184 +185 +188 +189 +190 +190 +190 +194 +195 +196 +197 +197 +199 +198 +201 +201 +200 +201 +200 +202 +202 +202 +205 +205 +204 +204 +205 +206 +206 +207 +206 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +205 +204 +204 +204 +204 +203 +203 +203 +200 +201 +200 +200 +200 +199 +198 +196 +197 +195 +194 +195 +190 +191 +188 +188 +188 +185 +184 +184 +184 +185 +183 +183 +179 +179 +179 +175 +175 +173 +172 +174 +169 +169 +165 +165 +161 +161 +161 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +130 +130 +129 +125 +125 +119 +119 +115 +116 +116 +109 +110 +106 +107 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +65 +65 +64 +58 +59 +54 +55 +55 +50 +50 +46 +46 +47 +43 +43 +41 +41 +40 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +13 +14 +14 +13 +14 +13 +14 +14 +14 +13 +13 +14 +13 +13 +14 +14 +14 +14 +13 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +50 +51 +55 +54 +59 +59 +58 +64 +64 +68 +68 +68 +72 +73 +76 +76 +77 +82 +82 +86 +86 +91 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +109 +110 +115 +115 +120 +119 +120 +125 +125 +129 +130 +130 +133 +133 +139 +139 +144 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +160 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +178 +178 +183 +183 +183 +182 +182 +185 +184 +188 +189 +188 +191 +190 +194 +194 +194 +196 +196 +198 +198 +198 +200 +200 +200 +201 +200 +202 +202 +204 +204 +204 +205 +204 +206 +207 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +205 +205 +205 +205 +202 +202 +200 +200 +200 +201 +201 +199 +199 +197 +196 +197 +194 +194 +195 +195 +194 +191 +190 +189 +188 +188 +184 +184 +182 +183 +181 +179 +179 +175 +175 +172 +173 +174 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +125 +119 +119 +115 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +82 +82 +82 +76 +77 +72 +72 +72 +69 +68 +64 +64 +64 +59 +58 +54 +54 +55 +51 +51 +47 +47 +47 +43 +43 +41 +41 +38 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +16 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +14 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +32 +33 +32 +37 +37 +40 +41 +41 +43 +43 +47 +47 +47 +51 +51 +54 +54 +54 +59 +58 +64 +64 +65 +69 +68 +72 +72 +76 +76 +76 +82 +83 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +105 +106 +109 +110 +115 +116 +115 +119 +120 +125 +125 +129 +130 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +175 +174 +175 +179 +179 +182 +183 +183 +184 +184 +184 +184 +185 +189 +189 +190 +190 +191 +194 +195 +197 +197 +196 +198 +198 +200 +200 +200 +200 +200 +203 +202 +204 +205 +205 +204 +204 +204 +204 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +207 +206 +207 +206 +206 +204 +205 +204 +205 +205 +204 +204 +204 +202 +202 +202 +202 +203 +201 +200 +200 +200 +201 +199 +198 +196 +197 +195 +194 +195 +190 +191 +188 +188 +189 +185 +185 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +140 +133 +133 +129 +130 +129 +125 +126 +119 +120 +119 +115 +115 +110 +109 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +83 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +58 +55 +55 +54 +50 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +13 +14 +14 +14 +13 +14 +14 +13 +13 +14 +14 +13 +14 +13 +14 +14 +14 +14 +13 +13 +14 +14 +13 +13 +13 +13 +14 +13 +15 +15 +17 +17 +17 +18 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +42 +47 +47 +50 +51 +50 +55 +55 +58 +58 +59 +64 +65 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +101 +100 +100 +106 +106 +110 +110 +110 +115 +115 +119 +119 +119 +125 +125 +129 +129 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +182 +184 +184 +188 +189 +189 +190 +191 +194 +194 +194 +196 +196 +198 +198 +198 +200 +200 +200 +201 +200 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +207 +206 +205 +204 +205 +204 +204 +202 +202 +201 +200 +201 +201 +201 +198 +199 +198 +197 +196 +194 +194 +194 +190 +191 +188 +188 +188 +184 +185 +183 +183 +183 +179 +179 +175 +174 +173 +173 +173 +169 +168 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +134 +133 +130 +129 +126 +125 +125 +120 +119 +115 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +73 +72 +72 +69 +68 +68 +68 +68 +64 +64 +58 +58 +59 +55 +55 +50 +50 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +33 +33 +33 +30 +31 +27 +27 +27 +25 +25 +25 +25 +25 +22 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +13 +12 +13 +13 +13 +13 +13 +14 +14 +13 +14 +14 +14 +13 +14 +13 +14 +14 +14 +14 +13 +13 +14 +13 +14 +14 +14 +14 +14 +14 +13 +13 +15 +15 +15 +16 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +50 +55 +54 +55 +59 +58 +65 +64 +64 +69 +68 +72 +72 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +95 +96 +100 +100 +106 +106 +106 +109 +110 +116 +116 +116 +120 +119 +126 +125 +130 +130 +129 +133 +133 +139 +139 +139 +143 +143 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +162 +165 +165 +169 +169 +172 +173 +173 +175 +175 +179 +178 +179 +182 +183 +183 +182 +183 +185 +185 +188 +188 +189 +191 +190 +195 +194 +195 +196 +197 +198 +198 +200 +200 +200 +200 +200 +202 +202 +203 +204 +205 +204 +204 +204 +204 +204 +207 +206 +207 +206 +206 +206 +206 +207 +206 +207 +206 +207 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +201 +200 +200 +200 +200 +198 +198 +199 +197 +196 +194 +194 +191 +191 +190 +189 +189 +184 +185 +184 +183 +182 +178 +178 +178 +174 +175 +174 +173 +173 +169 +169 +164 +165 +165 +161 +161 +157 +157 +152 +151 +151 +147 +147 +143 +143 +143 +139 +139 +134 +134 +134 +130 +129 +125 +125 +125 +120 +119 +115 +116 +116 +110 +110 +106 +106 +100 +100 +100 +96 +95 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +68 +68 +64 +64 +65 +59 +59 +54 +54 +50 +51 +50 +47 +47 +43 +43 +43 +41 +41 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +26 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +15 +15 +16 +13 +13 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +13 +14 +14 +14 +14 +13 +13 +13 +14 +14 +14 +14 +14 +14 +13 +14 +13 +13 +13 +13 +15 +15 +17 +17 +19 +19 +18 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +46 +47 +50 +51 +54 +54 +55 +58 +58 +64 +64 +64 +69 +69 +72 +72 +72 +76 +76 +82 +82 +82 +87 +86 +90 +90 +90 +95 +96 +100 +100 +106 +105 +105 +110 +110 +116 +116 +116 +119 +119 +126 +125 +125 +129 +130 +133 +133 +133 +139 +139 +143 +143 +145 +147 +147 +151 +151 +158 +157 +157 +161 +161 +165 +165 +164 +169 +169 +173 +173 +173 +175 +174 +179 +179 +178 +183 +183 +185 +184 +186 +189 +189 +191 +190 +194 +194 +194 +196 +196 +199 +199 +198 +200 +200 +200 +200 +200 +200 +200 +202 +202 +203 +204 +204 +204 +204 +205 +206 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +204 +205 +205 +204 +204 +202 +202 +202 +200 +201 +201 +201 +198 +198 +199 +196 +196 +195 +194 +195 +190 +190 +189 +189 +188 +184 +185 +182 +183 +183 +179 +178 +175 +175 +174 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +156 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +134 +133 +129 +129 +129 +125 +126 +119 +120 +116 +115 +116 +110 +109 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +77 +76 +72 +72 +68 +68 +64 +64 +64 +58 +58 +54 +55 +55 +50 +50 +51 +51 +51 +47 +47 +42 +42 +43 +41 +41 +37 +37 +35 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +14 +13 +13 +14 +14 +13 +14 +13 +14 +13 +14 +14 +14 +13 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +22 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +43 +43 +43 +46 +47 +51 +51 +51 +54 +54 +59 +58 +58 +65 +65 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +106 +106 +106 +109 +110 +116 +116 +115 +119 +120 +125 +125 +126 +129 +129 +133 +134 +140 +139 +139 +143 +143 +147 +146 +147 +151 +151 +157 +158 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +182 +182 +183 +184 +184 +189 +188 +188 +191 +191 +190 +190 +191 +194 +194 +197 +196 +196 +198 +199 +200 +200 +200 +200 +201 +202 +202 +202 +202 +202 +204 +204 +205 +204 +204 +207 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +204 +204 +204 +204 +204 +202 +202 +202 +201 +200 +200 +200 +200 +198 +199 +196 +196 +196 +195 +195 +190 +191 +191 +188 +188 +184 +185 +183 +183 +183 +179 +179 +175 +175 +175 +173 +172 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +140 +140 +139 +133 +133 +129 +129 +129 +125 +125 +119 +119 +120 +115 +115 +110 +110 +110 +106 +106 +99 +100 +101 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +77 +76 +72 +72 +72 +72 +72 +69 +68 +65 +64 +65 +58 +58 +54 +55 +52 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +33 +33 +33 +31 +31 +27 +27 +27 +25 +26 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +15 +15 +15 +13 +13 +12 +12 +13 +14 +13 +13 +13 +14 +14 +13 +14 +13 +14 +14 +14 +14 +13 +13 +14 +13 +13 +13 +13 +14 +14 +13 +14 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +38 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +50 +51 +55 +55 +58 +58 +65 +64 +65 +68 +69 +73 +73 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +99 +101 +106 +106 +110 +110 +116 +116 +116 +120 +120 +125 +125 +126 +129 +129 +129 +129 +129 +134 +133 +140 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +173 +173 +172 +175 +175 +179 +179 +179 +183 +182 +185 +184 +188 +189 +189 +190 +190 +195 +194 +195 +197 +197 +198 +198 +198 +200 +201 +200 +201 +201 +202 +202 +204 +204 +205 +204 +205 +206 +206 +206 +206 +207 +206 +207 +206 +207 +206 +206 +206 +206 +206 +206 +204 +204 +204 +205 +204 +202 +202 +200 +200 +201 +200 +201 +198 +198 +197 +197 +196 +194 +195 +190 +190 +190 +188 +188 +189 +189 +189 +184 +185 +183 +183 +183 +178 +179 +175 +175 +175 +173 +173 +169 +168 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +140 +133 +133 +129 +129 +130 +125 +125 +119 +120 +116 +116 +116 +110 +110 +106 +106 +106 +100 +100 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +79 +77 +76 +73 +73 +68 +69 +68 +65 +64 +58 +58 +58 +55 +54 +54 +55 +54 +51 +50 +47 +46 +47 +43 +43 +41 +41 +39 +37 +37 +33 +33 +31 +31 +30 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +14 +13 +14 +14 +13 +13 +14 +14 +14 +13 +13 +13 +13 +14 +13 +14 +13 +14 +13 +14 +14 +14 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +50 +55 +55 +58 +58 +58 +64 +64 +68 +68 +68 +73 +72 +76 +76 +77 +82 +82 +87 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +105 +106 +106 +110 +110 +116 +116 +116 +119 +119 +126 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +172 +173 +173 +175 +175 +178 +179 +178 +183 +182 +184 +185 +184 +189 +189 +191 +190 +191 +195 +195 +196 +197 +197 +198 +199 +200 +201 +200 +201 +200 +202 +202 +204 +204 +204 +204 +205 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +204 +204 +205 +204 +204 +202 +203 +200 +200 +201 +201 +200 +198 +199 +198 +196 +196 +194 +194 +195 +190 +191 +189 +188 +189 +184 +185 +182 +183 +179 +179 +178 +175 +175 +173 +172 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +148 +143 +143 +140 +139 +134 +133 +133 +129 +129 +125 +125 +125 +119 +119 +120 +120 +119 +116 +115 +110 +110 +110 +106 +105 +100 +100 +98 +96 +96 +90 +90 +86 +86 +86 +81 +82 +76 +76 +76 +72 +72 +72 +72 +73 +68 +69 +64 +65 +65 +59 +58 +55 +54 +51 +51 +50 +47 +46 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +20 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +14 +13 +14 +13 +14 +13 +13 +14 +14 +14 +13 +13 +14 +13 +13 +14 +14 +14 +14 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +32 +31 +31 +33 +33 +37 +36 +37 +41 +41 +43 +42 +43 +47 +47 +51 +50 +51 +55 +54 +59 +58 +59 +64 +64 +69 +68 +73 +72 +72 +76 +76 +82 +82 +82 +86 +86 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +105 +106 +110 +110 +115 +116 +119 +119 +120 +125 +125 +129 +130 +129 +133 +133 +133 +133 +133 +139 +139 +143 +143 +144 +147 +147 +151 +151 +153 +157 +157 +161 +161 +164 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +178 +183 +182 +184 +184 +185 +188 +189 +191 +191 +194 +195 +195 +196 +196 +198 +198 +200 +200 +200 +201 +200 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +207 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +204 +205 +204 +204 +205 +202 +202 +200 +200 +200 +200 +201 +198 +198 +199 +197 +196 +194 +194 +191 +191 +191 +188 +188 +185 +185 +185 +183 +183 +183 +183 +183 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +143 +143 +143 +139 +139 +134 +133 +133 +130 +130 +125 +125 +123 +120 +119 +115 +116 +110 +109 +110 +106 +105 +100 +100 +99 +96 +95 +96 +96 +96 +90 +89 +86 +86 +86 +82 +82 +76 +76 +75 +72 +72 +68 +69 +64 +64 +64 +58 +58 +55 +55 +55 +50 +51 +46 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +31 +31 +31 +27 +27 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +14 +14 +14 +13 +14 +13 +14 +13 +14 +14 +14 +14 +13 +13 +13 +14 +14 +14 +14 +13 +13 +13 +13 +13 +16 +15 +15 +17 +17 +19 +19 +20 +21 +21 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +43 +43 +42 +46 +47 +51 +51 +51 +55 +55 +55 +55 +55 +59 +58 +65 +64 +65 +68 +68 +72 +72 +73 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +100 +100 +100 +106 +106 +109 +109 +110 +115 +116 +120 +120 +125 +125 +126 +129 +129 +133 +134 +133 +139 +139 +143 +143 +143 +147 +146 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +172 +173 +172 +174 +175 +179 +179 +179 +182 +182 +185 +184 +185 +188 +188 +191 +191 +190 +194 +195 +197 +197 +196 +199 +199 +201 +200 +201 +200 +200 +202 +202 +204 +204 +204 +204 +204 +207 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +207 +206 +204 +204 +205 +204 +204 +202 +202 +200 +201 +200 +201 +201 +201 +201 +200 +198 +198 +196 +196 +196 +194 +195 +191 +191 +191 +188 +189 +185 +184 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +173 +172 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +154 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +129 +129 +129 +125 +125 +120 +120 +120 +115 +116 +110 +110 +108 +105 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +72 +72 +68 +68 +69 +65 +65 +59 +58 +55 +55 +55 +51 +50 +47 +47 +47 +43 +43 +41 +41 +41 +36 +37 +32 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +16 +15 +13 +13 +13 +12 +13 +14 +13 +14 +14 +14 +14 +14 +14 +14 +13 +14 +13 +14 +14 +13 +14 +13 +14 +13 +14 +14 +14 +13 +13 +13 +13 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +30 +33 +33 +33 +33 +33 +37 +37 +40 +41 +41 +43 +42 +47 +47 +48 +51 +51 +54 +54 +58 +59 +59 +64 +64 +68 +68 +69 +72 +72 +72 +73 +73 +76 +76 +82 +82 +82 +86 +86 +90 +90 +92 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +116 +120 +120 +126 +126 +125 +130 +130 +134 +134 +133 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +172 +173 +175 +175 +178 +178 +179 +183 +183 +184 +184 +189 +188 +189 +191 +190 +194 +194 +194 +196 +196 +198 +198 +198 +201 +201 +200 +200 +200 +202 +202 +204 +204 +205 +204 +205 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +206 +204 +204 +204 +204 +204 +202 +202 +201 +200 +201 +201 +201 +198 +199 +197 +197 +197 +195 +195 +191 +190 +190 +189 +189 +185 +185 +185 +183 +182 +179 +179 +179 +175 +175 +173 +173 +171 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +147 +147 +147 +143 +143 +139 +139 +140 +133 +133 +129 +129 +126 +126 +126 +119 +120 +116 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +73 +72 +72 +68 +68 +64 +64 +65 +58 +58 +55 +55 +55 +51 +51 +47 +47 +47 +43 +42 +41 +41 +40 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +13 +14 +14 +14 +13 +13 +14 +14 +14 +14 +14 +13 +13 +13 +15 +15 +18 +17 +17 +19 +19 +21 +21 +22 +25 +25 +25 +25 +25 +27 +27 +31 +31 +31 +33 +32 +37 +37 +37 +41 +41 +43 +43 +47 +46 +46 +50 +50 +54 +54 +55 +58 +58 +58 +58 +59 +64 +64 +68 +68 +68 +72 +72 +77 +76 +78 +82 +82 +86 +86 +90 +90 +90 +96 +96 +96 +96 +96 +100 +100 +106 +106 +106 +110 +109 +115 +115 +116 +119 +120 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +144 +147 +147 +147 +151 +151 +157 +157 +157 +160 +161 +165 +165 +165 +169 +169 +173 +172 +175 +175 +175 +178 +179 +182 +183 +182 +184 +184 +188 +188 +188 +191 +190 +195 +194 +194 +196 +197 +199 +198 +199 +200 +200 +200 +200 +203 +202 +202 +204 +204 +204 +204 +205 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +206 +204 +204 +204 +204 +204 +202 +202 +200 +201 +200 +200 +200 +201 +200 +200 +198 +199 +196 +196 +197 +194 +194 +191 +190 +191 +189 +188 +184 +184 +182 +182 +183 +179 +179 +175 +175 +174 +173 +173 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +152 +151 +151 +147 +147 +143 +143 +143 +139 +140 +133 +133 +133 +129 +130 +126 +125 +126 +120 +120 +116 +115 +116 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +69 +68 +64 +64 +64 +58 +58 +55 +54 +51 +51 +51 +47 +47 +43 +43 +43 +41 +40 +41 +41 +41 +37 +36 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +20 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +13 +13 +14 +14 +14 +14 +14 +13 +13 +14 +14 +14 +14 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +13 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +26 +25 +25 +27 +27 +31 +31 +31 +33 +33 +33 +33 +33 +37 +37 +41 +41 +41 +42 +43 +47 +47 +47 +51 +50 +55 +55 +58 +58 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +100 +100 +100 +106 +105 +110 +110 +110 +116 +116 +119 +120 +120 +125 +126 +130 +130 +129 +133 +134 +139 +139 +139 +143 +143 +147 +147 +150 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +178 +183 +183 +183 +185 +185 +188 +189 +191 +191 +191 +194 +194 +196 +197 +196 +198 +199 +201 +200 +200 +200 +200 +202 +202 +202 +204 +204 +204 +204 +205 +206 +206 +207 +207 +207 +207 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +200 +200 +201 +200 +201 +198 +198 +197 +197 +196 +195 +195 +191 +191 +191 +189 +189 +188 +189 +188 +185 +184 +182 +183 +182 +179 +179 +174 +174 +173 +173 +173 +169 +168 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +148 +147 +147 +143 +143 +139 +139 +140 +133 +133 +129 +130 +126 +125 +125 +119 +120 +116 +116 +116 +110 +110 +105 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +87 +82 +82 +76 +76 +73 +73 +72 +68 +68 +64 +65 +64 +58 +59 +55 +55 +55 +51 +50 +46 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +32 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +14 +13 +14 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +14 +14 +14 +14 +13 +14 +13 +13 +13 +13 +15 +15 +16 +17 +17 +19 +19 +19 +21 +21 +21 +22 +21 +25 +25 +27 +27 +27 +31 +30 +33 +33 +36 +36 +36 +41 +41 +42 +43 +43 +47 +47 +50 +51 +51 +55 +54 +59 +59 +59 +64 +64 +69 +69 +69 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +116 +120 +120 +120 +125 +125 +130 +130 +133 +133 +134 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +178 +179 +179 +183 +182 +184 +185 +184 +188 +188 +191 +190 +190 +195 +194 +197 +196 +197 +199 +198 +200 +201 +200 +201 +201 +203 +202 +204 +205 +204 +204 +204 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +205 +204 +204 +204 +202 +203 +202 +201 +200 +200 +200 +200 +198 +198 +199 +198 +198 +197 +197 +194 +194 +195 +190 +191 +189 +188 +185 +184 +185 +183 +182 +178 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +126 +125 +119 +120 +116 +116 +116 +110 +110 +106 +106 +105 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +69 +65 +64 +64 +58 +58 +55 +54 +55 +50 +51 +46 +47 +44 +43 +43 +41 +40 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +20 +17 +17 +15 +15 +16 +15 +15 +13 +13 +12 +13 +13 +13 +13 +14 +14 +14 +14 +14 +13 +14 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +14 +13 +14 +14 +13 +13 +14 +14 +14 +12 +15 +15 +15 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +26 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +40 +43 +43 +43 +47 +47 +50 +51 +51 +54 +54 +58 +64 +64 +65 +64 +68 +68 +72 +72 +73 +77 +76 +82 +82 +82 +87 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +116 +115 +115 +119 +119 +125 +125 +125 +129 +130 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +172 +173 +175 +175 +179 +178 +179 +183 +183 +185 +184 +184 +188 +189 +190 +190 +191 +195 +195 +196 +196 +198 +198 +199 +201 +200 +200 +200 +200 +203 +203 +203 +202 +202 +205 +204 +204 +205 +204 +207 +207 +206 +207 +207 +207 +207 +206 +207 +206 +206 +206 +207 +206 +204 +204 +204 +204 +204 +204 +204 +205 +202 +202 +201 +200 +201 +200 +200 +198 +199 +197 +196 +197 +194 +195 +190 +191 +190 +188 +188 +188 +189 +188 +185 +185 +183 +182 +183 +178 +179 +175 +174 +175 +173 +173 +169 +169 +165 +165 +166 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +120 +120 +116 +115 +115 +110 +110 +106 +105 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +73 +68 +68 +65 +65 +64 +59 +58 +54 +55 +55 +51 +50 +46 +47 +47 +43 +43 +41 +40 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +26 +25 +25 +21 +21 +19 +19 +19 +17 +17 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +13 +14 +13 +14 +13 +14 +13 +13 +14 +13 +14 +13 +13 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +50 +51 +54 +55 +58 +58 +59 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +116 +119 +119 +119 +125 +125 +129 +130 +130 +133 +133 +139 +139 +144 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +176 +178 +179 +183 +182 +184 +185 +185 +188 +188 +191 +190 +190 +194 +194 +197 +196 +196 +199 +198 +200 +200 +200 +200 +200 +202 +204 +203 +204 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +200 +200 +200 +200 +200 +198 +198 +196 +196 +197 +195 +195 +191 +191 +190 +189 +188 +185 +184 +185 +183 +183 +178 +179 +175 +175 +174 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +129 +129 +130 +125 +125 +120 +120 +119 +115 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +91 +86 +86 +81 +82 +77 +76 +76 +72 +72 +68 +68 +69 +65 +65 +59 +59 +58 +54 +55 +51 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +34 +33 +33 +31 +31 +27 +27 +27 +25 +25 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +13 +14 +14 +14 +14 +13 +14 +14 +13 +14 +14 +13 +13 +13 +13 +14 +14 +14 +13 +14 +13 +14 +13 +13 +13 +14 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +46 +47 +50 +51 +54 +55 +55 +59 +59 +65 +64 +64 +68 +68 +72 +72 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +116 +116 +119 +120 +126 +125 +130 +130 +129 +134 +133 +139 +139 +139 +142 +143 +147 +147 +147 +152 +151 +157 +157 +157 +160 +161 +165 +165 +165 +169 +169 +173 +173 +175 +175 +175 +178 +179 +182 +183 +183 +184 +184 +184 +185 +184 +188 +188 +190 +190 +190 +194 +194 +196 +197 +197 +198 +198 +200 +201 +200 +200 +200 +202 +202 +204 +204 +205 +204 +204 +205 +204 +204 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +204 +205 +204 +205 +204 +202 +203 +202 +200 +201 +201 +200 +201 +199 +198 +196 +196 +197 +195 +195 +190 +191 +188 +189 +188 +185 +184 +183 +182 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +120 +119 +115 +115 +110 +109 +110 +105 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +82 +82 +82 +76 +77 +72 +72 +72 +68 +68 +64 +65 +65 +59 +58 +54 +54 +51 +50 +50 +47 +47 +43 +43 +43 +41 +41 +41 +41 +41 +37 +36 +32 +32 +33 +31 +31 +27 +26 +27 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +14 +13 +14 +13 +13 +13 +13 +14 +14 +13 +14 +14 +13 +13 +13 +13 +13 +14 +14 +13 +14 +13 +13 +13 +12 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +36 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +51 +55 +55 +54 +59 +58 +64 +64 +64 +68 +68 +73 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +99 +100 +106 +106 +106 +110 +110 +116 +116 +115 +119 +120 +126 +125 +125 +129 +130 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +169 +169 +169 +173 +173 +175 +175 +175 +179 +178 +182 +182 +183 +184 +185 +188 +188 +190 +190 +191 +194 +194 +196 +196 +196 +199 +198 +199 +198 +198 +201 +200 +200 +200 +200 +202 +202 +204 +204 +204 +204 +205 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +207 +206 +207 +204 +204 +204 +204 +205 +202 +203 +200 +201 +200 +200 +200 +198 +199 +196 +196 +196 +194 +194 +190 +191 +190 +188 +189 +184 +185 +185 +183 +183 +179 +178 +178 +174 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +140 +139 +133 +134 +133 +129 +130 +125 +125 +120 +119 +120 +116 +116 +110 +110 +110 +106 +105 +100 +100 +100 +96 +95 +90 +90 +90 +86 +86 +82 +82 +83 +76 +76 +72 +72 +68 +68 +68 +64 +64 +59 +58 +58 +54 +55 +55 +54 +55 +51 +50 +47 +47 +47 +43 +42 +41 +41 +41 +37 +36 +33 +33 +32 +31 +31 +27 +27 +25 +25 +25 +21 +21 +21 +21 +21 +20 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +13 +14 +14 +14 +14 +13 +14 +14 +13 +14 +13 +14 +13 +13 +14 +14 +13 +13 +14 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +32 +37 +36 +42 +41 +41 +43 +43 +47 +47 +47 +51 +51 +55 +55 +55 +58 +58 +64 +64 +65 +68 +68 +72 +72 +72 +76 +76 +82 +83 +87 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +115 +120 +119 +125 +125 +126 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +182 +183 +183 +185 +184 +188 +188 +188 +190 +190 +191 +190 +191 +195 +195 +196 +197 +196 +198 +198 +200 +200 +200 +200 +200 +203 +202 +204 +204 +205 +204 +204 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +207 +206 +207 +204 +204 +204 +204 +204 +203 +202 +200 +200 +200 +200 +200 +198 +198 +198 +196 +196 +195 +194 +194 +190 +190 +188 +189 +189 +185 +185 +183 +183 +178 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +164 +161 +161 +157 +157 +157 +151 +151 +147 +147 +148 +143 +143 +139 +139 +134 +134 +133 +129 +129 +126 +126 +126 +120 +120 +116 +115 +115 +110 +110 +106 +105 +106 +100 +100 +96 +95 +96 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +65 +64 +59 +59 +54 +54 +54 +50 +51 +47 +47 +45 +43 +43 +41 +41 +37 +37 +36 +33 +33 +31 +31 +31 +27 +27 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +13 +14 +14 +13 +13 +14 +13 +13 +13 +14 +14 +13 +13 +14 +14 +14 +13 +13 +13 +13 +14 +13 +14 +14 +12 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +26 +30 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +51 +55 +55 +55 +58 +58 +64 +64 +64 +68 +68 +72 +72 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +99 +100 +106 +106 +106 +110 +109 +115 +115 +116 +119 +120 +125 +125 +129 +130 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +164 +166 +169 +169 +173 +173 +174 +175 +175 +179 +179 +183 +182 +183 +184 +184 +184 +184 +184 +188 +188 +190 +190 +191 +194 +195 +196 +196 +198 +198 +199 +200 +200 +200 +200 +201 +202 +202 +204 +204 +204 +204 +205 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +203 +200 +200 +200 +200 +201 +198 +198 +198 +197 +197 +194 +195 +194 +191 +191 +188 +188 +185 +184 +185 +183 +183 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +166 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +129 +130 +129 +125 +125 +119 +120 +119 +116 +115 +110 +110 +110 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +82 +82 +82 +76 +76 +72 +73 +72 +68 +68 +64 +64 +62 +58 +58 +55 +55 +50 +50 +51 +47 +46 +42 +43 +43 +41 +41 +40 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +14 +13 +13 +14 +13 +14 +14 +13 +13 +13 +14 +14 +14 +13 +14 +13 +13 +13 +13 +14 +14 +13 +13 +14 +14 +12 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +50 +55 +54 +58 +59 +58 +64 +64 +68 +69 +68 +72 +72 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +105 +106 +110 +110 +110 +116 +116 +119 +120 +120 +125 +125 +129 +129 +130 +133 +133 +139 +140 +139 +143 +143 +147 +147 +148 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +173 +173 +173 +175 +175 +179 +179 +179 +183 +182 +185 +185 +188 +188 +188 +190 +191 +194 +195 +194 +196 +196 +198 +199 +199 +200 +200 +200 +200 +200 +202 +202 +204 +204 +205 +205 +205 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +200 +200 +200 +201 +201 +199 +198 +197 +196 +197 +194 +194 +191 +191 +190 +189 +188 +184 +184 +185 +182 +183 +179 +178 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +147 +147 +147 +143 +143 +140 +139 +139 +133 +133 +129 +129 +130 +125 +125 +120 +119 +115 +116 +115 +110 +109 +106 +106 +106 +100 +99 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +79 +76 +76 +72 +72 +68 +68 +68 +65 +64 +58 +58 +59 +54 +55 +55 +54 +55 +51 +51 +47 +46 +47 +43 +42 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +14 +13 +13 +12 +13 +13 +14 +13 +14 +14 +14 +14 +14 +14 +14 +13 +13 +14 +13 +14 +14 +14 +13 +13 +14 +13 +14 +14 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +41 +41 +41 +43 +43 +43 +47 +47 +51 +50 +50 +54 +55 +54 +54 +55 +59 +59 +64 +65 +65 +68 +68 +72 +72 +73 +76 +76 +82 +82 +87 +86 +85 +90 +90 +96 +96 +96 +100 +100 +100 +100 +100 +106 +106 +110 +110 +109 +115 +115 +119 +119 +120 +125 +126 +130 +129 +133 +133 +133 +139 +139 +143 +143 +143 +148 +147 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +167 +169 +169 +173 +173 +175 +175 +176 +178 +179 +183 +182 +182 +185 +185 +188 +188 +188 +190 +190 +194 +195 +195 +196 +197 +198 +199 +200 +201 +200 +200 +201 +202 +202 +202 +205 +204 +204 +204 +204 +206 +207 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +204 +205 +204 +204 +204 +202 +202 +202 +200 +200 +201 +200 +201 +199 +198 +196 +196 +196 +195 +195 +190 +191 +191 +189 +189 +184 +185 +183 +183 +182 +178 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +152 +147 +147 +143 +143 +139 +139 +139 +134 +133 +129 +129 +130 +125 +125 +119 +119 +119 +116 +116 +110 +110 +110 +106 +106 +100 +100 +98 +96 +95 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +72 +72 +72 +68 +68 +64 +65 +65 +58 +58 +54 +55 +51 +50 +50 +46 +46 +42 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +14 +13 +14 +14 +14 +14 +13 +14 +13 +13 +13 +14 +13 +13 +14 +14 +13 +14 +14 +13 +13 +14 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +22 +25 +25 +27 +27 +32 +31 +31 +33 +33 +37 +36 +37 +41 +41 +43 +43 +43 +47 +46 +50 +51 +51 +54 +55 +58 +58 +59 +64 +64 +68 +68 +73 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +97 +96 +100 +100 +100 +106 +106 +110 +110 +112 +115 +116 +120 +119 +125 +125 +125 +130 +133 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +152 +157 +157 +161 +161 +163 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +178 +183 +183 +184 +185 +185 +189 +189 +190 +190 +191 +194 +195 +197 +196 +198 +199 +199 +200 +200 +201 +201 +201 +202 +203 +204 +204 +204 +204 +204 +206 +207 +206 +207 +206 +207 +207 +206 +206 +206 +206 +206 +206 +205 +207 +204 +205 +205 +204 +204 +203 +202 +200 +200 +200 +200 +201 +199 +199 +198 +196 +196 +194 +194 +194 +190 +191 +189 +189 +185 +185 +185 +183 +183 +179 +178 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +158 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +134 +133 +130 +130 +130 +129 +129 +125 +126 +119 +119 +120 +115 +115 +109 +110 +108 +106 +106 +100 +100 +96 +96 +95 +90 +90 +86 +86 +86 +82 +82 +82 +82 +82 +76 +76 +72 +73 +73 +68 +68 +65 +64 +59 +58 +59 +55 +55 +50 +50 +51 +47 +47 +42 +43 +43 +41 +41 +37 +36 +37 +33 +33 +31 +31 +31 +27 +26 +25 +25 +22 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +14 +14 +14 +13 +14 +13 +14 +14 +14 +13 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +14 +14 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +50 +51 +54 +54 +59 +59 +64 +64 +64 +68 +68 +72 +72 +72 +76 +77 +76 +76 +77 +82 +82 +86 +86 +86 +90 +90 +96 +96 +97 +100 +100 +106 +106 +110 +109 +109 +115 +115 +119 +119 +119 +125 +126 +125 +125 +126 +129 +129 +133 +134 +133 +139 +139 +143 +143 +147 +147 +147 +151 +150 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +179 +182 +183 +185 +185 +188 +188 +189 +191 +190 +194 +194 +194 +197 +197 +198 +199 +198 +200 +200 +201 +200 +202 +202 +204 +204 +204 +204 +205 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +205 +204 +205 +204 +204 +202 +202 +200 +200 +201 +200 +201 +198 +199 +197 +196 +196 +194 +194 +190 +190 +190 +188 +189 +185 +185 +185 +183 +183 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +164 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +130 +126 +126 +119 +120 +116 +115 +115 +110 +110 +106 +106 +106 +100 +100 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +83 +76 +76 +72 +72 +69 +68 +68 +64 +65 +59 +59 +59 +54 +54 +51 +51 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +14 +14 +13 +14 +14 +13 +14 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +14 +14 +14 +13 +13 +13 +13 +13 +16 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +47 +47 +47 +51 +51 +55 +54 +54 +58 +58 +58 +58 +58 +64 +64 +68 +69 +68 +72 +72 +76 +76 +78 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +106 +106 +106 +110 +110 +115 +115 +116 +120 +119 +126 +125 +127 +130 +129 +133 +133 +139 +139 +139 +143 +144 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +175 +175 +174 +179 +179 +183 +183 +183 +185 +185 +189 +188 +188 +191 +190 +194 +195 +195 +196 +196 +199 +198 +199 +201 +200 +201 +200 +202 +202 +203 +205 +204 +204 +205 +205 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +204 +204 +205 +204 +202 +202 +202 +201 +200 +200 +201 +200 +198 +198 +196 +197 +196 +194 +195 +191 +190 +191 +188 +188 +185 +185 +185 +182 +182 +179 +179 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +169 +169 +169 +164 +165 +161 +161 +161 +157 +157 +151 +151 +152 +147 +147 +143 +143 +140 +139 +139 +133 +133 +130 +129 +129 +125 +125 +125 +125 +125 +119 +120 +116 +115 +115 +110 +110 +106 +106 +107 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +77 +72 +73 +72 +69 +68 +64 +64 +65 +58 +58 +55 +54 +50 +50 +50 +47 +47 +43 +42 +42 +41 +40 +37 +36 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +26 +21 +21 +19 +19 +17 +17 +17 +15 +15 +14 +15 +15 +13 +13 +12 +13 +13 +14 +13 +13 +13 +14 +14 +14 +14 +14 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +14 +14 +13 +14 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +22 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +41 +41 +41 +43 +43 +47 +47 +46 +51 +50 +55 +55 +56 +58 +58 +64 +64 +68 +69 +68 +72 +72 +72 +72 +72 +76 +77 +76 +77 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +100 +100 +100 +106 +105 +110 +110 +110 +115 +115 +119 +120 +120 +125 +126 +129 +129 +129 +133 +134 +139 +139 +140 +143 +143 +147 +147 +151 +151 +151 +157 +157 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +178 +182 +183 +184 +184 +189 +188 +188 +191 +191 +194 +194 +194 +196 +196 +198 +198 +198 +200 +201 +201 +201 +200 +203 +203 +204 +205 +204 +205 +204 +206 +206 +207 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +207 +206 +205 +204 +204 +205 +204 +203 +203 +200 +201 +201 +200 +200 +199 +198 +197 +197 +197 +194 +194 +190 +190 +190 +188 +189 +188 +189 +189 +185 +185 +182 +183 +183 +179 +179 +174 +175 +174 +173 +173 +169 +169 +164 +165 +165 +161 +161 +157 +157 +157 +151 +151 +151 +151 +151 +147 +147 +143 +143 +143 +140 +140 +133 +133 +131 +129 +129 +125 +125 +119 +119 +119 +115 +116 +116 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +89 +86 +86 +82 +82 +82 +77 +76 +72 +72 +72 +68 +68 +65 +64 +64 +59 +59 +55 +54 +55 +51 +50 +47 +47 +47 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +30 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +14 +14 +14 +13 +14 +14 +14 +14 +14 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +14 +13 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +19 +19 +19 +22 +21 +25 +25 +25 +27 +26 +31 +31 +32 +33 +33 +37 +36 +41 +41 +41 +42 +43 +46 +47 +47 +51 +51 +51 +51 +51 +54 +54 +58 +58 +59 +64 +64 +69 +68 +70 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +95 +100 +100 +100 +106 +105 +110 +110 +110 +115 +115 +120 +119 +125 +126 +125 +130 +129 +133 +133 +134 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +173 +173 +172 +175 +174 +178 +179 +179 +182 +182 +185 +184 +184 +188 +189 +191 +191 +191 +195 +194 +196 +196 +197 +198 +199 +200 +200 +200 +200 +200 +202 +202 +204 +204 +204 +205 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +204 +205 +204 +204 +205 +202 +202 +200 +200 +200 +200 +201 +201 +200 +200 +198 +198 +196 +196 +196 +194 +195 +191 +190 +189 +188 +189 +185 +184 +182 +183 +183 +179 +178 +175 +175 +174 +173 +173 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +152 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +134 +129 +130 +125 +125 +125 +120 +120 +116 +116 +116 +110 +110 +106 +106 +100 +100 +99 +96 +96 +90 +90 +90 +86 +86 +82 +82 +83 +76 +76 +72 +73 +72 +68 +68 +64 +64 +64 +59 +58 +55 +54 +50 +50 +50 +47 +46 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +30 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +14 +14 +13 +13 +14 +14 +14 +14 +13 +14 +14 +14 +13 +14 +14 +14 +14 +13 +14 +14 +14 +13 +14 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +18 +20 +21 +21 +25 +25 +28 +27 +27 +31 +31 +33 +33 +33 +37 +37 +37 +37 +37 +41 +41 +43 +42 +43 +47 +47 +51 +51 +52 +54 +54 +58 +58 +65 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +105 +106 +106 +110 +110 +115 +116 +116 +120 +119 +126 +126 +125 +130 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +152 +151 +157 +157 +157 +161 +161 +165 +165 +165 +168 +169 +173 +173 +173 +175 +175 +179 +179 +179 +182 +183 +184 +184 +185 +189 +189 +191 +191 +194 +195 +194 +196 +196 +198 +198 +198 +200 +200 +201 +200 +200 +202 +202 +204 +204 +204 +204 +204 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +204 +205 +205 +204 +204 +205 +204 +202 +202 +202 +200 +200 +200 +200 +199 +198 +198 +197 +196 +194 +194 +194 +190 +190 +189 +189 +188 +185 +185 +185 +184 +184 +183 +183 +178 +179 +179 +175 +174 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +134 +129 +129 +125 +126 +120 +119 +120 +116 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +69 +68 +68 +64 +64 +58 +58 +59 +54 +55 +51 +51 +51 +47 +47 +43 +43 +42 +41 +41 +37 +37 +37 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +14 +13 +14 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +14 +14 +13 +14 +13 +12 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +42 +43 +42 +47 +46 +51 +50 +50 +55 +55 +59 +58 +58 +65 +64 +68 +68 +69 +73 +72 +76 +76 +76 +82 +82 +86 +86 +90 +90 +90 +96 +95 +99 +99 +100 +106 +106 +110 +110 +110 +115 +115 +120 +119 +120 +126 +125 +129 +129 +130 +133 +133 +139 +139 +142 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +174 +179 +179 +183 +182 +184 +185 +185 +188 +188 +190 +191 +191 +194 +194 +197 +197 +196 +198 +198 +200 +200 +200 +200 +201 +202 +202 +203 +205 +204 +204 +204 +207 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +203 +202 +203 +200 +200 +200 +201 +200 +198 +198 +196 +196 +196 +194 +194 +194 +195 +194 +190 +190 +189 +188 +189 +184 +184 +183 +183 +181 +179 +179 +175 +175 +173 +172 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +134 +134 +133 +129 +129 +125 +125 +125 +119 +119 +116 +115 +115 +110 +110 +106 +106 +106 +100 +99 +96 +96 +96 +90 +89 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +68 +68 +69 +68 +68 +65 +65 +58 +58 +59 +55 +54 +50 +51 +50 +47 +47 +43 +43 +42 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +18 +15 +15 +15 +15 +14 +13 +13 +12 +14 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +13 +14 +14 +13 +13 +14 +14 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +12 +15 +15 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +36 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +50 +54 +54 +55 +58 +58 +64 +65 +68 +68 +69 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +89 +96 +96 +96 +100 +100 +106 +105 +106 +109 +109 +116 +116 +120 +119 +120 +125 +125 +125 +125 +125 +129 +130 +134 +133 +134 +139 +139 +143 +143 +143 +147 +148 +151 +151 +151 +157 +157 +161 +161 +165 +165 +165 +169 +169 +172 +173 +173 +175 +175 +179 +178 +179 +183 +183 +185 +185 +185 +189 +188 +191 +191 +191 +195 +195 +196 +196 +199 +199 +198 +201 +201 +201 +201 +201 +202 +202 +202 +202 +203 +205 +205 +204 +204 +204 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +207 +204 +204 +204 +205 +204 +205 +205 +204 +202 +202 +200 +200 +201 +200 +200 +199 +198 +200 +196 +197 +194 +194 +190 +191 +191 +188 +189 +185 +185 +185 +183 +183 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +163 +161 +161 +157 +157 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +130 +125 +125 +119 +120 +115 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +65 +64 +64 +58 +58 +54 +54 +55 +50 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +14 +14 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +14 +13 +14 +14 +14 +13 +13 +14 +14 +14 +13 +14 +13 +13 +13 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +41 +41 +41 +42 +43 +47 +47 +47 +51 +50 +55 +55 +55 +59 +59 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +115 +116 +120 +119 +125 +125 +125 +129 +129 +133 +133 +140 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +182 +183 +183 +185 +185 +188 +189 +188 +190 +191 +195 +195 +194 +196 +196 +198 +199 +198 +201 +200 +200 +201 +201 +203 +203 +204 +204 +204 +204 +204 +206 +206 +206 +207 +206 +206 +207 +206 +206 +207 +206 +207 +206 +206 +207 +206 +206 +204 +204 +205 +204 +204 +202 +202 +201 +200 +200 +200 +200 +198 +198 +198 +196 +196 +194 +195 +194 +190 +190 +188 +188 +189 +184 +184 +182 +183 +179 +178 +179 +175 +175 +173 +173 +172 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +148 +144 +143 +139 +139 +134 +134 +133 +130 +129 +125 +125 +125 +119 +119 +116 +116 +115 +109 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +83 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +58 +58 +54 +54 +54 +50 +50 +47 +47 +47 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +12 +13 +13 +13 +13 +14 +13 +14 +13 +14 +14 +14 +14 +14 +13 +13 +14 +13 +13 +14 +13 +14 +14 +13 +13 +13 +13 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +26 +31 +30 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +50 +54 +54 +54 +59 +58 +65 +64 +64 +68 +68 +72 +72 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +116 +120 +120 +125 +125 +130 +129 +129 +133 +133 +139 +139 +139 +143 +143 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +162 +165 +165 +169 +169 +173 +173 +173 +176 +174 +179 +179 +179 +183 +182 +183 +183 +182 +184 +185 +189 +188 +188 +190 +190 +194 +194 +195 +197 +197 +198 +198 +200 +201 +201 +201 +200 +202 +202 +203 +204 +204 +204 +204 +204 +204 +204 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +204 +205 +204 +204 +204 +202 +202 +201 +200 +200 +201 +201 +198 +199 +199 +196 +197 +194 +195 +190 +190 +190 +188 +189 +185 +184 +184 +183 +182 +183 +182 +182 +179 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +134 +130 +129 +129 +125 +126 +120 +119 +119 +116 +115 +110 +109 +106 +105 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +87 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +65 +64 +59 +58 +55 +54 +54 +51 +50 +47 +47 +46 +43 +43 +43 +43 +42 +40 +41 +36 +37 +36 +33 +32 +31 +31 +29 +27 +27 +25 +25 +20 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +14 +14 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +14 +14 +14 +13 +13 +13 +14 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +36 +41 +41 +41 +43 +43 +47 +47 +50 +50 +51 +54 +54 +58 +58 +58 +64 +64 +68 +68 +68 +73 +72 +76 +76 +77 +82 +82 +86 +86 +86 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +115 +120 +119 +120 +125 +126 +129 +129 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +150 +151 +151 +157 +157 +161 +161 +161 +165 +165 +165 +165 +165 +169 +168 +173 +173 +173 +175 +175 +179 +179 +180 +183 +183 +185 +185 +188 +189 +188 +190 +190 +194 +194 +194 +196 +196 +196 +197 +196 +198 +198 +200 +200 +200 +200 +200 +202 +202 +204 +205 +204 +204 +205 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +207 +204 +205 +204 +204 +204 +203 +203 +201 +200 +200 +201 +200 +199 +198 +198 +196 +196 +194 +194 +194 +190 +191 +189 +189 +188 +184 +184 +183 +182 +182 +179 +179 +175 +174 +172 +173 +173 +168 +169 +165 +165 +161 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +126 +125 +126 +120 +120 +115 +116 +115 +110 +110 +106 +106 +105 +100 +100 +96 +95 +96 +90 +90 +86 +86 +87 +82 +82 +76 +76 +73 +72 +72 +68 +68 +64 +64 +64 +58 +59 +59 +58 +58 +54 +54 +51 +51 +51 +47 +47 +43 +43 +43 +40 +41 +37 +36 +33 +33 +32 +31 +31 +27 +27 +27 +25 +25 +25 +24 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +14 +14 +13 +14 +13 +14 +14 +13 +14 +14 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +14 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +24 +25 +27 +27 +27 +31 +31 +32 +33 +37 +37 +37 +41 +41 +41 +41 +41 +43 +43 +47 +46 +47 +51 +51 +54 +55 +54 +58 +59 +64 +64 +65 +68 +68 +72 +72 +77 +77 +76 +82 +82 +86 +86 +86 +90 +90 +90 +90 +90 +96 +96 +100 +99 +100 +106 +105 +110 +110 +110 +115 +116 +120 +119 +125 +126 +126 +129 +129 +133 +133 +133 +139 +139 +139 +140 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +158 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +179 +179 +179 +183 +182 +185 +185 +185 +189 +189 +190 +190 +192 +194 +195 +196 +197 +198 +199 +199 +200 +200 +200 +200 +201 +203 +203 +204 +204 +204 +204 +204 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +204 +204 +204 +205 +204 +202 +202 +201 +200 +200 +200 +200 +198 +199 +198 +196 +196 +195 +195 +191 +191 +190 +189 +188 +184 +185 +185 +183 +183 +179 +179 +179 +175 +175 +173 +173 +172 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +130 +125 +125 +126 +120 +120 +115 +116 +116 +109 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +86 +86 +86 +82 +76 +76 +76 +76 +72 +72 +68 +69 +66 +64 +65 +58 +58 +55 +54 +55 +50 +51 +47 +47 +47 +43 +43 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +28 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +13 +14 +13 +14 +14 +14 +14 +14 +14 +14 +14 +14 +13 +13 +13 +14 +13 +14 +14 +13 +14 +14 +14 +14 +12 +13 +15 +15 +17 +17 +19 +19 +19 +21 +21 +26 +25 +24 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +42 +43 +47 +47 +51 +51 +55 +54 +54 +59 +58 +64 +65 +65 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +115 +119 +119 +119 +119 +119 +126 +125 +129 +129 +130 +133 +133 +139 +139 +141 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +165 +165 +165 +169 +168 +173 +173 +173 +175 +175 +178 +179 +182 +183 +183 +185 +184 +188 +189 +188 +191 +190 +194 +194 +195 +197 +196 +198 +198 +199 +200 +200 +200 +200 +201 +202 +202 +204 +204 +204 +205 +204 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +207 +206 +206 +206 +206 +207 +206 +205 +205 +204 +204 +204 +203 +202 +200 +200 +200 +201 +201 +198 +198 +198 +197 +197 +195 +194 +195 +190 +190 +189 +189 +188 +185 +185 +183 +182 +182 +179 +179 +175 +174 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +142 +133 +133 +129 +129 +125 +125 +125 +119 +119 +116 +115 +115 +110 +110 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +65 +64 +64 +65 +58 +58 +54 +55 +54 +51 +50 +47 +46 +43 +43 +42 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +26 +25 +25 +25 +21 +22 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +14 +13 +13 +14 +13 +13 +13 +14 +13 +14 +13 +14 +14 +14 +13 +14 +13 +14 +14 +13 +13 +14 +13 +13 +12 +15 +15 +17 +17 +17 +20 +20 +21 +21 +21 +26 +25 +27 +27 +27 +31 +31 +33 +33 +38 +36 +37 +41 +41 +43 +43 +43 +47 +47 +51 +50 +50 +54 +54 +58 +58 +58 +64 +64 +69 +68 +69 +73 +73 +77 +76 +83 +82 +82 +86 +86 +90 +90 +90 +96 +96 +96 +96 +95 +99 +100 +106 +106 +106 +110 +109 +115 +116 +117 +119 +120 +125 +125 +129 +130 +130 +134 +133 +140 +139 +140 +143 +143 +143 +144 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +163 +165 +165 +169 +169 +173 +173 +172 +175 +175 +179 +179 +178 +183 +182 +184 +185 +184 +188 +188 +190 +191 +191 +194 +195 +197 +197 +198 +199 +198 +200 +200 +200 +200 +201 +202 +202 +205 +204 +205 +205 +204 +207 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +204 +204 +204 +205 +205 +202 +202 +200 +201 +200 +200 +200 +199 +198 +199 +196 +197 +194 +195 +195 +190 +190 +188 +188 +185 +184 +185 +183 +183 +178 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +148 +144 +143 +143 +139 +139 +133 +134 +133 +130 +130 +129 +129 +130 +125 +125 +120 +120 +119 +115 +116 +110 +110 +110 +106 +106 +100 +100 +96 +96 +95 +90 +90 +86 +86 +86 +82 +82 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +65 +65 +59 +58 +58 +54 +55 +51 +51 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +22 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +13 +14 +14 +13 +14 +14 +13 +14 +13 +14 +14 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +26 +25 +25 +27 +27 +31 +31 +33 +33 +33 +33 +33 +36 +37 +41 +40 +41 +43 +43 +47 +47 +47 +51 +50 +54 +55 +58 +58 +59 +65 +65 +68 +69 +68 +73 +72 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +92 +96 +96 +99 +100 +107 +106 +106 +110 +109 +115 +116 +116 +119 +120 +125 +125 +125 +129 +130 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +164 +165 +169 +169 +173 +173 +173 +175 +174 +179 +179 +179 +182 +183 +185 +184 +189 +188 +189 +190 +190 +194 +194 +195 +196 +196 +198 +198 +198 +200 +201 +201 +200 +200 +202 +202 +204 +204 +205 +204 +204 +206 +207 +207 +206 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +204 +204 +204 +205 +204 +202 +203 +203 +200 +200 +200 +201 +199 +198 +199 +197 +196 +194 +195 +195 +191 +190 +189 +189 +189 +185 +184 +183 +183 +182 +179 +179 +175 +174 +175 +172 +173 +169 +169 +164 +165 +165 +162 +161 +157 +156 +157 +151 +151 +151 +151 +151 +147 +147 +143 +143 +143 +139 +140 +133 +133 +134 +129 +129 +126 +126 +119 +120 +120 +116 +115 +110 +109 +110 +106 +106 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +83 +82 +82 +76 +76 +73 +72 +72 +68 +68 +64 +64 +64 +58 +58 +54 +54 +54 +51 +51 +47 +47 +47 +43 +42 +41 +41 +38 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +13 +14 +14 +14 +14 +14 +13 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +13 +13 +14 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +34 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +50 +54 +55 +58 +59 +59 +64 +64 +69 +68 +68 +72 +72 +76 +76 +79 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +106 +106 +106 +110 +110 +116 +116 +115 +116 +116 +120 +120 +122 +125 +126 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +160 +161 +165 +165 +169 +169 +172 +172 +173 +175 +175 +179 +178 +179 +182 +182 +185 +185 +184 +188 +188 +191 +191 +190 +195 +195 +196 +196 +196 +198 +198 +200 +200 +201 +201 +201 +202 +202 +204 +205 +204 +204 +205 +206 +206 +207 +206 +207 +207 +206 +206 +207 +206 +206 +207 +207 +207 +206 +204 +204 +204 +204 +204 +202 +202 +200 +200 +200 +200 +200 +200 +201 +201 +198 +198 +196 +196 +196 +195 +194 +191 +191 +191 +189 +189 +185 +185 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +152 +147 +147 +143 +143 +139 +139 +139 +133 +134 +129 +129 +129 +125 +125 +125 +126 +126 +120 +120 +116 +116 +115 +110 +110 +106 +106 +101 +99 +100 +96 +96 +90 +90 +90 +86 +86 +82 +83 +82 +76 +77 +72 +72 +72 +69 +68 +65 +64 +65 +58 +58 +55 +54 +50 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +12 +14 +14 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +14 +13 +14 +14 +13 +14 +14 +14 +13 +13 +13 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +22 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +41 +41 +41 +43 +42 +47 +47 +47 +50 +51 +55 +55 +56 +59 +58 +64 +64 +68 +68 +68 +73 +73 +76 +76 +76 +82 +82 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +102 +106 +106 +110 +110 +115 +116 +115 +119 +119 +125 +125 +125 +129 +129 +133 +133 +134 +139 +139 +143 +143 +144 +147 +147 +151 +151 +157 +157 +157 +161 +161 +164 +165 +165 +169 +169 +173 +173 +173 +174 +175 +178 +179 +179 +182 +182 +185 +185 +185 +189 +189 +190 +191 +195 +194 +194 +197 +196 +198 +198 +198 +200 +201 +201 +200 +200 +202 +202 +204 +204 +204 +204 +204 +207 +207 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +205 +205 +204 +204 +202 +202 +201 +200 +200 +200 +201 +199 +198 +199 +196 +197 +195 +195 +191 +191 +191 +189 +189 +184 +184 +185 +182 +182 +183 +183 +182 +178 +179 +175 +175 +175 +173 +173 +169 +169 +167 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +143 +144 +143 +139 +139 +133 +134 +134 +130 +129 +125 +125 +123 +119 +120 +116 +116 +109 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +73 +72 +68 +68 +64 +65 +59 +59 +58 +54 +54 +55 +54 +55 +51 +50 +47 +46 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +14 +14 +13 +14 +14 +13 +13 +14 +14 +14 +14 +14 +13 +14 +14 +13 +13 +13 +13 +14 +13 +14 +14 +14 +13 +13 +15 +15 +18 +17 +17 +19 +19 +21 +21 +21 +25 +25 +25 +25 +25 +27 +27 +30 +31 +31 +33 +33 +37 +37 +38 +41 +41 +42 +43 +47 +47 +47 +51 +51 +55 +55 +55 +59 +58 +59 +58 +59 +64 +65 +68 +68 +69 +72 +72 +76 +76 +81 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +105 +106 +110 +110 +110 +115 +116 +120 +120 +120 +126 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +168 +173 +173 +175 +175 +179 +179 +179 +182 +183 +185 +185 +185 +189 +189 +190 +190 +191 +194 +194 +196 +196 +196 +198 +199 +200 +200 +200 +200 +201 +203 +202 +205 +205 +205 +205 +205 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +205 +205 +205 +204 +204 +202 +202 +200 +200 +200 +200 +200 +198 +198 +198 +196 +197 +197 +197 +196 +195 +195 +190 +191 +191 +188 +189 +184 +184 +185 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +144 +143 +143 +139 +139 +134 +133 +133 +130 +130 +125 +125 +125 +119 +119 +116 +115 +116 +110 +109 +106 +105 +106 +100 +100 +96 +96 +91 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +65 +64 +64 +59 +58 +55 +54 +55 +50 +51 +47 +47 +43 +43 +42 +41 +40 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +24 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +13 +13 +14 +13 +14 +13 +13 +14 +14 +13 +14 +13 +14 +13 +14 +13 +13 +13 +13 +13 +13 +14 +13 +13 +12 +15 +15 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +43 +42 +43 +47 +47 +51 +51 +51 +54 +54 +58 +59 +64 +65 +64 +69 +68 +72 +72 +73 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +105 +110 +110 +116 +116 +116 +119 +120 +125 +125 +125 +130 +129 +133 +133 +134 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +166 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +185 +185 +184 +189 +189 +190 +191 +191 +195 +195 +197 +197 +199 +198 +198 +200 +200 +200 +200 +200 +202 +202 +203 +202 +202 +204 +204 +204 +204 +204 +207 +206 +206 +207 +207 +206 +206 +207 +206 +207 +206 +206 +206 +206 +204 +204 +204 +204 +204 +204 +204 +204 +202 +202 +201 +200 +201 +200 +200 +198 +198 +198 +197 +196 +194 +195 +190 +190 +191 +189 +189 +185 +184 +185 +183 +182 +182 +182 +182 +178 +179 +175 +175 +175 +173 +173 +169 +169 +167 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +130 +125 +125 +119 +120 +115 +115 +115 +110 +110 +106 +106 +105 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +69 +69 +65 +64 +64 +59 +58 +55 +55 +55 +50 +51 +47 +47 +47 +43 +44 +41 +40 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +14 +14 +14 +14 +13 +14 +14 +13 +14 +14 +13 +14 +14 +14 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +46 +47 +51 +51 +50 +54 +54 +58 +58 +58 +64 +65 +68 +69 +68 +72 +72 +76 +76 +77 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +109 +115 +116 +119 +119 +119 +125 +125 +129 +129 +129 +133 +134 +139 +140 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +185 +185 +185 +189 +188 +190 +190 +190 +194 +195 +195 +194 +194 +196 +196 +198 +198 +199 +200 +200 +201 +200 +201 +202 +202 +204 +204 +204 +205 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +204 +204 +205 +205 +205 +202 +202 +200 +201 +201 +201 +200 +198 +198 +198 +196 +196 +196 +197 +196 +194 +195 +190 +191 +191 +189 +189 +185 +184 +184 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +139 +139 +139 +134 +133 +129 +130 +129 +125 +125 +120 +120 +120 +116 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +89 +86 +86 +86 +82 +81 +76 +76 +76 +72 +72 +68 +68 +68 +65 +64 +59 +58 +58 +55 +55 +50 +50 +51 +47 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +18 +15 +15 +15 +15 +14 +13 +13 +12 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +14 +14 +13 +14 +14 +13 +14 +14 +13 +14 +13 +13 +14 +13 +13 +13 +13 +14 +13 +13 +15 +15 +15 +16 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +26 +27 +27 +31 +31 +32 +33 +33 +37 +36 +41 +41 +41 +42 +43 +47 +46 +47 +50 +50 +54 +55 +55 +59 +59 +64 +64 +68 +69 +68 +72 +73 +76 +77 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +105 +106 +110 +110 +116 +115 +120 +120 +119 +125 +125 +130 +130 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +158 +161 +161 +165 +165 +170 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +183 +185 +184 +188 +189 +189 +190 +190 +195 +195 +195 +196 +197 +198 +199 +200 +200 +200 +200 +200 +202 +202 +202 +204 +204 +204 +204 +204 +204 +205 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +202 +202 +202 +200 +200 +200 +201 +201 +199 +198 +196 +197 +195 +195 +195 +190 +190 +188 +188 +188 +184 +185 +183 +182 +183 +179 +179 +174 +175 +174 +173 +173 +169 +169 +169 +164 +165 +161 +161 +157 +156 +157 +151 +151 +147 +148 +147 +143 +143 +139 +140 +139 +134 +133 +129 +129 +129 +126 +125 +119 +120 +120 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +69 +64 +64 +58 +59 +55 +54 +54 +51 +50 +46 +47 +47 +43 +43 +40 +41 +41 +37 +37 +32 +33 +33 +31 +31 +27 +27 +28 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +14 +14 +13 +14 +13 +14 +13 +13 +13 +14 +14 +14 +14 +13 +13 +14 +14 +14 +14 +14 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +21 +21 +20 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +40 +41 +41 +43 +42 +47 +47 +47 +51 +50 +54 +54 +56 +59 +58 +65 +64 +68 +68 +68 +72 +72 +76 +76 +76 +83 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +105 +106 +110 +110 +109 +115 +115 +120 +120 +120 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +161 +161 +160 +165 +165 +169 +169 +169 +173 +172 +175 +175 +175 +178 +179 +183 +182 +182 +185 +185 +189 +189 +188 +190 +190 +195 +194 +197 +196 +196 +198 +198 +200 +200 +200 +200 +200 +200 +200 +200 +202 +202 +205 +204 +204 +204 +204 +206 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +207 +207 +204 +204 +204 +204 +204 +204 +204 +202 +202 +202 +200 +201 +200 +201 +200 +198 +198 +196 +196 +195 +194 +194 +190 +190 +189 +188 +188 +184 +185 +182 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +119 +116 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +65 +64 +64 +58 +59 +55 +55 +55 +50 +51 +47 +47 +46 +42 +43 +40 +41 +41 +37 +36 +33 +33 +33 +31 +31 +27 +27 +24 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +14 +13 +14 +13 +14 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +14 +14 +14 +13 +13 +13 +13 +13 +13 +14 +13 +13 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +36 +37 +37 +41 +40 +43 +42 +47 +47 +47 +50 +50 +55 +55 +54 +58 +58 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +85 +90 +90 +96 +96 +96 +100 +100 +106 +105 +106 +110 +109 +115 +116 +115 +119 +119 +125 +125 +125 +129 +129 +133 +133 +133 +139 +140 +143 +143 +148 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +179 +182 +183 +185 +184 +188 +189 +188 +190 +191 +194 +194 +195 +196 +196 +199 +198 +198 +200 +200 +200 +200 +200 +202 +202 +204 +204 +205 +204 +205 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +205 +204 +205 +204 +204 +203 +203 +202 +200 +200 +200 +200 +198 +198 +198 +197 +196 +194 +195 +195 +191 +190 +188 +188 +188 +184 +185 +182 +182 +183 +179 +178 +175 +174 +173 +172 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +125 +126 +125 +120 +120 +115 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +87 +82 +82 +76 +76 +73 +72 +72 +68 +69 +64 +64 +64 +59 +58 +54 +55 +54 +51 +50 +47 +47 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +13 +14 +14 +13 +13 +13 +14 +13 +14 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +14 +13 +14 +14 +14 +14 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +51 +51 +55 +54 +58 +59 +58 +64 +64 +68 +68 +68 +72 +72 +77 +76 +83 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +115 +120 +119 +120 +125 +125 +129 +129 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +178 +179 +179 +183 +182 +185 +184 +185 +189 +189 +189 +188 +188 +191 +190 +194 +194 +194 +196 +196 +198 +199 +199 +200 +201 +201 +200 +202 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +203 +200 +200 +201 +201 +200 +199 +199 +198 +196 +196 +194 +194 +195 +191 +191 +189 +188 +185 +184 +185 +183 +182 +178 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +126 +125 +119 +119 +116 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +91 +90 +90 +86 +86 +82 +82 +82 +76 +76 +76 +76 +76 +72 +72 +68 +68 +69 +64 +64 +58 +58 +59 +58 +58 +55 +55 +51 +51 +50 +47 +46 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +30 +31 +31 +27 +27 +25 +25 +23 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +14 +14 +14 +14 +14 +14 +14 +14 +13 +14 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +32 +37 +37 +40 +40 +41 +43 +43 +46 +46 +47 +50 +51 +54 +55 +59 +59 +59 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +105 +110 +110 +110 +115 +115 +120 +119 +119 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +148 +151 +151 +157 +157 +160 +161 +161 +165 +165 +169 +169 +169 +173 +173 +173 +173 +173 +175 +175 +178 +179 +179 +183 +183 +185 +184 +186 +188 +189 +190 +191 +194 +194 +195 +196 +196 +198 +199 +199 +200 +200 +201 +201 +200 +200 +200 +203 +202 +203 +204 +204 +204 +204 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +207 +204 +205 +204 +204 +204 +202 +202 +203 +200 +200 +200 +200 +198 +198 +198 +197 +196 +194 +194 +194 +191 +190 +188 +188 +188 +184 +184 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +166 +165 +165 +161 +161 +157 +157 +157 +151 +151 +148 +147 +147 +143 +143 +138 +139 +139 +133 +133 +129 +129 +130 +125 +126 +119 +120 +116 +115 +115 +109 +110 +106 +106 +106 +100 +99 +96 +96 +96 +91 +90 +86 +86 +86 +82 +82 +76 +76 +77 +73 +72 +69 +69 +65 +64 +64 +58 +59 +55 +55 +55 +51 +50 +50 +51 +51 +47 +47 +42 +43 +43 +41 +41 +37 +37 +37 +33 +32 +30 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +14 +13 +14 +13 +14 +13 +14 +14 +14 +14 +14 +14 +14 +14 +13 +13 +14 +14 +14 +13 +13 +14 +14 +14 +13 +12 +15 +15 +17 +17 +17 +19 +18 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +43 +43 +43 +47 +46 +50 +50 +51 +54 +55 +58 +59 +59 +65 +65 +68 +68 +68 +73 +72 +76 +76 +77 +82 +82 +86 +86 +91 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +115 +119 +120 +119 +126 +125 +130 +130 +130 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +182 +183 +182 +184 +184 +188 +188 +188 +191 +191 +191 +191 +190 +194 +194 +197 +196 +197 +198 +199 +200 +200 +200 +201 +201 +203 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +207 +206 +207 +204 +204 +204 +204 +205 +203 +202 +200 +200 +200 +200 +200 +201 +201 +201 +198 +198 +197 +196 +196 +194 +194 +191 +190 +191 +188 +189 +184 +185 +183 +183 +182 +178 +179 +175 +174 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +151 +147 +147 +143 +143 +140 +139 +139 +133 +134 +129 +130 +129 +125 +125 +125 +126 +126 +119 +119 +115 +115 +115 +110 +110 +106 +106 +106 +99 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +76 +76 +76 +72 +73 +68 +68 +68 +64 +64 +58 +59 +59 +54 +54 +51 +51 +47 +47 +47 +42 +42 +41 +41 +41 +37 +37 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +24 +21 +21 +19 +19 +17 +17 +17 +15 +16 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +14 +14 +14 +14 +14 +14 +13 +14 +13 +13 +14 +14 +14 +13 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +26 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +42 +43 +47 +47 +50 +51 +51 +55 +54 +59 +58 +65 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +101 +106 +106 +110 +110 +115 +115 +115 +119 +119 +125 +125 +126 +129 +130 +133 +133 +134 +139 +140 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +175 +175 +175 +179 +179 +183 +183 +183 +185 +185 +189 +188 +190 +191 +191 +194 +195 +196 +196 +197 +198 +198 +200 +201 +200 +200 +201 +203 +203 +203 +204 +205 +204 +204 +205 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +205 +204 +204 +205 +204 +202 +202 +202 +200 +201 +201 +200 +200 +198 +199 +196 +196 +195 +195 +194 +191 +190 +188 +188 +189 +185 +184 +183 +183 +183 +178 +179 +175 +175 +175 +172 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +134 +134 +130 +129 +125 +125 +126 +119 +119 +115 +116 +110 +109 +110 +106 +106 +100 +100 +100 +96 +96 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +73 +69 +69 +68 +64 +64 +64 +64 +64 +58 +58 +59 +55 +55 +54 +54 +55 +50 +50 +47 +47 +47 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +12 +12 +13 +13 +13 +13 +14 +14 +14 +14 +14 +14 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +40 +41 +41 +43 +43 +47 +47 +47 +50 +50 +54 +55 +54 +58 +58 +64 +64 +64 +68 +68 +72 +72 +73 +76 +77 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +99 +100 +100 +100 +100 +106 +106 +109 +110 +110 +115 +115 +119 +119 +122 +125 +125 +129 +129 +133 +134 +134 +139 +139 +143 +144 +143 +147 +147 +147 +147 +147 +151 +151 +157 +157 +157 +160 +161 +164 +164 +168 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +182 +185 +184 +189 +189 +188 +190 +191 +194 +194 +195 +196 +196 +198 +198 +200 +200 +200 +200 +200 +202 +202 +202 +204 +205 +204 +204 +204 +206 +207 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +204 +204 +204 +205 +204 +202 +202 +202 +201 +201 +200 +201 +200 +198 +198 +196 +196 +196 +195 +194 +190 +190 +191 +188 +188 +185 +185 +183 +182 +183 +178 +179 +175 +175 +175 +173 +173 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +144 +143 +143 +139 +139 +133 +133 +133 +129 +129 +129 +129 +129 +125 +125 +120 +119 +120 +116 +116 +110 +109 +108 +106 +106 +100 +99 +95 +96 +96 +90 +90 +86 +86 +86 +82 +82 +82 +82 +83 +77 +76 +72 +72 +73 +68 +68 +64 +64 +59 +58 +59 +55 +54 +50 +51 +51 +47 +46 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +22 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +14 +13 +13 +14 +13 +13 +13 +14 +14 +14 +13 +13 +14 +14 +13 +14 +14 +13 +13 +13 +14 +13 +13 +13 +13 +12 +15 +15 +17 +17 +18 +19 +19 +21 +21 +26 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +42 +43 +43 +47 +47 +51 +51 +51 +55 +54 +58 +58 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +83 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +102 +106 +106 +110 +110 +116 +116 +116 +119 +119 +125 +125 +126 +129 +129 +130 +130 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +150 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +182 +183 +185 +185 +189 +189 +190 +191 +190 +194 +195 +196 +196 +197 +198 +199 +200 +200 +200 +200 +200 +202 +202 +202 +204 +204 +204 +205 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +205 +203 +202 +202 +200 +201 +200 +200 +200 +198 +198 +196 +197 +195 +195 +195 +190 +190 +188 +189 +188 +185 +184 +183 +182 +182 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +158 +157 +157 +151 +151 +147 +147 +147 +143 +143 +143 +144 +143 +139 +139 +133 +134 +134 +129 +129 +125 +126 +126 +119 +120 +116 +116 +109 +110 +110 +106 +106 +100 +100 +100 +96 +96 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +77 +74 +72 +72 +68 +68 +64 +65 +64 +58 +59 +54 +54 +54 +50 +50 +46 +47 +47 +43 +43 +41 +41 +41 +37 +36 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +22 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +14 +13 +14 +14 +13 +13 +14 +14 +14 +13 +14 +14 +13 +14 +13 +14 +14 +14 +14 +14 +13 +14 +13 +13 +15 +15 +18 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +37 +37 +41 +41 +41 +42 +43 +47 +47 +51 +50 +50 +54 +54 +58 +58 +58 +64 +65 +64 +64 +64 +68 +68 +72 +73 +72 +76 +76 +82 +82 +83 +86 +86 +90 +90 +95 +96 +96 +100 +99 +106 +106 +106 +109 +109 +110 +110 +110 +115 +115 +120 +119 +119 +125 +126 +129 +130 +132 +133 +133 +139 +139 +142 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +160 +165 +165 +169 +169 +169 +173 +173 +175 +175 +178 +179 +179 +183 +183 +185 +185 +184 +189 +188 +191 +191 +190 +194 +194 +197 +196 +197 +198 +199 +201 +200 +201 +200 +201 +202 +202 +204 +204 +204 +204 +204 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +206 +207 +207 +207 +206 +204 +204 +205 +204 +204 +202 +203 +203 +200 +200 +200 +201 +198 +198 +199 +196 +196 +195 +195 +195 +190 +191 +188 +188 +188 +185 +185 +183 +183 +183 +178 +179 +174 +175 +172 +173 +173 +169 +169 +165 +165 +165 +161 +161 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +141 +139 +139 +134 +133 +129 +130 +129 +125 +126 +119 +119 +120 +116 +115 +116 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +91 +90 +90 +87 +86 +82 +83 +82 +76 +76 +72 +73 +72 +68 +68 +64 +64 +64 +58 +58 +54 +55 +55 +51 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +14 +14 +13 +13 +14 +14 +13 +14 +14 +14 +13 +13 +14 +13 +14 +14 +14 +14 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +28 +31 +31 +33 +33 +36 +37 +37 +40 +41 +43 +43 +43 +47 +47 +47 +47 +47 +50 +50 +54 +54 +54 +59 +58 +64 +64 +66 +68 +68 +73 +73 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +90 +90 +90 +96 +96 +100 +100 +100 +105 +106 +110 +110 +115 +116 +115 +120 +120 +119 +120 +120 +126 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +161 +161 +161 +165 +165 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +185 +185 +185 +189 +189 +191 +190 +195 +195 +195 +196 +197 +199 +198 +198 +201 +200 +200 +201 +200 +203 +203 +205 +204 +204 +204 +204 +206 +207 +207 +206 +206 +206 +207 +206 +207 +207 +206 +207 +206 +206 +206 +204 +204 +204 +204 +204 +203 +203 +200 +201 +200 +200 +200 +198 +198 +199 +196 +196 +194 +194 +190 +190 +190 +189 +188 +185 +185 +185 +183 +183 +182 +182 +182 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +143 +143 +143 +140 +140 +133 +133 +134 +129 +130 +125 +125 +120 +119 +119 +116 +115 +109 +110 +109 +105 +105 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +69 +68 +68 +65 +64 +58 +59 +60 +54 +54 +51 +50 +50 +47 +47 +42 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +14 +14 +13 +14 +13 +13 +13 +13 +14 +14 +13 +14 +13 +13 +13 +13 +13 +14 +13 +14 +14 +14 +13 +14 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +42 +47 +47 +50 +50 +50 +54 +54 +59 +59 +59 +65 +64 +65 +64 +64 +68 +68 +72 +72 +72 +77 +76 +82 +82 +83 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +115 +115 +119 +119 +125 +125 +126 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +164 +169 +169 +173 +173 +173 +175 +175 +178 +179 +182 +183 +183 +184 +184 +188 +189 +189 +190 +190 +191 +191 +190 +194 +194 +196 +197 +196 +199 +198 +200 +200 +200 +201 +201 +203 +202 +205 +204 +204 +204 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +205 +202 +202 +200 +200 +200 +200 +200 +198 +198 +199 +197 +196 +197 +196 +197 +194 +195 +190 +190 +191 +189 +189 +185 +185 +185 +182 +183 +178 +179 +176 +175 +175 +173 +173 +169 +169 +169 +165 +165 +165 +165 +165 +161 +161 +157 +156 +157 +151 +151 +147 +147 +146 +143 +143 +139 +139 +133 +133 +134 +129 +129 +125 +126 +125 +120 +119 +115 +116 +116 +110 +109 +105 +106 +106 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +68 +68 +64 +64 +65 +58 +59 +55 +54 +55 +50 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +12 +12 +13 +14 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +14 +14 +13 +14 +14 +14 +14 +14 +13 +13 +13 +14 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +42 +43 +47 +47 +47 +47 +47 +50 +51 +54 +54 +55 +58 +58 +64 +64 +66 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +99 +100 +106 +106 +106 +109 +109 +115 +115 +119 +119 +120 +125 +126 +129 +129 +129 +134 +133 +139 +140 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +182 +183 +183 +184 +185 +189 +189 +188 +190 +190 +194 +194 +195 +196 +197 +198 +199 +201 +200 +200 +201 +200 +202 +202 +202 +204 +204 +205 +204 +204 +206 +207 +206 +207 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +203 +201 +201 +201 +200 +200 +200 +200 +198 +198 +198 +196 +196 +194 +195 +195 +190 +190 +188 +189 +184 +184 +184 +183 +182 +179 +178 +179 +175 +175 +175 +174 +175 +173 +173 +168 +169 +169 +165 +165 +161 +161 +158 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +120 +119 +115 +116 +110 +109 +106 +106 +105 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +72 +72 +68 +68 +69 +65 +64 +58 +58 +55 +54 +54 +51 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +20 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +14 +14 +13 +14 +14 +14 +14 +14 +13 +14 +13 +13 +14 +13 +13 +14 +14 +13 +13 +14 +14 +14 +13 +14 +13 +13 +12 +15 +15 +17 +18 +18 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +50 +50 +50 +54 +55 +59 +58 +59 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +99 +100 +100 +106 +106 +110 +110 +109 +115 +115 +119 +119 +120 +125 +125 +129 +130 +129 +134 +133 +139 +139 +139 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +182 +183 +185 +184 +189 +189 +191 +190 +190 +194 +194 +196 +196 +196 +198 +198 +200 +200 +200 +200 +200 +202 +203 +202 +204 +204 +204 +204 +205 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +207 +207 +205 +204 +204 +204 +204 +202 +202 +202 +200 +201 +200 +200 +199 +199 +199 +196 +197 +194 +195 +194 +190 +191 +188 +188 +189 +184 +184 +184 +185 +185 +183 +182 +178 +179 +179 +175 +175 +172 +173 +171 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +134 +129 +129 +125 +125 +119 +120 +120 +115 +115 +109 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +73 +72 +69 +68 +68 +64 +65 +58 +58 +58 +55 +54 +51 +51 +51 +47 +47 +42 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +28 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +14 +14 +13 +14 +14 +13 +13 +14 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +14 +13 +13 +13 +13 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +36 +37 +39 +41 +40 +43 +43 +47 +47 +47 +51 +51 +54 +54 +54 +58 +59 +64 +65 +64 +68 +68 +72 +72 +72 +77 +76 +82 +82 +85 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +115 +116 +119 +119 +125 +125 +126 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +183 +182 +183 +184 +184 +188 +189 +188 +190 +190 +194 +194 +194 +197 +196 +198 +199 +198 +200 +201 +201 +200 +201 +202 +202 +204 +204 +204 +204 +205 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +207 +207 +204 +204 +204 +204 +205 +202 +203 +200 +200 +200 +200 +200 +198 +198 +196 +196 +196 +194 +194 +194 +194 +194 +191 +191 +189 +189 +189 +184 +185 +183 +182 +179 +179 +179 +175 +175 +172 +172 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +133 +133 +133 +129 +129 +126 +125 +125 +120 +119 +116 +115 +115 +110 +110 +106 +106 +106 +100 +99 +96 +96 +96 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +69 +64 +64 +64 +59 +58 +55 +54 +55 +51 +50 +47 +47 +47 +43 +42 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +13 +13 +13 +13 +14 +14 +14 +14 +14 +13 +13 +14 +13 +14 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +14 +14 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +36 +37 +41 +41 +41 +43 +43 +47 +46 +47 +50 +50 +55 +55 +55 +58 +58 +64 +65 +65 +69 +68 +72 +72 +76 +77 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +95 +100 +100 +106 +106 +106 +110 +110 +115 +115 +116 +120 +119 +125 +125 +129 +129 +130 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +166 +169 +169 +173 +173 +175 +175 +175 +178 +178 +179 +179 +179 +182 +182 +184 +185 +185 +189 +188 +191 +190 +190 +194 +195 +197 +197 +196 +198 +198 +200 +200 +200 +201 +201 +202 +202 +204 +204 +204 +204 +204 +204 +204 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +203 +202 +202 +200 +200 +201 +200 +200 +200 +201 +199 +198 +199 +196 +197 +194 +194 +191 +190 +191 +189 +188 +184 +185 +185 +183 +183 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +152 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +130 +129 +125 +125 +125 +119 +119 +115 +115 +116 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +65 +59 +58 +54 +54 +51 +50 +50 +46 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +12 +13 +13 +13 +14 +13 +14 +13 +13 +14 +14 +13 +13 +13 +14 +13 +14 +14 +14 +14 +13 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +12 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +40 +43 +43 +43 +47 +47 +51 +50 +54 +55 +54 +58 +58 +65 +64 +64 +68 +68 +72 +72 +72 +77 +76 +82 +82 +82 +86 +86 +89 +90 +90 +96 +96 +100 +99 +105 +106 +106 +109 +110 +116 +115 +115 +119 +119 +126 +125 +125 +129 +129 +133 +134 +133 +139 +139 +143 +143 +144 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +166 +165 +169 +169 +173 +172 +173 +175 +175 +179 +179 +179 +182 +183 +185 +184 +185 +188 +188 +190 +191 +195 +194 +194 +196 +196 +198 +198 +198 +200 +201 +201 +200 +200 +200 +201 +202 +203 +203 +204 +204 +204 +204 +205 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +205 +205 +203 +202 +200 +200 +200 +200 +201 +198 +198 +196 +196 +196 +194 +194 +191 +191 +190 +188 +189 +185 +184 +184 +182 +183 +179 +179 +179 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +134 +129 +129 +126 +126 +120 +120 +120 +115 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +83 +76 +76 +72 +72 +69 +68 +68 +64 +64 +58 +58 +58 +55 +55 +50 +50 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +14 +13 +14 +13 +14 +14 +14 +14 +13 +14 +13 +14 +14 +13 +13 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +26 +31 +31 +33 +33 +34 +37 +36 +41 +41 +42 +43 +43 +47 +47 +51 +51 +51 +54 +54 +59 +59 +59 +64 +64 +68 +68 +69 +72 +72 +77 +76 +76 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +105 +109 +110 +110 +115 +115 +119 +120 +119 +126 +125 +130 +129 +130 +133 +133 +139 +139 +144 +143 +143 +147 +147 +151 +151 +151 +157 +157 +160 +161 +161 +165 +165 +169 +169 +168 +172 +173 +174 +175 +176 +178 +178 +183 +183 +185 +184 +185 +188 +188 +191 +190 +191 +194 +194 +194 +195 +194 +196 +196 +198 +198 +199 +200 +200 +200 +201 +201 +202 +203 +204 +204 +204 +205 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +203 +202 +200 +200 +201 +200 +200 +199 +198 +198 +196 +196 +194 +194 +194 +191 +191 +188 +188 +189 +185 +184 +182 +182 +178 +178 +179 +174 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +134 +133 +133 +129 +129 +125 +126 +125 +119 +119 +116 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +97 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +65 +64 +64 +59 +58 +54 +54 +54 +50 +51 +47 +47 +47 +43 +43 +41 +41 +36 +37 +37 +33 +33 +31 +31 +31 +27 +27 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +14 +13 +14 +13 +13 +14 +13 +13 +13 +14 +14 +13 +14 +14 +14 +14 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +30 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +50 +51 +55 +54 +58 +58 +59 +65 +64 +69 +68 +73 +72 +73 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +115 +119 +120 +126 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +162 +165 +165 +169 +169 +172 +173 +173 +175 +175 +179 +179 +182 +182 +183 +182 +183 +184 +185 +188 +189 +189 +190 +190 +194 +194 +195 +196 +196 +198 +198 +200 +200 +200 +200 +200 +202 +202 +202 +204 +205 +204 +204 +204 +204 +205 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +203 +201 +200 +200 +200 +201 +198 +198 +199 +196 +197 +194 +194 +191 +190 +191 +189 +188 +184 +185 +184 +182 +183 +179 +179 +178 +175 +174 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +126 +125 +120 +120 +116 +115 +116 +110 +110 +106 +105 +100 +100 +100 +96 +96 +89 +90 +90 +86 +86 +82 +82 +82 +76 +76 +73 +72 +72 +69 +68 +65 +64 +65 +58 +58 +55 +55 +51 +51 +51 +47 +47 +47 +47 +47 +43 +43 +42 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +29 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +14 +13 +14 +13 +14 +13 +14 +14 +14 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +14 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +30 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +51 +51 +51 +54 +55 +59 +59 +59 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +100 +100 +100 +105 +106 +110 +109 +110 +116 +116 +120 +120 +119 +125 +126 +129 +129 +130 +133 +133 +139 +139 +140 +143 +143 +148 +147 +152 +151 +151 +157 +157 +161 +161 +161 +165 +165 +165 +165 +165 +169 +169 +173 +173 +173 +175 +174 +178 +179 +179 +183 +183 +185 +184 +188 +188 +189 +190 +190 +194 +195 +194 +197 +196 +197 +196 +197 +198 +198 +200 +200 +201 +200 +200 +203 +202 +204 +204 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +205 +203 +202 +201 +200 +200 +200 +200 +199 +198 +198 +196 +196 +194 +194 +194 +190 +190 +189 +189 +189 +185 +185 +182 +183 +183 +179 +178 +175 +174 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +140 +139 +139 +133 +134 +129 +129 +126 +125 +125 +119 +119 +116 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +87 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +59 +58 +58 +58 +58 +54 +54 +50 +51 +50 +46 +47 +43 +43 +42 +41 +40 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +25 +25 +25 +21 +20 +19 +19 +19 +17 +18 +15 +15 +15 +15 +14 +13 +13 +13 +13 +13 +12 +13 +13 +14 +13 +14 +13 +13 +14 +14 +14 +13 +13 +13 +13 +14 +13 +14 +13 +14 +14 +13 +13 +13 +13 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +25 +27 +27 +31 +31 +34 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +50 +54 +55 +55 +58 +59 +64 +64 +65 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +109 +110 +115 +116 +116 +119 +119 +125 +125 +130 +129 +129 +133 +133 +139 +139 +139 +143 +143 +143 +143 +143 +147 +147 +151 +151 +151 +158 +157 +161 +161 +161 +164 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +179 +182 +182 +183 +182 +183 +184 +185 +188 +189 +189 +190 +191 +195 +194 +196 +196 +197 +198 +198 +200 +200 +200 +200 +200 +202 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +205 +204 +204 +204 +203 +202 +202 +200 +200 +200 +200 +201 +198 +199 +197 +196 +196 +194 +195 +191 +190 +188 +189 +189 +185 +185 +182 +182 +182 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +126 +119 +120 +119 +116 +116 +110 +110 +111 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +61 +59 +59 +55 +54 +50 +50 +50 +46 +47 +43 +43 +43 +41 +41 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +14 +13 +13 +14 +14 +14 +14 +14 +14 +14 +14 +13 +14 +13 +14 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +28 +27 +27 +31 +31 +33 +33 +33 +37 +37 +40 +41 +41 +43 +43 +47 +47 +47 +51 +50 +55 +55 +59 +58 +58 +65 +64 +68 +68 +68 +72 +72 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +110 +110 +109 +116 +116 +120 +119 +119 +125 +125 +125 +126 +125 +130 +129 +133 +133 +133 +139 +139 +143 +143 +145 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +168 +169 +169 +173 +173 +175 +175 +175 +178 +179 +182 +183 +183 +185 +185 +189 +188 +190 +191 +191 +195 +194 +197 +196 +196 +198 +199 +200 +200 +200 +201 +201 +202 +203 +203 +204 +205 +204 +205 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +202 +200 +201 +200 +200 +199 +198 +198 +197 +196 +195 +194 +194 +190 +191 +189 +189 +188 +185 +184 +183 +182 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +144 +143 +139 +139 +139 +133 +133 +129 +130 +130 +125 +125 +119 +119 +116 +115 +116 +109 +110 +106 +106 +106 +100 +100 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +79 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +58 +58 +54 +54 +54 +54 +54 +51 +51 +46 +46 +47 +43 +42 +40 +41 +38 +36 +36 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +14 +14 +13 +14 +14 +14 +13 +13 +14 +13 +14 +13 +13 +14 +14 +14 +13 +13 +14 +13 +13 +14 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +26 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +43 +42 +43 +47 +46 +51 +50 +51 +54 +54 +58 +58 +58 +64 +65 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +91 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +110 +110 +115 +116 +119 +119 +119 +126 +125 +130 +129 +130 +133 +133 +140 +139 +143 +143 +143 +148 +147 +151 +150 +151 +157 +157 +157 +157 +157 +161 +160 +165 +165 +165 +169 +169 +173 +173 +174 +175 +175 +179 +178 +183 +183 +183 +184 +185 +188 +189 +188 +190 +190 +195 +194 +195 +197 +197 +198 +198 +199 +200 +200 +200 +200 +202 +202 +202 +204 +204 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +204 +204 +205 +204 +203 +202 +202 +200 +200 +200 +200 +200 +199 +198 +196 +196 +196 +194 +194 +191 +190 +190 +188 +189 +184 +184 +185 +182 +182 +179 +178 +176 +175 +175 +172 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +144 +139 +139 +133 +133 +130 +130 +129 +125 +125 +120 +119 +119 +115 +115 +115 +115 +116 +110 +110 +105 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +68 +68 +68 +64 +64 +58 +58 +59 +55 +54 +51 +51 +47 +47 +46 +42 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +14 +13 +13 +13 +14 +14 +13 +13 +14 +13 +14 +14 +13 +13 +13 +14 +13 +14 +13 +13 +14 +14 +14 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +34 +33 +33 +37 +37 +41 +41 +40 +43 +43 +47 +47 +46 +51 +50 +54 +54 +54 +58 +58 +64 +65 +65 +69 +68 +72 +72 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +99 +100 +106 +106 +105 +109 +110 +115 +115 +118 +119 +119 +125 +125 +130 +129 +129 +133 +133 +139 +139 +139 +143 +143 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +163 +165 +165 +169 +169 +173 +172 +173 +175 +174 +179 +179 +179 +182 +182 +185 +184 +185 +189 +189 +190 +190 +191 +194 +194 +196 +197 +197 +199 +198 +200 +200 +200 +201 +200 +202 +202 +204 +204 +205 +204 +204 +207 +207 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +201 +200 +200 +200 +200 +199 +198 +198 +196 +196 +194 +194 +194 +190 +190 +188 +189 +185 +184 +184 +183 +182 +179 +179 +179 +174 +175 +173 +173 +172 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +129 +129 +129 +126 +126 +119 +119 +120 +116 +115 +109 +110 +108 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +82 +82 +82 +76 +76 +72 +73 +73 +68 +68 +64 +64 +61 +59 +58 +54 +54 +50 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +14 +13 +14 +14 +13 +14 +13 +14 +13 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +26 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +50 +51 +55 +54 +58 +64 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +95 +97 +100 +100 +106 +106 +109 +110 +109 +116 +115 +120 +120 +119 +125 +125 +126 +125 +125 +129 +129 +133 +133 +134 +139 +139 +143 +143 +145 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +172 +173 +173 +174 +175 +179 +178 +179 +183 +183 +185 +185 +188 +188 +189 +191 +190 +194 +195 +194 +197 +196 +199 +198 +199 +201 +200 +200 +200 +200 +202 +202 +204 +204 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +204 +205 +205 +205 +204 +203 +203 +200 +201 +201 +201 +201 +199 +198 +197 +197 +196 +194 +195 +191 +191 +191 +189 +189 +185 +185 +185 +183 +183 +179 +178 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +130 +129 +125 +125 +125 +119 +119 +116 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +73 +72 +72 +68 +68 +64 +64 +64 +58 +58 +55 +54 +54 +50 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +31 +31 +31 +27 +27 +26 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +14 +14 +14 +13 +14 +14 +14 +13 +13 +13 +13 +14 +13 +13 +14 +13 +14 +14 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +50 +50 +50 +54 +54 +59 +58 +59 +64 +64 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +84 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +105 +106 +109 +110 +110 +110 +110 +115 +115 +120 +120 +120 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +174 +175 +178 +178 +179 +183 +183 +184 +184 +185 +188 +188 +191 +190 +191 +195 +194 +197 +196 +197 +198 +198 +200 +200 +200 +200 +200 +202 +202 +205 +204 +204 +204 +204 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +207 +207 +206 +207 +206 +204 +204 +204 +205 +205 +202 +202 +201 +200 +201 +201 +201 +198 +199 +199 +196 +196 +195 +194 +195 +191 +191 +188 +188 +189 +185 +184 +183 +183 +183 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +144 +139 +139 +133 +133 +130 +129 +129 +125 +125 +120 +120 +119 +115 +115 +115 +115 +116 +110 +109 +106 +106 +106 +100 +100 +96 +96 +91 +90 +89 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +59 +58 +55 +54 +55 +50 +51 +46 +47 +43 +43 +42 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +13 +14 +14 +14 +14 +13 +13 +14 +14 +13 +13 +13 +14 +14 +14 +14 +13 +15 +14 +13 +14 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +28 +32 +31 +33 +33 +36 +37 +37 +41 +41 +43 +43 +43 +47 +47 +47 +47 +47 +51 +50 +54 +55 +54 +59 +58 +64 +64 +66 +68 +69 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +115 +115 +115 +120 +119 +125 +125 +126 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +152 +157 +157 +161 +161 +165 +164 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +178 +182 +183 +184 +184 +185 +188 +188 +190 +191 +191 +194 +194 +197 +196 +199 +198 +198 +200 +201 +200 +200 +200 +202 +202 +205 +204 +204 +204 +204 +207 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +204 +204 +204 +204 +204 +202 +202 +201 +200 +200 +200 +200 +198 +198 +198 +197 +197 +194 +194 +195 +190 +190 +188 +188 +184 +184 +185 +182 +182 +179 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +158 +151 +151 +147 +147 +143 +143 +143 +139 +139 +134 +133 +133 +130 +129 +129 +130 +129 +125 +125 +119 +120 +120 +115 +115 +110 +109 +106 +106 +106 +100 +100 +97 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +69 +64 +64 +58 +58 +55 +54 +54 +50 +50 +47 +47 +47 +43 +43 +41 +41 +40 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +14 +13 +14 +14 +14 +14 +13 +13 +13 +14 +13 +13 +13 +14 +13 +14 +13 +14 +14 +13 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +51 +55 +54 +55 +58 +58 +64 +64 +68 +68 +68 +72 +73 +76 +76 +76 +82 +82 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +105 +106 +106 +110 +110 +115 +116 +115 +120 +119 +125 +125 +125 +129 +129 +133 +133 +134 +139 +139 +143 +143 +143 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +168 +173 +172 +172 +175 +175 +178 +179 +178 +182 +183 +184 +185 +184 +188 +189 +190 +190 +195 +194 +194 +196 +196 +198 +199 +198 +200 +200 +200 +201 +200 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +207 +204 +204 +204 +204 +204 +202 +202 +200 +200 +200 +200 +201 +198 +198 +200 +196 +196 +194 +194 +190 +190 +191 +188 +188 +185 +184 +184 +183 +182 +183 +183 +183 +179 +178 +175 +175 +175 +173 +173 +168 +169 +167 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +123 +120 +119 +116 +115 +110 +109 +109 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +69 +69 +68 +64 +64 +59 +58 +58 +55 +54 +51 +50 +51 +47 +46 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +13 +14 +13 +14 +14 +14 +13 +14 +13 +13 +14 +14 +13 +14 +13 +13 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +36 +37 +41 +41 +43 +43 +43 +43 +43 +47 +47 +51 +50 +50 +55 +55 +58 +58 +59 +64 +64 +64 +64 +64 +68 +68 +72 +72 +73 +76 +76 +82 +82 +85 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +115 +116 +120 +120 +125 +125 +126 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +182 +182 +183 +184 +184 +188 +188 +188 +190 +190 +195 +194 +195 +196 +197 +198 +198 +198 +200 +201 +200 +200 +201 +202 +202 +204 +204 +205 +204 +204 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +205 +204 +204 +205 +202 +202 +200 +200 +200 +200 +200 +199 +198 +197 +196 +196 +194 +194 +191 +191 +190 +188 +188 +185 +184 +184 +183 +183 +179 +178 +177 +175 +175 +173 +173 +168 +169 +169 +165 +165 +161 +161 +161 +157 +157 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +140 +137 +133 +133 +129 +130 +125 +125 +125 +119 +120 +116 +115 +116 +110 +110 +106 +106 +105 +100 +100 +96 +96 +96 +90 +89 +86 +86 +82 +82 +82 +76 +77 +72 +72 +72 +69 +69 +64 +65 +65 +59 +58 +55 +54 +55 +51 +51 +47 +47 +47 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +14 +14 +13 +14 +13 +13 +13 +14 +13 +14 +14 +14 +14 +14 +13 +13 +13 +13 +13 +14 +14 +14 +13 +14 +13 +13 +15 +16 +17 +17 +17 +19 +19 +19 +19 +19 +20 +21 +25 +25 +25 +27 +26 +31 +31 +32 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +51 +51 +50 +51 +54 +54 +59 +59 +59 +64 +64 +68 +68 +71 +73 +72 +76 +76 +81 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +110 +110 +115 +115 +120 +120 +125 +125 +125 +129 +129 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +172 +173 +173 +175 +175 +178 +178 +179 +183 +183 +185 +184 +185 +188 +188 +191 +191 +191 +194 +194 +196 +196 +196 +198 +198 +200 +200 +201 +200 +200 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +207 +204 +204 +204 +205 +204 +202 +202 +200 +200 +200 +200 +200 +200 +200 +200 +198 +198 +197 +196 +196 +194 +194 +190 +190 +190 +188 +189 +184 +185 +182 +183 +182 +179 +179 +175 +175 +175 +173 +173 +173 +172 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +154 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +126 +120 +119 +116 +115 +116 +110 +110 +106 +106 +100 +100 +99 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +65 +58 +58 +55 +54 +51 +51 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +14 +14 +14 +13 +14 +14 +14 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +27 +27 +26 +31 +31 +33 +33 +33 +37 +37 +37 +37 +36 +41 +41 +43 +43 +43 +47 +46 +50 +50 +53 +54 +54 +58 +58 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +95 +100 +100 +104 +105 +106 +109 +109 +115 +116 +115 +119 +119 +125 +125 +126 +129 +129 +133 +133 +134 +139 +139 +143 +143 +143 +147 +147 +151 +151 +158 +158 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +174 +175 +178 +179 +179 +183 +183 +184 +185 +184 +189 +189 +191 +191 +194 +194 +194 +196 +196 +198 +199 +198 +200 +200 +201 +200 +200 +200 +200 +202 +202 +203 +204 +205 +205 +205 +205 +206 +207 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +207 +207 +206 +206 +206 +204 +204 +204 +204 +205 +202 +202 +200 +200 +200 +200 +201 +198 +198 +197 +196 +197 +194 +194 +190 +190 +190 +189 +189 +189 +188 +189 +184 +185 +182 +183 +183 +179 +178 +175 +175 +174 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +140 +133 +133 +129 +129 +125 +125 +125 +119 +119 +116 +115 +116 +110 +110 +106 +106 +105 +100 +100 +96 +96 +96 +90 +90 +86 +86 +87 +82 +82 +76 +76 +72 +72 +72 +69 +68 +64 +65 +64 +58 +58 +54 +54 +55 +51 +51 +47 +47 +47 +43 +43 +41 +41 +41 +36 +37 +33 +33 +32 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +14 +13 +13 +14 +13 +14 +14 +13 +14 +13 +13 +14 +13 +13 +14 +13 +13 +14 +14 +14 +13 +14 +14 +14 +14 +14 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +50 +51 +54 +55 +55 +58 +59 +64 +64 +65 +68 +68 +72 +72 +72 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +109 +115 +116 +116 +119 +119 +125 +125 +126 +129 +129 +133 +134 +140 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +171 +173 +173 +175 +175 +178 +179 +182 +183 +183 +185 +185 +188 +188 +189 +190 +190 +194 +195 +194 +197 +196 +199 +198 +198 +201 +200 +200 +200 +200 +202 +202 +204 +204 +205 +204 +204 +206 +206 +206 +206 +207 +207 +206 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +204 +204 +204 +204 +204 +203 +203 +200 +200 +200 +201 +201 +198 +198 +198 +197 +197 +196 +197 +197 +194 +195 +190 +190 +191 +188 +189 +184 +185 +183 +182 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +148 +143 +144 +139 +139 +140 +133 +133 +129 +129 +130 +126 +126 +120 +119 +120 +115 +116 +110 +109 +110 +105 +106 +100 +100 +100 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +58 +58 +55 +54 +51 +50 +51 +46 +46 +43 +42 +41 +41 +41 +37 +37 +33 +34 +33 +31 +30 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +18 +15 +15 +15 +15 +14 +13 +13 +12 +13 +13 +14 +14 +13 +14 +14 +13 +14 +14 +14 +14 +13 +14 +14 +13 +13 +14 +14 +13 +13 +14 +13 +14 +13 +14 +14 +13 +15 +15 +15 +17 +17 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +30 +31 +30 +33 +33 +37 +37 +37 +41 +40 +43 +43 +43 +46 +47 +51 +51 +50 +55 +54 +58 +58 +59 +64 +64 +68 +69 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +89 +96 +96 +100 +99 +100 +106 +106 +110 +110 +109 +116 +116 +119 +119 +126 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +148 +151 +151 +151 +157 +157 +161 +160 +161 +165 +165 +169 +169 +173 +172 +173 +175 +174 +179 +178 +178 +182 +183 +184 +184 +185 +188 +188 +191 +190 +191 +194 +194 +196 +196 +196 +198 +198 +200 +200 +200 +200 +200 +202 +202 +205 +205 +205 +204 +204 +205 +205 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +203 +202 +201 +200 +200 +200 +201 +200 +200 +199 +199 +198 +196 +197 +195 +195 +193 +191 +191 +189 +189 +184 +184 +185 +183 +183 +178 +179 +178 +175 +174 +173 +173 +173 +169 +168 +165 +165 +165 +161 +161 +157 +157 +152 +151 +151 +147 +147 +143 +143 +143 +140 +139 +138 +139 +139 +133 +133 +129 +130 +129 +125 +125 +119 +120 +119 +115 +115 +109 +109 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +73 +68 +68 +69 +64 +64 +58 +59 +55 +54 +55 +51 +51 +47 +47 +47 +43 +43 +41 +40 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +28 +25 +25 +21 +21 +19 +19 +19 +17 +16 +15 +15 +15 +15 +15 +15 +15 +15 +14 +13 +12 +13 +13 +14 +14 +13 +13 +14 +14 +14 +13 +13 +14 +14 +14 +13 +14 +14 +14 +13 +13 +13 +13 +14 +14 +14 +13 +13 +14 +14 +14 +13 +15 +15 +15 +17 +17 +19 +20 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +40 +41 +41 +43 +42 +47 +47 +50 +51 +51 +55 +55 +59 +58 +58 +64 +64 +69 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +99 +100 +99 +106 +106 +110 +110 +109 +115 +116 +120 +119 +119 +125 +125 +129 +129 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +152 +151 +151 +157 +157 +161 +161 +161 +165 +165 +164 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +184 +185 +188 +188 +189 +191 +190 +194 +195 +195 +196 +196 +196 +197 +196 +198 +198 +200 +200 +200 +201 +202 +202 +203 +205 +205 +205 +204 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +207 +206 +206 +206 +206 +207 +204 +205 +204 +204 +203 +202 +203 +200 +200 +200 +200 +201 +198 +198 +196 +197 +196 +195 +195 +191 +190 +191 +188 +189 +185 +184 +184 +183 +183 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +152 +151 +151 +147 +147 +143 +143 +144 +139 +139 +133 +133 +129 +129 +130 +125 +125 +119 +120 +120 +115 +116 +110 +109 +110 +106 +106 +99 +100 +100 +96 +96 +90 +90 +91 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +68 +68 +65 +64 +59 +58 +58 +54 +54 +50 +50 +50 +47 +46 +43 +43 +43 +41 +41 +37 +36 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +12 +13 +13 +13 +14 +14 +14 +14 +14 +14 +14 +13 +13 +13 +13 +14 +14 +14 +13 +13 +14 +14 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +36 +37 +40 +41 +41 +43 +43 +47 +47 +47 +51 +50 +54 +54 +54 +59 +59 +64 +64 +65 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +115 +119 +120 +125 +126 +130 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +166 +169 +169 +173 +173 +174 +175 +175 +179 +179 +183 +182 +183 +185 +184 +188 +188 +189 +191 +191 +194 +194 +194 +196 +197 +198 +198 +199 +200 +201 +201 +200 +202 +202 +202 +204 +204 +204 +205 +204 +207 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +204 +204 +204 +204 +204 +202 +202 +200 +200 +200 +201 +200 +199 +198 +199 +197 +196 +194 +194 +194 +190 +191 +188 +188 +184 +185 +185 +183 +183 +179 +179 +179 +175 +174 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +143 +143 +144 +139 +139 +133 +133 +134 +129 +129 +126 +126 +125 +120 +119 +115 +115 +115 +110 +110 +105 +106 +106 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +68 +68 +64 +64 +64 +58 +58 +55 +54 +55 +50 +51 +46 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +32 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +14 +14 +14 +14 +13 +14 +13 +14 +14 +13 +14 +14 +14 +14 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +24 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +46 +50 +50 +51 +55 +55 +59 +59 +65 +64 +64 +69 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +116 +115 +115 +120 +119 +125 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +148 +147 +151 +151 +151 +157 +157 +161 +161 +165 +164 +165 +169 +169 +173 +172 +173 +175 +175 +175 +174 +174 +179 +179 +183 +183 +183 +184 +184 +188 +188 +189 +190 +190 +195 +194 +196 +196 +196 +198 +198 +200 +201 +200 +200 +200 +200 +200 +200 +202 +202 +204 +204 +205 +204 +204 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +200 +200 +201 +200 +201 +198 +198 +196 +196 +197 +194 +194 +190 +191 +190 +188 +189 +185 +184 +184 +183 +183 +179 +179 +179 +175 +174 +173 +173 +173 +169 +169 +165 +164 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +130 +129 +125 +125 +126 +119 +120 +115 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +83 +76 +76 +72 +72 +75 +68 +68 +64 +64 +58 +59 +58 +54 +55 +51 +50 +50 +47 +47 +47 +47 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +31 +30 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +14 +14 +13 +14 +14 +13 +14 +13 +13 +14 +14 +13 +14 +14 +14 +13 +13 +13 +13 +14 +13 +14 +13 +14 +12 +15 +15 +17 +17 +19 +19 +19 +21 +20 +24 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +46 +47 +46 +50 +50 +54 +55 +55 +59 +58 +64 +64 +64 +68 +68 +73 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +109 +110 +116 +115 +116 +119 +119 +125 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +156 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +180 +182 +183 +184 +185 +188 +188 +188 +191 +191 +194 +195 +194 +197 +197 +196 +197 +196 +198 +198 +201 +201 +201 +200 +200 +203 +203 +204 +204 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +204 +204 +205 +204 +205 +202 +202 +200 +200 +200 +200 +200 +198 +199 +198 +196 +196 +195 +195 +194 +191 +191 +189 +188 +189 +185 +184 +183 +182 +182 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +140 +133 +133 +129 +129 +126 +125 +126 +119 +120 +116 +115 +115 +110 +110 +105 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +73 +73 +72 +68 +68 +64 +64 +64 +58 +58 +54 +54 +54 +51 +51 +47 +47 +47 +43 +43 +41 +41 +39 +37 +37 +33 +33 +31 +31 +30 +27 +27 +25 +25 +25 +21 +21 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +14 +13 +13 +14 +14 +14 +13 +13 +13 +14 +14 +13 +13 +14 +13 +14 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +30 +31 +31 +33 +33 +37 +36 +41 +41 +41 +43 +43 +47 +47 +46 +51 +51 +51 +51 +51 +55 +54 +59 +58 +59 +64 +64 +68 +68 +69 +72 +72 +76 +76 +83 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +115 +120 +120 +120 +126 +125 +129 +129 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +178 +179 +178 +183 +183 +185 +184 +184 +189 +188 +189 +189 +188 +190 +190 +195 +194 +195 +197 +197 +198 +198 +200 +201 +201 +201 +200 +202 +202 +202 +204 +204 +204 +204 +204 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +204 +204 +205 +204 +204 +202 +202 +202 +201 +201 +200 +200 +200 +198 +198 +197 +197 +197 +195 +195 +190 +190 +191 +189 +189 +184 +185 +183 +183 +182 +179 +178 +175 +175 +175 +173 +173 +169 +168 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +144 +143 +140 +139 +139 +133 +133 +129 +130 +130 +125 +125 +126 +125 +126 +120 +120 +116 +115 +116 +110 +110 +105 +105 +106 +99 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +76 +76 +76 +72 +72 +68 +68 +68 +64 +65 +59 +59 +59 +55 +54 +51 +50 +46 +47 +47 +43 +43 +41 +41 +41 +37 +37 +37 +37 +37 +33 +33 +30 +31 +31 +27 +27 +25 +25 +22 +21 +21 +19 +19 +17 +17 +17 +15 +16 +15 +15 +15 +13 +13 +12 +12 +14 +14 +14 +14 +14 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +14 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +32 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +46 +50 +50 +51 +55 +55 +59 +58 +65 +64 +65 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +99 +99 +100 +106 +106 +110 +110 +116 +115 +116 +120 +119 +125 +125 +125 +129 +129 +130 +129 +129 +134 +134 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +168 +173 +173 +173 +173 +173 +175 +175 +179 +179 +178 +183 +182 +184 +185 +185 +188 +189 +191 +190 +194 +195 +195 +196 +197 +199 +198 +198 +200 +201 +200 +201 +200 +202 +202 +204 +204 +204 +204 +205 +207 +206 +206 +207 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +201 +201 +200 +200 +200 +198 +199 +197 +196 +197 +195 +195 +190 +190 +190 +189 +188 +185 +184 +185 +183 +182 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +162 +161 +161 +157 +157 +151 +151 +151 +147 +147 +147 +147 +147 +143 +143 +140 +139 +139 +133 +133 +129 +129 +130 +125 +125 +119 +120 +115 +116 +116 +110 +109 +106 +106 +106 +100 +100 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +79 +76 +76 +73 +72 +68 +68 +68 +65 +64 +65 +65 +64 +58 +58 +58 +59 +59 +54 +55 +50 +50 +51 +47 +47 +43 +43 +41 +41 +40 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +13 +13 +13 +14 +14 +14 +13 +14 +13 +13 +14 +13 +13 +14 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +32 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +46 +47 +50 +50 +54 +55 +55 +59 +59 +65 +64 +65 +68 +68 +72 +72 +73 +76 +76 +82 +82 +87 +86 +86 +90 +90 +96 +96 +96 +100 +100 +100 +100 +99 +106 +106 +109 +110 +110 +116 +115 +119 +119 +120 +125 +125 +130 +129 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +168 +169 +170 +173 +173 +175 +174 +175 +178 +178 +183 +183 +182 +185 +185 +188 +188 +189 +191 +190 +195 +195 +195 +196 +196 +198 +199 +200 +200 +201 +200 +201 +202 +202 +202 +204 +205 +205 +204 +204 +207 +207 +206 +206 +206 +206 +207 +207 +206 +207 +206 +207 +207 +206 +204 +204 +205 +204 +204 +202 +202 +202 +201 +200 +200 +200 +200 +198 +199 +197 +196 +196 +194 +194 +190 +190 +191 +188 +189 +185 +185 +183 +182 +182 +179 +178 +175 +175 +175 +173 +173 +169 +169 +169 +164 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +140 +139 +139 +133 +134 +129 +129 +130 +126 +125 +125 +125 +125 +119 +119 +116 +116 +116 +110 +110 +106 +106 +103 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +76 +76 +77 +72 +72 +68 +68 +69 +65 +65 +58 +59 +55 +54 +54 +51 +51 +47 +46 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +20 +21 +19 +19 +19 +16 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +42 +43 +43 +47 +46 +51 +51 +51 +54 +55 +59 +59 +64 +64 +64 +68 +68 +72 +72 +72 +77 +76 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +98 +100 +100 +106 +106 +109 +110 +110 +115 +116 +119 +120 +120 +125 +125 +125 +125 +125 +129 +129 +133 +133 +134 +139 +140 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +172 +175 +175 +179 +179 +179 +182 +183 +185 +185 +188 +188 +188 +191 +191 +194 +195 +194 +196 +196 +199 +198 +199 +200 +200 +201 +200 +200 +203 +202 +204 +204 +204 +204 +205 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +207 +204 +204 +204 +204 +204 +202 +203 +200 +200 +201 +201 +201 +198 +199 +197 +197 +196 +194 +195 +190 +190 +190 +188 +189 +185 +185 +184 +183 +183 +179 +178 +179 +175 +175 +173 +173 +171 +169 +169 +164 +164 +161 +161 +161 +157 +158 +151 +151 +151 +147 +147 +147 +147 +147 +143 +143 +139 +139 +139 +133 +134 +129 +129 +128 +125 +125 +120 +119 +116 +115 +116 +110 +109 +106 +106 +105 +100 +100 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +80 +76 +76 +72 +73 +69 +68 +68 +64 +64 +59 +58 +59 +55 +54 +50 +51 +51 +47 +46 +43 +43 +43 +41 +40 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +14 +14 +14 +13 +14 +14 +13 +14 +13 +14 +14 +13 +14 +13 +14 +13 +14 +13 +13 +13 +14 +14 +14 +14 +13 +16 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +30 +31 +33 +33 +36 +37 +38 +41 +41 +43 +43 +48 +47 +47 +51 +51 +55 +54 +54 +58 +59 +59 +58 +58 +64 +64 +69 +68 +68 +72 +72 +76 +76 +77 +82 +81 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +105 +106 +105 +110 +109 +116 +115 +116 +120 +119 +126 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +168 +172 +173 +174 +175 +175 +179 +179 +182 +183 +183 +185 +184 +189 +188 +188 +190 +190 +195 +195 +194 +197 +196 +199 +199 +198 +201 +200 +201 +200 +203 +202 +203 +204 +204 +204 +205 +204 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +207 +206 +204 +204 +204 +204 +203 +202 +202 +201 +201 +201 +201 +200 +198 +198 +197 +196 +196 +195 +195 +191 +191 +190 +188 +188 +185 +185 +185 +182 +182 +179 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +145 +143 +143 +140 +139 +133 +133 +133 +129 +129 +126 +125 +125 +120 +119 +120 +119 +120 +116 +115 +110 +109 +110 +106 +106 +100 +100 +98 +96 +95 +90 +90 +87 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +58 +59 +55 +55 +51 +50 +47 +47 +46 +43 +42 +41 +41 +41 +37 +36 +33 +33 +33 +30 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +14 +13 +13 +14 +13 +14 +13 +14 +13 +13 +13 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +22 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +41 +41 +41 +43 +43 +47 +46 +47 +50 +51 +54 +55 +56 +59 +59 +65 +65 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +82 +82 +82 +86 +86 +90 +90 +90 +96 +95 +100 +100 +105 +106 +105 +110 +110 +116 +115 +116 +120 +119 +126 +126 +126 +130 +130 +133 +133 +133 +139 +139 +143 +143 +144 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +172 +175 +175 +179 +179 +178 +182 +182 +184 +185 +185 +188 +189 +190 +191 +195 +194 +194 +197 +197 +198 +198 +199 +200 +200 +200 +200 +201 +202 +202 +205 +204 +204 +204 +205 +206 +207 +207 +206 +207 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +204 +205 +204 +204 +202 +203 +200 +200 +201 +200 +201 +199 +198 +199 +196 +196 +195 +195 +191 +191 +191 +189 +188 +184 +185 +185 +183 +183 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +144 +143 +143 +139 +139 +139 +139 +133 +134 +130 +129 +129 +125 +125 +120 +119 +117 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +72 +72 +68 +69 +64 +64 +65 +59 +59 +54 +54 +55 +51 +51 +47 +46 +47 +43 +43 +40 +41 +41 +36 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +14 +14 +13 +15 +14 +14 +14 +14 +13 +13 +14 +13 +13 +13 +14 +14 +13 +14 +13 +13 +15 +15 +16 +17 +17 +19 +19 +22 +21 +21 +25 +25 +27 +27 +27 +31 +31 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +44 +46 +47 +51 +51 +54 +54 +54 +59 +58 +65 +64 +65 +69 +68 +68 +69 +68 +72 +73 +76 +76 +77 +82 +82 +86 +86 +87 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +115 +119 +119 +119 +125 +125 +130 +129 +130 +133 +134 +139 +139 +143 +143 +144 +147 +147 +151 +151 +151 +157 +157 +161 +161 +160 +165 +165 +170 +169 +169 +173 +173 +174 +175 +176 +179 +179 +183 +183 +185 +185 +184 +188 +189 +190 +190 +190 +194 +195 +196 +196 +197 +198 +199 +200 +200 +200 +200 +200 +202 +203 +202 +204 +204 +204 +204 +207 +206 +206 +207 +207 +206 +207 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +205 +204 +204 +204 +205 +202 +202 +200 +200 +200 +200 +201 +199 +199 +196 +197 +197 +194 +194 +195 +194 +194 +190 +190 +188 +189 +189 +184 +184 +183 +183 +183 +179 +179 +175 +175 +172 +173 +173 +169 +169 +165 +165 +165 +161 +161 +162 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +140 +139 +139 +133 +133 +130 +129 +129 +126 +126 +120 +119 +119 +115 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +77 +76 +72 +73 +68 +68 +68 +64 +65 +59 +58 +59 +54 +54 +50 +51 +50 +47 +47 +43 +43 +41 +41 +41 +37 +37 +32 +33 +33 +31 +31 +27 +27 +27 +25 +25 +20 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +13 +13 +13 +14 +14 +14 +13 +13 +13 +14 +14 +13 +14 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +12 +15 +15 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +26 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +43 +43 +43 +47 +46 +50 +50 +51 +55 +55 +59 +59 +62 +65 +64 +68 +69 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +91 +96 +96 +100 +100 +100 +106 +106 +110 +110 +115 +115 +115 +120 +120 +125 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +143 +143 +147 +147 +147 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +168 +173 +173 +175 +175 +174 +179 +179 +182 +182 +182 +185 +185 +189 +188 +189 +190 +190 +195 +195 +197 +196 +197 +199 +199 +200 +200 +200 +200 +200 +203 +202 +202 +205 +204 +204 +204 +204 +207 +206 +206 +207 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +204 +204 +204 +205 +205 +204 +204 +204 +202 +202 +200 +200 +201 +200 +200 +198 +198 +197 +196 +197 +194 +194 +190 +191 +191 +189 +188 +185 +185 +184 +183 +183 +183 +182 +182 +179 +179 +175 +175 +175 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +134 +129 +130 +130 +125 +125 +119 +119 +116 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +65 +64 +64 +59 +58 +54 +55 +55 +50 +50 +47 +46 +47 +43 +42 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +26 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +14 +14 +13 +14 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +15 +15 +16 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +30 +31 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +45 +47 +47 +50 +50 +55 +55 +54 +58 +59 +64 +65 +65 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +95 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +116 +120 +119 +125 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +144 +148 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +164 +168 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +182 +185 +184 +188 +189 +188 +190 +190 +194 +195 +195 +197 +196 +198 +198 +198 +201 +201 +200 +200 +200 +202 +203 +205 +204 +205 +204 +205 +207 +207 +206 +207 +207 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +207 +206 +204 +204 +204 +204 +204 +202 +202 +201 +200 +201 +201 +201 +198 +199 +199 +196 +196 +194 +194 +194 +190 +190 +190 +191 +191 +188 +188 +184 +185 +185 +182 +183 +179 +178 +177 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +144 +139 +139 +133 +133 +130 +130 +130 +125 +125 +120 +120 +119 +115 +115 +109 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +69 +68 +64 +65 +59 +58 +58 +55 +54 +50 +50 +50 +47 +47 +42 +43 +43 +41 +41 +37 +37 +34 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +16 +17 +17 +16 +15 +15 +15 +16 +13 +13 +13 +13 +14 +14 +13 +14 +13 +14 +14 +13 +13 +13 +13 +14 +14 +13 +14 +14 +14 +14 +14 +13 +13 +13 +14 +14 +14 +13 +14 +14 +13 +12 +15 +15 +17 +17 +17 +19 +20 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +51 +55 +54 +55 +58 +58 +65 +64 +65 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +91 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +116 +120 +120 +126 +126 +126 +129 +129 +134 +134 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +173 +173 +172 +175 +175 +178 +179 +179 +183 +182 +185 +185 +184 +188 +189 +190 +191 +190 +194 +195 +196 +196 +196 +198 +198 +200 +200 +201 +200 +200 +202 +202 +205 +204 +204 +205 +204 +207 +206 +206 +206 +206 +207 +206 +207 +206 +207 +206 +207 +207 +206 +206 +204 +205 +205 +204 +204 +202 +202 +200 +201 +200 +200 +200 +200 +200 +201 +199 +198 +197 +197 +196 +195 +194 +191 +191 +189 +188 +189 +184 +185 +182 +183 +182 +178 +179 +174 +175 +175 +172 +172 +169 +169 +169 +165 +164 +161 +161 +161 +157 +157 +151 +151 +148 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +119 +120 +116 +116 +110 +110 +110 +106 +106 +100 +100 +96 +95 +96 +90 +90 +86 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +59 +59 +54 +54 +51 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +26 +27 +27 +25 +25 +22 +21 +22 +19 +19 +18 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +13 +13 +13 +14 +14 +13 +14 +14 +14 +14 +14 +14 +14 +13 +14 +13 +14 +13 +14 +13 +14 +13 +13 +14 +13 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +21 +21 +20 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +46 +46 +47 +50 +50 +54 +54 +58 +58 +58 +64 +64 +69 +68 +68 +72 +73 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +109 +110 +109 +115 +116 +119 +119 +119 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +182 +185 +185 +189 +189 +189 +191 +190 +195 +194 +196 +196 +196 +199 +199 +200 +200 +201 +201 +200 +200 +200 +200 +203 +202 +204 +204 +204 +204 +204 +207 +206 +207 +206 +206 +206 +207 +207 +207 +207 +207 +206 +206 +206 +206 +204 +204 +204 +205 +204 +204 +204 +203 +202 +202 +201 +200 +200 +200 +201 +199 +199 +196 +196 +194 +195 +194 +190 +190 +189 +189 +189 +185 +184 +183 +183 +182 +178 +179 +175 +174 +175 +173 +173 +169 +169 +167 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +119 +115 +116 +116 +110 +110 +105 +106 +106 +100 +100 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +69 +69 +68 +64 +64 +58 +58 +58 +55 +54 +51 +51 +50 +47 +47 +43 +43 +43 +40 +41 +37 +37 +37 +33 +33 +31 +31 +28 +27 +27 +25 +24 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +12 +14 +13 +13 +14 +13 +13 +13 +14 +13 +14 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +14 +14 +13 +13 +13 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +36 +37 +41 +41 +43 +43 +43 +47 +47 +51 +50 +51 +54 +54 +58 +59 +58 +65 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +116 +119 +120 +119 +126 +125 +129 +129 +129 +133 +133 +139 +139 +144 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +164 +165 +169 +169 +169 +173 +173 +175 +175 +175 +178 +179 +183 +182 +184 +184 +185 +189 +188 +190 +191 +191 +195 +194 +195 +194 +194 +197 +196 +198 +199 +199 +200 +200 +201 +200 +201 +202 +202 +204 +204 +204 +204 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +204 +204 +204 +204 +205 +202 +202 +200 +200 +200 +200 +200 +199 +198 +198 +196 +196 +194 +195 +194 +191 +191 +188 +188 +189 +184 +185 +183 +183 +179 +178 +179 +175 +175 +173 +174 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +134 +133 +133 +129 +129 +125 +125 +125 +120 +120 +115 +115 +115 +110 +110 +106 +106 +105 +100 +100 +96 +96 +96 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +68 +68 +68 +68 +69 +64 +64 +59 +58 +58 +54 +54 +51 +51 +51 +47 +47 +43 +43 +40 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +14 +14 +14 +14 +13 +14 +13 +14 +13 +14 +14 +14 +14 +13 +13 +13 +13 +13 +14 +13 +13 +14 +14 +14 +13 +15 +15 +18 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +28 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +50 +50 +55 +54 +59 +59 +58 +64 +64 +69 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +116 +119 +120 +126 +125 +126 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +162 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +182 +184 +185 +185 +188 +189 +190 +191 +191 +194 +195 +197 +197 +196 +198 +198 +200 +200 +200 +201 +200 +202 +202 +204 +204 +204 +204 +204 +204 +204 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +207 +206 +207 +204 +204 +204 +204 +204 +202 +202 +203 +200 +200 +201 +200 +200 +199 +198 +196 +197 +197 +195 +195 +190 +190 +188 +189 +188 +184 +185 +182 +183 +183 +179 +179 +175 +175 +175 +172 +172 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +152 +147 +147 +147 +143 +143 +139 +139 +139 +134 +133 +130 +130 +129 +125 +126 +119 +119 +119 +116 +116 +109 +110 +110 +105 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +58 +59 +54 +55 +50 +50 +46 +47 +47 +43 +43 +41 +41 +41 +37 +37 +37 +37 +37 +33 +33 +30 +31 +31 +27 +27 +25 +25 +24 +22 +21 +20 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +14 +13 +14 +13 +13 +14 +14 +14 +13 +14 +13 +13 +14 +14 +14 +14 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +21 +22 +21 +25 +25 +27 +27 +27 +31 +31 +31 +31 +31 +33 +33 +37 +37 +37 +41 +40 +43 +42 +43 +47 +47 +50 +51 +54 +54 +54 +59 +58 +65 +64 +64 +69 +68 +72 +73 +73 +76 +76 +82 +82 +83 +86 +86 +90 +90 +90 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +115 +120 +120 +126 +126 +126 +129 +130 +133 +133 +133 +140 +140 +143 +143 +144 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +172 +173 +175 +175 +179 +179 +179 +183 +183 +185 +185 +186 +189 +189 +191 +190 +194 +194 +194 +196 +196 +198 +199 +199 +200 +201 +201 +200 +200 +200 +200 +202 +202 +203 +204 +204 +204 +204 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +204 +204 +204 +204 +204 +202 +202 +203 +201 +200 +200 +200 +198 +198 +199 +197 +196 +194 +194 +195 +191 +190 +188 +188 +189 +185 +185 +183 +183 +183 +179 +179 +175 +175 +174 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +148 +147 +147 +144 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +120 +116 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +72 +73 +68 +68 +64 +64 +65 +58 +58 +55 +55 +55 +51 +50 +51 +51 +50 +47 +46 +43 +43 +43 +41 +41 +37 +37 +35 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +14 +14 +14 +14 +14 +14 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +40 +42 +43 +43 +47 +47 +51 +51 +50 +54 +54 +59 +58 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +77 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +116 +120 +120 +119 +125 +125 +130 +129 +130 +133 +133 +139 +140 +143 +144 +143 +147 +148 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +176 +179 +179 +183 +183 +184 +185 +184 +189 +188 +190 +190 +190 +194 +194 +194 +194 +195 +197 +196 +198 +198 +199 +201 +200 +200 +201 +201 +202 +203 +205 +204 +204 +204 +204 +207 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +206 +205 +204 +204 +204 +204 +202 +202 +201 +200 +201 +200 +201 +198 +199 +197 +196 +196 +195 +195 +191 +191 +190 +189 +188 +184 +184 +185 +183 +182 +178 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +144 +143 +139 +140 +134 +134 +130 +129 +129 +125 +125 +120 +120 +120 +115 +116 +110 +110 +109 +105 +106 +100 +100 +100 +96 +96 +90 +90 +91 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +64 +64 +65 +58 +59 +54 +55 +54 +51 +50 +47 +47 +45 +43 +43 +41 +41 +36 +37 +36 +33 +33 +31 +31 +31 +27 +27 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +14 +13 +13 +13 +13 +14 +14 +14 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +51 +54 +54 +55 +59 +58 +64 +64 +64 +69 +68 +72 +73 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +109 +109 +115 +116 +116 +120 +119 +126 +126 +130 +129 +130 +133 +133 +139 +139 +139 +143 +143 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +168 +169 +173 +173 +173 +175 +175 +179 +179 +179 +182 +182 +183 +183 +182 +184 +184 +189 +188 +189 +190 +190 +194 +194 +196 +196 +197 +198 +199 +200 +201 +200 +200 +200 +202 +202 +202 +204 +205 +205 +204 +204 +206 +206 +206 +207 +207 +206 +207 +207 +207 +206 +206 +206 +206 +206 +204 +204 +204 +204 +205 +202 +203 +202 +200 +200 +200 +201 +201 +198 +198 +196 +197 +196 +194 +194 +190 +190 +188 +188 +188 +185 +184 +182 +183 +183 +178 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +148 +147 +147 +143 +143 +139 +139 +139 +133 +134 +133 +134 +133 +129 +129 +126 +125 +125 +120 +120 +116 +116 +116 +110 +110 +106 +105 +99 +100 +99 +96 +96 +90 +90 +90 +86 +86 +86 +86 +85 +82 +82 +76 +77 +76 +72 +72 +68 +68 +67 +64 +64 +58 +58 +54 +54 +54 +50 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +20 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +14 +14 +13 +13 +13 +14 +14 +13 +14 +14 +14 +14 +14 +14 +14 +14 +13 +13 +13 +14 +14 +13 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +22 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +41 +41 +43 +43 +43 +47 +46 +51 +50 +55 +54 +54 +58 +58 +64 +64 +64 +68 +68 +72 +72 +72 +76 +77 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +105 +106 +106 +109 +110 +116 +116 +116 +119 +119 +125 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +145 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +169 +169 +168 +173 +172 +175 +175 +175 +179 +179 +183 +183 +184 +184 +185 +189 +189 +190 +190 +191 +194 +194 +197 +196 +196 +198 +198 +201 +200 +200 +201 +201 +202 +202 +202 +205 +204 +205 +204 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +206 +204 +204 +204 +204 +204 +202 +203 +203 +200 +200 +200 +200 +199 +198 +198 +196 +196 +194 +194 +194 +190 +190 +190 +190 +190 +189 +189 +185 +185 +184 +183 +183 +178 +179 +178 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +140 +141 +133 +133 +130 +129 +126 +126 +125 +120 +119 +115 +115 +116 +110 +110 +110 +109 +109 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +69 +68 +65 +65 +64 +65 +64 +59 +58 +55 +55 +55 +50 +50 +47 +47 +44 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +20 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +13 +14 +14 +14 +13 +14 +13 +14 +14 +13 +13 +13 +14 +13 +14 +14 +14 +14 +14 +14 +13 +14 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +26 +25 +27 +27 +28 +31 +31 +33 +33 +37 +37 +37 +42 +41 +43 +43 +43 +46 +47 +50 +51 +51 +54 +55 +59 +58 +59 +64 +64 +68 +68 +69 +72 +72 +76 +76 +83 +82 +82 +86 +86 +90 +90 +90 +96 +96 +96 +96 +96 +99 +100 +106 +106 +106 +110 +109 +116 +115 +117 +119 +120 +125 +126 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +164 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +178 +183 +183 +185 +184 +184 +188 +189 +190 +190 +191 +194 +194 +196 +197 +198 +198 +199 +200 +201 +200 +201 +200 +203 +202 +204 +204 +204 +205 +205 +206 +206 +206 +206 +206 +206 +206 +207 +207 +207 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +200 +201 +200 +200 +200 +199 +198 +198 +196 +196 +194 +194 +194 +190 +191 +188 +189 +184 +185 +185 +183 +182 +179 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +144 +143 +143 +139 +139 +133 +133 +133 +129 +129 +129 +129 +130 +125 +126 +119 +119 +120 +116 +116 +110 +110 +108 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +82 +82 +82 +76 +76 +72 +72 +73 +68 +68 +64 +64 +60 +58 +58 +55 +55 +51 +51 +51 +46 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +12 +14 +14 +14 +14 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +14 +14 +13 +13 +14 +13 +13 +13 +13 +13 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +51 +55 +55 +58 +58 +64 +64 +64 +68 +68 +72 +73 +73 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +116 +115 +116 +119 +119 +125 +126 +126 +130 +130 +130 +129 +130 +133 +133 +140 +139 +139 +143 +143 +147 +147 +149 +151 +151 +157 +157 +160 +161 +161 +165 +165 +169 +169 +168 +173 +173 +175 +175 +174 +179 +178 +183 +182 +183 +184 +185 +188 +188 +190 +191 +190 +195 +196 +196 +196 +197 +198 +198 +198 +198 +198 +201 +200 +200 +200 +200 +202 +202 +204 +204 +205 +204 +204 +206 +206 +207 +207 +207 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +204 +204 +205 +204 +204 +202 +202 +201 +200 +201 +201 +201 +199 +198 +196 +197 +196 +194 +194 +191 +190 +190 +188 +189 +185 +185 +185 +183 +183 +178 +179 +178 +175 +174 +173 +172 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +147 +147 +147 +143 +143 +139 +140 +139 +133 +133 +130 +130 +130 +126 +125 +119 +120 +116 +116 +115 +110 +110 +106 +106 +106 +100 +100 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +79 +76 +76 +72 +72 +68 +68 +69 +64 +64 +58 +58 +58 +55 +55 +50 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +34 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +14 +13 +14 +14 +13 +14 +14 +14 +13 +13 +14 +14 +13 +13 +13 +14 +14 +14 +14 +13 +14 +13 +13 +13 +13 +16 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +47 +47 +46 +51 +51 +55 +55 +55 +58 +59 +65 +65 +64 +69 +68 +72 +72 +72 +76 +76 +83 +82 +82 +86 +85 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +110 +110 +110 +116 +116 +119 +119 +120 +125 +125 +130 +129 +131 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +174 +174 +178 +179 +179 +183 +183 +185 +185 +184 +189 +188 +190 +191 +191 +195 +194 +197 +196 +196 +199 +198 +200 +200 +201 +201 +201 +203 +202 +204 +204 +204 +205 +205 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +204 +204 +205 +204 +204 +202 +203 +201 +200 +200 +200 +200 +198 +199 +198 +196 +196 +194 +194 +191 +190 +189 +189 +189 +184 +184 +183 +182 +183 +179 +179 +174 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +134 +134 +129 +129 +129 +126 +125 +119 +120 +119 +115 +116 +116 +115 +115 +110 +109 +105 +106 +106 +100 +100 +96 +96 +91 +90 +90 +86 +86 +82 +82 +82 +76 +76 +76 +76 +76 +72 +72 +68 +68 +69 +64 +65 +59 +58 +59 +55 +54 +51 +50 +47 +47 +46 +43 +43 +41 +41 +40 +37 +37 +33 +32 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +13 +14 +13 +13 +14 +14 +14 +13 +14 +13 +14 +14 +14 +13 +13 +14 +14 +13 +14 +13 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +26 +27 +27 +31 +31 +34 +34 +33 +37 +37 +41 +41 +41 +43 +42 +47 +46 +47 +51 +51 +54 +54 +54 +59 +58 +64 +64 +66 +69 +68 +72 +73 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +112 +115 +115 +119 +120 +125 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +152 +157 +157 +161 +161 +164 +165 +165 +169 +169 +173 +173 +173 +174 +175 +175 +175 +175 +179 +179 +183 +183 +182 +185 +185 +189 +189 +188 +191 +190 +194 +194 +196 +196 +196 +199 +198 +200 +200 +200 +200 +201 +203 +202 +202 +204 +205 +205 +205 +204 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +205 +204 +204 +202 +202 +202 +200 +200 +200 +201 +201 +198 +199 +197 +197 +197 +194 +195 +190 +190 +188 +189 +189 +185 +185 +183 +183 +183 +179 +179 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +163 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +139 +139 +139 +134 +133 +129 +129 +130 +125 +125 +120 +119 +116 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +73 +72 +68 +68 +65 +64 +64 +58 +59 +54 +54 +54 +50 +51 +47 +47 +47 +43 +43 +41 +41 +40 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +20 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +13 +14 +14 +14 +13 +13 +14 +14 +14 +14 +14 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +22 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +32 +33 +37 +37 +41 +41 +40 +42 +43 +46 +47 +46 +51 +50 +55 +54 +59 +59 +59 +64 +64 +68 +68 +68 +72 +72 +72 +72 +72 +76 +77 +82 +82 +83 +86 +86 +90 +90 +92 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +115 +119 +119 +126 +125 +125 +129 +130 +133 +133 +134 +139 +140 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +178 +183 +183 +185 +185 +189 +189 +188 +190 +190 +194 +194 +194 +196 +196 +198 +198 +198 +200 +200 +201 +201 +200 +202 +202 +204 +204 +205 +204 +204 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +204 +204 +204 +204 +205 +202 +202 +200 +200 +201 +200 +200 +198 +199 +196 +196 +196 +194 +195 +190 +190 +190 +188 +188 +185 +184 +184 +182 +182 +179 +178 +178 +175 +174 +173 +173 +171 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +147 +147 +147 +143 +143 +139 +139 +140 +133 +133 +129 +129 +126 +126 +126 +119 +120 +115 +116 +116 +110 +110 +106 +105 +106 +100 +101 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +77 +76 +72 +72 +72 +68 +68 +64 +64 +64 +58 +59 +55 +54 +55 +50 +50 +46 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +31 +30 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +16 +15 +13 +13 +13 +12 +13 +14 +13 +14 +14 +14 +13 +13 +14 +13 +14 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +34 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +50 +50 +55 +54 +54 +55 +55 +59 +58 +65 +64 +65 +68 +68 +72 +72 +74 +76 +77 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +116 +120 +120 +125 +125 +127 +130 +130 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +164 +169 +169 +173 +173 +175 +175 +175 +178 +179 +183 +183 +183 +184 +184 +189 +188 +188 +190 +190 +194 +194 +194 +196 +197 +199 +198 +199 +200 +200 +200 +200 +203 +202 +202 +204 +204 +204 +204 +204 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +204 +205 +204 +204 +202 +202 +202 +200 +201 +200 +200 +200 +198 +198 +199 +198 +198 +197 +196 +195 +195 +194 +191 +191 +189 +188 +187 +185 +185 +183 +183 +178 +179 +179 +174 +175 +173 +173 +173 +168 +169 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +149 +147 +147 +143 +143 +139 +139 +139 +133 +133 +130 +129 +129 +125 +125 +120 +120 +120 +116 +116 +109 +110 +110 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +65 +59 +58 +59 +54 +54 +51 +51 +47 +46 +47 +43 +43 +40 +41 +41 +37 +37 +33 +33 +33 +31 +30 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +14 +14 +14 +13 +13 +14 +13 +13 +13 +13 +15 +15 +15 +15 +15 +17 +17 +17 +19 +19 +21 +21 +22 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +36 +37 +41 +41 +40 +40 +41 +42 +43 +47 +47 +47 +51 +51 +54 +55 +58 +58 +58 +65 +65 +68 +68 +68 +72 +73 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +104 +105 +106 +109 +110 +115 +116 +116 +119 +120 +126 +125 +125 +130 +129 +133 +133 +134 +139 +139 +143 +143 +144 +147 +147 +151 +151 +157 +157 +157 +161 +161 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +178 +178 +183 +183 +183 +185 +184 +189 +189 +191 +191 +190 +194 +195 +196 +196 +197 +198 +198 +200 +200 +200 +200 +201 +203 +202 +203 +204 +205 +204 +205 +205 +206 +206 +206 +207 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +205 +204 +205 +204 +205 +202 +202 +200 +200 +200 +201 +201 +198 +199 +196 +196 +196 +194 +195 +190 +191 +190 +189 +188 +189 +188 +188 +185 +184 +183 +183 +183 +179 +179 +175 +175 +174 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +140 +133 +133 +130 +129 +125 +126 +125 +120 +120 +116 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +89 +90 +86 +86 +86 +82 +82 +76 +76 +73 +72 +72 +68 +68 +64 +64 +65 +58 +58 +55 +55 +54 +50 +51 +46 +47 +47 +43 +43 +41 +41 +40 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +16 +13 +13 +12 +13 +14 +13 +14 +13 +13 +13 +13 +14 +14 +14 +14 +13 +13 +13 +13 +14 +13 +13 +14 +14 +14 +13 +14 +13 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +32 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +50 +51 +55 +55 +55 +59 +58 +64 +64 +65 +69 +69 +72 +72 +75 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +116 +115 +119 +119 +125 +125 +130 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +182 +185 +185 +188 +188 +189 +190 +191 +195 +194 +194 +197 +197 +198 +198 +199 +201 +200 +200 +201 +202 +202 +202 +204 +204 +204 +205 +204 +206 +206 +206 +206 +206 +207 +206 +207 +207 +206 +206 +206 +206 +206 +207 +204 +204 +204 +204 +203 +203 +202 +201 +200 +200 +201 +201 +199 +198 +199 +199 +198 +196 +196 +195 +194 +195 +190 +191 +189 +189 +189 +184 +185 +182 +182 +178 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +130 +126 +125 +125 +119 +119 +116 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +58 +58 +54 +54 +55 +51 +50 +47 +46 +43 +43 +43 +41 +40 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +22 +21 +19 +19 +20 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +14 +14 +14 +13 +13 +14 +13 +14 +14 +14 +14 +13 +14 +14 +13 +13 +13 +13 +14 +13 +14 +14 +14 +14 +13 +13 +13 +15 +15 +15 +15 +15 +17 +17 +17 +19 +19 +21 +21 +22 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +42 +43 +47 +47 +51 +51 +51 +54 +54 +58 +58 +64 +64 +65 +68 +68 +72 +72 +72 +77 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +105 +106 +110 +109 +115 +116 +115 +119 +120 +126 +125 +126 +130 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +165 +165 +165 +168 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +185 +185 +185 +189 +189 +191 +190 +191 +194 +195 +196 +197 +198 +198 +198 +201 +200 +200 +200 +200 +202 +202 +204 +204 +204 +205 +205 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +204 +204 +204 +204 +205 +202 +203 +203 +202 +202 +200 +201 +200 +200 +200 +198 +199 +196 +196 +197 +194 +195 +191 +190 +188 +189 +189 +184 +184 +182 +183 +183 +179 +179 +174 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +159 +157 +157 +152 +151 +147 +147 +147 +142 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +119 +119 +116 +116 +110 +110 +106 +106 +106 +99 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +69 +68 +68 +64 +64 +58 +58 +59 +58 +58 +54 +54 +50 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +21 +21 +21 +20 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +13 +13 +13 +14 +13 +14 +14 +14 +14 +14 +14 +13 +13 +14 +14 +14 +14 +13 +13 +14 +13 +13 +13 +14 +14 +13 +13 +12 +15 +15 +16 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +32 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +42 +47 +47 +50 +50 +50 +54 +54 +59 +59 +58 +65 +64 +68 +68 +68 +72 +72 +76 +76 +77 +82 +82 +86 +86 +86 +90 +90 +96 +96 +101 +100 +100 +106 +106 +110 +110 +110 +116 +115 +120 +119 +119 +125 +126 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +152 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +172 +175 +174 +174 +179 +179 +183 +182 +183 +185 +185 +189 +189 +191 +191 +191 +195 +195 +196 +197 +196 +198 +198 +198 +198 +199 +200 +200 +200 +200 +201 +202 +204 +204 +204 +204 +204 +205 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +205 +204 +205 +203 +202 +201 +200 +200 +200 +201 +198 +199 +198 +196 +197 +194 +195 +195 +190 +191 +189 +189 +188 +185 +185 +183 +182 +183 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +130 +126 +125 +125 +120 +119 +115 +116 +115 +109 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +73 +72 +72 +68 +68 +64 +64 +64 +59 +58 +54 +55 +54 +50 +51 +47 +47 +47 +43 +43 +41 +41 +42 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +13 +14 +13 +14 +13 +13 +13 +14 +14 +14 +14 +13 +13 +14 +13 +13 +14 +14 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +36 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +51 +54 +54 +59 +58 +59 +65 +64 +68 +68 +68 +72 +73 +76 +77 +83 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +109 +115 +115 +119 +120 +120 +125 +125 +129 +129 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +178 +178 +179 +182 +183 +184 +184 +184 +188 +189 +188 +188 +189 +191 +190 +194 +195 +194 +196 +196 +198 +198 +199 +200 +200 +201 +200 +202 +202 +202 +204 +204 +204 +204 +205 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +207 +206 +207 +206 +207 +204 +204 +204 +204 +204 +202 +203 +201 +201 +201 +200 +200 +198 +198 +199 +197 +197 +194 +194 +195 +191 +191 +189 +189 +184 +185 +185 +183 +182 +179 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +156 +157 +151 +151 +147 +147 +144 +143 +143 +139 +140 +133 +133 +134 +129 +129 +125 +125 +126 +119 +119 +116 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +69 +64 +64 +64 +58 +58 +54 +55 +55 +51 +51 +47 +47 +43 +43 +42 +41 +41 +37 +37 +37 +33 +34 +33 +33 +32 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +14 +13 +14 +14 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +14 +13 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +22 +25 +25 +25 +26 +27 +31 +32 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +51 +54 +54 +58 +59 +64 +65 +65 +68 +68 +73 +72 +72 +76 +76 +76 +76 +77 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +110 +109 +110 +116 +115 +119 +119 +120 +125 +125 +129 +130 +129 +133 +134 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +162 +161 +161 +165 +165 +169 +169 +169 +173 +172 +173 +173 +173 +175 +176 +179 +179 +179 +182 +182 +184 +185 +185 +189 +189 +190 +190 +194 +195 +195 +196 +197 +198 +199 +198 +200 +201 +201 +201 +200 +200 +200 +202 +203 +203 +204 +204 +204 +204 +205 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +205 +205 +204 +205 +202 +203 +203 +201 +201 +200 +200 +198 +198 +199 +197 +196 +195 +195 +195 +191 +191 +189 +189 +188 +184 +185 +182 +182 +183 +178 +178 +175 +174 +175 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +148 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +120 +116 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +72 +72 +68 +68 +64 +64 +65 +58 +58 +55 +54 +55 +51 +51 +46 +47 +47 +42 +43 +41 +41 +41 +37 +37 +33 +33 +32 +31 +32 +27 +27 +25 +25 +25 +21 +21 +19 +19 +20 +17 +17 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +13 +14 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +13 +14 +13 +12 +15 +15 +17 +17 +20 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +46 +47 +47 +51 +51 +55 +54 +54 +58 +58 +64 +65 +65 +69 +68 +72 +72 +72 +76 +76 +82 +82 +83 +86 +86 +90 +90 +96 +95 +96 +100 +100 +106 +105 +106 +110 +110 +110 +110 +110 +116 +115 +119 +119 +119 +125 +125 +129 +129 +130 +134 +133 +139 +139 +140 +139 +139 +143 +143 +147 +147 +147 +151 +151 +151 +151 +151 +157 +157 +161 +161 +161 +165 +164 +169 +169 +170 +173 +173 +175 +175 +179 +179 +179 +183 +182 +183 +183 +182 +185 +185 +185 +185 +185 +188 +188 +191 +190 +191 +194 +195 +197 +197 +198 +198 +198 +201 +200 +200 +200 +200 +203 +203 +204 +204 +204 +205 +204 +207 +206 +206 +206 +206 +206 +207 +207 +207 +206 +207 +206 +206 +207 +206 +204 +204 +205 +204 +204 +205 +204 +203 +202 +202 +200 +200 +201 +200 +200 +199 +199 +197 +196 +196 +194 +194 +190 +190 +188 +189 +188 +185 +184 +182 +183 +182 +179 +178 +175 +174 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +120 +119 +115 +115 +110 +110 +110 +105 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +83 +82 +82 +82 +76 +77 +72 +72 +72 +69 +68 +64 +64 +61 +58 +59 +55 +55 +50 +50 +51 +47 +47 +43 +43 +43 +41 +41 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +26 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +16 +15 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +14 +13 +14 +13 +13 +14 +14 +13 +13 +14 +13 +14 +13 +14 +14 +13 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +20 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +40 +41 +41 +43 +43 +47 +47 +47 +50 +50 +55 +54 +59 +58 +58 +64 +64 +69 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +110 +110 +109 +115 +115 +120 +119 +120 +126 +125 +130 +129 +130 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +173 +173 +173 +175 +175 +178 +179 +178 +182 +182 +184 +185 +188 +189 +189 +190 +190 +194 +195 +195 +197 +196 +198 +198 +198 +200 +200 +200 +200 +200 +202 +202 +205 +204 +204 +204 +205 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +207 +206 +207 +207 +204 +204 +204 +204 +204 +202 +202 +200 +200 +200 +200 +200 +199 +199 +197 +196 +196 +195 +194 +190 +191 +190 +189 +189 +185 +184 +185 +183 +183 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +134 +132 +133 +129 +130 +126 +126 +126 +119 +119 +116 +116 +110 +109 +110 +106 +105 +100 +100 +100 +96 +96 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +74 +72 +72 +68 +69 +64 +65 +64 +58 +58 +55 +54 +55 +51 +51 +50 +51 +51 +47 +47 +42 +43 +43 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +14 +14 +14 +14 +13 +13 +14 +14 +14 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +47 +47 +47 +50 +50 +55 +54 +55 +58 +59 +58 +59 +59 +64 +64 +68 +68 +68 +73 +72 +77 +76 +77 +82 +83 +86 +86 +91 +90 +90 +96 +96 +100 +100 +100 +106 +106 +106 +106 +105 +110 +110 +115 +116 +116 +119 +120 +125 +125 +127 +130 +130 +133 +133 +139 +139 +139 +143 +144 +147 +147 +147 +151 +151 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +170 +173 +173 +175 +174 +178 +179 +179 +182 +183 +183 +183 +183 +185 +185 +189 +188 +189 +191 +191 +195 +195 +195 +197 +197 +199 +199 +200 +201 +200 +200 +201 +202 +202 +202 +204 +204 +204 +204 +205 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +205 +205 +205 +204 +204 +202 +202 +202 +200 +200 +201 +200 +200 +198 +198 +196 +196 +196 +194 +194 +191 +190 +190 +188 +189 +184 +185 +183 +182 +182 +178 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +152 +147 +147 +143 +143 +140 +139 +139 +133 +133 +130 +129 +130 +125 +125 +125 +125 +126 +120 +119 +116 +116 +115 +110 +110 +106 +106 +103 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +81 +76 +76 +76 +76 +76 +72 +72 +68 +68 +68 +65 +64 +59 +58 +55 +55 +54 +51 +50 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +19 +19 +20 +17 +17 +15 +15 +15 +15 +15 +14 +13 +13 +12 +13 +14 +13 +14 +14 +13 +13 +14 +13 +14 +13 +13 +14 +14 +14 +14 +13 +13 +13 +13 +14 +14 +14 +14 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +28 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +46 +47 +47 +51 +50 +55 +55 +55 +58 +58 +64 +64 +69 +68 +68 +73 +72 +76 +76 +76 +82 +82 +82 +82 +83 +86 +86 +90 +90 +90 +96 +96 +100 +100 +101 +106 +106 +110 +110 +115 +116 +120 +120 +119 +125 +125 +125 +129 +130 +130 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +148 +151 +151 +157 +157 +161 +161 +161 +165 +165 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +182 +183 +184 +185 +188 +189 +189 +190 +190 +194 +194 +194 +197 +196 +199 +199 +198 +200 +200 +201 +201 +200 +202 +203 +204 +205 +205 +205 +205 +207 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +204 +204 +204 +205 +204 +202 +203 +200 +200 +201 +201 +200 +199 +198 +197 +197 +197 +195 +194 +190 +191 +191 +188 +188 +185 +185 +184 +183 +183 +179 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +130 +130 +127 +125 +125 +119 +120 +116 +115 +115 +110 +110 +106 +106 +106 +100 +100 +100 +100 +100 +96 +96 +90 +90 +90 +86 +85 +82 +82 +79 +76 +77 +72 +72 +68 +69 +68 +64 +64 +59 +58 +59 +54 +54 +51 +50 +50 +47 +46 +43 +42 +42 +41 +41 +37 +37 +33 +33 +33 +31 +30 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +13 +13 +13 +13 +14 +13 +14 +14 +13 +14 +13 +14 +13 +13 +14 +14 +13 +14 +13 +14 +13 +13 +13 +12 +16 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +38 +41 +41 +43 +43 +46 +47 +47 +51 +51 +55 +55 +55 +58 +59 +59 +58 +59 +65 +65 +68 +68 +68 +72 +72 +76 +76 +79 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +106 +106 +106 +110 +110 +115 +115 +116 +120 +120 +125 +125 +127 +130 +129 +133 +133 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +178 +183 +182 +185 +185 +185 +189 +191 +191 +190 +190 +194 +194 +194 +195 +194 +197 +197 +199 +199 +200 +201 +201 +200 +200 +202 +202 +202 +204 +204 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +205 +204 +204 +205 +204 +202 +202 +202 +201 +200 +201 +201 +200 +198 +198 +196 +196 +197 +194 +195 +190 +190 +191 +189 +189 +185 +185 +183 +182 +182 +179 +179 +175 +175 +175 +173 +173 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +148 +144 +143 +143 +139 +139 +133 +133 +133 +129 +129 +129 +129 +130 +126 +126 +119 +120 +120 +115 +115 +109 +110 +107 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +73 +68 +68 +69 +64 +64 +58 +58 +54 +54 +55 +51 +51 +46 +47 +47 +43 +43 +41 +41 +40 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +19 +20 +19 +17 +17 +15 +15 +15 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +14 +13 +14 +14 +14 +14 +13 +14 +14 +13 +13 +14 +13 +13 +14 +13 +13 +13 +14 +13 +13 +14 +13 +13 +12 +15 +15 +17 +16 +17 +19 +19 +21 +21 +26 +25 +24 +27 +27 +31 +31 +31 +33 +33 +33 +33 +33 +36 +37 +40 +41 +41 +43 +43 +47 +47 +47 +51 +51 +54 +54 +58 +59 +58 +64 +64 +68 +68 +68 +72 +72 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +95 +96 +97 +100 +100 +106 +106 +106 +109 +110 +115 +115 +116 +119 +119 +125 +125 +126 +129 +129 +133 +133 +133 +140 +139 +143 +143 +147 +147 +147 +151 +151 +157 +158 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +178 +182 +183 +184 +184 +189 +188 +189 +190 +190 +194 +195 +194 +196 +197 +198 +198 +199 +200 +200 +200 +200 +200 +202 +202 +204 +204 +205 +204 +204 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +205 +205 +204 +204 +204 +203 +202 +200 +201 +201 +200 +200 +199 +199 +197 +196 +196 +194 +195 +190 +191 +190 +189 +189 +189 +189 +188 +185 +184 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +164 +165 +165 +161 +161 +157 +158 +157 +151 +151 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +132 +130 +129 +125 +126 +119 +120 +119 +115 +115 +109 +109 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +68 +68 +65 +64 +58 +58 +59 +54 +55 +51 +50 +50 +46 +46 +42 +43 +42 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +14 +13 +13 +13 +14 +13 +14 +13 +13 +14 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +20 +19 +19 +21 +21 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +36 +40 +41 +43 +43 +43 +47 +47 +50 +51 +51 +54 +54 +54 +54 +55 +58 +58 +64 +64 +64 +69 +68 +72 +72 +74 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +109 +116 +116 +116 +119 +120 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +174 +175 +175 +179 +178 +183 +183 +182 +185 +185 +189 +189 +189 +190 +190 +194 +195 +194 +196 +197 +198 +198 +199 +200 +200 +200 +200 +202 +202 +203 +204 +204 +204 +204 +205 +206 +206 +206 +207 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +207 +204 +204 +204 +204 +202 +202 +202 +200 +200 +200 +200 +200 +198 +199 +196 +197 +196 +194 +194 +191 +190 +191 +189 +189 +185 +185 +183 +182 +183 +178 +178 +174 +175 +175 +173 +173 +169 +169 +169 +165 +165 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +144 +143 +143 +139 +139 +133 +133 +130 +129 +129 +129 +130 +126 +125 +119 +119 +119 +115 +115 +110 +110 +110 +106 +106 +100 +99 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +59 +59 +55 +54 +50 +50 +47 +46 +46 +43 +43 +41 +41 +41 +36 +37 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +13 +14 +14 +14 +14 +14 +14 +13 +14 +13 +13 +14 +13 +13 +14 +13 +14 +14 +14 +13 +13 +13 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +37 +37 +38 +41 +41 +43 +43 +43 +47 +46 +51 +51 +54 +55 +54 +58 +59 +64 +64 +64 +68 +69 +72 +73 +72 +76 +77 +82 +82 +82 +86 +86 +90 +90 +90 +96 +95 +100 +100 +105 +106 +106 +109 +110 +116 +115 +115 +120 +119 +126 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +144 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +164 +165 +169 +169 +173 +173 +173 +174 +174 +179 +179 +178 +182 +183 +185 +184 +185 +188 +189 +191 +191 +195 +194 +194 +196 +197 +198 +198 +198 +200 +200 +200 +200 +200 +202 +203 +204 +204 +205 +204 +205 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +204 +204 +204 +204 +204 +204 +204 +202 +203 +202 +200 +200 +200 +201 +199 +198 +199 +196 +197 +194 +195 +194 +190 +191 +189 +188 +188 +184 +184 +184 +185 +184 +183 +182 +179 +179 +179 +175 +175 +173 +173 +171 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +134 +134 +130 +130 +125 +125 +120 +120 +119 +116 +116 +109 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +69 +68 +68 +64 +64 +58 +58 +59 +55 +55 +51 +50 +51 +47 +47 +42 +43 +42 +41 +41 +37 +37 +37 +33 +33 +31 +31 +28 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +13 +14 +14 +14 +13 +14 +14 +13 +14 +14 +13 +13 +13 +14 +14 +14 +13 +14 +14 +13 +14 +13 +13 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +36 +37 +36 +40 +40 +43 +42 +47 +46 +47 +51 +50 +54 +55 +54 +58 +58 +64 +64 +64 +68 +68 +72 +72 +73 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +109 +109 +116 +116 +116 +120 +119 +125 +125 +126 +130 +129 +133 +133 +140 +140 +139 +143 +143 +147 +147 +147 +151 +151 +157 +156 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +183 +183 +183 +185 +185 +188 +188 +189 +191 +191 +194 +194 +195 +197 +197 +198 +198 +199 +200 +201 +200 +200 +201 +202 +202 +205 +204 +205 +204 +205 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +204 +204 +204 +204 +205 +202 +202 +200 +200 +200 +201 +200 +199 +198 +198 +196 +197 +197 +197 +196 +195 +195 +190 +190 +191 +188 +189 +184 +185 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +140 +139 +139 +133 +133 +129 +129 +130 +125 +126 +119 +119 +119 +116 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +72 +72 +72 +68 +68 +64 +64 +65 +59 +58 +54 +55 +55 +51 +51 +46 +46 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +20 +17 +17 +15 +15 +16 +15 +15 +13 +13 +12 +13 +14 +13 +13 +13 +14 +13 +14 +13 +13 +13 +14 +14 +13 +14 +14 +14 +14 +13 +14 +14 +13 +14 +14 +13 +13 +13 +13 +13 +13 +13 +15 +15 +16 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +32 +36 +37 +37 +41 +41 +43 +42 +43 +47 +46 +51 +51 +51 +54 +54 +59 +59 +64 +65 +65 +68 +68 +73 +73 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +110 +116 +116 +115 +119 +119 +125 +126 +126 +130 +129 +133 +134 +133 +139 +140 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +164 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +185 +185 +184 +189 +189 +190 +191 +191 +195 +194 +197 +197 +197 +199 +199 +200 +201 +201 +200 +200 +200 +201 +201 +200 +200 +203 +202 +204 +204 +204 +204 +204 +206 +207 +207 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +205 +204 +204 +204 +204 +205 +202 +202 +203 +200 +200 +200 +200 +199 +198 +199 +197 +197 +194 +194 +194 +190 +191 +189 +188 +189 +184 +185 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +140 +139 +134 +133 +129 +129 +129 +125 +125 +119 +120 +116 +116 +115 +109 +109 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +73 +72 +68 +68 +65 +64 +65 +59 +58 +55 +55 +55 +50 +50 +47 +47 +47 +43 +43 +40 +41 +41 +37 +37 +33 +33 +34 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +13 +14 +14 +13 +13 +14 +14 +13 +14 +14 +14 +13 +13 +13 +14 +13 +13 +13 +14 +14 +14 +13 +13 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +26 +27 +27 +31 +31 +34 +33 +33 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +51 +51 +54 +54 +58 +59 +58 +64 +64 +68 +68 +69 +72 +73 +76 +76 +76 +82 +82 +86 +86 +91 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +116 +120 +120 +119 +125 +125 +129 +129 +129 +133 +134 +139 +139 +144 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +160 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +185 +184 +184 +189 +188 +190 +191 +191 +194 +194 +195 +195 +194 +197 +196 +199 +198 +198 +200 +200 +200 +200 +201 +202 +202 +204 +204 +204 +204 +204 +206 +207 +206 +207 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +204 +205 +204 +205 +202 +202 +200 +201 +201 +200 +200 +199 +199 +199 +197 +196 +195 +194 +194 +190 +190 +188 +188 +189 +184 +184 +182 +183 +178 +179 +179 +174 +175 +173 +173 +173 +168 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +133 +134 +133 +129 +129 +125 +125 +126 +120 +119 +116 +116 +116 +110 +109 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +83 +82 +82 +76 +77 +72 +72 +72 +68 +68 +65 +65 +64 +59 +59 +54 +54 +55 +50 +51 +47 +47 +47 +43 +43 +41 +40 +37 +37 +36 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +14 +13 +12 +12 +13 +14 +14 +14 +14 +13 +13 +13 +14 +13 +14 +13 +13 +14 +14 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +46 +47 +51 +51 +54 +54 +55 +58 +59 +64 +64 +64 +68 +68 +72 +72 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +99 +106 +106 +105 +110 +110 +115 +116 +116 +120 +119 +125 +125 +130 +130 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +166 +169 +169 +173 +173 +174 +175 +175 +179 +179 +183 +182 +183 +185 +184 +185 +185 +185 +189 +188 +191 +191 +190 +194 +194 +196 +196 +197 +199 +199 +200 +200 +200 +201 +200 +202 +203 +205 +204 +204 +205 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +207 +207 +204 +204 +204 +205 +204 +202 +202 +202 +201 +201 +201 +200 +201 +198 +199 +197 +197 +197 +194 +194 +191 +190 +189 +189 +189 +185 +184 +183 +183 +182 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +130 +129 +130 +125 +125 +120 +120 +120 +116 +115 +110 +109 +110 +106 +106 +100 +100 +96 +96 +95 +90 +91 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +69 +64 +64 +58 +58 +59 +54 +55 +51 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +22 +21 +20 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +13 +12 +13 +13 +14 +14 +13 +14 +14 +14 +14 +14 +14 +13 +13 +14 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +50 +51 +54 +54 +59 +59 +65 +64 +64 +68 +68 +72 +72 +72 +76 +77 +82 +83 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +116 +116 +116 +119 +120 +125 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +152 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +179 +183 +183 +185 +185 +184 +189 +188 +190 +190 +192 +194 +195 +196 +196 +198 +199 +198 +200 +200 +200 +201 +201 +202 +202 +202 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +207 +206 +206 +204 +204 +204 +204 +205 +202 +202 +203 +201 +200 +200 +200 +201 +199 +199 +196 +197 +194 +194 +195 +190 +190 +188 +189 +188 +184 +184 +182 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +134 +129 +129 +129 +125 +125 +120 +119 +119 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +69 +68 +64 +64 +58 +58 +55 +54 +55 +50 +51 +46 +47 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +15 +16 +15 +13 +13 +12 +13 +14 +13 +13 +13 +13 +14 +13 +13 +14 +13 +14 +14 +13 +14 +14 +13 +13 +13 +14 +13 +14 +13 +13 +13 +13 +13 +13 +13 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +36 +37 +41 +41 +43 +43 +43 +47 +47 +51 +50 +54 +54 +54 +58 +58 +65 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +95 +100 +100 +106 +106 +106 +109 +110 +116 +115 +116 +119 +120 +125 +125 +126 +130 +129 +133 +133 +133 +139 +139 +143 +143 +144 +147 +147 +151 +151 +156 +157 +157 +161 +160 +165 +165 +165 +169 +169 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +183 +185 +185 +188 +189 +190 +190 +190 +194 +194 +196 +197 +196 +198 +198 +199 +198 +198 +200 +200 +200 +200 +200 +202 +202 +204 +204 +205 +204 +204 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +204 +204 +204 +204 +205 +203 +203 +200 +200 +201 +201 +201 +198 +198 +197 +196 +196 +194 +195 +190 +191 +190 +189 +189 +184 +185 +185 +182 +182 +179 +178 +179 +174 +175 +172 +173 +170 +169 +169 +166 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +120 +119 +119 +116 +116 +110 +110 +109 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +77 +72 +72 +69 +69 +68 +64 +64 +58 +58 +59 +54 +54 +54 +54 +55 +51 +51 +46 +46 +47 +43 +43 +40 +41 +41 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +21 +21 +22 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +14 +13 +13 +13 +14 +14 +13 +14 +13 +14 +13 +14 +14 +13 +13 +14 +14 +13 +14 +13 +14 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +41 +41 +41 +42 +43 +47 +47 +46 +50 +51 +55 +54 +55 +58 +58 +64 +65 +64 +68 +69 +72 +72 +72 +76 +77 +82 +82 +87 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +109 +109 +116 +115 +116 +120 +120 +125 +125 +126 +129 +129 +134 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +170 +173 +173 +175 +175 +178 +179 +178 +183 +183 +185 +184 +184 +189 +189 +189 +189 +189 +190 +191 +194 +195 +195 +197 +197 +198 +199 +199 +200 +201 +200 +200 +202 +202 +202 +204 +204 +204 +205 +204 +206 +206 +206 +207 +207 +206 +207 +206 +207 +207 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +202 +200 +200 +200 +201 +200 +198 +198 +197 +196 +196 +195 +194 +190 +191 +190 +189 +189 +185 +185 +182 +183 +182 +179 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +152 +147 +147 +143 +143 +140 +139 +139 +133 +134 +129 +130 +130 +126 +125 +119 +119 +119 +116 +115 +110 +110 +110 +105 +106 +100 +100 +100 +96 +96 +90 +90 +86 +86 +86 +82 +83 +76 +76 +76 +72 +72 +72 +73 +72 +68 +68 +64 +64 +65 +58 +58 +54 +55 +52 +51 +50 +46 +46 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +33 +33 +33 +31 +31 +27 +27 +27 +26 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +14 +13 +14 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +14 +14 +13 +14 +13 +13 +13 +14 +13 +15 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +42 +43 +47 +47 +47 +51 +51 +54 +54 +55 +59 +59 +64 +65 +69 +68 +69 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +105 +106 +106 +110 +110 +115 +115 +120 +120 +120 +125 +125 +130 +129 +129 +134 +133 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +152 +152 +157 +157 +161 +161 +164 +165 +165 +169 +169 +173 +173 +173 +175 +175 +175 +175 +175 +179 +179 +182 +183 +183 +185 +184 +188 +188 +189 +190 +190 +195 +195 +196 +196 +196 +198 +199 +200 +200 +200 +200 +200 +203 +203 +202 +204 +204 +204 +204 +205 +206 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +205 +204 +204 +204 +205 +202 +202 +202 +200 +200 +200 +200 +200 +197 +199 +196 +197 +195 +194 +195 +190 +191 +189 +188 +188 +184 +185 +183 +183 +183 +179 +179 +175 +175 +174 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +144 +140 +139 +139 +133 +133 +129 +129 +129 +126 +125 +119 +119 +120 +116 +116 +110 +109 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +90 +90 +90 +86 +86 +82 +82 +82 +77 +77 +72 +72 +75 +68 +68 +64 +64 +58 +58 +59 +54 +55 +50 +50 +51 +47 +47 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +32 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +14 +14 +13 +14 +14 +13 +13 +14 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +32 +36 +37 +41 +41 +41 +43 +43 +47 +46 +52 +51 +50 +54 +55 +58 +59 +59 +64 +64 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +96 +96 +96 +100 +99 +106 +106 +106 +110 +110 +110 +109 +110 +116 +116 +120 +119 +120 +125 +125 +129 +130 +130 +133 +133 +140 +140 +144 +143 +143 +147 +147 +151 +151 +151 +157 +157 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +174 +175 +175 +178 +179 +182 +182 +183 +185 +184 +185 +184 +185 +189 +189 +191 +190 +190 +195 +194 +196 +196 +196 +196 +196 +198 +199 +200 +200 +200 +200 +200 +202 +202 +203 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +204 +204 +204 +204 +205 +202 +202 +202 +200 +200 +201 +201 +201 +198 +198 +196 +196 +196 +194 +194 +190 +191 +191 +188 +189 +184 +185 +183 +183 +183 +179 +179 +174 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +139 +140 +140 +133 +133 +129 +129 +129 +126 +125 +125 +125 +125 +119 +119 +115 +116 +115 +110 +110 +106 +105 +106 +100 +100 +96 +96 +91 +90 +90 +86 +86 +82 +83 +82 +76 +76 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +58 +56 +54 +54 +50 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +28 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +14 +13 +14 +14 +14 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +28 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +46 +47 +47 +51 +50 +55 +55 +55 +58 +58 +65 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +102 +106 +106 +110 +109 +115 +116 +116 +120 +119 +125 +125 +126 +129 +130 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +149 +151 +151 +157 +157 +161 +161 +160 +165 +165 +169 +168 +169 +173 +173 +175 +175 +175 +178 +179 +182 +183 +183 +184 +185 +188 +189 +190 +190 +191 +195 +194 +196 +196 +196 +198 +198 +200 +200 +200 +201 +200 +202 +203 +202 +204 +204 +205 +204 +205 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +205 +204 +204 +205 +202 +202 +202 +201 +201 +200 +200 +200 +198 +199 +196 +196 +195 +194 +194 +190 +190 +188 +188 +189 +185 +184 +184 +185 +185 +182 +182 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +147 +147 +147 +143 +143 +139 +139 +139 +133 +134 +129 +130 +127 +125 +125 +119 +119 +115 +116 +115 +110 +110 +106 +106 +106 +99 +100 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +59 +59 +54 +55 +50 +51 +51 +47 +47 +43 +43 +43 +41 +40 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +13 +14 +14 +14 +14 +14 +14 +13 +13 +13 +14 +14 +13 +14 +14 +13 +14 +14 +13 +14 +14 +13 +14 +13 +15 +15 +15 +17 +17 +19 +20 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +32 +37 +37 +37 +41 +41 +43 +43 +48 +47 +46 +51 +51 +54 +54 +55 +58 +58 +64 +64 +64 +68 +68 +72 +72 +72 +75 +76 +82 +82 +83 +85 +86 +90 +90 +96 +96 +95 +100 +100 +105 +106 +106 +110 +110 +110 +110 +110 +116 +116 +120 +119 +119 +119 +119 +126 +125 +127 +129 +129 +133 +134 +139 +140 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +175 +175 +175 +179 +179 +182 +183 +183 +184 +185 +188 +189 +188 +191 +190 +195 +195 +194 +196 +196 +199 +198 +199 +200 +200 +200 +200 +203 +202 +202 +204 +204 +204 +205 +204 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +204 +205 +205 +204 +202 +202 +202 +200 +201 +200 +200 +201 +198 +198 +199 +199 +199 +196 +197 +195 +194 +194 +191 +191 +188 +188 +188 +184 +185 +183 +183 +179 +179 +179 +175 +175 +174 +173 +173 +169 +169 +168 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +149 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +126 +126 +125 +119 +120 +116 +116 +116 +110 +110 +106 +105 +101 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +69 +68 +65 +65 +65 +58 +58 +54 +55 +51 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +14 +13 +13 +14 +14 +13 +13 +14 +13 +13 +14 +13 +14 +13 +13 +14 +13 +14 +14 +13 +13 +13 +13 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +46 +47 +47 +50 +50 +55 +55 +58 +58 +59 +65 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +82 +82 +82 +86 +86 +89 +90 +90 +96 +96 +99 +100 +105 +106 +106 +110 +109 +115 +116 +116 +119 +119 +125 +125 +125 +129 +130 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +156 +157 +157 +161 +161 +165 +165 +165 +169 +169 +169 +169 +169 +173 +174 +175 +175 +175 +178 +178 +183 +183 +183 +184 +185 +189 +189 +191 +190 +190 +194 +194 +196 +196 +196 +198 +199 +201 +201 +201 +201 +201 +202 +202 +202 +204 +205 +204 +204 +205 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +207 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +202 +201 +201 +200 +201 +200 +199 +199 +196 +197 +194 +194 +194 +191 +190 +189 +189 +189 +184 +184 +185 +184 +184 +183 +182 +178 +179 +178 +175 +175 +173 +173 +171 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +147 +147 +147 +143 +143 +139 +139 +140 +133 +134 +129 +129 +126 +125 +125 +120 +120 +115 +116 +116 +110 +109 +106 +105 +105 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +83 +82 +76 +76 +72 +73 +72 +68 +69 +64 +64 +65 +58 +58 +54 +54 +54 +50 +50 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +14 +12 +13 +14 +13 +14 +13 +14 +13 +13 +13 +13 +14 +14 +14 +13 +14 +14 +13 +13 +14 +13 +14 +14 +13 +13 +14 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +32 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +50 +51 +51 +55 +55 +58 +58 +58 +64 +64 +65 +64 +64 +69 +68 +72 +72 +72 +76 +76 +82 +82 +85 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +116 +115 +120 +120 +125 +125 +126 +130 +129 +133 +134 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +172 +173 +175 +175 +179 +179 +182 +183 +183 +185 +185 +189 +189 +189 +191 +191 +195 +195 +194 +196 +196 +199 +198 +198 +200 +200 +200 +200 +201 +202 +202 +204 +204 +205 +205 +205 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +204 +204 +204 +205 +205 +202 +203 +201 +201 +200 +200 +200 +199 +197 +197 +196 +196 +194 +194 +190 +190 +190 +188 +189 +185 +184 +185 +182 +183 +178 +178 +179 +175 +175 +173 +173 +168 +169 +168 +165 +165 +161 +161 +161 +157 +157 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +140 +134 +133 +133 +130 +130 +125 +126 +126 +119 +119 +115 +116 +115 +109 +110 +106 +106 +105 +100 +100 +96 +96 +96 +90 +90 +86 +86 +82 +82 +82 +77 +76 +72 +72 +72 +69 +68 +68 +68 +68 +64 +64 +58 +58 +58 +55 +54 +51 +51 +51 +46 +46 +43 +42 +41 +41 +41 +36 +37 +33 +33 +33 +31 +31 +26 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +16 +17 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +14 +14 +13 +13 +14 +14 +14 +13 +13 +13 +13 +13 +14 +13 +14 +14 +14 +14 +13 +14 +13 +14 +14 +13 +15 +15 +15 +17 +17 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +28 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +47 +47 +47 +51 +50 +54 +54 +54 +59 +58 +64 +64 +66 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +119 +119 +119 +125 +126 +129 +129 +129 +133 +134 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +164 +170 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +182 +185 +184 +189 +189 +188 +190 +191 +194 +194 +194 +197 +196 +199 +199 +201 +200 +200 +200 +201 +202 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +207 +207 +206 +206 +207 +206 +206 +206 +206 +204 +204 +204 +205 +204 +202 +203 +202 +200 +200 +200 +200 +200 +200 +201 +199 +198 +199 +197 +197 +195 +195 +193 +191 +190 +188 +188 +184 +185 +185 +183 +182 +179 +178 +178 +175 +175 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +158 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +125 +126 +119 +119 +120 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +69 +65 +65 +58 +58 +55 +55 +55 +51 +50 +51 +51 +50 +47 +47 +43 +42 +43 +41 +41 +36 +37 +37 +33 +33 +31 +30 +31 +27 +27 +25 +25 +22 +20 +21 +19 +18 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +13 +14 +14 +14 +13 +14 +13 +14 +14 +13 +13 +13 +14 +13 +13 +14 +14 +13 +13 +14 +13 +13 +14 +13 +12 +15 +15 +17 +17 +18 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +33 +33 +33 +37 +37 +41 +41 +41 +42 +43 +47 +47 +46 +51 +50 +55 +55 +58 +59 +59 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +99 +99 +100 +106 +106 +110 +110 +110 +115 +116 +119 +119 +119 +125 +126 +129 +129 +129 +133 +134 +139 +139 +140 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +182 +183 +183 +184 +184 +189 +189 +191 +190 +190 +195 +194 +197 +196 +197 +199 +199 +200 +200 +201 +200 +201 +203 +202 +202 +204 +204 +204 +204 +205 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +204 +204 +204 +204 +205 +202 +202 +200 +201 +200 +200 +201 +199 +198 +196 +196 +196 +195 +194 +191 +191 +190 +188 +189 +189 +188 +188 +185 +185 +183 +183 +183 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +140 +134 +133 +129 +129 +125 +126 +125 +119 +120 +115 +116 +116 +110 +110 +106 +106 +106 +101 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +77 +76 +73 +72 +72 +68 +68 +65 +64 +64 +58 +58 +55 +54 +55 +50 +51 +47 +46 +47 +43 +43 +41 +41 +41 +37 +37 +33 +32 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +16 +13 +13 +12 +13 +14 +14 +13 +14 +14 +13 +13 +13 +13 +14 +13 +13 +14 +14 +14 +13 +14 +14 +13 +14 +14 +14 +14 +14 +14 +13 +13 +14 +13 +13 +16 +15 +17 +17 +17 +19 +19 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +32 +33 +33 +37 +36 +41 +41 +41 +42 +43 +47 +46 +47 +50 +50 +54 +55 +55 +58 +58 +64 +64 +64 +68 +68 +73 +72 +73 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +115 +115 +119 +120 +126 +126 +130 +129 +129 +133 +133 +139 +140 +139 +143 +143 +147 +146 +147 +151 +151 +157 +156 +157 +161 +161 +165 +164 +165 +169 +169 +173 +173 +175 +174 +175 +178 +179 +183 +182 +183 +185 +185 +189 +189 +189 +191 +190 +194 +194 +195 +196 +197 +198 +198 +199 +200 +200 +200 +200 +202 +202 +203 +204 +204 +204 +204 +204 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +207 +207 +206 +206 +204 +204 +204 +204 +204 +202 +202 +200 +200 +201 +201 +200 +200 +200 +200 +198 +199 +196 +197 +196 +194 +195 +190 +191 +189 +188 +189 +185 +184 +183 +182 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +160 +161 +161 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +120 +119 +115 +116 +109 +109 +109 +106 +106 +100 +100 +95 +96 +96 +90 +90 +86 +86 +86 +83 +82 +76 +76 +76 +73 +72 +68 +68 +68 +64 +64 +59 +59 +59 +54 +54 +51 +51 +47 +47 +46 +43 +43 +41 +41 +40 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +14 +14 +14 +13 +14 +13 +13 +14 +13 +14 +14 +14 +13 +14 +14 +14 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +32 +37 +37 +41 +41 +41 +43 +43 +47 +46 +47 +50 +50 +54 +55 +58 +59 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +81 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +110 +110 +110 +116 +116 +120 +120 +119 +125 +126 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +174 +178 +179 +183 +182 +183 +184 +185 +188 +188 +188 +191 +190 +194 +195 +196 +196 +197 +198 +199 +200 +201 +200 +201 +201 +200 +200 +200 +203 +202 +204 +205 +205 +204 +204 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +207 +204 +204 +204 +204 +204 +204 +204 +203 +202 +203 +200 +200 +200 +200 +198 +198 +199 +196 +197 +194 +194 +195 +190 +190 +188 +188 +188 +185 +185 +183 +182 +182 +178 +179 +175 +174 +175 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +134 +133 +129 +130 +129 +125 +125 +120 +119 +116 +116 +116 +110 +110 +106 +106 +106 +99 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +72 +72 +68 +68 +65 +64 +64 +58 +58 +54 +55 +55 +51 +51 +46 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +18 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +13 +14 +14 +13 +14 +14 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +14 +13 +14 +14 +14 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +26 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +40 +43 +43 +43 +47 +47 +50 +50 +51 +54 +54 +59 +58 +59 +64 +65 +68 +68 +69 +72 +72 +76 +77 +77 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +109 +110 +116 +116 +119 +120 +119 +125 +125 +130 +129 +129 +134 +133 +140 +139 +144 +143 +143 +147 +147 +151 +151 +151 +157 +157 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +183 +183 +183 +185 +185 +189 +189 +189 +191 +191 +190 +190 +191 +194 +195 +196 +197 +196 +199 +198 +200 +200 +201 +200 +200 +202 +202 +205 +205 +204 +205 +204 +206 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +205 +204 +205 +205 +204 +202 +202 +202 +201 +200 +200 +200 +200 +198 +198 +197 +196 +197 +194 +195 +191 +191 +191 +189 +188 +184 +184 +182 +183 +183 +178 +178 +174 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +140 +139 +139 +133 +133 +129 +129 +129 +125 +125 +120 +119 +120 +116 +115 +110 +110 +109 +106 +106 +100 +100 +100 +96 +96 +90 +90 +87 +86 +86 +82 +82 +76 +76 +76 +72 +73 +69 +68 +68 +64 +64 +58 +58 +58 +54 +54 +51 +50 +51 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +13 +13 +13 +13 +13 +14 +14 +13 +13 +14 +14 +14 +13 +13 +13 +14 +14 +13 +14 +14 +14 +13 +13 +14 +14 +13 +13 +13 +13 +13 +16 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +42 +43 +43 +47 +47 +51 +50 +51 +55 +54 +59 +58 +65 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +81 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +109 +116 +115 +116 +119 +119 +125 +125 +126 +129 +130 +134 +133 +133 +140 +139 +143 +143 +143 +147 +147 +151 +151 +152 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +175 +175 +175 +178 +179 +182 +183 +183 +185 +185 +189 +189 +189 +191 +191 +194 +195 +196 +197 +196 +198 +198 +200 +200 +200 +200 +201 +200 +200 +200 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +205 +204 +205 +204 +204 +202 +202 +200 +200 +201 +200 +201 +198 +198 +197 +196 +196 +195 +195 +190 +190 +191 +188 +189 +184 +184 +185 +183 +182 +179 +179 +179 +175 +175 +172 +173 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +134 +133 +129 +130 +125 +125 +125 +119 +120 +115 +116 +110 +109 +110 +106 +106 +100 +100 +100 +96 +96 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +72 +72 +68 +68 +64 +64 +64 +58 +58 +55 +55 +55 +51 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +32 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +17 +17 +17 +15 +16 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +13 +14 +13 +13 +14 +13 +14 +13 +13 +13 +13 +14 +14 +14 +13 +14 +14 +13 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +46 +47 +46 +50 +50 +55 +54 +55 +58 +59 +64 +65 +64 +68 +68 +72 +73 +72 +76 +76 +82 +82 +83 +86 +85 +90 +90 +97 +96 +96 +100 +99 +106 +106 +106 +110 +110 +116 +115 +115 +119 +119 +125 +125 +126 +129 +130 +133 +133 +134 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +180 +183 +183 +184 +184 +189 +189 +188 +191 +190 +195 +195 +195 +197 +196 +196 +197 +196 +199 +198 +200 +201 +200 +200 +200 +202 +202 +204 +205 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +207 +206 +206 +206 +206 +204 +204 +205 +205 +205 +203 +202 +200 +201 +200 +200 +200 +198 +198 +198 +196 +197 +194 +194 +194 +190 +190 +189 +189 +189 +184 +185 +183 +183 +182 +179 +178 +175 +175 +173 +173 +173 +169 +169 +166 +165 +164 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +140 +133 +133 +129 +129 +126 +125 +125 +120 +120 +116 +116 +115 +110 +110 +106 +106 +106 +100 +99 +96 +96 +96 +90 +90 +87 +86 +86 +82 +82 +76 +76 +73 +72 +72 +68 +68 +64 +64 +64 +58 +58 +54 +55 +55 +51 +51 +46 +47 +47 +43 +43 +41 +41 +41 +37 +36 +33 +33 +31 +31 +32 +28 +27 +25 +25 +25 +21 +21 +21 +21 +20 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +13 +13 +14 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +13 +14 +14 +13 +14 +14 +13 +13 +13 +13 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +41 +40 +41 +43 +42 +47 +47 +47 +51 +51 +55 +54 +54 +58 +58 +64 +64 +64 +68 +68 +72 +72 +72 +77 +76 +82 +82 +87 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +115 +119 +119 +126 +125 +126 +129 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +147 +151 +151 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +168 +168 +170 +173 +172 +175 +175 +178 +178 +179 +183 +182 +185 +185 +185 +189 +189 +189 +189 +188 +191 +190 +194 +194 +195 +196 +196 +198 +198 +200 +200 +201 +200 +201 +202 +202 +203 +205 +205 +204 +204 +204 +207 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +205 +205 +205 +204 +204 +202 +203 +202 +200 +200 +201 +200 +200 +198 +198 +196 +197 +196 +194 +194 +190 +190 +191 +188 +189 +185 +184 +183 +183 +182 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +140 +139 +140 +133 +133 +130 +129 +130 +125 +126 +120 +120 +119 +115 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +73 +72 +72 +72 +69 +68 +64 +64 +64 +58 +59 +55 +55 +55 +51 +50 +46 +47 +44 +43 +43 +41 +41 +37 +37 +37 +33 +33 +33 +33 +32 +31 +31 +27 +27 +27 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +14 +14 +13 +13 +13 +13 +14 +13 +13 +14 +14 +14 +13 +13 +13 +13 +13 +13 +14 +14 +13 +14 +13 +13 +14 +14 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +42 +43 +43 +47 +47 +51 +51 +51 +54 +55 +59 +58 +65 +65 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +115 +115 +115 +119 +119 +125 +125 +125 +129 +129 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +153 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +172 +173 +175 +175 +175 +175 +175 +178 +179 +182 +183 +182 +184 +185 +188 +189 +190 +190 +191 +195 +194 +196 +196 +196 +198 +199 +201 +200 +200 +200 +200 +202 +203 +202 +204 +204 +204 +204 +205 +207 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +205 +204 +203 +203 +202 +201 +200 +201 +200 +201 +198 +198 +196 +196 +194 +194 +194 +190 +191 +188 +188 +188 +185 +184 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +134 +133 +129 +129 +129 +125 +125 +119 +120 +120 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +90 +90 +90 +86 +86 +82 +82 +82 +77 +76 +72 +72 +68 +68 +68 +64 +64 +58 +58 +59 +54 +54 +51 +51 +51 +47 +47 +46 +47 +47 +42 +43 +41 +41 +41 +37 +36 +33 +32 +31 +31 +31 +27 +27 +25 +25 +24 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +14 +14 +13 +14 +13 +14 +14 +14 +14 +14 +14 +14 +13 +13 +14 +14 +14 +13 +12 +15 +15 +18 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +40 +41 +41 +43 +43 +47 +47 +50 +51 +50 +54 +54 +59 +58 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +100 +100 +100 +105 +106 +109 +110 +110 +115 +115 +116 +116 +116 +120 +119 +125 +126 +125 +129 +130 +133 +133 +132 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +161 +161 +161 +165 +165 +169 +169 +170 +172 +173 +175 +175 +178 +179 +179 +183 +183 +185 +185 +185 +188 +189 +190 +190 +191 +195 +194 +197 +196 +196 +198 +198 +200 +200 +200 +200 +201 +203 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +205 +202 +203 +201 +200 +200 +200 +200 +199 +198 +198 +196 +196 +194 +194 +194 +190 +190 +189 +188 +188 +184 +185 +183 +182 +183 +178 +179 +174 +175 +173 +173 +172 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +141 +133 +134 +129 +129 +125 +125 +126 +119 +120 +116 +115 +116 +110 +110 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +76 +76 +76 +72 +72 +69 +68 +68 +64 +64 +65 +64 +64 +59 +58 +55 +55 +54 +51 +50 +46 +47 +45 +43 +43 +41 +40 +36 +37 +37 +32 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +13 +13 +14 +13 +14 +14 +14 +14 +14 +13 +13 +14 +13 +13 +13 +14 +14 +13 +13 +14 +14 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +28 +31 +31 +33 +33 +37 +36 +36 +41 +41 +43 +43 +43 +46 +46 +50 +51 +51 +55 +54 +58 +58 +58 +64 +64 +69 +68 +67 +72 +72 +77 +76 +83 +81 +82 +86 +86 +90 +90 +90 +96 +96 +99 +99 +100 +105 +106 +110 +110 +110 +115 +115 +119 +119 +120 +126 +125 +129 +129 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +168 +169 +173 +173 +174 +175 +175 +179 +179 +183 +182 +183 +185 +184 +189 +189 +189 +190 +190 +194 +194 +195 +196 +197 +199 +198 +200 +200 +200 +201 +201 +201 +200 +200 +203 +202 +205 +204 +204 +204 +204 +207 +206 +206 +207 +206 +207 +206 +207 +206 +206 +206 +207 +206 +206 +206 +205 +204 +204 +204 +204 +202 +203 +200 +200 +201 +201 +200 +199 +199 +199 +197 +197 +194 +194 +195 +191 +191 +189 +189 +185 +185 +185 +182 +183 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +158 +151 +152 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +126 +125 +119 +120 +115 +115 +116 +110 +110 +106 +106 +103 +100 +100 +96 +96 +90 +90 +89 +86 +86 +82 +82 +82 +76 +76 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +59 +55 +54 +54 +50 +50 +47 +46 +47 +42 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +26 +27 +25 +25 +21 +21 +19 +18 +19 +17 +16 +15 +15 +15 +15 +16 +13 +13 +13 +12 +14 +13 +13 +14 +13 +13 +14 +13 +14 +13 +13 +13 +14 +14 +13 +13 +13 +13 +14 +14 +13 +14 +13 +13 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +28 +27 +27 +31 +31 +33 +33 +33 +36 +37 +41 +41 +41 +43 +43 +47 +47 +47 +50 +50 +55 +55 +55 +58 +59 +65 +65 +68 +69 +68 +72 +72 +76 +76 +76 +82 +82 +86 +87 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +119 +120 +120 +126 +125 +130 +129 +130 +133 +133 +133 +133 +134 +139 +139 +143 +143 +143 +147 +147 +151 +151 +154 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +185 +185 +184 +188 +188 +191 +191 +194 +195 +195 +197 +197 +198 +199 +198 +201 +200 +200 +200 +200 +203 +202 +204 +204 +204 +204 +204 +206 +206 +207 +206 +207 +206 +207 +206 +207 +207 +207 +206 +206 +206 +206 +204 +204 +204 +204 +205 +202 +202 +201 +200 +200 +200 +200 +199 +198 +199 +197 +196 +194 +195 +191 +191 +190 +189 +189 +185 +185 +184 +182 +182 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +152 +151 +147 +147 +143 +143 +144 +139 +139 +133 +133 +134 +129 +129 +126 +126 +125 +119 +120 +116 +115 +113 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +65 +65 +65 +58 +59 +54 +54 +54 +50 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +13 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +42 +47 +47 +48 +51 +51 +55 +54 +59 +59 +58 +65 +64 +68 +68 +68 +72 +72 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +91 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +116 +120 +120 +120 +119 +120 +126 +125 +129 +129 +130 +134 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +178 +179 +183 +183 +184 +185 +185 +189 +188 +189 +189 +189 +190 +190 +195 +194 +195 +196 +196 +198 +199 +198 +200 +200 +200 +200 +201 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +205 +205 +205 +202 +202 +201 +200 +200 +200 +200 +200 +200 +200 +198 +199 +197 +196 +197 +194 +195 +190 +190 +191 +189 +189 +184 +184 +185 +183 +182 +179 +179 +175 +175 +176 +173 +173 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +134 +133 +133 +129 +129 +129 +129 +129 +125 +125 +125 +125 +125 +119 +120 +115 +116 +116 +109 +109 +106 +106 +103 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +65 +65 +58 +58 +55 +55 +51 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +34 +31 +31 +31 +27 +26 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +14 +13 +14 +13 +13 +13 +13 +14 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +22 +25 +25 +27 +27 +30 +31 +31 +33 +33 +37 +37 +37 +41 +41 +40 +41 +41 +43 +43 +47 +47 +47 +50 +50 +55 +55 +56 +59 +58 +64 +65 +68 +68 +68 +72 +72 +77 +76 +76 +83 +82 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +102 +106 +106 +110 +109 +116 +116 +116 +119 +120 +126 +125 +125 +129 +129 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +174 +175 +179 +179 +178 +183 +183 +184 +185 +185 +189 +189 +191 +191 +194 +195 +194 +196 +196 +198 +198 +199 +200 +201 +200 +200 +201 +202 +203 +204 +204 +204 +205 +205 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +204 +204 +204 +204 +204 +202 +202 +201 +200 +200 +201 +200 +198 +199 +199 +196 +197 +195 +194 +190 +191 +190 +189 +189 +185 +184 +184 +183 +183 +183 +182 +183 +178 +179 +175 +175 +175 +173 +173 +169 +169 +170 +165 +165 +161 +161 +157 +156 +157 +151 +151 +147 +147 +147 +143 +143 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +126 +119 +120 +116 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +91 +90 +86 +86 +82 +82 +82 +76 +76 +72 +73 +71 +68 +68 +65 +64 +58 +58 +58 +54 +54 +51 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +28 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +16 +15 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +14 +13 +14 +14 +13 +13 +14 +14 +14 +14 +14 +13 +14 +13 +13 +14 +13 +13 +14 +13 +13 +15 +15 +17 +17 +20 +19 +19 +21 +21 +25 +25 +25 +27 +27 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +50 +51 +54 +55 +58 +58 +59 +64 +65 +64 +65 +65 +69 +68 +73 +72 +73 +76 +76 +82 +82 +84 +86 +86 +90 +90 +96 +96 +96 +99 +100 +106 +106 +105 +110 +110 +116 +116 +116 +119 +119 +125 +126 +126 +130 +130 +134 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +164 +168 +169 +173 +173 +173 +175 +175 +178 +178 +182 +182 +182 +184 +185 +189 +189 +188 +190 +190 +195 +194 +194 +197 +196 +198 +198 +198 +201 +200 +200 +200 +201 +202 +203 +205 +205 +205 +204 +204 +206 +206 +206 +207 +207 +206 +206 +207 +207 +206 +206 +207 +206 +206 +206 +205 +204 +204 +204 +205 +203 +202 +201 +200 +200 +200 +201 +199 +198 +196 +197 +197 +195 +195 +195 +195 +194 +191 +189 +189 +188 +189 +185 +185 +183 +182 +181 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +161 +161 +161 +157 +157 +151 +151 +151 +146 +147 +143 +143 +140 +139 +139 +133 +134 +129 +130 +129 +125 +126 +119 +120 +119 +116 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +73 +72 +68 +69 +68 +64 +64 +58 +59 +59 +54 +55 +51 +50 +51 +47 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +14 +15 +15 +14 +13 +13 +12 +13 +14 +14 +14 +13 +14 +13 +14 +14 +13 +14 +13 +14 +13 +14 +14 +14 +14 +14 +13 +14 +14 +13 +13 +14 +13 +14 +13 +15 +15 +16 +17 +17 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +28 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +47 +47 +47 +51 +51 +55 +54 +55 +58 +58 +64 +64 +66 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +119 +120 +120 +126 +125 +130 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +150 +151 +157 +157 +157 +161 +161 +165 +165 +169 +170 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +183 +185 +184 +188 +189 +188 +191 +191 +194 +194 +195 +196 +197 +198 +199 +201 +200 +201 +201 +201 +202 +202 +202 +204 +204 +205 +204 +204 +207 +206 +206 +206 +207 +206 +207 +206 +207 +207 +207 +206 +206 +206 +204 +204 +204 +205 +204 +203 +202 +202 +200 +201 +200 +200 +200 +200 +200 +198 +198 +198 +196 +197 +194 +194 +195 +190 +190 +188 +189 +184 +184 +185 +183 +182 +178 +179 +179 +175 +175 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +158 +156 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +134 +129 +129 +129 +126 +125 +119 +120 +120 +116 +115 +110 +106 +106 +106 +106 +100 +100 +95 +95 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +69 +68 +68 +64 +64 +59 +58 +55 +55 +54 +51 +51 +46 +47 +47 +42 +43 +41 +40 +41 +37 +36 +32 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +14 +14 +14 +14 +13 +14 +13 +13 +13 +14 +14 +13 +13 +14 +14 +14 +14 +14 +13 +13 +14 +13 +13 +13 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +37 +37 +37 +40 +41 +43 +43 +43 +47 +47 +50 +50 +54 +54 +55 +59 +59 +64 +65 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +115 +119 +119 +125 +125 +125 +129 +130 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +174 +175 +178 +179 +179 +183 +183 +185 +185 +185 +189 +189 +191 +191 +195 +194 +194 +196 +197 +198 +198 +199 +200 +201 +200 +200 +200 +203 +202 +204 +204 +204 +204 +204 +207 +207 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +207 +204 +204 +204 +204 +204 +202 +202 +201 +200 +200 +200 +200 +198 +198 +197 +196 +197 +195 +194 +191 +191 +190 +189 +188 +185 +185 +185 +182 +182 +183 +183 +183 +178 +179 +175 +175 +175 +173 +173 +169 +169 +166 +165 +165 +160 +161 +157 +157 +158 +151 +151 +147 +147 +147 +143 +143 +139 +139 +140 +133 +133 +129 +129 +130 +125 +125 +120 +120 +115 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +87 +86 +86 +82 +82 +76 +76 +76 +73 +72 +69 +69 +65 +64 +64 +58 +59 +54 +54 +55 +50 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +26 +25 +25 +21 +21 +19 +19 +17 +17 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +14 +13 +14 +14 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +16 +15 +15 +17 +17 +20 +19 +19 +21 +21 +25 +25 +25 +27 +26 +27 +27 +27 +31 +31 +32 +33 +32 +37 +37 +41 +41 +42 +43 +42 +47 +46 +51 +51 +50 +55 +54 +59 +58 +58 +65 +64 +68 +68 +68 +72 +72 +76 +76 +77 +82 +82 +86 +86 +88 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +109 +115 +116 +120 +120 +119 +125 +125 +130 +129 +129 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +174 +175 +175 +179 +179 +185 +184 +189 +189 +188 +190 +190 +194 +194 +195 +196 +196 +198 +198 +199 +201 +201 +200 +201 +201 +202 +202 +204 +205 +205 +204 +204 +206 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +201 +201 +201 +200 +201 +198 +198 +198 +196 +197 +195 +194 +194 +190 +191 +191 +190 +190 +188 +189 +185 +184 +185 +182 +183 +179 +179 +175 +175 +175 +173 +173 +169 +168 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +140 +139 +133 +133 +129 +129 +129 +125 +125 +119 +120 +120 +116 +116 +110 +109 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +69 +69 +64 +64 +59 +58 +58 +54 +54 +50 +51 +51 +47 +47 +43 +43 +43 +41 +41 +36 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +16 +17 +15 +15 +15 +15 +16 +13 +13 +12 +13 +14 +14 +13 +13 +14 +13 +13 +14 +13 +14 +13 +14 +14 +14 +14 +13 +14 +14 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +30 +31 +33 +33 +32 +37 +37 +41 +41 +41 +43 +43 +47 +46 +47 +50 +51 +54 +55 +55 +59 +58 +64 +64 +65 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +116 +116 +119 +120 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +175 +175 +175 +178 +178 +182 +183 +183 +185 +185 +189 +188 +189 +191 +190 +194 +194 +195 +196 +196 +198 +198 +199 +200 +200 +200 +201 +203 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +207 +207 +206 +207 +205 +204 +204 +204 +204 +202 +202 +200 +200 +200 +200 +200 +200 +200 +200 +198 +198 +197 +197 +196 +194 +195 +190 +190 +189 +188 +189 +184 +184 +182 +183 +183 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +162 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +120 +119 +116 +115 +110 +109 +110 +106 +106 +100 +99 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +65 +64 +58 +58 +58 +54 +54 +50 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +14 +14 +14 +13 +13 +13 +13 +14 +14 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +14 +13 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +38 +41 +41 +41 +43 +43 +46 +47 +47 +51 +50 +55 +54 +58 +58 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +95 +96 +96 +100 +100 +106 +110 +110 +110 +110 +116 +116 +119 +119 +119 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +178 +183 +182 +182 +185 +185 +188 +189 +189 +190 +191 +194 +194 +197 +196 +197 +198 +198 +200 +201 +200 +200 +200 +201 +200 +200 +202 +202 +204 +205 +204 +204 +205 +206 +206 +207 +206 +207 +206 +207 +207 +206 +206 +207 +206 +206 +206 +206 +204 +204 +204 +204 +204 +204 +204 +202 +202 +203 +200 +201 +200 +200 +199 +198 +199 +196 +196 +194 +194 +194 +191 +191 +188 +189 +188 +184 +185 +182 +183 +183 +178 +179 +175 +174 +175 +173 +173 +169 +169 +167 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +119 +116 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +65 +64 +64 +58 +59 +54 +54 +55 +51 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +13 +14 +14 +13 +14 +13 +14 +13 +14 +13 +14 +14 +13 +14 +14 +14 +13 +14 +13 +14 +13 +13 +14 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +43 +42 +43 +47 +46 +51 +51 +51 +55 +54 +58 +59 +59 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +91 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +115 +120 +119 +119 +125 +125 +129 +129 +130 +133 +133 +139 +139 +144 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +176 +178 +178 +182 +183 +185 +184 +185 +188 +188 +190 +190 +195 +195 +194 +195 +194 +196 +196 +198 +198 +199 +200 +200 +200 +200 +201 +202 +202 +204 +204 +204 +204 +204 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +204 +204 +205 +204 +204 +203 +202 +200 +201 +200 +201 +200 +199 +198 +198 +197 +197 +195 +194 +195 +190 +190 +188 +189 +189 +184 +185 +183 +183 +179 +178 +179 +175 +174 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +134 +133 +133 +129 +129 +125 +125 +125 +119 +120 +116 +115 +115 +110 +110 +105 +106 +106 +100 +100 +96 +96 +96 +90 +90 +85 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +65 +64 +64 +59 +59 +55 +55 +55 +50 +50 +47 +47 +47 +43 +43 +41 +41 +36 +37 +37 +33 +33 +31 +31 +31 +27 +27 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +14 +13 +13 +13 +14 +13 +13 +13 +14 +14 +13 +14 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +50 +55 +54 +58 +59 +59 +64 +64 +68 +68 +73 +73 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +116 +119 +120 +126 +125 +125 +130 +129 +133 +133 +134 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +162 +165 +165 +169 +168 +173 +173 +173 +175 +175 +179 +179 +179 +182 +183 +183 +183 +182 +185 +185 +188 +189 +189 +190 +190 +194 +195 +195 +196 +197 +198 +198 +200 +200 +201 +200 +201 +202 +202 +202 +204 +204 +204 +204 +204 +204 +204 +206 +206 +207 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +204 +204 +205 +204 +204 +202 +203 +201 +200 +200 +200 +201 +199 +198 +198 +199 +198 +196 +196 +194 +194 +194 +191 +190 +189 +189 +188 +184 +185 +182 +183 +182 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +130 +125 +125 +119 +119 +119 +116 +116 +110 +110 +105 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +72 +72 +68 +68 +68 +65 +64 +59 +58 +54 +54 +54 +50 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +32 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +20 +19 +19 +17 +17 +15 +15 +15 +15 +15 +15 +15 +15 +13 +13 +12 +12 +14 +13 +13 +14 +13 +14 +13 +13 +14 +14 +13 +13 +14 +14 +14 +13 +14 +14 +14 +13 +14 +13 +14 +13 +14 +13 +13 +13 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +55 +55 +55 +58 +58 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +83 +86 +86 +90 +90 +90 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +116 +115 +119 +119 +126 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +144 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +169 +169 +169 +173 +173 +175 +175 +175 +178 +179 +183 +183 +183 +185 +185 +189 +188 +191 +191 +191 +194 +195 +196 +197 +196 +198 +198 +199 +198 +198 +200 +201 +200 +200 +201 +202 +202 +204 +204 +204 +204 +205 +207 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +207 +204 +205 +204 +204 +205 +202 +202 +200 +200 +200 +200 +200 +198 +198 +196 +196 +196 +195 +194 +191 +191 +190 +189 +188 +185 +184 +184 +182 +182 +179 +178 +179 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +134 +133 +134 +129 +129 +125 +125 +120 +119 +119 +115 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +83 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +58 +59 +55 +55 +54 +55 +55 +50 +51 +46 +47 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +32 +31 +31 +27 +27 +25 +25 +25 +21 +21 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +14 +14 +13 +14 +13 +14 +14 +13 +14 +14 +14 +14 +14 +14 +13 +13 +13 +14 +14 +13 +14 +13 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +20 +25 +25 +25 +27 +26 +31 +31 +32 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +46 +51 +51 +54 +54 +55 +58 +58 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +87 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +116 +116 +119 +119 +125 +125 +126 +129 +129 +133 +133 +140 +139 +139 +143 +143 +147 +147 +147 +151 +151 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +178 +178 +179 +183 +182 +184 +185 +184 +188 +189 +189 +189 +188 +191 +190 +194 +195 +195 +196 +197 +198 +198 +200 +200 +200 +200 +200 +202 +202 +202 +204 +204 +204 +204 +205 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +207 +206 +206 +204 +204 +204 +204 +205 +202 +202 +202 +200 +200 +200 +200 +200 +198 +198 +196 +196 +196 +194 +194 +190 +191 +190 +188 +188 +185 +184 +182 +183 +183 +178 +179 +175 +175 +175 +173 +173 +169 +168 +169 +165 +165 +161 +161 +161 +157 +156 +151 +151 +151 +147 +147 +143 +143 +140 +139 +139 +133 +133 +129 +129 +129 +125 +125 +120 +119 +119 +116 +116 +110 +109 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +72 +72 +72 +68 +68 +64 +64 +64 +58 +58 +54 +55 +52 +51 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +20 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +13 +13 +14 +14 +14 +14 +13 +13 +14 +14 +13 +13 +14 +13 +14 +14 +13 +14 +13 +14 +14 +14 +14 +12 +15 +15 +15 +17 +17 +19 +19 +19 +20 +21 +25 +25 +27 +27 +27 +31 +30 +33 +33 +33 +37 +37 +41 +41 +40 +43 +43 +46 +47 +46 +50 +51 +55 +55 +54 +58 +58 +64 +64 +69 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +105 +106 +106 +110 +110 +115 +115 +120 +119 +119 +125 +126 +129 +129 +129 +133 +133 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +153 +157 +157 +161 +161 +164 +165 +165 +169 +169 +173 +172 +173 +174 +175 +175 +175 +175 +178 +179 +183 +182 +182 +184 +185 +189 +188 +189 +191 +191 +194 +194 +196 +197 +196 +198 +198 +200 +200 +201 +200 +200 +203 +202 +202 +204 +204 +204 +204 +205 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +205 +204 +204 +204 +204 +202 +202 +203 +200 +201 +200 +201 +200 +199 +199 +196 +196 +195 +195 +195 +191 +190 +188 +189 +188 +184 +184 +183 +183 +183 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +120 +120 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +89 +90 +90 +90 +90 +85 +86 +82 +82 +82 +76 +76 +72 +72 +71 +68 +68 +64 +64 +58 +58 +59 +54 +55 +50 +51 +50 +47 +47 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +32 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +13 +14 +13 +14 +14 +14 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +14 +14 +14 +13 +14 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +42 +43 +43 +47 +47 +51 +50 +50 +54 +55 +58 +58 +58 +64 +64 +69 +69 +69 +73 +72 +76 +76 +76 +82 +82 +86 +86 +87 +89 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +115 +115 +115 +115 +120 +120 +125 +125 +126 +129 +129 +133 +133 +132 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +160 +161 +161 +161 +165 +164 +169 +169 +168 +173 +173 +174 +174 +177 +178 +179 +183 +183 +184 +184 +185 +188 +188 +190 +191 +190 +194 +195 +196 +196 +196 +198 +198 +200 +200 +201 +201 +200 +202 +202 +204 +205 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +204 +205 +205 +204 +204 +203 +202 +201 +200 +201 +200 +200 +198 +198 +199 +197 +197 +195 +194 +194 +190 +191 +188 +188 +188 +184 +185 +182 +182 +183 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +141 +133 +133 +130 +130 +125 +125 +125 +120 +119 +115 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +65 +64 +58 +58 +59 +58 +59 +54 +55 +50 +51 +51 +47 +46 +43 +43 +41 +41 +41 +36 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +14 +13 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +14 +13 +14 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +41 +41 +40 +43 +42 +47 +47 +47 +50 +50 +54 +54 +55 +58 +59 +64 +64 +64 +68 +68 +72 +72 +73 +76 +76 +82 +87 +86 +86 +90 +90 +96 +96 +96 +100 +100 +100 +100 +100 +106 +105 +110 +110 +110 +115 +115 +119 +120 +122 +125 +125 +130 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +168 +169 +168 +173 +172 +174 +175 +175 +179 +178 +183 +183 +182 +184 +185 +189 +188 +188 +190 +190 +195 +195 +195 +196 +196 +198 +198 +200 +200 +201 +200 +200 +202 +202 +202 +204 +204 +205 +204 +204 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +204 +204 +204 +204 +204 +202 +203 +202 +200 +200 +201 +200 +200 +198 +198 +196 +197 +196 +194 +195 +191 +191 +190 +188 +188 +184 +184 +184 +182 +182 +179 +179 +175 +175 +175 +172 +173 +173 +172 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +154 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +125 +120 +120 +116 +115 +116 +110 +110 +106 +105 +106 +100 +100 +95 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +58 +55 +54 +54 +51 +50 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +14 +13 +13 +13 +12 +13 +13 +13 +14 +14 +13 +14 +14 +14 +14 +13 +13 +14 +14 +14 +14 +14 +13 +14 +13 +13 +13 +13 +13 +13 +14 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +46 +47 +46 +51 +50 +54 +55 +55 +59 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +82 +81 +82 +86 +86 +90 +91 +90 +96 +96 +100 +99 +102 +106 +106 +110 +110 +115 +115 +116 +119 +120 +125 +125 +125 +129 +129 +129 +129 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +160 +161 +165 +165 +169 +169 +169 +173 +173 +175 +174 +175 +179 +179 +182 +183 +183 +184 +185 +188 +188 +191 +191 +190 +194 +194 +196 +197 +197 +198 +198 +200 +201 +200 +200 +200 +203 +202 +202 +204 +205 +204 +204 +205 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +205 +203 +202 +202 +200 +201 +200 +200 +200 +198 +199 +196 +196 +194 +195 +194 +190 +190 +188 +189 +189 +184 +185 +183 +183 +182 +178 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +126 +120 +119 +116 +115 +110 +110 +109 +106 +106 +100 +100 +99 +96 +96 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +73 +72 +72 +68 +68 +64 +64 +64 +58 +58 +54 +54 +54 +50 +51 +46 +47 +47 +43 +42 +41 +41 +41 +37 +37 +33 +33 +31 +31 +31 +27 +26 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +14 +14 +13 +13 +14 +14 +14 +13 +14 +13 +13 +13 +14 +14 +14 +14 +14 +13 +13 +13 +13 +14 +13 +12 +15 +15 +18 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +40 +41 +42 +43 +43 +47 +47 +50 +51 +50 +54 +54 +59 +59 +58 +64 +65 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +83 +83 +86 +86 +90 +90 +96 +95 +96 +99 +100 +106 +106 +106 +110 +110 +110 +110 +110 +115 +115 +119 +120 +120 +125 +125 +130 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +168 +169 +173 +173 +175 +175 +178 +179 +179 +183 +182 +184 +184 +184 +188 +188 +191 +191 +190 +195 +194 +196 +196 +196 +198 +198 +200 +200 +201 +200 +201 +202 +202 +205 +204 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +204 +204 +204 +205 +204 +202 +202 +201 +200 +201 +200 +200 +198 +198 +198 +196 +197 +194 +194 +194 +191 +190 +189 +188 +189 +184 +185 +182 +183 +183 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +142 +139 +139 +133 +133 +130 +129 +129 +125 +125 +120 +120 +120 +115 +115 +116 +116 +116 +110 +110 +105 +106 +106 +100 +100 +96 +96 +94 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +59 +59 +54 +54 +55 +51 +50 +47 +47 +43 +43 +42 +41 +41 +37 +37 +37 +32 +33 +31 +31 +31 +27 +26 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +14 +14 +13 +14 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +14 +13 +14 +13 +14 +14 +13 +14 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +26 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +43 +43 +43 +47 +47 +51 +50 +50 +55 +54 +58 +59 +61 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +107 +110 +110 +115 +116 +119 +119 +119 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +161 +161 +160 +165 +165 +169 +169 +168 +173 +173 +174 +175 +175 +179 +178 +183 +183 +182 +185 +184 +189 +188 +188 +190 +191 +195 +194 +197 +196 +197 +198 +198 +200 +200 +200 +200 +200 +202 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +207 +206 +207 +206 +206 +207 +206 +207 +206 +206 +204 +204 +204 +204 +204 +202 +202 +202 +200 +200 +200 +200 +201 +198 +198 +196 +196 +197 +194 +194 +191 +190 +189 +188 +189 +184 +184 +183 +182 +182 +179 +178 +178 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +163 +161 +161 +157 +157 +151 +151 +150 +147 +147 +143 +143 +143 +139 +139 +139 +139 +139 +133 +133 +130 +129 +130 +125 +125 +119 +120 +116 +115 +116 +110 +110 +106 +105 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +64 +64 +64 +58 +58 +55 +55 +54 +51 +50 +47 +46 +47 +43 +43 +41 +41 +41 +36 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +13 +14 +14 +14 +13 +14 +13 +14 +14 +14 +14 +13 +14 +13 +13 +14 +14 +14 +14 +13 +14 +14 +13 +13 +13 +15 +15 +16 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +46 +51 +51 +54 +55 +55 +59 +59 +64 +64 +64 +68 +68 +68 +68 +68 +72 +72 +76 +76 +77 +82 +82 +86 +86 +89 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +109 +115 +115 +119 +119 +119 +125 +125 +129 +130 +130 +133 +133 +139 +139 +143 +144 +143 +147 +147 +151 +151 +150 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +182 +184 +185 +185 +189 +189 +190 +190 +191 +194 +194 +196 +196 +196 +198 +198 +201 +200 +200 +200 +200 +203 +202 +202 +204 +204 +204 +204 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +203 +200 +201 +200 +201 +198 +198 +198 +197 +197 +194 +194 +194 +190 +190 +190 +191 +190 +188 +189 +185 +184 +184 +182 +182 +179 +179 +177 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +137 +133 +133 +129 +129 +125 +125 +125 +119 +119 +116 +116 +115 +110 +110 +105 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +59 +59 +55 +55 +55 +51 +50 +47 +46 +47 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +13 +14 +14 +13 +14 +14 +14 +13 +13 +13 +14 +14 +14 +14 +13 +14 +14 +14 +14 +14 +14 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +32 +33 +33 +36 +37 +41 +41 +41 +43 +43 +47 +47 +47 +50 +51 +51 +50 +51 +55 +55 +59 +59 +59 +64 +64 +68 +68 +67 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +115 +119 +119 +125 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +172 +173 +173 +175 +175 +178 +179 +178 +183 +182 +185 +184 +185 +189 +188 +190 +190 +191 +195 +195 +196 +196 +196 +198 +198 +200 +200 +201 +200 +200 +203 +202 +204 +205 +204 +204 +204 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +207 +206 +206 +204 +204 +204 +204 +204 +202 +202 +201 +200 +200 +201 +200 +200 +200 +200 +199 +198 +196 +196 +196 +195 +195 +190 +190 +189 +188 +189 +185 +184 +182 +182 +182 +178 +179 +175 +175 +175 +172 +173 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +154 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +130 +129 +125 +125 +126 +120 +120 +115 +115 +116 +109 +110 +106 +106 +100 +99 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +58 +58 +54 +54 +52 +51 +50 +47 +46 +43 +42 +43 +41 +41 +36 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +14 +14 +14 +13 +13 +14 +14 +13 +14 +13 +13 +14 +13 +14 +14 +14 +13 +13 +13 +13 +12 +15 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +50 +54 +55 +54 +58 +58 +64 +64 +64 +69 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +106 +106 +106 +110 +109 +115 +116 +116 +119 +120 +126 +125 +125 +129 +129 +134 +134 +133 +139 +139 +143 +143 +144 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +178 +182 +182 +185 +184 +185 +189 +189 +190 +190 +194 +195 +194 +196 +196 +198 +198 +198 +200 +200 +201 +201 +200 +202 +203 +205 +204 +205 +204 +204 +206 +206 +207 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +204 +204 +202 +202 +203 +200 +200 +200 +200 +201 +198 +199 +196 +196 +194 +194 +194 +190 +190 +188 +189 +188 +185 +184 +185 +185 +184 +182 +182 +179 +179 +179 +174 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +134 +130 +129 +126 +125 +119 +120 +119 +115 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +68 +68 +68 +64 +64 +59 +59 +58 +55 +54 +50 +50 +50 +46 +47 +42 +43 +43 +41 +41 +37 +36 +37 +33 +33 +31 +31 +28 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +13 +14 +14 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +38 +41 +41 +43 +43 +47 +47 +47 +51 +50 +55 +54 +55 +58 +58 +64 +64 +64 +68 +68 +72 +72 +73 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +105 +106 +110 +110 +115 +116 +116 +119 +119 +126 +125 +125 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +172 +173 +175 +175 +179 +179 +183 +182 +182 +185 +184 +189 +189 +188 +190 +190 +195 +194 +194 +196 +196 +199 +198 +198 +200 +201 +200 +200 +201 +202 +203 +205 +204 +205 +204 +204 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +205 +204 +204 +202 +202 +201 +200 +200 +200 +200 +198 +198 +198 +197 +196 +196 +197 +196 +194 +194 +190 +191 +191 +188 +189 +185 +185 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +140 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +119 +119 +116 +115 +110 +109 +110 +106 +106 +100 +100 +99 +96 +95 +90 +90 +87 +86 +86 +82 +82 +76 +76 +76 +73 +72 +68 +68 +68 +64 +64 +58 +59 +58 +54 +55 +51 +50 +51 +47 +47 +43 +42 +41 +42 +40 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +18 +15 +15 +15 +15 +14 +13 +13 +13 +13 +14 +13 +13 +14 +14 +14 +13 +13 +14 +13 +14 +13 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +14 +14 +13 +14 +14 +13 +12 +15 +15 +15 +15 +15 +17 +17 +19 +19 +19 +21 +20 +24 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +42 +43 +47 +47 +47 +51 +51 +54 +55 +55 +58 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +109 +110 +115 +116 +119 +119 +119 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +178 +178 +183 +182 +183 +184 +185 +188 +189 +188 +191 +190 +194 +194 +195 +196 +196 +199 +198 +200 +200 +201 +200 +200 +202 +202 +202 +204 +204 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +207 +206 +206 +204 +204 +204 +204 +204 +202 +203 +202 +202 +202 +200 +200 +200 +201 +200 +198 +199 +196 +197 +196 +194 +195 +191 +190 +189 +188 +188 +185 +184 +183 +182 +183 +179 +178 +175 +175 +175 +172 +173 +169 +169 +169 +165 +165 +161 +161 +159 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +139 +139 +133 +133 +133 +129 +129 +125 +125 +125 +119 +119 +116 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +69 +68 +65 +64 +59 +58 +58 +54 +55 +50 +50 +51 +47 +47 +43 +42 +43 +41 +41 +37 +37 +37 +33 +33 +30 +31 +31 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +14 +14 +14 +14 +14 +14 +13 +13 +13 +14 +13 +14 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +13 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +30 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +46 +46 +47 +50 +50 +55 +55 +54 +58 +59 +64 +64 +64 +68 +68 +72 +73 +72 +76 +77 +82 +82 +82 +86 +85 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +115 +115 +120 +120 +126 +125 +125 +129 +129 +133 +133 +134 +139 +139 +143 +143 +148 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +172 +173 +175 +175 +178 +179 +180 +182 +183 +185 +184 +188 +188 +188 +190 +190 +194 +194 +194 +197 +196 +197 +196 +196 +199 +198 +201 +201 +201 +201 +203 +202 +203 +204 +204 +205 +204 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +204 +204 +204 +205 +203 +202 +203 +201 +201 +200 +200 +200 +200 +200 +199 +198 +198 +196 +197 +194 +194 +195 +191 +190 +188 +189 +189 +184 +185 +182 +183 +179 +179 +178 +174 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +134 +133 +134 +129 +129 +125 +125 +125 +119 +119 +115 +115 +115 +109 +110 +105 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +68 +68 +68 +64 +64 +58 +60 +58 +54 +54 +51 +51 +51 +46 +47 +43 +42 +42 +41 +41 +37 +37 +33 +33 +33 +31 +31 +31 +31 +31 +27 +27 +25 +25 +25 +22 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +14 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +26 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +46 +47 +50 +50 +54 +54 +55 +59 +58 +64 +64 +69 +69 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +109 +110 +116 +116 +120 +119 +119 +125 +125 +129 +129 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +164 +168 +168 +169 +173 +173 +175 +175 +175 +179 +179 +179 +179 +178 +182 +182 +184 +184 +184 +189 +188 +190 +191 +191 +195 +194 +196 +196 +198 +198 +199 +201 +201 +201 +200 +201 +202 +202 +202 +202 +202 +204 +204 +204 +204 +204 +206 +207 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +205 +204 +204 +204 +204 +202 +202 +202 +201 +201 +200 +200 +201 +199 +198 +197 +196 +195 +194 +194 +190 +190 +188 +188 +189 +185 +185 +183 +183 +182 +179 +179 +175 +175 +175 +173 +172 +169 +169 +169 +165 +165 +161 +161 +158 +157 +157 +151 +151 +147 +148 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +130 +125 +126 +120 +120 +119 +115 +115 +110 +110 +106 +105 +106 +100 +100 +96 +96 +96 +90 +90 +86 +87 +86 +82 +82 +76 +77 +76 +72 +72 +68 +68 +69 +64 +65 +58 +58 +55 +55 +55 +50 +51 +47 +47 +47 +43 +43 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +29 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +16 +17 +15 +15 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +14 +14 +14 +14 +13 +14 +14 +14 +13 +14 +14 +14 +13 +14 +13 +14 +13 +14 +13 +13 +15 +15 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +47 +47 +47 +50 +51 +54 +55 +54 +58 +58 +64 +64 +65 +68 +68 +72 +73 +73 +76 +76 +82 +82 +82 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +116 +119 +120 +125 +125 +125 +129 +129 +133 +134 +133 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +174 +175 +175 +178 +179 +183 +183 +185 +185 +185 +188 +188 +191 +190 +191 +194 +194 +194 +194 +195 +196 +196 +198 +198 +199 +200 +200 +200 +201 +201 +202 +203 +205 +204 +204 +204 +204 +206 +206 +207 +207 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +207 +205 +205 +204 +204 +202 +202 +202 +200 +200 +200 +200 +200 +199 +199 +197 +197 +196 +194 +194 +190 +191 +190 +188 +189 +184 +184 +184 +182 +183 +178 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +156 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +140 +134 +133 +130 +129 +130 +126 +125 +120 +119 +119 +115 +116 +110 +110 +109 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +73 +72 +68 +68 +68 +64 +64 +64 +65 +65 +59 +59 +54 +55 +54 +50 +50 +47 +47 +45 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +30 +31 +27 +27 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +14 +13 +14 +14 +14 +14 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +22 +21 +25 +25 +25 +27 +26 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +42 +43 +47 +46 +47 +51 +50 +54 +55 +55 +59 +59 +64 +65 +64 +68 +68 +72 +72 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +105 +106 +106 +110 +110 +116 +115 +116 +119 +119 +125 +125 +129 +129 +129 +133 +132 +139 +139 +139 +143 +143 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +162 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +183 +183 +183 +185 +185 +189 +188 +189 +190 +190 +194 +195 +195 +197 +197 +198 +199 +200 +201 +200 +200 +200 +202 +202 +202 +204 +204 +204 +205 +205 +207 +206 +206 +206 +206 +207 +207 +207 +206 +206 +206 +206 +207 +206 +205 +204 +205 +204 +204 +202 +202 +202 +200 +200 +200 +200 +200 +198 +199 +197 +196 +196 +194 +194 +190 +190 +189 +188 +188 +185 +185 +182 +183 +183 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +148 +147 +147 +143 +143 +139 +139 +139 +133 +134 +133 +133 +133 +129 +129 +125 +126 +125 +119 +119 +115 +116 +116 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +61 +58 +58 +54 +55 +50 +50 +50 +46 +47 +43 +43 +43 +41 +41 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +27 +26 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +14 +14 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +12 +15 +15 +17 +17 +20 +19 +19 +20 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +36 +41 +41 +43 +43 +43 +46 +47 +51 +50 +55 +55 +55 +58 +59 +64 +64 +64 +69 +68 +72 +72 +73 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +106 +106 +106 +109 +110 +116 +116 +115 +120 +120 +120 +119 +120 +125 +126 +130 +130 +130 +133 +133 +139 +139 +139 +143 +143 +147 +147 +150 +151 +151 +157 +157 +161 +161 +161 +165 +165 +165 +165 +165 +169 +169 +173 +172 +173 +175 +175 +179 +179 +180 +183 +183 +185 +185 +188 +189 +188 +191 +191 +194 +194 +194 +196 +197 +198 +198 +199 +200 +200 +200 +200 +201 +202 +203 +204 +204 +205 +204 +204 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +205 +203 +203 +200 +201 +200 +200 +200 +199 +198 +196 +197 +196 +194 +195 +191 +190 +190 +188 +189 +185 +185 +185 +183 +183 +178 +179 +179 +175 +174 +173 +173 +169 +169 +169 +164 +165 +160 +161 +161 +157 +156 +151 +151 +151 +147 +147 +143 +143 +144 +139 +139 +133 +133 +134 +129 +130 +125 +125 +120 +119 +119 +115 +116 +110 +110 +110 +106 +106 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +58 +59 +58 +58 +59 +54 +55 +50 +51 +51 +47 +46 +43 +43 +41 +41 +40 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +14 +15 +15 +13 +12 +13 +12 +13 +13 +13 +14 +14 +14 +14 +13 +14 +14 +13 +14 +13 +13 +13 +14 +14 +13 +13 +14 +14 +13 +13 +14 +14 +13 +13 +13 +15 +16 +15 +17 +17 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +32 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +51 +55 +54 +58 +59 +58 +64 +64 +68 +69 +67 +73 +72 +76 +76 +83 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +110 +109 +116 +115 +120 +119 +120 +125 +125 +129 +129 +133 +134 +133 +139 +140 +143 +143 +143 +147 +147 +147 +147 +147 +151 +151 +157 +156 +157 +161 +161 +165 +165 +166 +169 +168 +173 +173 +175 +175 +175 +178 +178 +183 +182 +182 +184 +185 +188 +189 +188 +191 +190 +195 +195 +195 +196 +196 +198 +198 +200 +200 +201 +200 +201 +203 +202 +202 +205 +204 +204 +205 +204 +207 +207 +206 +207 +206 +206 +207 +207 +206 +206 +207 +206 +206 +206 +205 +205 +204 +204 +205 +203 +202 +202 +200 +200 +200 +200 +201 +199 +198 +197 +196 +196 +194 +194 +190 +190 +191 +189 +189 +185 +185 +183 +182 +182 +178 +178 +175 +175 +175 +173 +173 +173 +173 +173 +168 +169 +165 +165 +165 +161 +161 +157 +157 +158 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +134 +133 +129 +129 +129 +129 +129 +125 +125 +119 +119 +120 +116 +116 +109 +110 +108 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +65 +64 +59 +58 +58 +54 +54 +50 +50 +51 +46 +47 +43 +43 +43 +40 +41 +36 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +14 +13 +13 +14 +14 +14 +14 +13 +13 +14 +13 +14 +13 +14 +14 +14 +13 +13 +14 +14 +14 +14 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +22 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +42 +43 +43 +47 +47 +51 +51 +51 +54 +54 +58 +58 +64 +65 +64 +68 +68 +72 +73 +72 +76 +82 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +99 +100 +105 +106 +109 +109 +115 +115 +115 +119 +119 +125 +125 +125 +129 +129 +129 +129 +130 +133 +133 +139 +139 +140 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +182 +182 +183 +185 +184 +189 +188 +189 +190 +190 +195 +194 +196 +197 +196 +198 +199 +200 +201 +200 +201 +200 +203 +203 +202 +204 +204 +204 +204 +205 +206 +206 +206 +206 +206 +207 +207 +207 +206 +206 +206 +206 +206 +207 +204 +204 +204 +204 +204 +202 +202 +202 +200 +200 +200 +201 +200 +198 +198 +197 +196 +195 +194 +194 +190 +191 +188 +189 +189 +184 +184 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +143 +143 +143 +139 +139 +133 +133 +134 +129 +129 +125 +126 +122 +119 +119 +116 +116 +110 +110 +110 +106 +106 +100 +99 +100 +96 +96 +96 +96 +96 +90 +90 +86 +86 +87 +82 +82 +76 +76 +73 +72 +72 +68 +68 +64 +65 +64 +58 +58 +54 +54 +55 +51 +50 +47 +47 +47 +42 +43 +41 +41 +41 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +14 +14 +14 +14 +13 +14 +13 +13 +14 +14 +14 +14 +13 +14 +13 +14 +14 +14 +14 +14 +13 +13 +15 +15 +18 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +40 +42 +43 +43 +47 +47 +50 +50 +51 +55 +55 +58 +59 +59 +64 +64 +64 +64 +64 +68 +68 +72 +72 +73 +76 +76 +82 +82 +83 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +110 +110 +109 +116 +116 +120 +119 +119 +126 +126 +130 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +148 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +173 +173 +175 +175 +178 +179 +179 +182 +182 +185 +185 +184 +188 +189 +190 +191 +191 +195 +195 +197 +196 +196 +198 +198 +201 +200 +200 +201 +200 +202 +202 +205 +204 +205 +204 +204 +206 +207 +207 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +206 +206 +204 +204 +204 +205 +204 +202 +202 +201 +200 +200 +201 +200 +198 +198 +199 +196 +196 +195 +194 +194 +190 +190 +189 +188 +188 +185 +185 +182 +182 +182 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +161 +161 +161 +157 +156 +151 +151 +151 +147 +147 +143 +143 +141 +139 +139 +134 +133 +129 +130 +130 +125 +125 +119 +119 +120 +115 +115 +115 +116 +116 +109 +110 +106 +106 +106 +100 +100 +96 +96 +93 +90 +90 +86 +86 +83 +82 +82 +76 +77 +72 +72 +72 +68 +68 +64 +64 +64 +59 +58 +54 +55 +55 +51 +50 +47 +47 +43 +42 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +13 +14 +14 +13 +14 +14 +14 +14 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +14 +13 +13 +14 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +32 +38 +37 +37 +40 +41 +43 +43 +43 +47 +47 +47 +46 +47 +50 +51 +54 +54 +54 +59 +58 +64 +64 +66 +68 +68 +73 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +90 +90 +90 +96 +96 +100 +100 +100 +106 +105 +110 +110 +115 +115 +115 +119 +119 +125 +125 +126 +130 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +158 +161 +161 +164 +164 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +182 +183 +184 +185 +185 +189 +189 +190 +190 +191 +195 +195 +196 +196 +199 +198 +198 +201 +201 +200 +200 +200 +203 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +207 +207 +207 +204 +204 +204 +205 +205 +202 +203 +200 +201 +200 +200 +200 +199 +198 +199 +196 +196 +194 +194 +195 +190 +191 +188 +189 +185 +184 +184 +183 +183 +179 +179 +178 +175 +175 +175 +174 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +134 +133 +129 +129 +129 +125 +126 +119 +119 +119 +116 +116 +110 +110 +108 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +77 +76 +72 +72 +68 +68 +69 +65 +64 +58 +58 +55 +55 +55 +51 +51 +47 +46 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +20 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +13 +14 +14 +13 +14 +13 +13 +14 +14 +14 +13 +14 +13 +13 +14 +14 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +15 +15 +15 +17 +18 +19 +19 +20 +21 +21 +25 +25 +27 +27 +27 +31 +30 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +51 +55 +55 +56 +59 +59 +64 +65 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +82 +82 +82 +87 +86 +90 +90 +90 +96 +96 +100 +100 +105 +106 +106 +110 +109 +115 +116 +116 +120 +120 +126 +125 +126 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +156 +157 +157 +161 +161 +164 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +179 +183 +182 +185 +185 +185 +188 +189 +190 +191 +195 +194 +194 +197 +196 +198 +198 +199 +200 +200 +200 +200 +200 +202 +203 +205 +204 +204 +204 +205 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +204 +204 +203 +202 +202 +200 +201 +200 +200 +201 +198 +199 +197 +197 +194 +194 +194 +191 +191 +189 +188 +188 +185 +184 +184 +184 +184 +182 +182 +178 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +160 +161 +161 +157 +157 +157 +157 +157 +151 +152 +152 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +130 +130 +129 +126 +126 +119 +120 +120 +116 +116 +110 +109 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +65 +65 +58 +59 +59 +54 +55 +50 +51 +50 +47 +47 +43 +43 +43 +40 +40 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +14 +14 +14 +14 +14 +13 +13 +13 +14 +13 +14 +14 +13 +13 +14 +14 +14 +13 +13 +14 +14 +14 +13 +13 +12 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +36 +37 +39 +41 +41 +43 +43 +48 +47 +47 +50 +50 +51 +50 +51 +54 +55 +54 +54 +54 +58 +58 +64 +65 +64 +68 +69 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +99 +106 +106 +106 +110 +110 +116 +115 +116 +119 +120 +126 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +160 +165 +165 +165 +169 +169 +173 +173 +175 +175 +175 +179 +179 +182 +183 +183 +184 +185 +188 +188 +188 +190 +190 +195 +195 +194 +197 +196 +198 +198 +199 +200 +201 +200 +200 +203 +202 +202 +204 +204 +204 +204 +205 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +207 +206 +206 +207 +204 +205 +204 +204 +202 +202 +202 +200 +201 +200 +200 +200 +198 +198 +196 +196 +196 +195 +195 +190 +190 +190 +188 +189 +185 +185 +184 +183 +183 +179 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +144 +143 +143 +139 +139 +133 +133 +133 +129 +130 +125 +125 +125 +120 +119 +115 +116 +115 +110 +109 +106 +106 +106 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +65 +58 +59 +55 +54 +54 +50 +51 +47 +47 +43 +43 +43 +40 +41 +37 +36 +36 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +12 +13 +14 +14 +14 +13 +13 +13 +14 +14 +13 +13 +14 +14 +13 +13 +14 +14 +13 +13 +14 +14 +14 +13 +14 +13 +14 +14 +13 +12 +15 +15 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +26 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +40 +43 +43 +43 +43 +43 +47 +47 +50 +50 +51 +54 +54 +59 +58 +62 +65 +64 +68 +68 +72 +72 +72 +76 +76 +82 +83 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +111 +112 +115 +115 +120 +119 +119 +119 +119 +125 +125 +129 +129 +129 +134 +134 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +178 +179 +183 +183 +182 +185 +184 +188 +189 +189 +191 +191 +194 +195 +197 +196 +196 +199 +198 +200 +201 +200 +200 +200 +202 +202 +202 +205 +205 +205 +205 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +204 +204 +204 +202 +203 +200 +200 +200 +200 +201 +198 +198 +197 +196 +196 +194 +195 +190 +190 +190 +189 +189 +184 +184 +185 +183 +183 +182 +183 +182 +178 +179 +175 +175 +175 +173 +173 +169 +169 +167 +164 +165 +161 +161 +156 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +134 +133 +129 +130 +130 +125 +126 +119 +119 +116 +116 +116 +110 +109 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +69 +69 +65 +64 +65 +58 +58 +54 +54 +55 +50 +51 +47 +47 +47 +43 +43 +41 +41 +40 +36 +37 +33 +33 +33 +31 +31 +27 +27 +26 +25 +25 +21 +21 +19 +19 +19 +17 +18 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +13 +14 +14 +14 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +14 +14 +14 +13 +13 +14 +13 +14 +13 +14 +14 +13 +13 +13 +12 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +42 +47 +47 +50 +51 +51 +54 +55 +58 +58 +59 +64 +64 +69 +69 +69 +72 +72 +76 +75 +76 +82 +82 +86 +86 +90 +90 +90 +96 +95 +100 +100 +100 +106 +106 +109 +110 +109 +115 +116 +120 +119 +119 +125 +125 +129 +130 +129 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +168 +169 +173 +173 +175 +175 +174 +179 +178 +183 +182 +185 +184 +185 +189 +189 +190 +191 +190 +194 +194 +196 +196 +196 +198 +198 +200 +201 +200 +200 +200 +202 +202 +203 +205 +204 +204 +205 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +204 +204 +203 +204 +204 +203 +202 +201 +201 +201 +201 +201 +198 +198 +199 +196 +196 +195 +195 +194 +191 +190 +191 +190 +191 +188 +188 +185 +185 +185 +183 +183 +179 +179 +177 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +144 +143 +143 +139 +139 +133 +133 +129 +130 +129 +125 +125 +119 +120 +119 +116 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +69 +68 +64 +64 +59 +58 +59 +54 +54 +51 +50 +50 +46 +46 +43 +43 +43 +41 +40 +37 +36 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +16 +13 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +14 +14 +14 +13 +13 +14 +14 +13 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +32 +36 +37 +37 +41 +40 +43 +43 +43 +46 +47 +51 +51 +50 +55 +55 +58 +58 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +109 +110 +115 +116 +120 +119 +120 +126 +125 +129 +129 +133 +133 +133 +139 +139 +144 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +168 +168 +169 +173 +173 +175 +175 +178 +178 +178 +183 +182 +184 +184 +185 +188 +189 +190 +190 +191 +194 +194 +197 +197 +196 +198 +198 +200 +201 +200 +200 +200 +202 +202 +204 +204 +203 +204 +204 +206 +206 +207 +207 +207 +207 +206 +207 +206 +207 +206 +206 +206 +206 +207 +206 +206 +207 +204 +204 +204 +204 +202 +203 +202 +201 +201 +200 +200 +201 +198 +198 +199 +198 +198 +196 +196 +194 +195 +195 +190 +191 +189 +189 +185 +185 +185 +182 +183 +178 +179 +179 +175 +175 +172 +172 +173 +168 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +143 +143 +143 +140 +139 +133 +133 +133 +129 +129 +125 +125 +126 +119 +119 +115 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +91 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +68 +68 +64 +64 +65 +58 +58 +55 +55 +55 +50 +50 +47 +46 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +33 +32 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +22 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +14 +13 +14 +13 +14 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +14 +13 +14 +14 +14 +14 +13 +14 +14 +13 +13 +14 +14 +13 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +40 +43 +43 +46 +47 +47 +50 +50 +54 +54 +58 +58 +58 +64 +65 +68 +68 +68 +72 +72 +76 +76 +77 +82 +82 +86 +86 +86 +90 +90 +96 +96 +95 +99 +100 +106 +106 +110 +110 +110 +115 +116 +119 +120 +120 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +148 +151 +151 +157 +157 +161 +161 +161 +165 +164 +165 +165 +165 +169 +168 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +184 +185 +186 +189 +189 +190 +191 +194 +194 +195 +196 +196 +198 +199 +198 +200 +201 +200 +200 +201 +200 +201 +203 +202 +202 +204 +204 +204 +205 +205 +206 +207 +207 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +204 +204 +205 +205 +204 +202 +202 +200 +200 +200 +201 +201 +198 +199 +197 +196 +197 +195 +194 +191 +190 +190 +188 +188 +185 +184 +184 +182 +183 +179 +178 +179 +175 +175 +173 +173 +169 +169 +169 +164 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +134 +129 +129 +125 +126 +119 +119 +120 +116 +116 +110 +110 +110 +106 +106 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +73 +73 +72 +68 +68 +64 +64 +64 +59 +59 +54 +54 +54 +50 +50 +47 +46 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +30 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +14 +12 +13 +13 +13 +13 +13 +14 +13 +14 +13 +14 +14 +14 +13 +14 +14 +14 +13 +14 +13 +13 +14 +13 +14 +14 +14 +14 +13 +13 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +40 +41 +41 +43 +43 +43 +43 +43 +47 +47 +51 +50 +51 +55 +54 +58 +58 +59 +65 +64 +68 +68 +68 +72 +73 +76 +76 +82 +83 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +115 +120 +120 +119 +126 +125 +129 +129 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +178 +178 +179 +183 +182 +185 +184 +185 +189 +189 +188 +189 +188 +190 +191 +194 +194 +195 +196 +197 +198 +199 +199 +201 +201 +200 +200 +202 +203 +204 +204 +204 +204 +204 +206 +207 +206 +206 +206 +207 +206 +206 +206 +207 +207 +206 +206 +206 +207 +207 +207 +204 +204 +204 +204 +204 +202 +202 +200 +201 +200 +200 +200 +198 +198 +199 +197 +197 +195 +195 +195 +191 +191 +189 +189 +187 +184 +185 +183 +183 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +134 +133 +129 +130 +126 +125 +125 +120 +120 +116 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +91 +90 +90 +86 +86 +82 +82 +83 +76 +76 +72 +72 +72 +68 +69 +65 +64 +64 +59 +58 +55 +55 +54 +51 +50 +47 +46 +43 +42 +42 +40 +40 +37 +37 +37 +33 +33 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +20 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +13 +14 +13 +14 +14 +13 +13 +14 +13 +14 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +24 +24 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +36 +41 +41 +43 +42 +43 +47 +47 +51 +51 +51 +55 +54 +58 +58 +64 +65 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +116 +116 +116 +119 +120 +125 +125 +125 +130 +129 +133 +133 +134 +139 +139 +143 +143 +143 +147 +147 +151 +152 +151 +157 +157 +161 +160 +166 +165 +165 +169 +169 +173 +173 +173 +175 +174 +175 +175 +175 +179 +179 +183 +182 +183 +185 +185 +189 +189 +189 +191 +191 +195 +195 +196 +196 +196 +198 +199 +200 +201 +200 +200 +201 +201 +200 +200 +203 +202 +204 +204 +205 +204 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +204 +204 +204 +204 +204 +202 +202 +200 +200 +200 +200 +200 +198 +198 +197 +196 +197 +194 +194 +190 +191 +191 +189 +189 +185 +185 +184 +183 +183 +179 +178 +179 +175 +175 +173 +172 +173 +169 +168 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +148 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +125 +119 +120 +116 +116 +110 +109 +110 +106 +106 +100 +100 +100 +95 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +69 +69 +65 +64 +59 +58 +58 +55 +55 +50 +51 +50 +47 +47 +46 +47 +47 +43 +42 +40 +41 +41 +37 +36 +33 +32 +32 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +17 +17 +17 +15 +15 +15 +15 +16 +13 +13 +12 +12 +14 +14 +13 +14 +14 +14 +14 +13 +14 +13 +14 +14 +13 +14 +14 +13 +13 +14 +14 +14 +13 +13 +14 +13 +13 +14 +13 +16 +15 +16 +17 +17 +17 +17 +17 +19 +19 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +40 +41 +41 +43 +43 +47 +47 +47 +51 +51 +54 +54 +54 +58 +58 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +87 +87 +86 +90 +90 +96 +96 +96 +99 +100 +106 +106 +106 +110 +110 +115 +115 +116 +120 +119 +125 +125 +126 +130 +129 +134 +133 +140 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +182 +183 +183 +184 +185 +189 +188 +189 +191 +190 +191 +191 +190 +194 +194 +196 +196 +197 +198 +199 +200 +200 +201 +201 +200 +203 +202 +204 +204 +204 +204 +205 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +204 +205 +204 +204 +205 +202 +202 +200 +200 +201 +200 +200 +199 +199 +198 +197 +197 +195 +194 +195 +191 +191 +189 +189 +188 +185 +184 +182 +183 +179 +179 +178 +175 +175 +172 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +148 +143 +143 +139 +139 +134 +133 +134 +129 +130 +125 +125 +125 +120 +120 +115 +116 +116 +110 +110 +106 +106 +105 +100 +100 +96 +96 +96 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +68 +68 +68 +65 +65 +58 +59 +59 +54 +55 +51 +50 +49 +47 +47 +42 +43 +40 +41 +41 +37 +37 +33 +33 +33 +31 +31 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +12 +14 +14 +13 +14 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +14 +14 +13 +14 +13 +13 +14 +14 +14 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +42 +46 +46 +50 +50 +51 +55 +54 +58 +59 +58 +64 +64 +68 +68 +71 +73 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +110 +111 +116 +115 +120 +119 +125 +125 +126 +129 +129 +133 +134 +133 +139 +139 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +158 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +179 +179 +178 +182 +182 +184 +184 +184 +188 +189 +190 +190 +194 +194 +195 +196 +197 +198 +198 +198 +200 +200 +200 +201 +200 +202 +202 +205 +204 +204 +205 +205 +207 +206 +207 +207 +207 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +205 +204 +204 +205 +204 +202 +202 +201 +201 +200 +200 +200 +199 +198 +199 +196 +197 +195 +194 +190 +190 +191 +188 +188 +185 +185 +185 +183 +182 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +152 +151 +151 +147 +147 +143 +143 +143 +139 +139 +134 +133 +133 +129 +129 +125 +125 +125 +119 +119 +116 +116 +116 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +65 +64 +65 +59 +58 +54 +54 +50 +50 +51 +47 +47 +42 +43 +43 +41 +41 +40 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +20 +20 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +14 +14 +13 +14 +14 +14 +13 +13 +14 +13 +13 +14 +13 +13 +14 +13 +13 +15 +15 +15 +17 +18 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +36 +40 +41 +41 +43 +43 +46 +47 +47 +50 +50 +54 +54 +59 +58 +59 +64 +64 +68 +68 +68 +72 +73 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +97 +100 +100 +106 +106 +110 +110 +110 +115 +116 +120 +120 +119 +126 +125 +125 +126 +126 +130 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +158 +157 +157 +161 +161 +165 +165 +165 +169 +169 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +182 +183 +184 +185 +184 +189 +188 +190 +191 +190 +194 +194 +196 +196 +196 +198 +198 +200 +200 +200 +200 +201 +202 +202 +203 +204 +205 +204 +204 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +204 +204 +204 +204 +205 +203 +202 +202 +200 +201 +201 +201 +199 +198 +198 +197 +197 +194 +194 +194 +191 +190 +189 +188 +189 +185 +185 +183 +183 +183 +179 +178 +175 +174 +175 +173 +173 +169 +169 +165 +165 +164 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +134 +129 +129 +130 +125 +126 +119 +119 +115 +115 +116 +110 +110 +106 +106 +106 +100 +100 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +83 +83 +76 +76 +72 +73 +68 +68 +69 +64 +65 +58 +58 +59 +54 +55 +55 +54 +55 +51 +51 +47 +47 +46 +43 +42 +41 +41 +39 +37 +36 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +12 +13 +13 +14 +14 +14 +13 +14 +14 +14 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +14 +14 +14 +14 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +27 +27 +31 +31 +31 +33 +33 +36 +37 +41 +41 +41 +42 +43 +46 +47 +47 +51 +51 +55 +55 +54 +58 +58 +65 +64 +64 +68 +68 +72 +72 +73 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +105 +106 +110 +110 +116 +116 +115 +119 +119 +126 +125 +125 +129 +129 +133 +134 +140 +139 +139 +143 +143 +147 +147 +147 +151 +151 +151 +151 +151 +158 +157 +161 +160 +162 +165 +165 +169 +169 +170 +172 +174 +175 +175 +178 +179 +179 +183 +183 +185 +185 +184 +188 +189 +190 +191 +191 +195 +195 +196 +196 +197 +198 +198 +200 +201 +201 +200 +201 +202 +202 +204 +205 +204 +204 +204 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +204 +204 +205 +205 +205 +203 +202 +200 +201 +201 +200 +200 +198 +199 +198 +196 +196 +195 +194 +195 +191 +191 +189 +189 +189 +185 +185 +183 +183 +179 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +133 +133 +133 +129 +130 +126 +125 +125 +119 +119 +120 +120 +120 +115 +116 +110 +110 +110 +105 +106 +100 +100 +98 +96 +95 +90 +90 +86 +86 +86 +82 +83 +76 +76 +76 +72 +72 +72 +72 +72 +68 +68 +64 +64 +65 +58 +59 +55 +55 +52 +51 +51 +46 +46 +43 +42 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +16 +15 +13 +13 +12 +13 +13 +13 +14 +13 +13 +14 +14 +13 +14 +13 +13 +13 +14 +13 +13 +13 +14 +13 +14 +14 +14 +13 +14 +14 +14 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +32 +31 +31 +33 +33 +37 +37 +37 +41 +41 +41 +41 +41 +43 +43 +47 +47 +47 +50 +50 +54 +55 +55 +58 +59 +65 +64 +69 +69 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +107 +109 +110 +115 +116 +119 +119 +119 +125 +125 +130 +129 +129 +133 +133 +133 +133 +133 +139 +139 +143 +143 +144 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +168 +169 +173 +173 +173 +174 +175 +179 +179 +179 +182 +183 +184 +185 +184 +189 +189 +190 +190 +194 +194 +195 +196 +197 +198 +198 +199 +200 +200 +200 +201 +200 +200 +200 +203 +202 +203 +204 +204 +205 +204 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +205 +204 +204 +202 +203 +200 +200 +200 +201 +200 +198 +198 +196 +197 +197 +195 +195 +191 +190 +190 +189 +189 +185 +185 +184 +183 +182 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +160 +161 +161 +157 +157 +151 +151 +152 +147 +147 +147 +147 +148 +143 +143 +139 +139 +139 +133 +133 +129 +129 +130 +126 +125 +119 +119 +115 +115 +115 +110 +110 +105 +105 +106 +100 +100 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +69 +69 +64 +64 +59 +58 +58 +55 +55 +51 +51 +50 +46 +47 +43 +43 +43 +41 +40 +36 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +16 +15 +15 +13 +13 +12 +13 +14 +14 +14 +13 +14 +14 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +14 +13 +14 +14 +14 +14 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +38 +41 +41 +43 +43 +46 +47 +47 +51 +51 +55 +55 +55 +58 +58 +58 +58 +58 +64 +65 +68 +68 +68 +72 +72 +76 +76 +79 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +105 +106 +106 +106 +106 +110 +110 +115 +115 +116 +120 +120 +125 +125 +129 +130 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +172 +175 +175 +175 +178 +182 +182 +183 +183 +185 +185 +188 +189 +188 +190 +191 +195 +195 +195 +196 +197 +198 +198 +199 +201 +200 +200 +201 +202 +202 +202 +204 +204 +205 +204 +204 +207 +207 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +205 +204 +205 +205 +203 +203 +203 +200 +200 +200 +200 +200 +198 +200 +196 +196 +196 +195 +194 +190 +191 +190 +189 +189 +185 +184 +185 +182 +183 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +144 +143 +140 +139 +133 +133 +130 +129 +129 +125 +125 +119 +119 +119 +116 +116 +116 +115 +116 +109 +110 +106 +106 +106 +99 +100 +96 +96 +93 +90 +90 +86 +86 +83 +82 +82 +77 +76 +72 +73 +73 +68 +68 +64 +65 +64 +58 +58 +54 +54 +55 +51 +50 +46 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +14 +14 +13 +14 +13 +14 +14 +13 +13 +13 +14 +14 +14 +13 +14 +14 +13 +14 +14 +14 +14 +13 +13 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +43 +43 +43 +47 +47 +51 +51 +51 +54 +54 +58 +58 +61 +65 +64 +68 +68 +72 +72 +73 +77 +76 +82 +82 +82 +86 +86 +86 +86 +86 +90 +90 +96 +96 +96 +100 +99 +106 +106 +109 +110 +110 +115 +116 +120 +119 +120 +125 +125 +129 +129 +129 +133 +134 +139 +139 +139 +143 +143 +147 +147 +148 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +184 +184 +184 +188 +189 +191 +190 +194 +194 +195 +197 +196 +198 +198 +198 +201 +201 +201 +201 +200 +202 +202 +205 +204 +204 +205 +204 +206 +207 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +205 +204 +204 +204 +204 +203 +202 +201 +200 +201 +200 +200 +198 +198 +200 +197 +197 +195 +194 +190 +190 +191 +189 +189 +185 +185 +184 +183 +182 +183 +183 +182 +179 +179 +174 +175 +175 +173 +173 +169 +169 +167 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +144 +143 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +126 +123 +120 +119 +115 +116 +109 +110 +110 +106 +106 +100 +100 +99 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +77 +72 +72 +69 +68 +68 +65 +64 +59 +59 +58 +55 +55 +50 +51 +50 +46 +46 +43 +43 +43 +40 +41 +37 +37 +38 +32 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +13 +14 +14 +13 +14 +13 +13 +13 +14 +13 +14 +14 +13 +13 +14 +13 +14 +14 +13 +14 +13 +13 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +42 +47 +46 +51 +50 +50 +54 +55 +58 +59 +59 +64 +65 +64 +64 +65 +68 +68 +72 +72 +72 +76 +76 +82 +82 +86 +86 +86 +90 +90 +95 +96 +96 +99 +100 +106 +106 +106 +110 +109 +116 +115 +116 +119 +120 +125 +125 +126 +129 +130 +133 +133 +139 +139 +139 +144 +143 +147 +148 +147 +150 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +172 +174 +175 +179 +178 +183 +183 +183 +185 +184 +188 +188 +188 +190 +191 +195 +194 +195 +196 +196 +198 +198 +198 +201 +200 +200 +201 +201 +202 +202 +205 +204 +205 +205 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +204 +204 +204 +204 +205 +202 +202 +200 +200 +200 +200 +201 +198 +198 +196 +196 +196 +195 +194 +194 +194 +194 +190 +190 +188 +188 +188 +184 +184 +183 +182 +181 +178 +179 +175 +175 +172 +173 +173 +169 +169 +165 +165 +165 +161 +161 +161 +161 +161 +157 +157 +151 +151 +151 +148 +148 +143 +143 +141 +139 +139 +133 +133 +129 +129 +129 +125 +125 +120 +119 +119 +115 +115 +110 +110 +110 +106 +106 +99 +100 +100 +96 +96 +90 +90 +88 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +59 +59 +55 +55 +50 +50 +51 +47 +47 +43 +43 +41 +41 +40 +37 +37 +33 +34 +33 +31 +31 +27 +27 +27 +25 +25 +21 +22 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +13 +13 +14 +14 +13 +14 +13 +13 +14 +14 +14 +14 +14 +14 +14 +14 +14 +13 +14 +14 +14 +13 +13 +14 +14 +14 +14 +13 +13 +15 +15 +15 +17 +17 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +37 +37 +37 +41 +41 +42 +43 +43 +47 +47 +47 +47 +47 +50 +50 +54 +55 +55 +58 +58 +64 +64 +68 +68 +68 +72 +72 +77 +76 +76 +82 +83 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +105 +106 +106 +110 +110 +115 +115 +119 +119 +119 +126 +126 +129 +129 +130 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +174 +175 +179 +179 +183 +183 +183 +185 +185 +189 +188 +188 +191 +190 +194 +195 +195 +196 +196 +199 +199 +201 +201 +200 +200 +200 +202 +202 +202 +204 +205 +204 +204 +204 +206 +206 +206 +207 +206 +206 +207 +206 +206 +207 +206 +206 +206 +207 +204 +204 +205 +204 +204 +202 +202 +202 +201 +200 +200 +200 +200 +200 +201 +198 +199 +198 +196 +196 +194 +194 +193 +190 +191 +188 +188 +184 +185 +185 +183 +183 +179 +179 +178 +175 +175 +175 +174 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +130 +130 +129 +125 +125 +119 +119 +120 +115 +115 +110 +109 +107 +106 +106 +101 +100 +96 +96 +96 +89 +90 +86 +86 +86 +82 +82 +76 +76 +76 +73 +72 +69 +68 +69 +64 +64 +58 +58 +55 +55 +54 +50 +50 +47 +47 +47 +42 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +20 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +14 +13 +14 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +26 +25 +25 +27 +27 +31 +31 +31 +33 +33 +33 +33 +33 +36 +37 +41 +41 +41 +43 +43 +47 +47 +48 +50 +50 +55 +54 +58 +59 +58 +64 +64 +68 +68 +68 +72 +72 +76 +77 +76 +82 +82 +86 +86 +87 +89 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +115 +119 +119 +119 +125 +125 +129 +129 +129 +133 +134 +139 +139 +139 +143 +143 +147 +147 +149 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +178 +179 +182 +183 +183 +184 +184 +188 +189 +191 +190 +191 +195 +195 +197 +196 +196 +198 +198 +200 +201 +200 +200 +200 +202 +202 +203 +204 +204 +205 +204 +205 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +205 +204 +202 +203 +200 +200 +200 +201 +200 +199 +199 +196 +196 +197 +194 +194 +190 +190 +191 +189 +189 +189 +188 +189 +185 +184 +183 +183 +182 +179 +179 +175 +175 +173 +173 +173 +169 +168 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +140 +133 +133 +129 +129 +125 +125 +126 +120 +119 +115 +115 +116 +110 +110 +106 +105 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +58 +59 +58 +59 +58 +55 +54 +50 +51 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +34 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +14 +13 +14 +13 +14 +14 +14 +14 +14 +14 +13 +14 +13 +13 +14 +13 +14 +14 +14 +14 +14 +13 +14 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +19 +19 +19 +21 +21 +25 +25 +26 +27 +27 +31 +31 +32 +33 +33 +38 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +50 +54 +54 +54 +59 +58 +64 +64 +65 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +109 +116 +116 +115 +119 +119 +125 +125 +129 +129 +129 +134 +133 +139 +139 +139 +143 +143 +147 +148 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +168 +169 +172 +173 +175 +175 +175 +179 +178 +183 +182 +183 +184 +185 +189 +188 +188 +190 +190 +195 +194 +194 +196 +197 +198 +199 +199 +200 +200 +200 +200 +202 +202 +203 +204 +205 +204 +204 +205 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +204 +204 +204 +204 +205 +203 +203 +200 +201 +200 +200 +201 +201 +200 +200 +198 +199 +197 +196 +196 +194 +194 +191 +191 +189 +188 +189 +185 +185 +183 +183 +182 +179 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +119 +119 +115 +115 +110 +109 +110 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +65 +59 +58 +59 +55 +54 +51 +50 +47 +47 +47 +43 +43 +41 +41 +40 +37 +37 +33 +33 +33 +30 +31 +26 +27 +27 +25 +26 +21 +21 +21 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +14 +13 +13 +13 +13 +14 +14 +13 +13 +14 +14 +13 +14 +14 +13 +13 +14 +13 +13 +14 +14 +13 +13 +14 +14 +14 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +46 +47 +47 +50 +50 +55 +54 +58 +59 +58 +65 +64 +68 +68 +69 +72 +72 +77 +76 +77 +82 +82 +86 +86 +86 +90 +90 +95 +96 +96 +100 +100 +106 +106 +110 +110 +110 +116 +115 +119 +120 +120 +125 +125 +129 +129 +130 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +160 +161 +161 +165 +165 +169 +169 +169 +173 +173 +174 +175 +175 +178 +179 +183 +182 +183 +184 +185 +188 +188 +189 +191 +190 +194 +194 +196 +196 +197 +199 +198 +200 +201 +201 +200 +201 +200 +200 +200 +202 +203 +204 +204 +204 +204 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +204 +204 +202 +202 +203 +200 +200 +200 +200 +198 +198 +198 +196 +196 +194 +195 +194 +191 +191 +188 +188 +188 +185 +184 +182 +183 +183 +179 +178 +175 +175 +175 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +144 +143 +140 +140 +140 +134 +133 +129 +129 +130 +125 +126 +119 +119 +115 +115 +116 +110 +109 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +65 +64 +64 +58 +58 +55 +55 +54 +51 +50 +47 +47 +47 +43 +43 +41 +41 +40 +37 +36 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +13 +14 +14 +14 +13 +14 +13 +13 +13 +14 +13 +14 +13 +14 +14 +13 +13 +13 +14 +13 +14 +13 +13 +13 +12 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +28 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +40 +43 +43 +47 +47 +47 +50 +51 +54 +55 +55 +58 +58 +64 +64 +64 +68 +68 +72 +72 +73 +76 +77 +82 +82 +82 +86 +86 +90 +90 +95 +96 +96 +100 +100 +105 +106 +106 +110 +110 +115 +116 +116 +119 +120 +125 +125 +125 +129 +130 +133 +134 +133 +139 +139 +143 +143 +148 +146 +147 +151 +151 +157 +156 +157 +161 +161 +161 +161 +161 +165 +165 +168 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +184 +185 +184 +189 +189 +190 +190 +191 +194 +195 +196 +196 +196 +199 +199 +201 +200 +200 +200 +200 +202 +202 +204 +204 +205 +204 +205 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +207 +207 +206 +205 +205 +204 +204 +204 +203 +202 +200 +200 +201 +200 +200 +198 +198 +196 +197 +196 +195 +194 +191 +191 +190 +188 +189 +184 +184 +184 +182 +182 +179 +179 +179 +174 +175 +173 +172 +169 +169 +168 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +140 +139 +134 +133 +130 +129 +129 +125 +125 +119 +120 +119 +116 +115 +109 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +91 +86 +86 +82 +82 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +68 +68 +68 +64 +64 +58 +59 +58 +55 +54 +50 +51 +51 +46 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +14 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +14 +14 +13 +13 +13 +14 +14 +13 +13 +14 +13 +14 +13 +13 +13 +15 +15 +16 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +42 +43 +43 +47 +47 +50 +51 +51 +55 +54 +58 +58 +59 +64 +65 +69 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +95 +96 +100 +100 +100 +106 +106 +110 +109 +110 +115 +115 +119 +120 +126 +125 +125 +130 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +173 +173 +174 +175 +175 +179 +178 +179 +183 +183 +184 +185 +184 +188 +189 +190 +190 +191 +194 +194 +196 +196 +196 +199 +199 +200 +200 +200 +200 +200 +202 +202 +205 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +200 +200 +200 +200 +201 +198 +199 +198 +196 +196 +195 +194 +195 +191 +190 +188 +188 +184 +184 +185 +183 +182 +179 +179 +179 +175 +174 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +144 +143 +143 +139 +139 +133 +134 +134 +129 +130 +125 +125 +125 +119 +119 +116 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +91 +90 +90 +86 +86 +83 +82 +82 +76 +76 +72 +72 +73 +68 +69 +64 +65 +65 +58 +59 +55 +54 +55 +51 +50 +46 +47 +43 +43 +42 +41 +41 +37 +37 +37 +33 +33 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +20 +19 +19 +17 +17 +15 +15 +15 +15 +16 +13 +13 +13 +12 +13 +13 +14 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +14 +13 +13 +14 +13 +14 +14 +13 +13 +13 +14 +14 +14 +13 +14 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +42 +43 +43 +47 +47 +50 +50 +51 +55 +55 +58 +59 +65 +64 +64 +69 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +109 +116 +116 +115 +120 +119 +125 +125 +125 +129 +130 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +148 +151 +151 +157 +157 +160 +161 +161 +165 +165 +169 +169 +169 +173 +173 +173 +173 +173 +175 +175 +179 +179 +178 +183 +183 +184 +184 +186 +188 +189 +190 +190 +194 +195 +195 +196 +196 +198 +198 +199 +200 +201 +201 +200 +200 +200 +200 +202 +202 +203 +204 +204 +205 +204 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +204 +204 +205 +204 +205 +202 +202 +203 +200 +201 +201 +201 +199 +199 +198 +196 +197 +194 +195 +195 +190 +190 +188 +189 +188 +185 +185 +182 +183 +183 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +156 +151 +151 +147 +147 +147 +143 +143 +140 +139 +139 +133 +133 +129 +129 +130 +126 +125 +119 +120 +116 +115 +116 +110 +110 +106 +105 +105 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +65 +64 +64 +59 +59 +54 +55 +55 +51 +51 +47 +47 +47 +42 +43 +40 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +17 +17 +17 +15 +15 +15 +15 +15 +13 +12 +12 +13 +14 +13 +13 +14 +14 +14 +14 +13 +14 +14 +13 +14 +13 +14 +13 +14 +14 +14 +13 +14 +13 +13 +14 +13 +13 +13 +13 +12 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +47 +47 +47 +51 +50 +55 +54 +54 +58 +58 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +83 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +109 +110 +110 +110 +110 +115 +115 +120 +120 +120 +126 +125 +130 +129 +130 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +182 +183 +183 +184 +184 +188 +189 +188 +190 +191 +190 +191 +190 +195 +194 +197 +196 +197 +198 +199 +200 +200 +200 +201 +201 +202 +202 +204 +205 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +207 +204 +204 +204 +204 +204 +202 +202 +202 +202 +203 +201 +200 +200 +200 +200 +198 +199 +197 +197 +196 +194 +194 +191 +190 +191 +188 +189 +184 +184 +183 +183 +183 +178 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +146 +143 +144 +140 +139 +139 +133 +133 +129 +129 +129 +125 +126 +119 +119 +119 +115 +115 +110 +109 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +77 +77 +72 +72 +69 +68 +68 +65 +64 +58 +58 +59 +54 +55 +50 +51 +48 +46 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +20 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +14 +14 +14 +13 +14 +13 +13 +14 +14 +14 +13 +14 +14 +14 +14 +13 +13 +13 +13 +14 +14 +13 +14 +14 +13 +15 +15 +17 +18 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +31 +31 +32 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +51 +51 +55 +55 +59 +59 +58 +64 +64 +69 +68 +73 +72 +72 +76 +77 +83 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +105 +110 +109 +110 +115 +116 +119 +119 +125 +125 +125 +129 +129 +134 +133 +133 +139 +139 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +158 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +178 +179 +178 +179 +178 +183 +182 +184 +184 +185 +189 +188 +191 +190 +192 +194 +195 +196 +197 +198 +198 +198 +200 +200 +201 +200 +200 +202 +202 +205 +204 +205 +204 +204 +206 +206 +206 +207 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +201 +201 +200 +200 +201 +198 +198 +198 +196 +196 +195 +194 +191 +190 +190 +188 +188 +184 +184 +184 +182 +183 +178 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +160 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +134 +133 +130 +129 +125 +125 +126 +120 +120 +116 +115 +116 +110 +109 +106 +106 +99 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +69 +64 +64 +61 +58 +59 +54 +55 +51 +50 +51 +47 +47 +43 +43 +43 +41 +41 +40 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +14 +13 +13 +14 +13 +13 +14 +14 +14 +14 +14 +13 +14 +14 +14 +14 +13 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +36 +37 +41 +40 +41 +43 +43 +47 +47 +46 +50 +50 +54 +54 +58 +58 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +99 +106 +106 +110 +110 +109 +116 +115 +119 +119 +119 +125 +125 +126 +125 +125 +129 +130 +134 +133 +133 +139 +139 +143 +143 +144 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +168 +169 +169 +169 +169 +173 +172 +175 +175 +175 +179 +178 +182 +182 +184 +185 +185 +188 +188 +194 +194 +194 +196 +197 +196 +197 +196 +198 +198 +200 +201 +200 +200 +200 +203 +202 +203 +204 +205 +204 +204 +205 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +204 +204 +204 +204 +205 +202 +203 +203 +200 +201 +201 +200 +199 +198 +198 +196 +196 +194 +194 +194 +190 +190 +189 +188 +189 +184 +185 +183 +182 +182 +179 +178 +175 +175 +175 +173 +173 +168 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +130 +130 +130 +125 +125 +119 +119 +115 +115 +115 +109 +110 +106 +106 +106 +100 +100 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +79 +76 +76 +72 +72 +68 +69 +69 +65 +64 +59 +58 +58 +55 +55 +54 +54 +54 +51 +51 +47 +46 +47 +43 +43 +41 +40 +39 +37 +36 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +14 +13 +14 +14 +14 +14 +14 +14 +13 +14 +13 +13 +14 +14 +13 +14 +14 +14 +13 +13 +13 +15 +15 +17 +17 +17 +18 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +40 +43 +43 +43 +47 +47 +51 +51 +51 +54 +55 +59 +59 +58 +64 +65 +68 +68 +68 +72 +72 +76 +76 +77 +82 +82 +86 +86 +91 +90 +90 +96 +96 +100 +100 +100 +106 +106 +106 +106 +106 +110 +110 +116 +115 +116 +119 +119 +125 +125 +127 +129 +130 +134 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +171 +173 +173 +175 +175 +179 +179 +179 +183 +182 +185 +185 +185 +188 +188 +190 +190 +191 +194 +194 +197 +197 +196 +199 +199 +200 +200 +201 +201 +200 +202 +203 +205 +205 +205 +204 +204 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +205 +204 +204 +204 +205 +202 +202 +200 +200 +200 +200 +201 +198 +198 +198 +196 +196 +194 +195 +194 +190 +191 +189 +189 +188 +184 +185 +183 +183 +179 +178 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +144 +143 +139 +139 +133 +133 +133 +129 +129 +126 +126 +126 +119 +119 +116 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +69 +68 +68 +68 +68 +64 +65 +59 +58 +58 +55 +54 +50 +50 +48 +47 +47 +43 +43 +41 +41 +41 +36 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +14 +13 +13 +14 +14 +13 +13 +13 +13 +14 +13 +14 +14 +14 +13 +13 +13 +14 +13 +15 +15 +15 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +40 +43 +43 +43 +47 +47 +51 +51 +50 +54 +54 +58 +58 +59 +64 +65 +68 +69 +72 +73 +72 +76 +77 +82 +82 +82 +86 +86 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +107 +110 +110 +115 +115 +119 +120 +120 +125 +125 +130 +129 +129 +133 +133 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +153 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +172 +173 +174 +175 +179 +179 +179 +183 +183 +184 +184 +185 +189 +189 +190 +190 +193 +194 +194 +196 +196 +199 +199 +199 +200 +200 +201 +200 +200 +202 +202 +204 +204 +204 +205 +204 +206 +206 +207 +206 +207 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +205 +204 +204 +204 +204 +202 +202 +201 +200 +200 +200 +200 +199 +198 +198 +196 +197 +195 +194 +191 +190 +190 +189 +188 +184 +185 +185 +183 +183 +179 +178 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +156 +151 +151 +151 +147 +147 +143 +143 +144 +139 +139 +139 +139 +139 +133 +134 +129 +130 +130 +125 +126 +119 +119 +118 +116 +115 +110 +109 +105 +106 +106 +100 +100 +96 +96 +96 +90 +90 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +73 +69 +68 +68 +64 +64 +58 +58 +59 +54 +54 +50 +50 +50 +46 +47 +43 +42 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +28 +27 +27 +25 +25 +21 +21 +21 +19 +20 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +14 +13 +14 +14 +14 +13 +13 +13 +13 +13 +14 +13 +13 +14 +14 +14 +13 +14 +14 +14 +13 +13 +13 +13 +12 +15 +15 +17 +17 +20 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +36 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +50 +55 +55 +54 +58 +59 +65 +64 +64 +68 +68 +72 +72 +72 +76 +77 +82 +82 +82 +87 +86 +90 +90 +90 +96 +96 +100 +99 +106 +106 +106 +110 +110 +116 +116 +115 +120 +119 +119 +120 +120 +125 +126 +129 +130 +129 +134 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +162 +165 +165 +169 +169 +170 +173 +173 +175 +175 +175 +179 +179 +183 +183 +185 +185 +184 +189 +188 +191 +191 +191 +195 +194 +197 +197 +196 +198 +198 +200 +200 +201 +201 +200 +202 +203 +202 +204 +205 +204 +204 +206 +206 +206 +207 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +207 +204 +205 +204 +204 +204 +202 +203 +203 +201 +200 +200 +200 +199 +198 +198 +196 +196 +194 +194 +194 +190 +191 +189 +188 +188 +185 +185 +183 +183 +183 +178 +179 +175 +175 +175 +173 +173 +168 +169 +166 +165 +165 +161 +161 +157 +157 +157 +151 +151 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +134 +133 +129 +129 +125 +125 +119 +119 +119 +115 +116 +109 +110 +110 +106 +106 +106 +106 +105 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +83 +83 +76 +76 +72 +72 +72 +68 +68 +65 +65 +64 +58 +59 +54 +54 +54 +51 +50 +47 +47 +47 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +27 +27 +27 +25 +25 +20 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +13 +13 +14 +14 +14 +13 +13 +13 +14 +13 +14 +13 +13 +13 +13 +13 +14 +14 +14 +14 +14 +14 +13 +14 +14 +13 +14 +13 +15 +15 +15 +17 +17 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +28 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +51 +54 +55 +58 +59 +58 +64 +64 +68 +68 +69 +72 +73 +76 +77 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +96 +96 +96 +100 +100 +105 +106 +106 +109 +109 +116 +115 +119 +120 +119 +125 +125 +129 +130 +129 +133 +133 +139 +140 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +158 +161 +162 +165 +165 +168 +169 +169 +173 +172 +175 +175 +175 +179 +178 +183 +183 +183 +185 +184 +189 +189 +188 +191 +191 +194 +194 +195 +196 +197 +198 +199 +200 +201 +200 +200 +200 +202 +202 +202 +204 +204 +205 +205 +205 +206 +206 +206 +207 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +205 +204 +205 +204 +204 +202 +202 +202 +201 +200 +201 +200 +200 +198 +198 +196 +197 +196 +194 +195 +191 +191 +189 +189 +185 +185 +182 +182 +182 +179 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +152 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +130 +130 +125 +125 +126 +126 +126 +119 +120 +116 +115 +116 +110 +110 +106 +106 +101 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +69 +64 +65 +65 +59 +58 +54 +54 +51 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +13 +14 +13 +14 +13 +14 +14 +14 +14 +14 +13 +14 +14 +14 +14 +13 +13 +13 +14 +14 +13 +14 +13 +13 +13 +14 +13 +15 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +36 +37 +37 +36 +37 +40 +41 +43 +43 +43 +47 +47 +50 +51 +51 +55 +54 +59 +58 +64 +64 +64 +68 +68 +72 +72 +73 +76 +76 +82 +82 +83 +86 +86 +90 +90 +90 +96 +96 +100 +100 +101 +106 +106 +110 +110 +116 +115 +115 +119 +120 +126 +125 +125 +130 +129 +133 +133 +133 +139 +140 +143 +143 +144 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +184 +185 +185 +189 +189 +191 +191 +195 +194 +194 +196 +196 +198 +198 +198 +200 +200 +200 +201 +200 +202 +202 +204 +205 +204 +204 +204 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +203 +200 +201 +201 +201 +200 +199 +198 +200 +197 +197 +194 +194 +190 +190 +190 +189 +188 +185 +185 +185 +182 +182 +183 +183 +183 +179 +179 +174 +175 +175 +173 +172 +169 +169 +167 +165 +165 +161 +161 +157 +157 +157 +151 +151 +151 +151 +151 +147 +148 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +126 +126 +126 +119 +120 +115 +115 +115 +110 +110 +110 +109 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +69 +64 +64 +58 +58 +59 +54 +54 +50 +51 +51 +47 +47 +43 +43 +42 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +14 +14 +14 +14 +14 +14 +13 +14 +14 +13 +13 +14 +13 +13 +14 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +13 +13 +15 +15 +15 +17 +17 +17 +17 +17 +19 +19 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +32 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +50 +51 +51 +50 +50 +54 +54 +58 +58 +59 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +110 +110 +116 +116 +120 +120 +125 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +173 +172 +173 +175 +175 +178 +179 +179 +183 +183 +185 +185 +184 +188 +188 +190 +190 +191 +195 +195 +197 +196 +197 +198 +199 +200 +200 +201 +200 +201 +202 +203 +204 +205 +204 +204 +204 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +206 +204 +205 +204 +205 +204 +202 +202 +200 +200 +200 +201 +200 +200 +201 +200 +198 +198 +197 +196 +196 +195 +195 +191 +191 +189 +189 +189 +184 +185 +182 +183 +182 +179 +179 +179 +179 +178 +175 +175 +175 +175 +175 +172 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +134 +133 +129 +130 +129 +125 +125 +120 +119 +120 +115 +115 +110 +109 +106 +106 +106 +100 +100 +95 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +72 +73 +68 +68 +68 +64 +64 +58 +59 +54 +54 +55 +51 +50 +47 +47 +47 +42 +43 +41 +41 +41 +37 +37 +33 +33 +32 +31 +31 +27 +27 +28 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +16 +15 +15 +15 +13 +13 +13 +12 +13 +14 +13 +14 +14 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +13 +14 +14 +13 +14 +14 +13 +14 +14 +13 +14 +14 +14 +13 +14 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +46 +51 +51 +50 +55 +55 +58 +58 +58 +64 +65 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +87 +90 +90 +96 +96 +99 +100 +100 +106 +105 +109 +110 +110 +116 +116 +120 +119 +119 +125 +124 +129 +129 +129 +133 +133 +139 +140 +139 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +165 +165 +165 +169 +169 +172 +173 +173 +175 +175 +179 +178 +179 +183 +183 +184 +184 +189 +189 +188 +190 +191 +194 +194 +194 +196 +196 +198 +198 +198 +200 +200 +200 +200 +201 +202 +202 +204 +205 +205 +204 +204 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +204 +204 +204 +204 +204 +202 +202 +201 +201 +200 +200 +200 +198 +198 +198 +196 +197 +194 +194 +194 +191 +190 +190 +191 +190 +188 +188 +185 +184 +185 +183 +183 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +119 +120 +115 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +77 +72 +72 +68 +69 +68 +64 +65 +59 +59 +59 +54 +54 +51 +50 +50 +47 +47 +42 +43 +43 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +14 +14 +14 +14 +14 +13 +13 +14 +14 +14 +13 +13 +13 +13 +14 +13 +13 +14 +14 +14 +13 +13 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +21 +21 +22 +25 +25 +27 +27 +28 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +42 +47 +47 +50 +50 +50 +54 +54 +58 +58 +59 +64 +64 +68 +68 +68 +72 +72 +76 +76 +78 +81 +82 +86 +86 +90 +90 +90 +96 +95 +100 +100 +100 +106 +105 +110 +110 +110 +116 +116 +119 +119 +119 +125 +125 +129 +129 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +174 +179 +179 +178 +182 +183 +184 +184 +185 +189 +188 +188 +188 +189 +190 +191 +195 +194 +194 +197 +196 +199 +198 +198 +200 +201 +201 +200 +203 +202 +203 +204 +205 +204 +204 +204 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +207 +206 +206 +204 +204 +205 +205 +204 +202 +202 +202 +200 +200 +200 +200 +201 +200 +201 +199 +199 +198 +197 +197 +194 +195 +191 +190 +191 +189 +188 +184 +184 +184 +183 +182 +179 +178 +178 +174 +175 +173 +173 +172 +168 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +140 +139 +133 +133 +133 +129 +129 +125 +125 +126 +120 +120 +116 +115 +116 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +81 +76 +76 +72 +73 +72 +68 +68 +64 +64 +64 +58 +58 +55 +54 +51 +51 +50 +47 +46 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +30 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +12 +13 +13 +13 +14 +13 +14 +14 +14 +14 +13 +13 +13 +13 +14 +13 +13 +14 +14 +14 +14 +13 +14 +14 +13 +14 +14 +13 +14 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +42 +43 +43 +47 +47 +51 +50 +54 +54 +55 +59 +58 +65 +65 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +89 +90 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +116 +120 +119 +125 +125 +125 +129 +129 +133 +134 +133 +139 +139 +143 +143 +143 +147 +147 +151 +152 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +178 +183 +183 +184 +185 +185 +189 +188 +190 +191 +195 +195 +194 +197 +197 +196 +197 +196 +198 +198 +200 +200 +200 +200 +200 +202 +202 +202 +204 +204 +204 +204 +205 +206 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +204 +204 +204 +204 +205 +203 +203 +200 +201 +201 +201 +200 +199 +199 +196 +196 +196 +194 +194 +191 +190 +190 +189 +188 +185 +184 +184 +182 +182 +179 +178 +179 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +126 +126 +119 +119 +119 +115 +115 +110 +109 +110 +105 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +69 +68 +68 +64 +65 +59 +59 +59 +54 +54 +50 +50 +50 +47 +47 +43 +43 +43 +41 +40 +37 +37 +37 +33 +33 +31 +31 +28 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +14 +13 +14 +14 +14 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +43 +42 +43 +46 +47 +50 +51 +51 +55 +55 +59 +58 +58 +65 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +89 +90 +90 +96 +96 +100 +100 +100 +106 +105 +110 +110 +110 +116 +116 +119 +119 +119 +125 +125 +129 +129 +129 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +169 +169 +173 +173 +173 +175 +175 +179 +179 +182 +183 +183 +184 +184 +189 +189 +188 +190 +190 +190 +190 +190 +194 +194 +197 +196 +196 +198 +198 +200 +200 +200 +200 +200 +202 +202 +204 +204 +205 +205 +204 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +205 +205 +205 +205 +204 +202 +202 +203 +201 +201 +200 +200 +200 +199 +199 +197 +197 +196 +194 +194 +190 +191 +190 +188 +188 +185 +185 +182 +183 +183 +179 +179 +174 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +130 +129 +126 +125 +120 +120 +120 +116 +115 +110 +109 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +87 +86 +86 +82 +82 +76 +76 +76 +72 +72 +69 +68 +69 +64 +64 +58 +58 +58 +55 +55 +50 +51 +49 +47 +47 +42 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +12 +14 +13 +14 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +14 +14 +13 +13 +14 +14 +13 +14 +13 +14 +14 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +46 +46 +47 +51 +50 +54 +54 +55 +58 +59 +65 +64 +69 +69 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +115 +120 +120 +120 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +158 +161 +161 +165 +165 +168 +169 +169 +173 +173 +175 +175 +174 +179 +179 +178 +179 +179 +183 +183 +185 +185 +185 +189 +189 +191 +191 +192 +195 +194 +197 +197 +198 +198 +199 +201 +200 +201 +201 +201 +202 +202 +203 +203 +202 +204 +204 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +205 +204 +204 +204 +204 +202 +202 +203 +200 +200 +200 +200 +201 +198 +199 +196 +197 +195 +194 +194 +190 +191 +188 +188 +188 +184 +184 +182 +182 +182 +179 +179 +175 +174 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +126 +119 +120 +116 +116 +110 +110 +109 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +68 +68 +65 +65 +59 +58 +58 +55 +54 +51 +51 +50 +46 +46 +47 +47 +47 +43 +43 +41 +40 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +26 +25 +25 +21 +21 +19 +19 +19 +17 +17 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +14 +13 +14 +14 +13 +13 +14 +14 +13 +13 +13 +14 +13 +14 +14 +13 +14 +13 +14 +14 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +40 +43 +42 +47 +46 +47 +50 +51 +54 +55 +55 +59 +58 +65 +64 +64 +68 +68 +72 +72 +72 +76 +77 +82 +82 +83 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +105 +109 +109 +115 +115 +115 +119 +120 +125 +126 +126 +129 +129 +133 +133 +134 +140 +140 +143 +143 +148 +147 +147 +151 +151 +157 +157 +157 +161 +161 +161 +161 +161 +165 +165 +169 +169 +169 +173 +172 +175 +175 +176 +178 +178 +183 +182 +184 +184 +184 +189 +188 +191 +190 +190 +194 +195 +194 +195 +194 +196 +197 +198 +198 +198 +201 +201 +200 +200 +203 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +207 +206 +206 +207 +207 +206 +206 +206 +207 +206 +206 +204 +205 +204 +204 +202 +202 +202 +200 +201 +200 +200 +200 +198 +198 +196 +196 +196 +195 +195 +190 +190 +191 +188 +189 +184 +184 +185 +182 +183 +179 +178 +175 +174 +175 +173 +169 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +134 +130 +129 +129 +125 +125 +119 +119 +119 +116 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +69 +68 +64 +64 +59 +59 +59 +54 +54 +50 +50 +51 +47 +47 +43 +43 +42 +41 +41 +37 +36 +33 +32 +33 +31 +31 +31 +31 +31 +27 +26 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +12 +14 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +31 +31 +33 +33 +38 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +51 +51 +55 +54 +58 +59 +58 +65 +64 +68 +68 +69 +72 +72 +76 +76 +83 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +109 +110 +115 +115 +119 +120 +120 +126 +125 +129 +129 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +175 +175 +175 +179 +179 +182 +183 +183 +185 +184 +184 +185 +185 +189 +188 +191 +191 +191 +194 +194 +196 +196 +198 +198 +198 +200 +200 +200 +201 +200 +203 +202 +204 +204 +204 +205 +204 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +204 +205 +205 +204 +203 +203 +200 +200 +200 +201 +200 +199 +199 +199 +196 +196 +195 +195 +194 +190 +190 +188 +188 +185 +184 +185 +183 +183 +178 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +144 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +126 +126 +119 +119 +116 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +83 +82 +76 +76 +76 +76 +76 +73 +72 +68 +68 +68 +65 +65 +59 +58 +56 +55 +55 +51 +51 +46 +47 +47 +43 +43 +41 +41 +41 +37 +37 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +22 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +13 +14 +14 +14 +13 +14 +14 +13 +13 +13 +14 +14 +14 +13 +13 +14 +13 +13 +13 +14 +14 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +42 +43 +47 +47 +51 +51 +51 +54 +54 +58 +58 +64 +65 +65 +68 +68 +73 +72 +72 +77 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +101 +106 +106 +110 +110 +116 +115 +116 +119 +119 +125 +125 +125 +130 +129 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +148 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +173 +173 +173 +175 +175 +179 +179 +179 +182 +182 +185 +184 +188 +189 +188 +190 +190 +194 +195 +194 +197 +196 +199 +198 +199 +200 +200 +200 +200 +200 +202 +202 +204 +205 +205 +204 +205 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +207 +206 +206 +206 +206 +204 +204 +205 +204 +204 +203 +202 +201 +200 +201 +201 +200 +199 +199 +197 +196 +197 +195 +195 +190 +190 +190 +189 +188 +185 +185 +185 +182 +182 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +148 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +130 +125 +125 +126 +120 +119 +116 +116 +110 +110 +109 +105 +106 +100 +100 +100 +96 +96 +95 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +72 +72 +68 +68 +64 +65 +64 +58 +59 +54 +54 +54 +50 +50 +51 +51 +50 +47 +47 +43 +43 +42 +41 +41 +37 +37 +34 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +14 +14 +14 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +14 +13 +14 +13 +13 +13 +13 +14 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +42 +43 +48 +46 +47 +50 +51 +55 +54 +55 +58 +58 +64 +65 +65 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +96 +94 +96 +99 +99 +106 +106 +106 +110 +109 +110 +109 +109 +116 +116 +120 +119 +119 +125 +125 +130 +130 +130 +133 +134 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +157 +157 +157 +160 +161 +164 +165 +165 +169 +169 +173 +173 +174 +175 +175 +179 +179 +182 +182 +183 +184 +184 +189 +189 +189 +191 +191 +195 +194 +194 +196 +197 +198 +198 +199 +200 +201 +200 +200 +202 +202 +202 +204 +204 +204 +204 +205 +206 +206 +207 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +205 +204 +204 +203 +203 +203 +200 +200 +200 +201 +200 +198 +198 +197 +196 +196 +194 +194 +190 +190 +190 +189 +188 +184 +185 +185 +183 +182 +179 +179 +175 +175 +175 +173 +172 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +144 +139 +139 +133 +133 +129 +129 +129 +126 +125 +120 +119 +119 +116 +116 +115 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +68 +68 +69 +64 +65 +59 +58 +59 +55 +54 +51 +50 +47 +47 +47 +43 +43 +41 +40 +40 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +16 +15 +16 +15 +15 +13 +13 +13 +12 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +14 +13 +14 +13 +14 +14 +14 +13 +14 +14 +13 +14 +14 +13 +13 +15 +15 +15 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +32 +31 +31 +32 +37 +37 +37 +41 +41 +42 +43 +43 +46 +46 +50 +50 +50 +54 +54 +59 +59 +59 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +99 +100 +106 +106 +110 +110 +112 +116 +116 +120 +119 +125 +125 +125 +130 +129 +133 +133 +133 +139 +139 +139 +139 +139 +143 +143 +147 +148 +147 +151 +151 +157 +157 +158 +161 +161 +165 +165 +168 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +182 +184 +185 +189 +189 +189 +190 +191 +195 +195 +196 +196 +197 +199 +198 +200 +201 +201 +200 +200 +202 +202 +202 +204 +204 +204 +204 +205 +206 +206 +206 +206 +206 +207 +207 +206 +207 +207 +206 +206 +207 +207 +204 +204 +205 +205 +204 +202 +203 +202 +200 +201 +201 +201 +200 +199 +198 +197 +197 +196 +194 +195 +191 +191 +189 +189 +189 +184 +185 +182 +183 +183 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +148 +147 +147 +143 +143 +139 +139 +140 +133 +133 +133 +133 +133 +129 +129 +125 +125 +125 +119 +119 +115 +116 +113 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +69 +66 +64 +64 +59 +59 +54 +54 +54 +50 +50 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +13 +14 +13 +13 +13 +14 +13 +13 +13 +14 +14 +14 +14 +14 +14 +14 +14 +13 +13 +13 +13 +14 +14 +13 +13 +15 +15 +16 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +42 +47 +46 +47 +51 +51 +54 +54 +59 +58 +58 +64 +64 +68 +68 +68 +72 +72 +72 +72 +72 +77 +76 +82 +82 +82 +86 +86 +90 +90 +92 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +115 +120 +120 +120 +120 +120 +125 +125 +129 +129 +129 +134 +133 +139 +139 +141 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +174 +175 +179 +179 +183 +182 +184 +185 +184 +189 +188 +190 +191 +190 +194 +194 +197 +197 +196 +198 +198 +201 +200 +201 +200 +200 +202 +202 +202 +204 +205 +205 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +202 +200 +201 +201 +201 +199 +198 +198 +197 +196 +195 +194 +194 +190 +191 +189 +188 +189 +184 +185 +183 +182 +182 +178 +178 +175 +175 +175 +173 +173 +169 +169 +165 +165 +164 +161 +161 +157 +157 +157 +151 +151 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +134 +131 +129 +129 +126 +125 +119 +120 +120 +115 +116 +110 +110 +110 +106 +105 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +83 +82 +82 +76 +76 +72 +72 +72 +69 +68 +65 +64 +65 +59 +58 +54 +54 +55 +51 +51 +47 +47 +47 +42 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +26 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +13 +14 +14 +14 +13 +14 +14 +14 +14 +14 +14 +13 +13 +14 +13 +13 +13 +14 +13 +14 +14 +13 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +30 +33 +33 +37 +37 +41 +40 +41 +43 +43 +47 +46 +47 +51 +50 +50 +50 +50 +55 +55 +58 +59 +58 +64 +65 +68 +69 +67 +73 +72 +76 +77 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +115 +119 +119 +120 +126 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +182 +183 +184 +185 +189 +189 +188 +190 +190 +195 +194 +194 +196 +196 +198 +198 +201 +201 +200 +200 +201 +202 +202 +202 +204 +204 +204 +205 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +205 +205 +204 +204 +204 +202 +202 +202 +200 +200 +200 +200 +200 +198 +199 +196 +196 +197 +194 +195 +190 +191 +190 +188 +189 +185 +184 +183 +183 +183 +179 +179 +175 +174 +175 +173 +173 +173 +173 +173 +169 +169 +165 +165 +165 +161 +160 +157 +157 +157 +151 +151 +147 +147 +143 +144 +143 +139 +139 +133 +133 +134 +130 +129 +129 +129 +130 +125 +126 +119 +119 +120 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +69 +69 +64 +65 +58 +59 +55 +54 +54 +51 +50 +46 +47 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +19 +20 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +14 +14 +14 +13 +14 +13 +13 +13 +14 +14 +14 +14 +14 +13 +13 +14 +14 +14 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +33 +33 +33 +37 +37 +40 +41 +41 +43 +43 +47 +47 +48 +50 +50 +54 +54 +58 +59 +59 +65 +64 +68 +69 +68 +72 +72 +72 +72 +72 +76 +76 +82 +82 +83 +86 +86 +90 +90 +92 +96 +96 +100 +100 +105 +105 +106 +110 +110 +115 +115 +115 +120 +119 +125 +125 +126 +129 +130 +133 +133 +134 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +178 +182 +182 +185 +185 +189 +188 +188 +191 +191 +195 +195 +194 +196 +196 +198 +198 +198 +200 +201 +200 +200 +200 +203 +202 +204 +204 +204 +204 +205 +206 +207 +207 +207 +206 +207 +206 +206 +206 +207 +207 +206 +206 +206 +206 +204 +204 +204 +204 +205 +202 +202 +201 +201 +201 +200 +201 +199 +198 +197 +196 +197 +194 +194 +190 +191 +190 +189 +189 +184 +185 +184 +183 +183 +179 +179 +179 +175 +174 +173 +173 +171 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +147 +147 +147 +143 +143 +139 +139 +140 +133 +133 +130 +129 +130 +125 +125 +120 +120 +115 +116 +116 +109 +110 +106 +105 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +87 +82 +83 +76 +76 +75 +72 +72 +68 +68 +65 +64 +64 +58 +58 +54 +54 +55 +51 +51 +46 +47 +47 +43 +42 +40 +41 +41 +37 +36 +34 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +14 +13 +14 +13 +13 +13 +14 +14 +13 +13 +14 +13 +13 +14 +14 +13 +14 +14 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +40 +41 +42 +43 +47 +46 +50 +51 +51 +55 +55 +58 +58 +58 +64 +64 +64 +64 +64 +68 +68 +72 +72 +72 +77 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +109 +110 +115 +116 +116 +119 +119 +126 +125 +126 +129 +129 +133 +133 +138 +139 +139 +143 +143 +147 +147 +147 +151 +151 +152 +151 +151 +157 +157 +161 +161 +162 +165 +165 +169 +169 +169 +173 +173 +175 +175 +179 +178 +179 +183 +182 +184 +184 +185 +188 +188 +191 +191 +190 +195 +194 +197 +196 +197 +198 +199 +201 +201 +201 +201 +200 +203 +203 +205 +204 +204 +204 +205 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +204 +204 +205 +204 +204 +203 +202 +200 +200 +201 +200 +201 +199 +198 +198 +196 +196 +197 +197 +197 +195 +195 +190 +191 +190 +189 +188 +184 +185 +184 +182 +183 +179 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +148 +143 +143 +139 +139 +133 +133 +133 +130 +130 +125 +125 +125 +120 +119 +115 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +91 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +59 +59 +54 +54 +55 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +30 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +14 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +14 +14 +13 +14 +14 +13 +14 +13 +13 +14 +13 +13 +13 +13 +12 +15 +15 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +36 +41 +41 +41 +43 +43 +43 +43 +43 +46 +47 +51 +51 +51 +54 +55 +58 +58 +59 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +115 +115 +116 +119 +120 +126 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +165 +165 +165 +169 +169 +172 +173 +173 +175 +175 +179 +178 +179 +183 +183 +185 +185 +185 +188 +189 +190 +191 +191 +195 +195 +197 +196 +199 +198 +199 +200 +200 +200 +201 +200 +203 +202 +205 +204 +204 +205 +204 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +204 +205 +204 +204 +204 +202 +202 +202 +202 +202 +200 +201 +200 +200 +200 +198 +199 +196 +196 +196 +194 +195 +191 +190 +188 +189 +188 +185 +185 +183 +182 +183 +179 +179 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +163 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +130 +129 +125 +125 +126 +119 +119 +115 +116 +109 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +77 +76 +72 +72 +72 +68 +68 +64 +64 +59 +59 +59 +55 +55 +51 +51 +51 +46 +47 +43 +43 +43 +40 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +14 +13 +14 +13 +13 +14 +13 +14 +13 +13 +14 +13 +13 +13 +14 +14 +14 +13 +13 +14 +13 +14 +13 +14 +13 +13 +13 +15 +15 +16 +17 +17 +19 +19 +22 +21 +21 +25 +25 +27 +27 +27 +31 +31 +31 +31 +31 +33 +33 +37 +36 +37 +41 +40 +43 +43 +43 +47 +47 +51 +50 +54 +54 +55 +58 +59 +65 +64 +65 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +92 +95 +95 +100 +100 +106 +106 +106 +109 +109 +116 +116 +116 +119 +119 +125 +126 +126 +129 +129 +134 +133 +133 +139 +139 +143 +143 +148 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +172 +175 +175 +178 +179 +178 +182 +183 +184 +184 +188 +188 +188 +191 +190 +194 +194 +194 +196 +197 +198 +198 +198 +200 +200 +200 +200 +200 +202 +202 +204 +204 +205 +205 +205 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +207 +204 +205 +204 +204 +204 +202 +202 +201 +200 +200 +200 +200 +198 +198 +197 +196 +197 +194 +194 +195 +191 +191 +190 +191 +191 +189 +189 +185 +184 +185 +183 +183 +179 +178 +177 +174 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +144 +139 +139 +133 +134 +129 +129 +129 +126 +126 +119 +119 +120 +115 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +76 +76 +76 +72 +73 +68 +68 +68 +65 +64 +59 +59 +59 +54 +54 +50 +51 +51 +47 +46 +43 +43 +43 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +20 +19 +17 +18 +17 +15 +15 +15 +15 +16 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +14 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +14 +13 +14 +13 +12 +15 +15 +15 +15 +15 +17 +17 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +30 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +46 +47 +50 +51 +51 +54 +54 +58 +58 +59 +64 +65 +69 +68 +72 +73 +73 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +116 +120 +120 +126 +126 +126 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +172 +173 +173 +175 +175 +178 +179 +179 +183 +182 +185 +185 +185 +188 +188 +190 +191 +191 +194 +194 +197 +197 +196 +198 +199 +201 +200 +201 +201 +200 +203 +202 +204 +204 +204 +204 +204 +204 +204 +205 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +204 +205 +205 +204 +204 +202 +202 +202 +200 +200 +200 +201 +200 +200 +201 +198 +198 +199 +196 +197 +195 +195 +191 +190 +191 +189 +188 +185 +185 +185 +183 +183 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +126 +120 +120 +116 +115 +115 +110 +110 +106 +106 +101 +100 +100 +96 +96 +90 +90 +90 +86 +86 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +69 +69 +68 +64 +64 +59 +58 +55 +55 +55 +50 +51 +47 +47 +47 +42 +43 +40 +41 +41 +36 +36 +33 +33 +33 +31 +31 +27 +27 +28 +25 +25 +21 +21 +20 +19 +19 +17 +17 +15 +15 +15 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +14 +14 +14 +14 +13 +14 +14 +14 +13 +13 +14 +13 +14 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +40 +41 +41 +43 +43 +47 +46 +50 +51 +50 +54 +55 +58 +58 +58 +64 +64 +68 +68 +69 +72 +76 +76 +76 +76 +83 +82 +86 +86 +86 +90 +90 +96 +96 +99 +100 +100 +106 +106 +109 +110 +110 +115 +116 +119 +120 +120 +126 +126 +129 +129 +129 +134 +133 +139 +139 +140 +143 +143 +147 +147 +152 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +174 +179 +179 +183 +183 +183 +185 +184 +188 +188 +191 +190 +190 +195 +194 +196 +197 +197 +199 +198 +198 +198 +198 +201 +201 +200 +200 +201 +203 +202 +205 +205 +205 +204 +205 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +202 +200 +201 +200 +200 +198 +198 +199 +196 +196 +194 +195 +194 +191 +190 +188 +188 +189 +185 +184 +183 +183 +183 +178 +179 +175 +175 +172 +173 +173 +169 +169 +165 +165 +165 +161 +161 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +144 +139 +139 +133 +133 +130 +129 +129 +125 +125 +120 +119 +119 +116 +115 +109 +110 +109 +106 +106 +99 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +58 +59 +55 +54 +51 +50 +51 +47 +46 +43 +43 +43 +41 +41 +37 +37 +33 +32 +33 +31 +31 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +12 +14 +13 +13 +13 +14 +14 +14 +13 +13 +14 +14 +14 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +14 +14 +13 +14 +13 +12 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +42 +43 +47 +47 +47 +50 +51 +55 +54 +54 +58 +58 +64 +64 +64 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +116 +115 +119 +120 +126 +125 +130 +129 +129 +133 +133 +139 +139 +139 +143 +143 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +162 +162 +165 +165 +169 +169 +172 +172 +173 +175 +175 +179 +179 +179 +183 +183 +183 +183 +182 +185 +185 +189 +188 +188 +191 +191 +194 +194 +195 +196 +197 +199 +198 +200 +200 +201 +200 +200 +202 +202 +202 +204 +205 +205 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +203 +202 +201 +200 +200 +201 +200 +199 +198 +199 +196 +196 +194 +194 +191 +190 +191 +188 +188 +184 +185 +185 +183 +182 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +166 +161 +161 +157 +157 +150 +151 +151 +147 +147 +144 +143 +143 +139 +139 +133 +133 +133 +130 +129 +125 +125 +125 +120 +120 +116 +115 +116 +109 +110 +105 +105 +100 +99 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +73 +72 +68 +68 +64 +64 +65 +59 +58 +54 +54 +50 +50 +50 +46 +46 +42 +43 +43 +41 +41 +41 +41 +40 +36 +37 +33 +33 +33 +31 +30 +27 +27 +26 +26 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +13 +13 +14 +14 +13 +14 +14 +14 +14 +14 +14 +14 +14 +13 +14 +13 +13 +14 +14 +14 +13 +13 +13 +13 +12 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +36 +37 +37 +41 +41 +43 +43 +43 +47 +46 +51 +51 +54 +54 +54 +58 +58 +64 +64 +64 +68 +69 +72 +72 +72 +76 +77 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +106 +106 +106 +109 +110 +116 +115 +116 +120 +119 +125 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +144 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +185 +185 +186 +188 +189 +191 +191 +194 +194 +194 +196 +196 +199 +198 +198 +200 +200 +200 +200 +201 +200 +201 +202 +202 +203 +204 +205 +204 +204 +206 +207 +207 +207 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +205 +204 +204 +204 +205 +203 +202 +203 +200 +201 +200 +200 +198 +198 +198 +196 +196 +194 +194 +195 +190 +191 +189 +188 +189 +185 +185 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +130 +125 +125 +120 +119 +116 +116 +116 +110 +109 +106 +106 +106 +99 +100 +95 +96 +96 +90 +90 +87 +86 +86 +82 +82 +77 +76 +77 +72 +72 +68 +69 +65 +64 +64 +58 +59 +54 +55 +55 +50 +50 +47 +47 +47 +43 +43 +41 +40 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +26 +25 +25 +21 +21 +19 +19 +19 +17 +17 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +14 +14 +14 +13 +14 +13 +13 +14 +13 +13 +14 +13 +13 +13 +14 +13 +14 +14 +14 +14 +13 +13 +13 +13 +16 +15 +15 +17 +17 +18 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +46 +47 +47 +51 +50 +55 +55 +54 +58 +59 +64 +65 +64 +68 +68 +72 +72 +72 +76 +77 +82 +82 +82 +86 +86 +90 +90 +96 +96 +96 +100 +100 +105 +106 +106 +110 +109 +116 +115 +115 +119 +120 +126 +126 +125 +129 +130 +133 +133 +133 +140 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +161 +161 +161 +166 +165 +169 +169 +169 +173 +173 +175 +175 +176 +179 +179 +183 +183 +184 +185 +184 +188 +189 +191 +191 +191 +194 +194 +195 +195 +195 +197 +197 +198 +198 +198 +200 +201 +200 +200 +201 +202 +203 +204 +204 +204 +204 +205 +206 +206 +207 +206 +207 +207 +206 +206 +206 +207 +206 +206 +206 +207 +206 +206 +207 +204 +205 +204 +204 +204 +203 +203 +200 +200 +200 +200 +200 +198 +199 +198 +196 +196 +194 +194 +195 +190 +191 +189 +189 +188 +185 +184 +182 +182 +179 +178 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +158 +151 +151 +147 +147 +148 +143 +143 +139 +139 +134 +133 +133 +130 +129 +125 +126 +126 +119 +119 +120 +119 +120 +115 +116 +110 +110 +109 +106 +106 +100 +100 +100 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +73 +72 +72 +68 +68 +64 +64 +64 +58 +59 +54 +54 +53 +51 +50 +47 +47 +43 +43 +42 +41 +40 +37 +37 +37 +33 +32 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +18 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +13 +14 +13 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +37 +37 +37 +41 +41 +43 +42 +43 +47 +47 +50 +51 +50 +54 +54 +59 +58 +65 +65 +64 +69 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +101 +106 +105 +110 +109 +116 +115 +115 +119 +119 +125 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +153 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +175 +175 +175 +179 +179 +182 +183 +183 +185 +185 +189 +189 +191 +191 +190 +195 +194 +197 +196 +196 +199 +198 +201 +201 +200 +200 +200 +203 +202 +202 +204 +204 +204 +205 +205 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +205 +202 +202 +202 +200 +200 +200 +200 +201 +198 +198 +196 +196 +195 +194 +194 +190 +190 +188 +188 +189 +185 +185 +183 +183 +182 +179 +179 +175 +175 +175 +173 +173 +169 +169 +170 +165 +165 +160 +161 +158 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +119 +120 +115 +116 +110 +110 +105 +106 +106 +100 +100 +96 +96 +96 +90 +90 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +73 +74 +68 +68 +64 +65 +58 +59 +59 +55 +54 +51 +51 +51 +47 +46 +47 +47 +47 +43 +43 +41 +40 +41 +37 +37 +33 +33 +31 +31 +30 +27 +27 +25 +25 +25 +20 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +14 +14 +14 +13 +14 +14 +14 +13 +14 +14 +14 +14 +14 +13 +13 +14 +14 +13 +14 +14 +14 +13 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +51 +50 +51 +55 +55 +59 +58 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +77 +82 +82 +86 +86 +87 +90 +90 +96 +96 +99 +100 +100 +106 +106 +110 +110 +109 +116 +116 +116 +115 +116 +119 +119 +125 +125 +125 +130 +129 +133 +134 +133 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +161 +161 +161 +164 +165 +169 +169 +169 +173 +173 +175 +175 +178 +179 +178 +182 +183 +185 +185 +185 +188 +189 +191 +191 +191 +195 +195 +196 +197 +196 +198 +199 +200 +201 +201 +201 +201 +202 +203 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +203 +203 +200 +200 +200 +200 +200 +199 +198 +199 +197 +196 +194 +194 +194 +190 +190 +189 +188 +188 +185 +184 +183 +183 +183 +179 +179 +174 +174 +173 +172 +173 +169 +169 +165 +165 +165 +160 +161 +161 +160 +161 +157 +157 +151 +151 +151 +148 +147 +143 +144 +143 +139 +139 +133 +133 +129 +129 +130 +125 +126 +119 +119 +120 +115 +116 +109 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +88 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +69 +68 +65 +65 +64 +64 +65 +58 +58 +55 +55 +54 +50 +51 +46 +47 +43 +43 +43 +41 +41 +38 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +13 +13 +13 +14 +13 +14 +13 +14 +13 +13 +13 +13 +13 +15 +16 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +37 +37 +37 +41 +41 +40 +41 +41 +43 +43 +47 +47 +47 +51 +51 +55 +54 +55 +59 +58 +65 +65 +65 +68 +68 +72 +72 +76 +76 +77 +82 +82 +86 +86 +86 +89 +90 +90 +90 +90 +96 +96 +100 +100 +100 +105 +106 +110 +110 +112 +116 +116 +119 +120 +125 +126 +125 +129 +129 +133 +133 +133 +140 +139 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +158 +161 +161 +165 +165 +168 +169 +169 +173 +173 +175 +175 +175 +178 +179 +182 +182 +183 +184 +185 +188 +189 +189 +191 +191 +194 +194 +196 +197 +197 +198 +199 +200 +200 +200 +201 +201 +203 +202 +202 +204 +204 +205 +205 +205 +207 +206 +207 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +206 +204 +204 +205 +204 +205 +203 +202 +202 +200 +200 +200 +201 +200 +198 +199 +196 +197 +197 +195 +194 +191 +190 +189 +189 +188 +185 +185 +183 +182 +183 +179 +179 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +139 +139 +139 +133 +133 +129 +129 +129 +125 +126 +119 +120 +118 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +90 +90 +91 +86 +86 +82 +82 +82 +76 +76 +72 +72 +71 +68 +68 +64 +65 +58 +58 +58 +54 +54 +50 +50 +50 +47 +47 +43 +43 +43 +41 +41 +36 +37 +37 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +14 +13 +13 +14 +13 +14 +14 +14 +14 +14 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +13 +14 +13 +12 +15 +15 +17 +17 +20 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +38 +37 +41 +41 +43 +43 +43 +46 +47 +51 +51 +54 +54 +54 +59 +58 +64 +64 +65 +68 +68 +69 +68 +69 +72 +72 +76 +76 +76 +82 +82 +86 +86 +88 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +115 +115 +116 +116 +119 +120 +126 +125 +125 +129 +130 +133 +133 +136 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +182 +182 +182 +185 +185 +188 +188 +189 +191 +191 +194 +195 +194 +196 +196 +199 +199 +198 +200 +201 +201 +200 +200 +202 +202 +204 +204 +205 +205 +204 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +200 +200 +201 +201 +200 +198 +199 +196 +196 +196 +195 +194 +195 +195 +195 +190 +191 +188 +189 +188 +184 +185 +182 +182 +183 +178 +179 +175 +175 +172 +173 +173 +169 +169 +165 +165 +165 +161 +161 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +144 +139 +139 +133 +133 +129 +130 +129 +125 +125 +119 +119 +119 +116 +115 +115 +115 +115 +110 +110 +105 +106 +106 +100 +100 +96 +95 +91 +90 +90 +86 +86 +82 +82 +82 +76 +77 +72 +73 +73 +68 +68 +64 +64 +65 +58 +58 +54 +54 +55 +51 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +18 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +13 +14 +14 +13 +13 +14 +14 +14 +14 +13 +14 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +26 +27 +27 +31 +31 +32 +33 +33 +37 +37 +41 +41 +41 +43 +43 +46 +46 +47 +51 +50 +55 +55 +54 +58 +58 +64 +65 +66 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +109 +111 +116 +115 +120 +120 +125 +125 +125 +130 +130 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +152 +157 +157 +161 +161 +165 +165 +164 +169 +168 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +185 +185 +185 +189 +188 +191 +191 +191 +195 +195 +197 +196 +197 +198 +198 +200 +200 +201 +200 +201 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +207 +206 +206 +207 +207 +206 +206 +206 +207 +206 +207 +207 +204 +204 +204 +204 +204 +202 +202 +200 +200 +200 +200 +200 +199 +199 +199 +197 +196 +195 +194 +195 +191 +190 +189 +188 +185 +184 +185 +183 +182 +178 +179 +179 +174 +175 +173 +173 +173 +169 +170 +165 +165 +166 +161 +161 +157 +157 +158 +151 +151 +147 +147 +144 +143 +143 +139 +139 +139 +139 +139 +133 +133 +133 +133 +133 +129 +129 +125 +126 +125 +126 +125 +120 +120 +116 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +64 +64 +64 +59 +58 +55 +55 +54 +51 +51 +47 +46 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +14 +14 +13 +13 +14 +13 +14 +14 +14 +13 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +44 +47 +47 +51 +51 +54 +54 +55 +58 +58 +64 +65 +65 +68 +69 +69 +68 +68 +72 +73 +76 +76 +77 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +115 +120 +120 +120 +125 +125 +130 +129 +130 +133 +134 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +178 +179 +183 +183 +185 +185 +184 +188 +189 +190 +190 +190 +195 +195 +197 +197 +197 +198 +198 +200 +200 +200 +201 +200 +203 +202 +203 +204 +205 +204 +204 +207 +207 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +204 +204 +205 +204 +205 +202 +203 +203 +201 +200 +200 +200 +199 +199 +199 +196 +197 +194 +195 +194 +190 +191 +189 +189 +188 +184 +184 +183 +183 +183 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +151 +151 +151 +147 +147 +143 +143 +144 +139 +139 +133 +133 +132 +129 +129 +125 +126 +119 +119 +120 +116 +116 +110 +109 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +83 +82 +77 +76 +76 +72 +72 +68 +68 +68 +65 +65 +59 +58 +59 +54 +54 +50 +51 +51 +46 +47 +42 +43 +43 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +28 +27 +25 +25 +21 +21 +21 +19 +19 +16 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +14 +13 +14 +14 +14 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +14 +13 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +30 +33 +33 +34 +37 +38 +41 +41 +43 +43 +43 +47 +47 +51 +51 +51 +54 +55 +54 +55 +55 +58 +58 +65 +65 +65 +68 +68 +73 +72 +76 +76 +76 +82 +82 +86 +86 +87 +90 +90 +96 +96 +96 +100 +100 +105 +106 +106 +110 +110 +116 +116 +116 +120 +120 +125 +126 +129 +130 +129 +133 +134 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +170 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +182 +185 +185 +189 +189 +188 +190 +190 +195 +194 +194 +197 +197 +198 +198 +198 +201 +200 +200 +201 +203 +202 +203 +204 +205 +205 +204 +204 +206 +206 +207 +206 +206 +206 +206 +206 +207 +207 +206 +207 +206 +206 +207 +205 +205 +204 +205 +203 +202 +203 +201 +200 +200 +200 +200 +198 +198 +197 +196 +194 +194 +195 +190 +191 +190 +189 +189 +184 +185 +185 +183 +183 +178 +179 +174 +174 +175 +173 +173 +169 +169 +169 +165 +165 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +144 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +126 +119 +120 +115 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +95 +94 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +65 +64 +59 +59 +54 +55 +55 +51 +50 +47 +46 +43 +42 +42 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +16 +15 +15 +13 +13 +12 +13 +14 +14 +14 +13 +13 +14 +13 +14 +13 +13 +14 +13 +13 +13 +14 +13 +14 +13 +13 +13 +14 +14 +14 +13 +14 +14 +13 +13 +15 +15 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +43 +43 +43 +47 +47 +51 +50 +51 +55 +55 +58 +59 +61 +65 +65 +69 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +109 +115 +115 +116 +119 +120 +125 +126 +126 +129 +129 +133 +133 +134 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +178 +182 +183 +185 +185 +185 +189 +188 +190 +191 +191 +195 +194 +196 +196 +199 +198 +199 +200 +200 +200 +200 +200 +202 +202 +204 +204 +204 +204 +204 +206 +207 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +207 +206 +206 +204 +204 +204 +204 +205 +202 +202 +202 +203 +203 +201 +201 +200 +201 +200 +198 +198 +197 +196 +197 +195 +195 +191 +190 +188 +189 +189 +185 +185 +183 +182 +182 +179 +179 +179 +178 +179 +175 +174 +173 +173 +173 +169 +169 +165 +165 +162 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +130 +129 +125 +125 +126 +119 +115 +116 +112 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +68 +68 +64 +64 +59 +59 +58 +54 +54 +51 +50 +50 +47 +47 +43 +43 +43 +41 +41 +36 +37 +37 +33 +33 +31 +31 +31 +27 +26 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +14 +13 +14 +13 +14 +14 +14 +14 +13 +14 +13 +14 +14 +14 +14 +14 +14 +14 +13 +14 +13 +13 +16 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +46 +47 +47 +51 +50 +54 +54 +54 +58 +58 +65 +64 +65 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +115 +115 +119 +119 +125 +125 +126 +130 +130 +134 +133 +133 +139 +139 +144 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +182 +184 +185 +189 +189 +189 +191 +190 +194 +194 +194 +196 +196 +199 +198 +199 +201 +200 +200 +201 +200 +203 +203 +204 +204 +205 +204 +205 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +205 +202 +202 +201 +200 +201 +200 +201 +198 +199 +198 +197 +196 +195 +195 +194 +190 +191 +191 +191 +190 +189 +188 +186 +185 +185 +183 +183 +178 +179 +176 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +144 +139 +139 +133 +133 +130 +130 +130 +126 +126 +119 +120 +119 +115 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +76 +76 +76 +72 +72 +69 +68 +68 +64 +64 +59 +58 +58 +54 +54 +51 +51 +51 +47 +47 +43 +43 +43 +41 +40 +37 +37 +34 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +16 +16 +13 +13 +12 +13 +14 +13 +13 +13 +14 +13 +13 +14 +13 +13 +14 +13 +14 +14 +14 +13 +13 +14 +14 +13 +14 +13 +14 +13 +13 +13 +13 +12 +15 +15 +17 +17 +19 +19 +19 +21 +21 +21 +21 +21 +25 +24 +27 +27 +27 +31 +31 +33 +33 +36 +37 +36 +41 +40 +42 +43 +43 +47 +47 +51 +51 +50 +55 +55 +59 +58 +58 +64 +64 +68 +68 +69 +72 +72 +76 +76 +81 +82 +82 +86 +85 +90 +90 +90 +96 +96 +100 +100 +100 +106 +105 +110 +110 +110 +116 +116 +119 +120 +120 +126 +125 +130 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +156 +157 +161 +161 +161 +164 +165 +169 +169 +169 +172 +173 +175 +175 +178 +178 +179 +183 +183 +185 +184 +185 +188 +188 +190 +190 +190 +194 +194 +196 +196 +196 +198 +198 +200 +200 +201 +200 +200 +203 +203 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +205 +204 +204 +204 +204 +202 +202 +202 +201 +200 +200 +200 +200 +198 +198 +199 +198 +198 +196 +196 +194 +194 +195 +190 +191 +188 +188 +186 +184 +185 +183 +182 +178 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +143 +143 +143 +140 +139 +133 +133 +133 +129 +129 +125 +125 +126 +119 +120 +116 +115 +116 +110 +110 +105 +106 +106 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +59 +58 +54 +54 +55 +50 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +20 +17 +17 +15 +15 +16 +15 +15 +13 +14 +12 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +14 +13 +14 +14 +14 +14 +14 +13 +13 +14 +14 +13 +13 +14 +13 +13 +13 +13 +14 +13 +13 +15 +15 +15 +15 +15 +17 +16 +17 +19 +19 +21 +21 +23 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +46 +47 +51 +50 +51 +55 +54 +59 +58 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +105 +109 +110 +115 +115 +116 +119 +120 +125 +125 +126 +130 +129 +133 +134 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +174 +175 +179 +179 +178 +182 +183 +185 +184 +184 +189 +189 +191 +190 +191 +194 +194 +197 +197 +199 +199 +198 +200 +201 +201 +200 +200 +202 +202 +202 +202 +203 +204 +204 +204 +205 +204 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +205 +204 +204 +204 +204 +204 +204 +204 +202 +202 +201 +201 +201 +201 +200 +198 +199 +197 +197 +196 +194 +194 +190 +190 +190 +188 +189 +184 +185 +184 +182 +182 +179 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +140 +139 +133 +133 +133 +129 +129 +125 +125 +126 +119 +120 +115 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +73 +72 +73 +68 +68 +64 +64 +59 +59 +58 +54 +55 +50 +51 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +22 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +14 +14 +14 +14 +14 +14 +13 +13 +14 +14 +14 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +47 +47 +46 +50 +50 +55 +54 +55 +58 +58 +64 +64 +65 +68 +68 +73 +73 +72 +77 +76 +83 +82 +82 +86 +89 +89 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +115 +120 +120 +125 +125 +125 +129 +130 +133 +133 +134 +139 +139 +143 +143 +148 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +178 +183 +182 +184 +185 +189 +189 +189 +190 +191 +194 +194 +194 +196 +197 +197 +197 +196 +198 +198 +201 +200 +200 +200 +200 +203 +202 +202 +204 +204 +204 +204 +206 +206 +207 +206 +206 +207 +207 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +207 +204 +204 +205 +204 +205 +203 +203 +200 +200 +200 +200 +200 +199 +199 +196 +196 +197 +195 +194 +191 +190 +190 +189 +188 +185 +184 +185 +183 +183 +178 +179 +175 +175 +175 +173 +172 +168 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +148 +143 +143 +143 +143 +144 +139 +139 +134 +133 +134 +129 +130 +125 +126 +125 +120 +120 +116 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +83 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +58 +58 +54 +55 +55 +50 +51 +47 +47 +47 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +18 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +14 +14 +13 +13 +13 +14 +13 +14 +13 +14 +14 +13 +14 +14 +14 +13 +13 +14 +13 +14 +14 +14 +14 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +30 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +46 +50 +51 +50 +55 +55 +58 +58 +58 +64 +64 +68 +68 +73 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +115 +119 +120 +126 +126 +125 +129 +129 +134 +133 +134 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +164 +169 +169 +173 +173 +173 +175 +179 +179 +178 +182 +183 +183 +182 +182 +185 +185 +188 +188 +188 +190 +191 +195 +195 +195 +197 +196 +199 +198 +200 +200 +200 +201 +200 +203 +203 +203 +204 +204 +204 +204 +204 +204 +204 +206 +206 +206 +207 +206 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +204 +204 +205 +204 +205 +202 +202 +200 +200 +200 +200 +200 +198 +198 +199 +197 +197 +194 +194 +191 +190 +190 +189 +188 +184 +184 +184 +182 +183 +179 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +152 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +126 +125 +125 +119 +120 +115 +115 +116 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +77 +76 +72 +72 +72 +68 +68 +65 +64 +65 +58 +58 +54 +54 +51 +51 +51 +46 +47 +43 +43 +43 +41 +41 +41 +41 +41 +37 +37 +33 +33 +32 +30 +31 +27 +27 +26 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +13 +14 +14 +14 +13 +13 +13 +14 +13 +13 +14 +13 +14 +13 +13 +15 +15 +17 +17 +18 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +40 +43 +43 +43 +47 +47 +51 +51 +55 +55 +55 +59 +59 +64 +65 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +91 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +116 +116 +119 +119 +125 +125 +125 +130 +130 +134 +133 +133 +139 +140 +143 +143 +144 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +164 +169 +168 +169 +169 +169 +173 +173 +174 +175 +175 +179 +179 +182 +183 +183 +184 +185 +189 +188 +190 +190 +191 +194 +194 +196 +196 +196 +198 +198 +199 +198 +199 +200 +200 +200 +200 +201 +203 +202 +204 +205 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +205 +204 +205 +204 +205 +204 +205 +202 +203 +201 +200 +200 +200 +200 +198 +198 +199 +196 +196 +194 +194 +194 +191 +190 +189 +188 +188 +184 +185 +182 +182 +183 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +140 +133 +134 +130 +129 +126 +125 +125 +119 +120 +116 +115 +115 +109 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +73 +73 +72 +68 +69 +64 +64 +64 +58 +58 +58 +58 +58 +55 +54 +51 +51 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +33 +33 +32 +31 +31 +27 +27 +27 +25 +25 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +14 +14 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +37 +37 +36 +41 +41 +43 +43 +43 +47 +46 +51 +50 +50 +54 +55 +58 +58 +59 +64 +64 +69 +68 +69 +72 +72 +76 +76 +83 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +116 +119 +120 +120 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +148 +147 +151 +151 +151 +158 +157 +161 +161 +161 +165 +165 +169 +169 +170 +173 +173 +175 +175 +178 +179 +179 +182 +183 +184 +184 +184 +188 +189 +189 +189 +189 +190 +190 +195 +194 +194 +196 +197 +198 +198 +199 +201 +200 +201 +200 +202 +202 +202 +205 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +204 +205 +204 +204 +204 +202 +202 +202 +200 +200 +200 +200 +200 +198 +198 +197 +196 +196 +195 +195 +190 +191 +190 +189 +189 +184 +185 +183 +183 +183 +179 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +152 +147 +143 +143 +143 +139 +139 +140 +139 +139 +133 +133 +133 +129 +129 +125 +125 +125 +119 +120 +116 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +77 +76 +76 +76 +76 +72 +72 +68 +68 +69 +64 +64 +59 +58 +59 +54 +54 +51 +51 +46 +47 +47 +43 +43 +41 +41 +41 +37 +37 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +24 +24 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +14 +13 +13 +14 +13 +13 +14 +14 +14 +13 +14 +13 +13 +14 +14 +13 +13 +14 +14 +14 +14 +13 +14 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +24 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +46 +47 +50 +50 +50 +55 +55 +58 +58 +65 +64 +64 +68 +68 +73 +73 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +101 +106 +106 +110 +110 +115 +116 +115 +119 +119 +125 +125 +125 +129 +129 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +149 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +184 +185 +186 +188 +189 +190 +190 +194 +194 +195 +196 +196 +199 +198 +198 +200 +200 +200 +200 +200 +202 +202 +204 +204 +205 +204 +204 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +205 +204 +204 +202 +202 +200 +201 +200 +200 +201 +198 +198 +197 +196 +196 +195 +194 +190 +190 +191 +188 +188 +184 +185 +184 +183 +183 +179 +179 +178 +175 +175 +173 +173 +174 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +134 +129 +129 +125 +125 +126 +119 +119 +116 +115 +110 +109 +110 +105 +105 +100 +100 +100 +96 +96 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +74 +72 +72 +68 +68 +64 +64 +64 +58 +55 +54 +55 +51 +51 +50 +50 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +34 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +14 +13 +14 +14 +13 +13 +14 +14 +14 +14 +14 +14 +13 +13 +13 +14 +14 +14 +14 +13 +14 +13 +13 +13 +13 +14 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +40 +43 +43 +47 +46 +47 +51 +50 +55 +55 +55 +58 +58 +64 +65 +65 +68 +68 +72 +72 +73 +76 +76 +82 +82 +83 +86 +86 +90 +90 +96 +96 +96 +100 +100 +105 +106 +106 +110 +110 +109 +110 +110 +116 +116 +119 +119 +119 +125 +126 +130 +129 +131 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +157 +157 +157 +161 +161 +164 +165 +165 +169 +169 +173 +172 +174 +175 +175 +179 +178 +182 +182 +183 +185 +185 +189 +188 +188 +191 +190 +195 +194 +195 +196 +196 +198 +198 +199 +200 +201 +200 +200 +202 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +204 +204 +204 +204 +202 +202 +202 +200 +201 +200 +200 +200 +199 +198 +196 +196 +196 +194 +194 +190 +190 +190 +189 +189 +184 +185 +185 +182 +183 +179 +178 +175 +175 +175 +173 +173 +169 +169 +168 +165 +164 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +144 +139 +139 +133 +133 +129 +129 +129 +126 +125 +120 +119 +119 +115 +115 +110 +110 +109 +106 +106 +100 +100 +100 +96 +96 +90 +90 +88 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +64 +64 +64 +59 +58 +55 +55 +54 +50 +50 +47 +47 +45 +43 +42 +41 +41 +37 +36 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +13 +13 +14 +13 +14 +13 +14 +14 +14 +14 +13 +14 +14 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +51 +55 +55 +59 +58 +59 +65 +64 +68 +68 +68 +72 +73 +77 +76 +81 +82 +82 +86 +86 +90 +90 +90 +96 +96 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +118 +119 +119 +125 +125 +130 +129 +129 +133 +133 +139 +139 +139 +143 +143 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +163 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +178 +182 +182 +185 +184 +185 +189 +189 +191 +190 +191 +195 +195 +196 +196 +198 +198 +198 +201 +200 +201 +200 +200 +203 +202 +205 +204 +204 +205 +205 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +204 +204 +204 +204 +205 +202 +202 +200 +200 +200 +200 +200 +199 +199 +198 +197 +196 +194 +195 +195 +191 +190 +188 +188 +184 +185 +185 +183 +183 +178 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +158 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +134 +133 +130 +129 +125 +125 +125 +119 +120 +115 +116 +116 +110 +109 +106 +105 +106 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +77 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +59 +59 +55 +54 +54 +50 +50 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +28 +25 +25 +21 +21 +19 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +13 +14 +13 +14 +13 +13 +13 +14 +14 +13 +13 +14 +13 +13 +14 +13 +14 +13 +13 +14 +13 +13 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +28 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +50 +55 +55 +55 +59 +64 +64 +65 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +107 +109 +110 +115 +115 +119 +119 +119 +125 +125 +129 +129 +129 +133 +133 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +182 +182 +184 +185 +185 +189 +189 +190 +190 +194 +194 +195 +197 +196 +198 +199 +198 +200 +201 +201 +200 +200 +202 +202 +205 +205 +205 +205 +204 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +205 +204 +204 +204 +204 +202 +202 +201 +200 +201 +201 +200 +198 +198 +199 +196 +197 +195 +194 +191 +191 +190 +188 +189 +185 +184 +185 +183 +183 +183 +183 +182 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +126 +125 +120 +119 +120 +115 +115 +110 +110 +105 +106 +106 +100 +100 +96 +95 +96 +90 +90 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +69 +68 +68 +64 +64 +59 +59 +58 +55 +54 +51 +50 +51 +47 +47 +42 +43 +43 +41 +41 +37 +36 +37 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +13 +13 +14 +13 +13 +14 +13 +14 +13 +14 +14 +14 +13 +13 +14 +14 +13 +13 +14 +14 +14 +14 +13 +13 +12 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +40 +43 +43 +43 +47 +47 +51 +51 +55 +54 +55 +59 +59 +65 +64 +64 +68 +69 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +88 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +109 +110 +115 +116 +116 +115 +116 +119 +119 +125 +125 +126 +129 +129 +134 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +157 +157 +157 +161 +161 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +179 +178 +179 +182 +183 +184 +184 +185 +189 +188 +190 +190 +190 +194 +194 +197 +196 +197 +198 +198 +200 +201 +201 +200 +201 +202 +202 +205 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +205 +204 +205 +202 +202 +201 +200 +200 +200 +200 +198 +199 +198 +196 +197 +194 +194 +195 +191 +190 +188 +189 +189 +184 +185 +183 +182 +183 +178 +179 +175 +174 +174 +173 +173 +169 +169 +165 +165 +165 +161 +161 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +129 +130 +129 +125 +125 +119 +119 +119 +116 +115 +116 +115 +116 +110 +109 +106 +105 +106 +100 +100 +96 +96 +91 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +69 +64 +64 +64 +58 +58 +54 +54 +55 +51 +50 +47 +47 +43 +43 +42 +41 +41 +37 +36 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +14 +13 +12 +13 +13 +14 +13 +14 +14 +13 +13 +14 +14 +14 +13 +13 +13 +14 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +28 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +46 +47 +47 +47 +46 +51 +50 +54 +54 +55 +58 +58 +64 +65 +66 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +115 +115 +115 +119 +119 +125 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +164 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +178 +178 +183 +182 +184 +184 +185 +188 +189 +190 +190 +190 +194 +194 +196 +196 +199 +199 +198 +200 +200 +200 +200 +200 +202 +202 +204 +205 +204 +204 +204 +206 +206 +206 +206 +206 +207 +207 +207 +206 +207 +206 +206 +207 +206 +206 +206 +206 +204 +204 +204 +204 +204 +203 +202 +202 +200 +200 +201 +200 +200 +198 +198 +196 +196 +197 +195 +194 +190 +191 +188 +189 +189 +184 +185 +183 +182 +182 +179 +178 +179 +178 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +119 +120 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +87 +82 +82 +76 +76 +76 +72 +72 +68 +68 +65 +65 +64 +58 +58 +55 +55 +54 +50 +50 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +34 +31 +30 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +13 +14 +14 +14 +13 +13 +14 +14 +14 +13 +13 +13 +14 +13 +14 +13 +13 +15 +15 +16 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +45 +47 +46 +51 +51 +55 +55 +54 +58 +59 +64 +65 +64 +68 +68 +69 +69 +69 +72 +72 +77 +77 +76 +82 +82 +86 +86 +89 +90 +89 +96 +95 +100 +100 +100 +106 +106 +110 +110 +110 +115 +115 +119 +119 +120 +125 +125 +129 +129 +130 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +182 +185 +184 +185 +188 +189 +190 +190 +191 +195 +195 +197 +197 +197 +198 +198 +200 +201 +201 +200 +200 +202 +202 +203 +204 +204 +204 +204 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +203 +200 +201 +201 +200 +198 +198 +199 +196 +197 +194 +195 +194 +191 +190 +189 +188 +188 +184 +185 +182 +183 +182 +178 +178 +175 +175 +175 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +151 +151 +151 +147 +147 +143 +143 +143 +140 +140 +133 +133 +131 +129 +129 +125 +125 +119 +119 +119 +116 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +59 +58 +58 +54 +54 +51 +51 +50 +46 +47 +42 +43 +43 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +12 +14 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +14 +14 +13 +13 +14 +13 +14 +14 +13 +13 +14 +14 +13 +14 +13 +13 +16 +15 +15 +17 +17 +19 +19 +19 +21 +21 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +35 +37 +36 +41 +41 +43 +43 +43 +47 +47 +51 +50 +51 +55 +54 +54 +55 +54 +58 +58 +64 +64 +65 +68 +68 +72 +72 +74 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +116 +116 +120 +120 +125 +125 +129 +130 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +175 +175 +175 +179 +178 +182 +182 +182 +185 +185 +188 +188 +188 +190 +190 +195 +195 +194 +196 +197 +198 +198 +199 +200 +201 +200 +200 +203 +202 +202 +205 +204 +204 +204 +204 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +204 +204 +205 +204 +203 +202 +203 +200 +200 +201 +201 +200 +198 +198 +198 +199 +198 +196 +197 +195 +194 +194 +191 +190 +188 +188 +187 +185 +185 +183 +183 +178 +179 +179 +175 +175 +173 +173 +172 +169 +169 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +148 +148 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +120 +119 +120 +115 +116 +109 +110 +110 +105 +105 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +76 +76 +76 +76 +73 +73 +68 +68 +68 +64 +64 +58 +59 +59 +55 +54 +51 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +14 +14 +13 +13 +13 +13 +14 +14 +13 +13 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +16 +15 +15 +15 +15 +17 +17 +17 +19 +19 +21 +21 +23 +25 +25 +27 +27 +32 +31 +31 +33 +33 +37 +37 +37 +40 +41 +41 +41 +41 +43 +43 +46 +47 +47 +50 +51 +54 +54 +57 +59 +58 +64 +65 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +109 +110 +110 +116 +115 +119 +119 +120 +125 +125 +129 +129 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +148 +151 +151 +157 +157 +161 +161 +161 +165 +165 +168 +169 +169 +173 +173 +175 +175 +175 +179 +178 +183 +183 +183 +185 +185 +188 +188 +189 +191 +190 +195 +194 +197 +196 +196 +198 +198 +200 +200 +200 +200 +200 +202 +202 +202 +204 +204 +205 +204 +205 +206 +207 +207 +206 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +204 +204 +204 +204 +204 +205 +204 +204 +202 +203 +200 +200 +200 +200 +201 +198 +199 +197 +196 +197 +195 +194 +190 +190 +191 +189 +188 +185 +185 +185 +182 +183 +183 +183 +183 +178 +178 +174 +175 +175 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +130 +125 +125 +120 +119 +115 +116 +116 +110 +110 +106 +106 +106 +100 +99 +96 +96 +96 +90 +90 +86 +86 +86 +83 +82 +76 +76 +77 +72 +72 +68 +68 +64 +64 +64 +58 +58 +54 +55 +54 +51 +51 +47 +46 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +34 +31 +31 +27 +27 +25 +25 +26 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +13 +15 +14 +14 +14 +13 +14 +13 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +14 +13 +13 +13 +14 +14 +13 +13 +16 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +27 +27 +27 +31 +31 +32 +33 +33 +37 +37 +41 +41 +42 +43 +43 +46 +47 +50 +50 +50 +54 +55 +58 +58 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +77 +82 +82 +86 +86 +89 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +115 +119 +120 +120 +125 +125 +129 +129 +130 +134 +133 +139 +140 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +174 +174 +175 +178 +179 +183 +183 +183 +182 +183 +185 +184 +188 +189 +188 +191 +191 +194 +195 +194 +196 +197 +199 +198 +198 +200 +201 +200 +200 +201 +202 +202 +204 +204 +204 +204 +204 +206 +206 +207 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +200 +200 +200 +200 +201 +199 +198 +198 +196 +196 +197 +196 +196 +194 +194 +191 +191 +191 +189 +188 +184 +185 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +140 +139 +139 +133 +134 +129 +129 +129 +125 +126 +120 +120 +119 +116 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +65 +64 +58 +58 +58 +55 +55 +51 +50 +51 +47 +47 +42 +42 +42 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +14 +13 +13 +14 +14 +14 +14 +14 +13 +13 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +30 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +51 +51 +54 +54 +58 +59 +59 +65 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +105 +109 +110 +110 +116 +116 +119 +120 +125 +125 +126 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +174 +173 +173 +175 +175 +179 +179 +178 +182 +183 +185 +184 +185 +189 +189 +190 +190 +191 +194 +195 +196 +196 +196 +199 +198 +200 +200 +200 +201 +200 +202 +202 +204 +204 +204 +205 +205 +207 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +204 +204 +204 +205 +205 +202 +202 +201 +200 +200 +200 +200 +200 +201 +200 +198 +199 +196 +196 +196 +194 +194 +190 +190 +189 +189 +189 +184 +184 +183 +183 +182 +178 +179 +175 +175 +175 +173 +172 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +120 +119 +119 +116 +115 +109 +110 +110 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +65 +64 +58 +58 +58 +54 +54 +50 +51 +47 +47 +47 +43 +42 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +22 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +13 +13 +14 +14 +14 +14 +13 +13 +13 +14 +13 +14 +14 +14 +14 +14 +14 +14 +13 +13 +13 +14 +14 +13 +13 +14 +13 +13 +14 +13 +13 +15 +15 +15 +16 +17 +19 +19 +20 +21 +20 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +46 +47 +47 +50 +50 +54 +55 +59 +59 +59 +65 +65 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +105 +106 +110 +110 +110 +115 +115 +120 +120 +119 +125 +125 +130 +129 +129 +134 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +174 +174 +179 +179 +183 +182 +183 +184 +185 +188 +189 +189 +191 +191 +195 +194 +197 +196 +196 +198 +199 +201 +200 +200 +200 +200 +200 +200 +200 +202 +202 +205 +204 +205 +205 +204 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +207 +204 +204 +205 +204 +204 +204 +205 +202 +202 +203 +201 +201 +200 +200 +200 +198 +199 +196 +196 +194 +195 +194 +190 +191 +188 +189 +188 +185 +185 +183 +183 +183 +179 +178 +175 +175 +175 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +126 +125 +119 +120 +116 +115 +116 +110 +110 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +83 +76 +76 +72 +72 +69 +68 +68 +64 +64 +58 +59 +59 +54 +55 +51 +50 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +26 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +14 +13 +14 +13 +14 +14 +13 +13 +14 +14 +13 +13 +14 +14 +14 +13 +14 +14 +14 +14 +13 +14 +14 +14 +13 +13 +14 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +36 +41 +41 +42 +43 +43 +47 +47 +51 +51 +50 +54 +54 +58 +58 +59 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +91 +90 +90 +95 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +115 +119 +119 +119 +125 +125 +129 +129 +129 +133 +133 +139 +139 +144 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +164 +168 +169 +169 +172 +173 +175 +175 +175 +178 +179 +183 +183 +184 +185 +185 +189 +189 +191 +190 +190 +194 +195 +195 +194 +194 +197 +196 +199 +199 +199 +200 +201 +201 +200 +201 +202 +203 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +204 +204 +204 +204 +204 +203 +202 +200 +200 +200 +200 +200 +198 +198 +198 +197 +196 +194 +194 +195 +190 +190 +189 +189 +189 +184 +185 +183 +183 +179 +179 +178 +175 +175 +172 +173 +172 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +134 +133 +134 +129 +129 +125 +125 +125 +119 +119 +116 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +83 +82 +82 +76 +76 +72 +73 +73 +68 +68 +64 +65 +65 +58 +59 +55 +54 +55 +51 +50 +47 +47 +48 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +27 +27 +27 +25 +24 +21 +21 +21 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +13 +13 +13 +14 +14 +13 +14 +13 +14 +14 +14 +13 +13 +14 +14 +14 +14 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +46 +46 +51 +50 +51 +55 +54 +58 +58 +58 +64 +64 +68 +68 +73 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +99 +106 +106 +110 +110 +110 +116 +115 +120 +120 +126 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +162 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +178 +183 +182 +182 +183 +182 +184 +184 +188 +189 +189 +191 +190 +195 +195 +195 +196 +197 +198 +198 +200 +200 +200 +200 +201 +202 +203 +202 +204 +204 +204 +204 +204 +204 +204 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +203 +201 +200 +200 +200 +200 +199 +198 +199 +196 +197 +194 +194 +190 +190 +190 +189 +189 +185 +185 +185 +183 +182 +179 +179 +179 +174 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +134 +133 +129 +129 +125 +125 +125 +119 +120 +115 +116 +115 +109 +110 +106 +106 +100 +100 +100 +95 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +65 +59 +58 +55 +54 +51 +50 +51 +47 +47 +43 +43 +43 +41 +41 +41 +40 +40 +37 +37 +33 +33 +33 +31 +31 +26 +27 +28 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +14 +14 +13 +14 +13 +14 +14 +14 +13 +13 +14 +14 +14 +14 +14 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +12 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +36 +37 +40 +41 +42 +43 +43 +47 +47 +51 +50 +56 +54 +55 +58 +59 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +81 +82 +82 +86 +86 +90 +90 +91 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +115 +119 +119 +125 +125 +125 +130 +130 +134 +133 +133 +139 +139 +143 +143 +144 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +182 +183 +184 +185 +189 +188 +190 +191 +190 +194 +194 +197 +196 +197 +198 +199 +199 +198 +198 +200 +200 +200 +201 +201 +203 +202 +204 +204 +204 +204 +205 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +205 +204 +204 +204 +205 +202 +203 +200 +200 +200 +200 +201 +199 +198 +196 +197 +197 +194 +194 +191 +191 +190 +188 +188 +185 +184 +184 +183 +182 +178 +179 +179 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +134 +134 +129 +130 +126 +125 +120 +119 +120 +115 +115 +110 +110 +110 +106 +106 +100 +100 +100 +100 +100 +96 +96 +97 +90 +90 +86 +86 +86 +81 +82 +76 +76 +72 +73 +72 +68 +68 +65 +64 +64 +58 +58 +58 +59 +59 +55 +54 +51 +51 +51 +47 +47 +43 +43 +42 +40 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +12 +13 +13 +14 +14 +13 +13 +14 +13 +13 +14 +13 +13 +14 +13 +14 +14 +13 +14 +14 +14 +13 +14 +13 +14 +14 +13 +14 +14 +13 +15 +16 +17 +17 +17 +19 +19 +20 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +36 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +51 +50 +54 +54 +58 +59 +58 +65 +64 +68 +68 +68 +73 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +109 +116 +115 +119 +119 +120 +125 +125 +130 +129 +134 +134 +133 +139 +139 +143 +143 +143 +147 +147 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +166 +169 +169 +173 +173 +174 +175 +175 +179 +179 +183 +183 +183 +184 +185 +184 +184 +184 +188 +189 +190 +190 +191 +195 +195 +197 +197 +197 +199 +199 +200 +200 +200 +201 +201 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +207 +206 +206 +207 +206 +207 +206 +207 +207 +206 +206 +205 +204 +204 +205 +204 +202 +202 +201 +200 +200 +200 +200 +199 +198 +198 +197 +196 +194 +195 +194 +191 +190 +189 +188 +185 +184 +185 +183 +183 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +144 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +125 +119 +119 +116 +116 +116 +110 +110 +105 +106 +106 +100 +100 +96 +96 +89 +90 +90 +86 +86 +82 +82 +82 +76 +77 +72 +72 +72 +68 +69 +64 +64 +64 +59 +58 +55 +55 +53 +50 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +33 +33 +33 +31 +27 +27 +27 +27 +25 +25 +21 +21 +20 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +14 +14 +13 +14 +14 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +42 +43 +47 +47 +46 +50 +51 +54 +54 +55 +58 +59 +64 +64 +69 +68 +68 +72 +72 +77 +76 +76 +82 +82 +86 +86 +87 +90 +90 +95 +96 +96 +100 +100 +105 +105 +106 +110 +110 +116 +116 +121 +119 +119 +125 +126 +130 +130 +129 +134 +133 +133 +133 +134 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +160 +165 +165 +165 +169 +169 +173 +173 +173 +175 +174 +175 +175 +175 +179 +178 +182 +183 +183 +184 +185 +188 +189 +189 +191 +190 +194 +195 +196 +196 +196 +199 +199 +200 +200 +200 +200 +200 +202 +202 +202 +204 +205 +204 +204 +205 +206 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +203 +202 +202 +201 +201 +200 +201 +200 +198 +198 +196 +196 +195 +194 +194 +190 +190 +189 +189 +189 +185 +184 +183 +183 +183 +179 +179 +175 +175 +174 +173 +173 +169 +169 +169 +165 +165 +161 +161 +158 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +140 +133 +133 +129 +130 +130 +126 +125 +120 +120 +120 +115 +116 +110 +110 +105 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +73 +72 +68 +69 +66 +64 +64 +59 +58 +55 +54 +55 +50 +50 +47 +46 +47 +43 +43 +43 +43 +43 +41 +41 +37 +36 +37 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +14 +12 +13 +14 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +14 +13 +14 +13 +14 +13 +14 +13 +13 +13 +14 +14 +14 +14 +13 +13 +12 +15 +15 +17 +19 +19 +19 +19 +21 +21 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +46 +51 +50 +50 +54 +54 +58 +58 +59 +64 +64 +68 +69 +68 +73 +72 +76 +76 +76 +82 +82 +86 +86 +85 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +110 +110 +116 +115 +120 +120 +119 +125 +126 +130 +130 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +152 +151 +151 +157 +157 +161 +161 +161 +165 +165 +165 +165 +165 +168 +169 +173 +173 +173 +175 +175 +178 +179 +182 +183 +183 +185 +185 +188 +189 +188 +191 +190 +195 +194 +194 +197 +197 +199 +198 +198 +200 +201 +200 +201 +201 +202 +202 +204 +204 +204 +204 +205 +207 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +205 +204 +204 +205 +204 +202 +202 +201 +201 +201 +200 +201 +199 +199 +196 +196 +197 +195 +195 +190 +190 +190 +188 +189 +185 +185 +185 +183 +182 +179 +179 +179 +174 +175 +172 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +144 +139 +139 +134 +134 +134 +130 +129 +125 +125 +119 +120 +119 +116 +116 +109 +110 +110 +106 +105 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +79 +76 +76 +72 +72 +68 +69 +68 +65 +64 +59 +58 +58 +54 +55 +54 +54 +55 +51 +51 +47 +47 +47 +43 +43 +40 +41 +38 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +12 +13 +13 +14 +14 +13 +13 +14 +13 +13 +13 +14 +13 +14 +14 +13 +14 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +26 +27 +27 +27 +31 +30 +33 +33 +33 +37 +37 +41 +41 +44 +43 +43 +47 +46 +50 +50 +50 +54 +54 +59 +59 +59 +64 +64 +68 +68 +68 +73 +72 +76 +76 +77 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +106 +106 +106 +106 +106 +110 +110 +116 +116 +116 +119 +119 +125 +125 +126 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +172 +173 +173 +175 +175 +178 +179 +179 +183 +182 +184 +185 +185 +188 +188 +191 +190 +190 +194 +194 +197 +197 +196 +198 +198 +201 +200 +200 +201 +200 +202 +202 +205 +204 +204 +204 +204 +207 +207 +207 +207 +206 +207 +206 +206 +207 +206 +206 +206 +207 +206 +206 +204 +204 +204 +205 +205 +202 +202 +200 +201 +200 +200 +200 +198 +198 +198 +197 +196 +195 +195 +195 +190 +190 +188 +188 +189 +185 +185 +182 +183 +179 +179 +179 +175 +174 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +133 +133 +133 +129 +130 +125 +125 +126 +119 +120 +115 +115 +115 +110 +110 +105 +106 +106 +100 +100 +96 +96 +97 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +73 +73 +68 +68 +68 +68 +68 +65 +64 +59 +58 +59 +55 +54 +51 +51 +49 +47 +47 +42 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +16 +15 +16 +15 +15 +13 +13 +13 +12 +13 +14 +13 +13 +14 +13 +14 +14 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +14 +14 +13 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +26 +27 +27 +31 +31 +34 +33 +33 +37 +37 +41 +41 +41 +43 +43 +46 +47 +47 +50 +50 +54 +55 +55 +59 +59 +64 +64 +65 +68 +68 +72 +72 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +116 +116 +119 +120 +126 +125 +129 +130 +129 +134 +134 +140 +139 +139 +143 +143 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +164 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +178 +182 +183 +185 +185 +185 +188 +189 +190 +191 +190 +191 +190 +195 +194 +196 +196 +196 +198 +198 +201 +200 +201 +200 +201 +203 +202 +202 +204 +204 +204 +204 +204 +206 +207 +207 +206 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +204 +204 +204 +204 +204 +202 +202 +203 +200 +200 +201 +200 +200 +198 +198 +196 +196 +197 +194 +195 +190 +191 +189 +188 +188 +185 +184 +183 +183 +183 +179 +179 +175 +174 +175 +173 +173 +169 +169 +169 +164 +165 +161 +161 +161 +157 +157 +151 +151 +148 +147 +147 +143 +143 +139 +139 +139 +134 +133 +133 +133 +133 +129 +129 +125 +125 +125 +120 +119 +116 +116 +116 +110 +110 +105 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +86 +86 +86 +82 +82 +76 +76 +77 +72 +72 +68 +68 +68 +65 +64 +58 +58 +54 +54 +55 +50 +51 +47 +46 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +13 +13 +14 +14 +14 +13 +14 +14 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +13 +14 +13 +13 +15 +15 +16 +17 +17 +19 +18 +22 +21 +20 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +40 +40 +41 +43 +43 +47 +47 +47 +50 +51 +55 +55 +59 +59 +58 +64 +64 +69 +68 +68 +72 +73 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +91 +96 +96 +100 +100 +106 +105 +106 +110 +110 +116 +115 +116 +119 +119 +119 +119 +119 +125 +125 +129 +129 +130 +133 +133 +139 +139 +143 +143 +144 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +174 +175 +179 +178 +182 +183 +185 +185 +184 +189 +188 +190 +191 +190 +195 +195 +196 +197 +197 +198 +198 +201 +200 +200 +200 +200 +202 +202 +202 +205 +205 +204 +204 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +204 +205 +204 +205 +205 +203 +202 +200 +200 +201 +200 +200 +199 +198 +197 +196 +196 +194 +194 +191 +191 +191 +189 +189 +185 +185 +185 +183 +183 +179 +179 +179 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +157 +157 +157 +151 +151 +147 +147 +147 +143 +144 +139 +139 +137 +133 +133 +129 +129 +125 +125 +125 +120 +120 +115 +115 +115 +110 +110 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +88 +86 +86 +82 +82 +76 +76 +77 +72 +73 +68 +68 +68 +64 +64 +59 +58 +58 +54 +54 +50 +51 +51 +46 +47 +42 +42 +43 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +16 +17 +15 +15 +16 +15 +14 +13 +13 +13 +13 +14 +14 +14 +14 +14 +13 +14 +13 +14 +14 +13 +13 +13 +13 +13 +14 +13 +13 +14 +14 +14 +13 +14 +13 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +22 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +47 +47 +47 +51 +51 +54 +54 +55 +58 +59 +64 +64 +66 +68 +68 +72 +72 +76 +76 +77 +82 +82 +86 +86 +86 +90 +90 +90 +90 +90 +96 +96 +99 +100 +100 +105 +106 +109 +110 +112 +115 +116 +120 +120 +125 +126 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +144 +147 +147 +151 +151 +151 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +182 +183 +184 +185 +184 +189 +189 +191 +190 +191 +194 +195 +197 +197 +199 +198 +198 +201 +200 +200 +200 +200 +202 +202 +202 +202 +202 +205 +204 +204 +204 +204 +207 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +204 +204 +204 +205 +203 +202 +202 +202 +201 +200 +201 +200 +200 +198 +199 +196 +196 +197 +194 +195 +191 +191 +189 +189 +189 +184 +184 +183 +183 +182 +179 +179 +175 +175 +175 +172 +173 +169 +169 +169 +165 +165 +161 +161 +162 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +140 +140 +133 +133 +133 +134 +133 +129 +129 +126 +126 +126 +120 +119 +116 +116 +111 +110 +110 +106 +106 +100 +99 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +68 +68 +64 +65 +58 +58 +58 +54 +55 +51 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +32 +27 +27 +25 +25 +21 +21 +21 +19 +19 +16 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +14 +14 +14 +14 +14 +14 +13 +14 +13 +13 +14 +13 +14 +14 +14 +13 +13 +13 +12 +15 +15 +18 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +46 +47 +51 +50 +55 +54 +59 +59 +59 +64 +64 +68 +69 +68 +72 +73 +72 +72 +72 +76 +76 +82 +82 +83 +85 +86 +90 +90 +95 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +116 +119 +119 +125 +125 +125 +130 +129 +133 +133 +133 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +178 +179 +183 +182 +185 +184 +189 +189 +189 +191 +190 +194 +194 +194 +196 +197 +199 +198 +199 +200 +201 +201 +200 +200 +202 +202 +205 +204 +205 +204 +204 +206 +206 +207 +207 +207 +206 +207 +206 +207 +206 +206 +207 +206 +206 +206 +204 +204 +204 +204 +204 +203 +202 +200 +200 +201 +200 +200 +199 +199 +197 +197 +196 +194 +194 +190 +190 +191 +188 +188 +188 +188 +188 +185 +184 +183 +183 +183 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +131 +129 +130 +125 +125 +119 +120 +120 +116 +116 +110 +109 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +91 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +69 +68 +64 +64 +59 +58 +58 +55 +55 +51 +51 +51 +46 +46 +43 +43 +42 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +14 +14 +14 +14 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +14 +13 +13 +16 +15 +17 +17 +17 +19 +19 +19 +19 +19 +21 +21 +25 +25 +25 +27 +26 +31 +31 +31 +33 +33 +37 +37 +41 +41 +41 +43 +42 +47 +47 +47 +50 +50 +51 +51 +51 +54 +54 +58 +59 +59 +64 +64 +68 +68 +71 +72 +72 +77 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +105 +110 +110 +110 +116 +116 +120 +119 +124 +126 +125 +130 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +173 +172 +173 +175 +175 +178 +179 +179 +182 +183 +184 +184 +184 +188 +188 +191 +190 +190 +194 +194 +196 +196 +196 +198 +199 +200 +201 +201 +200 +200 +202 +202 +204 +205 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +207 +207 +207 +206 +204 +204 +205 +204 +204 +202 +202 +201 +200 +200 +200 +200 +200 +200 +200 +198 +199 +196 +197 +197 +195 +194 +190 +190 +189 +189 +189 +185 +185 +184 +184 +184 +183 +183 +179 +178 +179 +175 +175 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +158 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +140 +139 +133 +133 +129 +129 +129 +125 +125 +119 +120 +120 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +95 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +72 +72 +68 +68 +69 +64 +64 +59 +58 +55 +55 +55 +51 +51 +46 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +26 +25 +25 +21 +21 +20 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +13 +14 +13 +14 +14 +13 +14 +14 +14 +13 +13 +14 +13 +14 +14 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +13 +13 +13 +12 +15 +15 +18 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +33 +33 +33 +37 +37 +41 +41 +40 +43 +42 +47 +47 +47 +51 +50 +55 +54 +58 +58 +59 +64 +64 +68 +68 +68 +72 +73 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +99 +100 +100 +106 +106 +110 +109 +110 +115 +116 +119 +120 +119 +126 +126 +129 +129 +130 +133 +133 +139 +139 +139 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +178 +182 +183 +182 +185 +185 +188 +188 +191 +190 +191 +195 +194 +196 +196 +197 +198 +199 +200 +200 +201 +200 +200 +202 +202 +202 +205 +204 +204 +204 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +205 +202 +202 +201 +201 +201 +200 +200 +198 +198 +199 +196 +196 +194 +194 +195 +191 +191 +191 +190 +190 +189 +188 +184 +184 +185 +183 +183 +179 +179 +176 +175 +175 +173 +173 +169 +169 +169 +164 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +129 +129 +129 +125 +126 +120 +120 +119 +115 +116 +110 +110 +110 +105 +106 +99 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +68 +68 +64 +64 +59 +59 +58 +54 +54 +50 +50 +51 +47 +47 +43 +43 +43 +41 +41 +36 +36 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +16 +13 +13 +12 +13 +14 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +14 +14 +14 +13 +13 +13 +14 +13 +14 +14 +14 +13 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +42 +46 +46 +47 +50 +50 +55 +54 +54 +58 +58 +64 +64 +65 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +116 +119 +119 +125 +125 +130 +129 +129 +133 +133 +133 +134 +134 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +179 +182 +182 +184 +185 +184 +189 +188 +190 +190 +190 +194 +195 +196 +197 +196 +198 +199 +201 +200 +200 +200 +200 +203 +202 +204 +204 +204 +204 +205 +204 +204 +205 +207 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +202 +200 +200 +201 +201 +201 +201 +201 +199 +198 +199 +196 +196 +194 +195 +191 +190 +190 +189 +188 +185 +184 +184 +183 +183 +179 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +158 +157 +151 +151 +151 +147 +147 +143 +143 +143 +140 +139 +133 +133 +133 +130 +129 +125 +125 +126 +120 +120 +116 +116 +116 +110 +110 +105 +105 +100 +100 +99 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +69 +68 +64 +64 +64 +59 +58 +55 +55 +51 +51 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +30 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +16 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +14 +14 +14 +13 +14 +14 +13 +14 +13 +14 +13 +14 +14 +13 +14 +13 +13 +14 +14 +14 +14 +14 +13 +13 +14 +14 +13 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +46 +47 +47 +51 +50 +55 +54 +58 +58 +58 +64 +64 +68 +68 +69 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +105 +110 +110 +110 +115 +115 +119 +120 +119 +126 +125 +129 +130 +129 +133 +133 +140 +139 +139 +143 +143 +147 +147 +147 +147 +147 +151 +151 +158 +157 +157 +161 +161 +165 +165 +165 +169 +169 +169 +169 +169 +173 +173 +175 +175 +174 +179 +179 +183 +183 +183 +185 +185 +189 +189 +190 +191 +191 +195 +194 +196 +196 +196 +198 +199 +201 +200 +201 +201 +200 +202 +202 +202 +204 +204 +204 +204 +205 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +207 +206 +204 +205 +204 +205 +205 +203 +202 +200 +201 +200 +200 +201 +198 +199 +196 +197 +196 +195 +195 +191 +190 +190 +189 +189 +185 +185 +184 +183 +183 +179 +178 +179 +175 +175 +173 +173 +169 +169 +169 +165 +164 +161 +161 +161 +157 +157 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +140 +133 +133 +129 +129 +125 +125 +125 +119 +119 +115 +116 +116 +110 +110 +110 +110 +110 +105 +106 +100 +100 +100 +96 +96 +90 +90 +90 +85 +86 +82 +82 +77 +76 +76 +72 +73 +68 +68 +69 +64 +64 +59 +59 +59 +55 +54 +50 +50 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +14 +14 +13 +13 +14 +13 +13 +13 +13 +13 +14 +14 +13 +13 +14 +13 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +24 +25 +25 +27 +27 +31 +31 +32 +33 +32 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +50 +55 +54 +54 +59 +58 +64 +64 +65 +68 +68 +72 +72 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +105 +106 +106 +110 +110 +116 +115 +116 +120 +119 +125 +125 +130 +130 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +174 +175 +175 +178 +179 +183 +182 +183 +185 +185 +185 +185 +184 +189 +189 +191 +190 +191 +194 +195 +197 +196 +196 +198 +198 +200 +200 +200 +201 +200 +202 +202 +204 +204 +204 +204 +205 +204 +204 +204 +206 +206 +206 +207 +206 +206 +207 +206 +207 +206 +206 +207 +206 +207 +204 +204 +204 +204 +204 +202 +203 +202 +200 +200 +201 +201 +200 +198 +199 +196 +197 +197 +195 +195 +191 +190 +190 +188 +189 +185 +184 +182 +183 +183 +179 +179 +175 +175 +175 +172 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +147 +147 +147 +143 +143 +140 +139 +139 +133 +134 +129 +129 +130 +126 +125 +120 +119 +120 +116 +115 +110 +110 +110 +106 +106 +100 +100 +97 +96 +96 +90 +90 +86 +86 +87 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +59 +58 +54 +54 +51 +51 +47 +47 +47 +42 +43 +41 +41 +41 +37 +37 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +23 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +12 +14 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +14 +13 +13 +13 +14 +13 +13 +14 +14 +13 +14 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +36 +41 +41 +41 +43 +43 +47 +46 +47 +50 +50 +55 +55 +59 +58 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +110 +110 +110 +116 +116 +119 +119 +120 +126 +126 +129 +130 +130 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +162 +161 +161 +165 +164 +169 +169 +169 +173 +173 +173 +173 +173 +175 +175 +179 +178 +179 +183 +183 +184 +184 +186 +189 +189 +191 +191 +194 +195 +195 +197 +197 +198 +199 +199 +201 +200 +201 +200 +200 +200 +200 +202 +202 +203 +204 +205 +205 +205 +205 +206 +207 +207 +207 +206 +207 +206 +207 +207 +207 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +205 +202 +203 +201 +201 +200 +201 +201 +198 +198 +196 +197 +196 +194 +194 +191 +191 +190 +188 +189 +185 +185 +185 +182 +183 +179 +179 +179 +175 +175 +173 +173 +170 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +134 +134 +129 +130 +125 +126 +120 +120 +120 +116 +116 +109 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +73 +69 +68 +68 +64 +64 +58 +58 +58 +54 +55 +55 +55 +55 +51 +51 +47 +47 +46 +42 +43 +40 +41 +41 +37 +37 +33 +33 +31 +32 +31 +27 +27 +25 +25 +24 +21 +21 +21 +21 +21 +19 +19 +17 +18 +18 +15 +15 +15 +15 +14 +13 +13 +12 +13 +14 +13 +13 +13 +13 +13 +14 +13 +14 +14 +14 +13 +13 +13 +14 +14 +13 +14 +14 +13 +14 +13 +14 +14 +14 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +41 +41 +41 +42 +43 +46 +47 +46 +50 +50 +54 +54 +55 +59 +59 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +115 +119 +119 +126 +125 +126 +129 +129 +133 +134 +140 +139 +139 +143 +143 +147 +148 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +172 +173 +175 +175 +179 +178 +182 +183 +183 +185 +184 +189 +189 +189 +190 +191 +190 +190 +191 +194 +194 +196 +196 +196 +198 +199 +201 +201 +200 +200 +200 +203 +202 +204 +204 +205 +205 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +207 +205 +205 +204 +204 +204 +202 +202 +201 +200 +200 +200 +200 +198 +198 +198 +196 +196 +195 +195 +194 +191 +190 +189 +189 +189 +185 +185 +183 +182 +178 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +134 +133 +133 +130 +130 +125 +126 +126 +119 +119 +116 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +97 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +73 +72 +68 +68 +68 +68 +68 +64 +64 +58 +59 +58 +55 +55 +51 +50 +49 +47 +47 +43 +42 +41 +41 +41 +37 +37 +33 +33 +33 +31 +30 +31 +31 +31 +27 +28 +25 +25 +25 +21 +21 +19 +20 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +13 +14 +14 +14 +14 +13 +14 +14 +13 +14 +14 +14 +14 +14 +13 +13 +14 +14 +14 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +31 +31 +31 +32 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +50 +54 +55 +59 +59 +58 +64 +64 +68 +68 +73 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +109 +111 +116 +115 +120 +120 +125 +125 +126 +129 +130 +133 +134 +134 +139 +139 +140 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +158 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +179 +179 +179 +183 +183 +185 +185 +185 +189 +188 +190 +191 +194 +195 +195 +197 +196 +198 +199 +198 +200 +200 +200 +200 +200 +202 +202 +204 +204 +204 +204 +204 +206 +207 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +204 +205 +204 +204 +204 +202 +202 +200 +200 +200 +200 +200 +198 +199 +199 +196 +196 +194 +195 +191 +191 +190 +188 +188 +184 +185 +184 +183 +183 +179 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +140 +139 +139 +140 +134 +133 +129 +129 +129 +126 +126 +119 +119 +120 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +73 +72 +74 +68 +68 +65 +64 +58 +58 +59 +54 +54 +51 +51 +50 +47 +47 +47 +46 +47 +43 +42 +41 +41 +41 +37 +37 +33 +33 +31 +30 +30 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +14 +14 +14 +13 +13 +14 +14 +14 +14 +14 +14 +14 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +34 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +51 +50 +50 +55 +54 +58 +58 +59 +64 +65 +69 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +87 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +109 +115 +115 +116 +115 +115 +119 +119 +125 +125 +126 +130 +129 +133 +134 +135 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +174 +178 +179 +179 +183 +183 +184 +185 +184 +188 +188 +190 +190 +191 +195 +195 +197 +196 +196 +198 +199 +200 +200 +201 +201 +201 +202 +202 +204 +204 +204 +205 +204 +204 +204 +204 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +205 +204 +204 +204 +202 +202 +202 +200 +201 +200 +200 +200 +198 +198 +197 +196 +196 +195 +194 +190 +191 +191 +188 +189 +184 +185 +185 +183 +183 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +156 +151 +151 +151 +147 +147 +143 +143 +144 +139 +139 +133 +134 +129 +130 +129 +125 +125 +120 +119 +120 +115 +116 +115 +115 +116 +110 +109 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +69 +68 +68 +68 +69 +64 +64 +58 +59 +58 +54 +54 +51 +50 +47 +47 +46 +43 +43 +41 +41 +40 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +22 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +13 +14 +13 +14 +14 +14 +13 +13 +13 +13 +13 +14 +14 +13 +14 +13 +14 +14 +14 +13 +14 +14 +14 +14 +13 +13 +15 +15 +15 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +42 +43 +42 +47 +47 +50 +50 +50 +54 +54 +59 +59 +59 +64 +65 +69 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +105 +105 +106 +110 +110 +116 +115 +120 +119 +119 +126 +126 +129 +129 +129 +133 +133 +133 +133 +133 +139 +140 +143 +143 +143 +147 +147 +151 +151 +154 +157 +156 +161 +161 +164 +165 +165 +169 +169 +173 +172 +173 +175 +175 +179 +179 +179 +183 +182 +185 +184 +185 +189 +188 +190 +191 +192 +194 +194 +196 +196 +198 +199 +199 +200 +200 +201 +200 +200 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +207 +206 +204 +205 +204 +204 +204 +202 +202 +201 +200 +200 +201 +201 +199 +198 +199 +197 +197 +195 +195 +191 +191 +190 +188 +189 +184 +184 +184 +183 +182 +178 +178 +179 +175 +175 +172 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +152 +151 +151 +147 +147 +143 +143 +143 +139 +139 +139 +139 +139 +133 +133 +129 +129 +129 +125 +126 +119 +120 +120 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +90 +90 +90 +86 +86 +82 +82 +82 +77 +76 +72 +72 +69 +68 +68 +64 +64 +58 +58 +59 +54 +54 +50 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +14 +14 +14 +14 +14 +13 +14 +13 +14 +14 +14 +14 +14 +13 +14 +14 +13 +13 +14 +14 +13 +13 +13 +14 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +46 +47 +47 +50 +51 +55 +54 +54 +58 +59 +64 +65 +64 +68 +68 +72 +72 +76 +76 +82 +82 +83 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +110 +110 +110 +116 +115 +119 +120 +120 +126 +126 +130 +129 +131 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +160 +165 +165 +169 +169 +169 +173 +173 +175 +175 +178 +179 +179 +183 +183 +185 +184 +184 +189 +189 +191 +190 +191 +194 +194 +197 +197 +196 +198 +199 +200 +200 +201 +200 +201 +203 +203 +204 +205 +205 +204 +204 +207 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +204 +204 +205 +204 +204 +202 +202 +201 +200 +201 +200 +200 +198 +198 +198 +196 +196 +195 +194 +194 +191 +191 +189 +188 +189 +185 +185 +183 +183 +183 +179 +179 +175 +175 +172 +173 +173 +169 +169 +169 +169 +169 +165 +165 +165 +165 +164 +161 +161 +157 +157 +157 +151 +151 +147 +147 +145 +143 +143 +139 +139 +133 +133 +133 +130 +129 +125 +125 +126 +119 +119 +120 +119 +120 +116 +116 +110 +109 +110 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +58 +59 +54 +54 +51 +51 +47 +47 +46 +43 +42 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +26 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +14 +13 +13 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +34 +33 +33 +37 +36 +37 +37 +37 +41 +41 +42 +43 +43 +46 +47 +50 +51 +51 +54 +54 +59 +59 +59 +64 +65 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +105 +106 +109 +110 +110 +115 +116 +120 +119 +119 +125 +125 +129 +129 +129 +134 +134 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +178 +179 +183 +183 +183 +185 +185 +189 +188 +189 +190 +191 +194 +194 +196 +196 +197 +199 +198 +200 +200 +200 +200 +200 +203 +202 +202 +204 +204 +204 +204 +204 +206 +206 +207 +207 +206 +207 +206 +206 +206 +206 +207 +207 +206 +206 +204 +205 +205 +205 +204 +203 +202 +202 +200 +201 +200 +200 +200 +199 +198 +196 +197 +196 +195 +194 +190 +190 +189 +189 +189 +185 +185 +183 +182 +183 +178 +179 +178 +178 +179 +175 +174 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +140 +139 +139 +133 +133 +129 +130 +130 +125 +126 +120 +120 +116 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +91 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +65 +65 +64 +59 +59 +54 +54 +54 +51 +50 +47 +47 +47 +43 +43 +41 +41 +41 +37 +36 +33 +33 +33 +31 +30 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +13 +14 +14 +13 +14 +13 +13 +13 +14 +14 +13 +13 +14 +14 +14 +13 +14 +14 +14 +13 +13 +13 +13 +13 +15 +15 +16 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +48 +50 +51 +54 +55 +58 +58 +58 +64 +64 +68 +68 +68 +72 +72 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +95 +96 +96 +100 +100 +106 +106 +106 +109 +110 +115 +115 +116 +119 +120 +126 +125 +125 +129 +130 +134 +134 +133 +139 +139 +143 +143 +146 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +164 +169 +169 +173 +173 +173 +175 +174 +178 +179 +178 +183 +182 +185 +184 +189 +188 +189 +190 +190 +194 +195 +195 +196 +197 +198 +199 +198 +200 +200 +200 +200 +200 +203 +203 +204 +204 +204 +204 +204 +206 +207 +207 +206 +207 +207 +206 +206 +206 +206 +206 +206 +207 +207 +206 +207 +206 +204 +204 +204 +205 +204 +202 +202 +203 +200 +200 +200 +200 +199 +198 +198 +196 +197 +194 +194 +194 +190 +190 +190 +190 +191 +188 +189 +185 +185 +184 +183 +182 +179 +179 +179 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +140 +133 +133 +129 +130 +125 +125 +125 +120 +119 +116 +115 +115 +110 +109 +106 +106 +105 +100 +100 +96 +96 +96 +90 +90 +86 +86 +83 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +59 +58 +54 +54 +54 +50 +50 +47 +46 +47 +43 +42 +41 +40 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +22 +19 +20 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +13 +14 +14 +14 +14 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +13 +13 +14 +13 +15 +15 +15 +17 +17 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +28 +31 +31 +33 +33 +36 +37 +36 +41 +41 +43 +43 +43 +47 +47 +47 +47 +46 +51 +51 +55 +54 +55 +58 +58 +65 +65 +66 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +109 +110 +115 +116 +119 +119 +120 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +168 +169 +169 +173 +173 +175 +175 +175 +179 +179 +182 +183 +182 +184 +185 +189 +188 +188 +190 +190 +194 +194 +195 +196 +197 +198 +199 +201 +201 +201 +200 +200 +202 +202 +202 +204 +205 +204 +204 +204 +206 +207 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +207 +204 +204 +204 +204 +204 +202 +203 +202 +200 +200 +201 +201 +200 +201 +201 +198 +198 +199 +196 +196 +194 +195 +192 +191 +190 +189 +188 +184 +185 +185 +183 +182 +179 +178 +178 +175 +174 +174 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +159 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +134 +129 +130 +130 +125 +126 +119 +119 +120 +115 +115 +110 +110 +106 +106 +106 +100 +99 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +77 +76 +76 +72 +72 +69 +68 +69 +64 +64 +58 +58 +55 +54 +55 +50 +50 +46 +47 +47 +43 +43 +41 +41 +40 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +14 +13 +14 +13 +14 +13 +13 +13 +14 +14 +13 +14 +13 +13 +14 +14 +14 +14 +13 +13 +14 +15 +16 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +46 +47 +46 +51 +51 +54 +55 +55 +58 +58 +64 +64 +64 +69 +68 +72 +72 +73 +77 +76 +82 +82 +82 +86 +86 +90 +90 +96 +96 +96 +99 +100 +106 +106 +106 +110 +110 +115 +116 +115 +119 +119 +125 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +148 +147 +147 +151 +151 +157 +156 +157 +161 +161 +165 +164 +165 +169 +169 +173 +172 +173 +175 +175 +179 +178 +179 +183 +183 +185 +185 +189 +189 +188 +191 +191 +195 +194 +194 +196 +197 +197 +197 +197 +198 +198 +200 +200 +200 +200 +200 +203 +202 +203 +204 +205 +204 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +204 +205 +204 +204 +203 +202 +202 +200 +201 +200 +200 +200 +198 +198 +196 +197 +197 +194 +194 +195 +194 +194 +190 +190 +189 +188 +188 +184 +184 +182 +182 +179 +179 +179 +175 +175 +173 +172 +173 +169 +169 +165 +165 +164 +161 +161 +157 +157 +156 +151 +151 +147 +147 +147 +143 +143 +139 +139 +133 +133 +133 +130 +129 +125 +125 +125 +119 +119 +115 +116 +115 +110 +110 +106 +106 +106 +99 +100 +96 +96 +95 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +59 +58 +54 +55 +54 +51 +51 +46 +47 +47 +43 +43 +41 +41 +38 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +12 +13 +13 +13 +13 +13 +13 +13 +14 +13 +14 +14 +14 +13 +13 +14 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +14 +14 +14 +13 +13 +15 +15 +15 +17 +17 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +30 +31 +31 +33 +33 +36 +37 +37 +41 +41 +43 +43 +43 +46 +47 +50 +50 +50 +54 +54 +58 +58 +59 +65 +64 +68 +68 +71 +73 +73 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +105 +106 +110 +109 +110 +116 +116 +120 +119 +126 +126 +125 +130 +129 +133 +134 +134 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +160 +161 +164 +165 +169 +169 +173 +173 +173 +175 +175 +175 +175 +175 +179 +179 +183 +183 +182 +185 +184 +188 +188 +188 +191 +191 +194 +194 +195 +197 +196 +198 +198 +201 +200 +201 +200 +200 +202 +202 +202 +204 +204 +204 +204 +204 +206 +207 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +204 +204 +204 +204 +205 +203 +202 +202 +200 +200 +201 +201 +201 +201 +200 +198 +198 +198 +197 +197 +195 +194 +191 +190 +191 +189 +189 +184 +184 +184 +182 +183 +179 +179 +178 +175 +175 +173 +172 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +126 +119 +119 +115 +115 +116 +109 +110 +106 +105 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +69 +69 +64 +64 +64 +59 +58 +54 +54 +51 +50 +51 +47 +46 +43 +43 +43 +41 +41 +41 +40 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +28 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +12 +13 +14 +13 +13 +14 +14 +14 +13 +14 +13 +13 +14 +14 +13 +13 +14 +14 +14 +13 +13 +14 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +15 +15 +16 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +50 +50 +50 +55 +54 +59 +58 +59 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +101 +100 +100 +106 +106 +109 +109 +110 +115 +116 +119 +119 +120 +126 +125 +129 +130 +129 +134 +133 +139 +139 +139 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +164 +169 +169 +169 +172 +173 +175 +175 +175 +179 +179 +183 +183 +183 +185 +185 +189 +188 +190 +190 +190 +195 +194 +194 +194 +194 +196 +196 +199 +199 +198 +200 +201 +201 +200 +200 +202 +202 +204 +204 +204 +204 +205 +206 +206 +206 +207 +207 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +204 +204 +204 +204 +205 +202 +202 +200 +200 +200 +201 +201 +198 +198 +198 +198 +198 +196 +197 +194 +195 +194 +190 +191 +188 +188 +188 +185 +185 +183 +182 +183 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +134 +134 +129 +129 +126 +125 +125 +120 +119 +116 +116 +115 +110 +110 +106 +105 +105 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +73 +72 +72 +68 +68 +64 +64 +64 +59 +59 +54 +55 +55 +50 +50 +46 +47 +47 +43 +43 +41 +40 +42 +37 +37 +33 +33 +32 +31 +31 +27 +27 +25 +25 +25 +21 +21 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +13 +13 +14 +13 +13 +14 +14 +13 +14 +13 +14 +13 +14 +14 +14 +14 +13 +13 +14 +13 +13 +14 +14 +14 +13 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +36 +36 +37 +40 +40 +43 +43 +43 +47 +47 +50 +50 +50 +54 +55 +58 +58 +59 +64 +64 +68 +68 +68 +72 +72 +76 +77 +83 +82 +82 +86 +85 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +109 +109 +116 +115 +119 +120 +119 +125 +126 +129 +129 +133 +134 +133 +139 +139 +143 +143 +143 +148 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +179 +179 +179 +183 +183 +185 +184 +185 +189 +189 +191 +191 +191 +194 +194 +197 +197 +196 +198 +198 +200 +201 +200 +201 +201 +202 +202 +204 +204 +204 +204 +204 +207 +207 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +205 +205 +205 +205 +205 +203 +202 +202 +200 +200 +200 +200 +200 +198 +198 +197 +197 +196 +195 +195 +190 +191 +191 +189 +189 +185 +184 +183 +183 +182 +179 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +140 +139 +139 +133 +133 +129 +129 +129 +125 +125 +120 +120 +120 +115 +115 +110 +109 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +87 +86 +86 +82 +82 +76 +77 +77 +72 +72 +68 +68 +68 +64 +64 +59 +59 +58 +54 +55 +51 +51 +51 +46 +47 +42 +42 +42 +41 +41 +37 +37 +33 +33 +33 +31 +31 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +16 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +14 +13 +14 +13 +14 +13 +13 +14 +13 +13 +14 +13 +14 +14 +14 +13 +14 +13 +14 +14 +13 +14 +14 +13 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +40 +41 +42 +43 +47 +46 +47 +51 +50 +54 +54 +55 +59 +59 +64 +65 +69 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +95 +96 +96 +100 +100 +106 +105 +106 +109 +110 +115 +119 +119 +120 +119 +126 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +158 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +179 +179 +179 +183 +184 +184 +185 +184 +189 +189 +191 +191 +191 +194 +195 +197 +196 +199 +199 +199 +200 +200 +200 +201 +200 +202 +203 +203 +202 +202 +204 +204 +204 +204 +205 +207 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +205 +204 +203 +202 +202 +201 +200 +201 +200 +201 +198 +198 +196 +196 +196 +194 +195 +190 +191 +189 +189 +189 +185 +184 +182 +182 +183 +179 +179 +174 +175 +175 +173 +173 +169 +169 +169 +165 +165 +160 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +120 +119 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +69 +64 +64 +59 +59 +54 +54 +54 +50 +50 +47 +46 +47 +43 +43 +43 +42 +43 +40 +41 +37 +37 +37 +33 +33 +31 +31 +32 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +13 +14 +13 +13 +13 +14 +14 +14 +13 +14 +14 +13 +14 +14 +14 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +20 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +42 +47 +47 +51 +51 +51 +54 +55 +59 +59 +59 +64 +64 +69 +68 +69 +73 +73 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +110 +110 +116 +115 +119 +119 +119 +125 +126 +130 +129 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +174 +174 +179 +179 +182 +182 +183 +185 +185 +188 +189 +190 +191 +191 +194 +194 +197 +196 +196 +199 +198 +199 +198 +198 +200 +201 +200 +200 +201 +202 +203 +204 +204 +204 +204 +205 +207 +207 +206 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +204 +204 +205 +204 +205 +202 +203 +200 +201 +200 +200 +200 +199 +199 +197 +197 +196 +194 +195 +190 +190 +190 +189 +188 +185 +185 +185 +183 +183 +179 +178 +179 +175 +175 +173 +172 +170 +169 +168 +165 +165 +161 +161 +161 +157 +156 +151 +151 +151 +147 +147 +143 +143 +143 +140 +139 +133 +134 +133 +129 +129 +125 +125 +120 +120 +119 +116 +117 +110 +110 +110 +106 +105 +105 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +81 +82 +76 +76 +73 +72 +72 +68 +68 +64 +65 +64 +58 +59 +58 +58 +59 +55 +55 +51 +51 +51 +46 +47 +43 +43 +42 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +13 +13 +13 +14 +14 +13 +14 +13 +14 +13 +14 +14 +14 +13 +14 +14 +14 +13 +14 +14 +14 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +30 +33 +33 +37 +37 +37 +41 +40 +43 +43 +43 +47 +47 +50 +50 +50 +54 +54 +58 +59 +59 +65 +64 +68 +68 +68 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +105 +110 +109 +109 +115 +116 +119 +119 +120 +126 +125 +130 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +166 +169 +169 +173 +173 +175 +175 +175 +179 +179 +182 +183 +182 +184 +185 +185 +184 +185 +188 +188 +190 +190 +191 +195 +194 +196 +196 +198 +198 +198 +200 +200 +200 +201 +200 +202 +202 +205 +204 +205 +204 +205 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +200 +200 +201 +199 +201 +198 +198 +198 +196 +194 +195 +194 +191 +190 +189 +188 +185 +185 +185 +182 +183 +179 +179 +178 +175 +175 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +130 +130 +129 +125 +125 +119 +119 +119 +116 +116 +110 +109 +110 +106 +106 +100 +100 +100 +100 +100 +95 +96 +89 +90 +90 +86 +86 +86 +86 +86 +82 +82 +76 +76 +76 +73 +72 +68 +69 +68 +64 +64 +58 +59 +55 +54 +54 +50 +51 +47 +47 +47 +43 +43 +43 +42 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +29 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +14 +14 +14 +14 +14 +13 +14 +14 +13 +13 +14 +14 +13 +14 +13 +13 +14 +14 +13 +14 +14 +13 +13 +13 +12 +15 +15 +17 +17 +19 +19 +18 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +36 +37 +37 +40 +40 +43 +43 +43 +47 +47 +50 +51 +55 +55 +54 +59 +58 +59 +59 +59 +64 +64 +68 +68 +68 +72 +72 +76 +76 +77 +83 +82 +86 +86 +86 +90 +90 +96 +96 +100 +100 +100 +106 +106 +106 +106 +106 +110 +110 +115 +116 +115 +120 +120 +125 +126 +125 +129 +129 +133 +133 +135 +139 +140 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +178 +179 +179 +183 +183 +184 +184 +185 +189 +189 +191 +191 +190 +195 +194 +196 +196 +197 +198 +199 +200 +200 +201 +200 +201 +203 +202 +204 +205 +204 +204 +204 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +205 +204 +205 +205 +202 +202 +201 +200 +200 +201 +200 +198 +199 +198 +196 +197 +195 +194 +194 +191 +190 +188 +188 +188 +185 +185 +183 +183 +183 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +148 +147 +147 +143 +143 +139 +139 +137 +133 +133 +130 +129 +125 +125 +125 +120 +119 +115 +116 +116 +110 +110 +110 +110 +109 +106 +106 +100 +100 +99 +96 +96 +90 +90 +87 +87 +86 +82 +82 +76 +76 +76 +73 +73 +68 +69 +68 +64 +65 +64 +64 +64 +58 +58 +54 +54 +55 +51 +50 +46 +47 +43 +43 +43 +41 +41 +36 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +12 +13 +14 +13 +14 +13 +14 +14 +14 +13 +14 +14 +14 +14 +14 +13 +14 +13 +13 +14 +14 +14 +13 +14 +13 +14 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +46 +47 +47 +47 +47 +51 +51 +54 +54 +54 +58 +58 +65 +64 +65 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +117 +120 +119 +126 +125 +129 +129 +129 +134 +133 +139 +139 +139 +143 +143 +143 +144 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +162 +165 +165 +169 +168 +173 +173 +173 +175 +175 +179 +179 +178 +182 +183 +185 +184 +184 +189 +188 +190 +191 +191 +194 +195 +197 +196 +198 +198 +199 +200 +200 +200 +200 +200 +202 +202 +204 +205 +204 +204 +204 +207 +207 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +207 +206 +206 +204 +204 +204 +204 +204 +202 +202 +200 +200 +200 +200 +200 +198 +198 +198 +196 +196 +194 +195 +195 +190 +191 +188 +189 +185 +185 +185 +182 +182 +179 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +158 +151 +151 +147 +147 +143 +143 +143 +139 +140 +134 +133 +133 +130 +130 +129 +130 +130 +125 +125 +120 +120 +120 +115 +116 +110 +110 +108 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +82 +82 +82 +77 +76 +72 +72 +73 +68 +68 +64 +64 +59 +58 +58 +55 +55 +50 +51 +51 +47 +46 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +14 +14 +14 +14 +14 +13 +14 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +20 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +42 +43 +46 +47 +50 +50 +51 +54 +54 +58 +59 +65 +65 +64 +68 +69 +73 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +103 +106 +106 +110 +110 +116 +116 +116 +119 +119 +125 +125 +125 +130 +129 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +148 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +168 +173 +173 +175 +175 +175 +179 +178 +183 +182 +183 +184 +185 +189 +189 +190 +190 +190 +194 +195 +196 +197 +196 +198 +199 +200 +200 +201 +200 +200 +202 +202 +202 +205 +204 +204 +204 +205 +206 +206 +206 +206 +206 +206 +207 +207 +206 +207 +206 +206 +206 +206 +204 +204 +204 +204 +204 +203 +202 +202 +201 +200 +200 +200 +200 +198 +198 +196 +197 +195 +195 +194 +190 +190 +188 +188 +189 +185 +184 +183 +182 +182 +179 +179 +175 +175 +175 +172 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +148 +143 +143 +143 +143 +143 +139 +139 +133 +133 +134 +129 +129 +125 +125 +122 +119 +120 +116 +116 +109 +110 +110 +106 +106 +100 +100 +100 +96 +96 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +77 +74 +72 +72 +68 +68 +64 +65 +64 +58 +59 +55 +55 +55 +51 +50 +46 +47 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +14 +14 +14 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +42 +43 +47 +47 +51 +50 +50 +55 +55 +59 +59 +58 +64 +64 +64 +65 +65 +68 +68 +72 +72 +72 +76 +76 +82 +82 +84 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +109 +110 +109 +109 +115 +115 +119 +120 +119 +125 +125 +129 +129 +132 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +168 +169 +169 +173 +173 +175 +175 +176 +179 +179 +182 +182 +184 +184 +184 +189 +189 +191 +191 +191 +194 +194 +197 +197 +197 +199 +199 +200 +200 +200 +200 +200 +202 +202 +205 +205 +204 +204 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +205 +204 +205 +202 +202 +201 +201 +200 +200 +201 +198 +198 +198 +196 +196 +195 +194 +195 +191 +191 +188 +188 +188 +185 +185 +183 +183 +183 +179 +179 +175 +175 +172 +173 +173 +169 +169 +165 +165 +165 +161 +161 +161 +161 +161 +157 +157 +151 +151 +151 +147 +146 +143 +143 +141 +139 +139 +134 +133 +129 +129 +129 +125 +125 +119 +120 +119 +116 +115 +115 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +91 +90 +90 +86 +86 +82 +82 +83 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +58 +58 +54 +54 +55 +50 +50 +46 +47 +43 +43 +43 +41 +41 +37 +36 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +14 +13 +13 +14 +14 +14 +13 +14 +14 +13 +13 +14 +13 +14 +13 +14 +13 +13 +14 +13 +13 +14 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +24 +27 +27 +28 +31 +31 +33 +33 +36 +37 +37 +41 +40 +43 +43 +43 +47 +46 +50 +51 +50 +54 +54 +58 +58 +58 +65 +64 +69 +68 +68 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +119 +119 +119 +125 +125 +129 +129 +130 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +178 +182 +183 +182 +184 +185 +189 +188 +189 +190 +191 +194 +195 +194 +197 +196 +198 +198 +200 +200 +201 +200 +200 +202 +202 +202 +204 +205 +204 +204 +204 +206 +206 +207 +207 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +205 +204 +204 +204 +205 +202 +202 +202 +200 +200 +200 +201 +200 +198 +198 +196 +196 +196 +194 +194 +191 +191 +191 +189 +189 +184 +185 +183 +183 +183 +178 +179 +175 +175 +175 +173 +173 +173 +173 +172 +169 +169 +165 +165 +166 +161 +161 +157 +157 +157 +157 +157 +151 +151 +146 +147 +147 +143 +143 +139 +140 +139 +133 +133 +133 +133 +133 +129 +129 +125 +125 +125 +119 +119 +116 +115 +112 +110 +109 +105 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +81 +82 +82 +76 +76 +73 +72 +73 +68 +68 +64 +64 +58 +58 +58 +55 +54 +51 +50 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +22 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +18 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +46 +48 +51 +50 +54 +55 +58 +58 +58 +64 +64 +68 +68 +68 +73 +72 +72 +72 +72 +77 +76 +82 +82 +82 +86 +86 +90 +90 +95 +96 +96 +100 +100 +106 +105 +106 +110 +109 +115 +116 +116 +120 +119 +125 +125 +125 +130 +129 +134 +133 +134 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +174 +178 +179 +178 +183 +183 +184 +184 +189 +189 +188 +190 +190 +194 +194 +194 +196 +197 +199 +198 +198 +201 +201 +200 +200 +200 +202 +203 +204 +204 +205 +205 +204 +206 +206 +207 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +205 +204 +204 +204 +205 +202 +202 +201 +200 +201 +201 +201 +199 +198 +197 +197 +197 +194 +194 +190 +190 +191 +188 +188 +185 +184 +184 +183 +183 +179 +179 +178 +175 +175 +173 +173 +173 +168 +169 +165 +165 +161 +161 +161 +156 +157 +151 +151 +151 +147 +147 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +130 +130 +125 +126 +120 +119 +115 +115 +115 +110 +110 +106 +106 +105 +100 +100 +96 +96 +95 +90 +90 +86 +86 +86 +82 +82 +76 +76 +73 +73 +72 +68 +68 +65 +64 +64 +59 +58 +55 +55 +55 +51 +51 +47 +47 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +13 +14 +14 +14 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +14 +13 +14 +14 +14 +13 +14 +14 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +38 +37 +41 +40 +43 +43 +47 +47 +47 +51 +51 +54 +55 +54 +59 +58 +59 +58 +58 +64 +64 +68 +68 +68 +73 +72 +76 +76 +79 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +110 +110 +115 +116 +120 +119 +120 +125 +125 +129 +129 +133 +133 +133 +140 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +178 +179 +179 +183 +182 +184 +184 +184 +188 +188 +190 +191 +191 +194 +194 +197 +197 +197 +199 +199 +200 +200 +201 +200 +200 +202 +202 +205 +204 +204 +204 +205 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +207 +207 +206 +206 +206 +204 +205 +205 +204 +204 +205 +205 +203 +202 +203 +200 +200 +200 +200 +200 +199 +198 +197 +196 +196 +195 +194 +191 +190 +191 +188 +189 +184 +184 +184 +183 +183 +179 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +146 +147 +145 +143 +143 +140 +139 +133 +133 +133 +129 +129 +125 +125 +125 +119 +119 +115 +115 +116 +109 +109 +106 +105 +106 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +65 +58 +58 +55 +55 +54 +51 +50 +46 +46 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +33 +33 +33 +31 +31 +27 +26 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +14 +14 +13 +13 +14 +14 +15 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +14 +14 +14 +13 +15 +15 +15 +15 +15 +17 +17 +17 +19 +19 +21 +21 +22 +25 +24 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +41 +41 +41 +43 +43 +47 +47 +47 +51 +50 +55 +54 +56 +58 +58 +64 +65 +69 +69 +68 +72 +73 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +105 +109 +110 +110 +116 +115 +119 +119 +119 +125 +125 +129 +129 +130 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +183 +185 +185 +188 +188 +188 +190 +191 +194 +194 +197 +196 +197 +198 +198 +200 +201 +200 +201 +201 +202 +202 +202 +204 +204 +204 +204 +205 +206 +206 +206 +206 +207 +207 +206 +206 +206 +207 +206 +206 +207 +206 +205 +204 +204 +204 +205 +204 +204 +204 +202 +202 +200 +201 +201 +200 +201 +199 +199 +200 +196 +196 +194 +194 +190 +191 +191 +188 +188 +185 +185 +184 +182 +182 +183 +182 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +144 +143 +139 +139 +140 +133 +133 +129 +129 +130 +126 +126 +120 +119 +115 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +73 +72 +68 +68 +65 +64 +64 +59 +58 +54 +55 +55 +50 +50 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +26 +25 +25 +21 +21 +19 +19 +20 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +14 +13 +14 +13 +14 +13 +14 +14 +14 +14 +14 +13 +13 +14 +13 +14 +14 +13 +14 +14 +12 +13 +13 +14 +13 +14 +15 +15 +16 +17 +17 +19 +19 +22 +21 +21 +25 +25 +27 +27 +26 +31 +31 +31 +31 +31 +33 +33 +37 +37 +37 +40 +41 +43 +43 +44 +47 +47 +51 +50 +54 +54 +54 +58 +59 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +85 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +116 +120 +120 +126 +125 +125 +130 +129 +133 +133 +133 +140 +139 +143 +143 +148 +147 +147 +151 +151 +157 +157 +157 +160 +160 +165 +165 +165 +168 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +182 +185 +185 +189 +189 +189 +190 +190 +194 +194 +195 +196 +196 +198 +199 +199 +200 +200 +200 +200 +200 +202 +203 +204 +204 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +204 +205 +204 +204 +204 +202 +203 +201 +200 +200 +200 +200 +199 +198 +199 +196 +197 +195 +194 +194 +190 +191 +191 +190 +190 +189 +188 +184 +185 +185 +183 +183 +179 +179 +175 +175 +175 +173 +173 +168 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +144 +139 +139 +133 +133 +130 +129 +129 +125 +126 +120 +120 +120 +115 +115 +110 +109 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +77 +76 +72 +72 +68 +68 +68 +64 +58 +58 +58 +58 +54 +55 +50 +51 +50 +46 +47 +43 +42 +43 +41 +41 +37 +37 +34 +33 +33 +31 +31 +27 +26 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +14 +14 +13 +13 +13 +14 +14 +13 +14 +14 +14 +13 +14 +13 +14 +13 +13 +13 +13 +13 +13 +14 +13 +13 +12 +15 +15 +17 +17 +19 +19 +19 +21 +21 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +35 +37 +36 +41 +41 +43 +43 +43 +47 +47 +50 +51 +51 +55 +54 +59 +59 +59 +65 +64 +68 +68 +68 +72 +72 +77 +76 +81 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +105 +110 +109 +110 +115 +116 +119 +119 +119 +125 +125 +129 +129 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +179 +179 +179 +183 +182 +185 +185 +185 +188 +188 +191 +190 +190 +194 +195 +196 +197 +196 +198 +198 +200 +200 +201 +200 +200 +202 +203 +204 +204 +204 +204 +204 +207 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +205 +205 +204 +205 +202 +202 +203 +200 +200 +200 +201 +200 +199 +198 +198 +198 +198 +196 +196 +194 +194 +195 +191 +191 +188 +188 +185 +185 +185 +183 +182 +178 +179 +179 +175 +175 +172 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +126 +125 +126 +119 +119 +116 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +91 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +69 +68 +64 +65 +64 +59 +58 +54 +54 +55 +50 +51 +47 +46 +43 +42 +43 +40 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +14 +15 +13 +13 +12 +13 +14 +13 +14 +13 +14 +14 +14 +13 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +14 +13 +14 +13 +13 +13 +12 +15 +15 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +40 +41 +43 +43 +47 +47 +47 +51 +50 +54 +54 +54 +58 +59 +65 +64 +68 +69 +69 +73 +72 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +105 +106 +106 +110 +110 +116 +116 +120 +120 +120 +125 +125 +129 +130 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +182 +182 +183 +185 +185 +189 +189 +188 +190 +190 +195 +194 +195 +196 +197 +198 +198 +199 +200 +200 +200 +200 +202 +202 +203 +204 +204 +204 +205 +204 +204 +204 +207 +206 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +204 +205 +204 +204 +204 +202 +202 +203 +202 +202 +200 +200 +200 +200 +201 +199 +198 +196 +197 +195 +194 +195 +190 +190 +189 +189 +188 +185 +185 +182 +183 +183 +178 +179 +175 +175 +175 +173 +173 +168 +169 +169 +165 +165 +161 +161 +159 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +134 +129 +129 +129 +125 +125 +119 +119 +120 +115 +115 +109 +110 +106 +105 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +69 +64 +64 +58 +58 +55 +55 +55 +51 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +26 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +14 +14 +13 +14 +13 +14 +13 +14 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +40 +41 +43 +43 +46 +47 +50 +51 +51 +54 +54 +55 +55 +55 +58 +58 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +95 +96 +96 +100 +100 +106 +106 +106 +110 +109 +116 +116 +115 +119 +120 +125 +125 +125 +130 +129 +133 +133 +134 +140 +140 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +182 +183 +185 +184 +189 +188 +189 +191 +190 +194 +195 +195 +196 +196 +197 +196 +197 +198 +199 +201 +200 +200 +200 +201 +202 +202 +203 +204 +205 +204 +205 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +204 +205 +205 +204 +204 +202 +203 +200 +200 +200 +200 +200 +198 +198 +196 +196 +197 +195 +195 +191 +191 +190 +188 +189 +184 +185 +185 +182 +183 +179 +178 +175 +175 +174 +173 +172 +168 +169 +170 +165 +165 +161 +160 +162 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +130 +129 +129 +125 +125 +120 +120 +120 +116 +115 +110 +110 +110 +106 +105 +100 +99 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +68 +68 +65 +64 +58 +58 +59 +55 +55 +50 +50 +51 +47 +47 +42 +42 +44 +41 +41 +37 +37 +34 +33 +33 +31 +31 +27 +27 +27 +25 +25 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +12 +13 +13 +14 +13 +14 +14 +14 +13 +13 +14 +13 +13 +13 +13 +14 +14 +13 +13 +14 +13 +14 +14 +13 +14 +14 +14 +13 +14 +13 +13 +15 +15 +15 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +50 +51 +54 +54 +58 +58 +58 +64 +64 +68 +69 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +109 +116 +115 +119 +119 +126 +125 +125 +129 +130 +134 +133 +133 +139 +139 +140 +139 +139 +144 +144 +147 +147 +147 +151 +151 +157 +157 +158 +161 +161 +165 +165 +168 +169 +169 +173 +173 +175 +175 +175 +178 +179 +179 +179 +179 +183 +182 +184 +184 +185 +188 +188 +191 +190 +191 +194 +195 +197 +196 +198 +199 +198 +200 +200 +200 +200 +200 +202 +202 +202 +202 +202 +204 +205 +204 +204 +205 +207 +206 +206 +207 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +203 +202 +200 +200 +200 +201 +201 +198 +198 +196 +197 +195 +195 +194 +190 +190 +189 +188 +189 +184 +184 +183 +183 +182 +179 +178 +175 +175 +175 +173 +173 +169 +169 +168 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +120 +120 +120 +115 +115 +109 +110 +106 +106 +106 +100 +100 +100 +100 +100 +96 +96 +90 +90 +91 +86 +86 +82 +82 +83 +77 +76 +72 +72 +73 +68 +68 +64 +64 +58 +58 +59 +55 +55 +51 +51 +51 +47 +47 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +14 +14 +13 +13 +13 +13 +13 +14 +13 +13 +14 +14 +14 +14 +13 +13 +13 +14 +15 +15 +17 +17 +19 +19 +19 +21 +21 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +51 +51 +54 +55 +58 +59 +58 +64 +64 +68 +69 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +90 +90 +90 +96 +96 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +115 +119 +120 +125 +125 +126 +129 +129 +133 +133 +140 +139 +139 +143 +143 +147 +147 +147 +151 +151 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +170 +173 +173 +175 +175 +178 +179 +179 +182 +182 +185 +184 +185 +188 +189 +189 +189 +189 +191 +191 +195 +195 +195 +197 +196 +199 +198 +200 +200 +201 +200 +200 +202 +202 +203 +204 +205 +204 +204 +205 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +205 +204 +204 +205 +204 +202 +203 +202 +200 +200 +200 +200 +201 +199 +199 +196 +196 +197 +194 +194 +191 +190 +191 +189 +188 +184 +185 +183 +182 +183 +178 +179 +175 +175 +175 +172 +173 +169 +168 +168 +165 +165 +161 +160 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +130 +130 +125 +125 +119 +120 +119 +116 +116 +110 +109 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +73 +68 +68 +68 +64 +65 +58 +59 +59 +55 +54 +51 +51 +51 +47 +47 +42 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +13 +13 +13 +13 +14 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +20 +21 +21 +21 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +40 +40 +43 +43 +42 +47 +47 +51 +51 +51 +54 +54 +58 +58 +59 +64 +64 +68 +68 +73 +72 +72 +76 +77 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +111 +116 +116 +119 +119 +125 +125 +125 +129 +129 +133 +133 +133 +139 +139 +140 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +158 +161 +161 +164 +165 +168 +169 +169 +173 +173 +175 +175 +175 +178 +179 +179 +178 +179 +183 +182 +185 +184 +185 +189 +189 +191 +191 +192 +195 +195 +197 +197 +198 +198 +198 +200 +201 +200 +200 +200 +202 +203 +205 +204 +204 +204 +204 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +201 +200 +201 +200 +200 +198 +198 +198 +196 +196 +194 +194 +190 +190 +190 +189 +189 +184 +185 +185 +183 +183 +179 +178 +178 +174 +175 +173 +173 +172 +169 +169 +165 +165 +165 +161 +161 +157 +157 +152 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +125 +119 +120 +116 +116 +115 +110 +110 +106 +106 +100 +100 +99 +96 +96 +90 +90 +90 +86 +86 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +66 +64 +64 +58 +58 +54 +54 +55 +51 +51 +46 +46 +46 +43 +43 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +30 +31 +29 +27 +27 +25 +25 +21 +20 +21 +19 +19 +17 +17 +17 +15 +15 +15 +14 +15 +13 +13 +12 +13 +13 +13 +13 +14 +13 +14 +13 +13 +14 +14 +14 +13 +14 +13 +14 +13 +14 +13 +14 +14 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +15 +15 +18 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +34 +33 +37 +37 +41 +41 +41 +43 +43 +47 +46 +52 +51 +51 +55 +55 +59 +58 +59 +65 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +87 +90 +91 +96 +96 +101 +100 +100 +106 +106 +110 +110 +110 +116 +116 +115 +115 +116 +119 +120 +125 +126 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +146 +147 +147 +151 +151 +157 +157 +157 +161 +161 +161 +161 +161 +165 +165 +169 +168 +169 +173 +173 +175 +175 +178 +178 +179 +182 +183 +185 +185 +185 +189 +189 +190 +190 +191 +195 +194 +197 +196 +196 +198 +199 +199 +200 +201 +201 +200 +202 +202 +204 +204 +205 +204 +204 +206 +207 +206 +206 +207 +207 +206 +206 +206 +206 +206 +207 +206 +206 +206 +204 +205 +205 +204 +205 +202 +202 +201 +200 +200 +201 +200 +198 +198 +198 +196 +197 +195 +195 +194 +191 +191 +189 +188 +188 +185 +184 +183 +183 +183 +179 +179 +175 +175 +173 +173 +172 +169 +169 +165 +165 +165 +161 +161 +158 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +134 +134 +129 +129 +125 +126 +126 +119 +120 +116 +115 +115 +110 +110 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +88 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +65 +64 +65 +58 +58 +54 +54 +55 +51 +51 +46 +47 +43 +43 +42 +41 +41 +42 +37 +36 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +13 +14 +14 +14 +14 +14 +13 +14 +13 +13 +14 +13 +14 +14 +13 +14 +13 +14 +13 +14 +14 +14 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +26 +27 +27 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +50 +51 +55 +54 +58 +58 +58 +64 +64 +68 +68 +67 +72 +72 +76 +77 +83 +82 +82 +86 +86 +90 +91 +90 +95 +96 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +115 +117 +119 +120 +125 +125 +129 +129 +129 +133 +134 +139 +139 +139 +143 +143 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +179 +183 +183 +185 +185 +185 +189 +189 +191 +191 +191 +195 +195 +196 +196 +198 +198 +199 +200 +200 +200 +200 +201 +202 +203 +204 +204 +204 +204 +205 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +204 +205 +205 +204 +204 +203 +202 +201 +201 +200 +200 +201 +198 +198 +198 +196 +197 +194 +195 +194 +190 +190 +188 +189 +185 +185 +185 +182 +183 +179 +179 +179 +175 +175 +173 +172 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +158 +151 +151 +147 +147 +143 +143 +143 +140 +139 +133 +133 +133 +129 +129 +129 +129 +129 +125 +126 +119 +120 +120 +115 +115 +110 +109 +111 +106 +106 +99 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +61 +58 +58 +54 +54 +50 +51 +51 +47 +46 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +22 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +14 +14 +14 +13 +14 +13 +14 +14 +14 +13 +14 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +26 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +46 +51 +51 +51 +54 +54 +59 +58 +64 +64 +64 +69 +68 +72 +72 +72 +76 +77 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +97 +100 +100 +106 +106 +110 +110 +110 +116 +116 +115 +115 +115 +119 +120 +120 +120 +119 +125 +125 +129 +129 +130 +133 +133 +139 +139 +142 +143 +144 +148 +147 +151 +151 +151 +157 +157 +161 +161 +161 +164 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +183 +185 +185 +188 +188 +190 +191 +191 +195 +194 +197 +196 +196 +199 +198 +200 +200 +200 +200 +201 +202 +202 +203 +204 +204 +205 +204 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +203 +203 +200 +201 +201 +200 +199 +198 +199 +196 +196 +194 +195 +194 +190 +190 +189 +188 +189 +184 +184 +182 +182 +182 +178 +179 +175 +175 +175 +173 +173 +169 +169 +164 +165 +165 +161 +161 +157 +157 +157 +151 +151 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +131 +129 +129 +125 +125 +119 +119 +119 +116 +116 +110 +109 +110 +106 +106 +105 +106 +106 +100 +99 +96 +96 +96 +90 +90 +86 +86 +84 +82 +82 +76 +76 +73 +72 +72 +68 +68 +69 +68 +68 +64 +64 +58 +58 +59 +54 +54 +50 +51 +51 +47 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +26 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +16 +15 +14 +13 +13 +12 +13 +13 +14 +14 +13 +14 +13 +13 +14 +14 +14 +13 +13 +13 +13 +14 +14 +13 +14 +14 +13 +13 +13 +13 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +51 +50 +50 +51 +55 +54 +58 +58 +58 +64 +64 +68 +68 +69 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +96 +96 +96 +100 +100 +106 +106 +105 +110 +109 +115 +115 +118 +119 +120 +125 +126 +129 +130 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +164 +167 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +183 +184 +185 +189 +188 +188 +190 +190 +194 +194 +195 +196 +197 +199 +198 +200 +200 +201 +200 +201 +202 +202 +202 +204 +205 +204 +204 +204 +206 +207 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +205 +204 +204 +204 +204 +204 +205 +205 +202 +203 +200 +200 +200 +201 +201 +198 +199 +198 +196 +197 +194 +194 +195 +190 +190 +188 +189 +184 +184 +184 +183 +183 +179 +179 +179 +175 +174 +173 +173 +172 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +129 +129 +129 +125 +125 +120 +119 +119 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +69 +64 +64 +58 +59 +55 +55 +55 +50 +50 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +26 +27 +27 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +13 +13 +13 +13 +13 +13 +14 +13 +14 +14 +14 +14 +13 +14 +14 +13 +14 +14 +13 +14 +13 +13 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +50 +52 +54 +54 +58 +58 +65 +65 +64 +68 +68 +72 +72 +76 +76 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +99 +100 +100 +106 +105 +110 +110 +110 +116 +115 +119 +119 +120 +125 +125 +129 +129 +130 +133 +133 +139 +139 +140 +144 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +182 +183 +185 +185 +188 +189 +190 +190 +191 +195 +194 +196 +196 +196 +198 +198 +201 +200 +200 +200 +201 +202 +203 +202 +204 +205 +204 +204 +204 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +205 +204 +204 +204 +205 +202 +202 +203 +201 +200 +201 +200 +201 +198 +199 +196 +196 +194 +194 +194 +191 +190 +189 +188 +188 +185 +185 +185 +185 +185 +183 +182 +179 +179 +179 +174 +175 +173 +173 +171 +169 +169 +165 +165 +161 +161 +161 +157 +157 +157 +157 +157 +151 +151 +151 +151 +151 +147 +147 +143 +143 +143 +139 +140 +134 +133 +131 +129 +129 +126 +125 +120 +120 +119 +115 +116 +110 +110 +109 +106 +106 +100 +100 +100 +96 +95 +90 +90 +90 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +58 +59 +54 +55 +50 +50 +51 +47 +47 +43 +43 +43 +41 +40 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +14 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +47 +47 +47 +51 +50 +54 +54 +54 +59 +58 +58 +59 +59 +64 +64 +68 +68 +68 +72 +72 +76 +76 +81 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +109 +116 +116 +119 +120 +120 +125 +125 +129 +130 +134 +133 +133 +139 +139 +143 +144 +143 +147 +147 +151 +151 +151 +157 +157 +160 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +174 +179 +178 +179 +183 +183 +184 +185 +185 +188 +189 +191 +191 +190 +194 +195 +196 +196 +196 +198 +198 +200 +200 +201 +200 +200 +202 +202 +205 +204 +204 +204 +204 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +207 +206 +206 +204 +204 +204 +204 +204 +202 +203 +201 +201 +200 +200 +201 +198 +198 +198 +196 +196 +195 +195 +194 +191 +191 +188 +188 +189 +184 +184 +182 +182 +183 +178 +179 +175 +175 +172 +173 +173 +169 +169 +165 +165 +165 +161 +161 +160 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +140 +140 +139 +133 +133 +130 +129 +130 +126 +126 +120 +120 +120 +115 +116 +110 +110 +109 +106 +106 +100 +100 +100 +96 +96 +90 +90 +87 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +59 +58 +59 +55 +55 +51 +51 +50 +47 +47 +43 +42 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +20 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +13 +14 +14 +14 +13 +14 +14 +14 +13 +13 +14 +14 +13 +13 +14 +13 +14 +14 +14 +13 +14 +14 +13 +13 +13 +14 +13 +13 +15 +15 +15 +17 +17 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +28 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +46 +51 +51 +51 +55 +55 +58 +58 +59 +65 +64 +69 +68 +68 +72 +72 +76 +76 +82 +82 +82 +86 +87 +90 +90 +91 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +115 +119 +119 +125 +125 +126 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +150 +157 +157 +161 +161 +162 +165 +165 +169 +169 +172 +173 +173 +175 +175 +179 +179 +179 +183 +183 +185 +184 +185 +188 +188 +191 +190 +191 +194 +194 +196 +197 +197 +199 +199 +200 +200 +201 +200 +200 +202 +202 +204 +204 +204 +204 +204 +206 +206 +207 +207 +206 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +204 +205 +204 +204 +204 +203 +203 +200 +200 +200 +200 +200 +199 +198 +198 +196 +197 +195 +194 +195 +191 +190 +188 +189 +186 +185 +185 +183 +182 +178 +179 +178 +175 +175 +173 +173 +173 +169 +169 +169 +169 +169 +165 +165 +161 +161 +162 +157 +157 +151 +151 +150 +147 +147 +144 +143 +139 +139 +139 +133 +133 +129 +129 +130 +125 +125 +120 +119 +119 +116 +115 +109 +110 +110 +106 +106 +100 +99 +99 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +65 +58 +58 +58 +55 +54 +51 +51 +47 +46 +46 +43 +43 +40 +41 +40 +37 +37 +33 +32 +33 +31 +31 +27 +27 +27 +25 +25 +21 +20 +21 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +14 +13 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +14 +13 +14 +14 +13 +14 +14 +13 +14 +13 +14 +14 +14 +13 +15 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +40 +43 +43 +47 +46 +46 +51 +51 +55 +54 +55 +58 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +81 +86 +86 +86 +90 +89 +96 +96 +96 +100 +100 +106 +105 +110 +109 +110 +116 +116 +119 +119 +119 +125 +126 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +182 +185 +185 +188 +188 +188 +191 +191 +194 +195 +197 +197 +197 +198 +198 +200 +200 +201 +201 +201 +202 +202 +202 +204 +204 +205 +204 +204 +206 +206 +206 +206 +207 +207 +206 +206 +207 +206 +206 +206 +206 +206 +204 +205 +204 +204 +204 +202 +202 +202 +200 +201 +201 +200 +200 +199 +199 +196 +197 +195 +194 +195 +190 +190 +188 +189 +188 +184 +184 +183 +183 +183 +179 +179 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +144 +139 +139 +133 +133 +133 +129 +129 +125 +125 +126 +120 +119 +115 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +68 +68 +64 +64 +59 +58 +58 +54 +54 +50 +50 +51 +46 +47 +43 +43 +42 +41 +41 +36 +38 +37 +33 +32 +31 +31 +31 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +13 +14 +14 +13 +14 +14 +14 +14 +14 +13 +13 +14 +14 +13 +14 +14 +13 +13 +14 +14 +14 +14 +13 +13 +12 +16 +15 +17 +16 +18 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +30 +31 +33 +33 +33 +33 +33 +37 +37 +40 +41 +40 +43 +43 +47 +47 +48 +51 +50 +58 +58 +64 +64 +64 +68 +68 +72 +72 +73 +76 +76 +82 +82 +83 +86 +86 +90 +90 +91 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +115 +116 +119 +119 +126 +125 +126 +129 +130 +133 +133 +133 +139 +139 +143 +143 +144 +147 +147 +151 +151 +158 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +185 +184 +184 +188 +189 +191 +191 +195 +194 +195 +196 +197 +198 +198 +198 +200 +200 +200 +200 +200 +200 +201 +203 +202 +202 +204 +205 +205 +204 +205 +207 +207 +206 +207 +207 +207 +207 +206 +206 +206 +206 +206 +207 +206 +205 +204 +204 +205 +204 +202 +202 +202 +201 +201 +200 +201 +199 +199 +199 +197 +196 +194 +195 +194 +190 +190 +189 +189 +188 +185 +185 +185 +185 +185 +183 +183 +179 +178 +179 +175 +174 +172 +173 +171 +169 +169 +165 +165 +161 +160 +161 +157 +157 +151 +150 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +134 +129 +130 +125 +125 +119 +119 +120 +116 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +69 +69 +68 +64 +65 +59 +58 +58 +54 +55 +50 +50 +51 +47 +46 +43 +43 +43 +41 +41 +37 +37 +37 +33 +32 +31 +31 +28 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +14 +14 +14 +14 +14 +13 +13 +14 +14 +13 +14 +13 +13 +13 +13 +14 +14 +13 +14 +13 +14 +14 +14 +13 +13 +14 +13 +13 +15 +15 +18 +17 +17 +19 +19 +21 +21 +21 +25 +25 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +38 +41 +41 +43 +42 +47 +47 +47 +50 +50 +55 +54 +55 +59 +59 +64 +64 +64 +68 +68 +72 +72 +73 +76 +76 +82 +82 +86 +87 +85 +89 +90 +96 +95 +96 +100 +100 +106 +106 +106 +110 +110 +116 +115 +115 +119 +119 +125 +126 +125 +130 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +164 +169 +169 +173 +173 +173 +175 +175 +179 +179 +183 +183 +183 +184 +184 +188 +189 +188 +190 +190 +194 +195 +194 +196 +196 +198 +198 +199 +201 +201 +200 +200 +201 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +205 +204 +205 +204 +205 +202 +202 +200 +200 +201 +200 +201 +198 +198 +198 +196 +196 +197 +197 +197 +194 +194 +190 +190 +191 +189 +188 +184 +185 +184 +183 +182 +179 +179 +174 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +160 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +139 +139 +140 +134 +133 +129 +129 +129 +125 +125 +119 +119 +120 +115 +116 +109 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +91 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +69 +69 +64 +64 +58 +59 +58 +54 +54 +50 +50 +51 +47 +47 +43 +43 +41 +40 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +18 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +13 +13 +13 +14 +14 +14 +14 +14 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +13 +13 +15 +15 +15 +15 +15 +17 +17 +17 +19 +19 +21 +21 +24 +25 +25 +27 +26 +31 +31 +31 +32 +33 +37 +37 +37 +41 +41 +42 +43 +43 +47 +47 +51 +50 +51 +55 +54 +58 +58 +63 +64 +64 +68 +68 +72 +72 +72 +76 +76 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +105 +109 +109 +110 +116 +116 +119 +119 +119 +125 +125 +130 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +172 +175 +175 +175 +178 +179 +183 +183 +183 +185 +185 +188 +189 +189 +190 +190 +195 +195 +197 +197 +197 +198 +198 +200 +201 +200 +201 +201 +201 +201 +200 +202 +202 +205 +205 +204 +204 +205 +206 +207 +207 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +204 +204 +204 +204 +205 +202 +203 +200 +200 +200 +200 +201 +198 +198 +196 +197 +196 +195 +195 +190 +190 +190 +188 +188 +185 +185 +185 +183 +182 +179 +179 +179 +175 +175 +173 +173 +168 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +134 +133 +129 +130 +125 +126 +119 +120 +119 +116 +116 +109 +109 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +69 +68 +68 +64 +64 +58 +58 +58 +54 +55 +55 +55 +55 +50 +50 +46 +47 +47 +43 +43 +41 +41 +42 +37 +36 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +14 +13 +14 +14 +14 +13 +13 +13 +14 +14 +14 +14 +13 +13 +14 +13 +13 +14 +14 +14 +13 +13 +13 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +26 +27 +27 +31 +31 +32 +33 +36 +37 +37 +40 +41 +41 +41 +41 +43 +43 +47 +47 +47 +50 +51 +55 +55 +54 +58 +59 +64 +65 +64 +68 +69 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +111 +116 +116 +115 +119 +119 +126 +126 +130 +129 +129 +134 +134 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +172 +175 +175 +175 +179 +179 +182 +183 +183 +185 +184 +185 +184 +185 +188 +189 +191 +191 +191 +195 +195 +197 +196 +197 +199 +199 +200 +200 +200 +201 +201 +202 +203 +204 +205 +204 +204 +205 +205 +204 +205 +206 +206 +207 +206 +206 +206 +207 +206 +206 +207 +206 +207 +207 +206 +205 +205 +204 +204 +204 +202 +202 +202 +200 +201 +201 +200 +200 +199 +198 +196 +197 +197 +194 +195 +190 +190 +188 +189 +189 +185 +185 +182 +183 +182 +178 +179 +175 +175 +175 +173 +173 +169 +168 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +148 +147 +148 +143 +143 +139 +139 +140 +134 +133 +129 +129 +129 +125 +125 +119 +120 +119 +116 +115 +110 +110 +110 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +69 +64 +64 +59 +59 +59 +54 +54 +50 +50 +47 +47 +47 +43 +43 +41 +41 +40 +38 +37 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +23 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +13 +14 +13 +14 +13 +14 +14 +14 +14 +14 +13 +13 +14 +13 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +21 +21 +20 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +46 +47 +47 +51 +50 +55 +54 +59 +59 +59 +65 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +99 +100 +106 +106 +110 +110 +110 +115 +115 +119 +119 +119 +126 +125 +130 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +148 +151 +151 +157 +157 +160 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +183 +185 +184 +189 +189 +189 +190 +191 +194 +194 +196 +197 +197 +198 +199 +200 +200 +200 +200 +200 +200 +201 +201 +202 +202 +204 +204 +205 +204 +204 +206 +207 +207 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +204 +204 +205 +205 +204 +202 +202 +200 +200 +201 +201 +201 +199 +198 +197 +196 +196 +195 +195 +190 +190 +191 +188 +189 +185 +184 +185 +182 +183 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +144 +143 +143 +139 +139 +133 +133 +133 +129 +129 +126 +125 +126 +119 +120 +116 +115 +110 +110 +109 +106 +106 +100 +100 +100 +96 +96 +96 +96 +96 +90 +90 +86 +86 +86 +83 +82 +76 +76 +77 +72 +72 +68 +68 +65 +65 +64 +59 +58 +54 +55 +54 +50 +51 +51 +51 +51 +47 +47 +43 +42 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +13 +14 +14 +14 +14 +13 +14 +14 +13 +13 +13 +14 +13 +14 +13 +14 +14 +13 +14 +13 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +32 +33 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +51 +54 +55 +58 +58 +58 +65 +64 +68 +68 +68 +72 +73 +76 +76 +76 +82 +82 +86 +86 +91 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +116 +120 +119 +119 +125 +126 +129 +130 +130 +133 +133 +139 +138 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +164 +169 +169 +169 +173 +173 +175 +174 +176 +178 +179 +182 +183 +184 +184 +184 +188 +189 +191 +190 +191 +194 +194 +195 +194 +194 +196 +197 +198 +198 +199 +200 +201 +200 +201 +202 +202 +203 +204 +204 +204 +205 +205 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +204 +205 +205 +205 +203 +203 +203 +200 +201 +200 +200 +200 +199 +198 +197 +196 +196 +195 +195 +191 +190 +191 +188 +189 +185 +185 +185 +182 +182 +178 +179 +175 +174 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +140 +139 +134 +133 +130 +129 +129 +125 +125 +120 +119 +119 +115 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +68 +68 +64 +64 +64 +64 +65 +58 +58 +54 +54 +55 +51 +51 +47 +47 +47 +42 +43 +41 +41 +37 +37 +36 +33 +33 +31 +31 +31 +27 +27 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +14 +13 +14 +13 +14 +14 +13 +14 +13 +13 +14 +13 +14 +13 +13 +14 +14 +14 +13 +13 +13 +14 +13 +14 +13 +15 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +25 +27 +27 +31 +31 +32 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +46 +51 +51 +55 +55 +54 +59 +58 +64 +65 +65 +69 +68 +72 +72 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +116 +116 +119 +119 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +162 +165 +165 +168 +169 +172 +173 +173 +175 +175 +179 +179 +178 +182 +182 +183 +183 +182 +184 +185 +188 +189 +189 +190 +191 +195 +194 +196 +196 +197 +198 +198 +200 +201 +201 +201 +200 +203 +202 +202 +204 +204 +204 +205 +204 +207 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +207 +206 +207 +205 +204 +205 +204 +204 +205 +205 +204 +202 +202 +200 +201 +200 +200 +200 +198 +199 +199 +196 +197 +194 +195 +191 +191 +190 +189 +189 +185 +185 +184 +182 +183 +179 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +134 +129 +130 +125 +126 +125 +119 +119 +115 +115 +116 +110 +110 +106 +106 +101 +100 +100 +96 +96 +90 +90 +90 +86 +86 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +69 +65 +65 +58 +58 +55 +55 +54 +51 +50 +47 +48 +46 +43 +42 +43 +43 +43 +41 +41 +37 +36 +37 +33 +33 +31 +31 +30 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +14 +14 +13 +13 +13 +14 +13 +14 +14 +14 +14 +13 +13 +14 +14 +13 +14 +13 +13 +14 +13 +13 +13 +13 +12 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +34 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +50 +55 +55 +55 +58 +59 +64 +64 +64 +69 +69 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +116 +120 +120 +120 +119 +119 +125 +125 +129 +129 +130 +133 +133 +139 +139 +141 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +178 +182 +182 +183 +184 +185 +188 +188 +189 +190 +190 +194 +194 +194 +196 +197 +198 +198 +198 +200 +200 +200 +200 +201 +202 +202 +204 +204 +204 +204 +205 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +207 +204 +204 +204 +204 +204 +202 +203 +201 +201 +200 +201 +200 +198 +198 +198 +199 +199 +196 +196 +195 +195 +194 +190 +190 +188 +188 +188 +184 +184 +183 +183 +183 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +140 +133 +133 +129 +129 +125 +125 +125 +120 +119 +115 +115 +116 +110 +110 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +91 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +73 +72 +68 +68 +68 +68 +69 +64 +64 +58 +58 +59 +54 +54 +51 +51 +47 +47 +47 +43 +42 +41 +40 +41 +37 +38 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +20 +21 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +14 +14 +13 +13 +14 +14 +14 +14 +14 +13 +13 +14 +14 +14 +14 +13 +14 +14 +14 +13 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +26 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +51 +55 +55 +54 +58 +58 +64 +64 +64 +69 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +110 +110 +116 +116 +119 +120 +125 +125 +125 +129 +129 +133 +134 +133 +139 +139 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +156 +160 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +182 +183 +183 +185 +185 +189 +189 +189 +191 +191 +194 +194 +196 +196 +197 +198 +198 +200 +201 +201 +200 +200 +202 +203 +202 +204 +204 +204 +204 +204 +206 +206 +207 +206 +206 +206 +207 +206 +207 +207 +207 +206 +206 +207 +204 +204 +204 +205 +204 +203 +203 +202 +200 +200 +201 +200 +200 +199 +199 +196 +196 +197 +194 +194 +190 +191 +189 +189 +188 +185 +184 +183 +183 +183 +179 +178 +175 +174 +175 +173 +173 +169 +169 +169 +165 +165 +162 +161 +161 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +140 +139 +133 +133 +133 +133 +133 +129 +130 +126 +126 +126 +119 +119 +116 +116 +113 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +66 +65 +64 +59 +59 +54 +54 +54 +50 +50 +47 +47 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +14 +13 +13 +14 +13 +13 +13 +13 +13 +14 +14 +13 +13 +14 +13 +13 +15 +15 +16 +17 +17 +19 +19 +22 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +50 +50 +54 +54 +59 +59 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +101 +100 +106 +106 +110 +110 +109 +116 +116 +119 +119 +120 +126 +125 +125 +125 +125 +129 +129 +134 +133 +133 +139 +139 +143 +143 +144 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +172 +173 +175 +175 +179 +179 +179 +182 +183 +185 +185 +188 +189 +188 +190 +191 +194 +194 +194 +196 +197 +198 +198 +199 +200 +200 +200 +200 +200 +202 +203 +204 +204 +205 +204 +204 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +205 +204 +205 +204 +204 +202 +202 +200 +200 +200 +201 +200 +198 +198 +197 +197 +197 +194 +194 +190 +191 +190 +188 +189 +185 +184 +184 +182 +183 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +147 +147 +147 +143 +144 +139 +139 +139 +133 +133 +129 +129 +130 +126 +126 +119 +119 +115 +115 +115 +110 +110 +106 +105 +106 +100 +99 +100 +100 +100 +96 +96 +90 +90 +90 +86 +85 +82 +82 +77 +76 +76 +72 +73 +68 +68 +68 +64 +64 +59 +59 +58 +55 +55 +51 +50 +50 +47 +47 +43 +43 +43 +40 +41 +37 +37 +34 +33 +33 +31 +31 +27 +27 +27 +25 +24 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +14 +14 +13 +14 +13 +14 +13 +13 +14 +14 +14 +13 +13 +14 +13 +16 +15 +15 +17 +17 +19 +19 +19 +21 +25 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +40 +43 +42 +47 +47 +47 +51 +50 +54 +54 +55 +58 +59 +64 +65 +65 +68 +68 +72 +72 +72 +76 +77 +82 +82 +84 +86 +85 +90 +90 +96 +96 +96 +100 +100 +106 +105 +106 +110 +109 +110 +110 +109 +115 +115 +120 +119 +120 +125 +125 +129 +129 +132 +133 +133 +140 +140 +143 +143 +143 +148 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +164 +169 +169 +169 +173 +173 +175 +175 +177 +179 +178 +182 +182 +185 +184 +185 +188 +189 +190 +191 +191 +194 +194 +196 +197 +196 +198 +199 +201 +200 +201 +200 +201 +202 +202 +204 +204 +205 +204 +204 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +207 +206 +206 +206 +207 +205 +205 +204 +204 +205 +202 +202 +201 +200 +200 +200 +200 +198 +198 +199 +197 +197 +194 +195 +194 +190 +190 +189 +188 +189 +185 +185 +183 +183 +183 +178 +179 +175 +175 +172 +172 +173 +169 +169 +165 +165 +165 +161 +161 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +141 +139 +139 +133 +133 +129 +129 +130 +126 +125 +120 +120 +119 +116 +115 +115 +115 +115 +109 +110 +106 +106 +106 +100 +100 +96 +96 +91 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +69 +68 +64 +64 +65 +58 +58 +54 +54 +54 +51 +51 +47 +46 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +12 +13 +13 +13 +14 +13 +13 +14 +13 +14 +13 +13 +13 +14 +14 +13 +13 +13 +13 +14 +14 +13 +14 +14 +14 +14 +13 +14 +13 +12 +15 +16 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +28 +31 +31 +33 +33 +37 +37 +37 +40 +41 +43 +43 +43 +46 +47 +50 +51 +51 +54 +55 +58 +59 +58 +65 +64 +68 +68 +68 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +96 +96 +96 +100 +100 +106 +106 +106 +110 +109 +115 +115 +119 +119 +120 +125 +125 +129 +129 +130 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +178 +179 +183 +182 +182 +185 +185 +189 +189 +188 +191 +191 +194 +194 +195 +197 +196 +199 +199 +200 +200 +201 +201 +200 +203 +203 +202 +205 +204 +204 +204 +204 +206 +206 +207 +207 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +205 +204 +204 +204 +204 +202 +203 +202 +200 +201 +200 +200 +200 +198 +198 +196 +196 +197 +194 +195 +190 +191 +190 +189 +188 +184 +185 +182 +183 +182 +179 +179 +175 +174 +175 +173 +173 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +158 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +125 +126 +125 +126 +125 +120 +120 +115 +115 +116 +109 +110 +106 +106 +101 +99 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +68 +68 +64 +65 +65 +59 +58 +55 +54 +50 +51 +51 +46 +47 +43 +43 +43 +41 +40 +37 +37 +37 +33 +33 +31 +30 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +14 +13 +13 +14 +14 +13 +14 +14 +13 +13 +14 +13 +14 +14 +14 +14 +13 +13 +14 +14 +14 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +22 +25 +25 +27 +27 +32 +31 +31 +32 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +51 +54 +55 +58 +59 +60 +65 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +86 +86 +86 +90 +90 +96 +96 +96 +100 +99 +106 +106 +109 +110 +110 +115 +116 +120 +119 +119 +125 +125 +130 +130 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +148 +151 +151 +157 +157 +161 +160 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +178 +183 +183 +183 +185 +185 +188 +188 +189 +190 +191 +195 +195 +197 +197 +197 +198 +198 +200 +200 +200 +200 +200 +203 +203 +203 +204 +204 +205 +204 +204 +206 +206 +206 +206 +207 +206 +206 +206 +207 +207 +206 +206 +206 +206 +204 +205 +204 +205 +205 +202 +202 +202 +200 +200 +200 +200 +200 +198 +199 +197 +196 +197 +195 +195 +191 +191 +188 +189 +188 +185 +185 +183 +183 +183 +179 +179 +179 +178 +178 +175 +175 +173 +173 +173 +169 +169 +166 +165 +165 +161 +161 +157 +157 +152 +151 +151 +148 +147 +143 +143 +143 +139 +139 +139 +139 +139 +133 +133 +129 +130 +129 +125 +126 +119 +119 +116 +116 +116 +110 +109 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +69 +68 +65 +64 +64 +59 +59 +55 +54 +55 +51 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +26 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +13 +13 +13 +13 +13 +14 +14 +13 +13 +14 +14 +13 +14 +14 +13 +14 +13 +14 +13 +13 +13 +13 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +26 +27 +27 +31 +31 +33 +33 +33 +37 +37 +40 +41 +41 +43 +43 +47 +46 +51 +51 +50 +54 +54 +58 +58 +59 +64 +65 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +95 +100 +100 +106 +106 +106 +110 +109 +115 +116 +116 +120 +120 +125 +125 +126 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +174 +175 +175 +179 +179 +184 +183 +183 +185 +185 +189 +189 +188 +190 +190 +195 +194 +195 +197 +197 +199 +198 +198 +200 +200 +200 +200 +201 +203 +203 +204 +204 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +204 +205 +204 +204 +205 +202 +202 +200 +200 +201 +201 +201 +199 +199 +196 +197 +196 +194 +194 +195 +194 +195 +190 +190 +188 +189 +188 +185 +185 +183 +183 +180 +179 +179 +175 +175 +173 +173 +173 +169 +169 +169 +169 +169 +165 +165 +164 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +145 +143 +143 +139 +139 +133 +134 +133 +129 +129 +126 +126 +125 +119 +119 +115 +115 +115 +110 +110 +106 +105 +106 +100 +100 +96 +96 +90 +89 +90 +86 +86 +83 +82 +82 +76 +76 +72 +72 +73 +69 +69 +64 +65 +65 +59 +58 +54 +54 +55 +50 +50 +47 +46 +43 +42 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +12 +13 +13 +13 +14 +14 +13 +13 +14 +14 +14 +14 +14 +14 +14 +13 +13 +14 +13 +13 +14 +14 +13 +13 +13 +13 +14 +13 +14 +13 +13 +12 +15 +15 +15 +15 +15 +17 +17 +17 +19 +19 +21 +21 +22 +25 +25 +27 +27 +31 +31 +30 +33 +33 +37 +37 +37 +41 +41 +41 +41 +41 +43 +43 +47 +47 +47 +51 +50 +54 +55 +58 +59 +58 +64 +64 +68 +68 +68 +72 +72 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +109 +110 +110 +116 +115 +119 +119 +119 +125 +126 +130 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +161 +161 +161 +165 +165 +168 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +183 +185 +185 +189 +189 +189 +190 +191 +194 +194 +197 +196 +197 +198 +198 +201 +200 +201 +200 +200 +202 +203 +202 +205 +205 +204 +205 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +207 +206 +204 +204 +204 +204 +204 +203 +202 +202 +200 +200 +200 +200 +200 +198 +199 +197 +196 +195 +195 +194 +191 +190 +188 +189 +189 +184 +184 +183 +182 +182 +178 +179 +179 +178 +179 +175 +175 +173 +172 +173 +169 +169 +164 +165 +162 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +140 +133 +134 +133 +129 +129 +125 +126 +120 +119 +115 +115 +109 +110 +109 +106 +106 +100 +100 +99 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +73 +72 +68 +68 +64 +64 +59 +58 +59 +55 +55 +50 +50 +51 +46 +46 +43 +43 +43 +41 +41 +37 +37 +37 +33 +32 +30 +31 +31 +27 +27 +24 +24 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +16 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +14 +14 +14 +14 +13 +14 +13 +13 +13 +14 +13 +14 +14 +13 +13 +14 +14 +13 +13 +13 +14 +14 +14 +14 +13 +13 +13 +13 +15 +15 +17 +17 +19 +18 +19 +21 +21 +25 +25 +25 +27 +27 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +40 +42 +43 +43 +46 +47 +51 +51 +51 +54 +54 +59 +59 +59 +64 +64 +68 +68 +68 +72 +72 +76 +76 +77 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +109 +109 +115 +115 +119 +120 +120 +125 +126 +129 +129 +129 +133 +134 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +164 +165 +169 +169 +169 +172 +173 +175 +175 +175 +179 +178 +183 +182 +185 +184 +184 +189 +189 +190 +190 +190 +195 +194 +196 +197 +197 +199 +199 +200 +200 +200 +200 +200 +203 +202 +203 +204 +204 +204 +204 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +205 +204 +204 +205 +204 +202 +202 +201 +200 +201 +200 +200 +199 +198 +198 +196 +196 +194 +194 +194 +190 +191 +190 +190 +190 +189 +189 +185 +184 +185 +183 +183 +179 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +119 +119 +115 +116 +109 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +72 +73 +68 +68 +68 +64 +65 +58 +58 +58 +54 +55 +50 +50 +50 +47 +46 +43 +42 +43 +40 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +13 +14 +14 +14 +13 +13 +14 +13 +14 +13 +14 +13 +14 +14 +13 +13 +14 +13 +14 +14 +14 +14 +14 +13 +13 +15 +15 +17 +17 +19 +19 +19 +21 +21 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +32 +32 +35 +37 +37 +41 +41 +43 +43 +43 +46 +47 +51 +51 +50 +54 +54 +59 +58 +59 +64 +64 +68 +68 +69 +72 +72 +76 +76 +81 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +116 +119 +120 +120 +125 +126 +129 +129 +133 +133 +134 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +180 +179 +178 +182 +183 +184 +185 +184 +189 +189 +191 +190 +191 +194 +194 +197 +196 +197 +199 +198 +200 +200 +201 +200 +200 +202 +202 +204 +204 +205 +204 +204 +206 +207 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +205 +204 +205 +205 +204 +202 +202 +202 +200 +201 +200 +201 +200 +198 +198 +199 +198 +198 +196 +196 +194 +195 +195 +190 +191 +188 +189 +186 +185 +185 +183 +183 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +126 +125 +119 +119 +116 +116 +116 +110 +109 +106 +106 +106 +100 +100 +96 +96 +91 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +59 +58 +54 +54 +54 +51 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +20 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +14 +13 +13 +14 +14 +14 +13 +13 +13 +13 +14 +13 +13 +14 +14 +13 +14 +13 +12 +15 +15 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +26 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +46 +47 +50 +51 +54 +54 +55 +58 +59 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +95 +96 +96 +100 +100 +105 +106 +106 +109 +110 +116 +115 +119 +119 +119 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +168 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +183 +184 +185 +189 +189 +188 +190 +191 +194 +194 +195 +197 +197 +199 +199 +200 +200 +200 +200 +200 +200 +200 +200 +202 +202 +205 +204 +204 +204 +204 +207 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +204 +204 +204 +204 +204 +202 +202 +200 +200 +201 +200 +200 +198 +198 +197 +197 +197 +194 +194 +190 +191 +190 +188 +189 +184 +185 +184 +183 +183 +179 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +126 +120 +119 +115 +115 +110 +110 +109 +105 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +65 +65 +59 +58 +58 +54 +54 +51 +51 +51 +47 +47 +42 +42 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +14 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +14 +13 +13 +13 +13 +13 +14 +14 +14 +14 +13 +14 +13 +13 +14 +14 +14 +14 +14 +13 +14 +14 +14 +13 +13 +14 +13 +12 +15 +15 +17 +17 +19 +18 +19 +21 +21 +25 +25 +26 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +46 +46 +47 +51 +51 +54 +55 +55 +59 +58 +64 +65 +65 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +95 +96 +95 +100 +100 +106 +106 +106 +110 +110 +116 +116 +115 +120 +119 +125 +125 +125 +129 +129 +133 +133 +133 +139 +140 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +178 +179 +182 +182 +184 +185 +189 +188 +188 +190 +191 +194 +194 +194 +196 +196 +197 +196 +196 +198 +198 +200 +200 +201 +200 +200 +202 +202 +203 +205 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +204 +205 +204 +205 +202 +203 +200 +200 +200 +200 +200 +198 +198 +196 +197 +196 +194 +195 +190 +190 +191 +188 +188 +185 +185 +185 +183 +183 +179 +179 +175 +175 +175 +173 +172 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +151 +151 +147 +147 +147 +143 +143 +139 +139 +134 +133 +133 +129 +129 +125 +125 +125 +119 +120 +115 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +87 +83 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +65 +64 +58 +58 +54 +55 +54 +50 +50 +47 +46 +47 +43 +43 +41 +41 +37 +37 +36 +33 +33 +31 +31 +31 +27 +27 +27 +27 +27 +25 +25 +21 +21 +21 +19 +20 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +14 +13 +14 +13 +14 +14 +13 +14 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +36 +37 +40 +41 +43 +43 +43 +47 +47 +51 +50 +51 +54 +54 +58 +58 +59 +64 +64 +69 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +99 +100 +100 +106 +106 +110 +109 +110 +116 +116 +119 +120 +126 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +162 +165 +165 +169 +168 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +183 +183 +183 +185 +184 +188 +189 +189 +190 +190 +194 +194 +195 +196 +197 +198 +198 +200 +201 +200 +201 +200 +203 +203 +202 +205 +204 +205 +204 +205 +204 +204 +206 +206 +206 +206 +207 +206 +206 +207 +206 +207 +206 +207 +206 +206 +206 +205 +204 +204 +205 +204 +202 +202 +201 +200 +200 +200 +201 +198 +198 +198 +196 +197 +194 +194 +190 +191 +191 +188 +188 +184 +185 +184 +183 +183 +179 +178 +179 +175 +174 +173 +173 +172 +169 +170 +165 +165 +165 +161 +161 +157 +157 +152 +151 +151 +147 +147 +143 +143 +144 +139 +139 +133 +133 +133 +130 +130 +125 +125 +125 +119 +120 +116 +116 +115 +110 +109 +106 +106 +100 +100 +100 +96 +96 +90 +90 +91 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +65 +58 +58 +54 +54 +51 +51 +51 +47 +47 +43 +43 +42 +41 +41 +40 +41 +41 +37 +36 +33 +33 +33 +31 +31 +27 +27 +26 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +14 +14 +13 +14 +14 +13 +14 +13 +14 +14 +14 +13 +13 +14 +14 +14 +13 +14 +14 +14 +14 +13 +13 +13 +13 +12 +15 +14 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +46 +47 +50 +51 +54 +55 +55 +59 +58 +64 +64 +65 +68 +68 +72 +72 +72 +76 +77 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +99 +106 +106 +106 +110 +109 +116 +115 +115 +119 +119 +119 +120 +120 +125 +125 +129 +129 +130 +133 +133 +139 +139 +140 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +164 +165 +164 +165 +165 +169 +169 +173 +172 +173 +175 +175 +179 +178 +180 +182 +182 +185 +184 +188 +188 +188 +190 +190 +194 +195 +195 +196 +196 +197 +196 +196 +198 +198 +200 +200 +201 +201 +200 +202 +202 +204 +205 +205 +204 +204 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +207 +205 +204 +204 +204 +205 +202 +202 +200 +200 +201 +200 +200 +198 +198 +198 +197 +196 +194 +195 +194 +190 +190 +189 +188 +188 +185 +184 +182 +182 +182 +178 +179 +175 +175 +173 +173 +172 +169 +168 +165 +165 +164 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +126 +125 +125 +120 +119 +115 +116 +116 +110 +110 +106 +106 +106 +100 +100 +95 +96 +96 +90 +90 +87 +86 +87 +82 +82 +76 +76 +73 +72 +73 +68 +69 +64 +65 +64 +58 +58 +54 +54 +54 +51 +50 +46 +47 +47 +43 +43 +41 +42 +41 +37 +37 +33 +33 +31 +30 +31 +27 +27 +25 +25 +25 +21 +21 +20 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +16 +13 +13 +12 +13 +14 +13 +14 +14 +14 +13 +13 +13 +13 +14 +13 +13 +14 +14 +14 +14 +14 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +41 +41 +41 +42 +43 +47 +47 +47 +51 +50 +55 +55 +55 +58 +58 +64 +65 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +87 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +105 +106 +110 +109 +115 +116 +115 +119 +120 +125 +125 +126 +129 +129 +134 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +170 +173 +173 +174 +175 +178 +178 +179 +183 +183 +184 +185 +185 +189 +189 +189 +189 +189 +191 +191 +194 +194 +195 +197 +196 +199 +199 +199 +200 +201 +201 +200 +202 +202 +202 +205 +204 +204 +204 +204 +207 +206 +206 +206 +206 +206 +207 +206 +206 +207 +207 +206 +206 +206 +205 +204 +204 +204 +204 +202 +203 +202 +200 +201 +200 +200 +201 +199 +198 +197 +196 +196 +195 +195 +190 +191 +190 +188 +189 +185 +185 +182 +182 +182 +179 +178 +174 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +152 +152 +151 +152 +147 +147 +143 +143 +140 +139 +139 +133 +133 +129 +129 +129 +125 +125 +120 +120 +120 +116 +115 +109 +110 +110 +106 +105 +100 +100 +101 +95 +96 +90 +90 +86 +86 +86 +82 +82 +76 +77 +76 +72 +72 +72 +73 +72 +68 +68 +64 +64 +65 +58 +58 +55 +54 +55 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +33 +33 +33 +31 +31 +27 +27 +27 +26 +25 +21 +20 +20 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +14 +13 +13 +14 +14 +14 +13 +13 +14 +13 +14 +13 +13 +13 +14 +13 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +36 +41 +41 +41 +43 +43 +47 +47 +47 +51 +51 +55 +55 +55 +58 +58 +64 +64 +69 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +107 +110 +110 +115 +115 +119 +119 +120 +125 +125 +129 +129 +129 +133 +133 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +153 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +175 +175 +175 +179 +178 +182 +183 +182 +184 +185 +188 +188 +190 +190 +191 +194 +194 +196 +196 +197 +198 +198 +201 +200 +200 +200 +200 +202 +202 +202 +204 +205 +204 +204 +205 +206 +207 +206 +206 +206 +207 +206 +206 +206 +207 +207 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +202 +200 +200 +200 +200 +201 +198 +198 +196 +196 +195 +195 +194 +191 +190 +188 +188 +188 +185 +185 +183 +183 +183 +179 +179 +175 +175 +174 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +130 +129 +129 +126 +125 +119 +120 +120 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +71 +69 +68 +65 +58 +58 +58 +58 +54 +55 +51 +51 +51 +47 +47 +47 +46 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +13 +13 +14 +13 +14 +13 +14 +14 +13 +14 +14 +14 +14 +14 +13 +14 +13 +14 +13 +13 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +40 +41 +41 +43 +42 +47 +47 +51 +51 +51 +55 +54 +58 +58 +58 +64 +65 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +85 +86 +87 +90 +89 +96 +96 +100 +100 +100 +106 +106 +110 +110 +109 +115 +116 +116 +116 +115 +120 +120 +125 +125 +126 +129 +129 +133 +133 +132 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +178 +179 +179 +183 +183 +184 +184 +185 +189 +189 +191 +190 +190 +195 +194 +197 +196 +196 +198 +199 +200 +200 +201 +201 +201 +203 +202 +204 +204 +204 +204 +204 +206 +206 +207 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +204 +204 +205 +204 +204 +202 +202 +200 +201 +200 +200 +200 +198 +198 +198 +197 +196 +194 +195 +194 +190 +190 +189 +188 +188 +185 +185 +183 +182 +183 +179 +179 +175 +175 +173 +173 +173 +169 +169 +164 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +141 +133 +134 +129 +129 +125 +125 +125 +119 +120 +116 +116 +115 +109 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +84 +82 +82 +76 +77 +72 +72 +72 +68 +68 +64 +64 +64 +58 +58 +58 +58 +58 +55 +54 +50 +51 +51 +47 +46 +43 +43 +42 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +14 +13 +13 +13 +14 +13 +13 +14 +14 +13 +13 +14 +13 +14 +13 +14 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +41 +41 +41 +42 +43 +47 +47 +46 +50 +50 +54 +55 +55 +59 +58 +64 +64 +64 +69 +68 +72 +72 +73 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +115 +120 +120 +125 +125 +128 +129 +129 +134 +133 +140 +139 +139 +143 +143 +147 +147 +147 +151 +151 +151 +151 +151 +157 +157 +161 +161 +161 +165 +164 +169 +169 +171 +173 +172 +175 +174 +179 +178 +178 +183 +182 +185 +185 +185 +189 +188 +191 +191 +191 +195 +195 +196 +196 +197 +199 +199 +200 +200 +201 +200 +200 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +205 +204 +205 +204 +204 +202 +202 +200 +201 +200 +200 +200 +198 +198 +198 +196 +196 +194 +194 +194 +190 +191 +188 +189 +189 +185 +184 +182 +182 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +133 +133 +133 +129 +130 +125 +125 +125 +119 +119 +116 +116 +115 +109 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +68 +68 +68 +65 +64 +59 +58 +58 +54 +54 +51 +51 +47 +47 +46 +43 +43 +41 +41 +40 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +13 +14 +13 +14 +14 +14 +14 +13 +13 +14 +14 +14 +13 +14 +14 +13 +14 +13 +14 +14 +14 +14 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +46 +47 +47 +51 +50 +54 +54 +54 +58 +58 +64 +64 +66 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +89 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +110 +112 +116 +115 +119 +119 +125 +125 +125 +129 +129 +133 +133 +133 +139 +139 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +159 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +174 +179 +179 +183 +183 +182 +185 +185 +189 +188 +189 +191 +191 +194 +194 +196 +197 +197 +198 +198 +200 +200 +200 +200 +200 +202 +203 +203 +204 +204 +204 +204 +204 +206 +207 +206 +206 +207 +206 +207 +206 +207 +206 +206 +206 +206 +206 +204 +204 +204 +204 +205 +202 +202 +202 +200 +200 +201 +200 +200 +198 +198 +196 +196 +197 +194 +194 +190 +190 +189 +188 +189 +184 +184 +182 +182 +183 +178 +179 +179 +179 +179 +175 +175 +173 +172 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +139 +139 +139 +133 +133 +129 +129 +130 +125 +125 +119 +119 +118 +115 +115 +110 +110 +106 +105 +106 +100 +100 +96 +95 +96 +90 +90 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +69 +68 +68 +65 +64 +58 +58 +58 +54 +55 +50 +51 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +32 +31 +31 +26 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +13 +13 +14 +14 +14 +13 +13 +14 +13 +13 +14 +13 +13 +13 +14 +14 +14 +13 +13 +14 +14 +13 +13 +12 +13 +15 +15 +17 +17 +20 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +36 +37 +37 +41 +41 +43 +42 +43 +46 +47 +51 +51 +54 +54 +55 +59 +59 +64 +64 +64 +68 +69 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +92 +96 +96 +100 +100 +106 +106 +106 +110 +109 +116 +115 +116 +119 +120 +119 +119 +119 +125 +125 +130 +129 +129 +133 +133 +139 +139 +141 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +172 +175 +174 +175 +179 +179 +182 +182 +184 +184 +184 +188 +188 +191 +191 +191 +194 +194 +196 +197 +196 +198 +198 +201 +200 +200 +200 +200 +202 +202 +202 +204 +205 +205 +205 +206 +207 +207 +205 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +205 +204 +204 +204 +204 +202 +202 +202 +201 +201 +201 +200 +199 +198 +199 +196 +196 +194 +195 +195 +190 +191 +189 +189 +189 +185 +185 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +168 +165 +164 +165 +161 +161 +157 +157 +157 +151 +151 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +134 +129 +129 +126 +125 +120 +120 +119 +115 +115 +110 +109 +110 +106 +106 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +83 +83 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +58 +58 +55 +55 +55 +50 +50 +46 +47 +47 +43 +43 +41 +40 +38 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +13 +14 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +14 +13 +14 +13 +13 +14 +14 +14 +13 +14 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +51 +50 +54 +54 +58 +59 +59 +64 +64 +68 +68 +68 +72 +72 +76 +76 +77 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +106 +106 +106 +110 +110 +115 +116 +115 +119 +119 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +175 +175 +175 +179 +178 +183 +182 +183 +184 +185 +189 +188 +188 +190 +190 +195 +194 +195 +196 +196 +198 +198 +198 +200 +200 +200 +200 +203 +202 +203 +204 +205 +204 +204 +204 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +207 +204 +205 +204 +204 +203 +202 +202 +201 +200 +201 +200 +200 +198 +198 +197 +196 +196 +194 +195 +191 +191 +191 +189 +189 +185 +185 +185 +182 +183 +179 +179 +174 +174 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +140 +139 +134 +133 +129 +129 +130 +125 +125 +119 +119 +120 +116 +115 +115 +116 +116 +109 +110 +106 +106 +106 +100 +100 +96 +96 +97 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +58 +58 +55 +54 +54 +50 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +16 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +14 +13 +13 +14 +14 +13 +13 +13 +14 +14 +13 +13 +13 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +28 +31 +31 +33 +33 +37 +37 +37 +41 +40 +43 +43 +43 +46 +47 +46 +47 +47 +51 +50 +54 +54 +54 +58 +58 +64 +65 +66 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +110 +112 +115 +116 +119 +119 +125 +125 +125 +129 +129 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +152 +157 +157 +161 +161 +164 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +179 +183 +183 +185 +185 +185 +189 +189 +191 +190 +191 +194 +195 +197 +197 +199 +198 +199 +201 +200 +200 +200 +200 +202 +202 +205 +205 +204 +204 +204 +207 +206 +206 +206 +207 +206 +206 +207 +206 +206 +207 +206 +207 +206 +206 +204 +204 +205 +204 +204 +202 +202 +201 +200 +200 +201 +200 +198 +198 +199 +196 +197 +194 +194 +195 +191 +191 +188 +188 +185 +185 +184 +182 +183 +179 +178 +179 +175 +175 +175 +175 +175 +172 +173 +169 +169 +166 +166 +165 +161 +161 +159 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +133 +134 +133 +129 +129 +125 +125 +126 +119 +119 +115 +115 +111 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +68 +68 +65 +64 +62 +58 +58 +54 +55 +51 +51 +51 +46 +47 +42 +43 +42 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +26 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +13 +13 +14 +13 +13 +12 +15 +15 +17 +17 +17 +20 +19 +21 +21 +26 +25 +25 +27 +27 +31 +31 +31 +33 +33 +33 +33 +33 +37 +36 +41 +41 +41 +43 +43 +46 +47 +48 +50 +51 +55 +54 +58 +58 +58 +64 +64 +68 +68 +68 +72 +72 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +105 +110 +110 +115 +115 +115 +120 +119 +125 +125 +126 +129 +129 +133 +133 +134 +140 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +174 +175 +178 +179 +179 +183 +182 +185 +184 +189 +188 +189 +190 +190 +194 +194 +195 +196 +197 +199 +198 +198 +200 +200 +200 +200 +200 +202 +202 +204 +204 +205 +204 +204 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +204 +204 +204 +204 +204 +202 +202 +200 +200 +201 +200 +201 +198 +198 +196 +196 +197 +195 +194 +190 +191 +190 +189 +188 +185 +185 +184 +182 +183 +179 +179 +178 +175 +175 +173 +172 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +126 +125 +125 +119 +119 +116 +116 +115 +110 +109 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +72 +73 +68 +68 +68 +65 +64 +65 +64 +65 +58 +59 +58 +54 +54 +50 +51 +51 +47 +46 +43 +43 +43 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +14 +13 +14 +13 +13 +14 +14 +13 +13 +14 +14 +13 +13 +14 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +35 +37 +37 +41 +41 +43 +43 +43 +46 +47 +51 +51 +50 +55 +55 +55 +55 +54 +58 +58 +65 +65 +64 +69 +68 +72 +72 +75 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +116 +116 +119 +119 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +183 +185 +184 +189 +188 +189 +190 +190 +194 +194 +195 +196 +196 +198 +199 +199 +200 +201 +200 +200 +203 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +207 +207 +206 +207 +206 +206 +206 +207 +207 +204 +205 +205 +204 +202 +202 +203 +201 +200 +200 +200 +200 +198 +198 +196 +196 +196 +195 +195 +190 +190 +190 +188 +188 +185 +184 +184 +182 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +145 +143 +143 +139 +139 +134 +134 +133 +129 +129 +125 +125 +125 +119 +120 +115 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +58 +58 +54 +55 +55 +50 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +20 +17 +17 +15 +15 +16 +15 +15 +13 +13 +12 +12 +13 +13 +14 +14 +14 +14 +13 +13 +13 +14 +14 +13 +13 +13 +13 +15 +14 +13 +13 +13 +14 +14 +13 +13 +13 +13 +13 +13 +13 +13 +15 +15 +15 +15 +15 +17 +17 +17 +19 +19 +21 +21 +23 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +40 +41 +41 +41 +41 +43 +43 +47 +47 +47 +51 +50 +54 +54 +57 +59 +59 +65 +65 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +95 +96 +96 +100 +100 +106 +105 +109 +110 +110 +116 +116 +119 +119 +119 +125 +126 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +160 +161 +161 +165 +165 +169 +169 +169 +173 +172 +175 +175 +174 +179 +178 +183 +182 +182 +184 +184 +188 +188 +189 +190 +191 +195 +194 +197 +196 +196 +199 +199 +199 +198 +198 +200 +200 +200 +200 +200 +202 +202 +204 +205 +205 +204 +204 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +200 +200 +200 +200 +200 +199 +199 +198 +196 +197 +194 +194 +190 +190 +190 +188 +189 +184 +184 +185 +182 +183 +182 +182 +183 +178 +178 +175 +175 +175 +173 +173 +169 +169 +167 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +130 +125 +125 +119 +120 +115 +116 +115 +110 +110 +106 +105 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +75 +76 +72 +72 +68 +68 +65 +64 +64 +58 +58 +54 +54 +54 +50 +51 +46 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +34 +31 +31 +27 +27 +26 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +14 +13 +13 +14 +13 +14 +14 +13 +13 +13 +14 +14 +14 +14 +13 +13 +13 +14 +14 +14 +14 +13 +13 +14 +14 +13 +13 +12 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +42 +47 +46 +51 +50 +50 +54 +54 +59 +59 +59 +64 +64 +68 +68 +68 +72 +72 +76 +76 +77 +82 +82 +86 +86 +90 +90 +90 +96 +95 +100 +100 +100 +105 +106 +110 +110 +110 +116 +116 +119 +119 +119 +125 +126 +129 +129 +129 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +178 +179 +182 +183 +184 +185 +185 +188 +188 +191 +190 +190 +195 +194 +196 +197 +196 +198 +198 +201 +200 +200 +200 +200 +202 +202 +202 +204 +204 +205 +204 +207 +206 +207 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +205 +204 +205 +204 +204 +203 +203 +201 +200 +200 +200 +200 +198 +198 +196 +196 +196 +194 +194 +195 +194 +194 +190 +190 +188 +188 +189 +185 +185 +182 +183 +180 +178 +179 +175 +175 +173 +173 +173 +169 +168 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +133 +133 +133 +129 +129 +126 +125 +125 +119 +119 +116 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +83 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +58 +58 +54 +54 +54 +50 +50 +47 +46 +47 +43 +43 +41 +41 +38 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +14 +14 +14 +13 +13 +13 +13 +14 +14 +13 +14 +13 +13 +14 +13 +13 +13 +14 +13 +13 +14 +13 +13 +15 +15 +15 +17 +17 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +30 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +46 +50 +51 +51 +54 +55 +58 +58 +59 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +109 +110 +116 +115 +120 +119 +125 +125 +129 +129 +133 +134 +134 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +168 +173 +173 +173 +175 +175 +179 +179 +178 +183 +182 +185 +185 +185 +189 +189 +190 +190 +191 +195 +194 +197 +196 +197 +198 +198 +200 +200 +201 +201 +201 +202 +202 +204 +204 +205 +204 +205 +206 +206 +206 +206 +206 +207 +207 +207 +206 +206 +206 +206 +207 +206 +207 +204 +204 +204 +204 +204 +202 +202 +201 +200 +200 +200 +200 +200 +200 +200 +198 +198 +196 +196 +196 +194 +194 +190 +190 +189 +188 +189 +184 +184 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +148 +147 +147 +144 +143 +139 +139 +139 +133 +133 +130 +130 +129 +125 +125 +119 +119 +119 +116 +115 +110 +110 +110 +106 +106 +100 +100 +96 +96 +96 +90 +90 +87 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +65 +64 +59 +59 +59 +54 +54 +50 +51 +47 +47 +46 +43 +43 +41 +41 +41 +37 +37 +32 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +14 +14 +14 +13 +13 +14 +14 +13 +14 +14 +14 +14 +13 +13 +13 +14 +14 +13 +13 +13 +13 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +46 +47 +47 +51 +50 +55 +55 +58 +58 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +110 +110 +110 +116 +115 +119 +119 +120 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +148 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +168 +173 +173 +175 +175 +175 +179 +178 +182 +182 +183 +185 +185 +188 +189 +189 +190 +191 +195 +194 +197 +196 +197 +198 +198 +200 +201 +200 +200 +200 +200 +200 +200 +202 +202 +205 +204 +204 +204 +205 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +204 +205 +204 +204 +204 +204 +204 +202 +202 +202 +200 +201 +200 +200 +199 +199 +199 +196 +196 +194 +194 +194 +190 +191 +189 +189 +189 +184 +185 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +168 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +130 +125 +126 +120 +120 +115 +115 +116 +110 +109 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +72 +72 +69 +68 +65 +64 +64 +59 +59 +55 +54 +54 +50 +50 +46 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +21 +21 +21 +19 +19 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +14 +12 +13 +14 +13 +14 +13 +13 +14 +14 +14 +14 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +14 +13 +13 +14 +13 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +46 +51 +51 +54 +54 +54 +58 +58 +64 +65 +64 +69 +68 +72 +72 +72 +77 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +116 +115 +119 +119 +125 +125 +125 +129 +129 +133 +133 +140 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +174 +175 +178 +178 +182 +182 +182 +184 +184 +189 +189 +189 +191 +191 +190 +190 +190 +194 +195 +197 +197 +197 +198 +199 +200 +200 +200 +200 +201 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +205 +204 +205 +204 +204 +202 +202 +202 +201 +201 +200 +200 +200 +198 +198 +196 +196 +196 +194 +194 +190 +191 +191 +188 +189 +184 +185 +182 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +140 +139 +139 +134 +133 +129 +130 +129 +126 +125 +120 +119 +120 +116 +115 +109 +110 +110 +106 +106 +99 +100 +100 +96 +95 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +59 +58 +58 +54 +54 +50 +50 +50 +46 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +26 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +18 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +14 +13 +13 +14 +13 +13 +14 +14 +14 +13 +14 +13 +14 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +50 +51 +55 +55 +59 +58 +58 +64 +64 +68 +68 +73 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +110 +110 +116 +115 +119 +119 +126 +126 +125 +130 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +173 +173 +173 +174 +175 +179 +178 +178 +183 +182 +183 +183 +183 +184 +184 +189 +189 +189 +190 +191 +194 +194 +195 +196 +197 +198 +199 +200 +200 +201 +200 +200 +203 +202 +202 +204 +204 +204 +204 +205 +204 +204 +206 +206 +207 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +204 +205 +205 +204 +202 +202 +200 +200 +201 +200 +200 +198 +198 +199 +196 +196 +195 +194 +190 +190 +190 +188 +189 +184 +185 +184 +183 +183 +179 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +126 +126 +119 +119 +116 +116 +116 +110 +110 +106 +106 +100 +101 +101 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +65 +64 +65 +58 +58 +55 +54 +51 +51 +51 +46 +47 +43 +43 +43 +41 +41 +41 +41 +41 +37 +37 +32 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +19 +19 +19 +17 +17 +16 +15 +15 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +14 +13 +14 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +14 +13 +14 +14 +14 +13 +13 +12 +15 +15 +17 +17 +18 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +50 +54 +55 +54 +58 +59 +65 +64 +64 +68 +69 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +91 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +115 +116 +119 +119 +125 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +144 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +169 +169 +168 +173 +173 +175 +175 +175 +179 +179 +183 +182 +183 +185 +184 +189 +189 +191 +190 +191 +194 +194 +196 +196 +197 +199 +198 +199 +198 +198 +201 +200 +201 +201 +201 +202 +202 +204 +205 +204 +205 +205 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +205 +204 +204 +205 +202 +203 +200 +200 +201 +200 +200 +199 +198 +196 +196 +197 +194 +195 +191 +190 +190 +189 +189 +185 +184 +185 +183 +183 +179 +178 +179 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +152 +151 +151 +147 +147 +143 +143 +143 +139 +139 +134 +134 +134 +129 +129 +125 +126 +120 +119 +120 +116 +115 +110 +110 +109 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +83 +76 +76 +72 +72 +68 +68 +68 +65 +64 +59 +59 +59 +54 +54 +50 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +26 +27 +27 +25 +25 +21 +21 +21 +19 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +14 +14 +14 +14 +14 +14 +14 +14 +13 +13 +13 +14 +13 +13 +14 +13 +13 +14 +13 +13 +14 +14 +13 +13 +13 +15 +15 +17 +17 +17 +19 +18 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +32 +33 +33 +37 +36 +41 +41 +42 +43 +43 +47 +47 +50 +51 +51 +55 +55 +59 +58 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +77 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +110 +110 +115 +115 +119 +119 +120 +125 +125 +129 +129 +130 +133 +133 +139 +139 +144 +143 +143 +147 +147 +151 +151 +150 +157 +157 +157 +157 +157 +161 +161 +165 +165 +165 +169 +168 +173 +173 +173 +175 +175 +179 +179 +183 +183 +183 +184 +185 +188 +188 +188 +191 +191 +191 +191 +190 +194 +194 +197 +196 +197 +198 +199 +200 +200 +200 +201 +201 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +207 +206 +206 +204 +205 +204 +204 +204 +202 +202 +200 +201 +200 +200 +200 +198 +199 +198 +196 +196 +194 +194 +195 +191 +190 +188 +188 +188 +184 +185 +183 +183 +179 +178 +178 +174 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +150 +151 +147 +147 +148 +143 +143 +139 +139 +134 +134 +133 +129 +129 +125 +125 +125 +119 +120 +115 +116 +115 +110 +110 +105 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +68 +68 +68 +64 +64 +58 +58 +58 +54 +54 +51 +50 +49 +47 +46 +43 +43 +41 +41 +40 +37 +37 +33 +33 +33 +31 +31 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +14 +13 +14 +13 +13 +13 +14 +14 +14 +14 +14 +14 +13 +13 +14 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +32 +31 +31 +33 +33 +37 +36 +37 +41 +41 +43 +43 +43 +47 +47 +50 +51 +51 +55 +54 +58 +59 +59 +64 +65 +69 +68 +73 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +109 +115 +115 +120 +120 +125 +126 +125 +130 +129 +133 +134 +133 +139 +139 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +164 +165 +169 +169 +169 +173 +173 +175 +174 +174 +178 +179 +178 +179 +179 +182 +183 +185 +185 +184 +188 +188 +190 +190 +191 +194 +194 +196 +196 +198 +198 +198 +201 +200 +200 +201 +200 +202 +202 +204 +204 +204 +205 +204 +206 +206 +206 +207 +207 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +204 +204 +204 +205 +204 +202 +202 +200 +201 +200 +200 +200 +198 +198 +198 +197 +196 +194 +195 +191 +191 +190 +189 +188 +184 +185 +184 +183 +183 +183 +183 +183 +178 +179 +175 +174 +174 +173 +173 +169 +169 +169 +165 +165 +161 +161 +158 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +130 +129 +130 +126 +126 +120 +120 +120 +115 +115 +110 +110 +106 +106 +105 +100 +100 +100 +100 +99 +96 +96 +96 +96 +95 +90 +90 +86 +86 +86 +82 +82 +76 +76 +74 +72 +72 +68 +68 +64 +64 +65 +59 +58 +55 +54 +55 +51 +50 +51 +51 +51 +47 +47 +42 +43 +43 +41 +40 +37 +37 +35 +33 +32 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +14 +14 +13 +14 +13 +14 +14 +14 +14 +13 +14 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +38 +41 +41 +43 +42 +47 +47 +47 +50 +51 +55 +55 +55 +59 +59 +64 +64 +64 +69 +68 +72 +72 +72 +76 +76 +82 +83 +83 +86 +86 +90 +90 +96 +96 +96 +100 +100 +105 +106 +106 +110 +110 +110 +110 +110 +116 +115 +120 +120 +119 +125 +125 +129 +129 +131 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +157 +157 +157 +161 +161 +165 +165 +166 +169 +169 +173 +172 +174 +175 +175 +178 +179 +182 +183 +183 +185 +184 +188 +189 +188 +190 +191 +195 +194 +194 +197 +196 +198 +198 +198 +201 +201 +200 +200 +202 +202 +203 +204 +204 +204 +204 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +205 +205 +204 +204 +202 +203 +203 +201 +200 +200 +200 +200 +198 +198 +196 +196 +197 +194 +194 +191 +191 +191 +189 +188 +185 +185 +185 +182 +183 +179 +179 +175 +175 +175 +172 +173 +169 +169 +169 +165 +164 +161 +161 +161 +157 +157 +151 +151 +151 +147 +148 +143 +144 +144 +139 +139 +133 +133 +129 +129 +129 +125 +126 +120 +119 +120 +116 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +59 +58 +58 +55 +55 +51 +51 +50 +47 +46 +43 +43 +41 +41 +40 +37 +37 +33 +32 +33 +31 +31 +27 +26 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +13 +13 +14 +14 +13 +13 +14 +13 +13 +13 +13 +14 +14 +14 +14 +14 +13 +14 +14 +14 +13 +14 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +41 +41 +41 +43 +42 +47 +47 +47 +50 +51 +54 +54 +54 +59 +58 +65 +65 +64 +68 +68 +72 +73 +73 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +100 +100 +100 +106 +106 +110 +110 +110 +115 +115 +119 +119 +122 +125 +125 +129 +129 +133 +133 +134 +140 +139 +143 +143 +143 +147 +147 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +166 +169 +169 +173 +173 +175 +174 +175 +179 +179 +183 +183 +183 +184 +184 +189 +189 +189 +191 +190 +194 +194 +195 +196 +196 +198 +199 +200 +200 +200 +200 +200 +202 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +203 +203 +203 +201 +200 +201 +200 +201 +198 +198 +197 +197 +196 +195 +195 +190 +191 +191 +189 +189 +185 +185 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +152 +147 +147 +143 +143 +140 +139 +139 +133 +133 +128 +129 +130 +125 +126 +125 +126 +126 +119 +119 +115 +115 +116 +110 +109 +106 +106 +106 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +77 +76 +76 +72 +72 +68 +68 +69 +64 +64 +58 +58 +55 +54 +54 +50 +50 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +24 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +14 +14 +13 +14 +14 +13 +13 +14 +13 +14 +13 +14 +14 +13 +13 +13 +13 +14 +14 +14 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +28 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +42 +47 +47 +47 +50 +50 +54 +55 +55 +58 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +77 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +107 +110 +110 +115 +116 +119 +120 +120 +125 +125 +129 +129 +129 +133 +133 +133 +133 +134 +139 +139 +143 +143 +143 +147 +147 +151 +151 +156 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +178 +182 +182 +185 +184 +185 +189 +189 +191 +190 +194 +195 +195 +197 +197 +198 +199 +198 +201 +200 +200 +200 +201 +202 +202 +205 +204 +204 +204 +205 +207 +206 +207 +206 +207 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +204 +204 +205 +204 +204 +202 +202 +200 +200 +200 +200 +200 +199 +199 +198 +196 +197 +195 +195 +191 +190 +190 +188 +189 +184 +184 +185 +183 +183 +179 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +139 +139 +139 +133 +133 +130 +129 +129 +126 +126 +119 +119 +118 +116 +116 +110 +110 +106 +105 +106 +100 +100 +96 +96 +96 +90 +90 +90 +91 +90 +86 +86 +82 +82 +82 +76 +76 +73 +72 +71 +68 +68 +64 +65 +58 +59 +59 +54 +55 +50 +51 +51 +47 +47 +44 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +32 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +12 +14 +13 +13 +14 +13 +14 +13 +14 +14 +14 +13 +14 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +14 +14 +13 +14 +13 +12 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +30 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +50 +54 +54 +54 +58 +58 +64 +64 +65 +68 +69 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +91 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +116 +119 +119 +120 +119 +120 +125 +126 +129 +129 +130 +134 +133 +139 +139 +141 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +178 +179 +182 +183 +185 +185 +185 +188 +188 +190 +190 +191 +194 +194 +196 +197 +196 +199 +198 +200 +200 +200 +200 +201 +202 +202 +202 +204 +205 +204 +204 +207 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +205 +204 +204 +204 +204 +202 +202 +203 +200 +200 +200 +201 +199 +199 +198 +196 +196 +194 +194 +194 +190 +191 +188 +188 +189 +185 +185 +183 +183 +183 +179 +179 +174 +174 +175 +173 +173 +169 +169 +165 +165 +165 +161 +160 +157 +157 +157 +151 +151 +147 +147 +147 +143 +144 +140 +139 +139 +133 +133 +129 +129 +130 +126 +125 +120 +120 +115 +115 +115 +109 +110 +106 +106 +106 +100 +100 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +72 +73 +69 +68 +69 +64 +64 +58 +59 +59 +55 +54 +50 +50 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +20 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +14 +13 +14 +13 +13 +14 +13 +13 +14 +14 +14 +13 +13 +13 +13 +14 +13 +14 +13 +14 +14 +13 +13 +13 +12 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +30 +31 +31 +33 +32 +37 +37 +37 +41 +40 +43 +43 +47 +47 +46 +50 +50 +54 +54 +54 +58 +58 +59 +59 +58 +64 +65 +68 +68 +68 +73 +72 +76 +76 +77 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +106 +106 +105 +110 +110 +116 +116 +116 +120 +120 +125 +125 +129 +130 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +175 +175 +175 +179 +179 +182 +183 +183 +185 +184 +189 +189 +189 +191 +190 +195 +194 +194 +197 +197 +198 +198 +198 +201 +201 +200 +201 +203 +203 +202 +204 +204 +204 +205 +204 +206 +207 +206 +206 +206 +207 +206 +207 +206 +206 +206 +207 +206 +206 +207 +204 +204 +205 +204 +203 +202 +202 +201 +201 +200 +201 +200 +198 +198 +197 +196 +196 +195 +195 +191 +191 +191 +188 +189 +184 +185 +186 +183 +183 +179 +179 +175 +175 +174 +173 +173 +169 +169 +169 +165 +165 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +145 +143 +143 +139 +140 +133 +133 +134 +129 +129 +125 +125 +125 +120 +120 +120 +119 +119 +116 +115 +110 +109 +110 +106 +106 +100 +100 +98 +96 +96 +91 +90 +86 +86 +86 +82 +82 +76 +77 +76 +73 +73 +68 +68 +68 +64 +64 +58 +58 +59 +54 +55 +50 +50 +47 +47 +47 +42 +43 +41 +41 +41 +36 +37 +33 +32 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +13 +14 +13 +13 +14 +14 +14 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +14 +14 +14 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +24 +25 +26 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +43 +43 +43 +47 +47 +51 +51 +50 +55 +54 +59 +58 +61 +65 +65 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +105 +106 +108 +110 +110 +116 +116 +119 +119 +119 +125 +125 +129 +129 +129 +133 +134 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +160 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +183 +185 +184 +188 +188 +188 +191 +190 +194 +195 +196 +196 +196 +198 +199 +200 +200 +200 +201 +200 +202 +203 +202 +204 +205 +204 +204 +204 +206 +207 +206 +206 +207 +206 +207 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +204 +204 +205 +204 +204 +202 +202 +200 +201 +201 +200 +200 +199 +198 +200 +196 +197 +195 +194 +190 +191 +190 +188 +188 +185 +184 +184 +182 +182 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +163 +161 +161 +157 +157 +151 +151 +150 +147 +147 +143 +143 +143 +139 +139 +139 +139 +140 +133 +133 +129 +129 +129 +126 +125 +119 +119 +120 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +64 +64 +64 +59 +58 +54 +54 +54 +51 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +14 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +14 +13 +13 +14 +14 +13 +13 +14 +13 +14 +14 +13 +12 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +50 +51 +50 +55 +55 +58 +58 +59 +65 +64 +64 +63 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +109 +109 +115 +116 +116 +120 +120 +126 +125 +126 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +160 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +178 +183 +182 +183 +184 +184 +188 +188 +189 +190 +190 +195 +194 +195 +196 +196 +199 +198 +198 +200 +201 +200 +200 +200 +202 +202 +204 +204 +205 +205 +204 +206 +207 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +204 +204 +204 +204 +204 +203 +202 +200 +200 +200 +200 +200 +198 +198 +196 +197 +196 +194 +194 +191 +191 +190 +189 +189 +184 +184 +184 +183 +183 +179 +178 +176 +174 +175 +173 +173 +168 +169 +169 +165 +165 +161 +161 +161 +157 +157 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +140 +134 +133 +134 +129 +129 +125 +125 +125 +119 +119 +115 +115 +115 +109 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +65 +64 +58 +59 +54 +54 +54 +50 +51 +47 +47 +47 +42 +43 +41 +40 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +12 +13 +15 +15 +17 +17 +17 +19 +19 +19 +19 +19 +20 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +40 +41 +41 +43 +43 +47 +47 +47 +51 +51 +50 +51 +51 +54 +54 +58 +58 +58 +64 +64 +68 +68 +69 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +116 +119 +119 +125 +125 +125 +129 +129 +133 +133 +134 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +172 +173 +173 +175 +175 +178 +178 +179 +183 +182 +184 +185 +185 +189 +189 +191 +190 +190 +195 +195 +196 +197 +196 +198 +199 +201 +200 +200 +200 +201 +203 +202 +204 +204 +204 +204 +205 +207 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +207 +207 +206 +204 +204 +204 +205 +204 +203 +202 +201 +200 +200 +200 +201 +201 +200 +200 +198 +199 +196 +197 +196 +194 +194 +191 +190 +189 +188 +189 +184 +185 +183 +182 +182 +179 +179 +174 +175 +175 +173 +173 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +154 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +125 +120 +120 +116 +116 +116 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +67 +68 +64 +64 +65 +58 +58 +55 +54 +51 +51 +51 +47 +47 +43 +42 +43 +41 +41 +37 +36 +37 +32 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +20 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +14 +13 +13 +13 +13 +13 +14 +14 +14 +13 +14 +14 +14 +13 +13 +13 +13 +13 +14 +14 +13 +14 +14 +13 +13 +13 +14 +13 +14 +13 +13 +14 +13 +13 +12 +15 +15 +17 +17 +18 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +32 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +48 +50 +50 +54 +55 +58 +59 +59 +64 +64 +68 +68 +68 +72 +72 +76 +77 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +99 +100 +100 +106 +106 +106 +106 +106 +109 +110 +116 +116 +115 +120 +119 +126 +125 +125 +129 +130 +134 +133 +133 +139 +139 +143 +143 +148 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +172 +175 +175 +179 +179 +178 +183 +182 +185 +184 +189 +188 +189 +191 +190 +194 +195 +195 +196 +197 +198 +198 +198 +200 +201 +200 +200 +200 +202 +202 +205 +204 +205 +204 +205 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +207 +206 +206 +206 +207 +207 +207 +204 +204 +205 +205 +205 +203 +203 +203 +201 +200 +200 +200 +198 +198 +198 +197 +197 +194 +194 +195 +191 +191 +188 +188 +188 +184 +186 +183 +182 +183 +179 +178 +175 +175 +174 +172 +173 +169 +169 +165 +165 +165 +160 +160 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +140 +139 +140 +133 +133 +129 +129 +125 +125 +125 +119 +120 +116 +116 +115 +110 +109 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +72 +72 +72 +68 +68 +65 +64 +64 +58 +58 +54 +55 +55 +50 +50 +46 +47 +47 +43 +43 +40 +41 +41 +37 +37 +33 +33 +32 +31 +31 +27 +26 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +14 +13 +14 +14 +13 +13 +13 +13 +13 +14 +13 +14 +13 +14 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +21 +21 +21 +25 +25 +27 +27 +27 +31 +30 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +50 +51 +55 +54 +59 +58 +59 +64 +64 +68 +68 +69 +73 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +110 +110 +115 +116 +119 +119 +120 +125 +125 +129 +129 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +179 +179 +179 +182 +183 +184 +185 +185 +189 +189 +190 +191 +190 +195 +194 +196 +196 +196 +198 +199 +201 +200 +201 +200 +201 +203 +202 +205 +204 +204 +204 +204 +206 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +205 +205 +203 +203 +200 +200 +201 +200 +200 +198 +198 +198 +197 +196 +197 +197 +196 +195 +194 +190 +191 +191 +189 +189 +184 +184 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +141 +139 +139 +133 +133 +129 +130 +129 +125 +125 +119 +119 +120 +116 +115 +110 +109 +109 +106 +106 +100 +100 +100 +96 +96 +90 +90 +87 +86 +86 +82 +82 +76 +77 +76 +72 +72 +68 +68 +69 +65 +65 +58 +58 +58 +54 +55 +51 +51 +51 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +14 +14 +13 +14 +13 +14 +14 +14 +13 +14 +14 +14 +14 +13 +14 +14 +13 +13 +13 +13 +13 +13 +13 +12 +15 +15 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +40 +43 +43 +47 +46 +47 +51 +51 +55 +54 +55 +59 +58 +65 +65 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +109 +115 +116 +119 +119 +120 +125 +126 +129 +129 +129 +134 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +164 +165 +169 +169 +169 +173 +173 +175 +175 +175 +178 +178 +183 +182 +183 +184 +185 +189 +189 +189 +191 +190 +194 +195 +195 +197 +197 +199 +198 +200 +200 +201 +201 +200 +202 +203 +203 +204 +204 +204 +204 +204 +206 +207 +207 +206 +206 +207 +206 +207 +206 +206 +206 +206 +207 +206 +204 +204 +204 +204 +204 +202 +202 +202 +200 +200 +200 +201 +200 +200 +200 +198 +198 +199 +196 +196 +194 +194 +193 +190 +191 +188 +189 +185 +185 +185 +183 +183 +179 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +140 +139 +133 +133 +133 +130 +129 +125 +125 +125 +119 +119 +115 +115 +115 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +58 +58 +54 +54 +51 +50 +51 +47 +46 +43 +43 +42 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +12 +13 +13 +13 +14 +13 +13 +13 +14 +14 +14 +14 +13 +14 +14 +14 +13 +13 +14 +13 +14 +14 +13 +14 +13 +13 +13 +14 +13 +14 +13 +12 +15 +15 +17 +17 +18 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +32 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +50 +54 +55 +54 +58 +58 +64 +64 +64 +68 +68 +72 +72 +73 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +115 +119 +119 +125 +126 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +144 +148 +147 +151 +151 +158 +158 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +184 +184 +185 +189 +189 +190 +191 +195 +194 +194 +197 +196 +198 +199 +199 +201 +200 +201 +200 +200 +201 +201 +202 +203 +203 +204 +204 +204 +205 +205 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +204 +204 +204 +204 +204 +202 +203 +201 +201 +201 +200 +201 +198 +198 +196 +196 +196 +195 +194 +191 +191 +190 +189 +188 +184 +184 +185 +182 +183 +178 +179 +179 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +120 +119 +119 +115 +116 +109 +110 +110 +105 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +69 +69 +69 +64 +64 +59 +59 +59 +55 +54 +54 +54 +54 +51 +51 +47 +46 +46 +43 +43 +41 +41 +41 +37 +37 +32 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +13 +14 +14 +14 +13 +14 +14 +14 +14 +14 +13 +13 +13 +14 +13 +13 +14 +13 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +22 +25 +25 +27 +27 +27 +31 +31 +33 +32 +35 +37 +37 +41 +42 +43 +43 +43 +46 +46 +51 +50 +51 +54 +55 +59 +58 +58 +65 +64 +68 +69 +69 +72 +72 +77 +76 +81 +82 +82 +87 +86 +90 +90 +89 +96 +95 +100 +100 +100 +106 +106 +110 +110 +110 +115 +115 +119 +120 +120 +125 +126 +130 +129 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +174 +175 +178 +179 +179 +183 +183 +185 +185 +184 +189 +188 +191 +191 +191 +194 +195 +197 +196 +196 +198 +198 +200 +200 +200 +200 +200 +203 +202 +204 +204 +204 +205 +204 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +205 +204 +205 +204 +204 +202 +202 +202 +200 +200 +200 +200 +201 +198 +199 +196 +196 +197 +195 +194 +190 +191 +191 +189 +189 +185 +185 +182 +183 +183 +179 +178 +175 +175 +175 +172 +173 +169 +169 +168 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +140 +139 +139 +134 +134 +130 +129 +129 +125 +125 +120 +119 +119 +115 +116 +110 +110 +109 +106 +106 +100 +100 +100 +96 +96 +90 +90 +87 +86 +86 +82 +82 +76 +76 +76 +72 +72 +73 +73 +72 +68 +68 +65 +64 +64 +59 +59 +55 +55 +55 +50 +50 +47 +47 +43 +43 +43 +40 +41 +37 +37 +37 +33 +33 +33 +33 +33 +31 +31 +27 +26 +27 +25 +25 +21 +20 +20 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +14 +14 +13 +13 +14 +14 +13 +13 +14 +13 +13 +13 +13 +14 +13 +14 +14 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +32 +37 +37 +41 +41 +41 +43 +44 +47 +47 +47 +50 +51 +55 +55 +59 +59 +59 +65 +65 +68 +68 +69 +72 +73 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +110 +110 +110 +116 +116 +119 +120 +119 +125 +126 +130 +129 +129 +133 +134 +139 +139 +139 +143 +143 +147 +147 +148 +151 +151 +157 +157 +161 +161 +161 +165 +166 +169 +169 +169 +173 +173 +173 +173 +172 +175 +175 +179 +178 +179 +183 +183 +185 +185 +186 +189 +189 +191 +191 +190 +190 +190 +195 +194 +196 +196 +197 +199 +198 +199 +199 +198 +200 +201 +201 +201 +200 +202 +202 +205 +204 +205 +204 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +205 +204 +204 +204 +205 +202 +202 +200 +200 +200 +200 +200 +198 +198 +196 +196 +197 +194 +194 +191 +191 +190 +189 +189 +185 +185 +185 +183 +182 +178 +179 +178 +175 +175 +173 +173 +170 +169 +169 +165 +165 +161 +161 +160 +157 +157 +152 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +120 +119 +120 +116 +115 +110 +110 +110 +105 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +85 +82 +82 +79 +76 +76 +72 +72 +68 +68 +68 +64 +65 +58 +59 +58 +54 +55 +54 +54 +54 +51 +50 +47 +46 +47 +43 +43 +41 +40 +39 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +14 +13 +12 +13 +14 +14 +14 +14 +13 +13 +14 +14 +13 +13 +13 +14 +14 +13 +13 +14 +13 +14 +13 +13 +14 +13 +14 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +32 +37 +37 +41 +41 +41 +43 +43 +47 +47 +46 +51 +51 +55 +55 +54 +58 +58 +64 +65 +64 +68 +68 +72 +72 +73 +77 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +105 +110 +110 +115 +115 +116 +120 +119 +125 +125 +124 +129 +129 +133 +133 +140 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +164 +165 +165 +169 +169 +172 +173 +173 +174 +175 +179 +178 +183 +183 +183 +184 +184 +189 +189 +188 +190 +190 +191 +190 +191 +194 +195 +197 +197 +197 +198 +198 +200 +200 +201 +201 +200 +202 +202 +204 +204 +204 +204 +205 +207 +206 +206 +206 +207 +207 +206 +206 +207 +206 +206 +206 +207 +206 +206 +204 +204 +204 +205 +204 +202 +202 +200 +201 +201 +201 +201 +198 +199 +198 +196 +197 +194 +194 +195 +190 +191 +188 +189 +188 +185 +185 +182 +183 +179 +179 +179 +175 +175 +172 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +134 +133 +133 +129 +129 +125 +125 +125 +120 +120 +115 +115 +115 +110 +109 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +82 +82 +82 +77 +76 +72 +72 +73 +68 +68 +65 +64 +64 +58 +58 +55 +54 +54 +51 +50 +46 +47 +44 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +14 +13 +13 +14 +14 +13 +14 +14 +14 +13 +14 +14 +13 +13 +14 +13 +13 +13 +13 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +40 +43 +43 +47 +46 +47 +51 +50 +54 +55 +54 +59 +58 +64 +64 +65 +69 +68 +72 +72 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +105 +105 +110 +110 +115 +116 +116 +119 +119 +125 +125 +129 +129 +129 +133 +133 +139 +139 +140 +144 +143 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +162 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +179 +182 +183 +182 +182 +183 +184 +185 +189 +189 +188 +191 +191 +194 +194 +196 +196 +197 +199 +198 +200 +200 +201 +201 +200 +203 +203 +203 +204 +204 +204 +204 +204 +207 +206 +206 +206 +206 +206 +207 +206 +206 +207 +207 +207 +206 +206 +204 +204 +205 +204 +204 +202 +203 +203 +200 +201 +201 +200 +200 +199 +198 +196 +196 +196 +195 +195 +190 +190 +189 +188 +189 +185 +184 +183 +182 +182 +179 +178 +179 +179 +179 +175 +175 +173 +172 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +139 +139 +139 +133 +134 +130 +130 +129 +125 +125 +119 +119 +119 +115 +115 +110 +110 +105 +106 +105 +100 +100 +96 +96 +96 +90 +90 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +73 +72 +74 +68 +68 +64 +64 +58 +58 +59 +54 +55 +51 +51 +51 +47 +47 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +14 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +14 +14 +14 +14 +13 +14 +13 +14 +14 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +15 +15 +18 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +46 +46 +51 +51 +51 +55 +55 +59 +59 +58 +65 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +87 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +115 +115 +115 +115 +119 +119 +125 +126 +126 +129 +130 +133 +133 +135 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +178 +179 +179 +182 +182 +184 +184 +185 +189 +189 +190 +191 +191 +194 +195 +197 +197 +196 +198 +199 +200 +200 +201 +200 +201 +202 +202 +204 +204 +204 +204 +205 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +205 +204 +204 +204 +204 +202 +202 +201 +200 +201 +200 +201 +198 +199 +198 +196 +197 +195 +194 +194 +190 +191 +188 +189 +188 +185 +184 +183 +183 +182 +178 +178 +175 +174 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +125 +125 +126 +119 +119 +115 +115 +116 +110 +110 +109 +109 +110 +106 +106 +99 +100 +100 +96 +96 +89 +90 +90 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +69 +65 +65 +65 +64 +65 +58 +58 +54 +54 +54 +50 +51 +46 +46 +45 +43 +43 +41 +41 +37 +36 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +20 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +14 +13 +14 +13 +13 +14 +14 +13 +14 +14 +13 +13 +14 +13 +13 +14 +14 +13 +14 +14 +14 +14 +14 +14 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +46 +50 +51 +50 +54 +55 +59 +59 +58 +64 +64 +68 +68 +69 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +116 +117 +119 +120 +125 +125 +129 +129 +129 +133 +134 +139 +139 +139 +143 +143 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +165 +165 +165 +169 +169 +172 +173 +173 +175 +175 +178 +179 +179 +183 +183 +184 +184 +185 +188 +189 +190 +191 +191 +194 +195 +197 +197 +198 +198 +198 +201 +201 +201 +200 +201 +202 +202 +204 +204 +205 +204 +204 +207 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +205 +202 +202 +200 +201 +200 +201 +200 +198 +199 +198 +196 +197 +194 +194 +195 +191 +190 +188 +188 +185 +184 +184 +182 +182 +179 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +156 +157 +158 +151 +151 +147 +147 +143 +143 +143 +139 +139 +134 +133 +133 +130 +130 +129 +129 +129 +125 +126 +120 +120 +119 +115 +116 +110 +110 +108 +106 +106 +100 +100 +97 +96 +96 +90 +90 +86 +86 +86 +82 +82 +82 +82 +82 +76 +76 +73 +72 +73 +68 +68 +64 +64 +62 +59 +58 +55 +54 +50 +50 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +14 +14 +13 +13 +13 +14 +13 +14 +14 +14 +13 +14 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +40 +41 +43 +43 +43 +47 +47 +51 +51 +51 +54 +54 +59 +58 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +76 +76 +77 +82 +83 +86 +86 +86 +90 +90 +96 +96 +98 +100 +100 +105 +106 +110 +110 +110 +115 +115 +120 +119 +120 +125 +126 +125 +126 +126 +129 +129 +134 +133 +134 +140 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +182 +183 +185 +184 +188 +188 +189 +190 +190 +194 +194 +195 +196 +197 +199 +199 +198 +200 +200 +200 +201 +200 +203 +203 +204 +204 +205 +204 +204 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +205 +204 +204 +204 +204 +202 +202 +203 +200 +201 +200 +200 +199 +198 +198 +196 +197 +195 +195 +194 +191 +191 +189 +189 +189 +185 +184 +183 +183 +182 +179 +179 +175 +175 +175 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +131 +129 +130 +126 +126 +119 +120 +120 +115 +115 +110 +110 +109 +106 +106 +106 +105 +106 +100 +100 +96 +96 +96 +90 +89 +86 +86 +83 +82 +82 +76 +77 +72 +73 +73 +68 +68 +65 +64 +64 +58 +58 +54 +54 +54 +50 +50 +47 +46 +47 +43 +43 +41 +41 +37 +37 +37 +33 +32 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +12 +13 +13 +14 +13 +14 +14 +14 +13 +13 +14 +14 +14 +13 +14 +14 +13 +14 +14 +13 +13 +14 +13 +13 +13 +14 +13 +14 +13 +15 +15 +17 +17 +17 +19 +19 +20 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +43 +42 +42 +46 +47 +51 +50 +51 +54 +54 +54 +54 +54 +59 +58 +64 +64 +64 +69 +68 +72 +72 +73 +77 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +100 +100 +100 +106 +107 +110 +110 +110 +115 +115 +120 +119 +125 +125 +125 +129 +130 +133 +133 +133 +139 +140 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +162 +165 +165 +169 +169 +172 +173 +173 +175 +175 +179 +179 +179 +183 +182 +185 +185 +184 +188 +188 +191 +190 +191 +195 +194 +196 +197 +196 +198 +198 +200 +200 +201 +200 +200 +202 +202 +204 +204 +204 +204 +205 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +207 +206 +206 +206 +207 +204 +204 +205 +204 +204 +202 +202 +200 +200 +200 +200 +201 +199 +199 +198 +197 +197 +194 +195 +195 +190 +191 +188 +189 +189 +185 +184 +183 +182 +178 +179 +178 +175 +175 +173 +173 +173 +169 +169 +169 +169 +168 +165 +165 +161 +161 +161 +157 +157 +151 +151 +149 +147 +147 +143 +143 +139 +139 +139 +133 +133 +130 +129 +129 +125 +125 +126 +125 +126 +119 +119 +115 +115 +116 +110 +110 +106 +106 +101 +100 +100 +96 +96 +90 +89 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +65 +64 +65 +58 +58 +55 +55 +50 +51 +50 +47 +47 +43 +43 +43 +40 +41 +37 +37 +37 +33 +33 +31 +30 +31 +26 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +14 +14 +14 +14 +14 +14 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +20 +25 +25 +28 +27 +27 +30 +31 +33 +33 +33 +37 +36 +40 +41 +41 +43 +43 +46 +46 +47 +51 +51 +54 +55 +54 +58 +58 +64 +64 +68 +68 +69 +72 +72 +76 +76 +77 +82 +82 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +101 +105 +106 +110 +110 +115 +116 +116 +119 +119 +125 +125 +125 +130 +129 +133 +133 +133 +139 +140 +144 +143 +143 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +168 +169 +173 +173 +173 +174 +175 +179 +179 +178 +182 +182 +185 +184 +185 +188 +189 +190 +190 +195 +194 +195 +197 +197 +198 +199 +198 +200 +200 +200 +200 +201 +202 +202 +204 +204 +204 +204 +205 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +207 +206 +204 +205 +204 +204 +205 +202 +203 +200 +200 +200 +200 +200 +199 +198 +200 +196 +197 +194 +195 +191 +191 +191 +189 +189 +184 +185 +184 +182 +183 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +158 +157 +151 +151 +147 +148 +147 +143 +143 +143 +143 +143 +139 +139 +133 +133 +133 +129 +130 +125 +125 +120 +120 +120 +116 +116 +109 +109 +109 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +59 +58 +54 +54 +51 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +32 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +14 +13 +14 +14 +13 +14 +14 +14 +13 +14 +14 +13 +13 +14 +14 +14 +13 +14 +14 +14 +14 +14 +13 +13 +14 +14 +14 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +38 +41 +41 +42 +43 +47 +47 +47 +51 +50 +54 +54 +55 +59 +58 +58 +59 +59 +64 +64 +68 +68 +68 +73 +72 +76 +77 +79 +82 +82 +86 +86 +89 +90 +90 +96 +96 +100 +99 +100 +105 +106 +110 +110 +109 +115 +115 +119 +119 +119 +125 +125 +129 +130 +132 +133 +133 +139 +139 +143 +144 +143 +147 +147 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +175 +175 +175 +179 +179 +182 +183 +182 +185 +184 +188 +188 +188 +191 +190 +195 +195 +194 +196 +197 +198 +198 +198 +201 +201 +200 +200 +203 +202 +203 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +207 +204 +204 +204 +204 +204 +203 +203 +202 +202 +202 +200 +200 +200 +200 +200 +200 +200 +199 +199 +198 +197 +196 +194 +194 +193 +191 +190 +188 +188 +185 +185 +185 +183 +182 +179 +179 +179 +175 +175 +174 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +159 +157 +157 +151 +151 +147 +147 +147 +144 +143 +139 +139 +139 +133 +133 +129 +130 +129 +125 +125 +119 +119 +119 +115 +116 +110 +109 +108 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +73 +68 +68 +69 +64 +65 +59 +58 +55 +55 +54 +51 +50 +47 +46 +47 +42 +43 +41 +40 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +26 +21 +21 +20 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +14 +13 +14 +13 +14 +14 +13 +13 +14 +13 +14 +14 +13 +13 +14 +14 +14 +13 +13 +13 +14 +13 +15 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +36 +37 +37 +37 +37 +40 +41 +43 +43 +43 +47 +47 +51 +51 +54 +55 +55 +59 +58 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +105 +106 +106 +109 +109 +116 +116 +115 +120 +120 +125 +125 +126 +129 +130 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +182 +185 +185 +184 +188 +189 +190 +191 +194 +194 +195 +197 +196 +199 +199 +198 +201 +200 +200 +200 +200 +202 +203 +205 +204 +204 +205 +204 +206 +206 +206 +206 +206 +206 +207 +207 +207 +206 +206 +206 +207 +206 +206 +204 +205 +204 +204 +205 +204 +204 +202 +202 +203 +201 +201 +200 +200 +200 +199 +198 +196 +197 +194 +194 +195 +191 +190 +188 +189 +188 +185 +184 +185 +184 +184 +183 +183 +179 +179 +179 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +144 +143 +144 +140 +140 +133 +133 +134 +129 +129 +126 +126 +120 +119 +119 +116 +115 +110 +110 +109 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +68 +68 +68 +64 +64 +59 +59 +59 +55 +55 +51 +51 +50 +47 +47 +43 +43 +42 +41 +41 +37 +37 +37 +33 +33 +31 +31 +27 +28 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +14 +14 +13 +14 +14 +14 +14 +14 +13 +13 +13 +14 +14 +14 +14 +13 +13 +14 +14 +13 +13 +14 +13 +13 +13 +14 +14 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +40 +41 +41 +43 +43 +47 +47 +47 +51 +51 +54 +54 +55 +58 +58 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +115 +119 +119 +125 +125 +125 +129 +129 +133 +133 +140 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +183 +182 +183 +184 +184 +188 +189 +188 +190 +191 +195 +194 +194 +197 +196 +198 +198 +198 +201 +200 +200 +200 +201 +202 +203 +204 +205 +203 +204 +205 +206 +206 +206 +207 +207 +206 +206 +207 +207 +206 +206 +206 +206 +206 +207 +207 +206 +204 +204 +205 +205 +204 +202 +202 +201 +200 +200 +200 +200 +198 +199 +198 +197 +196 +197 +196 +196 +195 +195 +191 +190 +191 +188 +188 +185 +185 +184 +182 +182 +179 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +162 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +139 +139 +139 +133 +133 +130 +130 +129 +125 +126 +119 +119 +119 +116 +116 +110 +110 +110 +106 +106 +100 +100 +100 +95 +96 +90 +90 +86 +86 +86 +82 +82 +76 +77 +76 +72 +72 +72 +72 +72 +68 +68 +64 +64 +64 +58 +58 +55 +55 +55 +51 +50 +46 +46 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +13 +14 +13 +13 +13 +14 +13 +14 +13 +14 +14 +14 +14 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +15 +15 +15 +15 +15 +17 +17 +17 +19 +19 +21 +21 +22 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +42 +43 +47 +47 +50 +51 +51 +55 +54 +59 +58 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +116 +116 +115 +119 +119 +125 +125 +125 +129 +130 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +152 +157 +157 +161 +161 +165 +165 +165 +169 +168 +173 +173 +173 +175 +175 +179 +179 +178 +183 +183 +185 +184 +184 +189 +189 +191 +191 +191 +194 +194 +196 +196 +199 +198 +198 +200 +200 +200 +200 +200 +202 +202 +203 +202 +203 +204 +205 +204 +204 +204 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +203 +204 +204 +204 +204 +205 +202 +202 +200 +201 +200 +200 +200 +198 +198 +197 +196 +197 +194 +194 +190 +191 +191 +188 +189 +185 +184 +184 +183 +183 +179 +179 +179 +175 +175 +173 +172 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +140 +139 +133 +133 +134 +130 +129 +125 +125 +126 +119 +119 +116 +115 +110 +110 +110 +106 +105 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +68 +68 +64 +65 +59 +58 +58 +55 +55 +51 +51 +50 +47 +47 +43 +42 +43 +41 +41 +37 +37 +37 +33 +33 +31 +30 +31 +27 +27 +25 +25 +22 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +15 +14 +13 +13 +13 +13 +14 +14 +14 +14 +13 +13 +13 +13 +14 +13 +13 +14 +13 +14 +13 +13 +13 +13 +14 +13 +14 +13 +14 +13 +13 +13 +14 +13 +14 +13 +12 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +46 +47 +47 +51 +50 +55 +55 +55 +58 +59 +59 +59 +58 +65 +65 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +109 +115 +116 +119 +120 +120 +125 +125 +129 +129 +129 +133 +133 +139 +139 +144 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +172 +173 +174 +175 +175 +179 +178 +183 +183 +184 +185 +184 +189 +188 +190 +190 +191 +194 +194 +197 +196 +197 +198 +198 +201 +201 +200 +200 +200 +202 +202 +203 +204 +204 +204 +204 +207 +206 +206 +206 +207 +206 +207 +207 +207 +206 +206 +206 +206 +206 +207 +206 +206 +207 +204 +204 +204 +204 +203 +202 +202 +200 +200 +200 +201 +201 +199 +198 +197 +197 +196 +194 +194 +191 +190 +191 +189 +189 +184 +184 +185 +182 +183 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +130 +129 +129 +126 +125 +119 +119 +119 +116 +115 +110 +109 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +69 +68 +64 +64 +58 +58 +58 +54 +54 +51 +50 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +26 +25 +25 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +12 +13 +14 +14 +14 +14 +14 +14 +14 +14 +13 +14 +14 +14 +13 +14 +14 +13 +14 +13 +13 +14 +14 +14 +14 +13 +13 +13 +14 +14 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +51 +54 +54 +55 +58 +58 +64 +64 +65 +68 +68 +72 +72 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +99 +106 +106 +106 +110 +110 +116 +116 +115 +119 +119 +125 +125 +130 +130 +129 +133 +133 +139 +140 +140 +143 +143 +147 +147 +147 +151 +151 +157 +156 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +174 +175 +175 +178 +178 +182 +183 +183 +184 +184 +184 +184 +185 +188 +189 +190 +191 +191 +195 +194 +196 +196 +196 +198 +199 +200 +200 +200 +200 +200 +202 +203 +204 +204 +204 +204 +204 +205 +204 +204 +206 +206 +206 +207 +207 +206 +206 +206 +206 +207 +207 +206 +206 +206 +204 +205 +205 +205 +204 +202 +203 +202 +200 +200 +201 +201 +201 +198 +199 +196 +197 +196 +195 +195 +191 +190 +189 +188 +188 +185 +185 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +134 +133 +129 +129 +129 +125 +125 +119 +120 +119 +116 +115 +110 +110 +110 +106 +106 +100 +99 +96 +96 +96 +90 +90 +86 +86 +86 +82 +83 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +58 +59 +55 +54 +51 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +14 +14 +14 +13 +13 +13 +14 +14 +14 +14 +14 +13 +13 +13 +13 +14 +14 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +22 +21 +21 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +44 +42 +42 +47 +47 +50 +51 +51 +55 +55 +58 +59 +64 +64 +65 +68 +68 +72 +72 +72 +76 +77 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +109 +116 +115 +115 +119 +119 +125 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +152 +157 +157 +161 +161 +164 +165 +165 +169 +169 +173 +173 +173 +175 +174 +179 +179 +179 +182 +183 +185 +184 +184 +188 +189 +191 +191 +192 +194 +195 +197 +196 +198 +199 +198 +200 +200 +200 +200 +200 +202 +202 +202 +202 +203 +204 +204 +204 +204 +205 +206 +207 +206 +206 +207 +206 +207 +206 +207 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +203 +202 +202 +201 +200 +200 +200 +201 +198 +199 +196 +197 +194 +194 +194 +191 +190 +188 +188 +189 +185 +185 +185 +184 +185 +182 +183 +179 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +126 +126 +119 +120 +116 +116 +110 +109 +109 +106 +106 +100 +100 +100 +95 +95 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +73 +72 +73 +69 +68 +64 +65 +58 +58 +58 +54 +55 +50 +50 +51 +46 +47 +47 +47 +47 +43 +43 +41 +40 +40 +37 +37 +33 +33 +32 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +13 +14 +14 +14 +14 +14 +14 +13 +13 +14 +14 +13 +13 +14 +14 +14 +13 +13 +14 +13 +14 +14 +13 +13 +13 +12 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +26 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +47 +47 +46 +51 +51 +54 +55 +55 +59 +58 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +81 +82 +82 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +116 +119 +120 +125 +125 +125 +129 +129 +133 +133 +134 +139 +139 +143 +143 +148 +147 +147 +151 +151 +157 +157 +157 +161 +160 +161 +161 +161 +165 +164 +169 +169 +169 +173 +173 +175 +174 +175 +179 +179 +182 +183 +185 +185 +185 +189 +188 +190 +190 +191 +194 +194 +195 +194 +195 +196 +196 +199 +198 +199 +200 +201 +201 +201 +201 +202 +203 +204 +204 +204 +204 +204 +206 +207 +207 +206 +206 +206 +206 +207 +206 +206 +207 +207 +206 +206 +207 +204 +204 +204 +204 +203 +202 +202 +200 +201 +200 +201 +200 +199 +198 +196 +196 +197 +195 +195 +191 +190 +190 +188 +189 +185 +185 +184 +183 +183 +179 +178 +175 +174 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +130 +129 +129 +125 +125 +119 +119 +120 +115 +116 +109 +110 +110 +106 +106 +100 +100 +100 +96 +95 +90 +90 +90 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +69 +64 +64 +64 +64 +64 +59 +59 +54 +54 +54 +50 +50 +46 +46 +45 +43 +43 +41 +41 +37 +38 +37 +33 +33 +31 +32 +31 +27 +27 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +14 +13 +12 +13 +14 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +14 +14 +14 +14 +14 +14 +14 +13 +13 +14 +14 +14 +13 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +26 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +50 +51 +55 +54 +59 +59 +59 +64 +64 +68 +68 +73 +72 +72 +76 +77 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +110 +111 +115 +115 +120 +120 +126 +125 +126 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +162 +165 +165 +169 +169 +173 +173 +173 +174 +175 +178 +178 +179 +182 +183 +183 +183 +183 +185 +184 +189 +188 +189 +191 +190 +194 +194 +196 +197 +197 +198 +199 +200 +201 +200 +200 +201 +203 +202 +203 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +204 +205 +205 +204 +204 +202 +203 +202 +200 +200 +200 +201 +201 +198 +199 +196 +196 +196 +195 +194 +191 +191 +189 +189 +189 +185 +185 +182 +183 +182 +178 +178 +175 +175 +174 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +148 +147 +147 +143 +143 +139 +139 +139 +133 +133 +130 +129 +129 +125 +125 +119 +120 +120 +116 +116 +110 +109 +110 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +87 +86 +82 +82 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +61 +59 +59 +55 +55 +50 +50 +50 +47 +47 +43 +43 +42 +41 +41 +41 +41 +40 +37 +37 +33 +33 +33 +31 +30 +27 +27 +26 +25 +25 +21 +21 +19 +19 +19 +17 +18 +15 +16 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +14 +13 +13 +14 +13 +14 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +42 +43 +47 +46 +47 +50 +51 +54 +54 +59 +58 +58 +64 +64 +68 +68 +67 +72 +72 +76 +76 +77 +82 +82 +86 +86 +86 +90 +90 +96 +95 +97 +100 +100 +106 +106 +111 +110 +109 +115 +115 +119 +119 +119 +125 +125 +125 +125 +126 +130 +129 +133 +134 +133 +139 +139 +143 +143 +144 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +165 +165 +165 +169 +169 +173 +172 +173 +175 +175 +179 +179 +180 +183 +183 +185 +184 +188 +189 +189 +190 +191 +194 +195 +195 +196 +196 +199 +198 +198 +200 +200 +200 +200 +201 +202 +202 +204 +204 +205 +205 +204 +207 +207 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +207 +205 +205 +204 +205 +205 +202 +203 +200 +200 +201 +200 +201 +198 +198 +197 +196 +197 +195 +195 +191 +191 +191 +189 +189 +185 +185 +185 +183 +183 +179 +179 +179 +175 +175 +173 +173 +169 +168 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +148 +143 +143 +143 +140 +139 +133 +133 +134 +130 +129 +126 +125 +120 +120 +120 +115 +115 +110 +110 +110 +106 +106 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +84 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +59 +59 +58 +58 +59 +54 +54 +50 +51 +51 +46 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +18 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +14 +13 +13 +14 +14 +14 +13 +13 +13 +14 +14 +14 +14 +14 +14 +13 +14 +13 +13 +13 +14 +13 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +42 +41 +41 +43 +43 +47 +47 +47 +51 +51 +55 +55 +55 +58 +58 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +87 +86 +86 +90 +91 +96 +96 +96 +100 +100 +106 +105 +106 +110 +110 +115 +116 +116 +119 +119 +125 +125 +126 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +170 +173 +173 +176 +175 +178 +179 +179 +183 +182 +184 +185 +185 +188 +189 +190 +191 +191 +194 +194 +197 +196 +197 +198 +198 +201 +200 +200 +201 +200 +202 +202 +204 +204 +204 +205 +204 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +204 +204 +204 +204 +204 +203 +202 +200 +200 +200 +200 +200 +198 +198 +198 +196 +196 +195 +195 +194 +190 +191 +189 +188 +188 +185 +185 +183 +183 +179 +178 +178 +175 +175 +173 +173 +172 +169 +168 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +134 +133 +133 +129 +129 +125 +125 +125 +119 +119 +119 +120 +120 +116 +116 +110 +109 +110 +106 +106 +100 +100 +98 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +72 +72 +72 +68 +68 +64 +65 +65 +59 +58 +54 +54 +53 +51 +50 +47 +47 +43 +43 +42 +41 +41 +40 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +13 +13 +14 +14 +13 +14 +13 +13 +13 +14 +13 +14 +13 +14 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +28 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +40 +40 +43 +43 +47 +47 +47 +51 +51 +54 +55 +55 +59 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +77 +82 +82 +86 +87 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +120 +120 +120 +125 +126 +129 +130 +129 +134 +133 +133 +133 +134 +139 +139 +143 +143 +143 +147 +147 +151 +151 +153 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +178 +182 +182 +185 +184 +185 +189 +189 +190 +190 +194 +194 +194 +197 +196 +198 +198 +198 +200 +200 +200 +201 +200 +202 +202 +204 +204 +204 +204 +204 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +205 +204 +202 +202 +201 +200 +200 +200 +200 +198 +198 +199 +196 +196 +194 +195 +191 +191 +191 +188 +189 +184 +184 +185 +182 +182 +183 +183 +183 +179 +178 +174 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +158 +157 +157 +151 +151 +147 +147 +147 +143 +143 +143 +143 +143 +139 +139 +134 +133 +133 +129 +129 +125 +125 +122 +120 +120 +116 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +75 +72 +71 +68 +68 +65 +64 +64 +59 +58 +55 +54 +55 +50 +50 +47 +47 +47 +43 +42 +41 +41 +41 +37 +36 +33 +32 +31 +30 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +13 +12 +13 +13 +14 +14 +13 +13 +13 +14 +13 +14 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +13 +13 +14 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +38 +40 +41 +43 +42 +46 +46 +47 +50 +51 +54 +54 +54 +59 +59 +58 +58 +59 +64 +65 +68 +68 +68 +72 +72 +76 +76 +78 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +106 +106 +106 +110 +110 +115 +115 +116 +119 +120 +125 +125 +129 +130 +129 +133 +133 +139 +139 +139 +143 +143 +146 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +175 +175 +175 +179 +178 +183 +182 +182 +184 +184 +188 +188 +189 +190 +191 +194 +194 +195 +197 +196 +199 +198 +198 +201 +201 +200 +200 +203 +202 +202 +204 +204 +204 +204 +205 +207 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +203 +202 +202 +201 +200 +200 +201 +200 +198 +198 +197 +196 +197 +194 +195 +190 +191 +190 +188 +189 +185 +185 +185 +183 +182 +179 +178 +174 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +134 +133 +129 +129 +130 +125 +125 +119 +119 +119 +116 +116 +116 +116 +115 +110 +109 +106 +106 +106 +100 +100 +96 +95 +91 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +65 +64 +59 +58 +55 +55 +55 +50 +50 +47 +46 +42 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +14 +15 +15 +15 +14 +13 +13 +12 +13 +13 +13 +14 +14 +14 +14 +14 +14 +13 +14 +14 +13 +14 +13 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +38 +37 +37 +40 +41 +43 +43 +43 +46 +47 +47 +47 +47 +51 +51 +55 +55 +55 +58 +59 +64 +65 +64 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +112 +115 +116 +119 +119 +125 +125 +126 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +164 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +178 +183 +182 +185 +184 +185 +188 +189 +191 +191 +191 +195 +194 +197 +197 +199 +199 +198 +200 +200 +200 +200 +201 +203 +202 +205 +204 +205 +204 +205 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +207 +206 +206 +204 +205 +204 +204 +204 +203 +202 +201 +200 +200 +201 +200 +199 +199 +199 +196 +196 +195 +194 +195 +190 +190 +189 +188 +184 +185 +184 +183 +183 +178 +179 +179 +176 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +154 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +129 +129 +129 +126 +126 +120 +120 +120 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +85 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +65 +64 +58 +59 +55 +54 +54 +51 +51 +47 +47 +47 +43 +43 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +14 +13 +13 +14 +13 +14 +14 +13 +14 +14 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +13 +13 +14 +13 +12 +15 +15 +17 +18 +17 +19 +19 +21 +21 +25 +25 +25 +26 +27 +31 +31 +31 +33 +33 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +46 +47 +51 +50 +54 +54 +59 +59 +59 +64 +64 +68 +68 +68 +72 +73 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +105 +110 +110 +116 +115 +115 +119 +120 +126 +125 +125 +129 +129 +133 +133 +134 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +178 +183 +183 +185 +185 +188 +189 +188 +191 +191 +194 +194 +194 +197 +196 +199 +199 +198 +201 +200 +200 +200 +200 +203 +203 +204 +205 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +205 +205 +205 +204 +205 +203 +203 +200 +201 +200 +200 +200 +198 +198 +196 +197 +197 +195 +194 +191 +191 +191 +188 +189 +189 +189 +188 +185 +185 +183 +183 +183 +179 +178 +175 +175 +173 +173 +173 +169 +169 +164 +165 +165 +161 +161 +157 +157 +157 +151 +151 +151 +151 +151 +147 +147 +143 +143 +144 +139 +139 +133 +133 +131 +129 +129 +125 +126 +119 +119 +120 +116 +116 +110 +109 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +59 +59 +59 +54 +55 +51 +51 +51 +47 +47 +43 +42 +43 +40 +40 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +14 +15 +13 +13 +12 +13 +14 +13 +14 +14 +14 +13 +13 +14 +14 +14 +14 +13 +13 +13 +14 +13 +14 +13 +13 +13 +13 +14 +14 +14 +14 +13 +13 +16 +15 +15 +17 +17 +19 +19 +19 +21 +21 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +34 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +50 +54 +54 +55 +55 +54 +58 +58 +64 +64 +65 +68 +68 +72 +73 +74 +77 +76 +82 +81 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +109 +110 +116 +115 +116 +119 +120 +126 +126 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +175 +175 +175 +178 +178 +183 +182 +182 +185 +184 +188 +189 +188 +190 +190 +195 +194 +194 +197 +196 +198 +198 +199 +200 +200 +200 +200 +202 +202 +203 +204 +204 +204 +205 +204 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +207 +204 +204 +204 +204 +205 +202 +202 +200 +200 +201 +200 +200 +199 +199 +198 +196 +197 +194 +195 +194 +190 +191 +189 +189 +186 +184 +185 +183 +182 +178 +179 +179 +175 +175 +173 +173 +173 +169 +169 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +149 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +120 +119 +120 +115 +115 +110 +110 +110 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +69 +65 +64 +58 +58 +59 +55 +54 +51 +50 +47 +46 +48 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +22 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +13 +13 +13 +14 +14 +13 +13 +13 +13 +14 +14 +13 +14 +13 +14 +13 +13 +14 +13 +14 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +26 +25 +25 +27 +27 +31 +31 +33 +33 +33 +36 +37 +41 +41 +41 +43 +42 +43 +43 +43 +47 +47 +50 +51 +51 +54 +54 +59 +59 +64 +65 +64 +68 +68 +72 +72 +72 +77 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +115 +115 +116 +120 +119 +125 +125 +125 +129 +130 +133 +133 +134 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +179 +183 +182 +185 +184 +185 +189 +188 +190 +190 +190 +195 +194 +196 +196 +199 +198 +198 +200 +200 +200 +201 +201 +202 +202 +205 +204 +204 +204 +204 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +207 +207 +206 +204 +204 +204 +204 +204 +203 +202 +203 +202 +202 +200 +201 +200 +200 +201 +198 +199 +196 +196 +196 +195 +195 +190 +191 +189 +188 +189 +184 +184 +183 +182 +182 +179 +179 +179 +179 +179 +175 +174 +173 +173 +173 +169 +169 +165 +165 +164 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +130 +125 +126 +126 +120 +120 +116 +116 +109 +109 +109 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +68 +68 +64 +64 +58 +58 +58 +55 +55 +50 +50 +51 +46 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +14 +14 +14 +13 +13 +14 +14 +14 +13 +13 +14 +13 +14 +13 +14 +13 +14 +13 +14 +13 +13 +14 +13 +13 +12 +15 +15 +18 +17 +18 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +33 +33 +33 +37 +37 +40 +41 +41 +43 +42 +46 +47 +50 +51 +50 +54 +54 +58 +58 +59 +65 +65 +68 +68 +69 +73 +73 +76 +76 +76 +82 +82 +86 +86 +87 +90 +90 +96 +96 +100 +100 +100 +106 +105 +110 +110 +110 +116 +116 +120 +119 +119 +125 +125 +130 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +182 +183 +183 +184 +185 +189 +189 +190 +190 +190 +195 +194 +196 +197 +196 +198 +198 +198 +198 +198 +201 +200 +201 +200 +200 +202 +202 +204 +205 +205 +205 +204 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +204 +204 +204 +204 +205 +202 +202 +203 +201 +201 +200 +201 +198 +198 +199 +197 +196 +194 +195 +195 +191 +190 +191 +190 +190 +189 +188 +184 +185 +185 +183 +183 +179 +178 +175 +175 +175 +173 +173 +169 +169 +169 +164 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +144 +143 +144 +140 +139 +133 +133 +130 +129 +129 +125 +125 +119 +120 +119 +115 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +91 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +68 +68 +64 +64 +64 +64 +65 +58 +58 +55 +54 +54 +50 +50 +46 +47 +47 +43 +42 +41 +41 +38 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +14 +13 +14 +14 +14 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +14 +13 +13 +13 +15 +15 +15 +17 +17 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +30 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +51 +50 +55 +55 +59 +59 +59 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +110 +109 +115 +115 +119 +120 +125 +125 +125 +129 +129 +133 +134 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +182 +184 +184 +184 +188 +188 +191 +191 +191 +194 +195 +196 +196 +196 +199 +198 +200 +200 +201 +201 +201 +202 +202 +204 +204 +204 +204 +204 +207 +207 +207 +206 +206 +206 +207 +206 +207 +206 +206 +206 +207 +207 +207 +204 +204 +204 +204 +204 +202 +202 +200 +200 +200 +200 +201 +200 +201 +200 +199 +198 +197 +197 +197 +195 +195 +191 +191 +189 +188 +189 +185 +185 +183 +182 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +134 +130 +130 +129 +125 +126 +119 +120 +120 +116 +115 +110 +110 +110 +106 +107 +100 +99 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +69 +64 +64 +58 +58 +59 +54 +54 +51 +50 +47 +47 +46 +42 +43 +41 +41 +40 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +14 +14 +13 +14 +14 +14 +14 +14 +13 +14 +13 +14 +14 +13 +13 +14 +13 +14 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +26 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +42 +47 +47 +47 +51 +50 +54 +54 +58 +58 +58 +64 +64 +68 +68 +68 +73 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +105 +106 +110 +110 +110 +116 +115 +119 +119 +120 +125 +125 +130 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +184 +185 +185 +188 +189 +191 +191 +194 +194 +195 +196 +197 +198 +199 +198 +201 +200 +201 +201 +200 +200 +200 +203 +202 +202 +204 +204 +205 +204 +205 +207 +207 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +204 +205 +205 +205 +204 +202 +202 +200 +201 +200 +200 +200 +198 +198 +198 +196 +196 +195 +194 +195 +191 +190 +189 +189 +189 +184 +184 +182 +182 +183 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +134 +134 +129 +129 +126 +125 +125 +119 +119 +115 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +65 +64 +59 +59 +55 +54 +54 +50 +50 +47 +47 +47 +43 +43 +41 +41 +42 +37 +36 +33 +32 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +14 +14 +14 +14 +13 +14 +13 +13 +13 +14 +13 +13 +14 +15 +14 +14 +13 +13 +13 +14 +14 +14 +13 +14 +13 +13 +13 +13 +16 +15 +15 +17 +17 +19 +19 +20 +20 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +40 +41 +41 +43 +42 +47 +47 +47 +50 +50 +50 +51 +50 +54 +55 +59 +59 +58 +64 +64 +69 +69 +68 +73 +72 +76 +77 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +109 +109 +116 +115 +120 +119 +120 +126 +126 +129 +129 +134 +133 +133 +139 +140 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +178 +178 +179 +183 +183 +185 +184 +184 +188 +188 +189 +188 +189 +191 +191 +195 +195 +195 +197 +197 +199 +198 +199 +200 +201 +200 +200 +202 +203 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +207 +204 +204 +204 +204 +205 +202 +202 +201 +200 +200 +201 +201 +198 +198 +198 +197 +197 +194 +194 +195 +190 +191 +189 +188 +184 +184 +185 +183 +183 +179 +179 +179 +174 +175 +173 +173 +172 +169 +169 +165 +165 +165 +161 +161 +156 +157 +157 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +134 +133 +130 +129 +125 +125 +125 +119 +120 +115 +115 +115 +110 +110 +106 +105 +106 +100 +100 +96 +96 +91 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +65 +58 +59 +54 +55 +55 +51 +50 +47 +46 +43 +43 +43 +41 +40 +37 +37 +37 +33 +33 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +14 +14 +14 +14 +13 +14 +14 +14 +14 +14 +14 +14 +14 +13 +14 +13 +13 +13 +13 +14 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +26 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +51 +50 +55 +55 +58 +58 +64 +64 +65 +68 +68 +72 +72 +73 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +95 +96 +100 +100 +100 +107 +106 +110 +109 +116 +116 +116 +119 +120 +125 +126 +125 +130 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +178 +183 +183 +185 +185 +185 +189 +188 +191 +191 +192 +194 +195 +196 +196 +198 +198 +198 +201 +201 +200 +201 +200 +202 +203 +202 +202 +202 +204 +204 +204 +204 +205 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +207 +206 +206 +204 +204 +204 +205 +204 +202 +203 +203 +200 +201 +201 +200 +201 +199 +199 +197 +196 +195 +195 +194 +191 +191 +188 +189 +189 +184 +184 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +158 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +140 +140 +133 +133 +129 +129 +129 +126 +125 +119 +120 +120 +116 +115 +110 +109 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +69 +69 +69 +64 +65 +58 +58 +54 +55 +54 +51 +51 +47 +47 +47 +42 +43 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +32 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +16 +15 +15 +15 +13 +13 +13 +12 +13 +14 +13 +14 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +14 +14 +14 +13 +14 +14 +13 +13 +14 +13 +13 +14 +14 +13 +15 +15 +17 +17 +16 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +42 +43 +46 +46 +51 +51 +50 +54 +55 +59 +58 +58 +64 +65 +68 +69 +69 +73 +72 +76 +76 +76 +82 +83 +86 +86 +86 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +115 +119 +119 +119 +125 +126 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +165 +165 +164 +169 +169 +173 +173 +173 +175 +175 +179 +179 +180 +183 +183 +185 +185 +189 +188 +189 +190 +191 +195 +195 +194 +197 +197 +196 +196 +196 +198 +198 +200 +200 +200 +200 +201 +203 +203 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +207 +204 +205 +205 +205 +204 +202 +202 +201 +200 +200 +200 +200 +198 +199 +198 +196 +196 +194 +195 +194 +191 +190 +189 +188 +189 +185 +185 +183 +182 +182 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +148 +147 +147 +143 +143 +139 +139 +140 +133 +133 +129 +129 +126 +125 +125 +119 +119 +116 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +77 +76 +72 +72 +72 +68 +68 +64 +64 +64 +58 +59 +54 +54 +55 +51 +50 +47 +47 +47 +43 +43 +41 +41 +42 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +13 +13 +13 +13 +14 +12 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +36 +41 +41 +41 +43 +43 +47 +47 +47 +51 +50 +54 +54 +54 +58 +59 +64 +64 +64 +68 +68 +72 +72 +73 +76 +76 +82 +82 +87 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +116 +119 +120 +125 +125 +126 +129 +129 +134 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +151 +151 +151 +157 +157 +161 +161 +161 +164 +165 +169 +169 +168 +173 +173 +175 +175 +178 +179 +179 +183 +183 +184 +184 +185 +188 +188 +189 +188 +188 +191 +190 +194 +195 +195 +196 +196 +199 +198 +200 +201 +201 +200 +201 +202 +202 +203 +205 +204 +204 +205 +205 +206 +206 +207 +206 +206 +206 +206 +206 +207 +207 +207 +206 +206 +206 +204 +205 +205 +204 +205 +202 +202 +202 +201 +201 +201 +200 +200 +199 +199 +197 +197 +196 +194 +195 +190 +190 +191 +189 +189 +185 +185 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +152 +147 +147 +143 +143 +140 +139 +139 +133 +134 +129 +129 +129 +126 +125 +120 +120 +119 +115 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +87 +86 +86 +82 +82 +82 +82 +82 +76 +76 +72 +72 +72 +68 +69 +64 +65 +65 +59 +58 +55 +55 +55 +51 +51 +47 +46 +42 +42 +43 +41 +41 +37 +37 +37 +33 +33 +33 +33 +33 +31 +31 +27 +27 +27 +25 +24 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +14 +13 +13 +13 +14 +14 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +24 +28 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +46 +47 +47 +50 +51 +54 +54 +54 +58 +58 +64 +64 +69 +68 +68 +72 +72 +76 +76 +77 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +99 +106 +105 +106 +110 +110 +115 +115 +119 +119 +119 +125 +125 +129 +129 +129 +133 +133 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +153 +157 +157 +161 +161 +164 +165 +165 +169 +169 +173 +173 +173 +175 +175 +175 +175 +175 +179 +179 +183 +183 +183 +184 +184 +189 +189 +190 +190 +191 +194 +194 +196 +196 +196 +198 +198 +200 +200 +200 +200 +200 +203 +202 +202 +204 +204 +204 +205 +205 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +205 +205 +204 +202 +202 +202 +200 +200 +201 +200 +201 +198 +199 +196 +197 +195 +194 +194 +190 +190 +188 +188 +188 +184 +184 +183 +183 +183 +179 +179 +175 +175 +174 +173 +173 +168 +169 +169 +165 +165 +161 +161 +158 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +130 +125 +125 +119 +119 +120 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +91 +90 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +71 +69 +68 +64 +65 +58 +58 +58 +55 +54 +51 +51 +51 +47 +47 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +14 +14 +13 +14 +14 +13 +13 +13 +14 +13 +14 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +14 +14 +13 +15 +15 +17 +17 +17 +19 +19 +21 +20 +21 +25 +25 +27 +27 +26 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +46 +51 +51 +51 +54 +55 +58 +59 +58 +65 +65 +68 +69 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +87 +90 +90 +96 +96 +101 +100 +100 +106 +105 +110 +109 +109 +115 +115 +115 +115 +115 +120 +120 +125 +126 +125 +130 +129 +133 +133 +138 +139 +139 +144 +144 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +176 +179 +179 +183 +183 +184 +184 +185 +188 +189 +191 +190 +190 +195 +195 +197 +197 +197 +198 +198 +200 +200 +201 +200 +201 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +204 +204 +205 +204 +204 +202 +202 +200 +201 +200 +200 +200 +198 +198 +198 +196 +197 +195 +194 +194 +190 +191 +189 +188 +188 +185 +185 +183 +182 +183 +179 +179 +175 +174 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +141 +133 +134 +130 +129 +126 +125 +125 +119 +120 +116 +115 +115 +109 +109 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +88 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +68 +68 +64 +64 +65 +65 +65 +58 +58 +54 +54 +54 +51 +51 +47 +46 +46 +43 +42 +41 +41 +37 +37 +37 +33 +33 +31 +31 +32 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +13 +13 +14 +14 +13 +13 +14 +14 +13 +14 +14 +13 +14 +13 +14 +14 +13 +13 +14 +14 +14 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +38 +37 +37 +41 +41 +43 +43 +43 +47 +47 +47 +47 +47 +51 +50 +54 +54 +55 +58 +58 +64 +64 +64 +68 +68 +72 +72 +75 +76 +76 +82 +82 +86 +86 +86 +90 +90 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +110 +112 +116 +116 +119 +119 +125 +125 +126 +129 +130 +134 +134 +134 +139 +139 +139 +139 +140 +143 +143 +147 +147 +147 +151 +151 +157 +157 +158 +161 +161 +165 +165 +169 +169 +169 +173 +173 +173 +173 +173 +175 +175 +179 +179 +179 +182 +182 +184 +185 +185 +189 +189 +190 +191 +194 +194 +194 +197 +197 +199 +198 +199 +201 +200 +200 +200 +201 +202 +202 +205 +204 +204 +204 +204 +206 +207 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +207 +206 +205 +204 +205 +204 +204 +203 +202 +202 +201 +201 +200 +200 +201 +198 +198 +196 +196 +195 +194 +194 +191 +191 +188 +188 +189 +185 +185 +183 +183 +182 +179 +179 +175 +175 +175 +173 +173 +169 +169 +170 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +148 +147 +147 +143 +143 +139 +140 +139 +133 +134 +129 +129 +127 +125 +125 +119 +120 +115 +116 +115 +109 +110 +106 +106 +105 +100 +100 +100 +100 +99 +96 +95 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +68 +68 +64 +65 +59 +58 +58 +54 +54 +51 +51 +51 +46 +47 +43 +43 +43 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +14 +14 +13 +14 +13 +14 +14 +13 +13 +14 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +13 +14 +13 +16 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +47 +47 +46 +50 +51 +54 +54 +55 +58 +58 +59 +58 +59 +64 +64 +68 +68 +68 +72 +71 +77 +76 +78 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +106 +106 +106 +110 +110 +116 +115 +116 +120 +119 +125 +125 +129 +129 +129 +133 +133 +140 +139 +140 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +172 +173 +174 +174 +175 +178 +179 +183 +183 +183 +185 +185 +188 +189 +188 +191 +191 +195 +195 +194 +196 +196 +198 +198 +198 +200 +201 +200 +201 +203 +202 +202 +204 +205 +204 +204 +204 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +207 +204 +205 +204 +204 +203 +202 +202 +201 +200 +200 +201 +200 +198 +198 +199 +199 +198 +196 +197 +195 +195 +194 +191 +190 +188 +189 +189 +184 +184 +182 +182 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +149 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +125 +125 +125 +119 +119 +115 +116 +116 +109 +110 +105 +106 +103 +100 +100 +96 +96 +90 +90 +91 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +69 +68 +64 +64 +65 +58 +58 +54 +55 +51 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +13 +13 +13 +14 +14 +13 +13 +14 +13 +13 +14 +13 +14 +13 +14 +13 +14 +14 +13 +13 +13 +13 +14 +13 +13 +15 +15 +17 +17 +18 +19 +19 +21 +21 +21 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +40 +41 +41 +41 +43 +43 +47 +46 +47 +51 +50 +55 +55 +55 +58 +58 +64 +64 +69 +68 +68 +72 +73 +76 +76 +76 +82 +82 +82 +82 +83 +86 +86 +90 +90 +90 +96 +96 +100 +100 +105 +106 +106 +110 +110 +115 +116 +115 +119 +119 +125 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +156 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +182 +184 +185 +185 +189 +188 +190 +191 +194 +194 +194 +196 +196 +198 +198 +199 +200 +201 +201 +200 +201 +202 +203 +205 +205 +205 +204 +204 +206 +206 +207 +207 +207 +206 +207 +207 +206 +206 +206 +206 +206 +207 +206 +204 +204 +204 +205 +205 +202 +202 +200 +200 +200 +200 +200 +198 +199 +200 +197 +197 +195 +195 +190 +190 +190 +189 +188 +185 +185 +184 +182 +183 +179 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +163 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +138 +139 +139 +133 +133 +128 +130 +130 +125 +125 +119 +119 +116 +115 +116 +110 +110 +106 +105 +105 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +69 +68 +64 +64 +64 +58 +58 +55 +55 +54 +50 +50 +47 +46 +47 +42 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +13 +13 +13 +14 +14 +14 +14 +14 +13 +13 +14 +13 +13 +14 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +26 +25 +25 +27 +27 +27 +27 +27 +31 +31 +32 +33 +33 +37 +37 +41 +40 +41 +43 +43 +47 +47 +51 +51 +50 +54 +54 +59 +59 +58 +65 +64 +64 +65 +65 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +96 +96 +96 +99 +100 +106 +106 +106 +110 +110 +116 +115 +115 +119 +120 +125 +125 +125 +129 +129 +133 +134 +135 +139 +139 +143 +143 +147 +147 +147 +151 +151 +156 +157 +157 +161 +161 +164 +165 +165 +169 +169 +173 +173 +172 +175 +175 +178 +179 +183 +183 +182 +184 +185 +188 +189 +189 +190 +190 +195 +194 +195 +197 +196 +198 +199 +199 +201 +201 +201 +200 +201 +203 +202 +204 +204 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +207 +204 +205 +205 +204 +205 +202 +202 +200 +201 +200 +200 +201 +198 +198 +196 +196 +196 +194 +194 +191 +191 +191 +188 +189 +185 +185 +185 +183 +182 +178 +179 +179 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +157 +157 +157 +151 +151 +148 +147 +147 +143 +143 +139 +139 +134 +133 +133 +129 +129 +125 +126 +125 +119 +119 +115 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +97 +90 +90 +86 +86 +83 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +65 +58 +59 +54 +55 +54 +51 +50 +47 +47 +47 +42 +42 +41 +40 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +14 +13 +14 +14 +13 +14 +14 +13 +13 +13 +14 +13 +14 +13 +14 +14 +13 +13 +14 +13 +14 +14 +14 +13 +13 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +32 +33 +33 +37 +37 +41 +41 +41 +42 +43 +47 +46 +47 +50 +50 +51 +51 +50 +55 +55 +58 +59 +59 +65 +65 +68 +69 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +91 +96 +96 +100 +99 +100 +106 +106 +110 +110 +110 +116 +116 +119 +120 +126 +126 +125 +129 +129 +134 +133 +134 +139 +140 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +185 +184 +185 +189 +189 +191 +191 +190 +195 +195 +196 +196 +196 +198 +198 +200 +201 +201 +200 +200 +203 +202 +204 +204 +204 +204 +204 +206 +206 +206 +207 +207 +207 +206 +207 +206 +207 +206 +206 +207 +207 +206 +205 +205 +204 +204 +204 +202 +203 +200 +200 +200 +200 +200 +200 +200 +200 +198 +198 +197 +196 +196 +194 +194 +190 +191 +189 +189 +189 +184 +184 +182 +183 +183 +179 +179 +175 +175 +175 +173 +173 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +152 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +126 +125 +125 +119 +119 +116 +115 +116 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +77 +72 +72 +73 +68 +68 +64 +64 +65 +59 +58 +54 +55 +51 +50 +51 +47 +47 +43 +43 +43 +41 +41 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +20 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +14 +13 +14 +14 +14 +13 +13 +13 +14 +14 +13 +14 +14 +13 +12 +15 +15 +17 +17 +18 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +33 +33 +33 +37 +38 +41 +41 +41 +43 +43 +47 +47 +50 +50 +51 +55 +55 +58 +58 +58 +64 +65 +68 +69 +68 +73 +72 +76 +76 +76 +82 +81 +86 +86 +86 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +116 +120 +119 +120 +125 +125 +129 +130 +130 +133 +133 +139 +139 +139 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +168 +169 +173 +173 +174 +175 +175 +179 +179 +182 +183 +183 +185 +185 +189 +188 +191 +190 +191 +195 +195 +196 +196 +196 +198 +198 +200 +201 +201 +200 +201 +202 +202 +203 +204 +204 +204 +204 +205 +206 +207 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +204 +204 +204 +204 +204 +202 +202 +200 +201 +201 +200 +201 +199 +198 +197 +196 +196 +195 +194 +191 +191 +190 +189 +188 +188 +188 +188 +185 +185 +183 +183 +182 +178 +178 +175 +174 +173 +173 +173 +169 +168 +164 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +140 +133 +133 +129 +129 +125 +125 +125 +120 +119 +116 +116 +116 +110 +109 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +73 +72 +72 +68 +68 +64 +64 +64 +59 +58 +55 +55 +55 +51 +50 +47 +47 +46 +43 +43 +40 +41 +41 +37 +37 +33 +33 +32 +31 +31 +26 +27 +25 +25 +25 +21 +21 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +16 +13 +13 +12 +13 +14 +14 +13 +14 +14 +13 +13 +14 +13 +14 +14 +14 +14 +13 +13 +13 +14 +14 +13 +14 +14 +13 +14 +13 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +18 +19 +19 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +37 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +51 +55 +55 +59 +59 +59 +65 +65 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +109 +115 +116 +120 +119 +126 +125 +125 +129 +129 +133 +133 +133 +139 +140 +143 +143 +143 +147 +147 +151 +151 +151 +158 +157 +161 +161 +161 +165 +165 +168 +169 +173 +173 +173 +175 +175 +179 +179 +178 +182 +182 +183 +182 +183 +184 +185 +188 +189 +188 +190 +191 +195 +194 +195 +196 +197 +198 +199 +200 +200 +200 +200 +200 +202 +202 +202 +205 +204 +205 +204 +204 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +207 +207 +207 +204 +205 +204 +204 +205 +203 +202 +202 +200 +200 +200 +201 +201 +201 +200 +199 +198 +198 +196 +196 +194 +195 +193 +190 +191 +189 +189 +184 +184 +184 +183 +182 +179 +179 +178 +175 +175 +173 +172 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +152 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +134 +129 +129 +125 +125 +125 +119 +119 +116 +115 +115 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +65 +65 +59 +58 +55 +54 +51 +50 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +26 +21 +20 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +14 +13 +13 +14 +14 +14 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +14 +13 +13 +14 +14 +13 +14 +13 +13 +15 +15 +17 +17 +18 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +46 +51 +50 +54 +54 +55 +58 +59 +65 +65 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +116 +115 +119 +119 +126 +126 +125 +129 +129 +133 +134 +133 +140 +139 +143 +143 +143 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +182 +183 +184 +185 +185 +189 +188 +190 +190 +194 +195 +194 +196 +197 +198 +198 +199 +200 +200 +201 +200 +200 +200 +201 +202 +202 +202 +204 +204 +204 +204 +205 +206 +207 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +205 +204 +204 +204 +205 +202 +203 +201 +200 +200 +200 +200 +198 +198 +196 +197 +196 +195 +194 +190 +191 +190 +189 +188 +185 +184 +185 +182 +182 +179 +178 +179 +175 +175 +173 +173 +169 +169 +169 +164 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +134 +134 +129 +130 +125 +125 +123 +119 +120 +116 +116 +109 +110 +110 +106 +106 +99 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +68 +68 +68 +64 +64 +59 +58 +58 +54 +54 +50 +50 +50 +47 +47 +43 +42 +42 +41 +41 +37 +37 +37 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +19 +19 +19 +17 +17 +15 +15 +15 +14 +15 +13 +13 +13 +12 +13 +13 +14 +14 +13 +13 +14 +14 +14 +13 +13 +14 +14 +13 +14 +14 +14 +14 +14 +13 +14 +13 +13 +13 +14 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +34 +33 +37 +37 +40 +41 +41 +43 +43 +47 +47 +46 +50 +50 +54 +54 +54 +58 +58 +64 +64 +65 +68 +68 +72 +72 +72 +76 +76 +82 +82 +86 +85 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +109 +110 +115 +116 +115 +119 +119 +125 +125 +126 +129 +129 +133 +133 +140 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +174 +175 +175 +179 +179 +183 +182 +183 +185 +184 +189 +188 +188 +191 +190 +195 +194 +194 +196 +197 +198 +198 +199 +201 +200 +200 +200 +201 +202 +203 +204 +204 +204 +204 +204 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +204 +205 +204 +205 +203 +203 +203 +201 +200 +200 +200 +201 +198 +198 +196 +197 +196 +195 +195 +191 +190 +190 +189 +189 +185 +185 +185 +182 +183 +179 +179 +176 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +130 +130 +129 +125 +126 +119 +119 +119 +115 +116 +110 +110 +110 +105 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +72 +73 +68 +69 +68 +65 +64 +58 +58 +58 +54 +54 +50 +50 +51 +47 +46 +43 +43 +43 +41 +41 +36 +37 +33 +33 +33 +31 +31 +27 +27 +28 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +16 +13 +13 +12 +13 +13 +14 +13 +13 +14 +14 +13 +13 +13 +14 +14 +14 +13 +13 +14 +14 +14 +13 +13 +13 +14 +14 +14 +13 +13 +14 +13 +13 +13 +13 +15 +15 +17 +16 +18 +19 +20 +21 +21 +21 +25 +25 +27 +27 +28 +31 +31 +33 +33 +37 +37 +37 +41 +40 +43 +43 +43 +46 +47 +51 +50 +51 +55 +55 +58 +58 +59 +64 +64 +69 +68 +68 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +109 +115 +116 +120 +120 +119 +125 +126 +129 +129 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +172 +175 +175 +179 +179 +179 +183 +182 +184 +185 +184 +188 +189 +191 +191 +191 +195 +194 +196 +197 +197 +198 +198 +200 +200 +201 +200 +200 +203 +202 +204 +204 +205 +205 +205 +206 +206 +206 +206 +206 +207 +206 +207 +206 +207 +207 +206 +206 +206 +206 +206 +206 +205 +204 +205 +204 +204 +202 +202 +202 +201 +200 +201 +200 +200 +198 +198 +197 +196 +197 +194 +195 +190 +190 +191 +188 +189 +184 +185 +183 +182 +183 +178 +178 +175 +175 +175 +173 +173 +173 +173 +173 +169 +169 +165 +165 +166 +161 +160 +157 +157 +157 +151 +151 +147 +147 +144 +143 +143 +139 +139 +133 +133 +133 +129 +130 +126 +126 +126 +119 +119 +116 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +59 +59 +54 +54 +55 +51 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +20 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +14 +14 +14 +14 +14 +14 +14 +13 +14 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +14 +14 +13 +14 +14 +13 +13 +12 +15 +15 +17 +17 +18 +19 +19 +21 +21 +24 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +40 +41 +43 +43 +43 +47 +46 +50 +51 +51 +55 +55 +57 +59 +64 +64 +65 +69 +68 +72 +72 +72 +77 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +99 +100 +100 +105 +106 +110 +109 +116 +115 +116 +119 +120 +126 +125 +125 +129 +129 +133 +133 +134 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +175 +175 +175 +178 +178 +183 +182 +183 +185 +185 +188 +188 +189 +191 +190 +194 +194 +196 +196 +197 +198 +199 +200 +201 +200 +200 +200 +201 +200 +200 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +203 +200 +200 +201 +200 +200 +199 +199 +196 +196 +196 +195 +194 +190 +190 +190 +188 +188 +185 +185 +185 +183 +182 +178 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +164 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +144 +139 +139 +134 +133 +133 +130 +129 +126 +125 +126 +119 +120 +115 +115 +110 +109 +109 +105 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +73 +74 +68 +68 +64 +65 +58 +59 +58 +55 +55 +50 +50 +50 +46 +47 +46 +47 +47 +43 +42 +41 +41 +41 +37 +37 +33 +33 +32 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +14 +13 +13 +14 +13 +14 +13 +14 +14 +14 +14 +14 +13 +13 +13 +14 +14 +14 +14 +13 +14 +14 +14 +13 +13 +13 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +48 +47 +47 +51 +51 +54 +55 +54 +58 +58 +64 +64 +64 +68 +68 +72 +73 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +96 +96 +96 +100 +100 +105 +105 +106 +110 +109 +115 +115 +116 +119 +120 +126 +126 +125 +130 +129 +133 +133 +133 +140 +139 +143 +143 +147 +147 +148 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +184 +184 +189 +188 +188 +190 +191 +194 +194 +194 +196 +196 +197 +197 +197 +198 +198 +201 +200 +201 +200 +201 +203 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +207 +206 +207 +206 +206 +204 +204 +205 +205 +205 +202 +202 +201 +200 +200 +200 +200 +199 +198 +198 +196 +197 +194 +194 +194 +190 +190 +189 +189 +189 +184 +184 +183 +182 +183 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +166 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +144 +139 +139 +140 +133 +133 +129 +129 +126 +125 +125 +119 +119 +115 +115 +115 +109 +109 +106 +106 +106 +100 +100 +96 +95 +96 +90 +90 +86 +86 +87 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +65 +64 +58 +58 +54 +54 +54 +51 +50 +47 +47 +47 +43 +42 +41 +41 +39 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +13 +14 +13 +14 +14 +13 +13 +13 +14 +13 +13 +13 +14 +14 +14 +13 +13 +13 +14 +14 +14 +14 +13 +13 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +51 +55 +55 +54 +58 +58 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +87 +86 +86 +90 +91 +96 +96 +96 +100 +100 +106 +105 +106 +110 +110 +115 +116 +116 +119 +119 +125 +125 +126 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +179 +179 +179 +182 +183 +185 +184 +184 +188 +188 +188 +188 +188 +190 +190 +194 +195 +194 +197 +197 +198 +199 +200 +201 +200 +200 +200 +203 +202 +202 +204 +204 +204 +205 +204 +206 +207 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +204 +204 +205 +204 +204 +202 +202 +202 +201 +201 +201 +200 +200 +199 +199 +197 +196 +196 +194 +194 +191 +191 +191 +188 +189 +184 +185 +183 +182 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +151 +151 +147 +148 +144 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +126 +119 +120 +115 +116 +116 +110 +110 +106 +105 +106 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +77 +76 +76 +76 +76 +72 +72 +68 +68 +69 +64 +64 +59 +59 +56 +55 +54 +50 +50 +46 +47 +46 +43 +43 +41 +41 +41 +37 +37 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +23 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +14 +13 +13 +14 +13 +13 +13 +14 +14 +13 +14 +14 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +14 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +51 +54 +54 +58 +58 +65 +65 +64 +68 +68 +72 +72 +72 +76 +77 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +101 +106 +106 +110 +110 +115 +115 +115 +119 +119 +125 +126 +125 +129 +129 +129 +129 +130 +133 +133 +139 +139 +139 +143 +143 +147 +148 +148 +151 +152 +157 +156 +161 +161 +161 +165 +165 +169 +169 +169 +173 +172 +173 +173 +173 +175 +175 +178 +178 +179 +183 +183 +185 +184 +186 +188 +189 +191 +191 +194 +194 +195 +196 +196 +198 +198 +198 +200 +200 +200 +200 +200 +202 +203 +205 +204 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +207 +206 +206 +206 +204 +204 +204 +204 +204 +203 +202 +200 +200 +201 +200 +201 +198 +198 +197 +197 +197 +195 +195 +190 +190 +191 +189 +189 +185 +185 +184 +183 +182 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +162 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +126 +119 +119 +115 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +71 +68 +68 +64 +64 +59 +58 +58 +54 +54 +51 +51 +51 +47 +47 +47 +47 +47 +43 +43 +41 +41 +41 +37 +36 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +18 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +14 +13 +13 +13 +13 +13 +14 +14 +13 +14 +13 +14 +13 +13 +14 +14 +14 +13 +14 +14 +14 +13 +14 +13 +13 +15 +15 +18 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +32 +37 +37 +41 +40 +41 +43 +43 +47 +47 +51 +51 +51 +55 +55 +59 +59 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +87 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +116 +119 +120 +119 +126 +125 +130 +129 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +165 +165 +165 +169 +169 +173 +172 +173 +175 +175 +179 +178 +182 +183 +183 +184 +185 +188 +189 +189 +191 +190 +195 +194 +195 +196 +196 +198 +199 +199 +200 +201 +201 +201 +201 +203 +203 +204 +205 +204 +204 +204 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +205 +204 +202 +202 +200 +200 +201 +201 +200 +199 +198 +196 +196 +196 +195 +194 +190 +190 +190 +188 +189 +184 +184 +184 +183 +183 +179 +179 +179 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +148 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +126 +125 +119 +120 +119 +116 +116 +110 +110 +110 +106 +106 +105 +106 +106 +100 +99 +96 +96 +96 +90 +90 +87 +87 +87 +82 +82 +76 +76 +72 +73 +72 +68 +68 +64 +65 +65 +59 +59 +55 +55 +54 +51 +51 +46 +46 +47 +43 +43 +41 +42 +37 +37 +37 +33 +34 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +20 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +13 +12 +13 +13 +14 +14 +14 +13 +13 +14 +14 +13 +13 +14 +13 +14 +14 +14 +14 +13 +14 +13 +13 +13 +14 +13 +13 +14 +14 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +32 +37 +37 +41 +41 +44 +43 +43 +46 +47 +47 +46 +47 +51 +51 +54 +55 +55 +58 +58 +65 +64 +64 +68 +68 +72 +72 +73 +77 +76 +82 +82 +87 +86 +86 +90 +90 +96 +96 +96 +100 +100 +100 +100 +100 +106 +106 +109 +110 +110 +116 +115 +119 +120 +122 +125 +125 +129 +130 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +147 +147 +147 +152 +152 +157 +157 +157 +161 +161 +164 +165 +166 +169 +169 +173 +173 +175 +175 +174 +179 +178 +182 +183 +183 +185 +184 +189 +188 +189 +191 +190 +194 +194 +195 +196 +197 +198 +198 +200 +201 +201 +200 +200 +203 +202 +202 +204 +205 +205 +205 +204 +206 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +207 +206 +206 +205 +205 +205 +204 +204 +202 +202 +202 +200 +200 +201 +200 +200 +198 +198 +196 +196 +196 +195 +195 +190 +191 +191 +189 +189 +185 +185 +183 +182 +183 +179 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +148 +147 +143 +143 +140 +139 +139 +133 +133 +129 +129 +129 +125 +125 +120 +119 +119 +116 +116 +110 +110 +110 +106 +106 +100 +100 +101 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +72 +72 +72 +68 +68 +64 +64 +64 +59 +59 +54 +55 +53 +50 +50 +47 +47 +43 +43 +43 +40 +41 +37 +37 +37 +33 +33 +31 +30 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +14 +14 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +14 +14 +13 +14 +14 +14 +14 +14 +13 +14 +14 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +41 +41 +41 +43 +43 +47 +47 +47 +50 +50 +55 +55 +54 +55 +54 +58 +58 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +98 +100 +100 +106 +106 +110 +110 +110 +115 +116 +119 +120 +120 +125 +125 +125 +125 +125 +129 +129 +133 +133 +134 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +168 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +182 +184 +185 +188 +188 +189 +190 +190 +194 +194 +194 +197 +197 +198 +199 +198 +200 +201 +200 +200 +200 +203 +202 +204 +204 +205 +204 +204 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +204 +204 +204 +205 +204 +202 +202 +201 +201 +201 +201 +200 +198 +198 +197 +197 +196 +195 +195 +191 +191 +190 +189 +188 +185 +184 +184 +182 +182 +179 +178 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +148 +147 +148 +143 +143 +139 +139 +139 +133 +133 +129 +129 +130 +125 +125 +119 +119 +115 +116 +116 +110 +110 +106 +106 +106 +100 +100 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +68 +68 +65 +64 +58 +58 +59 +54 +54 +50 +50 +51 +46 +47 +43 +43 +43 +41 +41 +37 +36 +34 +33 +33 +31 +31 +27 +27 +27 +25 +25 +22 +21 +21 +19 +19 +17 +17 +16 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +14 +13 +14 +14 +14 +14 +13 +14 +13 +14 +14 +13 +13 +14 +14 +13 +13 +14 +13 +14 +13 +13 +14 +13 +13 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +47 +47 +47 +51 +51 +55 +55 +55 +58 +58 +64 +64 +65 +68 +68 +72 +72 +72 +76 +76 +82 +82 +83 +86 +86 +90 +90 +96 +96 +96 +100 +101 +106 +106 +106 +110 +110 +109 +110 +110 +116 +115 +119 +120 +120 +125 +125 +129 +129 +131 +133 +133 +139 +139 +143 +143 +144 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +179 +178 +179 +182 +183 +185 +184 +185 +188 +189 +191 +191 +191 +194 +195 +196 +197 +197 +198 +199 +201 +200 +201 +200 +201 +202 +202 +205 +205 +204 +204 +205 +206 +207 +206 +207 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +204 +205 +205 +204 +205 +202 +202 +201 +200 +200 +200 +201 +198 +198 +198 +196 +196 +195 +194 +195 +191 +191 +189 +188 +188 +185 +185 +183 +183 +183 +179 +179 +175 +175 +172 +173 +173 +169 +169 +165 +165 +165 +161 +161 +161 +160 +161 +157 +157 +151 +151 +151 +148 +147 +143 +143 +141 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +120 +119 +115 +115 +115 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +93 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +58 +59 +54 +54 +55 +50 +50 +47 +47 +43 +43 +42 +41 +40 +37 +37 +37 +33 +33 +31 +30 +31 +27 +27 +25 +25 +25 +21 +22 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +12 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +14 +14 +14 +13 +14 +14 +14 +13 +13 +13 +14 +13 +13 +13 +14 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +40 +43 +43 +43 +43 +43 +46 +47 +51 +51 +50 +54 +55 +58 +59 +59 +64 +64 +68 +69 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +108 +109 +110 +116 +115 +120 +119 +119 +125 +126 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +158 +161 +161 +165 +165 +169 +169 +169 +173 +173 +174 +174 +175 +179 +179 +183 +183 +182 +185 +184 +189 +188 +188 +190 +190 +194 +194 +197 +197 +196 +199 +198 +200 +200 +200 +200 +201 +200 +200 +200 +202 +202 +204 +204 +204 +205 +204 +206 +207 +207 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +205 +204 +202 +203 +200 +200 +201 +201 +201 +198 +198 +199 +196 +196 +194 +194 +190 +190 +191 +188 +189 +184 +185 +185 +183 +183 +183 +183 +182 +179 +178 +175 +175 +175 +173 +173 +169 +168 +169 +165 +165 +161 +161 +157 +157 +156 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +130 +125 +126 +120 +119 +116 +115 +115 +110 +109 +106 +106 +106 +100 +100 +96 +96 +96 +91 +90 +86 +86 +86 +82 +81 +76 +77 +76 +73 +72 +68 +68 +65 +64 +64 +58 +58 +54 +54 +55 +51 +51 +47 +46 +47 +42 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +16 +15 +15 +15 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +14 +14 +13 +13 +14 +13 +14 +14 +14 +13 +13 +14 +14 +13 +14 +13 +13 +14 +13 +12 +15 +15 +16 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +48 +50 +50 +54 +55 +58 +59 +58 +64 +64 +64 +64 +64 +68 +68 +68 +68 +68 +72 +72 +76 +76 +77 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +105 +110 +110 +110 +116 +115 +120 +120 +120 +125 +126 +129 +129 +130 +133 +134 +139 +139 +142 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +185 +184 +185 +189 +188 +190 +191 +191 +194 +195 +196 +196 +196 +198 +199 +200 +201 +201 +200 +200 +203 +202 +202 +205 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +207 +206 +205 +206 +206 +206 +206 +207 +204 +204 +204 +204 +204 +202 +202 +202 +200 +200 +200 +200 +198 +198 +199 +196 +196 +195 +194 +194 +190 +191 +190 +190 +191 +188 +188 +184 +185 +184 +183 +183 +179 +179 +177 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +157 +157 +157 +151 +151 +147 +147 +147 +143 +144 +140 +139 +134 +134 +133 +130 +129 +125 +125 +126 +119 +120 +115 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +69 +64 +64 +64 +58 +58 +55 +55 +55 +51 +51 +47 +47 +47 +42 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +28 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +14 +13 +14 +13 +14 +13 +13 +13 +13 +14 +14 +14 +13 +14 +13 +13 +13 +13 +14 +14 +13 +13 +14 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +34 +37 +37 +41 +41 +43 +43 +42 +47 +47 +50 +51 +50 +55 +54 +54 +54 +54 +59 +58 +64 +65 +65 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +99 +106 +106 +106 +110 +110 +116 +115 +116 +119 +120 +126 +125 +129 +130 +129 +133 +133 +139 +139 +140 +143 +143 +143 +143 +143 +147 +147 +151 +151 +152 +157 +157 +161 +161 +160 +165 +165 +169 +169 +173 +173 +173 +175 +174 +178 +178 +179 +182 +183 +185 +185 +184 +189 +189 +190 +191 +190 +194 +195 +196 +197 +197 +198 +198 +200 +200 +201 +201 +200 +203 +203 +204 +204 +204 +204 +204 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +205 +204 +205 +204 +204 +202 +202 +200 +200 +200 +200 +200 +200 +200 +200 +198 +199 +197 +196 +196 +195 +195 +190 +191 +190 +188 +189 +184 +185 +183 +183 +183 +179 +178 +174 +175 +175 +173 +173 +173 +172 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +155 +151 +151 +147 +147 +143 +143 +143 +139 +140 +133 +134 +134 +129 +129 +125 +125 +125 +120 +120 +116 +115 +116 +110 +110 +106 +106 +101 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +65 +58 +58 +54 +55 +51 +50 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +13 +14 +13 +14 +13 +13 +14 +13 +14 +14 +14 +14 +14 +13 +14 +14 +14 +14 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +26 +27 +27 +31 +31 +33 +33 +33 +37 +37 +37 +37 +36 +41 +41 +43 +43 +43 +47 +47 +50 +51 +52 +55 +54 +59 +58 +64 +64 +64 +68 +68 +72 +72 +73 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +105 +106 +106 +110 +110 +116 +115 +115 +119 +119 +125 +125 +126 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +158 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +182 +183 +184 +185 +185 +189 +188 +190 +190 +195 +194 +194 +197 +197 +198 +199 +198 +200 +200 +201 +200 +200 +202 +202 +204 +204 +204 +205 +204 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +203 +200 +200 +200 +200 +200 +199 +198 +197 +196 +197 +194 +194 +190 +190 +190 +188 +189 +185 +185 +185 +183 +182 +183 +183 +182 +178 +179 +175 +175 +175 +173 +173 +168 +169 +167 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +146 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +130 +125 +125 +119 +120 +116 +115 +116 +110 +110 +105 +106 +106 +100 +101 +96 +96 +96 +90 +90 +86 +86 +86 +83 +82 +76 +76 +77 +72 +72 +68 +69 +65 +64 +64 +58 +59 +55 +55 +55 +50 +51 +47 +47 +47 +43 +43 +40 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +26 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +14 +14 +13 +13 +14 +14 +14 +13 +13 +14 +13 +14 +13 +13 +14 +14 +14 +13 +14 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +39 +41 +41 +43 +43 +47 +47 +47 +50 +51 +54 +54 +55 +59 +59 +65 +65 +64 +68 +68 +72 +72 +73 +76 +76 +82 +82 +85 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +116 +116 +120 +119 +125 +125 +126 +130 +129 +133 +133 +140 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +172 +173 +175 +175 +179 +179 +183 +183 +182 +184 +185 +188 +189 +189 +190 +190 +195 +195 +194 +196 +196 +198 +198 +199 +200 +200 +201 +201 +201 +202 +202 +204 +204 +204 +205 +204 +206 +206 +206 +206 +206 +207 +206 +207 +206 +207 +206 +207 +207 +207 +206 +205 +204 +204 +204 +203 +202 +203 +201 +200 +200 +201 +200 +198 +198 +196 +196 +197 +194 +194 +194 +194 +194 +191 +191 +189 +189 +189 +185 +185 +182 +183 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +134 +134 +133 +129 +129 +125 +125 +125 +120 +120 +115 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +83 +82 +82 +76 +76 +72 +72 +73 +69 +68 +64 +65 +64 +59 +59 +54 +54 +54 +51 +50 +47 +47 +47 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +24 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +14 +14 +13 +13 +14 +14 +14 +14 +13 +13 +13 +14 +14 +13 +14 +14 +13 +14 +13 +13 +14 +14 +13 +14 +13 +14 +14 +14 +14 +13 +15 +15 +15 +17 +17 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +30 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +51 +54 +55 +58 +58 +59 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +116 +119 +120 +126 +126 +125 +129 +130 +134 +133 +133 +139 +139 +144 +143 +143 +147 +147 +151 +151 +151 +157 +158 +161 +161 +161 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +182 +183 +185 +185 +184 +188 +189 +191 +190 +190 +194 +195 +196 +196 +197 +198 +199 +200 +200 +200 +200 +200 +202 +203 +204 +204 +205 +204 +204 +205 +204 +204 +206 +206 +206 +207 +207 +206 +207 +207 +206 +206 +206 +207 +206 +206 +204 +204 +204 +204 +205 +202 +203 +202 +200 +201 +201 +200 +200 +201 +201 +198 +199 +199 +196 +197 +194 +195 +193 +190 +191 +188 +188 +185 +185 +185 +183 +182 +179 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +164 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +130 +129 +125 +126 +126 +119 +119 +115 +116 +116 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +65 +58 +59 +55 +54 +51 +51 +50 +47 +46 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +26 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +12 +13 +14 +13 +14 +14 +14 +13 +14 +13 +14 +14 +14 +14 +14 +14 +14 +13 +13 +13 +14 +13 +13 +14 +14 +14 +14 +14 +13 +13 +13 +12 +15 +15 +17 +17 +18 +19 +19 +21 +21 +25 +25 +25 +28 +27 +31 +31 +31 +32 +33 +37 +37 +37 +42 +41 +43 +42 +43 +47 +46 +50 +51 +53 +55 +55 +58 +59 +65 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +83 +86 +86 +90 +90 +90 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +116 +119 +120 +126 +126 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +158 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +184 +185 +185 +188 +188 +190 +191 +195 +194 +194 +196 +197 +198 +198 +198 +200 +201 +200 +200 +200 +202 +202 +204 +205 +204 +204 +204 +206 +206 +206 +206 +206 +207 +206 +206 +207 +207 +206 +206 +206 +206 +206 +204 +204 +205 +205 +205 +204 +204 +202 +202 +203 +200 +200 +201 +201 +199 +199 +199 +196 +196 +194 +194 +195 +191 +191 +189 +189 +188 +185 +184 +183 +183 +182 +178 +178 +175 +175 +175 +173 +173 +169 +169 +166 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +140 +139 +133 +133 +129 +129 +129 +125 +126 +120 +119 +116 +116 +116 +110 +111 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +65 +65 +64 +59 +59 +54 +54 +55 +51 +51 +47 +46 +47 +43 +43 +41 +40 +41 +37 +37 +33 +33 +34 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +13 +14 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +14 +14 +13 +13 +14 +13 +13 +13 +13 +13 +14 +14 +13 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +42 +42 +43 +47 +47 +50 +51 +51 +54 +55 +58 +58 +58 +64 +64 +68 +68 +69 +72 +73 +76 +76 +77 +82 +82 +86 +86 +89 +90 +90 +96 +96 +100 +100 +100 +106 +105 +110 +110 +110 +115 +116 +120 +119 +119 +125 +125 +129 +129 +129 +133 +133 +140 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +178 +179 +182 +183 +184 +185 +185 +188 +189 +190 +190 +190 +194 +194 +195 +195 +194 +195 +194 +196 +196 +197 +199 +198 +200 +200 +200 +200 +201 +202 +202 +204 +204 +204 +204 +204 +206 +206 +207 +206 +207 +206 +206 +207 +206 +206 +205 +207 +206 +207 +206 +206 +206 +205 +204 +205 +205 +204 +202 +202 +202 +200 +201 +200 +201 +200 +198 +198 +197 +197 +196 +195 +195 +190 +191 +191 +188 +189 +185 +184 +182 +183 +182 +178 +179 +175 +175 +175 +173 +173 +173 +172 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +144 +143 +143 +139 +139 +133 +133 +134 +129 +129 +126 +125 +125 +119 +120 +116 +116 +115 +110 +109 +106 +106 +106 +100 +100 +96 +95 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +65 +64 +58 +58 +55 +54 +55 +50 +50 +46 +46 +44 +43 +43 +41 +41 +37 +37 +37 +33 +33 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +20 +19 +19 +17 +17 +15 +15 +16 +14 +15 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +14 +14 +13 +14 +13 +14 +13 +14 +13 +13 +14 +13 +14 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +50 +51 +54 +54 +59 +59 +65 +65 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +109 +116 +115 +115 +120 +119 +125 +125 +125 +129 +130 +133 +133 +134 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +172 +175 +175 +175 +175 +175 +179 +179 +183 +183 +183 +185 +185 +189 +189 +189 +190 +191 +194 +195 +197 +196 +197 +199 +198 +200 +200 +200 +200 +200 +201 +200 +200 +202 +202 +204 +204 +204 +204 +205 +206 +206 +206 +206 +207 +207 +206 +206 +207 +206 +206 +207 +206 +206 +206 +204 +204 +205 +204 +204 +202 +203 +200 +200 +200 +200 +200 +198 +198 +196 +196 +197 +194 +194 +191 +191 +191 +189 +189 +185 +185 +184 +183 +183 +179 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +162 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +140 +133 +133 +133 +130 +129 +125 +125 +126 +119 +119 +116 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +68 +68 +65 +64 +58 +58 +58 +55 +55 +51 +50 +51 +47 +47 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +32 +31 +31 +27 +26 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +14 +13 +14 +14 +13 +14 +13 +13 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +48 +47 +47 +51 +50 +54 +54 +54 +58 +58 +64 +64 +65 +68 +68 +72 +72 +72 +76 +76 +82 +82 +83 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +109 +109 +110 +110 +110 +115 +115 +119 +119 +120 +125 +125 +129 +129 +130 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +176 +178 +179 +182 +183 +184 +184 +185 +189 +188 +191 +191 +190 +194 +194 +195 +194 +195 +197 +196 +199 +198 +198 +200 +201 +200 +200 +202 +202 +203 +204 +204 +204 +204 +204 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +204 +205 +204 +204 +203 +203 +203 +200 +201 +200 +200 +200 +198 +198 +197 +197 +196 +195 +195 +191 +190 +190 +188 +189 +185 +184 +185 +182 +183 +179 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +144 +144 +139 +139 +133 +133 +129 +130 +130 +125 +125 +119 +119 +120 +115 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +91 +86 +86 +83 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +64 +64 +65 +58 +58 +54 +54 +54 +51 +50 +47 +47 +45 +43 +43 +40 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +14 +14 +13 +14 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +34 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +50 +51 +54 +54 +54 +59 +58 +64 +64 +65 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +85 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +116 +119 +119 +126 +125 +129 +130 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +172 +173 +174 +175 +175 +179 +179 +183 +183 +182 +185 +184 +184 +185 +184 +188 +189 +191 +191 +191 +194 +195 +197 +196 +197 +198 +199 +201 +200 +200 +201 +200 +203 +202 +204 +204 +204 +204 +204 +206 +206 +206 +207 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +201 +200 +200 +200 +201 +198 +199 +198 +196 +196 +195 +194 +195 +190 +191 +189 +189 +185 +185 +185 +183 +183 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +143 +143 +143 +140 +139 +133 +133 +133 +129 +130 +125 +125 +125 +119 +119 +115 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +59 +59 +55 +54 +50 +50 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +37 +36 +37 +33 +32 +31 +31 +31 +27 +27 +25 +25 +22 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +12 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +14 +13 +14 +14 +14 +13 +14 +13 +13 +13 +13 +13 +14 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +24 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +46 +50 +51 +50 +54 +54 +58 +58 +65 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +115 +115 +115 +119 +119 +125 +125 +126 +129 +129 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +148 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +173 +173 +173 +175 +175 +179 +179 +179 +182 +183 +184 +185 +188 +189 +188 +191 +190 +194 +194 +194 +197 +196 +198 +199 +198 +201 +200 +201 +200 +200 +202 +202 +204 +204 +205 +205 +205 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +204 +204 +204 +204 +205 +202 +202 +200 +200 +200 +201 +200 +198 +198 +199 +199 +199 +197 +197 +194 +195 +194 +190 +191 +189 +189 +189 +184 +184 +183 +183 +182 +178 +179 +175 +175 +175 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +130 +126 +125 +119 +119 +116 +116 +116 +110 +110 +106 +106 +106 +100 +100 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +83 +76 +76 +72 +72 +68 +68 +68 +64 +64 +59 +58 +58 +55 +55 +54 +55 +54 +51 +51 +47 +47 +47 +43 +43 +41 +41 +38 +37 +37 +33 +33 +31 +30 +31 +27 +27 +25 +24 +25 +21 +21 +19 +18 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +14 +14 +13 +13 +14 +13 +13 +13 +13 +14 +13 +14 +13 +14 +13 +13 +13 +14 +13 +14 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +41 +40 +41 +43 +43 +46 +47 +47 +50 +51 +54 +55 +55 +58 +58 +64 +64 +64 +68 +68 +72 +72 +73 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +100 +100 +100 +106 +106 +110 +109 +110 +115 +116 +120 +119 +122 +125 +126 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +147 +147 +147 +151 +151 +157 +157 +158 +161 +161 +165 +165 +168 +169 +169 +173 +173 +174 +175 +175 +178 +178 +183 +183 +183 +185 +185 +189 +188 +189 +190 +191 +194 +195 +195 +197 +197 +198 +198 +200 +200 +200 +200 +200 +202 +202 +202 +204 +204 +204 +204 +204 +206 +206 +207 +206 +207 +206 +206 +206 +206 +207 +207 +206 +206 +206 +205 +204 +204 +204 +204 +202 +202 +202 +200 +200 +201 +201 +200 +198 +198 +196 +196 +197 +194 +194 +190 +190 +191 +189 +188 +184 +185 +183 +182 +183 +178 +178 +175 +175 +174 +173 +173 +169 +168 +169 +165 +165 +161 +161 +161 +157 +157 +151 +152 +151 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +125 +126 +125 +119 +119 +115 +115 +116 +109 +110 +106 +106 +103 +100 +100 +96 +96 +89 +90 +90 +86 +86 +82 +82 +82 +76 +76 +76 +76 +76 +72 +72 +68 +68 +69 +65 +64 +58 +58 +55 +54 +54 +51 +51 +47 +47 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +16 +15 +15 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +14 +13 +14 +14 +14 +14 +13 +14 +14 +14 +14 +13 +13 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +40 +41 +43 +43 +47 +46 +47 +50 +50 +55 +55 +55 +59 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +102 +106 +106 +109 +109 +116 +115 +116 +119 +119 +126 +125 +125 +129 +129 +129 +129 +130 +133 +133 +139 +139 +139 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +168 +169 +169 +173 +173 +175 +175 +175 +178 +179 +183 +183 +183 +185 +185 +189 +188 +190 +190 +191 +195 +194 +196 +196 +197 +199 +199 +201 +200 +200 +200 +201 +202 +202 +202 +204 +205 +204 +204 +204 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +205 +204 +204 +204 +204 +203 +203 +202 +200 +201 +200 +201 +201 +198 +198 +196 +196 +195 +194 +194 +190 +190 +188 +189 +189 +184 +185 +183 +183 +182 +178 +179 +175 +175 +175 +173 +173 +169 +168 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +130 +129 +125 +125 +119 +119 +118 +116 +115 +110 +109 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +71 +69 +68 +65 +64 +58 +58 +58 +55 +54 +51 +50 +51 +47 +47 +42 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +14 +14 +14 +14 +13 +14 +14 +14 +13 +13 +14 +13 +13 +14 +14 +14 +13 +13 +14 +14 +14 +13 +14 +13 +12 +15 +15 +17 +17 +20 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +50 +55 +55 +54 +58 +58 +64 +64 +65 +68 +68 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +87 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +115 +116 +115 +115 +119 +119 +125 +125 +125 +129 +129 +133 +133 +132 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +182 +182 +182 +185 +184 +188 +188 +188 +190 +190 +195 +194 +195 +197 +196 +198 +198 +198 +200 +200 +200 +200 +200 +202 +203 +204 +204 +205 +204 +204 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +205 +202 +202 +200 +200 +200 +200 +200 +199 +198 +197 +196 +196 +194 +194 +191 +190 +190 +188 +188 +185 +185 +185 +182 +183 +179 +179 +179 +175 +174 +173 +173 +170 +169 +169 +165 +165 +161 +161 +161 +157 +157 +156 +157 +157 +151 +151 +148 +147 +147 +143 +143 +139 +139 +137 +133 +133 +129 +129 +125 +125 +126 +120 +119 +115 +116 +115 +110 +110 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +59 +59 +54 +54 +51 +51 +51 +47 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +13 +14 +13 +13 +14 +13 +13 +14 +13 +14 +14 +14 +14 +14 +14 +13 +14 +13 +14 +14 +13 +14 +14 +14 +13 +14 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +32 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +51 +50 +51 +51 +55 +55 +58 +58 +58 +64 +64 +68 +68 +69 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +96 +96 +96 +100 +100 +105 +105 +106 +110 +110 +115 +116 +119 +120 +119 +126 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +160 +161 +165 +165 +168 +169 +169 +173 +173 +175 +175 +175 +178 +179 +183 +183 +182 +184 +185 +189 +189 +188 +191 +190 +194 +194 +195 +196 +197 +198 +198 +201 +201 +200 +200 +200 +202 +202 +202 +204 +204 +205 +204 +204 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +205 +204 +204 +204 +204 +202 +203 +202 +200 +200 +200 +200 +200 +198 +198 +197 +196 +196 +194 +195 +190 +190 +191 +189 +188 +184 +184 +183 +183 +183 +178 +178 +175 +175 +175 +172 +173 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +154 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +130 +129 +129 +125 +125 +119 +119 +120 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +69 +64 +64 +59 +58 +54 +54 +55 +50 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +13 +13 +14 +13 +14 +14 +13 +14 +13 +14 +14 +13 +13 +13 +14 +13 +13 +14 +14 +13 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +50 +54 +55 +56 +59 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +105 +106 +107 +110 +110 +116 +116 +119 +120 +120 +125 +125 +130 +130 +129 +134 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +160 +161 +160 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +182 +183 +184 +184 +188 +188 +189 +190 +190 +195 +194 +197 +197 +197 +198 +199 +200 +200 +200 +200 +200 +203 +202 +202 +204 +204 +204 +205 +204 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +205 +205 +204 +204 +202 +202 +202 +200 +200 +200 +200 +200 +199 +198 +196 +197 +197 +195 +195 +190 +191 +188 +189 +189 +185 +184 +183 +182 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +159 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +133 +133 +133 +129 +130 +125 +125 +126 +119 +119 +116 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +68 +68 +64 +64 +58 +58 +59 +54 +54 +51 +51 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +14 +13 +14 +14 +13 +13 +14 +13 +14 +14 +14 +14 +14 +13 +13 +13 +13 +14 +13 +13 +14 +14 +13 +13 +13 +13 +15 +15 +17 +16 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +50 +52 +54 +54 +58 +59 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +98 +100 +100 +106 +106 +110 +109 +109 +116 +115 +120 +120 +119 +126 +125 +129 +129 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +182 +183 +183 +183 +183 +184 +185 +188 +188 +189 +190 +191 +194 +194 +194 +197 +196 +198 +198 +198 +200 +201 +200 +200 +200 +202 +203 +204 +204 +204 +204 +205 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +204 +204 +204 +204 +204 +202 +202 +200 +200 +200 +200 +200 +198 +198 +197 +197 +197 +194 +194 +191 +191 +190 +188 +189 +184 +185 +185 +182 +183 +179 +179 +179 +175 +174 +173 +173 +174 +169 +169 +165 +165 +161 +161 +160 +157 +157 +151 +151 +151 +147 +147 +147 +147 +147 +143 +143 +139 +140 +139 +133 +133 +129 +129 +126 +126 +125 +120 +119 +115 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +87 +82 +82 +76 +76 +72 +72 +72 +69 +68 +64 +64 +64 +59 +58 +54 +55 +55 +51 +50 +47 +47 +47 +43 +43 +40 +41 +41 +37 +37 +33 +33 +32 +31 +31 +26 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +14 +13 +13 +14 +14 +14 +14 +13 +13 +13 +14 +14 +13 +13 +15 +15 +18 +17 +17 +19 +19 +21 +21 +21 +25 +25 +25 +25 +25 +27 +27 +30 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +47 +47 +47 +51 +51 +55 +54 +55 +58 +59 +58 +58 +58 +64 +65 +68 +68 +69 +72 +72 +76 +76 +81 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +109 +109 +115 +116 +120 +120 +120 +125 +125 +130 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +178 +178 +179 +183 +183 +184 +184 +184 +188 +189 +191 +190 +190 +194 +194 +196 +197 +196 +198 +198 +200 +200 +200 +201 +200 +202 +202 +205 +205 +204 +204 +204 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +204 +204 +205 +204 +204 +203 +202 +200 +201 +201 +200 +200 +198 +199 +198 +196 +196 +195 +194 +195 +190 +191 +189 +188 +188 +185 +184 +183 +182 +183 +179 +179 +174 +175 +172 +173 +173 +169 +168 +165 +165 +165 +161 +161 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +142 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +119 +119 +115 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +89 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +69 +64 +64 +58 +59 +59 +55 +55 +50 +50 +51 +47 +46 +43 +43 +41 +41 +40 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +13 +14 +14 +13 +14 +14 +13 +14 +14 +13 +13 +14 +14 +14 +14 +14 +14 +13 +14 +14 +13 +13 +14 +14 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +32 +33 +32 +37 +37 +40 +41 +41 +43 +43 +47 +47 +47 +51 +51 +50 +51 +51 +54 +54 +58 +58 +59 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +115 +120 +119 +125 +125 +125 +130 +129 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +182 +183 +185 +184 +185 +188 +188 +191 +190 +190 +194 +195 +196 +196 +196 +198 +198 +200 +200 +201 +200 +200 +202 +202 +204 +204 +205 +204 +205 +206 +206 +206 +206 +206 +207 +206 +206 +207 +207 +206 +206 +207 +206 +206 +204 +204 +204 +204 +204 +202 +202 +201 +200 +200 +200 +200 +200 +201 +200 +199 +198 +196 +196 +196 +194 +195 +191 +190 +189 +189 +188 +185 +184 +182 +182 +183 +179 +178 +175 +175 +175 +173 +173 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +152 +151 +151 +147 +147 +143 +143 +143 +139 +133 +133 +133 +133 +129 +130 +125 +125 +125 +120 +119 +116 +115 +116 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +65 +58 +58 +54 +54 +51 +51 +50 +47 +46 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +12 +13 +14 +13 +13 +13 +14 +13 +13 +13 +14 +14 +13 +13 +14 +13 +14 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +22 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +41 +41 +41 +43 +43 +47 +47 +47 +50 +51 +54 +54 +58 +58 +58 +64 +64 +64 +64 +65 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +91 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +116 +120 +119 +125 +125 +125 +130 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +184 +184 +185 +188 +189 +190 +190 +195 +194 +195 +196 +197 +198 +198 +198 +200 +200 +200 +200 +200 +202 +202 +204 +204 +205 +205 +204 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +204 +204 +205 +204 +204 +202 +202 +200 +200 +200 +201 +200 +198 +198 +197 +196 +196 +194 +194 +190 +191 +190 +189 +188 +184 +184 +184 +182 +183 +183 +183 +182 +178 +178 +175 +175 +174 +173 +173 +169 +169 +167 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +130 +125 +125 +119 +119 +115 +115 +115 +110 +110 +106 +106 +105 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +65 +64 +64 +58 +58 +55 +54 +55 +50 +50 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +26 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +13 +15 +13 +13 +14 +13 +13 +14 +13 +13 +14 +14 +13 +14 +14 +13 +14 +14 +13 +13 +14 +14 +14 +14 +14 +13 +13 +13 +13 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +27 +27 +27 +31 +31 +33 +33 +33 +36 +37 +41 +41 +43 +43 +43 +46 +47 +50 +51 +50 +54 +54 +59 +58 +58 +65 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +89 +90 +90 +96 +96 +100 +100 +99 +106 +106 +110 +109 +110 +115 +115 +120 +120 +119 +125 +125 +129 +129 +130 +133 +133 +139 +139 +140 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +164 +169 +169 +173 +173 +172 +174 +175 +178 +178 +183 +182 +183 +185 +184 +189 +188 +188 +190 +190 +194 +194 +194 +196 +196 +198 +198 +198 +200 +201 +200 +200 +201 +203 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +200 +200 +200 +200 +200 +198 +198 +198 +196 +196 +196 +197 +196 +194 +194 +191 +190 +191 +188 +189 +184 +185 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +152 +147 +147 +143 +143 +140 +139 +139 +133 +133 +129 +129 +130 +125 +125 +120 +119 +119 +116 +115 +110 +110 +110 +106 +106 +100 +100 +99 +96 +96 +90 +90 +87 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +65 +58 +58 +58 +55 +55 +50 +51 +51 +47 +47 +43 +42 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +18 +15 +15 +15 +15 +14 +13 +13 +12 +13 +13 +14 +13 +14 +13 +13 +14 +14 +13 +14 +13 +13 +14 +14 +14 +14 +13 +14 +13 +13 +13 +14 +13 +14 +14 +13 +14 +14 +13 +12 +15 +15 +15 +15 +15 +17 +16 +19 +19 +19 +21 +21 +25 +25 +27 +27 +26 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +46 +46 +47 +50 +50 +54 +54 +55 +58 +58 +64 +65 +68 +68 +68 +72 +72 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +116 +120 +119 +120 +125 +125 +130 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +174 +178 +178 +183 +182 +183 +185 +185 +189 +188 +189 +190 +191 +194 +195 +195 +197 +197 +198 +198 +201 +200 +201 +201 +200 +202 +203 +202 +205 +204 +205 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +205 +205 +205 +204 +204 +202 +202 +202 +203 +202 +200 +200 +201 +200 +200 +199 +199 +196 +196 +195 +194 +194 +190 +191 +188 +189 +188 +185 +185 +182 +182 +182 +178 +178 +175 +175 +175 +173 +173 +169 +168 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +140 +133 +133 +129 +129 +129 +125 +125 +119 +120 +120 +116 +116 +110 +109 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +69 +65 +64 +58 +59 +55 +55 +54 +50 +51 +47 +46 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +14 +13 +14 +14 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +32 +31 +33 +32 +33 +37 +37 +40 +41 +41 +43 +42 +47 +47 +50 +51 +51 +54 +55 +58 +59 +59 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +116 +120 +119 +119 +125 +125 +129 +129 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +152 +151 +151 +157 +157 +161 +161 +161 +165 +165 +168 +169 +169 +172 +173 +175 +175 +175 +179 +179 +182 +182 +183 +184 +185 +189 +188 +191 +190 +191 +194 +194 +196 +197 +196 +198 +198 +198 +198 +198 +201 +200 +200 +200 +200 +202 +203 +204 +204 +205 +204 +204 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +204 +204 +204 +204 +204 +202 +202 +201 +200 +201 +201 +200 +198 +198 +198 +196 +196 +194 +194 +194 +191 +190 +189 +189 +188 +185 +185 +183 +183 +183 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +126 +126 +125 +119 +120 +116 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +87 +82 +82 +76 +76 +73 +72 +72 +68 +68 +64 +64 +64 +58 +59 +55 +54 +55 +50 +50 +46 +47 +47 +42 +43 +41 +41 +41 +37 +37 +33 +33 +32 +31 +31 +27 +27 +25 +25 +25 +21 +21 +21 +21 +21 +19 +19 +17 +18 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +14 +14 +13 +13 +14 +13 +13 +13 +14 +13 +13 +14 +14 +14 +14 +14 +13 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +51 +55 +55 +58 +59 +59 +64 +65 +68 +68 +69 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +109 +110 +115 +116 +119 +119 +120 +126 +125 +129 +129 +134 +133 +133 +139 +139 +143 +144 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +170 +173 +173 +175 +175 +179 +178 +179 +182 +183 +185 +184 +184 +189 +189 +189 +189 +188 +190 +190 +194 +194 +194 +196 +197 +198 +199 +199 +200 +201 +200 +200 +202 +202 +202 +204 +204 +204 +204 +204 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +205 +204 +204 +204 +205 +203 +202 +200 +200 +200 +200 +200 +198 +198 +198 +196 +196 +195 +194 +195 +190 +191 +189 +188 +184 +184 +185 +183 +183 +178 +179 +179 +175 +175 +173 +173 +172 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +125 +119 +119 +116 +116 +116 +110 +110 +105 +106 +106 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +69 +68 +64 +64 +64 +58 +58 +54 +55 +55 +51 +50 +47 +46 +43 +43 +42 +40 +41 +41 +41 +41 +37 +37 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +23 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +14 +14 +14 +13 +13 +14 +14 +13 +13 +14 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +13 +13 +14 +13 +13 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +50 +55 +54 +54 +58 +58 +64 +64 +64 +68 +68 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +87 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +109 +110 +115 +116 +119 +120 +120 +125 +125 +129 +129 +129 +133 +134 +139 +139 +140 +143 +143 +147 +147 +150 +151 +151 +157 +157 +161 +161 +161 +165 +165 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +180 +183 +183 +185 +184 +188 +188 +189 +191 +191 +195 +195 +195 +197 +197 +196 +196 +196 +198 +198 +200 +200 +201 +200 +200 +202 +203 +203 +204 +205 +204 +204 +206 +207 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +204 +204 +205 +204 +205 +203 +202 +201 +201 +200 +200 +201 +198 +198 +199 +196 +197 +194 +194 +194 +191 +190 +188 +188 +188 +184 +185 +183 +183 +183 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +140 +139 +133 +134 +129 +129 +126 +125 +125 +119 +120 +115 +116 +115 +110 +109 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +87 +82 +82 +76 +76 +73 +72 +72 +69 +68 +64 +64 +65 +58 +58 +55 +55 +55 +50 +50 +46 +47 +46 +43 +43 +40 +40 +39 +37 +37 +33 +33 +31 +31 +30 +27 +26 +25 +25 +25 +21 +21 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +13 +13 +14 +13 +14 +13 +14 +13 +14 +14 +13 +14 +14 +13 +13 +14 +14 +14 +14 +14 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +32 +37 +37 +40 +40 +41 +43 +43 +47 +47 +47 +51 +51 +54 +54 +54 +58 +58 +64 +64 +64 +68 +68 +72 +72 +72 +77 +76 +82 +82 +87 +86 +86 +90 +90 +96 +96 +96 +100 +100 +100 +100 +100 +106 +106 +110 +110 +110 +115 +116 +119 +120 +120 +125 +125 +129 +129 +133 +133 +134 +139 +139 +143 +143 +143 +147 +147 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +166 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +183 +184 +185 +185 +184 +184 +189 +188 +191 +190 +191 +194 +195 +196 +196 +198 +198 +199 +200 +200 +200 +200 +200 +202 +202 +205 +204 +205 +204 +204 +207 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +207 +206 +204 +204 +204 +204 +204 +203 +202 +200 +200 +200 +200 +200 +199 +199 +198 +197 +196 +195 +194 +195 +190 +191 +189 +189 +185 +184 +184 +183 +183 +179 +179 +178 +175 +175 +175 +175 +174 +173 +173 +169 +169 +170 +165 +165 +161 +161 +160 +157 +157 +151 +151 +148 +147 +147 +143 +143 +139 +139 +139 +133 +133 +130 +129 +129 +126 +125 +119 +119 +120 +115 +116 +110 +109 +110 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +82 +82 +82 +77 +76 +72 +72 +72 +68 +69 +64 +64 +65 +59 +58 +55 +54 +51 +50 +51 +47 +47 +43 +43 +43 +40 +42 +41 +41 +41 +37 +37 +33 +33 +33 +31 +30 +27 +27 +26 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +14 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +13 +14 +13 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +42 +43 +47 +47 +47 +51 +51 +54 +55 +59 +58 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +97 +100 +100 +106 +106 +110 +110 +110 +115 +116 +120 +120 +120 +125 +125 +125 +126 +125 +130 +129 +133 +133 +134 +139 +139 +143 +143 +145 +147 +147 +151 +151 +157 +157 +157 +161 +161 +161 +161 +161 +165 +165 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +182 +183 +183 +185 +185 +188 +188 +188 +191 +190 +194 +194 +194 +196 +196 +198 +198 +198 +200 +200 +200 +200 +201 +202 +203 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +201 +200 +201 +200 +200 +198 +198 +198 +196 +196 +195 +194 +195 +191 +191 +188 +188 +189 +184 +184 +182 +183 +182 +179 +179 +175 +174 +173 +173 +173 +169 +169 +165 +165 +166 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +140 +141 +133 +133 +130 +130 +126 +125 +126 +119 +119 +115 +115 +115 +109 +109 +110 +110 +110 +106 +106 +99 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +76 +76 +76 +73 +72 +68 +68 +68 +64 +64 +64 +64 +64 +59 +58 +54 +55 +55 +50 +50 +47 +47 +45 +43 +42 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +26 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +13 +14 +14 +14 +14 +13 +14 +14 +14 +14 +13 +13 +14 +13 +13 +14 +14 +14 +13 +13 +13 +14 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +20 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +42 +47 +46 +47 +47 +46 +50 +50 +54 +54 +54 +58 +58 +65 +64 +65 +69 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +116 +119 +119 +125 +125 +126 +129 +129 +133 +133 +133 +139 +139 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +160 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +178 +179 +183 +182 +182 +184 +185 +188 +188 +189 +191 +191 +194 +194 +196 +196 +197 +199 +198 +200 +200 +201 +200 +200 +202 +202 +202 +205 +204 +205 +204 +204 +206 +206 +206 +207 +207 +206 +207 +206 +206 +207 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +202 +200 +200 +200 +200 +200 +198 +198 +197 +197 +197 +195 +194 +190 +191 +189 +188 +188 +185 +184 +182 +183 +183 +178 +178 +174 +175 +174 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +140 +133 +133 +133 +133 +133 +129 +129 +125 +125 +125 +120 +120 +115 +116 +113 +110 +110 +105 +106 +99 +100 +100 +95 +96 +90 +90 +90 +86 +86 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +66 +64 +64 +58 +58 +54 +55 +54 +50 +50 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +14 +14 +13 +13 +14 +13 +13 +14 +14 +13 +14 +14 +13 +13 +14 +14 +13 +13 +13 +15 +14 +15 +17 +17 +19 +19 +22 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +40 +41 +43 +43 +47 +47 +47 +51 +51 +55 +54 +59 +58 +58 +64 +64 +68 +68 +69 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +109 +110 +110 +115 +115 +120 +119 +119 +126 +125 +126 +125 +125 +129 +129 +133 +134 +133 +139 +139 +143 +143 +144 +147 +147 +151 +150 +157 +157 +157 +161 +161 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +182 +184 +185 +185 +188 +188 +190 +191 +191 +195 +195 +196 +196 +196 +198 +198 +200 +200 +200 +200 +200 +202 +202 +202 +204 +205 +205 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +204 +205 +204 +204 +205 +202 +202 +202 +200 +200 +201 +201 +199 +198 +199 +196 +196 +194 +195 +194 +190 +191 +188 +189 +188 +185 +184 +182 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +130 +130 +130 +125 +126 +119 +119 +115 +116 +115 +110 +110 +106 +106 +106 +100 +100 +100 +100 +100 +96 +96 +91 +90 +90 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +58 +58 +54 +55 +50 +50 +51 +46 +47 +43 +43 +43 +41 +41 +37 +37 +34 +32 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +12 +14 +13 +13 +13 +14 +14 +14 +14 +13 +14 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +14 +13 +14 +14 +14 +14 +13 +16 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +32 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +46 +46 +47 +50 +51 +55 +54 +54 +58 +58 +59 +58 +58 +64 +64 +68 +69 +68 +72 +72 +76 +76 +79 +82 +82 +86 +86 +89 +90 +90 +96 +96 +100 +100 +100 +105 +105 +106 +106 +106 +109 +110 +115 +115 +116 +120 +119 +125 +125 +128 +129 +129 +134 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +175 +175 +175 +178 +179 +183 +183 +182 +185 +185 +188 +188 +189 +190 +191 +195 +194 +194 +196 +197 +198 +198 +199 +200 +201 +201 +200 +202 +203 +203 +205 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +205 +205 +204 +203 +202 +203 +201 +200 +200 +200 +200 +199 +198 +196 +197 +197 +195 +195 +190 +190 +191 +188 +188 +185 +184 +185 +183 +183 +179 +179 +175 +175 +175 +172 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +141 +139 +139 +134 +133 +129 +129 +129 +126 +125 +119 +120 +119 +115 +115 +117 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +93 +90 +90 +86 +86 +82 +82 +82 +77 +76 +72 +72 +72 +68 +68 +64 +64 +65 +58 +59 +55 +55 +55 +51 +50 +47 +47 +43 +42 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +18 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +13 +14 +14 +14 +13 +13 +14 +13 +13 +14 +13 +14 +14 +13 +14 +14 +13 +14 +13 +14 +13 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +28 +31 +31 +33 +33 +38 +37 +37 +41 +41 +43 +43 +43 +47 +47 +46 +47 +47 +51 +51 +55 +55 +55 +59 +59 +65 +64 +66 +69 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +109 +115 +115 +116 +120 +119 +125 +125 +126 +130 +129 +133 +133 +133 +139 +139 +143 +143 +143 +148 +147 +151 +151 +151 +157 +157 +161 +161 +165 +165 +165 +169 +169 +172 +173 +173 +175 +175 +179 +179 +179 +183 +183 +185 +185 +185 +189 +188 +190 +191 +191 +195 +194 +196 +197 +198 +198 +199 +201 +200 +201 +201 +200 +203 +202 +204 +205 +204 +204 +204 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +207 +207 +207 +207 +206 +204 +204 +204 +204 +205 +202 +203 +201 +201 +201 +201 +200 +199 +198 +199 +197 +196 +194 +194 +195 +190 +191 +189 +188 +184 +184 +185 +183 +183 +179 +178 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +158 +151 +151 +147 +147 +143 +143 +143 +139 +139 +134 +133 +133 +130 +130 +126 +126 +125 +119 +119 +116 +116 +116 +110 +110 +106 +106 +103 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +68 +68 +64 +64 +65 +58 +58 +55 +55 +50 +50 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +14 +13 +14 +14 +14 +14 +13 +13 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +22 +25 +25 +27 +27 +32 +31 +31 +33 +33 +37 +37 +37 +41 +41 +41 +41 +41 +43 +43 +47 +46 +47 +51 +51 +54 +55 +56 +58 +59 +65 +65 +68 +69 +68 +72 +72 +76 +76 +76 +82 +82 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +102 +106 +106 +110 +110 +115 +115 +115 +120 +120 +126 +126 +125 +130 +129 +134 +134 +133 +139 +139 +143 +143 +144 +147 +147 +152 +151 +156 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +179 +182 +183 +184 +185 +184 +189 +188 +190 +190 +195 +194 +195 +197 +196 +198 +198 +198 +200 +200 +201 +201 +200 +202 +202 +204 +204 +204 +205 +205 +206 +206 +207 +207 +207 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +205 +204 +205 +204 +204 +202 +202 +200 +200 +200 +200 +200 +198 +198 +198 +197 +197 +195 +194 +191 +190 +190 +189 +189 +185 +185 +184 +183 +183 +182 +182 +183 +179 +178 +175 +175 +175 +172 +173 +169 +169 +169 +165 +165 +161 +161 +158 +157 +157 +151 +151 +147 +147 +147 +143 +143 +143 +144 +143 +139 +139 +134 +133 +134 +129 +129 +126 +125 +120 +120 +119 +116 +115 +109 +109 +110 +105 +106 +100 +100 +100 +95 +96 +89 +90 +90 +86 +86 +82 +82 +83 +76 +76 +72 +72 +69 +69 +68 +64 +65 +58 +58 +59 +55 +55 +50 +51 +50 +47 +47 +42 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +16 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +14 +13 +14 +13 +14 +14 +14 +14 +13 +13 +14 +13 +13 +13 +14 +14 +14 +14 +14 +14 +13 +13 +13 +13 +13 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +42 +43 +43 +46 +47 +50 +50 +51 +54 +55 +59 +59 +58 +64 +64 +64 +64 +65 +68 +68 +72 +72 +72 +76 +76 +82 +82 +85 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +115 +119 +119 +126 +125 +126 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +164 +169 +169 +173 +173 +173 +175 +175 +178 +179 +183 +183 +182 +184 +185 +189 +189 +188 +190 +190 +194 +194 +194 +196 +197 +198 +198 +198 +200 +200 +200 +200 +200 +203 +202 +204 +204 +205 +204 +204 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +205 +204 +204 +202 +203 +200 +200 +200 +201 +200 +198 +198 +197 +197 +196 +195 +195 +191 +190 +190 +188 +188 +185 +184 +185 +182 +183 +178 +179 +176 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +136 +134 +133 +129 +129 +125 +126 +126 +120 +119 +115 +116 +115 +110 +110 +106 +106 +105 +100 +100 +96 +96 +96 +90 +90 +86 +86 +85 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +65 +64 +58 +59 +54 +54 +55 +50 +51 +47 +46 +46 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +14 +14 +14 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +32 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +50 +51 +51 +51 +55 +54 +58 +58 +59 +64 +64 +69 +68 +70 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +105 +106 +110 +110 +110 +115 +115 +119 +120 +125 +125 +126 +130 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +172 +173 +173 +175 +175 +179 +179 +179 +183 +182 +184 +185 +185 +188 +188 +190 +190 +190 +195 +194 +196 +197 +197 +198 +198 +200 +200 +201 +200 +201 +202 +202 +204 +205 +204 +205 +205 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +207 +207 +206 +204 +205 +204 +204 +204 +202 +202 +200 +201 +200 +200 +200 +201 +201 +200 +198 +198 +196 +196 +197 +194 +195 +190 +191 +189 +188 +189 +185 +185 +182 +182 +183 +178 +178 +175 +175 +174 +173 +172 +173 +173 +173 +168 +168 +165 +164 +165 +161 +160 +157 +157 +152 +150 +151 +147 +147 +143 +143 +143 +139 +140 +133 +133 +133 +129 +129 +125 +125 +120 +120 +119 +115 +115 +116 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +69 +68 +64 +64 +64 +58 +58 +54 +54 +50 +50 +51 +47 +47 +43 +43 +43 +41 +41 +36 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +13 +14 +14 +14 +14 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +14 +14 +14 +13 +13 +14 +14 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +31 +30 +31 +33 +32 +37 +36 +37 +41 +41 +41 +40 +41 +43 +42 +46 +46 +47 +51 +51 +55 +54 +55 +58 +58 +64 +65 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +109 +110 +110 +115 +115 +119 +119 +119 +125 +125 +129 +129 +129 +134 +133 +139 +140 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +182 +182 +182 +184 +185 +189 +188 +189 +191 +190 +194 +194 +197 +196 +196 +198 +198 +200 +200 +200 +200 +200 +202 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +207 +206 +206 +207 +205 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +205 +204 +202 +203 +202 +200 +200 +200 +200 +198 +199 +198 +197 +196 +194 +194 +195 +190 +191 +189 +188 +188 +185 +185 +185 +185 +184 +183 +182 +178 +178 +179 +174 +175 +173 +172 +171 +168 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +134 +129 +129 +126 +126 +119 +119 +120 +116 +116 +109 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +68 +68 +68 +65 +65 +58 +58 +58 +55 +54 +51 +51 +51 +46 +47 +43 +43 +43 +41 +41 +37 +37 +36 +33 +31 +31 +31 +27 +27 +27 +28 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +13 +14 +13 +14 +14 +13 +13 +14 +13 +13 +13 +13 +14 +13 +13 +14 +14 +14 +13 +14 +13 +13 +13 +14 +13 +13 +13 +13 +12 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +39 +41 +40 +42 +43 +46 +46 +47 +51 +50 +54 +55 +55 +58 +58 +64 +64 +65 +68 +68 +73 +72 +73 +76 +76 +82 +82 +84 +86 +86 +90 +90 +96 +96 +96 +100 +100 +100 +100 +100 +106 +106 +110 +110 +110 +115 +116 +119 +119 +119 +126 +125 +129 +129 +133 +133 +133 +139 +139 +143 +144 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +168 +169 +173 +173 +175 +175 +179 +179 +179 +183 +183 +184 +185 +184 +189 +188 +191 +190 +190 +194 +195 +196 +197 +197 +199 +198 +200 +200 +201 +200 +200 +202 +203 +204 +204 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +205 +204 +204 +204 +204 +202 +202 +202 +201 +200 +200 +200 +201 +198 +198 +198 +199 +198 +196 +196 +194 +194 +195 +190 +191 +188 +188 +187 +184 +185 +183 +182 +179 +179 +179 +175 +174 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +144 +143 +143 +139 +139 +133 +134 +134 +129 +129 +125 +125 +125 +119 +120 +116 +115 +116 +109 +110 +106 +106 +106 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +58 +59 +55 +55 +55 +50 +51 +46 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +14 +14 +13 +14 +13 +14 +13 +14 +14 +13 +14 +14 +13 +13 +13 +12 +15 +15 +15 +15 +15 +17 +17 +19 +19 +19 +20 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +46 +46 +47 +51 +51 +54 +55 +55 +59 +59 +64 +64 +68 +68 +68 +72 +72 +77 +76 +76 +82 +82 +86 +86 +86 +91 +90 +96 +96 +96 +100 +100 +106 +106 +106 +109 +110 +116 +116 +119 +119 +120 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +169 +168 +168 +173 +173 +175 +175 +175 +178 +179 +183 +182 +183 +185 +185 +188 +188 +189 +190 +191 +195 +195 +194 +196 +196 +198 +198 +201 +200 +200 +200 +201 +202 +202 +202 +204 +204 +204 +204 +204 +205 +204 +207 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +207 +207 +205 +205 +204 +204 +204 +203 +202 +202 +202 +202 +200 +200 +200 +200 +200 +198 +199 +196 +197 +195 +194 +195 +191 +191 +188 +189 +188 +185 +185 +182 +183 +182 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +134 +129 +130 +129 +125 +126 +119 +120 +119 +116 +115 +110 +109 +105 +106 +106 +100 +99 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +69 +68 +68 +64 +64 +58 +58 +55 +54 +54 +51 +50 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +32 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +15 +16 +15 +13 +13 +12 +13 +13 +13 +13 +14 +14 +13 +14 +13 +14 +14 +13 +14 +13 +13 +13 +13 +14 +14 +13 +14 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +46 +50 +51 +51 +54 +55 +59 +59 +58 +64 +64 +69 +68 +68 +72 +72 +76 +76 +82 +82 +86 +86 +86 +90 +91 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +116 +120 +120 +120 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +152 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +178 +182 +182 +183 +185 +185 +189 +189 +191 +191 +191 +194 +194 +196 +197 +196 +198 +199 +200 +200 +201 +201 +201 +203 +202 +202 +205 +205 +205 +204 +205 +206 +206 +206 +206 +207 +206 +207 +207 +206 +207 +207 +206 +207 +206 +207 +206 +206 +204 +204 +204 +204 +205 +202 +202 +200 +201 +200 +200 +201 +198 +198 +196 +197 +196 +194 +195 +191 +191 +191 +189 +189 +184 +185 +184 +183 +183 +179 +179 +179 +175 +175 +172 +173 +169 +169 +169 +165 +165 +161 +161 +161 +151 +151 +147 +147 +147 +143 +143 +139 +139 +140 +133 +133 +129 +129 +129 +126 +125 +119 +119 +115 +116 +116 +110 +109 +106 +105 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +72 +72 +68 +68 +65 +64 +64 +59 +58 +54 +54 +55 +50 +51 +47 +47 +47 +42 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +24 +25 +25 +21 +21 +19 +19 +19 +17 +17 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +14 +13 +14 +14 +14 +14 +13 +13 +14 +13 +13 +14 +14 +14 +14 +13 +13 +14 +13 +13 +13 +13 +13 +14 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +36 +37 +41 +41 +42 +43 +43 +46 +47 +51 +51 +51 +54 +55 +58 +59 +59 +64 +65 +68 +68 +68 +73 +72 +76 +76 +77 +82 +82 +86 +86 +91 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +109 +116 +116 +120 +119 +119 +125 +125 +129 +129 +130 +133 +133 +139 +139 +144 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +184 +185 +185 +188 +189 +190 +190 +191 +195 +194 +195 +194 +194 +196 +197 +199 +198 +198 +200 +200 +201 +200 +201 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +206 +204 +205 +205 +204 +204 +203 +203 +201 +200 +201 +200 +201 +200 +200 +200 +198 +198 +196 +196 +197 +194 +195 +191 +191 +191 +188 +189 +184 +185 +185 +183 +183 +179 +179 +175 +175 +175 +172 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +119 +119 +116 +115 +110 +109 +109 +106 +106 +100 +100 +100 +96 +96 +90 +90 +87 +86 +86 +82 +82 +76 +76 +76 +73 +72 +68 +68 +68 +65 +64 +58 +58 +59 +54 +54 +51 +51 +51 +47 +47 +43 +43 +40 +41 +40 +37 +37 +33 +33 +33 +31 +31 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +13 +14 +14 +13 +14 +13 +13 +13 +14 +13 +14 +13 +14 +14 +13 +13 +14 +14 +14 +13 +13 +13 +13 +13 +13 +14 +14 +13 +15 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +46 +47 +47 +51 +51 +55 +55 +54 +58 +58 +64 +64 +69 +69 +68 +72 +72 +76 +76 +77 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +105 +106 +110 +110 +115 +115 +120 +119 +120 +126 +125 +129 +130 +130 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +169 +169 +169 +173 +172 +175 +175 +175 +179 +179 +179 +179 +179 +183 +183 +185 +185 +185 +189 +188 +190 +190 +192 +195 +194 +197 +196 +196 +196 +197 +198 +198 +201 +200 +200 +200 +200 +200 +201 +201 +202 +202 +204 +205 +204 +204 +205 +206 +206 +207 +207 +207 +206 +206 +206 +207 +206 +206 +206 +206 +207 +206 +207 +207 +205 +205 +204 +204 +205 +203 +202 +203 +200 +201 +201 +201 +199 +198 +198 +197 +197 +195 +195 +194 +190 +190 +188 +188 +188 +185 +185 +183 +182 +183 +179 +179 +175 +175 +174 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +130 +125 +125 +119 +119 +116 +116 +116 +110 +110 +106 +106 +105 +100 +99 +96 +96 +96 +90 +90 +86 +86 +86 +82 +83 +76 +76 +77 +72 +72 +68 +69 +64 +64 +64 +58 +58 +55 +54 +54 +50 +51 +47 +47 +47 +43 +43 +40 +41 +41 +37 +37 +32 +33 +32 +31 +31 +27 +26 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +13 +13 +14 +14 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +38 +37 +41 +41 +42 +43 +43 +47 +47 +51 +50 +51 +54 +54 +58 +58 +58 +64 +64 +68 +68 +68 +73 +72 +76 +76 +77 +82 +82 +86 +86 +90 +90 +90 +96 +95 +100 +100 +100 +106 +106 +106 +106 +106 +110 +110 +115 +115 +116 +120 +119 +125 +125 +127 +129 +130 +134 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +170 +173 +173 +175 +175 +178 +179 +179 +183 +183 +184 +185 +185 +189 +189 +189 +189 +189 +190 +191 +194 +195 +195 +197 +196 +198 +199 +200 +201 +200 +200 +200 +202 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +207 +206 +206 +205 +204 +205 +205 +205 +203 +202 +202 +200 +201 +200 +200 +200 +198 +199 +197 +197 +196 +194 +195 +190 +190 +191 +188 +188 +185 +184 +183 +183 +182 +179 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +140 +139 +139 +134 +133 +129 +130 +130 +126 +126 +120 +120 +120 +115 +115 +110 +110 +110 +106 +106 +100 +100 +101 +96 +96 +90 +90 +87 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +69 +64 +64 +59 +58 +59 +54 +55 +51 +51 +51 +46 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +13 +14 +14 +14 +14 +14 +13 +14 +13 +13 +14 +13 +13 +14 +14 +14 +14 +13 +13 +13 +13 +13 +13 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +24 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +51 +54 +54 +54 +58 +58 +64 +64 +65 +68 +68 +72 +72 +77 +76 +76 +82 +82 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +116 +120 +119 +125 +125 +125 +129 +129 +133 +134 +133 +139 +139 +140 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +158 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +179 +179 +178 +182 +182 +185 +185 +184 +189 +189 +190 +190 +192 +194 +195 +197 +197 +199 +199 +198 +200 +201 +201 +200 +200 +203 +203 +204 +204 +204 +204 +204 +206 +206 +206 +206 +207 +205 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +201 +200 +200 +200 +200 +198 +199 +199 +197 +196 +195 +195 +190 +191 +190 +188 +188 +185 +185 +185 +183 +182 +178 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +134 +134 +133 +129 +129 +125 +125 +125 +119 +119 +115 +115 +116 +110 +110 +105 +105 +99 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +68 +68 +65 +65 +61 +58 +58 +55 +54 +50 +51 +50 +47 +47 +43 +43 +43 +41 +41 +40 +41 +41 +37 +37 +33 +33 +33 +30 +31 +27 +27 +26 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +14 +14 +13 +14 +13 +14 +14 +13 +13 +14 +14 +14 +13 +13 +13 +13 +14 +13 +14 +13 +14 +13 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +21 +21 +20 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +46 +47 +51 +50 +55 +54 +59 +58 +58 +65 +65 +68 +69 +69 +72 +72 +77 +76 +76 +82 +82 +86 +87 +86 +90 +90 +96 +96 +97 +100 +100 +106 +106 +110 +110 +109 +116 +115 +119 +120 +119 +125 +126 +126 +126 +126 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +169 +169 +169 +173 +173 +175 +175 +175 +178 +179 +183 +182 +183 +185 +185 +189 +189 +190 +191 +190 +194 +195 +196 +197 +196 +198 +198 +200 +200 +201 +201 +200 +202 +202 +203 +204 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +204 +204 +204 +204 +204 +202 +202 +203 +201 +201 +201 +200 +198 +198 +198 +196 +197 +194 +194 +195 +190 +191 +188 +188 +189 +185 +185 +182 +183 +183 +179 +179 +175 +175 +175 +174 +173 +169 +169 +165 +164 +165 +161 +161 +157 +158 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +130 +129 +130 +126 +125 +119 +119 +116 +116 +115 +110 +109 +106 +106 +106 +100 +100 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +83 +83 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +58 +58 +54 +54 +54 +54 +55 +51 +51 +47 +47 +47 +43 +43 +41 +40 +37 +37 +36 +33 +33 +31 +31 +31 +26 +27 +25 +25 +25 +21 +21 +19 +19 +19 +16 +17 +15 +15 +15 +15 +15 +13 +13 +12 +12 +13 +13 +14 +13 +13 +14 +14 +14 +13 +13 +13 +14 +14 +13 +14 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +14 +13 +13 +13 +14 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +42 +41 +41 +43 +43 +47 +47 +47 +50 +50 +54 +55 +54 +58 +58 +64 +64 +65 +69 +69 +72 +72 +73 +76 +76 +82 +82 +87 +86 +86 +90 +90 +96 +96 +96 +100 +99 +106 +106 +106 +110 +110 +115 +115 +116 +119 +120 +126 +126 +126 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +151 +151 +151 +157 +157 +161 +161 +161 +164 +165 +169 +169 +171 +173 +173 +175 +175 +178 +179 +179 +183 +182 +185 +185 +185 +188 +189 +191 +191 +191 +194 +195 +196 +196 +197 +199 +199 +200 +200 +200 +200 +200 +202 +202 +204 +204 +204 +204 +204 +206 +207 +206 +206 +206 +207 +207 +206 +206 +207 +206 +207 +206 +206 +206 +204 +204 +204 +204 +204 +202 +203 +200 +200 +200 +200 +200 +198 +199 +198 +196 +196 +194 +194 +194 +190 +190 +188 +188 +189 +184 +185 +182 +183 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +148 +148 +143 +143 +139 +140 +134 +133 +133 +129 +129 +125 +125 +125 +120 +119 +120 +120 +120 +116 +116 +109 +110 +110 +106 +106 +100 +100 +98 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +72 +72 +72 +68 +68 +64 +64 +64 +58 +58 +54 +54 +51 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +36 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +14 +13 +14 +14 +14 +14 +14 +13 +13 +14 +13 +13 +14 +14 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +46 +46 +51 +51 +51 +55 +55 +58 +59 +59 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +110 +112 +115 +115 +119 +120 +125 +126 +126 +129 +130 +133 +133 +133 +140 +139 +139 +139 +139 +143 +143 +147 +148 +147 +151 +151 +157 +157 +158 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +178 +183 +183 +182 +185 +185 +188 +189 +189 +190 +191 +194 +195 +196 +197 +197 +198 +198 +200 +200 +200 +201 +201 +202 +202 +202 +205 +204 +205 +204 +205 +207 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +207 +207 +206 +204 +204 +204 +204 +204 +202 +202 +202 +200 +201 +200 +200 +200 +199 +198 +196 +196 +196 +195 +195 +190 +190 +189 +189 +188 +185 +185 +183 +183 +182 +178 +178 +174 +174 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +133 +133 +133 +129 +130 +125 +125 +125 +119 +119 +115 +116 +112 +110 +110 +106 +106 +99 +100 +100 +96 +96 +90 +90 +90 +86 +86 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +66 +64 +64 +59 +59 +54 +55 +55 +50 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +14 +14 +14 +14 +14 +13 +14 +14 +13 +14 +14 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +34 +37 +37 +41 +41 +41 +43 +43 +46 +47 +47 +51 +51 +55 +55 +58 +58 +58 +65 +65 +68 +69 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +98 +100 +100 +106 +106 +110 +110 +110 +116 +115 +119 +119 +119 +125 +125 +125 +125 +126 +129 +130 +134 +133 +134 +139 +139 +143 +144 +148 +148 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +179 +183 +182 +185 +185 +188 +189 +189 +190 +190 +194 +195 +194 +196 +196 +198 +198 +198 +200 +200 +201 +201 +201 +202 +202 +204 +205 +205 +204 +204 +206 +207 +206 +207 +206 +207 +206 +206 +207 +206 +207 +207 +206 +207 +206 +205 +205 +204 +205 +204 +203 +202 +201 +200 +201 +201 +201 +199 +199 +197 +196 +196 +194 +194 +190 +191 +191 +188 +189 +185 +184 +185 +183 +183 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +161 +161 +161 +156 +157 +151 +151 +151 +147 +147 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +120 +116 +116 +115 +109 +109 +106 +106 +105 +100 +99 +100 +100 +100 +96 +95 +90 +90 +90 +86 +86 +82 +82 +79 +76 +76 +72 +72 +68 +69 +69 +64 +64 +59 +58 +59 +55 +55 +50 +51 +51 +47 +46 +43 +43 +43 +41 +41 +37 +36 +33 +33 +33 +31 +31 +27 +27 +27 +25 +26 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +13 +14 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +14 +14 +13 +13 +14 +14 +14 +13 +13 +13 +13 +13 +15 +15 +17 +17 +19 +19 +20 +21 +21 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +44 +43 +43 +47 +47 +51 +50 +50 +54 +54 +58 +59 +58 +64 +65 +68 +68 +68 +72 +72 +76 +76 +81 +82 +81 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +106 +106 +106 +110 +110 +116 +115 +116 +119 +120 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +175 +175 +175 +179 +179 +182 +182 +182 +184 +185 +189 +189 +189 +190 +190 +194 +195 +195 +196 +196 +199 +198 +198 +200 +200 +200 +201 +203 +202 +202 +204 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +206 +207 +204 +204 +205 +204 +204 +203 +202 +200 +200 +200 +200 +200 +198 +198 +199 +196 +197 +194 +195 +195 +190 +191 +188 +189 +189 +185 +184 +182 +183 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +170 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +152 +151 +147 +147 +143 +143 +140 +139 +139 +133 +133 +129 +129 +129 +125 +125 +125 +125 +125 +119 +119 +115 +115 +115 +109 +110 +106 +106 +103 +100 +99 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +73 +72 +72 +68 +68 +65 +64 +65 +58 +58 +55 +54 +50 +50 +50 +47 +46 +43 +43 +43 +41 +40 +37 +37 +37 +33 +33 +31 +31 +31 +28 +27 +25 +25 +25 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +13 +14 +14 +13 +14 +14 +14 +14 +14 +13 +14 +13 +14 +13 +13 +13 +14 +13 +13 +13 +13 +14 +14 +14 +13 +15 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +28 +27 +27 +31 +31 +33 +33 +33 +37 +36 +37 +37 +37 +41 +41 +42 +42 +43 +47 +47 +51 +51 +52 +54 +54 +58 +58 +64 +64 +65 +68 +68 +72 +72 +72 +76 +76 +76 +76 +76 +82 +82 +86 +87 +86 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +115 +119 +119 +119 +125 +125 +130 +129 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +150 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +174 +175 +179 +179 +182 +183 +182 +185 +185 +189 +188 +191 +191 +190 +194 +194 +197 +196 +196 +199 +199 +200 +200 +201 +201 +200 +202 +202 +202 +204 +205 +204 +204 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +206 +207 +204 +204 +204 +204 +204 +202 +203 +202 +200 +200 +200 +201 +201 +199 +199 +196 +196 +194 +195 +194 +190 +191 +188 +188 +188 +184 +185 +185 +184 +185 +183 +182 +179 +179 +179 +175 +175 +173 +173 +171 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +147 +147 +147 +143 +143 +139 +139 +140 +133 +134 +129 +130 +126 +125 +126 +120 +119 +115 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +72 +73 +73 +68 +68 +64 +64 +65 +59 +59 +54 +54 +54 +51 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +32 +31 +31 +27 +27 +24 +24 +25 +21 +21 +20 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +14 +14 +13 +14 +14 +14 +14 +14 +13 +13 +13 +13 +13 +13 +14 +13 +14 +14 +14 +14 +14 +13 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +25 +25 +25 +25 +25 +27 +27 +27 +31 +31 +33 +33 +34 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +51 +55 +55 +55 +54 +54 +59 +59 +65 +64 +64 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +109 +115 +115 +116 +119 +119 +125 +126 +129 +130 +129 +133 +133 +139 +139 +139 +143 +143 +147 +148 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +175 +175 +175 +179 +178 +183 +183 +183 +184 +184 +189 +188 +188 +190 +190 +195 +195 +194 +197 +196 +198 +198 +198 +200 +200 +200 +200 +203 +202 +202 +204 +205 +204 +204 +204 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +207 +204 +204 +204 +204 +202 +202 +202 +200 +200 +200 +201 +201 +199 +198 +198 +198 +198 +196 +196 +194 +195 +194 +191 +191 +188 +188 +186 +184 +184 +183 +182 +178 +178 +178 +175 +175 +173 +173 +173 +169 +169 +169 +168 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +148 +147 +147 +143 +143 +139 +139 +139 +134 +133 +129 +129 +129 +125 +125 +119 +120 +119 +116 +116 +110 +110 +110 +106 +105 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +69 +64 +64 +58 +58 +59 +55 +54 +50 +50 +47 +47 +47 +43 +43 +41 +41 +40 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +20 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +14 +14 +14 +14 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +14 +13 +14 +14 +14 +14 +13 +14 +13 +13 +13 +15 +15 +15 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +24 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +41 +41 +41 +43 +42 +46 +47 +47 +51 +51 +55 +54 +56 +59 +59 +64 +65 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +109 +110 +109 +115 +115 +119 +119 +119 +125 +125 +130 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +174 +175 +178 +179 +183 +183 +182 +185 +184 +188 +188 +189 +191 +190 +194 +195 +197 +196 +197 +198 +198 +200 +200 +200 +200 +201 +202 +203 +203 +204 +204 +205 +205 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +204 +204 +204 +204 +204 +205 +205 +204 +202 +202 +200 +200 +200 +200 +200 +198 +198 +200 +196 +196 +195 +194 +190 +190 +191 +188 +188 +184 +184 +185 +183 +182 +182 +182 +183 +178 +179 +175 +174 +175 +173 +173 +169 +169 +166 +164 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +130 +130 +125 +125 +119 +120 +116 +116 +116 +109 +110 +106 +106 +106 +100 +100 +96 +96 +96 +91 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +64 +64 +65 +59 +58 +55 +55 +55 +51 +50 +47 +46 +47 +42 +43 +40 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +26 +25 +26 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +14 +14 +14 +14 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +13 +14 +14 +14 +13 +14 +14 +14 +13 +13 +15 +15 +16 +17 +17 +19 +19 +20 +21 +21 +25 +25 +27 +27 +27 +31 +31 +31 +31 +31 +33 +33 +37 +37 +37 +40 +40 +42 +43 +45 +47 +46 +50 +51 +54 +54 +54 +59 +58 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +83 +86 +86 +90 +90 +95 +96 +96 +100 +100 +106 +106 +105 +110 +110 +116 +115 +116 +119 +119 +125 +125 +126 +130 +130 +133 +133 +133 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +168 +173 +173 +173 +174 +175 +179 +179 +179 +182 +183 +184 +184 +189 +188 +188 +191 +191 +195 +195 +194 +196 +197 +199 +198 +198 +200 +201 +201 +201 +200 +202 +202 +204 +204 +205 +204 +204 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +205 +205 +204 +202 +202 +203 +200 +201 +200 +200 +198 +198 +199 +196 +196 +195 +194 +194 +190 +190 +191 +190 +190 +189 +188 +184 +184 +185 +183 +183 +178 +178 +175 +175 +175 +173 +173 +168 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +140 +134 +133 +129 +129 +129 +126 +125 +119 +120 +120 +115 +115 +110 +109 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +72 +72 +69 +69 +68 +64 +64 +58 +58 +58 +55 +54 +50 +51 +50 +47 +47 +43 +43 +43 +41 +40 +37 +36 +34 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +22 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +14 +13 +14 +13 +13 +14 +14 +14 +14 +14 +14 +14 +14 +13 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +31 +31 +31 +31 +33 +33 +37 +37 +40 +41 +41 +43 +43 +47 +47 +47 +50 +50 +55 +54 +54 +59 +59 +64 +65 +65 +68 +68 +72 +72 +73 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +99 +99 +106 +105 +106 +110 +110 +116 +116 +115 +119 +119 +125 +126 +126 +129 +129 +133 +133 +138 +139 +140 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +183 +183 +183 +184 +185 +188 +188 +188 +190 +190 +194 +195 +195 +196 +196 +199 +198 +199 +200 +200 +200 +200 +201 +202 +202 +204 +204 +205 +204 +204 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +204 +204 +205 +205 +205 +202 +202 +200 +200 +200 +201 +200 +198 +199 +198 +196 +197 +196 +197 +196 +194 +194 +191 +190 +191 +188 +188 +184 +185 +183 +183 +183 +179 +178 +174 +174 +175 +172 +172 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +130 +129 +125 +125 +120 +119 +119 +115 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +95 +90 +90 +87 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +69 +68 +64 +64 +58 +58 +58 +54 +55 +51 +50 +51 +46 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +26 +21 +21 +21 +19 +19 +17 +17 +18 +15 +15 +16 +15 +14 +13 +13 +12 +13 +13 +14 +14 +14 +13 +14 +14 +13 +14 +13 +13 +14 +14 +13 +13 +14 +13 +14 +14 +13 +14 +14 +14 +14 +13 +13 +13 +14 +13 +12 +15 +15 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +46 +47 +47 +51 +50 +54 +54 +55 +58 +58 +64 +65 +68 +69 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +119 +119 +119 +119 +125 +126 +129 +129 +129 +133 +134 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +158 +161 +161 +164 +165 +169 +169 +169 +173 +173 +175 +175 +175 +178 +179 +179 +179 +179 +183 +182 +185 +184 +184 +189 +189 +191 +190 +191 +195 +194 +197 +196 +199 +198 +198 +201 +201 +200 +200 +200 +202 +203 +204 +204 +205 +204 +204 +206 +206 +207 +206 +206 +206 +207 +207 +207 +207 +206 +206 +206 +206 +206 +205 +205 +204 +204 +205 +203 +202 +203 +202 +202 +200 +200 +201 +200 +201 +198 +198 +196 +196 +197 +195 +194 +191 +190 +188 +189 +189 +185 +185 +183 +182 +183 +179 +179 +174 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +130 +130 +129 +125 +125 +119 +120 +119 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +73 +71 +68 +68 +68 +64 +64 +58 +58 +55 +54 +55 +51 +50 +47 +46 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +18 +19 +19 +17 +17 +15 +15 +15 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +14 +14 +14 +13 +14 +13 +14 +13 +14 +13 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +15 +15 +15 +17 +17 +18 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +36 +40 +41 +41 +43 +43 +47 +47 +50 +50 +51 +55 +55 +58 +58 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +115 +119 +120 +120 +125 +125 +130 +129 +129 +134 +133 +139 +139 +140 +143 +144 +147 +147 +151 +151 +151 +157 +157 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +179 +183 +183 +184 +185 +189 +188 +189 +190 +190 +194 +195 +196 +197 +197 +197 +197 +198 +198 +200 +200 +201 +201 +201 +202 +202 +203 +205 +205 +204 +204 +206 +207 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +204 +204 +204 +205 +203 +203 +202 +201 +201 +200 +201 +200 +199 +198 +196 +196 +196 +194 +195 +190 +191 +191 +189 +188 +184 +184 +184 +183 +182 +178 +179 +175 +174 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +134 +133 +130 +129 +129 +125 +125 +119 +119 +119 +115 +115 +110 +110 +109 +105 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +58 +58 +54 +54 +51 +50 +51 +47 +47 +43 +43 +43 +41 +41 +33 +33 +31 +31 +32 +27 +27 +25 +24 +25 +21 +21 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +14 +13 +13 +13 +14 +13 +13 +14 +14 +13 +14 +14 +14 +14 +13 +13 +13 +13 +14 +13 +13 +15 +15 +17 +17 +18 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +30 +33 +33 +36 +36 +37 +41 +40 +43 +43 +43 +47 +47 +47 +46 +46 +51 +50 +55 +54 +55 +58 +59 +64 +64 +64 +68 +68 +72 +73 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +105 +106 +110 +110 +116 +115 +116 +120 +120 +125 +126 +130 +129 +129 +133 +134 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +166 +169 +169 +173 +173 +176 +175 +175 +179 +179 +182 +183 +183 +184 +185 +185 +185 +184 +188 +188 +190 +191 +191 +194 +194 +196 +197 +197 +198 +199 +201 +200 +200 +200 +201 +203 +202 +205 +204 +205 +205 +204 +205 +204 +204 +207 +206 +206 +206 +207 +206 +206 +206 +206 +207 +206 +207 +206 +207 +204 +204 +205 +205 +205 +202 +202 +202 +201 +200 +200 +200 +201 +198 +199 +196 +197 +197 +196 +196 +195 +194 +190 +190 +191 +189 +188 +184 +185 +185 +182 +183 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +162 +157 +157 +152 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +126 +126 +120 +119 +115 +116 +116 +110 +110 +105 +105 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +77 +72 +73 +72 +68 +68 +64 +64 +64 +59 +58 +54 +54 +51 +51 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +23 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +14 +13 +12 +13 +13 +14 +13 +13 +14 +13 +13 +14 +14 +14 +13 +13 +14 +13 +14 +13 +13 +14 +14 +13 +13 +14 +13 +13 +14 +13 +12 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +40 +41 +41 +43 +43 +47 +47 +47 +51 +51 +55 +55 +59 +58 +59 +64 +64 +68 +68 +68 +72 +72 +76 +77 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +110 +110 +109 +115 +116 +119 +119 +120 +125 +125 +130 +130 +130 +133 +133 +139 +140 +139 +143 +143 +147 +147 +148 +151 +151 +157 +157 +160 +161 +161 +165 +165 +169 +169 +169 +173 +173 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +185 +184 +186 +188 +189 +191 +191 +194 +194 +195 +196 +196 +199 +198 +198 +200 +200 +200 +201 +200 +200 +200 +202 +203 +202 +204 +205 +205 +205 +205 +207 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +205 +204 +204 +204 +204 +202 +202 +203 +200 +200 +200 +200 +198 +198 +198 +197 +196 +194 +194 +195 +190 +191 +189 +188 +189 +185 +185 +183 +182 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +126 +119 +120 +115 +116 +117 +110 +110 +106 +106 +106 +100 +100 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +68 +69 +68 +64 +64 +59 +59 +58 +54 +55 +55 +54 +54 +50 +50 +46 +47 +46 +43 +42 +41 +40 +39 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +21 +21 +22 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +14 +14 +13 +14 +14 +14 +14 +14 +13 +13 +14 +13 +13 +14 +13 +14 +13 +13 +13 +13 +16 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +51 +54 +54 +54 +58 +58 +64 +64 +64 +68 +68 +72 +72 +73 +77 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +105 +106 +105 +110 +110 +116 +115 +116 +119 +119 +125 +125 +126 +129 +130 +134 +134 +139 +139 +139 +143 +144 +147 +147 +147 +151 +151 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +170 +173 +173 +175 +175 +178 +179 +179 +182 +183 +185 +184 +184 +188 +189 +189 +189 +188 +190 +190 +194 +195 +195 +196 +196 +198 +198 +199 +201 +201 +201 +200 +203 +202 +202 +205 +204 +205 +204 +204 +207 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +207 +206 +207 +204 +204 +204 +204 +204 +202 +202 +202 +200 +200 +200 +200 +200 +198 +198 +197 +196 +196 +194 +195 +191 +191 +190 +189 +189 +185 +185 +183 +182 +183 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +152 +147 +147 +143 +143 +140 +139 +139 +133 +133 +130 +129 +129 +126 +125 +119 +119 +120 +116 +115 +109 +109 +110 +106 +106 +100 +100 +101 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +72 +72 +72 +68 +68 +65 +64 +64 +59 +58 +54 +54 +52 +50 +50 +47 +48 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +20 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +14 +14 +14 +13 +14 +13 +14 +14 +14 +13 +13 +14 +14 +13 +14 +14 +14 +13 +13 +13 +13 +13 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +46 +51 +51 +55 +54 +55 +58 +59 +64 +64 +69 +68 +68 +72 +72 +76 +76 +77 +82 +82 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +116 +116 +115 +119 +119 +125 +125 +125 +130 +130 +133 +134 +134 +139 +140 +143 +143 +143 +147 +147 +151 +151 +153 +157 +157 +161 +161 +165 +164 +165 +169 +169 +173 +172 +173 +175 +175 +174 +175 +174 +179 +178 +182 +182 +182 +185 +185 +188 +188 +190 +191 +191 +195 +194 +196 +197 +197 +198 +198 +200 +200 +201 +200 +201 +203 +203 +203 +204 +204 +204 +204 +204 +206 +207 +207 +206 +207 +207 +207 +206 +206 +207 +206 +206 +206 +206 +205 +204 +204 +204 +204 +202 +202 +202 +201 +200 +200 +201 +200 +199 +198 +196 +196 +195 +194 +195 +191 +191 +188 +188 +188 +185 +184 +183 +183 +183 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +126 +126 +120 +119 +120 +116 +115 +110 +110 +106 +105 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +69 +66 +64 +65 +58 +58 +54 +55 +55 +51 +51 +47 +47 +47 +43 +43 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +28 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +16 +15 +15 +13 +13 +12 +13 +14 +14 +13 +14 +13 +14 +13 +13 +14 +13 +13 +14 +13 +14 +14 +14 +14 +13 +13 +14 +13 +14 +14 +14 +14 +14 +13 +12 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +36 +37 +37 +41 +41 +43 +43 +43 +46 +46 +51 +50 +55 +54 +55 +58 +58 +64 +64 +65 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +106 +106 +106 +109 +110 +115 +116 +115 +120 +119 +119 +119 +119 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +165 +165 +165 +169 +169 +173 +173 +172 +175 +175 +178 +179 +180 +182 +183 +185 +185 +188 +188 +189 +190 +190 +194 +194 +195 +196 +196 +198 +198 +198 +200 +200 +200 +201 +201 +203 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +204 +204 +204 +204 +204 +202 +203 +200 +200 +201 +200 +200 +199 +198 +196 +197 +196 +194 +194 +191 +191 +190 +188 +189 +184 +184 +184 +183 +183 +179 +179 +178 +175 +174 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +134 +129 +129 +125 +125 +119 +119 +119 +115 +116 +110 +110 +110 +106 +106 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +84 +82 +82 +76 +76 +72 +72 +72 +69 +68 +64 +64 +64 +58 +58 +58 +58 +59 +55 +55 +50 +51 +51 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +16 +13 +13 +13 +12 +13 +14 +13 +13 +13 +14 +13 +14 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +32 +33 +37 +36 +41 +41 +41 +43 +43 +47 +46 +47 +51 +50 +54 +54 +55 +59 +59 +64 +65 +64 +68 +68 +72 +72 +73 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +100 +100 +100 +106 +106 +110 +109 +110 +116 +116 +119 +119 +122 +126 +126 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +167 +169 +169 +173 +173 +175 +175 +175 +179 +179 +182 +183 +182 +184 +185 +189 +188 +189 +191 +190 +194 +194 +195 +196 +197 +198 +198 +199 +200 +201 +200 +200 +202 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +205 +204 +204 +204 +204 +202 +202 +202 +200 +200 +200 +200 +200 +199 +199 +196 +196 +196 +194 +195 +191 +191 +190 +188 +189 +184 +184 +182 +183 +182 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +140 +139 +139 +133 +133 +130 +130 +129 +125 +125 +120 +120 +119 +116 +116 +110 +110 +110 +106 +106 +100 +100 +98 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +73 +72 +72 +72 +72 +68 +68 +64 +64 +65 +59 +59 +54 +54 +51 +51 +51 +47 +46 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +17 +17 +17 +16 +15 +15 +15 +15 +13 +13 +12 +12 +13 +13 +13 +13 +14 +14 +14 +13 +14 +14 +14 +14 +14 +13 +13 +14 +14 +14 +14 +14 +13 +13 +14 +13 +14 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +26 +32 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +51 +50 +55 +54 +58 +59 +60 +65 +64 +68 +68 +72 +72 +72 +76 +76 +83 +82 +82 +86 +86 +87 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +115 +120 +119 +120 +125 +125 +129 +129 +130 +133 +134 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +153 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +182 +183 +185 +185 +185 +188 +189 +190 +191 +194 +195 +195 +197 +196 +199 +198 +198 +200 +200 +200 +200 +200 +202 +203 +204 +204 +204 +205 +205 +206 +207 +207 +207 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +207 +205 +205 +204 +204 +204 +203 +202 +200 +201 +201 +200 +200 +198 +198 +199 +197 +196 +195 +195 +191 +191 +191 +189 +188 +185 +184 +185 +183 +183 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +166 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +134 +133 +129 +129 +125 +125 +125 +119 +119 +116 +115 +113 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +65 +64 +64 +58 +58 +54 +54 +54 +50 +51 +47 +47 +47 +43 +42 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +16 +15 +13 +13 +13 +12 +13 +13 +13 +13 +14 +14 +14 +14 +13 +14 +14 +13 +14 +14 +14 +13 +14 +14 +13 +13 +14 +14 +13 +13 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +22 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +40 +41 +41 +43 +43 +47 +46 +47 +51 +51 +54 +55 +58 +58 +58 +65 +64 +68 +68 +68 +72 +72 +72 +72 +72 +76 +77 +82 +82 +82 +86 +86 +90 +90 +92 +96 +96 +100 +100 +105 +106 +106 +110 +110 +116 +115 +116 +119 +120 +120 +119 +119 +125 +125 +129 +129 +130 +133 +133 +139 +139 +143 +143 +143 +148 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +164 +169 +169 +169 +173 +173 +175 +175 +175 +178 +179 +183 +183 +184 +185 +185 +189 +189 +190 +191 +191 +195 +195 +197 +196 +197 +199 +199 +201 +200 +201 +201 +201 +202 +202 +203 +204 +204 +205 +204 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +204 +204 +204 +204 +205 +202 +202 +203 +201 +200 +200 +200 +199 +198 +199 +197 +196 +195 +194 +194 +191 +191 +188 +188 +189 +184 +185 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +134 +129 +129 +125 +126 +120 +119 +119 +116 +116 +110 +110 +110 +106 +105 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +84 +82 +82 +76 +76 +72 +72 +72 +69 +68 +64 +64 +64 +59 +58 +54 +54 +55 +50 +51 +47 +47 +47 +43 +43 +40 +41 +40 +37 +37 +33 +32 +31 +31 +31 +27 +27 +25 +26 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +13 +13 +13 +14 +14 +14 +14 +14 +14 +14 +14 +14 +13 +13 +14 +14 +14 +14 +14 +13 +13 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +26 +27 +27 +31 +31 +33 +33 +34 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +50 +50 +55 +54 +54 +55 +55 +59 +58 +64 +64 +65 +68 +69 +72 +73 +74 +77 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +100 +100 +100 +106 +106 +110 +109 +110 +115 +115 +120 +120 +125 +125 +125 +129 +129 +133 +134 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +168 +169 +172 +173 +173 +175 +175 +179 +178 +179 +182 +182 +184 +185 +184 +189 +188 +191 +191 +191 +194 +194 +196 +197 +196 +199 +199 +201 +200 +201 +200 +201 +203 +202 +204 +205 +204 +205 +204 +207 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +206 +207 +206 +207 +204 +204 +204 +204 +204 +202 +202 +200 +200 +200 +201 +200 +198 +199 +199 +196 +197 +195 +194 +195 +190 +191 +189 +188 +189 +184 +184 +183 +183 +182 +182 +183 +179 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +149 +147 +143 +143 +143 +139 +140 +139 +140 +139 +133 +133 +133 +129 +129 +130 +129 +129 +125 +125 +119 +119 +120 +115 +115 +109 +110 +106 +106 +106 +101 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +69 +65 +64 +58 +59 +56 +54 +54 +50 +50 +47 +47 +46 +43 +42 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +20 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +13 +14 +13 +14 +13 +13 +14 +14 +14 +13 +14 +14 +13 +13 +14 +14 +14 +14 +14 +14 +13 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +37 +37 +37 +41 +41 +42 +43 +43 +47 +47 +51 +50 +50 +50 +50 +54 +54 +58 +58 +58 +65 +64 +68 +68 +69 +72 +72 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +92 +96 +95 +100 +100 +106 +106 +106 +110 +110 +116 +116 +115 +119 +119 +125 +125 +125 +129 +129 +133 +133 +134 +139 +139 +143 +143 +147 +148 +147 +151 +151 +157 +156 +157 +161 +161 +161 +161 +161 +165 +164 +169 +168 +169 +173 +173 +174 +175 +175 +179 +179 +183 +183 +184 +185 +185 +189 +188 +191 +190 +190 +195 +195 +197 +196 +196 +198 +198 +200 +200 +200 +201 +201 +202 +203 +202 +204 +204 +204 +204 +207 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +207 +206 +204 +204 +204 +204 +204 +202 +202 +203 +200 +200 +201 +201 +198 +198 +198 +196 +197 +194 +194 +195 +191 +190 +191 +191 +191 +188 +189 +184 +184 +184 +183 +182 +179 +179 +176 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +134 +133 +133 +129 +129 +125 +125 +125 +119 +120 +116 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +95 +96 +90 +90 +86 +85 +82 +82 +82 +76 +76 +72 +72 +72 +68 +64 +64 +64 +65 +59 +58 +54 +54 +55 +51 +51 +47 +47 +47 +43 +43 +41 +40 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +14 +14 +13 +13 +14 +13 +14 +14 +13 +14 +14 +14 +13 +14 +13 +13 +14 +13 +14 +14 +14 +14 +13 +13 +15 +15 +15 +17 +17 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +37 +37 +37 +41 +41 +42 +43 +43 +47 +47 +46 +46 +47 +50 +51 +55 +55 +55 +58 +58 +64 +65 +66 +68 +68 +73 +73 +76 +76 +76 +83 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +119 +120 +119 +125 +126 +129 +129 +130 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +183 +184 +185 +189 +189 +189 +191 +191 +194 +194 +195 +196 +197 +198 +198 +201 +200 +201 +201 +200 +200 +201 +201 +202 +202 +204 +204 +204 +204 +204 +206 +206 +207 +206 +206 +206 +206 +207 +206 +207 +206 +207 +207 +206 +206 +205 +205 +204 +204 +204 +203 +203 +202 +202 +202 +200 +200 +200 +200 +200 +198 +199 +196 +197 +197 +195 +194 +191 +190 +188 +189 +188 +184 +185 +183 +183 +183 +178 +179 +179 +179 +179 +174 +175 +172 +173 +173 +169 +169 +165 +165 +162 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +140 +139 +133 +133 +133 +129 +129 +125 +126 +126 +119 +119 +116 +116 +109 +110 +110 +105 +106 +100 +100 +99 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +65 +64 +58 +58 +59 +54 +54 +50 +51 +51 +47 +47 +43 +43 +43 +40 +41 +37 +38 +37 +33 +33 +31 +31 +31 +27 +27 +25 +24 +22 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +14 +14 +14 +13 +13 +14 +14 +14 +14 +13 +13 +14 +14 +14 +13 +14 +13 +14 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +14 +13 +12 +15 +15 +16 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +31 +31 +31 +32 +33 +37 +37 +37 +41 +40 +43 +43 +44 +47 +47 +50 +50 +54 +55 +54 +59 +59 +64 +64 +64 +68 +69 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +95 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +115 +116 +119 +119 +125 +125 +125 +129 +129 +133 +133 +134 +140 +139 +143 +142 +146 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +179 +183 +183 +185 +185 +188 +188 +188 +190 +191 +195 +195 +194 +196 +196 +199 +198 +198 +201 +200 +201 +201 +200 +202 +202 +204 +204 +205 +204 +204 +207 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +205 +205 +205 +204 +205 +202 +202 +203 +200 +201 +200 +200 +198 +198 +198 +196 +197 +194 +194 +194 +190 +190 +190 +191 +190 +189 +188 +184 +185 +185 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +140 +139 +133 +133 +129 +129 +129 +126 +125 +119 +119 +120 +115 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +72 +73 +68 +68 +68 +65 +64 +58 +59 +58 +54 +54 +50 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +16 +13 +13 +12 +13 +14 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +14 +14 +14 +14 +14 +14 +13 +14 +14 +14 +13 +14 +14 +14 +14 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +20 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +32 +33 +33 +37 +37 +40 +41 +40 +43 +43 +47 +47 +47 +51 +51 +54 +54 +55 +59 +58 +64 +64 +65 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +109 +116 +116 +116 +119 +120 +125 +126 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +172 +174 +175 +175 +179 +179 +182 +183 +182 +185 +184 +189 +188 +188 +191 +191 +194 +194 +195 +197 +197 +198 +199 +199 +200 +200 +201 +200 +202 +202 +202 +204 +204 +204 +205 +204 +206 +206 +206 +206 +207 +206 +207 +207 +206 +207 +207 +206 +206 +206 +207 +206 +206 +204 +204 +205 +204 +205 +202 +202 +200 +201 +200 +200 +200 +200 +201 +200 +198 +198 +196 +196 +197 +195 +195 +190 +190 +189 +188 +189 +185 +185 +182 +183 +183 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +134 +129 +129 +129 +125 +125 +120 +120 +119 +116 +116 +110 +110 +110 +106 +106 +100 +99 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +77 +76 +76 +73 +72 +68 +69 +68 +65 +64 +58 +58 +59 +54 +54 +50 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +24 +25 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +12 +13 +13 +13 +13 +13 +14 +14 +14 +14 +14 +14 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +13 +14 +14 +14 +14 +13 +13 +12 +15 +15 +17 +17 +18 +19 +18 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +36 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +54 +54 +55 +59 +58 +59 +58 +58 +65 +64 +68 +69 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +116 +115 +115 +116 +119 +119 +125 +125 +125 +129 +129 +133 +133 +134 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +182 +183 +185 +185 +189 +188 +189 +191 +190 +194 +194 +195 +197 +197 +198 +198 +198 +200 +200 +200 +201 +201 +202 +202 +204 +204 +204 +205 +204 +206 +206 +206 +206 +206 +207 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +205 +205 +205 +202 +203 +201 +201 +200 +201 +200 +198 +198 +198 +196 +197 +195 +195 +194 +191 +190 +189 +189 +189 +184 +185 +183 +183 +183 +179 +179 +175 +175 +173 +172 +173 +169 +169 +164 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +140 +133 +133 +129 +129 +126 +126 +126 +119 +119 +115 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +77 +73 +72 +72 +68 +68 +64 +65 +65 +59 +58 +58 +58 +58 +55 +54 +51 +51 +51 +47 +46 +43 +43 +44 +41 +41 +37 +38 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +12 +13 +13 +14 +13 +13 +14 +13 +14 +13 +14 +13 +13 +14 +14 +13 +14 +13 +13 +13 +13 +14 +14 +13 +14 +14 +13 +13 +14 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +26 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +51 +54 +54 +54 +59 +59 +64 +64 +65 +68 +68 +72 +72 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +115 +120 +119 +126 +126 +130 +129 +129 +134 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +166 +169 +169 +173 +173 +176 +175 +175 +178 +179 +183 +182 +182 +184 +184 +185 +185 +185 +189 +188 +190 +190 +194 +194 +196 +197 +196 +198 +199 +201 +200 +200 +200 +200 +203 +202 +204 +205 +204 +204 +204 +204 +204 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +207 +206 +204 +204 +205 +204 +204 +202 +203 +202 +201 +200 +200 +200 +201 +198 +198 +197 +197 +197 +195 +195 +190 +190 +190 +188 +189 +185 +184 +183 +182 +182 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +126 +125 +120 +120 +119 +116 +116 +110 +110 +109 +106 +106 +100 +100 +97 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +73 +68 +68 +68 +64 +64 +59 +58 +59 +55 +54 +50 +51 +47 +47 +47 +43 +43 +41 +41 +41 +36 +37 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +23 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +12 +13 +13 +14 +13 +13 +13 +14 +13 +14 +14 +13 +14 +14 +13 +14 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +14 +13 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +50 +55 +55 +58 +58 +59 +64 +64 +68 +69 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +110 +110 +110 +116 +116 +120 +120 +119 +126 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +148 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +172 +173 +173 +173 +175 +176 +179 +178 +179 +182 +182 +184 +185 +185 +188 +188 +191 +190 +194 +194 +194 +196 +196 +198 +199 +198 +200 +200 +201 +201 +200 +200 +201 +202 +202 +202 +204 +204 +205 +204 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +204 +204 +204 +205 +204 +202 +202 +203 +201 +201 +200 +200 +199 +199 +199 +196 +196 +194 +195 +194 +190 +190 +189 +189 +189 +185 +185 +183 +182 +183 +179 +179 +175 +175 +175 +173 +173 +169 +168 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +148 +147 +147 +143 +143 +139 +139 +139 +133 +133 +130 +129 +130 +125 +125 +119 +120 +116 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +91 +90 +86 +86 +86 +82 +82 +76 +76 +77 +72 +72 +69 +69 +65 +65 +65 +59 +59 +55 +55 +55 +51 +50 +50 +51 +51 +47 +46 +42 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +27 +27 +26 +25 +25 +21 +21 +21 +19 +19 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +14 +12 +13 +13 +13 +14 +14 +14 +14 +13 +13 +14 +14 +13 +14 +14 +14 +14 +14 +14 +13 +14 +14 +13 +13 +14 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +36 +41 +41 +43 +43 +43 +47 +47 +51 +51 +50 +54 +54 +59 +59 +59 +64 +64 +68 +68 +68 +72 +72 +76 +76 +77 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +115 +120 +119 +120 +125 +125 +129 +129 +130 +133 +133 +139 +139 +144 +143 +143 +147 +147 +151 +151 +151 +157 +157 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +183 +183 +183 +185 +184 +189 +189 +188 +190 +191 +191 +190 +191 +195 +194 +197 +197 +197 +198 +198 +201 +200 +201 +201 +201 +202 +202 +204 +204 +205 +204 +204 +204 +204 +204 +207 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +204 +204 +205 +204 +204 +202 +202 +202 +200 +200 +201 +200 +200 +198 +199 +197 +196 +197 +194 +195 +190 +190 +190 +189 +189 +184 +185 +182 +182 +182 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +140 +139 +139 +133 +134 +130 +129 +129 +125 +125 +126 +125 +126 +120 +120 +115 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +90 +90 +90 +86 +86 +86 +86 +86 +82 +82 +82 +82 +82 +76 +76 +73 +72 +72 +68 +68 +64 +64 +59 +59 +58 +54 +55 +50 +51 +50 +47 +47 +43 +43 +43 +41 +41 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +14 +13 +14 +14 +13 +13 +14 +13 +13 +13 +14 +14 +14 +13 +13 +14 +14 +14 +14 +14 +14 +13 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +36 +37 +40 +41 +41 +43 +43 +47 +46 +47 +50 +50 +54 +55 +59 +59 +59 +64 +64 +64 +64 +64 +69 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +91 +96 +96 +100 +100 +105 +106 +106 +110 +110 +116 +115 +115 +119 +120 +119 +119 +119 +125 +125 +129 +129 +130 +133 +133 +139 +139 +141 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +165 +165 +165 +168 +169 +173 +173 +173 +175 +175 +179 +179 +180 +182 +183 +184 +184 +188 +188 +189 +191 +190 +194 +194 +194 +196 +197 +199 +198 +198 +200 +200 +200 +200 +201 +202 +202 +204 +204 +204 +205 +204 +207 +207 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +205 +204 +205 +203 +202 +200 +200 +201 +201 +201 +198 +198 +198 +198 +198 +197 +197 +195 +194 +195 +190 +191 +189 +188 +188 +184 +185 +183 +183 +183 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +140 +141 +133 +133 +130 +129 +125 +125 +125 +120 +119 +115 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +84 +82 +82 +76 +77 +72 +72 +72 +68 +69 +64 +64 +65 +58 +58 +58 +58 +59 +54 +54 +50 +50 +51 +47 +47 +43 +43 +42 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +18 +15 +15 +15 +15 +14 +13 +13 +12 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +14 +13 +14 +14 +14 +13 +14 +14 +13 +14 +13 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +24 +25 +25 +27 +28 +31 +31 +31 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +50 +51 +54 +54 +53 +58 +58 +65 +64 +65 +68 +69 +73 +73 +72 +76 +76 +82 +82 +87 +86 +86 +90 +90 +96 +96 +96 +100 +100 +105 +105 +106 +110 +110 +115 +115 +116 +119 +119 +125 +126 +126 +129 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +147 +151 +151 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +170 +173 +173 +174 +175 +179 +178 +179 +183 +183 +185 +185 +185 +189 +188 +190 +190 +190 +195 +195 +197 +196 +197 +198 +199 +201 +201 +201 +200 +200 +203 +202 +204 +204 +205 +205 +204 +206 +206 +207 +207 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +205 +205 +205 +204 +202 +202 +200 +200 +201 +200 +200 +198 +199 +198 +196 +196 +195 +194 +194 +191 +191 +188 +188 +188 +185 +185 +183 +182 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +164 +161 +161 +157 +157 +157 +151 +151 +147 +147 +148 +143 +143 +139 +139 +133 +133 +134 +130 +129 +125 +126 +126 +120 +119 +116 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +93 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +68 +68 +68 +64 +64 +59 +59 +59 +55 +55 +51 +51 +47 +46 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +13 +13 +13 +13 +13 +12 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +24 +26 +27 +27 +31 +31 +34 +33 +33 +37 +37 +41 +41 +40 +43 +43 +47 +47 +47 +50 +51 +55 +54 +54 +58 +58 +64 +64 +66 +68 +68 +73 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +91 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +117 +119 +120 +126 +126 +130 +129 +130 +134 +134 +139 +140 +139 +143 +143 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +163 +165 +165 +169 +169 +173 +172 +173 +175 +175 +179 +179 +179 +183 +183 +185 +184 +184 +189 +189 +190 +191 +191 +195 +195 +196 +196 +197 +199 +199 +200 +201 +200 +201 +200 +202 +203 +204 +204 +204 +205 +205 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +204 +205 +204 +204 +204 +202 +202 +200 +201 +201 +200 +200 +198 +199 +198 +196 +197 +195 +194 +195 +190 +191 +189 +189 +185 +185 +185 +183 +183 +178 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +129 +130 +130 +126 +125 +119 +119 +120 +116 +115 +110 +110 +108 +105 +106 +100 +100 +96 +96 +96 +89 +90 +86 +86 +86 +82 +82 +82 +82 +82 +76 +76 +72 +72 +73 +69 +68 +64 +64 +61 +58 +59 +55 +54 +50 +50 +50 +46 +47 +44 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +16 +15 +15 +15 +13 +13 +12 +13 +14 +13 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +14 +13 +14 +14 +14 +13 +14 +14 +14 +13 +13 +13 +13 +12 +15 +15 +17 +17 +18 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +30 +33 +33 +37 +37 +37 +40 +40 +43 +43 +43 +47 +47 +50 +51 +51 +54 +54 +59 +59 +65 +64 +64 +68 +68 +72 +72 +72 +76 +76 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +97 +100 +100 +106 +106 +109 +110 +110 +116 +116 +120 +120 +119 +125 +125 +125 +125 +125 +130 +129 +134 +134 +134 +140 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +156 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +179 +182 +182 +185 +185 +186 +189 +188 +191 +190 +194 +194 +194 +197 +196 +199 +199 +198 +200 +200 +200 +200 +200 +202 +203 +204 +205 +204 +204 +205 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +205 +204 +205 +204 +204 +202 +202 +200 +200 +200 +200 +201 +199 +198 +197 +196 +196 +194 +194 +191 +190 +190 +188 +188 +185 +184 +184 +182 +183 +178 +179 +179 +175 +175 +173 +173 +174 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +147 +147 +147 +143 +143 +139 +139 +139 +133 +134 +130 +129 +127 +125 +126 +120 +120 +115 +116 +116 +109 +109 +106 +106 +107 +100 +100 +100 +100 +100 +95 +96 +90 +90 +90 +86 +86 +82 +82 +79 +76 +76 +72 +72 +68 +68 +69 +64 +65 +58 +59 +59 +55 +55 +51 +51 +50 +47 +47 +43 +43 +43 +41 +40 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +14 +14 +14 +14 +14 +14 +14 +13 +13 +13 +14 +13 +13 +14 +13 +14 +13 +13 +13 +13 +14 +13 +13 +14 +13 +16 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +36 +37 +38 +41 +41 +43 +43 +48 +47 +46 +51 +50 +54 +54 +54 +59 +59 +59 +59 +59 +64 +64 +68 +68 +68 +73 +72 +77 +77 +77 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +106 +106 +106 +110 +110 +116 +116 +116 +119 +119 +125 +125 +129 +129 +130 +133 +133 +138 +139 +139 +143 +143 +147 +147 +147 +151 +151 +156 +157 +157 +161 +165 +165 +165 +165 +169 +169 +172 +173 +175 +175 +175 +178 +178 +183 +182 +183 +185 +185 +189 +188 +189 +190 +190 +194 +194 +195 +196 +196 +198 +198 +198 +200 +200 +201 +201 +203 +202 +202 +205 +205 +204 +204 +204 +206 +207 +207 +206 +206 +206 +206 +207 +207 +206 +207 +206 +206 +206 +206 +206 +205 +204 +204 +203 +204 +202 +201 +201 +200 +200 +200 +198 +199 +197 +197 +197 +195 +195 +191 +190 +191 +188 +189 +185 +185 +184 +182 +183 +178 +179 +176 +175 +175 +173 +173 +169 +169 +169 +165 +165 +165 +165 +165 +161 +161 +157 +157 +157 +152 +151 +147 +147 +145 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +125 +119 +120 +119 +119 +120 +115 +115 +110 +110 +110 +106 +106 +100 +100 +98 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +73 +68 +68 +68 +65 +65 +59 +59 +59 +55 +55 +50 +50 +47 +46 +47 +42 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +14 +13 +14 +14 +13 +13 +14 +14 +13 +14 +14 +14 +13 +13 +14 +14 +14 +13 +14 +13 +14 +13 +13 +12 +16 +15 +17 +17 +17 +19 +19 +21 +21 +22 +25 +25 +27 +27 +32 +31 +31 +33 +33 +37 +37 +37 +41 +40 +41 +41 +41 +43 +42 +47 +47 +47 +51 +51 +55 +55 +55 +59 +59 +65 +64 +68 +68 +68 +72 +73 +76 +76 +76 +82 +82 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +102 +106 +106 +110 +110 +115 +116 +116 +119 +120 +125 +125 +125 +130 +129 +133 +133 +133 +140 +139 +143 +143 +143 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +184 +184 +184 +188 +188 +191 +190 +194 +194 +195 +197 +197 +198 +198 +199 +201 +201 +200 +201 +200 +202 +202 +204 +205 +204 +204 +204 +206 +206 +207 +206 +207 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +204 +205 +205 +204 +204 +202 +202 +200 +200 +200 +200 +200 +198 +199 +200 +196 +196 +195 +194 +190 +191 +190 +189 +189 +185 +185 +184 +183 +183 +183 +183 +182 +179 +179 +174 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +126 +120 +119 +120 +116 +115 +109 +110 +109 +106 +105 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +69 +69 +68 +65 +64 +58 +58 +59 +54 +55 +51 +51 +51 +47 +47 +42 +43 +43 +41 +41 +37 +37 +37 +33 +32 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +12 +13 +13 +13 +14 +14 +13 +14 +13 +14 +14 +14 +13 +13 +14 +13 +13 +13 +14 +14 +14 +14 +13 +13 +14 +14 +14 +13 +14 +13 +13 +13 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +40 +41 +41 +43 +43 +47 +46 +50 +50 +51 +55 +55 +58 +58 +58 +64 +64 +64 +64 +64 +68 +69 +72 +72 +73 +76 +77 +82 +82 +86 +86 +85 +90 +90 +96 +96 +96 +100 +100 +106 +106 +105 +110 +110 +116 +116 +116 +119 +120 +125 +125 +126 +129 +130 +133 +133 +139 +139 +139 +144 +143 +147 +147 +148 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +183 +183 +182 +184 +184 +188 +188 +188 +191 +190 +195 +195 +194 +196 +197 +198 +199 +198 +200 +201 +200 +201 +201 +202 +203 +204 +205 +205 +204 +205 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +207 +207 +207 +204 +204 +204 +204 +204 +202 +202 +200 +201 +200 +201 +200 +198 +198 +197 +196 +196 +194 +194 +194 +194 +194 +190 +191 +188 +188 +189 +184 +184 +183 +183 +183 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +140 +139 +139 +133 +133 +129 +129 +129 +126 +126 +119 +119 +120 +115 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +87 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +65 +64 +59 +59 +58 +55 +54 +50 +50 +51 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +32 +33 +31 +30 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +13 +14 +14 +13 +14 +14 +13 +14 +14 +14 +14 +13 +14 +14 +14 +13 +14 +14 +14 +14 +13 +13 +14 +14 +13 +14 +13 +13 +15 +15 +15 +17 +17 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +26 +28 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +47 +47 +47 +51 +51 +55 +55 +55 +58 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +85 +86 +86 +90 +90 +95 +96 +96 +100 +100 +106 +105 +106 +110 +110 +116 +116 +119 +119 +119 +125 +126 +130 +129 +130 +133 +133 +139 +139 +139 +143 +143 +147 +148 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +169 +169 +168 +173 +173 +174 +174 +175 +179 +179 +183 +183 +183 +185 +184 +189 +188 +188 +191 +191 +194 +195 +195 +196 +196 +199 +198 +201 +201 +201 +200 +200 +202 +202 +202 +204 +205 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +204 +204 +205 +204 +204 +202 +202 +202 +200 +201 +200 +200 +200 +201 +201 +198 +198 +198 +196 +196 +194 +195 +192 +191 +190 +188 +188 +185 +184 +184 +183 +183 +179 +178 +179 +175 +175 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +140 +133 +133 +129 +130 +129 +125 +126 +120 +119 +120 +115 +115 +109 +110 +106 +106 +106 +100 +100 +100 +100 +100 +96 +96 +90 +90 +91 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +69 +68 +64 +64 +59 +59 +59 +54 +54 +50 +50 +51 +47 +47 +42 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +22 +21 +21 +19 +19 +19 +19 +19 +17 +17 +14 +16 +15 +15 +15 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +14 +13 +14 +14 +13 +13 +14 +14 +13 +14 +14 +13 +13 +13 +14 +14 +14 +14 +13 +13 +14 +13 +15 +15 +16 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +42 +46 +47 +46 +50 +51 +54 +55 +54 +58 +59 +64 +64 +65 +69 +68 +72 +72 +72 +76 +76 +82 +82 +83 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +109 +110 +116 +115 +115 +119 +120 +126 +126 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +179 +182 +183 +184 +185 +189 +189 +189 +190 +190 +194 +195 +194 +196 +196 +198 +198 +199 +200 +200 +201 +200 +201 +202 +202 +204 +205 +205 +204 +205 +207 +206 +207 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +207 +206 +205 +204 +205 +205 +205 +202 +203 +203 +200 +200 +201 +200 +198 +198 +198 +196 +196 +194 +194 +195 +190 +190 +191 +191 +190 +189 +189 +185 +185 +185 +183 +183 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +144 +139 +139 +134 +133 +129 +129 +129 +126 +125 +119 +119 +120 +116 +115 +110 +110 +110 +106 +105 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +76 +76 +76 +72 +72 +69 +68 +68 +64 +64 +58 +58 +58 +54 +55 +51 +50 +51 +47 +47 +43 +43 +43 +41 +41 +37 +36 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +20 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +14 +13 +14 +14 +13 +14 +14 +14 +14 +14 +13 +13 +13 +14 +14 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +14 +14 +13 +15 +15 +15 +17 +17 +17 +18 +17 +19 +19 +21 +21 +21 +25 +25 +26 +27 +28 +31 +30 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +50 +51 +54 +55 +58 +58 +58 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +115 +119 +119 +125 +125 +125 +130 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +160 +161 +161 +165 +165 +169 +169 +172 +172 +173 +175 +175 +178 +178 +179 +183 +182 +185 +185 +184 +189 +189 +190 +191 +191 +194 +195 +197 +196 +196 +199 +198 +200 +200 +200 +200 +200 +202 +202 +204 +204 +205 +205 +204 +204 +205 +205 +206 +207 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +204 +205 +205 +204 +204 +202 +202 +202 +200 +200 +200 +201 +200 +200 +200 +199 +198 +198 +196 +197 +194 +194 +192 +190 +191 +188 +188 +184 +185 +185 +182 +182 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +162 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +126 +120 +120 +115 +116 +115 +110 +109 +106 +106 +100 +100 +99 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +69 +69 +64 +64 +65 +58 +58 +54 +54 +51 +50 +50 +47 +47 +43 +43 +43 +41 +41 +40 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +28 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +14 +14 +13 +14 +13 +13 +13 +14 +13 +14 +14 +13 +14 +13 +14 +13 +14 +13 +14 +13 +14 +14 +13 +13 +13 +13 +14 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +50 +50 +50 +54 +54 +58 +58 +58 +64 +64 +68 +68 +69 +72 +73 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +116 +119 +119 +119 +125 +126 +130 +129 +129 +133 +133 +139 +140 +139 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +183 +185 +185 +189 +188 +191 +190 +191 +195 +194 +197 +196 +196 +198 +198 +201 +200 +200 +200 +200 +202 +202 +203 +204 +204 +204 +204 +205 +207 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +204 +204 +204 +204 +205 +203 +202 +201 +201 +201 +201 +201 +199 +198 +196 +196 +197 +194 +194 +191 +189 +190 +188 +189 +185 +184 +184 +182 +182 +178 +179 +179 +175 +175 +173 +173 +168 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +130 +129 +125 +125 +120 +120 +119 +115 +116 +115 +115 +115 +109 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +73 +72 +72 +68 +68 +64 +64 +64 +58 +59 +54 +55 +55 +51 +50 +47 +47 +47 +43 +42 +41 +41 +41 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +13 +13 +14 +14 +13 +14 +14 +13 +13 +14 +14 +13 +14 +14 +14 +13 +13 +14 +14 +14 +13 +13 +13 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +36 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +51 +55 +54 +58 +59 +58 +65 +64 +68 +68 +68 +72 +73 +76 +76 +83 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +115 +120 +120 +120 +125 +125 +129 +129 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +170 +173 +173 +175 +175 +179 +179 +179 +183 +183 +185 +184 +184 +188 +188 +189 +188 +189 +190 +191 +194 +194 +194 +197 +197 +199 +198 +200 +201 +200 +200 +201 +203 +203 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +207 +206 +206 +207 +206 +206 +204 +204 +205 +204 +204 +203 +202 +200 +201 +201 +200 +201 +199 +198 +199 +197 +197 +195 +195 +195 +191 +191 +189 +189 +185 +185 +185 +182 +183 +179 +178 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +160 +161 +157 +157 +157 +151 +151 +147 +147 +144 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +125 +120 +119 +116 +116 +116 +110 +110 +106 +105 +107 +100 +100 +96 +96 +91 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +58 +58 +54 +54 +55 +51 +50 +47 +47 +43 +43 +43 +41 +41 +37 +36 +37 +33 +33 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +20 +19 +19 +17 +17 +15 +16 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +13 +14 +14 +14 +13 +14 +14 +13 +14 +13 +13 +13 +13 +14 +14 +14 +13 +14 +14 +14 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +24 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +42 +43 +42 +47 +47 +51 +51 +51 +55 +55 +58 +59 +64 +64 +65 +68 +69 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +116 +116 +115 +119 +120 +125 +126 +125 +130 +129 +129 +130 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +148 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +178 +178 +183 +183 +183 +185 +185 +188 +189 +189 +191 +191 +195 +195 +196 +197 +196 +199 +199 +200 +201 +201 +200 +200 +200 +200 +200 +202 +202 +204 +204 +204 +204 +205 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +205 +204 +204 +202 +203 +200 +200 +201 +200 +201 +198 +198 +197 +196 +197 +195 +194 +190 +190 +191 +189 +189 +185 +185 +185 +183 +183 +179 +179 +179 +175 +175 +172 +173 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +126 +125 +125 +120 +120 +115 +115 +109 +110 +110 +105 +106 +100 +100 +100 +96 +96 +90 +90 +89 +86 +86 +82 +82 +82 +76 +76 +72 +72 +75 +68 +68 +64 +64 +58 +58 +58 +55 +55 +51 +51 +51 +47 +47 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +14 +14 +13 +14 +13 +13 +13 +13 +14 +14 +13 +13 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +48 +47 +47 +51 +50 +55 +55 +55 +59 +58 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +115 +120 +120 +125 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +168 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +182 +185 +184 +188 +189 +189 +190 +191 +195 +194 +194 +196 +196 +196 +197 +196 +198 +198 +201 +200 +201 +200 +200 +203 +202 +204 +204 +205 +204 +204 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +206 +206 +204 +204 +205 +205 +205 +202 +202 +201 +201 +200 +201 +201 +200 +200 +200 +199 +198 +196 +196 +196 +194 +194 +190 +191 +190 +189 +189 +185 +185 +184 +182 +183 +178 +179 +175 +174 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +144 +140 +139 +133 +133 +130 +129 +129 +125 +125 +120 +119 +119 +115 +116 +110 +110 +110 +106 +106 +100 +100 +99 +96 +96 +90 +91 +90 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +69 +69 +65 +64 +65 +64 +64 +58 +58 +55 +55 +54 +50 +51 +47 +46 +45 +43 +43 +41 +41 +36 +37 +37 +33 +33 +32 +31 +31 +27 +27 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +13 +14 +13 +14 +13 +14 +14 +14 +14 +14 +14 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +36 +41 +40 +41 +43 +43 +47 +46 +47 +50 +50 +54 +54 +54 +58 +58 +64 +65 +65 +69 +68 +72 +72 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +115 +119 +119 +125 +126 +125 +129 +129 +133 +133 +133 +139 +140 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +162 +165 +165 +168 +169 +172 +173 +173 +175 +175 +179 +179 +179 +183 +183 +183 +183 +183 +185 +185 +188 +189 +189 +191 +190 +194 +194 +196 +196 +197 +198 +198 +201 +200 +200 +200 +200 +202 +202 +202 +204 +204 +205 +204 +204 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +202 +200 +200 +201 +200 +200 +199 +198 +196 +196 +196 +194 +195 +190 +190 +188 +188 +189 +185 +185 +182 +182 +182 +179 +179 +175 +175 +175 +173 +173 +169 +169 +168 +165 +165 +161 +161 +162 +157 +157 +151 +151 +148 +147 +147 +143 +144 +139 +139 +139 +133 +133 +129 +129 +130 +126 +125 +119 +120 +115 +115 +109 +110 +110 +106 +106 +100 +100 +95 +96 +96 +90 +90 +86 +86 +86 +82 +82 +82 +82 +82 +77 +76 +72 +72 +72 +68 +68 +64 +65 +61 +58 +59 +55 +54 +51 +51 +50 +47 +47 +43 +43 +43 +41 +41 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +26 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +14 +14 +13 +13 +14 +14 +13 +14 +13 +13 +14 +13 +13 +13 +13 +14 +13 +13 +15 +15 +16 +17 +17 +19 +19 +21 +22 +21 +25 +25 +27 +27 +27 +31 +31 +33 +32 +33 +36 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +51 +55 +54 +58 +58 +59 +64 +65 +68 +68 +68 +72 +72 +76 +76 +77 +82 +82 +86 +86 +86 +90 +90 +96 +96 +97 +100 +100 +106 +106 +110 +110 +110 +115 +116 +120 +120 +119 +125 +126 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +149 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +173 +173 +173 +175 +175 +179 +178 +179 +182 +183 +184 +185 +189 +189 +189 +191 +191 +194 +194 +194 +197 +196 +198 +198 +198 +200 +201 +201 +200 +200 +202 +203 +204 +204 +205 +205 +205 +206 +206 +206 +207 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +205 +204 +204 +205 +205 +203 +202 +200 +200 +201 +201 +200 +198 +198 +197 +197 +197 +195 +195 +190 +191 +190 +189 +188 +185 +184 +184 +182 +182 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +134 +129 +130 +125 +126 +127 +120 +120 +115 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +74 +72 +72 +68 +68 +64 +64 +65 +58 +59 +55 +54 +55 +51 +51 +50 +51 +51 +47 +47 +43 +43 +43 +41 +40 +37 +37 +35 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +16 +13 +13 +12 +13 +14 +14 +13 +14 +14 +13 +13 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +14 +14 +14 +14 +14 +14 +13 +13 +13 +16 +15 +17 +17 +19 +19 +19 +21 +21 +25 +24 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +36 +41 +41 +43 +43 +47 +47 +47 +50 +51 +54 +54 +54 +59 +59 +64 +65 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +97 +96 +96 +100 +100 +106 +106 +106 +109 +110 +116 +116 +115 +119 +120 +125 +126 +125 +129 +129 +133 +134 +136 +140 +140 +143 +144 +148 +147 +147 +151 +151 +157 +157 +158 +161 +161 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +174 +175 +174 +175 +175 +179 +179 +182 +183 +182 +185 +185 +188 +189 +189 +190 +191 +195 +194 +195 +196 +197 +198 +198 +199 +201 +201 +200 +201 +202 +202 +203 +204 +204 +204 +204 +204 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +205 +204 +204 +205 +203 +202 +202 +200 +200 +200 +200 +201 +198 +198 +196 +196 +196 +195 +194 +191 +191 +191 +189 +188 +184 +185 +185 +183 +182 +179 +179 +175 +175 +175 +173 +173 +169 +169 +168 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +144 +139 +139 +133 +133 +129 +130 +129 +125 +125 +119 +119 +119 +116 +115 +115 +115 +115 +110 +110 +106 +106 +105 +100 +100 +96 +96 +93 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +68 +68 +68 +64 +64 +58 +59 +58 +54 +54 +50 +50 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +13 +14 +14 +14 +13 +13 +14 +13 +13 +14 +14 +13 +14 +13 +13 +14 +14 +14 +13 +13 +14 +14 +13 +14 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +22 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +42 +43 +47 +47 +50 +51 +51 +54 +54 +58 +59 +59 +65 +65 +68 +69 +73 +72 +72 +76 +76 +82 +82 +82 +86 +87 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +107 +110 +110 +116 +115 +119 +120 +120 +126 +126 +129 +130 +130 +133 +133 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +154 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +172 +175 +175 +179 +179 +179 +183 +183 +185 +185 +185 +189 +189 +191 +190 +193 +195 +195 +197 +197 +198 +198 +199 +201 +200 +201 +200 +200 +202 +203 +205 +204 +204 +204 +204 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +205 +204 +205 +204 +203 +203 +200 +200 +201 +201 +201 +199 +199 +198 +197 +197 +194 +195 +191 +191 +190 +188 +189 +184 +184 +185 +183 +183 +179 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +166 +161 +161 +157 +157 +152 +151 +151 +147 +147 +143 +143 +143 +139 +139 +139 +140 +139 +133 +133 +129 +130 +130 +126 +126 +119 +119 +117 +115 +115 +110 +110 +106 +106 +106 +99 +100 +95 +96 +96 +90 +90 +90 +90 +90 +86 +86 +82 +82 +83 +76 +76 +72 +72 +69 +68 +68 +64 +64 +58 +58 +58 +54 +54 +51 +50 +51 +47 +47 +42 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +12 +14 +13 +13 +13 +13 +14 +13 +13 +14 +13 +14 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +50 +54 +55 +54 +58 +59 +64 +64 +64 +68 +68 +69 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +87 +86 +86 +90 +90 +95 +96 +96 +100 +100 +106 +106 +106 +110 +110 +110 +110 +110 +116 +116 +120 +119 +119 +125 +125 +130 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +168 +169 +169 +173 +173 +175 +175 +178 +179 +179 +183 +182 +184 +185 +185 +189 +189 +191 +191 +190 +194 +194 +197 +197 +196 +199 +199 +201 +201 +201 +200 +200 +203 +202 +204 +205 +205 +204 +205 +206 +206 +207 +206 +207 +207 +207 +206 +207 +206 +206 +207 +206 +206 +207 +204 +204 +204 +205 +205 +203 +203 +201 +201 +201 +201 +200 +199 +198 +199 +197 +197 +195 +194 +195 +190 +191 +189 +189 +188 +185 +185 +183 +183 +182 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +164 +161 +161 +161 +161 +161 +157 +157 +151 +152 +151 +147 +147 +143 +143 +141 +139 +139 +133 +134 +129 +129 +129 +125 +125 +120 +119 +119 +115 +115 +116 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +91 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +69 +68 +64 +65 +65 +59 +58 +54 +55 +55 +51 +50 +46 +47 +44 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +26 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +12 +13 +14 +14 +14 +14 +14 +13 +14 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +14 +14 +13 +14 +14 +13 +13 +14 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +47 +47 +47 +50 +51 +55 +55 +54 +58 +58 +64 +64 +66 +68 +68 +73 +72 +76 +76 +77 +82 +82 +86 +86 +86 +90 +90 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +115 +115 +115 +120 +120 +125 +125 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +165 +165 +169 +169 +169 +173 +173 +173 +173 +173 +175 +175 +175 +178 +179 +183 +182 +182 +184 +185 +188 +188 +189 +190 +190 +195 +194 +197 +196 +196 +198 +198 +200 +200 +200 +200 +201 +203 +203 +203 +204 +204 +204 +204 +204 +207 +206 +207 +207 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +205 +204 +204 +205 +204 +205 +204 +204 +202 +203 +200 +200 +200 +201 +201 +198 +198 +200 +196 +197 +194 +194 +191 +191 +190 +189 +188 +185 +184 +184 +183 +182 +183 +182 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +158 +157 +157 +151 +151 +151 +151 +151 +147 +147 +147 +147 +147 +143 +143 +139 +139 +139 +134 +133 +130 +130 +130 +125 +125 +119 +119 +116 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +59 +58 +58 +55 +55 +50 +50 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +24 +25 +21 +21 +21 +19 +18 +17 +17 +17 +15 +15 +15 +15 +16 +13 +13 +12 +13 +14 +13 +14 +13 +13 +13 +14 +13 +14 +13 +13 +14 +13 +13 +14 +13 +14 +14 +13 +14 +13 +13 +14 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +21 +21 +21 +25 +25 +27 +27 +28 +31 +31 +33 +33 +34 +37 +37 +40 +41 +42 +43 +43 +47 +47 +51 +51 +51 +54 +55 +54 +55 +55 +59 +58 +64 +64 +64 +68 +68 +72 +72 +74 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +116 +116 +120 +119 +126 +126 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +172 +175 +175 +175 +179 +178 +182 +183 +183 +185 +184 +189 +189 +189 +190 +191 +195 +195 +195 +196 +197 +199 +199 +199 +200 +201 +200 +200 +203 +202 +203 +205 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +207 +206 +206 +204 +204 +205 +204 +205 +202 +202 +200 +201 +201 +200 +201 +198 +198 +199 +197 +197 +195 +194 +194 +190 +190 +188 +188 +189 +185 +185 +182 +183 +178 +179 +179 +175 +175 +173 +173 +173 +169 +169 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +130 +125 +126 +120 +119 +119 +116 +115 +110 +109 +110 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +65 +65 +58 +58 +59 +54 +54 +50 +51 +47 +47 +47 +42 +43 +41 +41 +41 +36 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +14 +13 +14 +13 +14 +13 +13 +14 +14 +14 +14 +14 +14 +14 +13 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +15 +15 +16 +17 +17 +19 +19 +19 +21 +21 +25 +25 +26 +27 +27 +31 +31 +32 +33 +32 +37 +37 +41 +41 +41 +43 +43 +43 +43 +43 +47 +47 +51 +51 +51 +55 +54 +59 +58 +64 +64 +64 +68 +69 +72 +72 +72 +76 +76 +82 +83 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +115 +116 +115 +119 +119 +125 +125 +126 +129 +129 +133 +133 +134 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +166 +165 +165 +169 +169 +172 +173 +173 +175 +175 +175 +175 +175 +179 +178 +182 +183 +183 +185 +185 +189 +189 +189 +191 +190 +195 +194 +197 +197 +196 +199 +198 +201 +200 +200 +200 +200 +200 +200 +200 +202 +202 +204 +205 +205 +205 +204 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +207 +206 +205 +204 +204 +204 +204 +204 +204 +202 +202 +202 +200 +200 +200 +200 +201 +198 +199 +196 +197 +195 +195 +194 +191 +191 +189 +188 +188 +185 +184 +183 +182 +183 +178 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +156 +157 +151 +151 +147 +147 +147 +143 +143 +139 +140 +139 +133 +133 +130 +129 +130 +125 +125 +120 +119 +115 +116 +115 +109 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +85 +86 +82 +82 +77 +76 +76 +72 +72 +68 +68 +64 +64 +65 +59 +58 +54 +54 +55 +51 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +13 +14 +13 +13 +13 +14 +14 +14 +13 +13 +14 +14 +14 +13 +14 +14 +13 +13 +14 +14 +14 +13 +13 +14 +13 +13 +13 +13 +13 +15 +15 +17 +17 +19 +19 +19 +21 +22 +25 +25 +25 +27 +27 +27 +27 +27 +31 +31 +33 +34 +33 +37 +37 +41 +40 +43 +43 +42 +47 +47 +50 +51 +50 +54 +54 +59 +59 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +77 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +116 +120 +119 +119 +125 +125 +129 +130 +130 +133 +134 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +183 +182 +183 +184 +185 +188 +189 +189 +190 +190 +195 +194 +194 +196 +196 +199 +198 +199 +200 +200 +200 +200 +201 +202 +202 +205 +204 +204 +204 +204 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +207 +207 +207 +206 +204 +204 +204 +204 +205 +202 +202 +200 +201 +201 +201 +200 +198 +199 +198 +196 +196 +197 +197 +196 +194 +194 +190 +191 +191 +188 +188 +184 +184 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +139 +140 +139 +133 +133 +129 +130 +130 +125 +126 +119 +119 +120 +116 +115 +110 +110 +110 +106 +106 +100 +100 +99 +96 +96 +90 +90 +87 +86 +82 +82 +76 +77 +76 +72 +72 +72 +72 +72 +69 +68 +64 +65 +65 +58 +59 +55 +54 +55 +51 +51 +47 +46 +43 +42 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +24 +25 +25 +21 +21 +19 +19 +20 +17 +17 +15 +16 +16 +15 +15 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +14 +13 +14 +13 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +13 +13 +15 +15 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +26 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +46 +47 +51 +51 +54 +55 +55 +59 +58 +64 +65 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +95 +96 +96 +100 +100 +105 +105 +106 +110 +110 +115 +116 +120 +119 +120 +125 +125 +130 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +174 +175 +179 +179 +183 +183 +183 +184 +185 +189 +189 +189 +190 +191 +194 +194 +195 +196 +196 +198 +198 +200 +200 +200 +200 +201 +202 +202 +202 +204 +204 +205 +205 +204 +204 +204 +207 +207 +207 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +205 +204 +205 +204 +204 +202 +202 +202 +202 +203 +200 +200 +200 +200 +200 +198 +198 +196 +197 +195 +194 +195 +191 +190 +188 +188 +188 +184 +184 +183 +183 +182 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +158 +157 +157 +151 +151 +147 +147 +147 +143 +143 +144 +143 +143 +139 +139 +133 +133 +133 +130 +129 +125 +125 +125 +120 +119 +115 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +59 +58 +58 +54 +54 +55 +54 +55 +51 +51 +47 +47 +47 +43 +42 +41 +41 +40 +37 +37 +33 +33 +33 +31 +31 +27 +27 +26 +25 +25 +21 +21 +19 +19 +19 +17 +17 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +12 +14 +13 +13 +13 +14 +14 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +13 +13 +13 +13 +14 +13 +14 +14 +13 +14 +13 +12 +15 +15 +17 +18 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +42 +43 +42 +47 +47 +50 +51 +51 +55 +54 +58 +58 +59 +64 +64 +68 +69 +69 +72 +72 +76 +76 +76 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +116 +119 +119 +120 +125 +125 +129 +129 +130 +133 +134 +139 +139 +144 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +176 +175 +175 +179 +178 +183 +183 +184 +189 +189 +190 +190 +190 +190 +191 +194 +195 +197 +196 +196 +198 +199 +200 +201 +200 +200 +201 +203 +203 +203 +204 +204 +204 +204 +206 +207 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +207 +206 +207 +206 +206 +206 +204 +204 +204 +205 +203 +202 +202 +201 +201 +200 +201 +200 +198 +198 +196 +196 +196 +195 +195 +190 +190 +191 +189 +189 +185 +184 +185 +182 +182 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +134 +133 +130 +130 +130 +125 +126 +120 +119 +119 +116 +116 +109 +110 +110 +106 +105 +100 +100 +100 +96 +96 +90 +90 +91 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +68 +68 +65 +64 +59 +58 +58 +55 +55 +50 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +12 +13 +13 +14 +13 +14 +13 +13 +13 +13 +14 +14 +14 +13 +14 +13 +13 +14 +14 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +31 +30 +31 +33 +33 +36 +37 +37 +41 +41 +43 +43 +42 +47 +47 +50 +50 +51 +54 +54 +58 +59 +58 +64 +65 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +116 +120 +119 +125 +125 +125 +129 +129 +133 +133 +133 +139 +140 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +174 +172 +173 +175 +175 +178 +178 +179 +182 +182 +183 +183 +183 +185 +185 +188 +189 +189 +191 +190 +195 +195 +195 +196 +197 +199 +198 +200 +201 +201 +201 +201 +202 +202 +202 +204 +204 +204 +205 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +204 +205 +204 +204 +204 +202 +202 +200 +200 +200 +200 +200 +199 +199 +199 +197 +196 +195 +195 +191 +190 +191 +189 +189 +185 +185 +185 +183 +183 +183 +183 +183 +179 +179 +175 +175 +175 +173 +172 +169 +169 +169 +165 +165 +161 +160 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +140 +139 +139 +133 +134 +129 +129 +129 +125 +125 +119 +120 +120 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +73 +72 +68 +69 +69 +64 +64 +58 +58 +55 +54 +54 +50 +51 +47 +47 +47 +43 +43 +41 +41 +42 +37 +36 +33 +33 +33 +31 +31 +27 +27 +26 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +13 +13 +13 +14 +14 +13 +14 +13 +14 +13 +14 +14 +14 +14 +13 +14 +14 +14 +13 +14 +13 +13 +13 +14 +13 +12 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +42 +47 +47 +51 +50 +51 +55 +55 +59 +59 +59 +64 +64 +68 +69 +69 +72 +72 +76 +76 +76 +82 +82 +86 +86 +87 +90 +91 +96 +96 +101 +99 +99 +106 +106 +109 +110 +109 +116 +116 +115 +115 +115 +120 +120 +126 +126 +126 +129 +129 +133 +133 +134 +139 +139 +143 +143 +148 +147 +147 +151 +151 +157 +157 +157 +161 +161 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +174 +174 +175 +178 +179 +183 +183 +184 +185 +185 +189 +188 +191 +190 +190 +194 +195 +195 +194 +194 +196 +197 +198 +198 +199 +200 +200 +200 +200 +201 +202 +203 +204 +204 +204 +204 +204 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +205 +205 +204 +204 +202 +202 +203 +201 +200 +200 +200 +200 +198 +199 +197 +196 +196 +195 +194 +191 +191 +191 +188 +189 +185 +185 +185 +183 +183 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +134 +133 +133 +129 +129 +125 +125 +125 +120 +120 +116 +116 +116 +110 +110 +106 +105 +106 +100 +100 +96 +96 +97 +90 +90 +86 +87 +82 +82 +82 +76 +76 +72 +73 +72 +68 +68 +64 +65 +64 +58 +59 +54 +54 +55 +51 +51 +47 +47 +45 +43 +42 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +13 +13 +14 +13 +13 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +13 +14 +13 +13 +13 +14 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +36 +41 +41 +40 +43 +43 +47 +47 +47 +51 +51 +55 +54 +54 +58 +58 +64 +65 +65 +68 +68 +72 +72 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +105 +106 +110 +110 +116 +116 +116 +120 +119 +125 +125 +130 +129 +129 +133 +133 +139 +139 +139 +143 +143 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +162 +165 +165 +169 +169 +172 +173 +173 +175 +175 +178 +179 +178 +183 +183 +183 +182 +183 +184 +185 +189 +189 +189 +190 +191 +194 +194 +196 +196 +196 +198 +198 +200 +200 +200 +201 +200 +202 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +202 +200 +200 +200 +201 +201 +198 +199 +196 +196 +197 +195 +194 +191 +190 +189 +188 +188 +184 +184 +182 +183 +182 +179 +179 +175 +175 +175 +172 +173 +169 +169 +169 +165 +164 +161 +161 +160 +156 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +134 +129 +130 +129 +125 +125 +120 +120 +119 +116 +115 +110 +110 +110 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +61 +59 +58 +54 +54 +50 +51 +50 +47 +47 +47 +47 +47 +43 +43 +43 +43 +43 +41 +41 +37 +37 +37 +33 +32 +31 +31 +29 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +12 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +14 +13 +14 +13 +14 +14 +14 +13 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +40 +43 +43 +43 +47 +46 +51 +51 +55 +54 +55 +58 +58 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +95 +100 +100 +106 +106 +106 +110 +110 +115 +116 +115 +119 +119 +119 +120 +120 +125 +126 +129 +129 +129 +133 +133 +139 +139 +141 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +182 +182 +183 +185 +185 +189 +188 +189 +190 +190 +194 +195 +194 +196 +197 +199 +198 +199 +200 +200 +200 +200 +201 +202 +203 +204 +205 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +203 +200 +201 +200 +201 +200 +198 +198 +196 +196 +196 +194 +195 +190 +191 +190 +188 +188 +184 +184 +184 +182 +183 +179 +179 +179 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +126 +120 +119 +119 +116 +116 +110 +110 +110 +105 +106 +106 +106 +106 +99 +100 +96 +96 +96 +90 +90 +86 +86 +87 +82 +82 +77 +76 +72 +72 +73 +68 +68 +65 +64 +64 +58 +58 +59 +58 +58 +54 +54 +51 +51 +51 +47 +47 +43 +43 +42 +41 +40 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +13 +14 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +14 +13 +14 +13 +14 +14 +13 +14 +14 +13 +14 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +18 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +32 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +51 +54 +55 +55 +59 +59 +64 +64 +64 +68 +68 +72 +72 +73 +77 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +100 +99 +100 +105 +106 +110 +110 +110 +115 +115 +119 +120 +120 +125 +126 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +168 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +182 +182 +184 +184 +188 +188 +189 +190 +190 +194 +194 +195 +196 +196 +198 +198 +200 +200 +200 +200 +200 +202 +202 +202 +204 +204 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +202 +201 +200 +201 +200 +200 +198 +198 +196 +196 +196 +194 +195 +190 +191 +190 +189 +189 +185 +184 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +139 +139 +133 +133 +129 +130 +129 +125 +126 +125 +125 +125 +119 +119 +115 +115 +116 +110 +110 +106 +106 +103 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +59 +55 +54 +54 +51 +51 +47 +47 +46 +43 +43 +41 +41 +40 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +24 +20 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +14 +13 +14 +13 +13 +14 +13 +14 +14 +13 +14 +13 +13 +13 +14 +14 +13 +14 +14 +13 +13 +14 +14 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +50 +51 +55 +54 +55 +59 +58 +65 +65 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +95 +100 +100 +106 +106 +107 +109 +110 +116 +115 +119 +119 +120 +125 +125 +129 +129 +129 +133 +133 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +153 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +178 +183 +183 +184 +184 +185 +189 +189 +190 +190 +194 +194 +195 +196 +196 +198 +199 +199 +200 +200 +200 +201 +201 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +200 +201 +200 +201 +201 +198 +198 +199 +197 +197 +195 +195 +191 +190 +191 +188 +188 +185 +184 +185 +182 +182 +178 +179 +179 +175 +175 +173 +173 +173 +169 +169 +164 +164 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +140 +140 +139 +139 +139 +133 +133 +129 +130 +129 +125 +125 +119 +120 +117 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +69 +68 +68 +65 +64 +58 +58 +58 +54 +54 +50 +50 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +32 +33 +31 +31 +27 +27 +27 +25 +24 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +13 +13 +13 +14 +14 +13 +14 +13 +14 +14 +13 +13 +14 +13 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +20 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +32 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +50 +55 +55 +55 +58 +59 +64 +64 +64 +68 +68 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +88 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +116 +116 +115 +116 +119 +119 +125 +125 +126 +130 +129 +133 +134 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +178 +179 +178 +183 +183 +185 +185 +185 +189 +188 +191 +190 +190 +194 +194 +197 +196 +197 +198 +199 +200 +200 +201 +201 +200 +203 +202 +205 +204 +204 +204 +204 +206 +206 +207 +206 +206 +207 +207 +207 +207 +206 +206 +206 +206 +206 +207 +204 +204 +205 +205 +204 +202 +202 +201 +200 +201 +201 +201 +198 +198 +198 +197 +197 +195 +194 +195 +191 +191 +189 +188 +189 +185 +185 +183 +183 +183 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +141 +133 +133 +129 +129 +125 +125 +125 +119 +120 +115 +116 +116 +110 +110 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +87 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +69 +64 +64 +59 +58 +59 +55 +55 +51 +51 +51 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +16 +15 +14 +13 +13 +13 +13 +14 +14 +13 +14 +14 +14 +14 +13 +14 +14 +13 +14 +13 +14 +13 +13 +13 +14 +14 +13 +14 +14 +14 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +32 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +51 +55 +55 +55 +59 +59 +64 +64 +65 +69 +68 +72 +72 +73 +76 +76 +83 +82 +87 +86 +86 +90 +90 +96 +96 +96 +100 +100 +100 +100 +100 +105 +106 +110 +110 +110 +116 +116 +119 +120 +122 +126 +126 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +171 +173 +173 +175 +175 +179 +179 +178 +183 +182 +185 +185 +184 +188 +189 +191 +191 +191 +194 +195 +196 +196 +196 +199 +199 +200 +201 +200 +201 +201 +202 +202 +204 +204 +205 +204 +204 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +205 +204 +205 +204 +204 +202 +202 +200 +200 +200 +200 +200 +198 +198 +198 +196 +196 +194 +194 +195 +190 +191 +189 +189 +189 +184 +185 +183 +183 +178 +178 +179 +175 +175 +173 +172 +173 +169 +169 +165 +165 +165 +160 +161 +157 +157 +157 +151 +151 +147 +147 +148 +143 +143 +139 +139 +133 +133 +134 +129 +129 +125 +125 +125 +120 +120 +119 +119 +119 +116 +116 +110 +110 +110 +106 +106 +100 +100 +97 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +65 +64 +58 +59 +59 +54 +54 +50 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +13 +13 +14 +14 +13 +13 +13 +13 +14 +13 +13 +14 +14 +13 +13 +14 +13 +13 +13 +13 +13 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +26 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +42 +43 +43 +47 +47 +50 +50 +51 +54 +55 +58 +59 +61 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +107 +110 +110 +116 +115 +119 +120 +119 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +160 +161 +160 +165 +165 +169 +169 +168 +173 +173 +175 +175 +175 +178 +179 +183 +182 +182 +184 +185 +189 +188 +188 +191 +190 +195 +195 +197 +196 +197 +199 +198 +200 +200 +201 +200 +201 +203 +202 +202 +204 +205 +204 +204 +204 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +205 +204 +202 +203 +202 +200 +200 +201 +200 +200 +198 +198 +196 +196 +196 +194 +194 +190 +191 +189 +188 +189 +184 +184 +183 +182 +183 +179 +179 +175 +175 +174 +173 +173 +169 +169 +169 +165 +165 +161 +161 +162 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +134 +133 +133 +129 +130 +125 +126 +126 +119 +119 +116 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +68 +68 +64 +64 +59 +58 +59 +54 +54 +50 +51 +51 +47 +47 +43 +42 +43 +41 +41 +37 +37 +36 +33 +33 +31 +31 +31 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +13 +13 +14 +13 +13 +14 +13 +14 +14 +14 +14 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +14 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +42 +43 +43 +47 +46 +50 +51 +52 +54 +54 +58 +58 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +98 +100 +100 +106 +106 +110 +110 +110 +116 +115 +119 +119 +119 +126 +125 +129 +129 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +168 +173 +173 +175 +175 +175 +175 +175 +179 +179 +179 +183 +183 +184 +184 +189 +189 +188 +190 +190 +195 +195 +195 +196 +197 +198 +198 +199 +200 +200 +201 +200 +200 +202 +202 +204 +204 +205 +204 +205 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +205 +204 +204 +204 +205 +202 +202 +200 +200 +201 +200 +200 +199 +198 +197 +197 +196 +194 +194 +191 +190 +191 +189 +189 +185 +185 +185 +182 +183 +179 +178 +178 +175 +175 +173 +173 +172 +169 +169 +165 +165 +162 +161 +161 +157 +157 +151 +151 +151 +147 +147 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +130 +128 +125 +126 +119 +120 +116 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +83 +82 +76 +76 +75 +72 +72 +68 +69 +65 +64 +64 +58 +59 +55 +55 +54 +51 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +14 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +42 +47 +47 +50 +51 +51 +54 +54 +58 +58 +58 +64 +64 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +85 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +116 +120 +119 +125 +125 +126 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +183 +182 +183 +184 +184 +188 +188 +188 +191 +190 +195 +195 +194 +196 +197 +198 +199 +198 +200 +200 +200 +200 +200 +202 +202 +204 +204 +205 +205 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +204 +204 +204 +204 +205 +202 +203 +200 +200 +200 +200 +200 +198 +198 +196 +196 +196 +194 +194 +191 +191 +191 +188 +189 +185 +185 +184 +183 +183 +179 +179 +177 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +141 +133 +133 +130 +129 +125 +125 +126 +120 +119 +115 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +65 +64 +59 +58 +54 +54 +54 +50 +51 +46 +47 +47 +43 +43 +41 +41 +37 +36 +37 +33 +34 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +14 +13 +14 +14 +14 +14 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +13 +13 +14 +13 +14 +14 +13 +13 +13 +14 +13 +13 +14 +13 +15 +15 +15 +17 +17 +17 +18 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +28 +31 +30 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +46 +47 +47 +47 +46 +51 +51 +55 +54 +55 +58 +58 +65 +64 +66 +69 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +119 +120 +119 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +178 +179 +183 +183 +182 +184 +185 +189 +188 +188 +190 +191 +194 +194 +195 +197 +196 +198 +198 +201 +200 +200 +200 +200 +202 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +205 +204 +205 +204 +204 +202 +202 +202 +200 +201 +200 +200 +200 +200 +200 +199 +198 +199 +196 +196 +194 +195 +192 +190 +191 +189 +188 +184 +184 +185 +183 +183 +178 +179 +178 +175 +175 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +144 +144 +139 +139 +139 +133 +133 +129 +129 +129 +126 +126 +119 +120 +120 +116 +116 +110 +110 +107 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +58 +55 +54 +54 +51 +51 +47 +46 +47 +43 +43 +41 +41 +41 +36 +37 +33 +33 +33 +31 +31 +27 +27 +28 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +14 +13 +14 +14 +13 +14 +13 +13 +14 +13 +14 +13 +13 +14 +14 +13 +14 +13 +14 +13 +14 +13 +13 +14 +14 +14 +13 +12 +15 +15 +17 +17 +18 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +34 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +48 +51 +51 +55 +54 +59 +58 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +110 +110 +116 +115 +119 +120 +119 +125 +125 +129 +130 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +151 +151 +151 +156 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +183 +185 +185 +188 +188 +191 +190 +190 +194 +194 +196 +197 +196 +198 +198 +200 +200 +200 +200 +200 +202 +203 +202 +204 +204 +204 +204 +205 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +207 +206 +205 +204 +204 +204 +204 +202 +202 +201 +200 +200 +200 +200 +198 +198 +197 +196 +197 +194 +195 +191 +190 +190 +189 +188 +188 +189 +188 +184 +185 +183 +183 +183 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +140 +133 +134 +129 +129 +126 +125 +125 +119 +119 +116 +116 +115 +110 +109 +106 +106 +106 +100 +100 +96 +95 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +58 +59 +55 +54 +54 +51 +50 +47 +47 +47 +43 +43 +40 +41 +41 +37 +37 +33 +33 +32 +30 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +14 +12 +13 +14 +13 +14 +14 +13 +13 +14 +14 +14 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +14 +13 +13 +14 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +41 +41 +40 +43 +43 +47 +47 +46 +51 +50 +55 +55 +55 +59 +59 +64 +64 +64 +68 +68 +72 +72 +73 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +105 +110 +110 +116 +116 +115 +119 +119 +125 +125 +125 +129 +129 +133 +133 +140 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +172 +173 +175 +175 +178 +178 +183 +183 +183 +184 +185 +189 +189 +188 +191 +190 +194 +194 +194 +196 +196 +199 +198 +199 +200 +201 +200 +200 +201 +202 +202 +204 +205 +204 +204 +204 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +204 +204 +204 +204 +205 +202 +202 +200 +200 +200 +200 +200 +199 +198 +196 +196 +196 +195 +195 +194 +194 +195 +190 +191 +188 +189 +189 +185 +185 +182 +182 +179 +178 +179 +174 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +148 +143 +143 +139 +139 +133 +133 +133 +129 +129 +126 +125 +125 +119 +120 +116 +115 +116 +109 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +83 +82 +82 +77 +76 +73 +72 +72 +68 +68 +64 +64 +64 +58 +58 +54 +54 +54 +50 +50 +47 +47 +47 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +12 +12 +13 +14 +13 +13 +14 +14 +14 +13 +14 +14 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +14 +14 +14 +13 +13 +14 +15 +15 +15 +17 +17 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +28 +31 +31 +33 +33 +37 +37 +37 +41 +40 +43 +43 +43 +47 +47 +50 +51 +51 +55 +54 +59 +59 +58 +64 +64 +68 +69 +72 +72 +72 +76 +76 +83 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +116 +119 +119 +125 +125 +125 +129 +130 +133 +133 +133 +140 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +168 +173 +173 +173 +175 +175 +179 +179 +178 +183 +183 +184 +185 +185 +188 +188 +191 +190 +190 +194 +195 +197 +196 +196 +198 +199 +200 +200 +200 +200 +201 +202 +202 +204 +204 +205 +204 +204 +204 +204 +205 +207 +206 +206 +206 +207 +207 +206 +206 +206 +207 +206 +207 +206 +206 +204 +204 +204 +204 +204 +202 +202 +202 +201 +200 +200 +200 +200 +200 +200 +198 +198 +199 +196 +197 +194 +194 +191 +190 +191 +188 +189 +184 +185 +185 +182 +182 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +166 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +134 +133 +133 +129 +129 +125 +126 +125 +119 +119 +116 +116 +116 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +58 +58 +54 +55 +51 +50 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +28 +27 +25 +25 +25 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +14 +14 +13 +13 +14 +13 +14 +13 +14 +13 +13 +13 +13 +14 +14 +14 +13 +14 +13 +14 +13 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +24 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +42 +43 +43 +47 +46 +51 +51 +54 +55 +55 +58 +58 +64 +65 +64 +68 +68 +72 +72 +72 +77 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +115 +116 +119 +120 +126 +126 +126 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +158 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +179 +183 +183 +185 +185 +184 +189 +188 +190 +190 +195 +194 +194 +196 +197 +199 +198 +198 +200 +200 +201 +201 +200 +201 +201 +202 +202 +202 +204 +205 +204 +205 +206 +206 +207 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +205 +205 +204 +202 +202 +200 +200 +200 +201 +201 +199 +199 +196 +196 +197 +195 +194 +191 +190 +190 +188 +189 +185 +185 +185 +183 +183 +178 +179 +179 +175 +175 +173 +173 +173 +173 +173 +168 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +125 +125 +125 +120 +119 +115 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +73 +72 +72 +68 +68 +64 +64 +64 +58 +58 +55 +55 +54 +51 +50 +46 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +13 +13 +13 +14 +14 +13 +13 +14 +14 +14 +14 +13 +14 +13 +14 +13 +14 +14 +13 +14 +14 +13 +14 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +37 +37 +37 +40 +41 +43 +43 +43 +47 +47 +51 +51 +51 +55 +54 +58 +58 +58 +64 +65 +68 +68 +68 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +109 +110 +115 +115 +119 +120 +120 +125 +125 +129 +129 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +168 +168 +169 +173 +173 +175 +175 +178 +178 +179 +182 +182 +185 +184 +185 +188 +188 +189 +188 +188 +191 +190 +194 +194 +194 +197 +197 +198 +199 +199 +201 +200 +201 +200 +202 +202 +203 +204 +204 +205 +204 +204 +206 +206 +206 +207 +206 +206 +206 +206 +207 +207 +206 +206 +207 +206 +206 +207 +206 +205 +204 +204 +204 +204 +203 +202 +200 +200 +200 +200 +200 +199 +198 +198 +196 +196 +195 +194 +195 +190 +190 +189 +189 +185 +185 +184 +183 +182 +179 +178 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +144 +143 +143 +140 +139 +134 +134 +133 +129 +129 +126 +125 +126 +119 +119 +115 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +91 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +65 +65 +65 +58 +58 +54 +55 +55 +50 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +20 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +13 +14 +13 +14 +14 +14 +13 +13 +14 +14 +14 +14 +13 +13 +14 +14 +14 +13 +13 +14 +14 +14 +13 +13 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +50 +51 +54 +54 +59 +59 +65 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +101 +106 +106 +109 +110 +116 +116 +116 +119 +119 +125 +125 +126 +130 +129 +133 +133 +133 +139 +139 +144 +143 +143 +147 +147 +151 +151 +152 +157 +157 +161 +161 +166 +165 +165 +169 +169 +172 +173 +173 +175 +175 +175 +174 +175 +178 +179 +182 +183 +183 +184 +184 +189 +189 +189 +191 +191 +195 +194 +196 +196 +196 +198 +198 +200 +200 +200 +200 +200 +200 +200 +200 +203 +202 +204 +204 +205 +205 +204 +206 +207 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +203 +201 +200 +201 +201 +198 +199 +198 +196 +196 +194 +194 +195 +190 +190 +188 +188 +189 +184 +184 +183 +182 +182 +179 +179 +175 +175 +174 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +130 +129 +129 +125 +125 +119 +119 +116 +115 +115 +110 +110 +105 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +72 +73 +68 +68 +65 +64 +64 +58 +58 +54 +55 +54 +51 +51 +51 +51 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +35 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +19 +19 +19 +18 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +14 +14 +13 +13 +14 +13 +13 +13 +14 +13 +14 +13 +13 +14 +13 +13 +14 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +36 +41 +41 +43 +43 +43 +47 +47 +51 +50 +51 +54 +55 +58 +58 +58 +64 +64 +68 +68 +68 +72 +73 +76 +76 +77 +82 +82 +86 +86 +91 +90 +90 +96 +96 +100 +100 +99 +106 +106 +110 +110 +110 +115 +115 +120 +119 +120 +125 +125 +129 +129 +130 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +176 +179 +179 +182 +183 +184 +184 +184 +189 +188 +191 +190 +190 +194 +194 +194 +195 +194 +196 +196 +198 +198 +198 +200 +200 +200 +200 +201 +202 +202 +204 +204 +204 +204 +204 +207 +206 +206 +206 +206 +205 +206 +206 +206 +206 +206 +206 +206 +206 +207 +204 +205 +204 +204 +202 +202 +203 +201 +200 +200 +200 +200 +198 +198 +197 +196 +196 +195 +195 +190 +190 +190 +188 +189 +185 +184 +184 +182 +183 +178 +179 +175 +175 +175 +173 +172 +173 +173 +172 +169 +169 +165 +165 +165 +161 +161 +157 +156 +157 +151 +150 +147 +147 +147 +143 +143 +139 +139 +134 +133 +133 +129 +129 +125 +125 +126 +119 +119 +116 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +97 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +68 +68 +69 +68 +68 +64 +64 +58 +59 +58 +55 +55 +50 +50 +51 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +30 +31 +31 +31 +31 +27 +27 +24 +25 +25 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +13 +14 +14 +13 +13 +14 +13 +14 +13 +14 +13 +14 +14 +13 +13 +13 +14 +14 +13 +14 +14 +13 +13 +14 +12 +15 +15 +17 +17 +17 +19 +19 +25 +25 +25 +27 +27 +31 +30 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +46 +46 +51 +51 +55 +54 +54 +59 +58 +64 +64 +64 +68 +68 +72 +72 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +116 +120 +119 +125 +125 +129 +129 +129 +133 +133 +140 +140 +139 +143 +143 +143 +143 +143 +147 +147 +151 +151 +151 +157 +158 +161 +161 +162 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +178 +182 +183 +183 +182 +183 +185 +185 +188 +189 +189 +191 +191 +194 +195 +197 +197 +197 +198 +199 +200 +200 +200 +200 +200 +202 +202 +202 +204 +204 +204 +204 +205 +206 +206 +206 +206 +207 +207 +207 +206 +206 +206 +206 +206 +206 +206 +205 +204 +204 +204 +204 +202 +203 +202 +200 +200 +201 +200 +200 +198 +198 +196 +197 +197 +195 +194 +191 +191 +189 +188 +188 +185 +184 +182 +183 +182 +178 +179 +175 +175 +175 +173 +173 +169 +169 +168 +165 +165 +161 +161 +161 +157 +157 +151 +151 +148 +147 +147 +143 +143 +139 +140 +139 +133 +133 +133 +133 +133 +129 +130 +126 +125 +125 +120 +119 +116 +116 +116 +110 +110 +106 +105 +100 +101 +100 +96 +96 +90 +90 +90 +86 +86 +86 +86 +86 +82 +82 +76 +76 +76 +73 +72 +68 +68 +67 +64 +64 +59 +59 +54 +55 +54 +50 +50 +47 +47 +47 +43 +43 +42 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +29 +27 +27 +25 +25 +21 +20 +21 +19 +19 +17 +17 +17 +15 +16 +15 +15 +15 +13 +13 +12 +13 +14 +13 +14 +13 +13 +13 +14 +13 +13 +14 +13 +14 +13 +13 +13 +14 +14 +14 +14 +14 +14 +13 +14 +13 +13 +14 +13 +13 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +25 +27 +27 +30 +31 +31 +33 +33 +37 +37 +37 +41 +41 +42 +43 +43 +47 +47 +50 +51 +55 +54 +54 +58 +58 +64 +64 +64 +69 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +91 +96 +96 +100 +100 +106 +106 +105 +110 +110 +116 +115 +115 +120 +119 +120 +120 +119 +126 +126 +129 +129 +129 +133 +133 +139 +139 +141 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +165 +165 +165 +169 +169 +173 +172 +173 +175 +175 +179 +179 +180 +183 +183 +185 +185 +188 +188 +189 +191 +190 +194 +195 +194 +196 +196 +199 +198 +198 +200 +200 +200 +201 +201 +203 +203 +204 +204 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +204 +205 +204 +204 +204 +202 +203 +200 +201 +201 +200 +201 +199 +199 +196 +196 +196 +194 +195 +191 +191 +190 +189 +189 +185 +185 +184 +182 +183 +178 +179 +179 +175 +175 +173 +172 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +140 +140 +133 +133 +134 +129 +129 +126 +125 +119 +119 +119 +115 +116 +110 +110 +110 +106 +106 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +84 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +65 +64 +58 +59 +58 +59 +59 +55 +54 +50 +51 +51 +47 +46 +43 +43 +41 +41 +40 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +20 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +13 +14 +14 +14 +14 +14 +13 +13 +14 +14 +14 +13 +14 +13 +14 +13 +13 +14 +13 +13 +13 +14 +14 +14 +14 +14 +13 +14 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +26 +28 +31 +31 +33 +33 +36 +37 +37 +41 +41 +43 +43 +42 +47 +47 +51 +51 +51 +55 +54 +59 +58 +58 +65 +64 +68 +68 +68 +72 +72 +76 +76 +83 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +115 +119 +119 +120 +125 +125 +130 +130 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +166 +169 +169 +173 +173 +174 +175 +175 +179 +179 +182 +183 +183 +184 +185 +189 +189 +189 +190 +191 +194 +194 +195 +197 +197 +198 +198 +200 +200 +201 +201 +200 +202 +203 +202 +204 +204 +205 +204 +204 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +207 +204 +204 +204 +204 +204 +203 +202 +203 +201 +201 +201 +201 +200 +198 +198 +196 +197 +196 +195 +194 +191 +191 +191 +188 +189 +184 +185 +183 +182 +182 +179 +179 +175 +175 +174 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +140 +139 +139 +134 +134 +129 +130 +129 +125 +125 +119 +120 +119 +116 +116 +110 +110 +110 +106 +105 +100 +100 +98 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +72 +72 +73 +68 +68 +64 +64 +65 +59 +59 +54 +54 +51 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +13 +13 +14 +14 +13 +14 +13 +14 +13 +13 +13 +13 +14 +14 +14 +13 +13 +14 +13 +13 +14 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +32 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +51 +55 +55 +58 +58 +59 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +86 +86 +86 +90 +90 +96 +96 +96 +101 +100 +106 +106 +107 +110 +110 +115 +115 +120 +120 +119 +125 +125 +129 +129 +129 +133 +133 +139 +140 +139 +144 +143 +147 +147 +147 +151 +151 +157 +157 +161 +161 +161 +165 +165 +168 +169 +169 +172 +173 +175 +175 +175 +179 +179 +183 +182 +182 +184 +185 +188 +188 +189 +190 +191 +195 +194 +196 +196 +196 +198 +198 +200 +201 +200 +200 +200 +201 +200 +200 +202 +202 +205 +204 +204 +205 +204 +207 +206 +207 +206 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +203 +204 +204 +204 +204 +202 +202 +200 +200 +200 +200 +200 +198 +198 +198 +197 +196 +195 +194 +191 +190 +190 +188 +189 +184 +184 +184 +182 +183 +178 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +166 +161 +161 +157 +157 +151 +151 +151 +148 +147 +143 +143 +143 +139 +139 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +119 +119 +117 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +69 +68 +68 +64 +64 +58 +58 +58 +54 +54 +51 +51 +50 +46 +47 +42 +43 +43 +41 +41 +37 +37 +37 +33 +32 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +13 +14 +13 +14 +14 +14 +13 +13 +14 +14 +13 +14 +14 +14 +13 +13 +14 +13 +16 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +46 +51 +51 +54 +54 +54 +58 +58 +65 +64 +64 +68 +69 +72 +72 +72 +77 +76 +82 +82 +82 +86 +86 +90 +90 +92 +95 +97 +100 +100 +106 +106 +106 +110 +109 +116 +116 +116 +119 +119 +119 +119 +120 +126 +125 +129 +129 +129 +133 +134 +140 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +174 +175 +179 +179 +183 +182 +184 +184 +185 +188 +188 +190 +191 +190 +194 +194 +196 +196 +196 +198 +198 +200 +200 +201 +201 +200 +202 +203 +202 +204 +205 +204 +204 +206 +207 +206 +206 +206 +207 +206 +206 +207 +206 +207 +206 +206 +206 +206 +204 +204 +204 +205 +205 +202 +202 +203 +200 +200 +200 +200 +199 +198 +198 +196 +197 +195 +195 +194 +190 +191 +189 +188 +189 +184 +185 +183 +182 +182 +179 +179 +175 +175 +175 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +150 +151 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +130 +129 +129 +125 +125 +119 +120 +119 +115 +115 +110 +109 +110 +106 +105 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +79 +76 +76 +72 +72 +68 +69 +69 +64 +64 +58 +58 +59 +55 +55 +51 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +14 +13 +13 +13 +14 +14 +14 +13 +13 +14 +13 +13 +13 +13 +14 +13 +14 +13 +14 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +16 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +36 +37 +38 +41 +41 +42 +43 +46 +47 +47 +50 +51 +55 +55 +54 +58 +58 +59 +59 +58 +65 +64 +68 +68 +68 +72 +72 +76 +76 +77 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +105 +105 +106 +106 +106 +109 +110 +116 +116 +115 +119 +120 +126 +125 +129 +129 +129 +134 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +172 +174 +175 +175 +179 +178 +182 +182 +182 +184 +184 +188 +189 +189 +190 +190 +194 +194 +195 +197 +196 +199 +199 +198 +200 +200 +201 +200 +203 +202 +203 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +207 +206 +206 +207 +204 +204 +204 +204 +203 +203 +202 +200 +201 +200 +200 +200 +199 +198 +197 +197 +197 +194 +195 +191 +190 +190 +188 +188 +184 +185 +184 +183 +183 +178 +178 +174 +175 +175 +173 +173 +169 +169 +169 +165 +165 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +140 +133 +133 +133 +129 +129 +125 +125 +126 +120 +119 +119 +120 +120 +116 +115 +109 +110 +110 +106 +106 +100 +100 +98 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +59 +58 +59 +55 +54 +51 +50 +47 +47 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +18 +17 +16 +16 +15 +16 +15 +15 +13 +13 +13 +12 +13 +14 +13 +13 +14 +14 +13 +14 +13 +13 +14 +13 +13 +14 +14 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +26 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +42 +43 +43 +46 +47 +51 +51 +51 +54 +55 +59 +58 +59 +64 +64 +68 +68 +73 +72 +72 +76 +76 +82 +82 +82 +86 +86 +85 +86 +86 +90 +90 +95 +96 +96 +100 +100 +106 +106 +107 +109 +110 +116 +115 +119 +119 +119 +125 +126 +129 +129 +130 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +174 +179 +179 +183 +182 +183 +185 +185 +189 +189 +189 +191 +190 +194 +194 +197 +197 +197 +198 +199 +200 +201 +201 +200 +201 +202 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +205 +205 +204 +205 +205 +202 +202 +202 +201 +200 +200 +200 +201 +199 +198 +197 +196 +197 +194 +194 +190 +190 +188 +188 +188 +185 +185 +182 +182 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +159 +157 +157 +151 +151 +147 +147 +147 +144 +143 +140 +139 +139 +133 +133 +133 +133 +133 +129 +129 +125 +125 +126 +119 +120 +115 +115 +113 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +77 +76 +72 +72 +73 +68 +69 +64 +64 +59 +59 +58 +55 +54 +51 +51 +50 +47 +47 +43 +43 +43 +41 +41 +37 +36 +37 +32 +33 +31 +31 +31 +27 +27 +25 +25 +22 +21 +21 +19 +19 +16 +17 +17 +16 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +13 +13 +14 +14 +13 +14 +13 +14 +14 +13 +13 +13 +13 +14 +14 +13 +14 +13 +13 +13 +13 +14 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +24 +25 +25 +27 +27 +31 +31 +31 +33 +33 +33 +33 +33 +37 +37 +40 +41 +41 +42 +42 +47 +46 +47 +50 +51 +55 +55 +58 +58 +58 +65 +64 +68 +68 +68 +72 +72 +73 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +92 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +115 +119 +119 +125 +126 +125 +129 +130 +133 +134 +134 +139 +139 +143 +143 +147 +148 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +184 +185 +188 +189 +188 +191 +190 +194 +194 +194 +196 +196 +197 +196 +196 +198 +199 +200 +200 +200 +200 +201 +202 +203 +203 +204 +204 +204 +204 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +204 +204 +204 +205 +205 +203 +203 +201 +201 +200 +200 +200 +198 +198 +196 +196 +196 +194 +194 +195 +195 +194 +190 +191 +189 +188 +189 +185 +184 +183 +183 +180 +179 +179 +175 +175 +173 +173 +172 +169 +169 +169 +169 +169 +165 +165 +165 +165 +165 +161 +161 +157 +158 +157 +151 +151 +147 +148 +144 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +126 +119 +119 +116 +116 +115 +110 +109 +106 +105 +106 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +65 +58 +59 +55 +55 +55 +51 +51 +47 +47 +44 +43 +42 +40 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +14 +13 +14 +14 +14 +14 +14 +13 +14 +13 +14 +13 +13 +14 +14 +14 +13 +14 +14 +13 +13 +14 +13 +13 +14 +12 +15 +15 +15 +15 +15 +18 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +42 +43 +43 +47 +47 +51 +51 +51 +54 +54 +59 +58 +59 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +115 +115 +115 +119 +119 +125 +125 +125 +130 +130 +133 +134 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +166 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +179 +182 +183 +185 +184 +184 +189 +188 +190 +190 +191 +195 +195 +196 +197 +199 +198 +198 +200 +200 +201 +201 +200 +202 +203 +204 +204 +204 +204 +204 +206 +206 +206 +206 +207 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +205 +202 +202 +202 +202 +202 +201 +201 +200 +201 +200 +199 +198 +196 +196 +195 +194 +195 +190 +190 +188 +189 +189 +185 +185 +185 +185 +185 +183 +183 +183 +182 +183 +179 +178 +175 +175 +175 +173 +173 +169 +169 +166 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +130 +130 +126 +125 +119 +120 +115 +116 +116 +110 +109 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +81 +76 +76 +72 +72 +69 +68 +69 +64 +64 +58 +58 +58 +54 +54 +51 +50 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +28 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +14 +13 +12 +13 +14 +14 +14 +13 +13 +14 +13 +13 +13 +14 +14 +14 +14 +13 +14 +13 +14 +14 +13 +13 +13 +13 +14 +14 +14 +14 +14 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +24 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +38 +40 +41 +43 +43 +47 +47 +47 +50 +51 +55 +55 +55 +59 +59 +64 +65 +64 +69 +68 +72 +72 +72 +76 +77 +82 +83 +86 +86 +86 +90 +90 +96 +96 +96 +100 +99 +106 +106 +106 +110 +110 +116 +115 +115 +119 +120 +126 +126 +125 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +168 +169 +173 +173 +173 +175 +175 +178 +179 +183 +183 +182 +184 +185 +188 +189 +189 +191 +191 +195 +195 +194 +196 +196 +198 +198 +198 +200 +201 +200 +200 +201 +202 +203 +205 +204 +204 +204 +204 +206 +206 +206 +207 +206 +207 +207 +206 +206 +206 +206 +207 +207 +206 +207 +206 +206 +204 +204 +204 +204 +204 +203 +202 +200 +200 +201 +200 +201 +199 +198 +198 +196 +196 +196 +196 +196 +195 +194 +191 +191 +191 +189 +189 +184 +185 +184 +183 +183 +179 +179 +175 +175 +175 +172 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +140 +139 +139 +133 +133 +129 +129 +130 +126 +125 +120 +119 +120 +115 +116 +110 +110 +110 +106 +106 +100 +100 +100 +95 +96 +90 +90 +87 +86 +86 +83 +82 +76 +77 +76 +72 +72 +68 +69 +68 +64 +64 +58 +59 +58 +55 +54 +50 +51 +51 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +12 +13 +13 +12 +13 +14 +14 +14 +13 +14 +14 +14 +13 +13 +14 +13 +13 +13 +13 +13 +14 +13 +14 +13 +14 +13 +14 +14 +14 +13 +13 +13 +13 +13 +12 +15 +15 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +50 +51 +54 +54 +55 +59 +58 +64 +65 +68 +69 +69 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +105 +105 +106 +110 +110 +116 +116 +119 +120 +119 +126 +125 +129 +129 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +169 +169 +169 +173 +173 +174 +175 +175 +179 +179 +179 +179 +178 +182 +183 +184 +184 +185 +189 +189 +191 +190 +191 +195 +195 +197 +196 +198 +198 +199 +200 +200 +200 +201 +200 +203 +202 +202 +202 +203 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +207 +206 +206 +205 +204 +204 +204 +204 +205 +204 +205 +202 +202 +200 +200 +200 +201 +201 +198 +198 +197 +196 +197 +195 +195 +190 +191 +191 +189 +188 +185 +185 +184 +183 +183 +179 +179 +178 +174 +175 +173 +173 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +140 +140 +133 +133 +133 +130 +129 +125 +125 +125 +119 +119 +116 +116 +109 +110 +109 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +59 +58 +58 +55 +54 +51 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +32 +27 +27 +25 +25 +22 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +14 +13 +12 +13 +13 +14 +13 +14 +14 +14 +13 +13 +13 +13 +14 +13 +14 +13 +14 +14 +14 +14 +14 +14 +14 +13 +13 +13 +13 +13 +14 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +46 +47 +51 +51 +51 +55 +55 +58 +58 +59 +65 +64 +69 +69 +69 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +109 +115 +116 +120 +120 +119 +125 +125 +129 +129 +129 +133 +133 +139 +140 +139 +143 +143 +147 +147 +152 +151 +151 +157 +157 +161 +161 +161 +165 +165 +168 +169 +169 +173 +173 +176 +175 +174 +179 +179 +183 +183 +183 +185 +185 +188 +188 +190 +191 +190 +195 +194 +196 +197 +197 +198 +198 +198 +198 +198 +200 +200 +200 +201 +200 +202 +203 +204 +205 +204 +204 +205 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +207 +207 +206 +206 +206 +206 +204 +205 +205 +205 +205 +202 +202 +203 +201 +201 +200 +200 +198 +199 +198 +196 +196 +194 +194 +194 +190 +190 +189 +188 +189 +185 +185 +183 +183 +183 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +130 +129 +126 +125 +125 +120 +119 +116 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +89 +86 +86 +87 +82 +82 +76 +76 +73 +72 +72 +68 +68 +64 +65 +64 +58 +59 +54 +55 +55 +51 +51 +47 +47 +47 +43 +43 +41 +41 +41 +36 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +13 +14 +14 +14 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +14 +14 +14 +13 +14 +14 +13 +13 +14 +14 +13 +13 +13 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +35 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +50 +50 +54 +55 +59 +59 +59 +64 +64 +68 +68 +69 +72 +72 +76 +76 +83 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +105 +110 +110 +110 +116 +116 +119 +119 +120 +126 +125 +130 +129 +134 +134 +134 +139 +139 +143 +144 +143 +147 +147 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +166 +169 +169 +173 +173 +174 +175 +175 +179 +179 +182 +182 +183 +184 +184 +184 +184 +185 +188 +189 +191 +190 +191 +194 +194 +196 +196 +197 +198 +198 +200 +201 +200 +200 +200 +203 +202 +204 +204 +204 +205 +205 +204 +205 +204 +206 +206 +206 +207 +207 +207 +206 +206 +206 +207 +206 +207 +207 +207 +205 +204 +204 +204 +204 +202 +202 +202 +200 +200 +201 +200 +200 +198 +199 +196 +196 +197 +194 +194 +191 +191 +188 +188 +189 +185 +184 +182 +183 +182 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +162 +157 +157 +151 +151 +148 +147 +147 +143 +143 +139 +139 +140 +133 +133 +130 +130 +130 +125 +125 +119 +119 +120 +116 +116 +110 +110 +110 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +72 +72 +69 +69 +68 +64 +64 +59 +58 +59 +54 +55 +51 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +37 +37 +36 +33 +33 +31 +31 +31 +27 +27 +25 +25 +23 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +14 +14 +14 +13 +13 +14 +14 +13 +14 +13 +13 +14 +14 +13 +14 +13 +14 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +40 +41 +41 +43 +43 +47 +47 +47 +50 +51 +55 +55 +58 +58 +58 +64 +64 +68 +68 +68 +72 +73 +73 +72 +73 +77 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +115 +120 +120 +126 +125 +125 +129 +129 +133 +134 +134 +140 +139 +143 +143 +144 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +169 +169 +168 +173 +173 +175 +175 +175 +178 +179 +183 +183 +183 +185 +185 +188 +188 +190 +190 +190 +195 +194 +196 +196 +196 +198 +198 +198 +199 +198 +201 +201 +200 +200 +201 +202 +203 +204 +204 +204 +204 +205 +207 +207 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +205 +204 +204 +205 +202 +202 +200 +200 +200 +200 +200 +199 +198 +196 +197 +197 +194 +195 +190 +190 +191 +189 +189 +185 +185 +185 +183 +183 +179 +179 +179 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +134 +129 +129 +125 +125 +120 +120 +119 +116 +116 +110 +110 +110 +105 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +69 +69 +68 +64 +64 +58 +58 +59 +55 +55 +55 +54 +54 +51 +51 +47 +47 +46 +43 +43 +41 +41 +40 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +21 +21 +21 +18 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +13 +14 +14 +14 +13 +14 +14 +14 +13 +14 +13 +13 +14 +13 +13 +13 +13 +13 +14 +14 +13 +14 +13 +14 +14 +14 +14 +13 +15 +15 +15 +17 +17 +19 +20 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +40 +41 +41 +43 +43 +47 +47 +47 +51 +50 +55 +55 +55 +59 +58 +64 +65 +64 +68 +68 +72 +73 +72 +76 +76 +82 +82 +87 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +109 +115 +116 +116 +120 +119 +125 +125 +126 +129 +129 +133 +133 +139 +140 +140 +143 +144 +147 +147 +147 +151 +151 +157 +157 +157 +160 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +182 +183 +183 +185 +185 +189 +189 +188 +190 +190 +191 +191 +191 +194 +194 +196 +196 +197 +199 +199 +201 +200 +200 +200 +201 +203 +202 +204 +204 +204 +204 +204 +207 +206 +206 +206 +206 +207 +207 +207 +206 +207 +207 +207 +207 +206 +207 +204 +204 +204 +204 +204 +202 +202 +200 +200 +200 +201 +200 +198 +198 +198 +196 +196 +195 +195 +194 +191 +190 +188 +188 +188 +185 +185 +183 +183 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +164 +160 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +134 +133 +134 +129 +129 +126 +125 +126 +120 +120 +116 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +87 +82 +82 +82 +76 +76 +72 +72 +73 +68 +68 +64 +65 +64 +58 +58 +55 +55 +55 +50 +50 +47 +47 +45 +43 +43 +41 +40 +36 +37 +37 +33 +33 +31 +31 +31 +27 +27 +27 +27 +27 +25 +25 +21 +21 +22 +19 +19 +17 +17 +17 +15 +15 +15 +16 +13 +13 +13 +12 +13 +14 +14 +13 +13 +14 +13 +13 +14 +13 +14 +13 +13 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +42 +43 +47 +47 +47 +50 +50 +54 +55 +54 +59 +59 +64 +64 +64 +68 +68 +72 +72 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +115 +116 +120 +120 +125 +125 +129 +129 +130 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +160 +165 +165 +166 +169 +169 +173 +173 +174 +175 +174 +179 +178 +183 +183 +183 +185 +184 +185 +185 +185 +188 +189 +190 +191 +191 +195 +194 +196 +197 +198 +199 +199 +200 +201 +200 +200 +200 +202 +202 +205 +204 +204 +204 +204 +207 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +207 +206 +206 +206 +204 +204 +204 +204 +204 +203 +202 +201 +200 +200 +200 +200 +199 +199 +198 +197 +196 +195 +195 +194 +191 +191 +189 +189 +185 +185 +185 +182 +183 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +144 +143 +143 +140 +139 +133 +133 +133 +129 +129 +125 +125 +125 +119 +119 +115 +115 +115 +110 +110 +106 +106 +106 +100 +100 +96 +96 +91 +90 +90 +86 +86 +82 +82 +82 +77 +76 +77 +76 +76 +73 +72 +68 +69 +68 +65 +64 +58 +59 +59 +54 +54 +51 +50 +46 +47 +46 +43 +43 +41 +41 +41 +37 +37 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +22 +21 +20 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +14 +14 +13 +13 +13 +14 +14 +14 +14 +13 +14 +14 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +32 +31 +31 +33 +33 +37 +36 +37 +41 +41 +42 +43 +43 +47 +47 +51 +51 +51 +54 +54 +59 +58 +65 +64 +64 +68 +68 +72 +72 +72 +76 +76 +76 +76 +77 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +115 +119 +120 +120 +125 +126 +125 +126 +126 +129 +130 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +157 +157 +157 +161 +161 +164 +165 +165 +169 +169 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +182 +183 +185 +185 +185 +189 +188 +191 +191 +190 +195 +194 +196 +196 +196 +199 +198 +201 +200 +200 +200 +201 +202 +203 +203 +205 +205 +204 +204 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +204 +204 +204 +204 +204 +202 +202 +202 +201 +201 +201 +200 +198 +199 +198 +196 +196 +195 +194 +194 +191 +190 +189 +188 +188 +184 +185 +183 +183 +182 +179 +179 +175 +175 +175 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +158 +157 +151 +151 +147 +147 +147 +143 +143 +139 +140 +139 +134 +134 +129 +129 +130 +125 +125 +119 +120 +116 +116 +115 +109 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +72 +72 +68 +68 +64 +64 +65 +59 +59 +55 +55 +54 +51 +51 +51 +51 +51 +47 +47 +43 +43 +43 +40 +40 +37 +36 +34 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +12 +12 +13 +14 +14 +14 +14 +13 +13 +14 +14 +14 +14 +14 +14 +14 +13 +13 +13 +14 +14 +14 +13 +14 +14 +13 +14 +14 +13 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +34 +37 +36 +41 +41 +43 +43 +43 +47 +47 +51 +51 +50 +54 +54 +54 +54 +54 +58 +58 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +86 +86 +85 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +116 +119 +120 +126 +125 +126 +129 +129 +133 +133 +140 +139 +139 +143 +143 +147 +147 +147 +151 +151 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +170 +173 +173 +174 +175 +178 +179 +178 +182 +183 +184 +185 +184 +189 +188 +190 +191 +190 +194 +195 +197 +196 +196 +198 +198 +200 +200 +200 +200 +200 +202 +202 +204 +204 +205 +204 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +207 +205 +206 +207 +206 +206 +203 +204 +204 +205 +204 +202 +202 +200 +200 +200 +201 +200 +198 +198 +198 +197 +196 +194 +194 +194 +191 +191 +189 +188 +188 +184 +184 +183 +182 +179 +179 +178 +175 +175 +173 +172 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +133 +133 +133 +129 +130 +125 +125 +125 +120 +119 +120 +120 +119 +116 +116 +109 +109 +109 +106 +106 +100 +100 +98 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +72 +72 +73 +68 +69 +64 +64 +65 +59 +59 +55 +55 +55 +50 +50 +47 +47 +43 +43 +42 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +14 +14 +13 +14 +14 +13 +14 +14 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +50 +51 +54 +54 +59 +59 +59 +64 +65 +68 +69 +72 +73 +72 +76 +76 +82 +82 +82 +86 +86 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +107 +109 +110 +115 +115 +119 +119 +119 +125 +125 +129 +129 +129 +133 +133 +133 +134 +133 +139 +139 +143 +143 +144 +147 +148 +151 +151 +154 +157 +156 +161 +161 +164 +165 +165 +169 +169 +173 +173 +172 +175 +175 +178 +179 +178 +183 +183 +184 +185 +185 +189 +189 +191 +191 +193 +194 +195 +196 +196 +198 +198 +198 +201 +200 +201 +200 +201 +202 +203 +205 +204 +204 +204 +204 +206 +206 +207 +206 +207 +206 +207 +206 +206 +207 +206 +206 +206 +207 +206 +204 +204 +204 +204 +204 +202 +202 +201 +200 +200 +201 +201 +198 +198 +199 +196 +196 +194 +195 +191 +190 +190 +188 +188 +188 +189 +188 +185 +184 +185 +184 +185 +181 +182 +179 +179 +179 +175 +175 +173 +173 +174 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +127 +126 +125 +119 +120 +115 +116 +115 +110 +109 +106 +106 +105 +100 +100 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +68 +68 +65 +65 +58 +58 +58 +54 +55 +51 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +34 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +14 +14 +13 +13 +14 +14 +13 +14 +14 +14 +14 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +30 +31 +33 +33 +37 +37 +38 +41 +41 +43 +42 +47 +47 +46 +51 +50 +55 +54 +55 +58 +59 +64 +64 +64 +68 +68 +72 +73 +72 +76 +76 +82 +82 +84 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +110 +110 +110 +116 +115 +119 +120 +120 +125 +125 +129 +129 +133 +134 +134 +139 +139 +143 +143 +143 +147 +148 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +168 +169 +173 +172 +175 +175 +178 +179 +178 +182 +182 +184 +184 +185 +189 +189 +190 +191 +190 +195 +194 +197 +197 +196 +198 +199 +201 +200 +200 +201 +200 +202 +203 +204 +204 +204 +205 +205 +206 +207 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +207 +206 +204 +204 +205 +205 +205 +202 +202 +201 +200 +200 +201 +200 +198 +198 +198 +196 +196 +195 +195 +195 +191 +190 +189 +189 +189 +185 +185 +183 +182 +183 +179 +179 +175 +175 +172 +173 +173 +169 +169 +165 +165 +165 +161 +161 +161 +160 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +140 +133 +133 +129 +129 +129 +125 +125 +126 +125 +126 +119 +120 +119 +119 +120 +115 +115 +110 +110 +110 +106 +105 +100 +100 +98 +96 +96 +90 +91 +86 +86 +86 +82 +82 +76 +76 +77 +73 +72 +68 +68 +68 +64 +64 +58 +58 +59 +54 +55 +50 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +14 +14 +14 +14 +13 +13 +13 +14 +13 +14 +13 +14 +14 +13 +13 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +26 +27 +27 +31 +31 +33 +33 +33 +36 +37 +41 +41 +41 +43 +43 +43 +43 +43 +47 +47 +50 +51 +51 +54 +55 +58 +59 +61 +64 +64 +68 +69 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +107 +110 +110 +116 +116 +120 +119 +119 +125 +125 +129 +129 +130 +134 +134 +139 +139 +140 +143 +143 +147 +147 +148 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +183 +184 +185 +189 +188 +188 +190 +191 +194 +194 +197 +196 +196 +199 +198 +200 +201 +200 +201 +200 +202 +202 +202 +205 +205 +204 +204 +204 +206 +207 +206 +206 +206 +206 +207 +206 +207 +207 +207 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +203 +200 +200 +200 +200 +200 +198 +199 +196 +196 +197 +194 +194 +191 +191 +189 +188 +188 +184 +185 +184 +185 +184 +183 +182 +179 +178 +179 +175 +175 +173 +173 +173 +168 +169 +165 +165 +165 +161 +161 +157 +157 +152 +151 +151 +147 +147 +143 +143 +143 +139 +140 +139 +139 +139 +134 +133 +129 +129 +129 +126 +125 +120 +120 +120 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +89 +86 +86 +87 +82 +82 +76 +76 +77 +72 +72 +68 +68 +67 +64 +64 +58 +58 +55 +54 +55 +50 +51 +47 +46 +47 +43 +43 +40 +40 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +13 +14 +13 +14 +14 +13 +14 +14 +13 +14 +13 +14 +14 +14 +13 +13 +13 +14 +14 +13 +13 +14 +13 +13 +15 +15 +16 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +46 +48 +51 +51 +54 +55 +58 +59 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +99 +100 +100 +106 +106 +110 +110 +110 +116 +116 +120 +120 +119 +125 +125 +129 +129 +129 +134 +133 +139 +139 +139 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +168 +173 +173 +175 +175 +175 +179 +179 +183 +183 +183 +185 +184 +189 +188 +191 +190 +190 +195 +195 +196 +196 +196 +199 +198 +201 +200 +200 +200 +200 +202 +202 +202 +204 +205 +204 +205 +204 +206 +207 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +202 +200 +200 +200 +201 +201 +199 +198 +197 +196 +195 +195 +195 +191 +190 +188 +189 +188 +184 +184 +184 +185 +185 +183 +183 +178 +179 +178 +175 +175 +172 +173 +171 +169 +169 +165 +165 +160 +161 +161 +157 +157 +157 +157 +157 +151 +151 +151 +151 +151 +147 +147 +143 +143 +143 +139 +140 +133 +133 +130 +129 +130 +126 +126 +119 +119 +120 +115 +115 +110 +110 +110 +106 +106 +100 +99 +100 +96 +96 +90 +90 +91 +86 +85 +82 +82 +77 +76 +77 +72 +72 +68 +68 +68 +65 +64 +58 +59 +59 +55 +55 +51 +51 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +14 +14 +14 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +15 +15 +15 +17 +17 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +32 +34 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +51 +55 +55 +54 +54 +54 +59 +59 +64 +64 +65 +68 +68 +72 +72 +74 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +115 +116 +119 +120 +125 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +144 +144 +143 +143 +147 +147 +151 +152 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +179 +182 +183 +185 +185 +185 +188 +188 +191 +190 +191 +195 +194 +196 +197 +197 +199 +199 +200 +201 +201 +201 +201 +202 +202 +204 +205 +204 +204 +204 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +207 +207 +206 +204 +204 +204 +204 +204 +203 +203 +201 +201 +200 +200 +200 +200 +201 +200 +198 +198 +196 +196 +197 +194 +194 +191 +191 +191 +188 +189 +184 +184 +182 +183 +183 +179 +179 +175 +175 +175 +173 +173 +173 +173 +173 +169 +169 +165 +165 +165 +161 +162 +157 +157 +154 +151 +151 +147 +147 +143 +143 +143 +139 +139 +134 +133 +133 +129 +129 +125 +125 +125 +120 +119 +116 +116 +115 +110 +110 +106 +106 +101 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +65 +64 +58 +59 +55 +54 +51 +50 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +32 +31 +31 +31 +27 +26 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +16 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +14 +13 +14 +14 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +14 +13 +14 +14 +14 +13 +13 +14 +13 +13 +13 +13 +12 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +37 +37 +37 +41 +41 +43 +43 +43 +47 +46 +51 +51 +53 +54 +54 +59 +58 +65 +64 +64 +69 +68 +72 +72 +73 +76 +76 +82 +82 +82 +82 +82 +86 +86 +86 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +116 +116 +116 +116 +119 +119 +125 +126 +125 +130 +129 +133 +133 +133 +140 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +185 +185 +189 +188 +189 +191 +190 +190 +190 +190 +194 +194 +196 +196 +196 +198 +198 +201 +200 +200 +201 +201 +202 +202 +203 +204 +205 +204 +204 +207 +207 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +207 +205 +204 +205 +204 +205 +203 +203 +200 +200 +200 +200 +201 +198 +198 +197 +197 +196 +194 +194 +195 +195 +194 +190 +190 +189 +189 +189 +185 +185 +183 +182 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +126 +125 +120 +120 +115 +115 +116 +110 +110 +106 +105 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +73 +73 +68 +69 +64 +64 +64 +58 +59 +55 +55 +54 +50 +51 +47 +47 +47 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +12 +12 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +13 +14 +14 +13 +14 +14 +14 +14 +14 +13 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +19 +20 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +32 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +51 +54 +54 +55 +58 +58 +64 +65 +65 +69 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +99 +100 +106 +106 +106 +109 +109 +116 +116 +116 +120 +120 +125 +125 +129 +129 +129 +134 +133 +139 +139 +139 +143 +143 +143 +143 +143 +147 +148 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +173 +173 +173 +174 +175 +179 +179 +178 +182 +183 +185 +184 +185 +188 +188 +191 +191 +191 +195 +195 +196 +197 +196 +198 +199 +201 +201 +200 +201 +200 +203 +202 +204 +204 +204 +204 +205 +206 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +207 +206 +206 +207 +204 +204 +204 +205 +205 +202 +202 +200 +200 +201 +201 +201 +201 +201 +200 +199 +198 +196 +196 +197 +195 +195 +191 +190 +189 +189 +189 +184 +185 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +162 +157 +157 +151 +151 +147 +147 +147 +143 +143 +140 +139 +139 +133 +133 +129 +129 +130 +125 +126 +120 +120 +120 +116 +115 +109 +110 +110 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +77 +76 +72 +72 +68 +68 +68 +64 +64 +58 +58 +58 +54 +54 +50 +50 +47 +46 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +13 +14 +13 +13 +14 +14 +13 +13 +14 +14 +14 +13 +14 +13 +14 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +30 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +50 +55 +54 +58 +59 +58 +64 +64 +68 +68 +69 +73 +72 +76 +76 +77 +82 +83 +86 +86 +87 +90 +90 +96 +96 +96 +100 +100 +106 +106 +109 +110 +110 +116 +116 +120 +120 +120 +125 +125 +125 +125 +125 +129 +129 +133 +133 +133 +139 +140 +143 +143 +143 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +172 +175 +175 +179 +179 +179 +182 +183 +184 +184 +185 +189 +188 +190 +191 +194 +194 +195 +197 +196 +198 +199 +198 +200 +201 +201 +200 +201 +203 +202 +204 +204 +205 +204 +205 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +204 +205 +205 +204 +204 +204 +204 +203 +202 +203 +200 +200 +200 +201 +199 +198 +199 +197 +197 +194 +195 +195 +191 +191 +188 +189 +188 +184 +184 +182 +183 +182 +179 +179 +175 +175 +175 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +130 +125 +125 +120 +120 +116 +116 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +72 +72 +69 +68 +65 +64 +64 +58 +58 +54 +54 +55 +50 +50 +46 +46 +47 +43 +43 +40 +41 +41 +37 +37 +33 +33 +34 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +14 +14 +14 +13 +13 +14 +13 +14 +14 +14 +14 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +14 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +42 +43 +42 +46 +47 +51 +50 +51 +55 +54 +58 +58 +58 +64 +64 +68 +69 +69 +72 +73 +76 +76 +77 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +105 +106 +110 +110 +110 +115 +115 +119 +119 +119 +126 +126 +130 +129 +129 +134 +133 +139 +139 +144 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +168 +173 +173 +175 +175 +175 +178 +178 +182 +182 +185 +184 +185 +189 +188 +190 +191 +191 +194 +195 +196 +197 +197 +198 +199 +201 +201 +201 +200 +200 +202 +202 +203 +205 +204 +205 +205 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +207 +204 +204 +205 +204 +203 +202 +203 +201 +200 +200 +201 +200 +199 +199 +196 +196 +197 +194 +194 +191 +191 +190 +188 +188 +184 +184 +185 +183 +183 +178 +179 +175 +175 +174 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +130 +130 +130 +125 +126 +120 +120 +120 +115 +116 +110 +109 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +68 +69 +64 +65 +58 +59 +58 +54 +55 +51 +50 +51 +47 +47 +43 +43 +44 +41 +40 +37 +37 +32 +32 +33 +31 +31 +27 +27 +27 +25 +25 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +16 +16 +13 +13 +12 +12 +13 +13 +13 +14 +13 +13 +13 +14 +13 +14 +14 +13 +14 +14 +13 +14 +13 +13 +14 +14 +14 +13 +13 +14 +13 +13 +13 +13 +13 +13 +15 +15 +15 +17 +18 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +50 +51 +54 +54 +55 +59 +59 +64 +64 +64 +68 +68 +72 +72 +77 +76 +77 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +99 +100 +106 +106 +105 +110 +110 +115 +115 +115 +119 +120 +126 +125 +130 +129 +130 +133 +133 +140 +140 +140 +144 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +166 +169 +169 +173 +174 +174 +175 +175 +179 +179 +183 +183 +183 +185 +184 +185 +185 +184 +188 +189 +190 +191 +190 +195 +194 +196 +197 +197 +198 +198 +200 +200 +200 +200 +200 +202 +202 +204 +204 +205 +204 +204 +205 +204 +204 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +207 +204 +204 +204 +204 +204 +203 +202 +202 +200 +200 +200 +200 +200 +198 +199 +197 +197 +196 +194 +195 +191 +191 +189 +189 +189 +185 +185 +183 +183 +183 +179 +179 +175 +175 +175 +173 +172 +169 +169 +169 +165 +165 +161 +161 +162 +157 +157 +151 +151 +148 +147 +147 +143 +143 +139 +139 +139 +133 +134 +129 +129 +129 +125 +125 +119 +120 +120 +116 +115 +110 +110 +110 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +65 +64 +58 +58 +54 +54 +50 +51 +51 +47 +47 +43 +43 +43 +41 +41 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +28 +26 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +14 +14 +13 +13 +13 +14 +14 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +36 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +50 +54 +54 +54 +59 +59 +65 +65 +64 +69 +69 +72 +72 +72 +77 +76 +82 +82 +82 +86 +86 +90 +90 +91 +96 +96 +100 +100 +106 +106 +106 +110 +109 +116 +116 +116 +119 +119 +119 +119 +119 +125 +126 +129 +129 +129 +134 +133 +140 +139 +140 +143 +143 +148 +147 +152 +151 +151 +157 +157 +161 +161 +161 +165 +165 +165 +165 +165 +169 +169 +173 +173 +173 +175 +174 +178 +178 +180 +183 +183 +184 +185 +188 +188 +189 +191 +191 +195 +194 +194 +196 +196 +197 +196 +197 +198 +199 +200 +201 +201 +200 +200 +202 +203 +205 +205 +204 +204 +205 +206 +206 +206 +206 +206 +207 +207 +207 +206 +206 +206 +207 +207 +207 +206 +205 +204 +205 +205 +205 +203 +202 +200 +200 +201 +200 +200 +198 +199 +198 +196 +197 +195 +194 +194 +191 +190 +189 +188 +189 +184 +185 +182 +182 +182 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +166 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +126 +125 +125 +120 +119 +115 +116 +116 +110 +109 +106 +106 +106 +100 +100 +95 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +73 +72 +72 +68 +68 +64 +65 +64 +59 +59 +59 +58 +59 +55 +55 +50 +50 +51 +47 +47 +43 +42 +43 +41 +41 +37 +37 +34 +33 +33 +31 +31 +27 +27 +27 +25 +25 +25 +25 +25 +21 +22 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +13 +14 +14 +13 +14 +14 +14 +13 +13 +13 +14 +14 +14 +13 +13 +14 +14 +14 +14 +14 +13 +13 +13 +13 +12 +15 +16 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +50 +51 +54 +55 +59 +59 +58 +64 +64 +69 +69 +69 +73 +72 +76 +76 +83 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +116 +120 +120 +120 +125 +126 +129 +129 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +170 +173 +173 +175 +175 +178 +179 +179 +182 +183 +185 +185 +184 +188 +189 +189 +188 +189 +190 +191 +194 +194 +194 +197 +196 +199 +198 +200 +201 +201 +200 +200 +202 +203 +202 +204 +204 +204 +204 +204 +206 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +204 +204 +204 +204 +204 +202 +202 +202 +201 +200 +200 +200 +200 +198 +199 +197 +197 +197 +195 +194 +190 +190 +190 +189 +189 +184 +185 +182 +183 +182 +178 +178 +175 +175 +175 +173 +173 +169 +168 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +140 +139 +139 +133 +133 +129 +129 +130 +125 +125 +120 +120 +120 +116 +116 +110 +110 +110 +106 +105 +100 +100 +101 +96 +96 +90 +90 +86 +87 +86 +82 +82 +76 +76 +76 +72 +72 +72 +72 +72 +69 +69 +64 +65 +64 +58 +59 +55 +55 +54 +50 +51 +47 +47 +44 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +13 +13 +13 +14 +14 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +13 +14 +14 +14 +13 +14 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +42 +46 +47 +51 +51 +51 +54 +55 +58 +59 +59 +64 +64 +69 +68 +72 +72 +72 +76 +76 +83 +82 +82 +86 +86 +90 +90 +90 +96 +96 +99 +100 +100 +106 +105 +110 +110 +110 +116 +116 +119 +120 +125 +126 +126 +129 +129 +133 +133 +133 +139 +139 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +158 +161 +161 +165 +165 +168 +169 +169 +173 +173 +175 +175 +175 +179 +179 +179 +179 +179 +182 +183 +184 +185 +185 +188 +189 +190 +190 +194 +195 +195 +197 +196 +198 +198 +198 +201 +201 +200 +200 +201 +202 +202 +205 +205 +204 +204 +204 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +201 +201 +201 +201 +200 +198 +198 +198 +197 +197 +195 +195 +191 +191 +190 +189 +188 +184 +184 +184 +182 +183 +179 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +144 +143 +139 +139 +133 +133 +134 +130 +129 +126 +125 +126 +119 +119 +116 +116 +116 +110 +109 +105 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +66 +64 +64 +59 +59 +55 +54 +55 +51 +51 +47 +46 +47 +43 +43 +43 +42 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +28 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +14 +13 +13 +13 +14 +14 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +13 +13 +15 +15 +17 +17 +18 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +34 +37 +36 +37 +41 +41 +43 +43 +43 +47 +46 +51 +51 +55 +54 +55 +58 +58 +65 +64 +65 +68 +68 +72 +73 +72 +76 +77 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +106 +106 +106 +110 +109 +116 +116 +116 +119 +120 +119 +119 +119 +125 +126 +129 +129 +129 +133 +133 +140 +139 +139 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +160 +161 +165 +165 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +180 +183 +183 +185 +184 +188 +189 +188 +191 +190 +194 +195 +195 +196 +197 +198 +198 +198 +200 +200 +200 +201 +201 +203 +203 +204 +204 +204 +204 +204 +207 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +206 +205 +205 +204 +204 +204 +202 +203 +200 +200 +200 +200 +200 +199 +198 +196 +196 +196 +195 +195 +191 +190 +190 +189 +189 +185 +185 +184 +183 +183 +179 +179 +179 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +148 +147 +143 +143 +143 +139 +139 +133 +133 +134 +129 +129 +125 +125 +119 +120 +119 +115 +116 +110 +109 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +79 +76 +77 +72 +72 +68 +68 +68 +64 +64 +58 +58 +59 +55 +54 +54 +54 +55 +51 +51 +47 +47 +47 +43 +43 +41 +41 +38 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +16 +15 +14 +13 +13 +13 +12 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +14 +13 +14 +13 +14 +13 +13 +13 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +43 +42 +43 +47 +47 +51 +50 +50 +54 +54 +58 +59 +59 +65 +64 +67 +68 +68 +72 +72 +77 +76 +77 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +106 +106 +106 +110 +110 +115 +115 +116 +119 +120 +125 +125 +126 +129 +129 +133 +133 +140 +139 +139 +143 +143 +147 +147 +147 +151 +151 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +172 +173 +173 +175 +175 +178 +179 +178 +183 +182 +184 +184 +185 +188 +188 +191 +190 +190 +194 +194 +197 +196 +197 +198 +199 +200 +200 +200 +200 +200 +203 +203 +204 +204 +204 +204 +204 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +203 +200 +200 +200 +200 +201 +199 +198 +198 +196 +196 +195 +194 +194 +190 +191 +189 +189 +189 +185 +185 +182 +183 +179 +179 +179 +175 +174 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +148 +143 +143 +140 +139 +133 +133 +133 +129 +130 +126 +125 +126 +120 +119 +120 +119 +119 +116 +115 +110 +110 +110 +106 +106 +100 +100 +98 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +77 +76 +72 +72 +72 +72 +73 +68 +68 +64 +65 +64 +58 +58 +55 +55 +52 +51 +50 +47 +46 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +30 +31 +27 +27 +25 +25 +26 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +14 +14 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +14 +13 +13 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +15 +15 +17 +18 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +42 +47 +47 +50 +50 +51 +54 +54 +59 +59 +59 +58 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +102 +106 +106 +110 +110 +115 +116 +115 +119 +119 +125 +125 +125 +129 +129 +129 +129 +130 +134 +134 +139 +139 +139 +143 +143 +147 +147 +148 +151 +151 +157 +157 +160 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +182 +183 +182 +185 +185 +189 +189 +190 +190 +191 +195 +194 +196 +196 +196 +198 +199 +200 +200 +201 +200 +200 +202 +202 +203 +204 +205 +204 +204 +204 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +204 +205 +204 +204 +205 +203 +202 +202 +200 +200 +201 +200 +200 +198 +198 +196 +196 +194 +195 +195 +191 +191 +188 +189 +188 +185 +185 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +134 +134 +129 +129 +126 +126 +123 +120 +119 +115 +116 +109 +110 +110 +106 +106 +100 +100 +100 +96 +96 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +77 +76 +77 +72 +72 +68 +68 +64 +65 +64 +58 +58 +54 +54 +55 +51 +51 +46 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +13 +14 +14 +14 +14 +14 +14 +13 +14 +13 +13 +14 +14 +13 +14 +13 +13 +14 +14 +13 +13 +14 +13 +14 +13 +13 +15 +16 +18 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +42 +43 +46 +47 +51 +50 +51 +55 +54 +59 +58 +59 +65 +64 +64 +64 +64 +69 +69 +72 +72 +72 +76 +76 +82 +82 +84 +86 +86 +90 +90 +96 +96 +95 +100 +100 +106 +106 +106 +110 +110 +110 +109 +110 +116 +115 +120 +119 +119 +125 +125 +129 +130 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +178 +178 +179 +183 +183 +185 +184 +184 +189 +188 +190 +191 +191 +194 +194 +197 +196 +197 +198 +198 +201 +200 +201 +201 +201 +203 +202 +204 +204 +205 +205 +205 +206 +206 +207 +207 +206 +206 +207 +206 +207 +206 +207 +207 +206 +206 +206 +206 +206 +207 +204 +204 +205 +204 +203 +202 +203 +201 +200 +200 +200 +200 +198 +199 +197 +196 +196 +194 +194 +191 +190 +191 +188 +189 +184 +185 +185 +183 +183 +178 +178 +175 +175 +175 +173 +173 +169 +168 +169 +165 +165 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +148 +148 +143 +143 +139 +139 +133 +133 +133 +129 +129 +126 +126 +125 +120 +119 +119 +119 +119 +116 +116 +110 +110 +110 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +58 +59 +54 +54 +50 +51 +47 +47 +47 +43 +43 +41 +41 +40 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +14 +14 +14 +14 +13 +14 +13 +14 +13 +14 +13 +13 +13 +13 +14 +13 +13 +15 +15 +15 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +24 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +50 +51 +54 +55 +59 +58 +61 +65 +64 +68 +68 +72 +72 +72 +77 +76 +82 +82 +82 +86 +86 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +109 +110 +110 +116 +115 +119 +119 +120 +125 +125 +129 +129 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +147 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +174 +175 +179 +179 +183 +183 +183 +185 +185 +189 +188 +189 +190 +191 +194 +195 +196 +196 +196 +198 +199 +200 +201 +200 +200 +200 +200 +201 +200 +201 +203 +205 +204 +204 +205 +205 +207 +206 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +204 +205 +204 +205 +202 +203 +200 +201 +200 +200 +201 +198 +198 +199 +196 +196 +194 +195 +190 +190 +190 +188 +188 +184 +184 +185 +183 +183 +183 +182 +183 +178 +179 +175 +175 +175 +173 +172 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +143 +143 +143 +139 +140 +133 +133 +134 +129 +129 +125 +125 +120 +120 +120 +115 +115 +110 +109 +110 +106 +105 +100 +100 +100 +96 +95 +90 +90 +90 +86 +87 +82 +83 +83 +76 +76 +72 +72 +69 +68 +68 +65 +64 +58 +58 +59 +54 +55 +50 +50 +50 +46 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +30 +31 +28 +25 +25 +21 +21 +21 +21 +21 +20 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +12 +14 +14 +13 +14 +13 +14 +14 +13 +14 +14 +14 +13 +14 +13 +13 +14 +14 +13 +14 +14 +13 +13 +14 +13 +13 +13 +13 +13 +15 +15 +17 +17 +20 +19 +19 +21 +21 +25 +25 +25 +27 +27 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +42 +47 +47 +51 +51 +50 +54 +54 +58 +59 +59 +65 +64 +64 +65 +64 +69 +68 +72 +72 +72 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +115 +115 +119 +119 +125 +125 +126 +129 +130 +133 +134 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +182 +183 +183 +185 +184 +188 +189 +188 +191 +190 +194 +194 +194 +196 +196 +198 +198 +198 +200 +200 +201 +200 +201 +202 +202 +204 +204 +205 +204 +204 +206 +207 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +205 +205 +202 +202 +200 +200 +200 +200 +200 +198 +198 +196 +196 +196 +194 +195 +195 +195 +194 +191 +190 +189 +188 +188 +185 +184 +183 +182 +181 +178 +179 +175 +175 +172 +173 +173 +169 +169 +165 +165 +165 +161 +161 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +141 +139 +139 +133 +133 +129 +130 +129 +125 +126 +119 +119 +119 +115 +116 +109 +109 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +86 +87 +86 +82 +82 +76 +76 +76 +73 +72 +68 +68 +68 +64 +65 +59 +58 +58 +55 +54 +50 +51 +51 +47 +46 +42 +43 +42 +42 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +14 +14 +14 +14 +13 +14 +14 +13 +14 +13 +13 +14 +13 +14 +14 +13 +13 +14 +13 +13 +13 +13 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +28 +31 +31 +33 +33 +36 +37 +37 +41 +41 +43 +43 +43 +47 +47 +47 +47 +47 +51 +50 +54 +55 +54 +59 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +115 +119 +119 +119 +125 +125 +129 +129 +130 +134 +134 +139 +139 +140 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +168 +169 +169 +173 +173 +174 +175 +175 +178 +179 +182 +182 +183 +185 +185 +189 +189 +188 +190 +191 +194 +194 +195 +197 +197 +198 +198 +201 +200 +200 +200 +200 +202 +202 +202 +204 +205 +204 +204 +204 +207 +206 +207 +206 +206 +206 +207 +206 +206 +207 +206 +207 +206 +207 +204 +204 +205 +204 +205 +202 +202 +202 +200 +200 +200 +200 +200 +198 +199 +196 +196 +196 +194 +195 +191 +191 +189 +188 +188 +184 +185 +182 +182 +183 +178 +178 +174 +175 +174 +172 +173 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +152 +151 +151 +147 +147 +143 +143 +143 +140 +139 +133 +133 +133 +129 +129 +125 +125 +126 +119 +119 +115 +115 +116 +110 +110 +105 +106 +101 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +65 +58 +58 +55 +54 +51 +51 +51 +47 +48 +42 +43 +42 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +17 +17 +18 +16 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +13 +14 +13 +13 +14 +14 +13 +14 +14 +14 +13 +13 +14 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +26 +27 +27 +31 +31 +33 +33 +32 +37 +37 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +53 +54 +55 +58 +58 +65 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +101 +100 +105 +106 +106 +110 +109 +116 +115 +116 +119 +120 +125 +125 +125 +129 +129 +133 +133 +133 +140 +140 +144 +143 +143 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +172 +172 +175 +175 +179 +179 +179 +183 +183 +184 +185 +185 +189 +189 +191 +190 +195 +195 +195 +197 +197 +198 +198 +199 +200 +200 +200 +200 +200 +203 +202 +204 +204 +204 +204 +205 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +205 +204 +204 +204 +205 +202 +202 +202 +201 +200 +200 +200 +201 +198 +198 +196 +197 +194 +194 +194 +191 +190 +188 +188 +188 +184 +185 +185 +185 +185 +183 +182 +179 +179 +179 +175 +175 +173 +172 +170 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +134 +129 +129 +125 +125 +120 +120 +120 +116 +115 +110 +109 +109 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +73 +73 +69 +68 +68 +64 +64 +59 +58 +59 +54 +54 +50 +51 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +14 +13 +13 +14 +13 +14 +13 +13 +13 +13 +13 +14 +14 +14 +14 +13 +13 +14 +13 +14 +13 +14 +13 +13 +13 +14 +14 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +25 +25 +25 +26 +27 +31 +31 +31 +33 +33 +37 +36 +39 +41 +40 +43 +43 +46 +47 +47 +51 +51 +55 +55 +55 +58 +58 +64 +64 +65 +68 +68 +72 +72 +72 +76 +76 +82 +82 +84 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +116 +120 +120 +125 +125 +126 +129 +129 +133 +133 +138 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +183 +182 +182 +185 +185 +184 +184 +185 +189 +188 +191 +191 +190 +194 +194 +196 +197 +196 +198 +199 +200 +200 +201 +200 +200 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +207 +206 +207 +207 +204 +205 +204 +204 +202 +203 +202 +200 +200 +200 +200 +200 +199 +198 +199 +198 +198 +196 +196 +194 +194 +195 +190 +191 +189 +188 +186 +185 +185 +183 +183 +178 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +156 +157 +157 +151 +151 +147 +147 +144 +143 +143 +140 +139 +133 +133 +133 +129 +129 +125 +125 +126 +119 +119 +115 +116 +116 +109 +109 +106 +106 +106 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +59 +58 +55 +55 +55 +51 +51 +47 +46 +43 +42 +43 +41 +41 +37 +37 +37 +33 +33 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +22 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +13 +13 +14 +14 +13 +14 +13 +14 +13 +13 +13 +13 +14 +14 +14 +14 +14 +13 +13 +13 +13 +13 +13 +14 +13 +15 +15 +15 +15 +15 +17 +17 +17 +19 +19 +21 +21 +24 +25 +25 +28 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +42 +43 +47 +47 +51 +51 +51 +55 +54 +59 +59 +64 +65 +65 +68 +68 +72 +72 +73 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +105 +110 +109 +115 +116 +116 +120 +120 +125 +126 +125 +129 +129 +133 +133 +134 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +182 +183 +185 +185 +185 +189 +189 +191 +191 +191 +194 +195 +197 +197 +198 +198 +198 +200 +200 +200 +200 +200 +202 +202 +204 +204 +204 +204 +205 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +203 +202 +202 +202 +200 +201 +201 +201 +200 +198 +199 +196 +197 +195 +194 +195 +191 +190 +188 +189 +189 +185 +185 +183 +183 +182 +179 +179 +176 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +158 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +125 +126 +120 +120 +119 +115 +116 +110 +109 +106 +105 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +83 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +59 +55 +55 +54 +51 +50 +47 +47 +46 +43 +43 +41 +40 +41 +37 +36 +33 +33 +33 +31 +31 +27 +26 +27 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +14 +14 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +14 +13 +14 +14 +14 +14 +13 +13 +13 +13 +12 +15 +15 +17 +17 +18 +19 +19 +21 +22 +25 +25 +26 +28 +27 +31 +31 +31 +34 +33 +36 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +54 +55 +55 +59 +59 +65 +64 +64 +68 +68 +72 +72 +73 +76 +76 +82 +82 +83 +86 +86 +90 +90 +91 +96 +96 +100 +100 +106 +105 +106 +109 +110 +115 +116 +116 +119 +119 +125 +125 +125 +129 +129 +133 +134 +133 +139 +139 +143 +143 +144 +147 +147 +151 +151 +158 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +179 +183 +183 +184 +184 +184 +188 +189 +191 +191 +195 +194 +195 +196 +196 +198 +199 +198 +200 +201 +201 +200 +200 +200 +200 +202 +202 +202 +205 +205 +204 +204 +205 +206 +205 +206 +206 +207 +206 +207 +207 +206 +206 +207 +206 +206 +206 +207 +206 +206 +205 +204 +204 +204 +205 +203 +203 +200 +200 +200 +201 +201 +198 +198 +197 +196 +197 +195 +195 +190 +190 +191 +189 +188 +185 +184 +185 +183 +183 +179 +179 +179 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +126 +126 +120 +119 +119 +115 +115 +109 +110 +110 +106 +106 +100 +100 +100 +97 +96 +90 +90 +90 +86 +86 +82 +82 +82 +77 +77 +72 +72 +69 +68 +68 +65 +65 +58 +58 +59 +55 +55 +51 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +38 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +14 +13 +13 +14 +13 +14 +13 +13 +14 +14 +13 +14 +13 +13 +14 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +32 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +51 +51 +55 +54 +54 +58 +58 +64 +64 +65 +68 +68 +72 +72 +72 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +109 +116 +116 +115 +120 +120 +126 +125 +125 +129 +130 +133 +133 +140 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +172 +173 +174 +175 +175 +179 +179 +183 +183 +183 +185 +185 +188 +189 +189 +191 +190 +194 +195 +194 +196 +196 +198 +199 +198 +201 +200 +201 +201 +201 +203 +203 +204 +204 +204 +204 +204 +206 +207 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +207 +207 +206 +206 +204 +204 +205 +204 +205 +203 +202 +201 +200 +200 +200 +200 +198 +198 +198 +197 +196 +195 +194 +194 +190 +191 +189 +188 +189 +185 +185 +182 +183 +179 +179 +179 +175 +175 +173 +173 +173 +168 +169 +165 +165 +164 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +144 +139 +139 +134 +133 +133 +129 +129 +126 +125 +125 +120 +119 +115 +116 +116 +110 +110 +106 +106 +106 +100 +100 +95 +96 +96 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +58 +59 +54 +54 +54 +51 +50 +47 +46 +48 +42 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +16 +15 +15 +15 +14 +13 +12 +12 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +14 +14 +14 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +37 +40 +41 +41 +43 +43 +47 +47 +47 +51 +50 +54 +55 +55 +58 +59 +64 +64 +64 +68 +68 +73 +72 +77 +76 +77 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +115 +116 +119 +119 +125 +126 +130 +129 +129 +133 +133 +139 +139 +139 +143 +144 +148 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +166 +168 +169 +173 +173 +174 +175 +175 +179 +179 +182 +183 +182 +184 +185 +185 +184 +185 +189 +189 +191 +191 +191 +195 +194 +196 +197 +197 +198 +199 +200 +200 +200 +201 +201 +202 +202 +204 +204 +204 +204 +204 +205 +204 +204 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +204 +205 +204 +204 +204 +203 +202 +203 +200 +200 +200 +201 +200 +199 +197 +197 +196 +197 +195 +194 +191 +191 +188 +188 +189 +184 +184 +183 +182 +183 +178 +179 +175 +175 +175 +172 +172 +169 +169 +169 +164 +165 +161 +161 +161 +157 +157 +151 +151 +148 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +130 +125 +125 +120 +119 +119 +116 +115 +110 +110 +110 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +77 +76 +73 +72 +68 +68 +69 +64 +64 +59 +59 +59 +55 +54 +51 +51 +47 +47 +46 +43 +43 +41 +41 +41 +37 +37 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +12 +13 +13 +13 +13 +13 +14 +14 +14 +14 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +14 +13 +13 +14 +13 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +40 +41 +43 +42 +47 +47 +47 +51 +50 +54 +54 +58 +58 +58 +65 +65 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +105 +110 +110 +110 +115 +116 +120 +120 +119 +125 +125 +130 +129 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +148 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +174 +175 +175 +178 +179 +183 +182 +182 +185 +185 +189 +189 +189 +191 +191 +194 +194 +196 +196 +196 +199 +198 +200 +200 +201 +200 +201 +201 +201 +201 +202 +202 +204 +204 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +204 +205 +204 +204 +205 +203 +203 +201 +201 +201 +200 +200 +198 +198 +196 +196 +197 +194 +194 +190 +190 +190 +189 +189 +185 +185 +185 +183 +183 +179 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +134 +133 +134 +129 +129 +126 +125 +126 +119 +120 +116 +110 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +74 +68 +68 +64 +64 +59 +59 +58 +54 +54 +50 +51 +51 +47 +46 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +32 +30 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +17 +17 +17 +15 +15 +15 +14 +15 +13 +13 +12 +13 +14 +14 +13 +14 +14 +14 +13 +14 +14 +13 +14 +14 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +14 +14 +13 +13 +15 +15 +17 +17 +19 +19 +19 +21 +21 +21 +21 +21 +25 +25 +27 +27 +27 +31 +30 +33 +33 +33 +37 +37 +41 +41 +43 +43 +42 +47 +46 +51 +51 +51 +54 +55 +54 +54 +55 +58 +58 +65 +64 +64 +69 +68 +72 +72 +72 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +95 +100 +100 +106 +106 +105 +110 +110 +115 +116 +116 +119 +119 +125 +125 +125 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +151 +151 +151 +157 +157 +162 +161 +161 +165 +165 +169 +169 +170 +173 +173 +175 +175 +178 +179 +179 +183 +182 +185 +185 +185 +189 +189 +189 +188 +188 +190 +190 +194 +195 +195 +196 +197 +199 +199 +200 +200 +201 +200 +200 +202 +203 +202 +204 +204 +204 +204 +204 +206 +206 +207 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +206 +204 +204 +204 +205 +204 +203 +202 +202 +200 +200 +200 +201 +200 +198 +199 +197 +197 +196 +194 +195 +191 +191 +191 +189 +189 +184 +184 +182 +183 +182 +179 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +140 +139 +139 +133 +133 +129 +129 +130 +126 +125 +120 +119 +120 +116 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +87 +86 +86 +82 +82 +76 +76 +76 +72 +72 +72 +72 +72 +69 +68 +64 +64 +64 +59 +58 +54 +55 +55 +51 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +33 +33 +33 +31 +31 +26 +27 +27 +25 +25 +20 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +14 +14 +14 +13 +14 +13 +14 +13 +13 +14 +13 +14 +14 +13 +13 +14 +13 +13 +14 +14 +14 +14 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +50 +50 +54 +55 +55 +59 +58 +64 +64 +69 +68 +69 +72 +72 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +120 +119 +120 +126 +125 +129 +130 +129 +134 +134 +133 +134 +133 +140 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +165 +165 +166 +169 +169 +173 +172 +173 +175 +175 +175 +175 +174 +179 +179 +183 +183 +182 +185 +185 +189 +188 +189 +190 +191 +195 +194 +196 +196 +197 +198 +198 +201 +201 +200 +201 +200 +203 +202 +203 +204 +204 +204 +204 +205 +206 +207 +206 +207 +206 +207 +206 +206 +206 +207 +207 +206 +206 +206 +205 +205 +204 +205 +204 +202 +203 +203 +200 +200 +201 +201 +200 +198 +198 +197 +196 +195 +195 +194 +191 +190 +189 +189 +188 +185 +185 +183 +183 +182 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +158 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +134 +133 +129 +129 +129 +125 +125 +119 +120 +120 +115 +115 +110 +109 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +71 +68 +69 +64 +65 +59 +59 +59 +55 +55 +51 +51 +50 +47 +46 +47 +47 +47 +43 +43 +41 +41 +40 +37 +37 +33 +33 +31 +31 +30 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +13 +14 +14 +14 +14 +13 +14 +13 +14 +14 +14 +13 +13 +13 +13 +14 +14 +14 +14 +14 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +40 +41 +43 +42 +47 +46 +51 +51 +50 +54 +55 +58 +58 +59 +64 +65 +68 +68 +68 +72 +72 +77 +76 +77 +82 +82 +86 +86 +86 +90 +90 +96 +96 +101 +100 +100 +106 +106 +110 +110 +110 +116 +115 +115 +116 +116 +119 +119 +125 +125 +125 +129 +130 +134 +133 +132 +139 +139 +143 +144 +148 +147 +147 +151 +151 +157 +157 +157 +161 +161 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +176 +179 +179 +183 +183 +184 +184 +184 +189 +188 +190 +191 +191 +195 +195 +197 +197 +197 +198 +199 +201 +201 +201 +201 +201 +203 +203 +204 +205 +204 +204 +204 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +207 +206 +206 +204 +205 +205 +204 +204 +202 +202 +201 +201 +200 +201 +200 +198 +198 +198 +197 +196 +194 +194 +195 +190 +190 +189 +188 +188 +185 +185 +183 +182 +183 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +141 +133 +133 +129 +129 +125 +125 +125 +119 +120 +116 +116 +115 +109 +110 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +88 +86 +86 +82 +82 +76 +76 +76 +73 +72 +68 +68 +69 +64 +64 +64 +64 +64 +58 +58 +55 +54 +54 +51 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +14 +14 +14 +14 +13 +13 +13 +14 +13 +14 +14 +14 +13 +14 +14 +13 +13 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +30 +33 +33 +33 +37 +37 +41 +41 +41 +43 +42 +47 +47 +47 +51 +51 +54 +55 +55 +58 +59 +64 +64 +64 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +116 +117 +120 +120 +125 +125 +129 +129 +129 +133 +134 +139 +139 +139 +143 +143 +143 +143 +143 +147 +147 +151 +152 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +182 +185 +185 +184 +189 +189 +191 +191 +190 +194 +194 +196 +197 +198 +198 +198 +200 +200 +200 +200 +200 +203 +203 +205 +204 +204 +204 +204 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +203 +204 +202 +202 +200 +201 +200 +200 +201 +199 +198 +198 +196 +197 +194 +195 +194 +190 +191 +189 +188 +184 +185 +185 +183 +183 +179 +178 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +158 +151 +151 +148 +147 +143 +143 +143 +140 +139 +134 +133 +133 +129 +129 +129 +129 +130 +125 +125 +119 +120 +119 +115 +115 +110 +110 +108 +106 +106 +100 +100 +95 +96 +96 +90 +90 +86 +86 +86 +83 +83 +82 +82 +82 +76 +76 +72 +72 +73 +68 +68 +64 +65 +61 +58 +58 +54 +54 +51 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +14 +13 +13 +13 +14 +13 +14 +13 +14 +13 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +14 +13 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +26 +25 +25 +28 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +42 +43 +46 +47 +50 +50 +51 +54 +55 +58 +59 +65 +65 +64 +68 +69 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +95 +100 +100 +102 +106 +105 +110 +110 +115 +116 +116 +120 +120 +125 +125 +126 +129 +129 +129 +129 +130 +134 +133 +139 +139 +139 +143 +143 +147 +147 +148 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +176 +174 +175 +179 +179 +183 +183 +183 +185 +185 +189 +188 +190 +190 +190 +195 +194 +196 +196 +197 +198 +198 +200 +200 +200 +200 +200 +202 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +207 +206 +205 +204 +204 +204 +205 +203 +202 +202 +201 +200 +200 +201 +201 +198 +199 +196 +197 +195 +194 +195 +191 +190 +188 +189 +189 +185 +184 +183 +182 +183 +178 +179 +175 +175 +174 +172 +173 +169 +169 +169 +165 +165 +161 +161 +158 +157 +157 +151 +151 +147 +147 +147 +143 +143 +143 +143 +143 +139 +139 +133 +133 +134 +129 +129 +125 +125 +125 +120 +120 +116 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +73 +72 +72 +68 +68 +64 +64 +64 +59 +58 +54 +54 +54 +50 +50 +47 +47 +46 +43 +42 +41 +41 +41 +37 +36 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +14 +14 +14 +14 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +14 +14 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +25 +26 +25 +27 +27 +31 +31 +31 +33 +33 +37 +36 +38 +40 +41 +43 +43 +47 +47 +46 +50 +50 +54 +55 +54 +58 +58 +59 +59 +59 +65 +64 +68 +68 +68 +72 +72 +77 +77 +77 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +105 +106 +106 +110 +110 +116 +115 +116 +119 +120 +125 +126 +129 +130 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +176 +175 +175 +179 +178 +183 +183 +183 +185 +185 +189 +189 +188 +191 +191 +195 +194 +194 +196 +196 +198 +198 +198 +201 +200 +201 +200 +203 +203 +203 +204 +204 +204 +204 +204 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +204 +205 +205 +204 +205 +202 +202 +200 +200 +200 +200 +200 +199 +199 +198 +196 +197 +194 +195 +195 +190 +191 +189 +188 +189 +185 +185 +183 +183 +178 +179 +179 +175 +175 +173 +173 +173 +169 +169 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +139 +139 +139 +134 +133 +130 +129 +129 +126 +125 +126 +126 +125 +119 +119 +116 +116 +116 +110 +110 +106 +106 +101 +100 +100 +96 +96 +90 +90 +90 +86 +87 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +65 +59 +58 +55 +54 +51 +50 +50 +46 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +17 +17 +18 +15 +15 +15 +15 +15 +13 +13 +12 +12 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +13 +14 +13 +12 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +24 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +41 +41 +41 +43 +42 +47 +46 +46 +50 +50 +54 +54 +56 +58 +58 +65 +65 +68 +69 +69 +72 +72 +76 +76 +76 +82 +82 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +105 +106 +106 +110 +109 +115 +116 +116 +120 +121 +126 +126 +125 +129 +130 +133 +133 +133 +139 +140 +143 +143 +143 +147 +147 +151 +151 +156 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +178 +183 +182 +184 +185 +185 +189 +189 +191 +191 +195 +194 +195 +197 +196 +198 +198 +198 +200 +200 +201 +200 +201 +202 +202 +204 +205 +204 +205 +205 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +204 +204 +204 +204 +204 +202 +203 +201 +201 +201 +200 +201 +198 +199 +200 +196 +196 +195 +195 +191 +190 +190 +188 +189 +185 +185 +185 +183 +183 +183 +183 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +167 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +143 +144 +144 +139 +139 +133 +133 +134 +129 +129 +125 +125 +120 +119 +119 +116 +115 +110 +110 +110 +105 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +68 +68 +68 +64 +65 +59 +59 +59 +55 +54 +50 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +14 +14 +13 +13 +14 +14 +14 +14 +14 +13 +13 +14 +13 +13 +13 +13 +14 +13 +13 +15 +15 +17 +17 +20 +19 +19 +22 +21 +25 +25 +25 +27 +27 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +42 +47 +47 +50 +50 +50 +54 +54 +59 +58 +59 +64 +64 +64 +64 +64 +69 +68 +72 +72 +73 +76 +76 +82 +82 +83 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +111 +115 +115 +116 +120 +120 +125 +126 +126 +129 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +160 +161 +165 +165 +165 +169 +169 +173 +173 +172 +175 +175 +179 +179 +182 +182 +183 +185 +184 +188 +188 +188 +191 +190 +195 +194 +194 +196 +196 +199 +199 +198 +200 +200 +201 +200 +201 +202 +203 +204 +204 +205 +204 +204 +206 +207 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +204 +204 +205 +205 +205 +202 +202 +200 +200 +200 +200 +200 +198 +199 +196 +196 +197 +195 +195 +191 +190 +190 +188 +189 +185 +184 +185 +182 +183 +179 +179 +177 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +134 +133 +133 +129 +130 +125 +125 +126 +119 +119 +116 +116 +116 +110 +110 +106 +106 +105 +100 +100 +96 +96 +97 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +68 +68 +68 +64 +65 +58 +58 +58 +54 +55 +51 +50 +51 +47 +47 +43 +42 +42 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +14 +14 +14 +13 +14 +13 +14 +14 +13 +14 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +13 +14 +13 +15 +15 +15 +17 +17 +19 +18 +18 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +46 +47 +50 +51 +51 +51 +50 +54 +55 +58 +58 +59 +65 +65 +68 +68 +72 +73 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +116 +119 +119 +125 +125 +126 +130 +129 +129 +129 +130 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +178 +178 +183 +183 +182 +184 +184 +188 +189 +188 +190 +191 +194 +195 +194 +196 +196 +199 +199 +201 +200 +200 +201 +200 +203 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +205 +204 +204 +205 +204 +203 +202 +202 +200 +201 +201 +200 +200 +199 +199 +196 +196 +197 +194 +194 +190 +191 +189 +189 +189 +184 +184 +182 +182 +183 +178 +178 +175 +175 +175 +173 +173 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +154 +151 +151 +147 +147 +143 +143 +143 +139 +139 +134 +133 +133 +129 +129 +125 +125 +125 +119 +119 +116 +116 +116 +109 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +77 +72 +72 +72 +68 +69 +64 +65 +64 +58 +59 +55 +54 +51 +51 +50 +46 +47 +43 +43 +43 +41 +41 +37 +37 +38 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +14 +14 +14 +13 +14 +14 +13 +14 +13 +13 +14 +13 +13 +13 +14 +13 +13 +13 +14 +14 +13 +14 +13 +12 +15 +15 +17 +17 +18 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +33 +33 +33 +37 +37 +40 +41 +40 +43 +43 +47 +47 +49 +50 +50 +55 +55 +58 +59 +58 +64 +64 +68 +69 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +97 +99 +100 +100 +106 +106 +110 +109 +110 +116 +116 +120 +119 +119 +125 +125 +129 +129 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +165 +165 +165 +169 +169 +173 +173 +172 +174 +175 +178 +179 +179 +183 +182 +185 +185 +185 +184 +185 +189 +188 +190 +190 +190 +195 +195 +196 +196 +196 +198 +198 +200 +200 +200 +201 +201 +202 +202 +203 +205 +204 +204 +204 +207 +207 +207 +207 +206 +206 +205 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +204 +204 +204 +204 +205 +203 +203 +200 +201 +200 +200 +200 +198 +199 +196 +196 +196 +194 +194 +195 +195 +194 +190 +191 +188 +188 +189 +185 +185 +182 +183 +181 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +133 +134 +134 +129 +129 +125 +125 +126 +119 +119 +116 +116 +115 +109 +109 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +82 +82 +82 +76 +77 +72 +72 +72 +68 +68 +64 +64 +64 +58 +59 +54 +55 +54 +51 +51 +47 +47 +47 +43 +43 +41 +40 +38 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +22 +19 +19 +19 +17 +17 +15 +15 +16 +15 +15 +13 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +14 +14 +14 +13 +13 +14 +14 +13 +14 +14 +13 +13 +13 +14 +13 +13 +14 +14 +13 +13 +14 +14 +13 +15 +16 +15 +17 +17 +17 +17 +17 +18 +19 +21 +21 +21 +24 +25 +27 +27 +30 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +50 +51 +55 +55 +59 +59 +59 +65 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +110 +109 +115 +115 +120 +119 +125 +125 +125 +129 +129 +133 +134 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +173 +173 +172 +175 +175 +179 +178 +179 +182 +182 +185 +185 +184 +189 +188 +190 +190 +190 +194 +195 +196 +196 +196 +199 +199 +200 +201 +201 +201 +200 +202 +202 +204 +204 +205 +204 +204 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +203 +200 +200 +201 +200 +201 +200 +200 +198 +198 +198 +197 +196 +194 +194 +191 +190 +191 +188 +188 +185 +184 +185 +182 +183 +183 +183 +182 +178 +178 +175 +175 +175 +173 +172 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +125 +119 +120 +115 +115 +110 +110 +110 +106 +106 +99 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +69 +69 +64 +64 +59 +59 +58 +54 +55 +51 +50 +51 +47 +46 +47 +47 +46 +43 +43 +40 +41 +41 +37 +37 +33 +33 +32 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +13 +14 +14 +14 +13 +13 +13 +14 +13 +14 +13 +14 +13 +13 +14 +14 +14 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +30 +33 +33 +33 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +50 +50 +54 +54 +59 +58 +58 +64 +64 +68 +68 +68 +73 +72 +76 +76 +76 +82 +82 +86 +87 +91 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +115 +119 +120 +120 +125 +125 +129 +130 +130 +133 +134 +139 +139 +144 +143 +143 +147 +147 +151 +151 +151 +157 +157 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +183 +182 +182 +185 +185 +188 +189 +189 +191 +190 +195 +195 +195 +196 +197 +198 +198 +198 +200 +201 +200 +200 +201 +202 +203 +205 +204 +205 +204 +205 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +205 +204 +204 +202 +202 +200 +200 +200 +200 +200 +199 +198 +198 +196 +197 +195 +194 +195 +190 +191 +189 +188 +189 +185 +185 +183 +183 +179 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +134 +133 +133 +129 +129 +125 +125 +125 +119 +119 +115 +116 +116 +110 +110 +106 +106 +106 +100 +100 +95 +96 +96 +91 +90 +86 +86 +83 +82 +82 +76 +76 +76 +76 +76 +72 +72 +68 +69 +68 +64 +64 +58 +58 +59 +55 +55 +51 +51 +51 +47 +47 +43 +42 +42 +41 +41 +37 +37 +33 +33 +33 +31 +31 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +20 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +14 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +13 +13 +13 +14 +13 +14 +14 +14 +14 +13 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +40 +41 +43 +43 +46 +46 +47 +50 +51 +54 +55 +55 +59 +58 +64 +64 +69 +69 +69 +72 +72 +76 +77 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +116 +120 +119 +119 +125 +125 +129 +130 +129 +133 +133 +139 +140 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +158 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +178 +179 +179 +182 +183 +184 +184 +185 +188 +189 +190 +191 +192 +194 +195 +197 +196 +198 +198 +199 +200 +199 +200 +200 +200 +202 +202 +203 +203 +203 +205 +204 +204 +204 +205 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +206 +206 +207 +206 +205 +204 +204 +204 +205 +203 +202 +202 +201 +200 +200 +201 +201 +198 +199 +197 +197 +195 +195 +195 +191 +190 +189 +188 +189 +185 +184 +182 +183 +182 +179 +178 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +152 +151 +147 +147 +147 +143 +143 +139 +139 +139 +134 +133 +129 +130 +129 +125 +125 +120 +120 +120 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +73 +72 +68 +68 +69 +64 +64 +59 +58 +54 +54 +55 +51 +50 +47 +47 +47 +43 +43 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +29 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +16 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +14 +13 +13 +13 +14 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +14 +14 +14 +13 +13 +14 +13 +14 +13 +13 +15 +15 +16 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +46 +47 +50 +51 +51 +54 +55 +59 +59 +58 +64 +64 +69 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +87 +90 +90 +95 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +116 +119 +120 +119 +125 +125 +129 +129 +130 +133 +133 +139 +139 +140 +143 +143 +147 +147 +152 +151 +151 +157 +157 +161 +161 +161 +165 +165 +165 +165 +165 +169 +169 +172 +173 +173 +175 +175 +179 +179 +179 +183 +183 +184 +185 +189 +189 +188 +191 +191 +194 +194 +194 +196 +196 +196 +196 +196 +198 +198 +201 +200 +201 +201 +200 +203 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +205 +204 +205 +202 +203 +200 +200 +201 +200 +201 +198 +198 +199 +196 +197 +195 +195 +194 +190 +190 +189 +188 +188 +185 +185 +182 +183 +182 +178 +179 +175 +174 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +140 +133 +134 +129 +129 +126 +125 +125 +119 +119 +116 +116 +115 +110 +110 +106 +106 +105 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +77 +73 +72 +72 +68 +68 +68 +69 +68 +64 +64 +58 +59 +58 +54 +54 +50 +51 +51 +47 +47 +43 +42 +43 +41 +40 +37 +37 +32 +33 +32 +31 +30 +27 +27 +27 +25 +25 +25 +24 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +14 +14 +14 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +14 +14 +13 +14 +13 +13 +13 +13 +13 +13 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +38 +37 +37 +41 +41 +43 +43 +43 +46 +47 +51 +51 +51 +54 +54 +58 +59 +59 +65 +64 +68 +69 +68 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +105 +110 +110 +110 +115 +115 +119 +119 +120 +126 +125 +129 +130 +133 +134 +133 +139 +139 +143 +143 +143 +147 +147 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +166 +169 +169 +173 +173 +174 +175 +174 +179 +178 +182 +183 +182 +184 +184 +185 +184 +185 +188 +188 +190 +191 +190 +194 +195 +196 +196 +198 +198 +199 +201 +200 +200 +200 +200 +202 +203 +204 +205 +204 +204 +204 +207 +207 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +204 +205 +204 +204 +204 +203 +202 +201 +201 +200 +200 +200 +198 +199 +198 +196 +197 +195 +194 +195 +190 +191 +189 +189 +185 +185 +184 +183 +183 +183 +182 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +148 +147 +147 +143 +143 +139 +139 +139 +133 +133 +133 +133 +133 +129 +129 +125 +125 +125 +119 +119 +116 +115 +116 +110 +110 +105 +106 +100 +100 +100 +96 +96 +90 +90 +90 +87 +86 +86 +86 +86 +82 +82 +76 +76 +76 +72 +73 +68 +68 +67 +64 +64 +58 +59 +55 +55 +55 +50 +50 +47 +47 +47 +43 +43 +43 +43 +43 +41 +41 +37 +37 +37 +32 +33 +31 +31 +31 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +13 +14 +14 +13 +14 +13 +13 +13 +14 +14 +13 +13 +14 +14 +14 +13 +14 +13 +13 +13 +14 +14 +14 +13 +13 +12 +15 +15 +17 +17 +20 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +55 +55 +55 +59 +59 +65 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +106 +106 +106 +109 +109 +116 +116 +116 +120 +120 +120 +120 +119 +126 +125 +129 +130 +129 +133 +133 +139 +139 +140 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +180 +183 +183 +185 +184 +188 +188 +188 +190 +191 +195 +194 +194 +196 +197 +199 +198 +199 +200 +201 +200 +201 +201 +203 +203 +204 +204 +204 +204 +205 +206 +207 +206 +206 +207 +206 +206 +206 +207 +206 +207 +206 +206 +207 +206 +204 +204 +204 +204 +204 +202 +203 +200 +200 +201 +200 +201 +199 +199 +196 +196 +196 +195 +195 +191 +191 +190 +189 +189 +185 +185 +184 +183 +183 +179 +179 +179 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +134 +129 +129 +125 +125 +119 +120 +119 +116 +115 +110 +110 +110 +106 +106 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +84 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +64 +58 +58 +59 +59 +59 +54 +54 +51 +51 +51 +47 +47 +43 +43 +41 +41 +41 +37 +37 +34 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +18 +15 +15 +15 +15 +14 +13 +13 +12 +13 +13 +13 +14 +13 +14 +13 +13 +14 +14 +14 +14 +14 +14 +14 +13 +13 +14 +14 +13 +13 +13 +14 +14 +13 +14 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +42 +41 +41 +43 +43 +46 +47 +46 +51 +50 +51 +51 +50 +54 +54 +58 +59 +59 +65 +64 +69 +68 +68 +73 +72 +76 +76 +83 +82 +82 +86 +86 +90 +90 +90 +96 +96 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +118 +120 +119 +125 +125 +130 +129 +130 +133 +133 +139 +139 +139 +143 +143 +143 +143 +143 +147 +147 +151 +151 +152 +157 +157 +161 +161 +162 +165 +165 +169 +169 +172 +173 +173 +175 +175 +179 +179 +179 +182 +182 +185 +184 +184 +188 +188 +190 +191 +191 +195 +195 +196 +197 +198 +198 +198 +200 +200 +200 +200 +201 +203 +202 +204 +204 +204 +204 +204 +207 +207 +206 +207 +206 +206 +207 +206 +206 +207 +207 +206 +206 +206 +206 +204 +204 +204 +205 +204 +202 +202 +201 +200 +200 +200 +200 +198 +198 +198 +196 +197 +194 +194 +194 +191 +190 +188 +189 +185 +185 +185 +183 +183 +179 +179 +179 +175 +174 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +158 +151 +151 +147 +147 +144 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +126 +125 +119 +120 +116 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +90 +89 +90 +86 +86 +82 +82 +82 +76 +77 +76 +76 +76 +72 +72 +68 +69 +69 +64 +64 +58 +58 +55 +54 +54 +51 +50 +47 +47 +47 +43 +42 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +22 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +14 +13 +14 +14 +13 +14 +14 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +28 +27 +27 +31 +31 +33 +33 +33 +37 +37 +40 +41 +41 +43 +43 +47 +47 +47 +50 +51 +54 +54 +54 +58 +58 +64 +65 +69 +69 +68 +72 +72 +76 +76 +76 +82 +82 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +115 +116 +116 +120 +119 +125 +125 +125 +129 +130 +130 +129 +129 +133 +134 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +172 +173 +175 +175 +175 +179 +178 +183 +183 +183 +185 +185 +189 +188 +190 +191 +191 +194 +194 +196 +196 +197 +199 +199 +198 +198 +198 +200 +200 +200 +200 +200 +202 +203 +204 +205 +204 +204 +205 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +205 +204 +205 +205 +204 +202 +202 +200 +201 +201 +200 +201 +199 +198 +197 +197 +197 +194 +195 +190 +191 +190 +189 +189 +185 +185 +184 +182 +183 +179 +179 +179 +174 +175 +173 +173 +173 +169 +169 +165 +165 +160 +161 +161 +158 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +122 +119 +120 +116 +116 +109 +109 +110 +106 +106 +100 +100 +100 +96 +96 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +73 +72 +72 +68 +68 +65 +64 +64 +59 +58 +54 +55 +55 +50 +51 +47 +47 +47 +42 +43 +41 +41 +41 +37 +37 +33 +32 +30 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +14 +13 +12 +13 +14 +13 +14 +13 +14 +14 +13 +14 +14 +14 +13 +13 +13 +13 +13 +13 +14 +14 +14 +13 +14 +13 +14 +14 +14 +13 +13 +15 +15 +18 +17 +17 +19 +19 +21 +21 +21 +25 +25 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +38 +41 +40 +43 +43 +47 +47 +46 +50 +51 +54 +55 +55 +59 +58 +58 +59 +58 +64 +65 +68 +68 +68 +72 +72 +76 +77 +79 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +105 +105 +105 +106 +110 +110 +116 +115 +115 +119 +119 +126 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +164 +166 +169 +169 +173 +172 +174 +175 +175 +179 +179 +183 +182 +182 +184 +184 +188 +189 +188 +190 +190 +195 +195 +195 +196 +196 +198 +198 +199 +200 +200 +200 +200 +202 +203 +202 +204 +205 +204 +204 +205 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +207 +206 +204 +204 +204 +204 +205 +202 +202 +200 +200 +200 +200 +200 +199 +199 +198 +196 +197 +195 +195 +194 +190 +190 +188 +189 +189 +184 +184 +182 +182 +178 +178 +179 +175 +175 +172 +173 +173 +169 +169 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +152 +147 +147 +143 +143 +139 +140 +139 +133 +133 +129 +129 +129 +125 +125 +125 +125 +126 +120 +119 +116 +116 +115 +110 +110 +105 +106 +101 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +67 +68 +64 +64 +64 +59 +58 +55 +54 +51 +51 +51 +47 +46 +43 +43 +42 +41 +41 +37 +36 +36 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +20 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +14 +13 +13 +14 +13 +13 +13 +14 +14 +13 +13 +14 +13 +14 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +26 +27 +27 +31 +31 +33 +33 +33 +37 +37 +40 +41 +41 +43 +43 +47 +47 +46 +50 +50 +55 +54 +56 +58 +58 +64 +64 +68 +69 +68 +72 +72 +76 +76 +76 +82 +82 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +99 +100 +105 +106 +106 +110 +110 +115 +115 +115 +120 +119 +125 +125 +125 +129 +129 +133 +134 +133 +140 +140 +143 +143 +144 +147 +147 +151 +151 +156 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +172 +172 +175 +174 +179 +179 +179 +182 +183 +185 +184 +184 +189 +188 +190 +190 +195 +194 +194 +197 +196 +198 +198 +199 +200 +200 +200 +201 +201 +202 +202 +204 +204 +204 +205 +204 +206 +206 +206 +206 +207 +207 +206 +207 +207 +206 +206 +206 +207 +206 +207 +204 +204 +204 +204 +204 +202 +202 +201 +201 +200 +200 +200 +198 +198 +200 +197 +196 +195 +194 +191 +190 +191 +189 +188 +184 +185 +185 +183 +183 +179 +178 +179 +175 +175 +173 +173 +173 +168 +169 +165 +164 +165 +161 +161 +157 +157 +153 +151 +151 +147 +147 +143 +144 +143 +139 +139 +139 +139 +139 +133 +133 +129 +129 +129 +125 +125 +120 +120 +117 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +72 +72 +68 +68 +64 +65 +65 +59 +58 +54 +54 +54 +50 +50 +47 +47 +46 +42 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +26 +26 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +13 +14 +13 +13 +14 +13 +14 +14 +13 +14 +13 +13 +14 +13 +14 +13 +14 +14 +14 +13 +13 +13 +13 +14 +13 +12 +15 +15 +16 +17 +17 +19 +19 +20 +21 +21 +25 +25 +27 +27 +27 +31 +31 +30 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +44 +47 +47 +50 +50 +55 +54 +54 +58 +58 +65 +64 +64 +68 +68 +68 +69 +68 +72 +72 +76 +76 +76 +82 +82 +86 +87 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +109 +115 +115 +119 +119 +119 +126 +125 +129 +129 +130 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +160 +161 +161 +165 +165 +169 +169 +169 +173 +173 +174 +175 +174 +179 +179 +183 +182 +185 +185 +185 +189 +189 +190 +190 +191 +194 +194 +197 +196 +197 +198 +199 +200 +201 +201 +201 +200 +202 +203 +203 +204 +204 +204 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +205 +205 +202 +202 +203 +201 +201 +200 +200 +198 +198 +198 +196 +197 +195 +194 +194 +191 +190 +189 +189 +188 +184 +185 +183 +183 +183 +179 +178 +175 +175 +175 +173 +172 +169 +169 +164 +165 +164 +161 +161 +157 +157 +157 +151 +151 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +132 +129 +130 +126 +126 +120 +119 +119 +116 +116 +109 +110 +109 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +80 +76 +76 +72 +72 +68 +68 +68 +64 +64 +59 +58 +59 +54 +54 +50 +50 +51 +46 +47 +42 +43 +43 +41 +41 +37 +37 +33 +33 +32 +31 +30 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +16 +13 +13 +12 +13 +14 +14 +13 +13 +14 +14 +14 +13 +13 +14 +13 +14 +14 +13 +13 +13 +14 +13 +13 +13 +13 +13 +14 +14 +13 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +20 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +34 +37 +36 +41 +41 +43 +43 +43 +47 +47 +51 +51 +51 +54 +55 +54 +55 +54 +58 +59 +65 +64 +65 +68 +68 +72 +72 +74 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +116 +116 +119 +120 +125 +125 +129 +129 +129 +134 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +175 +175 +174 +179 +178 +182 +183 +182 +185 +185 +188 +189 +188 +190 +190 +195 +195 +195 +196 +197 +198 +198 +198 +200 +200 +200 +200 +203 +202 +203 +204 +204 +204 +204 +204 +206 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +207 +204 +204 +204 +204 +203 +203 +202 +200 +200 +200 +200 +200 +198 +198 +198 +198 +198 +196 +196 +194 +195 +194 +190 +190 +189 +189 +187 +184 +185 +183 +183 +179 +179 +179 +175 +175 +173 +173 +172 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +145 +143 +143 +139 +139 +133 +133 +133 +129 +129 +126 +125 +125 +119 +120 +116 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +64 +64 +65 +58 +58 +55 +54 +55 +51 +50 +47 +47 +44 +43 +42 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +24 +25 +25 +21 +21 +19 +19 +19 +17 +16 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +13 +13 +14 +14 +13 +14 +13 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +14 +13 +14 +13 +13 +13 +14 +13 +13 +13 +15 +15 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +26 +27 +27 +31 +31 +32 +33 +33 +37 +37 +41 +41 +41 +43 +43 +43 +43 +43 +47 +47 +50 +50 +51 +54 +54 +58 +59 +64 +65 +64 +69 +69 +72 +72 +72 +77 +76 +82 +82 +82 +86 +86 +90 +90 +89 +96 +96 +100 +100 +100 +106 +106 +110 +110 +112 +116 +116 +119 +120 +125 +126 +125 +129 +129 +134 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +164 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +182 +182 +185 +185 +184 +189 +189 +190 +190 +190 +195 +194 +196 +197 +199 +199 +198 +200 +200 +200 +200 +200 +202 +202 +204 +204 +204 +204 +205 +207 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +203 +203 +202 +202 +201 +201 +200 +201 +201 +198 +198 +197 +197 +195 +194 +195 +191 +190 +188 +189 +189 +185 +185 +183 +183 +183 +179 +179 +178 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +126 +126 +126 +120 +119 +115 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +77 +76 +72 +72 +72 +72 +72 +68 +69 +64 +64 +64 +58 +58 +55 +54 +55 +50 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +26 +25 +25 +21 +22 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +13 +13 +14 +14 +14 +14 +13 +13 +13 +13 +13 +14 +14 +13 +14 +13 +14 +13 +13 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +42 +43 +43 +47 +47 +51 +51 +50 +54 +54 +58 +58 +59 +65 +65 +68 +68 +68 +72 +72 +76 +77 +76 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +115 +119 +120 +119 +125 +125 +129 +130 +129 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +152 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +185 +185 +185 +188 +188 +191 +191 +190 +194 +194 +197 +196 +197 +198 +199 +200 +200 +201 +201 +201 +202 +203 +203 +204 +205 +204 +205 +206 +207 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +204 +204 +204 +205 +204 +203 +203 +203 +201 +200 +200 +200 +198 +198 +198 +197 +196 +195 +194 +195 +191 +191 +190 +191 +190 +189 +188 +184 +185 +184 +183 +183 +179 +178 +177 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +144 +143 +139 +139 +133 +133 +129 +129 +129 +126 +125 +119 +120 +119 +115 +116 +109 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +83 +82 +76 +76 +76 +73 +72 +68 +68 +68 +64 +64 +58 +59 +59 +55 +54 +51 +51 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +34 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +14 +14 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +14 +14 +14 +14 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +21 +21 +21 +25 +25 +27 +27 +28 +31 +31 +33 +33 +36 +37 +37 +40 +41 +42 +43 +43 +47 +47 +50 +50 +50 +54 +55 +58 +58 +58 +64 +64 +68 +68 +69 +73 +72 +77 +76 +81 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +99 +99 +105 +106 +109 +109 +110 +115 +116 +119 +119 +120 +126 +126 +129 +129 +133 +134 +133 +139 +140 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +164 +165 +169 +169 +170 +173 +173 +175 +175 +179 +179 +179 +183 +183 +185 +184 +184 +188 +188 +191 +190 +191 +194 +194 +197 +196 +197 +198 +199 +200 +200 +201 +200 +201 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +207 +206 +207 +205 +205 +205 +204 +204 +202 +202 +202 +200 +201 +200 +201 +201 +198 +199 +199 +198 +199 +197 +196 +194 +195 +195 +191 +191 +188 +188 +185 +185 +185 +182 +183 +179 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +134 +133 +129 +129 +125 +125 +125 +120 +119 +116 +116 +115 +109 +110 +106 +106 +105 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +76 +76 +76 +73 +73 +68 +68 +68 +64 +64 +58 +58 +58 +54 +55 +51 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +16 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +14 +14 +14 +14 +13 +13 +14 +14 +13 +13 +13 +13 +13 +13 +14 +13 +14 +14 +14 +14 +13 +14 +14 +13 +14 +13 +13 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +28 +27 +31 +32 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +50 +50 +54 +54 +58 +58 +58 +64 +65 +69 +68 +68 +72 +73 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +105 +110 +110 +109 +116 +116 +120 +119 +119 +125 +126 +126 +125 +126 +129 +130 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +158 +157 +156 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +182 +182 +184 +185 +185 +189 +188 +190 +191 +195 +194 +194 +196 +196 +198 +198 +199 +200 +200 +200 +200 +200 +200 +201 +202 +203 +203 +204 +205 +204 +204 +205 +206 +207 +207 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +207 +206 +206 +206 +204 +205 +204 +204 +204 +202 +202 +200 +201 +200 +201 +200 +198 +198 +196 +196 +197 +195 +195 +190 +190 +190 +189 +189 +185 +184 +185 +183 +183 +179 +178 +179 +175 +175 +173 +172 +170 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +120 +120 +120 +116 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +83 +82 +82 +76 +76 +72 +72 +69 +68 +68 +64 +64 +59 +58 +58 +54 +54 +50 +50 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +14 +14 +13 +13 +14 +13 +13 +13 +13 +14 +13 +13 +14 +14 +13 +14 +13 +13 +14 +13 +13 +13 +13 +14 +13 +14 +14 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +42 +43 +42 +47 +47 +50 +50 +50 +54 +54 +55 +55 +54 +59 +59 +64 +65 +64 +68 +68 +73 +72 +72 +76 +76 +82 +82 +87 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +105 +106 +110 +110 +116 +116 +115 +119 +119 +125 +125 +126 +129 +129 +133 +133 +140 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +182 +183 +183 +184 +185 +188 +189 +189 +190 +191 +194 +195 +194 +197 +197 +198 +198 +198 +200 +200 +201 +200 +201 +202 +203 +204 +204 +205 +204 +205 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +207 +206 +207 +206 +206 +207 +204 +205 +204 +204 +205 +202 +202 +200 +201 +201 +200 +200 +198 +198 +199 +196 +196 +195 +195 +195 +191 +191 +189 +188 +189 +185 +184 +183 +183 +181 +179 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +140 +134 +133 +133 +129 +129 +125 +126 +125 +120 +120 +115 +116 +115 +109 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +90 +86 +86 +83 +82 +82 +76 +77 +72 +72 +72 +69 +68 +65 +64 +64 +59 +58 +55 +55 +55 +51 +51 +46 +46 +47 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +27 +27 +27 +25 +26 +21 +21 +21 +19 +19 +17 +17 +18 +15 +14 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +14 +14 +13 +14 +14 +13 +13 +13 +13 +14 +14 +13 +14 +13 +14 +13 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +46 +47 +51 +50 +51 +54 +54 +59 +58 +59 +64 +64 +68 +69 +73 +73 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +115 +116 +119 +119 +126 +125 +125 +129 +130 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +162 +165 +165 +169 +169 +173 +173 +173 +174 +175 +178 +179 +179 +182 +183 +182 +182 +183 +185 +184 +189 +188 +189 +191 +191 +194 +195 +195 +197 +197 +198 +198 +200 +201 +200 +200 +200 +203 +203 +202 +204 +204 +205 +204 +204 +204 +204 +206 +206 +207 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +207 +205 +204 +204 +204 +204 +203 +202 +200 +200 +201 +200 +201 +198 +199 +199 +196 +197 +194 +195 +191 +191 +190 +189 +188 +184 +185 +185 +183 +182 +178 +179 +178 +175 +175 +172 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +144 +143 +139 +139 +133 +134 +133 +129 +129 +125 +126 +125 +120 +120 +115 +115 +116 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +86 +86 +86 +82 +82 +76 +76 +76 +73 +72 +68 +69 +69 +64 +64 +59 +58 +55 +54 +54 +50 +51 +47 +47 +47 +43 +43 +43 +43 +43 +41 +41 +36 +37 +37 +33 +33 +31 +31 +29 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +13 +14 +14 +14 +14 +13 +13 +13 +14 +13 +14 +14 +13 +14 +13 +12 +15 +15 +18 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +46 +46 +51 +51 +51 +54 +55 +59 +58 +58 +64 +64 +68 +69 +69 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +109 +116 +116 +120 +119 +119 +126 +125 +129 +129 +129 +133 +133 +140 +139 +140 +143 +143 +147 +147 +151 +151 +151 +156 +157 +161 +161 +161 +165 +165 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +179 +183 +183 +185 +185 +188 +189 +188 +191 +191 +195 +194 +194 +197 +197 +196 +196 +197 +199 +198 +200 +200 +201 +201 +200 +203 +202 +204 +204 +205 +204 +205 +206 +206 +206 +206 +207 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +204 +204 +205 +204 +204 +202 +202 +201 +200 +201 +200 +200 +198 +198 +199 +197 +197 +197 +196 +197 +194 +195 +191 +190 +191 +188 +189 +184 +184 +184 +183 +183 +179 +179 +175 +175 +175 +173 +172 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +130 +129 +129 +125 +126 +120 +120 +119 +116 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +76 +72 +72 +68 +68 +68 +64 +64 +65 +64 +65 +59 +58 +54 +54 +55 +51 +50 +47 +46 +47 +43 +42 +40 +41 +38 +37 +37 +33 +33 +31 +31 +31 +27 +27 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +16 +15 +14 +16 +15 +13 +13 +13 +12 +13 +14 +14 +14 +13 +13 +13 +13 +14 +14 +13 +14 +13 +14 +13 +13 +14 +13 +13 +14 +13 +13 +14 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +37 +40 +41 +41 +43 +43 +47 +46 +47 +51 +51 +54 +55 +54 +58 +58 +64 +64 +65 +68 +68 +72 +72 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +95 +96 +96 +100 +100 +106 +106 +106 +109 +110 +116 +115 +116 +119 +120 +125 +126 +129 +129 +129 +134 +133 +139 +140 +139 +143 +143 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +162 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +182 +183 +182 +182 +182 +185 +184 +188 +189 +188 +190 +190 +194 +194 +196 +197 +197 +198 +198 +200 +201 +200 +200 +200 +202 +202 +203 +204 +204 +204 +204 +204 +206 +207 +206 +207 +207 +206 +206 +206 +206 +206 +206 +207 +206 +206 +204 +204 +204 +205 +205 +202 +202 +202 +200 +201 +200 +201 +200 +199 +198 +196 +196 +196 +194 +195 +190 +191 +189 +189 +189 +184 +184 +183 +182 +183 +178 +179 +175 +175 +174 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +148 +147 +147 +144 +143 +139 +139 +139 +134 +133 +130 +129 +129 +126 +126 +119 +119 +120 +116 +116 +109 +110 +111 +106 +106 +100 +100 +95 +96 +96 +90 +90 +86 +86 +86 +82 +82 +82 +82 +82 +76 +76 +72 +72 +72 +68 +68 +65 +64 +62 +58 +58 +55 +55 +50 +50 +51 +47 +47 +43 +43 +43 +41 +41 +40 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +16 +13 +13 +13 +12 +13 +14 +14 +14 +13 +13 +13 +14 +14 +13 +14 +14 +13 +13 +14 +13 +14 +14 +14 +13 +13 +13 +14 +14 +14 +13 +13 +12 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +47 +50 +50 +54 +54 +59 +58 +59 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +97 +100 +100 +106 +106 +110 +109 +110 +115 +115 +121 +119 +119 +125 +125 +125 +125 +125 +129 +129 +134 +133 +133 +139 +139 +143 +143 +145 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +169 +169 +169 +173 +172 +175 +175 +175 +179 +179 +183 +182 +184 +185 +185 +188 +188 +191 +190 +191 +194 +194 +196 +196 +196 +199 +198 +200 +200 +200 +200 +201 +202 +203 +203 +205 +204 +205 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +202 +200 +200 +200 +201 +199 +198 +198 +196 +197 +194 +195 +195 +190 +191 +188 +188 +188 +184 +184 +183 +183 +183 +178 +179 +175 +174 +175 +173 +172 +169 +169 +165 +164 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +130 +125 +125 +119 +119 +116 +115 +116 +109 +110 +106 +106 +106 +100 +100 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +83 +76 +76 +72 +72 +68 +68 +68 +64 +64 +59 +58 +58 +54 +54 +54 +54 +54 +51 +50 +47 +47 +47 +43 +42 +41 +40 +42 +37 +36 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +14 +14 +14 +14 +14 +13 +13 +14 +14 +14 +14 +13 +14 +13 +13 +13 +13 +14 +13 +12 +15 +14 +17 +17 +17 +19 +19 +22 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +51 +55 +55 +58 +59 +59 +64 +64 +68 +69 +69 +72 +72 +76 +76 +77 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +110 +116 +116 +119 +119 +119 +126 +126 +130 +129 +131 +133 +133 +139 +139 +144 +143 +143 +147 +147 +151 +151 +151 +157 +157 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +182 +183 +183 +184 +185 +189 +189 +189 +190 +191 +195 +194 +194 +196 +196 +198 +198 +199 +200 +200 +201 +200 +202 +203 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +207 +206 +204 +204 +204 +204 +203 +202 +202 +201 +200 +200 +200 +200 +198 +198 +197 +196 +196 +194 +194 +190 +190 +190 +188 +189 +185 +184 +185 +183 +183 +179 +178 +175 +175 +175 +173 +173 +168 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +130 +129 +129 +125 +126 +119 +119 +120 +116 +115 +116 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +93 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +72 +69 +68 +69 +68 +69 +64 +64 +58 +58 +59 +55 +54 +51 +51 +47 +47 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +13 +13 +13 +13 +13 +13 +14 +14 +14 +14 +14 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +36 +37 +41 +41 +41 +43 +43 +47 +46 +47 +50 +51 +54 +54 +55 +58 +58 +64 +64 +65 +68 +68 +72 +72 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +116 +115 +118 +120 +120 +126 +126 +130 +129 +129 +133 +133 +139 +139 +139 +143 +143 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +163 +165 +165 +169 +169 +173 +173 +173 +174 +174 +179 +178 +178 +182 +182 +185 +184 +185 +189 +189 +190 +190 +191 +195 +195 +197 +196 +197 +198 +199 +200 +200 +201 +200 +200 +202 +202 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +206 +204 +204 +204 +204 +204 +202 +202 +200 +200 +200 +200 +200 +198 +198 +198 +196 +197 +194 +194 +195 +190 +190 +188 +188 +185 +185 +184 +182 +183 +178 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +125 +119 +119 +115 +115 +115 +110 +110 +106 +105 +106 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +76 +76 +77 +72 +72 +68 +68 +69 +64 +64 +59 +59 +55 +54 +54 +50 +51 +47 +47 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +14 +13 +13 +14 +13 +14 +13 +14 +13 +13 +14 +13 +13 +13 +14 +14 +14 +14 +14 +13 +14 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +28 +27 +27 +31 +31 +33 +33 +33 +37 +37 +40 +41 +41 +43 +43 +47 +47 +47 +50 +51 +55 +54 +55 +59 +58 +64 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +82 +82 +82 +86 +86 +90 +90 +90 +96 +95 +100 +100 +102 +106 +106 +110 +110 +115 +116 +116 +119 +119 +125 +126 +125 +129 +129 +129 +129 +130 +133 +133 +139 +139 +140 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +164 +169 +169 +169 +173 +173 +175 +175 +175 +178 +179 +182 +183 +183 +185 +185 +189 +188 +191 +190 +191 +194 +195 +196 +196 +196 +198 +198 +200 +200 +201 +200 +200 +202 +202 +202 +204 +205 +205 +204 +205 +206 +207 +206 +206 +206 +206 +207 +205 +206 +206 +206 +207 +206 +206 +204 +204 +204 +204 +204 +202 +202 +202 +201 +200 +200 +200 +201 +199 +198 +196 +196 +195 +194 +194 +190 +190 +188 +188 +189 +184 +184 +183 +183 +182 +179 +179 +175 +175 +175 +172 +172 +169 +169 +169 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +143 +143 +143 +139 +139 +133 +133 +133 +129 +129 +125 +125 +123 +119 +120 +115 +116 +110 +110 +109 +106 +106 +100 +99 +100 +96 +96 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +74 +72 +72 +68 +68 +64 +64 +64 +58 +58 +55 +54 +54 +51 +51 +47 +47 +47 +43 +42 +41 +41 +41 +37 +36 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +14 +13 +13 +14 +13 +13 +13 +14 +13 +14 +13 +14 +13 +14 +14 +14 +13 +14 +13 +14 +13 +13 +14 +13 +12 +15 +15 +18 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +50 +51 +50 +54 +54 +59 +59 +58 +65 +64 +64 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +83 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +110 +110 +110 +116 +115 +119 +119 +120 +126 +125 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +162 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +179 +179 +179 +182 +183 +185 +184 +185 +188 +189 +191 +191 +191 +194 +194 +197 +197 +197 +198 +198 +200 +200 +200 +201 +201 +202 +203 +205 +204 +204 +204 +204 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +204 +205 +204 +204 +202 +202 +201 +200 +201 +200 +200 +199 +198 +198 +196 +196 +194 +194 +194 +191 +190 +189 +189 +188 +184 +185 +183 +183 +183 +179 +179 +175 +175 +174 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +148 +143 +143 +139 +140 +141 +133 +133 +129 +129 +125 +126 +125 +120 +120 +115 +116 +116 +110 +110 +110 +109 +109 +106 +106 +100 +100 +100 +96 +96 +90 +90 +91 +86 +86 +82 +82 +76 +76 +76 +72 +71 +68 +68 +68 +64 +64 +58 +59 +58 +55 +54 +51 +51 +51 +47 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +13 +13 +14 +13 +13 +14 +14 +13 +13 +13 +14 +14 +14 +14 +14 +14 +13 +14 +13 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +32 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +46 +47 +51 +51 +51 +51 +51 +55 +54 +58 +59 +58 +64 +64 +68 +68 +70 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +116 +117 +120 +120 +126 +125 +129 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +182 +185 +184 +189 +188 +188 +190 +190 +194 +194 +194 +196 +197 +198 +198 +201 +200 +200 +200 +200 +202 +202 +202 +204 +204 +204 +204 +204 +206 +207 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +207 +205 +204 +205 +204 +204 +202 +202 +202 +200 +200 +200 +201 +200 +198 +199 +196 +196 +197 +195 +195 +191 +191 +191 +188 +189 +184 +185 +183 +183 +182 +178 +179 +175 +175 +175 +173 +173 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +154 +151 +151 +147 +147 +144 +143 +143 +139 +139 +133 +133 +133 +130 +130 +129 +130 +129 +125 +125 +120 +119 +120 +116 +115 +110 +110 +106 +106 +106 +100 +100 +96 +95 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +77 +72 +72 +68 +67 +69 +65 +64 +58 +58 +55 +54 +55 +50 +51 +46 +46 +47 +43 +42 +41 +41 +40 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +14 +13 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +46 +47 +47 +50 +50 +55 +54 +56 +58 +58 +65 +65 +68 +69 +68 +72 +72 +76 +76 +76 +82 +82 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +102 +106 +105 +110 +110 +115 +115 +115 +119 +119 +126 +125 +125 +130 +129 +133 +134 +133 +139 +140 +143 +143 +143 +147 +147 +151 +151 +156 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +182 +183 +185 +185 +185 +189 +189 +190 +190 +195 +194 +195 +196 +196 +198 +198 +198 +200 +200 +200 +200 +200 +202 +202 +205 +205 +204 +204 +205 +206 +206 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +202 +200 +200 +200 +200 +201 +198 +198 +199 +196 +196 +194 +195 +190 +191 +191 +188 +188 +185 +185 +185 +183 +183 +182 +182 +182 +179 +179 +175 +175 +175 +173 +173 +169 +169 +167 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +143 +143 +143 +139 +139 +133 +133 +134 +130 +129 +125 +125 +123 +120 +120 +116 +115 +109 +109 +109 +106 +106 +100 +100 +100 +96 +96 +90 +89 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +59 +58 +54 +54 +50 +51 +51 +46 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +32 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +14 +14 +13 +14 +14 +13 +14 +13 +13 +14 +14 +14 +13 +13 +14 +13 +13 +13 +14 +13 +14 +14 +14 +13 +13 +14 +13 +12 +15 +15 +17 +17 +20 +19 +19 +21 +21 +25 +25 +25 +27 +27 +27 +27 +27 +31 +31 +33 +33 +33 +36 +36 +41 +41 +41 +43 +43 +47 +47 +51 +51 +51 +55 +54 +59 +58 +58 +64 +65 +64 +64 +65 +68 +68 +72 +72 +72 +76 +76 +82 +82 +84 +86 +86 +90 +90 +96 +96 +96 +99 +100 +106 +106 +106 +110 +110 +115 +116 +115 +119 +119 +125 +125 +126 +129 +130 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +178 +179 +183 +182 +182 +184 +184 +189 +188 +188 +190 +191 +194 +195 +194 +196 +197 +198 +198 +198 +200 +201 +200 +200 +201 +202 +202 +204 +204 +205 +204 +204 +206 +206 +206 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +204 +204 +204 +204 +205 +202 +202 +200 +200 +200 +200 +201 +198 +199 +197 +196 +197 +194 +194 +194 +194 +194 +190 +191 +189 +189 +189 +184 +185 +182 +183 +181 +178 +178 +175 +174 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +140 +139 +139 +133 +133 +129 +129 +129 +125 +126 +120 +119 +119 +116 +116 +110 +109 +110 +106 +106 +99 +100 +100 +96 +96 +90 +90 +87 +86 +86 +82 +82 +76 +76 +76 +73 +72 +68 +68 +68 +64 +64 +59 +58 +59 +54 +55 +51 +51 +51 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +18 +15 +15 +15 +15 +14 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +14 +13 +13 +14 +13 +14 +13 +14 +13 +14 +13 +15 +13 +13 +14 +13 +14 +13 +14 +13 +13 +15 +15 +15 +17 +17 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +29 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +46 +47 +46 +46 +47 +51 +50 +54 +54 +54 +59 +58 +65 +64 +67 +68 +68 +72 +73 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +115 +119 +119 +119 +125 +125 +129 +130 +129 +133 +133 +139 +140 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +169 +168 +169 +173 +173 +175 +174 +175 +178 +178 +183 +182 +183 +185 +185 +189 +188 +189 +190 +190 +195 +194 +194 +197 +196 +198 +198 +201 +200 +200 +200 +200 +202 +202 +203 +204 +205 +204 +204 +204 +206 +207 +206 +206 +207 +206 +206 +206 +206 +207 +206 +207 +206 +206 +204 +204 +204 +204 +204 +203 +202 +202 +200 +200 +200 +201 +200 +200 +200 +198 +198 +198 +196 +196 +194 +195 +192 +191 +191 +189 +189 +185 +185 +185 +182 +182 +179 +179 +179 +175 +175 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +159 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +126 +125 +120 +119 +120 +116 +116 +110 +110 +105 +106 +105 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +58 +55 +55 +54 +51 +51 +47 +47 +47 +42 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +28 +25 +25 +21 +21 +20 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +14 +13 +14 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +37 +37 +37 +41 +41 +43 +42 +43 +47 +46 +50 +51 +54 +54 +54 +58 +59 +64 +65 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +89 +90 +90 +96 +96 +100 +100 +105 +106 +106 +110 +109 +116 +116 +116 +119 +119 +125 +125 +125 +129 +129 +133 +133 +133 +140 +139 +143 +143 +143 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +174 +179 +179 +179 +183 +183 +184 +185 +185 +188 +189 +191 +190 +195 +194 +194 +196 +196 +198 +198 +198 +200 +201 +201 +200 +200 +203 +202 +204 +204 +205 +205 +204 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +207 +206 +204 +204 +204 +204 +204 +203 +202 +200 +200 +200 +200 +200 +199 +198 +196 +196 +196 +195 +195 +190 +190 +191 +188 +189 +188 +188 +188 +184 +185 +183 +182 +183 +178 +179 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +140 +134 +133 +130 +129 +126 +125 +125 +120 +119 +116 +115 +115 +110 +110 +106 +106 +106 +100 +100 +95 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +73 +72 +72 +68 +68 +64 +65 +64 +58 +58 +54 +54 +55 +50 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +36 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +14 +12 +13 +14 +13 +14 +14 +13 +13 +13 +14 +14 +13 +14 +13 +13 +14 +14 +13 +13 +13 +14 +14 +14 +13 +13 +13 +14 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +21 +21 +21 +25 +25 +27 +27 +28 +31 +31 +33 +33 +36 +37 +37 +41 +42 +43 +43 +43 +47 +47 +51 +51 +51 +55 +54 +59 +58 +59 +65 +64 +68 +68 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +106 +110 +110 +115 +116 +116 +119 +120 +125 +125 +130 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +164 +165 +169 +169 +173 +173 +174 +175 +175 +178 +179 +182 +183 +183 +185 +185 +188 +189 +188 +190 +191 +195 +195 +195 +197 +197 +198 +198 +198 +200 +200 +201 +201 +203 +202 +202 +204 +204 +204 +205 +204 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +206 +207 +206 +207 +207 +207 +207 +204 +204 +204 +205 +204 +202 +202 +200 +200 +200 +200 +200 +200 +201 +200 +198 +198 +197 +196 +197 +195 +195 +190 +190 +189 +188 +189 +184 +185 +182 +183 +182 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +134 +134 +129 +130 +129 +125 +126 +119 +120 +120 +115 +115 +110 +109 +110 +106 +106 +100 +99 +95 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +65 +64 +58 +59 +59 +55 +54 +51 +50 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +14 +13 +14 +13 +13 +14 +14 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +13 +15 +15 +15 +15 +15 +17 +17 +17 +19 +19 +21 +21 +23 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +51 +51 +54 +55 +58 +58 +64 +64 +64 +69 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +116 +115 +115 +119 +119 +126 +125 +126 +129 +129 +134 +133 +133 +139 +139 +143 +144 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +165 +165 +164 +169 +169 +173 +173 +173 +174 +175 +179 +179 +178 +182 +183 +184 +185 +185 +188 +188 +191 +191 +192 +194 +194 +197 +196 +198 +198 +198 +201 +200 +200 +200 +200 +202 +202 +202 +202 +202 +205 +204 +205 +204 +204 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +206 +206 +206 +204 +204 +204 +204 +205 +204 +204 +204 +202 +202 +201 +201 +201 +201 +200 +199 +198 +197 +196 +196 +194 +195 +190 +190 +191 +188 +188 +185 +185 +184 +183 +183 +179 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +162 +161 +161 +157 +157 +150 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +134 +133 +129 +130 +125 +126 +126 +120 +119 +115 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +68 +68 +64 +64 +59 +59 +58 +55 +55 +51 +51 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +32 +27 +27 +25 +25 +22 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +14 +13 +14 +14 +13 +13 +13 +13 +14 +13 +13 +14 +13 +13 +13 +13 +14 +14 +14 +14 +14 +14 +13 +13 +14 +13 +13 +14 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +40 +43 +43 +46 +47 +47 +50 +50 +54 +55 +54 +59 +59 +65 +64 +65 +68 +69 +72 +72 +72 +77 +76 +82 +82 +82 +86 +86 +90 +90 +96 +96 +95 +100 +100 +106 +106 +106 +109 +110 +116 +116 +115 +119 +119 +126 +126 +125 +129 +129 +133 +133 +134 +139 +140 +143 +143 +148 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +179 +182 +183 +185 +185 +188 +188 +189 +191 +190 +195 +194 +195 +196 +196 +198 +198 +199 +200 +201 +200 +200 +200 +203 +202 +204 +205 +204 +204 +205 +207 +207 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +207 +207 +206 +206 +206 +206 +206 +207 +204 +204 +204 +204 +203 +203 +203 +200 +200 +200 +200 +200 +198 +198 +197 +196 +196 +194 +195 +191 +190 +190 +189 +189 +184 +184 +185 +182 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +144 +139 +139 +133 +133 +130 +129 +130 +125 +125 +120 +119 +120 +115 +115 +110 +110 +110 +106 +106 +100 +100 +101 +96 +96 +90 +90 +90 +86 +86 +82 +82 +77 +76 +77 +72 +72 +68 +68 +68 +64 +64 +58 +59 +58 +55 +55 +50 +50 +51 +47 +46 +42 +43 +43 +40 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +25 +25 +25 +22 +21 +19 +19 +19 +17 +17 +16 +15 +15 +15 +15 +13 +13 +13 +12 +13 +14 +13 +13 +14 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +14 +13 +13 +13 +14 +14 +13 +13 +14 +13 +14 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +43 +46 +47 +47 +51 +51 +55 +55 +54 +58 +58 +64 +64 +64 +69 +68 +72 +72 +77 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +105 +109 +110 +115 +115 +116 +120 +119 +126 +125 +130 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +175 +175 +175 +178 +179 +183 +183 +183 +184 +185 +185 +184 +185 +189 +188 +190 +191 +191 +194 +194 +196 +197 +197 +199 +198 +200 +200 +200 +200 +201 +202 +202 +204 +204 +204 +204 +204 +204 +204 +204 +206 +206 +206 +206 +207 +206 +206 +206 +207 +206 +206 +207 +206 +206 +204 +204 +204 +204 +205 +203 +202 +202 +200 +200 +201 +200 +200 +198 +199 +197 +197 +197 +195 +195 +191 +190 +188 +188 +189 +185 +185 +182 +183 +183 +178 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +160 +161 +161 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +129 +126 +125 +120 +119 +120 +115 +116 +110 +110 +110 +106 +106 +100 +100 +97 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +69 +68 +64 +64 +58 +58 +58 +55 +55 +51 +50 +48 +47 +47 +43 +43 +41 +41 +41 +37 +37 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +26 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +12 +14 +13 +13 +14 +14 +14 +13 +13 +14 +13 +13 +14 +14 +14 +13 +14 +14 +14 +13 +13 +14 +13 +13 +13 +13 +14 +14 +13 +15 +15 +15 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +46 +51 +50 +55 +54 +54 +59 +58 +64 +64 +65 +68 +68 +72 +72 +72 +76 +77 +82 +82 +82 +86 +86 +90 +90 +91 +96 +96 +100 +100 +106 +106 +106 +110 +109 +115 +115 +116 +119 +120 +125 +125 +125 +129 +129 +133 +133 +134 +139 +139 +143 +143 +144 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +169 +169 +169 +173 +173 +175 +175 +175 +178 +178 +183 +183 +183 +185 +184 +188 +189 +190 +190 +191 +194 +194 +197 +197 +196 +198 +198 +198 +199 +199 +200 +200 +201 +201 +201 +202 +202 +204 +204 +204 +205 +205 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +204 +204 +204 +204 +205 +203 +202 +200 +200 +200 +200 +200 +199 +198 +196 +196 +196 +194 +195 +191 +190 +190 +188 +188 +185 +185 +185 +183 +183 +178 +179 +179 +175 +174 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +133 +133 +134 +129 +129 +125 +125 +120 +119 +119 +116 +116 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +83 +76 +76 +72 +72 +68 +68 +68 +64 +64 +58 +58 +58 +55 +54 +55 +54 +54 +51 +51 +46 +47 +47 +43 +43 +41 +41 +39 +37 +36 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +21 +21 +21 +19 +19 +17 +17 +18 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +13 +13 +14 +14 +13 +13 +14 +14 +13 +14 +13 +13 +13 +13 +13 +14 +13 +13 +14 +13 +14 +14 +13 +13 +13 +15 +15 +15 +17 +17 +19 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +30 +31 +33 +33 +37 +37 +40 +41 +41 +43 +43 +47 +48 +47 +51 +50 +55 +55 +55 +58 +58 +64 +64 +65 +68 +68 +72 +71 +73 +76 +76 +82 +82 +87 +86 +86 +90 +90 +96 +96 +96 +100 +100 +100 +100 +100 +105 +105 +110 +110 +110 +116 +115 +119 +120 +120 +125 +125 +129 +130 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +166 +168 +169 +173 +173 +175 +175 +175 +178 +179 +182 +183 +183 +185 +185 +185 +185 +185 +189 +188 +190 +190 +191 +195 +195 +196 +196 +197 +198 +199 +200 +200 +200 +200 +201 +203 +203 +204 +204 +204 +204 +204 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +206 +206 +206 +206 +204 +204 +204 +204 +205 +202 +202 +200 +200 +200 +200 +200 +198 +198 +198 +197 +196 +194 +195 +194 +191 +191 +188 +188 +185 +185 +184 +183 +183 +179 +178 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +144 +143 +143 +139 +139 +133 +134 +133 +129 +129 +125 +125 +125 +120 +119 +115 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +76 +76 +76 +72 +72 +68 +68 +68 +65 +64 +59 +58 +56 +54 +54 +51 +51 +47 +47 +46 +43 +43 +41 +41 +40 +37 +37 +37 +37 +37 +33 +33 +31 +31 +31 +27 +28 +25 +25 +22 +21 +21 +19 +19 +17 +17 +17 +15 +15 +16 +15 +15 +13 +13 +12 +13 +13 +14 +14 +14 +13 +14 +13 +13 +13 +14 +13 +14 +14 +13 +13 +14 +13 +13 +14 +13 +14 +13 +13 +13 +14 +13 +13 +12 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +36 +37 +41 +41 +43 +43 +43 +46 +47 +51 +51 +51 +54 +55 +58 +58 +65 +64 +64 +68 +68 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +101 +106 +106 +110 +109 +116 +116 +116 +119 +119 +125 +125 +125 +129 +129 +130 +130 +129 +133 +134 +139 +139 +140 +143 +143 +147 +147 +149 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +173 +173 +173 +175 +175 +179 +178 +179 +182 +182 +185 +185 +188 +189 +189 +191 +190 +194 +194 +194 +196 +196 +198 +198 +198 +200 +200 +200 +200 +200 +202 +202 +204 +204 +205 +205 +205 +206 +206 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +204 +205 +204 +205 +204 +202 +202 +200 +200 +200 +200 +201 +198 +199 +197 +196 +197 +194 +195 +191 +191 +190 +188 +188 +185 +185 +184 +183 +183 +179 +179 +178 +175 +174 +173 +172 +173 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +151 +147 +147 +143 +143 +143 +140 +139 +134 +133 +133 +129 +129 +125 +125 +126 +120 +120 +115 +115 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +74 +68 +68 +65 +65 +59 +58 +58 +54 +55 +51 +50 +50 +47 +46 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +33 +32 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +14 +13 +13 +13 +14 +14 +13 +14 +14 +13 +13 +14 +13 +14 +13 +13 +13 +14 +14 +14 +13 +13 +13 +13 +12 +15 +15 +18 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +41 +41 +41 +43 +42 +47 +46 +51 +51 +50 +55 +55 +58 +58 +58 +65 +64 +68 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +100 +100 +100 +106 +106 +110 +110 +109 +116 +116 +119 +119 +120 +126 +125 +129 +129 +129 +133 +133 +139 +140 +140 +143 +143 +147 +147 +152 +151 +151 +157 +157 +161 +161 +161 +165 +165 +165 +165 +165 +169 +169 +172 +172 +173 +175 +175 +179 +178 +181 +182 +183 +185 +185 +188 +188 +188 +190 +191 +194 +195 +195 +196 +196 +199 +198 +198 +200 +201 +200 +200 +201 +202 +202 +204 +204 +204 +205 +205 +206 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +204 +205 +205 +204 +204 +202 +202 +200 +200 +201 +201 +200 +199 +199 +196 +196 +197 +194 +194 +195 +195 +195 +191 +191 +189 +188 +189 +185 +184 +183 +183 +183 +179 +178 +175 +175 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +141 +133 +133 +130 +129 +125 +125 +126 +119 +119 +116 +116 +116 +110 +110 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +88 +86 +86 +82 +82 +76 +76 +77 +72 +72 +69 +69 +69 +64 +64 +64 +64 +64 +59 +58 +55 +55 +55 +51 +51 +47 +47 +43 +43 +43 +41 +41 +36 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +20 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +13 +14 +13 +13 +14 +14 +13 +14 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +14 +13 +14 +14 +14 +14 +13 +12 +15 +15 +17 +17 +17 +19 +20 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +50 +51 +54 +54 +58 +59 +59 +64 +64 +68 +68 +68 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +106 +106 +109 +110 +110 +115 +116 +119 +120 +120 +126 +126 +129 +129 +133 +133 +133 +139 +139 +143 +143 +143 +147 +147 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +168 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +183 +183 +184 +185 +188 +189 +189 +191 +191 +194 +194 +195 +197 +197 +198 +198 +200 +201 +200 +200 +200 +203 +202 +203 +204 +204 +205 +204 +205 +206 +206 +207 +207 +206 +206 +206 +206 +206 +207 +207 +207 +206 +206 +205 +205 +205 +204 +204 +202 +202 +202 +201 +201 +200 +200 +201 +198 +198 +197 +196 +196 +195 +195 +191 +190 +191 +188 +189 +185 +185 +183 +182 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +152 +147 +147 +143 +143 +140 +139 +140 +134 +133 +130 +129 +129 +126 +125 +125 +126 +126 +120 +119 +115 +116 +116 +115 +115 +110 +109 +110 +106 +106 +100 +100 +95 +96 +96 +90 +90 +86 +86 +86 +82 +82 +82 +82 +82 +76 +76 +72 +73 +73 +69 +68 +64 +65 +59 +58 +58 +55 +54 +50 +51 +51 +46 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +13 +14 +14 +14 +13 +13 +14 +13 +14 +14 +14 +14 +14 +13 +13 +14 +14 +13 +14 +14 +14 +14 +14 +14 +13 +13 +15 +15 +17 +17 +17 +19 +19 +21 +21 +26 +25 +25 +27 +27 +31 +31 +31 +33 +33 +33 +33 +33 +37 +37 +41 +40 +41 +43 +43 +46 +46 +47 +51 +50 +55 +55 +58 +59 +58 +65 +64 +68 +68 +68 +72 +72 +72 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +92 +96 +96 +100 +100 +106 +105 +106 +110 +109 +115 +116 +116 +119 +120 +119 +120 +120 +126 +125 +129 +129 +130 +133 +133 +139 +139 +141 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +172 +173 +175 +175 +175 +179 +179 +183 +183 +184 +184 +184 +189 +189 +188 +189 +189 +190 +191 +191 +191 +191 +195 +195 +197 +196 +197 +199 +198 +200 +200 +200 +200 +201 +202 +202 +205 +204 +204 +205 +204 +206 +206 +207 +206 +206 +207 +206 +205 +207 +206 +207 +206 +206 +206 +206 +204 +204 +205 +204 +204 +202 +202 +201 +200 +200 +200 +200 +199 +199 +198 +196 +196 +195 +194 +194 +190 +191 +189 +188 +188 +184 +184 +183 +183 +182 +179 +178 +175 +174 +173 +173 +173 +169 +169 +165 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +140 +141 +133 +133 +129 +129 +125 +125 +125 +119 +119 +115 +116 +116 +109 +110 +110 +110 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +87 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +65 +65 +58 +58 +59 +54 +54 +51 +51 +50 +47 +46 +43 +43 +41 +41 +41 +37 +37 +33 +33 +33 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +14 +13 +13 +12 +13 +14 +13 +14 +13 +14 +13 +14 +13 +14 +14 +13 +14 +13 +13 +14 +13 +14 +14 +13 +13 +13 +13 +14 +13 +13 +13 +13 +15 +15 +15 +17 +17 +17 +17 +17 +19 +19 +21 +21 +21 +25 +25 +27 +27 +28 +31 +31 +33 +32 +37 +37 +37 +41 +40 +43 +43 +43 +47 +47 +47 +46 +47 +50 +51 +55 +55 +55 +59 +59 +64 +64 +66 +68 +68 +72 +72 +76 +76 +76 +82 +82 +82 +82 +82 +86 +86 +86 +86 +86 +90 +90 +95 +96 +96 +100 +100 +106 +106 +107 +110 +110 +116 +116 +119 +120 +119 +125 +125 +129 +129 +129 +134 +134 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +175 +179 +179 +183 +182 +182 +185 +185 +188 +189 +188 +191 +191 +195 +194 +197 +196 +197 +199 +199 +200 +200 +201 +200 +200 +202 +202 +202 +204 +204 +205 +204 +204 +206 +206 +206 +206 +207 +207 +206 +206 +206 +207 +206 +206 +206 +207 +204 +204 +204 +205 +204 +202 +203 +202 +201 +200 +200 +200 +201 +198 +198 +197 +196 +197 +195 +194 +190 +191 +188 +189 +189 +184 +185 +182 +183 +182 +179 +179 +175 +175 +175 +173 +173 +169 +168 +169 +165 +165 +161 +161 +159 +157 +157 +151 +151 +147 +147 +147 +143 +144 +139 +139 +139 +133 +133 +133 +133 +134 +129 +129 +125 +126 +125 +120 +120 +116 +116 +116 +109 +109 +106 +106 +99 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +68 +68 +64 +65 +61 +57 +58 +54 +54 +50 +50 +51 +47 +47 +42 +43 +43 +41 +41 +37 +37 +37 +33 +33 +30 +31 +31 +27 +27 +25 +25 +21 +21 +21 +19 +19 +17 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +13 +13 +13 +14 +13 +14 +13 +13 +14 +13 +13 +14 +14 +14 +14 +14 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +15 +15 +17 +17 +18 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +32 +33 +33 +37 +37 +41 +41 +41 +43 +43 +47 +47 +48 +51 +50 +55 +55 +58 +58 +58 +64 +64 +68 +68 +68 +72 +72 +72 +73 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +95 +96 +96 +100 +100 +105 +106 +106 +110 +110 +116 +115 +115 +120 +119 +125 +126 +126 +129 +129 +133 +134 +133 +139 +140 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +179 +179 +183 +183 +184 +185 +189 +189 +188 +191 +191 +194 +194 +194 +196 +196 +199 +199 +199 +201 +200 +201 +200 +200 +203 +202 +204 +204 +205 +204 +205 +207 +207 +207 +206 +206 +206 +206 +206 +206 +206 +206 +207 +206 +207 +206 +205 +205 +205 +204 +204 +203 +203 +201 +200 +201 +200 +200 +198 +198 +196 +197 +197 +195 +194 +191 +190 +190 +188 +188 +189 +189 +188 +184 +185 +182 +183 +183 +178 +179 +175 +175 +176 +173 +173 +169 +168 +164 +165 +165 +161 +161 +157 +157 +157 +151 +151 +151 +151 +151 +147 +147 +143 +143 +143 +139 +139 +134 +134 +130 +129 +130 +125 +125 +119 +119 +119 +115 +115 +110 +109 +110 +106 +106 +100 +100 +100 +96 +96 +90 +90 +90 +86 +86 +82 +82 +76 +76 +76 +72 +72 +68 +68 +68 +65 +65 +59 +59 +59 +55 +54 +51 +51 +51 +47 +46 +43 +43 +43 +41 +40 +37 +36 +33 +33 +32 +31 +31 +27 +27 +27 +25 +25 +21 +21 +21 +19 +19 +16 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +14 +13 +14 +14 +13 +14 +14 +14 +14 +14 +13 +13 +14 +14 +13 +13 +14 +14 +14 +13 +13 +13 +14 +13 +13 +14 +13 +13 +15 +15 +17 +17 +19 +19 +19 +21 +21 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +32 +37 +37 +41 +41 +43 +43 +43 +46 +47 +51 +51 +50 +55 +54 +54 +55 +55 +58 +58 +65 +64 +65 +68 +68 +72 +72 +76 +76 +76 +82 +82 +86 +86 +86 +90 +90 +96 +96 +96 +100 +100 +106 +106 +105 +110 +110 +115 +116 +116 +119 +120 +126 +126 +129 +130 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +175 +175 +175 +178 +178 +182 +183 +183 +184 +185 +189 +188 +189 +190 +191 +194 +195 +194 +196 +196 +199 +199 +198 +201 +200 +201 +200 +203 +202 +202 +204 +204 +204 +204 +204 +207 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +206 +207 +204 +204 +204 +204 +203 +203 +202 +201 +200 +200 +200 +201 +198 +198 +198 +198 +198 +196 +197 +194 +194 +194 +190 +190 +188 +188 +186 +185 +185 +183 +183 +178 +179 +178 +175 +175 +172 +173 +173 +169 +169 +169 +169 +169 +165 +165 +161 +161 +161 +157 +157 +151 +151 +148 +147 +147 +143 +143 +139 +140 +139 +133 +133 +129 +130 +129 +125 +126 +120 +120 +119 +116 +116 +110 +110 +111 +106 +105 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +82 +82 +83 +76 +76 +73 +72 +72 +68 +68 +64 +64 +65 +58 +58 +54 +55 +51 +51 +50 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +18 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +13 +13 +14 +13 +13 +13 +14 +13 +14 +13 +14 +14 +13 +13 +14 +13 +13 +14 +14 +14 +13 +14 +13 +13 +13 +14 +13 +13 +15 +15 +15 +17 +17 +19 +19 +20 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +33 +37 +37 +36 +37 +37 +41 +41 +43 +43 +43 +47 +47 +50 +51 +54 +54 +54 +58 +59 +64 +65 +64 +69 +68 +73 +72 +72 +76 +76 +82 +82 +82 +86 +86 +91 +90 +90 +96 +96 +100 +100 +106 +105 +106 +110 +110 +115 +115 +116 +119 +120 +125 +125 +126 +129 +130 +134 +133 +133 +140 +139 +143 +143 +144 +147 +147 +151 +151 +156 +157 +157 +161 +161 +165 +165 +165 +169 +169 +173 +173 +173 +175 +175 +179 +178 +179 +183 +183 +185 +185 +184 +188 +189 +191 +190 +195 +194 +194 +197 +196 +198 +198 +198 +200 +200 +201 +200 +201 +202 +202 +205 +204 +204 +205 +205 +206 +207 +207 +207 +207 +206 +207 +206 +206 +207 +206 +206 +206 +206 +206 +204 +204 +204 +204 +204 +202 +203 +200 +201 +200 +201 +200 +198 +197 +200 +197 +197 +194 +194 +190 +190 +191 +189 +189 +185 +185 +185 +183 +183 +183 +182 +183 +179 +179 +175 +175 +175 +173 +173 +169 +169 +166 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +130 +126 +126 +120 +119 +115 +116 +115 +110 +110 +106 +106 +105 +100 +100 +96 +96 +96 +90 +90 +86 +86 +86 +82 +82 +76 +76 +76 +72 +72 +69 +68 +65 +64 +64 +58 +58 +55 +55 +55 +50 +51 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +33 +32 +33 +31 +31 +27 +27 +26 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +13 +12 +13 +13 +14 +14 +14 +13 +13 +13 +13 +14 +13 +13 +14 +14 +13 +14 +14 +13 +13 +14 +13 +13 +13 +13 +13 +13 +14 +13 +15 +16 +15 +17 +16 +19 +19 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +31 +31 +31 +33 +33 +37 +37 +37 +41 +40 +43 +43 +47 +47 +46 +51 +51 +54 +55 +54 +59 +59 +64 +64 +64 +69 +68 +72 +72 +73 +76 +76 +82 +82 +83 +86 +86 +90 +90 +93 +96 +96 +100 +99 +106 +106 +106 +110 +110 +116 +116 +115 +119 +120 +125 +125 +126 +129 +130 +134 +133 +133 +139 +139 +143 +143 +147 +147 +147 +151 +151 +157 +157 +157 +161 +161 +165 +165 +165 +169 +168 +173 +173 +173 +175 +175 +179 +179 +179 +182 +182 +185 +185 +188 +188 +189 +190 +191 +194 +195 +195 +197 +197 +199 +198 +198 +200 +200 +201 +201 +200 +202 +203 +204 +204 +205 +204 +204 +206 +207 +206 +207 +206 +206 +207 +206 +206 +207 +207 +206 +206 +206 +207 +205 +204 +204 +204 +205 +202 +202 +200 +200 +200 +200 +200 +198 +198 +196 +197 +197 +194 +194 +191 +191 +191 +188 +189 +189 +188 +189 +185 +184 +182 +182 +183 +179 +179 +175 +175 +173 +173 +173 +169 +169 +164 +165 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +147 +143 +143 +139 +139 +139 +133 +133 +129 +129 +125 +126 +126 +120 +119 +115 +115 +116 +110 +110 +106 +106 +106 +100 +100 +96 +96 +96 +90 +89 +86 +86 +86 +82 +82 +76 +77 +73 +72 +73 +68 +68 +64 +64 +64 +59 +59 +55 +54 +54 +51 +50 +47 +47 +47 +43 +43 +41 +41 +41 +37 +37 +32 +33 +32 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +19 +17 +17 +15 +15 +15 +15 +15 +13 +13 +14 +12 +14 +14 +13 +14 +14 +13 +14 +14 +14 +13 +14 +13 +13 +13 +13 +14 +13 +14 +13 +13 +13 +14 +14 +14 +13 +14 +14 +13 +14 +13 +15 +16 +15 +17 +17 +19 +19 +19 +21 +21 +21 +21 +21 +25 +25 +27 +27 +27 +31 +31 +33 +33 +34 +37 +37 +41 +41 +43 +42 +43 +47 +47 +50 +50 +51 +54 +54 +58 +58 +59 +65 +65 +69 +68 +69 +72 +72 +76 +76 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +100 +100 +105 +106 +110 +110 +110 +116 +116 +119 +119 +120 +125 +125 +129 +129 +134 +134 +133 +139 +139 +143 +143 +143 +147 +147 +151 +151 +151 +157 +157 +161 +161 +161 +165 +165 +169 +169 +169 +173 +173 +175 +175 +178 +179 +179 +182 +183 +185 +184 +184 +189 +189 +190 +191 +190 +195 +195 +196 +197 +196 +198 +199 +200 +201 +201 +201 +200 +202 +203 +205 +204 +205 +204 +204 +206 +206 +207 +206 +206 +207 +206 +206 +206 +207 +206 +206 +206 +206 +206 +206 +206 +207 +204 +204 +205 +205 +202 +203 +202 +200 +201 +200 +200 +200 +198 +199 +199 +199 +199 +196 +197 +195 +194 +194 +191 +190 +189 +188 +184 +185 +185 +183 +183 +178 +179 +179 +174 +175 +173 +173 +173 +169 +169 +165 +164 +165 +161 +161 +157 +157 +157 +151 +151 +147 +147 +143 +143 +143 +140 +139 +133 +134 +133 +129 +129 +125 +125 +125 +119 +120 +115 +116 +116 +109 +110 +106 +106 +106 +100 +100 +96 +96 +91 +90 +90 +86 +86 +82 +82 +82 +76 +76 +72 +72 +73 +68 +68 +64 +65 +64 +59 +58 +54 +55 +55 +51 +51 +47 +47 +43 +43 +43 +41 +41 +37 +37 +37 +33 +33 +31 +31 +31 +27 +27 +25 +25 +25 +21 +21 +19 +19 +20 +17 +17 +15 +15 +15 +15 +15 +13 +13 +12 +13 +13 +14 +13 +13 +14 +14 +13 +13 +13 +13 +14 +14 +14 +13 +14 +14 +13 +14 +14 +13 +14 +14 +13 +14 +13 +13 +13 +14 +14 +13 +15 +15 +15 +15 +15 +17 +17 +17 +19 +19 +21 +21 +25 +25 +25 +27 +27 +31 +31 +31 +33 +33 +37 +37 +37 +41 +41 +43 +43 +43 +47 +47 +51 +51 +51 +55 +54 +58 +58 +64 +64 +64 +68 +69 +72 +72 +72 +76 +77 +82 +82 +82 +86 +86 +90 +90 +90 +96 +96 +100 +99 +100 +105 +106 +110 +110 +116 +116 +115 +119 +119 +125 +126 +125 +129 +129 +130 +129 +129 +133 +133 +139 +139 +139 +143 +143 +147 +147 +148 +151 +151 +157 +157 +161 +161 +161 +165 +165 diff --git a/Old Matlab Interface/iso_incoming.m b/Old Matlab Interface/iso_incoming.m new file mode 100644 index 00000000..9705f823 --- /dev/null +++ b/Old Matlab Interface/iso_incoming.m @@ -0,0 +1,5 @@ +command = '3'; + +driverLocation = 'c:\libusbk\examples\open-device\debug\win32'; +command = [driverLocation '\open-device "03eb" "a000" "' command '" "NULL" "NULL" "NULL" "NULL"'] +system(command); \ No newline at end of file diff --git a/Old Matlab Interface/keep_in_sync.m b/Old Matlab Interface/keep_in_sync.m new file mode 100644 index 00000000..083c5514 --- /dev/null +++ b/Old Matlab Interface/keep_in_sync.m @@ -0,0 +1,11 @@ +if libk_error + dropped_packets = dropped_packets + 1; + if (dropped_packets > 10) + break + %resynchronise + %dropped_packets = 0; + %waveform_exists = 0; + end +else + dropped_packets = 4*dropped_packets/5; +end \ No newline at end of file diff --git a/Old Matlab Interface/launchgui.m b/Old Matlab Interface/launchgui.m new file mode 100644 index 00000000..3db346e8 --- /dev/null +++ b/Old Matlab Interface/launchgui.m @@ -0,0 +1,73 @@ +global gui_scope_running +global gui_cursor_mode +global gui_hori_cursor_a_pos +global gui_hori_cursor_b_pos +global gui_vert_cursor_a_pos +global gui_vert_cursor_b_pos +global scope_window_min +global gui_awg_waveform +global gui_awg_amplitude +global gui_awg_frequency +global gui_vo +global gui_ro +global gui_static_text_scope +global CH1_AC +global CH2_AC + +global gui_awg_waveform_aux +global gui_awg_amplitude_aux +global gui_awg_frequency_aux + +global scope_window_max + + +scope_window_min = 0; +scope_window_max = 5; + +set_gain_auto; + +global mode7_func +mode7_func = 'V'; +global Rtest; +Rtest = 1; +global scope_filter_value +scope_filter_value = 1; +global scope_filter_enabled +scope_filter_enabled = 0; +gui_scope_running = 1; +gui_cursor_mode = 1; +gui_static_text_scope = 0; + +gui_vert_cursor_a_pos = 0; +gui_vert_cursor_b_pos = 0; +gui_hori_cursor_a_pos = scope_window_min; +gui_hori_cursor_b_pos = scope_window_min; + +gui_awg_waveform = 'sin(linspace(0,2*pi,128))'; +gui_awg_amplitude = '3.3'; +gui_awg_frequency = '50' + +gui_awg_waveform_aux = 'sin(linspace(0,2*pi,128))'; +gui_awg_amplitude_aux = '3.3'; +gui_awg_frequency_aux = '50' + +gui_vo = 0; +gui_ro = 1000; + +CH1_AC = 0; +CH2_AC = 0; + +global dig0 +global dig1 +global dig2 +global dig3 + +dig0 = 0; +dig1 = 0; +dig2 = 0; +dig3 = 0; + +global scope_window_time +scope_window_time = 1 + +first_gui \ No newline at end of file diff --git a/Old Matlab Interface/lcdtoggle.m b/Old Matlab Interface/lcdtoggle.m new file mode 100644 index 00000000..6ce771ae --- /dev/null +++ b/Old Matlab Interface/lcdtoggle.m @@ -0,0 +1,7 @@ +function [] = lcdtoggle(onoff); + +mex_usb_send_control('40', 'a1', dec2hex(onoff), '0', '0', '0'); + +% driverLocation = 'c:\libusbk\examples\open-device\debug\win32'; +% command = [driverLocation '\open-device "03eb" "a000" "' command '" "' num2str(onoff) '" "NULL" "NULL" "NULL"'] +% system(command); \ No newline at end of file diff --git a/Old Matlab Interface/make_waveforms.m b/Old Matlab Interface/make_waveforms.m new file mode 100644 index 00000000..d75de892 --- /dev/null +++ b/Old Matlab Interface/make_waveforms.m @@ -0,0 +1,7 @@ +x = linspace(0, 2*pi, 512) +y = 127 * sin(x) + 128 +y = uint8(y) + +for i = 1:512 + fprintf('%d\t', y(i)); +end \ No newline at end of file diff --git a/Old Matlab Interface/mexHW.m b/Old Matlab Interface/mexHW.m new file mode 100644 index 00000000..5178aa52 --- /dev/null +++ b/Old Matlab Interface/mexHW.m @@ -0,0 +1,5 @@ +cool=1; +cool = 'cock'; + +mex helloworld.cpp +[a, b, c, d] = helloworld(cool); \ No newline at end of file diff --git a/Old Matlab Interface/mex_usb_init.m b/Old Matlab Interface/mex_usb_init.m new file mode 100644 index 00000000..cf30a774 --- /dev/null +++ b/Old Matlab Interface/mex_usb_init.m @@ -0,0 +1,5 @@ +function [] = mex_usb_init(VID, PID) + +global usb_handle + +usb_handle = USB_INIT(VID, PID); \ No newline at end of file diff --git a/Old Matlab Interface/mex_usb_iso_init.m b/Old Matlab Interface/mex_usb_iso_init.m new file mode 100644 index 00000000..e4d69f15 --- /dev/null +++ b/Old Matlab Interface/mex_usb_iso_init.m @@ -0,0 +1,14 @@ +clear all + +compile + +global usb_handle +if ~length(usb_handle) + warning('USB Handle not initialised. Initialising!') + mex_usb_init('03eb', 'a000') +end + +%mex USB_ISO_INIT.c -Iincludes -llibusbK -Lbin\lib\amd64 +%USB_ISO_INIT(usb_handle) +[stm_handle] = USB_ISO_INIT(usb_handle) +%USB_ISO_LOOP(usb_handle, isoCtx, ovlkHandle, ovlPool, isoBuffer, uint8(0)) \ No newline at end of file diff --git a/Old Matlab Interface/mex_usb_iso_loop.m b/Old Matlab Interface/mex_usb_iso_loop.m new file mode 100644 index 00000000..f434d15f --- /dev/null +++ b/Old Matlab Interface/mex_usb_iso_loop.m @@ -0,0 +1,117 @@ +%mex USB_ISO_LOOP.c -Iincludes -llibusbK -Lbin\lib\amd64 +%clear all + +global usb_handle +global scope_gain_0 +global scope_gain_1 +global scope_window_time +global scope_window_max +global scope_window_min +global scope_mode +global gui_scope_running + +global gui_hori_cursor_a_pos +global gui_hori_cursor_b_pos +global gui_vert_cursor_a_pos +global gui_vert_cursor_b_pos +global gui_cursor_mode +global saved_waveform_ch1 +global saved_waveform_ch2 + +global refreshrate +global refreshrate_temp +global waveform_exists + +global trigger + +global sem_avail + +trigger = struct('l', 0, 'h', 0, 'state', 0, 'begin', 1, 'enabled', 0); + +dotheplot + +if ~length(usb_handle) + warning('USB Handle not initialised. Initialising!') + mex_usb_init('03eb', 'a000') +end + +[stm_handle] = USB_ISO_INIT(usb_handle) + +refreshrate = 4; +refreshrate_temp = refreshrate; + +if(isempty(max_n)) + max_n = 10 +end +saved_waveform_ch1 = int8([]); + +if isempty(scope_mode) + error('You didn''t set the scope mode!'); +end + +if isempty(scope_window_time) + error('You didn''t set the window time (x) value!'); +end + +if (scope_window_time < 1/375000) + error('Scope window size is too small!'); +end + +if(scope_mode==0) + if isempty(scope_gain_0) || isempty(scope_gain_1) + error('You didn''t set the gain!'); + end + + if isempty(scope_window_min) + error('You didn''t set the minimum window voltage value!'); + end + + if isempty(scope_window_max) + error('You didn''t set the maximum window voltage value!'); + end +end + +dropped_packets = 0; +if(isempty(waveform_exists)) + waveform_exists = 0; +end + +global extra_goes; +extra_goes = 0; + +sem_avail = 0; +timer_30ms = timer ('TimerFcn', 'timer30ms_callback', 'Period', 30e-3, 'ExecutionMode', 'fixedRate'); +start(timer_30ms); + +for n=1:max_n + %[transfer_contents_0] = USB_ISO_LOOP(usb_handle, isoCtx_0, ovlkHandle_0, ovlPool, isoBuffer, uint8(0)); + + while(sem_avail==0) + pause(0); + %timer_30ms; + end + sem_avail = sem_avail - 1; + [transfer_contents_0, libk_error] = USB_ISO_LOOP(usb_handle, stm_handle); + keep_in_sync + if scope_mode == 7 + transfer_contents_0 = double(transfer_contents_0); + end + displaypacket(transfer_contents_0) + updatescopeaxes + + %[transfer_contents_1] = USB_ISO_LOOP(usb_handle, isoCtx_1, ovlkHandle_1, ovlPool, isoBuffer, uint8(1)); + + while(sem_avail==0) + pause(0.001); + end + sem_avail = sem_avail - 1; + [transfer_contents_1, libk_error] = USB_ISO_LOOP(usb_handle, stm_handle); + keep_in_sync + if scope_mode == 7 + transfer_contents_0 = double(transfer_contents_0); + end + displaypacket(transfer_contents_1) + updatescopeaxes +end + +crash_recover \ No newline at end of file diff --git a/Old Matlab Interface/mex_usb_send_control.m b/Old Matlab Interface/mex_usb_send_control.m new file mode 100644 index 00000000..77a9c0fe --- /dev/null +++ b/Old Matlab Interface/mex_usb_send_control.m @@ -0,0 +1,8 @@ +function [OUT] = mex_usb_send_control( RequestType, Request, Value, Index, Length, LDATA) + +global usb_handle +if ~length(usb_handle) + warning('USB Handle not initialised. Initialising!') + mex_usb_init('03eb', 'a000') +end +OUT = USB_CTRL_SEND(usb_handle, RequestType, Request, Value, Index, Length, LDATA); \ No newline at end of file diff --git a/Old Matlab Interface/plotcursors.m b/Old Matlab Interface/plotcursors.m new file mode 100644 index 00000000..387016ca --- /dev/null +++ b/Old Matlab Interface/plotcursors.m @@ -0,0 +1,50 @@ +global gui_hori_cursor_a_pos +global gui_hori_cursor_b_pos +global gui_vert_cursor_a_pos +global gui_vert_cursor_b_pos +global scope_window_time +global scope_window_max +global scope_window_min + +global gui_cursor_mode +global gui_axes +global scope_mode +global gui_delay + +global fastmode + +delay_sec = get(gui_delay, 'Max') - get(gui_delay, 'Value') + +gui_cursor_mode; + +if(scope_mode==2) + switch(gui_cursor_mode) + case 1 + plot(gui_axes, taxis_ch1, cool_waveform_ch1, 'y', taxis_ch2, cool_waveform_ch2, 'c'); + case 2 + plot(gui_axes, taxis_ch1, cool_waveform_ch1, 'y', taxis_ch2, cool_waveform_ch2, 'c', [-scope_window_time-delay_sec, -delay_sec], [gui_hori_cursor_a_pos gui_hori_cursor_a_pos], 'w', [-scope_window_time-delay_sec, -delay_sec], [gui_hori_cursor_b_pos gui_hori_cursor_b_pos], 'w:'); + case 3 + plot(gui_axes, taxis_ch1, cool_waveform_ch1, 'y', taxis_ch2, cool_waveform_ch2, 'c', [gui_vert_cursor_a_pos-delay_sec gui_vert_cursor_a_pos-delay_sec], [scope_window_min scope_window_max], 'w', [gui_vert_cursor_b_pos-delay_sec gui_vert_cursor_b_pos-delay_sec], [scope_window_min scope_window_max], 'w:'); + case 4 + plot(gui_axes, taxis_ch1, cool_waveform_ch1, 'y', taxis_ch2, cool_waveform_ch2, 'c', [gui_vert_cursor_a_pos-delay_sec gui_vert_cursor_a_pos-delay_sec], [scope_window_min scope_window_max], 'w', [gui_vert_cursor_b_pos-delay_sec gui_vert_cursor_b_pos-delay_sec], [scope_window_min scope_window_max], 'w:', [-scope_window_time-delay_sec -delay_sec], [gui_hori_cursor_a_pos gui_hori_cursor_a_pos], 'w', [-scope_window_time-delay_sec -delay_sec], [gui_hori_cursor_b_pos gui_hori_cursor_b_pos], 'w:'); + otherwise + error('Gui_axes is in an invalid state'); + end +else + switch(gui_cursor_mode) + case 1 + plot(gui_axes, taxis, cool_waveform, 'y'); + case 2 + plot(gui_axes, taxis, cool_waveform, 'y', [-scope_window_time-delay_sec, -delay_sec], [gui_hori_cursor_a_pos gui_hori_cursor_a_pos], 'w', [-scope_window_time-delay_sec, -delay_sec], [gui_hori_cursor_b_pos gui_hori_cursor_b_pos], 'w:'); + case 3 + plot(gui_axes, taxis, cool_waveform, 'y', [gui_vert_cursor_a_pos-delay_sec gui_vert_cursor_a_pos-delay_sec], [scope_window_min scope_window_max], 'w', [gui_vert_cursor_b_pos-delay_sec gui_vert_cursor_b_pos-delay_sec], [scope_window_min scope_window_max], 'w:'); + case 4 + plot(gui_axes, taxis, cool_waveform, 'y', [gui_vert_cursor_a_pos-delay_sec gui_vert_cursor_a_pos-delay_sec], [scope_window_min scope_window_max], 'w', [gui_vert_cursor_b_pos-delay_sec gui_vert_cursor_b_pos-delay_sec], [scope_window_min scope_window_max], 'w:', [-scope_window_time-delay_sec -delay_sec], [gui_hori_cursor_a_pos gui_hori_cursor_a_pos], 'w', [-scope_window_time-delay_sec -delay_sec], [gui_hori_cursor_b_pos gui_hori_cursor_b_pos], 'w:'); + otherwise + error('Gui_axes is in an invalid state'); + end +end + +set(gui_axes, 'Ylim', [scope_window_min, scope_window_max], 'Xlim', [-scope_window_time-delay_sec, -delay_sec], 'Color', [0 0 0], 'Box', 'on', 'XColor', [1 1 1], 'Ycolor', [1 1 1], 'ButtonDownFcn', 'axes1_ButtonDownFcn'); +%set(gui_axes, ); +%disp('SET!!!') \ No newline at end of file diff --git a/Old Matlab Interface/plotiso.m b/Old Matlab Interface/plotiso.m new file mode 100644 index 00000000..9dfcb4d4 --- /dev/null +++ b/Old Matlab Interface/plotiso.m @@ -0,0 +1,17 @@ +function [isoLog] = plotiso(mode) + +iso_incoming; + +load('isoLog.txt'); +window = 750; +switch (mode) + case 1 + for n=1:32:((length(isoLog))-window) + plot(isoLog(n:n+window)); + drawnow + pause(0.03); + end + otherwise + plot(isoLog); +end + diff --git a/Old Matlab Interface/plotmem.m b/Old Matlab Interface/plotmem.m new file mode 100644 index 00000000..d8e62241 --- /dev/null +++ b/Old Matlab Interface/plotmem.m @@ -0,0 +1,21 @@ +fid = fopen('C:\users\esposch\documents\output.hex'); + +buffer = 0; + +hexarray = []; + +while (buffer ~= -1) + buffer = fgetl(fid); + hexarray = [hexarray buffer(10:end-2)]; +end + +uintarray = []; + +for n=1:2:length(hexarray) + uintarray = [uintarray hex2dec(hexarray([n n+1]))]; +end + +typecast(uintarray, 'int8') +plot(uintarray); + +fclose(fid); \ No newline at end of file diff --git a/Old Matlab Interface/plotspeedtest.m b/Old Matlab Interface/plotspeedtest.m new file mode 100644 index 00000000..9f1d5321 --- /dev/null +++ b/Old Matlab Interface/plotspeedtest.m @@ -0,0 +1,17 @@ +% hAxes = figure() +% for n=1:1000 +% tic +% %plot(sin(a(n:n+1000))) +% plot(transfer_contents(n:n+100)) +% drawnow +% toc +% end + +hold on +tic +for n=1:10:100000 + plot((n:n+100),(n:n+100).^2); + drawnow + pause(0.01) +end +toc \ No newline at end of file diff --git a/Old Matlab Interface/plotyy_test.m b/Old Matlab Interface/plotyy_test.m new file mode 100644 index 00000000..50d5d46d --- /dev/null +++ b/Old Matlab Interface/plotyy_test.m @@ -0,0 +1,11 @@ +a = 1:100 +b = 101:200 + +for k = 1:100 + plot(1,1) +end +tic +hold on + plot(a,b) + stairs(a,b) +toc \ No newline at end of file diff --git a/Old Matlab Interface/printusb.m b/Old Matlab Interface/printusb.m new file mode 100644 index 00000000..fd54ba80 --- /dev/null +++ b/Old Matlab Interface/printusb.m @@ -0,0 +1,11 @@ +function [] = printusb(inputstring); +if length(inputstring)>21 + error('String too long. Reduce to under 21 chars.') +end + +normalisedString=' '; +normalisedString(1:length(inputstring)) = inputstring; + +driverLocation = 'c:\libusbk\examples\open-device\debug\win32'; +command = [driverLocation '\open-device "' normalisedString '" "1" "03eb" "a000"'] +system(command); \ No newline at end of file diff --git a/Old Matlab Interface/psucal.m b/Old Matlab Interface/psucal.m new file mode 100644 index 00000000..30bd56e2 --- /dev/null +++ b/Old Matlab Interface/psucal.m @@ -0,0 +1,25 @@ +%vdrop = 0 + +% for in = 1:10 +% setpsu(in) +% pause(5) +% end + +% clear all +% clc +% +% ro=22; + +vout22 = [0.38 1.32 2.26 3.25 4.19 5.12 6.12 7.05 7.93 8.94]; +iout22 = vout22/22; + +vout220 = [0.36 1.32 2.25 3.24 4.18 5.12 6.12 7.05 8.00 8.99]; + +vout_oc = [0.41 1.37 2.30 3.29 4.23 5.17 6.16 7.10 8.04 9.04]; + +p_oc = polyfit(vout_oc, 1:10, 1); +polyval(p_oc, 1:10); + +vos_22 = vout_oc - vout22; +p_ios = polyfit(1:10, (22/ro) * vos_22, 1); +polyval(p_ios, 1:10); diff --git a/Old Matlab Interface/psutest_boost.m b/Old Matlab Interface/psutest_boost.m new file mode 100644 index 00000000..b391df84 --- /dev/null +++ b/Old Matlab Interface/psutest_boost.m @@ -0,0 +1,22 @@ +clear all +clc +vex = [5 8 10 12 15]; + +v68 = vex - [4.4 6.75 8.05 9.12 10.29]; +v220 = vex - [4.53 7.14 8.74 10.11 11.97]; +vinf = vex - [4.59 8.40 9.92 10.82 12.98]; + +r68 = (1/68 + 1/250)^-1; +r220 = (1/220 + 1/250)^-1; +rinf = 250; + +magic = 1.5; +mag_exponent = 4; + +c68 = mean(v68./((vex+magic).^mag_exponent)); +c220 = mean(v220./((vex+magic).^mag_exponent)); +cinf = mean(vinf./((vex+magic).^mag_exponent)); + +c68*r68 +c220*r220 +cinf*rinf \ No newline at end of file diff --git a/Old Matlab Interface/resynchronise.m b/Old Matlab Interface/resynchronise.m new file mode 100644 index 00000000..420e7d70 --- /dev/null +++ b/Old Matlab Interface/resynchronise.m @@ -0,0 +1,5 @@ +USB_POOL_FREE(ovlPool); +pause(rand(1)); +mex_usb_init('03eb', 'a000') +[isoCtx_0, isoCtx_1, ovlkHandle_0, ovlkHandle_1, ovlPool, isoBuffer] = USB_ISO_INIT(usb_handle) + diff --git a/Old Matlab Interface/returnempty.m b/Old Matlab Interface/returnempty.m new file mode 100644 index 00000000..000f42e6 --- /dev/null +++ b/Old Matlab Interface/returnempty.m @@ -0,0 +1,2 @@ +function returnval = returnempty() + returnval = []; \ No newline at end of file diff --git a/Old Matlab Interface/samplestoshow_not_on_500.PNG b/Old Matlab Interface/samplestoshow_not_on_500.PNG new file mode 100644 index 0000000000000000000000000000000000000000..7f2cb1cf25a8c212ea0074dc181d414fb67b8263 GIT binary patch literal 11809 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 literal 0 HcmV?d00001 diff --git a/Old Matlab Interface/scroll_function.m b/Old Matlab Interface/scroll_function.m new file mode 100644 index 00000000..b0da30fb --- /dev/null +++ b/Old Matlab Interface/scroll_function.m @@ -0,0 +1,2 @@ +function [] = scroll_function(varargin) +varargin \ No newline at end of file diff --git a/Old Matlab Interface/seconds_recorded.m b/Old Matlab Interface/seconds_recorded.m new file mode 100644 index 00000000..0f49a779 --- /dev/null +++ b/Old Matlab Interface/seconds_recorded.m @@ -0,0 +1,10 @@ +function [returnval] = seconds_recorded() + +global saved_waveform_ch1 +global scope_mode + +if scope_mode == 6 | scope_mode == 7 + returnval = (length(saved_waveform_ch1)-750)/750000 +else + returnval = (length(saved_waveform_ch1)-750)/375000 +end \ No newline at end of file diff --git a/Old Matlab Interface/set_gain_auto.m b/Old Matlab Interface/set_gain_auto.m new file mode 100644 index 00000000..32d989d5 --- /dev/null +++ b/Old Matlab Interface/set_gain_auto.m @@ -0,0 +1,10 @@ +global scope_mode +global scope_window_min +global scope_window_max + +if scope_mode ~= 7 + gain = autogain(scope_window_min, scope_window_max) + setscopemode(scope_mode, gain, gain) + saved_waveform_ch1 = [] + saved_waveform_ch2 = [] +end \ No newline at end of file diff --git a/Old Matlab Interface/setpsu.m b/Old Matlab Interface/setpsu.m new file mode 100644 index 00000000..7dae927b --- /dev/null +++ b/Old Matlab Interface/setpsu.m @@ -0,0 +1,18 @@ +function [] = setpsu(vo, ro); + +vcc = 3.3; +gain = 4.22; +vdrop = 0; +PER=256; + +psucal +vdrop = polyval(p_oc, vo) + polyval(p_ios,vo) - vo; + +CCA = ((vo + vdrop)*PER)/(vcc*gain); +CCA = uint16(CCA) + +mex_usb_send_control('40', 'a3', dec2hex(CCA), '0', '0', '0'); + +% driverLocation = 'c:\libusbk\examples\open-device\debug\win32'; +% command = [driverLocation '\open-device "03eb" "a000" "' command '" "' num2str(CCA) '" "NULL" "NULL" "NULL"'] +% system(command); \ No newline at end of file diff --git a/Old Matlab Interface/setpsu_boost.m b/Old Matlab Interface/setpsu_boost.m new file mode 100644 index 00000000..b98a9911 --- /dev/null +++ b/Old Matlab Interface/setpsu_boost.m @@ -0,0 +1,12 @@ +function [] = setpsu_boost(vo) +% err = verr(vo, r) +% D = 1 - vi/(vo+err) +% if D>0.75 +% error('PSU DUTY CYCLE TOO LARGE!!! ABORTING!!!') +% end +% D = uint16(D*255) + D = expected_adc(vo) + if D>113 | D<21 + error('PSU DUTY CYCLE TOO LARGE (could underflow on SOF)!!! ABORTING!!!') + end + mex_usb_send_control('40', 'a3', dec2hex(D), '0', '0', '0'); diff --git a/Old Matlab Interface/setscopegain.m b/Old Matlab Interface/setscopegain.m new file mode 100644 index 00000000..ab2a692d --- /dev/null +++ b/Old Matlab Interface/setscopegain.m @@ -0,0 +1,22 @@ +function [] = setscopegain(channel, gain); + + +if(gain~=0.5 & gain~=1 & gain~=2 & gain~=4 & gain~=8 & gain~=16 & gain~=32 & gain~=64) + error('Valid values of gain are 0.5, 1, 2, 4, 8, 16, 32, 64'); +end + +global scope_gain +scope_gain = gain; + +gain_mask = uint8([]); + +%%FIX THIS UP +if (gain == 1/2) + gain_mask = 7*4; +else + gain_mask = log2(gain) * 4; +end + +%fprintf('%s\n', dec2bin(gain_mask,8)); + +mex_usb_send_control('40', 'a6', dec2hex(channel), dec2hex(gain_mask), '0', '0'); \ No newline at end of file diff --git a/Old Matlab Interface/setscopemode.m b/Old Matlab Interface/setscopemode.m new file mode 100644 index 00000000..5fd33a01 --- /dev/null +++ b/Old Matlab Interface/setscopemode.m @@ -0,0 +1,44 @@ +function [] = setscopemode(mode, gain0, gain1); %Mode zero for single channel analog, 1 for single digital, 2 for 2ch analog, 3 for 2ch digital +global scope_mode +scope_mode = mode; + +if(gain0~=0.5 & gain0~=1 & gain0~=2 & gain0~=4 & gain0~=8 & gain0~=16 & gain0~=32 & gain0~=64) + error('Valid values of gain are 0.5, 1, 2, 4, 8, 16, 32, 64'); +end + +if(gain1~=0.5 & gain1~=1 & gain1~=2 & gain1~=4 & gain1~=8 & gain1~=16 & gain1~=32 & gain1~=64) + error('Valid values of gain are 0.5, 1, 2, 4, 8, 16, 32, 64'); +end + + +global scope_gain_0 +scope_gain_0 = gain0; + +global scope_gain_1 +scope_gain_1 = gain1; + + +gain_mask_0 = uint16([]); + +if (gain0 == 1/2) + gain_mask_0 = 7*4; +else + gain_mask_0 = log2(gain0) * 4; +end + +gain_mask_1 = uint16([]); + +if (gain1 == 1/2) + gain_mask_1 = 7*4; +else + gain_mask_1 = log2(gain1) * 4; +end + +gain_mask = gain_mask_0 + 256*gain_mask_1; + + +mex_usb_send_control('40', 'a5', dec2hex(mode), dec2hex(gain_mask), '0', '0'); + +% driverLocation = 'c:\libusbk\examples\open-device\debug\win32'; +% command = [driverLocation '\open-device "03eb" "a000" "' command '" "' num2str(onoff) '" "NULL" "NULL" "NULL"'] +% system(command); \ No newline at end of file diff --git a/Old Matlab Interface/setscopewindowsize.m b/Old Matlab Interface/setscopewindowsize.m new file mode 100644 index 00000000..6008fdd5 --- /dev/null +++ b/Old Matlab Interface/setscopewindowsize.m @@ -0,0 +1,16 @@ +function [] = setscopewindowsize(time,vmin,vmax) +global scope_window_time +global scope_window_min +global scope_window_max + +if (vmax500) + temp_samples = dig_samples(1:length(dig_samples)/500:end); + temp_waveform = logical(bitand(temp_samples,16)); +else + temp_samples = false(1,length(dig_samples)*8); + temp_samples(1:8:length(temp_samples)) = bitand(dig_samples,1); + temp_samples(2:8:length(temp_samples)) = bitand(dig_samples,2); + temp_samples(3:8:length(temp_samples)) = bitand(dig_samples,4); + temp_samples(4:8:length(temp_samples)) = bitand(dig_samples,8); + temp_samples(5:8:length(temp_samples)) = bitand(dig_samples,16); + temp_samples(6:8:length(temp_samples)) = bitand(dig_samples,32); + temp_samples(7:8:length(temp_samples)) = bitand(dig_samples,64); + temp_samples(8:8:length(temp_samples)) = bitand(dig_samples,128); + + temp_waveform = temp_samples(1:length(temp_samples)/500:end); +end +toc + +stairs(temp_waveform); +%b = [bitand(a,128), bitand(a,64), bitand(a,32), bitand(a,16), bitand(a,8), bitand(a,4), bitand(a,2), bitand(a,1)]; +%b(logical(mod(1:500,2))) = true; + diff --git a/Old Matlab Interface/timer30ms_callback.m b/Old Matlab Interface/timer30ms_callback.m new file mode 100644 index 00000000..7c14731c --- /dev/null +++ b/Old Matlab Interface/timer30ms_callback.m @@ -0,0 +1,5 @@ +global sem_avail +sem_avail = sem_avail + 1; +timer_strap(timer_30ms, 30e-3); +%get(timer_30ms, 'AveragePeriod'); +%get(timer_30ms, 'Period'); \ No newline at end of file diff --git a/Old Matlab Interface/timer_strap.m b/Old Matlab Interface/timer_strap.m new file mode 100644 index 00000000..3da91c29 --- /dev/null +++ b/Old Matlab Interface/timer_strap.m @@ -0,0 +1,31 @@ +function timer_strap(t_handle, desired_per) +% %Function timer_strap(), by Christopher Paul Esposito ("Esposch") +% %Make sure you call this during every timer callback, and set the timer's "ExecutionMode" to "FixedRate". +% %Takes timer object t_handle and uses negative feedback to bring the steady state period of t_handle towards desired_per. +% %This means that your code will become CPU-independent, as queuing delay won't affect the period. +% %It will not, however, perfectly account for random variance in delay due to a varying CPU load. +% +% n = 500; %Times between resetting. Higher n means more accuracy (the period between the nth and n+1th execution is not considered!), but also less able to cope with a varying load. Oddly, errors seem to show in realtime application with low n. +% kp = 0.1; %Proportional gain. Well, not really. But it basically works the same way. Research "PID Controllers" to understand how this works (moral of the story: smaller kp prevents indefinite oscillation, but means it takes longer to reach steady state. Above a certain threshold kp, the whole system will diverge and fail). +% real_per = get(t_handle, 'AveragePeriod'); %%Actual (average) time between runs (in real seconds). +% if (get(t_handle, 'TasksExecuted') < n) +% return; +% end +% reference_per = get(t_handle, 'Period'); %%What Matlab has set the period to. +% reference_per = reference_per - kp*(real_per - desired_per); %%Subtracting off the error; negative feedback! +% +% stop(t_handle); %Need to reset everything to write the new period. This means that the last window of data is gone! +% set(t_handle, 'Period', reference_per); +% start(t_handle); + +global extra_goes; +tasks_exec = get(t_handle, 'TasksExecuted') + extra_goes; +average_per = get(t_handle, 'AveragePeriod') * (get(t_handle, 'TasksExecuted') / tasks_exec); + +behind = (average_per - desired_per) * tasks_exec; +if behind>desired_per + global sem_avail + sem_avail = sem_avail + 1; + extra_goes = extra_goes + 1; +end + diff --git a/Old Matlab Interface/tiny_send_auxwf.m b/Old Matlab Interface/tiny_send_auxwf.m new file mode 100644 index 00000000..03679a27 --- /dev/null +++ b/Old Matlab Interface/tiny_send_auxwf.m @@ -0,0 +1,36 @@ +function [] = tiny_send_auxwf(waveform, amplitude, frequency); + +waveform = tiny_wave_conv_aux(waveform, amplitude); +waveform = uint8(waveform); + +wave_length = length(waveform); + +f_invalid = 1; + +valid_clock_div = [1,2,4,8,64,256,1024]; +f0=24e6; + +if(frequency*wave_length)>1e6 + error('Frequency is too high') +end + +for clk_setting = 1:length(valid_clock_div) + f_test = f0 / valid_clock_div(clk_setting); + if (f_test/frequency)<65535 + f_invalid = 0; + break + end +end + +if (f_invalid) + error('Frequency is too low!') +end + +tccper = round(f_test / frequency / wave_length); +tccper = uint16(tccper); + +clk_setting = uint16(clk_setting); + +waveform +mex_usb_send_control('40', 'a2', dec2hex(tccper), dec2hex(clk_setting), dec2hex(wave_length), waveform); + diff --git a/Old Matlab Interface/tiny_send_dig.m b/Old Matlab Interface/tiny_send_dig.m new file mode 100644 index 00000000..0e819efa --- /dev/null +++ b/Old Matlab Interface/tiny_send_dig.m @@ -0,0 +1,6 @@ +function [] = tiny_send_dig(dig1, dig2, dig3, dig4) + +bitmask = dig1 * 8 + dig2 * 4 + dig3 * 2 + dig4; + + +mex_usb_send_control('40', 'a6', dec2hex(bitmask), '0', '0', '0'); diff --git a/Old Matlab Interface/tiny_send_waveform.m b/Old Matlab Interface/tiny_send_waveform.m new file mode 100644 index 00000000..47980eea --- /dev/null +++ b/Old Matlab Interface/tiny_send_waveform.m @@ -0,0 +1,66 @@ +function [] = tiny_send_waveform(waveform, amplitude, frequency); + +global scope_mode +global gui_axes + +offset = 375; +waveform = tiny_wave_conv(waveform, amplitude); +waveform = uint8(waveform); +%waveform; + +wave_length = length(waveform); + +f_invalid = 1; + +valid_clock_div = [1,2,4,8,64,256,1024]; +f0=24e6; + +if(frequency*wave_length)>1e6 + error('Frequency is too high') +end + +for clk_setting = 1:length(valid_clock_div) + f_test = f0 / valid_clock_div(clk_setting); + if (f_test/frequency)<65535 + f_invalid = 0; + break + end +end + +if (f_invalid) + error('Frequency is too low!') +end + +tccper = round(f_test / frequency / wave_length); +tccper = uint16(tccper); + +clk_setting = uint16(clk_setting); +%clk_setting; + +%stairs(uint8(waveform)); + +% wavestring = []; +% for n=1:wave_length +% wavestring = [wavestring [sprintf('%3d, ', waveform(n)) ' ']]; +% end + +%%Exception for mode 5 +if (scope_mode ==5) + mex_usb_send_control('40', 'a1', dec2hex(tccper), dec2hex(clk_setting), dec2hex(wave_length), uint8(waveform)); + stairs(gui_axes, waveform, 'y') + set(gui_axes, 'Color', [0 0 0], 'Box', 'on', 'XColor', [1 1 1], 'Ycolor', [1 1 1]); + return +end + + +mex_usb_send_control('40', 'a1', dec2hex(tccper), dec2hex(clk_setting + 16*offset), dec2hex(min(375,wave_length)), uint8(waveform(1:min(375,wave_length)))); + +if(wave_length>375) + warning('\nWave Length > 375') + mex_usb_send_control('40', 'a1', dec2hex(tccper), dec2hex(clk_setting + 16*(offset+750) + 32768), dec2hex(wave_length-375), uint8(waveform(376:end))); +end + + +% driverLocation = 'c:\libusbk\examples\open-device\debug\win32'; +% command = [driverLocation '\open-device "03eb" "a000" "' command '" "' num2str(tccper) '" "' num2str(clk_setting) '" "' num2str(wave_length) '" "' wavestring '"'] +% system(command); \ No newline at end of file diff --git a/Old Matlab Interface/tiny_wave_conv.m b/Old Matlab Interface/tiny_wave_conv.m new file mode 100644 index 00000000..a73fca5e --- /dev/null +++ b/Old Matlab Interface/tiny_wave_conv.m @@ -0,0 +1,50 @@ +function [wave] = tiny_wave_conv(wave, amplitude); + +global scope_mode +global global_dc_offset; + +% switch(scope_mode) +% case 0 +% max_length = 750; +% case 1 +% max_length = 128; +% warning('Nowhere to store scope data on device. Only frequency will be transmitted.') +% case 2 +% max_length = 128; +% warning('Nowhere to store scope data on device. Only frequency will be transmitted.') +% case 3 +% max_length = 750; +% case 4 +% max_length = 128; +% warning('Nowhere to store scope data on device. Only frequency will be transmitted.') +% case 5 +% max_length = 1500; +% case 6 +% max_length = 128; +% warning('Nowhere to store scope data on device. Only frequency will be transmitted.') +% otherwise +% error('Invalid scope_mode!') +% end + +if scope_mode == 5 + max_length = 1500; +else + max_length = 750; +end + + +if length(wave)>max_length + wave=imresize(wave,max_length/length(wave)); + warning('Vector length is greater than max_length. It has been scaled down.') +end + +if (amplitude>255 | amplitude<0 | amplitude ~= round(amplitude)) + error('Amplitude must be an integer between 0 and 255 for an 8 bit waveform!') +end + + +if var(wave) ~= 0 + wave = wave - min(wave); +end + wave = wave * (amplitude-global_dc_offset) / max(wave); + wave = round(wave) + global_dc_offset \ No newline at end of file diff --git a/Old Matlab Interface/tiny_wave_conv_aux.m b/Old Matlab Interface/tiny_wave_conv_aux.m new file mode 100644 index 00000000..5cab9c99 --- /dev/null +++ b/Old Matlab Interface/tiny_wave_conv_aux.m @@ -0,0 +1,17 @@ +function [wave] = tiny_wave_conv_aux(wave, amplitude); +global global_dc_offset + +if length(wave)>128 + wave=imresize(wave,128/length(wave)); + warning('Vector length is greater than max_length. It has been scaled down.') +end + +if (amplitude>255 | amplitude<0 | amplitude ~= round(amplitude)) + error('Amplitude must be an integer between 0 and 255 for an 8 bit waveform!') +end + +if var(wave) ~= 0 + wave = wave - min(wave); +end + wave = wave * (amplitude-global_dc_offset) / max(wave); + wave = round(wave) + global_dc_offset; \ No newline at end of file diff --git a/Old Matlab Interface/undofrontend.m b/Old Matlab Interface/undofrontend.m new file mode 100644 index 00000000..017f35eb --- /dev/null +++ b/Old Matlab Interface/undofrontend.m @@ -0,0 +1,129 @@ +function [cool_waveform] = undofrontend(temp_waveform,channel) + +Vcc = 3.3; +vref = Vcc/2; +TOP = 128; +R4 = 75e3; +R3 = 1e6; +R2 = 1e3; +R1 = 1e3; + +global scope_gain_0 +global scope_gain_1 +global CH1_AC +global CH2_AC +global scope_mode +global mode7_func +global Rtest +global scope_filter_value +global scope_filter_enabled + +if channel == 1 + scope_gain = scope_gain_1 + AC_offset = CH2_AC * 1.65 +else + scope_gain = scope_gain_0 + AC_offset = CH1_AC * 1.65 +end + +cool_waveform = double(temp_waveform); + +if scope_mode==7 + TOP = 2048; %%OVERRIDE DEFAULTS!! + switch(scope_gain) + case 0.5 + offset = -0.27; + case 1 + offset = 0; + case 2 + offset = 0.037; + case 4 + offset = 0.053; + case 8 + offset = 0.055; + case 16 + offset = 0.028; + case 32 + offset= 0.035; + case 64 + offset = 0.0355 + otherwise + error('UNDOFRONTEND failed') + end + switch(mode7_func) + case 'V' + cool_waveform = (cool_waveform * (Vcc/2)) / (R4/(R3+R4)*scope_gain*TOP); + cool_waveform = cool_waveform - AC_offset; + cool_waveform = cool_waveform - offset; + case 'I' + cool_waveform = (cool_waveform * (Vcc/2)) / (R4/(R3+R4)*scope_gain*TOP); + cool_waveform = cool_waveform - AC_offset; + cool_waveform = cool_waveform - offset; + cool_waveform = cool_waveform/Rtest + case 'R' + cool_waveform = (cool_waveform * (Vcc/2)) / (R4/(R3+R4)*scope_gain*TOP); + cool_waveform = cool_waveform - AC_offset; + cool_waveform = cool_waveform - offset; + cool_waveform = (cool_waveform * Rtest) ./ ((Vcc/2) - cool_waveform); + case 'C' + cool_waveform = (cool_waveform * (Vcc/2)) / (R4/(R3+R4)*scope_gain*TOP); + cool_waveform = cool_waveform - AC_offset; + cool_waveform = cool_waveform - offset; + + + %Capacitance calculation + tt = 2.5; + bt = 0.8; + + top_val = (tt/vref * R4/(R3+R4) * scope_gain * TOP) + bot_val = (bt/vref * R4/(R3+R4) * scope_gain * TOP) + + global saved_waveform_ch1 + global fastmode + samples_per_sec = 375000 / (3 * fastmode + 1) + range = length(saved_waveform_ch1) - samples_per_sec / 5 + + gtt = saved_waveform_ch1(range:end)>top_val; + gtb = saved_waveform_ch1(range:end)0 + cool_waveform = filter(ones(1,scope_filter_value)/scope_filter_value,1,cool_waveform); + cool_waveform = cool_waveform(scope_filter_value:end); + end +end \ No newline at end of file diff --git a/Old Matlab Interface/updatescopeaxes.m b/Old Matlab Interface/updatescopeaxes.m new file mode 100644 index 00000000..b1da4215 --- /dev/null +++ b/Old Matlab Interface/updatescopeaxes.m @@ -0,0 +1,168 @@ +global scope_window_time +global scope_window_max +global scope_window_min +global scope_mode +global gui_axes +global text_box_1 +global gui_hori_cursor_a_pos +global gui_hori_cursor_b_pos +global gui_vert_cursor_a_pos +global gui_vert_cursor_b_pos +global gui_cursor_mode +global saved_waveform_ch1 +global saved_waveform_ch2 +global gui_scope_running + +global refreshrate_temp +global refreshrate + +global waveform_exists +global gui_delay + +global fastmode + +refreshrate_temp = refreshrate_temp - 1; + +tic +delay_sec = get(gui_delay, 'Max') - get(gui_delay, 'Value'); +switch(scope_mode) + case 0 + if (refreshrate_temp == 0) + refreshrate_temp = refreshrate; + %if(gui_scope_running) + [taxis, cool_waveform, update_enable] = conv_ana(saved_waveform_ch1, 375000*scope_window_time, 0); + %end + plotcursors + if(cool_waveform) + waveform_exists = 1; + end + if (waveform_exists & update_enable) + if (fastmode==1) + disp('Fastmode Enabled') + else + disp('Fastmode disabled') + %set(text_box_1, 'String', sprintf(' ------------------------\n Vmin = %.2fV\n ------------------------\n Vmax = %.2f\n ------------------------\n Vmean = %.2f\n ------------------------\n Vrms = %.2f\n ------------------------\n ', min(cool_waveform), max(cool_waveform), mean(cool_waveform), rms(cool_waveform))); + set(text_box_1, 'String', sprintf(' ------------------------\n Vmin = %s\n ------------------------\n Vmax = %s\n ------------------------\n Vmean = %s\n ------------------------\n Vrms = %s\n ------------------------\n ', sisprintf(min(cool_waveform),'V',2), sisprintf(max(cool_waveform),'V',2), sisprintf(mean(cool_waveform),'V',2), sisprintf(rms(cool_waveform),'V', 2))); + %title(titlestring); + xlabel(gui_axes, 'Time (s)') + ylabel(gui_axes, 'Voltage (V)') + end + drawnow + end + end + case 1 + if ~(refreshrate == 4) + error('Refreshrate assumed to be 4 for Mode 1') + end + switch(refreshrate_temp) + case 3 + %if(gui_scope_running) + [taxis, cool_waveform, update_enable] = conv_ana(saved_waveform_ch1, 375000*scope_window_time, 0); + [taxis_ch2, temp_waveform_ch2] = conv_dig(saved_waveform_ch2, 375000*scope_window_time); + temp_waveform_ch2 = (scope_window_max - (0.05*(scope_window_max - scope_window_min)) - scope_window_min) * temp_waveform_ch2 + scope_window_min + (0.025*(scope_window_max - scope_window_min)); + % end + case 2 + stairs(gui_axes, taxis_ch2, temp_waveform_ch2, 'c'); + hold(gui_axes, 'on') + plotcursors + hold(gui_axes, 'off') + if(update_enable) + set(text_box_1, 'String', sprintf(' ------------------------\n Vmin = %.2fV\n ------------------------\n Vmax = %.2f\n ------------------------\n Vmean = %.2f\n ------------------------\n Vrms = %.2f\n ------------------------\n ', min(cool_waveform), max(cool_waveform), mean(cool_waveform), rms(cool_waveform))); + xlabel(gui_axes, 'Time (s)') + ylabel(gui_axes, 'Voltage (V)') + drawnow + end + case 0 + refreshrate_temp = refreshrate; + end + case 2 + if (refreshrate_temp == 0) + refreshrate_temp = refreshrate; + % if(gui_scope_running) + [taxis_ch1, cool_waveform_ch1, update_enable] = conv_ana(saved_waveform_ch1, 375000*scope_window_time, 0); + [taxis_ch2, cool_waveform_ch2] = conv_ana(saved_waveform_ch2, 375000*scope_window_time, 1); + %end + plotcursors + if(cool_waveform) waveform_exists = 1; end + if (waveform_exists & update_enable) + set(text_box_1, 'String', sprintf(' ------------------------\n Vmin = %.2fV\n ------------------------\n Vmax = %.2f\n ------------------------\n Vmean = %.2f\n ------------------------\n Vrms = %.2f\n ------------------------\n ', min(cool_waveform_ch1), max(cool_waveform_ch1), mean(cool_waveform_ch1), rms(cool_waveform_ch1))); + %title(titlestring); + xlabel(gui_axes, 'Time (s)') + ylabel(gui_axes, 'Voltage (V)') + drawnow + end + end + case 3 + if (refreshrate_temp == 0) + refreshrate_temp = refreshrate; + %if(gui_scope_running) + [taxis, temp_waveform] = conv_dig(saved_waveform_ch1, 375000*scope_window_time); + % end + stairs(gui_axes, taxis, temp_waveform, 'y'); + set(gui_axes, 'Ylim', [-0.1, 1.1], 'Xlim', [-scope_window_time-delay_sec, 0-delay_sec], 'Color', [0 0 0], 'Box', 'on', 'XColor', [1 1 1], 'Ycolor', [1 1 1]); + set(text_box_1, 'String', 'Scope in dig mode'); + xlabel(gui_axes, 'Time (s)') + ylabel(gui_axes, 'Logic Value') + drawnow + end + case 4 + if (refreshrate_temp == 0) + refreshrate_temp = refreshrate; + % if(gui_scope_running) + [taxis_ch1, temp_waveform_ch1] = conv_dig(saved_waveform_ch1, 375000*scope_window_time); + [taxis_ch2, temp_waveform_ch2] = conv_dig(saved_waveform_ch2, 375000*scope_window_time); + %end + waveform_exists = 1 + elseif (refreshrate_temp == 3) && (waveform_exists) + stairs(gui_axes, taxis_ch2, temp_waveform_ch2, 'c'); + hold(gui_axes, 'on') + stairs(gui_axes, taxis_ch1, temp_waveform_ch1, 'y'); + hold(gui_axes, 'off') + set(gui_axes, 'Ylim', [-0.1, 1.1], 'Xlim', [-scope_window_time-delay_sec, 0-delay_sec], 'Color', [0 0 0], 'Box', 'on', 'XColor', [1 1 1], 'Ycolor', [1 1 1]); + set(text_box_1, 'String', 'Scope in dig mode'); + xlabel(gui_axes, 'Time (s)') + ylabel(gui_axes, 'Logic Value') + drawnow + end + case 5 + set(text_box_1, 'String', 'Scope disabled'); + xlabel(gui_axes, '') + ylabel(gui_axes, '') + drawnow + pause(0.001) + case 6 + if (refreshrate_temp == 0) + refreshrate_temp = refreshrate; + %if(gui_scope_running) + [taxis, cool_waveform, update_enable] = conv_ana(saved_waveform_ch1, 750000*scope_window_time, 0); + %end + plotcursors + if(cool_waveform) waveform_exists = 1; end + if (waveform_exists & update_enable) + set(text_box_1, 'String', sprintf(' ------------------------\n Vmin = %.2fV\n ------------------------\n Vmax = %.2f\n ------------------------\n Vmean = %.2f\n ------------------------\n Vrms = %.2f\n ------------------------\n ', min(cool_waveform), max(cool_waveform), mean(cool_waveform), rms(cool_waveform))); + %title(titlestring); + xlabel(gui_axes, 'Time (s)') + ylabel(gui_axes, 'Voltage (V)') + drawnow + end + end + case 7 + if (refreshrate_temp == 0) + refreshrate_temp = refreshrate; + %if(gui_scope_running) + [taxis, cool_waveform, update_enable] = conv_ana(saved_waveform_ch1, (375000/(3*fastmode + 1))*scope_window_time, 0); + %end + plotcursors + if(cool_waveform) waveform_exists = 1; end + if (waveform_exists & update_enable) + set(text_box_1, 'String', sprintf(' ------------------------\n Vmin = %.2fV\n ------------------------\n Vmax = %.2f\n ------------------------\n Vmean = %.2f\n ------------------------\n Vrms = %.2f\n ------------------------\n ', min(cool_waveform), max(cool_waveform), mean(cool_waveform), rms(cool_waveform))); + %title(titlestring); + xlabel(gui_axes, 'Time (s)') + ylabel(gui_axes, 'Voltage (V)') + drawnow + end + end + otherwise + error('scope_mode invalid!') +end +toc \ No newline at end of file diff --git a/Old Matlab Interface/verr.m b/Old Matlab Interface/verr.m new file mode 100644 index 00000000..335ce7f6 --- /dev/null +++ b/Old Matlab Interface/verr.m @@ -0,0 +1,11 @@ +function [err] = verr(vex, r) + +if r<50 + error('R IS TOO LOW!!!') +end + +%%FOR THE BIG BOY BOARD, remove the +0.2 also +%r = (1/r + 1/250)^-1; +err = ((vex + 1.5)^4 / (80 * r)) + 0.2 + +%err = vex^3/512 - (r/68) * (vex^1.8/(20^1.8)) - (vex-10) / 10 +vex/20 \ No newline at end of file diff --git a/Old Matlab Interface/vexconv.m b/Old Matlab Interface/vexconv.m new file mode 100644 index 00000000..8a3093e0 --- /dev/null +++ b/Old Matlab Interface/vexconv.m @@ -0,0 +1,3 @@ +function [] = vexconv(vex, r) + +r = (1/r + 1/250)^-1; diff --git a/Old Matlab Interface/weave.m b/Old Matlab Interface/weave.m new file mode 100644 index 00000000..05ad2639 --- /dev/null +++ b/Old Matlab Interface/weave.m @@ -0,0 +1,7 @@ + transfer_contents_temp = []; + for tempovar = 0:length(transfer_contents_0)/750 - 1 + transfer_contents_temp = [transfer_contents_temp transfer_contents_0((tempovar*750+1):(tempovar*750+375))]; + transfer_contents_temp = [transfer_contents_temp transfer_contents_1((tempovar*750+1):(tempovar*750+375))]; + end + + plot(transfer_contents_temp) \ No newline at end of file diff --git a/PCB/.pretty/1pin.kicad_mod b/PCB/.pretty/1pin.kicad_mod new file mode 100644 index 00000000..c06374cc --- /dev/null +++ b/PCB/.pretty/1pin.kicad_mod @@ -0,0 +1,12 @@ +(module 1pin (layer F.Cu) (tedit 0) + (descr "module 1 pin (ou trou mecanique de percage)") + (tags DEV) + (fp_text reference REF** (at 0 -3.048) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1pin (at 0 2.794) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 0 -2.286) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at 0 0) (size 4.064 4.064) (drill 3.048) (layers *.Cu *.Mask F.SilkS)) +) diff --git a/PCB/.pretty/3M-N7E50.kicad_mod b/PCB/.pretty/3M-N7E50.kicad_mod new file mode 100644 index 00000000..103cc65b --- /dev/null +++ b/PCB/.pretty/3M-N7E50.kicad_mod @@ -0,0 +1,113 @@ +(module 3M-N7E50 (layer F.Cu) (tedit 0) + (descr "Connecteur PCMCIA + carte") + (tags CONN) + (fp_text reference REF** (at 0 4.445) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 3M-N7E50 (at 0 7.62) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 21.59 31.115) (end 21.59 38.1) (layer F.SilkS) (width 0.15)) + (fp_line (start 21.59 27.94) (end 21.59 29.845) (layer F.SilkS) (width 0.15)) + (fp_line (start 21.59 20.32) (end 21.59 26.67) (layer F.SilkS) (width 0.15)) + (fp_line (start 21.59 17.145) (end 21.59 19.05) (layer F.SilkS) (width 0.15)) + (fp_line (start 21.59 9.525) (end 21.59 15.875) (layer F.SilkS) (width 0.15)) + (fp_line (start 18.415 38.1) (end 20.32 38.1) (layer F.SilkS) (width 0.15)) + (fp_line (start 10.795 38.1) (end 17.145 38.1) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.62 38.1) (end 9.525 38.1) (layer F.SilkS) (width 0.15)) + (fp_line (start 0 38.1) (end 6.35 38.1) (layer F.SilkS) (width 0.15)) + (fp_line (start -3.175 38.1) (end -1.27 38.1) (layer F.SilkS) (width 0.15)) + (fp_line (start -10.795 38.1) (end -4.445 38.1) (layer F.SilkS) (width 0.15)) + (fp_line (start -13.97 38.1) (end -12.065 38.1) (layer F.SilkS) (width 0.15)) + (fp_line (start -21.59 38.1) (end -15.24 38.1) (layer F.SilkS) (width 0.15)) + (fp_line (start -21.59 31.115) (end -21.59 38.1) (layer F.SilkS) (width 0.15)) + (fp_line (start -21.59 27.94) (end -21.59 29.845) (layer F.SilkS) (width 0.15)) + (fp_line (start -21.59 20.32) (end -21.59 26.67) (layer F.SilkS) (width 0.15)) + (fp_line (start -21.59 17.145) (end -21.59 19.05) (layer F.SilkS) (width 0.15)) + (fp_line (start -21.59 9.525) (end -21.59 15.875) (layer F.SilkS) (width 0.15)) + (fp_line (start 15.5575 -0.9525) (end 14.9225 0.3175) (layer F.SilkS) (width 0.15)) + (fp_line (start 14.9225 0.3175) (end 16.1925 0.3175) (layer F.SilkS) (width 0.15)) + (fp_line (start 16.1925 0.3175) (end 15.5575 -0.9525) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.635 -0.635) (end -0.635 0.635) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.635 -0.635) (end 0.635 0.635) (layer F.SilkS) (width 0.15)) + (fp_line (start 21.5138 8.3058) (end 21.5138 2.0066) (layer F.SilkS) (width 0.15)) + (fp_line (start 21.5138 2.0066) (end 21.1328 1.6256) (layer F.SilkS) (width 0.15)) + (fp_line (start 21.1328 1.6256) (end 20.5486 1.6256) (layer F.SilkS) (width 0.15)) + (fp_line (start -21.5138 8.3058) (end -21.5138 2.0066) (layer F.SilkS) (width 0.15)) + (fp_line (start -21.5138 2.0066) (end -21.1328 1.6256) (layer F.SilkS) (width 0.15)) + (fp_line (start -21.1328 1.6256) (end -20.5486 1.6256) (layer F.SilkS) (width 0.15)) + (fp_line (start -22.479 2.6416) (end -22.479 8.3058) (layer F.SilkS) (width 0.15)) + (fp_line (start -22.479 8.3058) (end -20.5486 8.3058) (layer F.SilkS) (width 0.15)) + (fp_line (start -20.5486 8.3058) (end -20.5486 1.6256) (layer F.SilkS) (width 0.15)) + (fp_line (start -20.5486 1.6256) (end 20.5486 1.6256) (layer F.SilkS) (width 0.15)) + (fp_line (start 20.5486 1.6256) (end 20.5486 8.3058) (layer F.SilkS) (width 0.15)) + (fp_line (start 20.5486 8.3058) (end 22.479 8.3058) (layer F.SilkS) (width 0.15)) + (fp_line (start 22.479 8.3058) (end 22.479 2.6416) (layer F.SilkS) (width 0.15)) + (fp_line (start -22.479 -3.048) (end -22.479 -5.4102) (layer F.SilkS) (width 0.15)) + (fp_line (start -22.479 -5.4102) (end -17.4244 -5.4102) (layer F.SilkS) (width 0.15)) + (fp_line (start -17.4244 -5.4102) (end -17.4244 -7.2898) (layer F.SilkS) (width 0.15)) + (fp_line (start -17.4244 -7.2898) (end -16.4084 -7.2898) (layer F.SilkS) (width 0.15)) + (fp_line (start -16.4084 -7.2898) (end -16.4084 -1.6764) (layer F.SilkS) (width 0.15)) + (fp_line (start -16.4084 -1.6764) (end 16.4084 -1.6764) (layer F.SilkS) (width 0.15)) + (fp_line (start 16.4084 -1.6764) (end 16.4084 -7.2898) (layer F.SilkS) (width 0.15)) + (fp_line (start 16.4084 -7.2898) (end 17.4244 -7.2898) (layer F.SilkS) (width 0.15)) + (fp_line (start 17.4244 -7.2898) (end 17.4244 -5.4102) (layer F.SilkS) (width 0.15)) + (fp_line (start 17.4244 -5.4102) (end 22.479 -5.4102) (layer F.SilkS) (width 0.15)) + (fp_line (start 22.479 -5.4102) (end 22.479 -3.048) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at 15.5575 -5.8674) (size 0.4064 3.5052) (layers F.Cu F.Paste F.Mask)) + (pad 26 smd rect (at 14.9225 -5.8674) (size 0.4064 3.5052) (layers F.Cu F.Paste F.Mask)) + (pad 2 smd rect (at 14.2875 -5.8674) (size 0.4064 3.5052) (layers F.Cu F.Paste F.Mask)) + (pad 27 smd rect (at 13.6525 -5.8674) (size 0.4064 3.5052) (layers F.Cu F.Paste F.Mask)) + (pad 3 smd rect (at 13.0175 -5.8674) (size 0.4064 3.5052) (layers F.Cu F.Paste F.Mask)) + (pad 28 smd rect (at 12.3825 -5.8674) (size 0.4064 3.5052) (layers F.Cu F.Paste F.Mask)) + (pad 4 smd rect (at 11.7475 -5.8674) (size 0.4064 3.5052) (layers F.Cu F.Paste F.Mask)) + (pad 29 smd rect (at 11.1125 -5.8674) (size 0.4064 3.5052) (layers F.Cu F.Paste F.Mask)) + (pad 5 smd rect (at 10.4775 -5.8674) (size 0.4064 3.5052) (layers F.Cu F.Paste F.Mask)) + (pad 30 smd rect (at 9.8425 -5.8674) (size 0.4064 3.5052) (layers F.Cu F.Paste F.Mask)) + (pad 6 smd rect (at 9.2075 -5.8674) (size 0.4064 3.5052) (layers F.Cu F.Paste F.Mask)) + (pad 31 smd rect (at 8.5725 -5.8674) (size 0.4064 3.5052) (layers F.Cu F.Paste F.Mask)) + (pad 7 smd rect (at 7.9375 -5.8674) (size 0.4064 3.5052) (layers F.Cu F.Paste F.Mask)) + (pad 32 smd rect (at 7.3025 -5.8674) (size 0.4064 3.5052) (layers F.Cu F.Paste F.Mask)) + (pad 8 smd rect (at 6.6675 -5.8674) (size 0.4064 3.5052) (layers F.Cu F.Paste F.Mask)) + (pad 33 smd rect (at 6.0325 -5.8674) (size 0.4064 3.5052) (layers F.Cu F.Paste F.Mask)) + (pad 9 smd rect (at 5.3975 -5.8674) (size 0.4064 3.5052) (layers F.Cu F.Paste F.Mask)) + (pad 34 smd rect (at 4.7625 -5.8674) (size 0.4064 3.5052) (layers F.Cu F.Paste F.Mask)) + (pad 10 smd rect (at 4.1275 -5.8674) (size 0.4064 3.5052) (layers F.Cu F.Paste F.Mask)) + (pad 35 smd rect (at 3.4925 -5.8674) (size 0.4064 3.5052) (layers F.Cu F.Paste F.Mask)) + (pad 11 smd rect (at 2.8575 -5.8674) (size 0.4064 3.5052) (layers F.Cu F.Paste F.Mask)) + (pad 36 smd rect (at 2.2225 -5.8674) (size 0.4064 3.5052) (layers F.Cu F.Paste F.Mask)) + (pad 12 smd rect (at 1.5875 -5.8674) (size 0.4064 3.5052) (layers F.Cu F.Paste F.Mask)) + (pad 37 smd rect (at 0.9525 -5.8674) (size 0.4064 3.5052) (layers F.Cu F.Paste F.Mask)) + (pad 13 smd rect (at 0.3175 -5.8674) (size 0.4064 3.5052) (layers F.Cu F.Paste F.Mask)) + (pad 38 smd rect (at -0.3175 -5.8674) (size 0.4064 3.5052) (layers F.Cu F.Paste F.Mask)) + (pad 14 smd rect (at -0.9525 -5.8674) (size 0.4064 3.5052) (layers F.Cu F.Paste F.Mask)) + (pad 39 smd rect (at -1.5875 -5.8674) (size 0.4064 3.5052) (layers F.Cu F.Paste F.Mask)) + (pad 15 smd rect (at -2.2225 -5.8674) (size 0.4064 3.5052) (layers F.Cu F.Paste F.Mask)) + (pad 40 smd rect (at -2.8575 -5.8674) (size 0.4064 3.5052) (layers F.Cu F.Paste F.Mask)) + (pad 16 smd rect (at -3.4925 -5.8674) (size 0.4064 3.5052) (layers F.Cu F.Paste F.Mask)) + (pad 41 smd rect (at -4.1275 -5.8674) (size 0.4064 3.5052) (layers F.Cu F.Paste F.Mask)) + (pad 17 smd rect (at -4.7625 -5.8674) (size 0.4064 3.5052) (layers F.Cu F.Paste F.Mask)) + (pad 42 smd rect (at -5.3975 -5.8674) (size 0.4064 3.5052) (layers F.Cu F.Paste F.Mask)) + (pad 18 smd rect (at -6.0325 -5.8674) (size 0.4064 3.5052) (layers F.Cu F.Paste F.Mask)) + (pad 43 smd rect (at -6.6675 -5.8674) (size 0.4064 3.5052) (layers F.Cu F.Paste F.Mask)) + (pad 19 smd rect (at -7.3025 -5.8674) (size 0.4064 3.5052) (layers F.Cu F.Paste F.Mask)) + (pad 44 smd rect (at -7.9375 -5.8674) (size 0.4064 3.5052) (layers F.Cu F.Paste F.Mask)) + (pad 20 smd rect (at -8.5725 -5.8674) (size 0.4064 3.5052) (layers F.Cu F.Paste F.Mask)) + (pad 45 smd rect (at -9.2075 -5.8674) (size 0.4064 3.5052) (layers F.Cu F.Paste F.Mask)) + (pad 21 smd rect (at -9.8425 -5.8674) (size 0.4064 3.5052) (layers F.Cu F.Paste F.Mask)) + (pad 46 smd rect (at -10.4775 -5.8674) (size 0.4064 3.5052) (layers F.Cu F.Paste F.Mask)) + (pad 22 smd rect (at -11.1125 -5.8674) (size 0.4064 3.5052) (layers F.Cu F.Paste F.Mask)) + (pad 47 smd rect (at -11.7475 -5.8674) (size 0.4064 3.5052) (layers F.Cu F.Paste F.Mask)) + (pad 23 smd rect (at -12.3825 -5.8674) (size 0.4064 3.5052) (layers F.Cu F.Paste F.Mask)) + (pad 48 smd rect (at -13.0175 -5.8674) (size 0.4064 3.5052) (layers F.Cu F.Paste F.Mask)) + (pad 24 smd rect (at -13.6525 -5.8674) (size 0.4064 3.5052) (layers F.Cu F.Paste F.Mask)) + (pad 49 smd rect (at -14.2875 -5.8674) (size 0.4064 3.5052) (layers F.Cu F.Paste F.Mask)) + (pad 25 smd rect (at -14.9225 -5.8674) (size 0.4064 3.5052) (layers F.Cu F.Paste F.Mask)) + (pad 50 smd rect (at -15.5575 -5.8674) (size 0.4064 3.5052) (layers F.Cu F.Paste F.Mask)) + (pad "" thru_hole circle (at -19.3675 -2.8702) (size 3.9878 3.9878) (drill 2.2098) (layers *.Cu *.Mask F.SilkS)) + (pad "" thru_hole circle (at 19.3675 -2.8702) (size 3.9878 3.9878) (drill 2.2098) (layers *.Cu *.Mask F.SilkS)) + (pad "" thru_hole circle (at -19.3675 0.127) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask F.SilkS)) + (pad "" thru_hole circle (at 19.3675 0.127) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask F.SilkS)) + (pad "" smd rect (at 23.3426 -0.2032) (size 2.4892 4.572) (layers F.Cu F.Paste B.SilkS F.Mask)) + (pad "" smd rect (at -23.3426 -0.2032) (size 2.4892 4.572) (layers F.Cu F.Paste B.SilkS F.Mask)) +) diff --git a/PCB/.pretty/AK300-2.kicad_mod b/PCB/.pretty/AK300-2.kicad_mod new file mode 100644 index 00000000..cab9f1dd --- /dev/null +++ b/PCB/.pretty/AK300-2.kicad_mod @@ -0,0 +1,98 @@ +(module AK300-2 (layer F.Cu) (tedit 54792136) + (descr CONNECTOR) + (tags CONNECTOR) + (attr virtual) + (fp_text reference REF** (at -1.92 -6.985) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value AK300-2 (at 2.779 7.747) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 8.363 -6.473) (end -2.83 -6.473) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.363 6.473) (end 8.363 -6.473) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.83 6.473) (end 8.363 6.473) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.83 -6.473) (end -2.83 6.473) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.2596 2.54) (end 1.2804 2.54) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.2804 2.54) (end 1.2804 -0.254) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.2596 -0.254) (end 1.2804 -0.254) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.2596 2.54) (end -1.2596 -0.254) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.7442 2.54) (end 6.2842 2.54) (layer F.SilkS) (width 0.15)) + (fp_line (start 6.2842 2.54) (end 6.2842 -0.254) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.7442 -0.254) (end 6.2842 -0.254) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.7442 2.54) (end 3.7442 -0.254) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.605 -6.223) (end 7.605 -3.175) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.605 -6.223) (end -2.58 -6.223) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.605 -6.223) (end 8.113 -6.223) (layer F.SilkS) (width 0.15)) + (fp_line (start 8.113 -6.223) (end 8.113 -1.397) (layer F.SilkS) (width 0.15)) + (fp_line (start 8.113 -1.397) (end 7.605 -1.651) (layer F.SilkS) (width 0.15)) + (fp_line (start 8.113 5.461) (end 7.605 5.207) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.605 5.207) (end 7.605 6.223) (layer F.SilkS) (width 0.15)) + (fp_line (start 8.113 3.81) (end 7.605 4.064) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.605 4.064) (end 7.605 5.207) (layer F.SilkS) (width 0.15)) + (fp_line (start 8.113 3.81) (end 8.113 5.461) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.9822 6.223) (end 2.9822 4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.0462 -0.254) (end 7.0462 4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.9822 6.223) (end 7.0462 6.223) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.0462 6.223) (end 7.605 6.223) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.0424 6.223) (end 2.0424 4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.0424 6.223) (end 2.9822 6.223) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.0216 -0.254) (end -2.0216 4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.58 6.223) (end -2.0216 6.223) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.0216 6.223) (end 2.0424 6.223) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.9822 4.318) (end 7.0462 4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.9822 4.318) (end 2.9822 -0.254) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.0462 4.318) (end 7.0462 6.223) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.0424 4.318) (end -2.0216 4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.0424 4.318) (end 2.0424 -0.254) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.0216 4.318) (end -2.0216 6.223) (layer F.SilkS) (width 0.15)) + (fp_line (start 6.6652 3.683) (end 6.6652 0.508) (layer F.SilkS) (width 0.15)) + (fp_line (start 6.6652 3.683) (end 3.3632 3.683) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.3632 3.683) (end 3.3632 0.508) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.6614 3.683) (end 1.6614 0.508) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.6614 3.683) (end -1.6406 3.683) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.6406 3.683) (end -1.6406 0.508) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.6406 0.508) (end -1.2596 0.508) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.6614 0.508) (end 1.2804 0.508) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.3632 0.508) (end 3.7442 0.508) (layer F.SilkS) (width 0.15)) + (fp_line (start 6.6652 0.508) (end 6.2842 0.508) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.58 6.223) (end -2.58 -0.635) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.58 -0.635) (end -2.58 -3.175) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.605 -1.651) (end 7.605 -0.635) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.605 -0.635) (end 7.605 4.064) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.58 -3.175) (end 7.605 -3.175) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.58 -3.175) (end -2.58 -6.223) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.605 -3.175) (end 7.605 -1.651) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.9822 -3.429) (end 2.9822 -5.969) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.9822 -5.969) (end 7.0462 -5.969) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.0462 -5.969) (end 7.0462 -3.429) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.0462 -3.429) (end 2.9822 -3.429) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.0424 -3.429) (end 2.0424 -5.969) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.0424 -3.429) (end -2.0216 -3.429) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.0216 -3.429) (end -2.0216 -5.969) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.0424 -5.969) (end -2.0216 -5.969) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.3886 -4.445) (end 6.4366 -5.08) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.5156 -4.318) (end 6.5636 -4.953) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.6152 -4.445) (end 1.43534 -5.08) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.4882 -4.318) (end 1.5598 -4.953) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.0216 -0.254) (end -1.6406 -0.254) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.0424 -0.254) (end 1.6614 -0.254) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.6614 -0.254) (end -1.6406 -0.254) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.58 -0.635) (end -1.6406 -0.635) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.6406 -0.635) (end 1.6614 -0.635) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.6614 -0.635) (end 3.3632 -0.635) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.605 -0.635) (end 6.6652 -0.635) (layer F.SilkS) (width 0.15)) + (fp_line (start 6.6652 -0.635) (end 3.3632 -0.635) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.0462 -0.254) (end 6.6652 -0.254) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.9822 -0.254) (end 3.3632 -0.254) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.3632 -0.254) (end 6.6652 -0.254) (layer F.SilkS) (width 0.15)) + (fp_arc (start 6.0302 -4.59486) (end 6.53566 -5.05206) (angle 90.5) (layer F.SilkS) (width 0.15)) + (fp_arc (start 5.065 -6.0706) (end 6.52804 -4.11734) (angle 75.5) (layer F.SilkS) (width 0.15)) + (fp_arc (start 4.98626 -3.7084) (end 3.3886 -5.0038) (angle 100) (layer F.SilkS) (width 0.15)) + (fp_arc (start 3.8712 -4.64566) (end 3.58164 -4.1275) (angle 104.2) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.0264 -4.59486) (end 1.5344 -5.05206) (angle 90.5) (layer F.SilkS) (width 0.15)) + (fp_arc (start 0.06374 -6.0706) (end 1.52678 -4.11734) (angle 75.5) (layer F.SilkS) (width 0.15)) + (fp_arc (start -0.01246 -3.7084) (end -1.6152 -5.0038) (angle 100) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.1326 -4.64566) (end -1.41962 -4.1275) (angle 104.2) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole oval (at 0 0) (size 1.9812 3.9624) (drill 1.3208) (layers *.Cu F.Paste F.SilkS F.Mask)) + (pad 2 thru_hole oval (at 5 0) (size 1.9812 3.9624) (drill 1.3208) (layers *.Cu F.Paste F.SilkS F.Mask)) +) diff --git a/PCB/.pretty/AK300-3.kicad_mod b/PCB/.pretty/AK300-3.kicad_mod new file mode 100644 index 00000000..b3eaf956 --- /dev/null +++ b/PCB/.pretty/AK300-3.kicad_mod @@ -0,0 +1,127 @@ +(module AK300-3 (layer F.Cu) (tedit 54791EF3) + (descr CONNECTOR) + (tags CONNECTOR) + (attr virtual) + (fp_text reference REF** (at -1.945 -6.995) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value AK300-3 (at 2.754 7.737) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 13.418 -6.473) (end -2.83 -6.473) (layer F.CrtYd) (width 0.05)) + (fp_line (start 13.418 6.473) (end 13.418 -6.473) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.83 6.473) (end 13.418 6.473) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.83 -6.473) (end -2.83 6.473) (layer F.CrtYd) (width 0.05)) + (fp_line (start 12.66 -0.645) (end -2.5165 -0.645) (layer F.SilkS) (width 0.15)) + (fp_line (start 8.0245 3.9905) (end 8.0245 -0.264) (layer F.SilkS) (width 0.15)) + (fp_line (start 12.0885 6.213) (end 7.58 6.213) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.58 -3.185) (end 12.5965 -3.185) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.58 -6.233) (end 12.66 -6.233) (layer F.SilkS) (width 0.15)) + (fp_arc (start 8.9262 -4.65566) (end 8.63664 -4.1375) (angle 104.2) (layer F.SilkS) (width 0.15)) + (fp_arc (start 10.04126 -3.7184) (end 8.4436 -5.0138) (angle 100) (layer F.SilkS) (width 0.15)) + (fp_arc (start 10.12 -6.0806) (end 11.58304 -4.12734) (angle 75.5) (layer F.SilkS) (width 0.15)) + (fp_arc (start 11.0852 -4.60486) (end 11.59066 -5.06206) (angle 90.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 8.4182 -0.264) (end 11.7202 -0.264) (layer F.SilkS) (width 0.15)) + (fp_line (start 8.0372 -0.264) (end 8.4182 -0.264) (layer F.SilkS) (width 0.15)) + (fp_line (start 12.1012 -0.264) (end 11.7202 -0.264) (layer F.SilkS) (width 0.15)) + (fp_line (start 8.5706 -4.328) (end 11.6186 -4.963) (layer F.SilkS) (width 0.15)) + (fp_line (start 8.4436 -4.455) (end 11.4916 -5.09) (layer F.SilkS) (width 0.15)) + (fp_line (start 12.1012 -3.439) (end 8.0372 -3.439) (layer F.SilkS) (width 0.15)) + (fp_line (start 12.1012 -5.979) (end 12.1012 -3.439) (layer F.SilkS) (width 0.15)) + (fp_line (start 8.0372 -5.979) (end 12.1012 -5.979) (layer F.SilkS) (width 0.15)) + (fp_line (start 8.0372 -3.439) (end 8.0372 -5.979) (layer F.SilkS) (width 0.15)) + (fp_line (start 12.66 -3.185) (end 12.66 -1.661) (layer F.SilkS) (width 0.15)) + (fp_line (start 12.66 -0.645) (end 12.66 4.054) (layer F.SilkS) (width 0.15)) + (fp_line (start 12.66 -1.661) (end 12.66 -0.645) (layer F.SilkS) (width 0.15)) + (fp_line (start 11.7202 0.498) (end 11.3392 0.498) (layer F.SilkS) (width 0.15)) + (fp_line (start 8.4182 0.498) (end 8.7992 0.498) (layer F.SilkS) (width 0.15)) + (fp_line (start 8.4182 3.673) (end 8.4182 0.498) (layer F.SilkS) (width 0.15)) + (fp_line (start 11.7202 3.673) (end 8.4182 3.673) (layer F.SilkS) (width 0.15)) + (fp_line (start 11.7202 3.673) (end 11.7202 0.498) (layer F.SilkS) (width 0.15)) + (fp_line (start 12.1012 4.308) (end 12.1012 6.213) (layer F.SilkS) (width 0.15)) + (fp_line (start 8.0372 4.308) (end 12.1012 4.308) (layer F.SilkS) (width 0.15)) + (fp_line (start 12.1012 6.213) (end 12.66 6.213) (layer F.SilkS) (width 0.15)) + (fp_line (start 12.1012 -0.264) (end 12.1012 4.308) (layer F.SilkS) (width 0.15)) + (fp_line (start 8.0372 6.213) (end 8.0372 4.308) (layer F.SilkS) (width 0.15)) + (fp_line (start 13.168 3.8) (end 13.168 5.451) (layer F.SilkS) (width 0.15)) + (fp_line (start 12.66 4.054) (end 12.66 5.197) (layer F.SilkS) (width 0.15)) + (fp_line (start 13.168 3.8) (end 12.66 4.054) (layer F.SilkS) (width 0.15)) + (fp_line (start 12.66 5.197) (end 12.66 6.213) (layer F.SilkS) (width 0.15)) + (fp_line (start 13.168 5.451) (end 12.66 5.197) (layer F.SilkS) (width 0.15)) + (fp_line (start 13.168 -1.407) (end 12.66 -1.661) (layer F.SilkS) (width 0.15)) + (fp_line (start 13.168 -6.233) (end 13.168 -1.407) (layer F.SilkS) (width 0.15)) + (fp_line (start 12.66 -6.233) (end 13.168 -6.233) (layer F.SilkS) (width 0.15)) + (fp_line (start 12.66 -6.233) (end 12.66 -3.185) (layer F.SilkS) (width 0.15)) + (fp_line (start 8.7992 2.53) (end 8.7992 -0.264) (layer F.SilkS) (width 0.15)) + (fp_line (start 8.7992 -0.264) (end 11.3392 -0.264) (layer F.SilkS) (width 0.15)) + (fp_line (start 11.3392 2.53) (end 11.3392 -0.264) (layer F.SilkS) (width 0.15)) + (fp_line (start 8.7992 2.53) (end 11.3392 2.53) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.2846 2.53) (end 1.2554 2.53) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.2554 2.53) (end 1.2554 -0.264) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.2846 -0.264) (end 1.2554 -0.264) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.2846 2.53) (end -1.2846 -0.264) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.7192 2.53) (end 6.2592 2.53) (layer F.SilkS) (width 0.15)) + (fp_line (start 6.2592 2.53) (end 6.2592 -0.264) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.7192 -0.264) (end 6.2592 -0.264) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.7192 2.53) (end 3.7192 -0.264) (layer F.SilkS) (width 0.15)) + (fp_line (start 8.0245 5.197) (end 8.0245 6.213) (layer F.SilkS) (width 0.15)) + (fp_line (start 8.0245 4.054) (end 8.0245 5.197) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.9572 6.213) (end 2.9572 4.308) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.0212 -0.264) (end 7.0212 4.308) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.9572 6.213) (end 7.0212 6.213) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.0212 6.213) (end 7.58 6.213) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.0174 6.213) (end 2.0174 4.308) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.0174 6.213) (end 2.9572 6.213) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.0466 -0.264) (end -2.0466 4.308) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.58 6.213) (end -2.0466 6.213) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.0466 6.213) (end 2.0174 6.213) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.9572 4.308) (end 7.0212 4.308) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.9572 4.308) (end 2.9572 -0.264) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.0212 4.308) (end 7.0212 6.213) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.0174 4.308) (end -2.0466 4.308) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.0174 4.308) (end 2.0174 -0.264) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.0466 4.308) (end -2.0466 6.213) (layer F.SilkS) (width 0.15)) + (fp_line (start 6.6402 3.673) (end 6.6402 0.498) (layer F.SilkS) (width 0.15)) + (fp_line (start 6.6402 3.673) (end 3.3382 3.673) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.3382 3.673) (end 3.3382 0.498) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.6364 3.673) (end 1.6364 0.498) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.6364 3.673) (end -1.6656 3.673) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.6656 3.673) (end -1.6656 0.498) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.6656 0.498) (end -1.2846 0.498) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.6364 0.498) (end 1.2554 0.498) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.3382 0.498) (end 3.7192 0.498) (layer F.SilkS) (width 0.15)) + (fp_line (start 6.6402 0.498) (end 6.2592 0.498) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.58 6.213) (end -2.58 -0.645) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.58 -0.645) (end -2.58 -3.185) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.58 -3.185) (end 7.58 -3.185) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.58 -3.185) (end -2.58 -6.233) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.9572 -3.439) (end 2.9572 -5.979) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.9572 -5.979) (end 7.0212 -5.979) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.0212 -5.979) (end 7.0212 -3.439) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.0212 -3.439) (end 2.9572 -3.439) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.0174 -3.439) (end 2.0174 -5.979) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.0174 -3.439) (end -2.0466 -3.439) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.0466 -3.439) (end -2.0466 -5.979) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.0174 -5.979) (end -2.0466 -5.979) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.3636 -4.455) (end 6.4116 -5.09) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.4906 -4.328) (end 6.5386 -4.963) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.6402 -4.455) (end 1.41034 -5.09) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5132 -4.328) (end 1.5348 -4.963) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.0466 -0.264) (end -1.6656 -0.264) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.0174 -0.264) (end 1.6364 -0.264) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.6364 -0.264) (end -1.6656 -0.264) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.0212 -0.264) (end 6.6402 -0.264) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.9572 -0.264) (end 3.3382 -0.264) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.3382 -0.264) (end 6.6402 -0.264) (layer F.SilkS) (width 0.15)) + (fp_arc (start 6.0052 -4.60486) (end 6.51066 -5.06206) (angle 90.5) (layer F.SilkS) (width 0.15)) + (fp_arc (start 5.04 -6.0806) (end 6.50304 -4.12734) (angle 75.5) (layer F.SilkS) (width 0.15)) + (fp_arc (start 4.96126 -3.7184) (end 3.3636 -5.0138) (angle 100) (layer F.SilkS) (width 0.15)) + (fp_arc (start 3.8462 -4.65566) (end 3.55664 -4.1375) (angle 104.2) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.0014 -4.60486) (end 1.5094 -5.06206) (angle 90.5) (layer F.SilkS) (width 0.15)) + (fp_arc (start 0.03874 -6.0806) (end 1.50178 -4.12734) (angle 75.5) (layer F.SilkS) (width 0.15)) + (fp_arc (start -0.03746 -3.7184) (end -1.6402 -5.0138) (angle 100) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.1576 -4.65566) (end -1.44462 -4.1375) (angle 104.2) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole oval (at 0 0) (size 1.9812 3.9624) (drill 1.3208) (layers *.Cu F.Paste F.SilkS F.Mask)) + (pad 2 thru_hole oval (at 5 0) (size 1.9812 3.9624) (drill 1.3208) (layers *.Cu F.Paste F.SilkS F.Mask)) + (pad 3 thru_hole oval (at 10 0) (size 1.9812 3.9624) (drill 1.3208) (layers *.Cu F.Paste F.SilkS F.Mask)) +) diff --git a/PCB/.pretty/AK300-4.kicad_mod b/PCB/.pretty/AK300-4.kicad_mod new file mode 100644 index 00000000..ca53533d --- /dev/null +++ b/PCB/.pretty/AK300-4.kicad_mod @@ -0,0 +1,150 @@ +(module AK300-4 (layer F.Cu) (tedit 54791E04) + (descr CONNECTOR) + (tags CONNECTOR) + (attr virtual) + (fp_text reference REF** (at -1.945 -6.985) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value AK300-4 (at 2.754 7.747) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 18.35 -6.473) (end 18.35 6.473) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.83 -6.473) (end -2.83 6.473) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.83 6.473) (end 18.35 6.473) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.83 -6.473) (end 18.35 -6.473) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.75 -0.254) (end 8.75 2.54) (layer F.SilkS) (width 0.15)) + (fp_line (start 8.75 2.54) (end 11.29 2.54) (layer F.SilkS) (width 0.15)) + (fp_line (start 11.29 2.54) (end 11.29 -0.254) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.9372 -3.429) (end 7.9372 -5.969) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.9372 -5.969) (end 12.0012 -5.969) (layer F.SilkS) (width 0.15)) + (fp_line (start 12.0012 -5.969) (end 12.0012 -3.429) (layer F.SilkS) (width 0.15)) + (fp_line (start 12.0012 -3.429) (end 7.9372 -3.429) (layer F.SilkS) (width 0.15)) + (fp_line (start 8.3436 -4.445) (end 11.3916 -5.08) (layer F.SilkS) (width 0.15)) + (fp_line (start 8.4706 -4.318) (end 11.5186 -4.953) (layer F.SilkS) (width 0.15)) + (fp_arc (start 10.9852 -4.59486) (end 11.49066 -5.05206) (angle 90.5) (layer F.SilkS) (width 0.15)) + (fp_arc (start 10.02 -6.0706) (end 11.48304 -4.11734) (angle 75.5) (layer F.SilkS) (width 0.15)) + (fp_arc (start 9.94126 -3.7084) (end 8.3436 -5.0038) (angle 100) (layer F.SilkS) (width 0.15)) + (fp_arc (start 8.8262 -4.64566) (end 8.53664 -4.1275) (angle 104.2) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.988 4.318) (end 12.052 4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start 12.052 6.223) (end 12.052 -0.254) (layer F.SilkS) (width 0.15)) + (fp_line (start 8.369 0.508) (end 8.75 0.508) (layer F.SilkS) (width 0.15)) + (fp_line (start 8.369 0.508) (end 8.369 3.683) (layer F.SilkS) (width 0.15)) + (fp_line (start 8.369 3.683) (end 11.671 3.683) (layer F.SilkS) (width 0.15)) + (fp_line (start 11.671 3.683) (end 11.671 0.508) (layer F.SilkS) (width 0.15)) + (fp_line (start 11.671 0.508) (end 11.29 0.508) (layer F.SilkS) (width 0.15)) + (fp_line (start 12.51 -0.635) (end 17.59 -0.635) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.988 6.223) (end 7.988 -0.254) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.988 -0.254) (end 12.052 -0.254) (layer F.SilkS) (width 0.15)) + (fp_line (start 16.955 6.223) (end 13.018 6.223) (layer F.SilkS) (width 0.15)) + (fp_line (start 13.168 6.223) (end 7.072 6.223) (layer F.SilkS) (width 0.15)) + (fp_line (start 17.59 -3.048) (end -2.58 -3.048) (layer F.SilkS) (width 0.15)) + (fp_line (start 17.74 -6.223) (end -2.58 -6.223) (layer F.SilkS) (width 0.15)) + (fp_line (start 12.66 -0.635) (end -2.5165 -0.635) (layer F.SilkS) (width 0.15)) + (fp_line (start 12.9545 4.0005) (end 12.9545 -0.254) (layer F.SilkS) (width 0.15)) + (fp_arc (start 13.8562 -4.64566) (end 13.56664 -4.1275) (angle 104.2) (layer F.SilkS) (width 0.15)) + (fp_arc (start 14.97126 -3.7084) (end 13.3736 -5.0038) (angle 100) (layer F.SilkS) (width 0.15)) + (fp_arc (start 15.05 -6.0706) (end 16.51304 -4.11734) (angle 75.5) (layer F.SilkS) (width 0.15)) + (fp_arc (start 16.0152 -4.59486) (end 16.52066 -5.05206) (angle 90.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 13.3482 -0.254) (end 16.6502 -0.254) (layer F.SilkS) (width 0.15)) + (fp_line (start 12.9672 -0.254) (end 13.3482 -0.254) (layer F.SilkS) (width 0.15)) + (fp_line (start 17.0312 -0.254) (end 16.6502 -0.254) (layer F.SilkS) (width 0.15)) + (fp_line (start 13.5006 -4.318) (end 16.5486 -4.953) (layer F.SilkS) (width 0.15)) + (fp_line (start 13.3736 -4.445) (end 16.4216 -5.08) (layer F.SilkS) (width 0.15)) + (fp_line (start 17.0312 -3.429) (end 12.9672 -3.429) (layer F.SilkS) (width 0.15)) + (fp_line (start 17.0312 -5.969) (end 17.0312 -3.429) (layer F.SilkS) (width 0.15)) + (fp_line (start 12.9672 -5.969) (end 17.0312 -5.969) (layer F.SilkS) (width 0.15)) + (fp_line (start 12.9672 -3.429) (end 12.9672 -5.969) (layer F.SilkS) (width 0.15)) + (fp_line (start 17.59 -3.175) (end 17.59 -1.651) (layer F.SilkS) (width 0.15)) + (fp_line (start 17.59 -0.635) (end 17.59 4.064) (layer F.SilkS) (width 0.15)) + (fp_line (start 17.59 -1.651) (end 17.59 -0.635) (layer F.SilkS) (width 0.15)) + (fp_line (start 16.6502 0.508) (end 16.2692 0.508) (layer F.SilkS) (width 0.15)) + (fp_line (start 13.3482 0.508) (end 13.7292 0.508) (layer F.SilkS) (width 0.15)) + (fp_line (start 13.3482 3.683) (end 13.3482 0.508) (layer F.SilkS) (width 0.15)) + (fp_line (start 16.6502 3.683) (end 13.3482 3.683) (layer F.SilkS) (width 0.15)) + (fp_line (start 16.6502 3.683) (end 16.6502 0.508) (layer F.SilkS) (width 0.15)) + (fp_line (start 17.0312 4.318) (end 17.0312 6.223) (layer F.SilkS) (width 0.15)) + (fp_line (start 12.9672 4.318) (end 17.0312 4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start 17.0312 6.223) (end 17.59 6.223) (layer F.SilkS) (width 0.15)) + (fp_line (start 17.0312 -0.254) (end 17.0312 4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start 12.9672 6.223) (end 12.9672 4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start 18.098 3.81) (end 18.098 5.461) (layer F.SilkS) (width 0.15)) + (fp_line (start 17.59 4.064) (end 17.59 5.207) (layer F.SilkS) (width 0.15)) + (fp_line (start 18.098 3.81) (end 17.59 4.064) (layer F.SilkS) (width 0.15)) + (fp_line (start 17.59 5.207) (end 17.59 6.223) (layer F.SilkS) (width 0.15)) + (fp_line (start 18.098 5.461) (end 17.59 5.207) (layer F.SilkS) (width 0.15)) + (fp_line (start 18.098 -1.397) (end 17.59 -1.651) (layer F.SilkS) (width 0.15)) + (fp_line (start 18.098 -6.223) (end 18.098 -1.397) (layer F.SilkS) (width 0.15)) + (fp_line (start 17.59 -6.223) (end 18.098 -6.223) (layer F.SilkS) (width 0.15)) + (fp_line (start 17.59 -6.223) (end 17.59 -3.175) (layer F.SilkS) (width 0.15)) + (fp_line (start 13.7292 2.54) (end 13.7292 -0.254) (layer F.SilkS) (width 0.15)) + (fp_line (start 13.7292 -0.254) (end 16.2692 -0.254) (layer F.SilkS) (width 0.15)) + (fp_line (start 16.2692 2.54) (end 16.2692 -0.254) (layer F.SilkS) (width 0.15)) + (fp_line (start 13.7292 2.54) (end 16.2692 2.54) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.2846 2.54) (end 1.2554 2.54) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.2554 2.54) (end 1.2554 -0.254) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.2846 -0.254) (end 1.2554 -0.254) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.2846 2.54) (end -1.2846 -0.254) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.7192 2.54) (end 6.2592 2.54) (layer F.SilkS) (width 0.15)) + (fp_line (start 6.2592 2.54) (end 6.2592 -0.254) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.7192 -0.254) (end 6.2592 -0.254) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.7192 2.54) (end 3.7192 -0.254) (layer F.SilkS) (width 0.15)) + (fp_line (start 12.9545 5.207) (end 12.9545 6.223) (layer F.SilkS) (width 0.15)) + (fp_line (start 12.9545 4.064) (end 12.9545 5.207) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.9572 6.223) (end 2.9572 4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.0212 -0.254) (end 7.0212 4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.9572 6.223) (end 7.0212 6.223) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.0174 6.223) (end 2.0174 4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.0174 6.223) (end 2.9572 6.223) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.0466 -0.254) (end -2.0466 4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.58 6.223) (end -2.0466 6.223) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.0466 6.223) (end 2.0174 6.223) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.9572 4.318) (end 7.0212 4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.9572 4.318) (end 2.9572 -0.254) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.0212 4.318) (end 7.0212 6.223) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.0174 4.318) (end -2.0466 4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.0174 4.318) (end 2.0174 -0.254) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.0466 4.318) (end -2.0466 6.223) (layer F.SilkS) (width 0.15)) + (fp_line (start 6.6402 3.683) (end 6.6402 0.508) (layer F.SilkS) (width 0.15)) + (fp_line (start 6.6402 3.683) (end 3.3382 3.683) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.3382 3.683) (end 3.3382 0.508) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.6364 3.683) (end 1.6364 0.508) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.6364 3.683) (end -1.6656 3.683) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.6656 3.683) (end -1.6656 0.508) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.6656 0.508) (end -1.2846 0.508) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.6364 0.508) (end 1.2554 0.508) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.3382 0.508) (end 3.7192 0.508) (layer F.SilkS) (width 0.15)) + (fp_line (start 6.6402 0.508) (end 6.2592 0.508) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.58 6.223) (end -2.58 -0.635) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.58 -0.635) (end -2.58 -3.175) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.58 -3.175) (end -2.58 -6.223) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.9572 -3.429) (end 2.9572 -5.969) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.9572 -5.969) (end 7.0212 -5.969) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.0212 -5.969) (end 7.0212 -3.429) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.0212 -3.429) (end 2.9572 -3.429) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.0174 -3.429) (end 2.0174 -5.969) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.0174 -3.429) (end -2.0466 -3.429) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.0466 -3.429) (end -2.0466 -5.969) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.0174 -5.969) (end -2.0466 -5.969) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.3636 -4.445) (end 6.4116 -5.08) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.4906 -4.318) (end 6.5386 -4.953) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.6402 -4.445) (end 1.41034 -5.08) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5132 -4.318) (end 1.5348 -4.953) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.0466 -0.254) (end -1.6656 -0.254) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.0174 -0.254) (end 1.6364 -0.254) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.6364 -0.254) (end -1.6656 -0.254) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.0212 -0.254) (end 6.6402 -0.254) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.9572 -0.254) (end 3.3382 -0.254) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.3382 -0.254) (end 6.6402 -0.254) (layer F.SilkS) (width 0.15)) + (fp_arc (start 6.0052 -4.59486) (end 6.51066 -5.05206) (angle 90.5) (layer F.SilkS) (width 0.15)) + (fp_arc (start 5.04 -6.0706) (end 6.50304 -4.11734) (angle 75.5) (layer F.SilkS) (width 0.15)) + (fp_arc (start 4.96126 -3.7084) (end 3.3636 -5.0038) (angle 100) (layer F.SilkS) (width 0.15)) + (fp_arc (start 3.8462 -4.64566) (end 3.55664 -4.1275) (angle 104.2) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.0014 -4.59486) (end 1.5094 -5.05206) (angle 90.5) (layer F.SilkS) (width 0.15)) + (fp_arc (start 0.03874 -6.0706) (end 1.50178 -4.11734) (angle 75.5) (layer F.SilkS) (width 0.15)) + (fp_arc (start -0.03746 -3.7084) (end -1.6402 -5.0038) (angle 100) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.1576 -4.64566) (end -1.44462 -4.1275) (angle 104.2) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole oval (at 0 0) (size 1.9812 3.9624) (drill 1.3208) (layers *.Cu F.Paste F.SilkS F.Mask)) + (pad 2 thru_hole oval (at 5 0) (size 1.9812 3.9624) (drill 1.3208) (layers *.Cu F.Paste F.SilkS F.Mask)) + (pad 4 thru_hole oval (at 15 0) (size 1.9812 3.9624) (drill 1.3208) (layers *.Cu F.Paste F.SilkS F.Mask)) + (pad 3 thru_hole oval (at 10 0) (size 1.9812 3.9624) (drill 1.3208) (layers *.Cu *.Mask F.SilkS)) +) diff --git a/PCB/.pretty/BARREL_JACK.kicad_mod b/PCB/.pretty/BARREL_JACK.kicad_mod new file mode 100644 index 00000000..c465691e --- /dev/null +++ b/PCB/.pretty/BARREL_JACK.kicad_mod @@ -0,0 +1,18 @@ +(module BARREL_JACK (layer F.Cu) (tedit 0) + (descr "DC Barrel Jack") + (tags "Power Jack") + (fp_text reference REF** (at 10.09904 0 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value BARREL_JACK (at 0 -5.99948) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -4.0005 -4.50088) (end -4.0005 4.50088) (layer F.SilkS) (width 0.15)) + (fp_line (start -7.50062 -4.50088) (end -7.50062 4.50088) (layer F.SilkS) (width 0.15)) + (fp_line (start -7.50062 4.50088) (end 7.00024 4.50088) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.00024 4.50088) (end 7.00024 -4.50088) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.00024 -4.50088) (end -7.50062 -4.50088) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole rect (at 6.20014 0) (size 3.50012 3.50012) (drill oval 1.00076 2.99974) (layers *.Cu *.Mask F.SilkS)) + (pad 2 thru_hole rect (at 0.20066 0) (size 3.50012 3.50012) (drill oval 1.00076 2.99974) (layers *.Cu *.Mask F.SilkS)) + (pad 3 thru_hole rect (at 3.2004 4.699) (size 3.50012 3.50012) (drill oval 2.99974 1.00076) (layers *.Cu *.Mask F.SilkS)) +) diff --git a/PCB/.pretty/BUSPCI.kicad_mod b/PCB/.pretty/BUSPCI.kicad_mod new file mode 100644 index 00000000..e541a62c --- /dev/null +++ b/PCB/.pretty/BUSPCI.kicad_mod @@ -0,0 +1,257 @@ +(module BUSPCI (layer F.Cu) (tedit 0) + (descr "Connecteur Bus PCI") + (tags "PCI CONN") + (fp_text reference REF** (at -35.941 -4.699) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value BUSPCI (at -5.842 -4.699) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -63.754 -3.81) (end -63.754 4.445) (layer F.SilkS) (width 0.15)) + (fp_line (start -63.754 4.445) (end -0.889 4.445) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.889 4.445) (end -0.889 -3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.889 -3.81) (end 0.889 -3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.889 -3.81) (end 0.889 4.445) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.889 4.445) (end 15.494 4.445) (layer F.SilkS) (width 0.15)) + (fp_line (start 15.494 4.445) (end 15.494 -3.81) (layer F.SilkS) (width 0.15)) + (pad B1 connect rect (at -62.865 -0.254) (size 1.016 4.572) (layers F.Cu F.Mask)) + (pad B2 connect rect (at -61.595 -0.254) (size 1.016 4.572) (layers F.Cu F.Mask)) + (pad B3 connect rect (at -60.325 -0.254) (size 1.016 4.572) (layers F.Cu F.Mask)) + (pad B4 connect rect (at -59.055 -0.254) (size 1.016 4.572) (layers F.Cu F.Mask)) + (pad B5 connect rect (at -57.785 -0.254) (size 1.016 4.572) (layers F.Cu F.Mask)) + (pad B6 connect rect (at -56.515 -0.254) (size 1.016 4.572) (layers F.Cu F.Mask)) + (pad B7 connect rect (at -55.245 -0.254) (size 1.016 4.572) (layers F.Cu F.Mask)) + (pad B8 connect rect (at -53.975 -0.254) (size 1.016 4.572) (layers F.Cu F.Mask)) + (pad B9 connect rect (at -52.705 -0.254) (size 1.016 4.572) (layers F.Cu F.Mask)) + (pad B10 connect rect (at -51.435 -0.254) (size 1.016 4.572) (layers F.Cu F.Mask)) + (pad B11 connect rect (at -50.165 -0.254) (size 1.016 4.572) (layers F.Cu F.Mask)) + (pad B12 connect rect (at -48.895 -0.254) (size 1.016 4.572) (layers F.Cu F.Mask)) + (pad B13 connect rect (at -47.625 -0.254) (size 1.016 4.572) (layers F.Cu F.Mask)) + (pad B14 connect rect (at -46.355 -0.254) (size 1.016 4.572) (layers F.Cu F.Mask)) + (pad B15 connect rect (at -45.085 -0.254) (size 1.016 4.572) (layers F.Cu F.Mask)) + (pad B16 connect rect (at -43.815 -0.254) (size 1.016 4.572) (layers F.Cu F.Mask)) + (pad B17 connect rect (at -42.545 -0.254) (size 1.016 4.572) (layers F.Cu F.Mask)) + (pad B18 connect rect (at -41.275 -0.254) (size 1.016 4.572) (layers F.Cu F.Mask)) + (pad B19 connect rect (at -40.005 -0.254) (size 1.016 4.572) (layers F.Cu F.Mask)) + (pad B20 connect rect (at -38.735 -0.254) (size 1.016 4.572) (layers F.Cu F.Mask)) + (pad B21 connect rect (at -37.465 -0.254) (size 1.016 4.572) (layers F.Cu F.Mask)) + (pad B22 connect rect (at -36.195 -0.254) (size 1.016 4.572) (layers F.Cu F.Mask)) + (pad B23 connect rect (at -34.925 -0.254) (size 1.016 4.572) (layers F.Cu F.Mask)) + (pad B24 connect rect (at -33.655 -0.254) (size 1.016 4.572) (layers F.Cu F.Mask)) + (pad B25 connect rect (at -32.385 -0.254) (size 1.016 4.572) (layers F.Cu F.Mask)) + (pad B26 connect rect (at -31.115 -0.254) (size 1.016 4.572) (layers F.Cu F.Mask)) + (pad B27 connect rect (at -29.845 -0.254) (size 1.016 4.572) (layers F.Cu F.Mask)) + (pad B28 connect rect (at -28.575 -0.254) (size 1.016 4.572) (layers F.Cu F.Mask)) + (pad B29 connect rect (at -27.305 -0.254) (size 1.016 4.572) (layers F.Cu F.Mask)) + (pad B30 connect rect (at -26.035 -0.254) (size 1.016 4.572) (layers F.Cu F.Mask)) + (pad B31 connect rect (at -24.765 -0.254) (size 1.016 4.572) (layers F.Cu F.Mask)) + (pad B32 connect rect (at -23.495 -0.254) (size 1.016 4.572) (layers F.Cu F.Mask)) + (pad B33 connect rect (at -22.225 -0.254) (size 1.016 4.572) (layers F.Cu F.Mask)) + (pad B34 connect rect (at -20.955 -0.254) (size 1.016 4.572) (layers F.Cu F.Mask)) + (pad B35 connect rect (at -19.685 -0.254) (size 1.016 4.572) (layers F.Cu F.Mask)) + (pad B36 connect rect (at -18.415 -0.254) (size 1.016 4.572) (layers F.Cu F.Mask)) + (pad B37 connect rect (at -17.145 -0.254) (size 1.016 4.572) (layers F.Cu F.Mask)) + (pad B38 connect rect (at -15.875 -0.254) (size 1.016 4.572) (layers F.Cu F.Mask)) + (pad B39 connect rect (at -14.605 -0.254) (size 1.016 4.572) (layers F.Cu F.Mask)) + (pad B40 connect rect (at -13.335 -0.254) (size 1.016 4.572) (layers F.Cu F.Mask)) + (pad B41 connect rect (at -12.065 -0.254) (size 1.016 4.572) (layers F.Cu F.Mask)) + (pad B42 connect rect (at -10.795 -0.254) (size 1.016 4.572) (layers F.Cu F.Mask)) + (pad B43 connect rect (at -9.525 -0.254) (size 1.016 4.572) (layers F.Cu F.Mask)) + (pad B44 connect rect (at -8.255 -0.254) (size 1.016 4.572) (layers F.Cu F.Mask)) + (pad B45 connect rect (at -6.985 -0.254) (size 1.016 4.572) (layers F.Cu F.Mask)) + (pad B46 connect rect (at -5.715 -0.254) (size 1.016 4.572) (layers F.Cu F.Mask)) + (pad B47 connect rect (at -4.445 -0.254) (size 1.016 4.572) (layers F.Cu F.Mask)) + (pad B48 connect rect (at -3.175 -0.254) (size 1.016 4.572) (layers F.Cu F.Mask)) + (pad B49 connect rect (at -1.905 -0.254) (size 1.016 4.572) (layers F.Cu F.Mask)) + (pad B52 connect rect (at 1.905 -0.254) (size 1.016 4.572) (layers F.Cu F.Mask)) + (pad B53 connect rect (at 3.175 -0.254) (size 1.016 4.572) (layers F.Cu F.Mask)) + (pad B54 connect rect (at 4.445 -0.254) (size 1.016 4.572) (layers F.Cu F.Mask)) + (pad B55 connect rect (at 5.715 -0.254) (size 1.016 4.572) (layers F.Cu F.Mask)) + (pad B56 connect rect (at 6.985 -0.254) (size 1.016 4.572) (layers F.Cu F.Mask)) + (pad B57 connect rect (at 8.255 -0.254) (size 1.016 4.572) (layers F.Cu F.Mask)) + (pad B58 connect rect (at 9.525 -0.254) (size 1.016 4.572) (layers F.Cu F.Mask)) + (pad B59 connect rect (at 10.795 -0.254) (size 1.016 4.572) (layers F.Cu F.Mask)) + (pad B60 connect rect (at 12.065 -0.254) (size 1.016 4.572) (layers F.Cu F.Mask)) + (pad B61 connect rect (at 13.335 -0.254) (size 1.016 4.572) (layers F.Cu F.Mask)) + (pad B62 connect rect (at 14.605 -0.254) (size 1.016 4.572) (layers F.Cu F.Mask)) + (pad A1 connect rect (at -62.865 -0.254) (size 1.016 4.572) (layers B.Cu B.Mask)) + (pad A2 connect rect (at -61.595 -0.254) (size 1.016 4.572) (layers B.Cu B.Mask)) + (pad A3 connect rect (at -60.325 -0.254) (size 1.016 4.572) (layers B.Cu B.Mask)) + (pad A4 connect rect (at -59.055 -0.254) (size 1.016 4.572) (layers B.Cu B.Mask)) + (pad A5 connect rect (at -57.785 -0.254) (size 1.016 4.572) (layers B.Cu B.Mask)) + (pad A6 connect rect (at -56.515 -0.254) (size 1.016 4.572) (layers B.Cu B.Mask)) + (pad A7 connect rect (at -55.245 -0.254) (size 1.016 4.572) (layers B.Cu B.Mask)) + (pad A8 connect rect (at -53.975 -0.254) (size 1.016 4.572) (layers B.Cu B.Mask)) + (pad A9 connect rect (at -52.705 -0.254) (size 1.016 4.572) (layers B.Cu B.Mask)) + (pad A10 connect rect (at -51.435 -0.254) (size 1.016 4.572) (layers B.Cu B.Mask)) + (pad A11 connect rect (at -50.165 -0.254) (size 1.016 4.572) (layers B.Cu B.Mask)) + (pad A12 connect rect (at -48.895 -0.254) (size 1.016 4.572) (layers B.Cu B.Mask)) + (pad A13 connect rect (at -47.625 -0.254) (size 1.016 4.572) (layers B.Cu B.Mask)) + (pad A14 connect rect (at -46.355 -0.254) (size 1.016 4.572) (layers B.Cu B.Mask)) + (pad A15 connect rect (at -45.085 -0.254) (size 1.016 4.572) (layers B.Cu B.Mask)) + (pad A16 connect rect (at -43.815 -0.254) (size 1.016 4.572) (layers B.Cu B.Mask)) + (pad A17 connect rect (at -42.545 -0.254) (size 1.016 4.572) (layers B.Cu B.Mask)) + (pad A18 connect rect (at -41.275 -0.254) (size 1.016 4.572) (layers B.Cu B.Mask)) + (pad A19 connect rect (at -40.005 -0.254) (size 1.016 4.572) (layers B.Cu B.Mask)) + (pad A20 connect rect (at -38.735 -0.254) (size 1.016 4.572) (layers B.Cu B.Mask)) + (pad A21 connect rect (at -37.465 -0.254) (size 1.016 4.572) (layers B.Cu B.Mask)) + (pad A22 connect rect (at -36.195 -0.254) (size 1.016 4.572) (layers B.Cu B.Mask)) + (pad A23 connect rect (at -34.925 -0.254) (size 1.016 4.572) (layers B.Cu B.Mask)) + (pad A24 connect rect (at -33.655 -0.254) (size 1.016 4.572) (layers B.Cu B.Mask)) + (pad A25 connect rect (at -32.385 -0.254) (size 1.016 4.572) (layers B.Cu B.Mask)) + (pad A26 connect rect (at -31.115 -0.254) (size 1.016 4.572) (layers B.Cu B.Mask)) + (pad A27 connect rect (at -29.845 -0.254) (size 1.016 4.572) (layers B.Cu B.Mask)) + (pad A28 connect rect (at -28.575 -0.254) (size 1.016 4.572) (layers B.Cu B.Mask)) + (pad A29 connect rect (at -27.305 -0.254) (size 1.016 4.572) (layers B.Cu B.Mask)) + (pad A30 connect rect (at -26.035 -0.254) (size 1.016 4.572) (layers B.Cu B.Mask)) + (pad A31 connect rect (at -24.765 -0.254) (size 1.016 4.572) (layers B.Cu B.Mask)) + (pad A32 connect rect (at -23.495 -0.254) (size 1.016 4.572) (layers B.Cu B.Mask)) + (pad A33 connect rect (at -22.225 -0.254) (size 1.016 4.572) (layers B.Cu B.Mask)) + (pad A34 connect rect (at -20.955 -0.254) (size 1.016 4.572) (layers B.Cu B.Mask)) + (pad A35 connect rect (at -19.685 -0.254) (size 1.016 4.572) (layers B.Cu B.Mask)) + (pad A36 connect rect (at -18.415 -0.254) (size 1.016 4.572) (layers B.Cu B.Mask)) + (pad A37 connect rect (at -17.145 -0.254) (size 1.016 4.572) (layers B.Cu B.Mask)) + (pad A38 connect rect (at -15.875 -0.254) (size 1.016 4.572) (layers B.Cu B.Mask)) + (pad A39 connect rect (at -14.605 -0.254) (size 1.016 4.572) (layers B.Cu B.Mask)) + (pad A40 connect rect (at -13.335 -0.254) (size 1.016 4.572) (layers B.Cu B.Mask)) + (pad A41 connect rect (at -12.065 -0.254) (size 1.016 4.572) (layers B.Cu B.Mask)) + (pad A42 connect rect (at -10.795 -0.254) (size 1.016 4.572) (layers B.Cu B.Mask)) + (pad A43 connect rect (at -9.525 -0.254) (size 1.016 4.572) (layers B.Cu B.Mask)) + (pad A44 connect rect (at -8.255 -0.254) (size 1.016 4.572) (layers B.Cu B.Mask)) + (pad A45 connect rect (at -6.985 -0.254) (size 1.016 4.572) (layers B.Cu B.Mask)) + (pad A46 connect rect (at -5.715 -0.254) (size 1.016 4.572) (layers B.Cu B.Mask)) + (pad A47 connect rect (at -4.445 -0.254) (size 1.016 4.572) (layers B.Cu B.Mask)) + (pad A48 connect rect (at -3.175 -0.254) (size 1.016 4.572) (layers B.Cu B.Mask)) + (pad A49 connect rect (at -1.905 -0.254) (size 1.016 4.572) (layers B.Cu B.Mask)) + (pad A52 connect rect (at 1.905 -0.254) (size 1.016 4.572) (layers B.Cu B.Mask)) + (pad A53 connect rect (at 3.175 -0.254) (size 1.016 4.572) (layers B.Cu B.Mask)) + (pad A54 connect rect (at 4.445 -0.254) (size 1.016 4.572) (layers B.Cu B.Mask)) + (pad A55 connect rect (at 5.715 -0.254) (size 1.016 4.572) (layers B.Cu B.Mask)) + (pad A56 connect rect (at 6.985 -0.254) (size 1.016 4.572) (layers B.Cu B.Mask)) + (pad A57 connect rect (at 8.255 -0.254) (size 1.016 4.572) (layers B.Cu B.Mask)) + (pad A58 connect rect (at 9.525 -0.254) (size 1.016 4.572) (layers B.Cu B.Mask)) + (pad A59 connect rect (at 10.795 -0.254) (size 1.016 4.572) (layers B.Cu B.Mask)) + (pad A60 connect rect (at 12.065 -0.254) (size 1.016 4.572) (layers B.Cu B.Mask)) + (pad A61 connect rect (at 13.335 -0.254) (size 1.016 4.572) (layers B.Cu B.Mask)) + (pad A62 connect rect (at 14.605 -0.254) (size 1.016 4.572) (layers B.Cu B.Mask)) + (pad B2 connect rect (at -61.595 2.413) (size 0.508 0.762) (layers F.Cu F.Mask)) + (pad B3 connect rect (at -60.325 2.413) (size 0.508 0.762) (layers F.Cu F.Mask)) + (pad B4 connect rect (at -59.055 2.413) (size 0.508 0.762) (layers F.Cu F.Mask)) + (pad B5 connect rect (at -57.785 2.413) (size 0.508 0.762) (layers F.Cu F.Mask)) + (pad B6 connect rect (at -56.515 2.413) (size 0.508 0.762) (layers F.Cu F.Mask)) + (pad B7 connect rect (at -55.245 2.413) (size 0.508 0.762) (layers F.Cu F.Mask)) + (pad B8 connect rect (at -53.975 2.413) (size 0.508 0.762) (layers F.Cu F.Mask)) + (pad B9 connect rect (at -52.705 2.413) (size 0.508 0.762) (layers F.Cu F.Mask)) + (pad B10 connect rect (at -51.435 2.413) (size 0.508 0.762) (layers F.Cu F.Mask)) + (pad B11 connect rect (at -50.165 2.413) (size 0.508 0.762) (layers F.Cu F.Mask)) + (pad B12 connect rect (at -48.895 2.413) (size 0.508 0.762) (layers F.Cu F.Mask)) + (pad B13 connect rect (at -47.625 2.413) (size 0.508 0.762) (layers F.Cu F.Mask)) + (pad B14 connect rect (at -46.355 2.413) (size 0.508 0.762) (layers F.Cu F.Mask)) + (pad B15 connect rect (at -45.085 2.413) (size 0.508 0.762) (layers F.Cu F.Mask)) + (pad B16 connect rect (at -43.815 2.413) (size 0.508 0.762) (layers F.Cu F.Mask)) + (pad B17 connect rect (at -42.545 2.413) (size 0.508 0.762) (layers F.Cu F.Mask)) + (pad B18 connect rect (at -41.275 2.413) (size 0.508 0.762) (layers F.Cu F.Mask)) + (pad B19 connect rect (at -40.005 2.413) (size 0.508 0.762) (layers F.Cu F.Mask)) + (pad B20 connect rect (at -38.735 2.413) (size 0.508 0.762) (layers F.Cu F.Mask)) + (pad B21 connect rect (at -37.465 2.413) (size 0.508 0.762) (layers F.Cu F.Mask)) + (pad B22 connect rect (at -36.195 2.413) (size 0.508 0.762) (layers F.Cu F.Mask)) + (pad B23 connect rect (at -34.925 2.413) (size 0.508 0.762) (layers F.Cu F.Mask)) + (pad B24 connect rect (at -33.655 2.413) (size 0.508 0.762) (layers F.Cu F.Mask)) + (pad B25 connect rect (at -32.385 2.413) (size 0.508 0.762) (layers F.Cu F.Mask)) + (pad B26 connect rect (at -31.115 2.413) (size 0.508 0.762) (layers F.Cu F.Mask)) + (pad B27 connect rect (at -29.845 2.413) (size 0.508 0.762) (layers F.Cu F.Mask)) + (pad B28 connect rect (at -28.575 2.413) (size 0.508 0.762) (layers F.Cu F.Mask)) + (pad B29 connect rect (at -27.305 2.413) (size 0.508 0.762) (layers F.Cu F.Mask)) + (pad B30 connect rect (at -26.035 2.413) (size 0.508 0.762) (layers F.Cu F.Mask)) + (pad B31 connect rect (at -24.765 2.413) (size 0.508 0.762) (layers F.Cu F.Mask)) + (pad B32 connect rect (at -23.495 2.413) (size 0.508 0.762) (layers F.Cu F.Mask)) + (pad B33 connect rect (at -22.225 2.413) (size 0.508 0.762) (layers F.Cu F.Mask)) + (pad B34 connect rect (at -20.955 2.413) (size 0.508 0.762) (layers F.Cu F.Mask)) + (pad B35 connect rect (at -19.685 2.413) (size 0.508 0.762) (layers F.Cu F.Mask)) + (pad B36 connect rect (at -18.415 2.413) (size 0.508 0.762) (layers F.Cu F.Mask)) + (pad B37 connect rect (at -17.145 2.413) (size 0.508 0.762) (layers F.Cu F.Mask)) + (pad B38 connect rect (at -15.875 2.413) (size 0.508 0.762) (layers F.Cu F.Mask)) + (pad B39 connect rect (at -14.605 2.413) (size 0.508 0.762) (layers F.Cu F.Mask)) + (pad B40 connect rect (at -13.335 2.413) (size 0.508 0.762) (layers F.Cu F.Mask)) + (pad B41 connect rect (at -12.065 2.413) (size 0.508 0.762) (layers F.Cu F.Mask)) + (pad B42 connect rect (at -10.795 2.413) (size 0.508 0.762) (layers F.Cu F.Mask)) + (pad B43 connect rect (at -9.525 2.413) (size 0.508 0.762) (layers F.Cu F.Mask)) + (pad B44 connect rect (at -8.255 2.413) (size 0.508 0.762) (layers F.Cu F.Mask)) + (pad B45 connect rect (at -6.985 2.413) (size 0.508 0.762) (layers F.Cu F.Mask)) + (pad B46 connect rect (at -5.715 2.413) (size 0.508 0.762) (layers F.Cu F.Mask)) + (pad B47 connect rect (at -4.445 2.413) (size 0.508 0.762) (layers F.Cu F.Mask)) + (pad B48 connect rect (at -3.175 2.413) (size 0.508 0.762) (layers F.Cu F.Mask)) + (pad B49 connect rect (at -1.905 2.413) (size 0.508 0.762) (layers F.Cu F.Mask)) + (pad B52 connect rect (at 1.905 2.413) (size 0.508 0.762) (layers F.Cu F.Mask)) + (pad B53 connect rect (at 3.175 2.413) (size 0.508 0.762) (layers F.Cu F.Mask)) + (pad B54 connect rect (at 4.445 2.413) (size 0.508 0.762) (layers F.Cu F.Mask)) + (pad B55 connect rect (at 5.715 2.413) (size 0.508 0.762) (layers F.Cu F.Mask)) + (pad B56 connect rect (at 6.985 2.413) (size 0.508 0.762) (layers F.Cu F.Mask)) + (pad B57 connect rect (at 8.255 2.413) (size 0.508 0.762) (layers F.Cu F.Mask)) + (pad B58 connect rect (at 9.525 2.413) (size 0.508 0.762) (layers F.Cu F.Mask)) + (pad B59 connect rect (at 10.795 2.413) (size 0.508 0.762) (layers F.Cu F.Mask)) + (pad B60 connect rect (at 12.065 2.413) (size 0.508 0.762) (layers F.Cu F.Mask)) + (pad B61 connect rect (at 13.335 2.413) (size 0.508 0.762) (layers F.Cu F.Mask)) + (pad B62 connect rect (at 14.605 2.413) (size 0.508 0.762) (layers F.Cu F.Mask)) + (pad B1 connect rect (at -62.865 2.413) (size 0.508 0.762) (layers F.Cu F.Mask)) + (pad A1 connect rect (at -62.865 2.413) (size 0.508 0.762) (layers B.Cu B.Mask)) + (pad A2 connect rect (at -61.595 2.413) (size 0.508 0.762) (layers B.Cu B.Mask)) + (pad A3 connect rect (at -60.325 2.413) (size 0.508 0.762) (layers B.Cu B.Mask)) + (pad A4 connect rect (at -59.055 2.413) (size 0.508 0.762) (layers B.Cu B.Mask)) + (pad A5 connect rect (at -57.785 2.413) (size 0.508 0.762) (layers B.Cu B.Mask)) + (pad A6 connect rect (at -56.515 2.413) (size 0.508 0.762) (layers B.Cu B.Mask)) + (pad A7 connect rect (at -55.245 2.413) (size 0.508 0.762) (layers B.Cu B.Mask)) + (pad A8 connect rect (at -53.975 2.413) (size 0.508 0.762) (layers B.Cu B.Mask)) + (pad A9 connect rect (at -52.705 2.413) (size 0.508 0.762) (layers B.Cu B.Mask)) + (pad A10 connect rect (at -51.435 2.413) (size 0.508 0.762) (layers B.Cu B.Mask)) + (pad A11 connect rect (at -50.165 2.413) (size 0.508 0.762) (layers B.Cu B.Mask)) + (pad A12 connect rect (at -48.895 2.413) (size 0.508 0.762) (layers B.Cu B.Mask)) + (pad A13 connect rect (at -47.625 2.413) (size 0.508 0.762) (layers B.Cu B.Mask)) + (pad A14 connect rect (at -46.355 2.413) (size 0.508 0.762) (layers B.Cu B.Mask)) + (pad A15 connect rect (at -45.085 2.413) (size 0.508 0.762) (layers B.Cu B.Mask)) + (pad A16 connect rect (at -43.815 2.413) (size 0.508 0.762) (layers B.Cu B.Mask)) + (pad A17 connect rect (at -42.545 2.413) (size 0.508 0.762) (layers B.Cu B.Mask)) + (pad A18 connect rect (at -41.275 2.413) (size 0.508 0.762) (layers B.Cu B.Mask)) + (pad A19 connect rect (at -40.005 2.413) (size 0.508 0.762) (layers B.Cu B.Mask)) + (pad A20 connect rect (at -38.735 2.413) (size 0.508 0.762) (layers B.Cu B.Mask)) + (pad A21 connect rect (at -37.465 2.413) (size 0.508 0.762) (layers B.Cu B.Mask)) + (pad A22 connect rect (at -36.195 2.413) (size 0.508 0.762) (layers B.Cu B.Mask)) + (pad A23 connect rect (at -34.925 2.413) (size 0.508 0.762) (layers B.Cu B.Mask)) + (pad A24 connect rect (at -33.655 2.413) (size 0.508 0.762) (layers B.Cu B.Mask)) + (pad A25 connect rect (at -32.385 2.413) (size 0.508 0.762) (layers B.Cu B.Mask)) + (pad A26 connect rect (at -31.115 2.413) (size 0.508 0.762) (layers B.Cu B.Mask)) + (pad A27 connect rect (at -29.845 2.413) (size 0.508 0.762) (layers B.Cu B.Mask)) + (pad A28 connect rect (at -28.575 2.413) (size 0.508 0.762) (layers B.Cu B.Mask)) + (pad A29 connect rect (at -27.305 2.413) (size 0.508 0.762) (layers B.Cu B.Mask)) + (pad A30 connect rect (at -26.035 2.413) (size 0.508 0.762) (layers B.Cu B.Mask)) + (pad A31 connect rect (at -24.765 2.413) (size 0.508 0.762) (layers B.Cu B.Mask)) + (pad A32 connect rect (at -23.495 2.413) (size 0.508 0.762) (layers B.Cu B.Mask)) + (pad A33 connect rect (at -22.225 2.413) (size 0.508 0.762) (layers B.Cu B.Mask)) + (pad A34 connect rect (at -20.955 2.413) (size 0.508 0.762) (layers B.Cu B.Mask)) + (pad A35 connect rect (at -19.685 2.413) (size 0.508 0.762) (layers B.Cu B.Mask)) + (pad A36 connect rect (at -18.415 2.413) (size 0.508 0.762) (layers B.Cu B.Mask)) + (pad A37 connect rect (at -17.145 2.413) (size 0.508 0.762) (layers B.Cu B.Mask)) + (pad A38 connect rect (at -15.875 2.413) (size 0.508 0.762) (layers B.Cu B.Mask)) + (pad A39 connect rect (at -14.605 2.413) (size 0.508 0.762) (layers B.Cu B.Mask)) + (pad A40 connect rect (at -13.335 2.413) (size 0.508 0.762) (layers B.Cu B.Mask)) + (pad A41 connect rect (at -12.065 2.413) (size 0.508 0.762) (layers B.Cu B.Mask)) + (pad A42 connect rect (at -10.795 2.413) (size 0.508 0.762) (layers B.Cu B.Mask)) + (pad A43 connect rect (at -9.525 2.413) (size 0.508 0.762) (layers B.Cu B.Mask)) + (pad A44 connect rect (at -8.255 2.413) (size 0.508 0.762) (layers B.Cu B.Mask)) + (pad A45 connect rect (at -6.985 2.413) (size 0.508 0.762) (layers B.Cu B.Mask)) + (pad A46 connect rect (at -5.715 2.413) (size 0.508 0.762) (layers B.Cu B.Mask)) + (pad A47 connect rect (at -4.445 2.413) (size 0.508 0.762) (layers B.Cu B.Mask)) + (pad A48 connect rect (at -3.175 2.413) (size 0.508 0.762) (layers B.Cu B.Mask)) + (pad A49 connect rect (at -1.905 2.413) (size 0.508 0.762) (layers B.Cu B.Mask)) + (pad A52 connect rect (at 1.905 2.413) (size 0.508 0.762) (layers B.Cu B.Mask)) + (pad A53 connect rect (at 3.175 2.413) (size 0.508 0.762) (layers B.Cu B.Mask)) + (pad A54 connect rect (at 4.445 2.413) (size 0.508 0.762) (layers B.Cu B.Mask)) + (pad A55 connect rect (at 5.715 2.413) (size 0.508 0.762) (layers B.Cu B.Mask)) + (pad A56 connect rect (at 6.985 2.413) (size 0.508 0.762) (layers B.Cu B.Mask)) + (pad A57 connect rect (at 8.255 2.413) (size 0.508 0.762) (layers B.Cu B.Mask)) + (pad A58 connect rect (at 9.525 2.413) (size 0.508 0.762) (layers B.Cu B.Mask)) + (pad A59 connect rect (at 10.795 2.413) (size 0.508 0.762) (layers B.Cu B.Mask)) + (pad A60 connect rect (at 12.065 2.413) (size 0.508 0.762) (layers B.Cu B.Mask)) + (pad A61 connect rect (at 13.335 2.413) (size 0.508 0.762) (layers B.Cu B.Mask)) + (pad A62 connect rect (at 14.605 2.413) (size 0.508 0.762) (layers B.Cu B.Mask)) +) diff --git a/PCB/.pretty/BUS_AT.kicad_mod b/PCB/.pretty/BUS_AT.kicad_mod new file mode 100644 index 00000000..9fe14dd5 --- /dev/null +++ b/PCB/.pretty/BUS_AT.kicad_mod @@ -0,0 +1,116 @@ +(module BUS_AT (layer F.Cu) (tedit 0) + (descr "Connecteur Bus AT ISA 16 bits") + (tags "CONN BUS ISA") + (fp_text reference REF** (at -22.86 -6.985) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value BUS_AT (at -43.815 -6.985) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 40.64 3.81) (end -40.64 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start -40.64 3.81) (end -40.64 -3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start -40.64 -3.81) (end -45.72 -3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start -45.72 -3.81) (end -45.72 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start -45.72 3.81) (end -93.98 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start -93.98 3.81) (end -93.98 -5.08) (layer F.SilkS) (width 0.15)) + (fp_line (start -93.98 -5.08) (end 40.64 -5.08) (layer F.SilkS) (width 0.15)) + (fp_line (start 40.64 -5.08) (end 40.64 3.81) (layer F.SilkS) (width 0.15)) + (pad 1 connect rect (at 38.1 0) (size 1.778 7.62) (layers B.Cu B.Mask)) + (pad 2 connect rect (at 35.56 0) (size 1.778 7.62) (layers B.Cu B.Mask)) + (pad 3 connect rect (at 33.02 0) (size 1.778 7.62) (layers B.Cu B.Mask)) + (pad 4 connect rect (at 30.48 0) (size 1.778 7.62) (layers B.Cu B.Mask)) + (pad 5 connect rect (at 27.94 0) (size 1.778 7.62) (layers B.Cu B.Mask)) + (pad 6 connect rect (at 25.4 0) (size 1.778 7.62) (layers B.Cu B.Mask)) + (pad 7 connect rect (at 22.86 0) (size 1.778 7.62) (layers B.Cu B.Mask)) + (pad 8 connect rect (at 20.32 0) (size 1.778 7.62) (layers B.Cu B.Mask)) + (pad 9 connect rect (at 17.78 0) (size 1.778 7.62) (layers B.Cu B.Mask)) + (pad 10 connect rect (at 15.24 0) (size 1.778 7.62) (layers B.Cu B.Mask)) + (pad 11 connect rect (at 12.7 0) (size 1.778 7.62) (layers B.Cu B.Mask)) + (pad 12 connect rect (at 10.16 0) (size 1.778 7.62) (layers B.Cu B.Mask)) + (pad 13 connect rect (at 7.62 0) (size 1.778 7.62) (layers B.Cu B.Mask)) + (pad 14 connect rect (at 5.08 0) (size 1.778 7.62) (layers B.Cu B.Mask)) + (pad 15 connect rect (at 2.54 0) (size 1.778 7.62) (layers B.Cu B.Mask)) + (pad 16 connect rect (at 0 0) (size 1.778 7.62) (layers B.Cu B.Mask)) + (pad 17 connect rect (at -2.54 0) (size 1.778 7.62) (layers B.Cu B.Mask)) + (pad 18 connect rect (at -5.08 0) (size 1.778 7.62) (layers B.Cu B.Mask)) + (pad 19 connect rect (at -7.62 0) (size 1.778 7.62) (layers B.Cu B.Mask)) + (pad 20 connect rect (at -10.16 0) (size 1.778 7.62) (layers B.Cu B.Mask)) + (pad 21 connect rect (at -12.7 0) (size 1.778 7.62) (layers B.Cu B.Mask)) + (pad 22 connect rect (at -15.24 0) (size 1.778 7.62) (layers B.Cu B.Mask)) + (pad 23 connect rect (at -17.78 0) (size 1.778 7.62) (layers B.Cu B.Mask)) + (pad 24 connect rect (at -20.32 0) (size 1.778 7.62) (layers B.Cu B.Mask)) + (pad 25 connect rect (at -22.86 0) (size 1.778 7.62) (layers B.Cu B.Mask)) + (pad 26 connect rect (at -25.4 0) (size 1.778 7.62) (layers B.Cu B.Mask)) + (pad 27 connect rect (at -27.94 0) (size 1.778 7.62) (layers B.Cu B.Mask)) + (pad 28 connect rect (at -30.48 0) (size 1.778 7.62) (layers B.Cu B.Mask)) + (pad 29 connect rect (at -33.02 0) (size 1.778 7.62) (layers B.Cu B.Mask)) + (pad 30 connect rect (at -35.56 0) (size 1.778 7.62) (layers B.Cu B.Mask)) + (pad 31 connect rect (at -38.1 0) (size 1.778 7.62) (layers B.Cu B.Mask)) + (pad 32 connect rect (at 38.1 0) (size 1.778 7.62) (layers F.Cu F.Mask)) + (pad 33 connect rect (at 35.56 0) (size 1.778 7.62) (layers F.Cu F.Mask)) + (pad 34 connect rect (at 33.02 0) (size 1.778 7.62) (layers F.Cu F.Mask)) + (pad 35 connect rect (at 30.48 0) (size 1.778 7.62) (layers F.Cu F.Mask)) + (pad 36 connect rect (at 27.94 0) (size 1.778 7.62) (layers F.Cu F.Mask)) + (pad 37 connect rect (at 25.4 0) (size 1.778 7.62) (layers F.Cu F.Mask)) + (pad 38 connect rect (at 22.86 0) (size 1.778 7.62) (layers F.Cu F.Mask)) + (pad 39 connect rect (at 20.32 0) (size 1.778 7.62) (layers F.Cu F.Mask)) + (pad 40 connect rect (at 17.78 0) (size 1.778 7.62) (layers F.Cu F.Mask)) + (pad 41 connect rect (at 15.24 0) (size 1.778 7.62) (layers F.Cu F.Mask)) + (pad 42 connect rect (at 12.7 0) (size 1.778 7.62) (layers F.Cu F.Mask)) + (pad 43 connect rect (at 10.16 0) (size 1.778 7.62) (layers F.Cu F.Mask)) + (pad 44 connect rect (at 7.62 0) (size 1.778 7.62) (layers F.Cu F.Mask)) + (pad 45 connect rect (at 5.08 0) (size 1.778 7.62) (layers F.Cu F.Mask)) + (pad 46 connect rect (at 2.54 0) (size 1.778 7.62) (layers F.Cu F.Mask)) + (pad 47 connect rect (at 0 0) (size 1.778 7.62) (layers F.Cu F.Mask)) + (pad 48 connect rect (at -2.54 0) (size 1.778 7.62) (layers F.Cu F.Mask)) + (pad 49 connect rect (at -5.08 0) (size 1.778 7.62) (layers F.Cu F.Mask)) + (pad 50 connect rect (at -7.62 0) (size 1.778 7.62) (layers F.Cu F.Mask)) + (pad 51 connect rect (at -10.16 0) (size 1.778 7.62) (layers F.Cu F.Mask)) + (pad 52 connect rect (at -12.7 0) (size 1.778 7.62) (layers F.Cu F.Mask)) + (pad 53 connect rect (at -15.24 0) (size 1.778 7.62) (layers F.Cu F.Mask)) + (pad 54 connect rect (at -17.78 0) (size 1.778 7.62) (layers F.Cu F.Mask)) + (pad 55 connect rect (at -20.32 0) (size 1.778 7.62) (layers F.Cu F.Mask)) + (pad 56 connect rect (at -22.86 0) (size 1.778 7.62) (layers F.Cu F.Mask)) + (pad 57 connect rect (at -25.4 0) (size 1.778 7.62) (layers F.Cu F.Mask)) + (pad 58 connect rect (at -27.94 0) (size 1.778 7.62) (layers F.Cu F.Mask)) + (pad 59 connect rect (at -30.48 0) (size 1.778 7.62) (layers F.Cu F.Mask)) + (pad 60 connect rect (at -33.02 0) (size 1.778 7.62) (layers F.Cu F.Mask)) + (pad 61 connect rect (at -35.56 0) (size 1.778 7.62) (layers F.Cu F.Mask)) + (pad 62 connect rect (at -38.1 0) (size 1.778 7.62) (layers F.Cu F.Mask)) + (pad 63 connect rect (at -48.26 0) (size 1.778 7.62) (layers B.Cu B.Mask)) + (pad 64 connect rect (at -50.8 0) (size 1.778 7.62) (layers B.Cu B.Mask)) + (pad 65 connect rect (at -53.34 0) (size 1.778 7.62) (layers B.Cu B.Mask)) + (pad 66 connect rect (at -55.88 0) (size 1.778 7.62) (layers B.Cu B.Mask)) + (pad 67 connect rect (at -58.42 0) (size 1.778 7.62) (layers B.Cu B.Mask)) + (pad 68 connect rect (at -60.96 0) (size 1.778 7.62) (layers B.Cu B.Mask)) + (pad 69 connect rect (at -63.5 0) (size 1.778 7.62) (layers B.Cu B.Mask)) + (pad 70 connect rect (at -66.04 0) (size 1.778 7.62) (layers B.Cu B.Mask)) + (pad 71 connect rect (at -68.58 0) (size 1.778 7.62) (layers B.Cu B.Mask)) + (pad 72 connect rect (at -71.12 0) (size 1.778 7.62) (layers B.Cu B.Mask)) + (pad 73 connect rect (at -73.66 0) (size 1.778 7.62) (layers B.Cu B.Mask)) + (pad 74 connect rect (at -76.2 0) (size 1.778 7.62) (layers B.Cu B.Mask)) + (pad 75 connect rect (at -78.74 0) (size 1.778 7.62) (layers B.Cu B.Mask)) + (pad 76 connect rect (at -81.28 0) (size 1.778 7.62) (layers B.Cu B.Mask)) + (pad 77 connect rect (at -83.82 0) (size 1.778 7.62) (layers B.Cu B.Mask)) + (pad 78 connect rect (at -86.36 0) (size 1.778 7.62) (layers B.Cu B.Mask)) + (pad 79 connect rect (at -88.9 0) (size 1.778 7.62) (layers B.Cu B.Mask)) + (pad 80 connect rect (at -91.44 0) (size 1.778 7.62) (layers B.Cu B.Mask)) + (pad 81 connect rect (at -48.26 0) (size 1.778 7.62) (layers F.Cu F.Mask)) + (pad 82 connect rect (at -50.8 0) (size 1.778 7.62) (layers F.Cu F.Mask)) + (pad 83 connect rect (at -53.34 0) (size 1.778 7.62) (layers F.Cu F.Mask)) + (pad 84 connect rect (at -55.88 0) (size 1.778 7.62) (layers F.Cu F.Mask)) + (pad 85 connect rect (at -58.42 0) (size 1.778 7.62) (layers F.Cu F.Mask)) + (pad 86 connect rect (at -60.96 0) (size 1.778 7.62) (layers F.Cu F.Mask)) + (pad 87 connect rect (at -63.5 0) (size 1.778 7.62) (layers F.Cu F.Mask)) + (pad 88 connect rect (at -66.04 0) (size 1.778 7.62) (layers F.Cu F.Mask)) + (pad 89 connect rect (at -68.58 0) (size 1.778 7.62) (layers F.Cu F.Mask)) + (pad 90 connect rect (at -71.12 0) (size 1.778 7.62) (layers F.Cu F.Mask)) + (pad 91 connect rect (at -73.66 0) (size 1.778 7.62) (layers F.Cu F.Mask)) + (pad 92 connect rect (at -76.2 0) (size 1.778 7.62) (layers F.Cu F.Mask)) + (pad 93 connect rect (at -78.74 0) (size 1.778 7.62) (layers F.Cu F.Mask)) + (pad 94 connect rect (at -81.28 0) (size 1.778 7.62) (layers F.Cu F.Mask)) + (pad 95 connect rect (at -83.82 0) (size 1.778 7.62) (layers F.Cu F.Mask)) + (pad 96 connect rect (at -86.36 0) (size 1.778 7.62) (layers F.Cu F.Mask)) + (pad 97 connect rect (at -88.9 0) (size 1.778 7.62) (layers F.Cu F.Mask)) + (pad 98 connect rect (at -91.44 0) (size 1.778 7.62) (layers F.Cu F.Mask)) +) diff --git a/PCB/.pretty/Banana_Jack_1Pin.kicad_mod b/PCB/.pretty/Banana_Jack_1Pin.kicad_mod new file mode 100644 index 00000000..49cea79f --- /dev/null +++ b/PCB/.pretty/Banana_Jack_1Pin.kicad_mod @@ -0,0 +1,17 @@ +(module Banana_Jack_1Pin (layer F.Cu) (tedit 0) + (descr "Single banana socket, footprint - 6mm drill") + (tags "banana socket") + (fp_text reference REF** (at 0.508 -6.858) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value Banana_Jack_1Pin (at 0.762 -8.382) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 0 -6.096) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at 0 0) (size 10.16 10.16) (drill 6.096) (layers *.Cu *.Mask F.SilkS)) + (model Connect.3dshapes/Banana_Jack_1Pin.wrl + (at (xyz 0 0 0)) + (scale (xyz 2 2 2)) + (rotate (xyz 0 0 0)) + ) +) diff --git a/PCB/.pretty/Banana_Jack_2Pin.kicad_mod b/PCB/.pretty/Banana_Jack_2Pin.kicad_mod new file mode 100644 index 00000000..1c13a9c9 --- /dev/null +++ b/PCB/.pretty/Banana_Jack_2Pin.kicad_mod @@ -0,0 +1,21 @@ +(module Banana_Jack_2Pin (layer F.Cu) (tedit 0) + (descr "Dual banana socket, footprint - 2 x 6mm drills") + (tags "banana socket") + (fp_text reference REF** (at 0 1.27) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value Banana_Jack_2Pin (at 0 -1.27) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -21.59 -6.35) (end 21.59 -6.35) (layer F.SilkS) (width 0.15)) + (fp_line (start 21.59 -6.35) (end 21.59 6.35) (layer F.SilkS) (width 0.15)) + (fp_line (start 21.59 6.35) (end -21.59 6.35) (layer F.SilkS) (width 0.15)) + (fp_line (start -21.59 6.35) (end -21.59 -6.35) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -14.986 0) (size 10.16 10.16) (drill 6.096) (layers *.Cu *.Mask F.SilkS)) + (pad 2 thru_hole circle (at 14.986 0) (size 10.16 10.16) (drill 6.096) (layers *.Cu *.Mask F.SilkS)) + (model Connect.3dshapes/Banana_Jack_2Pin.wrl + (at (xyz 0 0 0)) + (scale (xyz 2 2 2)) + (rotate (xyz 0 0 0)) + ) +) diff --git a/PCB/.pretty/Banana_Jack_3Pin.kicad_mod b/PCB/.pretty/Banana_Jack_3Pin.kicad_mod new file mode 100644 index 00000000..b747422e --- /dev/null +++ b/PCB/.pretty/Banana_Jack_3Pin.kicad_mod @@ -0,0 +1,22 @@ +(module Banana_Jack_3Pin (layer F.Cu) (tedit 0) + (descr "Triple banana socket, footprint - 3 x 6mm drills") + (tags "banana socket") + (fp_text reference REF** (at 10.16 -7.62) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value Banana_Jack_3Pin (at -7.62 -7.62) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -21.59 -6.35) (end 21.59 -6.35) (layer F.SilkS) (width 0.15)) + (fp_line (start 21.59 -6.35) (end 21.59 6.35) (layer F.SilkS) (width 0.15)) + (fp_line (start 21.59 6.35) (end -21.59 6.35) (layer F.SilkS) (width 0.15)) + (fp_line (start -21.59 6.35) (end -21.59 -6.35) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -14.986 0) (size 10.16 10.16) (drill 6.096) (layers *.Cu *.Mask F.SilkS)) + (pad 3 thru_hole circle (at 14.986 0) (size 10.16 10.16) (drill 6.096) (layers *.Cu *.Mask F.SilkS)) + (pad 2 thru_hole circle (at 0 0) (size 10.16 10.16) (drill 6.096) (layers *.Cu *.Mask F.SilkS)) + (model Connect.3dshapes/Banana_Jack_3Pin.wrl + (at (xyz 0 0 0)) + (scale (xyz 2 2 2)) + (rotate (xyz 0 0 0)) + ) +) diff --git a/PCB/.pretty/C96ABCFD.kicad_mod b/PCB/.pretty/C96ABCFD.kicad_mod new file mode 100644 index 00000000..44132d65 --- /dev/null +++ b/PCB/.pretty/C96ABCFD.kicad_mod @@ -0,0 +1,123 @@ +(module C96ABCFD (layer F.Cu) (tedit 0) + (descr "Connecteur DIN Europe 96 contacts ABC male droit") + (tags "CONN DIN") + (fp_text reference REF** (at -26.035 -7.62) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value C96ABCFD (at 20.955 -7.62) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -46.99 5.08) (end 46.99 5.08) (layer F.SilkS) (width 0.15)) + (fp_line (start 46.99 5.08) (end 46.99 -2.54) (layer F.SilkS) (width 0.15)) + (fp_line (start -46.99 -2.54) (end -46.99 5.08) (layer F.SilkS) (width 0.15)) + (fp_line (start -41.91 -2.54) (end -41.91 5.08) (layer F.SilkS) (width 0.15)) + (fp_line (start 41.91 -2.54) (end 41.91 5.08) (layer F.SilkS) (width 0.15)) + (fp_line (start -46.99 -2.54) (end -46.99 -5.08) (layer F.SilkS) (width 0.15)) + (fp_line (start -46.99 -5.08) (end 46.99 -5.08) (layer F.SilkS) (width 0.15)) + (fp_line (start 46.99 -5.08) (end 46.99 -2.54) (layer F.SilkS) (width 0.15)) + (fp_line (start 41.91 -5.08) (end 41.91 -2.54) (layer F.SilkS) (width 0.15)) + (fp_line (start -41.91 -2.54) (end -41.91 -5.08) (layer F.SilkS) (width 0.15)) + (pad 65 thru_hole circle (at -44.45 0) (size 3.81 3.81) (drill 3.048) (layers *.Cu *.Mask F.SilkS)) + (pad 66 thru_hole circle (at 44.45 0) (size 3.81 3.81) (drill 3.048) (layers *.Cu *.Mask F.SilkS)) + (pad A3 thru_hole circle (at -34.29 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A4 thru_hole circle (at -31.75 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A5 thru_hole circle (at -29.21 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A6 thru_hole circle (at -26.67 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A7 thru_hole circle (at -24.13 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A8 thru_hole circle (at -21.59 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A9 thru_hole circle (at -19.05 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A10 thru_hole circle (at -16.51 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A11 thru_hole circle (at -13.97 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A12 thru_hole circle (at -11.43 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A13 thru_hole circle (at -8.89 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A14 thru_hole circle (at -6.35 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A15 thru_hole circle (at -3.81 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A16 thru_hole circle (at -1.27 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A17 thru_hole circle (at 1.27 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A18 thru_hole circle (at 3.81 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A19 thru_hole circle (at 6.35 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A20 thru_hole circle (at 8.89 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A21 thru_hole circle (at 11.43 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A22 thru_hole circle (at 13.97 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A23 thru_hole circle (at 16.51 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A24 thru_hole circle (at 19.05 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A25 thru_hole circle (at 21.59 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A26 thru_hole circle (at 24.13 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A27 thru_hole circle (at 26.67 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A28 thru_hole circle (at 29.21 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A29 thru_hole circle (at 31.75 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A30 thru_hole circle (at 34.29 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A31 thru_hole circle (at 36.83 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A32 thru_hole circle (at 39.37 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A2 thru_hole circle (at -36.83 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A1 thru_hole rect (at -39.37 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B1 thru_hole circle (at -39.37 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B2 thru_hole circle (at -36.83 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B3 thru_hole circle (at -34.29 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B4 thru_hole circle (at -31.75 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B5 thru_hole circle (at -29.21 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B6 thru_hole circle (at -26.67 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B7 thru_hole circle (at -24.13 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B8 thru_hole circle (at -21.59 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B9 thru_hole circle (at -19.05 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B10 thru_hole circle (at -16.51 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B11 thru_hole circle (at -13.97 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B12 thru_hole circle (at -11.43 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B13 thru_hole circle (at -8.89 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B14 thru_hole circle (at -6.35 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B15 thru_hole circle (at -3.81 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B16 thru_hole circle (at -1.27 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B17 thru_hole circle (at 1.27 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B18 thru_hole circle (at 3.81 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B19 thru_hole circle (at 6.35 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B20 thru_hole circle (at 8.89 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B21 thru_hole circle (at 11.43 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B22 thru_hole circle (at 13.97 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B23 thru_hole circle (at 16.51 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B24 thru_hole circle (at 19.05 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B25 thru_hole circle (at 21.59 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B26 thru_hole circle (at 24.13 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B27 thru_hole circle (at 26.67 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B28 thru_hole circle (at 29.21 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B29 thru_hole circle (at 31.75 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B30 thru_hole circle (at 34.29 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B31 thru_hole circle (at 36.83 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B32 thru_hole circle (at 39.37 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C1 thru_hole circle (at -39.37 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C2 thru_hole circle (at -36.83 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C3 thru_hole circle (at -34.29 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C4 thru_hole circle (at -31.75 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C5 thru_hole circle (at -29.21 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C6 thru_hole circle (at -26.67 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C7 thru_hole circle (at -24.13 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C8 thru_hole circle (at -21.59 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C9 thru_hole circle (at -19.05 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C10 thru_hole circle (at -16.51 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C11 thru_hole circle (at -13.97 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C12 thru_hole circle (at -11.43 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C13 thru_hole circle (at -8.89 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C14 thru_hole circle (at -6.35 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C15 thru_hole circle (at -3.81 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C16 thru_hole circle (at -1.27 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C17 thru_hole circle (at 1.27 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C18 thru_hole circle (at 3.81 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C19 thru_hole circle (at 6.35 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C20 thru_hole circle (at 8.89 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C21 thru_hole circle (at 11.43 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C22 thru_hole circle (at 13.97 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C23 thru_hole circle (at 16.51 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C24 thru_hole circle (at 19.05 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C25 thru_hole circle (at 21.59 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C26 thru_hole circle (at 24.13 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C27 thru_hole circle (at 26.67 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C28 thru_hole circle (at 29.21 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C29 thru_hole circle (at 31.75 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C30 thru_hole circle (at 34.29 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C31 thru_hole circle (at 36.83 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C32 thru_hole circle (at 39.37 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (model Connect.3dshapes/C96ABCFD.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) +) diff --git a/PCB/.pretty/C96ABCMD.kicad_mod b/PCB/.pretty/C96ABCMD.kicad_mod new file mode 100644 index 00000000..babd9ce7 --- /dev/null +++ b/PCB/.pretty/C96ABCMD.kicad_mod @@ -0,0 +1,123 @@ +(module C96ABCMD (layer F.Cu) (tedit 0) + (descr "Connecteur DIN Europe 96 contacts ABC male droit") + (tags "CONN DIN") + (fp_text reference REF** (at -26.035 -7.62) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value C96ABCMD (at 20.955 -7.62) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -46.99 -5.08) (end 46.99 -5.08) (layer F.SilkS) (width 0.15)) + (fp_line (start 46.99 -5.08) (end 46.99 2.54) (layer F.SilkS) (width 0.15)) + (fp_line (start -46.99 2.54) (end -46.99 -5.08) (layer F.SilkS) (width 0.15)) + (fp_line (start -41.91 2.54) (end -41.91 -5.08) (layer F.SilkS) (width 0.15)) + (fp_line (start 41.91 2.54) (end 41.91 -5.08) (layer F.SilkS) (width 0.15)) + (fp_line (start -46.99 2.54) (end -46.99 5.08) (layer F.SilkS) (width 0.15)) + (fp_line (start -46.99 5.08) (end 46.99 5.08) (layer F.SilkS) (width 0.15)) + (fp_line (start 46.99 5.08) (end 46.99 2.54) (layer F.SilkS) (width 0.15)) + (fp_line (start 41.91 5.08) (end 41.91 2.54) (layer F.SilkS) (width 0.15)) + (fp_line (start -41.91 2.54) (end -41.91 5.08) (layer F.SilkS) (width 0.15)) + (pad 65 thru_hole circle (at -44.45 0) (size 3.81 3.81) (drill 3.048) (layers *.Cu *.Mask F.SilkS)) + (pad 66 thru_hole circle (at 44.45 0) (size 3.81 3.81) (drill 3.048) (layers *.Cu *.Mask F.SilkS)) + (pad A3 thru_hole circle (at -34.29 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A4 thru_hole circle (at -31.75 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A5 thru_hole circle (at -29.21 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A6 thru_hole circle (at -26.67 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A7 thru_hole circle (at -24.13 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A8 thru_hole circle (at -21.59 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A9 thru_hole circle (at -19.05 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A10 thru_hole circle (at -16.51 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A11 thru_hole circle (at -13.97 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A12 thru_hole circle (at -11.43 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A13 thru_hole circle (at -8.89 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A14 thru_hole circle (at -6.35 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A15 thru_hole circle (at -3.81 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A16 thru_hole circle (at -1.27 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A17 thru_hole circle (at 1.27 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A18 thru_hole circle (at 3.81 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A19 thru_hole circle (at 6.35 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A20 thru_hole circle (at 8.89 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A21 thru_hole circle (at 11.43 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A22 thru_hole circle (at 13.97 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A23 thru_hole circle (at 16.51 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A24 thru_hole circle (at 19.05 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A25 thru_hole circle (at 21.59 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A26 thru_hole circle (at 24.13 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A27 thru_hole circle (at 26.67 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A28 thru_hole circle (at 29.21 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A29 thru_hole circle (at 31.75 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A30 thru_hole circle (at 34.29 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A31 thru_hole circle (at 36.83 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A32 thru_hole circle (at 39.37 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A2 thru_hole circle (at -36.83 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A1 thru_hole rect (at -39.37 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B1 thru_hole circle (at -39.37 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B2 thru_hole circle (at -36.83 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B3 thru_hole circle (at -34.29 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B4 thru_hole circle (at -31.75 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B5 thru_hole circle (at -29.21 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B6 thru_hole circle (at -26.67 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B7 thru_hole circle (at -24.13 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B8 thru_hole circle (at -21.59 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B9 thru_hole circle (at -19.05 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B10 thru_hole circle (at -16.51 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B11 thru_hole circle (at -13.97 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B12 thru_hole circle (at -11.43 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B13 thru_hole circle (at -8.89 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B14 thru_hole circle (at -6.35 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B15 thru_hole circle (at -3.81 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B16 thru_hole circle (at -1.27 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B17 thru_hole circle (at 1.27 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B18 thru_hole circle (at 3.81 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B19 thru_hole circle (at 6.35 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B20 thru_hole circle (at 8.89 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B21 thru_hole circle (at 11.43 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B22 thru_hole circle (at 13.97 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B23 thru_hole circle (at 16.51 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B24 thru_hole circle (at 19.05 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B25 thru_hole circle (at 21.59 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B26 thru_hole circle (at 24.13 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B27 thru_hole circle (at 26.67 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B28 thru_hole circle (at 29.21 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B29 thru_hole circle (at 31.75 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B30 thru_hole circle (at 34.29 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B31 thru_hole circle (at 36.83 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B32 thru_hole circle (at 39.37 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C1 thru_hole circle (at -39.37 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C2 thru_hole circle (at -36.83 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C3 thru_hole circle (at -34.29 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C4 thru_hole circle (at -31.75 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C5 thru_hole circle (at -29.21 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C6 thru_hole circle (at -26.67 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C7 thru_hole circle (at -24.13 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C8 thru_hole circle (at -21.59 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C9 thru_hole circle (at -19.05 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C10 thru_hole circle (at -16.51 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C11 thru_hole circle (at -13.97 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C12 thru_hole circle (at -11.43 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C13 thru_hole circle (at -8.89 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C14 thru_hole circle (at -6.35 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C15 thru_hole circle (at -3.81 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C16 thru_hole circle (at -1.27 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C17 thru_hole circle (at 1.27 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C18 thru_hole circle (at 3.81 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C19 thru_hole circle (at 6.35 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C20 thru_hole circle (at 8.89 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C21 thru_hole circle (at 11.43 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C22 thru_hole circle (at 13.97 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C23 thru_hole circle (at 16.51 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C24 thru_hole circle (at 19.05 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C25 thru_hole circle (at 21.59 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C26 thru_hole circle (at 24.13 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C27 thru_hole circle (at 26.67 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C28 thru_hole circle (at 29.21 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C29 thru_hole circle (at 31.75 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C30 thru_hole circle (at 34.29 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C31 thru_hole circle (at 36.83 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C32 thru_hole circle (at 39.37 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (model Connect.3dshapes/C96ABCMD.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) +) diff --git a/PCB/.pretty/CNT3BRCMS.kicad_mod b/PCB/.pretty/CNT3BRCMS.kicad_mod new file mode 100644 index 00000000..be921d4b --- /dev/null +++ b/PCB/.pretty/CNT3BRCMS.kicad_mod @@ -0,0 +1,26 @@ +(module CNT3BRCMS (layer F.Cu) (tedit 0) + (attr smd) + (fp_text reference REF** (at 2.54 0 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value CNT3BRCMS (at 2.54 0 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 4.7625 -2.667) (end 3.81 -2.667) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.81 -2.667) (end 3.81 2.667) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.81 2.667) (end 4.7625 2.667) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.635 0) (end 0.635 -2.794) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.635 -2.794) (end 1.397 -2.794) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.397 -2.794) (end 1.397 -4.826) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.397 -4.826) (end 4.7625 -4.826) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.7625 -4.826) (end 4.7625 4.826) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.7625 4.826) (end 1.397 4.826) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.397 4.826) (end 1.397 2.794) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.397 2.794) (end 0.635 2.794) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.635 2.794) (end 0.635 0) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at 0 -1.27) (size 1.778 0.8128) (layers F.Cu F.Paste F.Mask)) + (pad 2 smd rect (at 0 0) (size 1.778 0.8128) (layers F.Cu F.Paste F.Mask)) + (pad 3 smd rect (at 0 1.27) (size 1.778 0.8128) (layers F.Cu F.Paste F.Mask)) + (pad "" smd rect (at 2.9845 -3.81) (size 3.048 2.032) (layers F.Cu F.Paste F.Mask)) + (pad "" smd rect (at 2.9845 3.81) (size 3.048 2.032) (layers F.Cu F.Paste F.Mask)) +) diff --git a/PCB/.pretty/CR1220.kicad_mod b/PCB/.pretty/CR1220.kicad_mod new file mode 100644 index 00000000..6b049dea --- /dev/null +++ b/PCB/.pretty/CR1220.kicad_mod @@ -0,0 +1,22 @@ +(module CR1220 (layer F.Cu) (tedit 0) + (fp_text reference REF** (at 6.858 0 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value CR1220 (at 2.286 0 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -6.35 2.54) (end -2.667 2.54) (layer F.SilkS) (width 0.15)) + (fp_line (start -6.35 -2.54) (end -2.667 -2.54) (layer F.SilkS) (width 0.15)) + (fp_line (start -6.35 2.54) (end -7.62 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start -7.62 1.27) (end -7.62 -1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start -7.62 -1.27) (end -6.35 -2.54) (layer F.SilkS) (width 0.15)) + (fp_line (start 8.001 -4.318) (end 9.525 -5.588) (layer F.SilkS) (width 0.15)) + (fp_line (start 8.001 4.318) (end 9.525 5.588) (layer F.SilkS) (width 0.15)) + (fp_circle (center 4.445 0) (end -1.143 0) (layer F.SilkS) (width 0.15)) + (fp_circle (center 4.445 0) (end -2.667 2.54) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -5.08 0) (size 3.556 3.556) (drill 2.54) (layers *.Cu *.Mask F.SilkS)) + (pad 2 thru_hole circle (at 4.445 0) (size 2.54 2.54) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad "" thru_hole circle (at 4.445 5.08) (size 2.159 2.159) (drill 2.032) (layers *.Cu *.Mask F.SilkS)) + (pad "" thru_hole circle (at 8.89 -2.54) (size 2.159 2.159) (drill 2.032) (layers *.Cu *.Mask F.SilkS)) + (pad "" thru_hole circle (at 0 -2.54) (size 2.159 2.159) (drill 2.032) (layers *.Cu *.Mask F.SilkS)) +) diff --git a/PCB/.pretty/CR2032H.kicad_mod b/PCB/.pretty/CR2032H.kicad_mod new file mode 100644 index 00000000..a768c87e --- /dev/null +++ b/PCB/.pretty/CR2032H.kicad_mod @@ -0,0 +1,23 @@ +(module CR2032H (layer F.Cu) (tedit 0) + (fp_text reference REF** (at 0 -12.7) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value CR2032H (at 0 12.7) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 15.24 3.81) (end 15.24 5.08) (layer F.SilkS) (width 0.15)) + (fp_line (start 14.605 4.445) (end 15.875 4.445) (layer F.SilkS) (width 0.15)) + (fp_line (start 10.795 -2.54) (end 17.145 -2.54) (layer F.SilkS) (width 0.15)) + (fp_line (start 17.145 -2.54) (end 17.145 2.54) (layer F.SilkS) (width 0.15)) + (fp_line (start 17.145 2.54) (end 10.795 2.54) (layer F.SilkS) (width 0.15)) + (fp_line (start 17.145 -3.175) (end 17.78 -3.175) (layer F.SilkS) (width 0.15)) + (fp_line (start 17.78 -3.175) (end 17.78 3.175) (layer F.SilkS) (width 0.15)) + (fp_line (start 17.78 3.175) (end 17.145 3.175) (layer F.SilkS) (width 0.15)) + (fp_line (start 15.875 -3.175) (end 17.145 -3.175) (layer F.SilkS) (width 0.15)) + (fp_line (start 17.145 3.175) (end 10.795 3.175) (layer F.SilkS) (width 0.15)) + (fp_line (start 10.795 -3.175) (end 15.875 -3.175) (layer F.SilkS) (width 0.15)) + (fp_circle (center 0 0) (end -1.27 -8.89) (layer F.SilkS) (width 0.15)) + (fp_circle (center 0 0) (end 6.35 8.89) (layer F.SilkS) (width 0.15)) + (pad 2 thru_hole circle (at -7.62 0) (size 2.286 2.286) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 1 thru_hole circle (at 15.24 0) (size 2.286 2.286) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) +) diff --git a/PCB/.pretty/CR2032V.kicad_mod b/PCB/.pretty/CR2032V.kicad_mod new file mode 100644 index 00000000..3c49cecf --- /dev/null +++ b/PCB/.pretty/CR2032V.kicad_mod @@ -0,0 +1,19 @@ +(module CR2032V (layer F.Cu) (tedit 0) + (fp_text reference REF** (at -7.62 -5.08) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value CR2032V (at 0 5.08) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -12.065 -3.302) (end 12.065 -3.302) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.778 -1.778) (end 2.794 -1.778) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.874 2.286) (end 7.874 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.366 1.778) (end 8.382 1.778) (layer F.SilkS) (width 0.15)) + (fp_line (start 12.065 3.175) (end 12.065 -3.175) (layer F.SilkS) (width 0.15)) + (fp_line (start 12.065 -2.667) (end -12.065 -2.667) (layer F.SilkS) (width 0.15)) + (fp_line (start -12.065 -3.175) (end -12.065 3.175) (layer F.SilkS) (width 0.15)) + (fp_line (start -12.065 3.175) (end 12.065 3.175) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -5.08 1.778) (size 2.286 2.286) (drill 1.27) (layers *.Cu *.Mask F.SilkS)) + (pad 1 thru_hole circle (at 5.08 1.778) (size 2.286 2.286) (drill 1.27) (layers *.Cu *.Mask F.SilkS)) + (pad 2 thru_hole circle (at 0 -1.524) (size 2.286 2.286) (drill 1.27) (layers *.Cu *.Mask F.SilkS)) +) diff --git a/PCB/.pretty/DB15FC.kicad_mod b/PCB/.pretty/DB15FC.kicad_mod new file mode 100644 index 00000000..4344932f --- /dev/null +++ b/PCB/.pretty/DB15FC.kicad_mod @@ -0,0 +1,51 @@ +(module DB15FC (layer F.Cu) (tedit 0) + (descr "Connecteur DB15 femelle couche") + (tags "CONN DB15") + (fp_text reference REF** (at 0 -15.24) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value DB15FC (at 0 -6.35) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 19.812 -11.43) (end -19.812 -11.43) (layer F.SilkS) (width 0.15)) + (fp_line (start 19.812 -12.7) (end -19.812 -12.7) (layer F.SilkS) (width 0.15)) + (fp_line (start 13.462 -8.255) (end -13.462 -8.255) (layer F.SilkS) (width 0.15)) + (fp_line (start -13.462 -18.415) (end 13.462 -18.415) (layer F.SilkS) (width 0.15)) + (fp_line (start 13.462 -12.7) (end 13.462 -18.415) (layer F.SilkS) (width 0.15)) + (fp_line (start 13.462 -8.255) (end 13.462 -11.43) (layer F.SilkS) (width 0.15)) + (fp_line (start 14.097 -6.35) (end 14.097 -11.43) (layer F.SilkS) (width 0.15)) + (fp_line (start 12.446 -6.35) (end 19.812 -6.35) (layer F.SilkS) (width 0.15)) + (fp_line (start 12.446 2.54) (end 12.446 -6.35) (layer F.SilkS) (width 0.15)) + (fp_line (start 19.812 2.54) (end 12.446 2.54) (layer F.SilkS) (width 0.15)) + (fp_line (start 19.812 2.54) (end 19.812 -12.7) (layer F.SilkS) (width 0.15)) + (fp_line (start -14.097 -11.43) (end -14.097 -6.35) (layer F.SilkS) (width 0.15)) + (fp_line (start -12.192 -6.35) (end -12.192 2.54) (layer F.SilkS) (width 0.15)) + (fp_line (start -19.812 2.54) (end -19.812 -11.43) (layer F.SilkS) (width 0.15)) + (fp_line (start -19.812 -6.35) (end -12.192 -6.35) (layer F.SilkS) (width 0.15)) + (fp_line (start -13.462 -8.255) (end -13.462 -11.43) (layer F.SilkS) (width 0.15)) + (fp_line (start -13.462 -18.415) (end -13.462 -12.7) (layer F.SilkS) (width 0.15)) + (fp_line (start -19.812 -12.7) (end -19.812 -11.43) (layer F.SilkS) (width 0.15)) + (fp_line (start -19.812 2.54) (end -12.192 2.54) (layer F.SilkS) (width 0.15)) + (pad "" thru_hole circle (at 16.764 -1.016) (size 3.81 3.81) (drill 3.048) (layers *.Cu *.Mask F.SilkS)) + (pad "" thru_hole circle (at -16.764 -1.27) (size 3.81 3.81) (drill 3.048) (layers *.Cu *.Mask F.SilkS)) + (pad 1 thru_hole rect (at -9.652 1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 2 thru_hole circle (at -6.858 1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 3 thru_hole circle (at -4.191 1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 4 thru_hole circle (at -1.397 1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 5 thru_hole circle (at 1.397 1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 6 thru_hole circle (at 4.191 1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 7 thru_hole circle (at 6.858 1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 8 thru_hole circle (at 9.652 1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 9 thru_hole circle (at -8.0772 -1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 10 thru_hole circle (at -5.5372 -1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 11 thru_hole circle (at -2.7432 -1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 12 thru_hole circle (at 0 -1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 13 thru_hole circle (at 2.7432 -1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 14 thru_hole circle (at 5.5372 -1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 15 thru_hole circle (at 8.2804 -1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (model Connect.3dshapes/DB15FC.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) +) diff --git a/PCB/.pretty/DB15FD.kicad_mod b/PCB/.pretty/DB15FD.kicad_mod new file mode 100644 index 00000000..095ef70c --- /dev/null +++ b/PCB/.pretty/DB15FD.kicad_mod @@ -0,0 +1,36 @@ +(module DB15FD (layer F.Cu) (tedit 0) + (descr "Connecteur DB15 femelle droit") + (tags "CONN DB15") + (fp_text reference REF** (at -10.16 -5.08 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value DB15FD (at 10.16 -5.08 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -18.415 -3.048) (end -18.415 3.302) (layer F.SilkS) (width 0.15)) + (fp_line (start -18.415 3.302) (end 19.431 3.302) (layer F.SilkS) (width 0.15)) + (fp_line (start 19.431 3.302) (end 19.431 -3.048) (layer F.SilkS) (width 0.15)) + (fp_line (start 19.431 -3.048) (end -18.415 -3.048) (layer F.SilkS) (width 0.15)) + (pad 0 thru_hole circle (at -16.129 0.127) (size 3.81 3.81) (drill 3.048) (layers *.Cu *.Mask F.SilkS)) + (pad 0 thru_hole circle (at 17.145 0.127) (size 3.81 3.81) (drill 3.048) (layers *.Cu *.Mask F.SilkS)) + (pad 1 thru_hole rect (at 10.16 -1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 2 thru_hole circle (at 7.366 -1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 3 thru_hole circle (at 4.699 -1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 4 thru_hole circle (at 1.905 -1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 5 thru_hole circle (at -0.889 -1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 6 thru_hole circle (at -3.556 -1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 7 thru_hole circle (at -6.35 -1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 8 thru_hole circle (at -9.017 -1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 9 thru_hole circle (at 8.763 1.524) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 10 thru_hole circle (at 5.969 1.524) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 11 thru_hole circle (at 3.302 1.524) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 12 thru_hole circle (at 0.508 1.524) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 13 thru_hole circle (at -2.159 1.524) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 14 thru_hole circle (at -4.953 1.524) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 15 thru_hole circle (at -7.747 1.524) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (model Connect.3dshapes/DB15FD.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) +) diff --git a/PCB/.pretty/DB15F_CI.kicad_mod b/PCB/.pretty/DB15F_CI.kicad_mod new file mode 100644 index 00000000..ba2ac1c4 --- /dev/null +++ b/PCB/.pretty/DB15F_CI.kicad_mod @@ -0,0 +1,48 @@ +(module DB15F_CI (layer F.Cu) (tedit 0) + (descr "Connecteur DB15 femelle encarte") + (tags "CONN DB15") + (fp_text reference REF** (at 0 -8.382) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value DB15F_CI (at 0 -2.667) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -12.7 -5.588) (end -12.7 -11.938) (layer F.SilkS) (width 0.15)) + (fp_line (start -12.7 -11.938) (end 12.7 -11.938) (layer F.SilkS) (width 0.15)) + (fp_line (start 12.7 -11.938) (end 12.7 -5.588) (layer F.SilkS) (width 0.15)) + (fp_line (start -13.97 -4.318) (end -19.685 -4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start -19.685 -4.318) (end -19.685 -5.588) (layer F.SilkS) (width 0.15)) + (fp_line (start -19.685 -5.588) (end 19.685 -5.588) (layer F.SilkS) (width 0.15)) + (fp_line (start 19.685 -5.588) (end 19.685 -4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start 19.685 -4.318) (end 13.97 -4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start -13.335 -1.143) (end -13.97 -1.143) (layer F.SilkS) (width 0.15)) + (fp_line (start -13.97 -1.143) (end -13.97 -4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start -13.97 -4.318) (end 13.97 -4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start 13.97 -4.318) (end 13.97 -1.143) (layer F.SilkS) (width 0.15)) + (fp_line (start 13.97 -1.143) (end 13.335 -1.143) (layer F.SilkS) (width 0.15)) + (fp_line (start -11.43 0.127) (end -13.335 0.127) (layer F.SilkS) (width 0.15)) + (fp_line (start -13.335 0.127) (end -13.335 -1.143) (layer F.SilkS) (width 0.15)) + (fp_line (start -13.335 -1.143) (end 13.335 -1.143) (layer F.SilkS) (width 0.15)) + (fp_line (start 13.335 -1.143) (end 13.335 0.127) (layer F.SilkS) (width 0.15)) + (fp_line (start 13.335 0.127) (end 11.43 0.127) (layer F.SilkS) (width 0.15)) + (pad 4 connect rect (at -1.397 2.667) (size 1.778 5.08) (layers F.Cu F.Mask)) + (pad 3 connect rect (at -4.191 2.667) (size 1.778 5.08) (layers F.Cu F.Mask)) + (pad 2 connect rect (at -6.985 2.667) (size 1.778 5.08) (layers F.Cu F.Mask)) + (pad 1 connect rect (at -9.779 2.667) (size 1.778 5.08) (layers F.Cu F.Mask)) + (pad 5 connect rect (at 1.397 2.667) (size 1.778 5.08) (layers F.Cu F.Mask)) + (pad 6 connect rect (at 4.191 2.667) (size 1.778 5.08) (layers F.Cu F.Mask)) + (pad 7 connect rect (at 6.985 2.667) (size 1.778 5.08) (layers F.Cu F.Mask)) + (pad 8 connect rect (at 9.779 2.667) (size 1.778 5.08) (layers F.Cu F.Mask)) + (pad 9 connect rect (at -8.382 2.667) (size 1.778 5.08) (layers B.Cu B.Mask)) + (pad 10 connect rect (at -5.588 2.667) (size 1.778 5.08) (layers B.Cu B.Mask)) + (pad 11 connect rect (at -2.794 2.667) (size 1.778 5.08) (layers B.Cu B.Mask)) + (pad 12 connect rect (at 0 2.667) (size 1.778 5.08) (layers B.Cu B.Mask)) + (pad 13 connect rect (at 2.794 2.667) (size 1.778 5.08) (layers B.Cu B.Mask)) + (pad 14 connect rect (at 5.588 2.667) (size 1.778 5.08) (layers B.Cu B.Mask)) + (pad 15 connect rect (at 8.382 2.667) (size 1.778 5.08) (layers B.Cu B.Mask)) + (model Connect.3dshapes/DB15F_CI.wrl + (at (xyz 0 0 -0.033)) + (scale (xyz 1 1 1)) + (rotate (xyz 90 180 0)) + ) +) diff --git a/PCB/.pretty/DB15MC.kicad_mod b/PCB/.pretty/DB15MC.kicad_mod new file mode 100644 index 00000000..ebdd164f --- /dev/null +++ b/PCB/.pretty/DB15MC.kicad_mod @@ -0,0 +1,51 @@ +(module DB15MC (layer F.Cu) (tedit 0) + (descr "Connecteur DB15 MALE couche") + (tags "CONN DB15") + (fp_text reference REF** (at 0 -15.24) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value DB15MC (at 0 -6.35) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 19.812 -11.43) (end -19.812 -11.43) (layer F.SilkS) (width 0.15)) + (fp_line (start 19.812 -12.7) (end -19.812 -12.7) (layer F.SilkS) (width 0.15)) + (fp_line (start 13.462 -8.255) (end -13.462 -8.255) (layer F.SilkS) (width 0.15)) + (fp_line (start -13.462 -18.415) (end 13.462 -18.415) (layer F.SilkS) (width 0.15)) + (fp_line (start 13.462 -12.7) (end 13.462 -18.415) (layer F.SilkS) (width 0.15)) + (fp_line (start 13.462 -8.255) (end 13.462 -11.43) (layer F.SilkS) (width 0.15)) + (fp_line (start 14.097 -6.35) (end 14.097 -11.43) (layer F.SilkS) (width 0.15)) + (fp_line (start 12.446 -6.35) (end 19.812 -6.35) (layer F.SilkS) (width 0.15)) + (fp_line (start 12.446 2.54) (end 12.446 -6.35) (layer F.SilkS) (width 0.15)) + (fp_line (start 19.812 2.54) (end 12.446 2.54) (layer F.SilkS) (width 0.15)) + (fp_line (start 19.812 2.54) (end 19.812 -12.7) (layer F.SilkS) (width 0.15)) + (fp_line (start -14.097 -11.43) (end -14.097 -6.35) (layer F.SilkS) (width 0.15)) + (fp_line (start -12.192 -6.35) (end -12.192 2.54) (layer F.SilkS) (width 0.15)) + (fp_line (start -19.812 2.54) (end -19.812 -11.43) (layer F.SilkS) (width 0.15)) + (fp_line (start -19.812 -6.35) (end -12.192 -6.35) (layer F.SilkS) (width 0.15)) + (fp_line (start -13.462 -8.255) (end -13.462 -11.43) (layer F.SilkS) (width 0.15)) + (fp_line (start -13.462 -18.415) (end -13.462 -12.7) (layer F.SilkS) (width 0.15)) + (fp_line (start -19.812 -12.7) (end -19.812 -11.43) (layer F.SilkS) (width 0.15)) + (fp_line (start -19.812 2.54) (end -12.192 2.54) (layer F.SilkS) (width 0.15)) + (pad "" thru_hole circle (at 16.764 -1.016) (size 3.81 3.81) (drill 3.048) (layers *.Cu *.Mask F.SilkS)) + (pad "" thru_hole circle (at -16.764 -1.27) (size 3.81 3.81) (drill 3.048) (layers *.Cu *.Mask F.SilkS)) + (pad 8 thru_hole circle (at -9.652 1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 7 thru_hole circle (at -6.858 1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 6 thru_hole circle (at -4.191 1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 5 thru_hole circle (at -1.397 1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 4 thru_hole circle (at 1.397 1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 3 thru_hole circle (at 4.191 1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 2 thru_hole circle (at 6.858 1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 1 thru_hole rect (at 9.652 1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 15 thru_hole circle (at -8.0772 -1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 14 thru_hole circle (at -5.5372 -1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 13 thru_hole circle (at -2.7432 -1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 12 thru_hole circle (at 0 -1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 11 thru_hole circle (at 2.7432 -1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 10 thru_hole circle (at 5.5372 -1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 9 thru_hole circle (at 8.2804 -1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (model Connect.3dshapes/DB15MC.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) +) diff --git a/PCB/.pretty/DB15MD.kicad_mod b/PCB/.pretty/DB15MD.kicad_mod new file mode 100644 index 00000000..a7678976 --- /dev/null +++ b/PCB/.pretty/DB15MD.kicad_mod @@ -0,0 +1,36 @@ +(module DB15MD (layer F.Cu) (tedit 0) + (descr "Connecteur DB15 male droit") + (tags "CONN DB15") + (fp_text reference REF** (at -11.43 -5.08 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value DB15MD (at 8.89 -5.08 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -19.558 -3.048) (end -19.558 3.302) (layer F.SilkS) (width 0.15)) + (fp_line (start -19.558 3.302) (end 18.288 3.302) (layer F.SilkS) (width 0.15)) + (fp_line (start 18.288 3.302) (end 18.288 -3.048) (layer F.SilkS) (width 0.15)) + (fp_line (start 18.288 -3.048) (end -19.558 -3.048) (layer F.SilkS) (width 0.15)) + (pad 0 thru_hole circle (at -17.272 0.127) (size 3.81 3.81) (drill 3.048) (layers *.Cu *.Mask F.SilkS)) + (pad 0 thru_hole circle (at 16.002 0.127) (size 3.81 3.81) (drill 3.048) (layers *.Cu *.Mask F.SilkS)) + (pad 1 thru_hole rect (at -10.16 -1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 2 thru_hole circle (at -7.493 -1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 3 thru_hole circle (at -4.699 -1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 4 thru_hole circle (at -2.032 -1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 5 thru_hole circle (at 0.762 -1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 6 thru_hole circle (at 3.556 -1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 7 thru_hole circle (at 6.223 -1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 8 thru_hole circle (at 9.017 -1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 9 thru_hole circle (at -8.89 1.524) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 10 thru_hole circle (at -6.096 1.524) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 11 thru_hole circle (at -3.302 1.524) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 12 thru_hole circle (at -0.635 1.524) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 13 thru_hole circle (at 2.159 1.524) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 14 thru_hole circle (at 4.826 1.524) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 15 thru_hole circle (at 7.62 1.524) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (model Connect.3dshapes/DB15MD.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) +) diff --git a/PCB/.pretty/DB15M_CI.kicad_mod b/PCB/.pretty/DB15M_CI.kicad_mod new file mode 100644 index 00000000..59164808 --- /dev/null +++ b/PCB/.pretty/DB15M_CI.kicad_mod @@ -0,0 +1,48 @@ +(module DB15M_CI (layer F.Cu) (tedit 0) + (descr "Connecteur DB15 femelle encarte") + (tags "CONN DB15") + (fp_text reference REF** (at 0 -8.763) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value DB15M_CI (at 0 -2.667) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 12.7 -5.588) (end 12.7 -11.938) (layer F.SilkS) (width 0.15)) + (fp_line (start 12.7 -11.938) (end -12.7 -11.938) (layer F.SilkS) (width 0.15)) + (fp_line (start -12.7 -11.938) (end -12.7 -5.588) (layer F.SilkS) (width 0.15)) + (fp_line (start 13.97 -4.318) (end 19.685 -4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start 19.685 -4.318) (end 19.685 -5.588) (layer F.SilkS) (width 0.15)) + (fp_line (start 19.685 -5.588) (end -19.685 -5.588) (layer F.SilkS) (width 0.15)) + (fp_line (start -19.685 -5.588) (end -19.685 -4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start -19.685 -4.318) (end -13.97 -4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start 13.335 -1.143) (end 13.97 -1.143) (layer F.SilkS) (width 0.15)) + (fp_line (start 13.97 -1.143) (end 13.97 -4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start 13.97 -4.318) (end -13.97 -4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start -13.97 -4.318) (end -13.97 -1.143) (layer F.SilkS) (width 0.15)) + (fp_line (start -13.97 -1.143) (end -13.335 -1.143) (layer F.SilkS) (width 0.15)) + (fp_line (start 11.43 0.127) (end 13.335 0.127) (layer F.SilkS) (width 0.15)) + (fp_line (start 13.335 0.127) (end 13.335 -1.143) (layer F.SilkS) (width 0.15)) + (fp_line (start 13.335 -1.143) (end -13.335 -1.143) (layer F.SilkS) (width 0.15)) + (fp_line (start -13.335 -1.143) (end -13.335 0.127) (layer F.SilkS) (width 0.15)) + (fp_line (start -13.335 0.127) (end -11.43 0.127) (layer F.SilkS) (width 0.15)) + (pad 4 connect rect (at 1.397 2.667 180) (size 1.778 5.08) (layers F.Cu F.Mask)) + (pad 3 connect rect (at 4.191 2.667 180) (size 1.778 5.08) (layers F.Cu F.Mask)) + (pad 2 connect rect (at 6.985 2.667 180) (size 1.778 5.08) (layers F.Cu F.Mask)) + (pad 1 connect rect (at 9.779 2.667 180) (size 1.778 5.08) (layers F.Cu F.Mask)) + (pad 5 connect rect (at -1.397 2.667 180) (size 1.778 5.08) (layers F.Cu F.Mask)) + (pad 6 connect rect (at -4.191 2.667 180) (size 1.778 5.08) (layers F.Cu F.Mask)) + (pad 7 connect rect (at -6.985 2.667 180) (size 1.778 5.08) (layers F.Cu F.Mask)) + (pad 8 connect rect (at -9.779 2.667 180) (size 1.778 5.08) (layers F.Cu F.Mask)) + (pad 9 connect rect (at 8.382 2.667 180) (size 1.778 5.08) (layers B.Cu B.Mask)) + (pad 10 connect rect (at 5.588 2.667 180) (size 1.778 5.08) (layers B.Cu B.Mask)) + (pad 11 connect rect (at 2.794 2.667 180) (size 1.778 5.08) (layers B.Cu B.Mask)) + (pad 12 connect rect (at 0 2.667 180) (size 1.778 5.08) (layers B.Cu B.Mask)) + (pad 13 connect rect (at -2.794 2.667 180) (size 1.778 5.08) (layers B.Cu B.Mask)) + (pad 14 connect rect (at -5.588 2.667 180) (size 1.778 5.08) (layers B.Cu B.Mask)) + (pad 15 connect rect (at -8.382 2.667 180) (size 1.778 5.08) (layers B.Cu B.Mask)) + (model Connect.3dshapes/DB15M_CI.wrl + (at (xyz 0 0 -0.033)) + (scale (xyz 1 1 1)) + (rotate (xyz 90 180 0)) + ) +) diff --git a/PCB/.pretty/DB25FC.kicad_mod b/PCB/.pretty/DB25FC.kicad_mod new file mode 100644 index 00000000..41d67f03 --- /dev/null +++ b/PCB/.pretty/DB25FC.kicad_mod @@ -0,0 +1,62 @@ +(module DB25FC (layer F.Cu) (tedit 0) + (descr "Connecteur DB25 femelle couche") + (tags "CONN DB25") + (fp_text reference REF** (at 0 -15.24) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value DB25FC (at 0 -6.35) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 26.67 -11.43) (end 26.67 2.54) (layer F.SilkS) (width 0.15)) + (fp_line (start 19.05 -6.35) (end 19.05 2.54) (layer F.SilkS) (width 0.15)) + (fp_line (start 20.955 -11.43) (end 20.955 -6.35) (layer F.SilkS) (width 0.15)) + (fp_line (start -20.955 -11.43) (end -20.955 -6.35) (layer F.SilkS) (width 0.15)) + (fp_line (start -19.05 -6.35) (end -19.05 2.54) (layer F.SilkS) (width 0.15)) + (fp_line (start -26.67 2.54) (end -26.67 -11.43) (layer F.SilkS) (width 0.15)) + (fp_line (start 26.67 -6.35) (end 19.05 -6.35) (layer F.SilkS) (width 0.15)) + (fp_line (start -26.67 -6.35) (end -19.05 -6.35) (layer F.SilkS) (width 0.15)) + (fp_line (start 20.32 -8.255) (end 20.32 -11.43) (layer F.SilkS) (width 0.15)) + (fp_line (start -20.32 -8.255) (end -20.32 -11.43) (layer F.SilkS) (width 0.15)) + (fp_line (start 20.32 -18.415) (end 20.32 -12.7) (layer F.SilkS) (width 0.15)) + (fp_line (start -20.32 -18.415) (end -20.32 -12.7) (layer F.SilkS) (width 0.15)) + (fp_line (start 26.67 -11.43) (end 26.67 -12.7) (layer F.SilkS) (width 0.15)) + (fp_line (start 26.67 -12.7) (end -26.67 -12.7) (layer F.SilkS) (width 0.15)) + (fp_line (start -26.67 -12.7) (end -26.67 -11.43) (layer F.SilkS) (width 0.15)) + (fp_line (start -26.67 -11.43) (end 26.67 -11.43) (layer F.SilkS) (width 0.15)) + (fp_line (start 19.05 2.54) (end 26.67 2.54) (layer F.SilkS) (width 0.15)) + (fp_line (start -20.32 -8.255) (end 20.32 -8.255) (layer F.SilkS) (width 0.15)) + (fp_line (start -20.32 -18.415) (end 20.32 -18.415) (layer F.SilkS) (width 0.15)) + (fp_line (start -26.67 2.54) (end -19.05 2.54) (layer F.SilkS) (width 0.15)) + (pad "" thru_hole circle (at 23.495 -1.27) (size 3.81 3.81) (drill 3.048) (layers *.Cu *.Mask F.SilkS)) + (pad "" thru_hole circle (at -23.495 -1.27) (size 3.81 3.81) (drill 3.048) (layers *.Cu *.Mask F.SilkS)) + (pad 1 thru_hole rect (at -16.51 1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 2 thru_hole circle (at -13.716 1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 3 thru_hole circle (at -11.049 1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 4 thru_hole circle (at -8.255 1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 5 thru_hole circle (at -5.461 1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 6 thru_hole circle (at -2.667 1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 7 thru_hole circle (at 0 1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 8 thru_hole circle (at 2.794 1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 9 thru_hole circle (at 5.588 1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 10 thru_hole circle (at 8.382 1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 11 thru_hole circle (at 11.049 1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 12 thru_hole circle (at 13.843 1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 13 thru_hole circle (at 16.637 1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 14 thru_hole circle (at -14.9352 -1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 15 thru_hole circle (at -12.3952 -1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 16 thru_hole circle (at -9.6012 -1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 17 thru_hole circle (at -6.858 -1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 18 thru_hole circle (at -4.1148 -1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 19 thru_hole circle (at -1.3208 -1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 20 thru_hole circle (at 1.4224 -1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 21 thru_hole circle (at 4.1656 -1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 22 thru_hole circle (at 7.0104 -1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 23 thru_hole circle (at 9.7028 -1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 24 thru_hole circle (at 12.446 -1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 25 thru_hole circle (at 15.24 -1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (model Connect.3dshapes/DB25FC.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) +) diff --git a/PCB/.pretty/DB25FD.kicad_mod b/PCB/.pretty/DB25FD.kicad_mod new file mode 100644 index 00000000..991411db --- /dev/null +++ b/PCB/.pretty/DB25FD.kicad_mod @@ -0,0 +1,48 @@ +(module DB25FD (layer F.Cu) (tedit 0) + (descr "Connecteur DB25 femelle droit") + (tags "CONN DB25") + (fp_text reference REF** (at -15.24 -5.08 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value DB25FD (at 12.7 -5.08 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -25.654 -3.175) (end -25.654 -3.175) (layer F.SilkS) (width 0.15)) + (fp_line (start -25.654 -3.175) (end -25.654 3.175) (layer F.SilkS) (width 0.15)) + (fp_line (start -25.654 3.175) (end 25.781 3.175) (layer F.SilkS) (width 0.15)) + (fp_line (start 25.781 3.175) (end 25.781 -3.175) (layer F.SilkS) (width 0.15)) + (fp_line (start 25.781 -3.175) (end -25.527 -3.175) (layer F.SilkS) (width 0.15)) + (fp_line (start -25.527 -3.175) (end -25.654 -3.175) (layer F.SilkS) (width 0.15)) + (pad 0 thru_hole circle (at -23.495 0) (size 3.81 3.81) (drill 3.048) (layers *.Cu *.Mask F.SilkS)) + (pad 0 thru_hole circle (at 23.495 0) (size 3.81 3.81) (drill 3.048) (layers *.Cu *.Mask F.SilkS)) + (pad 1 thru_hole rect (at 16.637 -1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 2 thru_hole circle (at 13.843 -1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 3 thru_hole circle (at 11.049 -1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 4 thru_hole circle (at 8.255 -1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 5 thru_hole circle (at 5.461 -1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 6 thru_hole circle (at 2.794 -1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 7 thru_hole circle (at 0 -1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 8 thru_hole circle (at -2.794 -1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 9 thru_hole circle (at -5.588 -1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 10 thru_hole circle (at -8.382 -1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 11 thru_hole circle (at -11.049 -1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 12 thru_hole circle (at -13.843 -1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 13 thru_hole circle (at -16.637 -1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 14 thru_hole circle (at 15.24 1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 15 thru_hole circle (at 12.446 1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 16 thru_hole circle (at 9.652 1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 17 thru_hole circle (at 6.985 1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 18 thru_hole circle (at 4.191 1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 19 thru_hole circle (at 1.397 1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 20 thru_hole circle (at -1.397 1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 21 thru_hole circle (at -4.191 1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 22 thru_hole circle (at -6.858 1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 23 thru_hole circle (at -9.652 1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 24 thru_hole circle (at -12.446 1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 25 thru_hole circle (at -15.24 1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (model Connect.3dshapes/DB25FD.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) +) diff --git a/PCB/.pretty/DB25F_CI.kicad_mod b/PCB/.pretty/DB25F_CI.kicad_mod new file mode 100644 index 00000000..5286660e --- /dev/null +++ b/PCB/.pretty/DB25F_CI.kicad_mod @@ -0,0 +1,59 @@ +(module DB25F_CI (layer F.Cu) (tedit 0) + (descr "Connecteur DB25 femelle encarte") + (tags "CONN DB25") + (fp_text reference REF** (at 0 -2.54 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value DB25F_CI (at 0 -8.89 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 19.05 -0.508) (end 19.05 1.143) (layer F.SilkS) (width 0.15)) + (fp_line (start 19.05 1.143) (end 17.653 1.143) (layer F.SilkS) (width 0.15)) + (fp_line (start -19.05 -0.508) (end -19.05 1.016) (layer F.SilkS) (width 0.15)) + (fp_line (start -19.05 1.016) (end -17.78 1.016) (layer F.SilkS) (width 0.15)) + (fp_line (start 20.32 -0.508) (end -20.32 -0.508) (layer F.SilkS) (width 0.15)) + (fp_text user 1 (at -16.51 -1.905 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -20.32 -0.508) (end -20.32 -4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start -20.32 -4.318) (end 20.32 -4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start 20.32 -4.318) (end 20.32 -0.508) (layer F.SilkS) (width 0.15)) + (fp_line (start -20.32 -4.318) (end -25.4 -4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start -25.4 -4.318) (end -25.4 -5.588) (layer F.SilkS) (width 0.15)) + (fp_line (start -25.4 -5.588) (end 25.4 -5.588) (layer F.SilkS) (width 0.15)) + (fp_line (start 25.4 -5.588) (end 25.4 -4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start 25.4 -4.318) (end 20.32 -4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start -20.32 -5.588) (end -20.32 -11.303) (layer F.SilkS) (width 0.15)) + (fp_line (start -20.32 -11.303) (end 20.32 -11.303) (layer F.SilkS) (width 0.15)) + (fp_line (start 20.32 -11.303) (end 20.32 -5.588) (layer F.SilkS) (width 0.15)) + (pad 1 connect rect (at -16.51 2.667 90) (size 5.08 1.524) (layers F.Cu F.Mask)) + (pad 2 connect rect (at -13.716 2.667 90) (size 5.08 1.524) (layers F.Cu F.Mask)) + (pad 3 connect rect (at -11.049 2.667 90) (size 5.08 1.524) (layers F.Cu F.Mask)) + (pad 4 connect rect (at -8.255 2.667 90) (size 5.08 1.524) (layers F.Cu F.Mask)) + (pad 5 connect rect (at -5.588 2.667 90) (size 5.08 1.524) (layers F.Cu F.Mask)) + (pad 6 connect rect (at -2.794 2.667 90) (size 5.08 1.524) (layers F.Cu F.Mask)) + (pad 7 connect rect (at 0 2.667 90) (size 5.08 1.524) (layers F.Cu F.Mask)) + (pad 8 connect rect (at 2.667 2.667 90) (size 5.08 1.524) (layers F.Cu F.Mask)) + (pad 9 connect rect (at 5.461 2.667 90) (size 5.08 1.524) (layers F.Cu F.Mask)) + (pad 10 connect rect (at 8.128 2.667 90) (size 5.08 1.524) (layers F.Cu F.Mask)) + (pad 11 connect rect (at 10.922 2.667 90) (size 5.08 1.524) (layers F.Cu F.Mask)) + (pad 12 connect rect (at 13.716 2.667 90) (size 5.08 1.524) (layers F.Cu F.Mask)) + (pad 13 connect rect (at 16.383 2.667 90) (size 5.08 1.524) (layers F.Cu F.Mask)) + (pad 14 connect rect (at -15.113 2.667 90) (size 5.08 1.524) (layers B.Cu B.Mask)) + (pad 15 connect rect (at -12.446 2.667 90) (size 5.08 1.524) (layers B.Cu B.Mask)) + (pad 16 connect rect (at -9.652 2.667 90) (size 5.08 1.524) (layers B.Cu B.Mask)) + (pad 17 connect rect (at -6.858 2.667 90) (size 5.08 1.524) (layers B.Cu B.Mask)) + (pad 18 connect rect (at -4.191 2.667 90) (size 5.08 1.524) (layers B.Cu B.Mask)) + (pad 19 connect rect (at -1.397 2.667 90) (size 5.08 1.524) (layers B.Cu B.Mask)) + (pad 20 connect rect (at 1.27 2.667 90) (size 5.08 1.524) (layers B.Cu B.Mask)) + (pad 21 connect rect (at 4.064 2.667 90) (size 5.08 1.524) (layers B.Cu B.Mask)) + (pad 22 connect rect (at 6.858 2.667 90) (size 5.08 1.524) (layers B.Cu B.Mask)) + (pad 23 connect rect (at 9.525 2.667 90) (size 5.08 1.524) (layers B.Cu B.Mask)) + (pad 24 connect rect (at 12.319 2.667 90) (size 5.08 1.524) (layers B.Cu B.Mask)) + (pad 25 connect rect (at 14.986 2.667 90) (size 5.08 1.524) (layers B.Cu B.Mask)) + (model Connect.3dshapes/DB25F_CI.wrl + (at (xyz 0 0 -0.033)) + (scale (xyz 0.98 1 1)) + (rotate (xyz 90 180 0)) + ) +) diff --git a/PCB/.pretty/DB25MC.kicad_mod b/PCB/.pretty/DB25MC.kicad_mod new file mode 100644 index 00000000..7987c74b --- /dev/null +++ b/PCB/.pretty/DB25MC.kicad_mod @@ -0,0 +1,62 @@ +(module DB25MC (layer F.Cu) (tedit 0) + (descr "Connecteur DB25 MALE couche") + (tags "CONN DB25") + (fp_text reference REF** (at 0 -15.24) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value DB25MC (at 0 -6.35) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 26.67 -11.43) (end 26.67 2.54) (layer F.SilkS) (width 0.15)) + (fp_line (start 19.05 -6.35) (end 19.05 2.54) (layer F.SilkS) (width 0.15)) + (fp_line (start 20.955 -11.43) (end 20.955 -6.35) (layer F.SilkS) (width 0.15)) + (fp_line (start -20.955 -11.43) (end -20.955 -6.35) (layer F.SilkS) (width 0.15)) + (fp_line (start -19.05 -6.35) (end -19.05 2.54) (layer F.SilkS) (width 0.15)) + (fp_line (start -26.67 2.54) (end -26.67 -11.43) (layer F.SilkS) (width 0.15)) + (fp_line (start 26.67 -6.35) (end 19.05 -6.35) (layer F.SilkS) (width 0.15)) + (fp_line (start -26.67 -6.35) (end -19.05 -6.35) (layer F.SilkS) (width 0.15)) + (fp_line (start 20.32 -8.255) (end 20.32 -11.43) (layer F.SilkS) (width 0.15)) + (fp_line (start -20.32 -8.255) (end -20.32 -11.43) (layer F.SilkS) (width 0.15)) + (fp_line (start 20.32 -18.415) (end 20.32 -12.7) (layer F.SilkS) (width 0.15)) + (fp_line (start -20.32 -18.415) (end -20.32 -12.7) (layer F.SilkS) (width 0.15)) + (fp_line (start 26.67 -11.43) (end 26.67 -12.7) (layer F.SilkS) (width 0.15)) + (fp_line (start 26.67 -12.7) (end -26.67 -12.7) (layer F.SilkS) (width 0.15)) + (fp_line (start -26.67 -12.7) (end -26.67 -11.43) (layer F.SilkS) (width 0.15)) + (fp_line (start -26.67 -11.43) (end 26.67 -11.43) (layer F.SilkS) (width 0.15)) + (fp_line (start 19.05 2.54) (end 26.67 2.54) (layer F.SilkS) (width 0.15)) + (fp_line (start -20.32 -8.255) (end 20.32 -8.255) (layer F.SilkS) (width 0.15)) + (fp_line (start -20.32 -18.415) (end 20.32 -18.415) (layer F.SilkS) (width 0.15)) + (fp_line (start -26.67 2.54) (end -19.05 2.54) (layer F.SilkS) (width 0.15)) + (pad "" thru_hole circle (at 23.495 -1.27) (size 3.81 3.81) (drill 3.048) (layers *.Cu *.Mask F.SilkS)) + (pad "" thru_hole circle (at -23.495 -1.27) (size 3.81 3.81) (drill 3.048) (layers *.Cu *.Mask F.SilkS)) + (pad 13 thru_hole circle (at -16.51 1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 12 thru_hole circle (at -13.716 1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 11 thru_hole circle (at -11.049 1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 10 thru_hole circle (at -8.255 1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 9 thru_hole circle (at -5.461 1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 8 thru_hole circle (at -2.667 1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 7 thru_hole circle (at 0 1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 6 thru_hole circle (at 2.794 1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 5 thru_hole circle (at 5.588 1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 4 thru_hole circle (at 8.382 1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 3 thru_hole circle (at 11.049 1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 2 thru_hole circle (at 13.843 1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 1 thru_hole rect (at 16.637 1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 25 thru_hole circle (at -14.9352 -1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 24 thru_hole circle (at -12.3952 -1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 23 thru_hole circle (at -9.6012 -1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 22 thru_hole circle (at -6.858 -1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 21 thru_hole circle (at -4.1148 -1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 20 thru_hole circle (at -1.3208 -1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 19 thru_hole circle (at 1.4224 -1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 18 thru_hole circle (at 4.1656 -1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 17 thru_hole circle (at 7.0104 -1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 16 thru_hole circle (at 9.7028 -1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 15 thru_hole circle (at 12.446 -1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 14 thru_hole circle (at 15.24 -1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (model Connect.3dshapes/DB25MC.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) +) diff --git a/PCB/.pretty/DB25MD.kicad_mod b/PCB/.pretty/DB25MD.kicad_mod new file mode 100644 index 00000000..68f9bc3c --- /dev/null +++ b/PCB/.pretty/DB25MD.kicad_mod @@ -0,0 +1,48 @@ +(module DB25MD (layer F.Cu) (tedit 0) + (descr "Connecteur DB25 male droit") + (tags "CONN DB25") + (fp_text reference REF** (at -17.78 -5.08 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value DB25MD (at 15.24 -5.08 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -25.654 -3.175) (end -25.654 -3.175) (layer F.SilkS) (width 0.15)) + (fp_line (start -25.654 -3.175) (end -25.654 3.175) (layer F.SilkS) (width 0.15)) + (fp_line (start -25.654 3.175) (end 25.781 3.175) (layer F.SilkS) (width 0.15)) + (fp_line (start 25.781 3.175) (end 25.781 -3.175) (layer F.SilkS) (width 0.15)) + (fp_line (start 25.781 -3.175) (end -25.527 -3.175) (layer F.SilkS) (width 0.15)) + (fp_line (start -25.527 -3.175) (end -25.654 -3.175) (layer F.SilkS) (width 0.15)) + (pad 0 thru_hole circle (at -23.495 0) (size 3.81 3.81) (drill 3.048) (layers *.Cu *.Mask F.SilkS)) + (pad 0 thru_hole circle (at 23.495 0) (size 3.81 3.81) (drill 3.048) (layers *.Cu *.Mask F.SilkS)) + (pad 1 thru_hole rect (at -16.637 -1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 2 thru_hole circle (at -13.843 -1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 3 thru_hole circle (at -11.049 -1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 4 thru_hole circle (at -8.382 -1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 5 thru_hole circle (at -5.588 -1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 6 thru_hole circle (at -2.794 -1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 7 thru_hole circle (at 0 -1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 8 thru_hole circle (at 2.794 -1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 9 thru_hole circle (at 5.461 -1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 10 thru_hole circle (at 8.255 -1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 11 thru_hole circle (at 11.049 -1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 12 thru_hole circle (at 13.843 -1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 13 thru_hole circle (at 16.637 -1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 14 thru_hole circle (at -15.24 1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 15 thru_hole circle (at -12.446 1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 16 thru_hole circle (at -9.652 1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 17 thru_hole circle (at -6.858 1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 18 thru_hole circle (at -4.191 1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 19 thru_hole circle (at -1.397 1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 20 thru_hole circle (at 1.397 1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 21 thru_hole circle (at 4.191 1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 22 thru_hole circle (at 6.985 1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 23 thru_hole circle (at 9.652 1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 24 thru_hole circle (at 12.446 1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 25 thru_hole circle (at 15.24 1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (model Connect.3dshapes/DB25MD.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) +) diff --git a/PCB/.pretty/DB25M_CI.kicad_mod b/PCB/.pretty/DB25M_CI.kicad_mod new file mode 100644 index 00000000..0004a65f --- /dev/null +++ b/PCB/.pretty/DB25M_CI.kicad_mod @@ -0,0 +1,56 @@ +(module DB25M_CI (layer F.Cu) (tedit 0) + (descr "Connecteur DB25 male couche") + (tags "CONN DB25") + (fp_text reference REF** (at 0 -2.667 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value DB25M_CI (at 0 -8.763 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 15.875 -0.508) (end 16.891 -3.302) (layer F.SilkS) (width 0.15)) + (fp_line (start 16.891 -3.302) (end 17.907 -0.508) (layer F.SilkS) (width 0.15)) + (fp_line (start -26.67 -4.318) (end 26.67 -4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start 26.67 -5.588) (end -26.67 -5.588) (layer F.SilkS) (width 0.15)) + (fp_line (start 26.67 -5.588) (end 26.67 -4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start -26.67 -5.588) (end -26.67 -4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start 20.32 -0.508) (end -20.32 -0.508) (layer F.SilkS) (width 0.15)) + (fp_line (start 19.05 -0.508) (end 19.05 1.143) (layer F.SilkS) (width 0.15)) + (fp_line (start 19.05 1.143) (end 17.78 1.143) (layer F.SilkS) (width 0.15)) + (fp_line (start -19.05 -0.508) (end -19.05 1.016) (layer F.SilkS) (width 0.15)) + (fp_line (start -19.05 1.016) (end -17.78 1.016) (layer F.SilkS) (width 0.15)) + (fp_line (start -20.32 -0.508) (end -20.32 -4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start 20.32 -4.318) (end 20.32 -0.508) (layer F.SilkS) (width 0.15)) + (fp_line (start -20.32 -5.588) (end -20.32 -11.303) (layer F.SilkS) (width 0.15)) + (fp_line (start -20.32 -11.303) (end 20.32 -11.303) (layer F.SilkS) (width 0.15)) + (fp_line (start 20.32 -11.303) (end 20.32 -5.588) (layer F.SilkS) (width 0.15)) + (pad 13 connect rect (at -16.51 2.667 90) (size 5.08 1.524) (layers F.Cu F.Mask)) + (pad 12 connect rect (at -13.716 2.667 90) (size 5.08 1.524) (layers F.Cu F.Mask)) + (pad 11 connect rect (at -11.049 2.667 90) (size 5.08 1.524) (layers F.Cu F.Mask)) + (pad 10 connect rect (at -8.255 2.667 90) (size 5.08 1.524) (layers F.Cu F.Mask)) + (pad 9 connect rect (at -5.588 2.667 90) (size 5.08 1.524) (layers F.Cu F.Mask)) + (pad 8 connect rect (at -2.794 2.667 90) (size 5.08 1.524) (layers F.Cu F.Mask)) + (pad 7 connect rect (at 0 2.667 90) (size 5.08 1.524) (layers F.Cu F.Mask)) + (pad 6 connect rect (at 2.667 2.667 90) (size 5.08 1.524) (layers F.Cu F.Mask)) + (pad 5 connect rect (at 5.461 2.667 90) (size 5.08 1.524) (layers F.Cu F.Mask)) + (pad 4 connect rect (at 8.128 2.667 90) (size 5.08 1.524) (layers F.Cu F.Mask)) + (pad 3 connect rect (at 10.922 2.667 90) (size 5.08 1.524) (layers F.Cu F.Mask)) + (pad 2 connect rect (at 13.716 2.667 90) (size 5.08 1.524) (layers F.Cu F.Mask)) + (pad 1 connect rect (at 16.383 2.667 90) (size 5.08 1.524) (layers F.Cu F.Mask)) + (pad 25 connect rect (at -15.113 2.667 90) (size 5.08 1.524) (layers B.Cu B.Mask)) + (pad 24 connect rect (at -12.446 2.667 90) (size 5.08 1.524) (layers B.Cu B.Mask)) + (pad 23 connect rect (at -9.652 2.667 90) (size 5.08 1.524) (layers B.Cu B.Mask)) + (pad 22 connect rect (at -6.858 2.667 90) (size 5.08 1.524) (layers B.Cu B.Mask)) + (pad 21 connect rect (at -4.191 2.667 90) (size 5.08 1.524) (layers B.Cu B.Mask)) + (pad 20 connect rect (at -1.397 2.667 90) (size 5.08 1.524) (layers B.Cu B.Mask)) + (pad 19 connect rect (at 1.27 2.667 90) (size 5.08 1.524) (layers B.Cu B.Mask)) + (pad 18 connect rect (at 4.064 2.667 90) (size 5.08 1.524) (layers B.Cu B.Mask)) + (pad 17 connect rect (at 6.858 2.667 90) (size 5.08 1.524) (layers B.Cu B.Mask)) + (pad 16 connect rect (at 9.525 2.667 90) (size 5.08 1.524) (layers B.Cu B.Mask)) + (pad 15 connect rect (at 12.319 2.667 90) (size 5.08 1.524) (layers B.Cu B.Mask)) + (pad 14 connect rect (at 14.986 2.667 90) (size 5.08 1.524) (layers B.Cu B.Mask)) + (model Connect.3dshapes/DB25M_CI.wrl + (at (xyz 0 0 -0.033)) + (scale (xyz 0.98 1 1)) + (rotate (xyz 90 180 0)) + ) +) diff --git a/PCB/.pretty/DB37FC.kicad_mod b/PCB/.pretty/DB37FC.kicad_mod new file mode 100644 index 00000000..f7da29b4 --- /dev/null +++ b/PCB/.pretty/DB37FC.kicad_mod @@ -0,0 +1,63 @@ +(module DB37FC (layer F.Cu) (tedit 0) + (descr "Connecteur DB37 femelle couche") + (tags "CONN DB37") + (fp_text reference REF** (at 0 -5.08 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value DB37FC (at 0 -7.62 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 34.925 3.175) (end -34.925 3.175) (layer F.SilkS) (width 0.15)) + (fp_line (start -34.925 3.175) (end -34.925 -12.065) (layer F.SilkS) (width 0.15)) + (fp_line (start -34.925 -12.065) (end 34.925 -12.065) (layer F.SilkS) (width 0.15)) + (fp_line (start 34.925 -12.065) (end 34.925 3.175) (layer F.SilkS) (width 0.15)) + (fp_line (start 25.4 -12.065) (end 25.4 -19.05) (layer F.SilkS) (width 0.15)) + (fp_line (start 25.4 -19.05) (end -25.4 -19.05) (layer F.SilkS) (width 0.15)) + (fp_line (start -25.4 -19.05) (end -25.4 -12.065) (layer F.SilkS) (width 0.15)) + (fp_line (start 27.305 -12.065) (end 27.305 3.175) (layer F.SilkS) (width 0.15)) + (fp_line (start -27.305 -12.065) (end -27.305 3.175) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole rect (at -24.9174 1.4224 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.SilkS *.Mask)) + (pad 2 thru_hole circle (at -22.1488 1.4224 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 3 thru_hole circle (at -19.3802 1.4224 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 4 thru_hole circle (at -16.6116 1.4224 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 5 thru_hole circle (at -13.843 1.4224 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 6 thru_hole circle (at -11.0744 1.4224 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 7 thru_hole circle (at -8.3058 1.4224 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 8 thru_hole circle (at -5.5372 1.4224 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 9 thru_hole circle (at -2.7686 1.4224 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad ? thru_hole circle (at -31.623 0 180) (size 3.81 3.81) (drill 3.048) (layers *.Cu *.Mask F.SilkS)) + (pad ? thru_hole circle (at 31.877 0 180) (size 3.81 3.81) (drill 3.048) (layers *.Cu *.Mask F.SilkS)) + (pad 10 thru_hole circle (at 0 1.4224 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 11 thru_hole circle (at 2.7686 1.4224 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 12 thru_hole circle (at 5.5372 1.4224 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 13 thru_hole circle (at 8.3058 1.4224 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 14 thru_hole circle (at 11.0744 1.4224 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 15 thru_hole circle (at 13.843 1.4224 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 16 thru_hole circle (at 16.6116 1.4224 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 17 thru_hole circle (at 19.3802 1.4224 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 18 thru_hole circle (at 22.1488 1.4224 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 19 thru_hole circle (at 24.9174 1.4224 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 20 thru_hole circle (at -23.5458 -1.4224 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 21 thru_hole circle (at -20.7772 -1.4224 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 22 thru_hole circle (at -18.0086 -1.4224 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 23 thru_hole circle (at -15.24 -1.4224 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 24 thru_hole circle (at -12.4714 -1.4224 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 25 thru_hole circle (at -9.7028 -1.4224 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 26 thru_hole circle (at -6.9342 -1.4224 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 27 thru_hole circle (at -4.1656 -1.4224 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 28 thru_hole circle (at -1.397 -1.4224 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 29 thru_hole circle (at 1.3716 -1.4224 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 30 thru_hole circle (at 4.1402 -1.4224 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 31 thru_hole circle (at 6.9088 -1.4224 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 32 thru_hole circle (at 9.6774 -1.4224 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 33 thru_hole circle (at 12.446 -1.4224 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 34 thru_hole circle (at 15.2146 -1.4224 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 35 thru_hole circle (at 17.9832 -1.4224 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 36 thru_hole circle (at 20.7518 -1.4224 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 37 thru_hole circle (at 23.5204 -1.4224 180) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (model Connect.3dshapes/DB37FC.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) +) diff --git a/PCB/.pretty/DB37FD.kicad_mod b/PCB/.pretty/DB37FD.kicad_mod new file mode 100644 index 00000000..c51d04fc --- /dev/null +++ b/PCB/.pretty/DB37FD.kicad_mod @@ -0,0 +1,53 @@ +(module DB37FD (layer F.Cu) (tedit 0) + (descr "Connecteur DB37 femelle droit") + (tags "CONN DB37") + (fp_text reference REF** (at -13.97 -5.08) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value DB37FD (at 12.7 -5.08) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -34.163 -3.175) (end -34.163 3.175) (layer F.SilkS) (width 0.15)) + (fp_line (start -34.163 3.175) (end 33.909 3.175) (layer F.SilkS) (width 0.15)) + (fp_line (start 33.909 3.175) (end 33.909 -3.175) (layer F.SilkS) (width 0.15)) + (fp_line (start 33.909 -3.175) (end -34.163 -3.175) (layer F.SilkS) (width 0.15)) + (pad "" thru_hole circle (at -31.75 0) (size 3.81 3.81) (drill 3.048) (layers *.Cu *.Mask F.SilkS)) + (pad "" thru_hole circle (at 31.75 0) (size 3.81 3.81) (drill 3.048) (layers *.Cu *.Mask F.SilkS)) + (pad 1 thru_hole rect (at 24.892 -1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 2 thru_hole circle (at 22.098 -1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 3 thru_hole circle (at 19.431 -1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 4 thru_hole circle (at 16.637 -1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 5 thru_hole circle (at 13.843 -1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 6 thru_hole circle (at 11.049 -1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 7 thru_hole circle (at 8.255 -1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 8 thru_hole circle (at 5.588 -1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 9 thru_hole circle (at 2.794 -1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 10 thru_hole circle (at 0 -1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 11 thru_hole circle (at -2.794 -1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 12 thru_hole circle (at -5.588 -1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 13 thru_hole circle (at -8.255 -1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 14 thru_hole circle (at -11.049 -1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 15 thru_hole circle (at -13.843 -1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 16 thru_hole circle (at -16.637 -1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 17 thru_hole circle (at -19.431 -1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 18 thru_hole circle (at -22.098 -1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 19 thru_hole circle (at -24.892 -1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 20 thru_hole circle (at 23.495 1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 21 thru_hole circle (at 20.701 1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 22 thru_hole circle (at 17.907 1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 23 thru_hole circle (at 15.24 1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 24 thru_hole circle (at 12.446 1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 25 thru_hole circle (at 9.652 1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 26 thru_hole circle (at 6.858 1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 27 thru_hole circle (at 4.064 1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 28 thru_hole circle (at 1.397 1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 29 thru_hole circle (at -1.397 1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 30 thru_hole circle (at -4.191 1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 31 thru_hole circle (at -6.985 1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 32 thru_hole circle (at -9.906 1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 33 thru_hole circle (at -12.446 1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 34 thru_hole circle (at -15.24 1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 35 thru_hole circle (at -18.034 1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 36 thru_hole circle (at -20.828 1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 37 thru_hole circle (at -23.622 1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) +) diff --git a/PCB/.pretty/DB37MD.kicad_mod b/PCB/.pretty/DB37MD.kicad_mod new file mode 100644 index 00000000..7e153664 --- /dev/null +++ b/PCB/.pretty/DB37MD.kicad_mod @@ -0,0 +1,54 @@ +(module DB37MD (layer F.Cu) (tedit 0) + (descr "Connecteur DB37 male droit") + (tags "CONN DB37") + (fp_text reference REF** (at -12.7 -5.08) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value DB37MD (at 12.7 -5.08) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -34.163 -3.175) (end -34.163 -3.175) (layer F.SilkS) (width 0.15)) + (fp_line (start -34.163 -3.175) (end -34.163 3.175) (layer F.SilkS) (width 0.15)) + (fp_line (start -34.163 3.175) (end 33.909 3.175) (layer F.SilkS) (width 0.15)) + (fp_line (start 33.909 3.175) (end 33.909 -3.175) (layer F.SilkS) (width 0.15)) + (fp_line (start 33.909 -3.175) (end -34.163 -3.175) (layer F.SilkS) (width 0.15)) + (pad "" thru_hole circle (at -31.75 0) (size 3.81 3.81) (drill 3.048) (layers *.Cu *.Mask F.SilkS)) + (pad "" thru_hole circle (at 31.75 0) (size 3.81 3.81) (drill 3.048) (layers *.Cu *.Mask F.SilkS)) + (pad 1 thru_hole rect (at -24.892 -1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 2 thru_hole circle (at -22.098 -1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 3 thru_hole circle (at -19.431 -1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 4 thru_hole circle (at -16.637 -1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 5 thru_hole circle (at -13.843 -1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 6 thru_hole circle (at -11.049 -1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 7 thru_hole circle (at -8.255 -1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 8 thru_hole circle (at -5.588 -1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 9 thru_hole circle (at -2.794 -1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 10 thru_hole circle (at 0 -1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 11 thru_hole circle (at 2.794 -1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 12 thru_hole circle (at 5.461 -1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 13 thru_hole circle (at 8.255 -1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 14 thru_hole circle (at 11.049 -1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 15 thru_hole circle (at 13.843 -1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 16 thru_hole circle (at 16.637 -1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 17 thru_hole circle (at 19.431 -1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 18 thru_hole circle (at 22.098 -1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 19 thru_hole circle (at 24.892 -1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 20 thru_hole circle (at -23.622 1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 21 thru_hole circle (at -20.828 1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 22 thru_hole circle (at -18.034 1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 23 thru_hole circle (at -15.24 1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 24 thru_hole circle (at -12.446 1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 25 thru_hole circle (at -9.906 1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 26 thru_hole circle (at -6.985 1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 27 thru_hole circle (at -4.191 1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 28 thru_hole circle (at -1.397 1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 29 thru_hole circle (at 1.397 1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 30 thru_hole circle (at 4.064 1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 31 thru_hole circle (at 6.858 1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 32 thru_hole circle (at 9.652 1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 33 thru_hole circle (at 12.446 1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 34 thru_hole circle (at 15.24 1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 35 thru_hole circle (at 17.907 1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 36 thru_hole circle (at 20.701 1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 37 thru_hole circle (at 23.495 1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) +) diff --git a/PCB/.pretty/DB9FC.kicad_mod b/PCB/.pretty/DB9FC.kicad_mod new file mode 100644 index 00000000..754d72ea --- /dev/null +++ b/PCB/.pretty/DB9FC.kicad_mod @@ -0,0 +1,36 @@ +(module DB9FC (layer F.Cu) (tedit 0) + (descr "Connecteur DB9 femelle couche") + (tags "CONN DB9") + (fp_text reference REF** (at 1.27 -10.16) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value DB9FC (at 1.27 -3.81) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -16.129 2.286) (end 16.383 2.286) (layer F.SilkS) (width 0.15)) + (fp_line (start 16.383 2.286) (end 16.383 -15.494) (layer F.SilkS) (width 0.15)) + (fp_line (start 16.383 -15.494) (end -16.129 -15.494) (layer F.SilkS) (width 0.15)) + (fp_line (start -16.129 -15.494) (end -16.129 2.286) (layer F.SilkS) (width 0.15)) + (fp_line (start -9.017 -15.494) (end -9.017 -7.874) (layer F.SilkS) (width 0.15)) + (fp_line (start -9.017 -7.874) (end 9.271 -7.874) (layer F.SilkS) (width 0.15)) + (fp_line (start 9.271 -7.874) (end 9.271 -15.494) (layer F.SilkS) (width 0.15)) + (fp_line (start -7.493 -15.494) (end -7.493 -24.13) (layer F.SilkS) (width 0.15)) + (fp_line (start -7.493 -24.13) (end 7.747 -24.13) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.747 -24.13) (end 7.747 -15.494) (layer F.SilkS) (width 0.15)) + (pad "" thru_hole circle (at 12.827 -1.27) (size 3.81 3.81) (drill 3.048) (layers *.Cu *.Mask F.SilkS)) + (pad "" thru_hole circle (at -12.573 -1.27) (size 3.81 3.81) (drill 3.048) (layers *.Cu *.Mask F.SilkS)) + (pad 1 thru_hole rect (at -5.461 1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 2 thru_hole circle (at -2.667 1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 3 thru_hole circle (at 0 1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 4 thru_hole circle (at 2.794 1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 5 thru_hole circle (at 5.588 1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 6 thru_hole circle (at -4.064 -1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 7 thru_hole circle (at -1.27 -1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 8 thru_hole circle (at 1.397 -1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 9 thru_hole circle (at 4.191 -1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (model Connect.3dshapes/DB9FC.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) +) diff --git a/PCB/.pretty/DB9FD.kicad_mod b/PCB/.pretty/DB9FD.kicad_mod new file mode 100644 index 00000000..c9134750 --- /dev/null +++ b/PCB/.pretty/DB9FD.kicad_mod @@ -0,0 +1,30 @@ +(module DB9FD (layer F.Cu) (tedit 0) + (descr "Connecteur DB9 femelle droit") + (tags "CONN DB9") + (fp_text reference REF** (at -6.096 -4.826 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value DB9FD (at 6.096 -4.826) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -14.986 -3.302) (end -14.986 3.302) (layer F.SilkS) (width 0.15)) + (fp_line (start -14.986 3.302) (end 14.986 3.302) (layer F.SilkS) (width 0.15)) + (fp_line (start 14.986 3.302) (end 14.986 -3.302) (layer F.SilkS) (width 0.15)) + (fp_line (start 14.986 -3.302) (end -14.986 -3.302) (layer F.SilkS) (width 0.15)) + (pad 0 thru_hole circle (at -12.446 -0.127) (size 3.81 3.81) (drill 3.048) (layers *.Cu *.Mask F.SilkS)) + (pad 0 thru_hole circle (at 12.573 -0.127) (size 3.81 3.81) (drill 3.048) (layers *.Cu *.Mask F.SilkS)) + (pad 1 thru_hole rect (at 5.461 -1.524) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 2 thru_hole circle (at 2.794 -1.524) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 3 thru_hole circle (at 0 -1.524) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 4 thru_hole circle (at -2.667 -1.524) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 5 thru_hole circle (at -5.461 -1.524) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 6 thru_hole circle (at 4.191 1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 7 thru_hole circle (at 1.397 1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 8 thru_hole circle (at -1.27 1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 9 thru_hole circle (at -4.064 1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (model Connect.3dshapes/DB9FD.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) +) diff --git a/PCB/.pretty/DB9F_CI.kicad_mod b/PCB/.pretty/DB9F_CI.kicad_mod new file mode 100644 index 00000000..920d7b28 --- /dev/null +++ b/PCB/.pretty/DB9F_CI.kicad_mod @@ -0,0 +1,42 @@ +(module DB9F_CI (layer F.Cu) (tedit 0) + (descr "Connecteur DB9 femelle encarte") + (tags "CONN DB9") + (fp_text reference REF** (at 0 -9.144) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value DB9F_CI (at 0 -3.048) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -8.509 -12.065) (end 8.636 -12.065) (layer F.SilkS) (width 0.15)) + (fp_line (start 9.271 -1.27) (end -9.144 -1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start 9.906 -1.27) (end 9.271 -1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start 9.906 -4.445) (end -9.779 -4.445) (layer F.SilkS) (width 0.15)) + (fp_line (start 15.621 -4.445) (end 9.906 -4.445) (layer F.SilkS) (width 0.15)) + (fp_line (start -15.494 -5.715) (end 15.621 -5.715) (layer F.SilkS) (width 0.15)) + (fp_line (start 8.636 -5.715) (end 8.636 -12.065) (layer F.SilkS) (width 0.15)) + (fp_line (start 15.621 -4.445) (end 15.621 -5.715) (layer F.SilkS) (width 0.15)) + (fp_line (start 9.906 -1.27) (end 9.906 -4.445) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.366 0) (end 9.271 0) (layer F.SilkS) (width 0.15)) + (fp_line (start 9.271 0) (end 9.271 -1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start -8.509 -5.715) (end -8.509 -12.065) (layer F.SilkS) (width 0.15)) + (fp_line (start -9.779 -4.445) (end -15.494 -4.445) (layer F.SilkS) (width 0.15)) + (fp_line (start -15.494 -4.445) (end -15.494 -5.715) (layer F.SilkS) (width 0.15)) + (fp_line (start -9.144 -1.27) (end -9.779 -1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start -9.779 -1.27) (end -9.779 -4.445) (layer F.SilkS) (width 0.15)) + (fp_line (start -7.239 0) (end -9.144 0) (layer F.SilkS) (width 0.15)) + (fp_line (start -9.144 0) (end -9.144 -1.27) (layer F.SilkS) (width 0.15)) + (pad 4 connect rect (at 2.794 2.54) (size 1.778 5.08) (layers F.Cu F.Mask)) + (pad 3 connect rect (at 0 2.54) (size 1.778 5.08) (layers F.Cu F.Mask)) + (pad 2 connect rect (at -2.794 2.54) (size 1.778 5.08) (layers F.Cu F.Mask)) + (pad 1 connect rect (at -5.588 2.54) (size 1.778 5.08) (layers F.Cu F.Mask)) + (pad 5 connect rect (at 5.588 2.54) (size 1.778 5.08) (layers F.Cu F.Mask)) + (pad 6 connect rect (at -4.191 2.54) (size 1.778 5.08) (layers B.Cu B.Mask)) + (pad 7 connect rect (at -1.397 2.54) (size 1.778 5.08) (layers B.Cu B.Mask)) + (pad 8 connect rect (at 1.397 2.54) (size 1.778 5.08) (layers B.Cu B.Mask)) + (pad 9 connect rect (at 4.191 2.54) (size 1.778 5.08) (layers B.Cu B.Mask)) + (model Connect.3dshapes/DB9F_CI.wrl + (at (xyz 0 0 -0.033)) + (scale (xyz 1 1 1)) + (rotate (xyz 90 180 0)) + ) +) diff --git a/PCB/.pretty/DB9F_CI_INVERT.kicad_mod b/PCB/.pretty/DB9F_CI_INVERT.kicad_mod new file mode 100644 index 00000000..bab5cc53 --- /dev/null +++ b/PCB/.pretty/DB9F_CI_INVERT.kicad_mod @@ -0,0 +1,42 @@ +(module DB9F_CI_INVERT (layer F.Cu) (tedit 0) + (descr "Connecteur DB9 male encarte") + (tags "CONN DB9") + (fp_text reference REF** (at 0 -9.144) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value DB9F_CI_INVERT (at 0 -2.667) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -8.509 -12.065) (end 8.636 -12.065) (layer F.SilkS) (width 0.15)) + (fp_line (start 9.271 -1.27) (end -9.144 -1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start 9.906 -1.27) (end 9.271 -1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start 9.906 -4.445) (end -9.779 -4.445) (layer F.SilkS) (width 0.15)) + (fp_line (start 15.621 -4.445) (end 9.906 -4.445) (layer F.SilkS) (width 0.15)) + (fp_line (start -15.494 -5.715) (end 15.621 -5.715) (layer F.SilkS) (width 0.15)) + (fp_line (start 8.636 -5.715) (end 8.636 -12.065) (layer F.SilkS) (width 0.15)) + (fp_line (start 15.621 -4.445) (end 15.621 -5.715) (layer F.SilkS) (width 0.15)) + (fp_line (start 9.906 -1.27) (end 9.906 -4.445) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.366 0) (end 9.271 0) (layer F.SilkS) (width 0.15)) + (fp_line (start 9.271 0) (end 9.271 -1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start -8.509 -5.715) (end -8.509 -12.065) (layer F.SilkS) (width 0.15)) + (fp_line (start -9.779 -4.445) (end -15.494 -4.445) (layer F.SilkS) (width 0.15)) + (fp_line (start -15.494 -4.445) (end -15.494 -5.715) (layer F.SilkS) (width 0.15)) + (fp_line (start -9.144 -1.27) (end -9.779 -1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start -9.779 -1.27) (end -9.779 -4.445) (layer F.SilkS) (width 0.15)) + (fp_line (start -7.239 0) (end -9.144 0) (layer F.SilkS) (width 0.15)) + (fp_line (start -9.144 0) (end -9.144 -1.27) (layer F.SilkS) (width 0.15)) + (pad 2 connect rect (at 2.794 2.54) (size 1.778 5.08) (layers B.Cu B.Mask)) + (pad 3 connect rect (at 0 2.54) (size 1.778 5.08) (layers B.Cu B.Mask)) + (pad 4 connect rect (at -2.794 2.54) (size 1.778 5.08) (layers B.Cu B.Mask)) + (pad 5 connect rect (at -5.588 2.54) (size 1.778 5.08) (layers B.Cu B.Mask)) + (pad 1 connect rect (at 5.588 2.54) (size 1.778 5.08) (layers B.Cu B.Mask)) + (pad 9 connect rect (at -4.191 2.54) (size 1.778 5.08) (layers F.Cu F.Mask)) + (pad 8 connect rect (at -1.397 2.54) (size 1.778 5.08) (layers F.Cu F.Mask)) + (pad 7 connect rect (at 1.397 2.54) (size 1.778 5.08) (layers F.Cu F.Mask)) + (pad 6 connect rect (at 4.191 2.54) (size 1.778 5.08) (layers F.Cu F.Mask)) + (model Connect.3dshapes/DB9F_CI_INVERT.wrl + (at (xyz 0 0 -0.033)) + (scale (xyz 1 1 1)) + (rotate (xyz 90 0 0)) + ) +) diff --git a/PCB/.pretty/DB9MC.kicad_mod b/PCB/.pretty/DB9MC.kicad_mod new file mode 100644 index 00000000..33315dd7 --- /dev/null +++ b/PCB/.pretty/DB9MC.kicad_mod @@ -0,0 +1,36 @@ +(module DB9MC (layer F.Cu) (tedit 0) + (descr "Connecteur DB9 male couche") + (tags "CONN DB9") + (fp_text reference REF** (at 1.27 -10.16) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value DB9MC (at 1.27 -3.81) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -16.129 2.286) (end 16.383 2.286) (layer F.SilkS) (width 0.15)) + (fp_line (start 16.383 2.286) (end 16.383 -15.494) (layer F.SilkS) (width 0.15)) + (fp_line (start 16.383 -15.494) (end -16.129 -15.494) (layer F.SilkS) (width 0.15)) + (fp_line (start -16.129 -15.494) (end -16.129 2.286) (layer F.SilkS) (width 0.15)) + (fp_line (start -9.017 -15.494) (end -9.017 -7.874) (layer F.SilkS) (width 0.15)) + (fp_line (start -9.017 -7.874) (end 9.271 -7.874) (layer F.SilkS) (width 0.15)) + (fp_line (start 9.271 -7.874) (end 9.271 -15.494) (layer F.SilkS) (width 0.15)) + (fp_line (start -7.493 -15.494) (end -7.493 -24.13) (layer F.SilkS) (width 0.15)) + (fp_line (start -7.493 -24.13) (end 7.747 -24.13) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.747 -24.13) (end 7.747 -15.494) (layer F.SilkS) (width 0.15)) + (pad "" thru_hole circle (at 12.827 -1.27) (size 3.81 3.81) (drill 3.048) (layers *.Cu *.Mask F.SilkS)) + (pad "" thru_hole circle (at -12.573 -1.27) (size 3.81 3.81) (drill 3.048) (layers *.Cu *.Mask F.SilkS)) + (pad 1 thru_hole rect (at 5.588 1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 2 thru_hole circle (at 2.794 1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 3 thru_hole circle (at 0 1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 4 thru_hole circle (at -2.667 1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 5 thru_hole circle (at -5.461 1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 9 thru_hole circle (at -4.064 -1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 8 thru_hole circle (at -1.27 -1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 7 thru_hole circle (at 1.397 -1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 6 thru_hole circle (at 4.191 -1.27) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (model Connect.3dshapes/DB9MC.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) +) diff --git a/PCB/.pretty/DB9MD.kicad_mod b/PCB/.pretty/DB9MD.kicad_mod new file mode 100644 index 00000000..445e1316 --- /dev/null +++ b/PCB/.pretty/DB9MD.kicad_mod @@ -0,0 +1,30 @@ +(module DB9MD (layer F.Cu) (tedit 0) + (descr "Connecteur DB9 male droit") + (tags "CONN DB9") + (fp_text reference REF** (at -6.604 -4.572) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value DB9MD (at 5.08 -4.572) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -14.986 -3.175) (end -14.986 3.429) (layer F.SilkS) (width 0.15)) + (fp_line (start -14.986 3.429) (end 14.986 3.429) (layer F.SilkS) (width 0.15)) + (fp_line (start 14.986 3.429) (end 14.986 -3.175) (layer F.SilkS) (width 0.15)) + (fp_line (start 14.986 -3.175) (end -14.986 -3.175) (layer F.SilkS) (width 0.15)) + (pad 0 thru_hole circle (at -12.446 0) (size 3.81 3.81) (drill 3.048) (layers *.Cu *.Mask F.SilkS)) + (pad 0 thru_hole circle (at 12.573 0) (size 3.81 3.81) (drill 3.048) (layers *.Cu *.Mask F.SilkS)) + (pad 1 thru_hole rect (at -5.461 -1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 2 thru_hole circle (at -2.667 -1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 3 thru_hole circle (at 0 -1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 4 thru_hole circle (at 2.794 -1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 5 thru_hole circle (at 5.461 -1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 6 thru_hole circle (at -4.064 1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 7 thru_hole circle (at -1.27 1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 8 thru_hole circle (at 1.397 1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 9 thru_hole circle (at 4.191 1.397) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (model Connect.3dshapes/DB9MD.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) +) diff --git a/PCB/.pretty/DB9M_CI.kicad_mod b/PCB/.pretty/DB9M_CI.kicad_mod new file mode 100644 index 00000000..983cacad --- /dev/null +++ b/PCB/.pretty/DB9M_CI.kicad_mod @@ -0,0 +1,42 @@ +(module DB9M_CI (layer F.Cu) (tedit 0) + (descr "Connecteur DB9 male encarte") + (tags "CONN DB9") + (fp_text reference REF** (at 0 -8.382) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value DB9M_CI (at 0 -3.048) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -8.509 -11.938) (end 8.636 -11.938) (layer F.SilkS) (width 0.15)) + (fp_line (start 9.271 -1.143) (end -9.144 -1.143) (layer F.SilkS) (width 0.15)) + (fp_line (start 9.906 -1.143) (end 9.271 -1.143) (layer F.SilkS) (width 0.15)) + (fp_line (start 9.906 -4.318) (end -9.779 -4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start 15.621 -4.318) (end 9.906 -4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start -15.494 -5.588) (end 15.621 -5.588) (layer F.SilkS) (width 0.15)) + (fp_line (start 8.636 -5.588) (end 8.636 -11.938) (layer F.SilkS) (width 0.15)) + (fp_line (start 15.621 -4.318) (end 15.621 -5.588) (layer F.SilkS) (width 0.15)) + (fp_line (start 9.906 -1.143) (end 9.906 -4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.366 0.127) (end 9.271 0.127) (layer F.SilkS) (width 0.15)) + (fp_line (start 9.271 0.127) (end 9.271 -1.143) (layer F.SilkS) (width 0.15)) + (fp_line (start -8.509 -5.588) (end -8.509 -11.938) (layer F.SilkS) (width 0.15)) + (fp_line (start -9.779 -4.318) (end -15.494 -4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start -15.494 -4.318) (end -15.494 -5.588) (layer F.SilkS) (width 0.15)) + (fp_line (start -9.144 -1.143) (end -9.779 -1.143) (layer F.SilkS) (width 0.15)) + (fp_line (start -9.779 -1.143) (end -9.779 -4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start -7.239 0.127) (end -9.144 0.127) (layer F.SilkS) (width 0.15)) + (fp_line (start -9.144 0.127) (end -9.144 -1.143) (layer F.SilkS) (width 0.15)) + (pad 2 connect rect (at 2.794 2.667) (size 1.778 5.08) (layers F.Cu F.Mask)) + (pad 3 connect rect (at 0 2.667) (size 1.778 5.08) (layers F.Cu F.Mask)) + (pad 4 connect rect (at -2.794 2.667) (size 1.778 5.08) (layers F.Cu F.Mask)) + (pad 5 connect rect (at -5.588 2.667) (size 1.778 5.08) (layers F.Cu F.Mask)) + (pad 1 connect rect (at 5.588 2.667) (size 1.778 5.08) (layers F.Cu F.Mask)) + (pad 9 connect rect (at -4.191 2.667) (size 1.778 5.08) (layers B.Cu B.Mask)) + (pad 8 connect rect (at -1.397 2.667) (size 1.778 5.08) (layers B.Cu B.Mask)) + (pad 7 connect rect (at 1.397 2.667) (size 1.778 5.08) (layers B.Cu B.Mask)) + (pad 6 connect rect (at 4.191 2.667) (size 1.778 5.08) (layers B.Cu B.Mask)) + (model Connect.3dshapes/DB9M_CI.wrl + (at (xyz 0 0 -0.033)) + (scale (xyz 1 1 1)) + (rotate (xyz 90 180 0)) + ) +) diff --git a/PCB/.pretty/DB9M_CI_INVERT.kicad_mod b/PCB/.pretty/DB9M_CI_INVERT.kicad_mod new file mode 100644 index 00000000..0f9d6601 --- /dev/null +++ b/PCB/.pretty/DB9M_CI_INVERT.kicad_mod @@ -0,0 +1,42 @@ +(module DB9M_CI_INVERT (layer F.Cu) (tedit 0) + (descr "Connecteur DB9 femelle encarte") + (tags "CONN DB9") + (fp_text reference REF** (at 0 -9.144) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value DB9M_CI_INVERT (at 0 -3.048) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -8.509 -12.065) (end 8.636 -12.065) (layer F.SilkS) (width 0.15)) + (fp_line (start 9.271 -1.27) (end -9.144 -1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start 9.906 -1.27) (end 9.271 -1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start 9.906 -4.445) (end -9.779 -4.445) (layer F.SilkS) (width 0.15)) + (fp_line (start 15.621 -4.445) (end 9.906 -4.445) (layer F.SilkS) (width 0.15)) + (fp_line (start -15.494 -5.715) (end 15.621 -5.715) (layer F.SilkS) (width 0.15)) + (fp_line (start 8.636 -5.715) (end 8.636 -12.065) (layer F.SilkS) (width 0.15)) + (fp_line (start 15.621 -4.445) (end 15.621 -5.715) (layer F.SilkS) (width 0.15)) + (fp_line (start 9.906 -1.27) (end 9.906 -4.445) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.366 0) (end 9.271 0) (layer F.SilkS) (width 0.15)) + (fp_line (start 9.271 0) (end 9.271 -1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start -8.509 -5.715) (end -8.509 -12.065) (layer F.SilkS) (width 0.15)) + (fp_line (start -9.779 -4.445) (end -15.494 -4.445) (layer F.SilkS) (width 0.15)) + (fp_line (start -15.494 -4.445) (end -15.494 -5.715) (layer F.SilkS) (width 0.15)) + (fp_line (start -9.144 -1.27) (end -9.779 -1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start -9.779 -1.27) (end -9.779 -4.445) (layer F.SilkS) (width 0.15)) + (fp_line (start -7.239 0) (end -9.144 0) (layer F.SilkS) (width 0.15)) + (fp_line (start -9.144 0) (end -9.144 -1.27) (layer F.SilkS) (width 0.15)) + (pad 4 connect rect (at 2.794 2.54) (size 1.778 5.08) (layers B.Cu B.Mask)) + (pad 3 connect rect (at 0 2.54) (size 1.778 5.08) (layers B.Cu B.SilkS)) + (pad 2 connect rect (at -2.794 2.54) (size 1.778 5.08) (layers B.Cu B.Mask)) + (pad 1 connect rect (at -5.588 2.54) (size 1.778 5.08) (layers B.Cu F.Mask)) + (pad 5 connect rect (at 5.588 2.54) (size 1.778 5.08) (layers B.Cu B.Mask)) + (pad 6 connect rect (at -4.191 2.54) (size 1.778 5.08) (layers F.Cu F.Mask)) + (pad 7 connect rect (at -1.397 2.54) (size 1.778 5.08) (layers F.Cu F.Mask)) + (pad 8 connect rect (at 1.397 2.54) (size 1.778 5.08) (layers F.Cu F.Mask)) + (pad 9 connect rect (at 4.191 2.54) (size 1.778 5.08) (layers F.Cu F.Mask)) + (model Connect.3dshapes/DB9M_CI_INVERT.wrl + (at (xyz 0 0 -0.033)) + (scale (xyz 1 1 1)) + (rotate (xyz 90 0 0)) + ) +) diff --git a/PCB/.pretty/FMC_LPC_ASP-134604-01.kicad_mod b/PCB/.pretty/FMC_LPC_ASP-134604-01.kicad_mod new file mode 100644 index 00000000..60fceebc --- /dev/null +++ b/PCB/.pretty/FMC_LPC_ASP-134604-01.kicad_mod @@ -0,0 +1,341 @@ +(module FMC_LPC_ASP-134604-01 (layer F.Cu) (tedit 0) + (descr http://www.samtec.com/standards/vita.aspx) + (tags "FMC LPC VITA ") + (attr smd) + (fp_text reference REF** (at 29.32 -1.65 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value FMC_LPC_ASP-134604-01 (at -0.45 -5.78) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -28.5 -7.34) (end -28.5 7.34) (layer F.SilkS) (width 0.15)) + (fp_line (start -28.5 -7.34) (end 28.5 -7.34) (layer F.SilkS) (width 0.15)) + (fp_line (start 28.5 -7.34) (end 28.5 7.34) (layer F.SilkS) (width 0.15)) + (fp_line (start 28.5 7.34) (end -28.5 7.34) (layer F.SilkS) (width 0.15)) + (pad G40 thru_hole circle (at -31.19 2) (size 4 4) (drill 2.7) (layers *.Cu *.Mask) + (clearance 0.1)) + (pad C02 smd circle (at 23.495 -3.175) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad "" np_thru_hole circle (at 27.19 0) (size 1.27 1.27) (drill 1.27) (layers *.Cu *.Mask F.SilkS) + (clearance 0.1)) + (pad G01 smd circle (at 24.765 1.905) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad G02 smd circle (at 23.495 1.905) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad H01 smd circle (at 24.765 3.175) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad H02 smd circle (at 23.495 3.175) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad G07 smd circle (at 17.145 1.905) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad H07 smd circle (at 17.145 3.175) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad H08 smd circle (at 15.875 3.175) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad G08 smd circle (at 15.875 1.905) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad G10 smd circle (at 13.335 1.905) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad H10 smd circle (at 13.335 3.175) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad H09 smd circle (at 14.605 3.175) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad G09 smd circle (at 14.605 1.905) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad G05 smd circle (at 19.685 1.905) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad H05 smd circle (at 19.685 3.175) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad H06 smd circle (at 18.415 3.175) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad G06 smd circle (at 18.415 1.905) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad G04 smd circle (at 20.955 1.905) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad H04 smd circle (at 20.955 3.175) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad H03 smd circle (at 22.225 3.175) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad G03 smd circle (at 22.225 1.905) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad G19 smd circle (at 1.905 1.905) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad H19 smd circle (at 1.905 3.175) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad H20 smd circle (at 0.635 3.175) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad G20 smd circle (at 0.635 1.905) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad G21 smd circle (at -0.635 1.905) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad H21 smd circle (at -0.625 3.175) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad G24 smd circle (at -4.445 1.905) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad H24 smd circle (at -4.445 3.175) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad H25 smd circle (at -5.715 3.175) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad G25 smd circle (at -5.715 1.905) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad G23 smd circle (at -3.175 1.905) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad H23 smd circle (at -3.175 3.175) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad H22 smd circle (at -1.905 3.175) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad G22 smd circle (at -1.905 1.905) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad G15 smd circle (at 6.985 1.905) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad H15 smd circle (at 6.985 3.175) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad H16 smd circle (at 5.715 3.175) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad G16 smd circle (at 5.715 1.905) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad G18 smd circle (at 3.175 1.905) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad H18 smd circle (at 3.175 3.175) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad H17 smd circle (at 4.445 3.175) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad G17 smd circle (at 4.445 1.905) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad G13 smd circle (at 9.525 1.905) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad H13 smd circle (at 9.525 3.175) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad H14 smd circle (at 8.255 3.175) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad G14 smd circle (at 8.255 1.905) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad G12 smd circle (at 10.795 1.905) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad H12 smd circle (at 10.795 3.175) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad H11 smd circle (at 12.065 3.175) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad G11 smd circle (at 12.065 1.905) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad G29 smd circle (at -10.795 1.905) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad H29 smd circle (at -10.795 3.175) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad H30 smd circle (at -12.065 3.175) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad G30 smd circle (at -12.065 1.905) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad G32 smd circle (at -14.605 1.905) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad H32 smd circle (at -14.605 3.175) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad H31 smd circle (at -13.335 3.175) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad G31 smd circle (at -13.335 1.905) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad H28 smd circle (at -9.525 3.175) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad G28 smd circle (at -9.525 1.905) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad G27 smd circle (at -8.255 1.905) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad H27 smd circle (at -8.255 3.175) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad H26 smd circle (at -6.985 3.175) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad G26 smd circle (at -6.985 1.905) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad G35 smd circle (at -18.415 1.905) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad H35 smd circle (at -18.415 3.175) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad H36 smd circle (at -19.685 3.175) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad G36 smd circle (at -19.685 1.905) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad G37 smd circle (at -20.955 1.905) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad H37 smd circle (at -20.955 3.175) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad G40 smd circle (at -24.765 1.905) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad H40 smd circle (at -24.765 3.175) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad G39 smd circle (at -23.495 1.905) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad H39 smd circle (at -23.495 3.175) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad H38 smd circle (at -22.225 3.175) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad G38 smd circle (at -22.225 1.905) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad G34 smd circle (at -17.145 1.905) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad H34 smd circle (at -17.145 3.175) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad H33 smd circle (at -15.875 3.175) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad G33 smd circle (at -15.875 1.905) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad C33 smd circle (at -15.875 -3.175) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad D33 smd circle (at -15.875 -1.905) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad D34 smd circle (at -17.145 -1.905) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad C34 smd circle (at -17.145 -3.175) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad C38 smd circle (at -22.225 -3.175) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad D38 smd circle (at -22.225 -1.905) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad D39 smd circle (at -23.495 -1.905) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad C39 smd circle (at -23.495 -3.175) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad D40 smd circle (at -24.765 -1.905) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad C40 smd circle (at -24.765 -3.175) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad D37 smd circle (at -20.955 -1.905) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad C37 smd circle (at -20.955 -3.175) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad C36 smd circle (at -19.685 -3.175) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad D36 smd circle (at -19.685 -1.905) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad D35 smd circle (at -18.415 -1.905) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad C35 smd circle (at -18.415 -3.175) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad C26 smd circle (at -6.985 -3.175) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad D26 smd circle (at -6.985 -1.905) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad D27 smd circle (at -8.255 -1.905) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad C27 smd circle (at -8.255 -3.175) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad C28 smd circle (at -9.525 -3.175) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad D28 smd circle (at -9.525 -1.905) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad C31 smd circle (at -13.335 -3.175) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad D31 smd circle (at -13.335 -1.905) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad D32 smd circle (at -14.605 -1.905) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad C32 smd circle (at -14.605 -3.175) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad C30 smd circle (at -12.065 -3.175) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad D30 smd circle (at -12.065 -1.905) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad D29 smd circle (at -10.795 -1.905) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad C29 smd circle (at -10.795 -3.175) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad C11 smd circle (at 12.065 -3.175) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad D11 smd circle (at 12.065 -1.905) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad D12 smd circle (at 10.795 -1.905) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad C12 smd circle (at 10.795 -3.175) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad C14 smd circle (at 8.255 -3.175) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad D14 smd circle (at 8.255 -1.905) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad D13 smd circle (at 9.525 -1.905) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad C13 smd circle (at 9.525 -3.175) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad C17 smd circle (at 4.445 -3.175) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad D17 smd circle (at 4.445 -1.905) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad D18 smd circle (at 3.175 -1.905) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad C18 smd circle (at 3.175 -3.175) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad C16 smd circle (at 5.715 -3.175) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad D16 smd circle (at 5.715 -1.905) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad D15 smd circle (at 6.985 -1.905) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad C15 smd circle (at 6.985 -3.175) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad C22 smd circle (at -1.905 -3.175) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad D22 smd circle (at -1.905 -1.905) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad D23 smd circle (at -3.175 -1.905) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad C23 smd circle (at -3.175 -3.175) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad C25 smd circle (at -5.715 -3.175) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad D25 smd circle (at -5.715 -1.905) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad D24 smd circle (at -4.445 -1.905) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad C24 smd circle (at -4.445 -3.175) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad D21 smd circle (at -0.625 -1.905) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad C21 smd circle (at -0.635 -3.175) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad C20 smd circle (at 0.635 -3.175) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad D20 smd circle (at 0.635 -1.905) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad D19 smd circle (at 1.905 -1.905) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad C19 smd circle (at 1.905 -3.175) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad C03 smd circle (at 22.225 -3.175) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad D03 smd circle (at 22.225 -1.905) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad D04 smd circle (at 20.955 -1.905) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad C04 smd circle (at 20.955 -3.175) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad C06 smd circle (at 18.415 -3.175) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad D06 smd circle (at 18.415 -1.905) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad D05 smd circle (at 19.685 -1.905) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad C05 smd circle (at 19.685 -3.175) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad C09 smd circle (at 14.605 -3.175) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad D09 smd circle (at 14.605 -1.905) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad D10 smd circle (at 13.335 -1.905) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad C10 smd circle (at 13.335 -3.175) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad C08 smd circle (at 15.875 -3.175) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad D08 smd circle (at 15.875 -1.905) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad D07 smd circle (at 17.145 -1.905) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad C07 smd circle (at 17.145 -3.175) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad D02 smd circle (at 23.495 -1.905) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad D01 smd circle (at 24.765 -1.905) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask) + (clearance 0.1)) + (pad C01 smd circle (at 24.765 -3.175) (size 0.64 0.64) (layers F.Cu F.Paste F.Mask)) + (pad "" np_thru_hole circle (at -27.19 3.05) (size 1.27 1.27) (drill 1.27) (layers *.Cu *.Mask F.SilkS) + (clearance 0.1)) + (pad C01 thru_hole circle (at 31.19 2) (size 4 4) (drill 2.7) (layers *.Cu *.Mask)) +) diff --git a/PCB/.pretty/GS2.kicad_mod b/PCB/.pretty/GS2.kicad_mod new file mode 100644 index 00000000..81383b0a --- /dev/null +++ b/PCB/.pretty/GS2.kicad_mod @@ -0,0 +1,16 @@ +(module GS2 (layer F.Cu) (tedit 0) + (descr "Pontet Goute de soudure") + (attr virtual) + (fp_text reference REF** (at 1.778 0 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value GS2 (at 1.524 0 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -0.889 -1.27) (end -0.889 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.889 1.27) (end 0.889 -1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.889 1.27) (end -0.889 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.889 -1.27) (end 0.889 -1.27) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at 0 -0.635) (size 1.27 0.9652) (layers F.Cu F.Paste F.Mask)) + (pad 2 smd rect (at 0 0.635) (size 1.27 0.9652) (layers F.Cu F.Paste F.Mask)) +) diff --git a/PCB/.pretty/GS3.kicad_mod b/PCB/.pretty/GS3.kicad_mod new file mode 100644 index 00000000..c0eef0c4 --- /dev/null +++ b/PCB/.pretty/GS3.kicad_mod @@ -0,0 +1,17 @@ +(module GS3 (layer F.Cu) (tedit 0) + (descr "Pontet Goute de soudure") + (attr virtual) + (fp_text reference REF** (at 1.524 0 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value GS3 (at 1.524 0 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -0.889 -1.905) (end -0.889 1.905) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.889 1.905) (end 0.889 1.905) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.889 1.905) (end 0.889 -1.905) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.889 -1.905) (end 0.889 -1.905) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at 0 -1.27) (size 1.27 0.9652) (layers F.Cu F.Paste F.Mask)) + (pad 2 smd rect (at 0 0) (size 1.27 0.9652) (layers F.Cu F.Paste F.Mask)) + (pad 3 smd rect (at 0 1.27) (size 1.27 0.9652) (layers F.Cu F.Paste F.Mask)) +) diff --git a/PCB/.pretty/GS_6x2.kicad_mod b/PCB/.pretty/GS_6x2.kicad_mod new file mode 100644 index 00000000..6b08f7c1 --- /dev/null +++ b/PCB/.pretty/GS_6x2.kicad_mod @@ -0,0 +1,26 @@ +(module GS_6x2 (layer F.Cu) (tedit 0) + (descr "Double rangee de contacts 2 x 8 pins") + (tags CONN) + (fp_text reference REF** (at -2.15646 -2.02946) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value GS_6x2 (at 3.937 -2.032) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -5.715 -1.27) (end 6.35 -1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start 6.35 -1.27) (end 6.35 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start 6.35 1.27) (end -5.715 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start -5.715 1.27) (end -5.715 -1.27) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -4.445 0.635) (size 1.27 1.016) (layers F.Cu F.Paste F.Mask)) + (pad 2 smd rect (at -4.445 -0.635) (size 1.27 1.016) (layers F.Cu F.Paste F.Mask)) + (pad 3 smd rect (at -2.54 0.635) (size 1.27 1.016) (layers F.Cu F.Paste F.Mask)) + (pad 4 smd rect (at -2.54 -0.635) (size 1.27 1.016) (layers F.Cu F.Paste F.Mask)) + (pad 5 smd rect (at -0.635 0.635) (size 1.27 1.016) (layers F.Cu F.Paste F.Mask)) + (pad 6 smd rect (at -0.635 -0.635) (size 1.27 1.016) (layers F.Cu F.Paste F.Mask)) + (pad 7 smd rect (at 1.27 0.635) (size 1.27 1.016) (layers F.Cu F.Paste F.Mask)) + (pad 8 smd rect (at 1.27 -0.635) (size 1.27 1.016) (layers F.Cu F.Paste F.Mask)) + (pad 9 smd rect (at 3.175 0.635) (size 1.27 1.016) (layers F.Cu F.Paste F.Mask)) + (pad 10 smd rect (at 3.175 -0.635) (size 1.27 1.016) (layers F.Cu F.Paste F.Mask)) + (pad 11 smd rect (at 5.08 0.635) (size 1.27 1.016) (layers F.Cu F.Paste F.Mask)) + (pad 12 smd rect (at 5.08 -0.635) (size 1.27 1.016) (layers F.Cu F.Paste F.Mask)) +) diff --git a/PCB/.pretty/GS_8x2.kicad_mod b/PCB/.pretty/GS_8x2.kicad_mod new file mode 100644 index 00000000..835938f8 --- /dev/null +++ b/PCB/.pretty/GS_8x2.kicad_mod @@ -0,0 +1,30 @@ +(module GS_8x2 (layer F.Cu) (tedit 0) + (descr "Double rangee de contacts 2 x 8 pins") + (tags CONN) + (fp_text reference REF** (at -3.048 -1.905) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value GS_8x2 (at 3.937 -1.905) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -7.62 -1.27) (end 8.255 -1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start 8.255 -1.27) (end 8.255 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start 8.255 1.27) (end -7.62 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start -7.62 1.27) (end -7.62 -1.27) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -6.35 0.635) (size 1.27 1.016) (layers F.Cu F.Paste F.Mask)) + (pad 2 smd rect (at -6.35 -0.635) (size 1.27 1.016) (layers F.Cu F.Paste F.Mask)) + (pad 3 smd rect (at -4.445 0.635) (size 1.27 1.016) (layers F.Cu F.Paste F.Mask)) + (pad 4 smd rect (at -4.445 -0.635) (size 1.27 1.016) (layers F.Cu F.Paste F.Mask)) + (pad 5 smd rect (at -2.54 0.635) (size 1.27 1.016) (layers F.Cu F.Paste F.Mask)) + (pad 6 smd rect (at -2.54 -0.635) (size 1.27 1.016) (layers F.Cu F.Paste F.Mask)) + (pad 7 smd rect (at -0.635 0.635) (size 1.27 1.016) (layers F.Cu F.Paste F.Mask)) + (pad 8 smd rect (at -0.635 -0.635) (size 1.27 1.016) (layers F.Cu F.Paste F.Mask)) + (pad 9 smd rect (at 1.27 0.635) (size 1.27 1.016) (layers F.Cu F.Paste F.Mask)) + (pad 10 smd rect (at 1.27 -0.635) (size 1.27 1.016) (layers F.Cu F.Paste F.Mask)) + (pad 11 smd rect (at 3.175 0.635) (size 1.27 1.016) (layers F.Cu F.Paste F.Mask)) + (pad 12 smd rect (at 3.175 -0.635) (size 1.27 1.016) (layers F.Cu F.Paste F.Mask)) + (pad 13 smd rect (at 5.08 0.635) (size 1.27 1.016) (layers F.Cu F.Paste F.Mask)) + (pad 14 smd rect (at 5.08 -0.635) (size 1.27 1.016) (layers F.Cu F.Paste F.Mask)) + (pad 15 smd rect (at 6.985 0.635) (size 1.27 1.016) (layers F.Cu F.Paste F.Mask)) + (pad 16 smd rect (at 6.985 -0.635) (size 1.27 1.016) (layers F.Cu F.Paste F.Mask)) +) diff --git a/PCB/.pretty/GS_9x2.kicad_mod b/PCB/.pretty/GS_9x2.kicad_mod new file mode 100644 index 00000000..f8e9fde7 --- /dev/null +++ b/PCB/.pretty/GS_9x2.kicad_mod @@ -0,0 +1,35 @@ +(module GS_9x2 (layer F.Cu) (tedit 0) + (descr "Double rangee de contacts 2 x 8 pins") + (tags CONN) + (fp_text reference REF** (at -3.556 -2.032) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value GS_9x2 (at 3.937 -2.15646) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -8.89 0.635) (end -8.255 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start 6.985 -1.27) (end 8.89 -1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start 8.89 -1.27) (end 8.89 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start 8.89 1.27) (end 6.985 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start -8.89 -1.27) (end 6.985 -1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start 6.985 1.27) (end -8.89 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start -8.89 1.27) (end -8.89 -1.27) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -7.62 0.635) (size 1.27 1.016) (layers F.Cu F.Paste F.Mask)) + (pad 2 smd rect (at -7.62 -0.635) (size 1.27 1.016) (layers F.Cu F.Paste F.Mask)) + (pad 3 smd rect (at -5.715 0.635) (size 1.27 1.016) (layers F.Cu F.Paste F.Mask)) + (pad 4 smd rect (at -5.715 -0.635) (size 1.27 1.016) (layers F.Cu F.Paste F.Mask)) + (pad 5 smd rect (at -3.81 0.635) (size 1.27 1.016) (layers F.Cu F.Paste F.Mask)) + (pad 6 smd rect (at -3.81 -0.635) (size 1.27 1.016) (layers F.Cu F.Paste F.Mask)) + (pad 7 smd rect (at -1.905 0.635) (size 1.27 1.016) (layers F.Cu F.Paste F.Mask)) + (pad 8 smd rect (at -1.905 -0.635) (size 1.27 1.016) (layers F.Cu F.Paste F.Mask)) + (pad 9 smd rect (at 0 0.635) (size 1.27 1.016) (layers F.Cu F.Paste F.Mask)) + (pad 10 smd rect (at 0 -0.635) (size 1.27 1.016) (layers F.Cu F.Paste F.Mask)) + (pad 11 smd rect (at 1.905 0.635) (size 1.27 1.016) (layers F.Cu F.Paste F.Mask)) + (pad 12 smd rect (at 1.905 -0.635) (size 1.27 1.016) (layers F.Cu F.Paste F.Mask)) + (pad 13 smd rect (at 3.81 0.635) (size 1.27 1.016) (layers F.Cu F.Paste F.Mask)) + (pad 14 smd rect (at 3.81 -0.635) (size 1.27 1.016) (layers F.Cu F.Paste F.Mask)) + (pad 15 smd rect (at 5.715 0.635) (size 1.27 1.016) (layers F.Cu F.Paste F.Mask)) + (pad 16 smd rect (at 5.715 -0.635) (size 1.27 1.016) (layers F.Cu F.Paste F.Mask)) + (pad 17 smd rect (at 7.62 0.635) (size 1.27 1.016) (layers F.Cu F.Paste F.Mask)) + (pad 18 smd rect (at 7.62 -0.635) (size 1.27 1.016) (layers F.Cu F.Paste F.Mask)) +) diff --git a/PCB/.pretty/GTK2400-H2.kicad_mod b/PCB/.pretty/GTK2400-H2.kicad_mod new file mode 100644 index 00000000..0be2e78c --- /dev/null +++ b/PCB/.pretty/GTK2400-H2.kicad_mod @@ -0,0 +1,19 @@ +(module GTK2400-H2 (layer F.Cu) (tedit 0) + (fp_text reference REF** (at -11.1125 -2.794) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value GTK2400-H2 (at 0 3.556) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.9685 0) (end 1.9685 -4.8895) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.9685 0) (end -1.9685 -4.8895) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.445 -7.62) (end -4.445 -16.51) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.445 -16.51) (end 4.445 -16.51) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.445 -16.51) (end 4.445 -7.62) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.445 -5.08) (end -4.445 -7.62) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.445 -7.62) (end 4.445 -7.62) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.445 -7.62) (end 4.445 -5.08) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.445 -5.08) (end -4.445 -5.08) (layer F.SilkS) (width 0.15)) + (pad 2 thru_hole rect (at 1.9685 0) (size 2.49936 2.49936) (drill 1.80086) (layers *.Cu *.Mask F.SilkS)) + (pad 1 thru_hole rect (at -1.9685 0) (size 2.49936 2.49936) (drill 1.80086) (layers *.Cu *.Mask F.SilkS)) +) diff --git a/PCB/.pretty/GTK2400-V2.kicad_mod b/PCB/.pretty/GTK2400-V2.kicad_mod new file mode 100644 index 00000000..b93b7702 --- /dev/null +++ b/PCB/.pretty/GTK2400-V2.kicad_mod @@ -0,0 +1,18 @@ +(module GTK2400-V2 (layer F.Cu) (tedit 0) + (fp_text reference REF** (at -6.35 0 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value GTK2400-V2 (at 0 7.62) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -4.445 2.54) (end 4.445 2.54) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.445 0) (end -4.445 -5.715) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.445 -5.715) (end -4.445 -6.35) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.445 -6.35) (end 4.445 -6.35) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.445 -6.35) (end 4.445 0) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.445 0) (end 4.445 5.08) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.445 5.08) (end -4.445 5.08) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.445 5.08) (end -4.445 0) (layer F.SilkS) (width 0.15)) + (pad 2 thru_hole rect (at 1.9685 0) (size 2.49936 2.49936) (drill 1.80086) (layers *.Cu *.Mask F.SilkS)) + (pad 1 thru_hole rect (at -1.9685 0) (size 2.49936 2.49936) (drill 1.80086) (layers *.Cu *.Mask F.SilkS)) +) diff --git a/PCB/.pretty/GoldTek_SCP20GR11.kicad_mod b/PCB/.pretty/GoldTek_SCP20GR11.kicad_mod new file mode 100644 index 00000000..1f58a389 --- /dev/null +++ b/PCB/.pretty/GoldTek_SCP20GR11.kicad_mod @@ -0,0 +1,71 @@ +(module GoldTek_SCP20GR11 (layer F.Cu) (tedit 556C2970) + (descr "GoldTek SCP20GR11") + (tags "CONN GoldTek SCP20GR11") + (fp_text reference REF** (at 3.81 -13.335) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value GoldTek_SCP20GR11 (at 24.765 -13.335) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 34.5 1.5) (end -11.65 1.5) (layer F.CrtYd) (width 0.05)) + (fp_line (start -11.65 1.5) (end -11.65 -27.65) (layer F.CrtYd) (width 0.05)) + (fp_line (start -11.65 -27.65) (end 34.5 -27.65) (layer F.CrtYd) (width 0.05)) + (fp_line (start 34.5 -27.65) (end 34.5 1.5) (layer F.CrtYd) (width 0.05)) + (fp_line (start 28.702 -2.413) (end 28.702 1.143) (layer F.SilkS) (width 0.15)) + (fp_line (start 26.924 -0.635) (end 30.48 -0.635) (layer F.SilkS) (width 0.15)) + (fp_line (start -5.842 -2.413) (end -5.842 1.143) (layer F.SilkS) (width 0.15)) + (fp_line (start -7.62 -0.635) (end -4.064 -0.635) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.635 -11.43) (end 0.635 -11.43) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.635 -11.43) (end 0 -10.795) (layer F.SilkS) (width 0.15)) + (fp_line (start 0 -10.795) (end -0.635 -11.43) (layer F.SilkS) (width 0.15)) + (fp_line (start 33.02 -15.24) (end 33.02 -26.67) (layer F.SilkS) (width 0.15)) + (fp_line (start 33.02 -26.67) (end 32.385 -27.305) (layer F.SilkS) (width 0.15)) + (fp_line (start 32.385 -27.305) (end 31.75 -27.305) (layer F.SilkS) (width 0.15)) + (fp_line (start 31.75 -27.305) (end 26.035 -25.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 26.035 -25.4) (end 26.035 -23.495) (layer F.SilkS) (width 0.15)) + (fp_line (start 26.035 -23.495) (end 27.305 -23.495) (layer F.SilkS) (width 0.15)) + (fp_line (start 27.305 -23.495) (end 27.94 -24.13) (layer F.SilkS) (width 0.15)) + (fp_line (start 27.94 -24.13) (end 28.575 -24.13) (layer F.SilkS) (width 0.15)) + (fp_line (start 28.575 -24.13) (end 28.575 -15.24) (layer F.SilkS) (width 0.15)) + (fp_line (start -10.16 -15.24) (end -10.16 -26.67) (layer F.SilkS) (width 0.15)) + (fp_line (start -10.16 -26.67) (end -9.525 -27.305) (layer F.SilkS) (width 0.15)) + (fp_line (start -9.525 -27.305) (end -8.89 -27.305) (layer F.SilkS) (width 0.15)) + (fp_line (start -8.89 -27.305) (end -3.175 -25.4) (layer F.SilkS) (width 0.15)) + (fp_line (start -3.175 -25.4) (end -3.175 -23.495) (layer F.SilkS) (width 0.15)) + (fp_line (start -3.175 -23.495) (end -4.445 -23.495) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.445 -23.495) (end -5.08 -24.13) (layer F.SilkS) (width 0.15)) + (fp_line (start -5.08 -24.13) (end -5.715 -24.13) (layer F.SilkS) (width 0.15)) + (fp_line (start -5.715 -24.13) (end -5.715 -15.24) (layer F.SilkS) (width 0.15)) + (fp_line (start -11.43 1.27) (end -11.43 -8.89) (layer F.SilkS) (width 0.15)) + (fp_line (start -11.43 -8.89) (end -10.795 -15.24) (layer F.SilkS) (width 0.15)) + (fp_line (start -10.795 -15.24) (end -5.08 -15.24) (layer F.SilkS) (width 0.15)) + (fp_line (start -5.08 -15.24) (end -5.08 -12.065) (layer F.SilkS) (width 0.15)) + (fp_line (start 34.29 1.27) (end 34.29 -8.255) (layer F.SilkS) (width 0.15)) + (fp_line (start 34.29 -8.255) (end 33.655 -15.24) (layer F.SilkS) (width 0.15)) + (fp_line (start 33.655 -15.24) (end 27.94 -15.24) (layer F.SilkS) (width 0.15)) + (fp_line (start 27.94 -15.24) (end 27.94 -12.065) (layer F.SilkS) (width 0.15)) + (fp_line (start 27.94 -12.065) (end -5.08 -12.065) (layer F.SilkS) (width 0.15)) + (fp_line (start -11.43 1.27) (end 34.29 1.27) (layer F.SilkS) (width 0.15)) + (fp_circle (center -5.842 -0.635) (end -4.445 -0.635) (layer F.SilkS) (width 0.15)) + (fp_circle (center 28.702 -0.635) (end 30.099 -0.635) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole rect (at 0 0) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 2 thru_hole circle (at 0 -2.54) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 3 thru_hole circle (at 2.54 0) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 4 thru_hole circle (at 2.54 -2.54) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 5 thru_hole circle (at 5.08 0) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 6 thru_hole circle (at 5.08 -2.54) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 7 thru_hole circle (at 7.62 0) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 8 thru_hole circle (at 7.62 -2.54) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 9 thru_hole circle (at 10.16 0) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 10 thru_hole circle (at 10.16 -2.54) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 11 thru_hole circle (at 12.7 0) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 12 thru_hole circle (at 12.7 -2.54) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 13 thru_hole circle (at 15.24 0) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 14 thru_hole circle (at 15.24 -2.54) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 15 thru_hole circle (at 17.78 0) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 16 thru_hole circle (at 17.78 -2.54) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 17 thru_hole circle (at 20.32 0) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 18 thru_hole circle (at 20.32 -2.54) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 19 thru_hole circle (at 22.86 0) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 20 thru_hole circle (at 22.86 -2.54) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) +) diff --git a/PCB/.pretty/GoldTek_SCP20GS11.kicad_mod b/PCB/.pretty/GoldTek_SCP20GS11.kicad_mod new file mode 100644 index 00000000..0c65d93c --- /dev/null +++ b/PCB/.pretty/GoldTek_SCP20GS11.kicad_mod @@ -0,0 +1,75 @@ +(module GoldTek_SCP20GS11 (layer F.Cu) (tedit 556C2993) + (descr "GoldTek SCP20GS11") + (tags "CONN GoldTek SCP20GS11") + (fp_text reference REF** (at -1.27 -6.985) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value GoldTek_SCP20GS11 (at 20.955 -6.985) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -11.15 -5.8) (end 34 -5.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 34 -5.8) (end 34 3.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start 34 3.3) (end -11.15 3.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start -11.15 3.3) (end -11.15 -5.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.635 1.905) (end 0 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start 0 1.27) (end 0.635 1.905) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.635 1.905) (end -0.635 1.905) (layer F.SilkS) (width 0.15)) + (fp_line (start -3.175 -3.175) (end -2.54 -3.175) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.54 -3.175) (end -2.54 0.635) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.54 0.635) (end -3.175 0.635) (layer F.SilkS) (width 0.15)) + (fp_line (start -3.81 -3.175) (end -3.175 -3.175) (layer F.SilkS) (width 0.15)) + (fp_line (start -3.175 -3.175) (end -3.175 0.635) (layer F.SilkS) (width 0.15)) + (fp_line (start -3.175 0.635) (end -3.81 0.635) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.445 -4.445) (end -4.445 1.905) (layer F.SilkS) (width 0.15)) + (fp_line (start 26.67 -3.175) (end 26.035 -3.175) (layer F.SilkS) (width 0.15)) + (fp_line (start 26.035 -3.175) (end 26.035 0.635) (layer F.SilkS) (width 0.15)) + (fp_line (start 26.035 0.635) (end 26.67 0.635) (layer F.SilkS) (width 0.15)) + (fp_line (start 26.67 0.635) (end 26.035 0.635) (layer F.SilkS) (width 0.15)) + (fp_line (start 26.035 0.635) (end 25.4 0.635) (layer F.SilkS) (width 0.15)) + (fp_line (start 25.4 0.635) (end 25.4 -3.175) (layer F.SilkS) (width 0.15)) + (fp_line (start 25.4 -3.175) (end 26.035 -3.175) (layer F.SilkS) (width 0.15)) + (fp_line (start 27.305 -4.445) (end 27.305 1.905) (layer F.SilkS) (width 0.15)) + (fp_line (start -9.525 -3.175) (end -9.525 0.635) (layer F.SilkS) (width 0.15)) + (fp_line (start 32.385 -3.175) (end 32.385 0.635) (layer F.SilkS) (width 0.15)) + (fp_line (start -7.62 0.635) (end -10.795 0.635) (layer F.SilkS) (width 0.15)) + (fp_line (start -7.62 -3.175) (end -10.795 -3.175) (layer F.SilkS) (width 0.15)) + (fp_line (start 30.48 0.635) (end 33.655 0.635) (layer F.SilkS) (width 0.15)) + (fp_line (start 30.48 -3.175) (end 33.655 -3.175) (layer F.SilkS) (width 0.15)) + (fp_line (start -3.81 -4.445) (end -7.62 -4.445) (layer F.SilkS) (width 0.15)) + (fp_line (start -7.62 -4.445) (end -7.62 1.905) (layer F.SilkS) (width 0.15)) + (fp_line (start -7.62 1.905) (end -3.81 1.905) (layer F.SilkS) (width 0.15)) + (fp_line (start 26.67 -4.445) (end 30.48 -4.445) (layer F.SilkS) (width 0.15)) + (fp_line (start 30.48 -4.445) (end 30.48 1.905) (layer F.SilkS) (width 0.15)) + (fp_line (start 30.48 1.905) (end 26.67 1.905) (layer F.SilkS) (width 0.15)) + (fp_line (start 9.652 3.048) (end 9.652 2.286) (layer F.SilkS) (width 0.15)) + (fp_line (start 9.652 2.286) (end -3.81 2.286) (layer F.SilkS) (width 0.15)) + (fp_line (start -3.81 2.286) (end -3.81 -4.826) (layer F.SilkS) (width 0.15)) + (fp_line (start -3.81 -4.826) (end 26.67 -4.826) (layer F.SilkS) (width 0.15)) + (fp_line (start 26.67 -4.826) (end 26.67 2.286) (layer F.SilkS) (width 0.15)) + (fp_line (start 26.67 2.286) (end 13.208 2.286) (layer F.SilkS) (width 0.15)) + (fp_line (start 13.208 2.286) (end 13.208 3.048) (layer F.SilkS) (width 0.15)) + (fp_line (start -10.922 -5.588) (end -10.922 3.048) (layer F.SilkS) (width 0.15)) + (fp_line (start -10.922 3.048) (end 33.782 3.048) (layer F.SilkS) (width 0.15)) + (fp_line (start 33.782 3.048) (end 33.782 -5.588) (layer F.SilkS) (width 0.15)) + (fp_line (start 33.782 -5.588) (end -10.922 -5.588) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole rect (at 0 0) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 2 thru_hole circle (at 0 -2.54) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 3 thru_hole circle (at 2.54 0) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 4 thru_hole circle (at 2.54 -2.54) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 5 thru_hole circle (at 5.08 0) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 6 thru_hole circle (at 5.08 -2.54) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 7 thru_hole circle (at 7.62 0) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 8 thru_hole circle (at 7.62 -2.54) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 9 thru_hole circle (at 10.16 0) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 10 thru_hole circle (at 10.16 -2.54) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 11 thru_hole circle (at 12.7 0) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 12 thru_hole circle (at 12.7 -2.54) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 13 thru_hole circle (at 15.24 0) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 14 thru_hole circle (at 15.24 -2.54) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 15 thru_hole circle (at 17.78 0) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 16 thru_hole circle (at 17.78 -2.54) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 17 thru_hole circle (at 20.32 0) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 18 thru_hole circle (at 20.32 -2.54) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 19 thru_hole circle (at 22.86 0) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 20 thru_hole circle (at 22.86 -2.54) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) +) diff --git a/PCB/.pretty/HE10-10C.kicad_mod b/PCB/.pretty/HE10-10C.kicad_mod new file mode 100644 index 00000000..2b5ff121 --- /dev/null +++ b/PCB/.pretty/HE10-10C.kicad_mod @@ -0,0 +1,44 @@ +(module HE10-10C (layer F.Cu) (tedit 0) + (descr "Connecteur HE10 10 contacts couche") + (tags "CONN HE10") + (fp_text reference REF** (at -1.524 5.08 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value HE10-10C (at -2.032 8.128) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -8.636 -2.54) (end -8.636 2.032) (layer F.SilkS) (width 0.15)) + (fp_line (start -8.636 2.032) (end -9.906 3.302) (layer F.SilkS) (width 0.15)) + (fp_line (start -9.906 3.302) (end -11.938 3.302) (layer F.SilkS) (width 0.15)) + (fp_line (start -11.938 3.302) (end -13.208 2.032) (layer F.SilkS) (width 0.15)) + (fp_line (start -13.208 2.032) (end -13.208 -2.54) (layer F.SilkS) (width 0.15)) + (fp_line (start 13.208 -2.54) (end 13.208 2.032) (layer F.SilkS) (width 0.15)) + (fp_line (start 13.208 2.032) (end 11.938 3.302) (layer F.SilkS) (width 0.15)) + (fp_line (start 11.938 3.302) (end 9.652 3.302) (layer F.SilkS) (width 0.15)) + (fp_line (start 9.652 3.302) (end 8.382 2.032) (layer F.SilkS) (width 0.15)) + (fp_line (start 8.382 2.032) (end 8.382 -2.54) (layer F.SilkS) (width 0.15)) + (fp_line (start 15.24 -2.54) (end 15.24 4.445) (layer F.SilkS) (width 0.15)) + (fp_line (start 15.24 4.445) (end 12.065 14.605) (layer F.SilkS) (width 0.15)) + (fp_line (start 12.065 14.605) (end 8.255 14.605) (layer F.SilkS) (width 0.15)) + (fp_line (start 15.24 -2.54) (end -15.24 -2.54) (layer F.SilkS) (width 0.15)) + (fp_line (start -15.24 -2.54) (end -15.24 4.445) (layer F.SilkS) (width 0.15)) + (fp_line (start -15.24 4.445) (end -12.065 14.605) (layer F.SilkS) (width 0.15)) + (fp_line (start -12.065 14.605) (end -8.255 14.605) (layer F.SilkS) (width 0.15)) + (fp_line (start -8.255 14.605) (end -6.35 10.16) (layer F.SilkS) (width 0.15)) + (fp_line (start -6.35 10.16) (end 6.35 10.16) (layer F.SilkS) (width 0.15)) + (fp_line (start 8.255 14.605) (end 6.35 10.16) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.699 10.16) (end 3.683 8.128) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.683 8.128) (end 2.667 10.16) (layer F.SilkS) (width 0.15)) + (pad 0 thru_hole circle (at -10.922 0.508) (size 3.048 3.048) (drill 2.54) (layers *.Cu *.Mask F.SilkS)) + (pad 0 thru_hole circle (at 10.922 0.508) (size 3.048 3.048) (drill 2.54) (layers *.Cu *.Mask F.SilkS)) + (pad 1 thru_hole rect (at 5.08 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 2 thru_hole circle (at 5.08 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 3 thru_hole circle (at 2.54 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 4 thru_hole circle (at 2.54 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 5 thru_hole circle (at 0 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 6 thru_hole circle (at 0 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 7 thru_hole circle (at -2.54 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 8 thru_hole circle (at -2.54 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 9 thru_hole circle (at -5.08 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 10 thru_hole circle (at -5.08 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) +) diff --git a/PCB/.pretty/HE10_20D.kicad_mod b/PCB/.pretty/HE10_20D.kicad_mod new file mode 100644 index 00000000..59febe55 --- /dev/null +++ b/PCB/.pretty/HE10_20D.kicad_mod @@ -0,0 +1,51 @@ +(module HE10_20D (layer F.Cu) (tedit 0) + (descr "Connecteur HE10 20 contacts droit") + (tags "CONN HE10") + (fp_text reference REF** (at -12.7 -5.715) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value HE10_20D (at 9.525 -5.715) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.778 4.318) (end -1.778 3.556) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.778 3.556) (end -15.24 3.556) (layer F.SilkS) (width 0.15)) + (fp_line (start -15.24 3.556) (end -15.24 -3.556) (layer F.SilkS) (width 0.15)) + (fp_line (start -15.24 -3.556) (end 15.24 -3.556) (layer F.SilkS) (width 0.15)) + (fp_line (start 15.24 -3.556) (end 15.24 3.556) (layer F.SilkS) (width 0.15)) + (fp_line (start 15.24 3.556) (end 1.778 3.556) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.778 3.556) (end 1.778 4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start -12.954 1.27) (end -14.224 0.508) (layer F.SilkS) (width 0.15)) + (fp_line (start -14.224 0.508) (end -14.224 2.032) (layer F.SilkS) (width 0.15)) + (fp_line (start -14.224 2.032) (end -12.954 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start -22.352 -4.318) (end -22.352 4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start -22.352 4.318) (end 22.352 4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start 22.352 4.318) (end 22.352 -4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start 22.352 -4.318) (end -22.352 -4.318) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole rect (at -11.43 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 2 thru_hole circle (at -11.43 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 3 thru_hole circle (at -8.89 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 4 thru_hole circle (at -8.89 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 5 thru_hole circle (at -6.35 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 6 thru_hole circle (at -6.35 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 7 thru_hole circle (at -3.81 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 8 thru_hole circle (at -3.81 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 9 thru_hole circle (at -1.27 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 10 thru_hole circle (at -1.27 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 11 thru_hole circle (at 1.27 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 12 thru_hole circle (at 1.27 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 13 thru_hole circle (at 3.81 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 14 thru_hole circle (at 3.81 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 15 thru_hole circle (at 6.35 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 16 thru_hole circle (at 6.35 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 17 thru_hole circle (at 8.89 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 18 thru_hole circle (at 8.89 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 19 thru_hole circle (at 11.43 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 20 thru_hole circle (at 11.43 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad "" thru_hole circle (at -20.32 0.254) (size 5.461 5.461) (drill 2.6924) (layers *.Cu *.Mask F.SilkS)) + (pad "" thru_hole circle (at 20.32 0.254) (size 5.461 5.461) (drill 2.6924) (layers *.Cu *.Mask F.SilkS)) + (model Connect.3dshapes/HE10_20D.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) +) diff --git a/PCB/.pretty/HE10_26D.kicad_mod b/PCB/.pretty/HE10_26D.kicad_mod new file mode 100644 index 00000000..47460537 --- /dev/null +++ b/PCB/.pretty/HE10_26D.kicad_mod @@ -0,0 +1,52 @@ +(module HE10_26D (layer F.Cu) (tedit 0) + (descr "Connecteur HE10 26 contacts droit") + (tags "CONN HE10") + (fp_text reference REF** (at -15.24 -5.715) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value HE10_26D (at 13.335 -5.715) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -16.764 1.27) (end -18.034 0.508) (layer F.SilkS) (width 0.15)) + (fp_line (start -18.034 0.508) (end -18.034 2.032) (layer F.SilkS) (width 0.15)) + (fp_line (start -18.034 2.032) (end -16.764 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start -26.162 -4.318) (end -26.162 4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start -26.162 4.318) (end 26.162 4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start 26.162 4.318) (end 26.162 -4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start 26.162 -4.318) (end -26.162 -4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.778 4.318) (end -1.778 3.556) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.778 3.556) (end -19.05 3.556) (layer F.SilkS) (width 0.15)) + (fp_line (start -19.05 3.556) (end -19.05 -3.556) (layer F.SilkS) (width 0.15)) + (fp_line (start -19.05 -3.556) (end 19.05 -3.556) (layer F.SilkS) (width 0.15)) + (fp_line (start 19.05 -3.556) (end 19.05 3.556) (layer F.SilkS) (width 0.15)) + (fp_line (start 19.05 3.556) (end 1.778 3.556) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.778 3.556) (end 1.778 4.318) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole rect (at -15.24 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 2 thru_hole circle (at -15.24 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 3 thru_hole circle (at -12.7 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 4 thru_hole circle (at -12.7 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 5 thru_hole circle (at -10.16 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 6 thru_hole circle (at -10.16 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 7 thru_hole circle (at -7.62 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 8 thru_hole circle (at -7.62 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 9 thru_hole circle (at -5.08 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 10 thru_hole circle (at -5.08 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 11 thru_hole circle (at -2.54 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 12 thru_hole circle (at -2.54 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 13 thru_hole circle (at 0 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 14 thru_hole circle (at 0 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 15 thru_hole circle (at 2.54 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 16 thru_hole circle (at 2.54 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 17 thru_hole circle (at 5.08 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 18 thru_hole circle (at 5.08 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 19 thru_hole circle (at 7.62 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 20 thru_hole circle (at 7.62 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad "" thru_hole circle (at -24.13 0.254) (size 5.461 5.461) (drill 2.6924) (layers *.Cu *.Mask F.SilkS)) + (pad 21 thru_hole circle (at 10.16 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 22 thru_hole circle (at 10.16 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 23 thru_hole circle (at 12.7 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 24 thru_hole circle (at 12.7 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 25 thru_hole circle (at 15.24 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 26 thru_hole circle (at 15.24 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad "" thru_hole circle (at 24.13 0.254) (size 5.461 5.461) (drill 2.6924) (layers *.Cu *.Mask F.SilkS)) +) diff --git a/PCB/.pretty/HE10_34D.kicad_mod b/PCB/.pretty/HE10_34D.kicad_mod new file mode 100644 index 00000000..56bbcaf5 --- /dev/null +++ b/PCB/.pretty/HE10_34D.kicad_mod @@ -0,0 +1,60 @@ +(module HE10_34D (layer F.Cu) (tedit 0) + (descr "Connecteur HE10 34 contacts droit") + (tags "CONN HE10") + (fp_text reference REF** (at -8.89 -5.842) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value HE10_34D (at 9.144 -5.842) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -21.844 1.27) (end -23.114 0.508) (layer F.SilkS) (width 0.15)) + (fp_line (start -23.114 0.508) (end -23.114 2.032) (layer F.SilkS) (width 0.15)) + (fp_line (start -23.114 2.032) (end -21.844 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start -31.242 -4.318) (end -31.242 4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start -31.242 4.318) (end 31.242 4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start 31.242 4.318) (end 31.242 -4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start 31.242 -4.318) (end -31.242 -4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.778 4.318) (end -1.778 3.556) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.778 3.556) (end -24.13 3.556) (layer F.SilkS) (width 0.15)) + (fp_line (start -24.13 3.556) (end -24.13 -3.556) (layer F.SilkS) (width 0.15)) + (fp_line (start -24.13 -3.556) (end 24.13 -3.556) (layer F.SilkS) (width 0.15)) + (fp_line (start 24.13 -3.556) (end 24.13 3.556) (layer F.SilkS) (width 0.15)) + (fp_line (start 24.13 3.556) (end 1.778 3.556) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.778 3.556) (end 1.778 4.318) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole rect (at -20.32 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 2 thru_hole circle (at -20.32 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 3 thru_hole circle (at -17.78 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 4 thru_hole circle (at -17.78 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 5 thru_hole circle (at -15.24 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 6 thru_hole circle (at -15.24 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 7 thru_hole circle (at -12.7 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 8 thru_hole circle (at -12.7 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 9 thru_hole circle (at -10.16 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 10 thru_hole circle (at -10.16 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 11 thru_hole circle (at -7.62 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 12 thru_hole circle (at -7.62 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 13 thru_hole circle (at -5.08 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 14 thru_hole circle (at -5.08 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 15 thru_hole circle (at -2.54 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 16 thru_hole circle (at -2.54 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 17 thru_hole circle (at 0 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 18 thru_hole circle (at 0 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 19 thru_hole circle (at 2.54 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 20 thru_hole circle (at 2.54 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad "" thru_hole circle (at -29.21 0.254) (size 5.461 5.461) (drill 2.6924) (layers *.Cu *.Mask F.SilkS)) + (pad 21 thru_hole circle (at 5.08 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 22 thru_hole circle (at 5.08 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 23 thru_hole circle (at 7.62 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 24 thru_hole circle (at 7.62 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 25 thru_hole circle (at 10.16 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 26 thru_hole circle (at 10.16 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 27 thru_hole circle (at 12.7 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 28 thru_hole circle (at 12.7 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 29 thru_hole circle (at 15.24 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 30 thru_hole circle (at 15.24 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 31 thru_hole circle (at 17.78 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 32 thru_hole circle (at 17.78 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 33 thru_hole circle (at 20.32 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 34 thru_hole circle (at 20.32 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad "" thru_hole circle (at 29.21 0.254) (size 5.461 5.461) (drill 2.6924) (layers *.Cu *.Mask F.SilkS)) +) diff --git a/PCB/.pretty/HE10_40D.kicad_mod b/PCB/.pretty/HE10_40D.kicad_mod new file mode 100644 index 00000000..3ec96818 --- /dev/null +++ b/PCB/.pretty/HE10_40D.kicad_mod @@ -0,0 +1,66 @@ +(module HE10_40D (layer F.Cu) (tedit 0) + (descr "Connecteur HE10 40 contacts droit") + (tags "CONN HE10") + (fp_text reference REF** (at -17.145 -5.715) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value HE10_40D (at 17.78 -5.715) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -25.654 1.27) (end -26.924 0.508) (layer F.SilkS) (width 0.15)) + (fp_line (start -26.924 0.508) (end -26.924 2.032) (layer F.SilkS) (width 0.15)) + (fp_line (start -26.924 2.032) (end -25.654 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start -35.052 -4.318) (end -35.052 4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start -35.052 4.318) (end 35.052 4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start 35.052 4.318) (end 35.052 -4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start 35.052 -4.318) (end -35.052 -4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.778 4.318) (end -1.778 3.556) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.778 3.556) (end -27.94 3.556) (layer F.SilkS) (width 0.15)) + (fp_line (start -27.94 3.556) (end -27.94 -3.556) (layer F.SilkS) (width 0.15)) + (fp_line (start -27.94 -3.556) (end 27.94 -3.556) (layer F.SilkS) (width 0.15)) + (fp_line (start 27.94 -3.556) (end 27.94 3.556) (layer F.SilkS) (width 0.15)) + (fp_line (start 27.94 3.556) (end 1.778 3.556) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.778 3.556) (end 1.778 4.318) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole rect (at -24.13 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 2 thru_hole circle (at -24.13 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 3 thru_hole circle (at -21.59 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 4 thru_hole circle (at -21.59 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 5 thru_hole circle (at -19.05 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 6 thru_hole circle (at -19.05 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 7 thru_hole circle (at -16.51 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 8 thru_hole circle (at -16.51 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 9 thru_hole circle (at -13.97 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 10 thru_hole circle (at -13.97 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 11 thru_hole circle (at -11.43 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 12 thru_hole circle (at -11.43 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 13 thru_hole circle (at -8.89 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 14 thru_hole circle (at -8.89 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 15 thru_hole circle (at -6.35 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 16 thru_hole circle (at -6.35 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 17 thru_hole circle (at -3.81 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 18 thru_hole circle (at -3.81 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 19 thru_hole circle (at -1.27 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 20 thru_hole circle (at -1.27 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad "" thru_hole circle (at -33.02 0.254) (size 5.461 5.461) (drill 2.6924) (layers *.Cu *.Mask F.SilkS)) + (pad 21 thru_hole circle (at 1.27 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 22 thru_hole circle (at 1.27 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 23 thru_hole circle (at 3.81 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 24 thru_hole circle (at 3.81 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 25 thru_hole circle (at 6.35 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 26 thru_hole circle (at 6.35 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 27 thru_hole circle (at 8.89 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 28 thru_hole circle (at 8.89 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 29 thru_hole circle (at 11.43 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 30 thru_hole circle (at 11.43 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 31 thru_hole circle (at 13.97 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 32 thru_hole circle (at 13.97 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 33 thru_hole circle (at 16.51 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 34 thru_hole circle (at 16.51 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 35 thru_hole circle (at 19.05 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 36 thru_hole circle (at 19.05 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 37 thru_hole circle (at 21.59 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 38 thru_hole circle (at 21.59 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 39 thru_hole circle (at 24.13 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 40 thru_hole circle (at 24.13 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad "" thru_hole circle (at 33.02 0.254) (size 5.461 5.461) (drill 2.6924) (layers *.Cu *.Mask F.SilkS)) +) diff --git a/PCB/.pretty/HE10_50D.kicad_mod b/PCB/.pretty/HE10_50D.kicad_mod new file mode 100644 index 00000000..8ac9487f --- /dev/null +++ b/PCB/.pretty/HE10_50D.kicad_mod @@ -0,0 +1,76 @@ +(module HE10_50D (layer F.Cu) (tedit 0) + (descr "Connecteur HE10 50 contacts droit") + (tags "CONN HE10") + (fp_text reference REF** (at -8.128 -5.842) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value HE10_50D (at 11.43 -6.096) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -32.004 1.27) (end -33.274 0.508) (layer F.SilkS) (width 0.15)) + (fp_line (start -33.274 0.508) (end -33.274 2.032) (layer F.SilkS) (width 0.15)) + (fp_line (start -33.274 2.032) (end -32.004 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start -41.402 -4.318) (end -41.402 4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start -41.402 4.318) (end 41.402 4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start 41.402 4.318) (end 41.402 -4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start 41.402 -4.318) (end -41.402 -4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.778 4.318) (end -1.778 3.556) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.778 3.556) (end -34.29 3.556) (layer F.SilkS) (width 0.15)) + (fp_line (start -34.29 3.556) (end -34.29 -3.556) (layer F.SilkS) (width 0.15)) + (fp_line (start -34.29 -3.556) (end 34.29 -3.556) (layer F.SilkS) (width 0.15)) + (fp_line (start 34.29 -3.556) (end 34.29 3.556) (layer F.SilkS) (width 0.15)) + (fp_line (start 34.29 3.556) (end 1.778 3.556) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.778 3.556) (end 1.778 4.318) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole rect (at -30.48 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 2 thru_hole circle (at -30.48 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 3 thru_hole circle (at -27.94 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 4 thru_hole circle (at -27.94 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 5 thru_hole circle (at -25.4 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 6 thru_hole circle (at -25.4 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 7 thru_hole circle (at -22.86 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 8 thru_hole circle (at -22.86 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 9 thru_hole circle (at -20.32 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 10 thru_hole circle (at -20.32 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 11 thru_hole circle (at -17.78 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 12 thru_hole circle (at -17.78 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 13 thru_hole circle (at -15.24 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 14 thru_hole circle (at -15.24 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 15 thru_hole circle (at -12.7 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 16 thru_hole circle (at -12.7 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 17 thru_hole circle (at -10.16 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 18 thru_hole circle (at -10.16 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 19 thru_hole circle (at -7.62 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 20 thru_hole circle (at -7.62 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad "" thru_hole circle (at -39.37 0.254) (size 5.461 5.461) (drill 2.6924) (layers *.Cu *.Mask F.SilkS)) + (pad 21 thru_hole circle (at -5.08 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 22 thru_hole circle (at -5.08 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 23 thru_hole circle (at -2.54 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 24 thru_hole circle (at -2.54 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 25 thru_hole circle (at 0 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 26 thru_hole circle (at 0 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 27 thru_hole circle (at 2.54 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 28 thru_hole circle (at 2.54 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 29 thru_hole circle (at 5.08 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 30 thru_hole circle (at 5.08 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 31 thru_hole circle (at 7.62 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 32 thru_hole circle (at 7.62 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 33 thru_hole circle (at 10.16 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 34 thru_hole circle (at 10.16 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 35 thru_hole circle (at 12.7 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 36 thru_hole circle (at 12.7 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 37 thru_hole circle (at 15.24 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 38 thru_hole circle (at 15.24 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 39 thru_hole circle (at 17.78 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 40 thru_hole circle (at 17.78 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 41 thru_hole circle (at 20.32 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 42 thru_hole circle (at 20.32 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 43 thru_hole circle (at 22.86 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 44 thru_hole circle (at 22.86 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 45 thru_hole circle (at 25.4 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 46 thru_hole circle (at 25.4 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 47 thru_hole circle (at 27.94 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 48 thru_hole circle (at 27.94 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 49 thru_hole circle (at 30.48 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 50 thru_hole circle (at 30.48 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad "" thru_hole circle (at 39.37 0.254) (size 5.461 5.461) (drill 2.6924) (layers *.Cu *.Mask F.SilkS)) +) diff --git a/PCB/.pretty/HE10_60D.kicad_mod b/PCB/.pretty/HE10_60D.kicad_mod new file mode 100644 index 00000000..f58ffb68 --- /dev/null +++ b/PCB/.pretty/HE10_60D.kicad_mod @@ -0,0 +1,86 @@ +(module HE10_60D (layer F.Cu) (tedit 0) + (descr "Connecteur HE10 60 contacts droit") + (tags "CONN HE10") + (fp_text reference REF** (at -16.51 -6.35) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value HE10_60D (at 10.795 -6.35) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -38.354 1.016) (end -39.624 0.254) (layer F.SilkS) (width 0.15)) + (fp_line (start -39.624 0.254) (end -39.624 1.778) (layer F.SilkS) (width 0.15)) + (fp_line (start -39.624 1.778) (end -38.354 1.016) (layer F.SilkS) (width 0.15)) + (fp_line (start -47.752 -4.572) (end -47.752 4.064) (layer F.SilkS) (width 0.15)) + (fp_line (start -47.752 4.064) (end 47.752 4.064) (layer F.SilkS) (width 0.15)) + (fp_line (start 47.752 4.064) (end 47.752 -4.572) (layer F.SilkS) (width 0.15)) + (fp_line (start 47.752 -4.572) (end -47.752 -4.572) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.778 4.064) (end -1.778 3.302) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.778 3.302) (end -40.64 3.302) (layer F.SilkS) (width 0.15)) + (fp_line (start -40.64 3.302) (end -40.64 -3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start -40.64 -3.81) (end 40.64 -3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start 40.64 -3.81) (end 40.64 3.302) (layer F.SilkS) (width 0.15)) + (fp_line (start 40.64 3.302) (end 1.778 3.302) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.778 3.302) (end 1.778 4.064) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole rect (at -36.83 1.016) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 2 thru_hole circle (at -36.83 -1.524) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 3 thru_hole circle (at -34.29 1.016) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 4 thru_hole circle (at -34.29 -1.524) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 5 thru_hole circle (at -31.75 1.016) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 6 thru_hole circle (at -31.75 -1.524) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 7 thru_hole circle (at -29.21 1.016) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 8 thru_hole circle (at -29.21 -1.524) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 9 thru_hole circle (at -26.67 1.016) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 10 thru_hole circle (at -26.67 -1.524) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 11 thru_hole circle (at -24.13 1.016) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 12 thru_hole circle (at -24.13 -1.524) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 13 thru_hole circle (at -21.59 1.016) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 14 thru_hole circle (at -21.59 -1.524) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 15 thru_hole circle (at -19.05 1.016) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 16 thru_hole circle (at -19.05 -1.524) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 17 thru_hole circle (at -16.51 1.016) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 18 thru_hole circle (at -16.51 -1.524) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 19 thru_hole circle (at -13.97 1.016) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 20 thru_hole circle (at -13.97 -1.524) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad "" thru_hole circle (at -45.72 0) (size 5.461 5.461) (drill 2.6924) (layers *.Cu *.Mask F.SilkS)) + (pad 21 thru_hole circle (at -11.43 1.016) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 22 thru_hole circle (at -11.43 -1.524) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 23 thru_hole circle (at -8.89 1.016) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 24 thru_hole circle (at -8.89 -1.524) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 25 thru_hole circle (at -6.35 1.016) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 26 thru_hole circle (at -6.35 -1.524) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 27 thru_hole circle (at -3.81 1.016) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 28 thru_hole circle (at -3.81 -1.524) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 29 thru_hole circle (at -1.27 1.016) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 30 thru_hole circle (at -1.27 -1.524) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 31 thru_hole circle (at 1.27 1.016) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 32 thru_hole circle (at 1.27 -1.524) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 33 thru_hole circle (at 3.81 1.016) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 34 thru_hole circle (at 3.81 -1.524) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 35 thru_hole circle (at 6.35 1.016) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 36 thru_hole circle (at 6.35 -1.524) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 37 thru_hole circle (at 8.89 1.016) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 38 thru_hole circle (at 8.89 -1.524) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 39 thru_hole circle (at 11.43 1.016) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 40 thru_hole circle (at 11.43 -1.524) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 41 thru_hole circle (at 13.97 1.016) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 42 thru_hole circle (at 13.97 -1.524) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 43 thru_hole circle (at 16.51 1.016) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 44 thru_hole circle (at 16.51 -1.524) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 45 thru_hole circle (at 19.05 1.016) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 46 thru_hole circle (at 19.05 -1.524) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 47 thru_hole circle (at 21.59 1.016) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 48 thru_hole circle (at 21.59 -1.524) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 49 thru_hole circle (at 24.13 1.016) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 50 thru_hole circle (at 24.13 -1.524) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 51 thru_hole circle (at 26.67 1.016) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 52 thru_hole circle (at 26.67 -1.524) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 53 thru_hole circle (at 29.21 1.016) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 54 thru_hole circle (at 29.21 -1.524) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 55 thru_hole circle (at 31.75 1.016) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 56 thru_hole circle (at 31.75 -1.524) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 57 thru_hole circle (at 34.29 1.016) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 58 thru_hole circle (at 34.29 -1.524) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 59 thru_hole circle (at 36.83 1.016) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 60 thru_hole circle (at 36.83 -1.524) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad "" thru_hole circle (at 45.72 0) (size 5.461 5.461) (drill 2.6924) (layers *.Cu *.Mask F.SilkS)) +) diff --git a/PCB/.pretty/HE10_64D.kicad_mod b/PCB/.pretty/HE10_64D.kicad_mod new file mode 100644 index 00000000..af5435fb --- /dev/null +++ b/PCB/.pretty/HE10_64D.kicad_mod @@ -0,0 +1,90 @@ +(module HE10_64D (layer F.Cu) (tedit 0) + (descr "Connecteur HE10 64 contacts droit") + (tags "CONN HE10") + (fp_text reference REF** (at -10.922 -5.842) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value HE10_64D (at 5.334 -5.842) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -40.894 1.27) (end -42.164 0.508) (layer F.SilkS) (width 0.15)) + (fp_line (start -42.164 0.508) (end -42.164 2.032) (layer F.SilkS) (width 0.15)) + (fp_line (start -42.164 2.032) (end -40.894 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start -50.292 -4.318) (end -50.292 4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start -50.292 4.318) (end 50.292 4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start 50.292 4.318) (end 50.292 -4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start 50.292 -4.318) (end -50.292 -4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.778 4.318) (end -1.778 3.556) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.778 3.556) (end -43.18 3.556) (layer F.SilkS) (width 0.15)) + (fp_line (start -43.18 3.556) (end -43.18 -3.556) (layer F.SilkS) (width 0.15)) + (fp_line (start -43.18 -3.556) (end 43.18 -3.556) (layer F.SilkS) (width 0.15)) + (fp_line (start 43.18 -3.556) (end 43.18 3.556) (layer F.SilkS) (width 0.15)) + (fp_line (start 43.18 3.556) (end 1.778 3.556) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.778 3.556) (end 1.778 4.318) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole rect (at -39.37 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 2 thru_hole circle (at -39.37 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 3 thru_hole circle (at -36.83 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 4 thru_hole circle (at -36.83 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 5 thru_hole circle (at -34.29 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 6 thru_hole circle (at -34.29 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 7 thru_hole circle (at -31.75 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 8 thru_hole circle (at -31.75 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 9 thru_hole circle (at -29.21 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 10 thru_hole circle (at -29.21 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 11 thru_hole circle (at -26.67 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 12 thru_hole circle (at -26.67 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 13 thru_hole circle (at -24.13 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 14 thru_hole circle (at -24.13 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 15 thru_hole circle (at -21.59 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 16 thru_hole circle (at -21.59 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 17 thru_hole circle (at -19.05 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 18 thru_hole circle (at -19.05 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 19 thru_hole circle (at -16.51 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 20 thru_hole circle (at -16.51 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad "" thru_hole circle (at -48.26 0.254) (size 5.461 5.461) (drill 2.6924) (layers *.Cu *.Mask F.SilkS)) + (pad 21 thru_hole circle (at -13.97 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 22 thru_hole circle (at -13.97 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 23 thru_hole circle (at -11.43 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 24 thru_hole circle (at -11.43 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 25 thru_hole circle (at -8.89 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 26 thru_hole circle (at -8.89 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 27 thru_hole circle (at -6.35 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 28 thru_hole circle (at -6.35 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 29 thru_hole circle (at -3.81 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 30 thru_hole circle (at -3.81 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 31 thru_hole circle (at -1.27 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 32 thru_hole circle (at -1.27 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 33 thru_hole circle (at 1.27 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 34 thru_hole circle (at 1.27 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 35 thru_hole circle (at 3.81 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 36 thru_hole circle (at 3.81 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 37 thru_hole circle (at 6.35 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 38 thru_hole circle (at 6.35 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 39 thru_hole circle (at 8.89 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 40 thru_hole circle (at 8.89 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 41 thru_hole circle (at 11.43 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 42 thru_hole circle (at 11.43 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 43 thru_hole circle (at 13.97 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 44 thru_hole circle (at 13.97 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 45 thru_hole circle (at 16.51 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 46 thru_hole circle (at 16.51 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 47 thru_hole circle (at 19.05 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 48 thru_hole circle (at 19.05 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 49 thru_hole circle (at 21.59 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 50 thru_hole circle (at 21.59 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 51 thru_hole circle (at 24.13 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 52 thru_hole circle (at 24.13 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 53 thru_hole circle (at 26.67 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 54 thru_hole circle (at 26.67 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 55 thru_hole circle (at 29.21 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 56 thru_hole circle (at 29.21 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 57 thru_hole circle (at 31.75 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 58 thru_hole circle (at 31.75 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 59 thru_hole circle (at 34.29 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 60 thru_hole circle (at 34.29 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 61 thru_hole circle (at 36.83 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 62 thru_hole circle (at 36.83 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 63 thru_hole circle (at 39.37 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 64 thru_hole circle (at 39.37 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad "" thru_hole circle (at 48.26 0.254) (size 5.461 5.461) (drill 2.6924) (layers *.Cu *.Mask F.SilkS)) +) diff --git a/PCB/.pretty/JACK_ALIM.kicad_mod b/PCB/.pretty/JACK_ALIM.kicad_mod new file mode 100644 index 00000000..d7e77a58 --- /dev/null +++ b/PCB/.pretty/JACK_ALIM.kicad_mod @@ -0,0 +1,25 @@ +(module JACK_ALIM (layer F.Cu) (tedit 0) + (descr "module 1 pin (ou trou mecanique de percage)") + (tags "CONN JACK") + (fp_text reference REF** (at 0.254 -5.588) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value JACK_ALIM (at -5.08 5.588) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -7.112 -4.318) (end -7.874 -4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start -7.874 -4.318) (end -7.874 4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start -7.874 4.318) (end -7.112 4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.064 -4.318) (end -4.064 4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start 5.588 -4.318) (end 5.588 4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start -7.112 4.318) (end 5.588 4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start -7.112 -4.318) (end 5.588 -4.318) (layer F.SilkS) (width 0.15)) + (pad 2 thru_hole circle (at 0 0) (size 4.8006 4.8006) (drill oval 1.016 2.54) (layers *.Cu *.Mask F.SilkS)) + (pad 1 thru_hole rect (at 6.096 0) (size 4.8006 4.8006) (drill oval 1.016 2.54) (layers *.Cu *.Mask F.SilkS)) + (pad 3 thru_hole circle (at 2.286 5.08) (size 4.8006 4.8006) (drill oval 2.54 1.016) (layers *.Cu *.Mask F.SilkS)) + (model Connect.3dshapes/JACK_ALIM.wrl + (at (xyz 0 0 0)) + (scale (xyz 0.8 0.8 0.8)) + (rotate (xyz 0 0 0)) + ) +) diff --git a/PCB/.pretty/JWT_Vertical_A3963-RM3.96mm-2.kicad_mod b/PCB/.pretty/JWT_Vertical_A3963-RM3.96mm-2.kicad_mod new file mode 100644 index 00000000..08bc6e94 --- /dev/null +++ b/PCB/.pretty/JWT_Vertical_A3963-RM3.96mm-2.kicad_mod @@ -0,0 +1,31 @@ +(module JWT_Vertical_A3963-RM3.96mm-2 (layer F.Cu) (tedit 556C2ADD) + (descr "JWT A3963, 3.96mm pitch Pin head connector") + (tags "JWT A3963 pinhead") + (fp_text reference REF** (at 1.905 -5.08) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value JWT_Vertical_A3963-RM3.96mm-2 (at 1.905 6.35) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -2.5 -3.55) (end 6.35 -3.55) (layer F.CrtYd) (width 0.05)) + (fp_line (start 6.35 -3.55) (end 6.35 5.05) (layer F.CrtYd) (width 0.05)) + (fp_line (start 6.35 5.05) (end -2.5 5.05) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.5 5.05) (end -2.5 -3.55) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.286 4.826) (end 5.969 4.826) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.524 4.826) (end -2.159 4.826) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.524 4.826) (end 1.524 4.572) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.524 4.572) (end 2.286 4.572) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.286 4.572) (end 2.286 4.826) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.889 -2.159) (end 4.699 -2.159) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.889 -3.048) (end 4.699 -3.048) (layer F.SilkS) (width 0.15)) + (fp_line (start 5.969 -1.905) (end 5.969 0) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.159 -1.905) (end -2.159 0) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.889 -3.302) (end 4.699 -3.302) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.699 -1.905) (end 4.699 -3.302) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.889 -1.905) (end -0.889 -3.302) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.159 -1.905) (end 5.969 -1.905) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.159 0) (end -2.159 4.826) (layer F.SilkS) (width 0.15)) + (fp_line (start 5.969 4.826) (end 5.969 0) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole rect (at 0 0) (size 3 3) (drill 1.75) (layers *.Cu *.Mask F.SilkS)) + (pad 2 thru_hole circle (at 3.885 0) (size 3 3) (drill 1.75) (layers *.Cu *.Mask F.SilkS)) +) diff --git a/PCB/.pretty/NMJ6HCD2.kicad_mod b/PCB/.pretty/NMJ6HCD2.kicad_mod new file mode 100644 index 00000000..45d58d6d --- /dev/null +++ b/PCB/.pretty/NMJ6HCD2.kicad_mod @@ -0,0 +1,41 @@ +(module NMJ6HCD2 (layer F.Cu) (tedit 551E8E62) + (descr "NMJ6HCD2, TRS 1/4\" jack connector, stereo, switched") + (tags "NMJ6HCD2 TRS stereo jack connector") + (fp_text reference REF** (at 0.889 18.415) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value NMJ6HCD2 (at 7.9153 -8.12) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.75 -7.25) (end -1.75 20.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 20.15) (end 17.95 20.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start 17.95 20.15) (end 17.95 -7.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 -7.25) (end 17.95 -7.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 12.2555 16.637) (end 12.2555 19.857) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.7465 19.8755) (end 12.2325 19.8755) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.7465 16.637) (end 3.7465 19.857) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.159 -7) (end 2.159 -4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.159 -7) (end 13.859 -7) (layer F.SilkS) (width 0.15)) + (fp_line (start 13.859 -7) (end 13.859 -4) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.135 16.6095) (end 17.15 16.6095) (layer F.SilkS) (width 0.15)) + (fp_line (start 17.15 16.6095) (end 17.15 14.1605) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.135 16.6095) (end -1.135 14.1605) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.135 -1.45) (end -1.135 -4) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.135 4.8895) (end -1.135 1.4605) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.135 11.2395) (end -1.135 7.8105) (layer F.SilkS) (width 0.15)) + (fp_line (start 17.15 7.8105) (end 17.15 11.2395) (layer F.SilkS) (width 0.15)) + (fp_line (start 17.15 1.4605) (end 17.15 4.8895) (layer F.SilkS) (width 0.15)) + (fp_line (start 17.15 -4) (end 17.15 -1.45) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.135 -4) (end 17.15 -4) (layer F.SilkS) (width 0.15)) + (pad 6 thru_hole circle (at 16.23 6.35) (size 3 3) (drill 1.5) (layers *.Cu *.Mask)) + (pad 5 thru_hole circle (at 16.23 12.7) (size 3 3) (drill 1.5) (layers *.Cu *.Mask)) + (pad 4 thru_hole circle (at 16.23 0) (size 3 3) (drill 1.5) (layers *.Cu *.Mask)) + (pad 3 thru_hole circle (at 0 6.35) (size 3 3) (drill 1.5) (layers *.Cu *.Mask)) + (pad 2 thru_hole circle (at 0 12.7) (size 3 3) (drill 1.5) (layers *.Cu *.Mask)) + (pad 1 thru_hole circle (at 0 0) (size 3 3) (drill 1.5) (layers *.Cu *.Mask)) + (model Connect.3dshapes/NMJ6HCD2.wrl + (at (xyz 0.32 0.165 0)) + (scale (xyz 0.39 0.39 0.39)) + (rotate (xyz -90 0 180)) + ) +) diff --git a/PCB/.pretty/PCI-EXPRESS.kicad_mod b/PCB/.pretty/PCI-EXPRESS.kicad_mod new file mode 100644 index 00000000..d370bcac --- /dev/null +++ b/PCB/.pretty/PCI-EXPRESS.kicad_mod @@ -0,0 +1,89 @@ +(module PCI-EXPRESS (layer F.Cu) (tedit 545FBBB8) + (fp_text reference REF** (at -4.445 -3.81) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value PCI-EXPRESS (at 6.985 -3.81) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.09982 -2.49936) (end 1.09982 -5.69976) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.09982 -5.69976) (end 2.90068 -5.69976) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.90068 -5.69976) (end 2.90068 -2.49936) (layer F.SilkS) (width 0.15)) + (fp_line (start -10.20064 -2.49936) (end 1.09982 -2.49936) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.09982 -2.49936) (end 1.09982 3.29946) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.09982 3.29946) (end -10.20064 3.29946) (layer F.SilkS) (width 0.15)) + (fp_line (start -10.20064 3.29946) (end -10.20064 -2.49936) (layer F.SilkS) (width 0.15)) + (fp_line (start 10.20064 -2.49936) (end 2.90068 -2.49936) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.90068 3.29946) (end 10.20064 3.29946) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.90068 -2.49936) (end 2.90068 3.29946) (layer F.SilkS) (width 0.15)) + (fp_line (start 10.20064 -2.49936) (end 10.20064 3.29946) (layer F.SilkS) (width 0.15)) + (pad "" connect circle (at 9.4996 2.30124) (size 0.65024 0.65024) (layers F.Cu F.Mask)) + (pad B1 connect rect (at -9.4996 0) (size 0.65024 4.59994) (layers F.Cu F.Mask)) + (pad B2 connect rect (at -8.49884 0) (size 0.65024 4.59994) (layers F.Cu F.Mask)) + (pad B3 connect rect (at -7.50062 0) (size 0.65024 4.59994) (layers F.Cu F.Mask)) + (pad B4 connect rect (at -6.49986 0) (size 0.65024 4.59994) (layers F.Cu F.Mask)) + (pad B5 connect rect (at -5.4991 0) (size 0.65024 4.59994) (layers F.Cu F.Mask)) + (pad B6 connect rect (at -4.50088 0) (size 0.65024 4.59994) (layers F.Cu F.Mask)) + (pad B7 connect rect (at -3.50012 0) (size 0.65024 4.59994) (layers F.Cu F.Mask)) + (pad B8 connect rect (at -2.49936 0) (size 0.65024 4.59994) (layers F.Cu F.Mask)) + (pad B9 connect rect (at -1.50114 0) (size 0.65024 4.59994) (layers F.Cu F.Mask)) + (pad B10 connect rect (at -0.50038 0) (size 0.65024 4.59994) (layers F.Cu F.Mask)) + (pad B11 connect rect (at 0.50038 0) (size 0.65024 4.59994) (layers F.Cu F.Mask)) + (pad B14 connect rect (at 5.4991 0) (size 0.65024 4.59994) (layers F.Cu F.Mask)) + (pad B15 connect rect (at 6.49986 0) (size 0.65024 4.59994) (layers F.Cu F.Mask)) + (pad B16 connect rect (at 7.50062 0) (size 0.65024 4.59994) (layers F.Cu F.Mask)) + (pad B17 connect rect (at 8.49884 -0.50038) (size 0.65024 3.59918) (layers F.Cu F.Mask)) + (pad B18 connect rect (at 9.4996 0) (size 0.65024 4.59994) (layers F.Cu F.Mask)) + (pad B12 connect rect (at 3.50012 0) (size 0.65024 4.59994) (layers F.Cu F.Mask)) + (pad B13 connect rect (at 4.50088 0) (size 0.65024 4.59994) (layers F.Cu F.Mask)) + (pad A1 connect rect (at -9.4996 -0.50038) (size 0.65024 3.59918) (layers B.Cu B.Mask)) + (pad A2 connect rect (at -8.49884 0) (size 0.65024 4.59994) (layers B.Cu B.Mask)) + (pad A3 connect rect (at -7.50062 0) (size 0.65024 4.59994) (layers B.Cu B.Mask)) + (pad A4 connect rect (at -6.49986 0) (size 0.65024 4.59994) (layers B.Cu B.Mask)) + (pad A5 connect rect (at -5.4991 0) (size 0.65024 4.59994) (layers B.Cu B.Mask)) + (pad A6 connect rect (at -4.50088 0) (size 0.65024 4.59994) (layers B.Cu B.Mask)) + (pad A7 connect rect (at -3.50012 0) (size 0.65024 4.59994) (layers B.Cu B.Mask)) + (pad A8 connect rect (at -2.49936 0) (size 0.65024 4.59994) (layers B.Cu B.Mask)) + (pad A9 connect rect (at -1.50114 0) (size 0.65024 4.59994) (layers B.Cu B.Mask)) + (pad A10 connect rect (at -0.50038 0) (size 0.65024 4.59994) (layers B.Cu B.Mask)) + (pad A11 connect rect (at 0.50038 0) (size 0.65024 4.59994) (layers B.Cu B.Mask)) + (pad A14 connect rect (at 5.4991 0) (size 0.65024 4.59994) (layers B.Cu B.Mask)) + (pad A15 connect rect (at 6.49986 0) (size 0.65024 4.59994) (layers B.Cu B.Mask)) + (pad A16 connect rect (at 7.50062 0) (size 0.65024 4.59994) (layers B.Cu B.Mask)) + (pad A17 connect rect (at 8.49884 0) (size 0.65024 4.59994) (layers B.Cu B.Mask)) + (pad A18 connect rect (at 9.4996 0) (size 0.65024 4.59994) (layers B.Cu B.Mask)) + (pad A12 connect rect (at 3.50012 0) (size 0.65024 4.59994) (layers B.Cu B.Mask)) + (pad A13 connect rect (at 4.50088 0) (size 0.65024 4.59994) (layers B.Cu B.Mask)) + (pad "" connect circle (at -7.50062 2.30124) (size 0.65024 0.65024) (layers F.Cu F.Mask)) + (pad "" connect circle (at -6.49986 2.30124) (size 0.65024 0.65024) (layers F.Cu F.Mask)) + (pad "" connect circle (at -5.4991 2.30124) (size 0.65024 0.65024) (layers F.Cu F.Mask)) + (pad "" connect circle (at -4.50088 2.30124) (size 0.65024 0.65024) (layers F.Cu F.Mask)) + (pad "" connect circle (at -3.50012 2.30124) (size 0.65024 0.65024) (layers F.Cu F.Mask)) + (pad "" connect circle (at -2.49936 2.30124) (size 0.65024 0.65024) (layers F.Cu F.Mask)) + (pad "" connect circle (at -1.50114 2.30124) (size 0.65024 0.65024) (layers F.Cu F.Mask)) + (pad "" connect circle (at -0.50038 2.30124) (size 0.65024 0.65024) (layers F.Cu F.Mask)) + (pad "" connect circle (at 0.50038 2.30124) (size 0.65024 0.65024) (layers F.Cu F.Mask)) + (pad "" connect circle (at -9.4996 2.30124) (size 0.65024 0.65024) (layers F.Cu F.Mask)) + (pad "" connect circle (at 3.50012 2.30124) (size 0.65024 0.65024) (layers F.Cu F.Mask)) + (pad "" connect circle (at 4.50088 2.30124) (size 0.65024 0.65024) (layers F.Cu F.Mask)) + (pad "" connect circle (at 5.4991 2.30124) (size 0.65024 0.65024) (layers F.Cu F.Mask)) + (pad "" connect circle (at 6.49986 2.30124) (size 0.65024 0.65024) (layers F.Cu F.Mask)) + (pad "" connect circle (at 7.50062 2.30124) (size 0.65024 0.65024) (layers F.Cu F.Mask)) + (pad "" connect circle (at -8.49884 2.30124) (size 0.65024 0.65024) (layers F.Cu F.Mask)) + (pad "" connect oval (at -6.49986 2.30124 90) (size 0.65024 0.65024) (layers B.Cu B.Mask)) + (pad "" connect oval (at -5.4991 2.30124 90) (size 0.65024 0.65024) (layers B.Cu B.Mask)) + (pad "" connect oval (at -4.50088 2.30124 90) (size 0.65024 0.65024) (layers B.Cu B.Mask)) + (pad "" connect oval (at -3.50012 2.30124 90) (size 0.65024 0.65024) (layers B.Cu B.Mask)) + (pad "" connect oval (at -2.49936 2.30124 90) (size 0.65024 0.65024) (layers B.Cu B.Mask)) + (pad "" connect oval (at -1.50114 2.30124 90) (size 0.65024 0.65024) (layers B.Cu B.Mask)) + (pad "" connect oval (at -0.50038 2.30124 90) (size 0.65024 0.65024) (layers B.Cu B.Mask)) + (pad "" connect oval (at 5.4991 2.30124 90) (size 0.65024 0.65024) (layers B.Cu B.Mask)) + (pad "" connect oval (at 6.49986 2.30124 90) (size 0.65024 0.65024) (layers B.Cu B.Mask)) + (pad "" connect oval (at -7.50062 2.30124 90) (size 0.65024 0.65024) (layers B.Cu B.Mask)) + (pad "" connect oval (at 4.50088 2.30124 90) (size 0.65024 0.65024) (layers B.Cu B.Mask)) + (pad "" connect oval (at 7.50062 2.30124 90) (size 0.65024 0.65024) (layers B.Cu B.Mask)) + (pad "" connect oval (at 0.50038 2.30124 90) (size 0.65024 0.65024) (layers B.Cu B.Mask)) + (pad "" connect oval (at 3.50012 2.30124 90) (size 0.65024 0.65024) (layers B.Cu B.Mask)) + (pad "" connect oval (at 8.49884 2.30124 90) (size 0.65024 0.65024) (layers B.Cu B.Mask)) + (pad "" connect oval (at 9.4996 2.30124 90) (size 0.65024 0.65024) (layers B.Cu B.Mask)) + (pad "" connect oval (at -8.49884 2.30124 90) (size 0.65024 0.65024) (layers B.Cu B.Mask)) +) diff --git a/PCB/.pretty/PINHEAD1-2.kicad_mod b/PCB/.pretty/PINHEAD1-2.kicad_mod new file mode 100644 index 00000000..9c339a3d --- /dev/null +++ b/PCB/.pretty/PINHEAD1-2.kicad_mod @@ -0,0 +1,16 @@ +(module PINHEAD1-2 (layer F.Cu) (tedit 0) + (attr virtual) + (fp_text reference REF** (at 0 -3.9) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value PINHEAD1-2 (at 0 3.81) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 2.54 -1.27) (end -2.54 -1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.54 3.175) (end -2.54 3.175) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.54 -3.175) (end 2.54 -3.175) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.54 -3.175) (end -2.54 3.175) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.54 -3.175) (end 2.54 3.175) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole oval (at -1.27 0) (size 1.50622 3.01498) (drill 0.99822) (layers *.Cu *.Mask)) + (pad 2 thru_hole oval (at 1.27 0) (size 1.50622 3.01498) (drill 0.99822) (layers *.Cu *.Mask)) +) diff --git a/PCB/.pretty/PINHEAD1-3.kicad_mod b/PCB/.pretty/PINHEAD1-3.kicad_mod new file mode 100644 index 00000000..a1d1849d --- /dev/null +++ b/PCB/.pretty/PINHEAD1-3.kicad_mod @@ -0,0 +1,17 @@ +(module PINHEAD1-3 (layer F.Cu) (tedit 0) + (attr virtual) + (fp_text reference REF** (at 0.05 -3.8) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value PINHEAD1-3 (at 0 3.81) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -3.81 -3.175) (end -3.81 3.175) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.81 -3.175) (end 3.81 3.175) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.81 -1.27) (end -3.81 -1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start -3.81 -3.175) (end 3.81 -3.175) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.81 3.175) (end -3.81 3.175) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole oval (at -2.54 0) (size 1.50622 3.01498) (drill 0.99822) (layers *.Cu *.Mask)) + (pad 2 thru_hole oval (at 0 0) (size 1.50622 3.01498) (drill 0.99822) (layers *.Cu *.Mask)) + (pad 3 thru_hole oval (at 2.54 0) (size 1.50622 3.01498) (drill 0.99822) (layers *.Cu *.Mask)) +) diff --git a/PCB/.pretty/PINHEAD1-6.kicad_mod b/PCB/.pretty/PINHEAD1-6.kicad_mod new file mode 100644 index 00000000..b269528e --- /dev/null +++ b/PCB/.pretty/PINHEAD1-6.kicad_mod @@ -0,0 +1,23 @@ +(module PINHEAD1-6 (layer F.Cu) (tedit 0) + (attr virtual) + (fp_text reference REF** (at 0 -3.75) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value PINHEAD1-6 (at 0 3.81) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 0 3.175) (end 7.62 3.175) (layer F.SilkS) (width 0.15)) + (fp_line (start 0 -1.27) (end 7.62 -1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start 0 -3.175) (end 7.62 -3.175) (layer F.SilkS) (width 0.15)) + (fp_line (start -7.62 -3.175) (end -7.62 3.175) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.62 -3.175) (end 7.62 3.175) (layer F.SilkS) (width 0.15)) + (fp_line (start 0 -1.27) (end -7.62 -1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start -7.62 -3.175) (end 0 -3.175) (layer F.SilkS) (width 0.15)) + (fp_line (start 0 3.175) (end -7.62 3.175) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole oval (at -6.35 0) (size 1.50622 3.01498) (drill 0.99822) (layers *.Cu *.Mask)) + (pad 2 thru_hole oval (at -3.81 0) (size 1.50622 3.01498) (drill 0.99822) (layers *.Cu *.Mask)) + (pad 3 thru_hole oval (at -1.27 0) (size 1.50622 3.01498) (drill 0.99822) (layers *.Cu *.Mask)) + (pad 4 thru_hole oval (at 1.27 0) (size 1.50622 3.01498) (drill 0.99822) (layers *.Cu *.Mask)) + (pad 5 thru_hole oval (at 3.81 0) (size 1.50622 3.01498) (drill 0.99822) (layers *.Cu *.Mask)) + (pad 6 thru_hole oval (at 6.35 0) (size 1.50622 3.01498) (drill 0.99822) (layers *.Cu *.Mask)) +) diff --git a/PCB/.pretty/PINTST.kicad_mod b/PCB/.pretty/PINTST.kicad_mod new file mode 100644 index 00000000..b43d6b40 --- /dev/null +++ b/PCB/.pretty/PINTST.kicad_mod @@ -0,0 +1,17 @@ +(module PINTST (layer F.Cu) (tedit 0) + (descr "module 1 pin (ou trou mecanique de percage)") + (tags DEV) + (fp_text reference REF** (at 0 -1.26746) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value PINTST (at 0 1.27) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end -0.254 -0.762) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at 0 0) (size 1.143 1.143) (drill 0.635) (layers *.Cu *.Mask F.SilkS)) + (model Connect.3dshapes/PINTST.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) +) diff --git a/PCB/.pretty/QMS-1X52-FEMALE-SMD.kicad_mod b/PCB/.pretty/QMS-1X52-FEMALE-SMD.kicad_mod new file mode 100644 index 00000000..726b1769 --- /dev/null +++ b/PCB/.pretty/QMS-1X52-FEMALE-SMD.kicad_mod @@ -0,0 +1,94 @@ +(module QMS-1X52-FEMALE-SMD (layer F.Cu) (tedit 0) + (attr smd) + (fp_text reference REF** (at 0.4 -1.9) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value QMS-1X52-FEMALE-SMD (at -0.1 2) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 9.398 -1.27) (end -9.398 -1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start -9.398 1.27) (end 9.398 1.27) (layer F.SilkS) (width 0.15)) + (fp_text user 52 (at -9.4488 3.5306) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -8.636 -4.2418) (end -11.684 -4.2418) (layer F.SilkS) (width 0.15)) + (fp_line (start -8.636 4.318) (end -11.684 4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start -11.684 -4.318) (end -11.684 4.318) (layer F.SilkS) (width 0.15)) + (fp_text user 2 (at 9.0678 3.3274) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user 1 (at 8.9916 -3.0226) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 9.398 1.27) (end 9.398 -1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start -9.398 -1.27) (end -9.398 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start 11.684 4.318) (end 11.684 -4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start 11.684 -4.318) (end 8.636 -4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start 8.636 -4.318) (end 8.636 -3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start 8.636 -3.7338) (end -8.636 -3.7338) (layer F.SilkS) (width 0.15)) + (fp_line (start -8.636 -3.7338) (end -8.636 -4.2418) (layer F.SilkS) (width 0.15)) + (fp_line (start -8.636 4.318) (end -8.636 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start -8.636 3.81) (end 8.636 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start 8.636 3.81) (end 8.636 4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start 8.636 4.318) (end 11.684 4.318) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at 7.9375 -3.4163) (size 0.381 1.39954) (layers F.Cu F.Paste F.Mask)) + (pad 2 smd rect (at 7.9375 3.429) (size 0.381 1.39954) (layers F.Cu F.Paste F.Mask)) + (pad 3 smd rect (at 7.3025 -3.4163) (size 0.381 1.39954) (layers F.Cu F.Paste F.Mask)) + (pad 4 smd rect (at 7.3025 3.429) (size 0.381 1.39954) (layers F.Cu F.Paste F.Mask)) + (pad 5 smd rect (at 6.6675 -3.4163) (size 0.381 1.39954) (layers F.Cu F.Paste F.Mask)) + (pad 6 smd rect (at 6.6675 3.429) (size 0.381 1.39954) (layers F.Cu F.Paste F.Mask)) + (pad 7 smd rect (at 6.0325 -3.4163) (size 0.381 1.39954) (layers F.Cu F.Paste F.Mask)) + (pad 8 smd rect (at 6.0325 3.429) (size 0.381 1.39954) (layers F.Cu F.Paste F.Mask)) + (pad 9 smd rect (at 5.3975 -3.4163) (size 0.381 1.39954) (layers F.Cu F.Paste F.Mask)) + (pad 10 smd rect (at 5.3975 3.429) (size 0.381 1.39954) (layers F.Cu F.Paste F.Mask)) + (pad 11 smd rect (at 4.7625 -3.4163) (size 0.381 1.39954) (layers F.Cu F.Paste F.Mask)) + (pad 12 smd rect (at 4.7625 3.429) (size 0.381 1.39954) (layers F.Cu F.Paste F.Mask)) + (pad 13 smd rect (at 4.1275 -3.4163) (size 0.381 1.39954) (layers F.Cu F.Paste F.Mask)) + (pad 14 smd rect (at 4.1275 3.429) (size 0.381 1.39954) (layers F.Cu F.Paste F.Mask)) + (pad 15 smd rect (at 3.4925 -3.4163) (size 0.381 1.39954) (layers F.Cu F.Paste F.Mask)) + (pad 16 smd rect (at 3.4925 3.429) (size 0.381 1.39954) (layers F.Cu F.Paste F.Mask)) + (pad 17 smd rect (at 2.8575 -3.4163) (size 0.381 1.39954) (layers F.Cu F.Paste F.Mask)) + (pad 18 smd rect (at 2.8575 3.429) (size 0.381 1.39954) (layers F.Cu F.Paste F.Mask)) + (pad 19 smd rect (at 2.2225 -3.4163) (size 0.381 1.39954) (layers F.Cu F.Paste F.Mask)) + (pad 20 smd rect (at 2.2225 3.429) (size 0.381 1.39954) (layers F.Cu F.Paste F.Mask)) + (pad 21 smd rect (at 1.5875 -3.4163) (size 0.381 1.39954) (layers F.Cu F.Paste F.Mask)) + (pad 22 smd rect (at 1.5875 3.429) (size 0.381 1.39954) (layers F.Cu F.Paste F.Mask)) + (pad 23 smd rect (at 0.9525 -3.4163) (size 0.381 1.39954) (layers F.Cu F.Paste F.Mask)) + (pad 24 smd rect (at 0.9525 3.429) (size 0.381 1.39954) (layers F.Cu F.Paste F.Mask)) + (pad 25 smd rect (at 0.3175 -3.4163) (size 0.381 1.39954) (layers F.Cu F.Paste F.Mask)) + (pad 26 smd rect (at 0.3175 3.429) (size 0.381 1.39954) (layers F.Cu F.Paste F.Mask)) + (pad 27 smd rect (at -0.3175 -3.4163) (size 0.381 1.39954) (layers F.Cu F.Paste F.Mask)) + (pad 28 smd rect (at -0.3175 3.429) (size 0.381 1.39954) (layers F.Cu F.Paste F.Mask)) + (pad 29 smd rect (at -0.9525 -3.4163) (size 0.381 1.39954) (layers F.Cu F.Paste F.Mask)) + (pad 30 smd rect (at -0.9525 3.429) (size 0.381 1.39954) (layers F.Cu F.Paste F.Mask)) + (pad 31 smd rect (at -1.5875 -3.4163) (size 0.381 1.39954) (layers F.Cu F.Paste F.Mask)) + (pad 32 smd rect (at -1.5875 3.429) (size 0.381 1.39954) (layers F.Cu F.Paste F.Mask)) + (pad 33 smd rect (at -2.2225 -3.4163) (size 0.381 1.39954) (layers F.Cu F.Paste F.Mask)) + (pad 34 smd rect (at -2.2225 3.429) (size 0.381 1.39954) (layers F.Cu F.Paste F.Mask)) + (pad 35 smd rect (at -2.8575 -3.4163) (size 0.381 1.39954) (layers F.Cu F.Paste F.Mask)) + (pad 36 smd rect (at -2.8575 3.429) (size 0.381 1.39954) (layers F.Cu F.Paste F.Mask)) + (pad 37 smd rect (at -3.4925 -3.4163) (size 0.381 1.39954) (layers F.Cu F.Paste F.Mask)) + (pad 38 smd rect (at -3.4925 3.429) (size 0.381 1.39954) (layers F.Cu F.Paste F.Mask)) + (pad 39 smd rect (at -4.1275 -3.4163) (size 0.381 1.39954) (layers F.Cu F.Paste F.Mask)) + (pad 40 smd rect (at -4.1275 3.429) (size 0.381 1.39954) (layers F.Cu F.Paste F.Mask)) + (pad 41 smd rect (at -4.7625 -3.4163) (size 0.381 1.39954) (layers F.Cu F.Paste F.Mask)) + (pad 42 smd rect (at -4.7625 3.429) (size 0.381 1.39954) (layers F.Cu F.Paste F.Mask)) + (pad 43 smd rect (at -5.3975 -3.4163) (size 0.381 1.39954) (layers F.Cu F.Paste F.Mask)) + (pad 44 smd rect (at -5.3975 3.429) (size 0.381 1.39954) (layers F.Cu F.Paste F.Mask)) + (pad 45 smd rect (at -6.0325 -3.4163) (size 0.381 1.39954) (layers F.Cu F.Paste F.Mask)) + (pad 46 smd rect (at -6.0325 3.429) (size 0.381 1.39954) (layers F.Cu F.Paste F.Mask)) + (pad 47 smd rect (at -6.6675 -3.4163) (size 0.381 1.39954) (layers F.Cu F.Paste F.Mask)) + (pad 48 smd rect (at -6.6675 3.429) (size 0.381 1.39954) (layers F.Cu F.Paste F.Mask)) + (pad 49 smd rect (at -7.3025 -3.4163) (size 0.381 1.39954) (layers F.Cu F.Paste F.Mask)) + (pad 50 smd rect (at -7.3025 3.429) (size 0.381 1.39954) (layers F.Cu F.Paste F.Mask)) + (pad 51 smd rect (at -7.9375 -3.4163) (size 0.381 1.39954) (layers F.Cu F.Paste F.Mask)) + (pad 52 smd rect (at -7.9375 3.429) (size 0.381 1.39954) (layers F.Cu F.Paste F.Mask)) + (pad 53 smd oval (at 0 0) (size 18.034 0.508) (layers F.Cu F.Paste F.Mask)) + (pad "" thru_hole circle (at -9.29132 1.78562) (size 1.524 1.524) (drill 1.27) (layers *.Cu *.Mask F.SilkS)) + (pad "" thru_hole circle (at 9.3599 1.78562) (size 1.524 1.524) (drill 1.27) (layers *.Cu *.Mask F.SilkS)) + (model Connect.3dshapes/QMS-1X52-FEMALE-SMD.wrl + (at (xyz 0 0 0)) + (scale (xyz 0.4 0.4 0.4)) + (rotate (xyz 0 0 0)) + ) +) diff --git a/PCB/.pretty/QMS-1X52-SMD.kicad_mod b/PCB/.pretty/QMS-1X52-SMD.kicad_mod new file mode 100644 index 00000000..72fd0c54 --- /dev/null +++ b/PCB/.pretty/QMS-1X52-SMD.kicad_mod @@ -0,0 +1,89 @@ +(module QMS-1X52-SMD (layer F.Cu) (tedit 0) + (attr smd) + (fp_text reference REF** (at 10.668 -1.651 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value QMS-1X52-SMD (at 0 -5.461) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 9.398 1.27) (end -9.398 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start -9.398 -1.27) (end 9.398 -1.27) (layer F.SilkS) (width 0.15)) + (fp_text user 52 (at -9.2075 -2.7305) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -8.636 4.318) (end -11.684 4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start -8.636 -4.318) (end -11.684 -4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start -11.684 4.318) (end -11.684 -4.318) (layer F.SilkS) (width 0.15)) + (fp_text user 2 (at 8.8265 -2.7305) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user 1 (at 8.8265 2.7305) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 9.398 -1.27) (end 9.398 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start -9.398 1.27) (end -9.398 -1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start 11.684 -4.318) (end 11.684 4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start 11.684 4.318) (end 8.636 4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start 8.636 4.318) (end 8.636 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start 8.636 3.81) (end -8.636 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start -8.636 3.81) (end -8.636 4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start -8.636 -4.318) (end -8.636 -3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start -8.636 -3.81) (end 8.636 -3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start 8.636 -3.81) (end 8.636 -4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start 8.636 -4.318) (end 11.684 -4.318) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at 7.9375 3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 2 smd rect (at 7.9375 -3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 3 smd rect (at 7.3025 3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 4 smd rect (at 7.3025 -3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 5 smd rect (at 6.6675 3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 6 smd rect (at 6.6675 -3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 7 smd rect (at 6.0325 3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 8 smd rect (at 6.0325 -3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 9 smd rect (at 5.3975 3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 10 smd rect (at 5.3975 -3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 11 smd rect (at 4.7625 3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 12 smd rect (at 4.7625 -3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 13 smd rect (at 4.1275 3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 14 smd rect (at 4.1275 -3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 15 smd rect (at 3.4925 3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 16 smd rect (at 3.4925 -3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 17 smd rect (at 2.8575 3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 18 smd rect (at 2.8575 -3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 19 smd rect (at 2.2225 3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 20 smd rect (at 2.2225 -3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 21 smd rect (at 1.5875 3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 22 smd rect (at 1.5875 -3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 23 smd rect (at 0.9525 3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 24 smd rect (at 0.9525 -3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 25 smd rect (at 0.3175 3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 26 smd rect (at 0.3175 -3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 27 smd rect (at -0.3175 3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 28 smd rect (at -0.3175 -3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 29 smd rect (at -0.9525 3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 30 smd rect (at -0.9525 -3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 31 smd rect (at -1.5875 3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 32 smd rect (at -1.5875 -3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 33 smd rect (at -2.2225 3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 34 smd rect (at -2.2225 -3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 35 smd rect (at -2.8575 3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 36 smd rect (at -2.8575 -3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 37 smd rect (at -3.4925 3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 38 smd rect (at -3.4925 -3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 39 smd rect (at -4.1275 3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 40 smd rect (at -4.1275 -3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 41 smd rect (at -4.7625 3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 42 smd rect (at -4.7625 -3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 43 smd rect (at -5.3975 3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 44 smd rect (at -5.3975 -3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 45 smd rect (at -6.0325 3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 46 smd rect (at -6.0325 -3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 47 smd rect (at -6.6675 3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 48 smd rect (at -6.6675 -3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 49 smd rect (at -7.3025 3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 50 smd rect (at -7.3025 -3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 51 smd rect (at -7.9375 3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 52 smd rect (at -7.9375 -3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 53 smd rect (at 0 0) (size 18.034 0.508) (layers F.Cu F.Paste F.Mask)) + (pad "" thru_hole circle (at -10.287 2.032) (size 1.524 1.524) (drill 1.27) (layers *.Cu *.Mask F.SilkS)) + (pad "" thru_hole circle (at 10.287 2.032) (size 1.524 1.524) (drill 1.27) (layers *.Cu *.Mask F.SilkS)) +) diff --git a/PCB/.pretty/QMS-2X52-SMD.kicad_mod b/PCB/.pretty/QMS-2X52-SMD.kicad_mod new file mode 100644 index 00000000..812b53c7 --- /dev/null +++ b/PCB/.pretty/QMS-2X52-SMD.kicad_mod @@ -0,0 +1,148 @@ +(module QMS-2X52-SMD (layer F.Cu) (tedit 0) + (attr smd) + (fp_text reference REF** (at 21.336 -1.397 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value QMS-2X52-SMD (at 0 -5.588) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 20.066 1.27) (end 1.27 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.27 -1.27) (end 20.066 -1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.27 1.27) (end -20.066 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start -20.066 -1.27) (end -1.27 -1.27) (layer F.SilkS) (width 0.15)) + (fp_text user 2 (at 20.20062 -3.40106) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user 1 (at 19.99996 3.29946) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.27 1.27) (end -1.27 -1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start -20.066 -1.27) (end -20.066 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start 20.066 -1.27) (end 20.066 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.27 1.27) (end 1.27 -1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start 22.352 -4.318) (end 22.352 4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start 22.352 4.318) (end 19.304 4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start 19.304 4.318) (end 19.304 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.032 3.81) (end 2.032 4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.032 4.318) (end -2.032 4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.032 4.318) (end -2.032 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start -19.304 3.81) (end -19.304 4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start -19.304 4.318) (end -22.352 4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start -22.352 4.318) (end -22.352 -4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start -22.352 -4.318) (end -19.304 -4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start -19.304 -4.318) (end -19.304 -3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.032 -3.81) (end -2.032 -4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.032 -4.318) (end 2.032 -4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.032 -4.318) (end 2.032 -3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start 19.304 -3.81) (end 19.304 -4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start 19.304 -4.318) (end 22.352 -4.318) (layer F.SilkS) (width 0.15)) + (fp_circle (center 0 0) (end 0 -1.143) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at 18.6055 3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 2 smd rect (at 18.6055 -3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 3 smd rect (at 17.9705 3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 4 smd rect (at 17.9705 -3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 5 smd rect (at 17.3355 3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 6 smd rect (at 17.3355 -3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 7 smd rect (at 16.7005 3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 8 smd rect (at 16.7005 -3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 9 smd rect (at 16.0655 3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 10 smd rect (at 16.0655 -3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 11 smd rect (at 15.4305 3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 12 smd rect (at 15.4305 -3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 13 smd rect (at 14.7955 3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 14 smd rect (at 14.7955 -3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 15 smd rect (at 14.1605 3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 16 smd rect (at 14.1605 -3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 17 smd rect (at 13.5255 3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 18 smd rect (at 13.5255 -3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 19 smd rect (at 12.8905 3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 20 smd rect (at 12.8905 -3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 21 smd rect (at 12.2555 3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 22 smd rect (at 12.2555 -3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 23 smd rect (at 11.6205 3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 24 smd rect (at 11.6205 -3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 25 smd rect (at 10.9855 3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 26 smd rect (at 10.9855 -3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 27 smd rect (at 10.3505 3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 28 smd rect (at 10.3505 -3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 29 smd rect (at 9.7155 3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 30 smd rect (at 9.7155 -3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 31 smd rect (at 9.0805 3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 32 smd rect (at 9.0805 -3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 33 smd rect (at 8.4455 3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 34 smd rect (at 8.4455 -3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 35 smd rect (at 7.8105 3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 36 smd rect (at 7.8105 -3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 37 smd rect (at 7.1755 3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 38 smd rect (at 7.1755 -3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 39 smd rect (at 6.5405 3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 40 smd rect (at 6.5405 -3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 41 smd rect (at 5.9055 3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 42 smd rect (at 5.9055 -3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 43 smd rect (at 5.2705 3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 44 smd rect (at 5.2705 -3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 45 smd rect (at 4.6355 3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 46 smd rect (at 4.6355 -3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 47 smd rect (at 4.0005 3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 48 smd rect (at 4.0005 -3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 49 smd rect (at 3.3655 3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 50 smd rect (at 3.3655 -3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 51 smd rect (at 2.7305 3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 52 smd rect (at 2.7305 -3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 53 smd rect (at -2.7305 3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 54 smd rect (at -2.7305 -3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 55 smd rect (at -3.3655 3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 56 smd rect (at -3.3655 -3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 57 smd rect (at -4.0005 3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 58 smd rect (at -4.0005 -3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 59 smd rect (at -4.6355 3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 60 smd rect (at -4.6355 -3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 61 smd rect (at -5.2705 3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 62 smd rect (at -5.2705 -3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 63 smd rect (at -5.9055 3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 64 smd rect (at -5.9055 -3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 65 smd rect (at -6.5405 3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 66 smd rect (at -6.5405 -3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 67 smd rect (at -7.1755 3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 68 smd rect (at -7.1755 -3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 69 smd rect (at -7.8105 3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 70 smd rect (at -7.8105 -3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 71 smd rect (at -8.4455 3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 72 smd rect (at -8.4455 -3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 73 smd rect (at -9.0805 3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 74 smd rect (at -9.0805 -3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 75 smd rect (at -9.7155 3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 76 smd rect (at -9.7155 -3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 77 smd rect (at -10.3505 3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 78 smd rect (at -10.3505 -3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 79 smd rect (at -10.9855 3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 80 smd rect (at -10.9855 -3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 81 smd rect (at -11.6205 3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 82 smd rect (at -11.6205 -3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 83 smd rect (at -12.2555 3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 84 smd rect (at -12.2555 -3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 85 smd rect (at -12.8905 3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 86 smd rect (at -12.8905 -3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 87 smd rect (at -13.5255 3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 88 smd rect (at -13.5255 -3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 89 smd rect (at -14.1605 3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 90 smd rect (at -14.1605 -3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 91 smd rect (at -14.7955 3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 92 smd rect (at -14.7955 -3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 93 smd rect (at -15.4305 3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 94 smd rect (at -15.4305 -3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 95 smd rect (at -16.0655 3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 96 smd rect (at -16.0655 -3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 97 smd rect (at -16.7005 3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 98 smd rect (at -16.7005 -3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 99 smd rect (at -17.3355 3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 100 smd rect (at -17.3355 -3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 101 smd rect (at -17.9705 3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 102 smd rect (at -17.9705 -3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 103 smd rect (at -18.6055 3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 104 smd rect (at -18.6055 -3.302) (size 0.381 2.159) (layers F.Cu F.Paste F.Mask)) + (pad 106 smd rect (at -10.668 0) (size 18.034 0.508) (layers F.Cu F.Paste F.Mask)) + (pad 105 smd rect (at 10.668 0) (size 18.034 0.508) (layers F.Cu F.Paste F.Mask)) + (pad "" thru_hole circle (at -20.955 2.032) (size 1.524 1.524) (drill 1.27) (layers *.Cu *.Mask F.SilkS)) + (pad "" thru_hole circle (at 20.955 2.032) (size 1.524 1.524) (drill 1.27) (layers *.Cu *.Mask F.SilkS)) +) diff --git a/PCB/.pretty/RJ12_E.kicad_mod b/PCB/.pretty/RJ12_E.kicad_mod new file mode 100644 index 00000000..1fc55807 --- /dev/null +++ b/PCB/.pretty/RJ12_E.kicad_mod @@ -0,0 +1,21 @@ +(module RJ12_E (layer F.Cu) (tedit 0) + (fp_text reference REF** (at 0 0) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value RJ12_E (at 0 -2.54) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -6.858 -10.922) (end -6.858 2.286) (layer F.SilkS) (width 0.15)) + (fp_line (start 6.604 -10.922) (end 6.604 2.286) (layer F.SilkS) (width 0.15)) + (fp_line (start -6.858 2.286) (end 6.604 2.286) (layer F.SilkS) (width 0.15)) + (fp_line (start 5.842 -10.922) (end 6.604 -10.922) (layer F.SilkS) (width 0.15)) + (fp_line (start -6.858 -10.922) (end 5.842 -10.922) (layer F.SilkS) (width 0.15)) + (pad 4 thru_hole circle (at 0.508 -8.89) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 2 thru_hole circle (at -2.032 -8.89) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 6 thru_hole circle (at 3.048 -8.89) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 1 thru_hole circle (at -3.302 -6.35) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 3 thru_hole circle (at -0.762 -6.35) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 5 thru_hole circle (at 1.778 -6.35) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 8 thru_hole circle (at 6.604 -4.318) (size 2.99974 2.99974) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 7 thru_hole circle (at -6.858 -4.318) (size 2.99974 2.99974) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) +) diff --git a/PCB/.pretty/RJ45_8.kicad_mod b/PCB/.pretty/RJ45_8.kicad_mod new file mode 100644 index 00000000..542aeaf0 --- /dev/null +++ b/PCB/.pretty/RJ45_8.kicad_mod @@ -0,0 +1,28 @@ +(module RJ45_8 (layer F.Cu) (tedit 0) + (tags RJ45) + (fp_text reference REF** (at 0.254 4.826) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value RJ45_8 (at 0.14224 -0.1016) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -7.62 7.874) (end 7.62 7.874) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.62 7.874) (end 7.62 -10.16) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.62 -10.16) (end -7.62 -10.16) (layer F.SilkS) (width 0.15)) + (fp_line (start -7.62 -10.16) (end -7.62 7.874) (layer F.SilkS) (width 0.15)) + (pad Hole np_thru_hole circle (at 5.93852 0) (size 3.64998 3.64998) (drill 3.2512) (layers *.Cu *.SilkS *.Mask)) + (pad Hole np_thru_hole circle (at -5.9309 0) (size 3.64998 3.64998) (drill 3.2512) (layers *.Cu *.SilkS *.Mask)) + (pad 1 thru_hole rect (at -4.445 -6.35) (size 1.50114 1.50114) (drill 0.89916) (layers *.Cu *.Mask F.SilkS)) + (pad 2 thru_hole circle (at -3.175 -8.89) (size 1.50114 1.50114) (drill 0.89916) (layers *.Cu *.Mask F.SilkS)) + (pad 3 thru_hole circle (at -1.905 -6.35) (size 1.50114 1.50114) (drill 0.89916) (layers *.Cu *.Mask F.SilkS)) + (pad 4 thru_hole circle (at -0.635 -8.89) (size 1.50114 1.50114) (drill 0.89916) (layers *.Cu *.Mask F.SilkS)) + (pad 5 thru_hole circle (at 0.635 -6.35) (size 1.50114 1.50114) (drill 0.89916) (layers *.Cu *.Mask F.SilkS)) + (pad 6 thru_hole circle (at 1.905 -8.89) (size 1.50114 1.50114) (drill 0.89916) (layers *.Cu *.Mask F.SilkS)) + (pad 7 thru_hole circle (at 3.175 -6.35) (size 1.50114 1.50114) (drill 0.89916) (layers *.Cu *.Mask F.SilkS)) + (pad 8 thru_hole circle (at 4.445 -8.89) (size 1.50114 1.50114) (drill 0.89916) (layers *.Cu *.Mask F.SilkS)) + (model Connect.3dshapes/RJ45_8.wrl + (at (xyz 0 0 0)) + (scale (xyz 0.4 0.4 0.4)) + (rotate (xyz 0 0 0)) + ) +) diff --git a/PCB/.pretty/RJ45_TRANSFO.kicad_mod b/PCB/.pretty/RJ45_TRANSFO.kicad_mod new file mode 100644 index 00000000..d8f913cc --- /dev/null +++ b/PCB/.pretty/RJ45_TRANSFO.kicad_mod @@ -0,0 +1,33 @@ +(module RJ45_TRANSFO (layer F.Cu) (tedit 0) + (tags RJ45) + (fp_text reference REF** (at -3.81 15.24) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value RJ45_TRANSFO (at -3.81 11.43) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 3.937 20.066) (end 3.937 8.128) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.937 4.953) (end 3.937 -4.953) (layer F.SilkS) (width 0.15)) + (fp_line (start -12.065 20.066) (end -12.065 8.128) (layer F.SilkS) (width 0.15)) + (fp_line (start -12.065 4.953) (end -12.065 -4.953) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.937 -4.953) (end 2.921 -4.953) (layer F.SilkS) (width 0.15)) + (fp_line (start -5.461 -4.953) (end -2.159 -4.953) (layer F.SilkS) (width 0.15)) + (fp_line (start -12.065 -4.953) (end -10.795 -4.953) (layer F.SilkS) (width 0.15)) + (fp_line (start -12.065 20.11172) (end 3.937 20.11172) (layer F.SilkS) (width 0.15)) + (pad Hole thru_hole circle (at 1.905 8.89) (size 3.85064 3.85064) (drill 3.302) (layers *.Cu *.SilkS *.Mask)) + (pad Hole thru_hole circle (at -9.525 8.89) (size 3.85064 3.85064) (drill 3.302) (layers *.Cu *.SilkS *.Mask)) + (pad 8 thru_hole circle (at -8.255 2.54) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 7 thru_hole circle (at -7.62 0) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 6 thru_hole circle (at -5.715 2.54) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 5 thru_hole circle (at -5.08 0) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 4 thru_hole circle (at -3.175 2.54) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 3 thru_hole circle (at -2.54 0) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 2 thru_hole circle (at -0.635 2.54) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 13 thru_hole circle (at 3.937 5.842) (size 2.54 2.54) (drill 1.778) (layers *.Cu *.SilkS *.Mask)) + (pad 13 thru_hole circle (at -11.557 5.842) (size 2.54 2.54) (drill 1.778) (layers *.Cu *.SilkS *.Mask)) + (pad YK thru_hole circle (at -6.731 -4.826) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad GA thru_hole circle (at -0.889 -4.826) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad YA thru_hole circle (at -9.271 -4.826) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad GK thru_hole circle (at 1.651 -4.826) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 1 thru_hole rect (at 0 0) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) +) diff --git a/PCB/.pretty/RJ45_TRANSFO_ver2.kicad_mod b/PCB/.pretty/RJ45_TRANSFO_ver2.kicad_mod new file mode 100644 index 00000000..d47ea036 --- /dev/null +++ b/PCB/.pretty/RJ45_TRANSFO_ver2.kicad_mod @@ -0,0 +1,32 @@ +(module RJ45_TRANSFO_ver2 (layer F.Cu) (tedit 0) + (tags RJ45) + (fp_text reference REF** (at 0 8.128) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value RJ45_TRANSFO_ver2 (at 0.14224 -0.1016) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 8.001 12.954) (end 8.001 1.016) (layer F.SilkS) (width 0.15)) + (fp_line (start 8.001 -2.159) (end 8.001 -12.065) (layer F.SilkS) (width 0.15)) + (fp_line (start -8.001 12.954) (end -8.001 1.016) (layer F.SilkS) (width 0.15)) + (fp_line (start -8.001 -2.159) (end -8.001 -12.065) (layer F.SilkS) (width 0.15)) + (fp_line (start 8.001 -12.065) (end 6.985 -12.065) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.778 -12.065) (end 1.524 -12.065) (layer F.SilkS) (width 0.15)) + (fp_line (start -8.001 -12.065) (end -6.731 -12.065) (layer F.SilkS) (width 0.15)) + (fp_line (start -8.001 12.99972) (end 8.001 12.99972) (layer F.SilkS) (width 0.15)) + (pad Hole thru_hole circle (at 5.42798 2.49936) (size 3.85064 3.85064) (drill 3.05054) (layers *.Cu *.SilkS *.Mask)) + (pad Hole thru_hole circle (at -5.42544 2.48666) (size 3.85064 3.85064) (drill 3.05054) (layers *.Cu *.SilkS *.Mask)) + (pad 1 thru_hole rect (at -3.58648 -4.572) (size 1.50114 1.50114) (drill 0.89916) (layers *.Cu *.Mask F.SilkS)) + (pad 2 thru_hole circle (at -4.85648 -7.112) (size 1.50114 1.50114) (drill 0.89916) (layers *.Cu *.Mask F.SilkS)) + (pad 3 thru_hole circle (at -1.04648 -4.572) (size 1.50114 1.50114) (drill 0.89916) (layers *.Cu *.Mask F.SilkS)) + (pad 4 thru_hole circle (at -2.31648 -7.112) (size 1.50114 1.50114) (drill 0.89916) (layers *.Cu *.Mask F.SilkS)) + (pad 5 thru_hole circle (at 1.49352 -4.572) (size 1.50114 1.50114) (drill 0.89916) (layers *.Cu *.Mask F.SilkS)) + (pad 6 thru_hole circle (at 0.22352 -7.112) (size 1.50114 1.50114) (drill 0.89916) (layers *.Cu *.Mask F.SilkS)) + (pad 7 thru_hole circle (at 4.03352 -4.572) (size 1.50114 1.50114) (drill 0.89916) (layers *.Cu *.Mask F.SilkS)) + (pad 9 thru_hole circle (at 7.99846 -0.49276) (size 2.032 2.032) (drill 1.00076) (layers *.Cu *.SilkS *.Mask)) + (pad 9 thru_hole circle (at -8.001 -0.49276) (size 2.032 2.032) (drill 1.00076) (layers *.Cu *.SilkS *.Mask)) + (pad Hole thru_hole circle (at -3.048 -12.192) (size 1.5113 1.5113) (drill 0.89916) (layers *.Cu *.SilkS *.Mask)) + (pad Hole thru_hole circle (at 3.048 -12.192) (size 1.5113 1.5113) (drill 0.89916) (layers *.Cu *.SilkS *.Mask)) + (pad Hole thru_hole circle (at -5.588 -12.192) (size 1.5113 1.5113) (drill 0.89916) (layers *.Cu *.SilkS *.Mask)) + (pad Hole thru_hole circle (at 5.588 -12.192) (size 1.5113 1.5113) (drill 0.89916) (layers *.Cu *.SilkS *.Mask)) +) diff --git a/PCB/.pretty/RJHSE538X.kicad_mod b/PCB/.pretty/RJHSE538X.kicad_mod new file mode 100644 index 00000000..1ea6828f --- /dev/null +++ b/PCB/.pretty/RJHSE538X.kicad_mod @@ -0,0 +1,41 @@ +(module RJHSE538X (layer F.Cu) (tedit 55225793) + (descr "mod. jack, ethernet, 8P8C, RJ45 connector, 2 leds, shielded") + (tags "RJHSE538X 8P8C RJ45 ethernet jack") + (fp_text reference REF** (at 3.4925 -6.9215) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value RJHSE538X (at 3.937 9.2075) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -5.8 -8.45) (end -5.8 7.9) (layer F.CrtYd) (width 0.05)) + (fp_line (start -5.8 7.9) (end 12.9 7.9) (layer F.CrtYd) (width 0.05)) + (fp_line (start 12.9 7.9) (end 12.9 -8.45) (layer F.CrtYd) (width 0.05)) + (fp_line (start 12.9 -8.45) (end -5.8 -8.45) (layer F.CrtYd) (width 0.05)) + (fp_line (start 11.8745 7.62) (end 11.8745 2.0955) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.7625 7.62) (end -4.7625 2.0955) (layer F.SilkS) (width 0.15)) + (fp_line (start 11.8745 -8.1915) (end -4.7625 -8.1915) (layer F.SilkS) (width 0.15)) + (fp_line (start 11.8745 -8.1915) (end 11.8745 -0.3175) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.7625 -8.1915) (end -4.7625 -0.3175) (layer F.SilkS) (width 0.15)) + (fp_line (start 11.8745 7.62) (end -4.7625 7.62) (layer F.SilkS) (width 0.15)) + (pad "" thru_hole circle (at 11.684 0.889) (size 2 2) (drill 1.57) (layers *.Cu *.Mask)) + (pad 9 thru_hole circle (at -3.302 6.604) (size 1.50114 1.50114) (drill 0.889) (layers *.Cu *.Mask)) + (pad 10 thru_hole circle (at -1.016 6.604) (size 1.50114 1.50114) (drill 0.889) (layers *.Cu *.Mask)) + (pad 11 thru_hole circle (at 8.128 6.604) (size 1.50114 1.50114) (drill 0.889) (layers *.Cu *.Mask)) + (pad 12 thru_hole circle (at 10.414 6.604) (size 1.50114 1.50114) (drill 0.889) (layers *.Cu *.Mask)) + (pad 8 thru_hole circle (at 7.112 1.778) (size 1.50114 1.50114) (drill 0.889) (layers *.Cu *.Mask)) + (pad 6 thru_hole circle (at 5.08 1.778) (size 1.50114 1.50114) (drill 0.889) (layers *.Cu *.Mask)) + (pad 4 thru_hole circle (at 3.048 1.778) (size 1.50114 1.50114) (drill 0.889) (layers *.Cu *.Mask)) + (pad 2 thru_hole circle (at 1.016 1.778) (size 1.50114 1.50114) (drill 0.889) (layers *.Cu *.Mask)) + (pad 5 thru_hole circle (at 4.064 0) (size 1.50114 1.50114) (drill 0.889) (layers *.Cu *.Mask)) + (pad 3 thru_hole circle (at 2.032 0) (size 1.50114 1.50114) (drill 0.889) (layers *.Cu *.Mask)) + (pad 7 thru_hole circle (at 6.096 0) (size 1.50114 1.50114) (drill 0.889) (layers *.Cu *.Mask)) + (pad 1 thru_hole circle (at 0 0) (size 1.50114 1.50114) (drill 0.889) (layers *.Cu *.Mask)) + (pad "" thru_hole circle (at -2.794 -2.54) (size 3.3 3.3) (drill 3.3) (layers *.Cu *.Mask F.SilkS)) + (pad "" thru_hole circle (at 9.906 -2.54) (size 3.3 3.3) (drill 3.3) (layers *.Cu *.Mask F.SilkS)) + (pad "" thru_hole circle (at -4.572 0.889) (size 2 2) (drill 1.57) (layers *.Cu *.Mask)) + (model Connect.3dshapes/RJHSE538X.wrl + (at (xyz 0.138 0.06 0.125)) + (scale (xyz 0.4 0.4 0.4)) + (rotate (xyz -90 0 180)) + ) +) diff --git a/PCB/.pretty/SAS_mini_1888174.kicad_mod b/PCB/.pretty/SAS_mini_1888174.kicad_mod new file mode 100644 index 00000000..468e02e0 --- /dev/null +++ b/PCB/.pretty/SAS_mini_1888174.kicad_mod @@ -0,0 +1,66 @@ +(module SAS_mini_1888174 (layer F.Cu) (tedit 0) + (descr "36pin mini SAS connector") + (tags "SAS mini connector") + (fp_text reference REF** (at 4 -7.4) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value SAS_mini_1888174 (at 0 0) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 9.5 -6.5) (end -9.5 -6.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -9.5 -6.5) (end -9.5 6.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -9.5 6.5) (end 9.5 6.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 9.5 6.5) (end 9.5 -6.5) (layer F.SilkS) (width 0.15)) + (pad B1 smd oval (at -7 -2.91) (size 0.35 1.8) (layers F.Cu F.Paste F.Mask)) + (pad B2 smd oval (at -6.2 -2.91) (size 0.35 1.8) (layers F.Cu F.Paste F.Mask)) + (pad B3 smd oval (at -5.4 -2.91) (size 0.35 1.8) (layers F.Cu F.Paste F.Mask)) + (pad B4 smd oval (at -4.6 -2.91) (size 0.35 1.8) (layers F.Cu F.Paste F.Mask)) + (pad B5 smd oval (at -3.8 -2.91) (size 0.35 1.8) (layers F.Cu F.Paste F.Mask)) + (pad B6 smd oval (at -3 -2.91) (size 0.35 1.8) (layers F.Cu F.Paste F.Mask)) + (pad B7 smd oval (at -2.2 -2.91) (size 0.35 1.8) (layers F.Cu F.Paste F.Mask)) + (pad B8 smd oval (at -1.4 -2.91) (size 0.35 1.8) (layers F.Cu F.Paste F.Mask)) + (pad B9 smd oval (at -0.6 -2.91) (size 0.35 1.8) (layers F.Cu F.Paste F.Mask)) + (pad B10 smd oval (at 0.2 -2.91) (size 0.35 1.8) (layers F.Cu F.Paste F.Mask)) + (pad B11 smd oval (at 1 -2.91) (size 0.35 1.8) (layers F.Cu F.Paste F.Mask)) + (pad B12 smd oval (at 1.8 -2.91) (size 0.35 1.8) (layers F.Cu F.Paste F.Mask)) + (pad B13 smd oval (at 2.6 -2.91) (size 0.35 1.8) (layers F.Cu F.Paste F.Mask)) + (pad B14 smd oval (at 3.4 -2.91) (size 0.35 1.8) (layers F.Cu F.Paste F.Mask)) + (pad B15 smd oval (at 4.2 -2.91) (size 0.35 1.8) (layers F.Cu F.Paste F.Mask)) + (pad B16 smd oval (at 5 -2.91) (size 0.35 1.8) (layers F.Cu F.Paste F.Mask)) + (pad B17 smd oval (at 5.8 -2.91) (size 0.35 1.8) (layers F.Cu F.Paste F.Mask)) + (pad A1 smd oval (at -6.5 2.91) (size 0.35 1.8) (layers F.Cu F.Paste F.Mask)) + (pad A2 smd oval (at -5.7 2.91) (size 0.35 1.8) (layers F.Cu F.Paste F.Mask)) + (pad A3 smd oval (at -4.9 2.91) (size 0.35 1.8) (layers F.Cu F.Paste F.Mask)) + (pad A4 smd oval (at -4.1 2.91) (size 0.35 1.8) (layers F.Cu F.Paste F.Mask)) + (pad A5 smd oval (at -3.3 2.91) (size 0.35 1.8) (layers F.Cu F.Paste F.Mask)) + (pad A6 smd oval (at -2.5 2.91) (size 0.35 1.8) (layers F.Cu F.Paste F.Mask)) + (pad A7 smd oval (at -1.7 2.91) (size 0.35 1.8) (layers F.Cu F.Paste F.Mask)) + (pad A8 smd oval (at -0.9 2.91) (size 0.35 1.8) (layers F.Cu F.Paste F.Mask)) + (pad A9 smd oval (at -0.1 2.91) (size 0.35 1.8) (layers F.Cu F.Paste F.Mask)) + (pad A10 smd oval (at 0.7 2.91) (size 0.35 1.8) (layers F.Cu F.Paste F.Mask)) + (pad A11 smd oval (at 1.5 2.91) (size 0.35 1.8) (layers F.Cu F.Paste F.Mask)) + (pad A12 smd oval (at 2.3 2.91) (size 0.35 1.8) (layers F.Cu F.Paste F.Mask)) + (pad A13 smd oval (at 3.1 2.91) (size 0.35 1.8) (layers F.Cu F.Paste F.Mask)) + (pad A14 smd oval (at 3.9 2.91) (size 0.35 1.8) (layers F.Cu F.Paste F.Mask)) + (pad A15 smd oval (at 4.7 2.91) (size 0.35 1.8) (layers F.Cu F.Paste F.Mask)) + (pad A16 smd oval (at 5.5 2.91) (size 0.35 1.8) (layers F.Cu F.Paste F.Mask)) + (pad A17 smd oval (at 6.3 2.91) (size 0.35 1.8) (layers F.Cu F.Paste F.Mask)) + (pad 1 thru_hole circle (at -8.9 -5.24) (size 1.55 1.55) (drill 0.8) (layers *.Cu *.Mask F.SilkS) + (zone_connect 2)) + (pad 2 thru_hole circle (at -8.9 -2) (size 1.55 1.55) (drill 0.8) (layers *.Cu *.Mask F.SilkS)) + (pad 4 thru_hole circle (at -8.9 4.03) (size 1.55 1.55) (drill 0.8) (layers *.Cu *.Mask F.SilkS)) + (pad 3 thru_hole circle (at -8.9 2) (size 1.55 1.55) (drill 0.8) (layers *.Cu *.Mask F.SilkS)) + (pad 5 thru_hole circle (at 8.9 -6.24) (size 1.55 1.55) (drill 0.8) (layers *.Cu *.Mask F.SilkS)) + (pad 6 thru_hole circle (at 8.9 -2) (size 1.55 1.55) (drill 0.8) (layers *.Cu *.Mask F.SilkS)) + (pad "" np_thru_hole circle (at -8 0) (size 1.55 1.55) (drill 1.55) (layers *.Mask B.Cu F.SilkS)) + (pad "" np_thru_hole circle (at 8 0) (size 1.55 1.55) (drill 1.55) (layers *.Mask B.Cu F.SilkS)) + (pad 8 thru_hole circle (at 8.9 4.03) (size 1.55 1.55) (drill 0.8) (layers *.Cu *.Mask F.SilkS)) + (pad 7 thru_hole circle (at 8.9 2) (size 1.55 1.55) (drill 0.8) (layers *.Cu *.Mask F.SilkS)) + (pad B18 smd oval (at 6.6 -2.91) (size 0.35 1.8) (layers F.Cu F.Paste F.Mask)) + (pad A18 smd oval (at 7.1 2.91) (size 0.35 1.8) (layers F.Cu F.Paste F.Mask)) + (model Connect.3dshapes/SAS_mini_1888174.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) +) diff --git a/PCB/.pretty/SATA-22_SMD.kicad_mod b/PCB/.pretty/SATA-22_SMD.kicad_mod new file mode 100644 index 00000000..7ce64b67 --- /dev/null +++ b/PCB/.pretty/SATA-22_SMD.kicad_mod @@ -0,0 +1,64 @@ +(module SATA-22_SMD (layer F.Cu) (tedit 0) + (fp_text reference REF** (at 0 3.175) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value SATA-22_SMD (at 0 5.715) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -17.145 -0.6096) (end -17.145 0.635) (layer F.SilkS) (width 0.15)) + (fp_line (start 18.415 10.5664) (end 18.415 5.08) (layer F.SilkS) (width 0.15)) + (fp_line (start 18.415 5.08) (end 20.32 5.08) (layer F.SilkS) (width 0.15)) + (fp_line (start 20.32 5.08) (end 20.32 -0.6096) (layer F.SilkS) (width 0.15)) + (fp_line (start 20.32 -0.6096) (end 17.145 -0.6096) (layer F.SilkS) (width 0.15)) + (fp_line (start 17.145 -0.6096) (end 17.145 0.635) (layer F.SilkS) (width 0.15)) + (fp_line (start -18.415 10.5664) (end 18.415 10.5664) (layer F.SilkS) (width 0.15)) + (fp_line (start -17.145 -0.6096) (end -20.32 -0.6096) (layer F.SilkS) (width 0.15)) + (fp_line (start -20.32 -0.6096) (end -20.32 5.08) (layer F.SilkS) (width 0.15)) + (fp_line (start -20.32 5.08) (end -18.415 5.08) (layer F.SilkS) (width 0.15)) + (fp_line (start -18.415 5.08) (end -18.415 10.5664) (layer F.SilkS) (width 0.15)) + (fp_line (start -17.145 0.635) (end 1.27 0.635) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.27 0.635) (end 1.27 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.27 1.27) (end 2.54 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.54 1.27) (end 2.54 0.635) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.54 0.635) (end 11.43 0.635) (layer F.SilkS) (width 0.15)) + (fp_line (start 11.43 0.635) (end 11.43 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start 11.43 1.27) (end 12.7 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start 12.7 1.27) (end 12.7 0.635) (layer F.SilkS) (width 0.15)) + (fp_line (start 12.7 0.635) (end 17.145 0.635) (layer F.SilkS) (width 0.15)) + (fp_line (start 18.415 10.541) (end 19.05 11.811) (layer F.SilkS) (width 0.15)) + (fp_line (start 19.05 11.811) (end 19.685 11.811) (layer F.SilkS) (width 0.15)) + (fp_line (start 19.685 11.811) (end 20.32 10.541) (layer F.SilkS) (width 0.15)) + (fp_line (start 20.32 10.541) (end 20.32 9.271) (layer F.SilkS) (width 0.15)) + (fp_line (start 20.32 9.271) (end 18.415 6.731) (layer F.SilkS) (width 0.15)) + (fp_line (start -18.415 10.541) (end -19.05 11.811) (layer F.SilkS) (width 0.15)) + (fp_line (start -19.05 11.811) (end -19.685 11.811) (layer F.SilkS) (width 0.15)) + (fp_line (start -19.685 11.811) (end -20.32 10.541) (layer F.SilkS) (width 0.15)) + (fp_line (start -20.32 10.541) (end -20.32 9.271) (layer F.SilkS) (width 0.15)) + (fp_line (start -20.32 9.271) (end -18.415 6.731) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -15.875 0) (size 0.8636 2.286) (layers F.Cu F.Paste F.Mask)) + (pad 2 smd rect (at -14.605 0) (size 0.8636 2.286) (layers F.Cu F.Paste F.Mask)) + (pad 3 smd rect (at -13.335 0) (size 0.8636 2.286) (layers F.Cu F.Paste F.Mask)) + (pad 4 smd rect (at -12.065 0) (size 0.8636 2.286) (layers F.Cu F.Paste F.Mask)) + (pad 5 smd rect (at -10.795 0) (size 0.8636 2.286) (layers F.Cu F.Paste F.Mask)) + (pad 6 smd rect (at -9.525 0) (size 0.8636 2.286) (layers F.Cu F.Paste F.Mask)) + (pad 7 smd rect (at -8.255 0) (size 0.8636 2.286) (layers F.Cu F.Paste F.Mask)) + (pad 8 smd rect (at -1.905 0) (size 0.8636 2.286) (layers F.Cu F.Paste F.Mask)) + (pad 9 smd rect (at -0.635 0) (size 0.8636 2.286) (layers F.Cu F.Paste F.Mask)) + (pad 10 smd rect (at 0.635 0) (size 0.8636 2.286) (layers F.Cu F.Paste F.Mask)) + (pad 11 smd rect (at 1.905 0.508) (size 0.8636 2.286) (layers F.Cu F.Paste F.Mask)) + (pad 12 smd rect (at 3.175 0) (size 0.8636 2.286) (layers F.Cu F.Paste F.Mask)) + (pad 13 smd rect (at 4.445 0) (size 0.8636 2.286) (layers F.Cu F.Paste F.Mask)) + (pad 14 smd rect (at 5.715 0) (size 0.8636 2.286) (layers F.Cu F.Paste F.Mask)) + (pad 15 smd rect (at 6.985 0) (size 0.8636 2.286) (layers F.Cu F.Paste F.Mask)) + (pad "" thru_hole circle (at 16.5862 2.9972) (size 1.50114 1.50114) (drill 1.50114) (layers *.Cu *.Mask F.SilkS)) + (pad "" thru_hole circle (at -16.5862 2.9972) (size 1.50114 1.50114) (drill 1.50114) (layers *.Cu *.Mask F.SilkS)) + (pad 16 smd rect (at 8.255 0) (size 0.8636 2.286) (layers F.Cu F.Paste F.Mask)) + (pad 17 smd rect (at 9.525 0) (size 0.8636 2.286) (layers F.Cu F.Paste F.Mask)) + (pad 18 smd rect (at 10.795 0) (size 0.8636 2.286) (layers F.Cu F.Paste F.Mask)) + (pad 19 smd rect (at 12.065 0.508) (size 0.8636 2.286) (layers F.Cu F.Paste F.Mask)) + (pad 20 smd rect (at 13.335 0) (size 0.8636 2.286) (layers F.Cu F.Paste F.Mask)) + (pad 21 smd rect (at 14.605 0) (size 0.8636 2.286) (layers F.Cu F.Paste F.Mask)) + (pad 22 smd rect (at 15.875 0) (size 0.8636 2.286) (layers F.Cu F.Paste F.Mask)) + (pad "" thru_hole circle (at 18.7198 2.2352) (size 2.79908 2.79908) (drill 2.30124) (layers *.Cu *.Mask F.SilkS)) + (pad "" thru_hole circle (at -18.7198 2.2352) (size 2.79908 2.79908) (drill 2.30124) (layers *.Cu *.Mask F.SilkS)) +) diff --git a/PCB/.pretty/SATA-7_SMD.kicad_mod b/PCB/.pretty/SATA-7_SMD.kicad_mod new file mode 100644 index 00000000..4af0efa2 --- /dev/null +++ b/PCB/.pretty/SATA-7_SMD.kicad_mod @@ -0,0 +1,127 @@ +(module SATA-7_SMD (layer F.Cu) (tedit 0) + (descr "SERIAL ATA 7P R/A SMT") + (tags "SERIAL ATA SATA") + (attr smd) + (fp_text reference REF** (at -3.81 -13.335) (layer B.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value SATA-7_SMD (at 3.175 -13.335) (layer B.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -6.04774 -9.99998) (end -6.04774 -8.49884) (layer F.SilkS) (width 0.15)) + (fp_line (start -6.74878 -8.49884) (end -6.74878 -9.99998) (layer F.SilkS) (width 0.15)) + (fp_line (start 6.74878 -9.99998) (end 6.74878 -8.49884) (layer F.SilkS) (width 0.15)) + (fp_line (start 6.04774 -8.49884) (end 6.04774 -9.99998) (layer F.SilkS) (width 0.15)) + (fp_line (start -8.22706 0.35052) (end -8.22706 -5.01142) (layer F.SilkS) (width 0.15)) + (fp_line (start -8.22706 -5.01142) (end -8.22706 -11.16838) (layer F.SilkS) (width 0.15)) + (fp_line (start -8.22706 -11.16838) (end -7.43458 -11.16838) (layer F.SilkS) (width 0.15)) + (fp_line (start -7.43458 -11.16838) (end -5.06222 -11.16838) (layer F.SilkS) (width 0.15)) + (fp_line (start -5.06222 -11.16838) (end -5.06222 -6.9469) (layer F.SilkS) (width 0.15)) + (fp_line (start -7.43458 -11.16838) (end -7.43458 -6.9469) (layer F.SilkS) (width 0.15)) + (fp_line (start -7.43458 -6.9469) (end 5.13588 -6.9469) (layer F.SilkS) (width 0.15)) + (fp_line (start 5.13588 -6.9469) (end 7.42442 -6.9469) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.42442 -6.9469) (end 7.42442 -11.16838) (layer F.SilkS) (width 0.15)) + (fp_line (start 5.13588 -6.9469) (end 5.13588 -11.16838) (layer F.SilkS) (width 0.15)) + (fp_line (start 5.13588 -11.16838) (end 6.54304 -11.16838) (layer F.SilkS) (width 0.15)) + (fp_line (start 6.54304 -11.16838) (end 8.128 -11.16838) (layer F.SilkS) (width 0.15)) + (fp_line (start 8.128 -11.16838) (end 8.128 -6.9469) (layer F.SilkS) (width 0.15)) + (fp_line (start 8.128 -6.9469) (end 9.1821 -6.9469) (layer F.SilkS) (width 0.15)) + (fp_line (start 9.1821 -6.9469) (end 9.1821 0.35052) (layer F.SilkS) (width 0.15)) + (fp_line (start 9.1821 0.35052) (end 7.59968 0.35052) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.59968 0.35052) (end 7.16026 -0.08636) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.16026 -0.08636) (end 7.16026 -5.01142) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.16026 -5.01142) (end 5.7531 -5.01142) (layer F.SilkS) (width 0.15)) + (fp_line (start 5.7531 -5.01142) (end 5.7531 -0.17526) (layer F.SilkS) (width 0.15)) + (fp_line (start 5.7531 -0.17526) (end 5.7531 -0.17526) (layer F.SilkS) (width 0.15)) + (fp_line (start 5.7531 -0.17526) (end 5.22478 0.35052) (layer F.SilkS) (width 0.15)) + (fp_line (start 5.22478 0.35052) (end -4.07416 0.34798) (layer F.SilkS) (width 0.15)) + (fp_line (start -6.731 0.35052) (end -8.22706 0.35052) (layer F.SilkS) (width 0.15)) + (fp_line (start -6.20522 -0.17526) (end -6.731 0.35052) (layer F.SilkS) (width 0.15)) + (fp_line (start -6.20522 -0.17526) (end -6.20522 -4.572) (layer F.SilkS) (width 0.15)) + (fp_line (start -6.20522 -4.572) (end -5.7658 -5.01142) (layer F.SilkS) (width 0.15)) + (fp_line (start -8.22706 -5.01142) (end 5.7531 -5.01142) (layer F.SilkS) (width 0.15)) + (fp_line (start 5.6642 -0.17526) (end 4.6101 -0.17526) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.6101 -0.17526) (end -4.6228 -0.17526) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.09702 0.33782) (end -4.6228 -0.17526) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.6228 -0.17526) (end -4.6228 -4.92252) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.381 -4.953) (end -0.381 -0.508) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.381 -0.508) (end 0.381 -0.508) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.381 -0.508) (end 0.381 -4.953) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.651 -4.953) (end -1.651 -0.889) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.651 -0.889) (end -0.889 -0.889) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.889 -0.889) (end -0.889 -4.953) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.889 -4.953) (end 0.889 -0.889) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.889 -0.889) (end 1.651 -0.889) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.651 -0.889) (end 1.651 -4.953) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.159 -4.953) (end 2.159 -0.889) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.159 -0.889) (end 2.921 -0.889) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.921 -0.889) (end 2.921 -4.953) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.429 -4.953) (end 3.429 -0.508) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.429 -0.508) (end 4.191 -0.508) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.191 -0.508) (end 4.191 -4.953) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.6101 -0.17526) (end 4.6101 -4.92252) (layer F.SilkS) (width 0.15)) + (fp_line (start -3.429 -4.953) (end -3.429 -0.508) (layer F.SilkS) (width 0.15)) + (fp_line (start -3.429 -0.508) (end -4.191 -0.508) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.191 -0.508) (end -4.191 -4.953) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.921 -4.953) (end -2.921 -0.889) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.921 -0.889) (end -2.159 -0.889) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.159 -0.889) (end -2.159 -4.953) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.191 -6.985) (end -4.064 -7.23646) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.064 -7.23646) (end -4.064 -11.176) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.064 -11.176) (end -3.556 -11.176) (layer F.SilkS) (width 0.15)) + (fp_line (start -3.556 -11.176) (end -3.556 -7.23646) (layer F.SilkS) (width 0.15)) + (fp_line (start -3.556 -7.23646) (end -3.429 -6.985) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.921 -6.985) (end -2.794 -7.23646) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.794 -7.23646) (end -2.794 -11.176) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.794 -11.176) (end -2.286 -11.176) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.286 -11.176) (end -2.286 -7.23646) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.286 -7.23646) (end -2.159 -6.985) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.651 -6.985) (end -1.524 -7.23646) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.524 -7.23646) (end -1.524 -11.176) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.524 -11.176) (end -1.016 -11.176) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.016 -11.176) (end -1.016 -7.23646) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.016 -7.23646) (end -0.889 -6.985) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.381 -6.985) (end -0.254 -7.23646) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.254 -7.23646) (end -0.254 -11.176) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.254 -11.176) (end 0.254 -11.176) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.254 -11.176) (end 0.254 -7.23646) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.254 -7.23646) (end 0.381 -6.985) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.889 -6.985) (end 1.016 -7.23646) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.016 -7.23646) (end 1.016 -11.176) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.016 -11.176) (end 1.524 -11.176) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.524 -11.176) (end 1.524 -7.23646) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.524 -7.23646) (end 1.651 -6.985) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.159 -6.985) (end 2.286 -7.23646) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.286 -7.23646) (end 2.286 -11.176) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.286 -11.176) (end 2.794 -11.176) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.794 -11.176) (end 2.794 -7.23646) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.794 -7.23646) (end 2.921 -6.985) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.429 -6.985) (end 3.556 -7.23646) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.556 -7.23646) (end 3.556 -11.176) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.556 -11.176) (end 4.064 -11.176) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.064 -11.176) (end 4.064 -7.23646) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.064 -7.23646) (end 4.191 -6.985) (layer F.SilkS) (width 0.15)) + (fp_line (start -6.55574 -11.07948) (end -6.55574 -7.73684) (layer F.SilkS) (width 0.15)) + (fp_line (start -6.55574 -7.73684) (end -6.20522 -7.73684) (layer F.SilkS) (width 0.15)) + (fp_line (start -6.20522 -7.73684) (end -6.20522 -11.07948) (layer F.SilkS) (width 0.15)) + (fp_line (start 6.19252 -11.07948) (end 6.19252 -7.73684) (layer F.SilkS) (width 0.15)) + (fp_line (start 6.19252 -7.73684) (end 6.54304 -7.73684) (layer F.SilkS) (width 0.15)) + (fp_line (start 6.54304 -7.73684) (end 6.54304 -11.16838) (layer F.SilkS) (width 0.15)) + (fp_arc (start -6.39826 -9.99998) (end -6.74878 -9.99998) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -6.39826 -9.99998) (end -6.39826 -10.34796) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -6.39826 -8.49884) (end -6.04774 -8.49884) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -6.39826 -8.49884) (end -6.39826 -8.14832) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 6.39826 -9.99998) (end 6.04774 -9.99998) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 6.39826 -9.99998) (end 6.39826 -10.34796) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 6.39826 -8.49884) (end 6.74878 -8.49884) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 6.39826 -8.49884) (end 6.39826 -8.14832) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -3.81 -11.19886) (size 0.99822 2.09804) (layers F.Cu F.Paste F.Mask)) + (pad 2 smd rect (at -2.54 -11.19886) (size 0.99822 2.09804) (layers F.Cu F.Paste F.Mask)) + (pad 3 smd rect (at -1.27 -11.19886) (size 0.99822 2.09804) (layers F.Cu F.Paste F.Mask)) + (pad 4 smd rect (at 0 -11.19886) (size 0.99822 2.09804) (layers F.Cu F.Paste F.Mask)) + (pad 5 smd rect (at 1.27 -11.19886) (size 0.99822 2.09804) (layers F.Cu F.Paste F.Mask)) + (pad 6 smd rect (at 2.54 -11.19886) (size 0.99822 2.09804) (layers F.Cu F.Paste F.Mask)) + (pad 7 smd rect (at 3.81 -11.19886) (size 0.99822 2.09804) (layers F.Cu F.Paste F.Mask)) + (pad M1 thru_hole oval (at -6.39826 -9.24814) (size 1.27 2.54) (drill 0.6985) (layers F&B.Cu F.Paste F.SilkS F.Mask)) + (pad M2 thru_hole oval (at 6.39826 -9.24814) (size 1.27 2.54) (drill 0.6985) (layers F&B.Cu F.Paste F.SilkS F.Mask)) +) diff --git a/PCB/.pretty/SATA-7_THT_VERT_1.kicad_mod b/PCB/.pretty/SATA-7_THT_VERT_1.kicad_mod new file mode 100644 index 00000000..ccfc7164 --- /dev/null +++ b/PCB/.pretty/SATA-7_THT_VERT_1.kicad_mod @@ -0,0 +1,21 @@ +(module SATA-7_THT_VERT_1 (layer F.Cu) (tedit 0) + (fp_text reference REF** (at 0 -4.191) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value SATA-7_THT_VERT_1 (at 0 -2.286) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -8.45 -3.225) (end 8.45 -3.225) (layer F.SilkS) (width 0.15)) + (fp_line (start 8.45 -3.225) (end 8.45 3.225) (layer F.SilkS) (width 0.15)) + (fp_line (start 8.45 3.225) (end -8.45 3.225) (layer F.SilkS) (width 0.15)) + (fp_line (start -8.45 3.225) (end -8.45 -3.225) (layer F.SilkS) (width 0.15)) + (pad 9 thru_hole circle (at 6.48 0) (size 2.5 2.5) (drill 1.35) (layers *.Cu *.Mask F.SilkS)) + (pad 2 thru_hole oval (at 2.54 -0.5) (size 1.1 1.3) (drill 0.74) (layers *.Cu *.Mask F.SilkS)) + (pad 8 thru_hole circle (at -6.48 0) (size 2.5 2.5) (drill 1.35) (layers *.Cu *.Mask F.SilkS)) + (pad 3 thru_hole oval (at 1.27 -0.5) (size 1.1 1.3) (drill 0.74) (layers *.Cu *.Mask F.SilkS)) + (pad 5 thru_hole oval (at -1.27 -0.5) (size 1.1 1.3) (drill 0.74) (layers *.Cu *.Mask F.SilkS)) + (pad 6 thru_hole oval (at -2.54 -0.5) (size 1.1 1.3) (drill 0.74) (layers *.Cu *.Mask F.SilkS)) + (pad 7 thru_hole oval (at -3.81 0.5) (size 1.1 1.3) (drill 0.74) (layers *.Cu *.Mask F.SilkS)) + (pad 4 thru_hole oval (at 0 0.5) (size 1.1 1.3) (drill 0.74) (layers *.Cu *.Mask F.SilkS)) + (pad 1 thru_hole oval (at 3.81 0.5) (size 1.1 1.3) (drill 0.74) (layers *.Cu *.Mask F.SilkS)) +) diff --git a/PCB/.pretty/SATA-7_THT_VERT_2.kicad_mod b/PCB/.pretty/SATA-7_THT_VERT_2.kicad_mod new file mode 100644 index 00000000..3926c10d --- /dev/null +++ b/PCB/.pretty/SATA-7_THT_VERT_2.kicad_mod @@ -0,0 +1,21 @@ +(module SATA-7_THT_VERT_2 (layer F.Cu) (tedit 0) + (fp_text reference REF** (at 0.6 -3.9) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value SATA-7_THT_VERT_2 (at 0.5 -1.7) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -8.3 -2.5) (end 8.3 -2.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 8.3 -2.5) (end 8.3 2.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 8.3 2.5) (end -8.3 2.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -8.3 2.5) (end -8.3 -2.5) (layer F.SilkS) (width 0.15)) + (pad 9 thru_hole circle (at 6.27 0) (size 2.5 2.5) (drill 1.35) (layers *.Cu *.Mask F.SilkS)) + (pad 2 thru_hole oval (at 2.54 0) (size 1.1 1.3) (drill 0.74) (layers *.Cu *.Mask F.SilkS)) + (pad 8 thru_hole circle (at -6.56 -1) (size 2.5 2.5) (drill 1.35) (layers *.Cu *.Mask F.SilkS)) + (pad 3 thru_hole oval (at 1.27 0) (size 1.1 1.3) (drill 0.74) (layers *.Cu *.Mask F.SilkS)) + (pad 5 thru_hole oval (at -1.27 0) (size 1.1 1.3) (drill 0.74) (layers *.Cu *.Mask F.SilkS)) + (pad 6 thru_hole oval (at -2.54 0) (size 1.1 1.3) (drill 0.74) (layers *.Cu *.Mask F.SilkS)) + (pad 7 thru_hole oval (at -3.81 1.5) (size 1.1 1.3) (drill 0.74) (layers *.Cu *.Mask F.SilkS)) + (pad 4 thru_hole oval (at 0 1.5) (size 1.1 1.3) (drill 0.74) (layers *.Cu *.Mask F.SilkS)) + (pad 1 thru_hole oval (at 3.81 1.5) (size 1.1 1.3) (drill 0.74) (layers *.Cu *.Mask F.SilkS)) +) diff --git a/PCB/.pretty/SDS-50J.kicad_mod b/PCB/.pretty/SDS-50J.kicad_mod new file mode 100644 index 00000000..0c9283b3 --- /dev/null +++ b/PCB/.pretty/SDS-50J.kicad_mod @@ -0,0 +1,32 @@ +(module SDS-50J (layer F.Cu) (tedit 5602A6D3) + (descr "SDS-50J, standard DIN connector, 5 pins, midi") + (tags "SDS-50J DIN 5-pins connector midi") + (fp_text reference REF** (at 0 4.75) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value SDS-50J (at 7.493 -4.2672 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 17.75 3.9) (end 17.75 -12.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 17.75 -12.8) (end -2.75 -12.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.75 -12.8) (end -2.75 3.9) (layer F.CrtYd) (width 0.05)) + (fp_line (start 17.75 3.9) (end -2.75 3.9) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.46 3.389) (end -2.5 3.389) (layer F.SilkS) (width 0.15)) + (fp_line (start 11.444 3.389) (end 3.57 3.389) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.5 3.389) (end -2.5 -12.538) (layer F.SilkS) (width 0.15)) + (fp_line (start 17.5 -12.538) (end -2.5 -12.538) (layer F.SilkS) (width 0.15)) + (fp_line (start 17.5 3.389) (end 17.5 -12.538) (layer F.SilkS) (width 0.15)) + (fp_line (start 17.5 3.389) (end 13.5395 3.389) (layer F.SilkS) (width 0.15)) + (pad 5 thru_hole circle (at 12.5 2.5) (size 2.3 2.3) (drill 1.3) (layers *.Cu *.Mask)) + (pad "" thru_hole circle (at 5 -10) (size 2 2) (drill 1.3) (layers *.Cu *.Mask F.SilkS)) + (pad 3 thru_hole circle (at 15 0) (size 2.3 2.3) (drill 1.3) (layers *.Cu *.Mask)) + (pad 2 thru_hole circle (at 7.5 0) (size 2.3 2.3) (drill 1.3) (layers *.Cu *.Mask)) + (pad 1 thru_hole circle (at 0 0) (size 2.3 2.3) (drill 1.3) (layers *.Cu *.Mask)) + (pad 4 thru_hole circle (at 2.5 2.5) (size 2.3 2.3) (drill 1.3) (layers *.Cu *.Mask)) + (pad "" thru_hole circle (at 10 -10) (size 2 2) (drill 1.3) (layers *.Cu *.Mask F.SilkS)) + (model Connect.3dshapes/SDS-50J.wrl + (at (xyz 0.295 0.495 0)) + (scale (xyz 0.39 0.39 0.39)) + (rotate (xyz -90 0 180)) + ) +) diff --git a/PCB/.pretty/SD_Card_Receptacle.kicad_mod b/PCB/.pretty/SD_Card_Receptacle.kicad_mod new file mode 100644 index 00000000..563fcd80 --- /dev/null +++ b/PCB/.pretty/SD_Card_Receptacle.kicad_mod @@ -0,0 +1,39 @@ +(module SD_Card_Receptacle (layer F.Cu) (tedit 54A89A84) + (fp_text reference REF** (at 9.96386 19.9312) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value SD_Card_Receptacle (at -1.2 9) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -14.7 41.05) (end 15.5 41.05) (layer F.CrtYd) (width 0.05)) + (fp_line (start 15.5 41.05) (end 15.5 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 15.5 -1.25) (end -14.7 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -14.7 -1.25) (end -14.7 41.05) (layer F.CrtYd) (width 0.05)) + (fp_line (start 7.9 0) (end 8.4 0) (layer F.SilkS) (width 0.15)) + (fp_line (start 5.4 0) (end 5.9 0) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.1 0) (end -1.6 0) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.6 0) (end -4.1 0) (layer F.SilkS) (width 0.15)) + (fp_line (start -7 0) (end -6.6 0) (layer F.SilkS) (width 0.15)) + (fp_line (start -12.1 0) (end -10.7 0) (layer F.SilkS) (width 0.15)) + (fp_line (start -14 20.6) (end -14 0) (layer F.SilkS) (width 0.15)) + (fp_line (start 14.9 19.4) (end 14.9 0) (layer F.SilkS) (width 0.15)) + (fp_line (start 14.9 0) (end 10.4 0) (layer F.SilkS) (width 0.15)) + (fp_line (start 14.9 29.8) (end -14 29.8) (layer F.SilkS) (width 0.15)) + (fp_line (start -14 29.8) (end -14 23.8) (layer F.SilkS) (width 0.15)) + (fp_line (start 14.9 29.8) (end 14.9 22.6) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at 6.875 0) (size 1 1.5) (layers F.Cu F.Paste F.Mask)) + (pad 2 smd rect (at 4.375 0) (size 1 1.5) (layers F.Cu F.Paste F.Mask)) + (pad 3 smd rect (at 1.075 0) (size 1 1.5) (layers F.Cu F.Paste F.Mask)) + (pad 4 smd rect (at -0.625 0) (size 1 1.5) (layers F.Cu F.Paste F.Mask)) + (pad 5 smd rect (at -3.125 0) (size 1 1.5) (layers F.Cu F.Paste F.Mask)) + (pad 6 smd rect (at -5.625 0) (size 1 1.5) (layers F.Cu F.Paste F.Mask)) + (pad 7 smd rect (at -8.05 0) (size 1 1.5) (layers F.Cu F.Paste F.Mask)) + (pad 8 smd rect (at -9.75 0) (size 1 1.5) (layers F.Cu F.Paste F.Mask)) + (pad 9 smd rect (at 9.375 0) (size 1 1.5) (layers F.Cu F.Paste F.Mask)) + (pad 10 smd rect (at 2.725 0) (size 1 1.5) (layers F.Cu F.Paste F.Mask)) + (pad 11 smd rect (at -13.1 0) (size 1 1.5) (layers F.Cu F.Paste F.Mask)) + (pad 12 smd rect (at 14.4 21) (size 1.2 2.2) (layers F.Cu F.Paste F.Mask)) + (pad 13 smd rect (at -13.6 22.2) (size 1.2 2.2) (layers F.Cu F.Paste F.Mask)) + (pad "" np_thru_hole circle (at 12.1 24.3) (size 1.5 1.5) (drill 1.5) (layers *.Cu *.Mask F.SilkS)) + (pad "" np_thru_hole circle (at -12.1 24.3) (size 1.5 1.5) (drill 1.5) (layers *.Cu *.Mask F.SilkS)) +) diff --git a/PCB/.pretty/SMB_Straight.kicad_mod b/PCB/.pretty/SMB_Straight.kicad_mod new file mode 100644 index 00000000..4ce4041d --- /dev/null +++ b/PCB/.pretty/SMB_Straight.kicad_mod @@ -0,0 +1,32 @@ +(module SMB_Straight (layer F.Cu) (tedit 5541ED7C) + (descr "SMB pcb mounting jack") + (tags "SMB Jack Striaght") + (fp_text reference REF** (at -2 -5) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value SMB_Straight (at 0.25 0) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -4.25 -4.25) (end 4.25 -4.25) (layer B.CrtYd) (width 0.05)) + (fp_line (start 4.25 -4.25) (end 4.25 4.25) (layer B.CrtYd) (width 0.05)) + (fp_line (start 4.25 4.25) (end -4.25 4.25) (layer B.CrtYd) (width 0.05)) + (fp_line (start -4.25 4.25) (end -4.25 -4.25) (layer B.CrtYd) (width 0.05)) + (fp_line (start 4.25 4.25) (end -4.25 4.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -4.25 4.25) (end -4.25 -4.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 4.25 -4.25) (end 4.25 4.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -4.25 -4.25) (end 4.25 -4.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1 -3.5052) (end 1 -3.5052) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.5052 -1) (end 3.5052 1) (layer F.SilkS) (width 0.15)) + (fp_line (start 1 3.5052) (end -1 3.5052) (layer F.SilkS) (width 0.15)) + (fp_line (start -3.5052 1) (end -3.5052 -1) (layer F.SilkS) (width 0.15)) + (pad 2 thru_hole circle (at -2.54 2.54) (size 2.74 2.74) (drill 1.7) (layers *.Cu *.Mask F.SilkS)) + (pad 2 thru_hole circle (at 2.54 2.54) (size 2.74 2.74) (drill 1.7) (layers *.Cu *.Mask F.SilkS)) + (pad 2 thru_hole circle (at 2.54 -2.54) (size 2.74 2.74) (drill 1.7) (layers *.Cu *.Mask F.SilkS)) + (pad 2 thru_hole circle (at -2.54 -2.54) (size 2.74 2.74) (drill 1.7) (layers *.Cu *.Mask F.SilkS)) + (pad 1 thru_hole circle (at 0 0) (size 2.24 2.24) (drill 1.2) (layers *.Cu *.Mask F.SilkS)) + (model Connect.3dshapes/SMB_Straight.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) +) diff --git a/PCB/.pretty/SOC676BR.kicad_mod b/PCB/.pretty/SOC676BR.kicad_mod new file mode 100644 index 00000000..5d24e597 --- /dev/null +++ b/PCB/.pretty/SOC676BR.kicad_mod @@ -0,0 +1,29 @@ +(module SOC676BR (layer F.Cu) (tedit 0) + (descr "SOCAPEX 6 pins vertical shape - large") + (tags "SOCAPEX CONN") + (fp_text reference REF** (at 4.953 -2.54) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value SOC676BR (at -6.858 -2.667) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 3.81 0) (end 3.81 -1.016) (layer F.SilkS) (width 0.15)) + (fp_circle (center -1.27 0) (end -1.27 -1.016) (layer F.SilkS) (width 0.15)) + (fp_circle (center -6.35 0) (end -6.35 -1.016) (layer F.SilkS) (width 0.15)) + (fp_line (start -7.62 2.159) (end -10.16 2.159) (layer F.SilkS) (width 0.15)) + (fp_line (start -10.16 2.159) (end -10.16 1.397) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.62 2.159) (end 10.16 2.159) (layer F.SilkS) (width 0.15)) + (fp_line (start 10.16 2.159) (end 10.16 1.397) (layer F.SilkS) (width 0.15)) + (fp_line (start -12.065 -1.397) (end 12.065 -1.397) (layer F.SilkS) (width 0.15)) + (fp_line (start 12.065 -1.397) (end 12.065 1.397) (layer F.SilkS) (width 0.15)) + (fp_line (start 12.065 1.397) (end -12.065 1.397) (layer F.SilkS) (width 0.15)) + (fp_line (start -12.065 1.397) (end -12.065 -1.397) (layer F.SilkS) (width 0.15)) + (fp_line (start -7.62 2.159) (end -7.62 1.397) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.62 1.397) (end 7.62 2.159) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole rect (at -6.35 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 2 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 3 thru_hole circle (at -1.27 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 4 thru_hole circle (at 1.27 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 5 thru_hole circle (at 3.81 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 6 thru_hole circle (at 6.35 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) +) diff --git a/PCB/.pretty/SOC676C.kicad_mod b/PCB/.pretty/SOC676C.kicad_mod new file mode 100644 index 00000000..11c5a38d --- /dev/null +++ b/PCB/.pretty/SOC676C.kicad_mod @@ -0,0 +1,45 @@ +(module SOC676C (layer F.Cu) (tedit 0) + (descr "SOCAPEX 6 pins horizontal shape") + (tags "SOCAPEX CONN") + (fp_text reference REF** (at 0 7.366 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value SOC676C (at 0 4.318 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 6.35 0) (end 6.35 1.905) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.81 0) (end 3.81 1.905) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.27 0) (end 1.27 1.905) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.27 0) (end -1.27 1.905) (layer F.SilkS) (width 0.15)) + (fp_line (start -3.81 0) (end -3.81 1.905) (layer F.SilkS) (width 0.15)) + (fp_line (start -6.35 0) (end -6.35 1.905) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.794 12.065) (end 2.794 14.478) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.794 14.478) (end 4.826 14.478) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.826 14.478) (end 4.826 12.065) (layer F.SilkS) (width 0.15)) + (fp_line (start -7.366 14.478) (end -5.334 14.478) (layer F.SilkS) (width 0.15)) + (fp_line (start -5.334 14.478) (end -5.334 12.065) (layer F.SilkS) (width 0.15)) + (fp_line (start -7.366 12.065) (end -7.366 14.478) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.254 12.065) (end -0.254 14.478) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.254 14.478) (end -2.286 14.478) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.286 14.478) (end -2.286 12.065) (layer F.SilkS) (width 0.15)) + (fp_line (start -7.62 6.985) (end -10.795 6.985) (layer F.SilkS) (width 0.15)) + (fp_line (start -12.065 10.795) (end -12.065 8.255) (layer F.SilkS) (width 0.15)) + (fp_line (start 10.795 12.065) (end -10.795 12.065) (layer F.SilkS) (width 0.15)) + (fp_line (start 12.065 8.255) (end 12.065 10.795) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.62 6.985) (end 10.795 6.985) (layer F.SilkS) (width 0.15)) + (fp_arc (start -10.795 10.795) (end -10.795 12.065) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -10.795 8.255) (end -12.065 8.255) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 10.795 8.255) (end 10.795 6.985) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 10.795 10.795) (end 12.065 10.795) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_circle (center -9.017 9.525) (end -9.017 8.255) (layer F.SilkS) (width 0.15)) + (fp_circle (center 9.017 9.525) (end 10.287 9.525) (layer F.SilkS) (width 0.15)) + (fp_line (start -7.62 1.905) (end 7.62 1.905) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.62 1.905) (end 7.62 6.985) (layer F.SilkS) (width 0.15)) + (fp_line (start -7.62 6.985) (end -7.62 1.905) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole rect (at -6.35 0 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 2 thru_hole circle (at -3.81 0 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 3 thru_hole circle (at -1.27 0 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 4 thru_hole circle (at 1.27 0 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 5 thru_hole circle (at 3.81 0 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 6 thru_hole circle (at 6.35 0 90) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) +) diff --git a/PCB/.pretty/SOC676NY.kicad_mod b/PCB/.pretty/SOC676NY.kicad_mod new file mode 100644 index 00000000..6b39dd34 --- /dev/null +++ b/PCB/.pretty/SOC676NY.kicad_mod @@ -0,0 +1,27 @@ +(module SOC676NY (layer F.Cu) (tedit 0) + (descr "SOCAPEX 6 pins vertical shape - narrow") + (tags "SOCAPEX CONN") + (fp_text reference REF** (at 4.826 -2.413) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value SOC676NY (at -5.461 -2.667) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -8.89 -0.127) (end -8.89 1.397) (layer F.SilkS) (width 0.15)) + (fp_line (start -8.89 1.397) (end 8.89 1.397) (layer F.SilkS) (width 0.15)) + (fp_line (start 8.89 1.397) (end 8.89 -1.397) (layer F.SilkS) (width 0.15)) + (fp_line (start 8.89 -1.397) (end -8.89 -1.397) (layer F.SilkS) (width 0.15)) + (fp_line (start -8.89 -1.397) (end -8.89 -0.127) (layer F.SilkS) (width 0.15)) + (fp_line (start -8.89 1.397) (end -8.89 2.159) (layer F.SilkS) (width 0.15)) + (fp_line (start -8.89 2.159) (end -7.62 2.159) (layer F.SilkS) (width 0.15)) + (fp_line (start -7.62 2.159) (end -7.62 1.397) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.62 1.397) (end 7.62 2.159) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.62 2.159) (end 8.89 2.159) (layer F.SilkS) (width 0.15)) + (fp_line (start 8.89 2.159) (end 8.89 1.397) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole rect (at -6.35 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 2 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 3 thru_hole circle (at -1.27 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 4 thru_hole circle (at 1.27 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 5 thru_hole circle (at 3.81 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 6 thru_hole circle (at 6.35 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) +) diff --git a/PCB/.pretty/SUBCLICK.kicad_mod b/PCB/.pretty/SUBCLICK.kicad_mod new file mode 100644 index 00000000..5b092a9f --- /dev/null +++ b/PCB/.pretty/SUBCLICK.kicad_mod @@ -0,0 +1,34 @@ +(module SUBCLICK (layer F.Cu) (tedit 0) + (descr "Connecteur Subclick") + (tags "CONN DEV") + (fp_text reference REF** (at 0 6.35) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value SUBCLICK (at -0.254 -6.35) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -2.54 -1.27) (end -1.27 -2.54) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.27 -2.54) (end 17.78 -2.54) (layer F.SilkS) (width 0.15)) + (fp_line (start 17.78 -2.54) (end 17.78 2.54) (layer F.SilkS) (width 0.15)) + (fp_line (start 17.78 2.54) (end -1.27 2.54) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.27 2.54) (end -2.54 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.54 1.27) (end -2.54 -1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start -3.81 -5.08) (end 3.81 -5.08) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.81 -5.08) (end 5.08 -3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start 5.08 -3.81) (end 5.08 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start 5.08 3.81) (end 3.81 5.08) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.81 5.08) (end -3.81 5.08) (layer F.SilkS) (width 0.15)) + (fp_line (start -3.81 5.08) (end -5.08 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start -5.08 3.81) (end -5.08 -3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start -5.08 -3.81) (end -3.81 -5.08) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at 0 0) (size 1.778 1.778) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) + (pad 2 thru_hole circle (at -2.54 -2.54) (size 3.048 3.048) (drill 1.524) (layers *.Cu *.Mask F.SilkS)) + (pad 2 thru_hole circle (at 2.54 -2.54) (size 3.048 3.048) (drill 1.524) (layers *.Cu *.Mask F.SilkS)) + (pad 2 thru_hole circle (at 2.54 2.54) (size 3.048 3.048) (drill 1.524) (layers *.Cu *.Mask F.SilkS)) + (pad 2 thru_hole circle (at -2.54 2.54) (size 3.048 3.048) (drill 1.524) (layers *.Cu *.Mask F.SilkS)) + (model Connect.3dshapes/SUBCLICK.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) +) diff --git a/PCB/.pretty/TE_Futurebus+_5536607-1.kicad_mod b/PCB/.pretty/TE_Futurebus+_5536607-1.kicad_mod new file mode 100644 index 00000000..fec071f6 --- /dev/null +++ b/PCB/.pretty/TE_Futurebus+_5536607-1.kicad_mod @@ -0,0 +1,43 @@ +(module TE_Futurebus+_5536607-1 (layer F.Cu) (tedit 5448B92E) + (tags connector) + (fp_text reference REF** (at 0 -3) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value TE_Futurebus+_5536607-1 (at 0 13) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -13.7 -1.25) (end 7.25 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 7.25 -1.25) (end 7.25 11.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 7.25 11.25) (end -13.7 11.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -13.7 11.25) (end -13.7 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 7 11) (end -1 11) (layer F.SilkS) (width 0.15)) + (fp_line (start -7 -1) (end 7 -1) (layer F.SilkS) (width 0.15)) + (fp_line (start 7 -1) (end 7 11) (layer F.SilkS) (width 0.15)) + (pad "" thru_hole circle (at -4 5) (size 2.05 2.05) (drill 2.05) (layers *.Cu *.Mask)) + (pad "" thru_hole circle (at -4 1) (size 1.5 1.5) (drill 1.5) (layers *.Cu *.Mask)) + (pad "" thru_hole circle (at -4 9) (size 1.5 1.5) (drill 1.5) (layers *.Cu *.Mask)) + (pad 1 thru_hole rect (at 0 4) (size 1.25 1.25) (drill 0.725) (layers *.Cu *.Mask F.SilkS)) + (pad 1 thru_hole rect (at 0 2) (size 1.25 1.25) (drill 0.725) (layers *.Cu *.Mask F.SilkS)) + (pad 1 thru_hole rect (at 0 0) (size 1.25 1.25) (drill 0.725) (layers *.Cu *.Mask F.SilkS)) + (pad 2 thru_hole circle (at 2 4) (size 1.25 1.25) (drill 0.725) (layers *.Cu *.Mask F.SilkS)) + (pad 2 thru_hole circle (at 2 2) (size 1.25 1.25) (drill 0.725) (layers *.Cu *.Mask F.SilkS)) + (pad 2 thru_hole circle (at 2 0) (size 1.25 1.25) (drill 0.725) (layers *.Cu *.Mask F.SilkS)) + (pad 3 thru_hole circle (at 4 4) (size 1.25 1.25) (drill 0.725) (layers *.Cu *.Mask F.SilkS)) + (pad 3 thru_hole circle (at 4 2) (size 1.25 1.25) (drill 0.725) (layers *.Cu *.Mask F.SilkS)) + (pad 3 thru_hole circle (at 4 0) (size 1.25 1.25) (drill 0.725) (layers *.Cu *.Mask F.SilkS)) + (pad 4 thru_hole circle (at 6 4) (size 1.25 1.25) (drill 0.725) (layers *.Cu *.Mask F.SilkS)) + (pad 4 thru_hole circle (at 6 2) (size 1.25 1.25) (drill 0.725) (layers *.Cu *.Mask F.SilkS)) + (pad 4 thru_hole circle (at 6 0) (size 1.25 1.25) (drill 0.725) (layers *.Cu *.Mask F.SilkS)) + (pad 5 thru_hole circle (at 0 6) (size 1.25 1.25) (drill 0.725) (layers *.Cu *.Mask F.SilkS)) + (pad 5 thru_hole circle (at 0 8) (size 1.25 1.25) (drill 0.725) (layers *.Cu *.Mask F.SilkS)) + (pad 5 thru_hole circle (at 0 10) (size 1.25 1.25) (drill 0.725) (layers *.Cu *.Mask F.SilkS)) + (pad 6 thru_hole circle (at 2 10) (size 1.25 1.25) (drill 0.725) (layers *.Cu *.Mask F.SilkS)) + (pad 6 thru_hole circle (at 2 8) (size 1.25 1.25) (drill 0.725) (layers *.Cu *.Mask F.SilkS)) + (pad 6 thru_hole circle (at 2 6) (size 1.25 1.25) (drill 0.725) (layers *.Cu *.Mask F.SilkS)) + (pad 7 thru_hole circle (at 4 6) (size 1.25 1.25) (drill 0.725) (layers *.Cu *.Mask F.SilkS)) + (pad 7 thru_hole circle (at 4 8) (size 1.25 1.25) (drill 0.725) (layers *.Cu *.Mask F.SilkS)) + (pad 7 thru_hole circle (at 4 10) (size 1.25 1.25) (drill 0.725) (layers *.Cu *.Mask F.SilkS)) + (pad 8 thru_hole circle (at 6 10) (size 1.25 1.25) (drill 0.725) (layers *.Cu *.Mask F.SilkS)) + (pad 8 thru_hole circle (at 6 8) (size 1.25 1.25) (drill 0.725) (layers *.Cu *.Mask F.SilkS)) + (pad 8 thru_hole circle (at 6 6) (size 1.25 1.25) (drill 0.725) (layers *.Cu *.Mask F.SilkS)) +) diff --git a/PCB/.pretty/USB_A.kicad_mod b/PCB/.pretty/USB_A.kicad_mod new file mode 100644 index 00000000..e53d8601 --- /dev/null +++ b/PCB/.pretty/USB_A.kicad_mod @@ -0,0 +1,29 @@ +(module USB_A (layer F.Cu) (tedit 5543E289) + (descr "USB A connector") + (tags "USB USB_A") + (fp_text reference REF** (at 0 -2.35) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value USB_A (at 3.83794 7.43458) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -5.3 13.2) (end -5.3 -1.4) (layer F.CrtYd) (width 0.05)) + (fp_line (start 11.95 -1.4) (end 11.95 13.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start -5.3 13.2) (end 11.95 13.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start -5.3 -1.4) (end 11.95 -1.4) (layer F.CrtYd) (width 0.05)) + (fp_line (start 11.04986 -1.14512) (end 11.04986 12.95188) (layer F.SilkS) (width 0.15)) + (fp_line (start -3.93614 12.95188) (end -3.93614 -1.14512) (layer F.SilkS) (width 0.15)) + (fp_line (start 11.04986 -1.14512) (end -3.93614 -1.14512) (layer F.SilkS) (width 0.15)) + (fp_line (start 11.04986 12.95188) (end -3.93614 12.95188) (layer F.SilkS) (width 0.15)) + (pad 4 thru_hole circle (at 7.11286 -0.00212 270) (size 1.50114 1.50114) (drill 1.00076) (layers *.Cu *.Mask F.SilkS)) + (pad 3 thru_hole circle (at 4.57286 -0.00212 270) (size 1.50114 1.50114) (drill 1.00076) (layers *.Cu *.Mask F.SilkS)) + (pad 2 thru_hole circle (at 2.54086 -0.00212 270) (size 1.50114 1.50114) (drill 1.00076) (layers *.Cu *.Mask F.SilkS)) + (pad 1 thru_hole circle (at 0.00086 -0.00212 270) (size 1.50114 1.50114) (drill 1.00076) (layers *.Cu *.Mask F.SilkS)) + (pad 5 thru_hole circle (at 10.16086 2.66488 270) (size 2.99974 2.99974) (drill 2.30124) (layers *.Cu *.Mask F.SilkS)) + (pad 5 thru_hole circle (at -3.55514 2.66488 270) (size 2.99974 2.99974) (drill 2.30124) (layers *.Cu *.Mask F.SilkS)) + (model Connect.3dshapes/USB_A.wrl + (at (xyz 0.14 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 90)) + ) +) diff --git a/PCB/.pretty/USB_A_Vertical.kicad_mod b/PCB/.pretty/USB_A_Vertical.kicad_mod new file mode 100644 index 00000000..080d9b10 --- /dev/null +++ b/PCB/.pretty/USB_A_Vertical.kicad_mod @@ -0,0 +1,33 @@ +(module USB_A_Vertical (layer F.Cu) (tedit 554409CC) + (descr "USB A vertical female connector, right angle") + (tags "USB_A_Vertical female connector angled 73725-0110BLF") + (fp_text reference REF** (at 0 8.95) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value USB_A_Vertical (at -0.05 -5.8) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 3.9 -12.75) (end 3.9 7.55) (layer F.CrtYd) (width 0.05)) + (fp_line (start 3.9 7.55) (end -3.9 7.55) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.9 7.55) (end -3.9 -12.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.9 -12.75) (end 3.9 -12.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 3 -1.82) (end 3 -12.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -3 -1.82) (end -3 -12.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -3 -12.5) (end 3 -12.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -3 0.36) (end -3 5.18) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.2 7.2735) (end -2.2 7.2735) (layer F.SilkS) (width 0.15)) + (fp_line (start 3 0.36) (end 3 5.18) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at 0 0) (size 1.62 1.62) (drill 0.92) (layers *.Cu *.Mask)) + (pad 2 thru_hole circle (at 0 2) (size 1.62 1.62) (drill 0.92) (layers *.Cu *.Mask)) + (pad 3 thru_hole circle (at 0 4) (size 1.62 1.62) (drill 0.92) (layers *.Cu *.Mask)) + (pad 5 thru_hole circle (at 2.72 -0.73) (size 1.85 1.85) (drill 1.35) (layers *.Cu *.Mask F.SilkS)) + (pad 4 thru_hole circle (at 0 6) (size 1.62 1.62) (drill 0.92) (layers *.Cu *.Mask)) + (pad 5 thru_hole circle (at 2.72 6.27) (size 1.85 1.85) (drill 1.35) (layers *.Cu *.Mask F.SilkS)) + (pad 5 thru_hole circle (at -2.72 -0.73) (size 1.85 1.85) (drill 1.35) (layers *.Cu *.Mask F.SilkS)) + (pad 5 thru_hole circle (at -2.72 6.27) (size 1.85 1.85) (drill 1.35) (layers *.Cu *.Mask F.SilkS)) + (model Connect.3dshapes/USB_A_Vertical.wrl + (at (xyz 0.015 -0.02 0.05)) + (scale (xyz 0.412 0.412 0.412)) + (rotate (xyz 0 -90 180)) + ) +) diff --git a/PCB/.pretty/USB_B.kicad_mod b/PCB/.pretty/USB_B.kicad_mod new file mode 100644 index 00000000..f63ca566 --- /dev/null +++ b/PCB/.pretty/USB_B.kicad_mod @@ -0,0 +1,31 @@ +(module USB_B (layer F.Cu) (tedit 55B36073) + (descr "USB B connector") + (tags "USB_B USB_DEV") + (fp_text reference REF** (at 11.049 1.27 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value USB_B (at 4.699 1.27 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 15.25 8.9) (end -2.3 8.9) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.3 8.9) (end -2.3 -6.35) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.3 -6.35) (end 15.25 -6.35) (layer F.CrtYd) (width 0.05)) + (fp_line (start 15.25 -6.35) (end 15.25 8.9) (layer F.CrtYd) (width 0.05)) + (fp_line (start 6.35 7.366) (end 14.986 7.366) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.032 7.366) (end 3.048 7.366) (layer F.SilkS) (width 0.15)) + (fp_line (start 6.35 -4.826) (end 14.986 -4.826) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.032 -4.826) (end 3.048 -4.826) (layer F.SilkS) (width 0.15)) + (fp_line (start 14.986 -4.826) (end 14.986 7.366) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.032 7.366) (end -2.032 -4.826) (layer F.SilkS) (width 0.15)) + (pad 2 thru_hole circle (at 0 2.54 270) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 1 thru_hole circle (at 0 0 270) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 4 thru_hole circle (at 1.99898 0 270) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 3 thru_hole circle (at 1.99898 2.54 270) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 5 thru_hole circle (at 4.699 7.26948 270) (size 2.70002 2.70002) (drill 2.30124) (layers *.Cu *.Mask F.SilkS)) + (pad 5 thru_hole circle (at 4.699 -4.72948 270) (size 2.70002 2.70002) (drill 2.30124) (layers *.Cu *.Mask F.SilkS)) + (model Connect.3dshapes/USB_B.wrl + (at (xyz 0.185 -0.05 0.001)) + (scale (xyz 0.3937 0.3937 0.3937)) + (rotate (xyz 0 0 -90)) + ) +) diff --git a/PCB/.pretty/USB_Micro-B.kicad_mod b/PCB/.pretty/USB_Micro-B.kicad_mod new file mode 100644 index 00000000..708accf9 --- /dev/null +++ b/PCB/.pretty/USB_Micro-B.kicad_mod @@ -0,0 +1,29 @@ +(module USB_Micro-B (layer F.Cu) (tedit 5543E447) + (descr "Micro USB Type B Receptacle") + (tags "USB USB_B USB_micro USB_OTG") + (attr smd) + (fp_text reference REF** (at 0 -3.45) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value USB_Micro-B (at 0 4.8) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -4.6 -2.8) (end 4.6 -2.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 4.6 -2.8) (end 4.6 4.05) (layer F.CrtYd) (width 0.05)) + (fp_line (start 4.6 4.05) (end -4.6 4.05) (layer F.CrtYd) (width 0.05)) + (fp_line (start -4.6 4.05) (end -4.6 -2.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -4.3509 3.81746) (end 4.3491 3.81746) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.3509 -2.58754) (end 4.3491 -2.58754) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.3491 -2.58754) (end 4.3491 3.81746) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.3491 2.58746) (end -4.3509 2.58746) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.3509 3.81746) (end -4.3509 -2.58754) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -1.3009 -1.56254 90) (size 1.35 0.4) (layers F.Cu F.Paste F.Mask)) + (pad 2 smd rect (at -0.6509 -1.56254 90) (size 1.35 0.4) (layers F.Cu F.Paste F.Mask)) + (pad 3 smd rect (at -0.0009 -1.56254 90) (size 1.35 0.4) (layers F.Cu F.Paste F.Mask)) + (pad 4 smd rect (at 0.6491 -1.56254 90) (size 1.35 0.4) (layers F.Cu F.Paste F.Mask)) + (pad 5 smd rect (at 1.2991 -1.56254 90) (size 1.35 0.4) (layers F.Cu F.Paste F.Mask)) + (pad 6 thru_hole oval (at -2.5009 -1.56254 90) (size 0.95 1.25) (drill oval 0.55 0.85) (layers *.Cu *.Mask F.SilkS)) + (pad 6 thru_hole oval (at 2.4991 -1.56254 90) (size 0.95 1.25) (drill oval 0.55 0.85) (layers *.Cu *.Mask F.SilkS)) + (pad 6 thru_hole oval (at -3.5009 1.13746 90) (size 1.55 1) (drill oval 1.15 0.5) (layers *.Cu *.Mask F.SilkS)) + (pad 6 thru_hole oval (at 3.4991 1.13746 90) (size 1.55 1) (drill oval 1.15 0.5) (layers *.Cu *.Mask F.SilkS)) +) diff --git a/PCB/.pretty/USB_Micro-B_WIDE.kicad_mod b/PCB/.pretty/USB_Micro-B_WIDE.kicad_mod new file mode 100644 index 00000000..658d273b --- /dev/null +++ b/PCB/.pretty/USB_Micro-B_WIDE.kicad_mod @@ -0,0 +1,29 @@ +(module USB_Micro-B_WIDE (layer F.Cu) (tedit 56F1EFCA) + (descr "Micro USB Type B Receptacle") + (tags "USB USB_B USB_micro USB_OTG") + (attr smd) + (fp_text reference REF** (at 0 -3.45) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value USB_Micro-B (at 0 4.8) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -4.6 -2.8) (end 4.6 -2.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 4.6 -2.8) (end 4.6 4.05) (layer F.CrtYd) (width 0.05)) + (fp_line (start 4.6 4.05) (end -4.6 4.05) (layer F.CrtYd) (width 0.05)) + (fp_line (start -4.6 4.05) (end -4.6 -2.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -4.3509 3.81746) (end 4.3491 3.81746) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.3509 -2.58754) (end 4.3491 -2.58754) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.3491 -2.58754) (end 4.3491 3.81746) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.3491 2.58746) (end -4.3509 2.58746) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.3509 3.81746) (end -4.3509 -2.58754) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -1.3009 -1.56254 90) (size 1.35 0.4) (layers F.Cu F.Paste F.Mask)) + (pad 2 smd rect (at -0.6509 -1.56254 90) (size 1.35 0.4) (layers F.Cu F.Paste F.Mask)) + (pad 3 smd rect (at -0.0009 -1.56254 90) (size 1.35 0.4) (layers F.Cu F.Paste F.Mask)) + (pad 4 smd rect (at 0.6491 -1.56254 90) (size 1.35 0.4) (layers F.Cu F.Paste F.Mask)) + (pad 5 smd rect (at 1.2991 -1.56254 90) (size 1.35 0.4) (layers F.Cu F.Paste F.Mask)) + (pad 6 thru_hole oval (at -2.5009 -1.56254 90) (size 0.95 1.4) (drill oval 0.55 1) (layers *.Cu *.Mask F.SilkS)) + (pad 6 thru_hole oval (at 2.4991 -1.56254 90) (size 0.95 1.4) (drill oval 0.55 1) (layers *.Cu *.Mask F.SilkS)) + (pad 6 thru_hole oval (at -3.5009 1.13746 90) (size 1.55 1.2) (drill oval 1.15 0.7) (layers *.Cu *.Mask F.SilkS)) + (pad 6 thru_hole oval (at 3.4991 1.13746 90) (size 1.55 1.2) (drill oval 1.15 0.7) (layers *.Cu *.Mask F.SilkS)) +) diff --git a/PCB/.pretty/USB_Mini-B.kicad_mod b/PCB/.pretty/USB_Mini-B.kicad_mod new file mode 100644 index 00000000..ceb45e0b --- /dev/null +++ b/PCB/.pretty/USB_Mini-B.kicad_mod @@ -0,0 +1,31 @@ +(module USB_Mini-B (layer F.Cu) (tedit 5543E571) + (descr "USB Mini-B 5-pin SMD connector") + (tags "USB USB_B USB_Mini connector") + (attr smd) + (fp_text reference REF** (at 0 6.90118) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value USB_Mini-B (at 0 -7.0993) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -4.85 -5.7) (end 4.85 -5.7) (layer F.CrtYd) (width 0.05)) + (fp_line (start 4.85 -5.7) (end 4.85 5.7) (layer F.CrtYd) (width 0.05)) + (fp_line (start 4.85 5.7) (end -4.85 5.7) (layer F.CrtYd) (width 0.05)) + (fp_line (start -4.85 5.7) (end -4.85 -5.7) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.59918 -3.85064) (end -3.59918 3.85064) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.59994 -3.85064) (end -4.59994 3.85064) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.59994 3.85064) (end 4.59994 3.85064) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.59994 3.85064) (end 4.59994 -3.85064) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.59994 -3.85064) (end -4.59994 -3.85064) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at 3.44932 -1.6002) (size 2.30124 0.50038) (layers F.Cu F.Paste F.Mask)) + (pad 2 smd rect (at 3.44932 -0.8001) (size 2.30124 0.50038) (layers F.Cu F.Paste F.Mask)) + (pad 3 smd rect (at 3.44932 0) (size 2.30124 0.50038) (layers F.Cu F.Paste F.Mask)) + (pad 4 smd rect (at 3.44932 0.8001) (size 2.30124 0.50038) (layers F.Cu F.Paste F.Mask)) + (pad 5 smd rect (at 3.44932 1.6002) (size 2.30124 0.50038) (layers F.Cu F.Paste F.Mask)) + (pad 6 smd rect (at 3.35026 -4.45008) (size 2.49936 1.99898) (layers F.Cu F.Paste F.Mask)) + (pad 6 smd rect (at -2.14884 -4.45008) (size 2.49936 1.99898) (layers F.Cu F.Paste F.Mask)) + (pad 6 smd rect (at 3.35026 4.45008) (size 2.49936 1.99898) (layers F.Cu F.Paste F.Mask)) + (pad 6 smd rect (at -2.14884 4.45008) (size 2.49936 1.99898) (layers F.Cu F.Paste F.Mask)) + (pad "" np_thru_hole circle (at 0.8509 -2.19964) (size 0.89916 0.89916) (drill 0.89916) (layers *.Cu *.Mask F.SilkS)) + (pad "" np_thru_hole circle (at 0.8509 2.19964) (size 0.89916 0.89916) (drill 0.89916) (layers *.Cu *.Mask F.SilkS)) +) diff --git a/PCB/.pretty/VASCH10x2.kicad_mod b/PCB/.pretty/VASCH10x2.kicad_mod new file mode 100644 index 00000000..8bb4d8d4 --- /dev/null +++ b/PCB/.pretty/VASCH10x2.kicad_mod @@ -0,0 +1,49 @@ +(module VASCH10x2 (layer F.Cu) (tedit 0) + (descr CONNECTOR) + (tags CONNECTOR) + (attr virtual) + (fp_text reference REF** (at -15.875 -5.715) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value VASCH10x2 (at 0 6.35) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 15.875 3.81) (end 16.51 4.445) (layer F.SilkS) (width 0.15)) + (fp_line (start 15.875 -3.81) (end 16.51 -4.445) (layer F.SilkS) (width 0.15)) + (fp_line (start -15.875 3.81) (end -16.51 4.445) (layer F.SilkS) (width 0.15)) + (fp_line (start -16.51 -4.445) (end -15.875 -3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start -15.875 -3.81) (end -15.875 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start -15.875 3.81) (end -1.905 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.905 3.81) (end -1.905 4.445) (layer F.SilkS) (width 0.15)) + (fp_line (start -15.875 -3.81) (end 15.875 -3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start 15.875 -3.81) (end 15.875 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start 15.875 3.81) (end 1.905 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.905 3.81) (end 1.905 4.445) (layer F.SilkS) (width 0.15)) + (fp_line (start 16.51 -4.445) (end -16.51 -4.445) (layer F.SilkS) (width 0.15)) + (fp_line (start -16.51 4.445) (end 16.51 4.445) (layer F.SilkS) (width 0.15)) + (fp_line (start -16.51 -4.445) (end -16.51 4.445) (layer F.SilkS) (width 0.15)) + (fp_line (start 16.51 -4.445) (end 16.51 4.445) (layer F.SilkS) (width 0.15)) + (fp_line (start -13.84808 1.9685) (end -13.14958 3.03784) (layer F.SilkS) (width 0.15)) + (fp_line (start -13.14958 3.03784) (end -12.44854 1.9685) (layer F.SilkS) (width 0.15)) + (fp_line (start -12.44854 1.9685) (end -13.84808 1.9685) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -11.43 1.27) (size 1.50622 1.50622) (drill 0.99822) (layers *.Cu *.Mask)) + (pad 2 thru_hole circle (at -11.43 -1.27) (size 1.50622 1.50622) (drill 0.99822) (layers *.Cu *.Mask)) + (pad 3 thru_hole circle (at -8.89 1.27) (size 1.50622 1.50622) (drill 0.99822) (layers *.Cu *.Mask)) + (pad 4 thru_hole circle (at -8.89 -1.27) (size 1.50622 1.50622) (drill 0.99822) (layers *.Cu *.Mask)) + (pad 5 thru_hole circle (at -6.35 1.27) (size 1.50622 1.50622) (drill 0.99822) (layers *.Cu *.Mask)) + (pad 6 thru_hole circle (at -6.35 -1.27) (size 1.50622 1.50622) (drill 0.99822) (layers *.Cu *.Mask)) + (pad 7 thru_hole circle (at -3.81 1.27) (size 1.50622 1.50622) (drill 0.99822) (layers *.Cu *.Mask)) + (pad 8 thru_hole circle (at -3.81 -1.27) (size 1.50622 1.50622) (drill 0.99822) (layers *.Cu *.Mask)) + (pad 9 thru_hole circle (at -1.27 1.27) (size 1.50622 1.50622) (drill 0.99822) (layers *.Cu *.Mask)) + (pad 10 thru_hole circle (at -1.27 -1.27) (size 1.50622 1.50622) (drill 0.99822) (layers *.Cu *.Mask)) + (pad 11 thru_hole circle (at 1.27 1.27) (size 1.50622 1.50622) (drill 0.99822) (layers *.Cu *.Mask)) + (pad 12 thru_hole circle (at 1.27 -1.27) (size 1.50622 1.50622) (drill 0.99822) (layers *.Cu *.Mask)) + (pad 13 thru_hole circle (at 3.81 1.27) (size 1.50622 1.50622) (drill 0.99822) (layers *.Cu *.Mask)) + (pad 14 thru_hole circle (at 3.81 -1.27) (size 1.50622 1.50622) (drill 0.99822) (layers *.Cu *.Mask)) + (pad 15 thru_hole circle (at 6.35 1.27) (size 1.50622 1.50622) (drill 0.99822) (layers *.Cu *.Mask)) + (pad 16 thru_hole circle (at 6.35 -1.27) (size 1.50622 1.50622) (drill 0.99822) (layers *.Cu *.Mask)) + (pad 17 thru_hole circle (at 8.89 1.27) (size 1.50622 1.50622) (drill 0.99822) (layers *.Cu *.Mask)) + (pad 18 thru_hole circle (at 8.89 -1.27) (size 1.50622 1.50622) (drill 0.99822) (layers *.Cu *.Mask)) + (pad 19 thru_hole circle (at 11.43 1.27) (size 1.50622 1.50622) (drill 0.99822) (layers *.Cu *.Mask)) + (pad 20 thru_hole circle (at 11.43 -1.27) (size 1.50622 1.50622) (drill 0.99822) (layers *.Cu *.Mask)) +) diff --git a/PCB/.pretty/VASCH5x2.kicad_mod b/PCB/.pretty/VASCH5x2.kicad_mod new file mode 100644 index 00000000..aba72806 --- /dev/null +++ b/PCB/.pretty/VASCH5x2.kicad_mod @@ -0,0 +1,39 @@ +(module VASCH5x2 (layer F.Cu) (tedit 0) + (descr CONNECTOR) + (tags CONNECTOR) + (attr virtual) + (fp_text reference REF** (at -8.89 -5.08) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value VASCH5x2 (at 1.27 6.35) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -9.525 -3.81) (end -10.16 -4.445) (layer F.SilkS) (width 0.15)) + (fp_line (start -9.525 3.81) (end -10.16 4.445) (layer F.SilkS) (width 0.15)) + (fp_line (start 9.525 3.81) (end 10.16 4.445) (layer F.SilkS) (width 0.15)) + (fp_line (start 9.525 -3.81) (end 10.16 -4.445) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.905 4.445) (end 1.905 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.905 3.81) (end 9.525 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start 9.525 3.81) (end 9.525 -3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start 9.525 -3.81) (end -9.525 -3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start -9.525 -3.81) (end -9.525 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start -9.525 3.81) (end -1.905 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.905 3.81) (end -1.905 4.445) (layer F.SilkS) (width 0.15)) + (fp_line (start -10.16 4.445) (end 10.16 4.445) (layer F.SilkS) (width 0.15)) + (fp_line (start 10.16 -4.445) (end -10.16 -4.445) (layer F.SilkS) (width 0.15)) + (fp_line (start -10.16 -4.445) (end -10.16 4.445) (layer F.SilkS) (width 0.15)) + (fp_line (start 10.16 -4.445) (end 10.16 4.445) (layer F.SilkS) (width 0.15)) + (fp_line (start -7.49808 1.9685) (end -6.79958 3.03784) (layer F.SilkS) (width 0.15)) + (fp_line (start -6.79958 3.03784) (end -6.09854 1.9685) (layer F.SilkS) (width 0.15)) + (fp_line (start -6.09854 1.9685) (end -7.49808 1.9685) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -5.08 1.27) (size 1.50622 1.50622) (drill 0.99822) (layers *.Cu *.Mask)) + (pad 2 thru_hole circle (at -5.08 -1.27) (size 1.50622 1.50622) (drill 0.99822) (layers *.Cu *.Mask)) + (pad 3 thru_hole circle (at -2.54 1.27) (size 1.50622 1.50622) (drill 0.99822) (layers *.Cu *.Mask)) + (pad 4 thru_hole circle (at -2.54 -1.27) (size 1.50622 1.50622) (drill 0.99822) (layers *.Cu *.Mask)) + (pad 5 thru_hole circle (at 0 1.27) (size 1.50622 1.50622) (drill 0.99822) (layers *.Cu *.Mask)) + (pad 6 thru_hole circle (at 0 -1.27) (size 1.50622 1.50622) (drill 0.99822) (layers *.Cu *.Mask)) + (pad 7 thru_hole circle (at 2.54 1.27) (size 1.50622 1.50622) (drill 0.99822) (layers *.Cu *.Mask)) + (pad 8 thru_hole circle (at 2.54 -1.27) (size 1.50622 1.50622) (drill 0.99822) (layers *.Cu *.Mask)) + (pad 9 thru_hole circle (at 5.08 1.27) (size 1.50622 1.50622) (drill 0.99822) (layers *.Cu *.Mask)) + (pad 10 thru_hole circle (at 5.08 -1.27) (size 1.50622 1.50622) (drill 0.99822) (layers *.Cu *.Mask)) +) diff --git a/PCB/.pretty/VASCH8x2.kicad_mod b/PCB/.pretty/VASCH8x2.kicad_mod new file mode 100644 index 00000000..eb20eda3 --- /dev/null +++ b/PCB/.pretty/VASCH8x2.kicad_mod @@ -0,0 +1,45 @@ +(module VASCH8x2 (layer F.Cu) (tedit 0) + (descr CONNECTOR) + (tags CONNECTOR) + (attr virtual) + (fp_text reference REF** (at -12.7 -5.08) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value VASCH8x2 (at 0 6.35) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 13.335 3.81) (end 13.97 4.445) (layer F.SilkS) (width 0.15)) + (fp_line (start 13.335 -3.81) (end 13.97 -4.445) (layer F.SilkS) (width 0.15)) + (fp_line (start -13.335 -3.81) (end -13.97 -4.445) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.905 4.445) (end 1.905 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.905 3.81) (end 13.335 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start 13.335 3.81) (end 13.335 -3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start 13.335 -3.81) (end -13.335 -3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start -13.335 -3.81) (end -13.335 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start -13.335 3.81) (end -13.97 4.445) (layer F.SilkS) (width 0.15)) + (fp_line (start -13.335 3.81) (end -1.905 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.905 3.81) (end -1.905 4.445) (layer F.SilkS) (width 0.15)) + (fp_line (start 13.97 4.445) (end -13.97 4.445) (layer F.SilkS) (width 0.15)) + (fp_line (start -13.97 -4.445) (end 13.97 -4.445) (layer F.SilkS) (width 0.15)) + (fp_line (start -13.97 -4.445) (end -13.97 4.445) (layer F.SilkS) (width 0.15)) + (fp_line (start 13.97 -4.445) (end 13.97 4.445) (layer F.SilkS) (width 0.15)) + (fp_line (start -11.30808 1.9685) (end -10.60958 3.03784) (layer F.SilkS) (width 0.15)) + (fp_line (start -10.60958 3.03784) (end -9.90854 1.9685) (layer F.SilkS) (width 0.15)) + (fp_line (start -9.90854 1.9685) (end -11.30808 1.9685) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -8.89 1.27) (size 1.50622 1.50622) (drill 0.99822) (layers *.Cu *.Mask)) + (pad 2 thru_hole circle (at -8.89 -1.27) (size 1.50622 1.50622) (drill 0.99822) (layers *.Cu *.Mask)) + (pad 3 thru_hole circle (at -6.35 1.27) (size 1.50622 1.50622) (drill 0.99822) (layers *.Cu *.Mask)) + (pad 4 thru_hole circle (at -6.35 -1.27) (size 1.50622 1.50622) (drill 0.99822) (layers *.Cu *.Mask)) + (pad 5 thru_hole circle (at -3.81 1.27) (size 1.50622 1.50622) (drill 0.99822) (layers *.Cu *.Mask)) + (pad 6 thru_hole circle (at -3.81 -1.27) (size 1.50622 1.50622) (drill 0.99822) (layers *.Cu *.Mask)) + (pad 7 thru_hole circle (at -1.27 1.27) (size 1.50622 1.50622) (drill 0.99822) (layers *.Cu *.Mask)) + (pad 8 thru_hole circle (at -1.27 -1.27) (size 1.50622 1.50622) (drill 0.99822) (layers *.Cu *.Mask)) + (pad 9 thru_hole circle (at 1.27 1.27) (size 1.50622 1.50622) (drill 0.99822) (layers *.Cu *.Mask)) + (pad 10 thru_hole circle (at 1.27 -1.27) (size 1.50622 1.50622) (drill 0.99822) (layers *.Cu *.Mask)) + (pad 11 thru_hole circle (at 3.81 1.27) (size 1.50622 1.50622) (drill 0.99822) (layers *.Cu *.Mask)) + (pad 12 thru_hole circle (at 3.81 -1.27) (size 1.50622 1.50622) (drill 0.99822) (layers *.Cu *.Mask)) + (pad 13 thru_hole circle (at 6.35 1.27) (size 1.50622 1.50622) (drill 0.99822) (layers *.Cu *.Mask)) + (pad 14 thru_hole circle (at 6.35 -1.27) (size 1.50622 1.50622) (drill 0.99822) (layers *.Cu *.Mask)) + (pad 15 thru_hole circle (at 8.89 1.27) (size 1.50622 1.50622) (drill 0.99822) (layers *.Cu *.Mask)) + (pad 16 thru_hole circle (at 8.89 -1.27) (size 1.50622 1.50622) (drill 0.99822) (layers *.Cu *.Mask)) +) diff --git a/PCB/.pretty/Wafer_Horizontal10x5.8x7RM2.5-3.kicad_mod b/PCB/.pretty/Wafer_Horizontal10x5.8x7RM2.5-3.kicad_mod new file mode 100644 index 00000000..84d93058 --- /dev/null +++ b/PCB/.pretty/Wafer_Horizontal10x5.8x7RM2.5-3.kicad_mod @@ -0,0 +1,38 @@ +(module Wafer_Horizontal10x5.8x7RM2.5-3 (layer F.Cu) (tedit 556C2A14) + (descr "Gold-Tek horizontal wafer connector with 2.5mm pitch") + (tags "wafer connector horizontal") + (fp_text reference REF** (at 2.54 -3.81) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value Wafer_Horizontal10x5.8x7RM2.5-3 (at 2.54 10.414) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -2.75 -2.75) (end 7.85 -2.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 7.85 -2.75) (end 7.85 9.65) (layer F.CrtYd) (width 0.05)) + (fp_line (start 7.85 9.65) (end -2.75 9.65) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.75 9.65) (end -2.75 -2.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.413 9.271) (end 7.493 9.271) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.413 2.286) (end 7.493 2.286) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.5819 2.286) (end 7.5819 1.397) (layer F.SilkS) (width 0.15)) + (fp_line (start 5.0419 2.159) (end 5.0419 1.397) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.5019 2.286) (end 2.5019 1.397) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.0889 1.397) (end 0.0889 2.286) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.4511 2.286) (end -2.4511 1.397) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.4069 9.271) (end 4.4069 5.715) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.4069 5.715) (end 5.6769 5.715) (layer F.SilkS) (width 0.15)) + (fp_line (start 5.6769 5.715) (end 5.6769 9.271) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5461 9.271) (end -0.5461 5.715) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5461 5.715) (end 0.7239 5.715) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.7239 5.715) (end 0.7239 9.271) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.5819 2.286) (end 7.5819 -2.413) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.5819 -2.413) (end 6.4389 -2.413) (layer F.SilkS) (width 0.15)) + (fp_line (start 6.4389 -2.413) (end 6.4389 2.286) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.4511 -2.413) (end -1.3081 -2.413) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.3081 -2.413) (end -1.3081 2.286) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.4511 2.413) (end -2.4511 -2.413) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.5819 2.286) (end 7.5819 9.271) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.4511 9.271) (end -2.4511 2.286) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole rect (at 0 0) (size 2 2) (drill 1.2) (layers *.Cu *.Mask F.SilkS)) + (pad 2 thru_hole circle (at 2.54 0) (size 2 2) (drill 1.2) (layers *.Cu *.Mask F.SilkS)) + (pad 3 thru_hole circle (at 5.04 0) (size 2 2) (drill 1.2) (layers *.Cu *.Mask F.SilkS)) +) diff --git a/PCB/.pretty/Wafer_Horizontal15x5.8x7RM2.5-5.kicad_mod b/PCB/.pretty/Wafer_Horizontal15x5.8x7RM2.5-5.kicad_mod new file mode 100644 index 00000000..48fafcf1 --- /dev/null +++ b/PCB/.pretty/Wafer_Horizontal15x5.8x7RM2.5-5.kicad_mod @@ -0,0 +1,45 @@ +(module Wafer_Horizontal15x5.8x7RM2.5-5 (layer F.Cu) (tedit 556C2A29) + (descr "Gold-Tek horizontal wafer connector with 2.5mm pitch") + (tags "wafer connector horizontal") + (fp_text reference REF** (at 5.0165 -3.81) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value Wafer_Horizontal15x5.8x7RM2.5-5 (at 5.08 10.414) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -2.75 -2.75) (end 12.95 -2.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 12.95 -2.75) (end 12.95 9.65) (layer F.CrtYd) (width 0.05)) + (fp_line (start 12.95 9.65) (end -2.75 9.65) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.75 9.65) (end -2.75 -2.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 10.0584 2.286) (end 10.0584 1.397) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.5184 2.159) (end 7.5184 1.397) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.9784 2.286) (end 4.9784 1.397) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.5654 1.397) (end 2.5654 2.286) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.0254 2.286) (end 0.0254 1.397) (layer F.SilkS) (width 0.15)) + (fp_line (start 9.4234 9.271) (end 9.4234 5.715) (layer F.SilkS) (width 0.15)) + (fp_line (start 9.4234 5.715) (end 10.6934 5.715) (layer F.SilkS) (width 0.15)) + (fp_line (start 10.6934 5.715) (end 10.6934 9.271) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.6096 9.271) (end -0.6096 5.715) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.6096 5.715) (end 0.6604 5.715) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.6604 5.715) (end 0.6604 9.271) (layer F.SilkS) (width 0.15)) + (fp_line (start 12.5984 2.286) (end 12.5984 -2.413) (layer F.SilkS) (width 0.15)) + (fp_line (start 12.5984 -2.413) (end 11.4554 -2.413) (layer F.SilkS) (width 0.15)) + (fp_line (start 11.4554 -2.413) (end 11.4554 2.286) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.5146 -2.413) (end -1.3716 -2.413) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.3716 -2.413) (end -1.3716 2.286) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.5146 2.413) (end -2.5146 -2.413) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.5146 2.286) (end 12.5984 2.286) (layer F.SilkS) (width 0.15)) + (fp_line (start 12.5984 2.286) (end 12.5984 9.271) (layer F.SilkS) (width 0.15)) + (fp_line (start 12.5984 9.271) (end -2.5146 9.271) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.5146 9.271) (end -2.5146 2.286) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole rect (at 0 0) (size 2 2) (drill 1.2) (layers *.Cu *.Mask F.SilkS)) + (pad 2 thru_hole circle (at 2.5165 0) (size 2 2) (drill 1.2) (layers *.Cu *.Mask F.SilkS)) + (pad 3 thru_hole circle (at 5.0165 0) (size 2 2) (drill 1.2) (layers *.Cu *.Mask F.SilkS)) + (pad 4 thru_hole circle (at 7.5165 0) (size 2 2) (drill 1.2) (layers *.Cu *.Mask F.SilkS)) + (pad 5 thru_hole circle (at 10.0165 0) (size 2 2) (drill 1.2) (layers *.Cu *.Mask F.SilkS)) + (model Connect.3dshapes/Wafer_Horizontal15x5.8x7RM2.5-5.wrl + (at (xyz 0 0 0)) + (scale (xyz 4 4 4)) + (rotate (xyz 0 0 0)) + ) +) diff --git a/PCB/.pretty/Wafer_Horizontal17.5x5.8x7RM2.5-6.kicad_mod b/PCB/.pretty/Wafer_Horizontal17.5x5.8x7RM2.5-6.kicad_mod new file mode 100644 index 00000000..3da8ef40 --- /dev/null +++ b/PCB/.pretty/Wafer_Horizontal17.5x5.8x7RM2.5-6.kicad_mod @@ -0,0 +1,48 @@ +(module Wafer_Horizontal17.5x5.8x7RM2.5-6 (layer F.Cu) (tedit 556C2A3A) + (descr "Gold-Tek horizontal wafer connector with 2.5mm pitch") + (tags "wafer connector horizontal") + (fp_text reference REF** (at 6.4135 -3.81) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value Wafer_Horizontal17.5x5.8x7RM2.5-6 (at 6.35 10.414) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -2.75 -2.75) (end 15.45 -2.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 15.45 -2.75) (end 15.45 9.65) (layer F.CrtYd) (width 0.05)) + (fp_line (start 15.45 9.65) (end -2.75 9.65) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.75 9.65) (end -2.75 -2.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 15.0495 2.286) (end 15.0495 -2.413) (layer F.SilkS) (width 0.15)) + (fp_line (start 15.0495 -2.413) (end 13.7795 -2.413) (layer F.SilkS) (width 0.15)) + (fp_line (start 13.7795 -2.413) (end 13.7795 2.286) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.4765 2.286) (end -2.4765 -2.413) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.4765 -2.413) (end -1.4605 -2.413) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.4605 -2.413) (end -1.2065 -2.413) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.2065 -2.413) (end -1.2065 2.286) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.4765 2.286) (end 15.0495 2.286) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.4765 9.271) (end 15.0495 9.271) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.4445 5.842) (end -0.4445 9.271) (layer F.SilkS) (width 0.15)) + (fp_line (start 15.0495 2.286) (end 15.0495 9.271) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.4765 2.286) (end -2.4765 9.271) (layer F.SilkS) (width 0.15)) + (fp_line (start 12.0015 9.271) (end 12.0015 5.715) (layer F.SilkS) (width 0.15)) + (fp_line (start 12.0015 5.715) (end 13.2715 5.715) (layer F.SilkS) (width 0.15)) + (fp_line (start 13.2715 5.715) (end 13.2715 9.271) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.4445 5.842) (end 0.6985 5.842) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.6985 5.842) (end 0.6985 9.271) (layer F.SilkS) (width 0.15)) + (fp_line (start 12.6365 2.286) (end 12.6365 1.397) (layer F.SilkS) (width 0.15)) + (fp_line (start 9.9695 2.286) (end 9.9695 1.397) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.5565 2.286) (end 7.5565 1.397) (layer F.SilkS) (width 0.15)) + (fp_line (start 5.0165 2.286) (end 5.0165 1.397) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.6035 2.286) (end 2.6035 1.397) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.0635 2.286) (end 0.0635 1.397) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole rect (at 0 0) (size 2 2) (drill 1.2) (layers *.Cu *.Mask F.SilkS)) + (pad 2 thru_hole circle (at 2.5365 0) (size 2 2) (drill 1.2) (layers *.Cu *.Mask F.SilkS)) + (pad 3 thru_hole circle (at 5.0365 0) (size 2 2) (drill 1.2) (layers *.Cu *.Mask F.SilkS)) + (pad 4 thru_hole circle (at 7.5365 0) (size 2 2) (drill 1.2) (layers *.Cu *.Mask F.SilkS)) + (pad 5 thru_hole circle (at 10.0365 0) (size 2 2) (drill 1.2) (layers *.Cu *.Mask F.SilkS)) + (pad 6 thru_hole circle (at 12.5365 0) (size 2 2) (drill 1.2) (layers *.Cu *.Mask F.SilkS)) + (model Connect.3dshapes/Wafer_Horizontal17.5x5.8x7RM2.5-6.wrl + (at (xyz 0 0 0)) + (scale (xyz 4 4 4)) + (rotate (xyz 0 0 0)) + ) +) diff --git a/PCB/.pretty/Wafer_Horizontal20x5.8x7RM2.5-7.kicad_mod b/PCB/.pretty/Wafer_Horizontal20x5.8x7RM2.5-7.kicad_mod new file mode 100644 index 00000000..3b18d9d7 --- /dev/null +++ b/PCB/.pretty/Wafer_Horizontal20x5.8x7RM2.5-7.kicad_mod @@ -0,0 +1,49 @@ +(module Wafer_Horizontal20x5.8x7RM2.5-7 (layer F.Cu) (tedit 556C2A51) + (descr "Gold-Tek horizontal wafer connector with 2.5mm pitch") + (tags "wafer connector horizontal") + (fp_text reference REF** (at 7.62 -3.81) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value Wafer_Horizontal20x5.8x7RM2.5-7 (at 7.62 10.414) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -2.5 -2.75) (end 18 -2.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 18 -2.75) (end 18 9.65) (layer F.CrtYd) (width 0.05)) + (fp_line (start 18 9.65) (end -2.5 9.65) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.5 9.65) (end -2.5 -2.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 14.351 9.271) (end 14.351 5.715) (layer F.SilkS) (width 0.15)) + (fp_line (start 14.351 5.715) (end 15.621 5.715) (layer F.SilkS) (width 0.15)) + (fp_line (start 15.621 5.715) (end 15.621 9.271) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.508 9.271) (end -0.508 5.715) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.508 5.715) (end 0.635 5.715) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.635 5.715) (end 0.635 9.144) (layer F.SilkS) (width 0.15)) + (fp_line (start 14.986 2.286) (end 14.986 1.397) (layer F.SilkS) (width 0.15)) + (fp_line (start 12.573 2.286) (end 12.573 1.397) (layer F.SilkS) (width 0.15)) + (fp_line (start 9.906 2.286) (end 9.906 1.397) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.493 2.286) (end 7.493 1.397) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.953 2.286) (end 4.953 1.397) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.54 2.286) (end 2.54 1.397) (layer F.SilkS) (width 0.15)) + (fp_line (start 0 2.286) (end 0 1.397) (layer F.SilkS) (width 0.15)) + (fp_line (start 17.653 2.413) (end 17.653 -2.413) (layer F.SilkS) (width 0.15)) + (fp_line (start 17.653 -2.413) (end 16.383 -2.413) (layer F.SilkS) (width 0.15)) + (fp_line (start 16.383 -2.413) (end 16.383 2.286) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.286 2.286) (end -2.286 -2.413) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.286 -2.413) (end -1.397 -2.413) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.397 -2.413) (end -1.397 2.286) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.286 2.286) (end 17.653 2.286) (layer F.SilkS) (width 0.15)) + (fp_line (start 17.653 2.286) (end 17.653 9.271) (layer F.SilkS) (width 0.15)) + (fp_line (start 17.653 9.271) (end -2.286 9.271) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.286 9.271) (end -2.286 2.286) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole rect (at 0 0) (size 2 2) (drill 1.2) (layers *.Cu *.Mask F.SilkS)) + (pad 2 thru_hole circle (at 2.493 0) (size 2 2) (drill 1.2) (layers *.Cu *.Mask F.SilkS)) + (pad 3 thru_hole circle (at 4.993 0) (size 2 2) (drill 1.2) (layers *.Cu *.Mask F.SilkS)) + (pad 4 thru_hole circle (at 7.493 0) (size 2 2) (drill 1.2) (layers *.Cu *.Mask F.SilkS)) + (pad 5 thru_hole circle (at 9.993 0) (size 2 2) (drill 1.2) (layers *.Cu *.Mask F.SilkS)) + (pad 6 thru_hole circle (at 12.493 0) (size 2 2) (drill 1.2) (layers *.Cu *.Mask F.SilkS)) + (pad 7 thru_hole circle (at 14.993 0) (size 2 2) (drill 1.2) (layers *.Cu *.Mask F.SilkS)) + (model Connect.3dshapes/Wafer_Horizontal20x5.8x7RM2.5-7.wrl + (at (xyz 0 0 0)) + (scale (xyz 4 4 4)) + (rotate (xyz 0 0 0)) + ) +) diff --git a/PCB/.pretty/Wafer_Horizontal22.5x5.8x7RM2.5-8.kicad_mod b/PCB/.pretty/Wafer_Horizontal22.5x5.8x7RM2.5-8.kicad_mod new file mode 100644 index 00000000..b9c4460e --- /dev/null +++ b/PCB/.pretty/Wafer_Horizontal22.5x5.8x7RM2.5-8.kicad_mod @@ -0,0 +1,51 @@ +(module Wafer_Horizontal22.5x5.8x7RM2.5-8 (layer F.Cu) (tedit 556C2A63) + (descr "Gold-Tek horizontal wafer connector with 2.5mm pitch") + (tags "wafer connector horizontal") + (fp_text reference REF** (at 8.89 -3.81) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value Wafer_Horizontal22.5x5.8x7RM2.5-8 (at 8.89 10.414) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -2.75 -2.75) (end 20.3 -2.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 20.3 -2.75) (end 20.3 9.65) (layer F.CrtYd) (width 0.05)) + (fp_line (start 20.3 9.65) (end -2.75 9.65) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.75 9.65) (end -2.75 -2.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 17.526 2.286) (end 17.526 1.397) (layer F.SilkS) (width 0.15)) + (fp_line (start 20.066 -2.413) (end 18.796 -2.413) (layer F.SilkS) (width 0.15)) + (fp_line (start 18.796 -2.413) (end 18.796 2.286) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.54 -2.413) (end -1.27 -2.413) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.27 -2.413) (end -1.27 2.286) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.54 2.286) (end 20.066 2.286) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.54 9.271) (end 20.066 9.271) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.54 9.271) (end -2.54 2.286) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.54 2.286) (end -2.54 -2.413) (layer F.SilkS) (width 0.15)) + (fp_line (start 20.066 2.286) (end 20.066 -2.413) (layer F.SilkS) (width 0.15)) + (fp_line (start 20.066 9.271) (end 20.066 2.286) (layer F.SilkS) (width 0.15)) + (fp_line (start 16.891 9.271) (end 16.891 5.715) (layer F.SilkS) (width 0.15)) + (fp_line (start 16.891 5.715) (end 18.161 5.715) (layer F.SilkS) (width 0.15)) + (fp_line (start 18.161 5.715) (end 18.161 9.271) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.508 9.271) (end -0.508 5.715) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.508 5.715) (end 0.635 5.715) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.635 5.715) (end 0.635 9.144) (layer F.SilkS) (width 0.15)) + (fp_line (start 14.986 2.286) (end 14.986 1.397) (layer F.SilkS) (width 0.15)) + (fp_line (start 12.573 2.286) (end 12.573 1.397) (layer F.SilkS) (width 0.15)) + (fp_line (start 9.906 2.286) (end 9.906 1.397) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.493 2.286) (end 7.493 1.397) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.953 2.286) (end 4.953 1.397) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.54 2.286) (end 2.54 1.397) (layer F.SilkS) (width 0.15)) + (fp_line (start 0 2.286) (end 0 1.397) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole rect (at 0 0) (size 2 2) (drill 1.2) (layers *.Cu *.Mask F.SilkS)) + (pad 2 thru_hole circle (at 2.513 0) (size 2 2) (drill 1.2) (layers *.Cu *.Mask F.SilkS)) + (pad 3 thru_hole circle (at 5.013 0) (size 2 2) (drill 1.2) (layers *.Cu *.Mask F.SilkS)) + (pad 4 thru_hole circle (at 7.513 0) (size 2 2) (drill 1.2) (layers *.Cu *.Mask F.SilkS)) + (pad 5 thru_hole circle (at 10.013 0) (size 2 2) (drill 1.2) (layers *.Cu *.Mask F.SilkS)) + (pad 6 thru_hole circle (at 12.513 0) (size 2 2) (drill 1.2) (layers *.Cu *.Mask F.SilkS)) + (pad 7 thru_hole circle (at 15.013 0) (size 2 2) (drill 1.2) (layers *.Cu *.Mask F.SilkS)) + (pad 8 thru_hole circle (at 17.513 0) (size 2 2) (drill 1.2) (layers *.Cu *.Mask F.SilkS)) + (model Connect.3dshapes/Wafer_Horizontal22.5x5.8x7RM2.5-8.wrl + (at (xyz 0 0 0)) + (scale (xyz 4 4 4)) + (rotate (xyz 0 0 0)) + ) +) diff --git a/PCB/.pretty/Wafer_Vertical10x5.8x7RM2.5-3.kicad_mod b/PCB/.pretty/Wafer_Vertical10x5.8x7RM2.5-3.kicad_mod new file mode 100644 index 00000000..5f108816 --- /dev/null +++ b/PCB/.pretty/Wafer_Vertical10x5.8x7RM2.5-3.kicad_mod @@ -0,0 +1,26 @@ +(module Wafer_Vertical10x5.8x7RM2.5-3 (layer F.Cu) (tedit 556C2A89) + (descr "Gold-Tek vertical wafer connector with 2.5mm pitch") + (tags "wafer connector vertical") + (fp_text reference REF** (at 2.54 -3.81) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value Wafer_Vertical10x5.8x7RM2.5-3 (at 2.54 5.08) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -2.75 -2.75) (end 7.85 -2.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 7.85 -2.75) (end 7.85 3.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 7.85 3.8) (end -2.75 3.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.75 3.8) (end -2.75 -2.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 7.62 3.429) (end -2.54 3.429) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.54 -2.413) (end 7.62 -2.413) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.62 -2.413) (end 7.62 3.429) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.54 -2.413) (end -2.54 3.429) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole rect (at 0 0) (size 2 2) (drill 1.2) (layers *.Cu *.Mask F.SilkS)) + (pad 2 thru_hole circle (at 2.54 0) (size 2 2) (drill 1.2) (layers *.Cu *.Mask F.SilkS)) + (pad 3 thru_hole circle (at 5.04 0) (size 2 2) (drill 1.2) (layers *.Cu *.Mask F.SilkS)) + (model Connect.3dshapes/Wafer_Vertical10x5.8x7RM2.5-3.wrl + (at (xyz 0 0 0)) + (scale (xyz 4 4 4)) + (rotate (xyz 0 0 0)) + ) +) diff --git a/PCB/.pretty/Wafer_Vertical15x5.8x7RM2.5-5.kicad_mod b/PCB/.pretty/Wafer_Vertical15x5.8x7RM2.5-5.kicad_mod new file mode 100644 index 00000000..7787720a --- /dev/null +++ b/PCB/.pretty/Wafer_Vertical15x5.8x7RM2.5-5.kicad_mod @@ -0,0 +1,28 @@ +(module Wafer_Vertical15x5.8x7RM2.5-5 (layer F.Cu) (tedit 556C2A98) + (descr "Gold-Tek vertical wafer connector with 2.5mm pitch") + (tags "wafer connector vertical") + (fp_text reference REF** (at 5.0165 -3.81) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value Wafer_Vertical15x5.8x7RM2.5-5 (at 5.0165 5.08) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -3 -2.75) (end 12.95 -2.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 12.95 -2.75) (end 12.95 3.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 12.95 3.8) (end -3 3.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3 3.8) (end -3 -2.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 12.6365 3.429) (end -2.6035 3.429) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.6035 -2.413) (end 12.6365 -2.413) (layer F.SilkS) (width 0.15)) + (fp_line (start 12.6365 -2.413) (end 12.6365 3.429) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.6035 -2.413) (end -2.6035 3.429) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole rect (at 0 0) (size 2 2) (drill 1.2) (layers *.Cu *.Mask F.SilkS)) + (pad 2 thru_hole circle (at 2.5165 0) (size 2 2) (drill 1.2) (layers *.Cu *.Mask F.SilkS)) + (pad 3 thru_hole circle (at 5.0165 0) (size 2 2) (drill 1.2) (layers *.Cu *.Mask F.SilkS)) + (pad 4 thru_hole circle (at 7.5165 0) (size 2 2) (drill 1.2) (layers *.Cu *.Mask F.SilkS)) + (pad 5 thru_hole circle (at 10.0165 0) (size 2 2) (drill 1.2) (layers *.Cu *.Mask F.SilkS)) + (model Connect.3dshapes/Wafer_Vertical15x5.8x7RM2.5-5.wrl + (at (xyz 0 0 0)) + (scale (xyz 4 4 4)) + (rotate (xyz 0 0 0)) + ) +) diff --git a/PCB/.pretty/Wafer_Vertical17.5x5.8x7RM2.5-6.kicad_mod b/PCB/.pretty/Wafer_Vertical17.5x5.8x7RM2.5-6.kicad_mod new file mode 100644 index 00000000..786c93dc --- /dev/null +++ b/PCB/.pretty/Wafer_Vertical17.5x5.8x7RM2.5-6.kicad_mod @@ -0,0 +1,29 @@ +(module Wafer_Vertical17.5x5.8x7RM2.5-6 (layer F.Cu) (tedit 556C2AA9) + (descr "Gold-Tek vertical wafer connector with 2.5mm pitch") + (tags "wafer connector vertical") + (fp_text reference REF** (at 6.2865 -3.81) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value Wafer_Vertical17.5x5.8x7RM2.5-6 (at 6.2865 5.08) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -2.75 -2.75) (end 15.2 -2.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 15.2 -2.75) (end 15.2 3.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 15.2 3.8) (end -2.75 3.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.75 3.8) (end -2.75 -2.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 15.0495 3.429) (end -2.4765 3.429) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.4765 -2.413) (end 15.0495 -2.413) (layer F.SilkS) (width 0.15)) + (fp_line (start 15.0495 -2.413) (end 15.0495 3.429) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.4765 -2.413) (end -2.4765 3.429) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole rect (at 0 0) (size 2 2) (drill 1.2) (layers *.Cu *.Mask F.SilkS)) + (pad 2 thru_hole circle (at 2.5365 0) (size 2 2) (drill 1.2) (layers *.Cu *.Mask F.SilkS)) + (pad 3 thru_hole circle (at 5.0365 0) (size 2 2) (drill 1.2) (layers *.Cu *.Mask F.SilkS)) + (pad 4 thru_hole circle (at 7.5365 0) (size 2 2) (drill 1.2) (layers *.Cu *.Mask F.SilkS)) + (pad 5 thru_hole circle (at 10.0365 0) (size 2 2) (drill 1.2) (layers *.Cu *.Mask F.SilkS)) + (pad 6 thru_hole circle (at 12.5365 0) (size 2 2) (drill 1.2) (layers *.Cu *.Mask F.SilkS)) + (model Connect.3dshapes/Wafer_Vertical17.5x5.8x7RM2.5-6.wrl + (at (xyz 0 0 0)) + (scale (xyz 4 4 4)) + (rotate (xyz 0 0 0)) + ) +) diff --git a/PCB/.pretty/Wafer_Vertical20x5.8x7RM2.5-7.kicad_mod b/PCB/.pretty/Wafer_Vertical20x5.8x7RM2.5-7.kicad_mod new file mode 100644 index 00000000..9978f869 --- /dev/null +++ b/PCB/.pretty/Wafer_Vertical20x5.8x7RM2.5-7.kicad_mod @@ -0,0 +1,30 @@ +(module Wafer_Vertical20x5.8x7RM2.5-7 (layer F.Cu) (tedit 556C2ABA) + (descr "Gold-Tek vertical wafer connector with 2.5mm pitch") + (tags "wafer connector vertical") + (fp_text reference REF** (at 7.493 -3.81) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value Wafer_Vertical20x5.8x7RM2.5-7 (at 7.493 5.08) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -2.75 -2.75) (end 17.75 -2.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 17.75 -2.75) (end 17.75 3.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 17.75 3.8) (end -2.75 3.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.75 3.8) (end -2.75 -2.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.54 -2.413) (end -2.54 3.429) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.54 3.429) (end 17.526 3.429) (layer F.SilkS) (width 0.15)) + (fp_line (start 17.526 3.429) (end 17.526 -2.413) (layer F.SilkS) (width 0.15)) + (fp_line (start 17.526 -2.413) (end -2.54 -2.413) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole rect (at 0 0) (size 2 2) (drill 1.2) (layers *.Cu *.Mask F.SilkS)) + (pad 2 thru_hole circle (at 2.493 0) (size 2 2) (drill 1.2) (layers *.Cu *.Mask F.SilkS)) + (pad 3 thru_hole circle (at 4.993 0) (size 2 2) (drill 1.2) (layers *.Cu *.Mask F.SilkS)) + (pad 4 thru_hole circle (at 7.493 0) (size 2 2) (drill 1.2) (layers *.Cu *.Mask F.SilkS)) + (pad 5 thru_hole circle (at 9.993 0) (size 2 2) (drill 1.2) (layers *.Cu *.Mask F.SilkS)) + (pad 6 thru_hole circle (at 12.493 0) (size 2 2) (drill 1.2) (layers *.Cu *.Mask F.SilkS)) + (pad 7 thru_hole circle (at 14.993 0) (size 2 2) (drill 1.2) (layers *.Cu *.Mask F.SilkS)) + (model Connect.3dshapes/Wafer_Vertical20x5.8x7RM2.5-7.wrl + (at (xyz 0 0 0)) + (scale (xyz 4 4 4)) + (rotate (xyz 0 0 0)) + ) +) diff --git a/PCB/.pretty/Wafer_Vertical22.5x5.8x7RM2.5-8.kicad_mod b/PCB/.pretty/Wafer_Vertical22.5x5.8x7RM2.5-8.kicad_mod new file mode 100644 index 00000000..2d439de8 --- /dev/null +++ b/PCB/.pretty/Wafer_Vertical22.5x5.8x7RM2.5-8.kicad_mod @@ -0,0 +1,35 @@ +(module Wafer_Vertical22.5x5.8x7RM2.5-8 (layer F.Cu) (tedit 556C2AC9) + (descr "Gold-Tek vertical wafer connector with 2.5mm pitch") + (tags "wafer connector vertical") + (fp_text reference REF** (at 8.763 -3.81) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value Wafer_Vertical22.5x5.8x7RM2.5-8 (at 8.763 5.08) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -2.75 -2.75) (end 20.3 -2.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 20.3 -2.75) (end 20.3 3.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 20.3 3.8) (end -2.75 3.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.75 3.8) (end -2.75 -2.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.27 -2.413) (end -2.54 -2.413) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.54 -2.413) (end -2.54 3.429) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.54 3.429) (end -1.27 3.429) (layer F.SilkS) (width 0.15)) + (fp_line (start 18.796 -2.413) (end 20.066 -2.413) (layer F.SilkS) (width 0.15)) + (fp_line (start 18.796 3.429) (end 20.066 3.429) (layer F.SilkS) (width 0.15)) + (fp_line (start 20.066 -2.413) (end 20.066 3.429) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.27 3.429) (end 18.796 3.429) (layer F.SilkS) (width 0.15)) + (fp_line (start 18.796 -2.413) (end -1.27 -2.413) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole rect (at 0 0) (size 2 2) (drill 1.2) (layers *.Cu *.Mask F.SilkS)) + (pad 2 thru_hole circle (at 2.513 0) (size 2 2) (drill 1.2) (layers *.Cu *.Mask F.SilkS)) + (pad 3 thru_hole circle (at 5.013 0) (size 2 2) (drill 1.2) (layers *.Cu *.Mask F.SilkS)) + (pad 4 thru_hole circle (at 7.513 0) (size 2 2) (drill 1.2) (layers *.Cu *.Mask F.SilkS)) + (pad 5 thru_hole circle (at 10.013 0) (size 2 2) (drill 1.2) (layers *.Cu *.Mask F.SilkS)) + (pad 6 thru_hole circle (at 12.513 0) (size 2 2) (drill 1.2) (layers *.Cu *.Mask F.SilkS)) + (pad 7 thru_hole circle (at 15.013 0) (size 2 2) (drill 1.2) (layers *.Cu *.Mask F.SilkS)) + (pad 8 thru_hole circle (at 17.513 0) (size 2 2) (drill 1.2) (layers *.Cu *.Mask F.SilkS)) + (model Connect.3dshapes/Wafer_Vertical22.5x5.8x7RM2.5-8.wrl + (at (xyz 0 0 0)) + (scale (xyz 4 4 4)) + (rotate (xyz 0 0 0)) + ) +) diff --git a/PCB/.pretty/XLR3MC.kicad_mod b/PCB/.pretty/XLR3MC.kicad_mod new file mode 100644 index 00000000..5bc81e97 --- /dev/null +++ b/PCB/.pretty/XLR3MC.kicad_mod @@ -0,0 +1,32 @@ +(module XLR3MC (layer F.Cu) (tedit 0) + (fp_text reference REF** (at 0 10.16) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value XLR3MC (at 0 15.24) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -11.43 22.225) (end -11.43 24.13) (layer F.SilkS) (width 0.15)) + (fp_line (start -11.43 24.13) (end -11.43 24.765) (layer F.SilkS) (width 0.15)) + (fp_line (start -11.43 24.765) (end 11.43 24.765) (layer F.SilkS) (width 0.15)) + (fp_line (start 11.43 24.765) (end 11.43 22.225) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.27 0) (end -1.27 -5.08) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.27 -5.08) (end 1.27 -5.08) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.27 -5.08) (end 1.27 0) (layer F.SilkS) (width 0.15)) + (fp_line (start -13.335 20.32) (end -13.335 22.225) (layer F.SilkS) (width 0.15)) + (fp_line (start -13.335 22.225) (end 13.335 22.225) (layer F.SilkS) (width 0.15)) + (fp_line (start 13.335 22.225) (end 13.335 20.32) (layer F.SilkS) (width 0.15)) + (fp_line (start 13.335 20.32) (end -13.335 20.32) (layer F.SilkS) (width 0.15)) + (fp_line (start -11.43 0) (end -11.43 20.32) (layer F.SilkS) (width 0.15)) + (fp_line (start -11.43 0) (end 11.43 0) (layer F.SilkS) (width 0.15)) + (fp_line (start 11.43 0) (end 11.43 20.32) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -4.064 0) (size 2.794 2.794) (drill 1.778) (layers *.Cu *.Mask F.SilkS)) + (pad 2 thru_hole circle (at 4.064 0) (size 2.794 2.794) (drill 1.778) (layers *.Cu *.Mask F.SilkS)) + (pad 4 thru_hole circle (at 0 -5.08) (size 2.54 2.54) (drill 1.27) (layers *.Cu *.Mask F.SilkS)) + (pad 3 thru_hole circle (at 0 0) (size 2.794 2.794) (drill 1.778) (layers *.Cu *.Mask F.SilkS)) + (pad "" thru_hole circle (at 0 5.08) (size 3.81 3.81) (drill 3.2004) (layers *.Cu *.Mask F.SilkS)) + (model Connect.3dshapes/XLR3MC.wrl + (at (xyz 0 0 0)) + (scale (xyz 2 2 2)) + (rotate (xyz 0 0 0)) + ) +) diff --git a/PCB/.pretty/XLR5MC.kicad_mod b/PCB/.pretty/XLR5MC.kicad_mod new file mode 100644 index 00000000..969b532a --- /dev/null +++ b/PCB/.pretty/XLR5MC.kicad_mod @@ -0,0 +1,31 @@ +(module XLR5MC (layer F.Cu) (tedit 0) + (fp_text reference REF** (at -5.08 6.35) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value XLR5MC (at 5.08 20.32) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 11.43 25.4) (end 11.43 0) (layer F.SilkS) (width 0.15)) + (fp_line (start -11.43 25.4) (end -11.43 0) (layer F.SilkS) (width 0.15)) + (fp_line (start 13.335 27.305) (end -13.335 27.305) (layer F.SilkS) (width 0.15)) + (fp_line (start -13.335 27.305) (end -13.335 25.4) (layer F.SilkS) (width 0.15)) + (fp_line (start -13.335 25.4) (end 13.335 25.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 11.43 27.305) (end 11.43 29.845) (layer F.SilkS) (width 0.15)) + (fp_line (start 11.43 29.845) (end -11.43 29.845) (layer F.SilkS) (width 0.15)) + (fp_line (start -11.43 29.845) (end -11.43 27.305) (layer F.SilkS) (width 0.15)) + (fp_line (start 13.335 27.305) (end 13.335 25.4) (layer F.SilkS) (width 0.15)) + (fp_line (start -11.43 0) (end 11.43 0) (layer F.SilkS) (width 0.15)) + (pad 4 thru_hole circle (at 5.08 0) (size 2.54 2.54) (drill 1.524) (layers *.Cu *.Mask F.SilkS)) + (pad 5 thru_hole circle (at 10.16 0) (size 2.54 2.54) (drill 1.524) (layers *.Cu *.Mask F.SilkS)) + (pad 3 thru_hole circle (at 0 0) (size 2.54 2.54) (drill 1.524) (layers *.Cu *.Mask F.SilkS)) + (pad "" thru_hole circle (at 0 12.7) (size 3.81 3.81) (drill 3.302) (layers *.Cu *.Mask F.SilkS)) + (pad 2 thru_hole circle (at -5.08 0) (size 2.54 2.54) (drill 1.524) (layers *.Cu *.Mask F.SilkS)) + (pad 1 thru_hole circle (at -10.16 0) (size 2.54 2.54) (drill 1.524) (layers *.Cu *.Mask F.SilkS)) + (pad "" thru_hole circle (at 5.08 5.08) (size 2.54 2.54) (drill 2.1082) (layers *.Cu *.Mask F.SilkS)) + (pad "" thru_hole circle (at -5.08 17.78) (size 2.54 2.54) (drill 2.1082) (layers *.Cu *.Mask F.SilkS)) + (model Connect.3dshapes/XLR5MC.wrl + (at (xyz 0 0 0)) + (scale (xyz 2 2 2)) + (rotate (xyz 0 0 0)) + ) +) diff --git a/PCB/.pretty/bnc-ci.kicad_mod b/PCB/.pretty/bnc-ci.kicad_mod new file mode 100644 index 00000000..38375636 --- /dev/null +++ b/PCB/.pretty/bnc-ci.kicad_mod @@ -0,0 +1,19 @@ +(module bnc-ci (layer F.Cu) (tedit 0) + (fp_text reference REF** (at 0 -8.89) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value bnc-ci (at 0 8.89) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end -6.985 0) (layer F.SilkS) (width 0.15)) + (pad 2 thru_hole circle (at -3.175 -3.175) (size 3.81 3.81) (drill 1.524) (layers *.Cu *.Mask F.SilkS)) + (pad 1 thru_hole circle (at 0 0) (size 3.556 3.556) (drill 1.27) (layers *.Cu *.Mask F.SilkS)) + (pad 2 thru_hole circle (at 3.175 -3.175) (size 3.81 3.81) (drill 1.524) (layers *.Cu *.Mask F.SilkS)) + (pad 2 thru_hole circle (at -3.175 3.175) (size 3.81 3.81) (drill 1.524) (layers *.Cu *.Mask F.SilkS)) + (pad 2 thru_hole circle (at 3.175 3.175) (size 3.81 3.81) (drill 1.524) (layers *.Cu *.Mask F.SilkS)) + (model Connect.3dshapes/bnc-ci.wrl + (at (xyz 0 0 0)) + (scale (xyz 2 2 2)) + (rotate (xyz 0 0 0)) + ) +) diff --git a/PCB/.pretty/bnc.kicad_mod b/PCB/.pretty/bnc.kicad_mod new file mode 100644 index 00000000..acfb16d7 --- /dev/null +++ b/PCB/.pretty/bnc.kicad_mod @@ -0,0 +1,21 @@ +(module bnc (layer F.Cu) (tedit 0) + (fp_text reference REF** (at -2.54 -10.16) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value bnc (at -3.81 11.43) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 7.62 3.81) (end 13.97 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start 13.97 3.81) (end 16.51 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start 16.51 1.27) (end 16.51 -1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start 16.51 -1.27) (end 13.97 -3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start 13.97 -3.81) (end 7.62 -3.81) (layer F.SilkS) (width 0.15)) + (fp_circle (center 0 0) (end 7.62 3.81) (layer F.SilkS) (width 0.15)) + (pad 2 thru_hole circle (at 0 0) (size 15.24 15.24) (drill 9.652) (layers *.Cu *.Mask F.SilkS)) + (pad 1 thru_hole circle (at 12.7 0) (size 5.08 5.08) (drill 2.54) (layers *.Cu *.Mask F.SilkS)) + (model Connect.3dshapes/bnc.wrl + (at (xyz 0 0 0)) + (scale (xyz 2 2 2)) + (rotate (xyz 0 0 0)) + ) +) diff --git a/PCB/.pretty/bornier2.kicad_mod b/PCB/.pretty/bornier2.kicad_mod new file mode 100644 index 00000000..a0acef3f --- /dev/null +++ b/PCB/.pretty/bornier2.kicad_mod @@ -0,0 +1,22 @@ +(module bornier2 (layer F.Cu) (tedit 0) + (descr "Bornier d'alimentation 2 pins") + (tags DEV) + (fp_text reference REF** (at 0 -5.08) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value bornier2 (at 0 5.08) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 5.08 2.54) (end -5.08 2.54) (layer F.SilkS) (width 0.15)) + (fp_line (start 5.08 3.81) (end 5.08 -3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start 5.08 -3.81) (end -5.08 -3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start -5.08 -3.81) (end -5.08 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start -5.08 3.81) (end 5.08 3.81) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole rect (at -2.54 0) (size 2.54 2.54) (drill 1.524) (layers *.Cu *.Mask F.SilkS)) + (pad 2 thru_hole circle (at 2.54 0) (size 2.54 2.54) (drill 1.524) (layers *.Cu *.Mask F.SilkS)) + (model Connect.3dshapes/bornier2.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) +) diff --git a/PCB/.pretty/bornier3.kicad_mod b/PCB/.pretty/bornier3.kicad_mod new file mode 100644 index 00000000..f9c4347a --- /dev/null +++ b/PCB/.pretty/bornier3.kicad_mod @@ -0,0 +1,23 @@ +(module bornier3 (layer F.Cu) (tedit 0) + (descr "Bornier d'alimentation 3 pins") + (tags DEV) + (fp_text reference REF** (at 0 -5.08) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value bornier3 (at 0 5.08) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -7.62 3.81) (end -7.62 -3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.62 3.81) (end 7.62 -3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start -7.62 2.54) (end 7.62 2.54) (layer F.SilkS) (width 0.15)) + (fp_line (start -7.62 -3.81) (end 7.62 -3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start -7.62 3.81) (end 7.62 3.81) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole rect (at -5.08 0) (size 2.54 2.54) (drill 1.524) (layers *.Cu *.Mask F.SilkS)) + (pad 2 thru_hole circle (at 0 0) (size 2.54 2.54) (drill 1.524) (layers *.Cu *.Mask F.SilkS)) + (pad 3 thru_hole circle (at 5.08 0) (size 2.54 2.54) (drill 1.524) (layers *.Cu *.Mask F.SilkS)) + (model Connect.3dshapes/bornier3.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) +) diff --git a/PCB/.pretty/bornier4.kicad_mod b/PCB/.pretty/bornier4.kicad_mod new file mode 100644 index 00000000..fdb69a67 --- /dev/null +++ b/PCB/.pretty/bornier4.kicad_mod @@ -0,0 +1,24 @@ +(module bornier4 (layer F.Cu) (tedit 0) + (descr "Bornier d'alimentation 4 pins") + (tags DEV) + (fp_text reference REF** (at 0 -6.35) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value bornier4 (at 0 5.08) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -10.16 -3.81) (end -10.16 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start 10.16 3.81) (end 10.16 -3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start 10.16 2.54) (end -10.16 2.54) (layer F.SilkS) (width 0.15)) + (fp_line (start -10.16 -3.81) (end 10.16 -3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start -10.16 3.81) (end 10.16 3.81) (layer F.SilkS) (width 0.15)) + (pad 2 thru_hole circle (at -2.54 0) (size 3.81 3.81) (drill 1.524) (layers *.Cu *.Mask F.SilkS)) + (pad 3 thru_hole circle (at 2.54 0) (size 3.81 3.81) (drill 1.524) (layers *.Cu *.Mask F.SilkS)) + (pad 1 thru_hole rect (at -7.62 0) (size 3.81 3.81) (drill 1.524) (layers *.Cu *.Mask F.SilkS)) + (pad 4 thru_hole circle (at 7.62 0) (size 3.81 3.81) (drill 1.524) (layers *.Cu *.Mask F.SilkS)) + (model Connect.3dshapes/bornier4.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) +) diff --git a/PCB/.pretty/bornier5.kicad_mod b/PCB/.pretty/bornier5.kicad_mod new file mode 100644 index 00000000..844956ab --- /dev/null +++ b/PCB/.pretty/bornier5.kicad_mod @@ -0,0 +1,25 @@ +(module bornier5 (layer F.Cu) (tedit 0) + (descr "Bornier d'alimentation 4 pins") + (tags DEV) + (fp_text reference REF** (at 0 -5.08) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value bornier5 (at 0 5.08) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -12.7 3.81) (end 12.7 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start -12.7 2.54) (end 12.7 2.54) (layer F.SilkS) (width 0.15)) + (fp_line (start -12.7 -3.81) (end 12.7 -3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start 12.7 -3.81) (end 12.7 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start -12.7 -3.81) (end -12.7 3.81) (layer F.SilkS) (width 0.15)) + (pad 2 thru_hole circle (at -5.08 0) (size 3.81 3.81) (drill 1.524) (layers *.Cu *.Mask F.SilkS)) + (pad 3 thru_hole circle (at 0 0) (size 3.81 3.81) (drill 1.524) (layers *.Cu *.Mask F.SilkS)) + (pad 1 thru_hole rect (at -10.16 0) (size 3.81 3.81) (drill 1.524) (layers *.Cu *.Mask F.SilkS)) + (pad 4 thru_hole circle (at 5.08 0) (size 3.81 3.81) (drill 1.524) (layers *.Cu *.Mask F.SilkS)) + (pad 5 thru_hole circle (at 10.16 0) (size 3.81 3.81) (drill 1.524) (layers *.Cu *.Mask F.SilkS)) + (model Connect.3dshapes/bornier5.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) +) diff --git a/PCB/.pretty/bornier6.kicad_mod b/PCB/.pretty/bornier6.kicad_mod new file mode 100644 index 00000000..f338fdb1 --- /dev/null +++ b/PCB/.pretty/bornier6.kicad_mod @@ -0,0 +1,26 @@ +(module bornier6 (layer F.Cu) (tedit 0) + (descr "Bornier d'alimentation 4 pins") + (tags DEV) + (fp_text reference REF** (at 1.27 -7.62) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value bornier6 (at 0 7.62) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -15.24 -3.81) (end -15.24 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start 15.24 3.81) (end 15.24 -3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start -15.24 2.54) (end 15.24 2.54) (layer F.SilkS) (width 0.15)) + (fp_line (start -15.24 -3.81) (end 15.24 -3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start -15.24 3.81) (end 15.24 3.81) (layer F.SilkS) (width 0.15)) + (pad 2 thru_hole circle (at -7.62 0) (size 3.81 3.81) (drill 1.524) (layers *.Cu *.Mask F.SilkS)) + (pad 3 thru_hole circle (at -2.54 0) (size 3.81 3.81) (drill 1.524) (layers *.Cu *.Mask F.SilkS)) + (pad 1 thru_hole rect (at -12.7 0) (size 3.81 3.81) (drill 1.524) (layers *.Cu *.Mask F.SilkS)) + (pad 4 thru_hole circle (at 2.54 0) (size 3.81 3.81) (drill 1.524) (layers *.Cu *.Mask F.SilkS)) + (pad 5 thru_hole circle (at 7.62 0) (size 3.81 3.81) (drill 1.524) (layers *.Cu *.Mask F.SilkS)) + (pad 6 thru_hole circle (at 12.7 0) (size 3.81 3.81) (drill 1.524) (layers *.Cu *.Mask F.SilkS)) + (model Connect.3dshapes/bornier6.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) +) diff --git a/PCB/.pretty/c64abfd.kicad_mod b/PCB/.pretty/c64abfd.kicad_mod new file mode 100644 index 00000000..50ca5635 --- /dev/null +++ b/PCB/.pretty/c64abfd.kicad_mod @@ -0,0 +1,87 @@ +(module c64abfd (layer F.Cu) (tedit 0) + (descr "Connecteur DIN Europe 64 contatcts Femelle Droit") + (tags "CONN DIN") + (fp_text reference REF** (at -20.955 -5.715) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value c64abfd (at 24.13 -5.715) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -46.99 -3.81) (end 46.99 -3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start 46.99 -3.81) (end 46.99 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start 46.99 3.81) (end -46.99 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start -46.99 3.81) (end -46.99 -3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start -41.91 3.81) (end -41.91 -3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start 41.91 3.81) (end 41.91 -3.81) (layer F.SilkS) (width 0.15)) + (pad A1 thru_hole rect (at -39.37 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A2 thru_hole circle (at -36.83 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A3 thru_hole circle (at -34.29 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A4 thru_hole circle (at -31.75 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A5 thru_hole circle (at -29.21 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A6 thru_hole circle (at -26.67 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A7 thru_hole circle (at -24.13 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A8 thru_hole circle (at -21.59 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A9 thru_hole circle (at -19.05 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A10 thru_hole circle (at -16.51 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A11 thru_hole circle (at -13.97 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A12 thru_hole circle (at -11.43 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A13 thru_hole circle (at -8.89 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A14 thru_hole circle (at -6.35 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A15 thru_hole circle (at -3.81 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A16 thru_hole circle (at -1.27 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A17 thru_hole circle (at 1.27 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A18 thru_hole circle (at 3.81 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A19 thru_hole circle (at 6.35 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A20 thru_hole circle (at 8.89 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A21 thru_hole circle (at 11.43 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A22 thru_hole circle (at 13.97 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A23 thru_hole circle (at 16.51 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A24 thru_hole circle (at 19.05 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A25 thru_hole circle (at 21.59 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A26 thru_hole circle (at 24.13 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A27 thru_hole circle (at 26.67 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A28 thru_hole circle (at 29.21 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A29 thru_hole circle (at 31.75 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A30 thru_hole circle (at 34.29 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A31 thru_hole circle (at 36.83 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A32 thru_hole circle (at 39.37 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B1 thru_hole circle (at -39.37 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B2 thru_hole circle (at -36.83 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B3 thru_hole circle (at -34.29 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B4 thru_hole circle (at -31.75 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B5 thru_hole circle (at -29.21 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B6 thru_hole circle (at -26.67 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B7 thru_hole circle (at -24.13 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B8 thru_hole circle (at -21.59 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B9 thru_hole circle (at -19.05 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B10 thru_hole circle (at -16.51 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B11 thru_hole circle (at -13.97 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B12 thru_hole circle (at -11.43 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B13 thru_hole circle (at -8.89 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B14 thru_hole circle (at -6.35 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B15 thru_hole circle (at -3.81 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B16 thru_hole circle (at -1.27 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B17 thru_hole circle (at 1.27 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B18 thru_hole circle (at 3.81 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B19 thru_hole circle (at 6.35 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B20 thru_hole circle (at 8.89 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B21 thru_hole circle (at 11.43 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B22 thru_hole circle (at 13.97 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B23 thru_hole circle (at 16.51 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B24 thru_hole circle (at 19.05 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B25 thru_hole circle (at 21.59 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B26 thru_hole circle (at 24.13 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B27 thru_hole circle (at 26.67 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B28 thru_hole circle (at 29.21 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B29 thru_hole circle (at 31.75 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B30 thru_hole circle (at 34.29 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B31 thru_hole circle (at 36.83 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B32 thru_hole circle (at 39.37 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 65 thru_hole circle (at -44.45 -1.27) (size 3.81 3.81) (drill 3.048) (layers *.Cu *.Mask F.SilkS)) + (pad 66 thru_hole circle (at 44.45 -1.27) (size 3.81 3.81) (drill 3.048) (layers *.Cu *.Mask F.SilkS)) + (model Connect.3dshapes/c64abfd.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) +) diff --git a/PCB/.pretty/c64abmd.kicad_mod b/PCB/.pretty/c64abmd.kicad_mod new file mode 100644 index 00000000..21bbd59d --- /dev/null +++ b/PCB/.pretty/c64abmd.kicad_mod @@ -0,0 +1,87 @@ +(module c64abmd (layer F.Cu) (tedit 0) + (descr "Connecteur DIN Europe 64 contacts Male Droit") + (tags "CONN DIN") + (fp_text reference REF** (at -21.59 -5.715) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value c64abmd (at 24.13 -5.715) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -46.99 -3.81) (end 46.99 -3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start 46.99 -3.81) (end 46.99 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start -46.99 3.81) (end -46.99 -3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start -41.91 3.81) (end -41.91 -3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start 41.91 3.81) (end 41.91 -3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start -46.99 3.81) (end 46.99 3.81) (layer F.SilkS) (width 0.15)) + (pad 65 thru_hole circle (at -44.45 1.27) (size 3.81 3.81) (drill 3.048) (layers *.Cu *.Mask F.SilkS)) + (pad 66 thru_hole circle (at 44.45 1.27) (size 3.81 3.81) (drill 3.048) (layers *.Cu *.Mask F.SilkS)) + (pad A3 thru_hole circle (at -34.29 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A4 thru_hole circle (at -31.75 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A5 thru_hole circle (at -29.21 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A6 thru_hole circle (at -26.67 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A7 thru_hole circle (at -24.13 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A8 thru_hole circle (at -21.59 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A9 thru_hole circle (at -19.05 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A10 thru_hole circle (at -16.51 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A11 thru_hole circle (at -13.97 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A12 thru_hole circle (at -11.43 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A13 thru_hole circle (at -8.89 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A14 thru_hole circle (at -6.35 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A15 thru_hole circle (at -3.81 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A16 thru_hole circle (at -1.27 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A17 thru_hole circle (at 1.27 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A18 thru_hole circle (at 3.81 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A19 thru_hole circle (at 6.35 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A20 thru_hole circle (at 8.89 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A21 thru_hole circle (at 11.43 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A22 thru_hole circle (at 13.97 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A23 thru_hole circle (at 16.51 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A24 thru_hole circle (at 19.05 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A25 thru_hole circle (at 21.59 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A26 thru_hole circle (at 24.13 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A27 thru_hole circle (at 26.67 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A28 thru_hole circle (at 29.21 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A29 thru_hole circle (at 31.75 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A30 thru_hole circle (at 34.29 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A31 thru_hole circle (at 36.83 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A32 thru_hole circle (at 39.37 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A2 thru_hole circle (at -36.83 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A1 thru_hole rect (at -39.37 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B1 thru_hole circle (at -39.37 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B2 thru_hole circle (at -36.83 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B3 thru_hole circle (at -34.29 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B4 thru_hole circle (at -31.75 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B5 thru_hole circle (at -29.21 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B6 thru_hole circle (at -26.67 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B7 thru_hole circle (at -24.13 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B8 thru_hole circle (at -21.59 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B9 thru_hole circle (at -19.05 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B10 thru_hole circle (at -16.51 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B11 thru_hole circle (at -13.97 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B12 thru_hole circle (at -11.43 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B13 thru_hole circle (at -8.89 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B14 thru_hole circle (at -6.35 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B15 thru_hole circle (at -3.81 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B16 thru_hole circle (at -1.27 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B17 thru_hole circle (at 1.27 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B18 thru_hole circle (at 3.81 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B19 thru_hole circle (at 6.35 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B20 thru_hole circle (at 8.89 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B21 thru_hole circle (at 11.43 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B22 thru_hole circle (at 13.97 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B23 thru_hole circle (at 16.51 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B24 thru_hole circle (at 19.05 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B25 thru_hole circle (at 21.59 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B26 thru_hole circle (at 24.13 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B27 thru_hole circle (at 26.67 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B28 thru_hole circle (at 29.21 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B29 thru_hole circle (at 31.75 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B30 thru_hole circle (at 34.29 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B31 thru_hole circle (at 36.83 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B32 thru_hole circle (at 39.37 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (model Connect.3dshapes/c64abmd.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) +) diff --git a/PCB/.pretty/c64acfd.kicad_mod b/PCB/.pretty/c64acfd.kicad_mod new file mode 100644 index 00000000..8fb52aaa --- /dev/null +++ b/PCB/.pretty/c64acfd.kicad_mod @@ -0,0 +1,89 @@ +(module c64acfd (layer F.Cu) (tedit 0) + (descr "Connecteur DIN Europe 96 contacts AC femelle droit") + (tags "CONN DIN") + (fp_text reference REF** (at 20.955 6.985) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value c64acfd (at -24.765 6.985) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 46.99 5.08) (end -46.99 5.08) (layer F.SilkS) (width 0.15)) + (fp_line (start 46.99 -2.54) (end 46.99 5.08) (layer F.SilkS) (width 0.15)) + (fp_line (start 41.91 -2.54) (end 41.91 5.08) (layer F.SilkS) (width 0.15)) + (fp_line (start 46.99 -2.54) (end 46.99 -5.08) (layer F.SilkS) (width 0.15)) + (fp_line (start 46.99 -5.08) (end -46.99 -5.08) (layer F.SilkS) (width 0.15)) + (fp_line (start 41.91 -2.54) (end 41.91 -5.08) (layer F.SilkS) (width 0.15)) + (fp_line (start -41.91 -5.08) (end -41.91 5.08) (layer F.SilkS) (width 0.15)) + (fp_line (start -46.99 5.08) (end -46.99 -5.08) (layer F.SilkS) (width 0.15)) + (pad 65 thru_hole circle (at 44.45 0) (size 3.81 3.81) (drill 3.048) (layers *.Cu *.Mask F.SilkS)) + (pad 66 thru_hole circle (at -44.45 0) (size 3.81 3.81) (drill 3.048) (layers *.Cu *.Mask F.SilkS)) + (pad A1 thru_hole rect (at -39.37 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A2 thru_hole circle (at -36.83 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A3 thru_hole circle (at -34.29 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A4 thru_hole circle (at -31.75 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A5 thru_hole circle (at -29.21 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A6 thru_hole circle (at -26.67 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A7 thru_hole circle (at -24.13 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A8 thru_hole circle (at -21.59 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A9 thru_hole circle (at -19.05 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A10 thru_hole circle (at -16.51 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A11 thru_hole circle (at -13.97 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A12 thru_hole circle (at -11.43 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A13 thru_hole circle (at -8.89 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A14 thru_hole circle (at -6.35 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A15 thru_hole circle (at -3.81 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A16 thru_hole circle (at -1.27 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A17 thru_hole circle (at 1.27 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A18 thru_hole circle (at 3.81 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A19 thru_hole circle (at 6.35 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A20 thru_hole circle (at 8.89 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A21 thru_hole circle (at 11.43 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A22 thru_hole circle (at 13.97 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A23 thru_hole circle (at 16.51 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A24 thru_hole circle (at 19.05 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A25 thru_hole circle (at 21.59 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A26 thru_hole circle (at 24.13 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A27 thru_hole circle (at 26.67 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A28 thru_hole circle (at 29.21 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A29 thru_hole circle (at 31.75 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A30 thru_hole circle (at 34.29 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A31 thru_hole circle (at 36.83 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A32 thru_hole circle (at 39.37 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C1 thru_hole circle (at -39.37 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C2 thru_hole circle (at -36.83 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C3 thru_hole circle (at -34.29 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C4 thru_hole circle (at -31.75 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C5 thru_hole circle (at -29.21 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C6 thru_hole circle (at -26.67 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C7 thru_hole circle (at -24.13 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C8 thru_hole circle (at -21.59 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C9 thru_hole circle (at -19.05 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C10 thru_hole circle (at -16.51 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C11 thru_hole circle (at -13.97 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C12 thru_hole circle (at -11.43 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C13 thru_hole circle (at -8.89 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C14 thru_hole circle (at -6.35 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C15 thru_hole circle (at -3.81 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C16 thru_hole circle (at -1.27 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C17 thru_hole circle (at 1.27 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C18 thru_hole circle (at 3.81 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C19 thru_hole circle (at 6.35 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C20 thru_hole circle (at 8.89 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C21 thru_hole circle (at 11.43 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C22 thru_hole circle (at 13.97 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C23 thru_hole circle (at 16.51 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C24 thru_hole circle (at 19.05 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C25 thru_hole circle (at 21.59 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C26 thru_hole circle (at 24.13 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C27 thru_hole circle (at 26.67 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C28 thru_hole circle (at 29.21 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C29 thru_hole circle (at 31.75 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C30 thru_hole circle (at 34.29 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C31 thru_hole circle (at 36.83 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C32 thru_hole circle (at 39.37 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (model Connect.3dshapes/c64acfd.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) +) diff --git a/PCB/.pretty/he10-10d.kicad_mod b/PCB/.pretty/he10-10d.kicad_mod new file mode 100644 index 00000000..17f2c541 --- /dev/null +++ b/PCB/.pretty/he10-10d.kicad_mod @@ -0,0 +1,41 @@ +(module he10-10d (layer F.Cu) (tedit 0) + (descr "Connecteur HE10 10 contacts droit") + (tags "CONN HE10") + (fp_text reference REF** (at -6.096 -5.842) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value he10-10d (at 6.096 5.842) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 16.002 -4.318) (end 16.002 4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start 16.002 4.318) (end -16.002 4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start -16.002 -4.318) (end 16.002 -4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start -8.89 3.556) (end -8.89 -3.556) (layer F.SilkS) (width 0.15)) + (fp_line (start 8.89 3.556) (end 8.89 -3.556) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.54 4.318) (end -2.54 3.556) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.54 3.556) (end -8.89 3.556) (layer F.SilkS) (width 0.15)) + (fp_line (start -8.89 -3.556) (end 8.89 -3.556) (layer F.SilkS) (width 0.15)) + (fp_line (start 8.89 3.556) (end 2.54 3.556) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.54 3.556) (end 2.54 4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start -16.002 4.318) (end -16.002 -4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start -6.604 1.27) (end -7.874 0.508) (layer F.SilkS) (width 0.15)) + (fp_line (start -7.874 0.508) (end -7.874 2.032) (layer F.SilkS) (width 0.15)) + (fp_line (start -7.874 2.032) (end -6.604 1.27) (layer F.SilkS) (width 0.15)) + (pad "" thru_hole circle (at -13.97 0) (size 5.461 5.461) (drill 2.6924) (layers *.Cu *.Mask F.SilkS)) + (pad "" thru_hole circle (at 13.97 0) (size 5.461 5.461) (drill 2.6924) (layers *.Cu *.Mask F.SilkS)) + (pad 1 thru_hole rect (at -5.08 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 2 thru_hole circle (at -5.08 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 3 thru_hole circle (at -2.54 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 4 thru_hole circle (at -2.54 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 5 thru_hole circle (at 0 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 6 thru_hole circle (at 0 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 7 thru_hole circle (at 2.54 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 8 thru_hole circle (at 2.54 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 9 thru_hole circle (at 5.08 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 10 thru_hole circle (at 5.08 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (model Connect.3dshapes/he10-10d.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) +) diff --git a/PCB/.pretty/he10-14c.kicad_mod b/PCB/.pretty/he10-14c.kicad_mod new file mode 100644 index 00000000..9797dbde --- /dev/null +++ b/PCB/.pretty/he10-14c.kicad_mod @@ -0,0 +1,48 @@ +(module he10-14c (layer F.Cu) (tedit 0) + (descr "Connecteur HE10 14 contacts couche") + (tags "CONN HE10") + (fp_text reference REF** (at 0 3.81) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value he10-14c (at -2.54 7.62) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -11.176 -2.54) (end -11.176 2.032) (layer F.SilkS) (width 0.15)) + (fp_line (start -11.176 2.032) (end -12.446 3.302) (layer F.SilkS) (width 0.15)) + (fp_line (start -12.446 3.302) (end -14.478 3.302) (layer F.SilkS) (width 0.15)) + (fp_line (start -14.478 3.302) (end -15.748 2.032) (layer F.SilkS) (width 0.15)) + (fp_line (start -15.748 2.032) (end -15.748 -2.54) (layer F.SilkS) (width 0.15)) + (fp_line (start 12.446 3.302) (end 11.176 2.032) (layer F.SilkS) (width 0.15)) + (fp_line (start 11.176 2.032) (end 11.176 -2.54) (layer F.SilkS) (width 0.15)) + (fp_line (start 15.748 -2.54) (end 15.748 2.032) (layer F.SilkS) (width 0.15)) + (fp_line (start 15.748 2.032) (end 14.478 3.302) (layer F.SilkS) (width 0.15)) + (fp_line (start 14.478 3.302) (end 12.446 3.302) (layer F.SilkS) (width 0.15)) + (fp_line (start -17.78 -2.54) (end -17.78 4.445) (layer F.SilkS) (width 0.15)) + (fp_line (start -17.78 4.445) (end -14.605 14.605) (layer F.SilkS) (width 0.15)) + (fp_line (start -14.605 14.605) (end -10.795 14.605) (layer F.SilkS) (width 0.15)) + (fp_line (start -10.795 14.605) (end -8.89 10.16) (layer F.SilkS) (width 0.15)) + (fp_line (start -17.78 -2.54) (end 18.415 -2.54) (layer F.SilkS) (width 0.15)) + (fp_line (start 15.24 14.605) (end 11.43 14.605) (layer F.SilkS) (width 0.15)) + (fp_line (start 18.415 -2.54) (end 18.415 4.445) (layer F.SilkS) (width 0.15)) + (fp_line (start 18.415 4.445) (end 15.24 14.605) (layer F.SilkS) (width 0.15)) + (fp_line (start -8.89 10.16) (end 8.763 10.16) (layer F.SilkS) (width 0.15)) + (fp_line (start 11.43 14.605) (end 8.763 10.16) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.112 10.16) (end 6.096 8.128) (layer F.SilkS) (width 0.15)) + (fp_line (start 6.096 8.128) (end 5.08 10.16) (layer F.SilkS) (width 0.15)) + (pad 0 thru_hole circle (at -13.462 0.508) (size 3.048 3.048) (drill 2.54) (layers *.Cu *.Mask F.SilkS)) + (pad 0 thru_hole circle (at 13.462 0.508) (size 3.048 3.048) (drill 2.54) (layers *.Cu *.Mask F.SilkS)) + (pad 1 thru_hole rect (at 7.62 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 2 thru_hole circle (at 7.62 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 3 thru_hole circle (at 5.08 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 4 thru_hole circle (at 5.08 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 5 thru_hole circle (at 2.54 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 6 thru_hole circle (at 0 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 7 thru_hole circle (at 0 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 8 thru_hole circle (at 2.54 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 9 thru_hole circle (at -2.54 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 10 thru_hole circle (at -2.54 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 11 thru_hole circle (at -5.08 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 12 thru_hole circle (at -5.08 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 13 thru_hole circle (at -7.62 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 14 thru_hole circle (at -7.62 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) +) diff --git a/PCB/.pretty/he10-14d.kicad_mod b/PCB/.pretty/he10-14d.kicad_mod new file mode 100644 index 00000000..97b787e0 --- /dev/null +++ b/PCB/.pretty/he10-14d.kicad_mod @@ -0,0 +1,40 @@ +(module he10-14d (layer F.Cu) (tedit 0) + (descr "Connecteur HE10 14 contacts droit") + (tags "CONN HE10") + (fp_text reference REF** (at -7.874 -5.842) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value he10-14d (at 8.382 5.842) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -18.796 -4.318) (end 18.542 -4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start 18.542 -4.318) (end 18.542 4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start 18.542 4.318) (end -18.796 4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.54 4.318) (end -2.54 3.556) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.54 3.556) (end -11.43 3.556) (layer F.SilkS) (width 0.15)) + (fp_line (start -11.43 3.556) (end -11.43 -3.556) (layer F.SilkS) (width 0.15)) + (fp_line (start -11.43 -3.556) (end 11.43 -3.556) (layer F.SilkS) (width 0.15)) + (fp_line (start 11.43 -3.556) (end 11.43 3.556) (layer F.SilkS) (width 0.15)) + (fp_line (start 11.43 3.556) (end 2.54 3.556) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.54 3.556) (end 2.54 4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start -18.796 4.318) (end -18.796 -4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start -9.144 1.27) (end -10.414 0.508) (layer F.SilkS) (width 0.15)) + (fp_line (start -10.414 0.508) (end -10.414 2.032) (layer F.SilkS) (width 0.15)) + (fp_line (start -10.414 2.032) (end -9.144 1.27) (layer F.SilkS) (width 0.15)) + (pad 0 thru_hole circle (at -16.51 0) (size 5.461 5.461) (drill 2.6924) (layers *.Cu *.Mask F.SilkS)) + (pad 0 thru_hole circle (at 16.51 0) (size 5.461 5.461) (drill 2.6924) (layers *.Cu *.Mask F.SilkS)) + (pad 1 thru_hole rect (at -7.62 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 2 thru_hole circle (at -7.62 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 3 thru_hole circle (at -5.08 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 4 thru_hole circle (at -5.08 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 5 thru_hole circle (at -2.54 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 6 thru_hole circle (at -2.54 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 7 thru_hole circle (at 0 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 8 thru_hole circle (at 0 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 9 thru_hole circle (at 2.54 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 10 thru_hole circle (at 2.54 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 11 thru_hole circle (at 5.08 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 12 thru_hole circle (at 5.08 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 13 thru_hole circle (at 7.62 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 14 thru_hole circle (at 7.62 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) +) diff --git a/PCB/.pretty/he10-16c.kicad_mod b/PCB/.pretty/he10-16c.kicad_mod new file mode 100644 index 00000000..1c2eac4d --- /dev/null +++ b/PCB/.pretty/he10-16c.kicad_mod @@ -0,0 +1,50 @@ +(module he10-16c (layer F.Cu) (tedit 0) + (descr "Connecteur HE10 16 contacts couche") + (tags "CONN HE10") + (fp_text reference REF** (at 0 3.81) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value he10-16c (at -1.27 7.62) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -12.446 -2.54) (end -12.446 2.032) (layer F.SilkS) (width 0.15)) + (fp_line (start -12.446 2.032) (end -13.716 3.302) (layer F.SilkS) (width 0.15)) + (fp_line (start -13.716 3.302) (end -15.748 3.302) (layer F.SilkS) (width 0.15)) + (fp_line (start -15.748 3.302) (end -17.018 2.032) (layer F.SilkS) (width 0.15)) + (fp_line (start -17.018 2.032) (end -17.018 -2.54) (layer F.SilkS) (width 0.15)) + (fp_line (start 17.018 -2.54) (end 17.018 2.032) (layer F.SilkS) (width 0.15)) + (fp_line (start 17.018 2.032) (end 15.748 3.302) (layer F.SilkS) (width 0.15)) + (fp_line (start 15.748 3.302) (end 13.716 3.302) (layer F.SilkS) (width 0.15)) + (fp_line (start 13.716 3.302) (end 12.446 2.032) (layer F.SilkS) (width 0.15)) + (fp_line (start 12.446 2.032) (end 12.446 -2.54) (layer F.SilkS) (width 0.15)) + (fp_line (start -19.05 -2.54) (end -19.05 4.445) (layer F.SilkS) (width 0.15)) + (fp_line (start -19.05 4.445) (end -15.875 14.605) (layer F.SilkS) (width 0.15)) + (fp_line (start -15.875 14.605) (end -12.065 14.605) (layer F.SilkS) (width 0.15)) + (fp_line (start -12.065 14.605) (end -10.16 10.16) (layer F.SilkS) (width 0.15)) + (fp_line (start -19.05 -2.54) (end 19.05 -2.54) (layer F.SilkS) (width 0.15)) + (fp_line (start 19.05 -2.54) (end 19.05 4.445) (layer F.SilkS) (width 0.15)) + (fp_line (start 19.05 4.445) (end 15.875 14.605) (layer F.SilkS) (width 0.15)) + (fp_line (start 15.875 14.605) (end 12.065 14.605) (layer F.SilkS) (width 0.15)) + (fp_line (start -10.16 10.16) (end 9.906 10.16) (layer F.SilkS) (width 0.15)) + (fp_line (start 12.065 14.605) (end 9.906 10.16) (layer F.SilkS) (width 0.15)) + (fp_line (start 8.636 10.16) (end 7.62 8.128) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.62 8.128) (end 6.604 10.16) (layer F.SilkS) (width 0.15)) + (pad 0 thru_hole circle (at -14.732 0.508) (size 3.048 3.048) (drill 2.54) (layers *.Cu *.Mask F.SilkS)) + (pad 0 thru_hole circle (at 14.732 0.508) (size 3.048 3.048) (drill 2.54) (layers *.Cu *.Mask F.SilkS)) + (pad 1 thru_hole rect (at 8.89 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 2 thru_hole circle (at 8.89 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 3 thru_hole circle (at 6.35 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 4 thru_hole circle (at 6.35 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 5 thru_hole circle (at 3.81 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 6 thru_hole circle (at 3.81 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 7 thru_hole circle (at 1.27 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 8 thru_hole circle (at 1.27 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 9 thru_hole circle (at -1.27 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 10 thru_hole circle (at -1.27 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 11 thru_hole circle (at -3.81 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 12 thru_hole circle (at -3.81 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 13 thru_hole circle (at -6.35 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 14 thru_hole circle (at -6.35 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 15 thru_hole circle (at -8.89 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 16 thru_hole circle (at -8.89 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) +) diff --git a/PCB/.pretty/he10-16d.kicad_mod b/PCB/.pretty/he10-16d.kicad_mod new file mode 100644 index 00000000..a52f4114 --- /dev/null +++ b/PCB/.pretty/he10-16d.kicad_mod @@ -0,0 +1,42 @@ +(module he10-16d (layer F.Cu) (tedit 0) + (descr "Connecteur HE10 16 contacts droit") + (tags "CONN HE10") + (fp_text reference REF** (at -5.588 -6.096) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value he10-16d (at 12.7 6.096) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -2.54 4.318) (end -2.54 3.556) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.54 3.556) (end -12.7 3.556) (layer F.SilkS) (width 0.15)) + (fp_line (start -12.7 3.556) (end -12.7 -3.556) (layer F.SilkS) (width 0.15)) + (fp_line (start -12.7 -3.556) (end 12.7 -3.556) (layer F.SilkS) (width 0.15)) + (fp_line (start 12.7 -3.556) (end 12.7 3.556) (layer F.SilkS) (width 0.15)) + (fp_line (start 12.7 3.556) (end 2.54 3.556) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.54 3.556) (end 2.54 4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start -19.812 4.318) (end -19.812 -4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start -19.812 -4.318) (end 19.812 -4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start 19.812 -4.318) (end 19.812 4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start 19.812 4.318) (end -19.812 4.318) (layer F.SilkS) (width 0.15)) + (fp_line (start -10.414 1.27) (end -11.684 0.508) (layer F.SilkS) (width 0.15)) + (fp_line (start -11.684 0.508) (end -11.684 2.032) (layer F.SilkS) (width 0.15)) + (fp_line (start -11.684 2.032) (end -10.414 1.27) (layer F.SilkS) (width 0.15)) + (pad 0 thru_hole circle (at -17.78 0) (size 5.461 5.461) (drill 2.6924) (layers *.Cu *.Mask F.SilkS)) + (pad 0 thru_hole circle (at 17.78 0) (size 5.461 5.461) (drill 2.6924) (layers *.Cu *.Mask F.SilkS)) + (pad 1 thru_hole rect (at -8.89 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 2 thru_hole circle (at -8.89 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 3 thru_hole circle (at -6.35 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 4 thru_hole circle (at -6.35 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 5 thru_hole circle (at -3.81 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 6 thru_hole circle (at -3.81 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 7 thru_hole circle (at -1.27 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 8 thru_hole circle (at -1.27 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 9 thru_hole circle (at 1.27 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 10 thru_hole circle (at 1.27 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 11 thru_hole circle (at 3.81 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 12 thru_hole circle (at 3.81 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 13 thru_hole circle (at 6.35 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 14 thru_hole circle (at 6.35 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 15 thru_hole circle (at 8.89 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) + (pad 16 thru_hole circle (at 8.89 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask F.SilkS)) +) diff --git a/PCB/.pretty/he10-20c.kicad_mod b/PCB/.pretty/he10-20c.kicad_mod new file mode 100644 index 00000000..3376b648 --- /dev/null +++ b/PCB/.pretty/he10-20c.kicad_mod @@ -0,0 +1,54 @@ +(module he10-20c (layer F.Cu) (tedit 0) + (descr "Connecteur HE10 20 contacts couche") + (tags "CONN HE10") + (fp_text reference REF** (at 0 3.81) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value he10-20c (at -1.27 7.62) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -14.986 -2.54) (end -14.986 2.032) (layer F.SilkS) (width 0.15)) + (fp_line (start -14.986 2.032) (end -16.256 3.302) (layer F.SilkS) (width 0.15)) + (fp_line (start -16.256 3.302) (end -18.288 3.302) (layer F.SilkS) (width 0.15)) + (fp_line (start -18.288 3.302) (end -19.558 2.032) (layer F.SilkS) (width 0.15)) + (fp_line (start -19.558 2.032) (end -19.558 -2.54) (layer F.SilkS) (width 0.15)) + (fp_line (start 19.558 -2.54) (end 19.558 2.032) (layer F.SilkS) (width 0.15)) + (fp_line (start 19.558 2.032) (end 18.288 3.302) (layer F.SilkS) (width 0.15)) + (fp_line (start 18.288 3.302) (end 16.256 3.302) (layer F.SilkS) (width 0.15)) + (fp_line (start 16.256 3.302) (end 14.986 2.032) (layer F.SilkS) (width 0.15)) + (fp_line (start 14.986 2.032) (end 14.986 -2.54) (layer F.SilkS) (width 0.15)) + (fp_line (start -21.59 -2.54) (end -21.59 4.445) (layer F.SilkS) (width 0.15)) + (fp_line (start -21.59 4.445) (end -18.415 14.605) (layer F.SilkS) (width 0.15)) + (fp_line (start -18.415 14.605) (end -14.605 14.605) (layer F.SilkS) (width 0.15)) + (fp_line (start -14.605 14.605) (end -12.7 10.16) (layer F.SilkS) (width 0.15)) + (fp_line (start -21.59 -2.54) (end 21.59 -2.54) (layer F.SilkS) (width 0.15)) + (fp_line (start 21.59 -2.54) (end 21.59 4.445) (layer F.SilkS) (width 0.15)) + (fp_line (start 21.59 4.445) (end 18.415 14.605) (layer F.SilkS) (width 0.15)) + (fp_line (start 18.415 14.605) (end 14.605 14.605) (layer F.SilkS) (width 0.15)) + (fp_line (start -12.7 10.16) (end 12.573 10.16) (layer F.SilkS) (width 0.15)) + (fp_line (start 14.605 14.605) (end 12.573 10.16) (layer F.SilkS) (width 0.15)) + (fp_line (start 11.43 10.16) (end 10.414 8.128) (layer F.SilkS) (width 0.15)) + (fp_line (start 10.414 8.128) (end 9.398 10.16) (layer F.SilkS) (width 0.15)) + (pad 0 thru_hole circle (at -17.272 0.508) (size 3.048 3.048) (drill 2.54) (layers *.Cu *.Mask F.SilkS)) + (pad 0 thru_hole circle (at 17.272 0.508) (size 3.048 3.048) (drill 2.54) (layers *.Cu *.Mask F.SilkS)) + (pad 1 thru_hole rect (at 11.43 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.SilkS *.Mask)) + (pad 2 thru_hole circle (at 11.43 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 3 thru_hole circle (at 8.89 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 4 thru_hole circle (at 8.89 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 5 thru_hole circle (at 6.35 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 6 thru_hole circle (at 6.35 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 7 thru_hole circle (at 3.81 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 8 thru_hole circle (at 3.81 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 9 thru_hole circle (at 1.27 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 10 thru_hole circle (at 1.27 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 11 thru_hole circle (at -1.27 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 12 thru_hole circle (at -1.27 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 13 thru_hole circle (at -3.81 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 14 thru_hole circle (at -3.81 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 15 thru_hole circle (at -6.35 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 16 thru_hole circle (at -6.35 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 17 thru_hole circle (at -8.89 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 18 thru_hole circle (at -8.89 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 19 thru_hole circle (at -11.43 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 20 thru_hole circle (at -11.43 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) +) diff --git a/PCB/.pretty/he10-26c.kicad_mod b/PCB/.pretty/he10-26c.kicad_mod new file mode 100644 index 00000000..7036b938 --- /dev/null +++ b/PCB/.pretty/he10-26c.kicad_mod @@ -0,0 +1,60 @@ +(module he10-26c (layer F.Cu) (tedit 0) + (descr "Connecteur HE10 26 contacts couche") + (tags "CONN HE10") + (fp_text reference REF** (at -0.508 4.572) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value he10-26c (at -2.54 8.128) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -18.796 -2.54) (end -18.796 1.778) (layer F.SilkS) (width 0.15)) + (fp_line (start -18.796 1.778) (end -20.066 3.048) (layer F.SilkS) (width 0.15)) + (fp_line (start -20.066 3.048) (end -22.098 3.048) (layer F.SilkS) (width 0.15)) + (fp_line (start -22.098 3.048) (end -23.368 1.778) (layer F.SilkS) (width 0.15)) + (fp_line (start -23.368 1.778) (end -23.368 -2.54) (layer F.SilkS) (width 0.15)) + (fp_line (start 23.368 -2.54) (end 23.368 2.032) (layer F.SilkS) (width 0.15)) + (fp_line (start 23.368 2.032) (end 22.098 3.302) (layer F.SilkS) (width 0.15)) + (fp_line (start 22.098 3.302) (end 20.066 3.302) (layer F.SilkS) (width 0.15)) + (fp_line (start 20.066 3.302) (end 18.796 2.032) (layer F.SilkS) (width 0.15)) + (fp_line (start 18.796 2.032) (end 18.796 -2.54) (layer F.SilkS) (width 0.15)) + (fp_line (start -25.4 -2.54) (end -25.4 4.445) (layer F.SilkS) (width 0.15)) + (fp_line (start -25.4 4.445) (end -22.225 14.605) (layer F.SilkS) (width 0.15)) + (fp_line (start -22.225 14.605) (end -18.415 14.605) (layer F.SilkS) (width 0.15)) + (fp_line (start -18.415 14.605) (end -16.51 10.16) (layer F.SilkS) (width 0.15)) + (fp_line (start -25.4 -2.54) (end 25.4 -2.54) (layer F.SilkS) (width 0.15)) + (fp_line (start 25.4 -2.54) (end 25.4 4.445) (layer F.SilkS) (width 0.15)) + (fp_line (start 25.4 4.445) (end 22.225 14.605) (layer F.SilkS) (width 0.15)) + (fp_line (start 22.225 14.605) (end 18.415 14.605) (layer F.SilkS) (width 0.15)) + (fp_line (start 16.256 10.16) (end -16.51 10.16) (layer F.SilkS) (width 0.15)) + (fp_line (start 18.415 14.605) (end 16.256 10.16) (layer F.SilkS) (width 0.15)) + (fp_line (start 15.113 10.16) (end 14.097 8.128) (layer F.SilkS) (width 0.15)) + (fp_line (start 14.097 8.128) (end 13.081 10.16) (layer F.SilkS) (width 0.15)) + (pad 0 thru_hole circle (at -21.082 0.508) (size 3.048 3.048) (drill 2.54) (layers *.Cu *.Mask F.SilkS)) + (pad 0 thru_hole circle (at 21.082 0.508) (size 3.048 3.048) (drill 2.54) (layers *.Cu *.Mask F.SilkS)) + (pad 1 thru_hole rect (at 15.24 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 2 thru_hole circle (at 15.24 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 3 thru_hole circle (at 12.7 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 4 thru_hole circle (at 12.7 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 5 thru_hole circle (at 10.16 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 6 thru_hole circle (at 10.16 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 7 thru_hole circle (at 7.62 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 8 thru_hole circle (at 7.62 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 9 thru_hole circle (at 5.08 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 10 thru_hole circle (at 5.08 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 11 thru_hole circle (at 2.54 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 12 thru_hole circle (at 2.54 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 13 thru_hole circle (at 0 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 14 thru_hole circle (at 0 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 15 thru_hole circle (at -2.54 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 16 thru_hole circle (at -2.54 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 17 thru_hole circle (at -5.08 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 18 thru_hole circle (at -5.08 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 19 thru_hole circle (at -7.62 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 20 thru_hole circle (at -7.62 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 21 thru_hole circle (at -10.16 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 22 thru_hole circle (at -10.16 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 23 thru_hole circle (at -12.7 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 24 thru_hole circle (at -12.7 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 25 thru_hole circle (at -15.24 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 26 thru_hole circle (at -15.24 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) +) diff --git a/PCB/.pretty/he10-34c.kicad_mod b/PCB/.pretty/he10-34c.kicad_mod new file mode 100644 index 00000000..947d5ed3 --- /dev/null +++ b/PCB/.pretty/he10-34c.kicad_mod @@ -0,0 +1,68 @@ +(module he10-34c (layer F.Cu) (tedit 0) + (descr "Connecteur HE10 34 contacts couche") + (tags "CONN HE10") + (fp_text reference REF** (at -15.24 -5.08) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value he10-34c (at 12.7 -5.08) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 23.876 -2.032) (end 25.146 -3.302) (layer F.SilkS) (width 0.15)) + (fp_line (start 25.146 -3.302) (end 27.178 -3.302) (layer F.SilkS) (width 0.15)) + (fp_line (start 27.178 -3.302) (end 28.448 -2.032) (layer F.SilkS) (width 0.15)) + (fp_line (start -28.448 -2.032) (end -27.178 -3.302) (layer F.SilkS) (width 0.15)) + (fp_line (start -27.178 -3.302) (end -25.146 -3.302) (layer F.SilkS) (width 0.15)) + (fp_line (start -25.146 -3.302) (end -23.876 -2.032) (layer F.SilkS) (width 0.15)) + (fp_line (start -23.876 2.54) (end -23.876 -2.032) (layer F.SilkS) (width 0.15)) + (fp_line (start -31.115 2.54) (end 31.115 2.54) (layer F.SilkS) (width 0.15)) + (fp_line (start 31.115 2.54) (end 31.115 -4.445) (layer F.SilkS) (width 0.15)) + (fp_line (start 31.115 -4.445) (end 28.575 -14.605) (layer F.SilkS) (width 0.15)) + (fp_line (start -31.115 -4.445) (end -31.115 2.54) (layer F.SilkS) (width 0.15)) + (fp_line (start -28.575 -14.605) (end -31.115 -4.445) (layer F.SilkS) (width 0.15)) + (fp_line (start -28.448 2.54) (end -28.448 -2.032) (layer F.SilkS) (width 0.15)) + (fp_line (start 23.876 2.54) (end 23.876 -2.032) (layer F.SilkS) (width 0.15)) + (fp_line (start 28.448 -2.032) (end 28.448 2.54) (layer F.SilkS) (width 0.15)) + (fp_line (start -21.59 -10.16) (end -20.32 -7.62) (layer F.SilkS) (width 0.15)) + (fp_line (start -20.32 -7.62) (end -19.05 -10.16) (layer F.SilkS) (width 0.15)) + (fp_line (start -23.495 -10.16) (end 23.495 -10.16) (layer F.SilkS) (width 0.15)) + (fp_line (start -28.575 -14.605) (end -24.765 -14.605) (layer F.SilkS) (width 0.15)) + (fp_line (start -24.765 -14.605) (end -23.495 -10.16) (layer F.SilkS) (width 0.15)) + (fp_line (start 28.575 -14.605) (end 24.765 -14.605) (layer F.SilkS) (width 0.15)) + (fp_line (start 24.765 -14.605) (end 23.495 -10.16) (layer F.SilkS) (width 0.15)) + (pad 0 thru_hole circle (at -26.162 -0.508) (size 3.048 3.048) (drill 2.54) (layers *.Cu *.Mask F.SilkS)) + (pad 0 thru_hole circle (at 26.162 -0.508) (size 3.048 3.048) (drill 2.54) (layers *.Cu *.Mask F.SilkS)) + (pad 1 thru_hole rect (at -20.32 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 2 thru_hole circle (at -20.32 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 3 thru_hole circle (at -17.78 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 4 thru_hole circle (at -17.78 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 5 thru_hole circle (at -15.24 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 6 thru_hole circle (at -15.24 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 7 thru_hole circle (at -12.7 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 8 thru_hole circle (at -12.7 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 9 thru_hole circle (at -10.16 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 10 thru_hole circle (at -10.16 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 11 thru_hole circle (at -7.62 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 12 thru_hole circle (at -7.62 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 13 thru_hole circle (at -5.08 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 14 thru_hole circle (at -5.08 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 15 thru_hole circle (at -2.54 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 16 thru_hole circle (at -2.54 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 17 thru_hole circle (at 0 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 18 thru_hole circle (at 0 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 19 thru_hole circle (at 2.54 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 20 thru_hole circle (at 2.54 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 21 thru_hole circle (at 5.08 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 22 thru_hole circle (at 5.08 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 23 thru_hole circle (at 7.62 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 24 thru_hole circle (at 7.62 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 25 thru_hole circle (at 10.16 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 26 thru_hole circle (at 10.16 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 27 thru_hole circle (at 12.7 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 28 thru_hole circle (at 12.7 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 29 thru_hole circle (at 15.24 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 30 thru_hole circle (at 15.24 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 31 thru_hole circle (at 17.78 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 32 thru_hole circle (at 17.78 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 33 thru_hole circle (at 20.32 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 34 thru_hole circle (at 20.32 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) +) diff --git a/PCB/.pretty/he10-40c.kicad_mod b/PCB/.pretty/he10-40c.kicad_mod new file mode 100644 index 00000000..af3407e6 --- /dev/null +++ b/PCB/.pretty/he10-40c.kicad_mod @@ -0,0 +1,74 @@ +(module he10-40c (layer F.Cu) (tedit 0) + (descr "Connecteur HE10 40 contacts couche") + (tags "CONN HE10") + (fp_text reference REF** (at -16.51 -5.08) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value he10-40c (at 15.24 -5.08) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 32.258 -2.032) (end 32.258 2.54) (layer F.SilkS) (width 0.15)) + (fp_line (start 27.686 -2.032) (end 28.956 -3.302) (layer F.SilkS) (width 0.15)) + (fp_line (start 28.956 -3.302) (end 30.988 -3.302) (layer F.SilkS) (width 0.15)) + (fp_line (start 30.988 -3.302) (end 32.258 -2.032) (layer F.SilkS) (width 0.15)) + (fp_line (start -32.258 -2.032) (end -30.988 -3.302) (layer F.SilkS) (width 0.15)) + (fp_line (start -30.988 -3.302) (end -28.956 -3.302) (layer F.SilkS) (width 0.15)) + (fp_line (start -28.956 -3.302) (end -27.686 -2.032) (layer F.SilkS) (width 0.15)) + (fp_line (start -34.925 2.54) (end 34.925 2.54) (layer F.SilkS) (width 0.15)) + (fp_line (start 34.925 2.54) (end 34.925 -4.445) (layer F.SilkS) (width 0.15)) + (fp_line (start 34.925 -4.445) (end 32.385 -14.605) (layer F.SilkS) (width 0.15)) + (fp_line (start -32.385 -14.605) (end -34.925 -4.445) (layer F.SilkS) (width 0.15)) + (fp_line (start -34.925 -4.445) (end -34.925 2.54) (layer F.SilkS) (width 0.15)) + (fp_line (start -32.258 2.54) (end -32.258 -2.032) (layer F.SilkS) (width 0.15)) + (fp_line (start -27.686 -2.032) (end -27.686 2.54) (layer F.SilkS) (width 0.15)) + (fp_line (start 27.686 2.54) (end 27.686 -2.032) (layer F.SilkS) (width 0.15)) + (fp_line (start -25.4 -10.16) (end -24.13 -7.62) (layer F.SilkS) (width 0.15)) + (fp_line (start -24.13 -7.62) (end -22.86 -10.16) (layer F.SilkS) (width 0.15)) + (fp_line (start 27.305 -10.16) (end -27.305 -10.16) (layer F.SilkS) (width 0.15)) + (fp_line (start -32.385 -14.605) (end -28.575 -14.605) (layer F.SilkS) (width 0.15)) + (fp_line (start -28.575 -14.605) (end -27.305 -10.16) (layer F.SilkS) (width 0.15)) + (fp_line (start 32.385 -14.605) (end 28.575 -14.605) (layer F.SilkS) (width 0.15)) + (fp_line (start 28.575 -14.605) (end 27.305 -10.16) (layer F.SilkS) (width 0.15)) + (pad 0 thru_hole circle (at -29.972 -0.508) (size 3.048 3.048) (drill 2.54) (layers *.Cu *.Mask F.SilkS)) + (pad 0 thru_hole circle (at 29.972 -0.508) (size 3.048 3.048) (drill 2.54) (layers *.Cu *.Mask F.SilkS)) + (pad 1 thru_hole rect (at -24.13 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 2 thru_hole circle (at -24.13 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 3 thru_hole circle (at -21.59 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 4 thru_hole circle (at -21.59 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 5 thru_hole circle (at -19.05 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 6 thru_hole circle (at -19.05 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 7 thru_hole circle (at -16.51 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 8 thru_hole circle (at -16.51 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 9 thru_hole circle (at -13.97 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 10 thru_hole circle (at -13.97 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 11 thru_hole circle (at -11.43 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 12 thru_hole circle (at -11.43 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 13 thru_hole circle (at -8.89 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 14 thru_hole circle (at -8.89 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 15 thru_hole circle (at -6.35 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 16 thru_hole circle (at -6.35 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 17 thru_hole circle (at -3.81 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 18 thru_hole circle (at -3.81 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 19 thru_hole circle (at -1.27 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 20 thru_hole circle (at -1.27 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 21 thru_hole circle (at 1.27 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 22 thru_hole circle (at 1.27 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 23 thru_hole circle (at 3.81 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 24 thru_hole circle (at 3.81 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 25 thru_hole circle (at 6.35 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 26 thru_hole circle (at 6.35 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 27 thru_hole circle (at 8.89 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 28 thru_hole circle (at 8.89 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 29 thru_hole circle (at 11.43 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 30 thru_hole circle (at 11.43 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 31 thru_hole circle (at 13.97 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 32 thru_hole circle (at 13.97 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 33 thru_hole circle (at 16.51 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 34 thru_hole circle (at 16.51 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 35 thru_hole circle (at 19.05 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 36 thru_hole circle (at 19.05 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 37 thru_hole circle (at 21.59 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 38 thru_hole circle (at 21.59 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 39 thru_hole circle (at 24.13 1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad 40 thru_hole circle (at 24.13 -1.27) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) +) diff --git a/PCB/BACKUP_OLD_PCB b/PCB/BACKUP_OLD_PCB new file mode 100644 index 00000000..5cc153bd --- /dev/null +++ b/PCB/BACKUP_OLD_PCB @@ -0,0 +1,1874 @@ +(kicad_pcb (version 4) (host pcbnew "(2015-08-05 BZR 6055, Git fa29c62)-product") + + (general + (links 92) + (no_connects 92) + (area 57.15 53.264999 240.105001 147.395001) + (thickness 1.6) + (drawings 4) + (tracks 0) + (zones 0) + (modules 47) + (nets 69) + ) + + (page A4) + (layers + (0 F.Cu mixed) + (31 B.Cu mixed) + (32 B.Adhes user) + (33 F.Adhes user) + (34 B.Paste user) + (35 F.Paste user) + (36 B.SilkS user) + (37 F.SilkS user) + (38 B.Mask user) + (39 F.Mask user) + (40 Dwgs.User user) + (41 Cmts.User user) + (42 Eco1.User user) + (43 Eco2.User user) + (44 Edge.Cuts user) + (45 Margin user) + (46 B.CrtYd user) + (47 F.CrtYd user) + (48 B.Fab user) + (49 F.Fab user) + ) + + (setup + (last_trace_width 0.25) + (trace_clearance 0.2) + (zone_clearance 0.508) + (zone_45_only no) + (trace_min 0.2) + (segment_width 0.2) + (edge_width 0.15) + (via_size 0.6) + (via_drill 0.4) + (via_min_size 0.4) + (via_min_drill 0.3) + (uvia_size 0.3) + (uvia_drill 0.1) + (uvias_allowed no) + (uvia_min_size 0.2) + (uvia_min_drill 0.1) + (pcb_text_width 0.3) + (pcb_text_size 1.5 1.5) + (mod_edge_width 0.15) + (mod_text_size 1 1) + (mod_text_width 0.15) + (pad_size 1.524 1.524) + (pad_drill 0.762) + (pad_to_mask_clearance 0.2) + (aux_axis_origin 0 0) + (visible_elements 7FFFF7FF) + (pcbplotparams + (layerselection 0x00030_80000001) + (usegerberextensions false) + (excludeedgelayer true) + (linewidth 0.100000) + (plotframeref false) + (viasonmask false) + (mode 1) + (useauxorigin false) + (hpglpennumber 1) + (hpglpenspeed 20) + (hpglpendiameter 15) + (hpglpenoverlay 2) + (psnegative false) + (psa4output false) + (plotreference true) + (plotvalue true) + (plotinvisibletext false) + (padsonsilk false) + (subtractmaskfromsilk false) + (outputformat 1) + (mirror false) + (drillshape 1) + (scaleselection 1) + (outputdirectory "")) + ) + + (net 0 "") + (net 1 "Net-(C1-Pad1)") + (net 2 "Net-(C1-Pad2)") + (net 3 "Net-(C2-Pad1)") + (net 4 "Net-(C2-Pad2)") + (net 5 +5V) + (net 6 GND) + (net 7 /VCC_3V3) + (net 8 /AVCC) + (net 9 /AGND) + (net 10 "Net-(C6-Pad1)") + (net 11 "Net-(C7-Pad1)") + (net 12 "Net-(C7-Pad2)") + (net 13 /LM324_VCC) + (net 14 /VGND) + (net 15 /VSENSE_OCP) + (net 16 "Net-(C9-Pad1)") + (net 17 "Net-(IC1-Pad1)") + (net 18 "Net-(IC1-Pad2)") + (net 19 "Net-(IC1-Pad3)") + (net 20 "Net-(IC1-Pad4)") + (net 21 "Net-(IC1-Pad5)") + (net 22 /DAC_OUT) + (net 23 "Net-(IC1-Pad7)") + (net 24 "Net-(IC1-Pad10)") + (net 25 /XCK) + (net 26 /DIG_CH2) + (net 27 "Net-(IC1-Pad13)") + (net 28 "Net-(IC1-Pad16)") + (net 29 /DIG_CH1) + (net 30 "Net-(IC1-Pad20)") + (net 31 "Net-(IC1-Pad21)") + (net 32 "Net-(IC1-Pad22)") + (net 33 "Net-(IC1-Pad23)") + (net 34 /PSU_PWM) + (net 35 "Net-(IC1-Pad25)") + (net 36 /D-) + (net 37 /D+) + (net 38 "Net-(IC1-Pad28)") + (net 39 "Net-(IC1-Pad29)") + (net 40 "Net-(IC1-Pad32)") + (net 41 "Net-(IC1-Pad33)") + (net 42 "Net-(IC1-Pad34)") + (net 43 "Net-(IC1-Pad35)") + (net 44 "Net-(IC1-Pad36)") + (net 45 "Net-(IC1-Pad37)") + (net 46 /CH1) + (net 47 /CH2) + (net 48 /AVCC_ON_2) + (net 49 "Net-(P2-Pad4)") + (net 50 "Net-(P3-Pad1)") + (net 51 "Net-(P3-Pad2)") + (net 52 "Net-(P3-Pad3)") + (net 53 "Net-(P3-Pad4)") + (net 54 +12V) + (net 55 "Net-(P4-Pad3)") + (net 56 "Net-(P8-Pad1)") + (net 57 "Net-(P8-Pad2)") + (net 58 "Net-(R1-Pad1)") + (net 59 "Net-(R2-Pad1)") + (net 60 "Net-(R11-Pad2)") + (net 61 "Net-(R12-Pad2)") + (net 62 "Net-(R13-Pad2)") + (net 63 "Net-(R10-Pad1)") + (net 64 "Net-(R16-Pad1)") + (net 65 "Net-(R18-Pad1)") + (net 66 "Net-(R18-Pad2)") + (net 67 "Net-(R21-Pad1)") + (net 68 "Net-(R22-Pad1)") + + (net_class Default "This is the default net class." + (clearance 0.2) + (trace_width 0.25) + (via_dia 0.6) + (via_drill 0.4) + (uvia_dia 0.3) + (uvia_drill 0.1) + (add_net +12V) + (add_net +5V) + (add_net /AGND) + (add_net /AVCC) + (add_net /AVCC_ON_2) + (add_net /CH1) + (add_net /CH2) + (add_net /D+) + (add_net /D-) + (add_net /DAC_OUT) + (add_net /DIG_CH1) + (add_net /DIG_CH2) + (add_net /LM324_VCC) + (add_net /PSU_PWM) + (add_net /VCC_3V3) + (add_net /VGND) + (add_net /VSENSE_OCP) + (add_net /XCK) + (add_net GND) + (add_net "Net-(C1-Pad1)") + (add_net "Net-(C1-Pad2)") + (add_net "Net-(C2-Pad1)") + (add_net "Net-(C2-Pad2)") + (add_net "Net-(C6-Pad1)") + (add_net "Net-(C7-Pad1)") + (add_net "Net-(C7-Pad2)") + (add_net "Net-(C9-Pad1)") + (add_net "Net-(IC1-Pad1)") + (add_net "Net-(IC1-Pad10)") + (add_net "Net-(IC1-Pad13)") + (add_net "Net-(IC1-Pad16)") + (add_net "Net-(IC1-Pad2)") + (add_net "Net-(IC1-Pad20)") + (add_net "Net-(IC1-Pad21)") + (add_net "Net-(IC1-Pad22)") + (add_net "Net-(IC1-Pad23)") + (add_net "Net-(IC1-Pad25)") + (add_net "Net-(IC1-Pad28)") + (add_net "Net-(IC1-Pad29)") + (add_net "Net-(IC1-Pad3)") + (add_net "Net-(IC1-Pad32)") + (add_net "Net-(IC1-Pad33)") + (add_net "Net-(IC1-Pad34)") + (add_net "Net-(IC1-Pad35)") + (add_net "Net-(IC1-Pad36)") + (add_net "Net-(IC1-Pad37)") + (add_net "Net-(IC1-Pad4)") + (add_net "Net-(IC1-Pad5)") + (add_net "Net-(IC1-Pad7)") + (add_net "Net-(P2-Pad4)") + (add_net "Net-(P3-Pad1)") + (add_net "Net-(P3-Pad2)") + (add_net "Net-(P3-Pad3)") + (add_net "Net-(P3-Pad4)") + (add_net "Net-(P4-Pad3)") + (add_net "Net-(P8-Pad1)") + (add_net "Net-(P8-Pad2)") + (add_net "Net-(R1-Pad1)") + (add_net "Net-(R10-Pad1)") + (add_net "Net-(R11-Pad2)") + (add_net "Net-(R12-Pad2)") + (add_net "Net-(R13-Pad2)") + (add_net "Net-(R16-Pad1)") + (add_net "Net-(R18-Pad1)") + (add_net "Net-(R18-Pad2)") + (add_net "Net-(R2-Pad1)") + (add_net "Net-(R21-Pad1)") + (add_net "Net-(R22-Pad1)") + ) + + (module Capacitors_SMD:C_1812_HandSoldering (layer F.Cu) (tedit 541A9C88) (tstamp 55D58AED) + (at 154.875001 101.445) + (descr "Capacitor SMD 1812, hand soldering") + (tags "capacitor 1812") + (path /55CAB611) + (attr smd) + (fp_text reference C1 (at 0 -3) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value C (at 0 3) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -4.3 -1.85) (end 4.3 -1.85) (layer F.CrtYd) (width 0.05)) + (fp_line (start -4.3 1.85) (end 4.3 1.85) (layer F.CrtYd) (width 0.05)) + (fp_line (start -4.3 -1.85) (end -4.3 1.85) (layer F.CrtYd) (width 0.05)) + (fp_line (start 4.3 -1.85) (end 4.3 1.85) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.8 -1.725) (end -1.8 -1.725) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.8 1.725) (end 1.8 1.725) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -2.9 0) (size 2.2 3) (layers F.Cu F.Paste F.Mask) + (net 1 "Net-(C1-Pad1)")) + (pad 2 smd rect (at 2.9 0) (size 2.2 3) (layers F.Cu F.Paste F.Mask) + (net 2 "Net-(C1-Pad2)")) + (model Capacitors_SMD.3dshapes/C_1812_HandSoldering.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_SMD:C_1812 (layer F.Cu) (tedit 5415D8C7) (tstamp 55D58AF9) + (at 157.525001 117.645) + (descr "Capacitor SMD 1812, reflow soldering, AVX (see smccp.pdf)") + (tags "capacitor 1812") + (path /55CAB4DE) + (attr smd) + (fp_text reference C2 (at 0 -3) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value C (at 0 3) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -3.1 -1.85) (end 3.1 -1.85) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.1 1.85) (end 3.1 1.85) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.1 -1.85) (end -3.1 1.85) (layer F.CrtYd) (width 0.05)) + (fp_line (start 3.1 -1.85) (end 3.1 1.85) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.8 -1.725) (end -1.8 -1.725) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.8 1.725) (end 1.8 1.725) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -2.3 0) (size 1 3) (layers F.Cu F.Paste F.Mask) + (net 3 "Net-(C2-Pad1)")) + (pad 2 smd rect (at 2.3 0) (size 1 3) (layers F.Cu F.Paste F.Mask) + (net 4 "Net-(C2-Pad2)")) + (model Capacitors_SMD.3dshapes/C_1812.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_SMD:C_1812_HandSoldering (layer F.Cu) (tedit 541A9C88) (tstamp 55D58B05) + (at 119.38 132.08) + (descr "Capacitor SMD 1812, hand soldering") + (tags "capacitor 1812") + (path /55CB13E1) + (attr smd) + (fp_text reference C3 (at 0 -3) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value C_Small (at 0 3) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -4.3 -1.85) (end 4.3 -1.85) (layer F.CrtYd) (width 0.05)) + (fp_line (start -4.3 1.85) (end 4.3 1.85) (layer F.CrtYd) (width 0.05)) + (fp_line (start -4.3 -1.85) (end -4.3 1.85) (layer F.CrtYd) (width 0.05)) + (fp_line (start 4.3 -1.85) (end 4.3 1.85) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.8 -1.725) (end -1.8 -1.725) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.8 1.725) (end 1.8 1.725) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -2.9 0) (size 2.2 3) (layers F.Cu F.Paste F.Mask) + (net 5 +5V)) + (pad 2 smd rect (at 2.9 0) (size 2.2 3) (layers F.Cu F.Paste F.Mask) + (net 6 GND)) + (model Capacitors_SMD.3dshapes/C_1812_HandSoldering.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_SMD:C_1812_HandSoldering (layer F.Cu) (tedit 541A9C88) (tstamp 55D58B11) + (at 138.735001 116.695) + (descr "Capacitor SMD 1812, hand soldering") + (tags "capacitor 1812") + (path /55CB147C) + (attr smd) + (fp_text reference C4 (at 0 -3) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value C_Small (at 0 3) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -4.3 -1.85) (end 4.3 -1.85) (layer F.CrtYd) (width 0.05)) + (fp_line (start -4.3 1.85) (end 4.3 1.85) (layer F.CrtYd) (width 0.05)) + (fp_line (start -4.3 -1.85) (end -4.3 1.85) (layer F.CrtYd) (width 0.05)) + (fp_line (start 4.3 -1.85) (end 4.3 1.85) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.8 -1.725) (end -1.8 -1.725) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.8 1.725) (end 1.8 1.725) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -2.9 0) (size 2.2 3) (layers F.Cu F.Paste F.Mask) + (net 7 /VCC_3V3)) + (pad 2 smd rect (at 2.9 0) (size 2.2 3) (layers F.Cu F.Paste F.Mask) + (net 6 GND)) + (model Capacitors_SMD.3dshapes/C_1812_HandSoldering.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_SMD:C_1812_HandSoldering (layer F.Cu) (tedit 541A9C88) (tstamp 55D58B1D) + (at 149.675001 124.795) + (descr "Capacitor SMD 1812, hand soldering") + (tags "capacitor 1812") + (path /55D60181) + (attr smd) + (fp_text reference C5 (at 0 -3) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value C_Small (at 0 3) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -4.3 -1.85) (end 4.3 -1.85) (layer F.CrtYd) (width 0.05)) + (fp_line (start -4.3 1.85) (end 4.3 1.85) (layer F.CrtYd) (width 0.05)) + (fp_line (start -4.3 -1.85) (end -4.3 1.85) (layer F.CrtYd) (width 0.05)) + (fp_line (start 4.3 -1.85) (end 4.3 1.85) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.8 -1.725) (end -1.8 -1.725) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.8 1.725) (end 1.8 1.725) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -2.9 0) (size 2.2 3) (layers F.Cu F.Paste F.Mask) + (net 8 /AVCC)) + (pad 2 smd rect (at 2.9 0) (size 2.2 3) (layers F.Cu F.Paste F.Mask) + (net 9 /AGND)) + (model Capacitors_SMD.3dshapes/C_1812_HandSoldering.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_SMD:C_1812_HandSoldering (layer F.Cu) (tedit 541A9C88) (tstamp 55D58B29) + (at 156.845 109.855) + (descr "Capacitor SMD 1812, hand soldering") + (tags "capacitor 1812") + (path /55CC1A1C) + (attr smd) + (fp_text reference C6 (at 0 -3) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value C_Small (at 0 3) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -4.3 -1.85) (end 4.3 -1.85) (layer F.CrtYd) (width 0.05)) + (fp_line (start -4.3 1.85) (end 4.3 1.85) (layer F.CrtYd) (width 0.05)) + (fp_line (start -4.3 -1.85) (end -4.3 1.85) (layer F.CrtYd) (width 0.05)) + (fp_line (start 4.3 -1.85) (end 4.3 1.85) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.8 -1.725) (end -1.8 -1.725) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.8 1.725) (end 1.8 1.725) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -2.9 0) (size 2.2 3) (layers F.Cu F.Paste F.Mask) + (net 10 "Net-(C6-Pad1)")) + (pad 2 smd rect (at 2.9 0) (size 2.2 3) (layers F.Cu F.Paste F.Mask) + (net 6 GND)) + (model Capacitors_SMD.3dshapes/C_1812_HandSoldering.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_SMD:C_1812_HandSoldering (layer F.Cu) (tedit 541A9C88) (tstamp 55D58B35) + (at 140.625001 124.795) + (descr "Capacitor SMD 1812, hand soldering") + (tags "capacitor 1812") + (path /55CB630B) + (attr smd) + (fp_text reference C7 (at 0 -3) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value C (at 0 3) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -4.3 -1.85) (end 4.3 -1.85) (layer F.CrtYd) (width 0.05)) + (fp_line (start -4.3 1.85) (end 4.3 1.85) (layer F.CrtYd) (width 0.05)) + (fp_line (start -4.3 -1.85) (end -4.3 1.85) (layer F.CrtYd) (width 0.05)) + (fp_line (start 4.3 -1.85) (end 4.3 1.85) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.8 -1.725) (end -1.8 -1.725) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.8 1.725) (end 1.8 1.725) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -2.9 0) (size 2.2 3) (layers F.Cu F.Paste F.Mask) + (net 11 "Net-(C7-Pad1)")) + (pad 2 smd rect (at 2.9 0) (size 2.2 3) (layers F.Cu F.Paste F.Mask) + (net 12 "Net-(C7-Pad2)")) + (model Capacitors_SMD.3dshapes/C_1812_HandSoldering.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_SMD:C_1812_HandSoldering (layer F.Cu) (tedit 541A9C88) (tstamp 55D58B41) + (at 147.785001 116.695) + (descr "Capacitor SMD 1812, hand soldering") + (tags "capacitor 1812") + (path /55D75F49) + (attr smd) + (fp_text reference C8 (at 0 -3) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value C_Small (at 0 3) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -4.3 -1.85) (end 4.3 -1.85) (layer F.CrtYd) (width 0.05)) + (fp_line (start -4.3 1.85) (end 4.3 1.85) (layer F.CrtYd) (width 0.05)) + (fp_line (start -4.3 -1.85) (end -4.3 1.85) (layer F.CrtYd) (width 0.05)) + (fp_line (start 4.3 -1.85) (end 4.3 1.85) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.8 -1.725) (end -1.8 -1.725) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.8 1.725) (end 1.8 1.725) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -2.9 0) (size 2.2 3) (layers F.Cu F.Paste F.Mask) + (net 13 /LM324_VCC)) + (pad 2 smd rect (at 2.9 0) (size 2.2 3) (layers F.Cu F.Paste F.Mask) + (net 14 /VGND)) + (model Capacitors_SMD.3dshapes/C_1812_HandSoldering.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_Elko_ThroughHole:Elko_vert_11.2x6.3mm_RM2.5_CopperClear (layer F.Cu) (tedit 5454A12B) (tstamp 55D58B4D) + (at 209.55 83.82 270) + (descr "Electrolytic Capacitor, vertical, diameter 6,3mm, RM 2,5mm, CopperClear, radial,") + (tags "Electrolytic Capacitor, vertical, diameter 6,3mm, RM 2,5mm, Elko, Electrolytkondensator, Kondensator gepolt, Durchmesser 6,3mm, CopperClear, radial,") + (path /55CC64C3) + (fp_text reference C9 (at 1.27 -5.08 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value CP1 (at 1.27 5.08 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 0.26924 -1.69926) (end 0.76962 -1.69926) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.26924 -1.69926) (end 0.26924 -2.19964) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.23114 -1.69926) (end 0.26924 -1.69926) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.26924 -1.69926) (end 0.26924 -1.30048) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.26924 -1.30048) (end 0.26924 -1.19888) (layer F.SilkS) (width 0.15)) + (fp_circle (center 1.27 0) (end 4.4196 0) (layer F.SilkS) (width 0.15)) + (pad 2 thru_hole circle (at 2.54 0 270) (size 1.50114 1.50114) (drill 0.8001) (layers *.Cu *.Mask F.SilkS) + (net 15 /VSENSE_OCP)) + (pad 1 thru_hole circle (at 0 0 270) (size 1.50114 1.50114) (drill 0.8001) (layers *.Cu *.Mask F.SilkS) + (net 16 "Net-(C9-Pad1)")) + (model Capacitors_Elko_ThroughHole.3dshapes/Elko_vert_11.2x6.3mm_RM2.5_CopperClear.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_2512_HandSoldering (layer F.Cu) (tedit 5418A1CA) (tstamp 55D58B59) + (at 120.65 88.9) + (descr "Resistor SMD 2512, hand soldering") + (tags "resistor 2512") + (path /55D739F3) + (attr smd) + (fp_text reference F1 (at 0 -3.1) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value F_Small (at 0 3.1) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -5.6 -1.95) (end 5.6 -1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start -5.6 1.95) (end 5.6 1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start -5.6 -1.95) (end -5.6 1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start 5.6 -1.95) (end 5.6 1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.6 1.825) (end -2.6 1.825) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.6 -1.825) (end 2.6 -1.825) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -3.95 0) (size 2.7 3.2) (layers F.Cu F.Paste F.Mask) + (net 6 GND)) + (pad 2 smd rect (at 3.95 0) (size 2.7 3.2) (layers F.Cu F.Paste F.Mask) + (net 14 /VGND)) + (model Resistors_SMD.3dshapes/R_2512_HandSoldering.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Housings_QFP:LQFP-44_10x10mm_Pitch0.8mm (layer F.Cu) (tedit 54130A77) (tstamp 55D58B96) + (at 111.76 107.95 270) + (descr "LQFP44 (see Appnote_PCB_Guidelines_TRINAMIC_packages.pdf)") + (tags "QFP 0.8") + (path /55CA8F25) + (attr smd) + (fp_text reference IC1 (at 0 -7.65 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value ATXMEGA16A4U-A (at 0 7.65 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -6.9 -6.9) (end -6.9 6.9) (layer F.CrtYd) (width 0.05)) + (fp_line (start 6.9 -6.9) (end 6.9 6.9) (layer F.CrtYd) (width 0.05)) + (fp_line (start -6.9 -6.9) (end 6.9 -6.9) (layer F.CrtYd) (width 0.05)) + (fp_line (start -6.9 6.9) (end 6.9 6.9) (layer F.CrtYd) (width 0.05)) + (fp_line (start -5.175 -5.175) (end -5.175 -4.505) (layer F.SilkS) (width 0.15)) + (fp_line (start 5.175 -5.175) (end 5.175 -4.505) (layer F.SilkS) (width 0.15)) + (fp_line (start 5.175 5.175) (end 5.175 4.505) (layer F.SilkS) (width 0.15)) + (fp_line (start -5.175 5.175) (end -5.175 4.505) (layer F.SilkS) (width 0.15)) + (fp_line (start -5.175 -5.175) (end -4.505 -5.175) (layer F.SilkS) (width 0.15)) + (fp_line (start -5.175 5.175) (end -4.505 5.175) (layer F.SilkS) (width 0.15)) + (fp_line (start 5.175 5.175) (end 4.505 5.175) (layer F.SilkS) (width 0.15)) + (fp_line (start 5.175 -5.175) (end 4.505 -5.175) (layer F.SilkS) (width 0.15)) + (fp_line (start -5.175 -4.505) (end -6.65 -4.505) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -5.85 -4 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 17 "Net-(IC1-Pad1)")) + (pad 2 smd rect (at -5.85 -3.2 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 18 "Net-(IC1-Pad2)")) + (pad 3 smd rect (at -5.85 -2.4 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 19 "Net-(IC1-Pad3)")) + (pad 4 smd rect (at -5.85 -1.6 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 20 "Net-(IC1-Pad4)")) + (pad 5 smd rect (at -5.85 -0.8 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 21 "Net-(IC1-Pad5)")) + (pad 6 smd rect (at -5.85 0 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 22 /DAC_OUT)) + (pad 7 smd rect (at -5.85 0.8 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 23 "Net-(IC1-Pad7)")) + (pad 8 smd rect (at -5.85 1.6 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 6 GND)) + (pad 9 smd rect (at -5.85 2.4 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 7 /VCC_3V3)) + (pad 10 smd rect (at -5.85 3.2 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 24 "Net-(IC1-Pad10)")) + (pad 11 smd rect (at -5.85 4 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 25 /XCK)) + (pad 12 smd rect (at -4 5.85) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 26 /DIG_CH2)) + (pad 13 smd rect (at -3.2 5.85) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 27 "Net-(IC1-Pad13)")) + (pad 14 smd rect (at -2.4 5.85) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 6 GND)) + (pad 15 smd rect (at -1.6 5.85) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 25 /XCK)) + (pad 16 smd rect (at -0.8 5.85) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 28 "Net-(IC1-Pad16)")) + (pad 17 smd rect (at 0 5.85) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 29 /DIG_CH1)) + (pad 18 smd rect (at 0.8 5.85) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 6 GND)) + (pad 19 smd rect (at 1.6 5.85) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 7 /VCC_3V3)) + (pad 20 smd rect (at 2.4 5.85) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 30 "Net-(IC1-Pad20)")) + (pad 21 smd rect (at 3.2 5.85) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 31 "Net-(IC1-Pad21)")) + (pad 22 smd rect (at 4 5.85) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 32 "Net-(IC1-Pad22)")) + (pad 23 smd rect (at 5.85 4 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 33 "Net-(IC1-Pad23)")) + (pad 24 smd rect (at 5.85 3.2 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 34 /PSU_PWM)) + (pad 25 smd rect (at 5.85 2.4 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 35 "Net-(IC1-Pad25)")) + (pad 26 smd rect (at 5.85 1.6 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 36 /D-)) + (pad 27 smd rect (at 5.85 0.8 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 37 /D+)) + (pad 28 smd rect (at 5.85 0 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 38 "Net-(IC1-Pad28)")) + (pad 29 smd rect (at 5.85 -0.8 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 39 "Net-(IC1-Pad29)")) + (pad 30 smd rect (at 5.85 -1.6 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 6 GND)) + (pad 31 smd rect (at 5.85 -2.4 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 7 /VCC_3V3)) + (pad 32 smd rect (at 5.85 -3.2 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 40 "Net-(IC1-Pad32)")) + (pad 33 smd rect (at 5.85 -4 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 41 "Net-(IC1-Pad33)")) + (pad 34 smd rect (at 4 -5.85) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 42 "Net-(IC1-Pad34)")) + (pad 35 smd rect (at 3.2 -5.85) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 43 "Net-(IC1-Pad35)")) + (pad 36 smd rect (at 2.4 -5.85) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 44 "Net-(IC1-Pad36)")) + (pad 37 smd rect (at 1.6 -5.85) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 45 "Net-(IC1-Pad37)")) + (pad 38 smd rect (at 0.8 -5.85) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 9 /AGND)) + (pad 39 smd rect (at 0 -5.85) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 8 /AVCC)) + (pad 40 smd rect (at -0.8 -5.85) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 46 /CH1)) + (pad 41 smd rect (at -1.6 -5.85) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 15 /VSENSE_OCP)) + (pad 42 smd rect (at -2.4 -5.85) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 47 /CH2)) + (pad 43 smd rect (at -3.2 -5.85) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 14 /VGND)) + (pad 44 smd rect (at -4 -5.85) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 48 /AVCC_ON_2)) + (model Housings_QFP.3dshapes/LQFP-44_10x10mm_Pitch0.8mm.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Pin_Headers:Pin_Header_Straight_1x04 (layer F.Cu) (tedit 0) (tstamp 55D58BA9) + (at 75.270238 91.445) + (descr "Through hole pin header") + (tags "pin header") + (path /55CAB35C) + (fp_text reference P1 (at 0 -5.1) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value SCOPE_IN (at 0 -3.1) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.75 -1.75) (end -1.75 9.4) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.75 -1.75) (end 1.75 9.4) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 -1.75) (end 1.75 -1.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 9.4) (end 1.75 9.4) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.27 1.27) (end -1.27 8.89) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.27 1.27) (end 1.27 8.89) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.55 -1.55) (end 1.55 0) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.27 8.89) (end 1.27 8.89) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.27 1.27) (end -1.27 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.55 0) (end -1.55 -1.55) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.55 -1.55) (end 1.55 -1.55) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole rect (at 0 0) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 3 "Net-(C2-Pad1)")) + (pad 2 thru_hole oval (at 0 2.54) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 4 "Net-(C2-Pad2)")) + (pad 3 thru_hole oval (at 0 5.08) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 2 "Net-(C1-Pad2)")) + (pad 4 thru_hole oval (at 0 7.62) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 1 "Net-(C1-Pad1)")) + (model Pin_Headers.3dshapes/Pin_Header_Straight_1x04.wrl + (at (xyz 0 -0.15 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 90)) + ) + ) + + (module Connect:USB_Micro-B (layer F.Cu) (tedit 5543E447) (tstamp 55D58BBF) + (at 86.995 85.09 270) + (descr "Micro USB Type B Receptacle") + (tags "USB USB_B USB_micro USB_OTG") + (path /55CA90D2) + (attr smd) + (fp_text reference P2 (at 0 -3.45 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value USB_OTG (at 0 4.8 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -4.6 -2.8) (end 4.6 -2.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 4.6 -2.8) (end 4.6 4.05) (layer F.CrtYd) (width 0.05)) + (fp_line (start 4.6 4.05) (end -4.6 4.05) (layer F.CrtYd) (width 0.05)) + (fp_line (start -4.6 4.05) (end -4.6 -2.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -4.3509 3.81746) (end 4.3491 3.81746) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.3509 -2.58754) (end 4.3491 -2.58754) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.3491 -2.58754) (end 4.3491 3.81746) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.3491 2.58746) (end -4.3509 2.58746) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.3509 3.81746) (end -4.3509 -2.58754) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -1.3009 -1.56254) (size 1.35 0.4) (layers F.Cu F.Paste F.Mask) + (net 6 GND)) + (pad 2 smd rect (at -0.6509 -1.56254) (size 1.35 0.4) (layers F.Cu F.Paste F.Mask) + (net 36 /D-)) + (pad 3 smd rect (at -0.0009 -1.56254) (size 1.35 0.4) (layers F.Cu F.Paste F.Mask) + (net 37 /D+)) + (pad 4 smd rect (at 0.6491 -1.56254) (size 1.35 0.4) (layers F.Cu F.Paste F.Mask) + (net 49 "Net-(P2-Pad4)")) + (pad 5 smd rect (at 1.2991 -1.56254) (size 1.35 0.4) (layers F.Cu F.Paste F.Mask) + (net 5 +5V)) + (pad 6 thru_hole oval (at -2.5009 -1.56254) (size 0.95 1.25) (drill oval 0.55 0.85) (layers *.Cu *.Mask F.SilkS) + (net 5 +5V)) + (pad 6 thru_hole oval (at 2.4991 -1.56254) (size 0.95 1.25) (drill oval 0.55 0.85) (layers *.Cu *.Mask F.SilkS) + (net 5 +5V)) + (pad 6 thru_hole oval (at -3.5009 1.13746) (size 1.55 1) (drill oval 1.15 0.5) (layers *.Cu *.Mask F.SilkS) + (net 5 +5V)) + (pad 6 thru_hole oval (at 3.4991 1.13746) (size 1.55 1) (drill oval 1.15 0.5) (layers *.Cu *.Mask F.SilkS) + (net 5 +5V)) + ) + + (module Pin_Headers:Pin_Header_Straight_1x04 (layer F.Cu) (tedit 0) (tstamp 55D58BD2) + (at 180.34 143.51 90) + (descr "Through hole pin header") + (tags "pin header") + (path /55CBF4D5) + (fp_text reference P3 (at 0 -5.1 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value DIG_OUT (at 0 -3.1 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.75 -1.75) (end -1.75 9.4) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.75 -1.75) (end 1.75 9.4) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 -1.75) (end 1.75 -1.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 9.4) (end 1.75 9.4) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.27 1.27) (end -1.27 8.89) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.27 1.27) (end 1.27 8.89) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.55 -1.55) (end 1.55 0) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.27 8.89) (end 1.27 8.89) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.27 1.27) (end -1.27 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.55 0) (end -1.55 -1.55) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.55 -1.55) (end 1.55 -1.55) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole rect (at 0 0 90) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 50 "Net-(P3-Pad1)")) + (pad 2 thru_hole oval (at 0 2.54 90) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 51 "Net-(P3-Pad2)")) + (pad 3 thru_hole oval (at 0 5.08 90) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 52 "Net-(P3-Pad3)")) + (pad 4 thru_hole oval (at 0 7.62 90) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 53 "Net-(P3-Pad4)")) + (model Pin_Headers.3dshapes/Pin_Header_Straight_1x04.wrl + (at (xyz 0 -0.15 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 90)) + ) + ) + + (module Pin_Headers:Pin_Header_Straight_1x03 (layer F.Cu) (tedit 0) (tstamp 55D58BE4) + (at 190.5 77.47) + (descr "Through hole pin header") + (tags "pin header") + (path /55CD757A) + (fp_text reference P4 (at 0 -5.1) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value OPAMP_JUMPER (at 0 -3.1) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.75 -1.75) (end -1.75 6.85) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.75 -1.75) (end 1.75 6.85) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 -1.75) (end 1.75 -1.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 6.85) (end 1.75 6.85) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.27 1.27) (end -1.27 6.35) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.27 6.35) (end 1.27 6.35) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.27 6.35) (end 1.27 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.55 -1.55) (end 1.55 0) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.27 1.27) (end -1.27 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.55 0) (end -1.55 -1.55) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.55 -1.55) (end 1.55 -1.55) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole rect (at 0 0) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 54 +12V)) + (pad 2 thru_hole oval (at 0 2.54) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 13 /LM324_VCC)) + (pad 3 thru_hole oval (at 0 5.08) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 55 "Net-(P4-Pad3)")) + (model Pin_Headers.3dshapes/Pin_Header_Straight_1x03.wrl + (at (xyz 0 -0.1 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 90)) + ) + ) + + (module Pin_Headers:Pin_Header_Straight_1x02 (layer F.Cu) (tedit 54EA090C) (tstamp 55D58BF5) + (at 212.09 68.58 90) + (descr "Through hole pin header") + (tags "pin header") + (path /55CDECCE) + (fp_text reference P5 (at 0 -5.1 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value HVI (at 0 -3.1 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.27 1.27) (end 1.27 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.55 -1.55) (end 1.55 0) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.75 -1.75) (end -1.75 4.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.75 -1.75) (end 1.75 4.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 -1.75) (end 1.75 -1.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 4.3) (end 1.75 4.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.27 1.27) (end -1.27 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.55 0) (end -1.55 -1.55) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.55 -1.55) (end 1.55 -1.55) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.27 1.27) (end -1.27 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.27 3.81) (end 1.27 3.81) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole rect (at 0 0 90) (size 2.032 2.032) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 54 +12V)) + (pad 2 thru_hole oval (at 0 2.54 90) (size 2.032 2.032) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 14 /VGND)) + (model Pin_Headers.3dshapes/Pin_Header_Straight_1x02.wrl + (at (xyz 0 -0.05 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 90)) + ) + ) + + (module Pin_Headers:Pin_Header_Straight_1x02 (layer F.Cu) (tedit 54EA090C) (tstamp 55D58C06) + (at 130.634524 116.345) + (descr "Through hole pin header") + (tags "pin header") + (path /55CB63F0) + (fp_text reference P6 (at 0 -5.1) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value AWG_OUT (at 0 -3.1) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.27 1.27) (end 1.27 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.55 -1.55) (end 1.55 0) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.75 -1.75) (end -1.75 4.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.75 -1.75) (end 1.75 4.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 -1.75) (end 1.75 -1.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 4.3) (end 1.75 4.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.27 1.27) (end -1.27 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.55 0) (end -1.55 -1.55) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.55 -1.55) (end 1.55 -1.55) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.27 1.27) (end -1.27 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.27 3.81) (end 1.27 3.81) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole rect (at 0 0) (size 2.032 2.032) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 12 "Net-(C7-Pad2)")) + (pad 2 thru_hole oval (at 0 2.54) (size 2.032 2.032) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 11 "Net-(C7-Pad1)")) + (model Pin_Headers.3dshapes/Pin_Header_Straight_1x02.wrl + (at (xyz 0 -0.05 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 90)) + ) + ) + + (module Pin_Headers:Pin_Header_Straight_1x02 (layer F.Cu) (tedit 54EA090C) (tstamp 55D58C17) + (at 223.52 83.82) + (descr "Through hole pin header") + (tags "pin header") + (path /55CC540F) + (fp_text reference P7 (at 0 -5.1) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value HVO (at 0 -3.1) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.27 1.27) (end 1.27 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.55 -1.55) (end 1.55 0) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.75 -1.75) (end -1.75 4.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.75 -1.75) (end 1.75 4.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 -1.75) (end 1.75 -1.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 4.3) (end 1.75 4.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.27 1.27) (end -1.27 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.55 0) (end -1.55 -1.55) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.55 -1.55) (end 1.55 -1.55) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.27 1.27) (end -1.27 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.27 3.81) (end 1.27 3.81) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole rect (at 0 0) (size 2.032 2.032) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 16 "Net-(C9-Pad1)")) + (pad 2 thru_hole oval (at 0 2.54) (size 2.032 2.032) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 15 /VSENSE_OCP)) + (model Pin_Headers.3dshapes/Pin_Header_Straight_1x02.wrl + (at (xyz 0 -0.05 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 90)) + ) + ) + + (module Pin_Headers:Pin_Header_Straight_1x02 (layer F.Cu) (tedit 54EA090C) (tstamp 55D58C28) + (at 141.355952 108.045) + (descr "Through hole pin header") + (tags "pin header") + (path /55D6DB77) + (fp_text reference P8 (at 0 -5.1) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value DIG_IN (at 0 -3.1) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.27 1.27) (end 1.27 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.55 -1.55) (end 1.55 0) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.75 -1.75) (end -1.75 4.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.75 -1.75) (end 1.75 4.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 -1.75) (end 1.75 -1.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 4.3) (end 1.75 4.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.27 1.27) (end -1.27 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.55 0) (end -1.55 -1.55) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.55 -1.55) (end 1.55 -1.55) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.27 1.27) (end -1.27 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.27 3.81) (end 1.27 3.81) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole rect (at 0 0) (size 2.032 2.032) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 56 "Net-(P8-Pad1)")) + (pad 2 thru_hole oval (at 0 2.54) (size 2.032 2.032) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 57 "Net-(P8-Pad2)")) + (model Pin_Headers.3dshapes/Pin_Header_Straight_1x02.wrl + (at (xyz 0 -0.05 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 90)) + ) + ) + + (module Resistors_SMD:R_2512_HandSoldering (layer F.Cu) (tedit 5418A1CA) (tstamp 55D58C34) + (at 109.575001 89.445) + (descr "Resistor SMD 2512, hand soldering") + (tags "resistor 2512") + (path /55CAAB95) + (attr smd) + (fp_text reference R1 (at 0 -3.1) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 3.1) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -5.6 -1.95) (end 5.6 -1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start -5.6 1.95) (end 5.6 1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start -5.6 -1.95) (end -5.6 1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start 5.6 -1.95) (end 5.6 1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.6 1.825) (end -2.6 1.825) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.6 -1.825) (end 2.6 -1.825) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -3.95 0) (size 2.7 3.2) (layers F.Cu F.Paste F.Mask) + (net 58 "Net-(R1-Pad1)")) + (pad 2 smd rect (at 3.95 0) (size 2.7 3.2) (layers F.Cu F.Paste F.Mask) + (net 1 "Net-(C1-Pad1)")) + (model Resistors_SMD.3dshapes/R_2512_HandSoldering.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_2512_HandSoldering (layer F.Cu) (tedit 5418A1CA) (tstamp 55D58C40) + (at 97.925001 89.445) + (descr "Resistor SMD 2512, hand soldering") + (tags "resistor 2512") + (path /55CAAD4C) + (attr smd) + (fp_text reference R2 (at 0 -3.1) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 3.1) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -5.6 -1.95) (end 5.6 -1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start -5.6 1.95) (end 5.6 1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start -5.6 -1.95) (end -5.6 1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start 5.6 -1.95) (end 5.6 1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.6 1.825) (end -2.6 1.825) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.6 -1.825) (end 2.6 -1.825) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -3.95 0) (size 2.7 3.2) (layers F.Cu F.Paste F.Mask) + (net 59 "Net-(R2-Pad1)")) + (pad 2 smd rect (at 3.95 0) (size 2.7 3.2) (layers F.Cu F.Paste F.Mask) + (net 3 "Net-(C2-Pad1)")) + (model Resistors_SMD.3dshapes/R_2512_HandSoldering.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_2512_HandSoldering (layer F.Cu) (tedit 5418A1CA) (tstamp 55D58C4C) + (at 86.275001 104.045) + (descr "Resistor SMD 2512, hand soldering") + (tags "resistor 2512") + (path /55CAABF4) + (attr smd) + (fp_text reference R3 (at 0 -3.1) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 3.1) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -5.6 -1.95) (end 5.6 -1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start -5.6 1.95) (end 5.6 1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start -5.6 -1.95) (end -5.6 1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start 5.6 -1.95) (end 5.6 1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.6 1.825) (end -2.6 1.825) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.6 -1.825) (end 2.6 -1.825) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -3.95 0) (size 2.7 3.2) (layers F.Cu F.Paste F.Mask) + (net 58 "Net-(R1-Pad1)")) + (pad 2 smd rect (at 3.95 0) (size 2.7 3.2) (layers F.Cu F.Paste F.Mask) + (net 48 /AVCC_ON_2)) + (model Resistors_SMD.3dshapes/R_2512_HandSoldering.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_2512_HandSoldering (layer F.Cu) (tedit 5418A1CA) (tstamp 55D58C58) + (at 74.625001 120.145) + (descr "Resistor SMD 2512, hand soldering") + (tags "resistor 2512") + (path /55CAAD11) + (attr smd) + (fp_text reference R4 (at 0 -3.1) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 3.1) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -5.6 -1.95) (end 5.6 -1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start -5.6 1.95) (end 5.6 1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start -5.6 -1.95) (end -5.6 1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start 5.6 -1.95) (end 5.6 1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.6 1.825) (end -2.6 1.825) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.6 -1.825) (end 2.6 -1.825) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -3.95 0) (size 2.7 3.2) (layers F.Cu F.Paste F.Mask) + (net 48 /AVCC_ON_2)) + (pad 2 smd rect (at 3.95 0) (size 2.7 3.2) (layers F.Cu F.Paste F.Mask) + (net 59 "Net-(R2-Pad1)")) + (model Resistors_SMD.3dshapes/R_2512_HandSoldering.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_2512_HandSoldering (layer F.Cu) (tedit 5418A1CA) (tstamp 55D58C64) + (at 121.225001 122.645) + (descr "Resistor SMD 2512, hand soldering") + (tags "resistor 2512") + (path /55CAAC5F) + (attr smd) + (fp_text reference R5 (at 0 -3.1) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 3.1) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -5.6 -1.95) (end 5.6 -1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start -5.6 1.95) (end 5.6 1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start -5.6 -1.95) (end -5.6 1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start 5.6 -1.95) (end 5.6 1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.6 1.825) (end -2.6 1.825) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.6 -1.825) (end 2.6 -1.825) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -3.95 0) (size 2.7 3.2) (layers F.Cu F.Paste F.Mask) + (net 8 /AVCC)) + (pad 2 smd rect (at 3.95 0) (size 2.7 3.2) (layers F.Cu F.Paste F.Mask) + (net 48 /AVCC_ON_2)) + (model Resistors_SMD.3dshapes/R_2512_HandSoldering.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_2512_HandSoldering (layer F.Cu) (tedit 5418A1CA) (tstamp 55D58C70) + (at 62.975001 120.145) + (descr "Resistor SMD 2512, hand soldering") + (tags "resistor 2512") + (path /55CAACD2) + (attr smd) + (fp_text reference R6 (at 0 -3.1) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 3.1) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -5.6 -1.95) (end 5.6 -1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start -5.6 1.95) (end 5.6 1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start -5.6 -1.95) (end -5.6 1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start 5.6 -1.95) (end 5.6 1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.6 1.825) (end -2.6 1.825) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.6 -1.825) (end 2.6 -1.825) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -3.95 0) (size 2.7 3.2) (layers F.Cu F.Paste F.Mask) + (net 9 /AGND)) + (pad 2 smd rect (at 3.95 0) (size 2.7 3.2) (layers F.Cu F.Paste F.Mask) + (net 48 /AVCC_ON_2)) + (model Resistors_SMD.3dshapes/R_2512_HandSoldering.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_2512_HandSoldering (layer F.Cu) (tedit 5418A1CA) (tstamp 55D58C7C) + (at 198.12 138.43) + (descr "Resistor SMD 2512, hand soldering") + (tags "resistor 2512") + (path /55CBCDA5) + (attr smd) + (fp_text reference R7 (at 0 -3.1) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 3.1) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -5.6 -1.95) (end 5.6 -1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start -5.6 1.95) (end 5.6 1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start -5.6 -1.95) (end -5.6 1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start 5.6 -1.95) (end 5.6 1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.6 1.825) (end -2.6 1.825) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.6 -1.825) (end 2.6 -1.825) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -3.95 0) (size 2.7 3.2) (layers F.Cu F.Paste F.Mask) + (net 60 "Net-(R11-Pad2)")) + (pad 2 smd rect (at 3.95 0) (size 2.7 3.2) (layers F.Cu F.Paste F.Mask) + (net 53 "Net-(P3-Pad4)")) + (model Resistors_SMD.3dshapes/R_2512_HandSoldering.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_2512_HandSoldering (layer F.Cu) (tedit 5418A1CA) (tstamp 55D58C88) + (at 97.925001 106.045) + (descr "Resistor SMD 2512, hand soldering") + (tags "resistor 2512") + (path /55CBE401) + (attr smd) + (fp_text reference R8 (at 0 -3.1) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 3.1) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -5.6 -1.95) (end 5.6 -1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start -5.6 1.95) (end 5.6 1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start -5.6 -1.95) (end -5.6 1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start 5.6 -1.95) (end 5.6 1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.6 1.825) (end -2.6 1.825) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.6 -1.825) (end 2.6 -1.825) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -3.95 0) (size 2.7 3.2) (layers F.Cu F.Paste F.Mask) + (net 61 "Net-(R12-Pad2)")) + (pad 2 smd rect (at 3.95 0) (size 2.7 3.2) (layers F.Cu F.Paste F.Mask) + (net 52 "Net-(P3-Pad3)")) + (model Resistors_SMD.3dshapes/R_2512_HandSoldering.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_2512_HandSoldering (layer F.Cu) (tedit 5418A1CA) (tstamp 55D58C94) + (at 160.02 138.43) + (descr "Resistor SMD 2512, hand soldering") + (tags "resistor 2512") + (path /55CBE16B) + (attr smd) + (fp_text reference R9 (at 0 -3.1) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 3.1) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -5.6 -1.95) (end 5.6 -1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start -5.6 1.95) (end 5.6 1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start -5.6 -1.95) (end -5.6 1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start 5.6 -1.95) (end 5.6 1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.6 1.825) (end -2.6 1.825) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.6 -1.825) (end 2.6 -1.825) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -3.95 0) (size 2.7 3.2) (layers F.Cu F.Paste F.Mask) + (net 62 "Net-(R13-Pad2)")) + (pad 2 smd rect (at 3.95 0) (size 2.7 3.2) (layers F.Cu F.Paste F.Mask) + (net 51 "Net-(P3-Pad2)")) + (model Resistors_SMD.3dshapes/R_2512_HandSoldering.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_2512_HandSoldering (layer F.Cu) (tedit 5418A1CA) (tstamp 55D58CA0) + (at 179.07 134.62) + (descr "Resistor SMD 2512, hand soldering") + (tags "resistor 2512") + (path /55CBE2C7) + (attr smd) + (fp_text reference R10 (at 0 -3.1) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 3.1) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -5.6 -1.95) (end 5.6 -1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start -5.6 1.95) (end 5.6 1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start -5.6 -1.95) (end -5.6 1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start 5.6 -1.95) (end 5.6 1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.6 1.825) (end -2.6 1.825) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.6 -1.825) (end 2.6 -1.825) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -3.95 0) (size 2.7 3.2) (layers F.Cu F.Paste F.Mask) + (net 63 "Net-(R10-Pad1)")) + (pad 2 smd rect (at 3.95 0) (size 2.7 3.2) (layers F.Cu F.Paste F.Mask) + (net 50 "Net-(P3-Pad1)")) + (model Resistors_SMD.3dshapes/R_2512_HandSoldering.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_2512_HandSoldering (layer F.Cu) (tedit 5418A1CA) (tstamp 55D58CAC) + (at 212.09 134.62) + (descr "Resistor SMD 2512, hand soldering") + (tags "resistor 2512") + (path /55CBCD2A) + (attr smd) + (fp_text reference R11 (at 0 -3.1) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 3.1) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -5.6 -1.95) (end 5.6 -1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start -5.6 1.95) (end 5.6 1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start -5.6 -1.95) (end -5.6 1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start 5.6 -1.95) (end 5.6 1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.6 1.825) (end -2.6 1.825) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.6 -1.825) (end 2.6 -1.825) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -3.95 0) (size 2.7 3.2) (layers F.Cu F.Paste F.Mask) + (net 38 "Net-(IC1-Pad28)")) + (pad 2 smd rect (at 3.95 0) (size 2.7 3.2) (layers F.Cu F.Paste F.Mask) + (net 60 "Net-(R11-Pad2)")) + (model Resistors_SMD.3dshapes/R_2512_HandSoldering.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_2512_HandSoldering (layer F.Cu) (tedit 5418A1CA) (tstamp 55D58CB8) + (at 86.275001 114.345) + (descr "Resistor SMD 2512, hand soldering") + (tags "resistor 2512") + (path /55CBE362) + (attr smd) + (fp_text reference R12 (at 0 -3.1) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 3.1) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -5.6 -1.95) (end 5.6 -1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start -5.6 1.95) (end 5.6 1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start -5.6 -1.95) (end -5.6 1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start 5.6 -1.95) (end 5.6 1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.6 1.825) (end -2.6 1.825) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.6 -1.825) (end 2.6 -1.825) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -3.95 0) (size 2.7 3.2) (layers F.Cu F.Paste F.Mask) + (net 39 "Net-(IC1-Pad29)")) + (pad 2 smd rect (at 3.95 0) (size 2.7 3.2) (layers F.Cu F.Paste F.Mask) + (net 61 "Net-(R12-Pad2)")) + (model Resistors_SMD.3dshapes/R_2512_HandSoldering.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_2512_HandSoldering (layer F.Cu) (tedit 5418A1CA) (tstamp 55D58CC4) + (at 142.24 137.16) + (descr "Resistor SMD 2512, hand soldering") + (tags "resistor 2512") + (path /55CBE0F4) + (attr smd) + (fp_text reference R13 (at 0 -3.1) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 3.1) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -5.6 -1.95) (end 5.6 -1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start -5.6 1.95) (end 5.6 1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start -5.6 -1.95) (end -5.6 1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start 5.6 -1.95) (end 5.6 1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.6 1.825) (end -2.6 1.825) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.6 -1.825) (end 2.6 -1.825) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -3.95 0) (size 2.7 3.2) (layers F.Cu F.Paste F.Mask) + (net 40 "Net-(IC1-Pad32)")) + (pad 2 smd rect (at 3.95 0) (size 2.7 3.2) (layers F.Cu F.Paste F.Mask) + (net 62 "Net-(R13-Pad2)")) + (model Resistors_SMD.3dshapes/R_2512_HandSoldering.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_2512_HandSoldering (layer F.Cu) (tedit 5418A1CA) (tstamp 55D58CD0) + (at 109.575001 114.345) + (descr "Resistor SMD 2512, hand soldering") + (tags "resistor 2512") + (path /55CBE21C) + (attr smd) + (fp_text reference R14 (at 0 -3.1) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 3.1) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -5.6 -1.95) (end 5.6 -1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start -5.6 1.95) (end 5.6 1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start -5.6 -1.95) (end -5.6 1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start 5.6 -1.95) (end 5.6 1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.6 1.825) (end -2.6 1.825) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.6 -1.825) (end 2.6 -1.825) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -3.95 0) (size 2.7 3.2) (layers F.Cu F.Paste F.Mask) + (net 41 "Net-(IC1-Pad33)")) + (pad 2 smd rect (at 3.95 0) (size 2.7 3.2) (layers F.Cu F.Paste F.Mask) + (net 63 "Net-(R10-Pad1)")) + (model Resistors_SMD.3dshapes/R_2512_HandSoldering.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_2512_HandSoldering (layer F.Cu) (tedit 5418A1CA) (tstamp 55D58CDC) + (at 121.225001 114.345) + (descr "Resistor SMD 2512, hand soldering") + (tags "resistor 2512") + (path /55D84EF6) + (attr smd) + (fp_text reference R15 (at 0 -3.1) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 3.1) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -5.6 -1.95) (end 5.6 -1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start -5.6 1.95) (end 5.6 1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start -5.6 -1.95) (end -5.6 1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start 5.6 -1.95) (end 5.6 1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.6 1.825) (end -2.6 1.825) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.6 -1.825) (end 2.6 -1.825) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -3.95 0) (size 2.7 3.2) (layers F.Cu F.Paste F.Mask) + (net 43 "Net-(IC1-Pad35)")) + (pad 2 smd rect (at 3.95 0) (size 2.7 3.2) (layers F.Cu F.Paste F.Mask) + (net 6 GND)) + (model Resistors_SMD.3dshapes/R_2512_HandSoldering.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_2512_HandSoldering (layer F.Cu) (tedit 5418A1CA) (tstamp 55D58CE8) + (at 165.735 82.55 180) + (descr "Resistor SMD 2512, hand soldering") + (tags "resistor 2512") + (path /55D592A5) + (attr smd) + (fp_text reference R16 (at 0 -3.1 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 3.1 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -5.6 -1.95) (end 5.6 -1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start -5.6 1.95) (end 5.6 1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start -5.6 -1.95) (end -5.6 1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start 5.6 -1.95) (end 5.6 1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.6 1.825) (end -2.6 1.825) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.6 -1.825) (end 2.6 -1.825) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -3.95 0 180) (size 2.7 3.2) (layers F.Cu F.Paste F.Mask) + (net 64 "Net-(R16-Pad1)")) + (pad 2 smd rect (at 3.95 0 180) (size 2.7 3.2) (layers F.Cu F.Paste F.Mask) + (net 5 +5V)) + (model Resistors_SMD.3dshapes/R_2512_HandSoldering.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_2512_HandSoldering (layer F.Cu) (tedit 5418A1CA) (tstamp 55D58CF4) + (at 179.705 82.55 180) + (descr "Resistor SMD 2512, hand soldering") + (tags "resistor 2512") + (path /55D4D96A) + (attr smd) + (fp_text reference R17 (at 0 -3.1 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 3.1 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -5.6 -1.95) (end 5.6 -1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start -5.6 1.95) (end 5.6 1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start -5.6 -1.95) (end -5.6 1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start 5.6 -1.95) (end 5.6 1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.6 1.825) (end -2.6 1.825) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.6 -1.825) (end 2.6 -1.825) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -3.95 0 180) (size 2.7 3.2) (layers F.Cu F.Paste F.Mask) + (net 55 "Net-(P4-Pad3)")) + (pad 2 smd rect (at 3.95 0 180) (size 2.7 3.2) (layers F.Cu F.Paste F.Mask) + (net 64 "Net-(R16-Pad1)")) + (model Resistors_SMD.3dshapes/R_2512_HandSoldering.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_2512_HandSoldering (layer F.Cu) (tedit 5418A1CA) (tstamp 55D58D00) + (at 144.525001 97.745) + (descr "Resistor SMD 2512, hand soldering") + (tags "resistor 2512") + (path /55CB4680) + (attr smd) + (fp_text reference R18 (at 0 -3.1) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 3.1) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -5.6 -1.95) (end 5.6 -1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start -5.6 1.95) (end 5.6 1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start -5.6 -1.95) (end -5.6 1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start 5.6 -1.95) (end 5.6 1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.6 1.825) (end -2.6 1.825) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.6 -1.825) (end 2.6 -1.825) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -3.95 0) (size 2.7 3.2) (layers F.Cu F.Paste F.Mask) + (net 65 "Net-(R18-Pad1)")) + (pad 2 smd rect (at 3.95 0) (size 2.7 3.2) (layers F.Cu F.Paste F.Mask) + (net 66 "Net-(R18-Pad2)")) + (model Resistors_SMD.3dshapes/R_2512_HandSoldering.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_2512_HandSoldering (layer F.Cu) (tedit 5418A1CA) (tstamp 55D58D0C) + (at 109.575001 122.645) + (descr "Resistor SMD 2512, hand soldering") + (tags "resistor 2512") + (path /55CC18B5) + (attr smd) + (fp_text reference R19 (at 0 -3.1) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 3.1) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -5.6 -1.95) (end 5.6 -1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start -5.6 1.95) (end 5.6 1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start -5.6 -1.95) (end -5.6 1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start 5.6 -1.95) (end 5.6 1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.6 1.825) (end -2.6 1.825) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.6 -1.825) (end 2.6 -1.825) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -3.95 0) (size 2.7 3.2) (layers F.Cu F.Paste F.Mask) + (net 10 "Net-(C6-Pad1)")) + (pad 2 smd rect (at 3.95 0) (size 2.7 3.2) (layers F.Cu F.Paste F.Mask) + (net 34 /PSU_PWM)) + (model Resistors_SMD.3dshapes/R_2512_HandSoldering.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_2512_HandSoldering (layer F.Cu) (tedit 5418A1CA) (tstamp 55D58D18) + (at 109.575001 97.745) + (descr "Resistor SMD 2512, hand soldering") + (tags "resistor 2512") + (path /55CB9020) + (attr smd) + (fp_text reference R20 (at 0 -3.1) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 3.1) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -5.6 -1.95) (end 5.6 -1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start -5.6 1.95) (end 5.6 1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start -5.6 -1.95) (end -5.6 1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start 5.6 -1.95) (end 5.6 1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.6 1.825) (end -2.6 1.825) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.6 -1.825) (end 2.6 -1.825) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -3.95 0) (size 2.7 3.2) (layers F.Cu F.Paste F.Mask) + (net 12 "Net-(C7-Pad2)")) + (pad 2 smd rect (at 3.95 0) (size 2.7 3.2) (layers F.Cu F.Paste F.Mask) + (net 65 "Net-(R18-Pad1)")) + (model Resistors_SMD.3dshapes/R_2512_HandSoldering.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_2512_HandSoldering (layer F.Cu) (tedit 5418A1CA) (tstamp 55D58D24) + (at 97.925001 122.645) + (descr "Resistor SMD 2512, hand soldering") + (tags "resistor 2512") + (path /55CC31EA) + (attr smd) + (fp_text reference R21 (at 0 -3.1) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 3.1) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -5.6 -1.95) (end 5.6 -1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start -5.6 1.95) (end 5.6 1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start -5.6 -1.95) (end -5.6 1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start 5.6 -1.95) (end 5.6 1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.6 1.825) (end -2.6 1.825) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.6 -1.825) (end 2.6 -1.825) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -3.95 0) (size 2.7 3.2) (layers F.Cu F.Paste F.Mask) + (net 67 "Net-(R21-Pad1)")) + (pad 2 smd rect (at 3.95 0) (size 2.7 3.2) (layers F.Cu F.Paste F.Mask) + (net 6 GND)) + (model Resistors_SMD.3dshapes/R_2512_HandSoldering.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_2512_HandSoldering (layer F.Cu) (tedit 5418A1CA) (tstamp 55D58D30) + (at 97.925001 97.745) + (descr "Resistor SMD 2512, hand soldering") + (tags "resistor 2512") + (path /55CC344F) + (attr smd) + (fp_text reference R22 (at 0 -3.1) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 3.1) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -5.6 -1.95) (end 5.6 -1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start -5.6 1.95) (end 5.6 1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start -5.6 -1.95) (end -5.6 1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start 5.6 -1.95) (end 5.6 1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.6 1.825) (end -2.6 1.825) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.6 -1.825) (end 2.6 -1.825) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -3.95 0) (size 2.7 3.2) (layers F.Cu F.Paste F.Mask) + (net 68 "Net-(R22-Pad1)")) + (pad 2 smd rect (at 3.95 0) (size 2.7 3.2) (layers F.Cu F.Paste F.Mask) + (net 67 "Net-(R21-Pad1)")) + (model Resistors_SMD.3dshapes/R_2512_HandSoldering.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_2512_HandSoldering (layer F.Cu) (tedit 5418A1CA) (tstamp 55D58D3C) + (at 218.44 85.09 270) + (descr "Resistor SMD 2512, hand soldering") + (tags "resistor 2512") + (path /55CC774D) + (attr smd) + (fp_text reference R23 (at 0 -3.1 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 3.1 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -5.6 -1.95) (end 5.6 -1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start -5.6 1.95) (end 5.6 1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start -5.6 -1.95) (end -5.6 1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start 5.6 -1.95) (end 5.6 1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.6 1.825) (end -2.6 1.825) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.6 -1.825) (end 2.6 -1.825) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -3.95 0 270) (size 2.7 3.2) (layers F.Cu F.Paste F.Mask) + (net 16 "Net-(C9-Pad1)")) + (pad 2 smd rect (at 3.95 0 270) (size 2.7 3.2) (layers F.Cu F.Paste F.Mask) + (net 15 /VSENSE_OCP)) + (model Resistors_SMD.3dshapes/R_2512_HandSoldering.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_2512_HandSoldering (layer F.Cu) (tedit 5418A1CA) (tstamp 55D58D48) + (at 132.875001 89.445) + (descr "Resistor SMD 2512, hand soldering") + (tags "resistor 2512") + (path /55D44B0B) + (attr smd) + (fp_text reference R24 (at 0 -3.1) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 3.1) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -5.6 -1.95) (end 5.6 -1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start -5.6 1.95) (end 5.6 1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start -5.6 -1.95) (end -5.6 1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start 5.6 -1.95) (end 5.6 1.95) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.6 1.825) (end -2.6 1.825) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.6 -1.825) (end 2.6 -1.825) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -3.95 0) (size 2.7 3.2) (layers F.Cu F.Paste F.Mask) + (net 15 /VSENSE_OCP)) + (pad 2 smd rect (at 3.95 0) (size 2.7 3.2) (layers F.Cu F.Paste F.Mask) + (net 14 /VGND)) + (model Resistors_SMD.3dshapes/R_2512_HandSoldering.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Connect:C96ABCFD (layer F.Cu) (tedit 0) (tstamp 55D58DB8) + (at 138.43 63.5) + (descr "Connecteur DIN Europe 96 contacts ABC male droit") + (tags "CONN DIN") + (path /55CC4BD0) + (fp_text reference T1 (at -26.035 -7.62) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value TIP29A (at 20.955 -7.62) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -46.99 5.08) (end 46.99 5.08) (layer F.SilkS) (width 0.15)) + (fp_line (start 46.99 5.08) (end 46.99 -2.54) (layer F.SilkS) (width 0.15)) + (fp_line (start -46.99 -2.54) (end -46.99 5.08) (layer F.SilkS) (width 0.15)) + (fp_line (start -41.91 -2.54) (end -41.91 5.08) (layer F.SilkS) (width 0.15)) + (fp_line (start 41.91 -2.54) (end 41.91 5.08) (layer F.SilkS) (width 0.15)) + (fp_line (start -46.99 -2.54) (end -46.99 -5.08) (layer F.SilkS) (width 0.15)) + (fp_line (start -46.99 -5.08) (end 46.99 -5.08) (layer F.SilkS) (width 0.15)) + (fp_line (start 46.99 -5.08) (end 46.99 -2.54) (layer F.SilkS) (width 0.15)) + (fp_line (start 41.91 -5.08) (end 41.91 -2.54) (layer F.SilkS) (width 0.15)) + (fp_line (start -41.91 -2.54) (end -41.91 -5.08) (layer F.SilkS) (width 0.15)) + (pad 65 thru_hole circle (at -44.45 0) (size 3.81 3.81) (drill 3.048) (layers *.Cu *.Mask F.SilkS)) + (pad 66 thru_hole circle (at 44.45 0) (size 3.81 3.81) (drill 3.048) (layers *.Cu *.Mask F.SilkS)) + (pad A3 thru_hole circle (at -34.29 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A4 thru_hole circle (at -31.75 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A5 thru_hole circle (at -29.21 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A6 thru_hole circle (at -26.67 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A7 thru_hole circle (at -24.13 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A8 thru_hole circle (at -21.59 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A9 thru_hole circle (at -19.05 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A10 thru_hole circle (at -16.51 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A11 thru_hole circle (at -13.97 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A12 thru_hole circle (at -11.43 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A13 thru_hole circle (at -8.89 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A14 thru_hole circle (at -6.35 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A15 thru_hole circle (at -3.81 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A16 thru_hole circle (at -1.27 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A17 thru_hole circle (at 1.27 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A18 thru_hole circle (at 3.81 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A19 thru_hole circle (at 6.35 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A20 thru_hole circle (at 8.89 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A21 thru_hole circle (at 11.43 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A22 thru_hole circle (at 13.97 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A23 thru_hole circle (at 16.51 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A24 thru_hole circle (at 19.05 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A25 thru_hole circle (at 21.59 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A26 thru_hole circle (at 24.13 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A27 thru_hole circle (at 26.67 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A28 thru_hole circle (at 29.21 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A29 thru_hole circle (at 31.75 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A30 thru_hole circle (at 34.29 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A31 thru_hole circle (at 36.83 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A32 thru_hole circle (at 39.37 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A2 thru_hole circle (at -36.83 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad A1 thru_hole rect (at -39.37 2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B1 thru_hole circle (at -39.37 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B2 thru_hole circle (at -36.83 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B3 thru_hole circle (at -34.29 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B4 thru_hole circle (at -31.75 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B5 thru_hole circle (at -29.21 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B6 thru_hole circle (at -26.67 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B7 thru_hole circle (at -24.13 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B8 thru_hole circle (at -21.59 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B9 thru_hole circle (at -19.05 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B10 thru_hole circle (at -16.51 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B11 thru_hole circle (at -13.97 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B12 thru_hole circle (at -11.43 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B13 thru_hole circle (at -8.89 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B14 thru_hole circle (at -6.35 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B15 thru_hole circle (at -3.81 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B16 thru_hole circle (at -1.27 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B17 thru_hole circle (at 1.27 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B18 thru_hole circle (at 3.81 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B19 thru_hole circle (at 6.35 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B20 thru_hole circle (at 8.89 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B21 thru_hole circle (at 11.43 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B22 thru_hole circle (at 13.97 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B23 thru_hole circle (at 16.51 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B24 thru_hole circle (at 19.05 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B25 thru_hole circle (at 21.59 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B26 thru_hole circle (at 24.13 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B27 thru_hole circle (at 26.67 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B28 thru_hole circle (at 29.21 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B29 thru_hole circle (at 31.75 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B30 thru_hole circle (at 34.29 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B31 thru_hole circle (at 36.83 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad B32 thru_hole circle (at 39.37 0) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C1 thru_hole circle (at -39.37 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C2 thru_hole circle (at -36.83 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C3 thru_hole circle (at -34.29 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C4 thru_hole circle (at -31.75 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C5 thru_hole circle (at -29.21 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C6 thru_hole circle (at -26.67 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C7 thru_hole circle (at -24.13 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C8 thru_hole circle (at -21.59 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C9 thru_hole circle (at -19.05 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C10 thru_hole circle (at -16.51 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C11 thru_hole circle (at -13.97 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C12 thru_hole circle (at -11.43 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C13 thru_hole circle (at -8.89 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C14 thru_hole circle (at -6.35 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C15 thru_hole circle (at -3.81 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C16 thru_hole circle (at -1.27 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C17 thru_hole circle (at 1.27 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C18 thru_hole circle (at 3.81 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C19 thru_hole circle (at 6.35 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C20 thru_hole circle (at 8.89 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C21 thru_hole circle (at 11.43 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C22 thru_hole circle (at 13.97 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C23 thru_hole circle (at 16.51 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C24 thru_hole circle (at 19.05 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C25 thru_hole circle (at 21.59 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C26 thru_hole circle (at 24.13 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C27 thru_hole circle (at 26.67 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C28 thru_hole circle (at 29.21 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C29 thru_hole circle (at 31.75 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C30 thru_hole circle (at 34.29 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C31 thru_hole circle (at 36.83 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (pad C32 thru_hole circle (at 39.37 -2.54) (size 1.524 1.524) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)) + (model Connect.3dshapes/C96ABCFD.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module SMD:SOT-23-3 (layer F.Cu) (tedit 5508E933) (tstamp 55D58DC4) + (at 67.345 126.804524) + (path /55CA99FA) + (fp_text reference U1 (at 2.5 0 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 78L05 (at -2.2 0 90) (layer F.Fab) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 1 -0.4) (end 1.1 -0.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -0.8) (end -1.5 0.8) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 0.8) (end 1.5 0.8) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 0.8) (end 1.5 -0.8) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 -0.8) (end -1.5 -0.8) (layer F.SilkS) (width 0.15)) + (pad 3 smd rect (at 0 1.4) (size 0.6 0.9) (layers F.Cu F.Paste F.Mask)) + (pad 2 smd rect (at -0.95 -1.4) (size 0.6 0.9) (layers F.Cu F.Paste F.Mask)) + (pad 1 smd rect (at 0.95 -1.4) (size 0.6 0.9) (layers F.Cu F.Paste F.Mask)) + (model 3D/SMD/SOT-23-3.wrl + (at (xyz 0 0 0)) + (scale (xyz 0.3937 0.3937 0.3937)) + (rotate (xyz 0 0 90)) + ) + ) + + (module Housings_SOIC:SOIC-14_3.9x8.7mm_Pitch1.27mm (layer F.Cu) (tedit 54130A77) (tstamp 55D58DE1) + (at 177.8 110.49 180) + (descr "14-Lead Plastic Small Outline (SL) - Narrow, 3.90 mm Body [SOIC] (see Microchip Packaging Specification 00000049BS.pdf)") + (tags "SOIC 1.27") + (path /55CA87E2) + (attr smd) + (fp_text reference U2 (at 0 -5.375 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value LM324 (at 0 5.375 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -3.7 -4.65) (end -3.7 4.65) (layer F.CrtYd) (width 0.05)) + (fp_line (start 3.7 -4.65) (end 3.7 4.65) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.7 -4.65) (end 3.7 -4.65) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.7 4.65) (end 3.7 4.65) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.075 -4.45) (end -2.075 -4.335) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.075 -4.45) (end 2.075 -4.335) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.075 4.45) (end 2.075 4.335) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.075 4.45) (end -2.075 4.335) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.075 -4.45) (end 2.075 -4.45) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.075 4.45) (end 2.075 4.45) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.075 -4.335) (end -3.45 -4.335) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -2.7 -3.81 180) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 46 /CH1)) + (pad 2 smd rect (at -2.7 -2.54 180) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 46 /CH1)) + (pad 3 smd rect (at -2.7 -1.27 180) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 58 "Net-(R1-Pad1)")) + (pad 4 smd rect (at -2.7 0 180) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 13 /LM324_VCC)) + (pad 5 smd rect (at -2.7 1.27 180) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 59 "Net-(R2-Pad1)")) + (pad 6 smd rect (at -2.7 2.54 180) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 47 /CH2)) + (pad 7 smd rect (at -2.7 3.81 180) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 47 /CH2)) + (pad 8 smd rect (at 2.7 3.81 180) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 66 "Net-(R18-Pad2)")) + (pad 9 smd rect (at 2.7 2.54 180) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 66 "Net-(R18-Pad2)")) + (pad 10 smd rect (at 2.7 1.27 180) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 22 /DAC_OUT)) + (pad 11 smd rect (at 2.7 0 180) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 14 /VGND)) + (pad 12 smd rect (at 2.7 -1.27 180) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 10 "Net-(C6-Pad1)")) + (pad 13 smd rect (at 2.7 -2.54 180) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 67 "Net-(R21-Pad1)")) + (pad 14 smd rect (at 2.7 -3.81 180) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 68 "Net-(R22-Pad1)")) + (model Housings_SOIC.3dshapes/SOIC-14_3.9x8.7mm_Pitch1.27mm.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Footprints:SOT363 (layer F.Cu) (tedit 5070B96C) (tstamp 55D58DEF) + (at 60.5885 126.64504) + (descr SOT363) + (path /55D6ACFD) + (attr smd) + (fp_text reference U3 (at 0.09906 1.69926) (layer F.SilkS) hide + (effects (font (size 0.762 0.635) (thickness 0.127))) + ) + (fp_text value DMN63D8LDW (at 0 -1.50114) (layer F.SilkS) + (effects (font (size 0.762 0.635) (thickness 0.127))) + ) + (fp_line (start 0.635 1.016) (end 0.635 -1.016) (layer F.SilkS) (width 0.1524)) + (fp_line (start 0.635 -1.016) (end -0.635 -1.016) (layer F.SilkS) (width 0.1524)) + (fp_line (start -0.635 -1.016) (end -0.635 1.016) (layer F.SilkS) (width 0.1524)) + (fp_line (start -0.635 1.016) (end 0.635 1.016) (layer F.SilkS) (width 0.1524)) + (pad 1 smd rect (at -1.016 -0.635) (size 0.508 0.3048) (layers F.Cu F.Paste F.Mask) + (net 6 GND)) + (pad 3 smd rect (at -1.016 0.635) (size 0.508 0.3048) (layers F.Cu F.Paste F.Mask) + (net 26 /DIG_CH2)) + (pad 5 smd rect (at 1.016 0) (size 0.508 0.3048) (layers F.Cu F.Paste F.Mask) + (net 56 "Net-(P8-Pad1)")) + (pad 2 smd rect (at -1.016 0) (size 0.508 0.3048) (layers F.Cu F.Paste F.Mask) + (net 57 "Net-(P8-Pad2)")) + (pad 4 smd rect (at 1.016 0.635) (size 0.508 0.3048) (layers F.Cu F.Paste F.Mask) + (net 6 GND)) + (pad 6 smd rect (at 1.016 -0.635) (size 0.508 0.3048) (layers F.Cu F.Paste F.Mask) + (net 29 /DIG_CH1)) + (model 3D/SOT-363.wrl + (at (xyz 0 0 0)) + (scale (xyz 0.3937 0.3937 0.3937)) + (rotate (xyz 0 0 0)) + ) + ) + + (gr_line (start 240.03 53.34) (end 81.28 53.34) (angle 90) (layer Edge.Cuts) (width 0.15)) + (gr_line (start 240.03 147.32) (end 240.03 53.34) (angle 90) (layer Edge.Cuts) (width 0.15)) + (gr_line (start 81.28 147.32) (end 240.03 147.32) (angle 90) (layer Edge.Cuts) (width 0.15)) + (gr_line (start 81.28 53.34) (end 81.28 147.32) (angle 90) (layer Edge.Cuts) (width 0.15)) + +) diff --git a/PCB/OUTPUT/OUTPUT.zip b/PCB/OUTPUT/OUTPUT.zip new file mode 100644 index 0000000000000000000000000000000000000000..e6c8fbfd10af24120c1a375d7a4e8f93ea9626ba GIT binary patch literal 24082 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 Hoxb~jKr9)^ literal 0 HcmV?d00001 diff --git a/PCB/OUTPUT/Tinylab_proto1-B_Cu.gbl b/PCB/OUTPUT/Tinylab_proto1-B_Cu.gbl new file mode 100644 index 00000000..15866d75 --- /dev/null +++ b/PCB/OUTPUT/Tinylab_proto1-B_Cu.gbl @@ -0,0 +1,480 @@ +G04 #@! TF.FileFunction,Copper,L2,Bot,Signal* +%FSLAX46Y46*% +G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* +G04 Created by KiCad (PCBNEW (2015-08-05 BZR 6055, Git fa29c62)-product) date 28/09/2015 1:15:09 PM* +%MOMM*% +G01* +G04 APERTURE LIST* +%ADD10C,0.150000*% +%ADD11C,1.501140*% +%ADD12C,1.998980*% +%ADD13R,1.998980X1.998980*% +%ADD14R,2.032000X1.727200*% +%ADD15O,2.032000X1.727200*% +%ADD16O,0.950000X1.250000*% +%ADD17O,1.550000X1.000000*% +%ADD18R,1.727200X2.032000*% +%ADD19O,1.727200X2.032000*% +%ADD20R,1.727200X1.727200*% +%ADD21O,1.727200X1.727200*% +%ADD22R,2.032000X2.032000*% +%ADD23O,2.032000X2.032000*% +%ADD24C,0.600000*% +%ADD25C,1.160000*% +%ADD26C,0.580000*% +%ADD27C,0.254000*% +G04 APERTURE END LIST* +D10* +D11* +X70855840Y-128137920D03* +X70855840Y-125597920D03* +X69230240Y-141175740D03* +X69230240Y-138635740D03* +D12* +X63820040Y-134800340D03* +D13* +X73980040Y-134800340D03* +D12* +X74117200Y-131899660D03* +D13* +X63957200Y-131899660D03* +D14* +X36258500Y-146100800D03* +D15* +X36258500Y-148640800D03* +X36258500Y-151180800D03* +X36258500Y-153720800D03* +D16* +X40127360Y-133399260D03* +X40127360Y-138399260D03* +D17* +X37427360Y-132399260D03* +X37427360Y-139399260D03* +D18* +X64861440Y-154310080D03* +D19* +X67401440Y-154310080D03* +X69941440Y-154310080D03* +X72481440Y-154310080D03* +D20* +X57718960Y-123718320D03* +D21* +X57718960Y-126258320D03* +X55178960Y-123718320D03* +X55178960Y-126258320D03* +D18* +X49342040Y-125089920D03* +D19* +X46802040Y-125089920D03* +X44262040Y-125089920D03* +D22* +X61328300Y-154012900D03* +D23* +X58788300Y-154012900D03* +D22* +X73741280Y-144505680D03* +D23* +X71201280Y-144505680D03* +D22* +X65714880Y-122570240D03* +D23* +X63174880Y-122570240D03* +D24* +X49890680Y-149565360D03* +X55636160Y-147949920D03* +X46583600Y-149489160D03* +X46431200Y-134172960D03* +X53213000Y-126862840D03* +X49946560Y-128727200D03* +X63261240Y-126908560D03* +X63362840Y-128930400D03* +X51450240Y-144231360D03* +X45496480Y-149270720D03* +X54218840Y-133852920D03* +X52466240Y-133868160D03* +X55544720Y-144200880D03* +X45577760Y-151079200D03* +X48381920Y-142179040D03* +X51628040Y-149618700D03* +X43665140Y-144449800D03* +X65603120Y-128579880D03* +X57708800Y-146177000D03* +X61305440Y-144912080D03* +X56306720Y-141046200D03* +X48823880Y-144795240D03* +X55707280Y-150850600D03* +X56687720Y-146212560D03* +X55859680Y-128635760D03* +X57246520Y-128625600D03* +X58968640Y-128595120D03* +X60071000Y-126959360D03* +X60858400Y-130210560D03* +X58440320Y-132730240D03* +X54193440Y-133014720D03* +X50942240Y-133278880D03* +X45326300Y-135536940D03* +X42057320Y-135559800D03* +X45453300Y-136692640D03* +X42092880Y-136486900D03* +X71241920Y-147243800D03* +X51099720Y-137353040D03* +X68813680Y-147106640D03* +X50678080Y-138054080D03* +X66212720Y-147050760D03* +X49982120Y-139420600D03* +X63113920Y-146324320D03* +X50881280Y-139476480D03* +X51551840Y-132344160D03* +X55011320Y-127955040D03* +X57383680Y-133664960D03* +X55265320Y-136585960D03* +X52491640Y-136652000D03* +X56509920Y-144028160D03* +X52202080Y-147177760D03* +X57952640Y-141041120D03* +X48828960Y-143804640D03* +X45557440Y-145796000D03* +X44500800Y-147096480D03* +X64119760Y-127284480D03* +X61132720Y-128452880D03* +X60192920Y-147203160D03* +X57876440Y-149839680D03* +D25* +X46583600Y-144424400D02* +X46583600Y-134325360D01* +X46583600Y-134325360D02* +X46431200Y-134172960D01* +X49342040Y-125089920D02* +X49342040Y-127086360D01* +X49342040Y-127086360D02* +X48061880Y-128366520D01* +X48061880Y-128366520D02* +X46126400Y-128366520D01* +X46126400Y-128366520D02* +X45029120Y-129463800D01* +X45029120Y-129463800D02* +X45029120Y-132557520D01* +X45029120Y-132557520D02* +X46431200Y-133959600D01* +X46431200Y-133959600D02* +X46431200Y-134172960D01* +D26* +X49890680Y-149565360D02* +X51384200Y-148071840D01* +X51384200Y-148071840D02* +X55514240Y-148071840D01* +X55514240Y-148071840D02* +X55636160Y-147949920D01* +D27* +X55514240Y-148071840D02* +X51384200Y-148071840D01* +X55636160Y-147949920D02* +X55514240Y-148071840D01* +D26* +X46431200Y-134172960D02* +X46431200Y-133959600D01* +X48061880Y-128366520D02* +X49342040Y-127086360D01* +X46126400Y-128366520D02* +X48061880Y-128366520D01* +X45029120Y-129463800D02* +X46126400Y-128366520D01* +X45029120Y-132557520D02* +X45029120Y-129463800D01* +X46431200Y-133959600D02* +X45029120Y-132557520D01* +X46583600Y-144424400D02* +X46583600Y-149489160D01* +X46431200Y-134172960D02* +X46583600Y-134325360D01* +D27* +X53213000Y-126862840D02* +X53213000Y-125547120D01* +X53213000Y-125547120D02* +X55041800Y-123718320D01* +X55041800Y-123718320D02* +X55178960Y-123718320D01* +D25* +X51810920Y-126862840D02* +X53213000Y-126862840D01* +X49946560Y-128727200D02* +X51810920Y-126862840D01* +D27* +X63362840Y-127010160D02* +X63362840Y-128930400D01* +X63261240Y-126908560D02* +X63362840Y-127010160D01* +X50596800Y-145084800D02* +X51450240Y-144231360D01* +X50596800Y-146690080D02* +X50596800Y-145084800D01* +X46959520Y-150327360D02* +X50596800Y-146690080D01* +X46248320Y-150327360D02* +X46959520Y-150327360D01* +X45943520Y-150022560D02* +X46248320Y-150327360D01* +X45943520Y-149717760D02* +X45943520Y-150022560D01* +X45496480Y-149270720D02* +X45943520Y-149717760D01* +D26* +X52481480Y-133852920D02* +X54218840Y-133852920D01* +X52466240Y-133868160D02* +X52481480Y-133852920D01* +D27* +X53492400Y-144200880D02* +X55544720Y-144200880D01* +X51673760Y-146019520D02* +X53492400Y-144200880D01* +X51673760Y-146588480D02* +X51673760Y-146019520D01* +X48585120Y-149677120D02* +X51673760Y-146588480D01* +X48585120Y-150591520D02* +X48585120Y-149677120D01* +X47589440Y-151587200D02* +X48585120Y-150591520D01* +X46085760Y-151587200D02* +X47589440Y-151587200D01* +X45577760Y-151079200D02* +X46085760Y-151587200D01* +D25* +X74117200Y-131899660D02* +X74117200Y-128859280D01* +X74117200Y-128859280D02* +X70855840Y-125597920D01* +X50068480Y-134701280D02* +X50068480Y-135397240D01* +X50078640Y-135407400D02* +X51120040Y-135407400D01* +X50068480Y-135397240D02* +X50078640Y-135407400D01* +X48381920Y-142179040D02* +X48381920Y-136387840D01* +X57297320Y-135407400D02* +X62585600Y-130119120D01* +X51120040Y-135407400D02* +X57297320Y-135407400D01* +X48381920Y-136387840D02* +X50068480Y-134701280D01* +X62585600Y-130119120D02* +X64063880Y-130119120D01* +D26* +X48381920Y-142179040D02* +X48768000Y-141792960D01* +X48768000Y-141792960D02* +X48768000Y-136387840D01* +X48768000Y-136387840D02* +X50434240Y-134721600D01* +X50434240Y-134721600D02* +X57972960Y-134721600D01* +X57972960Y-134721600D02* +X57983120Y-134721600D01* +X57983120Y-134721600D02* +X61501020Y-131203700D01* +X61501020Y-131203700D02* +X62585600Y-130119120D01* +X62585600Y-130119120D02* +X63809880Y-130119120D01* +X63809880Y-130119120D02* +X64063880Y-130119120D01* +D25* +X51628040Y-151770080D02* +X51628040Y-149618700D01* +X49001680Y-154396440D02* +X51628040Y-151770080D01* +X43190160Y-154396440D02* +X49001680Y-154396440D01* +X42044620Y-153250900D02* +X43190160Y-154396440D01* +X42044620Y-146070320D02* +X42044620Y-153250900D01* +X43665140Y-144449800D02* +X42044620Y-146070320D01* +X64063880Y-130119120D02* +X65603120Y-128579880D01* +X66045080Y-128137920D02* +X65603120Y-128579880D01* +D27* +X66045080Y-128137920D02* +X65603120Y-128579880D01* +D26* +X64063880Y-130119120D02* +X65603120Y-128579880D01* +D25* +X61305440Y-144988280D02* +X61305440Y-144912080D01* +X60431680Y-145862040D02* +X61305440Y-144988280D01* +X58023760Y-145862040D02* +X60431680Y-145862040D01* +D26* +X57708800Y-146177000D02* +X58023760Y-145862040D01* +D25* +X70855840Y-128137920D02* +X66045080Y-128137920D01* +X73741280Y-144505680D02* +X73741280Y-143146780D01* +X73741280Y-143146780D02* +X69230240Y-138635740D01* +D26* +X73741280Y-143146780D02* +X69230240Y-138635740D01* +D25* +X63820040Y-134800340D02* +X63820040Y-132036820D01* +X63820040Y-132036820D02* +X63957200Y-131899660D01* +D27* +X53868320Y-143484600D02* +X56306720Y-141046200D01* +X50134520Y-143484600D02* +X53868320Y-143484600D01* +X48823880Y-144795240D02* +X50134520Y-143484600D01* +X56769000Y-149788880D02* +X55707280Y-150850600D01* +X56769000Y-146293840D02* +X56769000Y-149788880D01* +X56687720Y-146212560D02* +X56769000Y-146293840D01* +X57236360Y-128635760D02* +X55859680Y-128635760D01* +X57246520Y-128625600D02* +X57236360Y-128635760D01* +X58968640Y-128061720D02* +X58968640Y-128595120D01* +X60071000Y-126959360D02* +X58968640Y-128061720D01* +X60858400Y-130312160D02* +X60858400Y-130210560D01* +X58440320Y-132730240D02* +X60858400Y-130312160D01* +X51206400Y-133014720D02* +X54193440Y-133014720D01* +X50942240Y-133278880D02* +X51206400Y-133014720D01* +X42080180Y-135536940D02* +X45326300Y-135536940D01* +X42057320Y-135559800D02* +X42080180Y-135536940D01* +X42298620Y-136692640D02* +X45453300Y-136692640D01* +X42092880Y-136486900D02* +X42298620Y-136692640D01* +X70434200Y-147243800D02* +X71241920Y-147243800D01* +X69093080Y-145902680D02* +X70434200Y-147243800D01* +X66771520Y-145902680D02* +X69093080Y-145902680D01* +X66492120Y-145623280D02* +X66771520Y-145902680D01* +X66492120Y-145150840D02* +X66492120Y-145623280D01* +X58806080Y-137464800D02* +X66492120Y-145150840D01* +X51211480Y-137464800D02* +X58806080Y-137464800D01* +X51099720Y-137353040D02* +X51211480Y-137464800D01* +X67919600Y-147106640D02* +X68813680Y-147106640D01* +X67218560Y-146405600D02* +X67919600Y-147106640D01* +X65735200Y-146405600D02* +X67218560Y-146405600D01* +X65405000Y-146075400D02* +X65735200Y-146405600D01* +X65405000Y-145125440D02* +X65405000Y-146075400D01* +X58303160Y-138023600D02* +X65405000Y-145125440D01* +X50708560Y-138023600D02* +X58303160Y-138023600D01* +X50678080Y-138054080D02* +X50708560Y-138023600D01* +X65039240Y-147050760D02* +X66212720Y-147050760D01* +X64201040Y-146212560D02* +X65039240Y-147050760D01* +X64201040Y-144896840D02* +X64201040Y-146212560D01* +X58084720Y-138780520D02* +X64201040Y-144896840D01* +X50622200Y-138780520D02* +X58084720Y-138780520D01* +X49982120Y-139420600D02* +X50622200Y-138780520D01* +X63113920Y-144790160D02* +X63113920Y-146324320D01* +X57912000Y-139588240D02* +X63113920Y-144790160D01* +X50993040Y-139588240D02* +X57912000Y-139588240D01* +X50881280Y-139476480D02* +X50993040Y-139588240D01* +X51551840Y-129682240D02* +X51551840Y-132344160D01* +X51876960Y-129357120D02* +X51551840Y-129682240D01* +X53609240Y-129357120D02* +X51876960Y-129357120D01* +X55011320Y-127955040D02* +X53609240Y-129357120D01* +X58216800Y-126756160D02* +X57718960Y-126258320D01* +X56774080Y-127853440D02* +X55178960Y-126258320D01* +X57663080Y-127853440D02* +X56774080Y-127853440D01* +X58054240Y-128244600D02* +X57663080Y-127853440D01* +X58054240Y-129590800D02* +X58054240Y-128244600D01* +X57216040Y-130429000D02* +X58054240Y-129590800D01* +X57216040Y-133497320D02* +X57216040Y-130429000D01* +X57383680Y-133664960D02* +X57216040Y-133497320D01* +X52557680Y-136585960D02* +X55265320Y-136585960D01* +X52491640Y-136652000D02* +X52557680Y-136585960D01* +X56509920Y-144962880D02* +X56509920Y-144028160D01* +X54457600Y-147015200D02* +X56509920Y-144962880D01* +X52364640Y-147015200D02* +X54457600Y-147015200D01* +X52202080Y-147177760D02* +X52364640Y-147015200D01* +X57038240Y-140126720D02* +X57952640Y-141041120D01* +X52506880Y-140126720D02* +X57038240Y-140126720D01* +X48828960Y-143804640D02* +X52506880Y-140126720D01* +X45557440Y-146039840D02* +X45557440Y-145796000D01* +X44500800Y-147096480D02* +X45557440Y-146039840D01* +X65714880Y-125689360D02* +X65714880Y-122570240D01* +X64119760Y-127284480D02* +X65714880Y-125689360D01* +X61427360Y-124317760D02* +X63174880Y-122570240D01* +X61427360Y-128158240D02* +X61427360Y-124317760D01* +X61132720Y-128452880D02* +X61427360Y-128158240D01* +X60192920Y-147523200D02* +X60192920Y-147203160D01* +X57876440Y-149839680D02* +X60192920Y-147523200D01* +M02* diff --git a/PCB/OUTPUT/Tinylab_proto1-B_Mask.gbs b/PCB/OUTPUT/Tinylab_proto1-B_Mask.gbs new file mode 100644 index 00000000..f613d718 --- /dev/null +++ b/PCB/OUTPUT/Tinylab_proto1-B_Mask.gbs @@ -0,0 +1,78 @@ +G04 #@! TF.FileFunction,Soldermask,Bot* +%FSLAX46Y46*% +G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* +G04 Created by KiCad (PCBNEW (2015-08-05 BZR 6055, Git fa29c62)-product) date 28/09/2015 1:15:09 PM* +%MOMM*% +G01* +G04 APERTURE LIST* +%ADD10C,0.150000*% +%ADD11C,1.501140*% +%ADD12C,1.998980*% +%ADD13R,1.998980X1.998980*% +%ADD14R,2.032000X1.727200*% +%ADD15O,2.032000X1.727200*% +%ADD16O,0.950000X1.250000*% +%ADD17O,1.550000X1.000000*% +%ADD18R,1.727200X2.032000*% +%ADD19O,1.727200X2.032000*% +%ADD20R,1.727200X1.727200*% +%ADD21O,1.727200X1.727200*% +%ADD22R,2.032000X2.032000*% +%ADD23O,2.032000X2.032000*% +G04 APERTURE END LIST* +D10* +D11* +X70855840Y-128137920D03* +X70855840Y-125597920D03* +X69230240Y-141175740D03* +X69230240Y-138635740D03* +D12* +X63820040Y-134800340D03* +D13* +X73980040Y-134800340D03* +D12* +X74117200Y-131899660D03* +D13* +X63957200Y-131899660D03* +D14* +X36258500Y-146100800D03* +D15* +X36258500Y-148640800D03* +X36258500Y-151180800D03* +X36258500Y-153720800D03* +D16* +X40127360Y-133399260D03* +X40127360Y-138399260D03* +D17* +X37427360Y-132399260D03* +X37427360Y-139399260D03* +D18* +X64861440Y-154310080D03* +D19* +X67401440Y-154310080D03* +X69941440Y-154310080D03* +X72481440Y-154310080D03* +D20* +X57718960Y-123718320D03* +D21* +X57718960Y-126258320D03* +X55178960Y-123718320D03* +X55178960Y-126258320D03* +D18* +X49342040Y-125089920D03* +D19* +X46802040Y-125089920D03* +X44262040Y-125089920D03* +D22* +X61328300Y-154012900D03* +D23* +X58788300Y-154012900D03* +D22* +X73741280Y-144505680D03* +D23* +X71201280Y-144505680D03* +D22* +X65714880Y-122570240D03* +D23* +X63174880Y-122570240D03* +M02* diff --git a/PCB/OUTPUT/Tinylab_proto1-B_SilkS.gbo b/PCB/OUTPUT/Tinylab_proto1-B_SilkS.gbo new file mode 100644 index 00000000..8f3574b8 --- /dev/null +++ b/PCB/OUTPUT/Tinylab_proto1-B_SilkS.gbo @@ -0,0 +1,11 @@ +G04 #@! TF.FileFunction,Legend,Bot* +%FSLAX46Y46*% +G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* +G04 Created by KiCad (PCBNEW (2015-08-05 BZR 6055, Git fa29c62)-product) date 28/09/2015 1:15:09 PM* +%MOMM*% +G01* +G04 APERTURE LIST* +%ADD10C,0.150000*% +G04 APERTURE END LIST* +D10* +M02* diff --git a/PCB/OUTPUT/Tinylab_proto1-Edge_Cuts.gm1 b/PCB/OUTPUT/Tinylab_proto1-Edge_Cuts.gm1 new file mode 100644 index 00000000..ecb2ce90 --- /dev/null +++ b/PCB/OUTPUT/Tinylab_proto1-Edge_Cuts.gm1 @@ -0,0 +1,23 @@ +G04 #@! TF.FileFunction,Profile,NP* +%FSLAX46Y46*% +G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* +G04 Created by KiCad (PCBNEW (2015-08-05 BZR 6055, Git fa29c62)-product) date 28/09/2015 1:15:09 PM* +%MOMM*% +G01* +G04 APERTURE LIST* +%ADD10C,0.150000*% +%ADD11C,0.100000*% +G04 APERTURE END LIST* +D10* +D11* +X33197800Y-117612160D02* +X33197800Y-157236160D01* +X76885800Y-117612160D02* +X33197800Y-117612160D01* +X76885800Y-157109160D02* +X76885800Y-117612160D01* +X33197800Y-157109160D02* +X76885800Y-157109160D01* +X33639760Y-117850920D02* +X33639760Y-118521480D01* +M02* diff --git a/PCB/OUTPUT/Tinylab_proto1-F_Cu.gtl b/PCB/OUTPUT/Tinylab_proto1-F_Cu.gtl new file mode 100644 index 00000000..2cc35b67 --- /dev/null +++ b/PCB/OUTPUT/Tinylab_proto1-F_Cu.gtl @@ -0,0 +1,1265 @@ +G04 #@! TF.FileFunction,Copper,L1,Top,Signal* +%FSLAX46Y46*% +G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* +G04 Created by KiCad (PCBNEW (2015-08-05 BZR 6055, Git fa29c62)-product) date 28/09/2015 1:15:09 PM* +%MOMM*% +G01* +G04 APERTURE LIST* +%ADD10C,0.150000*% +%ADD11C,0.250000*% +%ADD12R,0.750000X0.800000*% +%ADD13R,0.800000X0.750000*% +%ADD14C,1.501140*% +%ADD15C,1.998980*% +%ADD16R,1.998980X1.998980*% +%ADD17R,2.000000X2.000000*% +%ADD18R,1.600000X0.560000*% +%ADD19R,0.560000X1.600000*% +%ADD20R,2.032000X1.727200*% +%ADD21O,2.032000X1.727200*% +%ADD22R,1.350000X0.400000*% +%ADD23O,0.950000X1.250000*% +%ADD24O,1.550000X1.000000*% +%ADD25R,1.727200X2.032000*% +%ADD26O,1.727200X2.032000*% +%ADD27R,1.727200X1.727200*% +%ADD28O,1.727200X1.727200*% +%ADD29R,2.032000X2.032000*% +%ADD30O,2.032000X2.032000*% +%ADD31R,0.900000X0.600000*% +%ADD32R,0.500000X0.900000*% +%ADD33R,0.900000X0.500000*% +%ADD34R,0.600000X0.900000*% +%ADD35R,1.500000X0.600000*% +%ADD36R,0.508000X0.304800*% +%ADD37C,0.600000*% +%ADD38C,0.254000*% +%ADD39C,0.580000*% +%ADD40C,1.160000*% +G04 APERTURE END LIST* +D10* +D11* +X33988644Y-118352821D02* +X34560073Y-118352821D01* +X34274358Y-119352821D02* +X34274358Y-118352821D01* +X34893406Y-119352821D02* +X34893406Y-118352821D01* +X35369596Y-119352821D02* +X35369596Y-118352821D01* +X35941025Y-119352821D01* +X35941025Y-118352821D01* +X36607691Y-118876630D02* +X36607691Y-119352821D01* +X36274358Y-118352821D02* +X36607691Y-118876630D01* +X36941025Y-118352821D01* +X37750549Y-119352821D02* +X37274358Y-119352821D01* +X37274358Y-118352821D01* +X38036263Y-119067107D02* +X38512454Y-119067107D01* +X37941025Y-119352821D02* +X38274358Y-118352821D01* +X38607692Y-119352821D01* +X39274359Y-118829011D02* +X39417216Y-118876630D01* +X39464835Y-118924250D01* +X39512454Y-119019488D01* +X39512454Y-119162345D01* +X39464835Y-119257583D01* +X39417216Y-119305202D01* +X39321978Y-119352821D01* +X38941025Y-119352821D01* +X38941025Y-118352821D01* +X39274359Y-118352821D01* +X39369597Y-118400440D01* +X39417216Y-118448059D01* +X39464835Y-118543297D01* +X39464835Y-118638535D01* +X39417216Y-118733773D01* +X39369597Y-118781392D01* +X39274359Y-118829011D01* +X38941025Y-118829011D01* +X40702930Y-119352821D02* +X40702930Y-118352821D01* +X41083883Y-118352821D01* +X41179121Y-118400440D01* +X41226740Y-118448059D01* +X41274359Y-118543297D01* +X41274359Y-118686154D01* +X41226740Y-118781392D01* +X41179121Y-118829011D01* +X41083883Y-118876630D01* +X40702930Y-118876630D01* +X42274359Y-119257583D02* +X42226740Y-119305202D01* +X42083883Y-119352821D01* +X41988645Y-119352821D01* +X41845787Y-119305202D01* +X41750549Y-119209964D01* +X41702930Y-119114726D01* +X41655311Y-118924250D01* +X41655311Y-118781392D01* +X41702930Y-118590916D01* +X41750549Y-118495678D01* +X41845787Y-118400440D01* +X41988645Y-118352821D01* +X42083883Y-118352821D01* +X42226740Y-118400440D01* +X42274359Y-118448059D01* +X43036264Y-118829011D02* +X43179121Y-118876630D01* +X43226740Y-118924250D01* +X43274359Y-119019488D01* +X43274359Y-119162345D01* +X43226740Y-119257583D01* +X43179121Y-119305202D01* +X43083883Y-119352821D01* +X42702930Y-119352821D01* +X42702930Y-118352821D01* +X43036264Y-118352821D01* +X43131502Y-118400440D01* +X43179121Y-118448059D01* +X43226740Y-118543297D01* +X43226740Y-118638535D01* +X43179121Y-118733773D01* +X43131502Y-118781392D01* +X43036264Y-118829011D01* +X42702930Y-118829011D01* +X35631501Y-121002821D02* +X35631501Y-120002821D01* +X36012454Y-120002821D01* +X36107692Y-120050440D01* +X36155311Y-120098059D01* +X36202930Y-120193297D01* +X36202930Y-120336154D01* +X36155311Y-120431392D01* +X36107692Y-120479011D01* +X36012454Y-120526630D01* +X35631501Y-120526630D01* +X37202930Y-121002821D02* +X36869596Y-120526630D01* +X36631501Y-121002821D02* +X36631501Y-120002821D01* +X37012454Y-120002821D01* +X37107692Y-120050440D01* +X37155311Y-120098059D01* +X37202930Y-120193297D01* +X37202930Y-120336154D01* +X37155311Y-120431392D01* +X37107692Y-120479011D01* +X37012454Y-120526630D01* +X36631501Y-120526630D01* +X37821977Y-120002821D02* +X38012454Y-120002821D01* +X38107692Y-120050440D01* +X38202930Y-120145678D01* +X38250549Y-120336154D01* +X38250549Y-120669488D01* +X38202930Y-120859964D01* +X38107692Y-120955202D01* +X38012454Y-121002821D01* +X37821977Y-121002821D01* +X37726739Y-120955202D01* +X37631501Y-120859964D01* +X37583882Y-120669488D01* +X37583882Y-120336154D01* +X37631501Y-120145678D01* +X37726739Y-120050440D01* +X37821977Y-120002821D01* +X38536263Y-120002821D02* +X39107692Y-120002821D01* +X38821977Y-121002821D02* +X38821977Y-120002821D01* +X39631501Y-120002821D02* +X39821978Y-120002821D01* +X39917216Y-120050440D01* +X40012454Y-120145678D01* +X40060073Y-120336154D01* +X40060073Y-120669488D01* +X40012454Y-120859964D01* +X39917216Y-120955202D01* +X39821978Y-121002821D01* +X39631501Y-121002821D01* +X39536263Y-120955202D01* +X39441025Y-120859964D01* +X39393406Y-120669488D01* +X39393406Y-120336154D01* +X39441025Y-120145678D01* +X39536263Y-120050440D01* +X39631501Y-120002821D01* +X41774359Y-121002821D02* +X41202930Y-121002821D01* +X41488644Y-121002821D02* +X41488644Y-120002821D01* +X41393406Y-120145678D01* +X41298168Y-120240916D01* +X41202930Y-120288535D01* +D12* +X39319200Y-152682640D03* +X39319200Y-151182640D03* +X39278560Y-147088160D03* +X39278560Y-148588160D03* +X43682920Y-135526080D03* +X43682920Y-137026080D03* +D13* +X42864340Y-129816860D03* +X44364340Y-129816860D03* +D12* +X44226480Y-150805580D03* +X44226480Y-149305580D03* +D14* +X70855840Y-128137920D03* +X70855840Y-125597920D03* +D13* +X58795220Y-150964900D03* +X60295220Y-150964900D03* +D12* +X75072240Y-126224600D03* +X75072240Y-127724600D03* +X56596280Y-147961920D03* +X56596280Y-149461920D03* +D14* +X69230240Y-141175740D03* +X69230240Y-138635740D03* +D12* +X73941940Y-139143040D03* +X73941940Y-140643040D03* +D15* +X63820040Y-134800340D03* +D16* +X73980040Y-134800340D03* +D17* +X43665140Y-139105840D03* +X43665140Y-142305840D03* +D18* +X59977400Y-140626600D03* +X59977400Y-139826600D03* +X59977400Y-139026600D03* +X59977400Y-138226600D03* +X59977400Y-137426600D03* +X59977400Y-136626600D03* +X59977400Y-135826600D03* +X59977400Y-135026600D03* +X59977400Y-134226600D03* +X59977400Y-133426600D03* +X59977400Y-132626600D03* +D19* +X58127400Y-130776600D03* +X57327400Y-130776600D03* +X56527400Y-130776600D03* +X55727400Y-130776600D03* +X54927400Y-130776600D03* +X54127400Y-130776600D03* +X53327400Y-130776600D03* +X52527400Y-130776600D03* +X51727400Y-130776600D03* +X50927400Y-130776600D03* +X50127400Y-130776600D03* +D18* +X48277400Y-132626600D03* +X48277400Y-133426600D03* +X48277400Y-134226600D03* +X48277400Y-135026600D03* +X48277400Y-135826600D03* +X48277400Y-136626600D03* +X48277400Y-137426600D03* +X48277400Y-138226600D03* +X48277400Y-139026600D03* +X48277400Y-139826600D03* +X48277400Y-140626600D03* +D19* +X50127400Y-142476600D03* +X50927400Y-142476600D03* +X51727400Y-142476600D03* +X52527400Y-142476600D03* +X53327400Y-142476600D03* +X54127400Y-142476600D03* +X54927400Y-142476600D03* +X55727400Y-142476600D03* +X56527400Y-142476600D03* +X57327400Y-142476600D03* +X58127400Y-142476600D03* +D15* +X74117200Y-131899660D03* +D16* +X63957200Y-131899660D03* +D20* +X36258500Y-146100800D03* +D21* +X36258500Y-148640800D03* +X36258500Y-151180800D03* +X36258500Y-153720800D03* +D22* +X40127360Y-134599260D03* +X40127360Y-135249260D03* +X40127360Y-135899260D03* +X40127360Y-136549260D03* +X40127360Y-137199260D03* +D23* +X40127360Y-133399260D03* +X40127360Y-138399260D03* +D24* +X37427360Y-132399260D03* +X37427360Y-139399260D03* +D25* +X64861440Y-154310080D03* +D26* +X67401440Y-154310080D03* +X69941440Y-154310080D03* +X72481440Y-154310080D03* +D27* +X57718960Y-123718320D03* +D28* +X57718960Y-126258320D03* +X55178960Y-123718320D03* +X55178960Y-126258320D03* +D25* +X49342040Y-125089920D03* +D26* +X46802040Y-125089920D03* +X44262040Y-125089920D03* +D29* +X61328300Y-154012900D03* +D30* +X58788300Y-154012900D03* +D29* +X73741280Y-144505680D03* +D30* +X71201280Y-144505680D03* +D29* +X65714880Y-122570240D03* +D30* +X63174880Y-122570240D03* +D31* +X68435680Y-126309120D03* +X65635680Y-127259120D03* +X65635680Y-125359120D03* +D32* +X40983600Y-154289760D03* +X39483600Y-154289760D03* +X40968360Y-145481040D03* +X39468360Y-145481040D03* +D33* +X42484040Y-154338720D03* +X42484040Y-152838720D03* +X42400220Y-147272440D03* +X42400220Y-145772440D03* +D32* +X42827640Y-151102060D03* +X41327640Y-151102060D03* +X42771760Y-149009100D03* +X41271760Y-149009100D03* +D33* +X72517000Y-150209820D03* +X72517000Y-151709820D03* +X70081140Y-150059960D03* +X70081140Y-151559960D03* +X67487800Y-150133620D03* +X67487800Y-151633620D03* +X64823340Y-150019320D03* +X64823340Y-151519320D03* +X72478900Y-147352320D03* +X72478900Y-148852320D03* +X70004940Y-147088160D03* +X70004940Y-148588160D03* +X67449700Y-147047520D03* +X67449700Y-148547520D03* +X64785240Y-147009420D03* +X64785240Y-148509420D03* +D32* +X58673300Y-146011900D03* +X60173300Y-146011900D03* +X60198700Y-148577300D03* +X58698700Y-148577300D03* +X64608140Y-137822940D03* +X63108140Y-137822940D03* +X63146240Y-139816840D03* +X64646240Y-139816840D03* +X64608140Y-141988540D03* +X63108140Y-141988540D03* +D34* +X43642280Y-134191200D03* +X42692280Y-131391200D03* +X44592280Y-131391200D03* +D35* +X48417500Y-145770600D03* +X48417500Y-147040600D03* +X48417500Y-148310600D03* +X48417500Y-149580600D03* +X48417500Y-150850600D03* +X48417500Y-152120600D03* +X48417500Y-153390600D03* +X53817500Y-153390600D03* +X53817500Y-152120600D03* +X53817500Y-150850600D03* +X53817500Y-149580600D03* +X53817500Y-148310600D03* +X53817500Y-147040600D03* +X53817500Y-145770600D03* +D36* +X60243720Y-127838200D03* +X60243720Y-129108200D03* +X62275720Y-128473200D03* +X60243720Y-128473200D03* +X62275720Y-129108200D03* +X62275720Y-127838200D03* +D13* +X52036280Y-128427480D03* +X53536280Y-128427480D03* +X54445600Y-144200880D03* +X52945600Y-144200880D03* +D37* +X49890680Y-149565360D03* +X55636160Y-147949920D03* +X46583600Y-149489160D03* +X46431200Y-134172960D03* +X53213000Y-126862840D03* +X49946560Y-128727200D03* +X63261240Y-126908560D03* +X63362840Y-128930400D03* +X51450240Y-144231360D03* +X45496480Y-149270720D03* +X54218840Y-133852920D03* +X52466240Y-133868160D03* +X55544720Y-144200880D03* +X45577760Y-151079200D03* +X48381920Y-142179040D03* +X51628040Y-149618700D03* +X43665140Y-144449800D03* +X65603120Y-128579880D03* +X57708800Y-146177000D03* +X61305440Y-144912080D03* +X56306720Y-141046200D03* +X48823880Y-144795240D03* +X55707280Y-150850600D03* +X56687720Y-146212560D03* +X55859680Y-128635760D03* +X57246520Y-128625600D03* +X58968640Y-128595120D03* +X60071000Y-126959360D03* +X60858400Y-130210560D03* +X58440320Y-132730240D03* +X54193440Y-133014720D03* +X50942240Y-133278880D03* +X45326300Y-135536940D03* +X42057320Y-135559800D03* +X45453300Y-136692640D03* +X42092880Y-136486900D03* +X71241920Y-147243800D03* +X51099720Y-137353040D03* +X68813680Y-147106640D03* +X50678080Y-138054080D03* +X66212720Y-147050760D03* +X49982120Y-139420600D03* +X63113920Y-146324320D03* +X50881280Y-139476480D03* +X51551840Y-132344160D03* +X55011320Y-127955040D03* +X57383680Y-133664960D03* +X55265320Y-136585960D03* +X52491640Y-136652000D03* +X56509920Y-144028160D03* +X52202080Y-147177760D03* +X57952640Y-141041120D03* +X48828960Y-143804640D03* +X45557440Y-145796000D03* +X44500800Y-147096480D03* +X64119760Y-127284480D03* +X61132720Y-128452880D03* +X60192920Y-147203160D03* +X57876440Y-149839680D03* +D11* +X39483600Y-154289760D02* +X36827460Y-154289760D01* +X36827460Y-154289760D02* +X36258500Y-153720800D01* +X39483600Y-154289760D02* +X39483600Y-152847040D01* +X39483600Y-152847040D02* +X39319200Y-152682640D01* +X39319200Y-151182640D02* +X36260340Y-151182640D01* +X36260340Y-151182640D02* +X36258500Y-151180800D01* +X39468360Y-145481040D02* +X39468360Y-146898360D01* +X39468360Y-146898360D02* +X39278560Y-147088160D01* +X39468360Y-145481040D02* +X36878260Y-145481040D01* +X36878260Y-145481040D02* +X36258500Y-146100800D01* +X39278560Y-148588160D02* +X36311140Y-148588160D01* +X36311140Y-148588160D02* +X36258500Y-148640800D01* +D38* +X56596280Y-147961920D02* +X55648160Y-147961920D01* +X49875440Y-149580600D02* +X48417500Y-149580600D01* +X49890680Y-149565360D02* +X49875440Y-149580600D01* +X55648160Y-147961920D02* +X55636160Y-147949920D01* +D39* +X43642280Y-134191200D02* +X46412960Y-134191200D01* +X46675040Y-149580600D02* +X48417500Y-149580600D01* +X46583600Y-149489160D02* +X46675040Y-149580600D01* +X46412960Y-134191200D02* +X46431200Y-134172960D01* +D38* +X43682920Y-135526080D02* +X43682920Y-134231840D01* +X43682920Y-134231840D02* +X43642280Y-134191200D01* +X40127360Y-134599260D02* +X43234220Y-134599260D01* +X43234220Y-134599260D02* +X43642280Y-134191200D01* +X56527400Y-130776600D02* +X56527400Y-128277920D01* +X56967120Y-127838200D02* +X58643520Y-127838200D01* +X56527400Y-128277920D02* +X56967120Y-127838200D01* +D40* +X46370240Y-129804160D02* +X48869600Y-129804160D01* +X53536280Y-127186120D02* +X53536280Y-128427480D01* +X53213000Y-126862840D02* +X53536280Y-127186120D01* +X48869600Y-129804160D02* +X49946560Y-128727200D01* +D39* +X53327400Y-142476600D02* +X53327400Y-132359400D01* +X53327400Y-132359400D02* +X53327400Y-132267960D01* +X53327400Y-132267960D02* +X53327400Y-130796598D01* +X53327400Y-130796598D02* +X53307402Y-130776600D01* +X53307402Y-130776600D02* +X53327400Y-130776600D01* +X53327400Y-130776600D02* +X53327400Y-128636360D01* +X53327400Y-128636360D02* +X53536280Y-128427480D01* +D40* +X44592280Y-131391200D02* +X44592280Y-130044800D01* +X44592280Y-130044800D02* +X44364340Y-129816860D01* +X46410880Y-129804160D02* +X46370240Y-129804160D01* +X46370240Y-129804160D02* +X44377040Y-129804160D01* +X44377040Y-129804160D02* +X44364340Y-129816860D01* +X43665140Y-139105840D02* +X43665140Y-137043860D01* +X43665140Y-137043860D02* +X43682920Y-137026080D01* +D38* +X62585600Y-126232920D02* +X63261240Y-126908560D01* +X59877960Y-126232920D02* +X62585600Y-126232920D01* +X63185040Y-129108200D02* +X62275720Y-129108200D01* +X63362840Y-128930400D02* +X63185040Y-129108200D01* +X59888120Y-126232920D02* +X59877960Y-126232920D01* +X58643520Y-127467360D02* +X59877960Y-126232920D01* +X59877960Y-126232920D02* +X59888120Y-126232920D01* +X58643520Y-127838200D02* +X58643520Y-127467360D01* +X60243720Y-127838200D02* +X58643520Y-127838200D01* +X55178960Y-123718320D02* +X55158640Y-123718320D01* +X46398180Y-129816860D02* +X44364340Y-129816860D01* +X46410880Y-129804160D02* +X46398180Y-129816860D01* +D39* +X43665140Y-137043860D02* +X43682920Y-137026080D01* +D38* +X44592280Y-130044800D02* +X44364340Y-129816860D01* +X40127360Y-137199260D02* +X43509740Y-137199260D01* +X43509740Y-137199260D02* +X43682920Y-137026080D01* +X40127360Y-138399260D02* +X40127360Y-137199260D01* +X37427360Y-139399260D02* +X37427360Y-132399260D01* +D39* +X40127360Y-133399260D02* +X41190180Y-133399260D01* +X44592280Y-132313640D02* +X44592280Y-131391200D01* +X44094400Y-132811520D02* +X44592280Y-132313640D01* +X41777920Y-132811520D02* +X44094400Y-132811520D01* +X41190180Y-133399260D02* +X41777920Y-132811520D01* +X40127360Y-133399260D02* +X39942500Y-133399260D01* +X39942500Y-133399260D02* +X38942500Y-132399260D01* +X38942500Y-132399260D02* +X37427360Y-132399260D01* +X40127360Y-138399260D02* +X40127360Y-138505760D01* +X40127360Y-138505760D02* +X39233860Y-139399260D01* +X39233860Y-139399260D02* +X37427360Y-139399260D01* +X53327400Y-142476600D02* +X53327400Y-143819080D01* +X53327400Y-143819080D02* +X52945600Y-144200880D01* +X52945600Y-144200880D02* +X51480720Y-144200880D01* +X51480720Y-144200880D02* +X51450240Y-144231360D01* +D38* +X44226480Y-149305580D02* +X45461620Y-149305580D01* +X51450240Y-144231360D02* +X51480720Y-144200880D01* +X45461620Y-149305580D02* +X45496480Y-149270720D01* +X52945600Y-144200880D02* +X52945600Y-144000920D01* +X52945600Y-144000920D02* +X53327400Y-143619120D01* +X53327400Y-143619120D02* +X53327400Y-142476600D01* +D11* +X42771760Y-149009100D02* +X43930000Y-149009100D01* +X43930000Y-149009100D02* +X44226480Y-149305580D01* +D39* +X52527400Y-130776600D02* +X52527400Y-133807000D01* +X54107402Y-133964358D02* +X54107402Y-142476600D01* +X54218840Y-133852920D02* +X54107402Y-133964358D01* +X52527400Y-133807000D02* +X52466240Y-133868160D01* +X54107402Y-142476600D02* +X54127400Y-142476600D01* +X54107402Y-142476600D02* +X54127400Y-142476600D01* +D40* +X42692280Y-131391200D02* +X42692280Y-129988920D01* +X42692280Y-129988920D02* +X42864340Y-129816860D01* +X52036280Y-128427480D02* +X52036280Y-128419160D01* +X52036280Y-128419160D02* +X51257200Y-127640080D01* +D39* +X52036280Y-128427480D02* +X52036280Y-128652840D01* +X52036280Y-128652840D02* +X52527400Y-129143960D01* +X52527400Y-129143960D02* +X52527400Y-130776600D01* +X57718960Y-123718320D02* +X57718960Y-122763280D01* +X57718960Y-122763280D02* +X57058560Y-122102880D01* +X57058560Y-122102880D02* +X54538880Y-122102880D01* +X54538880Y-122102880D02* +X51734720Y-124907040D01* +X51734720Y-124907040D02* +X51734720Y-127162560D01* +X51734720Y-127162560D02* +X51257200Y-127640080D01* +D40* +X44145200Y-127071120D02* +X50688240Y-127071120D01* +X50688240Y-127071120D02* +X51257200Y-127640080D01* +X42864340Y-129816860D02* +X42864340Y-128351980D01* +X42864340Y-128351980D02* +X44145200Y-127071120D01* +X44145200Y-127071120D02* +X44145200Y-125206760D01* +X44145200Y-125206760D02* +X44262040Y-125089920D01* +D38* +X51734720Y-124907040D02* +X51734720Y-128117600D01* +X54538880Y-122102880D02* +X51734720Y-124907040D01* +X57058560Y-122102880D02* +X54538880Y-122102880D01* +X57718960Y-122763280D02* +X57058560Y-122102880D01* +D39* +X50688240Y-127071120D02* +X51734720Y-128117600D01* +X42864340Y-128351980D02* +X44145200Y-127071120D01* +X44145200Y-127071120D02* +X44262040Y-126954280D01* +X44262040Y-126954280D02* +X44262040Y-125089920D01* +D38* +X42692280Y-129988920D02* +X42864340Y-129816860D01* +D39* +X54127400Y-142476600D02* +X54127400Y-143882680D01* +X54127400Y-143882680D02* +X54445600Y-144200880D01* +X54445600Y-144200880D02* +X55544720Y-144200880D01* +D38* +X44226480Y-150805580D02* +X45304140Y-150805580D01* +X45304140Y-150805580D02* +X45577760Y-151079200D01* +X54445600Y-144200880D02* +X54234080Y-144200880D01* +X54234080Y-144200880D02* +X54127400Y-144094200D01* +X54127400Y-144094200D02* +X54127400Y-142476600D01* +D11* +X42827640Y-151102060D02* +X43930000Y-151102060D01* +X43930000Y-151102060D02* +X44226480Y-150805580D01* +D40* +X70855840Y-125597920D02* +X74445560Y-125597920D01* +X74445560Y-125597920D02* +X75072240Y-126224600D01* +X46802040Y-125089920D02* +X46802040Y-123987560D01* +X70855840Y-122646440D02* +X70855840Y-125597920D01* +X68112640Y-119903240D02* +X70855840Y-122646440D01* +X50886360Y-119903240D02* +X68112640Y-119903240D01* +X46802040Y-123987560D02* +X50886360Y-119903240D01* +D38* +X74445560Y-125597920D02* +X75072240Y-126224600D01* +D39* +X58795220Y-150964900D02* +X58795220Y-154005980D01* +X58795220Y-154005980D02* +X58788300Y-154012900D01* +D38* +X58788300Y-154012900D02* +X58788300Y-150971820D01* +X58788300Y-150971820D02* +X58795220Y-150964900D01* +D39* +X60295220Y-150964900D02* +X60439300Y-150964900D01* +X60439300Y-150964900D02* +X61328300Y-151853900D01* +X61328300Y-151853900D02* +X61328300Y-154012900D01* +X60198700Y-148577300D02* +X60198700Y-150868380D01* +X60198700Y-150868380D02* +X60295220Y-150964900D01* +D38* +X60198700Y-150868380D02* +X60295220Y-150964900D01* +X60286900Y-150956580D02* +X60295220Y-150964900D01* +X60439300Y-150964900D02* +X61328300Y-151853900D01* +X61328300Y-151853900D02* +X61328300Y-154012900D01* +D39* +X56596280Y-149461920D02* +X57106120Y-149461920D01* +X57106120Y-149461920D02* +X57708800Y-148859240D01* +X51628040Y-149618700D02* +X53779400Y-149618700D01* +X53779400Y-149618700D02* +X53936180Y-149461920D01* +X53936180Y-149461920D02* +X56596280Y-149461920D01* +X56596280Y-149461920D02* +X53936180Y-149461920D01* +X53936180Y-149461920D02* +X53817500Y-149580600D01* +D40* +X43665140Y-142305840D02* +X48255120Y-142305840D01* +X48255120Y-142305840D02* +X48381920Y-142179040D01* +D39* +X48255120Y-142305840D02* +X48381920Y-142179040D01* +D38* +X53817500Y-149580600D02* +X56477600Y-149580600D01* +X56477600Y-149580600D02* +X56596280Y-149461920D01* +D40* +X43665140Y-142305840D02* +X43665140Y-144449800D01* +D39* +X51666140Y-149580600D02* +X53817500Y-149580600D01* +X51628040Y-149618700D02* +X51666140Y-149580600D01* +X57708800Y-148859240D02* +X57708800Y-146177000D01* +X65603120Y-128579880D02* +X65635680Y-128547320D01* +D40* +X63108140Y-143109380D02* +X63108140Y-143080040D01* +X61305440Y-144912080D02* +X63108140Y-143109380D01* +X63108140Y-141988540D02* +X63108140Y-143080040D01* +X63108140Y-143080040D02* +X63553340Y-143525240D01* +X63553340Y-143525240D02* +X66880740Y-143525240D01* +X66880740Y-143525240D02* +X69230240Y-141175740D01* +X69230240Y-141175740D02* +X73409240Y-141175740D01* +X73409240Y-141175740D02* +X73941940Y-140643040D01* +X71201280Y-144505680D02* +X69829680Y-144505680D01* +X69829680Y-144505680D02* +X69230240Y-143906240D01* +X69230240Y-143906240D02* +X69230240Y-141175740D01* +D39* +X69230240Y-141175740D02* +X66880740Y-143525240D01* +X66880740Y-143525240D02* +X63553340Y-143525240D01* +X63553340Y-143525240D02* +X63108140Y-143080040D01* +X73409240Y-141175740D02* +X73941940Y-140643040D01* +X69230240Y-143906240D02* +X69230240Y-141175740D01* +X69829680Y-144505680D02* +X69230240Y-143906240D01* +D38* +X63108140Y-141988540D02* +X62923420Y-141988540D01* +D40* +X70855840Y-128137920D02* +X74658920Y-128137920D01* +X74658920Y-128137920D02* +X75072240Y-127724600D01* +D39* +X65635680Y-128547320D02* +X65635680Y-127259120D01* +D38* +X74658920Y-128137920D02* +X75072240Y-127724600D01* +X73409240Y-141175740D02* +X73941940Y-140643040D01* +X63553340Y-143525240D02* +X66880740Y-143525240D01* +X63108140Y-143080040D02* +X63553340Y-143525240D01* +X63108140Y-141988540D02* +X63108140Y-143080040D01* +D40* +X73941940Y-139143040D02* +X73727880Y-139143040D01* +X73727880Y-139143040D02* +X73220580Y-138635740D01* +X73220580Y-138635740D02* +X69230240Y-138635740D01* +X73941940Y-139143040D02* +X73941940Y-134838440D01* +X73941940Y-134838440D02* +X73980040Y-134800340D01* +D39* +X73941940Y-134838440D02* +X73980040Y-134800340D01* +X64608140Y-137822940D02* +X67579240Y-137822940D01* +X67579240Y-137822940D02* +X68392040Y-138635740D01* +X68392040Y-138635740D02* +X69230240Y-138635740D01* +X73727880Y-139143040D02* +X73220580Y-138635740D01* +X73220580Y-138635740D02* +X69230240Y-138635740D01* +D38* +X73941940Y-134838440D02* +X73980040Y-134800340D01* +X69230240Y-138635740D02* +X73434640Y-138635740D01* +X73434640Y-138635740D02* +X73941940Y-139143040D01* +X69230240Y-138635740D02* +X68392040Y-138635740D01* +X68392040Y-138635740D02* +X67579240Y-137822940D01* +X68435680Y-126309120D02* +X68435680Y-127421180D01* +X68435680Y-127421180D02* +X63957200Y-131899660D01* +X48417500Y-145770600D02* +X48417500Y-145201620D01* +X56047640Y-140787120D02* +X55849520Y-140787120D01* +X56306720Y-141046200D02* +X56047640Y-140787120D01* +X48417500Y-145201620D02* +X48823880Y-144795240D01* +X54927400Y-142476600D02* +X54927400Y-141709240D01* +X54927400Y-141709240D02* +X55849520Y-140787120D01* +X55849520Y-140787120D02* +X55902860Y-140733780D01* +X55902860Y-140733780D02* +X55902860Y-139423140D01* +X55902860Y-139423140D02* +X56512460Y-138813540D01* +X56512460Y-138813540D02* +X57419240Y-138813540D01* +X57419240Y-138813540D02* +X58432300Y-139826600D01* +X58432300Y-139826600D02* +X59977400Y-139826600D01* +X48417500Y-145770600D02* +X48854360Y-145770600D01* +X48417500Y-147040600D02* +X48417500Y-145770600D01* +X59977400Y-136626600D02* +X61300360Y-136626600D01* +X55707280Y-150850600D02* +X53817500Y-150850600D01* +X61610240Y-141290040D02* +X56687720Y-146212560D01* +X61610240Y-136936480D02* +X61610240Y-141290040D01* +X61300360Y-136626600D02* +X61610240Y-136936480D01* +X55727400Y-130776600D02* +X55727400Y-131846120D01* +X59339360Y-131988560D02* +X59977400Y-132626600D01* +X55869840Y-131988560D02* +X59339360Y-131988560D01* +X55727400Y-131846120D02* +X55869840Y-131988560D01* +X58127400Y-130776600D02* +X58127400Y-130487920D01* +X58127400Y-130487920D02* +X59507120Y-129108200D01* +X59507120Y-129108200D02* +X60243720Y-129108200D01* +X62275720Y-127838200D02* +X62275720Y-127213360D01* +X54127400Y-129479040D02* +X54127400Y-130776600D01* +X54935120Y-128671320D02* +X54127400Y-129479040D01* +X55824120Y-128671320D02* +X54935120Y-128671320D01* +X55859680Y-128635760D02* +X55824120Y-128671320D01* +X58938160Y-128625600D02* +X57246520Y-128625600D01* +X58968640Y-128595120D02* +X58938160Y-128625600D01* +X62021720Y-126959360D02* +X60071000Y-126959360D01* +X62275720Y-127213360D02* +X62021720Y-126959360D01* +X48277400Y-133426600D02* +X50794520Y-133426600D01* +X64597320Y-125359120D02* +X65635680Y-125359120D01* +X64490600Y-125465840D02* +X64597320Y-125359120D01* +X64490600Y-126171960D02* +X64490600Y-125465840D01* +X64759840Y-126441200D02* +X64490600Y-126171960D01* +X64759840Y-128117600D02* +X64759840Y-126441200D01* +X64698880Y-128178560D02* +X64759840Y-128117600D01* +X64698880Y-129092960D02* +X64698880Y-128178560D01* +X63799720Y-129992120D02* +X64698880Y-129092960D01* +X61076840Y-129992120D02* +X63799720Y-129992120D01* +X60858400Y-130210560D02* +X61076840Y-129992120D01* +X54477920Y-132730240D02* +X58440320Y-132730240D01* +X54193440Y-133014720D02* +X54477920Y-132730240D01* +X50794520Y-133426600D02* +X50942240Y-133278880D01* +X40127360Y-135249260D02* +X41746780Y-135249260D01* +X45836640Y-135026600D02* +X48277400Y-135026600D01* +X45326300Y-135536940D02* +X45836640Y-135026600D01* +X41746780Y-135249260D02* +X42057320Y-135559800D01* +X40127360Y-135899260D02* +X41505240Y-135899260D01* +X46319340Y-135826600D02* +X48277400Y-135826600D01* +X45453300Y-136692640D02* +X46319340Y-135826600D01* +X41505240Y-135899260D02* +X42092880Y-136486900D01* +X48277400Y-136626600D02* +X50373280Y-136626600D01* +X71350440Y-147352320D02* +X72478900Y-147352320D01* +X71241920Y-147243800D02* +X71350440Y-147352320D01* +X50373280Y-136626600D02* +X51099720Y-137353040D01* +X48277400Y-137426600D02* +X50050600Y-137426600D01* +X68832160Y-147088160D02* +X70004940Y-147088160D01* +X68813680Y-147106640D02* +X68832160Y-147088160D01* +X50050600Y-137426600D02* +X50678080Y-138054080D01* +X48277400Y-139826600D02* +X49576120Y-139826600D01* +X66215960Y-147047520D02* +X67449700Y-147047520D01* +X66212720Y-147050760D02* +X66215960Y-147047520D01* +X49576120Y-139826600D02* +X49982120Y-139420600D01* +X48277400Y-140626600D02* +X49731160Y-140626600D01* +X63799020Y-147009420D02* +X64785240Y-147009420D01* +X63113920Y-146324320D02* +X63799020Y-147009420D01* +X49731160Y-140626600D02* +X50881280Y-139476480D01* +X57718960Y-126258320D02* +X57546240Y-126258320D01* +X57546240Y-126258320D02* +X55849520Y-127955040D01* +X50127400Y-141007600D02* +X50127400Y-142476600D01* +X50149760Y-140985240D02* +X50127400Y-141007600D01* +X50764440Y-140985240D02* +X50149760Y-140985240D01* +X51739800Y-140009880D02* +X50764440Y-140985240D01* +X51739800Y-132532120D02* +X51739800Y-140009880D01* +X51551840Y-132344160D02* +X51739800Y-132532120D01* +X55849520Y-127955040D02* +X55011320Y-127955040D01* +X50927400Y-142476600D02* +X50927400Y-141731600D01* +X50927400Y-141731600D02* +X52496720Y-140162280D01* +X57383680Y-134467600D02* +X57383680Y-133664960D01* +X55265320Y-136585960D02* +X57383680Y-134467600D01* +X52496720Y-136657080D02* +X52491640Y-136652000D01* +X52496720Y-140162280D02* +X52496720Y-136657080D01* +X50927400Y-142476600D02* +X50927400Y-141696040D01* +X50927400Y-142476600D02* +X50927400Y-141716360D01* +X48417500Y-152120600D02* +X48686720Y-152120600D01* +X48686720Y-152120600D02* +X50820320Y-149987000D01* +X56527400Y-144010680D02* +X56527400Y-142476600D01* +X56509920Y-144028160D02* +X56527400Y-144010680D01* +X50820320Y-148559520D02* +X52202080Y-147177760D01* +X50820320Y-149987000D02* +X50820320Y-148559520D01* +X48417500Y-153390600D02* +X48417500Y-152120600D01* +X42400220Y-147272440D02* +X44324840Y-147272440D01* +X58127400Y-141215880D02* +X58127400Y-142476600D01* +X57952640Y-141041120D02* +X58127400Y-141215880D01* +X47548800Y-143804640D02* +X48828960Y-143804640D01* +X45557440Y-145796000D02* +X47548800Y-143804640D01* +X44324840Y-147272440D02* +X44500800Y-147096480D01* +X58196480Y-142407520D02* +X58127400Y-142476600D01* +D11* +X41271760Y-149009100D02* +X41271760Y-148400900D01* +X41271760Y-148400900D02* +X42400220Y-147272440D01* +X41327640Y-151102060D02* +X41327640Y-149064980D01* +X41327640Y-149064980D02* +X41271760Y-149009100D01* +X42484040Y-152838720D02* +X41728960Y-152838720D01* +X41327640Y-152437400D02* +X41327640Y-151102060D01* +X41728960Y-152838720D02* +X41327640Y-152437400D01* +D38* +X64897000Y-153995120D02* +X64897000Y-151592980D01* +X64897000Y-151592980D02* +X64823340Y-151519320D01* +X67437000Y-151684420D02* +X67487800Y-151633620D01* +X67437000Y-153995120D02* +X67437000Y-151684420D01* +X69977000Y-153995120D02* +X69977000Y-151664100D01* +X69977000Y-151664100D02* +X70081140Y-151559960D01* +X72517000Y-153995120D02* +X72517000Y-151709820D01* +X62931040Y-128473200D02* +X64119760Y-127284480D01* +X62275720Y-128473200D02* +X62931040Y-128473200D01* +X60243720Y-128473200D02* +X61112400Y-128473200D01* +X61112400Y-128473200D02* +X61132720Y-128452880D01* +D11* +X42484040Y-154338720D02* +X43387580Y-154338720D01* +X46875700Y-150850600D02* +X48417500Y-150850600D01* +X43387580Y-154338720D02* +X46875700Y-150850600D01* +X40983600Y-154289760D02* +X42435080Y-154289760D01* +X42435080Y-154289760D02* +X42484040Y-154338720D01* +X42400220Y-145772440D02* +X44345160Y-145772440D01* +X46883320Y-148310600D02* +X48417500Y-148310600D01* +X44345160Y-145772440D02* +X46883320Y-148310600D01* +X40968360Y-145481040D02* +X42108820Y-145481040D01* +X42108820Y-145481040D02* +X42400220Y-145772440D01* +D38* +X72478900Y-148852320D02* +X72478900Y-150171720D01* +X72478900Y-150171720D02* +X72517000Y-150209820D01* +X70004940Y-148588160D02* +X70004940Y-149983760D01* +X70004940Y-149983760D02* +X70081140Y-150059960D01* +X67449700Y-148547520D02* +X67449700Y-150095520D01* +X67449700Y-150095520D02* +X67487800Y-150133620D01* +X64785240Y-148509420D02* +X64785240Y-149981220D01* +X64785240Y-149981220D02* +X64823340Y-150019320D01* +D39* +X58673300Y-146011900D02* +X58673300Y-148551900D01* +X58673300Y-148551900D02* +X58698700Y-148577300D01* +D38* +X58673300Y-148551900D02* +X58698700Y-148577300D01* +X53817500Y-152120600D02* +X55874920Y-152120600D01* +X60223400Y-147203160D02* +X60223400Y-147218400D01* +X60192920Y-147203160D02* +X60223400Y-147203160D01* +X57876440Y-150119080D02* +X57876440Y-149839680D01* +X55874920Y-152120600D02* +X57876440Y-150119080D01* +D39* +X60223400Y-147218400D02* +X60223400Y-146062000D01* +X60223400Y-146062000D02* +X60173300Y-146011900D01* +D38* +X53817500Y-153390600D02* +X53817500Y-152120600D01* +X53817500Y-152120600D02* +X53893700Y-152044400D01* +X60223400Y-147218400D02* +X60173300Y-147168300D01* +X60173300Y-147168300D02* +X60173300Y-146011900D01* +X63146240Y-139816840D02* +X63146240Y-137861040D01* +X63146240Y-137861040D02* +X63108140Y-137822940D01* +X64608140Y-141988540D02* +X64608140Y-139854940D01* +X64608140Y-139854940D02* +X64646240Y-139816840D01* +M02* diff --git a/PCB/OUTPUT/Tinylab_proto1-F_Mask.gts b/PCB/OUTPUT/Tinylab_proto1-F_Mask.gts new file mode 100644 index 00000000..fdb600b7 --- /dev/null +++ b/PCB/OUTPUT/Tinylab_proto1-F_Mask.gts @@ -0,0 +1,250 @@ +G04 #@! TF.FileFunction,Soldermask,Top* +%FSLAX46Y46*% +G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* +G04 Created by KiCad (PCBNEW (2015-08-05 BZR 6055, Git fa29c62)-product) date 28/09/2015 1:15:09 PM* +%MOMM*% +G01* +G04 APERTURE LIST* +%ADD10C,0.150000*% +%ADD11R,0.750000X0.800000*% +%ADD12R,0.800000X0.750000*% +%ADD13C,1.501140*% +%ADD14C,1.998980*% +%ADD15R,1.998980X1.998980*% +%ADD16R,2.000000X2.000000*% +%ADD17R,1.600000X0.560000*% +%ADD18R,0.560000X1.600000*% +%ADD19R,2.032000X1.727200*% +%ADD20O,2.032000X1.727200*% +%ADD21R,1.350000X0.400000*% +%ADD22O,0.950000X1.250000*% +%ADD23O,1.550000X1.000000*% +%ADD24R,1.727200X2.032000*% +%ADD25O,1.727200X2.032000*% +%ADD26R,1.727200X1.727200*% +%ADD27O,1.727200X1.727200*% +%ADD28R,2.032000X2.032000*% +%ADD29O,2.032000X2.032000*% +%ADD30R,0.900000X0.600000*% +%ADD31R,0.500000X0.900000*% +%ADD32R,0.900000X0.500000*% +%ADD33R,0.600000X0.900000*% +%ADD34R,1.500000X0.600000*% +%ADD35R,0.508000X0.304800*% +G04 APERTURE END LIST* +D10* +D11* +X39319200Y-152682640D03* +X39319200Y-151182640D03* +X39278560Y-147088160D03* +X39278560Y-148588160D03* +X43682920Y-135526080D03* +X43682920Y-137026080D03* +D12* +X42864340Y-129816860D03* +X44364340Y-129816860D03* +D11* +X44226480Y-150805580D03* +X44226480Y-149305580D03* +D13* +X70855840Y-128137920D03* +X70855840Y-125597920D03* +D12* +X58795220Y-150964900D03* +X60295220Y-150964900D03* +D11* +X75072240Y-126224600D03* +X75072240Y-127724600D03* +X56596280Y-147961920D03* +X56596280Y-149461920D03* +D13* +X69230240Y-141175740D03* +X69230240Y-138635740D03* +D11* +X73941940Y-139143040D03* +X73941940Y-140643040D03* +D14* +X63820040Y-134800340D03* +D15* +X73980040Y-134800340D03* +D16* +X43665140Y-139105840D03* +X43665140Y-142305840D03* +D17* +X59977400Y-140626600D03* +X59977400Y-139826600D03* +X59977400Y-139026600D03* +X59977400Y-138226600D03* +X59977400Y-137426600D03* +X59977400Y-136626600D03* +X59977400Y-135826600D03* +X59977400Y-135026600D03* +X59977400Y-134226600D03* +X59977400Y-133426600D03* +X59977400Y-132626600D03* +D18* +X58127400Y-130776600D03* +X57327400Y-130776600D03* +X56527400Y-130776600D03* +X55727400Y-130776600D03* +X54927400Y-130776600D03* +X54127400Y-130776600D03* +X53327400Y-130776600D03* +X52527400Y-130776600D03* +X51727400Y-130776600D03* +X50927400Y-130776600D03* +X50127400Y-130776600D03* +D17* +X48277400Y-132626600D03* +X48277400Y-133426600D03* +X48277400Y-134226600D03* +X48277400Y-135026600D03* +X48277400Y-135826600D03* +X48277400Y-136626600D03* +X48277400Y-137426600D03* +X48277400Y-138226600D03* +X48277400Y-139026600D03* +X48277400Y-139826600D03* +X48277400Y-140626600D03* +D18* +X50127400Y-142476600D03* +X50927400Y-142476600D03* +X51727400Y-142476600D03* +X52527400Y-142476600D03* +X53327400Y-142476600D03* +X54127400Y-142476600D03* +X54927400Y-142476600D03* +X55727400Y-142476600D03* +X56527400Y-142476600D03* +X57327400Y-142476600D03* +X58127400Y-142476600D03* +D14* +X74117200Y-131899660D03* +D15* +X63957200Y-131899660D03* +D19* +X36258500Y-146100800D03* +D20* +X36258500Y-148640800D03* +X36258500Y-151180800D03* +X36258500Y-153720800D03* +D21* +X40127360Y-134599260D03* +X40127360Y-135249260D03* +X40127360Y-135899260D03* +X40127360Y-136549260D03* +X40127360Y-137199260D03* +D22* +X40127360Y-133399260D03* +X40127360Y-138399260D03* +D23* +X37427360Y-132399260D03* +X37427360Y-139399260D03* +D24* +X64861440Y-154310080D03* +D25* +X67401440Y-154310080D03* +X69941440Y-154310080D03* +X72481440Y-154310080D03* +D26* +X57718960Y-123718320D03* +D27* +X57718960Y-126258320D03* +X55178960Y-123718320D03* +X55178960Y-126258320D03* +D24* +X49342040Y-125089920D03* +D25* +X46802040Y-125089920D03* +X44262040Y-125089920D03* +D28* +X61328300Y-154012900D03* +D29* +X58788300Y-154012900D03* +D28* +X73741280Y-144505680D03* +D29* +X71201280Y-144505680D03* +D28* +X65714880Y-122570240D03* +D29* +X63174880Y-122570240D03* +D30* +X68435680Y-126309120D03* +X65635680Y-127259120D03* +X65635680Y-125359120D03* +D31* +X40983600Y-154289760D03* +X39483600Y-154289760D03* +X40968360Y-145481040D03* +X39468360Y-145481040D03* +D32* +X42484040Y-154338720D03* +X42484040Y-152838720D03* +X42400220Y-147272440D03* +X42400220Y-145772440D03* +D31* +X42827640Y-151102060D03* +X41327640Y-151102060D03* +X42771760Y-149009100D03* +X41271760Y-149009100D03* +D32* +X72517000Y-150209820D03* +X72517000Y-151709820D03* +X70081140Y-150059960D03* +X70081140Y-151559960D03* +X67487800Y-150133620D03* +X67487800Y-151633620D03* +X64823340Y-150019320D03* +X64823340Y-151519320D03* +X72478900Y-147352320D03* +X72478900Y-148852320D03* +X70004940Y-147088160D03* +X70004940Y-148588160D03* +X67449700Y-147047520D03* +X67449700Y-148547520D03* +X64785240Y-147009420D03* +X64785240Y-148509420D03* +D31* +X58673300Y-146011900D03* +X60173300Y-146011900D03* +X60198700Y-148577300D03* +X58698700Y-148577300D03* +X64608140Y-137822940D03* +X63108140Y-137822940D03* +X63146240Y-139816840D03* +X64646240Y-139816840D03* +X64608140Y-141988540D03* +X63108140Y-141988540D03* +D33* +X43642280Y-134191200D03* +X42692280Y-131391200D03* +X44592280Y-131391200D03* +D34* +X48417500Y-145770600D03* +X48417500Y-147040600D03* +X48417500Y-148310600D03* +X48417500Y-149580600D03* +X48417500Y-150850600D03* +X48417500Y-152120600D03* +X48417500Y-153390600D03* +X53817500Y-153390600D03* +X53817500Y-152120600D03* +X53817500Y-150850600D03* +X53817500Y-149580600D03* +X53817500Y-148310600D03* +X53817500Y-147040600D03* +X53817500Y-145770600D03* +D35* +X60243720Y-127838200D03* +X60243720Y-129108200D03* +X62275720Y-128473200D03* +X60243720Y-128473200D03* +X62275720Y-129108200D03* +X62275720Y-127838200D03* +D12* +X52036280Y-128427480D03* +X53536280Y-128427480D03* +X54445600Y-144200880D03* +X52945600Y-144200880D03* +M02* diff --git a/PCB/OUTPUT/Tinylab_proto1-F_SilkS.gto b/PCB/OUTPUT/Tinylab_proto1-F_SilkS.gto new file mode 100644 index 00000000..dd95c161 --- /dev/null +++ b/PCB/OUTPUT/Tinylab_proto1-F_SilkS.gto @@ -0,0 +1,1883 @@ +G04 #@! TF.FileFunction,Legend,Top* +%FSLAX46Y46*% +G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* +G04 Created by KiCad (PCBNEW (2015-08-05 BZR 6055, Git fa29c62)-product) date 28/09/2015 1:15:09 PM* +%MOMM*% +G01* +G04 APERTURE LIST* +%ADD10C,0.150000*% +%ADD11C,0.152400*% +%ADD12C,0.127000*% +G04 APERTURE END LIST* +D10* +X38719200Y-152282640D02* +X38719200Y-151582640D01* +X39919200Y-151582640D02* +X39919200Y-152282640D01* +X39878560Y-147488160D02* +X39878560Y-148188160D01* +X38678560Y-148188160D02* +X38678560Y-147488160D01* +X44282920Y-135926080D02* +X44282920Y-136626080D01* +X43082920Y-136626080D02* +X43082920Y-135926080D01* +X43264340Y-129216860D02* +X43964340Y-129216860D01* +X43964340Y-130416860D02* +X43264340Y-130416860D01* +X43626480Y-150405580D02* +X43626480Y-149705580D01* +X44826480Y-149705580D02* +X44826480Y-150405580D01* +X72555100Y-125867160D02* +X72555100Y-126367540D01* +X72555100Y-125867160D02* +X73055480Y-125867160D01* +X72555100Y-125366780D02* +X72555100Y-125867160D01* +X72555100Y-125867160D02* +X72156320Y-125867160D01* +X72156320Y-125867160D02* +X72054720Y-125867160D01* +X74005440Y-126867920D02* +G75* +G03X74005440Y-126867920I-3149600J0D01* +G01* +X59195220Y-150364900D02* +X59895220Y-150364900D01* +X59895220Y-151564900D02* +X59195220Y-151564900D01* +X75672240Y-126624600D02* +X75672240Y-127324600D01* +X74472240Y-127324600D02* +X74472240Y-126624600D01* +X57196280Y-148361920D02* +X57196280Y-149061920D01* +X55996280Y-149061920D02* +X55996280Y-148361920D01* +X70929500Y-138904980D02* +X70929500Y-139405360D01* +X70929500Y-138904980D02* +X71429880Y-138904980D01* +X70929500Y-138404600D02* +X70929500Y-138904980D01* +X70929500Y-138904980D02* +X70530720Y-138904980D01* +X70530720Y-138904980D02* +X70429120Y-138904980D01* +X72379840Y-139905740D02* +G75* +G03X72379840Y-139905740I-3149600J0D01* +G01* +X74541940Y-139543040D02* +X74541940Y-140243040D01* +X73341940Y-140243040D02* +X73341940Y-139543040D01* +X66360040Y-134800340D02* +X65344040Y-134800340D01* +X71186040Y-134800340D02* +X72456040Y-134800340D01* +X70932040Y-136070340D02* +X70932040Y-133530340D01* +X70678040Y-136070340D02* +X70678040Y-133530340D01* +X70424040Y-136070340D02* +X70424040Y-133530340D01* +X71186040Y-136070340D02* +X71186040Y-133530340D01* +X70170040Y-136070340D02* +X71440040Y-133530340D01* +X71440040Y-136070340D02* +X70170040Y-133530340D01* +X70170040Y-136070340D02* +X70170040Y-133530340D01* +X70805040Y-136070340D02* +X70805040Y-133530340D01* +X71440040Y-133530340D02* +X71440040Y-136070340D01* +X71440040Y-136070340D02* +X66360040Y-136070340D01* +X66360040Y-136070340D02* +X66360040Y-133530340D01* +X66360040Y-133530340D02* +X71440040Y-133530340D01* +X42865140Y-139105840D02* +X44465140Y-139105840D01* +X44465140Y-139105840D02* +X44465140Y-142305840D01* +X44465140Y-142305840D02* +X42865140Y-142305840D01* +X42865140Y-142305840D02* +X42865140Y-139105840D01* +X59302400Y-141801600D02* +X59302400Y-141131600D01* +X48952400Y-141801600D02* +X48952400Y-141131600D01* +X48952400Y-131451600D02* +X48952400Y-132121600D01* +X59302400Y-131451600D02* +X59302400Y-132121600D01* +X59302400Y-141801600D02* +X58632400Y-141801600D01* +X59302400Y-131451600D02* +X58632400Y-131451600D01* +X48952400Y-131451600D02* +X49622400Y-131451600D01* +X48952400Y-141801600D02* +X49622400Y-141801600D01* +X59302400Y-141131600D02* +X60777400Y-141131600D01* +X71577200Y-131899660D02* +X72593200Y-131899660D01* +X66751200Y-131899660D02* +X65481200Y-131899660D01* +X67005200Y-130629660D02* +X67005200Y-133169660D01* +X67259200Y-130629660D02* +X67259200Y-133169660D01* +X67513200Y-130629660D02* +X67513200Y-133169660D01* +X66751200Y-130629660D02* +X66751200Y-133169660D01* +X67767200Y-130629660D02* +X66497200Y-133169660D01* +X66497200Y-130629660D02* +X67767200Y-133169660D01* +X67767200Y-130629660D02* +X67767200Y-133169660D01* +X67132200Y-130629660D02* +X67132200Y-133169660D01* +X66497200Y-133169660D02* +X66497200Y-130629660D01* +X66497200Y-130629660D02* +X71577200Y-130629660D01* +X71577200Y-130629660D02* +X71577200Y-133169660D01* +X71577200Y-133169660D02* +X66497200Y-133169660D01* +X34988500Y-147370800D02* +X34988500Y-154990800D01* +X37528500Y-147370800D02* +X37528500Y-154990800D01* +X37808500Y-144550800D02* +X37808500Y-146100800D01* +X34988500Y-154990800D02* +X37528500Y-154990800D01* +X37528500Y-147370800D02* +X34988500Y-147370800D01* +X34708500Y-146100800D02* +X34708500Y-144550800D01* +X34708500Y-144550800D02* +X37808500Y-144550800D01* +X34747360Y-131549260D02* +X34747360Y-140249260D01* +X41152360Y-131549260D02* +X41152360Y-140249260D01* +X41152360Y-140249260D02* +X34747360Y-140249260D01* +X35977360Y-140249260D02* +X35977360Y-131549260D01* +X34747360Y-131549260D02* +X41152360Y-131549260D01* +X66131440Y-155580080D02* +X73751440Y-155580080D01* +X66131440Y-153040080D02* +X73751440Y-153040080D01* +X63311440Y-152760080D02* +X64861440Y-152760080D01* +X73751440Y-155580080D02* +X73751440Y-153040080D01* +X66131440Y-153040080D02* +X66131440Y-155580080D01* +X64861440Y-155860080D02* +X63311440Y-155860080D01* +X63311440Y-155860080D02* +X63311440Y-152760080D01* +X57718960Y-122168320D02* +X59268960Y-122168320D01* +X59268960Y-123718320D02* +X59268960Y-122168320D01* +X56448960Y-122448320D02* +X56448960Y-124988320D01* +X56448960Y-124988320D02* +X58988960Y-124988320D01* +X58988960Y-124988320D02* +X58988960Y-127528320D01* +X58988960Y-127528320D02* +X53908960Y-127528320D01* +X53908960Y-127528320D02* +X53908960Y-122448320D01* +X53908960Y-122448320D02* +X56448960Y-122448320D01* +X48072040Y-123819920D02* +X42992040Y-123819920D01* +X42992040Y-123819920D02* +X42992040Y-126359920D01* +X42992040Y-126359920D02* +X48072040Y-126359920D01* +X50892040Y-126639920D02* +X49342040Y-126639920D01* +X48072040Y-126359920D02* +X48072040Y-123819920D01* +X49342040Y-123539920D02* +X50892040Y-123539920D01* +X50892040Y-123539920D02* +X50892040Y-126639920D01* +X60058300Y-155282900D02* +X57518300Y-155282900D01* +X62878300Y-155562900D02* +X61328300Y-155562900D01* +X60058300Y-155282900D02* +X60058300Y-152742900D01* +X61328300Y-152462900D02* +X62878300Y-152462900D01* +X62878300Y-152462900D02* +X62878300Y-155562900D01* +X60058300Y-152742900D02* +X57518300Y-152742900D01* +X57518300Y-152742900D02* +X57518300Y-155282900D01* +X72471280Y-145775680D02* +X69931280Y-145775680D01* +X75291280Y-146055680D02* +X73741280Y-146055680D01* +X72471280Y-145775680D02* +X72471280Y-143235680D01* +X73741280Y-142955680D02* +X75291280Y-142955680D01* +X75291280Y-142955680D02* +X75291280Y-146055680D01* +X72471280Y-143235680D02* +X69931280Y-143235680D01* +X69931280Y-143235680D02* +X69931280Y-145775680D01* +X64444880Y-123840240D02* +X61904880Y-123840240D01* +X67264880Y-124120240D02* +X65714880Y-124120240D01* +X64444880Y-123840240D02* +X64444880Y-121300240D01* +X65714880Y-121020240D02* +X67264880Y-121020240D01* +X67264880Y-121020240D02* +X67264880Y-124120240D01* +X64444880Y-121300240D02* +X61904880Y-121300240D01* +X61904880Y-121300240D02* +X61904880Y-123840240D01* +X66777101Y-125309120D02* +G75* +G03X66777101Y-125309120I-141421J0D01* +G01* +X66235680Y-127809120D02* +X67835680Y-127809120D01* +X67835680Y-127809120D02* +X67835680Y-124809120D01* +X67835680Y-124809120D02* +X66235680Y-124809120D01* +X66235680Y-124809120D02* +X66235680Y-127809120D01* +X39733600Y-153614760D02* +X40733600Y-153614760D01* +X40733600Y-154964760D02* +X39733600Y-154964760D01* +X39718360Y-144806040D02* +X40718360Y-144806040D01* +X40718360Y-146156040D02* +X39718360Y-146156040D01* +X43159040Y-153088720D02* +X43159040Y-154088720D01* +X41809040Y-154088720D02* +X41809040Y-153088720D01* +X43075220Y-146022440D02* +X43075220Y-147022440D01* +X41725220Y-147022440D02* +X41725220Y-146022440D01* +X41577640Y-150427060D02* +X42577640Y-150427060D01* +X42577640Y-151777060D02* +X41577640Y-151777060D01* +X41521760Y-148334100D02* +X42521760Y-148334100D01* +X42521760Y-149684100D02* +X41521760Y-149684100D01* +X71842000Y-151459820D02* +X71842000Y-150459820D01* +X73192000Y-150459820D02* +X73192000Y-151459820D01* +X69406140Y-151309960D02* +X69406140Y-150309960D01* +X70756140Y-150309960D02* +X70756140Y-151309960D01* +X66812800Y-151383620D02* +X66812800Y-150383620D01* +X68162800Y-150383620D02* +X68162800Y-151383620D01* +X64148340Y-151269320D02* +X64148340Y-150269320D01* +X65498340Y-150269320D02* +X65498340Y-151269320D01* +X71803900Y-148602320D02* +X71803900Y-147602320D01* +X73153900Y-147602320D02* +X73153900Y-148602320D01* +X69329940Y-148338160D02* +X69329940Y-147338160D01* +X70679940Y-147338160D02* +X70679940Y-148338160D01* +X66774700Y-148297520D02* +X66774700Y-147297520D01* +X68124700Y-147297520D02* +X68124700Y-148297520D01* +X64110240Y-148259420D02* +X64110240Y-147259420D01* +X65460240Y-147259420D02* +X65460240Y-148259420D01* +X59923300Y-146686900D02* +X58923300Y-146686900D01* +X58923300Y-145336900D02* +X59923300Y-145336900D01* +X58948700Y-147902300D02* +X59948700Y-147902300D01* +X59948700Y-149252300D02* +X58948700Y-149252300D01* +X63358140Y-137147940D02* +X64358140Y-137147940D01* +X64358140Y-138497940D02* +X63358140Y-138497940D01* +X64396240Y-140491840D02* +X63396240Y-140491840D01* +X63396240Y-139141840D02* +X64396240Y-139141840D01* +X63358140Y-141313540D02* +X64358140Y-141313540D01* +X64358140Y-142663540D02* +X63358140Y-142663540D01* +X44783701Y-132391200D02* +G75* +G03X44783701Y-132391200I-141421J0D01* +G01* +X42142280Y-131991200D02* +X42142280Y-133591200D01* +X42142280Y-133591200D02* +X45142280Y-133591200D01* +X45142280Y-133591200D02* +X45142280Y-131991200D01* +X45142280Y-131991200D02* +X42142280Y-131991200D01* +X49042500Y-145130600D02* +X49042500Y-145245600D01* +X53192500Y-145130600D02* +X53192500Y-145245600D01* +X53192500Y-154030600D02* +X53192500Y-153915600D01* +X49042500Y-154030600D02* +X49042500Y-153915600D01* +X49042500Y-145130600D02* +X53192500Y-145130600D01* +X49042500Y-154030600D02* +X53192500Y-154030600D01* +X49042500Y-145245600D02* +X47667500Y-145245600D01* +D11* +X61894720Y-129489200D02* +X61894720Y-127457200D01* +X61894720Y-127457200D02* +X60624720Y-127457200D01* +X60624720Y-127457200D02* +X60624720Y-129489200D01* +X60624720Y-129489200D02* +X61894720Y-129489200D01* +D10* +X52436280Y-127827480D02* +X53136280Y-127827480D01* +X53136280Y-129027480D02* +X52436280Y-129027480D01* +X54045600Y-144800880D02* +X53345600Y-144800880D01* +X53345600Y-143600880D02* +X54045600Y-143600880D01* +X41058103Y-152790186D02* +X41105722Y-152837805D01* +X41153341Y-152980662D01* +X41153341Y-153075900D01* +X41105722Y-153218758D01* +X41010484Y-153313996D01* +X40915246Y-153361615D01* +X40724770Y-153409234D01* +X40581912Y-153409234D01* +X40391436Y-153361615D01* +X40296198Y-153313996D01* +X40200960Y-153218758D01* +X40153341Y-153075900D01* +X40153341Y-152980662D01* +X40200960Y-152837805D01* +X40248579Y-152790186D01* +X41153341Y-151837805D02* +X41153341Y-152409234D01* +X41153341Y-152123520D02* +X40153341Y-152123520D01* +X40296198Y-152218758D01* +X40391436Y-152313996D01* +X40439055Y-152409234D01* +X41063183Y-147567946D02* +X41110802Y-147615565D01* +X41158421Y-147758422D01* +X41158421Y-147853660D01* +X41110802Y-147996518D01* +X41015564Y-148091756D01* +X40920326Y-148139375D01* +X40729850Y-148186994D01* +X40586992Y-148186994D01* +X40396516Y-148139375D01* +X40301278Y-148091756D01* +X40206040Y-147996518D01* +X40158421Y-147853660D01* +X40158421Y-147758422D01* +X40206040Y-147615565D01* +X40253659Y-147567946D01* +X40253659Y-147186994D02* +X40206040Y-147139375D01* +X40158421Y-147044137D01* +X40158421Y-146806041D01* +X40206040Y-146710803D01* +X40253659Y-146663184D01* +X40348897Y-146615565D01* +X40444135Y-146615565D01* +X40586992Y-146663184D01* +X41158421Y-147234613D01* +X41158421Y-146615565D01* +X45736783Y-136391946D02* +X45784402Y-136439565D01* +X45832021Y-136582422D01* +X45832021Y-136677660D01* +X45784402Y-136820518D01* +X45689164Y-136915756D01* +X45593926Y-136963375D01* +X45403450Y-137010994D01* +X45260592Y-137010994D01* +X45070116Y-136963375D01* +X44974878Y-136915756D01* +X44879640Y-136820518D01* +X44832021Y-136677660D01* +X44832021Y-136582422D01* +X44879640Y-136439565D01* +X44927259Y-136391946D01* +X44832021Y-136058613D02* +X44832021Y-135439565D01* +X45212973Y-135772899D01* +X45212973Y-135630041D01* +X45260592Y-135534803D01* +X45308211Y-135487184D01* +X45403450Y-135439565D01* +X45641545Y-135439565D01* +X45736783Y-135487184D01* +X45784402Y-135534803D01* +X45832021Y-135630041D01* +X45832021Y-135915756D01* +X45784402Y-136010994D01* +X45736783Y-136058613D01* +X43460374Y-128794783D02* +X43412755Y-128842402D01* +X43269898Y-128890021D01* +X43174660Y-128890021D01* +X43031802Y-128842402D01* +X42936564Y-128747164D01* +X42888945Y-128651926D01* +X42841326Y-128461450D01* +X42841326Y-128318592D01* +X42888945Y-128128116D01* +X42936564Y-128032878D01* +X43031802Y-127937640D01* +X43174660Y-127890021D01* +X43269898Y-127890021D01* +X43412755Y-127937640D01* +X43460374Y-127985259D01* +X44317517Y-128223354D02* +X44317517Y-128890021D01* +X44079421Y-127842402D02* +X43841326Y-128556688D01* +X44460374Y-128556688D01* +X45970463Y-150189226D02* +X46018082Y-150236845D01* +X46065701Y-150379702D01* +X46065701Y-150474940D01* +X46018082Y-150617798D01* +X45922844Y-150713036D01* +X45827606Y-150760655D01* +X45637130Y-150808274D01* +X45494272Y-150808274D01* +X45303796Y-150760655D01* +X45208558Y-150713036D01* +X45113320Y-150617798D01* +X45065701Y-150474940D01* +X45065701Y-150379702D01* +X45113320Y-150236845D01* +X45160939Y-150189226D01* +X45065701Y-149284464D02* +X45065701Y-149760655D01* +X45541891Y-149808274D01* +X45494272Y-149760655D01* +X45446653Y-149665417D01* +X45446653Y-149427321D01* +X45494272Y-149332083D01* +X45541891Y-149284464D01* +X45637130Y-149236845D01* +X45875225Y-149236845D01* +X45970463Y-149284464D01* +X46018082Y-149332083D01* +X46065701Y-149427321D01* +X46065701Y-149665417D01* +X46018082Y-149760655D01* +X45970463Y-149808274D01* +X72832934Y-124593623D02* +X72785315Y-124641242D01* +X72642458Y-124688861D01* +X72547220Y-124688861D01* +X72404362Y-124641242D01* +X72309124Y-124546004D01* +X72261505Y-124450766D01* +X72213886Y-124260290D01* +X72213886Y-124117432D01* +X72261505Y-123926956D01* +X72309124Y-123831718D01* +X72404362Y-123736480D01* +X72547220Y-123688861D01* +X72642458Y-123688861D01* +X72785315Y-123736480D01* +X72832934Y-123784099D01* +X73690077Y-123688861D02* +X73499600Y-123688861D01* +X73404362Y-123736480D01* +X73356743Y-123784099D01* +X73261505Y-123926956D01* +X73213886Y-124117432D01* +X73213886Y-124498385D01* +X73261505Y-124593623D01* +X73309124Y-124641242D01* +X73404362Y-124688861D01* +X73594839Y-124688861D01* +X73690077Y-124641242D01* +X73737696Y-124593623D01* +X73785315Y-124498385D01* +X73785315Y-124260290D01* +X73737696Y-124165051D01* +X73690077Y-124117432D01* +X73594839Y-124069813D01* +X73404362Y-124069813D01* +X73309124Y-124117432D01* +X73261505Y-124165051D01* +X73213886Y-124260290D01* +X61692494Y-151446503D02* +X61644875Y-151494122D01* +X61502018Y-151541741D01* +X61406780Y-151541741D01* +X61263922Y-151494122D01* +X61168684Y-151398884D01* +X61121065Y-151303646D01* +X61073446Y-151113170D01* +X61073446Y-150970312D01* +X61121065Y-150779836D01* +X61168684Y-150684598D01* +X61263922Y-150589360D01* +X61406780Y-150541741D01* +X61502018Y-150541741D01* +X61644875Y-150589360D01* +X61692494Y-150636979D01* +X62025827Y-150541741D02* +X62692494Y-150541741D01* +X62263922Y-151541741D01* +X74712534Y-130054623D02* +X74664915Y-130102242D01* +X74522058Y-130149861D01* +X74426820Y-130149861D01* +X74283962Y-130102242D01* +X74188724Y-130007004D01* +X74141105Y-129911766D01* +X74093486Y-129721290D01* +X74093486Y-129578432D01* +X74141105Y-129387956D01* +X74188724Y-129292718D01* +X74283962Y-129197480D01* +X74426820Y-129149861D01* +X74522058Y-129149861D01* +X74664915Y-129197480D01* +X74712534Y-129245099D01* +X75283962Y-129578432D02* +X75188724Y-129530813D01* +X75141105Y-129483194D01* +X75093486Y-129387956D01* +X75093486Y-129340337D01* +X75141105Y-129245099D01* +X75188724Y-129197480D01* +X75283962Y-129149861D01* +X75474439Y-129149861D01* +X75569677Y-129197480D01* +X75617296Y-129245099D01* +X75664915Y-129340337D01* +X75664915Y-129387956D01* +X75617296Y-129483194D01* +X75569677Y-129530813D01* +X75474439Y-129578432D01* +X75283962Y-129578432D01* +X75188724Y-129626051D01* +X75141105Y-129673670D01* +X75093486Y-129768909D01* +X75093486Y-129959385D01* +X75141105Y-130054623D01* +X75188724Y-130102242D01* +X75283962Y-130149861D01* +X75474439Y-130149861D01* +X75569677Y-130102242D01* +X75617296Y-130054623D01* +X75664915Y-129959385D01* +X75664915Y-129768909D01* +X75617296Y-129673670D01* +X75569677Y-129626051D01* +X75474439Y-129578432D01* +X55759623Y-148746506D02* +X55807242Y-148794125D01* +X55854861Y-148936982D01* +X55854861Y-149032220D01* +X55807242Y-149175078D01* +X55712004Y-149270316D01* +X55616766Y-149317935D01* +X55426290Y-149365554D01* +X55283432Y-149365554D01* +X55092956Y-149317935D01* +X54997718Y-149270316D01* +X54902480Y-149175078D01* +X54854861Y-149032220D01* +X54854861Y-148936982D01* +X54902480Y-148794125D01* +X54950099Y-148746506D01* +X55854861Y-148270316D02* +X55854861Y-148079840D01* +X55807242Y-147984601D01* +X55759623Y-147936982D01* +X55616766Y-147841744D01* +X55426290Y-147794125D01* +X55045337Y-147794125D01* +X54950099Y-147841744D01* +X54902480Y-147889363D01* +X54854861Y-147984601D01* +X54854861Y-148175078D01* +X54902480Y-148270316D01* +X54950099Y-148317935D01* +X55045337Y-148365554D01* +X55283432Y-148365554D01* +X55378670Y-148317935D01* +X55426290Y-148270316D01* +X55473909Y-148175078D01* +X55473909Y-147984601D01* +X55426290Y-147889363D01* +X55378670Y-147841744D01* +X55283432Y-147794125D01* +X70802263Y-138081023D02* +X70754644Y-138128642D01* +X70611787Y-138176261D01* +X70516549Y-138176261D01* +X70373691Y-138128642D01* +X70278453Y-138033404D01* +X70230834Y-137938166D01* +X70183215Y-137747690D01* +X70183215Y-137604832D01* +X70230834Y-137414356D01* +X70278453Y-137319118D01* +X70373691Y-137223880D01* +X70516549Y-137176261D01* +X70611787Y-137176261D01* +X70754644Y-137223880D01* +X70802263Y-137271499D01* +X71754644Y-138176261D02* +X71183215Y-138176261D01* +X71468929Y-138176261D02* +X71468929Y-137176261D01* +X71373691Y-137319118D01* +X71278453Y-137414356D01* +X71183215Y-137461975D01* +X72707025Y-138176261D02* +X72135596Y-138176261D01* +X72421310Y-138176261D02* +X72421310Y-137176261D01* +X72326072Y-137319118D01* +X72230834Y-137414356D01* +X72135596Y-137461975D01* +X75764663Y-140515577D02* +X75812282Y-140563196D01* +X75859901Y-140706053D01* +X75859901Y-140801291D01* +X75812282Y-140944149D01* +X75717044Y-141039387D01* +X75621806Y-141087006D01* +X75431330Y-141134625D01* +X75288472Y-141134625D01* +X75097996Y-141087006D01* +X75002758Y-141039387D01* +X74907520Y-140944149D01* +X74859901Y-140801291D01* +X74859901Y-140706053D01* +X74907520Y-140563196D01* +X74955139Y-140515577D01* +X75859901Y-139563196D02* +X75859901Y-140134625D01* +X75859901Y-139848911D02* +X74859901Y-139848911D01* +X75002758Y-139944149D01* +X75097996Y-140039387D01* +X75145615Y-140134625D01* +X74955139Y-139182244D02* +X74907520Y-139134625D01* +X74859901Y-139039387D01* +X74859901Y-138801291D01* +X74907520Y-138706053D01* +X74955139Y-138658434D01* +X75050377Y-138610815D01* +X75145615Y-138610815D01* +X75288472Y-138658434D01* +X75859901Y-139229863D01* +X75859901Y-138610815D01* +X68847745Y-132339341D02* +X68847745Y-131339341D01* +X69085840Y-131339341D01* +X69228698Y-131386960D01* +X69323936Y-131482198D01* +X69371555Y-131577436D01* +X69419174Y-131767912D01* +X69419174Y-131910770D01* +X69371555Y-132101246D01* +X69323936Y-132196484D01* +X69228698Y-132291722D01* +X69085840Y-132339341D01* +X68847745Y-132339341D01* +X70371555Y-132339341D02* +X69800126Y-132339341D01* +X70085840Y-132339341D02* +X70085840Y-131339341D01* +X69990602Y-131482198D01* +X69895364Y-131577436D01* +X69800126Y-131625055D01* +X45602851Y-140968053D02* +X45602851Y-141301387D01* +X46126661Y-141301387D02* +X45126661Y-141301387D01* +X45126661Y-140825196D01* +X46126661Y-139920434D02* +X46126661Y-140491863D01* +X46126661Y-140206149D02* +X45126661Y-140206149D01* +X45269518Y-140301387D01* +X45364756Y-140396625D01* +X45412375Y-140491863D01* +X52937850Y-137272021D02* +X52937850Y-136272021D01* +X53985469Y-137176783D02* +X53937850Y-137224402D01* +X53794993Y-137272021D01* +X53699755Y-137272021D01* +X53556897Y-137224402D01* +X53461659Y-137129164D01* +X53414040Y-137033926D01* +X53366421Y-136843450D01* +X53366421Y-136700592D01* +X53414040Y-136510116D01* +X53461659Y-136414878D01* +X53556897Y-136319640D01* +X53699755Y-136272021D01* +X53794993Y-136272021D01* +X53937850Y-136319640D01* +X53985469Y-136367259D01* +X54937850Y-137272021D02* +X54366421Y-137272021D01* +X54652135Y-137272021D02* +X54652135Y-136272021D01* +X54556897Y-136414878D01* +X54461659Y-136510116D01* +X54366421Y-136557735D01* +X68367614Y-135356861D02* +X67891423Y-135356861D01* +X67891423Y-134356861D01* +X69224757Y-135356861D02* +X68653328Y-135356861D01* +X68939042Y-135356861D02* +X68939042Y-134356861D01* +X68843804Y-134499718D01* +X68748566Y-134594956D01* +X68653328Y-134642575D01* +X35614385Y-144287501D02* +X35614385Y-143287501D01* +X35995338Y-143287501D01* +X36090576Y-143335120D01* +X36138195Y-143382739D01* +X36185814Y-143477977D01* +X36185814Y-143620834D01* +X36138195Y-143716072D01* +X36090576Y-143763691D01* +X35995338Y-143811310D01* +X35614385Y-143811310D01* +X37138195Y-144287501D02* +X36566766Y-144287501D01* +X36852480Y-144287501D02* +X36852480Y-143287501D01* +X36757242Y-143430358D01* +X36662004Y-143525596D01* +X36566766Y-143573215D01* +X42467201Y-136638255D02* +X41467201Y-136638255D01* +X41467201Y-136257302D01* +X41514820Y-136162064D01* +X41562439Y-136114445D01* +X41657677Y-136066826D01* +X41800534Y-136066826D01* +X41895772Y-136114445D01* +X41943391Y-136162064D01* +X41991010Y-136257302D01* +X41991010Y-136638255D01* +X41562439Y-135685874D02* +X41514820Y-135638255D01* +X41467201Y-135543017D01* +X41467201Y-135304921D01* +X41514820Y-135209683D01* +X41562439Y-135162064D01* +X41657677Y-135114445D01* +X41752915Y-135114445D01* +X41895772Y-135162064D01* +X42467201Y-135733493D01* +X42467201Y-135114445D01* +X60213821Y-155048175D02* +X59213821Y-155048175D01* +X59213821Y-154667222D01* +X59261440Y-154571984D01* +X59309059Y-154524365D01* +X59404297Y-154476746D01* +X59547154Y-154476746D01* +X59642392Y-154524365D01* +X59690011Y-154571984D01* +X59737630Y-154667222D01* +X59737630Y-155048175D01* +X59213821Y-154143413D02* +X59213821Y-153524365D01* +X59594773Y-153857699D01* +X59594773Y-153714841D01* +X59642392Y-153619603D01* +X59690011Y-153571984D01* +X59785250Y-153524365D01* +X60023345Y-153524365D01* +X60118583Y-153571984D01* +X60166202Y-153619603D01* +X60213821Y-153714841D01* +X60213821Y-154000556D01* +X60166202Y-154095794D01* +X60118583Y-154143413D01* +X59673265Y-125826781D02* +X59673265Y-124826781D01* +X60054218Y-124826781D01* +X60149456Y-124874400D01* +X60197075Y-124922019D01* +X60244694Y-125017257D01* +X60244694Y-125160114D01* +X60197075Y-125255352D01* +X60149456Y-125302971D01* +X60054218Y-125350590D01* +X59673265Y-125350590D01* +X61101837Y-125160114D02* +X61101837Y-125826781D01* +X60863741Y-124779162D02* +X60625646Y-125493448D01* +X61244694Y-125493448D01* +X41080465Y-125461021D02* +X41080465Y-124461021D01* +X41461418Y-124461021D01* +X41556656Y-124508640D01* +X41604275Y-124556259D01* +X41651894Y-124651497D01* +X41651894Y-124794354D01* +X41604275Y-124889592D01* +X41556656Y-124937211D01* +X41461418Y-124984830D01* +X41080465Y-124984830D01* +X42556656Y-124461021D02* +X42080465Y-124461021D01* +X42032846Y-124937211D01* +X42080465Y-124889592D01* +X42175703Y-124841973D01* +X42413799Y-124841973D01* +X42509037Y-124889592D01* +X42556656Y-124937211D01* +X42604275Y-125032450D01* +X42604275Y-125270545D01* +X42556656Y-125365783D01* +X42509037Y-125413402D01* +X42413799Y-125461021D01* +X42175703Y-125461021D01* +X42080465Y-125413402D01* +X42032846Y-125365783D01* +X66880681Y-154750995D02* +X65880681Y-154750995D01* +X65880681Y-154370042D01* +X65928300Y-154274804D01* +X65975919Y-154227185D01* +X66071157Y-154179566D01* +X66214014Y-154179566D01* +X66309252Y-154227185D01* +X66356871Y-154274804D01* +X66404490Y-154370042D01* +X66404490Y-154750995D01* +X65880681Y-153322423D02* +X65880681Y-153512900D01* +X65928300Y-153608138D01* +X65975919Y-153655757D01* +X66118776Y-153750995D01* +X66309252Y-153798614D01* +X66690205Y-153798614D01* +X66785443Y-153750995D01* +X66833062Y-153703376D01* +X66880681Y-153608138D01* +X66880681Y-153417661D01* +X66833062Y-153322423D01* +X66785443Y-153274804D01* +X66690205Y-153227185D01* +X66452110Y-153227185D01* +X66356871Y-153274804D01* +X66309252Y-153322423D01* +X66261633Y-153417661D01* +X66261633Y-153608138D01* +X66309252Y-153703376D01* +X66356871Y-153750995D01* +X66452110Y-153798614D01* +X67938425Y-145125701D02* +X67938425Y-144125701D01* +X68319378Y-144125701D01* +X68414616Y-144173320D01* +X68462235Y-144220939D01* +X68509854Y-144316177D01* +X68509854Y-144459034D01* +X68462235Y-144554272D01* +X68414616Y-144601891D01* +X68319378Y-144649510D01* +X67938425Y-144649510D01* +X68843187Y-144125701D02* +X69509854Y-144125701D01* +X69081282Y-145125701D01* +X67521865Y-122098061D02* +X67521865Y-121098061D01* +X67902818Y-121098061D01* +X67998056Y-121145680D01* +X68045675Y-121193299D01* +X68093294Y-121288537D01* +X68093294Y-121431394D01* +X68045675Y-121526632D01* +X67998056Y-121574251D01* +X67902818Y-121621870D01* +X67521865Y-121621870D01* +X68664722Y-121526632D02* +X68569484Y-121479013D01* +X68521865Y-121431394D01* +X68474246Y-121336156D01* +X68474246Y-121288537D01* +X68521865Y-121193299D01* +X68569484Y-121145680D01* +X68664722Y-121098061D01* +X68855199Y-121098061D01* +X68950437Y-121145680D01* +X68998056Y-121193299D01* +X69045675Y-121288537D01* +X69045675Y-121336156D01* +X68998056Y-121431394D01* +X68950437Y-121479013D01* +X68855199Y-121526632D01* +X68664722Y-121526632D01* +X68569484Y-121574251D01* +X68521865Y-121621870D01* +X68474246Y-121717109D01* +X68474246Y-121907585D01* +X68521865Y-122002823D01* +X68569484Y-122050442D01* +X68664722Y-122098061D01* +X68855199Y-122098061D01* +X68950437Y-122050442D01* +X68998056Y-122002823D01* +X69045675Y-121907585D01* +X69045675Y-121717109D01* +X68998056Y-121621870D01* +X68950437Y-121574251D01* +X68855199Y-121526632D01* +X66747402Y-129188459D02* +X66652164Y-129140840D01* +X66556926Y-129045602D01* +X66414069Y-128902745D01* +X66318830Y-128855126D01* +X66223592Y-128855126D01* +X66271211Y-129093221D02* +X66175973Y-129045602D01* +X66080735Y-128950364D01* +X66033116Y-128759888D01* +X66033116Y-128426554D01* +X66080735Y-128236078D01* +X66175973Y-128140840D01* +X66271211Y-128093221D01* +X66461688Y-128093221D01* +X66556926Y-128140840D01* +X66652164Y-128236078D01* +X66699783Y-128426554D01* +X66699783Y-128759888D01* +X66652164Y-128950364D01* +X66556926Y-129045602D01* +X66461688Y-129093221D01* +X66271211Y-129093221D01* +X67652164Y-129093221D02* +X67080735Y-129093221D01* +X67366449Y-129093221D02* +X67366449Y-128093221D01* +X67271211Y-128236078D01* +X67175973Y-128331316D01* +X67080735Y-128378935D01* +X40392054Y-156205181D02* +X40058720Y-155728990D01* +X39820625Y-156205181D02* +X39820625Y-155205181D01* +X40201578Y-155205181D01* +X40296816Y-155252800D01* +X40344435Y-155300419D01* +X40392054Y-155395657D01* +X40392054Y-155538514D01* +X40344435Y-155633752D01* +X40296816Y-155681371D01* +X40201578Y-155728990D01* +X39820625Y-155728990D01* +X41344435Y-156205181D02* +X40773006Y-156205181D01* +X41058720Y-156205181D02* +X41058720Y-155205181D01* +X40963482Y-155348038D01* +X40868244Y-155443276D01* +X40773006Y-155490895D01* +X39945014Y-144561821D02* +X39611680Y-144085630D01* +X39373585Y-144561821D02* +X39373585Y-143561821D01* +X39754538Y-143561821D01* +X39849776Y-143609440D01* +X39897395Y-143657059D01* +X39945014Y-143752297D01* +X39945014Y-143895154D01* +X39897395Y-143990392D01* +X39849776Y-144038011D01* +X39754538Y-144085630D01* +X39373585Y-144085630D01* +X40325966Y-143657059D02* +X40373585Y-143609440D01* +X40468823Y-143561821D01* +X40706919Y-143561821D01* +X40802157Y-143609440D01* +X40849776Y-143657059D01* +X40897395Y-143752297D01* +X40897395Y-143847535D01* +X40849776Y-143990392D01* +X40278347Y-144561821D01* +X40897395Y-144561821D01* +X44445181Y-153704586D02* +X43968990Y-154037920D01* +X44445181Y-154276015D02* +X43445181Y-154276015D01* +X43445181Y-153895062D01* +X43492800Y-153799824D01* +X43540419Y-153752205D01* +X43635657Y-153704586D01* +X43778514Y-153704586D01* +X43873752Y-153752205D01* +X43921371Y-153799824D01* +X43968990Y-153895062D01* +X43968990Y-154276015D01* +X43445181Y-153371253D02* +X43445181Y-152752205D01* +X43826133Y-153085539D01* +X43826133Y-152942681D01* +X43873752Y-152847443D01* +X43921371Y-152799824D01* +X44016610Y-152752205D01* +X44254705Y-152752205D01* +X44349943Y-152799824D01* +X44397562Y-152847443D01* +X44445181Y-152942681D01* +X44445181Y-153228396D01* +X44397562Y-153323634D01* +X44349943Y-153371253D01* +X44358821Y-146744986D02* +X43882630Y-147078320D01* +X44358821Y-147316415D02* +X43358821Y-147316415D01* +X43358821Y-146935462D01* +X43406440Y-146840224D01* +X43454059Y-146792605D01* +X43549297Y-146744986D01* +X43692154Y-146744986D01* +X43787392Y-146792605D01* +X43835011Y-146840224D01* +X43882630Y-146935462D01* +X43882630Y-147316415D01* +X43692154Y-145887843D02* +X44358821Y-145887843D01* +X43311202Y-146125939D02* +X44025488Y-146364034D01* +X44025488Y-145744986D01* +X44273174Y-152486621D02* +X43939840Y-152010430D01* +X43701745Y-152486621D02* +X43701745Y-151486621D01* +X44082698Y-151486621D01* +X44177936Y-151534240D01* +X44225555Y-151581859D01* +X44273174Y-151677097D01* +X44273174Y-151819954D01* +X44225555Y-151915192D01* +X44177936Y-151962811D01* +X44082698Y-152010430D01* +X43701745Y-152010430D01* +X45177936Y-151486621D02* +X44701745Y-151486621D01* +X44654126Y-151962811D01* +X44701745Y-151915192D01* +X44796983Y-151867573D01* +X45035079Y-151867573D01* +X45130317Y-151915192D01* +X45177936Y-151962811D01* +X45225555Y-152058050D01* +X45225555Y-152296145D01* +X45177936Y-152391383D01* +X45130317Y-152439002D01* +X45035079Y-152486621D01* +X44796983Y-152486621D01* +X44701745Y-152439002D01* +X44654126Y-152391383D01* +X44090294Y-148625821D02* +X43756960Y-148149630D01* +X43518865Y-148625821D02* +X43518865Y-147625821D01* +X43899818Y-147625821D01* +X43995056Y-147673440D01* +X44042675Y-147721059D01* +X44090294Y-147816297D01* +X44090294Y-147959154D01* +X44042675Y-148054392D01* +X43995056Y-148102011D01* +X43899818Y-148149630D01* +X43518865Y-148149630D01* +X44947437Y-147625821D02* +X44756960Y-147625821D01* +X44661722Y-147673440D01* +X44614103Y-147721059D01* +X44518865Y-147863916D01* +X44471246Y-148054392D01* +X44471246Y-148435345D01* +X44518865Y-148530583D01* +X44566484Y-148578202D01* +X44661722Y-148625821D01* +X44852199Y-148625821D01* +X44947437Y-148578202D01* +X44995056Y-148530583D01* +X45042675Y-148435345D01* +X45042675Y-148197250D01* +X44995056Y-148102011D01* +X44947437Y-148054392D01* +X44852199Y-148006773D01* +X44661722Y-148006773D01* +X44566484Y-148054392D01* +X44518865Y-148102011D01* +X44471246Y-148197250D01* +X74381621Y-151179826D02* +X73905430Y-151513160D01* +X74381621Y-151751255D02* +X73381621Y-151751255D01* +X73381621Y-151370302D01* +X73429240Y-151275064D01* +X73476859Y-151227445D01* +X73572097Y-151179826D01* +X73714954Y-151179826D01* +X73810192Y-151227445D01* +X73857811Y-151275064D01* +X73905430Y-151370302D01* +X73905430Y-151751255D01* +X73381621Y-150846493D02* +X73381621Y-150179826D01* +X74381621Y-150608398D01* +X71806061Y-150981706D02* +X71329870Y-151315040D01* +X71806061Y-151553135D02* +X70806061Y-151553135D01* +X70806061Y-151172182D01* +X70853680Y-151076944D01* +X70901299Y-151029325D01* +X70996537Y-150981706D01* +X71139394Y-150981706D01* +X71234632Y-151029325D01* +X71282251Y-151076944D01* +X71329870Y-151172182D01* +X71329870Y-151553135D01* +X71234632Y-150410278D02* +X71187013Y-150505516D01* +X71139394Y-150553135D01* +X71044156Y-150600754D01* +X70996537Y-150600754D01* +X70901299Y-150553135D01* +X70853680Y-150505516D01* +X70806061Y-150410278D01* +X70806061Y-150219801D01* +X70853680Y-150124563D01* +X70901299Y-150076944D01* +X70996537Y-150029325D01* +X71044156Y-150029325D01* +X71139394Y-150076944D01* +X71187013Y-150124563D01* +X71234632Y-150219801D01* +X71234632Y-150410278D01* +X71282251Y-150505516D01* +X71329870Y-150553135D01* +X71425109Y-150600754D01* +X71615585Y-150600754D01* +X71710823Y-150553135D01* +X71758442Y-150505516D01* +X71806061Y-150410278D01* +X71806061Y-150219801D01* +X71758442Y-150124563D01* +X71710823Y-150076944D01* +X71615585Y-150029325D01* +X71425109Y-150029325D01* +X71329870Y-150076944D01* +X71282251Y-150124563D01* +X71234632Y-150219801D01* +X69260981Y-151149346D02* +X68784790Y-151482680D01* +X69260981Y-151720775D02* +X68260981Y-151720775D01* +X68260981Y-151339822D01* +X68308600Y-151244584D01* +X68356219Y-151196965D01* +X68451457Y-151149346D01* +X68594314Y-151149346D01* +X68689552Y-151196965D01* +X68737171Y-151244584D01* +X68784790Y-151339822D01* +X68784790Y-151720775D01* +X69260981Y-150673156D02* +X69260981Y-150482680D01* +X69213362Y-150387441D01* +X69165743Y-150339822D01* +X69022886Y-150244584D01* +X68832410Y-150196965D01* +X68451457Y-150196965D01* +X68356219Y-150244584D01* +X68308600Y-150292203D01* +X68260981Y-150387441D01* +X68260981Y-150577918D01* +X68308600Y-150673156D01* +X68356219Y-150720775D01* +X68451457Y-150768394D01* +X68689552Y-150768394D01* +X68784790Y-150720775D01* +X68832410Y-150673156D01* +X68880029Y-150577918D01* +X68880029Y-150387441D01* +X68832410Y-150292203D01* +X68784790Y-150244584D01* +X68689552Y-150196965D01* +X66614301Y-151376617D02* +X66138110Y-151709951D01* +X66614301Y-151948046D02* +X65614301Y-151948046D01* +X65614301Y-151567093D01* +X65661920Y-151471855D01* +X65709539Y-151424236D01* +X65804777Y-151376617D01* +X65947634Y-151376617D01* +X66042872Y-151424236D01* +X66090491Y-151471855D01* +X66138110Y-151567093D01* +X66138110Y-151948046D01* +X66614301Y-150424236D02* +X66614301Y-150995665D01* +X66614301Y-150709951D02* +X65614301Y-150709951D01* +X65757158Y-150805189D01* +X65852396Y-150900427D01* +X65900015Y-150995665D01* +X65614301Y-149805189D02* +X65614301Y-149709950D01* +X65661920Y-149614712D01* +X65709539Y-149567093D01* +X65804777Y-149519474D01* +X65995253Y-149471855D01* +X66233349Y-149471855D01* +X66423825Y-149519474D01* +X66519063Y-149567093D01* +X66566682Y-149614712D01* +X66614301Y-149709950D01* +X66614301Y-149805189D01* +X66566682Y-149900427D01* +X66519063Y-149948046D01* +X66423825Y-149995665D01* +X66233349Y-150043284D01* +X65995253Y-150043284D01* +X65804777Y-149995665D01* +X65709539Y-149948046D01* +X65661920Y-149900427D01* +X65614301Y-149805189D01* +X74305421Y-148638497D02* +X73829230Y-148971831D01* +X74305421Y-149209926D02* +X73305421Y-149209926D01* +X73305421Y-148828973D01* +X73353040Y-148733735D01* +X73400659Y-148686116D01* +X73495897Y-148638497D01* +X73638754Y-148638497D01* +X73733992Y-148686116D01* +X73781611Y-148733735D01* +X73829230Y-148828973D01* +X73829230Y-149209926D01* +X74305421Y-147686116D02* +X74305421Y-148257545D01* +X74305421Y-147971831D02* +X73305421Y-147971831D01* +X73448278Y-148067069D01* +X73543516Y-148162307D01* +X73591135Y-148257545D01* +X74305421Y-146733735D02* +X74305421Y-147305164D01* +X74305421Y-147019450D02* +X73305421Y-147019450D01* +X73448278Y-147114688D01* +X73543516Y-147209926D01* +X73591135Y-147305164D01* +X71714621Y-148425137D02* +X71238430Y-148758471D01* +X71714621Y-148996566D02* +X70714621Y-148996566D01* +X70714621Y-148615613D01* +X70762240Y-148520375D01* +X70809859Y-148472756D01* +X70905097Y-148425137D01* +X71047954Y-148425137D01* +X71143192Y-148472756D01* +X71190811Y-148520375D01* +X71238430Y-148615613D01* +X71238430Y-148996566D01* +X71714621Y-147472756D02* +X71714621Y-148044185D01* +X71714621Y-147758471D02* +X70714621Y-147758471D01* +X70857478Y-147853709D01* +X70952716Y-147948947D01* +X71000335Y-148044185D01* +X70809859Y-147091804D02* +X70762240Y-147044185D01* +X70714621Y-146948947D01* +X70714621Y-146710851D01* +X70762240Y-146615613D01* +X70809859Y-146567994D01* +X70905097Y-146520375D01* +X71000335Y-146520375D01* +X71143192Y-146567994D01* +X71714621Y-147139423D01* +X71714621Y-146520375D01* +X69215261Y-148333697D02* +X68739070Y-148667031D01* +X69215261Y-148905126D02* +X68215261Y-148905126D01* +X68215261Y-148524173D01* +X68262880Y-148428935D01* +X68310499Y-148381316D01* +X68405737Y-148333697D01* +X68548594Y-148333697D01* +X68643832Y-148381316D01* +X68691451Y-148428935D01* +X68739070Y-148524173D01* +X68739070Y-148905126D01* +X69215261Y-147381316D02* +X69215261Y-147952745D01* +X69215261Y-147667031D02* +X68215261Y-147667031D01* +X68358118Y-147762269D01* +X68453356Y-147857507D01* +X68500975Y-147952745D01* +X68215261Y-147047983D02* +X68215261Y-146428935D01* +X68596213Y-146762269D01* +X68596213Y-146619411D01* +X68643832Y-146524173D01* +X68691451Y-146476554D01* +X68786690Y-146428935D01* +X69024785Y-146428935D01* +X69120023Y-146476554D01* +X69167642Y-146524173D01* +X69215261Y-146619411D01* +X69215261Y-146905126D01* +X69167642Y-147000364D01* +X69120023Y-147047983D01* +X66573661Y-148247337D02* +X66097470Y-148580671D01* +X66573661Y-148818766D02* +X65573661Y-148818766D01* +X65573661Y-148437813D01* +X65621280Y-148342575D01* +X65668899Y-148294956D01* +X65764137Y-148247337D01* +X65906994Y-148247337D01* +X66002232Y-148294956D01* +X66049851Y-148342575D01* +X66097470Y-148437813D01* +X66097470Y-148818766D01* +X66573661Y-147294956D02* +X66573661Y-147866385D01* +X66573661Y-147580671D02* +X65573661Y-147580671D01* +X65716518Y-147675909D01* +X65811756Y-147771147D01* +X65859375Y-147866385D01* +X65906994Y-146437813D02* +X66573661Y-146437813D01* +X65526042Y-146675909D02* +X66240328Y-146914004D01* +X66240328Y-146294956D01* +X61521103Y-146497301D02* +X61187769Y-146021110D01* +X60949674Y-146497301D02* +X60949674Y-145497301D01* +X61330627Y-145497301D01* +X61425865Y-145544920D01* +X61473484Y-145592539D01* +X61521103Y-145687777D01* +X61521103Y-145830634D01* +X61473484Y-145925872D01* +X61425865Y-145973491D01* +X61330627Y-146021110D01* +X60949674Y-146021110D01* +X62473484Y-146497301D02* +X61902055Y-146497301D01* +X62187769Y-146497301D02* +X62187769Y-145497301D01* +X62092531Y-145640158D01* +X61997293Y-145735396D01* +X61902055Y-145783015D01* +X63378246Y-145497301D02* +X62902055Y-145497301D01* +X62854436Y-145973491D01* +X62902055Y-145925872D01* +X62997293Y-145878253D01* +X63235389Y-145878253D01* +X63330627Y-145925872D01* +X63378246Y-145973491D01* +X63425865Y-146068730D01* +X63425865Y-146306825D01* +X63378246Y-146402063D01* +X63330627Y-146449682D01* +X63235389Y-146497301D01* +X62997293Y-146497301D01* +X62902055Y-146449682D01* +X62854436Y-146402063D01* +X61378863Y-149098261D02* +X61045529Y-148622070D01* +X60807434Y-149098261D02* +X60807434Y-148098261D01* +X61188387Y-148098261D01* +X61283625Y-148145880D01* +X61331244Y-148193499D01* +X61378863Y-148288737D01* +X61378863Y-148431594D01* +X61331244Y-148526832D01* +X61283625Y-148574451D01* +X61188387Y-148622070D01* +X60807434Y-148622070D01* +X62331244Y-149098261D02* +X61759815Y-149098261D01* +X62045529Y-149098261D02* +X62045529Y-148098261D01* +X61950291Y-148241118D01* +X61855053Y-148336356D01* +X61759815Y-148383975D01* +X63188387Y-148098261D02* +X62997910Y-148098261D01* +X62902672Y-148145880D01* +X62855053Y-148193499D01* +X62759815Y-148336356D01* +X62712196Y-148526832D01* +X62712196Y-148907785D01* +X62759815Y-149003023D01* +X62807434Y-149050642D01* +X62902672Y-149098261D01* +X63093149Y-149098261D01* +X63188387Y-149050642D01* +X63236006Y-149003023D01* +X63283625Y-148907785D01* +X63283625Y-148669690D01* +X63236006Y-148574451D01* +X63188387Y-148526832D01* +X63093149Y-148479213D01* +X62902672Y-148479213D01* +X62807434Y-148526832D01* +X62759815Y-148574451D01* +X62712196Y-148669690D01* +X65854343Y-140238741D02* +X65521009Y-139762550D01* +X65282914Y-140238741D02* +X65282914Y-139238741D01* +X65663867Y-139238741D01* +X65759105Y-139286360D01* +X65806724Y-139333979D01* +X65854343Y-139429217D01* +X65854343Y-139572074D01* +X65806724Y-139667312D01* +X65759105Y-139714931D01* +X65663867Y-139762550D01* +X65282914Y-139762550D01* +X66806724Y-140238741D02* +X66235295Y-140238741D01* +X66521009Y-140238741D02* +X66521009Y-139238741D01* +X66425771Y-139381598D01* +X66330533Y-139476836D01* +X66235295Y-139524455D01* +X67140057Y-139238741D02* +X67806724Y-139238741D01* +X67378152Y-140238741D01* +X65854343Y-138308341D02* +X65521009Y-137832150D01* +X65282914Y-138308341D02* +X65282914Y-137308341D01* +X65663867Y-137308341D01* +X65759105Y-137355960D01* +X65806724Y-137403579D01* +X65854343Y-137498817D01* +X65854343Y-137641674D01* +X65806724Y-137736912D01* +X65759105Y-137784531D01* +X65663867Y-137832150D01* +X65282914Y-137832150D01* +X66806724Y-138308341D02* +X66235295Y-138308341D01* +X66521009Y-138308341D02* +X66521009Y-137308341D01* +X66425771Y-137451198D01* +X66330533Y-137546436D01* +X66235295Y-137594055D01* +X67378152Y-137736912D02* +X67282914Y-137689293D01* +X67235295Y-137641674D01* +X67187676Y-137546436D01* +X67187676Y-137498817D01* +X67235295Y-137403579D01* +X67282914Y-137355960D01* +X67378152Y-137308341D01* +X67568629Y-137308341D01* +X67663867Y-137355960D01* +X67711486Y-137403579D01* +X67759105Y-137498817D01* +X67759105Y-137546436D01* +X67711486Y-137641674D01* +X67663867Y-137689293D01* +X67568629Y-137736912D01* +X67378152Y-137736912D01* +X67282914Y-137784531D01* +X67235295Y-137832150D01* +X67187676Y-137927389D01* +X67187676Y-138117865D01* +X67235295Y-138213103D01* +X67282914Y-138260722D01* +X67378152Y-138308341D01* +X67568629Y-138308341D01* +X67663867Y-138260722D01* +X67711486Y-138213103D01* +X67759105Y-138117865D01* +X67759105Y-137927389D01* +X67711486Y-137832150D01* +X67663867Y-137784531D01* +X67568629Y-137736912D01* +X65955943Y-142489181D02* +X65622609Y-142012990D01* +X65384514Y-142489181D02* +X65384514Y-141489181D01* +X65765467Y-141489181D01* +X65860705Y-141536800D01* +X65908324Y-141584419D01* +X65955943Y-141679657D01* +X65955943Y-141822514D01* +X65908324Y-141917752D01* +X65860705Y-141965371D01* +X65765467Y-142012990D01* +X65384514Y-142012990D01* +X66908324Y-142489181D02* +X66336895Y-142489181D01* +X66622609Y-142489181D02* +X66622609Y-141489181D01* +X66527371Y-141632038D01* +X66432133Y-141727276D01* +X66336895Y-141774895D01* +X67384514Y-142489181D02* +X67574990Y-142489181D01* +X67670229Y-142441562D01* +X67717848Y-142393943D01* +X67813086Y-142251086D01* +X67860705Y-142060610D01* +X67860705Y-141679657D01* +X67813086Y-141584419D01* +X67765467Y-141536800D01* +X67670229Y-141489181D01* +X67479752Y-141489181D01* +X67384514Y-141536800D01* +X67336895Y-141584419D01* +X67289276Y-141679657D01* +X67289276Y-141917752D01* +X67336895Y-142012990D01* +X67384514Y-142060610D01* +X67479752Y-142108229D01* +X67670229Y-142108229D01* +X67765467Y-142060610D01* +X67813086Y-142012990D01* +X67860705Y-141917752D01* +X45594661Y-133553105D02* +X46404185Y-133553105D01* +X46499423Y-133505486D01* +X46547042Y-133457867D01* +X46594661Y-133362629D01* +X46594661Y-133172152D01* +X46547042Y-133076914D01* +X46499423Y-133029295D01* +X46404185Y-132981676D01* +X45594661Y-132981676D01* +X46594661Y-131981676D02* +X46594661Y-132553105D01* +X46594661Y-132267391D02* +X45594661Y-132267391D01* +X45737518Y-132362629D01* +X45832756Y-132457867D01* +X45880375Y-132553105D01* +X49875535Y-148845021D02* +X49875535Y-149654545D01* +X49923154Y-149749783D01* +X49970773Y-149797402D01* +X50066011Y-149845021D01* +X50256488Y-149845021D01* +X50351726Y-149797402D01* +X50399345Y-149749783D01* +X50446964Y-149654545D01* +X50446964Y-148845021D01* +X50875535Y-148940259D02* +X50923154Y-148892640D01* +X51018392Y-148845021D01* +X51256488Y-148845021D01* +X51351726Y-148892640D01* +X51399345Y-148940259D01* +X51446964Y-149035497D01* +X51446964Y-149130735D01* +X51399345Y-149273592D01* +X50827916Y-149845021D01* +X51446964Y-149845021D01* +D12* +X58235910Y-127316774D02* +X58235910Y-126554774D01* +X58387101Y-126554774D01* +X58477815Y-126591060D01* +X58538291Y-126663631D01* +X58568530Y-126736203D01* +X58598768Y-126881346D01* +X58598768Y-126990203D01* +X58568530Y-127135346D01* +X58538291Y-127207917D01* +X58477815Y-127280489D01* +X58387101Y-127316774D01* +X58235910Y-127316774D01* +X58870910Y-127316774D02* +X58870910Y-126554774D01* +X59082577Y-127099060D01* +X59294244Y-126554774D01* +X59294244Y-127316774D01* +X59596624Y-127316774D02* +X59596624Y-126554774D01* +X59959482Y-127316774D01* +X59959482Y-126554774D01* +X60534005Y-126554774D02* +X60413053Y-126554774D01* +X60352577Y-126591060D01* +X60322339Y-126627346D01* +X60261862Y-126736203D01* +X60231624Y-126881346D01* +X60231624Y-127171631D01* +X60261862Y-127244203D01* +X60292101Y-127280489D01* +X60352577Y-127316774D01* +X60473529Y-127316774D01* +X60534005Y-127280489D01* +X60564243Y-127244203D01* +X60594482Y-127171631D01* +X60594482Y-126990203D01* +X60564243Y-126917631D01* +X60534005Y-126881346D01* +X60473529Y-126845060D01* +X60352577Y-126845060D01* +X60292101Y-126881346D01* +X60261862Y-126917631D01* +X60231624Y-126990203D01* +X60806148Y-126554774D02* +X61199244Y-126554774D01* +X60987577Y-126845060D01* +X61078291Y-126845060D01* +X61138767Y-126881346D01* +X61169005Y-126917631D01* +X61199244Y-126990203D01* +X61199244Y-127171631D01* +X61169005Y-127244203D01* +X61138767Y-127280489D01* +X61078291Y-127316774D01* +X60896863Y-127316774D01* +X60836386Y-127280489D01* +X60806148Y-127244203D01* +X61471386Y-127316774D02* +X61471386Y-126554774D01* +X61622577Y-126554774D01* +X61713291Y-126591060D01* +X61773767Y-126663631D01* +X61804006Y-126736203D01* +X61834244Y-126881346D01* +X61834244Y-126990203D01* +X61804006Y-127135346D01* +X61773767Y-127207917D01* +X61713291Y-127280489D01* +X61622577Y-127316774D01* +X61471386Y-127316774D01* +X62197101Y-126881346D02* +X62136625Y-126845060D01* +X62106386Y-126808774D01* +X62076148Y-126736203D01* +X62076148Y-126699917D01* +X62106386Y-126627346D01* +X62136625Y-126591060D01* +X62197101Y-126554774D01* +X62318053Y-126554774D01* +X62378529Y-126591060D01* +X62408767Y-126627346D01* +X62439006Y-126699917D01* +X62439006Y-126736203D01* +X62408767Y-126808774D01* +X62378529Y-126845060D01* +X62318053Y-126881346D01* +X62197101Y-126881346D01* +X62136625Y-126917631D01* +X62106386Y-126953917D01* +X62076148Y-127026489D01* +X62076148Y-127171631D01* +X62106386Y-127244203D01* +X62136625Y-127280489D01* +X62197101Y-127316774D01* +X62318053Y-127316774D01* +X62378529Y-127280489D01* +X62408767Y-127244203D01* +X62439006Y-127171631D01* +X62439006Y-127026489D01* +X62408767Y-126953917D01* +X62378529Y-126917631D01* +X62318053Y-126881346D01* +X63013529Y-127316774D02* +X62711148Y-127316774D01* +X62711148Y-126554774D01* +X63225196Y-127316774D02* +X63225196Y-126554774D01* +X63376387Y-126554774D01* +X63467101Y-126591060D01* +X63527577Y-126663631D01* +X63557816Y-126736203D01* +X63588054Y-126881346D01* +X63588054Y-126990203D01* +X63557816Y-127135346D01* +X63527577Y-127207917D01* +X63467101Y-127280489D01* +X63376387Y-127316774D01* +X63225196Y-127316774D01* +X63799720Y-126554774D02* +X63950911Y-127316774D01* +X64071863Y-126772489D01* +X64192816Y-127316774D01* +X64344006Y-126554774D01* +D10* +X48958263Y-128738903D02* +X48910644Y-128786522D01* +X48767787Y-128834141D01* +X48672549Y-128834141D01* +X48529691Y-128786522D01* +X48434453Y-128691284D01* +X48386834Y-128596046D01* +X48339215Y-128405570D01* +X48339215Y-128262712D01* +X48386834Y-128072236D01* +X48434453Y-127976998D01* +X48529691Y-127881760D01* +X48672549Y-127834141D01* +X48767787Y-127834141D01* +X48910644Y-127881760D01* +X48958263Y-127929379D01* +X49910644Y-128834141D02* +X49339215Y-128834141D01* +X49624929Y-128834141D02* +X49624929Y-127834141D01* +X49529691Y-127976998D01* +X49434453Y-128072236D01* +X49339215Y-128119855D01* +X50243977Y-127834141D02* +X50863025Y-127834141D01* +X50529691Y-128215093D01* +X50672549Y-128215093D01* +X50767787Y-128262712D01* +X50815406Y-128310331D01* +X50863025Y-128405570D01* +X50863025Y-128643665D01* +X50815406Y-128738903D01* +X50767787Y-128786522D01* +X50672549Y-128834141D01* +X50386834Y-128834141D01* +X50291596Y-128786522D01* +X50243977Y-128738903D01* +X56242983Y-144679943D02* +X56195364Y-144727562D01* +X56052507Y-144775181D01* +X55957269Y-144775181D01* +X55814411Y-144727562D01* +X55719173Y-144632324D01* +X55671554Y-144537086D01* +X55623935Y-144346610D01* +X55623935Y-144203752D01* +X55671554Y-144013276D01* +X55719173Y-143918038D01* +X55814411Y-143822800D01* +X55957269Y-143775181D01* +X56052507Y-143775181D01* +X56195364Y-143822800D01* +X56242983Y-143870419D01* +X57195364Y-144775181D02* +X56623935Y-144775181D01* +X56909649Y-144775181D02* +X56909649Y-143775181D01* +X56814411Y-143918038D01* +X56719173Y-144013276D01* +X56623935Y-144060895D01* +X57814411Y-143775181D02* +X57909650Y-143775181D01* +X58004888Y-143822800D01* +X58052507Y-143870419D01* +X58100126Y-143965657D01* +X58147745Y-144156133D01* +X58147745Y-144394229D01* +X58100126Y-144584705D01* +X58052507Y-144679943D01* +X58004888Y-144727562D01* +X57909650Y-144775181D01* +X57814411Y-144775181D01* +X57719173Y-144727562D01* +X57671554Y-144679943D01* +X57623935Y-144584705D01* +X57576316Y-144394229D01* +X57576316Y-144156133D01* +X57623935Y-143965657D01* +X57671554Y-143870419D01* +X57719173Y-143822800D01* +X57814411Y-143775181D01* +M02* diff --git a/PCB/OUTPUT/Tinylab_proto1.drl b/PCB/OUTPUT/Tinylab_proto1.drl new file mode 100644 index 00000000..af50d9a7 --- /dev/null +++ b/PCB/OUTPUT/Tinylab_proto1.drl @@ -0,0 +1,121 @@ +M48 +;DRILL file {KiCad (2015-08-05 BZR 6055, Git fa29c62)-product} date 28/09/2015 1:01:46 PM +;FORMAT={2:4/ absolute / inch / keep zeros} +FMAT,2 +INCH,TZ +T1C0.016 +T2C0.020 +T3C0.022 +T4C0.032 +T5C0.039 +T6C0.040 +T7C0.050 +% +G90 +G05 +M72 +T1 +X016558Y-053370 +X016572Y-053735 +X017191Y-056870 +X017520Y-057912 +X017845Y-053361 +X017895Y-053816 +X017912Y-058768 +X017936Y-057400 +X017944Y-059480 +X018280Y-052824 +X018340Y-058854 +X019048Y-055976 +X019222Y-057006 +X019224Y-056616 +X019642Y-058884 +X019664Y-050680 +X019678Y-054890 +X019952Y-054352 +X020032Y-054912 +X020056Y-052472 +X020118Y-054076 +X020256Y-056784 +X020296Y-052104 +X020326Y-058905 +X020552Y-057944 +X020656Y-052704 +X020666Y-053800 +X020950Y-049946 +X021336Y-052368 +X021346Y-052698 +X021658Y-050376 +X021758Y-053774 +X021868Y-056772 +X021904Y-058248 +X021932Y-059390 +X021992Y-050644 +X022168Y-055530 +X022248Y-056704 +X022318Y-057564 +X022538Y-050640 +X022592Y-052624 +X022720Y-057550 +X022786Y-058992 +X022816Y-055528 +X023008Y-052256 +X023216Y-050628 +X023650Y-049984 +X023698Y-057954 +X023960Y-051264 +X024068Y-050572 +X024136Y-057052 +X024848Y-057608 +X024906Y-049964 +X024946Y-050760 +X025244Y-050112 +X025828Y-050622 +X026068Y-057894 +X027092Y-057916 +X028048Y-057970 +T4 +X027256Y-054581 +X027256Y-055581 +X027896Y-049448 +X027896Y-050448 +T5 +X025180Y-051929 +X029126Y-053071 +T6 +X014275Y-057520 +X014275Y-058520 +X014275Y-059520 +X014275Y-060520 +X017426Y-049248 +X018426Y-049248 +X019426Y-049248 +X021724Y-048708 +X021724Y-049708 +X022724Y-048708 +X022724Y-049708 +X023145Y-060635 +X024145Y-060635 +X024872Y-048256 +X025536Y-060752 +X025872Y-048256 +X026536Y-060752 +X027536Y-060752 +X028032Y-056892 +X028536Y-060752 +X029032Y-056892 +T7 +X025126Y-053071 +X029180Y-051929 +T2 +X014607Y-052126G85X014863Y-052126 +G05 +X014607Y-054882G85X014863Y-054882 +G05 +T3 +X015798Y-052460G85X015798Y-052578 +G05 +X015798Y-054429G85X015798Y-054547 +G05 +T0 +M30 diff --git a/PCB/OUTPUT_V2/OUTPUT.zip b/PCB/OUTPUT_V2/OUTPUT.zip new file mode 100644 index 0000000000000000000000000000000000000000..6aa0399cdf9d1aa0a7f9da69c57e9cc5da560410 GIT binary patch literal 23092 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 MELn)YTAkkg4{7yi7ytkO literal 0 HcmV?d00001 diff --git a/PCB/OUTPUT_V2/Tinylab_proto1-B_Cu.gbr b/PCB/OUTPUT_V2/Tinylab_proto1-B_Cu.gbr new file mode 100644 index 00000000..c5f3e596 --- /dev/null +++ b/PCB/OUTPUT_V2/Tinylab_proto1-B_Cu.gbr @@ -0,0 +1,305 @@ +G04 #@! TF.FileFunction,Copper,L2,Bot,Signal* +%FSLAX46Y46*% +G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* +G04 Created by KiCad (PCBNEW (2015-08-05 BZR 6055, Git fa29c62)-product) date 24/12/2015 2:00:31 PM* +%MOMM*% +G01* +G04 APERTURE LIST* +%ADD10C,0.100000*% +%ADD11C,1.300000*% +%ADD12R,1.300000X1.300000*% +%ADD13C,1.998980*% +%ADD14R,1.998980X1.998980*% +%ADD15R,2.032000X1.727200*% +%ADD16O,2.032000X1.727200*% +%ADD17O,1.250000X0.950000*% +%ADD18O,1.000000X1.550000*% +%ADD19R,1.727200X1.727200*% +%ADD20O,1.727200X1.727200*% +%ADD21R,2.032000X2.032000*% +%ADD22O,2.032000X2.032000*% +%ADD23C,0.600000*% +%ADD24C,1.016000*% +%ADD25C,0.250000*% +%ADD26C,0.508000*% +%ADD27C,0.254000*% +G04 APERTURE END LIST* +D10* +D11* +X76494000Y-136906000D03* +D12* +X78994000Y-136906000D03* +D11* +X93345000Y-141391000D03* +D12* +X93345000Y-143891000D03* +D11* +X116078000Y-146518000D03* +D12* +X116078000Y-144018000D03* +D13* +X92710000Y-135125460D03* +D14* +X82550000Y-135125460D03* +D13* +X82296000Y-137924540D03* +D14* +X92456000Y-137924540D03* +D15* +X94488000Y-159512000D03* +D16* +X94488000Y-156972000D03* +X94488000Y-154432000D03* +X94488000Y-151892000D03* +D17* +X117054900Y-139230540D03* +X112054900Y-139230540D03* +D18* +X118054900Y-136530540D03* +X111054900Y-136530540D03* +D15* +X76200000Y-149860000D03* +D16* +X76200000Y-147320000D03* +X76200000Y-144780000D03* +X76200000Y-142240000D03* +D19* +X105156000Y-135382000D03* +D20* +X107696000Y-135382000D03* +X105156000Y-137922000D03* +X107696000Y-137922000D03* +D15* +X100330000Y-140462000D03* +D16* +X100330000Y-137922000D03* +X100330000Y-135382000D03* +D15* +X76200000Y-152400000D03* +D16* +X76200000Y-154940000D03* +X76200000Y-157480000D03* +X76200000Y-160020000D03* +D19* +X86360000Y-143510000D03* +D20* +X83820000Y-143510000D03* +X86360000Y-140970000D03* +X83820000Y-140970000D03* +D21* +X116840000Y-157480000D03* +D22* +X116840000Y-160020000D03* +D23* +X85598000Y-155829000D03* +X96012000Y-140843000D03* +X111125000Y-141605000D03* +X115443000Y-140970000D03* +X103759000Y-144653000D03* +X103759000Y-146685000D03* +X112649000Y-155321000D03* +X112649000Y-153416000D03* +X114681000Y-135636000D03* +X90805000Y-142367000D03* +X102997000Y-142113000D03* +X100965000Y-142113000D03* +X83820000Y-156845000D03* +X89408000Y-137922000D03* +X85344000Y-135128000D03* +X99949000Y-143891000D03* +X101346000Y-157988000D03* +X99314000Y-161036000D03* +X86233000Y-159766000D03* +X98425000Y-139319000D03* +X99822000Y-147955000D03* +X106045000Y-140081000D03* +X105029000Y-143764000D03* +X103505000Y-149987000D03* +X107569000Y-139954000D03* +X106045000Y-143764000D03* +X105283000Y-149987000D03* +X97282000Y-156083000D03* +X87757000Y-152146000D03* +X91567000Y-153162000D03* +X97663000Y-158242000D03* +X91567000Y-157734000D03* +D24* +X100330000Y-140462000D02* +X103505000Y-140462000D01* +X103505000Y-140462000D02* +X104648000Y-141605000D01* +X104648000Y-141605000D02* +X111125000Y-141605000D01* +X111125000Y-141605000D02* +X114808000Y-141605000D01* +X114808000Y-141605000D02* +X115443000Y-140970000D01* +X85598000Y-152273000D02* +X85598000Y-155829000D01* +X87249000Y-150622000D02* +X85598000Y-152273000D01* +X90551000Y-150622000D02* +X87249000Y-150622000D01* +X95123000Y-146050000D02* +X90551000Y-150622000D01* +X95123000Y-141732000D02* +X95123000Y-146050000D01* +X96012000Y-140843000D02* +X95123000Y-141732000D01* +D25* +X112649000Y-141605000D02* +X111125000Y-141605000D01* +X115443000Y-140970000D02* +X114808000Y-141605000D01* +X114808000Y-141605000D02* +X112649000Y-141605000D01* +X111125000Y-141605000D02* +X104648000Y-141605000D01* +X104648000Y-141605000D02* +X103505000Y-140462000D01* +D24* +X103759000Y-144653000D02* +X103759000Y-146685000D01* +D26* +X112649000Y-153416000D02* +X112649000Y-155321000D01* +X115443000Y-139065000D02* +X115443000Y-139319000D01* +X116459000Y-143002000D02* +X116078000Y-143383000D01* +X116459000Y-140335000D02* +X116459000Y-143002000D01* +X115443000Y-139319000D02* +X116459000Y-140335000D01* +X116078000Y-143383000D02* +X116078000Y-144018000D01* +X115443000Y-139065000D02* +X115443000Y-136398000D01* +X115443000Y-136398000D02* +X114681000Y-135636000D01* +D25* +X116459000Y-140081000D02* +X116459000Y-143637000D01* +X114681000Y-135636000D02* +X115443000Y-136398000D01* +X115443000Y-139065000D02* +X116459000Y-140081000D01* +X116459000Y-143637000D02* +X116078000Y-144018000D01* +D24* +X83820000Y-146558000D02* +X86614000Y-146558000D01* +X86614000Y-146558000D02* +X90805000Y-142367000D01* +X83820000Y-156845000D02* +X83820000Y-146558000D01* +X83820000Y-146558000D02* +X83820000Y-143510000D01* +D25* +X100965000Y-142113000D02* +X102997000Y-142113000D01* +D24* +X100330000Y-137922000D02* +X96647000Y-137922000D01* +X96647000Y-137922000D02* +X94869000Y-139700000D01* +X94869000Y-139700000D02* +X90678000Y-139700000D01* +X90678000Y-139700000D02* +X90170000Y-139192000D01* +X90170000Y-139192000D02* +X90170000Y-138684000D01* +X90170000Y-138684000D02* +X89452564Y-137966564D01* +X89452564Y-137966564D02* +X89363436Y-137966564D01* +X89363436Y-137966564D02* +X89408000Y-137922000D01* +D27* +X90170000Y-138684000D02* +X89408000Y-137922000D01* +X90170000Y-139192000D02* +X90170000Y-138684000D01* +X90678000Y-139700000D02* +X90170000Y-139192000D01* +X94869000Y-139700000D02* +X90678000Y-139700000D01* +X96647000Y-137922000D02* +X94869000Y-139700000D01* +D24* +X86360000Y-143510000D02* +X87757000Y-143510000D01* +X87757000Y-143510000D02* +X88900000Y-142367000D01* +X88900000Y-142367000D02* +X88900000Y-139446000D01* +X88900000Y-139446000D02* +X85344000Y-135890000D01* +X85344000Y-135890000D02* +X85344000Y-135128000D01* +D27* +X88900000Y-142367000D02* +X87757000Y-143510000D01* +X88900000Y-138684000D02* +X88900000Y-142367000D01* +X85344000Y-135128000D02* +X88900000Y-138684000D01* +X99949000Y-143891000D02* +X101346000Y-145288000D01* +X101346000Y-145288000D02* +X101346000Y-157988000D01* +X98933000Y-161417000D02* +X99314000Y-161036000D01* +X86233000Y-161417000D02* +X98933000Y-161417000D01* +X85852000Y-161036000D02* +X86233000Y-161417000D01* +X85852000Y-160147000D02* +X85852000Y-161036000D01* +X86233000Y-159766000D02* +X85852000Y-160147000D01* +D25* +X98425000Y-146558000D02* +X98425000Y-139319000D01* +X99822000Y-147955000D02* +X98425000Y-146558000D01* +X106426000Y-136652000D02* +X107696000Y-135382000D01* +X106426000Y-139700000D02* +X106426000Y-136652000D01* +X106045000Y-140081000D02* +X106426000Y-139700000D01* +X105029000Y-148463000D02* +X105029000Y-143764000D01* +X103505000Y-149987000D02* +X105029000Y-148463000D01* +X107696000Y-139827000D02* +X107696000Y-137922000D01* +X107569000Y-139954000D02* +X107696000Y-139827000D01* +X106045000Y-149225000D02* +X106045000Y-143764000D01* +X105283000Y-149987000D02* +X106045000Y-149225000D01* +D27* +X97282000Y-155067000D02* +X97282000Y-156083000D01* +X95377000Y-153162000D02* +X97282000Y-155067000D01* +X92837000Y-153162000D02* +X95377000Y-153162000D01* +X91440000Y-151765000D02* +X92837000Y-153162000D01* +X88138000Y-151765000D02* +X91440000Y-151765000D01* +X87757000Y-152146000D02* +X88138000Y-151765000D01* +X91567000Y-157734000D02* +X91567000Y-153162000D01* +X91567000Y-157734000D02* +X92202000Y-157734000D01* +X92710000Y-158242000D02* +X97663000Y-158242000D01* +X92202000Y-157734000D02* +X92710000Y-158242000D01* +M02* diff --git a/PCB/OUTPUT_V2/Tinylab_proto1-B_Mask.gbr b/PCB/OUTPUT_V2/Tinylab_proto1-B_Mask.gbr new file mode 100644 index 00000000..0d3b6ab2 --- /dev/null +++ b/PCB/OUTPUT_V2/Tinylab_proto1-B_Mask.gbr @@ -0,0 +1,88 @@ +G04 #@! TF.FileFunction,Soldermask,Bot* +%FSLAX46Y46*% +G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* +G04 Created by KiCad (PCBNEW (2015-08-05 BZR 6055, Git fa29c62)-product) date 24/12/2015 2:00:31 PM* +%MOMM*% +G01* +G04 APERTURE LIST* +%ADD10C,0.100000*% +%ADD11C,1.300000*% +%ADD12R,1.300000X1.300000*% +%ADD13C,1.998980*% +%ADD14R,1.998980X1.998980*% +%ADD15R,2.032000X1.727200*% +%ADD16O,2.032000X1.727200*% +%ADD17O,1.250000X0.950000*% +%ADD18O,1.000000X1.550000*% +%ADD19R,1.727200X1.727200*% +%ADD20O,1.727200X1.727200*% +%ADD21R,2.032000X2.032000*% +%ADD22O,2.032000X2.032000*% +G04 APERTURE END LIST* +D10* +D11* +X76494000Y-136906000D03* +D12* +X78994000Y-136906000D03* +D11* +X93345000Y-141391000D03* +D12* +X93345000Y-143891000D03* +D11* +X116078000Y-146518000D03* +D12* +X116078000Y-144018000D03* +D13* +X92710000Y-135125460D03* +D14* +X82550000Y-135125460D03* +D13* +X82296000Y-137924540D03* +D14* +X92456000Y-137924540D03* +D15* +X94488000Y-159512000D03* +D16* +X94488000Y-156972000D03* +X94488000Y-154432000D03* +X94488000Y-151892000D03* +D17* +X117054900Y-139230540D03* +X112054900Y-139230540D03* +D18* +X118054900Y-136530540D03* +X111054900Y-136530540D03* +D15* +X76200000Y-149860000D03* +D16* +X76200000Y-147320000D03* +X76200000Y-144780000D03* +X76200000Y-142240000D03* +D19* +X105156000Y-135382000D03* +D20* +X107696000Y-135382000D03* +X105156000Y-137922000D03* +X107696000Y-137922000D03* +D15* +X100330000Y-140462000D03* +D16* +X100330000Y-137922000D03* +X100330000Y-135382000D03* +D15* +X76200000Y-152400000D03* +D16* +X76200000Y-154940000D03* +X76200000Y-157480000D03* +X76200000Y-160020000D03* +D19* +X86360000Y-143510000D03* +D20* +X83820000Y-143510000D03* +X86360000Y-140970000D03* +X83820000Y-140970000D03* +D21* +X116840000Y-157480000D03* +D22* +X116840000Y-160020000D03* +M02* diff --git a/PCB/OUTPUT_V2/Tinylab_proto1-B_SilkS.gbr b/PCB/OUTPUT_V2/Tinylab_proto1-B_SilkS.gbr new file mode 100644 index 00000000..95dc0d04 --- /dev/null +++ b/PCB/OUTPUT_V2/Tinylab_proto1-B_SilkS.gbr @@ -0,0 +1,11 @@ +G04 #@! TF.FileFunction,Legend,Bot* +%FSLAX46Y46*% +G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* +G04 Created by KiCad (PCBNEW (2015-08-05 BZR 6055, Git fa29c62)-product) date 24/12/2015 2:00:31 PM* +%MOMM*% +G01* +G04 APERTURE LIST* +%ADD10C,0.100000*% +G04 APERTURE END LIST* +D10* +M02* diff --git a/PCB/OUTPUT_V2/Tinylab_proto1-Edge_Cuts.gbr b/PCB/OUTPUT_V2/Tinylab_proto1-Edge_Cuts.gbr new file mode 100644 index 00000000..e027d1e1 --- /dev/null +++ b/PCB/OUTPUT_V2/Tinylab_proto1-Edge_Cuts.gbr @@ -0,0 +1,21 @@ +G04 #@! TF.FileFunction,Profile,NP* +%FSLAX46Y46*% +G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* +G04 Created by KiCad (PCBNEW (2015-08-05 BZR 6055, Git fa29c62)-product) date 24/12/2015 2:00:31 PM* +%MOMM*% +G01* +G04 APERTURE LIST* +%ADD10C,0.100000*% +G04 APERTURE END LIST* +D10* +X119126000Y-133604000D02* +X119126000Y-162560000D01* +X74295000Y-162560000D02* +X74295000Y-161417000D01* +X119126000Y-162560000D02* +X74295000Y-162560000D01* +X74295000Y-133604000D02* +X74295000Y-162306000D01* +X119126000Y-133604000D02* +X74295000Y-133604000D01* +M02* diff --git a/PCB/OUTPUT_V2/Tinylab_proto1-F_Cu.gbr b/PCB/OUTPUT_V2/Tinylab_proto1-F_Cu.gbr new file mode 100644 index 00000000..a7827f1b --- /dev/null +++ b/PCB/OUTPUT_V2/Tinylab_proto1-F_Cu.gbr @@ -0,0 +1,1180 @@ +G04 #@! TF.FileFunction,Copper,L1,Top,Signal* +%FSLAX46Y46*% +G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* +G04 Created by KiCad (PCBNEW (2015-08-05 BZR 6055, Git fa29c62)-product) date 24/12/2015 2:00:31 PM* +%MOMM*% +G01* +G04 APERTURE LIST* +%ADD10C,0.100000*% +%ADD11R,0.800000X0.750000*% +%ADD12R,0.750000X0.800000*% +%ADD13C,1.300000*% +%ADD14R,1.300000X1.300000*% +%ADD15C,1.998980*% +%ADD16R,1.998980X1.998980*% +%ADD17R,1.000000X1.600000*% +%ADD18R,0.560000X1.600000*% +%ADD19R,1.600000X0.560000*% +%ADD20R,2.032000X1.727200*% +%ADD21O,2.032000X1.727200*% +%ADD22R,0.400000X1.350000*% +%ADD23O,1.250000X0.950000*% +%ADD24O,1.000000X1.550000*% +%ADD25R,1.727200X1.727200*% +%ADD26O,1.727200X1.727200*% +%ADD27R,2.032000X2.032000*% +%ADD28O,2.032000X2.032000*% +%ADD29R,0.900000X0.600000*% +%ADD30R,0.500000X0.900000*% +%ADD31R,0.900000X0.500000*% +%ADD32R,0.600000X0.900000*% +%ADD33R,1.500000X0.600000*% +%ADD34R,0.304800X0.508000*% +%ADD35C,0.600000*% +%ADD36C,0.254000*% +%ADD37C,1.016000*% +%ADD38C,0.250000*% +%ADD39C,0.508000*% +G04 APERTURE END LIST* +D10* +D11* +X90436000Y-156591000D03* +X91936000Y-156591000D03* +D12* +X91948000Y-160516000D03* +X91948000Y-159016000D03* +D11* +X111137000Y-142621000D03* +X112637000Y-142621000D03* +X112256000Y-147193000D03* +X110756000Y-147193000D03* +D12* +X91821000Y-151753000D03* +X91821000Y-150253000D03* +D13* +X76494000Y-136906000D03* +D14* +X78994000Y-136906000D03* +D12* +X78740000Y-155182000D03* +X78740000Y-153682000D03* +X81280000Y-142760000D03* +X81280000Y-144260000D03* +X97536000Y-140601000D03* +X97536000Y-142101000D03* +X97790000Y-153785000D03* +X97790000Y-152285000D03* +D13* +X93345000Y-141391000D03* +D14* +X93345000Y-143891000D03* +D12* +X88900000Y-143879000D03* +X88900000Y-142379000D03* +X114427000Y-151777000D03* +X114427000Y-153277000D03* +X78740000Y-160516000D03* +X78740000Y-159016000D03* +D13* +X116078000Y-146518000D03* +D14* +X116078000Y-144018000D03* +D15* +X92710000Y-135125460D03* +D16* +X82550000Y-135125460D03* +D17* +X107291000Y-142113000D03* +X104291000Y-142113000D03* +D18* +X101410000Y-159901000D03* +X102210000Y-159901000D03* +X103010000Y-159901000D03* +X103810000Y-159901000D03* +X104610000Y-159901000D03* +X105410000Y-159901000D03* +X106210000Y-159901000D03* +X107010000Y-159901000D03* +X107810000Y-159901000D03* +X108610000Y-159901000D03* +X109410000Y-159901000D03* +D19* +X111260000Y-158051000D03* +X111260000Y-157251000D03* +X111260000Y-156451000D03* +X111260000Y-155651000D03* +X111260000Y-154851000D03* +X111260000Y-154051000D03* +X111260000Y-153251000D03* +X111260000Y-152451000D03* +X111260000Y-151651000D03* +X111260000Y-150851000D03* +X111260000Y-150051000D03* +D18* +X109410000Y-148201000D03* +X108610000Y-148201000D03* +X107810000Y-148201000D03* +X107010000Y-148201000D03* +X106210000Y-148201000D03* +X105410000Y-148201000D03* +X104610000Y-148201000D03* +X103810000Y-148201000D03* +X103010000Y-148201000D03* +X102210000Y-148201000D03* +X101410000Y-148201000D03* +D19* +X99560000Y-150051000D03* +X99560000Y-150851000D03* +X99560000Y-151651000D03* +X99560000Y-152451000D03* +X99560000Y-153251000D03* +X99560000Y-154051000D03* +X99560000Y-154851000D03* +X99560000Y-155651000D03* +X99560000Y-156451000D03* +X99560000Y-157251000D03* +X99560000Y-158051000D03* +D15* +X82296000Y-137924540D03* +D16* +X92456000Y-137924540D03* +D20* +X94488000Y-159512000D03* +D21* +X94488000Y-156972000D03* +X94488000Y-154432000D03* +X94488000Y-151892000D03* +D22* +X115854900Y-139230540D03* +X115204900Y-139230540D03* +X114554900Y-139230540D03* +X113904900Y-139230540D03* +X113254900Y-139230540D03* +D23* +X117054900Y-139230540D03* +X112054900Y-139230540D03* +D24* +X118054900Y-136530540D03* +X111054900Y-136530540D03* +D20* +X76200000Y-149860000D03* +D21* +X76200000Y-147320000D03* +X76200000Y-144780000D03* +X76200000Y-142240000D03* +D25* +X105156000Y-135382000D03* +D26* +X107696000Y-135382000D03* +X105156000Y-137922000D03* +X107696000Y-137922000D03* +D20* +X100330000Y-140462000D03* +D21* +X100330000Y-137922000D03* +X100330000Y-135382000D03* +D20* +X76200000Y-152400000D03* +D21* +X76200000Y-154940000D03* +X76200000Y-157480000D03* +X76200000Y-160020000D03* +D25* +X86360000Y-143510000D03* +D26* +X83820000Y-143510000D03* +X86360000Y-140970000D03* +X83820000Y-140970000D03* +D27* +X116840000Y-157480000D03* +D28* +X116840000Y-160020000D03* +D29* +X94485000Y-137922000D03* +X97285000Y-136972000D03* +X97285000Y-138872000D03* +D30* +X89166000Y-155067000D03* +X90666000Y-155067000D03* +X89166000Y-160528000D03* +X90666000Y-160528000D03* +X89166000Y-153416000D03* +X90666000Y-153416000D03* +X90666000Y-158877000D03* +X89166000Y-158877000D03* +X90539000Y-151765000D03* +X89039000Y-151765000D03* +X90539000Y-150114000D03* +X89039000Y-150114000D03* +X80506000Y-146050000D03* +X79006000Y-146050000D03* +X80506000Y-147701000D03* +X79006000Y-147701000D03* +X80506000Y-149352000D03* +X79006000Y-149352000D03* +X83046000Y-151003000D03* +X81546000Y-151003000D03* +X83173000Y-146050000D03* +X81673000Y-146050000D03* +X83173000Y-147701000D03* +X81673000Y-147701000D03* +X83173000Y-149352000D03* +X81673000Y-149352000D03* +D31* +X84455000Y-149491000D03* +X84455000Y-150991000D03* +X80391000Y-153555000D03* +X80391000Y-155055000D03* +D30* +X78498000Y-152146000D03* +X79998000Y-152146000D03* +D31* +X80391000Y-158889000D03* +X80391000Y-160389000D03* +D30* +X78498000Y-157480000D03* +X79998000Y-157480000D03* +X97421000Y-143891000D03* +X98921000Y-143891000D03* +X100850000Y-143891000D03* +X102350000Y-143891000D03* +D32* +X109982000Y-142999000D03* +X110932000Y-145799000D03* +X109032000Y-145799000D03* +D33* +X87663000Y-160782000D03* +X87663000Y-159512000D03* +X87663000Y-158242000D03* +X87663000Y-156972000D03* +X87663000Y-155702000D03* +X87663000Y-154432000D03* +X87663000Y-153162000D03* +X82263000Y-153162000D03* +X82263000Y-154432000D03* +X82263000Y-155702000D03* +X82263000Y-156972000D03* +X82263000Y-158242000D03* +X82263000Y-159512000D03* +X82263000Y-160782000D03* +D34* +X113030000Y-160147000D03* +X114300000Y-160147000D03* +X113030000Y-158115000D03* +X113665000Y-160147000D03* +X114300000Y-158115000D03* +X113665000Y-158115000D03* +D35* +X85598000Y-155829000D03* +X96012000Y-140843000D03* +X111125000Y-141605000D03* +X115443000Y-140970000D03* +X103759000Y-144653000D03* +X103759000Y-146685000D03* +X112649000Y-155321000D03* +X112649000Y-153416000D03* +X114681000Y-135636000D03* +X90805000Y-142367000D03* +X102997000Y-142113000D03* +X100965000Y-142113000D03* +X83820000Y-156845000D03* +X89408000Y-137922000D03* +X85344000Y-135128000D03* +X99949000Y-143891000D03* +X101346000Y-157988000D03* +X99314000Y-161036000D03* +X86233000Y-159766000D03* +X98425000Y-139319000D03* +X99822000Y-147955000D03* +X106045000Y-140081000D03* +X105029000Y-143764000D03* +X103505000Y-149987000D03* +X107569000Y-139954000D03* +X106045000Y-143764000D03* +X105283000Y-149987000D03* +X97282000Y-156083000D03* +X87757000Y-152146000D03* +X91567000Y-153162000D03* +X97663000Y-158242000D03* +X91567000Y-157734000D03* +D36* +X90666000Y-155067000D02* +X92583000Y-155067000D01* +X93091000Y-153543000D02* +X94488000Y-152146000D01* +X93091000Y-154559000D02* +X93091000Y-153543000D01* +X92583000Y-155067000D02* +X93091000Y-154559000D01* +X94488000Y-152146000D02* +X94488000Y-151892000D01* +X90666000Y-155067000D02* +X90805000Y-155067000D01* +X94488000Y-151892000D02* +X94488000Y-152019000D01* +X90436000Y-156591000D02* +X90436000Y-155297000D01* +X90436000Y-155297000D02* +X90666000Y-155067000D01* +X91936000Y-156591000D02* +X92329000Y-156591000D01* +X92329000Y-156591000D02* +X94488000Y-154432000D01* +X90666000Y-160528000D02* +X91936000Y-160528000D01* +X91936000Y-160528000D02* +X91948000Y-160516000D01* +X91948000Y-160516000D02* +X93484000Y-160516000D01* +X93484000Y-160516000D02* +X94488000Y-159512000D01* +X93726000Y-156972000D02* +X94488000Y-156972000D01* +X92964000Y-157734000D02* +X93726000Y-156972000D01* +X92964000Y-158369000D02* +X92964000Y-157734000D01* +X92317000Y-159016000D02* +X92964000Y-158369000D01* +X91948000Y-159016000D02* +X92317000Y-159016000D01* +D37* +X109982000Y-142999000D02* +X110759000Y-142999000D01* +X110759000Y-142999000D02* +X111137000Y-142621000D01* +X111137000Y-142621000D02* +X111137000Y-141815002D01* +X111125000Y-141803002D02* +X111137000Y-141803002D01* +X111137000Y-141815002D02* +X111125000Y-141803002D01* +X97536000Y-140601000D02* +X100191000Y-140601000D01* +X100191000Y-140601000D02* +X100330000Y-140462000D01* +X97536000Y-140601000D02* +X96254000Y-140601000D01* +X86106000Y-156972000D02* +X87663000Y-156972000D01* +X86106000Y-156337000D02* +X86106000Y-156972000D01* +X85598000Y-155829000D02* +X86106000Y-156337000D01* +X96254000Y-140601000D02* +X96012000Y-140843000D01* +D38* +X111137000Y-141803002D02* +X111137000Y-141617000D01* +X111137000Y-141617000D02* +X111125000Y-141605000D01* +X110759000Y-142999000D02* +X111137000Y-142621000D01* +X115854900Y-139230540D02* +X115854900Y-140558100D01* +X115854900Y-140558100D02* +X115443000Y-140970000D01* +X100191000Y-140601000D02* +X100330000Y-140462000D01* +D39* +X107291000Y-142113000D02* +X107569000Y-142113000D01* +X107569000Y-142113000D02* +X109220000Y-140462000D01* +X109220000Y-140462000D02* +X109220000Y-139230540D01* +X102350000Y-143891000D02* +X102350000Y-143498000D01* +X102350000Y-143498000D02* +X101981000Y-143129000D01* +X102108000Y-139827000D02* +X102108000Y-139954000D01* +X101981000Y-139954000D02* +X102108000Y-139827000D01* +X101981000Y-143129000D02* +X101981000Y-139954000D01* +D37* +X105156000Y-137922000D02* +X104140000Y-137922000D01* +X104140000Y-137922000D02* +X102108000Y-139954000D01* +X102108000Y-139954000D02* +X102350000Y-139712000D01* +X102350000Y-143891000D02* +X103070002Y-143891000D01* +X103759000Y-144579998D02* +X103759000Y-144653000D01* +X103070002Y-143891000D02* +X103759000Y-144579998D01* +D39* +X111260000Y-156451000D02* +X112382000Y-156451000D01* +X112382000Y-156451000D02* +X112649000Y-156184000D01* +X112649000Y-156184000D02* +X112649000Y-155321000D01* +X111260000Y-153251000D02* +X112484000Y-153251000D01* +X112484000Y-153251000D02* +X112649000Y-153416000D01* +X111260000Y-153251000D02* +X114401000Y-153251000D01* +X114401000Y-153251000D02* +X114427000Y-153277000D01* +X114427000Y-153277000D02* +X114566000Y-153277000D01* +X114566000Y-153277000D02* +X116078000Y-151765000D01* +X116078000Y-151765000D02* +X116078000Y-146518000D01* +X116078000Y-146518000D02* +X116499000Y-146518000D01* +X116499000Y-146518000D02* +X117221000Y-145796000D01* +X117221000Y-145796000D02* +X117221000Y-140667200D01* +X112637000Y-142621000D02* +X114935000Y-142621000D01* +X114935000Y-142621000D02* +X117054900Y-140501100D01* +X117054900Y-140501100D02* +X117054900Y-139230540D01* +X109032000Y-145799000D02* +X109032000Y-145476000D01* +X109032000Y-145476000D02* +X110236000Y-144272000D01* +X110236000Y-144272000D02* +X111887000Y-144272000D01* +X111887000Y-144272000D02* +X112637000Y-143522000D01* +X112637000Y-143522000D02* +X112637000Y-142621000D01* +X110756000Y-147193000D02* +X110426000Y-147193000D01* +X110426000Y-147193000D02* +X109032000Y-145799000D01* +D38* +X109032000Y-145476000D02* +X110236000Y-144272000D01* +X112637000Y-143522000D02* +X112637000Y-142621000D01* +X111887000Y-144272000D02* +X112637000Y-143522000D01* +X110236000Y-144272000D02* +X111887000Y-144272000D01* +X116078000Y-146518000D02* +X116078000Y-151765000D01* +X116078000Y-151765000D02* +X114566000Y-153277000D01* +X116499000Y-146518000D02* +X117221000Y-145796000D01* +X117221000Y-145796000D02* +X117221000Y-140667200D01* +X117221000Y-140667200D02* +X117054900Y-140501100D01* +X110426000Y-147193000D02* +X109032000Y-145799000D01* +X117054900Y-140501100D02* +X117054900Y-139230540D01* +X114935000Y-142621000D02* +X117054900Y-140501100D01* +X91821000Y-150253000D02* +X92952000Y-150253000D01* +X97167000Y-152285000D02* +X97790000Y-152285000D01* +X96901000Y-152019000D02* +X97167000Y-152285000D01* +X96901000Y-150749000D02* +X96901000Y-152019000D01* +X95885000Y-149733000D02* +X96901000Y-150749000D01* +X93472000Y-149733000D02* +X95885000Y-149733000D01* +X92952000Y-150253000D02* +X93472000Y-149733000D01* +X99560000Y-153251000D02* +X98756000Y-153251000D01* +X98756000Y-153251000D02* +X97790000Y-152285000D01* +X114427000Y-153277000D02* +X112788000Y-153277000D01* +X112788000Y-153277000D02* +X112649000Y-153416000D01* +X107569000Y-142113000D02* +X109220000Y-140462000D01* +X109220000Y-140462000D02* +X109220000Y-139230540D01* +X111054900Y-136530540D02* +X118054900Y-136530540D01* +X113254900Y-139230540D02* +X112054900Y-139230540D01* +X112054900Y-139230540D02* +X109220000Y-139230540D01* +X109220000Y-139230540D02* +X105448540Y-139230540D01* +X105156000Y-138938000D02* +X105156000Y-137922000D01* +X105448540Y-139230540D02* +X105156000Y-138938000D01* +X112054900Y-139230540D02* +X111671540Y-139230540D01* +X111671540Y-139230540D02* +X111054900Y-138613900D01* +X111054900Y-138613900D02* +X111054900Y-136530540D01* +X117054900Y-139230540D02* +X117182460Y-139230540D01* +X117182460Y-139230540D02* +X118054900Y-138358100D01* +X118054900Y-138358100D02* +X118054900Y-136530540D01* +X103810000Y-146736000D02* +X103810000Y-148201000D01* +X103759000Y-146685000D02* +X103810000Y-146736000D01* +X104140000Y-137922000D02* +X102350000Y-139712000D01* +X102350000Y-139712000D02* +X102350000Y-143891000D01* +X112522000Y-156464000D02* +X112522000Y-156591000D01* +X112649000Y-155321000D02* +X112649000Y-156337000D01* +X112649000Y-156337000D02* +X112522000Y-156464000D01* +X112484000Y-153251000D02* +X112649000Y-153416000D01* +X113030000Y-159004000D02* +X112903000Y-159004000D01* +X112522000Y-156591000D02* +X112382000Y-156451000D01* +X112522000Y-158623000D02* +X112522000Y-156591000D01* +X112903000Y-159004000D02* +X112522000Y-158623000D01* +X113030000Y-160147000D02* +X113030000Y-159004000D01* +X114300000Y-158623000D02* +X114300000Y-158115000D01* +X114173000Y-158750000D02* +X114300000Y-158623000D01* +X113284000Y-158750000D02* +X114173000Y-158750000D01* +X113030000Y-159004000D02* +X113284000Y-158750000D01* +D36* +X91821000Y-150253000D02* +X90678000Y-150253000D01* +X90678000Y-150253000D02* +X90539000Y-150114000D01* +D39* +X113030000Y-133985000D02* +X114681000Y-135636000D01* +X105156000Y-135382000D02* +X105156000Y-135255000D01* +X105156000Y-135255000D02* +X106426000Y-133985000D01* +X106426000Y-133985000D02* +X113030000Y-133985000D01* +D37* +X100330000Y-135382000D02* +X105156000Y-135382000D01* +D39* +X110932000Y-145799000D02* +X110932000Y-145869000D01* +X110932000Y-145869000D02* +X112256000Y-147193000D01* +X116078000Y-144018000D02* +X114808000Y-144018000D01* +X114808000Y-144018000D02* +X113027000Y-145799000D01* +X113027000Y-145799000D02* +X110932000Y-145799000D01* +X114427000Y-151777000D02* +X114427000Y-146177000D01* +X114427000Y-146177000D02* +X116078000Y-144526000D01* +X116078000Y-144526000D02* +X116078000Y-144018000D01* +X111260000Y-152451000D02* +X112598000Y-152451000D01* +X112598000Y-152451000D02* +X113272000Y-151777000D01* +X113272000Y-151777000D02* +X114427000Y-151777000D01* +D38* +X105156000Y-135255000D02* +X106426000Y-133985000D01* +X106426000Y-133985000D02* +X113030000Y-133985000D01* +X116078000Y-144018000D02* +X116078000Y-144526000D01* +X116078000Y-144526000D02* +X114427000Y-146177000D01* +X110932000Y-145799000D02* +X113027000Y-145799000D01* +X113027000Y-145799000D02* +X114808000Y-144018000D01* +X110932000Y-145869000D02* +X112256000Y-147193000D01* +X97790000Y-153785000D02* +X97397000Y-153785000D01* +X92341000Y-151753000D02* +X91821000Y-151753000D01* +X93726000Y-150368000D02* +X92341000Y-151753000D01* +X95377000Y-150368000D02* +X93726000Y-150368000D01* +X96266000Y-151257000D02* +X95377000Y-150368000D01* +X96266000Y-152654000D02* +X96266000Y-151257000D01* +X97397000Y-153785000D02* +X96266000Y-152654000D01* +X97790000Y-153785000D02* +X98159000Y-153785000D01* +X98159000Y-153785000D02* +X98425000Y-154051000D01* +X98425000Y-154051000D02* +X99560000Y-154051000D01* +X114427000Y-151777000D02* +X113272000Y-151777000D01* +X113272000Y-151777000D02* +X112598000Y-152451000D01* +D36* +X91821000Y-151753000D02* +X90551000Y-151753000D01* +X90551000Y-151753000D02* +X90539000Y-151765000D01* +D37* +X81280000Y-144260000D02* +X83070000Y-144260000D01* +X83070000Y-144260000D02* +X83820000Y-143510000D01* +X76494000Y-136906000D02* +X76494000Y-137581000D01* +X76494000Y-137581000D02* +X78994000Y-140081000D01* +X80506000Y-144260000D02* +X81280000Y-144260000D01* +X78994000Y-142748000D02* +X80506000Y-144260000D01* +X78994000Y-140081000D02* +X78994000Y-142748000D01* +X90805000Y-142367000D02* +X90805000Y-142379000D01* +X90805000Y-142379000D02* +X90805000Y-142367000D01* +X90805000Y-142367000D02* +X90805000Y-142379000D01* +X82263000Y-156972000D02* +X83693000Y-156972000D01* +X83693000Y-156972000D02* +X83820000Y-156845000D01* +X93345000Y-141391000D02* +X94020000Y-141391000D01* +X94020000Y-141391000D02* +X94730000Y-142101000D01* +X94730000Y-142101000D02* +X97536000Y-142101000D01* +X93345000Y-141391000D02* +X95758000Y-138978000D01* +X95758000Y-138978000D02* +X95758000Y-137922000D01* +X95758000Y-137922000D02* +X96708000Y-136972000D01* +X96708000Y-136972000D02* +X97285000Y-136972000D01* +X88900000Y-142379000D02* +X90805000Y-142379000D01* +X90805000Y-142379000D02* +X92357000Y-142379000D01* +X92357000Y-142379000D02* +X93345000Y-141391000D01* +X86360000Y-140970000D02* +X87884000Y-140970000D01* +X87884000Y-140970000D02* +X88900000Y-141986000D01* +X88900000Y-141986000D02* +X88900000Y-142379000D01* +X83820000Y-140970000D02* +X83820000Y-143510000D01* +X86360000Y-140970000D02* +X83820000Y-140970000D01* +D38* +X97536000Y-142101000D02* +X100953000Y-142101000D01* +X102997000Y-142113000D02* +X104291000Y-142113000D01* +X100953000Y-142101000D02* +X100965000Y-142113000D01* +X97536000Y-142101000D02* +X94730000Y-142101000D01* +X94730000Y-142101000D02* +X94020000Y-141391000D01* +D36* +X83693000Y-156972000D02* +X83820000Y-156845000D01* +X97285000Y-136972000D02* +X96708000Y-136972000D01* +X95758000Y-137922000D02* +X95758000Y-138978000D01* +X96708000Y-136972000D02* +X95758000Y-137922000D01* +X92357000Y-142379000D02* +X93345000Y-141391000D01* +X81280000Y-144260000D02* +X79998000Y-144260000D01* +X78486000Y-139573000D02* +X76494000Y-137581000D01* +X78486000Y-142748000D02* +X78486000Y-139573000D01* +X79998000Y-144260000D02* +X78486000Y-142748000D01* +X88900000Y-142379000D02* +X88900000Y-141986000D01* +X88900000Y-141986000D02* +X87884000Y-140970000D01* +X83070000Y-144260000D02* +X83820000Y-143510000D01* +D37* +X82296000Y-137924540D02* +X81280000Y-138940540D01* +X81280000Y-138940540D02* +X81280000Y-142760000D01* +X82296000Y-137924540D02* +X80774540Y-137924540D01* +X80774540Y-137924540D02* +X79756000Y-136906000D01* +X79756000Y-136906000D02* +X78994000Y-136906000D01* +X89408000Y-137922000D02* +X82298540Y-137922000D01* +X82298540Y-137922000D02* +X82296000Y-137924540D01* +D36* +X89405460Y-137924540D02* +X82296000Y-137924540D01* +X89408000Y-137922000D02* +X89405460Y-137924540D01* +X78994000Y-136906000D02* +X79756000Y-136906000D01* +X79756000Y-136906000D02* +X80774540Y-137924540D01* +X81280000Y-142760000D02* +X81280000Y-138940540D01* +X78740000Y-155182000D02* +X76442000Y-155182000D01* +X76442000Y-155182000D02* +X76200000Y-154940000D01* +X78498000Y-152146000D02* +X76454000Y-152146000D01* +X76454000Y-152146000D02* +X76200000Y-152400000D01* +X78740000Y-153682000D02* +X78740000Y-153289000D01* +X78740000Y-153289000D02* +X78498000Y-153047000D01* +X78498000Y-153047000D02* +X78498000Y-152146000D01* +D37* +X93345000Y-143891000D02* +X97421000Y-143891000D01* +X88900000Y-143879000D02* +X93333000Y-143879000D01* +X93333000Y-143879000D02* +X93345000Y-143891000D01* +X88900000Y-143879000D02* +X86729000Y-143879000D01* +X86729000Y-143879000D02* +X86360000Y-143510000D01* +X82550000Y-135125460D02* +X85341460Y-135125460D01* +X85341460Y-135125460D02* +X85344000Y-135128000D01* +D36* +X93333000Y-143879000D02* +X93345000Y-143891000D01* +X85341460Y-135125460D02* +X85344000Y-135128000D01* +X86360000Y-143510000D02* +X86741000Y-143510000D01* +X86741000Y-143510000D02* +X87110000Y-143879000D01* +X87110000Y-143879000D02* +X88900000Y-143879000D01* +X78740000Y-160516000D02* +X76696000Y-160516000D01* +X76696000Y-160516000D02* +X76200000Y-160020000D01* +X78498000Y-157480000D02* +X78498000Y-158774000D01* +X78498000Y-158774000D02* +X78740000Y-159016000D01* +X78498000Y-157480000D02* +X76200000Y-157480000D01* +D37* +X94485000Y-137922000D02* +X92458540Y-137922000D01* +X92458540Y-137922000D02* +X92456000Y-137924540D01* +D39* +X92458540Y-137922000D02* +X92456000Y-137924540D01* +D37* +X92456000Y-137924540D02* +X92456000Y-135379460D01* +X92456000Y-135379460D02* +X92710000Y-135125460D01* +D36* +X92458540Y-137922000D02* +X92456000Y-137924540D01* +X92456000Y-135379460D02* +X92710000Y-135125460D01* +D37* +X98921000Y-143891000D02* +X100850000Y-143891000D01* +D36* +X101410000Y-158052000D02* +X101410000Y-159901000D01* +X101346000Y-157988000D02* +X101410000Y-158052000D01* +X100850000Y-143891000D02* +X99949000Y-143891000D01* +X98921000Y-143891000D02* +X99949000Y-143891000D01* +X102210000Y-159901000D02* +X102210000Y-155473000D01* +X101600000Y-154863000D02* +X99572000Y-154863000D01* +X102210000Y-155473000D02* +X101600000Y-154863000D01* +X99572000Y-154863000D02* +X99560000Y-154851000D01* +X87663000Y-159512000D02* +X86487000Y-159512000D01* +X102210000Y-160934000D02* +X102210000Y-159901000D01* +X101927002Y-161216998D02* +X102210000Y-160934000D01* +X100383998Y-161216998D02* +X101927002Y-161216998D01* +X100203000Y-161036000D02* +X100383998Y-161216998D01* +X99314000Y-161036000D02* +X100203000Y-161036000D01* +X86487000Y-159512000D02* +X86233000Y-159766000D01* +X87663000Y-159512000D02* +X87663000Y-160782000D01* +X82263000Y-155702000D02* +X84201000Y-155702000D01* +X105410000Y-161036000D02* +X105410000Y-159901000D01* +X104721002Y-161724998D02* +X105410000Y-161036000D01* +X86032998Y-161724998D02* +X104721002Y-161724998D01* +X85090000Y-160782000D02* +X86032998Y-161724998D01* +X85090000Y-156591000D02* +X85090000Y-160782000D01* +X84201000Y-155702000D02* +X85090000Y-156591000D01* +X82263000Y-158242000D02* +X83185000Y-158242000D01* +X106210000Y-161125000D02* +X106210000Y-159901000D01* +X105156000Y-162179000D02* +X106210000Y-161125000D01* +X84709000Y-162179000D02* +X105156000Y-162179000D01* +X83693000Y-161163000D02* +X84709000Y-162179000D01* +X83693000Y-158750000D02* +X83693000Y-161163000D01* +X83185000Y-158242000D02* +X83693000Y-158750000D01* +D38* +X109410000Y-159901000D02* +X109410000Y-156020000D01* +X109779000Y-155651000D02* +X111260000Y-155651000D01* +X109410000Y-156020000D02* +X109779000Y-155651000D01* +X114300000Y-160147000D02* +X114300000Y-160401000D01* +X114300000Y-160401000D02* +X113919000Y-160782000D01* +X113919000Y-160782000D02* +X112649000Y-160782000D01* +X112649000Y-160782000D02* +X111260000Y-159393000D01* +X111260000Y-159393000D02* +X111260000Y-158051000D01* +X113030000Y-158115000D02* +X113030000Y-157353000D01* +X112776000Y-154051000D02* +X111260000Y-154051000D01* +X113284000Y-154559000D02* +X112776000Y-154051000D01* +X113284000Y-157099000D02* +X113284000Y-154559000D01* +X113030000Y-157353000D02* +X113284000Y-157099000D01* +X108610000Y-148201000D02* +X108610000Y-149327000D01* +X97978000Y-138872000D02* +X97285000Y-138872000D01* +X98425000Y-139319000D02* +X97978000Y-138872000D01* +X99822000Y-148463000D02* +X99822000Y-147955000D01* +X99822000Y-148590000D02* +X99822000Y-148463000D01* +X100584000Y-149352000D02* +X99822000Y-148590000D01* +X108585000Y-149352000D02* +X100584000Y-149352000D01* +X108610000Y-149327000D02* +X108585000Y-149352000D01* +X97285000Y-138872000D02* +X97285000Y-139062000D01* +X108585000Y-148226000D02* +X108610000Y-148201000D01* +X107010000Y-148201000D02* +X107010000Y-144958000D01* +X115189000Y-140335000D02* +X115189000Y-139246440D01* +X114554000Y-140970000D02* +X115189000Y-140335000D01* +X110490000Y-140970000D02* +X114554000Y-140970000D01* +X108966000Y-142494000D02* +X110490000Y-140970000D01* +X108966000Y-143383000D02* +X108966000Y-142494000D01* +X107823000Y-144526000D02* +X108966000Y-143383000D01* +X107442000Y-144526000D02* +X107823000Y-144526000D01* +X107010000Y-144958000D02* +X107442000Y-144526000D01* +X115189000Y-139246440D02* +X115204900Y-139230540D01* +X114554900Y-139230540D02* +X114554900Y-139953100D01* +X106210000Y-144488000D02* +X106210000Y-148201000D01* +X106934000Y-143764000D02* +X106210000Y-144488000D01* +X107696000Y-143764000D02* +X106934000Y-143764000D01* +X108331000Y-143129000D02* +X107696000Y-143764000D01* +X108331000Y-142240000D02* +X108331000Y-143129000D01* +X110109000Y-140462000D02* +X108331000Y-142240000D01* +X114046000Y-140462000D02* +X110109000Y-140462000D01* +X114554900Y-139953100D02* +X114046000Y-140462000D01* +D36* +X83173000Y-146050000D02* +X83566000Y-146050000D01* +X105410000Y-146431000D02* +X105410000Y-148201000D01* +X104394000Y-145415000D02* +X105410000Y-146431000D01* +X84201000Y-145415000D02* +X104394000Y-145415000D01* +X83566000Y-146050000D02* +X84201000Y-145415000D01* +X83173000Y-147701000D02* +X83173000Y-147459000D01* +X83173000Y-147459000D02* +X84582000Y-146050000D01* +X84582000Y-146050000D02* +X104140000Y-146050000D01* +X104140000Y-146050000D02* +X104610000Y-146520000D01* +X104610000Y-146520000D02* +X104610000Y-148201000D01* +X102210000Y-148201000D02* +X102210000Y-147041000D01* +X83947000Y-148578000D02* +X83173000Y-149352000D01* +X83947000Y-147701000D02* +X83947000Y-148578000D01* +X84963000Y-146685000D02* +X83947000Y-147701000D01* +X101854000Y-146685000D02* +X84963000Y-146685000D01* +X102210000Y-147041000D02* +X101854000Y-146685000D01* +X100529000Y-147320000D02* +X101410000Y-148201000D01* +X85217000Y-147320000D02* +X100529000Y-147320000D01* +X84455000Y-148082000D02* +X85217000Y-147320000D01* +X84455000Y-149491000D02* +X84455000Y-148082000D01* +D38* +X99560000Y-150051000D02* +X103441000Y-150051000D01* +X105664000Y-140462000D02* +X106045000Y-140081000D01* +X105664000Y-143129000D02* +X105664000Y-140462000D01* +X105029000Y-143764000D02* +X105664000Y-143129000D01* +X103441000Y-150051000D02* +X103505000Y-149987000D01* +X99560000Y-150851000D02* +X104038000Y-150851000D01* +X106299000Y-141224000D02* +X107569000Y-139954000D01* +X106299000Y-143510000D02* +X106299000Y-141224000D01* +X106045000Y-143764000D02* +X106299000Y-143510000D01* +X104902000Y-149987000D02* +X105283000Y-149987000D01* +X104038000Y-150851000D02* +X104902000Y-149987000D01* +D36* +X87663000Y-153162000D02* +X87663000Y-152240000D01* +X97650000Y-156451000D02* +X99560000Y-156451000D01* +X97282000Y-156083000D02* +X97650000Y-156451000D01* +X87663000Y-152240000D02* +X87757000Y-152146000D01* +X87663000Y-154432000D02* +X87663000Y-153162000D01* +X90932000Y-152781000D02* +X90666000Y-153047000D01* +X91186000Y-152781000D02* +X90932000Y-152781000D01* +X91567000Y-153162000D02* +X91186000Y-152781000D01* +X90666000Y-153047000D02* +X90666000Y-153416000D01* +X97854000Y-158051000D02* +X99560000Y-158051000D01* +X97663000Y-158242000D02* +X97854000Y-158051000D01* +X90666000Y-158508000D02* +X91440000Y-157734000D01* +X91440000Y-157734000D02* +X91567000Y-157734000D01* +X89039000Y-150114000D02* +X89039000Y-151765000D01* +X90666000Y-153416000D02* +X90666000Y-153404000D01* +X90666000Y-153404000D02* +X89039000Y-151777000D01* +X89039000Y-151777000D02* +X89039000Y-151765000D01* +X90666000Y-158877000D02* +X90666000Y-158508000D01* +X76200000Y-149860000D02* +X77597000Y-149860000D01* +X78740000Y-151003000D02* +X81546000Y-151003000D01* +X77597000Y-149860000D02* +X78740000Y-151003000D01* +X79006000Y-149352000D02* +X78486000Y-149352000D01* +X77470000Y-148590000D02* +X76200000Y-147320000D01* +X77724000Y-148590000D02* +X77470000Y-148590000D01* +X78486000Y-149352000D02* +X77724000Y-148590000D01* +X79006000Y-147701000D02* +X78867000Y-147701000D01* +X78867000Y-147701000D02* +X77851000Y-146685000D01* +X77851000Y-146685000D02* +X77851000Y-145034000D01* +X77851000Y-145034000D02* +X77597000Y-144780000D01* +X77597000Y-144780000D02* +X76200000Y-144780000D01* +X76454000Y-144780000D02* +X76200000Y-144780000D01* +X79006000Y-146050000D02* +X79006000Y-144030000D01* +X79006000Y-144030000D02* +X77216000Y-142240000D01* +X77216000Y-142240000D02* +X76200000Y-142240000D01* +D38* +X113665000Y-158115000D02* +X113665000Y-157861000D01* +X113665000Y-157861000D02* +X114046000Y-157480000D01* +X114046000Y-157480000D02* +X116840000Y-157480000D01* +X113665000Y-160147000D02* +X113665000Y-159639000D01* +X113792000Y-159512000D02* +X116332000Y-159512000D01* +X113665000Y-159639000D02* +X113792000Y-159512000D01* +X116332000Y-159512000D02* +X116840000Y-160020000D01* +D36* +X89166000Y-155067000D02* +X89166000Y-153416000D01* +X87663000Y-155702000D02* +X88531000Y-155702000D01* +X88531000Y-155702000D02* +X89166000Y-155067000D01* +X89166000Y-160528000D02* +X89166000Y-158877000D01* +X89166000Y-158877000D02* +X89166000Y-158635000D01* +X89166000Y-158635000D02* +X88773000Y-158242000D01* +X88773000Y-158242000D02* +X87663000Y-158242000D01* +X87790000Y-158115000D02* +X87663000Y-158242000D01* +X84455000Y-150991000D02* +X83058000Y-150991000D01* +X83058000Y-150991000D02* +X83046000Y-151003000D01* +X80391000Y-153555000D02* +X80391000Y-153543000D01* +X80391000Y-153543000D02* +X79998000Y-153150000D01* +X79998000Y-153150000D02* +X79998000Y-152146000D01* +X82263000Y-154432000D02* +X82263000Y-153162000D01* +X80911000Y-155055000D02* +X81534000Y-154432000D01* +X81534000Y-154432000D02* +X82263000Y-154432000D01* +X80391000Y-155055000D02* +X80911000Y-155055000D01* +X80391000Y-158889000D02* +X80391000Y-158750000D01* +X80391000Y-158750000D02* +X79998000Y-158357000D01* +X79998000Y-158357000D02* +X79998000Y-157480000D01* +X82263000Y-159512000D02* +X82263000Y-160782000D01* +X80391000Y-160389000D02* +X80887000Y-160389000D01* +X81280000Y-160782000D02* +X82263000Y-160782000D01* +X80887000Y-160389000D02* +X81280000Y-160782000D01* +M02* diff --git a/PCB/OUTPUT_V2/Tinylab_proto1-F_Mask.gbr b/PCB/OUTPUT_V2/Tinylab_proto1-F_Mask.gbr new file mode 100644 index 00000000..15cf453a --- /dev/null +++ b/PCB/OUTPUT_V2/Tinylab_proto1-F_Mask.gbr @@ -0,0 +1,262 @@ +G04 #@! TF.FileFunction,Soldermask,Top* +%FSLAX46Y46*% +G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* +G04 Created by KiCad (PCBNEW (2015-08-05 BZR 6055, Git fa29c62)-product) date 24/12/2015 2:00:31 PM* +%MOMM*% +G01* +G04 APERTURE LIST* +%ADD10C,0.100000*% +%ADD11R,0.800000X0.750000*% +%ADD12R,0.750000X0.800000*% +%ADD13C,1.300000*% +%ADD14R,1.300000X1.300000*% +%ADD15C,1.998980*% +%ADD16R,1.998980X1.998980*% +%ADD17R,1.000000X1.600000*% +%ADD18R,0.560000X1.600000*% +%ADD19R,1.600000X0.560000*% +%ADD20R,2.032000X1.727200*% +%ADD21O,2.032000X1.727200*% +%ADD22R,0.400000X1.350000*% +%ADD23O,1.250000X0.950000*% +%ADD24O,1.000000X1.550000*% +%ADD25R,1.727200X1.727200*% +%ADD26O,1.727200X1.727200*% +%ADD27R,2.032000X2.032000*% +%ADD28O,2.032000X2.032000*% +%ADD29R,0.900000X0.600000*% +%ADD30R,0.500000X0.900000*% +%ADD31R,0.900000X0.500000*% +%ADD32R,0.600000X0.900000*% +%ADD33R,1.500000X0.600000*% +%ADD34R,0.304800X0.508000*% +G04 APERTURE END LIST* +D10* +D11* +X90436000Y-156591000D03* +X91936000Y-156591000D03* +D12* +X91948000Y-160516000D03* +X91948000Y-159016000D03* +D11* +X111137000Y-142621000D03* +X112637000Y-142621000D03* +X112256000Y-147193000D03* +X110756000Y-147193000D03* +D12* +X91821000Y-151753000D03* +X91821000Y-150253000D03* +D13* +X76494000Y-136906000D03* +D14* +X78994000Y-136906000D03* +D12* +X78740000Y-155182000D03* +X78740000Y-153682000D03* +X81280000Y-142760000D03* +X81280000Y-144260000D03* +X97536000Y-140601000D03* +X97536000Y-142101000D03* +X97790000Y-153785000D03* +X97790000Y-152285000D03* +D13* +X93345000Y-141391000D03* +D14* +X93345000Y-143891000D03* +D12* +X88900000Y-143879000D03* +X88900000Y-142379000D03* +X114427000Y-151777000D03* +X114427000Y-153277000D03* +X78740000Y-160516000D03* +X78740000Y-159016000D03* +D13* +X116078000Y-146518000D03* +D14* +X116078000Y-144018000D03* +D15* +X92710000Y-135125460D03* +D16* +X82550000Y-135125460D03* +D17* +X107291000Y-142113000D03* +X104291000Y-142113000D03* +D18* +X101410000Y-159901000D03* +X102210000Y-159901000D03* +X103010000Y-159901000D03* +X103810000Y-159901000D03* +X104610000Y-159901000D03* +X105410000Y-159901000D03* +X106210000Y-159901000D03* +X107010000Y-159901000D03* +X107810000Y-159901000D03* +X108610000Y-159901000D03* +X109410000Y-159901000D03* +D19* +X111260000Y-158051000D03* +X111260000Y-157251000D03* +X111260000Y-156451000D03* +X111260000Y-155651000D03* +X111260000Y-154851000D03* +X111260000Y-154051000D03* +X111260000Y-153251000D03* +X111260000Y-152451000D03* +X111260000Y-151651000D03* +X111260000Y-150851000D03* +X111260000Y-150051000D03* +D18* +X109410000Y-148201000D03* +X108610000Y-148201000D03* +X107810000Y-148201000D03* +X107010000Y-148201000D03* +X106210000Y-148201000D03* +X105410000Y-148201000D03* +X104610000Y-148201000D03* +X103810000Y-148201000D03* +X103010000Y-148201000D03* +X102210000Y-148201000D03* +X101410000Y-148201000D03* +D19* +X99560000Y-150051000D03* +X99560000Y-150851000D03* +X99560000Y-151651000D03* +X99560000Y-152451000D03* +X99560000Y-153251000D03* +X99560000Y-154051000D03* +X99560000Y-154851000D03* +X99560000Y-155651000D03* +X99560000Y-156451000D03* +X99560000Y-157251000D03* +X99560000Y-158051000D03* +D15* +X82296000Y-137924540D03* +D16* +X92456000Y-137924540D03* +D20* +X94488000Y-159512000D03* +D21* +X94488000Y-156972000D03* +X94488000Y-154432000D03* +X94488000Y-151892000D03* +D22* +X115854900Y-139230540D03* +X115204900Y-139230540D03* +X114554900Y-139230540D03* +X113904900Y-139230540D03* +X113254900Y-139230540D03* +D23* +X117054900Y-139230540D03* +X112054900Y-139230540D03* +D24* +X118054900Y-136530540D03* +X111054900Y-136530540D03* +D20* +X76200000Y-149860000D03* +D21* +X76200000Y-147320000D03* +X76200000Y-144780000D03* +X76200000Y-142240000D03* +D25* +X105156000Y-135382000D03* +D26* +X107696000Y-135382000D03* +X105156000Y-137922000D03* +X107696000Y-137922000D03* +D20* +X100330000Y-140462000D03* +D21* +X100330000Y-137922000D03* +X100330000Y-135382000D03* +D20* +X76200000Y-152400000D03* +D21* +X76200000Y-154940000D03* +X76200000Y-157480000D03* +X76200000Y-160020000D03* +D25* +X86360000Y-143510000D03* +D26* +X83820000Y-143510000D03* +X86360000Y-140970000D03* +X83820000Y-140970000D03* +D27* +X116840000Y-157480000D03* +D28* +X116840000Y-160020000D03* +D29* +X94485000Y-137922000D03* +X97285000Y-136972000D03* +X97285000Y-138872000D03* +D30* +X89166000Y-155067000D03* +X90666000Y-155067000D03* +X89166000Y-160528000D03* +X90666000Y-160528000D03* +X89166000Y-153416000D03* +X90666000Y-153416000D03* +X90666000Y-158877000D03* +X89166000Y-158877000D03* +X90539000Y-151765000D03* +X89039000Y-151765000D03* +X90539000Y-150114000D03* +X89039000Y-150114000D03* +X80506000Y-146050000D03* +X79006000Y-146050000D03* +X80506000Y-147701000D03* +X79006000Y-147701000D03* +X80506000Y-149352000D03* +X79006000Y-149352000D03* +X83046000Y-151003000D03* +X81546000Y-151003000D03* +X83173000Y-146050000D03* +X81673000Y-146050000D03* +X83173000Y-147701000D03* +X81673000Y-147701000D03* +X83173000Y-149352000D03* +X81673000Y-149352000D03* +D31* +X84455000Y-149491000D03* +X84455000Y-150991000D03* +X80391000Y-153555000D03* +X80391000Y-155055000D03* +D30* +X78498000Y-152146000D03* +X79998000Y-152146000D03* +D31* +X80391000Y-158889000D03* +X80391000Y-160389000D03* +D30* +X78498000Y-157480000D03* +X79998000Y-157480000D03* +X97421000Y-143891000D03* +X98921000Y-143891000D03* +X100850000Y-143891000D03* +X102350000Y-143891000D03* +D32* +X109982000Y-142999000D03* +X110932000Y-145799000D03* +X109032000Y-145799000D03* +D33* +X87663000Y-160782000D03* +X87663000Y-159512000D03* +X87663000Y-158242000D03* +X87663000Y-156972000D03* +X87663000Y-155702000D03* +X87663000Y-154432000D03* +X87663000Y-153162000D03* +X82263000Y-153162000D03* +X82263000Y-154432000D03* +X82263000Y-155702000D03* +X82263000Y-156972000D03* +X82263000Y-158242000D03* +X82263000Y-159512000D03* +X82263000Y-160782000D03* +D34* +X113030000Y-160147000D03* +X114300000Y-160147000D03* +X113030000Y-158115000D03* +X113665000Y-160147000D03* +X114300000Y-158115000D03* +X113665000Y-158115000D03* +M02* diff --git a/PCB/OUTPUT_V2/Tinylab_proto1-F_SilkS.gbr b/PCB/OUTPUT_V2/Tinylab_proto1-F_SilkS.gbr new file mode 100644 index 00000000..46c89ff2 --- /dev/null +++ b/PCB/OUTPUT_V2/Tinylab_proto1-F_SilkS.gbr @@ -0,0 +1,2109 @@ +G04 #@! TF.FileFunction,Legend,Top* +%FSLAX46Y46*% +G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* +G04 Created by KiCad (PCBNEW (2015-08-05 BZR 6055, Git fa29c62)-product) date 24/12/2015 2:00:31 PM* +%MOMM*% +G01* +G04 APERTURE LIST* +%ADD10C,0.100000*% +%ADD11C,0.150000*% +G04 APERTURE END LIST* +D10* +D11* +X90836000Y-155991000D02* +X91536000Y-155991000D01* +X91536000Y-157191000D02* +X90836000Y-157191000D01* +X91348000Y-160116000D02* +X91348000Y-159416000D01* +X92548000Y-159416000D02* +X92548000Y-160116000D01* +X111537000Y-142021000D02* +X112237000Y-142021000D01* +X112237000Y-143221000D02* +X111537000Y-143221000D01* +X111856000Y-147793000D02* +X111156000Y-147793000D01* +X111156000Y-146593000D02* +X111856000Y-146593000D01* +X91221000Y-151353000D02* +X91221000Y-150653000D01* +X92421000Y-150653000D02* +X92421000Y-151353000D01* +X77669000Y-140055000D02* +X77669000Y-133757000D01* +X77529000Y-140049000D02* +X77529000Y-133763000D01* +X77389000Y-140036000D02* +X77389000Y-137352000D01* +X77389000Y-136460000D02* +X77389000Y-133776000D01* +X77249000Y-140017000D02* +X77249000Y-137562000D01* +X77249000Y-136250000D02* +X77249000Y-133795000D01* +X77109000Y-139991000D02* +X77109000Y-137695000D01* +X77109000Y-136117000D02* +X77109000Y-133821000D01* +X76969000Y-139959000D02* +X76969000Y-137786000D01* +X76969000Y-136026000D02* +X76969000Y-133853000D01* +X76829000Y-139920000D02* +X76829000Y-137848000D01* +X76829000Y-135964000D02* +X76829000Y-133892000D01* +X76689000Y-139874000D02* +X76689000Y-137887000D01* +X76689000Y-135925000D02* +X76689000Y-133938000D01* +X76549000Y-139821000D02* +X76549000Y-137904000D01* +X76549000Y-135908000D02* +X76549000Y-133991000D01* +X76409000Y-139759000D02* +X76409000Y-137902000D01* +X76409000Y-135910000D02* +X76409000Y-134053000D01* +X76269000Y-139689000D02* +X76269000Y-137880000D01* +X76269000Y-135932000D02* +X76269000Y-134123000D01* +X76129000Y-139610000D02* +X76129000Y-137837000D01* +X76129000Y-135975000D02* +X76129000Y-134202000D01* +X75989000Y-139522000D02* +X75989000Y-137769000D01* +X75989000Y-136043000D02* +X75989000Y-134290000D01* +X75849000Y-139422000D02* +X75849000Y-137670000D01* +X75849000Y-136142000D02* +X75849000Y-134390000D01* +X75709000Y-139310000D02* +X75709000Y-137525000D01* +X75709000Y-136287000D02* +X75709000Y-134502000D01* +X75569000Y-139185000D02* +X75569000Y-137286000D01* +X75569000Y-136526000D02* +X75569000Y-134627000D01* +X75429000Y-139042000D02* +X75429000Y-134770000D01* +X75289000Y-138880000D02* +X75289000Y-134932000D01* +X75149000Y-138692000D02* +X75149000Y-135120000D01* +X75009000Y-138469000D02* +X75009000Y-135343000D01* +X74869000Y-138193000D02* +X74869000Y-135619000D01* +X74729000Y-137818000D02* +X74729000Y-135994000D01* +X77494000Y-136906000D02* +G75* +G03X77494000Y-136906000I-1000000J0D01* +G01* +X80931500Y-136906000D02* +G75* +G03X80931500Y-136906000I-3187500J0D01* +G01* +X78140000Y-154782000D02* +X78140000Y-154082000D01* +X79340000Y-154082000D02* +X79340000Y-154782000D01* +X81880000Y-143160000D02* +X81880000Y-143860000D01* +X80680000Y-143860000D02* +X80680000Y-143160000D01* +X98136000Y-141001000D02* +X98136000Y-141701000D01* +X96936000Y-141701000D02* +X96936000Y-141001000D01* +X97190000Y-153385000D02* +X97190000Y-152685000D01* +X98390000Y-152685000D02* +X98390000Y-153385000D01* +X90196000Y-142566000D02* +X96494000Y-142566000D01* +X90202000Y-142426000D02* +X96488000Y-142426000D01* +X90215000Y-142286000D02* +X92899000Y-142286000D01* +X93791000Y-142286000D02* +X96475000Y-142286000D01* +X90234000Y-142146000D02* +X92689000Y-142146000D01* +X94001000Y-142146000D02* +X96456000Y-142146000D01* +X90260000Y-142006000D02* +X92556000Y-142006000D01* +X94134000Y-142006000D02* +X96430000Y-142006000D01* +X90292000Y-141866000D02* +X92465000Y-141866000D01* +X94225000Y-141866000D02* +X96398000Y-141866000D01* +X90331000Y-141726000D02* +X92403000Y-141726000D01* +X94287000Y-141726000D02* +X96359000Y-141726000D01* +X90377000Y-141586000D02* +X92364000Y-141586000D01* +X94326000Y-141586000D02* +X96313000Y-141586000D01* +X90430000Y-141446000D02* +X92347000Y-141446000D01* +X94343000Y-141446000D02* +X96260000Y-141446000D01* +X90492000Y-141306000D02* +X92349000Y-141306000D01* +X94341000Y-141306000D02* +X96198000Y-141306000D01* +X90562000Y-141166000D02* +X92371000Y-141166000D01* +X94319000Y-141166000D02* +X96128000Y-141166000D01* +X90641000Y-141026000D02* +X92414000Y-141026000D01* +X94276000Y-141026000D02* +X96049000Y-141026000D01* +X90729000Y-140886000D02* +X92482000Y-140886000D01* +X94208000Y-140886000D02* +X95961000Y-140886000D01* +X90829000Y-140746000D02* +X92581000Y-140746000D01* +X94109000Y-140746000D02* +X95861000Y-140746000D01* +X90941000Y-140606000D02* +X92726000Y-140606000D01* +X93964000Y-140606000D02* +X95749000Y-140606000D01* +X91066000Y-140466000D02* +X92965000Y-140466000D01* +X93725000Y-140466000D02* +X95624000Y-140466000D01* +X91209000Y-140326000D02* +X95481000Y-140326000D01* +X91371000Y-140186000D02* +X95319000Y-140186000D01* +X91559000Y-140046000D02* +X95131000Y-140046000D01* +X91782000Y-139906000D02* +X94908000Y-139906000D01* +X92058000Y-139766000D02* +X94632000Y-139766000D01* +X92433000Y-139626000D02* +X94257000Y-139626000D01* +X94345000Y-141391000D02* +G75* +G03X94345000Y-141391000I-1000000J0D01* +G01* +X96532500Y-142641000D02* +G75* +G03X96532500Y-142641000I-3187500J0D01* +G01* +X88300000Y-143479000D02* +X88300000Y-142779000D01* +X89500000Y-142779000D02* +X89500000Y-143479000D01* +X115027000Y-152177000D02* +X115027000Y-152877000D01* +X113827000Y-152877000D02* +X113827000Y-152177000D01* +X78140000Y-160116000D02* +X78140000Y-159416000D01* +X79340000Y-159416000D02* +X79340000Y-160116000D01* +X119227000Y-145343000D02* +X112929000Y-145343000D01* +X119221000Y-145483000D02* +X112935000Y-145483000D01* +X119208000Y-145623000D02* +X116524000Y-145623000D01* +X115632000Y-145623000D02* +X112948000Y-145623000D01* +X119189000Y-145763000D02* +X116734000Y-145763000D01* +X115422000Y-145763000D02* +X112967000Y-145763000D01* +X119163000Y-145903000D02* +X116867000Y-145903000D01* +X115289000Y-145903000D02* +X112993000Y-145903000D01* +X119131000Y-146043000D02* +X116958000Y-146043000D01* +X115198000Y-146043000D02* +X113025000Y-146043000D01* +X119092000Y-146183000D02* +X117020000Y-146183000D01* +X115136000Y-146183000D02* +X113064000Y-146183000D01* +X119046000Y-146323000D02* +X117059000Y-146323000D01* +X115097000Y-146323000D02* +X113110000Y-146323000D01* +X118993000Y-146463000D02* +X117076000Y-146463000D01* +X115080000Y-146463000D02* +X113163000Y-146463000D01* +X118931000Y-146603000D02* +X117074000Y-146603000D01* +X115082000Y-146603000D02* +X113225000Y-146603000D01* +X118861000Y-146743000D02* +X117052000Y-146743000D01* +X115104000Y-146743000D02* +X113295000Y-146743000D01* +X118782000Y-146883000D02* +X117009000Y-146883000D01* +X115147000Y-146883000D02* +X113374000Y-146883000D01* +X118694000Y-147023000D02* +X116941000Y-147023000D01* +X115215000Y-147023000D02* +X113462000Y-147023000D01* +X118594000Y-147163000D02* +X116842000Y-147163000D01* +X115314000Y-147163000D02* +X113562000Y-147163000D01* +X118482000Y-147303000D02* +X116697000Y-147303000D01* +X115459000Y-147303000D02* +X113674000Y-147303000D01* +X118357000Y-147443000D02* +X116458000Y-147443000D01* +X115698000Y-147443000D02* +X113799000Y-147443000D01* +X118214000Y-147583000D02* +X113942000Y-147583000D01* +X118052000Y-147723000D02* +X114104000Y-147723000D01* +X117864000Y-147863000D02* +X114292000Y-147863000D01* +X117641000Y-148003000D02* +X114515000Y-148003000D01* +X117365000Y-148143000D02* +X114791000Y-148143000D01* +X116990000Y-148283000D02* +X115166000Y-148283000D01* +X117078000Y-146518000D02* +G75* +G03X117078000Y-146518000I-1000000J0D01* +G01* +X119265500Y-145268000D02* +G75* +G03X119265500Y-145268000I-3187500J0D01* +G01* +X90170000Y-135125460D02* +X91186000Y-135125460D01* +X85344000Y-135125460D02* +X84074000Y-135125460D01* +X85598000Y-133855460D02* +X85598000Y-136395460D01* +X85852000Y-133855460D02* +X85852000Y-136395460D01* +X86106000Y-133855460D02* +X86106000Y-136395460D01* +X85344000Y-133855460D02* +X85344000Y-136395460D01* +X86360000Y-133855460D02* +X85090000Y-136395460D01* +X85090000Y-133855460D02* +X86360000Y-136395460D01* +X86360000Y-133855460D02* +X86360000Y-136395460D01* +X85725000Y-133855460D02* +X85725000Y-136395460D01* +X85090000Y-136395460D02* +X85090000Y-133855460D01* +X85090000Y-133855460D02* +X90170000Y-133855460D01* +X90170000Y-133855460D02* +X90170000Y-136395460D01* +X90170000Y-136395460D02* +X85090000Y-136395460D01* +X104791000Y-143138000D02* +X106791000Y-143138000D01* +X106791000Y-141088000D02* +X104791000Y-141088000D01* +X100235000Y-159226000D02* +X100905000Y-159226000D01* +X100235000Y-148876000D02* +X100905000Y-148876000D01* +X110585000Y-148876000D02* +X109915000Y-148876000D01* +X110585000Y-159226000D02* +X109915000Y-159226000D01* +X100235000Y-159226000D02* +X100235000Y-158556000D01* +X110585000Y-159226000D02* +X110585000Y-158556000D01* +X110585000Y-148876000D02* +X110585000Y-149546000D01* +X100235000Y-148876000D02* +X100235000Y-149546000D01* +X100905000Y-159226000D02* +X100905000Y-160701000D01* +X84836000Y-137924540D02* +X83820000Y-137924540D01* +X89662000Y-137924540D02* +X90932000Y-137924540D01* +X89408000Y-139194540D02* +X89408000Y-136654540D01* +X89154000Y-139194540D02* +X89154000Y-136654540D01* +X88900000Y-139194540D02* +X88900000Y-136654540D01* +X89662000Y-139194540D02* +X89662000Y-136654540D01* +X88646000Y-139194540D02* +X89916000Y-136654540D01* +X89916000Y-139194540D02* +X88646000Y-136654540D01* +X88646000Y-139194540D02* +X88646000Y-136654540D01* +X89281000Y-139194540D02* +X89281000Y-136654540D01* +X89916000Y-136654540D02* +X89916000Y-139194540D01* +X89916000Y-139194540D02* +X84836000Y-139194540D01* +X84836000Y-139194540D02* +X84836000Y-136654540D01* +X84836000Y-136654540D02* +X89916000Y-136654540D01* +X95758000Y-158242000D02* +X95758000Y-150622000D01* +X93218000Y-158242000D02* +X93218000Y-150622000D01* +X92938000Y-161062000D02* +X92938000Y-159512000D01* +X95758000Y-150622000D02* +X93218000Y-150622000D01* +X93218000Y-158242000D02* +X95758000Y-158242000D01* +X96038000Y-159512000D02* +X96038000Y-161062000D01* +X96038000Y-161062000D02* +X92938000Y-161062000D01* +X118904900Y-133850540D02* +X110204900Y-133850540D01* +X118904900Y-140255540D02* +X110204900Y-140255540D01* +X110204900Y-140255540D02* +X110204900Y-133850540D01* +X110204900Y-135080540D02* +X118904900Y-135080540D01* +X118904900Y-133850540D02* +X118904900Y-140255540D01* +X77470000Y-148590000D02* +X77470000Y-140970000D01* +X74930000Y-148590000D02* +X74930000Y-140970000D01* +X74650000Y-151410000D02* +X74650000Y-149860000D01* +X77470000Y-140970000D02* +X74930000Y-140970000D01* +X74930000Y-148590000D02* +X77470000Y-148590000D01* +X77750000Y-149860000D02* +X77750000Y-151410000D01* +X77750000Y-151410000D02* +X74650000Y-151410000D01* +X103606000Y-135382000D02* +X103606000Y-133832000D01* +X105156000Y-133832000D02* +X103606000Y-133832000D01* +X103886000Y-136652000D02* +X106426000Y-136652000D01* +X106426000Y-136652000D02* +X106426000Y-134112000D01* +X106426000Y-134112000D02* +X108966000Y-134112000D01* +X108966000Y-134112000D02* +X108966000Y-139192000D01* +X108966000Y-139192000D02* +X103886000Y-139192000D01* +X103886000Y-139192000D02* +X103886000Y-136652000D01* +X101600000Y-139192000D02* +X101600000Y-134112000D01* +X101600000Y-134112000D02* +X99060000Y-134112000D01* +X99060000Y-134112000D02* +X99060000Y-139192000D01* +X98780000Y-142012000D02* +X98780000Y-140462000D01* +X99060000Y-139192000D02* +X101600000Y-139192000D01* +X101880000Y-140462000D02* +X101880000Y-142012000D01* +X101880000Y-142012000D02* +X98780000Y-142012000D01* +X74930000Y-153670000D02* +X74930000Y-161290000D01* +X77470000Y-153670000D02* +X77470000Y-161290000D01* +X77750000Y-150850000D02* +X77750000Y-152400000D01* +X74930000Y-161290000D02* +X77470000Y-161290000D01* +X77470000Y-153670000D02* +X74930000Y-153670000D01* +X74650000Y-152400000D02* +X74650000Y-150850000D01* +X74650000Y-150850000D02* +X77750000Y-150850000D01* +X87910000Y-143510000D02* +X87910000Y-145060000D01* +X86360000Y-145060000D02* +X87910000Y-145060000D01* +X87630000Y-142240000D02* +X85090000Y-142240000D01* +X85090000Y-142240000D02* +X85090000Y-144780000D01* +X85090000Y-144780000D02* +X82550000Y-144780000D01* +X82550000Y-144780000D02* +X82550000Y-139700000D01* +X82550000Y-139700000D02* +X87630000Y-139700000D01* +X87630000Y-139700000D02* +X87630000Y-142240000D01* +X118110000Y-158750000D02* +X118110000Y-161290000D01* +X118390000Y-155930000D02* +X118390000Y-157480000D01* +X118110000Y-158750000D02* +X115570000Y-158750000D01* +X115290000Y-157480000D02* +X115290000Y-155930000D01* +X115290000Y-155930000D02* +X118390000Y-155930000D01* +X115570000Y-158750000D02* +X115570000Y-161290000D01* +X115570000Y-161290000D02* +X118110000Y-161290000D01* +X96426421Y-138922000D02* +G75* +G03X96426421Y-138922000I-141421J0D01* +G01* +X96685000Y-136422000D02* +X95085000Y-136422000D01* +X95085000Y-136422000D02* +X95085000Y-139422000D01* +X95085000Y-139422000D02* +X96685000Y-139422000D01* +X96685000Y-139422000D02* +X96685000Y-136422000D01* +X90416000Y-155742000D02* +X89416000Y-155742000D01* +X89416000Y-154392000D02* +X90416000Y-154392000D01* +X90416000Y-161203000D02* +X89416000Y-161203000D01* +X89416000Y-159853000D02* +X90416000Y-159853000D01* +X90416000Y-154091000D02* +X89416000Y-154091000D01* +X89416000Y-152741000D02* +X90416000Y-152741000D01* +X89416000Y-158202000D02* +X90416000Y-158202000D01* +X90416000Y-159552000D02* +X89416000Y-159552000D01* +X89289000Y-151090000D02* +X90289000Y-151090000D01* +X90289000Y-152440000D02* +X89289000Y-152440000D01* +X89289000Y-149439000D02* +X90289000Y-149439000D01* +X90289000Y-150789000D02* +X89289000Y-150789000D01* +X79256000Y-145375000D02* +X80256000Y-145375000D01* +X80256000Y-146725000D02* +X79256000Y-146725000D01* +X79256000Y-147026000D02* +X80256000Y-147026000D01* +X80256000Y-148376000D02* +X79256000Y-148376000D01* +X79256000Y-148677000D02* +X80256000Y-148677000D01* +X80256000Y-150027000D02* +X79256000Y-150027000D01* +X81796000Y-150328000D02* +X82796000Y-150328000D01* +X82796000Y-151678000D02* +X81796000Y-151678000D01* +X81923000Y-145375000D02* +X82923000Y-145375000D01* +X82923000Y-146725000D02* +X81923000Y-146725000D01* +X81923000Y-147026000D02* +X82923000Y-147026000D01* +X82923000Y-148376000D02* +X81923000Y-148376000D01* +X81923000Y-148677000D02* +X82923000Y-148677000D01* +X82923000Y-150027000D02* +X81923000Y-150027000D01* +X83780000Y-150741000D02* +X83780000Y-149741000D01* +X85130000Y-149741000D02* +X85130000Y-150741000D01* +X79716000Y-154805000D02* +X79716000Y-153805000D01* +X81066000Y-153805000D02* +X81066000Y-154805000D01* +X79748000Y-152821000D02* +X78748000Y-152821000D01* +X78748000Y-151471000D02* +X79748000Y-151471000D01* +X79716000Y-160139000D02* +X79716000Y-159139000D01* +X81066000Y-159139000D02* +X81066000Y-160139000D01* +X79748000Y-158155000D02* +X78748000Y-158155000D01* +X78748000Y-156805000D02* +X79748000Y-156805000D01* +X98671000Y-144566000D02* +X97671000Y-144566000D01* +X97671000Y-143216000D02* +X98671000Y-143216000D01* +X102100000Y-144566000D02* +X101100000Y-144566000D01* +X101100000Y-143216000D02* +X102100000Y-143216000D01* +X109123421Y-144799000D02* +G75* +G03X109123421Y-144799000I-141421J0D01* +G01* +X111482000Y-145199000D02* +X111482000Y-143599000D01* +X111482000Y-143599000D02* +X108482000Y-143599000D01* +X108482000Y-143599000D02* +X108482000Y-145199000D01* +X108482000Y-145199000D02* +X111482000Y-145199000D01* +X87038000Y-161422000D02* +X87038000Y-161307000D01* +X82888000Y-161422000D02* +X82888000Y-161307000D01* +X82888000Y-152522000D02* +X82888000Y-152637000D01* +X87038000Y-152522000D02* +X87038000Y-152637000D01* +X87038000Y-161422000D02* +X82888000Y-161422000D01* +X87038000Y-152522000D02* +X82888000Y-152522000D01* +X87038000Y-161307000D02* +X88413000Y-161307000D01* +X114681000Y-158496000D02* +X112649000Y-158496000D01* +X112649000Y-158496000D02* +X112649000Y-159766000D01* +X112649000Y-159766000D02* +X114681000Y-159766000D01* +X114681000Y-159766000D02* +X114681000Y-158496000D01* +X92035334Y-155652743D02* +X91987715Y-155700362D01* +X91844858Y-155747981D01* +X91749620Y-155747981D01* +X91606762Y-155700362D01* +X91511524Y-155605124D01* +X91463905Y-155509886D01* +X91416286Y-155319410D01* +X91416286Y-155176552D01* +X91463905Y-154986076D01* +X91511524Y-154890838D01* +X91606762Y-154795600D01* +X91749620Y-154747981D01* +X91844858Y-154747981D01* +X91987715Y-154795600D01* +X92035334Y-154843219D01* +X92987715Y-155747981D02* +X92416286Y-155747981D01* +X92702000Y-155747981D02* +X92702000Y-154747981D01* +X92606762Y-154890838D01* +X92511524Y-154986076D01* +X92416286Y-155033695D01* +X92065814Y-162343103D02* +X92018195Y-162390722D01* +X91875338Y-162438341D01* +X91780100Y-162438341D01* +X91637242Y-162390722D01* +X91542004Y-162295484D01* +X91494385Y-162200246D01* +X91446766Y-162009770D01* +X91446766Y-161866912D01* +X91494385Y-161676436D01* +X91542004Y-161581198D01* +X91637242Y-161485960D01* +X91780100Y-161438341D01* +X91875338Y-161438341D01* +X92018195Y-161485960D01* +X92065814Y-161533579D01* +X92446766Y-161533579D02* +X92494385Y-161485960D01* +X92589623Y-161438341D01* +X92827719Y-161438341D01* +X92922957Y-161485960D01* +X92970576Y-161533579D01* +X93018195Y-161628817D01* +X93018195Y-161724055D01* +X92970576Y-161866912D01* +X92399147Y-162438341D01* +X93018195Y-162438341D01* +X111745734Y-141682743D02* +X111698115Y-141730362D01* +X111555258Y-141777981D01* +X111460020Y-141777981D01* +X111317162Y-141730362D01* +X111221924Y-141635124D01* +X111174305Y-141539886D01* +X111126686Y-141349410D01* +X111126686Y-141206552D01* +X111174305Y-141016076D01* +X111221924Y-140920838D01* +X111317162Y-140825600D01* +X111460020Y-140777981D01* +X111555258Y-140777981D01* +X111698115Y-140825600D01* +X111745734Y-140873219D01* +X112079067Y-140777981D02* +X112698115Y-140777981D01* +X112364781Y-141158933D01* +X112507639Y-141158933D01* +X112602877Y-141206552D01* +X112650496Y-141254171D01* +X112698115Y-141349410D01* +X112698115Y-141587505D01* +X112650496Y-141682743D01* +X112602877Y-141730362D01* +X112507639Y-141777981D01* +X112221924Y-141777981D01* +X112126686Y-141730362D01* +X112079067Y-141682743D01* +X111491734Y-148845543D02* +X111444115Y-148893162D01* +X111301258Y-148940781D01* +X111206020Y-148940781D01* +X111063162Y-148893162D01* +X110967924Y-148797924D01* +X110920305Y-148702686D01* +X110872686Y-148512210D01* +X110872686Y-148369352D01* +X110920305Y-148178876D01* +X110967924Y-148083638D01* +X111063162Y-147988400D01* +X111206020Y-147940781D01* +X111301258Y-147940781D01* +X111444115Y-147988400D01* +X111491734Y-148036019D01* +X112348877Y-148274114D02* +X112348877Y-148940781D01* +X112110781Y-147893162D02* +X111872686Y-148607448D01* +X112491734Y-148607448D01* +X92492534Y-149455143D02* +X92444915Y-149502762D01* +X92302058Y-149550381D01* +X92206820Y-149550381D01* +X92063962Y-149502762D01* +X91968724Y-149407524D01* +X91921105Y-149312286D01* +X91873486Y-149121810D01* +X91873486Y-148978952D01* +X91921105Y-148788476D01* +X91968724Y-148693238D01* +X92063962Y-148598000D01* +X92206820Y-148550381D01* +X92302058Y-148550381D01* +X92444915Y-148598000D01* +X92492534Y-148645619D01* +X93397296Y-148550381D02* +X92921105Y-148550381D01* +X92873486Y-149026571D01* +X92921105Y-148978952D01* +X93016343Y-148931333D01* +X93254439Y-148931333D01* +X93349677Y-148978952D01* +X93397296Y-149026571D01* +X93444915Y-149121810D01* +X93444915Y-149359905D01* +X93397296Y-149455143D01* +X93349677Y-149502762D01* +X93254439Y-149550381D01* +X93016343Y-149550381D01* +X92921105Y-149502762D01* +X92873486Y-149455143D01* +X78700334Y-138914143D02* +X78652715Y-138961762D01* +X78509858Y-139009381D01* +X78414620Y-139009381D01* +X78271762Y-138961762D01* +X78176524Y-138866524D01* +X78128905Y-138771286D01* +X78081286Y-138580810D01* +X78081286Y-138437952D01* +X78128905Y-138247476D01* +X78176524Y-138152238D01* +X78271762Y-138057000D01* +X78414620Y-138009381D01* +X78509858Y-138009381D01* +X78652715Y-138057000D01* +X78700334Y-138104619D01* +X79557477Y-138009381D02* +X79367000Y-138009381D01* +X79271762Y-138057000D01* +X79224143Y-138104619D01* +X79128905Y-138247476D01* +X79081286Y-138437952D01* +X79081286Y-138818905D01* +X79128905Y-138914143D01* +X79176524Y-138961762D01* +X79271762Y-139009381D01* +X79462239Y-139009381D01* +X79557477Y-138961762D01* +X79605096Y-138914143D01* +X79652715Y-138818905D01* +X79652715Y-138580810D01* +X79605096Y-138485571D01* +X79557477Y-138437952D01* +X79462239Y-138390333D01* +X79271762Y-138390333D01* +X79176524Y-138437952D01* +X79128905Y-138485571D01* +X79081286Y-138580810D01* +X77197143Y-154598666D02* +X77244762Y-154646285D01* +X77292381Y-154789142D01* +X77292381Y-154884380D01* +X77244762Y-155027238D01* +X77149524Y-155122476D01* +X77054286Y-155170095D01* +X76863810Y-155217714D01* +X76720952Y-155217714D01* +X76530476Y-155170095D01* +X76435238Y-155122476D01* +X76340000Y-155027238D01* +X76292381Y-154884380D01* +X76292381Y-154789142D01* +X76340000Y-154646285D01* +X76387619Y-154598666D01* +X76292381Y-154265333D02* +X76292381Y-153598666D01* +X77292381Y-154027238D01* +X80240143Y-143625866D02* +X80287762Y-143673485D01* +X80335381Y-143816342D01* +X80335381Y-143911580D01* +X80287762Y-144054438D01* +X80192524Y-144149676D01* +X80097286Y-144197295D01* +X79906810Y-144244914D01* +X79763952Y-144244914D01* +X79573476Y-144197295D01* +X79478238Y-144149676D01* +X79383000Y-144054438D01* +X79335381Y-143911580D01* +X79335381Y-143816342D01* +X79383000Y-143673485D01* +X79430619Y-143625866D01* +X79763952Y-143054438D02* +X79716333Y-143149676D01* +X79668714Y-143197295D01* +X79573476Y-143244914D01* +X79525857Y-143244914D01* +X79430619Y-143197295D01* +X79383000Y-143149676D01* +X79335381Y-143054438D01* +X79335381Y-142863961D01* +X79383000Y-142768723D01* +X79430619Y-142721104D01* +X79525857Y-142673485D01* +X79573476Y-142673485D01* +X79668714Y-142721104D01* +X79716333Y-142768723D01* +X79763952Y-142863961D01* +X79763952Y-143054438D01* +X79811571Y-143149676D01* +X79859190Y-143197295D01* +X79954429Y-143244914D01* +X80144905Y-143244914D01* +X80240143Y-143197295D01* +X80287762Y-143149676D01* +X80335381Y-143054438D01* +X80335381Y-142863961D01* +X80287762Y-142768723D01* +X80240143Y-142721104D01* +X80144905Y-142673485D01* +X79954429Y-142673485D01* +X79859190Y-142721104D01* +X79811571Y-142768723D01* +X79763952Y-142863961D01* +X98147143Y-139104666D02* +X98194762Y-139152285D01* +X98242381Y-139295142D01* +X98242381Y-139390380D01* +X98194762Y-139533238D01* +X98099524Y-139628476D01* +X98004286Y-139676095D01* +X97813810Y-139723714D01* +X97670952Y-139723714D01* +X97480476Y-139676095D01* +X97385238Y-139628476D01* +X97290000Y-139533238D01* +X97242381Y-139390380D01* +X97242381Y-139295142D01* +X97290000Y-139152285D01* +X97337619Y-139104666D01* +X98242381Y-138628476D02* +X98242381Y-138438000D01* +X98194762Y-138342761D01* +X98147143Y-138295142D01* +X98004286Y-138199904D01* +X97813810Y-138152285D01* +X97432857Y-138152285D01* +X97337619Y-138199904D01* +X97290000Y-138247523D01* +X97242381Y-138342761D01* +X97242381Y-138533238D01* +X97290000Y-138628476D01* +X97337619Y-138676095D01* +X97432857Y-138723714D01* +X97670952Y-138723714D01* +X97766190Y-138676095D01* +X97813810Y-138628476D01* +X97861429Y-138533238D01* +X97861429Y-138342761D01* +X97813810Y-138247523D01* +X97766190Y-138199904D01* +X97670952Y-138152285D01* +X96877143Y-153754057D02* +X96924762Y-153801676D01* +X96972381Y-153944533D01* +X96972381Y-154039771D01* +X96924762Y-154182629D01* +X96829524Y-154277867D01* +X96734286Y-154325486D01* +X96543810Y-154373105D01* +X96400952Y-154373105D01* +X96210476Y-154325486D01* +X96115238Y-154277867D01* +X96020000Y-154182629D01* +X95972381Y-154039771D01* +X95972381Y-153944533D01* +X96020000Y-153801676D01* +X96067619Y-153754057D01* +X96972381Y-152801676D02* +X96972381Y-153373105D01* +X96972381Y-153087391D02* +X95972381Y-153087391D01* +X96115238Y-153182629D01* +X96210476Y-153277867D01* +X96258095Y-153373105D01* +X95972381Y-152182629D02* +X95972381Y-152087390D01* +X96020000Y-151992152D01* +X96067619Y-151944533D01* +X96162857Y-151896914D01* +X96353333Y-151849295D01* +X96591429Y-151849295D01* +X96781905Y-151896914D01* +X96877143Y-151944533D01* +X96924762Y-151992152D01* +X96972381Y-152087390D01* +X96972381Y-152182629D01* +X96924762Y-152277867D01* +X96877143Y-152325486D01* +X96781905Y-152373105D01* +X96591429Y-152420724D01* +X96353333Y-152420724D01* +X96162857Y-152373105D01* +X96067619Y-152325486D01* +X96020000Y-152277867D01* +X95972381Y-152182629D01* +X92829143Y-145721343D02* +X92781524Y-145768962D01* +X92638667Y-145816581D01* +X92543429Y-145816581D01* +X92400571Y-145768962D01* +X92305333Y-145673724D01* +X92257714Y-145578486D01* +X92210095Y-145388010D01* +X92210095Y-145245152D01* +X92257714Y-145054676D01* +X92305333Y-144959438D01* +X92400571Y-144864200D01* +X92543429Y-144816581D01* +X92638667Y-144816581D01* +X92781524Y-144864200D01* +X92829143Y-144911819D01* +X93781524Y-145816581D02* +X93210095Y-145816581D01* +X93495809Y-145816581D02* +X93495809Y-144816581D01* +X93400571Y-144959438D01* +X93305333Y-145054676D01* +X93210095Y-145102295D01* +X94733905Y-145816581D02* +X94162476Y-145816581D01* +X94448190Y-145816581D02* +X94448190Y-144816581D01* +X94352952Y-144959438D01* +X94257714Y-145054676D01* +X94162476Y-145102295D01* +X88663543Y-145594343D02* +X88615924Y-145641962D01* +X88473067Y-145689581D01* +X88377829Y-145689581D01* +X88234971Y-145641962D01* +X88139733Y-145546724D01* +X88092114Y-145451486D01* +X88044495Y-145261010D01* +X88044495Y-145118152D01* +X88092114Y-144927676D01* +X88139733Y-144832438D01* +X88234971Y-144737200D01* +X88377829Y-144689581D01* +X88473067Y-144689581D01* +X88615924Y-144737200D01* +X88663543Y-144784819D01* +X89615924Y-145689581D02* +X89044495Y-145689581D01* +X89330209Y-145689581D02* +X89330209Y-144689581D01* +X89234971Y-144832438D01* +X89139733Y-144927676D01* +X89044495Y-144975295D01* +X89996876Y-144784819D02* +X90044495Y-144737200D01* +X90139733Y-144689581D01* +X90377829Y-144689581D01* +X90473067Y-144737200D01* +X90520686Y-144784819D01* +X90568305Y-144880057D01* +X90568305Y-144975295D01* +X90520686Y-145118152D01* +X89949257Y-145689581D01* +X90568305Y-145689581D01* +X116684143Y-153169857D02* +X116731762Y-153217476D01* +X116779381Y-153360333D01* +X116779381Y-153455571D01* +X116731762Y-153598429D01* +X116636524Y-153693667D01* +X116541286Y-153741286D01* +X116350810Y-153788905D01* +X116207952Y-153788905D01* +X116017476Y-153741286D01* +X115922238Y-153693667D01* +X115827000Y-153598429D01* +X115779381Y-153455571D01* +X115779381Y-153360333D01* +X115827000Y-153217476D01* +X115874619Y-153169857D01* +X116779381Y-152217476D02* +X116779381Y-152788905D01* +X116779381Y-152503191D02* +X115779381Y-152503191D01* +X115922238Y-152598429D01* +X116017476Y-152693667D01* +X116065095Y-152788905D01* +X115779381Y-151884143D02* +X115779381Y-151265095D01* +X116160333Y-151598429D01* +X116160333Y-151455571D01* +X116207952Y-151360333D01* +X116255571Y-151312714D01* +X116350810Y-151265095D01* +X116588905Y-151265095D01* +X116684143Y-151312714D01* +X116731762Y-151360333D01* +X116779381Y-151455571D01* +X116779381Y-151741286D01* +X116731762Y-151836524D01* +X116684143Y-151884143D01* +X84828143Y-146508743D02* +X84780524Y-146556362D01* +X84637667Y-146603981D01* +X84542429Y-146603981D01* +X84399571Y-146556362D01* +X84304333Y-146461124D01* +X84256714Y-146365886D01* +X84209095Y-146175410D01* +X84209095Y-146032552D01* +X84256714Y-145842076D01* +X84304333Y-145746838D01* +X84399571Y-145651600D01* +X84542429Y-145603981D01* +X84637667Y-145603981D01* +X84780524Y-145651600D01* +X84828143Y-145699219D01* +X85780524Y-146603981D02* +X85209095Y-146603981D01* +X85494809Y-146603981D02* +X85494809Y-145603981D01* +X85399571Y-145746838D01* +X85304333Y-145842076D01* +X85209095Y-145889695D01* +X86637667Y-145937314D02* +X86637667Y-146603981D01* +X86399571Y-145556362D02* +X86161476Y-146270648D01* +X86780524Y-146270648D01* +X117832143Y-144406857D02* +X117879762Y-144454476D01* +X117927381Y-144597333D01* +X117927381Y-144692571D01* +X117879762Y-144835429D01* +X117784524Y-144930667D01* +X117689286Y-144978286D01* +X117498810Y-145025905D01* +X117355952Y-145025905D01* +X117165476Y-144978286D01* +X117070238Y-144930667D01* +X116975000Y-144835429D01* +X116927381Y-144692571D01* +X116927381Y-144597333D01* +X116975000Y-144454476D01* +X117022619Y-144406857D01* +X117927381Y-143454476D02* +X117927381Y-144025905D01* +X117927381Y-143740191D02* +X116927381Y-143740191D01* +X117070238Y-143835429D01* +X117165476Y-143930667D01* +X117213095Y-144025905D01* +X116927381Y-142549714D02* +X116927381Y-143025905D01* +X117403571Y-143073524D01* +X117355952Y-143025905D01* +X117308333Y-142930667D01* +X117308333Y-142692571D01* +X117355952Y-142597333D01* +X117403571Y-142549714D01* +X117498810Y-142502095D01* +X117736905Y-142502095D01* +X117832143Y-142549714D01* +X117879762Y-142597333D01* +X117927381Y-142692571D01* +X117927381Y-142930667D01* +X117879762Y-143025905D01* +X117832143Y-143073524D01* +X86256905Y-138501381D02* +X86256905Y-137501381D01* +X86495000Y-137501381D01* +X86637858Y-137549000D01* +X86733096Y-137644238D01* +X86780715Y-137739476D01* +X86828334Y-137929952D01* +X86828334Y-138072810D01* +X86780715Y-138263286D01* +X86733096Y-138358524D01* +X86637858Y-138453762D01* +X86495000Y-138501381D01* +X86256905Y-138501381D01* +X87780715Y-138501381D02* +X87209286Y-138501381D01* +X87495000Y-138501381D02* +X87495000Y-137501381D01* +X87399762Y-137644238D01* +X87304524Y-137739476D01* +X87209286Y-137787095D01* +X105457667Y-144341571D02* +X105124333Y-144341571D01* +X105124333Y-144865381D02* +X105124333Y-143865381D01* +X105600524Y-143865381D01* +X106505286Y-144865381D02* +X105933857Y-144865381D01* +X106219571Y-144865381D02* +X106219571Y-143865381D01* +X106124333Y-144008238D01* +X106029095Y-144103476D01* +X105933857Y-144151095D01* +X104738610Y-154579581D02* +X104738610Y-153579581D01* +X105786229Y-154484343D02* +X105738610Y-154531962D01* +X105595753Y-154579581D01* +X105500515Y-154579581D01* +X105357657Y-154531962D01* +X105262419Y-154436724D01* +X105214800Y-154341486D01* +X105167181Y-154151010D01* +X105167181Y-154008152D01* +X105214800Y-153817676D01* +X105262419Y-153722438D01* +X105357657Y-153627200D01* +X105500515Y-153579581D01* +X105595753Y-153579581D01* +X105738610Y-153627200D01* +X105786229Y-153674819D01* +X106738610Y-154579581D02* +X106167181Y-154579581D01* +X106452895Y-154579581D02* +X106452895Y-153579581D01* +X106357657Y-153722438D01* +X106262419Y-153817676D01* +X106167181Y-153865295D01* +X87717334Y-135707381D02* +X87241143Y-135707381D01* +X87241143Y-134707381D01* +X88574477Y-135707381D02* +X88003048Y-135707381D01* +X88288762Y-135707381D02* +X88288762Y-134707381D01* +X88193524Y-134850238D01* +X88098286Y-134945476D01* +X88003048Y-134993095D01* +X97480381Y-160504095D02* +X96480381Y-160504095D01* +X96480381Y-160123142D01* +X96528000Y-160027904D01* +X96575619Y-159980285D01* +X96670857Y-159932666D01* +X96813714Y-159932666D01* +X96908952Y-159980285D01* +X96956571Y-160027904D01* +X97004190Y-160123142D01* +X97004190Y-160504095D01* +X97480381Y-158980285D02* +X97480381Y-159551714D01* +X97480381Y-159266000D02* +X96480381Y-159266000D01* +X96623238Y-159361238D01* +X96718476Y-159456476D01* +X96766095Y-159551714D01* +X113815905Y-137358381D02* +X113815905Y-136358381D01* +X114196858Y-136358381D01* +X114292096Y-136406000D01* +X114339715Y-136453619D01* +X114387334Y-136548857D01* +X114387334Y-136691714D01* +X114339715Y-136786952D01* +X114292096Y-136834571D01* +X114196858Y-136882190D01* +X113815905Y-136882190D01* +X114768286Y-136453619D02* +X114815905Y-136406000D01* +X114911143Y-136358381D01* +X115149239Y-136358381D01* +X115244477Y-136406000D01* +X115292096Y-136453619D01* +X115339715Y-136548857D01* +X115339715Y-136644095D01* +X115292096Y-136786952D01* +X114720667Y-137358381D01* +X115339715Y-137358381D01* +X78531981Y-150115495D02* +X77531981Y-150115495D01* +X77531981Y-149734542D01* +X77579600Y-149639304D01* +X77627219Y-149591685D01* +X77722457Y-149544066D01* +X77865314Y-149544066D01* +X77960552Y-149591685D01* +X78008171Y-149639304D01* +X78055790Y-149734542D01* +X78055790Y-150115495D01* +X77531981Y-149210733D02* +X77531981Y-148591685D01* +X77912933Y-148925019D01* +X77912933Y-148782161D01* +X77960552Y-148686923D01* +X78008171Y-148639304D01* +X78103410Y-148591685D01* +X78341505Y-148591685D01* +X78436743Y-148639304D01* +X78484362Y-148686923D01* +X78531981Y-148782161D01* +X78531981Y-149067876D01* +X78484362Y-149163114D01* +X78436743Y-149210733D01* +X103449381Y-135993095D02* +X102449381Y-135993095D01* +X102449381Y-135612142D01* +X102497000Y-135516904D01* +X102544619Y-135469285D01* +X102639857Y-135421666D01* +X102782714Y-135421666D01* +X102877952Y-135469285D01* +X102925571Y-135516904D01* +X102973190Y-135612142D01* +X102973190Y-135993095D01* +X102782714Y-134564523D02* +X103449381Y-134564523D01* +X102401762Y-134802619D02* +X103116048Y-135040714D01* +X103116048Y-134421666D01* +X102687381Y-140057095D02* +X101687381Y-140057095D01* +X101687381Y-139676142D01* +X101735000Y-139580904D01* +X101782619Y-139533285D01* +X101877857Y-139485666D01* +X102020714Y-139485666D01* +X102115952Y-139533285D01* +X102163571Y-139580904D01* +X102211190Y-139676142D01* +X102211190Y-140057095D01* +X101687381Y-138580904D02* +X101687381Y-139057095D01* +X102163571Y-139104714D01* +X102115952Y-139057095D01* +X102068333Y-138961857D01* +X102068333Y-138723761D01* +X102115952Y-138628523D01* +X102163571Y-138580904D01* +X102258810Y-138533285D01* +X102496905Y-138533285D01* +X102592143Y-138580904D01* +X102639762Y-138628523D01* +X102687381Y-138723761D01* +X102687381Y-138961857D01* +X102639762Y-139057095D01* +X102592143Y-139104714D01* +X84529705Y-146680181D02* +X84529705Y-145680181D01* +X84910658Y-145680181D01* +X85005896Y-145727800D01* +X85053515Y-145775419D01* +X85101134Y-145870657D01* +X85101134Y-146013514D01* +X85053515Y-146108752D01* +X85005896Y-146156371D01* +X84910658Y-146203990D01* +X84529705Y-146203990D01* +X85958277Y-145680181D02* +X85767800Y-145680181D01* +X85672562Y-145727800D01* +X85624943Y-145775419D01* +X85529705Y-145918276D01* +X85482086Y-146108752D01* +X85482086Y-146489705D01* +X85529705Y-146584943D01* +X85577324Y-146632562D01* +X85672562Y-146680181D01* +X85863039Y-146680181D01* +X85958277Y-146632562D01* +X86005896Y-146584943D01* +X86053515Y-146489705D01* +X86053515Y-146251610D01* +X86005896Y-146156371D01* +X85958277Y-146108752D01* +X85863039Y-146061133D01* +X85672562Y-146061133D01* +X85577324Y-146108752D01* +X85529705Y-146156371D01* +X85482086Y-146251610D01* +X87882505Y-140838181D02* +X87882505Y-139838181D01* +X88263458Y-139838181D01* +X88358696Y-139885800D01* +X88406315Y-139933419D01* +X88453934Y-140028657D01* +X88453934Y-140171514D01* +X88406315Y-140266752D01* +X88358696Y-140314371D01* +X88263458Y-140361990D01* +X87882505Y-140361990D01* +X88787267Y-139838181D02* +X89453934Y-139838181D01* +X89025362Y-140838181D01* +X116355905Y-155595581D02* +X116355905Y-154595581D01* +X116736858Y-154595581D01* +X116832096Y-154643200D01* +X116879715Y-154690819D01* +X116927334Y-154786057D01* +X116927334Y-154928914D01* +X116879715Y-155024152D01* +X116832096Y-155071771D01* +X116736858Y-155119390D01* +X116355905Y-155119390D01* +X117498762Y-155024152D02* +X117403524Y-154976533D01* +X117355905Y-154928914D01* +X117308286Y-154833676D01* +X117308286Y-154786057D01* +X117355905Y-154690819D01* +X117403524Y-154643200D01* +X117498762Y-154595581D01* +X117689239Y-154595581D01* +X117784477Y-154643200D01* +X117832096Y-154690819D01* +X117879715Y-154786057D01* +X117879715Y-154833676D01* +X117832096Y-154928914D01* +X117784477Y-154976533D01* +X117689239Y-155024152D01* +X117498762Y-155024152D01* +X117403524Y-155071771D01* +X117355905Y-155119390D01* +X117308286Y-155214629D01* +X117308286Y-155405105D01* +X117355905Y-155500343D01* +X117403524Y-155547962D01* +X117498762Y-155595581D01* +X117689239Y-155595581D01* +X117784477Y-155547962D01* +X117832096Y-155500343D01* +X117879715Y-155405105D01* +X117879715Y-155214629D01* +X117832096Y-155119390D01* +X117784477Y-155071771D01* +X117689239Y-155024152D01* +X95789762Y-140969619D02* +X95694524Y-140922000D01* +X95599286Y-140826762D01* +X95456429Y-140683905D01* +X95361190Y-140636286D01* +X95265952Y-140636286D01* +X95313571Y-140874381D02* +X95218333Y-140826762D01* +X95123095Y-140731524D01* +X95075476Y-140541048D01* +X95075476Y-140207714D01* +X95123095Y-140017238D01* +X95218333Y-139922000D01* +X95313571Y-139874381D01* +X95504048Y-139874381D01* +X95599286Y-139922000D01* +X95694524Y-140017238D01* +X95742143Y-140207714D01* +X95742143Y-140541048D01* +X95694524Y-140731524D01* +X95599286Y-140826762D01* +X95504048Y-140874381D01* +X95313571Y-140874381D01* +X96694524Y-140874381D02* +X96123095Y-140874381D01* +X96408809Y-140874381D02* +X96408809Y-139874381D01* +X96313571Y-140017238D01* +X96218333Y-140112476D01* +X96123095Y-140160095D01* +X85355134Y-146578581D02* +X85021800Y-146102390D01* +X84783705Y-146578581D02* +X84783705Y-145578581D01* +X85164658Y-145578581D01* +X85259896Y-145626200D01* +X85307515Y-145673819D01* +X85355134Y-145769057D01* +X85355134Y-145911914D01* +X85307515Y-146007152D01* +X85259896Y-146054771D01* +X85164658Y-146102390D01* +X84783705Y-146102390D01* +X86307515Y-146578581D02* +X85736086Y-146578581D01* +X86021800Y-146578581D02* +X86021800Y-145578581D01* +X85926562Y-145721438D01* +X85831324Y-145816676D01* +X85736086Y-145864295D01* +X85553254Y-146410941D02* +X85219920Y-145934750D01* +X84981825Y-146410941D02* +X84981825Y-145410941D01* +X85362778Y-145410941D01* +X85458016Y-145458560D01* +X85505635Y-145506179D01* +X85553254Y-145601417D01* +X85553254Y-145744274D01* +X85505635Y-145839512D01* +X85458016Y-145887131D01* +X85362778Y-145934750D01* +X84981825Y-145934750D01* +X85934206Y-145506179D02* +X85981825Y-145458560D01* +X86077063Y-145410941D01* +X86315159Y-145410941D01* +X86410397Y-145458560D01* +X86458016Y-145506179D01* +X86505635Y-145601417D01* +X86505635Y-145696655D01* +X86458016Y-145839512D01* +X85886587Y-146410941D01* +X86505635Y-146410941D01* +X85240834Y-146946881D02* +X84907500Y-146470690D01* +X84669405Y-146946881D02* +X84669405Y-145946881D01* +X85050358Y-145946881D01* +X85145596Y-145994500D01* +X85193215Y-146042119D01* +X85240834Y-146137357D01* +X85240834Y-146280214D01* +X85193215Y-146375452D01* +X85145596Y-146423071D01* +X85050358Y-146470690D01* +X84669405Y-146470690D01* +X85574167Y-145946881D02* +X86193215Y-145946881D01* +X85859881Y-146327833D01* +X86002739Y-146327833D01* +X86097977Y-146375452D01* +X86145596Y-146423071D01* +X86193215Y-146518310D01* +X86193215Y-146756405D01* +X86145596Y-146851643D01* +X86097977Y-146899262D01* +X86002739Y-146946881D01* +X85717024Y-146946881D01* +X85621786Y-146899262D01* +X85574167Y-146851643D01* +X85736134Y-146756381D02* +X85402800Y-146280190D01* +X85164705Y-146756381D02* +X85164705Y-145756381D01* +X85545658Y-145756381D01* +X85640896Y-145804000D01* +X85688515Y-145851619D01* +X85736134Y-145946857D01* +X85736134Y-146089714D01* +X85688515Y-146184952D01* +X85640896Y-146232571D01* +X85545658Y-146280190D01* +X85164705Y-146280190D01* +X86593277Y-146089714D02* +X86593277Y-146756381D01* +X86355181Y-145708762D02* +X86117086Y-146423048D01* +X86736134Y-146423048D01* +X85357674Y-146969741D02* +X85024340Y-146493550D01* +X84786245Y-146969741D02* +X84786245Y-145969741D01* +X85167198Y-145969741D01* +X85262436Y-146017360D01* +X85310055Y-146064979D01* +X85357674Y-146160217D01* +X85357674Y-146303074D01* +X85310055Y-146398312D01* +X85262436Y-146445931D01* +X85167198Y-146493550D01* +X84786245Y-146493550D01* +X86262436Y-145969741D02* +X85786245Y-145969741D01* +X85738626Y-146445931D01* +X85786245Y-146398312D01* +X85881483Y-146350693D01* +X86119579Y-146350693D01* +X86214817Y-146398312D01* +X86262436Y-146445931D01* +X86310055Y-146541170D01* +X86310055Y-146779265D01* +X86262436Y-146874503D01* +X86214817Y-146922122D01* +X86119579Y-146969741D01* +X85881483Y-146969741D01* +X85786245Y-146922122D01* +X85738626Y-146874503D01* +X85245914Y-146718281D02* +X84912580Y-146242090D01* +X84674485Y-146718281D02* +X84674485Y-145718281D01* +X85055438Y-145718281D01* +X85150676Y-145765900D01* +X85198295Y-145813519D01* +X85245914Y-145908757D01* +X85245914Y-146051614D01* +X85198295Y-146146852D01* +X85150676Y-146194471D01* +X85055438Y-146242090D01* +X84674485Y-146242090D01* +X86103057Y-145718281D02* +X85912580Y-145718281D01* +X85817342Y-145765900D01* +X85769723Y-145813519D01* +X85674485Y-145956376D01* +X85626866Y-146146852D01* +X85626866Y-146527805D01* +X85674485Y-146623043D01* +X85722104Y-146670662D01* +X85817342Y-146718281D01* +X86007819Y-146718281D01* +X86103057Y-146670662D01* +X86150676Y-146623043D01* +X86198295Y-146527805D01* +X86198295Y-146289710D01* +X86150676Y-146194471D01* +X86103057Y-146146852D01* +X86007819Y-146099233D01* +X85817342Y-146099233D01* +X85722104Y-146146852D01* +X85674485Y-146194471D01* +X85626866Y-146289710D01* +X85126534Y-146857981D02* +X84793200Y-146381790D01* +X84555105Y-146857981D02* +X84555105Y-145857981D01* +X84936058Y-145857981D01* +X85031296Y-145905600D01* +X85078915Y-145953219D01* +X85126534Y-146048457D01* +X85126534Y-146191314D01* +X85078915Y-146286552D01* +X85031296Y-146334171D01* +X84936058Y-146381790D01* +X84555105Y-146381790D01* +X85459867Y-145857981D02* +X86126534Y-145857981D01* +X85697962Y-146857981D01* +X85024934Y-146680181D02* +X84691600Y-146203990D01* +X84453505Y-146680181D02* +X84453505Y-145680181D01* +X84834458Y-145680181D01* +X84929696Y-145727800D01* +X84977315Y-145775419D01* +X85024934Y-145870657D01* +X85024934Y-146013514D01* +X84977315Y-146108752D01* +X84929696Y-146156371D01* +X84834458Y-146203990D01* +X84453505Y-146203990D01* +X85596362Y-146108752D02* +X85501124Y-146061133D01* +X85453505Y-146013514D01* +X85405886Y-145918276D01* +X85405886Y-145870657D01* +X85453505Y-145775419D01* +X85501124Y-145727800D01* +X85596362Y-145680181D01* +X85786839Y-145680181D01* +X85882077Y-145727800D01* +X85929696Y-145775419D01* +X85977315Y-145870657D01* +X85977315Y-145918276D01* +X85929696Y-146013514D01* +X85882077Y-146061133D01* +X85786839Y-146108752D01* +X85596362Y-146108752D01* +X85501124Y-146156371D01* +X85453505Y-146203990D01* +X85405886Y-146299229D01* +X85405886Y-146489705D01* +X85453505Y-146584943D01* +X85501124Y-146632562D01* +X85596362Y-146680181D01* +X85786839Y-146680181D01* +X85882077Y-146632562D01* +X85929696Y-146584943D01* +X85977315Y-146489705D01* +X85977315Y-146299229D01* +X85929696Y-146203990D01* +X85882077Y-146156371D01* +X85786839Y-146108752D01* +X84948734Y-146502381D02* +X84615400Y-146026190D01* +X84377305Y-146502381D02* +X84377305Y-145502381D01* +X84758258Y-145502381D01* +X84853496Y-145550000D01* +X84901115Y-145597619D01* +X84948734Y-145692857D01* +X84948734Y-145835714D01* +X84901115Y-145930952D01* +X84853496Y-145978571D01* +X84758258Y-146026190D01* +X84377305Y-146026190D01* +X85424924Y-146502381D02* +X85615400Y-146502381D01* +X85710639Y-146454762D01* +X85758258Y-146407143D01* +X85853496Y-146264286D01* +X85901115Y-146073810D01* +X85901115Y-145692857D01* +X85853496Y-145597619D01* +X85805877Y-145550000D01* +X85710639Y-145502381D01* +X85520162Y-145502381D01* +X85424924Y-145550000D01* +X85377305Y-145597619D01* +X85329686Y-145692857D01* +X85329686Y-145930952D01* +X85377305Y-146026190D01* +X85424924Y-146073810D01* +X85520162Y-146121429D01* +X85710639Y-146121429D01* +X85805877Y-146073810D01* +X85853496Y-146026190D01* +X85901115Y-145930952D01* +X84447143Y-146603981D02* +X84113809Y-146127790D01* +X83875714Y-146603981D02* +X83875714Y-145603981D01* +X84256667Y-145603981D01* +X84351905Y-145651600D01* +X84399524Y-145699219D01* +X84447143Y-145794457D01* +X84447143Y-145937314D01* +X84399524Y-146032552D01* +X84351905Y-146080171D01* +X84256667Y-146127790D01* +X83875714Y-146127790D01* +X85399524Y-146603981D02* +X84828095Y-146603981D01* +X85113809Y-146603981D02* +X85113809Y-145603981D01* +X85018571Y-145746838D01* +X84923333Y-145842076D01* +X84828095Y-145889695D01* +X86018571Y-145603981D02* +X86113810Y-145603981D01* +X86209048Y-145651600D01* +X86256667Y-145699219D01* +X86304286Y-145794457D01* +X86351905Y-145984933D01* +X86351905Y-146223029D01* +X86304286Y-146413505D01* +X86256667Y-146508743D01* +X86209048Y-146556362D01* +X86113810Y-146603981D01* +X86018571Y-146603981D01* +X85923333Y-146556362D01* +X85875714Y-146508743D01* +X85828095Y-146413505D01* +X85780476Y-146223029D01* +X85780476Y-145984933D01* +X85828095Y-145794457D01* +X85875714Y-145699219D01* +X85923333Y-145651600D01* +X86018571Y-145603981D01* +X84650343Y-146578581D02* +X84317009Y-146102390D01* +X84078914Y-146578581D02* +X84078914Y-145578581D01* +X84459867Y-145578581D01* +X84555105Y-145626200D01* +X84602724Y-145673819D01* +X84650343Y-145769057D01* +X84650343Y-145911914D01* +X84602724Y-146007152D01* +X84555105Y-146054771D01* +X84459867Y-146102390D01* +X84078914Y-146102390D01* +X85602724Y-146578581D02* +X85031295Y-146578581D01* +X85317009Y-146578581D02* +X85317009Y-145578581D01* +X85221771Y-145721438D01* +X85126533Y-145816676D01* +X85031295Y-145864295D01* +X86555105Y-146578581D02* +X85983676Y-146578581D01* +X86269390Y-146578581D02* +X86269390Y-145578581D01* +X86174152Y-145721438D01* +X86078914Y-145816676D01* +X85983676Y-145864295D01* +X84726543Y-146527781D02* +X84393209Y-146051590D01* +X84155114Y-146527781D02* +X84155114Y-145527781D01* +X84536067Y-145527781D01* +X84631305Y-145575400D01* +X84678924Y-145623019D01* +X84726543Y-145718257D01* +X84726543Y-145861114D01* +X84678924Y-145956352D01* +X84631305Y-146003971D01* +X84536067Y-146051590D01* +X84155114Y-146051590D01* +X85678924Y-146527781D02* +X85107495Y-146527781D01* +X85393209Y-146527781D02* +X85393209Y-145527781D01* +X85297971Y-145670638D01* +X85202733Y-145765876D01* +X85107495Y-145813495D01* +X86059876Y-145623019D02* +X86107495Y-145575400D01* +X86202733Y-145527781D01* +X86440829Y-145527781D01* +X86536067Y-145575400D01* +X86583686Y-145623019D01* +X86631305Y-145718257D01* +X86631305Y-145813495D01* +X86583686Y-145956352D01* +X86012257Y-146527781D01* +X86631305Y-146527781D01* +X84878943Y-146680181D02* +X84545609Y-146203990D01* +X84307514Y-146680181D02* +X84307514Y-145680181D01* +X84688467Y-145680181D01* +X84783705Y-145727800D01* +X84831324Y-145775419D01* +X84878943Y-145870657D01* +X84878943Y-146013514D01* +X84831324Y-146108752D01* +X84783705Y-146156371D01* +X84688467Y-146203990D01* +X84307514Y-146203990D01* +X85831324Y-146680181D02* +X85259895Y-146680181D01* +X85545609Y-146680181D02* +X85545609Y-145680181D01* +X85450371Y-145823038D01* +X85355133Y-145918276D01* +X85259895Y-145965895D01* +X86164657Y-145680181D02* +X86783705Y-145680181D01* +X86450371Y-146061133D01* +X86593229Y-146061133D01* +X86688467Y-146108752D01* +X86736086Y-146156371D01* +X86783705Y-146251610D01* +X86783705Y-146489705D01* +X86736086Y-146584943D01* +X86688467Y-146632562D01* +X86593229Y-146680181D01* +X86307514Y-146680181D01* +X86212276Y-146632562D01* +X86164657Y-146584943D01* +X84701143Y-146629381D02* +X84367809Y-146153190D01* +X84129714Y-146629381D02* +X84129714Y-145629381D01* +X84510667Y-145629381D01* +X84605905Y-145677000D01* +X84653524Y-145724619D01* +X84701143Y-145819857D01* +X84701143Y-145962714D01* +X84653524Y-146057952D01* +X84605905Y-146105571D01* +X84510667Y-146153190D01* +X84129714Y-146153190D01* +X85653524Y-146629381D02* +X85082095Y-146629381D01* +X85367809Y-146629381D02* +X85367809Y-145629381D01* +X85272571Y-145772238D01* +X85177333Y-145867476D01* +X85082095Y-145915095D01* +X86510667Y-145962714D02* +X86510667Y-146629381D01* +X86272571Y-145581762D02* +X86034476Y-146296048D01* +X86653524Y-146296048D01* +X82743381Y-154947857D02* +X82267190Y-155281191D01* +X82743381Y-155519286D02* +X81743381Y-155519286D01* +X81743381Y-155138333D01* +X81791000Y-155043095D01* +X81838619Y-154995476D01* +X81933857Y-154947857D01* +X82076714Y-154947857D01* +X82171952Y-154995476D01* +X82219571Y-155043095D01* +X82267190Y-155138333D01* +X82267190Y-155519286D01* +X82743381Y-153995476D02* +X82743381Y-154566905D01* +X82743381Y-154281191D02* +X81743381Y-154281191D01* +X81886238Y-154376429D01* +X81981476Y-154471667D01* +X82029095Y-154566905D01* +X81743381Y-153090714D02* +X81743381Y-153566905D01* +X82219571Y-153614524D01* +X82171952Y-153566905D01* +X82124333Y-153471667D01* +X82124333Y-153233571D01* +X82171952Y-153138333D01* +X82219571Y-153090714D01* +X82314810Y-153043095D01* +X82552905Y-153043095D01* +X82648143Y-153090714D01* +X82695762Y-153138333D01* +X82743381Y-153233571D01* +X82743381Y-153471667D01* +X82695762Y-153566905D01* +X82648143Y-153614524D01* +X78833743Y-151277581D02* +X78500409Y-150801390D01* +X78262314Y-151277581D02* +X78262314Y-150277581D01* +X78643267Y-150277581D01* +X78738505Y-150325200D01* +X78786124Y-150372819D01* +X78833743Y-150468057D01* +X78833743Y-150610914D01* +X78786124Y-150706152D01* +X78738505Y-150753771D01* +X78643267Y-150801390D01* +X78262314Y-150801390D01* +X79786124Y-151277581D02* +X79214695Y-151277581D01* +X79500409Y-151277581D02* +X79500409Y-150277581D01* +X79405171Y-150420438D01* +X79309933Y-150515676D01* +X79214695Y-150563295D01* +X80643267Y-150277581D02* +X80452790Y-150277581D01* +X80357552Y-150325200D01* +X80309933Y-150372819D01* +X80214695Y-150515676D01* +X80167076Y-150706152D01* +X80167076Y-151087105D01* +X80214695Y-151182343D01* +X80262314Y-151229962D01* +X80357552Y-151277581D01* +X80548029Y-151277581D01* +X80643267Y-151229962D01* +X80690886Y-151182343D01* +X80738505Y-151087105D01* +X80738505Y-150849010D01* +X80690886Y-150753771D01* +X80643267Y-150706152D01* +X80548029Y-150658533D01* +X80357552Y-150658533D01* +X80262314Y-150706152D01* +X80214695Y-150753771D01* +X80167076Y-150849010D01* +X84599543Y-146807181D02* +X84266209Y-146330990D01* +X84028114Y-146807181D02* +X84028114Y-145807181D01* +X84409067Y-145807181D01* +X84504305Y-145854800D01* +X84551924Y-145902419D01* +X84599543Y-145997657D01* +X84599543Y-146140514D01* +X84551924Y-146235752D01* +X84504305Y-146283371D01* +X84409067Y-146330990D01* +X84028114Y-146330990D01* +X85551924Y-146807181D02* +X84980495Y-146807181D01* +X85266209Y-146807181D02* +X85266209Y-145807181D01* +X85170971Y-145950038D01* +X85075733Y-146045276D01* +X84980495Y-146092895D01* +X85885257Y-145807181D02* +X86551924Y-145807181D01* +X86123352Y-146807181D01* +X84701143Y-146644621D02* +X84367809Y-146168430D01* +X84129714Y-146644621D02* +X84129714Y-145644621D01* +X84510667Y-145644621D01* +X84605905Y-145692240D01* +X84653524Y-145739859D01* +X84701143Y-145835097D01* +X84701143Y-145977954D01* +X84653524Y-146073192D01* +X84605905Y-146120811D01* +X84510667Y-146168430D01* +X84129714Y-146168430D01* +X85653524Y-146644621D02* +X85082095Y-146644621D01* +X85367809Y-146644621D02* +X85367809Y-145644621D01* +X85272571Y-145787478D01* +X85177333Y-145882716D01* +X85082095Y-145930335D01* +X86224952Y-146073192D02* +X86129714Y-146025573D01* +X86082095Y-145977954D01* +X86034476Y-145882716D01* +X86034476Y-145835097D01* +X86082095Y-145739859D01* +X86129714Y-145692240D01* +X86224952Y-145644621D01* +X86415429Y-145644621D01* +X86510667Y-145692240D01* +X86558286Y-145739859D01* +X86605905Y-145835097D01* +X86605905Y-145882716D01* +X86558286Y-145977954D01* +X86510667Y-146025573D01* +X86415429Y-146073192D01* +X86224952Y-146073192D01* +X86129714Y-146120811D01* +X86082095Y-146168430D01* +X86034476Y-146263669D01* +X86034476Y-146454145D01* +X86082095Y-146549383D01* +X86129714Y-146597002D01* +X86224952Y-146644621D01* +X86415429Y-146644621D01* +X86510667Y-146597002D01* +X86558286Y-146549383D01* +X86605905Y-146454145D01* +X86605905Y-146263669D01* +X86558286Y-146168430D01* +X86510667Y-146120811D01* +X86415429Y-146073192D01* +X97705943Y-145943581D02* +X97372609Y-145467390D01* +X97134514Y-145943581D02* +X97134514Y-144943581D01* +X97515467Y-144943581D01* +X97610705Y-144991200D01* +X97658324Y-145038819D01* +X97705943Y-145134057D01* +X97705943Y-145276914D01* +X97658324Y-145372152D01* +X97610705Y-145419771D01* +X97515467Y-145467390D01* +X97134514Y-145467390D01* +X98658324Y-145943581D02* +X98086895Y-145943581D01* +X98372609Y-145943581D02* +X98372609Y-144943581D01* +X98277371Y-145086438D01* +X98182133Y-145181676D01* +X98086895Y-145229295D01* +X99134514Y-145943581D02* +X99324990Y-145943581D01* +X99420229Y-145895962D01* +X99467848Y-145848343D01* +X99563086Y-145705486D01* +X99610705Y-145515010D01* +X99610705Y-145134057D01* +X99563086Y-145038819D01* +X99515467Y-144991200D01* +X99420229Y-144943581D01* +X99229752Y-144943581D01* +X99134514Y-144991200D01* +X99086895Y-145038819D01* +X99039276Y-145134057D01* +X99039276Y-145372152D01* +X99086895Y-145467390D01* +X99134514Y-145515010D01* +X99229752Y-145562629D01* +X99420229Y-145562629D01* +X99515467Y-145515010D01* +X99563086Y-145467390D01* +X99610705Y-145372152D01* +X101363543Y-145994381D02* +X101030209Y-145518190D01* +X100792114Y-145994381D02* +X100792114Y-144994381D01* +X101173067Y-144994381D01* +X101268305Y-145042000D01* +X101315924Y-145089619D01* +X101363543Y-145184857D01* +X101363543Y-145327714D01* +X101315924Y-145422952D01* +X101268305Y-145470571D01* +X101173067Y-145518190D01* +X100792114Y-145518190D01* +X101744495Y-145089619D02* +X101792114Y-145042000D01* +X101887352Y-144994381D01* +X102125448Y-144994381D01* +X102220686Y-145042000D01* +X102268305Y-145089619D01* +X102315924Y-145184857D01* +X102315924Y-145280095D01* +X102268305Y-145422952D01* +X101696876Y-145994381D01* +X102315924Y-145994381D01* +X102934971Y-144994381D02* +X103030210Y-144994381D01* +X103125448Y-145042000D01* +X103173067Y-145089619D01* +X103220686Y-145184857D01* +X103268305Y-145375333D01* +X103268305Y-145613429D01* +X103220686Y-145803905D01* +X103173067Y-145899143D01* +X103125448Y-145946762D01* +X103030210Y-145994381D01* +X102934971Y-145994381D01* +X102839733Y-145946762D01* +X102792114Y-145899143D01* +X102744495Y-145803905D01* +X102696876Y-145613429D01* +X102696876Y-145375333D01* +X102744495Y-145184857D01* +X102792114Y-145089619D01* +X102839733Y-145042000D01* +X102934971Y-144994381D01* +X109321695Y-143876781D02* +X109321695Y-144686305D01* +X109369314Y-144781543D01* +X109416933Y-144829162D01* +X109512171Y-144876781D01* +X109702648Y-144876781D01* +X109797886Y-144829162D01* +X109845505Y-144781543D01* +X109893124Y-144686305D01* +X109893124Y-143876781D01* +X110893124Y-144876781D02* +X110321695Y-144876781D01* +X110607409Y-144876781D02* +X110607409Y-143876781D01* +X110512171Y-144019638D01* +X110416933Y-144114876D01* +X110321695Y-144162495D01* +X84008055Y-157648661D02* +X84008055Y-158458185D01* +X84055674Y-158553423D01* +X84103293Y-158601042D01* +X84198531Y-158648661D01* +X84389008Y-158648661D01* +X84484246Y-158601042D01* +X84531865Y-158553423D01* +X84579484Y-158458185D01* +X84579484Y-157648661D01* +X85008055Y-157743899D02* +X85055674Y-157696280D01* +X85150912Y-157648661D01* +X85389008Y-157648661D01* +X85484246Y-157696280D01* +X85531865Y-157743899D01* +X85579484Y-157839137D01* +X85579484Y-157934375D01* +X85531865Y-158077232D01* +X84960436Y-158648661D01* +X85579484Y-158648661D01* +X112928495Y-158659581D02* +X112928495Y-159469105D01* +X112976114Y-159564343D01* +X113023733Y-159611962D01* +X113118971Y-159659581D01* +X113309448Y-159659581D01* +X113404686Y-159611962D01* +X113452305Y-159564343D01* +X113499924Y-159469105D01* +X113499924Y-158659581D01* +X113880876Y-158659581D02* +X114499924Y-158659581D01* +X114166590Y-159040533D01* +X114309448Y-159040533D01* +X114404686Y-159088152D01* +X114452305Y-159135771D01* +X114499924Y-159231010D01* +X114499924Y-159469105D01* +X114452305Y-159564343D01* +X114404686Y-159611962D01* +X114309448Y-159659581D01* +X114023733Y-159659581D01* +X113928495Y-159611962D01* +X113880876Y-159564343D01* +M02* diff --git a/PCB/OUTPUT_V2/Tinylab_proto1.drl b/PCB/OUTPUT_V2/Tinylab_proto1.drl new file mode 100644 index 00000000..98655d26 --- /dev/null +++ b/PCB/OUTPUT_V2/Tinylab_proto1.drl @@ -0,0 +1,100 @@ +M48 +;DRILL file {KiCad (2015-08-05 BZR 6055, Git fa29c62)-product} date 24/12/2015 1:45:37 PM +;FORMAT={2:4/ absolute / inch / keep zeros} +FMAT,2 +INCH,TZ +T1C0.016 +T2C0.020 +T3C0.022 +T4C0.031 +T5C0.039 +T6C0.040 +T7C0.050 +% +G90 +G05 +M72 +T1 +X033000Y-061750 +X033600Y-053200 +X033700Y-061350 +X033950Y-062900 +X034550Y-059900 +X035200Y-054300 +X035750Y-056050 +X036050Y-060300 +X036050Y-062100 +X037800Y-055450 +X038300Y-061450 +X038450Y-062300 +X038750Y-054850 +X039100Y-063400 +X039300Y-058250 +X039350Y-056650 +X039750Y-055950 +X039900Y-062200 +X040550Y-055950 +X040750Y-059050 +X040850Y-056950 +X040850Y-057750 +X041350Y-056600 +X041450Y-059050 +X041750Y-055150 +X041750Y-056600 +X042350Y-055100 +X043750Y-055750 +X044350Y-060400 +X044350Y-061150 +X045150Y-053400 +X045450Y-055500 +T4 +X030116Y-053900 +X031100Y-053900 +X036750Y-055666 +X036750Y-056650 +X045700Y-056700 +X045700Y-057684 +T5 +X032500Y-053199 +X036400Y-054301 +T6 +X030000Y-056000 +X030000Y-057000 +X030000Y-058000 +X030000Y-059000 +X030000Y-060000 +X030000Y-061000 +X030000Y-062000 +X030000Y-063000 +X033000Y-055500 +X033000Y-056500 +X034000Y-055500 +X034000Y-056500 +X037200Y-059800 +X037200Y-060800 +X037200Y-061800 +X037200Y-062800 +X039500Y-053300 +X039500Y-054300 +X039500Y-055300 +X041400Y-053300 +X041400Y-054300 +X042400Y-053300 +X042400Y-054300 +X046000Y-062000 +X046000Y-063000 +T7 +X032400Y-054301 +X036500Y-053199 +T2 +X043722Y-053624G85X043722Y-053880 +G05 +X046478Y-053624G85X046478Y-053880 +G05 +T3 +X044175Y-054815G85X044057Y-054815 +G05 +X046144Y-054815G85X046026Y-054815 +G05 +T0 +M30 diff --git a/PCB/OUTPUT_V2/Tinylab_proto1.net b/PCB/OUTPUT_V2/Tinylab_proto1.net new file mode 100644 index 00000000..d0c1a6c7 --- /dev/null +++ b/PCB/OUTPUT_V2/Tinylab_proto1.net @@ -0,0 +1,935 @@ +(export (version D) + (design + (source C:\Users\Esposch\Documents\KiCAD\Tinylab_proto1\Tinylab_proto1.sch) + (date "01/02/2016 10:44:42 AM") + (tool "Eeschema (2015-08-05 BZR 6055, Git fa29c62)-product") + (sheet (number 1) (name /) (tstamps /) + (title_block + (title) + (company) + (rev) + (date) + (source Tinylab_proto1.sch) + (comment (number 1) (value "")) + (comment (number 2) (value "")) + (comment (number 3) (value "")) + (comment (number 4) (value ""))))) + (components + (comp (ref U2) + (value LM324) + (footprint Housings_SOIC:SOIC-14_3.9x8.7mm_Pitch1.27mm) + (libsource (lib linear) (part LM324)) + (sheetpath (names /) (tstamps /)) + (tstamp 55CA87E2)) + (comp (ref IC1) + (value ATXMEGA16A4U-A) + (footprint Housings_QFP:LQFP-44_10x10mm_Pitch0.8mm) + (libsource (lib atmel) (part ATXMEGA16A4U-A)) + (sheetpath (names /) (tstamps /)) + (tstamp 55CA8F25)) + (comp (ref P2) + (value USB_OTG) + (footprint Connect:USB_Micro-B) + (libsource (lib conn) (part USB_OTG)) + (sheetpath (names /) (tstamps /)) + (tstamp 55CA90D2)) + (comp (ref U1) + (value 78L05) + (footprint SMD:SOT-23-3) + (libsource (lib regul) (part 78L05)) + (sheetpath (names /) (tstamps /)) + (tstamp 55CA99FA)) + (comp (ref R1) + (value R) + (footprint Resistors_SMD:R_0603) + (libsource (lib device) (part R)) + (sheetpath (names /) (tstamps /)) + (tstamp 55CAAB95)) + (comp (ref R3) + (value R) + (footprint Resistors_SMD:R_0603) + (libsource (lib device) (part R)) + (sheetpath (names /) (tstamps /)) + (tstamp 55CAABF4)) + (comp (ref R5) + (value R) + (footprint Resistors_SMD:R_0603) + (libsource (lib device) (part R)) + (sheetpath (names /) (tstamps /)) + (tstamp 55CAAC5F)) + (comp (ref R6) + (value R) + (footprint Resistors_SMD:R_0603) + (libsource (lib device) (part R)) + (sheetpath (names /) (tstamps /)) + (tstamp 55CAACD2)) + (comp (ref R4) + (value R) + (footprint Resistors_SMD:R_0603) + (libsource (lib device) (part R)) + (sheetpath (names /) (tstamps /)) + (tstamp 55CAAD11)) + (comp (ref R2) + (value R) + (footprint Resistors_SMD:R_0603) + (libsource (lib device) (part R)) + (sheetpath (names /) (tstamps /)) + (tstamp 55CAAD4C)) + (comp (ref P1) + (value SCOPE_IN) + (footprint Pin_Headers:Pin_Header_Straight_1x04) + (libsource (lib conn) (part CONN_01X04)) + (sheetpath (names /) (tstamps /)) + (tstamp 55CAB35C)) + (comp (ref C2) + (value C) + (footprint Capacitors_SMD:C_0603) + (libsource (lib device) (part C_Small)) + (sheetpath (names /) (tstamps /)) + (tstamp 55CAB4DE)) + (comp (ref C1) + (value C) + (footprint Capacitors_SMD:C_0603) + (libsource (lib device) (part C_Small)) + (sheetpath (names /) (tstamps /)) + (tstamp 55CAB611)) + (comp (ref C3) + (value C_Small) + (footprint Capacitors_SMD:C_0603) + (libsource (lib device) (part C_Small)) + (sheetpath (names /) (tstamps /)) + (tstamp 55CB13E1)) + (comp (ref C4) + (value C_Small) + (footprint Capacitors_SMD:C_0603) + (libsource (lib device) (part C_Small)) + (sheetpath (names /) (tstamps /)) + (tstamp 55CB147C)) + (comp (ref R22) + (value R) + (footprint Resistors_SMD:R_0603) + (libsource (lib device) (part R)) + (sheetpath (names /) (tstamps /)) + (tstamp 55CB4680)) + (comp (ref C13) + (value C) + (footprint Capacitors_SMD:C_0603) + (libsource (lib device) (part C_Small)) + (sheetpath (names /) (tstamps /)) + (tstamp 55CB630B)) + (comp (ref R24) + (value R) + (footprint Resistors_SMD:R_0603) + (libsource (lib device) (part R)) + (sheetpath (names /) (tstamps /)) + (tstamp 55CB9020)) + (comp (ref R11) + (value R) + (footprint Resistors_SMD:R_0603) + (libsource (lib device) (part R)) + (sheetpath (names /) (tstamps /)) + (tstamp 55CBCD2A)) + (comp (ref R7) + (value R) + (footprint Resistors_SMD:R_0603) + (libsource (lib device) (part R)) + (sheetpath (names /) (tstamps /)) + (tstamp 55CBCDA5)) + (comp (ref R13) + (value R) + (footprint Resistors_SMD:R_0603) + (libsource (lib device) (part R)) + (sheetpath (names /) (tstamps /)) + (tstamp 55CBE0F4)) + (comp (ref R9) + (value R) + (footprint Resistors_SMD:R_0603) + (libsource (lib device) (part R)) + (sheetpath (names /) (tstamps /)) + (tstamp 55CBE16B)) + (comp (ref R14) + (value R) + (footprint Resistors_SMD:R_0603) + (libsource (lib device) (part R)) + (sheetpath (names /) (tstamps /)) + (tstamp 55CBE21C)) + (comp (ref R10) + (value R) + (footprint Resistors_SMD:R_0603) + (libsource (lib device) (part R)) + (sheetpath (names /) (tstamps /)) + (tstamp 55CBE2C7)) + (comp (ref R12) + (value R) + (footprint Resistors_SMD:R_0603) + (libsource (lib device) (part R)) + (sheetpath (names /) (tstamps /)) + (tstamp 55CBE362)) + (comp (ref R8) + (value R) + (footprint Resistors_SMD:R_0603) + (libsource (lib device) (part R)) + (sheetpath (names /) (tstamps /)) + (tstamp 55CBE401)) + (comp (ref P3) + (value DIG_OUT) + (footprint Pin_Headers:Pin_Header_Straight_1x04) + (libsource (lib conn) (part CONN_01X04)) + (sheetpath (names /) (tstamps /)) + (tstamp 55CBF4D5)) + (comp (ref P7) + (value HVO) + (footprint Pin_Headers:Pin_Header_Straight_2x02) + (libsource (lib conn) (part CONN_02X02)) + (sheetpath (names /) (tstamps /)) + (tstamp 55CC540F)) + (comp (ref C5) + (value C_Small) + (footprint Capacitors_SMD:C_0603) + (libsource (lib device) (part C_Small)) + (sheetpath (names /) (tstamps /)) + (tstamp 55D60181)) + (comp (ref U4) + (value DMN63D8LDW) + (footprint TO_SOT_Packages_SMD:SOT-363) + (libsource (lib ESPO_PART) (part DMN63D8LDW)) + (sheetpath (names /) (tstamps /)) + (tstamp 55D6ACFD)) + (comp (ref P8) + (value DIG_IN) + (footprint Pin_Headers:Pin_Header_Straight_1x02) + (libsource (lib conn) (part CONN_01X02)) + (sheetpath (names /) (tstamps /)) + (tstamp 55D6DB77)) + (comp (ref F1) + (value F_Small) + (footprint Capacitors_SMD:C_1206) + (libsource (lib device) (part F_Small)) + (sheetpath (names /) (tstamps /)) + (tstamp 55D739F3)) + (comp (ref C12) + (value C_Small) + (footprint Capacitors_SMD:C_0603) + (libsource (lib device) (part C_Small)) + (sheetpath (names /) (tstamps /)) + (tstamp 55D75F49)) + (comp (ref P5) + (value CONN_01X03) + (footprint Pin_Headers:Pin_Header_Straight_1x03) + (libsource (lib conn) (part CONN_01X03)) + (sheetpath (names /) (tstamps /)) + (tstamp 56065DA8)) + (comp (ref L1) + (value INDUCTOR) + (footprint Inductors:INDUCTOR_V) + (libsource (lib device) (part INDUCTOR)) + (sheetpath (names /) (tstamps /)) + (tstamp 5606EE9E)) + (comp (ref D1) + (value D_Schottky) + (footprint Diodes_ThroughHole:Diode_DO-41_SOD81_Horizontal_RM10) + (libsource (lib device) (part D_Schottky)) + (sheetpath (names /) (tstamps /)) + (tstamp 5606FDB4)) + (comp (ref C9) + (value CP1) + (footprint Capacitors_ThroughHole:C_Radial_D5_L11_P2.5) + (libsource (lib device) (part CP1)) + (sheetpath (names /) (tstamps /)) + (tstamp 560719D9)) + (comp (ref C10) + (value C) + (footprint Capacitors_SMD:C_0603) + (libsource (lib device) (part C)) + (sheetpath (names /) (tstamps /)) + (tstamp 56071A50)) + (comp (ref C16) + (value C) + (footprint Capacitors_SMD:C_0603) + (libsource (lib device) (part C)) + (sheetpath (names /) (tstamps /)) + (tstamp 5607355F)) + (comp (ref C15) + (value CP1) + (footprint Capacitors_ThroughHole:C_Radial_D6.3_L11.2_P2.5) + (libsource (lib device) (part CP1)) + (sheetpath (names /) (tstamps /)) + (tstamp 560735FE)) + (comp (ref P4) + (value PDI) + (footprint Pin_Headers:Pin_Header_Straight_2x02) + (libsource (lib conn) (part CONN_02X02)) + (sheetpath (names /) (tstamps /)) + (tstamp 56069A87)) + (comp (ref Q1) + (value Q_NMOS_GSD) + (footprint SMD:SOT-23-3) + (libsource (lib device) (part Q_NMOS_GSD)) + (sheetpath (names /) (tstamps /)) + (tstamp 5606F6D4)) + (comp (ref C7) + (value C) + (footprint Capacitors_SMD:C_0603) + (libsource (lib device) (part C)) + (sheetpath (names /) (tstamps /)) + (tstamp 5609699F)) + (comp (ref R23) + (value R) + (footprint Resistors_SMD:R_0603) + (libsource (lib device) (part R)) + (sheetpath (names /) (tstamps /)) + (tstamp 566DE721)) + (comp (ref R25) + (value R) + (footprint Resistors_SMD:R_0603) + (libsource (lib device) (part R)) + (sheetpath (names /) (tstamps /)) + (tstamp 566DE7E8)) + (comp (ref C14) + (value C) + (footprint Capacitors_SMD:C_0603) + (libsource (lib device) (part C_Small)) + (sheetpath (names /) (tstamps /)) + (tstamp 566DF655)) + (comp (ref P6) + (value DAC_OUT) + (footprint Pin_Headers:Pin_Header_Straight_1x04) + (libsource (lib conn) (part CONN_01X04)) + (sheetpath (names /) (tstamps /)) + (tstamp 566DF832)) + (comp (ref R26) + (value R) + (footprint Resistors_SMD:R_0603) + (libsource (lib device) (part R)) + (sheetpath (names /) (tstamps /)) + (tstamp 566E5C29)) + (comp (ref R27) + (value R) + (footprint Resistors_SMD:R_0603) + (libsource (lib device) (part R)) + (sheetpath (names /) (tstamps /)) + (tstamp 566E5CBE)) + (comp (ref C6) + (value CP1) + (footprint Capacitors_ThroughHole:C_Radial_D5_L11_P2.5) + (libsource (lib device) (part CP1)) + (sheetpath (names /) (tstamps /)) + (tstamp 566F5A75)) + (comp (ref R19) + (value R) + (footprint Resistors_SMD:R_0603) + (libsource (lib device) (part R)) + (sheetpath (names /) (tstamps /)) + (tstamp 56AECD86)) + (comp (ref R21) + (value R) + (footprint Resistors_SMD:R_0603) + (libsource (lib device) (part R)) + (sheetpath (names /) (tstamps /)) + (tstamp 56AF0DE2)) + (comp (ref C11) + (value C) + (footprint Capacitors_SMD:C_0603) + (libsource (lib device) (part C)) + (sheetpath (names /) (tstamps /)) + (tstamp 5608B4BE)) + (comp (ref C8) + (value C) + (footprint Capacitors_SMD:C_0603) + (libsource (lib device) (part C)) + (sheetpath (names /) (tstamps /)) + (tstamp 56AF91A3)) + (comp (ref R17) + (value R) + (footprint Resistors_SMD:R_0603) + (libsource (lib device) (part R)) + (sheetpath (names /) (tstamps /)) + (tstamp 56AFE83E)) + (comp (ref R18) + (value R) + (footprint Resistors_SMD:R_0603) + (libsource (lib device) (part R)) + (sheetpath (names /) (tstamps /)) + (tstamp 56AFE8F3)) + (comp (ref U3) + (value DMN63D8LDW) + (footprint TO_SOT_Packages_SMD:SOT-363) + (libsource (lib ESPO_PART) (part DMN63D8LDW)) + (sheetpath (names /) (tstamps /)) + (tstamp 56B012DD)) + (comp (ref R20) + (value R) + (footprint Resistors_SMD:R_0603) + (libsource (lib device) (part R)) + (sheetpath (names /) (tstamps /)) + (tstamp 56B0C682)) + (comp (ref R15) + (value R) + (footprint Resistors_SMD:R_0603) + (libsource (lib device) (part R)) + (sheetpath (names /) (tstamps /)) + (tstamp 56B0C779)) + (comp (ref R16) + (value R) + (footprint Resistors_SMD:R_0603) + (libsource (lib device) (part R)) + (sheetpath (names /) (tstamps /)) + (tstamp 56B0C86E))) + (libparts + (libpart (lib device) (part C) + (description "Unpolarized capacitor") + (footprints + (fp C?) + (fp C_????_*) + (fp C_????) + (fp SMD*_c) + (fp Capacitor*)) + (fields + (field (name Reference) C) + (field (name Value) C)) + (pins + (pin (num 1) (name ~) (type passive)) + (pin (num 2) (name ~) (type passive)))) + (libpart (lib device) (part CP1) + (description "Polarised capacitor") + (footprints + (fp SMD*_Pol) + (fp c_elec*) + (fp C*elec) + (fp TantalC*) + (fp Elko*) + (fp CP*)) + (fields + (field (name Reference) C) + (field (name Value) CP1)) + (pins + (pin (num 1) (name ~) (type passive)) + (pin (num 2) (name ~) (type passive)))) + (libpart (lib device) (part C_Small) + (description "Unpolarized capacitor") + (footprints + (fp C?) + (fp C_????_*) + (fp C_????) + (fp SMD*_c) + (fp Capacitor*)) + (fields + (field (name Reference) C) + (field (name Value) C_Small)) + (pins + (pin (num 1) (name ~) (type passive)) + (pin (num 2) (name ~) (type passive)))) + (libpart (lib device) (part D_Schottky) + (description "Diode schottky") + (footprints + (fp D-Pak_TO252AA) + (fp Diode_*) + (fp *SingleDiode) + (fp *SingleDiode*) + (fp *_Diode_*)) + (fields + (field (name Reference) D) + (field (name Value) D_Schottky)) + (pins + (pin (num 1) (name K) (type passive)) + (pin (num 2) (name A) (type passive)))) + (libpart (lib device) (part F_Small) + (description Fuse) + (footprints + (fp CP*) + (fp SM*)) + (fields + (field (name Reference) F) + (field (name Value) F_Small)) + (pins + (pin (num 1) (name ~) (type passive)) + (pin (num 2) (name ~) (type passive)))) + (libpart (lib device) (part INDUCTOR) + (fields + (field (name Reference) L) + (field (name Value) INDUCTOR)) + (pins + (pin (num 1) (name 1) (type passive)) + (pin (num 2) (name 2) (type passive)))) + (libpart (lib device) (part Q_NMOS_GSD) + (description "Transistor N-MOSFET (general)") + (fields + (field (name Reference) Q) + (field (name Value) Q_NMOS_GSD)) + (pins + (pin (num 1) (name G) (type input)) + (pin (num 2) (name S) (type passive)) + (pin (num 3) (name D) (type passive)))) + (libpart (lib device) (part R) + (description Resistor) + (footprints + (fp R_*) + (fp Resistor_*)) + (fields + (field (name Reference) R) + (field (name Value) R)) + (pins + (pin (num 1) (name ~) (type passive)) + (pin (num 2) (name ~) (type passive)))) + (libpart (lib conn) (part CONN_01X02) + (footprints + (fp Pin_Header_Straight_1X02) + (fp Pin_Header_Angled_1X02) + (fp Socket_Strip_Straight_1X02) + (fp Socket_Strip_Angled_1X02)) + (fields + (field (name Reference) P) + (field (name Value) CONN_01X02)) + (pins + (pin (num 1) (name P1) (type passive)) + (pin (num 2) (name P2) (type passive)))) + (libpart (lib conn) (part CONN_01X03) + (footprints + (fp Pin_Header_Straight_1X03) + (fp Pin_Header_Angled_1X03) + (fp Socket_Strip_Straight_1X03) + (fp Socket_Strip_Angled_1X03)) + (fields + (field (name Reference) P) + (field (name Value) CONN_01X03)) + (pins + (pin (num 1) (name P1) (type passive)) + (pin (num 2) (name P2) (type passive)) + (pin (num 3) (name P3) (type passive)))) + (libpart (lib conn) (part CONN_01X04) + (footprints + (fp Pin_Header_Straight_1X04) + (fp Pin_Header_Angled_1X04) + (fp Socket_Strip_Straight_1X04) + (fp Socket_Strip_Angled_1X04)) + (fields + (field (name Reference) P) + (field (name Value) CONN_01X04)) + (pins + (pin (num 1) (name P1) (type passive)) + (pin (num 2) (name P2) (type passive)) + (pin (num 3) (name P3) (type passive)) + (pin (num 4) (name P4) (type passive)))) + (libpart (lib conn) (part CONN_02X02) + (footprints + (fp Pin_Header_Straight_2X02) + (fp Pin_Header_Angled_2X02) + (fp Socket_Strip_Straight_2X02) + (fp Socket_Strip_Angled_2X02)) + (fields + (field (name Reference) P) + (field (name Value) CONN_02X02)) + (pins + (pin (num 1) (name P1) (type passive)) + (pin (num 2) (name P2) (type passive)) + (pin (num 3) (name P3) (type passive)) + (pin (num 4) (name P4) (type passive)))) + (libpart (lib conn) (part USB_OTG) + (description "micro/mini connector") + (footprints + (fp USB*)) + (fields + (field (name Reference) P) + (field (name Value) USB_OTG)) + (pins + (pin (num 1) (name VCC) (type power_out)) + (pin (num 2) (name D-) (type passive)) + (pin (num 3) (name D+) (type passive)) + (pin (num 4) (name ID) (type power_in)) + (pin (num 5) (name GND) (type power_in)) + (pin (num 6) (name shield) (type passive)))) + (libpart (lib linear) (part LM2902N) + (aliases + (alias LM324) + (alias TLC274) + (alias TL074) + (alias LM324N) + (alias LM324AN)) + (description "Quad Op amp.") + (docs op_amps/lm324.pdf) + (fields + (field (name Reference) U) + (field (name Value) LM2902N)) + (pins + (pin (num 1) (name ~) (type output)) + (pin (num 2) (name -) (type input)) + (pin (num 3) (name +) (type input)) + (pin (num 4) (name V+) (type power_in)) + (pin (num 5) (name +) (type input)) + (pin (num 6) (name -) (type input)) + (pin (num 7) (name ~) (type output)) + (pin (num 8) (name ~) (type output)) + (pin (num 9) (name -) (type input)) + (pin (num 10) (name +) (type input)) + (pin (num 11) (name V-) (type power_in)) + (pin (num 12) (name +) (type input)) + (pin (num 13) (name -) (type input)) + (pin (num 14) (name ~) (type output)))) + (libpart (lib regul) (part 7805) + (aliases + (alias LM7805) + (alias LM7812) + (alias 78L05)) + (description "Linear Regulator +5V") + (docs regulator\lm78xx.pdf) + (fields + (field (name Reference) U) + (field (name Value) 7805)) + (pins + (pin (num 1) (name GND) (type input)) + (pin (num 2) (name VO) (type power_out)) + (pin (num 3) (name VI) (type input)))) + (libpart (lib atmel) (part ATXMEGA16A4U-A) + (aliases + (alias ATXMEGA32A4U-A) + (alias ATXMEGA64A4U-A) + (alias ATXMEGA128A4U-A)) + (description "TQFP44, 16k Flash, 4k Boot, 2k SRAM, 1k EEPROM, JTAG, USB") + (docs http://www.atmel.com/Images/Atmel-8387-8-and16-bit-AVR-Microcontroller-XMEGA-A4U_Datasheet.pdf) + (fields + (field (name Reference) IC) + (field (name Value) ATXMEGA16A4U-A) + (field (name Footprint) TQFP44)) + (pins + (pin (num 1) (name AC5/ADC5/PA5) (type BiDi)) + (pin (num 2) (name AC1OUT/AC6/ADC6/PA6) (type BiDi)) + (pin (num 3) (name AC0OUT/AC7/ADC7/PA7) (type BiDi)) + (pin (num 4) (name AREFB/ADC8/PB0) (type BiDi)) + (pin (num 5) (name ADC9/PB1) (type BiDi)) + (pin (num 6) (name DAC0/ADC10/PB2) (type BiDi)) + (pin (num 7) (name DAC1/ACD11/PB3) (type BiDi)) + (pin (num 8) (name GND) (type power_in)) + (pin (num 9) (name VCC) (type power_in)) + (pin (num 10) (name SDAIN/SDA/~OC0ALS~/OC0A/PC0) (type BiDi)) + (pin (num 11) (name SCLIN/SCL/XCK0/OC0AHS/OC0B/PC1) (type BiDi)) + (pin (num 12) (name SDAOUT/RXD0/~OC0BLS~/OC0C/PC2) (type BiDi)) + (pin (num 13) (name SCLOUT/TXD0/OC0BHS/OC0D/PC3) (type BiDi)) + (pin (num 14) (name ~SS~/~OC0CLS~/OC1A/PC4) (type BiDi)) + (pin (num 15) (name MOSI/XCK1/OC0CHS/OC1B/PC5) (type BiDi)) + (pin (num 16) (name CLKRTC/MISO/RXD1/~OC0DLS~/PC6) (type BiDi)) + (pin (num 17) (name EVOUT/CLKOUT/SCK/TXD1/OC0DHS/PC7) (type BiDi)) + (pin (num 18) (name GND) (type power_in)) + (pin (num 19) (name VCC) (type power_in)) + (pin (num 20) (name PD0/OC0A) (type BiDi)) + (pin (num 21) (name PD1/OC0B/XCK0) (type BiDi)) + (pin (num 22) (name PD2/OC0C/RXD0) (type BiDi)) + (pin (num 23) (name PD3/OC0D/TXD0) (type BiDi)) + (pin (num 24) (name PD4/OC1A/~SS~) (type BiDi)) + (pin (num 25) (name PD5/OC1B/XCK1/MOSI) (type BiDi)) + (pin (num 26) (name PD6/D-/RXD1/MISO) (type BiDi)) + (pin (num 27) (name PD7/D+/TXD1/SCK/CLKOUT/EVOUT) (type BiDi)) + (pin (num 28) (name PE0/OC0A/SDA) (type BiDi)) + (pin (num 29) (name PE1/OC0B/XCK0/SCL) (type BiDi)) + (pin (num 30) (name GND) (type power_in)) + (pin (num 31) (name VCC) (type power_in)) + (pin (num 32) (name PE2/OC0C/RXD0) (type BiDi)) + (pin (num 33) (name PE3/OC0D/TXD0) (type BiDi)) + (pin (num 34) (name PDI_DATA) (type input)) + (pin (num 35) (name ~RESET~/PDI_CLK) (type input)) + (pin (num 36) (name PR0/XTAL2/TOSC2) (type BiDi)) + (pin (num 37) (name PR1/XTAL1/TOSC1) (type BiDi)) + (pin (num 38) (name GND) (type power_in)) + (pin (num 39) (name AVCC) (type power_in)) + (pin (num 40) (name AREFA/AC0/ADC0/PA0) (type BiDi)) + (pin (num 41) (name AC1/ADC1/PA1) (type BiDi)) + (pin (num 42) (name AC2/ADC2/PA2) (type BiDi)) + (pin (num 43) (name AC3/ADC3/PA3) (type BiDi)) + (pin (num 44) (name AC4/ADC4/PA4) (type BiDi)))) + (libpart (lib ESPO_PART) (part DMN63D8LDW) + (fields + (field (name Reference) U) + (field (name Value) DMN63D8LDW)) + (pins + (pin (num 1) (name S1) (type input)) + (pin (num 2) (name G1) (type input)) + (pin (num 3) (name D2) (type input)) + (pin (num 4) (name S2) (type input)) + (pin (num 5) (name G2) (type input)) + (pin (num 6) (name D1) (type input))))) + (libraries + (library (logical device) + (uri C:\KiCad\share\kicad\library\device.lib)) + (library (logical conn) + (uri C:\KiCad\share\kicad\library\conn.lib)) + (library (logical linear) + (uri C:\KiCad\share\kicad\library\linear.lib)) + (library (logical regul) + (uri C:\KiCad\share\kicad\library\regul.lib)) + (library (logical atmel) + (uri C:\KiCad\share\kicad\library\atmel.lib)) + (library (logical ESPO_PART) + (uri C:\Users\Esposch\Documents\KiCAD\ESPO_PART.lib))) + (nets + (net (code 1) (name "Net-(IC1-Pad32)") + (node (ref IC1) (pin 32)) + (node (ref R13) (pin 1))) + (net (code 2) (name "Net-(P3-Pad1)") + (node (ref P3) (pin 1)) + (node (ref R10) (pin 2))) + (net (code 3) (name "Net-(P3-Pad2)") + (node (ref R9) (pin 2)) + (node (ref P3) (pin 2))) + (net (code 4) (name "Net-(P3-Pad3)") + (node (ref P3) (pin 3)) + (node (ref R8) (pin 2))) + (net (code 5) (name "Net-(P3-Pad4)") + (node (ref R7) (pin 2)) + (node (ref P3) (pin 4))) + (net (code 6) (name "Net-(IC1-Pad33)") + (node (ref R14) (pin 1)) + (node (ref IC1) (pin 33))) + (net (code 7) (name "Net-(IC1-Pad29)") + (node (ref R12) (pin 1)) + (node (ref IC1) (pin 29))) + (net (code 8) (name "Net-(IC1-Pad28)") + (node (ref R11) (pin 1)) + (node (ref IC1) (pin 28))) + (net (code 9) (name "Net-(R10-Pad1)") + (node (ref R14) (pin 2)) + (node (ref R10) (pin 1))) + (net (code 10) (name "Net-(R13-Pad2)") + (node (ref R9) (pin 1)) + (node (ref R13) (pin 2))) + (net (code 11) (name "Net-(R12-Pad2)") + (node (ref R12) (pin 2)) + (node (ref R8) (pin 1))) + (net (code 12) (name "Net-(R11-Pad2)") + (node (ref R11) (pin 2)) + (node (ref R7) (pin 1))) + (net (code 13) (name "Net-(R22-Pad1)") + (node (ref R22) (pin 1)) + (node (ref R24) (pin 2))) + (net (code 14) (name "Net-(D1-Pad2)") + (node (ref L1) (pin 1)) + (node (ref Q1) (pin 3)) + (node (ref D1) (pin 2))) + (net (code 15) (name "Net-(P8-Pad2)") + (node (ref P8) (pin 2)) + (node (ref U4) (pin 2))) + (net (code 16) (name "Net-(P8-Pad1)") + (node (ref P8) (pin 1)) + (node (ref U4) (pin 5))) + (net (code 17) (name /D-) + (node (ref P2) (pin 2)) + (node (ref IC1) (pin 26))) + (net (code 18) (name /D+) + (node (ref IC1) (pin 27)) + (node (ref P2) (pin 3))) + (net (code 19) (name /VCC_3V3) + (node (ref C4) (pin 1)) + (node (ref U1) (pin 2)) + (node (ref IC1) (pin 31)) + (node (ref IC1) (pin 19)) + (node (ref P5) (pin 3)) + (node (ref C11) (pin 1)) + (node (ref R21) (pin 1)) + (node (ref P4) (pin 1)) + (node (ref C6) (pin 1))) + (net (code 20) (name "Net-(R2-Pad1)") + (node (ref R4) (pin 2)) + (node (ref U2) (pin 5)) + (node (ref R2) (pin 1))) + (net (code 21) (name "Net-(R17-Pad1)") + (node (ref R19) (pin 2)) + (node (ref R17) (pin 1)) + (node (ref U2) (pin 13))) + (net (code 22) (name /AGND) + (node (ref IC1) (pin 30)) + (node (ref C7) (pin 2)) + (node (ref P4) (pin 3)) + (node (ref C5) (pin 2)) + (node (ref U4) (pin 1)) + (node (ref F1) (pin 1)) + (node (ref U4) (pin 4)) + (node (ref C8) (pin 2)) + (node (ref C4) (pin 2)) + (node (ref IC1) (pin 18)) + (node (ref R27) (pin 2)) + (node (ref IC1) (pin 14)) + (node (ref R6) (pin 1)) + (node (ref U1) (pin 1)) + (node (ref P2) (pin 6)) + (node (ref P2) (pin 5)) + (node (ref C3) (pin 2)) + (node (ref IC1) (pin 38)) + (node (ref U3) (pin 4)) + (node (ref C6) (pin 2)) + (node (ref C11) (pin 2)) + (node (ref U3) (pin 1))) + (net (code 23) (name /PSU_FEEDBACK) + (node (ref IC1) (pin 1)) + (node (ref R26) (pin 2)) + (node (ref R27) (pin 1))) + (net (code 24) (name "Net-(R1-Pad1)") + (node (ref U2) (pin 3)) + (node (ref R1) (pin 1)) + (node (ref R3) (pin 1))) + (net (code 25) (name "Net-(C2-Pad2)") + (node (ref C2) (pin 2)) + (node (ref P1) (pin 2))) + (net (code 26) (name "Net-(C1-Pad2)") + (node (ref C1) (pin 2)) + (node (ref P1) (pin 3))) + (net (code 27) (name /VCC_PSU) + (node (ref C9) (pin 1)) + (node (ref L1) (pin 2)) + (node (ref C10) (pin 1)) + (node (ref P5) (pin 2))) + (net (code 28) (name "Net-(C1-Pad1)") + (node (ref P1) (pin 4)) + (node (ref C1) (pin 1)) + (node (ref R1) (pin 2))) + (net (code 29) (name "Net-(C2-Pad1)") + (node (ref P1) (pin 1)) + (node (ref C2) (pin 1)) + (node (ref R2) (pin 2))) + (net (code 30) (name "Net-(R18-Pad2)") + (node (ref R18) (pin 2)) + (node (ref U3) (pin 3))) + (net (code 31) (name "Net-(R19-Pad1)") + (node (ref R22) (pin 2)) + (node (ref U2) (pin 14)) + (node (ref R19) (pin 1))) + (net (code 32) (name "Net-(R17-Pad2)") + (node (ref R17) (pin 2)) + (node (ref R18) (pin 1))) + (net (code 33) (name "Net-(C14-Pad1)") + (node (ref C14) (pin 1)) + (node (ref P6) (pin 4))) + (net (code 34) (name "Net-(C14-Pad2)") + (node (ref P6) (pin 3)) + (node (ref R25) (pin 1)) + (node (ref C14) (pin 2))) + (net (code 35) (name "Net-(C13-Pad1)") + (node (ref P6) (pin 2)) + (node (ref C13) (pin 1))) + (net (code 36) (name "Net-(C13-Pad2)") + (node (ref R24) (pin 1)) + (node (ref P6) (pin 1)) + (node (ref C13) (pin 2))) + (net (code 37) (name "Net-(R20-Pad1)") + (node (ref R23) (pin 2)) + (node (ref R20) (pin 1)) + (node (ref U2) (pin 8))) + (net (code 38) (name "Net-(R16-Pad2)") + (node (ref U3) (pin 6)) + (node (ref R16) (pin 2))) + (net (code 39) (name /AVCC) + (node (ref C8) (pin 1)) + (node (ref R5) (pin 1)) + (node (ref C7) (pin 1)) + (node (ref R21) (pin 2)) + (node (ref C5) (pin 1)) + (node (ref IC1) (pin 39))) + (net (code 40) (name "Net-(R15-Pad1)") + (node (ref R20) (pin 2)) + (node (ref U2) (pin 9)) + (node (ref R15) (pin 1))) + (net (code 41) (name "Net-(R15-Pad2)") + (node (ref R15) (pin 2)) + (node (ref R16) (pin 1))) + (net (code 42) (name "Net-(IC1-Pad35)") + (node (ref P4) (pin 4)) + (node (ref IC1) (pin 35))) + (net (code 43) (name /PSU_PWM) + (node (ref IC1) (pin 24)) + (node (ref Q1) (pin 1))) + (net (code 44) (name "Net-(IC1-Pad34)") + (node (ref IC1) (pin 34)) + (node (ref P4) (pin 2))) + (net (code 45) (name "Net-(P2-Pad4)") + (node (ref P2) (pin 4))) + (net (code 46) (name "Net-(IC1-Pad10)") + (node (ref IC1) (pin 10))) + (net (code 47) (name "Net-(IC1-Pad9)") + (node (ref IC1) (pin 9))) + (net (code 48) (name "Net-(IC1-Pad8)") + (node (ref IC1) (pin 8))) + (net (code 49) (name /DAC_OUT2) + (node (ref U2) (pin 10)) + (node (ref IC1) (pin 7))) + (net (code 50) (name /DAC_OUT) + (node (ref U2) (pin 12)) + (node (ref IC1) (pin 6))) + (net (code 51) (name /TO_B1) + (node (ref IC1) (pin 5)) + (node (ref U3) (pin 5))) + (net (code 52) (name /TO_B0) + (node (ref U3) (pin 2)) + (node (ref IC1) (pin 4))) + (net (code 53) (name "Net-(IC1-Pad3)") + (node (ref IC1) (pin 3))) + (net (code 54) (name /VGND) + (node (ref C16) (pin 2)) + (node (ref C10) (pin 2)) + (node (ref F1) (pin 2)) + (node (ref C15) (pin 2)) + (node (ref C9) (pin 2)) + (node (ref Q1) (pin 2)) + (node (ref C12) (pin 2)) + (node (ref U2) (pin 11)) + (node (ref P7) (pin 2)) + (node (ref P7) (pin 3)) + (node (ref P7) (pin 4))) + (net (code 55) (name "Net-(IC1-Pad20)") + (node (ref IC1) (pin 20))) + (net (code 56) (name /PSU_OUT) + (node (ref U2) (pin 4)) + (node (ref P7) (pin 1)) + (node (ref R26) (pin 1)) + (node (ref C15) (pin 1)) + (node (ref C16) (pin 1)) + (node (ref D1) (pin 1))) + (net (code 57) (name "Net-(IC1-Pad37)") + (node (ref IC1) (pin 37))) + (net (code 58) (name /DIG_CH1) + (node (ref U4) (pin 6)) + (node (ref IC1) (pin 17))) + (net (code 59) (name "Net-(IC1-Pad36)") + (node (ref IC1) (pin 36))) + (net (code 60) (name "Net-(IC1-Pad16)") + (node (ref IC1) (pin 16))) + (net (code 61) (name "Net-(IC1-Pad25)") + (node (ref IC1) (pin 25))) + (net (code 62) (name /XCK) + (node (ref IC1) (pin 15)) + (node (ref IC1) (pin 11))) + (net (code 63) (name /AVCC_ON_2) + (node (ref R5) (pin 2)) + (node (ref IC1) (pin 44)) + (node (ref R6) (pin 2)) + (node (ref R4) (pin 1)) + (node (ref R3) (pin 2))) + (net (code 64) (name "Net-(IC1-Pad43)") + (node (ref IC1) (pin 43))) + (net (code 65) (name "Net-(IC1-Pad23)") + (node (ref IC1) (pin 23))) + (net (code 66) (name "Net-(IC1-Pad13)") + (node (ref IC1) (pin 13))) + (net (code 67) (name /CH1) + (node (ref U2) (pin 2)) + (node (ref IC1) (pin 42)) + (node (ref U2) (pin 1))) + (net (code 68) (name "Net-(IC1-Pad22)") + (node (ref IC1) (pin 22))) + (net (code 69) (name /DIG_CH2) + (node (ref IC1) (pin 12)) + (node (ref U4) (pin 3))) + (net (code 70) (name "Net-(IC1-Pad41)") + (node (ref IC1) (pin 41))) + (net (code 71) (name "Net-(IC1-Pad21)") + (node (ref IC1) (pin 21))) + (net (code 72) (name /CH2) + (node (ref U2) (pin 7)) + (node (ref IC1) (pin 2)) + (node (ref IC1) (pin 40)) + (node (ref U2) (pin 6))) + (net (code 73) (name +5V) + (node (ref U1) (pin 3)) + (node (ref P2) (pin 1)) + (node (ref C12) (pin 1)) + (node (ref P5) (pin 1)) + (node (ref C3) (pin 1))) + (net (code 74) (name "Net-(R23-Pad1)") + (node (ref R23) (pin 1)) + (node (ref R25) (pin 2))))) \ No newline at end of file diff --git a/PCB/OUTPUT_V3/OUTPUT_V3.zip b/PCB/OUTPUT_V3/OUTPUT_V3.zip new file mode 100644 index 0000000000000000000000000000000000000000..0979e69b8edd27abad4268964511047bc75212fe GIT binary patch literal 13887 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 literal 0 HcmV?d00001 diff --git a/PCB/OUTPUT_V3/Tinylab_proto1-B_Cu.gbr b/PCB/OUTPUT_V3/Tinylab_proto1-B_Cu.gbr new file mode 100644 index 00000000..bd5d0fbd --- /dev/null +++ b/PCB/OUTPUT_V3/Tinylab_proto1-B_Cu.gbr @@ -0,0 +1,631 @@ +G04 #@! TF.FileFunction,Copper,L2,Bot,Signal* +%FSLAX46Y46*% +G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* +G04 Created by KiCad (PCBNEW (2015-08-05 BZR 6055, Git fa29c62)-product) date 02/02/2016 11:58:15 AM* +%MOMM*% +G01* +G04 APERTURE LIST* +%ADD10C,0.100000*% +%ADD11R,1.300000X1.300000*% +%ADD12C,1.300000*% +%ADD13C,1.998980*% +%ADD14R,1.998980X1.998980*% +%ADD15R,1.905000X1.905000*% +%ADD16C,1.905000*% +%ADD17R,2.032000X1.727200*% +%ADD18O,2.032000X1.727200*% +%ADD19O,1.250000X0.950000*% +%ADD20O,1.000000X1.550000*% +%ADD21R,1.727200X1.727200*% +%ADD22O,1.727200X1.727200*% +%ADD23R,1.727200X2.032000*% +%ADD24O,1.727200X2.032000*% +%ADD25R,2.032000X2.032000*% +%ADD26O,2.032000X2.032000*% +%ADD27C,0.600000*% +%ADD28C,0.508000*% +%ADD29C,0.250000*% +%ADD30C,1.016000*% +G04 APERTURE END LIST* +D10* +D11* +X94805500Y-147510500D03* +D12* +X94805500Y-145010500D03* +D11* +X93281500Y-127190500D03* +D12* +X95781500Y-127190500D03* +X76350500Y-124269500D03* +D11* +X73850500Y-124269500D03* +D13* +X65595500Y-119446040D03* +D14* +X75755500Y-119446040D03* +D15* +X65468500Y-125222000D03* +D16* +X70548500Y-125222000D03* +D17* +X90043000Y-126301500D03* +D18* +X90043000Y-128841500D03* +X90043000Y-131381500D03* +X90043000Y-133921500D03* +D19* +X92607400Y-123228540D03* +X87607400Y-123228540D03* +D20* +X93607400Y-120528540D03* +X86607400Y-120528540D03* +D17* +X66040000Y-148590000D03* +D18* +X66040000Y-146050000D03* +X66040000Y-143510000D03* +X66040000Y-140970000D03* +D21* +X90106500Y-149860000D03* +D22* +X87566500Y-149860000D03* +X90106500Y-147320000D03* +X87566500Y-147320000D03* +D23* +X83693000Y-119380000D03* +D24* +X81153000Y-119380000D03* +X78613000Y-119380000D03* +D17* +X66040000Y-130810000D03* +D18* +X66040000Y-133350000D03* +X66040000Y-135890000D03* +X66040000Y-138430000D03* +D21* +X73660000Y-132080000D03* +D22* +X73660000Y-129540000D03* +X76200000Y-132080000D03* +X76200000Y-129540000D03* +D25* +X91249500Y-142113000D03* +D26* +X91249500Y-139573000D03* +D27* +X78054200Y-147701000D03* +X77165200Y-145415000D03* +X89052400Y-138480800D03* +X90551000Y-136334500D03* +X92583000Y-136461500D03* +X96164400Y-125399800D03* +X83883500Y-137858500D03* +X83108800Y-140182600D03* +X82118200Y-148005800D03* +X80391000Y-151003000D03* +X84836000Y-124206000D03* +X75374500Y-126111000D03* +X82359500Y-123444000D03* +X90805000Y-121602500D03* +X94805500Y-137731500D03* +X72072500Y-127254000D03* +X87020400Y-141986000D03* +X84429600Y-137210800D03* +X79679800Y-144983200D03* +X83375500Y-145796000D03* +X82740500Y-127000000D03* +X79502000Y-140563600D03* +X86055200Y-145237200D03* +X89509600Y-140614400D03* +X86309200Y-143662400D03* +X87680800Y-141325600D03* +X80365600Y-131876800D03* +X83413600Y-143611600D03* +X81838800Y-134975600D03* +X83058000Y-141071600D03* +X82931000Y-136398000D03* +X90805000Y-135509000D03* +X88455500Y-135509000D03* +X82423000Y-135636000D03* +X81178400Y-125526800D03* +X74879200Y-139344400D03* +X75184000Y-142113000D03* +X91376500Y-124714000D03* +X90017600Y-124612400D03* +X80873600Y-141655800D03* +X81229200Y-144272000D03* +X78943200Y-143713200D03* +X74345800Y-146761200D03* +X70815200Y-147320000D03* +X73126600Y-148412200D03* +X71678800Y-149783800D03* +X82867500Y-146431000D03* +X78943200Y-145719800D03* +X78536800Y-146634200D03* +X80137000Y-141173200D03* +X82994500Y-133350000D03* +X94030800Y-141808200D03* +X92252800Y-144373600D03* +X84404200Y-149987000D03* +X86741000Y-126238000D03* +X86741000Y-133413500D03* +X90373200Y-138074400D03* +X80467200Y-128727200D03* +X71564500Y-140144500D03* +X74041000Y-137033000D03* +X86131400Y-142367000D03* +X81635600Y-141376400D03* +X76936600Y-142951200D03* +X76301600Y-144678400D03* +X74726800Y-144932400D03* +X71145400Y-141630400D03* +X88188800Y-139954000D03* +X71818500Y-135001000D03* +X71831200Y-135940800D03* +X80213200Y-127355600D03* +D28* +X89052400Y-138480800D02* +X89052400Y-138176000D01* +X89966800Y-137261600D02* +X89966800Y-136918700D01* +X89052400Y-138176000D02* +X89966800Y-137261600D01* +X89966800Y-136918700D02* +X90551000Y-136334500D01* +X92583000Y-136461500D02* +X90678000Y-136461500D01* +X90678000Y-136461500D02* +X90551000Y-136334500D01* +D29* +X77800200Y-147447000D02* +X78054200Y-147701000D01* +X77800200Y-145770600D02* +X77800200Y-147447000D01* +X77317600Y-145288000D02* +X77800200Y-145770600D01* +X77292200Y-145288000D02* +X77317600Y-145288000D01* +X77165200Y-145415000D02* +X77292200Y-145288000D01* +X89966800Y-136918700D02* +X90551000Y-136334500D01* +X90551000Y-136334500D02* +X90678000Y-136461500D01* +D28* +X93878400Y-118999000D02* +X94310200Y-118999000D01* +X96164400Y-125247400D02* +X96164400Y-125399800D01* +X95250000Y-124333000D02* +X96164400Y-125247400D01* +X95250000Y-120345200D02* +X95250000Y-124333000D01* +X94894400Y-119989600D02* +X95250000Y-120345200D01* +X94894400Y-119583200D02* +X94894400Y-119989600D01* +X94310200Y-118999000D02* +X94894400Y-119583200D01* +X93878400Y-118999000D02* +X86309200Y-118999000D01* +X85293200Y-118059200D02* +X85115400Y-117881400D01* +X85394800Y-118160800D02* +X85293200Y-118059200D01* +X85471000Y-118160800D02* +X85394800Y-118160800D01* +X86309200Y-118999000D02* +X85471000Y-118160800D01* +X85115400Y-117881400D02* +X85445600Y-118211600D01* +D29* +X80111600Y-117881400D02* +X78613000Y-119380000D01* +X85115400Y-117881400D02* +X80111600Y-117881400D01* +X86233000Y-118999000D02* +X85445600Y-118211600D01* +X85445600Y-118211600D02* +X85115400Y-117881400D01* +X93878400Y-118999000D02* +X86233000Y-118999000D01* +X83883500Y-137858500D02* +X83388200Y-138938000D01* +X83388200Y-138938000D02* +X83108800Y-140182600D01* +X82118200Y-148005800D02* +X82169000Y-149796500D01* +X82169000Y-149796500D02* +X80962500Y-151003000D01* +X80962500Y-151003000D02* +X80391000Y-151003000D01* +D30* +X70548500Y-125222000D02* +X71310500Y-125984000D01* +X81153000Y-119380000D02* +X81153000Y-122377200D01* +X82219800Y-123444000D02* +X82359500Y-123444000D01* +X81153000Y-122377200D02* +X82219800Y-123444000D01* +D29* +X93281500Y-127190500D02* +X93281500Y-124206000D01* +X85979000Y-124206000D02* +X84836000Y-124206000D01* +X86487000Y-123698000D02* +X85979000Y-124206000D01* +X86487000Y-122872500D02* +X86487000Y-123698000D01* +X87058500Y-122301000D02* +X86487000Y-122872500D01* +X93091000Y-122301000D02* +X87058500Y-122301000D01* +X93662500Y-122872500D02* +X93091000Y-122301000D01* +X93662500Y-123825000D02* +X93662500Y-122872500D01* +X93281500Y-124206000D02* +X93662500Y-123825000D01* +X75374500Y-126111000D02* +X75247500Y-125984000D01* +X75247500Y-125984000D02* +X71310500Y-125984000D01* +D28* +X94195900Y-126072900D02* +X94195900Y-124498100D01* +X94195900Y-124498100D02* +X94170500Y-124472700D01* +X95781500Y-127190500D02* +X95313500Y-127190500D01* +X95313500Y-127190500D02* +X94195900Y-126072900D01* +X94195900Y-126072900D02* +X94170500Y-126047500D01* +X90805000Y-121602500D02* +X92646500Y-121602500D01* +X92646500Y-121602500D02* +X92684600Y-121640600D01* +D30* +X73660000Y-129540000D02* +X73660000Y-127508000D01* +X73660000Y-127508000D02* +X73406000Y-127254000D01* +X73406000Y-127254000D02* +X72072500Y-127254000D01* +X76200000Y-129540000D02* +X73660000Y-129540000D01* +X76200000Y-132080000D02* +X76200000Y-129540000D01* +X76200000Y-129540000D02* +X76200000Y-128498600D01* +X76200000Y-128498600D02* +X76657200Y-128041400D01* +X76657200Y-128041400D02* +X76657200Y-124576200D01* +X76657200Y-124576200D02* +X76350500Y-124269500D01* +D29* +X94170500Y-126047500D02* +X95313500Y-127190500D01* +X94170500Y-122618500D02* +X94170500Y-124472700D01* +X90805000Y-121602500D02* +X90995500Y-121793000D01* +X90995500Y-121793000D02* +X93345000Y-121793000D01* +X93345000Y-121793000D02* +X94170500Y-122618500D01* +X94170500Y-124472700D02* +X94170500Y-126047500D01* +X95885000Y-137160000D02* +X95885000Y-127294000D01* +X95313500Y-137731500D02* +X95885000Y-137160000D01* +X94805500Y-137731500D02* +X95313500Y-137731500D01* +X95885000Y-127294000D02* +X95781500Y-127190500D01* +X72072500Y-127254000D02* +X72136000Y-127190500D01* +X73342500Y-127190500D02* +X73660000Y-127508000D01* +X72136000Y-127190500D02* +X73342500Y-127190500D01* +X76200000Y-129540000D02* +X76200000Y-124420000D01* +X76200000Y-124420000D02* +X76350500Y-124269500D01* +X76033000Y-129373000D02* +X76200000Y-129540000D01* +D30* +X73850500Y-124269500D02* +X73850500Y-123634500D01* +X73850500Y-123634500D02* +X75755500Y-121729500D01* +X75755500Y-121729500D02* +X75755500Y-119446040D01* +D29* +X86461600Y-141427200D02* +X87020400Y-141986000D01* +X86461600Y-139242800D02* +X86461600Y-141427200D01* +X84429600Y-137210800D02* +X86461600Y-139242800D01* +X73850500Y-123634500D02* +X75755500Y-121729500D01* +X75755500Y-121729500D02* +X75755500Y-119446040D01* +X73660000Y-132080000D02* +X73596500Y-132080000D01* +X83312000Y-145732500D02* +X79679800Y-144983200D01* +X83375500Y-145796000D02* +X83312000Y-145732500D01* +X81978500Y-127762000D02* +X82740500Y-127000000D01* +X81978500Y-131318000D02* +X81978500Y-127762000D01* +X79692500Y-133604000D02* +X81978500Y-131318000D01* +X79502000Y-140563600D02* +X79692500Y-133604000D01* +X86207600Y-145084800D02* +X86055200Y-145237200D01* +X86715600Y-145084800D02* +X86207600Y-145084800D01* +X89408000Y-142392400D02* +X86715600Y-145084800D01* +X89408000Y-140716000D02* +X89408000Y-142392400D01* +X89509600Y-140614400D02* +X89408000Y-140716000D01* +X86360000Y-143662400D02* +X86309200Y-143662400D01* +X87680800Y-142341600D02* +X86360000Y-143662400D01* +X87680800Y-141325600D02* +X87680800Y-142341600D01* +X80365600Y-132232400D02* +X80365600Y-131876800D01* +X78943200Y-133654800D02* +X80365600Y-132232400D01* +X78638400Y-141986000D02* +X78943200Y-133654800D01* +X79806800Y-142341600D02* +X78638400Y-141986000D01* +X81330800Y-142494000D02* +X79806800Y-142341600D01* +X82811049Y-143452151D02* +X81330800Y-142494000D01* +X83254151Y-143452151D02* +X82811049Y-143452151D01* +X83413600Y-143611600D02* +X83254151Y-143452151D01* +X81838800Y-134975600D02* +X81788000Y-135026400D01* +X81788000Y-135026400D02* +X81788000Y-140462000D01* +X81788000Y-140462000D02* +X82346800Y-141122400D01* +X82346800Y-141122400D02* +X83058000Y-141071600D01* +X88646000Y-136398000D02* +X82931000Y-136398000D01* +X89662000Y-135382000D02* +X88646000Y-136398000D01* +X90678000Y-135382000D02* +X89662000Y-135382000D01* +X90805000Y-135509000D02* +X90678000Y-135382000D01* +X82550000Y-135509000D02* +X88455500Y-135509000D01* +X82423000Y-135636000D02* +X82550000Y-135509000D01* +X81178400Y-129184400D02* +X81178400Y-125526800D01* +X78892400Y-131470400D02* +X81178400Y-129184400D01* +X78892400Y-133045200D02* +X78892400Y-131470400D01* +X76403200Y-135534400D02* +X78892400Y-133045200D01* +X76403200Y-137820400D02* +X76403200Y-135534400D01* +X74879200Y-139344400D02* +X76403200Y-137820400D01* +X75628500Y-142557500D02* +X75184000Y-142113000D01* +X75628500Y-147510500D02* +X75628500Y-142557500D01* +X76327000Y-148209000D02* +X75628500Y-147510500D01* +X76327000Y-149542500D02* +X76327000Y-148209000D01* +X78486000Y-151701500D02* +X76327000Y-149542500D01* +X90487500Y-151701500D02* +X78486000Y-151701500D01* +X93345000Y-148844000D02* +X90487500Y-151701500D01* +X93345000Y-136017000D02* +X93345000Y-148844000D01* +X91694000Y-134366000D02* +X93345000Y-136017000D01* +X91694000Y-125031500D02* +X91694000Y-134366000D01* +X91376500Y-124714000D02* +X91694000Y-125031500D01* +X89103200Y-124612400D02* +X90017600Y-124612400D01* +X88392000Y-125323600D02* +X89103200Y-124612400D01* +X88392000Y-133705600D02* +X88392000Y-125323600D01* +X87833200Y-134264400D02* +X88392000Y-133705600D01* +X83007200Y-134264400D02* +X87833200Y-134264400D01* +X82651600Y-133908800D02* +X83007200Y-134264400D01* +X81686400Y-133908800D02* +X82651600Y-133908800D01* +X81178400Y-134416800D02* +X81686400Y-133908800D01* +X80924400Y-141605000D02* +X81178400Y-134416800D01* +X80873600Y-141655800D02* +X80924400Y-141605000D01* +X79502000Y-144272000D02* +X81229200Y-144272000D01* +X78943200Y-143713200D02* +X79502000Y-144272000D01* +X74345800Y-147015200D02* +X74345800Y-146761200D01* +X74041000Y-147574000D02* +X74345800Y-147015200D01* +X71005700Y-147510500D02* +X74041000Y-147574000D01* +X70815200Y-147320000D02* +X71005700Y-147510500D01* +X73152000Y-148437600D02* +X73126600Y-148412200D01* +X73152000Y-149352000D02* +X73152000Y-148437600D01* +X72517000Y-149987000D02* +X73152000Y-149352000D01* +X71882000Y-149987000D02* +X72517000Y-149987000D01* +X71678800Y-149783800D02* +X71882000Y-149987000D01* +X78943200Y-145719800D02* +X82867500Y-146431000D01* +X86804500Y-148082000D02* +X87566500Y-147320000D01* +X85153500Y-148082000D02* +X86804500Y-148082000D01* +X84772500Y-148463000D02* +X85153500Y-148082000D01* +X84201000Y-148463000D02* +X84772500Y-148463000D01* +X82867500Y-147129500D02* +X84201000Y-148463000D01* +X78536800Y-146634200D02* +X82867500Y-147129500D01* +X80391000Y-133921500D02* +X80137000Y-141173200D01* +X80962500Y-133350000D02* +X80391000Y-133921500D01* +X82994500Y-133350000D02* +X80962500Y-133350000D01* +X86741000Y-126060200D02* +X86741000Y-126238000D01* +X88925400Y-123875800D02* +X86741000Y-126060200D01* +X91770200Y-123875800D02* +X88925400Y-123875800D01* +X92176600Y-124282200D02* +X91770200Y-123875800D01* +X92176600Y-133578600D02* +X92176600Y-124282200D01* +X93954600Y-135356600D02* +X92176600Y-133578600D01* +X93954600Y-141732000D02* +X93954600Y-135356600D01* +X94030800Y-141808200D02* +X93954600Y-141732000D01* +X92252800Y-147548600D02* +X92252800Y-144373600D01* +X91135200Y-148666200D02* +X92252800Y-147548600D01* +X85725000Y-148666200D02* +X91135200Y-148666200D01* +X84404200Y-149987000D02* +X85725000Y-148666200D01* +X86741000Y-133413500D02* +X86741000Y-126238000D01* +X91249500Y-142113000D02* +X91249500Y-141973300D01* +X91249500Y-141973300D02* +X92760800Y-140462000D01* +X91998800Y-138074400D02* +X90373200Y-138074400D01* +X92760800Y-138836400D02* +X91998800Y-138074400D01* +X92760800Y-140462000D02* +X92760800Y-138836400D01* +X74041000Y-134747000D02* +X74041000Y-137033000D01* +X74320400Y-134467600D02* +X74041000Y-134747000D01* +X76504800Y-134467600D02* +X74320400Y-134467600D01* +X78079600Y-132892800D02* +X76504800Y-134467600D01* +X78079600Y-130200400D02* +X78079600Y-132892800D01* +X78689200Y-129590800D02* +X78079600Y-130200400D01* +X79603600Y-129590800D02* +X78689200Y-129590800D01* +X80467200Y-128727200D02* +X79603600Y-129590800D01* +X74041000Y-137033000D02* +X72326500Y-137033000D01* +X71564500Y-137795000D02* +X71564500Y-140144500D01* +X72326500Y-137033000D02* +X71564500Y-137795000D01* +X86131400Y-142367000D02* +X85801200Y-142697200D01* +X85801200Y-142697200D02* +X82956400Y-142697200D01* +X82956400Y-142697200D02* +X81635600Y-141376400D01* +X76936600Y-142951200D02* +X76504800Y-143383000D01* +X76504800Y-143383000D02* +X76504800Y-144475200D01* +X76504800Y-144475200D02* +X76301600Y-144678400D01* +X74726800Y-144932400D02* +X71424800Y-141630400D01* +X71424800Y-141630400D02* +X71145400Y-141630400D01* +X88722200Y-142367000D02* +X88188800Y-139954000D01* +X86423500Y-144526000D02* +X88722200Y-142367000D01* +X82296000Y-144729200D02* +X86423500Y-144526000D01* +X81280000Y-143154400D02* +X82296000Y-144729200D01* +X78841600Y-143002000D02* +X81280000Y-143154400D01* +X75184000Y-141325600D02* +X78841600Y-143002000D01* +X71374000Y-140970000D02* +X75184000Y-141325600D01* +X70802500Y-140398500D02* +X71374000Y-140970000D01* +X70802500Y-136017000D02* +X70802500Y-140398500D01* +X71818500Y-135001000D02* +X70802500Y-136017000D01* +X71983600Y-135940800D02* +X71831200Y-135940800D01* +X74218800Y-133705600D02* +X71983600Y-135940800D01* +X76352400Y-133705600D02* +X74218800Y-133705600D01* +X77520800Y-132537200D02* +X76352400Y-133705600D01* +X77520800Y-128930400D02* +X77520800Y-132537200D01* +X77724000Y-128727200D02* +X77520800Y-128930400D01* +X78841600Y-128727200D02* +X77724000Y-128727200D01* +X80213200Y-127355600D02* +X78841600Y-128727200D01* +M02* diff --git a/PCB/OUTPUT_V3/Tinylab_proto1-B_Mask.gbr b/PCB/OUTPUT_V3/Tinylab_proto1-B_Mask.gbr new file mode 100644 index 00000000..db03c737 --- /dev/null +++ b/PCB/OUTPUT_V3/Tinylab_proto1-B_Mask.gbr @@ -0,0 +1,91 @@ +G04 #@! TF.FileFunction,Soldermask,Bot* +%FSLAX46Y46*% +G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* +G04 Created by KiCad (PCBNEW (2015-08-05 BZR 6055, Git fa29c62)-product) date 02/02/2016 11:58:15 AM* +%MOMM*% +G01* +G04 APERTURE LIST* +%ADD10C,0.100000*% +%ADD11R,1.300000X1.300000*% +%ADD12C,1.300000*% +%ADD13C,1.998980*% +%ADD14R,1.998980X1.998980*% +%ADD15R,1.905000X1.905000*% +%ADD16C,1.905000*% +%ADD17R,2.032000X1.727200*% +%ADD18O,2.032000X1.727200*% +%ADD19O,1.250000X0.950000*% +%ADD20O,1.000000X1.550000*% +%ADD21R,1.727200X1.727200*% +%ADD22O,1.727200X1.727200*% +%ADD23R,1.727200X2.032000*% +%ADD24O,1.727200X2.032000*% +%ADD25R,2.032000X2.032000*% +%ADD26O,2.032000X2.032000*% +G04 APERTURE END LIST* +D10* +D11* +X94805500Y-147510500D03* +D12* +X94805500Y-145010500D03* +D11* +X93281500Y-127190500D03* +D12* +X95781500Y-127190500D03* +X76350500Y-124269500D03* +D11* +X73850500Y-124269500D03* +D13* +X65595500Y-119446040D03* +D14* +X75755500Y-119446040D03* +D15* +X65468500Y-125222000D03* +D16* +X70548500Y-125222000D03* +D17* +X90043000Y-126301500D03* +D18* +X90043000Y-128841500D03* +X90043000Y-131381500D03* +X90043000Y-133921500D03* +D19* +X92607400Y-123228540D03* +X87607400Y-123228540D03* +D20* +X93607400Y-120528540D03* +X86607400Y-120528540D03* +D17* +X66040000Y-148590000D03* +D18* +X66040000Y-146050000D03* +X66040000Y-143510000D03* +X66040000Y-140970000D03* +D21* +X90106500Y-149860000D03* +D22* +X87566500Y-149860000D03* +X90106500Y-147320000D03* +X87566500Y-147320000D03* +D23* +X83693000Y-119380000D03* +D24* +X81153000Y-119380000D03* +X78613000Y-119380000D03* +D17* +X66040000Y-130810000D03* +D18* +X66040000Y-133350000D03* +X66040000Y-135890000D03* +X66040000Y-138430000D03* +D21* +X73660000Y-132080000D03* +D22* +X73660000Y-129540000D03* +X76200000Y-132080000D03* +X76200000Y-129540000D03* +D25* +X91249500Y-142113000D03* +D26* +X91249500Y-139573000D03* +M02* diff --git a/PCB/OUTPUT_V3/Tinylab_proto1-Edge_Cuts.gbr b/PCB/OUTPUT_V3/Tinylab_proto1-Edge_Cuts.gbr new file mode 100644 index 00000000..25d22b74 --- /dev/null +++ b/PCB/OUTPUT_V3/Tinylab_proto1-Edge_Cuts.gbr @@ -0,0 +1,31 @@ +G04 #@! TF.FileFunction,Profile,NP* +%FSLAX46Y46*% +G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* +G04 Created by KiCad (PCBNEW (2015-08-05 BZR 6055, Git fa29c62)-product) date 02/02/2016 11:58:15 AM* +%MOMM*% +G01* +G04 APERTURE LIST* +%ADD10C,0.100000*% +G04 APERTURE END LIST* +D10* +X97409000Y-152044400D02* +X97409000Y-117576600D01* +X97409000Y-117602000D02* +X96596200Y-117602000D01* +X97409000Y-152222200D02* +X97409000Y-151993600D01* +X96596200Y-152222200D02* +X97409000Y-152222200D01* +X64236600Y-152222200D02* +X96621600Y-152222200D01* +X96621600Y-117602000D02* +X64211200Y-117602000D01* +X64211200Y-117627400D02* +X64236600Y-117627400D01* +X64211200Y-152222200D02* +X64211200Y-117627400D01* +X64287400Y-152222200D02* +X64236600Y-152222200D01* +X64287400Y-152222200D02* +X64312800Y-152222200D01* +M02* diff --git a/PCB/OUTPUT_V3/Tinylab_proto1-F_Cu.gbr b/PCB/OUTPUT_V3/Tinylab_proto1-F_Cu.gbr new file mode 100644 index 00000000..228f9d08 --- /dev/null +++ b/PCB/OUTPUT_V3/Tinylab_proto1-F_Cu.gbr @@ -0,0 +1,1461 @@ +G04 #@! TF.FileFunction,Copper,L1,Top,Signal* +%FSLAX46Y46*% +G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* +G04 Created by KiCad (PCBNEW (2015-08-05 BZR 6055, Git fa29c62)-product) date 02/02/2016 11:58:15 AM* +%MOMM*% +G01* +G04 APERTURE LIST* +%ADD10C,0.100000*% +%ADD11R,0.800000X0.750000*% +%ADD12R,0.750000X0.800000*% +%ADD13R,1.300000X1.300000*% +%ADD14C,1.300000*% +%ADD15C,1.998980*% +%ADD16R,1.998980X1.998980*% +%ADD17R,1.600000X1.000000*% +%ADD18R,1.600000X0.560000*% +%ADD19R,0.560000X1.600000*% +%ADD20R,1.905000X1.905000*% +%ADD21C,1.905000*% +%ADD22R,2.032000X1.727200*% +%ADD23O,2.032000X1.727200*% +%ADD24R,0.400000X1.350000*% +%ADD25O,1.250000X0.950000*% +%ADD26O,1.000000X1.550000*% +%ADD27R,1.727200X1.727200*% +%ADD28O,1.727200X1.727200*% +%ADD29R,1.727200X2.032000*% +%ADD30O,1.727200X2.032000*% +%ADD31R,2.032000X2.032000*% +%ADD32O,2.032000X2.032000*% +%ADD33R,0.900000X0.600000*% +%ADD34R,0.500000X0.900000*% +%ADD35R,0.900000X0.500000*% +%ADD36R,0.600000X0.900000*% +%ADD37R,1.500000X0.600000*% +%ADD38R,0.508000X0.304800*% +%ADD39C,0.600000*% +%ADD40C,0.250000*% +%ADD41C,0.508000*% +%ADD42C,1.016000*% +G04 APERTURE END LIST* +D10* +D11* +X86054500Y-130492500D03* +X87554500Y-130492500D03* +X86054500Y-128968500D03* +X87554500Y-128968500D03* +D12* +X92519500Y-130885500D03* +X92519500Y-132385500D03* +D11* +X95619000Y-135064500D03* +X94119000Y-135064500D03* +X87554500Y-138430000D03* +X86054500Y-138430000D03* +D13* +X94805500Y-147510500D03* +D14* +X94805500Y-145010500D03* +D11* +X79363000Y-151003000D03* +X77863000Y-151003000D03* +D13* +X93281500Y-127190500D03* +D14* +X95781500Y-127190500D03* +D12* +X83502500Y-124194000D03* +X83502500Y-122694000D03* +X71374000Y-146292000D03* +X71374000Y-144792000D03* +X95504000Y-122249500D03* +X95504000Y-123749500D03* +X68707000Y-133338000D03* +X68707000Y-131838000D03* +X68707000Y-136259000D03* +X68707000Y-134759000D03* +D14* +X76350500Y-124269500D03* +D13* +X73850500Y-124269500D03* +D12* +X71437500Y-129972500D03* +X71437500Y-128472500D03* +D15* +X65595500Y-119446040D03* +D16* +X75755500Y-119446040D03* +D17* +X94551500Y-139485500D03* +X94551500Y-136485500D03* +D18* +X84717000Y-147510000D03* +X84717000Y-146710000D03* +X84717000Y-145910000D03* +X84717000Y-145110000D03* +X84717000Y-144310000D03* +X84717000Y-143510000D03* +X84717000Y-142710000D03* +X84717000Y-141910000D03* +X84717000Y-141110000D03* +X84717000Y-140310000D03* +X84717000Y-139510000D03* +D19* +X82867000Y-137660000D03* +X82067000Y-137660000D03* +X81267000Y-137660000D03* +X80467000Y-137660000D03* +X79667000Y-137660000D03* +X78867000Y-137660000D03* +X78067000Y-137660000D03* +X77267000Y-137660000D03* +X76467000Y-137660000D03* +X75667000Y-137660000D03* +X74867000Y-137660000D03* +D18* +X73017000Y-139510000D03* +X73017000Y-140310000D03* +X73017000Y-141110000D03* +X73017000Y-141910000D03* +X73017000Y-142710000D03* +X73017000Y-143510000D03* +X73017000Y-144310000D03* +X73017000Y-145110000D03* +X73017000Y-145910000D03* +X73017000Y-146710000D03* +X73017000Y-147510000D03* +D19* +X74867000Y-149360000D03* +X75667000Y-149360000D03* +X76467000Y-149360000D03* +X77267000Y-149360000D03* +X78067000Y-149360000D03* +X78867000Y-149360000D03* +X79667000Y-149360000D03* +X80467000Y-149360000D03* +X81267000Y-149360000D03* +X82067000Y-149360000D03* +X82867000Y-149360000D03* +D20* +X65468500Y-125222000D03* +D21* +X70548500Y-125222000D03* +D22* +X90043000Y-126301500D03* +D23* +X90043000Y-128841500D03* +X90043000Y-131381500D03* +X90043000Y-133921500D03* +D24* +X91407400Y-123228540D03* +X90757400Y-123228540D03* +X90107400Y-123228540D03* +X89457400Y-123228540D03* +X88807400Y-123228540D03* +D25* +X92607400Y-123228540D03* +X87607400Y-123228540D03* +D26* +X93607400Y-120528540D03* +X86607400Y-120528540D03* +D22* +X66040000Y-148590000D03* +D23* +X66040000Y-146050000D03* +X66040000Y-143510000D03* +X66040000Y-140970000D03* +D27* +X90106500Y-149860000D03* +D28* +X87566500Y-149860000D03* +X90106500Y-147320000D03* +X87566500Y-147320000D03* +D29* +X83693000Y-119380000D03* +D30* +X81153000Y-119380000D03* +X78613000Y-119380000D03* +D22* +X66040000Y-130810000D03* +D23* +X66040000Y-133350000D03* +X66040000Y-135890000D03* +X66040000Y-138430000D03* +D27* +X73660000Y-132080000D03* +D28* +X73660000Y-129540000D03* +X76200000Y-132080000D03* +X76200000Y-129540000D03* +D31* +X91249500Y-142113000D03* +D32* +X91249500Y-139573000D03* +D33* +X79245000Y-123444000D03* +X82045000Y-122494000D03* +X82045000Y-124394000D03* +D34* +X85927500Y-132080000D03* +X87427500Y-132080000D03* +X85927500Y-127381000D03* +X87427500Y-127381000D03* +X85927500Y-133731000D03* +X87427500Y-133731000D03* +X87427500Y-125793500D03* +X85927500Y-125793500D03* +X85927500Y-135318500D03* +X87427500Y-135318500D03* +X85927500Y-136906000D03* +X87427500Y-136906000D03* +D35* +X67970400Y-142036800D03* +X67970400Y-140536800D03* +X68453000Y-144641000D03* +X68453000Y-143141000D03* +X68453000Y-147244500D03* +X68453000Y-145744500D03* +X68643500Y-149848000D03* +X68643500Y-148348000D03* +X69748400Y-140536800D03* +X69748400Y-142036800D03* +X70040500Y-143141000D03* +X70040500Y-144641000D03* +X69786500Y-145744500D03* +X69786500Y-147244500D03* +X70231000Y-148348000D03* +X70231000Y-149848000D03* +X68707000Y-137553000D03* +X68707000Y-139053000D03* +D34* +X71616000Y-138938000D03* +X70116000Y-138938000D03* +D35* +X75057000Y-135878000D03* +X75057000Y-134378000D03* +X76708000Y-135878000D03* +X76708000Y-134378000D03* +X73406000Y-134378000D03* +X73406000Y-135878000D03* +X72961500Y-138545000D03* +X72961500Y-137045000D03* +D34* +X82093500Y-151066500D03* +X80593500Y-151066500D03* +D35* +X70358000Y-131711000D03* +X70358000Y-133211000D03* +D34* +X70116000Y-137287000D03* +X71616000Y-137287000D03* +X68719000Y-130302000D03* +X70219000Y-130302000D03* +D35* +X70358000Y-134378000D03* +X70358000Y-135878000D03* +D34* +X88888000Y-143129000D03* +X87388000Y-143129000D03* +X87388000Y-144716500D03* +X88888000Y-144716500D03* +D36* +X94869000Y-130870500D03* +X95819000Y-133670500D03* +X93919000Y-133670500D03* +D37* +X84361000Y-134620000D03* +X84361000Y-133350000D03* +X84361000Y-132080000D03* +X84361000Y-130810000D03* +X84361000Y-129540000D03* +X84361000Y-128270000D03* +X84361000Y-127000000D03* +X78961000Y-127000000D03* +X78961000Y-128270000D03* +X78961000Y-129540000D03* +X78961000Y-130810000D03* +X78961000Y-132080000D03* +X78961000Y-133350000D03* +X78961000Y-134620000D03* +D38* +X88900000Y-141147800D03* +X88900000Y-139877800D03* +X86868000Y-141147800D03* +X88900000Y-140512800D03* +X86868000Y-139877800D03* +X86868000Y-140512800D03* +X91313000Y-137414000D03* +X91313000Y-136144000D03* +X89281000Y-137414000D03* +X91313000Y-136779000D03* +X89281000Y-136144000D03* +X89281000Y-136779000D03* +D39* +X78054200Y-147701000D03* +X77165200Y-145415000D03* +X89052400Y-138480800D03* +X90551000Y-136334500D03* +X92583000Y-136461500D03* +X96164400Y-125399800D03* +X83883500Y-137858500D03* +X83108800Y-140182600D03* +X82118200Y-148005800D03* +X80391000Y-151003000D03* +X84836000Y-124206000D03* +X75374500Y-126111000D03* +X82359500Y-123444000D03* +X90805000Y-121602500D03* +X94805500Y-137731500D03* +X72072500Y-127254000D03* +X87020400Y-141986000D03* +X84429600Y-137210800D03* +X79679800Y-144983200D03* +X83375500Y-145796000D03* +X82740500Y-127000000D03* +X79502000Y-140563600D03* +X86055200Y-145237200D03* +X89509600Y-140614400D03* +X86309200Y-143662400D03* +X87680800Y-141325600D03* +X80365600Y-131876800D03* +X83413600Y-143611600D03* +X81838800Y-134975600D03* +X83058000Y-141071600D03* +X82931000Y-136398000D03* +X90805000Y-135509000D03* +X88455500Y-135509000D03* +X82423000Y-135636000D03* +X81178400Y-125526800D03* +X74879200Y-139344400D03* +X75184000Y-142113000D03* +X91376500Y-124714000D03* +X90017600Y-124612400D03* +X80873600Y-141655800D03* +X81229200Y-144272000D03* +X78943200Y-143713200D03* +X74345800Y-146761200D03* +X70815200Y-147320000D03* +X73126600Y-148412200D03* +X71678800Y-149783800D03* +X82867500Y-146431000D03* +X78943200Y-145719800D03* +X78536800Y-146634200D03* +X80137000Y-141173200D03* +X82994500Y-133350000D03* +X94030800Y-141808200D03* +X92252800Y-144373600D03* +X84404200Y-149987000D03* +X86741000Y-126238000D03* +X86741000Y-133413500D03* +X90373200Y-138074400D03* +X80467200Y-128727200D03* +X71564500Y-140144500D03* +X74041000Y-137033000D03* +X86131400Y-142367000D03* +X81635600Y-141376400D03* +X76936600Y-142951200D03* +X76301600Y-144678400D03* +X74726800Y-144932400D03* +X71145400Y-141630400D03* +X88188800Y-139954000D03* +X71818500Y-135001000D03* +X71831200Y-135940800D03* +X80213200Y-127355600D03* +D40* +X90043000Y-133921500D02* +X90043000Y-133794500D01* +X90043000Y-133794500D02* +X88328500Y-132080000D01* +X88328500Y-132080000D02* +X87427500Y-132080000D01* +X86054500Y-130492500D02* +X86054500Y-130822000D01* +X86054500Y-130822000D02* +X86677500Y-131445000D01* +X86677500Y-131445000D02* +X86792500Y-131445000D01* +X86792500Y-131445000D02* +X87427500Y-132080000D01* +X90043000Y-131381500D02* +X89598500Y-131381500D01* +X89598500Y-131381500D02* +X88709500Y-130492500D01* +X88709500Y-130492500D02* +X87554500Y-130492500D01* +X87427500Y-127381000D02* +X87693500Y-127381000D01* +X88773000Y-126301500D02* +X90043000Y-126301500D01* +X87693500Y-127381000D02* +X88773000Y-126301500D01* +X86054500Y-128968500D02* +X86054500Y-128829500D01* +X86054500Y-128829500D02* +X86741000Y-128143000D01* +X86741000Y-128143000D02* +X86741000Y-127571500D01* +X86741000Y-127571500D02* +X86931500Y-127381000D01* +X86931500Y-127381000D02* +X87427500Y-127381000D01* +X90043000Y-128841500D02* +X87681500Y-128841500D01* +X87681500Y-128841500D02* +X87554500Y-128968500D01* +X94869000Y-130870500D02* +X94869000Y-129730500D01* +X94615000Y-122491500D02* +X94373000Y-122249500D01* +X94615000Y-129476500D02* +X94615000Y-122491500D01* +X94869000Y-129730500D02* +X94615000Y-129476500D01* +X92519500Y-130885500D02* +X94854000Y-130885500D01* +X94854000Y-130885500D02* +X94869000Y-130870500D01* +X83693000Y-119380000D02* +X89852500Y-119380000D01* +X91503500Y-122110500D02* +X91407400Y-122110500D01* +X91503500Y-121031000D02* +X91503500Y-122110500D01* +X89852500Y-119380000D02* +X91503500Y-121031000D01* +X91407400Y-123228540D02* +X91407400Y-122110500D01* +X91407400Y-122110500D02* +X91407400Y-122016100D01* +X93928500Y-122249500D02* +X94373000Y-122249500D01* +X93599000Y-121920000D02* +X93928500Y-122249500D01* +X91503500Y-121920000D02* +X93599000Y-121920000D01* +X91407400Y-122016100D02* +X91503500Y-121920000D01* +X94373000Y-122249500D02* +X95504000Y-122249500D01* +X83693000Y-119380000D02* +X84518500Y-119380000D01* +D41* +X86054500Y-138430000D02* +X86054500Y-137033000D01* +X86054500Y-137033000D02* +X85927500Y-136906000D01* +X94119000Y-135064500D02* +X93154500Y-135064500D01* +X93154500Y-135064500D02* +X93027500Y-135191500D01* +X93027500Y-135191500D02* +X93027500Y-136017000D01* +X93027500Y-136017000D02* +X92583000Y-136461500D01* +X94805500Y-145010500D02* +X94805500Y-139739500D01* +X94805500Y-139739500D02* +X94551500Y-139485500D01* +D40* +X73017000Y-145110000D02* +X73863000Y-145110000D01* +X78067000Y-147713800D02* +X78067000Y-149360000D01* +X78054200Y-147701000D02* +X78067000Y-147713800D01* +X76987400Y-145592800D02* +X77165200Y-145415000D01* +X74345800Y-145592800D02* +X76987400Y-145592800D01* +X73863000Y-145110000D02* +X74345800Y-145592800D01* +X88900000Y-141147800D02* +X88417400Y-141147800D01* +X87477600Y-140208000D02* +X87477600Y-139446000D01* +X88417400Y-141147800D02* +X87477600Y-140208000D01* +X88888000Y-144716500D02* +X88888000Y-146038000D01* +X88888000Y-146038000D02* +X90106500Y-147256500D01* +X90106500Y-147256500D02* +X90106500Y-147320000D01* +X89115900Y-141160500D02* +X89115900Y-141287500D01* +X89115900Y-141287500D02* +X89662000Y-141833600D01* +X89662000Y-141833600D02* +X89662000Y-145010500D01* +X89662000Y-145010500D02* +X89638500Y-145034000D01* +X89638500Y-145034000D02* +X89611200Y-145034000D01* +X89611200Y-145034000D02* +X89611200Y-145010500D01* +X88595200Y-139293600D02* +X88595200Y-138938000D01* +X88595200Y-139293600D02* +X87630000Y-139293600D01* +X87630000Y-139293600D02* +X87477600Y-139446000D01* +X87477600Y-139446000D02* +X87033100Y-139890500D01* +X88595200Y-138938000D02* +X89052400Y-138480800D01* +X87033100Y-139890500D02* +X86487000Y-139890500D01* +X86054500Y-138430000D02* +X86054500Y-139394500D01* +X86054500Y-139394500D02* +X86487000Y-139827000D01* +X86487000Y-139827000D02* +X86487000Y-139890500D01* +X88807400Y-123228540D02* +X87607400Y-123228540D01* +X92519500Y-132385500D02* +X91999500Y-132385500D01* +X91999500Y-132385500D02* +X91694000Y-132080000D01* +X91694000Y-132080000D02* +X91694000Y-125476000D01* +X91694000Y-125476000D02* +X92607400Y-124562600D01* +X92607400Y-124562600D02* +X92607400Y-123228540D01* +X94551500Y-139485500D02* +X95224600Y-142036800D01* +X95224600Y-142036800D02* +X94805500Y-145010500D01* +X89598500Y-136144000D02* +X90360500Y-136144000D01* +X90360500Y-136144000D02* +X90551000Y-136334500D01* +X92583000Y-136461500D02* +X93027500Y-136017000D01* +X93027500Y-136017000D02* +X93027500Y-135191500D01* +X93027500Y-135191500D02* +X93154500Y-135064500D01* +X89281000Y-136144000D02* +X89598500Y-136144000D01* +X89598500Y-136144000D02* +X89663398Y-136144000D01* +X90614500Y-137414000D02* +X91313000Y-137414000D01* +X90487500Y-137287000D02* +X90614500Y-137414000D01* +X90487500Y-136968102D02* +X90487500Y-137287000D01* +X89663398Y-136144000D02* +X90487500Y-136968102D01* +X94805500Y-145010500D02* +X89611200Y-145010500D01* +X89611200Y-145010500D02* +X89182000Y-145010500D01* +X89182000Y-145010500D02* +X88888000Y-144716500D01* +X93919000Y-133670500D02* +X93919000Y-134864500D01* +X93919000Y-134864500D02* +X94119000Y-135064500D01* +X92519500Y-132385500D02* +X92519500Y-133159500D01* +X93030500Y-133670500D02* +X93919000Y-133670500D01* +X92519500Y-133159500D02* +X93030500Y-133670500D01* +X71640000Y-144792000D02* +X71958000Y-145110000D01* +X71958000Y-145110000D02* +X73017000Y-145110000D01* +X71374000Y-144792000D02* +X71640000Y-144792000D01* +X71310500Y-144792000D02* +X71640000Y-144792000D01* +X81267000Y-137660000D02* +X81267000Y-138824000D01* +X84137500Y-138430000D02* +X86054500Y-138430000D01* +X83629500Y-138938000D02* +X84137500Y-138430000D01* +X81381000Y-138938000D02* +X83629500Y-138938000D01* +X81267000Y-138824000D02* +X81381000Y-138938000D01* +X86054500Y-137033000D02* +X85927500Y-136906000D01* +X77799500Y-151066500D02* +X77799500Y-150737000D01* +X77799500Y-150737000D02* +X78067000Y-150469500D01* +X78067000Y-150469500D02* +X78067000Y-149360000D01* +X85927500Y-136906000D02* +X85725000Y-136906000D01* +D41* +X95619000Y-135064500D02* +X95910400Y-135355900D01* +X95910400Y-135355900D02* +X95910400Y-146304000D01* +X95910400Y-146304000D02* +X94805500Y-147408900D01* +X94805500Y-147408900D02* +X94805500Y-147510500D01* +X95619000Y-135064500D02* +X95619000Y-133870500D01* +X95619000Y-133870500D02* +X95819000Y-133670500D01* +X95819000Y-133670500D02* +X95819000Y-129479000D01* +X95819000Y-129479000D02* +X96672400Y-128625600D01* +X96164400Y-125577600D02* +X96164400Y-125399800D01* +X96951800Y-126365000D02* +X96164400Y-125577600D01* +X96951800Y-127990600D02* +X96951800Y-126365000D01* +X96672400Y-128270000D02* +X96951800Y-127990600D01* +X96672400Y-128625600D02* +X96672400Y-128270000D01* +X71526400Y-148539200D02* +X71526400Y-147929600D01* +X71526400Y-148539200D02* +X71704200Y-148539200D01* +X71704200Y-148539200D02* +X73329800Y-150164800D01* +D42* +X76365100Y-151193500D02* +X76365100Y-151295100D01* +X76708000Y-151638000D02* +X76708000Y-151536400D01* +X76365100Y-151295100D02* +X76708000Y-151638000D01* +X74180700Y-151193500D02* +X74180700Y-151015700D01* +X74180700Y-151015700D02* +X73329800Y-150164800D01* +X73329800Y-150164800D02* +X73329800Y-150139400D01* +X76365100Y-151193500D02* +X74180700Y-151193500D01* +X74180700Y-151193500D02* +X74142600Y-151155400D01* +X90106500Y-150812500D02* +X89369900Y-150812500D01* +X82677000Y-151434800D02* +X82473800Y-151231600D01* +X84302600Y-151434800D02* +X82677000Y-151434800D01* +X84378800Y-151511000D02* +X84302600Y-151434800D01* +X88671400Y-151511000D02* +X84378800Y-151511000D01* +X89369900Y-150812500D02* +X88671400Y-151511000D01* +X90106500Y-149860000D02* +X90106500Y-150812500D01* +X90106500Y-150812500D02* +X89852500Y-151066500D01* +X90106500Y-149860000D02* +X91757500Y-149860000D01* +X91757500Y-149860000D02* +X94107000Y-147510500D01* +X94107000Y-147510500D02* +X94805500Y-147510500D01* +D40* +X96164400Y-125730000D02* +X96164400Y-125399800D01* +X96799400Y-126365000D02* +X96164400Y-125730000D01* +X96799400Y-127863600D02* +X96799400Y-126365000D01* +X96697800Y-127965200D02* +X96799400Y-127863600D01* +X96697800Y-128600200D02* +X96697800Y-127965200D01* +X95819000Y-129479000D02* +X96697800Y-128600200D01* +X71374000Y-146292000D02* +X71374000Y-146989800D01* +X71374000Y-146989800D02* +X71526400Y-147142200D01* +X71526400Y-147142200D02* +X71526400Y-147929600D01* +X81191800Y-151968200D02* +X82093500Y-151066500D01* +X77139800Y-151968200D02* +X81191800Y-151968200D01* +X76708000Y-151536400D02* +X77139800Y-151968200D01* +X71526400Y-148539200D02* +X74142600Y-151155400D01* +X94805500Y-147510500D02* +X94805500Y-147408900D01* +X94805500Y-147408900D02* +X95910400Y-146304000D01* +X95910400Y-146304000D02* +X95910400Y-135355900D01* +X94805500Y-147510500D02* +X94107000Y-147510500D01* +X94107000Y-147510500D02* +X91757500Y-149860000D01* +X95819000Y-133670500D02* +X95819000Y-134864500D01* +X95819000Y-134864500D02* +X95619000Y-135064500D01* +X82093500Y-151066500D02* +X89852500Y-151066500D01* +X89852500Y-151066500D02* +X90106500Y-150812500D01* +X71449500Y-146292000D02* +X71831500Y-145910000D01* +X71831500Y-145910000D02* +X73017000Y-145910000D01* +X71374000Y-146292000D02* +X71449500Y-146292000D01* +X73016000Y-145911000D02* +X73017000Y-145910000D01* +D42* +X80593500Y-151066500D02* +X79426500Y-151066500D01* +X79426500Y-151066500D02* +X79363000Y-151003000D01* +D40* +X85725000Y-135318500D02* +X85090000Y-135953500D01* +X85090000Y-135953500D02* +X85090000Y-137604500D01* +X85090000Y-137604500D02* +X84836000Y-137858500D01* +X84836000Y-137858500D02* +X83883500Y-137858500D01* +X83108800Y-140182600D02* +X82346800Y-140766800D01* +X82346800Y-140766800D02* +X82118200Y-148005800D01* +X80391000Y-151003000D02* +X80327500Y-151066500D01* +X80327500Y-151066500D02* +X79299500Y-151066500D01* +X85927500Y-135318500D02* +X85725000Y-135318500D01* +X87554500Y-138430000D02* +X87439500Y-138430000D01* +X87439500Y-138430000D02* +X86677500Y-137668000D01* +X86677500Y-137668000D02* +X86677500Y-135826500D01* +X86677500Y-135826500D02* +X86169500Y-135318500D01* +X86169500Y-135318500D02* +X85927500Y-135318500D01* +X79299500Y-151066500D02* +X79299500Y-150927500D01* +X79299500Y-150927500D02* +X78867000Y-150495000D01* +X78867000Y-150495000D02* +X78867000Y-149360000D01* +X84824000Y-124194000D02* +X83502500Y-124194000D01* +X84836000Y-124206000D02* +X84824000Y-124194000D01* +X82359500Y-123444000D02* +X81661000Y-123444000D01* +X81661000Y-123444000D02* +X79692500Y-125412500D01* +X79692500Y-125412500D02* +X77406500Y-125412500D01* +X77406500Y-125412500D02* +X76708000Y-126111000D01* +X76708000Y-126111000D02* +X75374500Y-126111000D01* +X83502500Y-124194000D02* +X83109500Y-124194000D01* +X83109500Y-124194000D02* +X82359500Y-123444000D01* +D41* +X94551500Y-136485500D02* +X94551500Y-137477500D01* +X94551500Y-137477500D02* +X94805500Y-137731500D01* +X83502500Y-122694000D02* +X86157500Y-122694000D01* +X86157500Y-122694000D02* +X87249000Y-121602500D01* +X87249000Y-121602500D02* +X90924498Y-121602500D01* +X90924498Y-121602500D02* +X90805000Y-121602500D01* +X82045000Y-122494000D02* +X83302500Y-122494000D01* +X83302500Y-122494000D02* +X83502500Y-122694000D01* +X80645000Y-123634500D02* +X80645000Y-122872500D01* +X80645000Y-122872500D02* +X81023500Y-122494000D01* +X81023500Y-122494000D02* +X82045000Y-122494000D01* +X80010000Y-124269500D02* +X80645000Y-123634500D01* +X76350500Y-124269500D02* +X77177900Y-124269500D01* +X79705200Y-124383800D02* +X79781400Y-124460000D01* +X77292200Y-124383800D02* +X79705200Y-124383800D01* +X77177900Y-124269500D02* +X77292200Y-124383800D01* +D42* +X71437500Y-128472500D02* +X71437500Y-127596900D01* +X71780400Y-127254000D02* +X72072500Y-127254000D01* +X71437500Y-127596900D02* +X71780400Y-127254000D01* +D40* +X87249000Y-121602500D02* +X90805000Y-121602500D01* +X86157500Y-122694000D02* +X87249000Y-121602500D01* +X94551500Y-137477500D02* +X94805500Y-137731500D01* +X95504000Y-123749500D02* +X95504000Y-126913000D01* +X95504000Y-126913000D02* +X95781500Y-127190500D01* +X76350500Y-124269500D02* +X80010000Y-124269500D01* +X81023500Y-122494000D02* +X82045000Y-122494000D01* +X80645000Y-122872500D02* +X81023500Y-122494000D01* +X83302500Y-122494000D02* +X83502500Y-122694000D01* +X78961000Y-130810000D02* +X77470000Y-130810000D01* +X77470000Y-130810000D02* +X76200000Y-132080000D01* +X68707000Y-133338000D02* +X66052000Y-133338000D01* +X66052000Y-133338000D02* +X66040000Y-133350000D01* +X68719000Y-130302000D02* +X68719000Y-131826000D01* +X68719000Y-131826000D02* +X68707000Y-131838000D01* +X68719000Y-130302000D02* +X66548000Y-130302000D01* +X66548000Y-130302000D02* +X66040000Y-130810000D01* +X68707000Y-130314000D02* +X68719000Y-130302000D01* +X66802000Y-130048000D02* +X66040000Y-130810000D01* +X68707000Y-136259000D02* +X68211000Y-136259000D01* +X68211000Y-136259000D02* +X66040000Y-138430000D01* +X68707000Y-136259000D02* +X68707000Y-136398000D01* +X66675000Y-138430000D02* +X66040000Y-138430000D01* +X68707000Y-134759000D02* +X69977000Y-134759000D01* +X69977000Y-134759000D02* +X70358000Y-134378000D01* +X68707000Y-134759000D02* +X67171000Y-134759000D01* +X67171000Y-134759000D02* +X66040000Y-135890000D01* +X68707000Y-134759000D02* +X68949000Y-134759000D01* +X68707000Y-134759000D02* +X68441000Y-134759000D01* +D42* +X74358500Y-127762000D02* +X74358500Y-125793500D01* +X74358500Y-125793500D02* +X73850500Y-125285500D01* +X73850500Y-125285500D02* +X73850500Y-124269500D01* +D40* +X82677000Y-130175000D02* +X82677000Y-131851400D01* +X88888000Y-142532800D02* +X88888000Y-143129000D01* +X88595200Y-142240000D02* +X88888000Y-142532800D01* +X88392000Y-142240000D02* +X88595200Y-142240000D01* +X88138000Y-141986000D02* +X88392000Y-142240000D01* +X87020400Y-141986000D02* +X88138000Y-141986000D01* +X84429600Y-136702800D02* +X84429600Y-137210800D01* +X83108800Y-135382000D02* +X84429600Y-136702800D01* +X83108800Y-134975600D02* +X83108800Y-135382000D01* +X82042000Y-133908800D02* +X83108800Y-134975600D01* +X82042000Y-132486400D02* +X82042000Y-133908800D01* +X82677000Y-131851400D02* +X82042000Y-132486400D01* +X73850500Y-125285500D02* +X73850500Y-124269500D01* +X74358500Y-125793500D02* +X73850500Y-125285500D01* +X71437500Y-129972500D02* +X71437500Y-131064000D01* +X72453500Y-132080000D02* +X73660000Y-132080000D01* +X71437500Y-131064000D02* +X72453500Y-132080000D01* +X73989500Y-124003500D02* +X73533000Y-124460000D01* +X73660000Y-132080000D02* +X72390000Y-130810000D01* +X83312000Y-130810000D02* +X84361000Y-130810000D01* +X82613500Y-130111500D02* +X82677000Y-130175000D01* +X82677000Y-130175000D02* +X83312000Y-130810000D01* +X82613500Y-128651000D02* +X82613500Y-130111500D01* +X80010000Y-126047500D02* +X82613500Y-128651000D01* +X77851000Y-126047500D02* +X80010000Y-126047500D01* +X76136500Y-127762000D02* +X77851000Y-126047500D01* +X72961500Y-127762000D02* +X74358500Y-127762000D01* +X74358500Y-127762000D02* +X76136500Y-127762000D01* +X72390000Y-128333500D02* +X72961500Y-127762000D01* +X72390000Y-130810000D02* +X72390000Y-128333500D01* +X73660000Y-132080000D02* +X73660000Y-131508500D01* +D41* +X78486000Y-121970800D02* +X78486000Y-122685000D01* +X78486000Y-122685000D02* +X79245000Y-123444000D01* +D42* +X78917800Y-122402600D02* +X78486000Y-121970800D01* +X78486000Y-121970800D02* +X79222600Y-122707400D01* +X78359000Y-122402600D02* +X78917800Y-122402600D01* +X65468500Y-125222000D02* +X66738500Y-125222000D01* +X66738500Y-125222000D02* +X68961000Y-122999500D01* +X68961000Y-122999500D02* +X69049900Y-122999500D01* +X69049900Y-122999500D02* +X69646800Y-122402600D01* +X69646800Y-122402600D02* +X78359000Y-122402600D01* +X78359000Y-122402600D02* +X78409800Y-122402600D01* +X65468500Y-125222000D02* +X65468500Y-119573040D01* +X65468500Y-119573040D02* +X65595500Y-119446040D01* +D40* +X79245000Y-123444000D02* +X78994000Y-123444000D01* +X78994000Y-123444000D02* +X78549500Y-122999500D01* +X78549500Y-122999500D02* +X68961000Y-122999500D01* +X68961000Y-122999500D02* +X66738500Y-125222000D01* +X65468500Y-119573040D02* +X65595500Y-119446040D01* +X84717000Y-147510000D02* +X85598500Y-147510000D01* +X86804500Y-145300000D02* +X87388000Y-144716500D01* +X86804500Y-146304000D02* +X86804500Y-145300000D01* +X85598500Y-147510000D02* +X86804500Y-146304000D01* +X87388000Y-143129000D02* +X87388000Y-144716500D01* +X84717000Y-146710000D02* +X83845000Y-146710000D01* +X79679800Y-144983200D02* +X79654300Y-144983200D01* +X83502500Y-145923000D02* +X83375500Y-145796000D01* +X83502500Y-146367500D02* +X83502500Y-145923000D01* +X83845000Y-146710000D02* +X83502500Y-146367500D01* +X79679800Y-144792700D02* +X79654300Y-144792700D01* +X79654300Y-144792700D02* +X79679800Y-144792700D01* +X79679800Y-144792700D02* +X79654300Y-144792700D01* +X79667000Y-149360000D02* +X79654300Y-144983200D01* +X79654300Y-144983200D02* +X79654300Y-144792700D01* +X79654300Y-144792700D02* +X79476500Y-140589100D01* +X82740500Y-127000000D02* +X84361000Y-127000000D01* +X79476500Y-140589100D02* +X79502000Y-140563600D01* +X84361000Y-128270000D02* +X84361000Y-127000000D01* +X88798400Y-140512800D02* +X89420700Y-140525500D01* +X85928000Y-145110000D02* +X84717000Y-145110000D01* +X86055200Y-145237200D02* +X85928000Y-145110000D01* +X89420700Y-140525500D02* +X89509600Y-140614400D01* +X86868000Y-140512800D02* +X87146002Y-140512800D01* +X85814000Y-144310000D02* +X84717000Y-144310000D01* +X85902800Y-144221200D02* +X85814000Y-144310000D01* +X85902800Y-144068800D02* +X85902800Y-144221200D01* +X86309200Y-143662400D02* +X85902800Y-144068800D01* +X87680800Y-141047598D02* +X87680800Y-141325600D01* +X87146002Y-140512800D02* +X87680800Y-141047598D01* +X84717000Y-143510000D02* +X83515200Y-143510000D01* +X79418200Y-131622800D02* +X78961000Y-132080000D01* +X80111600Y-131622800D02* +X79418200Y-131622800D01* +X80365600Y-131876800D02* +X80111600Y-131622800D01* +X83515200Y-143510000D02* +X83413600Y-143611600D01* +X78961000Y-129540000D02* +X79908400Y-129540000D01* +X79908400Y-129540000D02* +X80264000Y-129895600D01* +X80264000Y-129895600D02* +X80264000Y-130759200D01* +X80264000Y-130759200D02* +X81026000Y-131521200D01* +X81026000Y-131521200D02* +X81026000Y-134162800D01* +X81026000Y-134162800D02* +X81838800Y-134975600D01* +X83058000Y-141071600D02* +X83528000Y-142710000D01* +X83528000Y-142710000D02* +X84717000Y-142710000D01* +X80467000Y-137660000D02* +X80467000Y-139141000D01* +X80836000Y-139510000D02* +X84717000Y-139510000D01* +X80467000Y-139141000D02* +X80836000Y-139510000D01* +X82867000Y-136462000D02* +X82867000Y-137660000D01* +X82931000Y-136398000D02* +X82867000Y-136462000D01* +X91313000Y-136017000D02* +X90805000Y-135509000D01* +X91313000Y-136144000D02* +X91313000Y-136017000D01* +X78867000Y-137660000D02* +X78867000Y-136652000D01* +X88582500Y-137414000D02* +X89281000Y-137414000D01* +X88582500Y-135636000D02* +X88582500Y-137414000D01* +X88455500Y-135509000D02* +X88582500Y-135636000D01* +X81724500Y-136334500D02* +X82423000Y-135636000D01* +X79184500Y-136334500D02* +X81724500Y-136334500D01* +X78867000Y-136652000D02* +X79184500Y-136334500D01* +X78867000Y-137660000D02* +X78867000Y-136906000D01* +X73017000Y-140310000D02* +X73913600Y-140310000D01* +X81280000Y-125159000D02* +X82045000Y-124394000D01* +X81280000Y-125425200D02* +X81280000Y-125159000D01* +X81178400Y-125526800D02* +X81280000Y-125425200D01* +X73913600Y-140310000D02* +X74879200Y-139344400D01* +X90757400Y-123228540D02* +X90757400Y-124094900D01* +X74981000Y-141910000D02* +X73017000Y-141910000D01* +X75184000Y-142113000D02* +X74981000Y-141910000D01* +X90757400Y-124094900D02* +X91376500Y-124714000D01* +X73017000Y-142710000D02* +X74384000Y-142710000D01* +X90107400Y-124522600D02* +X90107400Y-123228540D01* +X90017600Y-124612400D02* +X90107400Y-124522600D01* +X81127600Y-144170400D02* +X80873600Y-141655800D01* +X81229200Y-144272000D02* +X81127600Y-144170400D01* +X75387200Y-143713200D02* +X78943200Y-143713200D01* +X74384000Y-142710000D02* +X75387200Y-143713200D01* +X73017000Y-143510000D02* +X72136000Y-143510000D01* +X72136000Y-143510000D02* +X71818500Y-143192500D01* +X71818500Y-143192500D02* +X71818500Y-141287500D01* +X71818500Y-141287500D02* +X71068500Y-140537500D01* +X71068500Y-140537500D02* +X69749100Y-140537500D01* +X69749100Y-140537500D02* +X69748400Y-140536800D01* +X71068500Y-140537500D02* +X70231000Y-140537500D01* +X71818500Y-141287500D02* +X71068500Y-140537500D01* +X71818500Y-143192500D02* +X71818500Y-141287500D01* +X72136000Y-143510000D02* +X71818500Y-143192500D01* +X70040500Y-143141000D02* +X70941500Y-143141000D01* +X70941500Y-143141000D02* +X72110500Y-144310000D01* +X72110500Y-144310000D02* +X73017000Y-144310000D01* +X70231000Y-143141000D02* +X70624000Y-143141000D01* +X69786500Y-145744500D02* +X69786500Y-146367500D01* +X74244200Y-146532600D02* +X73169000Y-146558000D01* +X74345800Y-146761200D02* +X74244200Y-146532600D01* +X70548500Y-146875500D02* +X70815200Y-147320000D01* +X70548500Y-146685000D02* +X70548500Y-146875500D01* +X70358000Y-146494500D02* +X70548500Y-146685000D01* +X69913500Y-146494500D02* +X70358000Y-146494500D01* +X69786500Y-146367500D02* +X69913500Y-146494500D01* +X73169000Y-146558000D02* +X73017000Y-146710000D01* +X72992000Y-146685000D02* +X73017000Y-146710000D01* +X70231000Y-148348000D02* +X70231000Y-148691600D01* +X73017000Y-148302600D02* +X73017000Y-147510000D01* +X73126600Y-148412200D02* +X73017000Y-148302600D01* +X71678800Y-149529800D02* +X71678800Y-149783800D01* +X71272400Y-149123400D02* +X71678800Y-149529800D01* +X70662800Y-149123400D02* +X71272400Y-149123400D01* +X70231000Y-148691600D02* +X70662800Y-149123400D01* +X74867000Y-149360000D02* +X74867000Y-147573500D01* +X85344000Y-149860000D02* +X87566500Y-149860000D01* +X83502500Y-148018500D02* +X85344000Y-149860000D01* +X83502500Y-147066000D02* +X83502500Y-148018500D01* +X82867500Y-146431000D02* +X83502500Y-147066000D01* +X76009500Y-146431000D02* +X78943200Y-145719800D01* +X74867000Y-147573500D02* +X76009500Y-146431000D01* +X75667000Y-149360000D02* +X75667000Y-147853000D01* +X75667000Y-147853000D02* +X78536800Y-146634200D01* +X84361000Y-133350000D02* +X82994500Y-133350000D01* +X81267000Y-148005500D02* +X81267000Y-149360000D01* +X80454500Y-147193000D02* +X81267000Y-148005500D01* +X80200500Y-141236700D02* +X80454500Y-147193000D01* +X80137000Y-141173200D02* +X80200500Y-141236700D01* +X84361000Y-133350000D02* +X84361000Y-134620000D01* +X82867000Y-149360000D02* +X82867000Y-150329400D01* +X94030800Y-142595600D02* +X94030800Y-141808200D01* +X92252800Y-144373600D02* +X94030800Y-142595600D01* +X84099400Y-150291800D02* +X84404200Y-149987000D01* +X82904600Y-150291800D02* +X84099400Y-150291800D01* +X82867000Y-150329400D02* +X82904600Y-150291800D01* +X87427500Y-135624000D02* +X87427500Y-135318500D01* +X87427500Y-133731000D02* +X87058500Y-133731000D01* +X86741000Y-126238000D02* +X87185500Y-125793500D01* +X87058500Y-133731000D02* +X86741000Y-133413500D01* +X87185500Y-125793500D02* +X87427500Y-125793500D01* +X87427500Y-135318500D02* +X87427500Y-136906000D01* +X87427500Y-135318500D02* +X87427500Y-133731000D01* +X68643500Y-148348000D02* +X66282000Y-148348000D01* +X66282000Y-148348000D02* +X66040000Y-148590000D01* +X66040000Y-146050000D02* +X68147500Y-146050000D01* +X68147500Y-146050000D02* +X68453000Y-145744500D01* +X66345500Y-145744500D02* +X66040000Y-146050000D01* +X68453000Y-143141000D02* +X66409000Y-143141000D01* +X66409000Y-143141000D02* +X66040000Y-143510000D01* +X66409000Y-143141000D02* +X66040000Y-143510000D01* +X67970400Y-140536800D02* +X66473200Y-140536800D01* +X66473200Y-140536800D02* +X66040000Y-140970000D01* +X66472500Y-140537500D02* +X66040000Y-140970000D01* +X66472500Y-140537500D02* +X66040000Y-140970000D01* +X89585800Y-136779000D02* +X89281000Y-136779000D01* +X89966800Y-137160000D02* +X89585800Y-136779000D01* +X89966800Y-137668000D02* +X89966800Y-137160000D01* +X90373200Y-138074400D02* +X89966800Y-137668000D01* +X91249500Y-142113000D02* +X90805000Y-142113000D01* +X91249500Y-142113000D02* +X90741500Y-142113000D01* +X91313000Y-136779000D02* +X91821000Y-136779000D01* +X91948000Y-136906000D02* +X91948000Y-138874500D01* +X91821000Y-136779000D02* +X91948000Y-136906000D01* +X91948000Y-138874500D02* +X91249500Y-139573000D01* +X85927500Y-133731000D02* +X85927500Y-132080000D01* +X85927500Y-132080000D02* +X84361000Y-132080000D01* +X85927500Y-125793500D02* +X82740500Y-125793500D01* +X83312000Y-129540000D02* +X84361000Y-129540000D01* +X83127002Y-129355002D02* +X83312000Y-129540000D01* +X83127002Y-128339002D02* +X83127002Y-129355002D01* +X82042000Y-127254000D02* +X83127002Y-128339002D01* +X82042000Y-126492000D02* +X82042000Y-127254000D01* +X82740500Y-125793500D02* +X82042000Y-126492000D01* +X85927500Y-127381000D02* +X85927500Y-125793500D01* +X84424500Y-129476500D02* +X84361000Y-129540000D01* +X67970400Y-142036800D02* +X69748400Y-142036800D01* +X68453000Y-144641000D02* +X70040500Y-144641000D01* +X68453000Y-147244500D02* +X69786500Y-147244500D01* +X68643500Y-149848000D02* +X70231000Y-149848000D01* +X78961000Y-128270000D02* +X80010000Y-128270000D01* +X80010000Y-128270000D02* +X80467200Y-128727200D01* +X71616000Y-138938000D02* +X71501000Y-138938000D01* +X71501000Y-138938000D02* +X70675500Y-138112500D01* +X69266500Y-138112500D02* +X68707000Y-137553000D01* +X70675500Y-138112500D02* +X69266500Y-138112500D01* +X71616000Y-140093000D02* +X71616000Y-138938000D01* +X71564500Y-140144500D02* +X71616000Y-140093000D01* +X72961500Y-137045000D02* +X74029000Y-137045000D01* +X74029000Y-137045000D02* +X74041000Y-137033000D01* +X79024500Y-128333500D02* +X78961000Y-128270000D01* +X86868000Y-141147800D02* +X86690200Y-141147800D01* +X86690200Y-141147800D02* +X86131400Y-141706600D01* +X86131400Y-141706600D02* +X86131400Y-142367000D01* +X81635600Y-141376400D02* +X80594200Y-140335000D01* +X80594200Y-140335000D02* +X80416400Y-140335000D01* +X80416400Y-140335000D02* +X79984600Y-139903200D01* +X79984600Y-139903200D02* +X78867000Y-139903200D01* +X78867000Y-139903200D02* +X76936600Y-141833600D01* +X76936600Y-141833600D02* +X76936600Y-142951200D01* +X76301600Y-144678400D02* +X76047600Y-144932400D01* +X76047600Y-144932400D02* +X74726800Y-144932400D01* +X71145400Y-141630400D02* +X70789800Y-141274800D01* +X70789800Y-141274800D02* +X69088000Y-141274800D01* +X69088000Y-141274800D02* +X68884800Y-141071600D01* +X68884800Y-141071600D02* +X68884800Y-140004800D01* +X68884800Y-140004800D02* +X69469000Y-139420600D01* +X69469000Y-139420600D02* +X69469000Y-138938000D01* +X70116000Y-138938000D02* +X69469000Y-138938000D01* +X69469000Y-138938000D02* +X68822000Y-138938000D01* +X68822000Y-138938000D02* +X68707000Y-139053000D01* +X76708000Y-135878000D02* +X79704500Y-135878000D01* +X80073500Y-133350000D02* +X78961000Y-133350000D01* +X80264000Y-133540500D02* +X80073500Y-133350000D01* +X80264000Y-135318500D02* +X80264000Y-133540500D01* +X79704500Y-135878000D02* +X80264000Y-135318500D01* +X75057000Y-135878000D02* +X76708000Y-135878000D01* +X73406000Y-135878000D02* +X75057000Y-135878000D01* +X74981500Y-134378000D02* +X74358500Y-135001000D01* +X88201500Y-139890500D02* +X88849200Y-139903200D01* +X88188800Y-139954000D02* +X88201500Y-139890500D01* +X88239600Y-140208000D02* +X88239600Y-139954000D01* +X88239600Y-139954000D02* +X88239600Y-140208000D01* +X74358500Y-135001000D02* +X71818500Y-135001000D01* +X76708000Y-134378000D02* +X74981500Y-134378000D01* +X75057000Y-134378000D02* +X76708000Y-134378000D01* +X78961000Y-134620000D02* +X78549500Y-134620000D01* +X78549500Y-134620000D02* +X77533500Y-133604000D01* +X77533500Y-133604000D02* +X74180000Y-133604000D01* +X74180000Y-133604000D02* +X73406000Y-134378000D01* +X70358000Y-133211000D02* +X70854000Y-133211000D01* +X72021000Y-134378000D02* +X73406000Y-134378000D01* +X70854000Y-133211000D02* +X72021000Y-134378000D01* +X73406000Y-134378000D02* +X73013000Y-134378000D01* +X78961000Y-127000000D02* +X79857600Y-127000000D01* +X71616000Y-136156000D02* +X71616000Y-137287000D01* +X71831200Y-135940800D02* +X71616000Y-136156000D01* +X79857600Y-127000000D02* +X80213200Y-127355600D01* +X71616000Y-137287000D02* +X71616000Y-137783000D01* +X71616000Y-137783000D02* +X72378000Y-138545000D01* +X72378000Y-138545000D02* +X72961500Y-138545000D01* +X79024500Y-127063500D02* +X78961000Y-127000000D01* +X70358000Y-131711000D02* +X70358000Y-130441000D01* +X70358000Y-130441000D02* +X70219000Y-130302000D01* +X70358000Y-130441000D02* +X70219000Y-130302000D01* +X70116000Y-137287000D02* +X70116000Y-136120000D01* +X70116000Y-136120000D02* +X70358000Y-135878000D01* +M02* diff --git a/PCB/OUTPUT_V3/Tinylab_proto1-F_Mask.gbr b/PCB/OUTPUT_V3/Tinylab_proto1-F_Mask.gbr new file mode 100644 index 00000000..011397c1 --- /dev/null +++ b/PCB/OUTPUT_V3/Tinylab_proto1-F_Mask.gbr @@ -0,0 +1,290 @@ +G04 #@! TF.FileFunction,Soldermask,Top* +%FSLAX46Y46*% +G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* +G04 Created by KiCad (PCBNEW (2015-08-05 BZR 6055, Git fa29c62)-product) date 02/02/2016 11:58:15 AM* +%MOMM*% +G01* +G04 APERTURE LIST* +%ADD10C,0.100000*% +%ADD11R,0.800000X0.750000*% +%ADD12R,0.750000X0.800000*% +%ADD13R,1.300000X1.300000*% +%ADD14C,1.300000*% +%ADD15C,1.998980*% +%ADD16R,1.998980X1.998980*% +%ADD17R,1.600000X1.000000*% +%ADD18R,1.600000X0.560000*% +%ADD19R,0.560000X1.600000*% +%ADD20R,1.905000X1.905000*% +%ADD21C,1.905000*% +%ADD22R,2.032000X1.727200*% +%ADD23O,2.032000X1.727200*% +%ADD24R,0.400000X1.350000*% +%ADD25O,1.250000X0.950000*% +%ADD26O,1.000000X1.550000*% +%ADD27R,1.727200X1.727200*% +%ADD28O,1.727200X1.727200*% +%ADD29R,1.727200X2.032000*% +%ADD30O,1.727200X2.032000*% +%ADD31R,2.032000X2.032000*% +%ADD32O,2.032000X2.032000*% +%ADD33R,0.900000X0.600000*% +%ADD34R,0.500000X0.900000*% +%ADD35R,0.900000X0.500000*% +%ADD36R,0.600000X0.900000*% +%ADD37R,1.500000X0.600000*% +%ADD38R,0.508000X0.304800*% +G04 APERTURE END LIST* +D10* +D11* +X86054500Y-130492500D03* +X87554500Y-130492500D03* +X86054500Y-128968500D03* +X87554500Y-128968500D03* +D12* +X92519500Y-130885500D03* +X92519500Y-132385500D03* +D11* +X95619000Y-135064500D03* +X94119000Y-135064500D03* +X87554500Y-138430000D03* +X86054500Y-138430000D03* +D13* +X94805500Y-147510500D03* +D14* +X94805500Y-145010500D03* +D11* +X79363000Y-151003000D03* +X77863000Y-151003000D03* +D13* +X93281500Y-127190500D03* +D14* +X95781500Y-127190500D03* +D12* +X83502500Y-124194000D03* +X83502500Y-122694000D03* +X71374000Y-146292000D03* +X71374000Y-144792000D03* +X95504000Y-122249500D03* +X95504000Y-123749500D03* +X68707000Y-133338000D03* +X68707000Y-131838000D03* +X68707000Y-136259000D03* +X68707000Y-134759000D03* +D14* +X76350500Y-124269500D03* +D13* +X73850500Y-124269500D03* +D12* +X71437500Y-129972500D03* +X71437500Y-128472500D03* +D15* +X65595500Y-119446040D03* +D16* +X75755500Y-119446040D03* +D17* +X94551500Y-139485500D03* +X94551500Y-136485500D03* +D18* +X84717000Y-147510000D03* +X84717000Y-146710000D03* +X84717000Y-145910000D03* +X84717000Y-145110000D03* +X84717000Y-144310000D03* +X84717000Y-143510000D03* +X84717000Y-142710000D03* +X84717000Y-141910000D03* +X84717000Y-141110000D03* +X84717000Y-140310000D03* +X84717000Y-139510000D03* +D19* +X82867000Y-137660000D03* +X82067000Y-137660000D03* +X81267000Y-137660000D03* +X80467000Y-137660000D03* +X79667000Y-137660000D03* +X78867000Y-137660000D03* +X78067000Y-137660000D03* +X77267000Y-137660000D03* +X76467000Y-137660000D03* +X75667000Y-137660000D03* +X74867000Y-137660000D03* +D18* +X73017000Y-139510000D03* +X73017000Y-140310000D03* +X73017000Y-141110000D03* +X73017000Y-141910000D03* +X73017000Y-142710000D03* +X73017000Y-143510000D03* +X73017000Y-144310000D03* +X73017000Y-145110000D03* +X73017000Y-145910000D03* +X73017000Y-146710000D03* +X73017000Y-147510000D03* +D19* +X74867000Y-149360000D03* +X75667000Y-149360000D03* +X76467000Y-149360000D03* +X77267000Y-149360000D03* +X78067000Y-149360000D03* +X78867000Y-149360000D03* +X79667000Y-149360000D03* +X80467000Y-149360000D03* +X81267000Y-149360000D03* +X82067000Y-149360000D03* +X82867000Y-149360000D03* +D20* +X65468500Y-125222000D03* +D21* +X70548500Y-125222000D03* +D22* +X90043000Y-126301500D03* +D23* +X90043000Y-128841500D03* +X90043000Y-131381500D03* +X90043000Y-133921500D03* +D24* +X91407400Y-123228540D03* +X90757400Y-123228540D03* +X90107400Y-123228540D03* +X89457400Y-123228540D03* +X88807400Y-123228540D03* +D25* +X92607400Y-123228540D03* +X87607400Y-123228540D03* +D26* +X93607400Y-120528540D03* +X86607400Y-120528540D03* +D22* +X66040000Y-148590000D03* +D23* +X66040000Y-146050000D03* +X66040000Y-143510000D03* +X66040000Y-140970000D03* +D27* +X90106500Y-149860000D03* +D28* +X87566500Y-149860000D03* +X90106500Y-147320000D03* +X87566500Y-147320000D03* +D29* +X83693000Y-119380000D03* +D30* +X81153000Y-119380000D03* +X78613000Y-119380000D03* +D22* +X66040000Y-130810000D03* +D23* +X66040000Y-133350000D03* +X66040000Y-135890000D03* +X66040000Y-138430000D03* +D27* +X73660000Y-132080000D03* +D28* +X73660000Y-129540000D03* +X76200000Y-132080000D03* +X76200000Y-129540000D03* +D31* +X91249500Y-142113000D03* +D32* +X91249500Y-139573000D03* +D33* +X79245000Y-123444000D03* +X82045000Y-122494000D03* +X82045000Y-124394000D03* +D34* +X85927500Y-132080000D03* +X87427500Y-132080000D03* +X85927500Y-127381000D03* +X87427500Y-127381000D03* +X85927500Y-133731000D03* +X87427500Y-133731000D03* +X87427500Y-125793500D03* +X85927500Y-125793500D03* +X85927500Y-135318500D03* +X87427500Y-135318500D03* +X85927500Y-136906000D03* +X87427500Y-136906000D03* +D35* +X67970400Y-142036800D03* +X67970400Y-140536800D03* +X68453000Y-144641000D03* +X68453000Y-143141000D03* +X68453000Y-147244500D03* +X68453000Y-145744500D03* +X68643500Y-149848000D03* +X68643500Y-148348000D03* +X69748400Y-140536800D03* +X69748400Y-142036800D03* +X70040500Y-143141000D03* +X70040500Y-144641000D03* +X69786500Y-145744500D03* +X69786500Y-147244500D03* +X70231000Y-148348000D03* +X70231000Y-149848000D03* +X68707000Y-137553000D03* +X68707000Y-139053000D03* +D34* +X71616000Y-138938000D03* +X70116000Y-138938000D03* +D35* +X75057000Y-135878000D03* +X75057000Y-134378000D03* +X76708000Y-135878000D03* +X76708000Y-134378000D03* +X73406000Y-134378000D03* +X73406000Y-135878000D03* +X72961500Y-138545000D03* +X72961500Y-137045000D03* +D34* +X82093500Y-151066500D03* +X80593500Y-151066500D03* +D35* +X70358000Y-131711000D03* +X70358000Y-133211000D03* +D34* +X70116000Y-137287000D03* +X71616000Y-137287000D03* +X68719000Y-130302000D03* +X70219000Y-130302000D03* +D35* +X70358000Y-134378000D03* +X70358000Y-135878000D03* +D34* +X88888000Y-143129000D03* +X87388000Y-143129000D03* +X87388000Y-144716500D03* +X88888000Y-144716500D03* +D36* +X94869000Y-130870500D03* +X95819000Y-133670500D03* +X93919000Y-133670500D03* +D37* +X84361000Y-134620000D03* +X84361000Y-133350000D03* +X84361000Y-132080000D03* +X84361000Y-130810000D03* +X84361000Y-129540000D03* +X84361000Y-128270000D03* +X84361000Y-127000000D03* +X78961000Y-127000000D03* +X78961000Y-128270000D03* +X78961000Y-129540000D03* +X78961000Y-130810000D03* +X78961000Y-132080000D03* +X78961000Y-133350000D03* +X78961000Y-134620000D03* +D38* +X88900000Y-141147800D03* +X88900000Y-139877800D03* +X86868000Y-141147800D03* +X88900000Y-140512800D03* +X86868000Y-139877800D03* +X86868000Y-140512800D03* +X91313000Y-137414000D03* +X91313000Y-136144000D03* +X89281000Y-137414000D03* +X91313000Y-136779000D03* +X89281000Y-136144000D03* +X89281000Y-136779000D03* +M02* diff --git a/PCB/OUTPUT_V3/Tinylab_proto1.drl b/PCB/OUTPUT_V3/Tinylab_proto1.drl new file mode 100644 index 00000000..2c0f4e56 --- /dev/null +++ b/PCB/OUTPUT_V3/Tinylab_proto1.drl @@ -0,0 +1,140 @@ +M48 +;DRILL file {KiCad (2015-08-05 BZR 6055, Git fa29c62)-product} date 02/02/2016 11:58:21 AM +;FORMAT={2:4/ absolute / inch / keep zeros} +FMAT,2 +INCH,TZ +T1C0.016 +T2C0.020 +T3C0.022 +T4C0.031 +T5C0.032 +T6C0.039 +T7C0.040 +T8C0.050 +% +G90 +G05 +M72 +T1 +X027880Y-058000 +X028010Y-055760 +X028175Y-055175 +X028220Y-058970 +X028275Y-053150 +X028280Y-053520 +X028375Y-050100 +X028790Y-058430 +X029150Y-053950 +X029270Y-057780 +X029420Y-057060 +X029480Y-054860 +X029600Y-055950 +X029675Y-049650 +X030040Y-056960 +X030290Y-056280 +X030380Y-057250 +X030730Y-058150 +X030920Y-057730 +X031080Y-056580 +X031080Y-057370 +X031300Y-055340 +X031370Y-057080 +X031550Y-055580 +X031580Y-050140 +X031640Y-051920 +X031650Y-059450 +X031680Y-050680 +X031840Y-055770 +X031960Y-049420 +X031980Y-056800 +X032140Y-055660 +X032220Y-053140 +X032330Y-058270 +X032425Y-048600 +X032450Y-053400 +X032575Y-050000 +X032625Y-057650 +X032650Y-053700 +X032675Y-052500 +X032700Y-055540 +X032720Y-055190 +X032825Y-057400 +X032840Y-056540 +X033025Y-054275 +X033230Y-059050 +X033240Y-054020 +X033400Y-048900 +X033880Y-057180 +X033910Y-056050 +X033980Y-056560 +X034150Y-049700 +X034150Y-052525 +X034260Y-055900 +X034520Y-055640 +X034720Y-055100 +X034825Y-053350 +X035060Y-054520 +X035240Y-055360 +X035440Y-049060 +X035580Y-054360 +X035650Y-053675 +X035750Y-047875 +X035750Y-053350 +X035975Y-049100 +X036320Y-056840 +X036450Y-053725 +X037020Y-055830 +X037325Y-054225 +X037860Y-049370 +T4 +X029075Y-048925 +X030059Y-048925 +X036725Y-050075 +X037325Y-057091 +X037325Y-058075 +X037709Y-050075 +T5 +X025775Y-049300 +X027775Y-049300 +T6 +X029825Y-047026 +T7 +X026000Y-051500 +X026000Y-052500 +X026000Y-053500 +X026000Y-054500 +X026000Y-055500 +X026000Y-056500 +X026000Y-057500 +X026000Y-058500 +X029000Y-051000 +X029000Y-052000 +X030000Y-051000 +X030000Y-052000 +X030950Y-047000 +X031950Y-047000 +X032950Y-047000 +X034475Y-058000 +X034475Y-059000 +X035450Y-049725 +X035450Y-050725 +X035450Y-051725 +X035450Y-052725 +X035475Y-058000 +X035475Y-059000 +X035925Y-054950 +X035925Y-055950 +T8 +X025825Y-047026 +T2 +X034097Y-047324G85X034097Y-047580 +G05 +X036853Y-047324G85X036853Y-047580 +G05 +T3 +X034550Y-048515G85X034432Y-048515 +G05 +X036519Y-048515G85X036401Y-048515 +G05 +T0 +M30 diff --git a/PCB/OUTPUT_V35/Tinylab_proto1-B_Cu.gbr b/PCB/OUTPUT_V35/Tinylab_proto1-B_Cu.gbr new file mode 100644 index 00000000..d89619c3 --- /dev/null +++ b/PCB/OUTPUT_V35/Tinylab_proto1-B_Cu.gbr @@ -0,0 +1,631 @@ +G04 #@! TF.FileFunction,Copper,L2,Bot,Signal* +%FSLAX46Y46*% +G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* +G04 Created by KiCad (PCBNEW (2015-08-05 BZR 6055, Git fa29c62)-product) date 02/02/2016 11:58:07 AM* +%MOMM*% +G01* +G04 APERTURE LIST* +%ADD10C,0.100000*% +%ADD11R,1.300000X1.300000*% +%ADD12C,1.300000*% +%ADD13C,1.998980*% +%ADD14R,1.998980X1.998980*% +%ADD15R,1.905000X1.905000*% +%ADD16C,1.905000*% +%ADD17R,2.032000X1.727200*% +%ADD18O,2.032000X1.727200*% +%ADD19O,1.250000X0.950000*% +%ADD20O,1.000000X1.550000*% +%ADD21R,1.727200X1.727200*% +%ADD22O,1.727200X1.727200*% +%ADD23R,1.727200X2.032000*% +%ADD24O,1.727200X2.032000*% +%ADD25R,2.032000X2.032000*% +%ADD26O,2.032000X2.032000*% +%ADD27C,0.600000*% +%ADD28C,0.508000*% +%ADD29C,0.250000*% +%ADD30C,1.016000*% +G04 APERTURE END LIST* +D10* +D11* +X94805500Y-147510500D03* +D12* +X94805500Y-145010500D03* +D11* +X93281500Y-127190500D03* +D12* +X95781500Y-127190500D03* +X76350500Y-124269500D03* +D11* +X73850500Y-124269500D03* +D13* +X65595500Y-119446040D03* +D14* +X75755500Y-119446040D03* +D15* +X65468500Y-125222000D03* +D16* +X70548500Y-125222000D03* +D17* +X90043000Y-126301500D03* +D18* +X90043000Y-128841500D03* +X90043000Y-131381500D03* +X90043000Y-133921500D03* +D19* +X92607400Y-123228540D03* +X87607400Y-123228540D03* +D20* +X93607400Y-120528540D03* +X86607400Y-120528540D03* +D17* +X66040000Y-148590000D03* +D18* +X66040000Y-146050000D03* +X66040000Y-143510000D03* +X66040000Y-140970000D03* +D21* +X90106500Y-149860000D03* +D22* +X87566500Y-149860000D03* +X90106500Y-147320000D03* +X87566500Y-147320000D03* +D23* +X83693000Y-119380000D03* +D24* +X81153000Y-119380000D03* +X78613000Y-119380000D03* +D17* +X66040000Y-130810000D03* +D18* +X66040000Y-133350000D03* +X66040000Y-135890000D03* +X66040000Y-138430000D03* +D21* +X73660000Y-132080000D03* +D22* +X73660000Y-129540000D03* +X76200000Y-132080000D03* +X76200000Y-129540000D03* +D25* +X91249500Y-142113000D03* +D26* +X91249500Y-139573000D03* +D27* +X78054200Y-147701000D03* +X77165200Y-145415000D03* +X89052400Y-138480800D03* +X90551000Y-136334500D03* +X92583000Y-136461500D03* +X96164400Y-125399800D03* +X83883500Y-137858500D03* +X83108800Y-140182600D03* +X82118200Y-148005800D03* +X80391000Y-151003000D03* +X84836000Y-124206000D03* +X75374500Y-126111000D03* +X82359500Y-123444000D03* +X90805000Y-121602500D03* +X94805500Y-137731500D03* +X72072500Y-127254000D03* +X87020400Y-141986000D03* +X84429600Y-137210800D03* +X79679800Y-144983200D03* +X83375500Y-145796000D03* +X82740500Y-127000000D03* +X79502000Y-140563600D03* +X86055200Y-145237200D03* +X89509600Y-140614400D03* +X86309200Y-143662400D03* +X87680800Y-141325600D03* +X80365600Y-131876800D03* +X83413600Y-143611600D03* +X81838800Y-134975600D03* +X83058000Y-141071600D03* +X82931000Y-136398000D03* +X90805000Y-135509000D03* +X88455500Y-135509000D03* +X82423000Y-135636000D03* +X81178400Y-125526800D03* +X74879200Y-139344400D03* +X75184000Y-142113000D03* +X91376500Y-124714000D03* +X90017600Y-124612400D03* +X80873600Y-141655800D03* +X81229200Y-144272000D03* +X78943200Y-143713200D03* +X74345800Y-146761200D03* +X70815200Y-147320000D03* +X73126600Y-148412200D03* +X71678800Y-149783800D03* +X82867500Y-146431000D03* +X78943200Y-145719800D03* +X78536800Y-146634200D03* +X80137000Y-141173200D03* +X82994500Y-133350000D03* +X94030800Y-141808200D03* +X92252800Y-144373600D03* +X84404200Y-149987000D03* +X86741000Y-126238000D03* +X86741000Y-133413500D03* +X90373200Y-138074400D03* +X80467200Y-128727200D03* +X71564500Y-140144500D03* +X74041000Y-137033000D03* +X86131400Y-142367000D03* +X81635600Y-141376400D03* +X76936600Y-142951200D03* +X76301600Y-144678400D03* +X74726800Y-144932400D03* +X71145400Y-141630400D03* +X88188800Y-139954000D03* +X71818500Y-135001000D03* +X71831200Y-135940800D03* +X80213200Y-127355600D03* +D28* +X89052400Y-138480800D02* +X89052400Y-138176000D01* +X89966800Y-137261600D02* +X89966800Y-136918700D01* +X89052400Y-138176000D02* +X89966800Y-137261600D01* +X89966800Y-136918700D02* +X90551000Y-136334500D01* +X92583000Y-136461500D02* +X90678000Y-136461500D01* +X90678000Y-136461500D02* +X90551000Y-136334500D01* +D29* +X77800200Y-147447000D02* +X78054200Y-147701000D01* +X77800200Y-145770600D02* +X77800200Y-147447000D01* +X77317600Y-145288000D02* +X77800200Y-145770600D01* +X77292200Y-145288000D02* +X77317600Y-145288000D01* +X77165200Y-145415000D02* +X77292200Y-145288000D01* +X89966800Y-136918700D02* +X90551000Y-136334500D01* +X90551000Y-136334500D02* +X90678000Y-136461500D01* +D28* +X93878400Y-118999000D02* +X94310200Y-118999000D01* +X96164400Y-125247400D02* +X96164400Y-125399800D01* +X95250000Y-124333000D02* +X96164400Y-125247400D01* +X95250000Y-120345200D02* +X95250000Y-124333000D01* +X94894400Y-119989600D02* +X95250000Y-120345200D01* +X94894400Y-119583200D02* +X94894400Y-119989600D01* +X94310200Y-118999000D02* +X94894400Y-119583200D01* +X93878400Y-118999000D02* +X86309200Y-118999000D01* +X85293200Y-118059200D02* +X85115400Y-117881400D01* +X85394800Y-118160800D02* +X85293200Y-118059200D01* +X85471000Y-118160800D02* +X85394800Y-118160800D01* +X86309200Y-118999000D02* +X85471000Y-118160800D01* +X85115400Y-117881400D02* +X85445600Y-118211600D01* +D29* +X80111600Y-117881400D02* +X78613000Y-119380000D01* +X85115400Y-117881400D02* +X80111600Y-117881400D01* +X86233000Y-118999000D02* +X85445600Y-118211600D01* +X85445600Y-118211600D02* +X85115400Y-117881400D01* +X93878400Y-118999000D02* +X86233000Y-118999000D01* +X83883500Y-137858500D02* +X83388200Y-138938000D01* +X83388200Y-138938000D02* +X83108800Y-140182600D01* +X82118200Y-148005800D02* +X82169000Y-149796500D01* +X82169000Y-149796500D02* +X80962500Y-151003000D01* +X80962500Y-151003000D02* +X80391000Y-151003000D01* +D30* +X70548500Y-125222000D02* +X71310500Y-125984000D01* +X81153000Y-119380000D02* +X81153000Y-122377200D01* +X82219800Y-123444000D02* +X82359500Y-123444000D01* +X81153000Y-122377200D02* +X82219800Y-123444000D01* +D29* +X93281500Y-127190500D02* +X93281500Y-124206000D01* +X85979000Y-124206000D02* +X84836000Y-124206000D01* +X86487000Y-123698000D02* +X85979000Y-124206000D01* +X86487000Y-122872500D02* +X86487000Y-123698000D01* +X87058500Y-122301000D02* +X86487000Y-122872500D01* +X93091000Y-122301000D02* +X87058500Y-122301000D01* +X93662500Y-122872500D02* +X93091000Y-122301000D01* +X93662500Y-123825000D02* +X93662500Y-122872500D01* +X93281500Y-124206000D02* +X93662500Y-123825000D01* +X75374500Y-126111000D02* +X75247500Y-125984000D01* +X75247500Y-125984000D02* +X71310500Y-125984000D01* +D28* +X94195900Y-126072900D02* +X94195900Y-124498100D01* +X94195900Y-124498100D02* +X94170500Y-124472700D01* +X95781500Y-127190500D02* +X95313500Y-127190500D01* +X95313500Y-127190500D02* +X94195900Y-126072900D01* +X94195900Y-126072900D02* +X94170500Y-126047500D01* +X90805000Y-121602500D02* +X92646500Y-121602500D01* +X92646500Y-121602500D02* +X92684600Y-121640600D01* +D30* +X73660000Y-129540000D02* +X73660000Y-127508000D01* +X73660000Y-127508000D02* +X73406000Y-127254000D01* +X73406000Y-127254000D02* +X72072500Y-127254000D01* +X76200000Y-129540000D02* +X73660000Y-129540000D01* +X76200000Y-132080000D02* +X76200000Y-129540000D01* +X76200000Y-129540000D02* +X76200000Y-128498600D01* +X76200000Y-128498600D02* +X76657200Y-128041400D01* +X76657200Y-128041400D02* +X76657200Y-124576200D01* +X76657200Y-124576200D02* +X76350500Y-124269500D01* +D29* +X94170500Y-126047500D02* +X95313500Y-127190500D01* +X94170500Y-122618500D02* +X94170500Y-124472700D01* +X90805000Y-121602500D02* +X90995500Y-121793000D01* +X90995500Y-121793000D02* +X93345000Y-121793000D01* +X93345000Y-121793000D02* +X94170500Y-122618500D01* +X94170500Y-124472700D02* +X94170500Y-126047500D01* +X95885000Y-137160000D02* +X95885000Y-127294000D01* +X95313500Y-137731500D02* +X95885000Y-137160000D01* +X94805500Y-137731500D02* +X95313500Y-137731500D01* +X95885000Y-127294000D02* +X95781500Y-127190500D01* +X72072500Y-127254000D02* +X72136000Y-127190500D01* +X73342500Y-127190500D02* +X73660000Y-127508000D01* +X72136000Y-127190500D02* +X73342500Y-127190500D01* +X76200000Y-129540000D02* +X76200000Y-124420000D01* +X76200000Y-124420000D02* +X76350500Y-124269500D01* +X76033000Y-129373000D02* +X76200000Y-129540000D01* +D30* +X73850500Y-124269500D02* +X73850500Y-123634500D01* +X73850500Y-123634500D02* +X75755500Y-121729500D01* +X75755500Y-121729500D02* +X75755500Y-119446040D01* +D29* +X86461600Y-141427200D02* +X87020400Y-141986000D01* +X86461600Y-139242800D02* +X86461600Y-141427200D01* +X84429600Y-137210800D02* +X86461600Y-139242800D01* +X73850500Y-123634500D02* +X75755500Y-121729500D01* +X75755500Y-121729500D02* +X75755500Y-119446040D01* +X73660000Y-132080000D02* +X73596500Y-132080000D01* +X83312000Y-145732500D02* +X79679800Y-144983200D01* +X83375500Y-145796000D02* +X83312000Y-145732500D01* +X81978500Y-127762000D02* +X82740500Y-127000000D01* +X81978500Y-131318000D02* +X81978500Y-127762000D01* +X79692500Y-133604000D02* +X81978500Y-131318000D01* +X79502000Y-140563600D02* +X79692500Y-133604000D01* +X86207600Y-145084800D02* +X86055200Y-145237200D01* +X86715600Y-145084800D02* +X86207600Y-145084800D01* +X89408000Y-142392400D02* +X86715600Y-145084800D01* +X89408000Y-140716000D02* +X89408000Y-142392400D01* +X89509600Y-140614400D02* +X89408000Y-140716000D01* +X86360000Y-143662400D02* +X86309200Y-143662400D01* +X87680800Y-142341600D02* +X86360000Y-143662400D01* +X87680800Y-141325600D02* +X87680800Y-142341600D01* +X80365600Y-132232400D02* +X80365600Y-131876800D01* +X78943200Y-133654800D02* +X80365600Y-132232400D01* +X78638400Y-141986000D02* +X78943200Y-133654800D01* +X79806800Y-142341600D02* +X78638400Y-141986000D01* +X81330800Y-142494000D02* +X79806800Y-142341600D01* +X82811049Y-143452151D02* +X81330800Y-142494000D01* +X83254151Y-143452151D02* +X82811049Y-143452151D01* +X83413600Y-143611600D02* +X83254151Y-143452151D01* +X81838800Y-134975600D02* +X81788000Y-135026400D01* +X81788000Y-135026400D02* +X81788000Y-140462000D01* +X81788000Y-140462000D02* +X82346800Y-141122400D01* +X82346800Y-141122400D02* +X83058000Y-141071600D01* +X88646000Y-136398000D02* +X82931000Y-136398000D01* +X89662000Y-135382000D02* +X88646000Y-136398000D01* +X90678000Y-135382000D02* +X89662000Y-135382000D01* +X90805000Y-135509000D02* +X90678000Y-135382000D01* +X82550000Y-135509000D02* +X88455500Y-135509000D01* +X82423000Y-135636000D02* +X82550000Y-135509000D01* +X81178400Y-129184400D02* +X81178400Y-125526800D01* +X78892400Y-131470400D02* +X81178400Y-129184400D01* +X78892400Y-133045200D02* +X78892400Y-131470400D01* +X76403200Y-135534400D02* +X78892400Y-133045200D01* +X76403200Y-137820400D02* +X76403200Y-135534400D01* +X74879200Y-139344400D02* +X76403200Y-137820400D01* +X75628500Y-142557500D02* +X75184000Y-142113000D01* +X75628500Y-147510500D02* +X75628500Y-142557500D01* +X76327000Y-148209000D02* +X75628500Y-147510500D01* +X76327000Y-149542500D02* +X76327000Y-148209000D01* +X78486000Y-151701500D02* +X76327000Y-149542500D01* +X90487500Y-151701500D02* +X78486000Y-151701500D01* +X93345000Y-148844000D02* +X90487500Y-151701500D01* +X93345000Y-136017000D02* +X93345000Y-148844000D01* +X91694000Y-134366000D02* +X93345000Y-136017000D01* +X91694000Y-125031500D02* +X91694000Y-134366000D01* +X91376500Y-124714000D02* +X91694000Y-125031500D01* +X89103200Y-124612400D02* +X90017600Y-124612400D01* +X88392000Y-125323600D02* +X89103200Y-124612400D01* +X88392000Y-133705600D02* +X88392000Y-125323600D01* +X87833200Y-134264400D02* +X88392000Y-133705600D01* +X83007200Y-134264400D02* +X87833200Y-134264400D01* +X82651600Y-133908800D02* +X83007200Y-134264400D01* +X81686400Y-133908800D02* +X82651600Y-133908800D01* +X81178400Y-134416800D02* +X81686400Y-133908800D01* +X80924400Y-141605000D02* +X81178400Y-134416800D01* +X80873600Y-141655800D02* +X80924400Y-141605000D01* +X79502000Y-144272000D02* +X81229200Y-144272000D01* +X78943200Y-143713200D02* +X79502000Y-144272000D01* +X74345800Y-147015200D02* +X74345800Y-146761200D01* +X74041000Y-147574000D02* +X74345800Y-147015200D01* +X71005700Y-147510500D02* +X74041000Y-147574000D01* +X70815200Y-147320000D02* +X71005700Y-147510500D01* +X73152000Y-148437600D02* +X73126600Y-148412200D01* +X73152000Y-149352000D02* +X73152000Y-148437600D01* +X72517000Y-149987000D02* +X73152000Y-149352000D01* +X71882000Y-149987000D02* +X72517000Y-149987000D01* +X71678800Y-149783800D02* +X71882000Y-149987000D01* +X78943200Y-145719800D02* +X82867500Y-146431000D01* +X86804500Y-148082000D02* +X87566500Y-147320000D01* +X85153500Y-148082000D02* +X86804500Y-148082000D01* +X84772500Y-148463000D02* +X85153500Y-148082000D01* +X84201000Y-148463000D02* +X84772500Y-148463000D01* +X82867500Y-147129500D02* +X84201000Y-148463000D01* +X78536800Y-146634200D02* +X82867500Y-147129500D01* +X80391000Y-133921500D02* +X80137000Y-141173200D01* +X80962500Y-133350000D02* +X80391000Y-133921500D01* +X82994500Y-133350000D02* +X80962500Y-133350000D01* +X86741000Y-126060200D02* +X86741000Y-126238000D01* +X88925400Y-123875800D02* +X86741000Y-126060200D01* +X91770200Y-123875800D02* +X88925400Y-123875800D01* +X92176600Y-124282200D02* +X91770200Y-123875800D01* +X92176600Y-133578600D02* +X92176600Y-124282200D01* +X93954600Y-135356600D02* +X92176600Y-133578600D01* +X93954600Y-141732000D02* +X93954600Y-135356600D01* +X94030800Y-141808200D02* +X93954600Y-141732000D01* +X92252800Y-147548600D02* +X92252800Y-144373600D01* +X91135200Y-148666200D02* +X92252800Y-147548600D01* +X85725000Y-148666200D02* +X91135200Y-148666200D01* +X84404200Y-149987000D02* +X85725000Y-148666200D01* +X86741000Y-133413500D02* +X86741000Y-126238000D01* +X91249500Y-142113000D02* +X91249500Y-141973300D01* +X91249500Y-141973300D02* +X92760800Y-140462000D01* +X91998800Y-138074400D02* +X90373200Y-138074400D01* +X92760800Y-138836400D02* +X91998800Y-138074400D01* +X92760800Y-140462000D02* +X92760800Y-138836400D01* +X74041000Y-134747000D02* +X74041000Y-137033000D01* +X74320400Y-134467600D02* +X74041000Y-134747000D01* +X76504800Y-134467600D02* +X74320400Y-134467600D01* +X78079600Y-132892800D02* +X76504800Y-134467600D01* +X78079600Y-130200400D02* +X78079600Y-132892800D01* +X78689200Y-129590800D02* +X78079600Y-130200400D01* +X79603600Y-129590800D02* +X78689200Y-129590800D01* +X80467200Y-128727200D02* +X79603600Y-129590800D01* +X74041000Y-137033000D02* +X72326500Y-137033000D01* +X71564500Y-137795000D02* +X71564500Y-140144500D01* +X72326500Y-137033000D02* +X71564500Y-137795000D01* +X86131400Y-142367000D02* +X85801200Y-142697200D01* +X85801200Y-142697200D02* +X82956400Y-142697200D01* +X82956400Y-142697200D02* +X81635600Y-141376400D01* +X76936600Y-142951200D02* +X76504800Y-143383000D01* +X76504800Y-143383000D02* +X76504800Y-144475200D01* +X76504800Y-144475200D02* +X76301600Y-144678400D01* +X74726800Y-144932400D02* +X71424800Y-141630400D01* +X71424800Y-141630400D02* +X71145400Y-141630400D01* +X88722200Y-142367000D02* +X88188800Y-139954000D01* +X86423500Y-144526000D02* +X88722200Y-142367000D01* +X82296000Y-144729200D02* +X86423500Y-144526000D01* +X81280000Y-143154400D02* +X82296000Y-144729200D01* +X78841600Y-143002000D02* +X81280000Y-143154400D01* +X75184000Y-141325600D02* +X78841600Y-143002000D01* +X71374000Y-140970000D02* +X75184000Y-141325600D01* +X70802500Y-140398500D02* +X71374000Y-140970000D01* +X70802500Y-136017000D02* +X70802500Y-140398500D01* +X71818500Y-135001000D02* +X70802500Y-136017000D01* +X71983600Y-135940800D02* +X71831200Y-135940800D01* +X74218800Y-133705600D02* +X71983600Y-135940800D01* +X76352400Y-133705600D02* +X74218800Y-133705600D01* +X77520800Y-132537200D02* +X76352400Y-133705600D01* +X77520800Y-128930400D02* +X77520800Y-132537200D01* +X77724000Y-128727200D02* +X77520800Y-128930400D01* +X78841600Y-128727200D02* +X77724000Y-128727200D01* +X80213200Y-127355600D02* +X78841600Y-128727200D01* +M02* diff --git a/PCB/OUTPUT_V35/Tinylab_proto1-B_Mask.gbr b/PCB/OUTPUT_V35/Tinylab_proto1-B_Mask.gbr new file mode 100644 index 00000000..dc8815dd --- /dev/null +++ b/PCB/OUTPUT_V35/Tinylab_proto1-B_Mask.gbr @@ -0,0 +1,91 @@ +G04 #@! TF.FileFunction,Soldermask,Bot* +%FSLAX46Y46*% +G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* +G04 Created by KiCad (PCBNEW (2015-08-05 BZR 6055, Git fa29c62)-product) date 02/02/2016 11:58:07 AM* +%MOMM*% +G01* +G04 APERTURE LIST* +%ADD10C,0.100000*% +%ADD11R,1.300000X1.300000*% +%ADD12C,1.300000*% +%ADD13C,1.998980*% +%ADD14R,1.998980X1.998980*% +%ADD15R,1.905000X1.905000*% +%ADD16C,1.905000*% +%ADD17R,2.032000X1.727200*% +%ADD18O,2.032000X1.727200*% +%ADD19O,1.250000X0.950000*% +%ADD20O,1.000000X1.550000*% +%ADD21R,1.727200X1.727200*% +%ADD22O,1.727200X1.727200*% +%ADD23R,1.727200X2.032000*% +%ADD24O,1.727200X2.032000*% +%ADD25R,2.032000X2.032000*% +%ADD26O,2.032000X2.032000*% +G04 APERTURE END LIST* +D10* +D11* +X94805500Y-147510500D03* +D12* +X94805500Y-145010500D03* +D11* +X93281500Y-127190500D03* +D12* +X95781500Y-127190500D03* +X76350500Y-124269500D03* +D11* +X73850500Y-124269500D03* +D13* +X65595500Y-119446040D03* +D14* +X75755500Y-119446040D03* +D15* +X65468500Y-125222000D03* +D16* +X70548500Y-125222000D03* +D17* +X90043000Y-126301500D03* +D18* +X90043000Y-128841500D03* +X90043000Y-131381500D03* +X90043000Y-133921500D03* +D19* +X92607400Y-123228540D03* +X87607400Y-123228540D03* +D20* +X93607400Y-120528540D03* +X86607400Y-120528540D03* +D17* +X66040000Y-148590000D03* +D18* +X66040000Y-146050000D03* +X66040000Y-143510000D03* +X66040000Y-140970000D03* +D21* +X90106500Y-149860000D03* +D22* +X87566500Y-149860000D03* +X90106500Y-147320000D03* +X87566500Y-147320000D03* +D23* +X83693000Y-119380000D03* +D24* +X81153000Y-119380000D03* +X78613000Y-119380000D03* +D17* +X66040000Y-130810000D03* +D18* +X66040000Y-133350000D03* +X66040000Y-135890000D03* +X66040000Y-138430000D03* +D21* +X73660000Y-132080000D03* +D22* +X73660000Y-129540000D03* +X76200000Y-132080000D03* +X76200000Y-129540000D03* +D25* +X91249500Y-142113000D03* +D26* +X91249500Y-139573000D03* +M02* diff --git a/PCB/OUTPUT_V35/Tinylab_proto1-Edge_Cuts.gbr b/PCB/OUTPUT_V35/Tinylab_proto1-Edge_Cuts.gbr new file mode 100644 index 00000000..59d9d01d --- /dev/null +++ b/PCB/OUTPUT_V35/Tinylab_proto1-Edge_Cuts.gbr @@ -0,0 +1,31 @@ +G04 #@! TF.FileFunction,Profile,NP* +%FSLAX46Y46*% +G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* +G04 Created by KiCad (PCBNEW (2015-08-05 BZR 6055, Git fa29c62)-product) date 02/02/2016 11:58:07 AM* +%MOMM*% +G01* +G04 APERTURE LIST* +%ADD10C,0.100000*% +G04 APERTURE END LIST* +D10* +X97409000Y-152044400D02* +X97409000Y-117576600D01* +X97409000Y-117602000D02* +X96596200Y-117602000D01* +X97409000Y-152222200D02* +X97409000Y-151993600D01* +X96596200Y-152222200D02* +X97409000Y-152222200D01* +X64236600Y-152222200D02* +X96621600Y-152222200D01* +X96621600Y-117602000D02* +X64211200Y-117602000D01* +X64211200Y-117627400D02* +X64236600Y-117627400D01* +X64211200Y-152222200D02* +X64211200Y-117627400D01* +X64287400Y-152222200D02* +X64236600Y-152222200D01* +X64287400Y-152222200D02* +X64312800Y-152222200D01* +M02* diff --git a/PCB/OUTPUT_V35/Tinylab_proto1-F_Cu.gbr b/PCB/OUTPUT_V35/Tinylab_proto1-F_Cu.gbr new file mode 100644 index 00000000..e07fb7e3 --- /dev/null +++ b/PCB/OUTPUT_V35/Tinylab_proto1-F_Cu.gbr @@ -0,0 +1,1461 @@ +G04 #@! TF.FileFunction,Copper,L1,Top,Signal* +%FSLAX46Y46*% +G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* +G04 Created by KiCad (PCBNEW (2015-08-05 BZR 6055, Git fa29c62)-product) date 02/02/2016 11:58:07 AM* +%MOMM*% +G01* +G04 APERTURE LIST* +%ADD10C,0.100000*% +%ADD11R,0.800000X0.750000*% +%ADD12R,0.750000X0.800000*% +%ADD13R,1.300000X1.300000*% +%ADD14C,1.300000*% +%ADD15C,1.998980*% +%ADD16R,1.998980X1.998980*% +%ADD17R,1.600000X1.000000*% +%ADD18R,1.600000X0.560000*% +%ADD19R,0.560000X1.600000*% +%ADD20R,1.905000X1.905000*% +%ADD21C,1.905000*% +%ADD22R,2.032000X1.727200*% +%ADD23O,2.032000X1.727200*% +%ADD24R,0.400000X1.350000*% +%ADD25O,1.250000X0.950000*% +%ADD26O,1.000000X1.550000*% +%ADD27R,1.727200X1.727200*% +%ADD28O,1.727200X1.727200*% +%ADD29R,1.727200X2.032000*% +%ADD30O,1.727200X2.032000*% +%ADD31R,2.032000X2.032000*% +%ADD32O,2.032000X2.032000*% +%ADD33R,0.900000X0.600000*% +%ADD34R,0.500000X0.900000*% +%ADD35R,0.900000X0.500000*% +%ADD36R,0.600000X0.900000*% +%ADD37R,1.500000X0.600000*% +%ADD38R,0.508000X0.304800*% +%ADD39C,0.600000*% +%ADD40C,0.250000*% +%ADD41C,0.508000*% +%ADD42C,1.016000*% +G04 APERTURE END LIST* +D10* +D11* +X86054500Y-130492500D03* +X87554500Y-130492500D03* +X86054500Y-128968500D03* +X87554500Y-128968500D03* +D12* +X92519500Y-130885500D03* +X92519500Y-132385500D03* +D11* +X95619000Y-135064500D03* +X94119000Y-135064500D03* +X87554500Y-138430000D03* +X86054500Y-138430000D03* +D13* +X94805500Y-147510500D03* +D14* +X94805500Y-145010500D03* +D11* +X79363000Y-151003000D03* +X77863000Y-151003000D03* +D13* +X93281500Y-127190500D03* +D14* +X95781500Y-127190500D03* +D12* +X83502500Y-124194000D03* +X83502500Y-122694000D03* +X71374000Y-146292000D03* +X71374000Y-144792000D03* +X95504000Y-122249500D03* +X95504000Y-123749500D03* +X68707000Y-133338000D03* +X68707000Y-131838000D03* +X68707000Y-136259000D03* +X68707000Y-134759000D03* +D14* +X76350500Y-124269500D03* +D13* +X73850500Y-124269500D03* +D12* +X71437500Y-129972500D03* +X71437500Y-128472500D03* +D15* +X65595500Y-119446040D03* +D16* +X75755500Y-119446040D03* +D17* +X94551500Y-139485500D03* +X94551500Y-136485500D03* +D18* +X84717000Y-147510000D03* +X84717000Y-146710000D03* +X84717000Y-145910000D03* +X84717000Y-145110000D03* +X84717000Y-144310000D03* +X84717000Y-143510000D03* +X84717000Y-142710000D03* +X84717000Y-141910000D03* +X84717000Y-141110000D03* +X84717000Y-140310000D03* +X84717000Y-139510000D03* +D19* +X82867000Y-137660000D03* +X82067000Y-137660000D03* +X81267000Y-137660000D03* +X80467000Y-137660000D03* +X79667000Y-137660000D03* +X78867000Y-137660000D03* +X78067000Y-137660000D03* +X77267000Y-137660000D03* +X76467000Y-137660000D03* +X75667000Y-137660000D03* +X74867000Y-137660000D03* +D18* +X73017000Y-139510000D03* +X73017000Y-140310000D03* +X73017000Y-141110000D03* +X73017000Y-141910000D03* +X73017000Y-142710000D03* +X73017000Y-143510000D03* +X73017000Y-144310000D03* +X73017000Y-145110000D03* +X73017000Y-145910000D03* +X73017000Y-146710000D03* +X73017000Y-147510000D03* +D19* +X74867000Y-149360000D03* +X75667000Y-149360000D03* +X76467000Y-149360000D03* +X77267000Y-149360000D03* +X78067000Y-149360000D03* +X78867000Y-149360000D03* +X79667000Y-149360000D03* +X80467000Y-149360000D03* +X81267000Y-149360000D03* +X82067000Y-149360000D03* +X82867000Y-149360000D03* +D20* +X65468500Y-125222000D03* +D21* +X70548500Y-125222000D03* +D22* +X90043000Y-126301500D03* +D23* +X90043000Y-128841500D03* +X90043000Y-131381500D03* +X90043000Y-133921500D03* +D24* +X91407400Y-123228540D03* +X90757400Y-123228540D03* +X90107400Y-123228540D03* +X89457400Y-123228540D03* +X88807400Y-123228540D03* +D25* +X92607400Y-123228540D03* +X87607400Y-123228540D03* +D26* +X93607400Y-120528540D03* +X86607400Y-120528540D03* +D22* +X66040000Y-148590000D03* +D23* +X66040000Y-146050000D03* +X66040000Y-143510000D03* +X66040000Y-140970000D03* +D27* +X90106500Y-149860000D03* +D28* +X87566500Y-149860000D03* +X90106500Y-147320000D03* +X87566500Y-147320000D03* +D29* +X83693000Y-119380000D03* +D30* +X81153000Y-119380000D03* +X78613000Y-119380000D03* +D22* +X66040000Y-130810000D03* +D23* +X66040000Y-133350000D03* +X66040000Y-135890000D03* +X66040000Y-138430000D03* +D27* +X73660000Y-132080000D03* +D28* +X73660000Y-129540000D03* +X76200000Y-132080000D03* +X76200000Y-129540000D03* +D31* +X91249500Y-142113000D03* +D32* +X91249500Y-139573000D03* +D33* +X79245000Y-123444000D03* +X82045000Y-122494000D03* +X82045000Y-124394000D03* +D34* +X85927500Y-132080000D03* +X87427500Y-132080000D03* +X85927500Y-127381000D03* +X87427500Y-127381000D03* +X85927500Y-133731000D03* +X87427500Y-133731000D03* +X87427500Y-125793500D03* +X85927500Y-125793500D03* +X85927500Y-135318500D03* +X87427500Y-135318500D03* +X85927500Y-136906000D03* +X87427500Y-136906000D03* +D35* +X67970400Y-142036800D03* +X67970400Y-140536800D03* +X68453000Y-144641000D03* +X68453000Y-143141000D03* +X68453000Y-147244500D03* +X68453000Y-145744500D03* +X68643500Y-149848000D03* +X68643500Y-148348000D03* +X69748400Y-140536800D03* +X69748400Y-142036800D03* +X70040500Y-143141000D03* +X70040500Y-144641000D03* +X69786500Y-145744500D03* +X69786500Y-147244500D03* +X70231000Y-148348000D03* +X70231000Y-149848000D03* +X68707000Y-137553000D03* +X68707000Y-139053000D03* +D34* +X71616000Y-138938000D03* +X70116000Y-138938000D03* +D35* +X75057000Y-135878000D03* +X75057000Y-134378000D03* +X76708000Y-135878000D03* +X76708000Y-134378000D03* +X73406000Y-134378000D03* +X73406000Y-135878000D03* +X72961500Y-138545000D03* +X72961500Y-137045000D03* +D34* +X82093500Y-151066500D03* +X80593500Y-151066500D03* +D35* +X70358000Y-131711000D03* +X70358000Y-133211000D03* +D34* +X70116000Y-137287000D03* +X71616000Y-137287000D03* +X68719000Y-130302000D03* +X70219000Y-130302000D03* +D35* +X70358000Y-134378000D03* +X70358000Y-135878000D03* +D34* +X88888000Y-143129000D03* +X87388000Y-143129000D03* +X87388000Y-144716500D03* +X88888000Y-144716500D03* +D36* +X94869000Y-130870500D03* +X95819000Y-133670500D03* +X93919000Y-133670500D03* +D37* +X84361000Y-134620000D03* +X84361000Y-133350000D03* +X84361000Y-132080000D03* +X84361000Y-130810000D03* +X84361000Y-129540000D03* +X84361000Y-128270000D03* +X84361000Y-127000000D03* +X78961000Y-127000000D03* +X78961000Y-128270000D03* +X78961000Y-129540000D03* +X78961000Y-130810000D03* +X78961000Y-132080000D03* +X78961000Y-133350000D03* +X78961000Y-134620000D03* +D38* +X88900000Y-141147800D03* +X88900000Y-139877800D03* +X86868000Y-141147800D03* +X88900000Y-140512800D03* +X86868000Y-139877800D03* +X86868000Y-140512800D03* +X91313000Y-137414000D03* +X91313000Y-136144000D03* +X89281000Y-137414000D03* +X91313000Y-136779000D03* +X89281000Y-136144000D03* +X89281000Y-136779000D03* +D39* +X78054200Y-147701000D03* +X77165200Y-145415000D03* +X89052400Y-138480800D03* +X90551000Y-136334500D03* +X92583000Y-136461500D03* +X96164400Y-125399800D03* +X83883500Y-137858500D03* +X83108800Y-140182600D03* +X82118200Y-148005800D03* +X80391000Y-151003000D03* +X84836000Y-124206000D03* +X75374500Y-126111000D03* +X82359500Y-123444000D03* +X90805000Y-121602500D03* +X94805500Y-137731500D03* +X72072500Y-127254000D03* +X87020400Y-141986000D03* +X84429600Y-137210800D03* +X79679800Y-144983200D03* +X83375500Y-145796000D03* +X82740500Y-127000000D03* +X79502000Y-140563600D03* +X86055200Y-145237200D03* +X89509600Y-140614400D03* +X86309200Y-143662400D03* +X87680800Y-141325600D03* +X80365600Y-131876800D03* +X83413600Y-143611600D03* +X81838800Y-134975600D03* +X83058000Y-141071600D03* +X82931000Y-136398000D03* +X90805000Y-135509000D03* +X88455500Y-135509000D03* +X82423000Y-135636000D03* +X81178400Y-125526800D03* +X74879200Y-139344400D03* +X75184000Y-142113000D03* +X91376500Y-124714000D03* +X90017600Y-124612400D03* +X80873600Y-141655800D03* +X81229200Y-144272000D03* +X78943200Y-143713200D03* +X74345800Y-146761200D03* +X70815200Y-147320000D03* +X73126600Y-148412200D03* +X71678800Y-149783800D03* +X82867500Y-146431000D03* +X78943200Y-145719800D03* +X78536800Y-146634200D03* +X80137000Y-141173200D03* +X82994500Y-133350000D03* +X94030800Y-141808200D03* +X92252800Y-144373600D03* +X84404200Y-149987000D03* +X86741000Y-126238000D03* +X86741000Y-133413500D03* +X90373200Y-138074400D03* +X80467200Y-128727200D03* +X71564500Y-140144500D03* +X74041000Y-137033000D03* +X86131400Y-142367000D03* +X81635600Y-141376400D03* +X76936600Y-142951200D03* +X76301600Y-144678400D03* +X74726800Y-144932400D03* +X71145400Y-141630400D03* +X88188800Y-139954000D03* +X71818500Y-135001000D03* +X71831200Y-135940800D03* +X80213200Y-127355600D03* +D40* +X90043000Y-133921500D02* +X90043000Y-133794500D01* +X90043000Y-133794500D02* +X88328500Y-132080000D01* +X88328500Y-132080000D02* +X87427500Y-132080000D01* +X86054500Y-130492500D02* +X86054500Y-130822000D01* +X86054500Y-130822000D02* +X86677500Y-131445000D01* +X86677500Y-131445000D02* +X86792500Y-131445000D01* +X86792500Y-131445000D02* +X87427500Y-132080000D01* +X90043000Y-131381500D02* +X89598500Y-131381500D01* +X89598500Y-131381500D02* +X88709500Y-130492500D01* +X88709500Y-130492500D02* +X87554500Y-130492500D01* +X87427500Y-127381000D02* +X87693500Y-127381000D01* +X88773000Y-126301500D02* +X90043000Y-126301500D01* +X87693500Y-127381000D02* +X88773000Y-126301500D01* +X86054500Y-128968500D02* +X86054500Y-128829500D01* +X86054500Y-128829500D02* +X86741000Y-128143000D01* +X86741000Y-128143000D02* +X86741000Y-127571500D01* +X86741000Y-127571500D02* +X86931500Y-127381000D01* +X86931500Y-127381000D02* +X87427500Y-127381000D01* +X90043000Y-128841500D02* +X87681500Y-128841500D01* +X87681500Y-128841500D02* +X87554500Y-128968500D01* +X94869000Y-130870500D02* +X94869000Y-129730500D01* +X94615000Y-122491500D02* +X94373000Y-122249500D01* +X94615000Y-129476500D02* +X94615000Y-122491500D01* +X94869000Y-129730500D02* +X94615000Y-129476500D01* +X92519500Y-130885500D02* +X94854000Y-130885500D01* +X94854000Y-130885500D02* +X94869000Y-130870500D01* +X83693000Y-119380000D02* +X89852500Y-119380000D01* +X91503500Y-122110500D02* +X91407400Y-122110500D01* +X91503500Y-121031000D02* +X91503500Y-122110500D01* +X89852500Y-119380000D02* +X91503500Y-121031000D01* +X91407400Y-123228540D02* +X91407400Y-122110500D01* +X91407400Y-122110500D02* +X91407400Y-122016100D01* +X93928500Y-122249500D02* +X94373000Y-122249500D01* +X93599000Y-121920000D02* +X93928500Y-122249500D01* +X91503500Y-121920000D02* +X93599000Y-121920000D01* +X91407400Y-122016100D02* +X91503500Y-121920000D01* +X94373000Y-122249500D02* +X95504000Y-122249500D01* +X83693000Y-119380000D02* +X84518500Y-119380000D01* +D41* +X86054500Y-138430000D02* +X86054500Y-137033000D01* +X86054500Y-137033000D02* +X85927500Y-136906000D01* +X94119000Y-135064500D02* +X93154500Y-135064500D01* +X93154500Y-135064500D02* +X93027500Y-135191500D01* +X93027500Y-135191500D02* +X93027500Y-136017000D01* +X93027500Y-136017000D02* +X92583000Y-136461500D01* +X94805500Y-145010500D02* +X94805500Y-139739500D01* +X94805500Y-139739500D02* +X94551500Y-139485500D01* +D40* +X73017000Y-145110000D02* +X73863000Y-145110000D01* +X78067000Y-147713800D02* +X78067000Y-149360000D01* +X78054200Y-147701000D02* +X78067000Y-147713800D01* +X76987400Y-145592800D02* +X77165200Y-145415000D01* +X74345800Y-145592800D02* +X76987400Y-145592800D01* +X73863000Y-145110000D02* +X74345800Y-145592800D01* +X88900000Y-141147800D02* +X88417400Y-141147800D01* +X87477600Y-140208000D02* +X87477600Y-139446000D01* +X88417400Y-141147800D02* +X87477600Y-140208000D01* +X88888000Y-144716500D02* +X88888000Y-146038000D01* +X88888000Y-146038000D02* +X90106500Y-147256500D01* +X90106500Y-147256500D02* +X90106500Y-147320000D01* +X89115900Y-141160500D02* +X89115900Y-141287500D01* +X89115900Y-141287500D02* +X89662000Y-141833600D01* +X89662000Y-141833600D02* +X89662000Y-145010500D01* +X89662000Y-145010500D02* +X89638500Y-145034000D01* +X89638500Y-145034000D02* +X89611200Y-145034000D01* +X89611200Y-145034000D02* +X89611200Y-145010500D01* +X88595200Y-139293600D02* +X88595200Y-138938000D01* +X88595200Y-139293600D02* +X87630000Y-139293600D01* +X87630000Y-139293600D02* +X87477600Y-139446000D01* +X87477600Y-139446000D02* +X87033100Y-139890500D01* +X88595200Y-138938000D02* +X89052400Y-138480800D01* +X87033100Y-139890500D02* +X86487000Y-139890500D01* +X86054500Y-138430000D02* +X86054500Y-139394500D01* +X86054500Y-139394500D02* +X86487000Y-139827000D01* +X86487000Y-139827000D02* +X86487000Y-139890500D01* +X88807400Y-123228540D02* +X87607400Y-123228540D01* +X92519500Y-132385500D02* +X91999500Y-132385500D01* +X91999500Y-132385500D02* +X91694000Y-132080000D01* +X91694000Y-132080000D02* +X91694000Y-125476000D01* +X91694000Y-125476000D02* +X92607400Y-124562600D01* +X92607400Y-124562600D02* +X92607400Y-123228540D01* +X94551500Y-139485500D02* +X95224600Y-142036800D01* +X95224600Y-142036800D02* +X94805500Y-145010500D01* +X89598500Y-136144000D02* +X90360500Y-136144000D01* +X90360500Y-136144000D02* +X90551000Y-136334500D01* +X92583000Y-136461500D02* +X93027500Y-136017000D01* +X93027500Y-136017000D02* +X93027500Y-135191500D01* +X93027500Y-135191500D02* +X93154500Y-135064500D01* +X89281000Y-136144000D02* +X89598500Y-136144000D01* +X89598500Y-136144000D02* +X89663398Y-136144000D01* +X90614500Y-137414000D02* +X91313000Y-137414000D01* +X90487500Y-137287000D02* +X90614500Y-137414000D01* +X90487500Y-136968102D02* +X90487500Y-137287000D01* +X89663398Y-136144000D02* +X90487500Y-136968102D01* +X94805500Y-145010500D02* +X89611200Y-145010500D01* +X89611200Y-145010500D02* +X89182000Y-145010500D01* +X89182000Y-145010500D02* +X88888000Y-144716500D01* +X93919000Y-133670500D02* +X93919000Y-134864500D01* +X93919000Y-134864500D02* +X94119000Y-135064500D01* +X92519500Y-132385500D02* +X92519500Y-133159500D01* +X93030500Y-133670500D02* +X93919000Y-133670500D01* +X92519500Y-133159500D02* +X93030500Y-133670500D01* +X71640000Y-144792000D02* +X71958000Y-145110000D01* +X71958000Y-145110000D02* +X73017000Y-145110000D01* +X71374000Y-144792000D02* +X71640000Y-144792000D01* +X71310500Y-144792000D02* +X71640000Y-144792000D01* +X81267000Y-137660000D02* +X81267000Y-138824000D01* +X84137500Y-138430000D02* +X86054500Y-138430000D01* +X83629500Y-138938000D02* +X84137500Y-138430000D01* +X81381000Y-138938000D02* +X83629500Y-138938000D01* +X81267000Y-138824000D02* +X81381000Y-138938000D01* +X86054500Y-137033000D02* +X85927500Y-136906000D01* +X77799500Y-151066500D02* +X77799500Y-150737000D01* +X77799500Y-150737000D02* +X78067000Y-150469500D01* +X78067000Y-150469500D02* +X78067000Y-149360000D01* +X85927500Y-136906000D02* +X85725000Y-136906000D01* +D41* +X95619000Y-135064500D02* +X95910400Y-135355900D01* +X95910400Y-135355900D02* +X95910400Y-146304000D01* +X95910400Y-146304000D02* +X94805500Y-147408900D01* +X94805500Y-147408900D02* +X94805500Y-147510500D01* +X95619000Y-135064500D02* +X95619000Y-133870500D01* +X95619000Y-133870500D02* +X95819000Y-133670500D01* +X95819000Y-133670500D02* +X95819000Y-129479000D01* +X95819000Y-129479000D02* +X96672400Y-128625600D01* +X96164400Y-125577600D02* +X96164400Y-125399800D01* +X96951800Y-126365000D02* +X96164400Y-125577600D01* +X96951800Y-127990600D02* +X96951800Y-126365000D01* +X96672400Y-128270000D02* +X96951800Y-127990600D01* +X96672400Y-128625600D02* +X96672400Y-128270000D01* +X71526400Y-148539200D02* +X71526400Y-147929600D01* +X71526400Y-148539200D02* +X71704200Y-148539200D01* +X71704200Y-148539200D02* +X73329800Y-150164800D01* +D42* +X76365100Y-151193500D02* +X76365100Y-151295100D01* +X76708000Y-151638000D02* +X76708000Y-151536400D01* +X76365100Y-151295100D02* +X76708000Y-151638000D01* +X74180700Y-151193500D02* +X74180700Y-151015700D01* +X74180700Y-151015700D02* +X73329800Y-150164800D01* +X73329800Y-150164800D02* +X73329800Y-150139400D01* +X76365100Y-151193500D02* +X74180700Y-151193500D01* +X74180700Y-151193500D02* +X74142600Y-151155400D01* +X90106500Y-150812500D02* +X89369900Y-150812500D01* +X82677000Y-151434800D02* +X82473800Y-151231600D01* +X84302600Y-151434800D02* +X82677000Y-151434800D01* +X84378800Y-151511000D02* +X84302600Y-151434800D01* +X88671400Y-151511000D02* +X84378800Y-151511000D01* +X89369900Y-150812500D02* +X88671400Y-151511000D01* +X90106500Y-149860000D02* +X90106500Y-150812500D01* +X90106500Y-150812500D02* +X89852500Y-151066500D01* +X90106500Y-149860000D02* +X91757500Y-149860000D01* +X91757500Y-149860000D02* +X94107000Y-147510500D01* +X94107000Y-147510500D02* +X94805500Y-147510500D01* +D40* +X96164400Y-125730000D02* +X96164400Y-125399800D01* +X96799400Y-126365000D02* +X96164400Y-125730000D01* +X96799400Y-127863600D02* +X96799400Y-126365000D01* +X96697800Y-127965200D02* +X96799400Y-127863600D01* +X96697800Y-128600200D02* +X96697800Y-127965200D01* +X95819000Y-129479000D02* +X96697800Y-128600200D01* +X71374000Y-146292000D02* +X71374000Y-146989800D01* +X71374000Y-146989800D02* +X71526400Y-147142200D01* +X71526400Y-147142200D02* +X71526400Y-147929600D01* +X81191800Y-151968200D02* +X82093500Y-151066500D01* +X77139800Y-151968200D02* +X81191800Y-151968200D01* +X76708000Y-151536400D02* +X77139800Y-151968200D01* +X71526400Y-148539200D02* +X74142600Y-151155400D01* +X94805500Y-147510500D02* +X94805500Y-147408900D01* +X94805500Y-147408900D02* +X95910400Y-146304000D01* +X95910400Y-146304000D02* +X95910400Y-135355900D01* +X94805500Y-147510500D02* +X94107000Y-147510500D01* +X94107000Y-147510500D02* +X91757500Y-149860000D01* +X95819000Y-133670500D02* +X95819000Y-134864500D01* +X95819000Y-134864500D02* +X95619000Y-135064500D01* +X82093500Y-151066500D02* +X89852500Y-151066500D01* +X89852500Y-151066500D02* +X90106500Y-150812500D01* +X71449500Y-146292000D02* +X71831500Y-145910000D01* +X71831500Y-145910000D02* +X73017000Y-145910000D01* +X71374000Y-146292000D02* +X71449500Y-146292000D01* +X73016000Y-145911000D02* +X73017000Y-145910000D01* +D42* +X80593500Y-151066500D02* +X79426500Y-151066500D01* +X79426500Y-151066500D02* +X79363000Y-151003000D01* +D40* +X85725000Y-135318500D02* +X85090000Y-135953500D01* +X85090000Y-135953500D02* +X85090000Y-137604500D01* +X85090000Y-137604500D02* +X84836000Y-137858500D01* +X84836000Y-137858500D02* +X83883500Y-137858500D01* +X83108800Y-140182600D02* +X82346800Y-140766800D01* +X82346800Y-140766800D02* +X82118200Y-148005800D01* +X80391000Y-151003000D02* +X80327500Y-151066500D01* +X80327500Y-151066500D02* +X79299500Y-151066500D01* +X85927500Y-135318500D02* +X85725000Y-135318500D01* +X87554500Y-138430000D02* +X87439500Y-138430000D01* +X87439500Y-138430000D02* +X86677500Y-137668000D01* +X86677500Y-137668000D02* +X86677500Y-135826500D01* +X86677500Y-135826500D02* +X86169500Y-135318500D01* +X86169500Y-135318500D02* +X85927500Y-135318500D01* +X79299500Y-151066500D02* +X79299500Y-150927500D01* +X79299500Y-150927500D02* +X78867000Y-150495000D01* +X78867000Y-150495000D02* +X78867000Y-149360000D01* +X84824000Y-124194000D02* +X83502500Y-124194000D01* +X84836000Y-124206000D02* +X84824000Y-124194000D01* +X82359500Y-123444000D02* +X81661000Y-123444000D01* +X81661000Y-123444000D02* +X79692500Y-125412500D01* +X79692500Y-125412500D02* +X77406500Y-125412500D01* +X77406500Y-125412500D02* +X76708000Y-126111000D01* +X76708000Y-126111000D02* +X75374500Y-126111000D01* +X83502500Y-124194000D02* +X83109500Y-124194000D01* +X83109500Y-124194000D02* +X82359500Y-123444000D01* +D41* +X94551500Y-136485500D02* +X94551500Y-137477500D01* +X94551500Y-137477500D02* +X94805500Y-137731500D01* +X83502500Y-122694000D02* +X86157500Y-122694000D01* +X86157500Y-122694000D02* +X87249000Y-121602500D01* +X87249000Y-121602500D02* +X90924498Y-121602500D01* +X90924498Y-121602500D02* +X90805000Y-121602500D01* +X82045000Y-122494000D02* +X83302500Y-122494000D01* +X83302500Y-122494000D02* +X83502500Y-122694000D01* +X80645000Y-123634500D02* +X80645000Y-122872500D01* +X80645000Y-122872500D02* +X81023500Y-122494000D01* +X81023500Y-122494000D02* +X82045000Y-122494000D01* +X80010000Y-124269500D02* +X80645000Y-123634500D01* +X76350500Y-124269500D02* +X77177900Y-124269500D01* +X79705200Y-124383800D02* +X79781400Y-124460000D01* +X77292200Y-124383800D02* +X79705200Y-124383800D01* +X77177900Y-124269500D02* +X77292200Y-124383800D01* +D42* +X71437500Y-128472500D02* +X71437500Y-127596900D01* +X71780400Y-127254000D02* +X72072500Y-127254000D01* +X71437500Y-127596900D02* +X71780400Y-127254000D01* +D40* +X87249000Y-121602500D02* +X90805000Y-121602500D01* +X86157500Y-122694000D02* +X87249000Y-121602500D01* +X94551500Y-137477500D02* +X94805500Y-137731500D01* +X95504000Y-123749500D02* +X95504000Y-126913000D01* +X95504000Y-126913000D02* +X95781500Y-127190500D01* +X76350500Y-124269500D02* +X80010000Y-124269500D01* +X81023500Y-122494000D02* +X82045000Y-122494000D01* +X80645000Y-122872500D02* +X81023500Y-122494000D01* +X83302500Y-122494000D02* +X83502500Y-122694000D01* +X78961000Y-130810000D02* +X77470000Y-130810000D01* +X77470000Y-130810000D02* +X76200000Y-132080000D01* +X68707000Y-133338000D02* +X66052000Y-133338000D01* +X66052000Y-133338000D02* +X66040000Y-133350000D01* +X68719000Y-130302000D02* +X68719000Y-131826000D01* +X68719000Y-131826000D02* +X68707000Y-131838000D01* +X68719000Y-130302000D02* +X66548000Y-130302000D01* +X66548000Y-130302000D02* +X66040000Y-130810000D01* +X68707000Y-130314000D02* +X68719000Y-130302000D01* +X66802000Y-130048000D02* +X66040000Y-130810000D01* +X68707000Y-136259000D02* +X68211000Y-136259000D01* +X68211000Y-136259000D02* +X66040000Y-138430000D01* +X68707000Y-136259000D02* +X68707000Y-136398000D01* +X66675000Y-138430000D02* +X66040000Y-138430000D01* +X68707000Y-134759000D02* +X69977000Y-134759000D01* +X69977000Y-134759000D02* +X70358000Y-134378000D01* +X68707000Y-134759000D02* +X67171000Y-134759000D01* +X67171000Y-134759000D02* +X66040000Y-135890000D01* +X68707000Y-134759000D02* +X68949000Y-134759000D01* +X68707000Y-134759000D02* +X68441000Y-134759000D01* +D42* +X74358500Y-127762000D02* +X74358500Y-125793500D01* +X74358500Y-125793500D02* +X73850500Y-125285500D01* +X73850500Y-125285500D02* +X73850500Y-124269500D01* +D40* +X82677000Y-130175000D02* +X82677000Y-131851400D01* +X88888000Y-142532800D02* +X88888000Y-143129000D01* +X88595200Y-142240000D02* +X88888000Y-142532800D01* +X88392000Y-142240000D02* +X88595200Y-142240000D01* +X88138000Y-141986000D02* +X88392000Y-142240000D01* +X87020400Y-141986000D02* +X88138000Y-141986000D01* +X84429600Y-136702800D02* +X84429600Y-137210800D01* +X83108800Y-135382000D02* +X84429600Y-136702800D01* +X83108800Y-134975600D02* +X83108800Y-135382000D01* +X82042000Y-133908800D02* +X83108800Y-134975600D01* +X82042000Y-132486400D02* +X82042000Y-133908800D01* +X82677000Y-131851400D02* +X82042000Y-132486400D01* +X73850500Y-125285500D02* +X73850500Y-124269500D01* +X74358500Y-125793500D02* +X73850500Y-125285500D01* +X71437500Y-129972500D02* +X71437500Y-131064000D01* +X72453500Y-132080000D02* +X73660000Y-132080000D01* +X71437500Y-131064000D02* +X72453500Y-132080000D01* +X73989500Y-124003500D02* +X73533000Y-124460000D01* +X73660000Y-132080000D02* +X72390000Y-130810000D01* +X83312000Y-130810000D02* +X84361000Y-130810000D01* +X82613500Y-130111500D02* +X82677000Y-130175000D01* +X82677000Y-130175000D02* +X83312000Y-130810000D01* +X82613500Y-128651000D02* +X82613500Y-130111500D01* +X80010000Y-126047500D02* +X82613500Y-128651000D01* +X77851000Y-126047500D02* +X80010000Y-126047500D01* +X76136500Y-127762000D02* +X77851000Y-126047500D01* +X72961500Y-127762000D02* +X74358500Y-127762000D01* +X74358500Y-127762000D02* +X76136500Y-127762000D01* +X72390000Y-128333500D02* +X72961500Y-127762000D01* +X72390000Y-130810000D02* +X72390000Y-128333500D01* +X73660000Y-132080000D02* +X73660000Y-131508500D01* +D41* +X78486000Y-121970800D02* +X78486000Y-122685000D01* +X78486000Y-122685000D02* +X79245000Y-123444000D01* +D42* +X78917800Y-122402600D02* +X78486000Y-121970800D01* +X78486000Y-121970800D02* +X79222600Y-122707400D01* +X78359000Y-122402600D02* +X78917800Y-122402600D01* +X65468500Y-125222000D02* +X66738500Y-125222000D01* +X66738500Y-125222000D02* +X68961000Y-122999500D01* +X68961000Y-122999500D02* +X69049900Y-122999500D01* +X69049900Y-122999500D02* +X69646800Y-122402600D01* +X69646800Y-122402600D02* +X78359000Y-122402600D01* +X78359000Y-122402600D02* +X78409800Y-122402600D01* +X65468500Y-125222000D02* +X65468500Y-119573040D01* +X65468500Y-119573040D02* +X65595500Y-119446040D01* +D40* +X79245000Y-123444000D02* +X78994000Y-123444000D01* +X78994000Y-123444000D02* +X78549500Y-122999500D01* +X78549500Y-122999500D02* +X68961000Y-122999500D01* +X68961000Y-122999500D02* +X66738500Y-125222000D01* +X65468500Y-119573040D02* +X65595500Y-119446040D01* +X84717000Y-147510000D02* +X85598500Y-147510000D01* +X86804500Y-145300000D02* +X87388000Y-144716500D01* +X86804500Y-146304000D02* +X86804500Y-145300000D01* +X85598500Y-147510000D02* +X86804500Y-146304000D01* +X87388000Y-143129000D02* +X87388000Y-144716500D01* +X84717000Y-146710000D02* +X83845000Y-146710000D01* +X79679800Y-144983200D02* +X79654300Y-144983200D01* +X83502500Y-145923000D02* +X83375500Y-145796000D01* +X83502500Y-146367500D02* +X83502500Y-145923000D01* +X83845000Y-146710000D02* +X83502500Y-146367500D01* +X79679800Y-144792700D02* +X79654300Y-144792700D01* +X79654300Y-144792700D02* +X79679800Y-144792700D01* +X79679800Y-144792700D02* +X79654300Y-144792700D01* +X79667000Y-149360000D02* +X79654300Y-144983200D01* +X79654300Y-144983200D02* +X79654300Y-144792700D01* +X79654300Y-144792700D02* +X79476500Y-140589100D01* +X82740500Y-127000000D02* +X84361000Y-127000000D01* +X79476500Y-140589100D02* +X79502000Y-140563600D01* +X84361000Y-128270000D02* +X84361000Y-127000000D01* +X88798400Y-140512800D02* +X89420700Y-140525500D01* +X85928000Y-145110000D02* +X84717000Y-145110000D01* +X86055200Y-145237200D02* +X85928000Y-145110000D01* +X89420700Y-140525500D02* +X89509600Y-140614400D01* +X86868000Y-140512800D02* +X87146002Y-140512800D01* +X85814000Y-144310000D02* +X84717000Y-144310000D01* +X85902800Y-144221200D02* +X85814000Y-144310000D01* +X85902800Y-144068800D02* +X85902800Y-144221200D01* +X86309200Y-143662400D02* +X85902800Y-144068800D01* +X87680800Y-141047598D02* +X87680800Y-141325600D01* +X87146002Y-140512800D02* +X87680800Y-141047598D01* +X84717000Y-143510000D02* +X83515200Y-143510000D01* +X79418200Y-131622800D02* +X78961000Y-132080000D01* +X80111600Y-131622800D02* +X79418200Y-131622800D01* +X80365600Y-131876800D02* +X80111600Y-131622800D01* +X83515200Y-143510000D02* +X83413600Y-143611600D01* +X78961000Y-129540000D02* +X79908400Y-129540000D01* +X79908400Y-129540000D02* +X80264000Y-129895600D01* +X80264000Y-129895600D02* +X80264000Y-130759200D01* +X80264000Y-130759200D02* +X81026000Y-131521200D01* +X81026000Y-131521200D02* +X81026000Y-134162800D01* +X81026000Y-134162800D02* +X81838800Y-134975600D01* +X83058000Y-141071600D02* +X83528000Y-142710000D01* +X83528000Y-142710000D02* +X84717000Y-142710000D01* +X80467000Y-137660000D02* +X80467000Y-139141000D01* +X80836000Y-139510000D02* +X84717000Y-139510000D01* +X80467000Y-139141000D02* +X80836000Y-139510000D01* +X82867000Y-136462000D02* +X82867000Y-137660000D01* +X82931000Y-136398000D02* +X82867000Y-136462000D01* +X91313000Y-136017000D02* +X90805000Y-135509000D01* +X91313000Y-136144000D02* +X91313000Y-136017000D01* +X78867000Y-137660000D02* +X78867000Y-136652000D01* +X88582500Y-137414000D02* +X89281000Y-137414000D01* +X88582500Y-135636000D02* +X88582500Y-137414000D01* +X88455500Y-135509000D02* +X88582500Y-135636000D01* +X81724500Y-136334500D02* +X82423000Y-135636000D01* +X79184500Y-136334500D02* +X81724500Y-136334500D01* +X78867000Y-136652000D02* +X79184500Y-136334500D01* +X78867000Y-137660000D02* +X78867000Y-136906000D01* +X73017000Y-140310000D02* +X73913600Y-140310000D01* +X81280000Y-125159000D02* +X82045000Y-124394000D01* +X81280000Y-125425200D02* +X81280000Y-125159000D01* +X81178400Y-125526800D02* +X81280000Y-125425200D01* +X73913600Y-140310000D02* +X74879200Y-139344400D01* +X90757400Y-123228540D02* +X90757400Y-124094900D01* +X74981000Y-141910000D02* +X73017000Y-141910000D01* +X75184000Y-142113000D02* +X74981000Y-141910000D01* +X90757400Y-124094900D02* +X91376500Y-124714000D01* +X73017000Y-142710000D02* +X74384000Y-142710000D01* +X90107400Y-124522600D02* +X90107400Y-123228540D01* +X90017600Y-124612400D02* +X90107400Y-124522600D01* +X81127600Y-144170400D02* +X80873600Y-141655800D01* +X81229200Y-144272000D02* +X81127600Y-144170400D01* +X75387200Y-143713200D02* +X78943200Y-143713200D01* +X74384000Y-142710000D02* +X75387200Y-143713200D01* +X73017000Y-143510000D02* +X72136000Y-143510000D01* +X72136000Y-143510000D02* +X71818500Y-143192500D01* +X71818500Y-143192500D02* +X71818500Y-141287500D01* +X71818500Y-141287500D02* +X71068500Y-140537500D01* +X71068500Y-140537500D02* +X69749100Y-140537500D01* +X69749100Y-140537500D02* +X69748400Y-140536800D01* +X71068500Y-140537500D02* +X70231000Y-140537500D01* +X71818500Y-141287500D02* +X71068500Y-140537500D01* +X71818500Y-143192500D02* +X71818500Y-141287500D01* +X72136000Y-143510000D02* +X71818500Y-143192500D01* +X70040500Y-143141000D02* +X70941500Y-143141000D01* +X70941500Y-143141000D02* +X72110500Y-144310000D01* +X72110500Y-144310000D02* +X73017000Y-144310000D01* +X70231000Y-143141000D02* +X70624000Y-143141000D01* +X69786500Y-145744500D02* +X69786500Y-146367500D01* +X74244200Y-146532600D02* +X73169000Y-146558000D01* +X74345800Y-146761200D02* +X74244200Y-146532600D01* +X70548500Y-146875500D02* +X70815200Y-147320000D01* +X70548500Y-146685000D02* +X70548500Y-146875500D01* +X70358000Y-146494500D02* +X70548500Y-146685000D01* +X69913500Y-146494500D02* +X70358000Y-146494500D01* +X69786500Y-146367500D02* +X69913500Y-146494500D01* +X73169000Y-146558000D02* +X73017000Y-146710000D01* +X72992000Y-146685000D02* +X73017000Y-146710000D01* +X70231000Y-148348000D02* +X70231000Y-148691600D01* +X73017000Y-148302600D02* +X73017000Y-147510000D01* +X73126600Y-148412200D02* +X73017000Y-148302600D01* +X71678800Y-149529800D02* +X71678800Y-149783800D01* +X71272400Y-149123400D02* +X71678800Y-149529800D01* +X70662800Y-149123400D02* +X71272400Y-149123400D01* +X70231000Y-148691600D02* +X70662800Y-149123400D01* +X74867000Y-149360000D02* +X74867000Y-147573500D01* +X85344000Y-149860000D02* +X87566500Y-149860000D01* +X83502500Y-148018500D02* +X85344000Y-149860000D01* +X83502500Y-147066000D02* +X83502500Y-148018500D01* +X82867500Y-146431000D02* +X83502500Y-147066000D01* +X76009500Y-146431000D02* +X78943200Y-145719800D01* +X74867000Y-147573500D02* +X76009500Y-146431000D01* +X75667000Y-149360000D02* +X75667000Y-147853000D01* +X75667000Y-147853000D02* +X78536800Y-146634200D01* +X84361000Y-133350000D02* +X82994500Y-133350000D01* +X81267000Y-148005500D02* +X81267000Y-149360000D01* +X80454500Y-147193000D02* +X81267000Y-148005500D01* +X80200500Y-141236700D02* +X80454500Y-147193000D01* +X80137000Y-141173200D02* +X80200500Y-141236700D01* +X84361000Y-133350000D02* +X84361000Y-134620000D01* +X82867000Y-149360000D02* +X82867000Y-150329400D01* +X94030800Y-142595600D02* +X94030800Y-141808200D01* +X92252800Y-144373600D02* +X94030800Y-142595600D01* +X84099400Y-150291800D02* +X84404200Y-149987000D01* +X82904600Y-150291800D02* +X84099400Y-150291800D01* +X82867000Y-150329400D02* +X82904600Y-150291800D01* +X87427500Y-135624000D02* +X87427500Y-135318500D01* +X87427500Y-133731000D02* +X87058500Y-133731000D01* +X86741000Y-126238000D02* +X87185500Y-125793500D01* +X87058500Y-133731000D02* +X86741000Y-133413500D01* +X87185500Y-125793500D02* +X87427500Y-125793500D01* +X87427500Y-135318500D02* +X87427500Y-136906000D01* +X87427500Y-135318500D02* +X87427500Y-133731000D01* +X68643500Y-148348000D02* +X66282000Y-148348000D01* +X66282000Y-148348000D02* +X66040000Y-148590000D01* +X66040000Y-146050000D02* +X68147500Y-146050000D01* +X68147500Y-146050000D02* +X68453000Y-145744500D01* +X66345500Y-145744500D02* +X66040000Y-146050000D01* +X68453000Y-143141000D02* +X66409000Y-143141000D01* +X66409000Y-143141000D02* +X66040000Y-143510000D01* +X66409000Y-143141000D02* +X66040000Y-143510000D01* +X67970400Y-140536800D02* +X66473200Y-140536800D01* +X66473200Y-140536800D02* +X66040000Y-140970000D01* +X66472500Y-140537500D02* +X66040000Y-140970000D01* +X66472500Y-140537500D02* +X66040000Y-140970000D01* +X89585800Y-136779000D02* +X89281000Y-136779000D01* +X89966800Y-137160000D02* +X89585800Y-136779000D01* +X89966800Y-137668000D02* +X89966800Y-137160000D01* +X90373200Y-138074400D02* +X89966800Y-137668000D01* +X91249500Y-142113000D02* +X90805000Y-142113000D01* +X91249500Y-142113000D02* +X90741500Y-142113000D01* +X91313000Y-136779000D02* +X91821000Y-136779000D01* +X91948000Y-136906000D02* +X91948000Y-138874500D01* +X91821000Y-136779000D02* +X91948000Y-136906000D01* +X91948000Y-138874500D02* +X91249500Y-139573000D01* +X85927500Y-133731000D02* +X85927500Y-132080000D01* +X85927500Y-132080000D02* +X84361000Y-132080000D01* +X85927500Y-125793500D02* +X82740500Y-125793500D01* +X83312000Y-129540000D02* +X84361000Y-129540000D01* +X83127002Y-129355002D02* +X83312000Y-129540000D01* +X83127002Y-128339002D02* +X83127002Y-129355002D01* +X82042000Y-127254000D02* +X83127002Y-128339002D01* +X82042000Y-126492000D02* +X82042000Y-127254000D01* +X82740500Y-125793500D02* +X82042000Y-126492000D01* +X85927500Y-127381000D02* +X85927500Y-125793500D01* +X84424500Y-129476500D02* +X84361000Y-129540000D01* +X67970400Y-142036800D02* +X69748400Y-142036800D01* +X68453000Y-144641000D02* +X70040500Y-144641000D01* +X68453000Y-147244500D02* +X69786500Y-147244500D01* +X68643500Y-149848000D02* +X70231000Y-149848000D01* +X78961000Y-128270000D02* +X80010000Y-128270000D01* +X80010000Y-128270000D02* +X80467200Y-128727200D01* +X71616000Y-138938000D02* +X71501000Y-138938000D01* +X71501000Y-138938000D02* +X70675500Y-138112500D01* +X69266500Y-138112500D02* +X68707000Y-137553000D01* +X70675500Y-138112500D02* +X69266500Y-138112500D01* +X71616000Y-140093000D02* +X71616000Y-138938000D01* +X71564500Y-140144500D02* +X71616000Y-140093000D01* +X72961500Y-137045000D02* +X74029000Y-137045000D01* +X74029000Y-137045000D02* +X74041000Y-137033000D01* +X79024500Y-128333500D02* +X78961000Y-128270000D01* +X86868000Y-141147800D02* +X86690200Y-141147800D01* +X86690200Y-141147800D02* +X86131400Y-141706600D01* +X86131400Y-141706600D02* +X86131400Y-142367000D01* +X81635600Y-141376400D02* +X80594200Y-140335000D01* +X80594200Y-140335000D02* +X80416400Y-140335000D01* +X80416400Y-140335000D02* +X79984600Y-139903200D01* +X79984600Y-139903200D02* +X78867000Y-139903200D01* +X78867000Y-139903200D02* +X76936600Y-141833600D01* +X76936600Y-141833600D02* +X76936600Y-142951200D01* +X76301600Y-144678400D02* +X76047600Y-144932400D01* +X76047600Y-144932400D02* +X74726800Y-144932400D01* +X71145400Y-141630400D02* +X70789800Y-141274800D01* +X70789800Y-141274800D02* +X69088000Y-141274800D01* +X69088000Y-141274800D02* +X68884800Y-141071600D01* +X68884800Y-141071600D02* +X68884800Y-140004800D01* +X68884800Y-140004800D02* +X69469000Y-139420600D01* +X69469000Y-139420600D02* +X69469000Y-138938000D01* +X70116000Y-138938000D02* +X69469000Y-138938000D01* +X69469000Y-138938000D02* +X68822000Y-138938000D01* +X68822000Y-138938000D02* +X68707000Y-139053000D01* +X76708000Y-135878000D02* +X79704500Y-135878000D01* +X80073500Y-133350000D02* +X78961000Y-133350000D01* +X80264000Y-133540500D02* +X80073500Y-133350000D01* +X80264000Y-135318500D02* +X80264000Y-133540500D01* +X79704500Y-135878000D02* +X80264000Y-135318500D01* +X75057000Y-135878000D02* +X76708000Y-135878000D01* +X73406000Y-135878000D02* +X75057000Y-135878000D01* +X74981500Y-134378000D02* +X74358500Y-135001000D01* +X88201500Y-139890500D02* +X88849200Y-139903200D01* +X88188800Y-139954000D02* +X88201500Y-139890500D01* +X88239600Y-140208000D02* +X88239600Y-139954000D01* +X88239600Y-139954000D02* +X88239600Y-140208000D01* +X74358500Y-135001000D02* +X71818500Y-135001000D01* +X76708000Y-134378000D02* +X74981500Y-134378000D01* +X75057000Y-134378000D02* +X76708000Y-134378000D01* +X78961000Y-134620000D02* +X78549500Y-134620000D01* +X78549500Y-134620000D02* +X77533500Y-133604000D01* +X77533500Y-133604000D02* +X74180000Y-133604000D01* +X74180000Y-133604000D02* +X73406000Y-134378000D01* +X70358000Y-133211000D02* +X70854000Y-133211000D01* +X72021000Y-134378000D02* +X73406000Y-134378000D01* +X70854000Y-133211000D02* +X72021000Y-134378000D01* +X73406000Y-134378000D02* +X73013000Y-134378000D01* +X78961000Y-127000000D02* +X79857600Y-127000000D01* +X71616000Y-136156000D02* +X71616000Y-137287000D01* +X71831200Y-135940800D02* +X71616000Y-136156000D01* +X79857600Y-127000000D02* +X80213200Y-127355600D01* +X71616000Y-137287000D02* +X71616000Y-137783000D01* +X71616000Y-137783000D02* +X72378000Y-138545000D01* +X72378000Y-138545000D02* +X72961500Y-138545000D01* +X79024500Y-127063500D02* +X78961000Y-127000000D01* +X70358000Y-131711000D02* +X70358000Y-130441000D01* +X70358000Y-130441000D02* +X70219000Y-130302000D01* +X70358000Y-130441000D02* +X70219000Y-130302000D01* +X70116000Y-137287000D02* +X70116000Y-136120000D01* +X70116000Y-136120000D02* +X70358000Y-135878000D01* +M02* diff --git a/PCB/OUTPUT_V35/Tinylab_proto1-F_Mask.gbr b/PCB/OUTPUT_V35/Tinylab_proto1-F_Mask.gbr new file mode 100644 index 00000000..f88be37e --- /dev/null +++ b/PCB/OUTPUT_V35/Tinylab_proto1-F_Mask.gbr @@ -0,0 +1,290 @@ +G04 #@! TF.FileFunction,Soldermask,Top* +%FSLAX46Y46*% +G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* +G04 Created by KiCad (PCBNEW (2015-08-05 BZR 6055, Git fa29c62)-product) date 02/02/2016 11:58:07 AM* +%MOMM*% +G01* +G04 APERTURE LIST* +%ADD10C,0.100000*% +%ADD11R,0.800000X0.750000*% +%ADD12R,0.750000X0.800000*% +%ADD13R,1.300000X1.300000*% +%ADD14C,1.300000*% +%ADD15C,1.998980*% +%ADD16R,1.998980X1.998980*% +%ADD17R,1.600000X1.000000*% +%ADD18R,1.600000X0.560000*% +%ADD19R,0.560000X1.600000*% +%ADD20R,1.905000X1.905000*% +%ADD21C,1.905000*% +%ADD22R,2.032000X1.727200*% +%ADD23O,2.032000X1.727200*% +%ADD24R,0.400000X1.350000*% +%ADD25O,1.250000X0.950000*% +%ADD26O,1.000000X1.550000*% +%ADD27R,1.727200X1.727200*% +%ADD28O,1.727200X1.727200*% +%ADD29R,1.727200X2.032000*% +%ADD30O,1.727200X2.032000*% +%ADD31R,2.032000X2.032000*% +%ADD32O,2.032000X2.032000*% +%ADD33R,0.900000X0.600000*% +%ADD34R,0.500000X0.900000*% +%ADD35R,0.900000X0.500000*% +%ADD36R,0.600000X0.900000*% +%ADD37R,1.500000X0.600000*% +%ADD38R,0.508000X0.304800*% +G04 APERTURE END LIST* +D10* +D11* +X86054500Y-130492500D03* +X87554500Y-130492500D03* +X86054500Y-128968500D03* +X87554500Y-128968500D03* +D12* +X92519500Y-130885500D03* +X92519500Y-132385500D03* +D11* +X95619000Y-135064500D03* +X94119000Y-135064500D03* +X87554500Y-138430000D03* +X86054500Y-138430000D03* +D13* +X94805500Y-147510500D03* +D14* +X94805500Y-145010500D03* +D11* +X79363000Y-151003000D03* +X77863000Y-151003000D03* +D13* +X93281500Y-127190500D03* +D14* +X95781500Y-127190500D03* +D12* +X83502500Y-124194000D03* +X83502500Y-122694000D03* +X71374000Y-146292000D03* +X71374000Y-144792000D03* +X95504000Y-122249500D03* +X95504000Y-123749500D03* +X68707000Y-133338000D03* +X68707000Y-131838000D03* +X68707000Y-136259000D03* +X68707000Y-134759000D03* +D14* +X76350500Y-124269500D03* +D13* +X73850500Y-124269500D03* +D12* +X71437500Y-129972500D03* +X71437500Y-128472500D03* +D15* +X65595500Y-119446040D03* +D16* +X75755500Y-119446040D03* +D17* +X94551500Y-139485500D03* +X94551500Y-136485500D03* +D18* +X84717000Y-147510000D03* +X84717000Y-146710000D03* +X84717000Y-145910000D03* +X84717000Y-145110000D03* +X84717000Y-144310000D03* +X84717000Y-143510000D03* +X84717000Y-142710000D03* +X84717000Y-141910000D03* +X84717000Y-141110000D03* +X84717000Y-140310000D03* +X84717000Y-139510000D03* +D19* +X82867000Y-137660000D03* +X82067000Y-137660000D03* +X81267000Y-137660000D03* +X80467000Y-137660000D03* +X79667000Y-137660000D03* +X78867000Y-137660000D03* +X78067000Y-137660000D03* +X77267000Y-137660000D03* +X76467000Y-137660000D03* +X75667000Y-137660000D03* +X74867000Y-137660000D03* +D18* +X73017000Y-139510000D03* +X73017000Y-140310000D03* +X73017000Y-141110000D03* +X73017000Y-141910000D03* +X73017000Y-142710000D03* +X73017000Y-143510000D03* +X73017000Y-144310000D03* +X73017000Y-145110000D03* +X73017000Y-145910000D03* +X73017000Y-146710000D03* +X73017000Y-147510000D03* +D19* +X74867000Y-149360000D03* +X75667000Y-149360000D03* +X76467000Y-149360000D03* +X77267000Y-149360000D03* +X78067000Y-149360000D03* +X78867000Y-149360000D03* +X79667000Y-149360000D03* +X80467000Y-149360000D03* +X81267000Y-149360000D03* +X82067000Y-149360000D03* +X82867000Y-149360000D03* +D20* +X65468500Y-125222000D03* +D21* +X70548500Y-125222000D03* +D22* +X90043000Y-126301500D03* +D23* +X90043000Y-128841500D03* +X90043000Y-131381500D03* +X90043000Y-133921500D03* +D24* +X91407400Y-123228540D03* +X90757400Y-123228540D03* +X90107400Y-123228540D03* +X89457400Y-123228540D03* +X88807400Y-123228540D03* +D25* +X92607400Y-123228540D03* +X87607400Y-123228540D03* +D26* +X93607400Y-120528540D03* +X86607400Y-120528540D03* +D22* +X66040000Y-148590000D03* +D23* +X66040000Y-146050000D03* +X66040000Y-143510000D03* +X66040000Y-140970000D03* +D27* +X90106500Y-149860000D03* +D28* +X87566500Y-149860000D03* +X90106500Y-147320000D03* +X87566500Y-147320000D03* +D29* +X83693000Y-119380000D03* +D30* +X81153000Y-119380000D03* +X78613000Y-119380000D03* +D22* +X66040000Y-130810000D03* +D23* +X66040000Y-133350000D03* +X66040000Y-135890000D03* +X66040000Y-138430000D03* +D27* +X73660000Y-132080000D03* +D28* +X73660000Y-129540000D03* +X76200000Y-132080000D03* +X76200000Y-129540000D03* +D31* +X91249500Y-142113000D03* +D32* +X91249500Y-139573000D03* +D33* +X79245000Y-123444000D03* +X82045000Y-122494000D03* +X82045000Y-124394000D03* +D34* +X85927500Y-132080000D03* +X87427500Y-132080000D03* +X85927500Y-127381000D03* +X87427500Y-127381000D03* +X85927500Y-133731000D03* +X87427500Y-133731000D03* +X87427500Y-125793500D03* +X85927500Y-125793500D03* +X85927500Y-135318500D03* +X87427500Y-135318500D03* +X85927500Y-136906000D03* +X87427500Y-136906000D03* +D35* +X67970400Y-142036800D03* +X67970400Y-140536800D03* +X68453000Y-144641000D03* +X68453000Y-143141000D03* +X68453000Y-147244500D03* +X68453000Y-145744500D03* +X68643500Y-149848000D03* +X68643500Y-148348000D03* +X69748400Y-140536800D03* +X69748400Y-142036800D03* +X70040500Y-143141000D03* +X70040500Y-144641000D03* +X69786500Y-145744500D03* +X69786500Y-147244500D03* +X70231000Y-148348000D03* +X70231000Y-149848000D03* +X68707000Y-137553000D03* +X68707000Y-139053000D03* +D34* +X71616000Y-138938000D03* +X70116000Y-138938000D03* +D35* +X75057000Y-135878000D03* +X75057000Y-134378000D03* +X76708000Y-135878000D03* +X76708000Y-134378000D03* +X73406000Y-134378000D03* +X73406000Y-135878000D03* +X72961500Y-138545000D03* +X72961500Y-137045000D03* +D34* +X82093500Y-151066500D03* +X80593500Y-151066500D03* +D35* +X70358000Y-131711000D03* +X70358000Y-133211000D03* +D34* +X70116000Y-137287000D03* +X71616000Y-137287000D03* +X68719000Y-130302000D03* +X70219000Y-130302000D03* +D35* +X70358000Y-134378000D03* +X70358000Y-135878000D03* +D34* +X88888000Y-143129000D03* +X87388000Y-143129000D03* +X87388000Y-144716500D03* +X88888000Y-144716500D03* +D36* +X94869000Y-130870500D03* +X95819000Y-133670500D03* +X93919000Y-133670500D03* +D37* +X84361000Y-134620000D03* +X84361000Y-133350000D03* +X84361000Y-132080000D03* +X84361000Y-130810000D03* +X84361000Y-129540000D03* +X84361000Y-128270000D03* +X84361000Y-127000000D03* +X78961000Y-127000000D03* +X78961000Y-128270000D03* +X78961000Y-129540000D03* +X78961000Y-130810000D03* +X78961000Y-132080000D03* +X78961000Y-133350000D03* +X78961000Y-134620000D03* +D38* +X88900000Y-141147800D03* +X88900000Y-139877800D03* +X86868000Y-141147800D03* +X88900000Y-140512800D03* +X86868000Y-139877800D03* +X86868000Y-140512800D03* +X91313000Y-137414000D03* +X91313000Y-136144000D03* +X89281000Y-137414000D03* +X91313000Y-136779000D03* +X89281000Y-136144000D03* +X89281000Y-136779000D03* +M02* diff --git a/PCB/OUTPUT_V35/Tinylab_proto1.kicad_pcb b/PCB/OUTPUT_V35/Tinylab_proto1.kicad_pcb new file mode 100644 index 00000000..accffff3 --- /dev/null +++ b/PCB/OUTPUT_V35/Tinylab_proto1.kicad_pcb @@ -0,0 +1,3082 @@ +(kicad_pcb (version 4) (host pcbnew "(2015-08-05 BZR 6055, Git fa29c62)-product") + + (general + (links 128) + (no_connects 6) + (area 62.526905 115.741 100.356691 155.935) + (thickness 1.6) + (drawings 10) + (tracks 837) + (zones 0) + (modules 59) + (nets 73) + ) + + (page A4) + (layers + (0 F.Cu signal) + (31 B.Cu signal) + (32 B.Adhes user) + (33 F.Adhes user) + (34 B.Paste user) + (35 F.Paste user) + (36 B.SilkS user) + (37 F.SilkS user) + (38 B.Mask user) + (39 F.Mask user) + (40 Dwgs.User user) + (41 Cmts.User user) + (42 Eco1.User user) + (43 Eco2.User user) + (44 Edge.Cuts user) + (45 Margin user) + (46 B.CrtYd user) + (47 F.CrtYd user) + (48 B.Fab user) + (49 F.Fab user) + ) + + (setup + (last_trace_width 0.25) + (user_trace_width 0.508) + (user_trace_width 1.016) + (trace_clearance 0.2) + (zone_clearance 0.508) + (zone_45_only no) + (trace_min 0.2) + (segment_width 0.2) + (edge_width 0.1) + (via_size 0.6) + (via_drill 0.4) + (via_min_size 0.4) + (via_min_drill 0.3) + (uvia_size 0.3) + (uvia_drill 0.1) + (uvias_allowed no) + (uvia_min_size 0.2) + (uvia_min_drill 0.1) + (pcb_text_width 0.3) + (pcb_text_size 1.5 1.5) + (mod_edge_width 0.15) + (mod_text_size 1 1) + (mod_text_width 0.15) + (pad_size 1.5 1.5) + (pad_drill 0.6) + (pad_to_mask_clearance 0) + (aux_axis_origin 0 0) + (visible_elements 7FFFFFDF) + (pcbplotparams + (layerselection 0x010c0_80000001) + (usegerberextensions false) + (excludeedgelayer true) + (linewidth 0.100000) + (plotframeref false) + (viasonmask false) + (mode 1) + (useauxorigin false) + (hpglpennumber 1) + (hpglpenspeed 20) + (hpglpendiameter 15) + (hpglpenoverlay 2) + (psnegative false) + (psa4output false) + (plotreference true) + (plotvalue true) + (plotinvisibletext false) + (padsonsilk false) + (subtractmaskfromsilk false) + (outputformat 1) + (mirror false) + (drillshape 0) + (scaleselection 1) + (outputdirectory OUTPUT_V3/)) + ) + + (net 0 "") + (net 1 "Net-(C1-Pad1)") + (net 2 "Net-(C1-Pad2)") + (net 3 "Net-(C2-Pad1)") + (net 4 "Net-(C2-Pad2)") + (net 5 +5V) + (net 6 /AGND) + (net 7 /VCC_3V3) + (net 8 /AVCC) + (net 9 /VCC_PSU) + (net 10 /VGND) + (net 11 "Net-(C13-Pad1)") + (net 12 "Net-(C13-Pad2)") + (net 13 "Net-(C14-Pad1)") + (net 14 "Net-(C14-Pad2)") + (net 15 /PSU_OUT) + (net 16 "Net-(D1-Pad2)") + (net 17 /PSU_FEEDBACK) + (net 18 /CH2) + (net 19 "Net-(IC1-Pad3)") + (net 20 /TO_B0) + (net 21 /TO_B1) + (net 22 /DAC_OUT) + (net 23 /DAC_OUT2) + (net 24 "Net-(IC1-Pad8)") + (net 25 "Net-(IC1-Pad9)") + (net 26 "Net-(IC1-Pad10)") + (net 27 /XCK) + (net 28 /DIG_CH2) + (net 29 "Net-(IC1-Pad13)") + (net 30 "Net-(IC1-Pad16)") + (net 31 /DIG_CH1) + (net 32 "Net-(IC1-Pad20)") + (net 33 "Net-(IC1-Pad21)") + (net 34 "Net-(IC1-Pad22)") + (net 35 "Net-(IC1-Pad23)") + (net 36 /PSU_PWM) + (net 37 "Net-(IC1-Pad25)") + (net 38 /D-) + (net 39 /D+) + (net 40 "Net-(IC1-Pad28)") + (net 41 "Net-(IC1-Pad29)") + (net 42 "Net-(IC1-Pad32)") + (net 43 "Net-(IC1-Pad33)") + (net 44 "Net-(IC1-Pad34)") + (net 45 "Net-(IC1-Pad35)") + (net 46 "Net-(IC1-Pad36)") + (net 47 "Net-(IC1-Pad37)") + (net 48 "Net-(IC1-Pad41)") + (net 49 /CH1) + (net 50 "Net-(IC1-Pad43)") + (net 51 /AVCC_ON_2) + (net 52 "Net-(P2-Pad4)") + (net 53 "Net-(P3-Pad1)") + (net 54 "Net-(P3-Pad2)") + (net 55 "Net-(P3-Pad3)") + (net 56 "Net-(P3-Pad4)") + (net 57 "Net-(P8-Pad1)") + (net 58 "Net-(P8-Pad2)") + (net 59 "Net-(R1-Pad1)") + (net 60 "Net-(R2-Pad1)") + (net 61 "Net-(R11-Pad2)") + (net 62 "Net-(R12-Pad2)") + (net 63 "Net-(R13-Pad2)") + (net 64 "Net-(R10-Pad1)") + (net 65 "Net-(R15-Pad1)") + (net 66 "Net-(R15-Pad2)") + (net 67 "Net-(R17-Pad1)") + (net 68 "Net-(R17-Pad2)") + (net 69 "Net-(R19-Pad1)") + (net 70 "Net-(R20-Pad1)") + (net 71 "Net-(R22-Pad1)") + (net 72 "Net-(R23-Pad1)") + + (net_class Default "This is the default net class." + (clearance 0.2) + (trace_width 0.25) + (via_dia 0.6) + (via_drill 0.4) + (uvia_dia 0.3) + (uvia_drill 0.1) + (add_net +5V) + (add_net /AGND) + (add_net /AVCC) + (add_net /AVCC_ON_2) + (add_net /CH1) + (add_net /CH2) + (add_net /D+) + (add_net /D-) + (add_net /DAC_OUT) + (add_net /DAC_OUT2) + (add_net /DIG_CH1) + (add_net /DIG_CH2) + (add_net /PSU_FEEDBACK) + (add_net /PSU_OUT) + (add_net /PSU_PWM) + (add_net /TO_B0) + (add_net /TO_B1) + (add_net /VCC_3V3) + (add_net /VCC_PSU) + (add_net /VGND) + (add_net /XCK) + (add_net "Net-(C1-Pad1)") + (add_net "Net-(C1-Pad2)") + (add_net "Net-(C13-Pad1)") + (add_net "Net-(C13-Pad2)") + (add_net "Net-(C14-Pad1)") + (add_net "Net-(C14-Pad2)") + (add_net "Net-(C2-Pad1)") + (add_net "Net-(C2-Pad2)") + (add_net "Net-(D1-Pad2)") + (add_net "Net-(IC1-Pad10)") + (add_net "Net-(IC1-Pad13)") + (add_net "Net-(IC1-Pad16)") + (add_net "Net-(IC1-Pad20)") + (add_net "Net-(IC1-Pad21)") + (add_net "Net-(IC1-Pad22)") + (add_net "Net-(IC1-Pad23)") + (add_net "Net-(IC1-Pad25)") + (add_net "Net-(IC1-Pad28)") + (add_net "Net-(IC1-Pad29)") + (add_net "Net-(IC1-Pad3)") + (add_net "Net-(IC1-Pad32)") + (add_net "Net-(IC1-Pad33)") + (add_net "Net-(IC1-Pad34)") + (add_net "Net-(IC1-Pad35)") + (add_net "Net-(IC1-Pad36)") + (add_net "Net-(IC1-Pad37)") + (add_net "Net-(IC1-Pad41)") + (add_net "Net-(IC1-Pad43)") + (add_net "Net-(IC1-Pad8)") + (add_net "Net-(IC1-Pad9)") + (add_net "Net-(P2-Pad4)") + (add_net "Net-(P3-Pad1)") + (add_net "Net-(P3-Pad2)") + (add_net "Net-(P3-Pad3)") + (add_net "Net-(P3-Pad4)") + (add_net "Net-(P8-Pad1)") + (add_net "Net-(P8-Pad2)") + (add_net "Net-(R1-Pad1)") + (add_net "Net-(R10-Pad1)") + (add_net "Net-(R11-Pad2)") + (add_net "Net-(R12-Pad2)") + (add_net "Net-(R13-Pad2)") + (add_net "Net-(R15-Pad1)") + (add_net "Net-(R15-Pad2)") + (add_net "Net-(R17-Pad1)") + (add_net "Net-(R17-Pad2)") + (add_net "Net-(R19-Pad1)") + (add_net "Net-(R2-Pad1)") + (add_net "Net-(R20-Pad1)") + (add_net "Net-(R22-Pad1)") + (add_net "Net-(R23-Pad1)") + ) + + (module Capacitors_SMD:C_0603 (layer F.Cu) (tedit 5415D631) (tstamp 56AEA51F) + (at 86.8045 130.4925) + (descr "Capacitor SMD 0603, reflow soldering, AVX (see smccp.pdf)") + (tags "capacitor 0603") + (path /55CAB611) + (attr smd) + (fp_text reference C1 (at 0 -1.9) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value C (at 0 1.9) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.45 -0.75) (end 1.45 -0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 -0.75) (end -1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.45 -0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.35 -0.6) (end 0.35 -0.6) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.35 0.6) (end -0.35 0.6) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 1 "Net-(C1-Pad1)")) + (pad 2 smd rect (at 0.75 0) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 2 "Net-(C1-Pad2)")) + (model Capacitors_SMD.3dshapes/C_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_SMD:C_0603 (layer F.Cu) (tedit 5415D631) (tstamp 56AEA525) + (at 86.8045 128.9685) + (descr "Capacitor SMD 0603, reflow soldering, AVX (see smccp.pdf)") + (tags "capacitor 0603") + (path /55CAB4DE) + (attr smd) + (fp_text reference C2 (at 0 -1.9) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value C (at 0 1.9) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.45 -0.75) (end 1.45 -0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 -0.75) (end -1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.45 -0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.35 -0.6) (end 0.35 -0.6) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.35 0.6) (end -0.35 0.6) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 3 "Net-(C2-Pad1)")) + (pad 2 smd rect (at 0.75 0) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 4 "Net-(C2-Pad2)")) + (model Capacitors_SMD.3dshapes/C_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_SMD:C_0603 (layer F.Cu) (tedit 5415D631) (tstamp 56AEA52B) + (at 92.5195 131.6355 270) + (descr "Capacitor SMD 0603, reflow soldering, AVX (see smccp.pdf)") + (tags "capacitor 0603") + (path /55CB13E1) + (attr smd) + (fp_text reference C3 (at 0 -1.9 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value C_Small (at 0 1.9 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.45 -0.75) (end 1.45 -0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 -0.75) (end -1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.45 -0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.35 -0.6) (end 0.35 -0.6) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.35 0.6) (end -0.35 0.6) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 270) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 5 +5V)) + (pad 2 smd rect (at 0.75 0 270) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 6 /AGND)) + (model Capacitors_SMD.3dshapes/C_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_SMD:C_0603 (layer F.Cu) (tedit 5415D631) (tstamp 56AEA531) + (at 94.869 135.0645 180) + (descr "Capacitor SMD 0603, reflow soldering, AVX (see smccp.pdf)") + (tags "capacitor 0603") + (path /55CB147C) + (attr smd) + (fp_text reference C4 (at 0 -1.9 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value C_Small (at 0 1.9 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.45 -0.75) (end 1.45 -0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 -0.75) (end -1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.45 -0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.35 -0.6) (end 0.35 -0.6) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.35 0.6) (end -0.35 0.6) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 180) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 7 /VCC_3V3)) + (pad 2 smd rect (at 0.75 0 180) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 6 /AGND)) + (model Capacitors_SMD.3dshapes/C_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_SMD:C_0603 (layer F.Cu) (tedit 5415D631) (tstamp 56AEA537) + (at 86.8045 138.43 180) + (descr "Capacitor SMD 0603, reflow soldering, AVX (see smccp.pdf)") + (tags "capacitor 0603") + (path /55D60181) + (attr smd) + (fp_text reference C5 (at 0 -1.9 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value C_Small (at 0 1.9 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.45 -0.75) (end 1.45 -0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 -0.75) (end -1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.45 -0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.35 -0.6) (end 0.35 -0.6) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.35 0.6) (end -0.35 0.6) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 180) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 8 /AVCC)) + (pad 2 smd rect (at 0.75 0 180) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 6 /AGND)) + (model Capacitors_SMD.3dshapes/C_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_ThroughHole:C_Radial_D5_L11_P2.5 (layer F.Cu) (tedit 0) (tstamp 56AEA53D) + (at 94.8055 147.5105 90) + (descr "Radial Electrolytic Capacitor Diameter 5mm x Length 11mm, Pitch 2.5mm") + (tags "Electrolytic Capacitor") + (path /566F5A75) + (fp_text reference C6 (at 1.25 -3.8 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value CP1 (at 1.25 3.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.325 -2.499) (end 1.325 2.499) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.465 -2.491) (end 1.465 2.491) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.605 -2.475) (end 1.605 -0.095) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.605 0.095) (end 1.605 2.475) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.745 -2.451) (end 1.745 -0.49) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.745 0.49) (end 1.745 2.451) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.885 -2.418) (end 1.885 -0.657) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.885 0.657) (end 1.885 2.418) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.025 -2.377) (end 2.025 -0.764) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.025 0.764) (end 2.025 2.377) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.165 -2.327) (end 2.165 -0.835) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.165 0.835) (end 2.165 2.327) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.305 -2.266) (end 2.305 -0.879) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.305 0.879) (end 2.305 2.266) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.445 -2.196) (end 2.445 -0.898) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.445 0.898) (end 2.445 2.196) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.585 -2.114) (end 2.585 -0.896) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.585 0.896) (end 2.585 2.114) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.725 -2.019) (end 2.725 -0.871) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.725 0.871) (end 2.725 2.019) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.865 -1.908) (end 2.865 -0.823) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.865 0.823) (end 2.865 1.908) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.005 -1.78) (end 3.005 -0.745) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.005 0.745) (end 3.005 1.78) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.145 -1.631) (end 3.145 -0.628) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.145 0.628) (end 3.145 1.631) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.285 -1.452) (end 3.285 -0.44) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.285 0.44) (end 3.285 1.452) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.425 -1.233) (end 3.425 1.233) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.565 -0.944) (end 3.565 0.944) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.705 -0.472) (end 3.705 0.472) (layer F.SilkS) (width 0.15)) + (fp_circle (center 2.5 0) (end 2.5 -0.9) (layer F.SilkS) (width 0.15)) + (fp_circle (center 1.25 0) (end 1.25 -2.5375) (layer F.SilkS) (width 0.15)) + (fp_circle (center 1.25 0) (end 1.25 -2.8) (layer F.CrtYd) (width 0.05)) + (pad 1 thru_hole rect (at 0 0 90) (size 1.3 1.3) (drill 0.8) (layers *.Cu *.Mask F.SilkS) + (net 7 /VCC_3V3)) + (pad 2 thru_hole circle (at 2.5 0 90) (size 1.3 1.3) (drill 0.8) (layers *.Cu *.Mask F.SilkS) + (net 6 /AGND)) + (model Capacitors_ThroughHole.3dshapes/C_Radial_D5_L11_P2.5.wrl + (at (xyz 0.049213 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 90)) + ) + ) + + (module Capacitors_SMD:C_0603 (layer F.Cu) (tedit 5415D631) (tstamp 56AEA549) + (at 78.613 151.003 180) + (descr "Capacitor SMD 0603, reflow soldering, AVX (see smccp.pdf)") + (tags "capacitor 0603") + (path /56AF91A3) + (attr smd) + (fp_text reference C8 (at 0 -1.9 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value C (at 0 1.9 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.45 -0.75) (end 1.45 -0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 -0.75) (end -1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.45 -0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.35 -0.6) (end 0.35 -0.6) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.35 0.6) (end -0.35 0.6) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 180) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 8 /AVCC)) + (pad 2 smd rect (at 0.75 0 180) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 6 /AGND)) + (model Capacitors_SMD.3dshapes/C_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_ThroughHole:C_Radial_D5_L11_P2.5 (layer F.Cu) (tedit 0) (tstamp 56AEA54F) + (at 93.2815 127.1905) + (descr "Radial Electrolytic Capacitor Diameter 5mm x Length 11mm, Pitch 2.5mm") + (tags "Electrolytic Capacitor") + (path /560719D9) + (fp_text reference C9 (at 1.25 -3.8) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value CP1 (at 1.25 3.8) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.325 -2.499) (end 1.325 2.499) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.465 -2.491) (end 1.465 2.491) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.605 -2.475) (end 1.605 -0.095) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.605 0.095) (end 1.605 2.475) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.745 -2.451) (end 1.745 -0.49) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.745 0.49) (end 1.745 2.451) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.885 -2.418) (end 1.885 -0.657) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.885 0.657) (end 1.885 2.418) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.025 -2.377) (end 2.025 -0.764) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.025 0.764) (end 2.025 2.377) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.165 -2.327) (end 2.165 -0.835) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.165 0.835) (end 2.165 2.327) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.305 -2.266) (end 2.305 -0.879) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.305 0.879) (end 2.305 2.266) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.445 -2.196) (end 2.445 -0.898) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.445 0.898) (end 2.445 2.196) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.585 -2.114) (end 2.585 -0.896) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.585 0.896) (end 2.585 2.114) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.725 -2.019) (end 2.725 -0.871) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.725 0.871) (end 2.725 2.019) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.865 -1.908) (end 2.865 -0.823) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.865 0.823) (end 2.865 1.908) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.005 -1.78) (end 3.005 -0.745) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.005 0.745) (end 3.005 1.78) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.145 -1.631) (end 3.145 -0.628) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.145 0.628) (end 3.145 1.631) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.285 -1.452) (end 3.285 -0.44) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.285 0.44) (end 3.285 1.452) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.425 -1.233) (end 3.425 1.233) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.565 -0.944) (end 3.565 0.944) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.705 -0.472) (end 3.705 0.472) (layer F.SilkS) (width 0.15)) + (fp_circle (center 2.5 0) (end 2.5 -0.9) (layer F.SilkS) (width 0.15)) + (fp_circle (center 1.25 0) (end 1.25 -2.5375) (layer F.SilkS) (width 0.15)) + (fp_circle (center 1.25 0) (end 1.25 -2.8) (layer F.CrtYd) (width 0.05)) + (pad 1 thru_hole rect (at 0 0) (size 1.3 1.3) (drill 0.8) (layers *.Cu *.Mask F.SilkS) + (net 9 /VCC_PSU)) + (pad 2 thru_hole circle (at 2.5 0) (size 1.3 1.3) (drill 0.8) (layers *.Cu *.Mask F.SilkS) + (net 10 /VGND)) + (model Capacitors_ThroughHole.3dshapes/C_Radial_D5_L11_P2.5.wrl + (at (xyz 0.049213 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 90)) + ) + ) + + (module Capacitors_SMD:C_0603 (layer F.Cu) (tedit 5415D631) (tstamp 56AEA555) + (at 83.5025 123.444 90) + (descr "Capacitor SMD 0603, reflow soldering, AVX (see smccp.pdf)") + (tags "capacitor 0603") + (path /56071A50) + (attr smd) + (fp_text reference C10 (at 0 -1.9 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value C (at 0 1.9 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.45 -0.75) (end 1.45 -0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 -0.75) (end -1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.45 -0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.35 -0.6) (end 0.35 -0.6) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.35 0.6) (end -0.35 0.6) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 90) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 9 /VCC_PSU)) + (pad 2 smd rect (at 0.75 0 90) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 10 /VGND)) + (model Capacitors_SMD.3dshapes/C_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_SMD:C_0603 (layer F.Cu) (tedit 5415D631) (tstamp 56AEA55B) + (at 71.374 145.542 90) + (descr "Capacitor SMD 0603, reflow soldering, AVX (see smccp.pdf)") + (tags "capacitor 0603") + (path /5608B4BE) + (attr smd) + (fp_text reference C11 (at 0 -1.9 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value C (at 0 1.9 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.45 -0.75) (end 1.45 -0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 -0.75) (end -1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.45 -0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.35 -0.6) (end 0.35 -0.6) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.35 0.6) (end -0.35 0.6) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 90) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 7 /VCC_3V3)) + (pad 2 smd rect (at 0.75 0 90) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 6 /AGND)) + (model Capacitors_SMD.3dshapes/C_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_SMD:C_0603 (layer F.Cu) (tedit 5415D631) (tstamp 56AEA561) + (at 95.504 122.9995 270) + (descr "Capacitor SMD 0603, reflow soldering, AVX (see smccp.pdf)") + (tags "capacitor 0603") + (path /55D75F49) + (attr smd) + (fp_text reference C12 (at 0 -1.9 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value C_Small (at 0 1.9 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.45 -0.75) (end 1.45 -0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 -0.75) (end -1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.45 -0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.35 -0.6) (end 0.35 -0.6) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.35 0.6) (end -0.35 0.6) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 270) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 5 +5V)) + (pad 2 smd rect (at 0.75 0 270) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 10 /VGND)) + (model Capacitors_SMD.3dshapes/C_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_SMD:C_0603 (layer F.Cu) (tedit 5415D631) (tstamp 56AEA567) + (at 68.707 132.588 90) + (descr "Capacitor SMD 0603, reflow soldering, AVX (see smccp.pdf)") + (tags "capacitor 0603") + (path /55CB630B) + (attr smd) + (fp_text reference C13 (at 0 -1.9 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value C (at 0 1.9 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.45 -0.75) (end 1.45 -0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 -0.75) (end -1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.45 -0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.35 -0.6) (end 0.35 -0.6) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.35 0.6) (end -0.35 0.6) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 90) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 11 "Net-(C13-Pad1)")) + (pad 2 smd rect (at 0.75 0 90) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 12 "Net-(C13-Pad2)")) + (model Capacitors_SMD.3dshapes/C_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_SMD:C_0603 (layer F.Cu) (tedit 5415D631) (tstamp 56AEA56D) + (at 68.707 135.509 90) + (descr "Capacitor SMD 0603, reflow soldering, AVX (see smccp.pdf)") + (tags "capacitor 0603") + (path /566DF655) + (attr smd) + (fp_text reference C14 (at 0 -1.9 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value C (at 0 1.9 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.45 -0.75) (end 1.45 -0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 -0.75) (end -1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.45 -0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.35 -0.6) (end 0.35 -0.6) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.35 0.6) (end -0.35 0.6) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 90) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 13 "Net-(C14-Pad1)")) + (pad 2 smd rect (at 0.75 0 90) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 14 "Net-(C14-Pad2)")) + (model Capacitors_SMD.3dshapes/C_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_ThroughHole:C_Radial_D6.3_L11.2_P2.5 (layer F.Cu) (tedit 0) (tstamp 56AEA573) + (at 73.8505 124.2695) + (descr "Radial Electrolytic Capacitor, Diameter 6.3mm x Length 11.2mm, Pitch 2.5mm") + (tags "Electrolytic Capacitor") + (path /560735FE) + (fp_text reference C15 (at 1.25 -4.4) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value CP1 (at 1.25 4.4) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.325 -3.149) (end 1.325 3.149) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.465 -3.143) (end 1.465 3.143) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.605 -3.13) (end 1.605 -0.446) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.605 0.446) (end 1.605 3.13) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.745 -3.111) (end 1.745 -0.656) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.745 0.656) (end 1.745 3.111) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.885 -3.085) (end 1.885 -0.789) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.885 0.789) (end 1.885 3.085) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.025 -3.053) (end 2.025 -0.88) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.025 0.88) (end 2.025 3.053) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.165 -3.014) (end 2.165 -0.942) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.165 0.942) (end 2.165 3.014) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.305 -2.968) (end 2.305 -0.981) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.305 0.981) (end 2.305 2.968) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.445 -2.915) (end 2.445 -0.998) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.445 0.998) (end 2.445 2.915) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.585 -2.853) (end 2.585 -0.996) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.585 0.996) (end 2.585 2.853) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.725 -2.783) (end 2.725 -0.974) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.725 0.974) (end 2.725 2.783) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.865 -2.704) (end 2.865 -0.931) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.865 0.931) (end 2.865 2.704) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.005 -2.616) (end 3.005 -0.863) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.005 0.863) (end 3.005 2.616) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.145 -2.516) (end 3.145 -0.764) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.145 0.764) (end 3.145 2.516) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.285 -2.404) (end 3.285 -0.619) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.285 0.619) (end 3.285 2.404) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.425 -2.279) (end 3.425 -0.38) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.425 0.38) (end 3.425 2.279) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.565 -2.136) (end 3.565 2.136) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.705 -1.974) (end 3.705 1.974) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.845 -1.786) (end 3.845 1.786) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.985 -1.563) (end 3.985 1.563) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.125 -1.287) (end 4.125 1.287) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.265 -0.912) (end 4.265 0.912) (layer F.SilkS) (width 0.15)) + (fp_circle (center 2.5 0) (end 2.5 -1) (layer F.SilkS) (width 0.15)) + (fp_circle (center 1.25 0) (end 1.25 -3.1875) (layer F.SilkS) (width 0.15)) + (fp_circle (center 1.25 0) (end 1.25 -3.4) (layer F.CrtYd) (width 0.05)) + (pad 2 thru_hole circle (at 2.5 0) (size 1.3 1.3) (drill 0.8) (layers *.Cu *.Mask F.SilkS) + (net 10 /VGND)) + (pad 1 thru_hole rect (at 0 0) (size 1.3 1.3) (drill 0.8) (layers *.Cu *.Mask F.SilkS) + (net 15 /PSU_OUT)) + (model Capacitors_ThroughHole.3dshapes/C_Radial_D6.3_L11.2_P2.5.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_SMD:C_0603 (layer F.Cu) (tedit 5415D631) (tstamp 56AEA579) + (at 71.4375 129.2225 90) + (descr "Capacitor SMD 0603, reflow soldering, AVX (see smccp.pdf)") + (tags "capacitor 0603") + (path /5607355F) + (attr smd) + (fp_text reference C16 (at 0 -1.9 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value C (at 0 1.9 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.45 -0.75) (end 1.45 -0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 -0.75) (end -1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.45 -0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.35 -0.6) (end 0.35 -0.6) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.35 0.6) (end -0.35 0.6) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 90) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 15 /PSU_OUT)) + (pad 2 smd rect (at 0.75 0 90) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 10 /VGND)) + (model Capacitors_SMD.3dshapes/C_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Diodes_ThroughHole:Diode_DO-41_SOD81_Horizontal_RM10 (layer F.Cu) (tedit 552FFCCE) (tstamp 56AEA57F) + (at 75.7555 119.4435 180) + (descr "Diode, DO-41, SOD81, Horizontal, RM 10mm,") + (tags "Diode, DO-41, SOD81, Horizontal, RM 10mm, 1N4007, SB140,") + (path /5606FDB4) + (fp_text reference D1 (at 5.38734 2.53746 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value D_Schottky (at 4.37134 -3.55854 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 7.62 -0.00254) (end 8.636 -0.00254) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.794 -0.00254) (end 1.524 -0.00254) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.048 -1.27254) (end 3.048 1.26746) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.302 -1.27254) (end 3.302 1.26746) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.556 -1.27254) (end 3.556 1.26746) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.794 -1.27254) (end 2.794 1.26746) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.81 -1.27254) (end 2.54 1.26746) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.54 -1.27254) (end 3.81 1.26746) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.81 -1.27254) (end 3.81 1.26746) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.175 -1.27254) (end 3.175 1.26746) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.54 1.26746) (end 2.54 -1.27254) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.54 -1.27254) (end 7.62 -1.27254) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.62 -1.27254) (end 7.62 1.26746) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.62 1.26746) (end 2.54 1.26746) (layer F.SilkS) (width 0.15)) + (pad 2 thru_hole circle (at 10.16 -0.00254) (size 1.99898 1.99898) (drill 1.27) (layers *.Cu *.Mask F.SilkS) + (net 16 "Net-(D1-Pad2)")) + (pad 1 thru_hole rect (at 0 -0.00254) (size 1.99898 1.99898) (drill 1.00076) (layers *.Cu *.Mask F.SilkS) + (net 15 /PSU_OUT)) + ) + + (module Capacitors_SMD:C_1206 (layer F.Cu) (tedit 5415D7BD) (tstamp 56AEA585) + (at 94.5515 137.9855 90) + (descr "Capacitor SMD 1206, reflow soldering, AVX (see smccp.pdf)") + (tags "capacitor 1206") + (path /55D739F3) + (attr smd) + (fp_text reference F1 (at 0 -2.3 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value F_Small (at 0 2.3 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -2.3 -1.15) (end 2.3 -1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.3 1.15) (end 2.3 1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.3 -1.15) (end -2.3 1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.3 -1.15) (end 2.3 1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1 -1.025) (end -1 -1.025) (layer F.SilkS) (width 0.15)) + (fp_line (start -1 1.025) (end 1 1.025) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -1.5 0 90) (size 1 1.6) (layers F.Cu F.Paste F.Mask) + (net 6 /AGND)) + (pad 2 smd rect (at 1.5 0 90) (size 1 1.6) (layers F.Cu F.Paste F.Mask) + (net 10 /VGND)) + (model Capacitors_SMD.3dshapes/C_1206.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Housings_QFP:LQFP-44_10x10mm_Pitch0.8mm (layer F.Cu) (tedit 54130A77) (tstamp 56AEA5B5) + (at 78.867 143.51 180) + (descr "LQFP44 (see Appnote_PCB_Guidelines_TRINAMIC_packages.pdf)") + (tags "QFP 0.8") + (path /55CA8F25) + (attr smd) + (fp_text reference IC1 (at 0 -7.65 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value ATXMEGA16A4U-A (at 0 7.65 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -6.9 -6.9) (end -6.9 6.9) (layer F.CrtYd) (width 0.05)) + (fp_line (start 6.9 -6.9) (end 6.9 6.9) (layer F.CrtYd) (width 0.05)) + (fp_line (start -6.9 -6.9) (end 6.9 -6.9) (layer F.CrtYd) (width 0.05)) + (fp_line (start -6.9 6.9) (end 6.9 6.9) (layer F.CrtYd) (width 0.05)) + (fp_line (start -5.175 -5.175) (end -5.175 -4.505) (layer F.SilkS) (width 0.15)) + (fp_line (start 5.175 -5.175) (end 5.175 -4.505) (layer F.SilkS) (width 0.15)) + (fp_line (start 5.175 5.175) (end 5.175 4.505) (layer F.SilkS) (width 0.15)) + (fp_line (start -5.175 5.175) (end -5.175 4.505) (layer F.SilkS) (width 0.15)) + (fp_line (start -5.175 -5.175) (end -4.505 -5.175) (layer F.SilkS) (width 0.15)) + (fp_line (start -5.175 5.175) (end -4.505 5.175) (layer F.SilkS) (width 0.15)) + (fp_line (start 5.175 5.175) (end 4.505 5.175) (layer F.SilkS) (width 0.15)) + (fp_line (start 5.175 -5.175) (end 4.505 -5.175) (layer F.SilkS) (width 0.15)) + (fp_line (start -5.175 -4.505) (end -6.65 -4.505) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -5.85 -4 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 17 /PSU_FEEDBACK)) + (pad 2 smd rect (at -5.85 -3.2 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 18 /CH2)) + (pad 3 smd rect (at -5.85 -2.4 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 19 "Net-(IC1-Pad3)")) + (pad 4 smd rect (at -5.85 -1.6 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 20 /TO_B0)) + (pad 5 smd rect (at -5.85 -0.8 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 21 /TO_B1)) + (pad 6 smd rect (at -5.85 0 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 22 /DAC_OUT)) + (pad 7 smd rect (at -5.85 0.8 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 23 /DAC_OUT2)) + (pad 8 smd rect (at -5.85 1.6 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 24 "Net-(IC1-Pad8)")) + (pad 9 smd rect (at -5.85 2.4 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 25 "Net-(IC1-Pad9)")) + (pad 10 smd rect (at -5.85 3.2 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 26 "Net-(IC1-Pad10)")) + (pad 11 smd rect (at -5.85 4 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 27 /XCK)) + (pad 12 smd rect (at -4 5.85 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 28 /DIG_CH2)) + (pad 13 smd rect (at -3.2 5.85 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 29 "Net-(IC1-Pad13)")) + (pad 14 smd rect (at -2.4 5.85 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 6 /AGND)) + (pad 15 smd rect (at -1.6 5.85 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 27 /XCK)) + (pad 16 smd rect (at -0.8 5.85 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 30 "Net-(IC1-Pad16)")) + (pad 17 smd rect (at 0 5.85 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 31 /DIG_CH1)) + (pad 18 smd rect (at 0.8 5.85 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 6 /AGND)) + (pad 19 smd rect (at 1.6 5.85 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 7 /VCC_3V3)) + (pad 20 smd rect (at 2.4 5.85 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 32 "Net-(IC1-Pad20)")) + (pad 21 smd rect (at 3.2 5.85 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 33 "Net-(IC1-Pad21)")) + (pad 22 smd rect (at 4 5.85 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 34 "Net-(IC1-Pad22)")) + (pad 23 smd rect (at 5.85 4 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 35 "Net-(IC1-Pad23)")) + (pad 24 smd rect (at 5.85 3.2 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 36 /PSU_PWM)) + (pad 25 smd rect (at 5.85 2.4 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 37 "Net-(IC1-Pad25)")) + (pad 26 smd rect (at 5.85 1.6 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 38 /D-)) + (pad 27 smd rect (at 5.85 0.8 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 39 /D+)) + (pad 28 smd rect (at 5.85 0 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 40 "Net-(IC1-Pad28)")) + (pad 29 smd rect (at 5.85 -0.8 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 41 "Net-(IC1-Pad29)")) + (pad 30 smd rect (at 5.85 -1.6 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 6 /AGND)) + (pad 31 smd rect (at 5.85 -2.4 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 7 /VCC_3V3)) + (pad 32 smd rect (at 5.85 -3.2 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 42 "Net-(IC1-Pad32)")) + (pad 33 smd rect (at 5.85 -4 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 43 "Net-(IC1-Pad33)")) + (pad 34 smd rect (at 4 -5.85 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 44 "Net-(IC1-Pad34)")) + (pad 35 smd rect (at 3.2 -5.85 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 45 "Net-(IC1-Pad35)")) + (pad 36 smd rect (at 2.4 -5.85 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 46 "Net-(IC1-Pad36)")) + (pad 37 smd rect (at 1.6 -5.85 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 47 "Net-(IC1-Pad37)")) + (pad 38 smd rect (at 0.8 -5.85 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 6 /AGND)) + (pad 39 smd rect (at 0 -5.85 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 8 /AVCC)) + (pad 40 smd rect (at -0.8 -5.85 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 18 /CH2)) + (pad 41 smd rect (at -1.6 -5.85 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 48 "Net-(IC1-Pad41)")) + (pad 42 smd rect (at -2.4 -5.85 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 49 /CH1)) + (pad 43 smd rect (at -3.2 -5.85 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 50 "Net-(IC1-Pad43)")) + (pad 44 smd rect (at -4 -5.85 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 51 /AVCC_ON_2)) + (model Housings_QFP.3dshapes/LQFP-44_10x10mm_Pitch0.8mm.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Inductors:INDUCTOR_V (layer F.Cu) (tedit 0) (tstamp 56AEA5BB) + (at 68.0085 125.222) + (descr "Inductor (vertical)") + (tags INDUCTOR) + (path /5606EE9E) + (fp_text reference L1 (at 0 1.99898) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value INDUCTOR (at 0.09906 -1.99898) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 3.81 0) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole rect (at -2.54 0) (size 1.905 1.905) (drill 0.8128) (layers *.Cu *.Mask F.SilkS) + (net 16 "Net-(D1-Pad2)")) + (pad 2 thru_hole circle (at 2.54 0) (size 1.905 1.905) (drill 0.8128) (layers *.Cu *.Mask F.SilkS) + (net 9 /VCC_PSU)) + (model Inductors.3dshapes/INDUCTOR_V.wrl + (at (xyz 0 0 0)) + (scale (xyz 2 2 2)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Pin_Headers:Pin_Header_Straight_1x04 (layer F.Cu) (tedit 0) (tstamp 56AEA5C3) + (at 90.043 126.3015) + (descr "Through hole pin header") + (tags "pin header") + (path /55CAB35C) + (fp_text reference P1 (at 0 -5.1) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value SCOPE_IN (at 0 -3.1) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.75 -1.75) (end -1.75 9.4) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.75 -1.75) (end 1.75 9.4) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 -1.75) (end 1.75 -1.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 9.4) (end 1.75 9.4) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.27 1.27) (end -1.27 8.89) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.27 1.27) (end 1.27 8.89) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.55 -1.55) (end 1.55 0) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.27 8.89) (end 1.27 8.89) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.27 1.27) (end -1.27 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.55 0) (end -1.55 -1.55) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.55 -1.55) (end 1.55 -1.55) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole rect (at 0 0) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 3 "Net-(C2-Pad1)")) + (pad 2 thru_hole oval (at 0 2.54) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 4 "Net-(C2-Pad2)")) + (pad 3 thru_hole oval (at 0 5.08) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 2 "Net-(C1-Pad2)")) + (pad 4 thru_hole oval (at 0 7.62) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 1 "Net-(C1-Pad1)")) + (model Pin_Headers.3dshapes/Pin_Header_Straight_1x04.wrl + (at (xyz 0 -0.15 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 90)) + ) + ) + + (module Connect:USB_Micro-B (layer F.Cu) (tedit 5543E447) (tstamp 56AEA5D0) + (at 90.1065 121.666 180) + (descr "Micro USB Type B Receptacle") + (tags "USB USB_B USB_micro USB_OTG") + (path /55CA90D2) + (attr smd) + (fp_text reference P2 (at 0 -3.45 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value USB_OTG (at 0 4.8 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -4.6 -2.8) (end 4.6 -2.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 4.6 -2.8) (end 4.6 4.05) (layer F.CrtYd) (width 0.05)) + (fp_line (start 4.6 4.05) (end -4.6 4.05) (layer F.CrtYd) (width 0.05)) + (fp_line (start -4.6 4.05) (end -4.6 -2.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -4.3509 3.81746) (end 4.3491 3.81746) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.3509 -2.58754) (end 4.3491 -2.58754) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.3491 -2.58754) (end 4.3491 3.81746) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.3491 2.58746) (end -4.3509 2.58746) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.3509 3.81746) (end -4.3509 -2.58754) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -1.3009 -1.56254 270) (size 1.35 0.4) (layers F.Cu F.Paste F.Mask) + (net 5 +5V)) + (pad 2 smd rect (at -0.6509 -1.56254 270) (size 1.35 0.4) (layers F.Cu F.Paste F.Mask) + (net 38 /D-)) + (pad 3 smd rect (at -0.0009 -1.56254 270) (size 1.35 0.4) (layers F.Cu F.Paste F.Mask) + (net 39 /D+)) + (pad 4 smd rect (at 0.6491 -1.56254 270) (size 1.35 0.4) (layers F.Cu F.Paste F.Mask) + (net 52 "Net-(P2-Pad4)")) + (pad 5 smd rect (at 1.2991 -1.56254 270) (size 1.35 0.4) (layers F.Cu F.Paste F.Mask) + (net 6 /AGND)) + (pad 6 thru_hole oval (at -2.5009 -1.56254 270) (size 0.95 1.25) (drill oval 0.55 0.85) (layers *.Cu *.Mask F.SilkS) + (net 6 /AGND)) + (pad 6 thru_hole oval (at 2.4991 -1.56254 270) (size 0.95 1.25) (drill oval 0.55 0.85) (layers *.Cu *.Mask F.SilkS) + (net 6 /AGND)) + (pad 6 thru_hole oval (at -3.5009 1.13746 270) (size 1.55 1) (drill oval 1.15 0.5) (layers *.Cu *.Mask F.SilkS) + (net 6 /AGND)) + (pad 6 thru_hole oval (at 3.4991 1.13746 270) (size 1.55 1) (drill oval 1.15 0.5) (layers *.Cu *.Mask F.SilkS) + (net 6 /AGND)) + ) + + (module Pin_Headers:Pin_Header_Straight_1x04 locked (layer F.Cu) (tedit 0) (tstamp 56AEA5D8) + (at 66.04 148.59 180) + (descr "Through hole pin header") + (tags "pin header") + (path /55CBF4D5) + (fp_text reference P3 (at 0 -5.1 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value DIG_OUT (at 0 -3.1 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.75 -1.75) (end -1.75 9.4) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.75 -1.75) (end 1.75 9.4) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 -1.75) (end 1.75 -1.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 9.4) (end 1.75 9.4) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.27 1.27) (end -1.27 8.89) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.27 1.27) (end 1.27 8.89) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.55 -1.55) (end 1.55 0) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.27 8.89) (end 1.27 8.89) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.27 1.27) (end -1.27 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.55 0) (end -1.55 -1.55) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.55 -1.55) (end 1.55 -1.55) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole rect (at 0 0 180) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 53 "Net-(P3-Pad1)")) + (pad 2 thru_hole oval (at 0 2.54 180) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 54 "Net-(P3-Pad2)")) + (pad 3 thru_hole oval (at 0 5.08 180) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 55 "Net-(P3-Pad3)")) + (pad 4 thru_hole oval (at 0 7.62 180) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 56 "Net-(P3-Pad4)")) + (model Pin_Headers.3dshapes/Pin_Header_Straight_1x04.wrl + (at (xyz 0 -0.15 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 90)) + ) + ) + + (module Pin_Headers:Pin_Header_Straight_2x02 (layer F.Cu) (tedit 0) (tstamp 56AEA5E0) + (at 90.1065 149.86 180) + (descr "Through hole pin header") + (tags "pin header") + (path /56069A87) + (fp_text reference P4 (at 0 -5.1 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value PDI (at 0 -3.1 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.75 -1.75) (end -1.75 4.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start 4.3 -1.75) (end 4.3 4.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 -1.75) (end 4.3 -1.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 4.3) (end 4.3 4.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.55 0) (end -1.55 -1.55) (layer F.SilkS) (width 0.15)) + (fp_line (start 0 -1.55) (end -1.55 -1.55) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.27 1.27) (end 1.27 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.27 1.27) (end 1.27 -1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.27 -1.27) (end 3.81 -1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.81 -1.27) (end 3.81 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.81 3.81) (end -1.27 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.27 3.81) (end -1.27 1.27) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole rect (at 0 0 180) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 7 /VCC_3V3)) + (pad 2 thru_hole oval (at 2.54 0 180) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 44 "Net-(IC1-Pad34)")) + (pad 3 thru_hole oval (at 0 2.54 180) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 6 /AGND)) + (pad 4 thru_hole oval (at 2.54 2.54 180) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 45 "Net-(IC1-Pad35)")) + (model Pin_Headers.3dshapes/Pin_Header_Straight_2x02.wrl + (at (xyz 0.05 -0.05 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 90)) + ) + ) + + (module Pin_Headers:Pin_Header_Straight_1x03 (layer F.Cu) (tedit 0) (tstamp 56AEA5E7) + (at 83.693 119.38 270) + (descr "Through hole pin header") + (tags "pin header") + (path /56065DA8) + (fp_text reference P5 (at 0 -5.1 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value CONN_01X03 (at 0 -3.1 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.75 -1.75) (end -1.75 6.85) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.75 -1.75) (end 1.75 6.85) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 -1.75) (end 1.75 -1.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 6.85) (end 1.75 6.85) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.27 1.27) (end -1.27 6.35) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.27 6.35) (end 1.27 6.35) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.27 6.35) (end 1.27 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.55 -1.55) (end 1.55 0) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.27 1.27) (end -1.27 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.55 0) (end -1.55 -1.55) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.55 -1.55) (end 1.55 -1.55) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole rect (at 0 0 270) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 5 +5V)) + (pad 2 thru_hole oval (at 0 2.54 270) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 9 /VCC_PSU)) + (pad 3 thru_hole oval (at 0 5.08 270) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 7 /VCC_3V3)) + (model Pin_Headers.3dshapes/Pin_Header_Straight_1x03.wrl + (at (xyz 0 -0.1 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 90)) + ) + ) + + (module Pin_Headers:Pin_Header_Straight_1x04 locked (layer F.Cu) (tedit 0) (tstamp 56AEA5EF) + (at 66.04 130.81) + (descr "Through hole pin header") + (tags "pin header") + (path /566DF832) + (fp_text reference P6 (at 0 -5.1) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value DAC_OUT (at 0 -3.1) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.75 -1.75) (end -1.75 9.4) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.75 -1.75) (end 1.75 9.4) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 -1.75) (end 1.75 -1.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 9.4) (end 1.75 9.4) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.27 1.27) (end -1.27 8.89) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.27 1.27) (end 1.27 8.89) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.55 -1.55) (end 1.55 0) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.27 8.89) (end 1.27 8.89) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.27 1.27) (end -1.27 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.55 0) (end -1.55 -1.55) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.55 -1.55) (end 1.55 -1.55) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole rect (at 0 0) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 12 "Net-(C13-Pad2)")) + (pad 2 thru_hole oval (at 0 2.54) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 11 "Net-(C13-Pad1)")) + (pad 3 thru_hole oval (at 0 5.08) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 14 "Net-(C14-Pad2)")) + (pad 4 thru_hole oval (at 0 7.62) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 13 "Net-(C14-Pad1)")) + (model Pin_Headers.3dshapes/Pin_Header_Straight_1x04.wrl + (at (xyz 0 -0.15 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 90)) + ) + ) + + (module Pin_Headers:Pin_Header_Straight_2x02 (layer F.Cu) (tedit 0) (tstamp 56AEA5F7) + (at 73.66 132.08 90) + (descr "Through hole pin header") + (tags "pin header") + (path /55CC540F) + (fp_text reference P7 (at 0 -5.1 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value HVO (at 0 -3.1 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.75 -1.75) (end -1.75 4.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start 4.3 -1.75) (end 4.3 4.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 -1.75) (end 4.3 -1.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 4.3) (end 4.3 4.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.55 0) (end -1.55 -1.55) (layer F.SilkS) (width 0.15)) + (fp_line (start 0 -1.55) (end -1.55 -1.55) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.27 1.27) (end 1.27 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.27 1.27) (end 1.27 -1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.27 -1.27) (end 3.81 -1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.81 -1.27) (end 3.81 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.81 3.81) (end -1.27 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.27 3.81) (end -1.27 1.27) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole rect (at 0 0 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 15 /PSU_OUT)) + (pad 2 thru_hole oval (at 2.54 0 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 10 /VGND)) + (pad 3 thru_hole oval (at 0 2.54 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 10 /VGND)) + (pad 4 thru_hole oval (at 2.54 2.54 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 10 /VGND)) + (model Pin_Headers.3dshapes/Pin_Header_Straight_2x02.wrl + (at (xyz 0.05 -0.05 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 90)) + ) + ) + + (module Pin_Headers:Pin_Header_Straight_1x02 (layer F.Cu) (tedit 54EA090C) (tstamp 56AEA5FD) + (at 91.2495 142.113 180) + (descr "Through hole pin header") + (tags "pin header") + (path /55D6DB77) + (fp_text reference P8 (at 0 -5.1 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value DIG_IN (at 0 -3.1 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.27 1.27) (end 1.27 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.55 -1.55) (end 1.55 0) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.75 -1.75) (end -1.75 4.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.75 -1.75) (end 1.75 4.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 -1.75) (end 1.75 -1.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 4.3) (end 1.75 4.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.27 1.27) (end -1.27 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.55 0) (end -1.55 -1.55) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.55 -1.55) (end 1.55 -1.55) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.27 1.27) (end -1.27 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.27 3.81) (end 1.27 3.81) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole rect (at 0 0 180) (size 2.032 2.032) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 57 "Net-(P8-Pad1)")) + (pad 2 thru_hole oval (at 0 2.54 180) (size 2.032 2.032) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 58 "Net-(P8-Pad2)")) + (model Pin_Headers.3dshapes/Pin_Header_Straight_1x02.wrl + (at (xyz 0 -0.05 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 90)) + ) + ) + + (module SMD:SOT-23-3 (layer F.Cu) (tedit 5508E933) (tstamp 56AEA604) + (at 80.645 123.444 270) + (path /5606F6D4) + (fp_text reference Q1 (at 2.5 0 360) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value Q_NMOS_GSD (at -2.2 0 360) (layer F.Fab) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 1 -0.4) (end 1.1 -0.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -0.8) (end -1.5 0.8) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 0.8) (end 1.5 0.8) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 0.8) (end 1.5 -0.8) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 -0.8) (end -1.5 -0.8) (layer F.SilkS) (width 0.15)) + (pad 3 smd rect (at 0 1.4 270) (size 0.6 0.9) (layers F.Cu F.Paste F.Mask) + (net 16 "Net-(D1-Pad2)")) + (pad 2 smd rect (at -0.95 -1.4 270) (size 0.6 0.9) (layers F.Cu F.Paste F.Mask) + (net 10 /VGND)) + (pad 1 smd rect (at 0.95 -1.4 270) (size 0.6 0.9) (layers F.Cu F.Paste F.Mask) + (net 36 /PSU_PWM)) + (model 3D/SMD/SOT-23-3.wrl + (at (xyz 0 0 0)) + (scale (xyz 0.3937 0.3937 0.3937)) + (rotate (xyz 0 0 90)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 5415CC62) (tstamp 56AEA60A) + (at 86.6775 132.08) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /55CAAB95) + (attr smd) + (fp_text reference R1 (at 0 -1.9) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 59 "Net-(R1-Pad1)")) + (pad 2 smd rect (at 0.75 0) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 1 "Net-(C1-Pad1)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 5415CC62) (tstamp 56AEA610) + (at 86.6775 127.381) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /55CAAD4C) + (attr smd) + (fp_text reference R2 (at 0 -1.9) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 60 "Net-(R2-Pad1)")) + (pad 2 smd rect (at 0.75 0) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 3 "Net-(C2-Pad1)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 5415CC62) (tstamp 56AEA616) + (at 86.6775 133.731) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /55CAABF4) + (attr smd) + (fp_text reference R3 (at 0 -1.9) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 59 "Net-(R1-Pad1)")) + (pad 2 smd rect (at 0.75 0) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 51 /AVCC_ON_2)) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 5415CC62) (tstamp 56AEA61C) + (at 86.6775 125.7935 180) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /55CAAD11) + (attr smd) + (fp_text reference R4 (at 0 -1.9 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 180) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 51 /AVCC_ON_2)) + (pad 2 smd rect (at 0.75 0 180) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 60 "Net-(R2-Pad1)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 5415CC62) (tstamp 56AEA622) + (at 86.6775 135.3185) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /55CAAC5F) + (attr smd) + (fp_text reference R5 (at 0 -1.9) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 8 /AVCC)) + (pad 2 smd rect (at 0.75 0) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 51 /AVCC_ON_2)) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 5415CC62) (tstamp 56AEA628) + (at 86.6775 136.906) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /55CAACD2) + (attr smd) + (fp_text reference R6 (at 0 -1.9) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 6 /AGND)) + (pad 2 smd rect (at 0.75 0) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 51 /AVCC_ON_2)) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 5415CC62) (tstamp 56AEA62E) + (at 67.9704 141.2868 90) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /55CBCDA5) + (attr smd) + (fp_text reference R7 (at 0 -1.9 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 90) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 61 "Net-(R11-Pad2)")) + (pad 2 smd rect (at 0.75 0 90) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 56 "Net-(P3-Pad4)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 5415CC62) (tstamp 56AEA634) + (at 68.453 143.891 90) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /55CBE401) + (attr smd) + (fp_text reference R8 (at 0 -1.9 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 90) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 62 "Net-(R12-Pad2)")) + (pad 2 smd rect (at 0.75 0 90) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 55 "Net-(P3-Pad3)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 5415CC62) (tstamp 56AEA63A) + (at 68.453 146.4945 90) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /55CBE16B) + (attr smd) + (fp_text reference R9 (at 0 -1.9 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 90) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 63 "Net-(R13-Pad2)")) + (pad 2 smd rect (at 0.75 0 90) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 54 "Net-(P3-Pad2)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 5415CC62) (tstamp 56AEA640) + (at 68.6435 149.098 90) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /55CBE2C7) + (attr smd) + (fp_text reference R10 (at 0 -1.9 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 90) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 64 "Net-(R10-Pad1)")) + (pad 2 smd rect (at 0.75 0 90) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 53 "Net-(P3-Pad1)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 5415CC62) (tstamp 56AEA646) + (at 69.7484 141.2868 270) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /55CBCD2A) + (attr smd) + (fp_text reference R11 (at 0 -1.9 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 270) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 40 "Net-(IC1-Pad28)")) + (pad 2 smd rect (at 0.75 0 270) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 61 "Net-(R11-Pad2)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 5415CC62) (tstamp 56AEA64C) + (at 70.0405 143.891 270) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /55CBE362) + (attr smd) + (fp_text reference R12 (at 0 -1.9 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 270) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 41 "Net-(IC1-Pad29)")) + (pad 2 smd rect (at 0.75 0 270) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 62 "Net-(R12-Pad2)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 5415CC62) (tstamp 56AEA652) + (at 69.7865 146.4945 270) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /55CBE0F4) + (attr smd) + (fp_text reference R13 (at 0 -1.9 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 270) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 42 "Net-(IC1-Pad32)")) + (pad 2 smd rect (at 0.75 0 270) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 63 "Net-(R13-Pad2)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 5415CC62) (tstamp 56AEA658) + (at 70.231 149.098 270) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /55CBE21C) + (attr smd) + (fp_text reference R14 (at 0 -1.9 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 270) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 43 "Net-(IC1-Pad33)")) + (pad 2 smd rect (at 0.75 0 270) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 64 "Net-(R10-Pad1)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 5415CC62) (tstamp 56AEA65E) + (at 68.707 138.303 270) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /56B0C779) + (attr smd) + (fp_text reference R15 (at 0 -1.9 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 270) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 65 "Net-(R15-Pad1)")) + (pad 2 smd rect (at 0.75 0 270) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 66 "Net-(R15-Pad2)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 5415CC62) (tstamp 56AEA664) + (at 70.866 138.938 180) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /56B0C86E) + (attr smd) + (fp_text reference R16 (at 0 -1.9 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 180) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 65 "Net-(R15-Pad1)")) + (pad 2 smd rect (at 0.75 0 180) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 66 "Net-(R15-Pad2)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 5415CC62) (tstamp 56AEA66A) + (at 75.057 135.128 90) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /56AFE83E) + (attr smd) + (fp_text reference R17 (at 0 -1.9 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 90) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 67 "Net-(R17-Pad1)")) + (pad 2 smd rect (at 0.75 0 90) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 68 "Net-(R17-Pad2)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 5415CC62) (tstamp 56AEA670) + (at 76.708 135.128 90) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /56AFE8F3) + (attr smd) + (fp_text reference R18 (at 0 -1.9 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 90) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 67 "Net-(R17-Pad1)")) + (pad 2 smd rect (at 0.75 0 90) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 68 "Net-(R17-Pad2)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 5415CC62) (tstamp 56AEA676) + (at 73.406 135.128 270) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /56AECD86) + (attr smd) + (fp_text reference R19 (at 0 -1.9 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 270) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 69 "Net-(R19-Pad1)")) + (pad 2 smd rect (at 0.75 0 270) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 67 "Net-(R17-Pad1)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 5415CC62) (tstamp 56AEA67C) + (at 72.9615 137.795 90) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /56B0C682) + (attr smd) + (fp_text reference R20 (at 0 -1.9 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 90) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 70 "Net-(R20-Pad1)")) + (pad 2 smd rect (at 0.75 0 90) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 65 "Net-(R15-Pad1)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 5415CC62) (tstamp 56AEA682) + (at 81.3435 151.0665 180) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /56AF0DE2) + (attr smd) + (fp_text reference R21 (at 0 -1.9 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 180) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 7 /VCC_3V3)) + (pad 2 smd rect (at 0.75 0 180) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 8 /AVCC)) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 5415CC62) (tstamp 56AEA688) + (at 70.358 132.461 270) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /55CB4680) + (attr smd) + (fp_text reference R22 (at 0 -1.9 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 270) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 71 "Net-(R22-Pad1)")) + (pad 2 smd rect (at 0.75 0 270) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 69 "Net-(R19-Pad1)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 5415CC62) (tstamp 56AEA68E) + (at 70.866 137.287) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /566DE721) + (attr smd) + (fp_text reference R23 (at 0 -1.9) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 72 "Net-(R23-Pad1)")) + (pad 2 smd rect (at 0.75 0) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 70 "Net-(R20-Pad1)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 5415CC62) (tstamp 56AEA694) + (at 69.469 130.302) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /55CB9020) + (attr smd) + (fp_text reference R24 (at 0 -1.9) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 12 "Net-(C13-Pad2)")) + (pad 2 smd rect (at 0.75 0) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 71 "Net-(R22-Pad1)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 5415CC62) (tstamp 56AEA69A) + (at 70.358 135.128 270) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /566DE7E8) + (attr smd) + (fp_text reference R25 (at 0 -1.9 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 270) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 14 "Net-(C14-Pad2)")) + (pad 2 smd rect (at 0.75 0 270) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 72 "Net-(R23-Pad1)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 5415CC62) (tstamp 56AEA6A0) + (at 88.138 143.129 180) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /566E5C29) + (attr smd) + (fp_text reference R26 (at 0 -1.9 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 180) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 15 /PSU_OUT)) + (pad 2 smd rect (at 0.75 0 180) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 17 /PSU_FEEDBACK)) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 5415CC62) (tstamp 56AEA6A6) + (at 88.138 144.7165) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /566E5CBE) + (attr smd) + (fp_text reference R27 (at 0 -1.9) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 17 /PSU_FEEDBACK)) + (pad 2 smd rect (at 0.75 0) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 6 /AGND)) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module SMD:SOT-23-3 (layer F.Cu) (tedit 5508E933) (tstamp 56AEA6AD) + (at 94.869 132.2705 180) + (path /55CA99FA) + (fp_text reference U1 (at 2.5 0 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 78L05 (at -2.2 0 270) (layer F.Fab) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 1 -0.4) (end 1.1 -0.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -0.8) (end -1.5 0.8) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 0.8) (end 1.5 0.8) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 0.8) (end 1.5 -0.8) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 -0.8) (end -1.5 -0.8) (layer F.SilkS) (width 0.15)) + (pad 3 smd rect (at 0 1.4 180) (size 0.6 0.9) (layers F.Cu F.Paste F.Mask) + (net 5 +5V)) + (pad 2 smd rect (at -0.95 -1.4 180) (size 0.6 0.9) (layers F.Cu F.Paste F.Mask) + (net 7 /VCC_3V3)) + (pad 1 smd rect (at 0.95 -1.4 180) (size 0.6 0.9) (layers F.Cu F.Paste F.Mask) + (net 6 /AGND)) + (model 3D/SMD/SOT-23-3.wrl + (at (xyz 0 0 0)) + (scale (xyz 0.3937 0.3937 0.3937)) + (rotate (xyz 0 0 90)) + ) + ) + + (module Housings_SOIC:SOIC-14_3.9x8.7mm_Pitch1.27mm (layer F.Cu) (tedit 54130A77) (tstamp 56AEA6BF) + (at 81.661 130.81 180) + (descr "14-Lead Plastic Small Outline (SL) - Narrow, 3.90 mm Body [SOIC] (see Microchip Packaging Specification 00000049BS.pdf)") + (tags "SOIC 1.27") + (path /55CA87E2) + (attr smd) + (fp_text reference U2 (at 0 -5.375 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value LM324 (at 0 5.375 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -3.7 -4.65) (end -3.7 4.65) (layer F.CrtYd) (width 0.05)) + (fp_line (start 3.7 -4.65) (end 3.7 4.65) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.7 -4.65) (end 3.7 -4.65) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.7 4.65) (end 3.7 4.65) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.075 -4.45) (end -2.075 -4.335) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.075 -4.45) (end 2.075 -4.335) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.075 4.45) (end 2.075 4.335) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.075 4.45) (end -2.075 4.335) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.075 -4.45) (end 2.075 -4.45) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.075 4.45) (end 2.075 4.45) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.075 -4.335) (end -3.45 -4.335) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -2.7 -3.81 180) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 49 /CH1)) + (pad 2 smd rect (at -2.7 -2.54 180) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 49 /CH1)) + (pad 3 smd rect (at -2.7 -1.27 180) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 59 "Net-(R1-Pad1)")) + (pad 4 smd rect (at -2.7 0 180) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 15 /PSU_OUT)) + (pad 5 smd rect (at -2.7 1.27 180) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 60 "Net-(R2-Pad1)")) + (pad 6 smd rect (at -2.7 2.54 180) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 18 /CH2)) + (pad 7 smd rect (at -2.7 3.81 180) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 18 /CH2)) + (pad 8 smd rect (at 2.7 3.81 180) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 70 "Net-(R20-Pad1)")) + (pad 9 smd rect (at 2.7 2.54 180) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 65 "Net-(R15-Pad1)")) + (pad 10 smd rect (at 2.7 1.27 180) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 23 /DAC_OUT2)) + (pad 11 smd rect (at 2.7 0 180) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 10 /VGND)) + (pad 12 smd rect (at 2.7 -1.27 180) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 22 /DAC_OUT)) + (pad 13 smd rect (at 2.7 -2.54 180) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 67 "Net-(R17-Pad1)")) + (pad 14 smd rect (at 2.7 -3.81 180) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 69 "Net-(R19-Pad1)")) + (model Housings_SOIC.3dshapes/SOIC-14_3.9x8.7mm_Pitch1.27mm.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module TO_SOT_Packages_SMD:SOT-363 (layer F.Cu) (tedit 56735562) (tstamp 56AEA6C9) + (at 87.884 140.5128 180) + (descr SOT353) + (path /56B012DD) + (attr smd) + (fp_text reference U3 (at 0.09906 0 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value DMN63D8LDW (at 0.09906 0 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 0.635 1.016) (end 0.635 -1.016) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.635 -1.016) (end -0.635 -1.016) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.635 -1.016) (end -0.635 1.016) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.635 1.016) (end 0.635 1.016) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -1.016 -0.635 180) (size 0.508 0.3048) (layers F.Cu F.Paste F.Mask) + (net 6 /AGND)) + (pad 3 smd rect (at -1.016 0.635 180) (size 0.508 0.3048) (layers F.Cu F.Paste F.Mask) + (net 68 "Net-(R17-Pad2)")) + (pad 6 smd rect (at 1.016 -0.635 180) (size 0.508 0.3048) (layers F.Cu F.Paste F.Mask) + (net 66 "Net-(R15-Pad2)")) + (pad 2 smd rect (at -1.016 0 180) (size 0.508 0.3048) (layers F.Cu F.Paste F.Mask) + (net 20 /TO_B0)) + (pad 4 smd rect (at 1.016 0.635 180) (size 0.508 0.3048) (layers F.Cu F.Paste F.Mask) + (net 6 /AGND)) + (pad 5 smd rect (at 1.016 0 180) (size 0.508 0.3048) (layers F.Cu F.Paste F.Mask) + (net 21 /TO_B1)) + (model TO_SOT_Packages_SMD.3dshapes/SOT-353.wrl + (at (xyz 0 0 0)) + (scale (xyz 0.07000000000000001 0.09 0.08)) + (rotate (xyz 0 0 90)) + ) + ) + + (module TO_SOT_Packages_SMD:SOT-363 (layer F.Cu) (tedit 56735562) (tstamp 56AEA6D3) + (at 90.297 136.779 180) + (descr SOT353) + (path /55D6ACFD) + (attr smd) + (fp_text reference U4 (at 0.09906 0 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value DMN63D8LDW (at 0.09906 0 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 0.635 1.016) (end 0.635 -1.016) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.635 -1.016) (end -0.635 -1.016) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.635 -1.016) (end -0.635 1.016) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.635 1.016) (end 0.635 1.016) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -1.016 -0.635 180) (size 0.508 0.3048) (layers F.Cu F.Paste F.Mask) + (net 6 /AGND)) + (pad 3 smd rect (at -1.016 0.635 180) (size 0.508 0.3048) (layers F.Cu F.Paste F.Mask) + (net 28 /DIG_CH2)) + (pad 6 smd rect (at 1.016 -0.635 180) (size 0.508 0.3048) (layers F.Cu F.Paste F.Mask) + (net 31 /DIG_CH1)) + (pad 2 smd rect (at -1.016 0 180) (size 0.508 0.3048) (layers F.Cu F.Paste F.Mask) + (net 58 "Net-(P8-Pad2)")) + (pad 4 smd rect (at 1.016 0.635 180) (size 0.508 0.3048) (layers F.Cu F.Paste F.Mask) + (net 6 /AGND)) + (pad 5 smd rect (at 1.016 0 180) (size 0.508 0.3048) (layers F.Cu F.Paste F.Mask) + (net 57 "Net-(P8-Pad1)")) + (model TO_SOT_Packages_SMD.3dshapes/SOT-353.wrl + (at (xyz 0 0 0)) + (scale (xyz 0.07000000000000001 0.09 0.08)) + (rotate (xyz 0 0 90)) + ) + ) + + (gr_line (start 97.409 152.0444) (end 97.409 117.5766) (angle 90) (layer Edge.Cuts) (width 0.1)) + (gr_line (start 97.409 117.602) (end 96.5962 117.602) (angle 90) (layer Edge.Cuts) (width 0.1)) + (gr_line (start 97.409 152.2222) (end 97.409 151.9936) (angle 90) (layer Edge.Cuts) (width 0.1)) + (gr_line (start 96.5962 152.2222) (end 97.409 152.2222) (angle 90) (layer Edge.Cuts) (width 0.1)) + (gr_line (start 64.2366 152.2222) (end 96.6216 152.2222) (angle 90) (layer Edge.Cuts) (width 0.1)) + (gr_line (start 96.6216 117.602) (end 64.2112 117.602) (angle 90) (layer Edge.Cuts) (width 0.1)) + (gr_line (start 64.2112 117.6274) (end 64.2366 117.6274) (angle 90) (layer Edge.Cuts) (width 0.1)) + (gr_line (start 64.2112 152.2222) (end 64.2112 117.6274) (angle 90) (layer Edge.Cuts) (width 0.1)) + (gr_line (start 64.2874 152.2222) (end 64.2366 152.2222) (angle 90) (layer Edge.Cuts) (width 0.1)) + (gr_line (start 64.2874 152.2222) (end 64.3128 152.2222) (angle 90) (layer Edge.Cuts) (width 0.1)) + + (segment (start 90.043 133.9215) (end 90.043 133.7945) (width 0.25) (layer F.Cu) (net 1)) + (segment (start 90.043 133.7945) (end 88.3285 132.08) (width 0.25) (layer F.Cu) (net 1) (tstamp 56AEB8C0)) + (segment (start 88.3285 132.08) (end 87.4275 132.08) (width 0.25) (layer F.Cu) (net 1) (tstamp 56AEB8C1)) + (segment (start 86.0545 130.4925) (end 86.0545 130.822) (width 0.25) (layer F.Cu) (net 1)) + (segment (start 86.0545 130.822) (end 86.6775 131.445) (width 0.25) (layer F.Cu) (net 1) (tstamp 56AEB850)) + (segment (start 86.6775 131.445) (end 86.7925 131.445) (width 0.25) (layer F.Cu) (net 1) (tstamp 56AEB851)) + (segment (start 86.7925 131.445) (end 87.4275 132.08) (width 0.25) (layer F.Cu) (net 1) (tstamp 56AEB852)) + (segment (start 90.043 131.3815) (end 89.5985 131.3815) (width 0.25) (layer F.Cu) (net 2)) + (segment (start 89.5985 131.3815) (end 88.7095 130.4925) (width 0.25) (layer F.Cu) (net 2) (tstamp 56AEB8BC)) + (segment (start 88.7095 130.4925) (end 87.5545 130.4925) (width 0.25) (layer F.Cu) (net 2) (tstamp 56AEB8BD)) + (segment (start 87.4275 127.381) (end 87.6935 127.381) (width 0.25) (layer F.Cu) (net 3)) + (segment (start 88.773 126.3015) (end 90.043 126.3015) (width 0.25) (layer F.Cu) (net 3) (tstamp 56AEB8B5)) + (segment (start 87.6935 127.381) (end 88.773 126.3015) (width 0.25) (layer F.Cu) (net 3) (tstamp 56AEB8B4)) + (segment (start 86.0545 128.9685) (end 86.0545 128.8295) (width 0.25) (layer F.Cu) (net 3)) + (segment (start 86.0545 128.8295) (end 86.741 128.143) (width 0.25) (layer F.Cu) (net 3) (tstamp 56AEB84A)) + (segment (start 86.741 128.143) (end 86.741 127.5715) (width 0.25) (layer F.Cu) (net 3) (tstamp 56AEB84B)) + (segment (start 86.741 127.5715) (end 86.9315 127.381) (width 0.25) (layer F.Cu) (net 3) (tstamp 56AEB84C)) + (segment (start 86.9315 127.381) (end 87.4275 127.381) (width 0.25) (layer F.Cu) (net 3) (tstamp 56AEB84D)) + (segment (start 90.043 128.8415) (end 87.6815 128.8415) (width 0.25) (layer F.Cu) (net 4)) + (segment (start 87.6815 128.8415) (end 87.5545 128.9685) (width 0.25) (layer F.Cu) (net 4) (tstamp 56AEB8B9)) + (segment (start 94.869 130.8705) (end 94.869 129.7305) (width 0.25) (layer F.Cu) (net 5)) + (segment (start 94.615 122.4915) (end 94.373 122.2495) (width 0.25) (layer F.Cu) (net 5) (tstamp 56AED403)) + (segment (start 94.615 129.4765) (end 94.615 122.4915) (width 0.25) (layer F.Cu) (net 5) (tstamp 56AED402)) + (segment (start 94.869 129.7305) (end 94.615 129.4765) (width 0.25) (layer F.Cu) (net 5) (tstamp 56AED401)) + (segment (start 92.5195 130.8855) (end 94.854 130.8855) (width 0.25) (layer F.Cu) (net 5)) + (segment (start 94.854 130.8855) (end 94.869 130.8705) (width 0.25) (layer F.Cu) (net 5) (tstamp 56AED3F0)) + (segment (start 83.693 119.38) (end 89.8525 119.38) (width 0.25) (layer F.Cu) (net 5)) + (segment (start 91.5035 122.1105) (end 91.4074 122.1105) (width 0.25) (layer F.Cu) (net 5) (tstamp 56AED38E)) + (segment (start 91.5035 121.031) (end 91.5035 122.1105) (width 0.25) (layer F.Cu) (net 5) (tstamp 56AED38B)) + (segment (start 89.8525 119.38) (end 91.5035 121.031) (width 0.25) (layer F.Cu) (net 5) (tstamp 56AED38A)) + (segment (start 91.4074 123.22854) (end 91.4074 122.1105) (width 0.25) (layer F.Cu) (net 5)) + (segment (start 91.4074 122.1105) (end 91.4074 122.0161) (width 0.25) (layer F.Cu) (net 5) (tstamp 56AED38F)) + (segment (start 93.9285 122.2495) (end 94.373 122.2495) (width 0.25) (layer F.Cu) (net 5) (tstamp 56AED375)) + (segment (start 93.599 121.92) (end 93.9285 122.2495) (width 0.25) (layer F.Cu) (net 5) (tstamp 56AED374)) + (segment (start 91.5035 121.92) (end 93.599 121.92) (width 0.25) (layer F.Cu) (net 5) (tstamp 56AED373)) + (segment (start 91.4074 122.0161) (end 91.5035 121.92) (width 0.25) (layer F.Cu) (net 5) (tstamp 56AED372)) + (segment (start 94.373 122.2495) (end 95.504 122.2495) (width 0.25) (layer F.Cu) (net 5) (tstamp 56AED406)) + (segment (start 83.693 119.38) (end 84.5185 119.38) (width 0.25) (layer F.Cu) (net 5)) + (segment (start 86.0545 138.43) (end 86.0545 137.033) (width 0.508) (layer F.Cu) (net 6)) + (segment (start 86.0545 137.033) (end 85.9275 136.906) (width 0.508) (layer F.Cu) (net 6) (tstamp 56AF2430)) + (segment (start 89.0524 138.4808) (end 89.0524 138.176) (width 0.508) (layer B.Cu) (net 6)) + (segment (start 89.9668 137.2616) (end 89.9668 136.9187) (width 0.508) (layer B.Cu) (net 6) (tstamp 56AF2428)) + (segment (start 89.0524 138.176) (end 89.9668 137.2616) (width 0.508) (layer B.Cu) (net 6) (tstamp 56AF2427)) + (segment (start 89.9668 136.9187) (end 90.551 136.3345) (width 0.508) (layer B.Cu) (net 6) (tstamp 56AF2429)) + (segment (start 92.583 136.4615) (end 90.678 136.4615) (width 0.508) (layer B.Cu) (net 6)) + (segment (start 90.678 136.4615) (end 90.551 136.3345) (width 0.508) (layer B.Cu) (net 6) (tstamp 56AF2422)) + (segment (start 94.119 135.0645) (end 93.1545 135.0645) (width 0.508) (layer F.Cu) (net 6)) + (segment (start 93.1545 135.0645) (end 93.0275 135.1915) (width 0.508) (layer F.Cu) (net 6) (tstamp 56AF241C)) + (segment (start 93.0275 135.1915) (end 93.0275 136.017) (width 0.508) (layer F.Cu) (net 6) (tstamp 56AF241D)) + (segment (start 93.0275 136.017) (end 92.583 136.4615) (width 0.508) (layer F.Cu) (net 6) (tstamp 56AF241E)) + (segment (start 94.8055 145.0105) (end 94.8055 139.7395) (width 0.508) (layer F.Cu) (net 6)) + (segment (start 94.8055 139.7395) (end 94.5515 139.4855) (width 0.508) (layer F.Cu) (net 6) (tstamp 56AF2411)) + (segment (start 73.017 145.11) (end 73.863 145.11) (width 0.25) (layer F.Cu) (net 6)) + (segment (start 78.067 147.7138) (end 78.067 149.36) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AF1D98)) + (segment (start 78.0542 147.701) (end 78.067 147.7138) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AF1D97)) + (via (at 78.0542 147.701) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 6)) + (segment (start 77.8002 147.447) (end 78.0542 147.701) (width 0.25) (layer B.Cu) (net 6) (tstamp 56AF1D95)) + (segment (start 77.8002 145.7706) (end 77.8002 147.447) (width 0.25) (layer B.Cu) (net 6) (tstamp 56AF1D94)) + (segment (start 77.3176 145.288) (end 77.8002 145.7706) (width 0.25) (layer B.Cu) (net 6) (tstamp 56AF1D93)) + (segment (start 77.2922 145.288) (end 77.3176 145.288) (width 0.25) (layer B.Cu) (net 6) (tstamp 56AF1D92)) + (segment (start 77.1652 145.415) (end 77.2922 145.288) (width 0.25) (layer B.Cu) (net 6) (tstamp 56AF1D91)) + (via (at 77.1652 145.415) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 6)) + (segment (start 76.9874 145.5928) (end 77.1652 145.415) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AF1D8E)) + (segment (start 74.3458 145.5928) (end 76.9874 145.5928) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AF1D8C)) + (segment (start 73.863 145.11) (end 74.3458 145.5928) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AF1D8B)) + (segment (start 88.9 141.1478) (end 88.4174 141.1478) (width 0.25) (layer F.Cu) (net 6)) + (segment (start 87.4776 140.208) (end 87.4776 139.446) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AF1A15)) + (segment (start 88.4174 141.1478) (end 87.4776 140.208) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AF1A14)) + (segment (start 88.888 144.7165) (end 88.888 146.038) (width 0.25) (layer F.Cu) (net 6)) + (segment (start 88.888 146.038) (end 90.1065 147.2565) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AF189C)) + (segment (start 90.1065 147.2565) (end 90.1065 147.32) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AF189D)) + (segment (start 89.1159 141.1605) (end 89.1159 141.2875) (width 0.25) (layer F.Cu) (net 6)) + (segment (start 89.1159 141.2875) (end 89.662 141.8336) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AED74C)) + (segment (start 89.662 141.8336) (end 89.662 145.0105) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AED74D)) + (segment (start 89.662 145.0105) (end 89.6385 145.034) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AED74E)) + (segment (start 89.6385 145.034) (end 89.6112 145.034) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AED74F)) + (segment (start 89.6112 145.034) (end 89.6112 145.0105) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AED750)) + (segment (start 88.5952 139.2936) (end 88.5952 138.938) (width 0.25) (layer F.Cu) (net 6)) + (segment (start 88.5952 139.2936) (end 87.63 139.2936) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AED5A0)) + (segment (start 87.63 139.2936) (end 87.4776 139.446) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AED59C)) + (segment (start 87.4776 139.446) (end 87.0331 139.8905) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AF1A1A)) + (segment (start 88.5952 138.938) (end 89.0524 138.4808) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AED5A2)) + (via (at 89.0524 138.4808) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 6)) + (segment (start 89.9668 136.9187) (end 90.551 136.3345) (width 0.25) (layer B.Cu) (net 6) (tstamp 56AED5A6)) + (segment (start 87.0331 139.8905) (end 86.487 139.8905) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AED59D)) + (segment (start 86.0545 138.43) (end 86.0545 139.3945) (width 0.25) (layer F.Cu) (net 6)) + (segment (start 86.0545 139.3945) (end 86.487 139.827) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AED551)) + (segment (start 86.487 139.827) (end 86.487 139.8905) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AED552)) + (segment (start 88.8074 123.22854) (end 87.6074 123.22854) (width 0.25) (layer F.Cu) (net 6)) + (segment (start 92.5195 132.3855) (end 91.9995 132.3855) (width 0.25) (layer F.Cu) (net 6)) + (segment (start 91.9995 132.3855) (end 91.694 132.08) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AED4B3)) + (segment (start 91.694 132.08) (end 91.694 125.476) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AED4B4)) + (segment (start 91.694 125.476) (end 92.6074 124.5626) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AED4B5)) + (segment (start 92.6074 124.5626) (end 92.6074 123.22854) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AED4B6)) + (segment (start 94.5515 139.4855) (end 95.2246 142.0368) (width 0.25) (layer F.Cu) (net 6)) + (segment (start 95.2246 142.0368) (end 94.8055 145.0105) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AED4B0)) + (segment (start 89.5985 136.144) (end 90.3605 136.144) (width 0.25) (layer F.Cu) (net 6)) + (segment (start 90.3605 136.144) (end 90.551 136.3345) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AED495)) + (via (at 90.551 136.3345) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 6)) + (segment (start 90.551 136.3345) (end 90.678 136.4615) (width 0.25) (layer B.Cu) (net 6) (tstamp 56AED499)) + (via (at 92.583 136.4615) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 6)) + (segment (start 92.583 136.4615) (end 93.0275 136.017) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AED49D)) + (segment (start 93.0275 136.017) (end 93.0275 135.1915) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AED49E)) + (segment (start 93.0275 135.1915) (end 93.1545 135.0645) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AED49F)) + (segment (start 89.281 136.144) (end 89.5985 136.144) (width 0.25) (layer F.Cu) (net 6)) + (segment (start 89.5985 136.144) (end 89.663398 136.144) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AED493)) + (segment (start 90.6145 137.414) (end 91.313 137.414) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AED490)) + (segment (start 90.4875 137.287) (end 90.6145 137.414) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AED48F)) + (segment (start 90.4875 136.968102) (end 90.4875 137.287) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AED48E)) + (segment (start 89.663398 136.144) (end 90.4875 136.968102) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AED48D)) + (segment (start 94.8055 145.0105) (end 89.6112 145.0105) (width 0.25) (layer F.Cu) (net 6)) + (segment (start 89.6112 145.0105) (end 89.182 145.0105) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AED751)) + (segment (start 89.182 145.0105) (end 88.888 144.7165) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AED431)) + (segment (start 93.919 133.6705) (end 93.919 134.8645) (width 0.25) (layer F.Cu) (net 6)) + (segment (start 93.919 134.8645) (end 94.119 135.0645) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AED3F7)) + (segment (start 92.5195 132.3855) (end 92.5195 133.1595) (width 0.25) (layer F.Cu) (net 6)) + (segment (start 93.0305 133.6705) (end 93.919 133.6705) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AED3F4)) + (segment (start 92.5195 133.1595) (end 93.0305 133.6705) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AED3F3)) + (segment (start 71.64 144.792) (end 71.958 145.11) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AEC62B)) + (segment (start 71.958 145.11) (end 73.017 145.11) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AEC62C)) + (segment (start 71.374 144.792) (end 71.64 144.792) (width 0.25) (layer F.Cu) (net 6)) + (segment (start 71.3105 144.792) (end 71.64 144.792) (width 0.25) (layer F.Cu) (net 6)) + (segment (start 81.267 137.66) (end 81.267 138.824) (width 0.25) (layer F.Cu) (net 6)) + (segment (start 84.1375 138.43) (end 86.0545 138.43) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AEB902)) + (segment (start 83.6295 138.938) (end 84.1375 138.43) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AEB901)) + (segment (start 81.381 138.938) (end 83.6295 138.938) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AEB900)) + (segment (start 81.267 138.824) (end 81.381 138.938) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AEB8FF)) + (segment (start 86.0545 137.033) (end 85.9275 136.906) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AEB8A3)) + (segment (start 77.7995 151.0665) (end 77.7995 150.737) (width 0.25) (layer F.Cu) (net 6)) + (segment (start 77.7995 150.737) (end 78.067 150.4695) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AEB7B3)) + (segment (start 78.067 150.4695) (end 78.067 149.36) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AEB7B4)) + (segment (start 85.9275 136.906) (end 85.725 136.906) (width 0.25) (layer F.Cu) (net 6)) + (segment (start 95.619 135.0645) (end 95.9104 135.3559) (width 0.508) (layer F.Cu) (net 7)) + (segment (start 95.9104 135.3559) (end 95.9104 146.304) (width 0.508) (layer F.Cu) (net 7) (tstamp 56AF2408)) + (segment (start 95.9104 146.304) (end 94.8055 147.4089) (width 0.508) (layer F.Cu) (net 7) (tstamp 56AF2409)) + (segment (start 94.8055 147.4089) (end 94.8055 147.5105) (width 0.508) (layer F.Cu) (net 7) (tstamp 56AF240D)) + (segment (start 95.619 135.0645) (end 95.619 133.8705) (width 0.508) (layer F.Cu) (net 7)) + (segment (start 95.619 133.8705) (end 95.819 133.6705) (width 0.508) (layer F.Cu) (net 7) (tstamp 56AF2405)) + (segment (start 95.819 133.6705) (end 95.819 129.479) (width 0.508) (layer F.Cu) (net 7)) + (segment (start 95.819 129.479) (end 96.6724 128.6256) (width 0.508) (layer F.Cu) (net 7) (tstamp 56AF23F7)) + (segment (start 96.1644 125.5776) (end 96.1644 125.3998) (width 0.508) (layer F.Cu) (net 7) (tstamp 56AF2401)) + (segment (start 96.9518 126.365) (end 96.1644 125.5776) (width 0.508) (layer F.Cu) (net 7) (tstamp 56AF2400)) + (segment (start 96.9518 127.9906) (end 96.9518 126.365) (width 0.508) (layer F.Cu) (net 7) (tstamp 56AF23FC)) + (segment (start 96.6724 128.27) (end 96.9518 127.9906) (width 0.508) (layer F.Cu) (net 7) (tstamp 56AF23FA)) + (segment (start 96.6724 128.6256) (end 96.6724 128.27) (width 0.508) (layer F.Cu) (net 7) (tstamp 56AF23F9)) + (segment (start 93.8784 118.999) (end 94.3102 118.999) (width 0.508) (layer B.Cu) (net 7)) + (segment (start 96.1644 125.2474) (end 96.1644 125.3998) (width 0.508) (layer B.Cu) (net 7) (tstamp 56AF23AC)) + (segment (start 95.25 124.333) (end 96.1644 125.2474) (width 0.508) (layer B.Cu) (net 7) (tstamp 56AF23AB)) + (segment (start 95.25 120.3452) (end 95.25 124.333) (width 0.508) (layer B.Cu) (net 7) (tstamp 56AF23AA)) + (segment (start 94.8944 119.9896) (end 95.25 120.3452) (width 0.508) (layer B.Cu) (net 7) (tstamp 56AF23A9)) + (segment (start 94.8944 119.5832) (end 94.8944 119.9896) (width 0.508) (layer B.Cu) (net 7) (tstamp 56AF23A8)) + (segment (start 94.3102 118.999) (end 94.8944 119.5832) (width 0.508) (layer B.Cu) (net 7) (tstamp 56AF23A7)) + (segment (start 93.8784 118.999) (end 86.3092 118.999) (width 0.508) (layer B.Cu) (net 7)) + (segment (start 85.2932 118.0592) (end 85.1154 117.8814) (width 0.508) (layer B.Cu) (net 7) (tstamp 56AF239A)) + (segment (start 85.3948 118.1608) (end 85.2932 118.0592) (width 0.508) (layer B.Cu) (net 7) (tstamp 56AF2399)) + (segment (start 85.471 118.1608) (end 85.3948 118.1608) (width 0.508) (layer B.Cu) (net 7) (tstamp 56AF2398)) + (segment (start 86.3092 118.999) (end 85.471 118.1608) (width 0.508) (layer B.Cu) (net 7) (tstamp 56AF2397)) + (segment (start 85.1154 117.8814) (end 85.4456 118.2116) (width 0.508) (layer B.Cu) (net 7) (tstamp 56AF239B)) + (segment (start 71.5264 148.5392) (end 71.5264 147.9296) (width 0.508) (layer F.Cu) (net 7)) + (segment (start 71.5264 148.5392) (end 71.7042 148.5392) (width 0.508) (layer F.Cu) (net 7)) + (segment (start 71.7042 148.5392) (end 73.3298 150.1648) (width 0.508) (layer F.Cu) (net 7) (tstamp 56AF234F)) + (segment (start 76.3651 151.1935) (end 76.3651 151.2951) (width 1.016) (layer F.Cu) (net 7)) + (segment (start 76.708 151.638) (end 76.708 151.5364) (width 1.016) (layer F.Cu) (net 7) (tstamp 56AF2347)) + (segment (start 76.3651 151.2951) (end 76.708 151.638) (width 1.016) (layer F.Cu) (net 7) (tstamp 56AF2345)) + (segment (start 74.1807 151.1935) (end 74.1807 151.0157) (width 1.016) (layer F.Cu) (net 7)) + (segment (start 74.1807 151.0157) (end 73.3298 150.1648) (width 1.016) (layer F.Cu) (net 7) (tstamp 56AF2342)) + (segment (start 73.3298 150.1648) (end 73.3298 150.1394) (width 1.016) (layer F.Cu) (net 7) (tstamp 56AF2343)) + (segment (start 76.3651 151.1935) (end 74.1807 151.1935) (width 1.016) (layer F.Cu) (net 7)) + (segment (start 74.1807 151.1935) (end 74.1426 151.1554) (width 1.016) (layer F.Cu) (net 7) (tstamp 56AF233F)) + (segment (start 90.1065 150.8125) (end 89.3699 150.8125) (width 1.016) (layer F.Cu) (net 7)) + (segment (start 82.677 151.4348) (end 82.4738 151.2316) (width 1.016) (layer F.Cu) (net 7) (tstamp 56AF2337)) + (segment (start 84.3026 151.4348) (end 82.677 151.4348) (width 1.016) (layer F.Cu) (net 7) (tstamp 56AF2336)) + (segment (start 84.3788 151.511) (end 84.3026 151.4348) (width 1.016) (layer F.Cu) (net 7) (tstamp 56AF2335)) + (segment (start 88.6714 151.511) (end 84.3788 151.511) (width 1.016) (layer F.Cu) (net 7) (tstamp 56AF2334)) + (segment (start 89.3699 150.8125) (end 88.6714 151.511) (width 1.016) (layer F.Cu) (net 7) (tstamp 56AF2333)) + (segment (start 90.1065 149.86) (end 90.1065 150.8125) (width 1.016) (layer F.Cu) (net 7)) + (segment (start 90.1065 150.8125) (end 89.8525 151.0665) (width 1.016) (layer F.Cu) (net 7) (tstamp 56AF2330)) + (segment (start 90.1065 149.86) (end 91.7575 149.86) (width 1.016) (layer F.Cu) (net 7)) + (segment (start 91.7575 149.86) (end 94.107 147.5105) (width 1.016) (layer F.Cu) (net 7) (tstamp 56AF2321)) + (segment (start 94.107 147.5105) (end 94.8055 147.5105) (width 1.016) (layer F.Cu) (net 7) (tstamp 56AF2322)) + (segment (start 80.1116 117.8814) (end 78.613 119.38) (width 0.25) (layer B.Cu) (net 7) (tstamp 56AF1DF1)) + (segment (start 85.1154 117.8814) (end 80.1116 117.8814) (width 0.25) (layer B.Cu) (net 7) (tstamp 56AF1DEF)) + (segment (start 86.233 118.999) (end 85.4456 118.2116) (width 0.25) (layer B.Cu) (net 7) (tstamp 56AF1DED)) + (segment (start 85.4456 118.2116) (end 85.1154 117.8814) (width 0.25) (layer B.Cu) (net 7) (tstamp 56AF239E)) + (segment (start 93.8784 118.999) (end 86.233 118.999) (width 0.25) (layer B.Cu) (net 7) (tstamp 56AF2395)) + (via (at 96.1644 125.3998) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 7)) + (segment (start 96.1644 125.73) (end 96.1644 125.3998) (width 0.25) (layer F.Cu) (net 7) (tstamp 56AF1DE3)) + (segment (start 96.7994 126.365) (end 96.1644 125.73) (width 0.25) (layer F.Cu) (net 7) (tstamp 56AF1DE2)) + (segment (start 96.7994 127.8636) (end 96.7994 126.365) (width 0.25) (layer F.Cu) (net 7) (tstamp 56AF1DE1)) + (segment (start 96.6978 127.9652) (end 96.7994 127.8636) (width 0.25) (layer F.Cu) (net 7) (tstamp 56AF1DDC)) + (segment (start 96.6978 128.6002) (end 96.6978 127.9652) (width 0.25) (layer F.Cu) (net 7) (tstamp 56AF1DDB)) + (segment (start 95.819 129.479) (end 96.6978 128.6002) (width 0.25) (layer F.Cu) (net 7) (tstamp 56AF1DD9)) + (segment (start 71.374 146.292) (end 71.374 146.9898) (width 0.25) (layer F.Cu) (net 7)) + (segment (start 71.374 146.9898) (end 71.5264 147.1422) (width 0.25) (layer F.Cu) (net 7) (tstamp 56AF1D9C)) + (segment (start 71.5264 147.1422) (end 71.5264 147.9296) (width 0.25) (layer F.Cu) (net 7) (tstamp 56AF1D9D)) + (segment (start 81.1918 151.9682) (end 82.0935 151.0665) (width 0.25) (layer F.Cu) (net 7) (tstamp 56AF1DA4)) + (segment (start 77.1398 151.9682) (end 81.1918 151.9682) (width 0.25) (layer F.Cu) (net 7) (tstamp 56AF1DA3)) + (segment (start 76.708 151.5364) (end 77.1398 151.9682) (width 0.25) (layer F.Cu) (net 7) (tstamp 56AF2348)) + (segment (start 71.5264 148.5392) (end 74.1426 151.1554) (width 0.25) (layer F.Cu) (net 7) (tstamp 56AF1D9E)) + (segment (start 94.8055 147.5105) (end 94.8055 147.4089) (width 0.25) (layer F.Cu) (net 7)) + (segment (start 94.8055 147.4089) (end 95.9104 146.304) (width 0.25) (layer F.Cu) (net 7) (tstamp 56AF181E)) + (segment (start 95.9104 146.304) (end 95.9104 135.3559) (width 0.25) (layer F.Cu) (net 7) (tstamp 56AF1820)) + (segment (start 94.8055 147.5105) (end 94.107 147.5105) (width 0.25) (layer F.Cu) (net 7)) + (segment (start 94.107 147.5105) (end 91.7575 149.86) (width 0.25) (layer F.Cu) (net 7) (tstamp 56AED434)) + (segment (start 95.819 133.6705) (end 95.819 134.8645) (width 0.25) (layer F.Cu) (net 7)) + (segment (start 95.819 134.8645) (end 95.619 135.0645) (width 0.25) (layer F.Cu) (net 7) (tstamp 56AED3FD)) + (segment (start 82.0935 151.0665) (end 89.8525 151.0665) (width 0.25) (layer F.Cu) (net 7)) + (segment (start 89.8525 151.0665) (end 90.1065 150.8125) (width 0.25) (layer F.Cu) (net 7) (tstamp 56AED003)) + (segment (start 71.4495 146.292) (end 71.8315 145.91) (width 0.25) (layer F.Cu) (net 7) (tstamp 56AEC62F)) + (segment (start 71.8315 145.91) (end 73.017 145.91) (width 0.25) (layer F.Cu) (net 7) (tstamp 56AEC630)) + (segment (start 71.374 146.292) (end 71.4495 146.292) (width 0.25) (layer F.Cu) (net 7)) + (segment (start 73.016 145.911) (end 73.017 145.91) (width 0.25) (layer F.Cu) (net 7) (tstamp 56AEC5D2)) + (segment (start 80.5935 151.0665) (end 79.4265 151.0665) (width 1.016) (layer F.Cu) (net 8)) + (segment (start 79.4265 151.0665) (end 79.363 151.003) (width 1.016) (layer F.Cu) (net 8) (tstamp 56AF2464)) + (segment (start 85.725 135.3185) (end 85.09 135.9535) (width 0.25) (layer F.Cu) (net 8) (tstamp 56AEB946)) + (segment (start 85.09 135.9535) (end 85.09 137.6045) (width 0.25) (layer F.Cu) (net 8) (tstamp 56AEB947)) + (segment (start 85.09 137.6045) (end 84.836 137.8585) (width 0.25) (layer F.Cu) (net 8) (tstamp 56AEB949)) + (segment (start 84.836 137.8585) (end 83.8835 137.8585) (width 0.25) (layer F.Cu) (net 8) (tstamp 56AEB94A)) + (via (at 83.8835 137.8585) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 8)) + (segment (start 83.8835 137.8585) (end 83.3882 138.938) (width 0.25) (layer B.Cu) (net 8) (tstamp 56AEB94E)) + (segment (start 83.3882 138.938) (end 83.1088 140.1826) (width 0.25) (layer B.Cu) (net 8) (tstamp 56AEB94F)) + (via (at 83.1088 140.1826) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 8)) + (segment (start 83.1088 140.1826) (end 82.3468 140.7668) (width 0.25) (layer F.Cu) (net 8) (tstamp 56AEB953)) + (segment (start 82.3468 140.7668) (end 82.1182 148.0058) (width 0.25) (layer F.Cu) (net 8) (tstamp 56AEB954)) + (via (at 82.1182 148.0058) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 8)) + (segment (start 82.1182 148.0058) (end 82.169 149.7965) (width 0.25) (layer B.Cu) (net 8) (tstamp 56AEB957)) + (segment (start 82.169 149.7965) (end 80.9625 151.003) (width 0.25) (layer B.Cu) (net 8) (tstamp 56AEB958)) + (segment (start 80.9625 151.003) (end 80.391 151.003) (width 0.25) (layer B.Cu) (net 8) (tstamp 56AEB95F)) + (via (at 80.391 151.003) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 8)) + (segment (start 80.391 151.003) (end 80.3275 151.0665) (width 0.25) (layer F.Cu) (net 8) (tstamp 56AEB961)) + (segment (start 80.3275 151.0665) (end 79.2995 151.0665) (width 0.25) (layer F.Cu) (net 8) (tstamp 56AEB962)) + (segment (start 85.9275 135.3185) (end 85.725 135.3185) (width 0.25) (layer F.Cu) (net 8)) + (segment (start 87.5545 138.43) (end 87.4395 138.43) (width 0.25) (layer F.Cu) (net 8)) + (segment (start 87.4395 138.43) (end 86.6775 137.668) (width 0.25) (layer F.Cu) (net 8) (tstamp 56AEB8A6)) + (segment (start 86.6775 137.668) (end 86.6775 135.8265) (width 0.25) (layer F.Cu) (net 8) (tstamp 56AEB8A7)) + (segment (start 86.6775 135.8265) (end 86.1695 135.3185) (width 0.25) (layer F.Cu) (net 8) (tstamp 56AEB8A8)) + (segment (start 86.1695 135.3185) (end 85.9275 135.3185) (width 0.25) (layer F.Cu) (net 8) (tstamp 56AEB8A9)) + (segment (start 79.2995 151.0665) (end 79.2995 150.9275) (width 0.25) (layer F.Cu) (net 8)) + (segment (start 79.2995 150.9275) (end 78.867 150.495) (width 0.25) (layer F.Cu) (net 8) (tstamp 56AEB7AF)) + (segment (start 78.867 150.495) (end 78.867 149.36) (width 0.25) (layer F.Cu) (net 8) (tstamp 56AEB7B0)) + (segment (start 70.5485 125.222) (end 71.3105 125.984) (width 1.016) (layer B.Cu) (net 9)) + (segment (start 81.153 119.38) (end 81.153 122.3772) (width 1.016) (layer B.Cu) (net 9)) + (segment (start 82.2198 123.444) (end 82.3595 123.444) (width 1.016) (layer B.Cu) (net 9) (tstamp 56AF2245)) + (segment (start 81.153 122.3772) (end 82.2198 123.444) (width 1.016) (layer B.Cu) (net 9) (tstamp 56AF2244)) + (segment (start 93.2815 127.1905) (end 93.2815 124.206) (width 0.25) (layer B.Cu) (net 9)) + (segment (start 84.824 124.194) (end 83.5025 124.194) (width 0.25) (layer F.Cu) (net 9) (tstamp 56AED4E6)) + (segment (start 84.836 124.206) (end 84.824 124.194) (width 0.25) (layer F.Cu) (net 9) (tstamp 56AED4E5)) + (via (at 84.836 124.206) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 9)) + (segment (start 85.979 124.206) (end 84.836 124.206) (width 0.25) (layer B.Cu) (net 9) (tstamp 56AED4E3)) + (segment (start 86.487 123.698) (end 85.979 124.206) (width 0.25) (layer B.Cu) (net 9) (tstamp 56AED4E2)) + (segment (start 86.487 122.8725) (end 86.487 123.698) (width 0.25) (layer B.Cu) (net 9) (tstamp 56AED4E1)) + (segment (start 87.0585 122.301) (end 86.487 122.8725) (width 0.25) (layer B.Cu) (net 9) (tstamp 56AED4E0)) + (segment (start 93.091 122.301) (end 87.0585 122.301) (width 0.25) (layer B.Cu) (net 9) (tstamp 56AED4DF)) + (segment (start 93.6625 122.8725) (end 93.091 122.301) (width 0.25) (layer B.Cu) (net 9) (tstamp 56AED4DE)) + (segment (start 93.6625 123.825) (end 93.6625 122.8725) (width 0.25) (layer B.Cu) (net 9) (tstamp 56AED4DD)) + (segment (start 93.2815 124.206) (end 93.6625 123.825) (width 0.25) (layer B.Cu) (net 9) (tstamp 56AED4DC)) + (segment (start 82.3595 123.444) (end 81.661 123.444) (width 0.25) (layer F.Cu) (net 9)) + (segment (start 81.661 123.444) (end 79.6925 125.4125) (width 0.25) (layer F.Cu) (net 9) (tstamp 56AEC2A1)) + (segment (start 79.6925 125.4125) (end 77.4065 125.4125) (width 0.25) (layer F.Cu) (net 9) (tstamp 56AEC2A2)) + (segment (start 77.4065 125.4125) (end 76.708 126.111) (width 0.25) (layer F.Cu) (net 9) (tstamp 56AEC2AE)) + (segment (start 76.708 126.111) (end 75.3745 126.111) (width 0.25) (layer F.Cu) (net 9) (tstamp 56AEC2AF)) + (via (at 75.3745 126.111) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 9)) + (segment (start 75.3745 126.111) (end 75.2475 125.984) (width 0.25) (layer B.Cu) (net 9) (tstamp 56AEC2B1)) + (segment (start 75.2475 125.984) (end 71.3105 125.984) (width 0.25) (layer B.Cu) (net 9) (tstamp 56AEC2B2)) + (segment (start 83.5025 124.194) (end 83.1095 124.194) (width 0.25) (layer F.Cu) (net 9)) + (via (at 82.3595 123.444) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 9)) + (segment (start 83.1095 124.194) (end 82.3595 123.444) (width 0.25) (layer F.Cu) (net 9) (tstamp 56AEC255)) + (segment (start 94.5515 136.4855) (end 94.5515 137.4775) (width 0.508) (layer F.Cu) (net 10)) + (segment (start 94.5515 137.4775) (end 94.8055 137.7315) (width 0.508) (layer F.Cu) (net 10) (tstamp 56AF2419)) + (segment (start 94.1959 126.0729) (end 94.1959 124.4981) (width 0.508) (layer B.Cu) (net 10)) + (segment (start 94.1959 124.4981) (end 94.1705 124.4727) (width 0.508) (layer B.Cu) (net 10) (tstamp 56AF2306)) + (segment (start 95.7815 127.1905) (end 95.3135 127.1905) (width 0.508) (layer B.Cu) (net 10)) + (segment (start 95.3135 127.1905) (end 94.1959 126.0729) (width 0.508) (layer B.Cu) (net 10) (tstamp 56AF2301)) + (segment (start 94.1959 126.0729) (end 94.1705 126.0475) (width 0.508) (layer B.Cu) (net 10) (tstamp 56AF2304)) + (segment (start 90.805 121.6025) (end 92.6465 121.6025) (width 0.508) (layer B.Cu) (net 10)) + (segment (start 92.6465 121.6025) (end 92.6846 121.6406) (width 0.508) (layer B.Cu) (net 10) (tstamp 56AF22FB)) + (segment (start 83.5025 122.694) (end 86.1575 122.694) (width 0.508) (layer F.Cu) (net 10)) + (segment (start 86.1575 122.694) (end 87.249 121.6025) (width 0.508) (layer F.Cu) (net 10) (tstamp 56AF22F6)) + (segment (start 87.249 121.6025) (end 90.924498 121.6025) (width 0.508) (layer F.Cu) (net 10) (tstamp 56AF22F7)) + (segment (start 90.924498 121.6025) (end 90.805 121.6025) (width 0.508) (layer F.Cu) (net 10) (tstamp 56AF22F9)) + (segment (start 82.045 122.494) (end 83.3025 122.494) (width 0.508) (layer F.Cu) (net 10)) + (segment (start 83.3025 122.494) (end 83.5025 122.694) (width 0.508) (layer F.Cu) (net 10) (tstamp 56AF22F3)) + (segment (start 80.645 123.6345) (end 80.645 122.8725) (width 0.508) (layer F.Cu) (net 10)) + (segment (start 80.645 122.8725) (end 81.0235 122.494) (width 0.508) (layer F.Cu) (net 10) (tstamp 56AF22EF)) + (segment (start 81.0235 122.494) (end 82.045 122.494) (width 0.508) (layer F.Cu) (net 10) (tstamp 56AF22F0)) + (segment (start 80.01 124.2695) (end 80.645 123.6345) (width 0.508) (layer F.Cu) (net 10)) + (segment (start 76.3505 124.2695) (end 77.1779 124.2695) (width 0.508) (layer F.Cu) (net 10)) + (segment (start 79.7052 124.3838) (end 79.7814 124.46) (width 0.508) (layer F.Cu) (net 10) (tstamp 56AF22EA)) + (segment (start 77.2922 124.3838) (end 79.7052 124.3838) (width 0.508) (layer F.Cu) (net 10) (tstamp 56AF22E9)) + (segment (start 77.1779 124.2695) (end 77.2922 124.3838) (width 0.508) (layer F.Cu) (net 10) (tstamp 56AF22E8)) + (segment (start 71.4375 128.4725) (end 71.4375 127.5969) (width 1.016) (layer F.Cu) (net 10)) + (segment (start 71.7804 127.254) (end 72.0725 127.254) (width 1.016) (layer F.Cu) (net 10) (tstamp 56AF22A0)) + (segment (start 71.4375 127.5969) (end 71.7804 127.254) (width 1.016) (layer F.Cu) (net 10) (tstamp 56AF229F)) + (segment (start 73.66 129.54) (end 73.66 127.508) (width 1.016) (layer B.Cu) (net 10)) + (segment (start 73.66 127.508) (end 73.406 127.254) (width 1.016) (layer B.Cu) (net 10) (tstamp 56AF229B)) + (segment (start 73.406 127.254) (end 72.0725 127.254) (width 1.016) (layer B.Cu) (net 10) (tstamp 56AF229C)) + (segment (start 76.2 129.54) (end 73.66 129.54) (width 1.016) (layer B.Cu) (net 10)) + (segment (start 76.2 132.08) (end 76.2 129.54) (width 1.016) (layer B.Cu) (net 10)) + (segment (start 76.2 129.54) (end 76.2 128.4986) (width 1.016) (layer B.Cu) (net 10)) + (segment (start 76.2 128.4986) (end 76.6572 128.0414) (width 1.016) (layer B.Cu) (net 10) (tstamp 56AF2291)) + (segment (start 76.6572 128.0414) (end 76.6572 124.5762) (width 1.016) (layer B.Cu) (net 10) (tstamp 56AF2292)) + (segment (start 76.6572 124.5762) (end 76.3505 124.2695) (width 1.016) (layer B.Cu) (net 10) (tstamp 56AF2293)) + (segment (start 94.1705 126.0475) (end 95.3135 127.1905) (width 0.25) (layer B.Cu) (net 10) (tstamp 56AED4F2)) + (segment (start 94.1705 122.6185) (end 94.1705 124.4727) (width 0.25) (layer B.Cu) (net 10) (tstamp 56AED4F1)) + (segment (start 90.805 121.6025) (end 90.9955 121.793) (width 0.25) (layer B.Cu) (net 10) (tstamp 56AED4EE)) + (segment (start 90.9955 121.793) (end 93.345 121.793) (width 0.25) (layer B.Cu) (net 10) (tstamp 56AED4EF)) + (segment (start 93.345 121.793) (end 94.1705 122.6185) (width 0.25) (layer B.Cu) (net 10) (tstamp 56AED4F0)) + (segment (start 94.1705 124.4727) (end 94.1705 126.0475) (width 0.25) (layer B.Cu) (net 10) (tstamp 56AF2309)) + (via (at 90.805 121.6025) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 10)) + (segment (start 87.249 121.6025) (end 90.805 121.6025) (width 0.25) (layer F.Cu) (net 10) (tstamp 56AED4EA)) + (segment (start 86.1575 122.694) (end 87.249 121.6025) (width 0.25) (layer F.Cu) (net 10) (tstamp 56AED4E9)) + (segment (start 95.885 137.16) (end 95.885 127.294) (width 0.25) (layer B.Cu) (net 10) (tstamp 56AED4A9)) + (segment (start 95.3135 137.7315) (end 95.885 137.16) (width 0.25) (layer B.Cu) (net 10) (tstamp 56AED4A8)) + (segment (start 94.8055 137.7315) (end 95.3135 137.7315) (width 0.25) (layer B.Cu) (net 10) (tstamp 56AED4A7)) + (via (at 94.8055 137.7315) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 10)) + (segment (start 94.5515 137.4775) (end 94.8055 137.7315) (width 0.25) (layer F.Cu) (net 10) (tstamp 56AED4A5)) + (segment (start 95.885 127.294) (end 95.7815 127.1905) (width 0.25) (layer B.Cu) (net 10) (tstamp 56AED4AA)) + (segment (start 95.504 123.7495) (end 95.504 126.913) (width 0.25) (layer F.Cu) (net 10)) + (segment (start 95.504 126.913) (end 95.7815 127.1905) (width 0.25) (layer F.Cu) (net 10) (tstamp 56AED378)) + (segment (start 76.3505 124.2695) (end 80.01 124.2695) (width 0.25) (layer F.Cu) (net 10)) + (segment (start 81.0235 122.494) (end 82.045 122.494) (width 0.25) (layer F.Cu) (net 10) (tstamp 56AEC22C)) + (segment (start 80.645 122.8725) (end 81.0235 122.494) (width 0.25) (layer F.Cu) (net 10) (tstamp 56AEC22B)) + (segment (start 83.3025 122.494) (end 83.5025 122.694) (width 0.25) (layer F.Cu) (net 10) (tstamp 56AEC21E)) + (via (at 72.0725 127.254) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 10)) + (segment (start 72.0725 127.254) (end 72.136 127.1905) (width 0.25) (layer B.Cu) (net 10) (tstamp 56AEC17A)) + (segment (start 73.3425 127.1905) (end 73.66 127.508) (width 0.25) (layer B.Cu) (net 10) (tstamp 56AEC17C)) + (segment (start 72.136 127.1905) (end 73.3425 127.1905) (width 0.25) (layer B.Cu) (net 10) (tstamp 56AEC17B)) + (segment (start 76.2 129.54) (end 76.2 124.42) (width 0.25) (layer B.Cu) (net 10)) + (segment (start 76.2 124.42) (end 76.3505 124.2695) (width 0.25) (layer B.Cu) (net 10) (tstamp 56AEC150)) + (segment (start 76.033 129.373) (end 76.2 129.54) (width 0.25) (layer B.Cu) (net 10) (tstamp 56AEC084)) + (segment (start 78.961 130.81) (end 77.47 130.81) (width 0.25) (layer F.Cu) (net 10)) + (segment (start 77.47 130.81) (end 76.2 132.08) (width 0.25) (layer F.Cu) (net 10) (tstamp 56AEB555)) + (segment (start 68.707 133.338) (end 66.052 133.338) (width 0.25) (layer F.Cu) (net 11)) + (segment (start 66.052 133.338) (end 66.04 133.35) (width 0.25) (layer F.Cu) (net 11) (tstamp 56AEB25F)) + (segment (start 68.719 130.302) (end 68.719 131.826) (width 0.25) (layer F.Cu) (net 12)) + (segment (start 68.719 131.826) (end 68.707 131.838) (width 0.25) (layer F.Cu) (net 12) (tstamp 56AEB259)) + (segment (start 68.719 130.302) (end 66.548 130.302) (width 0.25) (layer F.Cu) (net 12)) + (segment (start 66.548 130.302) (end 66.04 130.81) (width 0.25) (layer F.Cu) (net 12) (tstamp 56AEB256)) + (segment (start 68.707 130.314) (end 68.719 130.302) (width 0.25) (layer F.Cu) (net 12) (tstamp 56AEAAD5)) + (segment (start 66.802 130.048) (end 66.04 130.81) (width 0.25) (layer F.Cu) (net 12) (tstamp 56AEAACE)) + (segment (start 68.707 136.259) (end 68.211 136.259) (width 0.25) (layer F.Cu) (net 13)) + (segment (start 68.211 136.259) (end 66.04 138.43) (width 0.25) (layer F.Cu) (net 13) (tstamp 56AEB266)) + (segment (start 68.707 136.259) (end 68.707 136.398) (width 0.25) (layer F.Cu) (net 13)) + (segment (start 66.675 138.43) (end 66.04 138.43) (width 0.25) (layer F.Cu) (net 13) (tstamp 56AEAAF5)) + (segment (start 68.707 134.759) (end 69.977 134.759) (width 0.25) (layer F.Cu) (net 14)) + (segment (start 69.977 134.759) (end 70.358 134.378) (width 0.25) (layer F.Cu) (net 14) (tstamp 56AEB269)) + (segment (start 68.707 134.759) (end 67.171 134.759) (width 0.25) (layer F.Cu) (net 14)) + (segment (start 67.171 134.759) (end 66.04 135.89) (width 0.25) (layer F.Cu) (net 14) (tstamp 56AEB262)) + (segment (start 68.707 134.759) (end 68.949 134.759) (width 0.25) (layer F.Cu) (net 14)) + (segment (start 68.707 134.759) (end 68.441 134.759) (width 0.25) (layer F.Cu) (net 14)) + (segment (start 74.3585 127.762) (end 74.3585 125.7935) (width 1.016) (layer F.Cu) (net 15)) + (segment (start 74.3585 125.7935) (end 73.8505 125.2855) (width 1.016) (layer F.Cu) (net 15) (tstamp 56AF22A6)) + (segment (start 73.8505 125.2855) (end 73.8505 124.2695) (width 1.016) (layer F.Cu) (net 15) (tstamp 56AF22A7)) + (segment (start 73.8505 124.2695) (end 73.8505 123.6345) (width 1.016) (layer B.Cu) (net 15)) + (segment (start 73.8505 123.6345) (end 75.7555 121.7295) (width 1.016) (layer B.Cu) (net 15) (tstamp 56AF223E)) + (segment (start 75.7555 121.7295) (end 75.7555 119.44604) (width 1.016) (layer B.Cu) (net 15) (tstamp 56AF223F)) + (segment (start 82.677 130.175) (end 82.677 131.8514) (width 0.25) (layer F.Cu) (net 15)) + (segment (start 88.888 142.5328) (end 88.888 143.129) (width 0.25) (layer F.Cu) (net 15) (tstamp 56AF1928)) + (segment (start 88.5952 142.24) (end 88.888 142.5328) (width 0.25) (layer F.Cu) (net 15) (tstamp 56AF1927)) + (segment (start 88.392 142.24) (end 88.5952 142.24) (width 0.25) (layer F.Cu) (net 15) (tstamp 56AF1926)) + (segment (start 88.138 141.986) (end 88.392 142.24) (width 0.25) (layer F.Cu) (net 15) (tstamp 56AF1925)) + (segment (start 87.0204 141.986) (end 88.138 141.986) (width 0.25) (layer F.Cu) (net 15) (tstamp 56AF1924)) + (via (at 87.0204 141.986) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 15)) + (segment (start 86.4616 141.4272) (end 87.0204 141.986) (width 0.25) (layer B.Cu) (net 15) (tstamp 56AF1920)) + (segment (start 86.4616 139.2428) (end 86.4616 141.4272) (width 0.25) (layer B.Cu) (net 15) (tstamp 56AF191E)) + (segment (start 84.4296 137.2108) (end 86.4616 139.2428) (width 0.25) (layer B.Cu) (net 15) (tstamp 56AF191D)) + (via (at 84.4296 137.2108) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 15)) + (segment (start 84.4296 136.7028) (end 84.4296 137.2108) (width 0.25) (layer F.Cu) (net 15) (tstamp 56AF1917)) + (segment (start 83.1088 135.382) (end 84.4296 136.7028) (width 0.25) (layer F.Cu) (net 15) (tstamp 56AF1916)) + (segment (start 83.1088 134.9756) (end 83.1088 135.382) (width 0.25) (layer F.Cu) (net 15) (tstamp 56AF1914)) + (segment (start 82.042 133.9088) (end 83.1088 134.9756) (width 0.25) (layer F.Cu) (net 15) (tstamp 56AF1913)) + (segment (start 82.042 132.4864) (end 82.042 133.9088) (width 0.25) (layer F.Cu) (net 15) (tstamp 56AF1912)) + (segment (start 82.677 131.8514) (end 82.042 132.4864) (width 0.25) (layer F.Cu) (net 15) (tstamp 56AF1911)) + (segment (start 73.8505 123.6345) (end 75.7555 121.7295) (width 0.25) (layer B.Cu) (net 15) (tstamp 56AEC1B5)) + (segment (start 75.7555 121.7295) (end 75.7555 119.44604) (width 0.25) (layer B.Cu) (net 15) (tstamp 56AEC1B7)) + (segment (start 73.8505 125.2855) (end 73.8505 124.2695) (width 0.25) (layer F.Cu) (net 15) (tstamp 56AEC18B)) + (segment (start 74.3585 125.7935) (end 73.8505 125.2855) (width 0.25) (layer F.Cu) (net 15) (tstamp 56AEC18A)) + (segment (start 71.4375 129.9725) (end 71.4375 131.064) (width 0.25) (layer F.Cu) (net 15)) + (segment (start 72.4535 132.08) (end 73.66 132.08) (width 0.25) (layer F.Cu) (net 15) (tstamp 56AEC164)) + (segment (start 71.4375 131.064) (end 72.4535 132.08) (width 0.25) (layer F.Cu) (net 15) (tstamp 56AEC163)) + (segment (start 73.66 132.08) (end 73.5965 132.08) (width 0.25) (layer B.Cu) (net 15)) + (segment (start 73.9895 124.0035) (end 73.533 124.46) (width 0.25) (layer F.Cu) (net 15) (tstamp 56AEC08D)) + (segment (start 73.66 132.08) (end 72.39 130.81) (width 0.25) (layer F.Cu) (net 15)) + (segment (start 83.312 130.81) (end 84.361 130.81) (width 0.25) (layer F.Cu) (net 15) (tstamp 56AEC079)) + (segment (start 82.6135 130.1115) (end 82.677 130.175) (width 0.25) (layer F.Cu) (net 15) (tstamp 56AEC078)) + (segment (start 82.677 130.175) (end 83.312 130.81) (width 0.25) (layer F.Cu) (net 15) (tstamp 56AF190F)) + (segment (start 82.6135 128.651) (end 82.6135 130.1115) (width 0.25) (layer F.Cu) (net 15) (tstamp 56AEC076)) + (segment (start 80.01 126.0475) (end 82.6135 128.651) (width 0.25) (layer F.Cu) (net 15) (tstamp 56AEC074)) + (segment (start 77.851 126.0475) (end 80.01 126.0475) (width 0.25) (layer F.Cu) (net 15) (tstamp 56AEC072)) + (segment (start 76.1365 127.762) (end 77.851 126.0475) (width 0.25) (layer F.Cu) (net 15) (tstamp 56AEC070)) + (segment (start 72.9615 127.762) (end 74.3585 127.762) (width 0.25) (layer F.Cu) (net 15) (tstamp 56AEC06F)) + (segment (start 74.3585 127.762) (end 76.1365 127.762) (width 0.25) (layer F.Cu) (net 15) (tstamp 56AEC188)) + (segment (start 72.39 128.3335) (end 72.9615 127.762) (width 0.25) (layer F.Cu) (net 15) (tstamp 56AEC06E)) + (segment (start 72.39 130.81) (end 72.39 128.3335) (width 0.25) (layer F.Cu) (net 15) (tstamp 56AEC06D)) + (segment (start 73.66 132.08) (end 73.66 131.5085) (width 0.25) (layer F.Cu) (net 15)) + (segment (start 78.486 121.9708) (end 78.486 122.685) (width 0.508) (layer F.Cu) (net 16)) + (segment (start 78.486 122.685) (end 79.245 123.444) (width 0.508) (layer F.Cu) (net 16) (tstamp 56AF22E5)) + (segment (start 78.9178 122.4026) (end 78.486 121.9708) (width 1.016) (layer F.Cu) (net 16) (tstamp 56AF22D1)) + (segment (start 78.486 121.9708) (end 79.2226 122.7074) (width 1.016) (layer F.Cu) (net 16) (tstamp 56AF22E3)) + (segment (start 78.359 122.4026) (end 78.9178 122.4026) (width 1.016) (layer F.Cu) (net 16)) + (segment (start 65.4685 125.222) (end 66.7385 125.222) (width 1.016) (layer F.Cu) (net 16)) + (segment (start 66.7385 125.222) (end 68.961 122.9995) (width 1.016) (layer F.Cu) (net 16) (tstamp 56AF22C7)) + (segment (start 68.961 122.9995) (end 69.0499 122.9995) (width 1.016) (layer F.Cu) (net 16) (tstamp 56AF22C8)) + (segment (start 69.0499 122.9995) (end 69.6468 122.4026) (width 1.016) (layer F.Cu) (net 16) (tstamp 56AF22C9)) + (segment (start 69.6468 122.4026) (end 78.359 122.4026) (width 1.016) (layer F.Cu) (net 16) (tstamp 56AF22CA)) + (segment (start 78.359 122.4026) (end 78.4098 122.4026) (width 1.016) (layer F.Cu) (net 16) (tstamp 56AF22CF)) + (segment (start 65.4685 125.222) (end 65.4685 119.57304) (width 1.016) (layer F.Cu) (net 16)) + (segment (start 65.4685 119.57304) (end 65.5955 119.44604) (width 1.016) (layer F.Cu) (net 16) (tstamp 56AF22BB)) + (segment (start 79.245 123.444) (end 78.994 123.444) (width 0.25) (layer F.Cu) (net 16)) + (segment (start 78.994 123.444) (end 78.5495 122.9995) (width 0.25) (layer F.Cu) (net 16) (tstamp 56AEC1BB)) + (segment (start 78.5495 122.9995) (end 68.961 122.9995) (width 0.25) (layer F.Cu) (net 16) (tstamp 56AEC1BC)) + (segment (start 68.961 122.9995) (end 66.7385 125.222) (width 0.25) (layer F.Cu) (net 16) (tstamp 56AEC1BD)) + (segment (start 65.4685 119.57304) (end 65.5955 119.44604) (width 0.25) (layer F.Cu) (net 16) (tstamp 56AEC197)) + (segment (start 84.717 147.51) (end 85.5985 147.51) (width 0.25) (layer F.Cu) (net 17)) + (segment (start 86.8045 145.3) (end 87.388 144.7165) (width 0.25) (layer F.Cu) (net 17) (tstamp 56AEC46C)) + (segment (start 86.8045 146.304) (end 86.8045 145.3) (width 0.25) (layer F.Cu) (net 17) (tstamp 56AEC46B)) + (segment (start 85.5985 147.51) (end 86.8045 146.304) (width 0.25) (layer F.Cu) (net 17) (tstamp 56AEC46A)) + (segment (start 87.388 143.129) (end 87.388 144.7165) (width 0.25) (layer F.Cu) (net 17)) + (segment (start 84.717 146.71) (end 83.845 146.71) (width 0.25) (layer F.Cu) (net 18)) + (segment (start 79.6798 144.9832) (end 79.6543 144.9832) (width 0.25) (layer F.Cu) (net 18) (tstamp 56AECE5E)) + (via (at 79.6798 144.9832) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 18)) + (segment (start 83.312 145.7325) (end 79.6798 144.9832) (width 0.25) (layer B.Cu) (net 18) (tstamp 56AECE5C)) + (segment (start 83.3755 145.796) (end 83.312 145.7325) (width 0.25) (layer B.Cu) (net 18) (tstamp 56AECE5B)) + (via (at 83.3755 145.796) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 18)) + (segment (start 83.5025 145.923) (end 83.3755 145.796) (width 0.25) (layer F.Cu) (net 18) (tstamp 56AECE57)) + (segment (start 83.5025 146.3675) (end 83.5025 145.923) (width 0.25) (layer F.Cu) (net 18) (tstamp 56AECE55)) + (segment (start 83.845 146.71) (end 83.5025 146.3675) (width 0.25) (layer F.Cu) (net 18) (tstamp 56AECE4D)) + (segment (start 79.6798 144.7927) (end 79.6543 144.7927) (width 0.25) (layer F.Cu) (net 18) (tstamp 56AEC488)) + (segment (start 79.6543 144.7927) (end 79.6798 144.7927) (width 0.25) (layer F.Cu) (net 18) (tstamp 56AEC489)) + (segment (start 79.6798 144.7927) (end 79.6543 144.7927) (width 0.25) (layer F.Cu) (net 18) (tstamp 56AEC48B)) + (segment (start 79.667 149.36) (end 79.6543 144.9832) (width 0.25) (layer F.Cu) (net 18)) + (segment (start 79.6543 144.9832) (end 79.6543 144.7927) (width 0.25) (layer F.Cu) (net 18) (tstamp 56AECE61)) + (segment (start 79.6543 144.7927) (end 79.4765 140.5891) (width 0.25) (layer F.Cu) (net 18) (tstamp 56AEC48C)) + (segment (start 82.7405 127) (end 84.361 127) (width 0.25) (layer F.Cu) (net 18) (tstamp 56AEB70A)) + (via (at 82.7405 127) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 18)) + (segment (start 81.9785 127.762) (end 82.7405 127) (width 0.25) (layer B.Cu) (net 18) (tstamp 56AEB708)) + (segment (start 81.9785 131.318) (end 81.9785 127.762) (width 0.25) (layer B.Cu) (net 18) (tstamp 56AEB707)) + (segment (start 79.6925 133.604) (end 81.9785 131.318) (width 0.25) (layer B.Cu) (net 18) (tstamp 56AEB706)) + (segment (start 79.502 140.5636) (end 79.6925 133.604) (width 0.25) (layer B.Cu) (net 18) (tstamp 56AEB705)) + (via (at 79.502 140.5636) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 18)) + (segment (start 79.4765 140.5891) (end 79.502 140.5636) (width 0.25) (layer F.Cu) (net 18) (tstamp 56AEB703)) + (segment (start 84.361 128.27) (end 84.361 127) (width 0.25) (layer F.Cu) (net 18)) + (segment (start 88.7984 140.5128) (end 89.4207 140.5255) (width 0.25) (layer F.Cu) (net 20)) + (segment (start 85.928 145.11) (end 84.717 145.11) (width 0.25) (layer F.Cu) (net 20) (tstamp 56AF1899)) + (segment (start 86.0552 145.2372) (end 85.928 145.11) (width 0.25) (layer F.Cu) (net 20) (tstamp 56AF1898)) + (via (at 86.0552 145.2372) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 20)) + (segment (start 86.2076 145.0848) (end 86.0552 145.2372) (width 0.25) (layer B.Cu) (net 20) (tstamp 56AF1894)) + (segment (start 86.7156 145.0848) (end 86.2076 145.0848) (width 0.25) (layer B.Cu) (net 20) (tstamp 56AF1893)) + (segment (start 89.408 142.3924) (end 86.7156 145.0848) (width 0.25) (layer B.Cu) (net 20) (tstamp 56AF1892)) + (segment (start 89.408 140.716) (end 89.408 142.3924) (width 0.25) (layer B.Cu) (net 20) (tstamp 56AF1891)) + (segment (start 89.5096 140.6144) (end 89.408 140.716) (width 0.25) (layer B.Cu) (net 20) (tstamp 56AF1890)) + (via (at 89.5096 140.6144) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 20)) + (segment (start 89.4207 140.5255) (end 89.5096 140.6144) (width 0.25) (layer F.Cu) (net 20) (tstamp 56AF1888)) + (segment (start 86.868 140.5128) (end 87.146002 140.5128) (width 0.25) (layer F.Cu) (net 21)) + (segment (start 85.814 144.31) (end 84.717 144.31) (width 0.25) (layer F.Cu) (net 21) (tstamp 56AF1A41)) + (segment (start 85.9028 144.2212) (end 85.814 144.31) (width 0.25) (layer F.Cu) (net 21) (tstamp 56AF1A40)) + (segment (start 85.9028 144.0688) (end 85.9028 144.2212) (width 0.25) (layer F.Cu) (net 21) (tstamp 56AF1A3F)) + (segment (start 86.3092 143.6624) (end 85.9028 144.0688) (width 0.25) (layer F.Cu) (net 21) (tstamp 56AF1A3E)) + (via (at 86.3092 143.6624) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 21)) + (segment (start 86.36 143.6624) (end 86.3092 143.6624) (width 0.25) (layer B.Cu) (net 21) (tstamp 56AF1A3C)) + (segment (start 87.6808 142.3416) (end 86.36 143.6624) (width 0.25) (layer B.Cu) (net 21) (tstamp 56AF1A3B)) + (segment (start 87.6808 141.3256) (end 87.6808 142.3416) (width 0.25) (layer B.Cu) (net 21) (tstamp 56AF1A3A)) + (via (at 87.6808 141.3256) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 21)) + (segment (start 87.6808 141.047598) (end 87.6808 141.3256) (width 0.25) (layer F.Cu) (net 21) (tstamp 56AF1A37)) + (segment (start 87.146002 140.5128) (end 87.6808 141.047598) (width 0.25) (layer F.Cu) (net 21) (tstamp 56AF1A2F)) + (segment (start 84.717 143.51) (end 83.5152 143.51) (width 0.25) (layer F.Cu) (net 22)) + (segment (start 79.4182 131.6228) (end 78.961 132.08) (width 0.25) (layer F.Cu) (net 22) (tstamp 56AED6F7)) + (segment (start 80.1116 131.6228) (end 79.4182 131.6228) (width 0.25) (layer F.Cu) (net 22) (tstamp 56AED6F6)) + (segment (start 80.3656 131.8768) (end 80.1116 131.6228) (width 0.25) (layer F.Cu) (net 22) (tstamp 56AED6F5)) + (via (at 80.3656 131.8768) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 22)) + (segment (start 80.3656 132.2324) (end 80.3656 131.8768) (width 0.25) (layer B.Cu) (net 22) (tstamp 56AED6F2)) + (segment (start 78.9432 133.6548) (end 80.3656 132.2324) (width 0.25) (layer B.Cu) (net 22) (tstamp 56AED6EF)) + (segment (start 78.6384 141.986) (end 78.9432 133.6548) (width 0.25) (layer B.Cu) (net 22) (tstamp 56AED6E6)) + (segment (start 79.8068 142.3416) (end 78.6384 141.986) (width 0.25) (layer B.Cu) (net 22) (tstamp 56AED6E3)) + (segment (start 81.3308 142.494) (end 79.8068 142.3416) (width 0.25) (layer B.Cu) (net 22) (tstamp 56AED6E2)) + (segment (start 82.811049 143.452151) (end 81.3308 142.494) (width 0.25) (layer B.Cu) (net 22) (tstamp 56AED6DF)) + (segment (start 83.254151 143.452151) (end 82.811049 143.452151) (width 0.25) (layer B.Cu) (net 22) (tstamp 56AED6DE)) + (segment (start 83.4136 143.6116) (end 83.254151 143.452151) (width 0.25) (layer B.Cu) (net 22) (tstamp 56AED6DD)) + (via (at 83.4136 143.6116) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 22)) + (segment (start 83.5152 143.51) (end 83.4136 143.6116) (width 0.25) (layer F.Cu) (net 22) (tstamp 56AED6DB)) + (segment (start 78.961 129.54) (end 79.9084 129.54) (width 0.25) (layer F.Cu) (net 23)) + (segment (start 79.9084 129.54) (end 80.264 129.8956) (width 0.25) (layer F.Cu) (net 23) (tstamp 56AF1868)) + (segment (start 80.264 129.8956) (end 80.264 130.7592) (width 0.25) (layer F.Cu) (net 23) (tstamp 56AF1869)) + (segment (start 80.264 130.7592) (end 81.026 131.5212) (width 0.25) (layer F.Cu) (net 23) (tstamp 56AF186A)) + (segment (start 81.026 131.5212) (end 81.026 134.1628) (width 0.25) (layer F.Cu) (net 23) (tstamp 56AF186B)) + (segment (start 81.026 134.1628) (end 81.8388 134.9756) (width 0.25) (layer F.Cu) (net 23) (tstamp 56AF186E)) + (via (at 81.8388 134.9756) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 23)) + (segment (start 81.8388 134.9756) (end 81.788 135.0264) (width 0.25) (layer B.Cu) (net 23) (tstamp 56AF1873)) + (segment (start 81.788 135.0264) (end 81.788 140.462) (width 0.25) (layer B.Cu) (net 23) (tstamp 56AF1874)) + (segment (start 81.788 140.462) (end 82.3468 141.1224) (width 0.25) (layer B.Cu) (net 23) (tstamp 56AF1875)) + (segment (start 82.3468 141.1224) (end 83.058 141.0716) (width 0.25) (layer B.Cu) (net 23) (tstamp 56AF1879)) + (via (at 83.058 141.0716) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 23)) + (segment (start 83.058 141.0716) (end 83.528 142.71) (width 0.25) (layer F.Cu) (net 23) (tstamp 56AF187E)) + (segment (start 83.528 142.71) (end 84.717 142.71) (width 0.25) (layer F.Cu) (net 23) (tstamp 56AF187F)) + (segment (start 80.467 137.66) (end 80.467 139.141) (width 0.25) (layer F.Cu) (net 27)) + (segment (start 80.836 139.51) (end 84.717 139.51) (width 0.25) (layer F.Cu) (net 27) (tstamp 56AEB57C)) + (segment (start 80.467 139.141) (end 80.836 139.51) (width 0.25) (layer F.Cu) (net 27) (tstamp 56AEB57B)) + (segment (start 82.867 136.462) (end 82.867 137.66) (width 0.25) (layer F.Cu) (net 28) (tstamp 56AED0EE)) + (segment (start 82.931 136.398) (end 82.867 136.462) (width 0.25) (layer F.Cu) (net 28) (tstamp 56AED0ED)) + (via (at 82.931 136.398) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 28)) + (segment (start 88.646 136.398) (end 82.931 136.398) (width 0.25) (layer B.Cu) (net 28) (tstamp 56AED0E5)) + (segment (start 89.662 135.382) (end 88.646 136.398) (width 0.25) (layer B.Cu) (net 28) (tstamp 56AED0E4)) + (segment (start 90.678 135.382) (end 89.662 135.382) (width 0.25) (layer B.Cu) (net 28) (tstamp 56AED0E3)) + (segment (start 90.805 135.509) (end 90.678 135.382) (width 0.25) (layer B.Cu) (net 28) (tstamp 56AED0E2)) + (via (at 90.805 135.509) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 28)) + (segment (start 91.313 136.017) (end 90.805 135.509) (width 0.25) (layer F.Cu) (net 28) (tstamp 56AED0DC)) + (segment (start 91.313 136.144) (end 91.313 136.017) (width 0.25) (layer F.Cu) (net 28)) + (segment (start 78.867 137.66) (end 78.867 136.652) (width 0.25) (layer F.Cu) (net 31)) + (segment (start 88.5825 137.414) (end 89.281 137.414) (width 0.25) (layer F.Cu) (net 31) (tstamp 56AED1CF)) + (segment (start 88.5825 135.636) (end 88.5825 137.414) (width 0.25) (layer F.Cu) (net 31) (tstamp 56AED1CE)) + (segment (start 88.4555 135.509) (end 88.5825 135.636) (width 0.25) (layer F.Cu) (net 31) (tstamp 56AED1CD)) + (via (at 88.4555 135.509) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 31)) + (segment (start 82.55 135.509) (end 88.4555 135.509) (width 0.25) (layer B.Cu) (net 31) (tstamp 56AED1CB)) + (segment (start 82.423 135.636) (end 82.55 135.509) (width 0.25) (layer B.Cu) (net 31) (tstamp 56AED1CA)) + (via (at 82.423 135.636) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 31)) + (segment (start 81.7245 136.3345) (end 82.423 135.636) (width 0.25) (layer F.Cu) (net 31) (tstamp 56AED1C6)) + (segment (start 79.1845 136.3345) (end 81.7245 136.3345) (width 0.25) (layer F.Cu) (net 31) (tstamp 56AED1C5)) + (segment (start 78.867 136.652) (end 79.1845 136.3345) (width 0.25) (layer F.Cu) (net 31) (tstamp 56AED1C4)) + (segment (start 78.867 137.66) (end 78.867 136.906) (width 0.25) (layer F.Cu) (net 31)) + (segment (start 73.017 140.31) (end 73.9136 140.31) (width 0.25) (layer F.Cu) (net 36)) + (segment (start 81.28 125.159) (end 82.045 124.394) (width 0.25) (layer F.Cu) (net 36) (tstamp 56AED6A2)) + (segment (start 81.28 125.4252) (end 81.28 125.159) (width 0.25) (layer F.Cu) (net 36) (tstamp 56AED6A1)) + (segment (start 81.1784 125.5268) (end 81.28 125.4252) (width 0.25) (layer F.Cu) (net 36) (tstamp 56AED6A0)) + (via (at 81.1784 125.5268) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 36)) + (segment (start 81.1784 129.1844) (end 81.1784 125.5268) (width 0.25) (layer B.Cu) (net 36) (tstamp 56AED69D)) + (segment (start 78.8924 131.4704) (end 81.1784 129.1844) (width 0.25) (layer B.Cu) (net 36) (tstamp 56AED69B)) + (segment (start 78.8924 133.0452) (end 78.8924 131.4704) (width 0.25) (layer B.Cu) (net 36) (tstamp 56AED699)) + (segment (start 76.4032 135.5344) (end 78.8924 133.0452) (width 0.25) (layer B.Cu) (net 36) (tstamp 56AED697)) + (segment (start 76.4032 137.8204) (end 76.4032 135.5344) (width 0.25) (layer B.Cu) (net 36) (tstamp 56AED695)) + (segment (start 74.8792 139.3444) (end 76.4032 137.8204) (width 0.25) (layer B.Cu) (net 36) (tstamp 56AED694)) + (via (at 74.8792 139.3444) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 36)) + (segment (start 73.9136 140.31) (end 74.8792 139.3444) (width 0.25) (layer F.Cu) (net 36) (tstamp 56AED690)) + (segment (start 90.7574 123.22854) (end 90.7574 124.0949) (width 0.25) (layer F.Cu) (net 38)) + (segment (start 74.981 141.91) (end 73.017 141.91) (width 0.25) (layer F.Cu) (net 38) (tstamp 56AED50D)) + (segment (start 75.184 142.113) (end 74.981 141.91) (width 0.25) (layer F.Cu) (net 38) (tstamp 56AED50C)) + (via (at 75.184 142.113) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 38)) + (segment (start 75.6285 142.5575) (end 75.184 142.113) (width 0.25) (layer B.Cu) (net 38) (tstamp 56AED50A)) + (segment (start 75.6285 147.5105) (end 75.6285 142.5575) (width 0.25) (layer B.Cu) (net 38) (tstamp 56AED509)) + (segment (start 76.327 148.209) (end 75.6285 147.5105) (width 0.25) (layer B.Cu) (net 38) (tstamp 56AED508)) + (segment (start 76.327 149.5425) (end 76.327 148.209) (width 0.25) (layer B.Cu) (net 38) (tstamp 56AED506)) + (segment (start 78.486 151.7015) (end 76.327 149.5425) (width 0.25) (layer B.Cu) (net 38) (tstamp 56AED504)) + (segment (start 90.4875 151.7015) (end 78.486 151.7015) (width 0.25) (layer B.Cu) (net 38) (tstamp 56AED502)) + (segment (start 93.345 148.844) (end 90.4875 151.7015) (width 0.25) (layer B.Cu) (net 38) (tstamp 56AED500)) + (segment (start 93.345 136.017) (end 93.345 148.844) (width 0.25) (layer B.Cu) (net 38) (tstamp 56AED4FE)) + (segment (start 91.694 134.366) (end 93.345 136.017) (width 0.25) (layer B.Cu) (net 38) (tstamp 56AED4FC)) + (segment (start 91.694 125.0315) (end 91.694 134.366) (width 0.25) (layer B.Cu) (net 38) (tstamp 56AED4FB)) + (segment (start 91.3765 124.714) (end 91.694 125.0315) (width 0.25) (layer B.Cu) (net 38) (tstamp 56AED4FA)) + (via (at 91.3765 124.714) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 38)) + (segment (start 90.7574 124.0949) (end 91.3765 124.714) (width 0.25) (layer F.Cu) (net 38) (tstamp 56AED4F8)) + (segment (start 73.017 142.71) (end 74.384 142.71) (width 0.25) (layer F.Cu) (net 39)) + (segment (start 90.1074 124.5226) (end 90.1074 123.22854) (width 0.25) (layer F.Cu) (net 39) (tstamp 56AED729)) + (segment (start 90.0176 124.6124) (end 90.1074 124.5226) (width 0.25) (layer F.Cu) (net 39) (tstamp 56AED728)) + (via (at 90.0176 124.6124) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 39)) + (segment (start 89.1032 124.6124) (end 90.0176 124.6124) (width 0.25) (layer B.Cu) (net 39) (tstamp 56AED726)) + (segment (start 88.392 125.3236) (end 89.1032 124.6124) (width 0.25) (layer B.Cu) (net 39) (tstamp 56AED725)) + (segment (start 88.392 133.7056) (end 88.392 125.3236) (width 0.25) (layer B.Cu) (net 39) (tstamp 56AED722)) + (segment (start 87.8332 134.2644) (end 88.392 133.7056) (width 0.25) (layer B.Cu) (net 39) (tstamp 56AED71D)) + (segment (start 83.0072 134.2644) (end 87.8332 134.2644) (width 0.25) (layer B.Cu) (net 39) (tstamp 56AED71C)) + (segment (start 82.6516 133.9088) (end 83.0072 134.2644) (width 0.25) (layer B.Cu) (net 39) (tstamp 56AED71B)) + (segment (start 81.6864 133.9088) (end 82.6516 133.9088) (width 0.25) (layer B.Cu) (net 39) (tstamp 56AED71A)) + (segment (start 81.1784 134.4168) (end 81.6864 133.9088) (width 0.25) (layer B.Cu) (net 39) (tstamp 56AED719)) + (segment (start 80.9244 141.605) (end 81.1784 134.4168) (width 0.25) (layer B.Cu) (net 39) (tstamp 56AED718)) + (segment (start 80.8736 141.6558) (end 80.9244 141.605) (width 0.25) (layer B.Cu) (net 39) (tstamp 56AED717)) + (via (at 80.8736 141.6558) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 39)) + (segment (start 81.1276 144.1704) (end 80.8736 141.6558) (width 0.25) (layer F.Cu) (net 39) (tstamp 56AED710)) + (segment (start 81.2292 144.272) (end 81.1276 144.1704) (width 0.25) (layer F.Cu) (net 39) (tstamp 56AED70F)) + (via (at 81.2292 144.272) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 39)) + (segment (start 79.502 144.272) (end 81.2292 144.272) (width 0.25) (layer B.Cu) (net 39) (tstamp 56AED70B)) + (segment (start 78.9432 143.7132) (end 79.502 144.272) (width 0.25) (layer B.Cu) (net 39) (tstamp 56AED70A)) + (via (at 78.9432 143.7132) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 39)) + (segment (start 75.3872 143.7132) (end 78.9432 143.7132) (width 0.25) (layer F.Cu) (net 39) (tstamp 56AED706)) + (segment (start 74.384 142.71) (end 75.3872 143.7132) (width 0.25) (layer F.Cu) (net 39) (tstamp 56AED6FC)) + (segment (start 73.017 143.51) (end 72.136 143.51) (width 0.25) (layer F.Cu) (net 40)) + (segment (start 72.136 143.51) (end 71.8185 143.1925) (width 0.25) (layer F.Cu) (net 40) (tstamp 56AF1DAD)) + (segment (start 71.8185 143.1925) (end 71.8185 141.2875) (width 0.25) (layer F.Cu) (net 40) (tstamp 56AF1DAE)) + (segment (start 71.8185 141.2875) (end 71.0685 140.5375) (width 0.25) (layer F.Cu) (net 40) (tstamp 56AF1DAF)) + (segment (start 71.0685 140.5375) (end 69.7491 140.5375) (width 0.25) (layer F.Cu) (net 40) (tstamp 56AF1DB0)) + (segment (start 69.7491 140.5375) (end 69.7484 140.5368) (width 0.25) (layer F.Cu) (net 40) (tstamp 56AF1DB1)) + (segment (start 71.0685 140.5375) (end 70.231 140.5375) (width 0.25) (layer F.Cu) (net 40) (tstamp 56AEB604)) + (segment (start 71.8185 141.2875) (end 71.0685 140.5375) (width 0.25) (layer F.Cu) (net 40) (tstamp 56AEB603)) + (segment (start 71.8185 143.1925) (end 71.8185 141.2875) (width 0.25) (layer F.Cu) (net 40) (tstamp 56AEB602)) + (segment (start 72.136 143.51) (end 71.8185 143.1925) (width 0.25) (layer F.Cu) (net 40) (tstamp 56AEB601)) + (segment (start 70.0405 143.141) (end 70.9415 143.141) (width 0.25) (layer F.Cu) (net 41)) + (segment (start 70.9415 143.141) (end 72.1105 144.31) (width 0.25) (layer F.Cu) (net 41) (tstamp 56AEC5EC)) + (segment (start 72.1105 144.31) (end 73.017 144.31) (width 0.25) (layer F.Cu) (net 41) (tstamp 56AEC5ED)) + (segment (start 70.231 143.141) (end 70.624 143.141) (width 0.25) (layer F.Cu) (net 41)) + (segment (start 69.7865 145.7445) (end 69.7865 146.3675) (width 0.25) (layer F.Cu) (net 42)) + (segment (start 74.2442 146.5326) (end 73.169 146.558) (width 0.25) (layer F.Cu) (net 42) (tstamp 56AEC662)) + (segment (start 74.3458 146.7612) (end 74.2442 146.5326) (width 0.25) (layer F.Cu) (net 42) (tstamp 56AEC661)) + (via (at 74.3458 146.7612) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 42)) + (segment (start 74.3458 147.0152) (end 74.3458 146.7612) (width 0.25) (layer B.Cu) (net 42) (tstamp 56AEC65F)) + (segment (start 74.041 147.574) (end 74.3458 147.0152) (width 0.25) (layer B.Cu) (net 42) (tstamp 56AEC65E)) + (segment (start 71.0057 147.5105) (end 74.041 147.574) (width 0.25) (layer B.Cu) (net 42) (tstamp 56AEC65D)) + (segment (start 70.8152 147.32) (end 71.0057 147.5105) (width 0.25) (layer B.Cu) (net 42) (tstamp 56AEC65C)) + (via (at 70.8152 147.32) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 42)) + (segment (start 70.5485 146.8755) (end 70.8152 147.32) (width 0.25) (layer F.Cu) (net 42) (tstamp 56AEC657)) + (segment (start 70.5485 146.685) (end 70.5485 146.8755) (width 0.25) (layer F.Cu) (net 42) (tstamp 56AEC656)) + (segment (start 70.358 146.4945) (end 70.5485 146.685) (width 0.25) (layer F.Cu) (net 42) (tstamp 56AEC651)) + (segment (start 69.9135 146.4945) (end 70.358 146.4945) (width 0.25) (layer F.Cu) (net 42) (tstamp 56AEC650)) + (segment (start 69.7865 146.3675) (end 69.9135 146.4945) (width 0.25) (layer F.Cu) (net 42) (tstamp 56AEC64D)) + (segment (start 73.169 146.558) (end 73.017 146.71) (width 0.25) (layer F.Cu) (net 42) (tstamp 56AEC663)) + (segment (start 72.992 146.685) (end 73.017 146.71) (width 0.25) (layer F.Cu) (net 42) (tstamp 56AEC5CF)) + (segment (start 70.231 148.348) (end 70.231 148.6916) (width 0.25) (layer F.Cu) (net 43)) + (segment (start 73.017 148.3026) (end 73.017 147.51) (width 0.25) (layer F.Cu) (net 43) (tstamp 56AF1E10)) + (segment (start 73.1266 148.4122) (end 73.017 148.3026) (width 0.25) (layer F.Cu) (net 43) (tstamp 56AF1E0F)) + (via (at 73.1266 148.4122) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 43)) + (segment (start 73.152 148.4376) (end 73.1266 148.4122) (width 0.25) (layer B.Cu) (net 43) (tstamp 56AF1E0D)) + (segment (start 73.152 149.352) (end 73.152 148.4376) (width 0.25) (layer B.Cu) (net 43) (tstamp 56AF1E0C)) + (segment (start 72.517 149.987) (end 73.152 149.352) (width 0.25) (layer B.Cu) (net 43) (tstamp 56AF1E0B)) + (segment (start 71.882 149.987) (end 72.517 149.987) (width 0.25) (layer B.Cu) (net 43) (tstamp 56AF1E0A)) + (segment (start 71.6788 149.7838) (end 71.882 149.987) (width 0.25) (layer B.Cu) (net 43) (tstamp 56AF1E09)) + (via (at 71.6788 149.7838) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 43)) + (segment (start 71.6788 149.5298) (end 71.6788 149.7838) (width 0.25) (layer F.Cu) (net 43) (tstamp 56AF1E07)) + (segment (start 71.2724 149.1234) (end 71.6788 149.5298) (width 0.25) (layer F.Cu) (net 43) (tstamp 56AF1E06)) + (segment (start 70.6628 149.1234) (end 71.2724 149.1234) (width 0.25) (layer F.Cu) (net 43) (tstamp 56AF1DFF)) + (segment (start 70.231 148.6916) (end 70.6628 149.1234) (width 0.25) (layer F.Cu) (net 43) (tstamp 56AF1DFE)) + (segment (start 74.867 149.36) (end 74.867 147.5735) (width 0.25) (layer F.Cu) (net 44)) + (segment (start 85.344 149.86) (end 87.5665 149.86) (width 0.25) (layer F.Cu) (net 44) (tstamp 56AEC3BE)) + (segment (start 83.5025 148.0185) (end 85.344 149.86) (width 0.25) (layer F.Cu) (net 44) (tstamp 56AEC3BD)) + (segment (start 83.5025 147.066) (end 83.5025 148.0185) (width 0.25) (layer F.Cu) (net 44) (tstamp 56AEC3BC)) + (segment (start 82.8675 146.431) (end 83.5025 147.066) (width 0.25) (layer F.Cu) (net 44) (tstamp 56AEC3BB)) + (via (at 82.8675 146.431) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 44)) + (segment (start 78.9432 145.7198) (end 82.8675 146.431) (width 0.25) (layer B.Cu) (net 44) (tstamp 56AEC3B8)) + (via (at 78.9432 145.7198) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 44)) + (segment (start 76.0095 146.431) (end 78.9432 145.7198) (width 0.25) (layer F.Cu) (net 44) (tstamp 56AEC3B3)) + (segment (start 74.867 147.5735) (end 76.0095 146.431) (width 0.25) (layer F.Cu) (net 44) (tstamp 56AEC3B1)) + (segment (start 75.667 149.36) (end 75.667 147.853) (width 0.25) (layer F.Cu) (net 45)) + (segment (start 86.8045 148.082) (end 87.5665 147.32) (width 0.25) (layer B.Cu) (net 45) (tstamp 56AEC548)) + (segment (start 85.1535 148.082) (end 86.8045 148.082) (width 0.25) (layer B.Cu) (net 45) (tstamp 56AEC547)) + (segment (start 84.7725 148.463) (end 85.1535 148.082) (width 0.25) (layer B.Cu) (net 45) (tstamp 56AEC546)) + (segment (start 84.201 148.463) (end 84.7725 148.463) (width 0.25) (layer B.Cu) (net 45) (tstamp 56AEC545)) + (segment (start 82.8675 147.1295) (end 84.201 148.463) (width 0.25) (layer B.Cu) (net 45) (tstamp 56AEC544)) + (segment (start 78.5368 146.6342) (end 82.8675 147.1295) (width 0.25) (layer B.Cu) (net 45) (tstamp 56AEC543)) + (via (at 78.5368 146.6342) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 45)) + (segment (start 75.667 147.853) (end 78.5368 146.6342) (width 0.25) (layer F.Cu) (net 45) (tstamp 56AEC53C)) + (segment (start 84.361 133.35) (end 82.9945 133.35) (width 0.25) (layer F.Cu) (net 49)) + (segment (start 81.267 148.0055) (end 81.267 149.36) (width 0.25) (layer F.Cu) (net 49) (tstamp 56AEBA1A)) + (segment (start 80.4545 147.193) (end 81.267 148.0055) (width 0.25) (layer F.Cu) (net 49) (tstamp 56AEBA19)) + (segment (start 80.2005 141.2367) (end 80.4545 147.193) (width 0.25) (layer F.Cu) (net 49) (tstamp 56AEBA17)) + (segment (start 80.137 141.1732) (end 80.2005 141.2367) (width 0.25) (layer F.Cu) (net 49) (tstamp 56AEBA16)) + (via (at 80.137 141.1732) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 49)) + (segment (start 80.391 133.9215) (end 80.137 141.1732) (width 0.25) (layer B.Cu) (net 49) (tstamp 56AEBA12)) + (segment (start 80.9625 133.35) (end 80.391 133.9215) (width 0.25) (layer B.Cu) (net 49) (tstamp 56AEBA11)) + (segment (start 82.9945 133.35) (end 80.9625 133.35) (width 0.25) (layer B.Cu) (net 49) (tstamp 56AEBA10)) + (via (at 82.9945 133.35) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 49)) + (segment (start 84.361 133.35) (end 84.361 134.62) (width 0.25) (layer F.Cu) (net 49)) + (segment (start 82.867 149.36) (end 82.867 150.3294) (width 0.25) (layer F.Cu) (net 51)) + (segment (start 86.741 126.0602) (end 86.741 126.238) (width 0.25) (layer B.Cu) (net 51) (tstamp 56AF1F4D)) + (segment (start 88.9254 123.8758) (end 86.741 126.0602) (width 0.25) (layer B.Cu) (net 51) (tstamp 56AF1F4B)) + (segment (start 91.7702 123.8758) (end 88.9254 123.8758) (width 0.25) (layer B.Cu) (net 51) (tstamp 56AF1F4A)) + (segment (start 92.1766 124.2822) (end 91.7702 123.8758) (width 0.25) (layer B.Cu) (net 51) (tstamp 56AF1F49)) + (segment (start 92.1766 133.5786) (end 92.1766 124.2822) (width 0.25) (layer B.Cu) (net 51) (tstamp 56AF1F45)) + (segment (start 93.9546 135.3566) (end 92.1766 133.5786) (width 0.25) (layer B.Cu) (net 51) (tstamp 56AF1F39)) + (segment (start 93.9546 141.732) (end 93.9546 135.3566) (width 0.25) (layer B.Cu) (net 51) (tstamp 56AF1F32)) + (segment (start 94.0308 141.8082) (end 93.9546 141.732) (width 0.25) (layer B.Cu) (net 51) (tstamp 56AF1F31)) + (via (at 94.0308 141.8082) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 51)) + (segment (start 94.0308 142.5956) (end 94.0308 141.8082) (width 0.25) (layer F.Cu) (net 51) (tstamp 56AF1F2F)) + (segment (start 92.2528 144.3736) (end 94.0308 142.5956) (width 0.25) (layer F.Cu) (net 51) (tstamp 56AF1F2E)) + (via (at 92.2528 144.3736) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 51)) + (segment (start 92.2528 147.5486) (end 92.2528 144.3736) (width 0.25) (layer B.Cu) (net 51) (tstamp 56AF1F2A)) + (segment (start 91.1352 148.6662) (end 92.2528 147.5486) (width 0.25) (layer B.Cu) (net 51) (tstamp 56AF1F29)) + (segment (start 85.725 148.6662) (end 91.1352 148.6662) (width 0.25) (layer B.Cu) (net 51) (tstamp 56AF1F27)) + (segment (start 84.4042 149.987) (end 85.725 148.6662) (width 0.25) (layer B.Cu) (net 51) (tstamp 56AF1F26)) + (via (at 84.4042 149.987) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 51)) + (segment (start 84.0994 150.2918) (end 84.4042 149.987) (width 0.25) (layer F.Cu) (net 51) (tstamp 56AF1F24)) + (segment (start 82.9046 150.2918) (end 84.0994 150.2918) (width 0.25) (layer F.Cu) (net 51) (tstamp 56AF1F23)) + (segment (start 82.867 150.3294) (end 82.9046 150.2918) (width 0.25) (layer F.Cu) (net 51) (tstamp 56AF1F21)) + (segment (start 87.4275 135.624) (end 87.4275 135.3185) (width 0.25) (layer F.Cu) (net 51) (tstamp 56AEC535)) + (segment (start 87.4275 133.731) (end 87.0585 133.731) (width 0.25) (layer F.Cu) (net 51)) + (segment (start 86.741 126.238) (end 87.1855 125.7935) (width 0.25) (layer F.Cu) (net 51) (tstamp 56AEB889)) + (via (at 86.741 126.238) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 51)) + (segment (start 86.741 133.4135) (end 86.741 126.238) (width 0.25) (layer B.Cu) (net 51) (tstamp 56AEB882)) + (via (at 86.741 133.4135) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 51)) + (segment (start 87.0585 133.731) (end 86.741 133.4135) (width 0.25) (layer F.Cu) (net 51) (tstamp 56AEB87F)) + (segment (start 87.1855 125.7935) (end 87.4275 125.7935) (width 0.25) (layer F.Cu) (net 51) (tstamp 56AEB88A)) + (segment (start 87.4275 135.3185) (end 87.4275 136.906) (width 0.25) (layer F.Cu) (net 51)) + (segment (start 87.4275 135.3185) (end 87.4275 133.731) (width 0.25) (layer F.Cu) (net 51)) + (segment (start 68.6435 148.348) (end 66.282 148.348) (width 0.25) (layer F.Cu) (net 53)) + (segment (start 66.282 148.348) (end 66.04 148.59) (width 0.25) (layer F.Cu) (net 53) (tstamp 56AEB282)) + (segment (start 66.04 146.05) (end 68.1475 146.05) (width 0.25) (layer F.Cu) (net 54)) + (segment (start 68.1475 146.05) (end 68.453 145.7445) (width 0.25) (layer F.Cu) (net 54) (tstamp 56AECE66)) + (segment (start 66.3455 145.7445) (end 66.04 146.05) (width 0.25) (layer F.Cu) (net 54) (tstamp 56AEB27C)) + (segment (start 68.453 143.141) (end 66.409 143.141) (width 0.25) (layer F.Cu) (net 55)) + (segment (start 66.409 143.141) (end 66.04 143.51) (width 0.25) (layer F.Cu) (net 55) (tstamp 56AECE63)) + (segment (start 66.409 143.141) (end 66.04 143.51) (width 0.25) (layer F.Cu) (net 55) (tstamp 56AEB276)) + (segment (start 67.9704 140.5368) (end 66.4732 140.5368) (width 0.25) (layer F.Cu) (net 56)) + (segment (start 66.4732 140.5368) (end 66.04 140.97) (width 0.25) (layer F.Cu) (net 56) (tstamp 56AF1B67)) + (segment (start 66.4725 140.5375) (end 66.04 140.97) (width 0.25) (layer F.Cu) (net 56) (tstamp 56AEB617)) + (segment (start 66.4725 140.5375) (end 66.04 140.97) (width 0.25) (layer F.Cu) (net 56) (tstamp 56AEB271)) + (segment (start 91.2495 142.113) (end 91.2495 141.9733) (width 0.25) (layer B.Cu) (net 57)) + (segment (start 91.2495 141.9733) (end 92.7608 140.462) (width 0.25) (layer B.Cu) (net 57) (tstamp 56AF1B09)) + (segment (start 89.5858 136.779) (end 89.281 136.779) (width 0.25) (layer F.Cu) (net 57) (tstamp 56AF1B13)) + (segment (start 89.9668 137.16) (end 89.5858 136.779) (width 0.25) (layer F.Cu) (net 57) (tstamp 56AF1B12)) + (segment (start 89.9668 137.668) (end 89.9668 137.16) (width 0.25) (layer F.Cu) (net 57) (tstamp 56AF1B11)) + (segment (start 90.3732 138.0744) (end 89.9668 137.668) (width 0.25) (layer F.Cu) (net 57) (tstamp 56AF1B10)) + (via (at 90.3732 138.0744) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 57)) + (segment (start 91.9988 138.0744) (end 90.3732 138.0744) (width 0.25) (layer B.Cu) (net 57) (tstamp 56AF1B0D)) + (segment (start 92.7608 138.8364) (end 91.9988 138.0744) (width 0.25) (layer B.Cu) (net 57) (tstamp 56AF1B0C)) + (segment (start 92.7608 140.462) (end 92.7608 138.8364) (width 0.25) (layer B.Cu) (net 57) (tstamp 56AF1B0A)) + (segment (start 91.2495 142.113) (end 90.805 142.113) (width 0.25) (layer F.Cu) (net 57)) + (segment (start 91.2495 142.113) (end 90.7415 142.113) (width 0.25) (layer F.Cu) (net 57)) + (segment (start 91.313 136.779) (end 91.821 136.779) (width 0.25) (layer F.Cu) (net 58)) + (segment (start 91.948 136.906) (end 91.948 138.8745) (width 0.25) (layer F.Cu) (net 58) (tstamp 56AED202)) + (segment (start 91.821 136.779) (end 91.948 136.906) (width 0.25) (layer F.Cu) (net 58) (tstamp 56AED201)) + (segment (start 91.948 138.8745) (end 91.2495 139.573) (width 0.25) (layer F.Cu) (net 58) (tstamp 56AED203)) + (segment (start 85.9275 133.731) (end 85.9275 132.08) (width 0.25) (layer F.Cu) (net 59)) + (segment (start 85.9275 132.08) (end 84.361 132.08) (width 0.25) (layer F.Cu) (net 59)) + (segment (start 85.9275 125.7935) (end 82.7405 125.7935) (width 0.25) (layer F.Cu) (net 60)) + (segment (start 83.312 129.54) (end 84.361 129.54) (width 0.25) (layer F.Cu) (net 60) (tstamp 56AEB847)) + (segment (start 83.127002 129.355002) (end 83.312 129.54) (width 0.25) (layer F.Cu) (net 60) (tstamp 56AEB846)) + (segment (start 83.127002 128.339002) (end 83.127002 129.355002) (width 0.25) (layer F.Cu) (net 60) (tstamp 56AEB845)) + (segment (start 82.042 127.254) (end 83.127002 128.339002) (width 0.25) (layer F.Cu) (net 60) (tstamp 56AEB844)) + (segment (start 82.042 126.492) (end 82.042 127.254) (width 0.25) (layer F.Cu) (net 60) (tstamp 56AEB843)) + (segment (start 82.7405 125.7935) (end 82.042 126.492) (width 0.25) (layer F.Cu) (net 60) (tstamp 56AEB842)) + (segment (start 85.9275 127.381) (end 85.9275 125.7935) (width 0.25) (layer F.Cu) (net 60)) + (segment (start 84.4245 129.4765) (end 84.361 129.54) (width 0.25) (layer F.Cu) (net 60) (tstamp 56AEB752)) + (segment (start 67.9704 142.0368) (end 69.7484 142.0368) (width 0.25) (layer F.Cu) (net 61)) + (segment (start 68.453 144.641) (end 70.0405 144.641) (width 0.25) (layer F.Cu) (net 62)) + (segment (start 68.453 147.2445) (end 69.7865 147.2445) (width 0.25) (layer F.Cu) (net 63)) + (segment (start 68.6435 149.848) (end 70.231 149.848) (width 0.25) (layer F.Cu) (net 64)) + (segment (start 78.961 128.27) (end 80.01 128.27) (width 0.25) (layer F.Cu) (net 65)) + (segment (start 74.041 134.747) (end 74.041 137.033) (width 0.25) (layer B.Cu) (net 65) (tstamp 56AED68C)) + (segment (start 74.3204 134.4676) (end 74.041 134.747) (width 0.25) (layer B.Cu) (net 65) (tstamp 56AED68B)) + (segment (start 76.5048 134.4676) (end 74.3204 134.4676) (width 0.25) (layer B.Cu) (net 65) (tstamp 56AED689)) + (segment (start 78.0796 132.8928) (end 76.5048 134.4676) (width 0.25) (layer B.Cu) (net 65) (tstamp 56AED686)) + (segment (start 78.0796 130.2004) (end 78.0796 132.8928) (width 0.25) (layer B.Cu) (net 65) (tstamp 56AED685)) + (segment (start 78.6892 129.5908) (end 78.0796 130.2004) (width 0.25) (layer B.Cu) (net 65) (tstamp 56AED683)) + (segment (start 79.6036 129.5908) (end 78.6892 129.5908) (width 0.25) (layer B.Cu) (net 65) (tstamp 56AED682)) + (segment (start 80.4672 128.7272) (end 79.6036 129.5908) (width 0.25) (layer B.Cu) (net 65) (tstamp 56AED681)) + (via (at 80.4672 128.7272) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 65)) + (segment (start 80.01 128.27) (end 80.4672 128.7272) (width 0.25) (layer F.Cu) (net 65) (tstamp 56AED67D)) + (segment (start 71.616 138.938) (end 71.501 138.938) (width 0.25) (layer F.Cu) (net 65)) + (segment (start 71.501 138.938) (end 70.6755 138.1125) (width 0.25) (layer F.Cu) (net 65) (tstamp 56AEB5F6)) + (segment (start 69.2665 138.1125) (end 68.707 137.553) (width 0.25) (layer F.Cu) (net 65) (tstamp 56AEB5F8)) + (segment (start 70.6755 138.1125) (end 69.2665 138.1125) (width 0.25) (layer F.Cu) (net 65) (tstamp 56AEB5F7)) + (segment (start 74.041 137.033) (end 72.3265 137.033) (width 0.25) (layer B.Cu) (net 65)) + (segment (start 71.616 140.093) (end 71.616 138.938) (width 0.25) (layer F.Cu) (net 65) (tstamp 56AEB5F3)) + (segment (start 71.5645 140.1445) (end 71.616 140.093) (width 0.25) (layer F.Cu) (net 65) (tstamp 56AEB5F2)) + (via (at 71.5645 140.1445) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 65)) + (segment (start 71.5645 137.795) (end 71.5645 140.1445) (width 0.25) (layer B.Cu) (net 65) (tstamp 56AEB5F0)) + (segment (start 72.3265 137.033) (end 71.5645 137.795) (width 0.25) (layer B.Cu) (net 65) (tstamp 56AEB5E6)) + (segment (start 72.9615 137.045) (end 74.029 137.045) (width 0.25) (layer F.Cu) (net 65)) + (via (at 74.041 137.033) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 65)) + (segment (start 74.029 137.045) (end 74.041 137.033) (width 0.25) (layer F.Cu) (net 65) (tstamp 56AEB593)) + (segment (start 79.0245 128.3335) (end 78.961 128.27) (width 0.25) (layer F.Cu) (net 65) (tstamp 56AEB59E)) + (segment (start 86.868 141.1478) (end 86.6902 141.1478) (width 0.25) (layer F.Cu) (net 66)) + (segment (start 86.6902 141.1478) (end 86.1314 141.7066) (width 0.25) (layer F.Cu) (net 66) (tstamp 56AF1BF1)) + (segment (start 86.1314 141.7066) (end 86.1314 142.367) (width 0.25) (layer F.Cu) (net 66) (tstamp 56AF1BF3)) + (via (at 86.1314 142.367) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 66)) + (segment (start 86.1314 142.367) (end 85.8012 142.6972) (width 0.25) (layer B.Cu) (net 66) (tstamp 56AF1BF5)) + (segment (start 85.8012 142.6972) (end 82.9564 142.6972) (width 0.25) (layer B.Cu) (net 66) (tstamp 56AF1BF6)) + (segment (start 82.9564 142.6972) (end 81.6356 141.3764) (width 0.25) (layer B.Cu) (net 66) (tstamp 56AF1BF7)) + (via (at 81.6356 141.3764) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 66)) + (segment (start 81.6356 141.3764) (end 80.5942 140.335) (width 0.25) (layer F.Cu) (net 66) (tstamp 56AF1BFC)) + (segment (start 80.5942 140.335) (end 80.4164 140.335) (width 0.25) (layer F.Cu) (net 66) (tstamp 56AF1BFD)) + (segment (start 80.4164 140.335) (end 79.9846 139.9032) (width 0.25) (layer F.Cu) (net 66) (tstamp 56AF1BFE)) + (segment (start 79.9846 139.9032) (end 78.867 139.9032) (width 0.25) (layer F.Cu) (net 66) (tstamp 56AF1BFF)) + (segment (start 78.867 139.9032) (end 76.9366 141.8336) (width 0.25) (layer F.Cu) (net 66) (tstamp 56AF1C00)) + (segment (start 76.9366 141.8336) (end 76.9366 142.9512) (width 0.25) (layer F.Cu) (net 66) (tstamp 56AF1C02)) + (via (at 76.9366 142.9512) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 66)) + (segment (start 76.9366 142.9512) (end 76.5048 143.383) (width 0.25) (layer B.Cu) (net 66) (tstamp 56AF1C05)) + (segment (start 76.5048 143.383) (end 76.5048 144.4752) (width 0.25) (layer B.Cu) (net 66) (tstamp 56AF1C06)) + (segment (start 76.5048 144.4752) (end 76.3016 144.6784) (width 0.25) (layer B.Cu) (net 66) (tstamp 56AF1C07)) + (via (at 76.3016 144.6784) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 66)) + (segment (start 76.3016 144.6784) (end 76.0476 144.9324) (width 0.25) (layer F.Cu) (net 66) (tstamp 56AF1C09)) + (segment (start 76.0476 144.9324) (end 74.7268 144.9324) (width 0.25) (layer F.Cu) (net 66) (tstamp 56AF1C0A)) + (via (at 74.7268 144.9324) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 66)) + (segment (start 74.7268 144.9324) (end 71.4248 141.6304) (width 0.25) (layer B.Cu) (net 66) (tstamp 56AF1C0C)) + (segment (start 71.4248 141.6304) (end 71.1454 141.6304) (width 0.25) (layer B.Cu) (net 66) (tstamp 56AF1C0D)) + (via (at 71.1454 141.6304) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 66)) + (segment (start 71.1454 141.6304) (end 70.7898 141.2748) (width 0.25) (layer F.Cu) (net 66) (tstamp 56AF1C10)) + (segment (start 70.7898 141.2748) (end 69.088 141.2748) (width 0.25) (layer F.Cu) (net 66) (tstamp 56AF1C11)) + (segment (start 69.088 141.2748) (end 68.8848 141.0716) (width 0.25) (layer F.Cu) (net 66) (tstamp 56AF1C12)) + (segment (start 68.8848 141.0716) (end 68.8848 140.0048) (width 0.25) (layer F.Cu) (net 66) (tstamp 56AF1C13)) + (segment (start 68.8848 140.0048) (end 69.469 139.4206) (width 0.25) (layer F.Cu) (net 66) (tstamp 56AF1C14)) + (segment (start 69.469 139.4206) (end 69.469 138.938) (width 0.25) (layer F.Cu) (net 66) (tstamp 56AF1C15)) + (segment (start 70.116 138.938) (end 69.469 138.938) (width 0.25) (layer F.Cu) (net 66)) + (segment (start 69.469 138.938) (end 68.822 138.938) (width 0.25) (layer F.Cu) (net 66) (tstamp 56AECF5F)) + (segment (start 68.822 138.938) (end 68.707 139.053) (width 0.25) (layer F.Cu) (net 66) (tstamp 56AEB5FB)) + (segment (start 76.708 135.878) (end 79.7045 135.878) (width 0.25) (layer F.Cu) (net 67)) + (segment (start 80.0735 133.35) (end 78.961 133.35) (width 0.25) (layer F.Cu) (net 67) (tstamp 56AEB5A5)) + (segment (start 80.264 133.5405) (end 80.0735 133.35) (width 0.25) (layer F.Cu) (net 67) (tstamp 56AEB5A4)) + (segment (start 80.264 135.3185) (end 80.264 133.5405) (width 0.25) (layer F.Cu) (net 67) (tstamp 56AEB5A3)) + (segment (start 79.7045 135.878) (end 80.264 135.3185) (width 0.25) (layer F.Cu) (net 67) (tstamp 56AEB5A2)) + (segment (start 75.057 135.878) (end 76.708 135.878) (width 0.25) (layer F.Cu) (net 67)) + (segment (start 73.406 135.878) (end 75.057 135.878) (width 0.25) (layer F.Cu) (net 67)) + (segment (start 74.9815 134.378) (end 74.3585 135.001) (width 0.25) (layer F.Cu) (net 68) (tstamp 56AECDDD)) + (segment (start 88.2015 139.8905) (end 88.8492 139.9032) (width 0.25) (layer F.Cu) (net 68) (tstamp 56AECE13)) + (segment (start 88.1888 139.954) (end 88.2015 139.8905) (width 0.25) (layer F.Cu) (net 68) (tstamp 56AECE12)) + (segment (start 88.2396 140.208) (end 88.2396 139.954) (width 0.25) (layer F.Cu) (net 68) (tstamp 56AECE11)) + (segment (start 88.2396 139.954) (end 88.2396 140.208) (width 0.25) (layer F.Cu) (net 68) (tstamp 56AECE10)) + (via (at 88.1888 139.954) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 68)) + (segment (start 88.7222 142.367) (end 88.1888 139.954) (width 0.25) (layer B.Cu) (net 68) (tstamp 56AECE0A)) + (segment (start 86.4235 144.526) (end 88.7222 142.367) (width 0.25) (layer B.Cu) (net 68) (tstamp 56AECE05)) + (segment (start 82.296 144.7292) (end 86.4235 144.526) (width 0.25) (layer B.Cu) (net 68) (tstamp 56AECDFE)) + (segment (start 81.28 143.1544) (end 82.296 144.7292) (width 0.25) (layer B.Cu) (net 68) (tstamp 56AECDFD)) + (segment (start 78.8416 143.002) (end 81.28 143.1544) (width 0.25) (layer B.Cu) (net 68) (tstamp 56AECDFC)) + (segment (start 75.184 141.3256) (end 78.8416 143.002) (width 0.25) (layer B.Cu) (net 68) (tstamp 56AECDFB)) + (segment (start 71.374 140.97) (end 75.184 141.3256) (width 0.25) (layer B.Cu) (net 68) (tstamp 56AECDF5)) + (segment (start 70.8025 140.3985) (end 71.374 140.97) (width 0.25) (layer B.Cu) (net 68) (tstamp 56AECDF2)) + (segment (start 70.8025 136.017) (end 70.8025 140.3985) (width 0.25) (layer B.Cu) (net 68) (tstamp 56AECDF1)) + (segment (start 71.8185 135.001) (end 70.8025 136.017) (width 0.25) (layer B.Cu) (net 68) (tstamp 56AECDF0)) + (via (at 71.8185 135.001) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 68)) + (segment (start 74.3585 135.001) (end 71.8185 135.001) (width 0.25) (layer F.Cu) (net 68) (tstamp 56AECDEB)) + (segment (start 76.708 134.378) (end 74.9815 134.378) (width 0.25) (layer F.Cu) (net 68)) + (segment (start 75.057 134.378) (end 76.708 134.378) (width 0.25) (layer F.Cu) (net 68)) + (segment (start 78.961 134.62) (end 78.5495 134.62) (width 0.25) (layer F.Cu) (net 69)) + (segment (start 78.5495 134.62) (end 77.5335 133.604) (width 0.25) (layer F.Cu) (net 69) (tstamp 56AEB573)) + (segment (start 77.5335 133.604) (end 74.18 133.604) (width 0.25) (layer F.Cu) (net 69) (tstamp 56AEB574)) + (segment (start 74.18 133.604) (end 73.406 134.378) (width 0.25) (layer F.Cu) (net 69) (tstamp 56AEB576)) + (segment (start 70.358 133.211) (end 70.854 133.211) (width 0.25) (layer F.Cu) (net 69)) + (segment (start 72.021 134.378) (end 73.406 134.378) (width 0.25) (layer F.Cu) (net 69) (tstamp 56AEB56F)) + (segment (start 70.854 133.211) (end 72.021 134.378) (width 0.25) (layer F.Cu) (net 69) (tstamp 56AEB56E)) + (segment (start 73.406 134.378) (end 73.013 134.378) (width 0.25) (layer F.Cu) (net 69)) + (segment (start 78.961 127) (end 79.8576 127) (width 0.25) (layer F.Cu) (net 70)) + (segment (start 71.616 136.156) (end 71.616 137.287) (width 0.25) (layer F.Cu) (net 70) (tstamp 56AED67A)) + (segment (start 71.8312 135.9408) (end 71.616 136.156) (width 0.25) (layer F.Cu) (net 70) (tstamp 56AED679)) + (via (at 71.8312 135.9408) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 70)) + (segment (start 71.9836 135.9408) (end 71.8312 135.9408) (width 0.25) (layer B.Cu) (net 70) (tstamp 56AED677)) + (segment (start 74.2188 133.7056) (end 71.9836 135.9408) (width 0.25) (layer B.Cu) (net 70) (tstamp 56AED675)) + (segment (start 76.3524 133.7056) (end 74.2188 133.7056) (width 0.25) (layer B.Cu) (net 70) (tstamp 56AED670)) + (segment (start 77.5208 132.5372) (end 76.3524 133.7056) (width 0.25) (layer B.Cu) (net 70) (tstamp 56AED66D)) + (segment (start 77.5208 128.9304) (end 77.5208 132.5372) (width 0.25) (layer B.Cu) (net 70) (tstamp 56AED66A)) + (segment (start 77.724 128.7272) (end 77.5208 128.9304) (width 0.25) (layer B.Cu) (net 70) (tstamp 56AED665)) + (segment (start 78.8416 128.7272) (end 77.724 128.7272) (width 0.25) (layer B.Cu) (net 70) (tstamp 56AED664)) + (segment (start 80.2132 127.3556) (end 78.8416 128.7272) (width 0.25) (layer B.Cu) (net 70) (tstamp 56AED663)) + (via (at 80.2132 127.3556) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 70)) + (segment (start 79.8576 127) (end 80.2132 127.3556) (width 0.25) (layer F.Cu) (net 70) (tstamp 56AED661)) + (segment (start 71.616 137.287) (end 71.616 137.783) (width 0.25) (layer F.Cu) (net 70)) + (segment (start 71.616 137.783) (end 72.378 138.545) (width 0.25) (layer F.Cu) (net 70) (tstamp 56AEB58F)) + (segment (start 72.378 138.545) (end 72.9615 138.545) (width 0.25) (layer F.Cu) (net 70) (tstamp 56AEB590)) + (segment (start 79.0245 127.0635) (end 78.961 127) (width 0.25) (layer F.Cu) (net 70) (tstamp 56AEB56B)) + (segment (start 70.358 131.711) (end 70.358 130.441) (width 0.25) (layer F.Cu) (net 71)) + (segment (start 70.358 130.441) (end 70.219 130.302) (width 0.25) (layer F.Cu) (net 71) (tstamp 56AEB26E)) + (segment (start 70.358 130.441) (end 70.219 130.302) (width 0.25) (layer F.Cu) (net 71) (tstamp 56AEAAD8)) + (segment (start 70.116 137.287) (end 70.116 136.12) (width 0.25) (layer F.Cu) (net 72)) + (segment (start 70.116 136.12) (end 70.358 135.878) (width 0.25) (layer F.Cu) (net 72) (tstamp 56AEB29A)) + +) diff --git a/PCB/OUTPUT_V35/Tinylab_proto1.kicad_pcb-bak b/PCB/OUTPUT_V35/Tinylab_proto1.kicad_pcb-bak new file mode 100644 index 00000000..be9f547d --- /dev/null +++ b/PCB/OUTPUT_V35/Tinylab_proto1.kicad_pcb-bak @@ -0,0 +1,3082 @@ +(kicad_pcb (version 4) (host pcbnew "(2015-08-05 BZR 6055, Git fa29c62)-product") + + (general + (links 128) + (no_connects 6) + (area 62.526905 115.741 100.356691 155.935) + (thickness 1.6) + (drawings 10) + (tracks 837) + (zones 0) + (modules 59) + (nets 73) + ) + + (page A4) + (layers + (0 F.Cu signal) + (31 B.Cu signal) + (32 B.Adhes user) + (33 F.Adhes user) + (34 B.Paste user) + (35 F.Paste user) + (36 B.SilkS user) + (37 F.SilkS user) + (38 B.Mask user) + (39 F.Mask user) + (40 Dwgs.User user) + (41 Cmts.User user) + (42 Eco1.User user) + (43 Eco2.User user) + (44 Edge.Cuts user) + (45 Margin user) + (46 B.CrtYd user) + (47 F.CrtYd user) + (48 B.Fab user) + (49 F.Fab user) + ) + + (setup + (last_trace_width 1.016) + (user_trace_width 0.508) + (user_trace_width 1.016) + (trace_clearance 0.2) + (zone_clearance 0.508) + (zone_45_only no) + (trace_min 0.2) + (segment_width 0.2) + (edge_width 0.1) + (via_size 0.6) + (via_drill 0.4) + (via_min_size 0.4) + (via_min_drill 0.3) + (uvia_size 0.3) + (uvia_drill 0.1) + (uvias_allowed no) + (uvia_min_size 0.2) + (uvia_min_drill 0.1) + (pcb_text_width 0.3) + (pcb_text_size 1.5 1.5) + (mod_edge_width 0.15) + (mod_text_size 1 1) + (mod_text_width 0.15) + (pad_size 1.5 1.5) + (pad_drill 0.6) + (pad_to_mask_clearance 0) + (aux_axis_origin 0 0) + (visible_elements 7FFFFFDF) + (pcbplotparams + (layerselection 0x00030_80000001) + (usegerberextensions false) + (excludeedgelayer true) + (linewidth 0.100000) + (plotframeref false) + (viasonmask false) + (mode 1) + (useauxorigin false) + (hpglpennumber 1) + (hpglpenspeed 20) + (hpglpendiameter 15) + (hpglpenoverlay 2) + (psnegative false) + (psa4output false) + (plotreference true) + (plotvalue true) + (plotinvisibletext false) + (padsonsilk false) + (subtractmaskfromsilk false) + (outputformat 1) + (mirror false) + (drillshape 1) + (scaleselection 1) + (outputdirectory "")) + ) + + (net 0 "") + (net 1 "Net-(C1-Pad1)") + (net 2 "Net-(C1-Pad2)") + (net 3 "Net-(C2-Pad1)") + (net 4 "Net-(C2-Pad2)") + (net 5 +5V) + (net 6 /AGND) + (net 7 /VCC_3V3) + (net 8 /AVCC) + (net 9 /VCC_PSU) + (net 10 /VGND) + (net 11 "Net-(C13-Pad1)") + (net 12 "Net-(C13-Pad2)") + (net 13 "Net-(C14-Pad1)") + (net 14 "Net-(C14-Pad2)") + (net 15 /PSU_OUT) + (net 16 "Net-(D1-Pad2)") + (net 17 /PSU_FEEDBACK) + (net 18 /CH2) + (net 19 "Net-(IC1-Pad3)") + (net 20 /TO_B0) + (net 21 /TO_B1) + (net 22 /DAC_OUT) + (net 23 /DAC_OUT2) + (net 24 "Net-(IC1-Pad8)") + (net 25 "Net-(IC1-Pad9)") + (net 26 "Net-(IC1-Pad10)") + (net 27 /XCK) + (net 28 /DIG_CH2) + (net 29 "Net-(IC1-Pad13)") + (net 30 "Net-(IC1-Pad16)") + (net 31 /DIG_CH1) + (net 32 "Net-(IC1-Pad20)") + (net 33 "Net-(IC1-Pad21)") + (net 34 "Net-(IC1-Pad22)") + (net 35 "Net-(IC1-Pad23)") + (net 36 /PSU_PWM) + (net 37 "Net-(IC1-Pad25)") + (net 38 /D-) + (net 39 /D+) + (net 40 "Net-(IC1-Pad28)") + (net 41 "Net-(IC1-Pad29)") + (net 42 "Net-(IC1-Pad32)") + (net 43 "Net-(IC1-Pad33)") + (net 44 "Net-(IC1-Pad34)") + (net 45 "Net-(IC1-Pad35)") + (net 46 "Net-(IC1-Pad36)") + (net 47 "Net-(IC1-Pad37)") + (net 48 "Net-(IC1-Pad41)") + (net 49 /CH1) + (net 50 "Net-(IC1-Pad43)") + (net 51 /AVCC_ON_2) + (net 52 "Net-(P2-Pad4)") + (net 53 "Net-(P3-Pad1)") + (net 54 "Net-(P3-Pad2)") + (net 55 "Net-(P3-Pad3)") + (net 56 "Net-(P3-Pad4)") + (net 57 "Net-(P8-Pad1)") + (net 58 "Net-(P8-Pad2)") + (net 59 "Net-(R1-Pad1)") + (net 60 "Net-(R2-Pad1)") + (net 61 "Net-(R11-Pad2)") + (net 62 "Net-(R12-Pad2)") + (net 63 "Net-(R13-Pad2)") + (net 64 "Net-(R10-Pad1)") + (net 65 "Net-(R15-Pad1)") + (net 66 "Net-(R15-Pad2)") + (net 67 "Net-(R17-Pad1)") + (net 68 "Net-(R17-Pad2)") + (net 69 "Net-(R19-Pad1)") + (net 70 "Net-(R20-Pad1)") + (net 71 "Net-(R22-Pad1)") + (net 72 "Net-(R23-Pad1)") + + (net_class Default "This is the default net class." + (clearance 0.2) + (trace_width 0.25) + (via_dia 0.6) + (via_drill 0.4) + (uvia_dia 0.3) + (uvia_drill 0.1) + (add_net +5V) + (add_net /AGND) + (add_net /AVCC) + (add_net /AVCC_ON_2) + (add_net /CH1) + (add_net /CH2) + (add_net /D+) + (add_net /D-) + (add_net /DAC_OUT) + (add_net /DAC_OUT2) + (add_net /DIG_CH1) + (add_net /DIG_CH2) + (add_net /PSU_FEEDBACK) + (add_net /PSU_OUT) + (add_net /PSU_PWM) + (add_net /TO_B0) + (add_net /TO_B1) + (add_net /VCC_3V3) + (add_net /VCC_PSU) + (add_net /VGND) + (add_net /XCK) + (add_net "Net-(C1-Pad1)") + (add_net "Net-(C1-Pad2)") + (add_net "Net-(C13-Pad1)") + (add_net "Net-(C13-Pad2)") + (add_net "Net-(C14-Pad1)") + (add_net "Net-(C14-Pad2)") + (add_net "Net-(C2-Pad1)") + (add_net "Net-(C2-Pad2)") + (add_net "Net-(D1-Pad2)") + (add_net "Net-(IC1-Pad10)") + (add_net "Net-(IC1-Pad13)") + (add_net "Net-(IC1-Pad16)") + (add_net "Net-(IC1-Pad20)") + (add_net "Net-(IC1-Pad21)") + (add_net "Net-(IC1-Pad22)") + (add_net "Net-(IC1-Pad23)") + (add_net "Net-(IC1-Pad25)") + (add_net "Net-(IC1-Pad28)") + (add_net "Net-(IC1-Pad29)") + (add_net "Net-(IC1-Pad3)") + (add_net "Net-(IC1-Pad32)") + (add_net "Net-(IC1-Pad33)") + (add_net "Net-(IC1-Pad34)") + (add_net "Net-(IC1-Pad35)") + (add_net "Net-(IC1-Pad36)") + (add_net "Net-(IC1-Pad37)") + (add_net "Net-(IC1-Pad41)") + (add_net "Net-(IC1-Pad43)") + (add_net "Net-(IC1-Pad8)") + (add_net "Net-(IC1-Pad9)") + (add_net "Net-(P2-Pad4)") + (add_net "Net-(P3-Pad1)") + (add_net "Net-(P3-Pad2)") + (add_net "Net-(P3-Pad3)") + (add_net "Net-(P3-Pad4)") + (add_net "Net-(P8-Pad1)") + (add_net "Net-(P8-Pad2)") + (add_net "Net-(R1-Pad1)") + (add_net "Net-(R10-Pad1)") + (add_net "Net-(R11-Pad2)") + (add_net "Net-(R12-Pad2)") + (add_net "Net-(R13-Pad2)") + (add_net "Net-(R15-Pad1)") + (add_net "Net-(R15-Pad2)") + (add_net "Net-(R17-Pad1)") + (add_net "Net-(R17-Pad2)") + (add_net "Net-(R19-Pad1)") + (add_net "Net-(R2-Pad1)") + (add_net "Net-(R20-Pad1)") + (add_net "Net-(R22-Pad1)") + (add_net "Net-(R23-Pad1)") + ) + + (module Capacitors_SMD:C_0603 (layer F.Cu) (tedit 5415D631) (tstamp 56AEA51F) + (at 86.8045 130.4925) + (descr "Capacitor SMD 0603, reflow soldering, AVX (see smccp.pdf)") + (tags "capacitor 0603") + (path /55CAB611) + (attr smd) + (fp_text reference C1 (at 0 -1.9) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value C (at 0 1.9) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.45 -0.75) (end 1.45 -0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 -0.75) (end -1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.45 -0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.35 -0.6) (end 0.35 -0.6) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.35 0.6) (end -0.35 0.6) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 1 "Net-(C1-Pad1)")) + (pad 2 smd rect (at 0.75 0) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 2 "Net-(C1-Pad2)")) + (model Capacitors_SMD.3dshapes/C_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_SMD:C_0603 (layer F.Cu) (tedit 5415D631) (tstamp 56AEA525) + (at 86.8045 128.9685) + (descr "Capacitor SMD 0603, reflow soldering, AVX (see smccp.pdf)") + (tags "capacitor 0603") + (path /55CAB4DE) + (attr smd) + (fp_text reference C2 (at 0 -1.9) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value C (at 0 1.9) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.45 -0.75) (end 1.45 -0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 -0.75) (end -1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.45 -0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.35 -0.6) (end 0.35 -0.6) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.35 0.6) (end -0.35 0.6) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 3 "Net-(C2-Pad1)")) + (pad 2 smd rect (at 0.75 0) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 4 "Net-(C2-Pad2)")) + (model Capacitors_SMD.3dshapes/C_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_SMD:C_0603 (layer F.Cu) (tedit 5415D631) (tstamp 56AEA52B) + (at 92.5195 131.6355 270) + (descr "Capacitor SMD 0603, reflow soldering, AVX (see smccp.pdf)") + (tags "capacitor 0603") + (path /55CB13E1) + (attr smd) + (fp_text reference C3 (at 0 -1.9 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value C_Small (at 0 1.9 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.45 -0.75) (end 1.45 -0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 -0.75) (end -1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.45 -0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.35 -0.6) (end 0.35 -0.6) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.35 0.6) (end -0.35 0.6) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 270) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 5 +5V)) + (pad 2 smd rect (at 0.75 0 270) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 6 /AGND)) + (model Capacitors_SMD.3dshapes/C_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_SMD:C_0603 (layer F.Cu) (tedit 5415D631) (tstamp 56AEA531) + (at 94.869 135.0645 180) + (descr "Capacitor SMD 0603, reflow soldering, AVX (see smccp.pdf)") + (tags "capacitor 0603") + (path /55CB147C) + (attr smd) + (fp_text reference C4 (at 0 -1.9 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value C_Small (at 0 1.9 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.45 -0.75) (end 1.45 -0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 -0.75) (end -1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.45 -0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.35 -0.6) (end 0.35 -0.6) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.35 0.6) (end -0.35 0.6) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 180) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 7 /VCC_3V3)) + (pad 2 smd rect (at 0.75 0 180) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 6 /AGND)) + (model Capacitors_SMD.3dshapes/C_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_SMD:C_0603 (layer F.Cu) (tedit 5415D631) (tstamp 56AEA537) + (at 86.8045 138.43 180) + (descr "Capacitor SMD 0603, reflow soldering, AVX (see smccp.pdf)") + (tags "capacitor 0603") + (path /55D60181) + (attr smd) + (fp_text reference C5 (at 0 -1.9 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value C_Small (at 0 1.9 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.45 -0.75) (end 1.45 -0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 -0.75) (end -1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.45 -0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.35 -0.6) (end 0.35 -0.6) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.35 0.6) (end -0.35 0.6) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 180) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 8 /AVCC)) + (pad 2 smd rect (at 0.75 0 180) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 6 /AGND)) + (model Capacitors_SMD.3dshapes/C_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_ThroughHole:C_Radial_D5_L11_P2.5 (layer F.Cu) (tedit 0) (tstamp 56AEA53D) + (at 94.8055 147.5105 90) + (descr "Radial Electrolytic Capacitor Diameter 5mm x Length 11mm, Pitch 2.5mm") + (tags "Electrolytic Capacitor") + (path /566F5A75) + (fp_text reference C6 (at 1.25 -3.8 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value CP1 (at 1.25 3.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.325 -2.499) (end 1.325 2.499) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.465 -2.491) (end 1.465 2.491) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.605 -2.475) (end 1.605 -0.095) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.605 0.095) (end 1.605 2.475) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.745 -2.451) (end 1.745 -0.49) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.745 0.49) (end 1.745 2.451) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.885 -2.418) (end 1.885 -0.657) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.885 0.657) (end 1.885 2.418) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.025 -2.377) (end 2.025 -0.764) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.025 0.764) (end 2.025 2.377) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.165 -2.327) (end 2.165 -0.835) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.165 0.835) (end 2.165 2.327) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.305 -2.266) (end 2.305 -0.879) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.305 0.879) (end 2.305 2.266) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.445 -2.196) (end 2.445 -0.898) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.445 0.898) (end 2.445 2.196) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.585 -2.114) (end 2.585 -0.896) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.585 0.896) (end 2.585 2.114) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.725 -2.019) (end 2.725 -0.871) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.725 0.871) (end 2.725 2.019) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.865 -1.908) (end 2.865 -0.823) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.865 0.823) (end 2.865 1.908) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.005 -1.78) (end 3.005 -0.745) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.005 0.745) (end 3.005 1.78) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.145 -1.631) (end 3.145 -0.628) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.145 0.628) (end 3.145 1.631) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.285 -1.452) (end 3.285 -0.44) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.285 0.44) (end 3.285 1.452) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.425 -1.233) (end 3.425 1.233) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.565 -0.944) (end 3.565 0.944) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.705 -0.472) (end 3.705 0.472) (layer F.SilkS) (width 0.15)) + (fp_circle (center 2.5 0) (end 2.5 -0.9) (layer F.SilkS) (width 0.15)) + (fp_circle (center 1.25 0) (end 1.25 -2.5375) (layer F.SilkS) (width 0.15)) + (fp_circle (center 1.25 0) (end 1.25 -2.8) (layer F.CrtYd) (width 0.05)) + (pad 1 thru_hole rect (at 0 0 90) (size 1.3 1.3) (drill 0.8) (layers *.Cu *.Mask F.SilkS) + (net 7 /VCC_3V3)) + (pad 2 thru_hole circle (at 2.5 0 90) (size 1.3 1.3) (drill 0.8) (layers *.Cu *.Mask F.SilkS) + (net 6 /AGND)) + (model Capacitors_ThroughHole.3dshapes/C_Radial_D5_L11_P2.5.wrl + (at (xyz 0.049213 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 90)) + ) + ) + + (module Capacitors_SMD:C_0603 (layer F.Cu) (tedit 5415D631) (tstamp 56AEA549) + (at 78.613 151.003 180) + (descr "Capacitor SMD 0603, reflow soldering, AVX (see smccp.pdf)") + (tags "capacitor 0603") + (path /56AF91A3) + (attr smd) + (fp_text reference C8 (at 0 -1.9 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value C (at 0 1.9 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.45 -0.75) (end 1.45 -0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 -0.75) (end -1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.45 -0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.35 -0.6) (end 0.35 -0.6) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.35 0.6) (end -0.35 0.6) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 180) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 8 /AVCC)) + (pad 2 smd rect (at 0.75 0 180) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 6 /AGND)) + (model Capacitors_SMD.3dshapes/C_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_ThroughHole:C_Radial_D5_L11_P2.5 (layer F.Cu) (tedit 0) (tstamp 56AEA54F) + (at 93.2815 127.1905) + (descr "Radial Electrolytic Capacitor Diameter 5mm x Length 11mm, Pitch 2.5mm") + (tags "Electrolytic Capacitor") + (path /560719D9) + (fp_text reference C9 (at 1.25 -3.8) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value CP1 (at 1.25 3.8) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.325 -2.499) (end 1.325 2.499) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.465 -2.491) (end 1.465 2.491) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.605 -2.475) (end 1.605 -0.095) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.605 0.095) (end 1.605 2.475) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.745 -2.451) (end 1.745 -0.49) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.745 0.49) (end 1.745 2.451) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.885 -2.418) (end 1.885 -0.657) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.885 0.657) (end 1.885 2.418) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.025 -2.377) (end 2.025 -0.764) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.025 0.764) (end 2.025 2.377) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.165 -2.327) (end 2.165 -0.835) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.165 0.835) (end 2.165 2.327) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.305 -2.266) (end 2.305 -0.879) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.305 0.879) (end 2.305 2.266) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.445 -2.196) (end 2.445 -0.898) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.445 0.898) (end 2.445 2.196) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.585 -2.114) (end 2.585 -0.896) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.585 0.896) (end 2.585 2.114) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.725 -2.019) (end 2.725 -0.871) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.725 0.871) (end 2.725 2.019) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.865 -1.908) (end 2.865 -0.823) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.865 0.823) (end 2.865 1.908) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.005 -1.78) (end 3.005 -0.745) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.005 0.745) (end 3.005 1.78) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.145 -1.631) (end 3.145 -0.628) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.145 0.628) (end 3.145 1.631) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.285 -1.452) (end 3.285 -0.44) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.285 0.44) (end 3.285 1.452) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.425 -1.233) (end 3.425 1.233) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.565 -0.944) (end 3.565 0.944) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.705 -0.472) (end 3.705 0.472) (layer F.SilkS) (width 0.15)) + (fp_circle (center 2.5 0) (end 2.5 -0.9) (layer F.SilkS) (width 0.15)) + (fp_circle (center 1.25 0) (end 1.25 -2.5375) (layer F.SilkS) (width 0.15)) + (fp_circle (center 1.25 0) (end 1.25 -2.8) (layer F.CrtYd) (width 0.05)) + (pad 1 thru_hole rect (at 0 0) (size 1.3 1.3) (drill 0.8) (layers *.Cu *.Mask F.SilkS) + (net 9 /VCC_PSU)) + (pad 2 thru_hole circle (at 2.5 0) (size 1.3 1.3) (drill 0.8) (layers *.Cu *.Mask F.SilkS) + (net 10 /VGND)) + (model Capacitors_ThroughHole.3dshapes/C_Radial_D5_L11_P2.5.wrl + (at (xyz 0.049213 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 90)) + ) + ) + + (module Capacitors_SMD:C_0603 (layer F.Cu) (tedit 5415D631) (tstamp 56AEA555) + (at 83.5025 123.444 90) + (descr "Capacitor SMD 0603, reflow soldering, AVX (see smccp.pdf)") + (tags "capacitor 0603") + (path /56071A50) + (attr smd) + (fp_text reference C10 (at 0 -1.9 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value C (at 0 1.9 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.45 -0.75) (end 1.45 -0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 -0.75) (end -1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.45 -0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.35 -0.6) (end 0.35 -0.6) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.35 0.6) (end -0.35 0.6) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 90) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 9 /VCC_PSU)) + (pad 2 smd rect (at 0.75 0 90) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 10 /VGND)) + (model Capacitors_SMD.3dshapes/C_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_SMD:C_0603 (layer F.Cu) (tedit 5415D631) (tstamp 56AEA55B) + (at 71.374 145.542 90) + (descr "Capacitor SMD 0603, reflow soldering, AVX (see smccp.pdf)") + (tags "capacitor 0603") + (path /5608B4BE) + (attr smd) + (fp_text reference C11 (at 0 -1.9 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value C (at 0 1.9 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.45 -0.75) (end 1.45 -0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 -0.75) (end -1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.45 -0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.35 -0.6) (end 0.35 -0.6) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.35 0.6) (end -0.35 0.6) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 90) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 7 /VCC_3V3)) + (pad 2 smd rect (at 0.75 0 90) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 6 /AGND)) + (model Capacitors_SMD.3dshapes/C_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_SMD:C_0603 (layer F.Cu) (tedit 5415D631) (tstamp 56AEA561) + (at 95.504 122.9995 270) + (descr "Capacitor SMD 0603, reflow soldering, AVX (see smccp.pdf)") + (tags "capacitor 0603") + (path /55D75F49) + (attr smd) + (fp_text reference C12 (at 0 -1.9 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value C_Small (at 0 1.9 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.45 -0.75) (end 1.45 -0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 -0.75) (end -1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.45 -0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.35 -0.6) (end 0.35 -0.6) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.35 0.6) (end -0.35 0.6) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 270) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 5 +5V)) + (pad 2 smd rect (at 0.75 0 270) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 10 /VGND)) + (model Capacitors_SMD.3dshapes/C_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_SMD:C_0603 (layer F.Cu) (tedit 5415D631) (tstamp 56AEA567) + (at 68.707 132.588 90) + (descr "Capacitor SMD 0603, reflow soldering, AVX (see smccp.pdf)") + (tags "capacitor 0603") + (path /55CB630B) + (attr smd) + (fp_text reference C13 (at 0 -1.9 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value C (at 0 1.9 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.45 -0.75) (end 1.45 -0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 -0.75) (end -1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.45 -0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.35 -0.6) (end 0.35 -0.6) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.35 0.6) (end -0.35 0.6) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 90) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 11 "Net-(C13-Pad1)")) + (pad 2 smd rect (at 0.75 0 90) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 12 "Net-(C13-Pad2)")) + (model Capacitors_SMD.3dshapes/C_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_SMD:C_0603 (layer F.Cu) (tedit 5415D631) (tstamp 56AEA56D) + (at 68.707 135.509 90) + (descr "Capacitor SMD 0603, reflow soldering, AVX (see smccp.pdf)") + (tags "capacitor 0603") + (path /566DF655) + (attr smd) + (fp_text reference C14 (at 0 -1.9 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value C (at 0 1.9 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.45 -0.75) (end 1.45 -0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 -0.75) (end -1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.45 -0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.35 -0.6) (end 0.35 -0.6) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.35 0.6) (end -0.35 0.6) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 90) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 13 "Net-(C14-Pad1)")) + (pad 2 smd rect (at 0.75 0 90) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 14 "Net-(C14-Pad2)")) + (model Capacitors_SMD.3dshapes/C_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_ThroughHole:C_Radial_D6.3_L11.2_P2.5 (layer F.Cu) (tedit 0) (tstamp 56AEA573) + (at 73.8505 124.2695) + (descr "Radial Electrolytic Capacitor, Diameter 6.3mm x Length 11.2mm, Pitch 2.5mm") + (tags "Electrolytic Capacitor") + (path /560735FE) + (fp_text reference C15 (at 1.25 -4.4) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value CP1 (at 1.25 4.4) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.325 -3.149) (end 1.325 3.149) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.465 -3.143) (end 1.465 3.143) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.605 -3.13) (end 1.605 -0.446) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.605 0.446) (end 1.605 3.13) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.745 -3.111) (end 1.745 -0.656) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.745 0.656) (end 1.745 3.111) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.885 -3.085) (end 1.885 -0.789) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.885 0.789) (end 1.885 3.085) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.025 -3.053) (end 2.025 -0.88) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.025 0.88) (end 2.025 3.053) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.165 -3.014) (end 2.165 -0.942) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.165 0.942) (end 2.165 3.014) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.305 -2.968) (end 2.305 -0.981) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.305 0.981) (end 2.305 2.968) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.445 -2.915) (end 2.445 -0.998) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.445 0.998) (end 2.445 2.915) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.585 -2.853) (end 2.585 -0.996) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.585 0.996) (end 2.585 2.853) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.725 -2.783) (end 2.725 -0.974) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.725 0.974) (end 2.725 2.783) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.865 -2.704) (end 2.865 -0.931) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.865 0.931) (end 2.865 2.704) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.005 -2.616) (end 3.005 -0.863) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.005 0.863) (end 3.005 2.616) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.145 -2.516) (end 3.145 -0.764) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.145 0.764) (end 3.145 2.516) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.285 -2.404) (end 3.285 -0.619) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.285 0.619) (end 3.285 2.404) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.425 -2.279) (end 3.425 -0.38) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.425 0.38) (end 3.425 2.279) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.565 -2.136) (end 3.565 2.136) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.705 -1.974) (end 3.705 1.974) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.845 -1.786) (end 3.845 1.786) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.985 -1.563) (end 3.985 1.563) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.125 -1.287) (end 4.125 1.287) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.265 -0.912) (end 4.265 0.912) (layer F.SilkS) (width 0.15)) + (fp_circle (center 2.5 0) (end 2.5 -1) (layer F.SilkS) (width 0.15)) + (fp_circle (center 1.25 0) (end 1.25 -3.1875) (layer F.SilkS) (width 0.15)) + (fp_circle (center 1.25 0) (end 1.25 -3.4) (layer F.CrtYd) (width 0.05)) + (pad 2 thru_hole circle (at 2.5 0) (size 1.3 1.3) (drill 0.8) (layers *.Cu *.Mask F.SilkS) + (net 10 /VGND)) + (pad 1 thru_hole rect (at 0 0) (size 1.3 1.3) (drill 0.8) (layers *.Cu *.Mask F.SilkS) + (net 15 /PSU_OUT)) + (model Capacitors_ThroughHole.3dshapes/C_Radial_D6.3_L11.2_P2.5.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_SMD:C_0603 (layer F.Cu) (tedit 5415D631) (tstamp 56AEA579) + (at 71.4375 129.2225 90) + (descr "Capacitor SMD 0603, reflow soldering, AVX (see smccp.pdf)") + (tags "capacitor 0603") + (path /5607355F) + (attr smd) + (fp_text reference C16 (at 0 -1.9 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value C (at 0 1.9 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.45 -0.75) (end 1.45 -0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 -0.75) (end -1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.45 -0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.35 -0.6) (end 0.35 -0.6) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.35 0.6) (end -0.35 0.6) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 90) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 15 /PSU_OUT)) + (pad 2 smd rect (at 0.75 0 90) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 10 /VGND)) + (model Capacitors_SMD.3dshapes/C_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Diodes_ThroughHole:Diode_DO-41_SOD81_Horizontal_RM10 (layer F.Cu) (tedit 552FFCCE) (tstamp 56AEA57F) + (at 75.7555 119.4435 180) + (descr "Diode, DO-41, SOD81, Horizontal, RM 10mm,") + (tags "Diode, DO-41, SOD81, Horizontal, RM 10mm, 1N4007, SB140,") + (path /5606FDB4) + (fp_text reference D1 (at 5.38734 2.53746 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value D_Schottky (at 4.37134 -3.55854 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 7.62 -0.00254) (end 8.636 -0.00254) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.794 -0.00254) (end 1.524 -0.00254) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.048 -1.27254) (end 3.048 1.26746) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.302 -1.27254) (end 3.302 1.26746) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.556 -1.27254) (end 3.556 1.26746) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.794 -1.27254) (end 2.794 1.26746) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.81 -1.27254) (end 2.54 1.26746) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.54 -1.27254) (end 3.81 1.26746) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.81 -1.27254) (end 3.81 1.26746) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.175 -1.27254) (end 3.175 1.26746) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.54 1.26746) (end 2.54 -1.27254) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.54 -1.27254) (end 7.62 -1.27254) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.62 -1.27254) (end 7.62 1.26746) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.62 1.26746) (end 2.54 1.26746) (layer F.SilkS) (width 0.15)) + (pad 2 thru_hole circle (at 10.16 -0.00254) (size 1.99898 1.99898) (drill 1.27) (layers *.Cu *.Mask F.SilkS) + (net 16 "Net-(D1-Pad2)")) + (pad 1 thru_hole rect (at 0 -0.00254) (size 1.99898 1.99898) (drill 1.00076) (layers *.Cu *.Mask F.SilkS) + (net 15 /PSU_OUT)) + ) + + (module Capacitors_SMD:C_1206 (layer F.Cu) (tedit 5415D7BD) (tstamp 56AEA585) + (at 94.5515 137.9855 90) + (descr "Capacitor SMD 1206, reflow soldering, AVX (see smccp.pdf)") + (tags "capacitor 1206") + (path /55D739F3) + (attr smd) + (fp_text reference F1 (at 0 -2.3 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value F_Small (at 0 2.3 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -2.3 -1.15) (end 2.3 -1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.3 1.15) (end 2.3 1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.3 -1.15) (end -2.3 1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.3 -1.15) (end 2.3 1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1 -1.025) (end -1 -1.025) (layer F.SilkS) (width 0.15)) + (fp_line (start -1 1.025) (end 1 1.025) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -1.5 0 90) (size 1 1.6) (layers F.Cu F.Paste F.Mask) + (net 6 /AGND)) + (pad 2 smd rect (at 1.5 0 90) (size 1 1.6) (layers F.Cu F.Paste F.Mask) + (net 10 /VGND)) + (model Capacitors_SMD.3dshapes/C_1206.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Housings_QFP:LQFP-44_10x10mm_Pitch0.8mm (layer F.Cu) (tedit 54130A77) (tstamp 56AEA5B5) + (at 78.867 143.51 180) + (descr "LQFP44 (see Appnote_PCB_Guidelines_TRINAMIC_packages.pdf)") + (tags "QFP 0.8") + (path /55CA8F25) + (attr smd) + (fp_text reference IC1 (at 0 -7.65 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value ATXMEGA16A4U-A (at 0 7.65 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -6.9 -6.9) (end -6.9 6.9) (layer F.CrtYd) (width 0.05)) + (fp_line (start 6.9 -6.9) (end 6.9 6.9) (layer F.CrtYd) (width 0.05)) + (fp_line (start -6.9 -6.9) (end 6.9 -6.9) (layer F.CrtYd) (width 0.05)) + (fp_line (start -6.9 6.9) (end 6.9 6.9) (layer F.CrtYd) (width 0.05)) + (fp_line (start -5.175 -5.175) (end -5.175 -4.505) (layer F.SilkS) (width 0.15)) + (fp_line (start 5.175 -5.175) (end 5.175 -4.505) (layer F.SilkS) (width 0.15)) + (fp_line (start 5.175 5.175) (end 5.175 4.505) (layer F.SilkS) (width 0.15)) + (fp_line (start -5.175 5.175) (end -5.175 4.505) (layer F.SilkS) (width 0.15)) + (fp_line (start -5.175 -5.175) (end -4.505 -5.175) (layer F.SilkS) (width 0.15)) + (fp_line (start -5.175 5.175) (end -4.505 5.175) (layer F.SilkS) (width 0.15)) + (fp_line (start 5.175 5.175) (end 4.505 5.175) (layer F.SilkS) (width 0.15)) + (fp_line (start 5.175 -5.175) (end 4.505 -5.175) (layer F.SilkS) (width 0.15)) + (fp_line (start -5.175 -4.505) (end -6.65 -4.505) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -5.85 -4 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 17 /PSU_FEEDBACK)) + (pad 2 smd rect (at -5.85 -3.2 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 18 /CH2)) + (pad 3 smd rect (at -5.85 -2.4 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 19 "Net-(IC1-Pad3)")) + (pad 4 smd rect (at -5.85 -1.6 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 20 /TO_B0)) + (pad 5 smd rect (at -5.85 -0.8 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 21 /TO_B1)) + (pad 6 smd rect (at -5.85 0 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 22 /DAC_OUT)) + (pad 7 smd rect (at -5.85 0.8 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 23 /DAC_OUT2)) + (pad 8 smd rect (at -5.85 1.6 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 24 "Net-(IC1-Pad8)")) + (pad 9 smd rect (at -5.85 2.4 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 25 "Net-(IC1-Pad9)")) + (pad 10 smd rect (at -5.85 3.2 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 26 "Net-(IC1-Pad10)")) + (pad 11 smd rect (at -5.85 4 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 27 /XCK)) + (pad 12 smd rect (at -4 5.85 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 28 /DIG_CH2)) + (pad 13 smd rect (at -3.2 5.85 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 29 "Net-(IC1-Pad13)")) + (pad 14 smd rect (at -2.4 5.85 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 6 /AGND)) + (pad 15 smd rect (at -1.6 5.85 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 27 /XCK)) + (pad 16 smd rect (at -0.8 5.85 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 30 "Net-(IC1-Pad16)")) + (pad 17 smd rect (at 0 5.85 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 31 /DIG_CH1)) + (pad 18 smd rect (at 0.8 5.85 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 6 /AGND)) + (pad 19 smd rect (at 1.6 5.85 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 7 /VCC_3V3)) + (pad 20 smd rect (at 2.4 5.85 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 32 "Net-(IC1-Pad20)")) + (pad 21 smd rect (at 3.2 5.85 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 33 "Net-(IC1-Pad21)")) + (pad 22 smd rect (at 4 5.85 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 34 "Net-(IC1-Pad22)")) + (pad 23 smd rect (at 5.85 4 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 35 "Net-(IC1-Pad23)")) + (pad 24 smd rect (at 5.85 3.2 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 36 /PSU_PWM)) + (pad 25 smd rect (at 5.85 2.4 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 37 "Net-(IC1-Pad25)")) + (pad 26 smd rect (at 5.85 1.6 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 38 /D-)) + (pad 27 smd rect (at 5.85 0.8 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 39 /D+)) + (pad 28 smd rect (at 5.85 0 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 40 "Net-(IC1-Pad28)")) + (pad 29 smd rect (at 5.85 -0.8 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 41 "Net-(IC1-Pad29)")) + (pad 30 smd rect (at 5.85 -1.6 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 6 /AGND)) + (pad 31 smd rect (at 5.85 -2.4 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 7 /VCC_3V3)) + (pad 32 smd rect (at 5.85 -3.2 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 42 "Net-(IC1-Pad32)")) + (pad 33 smd rect (at 5.85 -4 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 43 "Net-(IC1-Pad33)")) + (pad 34 smd rect (at 4 -5.85 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 44 "Net-(IC1-Pad34)")) + (pad 35 smd rect (at 3.2 -5.85 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 45 "Net-(IC1-Pad35)")) + (pad 36 smd rect (at 2.4 -5.85 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 46 "Net-(IC1-Pad36)")) + (pad 37 smd rect (at 1.6 -5.85 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 47 "Net-(IC1-Pad37)")) + (pad 38 smd rect (at 0.8 -5.85 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 6 /AGND)) + (pad 39 smd rect (at 0 -5.85 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 8 /AVCC)) + (pad 40 smd rect (at -0.8 -5.85 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 18 /CH2)) + (pad 41 smd rect (at -1.6 -5.85 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 48 "Net-(IC1-Pad41)")) + (pad 42 smd rect (at -2.4 -5.85 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 49 /CH1)) + (pad 43 smd rect (at -3.2 -5.85 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 50 "Net-(IC1-Pad43)")) + (pad 44 smd rect (at -4 -5.85 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 51 /AVCC_ON_2)) + (model Housings_QFP.3dshapes/LQFP-44_10x10mm_Pitch0.8mm.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Inductors:INDUCTOR_V (layer F.Cu) (tedit 0) (tstamp 56AEA5BB) + (at 68.0085 125.222) + (descr "Inductor (vertical)") + (tags INDUCTOR) + (path /5606EE9E) + (fp_text reference L1 (at 0 1.99898) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value INDUCTOR (at 0.09906 -1.99898) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 3.81 0) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole rect (at -2.54 0) (size 1.905 1.905) (drill 0.8128) (layers *.Cu *.Mask F.SilkS) + (net 16 "Net-(D1-Pad2)")) + (pad 2 thru_hole circle (at 2.54 0) (size 1.905 1.905) (drill 0.8128) (layers *.Cu *.Mask F.SilkS) + (net 9 /VCC_PSU)) + (model Inductors.3dshapes/INDUCTOR_V.wrl + (at (xyz 0 0 0)) + (scale (xyz 2 2 2)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Pin_Headers:Pin_Header_Straight_1x04 (layer F.Cu) (tedit 0) (tstamp 56AEA5C3) + (at 90.043 126.3015) + (descr "Through hole pin header") + (tags "pin header") + (path /55CAB35C) + (fp_text reference P1 (at 0 -5.1) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value SCOPE_IN (at 0 -3.1) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.75 -1.75) (end -1.75 9.4) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.75 -1.75) (end 1.75 9.4) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 -1.75) (end 1.75 -1.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 9.4) (end 1.75 9.4) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.27 1.27) (end -1.27 8.89) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.27 1.27) (end 1.27 8.89) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.55 -1.55) (end 1.55 0) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.27 8.89) (end 1.27 8.89) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.27 1.27) (end -1.27 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.55 0) (end -1.55 -1.55) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.55 -1.55) (end 1.55 -1.55) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole rect (at 0 0) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 3 "Net-(C2-Pad1)")) + (pad 2 thru_hole oval (at 0 2.54) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 4 "Net-(C2-Pad2)")) + (pad 3 thru_hole oval (at 0 5.08) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 2 "Net-(C1-Pad2)")) + (pad 4 thru_hole oval (at 0 7.62) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 1 "Net-(C1-Pad1)")) + (model Pin_Headers.3dshapes/Pin_Header_Straight_1x04.wrl + (at (xyz 0 -0.15 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 90)) + ) + ) + + (module Connect:USB_Micro-B (layer F.Cu) (tedit 5543E447) (tstamp 56AEA5D0) + (at 90.1065 121.666 180) + (descr "Micro USB Type B Receptacle") + (tags "USB USB_B USB_micro USB_OTG") + (path /55CA90D2) + (attr smd) + (fp_text reference P2 (at 0 -3.45 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value USB_OTG (at 0 4.8 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -4.6 -2.8) (end 4.6 -2.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 4.6 -2.8) (end 4.6 4.05) (layer F.CrtYd) (width 0.05)) + (fp_line (start 4.6 4.05) (end -4.6 4.05) (layer F.CrtYd) (width 0.05)) + (fp_line (start -4.6 4.05) (end -4.6 -2.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -4.3509 3.81746) (end 4.3491 3.81746) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.3509 -2.58754) (end 4.3491 -2.58754) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.3491 -2.58754) (end 4.3491 3.81746) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.3491 2.58746) (end -4.3509 2.58746) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.3509 3.81746) (end -4.3509 -2.58754) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -1.3009 -1.56254 270) (size 1.35 0.4) (layers F.Cu F.Paste F.Mask) + (net 5 +5V)) + (pad 2 smd rect (at -0.6509 -1.56254 270) (size 1.35 0.4) (layers F.Cu F.Paste F.Mask) + (net 38 /D-)) + (pad 3 smd rect (at -0.0009 -1.56254 270) (size 1.35 0.4) (layers F.Cu F.Paste F.Mask) + (net 39 /D+)) + (pad 4 smd rect (at 0.6491 -1.56254 270) (size 1.35 0.4) (layers F.Cu F.Paste F.Mask) + (net 52 "Net-(P2-Pad4)")) + (pad 5 smd rect (at 1.2991 -1.56254 270) (size 1.35 0.4) (layers F.Cu F.Paste F.Mask) + (net 6 /AGND)) + (pad 6 thru_hole oval (at -2.5009 -1.56254 270) (size 0.95 1.25) (drill oval 0.55 0.85) (layers *.Cu *.Mask F.SilkS) + (net 6 /AGND)) + (pad 6 thru_hole oval (at 2.4991 -1.56254 270) (size 0.95 1.25) (drill oval 0.55 0.85) (layers *.Cu *.Mask F.SilkS) + (net 6 /AGND)) + (pad 6 thru_hole oval (at -3.5009 1.13746 270) (size 1.55 1) (drill oval 1.15 0.5) (layers *.Cu *.Mask F.SilkS) + (net 6 /AGND)) + (pad 6 thru_hole oval (at 3.4991 1.13746 270) (size 1.55 1) (drill oval 1.15 0.5) (layers *.Cu *.Mask F.SilkS) + (net 6 /AGND)) + ) + + (module Pin_Headers:Pin_Header_Straight_1x04 locked (layer F.Cu) (tedit 0) (tstamp 56AEA5D8) + (at 66.04 148.59 180) + (descr "Through hole pin header") + (tags "pin header") + (path /55CBF4D5) + (fp_text reference P3 (at 0 -5.1 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value DIG_OUT (at 0 -3.1 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.75 -1.75) (end -1.75 9.4) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.75 -1.75) (end 1.75 9.4) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 -1.75) (end 1.75 -1.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 9.4) (end 1.75 9.4) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.27 1.27) (end -1.27 8.89) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.27 1.27) (end 1.27 8.89) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.55 -1.55) (end 1.55 0) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.27 8.89) (end 1.27 8.89) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.27 1.27) (end -1.27 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.55 0) (end -1.55 -1.55) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.55 -1.55) (end 1.55 -1.55) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole rect (at 0 0 180) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 53 "Net-(P3-Pad1)")) + (pad 2 thru_hole oval (at 0 2.54 180) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 54 "Net-(P3-Pad2)")) + (pad 3 thru_hole oval (at 0 5.08 180) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 55 "Net-(P3-Pad3)")) + (pad 4 thru_hole oval (at 0 7.62 180) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 56 "Net-(P3-Pad4)")) + (model Pin_Headers.3dshapes/Pin_Header_Straight_1x04.wrl + (at (xyz 0 -0.15 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 90)) + ) + ) + + (module Pin_Headers:Pin_Header_Straight_2x02 (layer F.Cu) (tedit 0) (tstamp 56AEA5E0) + (at 90.1065 149.86 180) + (descr "Through hole pin header") + (tags "pin header") + (path /56069A87) + (fp_text reference P4 (at 0 -5.1 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value PDI (at 0 -3.1 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.75 -1.75) (end -1.75 4.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start 4.3 -1.75) (end 4.3 4.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 -1.75) (end 4.3 -1.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 4.3) (end 4.3 4.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.55 0) (end -1.55 -1.55) (layer F.SilkS) (width 0.15)) + (fp_line (start 0 -1.55) (end -1.55 -1.55) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.27 1.27) (end 1.27 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.27 1.27) (end 1.27 -1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.27 -1.27) (end 3.81 -1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.81 -1.27) (end 3.81 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.81 3.81) (end -1.27 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.27 3.81) (end -1.27 1.27) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole rect (at 0 0 180) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 7 /VCC_3V3)) + (pad 2 thru_hole oval (at 2.54 0 180) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 44 "Net-(IC1-Pad34)")) + (pad 3 thru_hole oval (at 0 2.54 180) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 6 /AGND)) + (pad 4 thru_hole oval (at 2.54 2.54 180) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 45 "Net-(IC1-Pad35)")) + (model Pin_Headers.3dshapes/Pin_Header_Straight_2x02.wrl + (at (xyz 0.05 -0.05 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 90)) + ) + ) + + (module Pin_Headers:Pin_Header_Straight_1x03 (layer F.Cu) (tedit 0) (tstamp 56AEA5E7) + (at 83.693 119.38 270) + (descr "Through hole pin header") + (tags "pin header") + (path /56065DA8) + (fp_text reference P5 (at 0 -5.1 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value CONN_01X03 (at 0 -3.1 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.75 -1.75) (end -1.75 6.85) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.75 -1.75) (end 1.75 6.85) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 -1.75) (end 1.75 -1.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 6.85) (end 1.75 6.85) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.27 1.27) (end -1.27 6.35) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.27 6.35) (end 1.27 6.35) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.27 6.35) (end 1.27 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.55 -1.55) (end 1.55 0) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.27 1.27) (end -1.27 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.55 0) (end -1.55 -1.55) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.55 -1.55) (end 1.55 -1.55) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole rect (at 0 0 270) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 5 +5V)) + (pad 2 thru_hole oval (at 0 2.54 270) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 9 /VCC_PSU)) + (pad 3 thru_hole oval (at 0 5.08 270) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 7 /VCC_3V3)) + (model Pin_Headers.3dshapes/Pin_Header_Straight_1x03.wrl + (at (xyz 0 -0.1 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 90)) + ) + ) + + (module Pin_Headers:Pin_Header_Straight_1x04 locked (layer F.Cu) (tedit 0) (tstamp 56AEA5EF) + (at 66.04 130.81) + (descr "Through hole pin header") + (tags "pin header") + (path /566DF832) + (fp_text reference P6 (at 0 -5.1) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value DAC_OUT (at 0 -3.1) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.75 -1.75) (end -1.75 9.4) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.75 -1.75) (end 1.75 9.4) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 -1.75) (end 1.75 -1.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 9.4) (end 1.75 9.4) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.27 1.27) (end -1.27 8.89) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.27 1.27) (end 1.27 8.89) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.55 -1.55) (end 1.55 0) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.27 8.89) (end 1.27 8.89) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.27 1.27) (end -1.27 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.55 0) (end -1.55 -1.55) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.55 -1.55) (end 1.55 -1.55) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole rect (at 0 0) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 12 "Net-(C13-Pad2)")) + (pad 2 thru_hole oval (at 0 2.54) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 11 "Net-(C13-Pad1)")) + (pad 3 thru_hole oval (at 0 5.08) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 14 "Net-(C14-Pad2)")) + (pad 4 thru_hole oval (at 0 7.62) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 13 "Net-(C14-Pad1)")) + (model Pin_Headers.3dshapes/Pin_Header_Straight_1x04.wrl + (at (xyz 0 -0.15 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 90)) + ) + ) + + (module Pin_Headers:Pin_Header_Straight_2x02 (layer F.Cu) (tedit 0) (tstamp 56AEA5F7) + (at 73.66 132.08 90) + (descr "Through hole pin header") + (tags "pin header") + (path /55CC540F) + (fp_text reference P7 (at 0 -5.1 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value HVO (at 0 -3.1 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.75 -1.75) (end -1.75 4.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start 4.3 -1.75) (end 4.3 4.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 -1.75) (end 4.3 -1.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 4.3) (end 4.3 4.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.55 0) (end -1.55 -1.55) (layer F.SilkS) (width 0.15)) + (fp_line (start 0 -1.55) (end -1.55 -1.55) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.27 1.27) (end 1.27 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.27 1.27) (end 1.27 -1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.27 -1.27) (end 3.81 -1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.81 -1.27) (end 3.81 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.81 3.81) (end -1.27 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.27 3.81) (end -1.27 1.27) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole rect (at 0 0 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 15 /PSU_OUT)) + (pad 2 thru_hole oval (at 2.54 0 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 10 /VGND)) + (pad 3 thru_hole oval (at 0 2.54 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 10 /VGND)) + (pad 4 thru_hole oval (at 2.54 2.54 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 10 /VGND)) + (model Pin_Headers.3dshapes/Pin_Header_Straight_2x02.wrl + (at (xyz 0.05 -0.05 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 90)) + ) + ) + + (module Pin_Headers:Pin_Header_Straight_1x02 (layer F.Cu) (tedit 54EA090C) (tstamp 56AEA5FD) + (at 91.2495 142.113 180) + (descr "Through hole pin header") + (tags "pin header") + (path /55D6DB77) + (fp_text reference P8 (at 0 -5.1 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value DIG_IN (at 0 -3.1 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.27 1.27) (end 1.27 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.55 -1.55) (end 1.55 0) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.75 -1.75) (end -1.75 4.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.75 -1.75) (end 1.75 4.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 -1.75) (end 1.75 -1.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 4.3) (end 1.75 4.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.27 1.27) (end -1.27 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.55 0) (end -1.55 -1.55) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.55 -1.55) (end 1.55 -1.55) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.27 1.27) (end -1.27 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.27 3.81) (end 1.27 3.81) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole rect (at 0 0 180) (size 2.032 2.032) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 57 "Net-(P8-Pad1)")) + (pad 2 thru_hole oval (at 0 2.54 180) (size 2.032 2.032) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 58 "Net-(P8-Pad2)")) + (model Pin_Headers.3dshapes/Pin_Header_Straight_1x02.wrl + (at (xyz 0 -0.05 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 90)) + ) + ) + + (module SMD:SOT-23-3 (layer F.Cu) (tedit 5508E933) (tstamp 56AEA604) + (at 80.645 123.444 270) + (path /5606F6D4) + (fp_text reference Q1 (at 2.5 0 360) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value Q_NMOS_GSD (at -2.2 0 360) (layer F.Fab) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 1 -0.4) (end 1.1 -0.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -0.8) (end -1.5 0.8) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 0.8) (end 1.5 0.8) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 0.8) (end 1.5 -0.8) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 -0.8) (end -1.5 -0.8) (layer F.SilkS) (width 0.15)) + (pad 3 smd rect (at 0 1.4 270) (size 0.6 0.9) (layers F.Cu F.Paste F.Mask) + (net 16 "Net-(D1-Pad2)")) + (pad 2 smd rect (at -0.95 -1.4 270) (size 0.6 0.9) (layers F.Cu F.Paste F.Mask) + (net 10 /VGND)) + (pad 1 smd rect (at 0.95 -1.4 270) (size 0.6 0.9) (layers F.Cu F.Paste F.Mask) + (net 36 /PSU_PWM)) + (model 3D/SMD/SOT-23-3.wrl + (at (xyz 0 0 0)) + (scale (xyz 0.3937 0.3937 0.3937)) + (rotate (xyz 0 0 90)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 5415CC62) (tstamp 56AEA60A) + (at 86.6775 132.08) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /55CAAB95) + (attr smd) + (fp_text reference R1 (at 0 -1.9) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 59 "Net-(R1-Pad1)")) + (pad 2 smd rect (at 0.75 0) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 1 "Net-(C1-Pad1)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 5415CC62) (tstamp 56AEA610) + (at 86.6775 127.381) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /55CAAD4C) + (attr smd) + (fp_text reference R2 (at 0 -1.9) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 60 "Net-(R2-Pad1)")) + (pad 2 smd rect (at 0.75 0) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 3 "Net-(C2-Pad1)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 5415CC62) (tstamp 56AEA616) + (at 86.6775 133.731) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /55CAABF4) + (attr smd) + (fp_text reference R3 (at 0 -1.9) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 59 "Net-(R1-Pad1)")) + (pad 2 smd rect (at 0.75 0) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 51 /AVCC_ON_2)) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 5415CC62) (tstamp 56AEA61C) + (at 86.6775 125.7935 180) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /55CAAD11) + (attr smd) + (fp_text reference R4 (at 0 -1.9 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 180) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 51 /AVCC_ON_2)) + (pad 2 smd rect (at 0.75 0 180) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 60 "Net-(R2-Pad1)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 5415CC62) (tstamp 56AEA622) + (at 86.6775 135.3185) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /55CAAC5F) + (attr smd) + (fp_text reference R5 (at 0 -1.9) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 8 /AVCC)) + (pad 2 smd rect (at 0.75 0) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 51 /AVCC_ON_2)) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 5415CC62) (tstamp 56AEA628) + (at 86.6775 136.906) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /55CAACD2) + (attr smd) + (fp_text reference R6 (at 0 -1.9) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 6 /AGND)) + (pad 2 smd rect (at 0.75 0) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 51 /AVCC_ON_2)) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 5415CC62) (tstamp 56AEA62E) + (at 67.9704 141.2868 90) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /55CBCDA5) + (attr smd) + (fp_text reference R7 (at 0 -1.9 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 90) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 61 "Net-(R11-Pad2)")) + (pad 2 smd rect (at 0.75 0 90) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 56 "Net-(P3-Pad4)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 5415CC62) (tstamp 56AEA634) + (at 68.453 143.891 90) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /55CBE401) + (attr smd) + (fp_text reference R8 (at 0 -1.9 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 90) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 62 "Net-(R12-Pad2)")) + (pad 2 smd rect (at 0.75 0 90) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 55 "Net-(P3-Pad3)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 5415CC62) (tstamp 56AEA63A) + (at 68.453 146.4945 90) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /55CBE16B) + (attr smd) + (fp_text reference R9 (at 0 -1.9 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 90) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 63 "Net-(R13-Pad2)")) + (pad 2 smd rect (at 0.75 0 90) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 54 "Net-(P3-Pad2)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 5415CC62) (tstamp 56AEA640) + (at 68.6435 149.098 90) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /55CBE2C7) + (attr smd) + (fp_text reference R10 (at 0 -1.9 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 90) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 64 "Net-(R10-Pad1)")) + (pad 2 smd rect (at 0.75 0 90) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 53 "Net-(P3-Pad1)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 5415CC62) (tstamp 56AEA646) + (at 69.7484 141.2868 270) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /55CBCD2A) + (attr smd) + (fp_text reference R11 (at 0 -1.9 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 270) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 40 "Net-(IC1-Pad28)")) + (pad 2 smd rect (at 0.75 0 270) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 61 "Net-(R11-Pad2)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 5415CC62) (tstamp 56AEA64C) + (at 70.0405 143.891 270) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /55CBE362) + (attr smd) + (fp_text reference R12 (at 0 -1.9 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 270) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 41 "Net-(IC1-Pad29)")) + (pad 2 smd rect (at 0.75 0 270) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 62 "Net-(R12-Pad2)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 5415CC62) (tstamp 56AEA652) + (at 69.7865 146.4945 270) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /55CBE0F4) + (attr smd) + (fp_text reference R13 (at 0 -1.9 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 270) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 42 "Net-(IC1-Pad32)")) + (pad 2 smd rect (at 0.75 0 270) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 63 "Net-(R13-Pad2)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 5415CC62) (tstamp 56AEA658) + (at 70.231 149.098 270) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /55CBE21C) + (attr smd) + (fp_text reference R14 (at 0 -1.9 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 270) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 43 "Net-(IC1-Pad33)")) + (pad 2 smd rect (at 0.75 0 270) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 64 "Net-(R10-Pad1)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 5415CC62) (tstamp 56AEA65E) + (at 68.707 138.303 270) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /56B0C779) + (attr smd) + (fp_text reference R15 (at 0 -1.9 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 270) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 65 "Net-(R15-Pad1)")) + (pad 2 smd rect (at 0.75 0 270) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 66 "Net-(R15-Pad2)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 5415CC62) (tstamp 56AEA664) + (at 70.866 138.938 180) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /56B0C86E) + (attr smd) + (fp_text reference R16 (at 0 -1.9 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 180) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 65 "Net-(R15-Pad1)")) + (pad 2 smd rect (at 0.75 0 180) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 66 "Net-(R15-Pad2)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 5415CC62) (tstamp 56AEA66A) + (at 75.057 135.128 90) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /56AFE83E) + (attr smd) + (fp_text reference R17 (at 0 -1.9 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 90) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 67 "Net-(R17-Pad1)")) + (pad 2 smd rect (at 0.75 0 90) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 68 "Net-(R17-Pad2)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 5415CC62) (tstamp 56AEA670) + (at 76.708 135.128 90) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /56AFE8F3) + (attr smd) + (fp_text reference R18 (at 0 -1.9 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 90) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 67 "Net-(R17-Pad1)")) + (pad 2 smd rect (at 0.75 0 90) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 68 "Net-(R17-Pad2)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 5415CC62) (tstamp 56AEA676) + (at 73.406 135.128 270) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /56AECD86) + (attr smd) + (fp_text reference R19 (at 0 -1.9 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 270) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 69 "Net-(R19-Pad1)")) + (pad 2 smd rect (at 0.75 0 270) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 67 "Net-(R17-Pad1)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 5415CC62) (tstamp 56AEA67C) + (at 72.9615 137.795 90) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /56B0C682) + (attr smd) + (fp_text reference R20 (at 0 -1.9 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 90) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 70 "Net-(R20-Pad1)")) + (pad 2 smd rect (at 0.75 0 90) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 65 "Net-(R15-Pad1)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 5415CC62) (tstamp 56AEA682) + (at 81.3435 151.0665 180) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /56AF0DE2) + (attr smd) + (fp_text reference R21 (at 0 -1.9 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 180) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 7 /VCC_3V3)) + (pad 2 smd rect (at 0.75 0 180) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 8 /AVCC)) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 5415CC62) (tstamp 56AEA688) + (at 70.358 132.461 270) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /55CB4680) + (attr smd) + (fp_text reference R22 (at 0 -1.9 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 270) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 71 "Net-(R22-Pad1)")) + (pad 2 smd rect (at 0.75 0 270) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 69 "Net-(R19-Pad1)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 5415CC62) (tstamp 56AEA68E) + (at 70.866 137.287) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /566DE721) + (attr smd) + (fp_text reference R23 (at 0 -1.9) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 72 "Net-(R23-Pad1)")) + (pad 2 smd rect (at 0.75 0) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 70 "Net-(R20-Pad1)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 5415CC62) (tstamp 56AEA694) + (at 69.469 130.302) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /55CB9020) + (attr smd) + (fp_text reference R24 (at 0 -1.9) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 12 "Net-(C13-Pad2)")) + (pad 2 smd rect (at 0.75 0) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 71 "Net-(R22-Pad1)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 5415CC62) (tstamp 56AEA69A) + (at 70.358 135.128 270) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /566DE7E8) + (attr smd) + (fp_text reference R25 (at 0 -1.9 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 270) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 14 "Net-(C14-Pad2)")) + (pad 2 smd rect (at 0.75 0 270) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 72 "Net-(R23-Pad1)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 5415CC62) (tstamp 56AEA6A0) + (at 88.138 143.129 180) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /566E5C29) + (attr smd) + (fp_text reference R26 (at 0 -1.9 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 180) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 15 /PSU_OUT)) + (pad 2 smd rect (at 0.75 0 180) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 17 /PSU_FEEDBACK)) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 5415CC62) (tstamp 56AEA6A6) + (at 88.138 144.7165) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /566E5CBE) + (attr smd) + (fp_text reference R27 (at 0 -1.9) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 17 /PSU_FEEDBACK)) + (pad 2 smd rect (at 0.75 0) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 6 /AGND)) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module SMD:SOT-23-3 (layer F.Cu) (tedit 5508E933) (tstamp 56AEA6AD) + (at 94.869 132.2705 180) + (path /55CA99FA) + (fp_text reference U1 (at 2.5 0 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 78L05 (at -2.2 0 270) (layer F.Fab) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 1 -0.4) (end 1.1 -0.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -0.8) (end -1.5 0.8) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 0.8) (end 1.5 0.8) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 0.8) (end 1.5 -0.8) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 -0.8) (end -1.5 -0.8) (layer F.SilkS) (width 0.15)) + (pad 3 smd rect (at 0 1.4 180) (size 0.6 0.9) (layers F.Cu F.Paste F.Mask) + (net 5 +5V)) + (pad 2 smd rect (at -0.95 -1.4 180) (size 0.6 0.9) (layers F.Cu F.Paste F.Mask) + (net 7 /VCC_3V3)) + (pad 1 smd rect (at 0.95 -1.4 180) (size 0.6 0.9) (layers F.Cu F.Paste F.Mask) + (net 6 /AGND)) + (model 3D/SMD/SOT-23-3.wrl + (at (xyz 0 0 0)) + (scale (xyz 0.3937 0.3937 0.3937)) + (rotate (xyz 0 0 90)) + ) + ) + + (module Housings_SOIC:SOIC-14_3.9x8.7mm_Pitch1.27mm (layer F.Cu) (tedit 54130A77) (tstamp 56AEA6BF) + (at 81.661 130.81 180) + (descr "14-Lead Plastic Small Outline (SL) - Narrow, 3.90 mm Body [SOIC] (see Microchip Packaging Specification 00000049BS.pdf)") + (tags "SOIC 1.27") + (path /55CA87E2) + (attr smd) + (fp_text reference U2 (at 0 -5.375 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value LM324 (at 0 5.375 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -3.7 -4.65) (end -3.7 4.65) (layer F.CrtYd) (width 0.05)) + (fp_line (start 3.7 -4.65) (end 3.7 4.65) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.7 -4.65) (end 3.7 -4.65) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.7 4.65) (end 3.7 4.65) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.075 -4.45) (end -2.075 -4.335) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.075 -4.45) (end 2.075 -4.335) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.075 4.45) (end 2.075 4.335) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.075 4.45) (end -2.075 4.335) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.075 -4.45) (end 2.075 -4.45) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.075 4.45) (end 2.075 4.45) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.075 -4.335) (end -3.45 -4.335) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -2.7 -3.81 180) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 49 /CH1)) + (pad 2 smd rect (at -2.7 -2.54 180) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 49 /CH1)) + (pad 3 smd rect (at -2.7 -1.27 180) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 59 "Net-(R1-Pad1)")) + (pad 4 smd rect (at -2.7 0 180) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 15 /PSU_OUT)) + (pad 5 smd rect (at -2.7 1.27 180) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 60 "Net-(R2-Pad1)")) + (pad 6 smd rect (at -2.7 2.54 180) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 18 /CH2)) + (pad 7 smd rect (at -2.7 3.81 180) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 18 /CH2)) + (pad 8 smd rect (at 2.7 3.81 180) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 70 "Net-(R20-Pad1)")) + (pad 9 smd rect (at 2.7 2.54 180) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 65 "Net-(R15-Pad1)")) + (pad 10 smd rect (at 2.7 1.27 180) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 23 /DAC_OUT2)) + (pad 11 smd rect (at 2.7 0 180) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 10 /VGND)) + (pad 12 smd rect (at 2.7 -1.27 180) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 22 /DAC_OUT)) + (pad 13 smd rect (at 2.7 -2.54 180) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 67 "Net-(R17-Pad1)")) + (pad 14 smd rect (at 2.7 -3.81 180) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 69 "Net-(R19-Pad1)")) + (model Housings_SOIC.3dshapes/SOIC-14_3.9x8.7mm_Pitch1.27mm.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module TO_SOT_Packages_SMD:SOT-363 (layer F.Cu) (tedit 56735562) (tstamp 56AEA6C9) + (at 87.884 140.5128 180) + (descr SOT353) + (path /56B012DD) + (attr smd) + (fp_text reference U3 (at 0.09906 0 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value DMN63D8LDW (at 0.09906 0 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 0.635 1.016) (end 0.635 -1.016) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.635 -1.016) (end -0.635 -1.016) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.635 -1.016) (end -0.635 1.016) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.635 1.016) (end 0.635 1.016) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -1.016 -0.635 180) (size 0.508 0.3048) (layers F.Cu F.Paste F.Mask) + (net 6 /AGND)) + (pad 3 smd rect (at -1.016 0.635 180) (size 0.508 0.3048) (layers F.Cu F.Paste F.Mask) + (net 68 "Net-(R17-Pad2)")) + (pad 6 smd rect (at 1.016 -0.635 180) (size 0.508 0.3048) (layers F.Cu F.Paste F.Mask) + (net 66 "Net-(R15-Pad2)")) + (pad 2 smd rect (at -1.016 0 180) (size 0.508 0.3048) (layers F.Cu F.Paste F.Mask) + (net 20 /TO_B0)) + (pad 4 smd rect (at 1.016 0.635 180) (size 0.508 0.3048) (layers F.Cu F.Paste F.Mask) + (net 6 /AGND)) + (pad 5 smd rect (at 1.016 0 180) (size 0.508 0.3048) (layers F.Cu F.Paste F.Mask) + (net 21 /TO_B1)) + (model TO_SOT_Packages_SMD.3dshapes/SOT-353.wrl + (at (xyz 0 0 0)) + (scale (xyz 0.07000000000000001 0.09 0.08)) + (rotate (xyz 0 0 90)) + ) + ) + + (module TO_SOT_Packages_SMD:SOT-363 (layer F.Cu) (tedit 56735562) (tstamp 56AEA6D3) + (at 90.297 136.779 180) + (descr SOT353) + (path /55D6ACFD) + (attr smd) + (fp_text reference U4 (at 0.09906 0 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value DMN63D8LDW (at 0.09906 0 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 0.635 1.016) (end 0.635 -1.016) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.635 -1.016) (end -0.635 -1.016) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.635 -1.016) (end -0.635 1.016) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.635 1.016) (end 0.635 1.016) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -1.016 -0.635 180) (size 0.508 0.3048) (layers F.Cu F.Paste F.Mask) + (net 6 /AGND)) + (pad 3 smd rect (at -1.016 0.635 180) (size 0.508 0.3048) (layers F.Cu F.Paste F.Mask) + (net 28 /DIG_CH2)) + (pad 6 smd rect (at 1.016 -0.635 180) (size 0.508 0.3048) (layers F.Cu F.Paste F.Mask) + (net 31 /DIG_CH1)) + (pad 2 smd rect (at -1.016 0 180) (size 0.508 0.3048) (layers F.Cu F.Paste F.Mask) + (net 58 "Net-(P8-Pad2)")) + (pad 4 smd rect (at 1.016 0.635 180) (size 0.508 0.3048) (layers F.Cu F.Paste F.Mask) + (net 6 /AGND)) + (pad 5 smd rect (at 1.016 0 180) (size 0.508 0.3048) (layers F.Cu F.Paste F.Mask) + (net 57 "Net-(P8-Pad1)")) + (model TO_SOT_Packages_SMD.3dshapes/SOT-353.wrl + (at (xyz 0 0 0)) + (scale (xyz 0.07000000000000001 0.09 0.08)) + (rotate (xyz 0 0 90)) + ) + ) + + (gr_line (start 97.409 152.0444) (end 97.409 117.5766) (angle 90) (layer Edge.Cuts) (width 0.1)) + (gr_line (start 97.409 117.602) (end 96.5962 117.602) (angle 90) (layer Edge.Cuts) (width 0.1)) + (gr_line (start 97.409 152.2222) (end 97.409 151.9936) (angle 90) (layer Edge.Cuts) (width 0.1)) + (gr_line (start 96.5962 152.2222) (end 97.409 152.2222) (angle 90) (layer Edge.Cuts) (width 0.1)) + (gr_line (start 64.2366 152.2222) (end 96.6216 152.2222) (angle 90) (layer Edge.Cuts) (width 0.1)) + (gr_line (start 96.6216 117.602) (end 64.2112 117.602) (angle 90) (layer Edge.Cuts) (width 0.1)) + (gr_line (start 64.2112 117.6274) (end 64.2366 117.6274) (angle 90) (layer Edge.Cuts) (width 0.1)) + (gr_line (start 64.2112 152.2222) (end 64.2112 117.6274) (angle 90) (layer Edge.Cuts) (width 0.1)) + (gr_line (start 64.2874 152.2222) (end 64.2366 152.2222) (angle 90) (layer Edge.Cuts) (width 0.1)) + (gr_line (start 64.2874 152.2222) (end 64.3128 152.2222) (angle 90) (layer Edge.Cuts) (width 0.1)) + + (segment (start 90.043 133.9215) (end 90.043 133.7945) (width 0.25) (layer F.Cu) (net 1)) + (segment (start 90.043 133.7945) (end 88.3285 132.08) (width 0.25) (layer F.Cu) (net 1) (tstamp 56AEB8C0)) + (segment (start 88.3285 132.08) (end 87.4275 132.08) (width 0.25) (layer F.Cu) (net 1) (tstamp 56AEB8C1)) + (segment (start 86.0545 130.4925) (end 86.0545 130.822) (width 0.25) (layer F.Cu) (net 1)) + (segment (start 86.0545 130.822) (end 86.6775 131.445) (width 0.25) (layer F.Cu) (net 1) (tstamp 56AEB850)) + (segment (start 86.6775 131.445) (end 86.7925 131.445) (width 0.25) (layer F.Cu) (net 1) (tstamp 56AEB851)) + (segment (start 86.7925 131.445) (end 87.4275 132.08) (width 0.25) (layer F.Cu) (net 1) (tstamp 56AEB852)) + (segment (start 90.043 131.3815) (end 89.5985 131.3815) (width 0.25) (layer F.Cu) (net 2)) + (segment (start 89.5985 131.3815) (end 88.7095 130.4925) (width 0.25) (layer F.Cu) (net 2) (tstamp 56AEB8BC)) + (segment (start 88.7095 130.4925) (end 87.5545 130.4925) (width 0.25) (layer F.Cu) (net 2) (tstamp 56AEB8BD)) + (segment (start 87.4275 127.381) (end 87.6935 127.381) (width 0.25) (layer F.Cu) (net 3)) + (segment (start 88.773 126.3015) (end 90.043 126.3015) (width 0.25) (layer F.Cu) (net 3) (tstamp 56AEB8B5)) + (segment (start 87.6935 127.381) (end 88.773 126.3015) (width 0.25) (layer F.Cu) (net 3) (tstamp 56AEB8B4)) + (segment (start 86.0545 128.9685) (end 86.0545 128.8295) (width 0.25) (layer F.Cu) (net 3)) + (segment (start 86.0545 128.8295) (end 86.741 128.143) (width 0.25) (layer F.Cu) (net 3) (tstamp 56AEB84A)) + (segment (start 86.741 128.143) (end 86.741 127.5715) (width 0.25) (layer F.Cu) (net 3) (tstamp 56AEB84B)) + (segment (start 86.741 127.5715) (end 86.9315 127.381) (width 0.25) (layer F.Cu) (net 3) (tstamp 56AEB84C)) + (segment (start 86.9315 127.381) (end 87.4275 127.381) (width 0.25) (layer F.Cu) (net 3) (tstamp 56AEB84D)) + (segment (start 90.043 128.8415) (end 87.6815 128.8415) (width 0.25) (layer F.Cu) (net 4)) + (segment (start 87.6815 128.8415) (end 87.5545 128.9685) (width 0.25) (layer F.Cu) (net 4) (tstamp 56AEB8B9)) + (segment (start 94.869 130.8705) (end 94.869 129.7305) (width 0.25) (layer F.Cu) (net 5)) + (segment (start 94.615 122.4915) (end 94.373 122.2495) (width 0.25) (layer F.Cu) (net 5) (tstamp 56AED403)) + (segment (start 94.615 129.4765) (end 94.615 122.4915) (width 0.25) (layer F.Cu) (net 5) (tstamp 56AED402)) + (segment (start 94.869 129.7305) (end 94.615 129.4765) (width 0.25) (layer F.Cu) (net 5) (tstamp 56AED401)) + (segment (start 92.5195 130.8855) (end 94.854 130.8855) (width 0.25) (layer F.Cu) (net 5)) + (segment (start 94.854 130.8855) (end 94.869 130.8705) (width 0.25) (layer F.Cu) (net 5) (tstamp 56AED3F0)) + (segment (start 83.693 119.38) (end 89.8525 119.38) (width 0.25) (layer F.Cu) (net 5)) + (segment (start 91.5035 122.1105) (end 91.4074 122.1105) (width 0.25) (layer F.Cu) (net 5) (tstamp 56AED38E)) + (segment (start 91.5035 121.031) (end 91.5035 122.1105) (width 0.25) (layer F.Cu) (net 5) (tstamp 56AED38B)) + (segment (start 89.8525 119.38) (end 91.5035 121.031) (width 0.25) (layer F.Cu) (net 5) (tstamp 56AED38A)) + (segment (start 91.4074 123.22854) (end 91.4074 122.1105) (width 0.25) (layer F.Cu) (net 5)) + (segment (start 91.4074 122.1105) (end 91.4074 122.0161) (width 0.25) (layer F.Cu) (net 5) (tstamp 56AED38F)) + (segment (start 93.9285 122.2495) (end 94.373 122.2495) (width 0.25) (layer F.Cu) (net 5) (tstamp 56AED375)) + (segment (start 93.599 121.92) (end 93.9285 122.2495) (width 0.25) (layer F.Cu) (net 5) (tstamp 56AED374)) + (segment (start 91.5035 121.92) (end 93.599 121.92) (width 0.25) (layer F.Cu) (net 5) (tstamp 56AED373)) + (segment (start 91.4074 122.0161) (end 91.5035 121.92) (width 0.25) (layer F.Cu) (net 5) (tstamp 56AED372)) + (segment (start 94.373 122.2495) (end 95.504 122.2495) (width 0.25) (layer F.Cu) (net 5) (tstamp 56AED406)) + (segment (start 83.693 119.38) (end 84.5185 119.38) (width 0.25) (layer F.Cu) (net 5)) + (segment (start 86.0545 138.43) (end 86.0545 137.033) (width 0.508) (layer F.Cu) (net 6) (status C00000)) + (segment (start 86.0545 137.033) (end 85.9275 136.906) (width 0.508) (layer F.Cu) (net 6) (tstamp 56AF2430) (status C00000)) + (segment (start 89.0524 138.4808) (end 89.0524 138.176) (width 0.508) (layer B.Cu) (net 6)) + (segment (start 89.9668 137.2616) (end 89.9668 136.9187) (width 0.508) (layer B.Cu) (net 6) (tstamp 56AF2428)) + (segment (start 89.0524 138.176) (end 89.9668 137.2616) (width 0.508) (layer B.Cu) (net 6) (tstamp 56AF2427)) + (segment (start 89.9668 136.9187) (end 90.551 136.3345) (width 0.508) (layer B.Cu) (net 6) (tstamp 56AF2429)) + (segment (start 92.583 136.4615) (end 90.678 136.4615) (width 0.508) (layer B.Cu) (net 6)) + (segment (start 90.678 136.4615) (end 90.551 136.3345) (width 0.508) (layer B.Cu) (net 6) (tstamp 56AF2422)) + (segment (start 94.119 135.0645) (end 93.1545 135.0645) (width 0.508) (layer F.Cu) (net 6) (status 400000)) + (segment (start 93.1545 135.0645) (end 93.0275 135.1915) (width 0.508) (layer F.Cu) (net 6) (tstamp 56AF241C)) + (segment (start 93.0275 135.1915) (end 93.0275 136.017) (width 0.508) (layer F.Cu) (net 6) (tstamp 56AF241D)) + (segment (start 93.0275 136.017) (end 92.583 136.4615) (width 0.508) (layer F.Cu) (net 6) (tstamp 56AF241E)) + (segment (start 94.8055 145.0105) (end 94.8055 139.7395) (width 0.508) (layer F.Cu) (net 6) (status C00000)) + (segment (start 94.8055 139.7395) (end 94.5515 139.4855) (width 0.508) (layer F.Cu) (net 6) (tstamp 56AF2411) (status C00000)) + (segment (start 73.017 145.11) (end 73.863 145.11) (width 0.25) (layer F.Cu) (net 6)) + (segment (start 78.067 147.7138) (end 78.067 149.36) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AF1D98)) + (segment (start 78.0542 147.701) (end 78.067 147.7138) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AF1D97)) + (via (at 78.0542 147.701) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 6)) + (segment (start 77.8002 147.447) (end 78.0542 147.701) (width 0.25) (layer B.Cu) (net 6) (tstamp 56AF1D95)) + (segment (start 77.8002 145.7706) (end 77.8002 147.447) (width 0.25) (layer B.Cu) (net 6) (tstamp 56AF1D94)) + (segment (start 77.3176 145.288) (end 77.8002 145.7706) (width 0.25) (layer B.Cu) (net 6) (tstamp 56AF1D93)) + (segment (start 77.2922 145.288) (end 77.3176 145.288) (width 0.25) (layer B.Cu) (net 6) (tstamp 56AF1D92)) + (segment (start 77.1652 145.415) (end 77.2922 145.288) (width 0.25) (layer B.Cu) (net 6) (tstamp 56AF1D91)) + (via (at 77.1652 145.415) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 6)) + (segment (start 76.9874 145.5928) (end 77.1652 145.415) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AF1D8E)) + (segment (start 74.3458 145.5928) (end 76.9874 145.5928) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AF1D8C)) + (segment (start 73.863 145.11) (end 74.3458 145.5928) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AF1D8B)) + (segment (start 88.9 141.1478) (end 88.4174 141.1478) (width 0.25) (layer F.Cu) (net 6)) + (segment (start 87.4776 140.208) (end 87.4776 139.446) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AF1A15)) + (segment (start 88.4174 141.1478) (end 87.4776 140.208) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AF1A14)) + (segment (start 88.888 144.7165) (end 88.888 146.038) (width 0.25) (layer F.Cu) (net 6)) + (segment (start 88.888 146.038) (end 90.1065 147.2565) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AF189C)) + (segment (start 90.1065 147.2565) (end 90.1065 147.32) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AF189D)) + (segment (start 89.1159 141.1605) (end 89.1159 141.2875) (width 0.25) (layer F.Cu) (net 6)) + (segment (start 89.1159 141.2875) (end 89.662 141.8336) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AED74C)) + (segment (start 89.662 141.8336) (end 89.662 145.0105) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AED74D)) + (segment (start 89.662 145.0105) (end 89.6385 145.034) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AED74E)) + (segment (start 89.6385 145.034) (end 89.6112 145.034) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AED74F)) + (segment (start 89.6112 145.034) (end 89.6112 145.0105) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AED750)) + (segment (start 88.5952 139.2936) (end 88.5952 138.938) (width 0.25) (layer F.Cu) (net 6)) + (segment (start 88.5952 139.2936) (end 87.63 139.2936) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AED5A0)) + (segment (start 87.63 139.2936) (end 87.4776 139.446) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AED59C)) + (segment (start 87.4776 139.446) (end 87.0331 139.8905) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AF1A1A)) + (segment (start 88.5952 138.938) (end 89.0524 138.4808) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AED5A2)) + (via (at 89.0524 138.4808) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 6)) + (segment (start 89.9668 136.9187) (end 90.551 136.3345) (width 0.25) (layer B.Cu) (net 6) (tstamp 56AED5A6)) + (segment (start 87.0331 139.8905) (end 86.487 139.8905) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AED59D)) + (segment (start 86.0545 138.43) (end 86.0545 139.3945) (width 0.25) (layer F.Cu) (net 6)) + (segment (start 86.0545 139.3945) (end 86.487 139.827) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AED551)) + (segment (start 86.487 139.827) (end 86.487 139.8905) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AED552)) + (segment (start 88.8074 123.22854) (end 87.6074 123.22854) (width 0.25) (layer F.Cu) (net 6)) + (segment (start 92.5195 132.3855) (end 91.9995 132.3855) (width 0.25) (layer F.Cu) (net 6)) + (segment (start 91.9995 132.3855) (end 91.694 132.08) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AED4B3)) + (segment (start 91.694 132.08) (end 91.694 125.476) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AED4B4)) + (segment (start 91.694 125.476) (end 92.6074 124.5626) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AED4B5)) + (segment (start 92.6074 124.5626) (end 92.6074 123.22854) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AED4B6)) + (segment (start 94.5515 139.4855) (end 95.2246 142.0368) (width 0.25) (layer F.Cu) (net 6)) + (segment (start 95.2246 142.0368) (end 94.8055 145.0105) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AED4B0)) + (segment (start 89.5985 136.144) (end 90.3605 136.144) (width 0.25) (layer F.Cu) (net 6)) + (segment (start 90.3605 136.144) (end 90.551 136.3345) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AED495)) + (via (at 90.551 136.3345) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 6)) + (segment (start 90.551 136.3345) (end 90.678 136.4615) (width 0.25) (layer B.Cu) (net 6) (tstamp 56AED499)) + (via (at 92.583 136.4615) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 6)) + (segment (start 92.583 136.4615) (end 93.0275 136.017) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AED49D)) + (segment (start 93.0275 136.017) (end 93.0275 135.1915) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AED49E)) + (segment (start 93.0275 135.1915) (end 93.1545 135.0645) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AED49F)) + (segment (start 89.281 136.144) (end 89.5985 136.144) (width 0.25) (layer F.Cu) (net 6)) + (segment (start 89.5985 136.144) (end 89.663398 136.144) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AED493)) + (segment (start 90.6145 137.414) (end 91.313 137.414) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AED490)) + (segment (start 90.4875 137.287) (end 90.6145 137.414) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AED48F)) + (segment (start 90.4875 136.968102) (end 90.4875 137.287) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AED48E)) + (segment (start 89.663398 136.144) (end 90.4875 136.968102) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AED48D)) + (segment (start 94.8055 145.0105) (end 89.6112 145.0105) (width 0.25) (layer F.Cu) (net 6)) + (segment (start 89.6112 145.0105) (end 89.182 145.0105) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AED751)) + (segment (start 89.182 145.0105) (end 88.888 144.7165) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AED431)) + (segment (start 93.919 133.6705) (end 93.919 134.8645) (width 0.25) (layer F.Cu) (net 6)) + (segment (start 93.919 134.8645) (end 94.119 135.0645) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AED3F7)) + (segment (start 92.5195 132.3855) (end 92.5195 133.1595) (width 0.25) (layer F.Cu) (net 6)) + (segment (start 93.0305 133.6705) (end 93.919 133.6705) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AED3F4)) + (segment (start 92.5195 133.1595) (end 93.0305 133.6705) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AED3F3)) + (segment (start 71.64 144.792) (end 71.958 145.11) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AEC62B)) + (segment (start 71.958 145.11) (end 73.017 145.11) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AEC62C)) + (segment (start 71.374 144.792) (end 71.64 144.792) (width 0.25) (layer F.Cu) (net 6)) + (segment (start 71.3105 144.792) (end 71.64 144.792) (width 0.25) (layer F.Cu) (net 6)) + (segment (start 81.267 137.66) (end 81.267 138.824) (width 0.25) (layer F.Cu) (net 6)) + (segment (start 84.1375 138.43) (end 86.0545 138.43) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AEB902)) + (segment (start 83.6295 138.938) (end 84.1375 138.43) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AEB901)) + (segment (start 81.381 138.938) (end 83.6295 138.938) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AEB900)) + (segment (start 81.267 138.824) (end 81.381 138.938) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AEB8FF)) + (segment (start 86.0545 137.033) (end 85.9275 136.906) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AEB8A3)) + (segment (start 77.7995 151.0665) (end 77.7995 150.737) (width 0.25) (layer F.Cu) (net 6)) + (segment (start 77.7995 150.737) (end 78.067 150.4695) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AEB7B3)) + (segment (start 78.067 150.4695) (end 78.067 149.36) (width 0.25) (layer F.Cu) (net 6) (tstamp 56AEB7B4)) + (segment (start 85.9275 136.906) (end 85.725 136.906) (width 0.25) (layer F.Cu) (net 6)) + (segment (start 95.619 135.0645) (end 95.9104 135.3559) (width 0.508) (layer F.Cu) (net 7) (status C00000)) + (segment (start 95.9104 135.3559) (end 95.9104 146.304) (width 0.508) (layer F.Cu) (net 7) (tstamp 56AF2408) (status 400000)) + (segment (start 95.9104 146.304) (end 94.8055 147.4089) (width 0.508) (layer F.Cu) (net 7) (tstamp 56AF2409) (status 800000)) + (segment (start 94.8055 147.4089) (end 94.8055 147.5105) (width 0.508) (layer F.Cu) (net 7) (tstamp 56AF240D) (status C00000)) + (segment (start 95.619 135.0645) (end 95.619 133.8705) (width 0.508) (layer F.Cu) (net 7) (status C00000)) + (segment (start 95.619 133.8705) (end 95.819 133.6705) (width 0.508) (layer F.Cu) (net 7) (tstamp 56AF2405) (status C00000)) + (segment (start 95.819 133.6705) (end 95.819 129.479) (width 0.508) (layer F.Cu) (net 7) (status 400000)) + (segment (start 95.819 129.479) (end 96.6724 128.6256) (width 0.508) (layer F.Cu) (net 7) (tstamp 56AF23F7)) + (segment (start 96.1644 125.5776) (end 96.1644 125.3998) (width 0.508) (layer F.Cu) (net 7) (tstamp 56AF2401)) + (segment (start 96.9518 126.365) (end 96.1644 125.5776) (width 0.508) (layer F.Cu) (net 7) (tstamp 56AF2400)) + (segment (start 96.9518 127.9906) (end 96.9518 126.365) (width 0.508) (layer F.Cu) (net 7) (tstamp 56AF23FC)) + (segment (start 96.6724 128.27) (end 96.9518 127.9906) (width 0.508) (layer F.Cu) (net 7) (tstamp 56AF23FA)) + (segment (start 96.6724 128.6256) (end 96.6724 128.27) (width 0.508) (layer F.Cu) (net 7) (tstamp 56AF23F9)) + (segment (start 93.8784 118.999) (end 94.3102 118.999) (width 0.508) (layer B.Cu) (net 7)) + (segment (start 96.1644 125.2474) (end 96.1644 125.3998) (width 0.508) (layer B.Cu) (net 7) (tstamp 56AF23AC)) + (segment (start 95.25 124.333) (end 96.1644 125.2474) (width 0.508) (layer B.Cu) (net 7) (tstamp 56AF23AB)) + (segment (start 95.25 120.3452) (end 95.25 124.333) (width 0.508) (layer B.Cu) (net 7) (tstamp 56AF23AA)) + (segment (start 94.8944 119.9896) (end 95.25 120.3452) (width 0.508) (layer B.Cu) (net 7) (tstamp 56AF23A9)) + (segment (start 94.8944 119.5832) (end 94.8944 119.9896) (width 0.508) (layer B.Cu) (net 7) (tstamp 56AF23A8)) + (segment (start 94.3102 118.999) (end 94.8944 119.5832) (width 0.508) (layer B.Cu) (net 7) (tstamp 56AF23A7)) + (segment (start 93.8784 118.999) (end 86.3092 118.999) (width 0.508) (layer B.Cu) (net 7)) + (segment (start 85.2932 118.0592) (end 85.1154 117.8814) (width 0.508) (layer B.Cu) (net 7) (tstamp 56AF239A)) + (segment (start 85.3948 118.1608) (end 85.2932 118.0592) (width 0.508) (layer B.Cu) (net 7) (tstamp 56AF2399)) + (segment (start 85.471 118.1608) (end 85.3948 118.1608) (width 0.508) (layer B.Cu) (net 7) (tstamp 56AF2398)) + (segment (start 86.3092 118.999) (end 85.471 118.1608) (width 0.508) (layer B.Cu) (net 7) (tstamp 56AF2397)) + (segment (start 85.1154 117.8814) (end 85.4456 118.2116) (width 0.508) (layer B.Cu) (net 7) (tstamp 56AF239B)) + (segment (start 71.5264 148.5392) (end 71.5264 147.9296) (width 0.508) (layer F.Cu) (net 7)) + (segment (start 71.5264 148.5392) (end 71.7042 148.5392) (width 0.508) (layer F.Cu) (net 7)) + (segment (start 71.7042 148.5392) (end 73.3298 150.1648) (width 0.508) (layer F.Cu) (net 7) (tstamp 56AF234F)) + (segment (start 76.3651 151.1935) (end 76.3651 151.2951) (width 1.016) (layer F.Cu) (net 7)) + (segment (start 76.708 151.638) (end 76.708 151.5364) (width 1.016) (layer F.Cu) (net 7) (tstamp 56AF2347)) + (segment (start 76.3651 151.2951) (end 76.708 151.638) (width 1.016) (layer F.Cu) (net 7) (tstamp 56AF2345)) + (segment (start 74.1807 151.1935) (end 74.1807 151.0157) (width 1.016) (layer F.Cu) (net 7)) + (segment (start 74.1807 151.0157) (end 73.3298 150.1648) (width 1.016) (layer F.Cu) (net 7) (tstamp 56AF2342)) + (segment (start 73.3298 150.1648) (end 73.3298 150.1394) (width 1.016) (layer F.Cu) (net 7) (tstamp 56AF2343)) + (segment (start 76.3651 151.1935) (end 74.1807 151.1935) (width 1.016) (layer F.Cu) (net 7)) + (segment (start 74.1807 151.1935) (end 74.1426 151.1554) (width 1.016) (layer F.Cu) (net 7) (tstamp 56AF233F)) + (segment (start 90.1065 150.8125) (end 89.3699 150.8125) (width 1.016) (layer F.Cu) (net 7)) + (segment (start 82.677 151.4348) (end 82.4738 151.2316) (width 1.016) (layer F.Cu) (net 7) (tstamp 56AF2337)) + (segment (start 84.3026 151.4348) (end 82.677 151.4348) (width 1.016) (layer F.Cu) (net 7) (tstamp 56AF2336)) + (segment (start 84.3788 151.511) (end 84.3026 151.4348) (width 1.016) (layer F.Cu) (net 7) (tstamp 56AF2335)) + (segment (start 88.6714 151.511) (end 84.3788 151.511) (width 1.016) (layer F.Cu) (net 7) (tstamp 56AF2334)) + (segment (start 89.3699 150.8125) (end 88.6714 151.511) (width 1.016) (layer F.Cu) (net 7) (tstamp 56AF2333)) + (segment (start 90.1065 149.86) (end 90.1065 150.8125) (width 1.016) (layer F.Cu) (net 7) (status 400000)) + (segment (start 90.1065 150.8125) (end 89.8525 151.0665) (width 1.016) (layer F.Cu) (net 7) (tstamp 56AF2330)) + (segment (start 90.1065 149.86) (end 91.7575 149.86) (width 1.016) (layer F.Cu) (net 7) (status 400000)) + (segment (start 91.7575 149.86) (end 94.107 147.5105) (width 1.016) (layer F.Cu) (net 7) (tstamp 56AF2321)) + (segment (start 94.107 147.5105) (end 94.8055 147.5105) (width 1.016) (layer F.Cu) (net 7) (tstamp 56AF2322) (status 800000)) + (segment (start 80.1116 117.8814) (end 78.613 119.38) (width 0.25) (layer B.Cu) (net 7) (tstamp 56AF1DF1)) + (segment (start 85.1154 117.8814) (end 80.1116 117.8814) (width 0.25) (layer B.Cu) (net 7) (tstamp 56AF1DEF)) + (segment (start 86.233 118.999) (end 85.4456 118.2116) (width 0.25) (layer B.Cu) (net 7) (tstamp 56AF1DED)) + (segment (start 85.4456 118.2116) (end 85.1154 117.8814) (width 0.25) (layer B.Cu) (net 7) (tstamp 56AF239E)) + (segment (start 93.8784 118.999) (end 86.233 118.999) (width 0.25) (layer B.Cu) (net 7) (tstamp 56AF2395)) + (via (at 96.1644 125.3998) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 7)) + (segment (start 96.1644 125.73) (end 96.1644 125.3998) (width 0.25) (layer F.Cu) (net 7) (tstamp 56AF1DE3)) + (segment (start 96.7994 126.365) (end 96.1644 125.73) (width 0.25) (layer F.Cu) (net 7) (tstamp 56AF1DE2)) + (segment (start 96.7994 127.8636) (end 96.7994 126.365) (width 0.25) (layer F.Cu) (net 7) (tstamp 56AF1DE1)) + (segment (start 96.6978 127.9652) (end 96.7994 127.8636) (width 0.25) (layer F.Cu) (net 7) (tstamp 56AF1DDC)) + (segment (start 96.6978 128.6002) (end 96.6978 127.9652) (width 0.25) (layer F.Cu) (net 7) (tstamp 56AF1DDB)) + (segment (start 95.819 129.479) (end 96.6978 128.6002) (width 0.25) (layer F.Cu) (net 7) (tstamp 56AF1DD9)) + (segment (start 71.374 146.292) (end 71.374 146.9898) (width 0.25) (layer F.Cu) (net 7)) + (segment (start 71.374 146.9898) (end 71.5264 147.1422) (width 0.25) (layer F.Cu) (net 7) (tstamp 56AF1D9C)) + (segment (start 71.5264 147.1422) (end 71.5264 147.9296) (width 0.25) (layer F.Cu) (net 7) (tstamp 56AF1D9D)) + (segment (start 81.1918 151.9682) (end 82.0935 151.0665) (width 0.25) (layer F.Cu) (net 7) (tstamp 56AF1DA4)) + (segment (start 77.1398 151.9682) (end 81.1918 151.9682) (width 0.25) (layer F.Cu) (net 7) (tstamp 56AF1DA3)) + (segment (start 76.708 151.5364) (end 77.1398 151.9682) (width 0.25) (layer F.Cu) (net 7) (tstamp 56AF2348)) + (segment (start 71.5264 148.5392) (end 74.1426 151.1554) (width 0.25) (layer F.Cu) (net 7) (tstamp 56AF1D9E)) + (segment (start 94.8055 147.5105) (end 94.8055 147.4089) (width 0.25) (layer F.Cu) (net 7)) + (segment (start 94.8055 147.4089) (end 95.9104 146.304) (width 0.25) (layer F.Cu) (net 7) (tstamp 56AF181E)) + (segment (start 95.9104 146.304) (end 95.9104 135.3559) (width 0.25) (layer F.Cu) (net 7) (tstamp 56AF1820)) + (segment (start 94.8055 147.5105) (end 94.107 147.5105) (width 0.25) (layer F.Cu) (net 7)) + (segment (start 94.107 147.5105) (end 91.7575 149.86) (width 0.25) (layer F.Cu) (net 7) (tstamp 56AED434)) + (segment (start 95.819 133.6705) (end 95.819 134.8645) (width 0.25) (layer F.Cu) (net 7)) + (segment (start 95.819 134.8645) (end 95.619 135.0645) (width 0.25) (layer F.Cu) (net 7) (tstamp 56AED3FD)) + (segment (start 82.0935 151.0665) (end 89.8525 151.0665) (width 0.25) (layer F.Cu) (net 7)) + (segment (start 89.8525 151.0665) (end 90.1065 150.8125) (width 0.25) (layer F.Cu) (net 7) (tstamp 56AED003)) + (segment (start 71.4495 146.292) (end 71.8315 145.91) (width 0.25) (layer F.Cu) (net 7) (tstamp 56AEC62F)) + (segment (start 71.8315 145.91) (end 73.017 145.91) (width 0.25) (layer F.Cu) (net 7) (tstamp 56AEC630)) + (segment (start 71.374 146.292) (end 71.4495 146.292) (width 0.25) (layer F.Cu) (net 7)) + (segment (start 73.016 145.911) (end 73.017 145.91) (width 0.25) (layer F.Cu) (net 7) (tstamp 56AEC5D2)) + (segment (start 80.5935 151.0665) (end 79.4265 151.0665) (width 1.016) (layer F.Cu) (net 8) (status C00000)) + (segment (start 79.4265 151.0665) (end 79.363 151.003) (width 1.016) (layer F.Cu) (net 8) (tstamp 56AF2464) (status C00000)) + (segment (start 85.725 135.3185) (end 85.09 135.9535) (width 0.25) (layer F.Cu) (net 8) (tstamp 56AEB946)) + (segment (start 85.09 135.9535) (end 85.09 137.6045) (width 0.25) (layer F.Cu) (net 8) (tstamp 56AEB947)) + (segment (start 85.09 137.6045) (end 84.836 137.8585) (width 0.25) (layer F.Cu) (net 8) (tstamp 56AEB949)) + (segment (start 84.836 137.8585) (end 83.8835 137.8585) (width 0.25) (layer F.Cu) (net 8) (tstamp 56AEB94A)) + (via (at 83.8835 137.8585) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 8)) + (segment (start 83.8835 137.8585) (end 83.3882 138.938) (width 0.25) (layer B.Cu) (net 8) (tstamp 56AEB94E)) + (segment (start 83.3882 138.938) (end 83.1088 140.1826) (width 0.25) (layer B.Cu) (net 8) (tstamp 56AEB94F)) + (via (at 83.1088 140.1826) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 8)) + (segment (start 83.1088 140.1826) (end 82.3468 140.7668) (width 0.25) (layer F.Cu) (net 8) (tstamp 56AEB953)) + (segment (start 82.3468 140.7668) (end 82.1182 148.0058) (width 0.25) (layer F.Cu) (net 8) (tstamp 56AEB954)) + (via (at 82.1182 148.0058) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 8)) + (segment (start 82.1182 148.0058) (end 82.169 149.7965) (width 0.25) (layer B.Cu) (net 8) (tstamp 56AEB957)) + (segment (start 82.169 149.7965) (end 80.9625 151.003) (width 0.25) (layer B.Cu) (net 8) (tstamp 56AEB958)) + (segment (start 80.9625 151.003) (end 80.391 151.003) (width 0.25) (layer B.Cu) (net 8) (tstamp 56AEB95F)) + (via (at 80.391 151.003) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 8)) + (segment (start 80.391 151.003) (end 80.3275 151.0665) (width 0.25) (layer F.Cu) (net 8) (tstamp 56AEB961)) + (segment (start 80.3275 151.0665) (end 79.2995 151.0665) (width 0.25) (layer F.Cu) (net 8) (tstamp 56AEB962)) + (segment (start 85.9275 135.3185) (end 85.725 135.3185) (width 0.25) (layer F.Cu) (net 8)) + (segment (start 87.5545 138.43) (end 87.4395 138.43) (width 0.25) (layer F.Cu) (net 8)) + (segment (start 87.4395 138.43) (end 86.6775 137.668) (width 0.25) (layer F.Cu) (net 8) (tstamp 56AEB8A6)) + (segment (start 86.6775 137.668) (end 86.6775 135.8265) (width 0.25) (layer F.Cu) (net 8) (tstamp 56AEB8A7)) + (segment (start 86.6775 135.8265) (end 86.1695 135.3185) (width 0.25) (layer F.Cu) (net 8) (tstamp 56AEB8A8)) + (segment (start 86.1695 135.3185) (end 85.9275 135.3185) (width 0.25) (layer F.Cu) (net 8) (tstamp 56AEB8A9)) + (segment (start 79.2995 151.0665) (end 79.2995 150.9275) (width 0.25) (layer F.Cu) (net 8)) + (segment (start 79.2995 150.9275) (end 78.867 150.495) (width 0.25) (layer F.Cu) (net 8) (tstamp 56AEB7AF)) + (segment (start 78.867 150.495) (end 78.867 149.36) (width 0.25) (layer F.Cu) (net 8) (tstamp 56AEB7B0)) + (segment (start 70.5485 125.222) (end 71.3105 125.984) (width 1.016) (layer B.Cu) (net 9)) + (segment (start 81.153 119.38) (end 81.153 122.3772) (width 1.016) (layer B.Cu) (net 9)) + (segment (start 82.2198 123.444) (end 82.3595 123.444) (width 1.016) (layer B.Cu) (net 9) (tstamp 56AF2245)) + (segment (start 81.153 122.3772) (end 82.2198 123.444) (width 1.016) (layer B.Cu) (net 9) (tstamp 56AF2244)) + (segment (start 93.2815 127.1905) (end 93.2815 124.206) (width 0.25) (layer B.Cu) (net 9)) + (segment (start 84.824 124.194) (end 83.5025 124.194) (width 0.25) (layer F.Cu) (net 9) (tstamp 56AED4E6)) + (segment (start 84.836 124.206) (end 84.824 124.194) (width 0.25) (layer F.Cu) (net 9) (tstamp 56AED4E5)) + (via (at 84.836 124.206) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 9)) + (segment (start 85.979 124.206) (end 84.836 124.206) (width 0.25) (layer B.Cu) (net 9) (tstamp 56AED4E3)) + (segment (start 86.487 123.698) (end 85.979 124.206) (width 0.25) (layer B.Cu) (net 9) (tstamp 56AED4E2)) + (segment (start 86.487 122.8725) (end 86.487 123.698) (width 0.25) (layer B.Cu) (net 9) (tstamp 56AED4E1)) + (segment (start 87.0585 122.301) (end 86.487 122.8725) (width 0.25) (layer B.Cu) (net 9) (tstamp 56AED4E0)) + (segment (start 93.091 122.301) (end 87.0585 122.301) (width 0.25) (layer B.Cu) (net 9) (tstamp 56AED4DF)) + (segment (start 93.6625 122.8725) (end 93.091 122.301) (width 0.25) (layer B.Cu) (net 9) (tstamp 56AED4DE)) + (segment (start 93.6625 123.825) (end 93.6625 122.8725) (width 0.25) (layer B.Cu) (net 9) (tstamp 56AED4DD)) + (segment (start 93.2815 124.206) (end 93.6625 123.825) (width 0.25) (layer B.Cu) (net 9) (tstamp 56AED4DC)) + (segment (start 82.3595 123.444) (end 81.661 123.444) (width 0.25) (layer F.Cu) (net 9)) + (segment (start 81.661 123.444) (end 79.6925 125.4125) (width 0.25) (layer F.Cu) (net 9) (tstamp 56AEC2A1)) + (segment (start 79.6925 125.4125) (end 77.4065 125.4125) (width 0.25) (layer F.Cu) (net 9) (tstamp 56AEC2A2)) + (segment (start 77.4065 125.4125) (end 76.708 126.111) (width 0.25) (layer F.Cu) (net 9) (tstamp 56AEC2AE)) + (segment (start 76.708 126.111) (end 75.3745 126.111) (width 0.25) (layer F.Cu) (net 9) (tstamp 56AEC2AF)) + (via (at 75.3745 126.111) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 9)) + (segment (start 75.3745 126.111) (end 75.2475 125.984) (width 0.25) (layer B.Cu) (net 9) (tstamp 56AEC2B1)) + (segment (start 75.2475 125.984) (end 71.3105 125.984) (width 0.25) (layer B.Cu) (net 9) (tstamp 56AEC2B2)) + (segment (start 83.5025 124.194) (end 83.1095 124.194) (width 0.25) (layer F.Cu) (net 9)) + (via (at 82.3595 123.444) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 9)) + (segment (start 83.1095 124.194) (end 82.3595 123.444) (width 0.25) (layer F.Cu) (net 9) (tstamp 56AEC255)) + (segment (start 94.5515 136.4855) (end 94.5515 137.4775) (width 0.508) (layer F.Cu) (net 10) (status 400000)) + (segment (start 94.5515 137.4775) (end 94.8055 137.7315) (width 0.508) (layer F.Cu) (net 10) (tstamp 56AF2419)) + (segment (start 94.1959 126.0729) (end 94.1959 124.4981) (width 0.508) (layer B.Cu) (net 10)) + (segment (start 94.1959 124.4981) (end 94.1705 124.4727) (width 0.508) (layer B.Cu) (net 10) (tstamp 56AF2306)) + (segment (start 95.7815 127.1905) (end 95.3135 127.1905) (width 0.508) (layer B.Cu) (net 10) (status C00000)) + (segment (start 95.3135 127.1905) (end 94.1959 126.0729) (width 0.508) (layer B.Cu) (net 10) (tstamp 56AF2301) (status 400000)) + (segment (start 94.1959 126.0729) (end 94.1705 126.0475) (width 0.508) (layer B.Cu) (net 10) (tstamp 56AF2304)) + (segment (start 90.805 121.6025) (end 92.6465 121.6025) (width 0.508) (layer B.Cu) (net 10)) + (segment (start 92.6465 121.6025) (end 92.6846 121.6406) (width 0.508) (layer B.Cu) (net 10) (tstamp 56AF22FB)) + (segment (start 83.5025 122.694) (end 86.1575 122.694) (width 0.508) (layer F.Cu) (net 10) (status 400000)) + (segment (start 86.1575 122.694) (end 87.249 121.6025) (width 0.508) (layer F.Cu) (net 10) (tstamp 56AF22F6)) + (segment (start 87.249 121.6025) (end 90.924498 121.6025) (width 0.508) (layer F.Cu) (net 10) (tstamp 56AF22F7)) + (segment (start 90.924498 121.6025) (end 90.805 121.6025) (width 0.508) (layer F.Cu) (net 10) (tstamp 56AF22F9)) + (segment (start 82.045 122.494) (end 83.3025 122.494) (width 0.508) (layer F.Cu) (net 10) (status C00000)) + (segment (start 83.3025 122.494) (end 83.5025 122.694) (width 0.508) (layer F.Cu) (net 10) (tstamp 56AF22F3) (status C00000)) + (segment (start 80.645 123.6345) (end 80.645 122.8725) (width 0.508) (layer F.Cu) (net 10)) + (segment (start 80.645 122.8725) (end 81.0235 122.494) (width 0.508) (layer F.Cu) (net 10) (tstamp 56AF22EF)) + (segment (start 81.0235 122.494) (end 82.045 122.494) (width 0.508) (layer F.Cu) (net 10) (tstamp 56AF22F0) (status 800000)) + (segment (start 80.01 124.2695) (end 80.645 123.6345) (width 0.508) (layer F.Cu) (net 10)) + (segment (start 76.3505 124.2695) (end 77.1779 124.2695) (width 0.508) (layer F.Cu) (net 10) (status 400000)) + (segment (start 79.7052 124.3838) (end 79.7814 124.46) (width 0.508) (layer F.Cu) (net 10) (tstamp 56AF22EA)) + (segment (start 77.2922 124.3838) (end 79.7052 124.3838) (width 0.508) (layer F.Cu) (net 10) (tstamp 56AF22E9)) + (segment (start 77.1779 124.2695) (end 77.2922 124.3838) (width 0.508) (layer F.Cu) (net 10) (tstamp 56AF22E8)) + (segment (start 71.4375 128.4725) (end 71.4375 127.5969) (width 1.016) (layer F.Cu) (net 10)) + (segment (start 71.7804 127.254) (end 72.0725 127.254) (width 1.016) (layer F.Cu) (net 10) (tstamp 56AF22A0)) + (segment (start 71.4375 127.5969) (end 71.7804 127.254) (width 1.016) (layer F.Cu) (net 10) (tstamp 56AF229F)) + (segment (start 73.66 129.54) (end 73.66 127.508) (width 1.016) (layer B.Cu) (net 10)) + (segment (start 73.66 127.508) (end 73.406 127.254) (width 1.016) (layer B.Cu) (net 10) (tstamp 56AF229B)) + (segment (start 73.406 127.254) (end 72.0725 127.254) (width 1.016) (layer B.Cu) (net 10) (tstamp 56AF229C)) + (segment (start 76.2 129.54) (end 73.66 129.54) (width 1.016) (layer B.Cu) (net 10)) + (segment (start 76.2 132.08) (end 76.2 129.54) (width 1.016) (layer B.Cu) (net 10)) + (segment (start 76.2 129.54) (end 76.2 128.4986) (width 1.016) (layer B.Cu) (net 10)) + (segment (start 76.2 128.4986) (end 76.6572 128.0414) (width 1.016) (layer B.Cu) (net 10) (tstamp 56AF2291)) + (segment (start 76.6572 128.0414) (end 76.6572 124.5762) (width 1.016) (layer B.Cu) (net 10) (tstamp 56AF2292)) + (segment (start 76.6572 124.5762) (end 76.3505 124.2695) (width 1.016) (layer B.Cu) (net 10) (tstamp 56AF2293)) + (segment (start 94.1705 126.0475) (end 95.3135 127.1905) (width 0.25) (layer B.Cu) (net 10) (tstamp 56AED4F2)) + (segment (start 94.1705 122.6185) (end 94.1705 124.4727) (width 0.25) (layer B.Cu) (net 10) (tstamp 56AED4F1)) + (segment (start 90.805 121.6025) (end 90.9955 121.793) (width 0.25) (layer B.Cu) (net 10) (tstamp 56AED4EE)) + (segment (start 90.9955 121.793) (end 93.345 121.793) (width 0.25) (layer B.Cu) (net 10) (tstamp 56AED4EF)) + (segment (start 93.345 121.793) (end 94.1705 122.6185) (width 0.25) (layer B.Cu) (net 10) (tstamp 56AED4F0)) + (segment (start 94.1705 124.4727) (end 94.1705 126.0475) (width 0.25) (layer B.Cu) (net 10) (tstamp 56AF2309)) + (via (at 90.805 121.6025) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 10)) + (segment (start 87.249 121.6025) (end 90.805 121.6025) (width 0.25) (layer F.Cu) (net 10) (tstamp 56AED4EA)) + (segment (start 86.1575 122.694) (end 87.249 121.6025) (width 0.25) (layer F.Cu) (net 10) (tstamp 56AED4E9)) + (segment (start 95.885 137.16) (end 95.885 127.294) (width 0.25) (layer B.Cu) (net 10) (tstamp 56AED4A9)) + (segment (start 95.3135 137.7315) (end 95.885 137.16) (width 0.25) (layer B.Cu) (net 10) (tstamp 56AED4A8)) + (segment (start 94.8055 137.7315) (end 95.3135 137.7315) (width 0.25) (layer B.Cu) (net 10) (tstamp 56AED4A7)) + (via (at 94.8055 137.7315) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 10)) + (segment (start 94.5515 137.4775) (end 94.8055 137.7315) (width 0.25) (layer F.Cu) (net 10) (tstamp 56AED4A5)) + (segment (start 95.885 127.294) (end 95.7815 127.1905) (width 0.25) (layer B.Cu) (net 10) (tstamp 56AED4AA)) + (segment (start 95.504 123.7495) (end 95.504 126.913) (width 0.25) (layer F.Cu) (net 10)) + (segment (start 95.504 126.913) (end 95.7815 127.1905) (width 0.25) (layer F.Cu) (net 10) (tstamp 56AED378)) + (segment (start 76.3505 124.2695) (end 80.01 124.2695) (width 0.25) (layer F.Cu) (net 10)) + (segment (start 81.0235 122.494) (end 82.045 122.494) (width 0.25) (layer F.Cu) (net 10) (tstamp 56AEC22C)) + (segment (start 80.645 122.8725) (end 81.0235 122.494) (width 0.25) (layer F.Cu) (net 10) (tstamp 56AEC22B)) + (segment (start 83.3025 122.494) (end 83.5025 122.694) (width 0.25) (layer F.Cu) (net 10) (tstamp 56AEC21E)) + (via (at 72.0725 127.254) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 10)) + (segment (start 72.0725 127.254) (end 72.136 127.1905) (width 0.25) (layer B.Cu) (net 10) (tstamp 56AEC17A)) + (segment (start 73.3425 127.1905) (end 73.66 127.508) (width 0.25) (layer B.Cu) (net 10) (tstamp 56AEC17C)) + (segment (start 72.136 127.1905) (end 73.3425 127.1905) (width 0.25) (layer B.Cu) (net 10) (tstamp 56AEC17B)) + (segment (start 76.2 129.54) (end 76.2 124.42) (width 0.25) (layer B.Cu) (net 10)) + (segment (start 76.2 124.42) (end 76.3505 124.2695) (width 0.25) (layer B.Cu) (net 10) (tstamp 56AEC150)) + (segment (start 76.033 129.373) (end 76.2 129.54) (width 0.25) (layer B.Cu) (net 10) (tstamp 56AEC084)) + (segment (start 78.961 130.81) (end 77.47 130.81) (width 0.25) (layer F.Cu) (net 10)) + (segment (start 77.47 130.81) (end 76.2 132.08) (width 0.25) (layer F.Cu) (net 10) (tstamp 56AEB555)) + (segment (start 68.707 133.338) (end 66.052 133.338) (width 0.25) (layer F.Cu) (net 11)) + (segment (start 66.052 133.338) (end 66.04 133.35) (width 0.25) (layer F.Cu) (net 11) (tstamp 56AEB25F)) + (segment (start 68.719 130.302) (end 68.719 131.826) (width 0.25) (layer F.Cu) (net 12)) + (segment (start 68.719 131.826) (end 68.707 131.838) (width 0.25) (layer F.Cu) (net 12) (tstamp 56AEB259)) + (segment (start 68.719 130.302) (end 66.548 130.302) (width 0.25) (layer F.Cu) (net 12)) + (segment (start 66.548 130.302) (end 66.04 130.81) (width 0.25) (layer F.Cu) (net 12) (tstamp 56AEB256)) + (segment (start 68.707 130.314) (end 68.719 130.302) (width 0.25) (layer F.Cu) (net 12) (tstamp 56AEAAD5)) + (segment (start 66.802 130.048) (end 66.04 130.81) (width 0.25) (layer F.Cu) (net 12) (tstamp 56AEAACE)) + (segment (start 68.707 136.259) (end 68.211 136.259) (width 0.25) (layer F.Cu) (net 13)) + (segment (start 68.211 136.259) (end 66.04 138.43) (width 0.25) (layer F.Cu) (net 13) (tstamp 56AEB266)) + (segment (start 68.707 136.259) (end 68.707 136.398) (width 0.25) (layer F.Cu) (net 13)) + (segment (start 66.675 138.43) (end 66.04 138.43) (width 0.25) (layer F.Cu) (net 13) (tstamp 56AEAAF5)) + (segment (start 68.707 134.759) (end 69.977 134.759) (width 0.25) (layer F.Cu) (net 14)) + (segment (start 69.977 134.759) (end 70.358 134.378) (width 0.25) (layer F.Cu) (net 14) (tstamp 56AEB269)) + (segment (start 68.707 134.759) (end 67.171 134.759) (width 0.25) (layer F.Cu) (net 14)) + (segment (start 67.171 134.759) (end 66.04 135.89) (width 0.25) (layer F.Cu) (net 14) (tstamp 56AEB262)) + (segment (start 68.707 134.759) (end 68.949 134.759) (width 0.25) (layer F.Cu) (net 14)) + (segment (start 68.707 134.759) (end 68.441 134.759) (width 0.25) (layer F.Cu) (net 14)) + (segment (start 74.3585 127.762) (end 74.3585 125.7935) (width 1.016) (layer F.Cu) (net 15)) + (segment (start 74.3585 125.7935) (end 73.8505 125.2855) (width 1.016) (layer F.Cu) (net 15) (tstamp 56AF22A6)) + (segment (start 73.8505 125.2855) (end 73.8505 124.2695) (width 1.016) (layer F.Cu) (net 15) (tstamp 56AF22A7)) + (segment (start 73.8505 124.2695) (end 73.8505 123.6345) (width 1.016) (layer B.Cu) (net 15)) + (segment (start 73.8505 123.6345) (end 75.7555 121.7295) (width 1.016) (layer B.Cu) (net 15) (tstamp 56AF223E)) + (segment (start 75.7555 121.7295) (end 75.7555 119.44604) (width 1.016) (layer B.Cu) (net 15) (tstamp 56AF223F)) + (segment (start 82.677 130.175) (end 82.677 131.8514) (width 0.25) (layer F.Cu) (net 15)) + (segment (start 88.888 142.5328) (end 88.888 143.129) (width 0.25) (layer F.Cu) (net 15) (tstamp 56AF1928)) + (segment (start 88.5952 142.24) (end 88.888 142.5328) (width 0.25) (layer F.Cu) (net 15) (tstamp 56AF1927)) + (segment (start 88.392 142.24) (end 88.5952 142.24) (width 0.25) (layer F.Cu) (net 15) (tstamp 56AF1926)) + (segment (start 88.138 141.986) (end 88.392 142.24) (width 0.25) (layer F.Cu) (net 15) (tstamp 56AF1925)) + (segment (start 87.0204 141.986) (end 88.138 141.986) (width 0.25) (layer F.Cu) (net 15) (tstamp 56AF1924)) + (via (at 87.0204 141.986) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 15)) + (segment (start 86.4616 141.4272) (end 87.0204 141.986) (width 0.25) (layer B.Cu) (net 15) (tstamp 56AF1920)) + (segment (start 86.4616 139.2428) (end 86.4616 141.4272) (width 0.25) (layer B.Cu) (net 15) (tstamp 56AF191E)) + (segment (start 84.4296 137.2108) (end 86.4616 139.2428) (width 0.25) (layer B.Cu) (net 15) (tstamp 56AF191D)) + (via (at 84.4296 137.2108) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 15)) + (segment (start 84.4296 136.7028) (end 84.4296 137.2108) (width 0.25) (layer F.Cu) (net 15) (tstamp 56AF1917)) + (segment (start 83.1088 135.382) (end 84.4296 136.7028) (width 0.25) (layer F.Cu) (net 15) (tstamp 56AF1916)) + (segment (start 83.1088 134.9756) (end 83.1088 135.382) (width 0.25) (layer F.Cu) (net 15) (tstamp 56AF1914)) + (segment (start 82.042 133.9088) (end 83.1088 134.9756) (width 0.25) (layer F.Cu) (net 15) (tstamp 56AF1913)) + (segment (start 82.042 132.4864) (end 82.042 133.9088) (width 0.25) (layer F.Cu) (net 15) (tstamp 56AF1912)) + (segment (start 82.677 131.8514) (end 82.042 132.4864) (width 0.25) (layer F.Cu) (net 15) (tstamp 56AF1911)) + (segment (start 73.8505 123.6345) (end 75.7555 121.7295) (width 0.25) (layer B.Cu) (net 15) (tstamp 56AEC1B5)) + (segment (start 75.7555 121.7295) (end 75.7555 119.44604) (width 0.25) (layer B.Cu) (net 15) (tstamp 56AEC1B7)) + (segment (start 73.8505 125.2855) (end 73.8505 124.2695) (width 0.25) (layer F.Cu) (net 15) (tstamp 56AEC18B)) + (segment (start 74.3585 125.7935) (end 73.8505 125.2855) (width 0.25) (layer F.Cu) (net 15) (tstamp 56AEC18A)) + (segment (start 71.4375 129.9725) (end 71.4375 131.064) (width 0.25) (layer F.Cu) (net 15)) + (segment (start 72.4535 132.08) (end 73.66 132.08) (width 0.25) (layer F.Cu) (net 15) (tstamp 56AEC164)) + (segment (start 71.4375 131.064) (end 72.4535 132.08) (width 0.25) (layer F.Cu) (net 15) (tstamp 56AEC163)) + (segment (start 73.66 132.08) (end 73.5965 132.08) (width 0.25) (layer B.Cu) (net 15)) + (segment (start 73.9895 124.0035) (end 73.533 124.46) (width 0.25) (layer F.Cu) (net 15) (tstamp 56AEC08D)) + (segment (start 73.66 132.08) (end 72.39 130.81) (width 0.25) (layer F.Cu) (net 15)) + (segment (start 83.312 130.81) (end 84.361 130.81) (width 0.25) (layer F.Cu) (net 15) (tstamp 56AEC079)) + (segment (start 82.6135 130.1115) (end 82.677 130.175) (width 0.25) (layer F.Cu) (net 15) (tstamp 56AEC078)) + (segment (start 82.677 130.175) (end 83.312 130.81) (width 0.25) (layer F.Cu) (net 15) (tstamp 56AF190F)) + (segment (start 82.6135 128.651) (end 82.6135 130.1115) (width 0.25) (layer F.Cu) (net 15) (tstamp 56AEC076)) + (segment (start 80.01 126.0475) (end 82.6135 128.651) (width 0.25) (layer F.Cu) (net 15) (tstamp 56AEC074)) + (segment (start 77.851 126.0475) (end 80.01 126.0475) (width 0.25) (layer F.Cu) (net 15) (tstamp 56AEC072)) + (segment (start 76.1365 127.762) (end 77.851 126.0475) (width 0.25) (layer F.Cu) (net 15) (tstamp 56AEC070)) + (segment (start 72.9615 127.762) (end 74.3585 127.762) (width 0.25) (layer F.Cu) (net 15) (tstamp 56AEC06F)) + (segment (start 74.3585 127.762) (end 76.1365 127.762) (width 0.25) (layer F.Cu) (net 15) (tstamp 56AEC188)) + (segment (start 72.39 128.3335) (end 72.9615 127.762) (width 0.25) (layer F.Cu) (net 15) (tstamp 56AEC06E)) + (segment (start 72.39 130.81) (end 72.39 128.3335) (width 0.25) (layer F.Cu) (net 15) (tstamp 56AEC06D)) + (segment (start 73.66 132.08) (end 73.66 131.5085) (width 0.25) (layer F.Cu) (net 15)) + (segment (start 78.486 121.9708) (end 78.486 122.685) (width 0.508) (layer F.Cu) (net 16)) + (segment (start 78.486 122.685) (end 79.245 123.444) (width 0.508) (layer F.Cu) (net 16) (tstamp 56AF22E5) (status 800000)) + (segment (start 78.9178 122.4026) (end 78.486 121.9708) (width 1.016) (layer F.Cu) (net 16) (tstamp 56AF22D1)) + (segment (start 78.486 121.9708) (end 79.2226 122.7074) (width 1.016) (layer F.Cu) (net 16) (tstamp 56AF22E3)) + (segment (start 78.359 122.4026) (end 78.9178 122.4026) (width 1.016) (layer F.Cu) (net 16)) + (segment (start 65.4685 125.222) (end 66.7385 125.222) (width 1.016) (layer F.Cu) (net 16)) + (segment (start 66.7385 125.222) (end 68.961 122.9995) (width 1.016) (layer F.Cu) (net 16) (tstamp 56AF22C7)) + (segment (start 68.961 122.9995) (end 69.0499 122.9995) (width 1.016) (layer F.Cu) (net 16) (tstamp 56AF22C8)) + (segment (start 69.0499 122.9995) (end 69.6468 122.4026) (width 1.016) (layer F.Cu) (net 16) (tstamp 56AF22C9)) + (segment (start 69.6468 122.4026) (end 78.359 122.4026) (width 1.016) (layer F.Cu) (net 16) (tstamp 56AF22CA)) + (segment (start 78.359 122.4026) (end 78.4098 122.4026) (width 1.016) (layer F.Cu) (net 16) (tstamp 56AF22CF)) + (segment (start 65.4685 125.222) (end 65.4685 119.57304) (width 1.016) (layer F.Cu) (net 16)) + (segment (start 65.4685 119.57304) (end 65.5955 119.44604) (width 1.016) (layer F.Cu) (net 16) (tstamp 56AF22BB)) + (segment (start 79.245 123.444) (end 78.994 123.444) (width 0.25) (layer F.Cu) (net 16)) + (segment (start 78.994 123.444) (end 78.5495 122.9995) (width 0.25) (layer F.Cu) (net 16) (tstamp 56AEC1BB)) + (segment (start 78.5495 122.9995) (end 68.961 122.9995) (width 0.25) (layer F.Cu) (net 16) (tstamp 56AEC1BC)) + (segment (start 68.961 122.9995) (end 66.7385 125.222) (width 0.25) (layer F.Cu) (net 16) (tstamp 56AEC1BD)) + (segment (start 65.4685 119.57304) (end 65.5955 119.44604) (width 0.25) (layer F.Cu) (net 16) (tstamp 56AEC197)) + (segment (start 84.717 147.51) (end 85.5985 147.51) (width 0.25) (layer F.Cu) (net 17)) + (segment (start 86.8045 145.3) (end 87.388 144.7165) (width 0.25) (layer F.Cu) (net 17) (tstamp 56AEC46C)) + (segment (start 86.8045 146.304) (end 86.8045 145.3) (width 0.25) (layer F.Cu) (net 17) (tstamp 56AEC46B)) + (segment (start 85.5985 147.51) (end 86.8045 146.304) (width 0.25) (layer F.Cu) (net 17) (tstamp 56AEC46A)) + (segment (start 87.388 143.129) (end 87.388 144.7165) (width 0.25) (layer F.Cu) (net 17)) + (segment (start 84.717 146.71) (end 83.845 146.71) (width 0.25) (layer F.Cu) (net 18)) + (segment (start 79.6798 144.9832) (end 79.6543 144.9832) (width 0.25) (layer F.Cu) (net 18) (tstamp 56AECE5E)) + (via (at 79.6798 144.9832) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 18)) + (segment (start 83.312 145.7325) (end 79.6798 144.9832) (width 0.25) (layer B.Cu) (net 18) (tstamp 56AECE5C)) + (segment (start 83.3755 145.796) (end 83.312 145.7325) (width 0.25) (layer B.Cu) (net 18) (tstamp 56AECE5B)) + (via (at 83.3755 145.796) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 18)) + (segment (start 83.5025 145.923) (end 83.3755 145.796) (width 0.25) (layer F.Cu) (net 18) (tstamp 56AECE57)) + (segment (start 83.5025 146.3675) (end 83.5025 145.923) (width 0.25) (layer F.Cu) (net 18) (tstamp 56AECE55)) + (segment (start 83.845 146.71) (end 83.5025 146.3675) (width 0.25) (layer F.Cu) (net 18) (tstamp 56AECE4D)) + (segment (start 79.6798 144.7927) (end 79.6543 144.7927) (width 0.25) (layer F.Cu) (net 18) (tstamp 56AEC488)) + (segment (start 79.6543 144.7927) (end 79.6798 144.7927) (width 0.25) (layer F.Cu) (net 18) (tstamp 56AEC489)) + (segment (start 79.6798 144.7927) (end 79.6543 144.7927) (width 0.25) (layer F.Cu) (net 18) (tstamp 56AEC48B)) + (segment (start 79.667 149.36) (end 79.6543 144.9832) (width 0.25) (layer F.Cu) (net 18)) + (segment (start 79.6543 144.9832) (end 79.6543 144.7927) (width 0.25) (layer F.Cu) (net 18) (tstamp 56AECE61)) + (segment (start 79.6543 144.7927) (end 79.4765 140.5891) (width 0.25) (layer F.Cu) (net 18) (tstamp 56AEC48C)) + (segment (start 82.7405 127) (end 84.361 127) (width 0.25) (layer F.Cu) (net 18) (tstamp 56AEB70A)) + (via (at 82.7405 127) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 18)) + (segment (start 81.9785 127.762) (end 82.7405 127) (width 0.25) (layer B.Cu) (net 18) (tstamp 56AEB708)) + (segment (start 81.9785 131.318) (end 81.9785 127.762) (width 0.25) (layer B.Cu) (net 18) (tstamp 56AEB707)) + (segment (start 79.6925 133.604) (end 81.9785 131.318) (width 0.25) (layer B.Cu) (net 18) (tstamp 56AEB706)) + (segment (start 79.502 140.5636) (end 79.6925 133.604) (width 0.25) (layer B.Cu) (net 18) (tstamp 56AEB705)) + (via (at 79.502 140.5636) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 18)) + (segment (start 79.4765 140.5891) (end 79.502 140.5636) (width 0.25) (layer F.Cu) (net 18) (tstamp 56AEB703)) + (segment (start 84.361 128.27) (end 84.361 127) (width 0.25) (layer F.Cu) (net 18)) + (segment (start 88.7984 140.5128) (end 89.4207 140.5255) (width 0.25) (layer F.Cu) (net 20)) + (segment (start 85.928 145.11) (end 84.717 145.11) (width 0.25) (layer F.Cu) (net 20) (tstamp 56AF1899)) + (segment (start 86.0552 145.2372) (end 85.928 145.11) (width 0.25) (layer F.Cu) (net 20) (tstamp 56AF1898)) + (via (at 86.0552 145.2372) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 20)) + (segment (start 86.2076 145.0848) (end 86.0552 145.2372) (width 0.25) (layer B.Cu) (net 20) (tstamp 56AF1894)) + (segment (start 86.7156 145.0848) (end 86.2076 145.0848) (width 0.25) (layer B.Cu) (net 20) (tstamp 56AF1893)) + (segment (start 89.408 142.3924) (end 86.7156 145.0848) (width 0.25) (layer B.Cu) (net 20) (tstamp 56AF1892)) + (segment (start 89.408 140.716) (end 89.408 142.3924) (width 0.25) (layer B.Cu) (net 20) (tstamp 56AF1891)) + (segment (start 89.5096 140.6144) (end 89.408 140.716) (width 0.25) (layer B.Cu) (net 20) (tstamp 56AF1890)) + (via (at 89.5096 140.6144) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 20)) + (segment (start 89.4207 140.5255) (end 89.5096 140.6144) (width 0.25) (layer F.Cu) (net 20) (tstamp 56AF1888)) + (segment (start 86.868 140.5128) (end 87.146002 140.5128) (width 0.25) (layer F.Cu) (net 21)) + (segment (start 85.814 144.31) (end 84.717 144.31) (width 0.25) (layer F.Cu) (net 21) (tstamp 56AF1A41)) + (segment (start 85.9028 144.2212) (end 85.814 144.31) (width 0.25) (layer F.Cu) (net 21) (tstamp 56AF1A40)) + (segment (start 85.9028 144.0688) (end 85.9028 144.2212) (width 0.25) (layer F.Cu) (net 21) (tstamp 56AF1A3F)) + (segment (start 86.3092 143.6624) (end 85.9028 144.0688) (width 0.25) (layer F.Cu) (net 21) (tstamp 56AF1A3E)) + (via (at 86.3092 143.6624) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 21)) + (segment (start 86.36 143.6624) (end 86.3092 143.6624) (width 0.25) (layer B.Cu) (net 21) (tstamp 56AF1A3C)) + (segment (start 87.6808 142.3416) (end 86.36 143.6624) (width 0.25) (layer B.Cu) (net 21) (tstamp 56AF1A3B)) + (segment (start 87.6808 141.3256) (end 87.6808 142.3416) (width 0.25) (layer B.Cu) (net 21) (tstamp 56AF1A3A)) + (via (at 87.6808 141.3256) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 21)) + (segment (start 87.6808 141.047598) (end 87.6808 141.3256) (width 0.25) (layer F.Cu) (net 21) (tstamp 56AF1A37)) + (segment (start 87.146002 140.5128) (end 87.6808 141.047598) (width 0.25) (layer F.Cu) (net 21) (tstamp 56AF1A2F)) + (segment (start 84.717 143.51) (end 83.5152 143.51) (width 0.25) (layer F.Cu) (net 22)) + (segment (start 79.4182 131.6228) (end 78.961 132.08) (width 0.25) (layer F.Cu) (net 22) (tstamp 56AED6F7)) + (segment (start 80.1116 131.6228) (end 79.4182 131.6228) (width 0.25) (layer F.Cu) (net 22) (tstamp 56AED6F6)) + (segment (start 80.3656 131.8768) (end 80.1116 131.6228) (width 0.25) (layer F.Cu) (net 22) (tstamp 56AED6F5)) + (via (at 80.3656 131.8768) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 22)) + (segment (start 80.3656 132.2324) (end 80.3656 131.8768) (width 0.25) (layer B.Cu) (net 22) (tstamp 56AED6F2)) + (segment (start 78.9432 133.6548) (end 80.3656 132.2324) (width 0.25) (layer B.Cu) (net 22) (tstamp 56AED6EF)) + (segment (start 78.6384 141.986) (end 78.9432 133.6548) (width 0.25) (layer B.Cu) (net 22) (tstamp 56AED6E6)) + (segment (start 79.8068 142.3416) (end 78.6384 141.986) (width 0.25) (layer B.Cu) (net 22) (tstamp 56AED6E3)) + (segment (start 81.3308 142.494) (end 79.8068 142.3416) (width 0.25) (layer B.Cu) (net 22) (tstamp 56AED6E2)) + (segment (start 82.811049 143.452151) (end 81.3308 142.494) (width 0.25) (layer B.Cu) (net 22) (tstamp 56AED6DF)) + (segment (start 83.254151 143.452151) (end 82.811049 143.452151) (width 0.25) (layer B.Cu) (net 22) (tstamp 56AED6DE)) + (segment (start 83.4136 143.6116) (end 83.254151 143.452151) (width 0.25) (layer B.Cu) (net 22) (tstamp 56AED6DD)) + (via (at 83.4136 143.6116) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 22)) + (segment (start 83.5152 143.51) (end 83.4136 143.6116) (width 0.25) (layer F.Cu) (net 22) (tstamp 56AED6DB)) + (segment (start 78.961 129.54) (end 79.9084 129.54) (width 0.25) (layer F.Cu) (net 23)) + (segment (start 79.9084 129.54) (end 80.264 129.8956) (width 0.25) (layer F.Cu) (net 23) (tstamp 56AF1868)) + (segment (start 80.264 129.8956) (end 80.264 130.7592) (width 0.25) (layer F.Cu) (net 23) (tstamp 56AF1869)) + (segment (start 80.264 130.7592) (end 81.026 131.5212) (width 0.25) (layer F.Cu) (net 23) (tstamp 56AF186A)) + (segment (start 81.026 131.5212) (end 81.026 134.1628) (width 0.25) (layer F.Cu) (net 23) (tstamp 56AF186B)) + (segment (start 81.026 134.1628) (end 81.8388 134.9756) (width 0.25) (layer F.Cu) (net 23) (tstamp 56AF186E)) + (via (at 81.8388 134.9756) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 23)) + (segment (start 81.8388 134.9756) (end 81.788 135.0264) (width 0.25) (layer B.Cu) (net 23) (tstamp 56AF1873)) + (segment (start 81.788 135.0264) (end 81.788 140.462) (width 0.25) (layer B.Cu) (net 23) (tstamp 56AF1874)) + (segment (start 81.788 140.462) (end 82.3468 141.1224) (width 0.25) (layer B.Cu) (net 23) (tstamp 56AF1875)) + (segment (start 82.3468 141.1224) (end 83.058 141.0716) (width 0.25) (layer B.Cu) (net 23) (tstamp 56AF1879)) + (via (at 83.058 141.0716) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 23)) + (segment (start 83.058 141.0716) (end 83.528 142.71) (width 0.25) (layer F.Cu) (net 23) (tstamp 56AF187E)) + (segment (start 83.528 142.71) (end 84.717 142.71) (width 0.25) (layer F.Cu) (net 23) (tstamp 56AF187F)) + (segment (start 80.467 137.66) (end 80.467 139.141) (width 0.25) (layer F.Cu) (net 27)) + (segment (start 80.836 139.51) (end 84.717 139.51) (width 0.25) (layer F.Cu) (net 27) (tstamp 56AEB57C)) + (segment (start 80.467 139.141) (end 80.836 139.51) (width 0.25) (layer F.Cu) (net 27) (tstamp 56AEB57B)) + (segment (start 82.867 136.462) (end 82.867 137.66) (width 0.25) (layer F.Cu) (net 28) (tstamp 56AED0EE)) + (segment (start 82.931 136.398) (end 82.867 136.462) (width 0.25) (layer F.Cu) (net 28) (tstamp 56AED0ED)) + (via (at 82.931 136.398) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 28)) + (segment (start 88.646 136.398) (end 82.931 136.398) (width 0.25) (layer B.Cu) (net 28) (tstamp 56AED0E5)) + (segment (start 89.662 135.382) (end 88.646 136.398) (width 0.25) (layer B.Cu) (net 28) (tstamp 56AED0E4)) + (segment (start 90.678 135.382) (end 89.662 135.382) (width 0.25) (layer B.Cu) (net 28) (tstamp 56AED0E3)) + (segment (start 90.805 135.509) (end 90.678 135.382) (width 0.25) (layer B.Cu) (net 28) (tstamp 56AED0E2)) + (via (at 90.805 135.509) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 28)) + (segment (start 91.313 136.017) (end 90.805 135.509) (width 0.25) (layer F.Cu) (net 28) (tstamp 56AED0DC)) + (segment (start 91.313 136.144) (end 91.313 136.017) (width 0.25) (layer F.Cu) (net 28)) + (segment (start 78.867 137.66) (end 78.867 136.652) (width 0.25) (layer F.Cu) (net 31)) + (segment (start 88.5825 137.414) (end 89.281 137.414) (width 0.25) (layer F.Cu) (net 31) (tstamp 56AED1CF)) + (segment (start 88.5825 135.636) (end 88.5825 137.414) (width 0.25) (layer F.Cu) (net 31) (tstamp 56AED1CE)) + (segment (start 88.4555 135.509) (end 88.5825 135.636) (width 0.25) (layer F.Cu) (net 31) (tstamp 56AED1CD)) + (via (at 88.4555 135.509) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 31)) + (segment (start 82.55 135.509) (end 88.4555 135.509) (width 0.25) (layer B.Cu) (net 31) (tstamp 56AED1CB)) + (segment (start 82.423 135.636) (end 82.55 135.509) (width 0.25) (layer B.Cu) (net 31) (tstamp 56AED1CA)) + (via (at 82.423 135.636) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 31)) + (segment (start 81.7245 136.3345) (end 82.423 135.636) (width 0.25) (layer F.Cu) (net 31) (tstamp 56AED1C6)) + (segment (start 79.1845 136.3345) (end 81.7245 136.3345) (width 0.25) (layer F.Cu) (net 31) (tstamp 56AED1C5)) + (segment (start 78.867 136.652) (end 79.1845 136.3345) (width 0.25) (layer F.Cu) (net 31) (tstamp 56AED1C4)) + (segment (start 78.867 137.66) (end 78.867 136.906) (width 0.25) (layer F.Cu) (net 31)) + (segment (start 73.017 140.31) (end 73.9136 140.31) (width 0.25) (layer F.Cu) (net 36)) + (segment (start 81.28 125.159) (end 82.045 124.394) (width 0.25) (layer F.Cu) (net 36) (tstamp 56AED6A2)) + (segment (start 81.28 125.4252) (end 81.28 125.159) (width 0.25) (layer F.Cu) (net 36) (tstamp 56AED6A1)) + (segment (start 81.1784 125.5268) (end 81.28 125.4252) (width 0.25) (layer F.Cu) (net 36) (tstamp 56AED6A0)) + (via (at 81.1784 125.5268) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 36)) + (segment (start 81.1784 129.1844) (end 81.1784 125.5268) (width 0.25) (layer B.Cu) (net 36) (tstamp 56AED69D)) + (segment (start 78.8924 131.4704) (end 81.1784 129.1844) (width 0.25) (layer B.Cu) (net 36) (tstamp 56AED69B)) + (segment (start 78.8924 133.0452) (end 78.8924 131.4704) (width 0.25) (layer B.Cu) (net 36) (tstamp 56AED699)) + (segment (start 76.4032 135.5344) (end 78.8924 133.0452) (width 0.25) (layer B.Cu) (net 36) (tstamp 56AED697)) + (segment (start 76.4032 137.8204) (end 76.4032 135.5344) (width 0.25) (layer B.Cu) (net 36) (tstamp 56AED695)) + (segment (start 74.8792 139.3444) (end 76.4032 137.8204) (width 0.25) (layer B.Cu) (net 36) (tstamp 56AED694)) + (via (at 74.8792 139.3444) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 36)) + (segment (start 73.9136 140.31) (end 74.8792 139.3444) (width 0.25) (layer F.Cu) (net 36) (tstamp 56AED690)) + (segment (start 90.7574 123.22854) (end 90.7574 124.0949) (width 0.25) (layer F.Cu) (net 38)) + (segment (start 74.981 141.91) (end 73.017 141.91) (width 0.25) (layer F.Cu) (net 38) (tstamp 56AED50D)) + (segment (start 75.184 142.113) (end 74.981 141.91) (width 0.25) (layer F.Cu) (net 38) (tstamp 56AED50C)) + (via (at 75.184 142.113) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 38)) + (segment (start 75.6285 142.5575) (end 75.184 142.113) (width 0.25) (layer B.Cu) (net 38) (tstamp 56AED50A)) + (segment (start 75.6285 147.5105) (end 75.6285 142.5575) (width 0.25) (layer B.Cu) (net 38) (tstamp 56AED509)) + (segment (start 76.327 148.209) (end 75.6285 147.5105) (width 0.25) (layer B.Cu) (net 38) (tstamp 56AED508)) + (segment (start 76.327 149.5425) (end 76.327 148.209) (width 0.25) (layer B.Cu) (net 38) (tstamp 56AED506)) + (segment (start 78.486 151.7015) (end 76.327 149.5425) (width 0.25) (layer B.Cu) (net 38) (tstamp 56AED504)) + (segment (start 90.4875 151.7015) (end 78.486 151.7015) (width 0.25) (layer B.Cu) (net 38) (tstamp 56AED502)) + (segment (start 93.345 148.844) (end 90.4875 151.7015) (width 0.25) (layer B.Cu) (net 38) (tstamp 56AED500)) + (segment (start 93.345 136.017) (end 93.345 148.844) (width 0.25) (layer B.Cu) (net 38) (tstamp 56AED4FE)) + (segment (start 91.694 134.366) (end 93.345 136.017) (width 0.25) (layer B.Cu) (net 38) (tstamp 56AED4FC)) + (segment (start 91.694 125.0315) (end 91.694 134.366) (width 0.25) (layer B.Cu) (net 38) (tstamp 56AED4FB)) + (segment (start 91.3765 124.714) (end 91.694 125.0315) (width 0.25) (layer B.Cu) (net 38) (tstamp 56AED4FA)) + (via (at 91.3765 124.714) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 38)) + (segment (start 90.7574 124.0949) (end 91.3765 124.714) (width 0.25) (layer F.Cu) (net 38) (tstamp 56AED4F8)) + (segment (start 73.017 142.71) (end 74.384 142.71) (width 0.25) (layer F.Cu) (net 39)) + (segment (start 90.1074 124.5226) (end 90.1074 123.22854) (width 0.25) (layer F.Cu) (net 39) (tstamp 56AED729)) + (segment (start 90.0176 124.6124) (end 90.1074 124.5226) (width 0.25) (layer F.Cu) (net 39) (tstamp 56AED728)) + (via (at 90.0176 124.6124) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 39)) + (segment (start 89.1032 124.6124) (end 90.0176 124.6124) (width 0.25) (layer B.Cu) (net 39) (tstamp 56AED726)) + (segment (start 88.392 125.3236) (end 89.1032 124.6124) (width 0.25) (layer B.Cu) (net 39) (tstamp 56AED725)) + (segment (start 88.392 133.7056) (end 88.392 125.3236) (width 0.25) (layer B.Cu) (net 39) (tstamp 56AED722)) + (segment (start 87.8332 134.2644) (end 88.392 133.7056) (width 0.25) (layer B.Cu) (net 39) (tstamp 56AED71D)) + (segment (start 83.0072 134.2644) (end 87.8332 134.2644) (width 0.25) (layer B.Cu) (net 39) (tstamp 56AED71C)) + (segment (start 82.6516 133.9088) (end 83.0072 134.2644) (width 0.25) (layer B.Cu) (net 39) (tstamp 56AED71B)) + (segment (start 81.6864 133.9088) (end 82.6516 133.9088) (width 0.25) (layer B.Cu) (net 39) (tstamp 56AED71A)) + (segment (start 81.1784 134.4168) (end 81.6864 133.9088) (width 0.25) (layer B.Cu) (net 39) (tstamp 56AED719)) + (segment (start 80.9244 141.605) (end 81.1784 134.4168) (width 0.25) (layer B.Cu) (net 39) (tstamp 56AED718)) + (segment (start 80.8736 141.6558) (end 80.9244 141.605) (width 0.25) (layer B.Cu) (net 39) (tstamp 56AED717)) + (via (at 80.8736 141.6558) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 39)) + (segment (start 81.1276 144.1704) (end 80.8736 141.6558) (width 0.25) (layer F.Cu) (net 39) (tstamp 56AED710)) + (segment (start 81.2292 144.272) (end 81.1276 144.1704) (width 0.25) (layer F.Cu) (net 39) (tstamp 56AED70F)) + (via (at 81.2292 144.272) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 39)) + (segment (start 79.502 144.272) (end 81.2292 144.272) (width 0.25) (layer B.Cu) (net 39) (tstamp 56AED70B)) + (segment (start 78.9432 143.7132) (end 79.502 144.272) (width 0.25) (layer B.Cu) (net 39) (tstamp 56AED70A)) + (via (at 78.9432 143.7132) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 39)) + (segment (start 75.3872 143.7132) (end 78.9432 143.7132) (width 0.25) (layer F.Cu) (net 39) (tstamp 56AED706)) + (segment (start 74.384 142.71) (end 75.3872 143.7132) (width 0.25) (layer F.Cu) (net 39) (tstamp 56AED6FC)) + (segment (start 73.017 143.51) (end 72.136 143.51) (width 0.25) (layer F.Cu) (net 40)) + (segment (start 72.136 143.51) (end 71.8185 143.1925) (width 0.25) (layer F.Cu) (net 40) (tstamp 56AF1DAD)) + (segment (start 71.8185 143.1925) (end 71.8185 141.2875) (width 0.25) (layer F.Cu) (net 40) (tstamp 56AF1DAE)) + (segment (start 71.8185 141.2875) (end 71.0685 140.5375) (width 0.25) (layer F.Cu) (net 40) (tstamp 56AF1DAF)) + (segment (start 71.0685 140.5375) (end 69.7491 140.5375) (width 0.25) (layer F.Cu) (net 40) (tstamp 56AF1DB0)) + (segment (start 69.7491 140.5375) (end 69.7484 140.5368) (width 0.25) (layer F.Cu) (net 40) (tstamp 56AF1DB1)) + (segment (start 71.0685 140.5375) (end 70.231 140.5375) (width 0.25) (layer F.Cu) (net 40) (tstamp 56AEB604)) + (segment (start 71.8185 141.2875) (end 71.0685 140.5375) (width 0.25) (layer F.Cu) (net 40) (tstamp 56AEB603)) + (segment (start 71.8185 143.1925) (end 71.8185 141.2875) (width 0.25) (layer F.Cu) (net 40) (tstamp 56AEB602)) + (segment (start 72.136 143.51) (end 71.8185 143.1925) (width 0.25) (layer F.Cu) (net 40) (tstamp 56AEB601)) + (segment (start 70.0405 143.141) (end 70.9415 143.141) (width 0.25) (layer F.Cu) (net 41)) + (segment (start 70.9415 143.141) (end 72.1105 144.31) (width 0.25) (layer F.Cu) (net 41) (tstamp 56AEC5EC)) + (segment (start 72.1105 144.31) (end 73.017 144.31) (width 0.25) (layer F.Cu) (net 41) (tstamp 56AEC5ED)) + (segment (start 70.231 143.141) (end 70.624 143.141) (width 0.25) (layer F.Cu) (net 41)) + (segment (start 69.7865 145.7445) (end 69.7865 146.3675) (width 0.25) (layer F.Cu) (net 42)) + (segment (start 74.2442 146.5326) (end 73.169 146.558) (width 0.25) (layer F.Cu) (net 42) (tstamp 56AEC662)) + (segment (start 74.3458 146.7612) (end 74.2442 146.5326) (width 0.25) (layer F.Cu) (net 42) (tstamp 56AEC661)) + (via (at 74.3458 146.7612) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 42)) + (segment (start 74.3458 147.0152) (end 74.3458 146.7612) (width 0.25) (layer B.Cu) (net 42) (tstamp 56AEC65F)) + (segment (start 74.041 147.574) (end 74.3458 147.0152) (width 0.25) (layer B.Cu) (net 42) (tstamp 56AEC65E)) + (segment (start 71.0057 147.5105) (end 74.041 147.574) (width 0.25) (layer B.Cu) (net 42) (tstamp 56AEC65D)) + (segment (start 70.8152 147.32) (end 71.0057 147.5105) (width 0.25) (layer B.Cu) (net 42) (tstamp 56AEC65C)) + (via (at 70.8152 147.32) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 42)) + (segment (start 70.5485 146.8755) (end 70.8152 147.32) (width 0.25) (layer F.Cu) (net 42) (tstamp 56AEC657)) + (segment (start 70.5485 146.685) (end 70.5485 146.8755) (width 0.25) (layer F.Cu) (net 42) (tstamp 56AEC656)) + (segment (start 70.358 146.4945) (end 70.5485 146.685) (width 0.25) (layer F.Cu) (net 42) (tstamp 56AEC651)) + (segment (start 69.9135 146.4945) (end 70.358 146.4945) (width 0.25) (layer F.Cu) (net 42) (tstamp 56AEC650)) + (segment (start 69.7865 146.3675) (end 69.9135 146.4945) (width 0.25) (layer F.Cu) (net 42) (tstamp 56AEC64D)) + (segment (start 73.169 146.558) (end 73.017 146.71) (width 0.25) (layer F.Cu) (net 42) (tstamp 56AEC663)) + (segment (start 72.992 146.685) (end 73.017 146.71) (width 0.25) (layer F.Cu) (net 42) (tstamp 56AEC5CF)) + (segment (start 70.231 148.348) (end 70.231 148.6916) (width 0.25) (layer F.Cu) (net 43)) + (segment (start 73.017 148.3026) (end 73.017 147.51) (width 0.25) (layer F.Cu) (net 43) (tstamp 56AF1E10)) + (segment (start 73.1266 148.4122) (end 73.017 148.3026) (width 0.25) (layer F.Cu) (net 43) (tstamp 56AF1E0F)) + (via (at 73.1266 148.4122) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 43)) + (segment (start 73.152 148.4376) (end 73.1266 148.4122) (width 0.25) (layer B.Cu) (net 43) (tstamp 56AF1E0D)) + (segment (start 73.152 149.352) (end 73.152 148.4376) (width 0.25) (layer B.Cu) (net 43) (tstamp 56AF1E0C)) + (segment (start 72.517 149.987) (end 73.152 149.352) (width 0.25) (layer B.Cu) (net 43) (tstamp 56AF1E0B)) + (segment (start 71.882 149.987) (end 72.517 149.987) (width 0.25) (layer B.Cu) (net 43) (tstamp 56AF1E0A)) + (segment (start 71.6788 149.7838) (end 71.882 149.987) (width 0.25) (layer B.Cu) (net 43) (tstamp 56AF1E09)) + (via (at 71.6788 149.7838) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 43)) + (segment (start 71.6788 149.5298) (end 71.6788 149.7838) (width 0.25) (layer F.Cu) (net 43) (tstamp 56AF1E07)) + (segment (start 71.2724 149.1234) (end 71.6788 149.5298) (width 0.25) (layer F.Cu) (net 43) (tstamp 56AF1E06)) + (segment (start 70.6628 149.1234) (end 71.2724 149.1234) (width 0.25) (layer F.Cu) (net 43) (tstamp 56AF1DFF)) + (segment (start 70.231 148.6916) (end 70.6628 149.1234) (width 0.25) (layer F.Cu) (net 43) (tstamp 56AF1DFE)) + (segment (start 74.867 149.36) (end 74.867 147.5735) (width 0.25) (layer F.Cu) (net 44)) + (segment (start 85.344 149.86) (end 87.5665 149.86) (width 0.25) (layer F.Cu) (net 44) (tstamp 56AEC3BE)) + (segment (start 83.5025 148.0185) (end 85.344 149.86) (width 0.25) (layer F.Cu) (net 44) (tstamp 56AEC3BD)) + (segment (start 83.5025 147.066) (end 83.5025 148.0185) (width 0.25) (layer F.Cu) (net 44) (tstamp 56AEC3BC)) + (segment (start 82.8675 146.431) (end 83.5025 147.066) (width 0.25) (layer F.Cu) (net 44) (tstamp 56AEC3BB)) + (via (at 82.8675 146.431) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 44)) + (segment (start 78.9432 145.7198) (end 82.8675 146.431) (width 0.25) (layer B.Cu) (net 44) (tstamp 56AEC3B8)) + (via (at 78.9432 145.7198) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 44)) + (segment (start 76.0095 146.431) (end 78.9432 145.7198) (width 0.25) (layer F.Cu) (net 44) (tstamp 56AEC3B3)) + (segment (start 74.867 147.5735) (end 76.0095 146.431) (width 0.25) (layer F.Cu) (net 44) (tstamp 56AEC3B1)) + (segment (start 75.667 149.36) (end 75.667 147.853) (width 0.25) (layer F.Cu) (net 45)) + (segment (start 86.8045 148.082) (end 87.5665 147.32) (width 0.25) (layer B.Cu) (net 45) (tstamp 56AEC548)) + (segment (start 85.1535 148.082) (end 86.8045 148.082) (width 0.25) (layer B.Cu) (net 45) (tstamp 56AEC547)) + (segment (start 84.7725 148.463) (end 85.1535 148.082) (width 0.25) (layer B.Cu) (net 45) (tstamp 56AEC546)) + (segment (start 84.201 148.463) (end 84.7725 148.463) (width 0.25) (layer B.Cu) (net 45) (tstamp 56AEC545)) + (segment (start 82.8675 147.1295) (end 84.201 148.463) (width 0.25) (layer B.Cu) (net 45) (tstamp 56AEC544)) + (segment (start 78.5368 146.6342) (end 82.8675 147.1295) (width 0.25) (layer B.Cu) (net 45) (tstamp 56AEC543)) + (via (at 78.5368 146.6342) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 45)) + (segment (start 75.667 147.853) (end 78.5368 146.6342) (width 0.25) (layer F.Cu) (net 45) (tstamp 56AEC53C)) + (segment (start 84.361 133.35) (end 82.9945 133.35) (width 0.25) (layer F.Cu) (net 49)) + (segment (start 81.267 148.0055) (end 81.267 149.36) (width 0.25) (layer F.Cu) (net 49) (tstamp 56AEBA1A)) + (segment (start 80.4545 147.193) (end 81.267 148.0055) (width 0.25) (layer F.Cu) (net 49) (tstamp 56AEBA19)) + (segment (start 80.2005 141.2367) (end 80.4545 147.193) (width 0.25) (layer F.Cu) (net 49) (tstamp 56AEBA17)) + (segment (start 80.137 141.1732) (end 80.2005 141.2367) (width 0.25) (layer F.Cu) (net 49) (tstamp 56AEBA16)) + (via (at 80.137 141.1732) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 49)) + (segment (start 80.391 133.9215) (end 80.137 141.1732) (width 0.25) (layer B.Cu) (net 49) (tstamp 56AEBA12)) + (segment (start 80.9625 133.35) (end 80.391 133.9215) (width 0.25) (layer B.Cu) (net 49) (tstamp 56AEBA11)) + (segment (start 82.9945 133.35) (end 80.9625 133.35) (width 0.25) (layer B.Cu) (net 49) (tstamp 56AEBA10)) + (via (at 82.9945 133.35) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 49)) + (segment (start 84.361 133.35) (end 84.361 134.62) (width 0.25) (layer F.Cu) (net 49)) + (segment (start 82.867 149.36) (end 82.867 150.3294) (width 0.25) (layer F.Cu) (net 51)) + (segment (start 86.741 126.0602) (end 86.741 126.238) (width 0.25) (layer B.Cu) (net 51) (tstamp 56AF1F4D)) + (segment (start 88.9254 123.8758) (end 86.741 126.0602) (width 0.25) (layer B.Cu) (net 51) (tstamp 56AF1F4B)) + (segment (start 91.7702 123.8758) (end 88.9254 123.8758) (width 0.25) (layer B.Cu) (net 51) (tstamp 56AF1F4A)) + (segment (start 92.1766 124.2822) (end 91.7702 123.8758) (width 0.25) (layer B.Cu) (net 51) (tstamp 56AF1F49)) + (segment (start 92.1766 133.5786) (end 92.1766 124.2822) (width 0.25) (layer B.Cu) (net 51) (tstamp 56AF1F45)) + (segment (start 93.9546 135.3566) (end 92.1766 133.5786) (width 0.25) (layer B.Cu) (net 51) (tstamp 56AF1F39)) + (segment (start 93.9546 141.732) (end 93.9546 135.3566) (width 0.25) (layer B.Cu) (net 51) (tstamp 56AF1F32)) + (segment (start 94.0308 141.8082) (end 93.9546 141.732) (width 0.25) (layer B.Cu) (net 51) (tstamp 56AF1F31)) + (via (at 94.0308 141.8082) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 51)) + (segment (start 94.0308 142.5956) (end 94.0308 141.8082) (width 0.25) (layer F.Cu) (net 51) (tstamp 56AF1F2F)) + (segment (start 92.2528 144.3736) (end 94.0308 142.5956) (width 0.25) (layer F.Cu) (net 51) (tstamp 56AF1F2E)) + (via (at 92.2528 144.3736) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 51)) + (segment (start 92.2528 147.5486) (end 92.2528 144.3736) (width 0.25) (layer B.Cu) (net 51) (tstamp 56AF1F2A)) + (segment (start 91.1352 148.6662) (end 92.2528 147.5486) (width 0.25) (layer B.Cu) (net 51) (tstamp 56AF1F29)) + (segment (start 85.725 148.6662) (end 91.1352 148.6662) (width 0.25) (layer B.Cu) (net 51) (tstamp 56AF1F27)) + (segment (start 84.4042 149.987) (end 85.725 148.6662) (width 0.25) (layer B.Cu) (net 51) (tstamp 56AF1F26)) + (via (at 84.4042 149.987) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 51)) + (segment (start 84.0994 150.2918) (end 84.4042 149.987) (width 0.25) (layer F.Cu) (net 51) (tstamp 56AF1F24)) + (segment (start 82.9046 150.2918) (end 84.0994 150.2918) (width 0.25) (layer F.Cu) (net 51) (tstamp 56AF1F23)) + (segment (start 82.867 150.3294) (end 82.9046 150.2918) (width 0.25) (layer F.Cu) (net 51) (tstamp 56AF1F21)) + (segment (start 87.4275 135.624) (end 87.4275 135.3185) (width 0.25) (layer F.Cu) (net 51) (tstamp 56AEC535)) + (segment (start 87.4275 133.731) (end 87.0585 133.731) (width 0.25) (layer F.Cu) (net 51)) + (segment (start 86.741 126.238) (end 87.1855 125.7935) (width 0.25) (layer F.Cu) (net 51) (tstamp 56AEB889)) + (via (at 86.741 126.238) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 51)) + (segment (start 86.741 133.4135) (end 86.741 126.238) (width 0.25) (layer B.Cu) (net 51) (tstamp 56AEB882)) + (via (at 86.741 133.4135) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 51)) + (segment (start 87.0585 133.731) (end 86.741 133.4135) (width 0.25) (layer F.Cu) (net 51) (tstamp 56AEB87F)) + (segment (start 87.1855 125.7935) (end 87.4275 125.7935) (width 0.25) (layer F.Cu) (net 51) (tstamp 56AEB88A)) + (segment (start 87.4275 135.3185) (end 87.4275 136.906) (width 0.25) (layer F.Cu) (net 51)) + (segment (start 87.4275 135.3185) (end 87.4275 133.731) (width 0.25) (layer F.Cu) (net 51)) + (segment (start 68.6435 148.348) (end 66.282 148.348) (width 0.25) (layer F.Cu) (net 53)) + (segment (start 66.282 148.348) (end 66.04 148.59) (width 0.25) (layer F.Cu) (net 53) (tstamp 56AEB282)) + (segment (start 66.04 146.05) (end 68.1475 146.05) (width 0.25) (layer F.Cu) (net 54)) + (segment (start 68.1475 146.05) (end 68.453 145.7445) (width 0.25) (layer F.Cu) (net 54) (tstamp 56AECE66)) + (segment (start 66.3455 145.7445) (end 66.04 146.05) (width 0.25) (layer F.Cu) (net 54) (tstamp 56AEB27C)) + (segment (start 68.453 143.141) (end 66.409 143.141) (width 0.25) (layer F.Cu) (net 55)) + (segment (start 66.409 143.141) (end 66.04 143.51) (width 0.25) (layer F.Cu) (net 55) (tstamp 56AECE63)) + (segment (start 66.409 143.141) (end 66.04 143.51) (width 0.25) (layer F.Cu) (net 55) (tstamp 56AEB276)) + (segment (start 67.9704 140.5368) (end 66.4732 140.5368) (width 0.25) (layer F.Cu) (net 56)) + (segment (start 66.4732 140.5368) (end 66.04 140.97) (width 0.25) (layer F.Cu) (net 56) (tstamp 56AF1B67)) + (segment (start 66.4725 140.5375) (end 66.04 140.97) (width 0.25) (layer F.Cu) (net 56) (tstamp 56AEB617)) + (segment (start 66.4725 140.5375) (end 66.04 140.97) (width 0.25) (layer F.Cu) (net 56) (tstamp 56AEB271)) + (segment (start 91.2495 142.113) (end 91.2495 141.9733) (width 0.25) (layer B.Cu) (net 57)) + (segment (start 91.2495 141.9733) (end 92.7608 140.462) (width 0.25) (layer B.Cu) (net 57) (tstamp 56AF1B09)) + (segment (start 89.5858 136.779) (end 89.281 136.779) (width 0.25) (layer F.Cu) (net 57) (tstamp 56AF1B13)) + (segment (start 89.9668 137.16) (end 89.5858 136.779) (width 0.25) (layer F.Cu) (net 57) (tstamp 56AF1B12)) + (segment (start 89.9668 137.668) (end 89.9668 137.16) (width 0.25) (layer F.Cu) (net 57) (tstamp 56AF1B11)) + (segment (start 90.3732 138.0744) (end 89.9668 137.668) (width 0.25) (layer F.Cu) (net 57) (tstamp 56AF1B10)) + (via (at 90.3732 138.0744) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 57)) + (segment (start 91.9988 138.0744) (end 90.3732 138.0744) (width 0.25) (layer B.Cu) (net 57) (tstamp 56AF1B0D)) + (segment (start 92.7608 138.8364) (end 91.9988 138.0744) (width 0.25) (layer B.Cu) (net 57) (tstamp 56AF1B0C)) + (segment (start 92.7608 140.462) (end 92.7608 138.8364) (width 0.25) (layer B.Cu) (net 57) (tstamp 56AF1B0A)) + (segment (start 91.2495 142.113) (end 90.805 142.113) (width 0.25) (layer F.Cu) (net 57)) + (segment (start 91.2495 142.113) (end 90.7415 142.113) (width 0.25) (layer F.Cu) (net 57)) + (segment (start 91.313 136.779) (end 91.821 136.779) (width 0.25) (layer F.Cu) (net 58)) + (segment (start 91.948 136.906) (end 91.948 138.8745) (width 0.25) (layer F.Cu) (net 58) (tstamp 56AED202)) + (segment (start 91.821 136.779) (end 91.948 136.906) (width 0.25) (layer F.Cu) (net 58) (tstamp 56AED201)) + (segment (start 91.948 138.8745) (end 91.2495 139.573) (width 0.25) (layer F.Cu) (net 58) (tstamp 56AED203)) + (segment (start 85.9275 133.731) (end 85.9275 132.08) (width 0.25) (layer F.Cu) (net 59)) + (segment (start 85.9275 132.08) (end 84.361 132.08) (width 0.25) (layer F.Cu) (net 59)) + (segment (start 85.9275 125.7935) (end 82.7405 125.7935) (width 0.25) (layer F.Cu) (net 60)) + (segment (start 83.312 129.54) (end 84.361 129.54) (width 0.25) (layer F.Cu) (net 60) (tstamp 56AEB847)) + (segment (start 83.127002 129.355002) (end 83.312 129.54) (width 0.25) (layer F.Cu) (net 60) (tstamp 56AEB846)) + (segment (start 83.127002 128.339002) (end 83.127002 129.355002) (width 0.25) (layer F.Cu) (net 60) (tstamp 56AEB845)) + (segment (start 82.042 127.254) (end 83.127002 128.339002) (width 0.25) (layer F.Cu) (net 60) (tstamp 56AEB844)) + (segment (start 82.042 126.492) (end 82.042 127.254) (width 0.25) (layer F.Cu) (net 60) (tstamp 56AEB843)) + (segment (start 82.7405 125.7935) (end 82.042 126.492) (width 0.25) (layer F.Cu) (net 60) (tstamp 56AEB842)) + (segment (start 85.9275 127.381) (end 85.9275 125.7935) (width 0.25) (layer F.Cu) (net 60)) + (segment (start 84.4245 129.4765) (end 84.361 129.54) (width 0.25) (layer F.Cu) (net 60) (tstamp 56AEB752)) + (segment (start 67.9704 142.0368) (end 69.7484 142.0368) (width 0.25) (layer F.Cu) (net 61)) + (segment (start 68.453 144.641) (end 70.0405 144.641) (width 0.25) (layer F.Cu) (net 62)) + (segment (start 68.453 147.2445) (end 69.7865 147.2445) (width 0.25) (layer F.Cu) (net 63)) + (segment (start 68.6435 149.848) (end 70.231 149.848) (width 0.25) (layer F.Cu) (net 64)) + (segment (start 78.961 128.27) (end 80.01 128.27) (width 0.25) (layer F.Cu) (net 65)) + (segment (start 74.041 134.747) (end 74.041 137.033) (width 0.25) (layer B.Cu) (net 65) (tstamp 56AED68C)) + (segment (start 74.3204 134.4676) (end 74.041 134.747) (width 0.25) (layer B.Cu) (net 65) (tstamp 56AED68B)) + (segment (start 76.5048 134.4676) (end 74.3204 134.4676) (width 0.25) (layer B.Cu) (net 65) (tstamp 56AED689)) + (segment (start 78.0796 132.8928) (end 76.5048 134.4676) (width 0.25) (layer B.Cu) (net 65) (tstamp 56AED686)) + (segment (start 78.0796 130.2004) (end 78.0796 132.8928) (width 0.25) (layer B.Cu) (net 65) (tstamp 56AED685)) + (segment (start 78.6892 129.5908) (end 78.0796 130.2004) (width 0.25) (layer B.Cu) (net 65) (tstamp 56AED683)) + (segment (start 79.6036 129.5908) (end 78.6892 129.5908) (width 0.25) (layer B.Cu) (net 65) (tstamp 56AED682)) + (segment (start 80.4672 128.7272) (end 79.6036 129.5908) (width 0.25) (layer B.Cu) (net 65) (tstamp 56AED681)) + (via (at 80.4672 128.7272) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 65)) + (segment (start 80.01 128.27) (end 80.4672 128.7272) (width 0.25) (layer F.Cu) (net 65) (tstamp 56AED67D)) + (segment (start 71.616 138.938) (end 71.501 138.938) (width 0.25) (layer F.Cu) (net 65)) + (segment (start 71.501 138.938) (end 70.6755 138.1125) (width 0.25) (layer F.Cu) (net 65) (tstamp 56AEB5F6)) + (segment (start 69.2665 138.1125) (end 68.707 137.553) (width 0.25) (layer F.Cu) (net 65) (tstamp 56AEB5F8)) + (segment (start 70.6755 138.1125) (end 69.2665 138.1125) (width 0.25) (layer F.Cu) (net 65) (tstamp 56AEB5F7)) + (segment (start 74.041 137.033) (end 72.3265 137.033) (width 0.25) (layer B.Cu) (net 65)) + (segment (start 71.616 140.093) (end 71.616 138.938) (width 0.25) (layer F.Cu) (net 65) (tstamp 56AEB5F3)) + (segment (start 71.5645 140.1445) (end 71.616 140.093) (width 0.25) (layer F.Cu) (net 65) (tstamp 56AEB5F2)) + (via (at 71.5645 140.1445) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 65)) + (segment (start 71.5645 137.795) (end 71.5645 140.1445) (width 0.25) (layer B.Cu) (net 65) (tstamp 56AEB5F0)) + (segment (start 72.3265 137.033) (end 71.5645 137.795) (width 0.25) (layer B.Cu) (net 65) (tstamp 56AEB5E6)) + (segment (start 72.9615 137.045) (end 74.029 137.045) (width 0.25) (layer F.Cu) (net 65)) + (via (at 74.041 137.033) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 65)) + (segment (start 74.029 137.045) (end 74.041 137.033) (width 0.25) (layer F.Cu) (net 65) (tstamp 56AEB593)) + (segment (start 79.0245 128.3335) (end 78.961 128.27) (width 0.25) (layer F.Cu) (net 65) (tstamp 56AEB59E)) + (segment (start 86.868 141.1478) (end 86.6902 141.1478) (width 0.25) (layer F.Cu) (net 66)) + (segment (start 86.6902 141.1478) (end 86.1314 141.7066) (width 0.25) (layer F.Cu) (net 66) (tstamp 56AF1BF1)) + (segment (start 86.1314 141.7066) (end 86.1314 142.367) (width 0.25) (layer F.Cu) (net 66) (tstamp 56AF1BF3)) + (via (at 86.1314 142.367) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 66)) + (segment (start 86.1314 142.367) (end 85.8012 142.6972) (width 0.25) (layer B.Cu) (net 66) (tstamp 56AF1BF5)) + (segment (start 85.8012 142.6972) (end 82.9564 142.6972) (width 0.25) (layer B.Cu) (net 66) (tstamp 56AF1BF6)) + (segment (start 82.9564 142.6972) (end 81.6356 141.3764) (width 0.25) (layer B.Cu) (net 66) (tstamp 56AF1BF7)) + (via (at 81.6356 141.3764) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 66)) + (segment (start 81.6356 141.3764) (end 80.5942 140.335) (width 0.25) (layer F.Cu) (net 66) (tstamp 56AF1BFC)) + (segment (start 80.5942 140.335) (end 80.4164 140.335) (width 0.25) (layer F.Cu) (net 66) (tstamp 56AF1BFD)) + (segment (start 80.4164 140.335) (end 79.9846 139.9032) (width 0.25) (layer F.Cu) (net 66) (tstamp 56AF1BFE)) + (segment (start 79.9846 139.9032) (end 78.867 139.9032) (width 0.25) (layer F.Cu) (net 66) (tstamp 56AF1BFF)) + (segment (start 78.867 139.9032) (end 76.9366 141.8336) (width 0.25) (layer F.Cu) (net 66) (tstamp 56AF1C00)) + (segment (start 76.9366 141.8336) (end 76.9366 142.9512) (width 0.25) (layer F.Cu) (net 66) (tstamp 56AF1C02)) + (via (at 76.9366 142.9512) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 66)) + (segment (start 76.9366 142.9512) (end 76.5048 143.383) (width 0.25) (layer B.Cu) (net 66) (tstamp 56AF1C05)) + (segment (start 76.5048 143.383) (end 76.5048 144.4752) (width 0.25) (layer B.Cu) (net 66) (tstamp 56AF1C06)) + (segment (start 76.5048 144.4752) (end 76.3016 144.6784) (width 0.25) (layer B.Cu) (net 66) (tstamp 56AF1C07)) + (via (at 76.3016 144.6784) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 66)) + (segment (start 76.3016 144.6784) (end 76.0476 144.9324) (width 0.25) (layer F.Cu) (net 66) (tstamp 56AF1C09)) + (segment (start 76.0476 144.9324) (end 74.7268 144.9324) (width 0.25) (layer F.Cu) (net 66) (tstamp 56AF1C0A)) + (via (at 74.7268 144.9324) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 66)) + (segment (start 74.7268 144.9324) (end 71.4248 141.6304) (width 0.25) (layer B.Cu) (net 66) (tstamp 56AF1C0C)) + (segment (start 71.4248 141.6304) (end 71.1454 141.6304) (width 0.25) (layer B.Cu) (net 66) (tstamp 56AF1C0D)) + (via (at 71.1454 141.6304) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 66)) + (segment (start 71.1454 141.6304) (end 70.7898 141.2748) (width 0.25) (layer F.Cu) (net 66) (tstamp 56AF1C10)) + (segment (start 70.7898 141.2748) (end 69.088 141.2748) (width 0.25) (layer F.Cu) (net 66) (tstamp 56AF1C11)) + (segment (start 69.088 141.2748) (end 68.8848 141.0716) (width 0.25) (layer F.Cu) (net 66) (tstamp 56AF1C12)) + (segment (start 68.8848 141.0716) (end 68.8848 140.0048) (width 0.25) (layer F.Cu) (net 66) (tstamp 56AF1C13)) + (segment (start 68.8848 140.0048) (end 69.469 139.4206) (width 0.25) (layer F.Cu) (net 66) (tstamp 56AF1C14)) + (segment (start 69.469 139.4206) (end 69.469 138.938) (width 0.25) (layer F.Cu) (net 66) (tstamp 56AF1C15)) + (segment (start 70.116 138.938) (end 69.469 138.938) (width 0.25) (layer F.Cu) (net 66)) + (segment (start 69.469 138.938) (end 68.822 138.938) (width 0.25) (layer F.Cu) (net 66) (tstamp 56AECF5F)) + (segment (start 68.822 138.938) (end 68.707 139.053) (width 0.25) (layer F.Cu) (net 66) (tstamp 56AEB5FB)) + (segment (start 76.708 135.878) (end 79.7045 135.878) (width 0.25) (layer F.Cu) (net 67)) + (segment (start 80.0735 133.35) (end 78.961 133.35) (width 0.25) (layer F.Cu) (net 67) (tstamp 56AEB5A5)) + (segment (start 80.264 133.5405) (end 80.0735 133.35) (width 0.25) (layer F.Cu) (net 67) (tstamp 56AEB5A4)) + (segment (start 80.264 135.3185) (end 80.264 133.5405) (width 0.25) (layer F.Cu) (net 67) (tstamp 56AEB5A3)) + (segment (start 79.7045 135.878) (end 80.264 135.3185) (width 0.25) (layer F.Cu) (net 67) (tstamp 56AEB5A2)) + (segment (start 75.057 135.878) (end 76.708 135.878) (width 0.25) (layer F.Cu) (net 67)) + (segment (start 73.406 135.878) (end 75.057 135.878) (width 0.25) (layer F.Cu) (net 67)) + (segment (start 74.9815 134.378) (end 74.3585 135.001) (width 0.25) (layer F.Cu) (net 68) (tstamp 56AECDDD)) + (segment (start 88.2015 139.8905) (end 88.8492 139.9032) (width 0.25) (layer F.Cu) (net 68) (tstamp 56AECE13)) + (segment (start 88.1888 139.954) (end 88.2015 139.8905) (width 0.25) (layer F.Cu) (net 68) (tstamp 56AECE12)) + (segment (start 88.2396 140.208) (end 88.2396 139.954) (width 0.25) (layer F.Cu) (net 68) (tstamp 56AECE11)) + (segment (start 88.2396 139.954) (end 88.2396 140.208) (width 0.25) (layer F.Cu) (net 68) (tstamp 56AECE10)) + (via (at 88.1888 139.954) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 68)) + (segment (start 88.7222 142.367) (end 88.1888 139.954) (width 0.25) (layer B.Cu) (net 68) (tstamp 56AECE0A)) + (segment (start 86.4235 144.526) (end 88.7222 142.367) (width 0.25) (layer B.Cu) (net 68) (tstamp 56AECE05)) + (segment (start 82.296 144.7292) (end 86.4235 144.526) (width 0.25) (layer B.Cu) (net 68) (tstamp 56AECDFE)) + (segment (start 81.28 143.1544) (end 82.296 144.7292) (width 0.25) (layer B.Cu) (net 68) (tstamp 56AECDFD)) + (segment (start 78.8416 143.002) (end 81.28 143.1544) (width 0.25) (layer B.Cu) (net 68) (tstamp 56AECDFC)) + (segment (start 75.184 141.3256) (end 78.8416 143.002) (width 0.25) (layer B.Cu) (net 68) (tstamp 56AECDFB)) + (segment (start 71.374 140.97) (end 75.184 141.3256) (width 0.25) (layer B.Cu) (net 68) (tstamp 56AECDF5)) + (segment (start 70.8025 140.3985) (end 71.374 140.97) (width 0.25) (layer B.Cu) (net 68) (tstamp 56AECDF2)) + (segment (start 70.8025 136.017) (end 70.8025 140.3985) (width 0.25) (layer B.Cu) (net 68) (tstamp 56AECDF1)) + (segment (start 71.8185 135.001) (end 70.8025 136.017) (width 0.25) (layer B.Cu) (net 68) (tstamp 56AECDF0)) + (via (at 71.8185 135.001) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 68)) + (segment (start 74.3585 135.001) (end 71.8185 135.001) (width 0.25) (layer F.Cu) (net 68) (tstamp 56AECDEB)) + (segment (start 76.708 134.378) (end 74.9815 134.378) (width 0.25) (layer F.Cu) (net 68)) + (segment (start 75.057 134.378) (end 76.708 134.378) (width 0.25) (layer F.Cu) (net 68)) + (segment (start 78.961 134.62) (end 78.5495 134.62) (width 0.25) (layer F.Cu) (net 69)) + (segment (start 78.5495 134.62) (end 77.5335 133.604) (width 0.25) (layer F.Cu) (net 69) (tstamp 56AEB573)) + (segment (start 77.5335 133.604) (end 74.18 133.604) (width 0.25) (layer F.Cu) (net 69) (tstamp 56AEB574)) + (segment (start 74.18 133.604) (end 73.406 134.378) (width 0.25) (layer F.Cu) (net 69) (tstamp 56AEB576)) + (segment (start 70.358 133.211) (end 70.854 133.211) (width 0.25) (layer F.Cu) (net 69)) + (segment (start 72.021 134.378) (end 73.406 134.378) (width 0.25) (layer F.Cu) (net 69) (tstamp 56AEB56F)) + (segment (start 70.854 133.211) (end 72.021 134.378) (width 0.25) (layer F.Cu) (net 69) (tstamp 56AEB56E)) + (segment (start 73.406 134.378) (end 73.013 134.378) (width 0.25) (layer F.Cu) (net 69)) + (segment (start 78.961 127) (end 79.8576 127) (width 0.25) (layer F.Cu) (net 70)) + (segment (start 71.616 136.156) (end 71.616 137.287) (width 0.25) (layer F.Cu) (net 70) (tstamp 56AED67A)) + (segment (start 71.8312 135.9408) (end 71.616 136.156) (width 0.25) (layer F.Cu) (net 70) (tstamp 56AED679)) + (via (at 71.8312 135.9408) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 70)) + (segment (start 71.9836 135.9408) (end 71.8312 135.9408) (width 0.25) (layer B.Cu) (net 70) (tstamp 56AED677)) + (segment (start 74.2188 133.7056) (end 71.9836 135.9408) (width 0.25) (layer B.Cu) (net 70) (tstamp 56AED675)) + (segment (start 76.3524 133.7056) (end 74.2188 133.7056) (width 0.25) (layer B.Cu) (net 70) (tstamp 56AED670)) + (segment (start 77.5208 132.5372) (end 76.3524 133.7056) (width 0.25) (layer B.Cu) (net 70) (tstamp 56AED66D)) + (segment (start 77.5208 128.9304) (end 77.5208 132.5372) (width 0.25) (layer B.Cu) (net 70) (tstamp 56AED66A)) + (segment (start 77.724 128.7272) (end 77.5208 128.9304) (width 0.25) (layer B.Cu) (net 70) (tstamp 56AED665)) + (segment (start 78.8416 128.7272) (end 77.724 128.7272) (width 0.25) (layer B.Cu) (net 70) (tstamp 56AED664)) + (segment (start 80.2132 127.3556) (end 78.8416 128.7272) (width 0.25) (layer B.Cu) (net 70) (tstamp 56AED663)) + (via (at 80.2132 127.3556) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 70)) + (segment (start 79.8576 127) (end 80.2132 127.3556) (width 0.25) (layer F.Cu) (net 70) (tstamp 56AED661)) + (segment (start 71.616 137.287) (end 71.616 137.783) (width 0.25) (layer F.Cu) (net 70)) + (segment (start 71.616 137.783) (end 72.378 138.545) (width 0.25) (layer F.Cu) (net 70) (tstamp 56AEB58F)) + (segment (start 72.378 138.545) (end 72.9615 138.545) (width 0.25) (layer F.Cu) (net 70) (tstamp 56AEB590)) + (segment (start 79.0245 127.0635) (end 78.961 127) (width 0.25) (layer F.Cu) (net 70) (tstamp 56AEB56B)) + (segment (start 70.358 131.711) (end 70.358 130.441) (width 0.25) (layer F.Cu) (net 71)) + (segment (start 70.358 130.441) (end 70.219 130.302) (width 0.25) (layer F.Cu) (net 71) (tstamp 56AEB26E)) + (segment (start 70.358 130.441) (end 70.219 130.302) (width 0.25) (layer F.Cu) (net 71) (tstamp 56AEAAD8)) + (segment (start 70.116 137.287) (end 70.116 136.12) (width 0.25) (layer F.Cu) (net 72)) + (segment (start 70.116 136.12) (end 70.358 135.878) (width 0.25) (layer F.Cu) (net 72) (tstamp 56AEB29A)) + +) diff --git a/PCB/OUTPUT_V35/Tinylab_proto1.net b/PCB/OUTPUT_V35/Tinylab_proto1.net new file mode 100644 index 00000000..43380509 --- /dev/null +++ b/PCB/OUTPUT_V35/Tinylab_proto1.net @@ -0,0 +1,925 @@ +(export (version D) + (design + (source C:\Users\Esposch\Documents\KiCAD\Tinylab_proto1\Tinylab_proto1.sch) + (date "01/02/2016 1:02:52 PM") + (tool "Eeschema (2015-08-05 BZR 6055, Git fa29c62)-product") + (sheet (number 1) (name /) (tstamps /) + (title_block + (title) + (company) + (rev) + (date) + (source Tinylab_proto1.sch) + (comment (number 1) (value "")) + (comment (number 2) (value "")) + (comment (number 3) (value "")) + (comment (number 4) (value ""))))) + (components + (comp (ref U2) + (value LM324) + (footprint Housings_SOIC:SOIC-14_3.9x8.7mm_Pitch1.27mm) + (libsource (lib linear) (part LM324)) + (sheetpath (names /) (tstamps /)) + (tstamp 55CA87E2)) + (comp (ref IC1) + (value ATXMEGA16A4U-A) + (footprint Housings_QFP:LQFP-44_10x10mm_Pitch0.8mm) + (libsource (lib atmel) (part ATXMEGA16A4U-A)) + (sheetpath (names /) (tstamps /)) + (tstamp 55CA8F25)) + (comp (ref P2) + (value USB_OTG) + (footprint Connect:USB_Micro-B) + (libsource (lib conn) (part USB_OTG)) + (sheetpath (names /) (tstamps /)) + (tstamp 55CA90D2)) + (comp (ref U1) + (value 78L05) + (footprint SMD:SOT-23-3) + (libsource (lib regul) (part 78L05)) + (sheetpath (names /) (tstamps /)) + (tstamp 55CA99FA)) + (comp (ref R1) + (value R) + (footprint Resistors_SMD:R_0603) + (libsource (lib device) (part R)) + (sheetpath (names /) (tstamps /)) + (tstamp 55CAAB95)) + (comp (ref R3) + (value R) + (footprint Resistors_SMD:R_0603) + (libsource (lib device) (part R)) + (sheetpath (names /) (tstamps /)) + (tstamp 55CAABF4)) + (comp (ref R5) + (value R) + (footprint Resistors_SMD:R_0603) + (libsource (lib device) (part R)) + (sheetpath (names /) (tstamps /)) + (tstamp 55CAAC5F)) + (comp (ref R6) + (value R) + (footprint Resistors_SMD:R_0603) + (libsource (lib device) (part R)) + (sheetpath (names /) (tstamps /)) + (tstamp 55CAACD2)) + (comp (ref R4) + (value R) + (footprint Resistors_SMD:R_0603) + (libsource (lib device) (part R)) + (sheetpath (names /) (tstamps /)) + (tstamp 55CAAD11)) + (comp (ref R2) + (value R) + (footprint Resistors_SMD:R_0603) + (libsource (lib device) (part R)) + (sheetpath (names /) (tstamps /)) + (tstamp 55CAAD4C)) + (comp (ref P1) + (value SCOPE_IN) + (footprint Pin_Headers:Pin_Header_Straight_1x04) + (libsource (lib conn) (part CONN_01X04)) + (sheetpath (names /) (tstamps /)) + (tstamp 55CAB35C)) + (comp (ref C2) + (value C) + (footprint Capacitors_SMD:C_0603) + (libsource (lib device) (part C_Small)) + (sheetpath (names /) (tstamps /)) + (tstamp 55CAB4DE)) + (comp (ref C1) + (value C) + (footprint Capacitors_SMD:C_0603) + (libsource (lib device) (part C_Small)) + (sheetpath (names /) (tstamps /)) + (tstamp 55CAB611)) + (comp (ref C3) + (value C_Small) + (footprint Capacitors_SMD:C_0603) + (libsource (lib device) (part C_Small)) + (sheetpath (names /) (tstamps /)) + (tstamp 55CB13E1)) + (comp (ref C4) + (value C_Small) + (footprint Capacitors_SMD:C_0603) + (libsource (lib device) (part C_Small)) + (sheetpath (names /) (tstamps /)) + (tstamp 55CB147C)) + (comp (ref R22) + (value R) + (footprint Resistors_SMD:R_0603) + (libsource (lib device) (part R)) + (sheetpath (names /) (tstamps /)) + (tstamp 55CB4680)) + (comp (ref C13) + (value C) + (footprint Capacitors_SMD:C_0603) + (libsource (lib device) (part C_Small)) + (sheetpath (names /) (tstamps /)) + (tstamp 55CB630B)) + (comp (ref R24) + (value R) + (footprint Resistors_SMD:R_0603) + (libsource (lib device) (part R)) + (sheetpath (names /) (tstamps /)) + (tstamp 55CB9020)) + (comp (ref R11) + (value R) + (footprint Resistors_SMD:R_0603) + (libsource (lib device) (part R)) + (sheetpath (names /) (tstamps /)) + (tstamp 55CBCD2A)) + (comp (ref R7) + (value R) + (footprint Resistors_SMD:R_0603) + (libsource (lib device) (part R)) + (sheetpath (names /) (tstamps /)) + (tstamp 55CBCDA5)) + (comp (ref R13) + (value R) + (footprint Resistors_SMD:R_0603) + (libsource (lib device) (part R)) + (sheetpath (names /) (tstamps /)) + (tstamp 55CBE0F4)) + (comp (ref R9) + (value R) + (footprint Resistors_SMD:R_0603) + (libsource (lib device) (part R)) + (sheetpath (names /) (tstamps /)) + (tstamp 55CBE16B)) + (comp (ref R14) + (value R) + (footprint Resistors_SMD:R_0603) + (libsource (lib device) (part R)) + (sheetpath (names /) (tstamps /)) + (tstamp 55CBE21C)) + (comp (ref R10) + (value R) + (footprint Resistors_SMD:R_0603) + (libsource (lib device) (part R)) + (sheetpath (names /) (tstamps /)) + (tstamp 55CBE2C7)) + (comp (ref R12) + (value R) + (footprint Resistors_SMD:R_0603) + (libsource (lib device) (part R)) + (sheetpath (names /) (tstamps /)) + (tstamp 55CBE362)) + (comp (ref R8) + (value R) + (footprint Resistors_SMD:R_0603) + (libsource (lib device) (part R)) + (sheetpath (names /) (tstamps /)) + (tstamp 55CBE401)) + (comp (ref P3) + (value DIG_OUT) + (footprint Pin_Headers:Pin_Header_Straight_1x04) + (libsource (lib conn) (part CONN_01X04)) + (sheetpath (names /) (tstamps /)) + (tstamp 55CBF4D5)) + (comp (ref P7) + (value HVO) + (footprint Pin_Headers:Pin_Header_Straight_2x02) + (libsource (lib conn) (part CONN_02X02)) + (sheetpath (names /) (tstamps /)) + (tstamp 55CC540F)) + (comp (ref C5) + (value C_Small) + (footprint Capacitors_SMD:C_0603) + (libsource (lib device) (part C_Small)) + (sheetpath (names /) (tstamps /)) + (tstamp 55D60181)) + (comp (ref U4) + (value DMN63D8LDW) + (footprint TO_SOT_Packages_SMD:SOT-363) + (libsource (lib ESPO_PART) (part DMN63D8LDW)) + (sheetpath (names /) (tstamps /)) + (tstamp 55D6ACFD)) + (comp (ref P8) + (value DIG_IN) + (footprint Pin_Headers:Pin_Header_Straight_1x02) + (libsource (lib conn) (part CONN_01X02)) + (sheetpath (names /) (tstamps /)) + (tstamp 55D6DB77)) + (comp (ref F1) + (value F_Small) + (footprint Capacitors_SMD:C_1206) + (libsource (lib device) (part F_Small)) + (sheetpath (names /) (tstamps /)) + (tstamp 55D739F3)) + (comp (ref C12) + (value C_Small) + (footprint Capacitors_SMD:C_0603) + (libsource (lib device) (part C_Small)) + (sheetpath (names /) (tstamps /)) + (tstamp 55D75F49)) + (comp (ref P5) + (value CONN_01X03) + (footprint Pin_Headers:Pin_Header_Straight_1x03) + (libsource (lib conn) (part CONN_01X03)) + (sheetpath (names /) (tstamps /)) + (tstamp 56065DA8)) + (comp (ref L1) + (value INDUCTOR) + (footprint Inductors:INDUCTOR_V) + (libsource (lib device) (part INDUCTOR)) + (sheetpath (names /) (tstamps /)) + (tstamp 5606EE9E)) + (comp (ref D1) + (value D_Schottky) + (footprint Diodes_ThroughHole:Diode_DO-41_SOD81_Horizontal_RM10) + (libsource (lib device) (part D_Schottky)) + (sheetpath (names /) (tstamps /)) + (tstamp 5606FDB4)) + (comp (ref C9) + (value CP1) + (footprint Capacitors_ThroughHole:C_Radial_D5_L11_P2.5) + (libsource (lib device) (part CP1)) + (sheetpath (names /) (tstamps /)) + (tstamp 560719D9)) + (comp (ref C10) + (value C) + (footprint Capacitors_SMD:C_0603) + (libsource (lib device) (part C)) + (sheetpath (names /) (tstamps /)) + (tstamp 56071A50)) + (comp (ref C16) + (value C) + (footprint Capacitors_SMD:C_0603) + (libsource (lib device) (part C)) + (sheetpath (names /) (tstamps /)) + (tstamp 5607355F)) + (comp (ref C15) + (value CP1) + (footprint Capacitors_ThroughHole:C_Radial_D6.3_L11.2_P2.5) + (libsource (lib device) (part CP1)) + (sheetpath (names /) (tstamps /)) + (tstamp 560735FE)) + (comp (ref P4) + (value PDI) + (footprint Pin_Headers:Pin_Header_Straight_2x02) + (libsource (lib conn) (part CONN_02X02)) + (sheetpath (names /) (tstamps /)) + (tstamp 56069A87)) + (comp (ref Q1) + (value Q_NMOS_GSD) + (footprint SMD:SOT-23-3) + (libsource (lib device) (part Q_NMOS_GSD)) + (sheetpath (names /) (tstamps /)) + (tstamp 5606F6D4)) + (comp (ref R23) + (value R) + (footprint Resistors_SMD:R_0603) + (libsource (lib device) (part R)) + (sheetpath (names /) (tstamps /)) + (tstamp 566DE721)) + (comp (ref R25) + (value R) + (footprint Resistors_SMD:R_0603) + (libsource (lib device) (part R)) + (sheetpath (names /) (tstamps /)) + (tstamp 566DE7E8)) + (comp (ref C14) + (value C) + (footprint Capacitors_SMD:C_0603) + (libsource (lib device) (part C_Small)) + (sheetpath (names /) (tstamps /)) + (tstamp 566DF655)) + (comp (ref P6) + (value DAC_OUT) + (footprint Pin_Headers:Pin_Header_Straight_1x04) + (libsource (lib conn) (part CONN_01X04)) + (sheetpath (names /) (tstamps /)) + (tstamp 566DF832)) + (comp (ref R26) + (value R) + (footprint Resistors_SMD:R_0603) + (libsource (lib device) (part R)) + (sheetpath (names /) (tstamps /)) + (tstamp 566E5C29)) + (comp (ref R27) + (value R) + (footprint Resistors_SMD:R_0603) + (libsource (lib device) (part R)) + (sheetpath (names /) (tstamps /)) + (tstamp 566E5CBE)) + (comp (ref C6) + (value CP1) + (footprint Capacitors_ThroughHole:C_Radial_D5_L11_P2.5) + (libsource (lib device) (part CP1)) + (sheetpath (names /) (tstamps /)) + (tstamp 566F5A75)) + (comp (ref R19) + (value R) + (footprint Resistors_SMD:R_0603) + (libsource (lib device) (part R)) + (sheetpath (names /) (tstamps /)) + (tstamp 56AECD86)) + (comp (ref R21) + (value R) + (footprint Resistors_SMD:R_0603) + (libsource (lib device) (part R)) + (sheetpath (names /) (tstamps /)) + (tstamp 56AF0DE2)) + (comp (ref C11) + (value C) + (footprint Capacitors_SMD:C_0603) + (libsource (lib device) (part C)) + (sheetpath (names /) (tstamps /)) + (tstamp 5608B4BE)) + (comp (ref C8) + (value C) + (footprint Capacitors_SMD:C_0603) + (libsource (lib device) (part C)) + (sheetpath (names /) (tstamps /)) + (tstamp 56AF91A3)) + (comp (ref R17) + (value R) + (footprint Resistors_SMD:R_0603) + (libsource (lib device) (part R)) + (sheetpath (names /) (tstamps /)) + (tstamp 56AFE83E)) + (comp (ref R18) + (value R) + (footprint Resistors_SMD:R_0603) + (libsource (lib device) (part R)) + (sheetpath (names /) (tstamps /)) + (tstamp 56AFE8F3)) + (comp (ref U3) + (value DMN63D8LDW) + (footprint TO_SOT_Packages_SMD:SOT-363) + (libsource (lib ESPO_PART) (part DMN63D8LDW)) + (sheetpath (names /) (tstamps /)) + (tstamp 56B012DD)) + (comp (ref R20) + (value R) + (footprint Resistors_SMD:R_0603) + (libsource (lib device) (part R)) + (sheetpath (names /) (tstamps /)) + (tstamp 56B0C682)) + (comp (ref R15) + (value R) + (footprint Resistors_SMD:R_0603) + (libsource (lib device) (part R)) + (sheetpath (names /) (tstamps /)) + (tstamp 56B0C779)) + (comp (ref R16) + (value R) + (footprint Resistors_SMD:R_0603) + (libsource (lib device) (part R)) + (sheetpath (names /) (tstamps /)) + (tstamp 56B0C86E))) + (libparts + (libpart (lib ESPO_PART) (part DMN63D8LDW) + (fields + (field (name Reference) U) + (field (name Value) DMN63D8LDW)) + (pins + (pin (num 1) (name S1) (type input)) + (pin (num 2) (name G1) (type input)) + (pin (num 3) (name D2) (type input)) + (pin (num 4) (name S2) (type input)) + (pin (num 5) (name G2) (type input)) + (pin (num 6) (name D1) (type input)))) + (libpart (lib device) (part R) + (description Resistor) + (footprints + (fp R_*) + (fp Resistor_*)) + (fields + (field (name Reference) R) + (field (name Value) R)) + (pins + (pin (num 1) (name ~) (type passive)) + (pin (num 2) (name ~) (type passive)))) + (libpart (lib conn) (part CONN_01X02) + (footprints + (fp Pin_Header_Straight_1X02) + (fp Pin_Header_Angled_1X02) + (fp Socket_Strip_Straight_1X02) + (fp Socket_Strip_Angled_1X02)) + (fields + (field (name Reference) P) + (field (name Value) CONN_01X02)) + (pins + (pin (num 1) (name P1) (type passive)) + (pin (num 2) (name P2) (type passive)))) + (libpart (lib conn) (part CONN_01X03) + (footprints + (fp Pin_Header_Straight_1X03) + (fp Pin_Header_Angled_1X03) + (fp Socket_Strip_Straight_1X03) + (fp Socket_Strip_Angled_1X03)) + (fields + (field (name Reference) P) + (field (name Value) CONN_01X03)) + (pins + (pin (num 1) (name P1) (type passive)) + (pin (num 2) (name P2) (type passive)) + (pin (num 3) (name P3) (type passive)))) + (libpart (lib conn) (part CONN_01X04) + (footprints + (fp Pin_Header_Straight_1X04) + (fp Pin_Header_Angled_1X04) + (fp Socket_Strip_Straight_1X04) + (fp Socket_Strip_Angled_1X04)) + (fields + (field (name Reference) P) + (field (name Value) CONN_01X04)) + (pins + (pin (num 1) (name P1) (type passive)) + (pin (num 2) (name P2) (type passive)) + (pin (num 3) (name P3) (type passive)) + (pin (num 4) (name P4) (type passive)))) + (libpart (lib conn) (part CONN_02X02) + (footprints + (fp Pin_Header_Straight_2X02) + (fp Pin_Header_Angled_2X02) + (fp Socket_Strip_Straight_2X02) + (fp Socket_Strip_Angled_2X02)) + (fields + (field (name Reference) P) + (field (name Value) CONN_02X02)) + (pins + (pin (num 1) (name P1) (type passive)) + (pin (num 2) (name P2) (type passive)) + (pin (num 3) (name P3) (type passive)) + (pin (num 4) (name P4) (type passive)))) + (libpart (lib regul) (part 7805) + (aliases + (alias LM7805) + (alias LM7812) + (alias 78L05)) + (description "Linear Regulator +5V") + (docs regulator\lm78xx.pdf) + (fields + (field (name Reference) U) + (field (name Value) 7805)) + (pins + (pin (num 1) (name GND) (type input)) + (pin (num 2) (name VO) (type power_out)) + (pin (num 3) (name VI) (type input)))) + (libpart (lib conn) (part USB_OTG) + (description "micro/mini connector") + (footprints + (fp USB*)) + (fields + (field (name Reference) P) + (field (name Value) USB_OTG)) + (pins + (pin (num 1) (name VCC) (type power_out)) + (pin (num 2) (name D-) (type passive)) + (pin (num 3) (name D+) (type passive)) + (pin (num 4) (name ID) (type power_in)) + (pin (num 5) (name GND) (type power_in)) + (pin (num 6) (name shield) (type passive)))) + (libpart (lib linear) (part LM2902N) + (aliases + (alias LM324) + (alias TLC274) + (alias TL074) + (alias LM324N) + (alias LM324AN)) + (description "Quad Op amp.") + (docs op_amps/lm324.pdf) + (fields + (field (name Reference) U) + (field (name Value) LM2902N)) + (pins + (pin (num 1) (name ~) (type output)) + (pin (num 2) (name -) (type input)) + (pin (num 3) (name +) (type input)) + (pin (num 4) (name V+) (type power_in)) + (pin (num 5) (name +) (type input)) + (pin (num 6) (name -) (type input)) + (pin (num 7) (name ~) (type output)) + (pin (num 8) (name ~) (type output)) + (pin (num 9) (name -) (type input)) + (pin (num 10) (name +) (type input)) + (pin (num 11) (name V-) (type power_in)) + (pin (num 12) (name +) (type input)) + (pin (num 13) (name -) (type input)) + (pin (num 14) (name ~) (type output)))) + (libpart (lib device) (part Q_NMOS_GSD) + (description "Transistor N-MOSFET (general)") + (fields + (field (name Reference) Q) + (field (name Value) Q_NMOS_GSD)) + (pins + (pin (num 1) (name G) (type input)) + (pin (num 2) (name S) (type passive)) + (pin (num 3) (name D) (type passive)))) + (libpart (lib device) (part F_Small) + (description Fuse) + (footprints + (fp CP*) + (fp SM*)) + (fields + (field (name Reference) F) + (field (name Value) F_Small)) + (pins + (pin (num 1) (name ~) (type passive)) + (pin (num 2) (name ~) (type passive)))) + (libpart (lib device) (part INDUCTOR) + (fields + (field (name Reference) L) + (field (name Value) INDUCTOR)) + (pins + (pin (num 1) (name 1) (type passive)) + (pin (num 2) (name 2) (type passive)))) + (libpart (lib device) (part D_Schottky) + (description "Diode schottky") + (footprints + (fp D-Pak_TO252AA) + (fp Diode_*) + (fp *SingleDiode) + (fp *SingleDiode*) + (fp *_Diode_*)) + (fields + (field (name Reference) D) + (field (name Value) D_Schottky)) + (pins + (pin (num 1) (name K) (type passive)) + (pin (num 2) (name A) (type passive)))) + (libpart (lib device) (part C_Small) + (description "Unpolarized capacitor") + (footprints + (fp C?) + (fp C_????_*) + (fp C_????) + (fp SMD*_c) + (fp Capacitor*)) + (fields + (field (name Reference) C) + (field (name Value) C_Small)) + (pins + (pin (num 1) (name ~) (type passive)) + (pin (num 2) (name ~) (type passive)))) + (libpart (lib device) (part CP1) + (description "Polarised capacitor") + (footprints + (fp SMD*_Pol) + (fp c_elec*) + (fp C*elec) + (fp TantalC*) + (fp Elko*) + (fp CP*)) + (fields + (field (name Reference) C) + (field (name Value) CP1)) + (pins + (pin (num 1) (name ~) (type passive)) + (pin (num 2) (name ~) (type passive)))) + (libpart (lib device) (part C) + (description "Unpolarized capacitor") + (footprints + (fp C?) + (fp C_????_*) + (fp C_????) + (fp SMD*_c) + (fp Capacitor*)) + (fields + (field (name Reference) C) + (field (name Value) C)) + (pins + (pin (num 1) (name ~) (type passive)) + (pin (num 2) (name ~) (type passive)))) + (libpart (lib atmel) (part ATXMEGA16A4U-A) + (aliases + (alias ATXMEGA32A4U-A) + (alias ATXMEGA64A4U-A) + (alias ATXMEGA128A4U-A)) + (description "TQFP44, 16k Flash, 4k Boot, 2k SRAM, 1k EEPROM, JTAG, USB") + (docs http://www.atmel.com/Images/Atmel-8387-8-and16-bit-AVR-Microcontroller-XMEGA-A4U_Datasheet.pdf) + (fields + (field (name Reference) IC) + (field (name Value) ATXMEGA16A4U-A) + (field (name Footprint) TQFP44)) + (pins + (pin (num 1) (name AC5/ADC5/PA5) (type BiDi)) + (pin (num 2) (name AC1OUT/AC6/ADC6/PA6) (type BiDi)) + (pin (num 3) (name AC0OUT/AC7/ADC7/PA7) (type BiDi)) + (pin (num 4) (name AREFB/ADC8/PB0) (type BiDi)) + (pin (num 5) (name ADC9/PB1) (type BiDi)) + (pin (num 6) (name DAC0/ADC10/PB2) (type BiDi)) + (pin (num 7) (name DAC1/ACD11/PB3) (type BiDi)) + (pin (num 8) (name GND) (type power_in)) + (pin (num 9) (name VCC) (type power_in)) + (pin (num 10) (name SDAIN/SDA/~OC0ALS~/OC0A/PC0) (type BiDi)) + (pin (num 11) (name SCLIN/SCL/XCK0/OC0AHS/OC0B/PC1) (type BiDi)) + (pin (num 12) (name SDAOUT/RXD0/~OC0BLS~/OC0C/PC2) (type BiDi)) + (pin (num 13) (name SCLOUT/TXD0/OC0BHS/OC0D/PC3) (type BiDi)) + (pin (num 14) (name ~SS~/~OC0CLS~/OC1A/PC4) (type BiDi)) + (pin (num 15) (name MOSI/XCK1/OC0CHS/OC1B/PC5) (type BiDi)) + (pin (num 16) (name CLKRTC/MISO/RXD1/~OC0DLS~/PC6) (type BiDi)) + (pin (num 17) (name EVOUT/CLKOUT/SCK/TXD1/OC0DHS/PC7) (type BiDi)) + (pin (num 18) (name GND) (type power_in)) + (pin (num 19) (name VCC) (type power_in)) + (pin (num 20) (name PD0/OC0A) (type BiDi)) + (pin (num 21) (name PD1/OC0B/XCK0) (type BiDi)) + (pin (num 22) (name PD2/OC0C/RXD0) (type BiDi)) + (pin (num 23) (name PD3/OC0D/TXD0) (type BiDi)) + (pin (num 24) (name PD4/OC1A/~SS~) (type BiDi)) + (pin (num 25) (name PD5/OC1B/XCK1/MOSI) (type BiDi)) + (pin (num 26) (name PD6/D-/RXD1/MISO) (type BiDi)) + (pin (num 27) (name PD7/D+/TXD1/SCK/CLKOUT/EVOUT) (type BiDi)) + (pin (num 28) (name PE0/OC0A/SDA) (type BiDi)) + (pin (num 29) (name PE1/OC0B/XCK0/SCL) (type BiDi)) + (pin (num 30) (name GND) (type power_in)) + (pin (num 31) (name VCC) (type power_in)) + (pin (num 32) (name PE2/OC0C/RXD0) (type BiDi)) + (pin (num 33) (name PE3/OC0D/TXD0) (type BiDi)) + (pin (num 34) (name PDI_DATA) (type input)) + (pin (num 35) (name ~RESET~/PDI_CLK) (type input)) + (pin (num 36) (name PR0/XTAL2/TOSC2) (type BiDi)) + (pin (num 37) (name PR1/XTAL1/TOSC1) (type BiDi)) + (pin (num 38) (name GND) (type power_in)) + (pin (num 39) (name AVCC) (type power_in)) + (pin (num 40) (name AREFA/AC0/ADC0/PA0) (type BiDi)) + (pin (num 41) (name AC1/ADC1/PA1) (type BiDi)) + (pin (num 42) (name AC2/ADC2/PA2) (type BiDi)) + (pin (num 43) (name AC3/ADC3/PA3) (type BiDi)) + (pin (num 44) (name AC4/ADC4/PA4) (type BiDi))))) + (libraries + (library (logical device) + (uri C:\KiCad\share\kicad\library\device.lib)) + (library (logical linear) + (uri C:\KiCad\share\kicad\library\linear.lib)) + (library (logical regul) + (uri C:\KiCad\share\kicad\library\regul.lib)) + (library (logical atmel) + (uri C:\KiCad\share\kicad\library\atmel.lib)) + (library (logical conn) + (uri C:\KiCad\share\kicad\library\conn.lib)) + (library (logical ESPO_PART) + (uri C:\Users\Esposch\Documents\KiCAD\ESPO_PART.lib))) + (nets + (net (code 1) (name "Net-(IC1-Pad33)") + (node (ref R14) (pin 1)) + (node (ref IC1) (pin 33))) + (net (code 2) (name /D-) + (node (ref P2) (pin 2)) + (node (ref IC1) (pin 26))) + (net (code 3) (name /D+) + (node (ref IC1) (pin 27)) + (node (ref P2) (pin 3))) + (net (code 4) (name "Net-(P3-Pad1)") + (node (ref P3) (pin 1)) + (node (ref R10) (pin 2))) + (net (code 5) (name "Net-(P3-Pad2)") + (node (ref R9) (pin 2)) + (node (ref P3) (pin 2))) + (net (code 6) (name "Net-(P3-Pad3)") + (node (ref R8) (pin 2)) + (node (ref P3) (pin 3))) + (net (code 7) (name "Net-(P3-Pad4)") + (node (ref P3) (pin 4)) + (node (ref R7) (pin 2))) + (net (code 8) (name "Net-(IC1-Pad32)") + (node (ref IC1) (pin 32)) + (node (ref R13) (pin 1))) + (net (code 9) (name "Net-(IC1-Pad29)") + (node (ref IC1) (pin 29)) + (node (ref R12) (pin 1))) + (net (code 10) (name "Net-(IC1-Pad28)") + (node (ref IC1) (pin 28)) + (node (ref R11) (pin 1))) + (net (code 11) (name "Net-(R10-Pad1)") + (node (ref R10) (pin 1)) + (node (ref R14) (pin 2))) + (net (code 12) (name "Net-(R13-Pad2)") + (node (ref R13) (pin 2)) + (node (ref R9) (pin 1))) + (net (code 13) (name "Net-(R12-Pad2)") + (node (ref R12) (pin 2)) + (node (ref R8) (pin 1))) + (net (code 14) (name /VCC_PSU) + (node (ref L1) (pin 2)) + (node (ref C9) (pin 1)) + (node (ref P5) (pin 2)) + (node (ref C10) (pin 1))) + (net (code 15) (name "Net-(D1-Pad2)") + (node (ref L1) (pin 1)) + (node (ref Q1) (pin 3)) + (node (ref D1) (pin 2))) + (net (code 16) (name "Net-(R11-Pad2)") + (node (ref R11) (pin 2)) + (node (ref R7) (pin 1))) + (net (code 17) (name "Net-(P8-Pad2)") + (node (ref P8) (pin 2)) + (node (ref U4) (pin 2))) + (net (code 18) (name "Net-(P8-Pad1)") + (node (ref U4) (pin 5)) + (node (ref P8) (pin 1))) + (net (code 19) (name "Net-(R2-Pad1)") + (node (ref R2) (pin 1)) + (node (ref U2) (pin 5)) + (node (ref R4) (pin 2))) + (net (code 20) (name "Net-(C13-Pad1)") + (node (ref C13) (pin 1)) + (node (ref P6) (pin 2))) + (net (code 21) (name /VCC_3V3) + (node (ref C6) (pin 1)) + (node (ref C11) (pin 1)) + (node (ref IC1) (pin 19)) + (node (ref R21) (pin 1)) + (node (ref U1) (pin 2)) + (node (ref P4) (pin 1)) + (node (ref P5) (pin 3)) + (node (ref IC1) (pin 31)) + (node (ref C4) (pin 1))) + (net (code 22) (name /AGND) + (node (ref C8) (pin 2)) + (node (ref U4) (pin 4)) + (node (ref IC1) (pin 38)) + (node (ref R27) (pin 2)) + (node (ref IC1) (pin 30)) + (node (ref P4) (pin 3)) + (node (ref IC1) (pin 18)) + (node (ref IC1) (pin 14)) + (node (ref C5) (pin 2)) + (node (ref C3) (pin 2)) + (node (ref U4) (pin 1)) + (node (ref C4) (pin 2)) + (node (ref P2) (pin 5)) + (node (ref P2) (pin 6)) + (node (ref U1) (pin 1)) + (node (ref R6) (pin 1)) + (node (ref F1) (pin 1)) + (node (ref U3) (pin 4)) + (node (ref U3) (pin 1)) + (node (ref C11) (pin 2)) + (node (ref C6) (pin 2))) + (net (code 23) (name "Net-(C2-Pad2)") + (node (ref C2) (pin 2)) + (node (ref P1) (pin 2))) + (net (code 24) (name "Net-(R22-Pad1)") + (node (ref R22) (pin 1)) + (node (ref R24) (pin 2))) + (net (code 25) (name "Net-(R1-Pad1)") + (node (ref R1) (pin 1)) + (node (ref R3) (pin 1)) + (node (ref U2) (pin 3))) + (net (code 26) (name "Net-(C1-Pad2)") + (node (ref P1) (pin 3)) + (node (ref C1) (pin 2))) + (net (code 27) (name "Net-(C1-Pad1)") + (node (ref C1) (pin 1)) + (node (ref P1) (pin 4)) + (node (ref R1) (pin 2))) + (net (code 28) (name "Net-(C2-Pad1)") + (node (ref P1) (pin 1)) + (node (ref R2) (pin 2)) + (node (ref C2) (pin 1))) + (net (code 29) (name "Net-(R15-Pad1)") + (node (ref U2) (pin 9)) + (node (ref R20) (pin 2)) + (node (ref R15) (pin 1)) + (node (ref R16) (pin 1))) + (net (code 30) (name "Net-(R17-Pad2)") + (node (ref R17) (pin 2)) + (node (ref U3) (pin 3)) + (node (ref R18) (pin 2))) + (net (code 31) (name "Net-(R19-Pad1)") + (node (ref R22) (pin 2)) + (node (ref R19) (pin 1)) + (node (ref U2) (pin 14))) + (net (code 32) (name "Net-(R17-Pad1)") + (node (ref U2) (pin 13)) + (node (ref R17) (pin 1)) + (node (ref R19) (pin 2)) + (node (ref R18) (pin 1))) + (net (code 33) (name "Net-(R15-Pad2)") + (node (ref R16) (pin 2)) + (node (ref U3) (pin 6)) + (node (ref R15) (pin 2))) + (net (code 34) (name "Net-(C14-Pad1)") + (node (ref C14) (pin 1)) + (node (ref P6) (pin 4))) + (net (code 35) (name "Net-(C14-Pad2)") + (node (ref R25) (pin 1)) + (node (ref C14) (pin 2)) + (node (ref P6) (pin 3))) + (net (code 36) (name "Net-(C13-Pad2)") + (node (ref C13) (pin 2)) + (node (ref R24) (pin 1)) + (node (ref P6) (pin 1))) + (net (code 37) (name "Net-(R20-Pad1)") + (node (ref R23) (pin 2)) + (node (ref U2) (pin 8)) + (node (ref R20) (pin 1))) + (net (code 38) (name "Net-(IC1-Pad34)") + (node (ref IC1) (pin 34)) + (node (ref P4) (pin 2))) + (net (code 39) (name "Net-(IC1-Pad35)") + (node (ref IC1) (pin 35)) + (node (ref P4) (pin 4))) + (net (code 40) (name /PSU_PWM) + (node (ref IC1) (pin 24)) + (node (ref Q1) (pin 1))) + (net (code 41) (name +5V) + (node (ref P2) (pin 1)) + (node (ref P5) (pin 1)) + (node (ref C12) (pin 1)) + (node (ref C3) (pin 1)) + (node (ref U1) (pin 3))) + (net (code 42) (name /AVCC) + (node (ref C5) (pin 1)) + (node (ref C8) (pin 1)) + (node (ref R21) (pin 2)) + (node (ref IC1) (pin 39)) + (node (ref R5) (pin 1))) + (net (code 43) (name /DAC_OUT2) + (node (ref IC1) (pin 7)) + (node (ref U2) (pin 10))) + (net (code 44) (name "Net-(P2-Pad4)") + (node (ref P2) (pin 4))) + (net (code 45) (name "Net-(IC1-Pad10)") + (node (ref IC1) (pin 10))) + (net (code 46) (name "Net-(IC1-Pad9)") + (node (ref IC1) (pin 9))) + (net (code 47) (name "Net-(IC1-Pad8)") + (node (ref IC1) (pin 8))) + (net (code 48) (name /DAC_OUT) + (node (ref U2) (pin 12)) + (node (ref IC1) (pin 6))) + (net (code 49) (name /TO_B1) + (node (ref IC1) (pin 5)) + (node (ref U3) (pin 5))) + (net (code 50) (name /TO_B0) + (node (ref U3) (pin 2)) + (node (ref IC1) (pin 4))) + (net (code 51) (name "Net-(IC1-Pad3)") + (node (ref IC1) (pin 3))) + (net (code 52) (name /VGND) + (node (ref C12) (pin 2)) + (node (ref C9) (pin 2)) + (node (ref P7) (pin 2)) + (node (ref P7) (pin 3)) + (node (ref P7) (pin 4)) + (node (ref Q1) (pin 2)) + (node (ref F1) (pin 2)) + (node (ref U2) (pin 11)) + (node (ref C15) (pin 2)) + (node (ref C16) (pin 2)) + (node (ref C10) (pin 2))) + (net (code 53) (name "Net-(IC1-Pad20)") + (node (ref IC1) (pin 20))) + (net (code 54) (name "Net-(IC1-Pad37)") + (node (ref IC1) (pin 37))) + (net (code 55) (name /DIG_CH1) + (node (ref IC1) (pin 17)) + (node (ref U4) (pin 6))) + (net (code 56) (name "Net-(IC1-Pad36)") + (node (ref IC1) (pin 36))) + (net (code 57) (name "Net-(IC1-Pad16)") + (node (ref IC1) (pin 16))) + (net (code 58) (name "Net-(IC1-Pad25)") + (node (ref IC1) (pin 25))) + (net (code 59) (name /XCK) + (node (ref IC1) (pin 11)) + (node (ref IC1) (pin 15))) + (net (code 60) (name /AVCC_ON_2) + (node (ref R5) (pin 2)) + (node (ref R3) (pin 2)) + (node (ref IC1) (pin 44)) + (node (ref R4) (pin 1)) + (node (ref R6) (pin 2))) + (net (code 61) (name "Net-(IC1-Pad43)") + (node (ref IC1) (pin 43))) + (net (code 62) (name "Net-(IC1-Pad23)") + (node (ref IC1) (pin 23))) + (net (code 63) (name "Net-(IC1-Pad13)") + (node (ref IC1) (pin 13))) + (net (code 64) (name /CH1) + (node (ref IC1) (pin 42)) + (node (ref U2) (pin 2)) + (node (ref U2) (pin 1))) + (net (code 65) (name "Net-(IC1-Pad22)") + (node (ref IC1) (pin 22))) + (net (code 66) (name /DIG_CH2) + (node (ref IC1) (pin 12)) + (node (ref U4) (pin 3))) + (net (code 67) (name "Net-(IC1-Pad41)") + (node (ref IC1) (pin 41))) + (net (code 68) (name "Net-(IC1-Pad21)") + (node (ref IC1) (pin 21))) + (net (code 69) (name /CH2) + (node (ref U2) (pin 7)) + (node (ref U2) (pin 6)) + (node (ref IC1) (pin 40)) + (node (ref IC1) (pin 2))) + (net (code 70) (name /PSU_FEEDBACK) + (node (ref IC1) (pin 1)) + (node (ref R27) (pin 1)) + (node (ref R26) (pin 2))) + (net (code 71) (name "Net-(R23-Pad1)") + (node (ref R25) (pin 2)) + (node (ref R23) (pin 1))) + (net (code 72) (name /PSU_OUT) + (node (ref U2) (pin 4)) + (node (ref R26) (pin 1)) + (node (ref D1) (pin 1)) + (node (ref C15) (pin 1)) + (node (ref C16) (pin 1)) + (node (ref P7) (pin 1))))) \ No newline at end of file diff --git a/PCB/OUTPUT_V35/Tinylab_proto1.pro b/PCB/OUTPUT_V35/Tinylab_proto1.pro new file mode 100644 index 00000000..804cf83d --- /dev/null +++ b/PCB/OUTPUT_V35/Tinylab_proto1.pro @@ -0,0 +1,62 @@ +update=22/05/2015 07:44:53 +version=1 +last_client=kicad +[general] +version=1 +RootSch= +BoardNm= +[pcbnew] +version=1 +LastNetListRead= +UseCmpFile=1 +PadDrill=0.600000000000 +PadDrillOvalY=0.600000000000 +PadSizeH=1.500000000000 +PadSizeV=1.500000000000 +PcbTextSizeV=1.500000000000 +PcbTextSizeH=1.500000000000 +PcbTextThickness=0.300000000000 +ModuleTextSizeV=1.000000000000 +ModuleTextSizeH=1.000000000000 +ModuleTextSizeThickness=0.150000000000 +SolderMaskClearance=0.000000000000 +SolderMaskMinWidth=0.000000000000 +DrawSegmentWidth=0.200000000000 +BoardOutlineThickness=0.100000000000 +ModuleOutlineThickness=0.150000000000 +[cvpcb] +version=1 +NetIExt=net +[eeschema] +version=1 +LibDir= +[eeschema/libraries] +LibName1=power +LibName2=device +LibName3=transistors +LibName4=conn +LibName5=linear +LibName6=regul +LibName7=74xx +LibName8=cmos4000 +LibName9=adc-dac +LibName10=memory +LibName11=xilinx +LibName12=microcontrollers +LibName13=dsp +LibName14=microchip +LibName15=analog_switches +LibName16=motorola +LibName17=texas +LibName18=intel +LibName19=audio +LibName20=interface +LibName21=digital-audio +LibName22=philips +LibName23=display +LibName24=cypress +LibName25=siliconi +LibName26=opto +LibName27=atmel +LibName28=contrib +LibName29=valves diff --git a/PCB/OUTPUT_V4/BOM/Tinylab_proto1.csv b/PCB/OUTPUT_V4/BOM/Tinylab_proto1.csv new file mode 100644 index 00000000..25b71349 --- /dev/null +++ b/PCB/OUTPUT_V4/BOM/Tinylab_proto1.csv @@ -0,0 +1,67 @@ +Reference;Mounting; Value; Footprint; Datasheet +C1;SMD;SMD MLCC 1uF 16V 0603;Capacitors_SMD:C_0603; +C2;SMD;SMD MLCC 1uF 16V 0603;Capacitors_SMD:C_0603; +C3;SMD;SMD MLCC 1uF 16V 0603;Capacitors_SMD:C_0603; +C4;SMD;SMD MLCC 1uF 16V 0603;Capacitors_SMD:C_0603; +C5;SMD;SMD MLCC 1uF 16V 0603;Capacitors_SMD:C_0603; +C6;SMD;Electrolytic 4mm 33uF;Capacitors_SMD:c_elec_5x5.3; +C7;SMD;SMD MLCC 1uF 16V 0603;Capacitors_SMD:C_0603; +C8;SMD;SMD MLCC 1uF 16V 0603;Capacitors_SMD:C_0603; +C9;SMD;Electrolytic 4mm 33uF;Capacitors_SMD:c_elec_4x5.3; +C10;SMD;SMD MLCC 1uF 16V 0603;Capacitors_SMD:C_0603; +C11;SMD;SMD MLCC 1uF 16V 0603;Capacitors_SMD:C_0603; +C13;SMD;SMD MLCC 1uF 16V 0603;Capacitors_SMD:C_0603; +C14;SMD;SMD MLCC 1uF 16V 0603;Capacitors_SMD:C_0603; +C15;Thru Hole;Electrolytic 6.3mm 220uF;Capacitors_ThroughHole:C_Radial_D6.3_L11.2_P2.5; +C16;SMD;SMD MLCC 1uF 16V 0603;Capacitors_SMD:C_0603; +D1;Thru Hole;Schottky 0.45V 1A;Diodes_ThroughHole:Diode_DO-41_SOD81_Horizontal_RM10; +F1;SMD;PTC 400mA;Capacitors_SMD:C_1206; +IC1;SMD;QFN ATXMEGA16A4U-A;Housings_QFP:LQFP-44_10x10mm_Pitch0.8mm; +L1;Thru Hole;Bourns Radial 220uH;Inductors:INDUCTOR_V; +L2;SMD;10uH 1210;Resistors_SMD:R_1210; +L3;SMD;10uH 1210;Resistors_SMD:R_1210; +P1;Thru Hole;Female Header 1x2;Pin_Headers:Pin_Header_Straight_1x02; +P2;Thru Hole/SMD;Micro USB-B Connector (F);Connect:USB_Micro-B_WIDE; +P3;Thru Hole;Male header 1x4;Pin_Headers:Pin_Header_Straight_1x04; +P4;Thru Hole;Male header 2x2;Pin_Headers:Pin_Header_Straight_2x02; +P5;Thru Hole;Female Header 1x2;Pin_Headers:Pin_Header_Straight_1x02; +P6;Thru Hole;Male header 1x4;Pin_Headers:Pin_Header_Straight_1x04; +P7;Thru Hole;Male header 1x2;Pin_Headers:Pin_Header_Straight_2x02; +P8;Thru Hole;Feamle Header 1x2;Pin_Headers:Pin_Header_Straight_1x02; +P9;Thru Hole;Female Header 1x2;Pin_Headers:Pin_Header_Straight_1x02; +P10;Thru Hole;Female Header 1x2;Pin_Headers:Pin_Header_Straight_1x02; +Q1;SMD;SMD nMOS Transistor TSM2302CX ;SMD:SOT-23-3; +R1;SMD;SMD 1M? 20V 0603;Resistors_SMD:R_0603; +R2;SMD;SMD 1M? 20V 0603;Resistors_SMD:R_0603; +R3;SMD;SMD 75k? 6.3V 0603;Resistors_SMD:R_0603; +R4;SMD;SMD 75k? 6.3V 0603;Resistors_SMD:R_0603; +R5;SMD;SMD 1k? 16V 0603;Resistors_SMD:R_0603; +R6;SMD;SMD 1k? 16V 0603;Resistors_SMD:R_0603; +R7;SMD;SMD 28? 6.3V 0603;Resistors_SMD:R_0603; +R8;SMD;SMD 28? 6.3V 0603;Resistors_SMD:R_0603; +R9;SMD;SMD 28? 6.3V 0603;Resistors_SMD:R_0603; +R10;SMD;SMD 28? 6.3V 0603;Resistors_SMD:R_0603; +R11;SMD;SMD 28? 6.3V 0603;Resistors_SMD:R_0603; +R12;SMD;SMD 28? 6.3V 0603;Resistors_SMD:R_0603; +R13;SMD;SMD 28? 6.3V 0603;Resistors_SMD:R_0603; +R14;SMD;SMD 28? 6.3V 0603;Resistors_SMD:R_0603; +R15;SMD;SMD 1k? 16V 0603;Resistors_SMD:R_0603; +R16;SMD;SMD 1k? 16V 0603;Resistors_SMD:R_0603; +R17;SMD;SMD 1k? 16V 0603;Resistors_SMD:R_0603; +R18;SMD;SMD 1k? 16V 0603;Resistors_SMD:R_0603; +R19;SMD;SMD 1k? 16V 0603;Resistors_SMD:R_0603; +R20;SMD;SMD 1k? 16V 0603;Resistors_SMD:R_0603; +R21;SMD;SMD 100? 16V 0603;Resistors_SMD:R_0603; +R22;SMD;SMD 28? 6.3V 0603;Resistors_SMD:R_0603; +R23;SMD;SMD 28? 6.3V 0603;Resistors_SMD:R_0603; +R24;SMD;SMD 28? 6.3V 0603;Resistors_SMD:R_0603; +R25;SMD;SMD 28? 6.3V 0603;Resistors_SMD:R_0603; +R26;SMD;SMD 1k? 16V 0603;Resistors_SMD:R_0603; +R27;SMD;SMD 100? 16V 0603;Resistors_SMD:R_0603; +R28;SMD;SMD 100? 16V 0603;Resistors_SMD:R_0603; +R29;SMD;SMD 100? 16V 0603;Resistors_SMD:R_0603; +R30;SMD;SMD 100? 16V 0603;Resistors_SMD:R_0603; +U1;SMD;3.3V Reg RT9161A-33GV;SMD:SOT-23-3; +U2;SMD;LM324;Housings_SOIC:SOIC-14_3.9x8.7mm_Pitch1.27mm; +U3;SMD;DMN63D8LDW;TO_SOT_Packages_SMD:SOT-363; +U4;SMD;DMN63D8LDW;TO_SOT_Packages_SMD:SOT-363; diff --git a/PCB/OUTPUT_V4/BOM/Tinylab_proto1_Elecrow.csv b/PCB/OUTPUT_V4/BOM/Tinylab_proto1_Elecrow.csv new file mode 100644 index 00000000..1b80aa2e --- /dev/null +++ b/PCB/OUTPUT_V4/BOM/Tinylab_proto1_Elecrow.csv @@ -0,0 +1,67 @@ +Type;Reference;Mounting; Value;Qty; Footprint; Datasheet +C;C6;SMD;Electrolytic 4mm 33uF;2;Capacitors_SMD:c_elec_5x5.3; +C;C9;SMD;Electrolytic 4mm 33uF;2;Capacitors_SMD:c_elec_4x5.3; +C;C15;Thru Hole;Electrolytic 6.3mm 220uF;1;Capacitors_ThroughHole:C_Radial_D6.3_L11.2_P2.5; +C;C1;SMD;SMD MLCC 1uF 16V 0603;12;Capacitors_SMD:C_0603; +C;C2;SMD;SMD MLCC 1uF 16V 0603;12;Capacitors_SMD:C_0603; +C;C3;SMD;SMD MLCC 1uF 16V 0603;12;Capacitors_SMD:C_0603; +C;C4;SMD;SMD MLCC 1uF 16V 0603;12;Capacitors_SMD:C_0603; +C;C5;SMD;SMD MLCC 1uF 16V 0603;12;Capacitors_SMD:C_0603; +C;C7;SMD;SMD MLCC 1uF 16V 0603;12;Capacitors_SMD:C_0603; +C;C8;SMD;SMD MLCC 1uF 16V 0603;12;Capacitors_SMD:C_0603; +C;C10;SMD;SMD MLCC 1uF 16V 0603;12;Capacitors_SMD:C_0603; +C;C11;SMD;SMD MLCC 1uF 16V 0603;12;Capacitors_SMD:C_0603; +C;C13;SMD;SMD MLCC 1uF 16V 0603;12;Capacitors_SMD:C_0603; +C;C14;SMD;SMD MLCC 1uF 16V 0603;12;Capacitors_SMD:C_0603; +C;C16;SMD;SMD MLCC 1uF 16V 0603;12;Capacitors_SMD:C_0603; +D;D1;Thru Hole;Schottky 0.45V 1A;1;Diodes_ThroughHole:Diode_DO-41_SOD81_Horizontal_RM10; +F;F1;SMD;PTC 400mA;1;Capacitors_SMD:C_1206; +IC;IC1;SMD;QFN ATXMEGA16A4U-A;1;Housings_QFP:LQFP-44_10x10mm_Pitch0.8mm; +L;L2;SMD;10uH 1210;2;Resistors_SMD:R_1210; +L;L3;SMD;10uH 1210;2;Resistors_SMD:R_1210; +L;L1;Thru Hole;Bourns Radial 220uH;1;Inductors:INDUCTOR_V; +P;P8;Thru Hole;Feamle Header 1x2;5;Pin_Headers:Pin_Header_Straight_1x02; +P;P1;Thru Hole;Female Header 1x2;5;Pin_Headers:Pin_Header_Straight_1x02; +P;P5;Thru Hole;Female Header 1x2;5;Pin_Headers:Pin_Header_Straight_1x02; +P;P9;Thru Hole;Female Header 1x2;5;Pin_Headers:Pin_Header_Straight_1x02; +P;P10;Thru Hole;Female Header 1x2;5;Pin_Headers:Pin_Header_Straight_1x02; +P;P7;Thru Hole;Male header 1x2;1;Pin_Headers:Pin_Header_Straight_2x02; +P;P3;Thru Hole;Male header 1x4;2;Pin_Headers:Pin_Header_Straight_1x04; +P;P6;Thru Hole;Male header 1x4;2;Pin_Headers:Pin_Header_Straight_1x04; +P;P4;Thru Hole;Male header 2x2;1;Pin_Headers:Pin_Header_Straight_2x02; +P;P2;Thru Hole/SMD;Micro USB-B Connector (F);1;Connect:USB_Micro-B_WIDE; +Q;Q1;SMD;SMD nMOS Transistor TSM2302CX ;1;SMD:SOT-23-3; +R;R21;SMD;SMD 100? 16V 0603;5;Resistors_SMD:R_0603; +R;R27;SMD;SMD 100? 16V 0603;5;Resistors_SMD:R_0603; +R;R28;SMD;SMD 100? 16V 0603;5;Resistors_SMD:R_0603; +R;R29;SMD;SMD 100? 16V 0603;5;Resistors_SMD:R_0603; +R;R30;SMD;SMD 100? 16V 0603;5;Resistors_SMD:R_0603; +R;R5;SMD;SMD 1k? 16V 0603;9;Resistors_SMD:R_0603; +R;R6;SMD;SMD 1k? 16V 0603;9;Resistors_SMD:R_0603; +R;R15;SMD;SMD 1k? 16V 0603;9;Resistors_SMD:R_0603; +R;R16;SMD;SMD 1k? 16V 0603;9;Resistors_SMD:R_0603; +R;R17;SMD;SMD 1k? 16V 0603;9;Resistors_SMD:R_0603; +R;R18;SMD;SMD 1k? 16V 0603;9;Resistors_SMD:R_0603; +R;R19;SMD;SMD 1k? 16V 0603;9;Resistors_SMD:R_0603; +R;R20;SMD;SMD 1k? 16V 0603;9;Resistors_SMD:R_0603; +R;R26;SMD;SMD 1k? 16V 0603;9;Resistors_SMD:R_0603; +R;R1;SMD;SMD 1M? 20V 0603;2;Resistors_SMD:R_0603; +R;R2;SMD;SMD 1M? 20V 0603;2;Resistors_SMD:R_0603; +R;R7;SMD;SMD 28? 6.3V 0603;14;Resistors_SMD:R_0603; +R;R8;SMD;SMD 28? 6.3V 0603;14;Resistors_SMD:R_0603; +R;R9;SMD;SMD 28? 6.3V 0603;14;Resistors_SMD:R_0603; +R;R10;SMD;SMD 28? 6.3V 0603;14;Resistors_SMD:R_0603; +R;R11;SMD;SMD 28? 6.3V 0603;14;Resistors_SMD:R_0603; +R;R12;SMD;SMD 28? 6.3V 0603;14;Resistors_SMD:R_0603; +R;R13;SMD;SMD 28? 6.3V 0603;14;Resistors_SMD:R_0603; +R;R14;SMD;SMD 28? 6.3V 0603;14;Resistors_SMD:R_0603; +R;R22;SMD;SMD 28? 6.3V 0603;14;Resistors_SMD:R_0603; +R;R23;SMD;SMD 28? 6.3V 0603;14;Resistors_SMD:R_0603; +R;R24;SMD;SMD 28? 6.3V 0603;14;Resistors_SMD:R_0603; +R;R25;SMD;SMD 28? 6.3V 0603;14;Resistors_SMD:R_0603; +R;R3;SMD;SMD 75k? 6.3V 0603;14;Resistors_SMD:R_0603; +R;R4;SMD;SMD 75k? 6.3V 0603;14;Resistors_SMD:R_0603; +U;U1;SMD;3.3V Reg RT9161A-33GV;1;SMD:SOT-23-3; +U;U3;SMD;DMN63D8LDW;2;TO_SOT_Packages_SMD:SOT-363; +U;U4;SMD;DMN63D8LDW;2;TO_SOT_Packages_SMD:SOT-363; +U;U2;SMD;LM324;1;Housings_SOIC:SOIC-14_3.9x8.7mm_Pitch1.27mm; diff --git a/PCB/OUTPUT_V4/Drill/Tinylab_proto1.drl b/PCB/OUTPUT_V4/Drill/Tinylab_proto1.drl new file mode 100644 index 00000000..dab9c8e9 --- /dev/null +++ b/PCB/OUTPUT_V4/Drill/Tinylab_proto1.drl @@ -0,0 +1,124 @@ +M48 +;DRILL file {KiCad 4.0.1-stable} date 24/03/2016 3:42:36 PM +;FORMAT={2:4/ absolute / inch / keep zeros} +FMAT,2 +INCH,TZ +T1C0.016 +T2C0.020 +T3C0.022 +T4C0.031 +T5C0.032 +T6C0.039 +T7C0.040 +T8C0.050 +% +G90 +G05 +M72 +T1 +X033690Y-041650 +X033710Y-047630 +X033999Y-045270 +X034220Y-049260 +X034524Y-040092 +X035030Y-046800 +X035119Y-048259 +X035581Y-046763 +X035610Y-045900 +X035620Y-048920 +X035630Y-048270 +X035700Y-049250 +X035750Y-040062 +X035956Y-038700 +X036025Y-042575 +X036150Y-042900 +X036772Y-045948 +X036814Y-047798 +X037200Y-048700 +X037600Y-041025 +X037625Y-041450 +X037676Y-047820 +X037992Y-042960 +X038586Y-045300 +X038707Y-044058 +X038796Y-044770 +X038811Y-040650 +X038944Y-039358 +X039246Y-040195 +X039300Y-045625 +X039878Y-042572 +X040075Y-047200 +X040113Y-044749 +X040200Y-039225 +X040654Y-042520 +X040686Y-044430 +X041101Y-043915 +X041124Y-041284 +X041149Y-040969 +X041387Y-044438 +X041450Y-039225 +X041545Y-040708 +X041852Y-040924 +X042134Y-041446 +X042175Y-045325 +X042308Y-042548 +X042476Y-043930 +X042486Y-045406 +X043087Y-045406 +X043116Y-043743 +X043331Y-039990 +X043360Y-038360 +X043386Y-039615 +X043456Y-037964 +X043571Y-044595 +X043946Y-042040 +X044277Y-042513 +X044326Y-040140 +X045136Y-045335 +T4 +X034516Y-044000 +X035500Y-044000 +T5 +X031671Y-038550 +X031671Y-040550 +T6 +X036749Y-042000 +T7 +X031671Y-042050 +X031671Y-043050 +X031671Y-044050 +X031671Y-045050 +X031671Y-046050 +X031671Y-047050 +X031671Y-048050 +X031671Y-049050 +X034671Y-041050 +X034671Y-042050 +X035671Y-041050 +X035671Y-042050 +X040700Y-046000 +X040700Y-047000 +X040700Y-048000 +X040700Y-049000 +X041700Y-046000 +X041700Y-049000 +X043766Y-046545 +X043801Y-047940 +X043801Y-048940 +X044766Y-046545 +X044801Y-047940 +X044801Y-048940 +T8 +X036749Y-038000 +T2 +X045026Y-038232G85X044770Y-038232 +G05 +X045026Y-040988G85X044770Y-040988 +G05 +T3 +X043835Y-038685G85X043835Y-038567 +G05 +X043835Y-040654G85X043835Y-040536 +G05 +T0 +M30 diff --git a/PCB/OUTPUT_V4/Gerber/Tinylab_proto1-B.Cu.gbr b/PCB/OUTPUT_V4/Gerber/Tinylab_proto1-B.Cu.gbr new file mode 100644 index 00000000..81a7e906 --- /dev/null +++ b/PCB/OUTPUT_V4/Gerber/Tinylab_proto1-B.Cu.gbr @@ -0,0 +1,496 @@ +G04 #@! TF.FileFunction,Copper,L2,Bot,Signal* +%FSLAX46Y46*% +G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* +G04 Created by KiCad (PCBNEW 4.0.1-stable) date 24/03/2016 3:42:33 PM* +%MOMM*% +G01* +G04 APERTURE LIST* +%ADD10C,0.100000*% +%ADD11C,1.300000*% +%ADD12R,1.300000X1.300000*% +%ADD13C,1.998980*% +%ADD14R,1.998980X1.998980*% +%ADD15R,1.905000X1.905000*% +%ADD16C,1.905000*% +%ADD17R,2.032000X2.032000*% +%ADD18O,2.032000X2.032000*% +%ADD19O,0.950000X1.250000*% +%ADD20O,1.550000X1.000000*% +%ADD21R,2.032000X1.727200*% +%ADD22O,2.032000X1.727200*% +%ADD23R,1.727200X1.727200*% +%ADD24O,1.727200X1.727200*% +%ADD25C,0.600000*% +%ADD26C,0.635000*% +%ADD27C,1.270000*% +%ADD28C,0.400000*% +%ADD29C,0.250000*% +G04 APERTURE END LIST* +D10* +D11* +X87670000Y-111760000D03* +D12* +X90170000Y-111760000D03* +D13* +X93342460Y-96520000D03* +D14* +X93342460Y-106680000D03* +D15* +X80444800Y-97917000D03* +D16* +X80444800Y-102997000D03* +D17* +X105918000Y-124460000D03* +D18* +X103378000Y-124460000D03* +D19* +X111340460Y-103110300D03* +X111340460Y-98110300D03* +D20* +X114040460Y-104110300D03* +X114040460Y-97110300D03* +D21* +X80444800Y-114427000D03* +D22* +X80444800Y-111887000D03* +X80444800Y-109347000D03* +X80444800Y-106807000D03* +D23* +X113795000Y-124307600D03* +D24* +X111255000Y-124307600D03* +X113795000Y-121767600D03* +X111255000Y-121767600D03* +D17* +X105918000Y-116840000D03* +D18* +X103378000Y-116840000D03* +D21* +X80444800Y-116967000D03* +D22* +X80444800Y-119507000D03* +X80444800Y-122047000D03* +X80444800Y-124587000D03* +D17* +X113706100Y-118224300D03* +D18* +X111166100Y-118224300D03* +D17* +X103378000Y-119380000D03* +D18* +X103378000Y-121920000D03* +D17* +X90604800Y-106807000D03* +D18* +X88064800Y-106807000D03* +D17* +X90604800Y-104267000D03* +D18* +X88064800Y-104267000D03* +D25* +X112588500Y-101955600D03* +X91328700Y-98298000D03* +X112464800Y-107982000D03* +X105123440Y-112872520D03* +X101886498Y-113662460D03* +X111623300Y-106781600D03* +X103261620Y-108000800D03* +X102108000Y-99631500D03* +X105283000Y-99631500D03* +X94488000Y-123698000D03* +X99822000Y-115887500D03* +X85623400Y-120980200D03* +X85572600Y-105791000D03* +X110670800Y-113271300D03* +X98008900Y-115062000D03* +X114645900Y-115150900D03* +X90805000Y-101757598D03* +X107462780Y-108071920D03* +X104455420Y-104861360D03* +X98918220Y-99969320D03* +X87691420Y-101833680D03* +X103342900Y-112852200D03* +X98542300Y-113715800D03* +X107020820Y-105272840D03* +X90376200Y-118778020D03* +X106304540Y-103946960D03* +X89202720Y-122577860D03* +X105524760Y-103398320D03* +X93401340Y-116707920D03* +X104518920Y-104061260D03* +X93508020Y-121406920D03* +X99685300Y-102095300D03* +X110061200Y-101574600D03* +X110200900Y-100622100D03* +X98580400Y-103251000D03* +X95504000Y-104203500D03* +X91503500Y-108140500D03* +X95567500Y-105283000D03* +X91821000Y-108966000D03* +X96500140Y-109118400D03* +X86357920Y-114985800D03* +X107914800Y-115332000D03* +X107889800Y-111582000D03* +X98314800Y-111907000D03* +X101289800Y-108132000D03* +X109514800Y-111107000D03* +X109439800Y-115332000D03* +X104397000Y-111544100D03* +X95697500Y-121462800D03* +X107124500Y-115125500D03* +X101790500Y-119888000D03* +X110378700Y-96428560D03* +X110134860Y-97434400D03* +X90500200Y-122605800D03* +X90474800Y-124256800D03* +X88976200Y-118872000D03* +X90449400Y-116586000D03* +X90678000Y-125095000D03* +X86918800Y-125120400D03* +D26* +X112588500Y-101523800D02* +X112588500Y-101955600D01* +X109438900Y-98374200D02* +X112588500Y-101523800D01* +D27* +X91404900Y-98374200D02* +X109438900Y-98374200D01* +D26* +X91328700Y-98298000D02* +X91404900Y-98374200D01* +D27* +X105123440Y-112872520D02* +X109399280Y-112872520D01* +X112464800Y-110132000D02* +X112464800Y-107982000D01* +X111014800Y-111582000D02* +X112464800Y-110132000D01* +X110689800Y-111582000D02* +X111014800Y-111582000D01* +X109399280Y-112872520D02* +X110689800Y-111582000D01* +D26* +X104300480Y-113695480D02* +X105123440Y-112872520D01* +X101919518Y-113695480D02* +X104300480Y-113695480D01* +X101886498Y-113662460D02* +X101919518Y-113695480D01* +X114040460Y-104110300D02* +X112340460Y-104110300D01* +X112340460Y-104110300D02* +X111340460Y-103110300D01* +X109146800Y-109258100D02* +X111623300Y-106781600D01* +X107145280Y-109258100D02* +X109146800Y-109258100D01* +X105860040Y-107972860D02* +X107145280Y-109258100D01* +X103289560Y-107972860D02* +X105860040Y-107972860D01* +X103261620Y-108000800D02* +X103289560Y-107972860D01* +D28* +X102298500Y-99822000D02* +X102108000Y-99631500D01* +X105092500Y-99822000D02* +X102298500Y-99822000D01* +X105283000Y-99631500D02* +X105092500Y-99822000D01* +D26* +X95631000Y-123698000D02* +X94488000Y-123698000D01* +X96139000Y-124206000D02* +X95631000Y-123698000D01* +X97028000Y-124206000D02* +X96139000Y-124206000D01* +X98171000Y-123063000D02* +X97028000Y-124206000D01* +X98171000Y-116713000D02* +X98171000Y-123063000D01* +X99060000Y-115887500D02* +X98171000Y-116713000D01* +X99822000Y-115887500D02* +X99060000Y-115887500D01* +D29* +X85623400Y-105841800D02* +X85623400Y-120980200D01* +X85572600Y-105791000D02* +X85623400Y-105841800D01* +D26* +X109896100Y-114046000D02* +X110670800Y-113271300D01* +X106721100Y-114046000D02* +X109896100Y-114046000D01* +X106213100Y-114554000D02* +X106721100Y-114046000D01* +X98516900Y-114554000D02* +X106213100Y-114554000D01* +X98008900Y-115062000D02* +X98516900Y-114554000D01* +D28* +X113795000Y-124307600D02* +X114049000Y-124307600D01* +X114049000Y-124307600D02* +X115687300Y-122669300D01* +X115687300Y-122669300D02* +X115687300Y-116192300D01* +X115687300Y-116192300D02* +X114645900Y-115150900D01* +D27* +X90805000Y-101757598D02* +X90805000Y-103505000D01* +X90805000Y-103505000D02* +X90170000Y-104140000D01* +X87630000Y-104140000D02* +X90170000Y-104140000D01* +X87630000Y-106680000D02* +X87630000Y-104140000D01* +X87670000Y-111760000D02* +X87670000Y-106720000D01* +X87670000Y-106720000D02* +X87630000Y-106680000D01* +X90170000Y-106680000D02* +X93342460Y-106680000D01* +X90170000Y-111760000D02* +X90170000Y-106680000D01* +X93342460Y-96520000D02* +X81280000Y-96520000D01* +X81280000Y-96520000D02* +X80010000Y-97790000D01* +D29* +X107157980Y-107767120D02* +X107462780Y-108071920D01* +X107157980Y-106324400D02* +X107157980Y-107767120D01* +X105796540Y-104962960D02* +X107157980Y-106324400D01* +X104557020Y-104962960D02* +X105796540Y-104962960D01* +X104455420Y-104861360D02* +X104557020Y-104962960D01* +X94371620Y-99969320D02* +X98918220Y-99969320D01* +X93726460Y-100614480D02* +X94371620Y-99969320D01* +X88910620Y-100614480D02* +X93726460Y-100614480D01* +X87691420Y-101833680D02* +X88910620Y-100614480D01* +X102733300Y-112242600D02* +X103342900Y-112852200D01* +X100015500Y-112242600D02* +X102733300Y-112242600D01* +X98542300Y-113715800D02* +X100015500Y-112242600D01* +X107020820Y-102816660D02* +X107020820Y-105272840D01* +X106477260Y-102273100D02* +X107020820Y-102816660D01* +X101067060Y-102273100D02* +X106477260Y-102273100D01* +X98895360Y-104444800D02* +X101067060Y-102273100D01* +X98895360Y-107759500D02* +X98895360Y-104444800D01* +X91389660Y-115265200D02* +X98895360Y-107759500D01* +X91389660Y-117764560D02* +X91389660Y-115265200D01* +X90376200Y-118778020D02* +X91389660Y-117764560D01* +X106304540Y-102971600D02* +X106304540Y-103946960D01* +X106081020Y-102748080D02* +X106304540Y-102971600D01* +X101305820Y-102748080D02* +X106081020Y-102748080D01* +X99444000Y-104609900D02* +X101305820Y-102748080D01* +X99444000Y-107950000D02* +X99444000Y-104609900D01* +X91839662Y-115554338D02* +X99444000Y-107950000D01* +X91839662Y-118259438D02* +X91839662Y-115554338D01* +X90493040Y-119606060D02* +X91839662Y-118259438D01* +X89065560Y-119606060D02* +X90493040Y-119606060D01* +X88059720Y-120611900D02* +X89065560Y-119606060D01* +X88059720Y-121983500D02* +X88059720Y-120611900D01* +X88595660Y-122519440D02* +X88059720Y-121983500D01* +X89144300Y-122519440D02* +X88595660Y-122519440D01* +X89202720Y-122577860D02* +X89144300Y-122519440D01* +X101846840Y-103398320D02* +X105524760Y-103398320D01* +X100076460Y-105168700D02* +X101846840Y-103398320D01* +X100076460Y-108280200D02* +X100076460Y-105168700D01* +X93624860Y-114731800D02* +X100076460Y-108280200D01* +X93624860Y-116484400D02* +X93624860Y-114731800D01* +X93401340Y-116707920D02* +X93624860Y-116484400D01* +X102395480Y-104061260D02* +X104518920Y-104061260D01* +X100647960Y-105808780D02* +X102395480Y-104061260D01* +X100647960Y-108597700D02* +X100647960Y-105808780D01* +X94323360Y-114922300D02* +X100647960Y-108597700D01* +X94323360Y-120591580D02* +X94323360Y-114922300D01* +X93508020Y-121406920D02* +X94323360Y-120591580D01* +D28* +X99685300Y-101831702D02* +X99685300Y-102095300D01* +X100294900Y-101222102D02* +X99685300Y-101831702D01* +X109708702Y-101222102D02* +X100294900Y-101222102D01* +X110061200Y-101574600D02* +X109708702Y-101222102D01* +X99863100Y-100622100D02* +X110200900Y-100622100D01* +X98885200Y-101600000D02* +X99863100Y-100622100D01* +X98885200Y-102946200D02* +X98885200Y-101600000D01* +X98580400Y-103251000D02* +X98885200Y-102946200D01* +D29* +X94932500Y-104775000D02* +X95504000Y-104203500D01* +X94932500Y-107823000D02* +X94932500Y-104775000D01* +X94678500Y-108077000D02* +X94932500Y-107823000D01* +X91567000Y-108077000D02* +X94678500Y-108077000D01* +X91503500Y-108140500D02* +X91567000Y-108077000D01* +X95567500Y-107886500D02* +X95567500Y-105283000D01* +X94926998Y-108527002D02* +X95567500Y-107886500D01* +X92259998Y-108527002D02* +X94926998Y-108527002D01* +X91821000Y-108966000D02* +X92259998Y-108527002D01* +X94851680Y-110766860D02* +X96500140Y-109118400D01* +X93314980Y-110766860D02* +X94851680Y-110766860D01* +X90381280Y-113700560D02* +X93314980Y-110766860D01* +X87643160Y-113700560D02* +X90381280Y-113700560D01* +X86357920Y-114985800D02* +X87643160Y-113700560D01* +X111255000Y-124307600D02* +X110865400Y-124307600D01* +X110865400Y-124307600D02* +X107914800Y-121357000D01* +X107914800Y-121357000D02* +X107914800Y-115332000D01* +X107889800Y-111582000D02* +X106964800Y-110657000D01* +X106964800Y-110657000D02* +X99514800Y-110657000D01* +X99514800Y-110657000D02* +X98447171Y-111724629D01* +X98447171Y-111724629D02* +X98447171Y-111774629D01* +X98447171Y-111774629D02* +X98314800Y-111907000D01* +X111255000Y-121767600D02* +X111255000Y-120772200D01* +X103189800Y-110032000D02* +X101289800Y-108132000D01* +X108439800Y-110032000D02* +X103189800Y-110032000D01* +X109514800Y-111107000D02* +X108439800Y-110032000D01* +X109439800Y-118957000D02* +X109439800Y-115332000D01* +X111255000Y-120772200D02* +X109439800Y-118957000D01* +X99825000Y-111544100D02* +X104397000Y-111544100D01* +X95189500Y-116179600D02* +X99825000Y-111544100D01* +X95189500Y-120954800D02* +X95189500Y-116179600D01* +X95697500Y-121462800D02* +X95189500Y-120954800D01* +D28* +X106870500Y-115379500D02* +X107124500Y-115125500D01* +X102489000Y-115379500D02* +X106870500Y-115379500D01* +X101917500Y-115951000D02* +X102489000Y-115379500D01* +X101917500Y-119761000D02* +X101917500Y-115951000D01* +X101790500Y-119888000D02* +X101917500Y-119761000D01* +D29* +X113706100Y-118224300D02* +X113706100Y-112379760D01* +X112116060Y-96428560D02* +X110378700Y-96428560D01* +X112764182Y-97076682D02* +X112116060Y-96428560D01* +X112764182Y-98204442D02* +X112764182Y-97076682D01* +X116002260Y-101442520D02* +X112764182Y-98204442D01* +X116002260Y-110083600D02* +X116002260Y-101442520D01* +X113706100Y-112379760D02* +X116002260Y-110083600D01* +X111166100Y-118224300D02* +X111166100Y-114066320D01* +X110515860Y-97053400D02* +X110134860Y-97434400D01* +X111872220Y-97053400D02* +X110515860Y-97053400D01* +X112314180Y-97495360D02* +X111872220Y-97053400D01* +X112314180Y-98668840D02* +X112314180Y-97495360D01* +X115346940Y-101701600D02* +X112314180Y-98668840D01* +X115346940Y-109885480D02* +X115346940Y-101701600D01* +X111166100Y-114066320D02* +X115346940Y-109885480D01* +X90500200Y-124231400D02* +X90500200Y-122605800D01* +X90474800Y-124256800D02* +X90500200Y-124231400D01* +X89103200Y-118745000D02* +X88976200Y-118872000D01* +X89433400Y-118745000D02* +X89103200Y-118745000D01* +X90525600Y-117652800D02* +X89433400Y-118745000D01* +X90525600Y-116662200D02* +X90525600Y-117652800D01* +X90449400Y-116586000D02* +X90525600Y-116662200D01* +X86944200Y-125095000D02* +X90678000Y-125095000D01* +X86918800Y-125120400D02* +X86944200Y-125095000D01* +M02* diff --git a/PCB/OUTPUT_V4/Gerber/Tinylab_proto1-B.Mask.gbr b/PCB/OUTPUT_V4/Gerber/Tinylab_proto1-B.Mask.gbr new file mode 100644 index 00000000..3630af90 --- /dev/null +++ b/PCB/OUTPUT_V4/Gerber/Tinylab_proto1-B.Mask.gbr @@ -0,0 +1,85 @@ +G04 #@! TF.FileFunction,Soldermask,Bot* +%FSLAX46Y46*% +G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* +G04 Created by KiCad (PCBNEW 4.0.1-stable) date 24/03/2016 3:42:33 PM* +%MOMM*% +G01* +G04 APERTURE LIST* +%ADD10C,0.100000*% +%ADD11C,1.300000*% +%ADD12R,1.300000X1.300000*% +%ADD13C,1.998980*% +%ADD14R,1.998980X1.998980*% +%ADD15R,1.905000X1.905000*% +%ADD16C,1.905000*% +%ADD17R,2.032000X2.032000*% +%ADD18O,2.032000X2.032000*% +%ADD19O,0.950000X1.250000*% +%ADD20O,1.550000X1.000000*% +%ADD21R,2.032000X1.727200*% +%ADD22O,2.032000X1.727200*% +%ADD23R,1.727200X1.727200*% +%ADD24O,1.727200X1.727200*% +G04 APERTURE END LIST* +D10* +D11* +X87670000Y-111760000D03* +D12* +X90170000Y-111760000D03* +D13* +X93342460Y-96520000D03* +D14* +X93342460Y-106680000D03* +D15* +X80444800Y-97917000D03* +D16* +X80444800Y-102997000D03* +D17* +X105918000Y-124460000D03* +D18* +X103378000Y-124460000D03* +D19* +X111340460Y-103110300D03* +X111340460Y-98110300D03* +D20* +X114040460Y-104110300D03* +X114040460Y-97110300D03* +D21* +X80444800Y-114427000D03* +D22* +X80444800Y-111887000D03* +X80444800Y-109347000D03* +X80444800Y-106807000D03* +D23* +X113795000Y-124307600D03* +D24* +X111255000Y-124307600D03* +X113795000Y-121767600D03* +X111255000Y-121767600D03* +D17* +X105918000Y-116840000D03* +D18* +X103378000Y-116840000D03* +D21* +X80444800Y-116967000D03* +D22* +X80444800Y-119507000D03* +X80444800Y-122047000D03* +X80444800Y-124587000D03* +D17* +X113706100Y-118224300D03* +D18* +X111166100Y-118224300D03* +D17* +X103378000Y-119380000D03* +D18* +X103378000Y-121920000D03* +D17* +X90604800Y-106807000D03* +D18* +X88064800Y-106807000D03* +D17* +X90604800Y-104267000D03* +D18* +X88064800Y-104267000D03* +M02* diff --git a/PCB/OUTPUT_V4/Gerber/Tinylab_proto1-Edge.Cuts.gbr b/PCB/OUTPUT_V4/Gerber/Tinylab_proto1-Edge.Cuts.gbr new file mode 100644 index 00000000..6a8dc7fe --- /dev/null +++ b/PCB/OUTPUT_V4/Gerber/Tinylab_proto1-Edge.Cuts.gbr @@ -0,0 +1,21 @@ +G04 #@! TF.FileFunction,Profile,NP* +%FSLAX46Y46*% +G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* +G04 Created by KiCad (PCBNEW 4.0.1-stable) date 24/03/2016 3:42:33 PM* +%MOMM*% +G01* +G04 APERTURE LIST* +%ADD10C,0.100000*% +G04 APERTURE END LIST* +D10* +X78791260Y-126093220D02* +X116936980Y-126093220D01* +X78783640Y-95196660D02* +X116942060Y-95196660D01* +X78786180Y-126090680D02* +X78786180Y-95201740D01* +X116939800Y-95882000D02* +X116939800Y-95207000D01* +X116939800Y-95882000D02* +X116939800Y-126107000D01* +M02* diff --git a/PCB/OUTPUT_V4/Gerber/Tinylab_proto1-F.Cu.gbr b/PCB/OUTPUT_V4/Gerber/Tinylab_proto1-F.Cu.gbr new file mode 100644 index 00000000..741a10d6 --- /dev/null +++ b/PCB/OUTPUT_V4/Gerber/Tinylab_proto1-F.Cu.gbr @@ -0,0 +1,1495 @@ +G04 #@! TF.FileFunction,Copper,L1,Top,Signal* +%FSLAX46Y46*% +G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* +G04 Created by KiCad (PCBNEW 4.0.1-stable) date 24/03/2016 3:42:33 PM* +%MOMM*% +G01* +G04 APERTURE LIST* +%ADD10C,0.100000*% +%ADD11R,0.800000X0.750000*% +%ADD12R,0.750000X0.800000*% +%ADD13C,1.300000*% +%ADD14R,1.300000X1.300000*% +%ADD15C,1.998980*% +%ADD16R,1.998980X1.998980*% +%ADD17R,1.600000X1.000000*% +%ADD18R,1.600000X0.560000*% +%ADD19R,0.560000X1.600000*% +%ADD20R,1.905000X1.905000*% +%ADD21C,1.905000*% +%ADD22R,0.900000X2.500000*% +%ADD23R,2.500000X0.900000*% +%ADD24R,2.032000X2.032000*% +%ADD25O,2.032000X2.032000*% +%ADD26R,1.350000X0.400000*% +%ADD27O,0.950000X1.250000*% +%ADD28O,1.550000X1.000000*% +%ADD29R,2.032000X1.727200*% +%ADD30O,2.032000X1.727200*% +%ADD31R,1.727200X1.727200*% +%ADD32O,1.727200X1.727200*% +%ADD33R,0.600000X0.900000*% +%ADD34R,0.900000X0.500000*% +%ADD35R,0.500000X0.900000*% +%ADD36R,0.900000X0.600000*% +%ADD37R,1.500000X0.600000*% +%ADD38R,0.304800X0.508000*% +%ADD39R,1.600200X2.999740*% +%ADD40R,1.600200X2.600960*% +%ADD41C,0.600000*% +%ADD42C,0.250000*% +%ADD43C,0.635000*% +%ADD44C,1.270000*% +%ADD45C,0.400000*% +G04 APERTURE END LIST* +D10* +X108411229Y-125110571D02* +X108839800Y-125110571D01* +X108925514Y-125139143D01* +X108982657Y-125196286D01* +X109011229Y-125282000D01* +X109011229Y-125339143D01* +X108696943Y-124824857D02* +X108696943Y-124624857D01* +X109011229Y-124539143D02* +X109011229Y-124824857D01* +X108411229Y-124824857D01* +X108411229Y-124539143D01* +X109011229Y-124282000D02* +X108411229Y-124282000D01* +X109011229Y-123939143D01* +X108411229Y-123939143D01* +X108411229Y-123282000D02* +X108411229Y-122939143D01* +X109011229Y-123110572D02* +X108411229Y-123110572D01* +X109011229Y-122739143D02* +X108411229Y-122739143D01* +X109011229Y-122453429D02* +X108411229Y-122453429D01* +X109011229Y-122110572D01* +X108411229Y-122110572D01* +X108725514Y-121710572D02* +X109011229Y-121710572D01* +X108411229Y-121910572D02* +X108725514Y-121710572D01* +X108411229Y-121510572D01* +X109011229Y-121024858D02* +X109011229Y-121310572D01* +X108411229Y-121310572D01* +X108839800Y-120853429D02* +X108839800Y-120567715D01* +X109011229Y-120910572D02* +X108411229Y-120710572D01* +X109011229Y-120510572D01* +X108696943Y-120110572D02* +X108725514Y-120024858D01* +X108754086Y-119996286D01* +X108811229Y-119967715D01* +X108896943Y-119967715D01* +X108954086Y-119996286D01* +X108982657Y-120024858D01* +X109011229Y-120082000D01* +X109011229Y-120310572D01* +X108411229Y-120310572D01* +X108411229Y-120110572D01* +X108439800Y-120053429D01* +X108468371Y-120024858D01* +X108525514Y-119996286D01* +X108582657Y-119996286D01* +X108639800Y-120024858D01* +X108668371Y-120053429D01* +X108696943Y-120110572D01* +X108696943Y-120310572D01* +X108411229Y-119339143D02* +X109011229Y-119139143D01* +X108411229Y-118939143D01* +X108611229Y-118482000D02* +X109011229Y-118482000D01* +X108382657Y-118624857D02* +X108811229Y-118767714D01* +X108811229Y-118396286D01* +X108782657Y-117710571D02* +X108782657Y-117253428D01* +X109011229Y-116510571D02* +X108411229Y-116510571D01* +X108411229Y-116367714D01* +X108439800Y-116281999D01* +X108496943Y-116224857D01* +X108554086Y-116196285D01* +X108668371Y-116167714D01* +X108754086Y-116167714D01* +X108868371Y-116196285D01* +X108925514Y-116224857D01* +X108982657Y-116281999D01* +X109011229Y-116367714D01* +X109011229Y-116510571D01* +X108696943Y-115910571D02* +X108696943Y-115710571D01* +X109011229Y-115624857D02* +X109011229Y-115910571D01* +X108411229Y-115910571D01* +X108411229Y-115624857D01* +X108696943Y-114910571D02* +X108696943Y-114710571D01* +X109011229Y-114624857D02* +X109011229Y-114910571D01* +X108411229Y-114910571D01* +X108411229Y-114624857D01* +X108982657Y-114396285D02* +X109011229Y-114310571D01* +X109011229Y-114167714D01* +X108982657Y-114110571D01* +X108954086Y-114082000D01* +X108896943Y-114053428D01* +X108839800Y-114053428D01* +X108782657Y-114082000D01* +X108754086Y-114110571D01* +X108725514Y-114167714D01* +X108696943Y-114282000D01* +X108668371Y-114339142D01* +X108639800Y-114367714D01* +X108582657Y-114396285D01* +X108525514Y-114396285D01* +X108468371Y-114367714D01* +X108439800Y-114339142D01* +X108411229Y-114282000D01* +X108411229Y-114139142D01* +X108439800Y-114053428D01* +X109011229Y-113796285D02* +X108411229Y-113796285D01* +X108411229Y-113567713D01* +X108439800Y-113510571D01* +X108468371Y-113481999D01* +X108525514Y-113453428D01* +X108611229Y-113453428D01* +X108668371Y-113481999D01* +X108696943Y-113510571D01* +X108725514Y-113567713D01* +X108725514Y-113796285D01* +X108411229Y-113081999D02* +X108411229Y-112967713D01* +X108439800Y-112910571D01* +X108496943Y-112853428D01* +X108611229Y-112824856D01* +X108811229Y-112824856D01* +X108925514Y-112853428D01* +X108982657Y-112910571D01* +X109011229Y-112967713D01* +X109011229Y-113081999D01* +X108982657Y-113139142D01* +X108925514Y-113196285D01* +X108811229Y-113224856D01* +X108611229Y-113224856D01* +X108496943Y-113196285D01* +X108439800Y-113139142D01* +X108411229Y-113081999D01* +X108954086Y-112224857D02* +X108982657Y-112253428D01* +X109011229Y-112339142D01* +X109011229Y-112396285D01* +X108982657Y-112482000D01* +X108925514Y-112539142D01* +X108868371Y-112567714D01* +X108754086Y-112596285D01* +X108668371Y-112596285D01* +X108554086Y-112567714D01* +X108496943Y-112539142D01* +X108439800Y-112482000D01* +X108411229Y-112396285D01* +X108411229Y-112339142D01* +X108439800Y-112253428D01* +X108468371Y-112224857D01* +X108268371Y-112482000D02* +X108182657Y-112367714D01* +X108268371Y-112253428D01* +X108411229Y-111796285D02* +X108839800Y-111796285D01* +X108925514Y-111824857D01* +X108982657Y-111882000D01* +X109011229Y-111967714D01* +X109011229Y-112024857D01* +X108839800Y-111539142D02* +X108839800Y-111253428D01* +X109011229Y-111596285D02* +X108411229Y-111396285D01* +X109011229Y-111196285D01* +D11* +X106795000Y-122555000D03* +X105295000Y-122555000D03* +X106795000Y-118745000D03* +X105295000Y-118745000D03* +D12* +X114887200Y-107633200D03* +X114887200Y-106133200D03* +D11* +X114213400Y-109029500D03* +X115713400Y-109029500D03* +D12* +X104521000Y-114351500D03* +X104521000Y-112851500D03* +D11* +X95238000Y-115316000D03* +X93738000Y-115316000D03* +X102604000Y-111760000D03* +X101104000Y-111760000D03* +D12* +X86360000Y-98945000D03* +X86360000Y-100445000D03* +X95059500Y-107557000D03* +X95059500Y-106057000D03* +X82423000Y-118098000D03* +X82423000Y-116598000D03* +X82550000Y-124956000D03* +X82550000Y-123456000D03* +D13* +X87670000Y-111760000D03* +D14* +X90170000Y-111760000D03* +D12* +X92456000Y-113804000D03* +X92456000Y-115304000D03* +D15* +X93342460Y-96520000D03* +D16* +X93342460Y-106680000D03* +D17* +X93345000Y-103100000D03* +X93345000Y-100100000D03* +D18* +X108720000Y-108140000D03* +X108720000Y-107340000D03* +X108720000Y-106540000D03* +X108720000Y-105740000D03* +X108720000Y-104940000D03* +X108720000Y-104140000D03* +X108720000Y-103340000D03* +X108720000Y-102540000D03* +X108720000Y-101740000D03* +X108720000Y-100940000D03* +X108720000Y-100140000D03* +D19* +X106870000Y-98290000D03* +X106070000Y-98290000D03* +X105270000Y-98290000D03* +X104470000Y-98290000D03* +X103670000Y-98290000D03* +X102870000Y-98290000D03* +X102070000Y-98290000D03* +X101270000Y-98290000D03* +X100470000Y-98290000D03* +X99670000Y-98290000D03* +X98870000Y-98290000D03* +D18* +X97020000Y-100140000D03* +X97020000Y-100940000D03* +X97020000Y-101740000D03* +X97020000Y-102540000D03* +X97020000Y-103340000D03* +X97020000Y-104140000D03* +X97020000Y-104940000D03* +X97020000Y-105740000D03* +X97020000Y-106540000D03* +X97020000Y-107340000D03* +X97020000Y-108140000D03* +D19* +X98870000Y-109990000D03* +X99670000Y-109990000D03* +X100470000Y-109990000D03* +X101270000Y-109990000D03* +X102070000Y-109990000D03* +X102870000Y-109990000D03* +X103670000Y-109990000D03* +X104470000Y-109990000D03* +X105270000Y-109990000D03* +X106070000Y-109990000D03* +X106870000Y-109990000D03* +D20* +X80444800Y-97917000D03* +D21* +X80444800Y-102997000D03* +D22* +X96721000Y-112649000D03* +X99621000Y-112649000D03* +D23* +X93980000Y-112321000D03* +X93980000Y-109421000D03* +D24* +X105918000Y-124460000D03* +D25* +X103378000Y-124460000D03* +D26* +X111340460Y-101910300D03* +X111340460Y-101260300D03* +X111340460Y-100610300D03* +X111340460Y-99960300D03* +X111340460Y-99310300D03* +D27* +X111340460Y-103110300D03* +X111340460Y-98110300D03* +D28* +X114040460Y-104110300D03* +X114040460Y-97110300D03* +D29* +X80444800Y-114427000D03* +D30* +X80444800Y-111887000D03* +X80444800Y-109347000D03* +X80444800Y-106807000D03* +D31* +X113795000Y-124307600D03* +D32* +X111255000Y-124307600D03* +X113795000Y-121767600D03* +X111255000Y-121767600D03* +D24* +X105918000Y-116840000D03* +D25* +X103378000Y-116840000D03* +D29* +X80444800Y-116967000D03* +D30* +X80444800Y-119507000D03* +X80444800Y-122047000D03* +X80444800Y-124587000D03* +D24* +X113706100Y-118224300D03* +D25* +X111166100Y-118224300D03* +D24* +X103378000Y-119380000D03* +D25* +X103378000Y-121920000D03* +D33* +X96139000Y-96136000D03* +X97089000Y-98936000D03* +X95189000Y-98936000D03* +D34* +X99060000Y-122670000D03* +X99060000Y-121170000D03* +X99060000Y-118566500D03* +X99060000Y-120066500D03* +X100647500Y-122670000D03* +X100647500Y-121170000D03* +X100647500Y-120066500D03* +X100647500Y-118566500D03* +D35* +X105676000Y-114300000D03* +X107176000Y-114300000D03* +X105676000Y-112903000D03* +X107176000Y-112903000D03* +D34* +X82550000Y-105930000D03* +X82550000Y-107430000D03* +X82550000Y-108470000D03* +X82550000Y-109970000D03* +X82550000Y-111010000D03* +X82550000Y-112510000D03* +X82550000Y-113550000D03* +X82550000Y-115050000D03* +X84328000Y-107430000D03* +X84328000Y-105930000D03* +X84328000Y-109970000D03* +X84328000Y-108470000D03* +X84328000Y-112510000D03* +X84328000Y-111010000D03* +X84328000Y-115050000D03* +X84328000Y-113550000D03* +X89395300Y-123570300D03* +X89395300Y-125070300D03* +X87871300Y-123570300D03* +X87871300Y-125070300D03* +X89281000Y-117971000D03* +X89281000Y-116471000D03* +X87630000Y-117971000D03* +X87630000Y-116471000D03* +D35* +X86372000Y-119634000D03* +X87872000Y-119634000D03* +X86372000Y-121920000D03* +X87872000Y-121920000D03* +X98818000Y-124079000D03* +X100318000Y-124079000D03* +D34* +X84455000Y-117971000D03* +X84455000Y-116471000D03* +X84709000Y-123583000D03* +X84709000Y-125083000D03* +D35* +X83324000Y-119634000D03* +X84824000Y-119634000D03* +X83324000Y-121920000D03* +X84824000Y-121920000D03* +X85332000Y-102946200D03* +X83832000Y-102946200D03* +X83832000Y-104546400D03* +X85332000Y-104546400D03* +X100318000Y-116840000D03* +X98818000Y-116840000D03* +D34* +X85979000Y-116471000D03* +X85979000Y-117971000D03* +X86233000Y-123583000D03* +X86233000Y-125083000D03* +D36* +X113464800Y-106807000D03* +X110664800Y-107757000D03* +X110664800Y-105857000D03* +D37* +X97213400Y-124485400D03* +X97213400Y-123215400D03* +X97213400Y-121945400D03* +X97213400Y-120675400D03* +X97213400Y-119405400D03* +X97213400Y-118135400D03* +X97213400Y-116865400D03* +X91813400Y-116865400D03* +X91813400Y-118135400D03* +X91813400Y-119405400D03* +X91813400Y-120675400D03* +X91813400Y-121945400D03* +X91813400Y-123215400D03* +X91813400Y-124485400D03* +D38* +X90195400Y-119710200D03* +X88925400Y-119710200D03* +X90195400Y-121742200D03* +X89560400Y-119710200D03* +X88925400Y-121742200D03* +X89560400Y-121742200D03* +X108140500Y-98488500D03* +X109410500Y-98488500D03* +X108140500Y-96456500D03* +X108775500Y-98488500D03* +X109410500Y-96456500D03* +X108775500Y-96456500D03* +D39* +X112448800Y-114696240D03* +X112448800Y-110296960D03* +D40* +X89535000Y-97259140D03* +X89535000Y-100860860D03* +D24* +X90604800Y-106807000D03* +D25* +X88064800Y-106807000D03* +D24* +X90604800Y-104267000D03* +D25* +X88064800Y-104267000D03* +D41* +X112588500Y-101955600D03* +X91328700Y-98298000D03* +X112464800Y-107982000D03* +X105123440Y-112872520D03* +X101886498Y-113662460D03* +X111623300Y-106781600D03* +X103261620Y-108000800D03* +X102108000Y-99631500D03* +X105283000Y-99631500D03* +X94488000Y-123698000D03* +X99822000Y-115887500D03* +X85623400Y-120980200D03* +X85572600Y-105791000D03* +X110670800Y-113271300D03* +X98008900Y-115062000D03* +X114645900Y-115150900D03* +X90805000Y-101757598D03* +X107462780Y-108071920D03* +X104455420Y-104861360D03* +X98918220Y-99969320D03* +X87691420Y-101833680D03* +X103342900Y-112852200D03* +X98542300Y-113715800D03* +X107020820Y-105272840D03* +X90376200Y-118778020D03* +X106304540Y-103946960D03* +X89202720Y-122577860D03* +X105524760Y-103398320D03* +X93401340Y-116707920D03* +X104518920Y-104061260D03* +X93508020Y-121406920D03* +X99685300Y-102095300D03* +X110061200Y-101574600D03* +X110200900Y-100622100D03* +X98580400Y-103251000D03* +X95504000Y-104203500D03* +X91503500Y-108140500D03* +X95567500Y-105283000D03* +X91821000Y-108966000D03* +X96500140Y-109118400D03* +X86357920Y-114985800D03* +X107914800Y-115332000D03* +X107889800Y-111582000D03* +X98314800Y-111907000D03* +X101289800Y-108132000D03* +X109514800Y-111107000D03* +X109439800Y-115332000D03* +X104397000Y-111544100D03* +X95697500Y-121462800D03* +X107124500Y-115125500D03* +X101790500Y-119888000D03* +X110378700Y-96428560D03* +X110134860Y-97434400D03* +X90500200Y-122605800D03* +X90474800Y-124256800D03* +X88976200Y-118872000D03* +X90449400Y-116586000D03* +X90678000Y-125095000D03* +X86918800Y-125120400D03* +D42* +X99060000Y-121170000D02* +X99060000Y-121412000D01* +X99060000Y-121412000D02* +X99568000Y-121920000D01* +X99568000Y-121920000D02* +X101473000Y-121920000D01* +X101473000Y-121920000D02* +X101854000Y-122301000D01* +X101854000Y-122301000D02* +X101854000Y-122936000D01* +X101854000Y-122936000D02* +X103378000Y-124460000D01* +D43* +X106795000Y-122555000D02* +X106795000Y-123583000D01* +X105918000Y-124460000D02* +X103378000Y-124460000D01* +X106795000Y-123583000D02* +X105918000Y-124460000D01* +X104660000Y-121920000D02* +X105295000Y-122555000D01* +X103378000Y-121920000D02* +X104660000Y-121920000D01* +D42* +X99060000Y-120066500D02* +X99135500Y-120066500D01* +X99135500Y-120066500D02* +X99822000Y-119380000D01* +X99822000Y-119380000D02* +X101346000Y-119380000D01* +X101346000Y-119380000D02* +X101981000Y-118745000D01* +X101981000Y-118745000D02* +X101981000Y-117221000D01* +X101981000Y-117221000D02* +X102362000Y-116840000D01* +X102362000Y-116840000D02* +X103378000Y-116840000D01* +D43* +X106795000Y-118745000D02* +X106795000Y-117717000D01* +X106795000Y-117717000D02* +X105918000Y-116840000D01* +X105918000Y-116840000D02* +X103378000Y-116840000D01* +X104660000Y-119380000D02* +X105295000Y-118745000D01* +X103378000Y-119380000D02* +X104660000Y-119380000D01* +X89535000Y-97259140D02* +X90289840Y-97259140D01* +D44* +X90289840Y-97259140D02* +X91328700Y-98298000D01* +D43* +X112543200Y-101910300D02* +X112530500Y-101910300D01* +X112588500Y-101955600D02* +X112543200Y-101910300D01* +D45* +X113464800Y-106807000D02* +X113464800Y-107315000D01* +X113783000Y-107633200D02* +X114887200Y-107633200D01* +X113464800Y-107315000D02* +X113783000Y-107633200D01* +X111340460Y-101910300D02* +X112530500Y-101910300D01* +X113464800Y-105765600D02* +X113464800Y-106807000D01* +X112677400Y-104978200D02* +X113464800Y-105765600D01* +X112677400Y-102057200D02* +X112677400Y-104978200D01* +X112530500Y-101910300D02* +X112677400Y-102057200D01* +D44* +X86360000Y-98945000D02* +X87849140Y-98945000D01* +X87849140Y-98945000D02* +X89535000Y-97259140D01* +X80391000Y-102870000D02* +X84316000Y-98945000D01* +X84316000Y-98945000D02* +X86360000Y-98945000D01* +X112448800Y-107982000D02* +X112448800Y-110296960D01* +X112464800Y-107982000D02* +X112448800Y-107982000D01* +D43* +X99822000Y-115887500D02* +X99822000Y-115547600D01* +X101707140Y-113662460D02* +X101886498Y-113662460D01* +X99822000Y-115547600D02* +X101707140Y-113662460D01* +X105123440Y-112872520D02* +X105123440Y-112851500D01* +X105123440Y-112851500D02* +X105123440Y-112872520D01* +X105123440Y-112872520D02* +X105123440Y-112851500D01* +X114040460Y-104110300D02* +X114040460Y-97110300D01* +X111340460Y-98110300D02* +X113040460Y-98110300D01* +X113040460Y-98110300D02* +X114040460Y-97110300D01* +X97020000Y-105740000D02* +X100182940Y-105740000D01* +X102443740Y-108000800D02* +X102507240Y-108000800D01* +X100182940Y-105740000D02* +X102443740Y-108000800D01* +X102070000Y-109990000D02* +X102070000Y-108438040D01* +X102070000Y-108438040D02* +X102507240Y-108000800D01* +X102507240Y-108000800D02* +X103261620Y-108000800D01* +X111623300Y-106781600D02* +X111606350Y-106798550D01* +X111606350Y-106798550D02* +X111623300Y-106781600D01* +X111623300Y-106781600D02* +X111623300Y-106815500D01* +D45* +X113795000Y-121767600D02* +X113795000Y-121742200D01* +X113795000Y-121742200D02* +X115713400Y-119823800D01* +X115713400Y-119823800D02* +X115713400Y-109029500D01* +D43* +X114887200Y-106133200D02* +X115458000Y-106133200D01* +X116119100Y-108623800D02* +X115713400Y-109029500D01* +X116119100Y-106794300D02* +X116119100Y-108623800D01* +X115458000Y-106133200D02* +X116119100Y-106794300D01* +X112448800Y-110296960D02* +X112448800Y-107641000D01* +X112448800Y-107641000D02* +X111623300Y-106815500D01* +X111623300Y-106815500D02* +X110664800Y-105857000D01* +D44* +X110664800Y-105857000D02* +X110664800Y-103785960D01* +X110664800Y-103785960D02* +X111340460Y-103110300D01* +D45* +X111340460Y-99310300D02* +X111340460Y-98110300D01* +X114887200Y-106133200D02* +X114887200Y-104957040D01* +X114887200Y-104957040D02* +X114040460Y-104110300D01* +D42* +X95059500Y-106057000D02* +X95695200Y-106057000D01* +X96012200Y-105740000D02* +X97020000Y-105740000D01* +X95695200Y-106057000D02* +X96012200Y-105740000D01* +D45* +X105270000Y-98290000D02* +X105270000Y-99618500D01* +X102070000Y-99593500D02* +X102070000Y-98290000D01* +X102108000Y-99631500D02* +X102070000Y-99593500D01* +X105270000Y-99618500D02* +X105283000Y-99631500D01* +D43* +X93738000Y-120003000D02* +X93801500Y-120003000D01* +X93738000Y-115836000D02* +X93738000Y-115316000D01* +X94402998Y-116500998D02* +X93738000Y-115836000D01* +X94402998Y-119401502D02* +X94402998Y-116500998D01* +X93801500Y-120003000D02* +X94402998Y-119401502D01* +D42* +X108140500Y-98488500D02* +X107950000Y-98488500D01* +X105270000Y-97295000D02* +X105270000Y-98290000D01* +X105600500Y-96964500D02* +X105270000Y-97295000D01* +X107442000Y-96964500D02* +X105600500Y-96964500D01* +X107632500Y-97155000D02* +X107442000Y-96964500D01* +X107632500Y-98171000D02* +X107632500Y-97155000D01* +X107950000Y-98488500D02* +X107632500Y-98171000D01* +X108140500Y-98488500D02* +X108140500Y-98107500D01* +X109410500Y-97028000D02* +X109410500Y-96456500D01* +X109156500Y-97282000D02* +X109410500Y-97028000D01* +X108966000Y-97282000D02* +X109156500Y-97282000D01* +X108140500Y-98107500D02* +X108966000Y-97282000D01* +X101104000Y-111760000D02* +X101219000Y-111760000D01* +X101219000Y-111760000D02* +X102070000Y-110909000D01* +X102070000Y-110909000D02* +X102070000Y-109990000D01* +X95059500Y-106057000D02* +X95059500Y-105918000D01* +X95059500Y-105918000D02* +X94742000Y-105600500D01* +D43* +X93789500Y-104711500D02* +X94107000Y-104711500D01* +X94107000Y-104711500D02* +X94678500Y-105283000D01* +D45* +X93853000Y-104711500D02* +X93789500Y-104711500D01* +X94107000Y-104711500D02* +X94678500Y-105283000D01* +D44* +X93345000Y-103100000D02* +X93345000Y-104203500D01* +X93345000Y-104203500D02* +X93853000Y-104711500D01* +D42* +X95059500Y-106057000D02* +X95059500Y-105664000D01* +X95059500Y-105664000D02* +X94678500Y-105283000D01* +X94678500Y-105283000D02* +X94107000Y-104711500D01* +X93853000Y-104711500D02* +X93345000Y-104203500D01* +D43* +X104521000Y-112851500D02* +X105123440Y-112851500D01* +X105123440Y-112851500D02* +X105624500Y-112851500D01* +X105624500Y-112851500D02* +X105676000Y-112903000D01* +X100318000Y-116840000D02* +X100318000Y-116193000D01* +X94488000Y-123698000D02* +X94361000Y-123698000D01* +X100318000Y-116193000D02* +X99822000Y-115887500D01* +X100318000Y-124079000D02* +X100318000Y-124726000D01* +X94361000Y-120626000D02* +X93738000Y-120003000D01* +X94361000Y-123698000D02* +X94361000Y-120626000D01* +X96012000Y-125349000D02* +X94361000Y-123698000D01* +X99695000Y-125349000D02* +X96012000Y-125349000D01* +X100318000Y-124726000D02* +X99695000Y-125349000D01* +X91813400Y-120675400D02* +X93065600Y-120675400D01* +X93065600Y-120675400D02* +X93738000Y-120003000D01* +D42* +X85332000Y-104546400D02* +X85332000Y-105550400D01* +X85623400Y-120980200D02* +X85623400Y-120954800D01* +X85332000Y-105550400D02* +X85572600Y-105791000D01* +X91813400Y-120675400D02* +X89738200Y-120675400D01* +X89712800Y-120700800D02* +X89712800Y-120726200D01* +X89738200Y-120675400D02* +X89712800Y-120700800D01* +X88366600Y-120954800D02* +X89484200Y-120954800D01* +X90195400Y-120243600D02* +X90195400Y-119710200D01* +X89484200Y-120954800D02* +X89712800Y-120726200D01* +X89712800Y-120726200D02* +X90195400Y-120243600D01* +X88925400Y-121742200D02* +X88925400Y-121513600D01* +X88925400Y-121513600D02* +X88366600Y-120954800D01* +X88366600Y-120954800D02* +X85623400Y-120954800D01* +X86233000Y-123367800D02* +X85623400Y-122758200D01* +X85979000Y-118338600D02* +X85979000Y-117971000D01* +X85623400Y-118694200D02* +X85979000Y-118338600D01* +X85623400Y-122758200D02* +X85623400Y-120954800D01* +X85623400Y-120954800D02* +X85623400Y-118694200D01* +X86233000Y-123583000D02* +X86233000Y-123367800D01* +D43* +X96721000Y-112649000D02* +X96721000Y-114231300D01* +X110664800Y-113265300D02* +X110664800Y-112912240D01* +X110670800Y-113271300D02* +X110664800Y-113265300D01* +X97551700Y-115062000D02* +X98008900Y-115062000D01* +X96721000Y-114231300D02* +X97551700Y-115062000D01* +D45* +X114645900Y-115150900D02* +X113364470Y-113869470D01* +X113364470Y-113869470D02* +X113364470Y-113780570D01* +D44* +X114213400Y-109029500D02* +X114213400Y-112931640D01* +X114213400Y-112931640D02* +X113364470Y-113780570D01* +X113364470Y-113780570D02* +X112448800Y-114696240D01* +X110664800Y-107757000D02* +X110664800Y-112912240D01* +X110664800Y-112912240D02* +X112448800Y-114696240D01* +D42* +X96721000Y-112649000D02* +X96721000Y-110797000D01* +X98031000Y-106540000D02* +X97020000Y-106540000D01* +X98171000Y-106680000D02* +X98031000Y-106540000D01* +X98171000Y-109347000D02* +X98171000Y-106680000D01* +X96721000Y-110797000D02* +X98171000Y-109347000D01* +X97020000Y-106540000D02* +X95961500Y-106540000D01* +X95961500Y-106540000D02* +X95059500Y-107442000D01* +X95059500Y-107442000D02* +X95059500Y-107557000D01* +D45* +X99621000Y-112649000D02* +X102604000Y-112649000D01* +X102604000Y-112649000D02* +X102362000Y-112649000D01* +X104521000Y-114351500D02* +X103239000Y-114351500D01* +X102604000Y-113716500D02* +X102604000Y-111760000D01* +X103239000Y-114351500D02* +X102604000Y-113716500D01* +D42* +X102604000Y-111760000D02* +X102604000Y-111454500D01* +X102604000Y-111454500D02* +X102870000Y-111188500D01* +X102870000Y-111188500D02* +X102870000Y-109990000D01* +X102362000Y-112649000D02* +X102604000Y-112407000D01* +X102604000Y-112407000D02* +X102604000Y-111760000D01* +D43* +X104521000Y-114351500D02* +X105624500Y-114351500D01* +X105624500Y-114351500D02* +X105676000Y-114300000D01* +X97213400Y-120675400D02* +X95973900Y-120675400D01* +X95238000Y-119939500D02* +X95238000Y-115316000D01* +X95973900Y-120675400D02* +X95238000Y-119939500D01* +D44* +X93980000Y-112321000D02* +X93980000Y-112649000D01* +X93980000Y-112649000D02* +X95238000Y-113907000D01* +X95238000Y-113907000D02* +X95238000Y-115316000D01* +D43* +X93345000Y-100100000D02* +X93345000Y-98933000D01* +X97089000Y-98359000D02* +X97089000Y-98936000D01* +X96520000Y-97790000D02* +X97089000Y-98359000D01* +X94488000Y-97790000D02* +X96520000Y-97790000D01* +X93345000Y-98933000D02* +X94488000Y-97790000D01* +D44* +X93345000Y-100100000D02* +X90295860Y-100100000D01* +X90295860Y-100100000D02* +X89535000Y-100860860D01* +X86360000Y-100445000D02* +X89119140Y-100445000D01* +X89119140Y-100445000D02* +X89535000Y-100860860D01* +D43* +X92456000Y-115304000D02* +X91428000Y-115304000D01* +X90424000Y-115062000D02* +X87670000Y-112308000D01* +X91186000Y-115062000D02* +X90424000Y-115062000D01* +X91428000Y-115304000D02* +X91186000Y-115062000D01* +X87670000Y-112308000D02* +X87670000Y-111760000D01* +D44* +X89535000Y-100860860D02* +X89908262Y-100860860D01* +X89908262Y-100860860D02* +X90805000Y-101757598D01* +D42* +X90170000Y-106172000D02* +X91592400Y-104749600D01* +X91592400Y-104749600D02* +X91592400Y-103454200D01* +X91592400Y-103454200D02* +X90855800Y-102717600D01* +X90855800Y-102717600D02* +X85699600Y-102717600D01* +X81141000Y-119380000D02* +X82423000Y-118098000D01* +X80010000Y-119380000D02* +X81141000Y-119380000D01* +X83286600Y-117041800D02* +X83286600Y-119596600D01* +X82842800Y-116598000D02* +X83286600Y-117041800D01* +X82423000Y-116598000D02* +X82842800Y-116598000D01* +X83286600Y-119596600D02* +X83324000Y-119634000D01* +X80010000Y-116840000D02* +X82181000Y-116840000D01* +X82181000Y-116840000D02* +X82423000Y-116598000D01* +X80010000Y-124460000D02* +X80797400Y-124460000D01* +X80797400Y-124460000D02* +X81293400Y-124956000D01* +X81293400Y-124956000D02* +X82550000Y-124956000D01* +X83324000Y-121920000D02* +X83324000Y-122682000D01* +X83324000Y-122682000D02* +X82550000Y-123456000D01* +X80010000Y-121920000D02* +X83324000Y-121920000D01* +X85699600Y-102717600D02* +X85471000Y-102946200D01* +X85471000Y-102946200D02* +X85332000Y-102946200D01* +D44* +X93980000Y-109421000D02* +X93980000Y-109220000D01* +X93980000Y-109220000D02* +X93342460Y-108582460D01* +X93342460Y-108582460D02* +X93342460Y-106680000D01* +X92456000Y-113804000D02* +X90944000Y-113804000D01* +X90170000Y-113030000D02* +X90170000Y-111760000D01* +X90944000Y-113804000D02* +X90170000Y-113030000D01* +D42* +X90170000Y-106680000D02* +X90170000Y-106172000D01* +D43* +X96139000Y-96136000D02* +X93726460Y-96136000D01* +X93726460Y-96136000D02* +X93342460Y-96520000D01* +D42* +X83832000Y-102946200D02* +X83832000Y-102482540D01* +X107530860Y-108140000D02* +X108720000Y-108140000D01* +X107462780Y-108071920D02* +X107530860Y-108140000D01* +X103810260Y-104861360D02* +X104455420Y-104861360D01* +X98918220Y-99969320D02* +X103810260Y-104861360D01* +X84480860Y-101833680D02* +X87691420Y-101833680D01* +X83832000Y-102482540D02* +X84480860Y-101833680D01* +D43* +X83832000Y-104546400D02* +X83832000Y-102946200D01* +D42* +X98818000Y-116840000D02* +X98818000Y-114740800D01* +X103673100Y-112522000D02* +X103673100Y-109993100D01* +X103342900Y-112852200D02* +X103673100Y-112522000D01* +X98288300Y-113969800D02* +X98542300Y-113715800D01* +X98288300Y-114211100D02* +X98288300Y-113969800D01* +X98818000Y-114740800D02* +X98288300Y-114211100D01* +X103673100Y-109993100D02* +X103670000Y-109990000D01* +D45* +X103670000Y-109990000D02* +X103670000Y-108610500D01* +X103670000Y-108610500D02* +X104940500Y-107340000D01* +X104940500Y-107340000D02* +X108720000Y-107340000D01* +X103695500Y-110015500D02* +X103670000Y-109990000D01* +X98818000Y-116840000D02* +X97238800Y-116840000D01* +X97238800Y-116840000D02* +X97213400Y-116865400D01* +D43* +X97213400Y-118135400D02* +X97213400Y-116865400D01* +D42* +X89560400Y-119710200D02* +X89560400Y-119311880D01* +X107422140Y-105674160D02* +X108654160Y-105674160D01* +X107020820Y-105272840D02* +X107422140Y-105674160D01* +X90094260Y-118778020D02* +X90376200Y-118778020D01* +X89560400Y-119311880D02* +X90094260Y-118778020D01* +X108654160Y-105674160D02* +X108720000Y-105740000D01* +X89560400Y-121742200D02* +X89560400Y-122220180D01* +X107645660Y-104902000D02* +X108682000Y-104902000D01* +X107361180Y-104617520D02* +X107645660Y-104902000D01* +X106975100Y-104617520D02* +X107361180Y-104617520D01* +X106304540Y-103946960D02* +X106975100Y-104617520D01* +X89560400Y-122220180D02* +X89202720Y-122577860D01* +X108682000Y-104902000D02* +X108720000Y-104940000D01* +X91813400Y-119405400D02* +X92613940Y-119405400D01* +X107432300Y-104140000D02* +X108720000Y-104140000D01* +X107307840Y-104015540D02* +X107432300Y-104140000D01* +X107307840Y-103489760D02* +X107307840Y-104015540D01* +X106952240Y-103134160D02* +X107307840Y-103489760D01* +X105788920Y-103134160D02* +X106952240Y-103134160D01* +X105524760Y-103398320D02* +X105788920Y-103134160D01* +X93401340Y-118618000D02* +X93401340Y-116707920D01* +X92613940Y-119405400D02* +X93401340Y-118618000D01* +D45* +X91813400Y-119405400D02* +X92557600Y-119405400D01* +D42* +X91813400Y-121945400D02* +X92969540Y-121945400D01* +X107742180Y-103220520D02* +X108600520Y-103220520D01* +X107122420Y-102600760D02* +X107742180Y-103220520D01* +X105204720Y-102600760D02* +X107122420Y-102600760D01* +X104882140Y-102923340D02* +X105204720Y-102600760D01* +X104882140Y-103698040D02* +X104882140Y-102923340D01* +X104518920Y-104061260D02* +X104882140Y-103698040D01* +X92969540Y-121945400D02* +X93508020Y-121406920D01* +X108600520Y-103220520D02* +X108720000Y-103340000D01* +D45* +X108694500Y-103314500D02* +X108720000Y-103340000D01* +X104470000Y-98290000D02* +X104470000Y-99898000D01* +X106425500Y-100140000D02* +X108720000Y-100140000D01* +X106172000Y-100393500D02* +X106425500Y-100140000D01* +X104965500Y-100393500D02* +X106172000Y-100393500D01* +X104470000Y-99898000D02* +X104965500Y-100393500D01* +D42* +X109410500Y-98488500D02* +X109410500Y-98806000D01* +X107767000Y-99187000D02* +X106870000Y-98290000D01* +X109029500Y-99187000D02* +X107767000Y-99187000D01* +X109410500Y-98806000D02* +X109029500Y-99187000D01* +X108140500Y-96456500D02* +X103568500Y-96456500D01* +X102870000Y-97155000D02* +X102870000Y-98290000D01* +X103568500Y-96456500D02* +X102870000Y-97155000D01* +D43* +X95189000Y-98936000D02* +X95189000Y-100142000D01* +X95987000Y-100940000D02* +X97020000Y-100940000D01* +X95189000Y-100142000D02* +X95987000Y-100940000D01* +D45* +X111340460Y-101260300D02* +X110540600Y-101260300D01* +X99240600Y-102540000D02* +X97020000Y-102540000D01* +X99685300Y-102095300D02* +X99240600Y-102540000D01* +X110226300Y-101574600D02* +X110061200Y-101574600D01* +X110540600Y-101260300D02* +X110226300Y-101574600D01* +X110212700Y-100610300D02* +X111340460Y-100610300D01* +X110200900Y-100622100D02* +X110212700Y-100610300D01* +X98491400Y-103340000D02* +X98580400Y-103251000D01* +X97020000Y-103340000D02* +X98491400Y-103340000D01* +D42* +X84328000Y-107430000D02* +X85776500Y-107430000D01* +X95567500Y-104140000D02* +X97020000Y-104140000D01* +X95504000Y-104203500D02* +X95567500Y-104140000D01* +X86487000Y-108140500D02* +X91503500Y-108140500D01* +X85776500Y-107430000D02* +X86487000Y-108140500D01* +X84328000Y-109970000D02* +X90817000Y-109970000D01* +X95910500Y-104940000D02* +X97020000Y-104940000D01* +X95567500Y-105283000D02* +X95910500Y-104940000D01* +X90817000Y-109970000D02* +X91821000Y-108966000D01* +X84328000Y-112510000D02* +X84328000Y-112452002D01* +X84328000Y-112452002D02* +X86226502Y-110553500D01* +X86226502Y-110553500D02* +X95250000Y-110553500D01* +X95250000Y-110553500D02* +X95758000Y-110045500D01* +X95758000Y-110045500D02* +X95758000Y-107505500D01* +X95758000Y-107505500D02* +X95923500Y-107340000D01* +X95923500Y-107340000D02* +X97020000Y-107340000D01* +X84328000Y-115050000D02* +X86293720Y-115050000D01* +X97020000Y-108598540D02* +X97020000Y-108140000D01* +X96500140Y-109118400D02* +X97020000Y-108598540D01* +X86293720Y-115050000D02* +X86357920Y-114985800D01* +X107914800Y-115332000D02* +X107889800Y-115307000D01* +X107889800Y-115307000D02* +X107889800Y-111582000D01* +X98314800Y-111907000D02* +X97989800Y-111582000D01* +X97989800Y-111582000D02* +X97989800Y-110707000D01* +X97989800Y-110707000D02* +X98389800Y-110307000D01* +X98389800Y-110307000D02* +X98553000Y-110307000D01* +X98553000Y-110307000D02* +X98870000Y-109990000D01* +X99670000Y-108401800D02* +X99670000Y-109990000D01* +X99914800Y-108157000D02* +X99670000Y-108401800D01* +X101264800Y-108157000D02* +X99914800Y-108157000D01* +X101289800Y-108132000D02* +X101264800Y-108157000D01* +X109514800Y-115257000D02* +X109514800Y-111107000D01* +X109439800Y-115332000D02* +X109514800Y-115257000D01* +X97213400Y-123215400D02* +X96281700Y-123215400D01* +X105270000Y-110899700D02* +X105270000Y-109990000D01* +X104841500Y-111328200D02* +X105270000Y-110899700D01* +X104612900Y-111328200D02* +X104841500Y-111328200D01* +X104397000Y-111544100D02* +X104612900Y-111328200D01* +X95697500Y-122631200D02* +X95697500Y-121462800D01* +X96281700Y-123215400D02* +X95697500Y-122631200D01* +D45* +X105283000Y-110003000D02* +X105270000Y-109990000D01* +X96997500Y-122999500D02* +X97213400Y-123215400D01* +D43* +X97213400Y-124485400D02* +X98411600Y-124485400D01* +X98411600Y-124485400D02* +X98818000Y-124079000D01* +X97213400Y-123215400D02* +X97213400Y-124485400D01* +D45* +X107176000Y-112903000D02* +X107176000Y-110296000D01* +X107176000Y-110296000D02* +X106870000Y-109990000D01* +X100647500Y-120066500D02* +X101612000Y-120066500D01* +X107176000Y-115074000D02* +X107176000Y-114300000D01* +X107124500Y-115125500D02* +X107176000Y-115074000D01* +X101612000Y-120066500D02* +X101790500Y-119888000D01* +D43* +X107176000Y-112903000D02* +X107176000Y-114300000D01* +X100647500Y-121170000D02* +X100647500Y-120066500D01* +D42* +X82550000Y-115050000D02* +X82182400Y-115050000D01* +X82182400Y-115050000D02* +X81432400Y-114300000D01* +X81432400Y-114300000D02* +X80010000Y-114300000D01* +X82550000Y-112510000D02* +X82385600Y-112510000D01* +X82385600Y-112510000D02* +X81635600Y-111760000D01* +X81635600Y-111760000D02* +X80010000Y-111760000D01* +X82550000Y-109970000D02* +X82309400Y-109970000D01* +X82309400Y-109970000D02* +X81559400Y-109220000D01* +X81559400Y-109220000D02* +X80010000Y-109220000D01* +X82550000Y-107430000D02* +X81318800Y-107430000D01* +X81318800Y-107430000D02* +X80568800Y-106680000D01* +X80568800Y-106680000D02* +X80010000Y-106680000D01* +X108775500Y-96096280D02* +X108775500Y-96456500D01* +X109083300Y-95788480D02* +X108775500Y-96096280D01* +X109784340Y-95788480D02* +X109083300Y-95788480D01* +X109982460Y-95986600D02* +X109784340Y-95788480D01* +X109982460Y-96032320D02* +X109982460Y-95986600D01* +X110378700Y-96428560D02* +X109982460Y-96032320D01* +X108775500Y-98108898D02* +X108775500Y-98488500D01* +X109129958Y-97754440D02* +X108775500Y-98108898D01* +X109814820Y-97754440D02* +X109129958Y-97754440D01* +X110134860Y-97434400D02* +X109814820Y-97754440D01* +D43* +X99060000Y-122670000D02* +X100647500Y-122670000D01* +X97213400Y-121945400D02* +X98335400Y-121945400D01* +X98335400Y-121945400D02* +X99060000Y-122670000D01* +X97213400Y-119405400D02* +X98221100Y-119405400D01* +X98221100Y-119405400D02* +X99060000Y-118566500D01* +X100647500Y-118566500D02* +X99060000Y-118566500D01* +D42* +X82550000Y-105930000D02* +X84328000Y-105930000D01* +X82550000Y-108470000D02* +X84328000Y-108470000D01* +X82550000Y-111010000D02* +X84328000Y-111010000D01* +X82550000Y-113550000D02* +X84328000Y-113550000D01* +X89395300Y-123570300D02* +X90475500Y-123570300D01* +X90830400Y-123215400D02* +X91813400Y-123215400D01* +X90475500Y-123570300D02* +X90830400Y-123215400D01* +X87871300Y-123570300D02* +X87871300Y-121920700D01* +X87871300Y-121920700D02* +X87872000Y-121920000D01* +X87871300Y-123570300D02* +X89395300Y-123570300D01* +X89395300Y-125070300D02* +X89661300Y-125070300D01* +X89661300Y-125070300D02* +X90474800Y-124256800D01* +X90220800Y-122326400D02* +X90220800Y-121767600D01* +X90500200Y-122605800D02* +X90220800Y-122326400D01* +X90220800Y-121767600D02* +X90195400Y-121742200D01* +X87871300Y-125070300D02* +X89395300Y-125070300D01* +X91813400Y-118135400D02* +X90271600Y-118135400D01* +X90107200Y-117971000D02* +X89281000Y-117971000D01* +X90271600Y-118135400D02* +X90107200Y-117971000D01* +X87872000Y-119634000D02* +X87872000Y-118213000D01* +X87872000Y-118213000D02* +X87630000Y-117971000D01* +X87630000Y-117971000D02* +X89281000Y-117971000D01* +X89281000Y-116471000D02* +X90334400Y-116471000D01* +X88925400Y-118922800D02* +X88925400Y-119710200D01* +X88976200Y-118872000D02* +X88925400Y-118922800D01* +X90334400Y-116471000D02* +X90449400Y-116586000D01* +X87630000Y-116471000D02* +X89281000Y-116471000D01* +X85979000Y-116471000D02* +X86195600Y-116471000D01* +X86195600Y-116471000D02* +X86817200Y-115849400D01* +X90805000Y-115849400D02* +X91813400Y-116857800D01* +X86817200Y-115849400D02* +X90805000Y-115849400D01* +X91813400Y-116857800D02* +X91813400Y-116865400D01* +X85979000Y-116471000D02* +X86067200Y-116471000D01* +X86067200Y-116471000D02* +X86791800Y-117195600D01* +X86372000Y-119012400D02* +X86372000Y-119634000D01* +X86512400Y-118872000D02* +X86372000Y-119012400D01* +X86537800Y-118872000D02* +X86512400Y-118872000D01* +X86791800Y-118618000D02* +X86537800Y-118872000D01* +X86791800Y-117195600D02* +X86791800Y-118618000D01* +X84455000Y-116471000D02* +X85979000Y-116471000D01* +X86233000Y-125083000D02* +X86881400Y-125083000D01* +X91305400Y-124993400D02* +X91813400Y-124485400D01* +X90779600Y-124993400D02* +X91305400Y-124993400D01* +X90678000Y-125095000D02* +X90779600Y-124993400D01* +X86881400Y-125083000D02* +X86918800Y-125120400D01* +X86372000Y-121920000D02* +X86372000Y-122516200D01* +X86233000Y-124815600D02* +X86233000Y-125083000D01* +X86436200Y-124612400D02* +X86233000Y-124815600D01* +X86614000Y-124612400D02* +X86436200Y-124612400D01* +X87045800Y-124180600D02* +X86791800Y-124434600D01* +X86791800Y-124434600D02* +X86614000Y-124612400D01* +X87045800Y-123190000D02* +X87045800Y-124180600D01* +X86372000Y-122516200D02* +X87045800Y-123190000D01* +X84709000Y-125083000D02* +X86233000Y-125083000D01* +X84824000Y-119634000D02* +X84824000Y-119037800D01* +X84455000Y-118668800D02* +X84455000Y-117971000D01* +X84824000Y-119037800D02* +X84455000Y-118668800D01* +X84824000Y-121920000D02* +X84824000Y-123468000D01* +X84824000Y-123468000D02* +X84709000Y-123583000D01* +M02* diff --git a/PCB/OUTPUT_V4/Gerber/Tinylab_proto1-F.Mask.gbr b/PCB/OUTPUT_V4/Gerber/Tinylab_proto1-F.Mask.gbr new file mode 100644 index 00000000..1c0c5483 --- /dev/null +++ b/PCB/OUTPUT_V4/Gerber/Tinylab_proto1-F.Mask.gbr @@ -0,0 +1,304 @@ +G04 #@! TF.FileFunction,Soldermask,Top* +%FSLAX46Y46*% +G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* +G04 Created by KiCad (PCBNEW 4.0.1-stable) date 24/03/2016 3:42:33 PM* +%MOMM*% +G01* +G04 APERTURE LIST* +%ADD10C,0.100000*% +%ADD11R,0.800000X0.750000*% +%ADD12R,0.750000X0.800000*% +%ADD13C,1.300000*% +%ADD14R,1.300000X1.300000*% +%ADD15C,1.998980*% +%ADD16R,1.998980X1.998980*% +%ADD17R,1.600000X1.000000*% +%ADD18R,1.600000X0.560000*% +%ADD19R,0.560000X1.600000*% +%ADD20R,1.905000X1.905000*% +%ADD21C,1.905000*% +%ADD22R,0.900000X2.500000*% +%ADD23R,2.500000X0.900000*% +%ADD24R,2.032000X2.032000*% +%ADD25O,2.032000X2.032000*% +%ADD26R,1.350000X0.400000*% +%ADD27O,0.950000X1.250000*% +%ADD28O,1.550000X1.000000*% +%ADD29R,2.032000X1.727200*% +%ADD30O,2.032000X1.727200*% +%ADD31R,1.727200X1.727200*% +%ADD32O,1.727200X1.727200*% +%ADD33R,0.600000X0.900000*% +%ADD34R,0.900000X0.500000*% +%ADD35R,0.500000X0.900000*% +%ADD36R,0.900000X0.600000*% +%ADD37R,1.500000X0.600000*% +%ADD38R,0.304800X0.508000*% +%ADD39R,1.600200X2.999740*% +%ADD40R,1.600200X2.600960*% +G04 APERTURE END LIST* +D10* +D11* +X106795000Y-122555000D03* +X105295000Y-122555000D03* +X106795000Y-118745000D03* +X105295000Y-118745000D03* +D12* +X114887200Y-107633200D03* +X114887200Y-106133200D03* +D11* +X114213400Y-109029500D03* +X115713400Y-109029500D03* +D12* +X104521000Y-114351500D03* +X104521000Y-112851500D03* +D11* +X95238000Y-115316000D03* +X93738000Y-115316000D03* +X102604000Y-111760000D03* +X101104000Y-111760000D03* +D12* +X86360000Y-98945000D03* +X86360000Y-100445000D03* +X95059500Y-107557000D03* +X95059500Y-106057000D03* +X82423000Y-118098000D03* +X82423000Y-116598000D03* +X82550000Y-124956000D03* +X82550000Y-123456000D03* +D13* +X87670000Y-111760000D03* +D14* +X90170000Y-111760000D03* +D12* +X92456000Y-113804000D03* +X92456000Y-115304000D03* +D15* +X93342460Y-96520000D03* +D16* +X93342460Y-106680000D03* +D17* +X93345000Y-103100000D03* +X93345000Y-100100000D03* +D18* +X108720000Y-108140000D03* +X108720000Y-107340000D03* +X108720000Y-106540000D03* +X108720000Y-105740000D03* +X108720000Y-104940000D03* +X108720000Y-104140000D03* +X108720000Y-103340000D03* +X108720000Y-102540000D03* +X108720000Y-101740000D03* +X108720000Y-100940000D03* +X108720000Y-100140000D03* +D19* +X106870000Y-98290000D03* +X106070000Y-98290000D03* +X105270000Y-98290000D03* +X104470000Y-98290000D03* +X103670000Y-98290000D03* +X102870000Y-98290000D03* +X102070000Y-98290000D03* +X101270000Y-98290000D03* +X100470000Y-98290000D03* +X99670000Y-98290000D03* +X98870000Y-98290000D03* +D18* +X97020000Y-100140000D03* +X97020000Y-100940000D03* +X97020000Y-101740000D03* +X97020000Y-102540000D03* +X97020000Y-103340000D03* +X97020000Y-104140000D03* +X97020000Y-104940000D03* +X97020000Y-105740000D03* +X97020000Y-106540000D03* +X97020000Y-107340000D03* +X97020000Y-108140000D03* +D19* +X98870000Y-109990000D03* +X99670000Y-109990000D03* +X100470000Y-109990000D03* +X101270000Y-109990000D03* +X102070000Y-109990000D03* +X102870000Y-109990000D03* +X103670000Y-109990000D03* +X104470000Y-109990000D03* +X105270000Y-109990000D03* +X106070000Y-109990000D03* +X106870000Y-109990000D03* +D20* +X80444800Y-97917000D03* +D21* +X80444800Y-102997000D03* +D22* +X96721000Y-112649000D03* +X99621000Y-112649000D03* +D23* +X93980000Y-112321000D03* +X93980000Y-109421000D03* +D24* +X105918000Y-124460000D03* +D25* +X103378000Y-124460000D03* +D26* +X111340460Y-101910300D03* +X111340460Y-101260300D03* +X111340460Y-100610300D03* +X111340460Y-99960300D03* +X111340460Y-99310300D03* +D27* +X111340460Y-103110300D03* +X111340460Y-98110300D03* +D28* +X114040460Y-104110300D03* +X114040460Y-97110300D03* +D29* +X80444800Y-114427000D03* +D30* +X80444800Y-111887000D03* +X80444800Y-109347000D03* +X80444800Y-106807000D03* +D31* +X113795000Y-124307600D03* +D32* +X111255000Y-124307600D03* +X113795000Y-121767600D03* +X111255000Y-121767600D03* +D24* +X105918000Y-116840000D03* +D25* +X103378000Y-116840000D03* +D29* +X80444800Y-116967000D03* +D30* +X80444800Y-119507000D03* +X80444800Y-122047000D03* +X80444800Y-124587000D03* +D24* +X113706100Y-118224300D03* +D25* +X111166100Y-118224300D03* +D24* +X103378000Y-119380000D03* +D25* +X103378000Y-121920000D03* +D33* +X96139000Y-96136000D03* +X97089000Y-98936000D03* +X95189000Y-98936000D03* +D34* +X99060000Y-122670000D03* +X99060000Y-121170000D03* +X99060000Y-118566500D03* +X99060000Y-120066500D03* +X100647500Y-122670000D03* +X100647500Y-121170000D03* +X100647500Y-120066500D03* +X100647500Y-118566500D03* +D35* +X105676000Y-114300000D03* +X107176000Y-114300000D03* +X105676000Y-112903000D03* +X107176000Y-112903000D03* +D34* +X82550000Y-105930000D03* +X82550000Y-107430000D03* +X82550000Y-108470000D03* +X82550000Y-109970000D03* +X82550000Y-111010000D03* +X82550000Y-112510000D03* +X82550000Y-113550000D03* +X82550000Y-115050000D03* +X84328000Y-107430000D03* +X84328000Y-105930000D03* +X84328000Y-109970000D03* +X84328000Y-108470000D03* +X84328000Y-112510000D03* +X84328000Y-111010000D03* +X84328000Y-115050000D03* +X84328000Y-113550000D03* +X89395300Y-123570300D03* +X89395300Y-125070300D03* +X87871300Y-123570300D03* +X87871300Y-125070300D03* +X89281000Y-117971000D03* +X89281000Y-116471000D03* +X87630000Y-117971000D03* +X87630000Y-116471000D03* +D35* +X86372000Y-119634000D03* +X87872000Y-119634000D03* +X86372000Y-121920000D03* +X87872000Y-121920000D03* +X98818000Y-124079000D03* +X100318000Y-124079000D03* +D34* +X84455000Y-117971000D03* +X84455000Y-116471000D03* +X84709000Y-123583000D03* +X84709000Y-125083000D03* +D35* +X83324000Y-119634000D03* +X84824000Y-119634000D03* +X83324000Y-121920000D03* +X84824000Y-121920000D03* +X85332000Y-102946200D03* +X83832000Y-102946200D03* +X83832000Y-104546400D03* +X85332000Y-104546400D03* +X100318000Y-116840000D03* +X98818000Y-116840000D03* +D34* +X85979000Y-116471000D03* +X85979000Y-117971000D03* +X86233000Y-123583000D03* +X86233000Y-125083000D03* +D36* +X113464800Y-106807000D03* +X110664800Y-107757000D03* +X110664800Y-105857000D03* +D37* +X97213400Y-124485400D03* +X97213400Y-123215400D03* +X97213400Y-121945400D03* +X97213400Y-120675400D03* +X97213400Y-119405400D03* +X97213400Y-118135400D03* +X97213400Y-116865400D03* +X91813400Y-116865400D03* +X91813400Y-118135400D03* +X91813400Y-119405400D03* +X91813400Y-120675400D03* +X91813400Y-121945400D03* +X91813400Y-123215400D03* +X91813400Y-124485400D03* +D38* +X90195400Y-119710200D03* +X88925400Y-119710200D03* +X90195400Y-121742200D03* +X89560400Y-119710200D03* +X88925400Y-121742200D03* +X89560400Y-121742200D03* +X108140500Y-98488500D03* +X109410500Y-98488500D03* +X108140500Y-96456500D03* +X108775500Y-98488500D03* +X109410500Y-96456500D03* +X108775500Y-96456500D03* +D39* +X112448800Y-114696240D03* +X112448800Y-110296960D03* +D40* +X89535000Y-97259140D03* +X89535000Y-100860860D03* +D24* +X90604800Y-106807000D03* +D25* +X88064800Y-106807000D03* +D24* +X90604800Y-104267000D03* +D25* +X88064800Y-104267000D03* +M02* diff --git a/PCB/OUTPUT_V4/Gerber/Tinylab_proto1-F.SilkS.gbr b/PCB/OUTPUT_V4/Gerber/Tinylab_proto1-F.SilkS.gbr new file mode 100644 index 00000000..307bf880 --- /dev/null +++ b/PCB/OUTPUT_V4/Gerber/Tinylab_proto1-F.SilkS.gbr @@ -0,0 +1,2602 @@ +G04 #@! TF.FileFunction,Legend,Top* +%FSLAX46Y46*% +G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* +G04 Created by KiCad (PCBNEW 4.0.1-stable) date 24/03/2016 3:42:33 PM* +%MOMM*% +G01* +G04 APERTURE LIST* +%ADD10C,0.100000*% +%ADD11C,0.150000*% +G04 APERTURE END LIST* +D10* +D11* +X106395000Y-123155000D02* +X105695000Y-123155000D01* +X105695000Y-121955000D02* +X106395000Y-121955000D01* +X106395000Y-119345000D02* +X105695000Y-119345000D01* +X105695000Y-118145000D02* +X106395000Y-118145000D01* +X114287200Y-107233200D02* +X114287200Y-106533200D01* +X115487200Y-106533200D02* +X115487200Y-107233200D01* +X114613400Y-108429500D02* +X115313400Y-108429500D01* +X115313400Y-109629500D02* +X114613400Y-109629500D01* +X103921000Y-113951500D02* +X103921000Y-113251500D01* +X105121000Y-113251500D02* +X105121000Y-113951500D01* +X94838000Y-115916000D02* +X94138000Y-115916000D01* +X94138000Y-114716000D02* +X94838000Y-114716000D01* +X102204000Y-112360000D02* +X101504000Y-112360000D01* +X101504000Y-111160000D02* +X102204000Y-111160000D01* +X86960000Y-99345000D02* +X86960000Y-100045000D01* +X85760000Y-100045000D02* +X85760000Y-99345000D01* +X94459500Y-107157000D02* +X94459500Y-106457000D01* +X95659500Y-106457000D02* +X95659500Y-107157000D01* +X81823000Y-117698000D02* +X81823000Y-116998000D01* +X83023000Y-116998000D02* +X83023000Y-117698000D01* +X81950000Y-124556000D02* +X81950000Y-123856000D01* +X83150000Y-123856000D02* +X83150000Y-124556000D01* +X88845000Y-114909000D02* +X88845000Y-108611000D01* +X88705000Y-114903000D02* +X88705000Y-108617000D01* +X88565000Y-114890000D02* +X88565000Y-112206000D01* +X88565000Y-111314000D02* +X88565000Y-108630000D01* +X88425000Y-114871000D02* +X88425000Y-112416000D01* +X88425000Y-111104000D02* +X88425000Y-108649000D01* +X88285000Y-114845000D02* +X88285000Y-112549000D01* +X88285000Y-110971000D02* +X88285000Y-108675000D01* +X88145000Y-114813000D02* +X88145000Y-112640000D01* +X88145000Y-110880000D02* +X88145000Y-108707000D01* +X88005000Y-114774000D02* +X88005000Y-112702000D01* +X88005000Y-110818000D02* +X88005000Y-108746000D01* +X87865000Y-114728000D02* +X87865000Y-112741000D01* +X87865000Y-110779000D02* +X87865000Y-108792000D01* +X87725000Y-114675000D02* +X87725000Y-112758000D01* +X87725000Y-110762000D02* +X87725000Y-108845000D01* +X87585000Y-114613000D02* +X87585000Y-112756000D01* +X87585000Y-110764000D02* +X87585000Y-108907000D01* +X87445000Y-114543000D02* +X87445000Y-112734000D01* +X87445000Y-110786000D02* +X87445000Y-108977000D01* +X87305000Y-114464000D02* +X87305000Y-112691000D01* +X87305000Y-110829000D02* +X87305000Y-109056000D01* +X87165000Y-114376000D02* +X87165000Y-112623000D01* +X87165000Y-110897000D02* +X87165000Y-109144000D01* +X87025000Y-114276000D02* +X87025000Y-112524000D01* +X87025000Y-110996000D02* +X87025000Y-109244000D01* +X86885000Y-114164000D02* +X86885000Y-112379000D01* +X86885000Y-111141000D02* +X86885000Y-109356000D01* +X86745000Y-114039000D02* +X86745000Y-112140000D01* +X86745000Y-111380000D02* +X86745000Y-109481000D01* +X86605000Y-113896000D02* +X86605000Y-109624000D01* +X86465000Y-113734000D02* +X86465000Y-109786000D01* +X86325000Y-113546000D02* +X86325000Y-109974000D01* +X86185000Y-113323000D02* +X86185000Y-110197000D01* +X86045000Y-113047000D02* +X86045000Y-110473000D01* +X85905000Y-112672000D02* +X85905000Y-110848000D01* +X88670000Y-111760000D02* +G75* +G03X88670000Y-111760000I-1000000J0D01* +G01* +X92107500Y-111760000D02* +G75* +G03X92107500Y-111760000I-3187500J0D01* +G01* +X93056000Y-114204000D02* +X93056000Y-114904000D01* +X91856000Y-114904000D02* +X91856000Y-114204000D01* +X93342460Y-99060000D02* +X93342460Y-98044000D01* +X93342460Y-103886000D02* +X93342460Y-105156000D01* +X92072460Y-103632000D02* +X94612460Y-103632000D01* +X92072460Y-103378000D02* +X94612460Y-103378000D01* +X92072460Y-103124000D02* +X94612460Y-103124000D01* +X92072460Y-103886000D02* +X94612460Y-103886000D01* +X92072460Y-102870000D02* +X94612460Y-104140000D01* +X92072460Y-104140000D02* +X94612460Y-102870000D01* +X92072460Y-102870000D02* +X94612460Y-102870000D01* +X92072460Y-103505000D02* +X94612460Y-103505000D01* +X94612460Y-104140000D02* +X92072460Y-104140000D01* +X92072460Y-104140000D02* +X92072460Y-99060000D01* +X92072460Y-99060000D02* +X94612460Y-99060000D01* +X94612460Y-99060000D02* +X94612460Y-104140000D01* +X92320000Y-100600000D02* +X92320000Y-102600000D01* +X94370000Y-102600000D02* +X94370000Y-100600000D01* +X108045000Y-109315000D02* +X108045000Y-108645000D01* +X97695000Y-109315000D02* +X97695000Y-108645000D01* +X97695000Y-98965000D02* +X97695000Y-99635000D01* +X108045000Y-98965000D02* +X108045000Y-99635000D01* +X108045000Y-109315000D02* +X107375000Y-109315000D01* +X108045000Y-98965000D02* +X107375000Y-98965000D01* +X97695000Y-98965000D02* +X98365000Y-98965000D01* +X97695000Y-109315000D02* +X98365000Y-109315000D01* +X108045000Y-108645000D02* +X109520000Y-108645000D01* +X84254800Y-100457000D02* +G75* +G03X84254800Y-100457000I-3810000J0D01* +G01* +X99171000Y-114124000D02* +X97171000Y-114124000D01* +X97171000Y-111174000D02* +X99171000Y-111174000D01* +X95455000Y-109871000D02* +X95455000Y-111871000D01* +X92505000Y-111871000D02* +X92505000Y-109871000D01* +X104648000Y-125730000D02* +X102108000Y-125730000D01* +X107468000Y-126010000D02* +X105918000Y-126010000D01* +X104648000Y-125730000D02* +X104648000Y-123190000D01* +X105918000Y-122910000D02* +X107468000Y-122910000D01* +X107468000Y-122910000D02* +X107468000Y-126010000D01* +X104648000Y-123190000D02* +X102108000Y-123190000D01* +X102108000Y-123190000D02* +X102108000Y-125730000D01* +X116720460Y-104960300D02* +X116720460Y-96260300D01* +X110315460Y-104960300D02* +X110315460Y-96260300D01* +X110315460Y-96260300D02* +X116720460Y-96260300D01* +X115490460Y-96260300D02* +X115490460Y-104960300D01* +X116720460Y-104960300D02* +X110315460Y-104960300D01* +X81714800Y-113157000D02* +X81714800Y-105537000D01* +X79174800Y-113157000D02* +X79174800Y-105537000D01* +X78894800Y-115977000D02* +X78894800Y-114427000D01* +X81714800Y-105537000D02* +X79174800Y-105537000D01* +X79174800Y-113157000D02* +X81714800Y-113157000D01* +X81994800Y-114427000D02* +X81994800Y-115977000D01* +X81994800Y-115977000D02* +X78894800Y-115977000D01* +X115345000Y-124307600D02* +X115345000Y-125857600D01* +X113795000Y-125857600D02* +X115345000Y-125857600D01* +X115065000Y-123037600D02* +X112525000Y-123037600D01* +X112525000Y-123037600D02* +X112525000Y-125577600D01* +X112525000Y-125577600D02* +X109985000Y-125577600D01* +X109985000Y-125577600D02* +X109985000Y-120497600D01* +X109985000Y-120497600D02* +X115065000Y-120497600D01* +X115065000Y-120497600D02* +X115065000Y-123037600D01* +X104648000Y-118110000D02* +X102108000Y-118110000D01* +X107468000Y-118390000D02* +X105918000Y-118390000D01* +X104648000Y-118110000D02* +X104648000Y-115570000D01* +X105918000Y-115290000D02* +X107468000Y-115290000D01* +X107468000Y-115290000D02* +X107468000Y-118390000D01* +X104648000Y-115570000D02* +X102108000Y-115570000D01* +X102108000Y-115570000D02* +X102108000Y-118110000D01* +X79174800Y-118237000D02* +X79174800Y-125857000D01* +X81714800Y-118237000D02* +X81714800Y-125857000D01* +X81994800Y-115417000D02* +X81994800Y-116967000D01* +X79174800Y-125857000D02* +X81714800Y-125857000D01* +X81714800Y-118237000D02* +X79174800Y-118237000D01* +X78894800Y-116967000D02* +X78894800Y-115417000D01* +X78894800Y-115417000D02* +X81994800Y-115417000D01* +X112436100Y-119494300D02* +X109896100Y-119494300D01* +X115256100Y-119774300D02* +X113706100Y-119774300D01* +X112436100Y-119494300D02* +X112436100Y-116954300D01* +X113706100Y-116674300D02* +X115256100Y-116674300D01* +X115256100Y-116674300D02* +X115256100Y-119774300D01* +X112436100Y-116954300D02* +X109896100Y-116954300D01* +X109896100Y-116954300D02* +X109896100Y-119494300D01* +X104648000Y-120650000D02* +X104648000Y-123190000D01* +X104928000Y-117830000D02* +X104928000Y-119380000D01* +X104648000Y-120650000D02* +X102108000Y-120650000D01* +X101828000Y-119380000D02* +X101828000Y-117830000D01* +X101828000Y-117830000D02* +X104928000Y-117830000D01* +X102108000Y-120650000D02* +X102108000Y-123190000D01* +X102108000Y-123190000D02* +X104648000Y-123190000D01* +X95280421Y-97936000D02* +G75* +G03X95280421Y-97936000I-141421J0D01* +G01* +X97639000Y-98336000D02* +X97639000Y-96736000D01* +X97639000Y-96736000D02* +X94639000Y-96736000D01* +X94639000Y-96736000D02* +X94639000Y-98336000D01* +X94639000Y-98336000D02* +X97639000Y-98336000D01* +X99735000Y-121420000D02* +X99735000Y-122420000D01* +X98385000Y-122420000D02* +X98385000Y-121420000D01* +X98385000Y-119816500D02* +X98385000Y-118816500D01* +X99735000Y-118816500D02* +X99735000Y-119816500D01* +X101322500Y-121420000D02* +X101322500Y-122420000D01* +X99972500Y-122420000D02* +X99972500Y-121420000D01* +X101322500Y-118816500D02* +X101322500Y-119816500D01* +X99972500Y-119816500D02* +X99972500Y-118816500D01* +X106926000Y-114975000D02* +X105926000Y-114975000D01* +X105926000Y-113625000D02* +X106926000Y-113625000D01* +X106926000Y-113578000D02* +X105926000Y-113578000D01* +X105926000Y-112228000D02* +X106926000Y-112228000D01* +X81875000Y-107180000D02* +X81875000Y-106180000D01* +X83225000Y-106180000D02* +X83225000Y-107180000D01* +X81875000Y-109720000D02* +X81875000Y-108720000D01* +X83225000Y-108720000D02* +X83225000Y-109720000D01* +X81875000Y-112260000D02* +X81875000Y-111260000D01* +X83225000Y-111260000D02* +X83225000Y-112260000D01* +X81875000Y-114800000D02* +X81875000Y-113800000D01* +X83225000Y-113800000D02* +X83225000Y-114800000D01* +X85003000Y-106180000D02* +X85003000Y-107180000D01* +X83653000Y-107180000D02* +X83653000Y-106180000D01* +X85003000Y-108720000D02* +X85003000Y-109720000D01* +X83653000Y-109720000D02* +X83653000Y-108720000D01* +X85003000Y-111260000D02* +X85003000Y-112260000D01* +X83653000Y-112260000D02* +X83653000Y-111260000D01* +X85003000Y-113800000D02* +X85003000Y-114800000D01* +X83653000Y-114800000D02* +X83653000Y-113800000D01* +X88720300Y-124820300D02* +X88720300Y-123820300D01* +X90070300Y-123820300D02* +X90070300Y-124820300D01* +X87196300Y-124820300D02* +X87196300Y-123820300D01* +X88546300Y-123820300D02* +X88546300Y-124820300D01* +X89956000Y-116721000D02* +X89956000Y-117721000D01* +X88606000Y-117721000D02* +X88606000Y-116721000D01* +X88305000Y-116721000D02* +X88305000Y-117721000D01* +X86955000Y-117721000D02* +X86955000Y-116721000D01* +X87622000Y-120309000D02* +X86622000Y-120309000D01* +X86622000Y-118959000D02* +X87622000Y-118959000D01* +X87622000Y-122595000D02* +X86622000Y-122595000D01* +X86622000Y-121245000D02* +X87622000Y-121245000D01* +X100068000Y-124754000D02* +X99068000Y-124754000D01* +X99068000Y-123404000D02* +X100068000Y-123404000D01* +X85130000Y-116721000D02* +X85130000Y-117721000D01* +X83780000Y-117721000D02* +X83780000Y-116721000D01* +X84034000Y-124833000D02* +X84034000Y-123833000D01* +X85384000Y-123833000D02* +X85384000Y-124833000D01* +X84574000Y-120309000D02* +X83574000Y-120309000D01* +X83574000Y-118959000D02* +X84574000Y-118959000D01* +X84574000Y-122595000D02* +X83574000Y-122595000D01* +X83574000Y-121245000D02* +X84574000Y-121245000D01* +X84082000Y-102271200D02* +X85082000Y-102271200D01* +X85082000Y-103621200D02* +X84082000Y-103621200D01* +X85082000Y-105221400D02* +X84082000Y-105221400D01* +X84082000Y-103871400D02* +X85082000Y-103871400D01* +X99068000Y-116165000D02* +X100068000Y-116165000D01* +X100068000Y-117515000D02* +X99068000Y-117515000D01* +X85304000Y-117721000D02* +X85304000Y-116721000D01* +X86654000Y-116721000D02* +X86654000Y-117721000D01* +X85558000Y-124833000D02* +X85558000Y-123833000D01* +X86908000Y-123833000D02* +X86908000Y-124833000D01* +X111806221Y-105807000D02* +G75* +G03X111806221Y-105807000I-141421J0D01* +G01* +X111264800Y-108307000D02* +X112864800Y-108307000D01* +X112864800Y-108307000D02* +X112864800Y-105307000D01* +X112864800Y-105307000D02* +X111264800Y-105307000D01* +X111264800Y-105307000D02* +X111264800Y-108307000D01* +X96588400Y-125125400D02* +X96588400Y-125010400D01* +X92438400Y-125125400D02* +X92438400Y-125010400D01* +X92438400Y-116225400D02* +X92438400Y-116340400D01* +X96588400Y-116225400D02* +X96588400Y-116340400D01* +X96588400Y-125125400D02* +X92438400Y-125125400D01* +X96588400Y-116225400D02* +X92438400Y-116225400D01* +X96588400Y-125010400D02* +X97963400Y-125010400D01* +X88544400Y-121361200D02* +X90576400Y-121361200D01* +X90576400Y-121361200D02* +X90576400Y-120091200D01* +X90576400Y-120091200D02* +X88544400Y-120091200D01* +X88544400Y-120091200D02* +X88544400Y-121361200D01* +X109791500Y-96837500D02* +X107759500Y-96837500D01* +X107759500Y-96837500D02* +X107759500Y-98107500D01* +X107759500Y-98107500D02* +X109791500Y-98107500D01* +X109791500Y-98107500D02* +X109791500Y-96837500D01* +X113083800Y-110210600D02* +X111686800Y-110210600D01* +X113337800Y-110337600D02* +X111559800Y-110337600D01* +X113718800Y-110464600D02* +X111178800Y-110464600D01* +X111051800Y-110591600D02* +X113845800Y-110591600D01* +X113972800Y-110718600D02* +X110924800Y-110718600D01* +X110797800Y-110845600D02* +X114099800Y-110845600D01* +X114226800Y-110972600D02* +X110670800Y-110972600D01* +X115115800Y-109829600D02* +X115115800Y-114401600D01* +X115115800Y-114401600D02* +X114353800Y-115163600D01* +X114353800Y-115163600D02* +X110543800Y-115163600D01* +X110543800Y-115163600D02* +X109781800Y-114401600D01* +X109781800Y-114401600D02* +X109781800Y-109829600D01* +X109781800Y-109829600D02* +X115115800Y-109829600D01* +X112448800Y-114655600D02* +X112448800Y-113893600D01* +X112829800Y-114274600D02* +X112067800Y-114274600D01* +X114861800Y-112496600D02* +G75* +G03X114861800Y-112496600I-2413000J0D01* +G01* +X89535000Y-97409000D02* +X89535000Y-98171000D01* +X89154000Y-97790000D02* +X89916000Y-97790000D01* +X91821000Y-97536000D02* +X91821000Y-101346000D01* +X88011000Y-96774000D02* +X91059000Y-96774000D01* +X91821000Y-97536000D02* +X91059000Y-96774000D01* +X87249000Y-97536000D02* +X87249000Y-101346000D01* +X87249000Y-97536000D02* +X88011000Y-96774000D01* +X89662000Y-101092000D02* +X89408000Y-101092000D01* +X88900000Y-100965000D02* +X90170000Y-100965000D01* +X90424000Y-100838000D02* +X88646000Y-100838000D01* +X90678000Y-100711000D02* +X88392000Y-100711000D01* +X88265000Y-100584000D02* +X90805000Y-100584000D01* +X90932000Y-100457000D02* +X88138000Y-100457000D01* +X88011000Y-100330000D02* +X91059000Y-100330000D01* +X87884000Y-100203000D02* +X91186000Y-100203000D01* +X87249000Y-101346000D02* +X91821000Y-101346000D01* +X91567000Y-99060000D02* +G75* +G03X91567000Y-99060000I-2032000J0D01* +G01* +X89334800Y-108077000D02* +X86794800Y-108077000D01* +X92154800Y-108357000D02* +X90604800Y-108357000D01* +X89334800Y-108077000D02* +X89334800Y-105537000D01* +X90604800Y-105257000D02* +X92154800Y-105257000D01* +X92154800Y-105257000D02* +X92154800Y-108357000D01* +X89334800Y-105537000D02* +X86794800Y-105537000D01* +X86794800Y-105537000D02* +X86794800Y-108077000D01* +X89334800Y-105537000D02* +X86794800Y-105537000D01* +X92154800Y-105817000D02* +X90604800Y-105817000D01* +X89334800Y-105537000D02* +X89334800Y-102997000D01* +X90604800Y-102717000D02* +X92154800Y-102717000D01* +X92154800Y-102717000D02* +X92154800Y-105817000D01* +X89334800Y-102997000D02* +X86794800Y-102997000D01* +X86794800Y-102997000D02* +X86794800Y-105537000D01* +X105962927Y-122718794D02* +X105924832Y-122756890D01* +X105810546Y-122794985D01* +X105734356Y-122794985D01* +X105620070Y-122756890D01* +X105543879Y-122680699D01* +X105505784Y-122604509D01* +X105467689Y-122452128D01* +X105467689Y-122337842D01* +X105505784Y-122185461D01* +X105543879Y-122109270D01* +X105620070Y-122033080D01* +X105734356Y-121994985D01* +X105810546Y-121994985D01* +X105924832Y-122033080D01* +X105962927Y-122071175D01* +X106724832Y-122794985D02* +X106267689Y-122794985D01* +X106496260Y-122794985D02* +X106496260Y-121994985D01* +X106420070Y-122109270D01* +X106343879Y-122185461D01* +X106267689Y-122223556D01* +X105945147Y-119195814D02* +X105907052Y-119233910D01* +X105792766Y-119272005D01* +X105716576Y-119272005D01* +X105602290Y-119233910D01* +X105526099Y-119157719D01* +X105488004Y-119081529D01* +X105449909Y-118929148D01* +X105449909Y-118814862D01* +X105488004Y-118662481D01* +X105526099Y-118586290D01* +X105602290Y-118510100D01* +X105716576Y-118472005D01* +X105792766Y-118472005D01* +X105907052Y-118510100D01* +X105945147Y-118548195D01* +X106249909Y-118548195D02* +X106288004Y-118510100D01* +X106364195Y-118472005D01* +X106554671Y-118472005D01* +X106630861Y-118510100D01* +X106668957Y-118548195D01* +X106707052Y-118624386D01* +X106707052Y-118700576D01* +X106668957Y-118814862D01* +X106211814Y-119272005D01* +X106707052Y-119272005D01* +X115221174Y-107067333D02* +X115259270Y-107105428D01* +X115297365Y-107219714D01* +X115297365Y-107295904D01* +X115259270Y-107410190D01* +X115183079Y-107486381D01* +X115106889Y-107524476D01* +X114954508Y-107562571D01* +X114840222Y-107562571D01* +X114687841Y-107524476D01* +X114611650Y-107486381D01* +X114535460Y-107410190D01* +X114497365Y-107295904D01* +X114497365Y-107219714D01* +X114535460Y-107105428D01* +X114573555Y-107067333D01* +X114497365Y-106800666D02* +X114497365Y-106305428D01* +X114802127Y-106572095D01* +X114802127Y-106457809D01* +X114840222Y-106381619D01* +X114878317Y-106343523D01* +X114954508Y-106305428D01* +X115144984Y-106305428D01* +X115221174Y-106343523D01* +X115259270Y-106381619D01* +X115297365Y-106457809D01* +X115297365Y-106686381D01* +X115259270Y-106762571D01* +X115221174Y-106800666D01* +X114819907Y-109358394D02* +X114781812Y-109396490D01* +X114667526Y-109434585D01* +X114591336Y-109434585D01* +X114477050Y-109396490D01* +X114400859Y-109320299D01* +X114362764Y-109244109D01* +X114324669Y-109091728D01* +X114324669Y-108977442D01* +X114362764Y-108825061D01* +X114400859Y-108748870D01* +X114477050Y-108672680D01* +X114591336Y-108634585D01* +X114667526Y-108634585D01* +X114781812Y-108672680D01* +X114819907Y-108710775D01* +X115505621Y-108901251D02* +X115505621Y-109434585D01* +X115315145Y-108596490D02* +X115124669Y-109167918D01* +X115619907Y-109167918D01* +X104893534Y-113717053D02* +X104931630Y-113755148D01* +X104969725Y-113869434D01* +X104969725Y-113945624D01* +X104931630Y-114059910D01* +X104855439Y-114136101D01* +X104779249Y-114174196D01* +X104626868Y-114212291D01* +X104512582Y-114212291D01* +X104360201Y-114174196D01* +X104284010Y-114136101D01* +X104207820Y-114059910D01* +X104169725Y-113945624D01* +X104169725Y-113869434D01* +X104207820Y-113755148D01* +X104245915Y-113717053D01* +X104169725Y-112993243D02* +X104169725Y-113374196D01* +X104550677Y-113412291D01* +X104512582Y-113374196D01* +X104474487Y-113298005D01* +X104474487Y-113107529D01* +X104512582Y-113031339D01* +X104550677Y-112993243D01* +X104626868Y-112955148D01* +X104817344Y-112955148D01* +X104893534Y-112993243D01* +X104931630Y-113031339D01* +X104969725Y-113107529D01* +X104969725Y-113298005D01* +X104931630Y-113374196D01* +X104893534Y-113412291D01* +X94324647Y-115690614D02* +X94286552Y-115728710D01* +X94172266Y-115766805D01* +X94096076Y-115766805D01* +X93981790Y-115728710D01* +X93905599Y-115652519D01* +X93867504Y-115576329D01* +X93829409Y-115423948D01* +X93829409Y-115309662D01* +X93867504Y-115157281D01* +X93905599Y-115081090D01* +X93981790Y-115004900D01* +X94096076Y-114966805D01* +X94172266Y-114966805D01* +X94286552Y-115004900D01* +X94324647Y-115042995D01* +X94591314Y-114966805D02* +X95124647Y-114966805D01* +X94781790Y-115766805D01* +X101708427Y-112099054D02* +X101670332Y-112137150D01* +X101556046Y-112175245D01* +X101479856Y-112175245D01* +X101365570Y-112137150D01* +X101289379Y-112060959D01* +X101251284Y-111984769D01* +X101213189Y-111832388D01* +X101213189Y-111718102D01* +X101251284Y-111565721D01* +X101289379Y-111489530D01* +X101365570Y-111413340D01* +X101479856Y-111375245D01* +X101556046Y-111375245D01* +X101670332Y-111413340D01* +X101708427Y-111451435D01* +X102165570Y-111718102D02* +X102089379Y-111680007D01* +X102051284Y-111641911D01* +X102013189Y-111565721D01* +X102013189Y-111527626D01* +X102051284Y-111451435D01* +X102089379Y-111413340D01* +X102165570Y-111375245D01* +X102317951Y-111375245D01* +X102394141Y-111413340D01* +X102432237Y-111451435D01* +X102470332Y-111527626D01* +X102470332Y-111565721D01* +X102432237Y-111641911D01* +X102394141Y-111680007D01* +X102317951Y-111718102D01* +X102165570Y-111718102D01* +X102089379Y-111756197D01* +X102051284Y-111794292D01* +X102013189Y-111870483D01* +X102013189Y-112022864D01* +X102051284Y-112099054D01* +X102089379Y-112137150D01* +X102165570Y-112175245D01* +X102317951Y-112175245D01* +X102394141Y-112137150D01* +X102432237Y-112099054D01* +X102470332Y-112022864D01* +X102470332Y-111870483D01* +X102432237Y-111794292D01* +X102394141Y-111756197D01* +X102317951Y-111718102D01* +X86648714Y-100323586D02* +X86686810Y-100361681D01* +X86724905Y-100475967D01* +X86724905Y-100552157D01* +X86686810Y-100666443D01* +X86610619Y-100742634D01* +X86534429Y-100780729D01* +X86382048Y-100818824D01* +X86267762Y-100818824D01* +X86115381Y-100780729D01* +X86039190Y-100742634D01* +X85963000Y-100666443D01* +X85924905Y-100552157D01* +X85924905Y-100475967D01* +X85963000Y-100361681D01* +X86001095Y-100323586D01* +X86724905Y-99561681D02* +X86724905Y-100018824D01* +X86724905Y-99790253D02* +X85924905Y-99790253D01* +X86039190Y-99866443D01* +X86115381Y-99942634D01* +X86153476Y-100018824D01* +X85924905Y-99066443D02* +X85924905Y-98990252D01* +X85963000Y-98914062D01* +X86001095Y-98875967D01* +X86077286Y-98837871D01* +X86229667Y-98799776D01* +X86420143Y-98799776D01* +X86572524Y-98837871D01* +X86648714Y-98875967D01* +X86686810Y-98914062D01* +X86724905Y-98990252D01* +X86724905Y-99066443D01* +X86686810Y-99142633D01* +X86648714Y-99180729D01* +X86572524Y-99218824D01* +X86420143Y-99256919D01* +X86229667Y-99256919D01* +X86077286Y-99218824D01* +X86001095Y-99180729D01* +X85963000Y-99142633D01* +X85924905Y-99066443D01* +X95330434Y-107209526D02* +X95368530Y-107247621D01* +X95406625Y-107361907D01* +X95406625Y-107438097D01* +X95368530Y-107552383D01* +X95292339Y-107628574D01* +X95216149Y-107666669D01* +X95063768Y-107704764D01* +X94949482Y-107704764D01* +X94797101Y-107666669D01* +X94720910Y-107628574D01* +X94644720Y-107552383D01* +X94606625Y-107438097D01* +X94606625Y-107361907D01* +X94644720Y-107247621D01* +X94682815Y-107209526D01* +X95406625Y-106447621D02* +X95406625Y-106904764D01* +X95406625Y-106676193D02* +X94606625Y-106676193D01* +X94720910Y-106752383D01* +X94797101Y-106828574D01* +X94835196Y-106904764D01* +X95406625Y-105685716D02* +X95406625Y-106142859D01* +X95406625Y-105914288D02* +X94606625Y-105914288D01* +X94720910Y-105990478D01* +X94797101Y-106066669D01* +X94835196Y-106142859D01* +X82762514Y-117915626D02* +X82800610Y-117953721D01* +X82838705Y-118068007D01* +X82838705Y-118144197D01* +X82800610Y-118258483D01* +X82724419Y-118334674D01* +X82648229Y-118372769D01* +X82495848Y-118410864D01* +X82381562Y-118410864D01* +X82229181Y-118372769D01* +X82152990Y-118334674D01* +X82076800Y-118258483D01* +X82038705Y-118144197D01* +X82038705Y-118068007D01* +X82076800Y-117953721D01* +X82114895Y-117915626D01* +X82838705Y-117153721D02* +X82838705Y-117610864D01* +X82838705Y-117382293D02* +X82038705Y-117382293D01* +X82152990Y-117458483D01* +X82229181Y-117534674D01* +X82267276Y-117610864D01* +X82038705Y-116887054D02* +X82038705Y-116391816D01* +X82343467Y-116658483D01* +X82343467Y-116544197D01* +X82381562Y-116468007D01* +X82419657Y-116429911D01* +X82495848Y-116391816D01* +X82686324Y-116391816D01* +X82762514Y-116429911D01* +X82800610Y-116468007D01* +X82838705Y-116544197D01* +X82838705Y-116772769D01* +X82800610Y-116848959D01* +X82762514Y-116887054D01* +X82856494Y-124697426D02* +X82894590Y-124735521D01* +X82932685Y-124849807D01* +X82932685Y-124925997D01* +X82894590Y-125040283D01* +X82818399Y-125116474D01* +X82742209Y-125154569D01* +X82589828Y-125192664D01* +X82475542Y-125192664D01* +X82323161Y-125154569D01* +X82246970Y-125116474D01* +X82170780Y-125040283D01* +X82132685Y-124925997D01* +X82132685Y-124849807D01* +X82170780Y-124735521D01* +X82208875Y-124697426D01* +X82932685Y-123935521D02* +X82932685Y-124392664D01* +X82932685Y-124164093D02* +X82132685Y-124164093D01* +X82246970Y-124240283D01* +X82323161Y-124316474D01* +X82361256Y-124392664D01* +X82399351Y-123249807D02* +X82932685Y-123249807D01* +X82094590Y-123440283D02* +X82666018Y-123630759D01* +X82666018Y-123135521D01* +X89882234Y-112520694D02* +X89844139Y-112558790D01* +X89729853Y-112596885D01* +X89653663Y-112596885D01* +X89539377Y-112558790D01* +X89463186Y-112482599D01* +X89425091Y-112406409D01* +X89386996Y-112254028D01* +X89386996Y-112139742D01* +X89425091Y-111987361D01* +X89463186Y-111911170D01* +X89539377Y-111834980D01* +X89653663Y-111796885D01* +X89729853Y-111796885D01* +X89844139Y-111834980D01* +X89882234Y-111873075D01* +X90644139Y-112596885D02* +X90186996Y-112596885D01* +X90415567Y-112596885D02* +X90415567Y-111796885D01* +X90339377Y-111911170D01* +X90263186Y-111987361D01* +X90186996Y-112025456D01* +X91367949Y-111796885D02* +X90986996Y-111796885D01* +X90948901Y-112177837D01* +X90986996Y-112139742D01* +X91063187Y-112101647D01* +X91253663Y-112101647D01* +X91329853Y-112139742D01* +X91367949Y-112177837D01* +X91406044Y-112254028D01* +X91406044Y-112444504D01* +X91367949Y-112520694D01* +X91329853Y-112558790D01* +X91253663Y-112596885D01* +X91063187Y-112596885D01* +X90986996Y-112558790D01* +X90948901Y-112520694D01* +X92732014Y-115149566D02* +X92770110Y-115187661D01* +X92808205Y-115301947D01* +X92808205Y-115378137D01* +X92770110Y-115492423D01* +X92693919Y-115568614D01* +X92617729Y-115606709D01* +X92465348Y-115644804D01* +X92351062Y-115644804D01* +X92198681Y-115606709D01* +X92122490Y-115568614D01* +X92046300Y-115492423D01* +X92008205Y-115378137D01* +X92008205Y-115301947D01* +X92046300Y-115187661D01* +X92084395Y-115149566D01* +X92808205Y-114387661D02* +X92808205Y-114844804D01* +X92808205Y-114616233D02* +X92008205Y-114616233D01* +X92122490Y-114692423D01* +X92198681Y-114768614D01* +X92236776Y-114844804D01* +X92008205Y-113701947D02* +X92008205Y-113854328D01* +X92046300Y-113930518D01* +X92084395Y-113968613D01* +X92198681Y-114044804D01* +X92351062Y-114082899D01* +X92655824Y-114082899D01* +X92732014Y-114044804D01* +X92770110Y-114006709D01* +X92808205Y-113930518D01* +X92808205Y-113778137D01* +X92770110Y-113701947D01* +X92732014Y-113663851D01* +X92655824Y-113625756D01* +X92465348Y-113625756D01* +X92389157Y-113663851D01* +X92351062Y-113701947D01* +X92312967Y-113778137D01* +X92312967Y-113930518D01* +X92351062Y-114006709D01* +X92389157Y-114044804D01* +X92465348Y-114082899D01* +X93694665Y-106216376D02* +X92894665Y-106216376D01* +X92894665Y-106025900D01* +X92932760Y-105911614D01* +X93008950Y-105835423D01* +X93085141Y-105797328D01* +X93237522Y-105759233D01* +X93351808Y-105759233D01* +X93504189Y-105797328D01* +X93580379Y-105835423D01* +X93656570Y-105911614D01* +X93694665Y-106025900D01* +X93694665Y-106216376D01* +X93694665Y-104997328D02* +X93694665Y-105454471D01* +X93694665Y-105225900D02* +X92894665Y-105225900D01* +X93008950Y-105302090D01* +X93085141Y-105378281D01* +X93123236Y-105454471D01* +X93379757Y-101826026D02* +X93379757Y-102092693D01* +X93798805Y-102092693D02* +X92998805Y-102092693D01* +X92998805Y-101711740D01* +X93798805Y-100987931D02* +X93798805Y-101445074D01* +X93798805Y-101216503D02* +X92998805Y-101216503D01* +X93113090Y-101292693D01* +X93189281Y-101368884D01* +X93227376Y-101445074D01* +X102234288Y-104438405D02* +X102234288Y-103638405D01* +X103072383Y-104362214D02* +X103034288Y-104400310D01* +X102920002Y-104438405D01* +X102843812Y-104438405D01* +X102729526Y-104400310D01* +X102653335Y-104324119D01* +X102615240Y-104247929D01* +X102577145Y-104095548D01* +X102577145Y-103981262D01* +X102615240Y-103828881D01* +X102653335Y-103752690D01* +X102729526Y-103676500D01* +X102843812Y-103638405D01* +X102920002Y-103638405D01* +X103034288Y-103676500D01* +X103072383Y-103714595D01* +X103834288Y-104438405D02* +X103377145Y-104438405D01* +X103605716Y-104438405D02* +X103605716Y-103638405D01* +X103529526Y-103752690D01* +X103453335Y-103828881D01* +X103377145Y-103866976D01* +X80760985Y-100422693D02* +X80760985Y-100803646D01* +X79960985Y-100803646D01* +X80760985Y-99736979D02* +X80760985Y-100194122D01* +X80760985Y-99965551D02* +X79960985Y-99965551D01* +X80075270Y-100041741D01* +X80151461Y-100117932D01* +X80189556Y-100194122D01* +X98553685Y-112787413D02* +X98553685Y-113168366D01* +X97753685Y-113168366D01* +X97829875Y-112558842D02* +X97791780Y-112520747D01* +X97753685Y-112444556D01* +X97753685Y-112254080D01* +X97791780Y-112177890D01* +X97829875Y-112139794D01* +X97906066Y-112101699D01* +X97982256Y-112101699D01* +X98096542Y-112139794D01* +X98553685Y-112596937D01* +X98553685Y-112101699D01* +X94322045Y-110978933D02* +X94322045Y-111359886D01* +X93522045Y-111359886D01* +X93522045Y-110788457D02* +X93522045Y-110293219D01* +X93826807Y-110559886D01* +X93826807Y-110445600D01* +X93864902Y-110369410D01* +X93902997Y-110331314D01* +X93979188Y-110293219D01* +X94169664Y-110293219D01* +X94245854Y-110331314D01* +X94283950Y-110369410D01* +X94322045Y-110445600D01* +X94322045Y-110674172D01* +X94283950Y-110750362D01* +X94245854Y-110788457D01* +X106298145Y-125047936D02* +X105498145Y-125047936D01* +X105498145Y-124743174D01* +X105536240Y-124666983D01* +X105574335Y-124628888D01* +X105650526Y-124590793D01* +X105764811Y-124590793D01* +X105841002Y-124628888D01* +X105879097Y-124666983D01* +X105917192Y-124743174D01* +X105917192Y-125047936D01* +X106298145Y-123828888D02* +X106298145Y-124286031D01* +X106298145Y-124057460D02* +X105498145Y-124057460D01* +X105612430Y-124133650D01* +X105688621Y-124209841D01* +X105726716Y-124286031D01* +X113641285Y-101133836D02* +X112841285Y-101133836D01* +X112841285Y-100829074D01* +X112879380Y-100752883D01* +X112917475Y-100714788D01* +X112993666Y-100676693D01* +X113107951Y-100676693D01* +X113184142Y-100714788D01* +X113222237Y-100752883D01* +X113260332Y-100829074D01* +X113260332Y-101133836D01* +X112917475Y-100371931D02* +X112879380Y-100333836D01* +X112841285Y-100257645D01* +X112841285Y-100067169D01* +X112879380Y-99990979D01* +X112917475Y-99952883D01* +X112993666Y-99914788D01* +X113069856Y-99914788D01* +X113184142Y-99952883D01* +X113641285Y-100410026D01* +X113641285Y-99914788D01* +X79887344Y-114870185D02* +X79887344Y-114070185D01* +X80192106Y-114070185D01* +X80268297Y-114108280D01* +X80306392Y-114146375D01* +X80344487Y-114222566D01* +X80344487Y-114336851D01* +X80306392Y-114413042D01* +X80268297Y-114451137D01* +X80192106Y-114489232D01* +X79887344Y-114489232D01* +X80611154Y-114070185D02* +X81106392Y-114070185D01* +X80839725Y-114374947D01* +X80954011Y-114374947D01* +X81030201Y-114413042D01* +X81068297Y-114451137D01* +X81106392Y-114527328D01* +X81106392Y-114717804D01* +X81068297Y-114793994D01* +X81030201Y-114832090D01* +X80954011Y-114870185D01* +X80725439Y-114870185D01* +X80649249Y-114832090D01* +X80611154Y-114793994D01* +X113168964Y-124674585D02* +X113168964Y-123874585D01* +X113473726Y-123874585D01* +X113549917Y-123912680D01* +X113588012Y-123950775D01* +X113626107Y-124026966D01* +X113626107Y-124141251D01* +X113588012Y-124217442D01* +X113549917Y-124255537D01* +X113473726Y-124293632D01* +X113168964Y-124293632D01* +X114311821Y-124141251D02* +X114311821Y-124674585D01* +X114121345Y-123836490D02* +X113930869Y-124407918D01* +X114426107Y-124407918D01* +X106422605Y-117491436D02* +X105622605Y-117491436D01* +X105622605Y-117186674D01* +X105660700Y-117110483D01* +X105698795Y-117072388D01* +X105774986Y-117034293D01* +X105889271Y-117034293D01* +X105965462Y-117072388D01* +X106003557Y-117110483D01* +X106041652Y-117186674D01* +X106041652Y-117491436D01* +X105622605Y-116310483D02* +X105622605Y-116691436D01* +X106003557Y-116729531D01* +X105965462Y-116691436D01* +X105927367Y-116615245D01* +X105927367Y-116424769D01* +X105965462Y-116348579D01* +X106003557Y-116310483D01* +X106079748Y-116272388D01* +X106270224Y-116272388D01* +X106346414Y-116310483D01* +X106384510Y-116348579D01* +X106422605Y-116424769D01* +X106422605Y-116615245D01* +X106384510Y-116691436D01* +X106346414Y-116729531D01* +X79925444Y-117377165D02* +X79925444Y-116577165D01* +X80230206Y-116577165D01* +X80306397Y-116615260D01* +X80344492Y-116653355D01* +X80382587Y-116729546D01* +X80382587Y-116843831D01* +X80344492Y-116920022D01* +X80306397Y-116958117D01* +X80230206Y-116996212D01* +X79925444Y-116996212D01* +X81068301Y-116577165D02* +X80915920Y-116577165D01* +X80839730Y-116615260D01* +X80801635Y-116653355D01* +X80725444Y-116767641D01* +X80687349Y-116920022D01* +X80687349Y-117224784D01* +X80725444Y-117300974D01* +X80763539Y-117339070D01* +X80839730Y-117377165D01* +X80992111Y-117377165D01* +X81068301Y-117339070D01* +X81106397Y-117300974D01* +X81144492Y-117224784D01* +X81144492Y-117034308D01* +X81106397Y-116958117D01* +X81068301Y-116920022D01* +X80992111Y-116881927D01* +X80839730Y-116881927D01* +X80763539Y-116920022D01* +X80725444Y-116958117D01* +X80687349Y-117034308D01* +X114212785Y-118875736D02* +X113412785Y-118875736D01* +X113412785Y-118570974D01* +X113450880Y-118494783D01* +X113488975Y-118456688D01* +X113565166Y-118418593D01* +X113679451Y-118418593D01* +X113755642Y-118456688D01* +X113793737Y-118494783D01* +X113831832Y-118570974D01* +X113831832Y-118875736D01* +X113755642Y-117961450D02* +X113717547Y-118037641D01* +X113679451Y-118075736D01* +X113603261Y-118113831D01* +X113565166Y-118113831D01* +X113488975Y-118075736D01* +X113450880Y-118037641D01* +X113412785Y-117961450D01* +X113412785Y-117809069D01* +X113450880Y-117732879D01* +X113488975Y-117694783D01* +X113565166Y-117656688D01* +X113603261Y-117656688D01* +X113679451Y-117694783D01* +X113717547Y-117732879D01* +X113755642Y-117809069D01* +X113755642Y-117961450D01* +X113793737Y-118037641D01* +X113831832Y-118075736D01* +X113908023Y-118113831D01* +X114060404Y-118113831D01* +X114136594Y-118075736D01* +X114174690Y-118037641D01* +X114212785Y-117961450D01* +X114212785Y-117809069D01* +X114174690Y-117732879D01* +X114136594Y-117694783D01* +X114060404Y-117656688D01* +X113908023Y-117656688D01* +X113831832Y-117694783D01* +X113793737Y-117732879D01* +X113755642Y-117809069D01* +X102777824Y-119813025D02* +X102777824Y-119013025D01* +X103082586Y-119013025D01* +X103158777Y-119051120D01* +X103196872Y-119089215D01* +X103234967Y-119165406D01* +X103234967Y-119279691D01* +X103196872Y-119355882D01* +X103158777Y-119393977D01* +X103082586Y-119432072D01* +X102777824Y-119432072D01* +X103615919Y-119813025D02* +X103768300Y-119813025D01* +X103844491Y-119774930D01* +X103882586Y-119736834D01* +X103958777Y-119622549D01* +X103996872Y-119470168D01* +X103996872Y-119165406D01* +X103958777Y-119089215D01* +X103920681Y-119051120D01* +X103844491Y-119013025D01* +X103692110Y-119013025D01* +X103615919Y-119051120D01* +X103577824Y-119089215D01* +X103539729Y-119165406D01* +X103539729Y-119355882D01* +X103577824Y-119432072D01* +X103615919Y-119470168D01* +X103692110Y-119508263D01* +X103844491Y-119508263D01* +X103920681Y-119470168D01* +X103958777Y-119432072D01* +X103996872Y-119355882D01* +X96103910Y-97994415D02* +X96027719Y-97956320D01* +X95951529Y-97880130D01* +X95837243Y-97765844D01* +X95761052Y-97727749D01* +X95684862Y-97727749D01* +X95722957Y-97918225D02* +X95646767Y-97880130D01* +X95570576Y-97803939D01* +X95532481Y-97651558D01* +X95532481Y-97384891D01* +X95570576Y-97232510D01* +X95646767Y-97156320D01* +X95722957Y-97118225D01* +X95875338Y-97118225D01* +X95951529Y-97156320D01* +X96027719Y-97232510D01* +X96065814Y-97384891D01* +X96065814Y-97651558D01* +X96027719Y-97803939D01* +X95951529Y-97880130D01* +X95875338Y-97918225D01* +X95722957Y-97918225D01* +X96827719Y-97918225D02* +X96370576Y-97918225D01* +X96599147Y-97918225D02* +X96599147Y-97118225D01* +X96522957Y-97232510D01* +X96446766Y-97308701D01* +X96370576Y-97346796D01* +X99506185Y-122007613D02* +X99125232Y-122274280D01* +X99506185Y-122464756D02* +X98706185Y-122464756D01* +X98706185Y-122159994D01* +X98744280Y-122083803D01* +X98782375Y-122045708D01* +X98858566Y-122007613D01* +X98972851Y-122007613D01* +X99049042Y-122045708D01* +X99087137Y-122083803D01* +X99125232Y-122159994D01* +X99125232Y-122464756D01* +X99506185Y-121245708D02* +X99506185Y-121702851D01* +X99506185Y-121474280D02* +X98706185Y-121474280D01* +X98820470Y-121550470D01* +X98896661Y-121626661D01* +X98934756Y-121702851D01* +X99498565Y-119416813D02* +X99117612Y-119683480D01* +X99498565Y-119873956D02* +X98698565Y-119873956D01* +X98698565Y-119569194D01* +X98736660Y-119493003D01* +X98774755Y-119454908D01* +X98850946Y-119416813D01* +X98965231Y-119416813D01* +X99041422Y-119454908D01* +X99079517Y-119493003D01* +X99117612Y-119569194D01* +X99117612Y-119873956D01* +X98774755Y-119112051D02* +X98736660Y-119073956D01* +X98698565Y-118997765D01* +X98698565Y-118807289D01* +X98736660Y-118731099D01* +X98774755Y-118693003D01* +X98850946Y-118654908D01* +X98927136Y-118654908D01* +X99041422Y-118693003D01* +X99498565Y-119150146D01* +X99498565Y-118654908D01* +X101091145Y-121923793D02* +X100710192Y-122190460D01* +X101091145Y-122380936D02* +X100291145Y-122380936D01* +X100291145Y-122076174D01* +X100329240Y-121999983D01* +X100367335Y-121961888D01* +X100443526Y-121923793D01* +X100557811Y-121923793D01* +X100634002Y-121961888D01* +X100672097Y-121999983D01* +X100710192Y-122076174D01* +X100710192Y-122380936D01* +X100291145Y-121657126D02* +X100291145Y-121161888D01* +X100595907Y-121428555D01* +X100595907Y-121314269D01* +X100634002Y-121238079D01* +X100672097Y-121199983D01* +X100748288Y-121161888D01* +X100938764Y-121161888D01* +X101014954Y-121199983D01* +X101053050Y-121238079D01* +X101091145Y-121314269D01* +X101091145Y-121542841D01* +X101053050Y-121619031D01* +X101014954Y-121657126D01* +X101068285Y-119310133D02* +X100687332Y-119576800D01* +X101068285Y-119767276D02* +X100268285Y-119767276D01* +X100268285Y-119462514D01* +X100306380Y-119386323D01* +X100344475Y-119348228D01* +X100420666Y-119310133D01* +X100534951Y-119310133D01* +X100611142Y-119348228D01* +X100649237Y-119386323D01* +X100687332Y-119462514D01* +X100687332Y-119767276D01* +X100534951Y-118624419D02* +X101068285Y-118624419D01* +X100230190Y-118814895D02* +X100801618Y-119005371D01* +X100801618Y-118510133D01* +X106232167Y-114654285D02* +X105965500Y-114273332D01* +X105775024Y-114654285D02* +X105775024Y-113854285D01* +X106079786Y-113854285D01* +X106155977Y-113892380D01* +X106194072Y-113930475D01* +X106232167Y-114006666D01* +X106232167Y-114120951D01* +X106194072Y-114197142D01* +X106155977Y-114235237D01* +X106079786Y-114273332D01* +X105775024Y-114273332D01* +X106955977Y-113854285D02* +X106575024Y-113854285D01* +X106536929Y-114235237D01* +X106575024Y-114197142D01* +X106651215Y-114159047D01* +X106841691Y-114159047D01* +X106917881Y-114197142D01* +X106955977Y-114235237D01* +X106994072Y-114311428D01* +X106994072Y-114501904D01* +X106955977Y-114578094D01* +X106917881Y-114616190D01* +X106841691Y-114654285D01* +X106651215Y-114654285D01* +X106575024Y-114616190D01* +X106536929Y-114578094D01* +X106346467Y-113280145D02* +X106079800Y-112899192D01* +X105889324Y-113280145D02* +X105889324Y-112480145D01* +X106194086Y-112480145D01* +X106270277Y-112518240D01* +X106308372Y-112556335D01* +X106346467Y-112632526D01* +X106346467Y-112746811D01* +X106308372Y-112823002D01* +X106270277Y-112861097D01* +X106194086Y-112899192D01* +X105889324Y-112899192D01* +X107032181Y-112480145D02* +X106879800Y-112480145D01* +X106803610Y-112518240D01* +X106765515Y-112556335D01* +X106689324Y-112670621D01* +X106651229Y-112823002D01* +X106651229Y-113127764D01* +X106689324Y-113203954D01* +X106727419Y-113242050D01* +X106803610Y-113280145D01* +X106955991Y-113280145D01* +X107032181Y-113242050D01* +X107070277Y-113203954D01* +X107108372Y-113127764D01* +X107108372Y-112937288D01* +X107070277Y-112861097D01* +X107032181Y-112823002D01* +X106955991Y-112784907D01* +X106803610Y-112784907D01* +X106727419Y-112823002D01* +X106689324Y-112861097D01* +X106651229Y-112937288D01* +X82937765Y-106691413D02* +X82556812Y-106958080D01* +X82937765Y-107148556D02* +X82137765Y-107148556D01* +X82137765Y-106843794D01* +X82175860Y-106767603D01* +X82213955Y-106729508D01* +X82290146Y-106691413D01* +X82404431Y-106691413D01* +X82480622Y-106729508D01* +X82518717Y-106767603D01* +X82556812Y-106843794D01* +X82556812Y-107148556D01* +X82137765Y-106424746D02* +X82137765Y-105891413D01* +X82937765Y-106234270D01* +X82983485Y-109358413D02* +X82602532Y-109625080D01* +X82983485Y-109815556D02* +X82183485Y-109815556D01* +X82183485Y-109510794D01* +X82221580Y-109434603D01* +X82259675Y-109396508D01* +X82335866Y-109358413D01* +X82450151Y-109358413D01* +X82526342Y-109396508D01* +X82564437Y-109434603D01* +X82602532Y-109510794D01* +X82602532Y-109815556D01* +X82526342Y-108901270D02* +X82488247Y-108977461D01* +X82450151Y-109015556D01* +X82373961Y-109053651D01* +X82335866Y-109053651D01* +X82259675Y-109015556D01* +X82221580Y-108977461D01* +X82183485Y-108901270D01* +X82183485Y-108748889D01* +X82221580Y-108672699D01* +X82259675Y-108634603D01* +X82335866Y-108596508D01* +X82373961Y-108596508D01* +X82450151Y-108634603D01* +X82488247Y-108672699D01* +X82526342Y-108748889D01* +X82526342Y-108901270D01* +X82564437Y-108977461D01* +X82602532Y-109015556D01* +X82678723Y-109053651D01* +X82831104Y-109053651D01* +X82907294Y-109015556D01* +X82945390Y-108977461D01* +X82983485Y-108901270D01* +X82983485Y-108748889D01* +X82945390Y-108672699D01* +X82907294Y-108634603D01* +X82831104Y-108596508D01* +X82678723Y-108596508D01* +X82602532Y-108634603D01* +X82564437Y-108672699D01* +X82526342Y-108748889D01* +X82935225Y-111898413D02* +X82554272Y-112165080D01* +X82935225Y-112355556D02* +X82135225Y-112355556D01* +X82135225Y-112050794D01* +X82173320Y-111974603D01* +X82211415Y-111936508D01* +X82287606Y-111898413D01* +X82401891Y-111898413D01* +X82478082Y-111936508D01* +X82516177Y-111974603D01* +X82554272Y-112050794D01* +X82554272Y-112355556D01* +X82935225Y-111517461D02* +X82935225Y-111365080D01* +X82897130Y-111288889D01* +X82859034Y-111250794D01* +X82744749Y-111174603D01* +X82592368Y-111136508D01* +X82287606Y-111136508D01* +X82211415Y-111174603D01* +X82173320Y-111212699D01* +X82135225Y-111288889D01* +X82135225Y-111441270D01* +X82173320Y-111517461D01* +X82211415Y-111555556D01* +X82287606Y-111593651D01* +X82478082Y-111593651D01* +X82554272Y-111555556D01* +X82592368Y-111517461D01* +X82630463Y-111441270D01* +X82630463Y-111288889D01* +X82592368Y-111212699D01* +X82554272Y-111174603D01* +X82478082Y-111136508D01* +X82980945Y-114824446D02* +X82599992Y-115091113D01* +X82980945Y-115281589D02* +X82180945Y-115281589D01* +X82180945Y-114976827D01* +X82219040Y-114900636D01* +X82257135Y-114862541D01* +X82333326Y-114824446D01* +X82447611Y-114824446D01* +X82523802Y-114862541D01* +X82561897Y-114900636D01* +X82599992Y-114976827D01* +X82599992Y-115281589D01* +X82980945Y-114062541D02* +X82980945Y-114519684D01* +X82980945Y-114291113D02* +X82180945Y-114291113D01* +X82295230Y-114367303D01* +X82371421Y-114443494D01* +X82409516Y-114519684D01* +X82180945Y-113567303D02* +X82180945Y-113491112D01* +X82219040Y-113414922D01* +X82257135Y-113376827D01* +X82333326Y-113338731D01* +X82485707Y-113300636D01* +X82676183Y-113300636D01* +X82828564Y-113338731D01* +X82904754Y-113376827D01* +X82942850Y-113414922D01* +X82980945Y-113491112D01* +X82980945Y-113567303D01* +X82942850Y-113643493D01* +X82904754Y-113681589D01* +X82828564Y-113719684D01* +X82676183Y-113757779D01* +X82485707Y-113757779D01* +X82333326Y-113719684D01* +X82257135Y-113681589D01* +X82219040Y-113643493D01* +X82180945Y-113567303D01* +X84736085Y-107024106D02* +X84355132Y-107290773D01* +X84736085Y-107481249D02* +X83936085Y-107481249D01* +X83936085Y-107176487D01* +X83974180Y-107100296D01* +X84012275Y-107062201D01* +X84088466Y-107024106D01* +X84202751Y-107024106D01* +X84278942Y-107062201D01* +X84317037Y-107100296D01* +X84355132Y-107176487D01* +X84355132Y-107481249D01* +X84736085Y-106262201D02* +X84736085Y-106719344D01* +X84736085Y-106490773D02* +X83936085Y-106490773D01* +X84050370Y-106566963D01* +X84126561Y-106643154D01* +X84164656Y-106719344D01* +X84736085Y-105500296D02* +X84736085Y-105957439D01* +X84736085Y-105728868D02* +X83936085Y-105728868D01* +X84050370Y-105805058D01* +X84126561Y-105881249D01* +X84164656Y-105957439D01* +X84736085Y-109668246D02* +X84355132Y-109934913D01* +X84736085Y-110125389D02* +X83936085Y-110125389D01* +X83936085Y-109820627D01* +X83974180Y-109744436D01* +X84012275Y-109706341D01* +X84088466Y-109668246D01* +X84202751Y-109668246D01* +X84278942Y-109706341D01* +X84317037Y-109744436D01* +X84355132Y-109820627D01* +X84355132Y-110125389D01* +X84736085Y-108906341D02* +X84736085Y-109363484D01* +X84736085Y-109134913D02* +X83936085Y-109134913D01* +X84050370Y-109211103D01* +X84126561Y-109287294D01* +X84164656Y-109363484D01* +X84012275Y-108601579D02* +X83974180Y-108563484D01* +X83936085Y-108487293D01* +X83936085Y-108296817D01* +X83974180Y-108220627D01* +X84012275Y-108182531D01* +X84088466Y-108144436D01* +X84164656Y-108144436D01* +X84278942Y-108182531D01* +X84736085Y-108639674D01* +X84736085Y-108144436D01* +X84690365Y-112256506D02* +X84309412Y-112523173D01* +X84690365Y-112713649D02* +X83890365Y-112713649D01* +X83890365Y-112408887D01* +X83928460Y-112332696D01* +X83966555Y-112294601D01* +X84042746Y-112256506D01* +X84157031Y-112256506D01* +X84233222Y-112294601D01* +X84271317Y-112332696D01* +X84309412Y-112408887D01* +X84309412Y-112713649D01* +X84690365Y-111494601D02* +X84690365Y-111951744D01* +X84690365Y-111723173D02* +X83890365Y-111723173D01* +X84004650Y-111799363D01* +X84080841Y-111875554D01* +X84118936Y-111951744D01* +X83890365Y-111227934D02* +X83890365Y-110732696D01* +X84195127Y-110999363D01* +X84195127Y-110885077D01* +X84233222Y-110808887D01* +X84271317Y-110770791D01* +X84347508Y-110732696D01* +X84537984Y-110732696D01* +X84614174Y-110770791D01* +X84652270Y-110808887D01* +X84690365Y-110885077D01* +X84690365Y-111113649D01* +X84652270Y-111189839D01* +X84614174Y-111227934D01* +X84715765Y-114979386D02* +X84334812Y-115246053D01* +X84715765Y-115436529D02* +X83915765Y-115436529D01* +X83915765Y-115131767D01* +X83953860Y-115055576D01* +X83991955Y-115017481D01* +X84068146Y-114979386D01* +X84182431Y-114979386D01* +X84258622Y-115017481D01* +X84296717Y-115055576D01* +X84334812Y-115131767D01* +X84334812Y-115436529D01* +X84715765Y-114217481D02* +X84715765Y-114674624D01* +X84715765Y-114446053D02* +X83915765Y-114446053D01* +X84030050Y-114522243D01* +X84106241Y-114598434D01* +X84144336Y-114674624D01* +X84182431Y-113531767D02* +X84715765Y-113531767D01* +X83877670Y-113722243D02* +X84449098Y-113912719D01* +X84449098Y-113417481D01* +X89800845Y-124826966D02* +X89419892Y-125093633D01* +X89800845Y-125284109D02* +X89000845Y-125284109D01* +X89000845Y-124979347D01* +X89038940Y-124903156D01* +X89077035Y-124865061D01* +X89153226Y-124826966D01* +X89267511Y-124826966D01* +X89343702Y-124865061D01* +X89381797Y-124903156D01* +X89419892Y-124979347D01* +X89419892Y-125284109D01* +X89800845Y-124065061D02* +X89800845Y-124522204D01* +X89800845Y-124293633D02* +X89000845Y-124293633D01* +X89115130Y-124369823D01* +X89191321Y-124446014D01* +X89229416Y-124522204D01* +X89000845Y-123341251D02* +X89000845Y-123722204D01* +X89381797Y-123760299D01* +X89343702Y-123722204D01* +X89305607Y-123646013D01* +X89305607Y-123455537D01* +X89343702Y-123379347D01* +X89381797Y-123341251D01* +X89457988Y-123303156D01* +X89648464Y-123303156D01* +X89724654Y-123341251D01* +X89762750Y-123379347D01* +X89800845Y-123455537D01* +X89800845Y-123646013D01* +X89762750Y-123722204D01* +X89724654Y-123760299D01* +X88271765Y-124826966D02* +X87890812Y-125093633D01* +X88271765Y-125284109D02* +X87471765Y-125284109D01* +X87471765Y-124979347D01* +X87509860Y-124903156D01* +X87547955Y-124865061D01* +X87624146Y-124826966D01* +X87738431Y-124826966D01* +X87814622Y-124865061D01* +X87852717Y-124903156D01* +X87890812Y-124979347D01* +X87890812Y-125284109D01* +X88271765Y-124065061D02* +X88271765Y-124522204D01* +X88271765Y-124293633D02* +X87471765Y-124293633D01* +X87586050Y-124369823D01* +X87662241Y-124446014D01* +X87700336Y-124522204D01* +X87471765Y-123379347D02* +X87471765Y-123531728D01* +X87509860Y-123607918D01* +X87547955Y-123646013D01* +X87662241Y-123722204D01* +X87814622Y-123760299D01* +X88119384Y-123760299D01* +X88195574Y-123722204D01* +X88233670Y-123684109D01* +X88271765Y-123607918D01* +X88271765Y-123455537D01* +X88233670Y-123379347D01* +X88195574Y-123341251D01* +X88119384Y-123303156D01* +X87928908Y-123303156D01* +X87852717Y-123341251D01* +X87814622Y-123379347D01* +X87776527Y-123455537D01* +X87776527Y-123607918D01* +X87814622Y-123684109D01* +X87852717Y-123722204D01* +X87928908Y-123760299D01* +X89671305Y-117753066D02* +X89290352Y-118019733D01* +X89671305Y-118210209D02* +X88871305Y-118210209D01* +X88871305Y-117905447D01* +X88909400Y-117829256D01* +X88947495Y-117791161D01* +X89023686Y-117753066D01* +X89137971Y-117753066D01* +X89214162Y-117791161D01* +X89252257Y-117829256D01* +X89290352Y-117905447D01* +X89290352Y-118210209D01* +X89671305Y-116991161D02* +X89671305Y-117448304D01* +X89671305Y-117219733D02* +X88871305Y-117219733D01* +X88985590Y-117295923D01* +X89061781Y-117372114D01* +X89099876Y-117448304D01* +X88871305Y-116724494D02* +X88871305Y-116191161D01* +X89671305Y-116534018D01* +X88030465Y-117793706D02* +X87649512Y-118060373D01* +X88030465Y-118250849D02* +X87230465Y-118250849D01* +X87230465Y-117946087D01* +X87268560Y-117869896D01* +X87306655Y-117831801D01* +X87382846Y-117793706D01* +X87497131Y-117793706D01* +X87573322Y-117831801D01* +X87611417Y-117869896D01* +X87649512Y-117946087D01* +X87649512Y-118250849D01* +X88030465Y-117031801D02* +X88030465Y-117488944D01* +X88030465Y-117260373D02* +X87230465Y-117260373D01* +X87344750Y-117336563D01* +X87420941Y-117412754D01* +X87459036Y-117488944D01* +X87573322Y-116574658D02* +X87535227Y-116650849D01* +X87497131Y-116688944D01* +X87420941Y-116727039D01* +X87382846Y-116727039D01* +X87306655Y-116688944D01* +X87268560Y-116650849D01* +X87230465Y-116574658D01* +X87230465Y-116422277D01* +X87268560Y-116346087D01* +X87306655Y-116307991D01* +X87382846Y-116269896D01* +X87420941Y-116269896D01* +X87497131Y-116307991D01* +X87535227Y-116346087D01* +X87573322Y-116422277D01* +X87573322Y-116574658D01* +X87611417Y-116650849D01* +X87649512Y-116688944D01* +X87725703Y-116727039D01* +X87878084Y-116727039D01* +X87954274Y-116688944D01* +X87992370Y-116650849D01* +X88030465Y-116574658D01* +X88030465Y-116422277D01* +X87992370Y-116346087D01* +X87954274Y-116307991D01* +X87878084Y-116269896D01* +X87725703Y-116269896D01* +X87649512Y-116307991D01* +X87611417Y-116346087D01* +X87573322Y-116422277D01* +X86727554Y-119980665D02* +X86460887Y-119599712D01* +X86270411Y-119980665D02* +X86270411Y-119180665D01* +X86575173Y-119180665D01* +X86651364Y-119218760D01* +X86689459Y-119256855D01* +X86727554Y-119333046D01* +X86727554Y-119447331D01* +X86689459Y-119523522D01* +X86651364Y-119561617D01* +X86575173Y-119599712D01* +X86270411Y-119599712D01* +X87489459Y-119980665D02* +X87032316Y-119980665D01* +X87260887Y-119980665D02* +X87260887Y-119180665D01* +X87184697Y-119294950D01* +X87108506Y-119371141D01* +X87032316Y-119409236D01* +X87870411Y-119980665D02* +X88022792Y-119980665D01* +X88098983Y-119942570D01* +X88137078Y-119904474D01* +X88213269Y-119790189D01* +X88251364Y-119637808D01* +X88251364Y-119333046D01* +X88213269Y-119256855D01* +X88175173Y-119218760D01* +X88098983Y-119180665D01* +X87946602Y-119180665D01* +X87870411Y-119218760D01* +X87832316Y-119256855D01* +X87794221Y-119333046D01* +X87794221Y-119523522D01* +X87832316Y-119599712D01* +X87870411Y-119637808D01* +X87946602Y-119675903D01* +X88098983Y-119675903D01* +X88175173Y-119637808D01* +X88213269Y-119599712D01* +X88251364Y-119523522D01* +X86615794Y-122342865D02* +X86349127Y-121961912D01* +X86158651Y-122342865D02* +X86158651Y-121542865D01* +X86463413Y-121542865D01* +X86539604Y-121580960D01* +X86577699Y-121619055D01* +X86615794Y-121695246D01* +X86615794Y-121809531D01* +X86577699Y-121885722D01* +X86539604Y-121923817D01* +X86463413Y-121961912D01* +X86158651Y-121961912D01* +X86920556Y-121619055D02* +X86958651Y-121580960D01* +X87034842Y-121542865D01* +X87225318Y-121542865D01* +X87301508Y-121580960D01* +X87339604Y-121619055D01* +X87377699Y-121695246D01* +X87377699Y-121771436D01* +X87339604Y-121885722D01* +X86882461Y-122342865D01* +X87377699Y-122342865D01* +X87872937Y-121542865D02* +X87949128Y-121542865D01* +X88025318Y-121580960D01* +X88063413Y-121619055D01* +X88101509Y-121695246D01* +X88139604Y-121847627D01* +X88139604Y-122038103D01* +X88101509Y-122190484D01* +X88063413Y-122266674D01* +X88025318Y-122304770D01* +X87949128Y-122342865D01* +X87872937Y-122342865D01* +X87796747Y-122304770D01* +X87758651Y-122266674D01* +X87720556Y-122190484D01* +X87682461Y-122038103D01* +X87682461Y-121847627D01* +X87720556Y-121695246D01* +X87758651Y-121619055D01* +X87796747Y-121580960D01* +X87872937Y-121542865D01* +X99056714Y-124476465D02* +X98790047Y-124095512D01* +X98599571Y-124476465D02* +X98599571Y-123676465D01* +X98904333Y-123676465D01* +X98980524Y-123714560D01* +X99018619Y-123752655D01* +X99056714Y-123828846D01* +X99056714Y-123943131D01* +X99018619Y-124019322D01* +X98980524Y-124057417D01* +X98904333Y-124095512D01* +X98599571Y-124095512D01* +X99361476Y-123752655D02* +X99399571Y-123714560D01* +X99475762Y-123676465D01* +X99666238Y-123676465D01* +X99742428Y-123714560D01* +X99780524Y-123752655D01* +X99818619Y-123828846D01* +X99818619Y-123905036D01* +X99780524Y-124019322D01* +X99323381Y-124476465D01* +X99818619Y-124476465D01* +X100580524Y-124476465D02* +X100123381Y-124476465D01* +X100351952Y-124476465D02* +X100351952Y-123676465D01* +X100275762Y-123790750D01* +X100199571Y-123866941D01* +X100123381Y-123905036D01* +X84855465Y-117730206D02* +X84474512Y-117996873D01* +X84855465Y-118187349D02* +X84055465Y-118187349D01* +X84055465Y-117882587D01* +X84093560Y-117806396D01* +X84131655Y-117768301D01* +X84207846Y-117730206D01* +X84322131Y-117730206D01* +X84398322Y-117768301D01* +X84436417Y-117806396D01* +X84474512Y-117882587D01* +X84474512Y-118187349D01* +X84131655Y-117425444D02* +X84093560Y-117387349D01* +X84055465Y-117311158D01* +X84055465Y-117120682D01* +X84093560Y-117044492D01* +X84131655Y-117006396D01* +X84207846Y-116968301D01* +X84284036Y-116968301D01* +X84398322Y-117006396D01* +X84855465Y-117463539D01* +X84855465Y-116968301D01* +X84131655Y-116663539D02* +X84093560Y-116625444D01* +X84055465Y-116549253D01* +X84055465Y-116358777D01* +X84093560Y-116282587D01* +X84131655Y-116244491D01* +X84207846Y-116206396D01* +X84284036Y-116206396D01* +X84398322Y-116244491D01* +X84855465Y-116701634D01* +X84855465Y-116206396D01* +X85112005Y-124887926D02* +X84731052Y-125154593D01* +X85112005Y-125345069D02* +X84312005Y-125345069D01* +X84312005Y-125040307D01* +X84350100Y-124964116D01* +X84388195Y-124926021D01* +X84464386Y-124887926D01* +X84578671Y-124887926D01* +X84654862Y-124926021D01* +X84692957Y-124964116D01* +X84731052Y-125040307D01* +X84731052Y-125345069D01* +X84388195Y-124583164D02* +X84350100Y-124545069D01* +X84312005Y-124468878D01* +X84312005Y-124278402D01* +X84350100Y-124202212D01* +X84388195Y-124164116D01* +X84464386Y-124126021D01* +X84540576Y-124126021D01* +X84654862Y-124164116D01* +X85112005Y-124621259D01* +X85112005Y-124126021D01* +X84312005Y-123859354D02* +X84312005Y-123364116D01* +X84616767Y-123630783D01* +X84616767Y-123516497D01* +X84654862Y-123440307D01* +X84692957Y-123402211D01* +X84769148Y-123364116D01* +X84959624Y-123364116D01* +X85035814Y-123402211D01* +X85073910Y-123440307D01* +X85112005Y-123516497D01* +X85112005Y-123745069D01* +X85073910Y-123821259D01* +X85035814Y-123859354D01* +X83636374Y-120036545D02* +X83369707Y-119655592D01* +X83179231Y-120036545D02* +X83179231Y-119236545D01* +X83483993Y-119236545D01* +X83560184Y-119274640D01* +X83598279Y-119312735D01* +X83636374Y-119388926D01* +X83636374Y-119503211D01* +X83598279Y-119579402D01* +X83560184Y-119617497D01* +X83483993Y-119655592D01* +X83179231Y-119655592D01* +X83941136Y-119312735D02* +X83979231Y-119274640D01* +X84055422Y-119236545D01* +X84245898Y-119236545D01* +X84322088Y-119274640D01* +X84360184Y-119312735D01* +X84398279Y-119388926D01* +X84398279Y-119465116D01* +X84360184Y-119579402D01* +X83903041Y-120036545D01* +X84398279Y-120036545D01* +X85083993Y-119503211D02* +X85083993Y-120036545D01* +X84893517Y-119198450D02* +X84703041Y-119769878D01* +X85198279Y-119769878D01* +X83610974Y-122309845D02* +X83344307Y-121928892D01* +X83153831Y-122309845D02* +X83153831Y-121509845D01* +X83458593Y-121509845D01* +X83534784Y-121547940D01* +X83572879Y-121586035D01* +X83610974Y-121662226D01* +X83610974Y-121776511D01* +X83572879Y-121852702D01* +X83534784Y-121890797D01* +X83458593Y-121928892D01* +X83153831Y-121928892D01* +X83915736Y-121586035D02* +X83953831Y-121547940D01* +X84030022Y-121509845D01* +X84220498Y-121509845D01* +X84296688Y-121547940D01* +X84334784Y-121586035D01* +X84372879Y-121662226D01* +X84372879Y-121738416D01* +X84334784Y-121852702D01* +X83877641Y-122309845D01* +X84372879Y-122309845D01* +X85096689Y-121509845D02* +X84715736Y-121509845D01* +X84677641Y-121890797D01* +X84715736Y-121852702D01* +X84791927Y-121814607D01* +X84982403Y-121814607D01* +X85058593Y-121852702D01* +X85096689Y-121890797D01* +X85134784Y-121966988D01* +X85134784Y-122157464D01* +X85096689Y-122233654D01* +X85058593Y-122271750D01* +X84982403Y-122309845D01* +X84791927Y-122309845D01* +X84715736Y-122271750D01* +X84677641Y-122233654D01* +X84096114Y-103336045D02* +X83829447Y-102955092D01* +X83638971Y-103336045D02* +X83638971Y-102536045D01* +X83943733Y-102536045D01* +X84019924Y-102574140D01* +X84058019Y-102612235D01* +X84096114Y-102688426D01* +X84096114Y-102802711D01* +X84058019Y-102878902D01* +X84019924Y-102916997D01* +X83943733Y-102955092D01* +X83638971Y-102955092D01* +X84400876Y-102612235D02* +X84438971Y-102574140D01* +X84515162Y-102536045D01* +X84705638Y-102536045D01* +X84781828Y-102574140D01* +X84819924Y-102612235D01* +X84858019Y-102688426D01* +X84858019Y-102764616D01* +X84819924Y-102878902D01* +X84362781Y-103336045D01* +X84858019Y-103336045D01* +X85543733Y-102536045D02* +X85391352Y-102536045D01* +X85315162Y-102574140D01* +X85277067Y-102612235D01* +X85200876Y-102726521D01* +X85162781Y-102878902D01* +X85162781Y-103183664D01* +X85200876Y-103259854D01* +X85238971Y-103297950D01* +X85315162Y-103336045D01* +X85467543Y-103336045D01* +X85543733Y-103297950D01* +X85581829Y-103259854D01* +X85619924Y-103183664D01* +X85619924Y-102993188D01* +X85581829Y-102916997D01* +X85543733Y-102878902D01* +X85467543Y-102840807D01* +X85315162Y-102840807D01* +X85238971Y-102878902D01* +X85200876Y-102916997D01* +X85162781Y-102993188D01* +X84040234Y-104938785D02* +X83773567Y-104557832D01* +X83583091Y-104938785D02* +X83583091Y-104138785D01* +X83887853Y-104138785D01* +X83964044Y-104176880D01* +X84002139Y-104214975D01* +X84040234Y-104291166D01* +X84040234Y-104405451D01* +X84002139Y-104481642D01* +X83964044Y-104519737D01* +X83887853Y-104557832D01* +X83583091Y-104557832D01* +X84344996Y-104214975D02* +X84383091Y-104176880D01* +X84459282Y-104138785D01* +X84649758Y-104138785D01* +X84725948Y-104176880D01* +X84764044Y-104214975D01* +X84802139Y-104291166D01* +X84802139Y-104367356D01* +X84764044Y-104481642D01* +X84306901Y-104938785D01* +X84802139Y-104938785D01* +X85068806Y-104138785D02* +X85602139Y-104138785D01* +X85259282Y-104938785D01* +X99110054Y-117252705D02* +X98843387Y-116871752D01* +X98652911Y-117252705D02* +X98652911Y-116452705D01* +X98957673Y-116452705D01* +X99033864Y-116490800D01* +X99071959Y-116528895D01* +X99110054Y-116605086D01* +X99110054Y-116719371D01* +X99071959Y-116795562D01* +X99033864Y-116833657D01* +X98957673Y-116871752D01* +X98652911Y-116871752D01* +X99414816Y-116528895D02* +X99452911Y-116490800D01* +X99529102Y-116452705D01* +X99719578Y-116452705D01* +X99795768Y-116490800D01* +X99833864Y-116528895D01* +X99871959Y-116605086D01* +X99871959Y-116681276D01* +X99833864Y-116795562D01* +X99376721Y-117252705D01* +X99871959Y-117252705D01* +X100329102Y-116795562D02* +X100252911Y-116757467D01* +X100214816Y-116719371D01* +X100176721Y-116643181D01* +X100176721Y-116605086D01* +X100214816Y-116528895D01* +X100252911Y-116490800D01* +X100329102Y-116452705D01* +X100481483Y-116452705D01* +X100557673Y-116490800D01* +X100595769Y-116528895D01* +X100633864Y-116605086D01* +X100633864Y-116643181D01* +X100595769Y-116719371D01* +X100557673Y-116757467D01* +X100481483Y-116795562D01* +X100329102Y-116795562D01* +X100252911Y-116833657D01* +X100214816Y-116871752D01* +X100176721Y-116947943D01* +X100176721Y-117100324D01* +X100214816Y-117176514D01* +X100252911Y-117214610D01* +X100329102Y-117252705D01* +X100481483Y-117252705D01* +X100557673Y-117214610D01* +X100595769Y-117176514D01* +X100633864Y-117100324D01* +X100633864Y-116947943D01* +X100595769Y-116871752D01* +X100557673Y-116833657D01* +X100481483Y-116795562D01* +X86394705Y-117768306D02* +X86013752Y-118034973D01* +X86394705Y-118225449D02* +X85594705Y-118225449D01* +X85594705Y-117920687D01* +X85632800Y-117844496D01* +X85670895Y-117806401D01* +X85747086Y-117768306D01* +X85861371Y-117768306D01* +X85937562Y-117806401D01* +X85975657Y-117844496D01* +X86013752Y-117920687D01* +X86013752Y-118225449D01* +X85670895Y-117463544D02* +X85632800Y-117425449D01* +X85594705Y-117349258D01* +X85594705Y-117158782D01* +X85632800Y-117082592D01* +X85670895Y-117044496D01* +X85747086Y-117006401D01* +X85823276Y-117006401D01* +X85937562Y-117044496D01* +X86394705Y-117501639D01* +X86394705Y-117006401D01* +X86394705Y-116625449D02* +X86394705Y-116473068D01* +X86356610Y-116396877D01* +X86318514Y-116358782D01* +X86204229Y-116282591D01* +X86051848Y-116244496D01* +X85747086Y-116244496D01* +X85670895Y-116282591D01* +X85632800Y-116320687D01* +X85594705Y-116396877D01* +X85594705Y-116549258D01* +X85632800Y-116625449D01* +X85670895Y-116663544D01* +X85747086Y-116701639D01* +X85937562Y-116701639D01* +X86013752Y-116663544D01* +X86051848Y-116625449D01* +X86089943Y-116549258D01* +X86089943Y-116396877D01* +X86051848Y-116320687D01* +X86013752Y-116282591D01* +X85937562Y-116244496D01* +X86651245Y-124908246D02* +X86270292Y-125174913D01* +X86651245Y-125365389D02* +X85851245Y-125365389D01* +X85851245Y-125060627D01* +X85889340Y-124984436D01* +X85927435Y-124946341D01* +X86003626Y-124908246D01* +X86117911Y-124908246D01* +X86194102Y-124946341D01* +X86232197Y-124984436D01* +X86270292Y-125060627D01* +X86270292Y-125365389D01* +X85851245Y-124641579D02* +X85851245Y-124146341D01* +X86156007Y-124413008D01* +X86156007Y-124298722D01* +X86194102Y-124222532D01* +X86232197Y-124184436D01* +X86308388Y-124146341D01* +X86498864Y-124146341D01* +X86575054Y-124184436D01* +X86613150Y-124222532D01* +X86651245Y-124298722D01* +X86651245Y-124527294D01* +X86613150Y-124603484D01* +X86575054Y-124641579D01* +X85851245Y-123651103D02* +X85851245Y-123574912D01* +X85889340Y-123498722D01* +X85927435Y-123460627D01* +X86003626Y-123422531D01* +X86156007Y-123384436D01* +X86346483Y-123384436D01* +X86498864Y-123422531D01* +X86575054Y-123460627D01* +X86613150Y-123498722D01* +X86651245Y-123574912D01* +X86651245Y-123651103D01* +X86613150Y-123727293D01* +X86575054Y-123765389D01* +X86498864Y-123803484D01* +X86346483Y-123841579D01* +X86156007Y-123841579D01* +X86003626Y-123803484D01* +X85927435Y-123765389D01* +X85889340Y-123727293D01* +X85851245Y-123651103D01* +X111493836Y-106440025D02* +X111493836Y-107087644D01* +X111531931Y-107163834D01* +X111570027Y-107201930D01* +X111646217Y-107240025D01* +X111798598Y-107240025D01* +X111874789Y-107201930D01* +X111912884Y-107163834D01* +X111950979Y-107087644D01* +X111950979Y-106440025D01* +X112750979Y-107240025D02* +X112293836Y-107240025D01* +X112522407Y-107240025D02* +X112522407Y-106440025D01* +X112446217Y-106554310D01* +X112370026Y-106630501D01* +X112293836Y-106668596D01* +X93884016Y-120237305D02* +X93884016Y-120884924D01* +X93922111Y-120961114D01* +X93960207Y-120999210D01* +X94036397Y-121037305D01* +X94188778Y-121037305D01* +X94264969Y-120999210D01* +X94303064Y-120961114D01* +X94341159Y-120884924D01* +X94341159Y-120237305D01* +X94684016Y-120313495D02* +X94722111Y-120275400D01* +X94798302Y-120237305D01* +X94988778Y-120237305D01* +X95064968Y-120275400D01* +X95103064Y-120313495D01* +X95141159Y-120389686D01* +X95141159Y-120465876D01* +X95103064Y-120580162D01* +X94645921Y-121037305D01* +X95141159Y-121037305D01* +X88950876Y-120387165D02* +X88950876Y-121034784D01* +X88988971Y-121110974D01* +X89027067Y-121149070D01* +X89103257Y-121187165D01* +X89255638Y-121187165D01* +X89331829Y-121149070D01* +X89369924Y-121110974D01* +X89408019Y-121034784D01* +X89408019Y-120387165D01* +X89712781Y-120387165D02* +X90208019Y-120387165D01* +X89941352Y-120691927D01* +X90055638Y-120691927D01* +X90131828Y-120730022D01* +X90169924Y-120768117D01* +X90208019Y-120844308D01* +X90208019Y-121034784D01* +X90169924Y-121110974D01* +X90131828Y-121149070D01* +X90055638Y-121187165D01* +X89827066Y-121187165D01* +X89750876Y-121149070D01* +X89712781Y-121110974D01* +X108151196Y-97069965D02* +X108151196Y-97717584D01* +X108189291Y-97793774D01* +X108227387Y-97831870D01* +X108303577Y-97869965D01* +X108455958Y-97869965D01* +X108532149Y-97831870D01* +X108570244Y-97793774D01* +X108608339Y-97717584D01* +X108608339Y-97069965D01* +X109332148Y-97336631D02* +X109332148Y-97869965D01* +X109141672Y-97031870D02* +X108951196Y-97603298D01* +X109446434Y-97603298D01* +X112864054Y-112607073D02* +X112902150Y-112645168D01* +X112940245Y-112759454D01* +X112940245Y-112835644D01* +X112902150Y-112949930D01* +X112825959Y-113026121D01* +X112749769Y-113064216D01* +X112597388Y-113102311D01* +X112483102Y-113102311D01* +X112330721Y-113064216D01* +X112254530Y-113026121D01* +X112178340Y-112949930D01* +X112140245Y-112835644D01* +X112140245Y-112759454D01* +X112178340Y-112645168D01* +X112216435Y-112607073D01* +X112140245Y-111921359D02* +X112140245Y-112073740D01* +X112178340Y-112149930D01* +X112216435Y-112188025D01* +X112330721Y-112264216D01* +X112483102Y-112302311D01* +X112787864Y-112302311D01* +X112864054Y-112264216D01* +X112902150Y-112226121D01* +X112940245Y-112149930D01* +X112940245Y-111997549D01* +X112902150Y-111921359D01* +X112864054Y-111883263D01* +X112787864Y-111845168D01* +X112597388Y-111845168D01* +X112521197Y-111883263D01* +X112483102Y-111921359D01* +X112445007Y-111997549D01* +X112445007Y-112149930D01* +X112483102Y-112226121D01* +X112521197Y-112264216D01* +X112597388Y-112302311D01* +X89887214Y-99198413D02* +X89925310Y-99236508D01* +X89963405Y-99350794D01* +X89963405Y-99426984D01* +X89925310Y-99541270D01* +X89849119Y-99617461D01* +X89772929Y-99655556D01* +X89620548Y-99693651D01* +X89506262Y-99693651D01* +X89353881Y-99655556D01* +X89277690Y-99617461D01* +X89201500Y-99541270D01* +X89163405Y-99426984D01* +X89163405Y-99350794D01* +X89201500Y-99236508D01* +X89239595Y-99198413D01* +X89963405Y-98817461D02* +X89963405Y-98665080D01* +X89925310Y-98588889D01* +X89887214Y-98550794D01* +X89772929Y-98474603D01* +X89620548Y-98436508D01* +X89315786Y-98436508D01* +X89239595Y-98474603D01* +X89201500Y-98512699D01* +X89163405Y-98588889D01* +X89163405Y-98741270D01* +X89201500Y-98817461D01* +X89239595Y-98855556D01* +X89315786Y-98893651D01* +X89506262Y-98893651D01* +X89582452Y-98855556D01* +X89620548Y-98817461D01* +X89658643Y-98741270D01* +X89658643Y-98588889D01* +X89620548Y-98512699D01* +X89582452Y-98474603D01* +X89506262Y-98436508D01* +X91124185Y-107382236D02* +X90324185Y-107382236D01* +X90324185Y-107077474D01* +X90362280Y-107001283D01* +X90400375Y-106963188D01* +X90476566Y-106925093D01* +X90590851Y-106925093D01* +X90667042Y-106963188D01* +X90705137Y-107001283D01* +X90743232Y-107077474D01* +X90743232Y-107382236D01* +X90324185Y-106658426D02* +X90324185Y-106125093D01* +X91124185Y-106467950D01* +X91149585Y-105086029D02* +X90349585Y-105086029D01* +X90349585Y-104781267D01* +X90387680Y-104705076D01* +X90425775Y-104666981D01* +X90501966Y-104628886D01* +X90616251Y-104628886D01* +X90692442Y-104666981D01* +X90730537Y-104705076D01* +X90768632Y-104781267D01* +X90768632Y-105086029D01* +X91149585Y-103866981D02* +X91149585Y-104324124D01* +X91149585Y-104095553D02* +X90349585Y-104095553D01* +X90463870Y-104171743D01* +X90540061Y-104247934D01* +X90578156Y-104324124D01* +X90349585Y-103371743D02* +X90349585Y-103295552D01* +X90387680Y-103219362D01* +X90425775Y-103181267D01* +X90501966Y-103143171D01* +X90654347Y-103105076D01* +X90844823Y-103105076D01* +X90997204Y-103143171D01* +X91073394Y-103181267D01* +X91111490Y-103219362D01* +X91149585Y-103295552D01* +X91149585Y-103371743D01* +X91111490Y-103447933D01* +X91073394Y-103486029D01* +X90997204Y-103524124D01* +X90844823Y-103562219D01* +X90654347Y-103562219D01* +X90501966Y-103524124D01* +X90425775Y-103486029D01* +X90387680Y-103447933D01* +X90349585Y-103371743D01* +M02* diff --git a/PCB/OUTPUT_V4/OUTPUT_V4.zip b/PCB/OUTPUT_V4/OUTPUT_V4.zip new file mode 100644 index 0000000000000000000000000000000000000000..8e2a84d505057436e8b372599093a07c250e6700 GIT binary patch literal 29627 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 H&(;3{#$pIH literal 0 HcmV?d00001 diff --git a/PCB/OUTPUT_V4/itead/Tinylab_proto1-B.Cu.gbr b/PCB/OUTPUT_V4/itead/Tinylab_proto1-B.Cu.gbr new file mode 100644 index 00000000..4db900d5 --- /dev/null +++ b/PCB/OUTPUT_V4/itead/Tinylab_proto1-B.Cu.gbr @@ -0,0 +1,496 @@ +G04 #@! TF.FileFunction,Copper,L2,Bot,Signal* +%FSLAX46Y46*% +G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* +G04 Created by KiCad (PCBNEW 4.0.1-stable) date 25/03/2016 9:42:23 AM* +%MOMM*% +G01* +G04 APERTURE LIST* +%ADD10C,0.100000*% +%ADD11C,1.300000*% +%ADD12R,1.300000X1.300000*% +%ADD13C,1.998980*% +%ADD14R,1.998980X1.998980*% +%ADD15R,1.905000X1.905000*% +%ADD16C,1.905000*% +%ADD17R,2.032000X2.032000*% +%ADD18O,2.032000X2.032000*% +%ADD19O,0.950000X1.250000*% +%ADD20O,1.550000X1.000000*% +%ADD21R,2.032000X1.727200*% +%ADD22O,2.032000X1.727200*% +%ADD23R,1.727200X1.727200*% +%ADD24O,1.727200X1.727200*% +%ADD25C,0.600000*% +%ADD26C,0.635000*% +%ADD27C,1.270000*% +%ADD28C,0.400000*% +%ADD29C,0.250000*% +G04 APERTURE END LIST* +D10* +D11* +X87670000Y-111760000D03* +D12* +X90170000Y-111760000D03* +D13* +X93342460Y-96520000D03* +D14* +X93342460Y-106680000D03* +D15* +X80444800Y-97917000D03* +D16* +X80444800Y-102997000D03* +D17* +X105918000Y-124460000D03* +D18* +X103378000Y-124460000D03* +D19* +X111340460Y-103110300D03* +X111340460Y-98110300D03* +D20* +X114040460Y-104110300D03* +X114040460Y-97110300D03* +D21* +X80444800Y-113157000D03* +D22* +X80444800Y-110617000D03* +X80444800Y-108077000D03* +X80444800Y-105537000D03* +D23* +X113795000Y-124307600D03* +D24* +X111255000Y-124307600D03* +X113795000Y-121767600D03* +X111255000Y-121767600D03* +D17* +X105918000Y-116840000D03* +D18* +X103378000Y-116840000D03* +D21* +X80444800Y-115697000D03* +D22* +X80444800Y-118237000D03* +X80444800Y-120777000D03* +X80444800Y-123317000D03* +D17* +X113706100Y-118224300D03* +D18* +X111166100Y-118224300D03* +D17* +X103378000Y-119380000D03* +D18* +X103378000Y-121920000D03* +D17* +X90604800Y-106807000D03* +D18* +X88064800Y-106807000D03* +D17* +X90604800Y-104267000D03* +D18* +X88064800Y-104267000D03* +D25* +X112588500Y-101955600D03* +X91328700Y-98298000D03* +X112464800Y-107982000D03* +X105123440Y-112872520D03* +X101886498Y-113662460D03* +X111623300Y-106781600D03* +X103261620Y-108000800D03* +X102108000Y-99631500D03* +X105283000Y-99631500D03* +X94488000Y-123698000D03* +X99822000Y-115887500D03* +X85623400Y-120980200D03* +X85572600Y-105791000D03* +X110670800Y-113271300D03* +X98008900Y-115062000D03* +X114645900Y-115150900D03* +X90805000Y-101757598D03* +X107462780Y-108071920D03* +X104455420Y-104861360D03* +X98918220Y-99969320D03* +X87691420Y-101833680D03* +X103342900Y-112852200D03* +X98542300Y-113715800D03* +X107020820Y-105272840D03* +X90376200Y-118778020D03* +X106304540Y-103946960D03* +X89202720Y-122577860D03* +X105524760Y-103398320D03* +X93401340Y-116707920D03* +X104518920Y-104061260D03* +X93508020Y-121406920D03* +X99685300Y-102095300D03* +X110061200Y-101574600D03* +X110200900Y-100622100D03* +X98580400Y-103251000D03* +X95504000Y-104203500D03* +X91503500Y-108140500D03* +X95567500Y-105283000D03* +X91821000Y-108966000D03* +X96500140Y-109118400D03* +X86357920Y-114985800D03* +X107914800Y-115332000D03* +X107889800Y-111582000D03* +X98314800Y-111907000D03* +X101289800Y-108132000D03* +X109514800Y-111107000D03* +X109439800Y-115332000D03* +X104397000Y-111544100D03* +X95697500Y-121462800D03* +X107124500Y-115125500D03* +X101790500Y-119888000D03* +X110378700Y-96428560D03* +X110134860Y-97434400D03* +X90500200Y-122605800D03* +X90474800Y-124256800D03* +X88976200Y-118872000D03* +X90449400Y-116586000D03* +X90678000Y-125095000D03* +X86918800Y-125120400D03* +D26* +X112588500Y-101523800D02* +X112588500Y-101955600D01* +X109438900Y-98374200D02* +X112588500Y-101523800D01* +D27* +X91404900Y-98374200D02* +X109438900Y-98374200D01* +D26* +X91328700Y-98298000D02* +X91404900Y-98374200D01* +D27* +X105123440Y-112872520D02* +X109399280Y-112872520D01* +X112464800Y-110132000D02* +X112464800Y-107982000D01* +X111014800Y-111582000D02* +X112464800Y-110132000D01* +X110689800Y-111582000D02* +X111014800Y-111582000D01* +X109399280Y-112872520D02* +X110689800Y-111582000D01* +D26* +X104300480Y-113695480D02* +X105123440Y-112872520D01* +X101919518Y-113695480D02* +X104300480Y-113695480D01* +X101886498Y-113662460D02* +X101919518Y-113695480D01* +X114040460Y-104110300D02* +X112340460Y-104110300D01* +X112340460Y-104110300D02* +X111340460Y-103110300D01* +X109146800Y-109258100D02* +X111623300Y-106781600D01* +X107145280Y-109258100D02* +X109146800Y-109258100D01* +X105860040Y-107972860D02* +X107145280Y-109258100D01* +X103289560Y-107972860D02* +X105860040Y-107972860D01* +X103261620Y-108000800D02* +X103289560Y-107972860D01* +D28* +X102298500Y-99822000D02* +X102108000Y-99631500D01* +X105092500Y-99822000D02* +X102298500Y-99822000D01* +X105283000Y-99631500D02* +X105092500Y-99822000D01* +D26* +X95631000Y-123698000D02* +X94488000Y-123698000D01* +X96139000Y-124206000D02* +X95631000Y-123698000D01* +X97028000Y-124206000D02* +X96139000Y-124206000D01* +X98171000Y-123063000D02* +X97028000Y-124206000D01* +X98171000Y-116713000D02* +X98171000Y-123063000D01* +X99060000Y-115887500D02* +X98171000Y-116713000D01* +X99822000Y-115887500D02* +X99060000Y-115887500D01* +D29* +X85623400Y-105841800D02* +X85623400Y-120980200D01* +X85572600Y-105791000D02* +X85623400Y-105841800D01* +D26* +X109896100Y-114046000D02* +X110670800Y-113271300D01* +X106721100Y-114046000D02* +X109896100Y-114046000D01* +X106213100Y-114554000D02* +X106721100Y-114046000D01* +X98516900Y-114554000D02* +X106213100Y-114554000D01* +X98008900Y-115062000D02* +X98516900Y-114554000D01* +D28* +X113795000Y-124307600D02* +X114049000Y-124307600D01* +X114049000Y-124307600D02* +X115687300Y-122669300D01* +X115687300Y-122669300D02* +X115687300Y-116192300D01* +X115687300Y-116192300D02* +X114645900Y-115150900D01* +D27* +X90805000Y-101757598D02* +X90805000Y-103505000D01* +X90805000Y-103505000D02* +X90170000Y-104140000D01* +X87630000Y-104140000D02* +X90170000Y-104140000D01* +X87630000Y-106680000D02* +X87630000Y-104140000D01* +X87670000Y-111760000D02* +X87670000Y-106720000D01* +X87670000Y-106720000D02* +X87630000Y-106680000D01* +X90170000Y-106680000D02* +X93342460Y-106680000D01* +X90170000Y-111760000D02* +X90170000Y-106680000D01* +X93342460Y-96520000D02* +X81280000Y-96520000D01* +X81280000Y-96520000D02* +X80010000Y-97790000D01* +D29* +X107157980Y-107767120D02* +X107462780Y-108071920D01* +X107157980Y-106324400D02* +X107157980Y-107767120D01* +X105796540Y-104962960D02* +X107157980Y-106324400D01* +X104557020Y-104962960D02* +X105796540Y-104962960D01* +X104455420Y-104861360D02* +X104557020Y-104962960D01* +X94371620Y-99969320D02* +X98918220Y-99969320D01* +X93726460Y-100614480D02* +X94371620Y-99969320D01* +X88910620Y-100614480D02* +X93726460Y-100614480D01* +X87691420Y-101833680D02* +X88910620Y-100614480D01* +X102733300Y-112242600D02* +X103342900Y-112852200D01* +X100015500Y-112242600D02* +X102733300Y-112242600D01* +X98542300Y-113715800D02* +X100015500Y-112242600D01* +X107020820Y-102816660D02* +X107020820Y-105272840D01* +X106477260Y-102273100D02* +X107020820Y-102816660D01* +X101067060Y-102273100D02* +X106477260Y-102273100D01* +X98895360Y-104444800D02* +X101067060Y-102273100D01* +X98895360Y-107759500D02* +X98895360Y-104444800D01* +X91389660Y-115265200D02* +X98895360Y-107759500D01* +X91389660Y-117764560D02* +X91389660Y-115265200D01* +X90376200Y-118778020D02* +X91389660Y-117764560D01* +X106304540Y-102971600D02* +X106304540Y-103946960D01* +X106081020Y-102748080D02* +X106304540Y-102971600D01* +X101305820Y-102748080D02* +X106081020Y-102748080D01* +X99444000Y-104609900D02* +X101305820Y-102748080D01* +X99444000Y-107950000D02* +X99444000Y-104609900D01* +X91839662Y-115554338D02* +X99444000Y-107950000D01* +X91839662Y-118259438D02* +X91839662Y-115554338D01* +X90493040Y-119606060D02* +X91839662Y-118259438D01* +X89065560Y-119606060D02* +X90493040Y-119606060D01* +X88059720Y-120611900D02* +X89065560Y-119606060D01* +X88059720Y-121983500D02* +X88059720Y-120611900D01* +X88595660Y-122519440D02* +X88059720Y-121983500D01* +X89144300Y-122519440D02* +X88595660Y-122519440D01* +X89202720Y-122577860D02* +X89144300Y-122519440D01* +X101846840Y-103398320D02* +X105524760Y-103398320D01* +X100076460Y-105168700D02* +X101846840Y-103398320D01* +X100076460Y-108280200D02* +X100076460Y-105168700D01* +X93624860Y-114731800D02* +X100076460Y-108280200D01* +X93624860Y-116484400D02* +X93624860Y-114731800D01* +X93401340Y-116707920D02* +X93624860Y-116484400D01* +X102395480Y-104061260D02* +X104518920Y-104061260D01* +X100647960Y-105808780D02* +X102395480Y-104061260D01* +X100647960Y-108597700D02* +X100647960Y-105808780D01* +X94323360Y-114922300D02* +X100647960Y-108597700D01* +X94323360Y-120591580D02* +X94323360Y-114922300D01* +X93508020Y-121406920D02* +X94323360Y-120591580D01* +D28* +X99685300Y-101831702D02* +X99685300Y-102095300D01* +X100294900Y-101222102D02* +X99685300Y-101831702D01* +X109708702Y-101222102D02* +X100294900Y-101222102D01* +X110061200Y-101574600D02* +X109708702Y-101222102D01* +X99863100Y-100622100D02* +X110200900Y-100622100D01* +X98885200Y-101600000D02* +X99863100Y-100622100D01* +X98885200Y-102946200D02* +X98885200Y-101600000D01* +X98580400Y-103251000D02* +X98885200Y-102946200D01* +D29* +X94932500Y-104775000D02* +X95504000Y-104203500D01* +X94932500Y-107823000D02* +X94932500Y-104775000D01* +X94678500Y-108077000D02* +X94932500Y-107823000D01* +X91567000Y-108077000D02* +X94678500Y-108077000D01* +X91503500Y-108140500D02* +X91567000Y-108077000D01* +X95567500Y-107886500D02* +X95567500Y-105283000D01* +X94926998Y-108527002D02* +X95567500Y-107886500D01* +X92259998Y-108527002D02* +X94926998Y-108527002D01* +X91821000Y-108966000D02* +X92259998Y-108527002D01* +X94851680Y-110766860D02* +X96500140Y-109118400D01* +X93314980Y-110766860D02* +X94851680Y-110766860D01* +X90381280Y-113700560D02* +X93314980Y-110766860D01* +X87643160Y-113700560D02* +X90381280Y-113700560D01* +X86357920Y-114985800D02* +X87643160Y-113700560D01* +X111255000Y-124307600D02* +X110865400Y-124307600D01* +X110865400Y-124307600D02* +X107914800Y-121357000D01* +X107914800Y-121357000D02* +X107914800Y-115332000D01* +X107889800Y-111582000D02* +X106964800Y-110657000D01* +X106964800Y-110657000D02* +X99514800Y-110657000D01* +X99514800Y-110657000D02* +X98447171Y-111724629D01* +X98447171Y-111724629D02* +X98447171Y-111774629D01* +X98447171Y-111774629D02* +X98314800Y-111907000D01* +X111255000Y-121767600D02* +X111255000Y-120772200D01* +X103189800Y-110032000D02* +X101289800Y-108132000D01* +X108439800Y-110032000D02* +X103189800Y-110032000D01* +X109514800Y-111107000D02* +X108439800Y-110032000D01* +X109439800Y-118957000D02* +X109439800Y-115332000D01* +X111255000Y-120772200D02* +X109439800Y-118957000D01* +X99825000Y-111544100D02* +X104397000Y-111544100D01* +X95189500Y-116179600D02* +X99825000Y-111544100D01* +X95189500Y-120954800D02* +X95189500Y-116179600D01* +X95697500Y-121462800D02* +X95189500Y-120954800D01* +D28* +X106870500Y-115379500D02* +X107124500Y-115125500D01* +X102489000Y-115379500D02* +X106870500Y-115379500D01* +X101917500Y-115951000D02* +X102489000Y-115379500D01* +X101917500Y-119761000D02* +X101917500Y-115951000D01* +X101790500Y-119888000D02* +X101917500Y-119761000D01* +D29* +X113706100Y-118224300D02* +X113706100Y-112379760D01* +X112116060Y-96428560D02* +X110378700Y-96428560D01* +X112764182Y-97076682D02* +X112116060Y-96428560D01* +X112764182Y-98204442D02* +X112764182Y-97076682D01* +X116002260Y-101442520D02* +X112764182Y-98204442D01* +X116002260Y-110083600D02* +X116002260Y-101442520D01* +X113706100Y-112379760D02* +X116002260Y-110083600D01* +X111166100Y-118224300D02* +X111166100Y-114066320D01* +X110515860Y-97053400D02* +X110134860Y-97434400D01* +X111872220Y-97053400D02* +X110515860Y-97053400D01* +X112314180Y-97495360D02* +X111872220Y-97053400D01* +X112314180Y-98668840D02* +X112314180Y-97495360D01* +X115346940Y-101701600D02* +X112314180Y-98668840D01* +X115346940Y-109885480D02* +X115346940Y-101701600D01* +X111166100Y-114066320D02* +X115346940Y-109885480D01* +X90500200Y-124231400D02* +X90500200Y-122605800D01* +X90474800Y-124256800D02* +X90500200Y-124231400D01* +X89103200Y-118745000D02* +X88976200Y-118872000D01* +X89433400Y-118745000D02* +X89103200Y-118745000D01* +X90525600Y-117652800D02* +X89433400Y-118745000D01* +X90525600Y-116662200D02* +X90525600Y-117652800D01* +X90449400Y-116586000D02* +X90525600Y-116662200D01* +X86944200Y-125095000D02* +X90678000Y-125095000D01* +X86918800Y-125120400D02* +X86944200Y-125095000D01* +M02* diff --git a/PCB/OUTPUT_V4/itead/Tinylab_proto1-B.Mask.gbr b/PCB/OUTPUT_V4/itead/Tinylab_proto1-B.Mask.gbr new file mode 100644 index 00000000..e4bb5dcc --- /dev/null +++ b/PCB/OUTPUT_V4/itead/Tinylab_proto1-B.Mask.gbr @@ -0,0 +1,85 @@ +G04 #@! TF.FileFunction,Soldermask,Bot* +%FSLAX46Y46*% +G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* +G04 Created by KiCad (PCBNEW 4.0.1-stable) date 25/03/2016 9:42:23 AM* +%MOMM*% +G01* +G04 APERTURE LIST* +%ADD10C,0.100000*% +%ADD11C,1.300000*% +%ADD12R,1.300000X1.300000*% +%ADD13C,1.998980*% +%ADD14R,1.998980X1.998980*% +%ADD15R,1.905000X1.905000*% +%ADD16C,1.905000*% +%ADD17R,2.032000X2.032000*% +%ADD18O,2.032000X2.032000*% +%ADD19O,0.950000X1.250000*% +%ADD20O,1.550000X1.000000*% +%ADD21R,2.032000X1.727200*% +%ADD22O,2.032000X1.727200*% +%ADD23R,1.727200X1.727200*% +%ADD24O,1.727200X1.727200*% +G04 APERTURE END LIST* +D10* +D11* +X87670000Y-111760000D03* +D12* +X90170000Y-111760000D03* +D13* +X93342460Y-96520000D03* +D14* +X93342460Y-106680000D03* +D15* +X80444800Y-97917000D03* +D16* +X80444800Y-102997000D03* +D17* +X105918000Y-124460000D03* +D18* +X103378000Y-124460000D03* +D19* +X111340460Y-103110300D03* +X111340460Y-98110300D03* +D20* +X114040460Y-104110300D03* +X114040460Y-97110300D03* +D21* +X80444800Y-113157000D03* +D22* +X80444800Y-110617000D03* +X80444800Y-108077000D03* +X80444800Y-105537000D03* +D23* +X113795000Y-124307600D03* +D24* +X111255000Y-124307600D03* +X113795000Y-121767600D03* +X111255000Y-121767600D03* +D17* +X105918000Y-116840000D03* +D18* +X103378000Y-116840000D03* +D21* +X80444800Y-115697000D03* +D22* +X80444800Y-118237000D03* +X80444800Y-120777000D03* +X80444800Y-123317000D03* +D17* +X113706100Y-118224300D03* +D18* +X111166100Y-118224300D03* +D17* +X103378000Y-119380000D03* +D18* +X103378000Y-121920000D03* +D17* +X90604800Y-106807000D03* +D18* +X88064800Y-106807000D03* +D17* +X90604800Y-104267000D03* +D18* +X88064800Y-104267000D03* +M02* diff --git a/PCB/OUTPUT_V4/itead/Tinylab_proto1-Edge.Cuts.gbr b/PCB/OUTPUT_V4/itead/Tinylab_proto1-Edge.Cuts.gbr new file mode 100644 index 00000000..5f0024ea --- /dev/null +++ b/PCB/OUTPUT_V4/itead/Tinylab_proto1-Edge.Cuts.gbr @@ -0,0 +1,21 @@ +G04 #@! TF.FileFunction,Profile,NP* +%FSLAX46Y46*% +G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* +G04 Created by KiCad (PCBNEW 4.0.1-stable) date 25/03/2016 9:42:23 AM* +%MOMM*% +G01* +G04 APERTURE LIST* +%ADD10C,0.100000*% +G04 APERTURE END LIST* +D10* +X78791260Y-126093220D02* +X116936980Y-126093220D01* +X78783640Y-95196660D02* +X116942060Y-95196660D01* +X78786180Y-126090680D02* +X78786180Y-95201740D01* +X116939800Y-95882000D02* +X116939800Y-95207000D01* +X116939800Y-95882000D02* +X116939800Y-126107000D01* +M02* diff --git a/PCB/OUTPUT_V4/itead/Tinylab_proto1-F.Cu.gbr b/PCB/OUTPUT_V4/itead/Tinylab_proto1-F.Cu.gbr new file mode 100644 index 00000000..cb3b5d51 --- /dev/null +++ b/PCB/OUTPUT_V4/itead/Tinylab_proto1-F.Cu.gbr @@ -0,0 +1,1504 @@ +G04 #@! TF.FileFunction,Copper,L1,Top,Signal* +%FSLAX46Y46*% +G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* +G04 Created by KiCad (PCBNEW 4.0.1-stable) date 25/03/2016 9:42:22 AM* +%MOMM*% +G01* +G04 APERTURE LIST* +%ADD10C,0.100000*% +%ADD11R,0.800000X0.750000*% +%ADD12R,0.750000X0.800000*% +%ADD13C,1.300000*% +%ADD14R,1.300000X1.300000*% +%ADD15C,1.998980*% +%ADD16R,1.998980X1.998980*% +%ADD17R,1.600000X1.000000*% +%ADD18R,1.600000X0.560000*% +%ADD19R,0.560000X1.600000*% +%ADD20R,1.905000X1.905000*% +%ADD21C,1.905000*% +%ADD22R,0.900000X2.500000*% +%ADD23R,2.500000X0.900000*% +%ADD24R,2.032000X2.032000*% +%ADD25O,2.032000X2.032000*% +%ADD26R,1.350000X0.400000*% +%ADD27O,0.950000X1.250000*% +%ADD28O,1.550000X1.000000*% +%ADD29R,2.032000X1.727200*% +%ADD30O,2.032000X1.727200*% +%ADD31R,1.727200X1.727200*% +%ADD32O,1.727200X1.727200*% +%ADD33R,0.600000X0.900000*% +%ADD34R,0.900000X0.500000*% +%ADD35R,0.500000X0.900000*% +%ADD36R,0.900000X0.600000*% +%ADD37R,1.500000X0.600000*% +%ADD38R,0.304800X0.508000*% +%ADD39R,1.600200X2.999740*% +%ADD40R,1.600200X2.600960*% +%ADD41C,0.600000*% +%ADD42C,0.250000*% +%ADD43C,0.635000*% +%ADD44C,1.270000*% +%ADD45C,0.400000*% +G04 APERTURE END LIST* +D10* +X108411229Y-125167714D02* +X108839800Y-125167714D01* +X108925514Y-125196286D01* +X108982657Y-125253429D01* +X109011229Y-125339143D01* +X109011229Y-125396286D01* +X108696943Y-124882000D02* +X108696943Y-124682000D01* +X109011229Y-124596286D02* +X109011229Y-124882000D01* +X108411229Y-124882000D01* +X108411229Y-124596286D01* +X109011229Y-124339143D02* +X108411229Y-124339143D01* +X109011229Y-123996286D01* +X108411229Y-123996286D01* +X108411229Y-123339143D02* +X108411229Y-122996286D01* +X109011229Y-123167715D02* +X108411229Y-123167715D01* +X109011229Y-122796286D02* +X108411229Y-122796286D01* +X109011229Y-122510572D02* +X108411229Y-122510572D01* +X109011229Y-122167715D01* +X108411229Y-122167715D01* +X108725514Y-121767715D02* +X109011229Y-121767715D01* +X108411229Y-121967715D02* +X108725514Y-121767715D01* +X108411229Y-121567715D01* +X109011229Y-121082001D02* +X109011229Y-121367715D01* +X108411229Y-121367715D01* +X108839800Y-120910572D02* +X108839800Y-120624858D01* +X109011229Y-120967715D02* +X108411229Y-120767715D01* +X109011229Y-120567715D01* +X108696943Y-120167715D02* +X108725514Y-120082001D01* +X108754086Y-120053429D01* +X108811229Y-120024858D01* +X108896943Y-120024858D01* +X108954086Y-120053429D01* +X108982657Y-120082001D01* +X109011229Y-120139143D01* +X109011229Y-120367715D01* +X108411229Y-120367715D01* +X108411229Y-120167715D01* +X108439800Y-120110572D01* +X108468371Y-120082001D01* +X108525514Y-120053429D01* +X108582657Y-120053429D01* +X108639800Y-120082001D01* +X108668371Y-120110572D01* +X108696943Y-120167715D01* +X108696943Y-120367715D01* +X108411229Y-119396286D02* +X109011229Y-119196286D01* +X108411229Y-118996286D01* +X108611229Y-118539143D02* +X109011229Y-118539143D01* +X108382657Y-118682000D02* +X108811229Y-118824857D01* +X108811229Y-118453429D01* +X108782657Y-117767714D02* +X108782657Y-117310571D01* +X109011229Y-116567714D02* +X108411229Y-116567714D01* +X108411229Y-116424857D01* +X108439800Y-116339142D01* +X108496943Y-116282000D01* +X108554086Y-116253428D01* +X108668371Y-116224857D01* +X108754086Y-116224857D01* +X108868371Y-116253428D01* +X108925514Y-116282000D01* +X108982657Y-116339142D01* +X109011229Y-116424857D01* +X109011229Y-116567714D01* +X108696943Y-115967714D02* +X108696943Y-115767714D01* +X109011229Y-115682000D02* +X109011229Y-115967714D01* +X108411229Y-115967714D01* +X108411229Y-115682000D01* +X108696943Y-114967714D02* +X108696943Y-114767714D01* +X109011229Y-114682000D02* +X109011229Y-114967714D01* +X108411229Y-114967714D01* +X108411229Y-114682000D01* +X108982657Y-114453428D02* +X109011229Y-114367714D01* +X109011229Y-114224857D01* +X108982657Y-114167714D01* +X108954086Y-114139143D01* +X108896943Y-114110571D01* +X108839800Y-114110571D01* +X108782657Y-114139143D01* +X108754086Y-114167714D01* +X108725514Y-114224857D01* +X108696943Y-114339143D01* +X108668371Y-114396285D01* +X108639800Y-114424857D01* +X108582657Y-114453428D01* +X108525514Y-114453428D01* +X108468371Y-114424857D01* +X108439800Y-114396285D01* +X108411229Y-114339143D01* +X108411229Y-114196285D01* +X108439800Y-114110571D01* +X109011229Y-113853428D02* +X108411229Y-113853428D01* +X108411229Y-113624856D01* +X108439800Y-113567714D01* +X108468371Y-113539142D01* +X108525514Y-113510571D01* +X108611229Y-113510571D01* +X108668371Y-113539142D01* +X108696943Y-113567714D01* +X108725514Y-113624856D01* +X108725514Y-113853428D01* +X108411229Y-113139142D02* +X108411229Y-113024856D01* +X108439800Y-112967714D01* +X108496943Y-112910571D01* +X108611229Y-112881999D01* +X108811229Y-112881999D01* +X108925514Y-112910571D01* +X108982657Y-112967714D01* +X109011229Y-113024856D01* +X109011229Y-113139142D01* +X108982657Y-113196285D01* +X108925514Y-113253428D01* +X108811229Y-113281999D01* +X108611229Y-113281999D01* +X108496943Y-113253428D01* +X108439800Y-113196285D01* +X108411229Y-113139142D01* +X108954086Y-112282000D02* +X108982657Y-112310571D01* +X109011229Y-112396285D01* +X109011229Y-112453428D01* +X108982657Y-112539143D01* +X108925514Y-112596285D01* +X108868371Y-112624857D01* +X108754086Y-112653428D01* +X108668371Y-112653428D01* +X108554086Y-112624857D01* +X108496943Y-112596285D01* +X108439800Y-112539143D01* +X108411229Y-112453428D01* +X108411229Y-112396285D01* +X108439800Y-112310571D01* +X108468371Y-112282000D01* +X108268371Y-112539143D02* +X108182657Y-112424857D01* +X108268371Y-112310571D01* +X108411229Y-111853428D02* +X108839800Y-111853428D01* +X108925514Y-111882000D01* +X108982657Y-111939143D01* +X109011229Y-112024857D01* +X109011229Y-112082000D01* +X108411229Y-111453428D02* +X108411229Y-111339142D01* +X108439800Y-111282000D01* +X108496943Y-111224857D01* +X108611229Y-111196285D01* +X108811229Y-111196285D01* +X108925514Y-111224857D01* +X108982657Y-111282000D01* +X109011229Y-111339142D01* +X109011229Y-111453428D01* +X108982657Y-111510571D01* +X108925514Y-111567714D01* +X108811229Y-111596285D01* +X108611229Y-111596285D01* +X108496943Y-111567714D01* +X108439800Y-111510571D01* +X108411229Y-111453428D01* +D11* +X106795000Y-122555000D03* +X105295000Y-122555000D03* +X106795000Y-118745000D03* +X105295000Y-118745000D03* +D12* +X114887200Y-107633200D03* +X114887200Y-106133200D03* +D11* +X114213400Y-109029500D03* +X115713400Y-109029500D03* +D12* +X104521000Y-114351500D03* +X104521000Y-112851500D03* +D11* +X95238000Y-115316000D03* +X93738000Y-115316000D03* +X102604000Y-111760000D03* +X101104000Y-111760000D03* +D12* +X86360000Y-98945000D03* +X86360000Y-100445000D03* +X95059500Y-107557000D03* +X95059500Y-106057000D03* +X82423000Y-118098000D03* +X82423000Y-116598000D03* +X82550000Y-124956000D03* +X82550000Y-123456000D03* +D13* +X87670000Y-111760000D03* +D14* +X90170000Y-111760000D03* +D12* +X92456000Y-113804000D03* +X92456000Y-115304000D03* +D15* +X93342460Y-96520000D03* +D16* +X93342460Y-106680000D03* +D17* +X93345000Y-103100000D03* +X93345000Y-100100000D03* +D18* +X108720000Y-108140000D03* +X108720000Y-107340000D03* +X108720000Y-106540000D03* +X108720000Y-105740000D03* +X108720000Y-104940000D03* +X108720000Y-104140000D03* +X108720000Y-103340000D03* +X108720000Y-102540000D03* +X108720000Y-101740000D03* +X108720000Y-100940000D03* +X108720000Y-100140000D03* +D19* +X106870000Y-98290000D03* +X106070000Y-98290000D03* +X105270000Y-98290000D03* +X104470000Y-98290000D03* +X103670000Y-98290000D03* +X102870000Y-98290000D03* +X102070000Y-98290000D03* +X101270000Y-98290000D03* +X100470000Y-98290000D03* +X99670000Y-98290000D03* +X98870000Y-98290000D03* +D18* +X97020000Y-100140000D03* +X97020000Y-100940000D03* +X97020000Y-101740000D03* +X97020000Y-102540000D03* +X97020000Y-103340000D03* +X97020000Y-104140000D03* +X97020000Y-104940000D03* +X97020000Y-105740000D03* +X97020000Y-106540000D03* +X97020000Y-107340000D03* +X97020000Y-108140000D03* +D19* +X98870000Y-109990000D03* +X99670000Y-109990000D03* +X100470000Y-109990000D03* +X101270000Y-109990000D03* +X102070000Y-109990000D03* +X102870000Y-109990000D03* +X103670000Y-109990000D03* +X104470000Y-109990000D03* +X105270000Y-109990000D03* +X106070000Y-109990000D03* +X106870000Y-109990000D03* +D20* +X80444800Y-97917000D03* +D21* +X80444800Y-102997000D03* +D22* +X96721000Y-112649000D03* +X99621000Y-112649000D03* +D23* +X93980000Y-112321000D03* +X93980000Y-109421000D03* +D24* +X105918000Y-124460000D03* +D25* +X103378000Y-124460000D03* +D26* +X111340460Y-101910300D03* +X111340460Y-101260300D03* +X111340460Y-100610300D03* +X111340460Y-99960300D03* +X111340460Y-99310300D03* +D27* +X111340460Y-103110300D03* +X111340460Y-98110300D03* +D28* +X114040460Y-104110300D03* +X114040460Y-97110300D03* +D29* +X80444800Y-113157000D03* +D30* +X80444800Y-110617000D03* +X80444800Y-108077000D03* +X80444800Y-105537000D03* +D31* +X113795000Y-124307600D03* +D32* +X111255000Y-124307600D03* +X113795000Y-121767600D03* +X111255000Y-121767600D03* +D24* +X105918000Y-116840000D03* +D25* +X103378000Y-116840000D03* +D29* +X80444800Y-115697000D03* +D30* +X80444800Y-118237000D03* +X80444800Y-120777000D03* +X80444800Y-123317000D03* +D24* +X113706100Y-118224300D03* +D25* +X111166100Y-118224300D03* +D24* +X103378000Y-119380000D03* +D25* +X103378000Y-121920000D03* +D33* +X96139000Y-96136000D03* +X97089000Y-98936000D03* +X95189000Y-98936000D03* +D34* +X99060000Y-122670000D03* +X99060000Y-121170000D03* +X99060000Y-118566500D03* +X99060000Y-120066500D03* +X100647500Y-122670000D03* +X100647500Y-121170000D03* +X100647500Y-120066500D03* +X100647500Y-118566500D03* +D35* +X105676000Y-114300000D03* +X107176000Y-114300000D03* +X105676000Y-112903000D03* +X107176000Y-112903000D03* +D34* +X82550000Y-105930000D03* +X82550000Y-107430000D03* +X82550000Y-108470000D03* +X82550000Y-109970000D03* +X82550000Y-111010000D03* +X82550000Y-112510000D03* +X82550000Y-113550000D03* +X82550000Y-115050000D03* +X84328000Y-107430000D03* +X84328000Y-105930000D03* +X84328000Y-109970000D03* +X84328000Y-108470000D03* +X84328000Y-112510000D03* +X84328000Y-111010000D03* +X84328000Y-115050000D03* +X84328000Y-113550000D03* +X89395300Y-123570300D03* +X89395300Y-125070300D03* +X87871300Y-123570300D03* +X87871300Y-125070300D03* +X89281000Y-117971000D03* +X89281000Y-116471000D03* +X87630000Y-117971000D03* +X87630000Y-116471000D03* +D35* +X86372000Y-119634000D03* +X87872000Y-119634000D03* +X86372000Y-121920000D03* +X87872000Y-121920000D03* +X98818000Y-124079000D03* +X100318000Y-124079000D03* +D34* +X84455000Y-117971000D03* +X84455000Y-116471000D03* +X84709000Y-123583000D03* +X84709000Y-125083000D03* +D35* +X83324000Y-119634000D03* +X84824000Y-119634000D03* +X83324000Y-121920000D03* +X84824000Y-121920000D03* +X85332000Y-102946200D03* +X83832000Y-102946200D03* +X83832000Y-104546400D03* +X85332000Y-104546400D03* +X100318000Y-116840000D03* +X98818000Y-116840000D03* +D34* +X85979000Y-116471000D03* +X85979000Y-117971000D03* +X86233000Y-123583000D03* +X86233000Y-125083000D03* +D36* +X113464800Y-106807000D03* +X110664800Y-107757000D03* +X110664800Y-105857000D03* +D37* +X97213400Y-124485400D03* +X97213400Y-123215400D03* +X97213400Y-121945400D03* +X97213400Y-120675400D03* +X97213400Y-119405400D03* +X97213400Y-118135400D03* +X97213400Y-116865400D03* +X91813400Y-116865400D03* +X91813400Y-118135400D03* +X91813400Y-119405400D03* +X91813400Y-120675400D03* +X91813400Y-121945400D03* +X91813400Y-123215400D03* +X91813400Y-124485400D03* +D38* +X90195400Y-119710200D03* +X88925400Y-119710200D03* +X90195400Y-121742200D03* +X89560400Y-119710200D03* +X88925400Y-121742200D03* +X89560400Y-121742200D03* +X108140500Y-98488500D03* +X109410500Y-98488500D03* +X108140500Y-96456500D03* +X108775500Y-98488500D03* +X109410500Y-96456500D03* +X108775500Y-96456500D03* +D39* +X112448800Y-114696240D03* +X112448800Y-110296960D03* +D40* +X89535000Y-97259140D03* +X89535000Y-100860860D03* +D24* +X90604800Y-106807000D03* +D25* +X88064800Y-106807000D03* +D24* +X90604800Y-104267000D03* +D25* +X88064800Y-104267000D03* +D41* +X112588500Y-101955600D03* +X91328700Y-98298000D03* +X112464800Y-107982000D03* +X105123440Y-112872520D03* +X101886498Y-113662460D03* +X111623300Y-106781600D03* +X103261620Y-108000800D03* +X102108000Y-99631500D03* +X105283000Y-99631500D03* +X94488000Y-123698000D03* +X99822000Y-115887500D03* +X85623400Y-120980200D03* +X85572600Y-105791000D03* +X110670800Y-113271300D03* +X98008900Y-115062000D03* +X114645900Y-115150900D03* +X90805000Y-101757598D03* +X107462780Y-108071920D03* +X104455420Y-104861360D03* +X98918220Y-99969320D03* +X87691420Y-101833680D03* +X103342900Y-112852200D03* +X98542300Y-113715800D03* +X107020820Y-105272840D03* +X90376200Y-118778020D03* +X106304540Y-103946960D03* +X89202720Y-122577860D03* +X105524760Y-103398320D03* +X93401340Y-116707920D03* +X104518920Y-104061260D03* +X93508020Y-121406920D03* +X99685300Y-102095300D03* +X110061200Y-101574600D03* +X110200900Y-100622100D03* +X98580400Y-103251000D03* +X95504000Y-104203500D03* +X91503500Y-108140500D03* +X95567500Y-105283000D03* +X91821000Y-108966000D03* +X96500140Y-109118400D03* +X86357920Y-114985800D03* +X107914800Y-115332000D03* +X107889800Y-111582000D03* +X98314800Y-111907000D03* +X101289800Y-108132000D03* +X109514800Y-111107000D03* +X109439800Y-115332000D03* +X104397000Y-111544100D03* +X95697500Y-121462800D03* +X107124500Y-115125500D03* +X101790500Y-119888000D03* +X110378700Y-96428560D03* +X110134860Y-97434400D03* +X90500200Y-122605800D03* +X90474800Y-124256800D03* +X88976200Y-118872000D03* +X90449400Y-116586000D03* +X90678000Y-125095000D03* +X86918800Y-125120400D03* +D42* +X99060000Y-121170000D02* +X99060000Y-121412000D01* +X99060000Y-121412000D02* +X99568000Y-121920000D01* +X99568000Y-121920000D02* +X101473000Y-121920000D01* +X101473000Y-121920000D02* +X101854000Y-122301000D01* +X101854000Y-122301000D02* +X101854000Y-122936000D01* +X101854000Y-122936000D02* +X103378000Y-124460000D01* +D43* +X106795000Y-122555000D02* +X106795000Y-123583000D01* +X105918000Y-124460000D02* +X103378000Y-124460000D01* +X106795000Y-123583000D02* +X105918000Y-124460000D01* +X104660000Y-121920000D02* +X105295000Y-122555000D01* +X103378000Y-121920000D02* +X104660000Y-121920000D01* +D42* +X99060000Y-120066500D02* +X99135500Y-120066500D01* +X99135500Y-120066500D02* +X99822000Y-119380000D01* +X99822000Y-119380000D02* +X101346000Y-119380000D01* +X101346000Y-119380000D02* +X101981000Y-118745000D01* +X101981000Y-118745000D02* +X101981000Y-117221000D01* +X101981000Y-117221000D02* +X102362000Y-116840000D01* +X102362000Y-116840000D02* +X103378000Y-116840000D01* +D43* +X106795000Y-118745000D02* +X106795000Y-117717000D01* +X106795000Y-117717000D02* +X105918000Y-116840000D01* +X105918000Y-116840000D02* +X103378000Y-116840000D01* +X104660000Y-119380000D02* +X105295000Y-118745000D01* +X103378000Y-119380000D02* +X104660000Y-119380000D01* +X89535000Y-97259140D02* +X90289840Y-97259140D01* +D44* +X90289840Y-97259140D02* +X91328700Y-98298000D01* +D43* +X112543200Y-101910300D02* +X112530500Y-101910300D01* +X112588500Y-101955600D02* +X112543200Y-101910300D01* +D45* +X113464800Y-106807000D02* +X113464800Y-107315000D01* +X113783000Y-107633200D02* +X114887200Y-107633200D01* +X113464800Y-107315000D02* +X113783000Y-107633200D01* +X111340460Y-101910300D02* +X112530500Y-101910300D01* +X113464800Y-105765600D02* +X113464800Y-106807000D01* +X112677400Y-104978200D02* +X113464800Y-105765600D01* +X112677400Y-102057200D02* +X112677400Y-104978200D01* +X112530500Y-101910300D02* +X112677400Y-102057200D01* +D44* +X86360000Y-98945000D02* +X87849140Y-98945000D01* +X87849140Y-98945000D02* +X89535000Y-97259140D01* +X80391000Y-102870000D02* +X84316000Y-98945000D01* +X84316000Y-98945000D02* +X86360000Y-98945000D01* +X112448800Y-107982000D02* +X112448800Y-110296960D01* +X112464800Y-107982000D02* +X112448800Y-107982000D01* +D43* +X99822000Y-115887500D02* +X99822000Y-115547600D01* +X101707140Y-113662460D02* +X101886498Y-113662460D01* +X99822000Y-115547600D02* +X101707140Y-113662460D01* +X105123440Y-112872520D02* +X105123440Y-112851500D01* +X105123440Y-112851500D02* +X105123440Y-112872520D01* +X105123440Y-112872520D02* +X105123440Y-112851500D01* +X114040460Y-104110300D02* +X114040460Y-97110300D01* +X111340460Y-98110300D02* +X113040460Y-98110300D01* +X113040460Y-98110300D02* +X114040460Y-97110300D01* +X97020000Y-105740000D02* +X100182940Y-105740000D01* +X102443740Y-108000800D02* +X102507240Y-108000800D01* +X100182940Y-105740000D02* +X102443740Y-108000800D01* +X102070000Y-109990000D02* +X102070000Y-108438040D01* +X102070000Y-108438040D02* +X102507240Y-108000800D01* +X102507240Y-108000800D02* +X103261620Y-108000800D01* +X111623300Y-106781600D02* +X111606350Y-106798550D01* +X111606350Y-106798550D02* +X111623300Y-106781600D01* +X111623300Y-106781600D02* +X111623300Y-106815500D01* +D45* +X113795000Y-121767600D02* +X113795000Y-121742200D01* +X113795000Y-121742200D02* +X115713400Y-119823800D01* +X115713400Y-119823800D02* +X115713400Y-109029500D01* +D43* +X114887200Y-106133200D02* +X115458000Y-106133200D01* +X116119100Y-108623800D02* +X115713400Y-109029500D01* +X116119100Y-106794300D02* +X116119100Y-108623800D01* +X115458000Y-106133200D02* +X116119100Y-106794300D01* +X112448800Y-110296960D02* +X112448800Y-107641000D01* +X112448800Y-107641000D02* +X111623300Y-106815500D01* +X111623300Y-106815500D02* +X110664800Y-105857000D01* +D44* +X110664800Y-105857000D02* +X110664800Y-103785960D01* +X110664800Y-103785960D02* +X111340460Y-103110300D01* +D45* +X111340460Y-99310300D02* +X111340460Y-98110300D01* +X114887200Y-106133200D02* +X114887200Y-104957040D01* +X114887200Y-104957040D02* +X114040460Y-104110300D01* +D42* +X95059500Y-106057000D02* +X95695200Y-106057000D01* +X96012200Y-105740000D02* +X97020000Y-105740000D01* +X95695200Y-106057000D02* +X96012200Y-105740000D01* +D45* +X105270000Y-98290000D02* +X105270000Y-99618500D01* +X102070000Y-99593500D02* +X102070000Y-98290000D01* +X102108000Y-99631500D02* +X102070000Y-99593500D01* +X105270000Y-99618500D02* +X105283000Y-99631500D01* +D43* +X93738000Y-120003000D02* +X93801500Y-120003000D01* +X93738000Y-115836000D02* +X93738000Y-115316000D01* +X94402998Y-116500998D02* +X93738000Y-115836000D01* +X94402998Y-119401502D02* +X94402998Y-116500998D01* +X93801500Y-120003000D02* +X94402998Y-119401502D01* +D42* +X108140500Y-98488500D02* +X107950000Y-98488500D01* +X105270000Y-97295000D02* +X105270000Y-98290000D01* +X105600500Y-96964500D02* +X105270000Y-97295000D01* +X107442000Y-96964500D02* +X105600500Y-96964500D01* +X107632500Y-97155000D02* +X107442000Y-96964500D01* +X107632500Y-98171000D02* +X107632500Y-97155000D01* +X107950000Y-98488500D02* +X107632500Y-98171000D01* +X108140500Y-98488500D02* +X108140500Y-98107500D01* +X109410500Y-97028000D02* +X109410500Y-96456500D01* +X109156500Y-97282000D02* +X109410500Y-97028000D01* +X108966000Y-97282000D02* +X109156500Y-97282000D01* +X108140500Y-98107500D02* +X108966000Y-97282000D01* +X101104000Y-111760000D02* +X101219000Y-111760000D01* +X101219000Y-111760000D02* +X102070000Y-110909000D01* +X102070000Y-110909000D02* +X102070000Y-109990000D01* +X95059500Y-106057000D02* +X95059500Y-105918000D01* +X95059500Y-105918000D02* +X94742000Y-105600500D01* +D43* +X93789500Y-104711500D02* +X94107000Y-104711500D01* +X94107000Y-104711500D02* +X94678500Y-105283000D01* +D45* +X93853000Y-104711500D02* +X93789500Y-104711500D01* +X94107000Y-104711500D02* +X94678500Y-105283000D01* +D44* +X93345000Y-103100000D02* +X93345000Y-104203500D01* +X93345000Y-104203500D02* +X93853000Y-104711500D01* +D42* +X95059500Y-106057000D02* +X95059500Y-105664000D01* +X95059500Y-105664000D02* +X94678500Y-105283000D01* +X94678500Y-105283000D02* +X94107000Y-104711500D01* +X93853000Y-104711500D02* +X93345000Y-104203500D01* +D43* +X104521000Y-112851500D02* +X105123440Y-112851500D01* +X105123440Y-112851500D02* +X105624500Y-112851500D01* +X105624500Y-112851500D02* +X105676000Y-112903000D01* +X100318000Y-116840000D02* +X100318000Y-116193000D01* +X94488000Y-123698000D02* +X94361000Y-123698000D01* +X100318000Y-116193000D02* +X99822000Y-115887500D01* +X100318000Y-124079000D02* +X100318000Y-124726000D01* +X94361000Y-120626000D02* +X93738000Y-120003000D01* +X94361000Y-123698000D02* +X94361000Y-120626000D01* +X96012000Y-125349000D02* +X94361000Y-123698000D01* +X99695000Y-125349000D02* +X96012000Y-125349000D01* +X100318000Y-124726000D02* +X99695000Y-125349000D01* +X91813400Y-120675400D02* +X93065600Y-120675400D01* +X93065600Y-120675400D02* +X93738000Y-120003000D01* +D42* +X85332000Y-104546400D02* +X85332000Y-105550400D01* +X85623400Y-120980200D02* +X85623400Y-120954800D01* +X85332000Y-105550400D02* +X85572600Y-105791000D01* +X91813400Y-120675400D02* +X89738200Y-120675400D01* +X89712800Y-120700800D02* +X89712800Y-120726200D01* +X89738200Y-120675400D02* +X89712800Y-120700800D01* +X88366600Y-120954800D02* +X89484200Y-120954800D01* +X90195400Y-120243600D02* +X90195400Y-119710200D01* +X89484200Y-120954800D02* +X89712800Y-120726200D01* +X89712800Y-120726200D02* +X90195400Y-120243600D01* +X88925400Y-121742200D02* +X88925400Y-121513600D01* +X88925400Y-121513600D02* +X88366600Y-120954800D01* +X88366600Y-120954800D02* +X85623400Y-120954800D01* +X86233000Y-123367800D02* +X85623400Y-122758200D01* +X85979000Y-118338600D02* +X85979000Y-117971000D01* +X85623400Y-118694200D02* +X85979000Y-118338600D01* +X85623400Y-122758200D02* +X85623400Y-120954800D01* +X85623400Y-120954800D02* +X85623400Y-118694200D01* +X86233000Y-123583000D02* +X86233000Y-123367800D01* +D43* +X96721000Y-112649000D02* +X96721000Y-114231300D01* +X110664800Y-113265300D02* +X110664800Y-112912240D01* +X110670800Y-113271300D02* +X110664800Y-113265300D01* +X97551700Y-115062000D02* +X98008900Y-115062000D01* +X96721000Y-114231300D02* +X97551700Y-115062000D01* +D45* +X114645900Y-115150900D02* +X113364470Y-113869470D01* +X113364470Y-113869470D02* +X113364470Y-113780570D01* +D44* +X114213400Y-109029500D02* +X114213400Y-112931640D01* +X114213400Y-112931640D02* +X113364470Y-113780570D01* +X113364470Y-113780570D02* +X112448800Y-114696240D01* +X110664800Y-107757000D02* +X110664800Y-112912240D01* +X110664800Y-112912240D02* +X112448800Y-114696240D01* +D42* +X96721000Y-112649000D02* +X96721000Y-110797000D01* +X98031000Y-106540000D02* +X97020000Y-106540000D01* +X98171000Y-106680000D02* +X98031000Y-106540000D01* +X98171000Y-109347000D02* +X98171000Y-106680000D01* +X96721000Y-110797000D02* +X98171000Y-109347000D01* +X97020000Y-106540000D02* +X95961500Y-106540000D01* +X95961500Y-106540000D02* +X95059500Y-107442000D01* +X95059500Y-107442000D02* +X95059500Y-107557000D01* +D45* +X99621000Y-112649000D02* +X102604000Y-112649000D01* +X102604000Y-112649000D02* +X102362000Y-112649000D01* +X104521000Y-114351500D02* +X103239000Y-114351500D01* +X102604000Y-113716500D02* +X102604000Y-111760000D01* +X103239000Y-114351500D02* +X102604000Y-113716500D01* +D42* +X102604000Y-111760000D02* +X102604000Y-111454500D01* +X102604000Y-111454500D02* +X102870000Y-111188500D01* +X102870000Y-111188500D02* +X102870000Y-109990000D01* +X102362000Y-112649000D02* +X102604000Y-112407000D01* +X102604000Y-112407000D02* +X102604000Y-111760000D01* +D43* +X104521000Y-114351500D02* +X105624500Y-114351500D01* +X105624500Y-114351500D02* +X105676000Y-114300000D01* +X97213400Y-120675400D02* +X95973900Y-120675400D01* +X95238000Y-119939500D02* +X95238000Y-115316000D01* +X95973900Y-120675400D02* +X95238000Y-119939500D01* +D44* +X93980000Y-112321000D02* +X93980000Y-112649000D01* +X93980000Y-112649000D02* +X95238000Y-113907000D01* +X95238000Y-113907000D02* +X95238000Y-115316000D01* +D43* +X93345000Y-100100000D02* +X93345000Y-98933000D01* +X97089000Y-98359000D02* +X97089000Y-98936000D01* +X96520000Y-97790000D02* +X97089000Y-98359000D01* +X94488000Y-97790000D02* +X96520000Y-97790000D01* +X93345000Y-98933000D02* +X94488000Y-97790000D01* +D44* +X93345000Y-100100000D02* +X90295860Y-100100000D01* +X90295860Y-100100000D02* +X89535000Y-100860860D01* +X86360000Y-100445000D02* +X89119140Y-100445000D01* +X89119140Y-100445000D02* +X89535000Y-100860860D01* +D43* +X92456000Y-115304000D02* +X91428000Y-115304000D01* +X90424000Y-115062000D02* +X87670000Y-112308000D01* +X91186000Y-115062000D02* +X90424000Y-115062000D01* +X91428000Y-115304000D02* +X91186000Y-115062000D01* +X87670000Y-112308000D02* +X87670000Y-111760000D01* +D44* +X89535000Y-100860860D02* +X89908262Y-100860860D01* +X89908262Y-100860860D02* +X90805000Y-101757598D01* +D42* +X90170000Y-106172000D02* +X91592400Y-104749600D01* +X91592400Y-104749600D02* +X91592400Y-103454200D01* +X91592400Y-103454200D02* +X90855800Y-102717600D01* +X90855800Y-102717600D02* +X85699600Y-102717600D01* +X82423000Y-118098000D02* +X80583800Y-118098000D01* +X80583800Y-118098000D02* +X80444800Y-118237000D01* +X82423000Y-116598000D02* +X81345800Y-116598000D01* +X81345800Y-116598000D02* +X80444800Y-115697000D01* +X83286600Y-117041800D02* +X83286600Y-119596600D01* +X82842800Y-116598000D02* +X83286600Y-117041800D01* +X82423000Y-116598000D02* +X82842800Y-116598000D01* +X83286600Y-119596600D02* +X83324000Y-119634000D01* +X82181000Y-116840000D02* +X82423000Y-116598000D01* +X82550000Y-124956000D02* +X82083800Y-124956000D01* +X82083800Y-124956000D02* +X80444800Y-123317000D01* +X83324000Y-121920000D02* +X81587800Y-121920000D01* +X81587800Y-121920000D02* +X80444800Y-120777000D01* +X83324000Y-121920000D02* +X83324000Y-122682000D01* +X83324000Y-122682000D02* +X82550000Y-123456000D01* +X90170000Y-106680000D02* +X90170000Y-106172000D01* +X85699600Y-102717600D02* +X85471000Y-102946200D01* +X85471000Y-102946200D02* +X85332000Y-102946200D01* +D44* +X93980000Y-109421000D02* +X93980000Y-109220000D01* +X93980000Y-109220000D02* +X93342460Y-108582460D01* +X93342460Y-108582460D02* +X93342460Y-106680000D01* +X92456000Y-113804000D02* +X90944000Y-113804000D01* +X90170000Y-113030000D02* +X90170000Y-111760000D01* +X90944000Y-113804000D02* +X90170000Y-113030000D01* +D43* +X96139000Y-96136000D02* +X93726460Y-96136000D01* +X93726460Y-96136000D02* +X93342460Y-96520000D01* +X83832000Y-104546400D02* +X83832000Y-102946200D01* +D42* +X83832000Y-102946200D02* +X83832000Y-102482540D01* +X107530860Y-108140000D02* +X108720000Y-108140000D01* +X107462780Y-108071920D02* +X107530860Y-108140000D01* +X103810260Y-104861360D02* +X104455420Y-104861360D01* +X98918220Y-99969320D02* +X103810260Y-104861360D01* +X84480860Y-101833680D02* +X87691420Y-101833680D01* +X83832000Y-102482540D02* +X84480860Y-101833680D01* +X98818000Y-116840000D02* +X98818000Y-114740800D01* +X103673100Y-112522000D02* +X103673100Y-109993100D01* +X103342900Y-112852200D02* +X103673100Y-112522000D01* +X98288300Y-113969800D02* +X98542300Y-113715800D01* +X98288300Y-114211100D02* +X98288300Y-113969800D01* +X98818000Y-114740800D02* +X98288300Y-114211100D01* +X103673100Y-109993100D02* +X103670000Y-109990000D01* +D45* +X103670000Y-109990000D02* +X103670000Y-108610500D01* +X103670000Y-108610500D02* +X104940500Y-107340000D01* +X104940500Y-107340000D02* +X108720000Y-107340000D01* +X103695500Y-110015500D02* +X103670000Y-109990000D01* +X98818000Y-116840000D02* +X97238800Y-116840000D01* +X97238800Y-116840000D02* +X97213400Y-116865400D01* +D43* +X97213400Y-118135400D02* +X97213400Y-116865400D01* +D42* +X89560400Y-119710200D02* +X89560400Y-119311880D01* +X107422140Y-105674160D02* +X108654160Y-105674160D01* +X107020820Y-105272840D02* +X107422140Y-105674160D01* +X90094260Y-118778020D02* +X90376200Y-118778020D01* +X89560400Y-119311880D02* +X90094260Y-118778020D01* +X108654160Y-105674160D02* +X108720000Y-105740000D01* +X89560400Y-121742200D02* +X89560400Y-122220180D01* +X107645660Y-104902000D02* +X108682000Y-104902000D01* +X107361180Y-104617520D02* +X107645660Y-104902000D01* +X106975100Y-104617520D02* +X107361180Y-104617520D01* +X106304540Y-103946960D02* +X106975100Y-104617520D01* +X89560400Y-122220180D02* +X89202720Y-122577860D01* +X108682000Y-104902000D02* +X108720000Y-104940000D01* +X91813400Y-119405400D02* +X92613940Y-119405400D01* +X107432300Y-104140000D02* +X108720000Y-104140000D01* +X107307840Y-104015540D02* +X107432300Y-104140000D01* +X107307840Y-103489760D02* +X107307840Y-104015540D01* +X106952240Y-103134160D02* +X107307840Y-103489760D01* +X105788920Y-103134160D02* +X106952240Y-103134160D01* +X105524760Y-103398320D02* +X105788920Y-103134160D01* +X93401340Y-118618000D02* +X93401340Y-116707920D01* +X92613940Y-119405400D02* +X93401340Y-118618000D01* +D45* +X91813400Y-119405400D02* +X92557600Y-119405400D01* +D42* +X91813400Y-121945400D02* +X92969540Y-121945400D01* +X107742180Y-103220520D02* +X108600520Y-103220520D01* +X107122420Y-102600760D02* +X107742180Y-103220520D01* +X105204720Y-102600760D02* +X107122420Y-102600760D01* +X104882140Y-102923340D02* +X105204720Y-102600760D01* +X104882140Y-103698040D02* +X104882140Y-102923340D01* +X104518920Y-104061260D02* +X104882140Y-103698040D01* +X92969540Y-121945400D02* +X93508020Y-121406920D01* +X108600520Y-103220520D02* +X108720000Y-103340000D01* +D45* +X108694500Y-103314500D02* +X108720000Y-103340000D01* +X104470000Y-98290000D02* +X104470000Y-99898000D01* +X106425500Y-100140000D02* +X108720000Y-100140000D01* +X106172000Y-100393500D02* +X106425500Y-100140000D01* +X104965500Y-100393500D02* +X106172000Y-100393500D01* +X104470000Y-99898000D02* +X104965500Y-100393500D01* +D42* +X109410500Y-98488500D02* +X109410500Y-98806000D01* +X107767000Y-99187000D02* +X106870000Y-98290000D01* +X109029500Y-99187000D02* +X107767000Y-99187000D01* +X109410500Y-98806000D02* +X109029500Y-99187000D01* +X108140500Y-96456500D02* +X103568500Y-96456500D01* +X102870000Y-97155000D02* +X102870000Y-98290000D01* +X103568500Y-96456500D02* +X102870000Y-97155000D01* +D43* +X95189000Y-98936000D02* +X95189000Y-100142000D01* +X95987000Y-100940000D02* +X97020000Y-100940000D01* +X95189000Y-100142000D02* +X95987000Y-100940000D01* +D45* +X111340460Y-101260300D02* +X110540600Y-101260300D01* +X99240600Y-102540000D02* +X97020000Y-102540000D01* +X99685300Y-102095300D02* +X99240600Y-102540000D01* +X110226300Y-101574600D02* +X110061200Y-101574600D01* +X110540600Y-101260300D02* +X110226300Y-101574600D01* +X110212700Y-100610300D02* +X111340460Y-100610300D01* +X110200900Y-100622100D02* +X110212700Y-100610300D01* +X98491400Y-103340000D02* +X98580400Y-103251000D01* +X97020000Y-103340000D02* +X98491400Y-103340000D01* +D42* +X84328000Y-107430000D02* +X85776500Y-107430000D01* +X95567500Y-104140000D02* +X97020000Y-104140000D01* +X95504000Y-104203500D02* +X95567500Y-104140000D01* +X86487000Y-108140500D02* +X91503500Y-108140500D01* +X85776500Y-107430000D02* +X86487000Y-108140500D01* +X84328000Y-109970000D02* +X90817000Y-109970000D01* +X95910500Y-104940000D02* +X97020000Y-104940000D01* +X95567500Y-105283000D02* +X95910500Y-104940000D01* +X90817000Y-109970000D02* +X91821000Y-108966000D01* +X84328000Y-112510000D02* +X84328000Y-112452002D01* +X84328000Y-112452002D02* +X86226502Y-110553500D01* +X86226502Y-110553500D02* +X95250000Y-110553500D01* +X95250000Y-110553500D02* +X95758000Y-110045500D01* +X95758000Y-110045500D02* +X95758000Y-107505500D01* +X95758000Y-107505500D02* +X95923500Y-107340000D01* +X95923500Y-107340000D02* +X97020000Y-107340000D01* +X84328000Y-115050000D02* +X86293720Y-115050000D01* +X97020000Y-108598540D02* +X97020000Y-108140000D01* +X96500140Y-109118400D02* +X97020000Y-108598540D01* +X86293720Y-115050000D02* +X86357920Y-114985800D01* +X107914800Y-115332000D02* +X107889800Y-115307000D01* +X107889800Y-115307000D02* +X107889800Y-111582000D01* +X98314800Y-111907000D02* +X97989800Y-111582000D01* +X97989800Y-111582000D02* +X97989800Y-110707000D01* +X97989800Y-110707000D02* +X98389800Y-110307000D01* +X98389800Y-110307000D02* +X98553000Y-110307000D01* +X98553000Y-110307000D02* +X98870000Y-109990000D01* +X99670000Y-108401800D02* +X99670000Y-109990000D01* +X99914800Y-108157000D02* +X99670000Y-108401800D01* +X101264800Y-108157000D02* +X99914800Y-108157000D01* +X101289800Y-108132000D02* +X101264800Y-108157000D01* +X109514800Y-115257000D02* +X109514800Y-111107000D01* +X109439800Y-115332000D02* +X109514800Y-115257000D01* +X97213400Y-123215400D02* +X96281700Y-123215400D01* +X105270000Y-110899700D02* +X105270000Y-109990000D01* +X104841500Y-111328200D02* +X105270000Y-110899700D01* +X104612900Y-111328200D02* +X104841500Y-111328200D01* +X104397000Y-111544100D02* +X104612900Y-111328200D01* +X95697500Y-122631200D02* +X95697500Y-121462800D01* +X96281700Y-123215400D02* +X95697500Y-122631200D01* +D45* +X105283000Y-110003000D02* +X105270000Y-109990000D01* +X96997500Y-122999500D02* +X97213400Y-123215400D01* +D43* +X97213400Y-124485400D02* +X98411600Y-124485400D01* +X98411600Y-124485400D02* +X98818000Y-124079000D01* +X97213400Y-123215400D02* +X97213400Y-124485400D01* +D45* +X107176000Y-112903000D02* +X107176000Y-110296000D01* +X107176000Y-110296000D02* +X106870000Y-109990000D01* +X100647500Y-120066500D02* +X101612000Y-120066500D01* +X107176000Y-115074000D02* +X107176000Y-114300000D01* +X107124500Y-115125500D02* +X107176000Y-115074000D01* +X101612000Y-120066500D02* +X101790500Y-119888000D01* +D43* +X107176000Y-112903000D02* +X107176000Y-114300000D01* +X100647500Y-121170000D02* +X100647500Y-120066500D01* +D42* +X82550000Y-115050000D02* +X82337800Y-115050000D01* +X82337800Y-115050000D02* +X80444800Y-113157000D01* +X82550000Y-115050000D02* +X82182400Y-115050000D01* +X82550000Y-112510000D02* +X82337800Y-112510000D01* +X82337800Y-112510000D02* +X80444800Y-110617000D01* +X82550000Y-112510000D02* +X82385600Y-112510000D01* +X82550000Y-109970000D02* +X82337800Y-109970000D01* +X82337800Y-109970000D02* +X80444800Y-108077000D01* +X82550000Y-109970000D02* +X82309400Y-109970000D01* +X82550000Y-107430000D02* +X82337800Y-107430000D01* +X82337800Y-107430000D02* +X80444800Y-105537000D01* +X108775500Y-96096280D02* +X108775500Y-96456500D01* +X109083300Y-95788480D02* +X108775500Y-96096280D01* +X109784340Y-95788480D02* +X109083300Y-95788480D01* +X109982460Y-95986600D02* +X109784340Y-95788480D01* +X109982460Y-96032320D02* +X109982460Y-95986600D01* +X110378700Y-96428560D02* +X109982460Y-96032320D01* +X108775500Y-98108898D02* +X108775500Y-98488500D01* +X109129958Y-97754440D02* +X108775500Y-98108898D01* +X109814820Y-97754440D02* +X109129958Y-97754440D01* +X110134860Y-97434400D02* +X109814820Y-97754440D01* +D43* +X99060000Y-122670000D02* +X100647500Y-122670000D01* +X97213400Y-121945400D02* +X98335400Y-121945400D01* +X98335400Y-121945400D02* +X99060000Y-122670000D01* +X97213400Y-119405400D02* +X98221100Y-119405400D01* +X98221100Y-119405400D02* +X99060000Y-118566500D01* +X100647500Y-118566500D02* +X99060000Y-118566500D01* +D42* +X82550000Y-105930000D02* +X84328000Y-105930000D01* +X82550000Y-108470000D02* +X84328000Y-108470000D01* +X82550000Y-111010000D02* +X84328000Y-111010000D01* +X82550000Y-113550000D02* +X84328000Y-113550000D01* +X89395300Y-123570300D02* +X90475500Y-123570300D01* +X90830400Y-123215400D02* +X91813400Y-123215400D01* +X90475500Y-123570300D02* +X90830400Y-123215400D01* +X87871300Y-123570300D02* +X87871300Y-121920700D01* +X87871300Y-121920700D02* +X87872000Y-121920000D01* +X87871300Y-123570300D02* +X89395300Y-123570300D01* +X89395300Y-125070300D02* +X89661300Y-125070300D01* +X89661300Y-125070300D02* +X90474800Y-124256800D01* +X90220800Y-122326400D02* +X90220800Y-121767600D01* +X90500200Y-122605800D02* +X90220800Y-122326400D01* +X90220800Y-121767600D02* +X90195400Y-121742200D01* +X87871300Y-125070300D02* +X89395300Y-125070300D01* +X91813400Y-118135400D02* +X90271600Y-118135400D01* +X90107200Y-117971000D02* +X89281000Y-117971000D01* +X90271600Y-118135400D02* +X90107200Y-117971000D01* +X87872000Y-119634000D02* +X87872000Y-118213000D01* +X87872000Y-118213000D02* +X87630000Y-117971000D01* +X87630000Y-117971000D02* +X89281000Y-117971000D01* +X89281000Y-116471000D02* +X90334400Y-116471000D01* +X88925400Y-118922800D02* +X88925400Y-119710200D01* +X88976200Y-118872000D02* +X88925400Y-118922800D01* +X90334400Y-116471000D02* +X90449400Y-116586000D01* +X87630000Y-116471000D02* +X89281000Y-116471000D01* +X85979000Y-116471000D02* +X86195600Y-116471000D01* +X86195600Y-116471000D02* +X86817200Y-115849400D01* +X90805000Y-115849400D02* +X91813400Y-116857800D01* +X86817200Y-115849400D02* +X90805000Y-115849400D01* +X91813400Y-116857800D02* +X91813400Y-116865400D01* +X85979000Y-116471000D02* +X86067200Y-116471000D01* +X86067200Y-116471000D02* +X86791800Y-117195600D01* +X86372000Y-119012400D02* +X86372000Y-119634000D01* +X86512400Y-118872000D02* +X86372000Y-119012400D01* +X86537800Y-118872000D02* +X86512400Y-118872000D01* +X86791800Y-118618000D02* +X86537800Y-118872000D01* +X86791800Y-117195600D02* +X86791800Y-118618000D01* +X84455000Y-116471000D02* +X85979000Y-116471000D01* +X86233000Y-125083000D02* +X86881400Y-125083000D01* +X91305400Y-124993400D02* +X91813400Y-124485400D01* +X90779600Y-124993400D02* +X91305400Y-124993400D01* +X90678000Y-125095000D02* +X90779600Y-124993400D01* +X86881400Y-125083000D02* +X86918800Y-125120400D01* +X86372000Y-121920000D02* +X86372000Y-122516200D01* +X86233000Y-124815600D02* +X86233000Y-125083000D01* +X86436200Y-124612400D02* +X86233000Y-124815600D01* +X86614000Y-124612400D02* +X86436200Y-124612400D01* +X87045800Y-124180600D02* +X86791800Y-124434600D01* +X86791800Y-124434600D02* +X86614000Y-124612400D01* +X87045800Y-123190000D02* +X87045800Y-124180600D01* +X86372000Y-122516200D02* +X87045800Y-123190000D01* +X84709000Y-125083000D02* +X86233000Y-125083000D01* +X84824000Y-119634000D02* +X84824000Y-119037800D01* +X84455000Y-118668800D02* +X84455000Y-117971000D01* +X84824000Y-119037800D02* +X84455000Y-118668800D01* +X84824000Y-121920000D02* +X84824000Y-123468000D01* +X84824000Y-123468000D02* +X84709000Y-123583000D01* +M02* diff --git a/PCB/OUTPUT_V4/itead/Tinylab_proto1-F.Mask.gbr b/PCB/OUTPUT_V4/itead/Tinylab_proto1-F.Mask.gbr new file mode 100644 index 00000000..aef2a739 --- /dev/null +++ b/PCB/OUTPUT_V4/itead/Tinylab_proto1-F.Mask.gbr @@ -0,0 +1,304 @@ +G04 #@! TF.FileFunction,Soldermask,Top* +%FSLAX46Y46*% +G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* +G04 Created by KiCad (PCBNEW 4.0.1-stable) date 25/03/2016 9:42:23 AM* +%MOMM*% +G01* +G04 APERTURE LIST* +%ADD10C,0.100000*% +%ADD11R,0.800000X0.750000*% +%ADD12R,0.750000X0.800000*% +%ADD13C,1.300000*% +%ADD14R,1.300000X1.300000*% +%ADD15C,1.998980*% +%ADD16R,1.998980X1.998980*% +%ADD17R,1.600000X1.000000*% +%ADD18R,1.600000X0.560000*% +%ADD19R,0.560000X1.600000*% +%ADD20R,1.905000X1.905000*% +%ADD21C,1.905000*% +%ADD22R,0.900000X2.500000*% +%ADD23R,2.500000X0.900000*% +%ADD24R,2.032000X2.032000*% +%ADD25O,2.032000X2.032000*% +%ADD26R,1.350000X0.400000*% +%ADD27O,0.950000X1.250000*% +%ADD28O,1.550000X1.000000*% +%ADD29R,2.032000X1.727200*% +%ADD30O,2.032000X1.727200*% +%ADD31R,1.727200X1.727200*% +%ADD32O,1.727200X1.727200*% +%ADD33R,0.600000X0.900000*% +%ADD34R,0.900000X0.500000*% +%ADD35R,0.500000X0.900000*% +%ADD36R,0.900000X0.600000*% +%ADD37R,1.500000X0.600000*% +%ADD38R,0.304800X0.508000*% +%ADD39R,1.600200X2.999740*% +%ADD40R,1.600200X2.600960*% +G04 APERTURE END LIST* +D10* +D11* +X106795000Y-122555000D03* +X105295000Y-122555000D03* +X106795000Y-118745000D03* +X105295000Y-118745000D03* +D12* +X114887200Y-107633200D03* +X114887200Y-106133200D03* +D11* +X114213400Y-109029500D03* +X115713400Y-109029500D03* +D12* +X104521000Y-114351500D03* +X104521000Y-112851500D03* +D11* +X95238000Y-115316000D03* +X93738000Y-115316000D03* +X102604000Y-111760000D03* +X101104000Y-111760000D03* +D12* +X86360000Y-98945000D03* +X86360000Y-100445000D03* +X95059500Y-107557000D03* +X95059500Y-106057000D03* +X82423000Y-118098000D03* +X82423000Y-116598000D03* +X82550000Y-124956000D03* +X82550000Y-123456000D03* +D13* +X87670000Y-111760000D03* +D14* +X90170000Y-111760000D03* +D12* +X92456000Y-113804000D03* +X92456000Y-115304000D03* +D15* +X93342460Y-96520000D03* +D16* +X93342460Y-106680000D03* +D17* +X93345000Y-103100000D03* +X93345000Y-100100000D03* +D18* +X108720000Y-108140000D03* +X108720000Y-107340000D03* +X108720000Y-106540000D03* +X108720000Y-105740000D03* +X108720000Y-104940000D03* +X108720000Y-104140000D03* +X108720000Y-103340000D03* +X108720000Y-102540000D03* +X108720000Y-101740000D03* +X108720000Y-100940000D03* +X108720000Y-100140000D03* +D19* +X106870000Y-98290000D03* +X106070000Y-98290000D03* +X105270000Y-98290000D03* +X104470000Y-98290000D03* +X103670000Y-98290000D03* +X102870000Y-98290000D03* +X102070000Y-98290000D03* +X101270000Y-98290000D03* +X100470000Y-98290000D03* +X99670000Y-98290000D03* +X98870000Y-98290000D03* +D18* +X97020000Y-100140000D03* +X97020000Y-100940000D03* +X97020000Y-101740000D03* +X97020000Y-102540000D03* +X97020000Y-103340000D03* +X97020000Y-104140000D03* +X97020000Y-104940000D03* +X97020000Y-105740000D03* +X97020000Y-106540000D03* +X97020000Y-107340000D03* +X97020000Y-108140000D03* +D19* +X98870000Y-109990000D03* +X99670000Y-109990000D03* +X100470000Y-109990000D03* +X101270000Y-109990000D03* +X102070000Y-109990000D03* +X102870000Y-109990000D03* +X103670000Y-109990000D03* +X104470000Y-109990000D03* +X105270000Y-109990000D03* +X106070000Y-109990000D03* +X106870000Y-109990000D03* +D20* +X80444800Y-97917000D03* +D21* +X80444800Y-102997000D03* +D22* +X96721000Y-112649000D03* +X99621000Y-112649000D03* +D23* +X93980000Y-112321000D03* +X93980000Y-109421000D03* +D24* +X105918000Y-124460000D03* +D25* +X103378000Y-124460000D03* +D26* +X111340460Y-101910300D03* +X111340460Y-101260300D03* +X111340460Y-100610300D03* +X111340460Y-99960300D03* +X111340460Y-99310300D03* +D27* +X111340460Y-103110300D03* +X111340460Y-98110300D03* +D28* +X114040460Y-104110300D03* +X114040460Y-97110300D03* +D29* +X80444800Y-113157000D03* +D30* +X80444800Y-110617000D03* +X80444800Y-108077000D03* +X80444800Y-105537000D03* +D31* +X113795000Y-124307600D03* +D32* +X111255000Y-124307600D03* +X113795000Y-121767600D03* +X111255000Y-121767600D03* +D24* +X105918000Y-116840000D03* +D25* +X103378000Y-116840000D03* +D29* +X80444800Y-115697000D03* +D30* +X80444800Y-118237000D03* +X80444800Y-120777000D03* +X80444800Y-123317000D03* +D24* +X113706100Y-118224300D03* +D25* +X111166100Y-118224300D03* +D24* +X103378000Y-119380000D03* +D25* +X103378000Y-121920000D03* +D33* +X96139000Y-96136000D03* +X97089000Y-98936000D03* +X95189000Y-98936000D03* +D34* +X99060000Y-122670000D03* +X99060000Y-121170000D03* +X99060000Y-118566500D03* +X99060000Y-120066500D03* +X100647500Y-122670000D03* +X100647500Y-121170000D03* +X100647500Y-120066500D03* +X100647500Y-118566500D03* +D35* +X105676000Y-114300000D03* +X107176000Y-114300000D03* +X105676000Y-112903000D03* +X107176000Y-112903000D03* +D34* +X82550000Y-105930000D03* +X82550000Y-107430000D03* +X82550000Y-108470000D03* +X82550000Y-109970000D03* +X82550000Y-111010000D03* +X82550000Y-112510000D03* +X82550000Y-113550000D03* +X82550000Y-115050000D03* +X84328000Y-107430000D03* +X84328000Y-105930000D03* +X84328000Y-109970000D03* +X84328000Y-108470000D03* +X84328000Y-112510000D03* +X84328000Y-111010000D03* +X84328000Y-115050000D03* +X84328000Y-113550000D03* +X89395300Y-123570300D03* +X89395300Y-125070300D03* +X87871300Y-123570300D03* +X87871300Y-125070300D03* +X89281000Y-117971000D03* +X89281000Y-116471000D03* +X87630000Y-117971000D03* +X87630000Y-116471000D03* +D35* +X86372000Y-119634000D03* +X87872000Y-119634000D03* +X86372000Y-121920000D03* +X87872000Y-121920000D03* +X98818000Y-124079000D03* +X100318000Y-124079000D03* +D34* +X84455000Y-117971000D03* +X84455000Y-116471000D03* +X84709000Y-123583000D03* +X84709000Y-125083000D03* +D35* +X83324000Y-119634000D03* +X84824000Y-119634000D03* +X83324000Y-121920000D03* +X84824000Y-121920000D03* +X85332000Y-102946200D03* +X83832000Y-102946200D03* +X83832000Y-104546400D03* +X85332000Y-104546400D03* +X100318000Y-116840000D03* +X98818000Y-116840000D03* +D34* +X85979000Y-116471000D03* +X85979000Y-117971000D03* +X86233000Y-123583000D03* +X86233000Y-125083000D03* +D36* +X113464800Y-106807000D03* +X110664800Y-107757000D03* +X110664800Y-105857000D03* +D37* +X97213400Y-124485400D03* +X97213400Y-123215400D03* +X97213400Y-121945400D03* +X97213400Y-120675400D03* +X97213400Y-119405400D03* +X97213400Y-118135400D03* +X97213400Y-116865400D03* +X91813400Y-116865400D03* +X91813400Y-118135400D03* +X91813400Y-119405400D03* +X91813400Y-120675400D03* +X91813400Y-121945400D03* +X91813400Y-123215400D03* +X91813400Y-124485400D03* +D38* +X90195400Y-119710200D03* +X88925400Y-119710200D03* +X90195400Y-121742200D03* +X89560400Y-119710200D03* +X88925400Y-121742200D03* +X89560400Y-121742200D03* +X108140500Y-98488500D03* +X109410500Y-98488500D03* +X108140500Y-96456500D03* +X108775500Y-98488500D03* +X109410500Y-96456500D03* +X108775500Y-96456500D03* +D39* +X112448800Y-114696240D03* +X112448800Y-110296960D03* +D40* +X89535000Y-97259140D03* +X89535000Y-100860860D03* +D24* +X90604800Y-106807000D03* +D25* +X88064800Y-106807000D03* +D24* +X90604800Y-104267000D03* +D25* +X88064800Y-104267000D03* +M02* diff --git a/PCB/OUTPUT_V4/itead/Tinylab_proto1.drl b/PCB/OUTPUT_V4/itead/Tinylab_proto1.drl new file mode 100644 index 00000000..aca0c510 --- /dev/null +++ b/PCB/OUTPUT_V4/itead/Tinylab_proto1.drl @@ -0,0 +1,124 @@ +M48 +;DRILL file {KiCad 4.0.1-stable} date 25/03/2016 9:42:25 AM +;FORMAT={2:4/ absolute / inch / keep zeros} +FMAT,2 +INCH,TZ +T1C0.016 +T2C0.020 +T3C0.022 +T4C0.031 +T5C0.032 +T6C0.039 +T7C0.040 +T8C0.050 +% +G90 +G05 +M72 +T1 +X033690Y-041650 +X033710Y-047630 +X033999Y-045270 +X034220Y-049260 +X034524Y-040092 +X035030Y-046800 +X035119Y-048259 +X035581Y-046763 +X035610Y-045900 +X035620Y-048920 +X035630Y-048270 +X035700Y-049250 +X035750Y-040062 +X035956Y-038700 +X036025Y-042575 +X036150Y-042900 +X036772Y-045948 +X036814Y-047798 +X037200Y-048700 +X037600Y-041025 +X037625Y-041450 +X037676Y-047820 +X037992Y-042960 +X038586Y-045300 +X038707Y-044058 +X038796Y-044770 +X038811Y-040650 +X038944Y-039358 +X039246Y-040195 +X039300Y-045625 +X039878Y-042572 +X040075Y-047200 +X040113Y-044749 +X040200Y-039225 +X040654Y-042520 +X040686Y-044430 +X041101Y-043915 +X041124Y-041284 +X041149Y-040969 +X041387Y-044438 +X041450Y-039225 +X041545Y-040708 +X041852Y-040924 +X042134Y-041446 +X042175Y-045325 +X042308Y-042548 +X042476Y-043930 +X042486Y-045406 +X043087Y-045406 +X043116Y-043743 +X043331Y-039990 +X043360Y-038360 +X043386Y-039615 +X043456Y-037964 +X043571Y-044595 +X043946Y-042040 +X044277Y-042513 +X044326Y-040140 +X045136Y-045335 +T4 +X034516Y-044000 +X035500Y-044000 +T5 +X031671Y-038550 +X031671Y-040550 +T6 +X036749Y-042000 +T7 +X031671Y-041550 +X031671Y-042550 +X031671Y-043550 +X031671Y-044550 +X031671Y-045550 +X031671Y-046550 +X031671Y-047550 +X031671Y-048550 +X034671Y-041050 +X034671Y-042050 +X035671Y-041050 +X035671Y-042050 +X040700Y-046000 +X040700Y-047000 +X040700Y-048000 +X040700Y-049000 +X041700Y-046000 +X041700Y-049000 +X043766Y-046545 +X043801Y-047940 +X043801Y-048940 +X044766Y-046545 +X044801Y-047940 +X044801Y-048940 +T8 +X036749Y-038000 +T2 +X045026Y-038232G85X044770Y-038232 +G05 +X045026Y-040988G85X044770Y-040988 +G05 +T3 +X043835Y-038685G85X043835Y-038567 +G05 +X043835Y-040654G85X043835Y-040536 +G05 +T0 +M30 diff --git a/PCB/OUTPUT_V4/seeeed/BOM/Seeed BOM Format.ods b/PCB/OUTPUT_V4/seeeed/BOM/Seeed BOM Format.ods new file mode 100644 index 0000000000000000000000000000000000000000..5cd5afc257be9204167304a13255cf7597101e28 GIT binary patch literal 18406 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 literal 0 HcmV?d00001 diff --git a/PCB/OUTPUT_V4/seeeed/BOM/Seeed BOM Format.xls b/PCB/OUTPUT_V4/seeeed/BOM/Seeed BOM Format.xls new file mode 100644 index 0000000000000000000000000000000000000000..c76c5a6a2107f49b637168836d78cb7972f1ae59 GIT binary patch literal 22528 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 literal 0 HcmV?d00001 diff --git a/PCB/OUTPUT_V4/seeeed/Requirement/PCB Requirement Format.xls b/PCB/OUTPUT_V4/seeeed/Requirement/PCB Requirement Format.xls new file mode 100644 index 0000000000000000000000000000000000000000..cd7b955d903bbf729ca7705a3235b5f59a9a8a8d GIT binary patch literal 18944 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 literal 0 HcmV?d00001 diff --git a/PCB/OUTPUT_V4/seeeed/seeed.zip b/PCB/OUTPUT_V4/seeeed/seeed.zip new file mode 100644 index 0000000000000000000000000000000000000000..9ab9a33e57db4c1304abf0777756d6dac9fd89ba GIT binary patch literal 54561 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
    RO$hRf`^S<19*CfX2O=4!S=haOf$ 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 EUkFAU!T + + + C:/Users/Esposch/Documents/KiCAD/Tinylab_proto1/Tinylab_proto1.sch + 23/03/2016 1:51:13 PM + Eeschema 4.0.1-stable + + + + <company/> + <rev/> + <date/> + <source>Tinylab_proto1.sch</source> + <comment number="1" value=""/> + <comment number="2" value=""/> + <comment number="3" value=""/> + <comment number="4" value=""/> + </title_block> + </sheet> + </design> + <components> + <comp ref="U2"> + <value>LM324</value> + <footprint>Housings_SOIC:SOIC-14_3.9x8.7mm_Pitch1.27mm</footprint> + <libsource lib="Tinylab_proto1-rescue" part="LM324-RESCUE-Tinylab_proto1"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>55CA87E2</tstamp> + </comp> + <comp ref="IC1"> + <value>ATXMEGA16A4U-A</value> + <footprint>Housings_QFP:LQFP-44_10x10mm_Pitch0.8mm</footprint> + <libsource lib="atmel" part="ATXMEGA16A4U-A"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>55CA8F25</tstamp> + </comp> + <comp ref="P2"> + <value>USB_OTG</value> + <footprint>Connect:USB_Micro-B_WIDE</footprint> + <libsource lib="conn" part="USB_OTG"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>55CA90D2</tstamp> + </comp> + <comp ref="U1"> + <value>78L05</value> + <footprint>SMD:SOT-23-3</footprint> + <libsource lib="Tinylab_proto1-rescue" part="78L05-RESCUE-Tinylab_proto1"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>55CA99FA</tstamp> + </comp> + <comp ref="R1"> + <value>R</value> + <footprint>Resistors_SMD:R_0603</footprint> + <libsource lib="device" part="R"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>55CAAB95</tstamp> + </comp> + <comp ref="R3"> + <value>R</value> + <footprint>Resistors_SMD:R_0603</footprint> + <libsource lib="device" part="R"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>55CAABF4</tstamp> + </comp> + <comp ref="R5"> + <value>R</value> + <footprint>Resistors_SMD:R_0603</footprint> + <libsource lib="device" part="R"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>55CAAC5F</tstamp> + </comp> + <comp ref="R6"> + <value>R</value> + <footprint>Resistors_SMD:R_0603</footprint> + <libsource lib="device" part="R"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>55CAACD2</tstamp> + </comp> + <comp ref="R4"> + <value>R</value> + <footprint>Resistors_SMD:R_0603</footprint> + <libsource lib="device" part="R"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>55CAAD11</tstamp> + </comp> + <comp ref="R2"> + <value>R</value> + <footprint>Resistors_SMD:R_0603</footprint> + <libsource lib="device" part="R"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>55CAAD4C</tstamp> + </comp> + <comp ref="C2"> + <value>C</value> + <footprint>Capacitors_SMD:C_0603</footprint> + <libsource lib="device" part="C_Small"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>55CAB4DE</tstamp> + </comp> + <comp ref="C1"> + <value>C</value> + <footprint>Capacitors_SMD:C_0603</footprint> + <libsource lib="device" part="C_Small"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>55CAB611</tstamp> + </comp> + <comp ref="C3"> + <value>C_Small</value> + <footprint>Capacitors_SMD:C_0603</footprint> + <libsource lib="device" part="C_Small"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>55CB13E1</tstamp> + </comp> + <comp ref="C4"> + <value>C_Small</value> + <footprint>Capacitors_SMD:C_0603</footprint> + <libsource lib="device" part="C_Small"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>55CB147C</tstamp> + </comp> + <comp ref="R22"> + <value>R</value> + <footprint>Resistors_SMD:R_0603</footprint> + <libsource lib="device" part="R"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>55CB4680</tstamp> + </comp> + <comp ref="C13"> + <value>C</value> + <footprint>Capacitors_SMD:C_0603</footprint> + <libsource lib="device" part="C_Small"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>55CB630B</tstamp> + </comp> + <comp ref="R24"> + <value>R</value> + <footprint>Resistors_SMD:R_0603</footprint> + <libsource lib="device" part="R"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>55CB9020</tstamp> + </comp> + <comp ref="R11"> + <value>R</value> + <footprint>Resistors_SMD:R_0603</footprint> + <libsource lib="device" part="R"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>55CBCD2A</tstamp> + </comp> + <comp ref="R7"> + <value>R</value> + <footprint>Resistors_SMD:R_0603</footprint> + <libsource lib="device" part="R"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>55CBCDA5</tstamp> + </comp> + <comp ref="R13"> + <value>R</value> + <footprint>Resistors_SMD:R_0603</footprint> + <libsource lib="device" part="R"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>55CBE0F4</tstamp> + </comp> + <comp ref="R9"> + <value>R</value> + <footprint>Resistors_SMD:R_0603</footprint> + <libsource lib="device" part="R"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>55CBE16B</tstamp> + </comp> + <comp ref="R14"> + <value>R</value> + <footprint>Resistors_SMD:R_0603</footprint> + <libsource lib="device" part="R"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>55CBE21C</tstamp> + </comp> + <comp ref="R10"> + <value>R</value> + <footprint>Resistors_SMD:R_0603</footprint> + <libsource lib="device" part="R"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>55CBE2C7</tstamp> + </comp> + <comp ref="R12"> + <value>R</value> + <footprint>Resistors_SMD:R_0603</footprint> + <libsource lib="device" part="R"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>55CBE362</tstamp> + </comp> + <comp ref="R8"> + <value>R</value> + <footprint>Resistors_SMD:R_0603</footprint> + <libsource lib="device" part="R"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>55CBE401</tstamp> + </comp> + <comp ref="P3"> + <value>DIG_OUT</value> + <footprint>Pin_Headers:Pin_Header_Straight_1x04</footprint> + <libsource lib="conn" part="CONN_01X04"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>55CBF4D5</tstamp> + </comp> + <comp ref="P7"> + <value>HVO</value> + <footprint>Pin_Headers:Pin_Header_Straight_2x02</footprint> + <libsource lib="conn" part="CONN_02X02"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>55CC540F</tstamp> + </comp> + <comp ref="C5"> + <value>C_Small</value> + <footprint>Capacitors_SMD:C_0603</footprint> + <libsource lib="device" part="C_Small"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>55D60181</tstamp> + </comp> + <comp ref="U4"> + <value>DMN63D8LDW</value> + <footprint>TO_SOT_Packages_SMD:SOT-363</footprint> + <libsource lib="ESPO_PART" part="DMN63D8LDW"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>55D6ACFD</tstamp> + </comp> + <comp ref="P8"> + <value>DIG_IN</value> + <footprint>Pin_Headers:Pin_Header_Straight_1x02</footprint> + <libsource lib="conn" part="CONN_01X02"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>55D6DB77</tstamp> + </comp> + <comp ref="F1"> + <value>F_Small</value> + <footprint>Capacitors_SMD:C_1206</footprint> + <libsource lib="device" part="F_Small"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>55D739F3</tstamp> + </comp> + <comp ref="L1"> + <value>INDUCTOR</value> + <footprint>Inductors:INDUCTOR_V</footprint> + <libsource lib="device" part="INDUCTOR"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>5606EE9E</tstamp> + </comp> + <comp ref="D1"> + <value>D_Schottky</value> + <footprint>Diodes_ThroughHole:Diode_DO-41_SOD81_Horizontal_RM10</footprint> + <libsource lib="device" part="D_Schottky"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>5606FDB4</tstamp> + </comp> + <comp ref="C9"> + <value>CP1</value> + <footprint>Capacitors_SMD:c_elec_4x5.3</footprint> + <libsource lib="device" part="CP1"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>560719D9</tstamp> + </comp> + <comp ref="C10"> + <value>C</value> + <footprint>Capacitors_SMD:C_0603</footprint> + <libsource lib="device" part="C"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>56071A50</tstamp> + </comp> + <comp ref="C16"> + <value>C</value> + <footprint>Capacitors_SMD:C_0603</footprint> + <libsource lib="device" part="C"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>5607355F</tstamp> + </comp> + <comp ref="C15"> + <value>CP1</value> + <footprint>Capacitors_ThroughHole:C_Radial_D6.3_L11.2_P2.5</footprint> + <libsource lib="device" part="CP1"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>560735FE</tstamp> + </comp> + <comp ref="P4"> + <value>PDI</value> + <footprint>Pin_Headers:Pin_Header_Straight_2x02</footprint> + <libsource lib="conn" part="CONN_02X02"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>56069A87</tstamp> + </comp> + <comp ref="Q1"> + <value>Q_NMOS_GSD</value> + <footprint>SMD:SOT-23-3</footprint> + <libsource lib="device" part="Q_NMOS_GSD"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>5606F6D4</tstamp> + </comp> + <comp ref="R23"> + <value>R</value> + <footprint>Resistors_SMD:R_0603</footprint> + <libsource lib="device" part="R"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>566DE721</tstamp> + </comp> + <comp ref="R25"> + <value>R</value> + <footprint>Resistors_SMD:R_0603</footprint> + <libsource lib="device" part="R"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>566DE7E8</tstamp> + </comp> + <comp ref="C14"> + <value>C</value> + <footprint>Capacitors_SMD:C_0603</footprint> + <libsource lib="device" part="C_Small"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>566DF655</tstamp> + </comp> + <comp ref="P6"> + <value>DAC_OUT</value> + <footprint>Pin_Headers:Pin_Header_Straight_1x04</footprint> + <libsource lib="conn" part="CONN_01X04"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>566DF832</tstamp> + </comp> + <comp ref="R26"> + <value>R</value> + <footprint>Resistors_SMD:R_0603</footprint> + <libsource lib="device" part="R"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>566E5C29</tstamp> + </comp> + <comp ref="R27"> + <value>R</value> + <footprint>Resistors_SMD:R_0603</footprint> + <libsource lib="device" part="R"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>566E5CBE</tstamp> + </comp> + <comp ref="C6"> + <value>CP1</value> + <footprint>Capacitors_SMD:c_elec_5x5.3</footprint> + <libsource lib="device" part="CP1"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>566F5A75</tstamp> + </comp> + <comp ref="R19"> + <value>R</value> + <footprint>Resistors_SMD:R_0603</footprint> + <libsource lib="device" part="R"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>56AECD86</tstamp> + </comp> + <comp ref="C11"> + <value>C</value> + <footprint>Capacitors_SMD:C_0603</footprint> + <libsource lib="device" part="C"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>5608B4BE</tstamp> + </comp> + <comp ref="C8"> + <value>C</value> + <footprint>Capacitors_SMD:C_0603</footprint> + <libsource lib="device" part="C"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>56AF91A3</tstamp> + </comp> + <comp ref="R17"> + <value>R</value> + <footprint>Resistors_SMD:R_0603</footprint> + <libsource lib="device" part="R"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>56AFE83E</tstamp> + </comp> + <comp ref="R18"> + <value>R</value> + <footprint>Resistors_SMD:R_0603</footprint> + <libsource lib="device" part="R"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>56AFE8F3</tstamp> + </comp> + <comp ref="U3"> + <value>DMN63D8LDW</value> + <footprint>TO_SOT_Packages_SMD:SOT-363</footprint> + <libsource lib="ESPO_PART" part="DMN63D8LDW"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>56B012DD</tstamp> + </comp> + <comp ref="R20"> + <value>R</value> + <footprint>Resistors_SMD:R_0603</footprint> + <libsource lib="device" part="R"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>56B0C682</tstamp> + </comp> + <comp ref="R15"> + <value>R</value> + <footprint>Resistors_SMD:R_0603</footprint> + <libsource lib="device" part="R"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>56B0C779</tstamp> + </comp> + <comp ref="R16"> + <value>R</value> + <footprint>Resistors_SMD:R_0603</footprint> + <libsource lib="device" part="R"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>56B0C86E</tstamp> + </comp> + <comp ref="L2"> + <value>INDUCTOR</value> + <footprint>Resistors_SMD:R_1210</footprint> + <libsource lib="device" part="INDUCTOR"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>56E88440</tstamp> + </comp> + <comp ref="L3"> + <value>INDUCTOR</value> + <footprint>Resistors_SMD:R_1210</footprint> + <libsource lib="device" part="INDUCTOR"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>56E8DA35</tstamp> + </comp> + <comp ref="C7"> + <value>C</value> + <footprint>Capacitors_SMD:C_0603</footprint> + <libsource lib="device" part="C"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>56E8E263</tstamp> + </comp> + <comp ref="R21"> + <value>R</value> + <footprint>Resistors_SMD:R_0603</footprint> + <libsource lib="device" part="R"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>56E9851A</tstamp> + </comp> + <comp ref="R28"> + <value>R</value> + <footprint>Resistors_SMD:R_0603</footprint> + <libsource lib="device" part="R"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>56E985EF</tstamp> + </comp> + <comp ref="R29"> + <value>R</value> + <footprint>Resistors_SMD:R_0603</footprint> + <libsource lib="device" part="R"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>56E9888A</tstamp> + </comp> + <comp ref="R30"> + <value>R</value> + <footprint>Resistors_SMD:R_0603</footprint> + <libsource lib="device" part="R"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>56E98921</tstamp> + </comp> + <comp ref="P1"> + <value>SCOPE_IN_CH1</value> + <footprint>Pin_Headers:Pin_Header_Straight_1x02</footprint> + <libsource lib="conn" part="CONN_01X02"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>56EA2C80</tstamp> + </comp> + <comp ref="P9"> + <value>SCOPE_IN_AC</value> + <footprint>Pin_Headers:Pin_Header_Straight_1x02</footprint> + <libsource lib="conn" part="CONN_01X02"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>56EA2D2D</tstamp> + </comp> + <comp ref="P5"> + <value>SCOPE_IN_CH2</value> + <footprint>Pin_Headers:Pin_Header_Straight_1x02</footprint> + <libsource lib="conn" part="CONN_01X02"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>56EA3310</tstamp> + </comp> + </components> + <libparts> + <libpart lib="Tinylab_proto1-rescue" part="78L05-RESCUE-Tinylab_proto1"> + <fields> + <field name="Reference">U</field> + <field name="Value">78L05-RESCUE-Tinylab_proto1</field> + </fields> + <pins> + <pin num="1" name="GND" type="input"/> + <pin num="2" name="VO" type="power_out"/> + <pin num="3" name="VI" type="input"/> + </pins> + </libpart> + <libpart lib="atmel" part="ATXMEGA16A4U-A"> + <aliases> + <alias>ATXMEGA32A4U-A</alias> + <alias>ATXMEGA64A4U-A</alias> + <alias>ATXMEGA128A4U-A</alias> + </aliases> + <description>TQFP44, 16k Flash, 4k Boot, 2k SRAM, 1k EEPROM, JTAG, USB</description> + <docs>http://www.atmel.com/Images/Atmel-8387-8-and16-bit-AVR-Microcontroller-XMEGA-A4U_Datasheet.pdf</docs> + <fields> + <field name="Reference">IC</field> + <field name="Value">ATXMEGA16A4U-A</field> + <field name="Footprint">TQFP44</field> + </fields> + <pins> + <pin num="1" name="AC5/ADC5/PA5" type="BiDi"/> + <pin num="2" name="AC1OUT/AC6/ADC6/PA6" type="BiDi"/> + <pin num="3" name="AC0OUT/AC7/ADC7/PA7" type="BiDi"/> + <pin num="4" name="AREFB/ADC8/PB0" type="BiDi"/> + <pin num="5" name="ADC9/PB1" type="BiDi"/> + <pin num="6" name="DAC0/ADC10/PB2" type="BiDi"/> + <pin num="7" name="DAC1/ACD11/PB3" type="BiDi"/> + <pin num="8" name="GND" type="power_in"/> + <pin num="9" name="VCC" type="power_in"/> + <pin num="10" name="SDAIN/SDA/~OC0ALS~/OC0A/PC0" type="BiDi"/> + <pin num="11" name="SCLIN/SCL/XCK0/OC0AHS/OC0B/PC1" type="BiDi"/> + <pin num="12" name="SDAOUT/RXD0/~OC0BLS~/OC0C/PC2" type="BiDi"/> + <pin num="13" name="SCLOUT/TXD0/OC0BHS/OC0D/PC3" type="BiDi"/> + <pin num="14" name="~SS~/~OC0CLS~/OC1A/PC4" type="BiDi"/> + <pin num="15" name="MOSI/XCK1/OC0CHS/OC1B/PC5" type="BiDi"/> + <pin num="16" name="CLKRTC/MISO/RXD1/~OC0DLS~/PC6" type="BiDi"/> + <pin num="17" name="EVOUT/CLKOUT/SCK/TXD1/OC0DHS/PC7" type="BiDi"/> + <pin num="18" name="GND" type="power_in"/> + <pin num="19" name="VCC" type="power_in"/> + <pin num="20" name="PD0/OC0A" type="BiDi"/> + <pin num="21" name="PD1/OC0B/XCK0" type="BiDi"/> + <pin num="22" name="PD2/OC0C/RXD0" type="BiDi"/> + <pin num="23" name="PD3/OC0D/TXD0" type="BiDi"/> + <pin num="24" name="PD4/OC1A/~SS~" type="BiDi"/> + <pin num="25" name="PD5/OC1B/XCK1/MOSI" type="BiDi"/> + <pin num="26" name="PD6/D-/RXD1/MISO" type="BiDi"/> + <pin num="27" name="PD7/D+/TXD1/SCK/CLKOUT/EVOUT" type="BiDi"/> + <pin num="28" name="PE0/OC0A/SDA" type="BiDi"/> + <pin num="29" name="PE1/OC0B/XCK0/SCL" type="BiDi"/> + <pin num="30" name="GND" type="power_in"/> + <pin num="31" name="VCC" type="power_in"/> + <pin num="32" name="PE2/OC0C/RXD0" type="BiDi"/> + <pin num="33" name="PE3/OC0D/TXD0" type="BiDi"/> + <pin num="34" name="PDI_DATA" type="input"/> + <pin num="35" name="~RESET~/PDI_CLK" type="input"/> + <pin num="36" name="PR0/XTAL2/TOSC2" type="BiDi"/> + <pin num="37" name="PR1/XTAL1/TOSC1" type="BiDi"/> + <pin num="38" name="GND" type="power_in"/> + <pin num="39" name="AVCC" type="power_in"/> + <pin num="40" name="AREFA/AC0/ADC0/PA0" type="BiDi"/> + <pin num="41" name="AC1/ADC1/PA1" type="BiDi"/> + <pin num="42" name="AC2/ADC2/PA2" type="BiDi"/> + <pin num="43" name="AC3/ADC3/PA3" type="BiDi"/> + <pin num="44" name="AC4/ADC4/PA4" type="BiDi"/> + </pins> + </libpart> + <libpart lib="device" part="C"> + <description>Unpolarized capacitor</description> + <footprints> + <fp>C?</fp> + <fp>C_????_*</fp> + <fp>C_????</fp> + <fp>SMD*_c</fp> + <fp>Capacitor*</fp> + </footprints> + <fields> + <field name="Reference">C</field> + <field name="Value">C</field> + </fields> + <pins> + <pin num="1" name="~" type="passive"/> + <pin num="2" name="~" type="passive"/> + </pins> + </libpart> + <libpart lib="conn" part="CONN_01X02"> + <description>Connector 01x02</description> + <footprints> + <fp>Pin_Header_Straight_1X02</fp> + <fp>Pin_Header_Angled_1X02</fp> + <fp>Socket_Strip_Straight_1X02</fp> + <fp>Socket_Strip_Angled_1X02</fp> + </footprints> + <fields> + <field name="Reference">P</field> + <field name="Value">CONN_01X02</field> + </fields> + <pins> + <pin num="1" name="P1" type="passive"/> + <pin num="2" name="P2" type="passive"/> + </pins> + </libpart> + <libpart lib="conn" part="CONN_01X04"> + <description>Connector 01x04</description> + <footprints> + <fp>Pin_Header_Straight_1X04</fp> + <fp>Pin_Header_Angled_1X04</fp> + <fp>Socket_Strip_Straight_1X04</fp> + <fp>Socket_Strip_Angled_1X04</fp> + </footprints> + <fields> + <field name="Reference">P</field> + <field name="Value">CONN_01X04</field> + </fields> + <pins> + <pin num="1" name="P1" type="passive"/> + <pin num="2" name="P2" type="passive"/> + <pin num="3" name="P3" type="passive"/> + <pin num="4" name="P4" type="passive"/> + </pins> + </libpart> + <libpart lib="conn" part="CONN_02X02"> + <description>Connector 02x02</description> + <footprints> + <fp>Pin_Header_Straight_2X02</fp> + <fp>Pin_Header_Angled_2X02</fp> + <fp>Socket_Strip_Straight_2X02</fp> + <fp>Socket_Strip_Angled_2X02</fp> + </footprints> + <fields> + <field name="Reference">P</field> + <field name="Value">CONN_02X02</field> + </fields> + <pins> + <pin num="1" name="P1" type="passive"/> + <pin num="2" name="P2" type="passive"/> + <pin num="3" name="P3" type="passive"/> + <pin num="4" name="P4" type="passive"/> + </pins> + </libpart> + <libpart lib="device" part="CP1"> + <description>Polarised capacitor</description> + <footprints> + <fp>SMD*_Pol</fp> + <fp>c_elec*</fp> + <fp>C*elec</fp> + <fp>TantalC*</fp> + <fp>Elko*</fp> + <fp>CP*</fp> + </footprints> + <fields> + <field name="Reference">C</field> + <field name="Value">CP1</field> + </fields> + <pins> + <pin num="1" name="~" type="passive"/> + <pin num="2" name="~" type="passive"/> + </pins> + </libpart> + <libpart lib="device" part="C_Small"> + <description>Unpolarized capacitor</description> + <footprints> + <fp>C?</fp> + <fp>C_????_*</fp> + <fp>C_????</fp> + <fp>SMD*_c</fp> + <fp>Capacitor*</fp> + </footprints> + <fields> + <field name="Reference">C</field> + <field name="Value">C_Small</field> + </fields> + <pins> + <pin num="1" name="~" type="passive"/> + <pin num="2" name="~" type="passive"/> + </pins> + </libpart> + <libpart lib="ESPO_PART" part="DMN63D8LDW"> + <fields> + <field name="Reference">U</field> + <field name="Value">DMN63D8LDW</field> + </fields> + <pins> + <pin num="1" name="S1" type="input"/> + <pin num="2" name="G1" type="input"/> + <pin num="3" name="D2" type="input"/> + <pin num="4" name="S2" type="input"/> + <pin num="5" name="G2" type="input"/> + <pin num="6" name="D1" type="input"/> + </pins> + </libpart> + <libpart lib="device" part="D_Schottky"> + <description>Diode schottky</description> + <footprints> + <fp>D-Pak_TO252AA</fp> + <fp>Diode_*</fp> + <fp>*SingleDiode</fp> + <fp>*SingleDiode*</fp> + <fp>*_Diode_*</fp> + </footprints> + <fields> + <field name="Reference">D</field> + <field name="Value">D_Schottky</field> + </fields> + <pins> + <pin num="1" name="K" type="passive"/> + <pin num="2" name="A" type="passive"/> + </pins> + </libpart> + <libpart lib="device" part="F_Small"> + <description>Fuse</description> + <footprints> + <fp>CP*</fp> + <fp>SM*</fp> + </footprints> + <fields> + <field name="Reference">F</field> + <field name="Value">F_Small</field> + </fields> + <pins> + <pin num="1" name="~" type="passive"/> + <pin num="2" name="~" type="passive"/> + </pins> + </libpart> + <libpart lib="device" part="INDUCTOR"> + <fields> + <field name="Reference">L</field> + <field name="Value">INDUCTOR</field> + </fields> + <pins> + <pin num="1" name="1" type="passive"/> + <pin num="2" name="2" type="passive"/> + </pins> + </libpart> + <libpart lib="Tinylab_proto1-rescue" part="LM324-RESCUE-Tinylab_proto1"> + <fields> + <field name="Reference">U</field> + <field name="Value">LM324-RESCUE-Tinylab_proto1</field> + </fields> + <pins> + <pin num="1" name="~" type="output"/> + <pin num="2" name="-" type="input"/> + <pin num="3" name="+" type="input"/> + <pin num="4" name="V+" type="power_in"/> + <pin num="5" name="+" type="input"/> + <pin num="6" name="-" type="input"/> + <pin num="7" name="~" type="output"/> + <pin num="8" name="~" type="output"/> + <pin num="9" name="-" type="input"/> + <pin num="10" name="+" type="input"/> + <pin num="11" name="V-" type="power_in"/> + <pin num="12" name="+" type="input"/> + <pin num="13" name="-" type="input"/> + <pin num="14" name="~" type="output"/> + </pins> + </libpart> + <libpart lib="device" part="Q_NMOS_GSD"> + <description>Transistor N-MOSFET (general)</description> + <fields> + <field name="Reference">Q</field> + <field name="Value">Q_NMOS_GSD</field> + </fields> + <pins> + <pin num="1" name="G" type="input"/> + <pin num="2" name="S" type="passive"/> + <pin num="3" name="D" type="passive"/> + </pins> + </libpart> + <libpart lib="device" part="R"> + <description>Resistor</description> + <footprints> + <fp>R_*</fp> + <fp>Resistor_*</fp> + </footprints> + <fields> + <field name="Reference">R</field> + <field name="Value">R</field> + </fields> + <pins> + <pin num="1" name="~" type="passive"/> + <pin num="2" name="~" type="passive"/> + </pins> + </libpart> + <libpart lib="conn" part="USB_OTG"> + <description>micro/mini connector</description> + <footprints> + <fp>USB*</fp> + </footprints> + <fields> + <field name="Reference">P</field> + <field name="Value">USB_OTG</field> + </fields> + <pins> + <pin num="1" name="VCC" type="power_out"/> + <pin num="2" name="D-" type="passive"/> + <pin num="3" name="D+" type="passive"/> + <pin num="4" name="ID" type="power_in"/> + <pin num="5" name="GND" type="power_in"/> + <pin num="6" name="shield" type="passive"/> + </pins> + </libpart> + </libparts> + <libraries> + <library logical="Tinylab_proto1-rescue"> + <uri>C:\Users\Esposch\Documents\KiCAD\Tinylab_proto1\Tinylab_proto1-rescue.lib</uri> + </library> + <library logical="device"> + <uri>C:\Program Files\KiCad\share\kicad\library\device.lib</uri> + </library> + <library logical="conn"> + <uri>C:\Program Files\KiCad\share\kicad\library\conn.lib</uri> + </library> + <library logical="atmel"> + <uri>C:\Program Files\KiCad\share\kicad\library\atmel.lib</uri> + </library> + <library logical="ESPO_PART"> + <uri>C:\Users\Esposch\Documents\KiCAD\ESPO_PART.lib</uri> + </library> + </libraries> + <nets> + <net code="1" name="Net-(IC1-Pad28)"> + <node ref="IC1" pin="28"/> + <node ref="R11" pin="1"/> + </net> + <net code="2" name="Net-(P3-Pad3)"> + <node ref="R8" pin="2"/> + <node ref="P3" pin="3"/> + </net> + <net code="3" name="Net-(P3-Pad4)"> + <node ref="R7" pin="2"/> + <node ref="P3" pin="4"/> + </net> + <net code="4" name="Net-(IC1-Pad33)"> + <node ref="R14" pin="1"/> + <node ref="IC1" pin="33"/> + </net> + <net code="5" name="Net-(IC1-Pad32)"> + <node ref="R13" pin="1"/> + <node ref="IC1" pin="32"/> + </net> + <net code="6" name="Net-(IC1-Pad29)"> + <node ref="R12" pin="1"/> + <node ref="IC1" pin="29"/> + </net> + <net code="7" name="Net-(R10-Pad1)"> + <node ref="R14" pin="2"/> + <node ref="R10" pin="1"/> + </net> + <net code="8" name="Net-(R13-Pad2)"> + <node ref="R13" pin="2"/> + <node ref="R9" pin="1"/> + </net> + <net code="9" name="Net-(R12-Pad2)"> + <node ref="R12" pin="2"/> + <node ref="R8" pin="1"/> + </net> + <net code="10" name="Net-(R11-Pad2)"> + <node ref="R11" pin="2"/> + <node ref="R7" pin="1"/> + </net> + <net code="11" name="Net-(R22-Pad1)"> + <node ref="R24" pin="2"/> + <node ref="R22" pin="1"/> + </net> + <net code="12" name="Net-(R1-Pad1)"> + <node ref="R3" pin="1"/> + <node ref="R1" pin="1"/> + <node ref="U2" pin="3"/> + </net> + <net code="13" name="Net-(P8-Pad1)"> + <node ref="U4" pin="5"/> + <node ref="P8" pin="1"/> + </net> + <net code="14" name="Net-(D1-Pad2)"> + <node ref="D1" pin="2"/> + <node ref="L1" pin="1"/> + <node ref="Q1" pin="3"/> + </net> + <net code="15" name="Net-(P8-Pad2)"> + <node ref="U4" pin="2"/> + <node ref="P8" pin="2"/> + </net> + <net code="16" name="/AVCC_ON_2"> + <node ref="IC1" pin="44"/> + <node ref="R3" pin="2"/> + <node ref="R5" pin="2"/> + <node ref="R4" pin="1"/> + <node ref="R6" pin="2"/> + </net> + <net code="17" name="/DIG_CH1"> + <node ref="IC1" pin="17"/> + <node ref="U4" pin="6"/> + </net> + <net code="18" name="/AVCC"> + <node ref="IC1" pin="39"/> + <node ref="C8" pin="1"/> + <node ref="C5" pin="1"/> + <node ref="R5" pin="1"/> + <node ref="L2" pin="2"/> + </net> + <net code="19" name="/D-"> + <node ref="IC1" pin="26"/> + <node ref="P2" pin="2"/> + </net> + <net code="20" name="/D+"> + <node ref="P2" pin="3"/> + <node ref="IC1" pin="27"/> + </net> + <net code="21" name="Net-(P3-Pad1)"> + <node ref="R10" pin="2"/> + <node ref="P3" pin="1"/> + </net> + <net code="22" name="Net-(P3-Pad2)"> + <node ref="R9" pin="2"/> + <node ref="P3" pin="2"/> + </net> + <net code="23" name="/USBGND"> + <node ref="C5" pin="2"/> + <node ref="U4" pin="1"/> + <node ref="F1" pin="1"/> + <node ref="P4" pin="3"/> + <node ref="U2" pin="11"/> + <node ref="IC1" pin="38"/> + <node ref="C8" pin="2"/> + <node ref="U3" pin="1"/> + <node ref="U3" pin="4"/> + <node ref="IC1" pin="18"/> + <node ref="C11" pin="2"/> + <node ref="IC1" pin="14"/> + <node ref="R6" pin="1"/> + <node ref="C4" pin="2"/> + <node ref="U1" pin="1"/> + <node ref="P2" pin="6"/> + <node ref="P2" pin="5"/> + <node ref="R27" pin="2"/> + <node ref="C6" pin="2"/> + <node ref="U4" pin="4"/> + <node ref="C3" pin="2"/> + <node ref="IC1" pin="30"/> + <node ref="IC1" pin="8"/> + <node ref="R21" pin="2"/> + <node ref="R28" pin="1"/> + <node ref="R29" pin="2"/> + <node ref="R30" pin="1"/> + <node ref="C7" pin="2"/> + </net> + <net code="24" name="Net-(R20-Pad1)"> + <node ref="U2" pin="14"/> + <node ref="R30" pin="2"/> + <node ref="R20" pin="1"/> + <node ref="R23" pin="2"/> + </net> + <net code="25" name="Net-(R19-Pad1)"> + <node ref="R22" pin="2"/> + <node ref="R19" pin="1"/> + <node ref="R29" pin="1"/> + <node ref="U2" pin="8"/> + </net> + <net code="26" name="/OPAMP_VCC"> + <node ref="U2" pin="4"/> + <node ref="C7" pin="1"/> + <node ref="L3" pin="1"/> + </net> + <net code="27" name="Net-(R15-Pad1)"> + <node ref="R15" pin="1"/> + <node ref="R20" pin="2"/> + <node ref="U2" pin="13"/> + <node ref="R16" pin="1"/> + </net> + <net code="28" name="Net-(R2-Pad1)"> + <node ref="R4" pin="2"/> + <node ref="R2" pin="1"/> + <node ref="U2" pin="5"/> + </net> + <net code="29" name="Net-(C2-Pad2)"> + <node ref="P9" pin="1"/> + <node ref="C2" pin="2"/> + </net> + <net code="30" name="Net-(C1-Pad2)"> + <node ref="P9" pin="2"/> + <node ref="C1" pin="2"/> + </net> + <net code="31" name="Net-(C13-Pad1)"> + <node ref="P6" pin="2"/> + <node ref="C13" pin="1"/> + </net> + <net code="32" name="Net-(R15-Pad2)"> + <node ref="R16" pin="2"/> + <node ref="U3" pin="6"/> + <node ref="R15" pin="2"/> + </net> + <net code="33" name="Net-(C14-Pad1)"> + <node ref="C14" pin="1"/> + <node ref="P6" pin="4"/> + </net> + <net code="34" name="Net-(C14-Pad2)"> + <node ref="R25" pin="1"/> + <node ref="C14" pin="2"/> + <node ref="P6" pin="3"/> + </net> + <net code="35" name="Net-(C13-Pad2)"> + <node ref="P6" pin="1"/> + <node ref="R24" pin="1"/> + <node ref="C13" pin="2"/> + </net> + <net code="36" name="Net-(R17-Pad2)"> + <node ref="R17" pin="2"/> + <node ref="R18" pin="2"/> + <node ref="U3" pin="3"/> + </net> + <net code="38" name="Net-(C2-Pad1)"> + <node ref="C2" pin="1"/> + <node ref="P5" pin="2"/> + <node ref="R2" pin="2"/> + <node ref="P5" pin="1"/> + </net> + <net code="39" name="Net-(C1-Pad1)"> + <node ref="C1" pin="1"/> + <node ref="R1" pin="2"/> + <node ref="P1" pin="2"/> + <node ref="P1" pin="1"/> + </net> + <net code="40" name="Net-(IC1-Pad34)"> + <node ref="IC1" pin="34"/> + <node ref="P4" pin="2"/> + </net> + <net code="41" name="Net-(IC1-Pad35)"> + <node ref="P4" pin="4"/> + <node ref="IC1" pin="35"/> + </net> + <net code="42" name="/PSU_PWM"> + <node ref="IC1" pin="24"/> + <node ref="Q1" pin="1"/> + </net> + <net code="43" name="/VCC_3V3"> + <node ref="IC1" pin="31"/> + <node ref="L2" pin="1"/> + <node ref="U1" pin="2"/> + <node ref="IC1" pin="19"/> + <node ref="C6" pin="1"/> + <node ref="C4" pin="1"/> + <node ref="C11" pin="1"/> + <node ref="P4" pin="1"/> + </net> + <net code="44" name="+5V"> + <node ref="P2" pin="1"/> + <node ref="C3" pin="1"/> + <node ref="U1" pin="3"/> + <node ref="C10" pin="1"/> + <node ref="C9" pin="1"/> + <node ref="L1" pin="2"/> + </net> + <net code="45" name="/DAC_OUT2"> + <node ref="IC1" pin="7"/> + <node ref="U2" pin="12"/> + </net> + <net code="46" name="Net-(P2-Pad4)"> + <node ref="P2" pin="4"/> + </net> + <net code="47" name="Net-(IC1-Pad20)"> + <node ref="IC1" pin="20"/> + </net> + <net code="48" name="Net-(IC1-Pad10)"> + <node ref="IC1" pin="10"/> + </net> + <net code="49" name="Net-(IC1-Pad9)"> + <node ref="IC1" pin="9"/> + </net> + <net code="50" name="/DAC_OUT"> + <node ref="IC1" pin="6"/> + <node ref="U2" pin="10"/> + </net> + <net code="51" name="/TO_B1"> + <node ref="IC1" pin="5"/> + <node ref="U3" pin="5"/> + </net> + <net code="52" name="/TO_B0"> + <node ref="U3" pin="2"/> + <node ref="IC1" pin="4"/> + </net> + <net code="53" name="Net-(IC1-Pad3)"> + <node ref="IC1" pin="3"/> + </net> + <net code="54" name="/CH2"> + <node ref="U2" pin="6"/> + <node ref="R28" pin="2"/> + <node ref="IC1" pin="2"/> + <node ref="IC1" pin="40"/> + <node ref="U2" pin="7"/> + </net> + <net code="55" name="Net-(IC1-Pad37)"> + <node ref="IC1" pin="37"/> + </net> + <net code="56" name="Net-(IC1-Pad36)"> + <node ref="IC1" pin="36"/> + </net> + <net code="57" name="Net-(IC1-Pad16)"> + <node ref="IC1" pin="16"/> + </net> + <net code="58" name="Net-(IC1-Pad25)"> + <node ref="IC1" pin="25"/> + </net> + <net code="59" name="Net-(IC1-Pad43)"> + <node ref="IC1" pin="43"/> + </net> + <net code="60" name="Net-(IC1-Pad23)"> + <node ref="IC1" pin="23"/> + </net> + <net code="61" name="Net-(IC1-Pad13)"> + <node ref="IC1" pin="13"/> + </net> + <net code="62" name="/CH1"> + <node ref="IC1" pin="42"/> + <node ref="U2" pin="1"/> + <node ref="U2" pin="2"/> + <node ref="R21" pin="1"/> + </net> + <net code="63" name="Net-(IC1-Pad22)"> + <node ref="IC1" pin="22"/> + </net> + <net code="64" name="Net-(IC1-Pad41)"> + <node ref="IC1" pin="41"/> + </net> + <net code="65" name="Net-(IC1-Pad21)"> + <node ref="IC1" pin="21"/> + </net> + <net code="66" name="/XCK"> + <node ref="IC1" pin="11"/> + <node ref="IC1" pin="15"/> + </net> + <net code="67" name="/PSU_FEEDBACK"> + <node ref="R27" pin="1"/> + <node ref="R26" pin="2"/> + <node ref="IC1" pin="1"/> + </net> + <net code="68" name="Net-(R23-Pad1)"> + <node ref="R23" pin="1"/> + <node ref="R25" pin="2"/> + </net> + <net code="69" name="/VGND"> + <node ref="F1" pin="2"/> + <node ref="P7" pin="4"/> + <node ref="P7" pin="3"/> + <node ref="P7" pin="2"/> + <node ref="C15" pin="2"/> + <node ref="C9" pin="2"/> + <node ref="C16" pin="2"/> + <node ref="C10" pin="2"/> + <node ref="Q1" pin="2"/> + </net> + <net code="70" name="/PSU_OUT"> + <node ref="D1" pin="1"/> + <node ref="L3" pin="2"/> + <node ref="R26" pin="1"/> + <node ref="C15" pin="1"/> + <node ref="P7" pin="1"/> + <node ref="C16" pin="1"/> + </net> + <net code="71" name="Net-(R17-Pad1)"> + <node ref="R18" pin="1"/> + <node ref="R19" pin="2"/> + <node ref="U2" pin="9"/> + <node ref="R17" pin="1"/> + </net> + <net code="72" name="/DIG_CH2"> + <node ref="U4" pin="3"/> + <node ref="IC1" pin="12"/> + </net> + </nets> +</export> diff --git a/PCB/WOT/Tinylab_proto1-B_Cu.gbr b/PCB/WOT/Tinylab_proto1-B_Cu.gbr new file mode 100644 index 00000000..95c142f0 --- /dev/null +++ b/PCB/WOT/Tinylab_proto1-B_Cu.gbr @@ -0,0 +1,480 @@ +G04 #@! TF.FileFunction,Copper,L2,Bot,Signal* +%FSLAX46Y46*% +G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* +G04 Created by KiCad (PCBNEW (2015-08-05 BZR 6055, Git fa29c62)-product) date 28/09/2015 12:51:56 PM* +%MOMM*% +G01* +G04 APERTURE LIST* +%ADD10C,0.100000*% +%ADD11C,1.501140*% +%ADD12C,1.998980*% +%ADD13R,1.998980X1.998980*% +%ADD14R,2.032000X1.727200*% +%ADD15O,2.032000X1.727200*% +%ADD16O,0.950000X1.250000*% +%ADD17O,1.550000X1.000000*% +%ADD18R,1.727200X2.032000*% +%ADD19O,1.727200X2.032000*% +%ADD20R,1.727200X1.727200*% +%ADD21O,1.727200X1.727200*% +%ADD22R,2.032000X2.032000*% +%ADD23O,2.032000X2.032000*% +%ADD24C,0.600000*% +%ADD25C,1.160000*% +%ADD26C,0.580000*% +%ADD27C,0.254000*% +G04 APERTURE END LIST* +D10* +D11* +X70855840Y-128137920D03* +X70855840Y-125597920D03* +X69230240Y-141175740D03* +X69230240Y-138635740D03* +D12* +X63820040Y-134800340D03* +D13* +X73980040Y-134800340D03* +D12* +X74117200Y-131899660D03* +D13* +X63957200Y-131899660D03* +D14* +X36258500Y-146100800D03* +D15* +X36258500Y-148640800D03* +X36258500Y-151180800D03* +X36258500Y-153720800D03* +D16* +X40127360Y-133399260D03* +X40127360Y-138399260D03* +D17* +X37427360Y-132399260D03* +X37427360Y-139399260D03* +D18* +X64861440Y-154310080D03* +D19* +X67401440Y-154310080D03* +X69941440Y-154310080D03* +X72481440Y-154310080D03* +D20* +X57718960Y-123718320D03* +D21* +X57718960Y-126258320D03* +X55178960Y-123718320D03* +X55178960Y-126258320D03* +D18* +X49342040Y-125089920D03* +D19* +X46802040Y-125089920D03* +X44262040Y-125089920D03* +D22* +X61328300Y-154012900D03* +D23* +X58788300Y-154012900D03* +D22* +X73741280Y-144505680D03* +D23* +X71201280Y-144505680D03* +D22* +X65714880Y-122570240D03* +D23* +X63174880Y-122570240D03* +D24* +X49890680Y-149565360D03* +X55636160Y-147949920D03* +X46583600Y-149489160D03* +X46431200Y-134172960D03* +X53213000Y-126862840D03* +X49946560Y-128727200D03* +X63261240Y-126908560D03* +X63362840Y-128930400D03* +X51450240Y-144231360D03* +X45496480Y-149270720D03* +X54218840Y-133852920D03* +X52466240Y-133868160D03* +X55544720Y-144200880D03* +X45577760Y-151079200D03* +X48381920Y-142179040D03* +X51628040Y-149618700D03* +X43665140Y-144449800D03* +X65603120Y-128579880D03* +X57708800Y-146177000D03* +X61305440Y-144912080D03* +X56306720Y-141046200D03* +X48823880Y-144795240D03* +X55707280Y-150850600D03* +X56687720Y-146212560D03* +X55859680Y-128635760D03* +X57246520Y-128625600D03* +X58968640Y-128595120D03* +X60071000Y-126959360D03* +X60858400Y-130210560D03* +X58440320Y-132730240D03* +X54193440Y-133014720D03* +X50942240Y-133278880D03* +X45326300Y-135536940D03* +X42057320Y-135559800D03* +X45453300Y-136692640D03* +X42092880Y-136486900D03* +X71241920Y-147243800D03* +X51099720Y-137353040D03* +X68813680Y-147106640D03* +X50678080Y-138054080D03* +X66212720Y-147050760D03* +X49982120Y-139420600D03* +X63113920Y-146324320D03* +X50881280Y-139476480D03* +X51551840Y-132344160D03* +X55011320Y-127955040D03* +X57383680Y-133664960D03* +X55265320Y-136585960D03* +X52491640Y-136652000D03* +X56509920Y-144028160D03* +X52202080Y-147177760D03* +X57952640Y-141041120D03* +X48828960Y-143804640D03* +X45557440Y-145796000D03* +X44500800Y-147096480D03* +X64119760Y-127284480D03* +X61132720Y-128452880D03* +X60192920Y-147203160D03* +X57876440Y-149839680D03* +D25* +X46583600Y-144424400D02* +X46583600Y-134325360D01* +X46583600Y-134325360D02* +X46431200Y-134172960D01* +X49342040Y-125089920D02* +X49342040Y-127086360D01* +X49342040Y-127086360D02* +X48061880Y-128366520D01* +X48061880Y-128366520D02* +X46126400Y-128366520D01* +X46126400Y-128366520D02* +X45029120Y-129463800D01* +X45029120Y-129463800D02* +X45029120Y-132557520D01* +X45029120Y-132557520D02* +X46431200Y-133959600D01* +X46431200Y-133959600D02* +X46431200Y-134172960D01* +D26* +X49890680Y-149565360D02* +X51384200Y-148071840D01* +X51384200Y-148071840D02* +X55514240Y-148071840D01* +X55514240Y-148071840D02* +X55636160Y-147949920D01* +D27* +X55514240Y-148071840D02* +X51384200Y-148071840D01* +X55636160Y-147949920D02* +X55514240Y-148071840D01* +D26* +X46431200Y-134172960D02* +X46431200Y-133959600D01* +X48061880Y-128366520D02* +X49342040Y-127086360D01* +X46126400Y-128366520D02* +X48061880Y-128366520D01* +X45029120Y-129463800D02* +X46126400Y-128366520D01* +X45029120Y-132557520D02* +X45029120Y-129463800D01* +X46431200Y-133959600D02* +X45029120Y-132557520D01* +X46583600Y-144424400D02* +X46583600Y-149489160D01* +X46431200Y-134172960D02* +X46583600Y-134325360D01* +D27* +X53213000Y-126862840D02* +X53213000Y-125547120D01* +X53213000Y-125547120D02* +X55041800Y-123718320D01* +X55041800Y-123718320D02* +X55178960Y-123718320D01* +D25* +X51810920Y-126862840D02* +X53213000Y-126862840D01* +X49946560Y-128727200D02* +X51810920Y-126862840D01* +D27* +X63362840Y-127010160D02* +X63362840Y-128930400D01* +X63261240Y-126908560D02* +X63362840Y-127010160D01* +X50596800Y-145084800D02* +X51450240Y-144231360D01* +X50596800Y-146690080D02* +X50596800Y-145084800D01* +X46959520Y-150327360D02* +X50596800Y-146690080D01* +X46248320Y-150327360D02* +X46959520Y-150327360D01* +X45943520Y-150022560D02* +X46248320Y-150327360D01* +X45943520Y-149717760D02* +X45943520Y-150022560D01* +X45496480Y-149270720D02* +X45943520Y-149717760D01* +D26* +X52481480Y-133852920D02* +X54218840Y-133852920D01* +X52466240Y-133868160D02* +X52481480Y-133852920D01* +D27* +X53492400Y-144200880D02* +X55544720Y-144200880D01* +X51673760Y-146019520D02* +X53492400Y-144200880D01* +X51673760Y-146588480D02* +X51673760Y-146019520D01* +X48585120Y-149677120D02* +X51673760Y-146588480D01* +X48585120Y-150591520D02* +X48585120Y-149677120D01* +X47589440Y-151587200D02* +X48585120Y-150591520D01* +X46085760Y-151587200D02* +X47589440Y-151587200D01* +X45577760Y-151079200D02* +X46085760Y-151587200D01* +D25* +X74117200Y-131899660D02* +X74117200Y-128859280D01* +X74117200Y-128859280D02* +X70855840Y-125597920D01* +X50068480Y-134701280D02* +X50068480Y-135397240D01* +X50078640Y-135407400D02* +X51120040Y-135407400D01* +X50068480Y-135397240D02* +X50078640Y-135407400D01* +X48381920Y-142179040D02* +X48381920Y-136387840D01* +X57297320Y-135407400D02* +X62585600Y-130119120D01* +X51120040Y-135407400D02* +X57297320Y-135407400D01* +X48381920Y-136387840D02* +X50068480Y-134701280D01* +X62585600Y-130119120D02* +X64063880Y-130119120D01* +D26* +X48381920Y-142179040D02* +X48768000Y-141792960D01* +X48768000Y-141792960D02* +X48768000Y-136387840D01* +X48768000Y-136387840D02* +X50434240Y-134721600D01* +X50434240Y-134721600D02* +X57972960Y-134721600D01* +X57972960Y-134721600D02* +X57983120Y-134721600D01* +X57983120Y-134721600D02* +X61501020Y-131203700D01* +X61501020Y-131203700D02* +X62585600Y-130119120D01* +X62585600Y-130119120D02* +X63809880Y-130119120D01* +X63809880Y-130119120D02* +X64063880Y-130119120D01* +D25* +X51628040Y-151770080D02* +X51628040Y-149618700D01* +X49001680Y-154396440D02* +X51628040Y-151770080D01* +X43190160Y-154396440D02* +X49001680Y-154396440D01* +X42044620Y-153250900D02* +X43190160Y-154396440D01* +X42044620Y-146070320D02* +X42044620Y-153250900D01* +X43665140Y-144449800D02* +X42044620Y-146070320D01* +X64063880Y-130119120D02* +X65603120Y-128579880D01* +X66045080Y-128137920D02* +X65603120Y-128579880D01* +D27* +X66045080Y-128137920D02* +X65603120Y-128579880D01* +D26* +X64063880Y-130119120D02* +X65603120Y-128579880D01* +D25* +X61305440Y-144988280D02* +X61305440Y-144912080D01* +X60431680Y-145862040D02* +X61305440Y-144988280D01* +X58023760Y-145862040D02* +X60431680Y-145862040D01* +D26* +X57708800Y-146177000D02* +X58023760Y-145862040D01* +D25* +X70855840Y-128137920D02* +X66045080Y-128137920D01* +X73741280Y-144505680D02* +X73741280Y-143146780D01* +X73741280Y-143146780D02* +X69230240Y-138635740D01* +D26* +X73741280Y-143146780D02* +X69230240Y-138635740D01* +D25* +X63820040Y-134800340D02* +X63820040Y-132036820D01* +X63820040Y-132036820D02* +X63957200Y-131899660D01* +D27* +X53868320Y-143484600D02* +X56306720Y-141046200D01* +X50134520Y-143484600D02* +X53868320Y-143484600D01* +X48823880Y-144795240D02* +X50134520Y-143484600D01* +X56769000Y-149788880D02* +X55707280Y-150850600D01* +X56769000Y-146293840D02* +X56769000Y-149788880D01* +X56687720Y-146212560D02* +X56769000Y-146293840D01* +X57236360Y-128635760D02* +X55859680Y-128635760D01* +X57246520Y-128625600D02* +X57236360Y-128635760D01* +X58968640Y-128061720D02* +X58968640Y-128595120D01* +X60071000Y-126959360D02* +X58968640Y-128061720D01* +X60858400Y-130312160D02* +X60858400Y-130210560D01* +X58440320Y-132730240D02* +X60858400Y-130312160D01* +X51206400Y-133014720D02* +X54193440Y-133014720D01* +X50942240Y-133278880D02* +X51206400Y-133014720D01* +X42080180Y-135536940D02* +X45326300Y-135536940D01* +X42057320Y-135559800D02* +X42080180Y-135536940D01* +X42298620Y-136692640D02* +X45453300Y-136692640D01* +X42092880Y-136486900D02* +X42298620Y-136692640D01* +X70434200Y-147243800D02* +X71241920Y-147243800D01* +X69093080Y-145902680D02* +X70434200Y-147243800D01* +X66771520Y-145902680D02* +X69093080Y-145902680D01* +X66492120Y-145623280D02* +X66771520Y-145902680D01* +X66492120Y-145150840D02* +X66492120Y-145623280D01* +X58806080Y-137464800D02* +X66492120Y-145150840D01* +X51211480Y-137464800D02* +X58806080Y-137464800D01* +X51099720Y-137353040D02* +X51211480Y-137464800D01* +X67919600Y-147106640D02* +X68813680Y-147106640D01* +X67218560Y-146405600D02* +X67919600Y-147106640D01* +X65735200Y-146405600D02* +X67218560Y-146405600D01* +X65405000Y-146075400D02* +X65735200Y-146405600D01* +X65405000Y-145125440D02* +X65405000Y-146075400D01* +X58303160Y-138023600D02* +X65405000Y-145125440D01* +X50708560Y-138023600D02* +X58303160Y-138023600D01* +X50678080Y-138054080D02* +X50708560Y-138023600D01* +X65039240Y-147050760D02* +X66212720Y-147050760D01* +X64201040Y-146212560D02* +X65039240Y-147050760D01* +X64201040Y-144896840D02* +X64201040Y-146212560D01* +X58084720Y-138780520D02* +X64201040Y-144896840D01* +X50622200Y-138780520D02* +X58084720Y-138780520D01* +X49982120Y-139420600D02* +X50622200Y-138780520D01* +X63113920Y-144790160D02* +X63113920Y-146324320D01* +X57912000Y-139588240D02* +X63113920Y-144790160D01* +X50993040Y-139588240D02* +X57912000Y-139588240D01* +X50881280Y-139476480D02* +X50993040Y-139588240D01* +X51551840Y-129682240D02* +X51551840Y-132344160D01* +X51876960Y-129357120D02* +X51551840Y-129682240D01* +X53609240Y-129357120D02* +X51876960Y-129357120D01* +X55011320Y-127955040D02* +X53609240Y-129357120D01* +X58216800Y-126756160D02* +X57718960Y-126258320D01* +X56774080Y-127853440D02* +X55178960Y-126258320D01* +X57663080Y-127853440D02* +X56774080Y-127853440D01* +X58054240Y-128244600D02* +X57663080Y-127853440D01* +X58054240Y-129590800D02* +X58054240Y-128244600D01* +X57216040Y-130429000D02* +X58054240Y-129590800D01* +X57216040Y-133497320D02* +X57216040Y-130429000D01* +X57383680Y-133664960D02* +X57216040Y-133497320D01* +X52557680Y-136585960D02* +X55265320Y-136585960D01* +X52491640Y-136652000D02* +X52557680Y-136585960D01* +X56509920Y-144962880D02* +X56509920Y-144028160D01* +X54457600Y-147015200D02* +X56509920Y-144962880D01* +X52364640Y-147015200D02* +X54457600Y-147015200D01* +X52202080Y-147177760D02* +X52364640Y-147015200D01* +X57038240Y-140126720D02* +X57952640Y-141041120D01* +X52506880Y-140126720D02* +X57038240Y-140126720D01* +X48828960Y-143804640D02* +X52506880Y-140126720D01* +X45557440Y-146039840D02* +X45557440Y-145796000D01* +X44500800Y-147096480D02* +X45557440Y-146039840D01* +X65714880Y-125689360D02* +X65714880Y-122570240D01* +X64119760Y-127284480D02* +X65714880Y-125689360D01* +X61427360Y-124317760D02* +X63174880Y-122570240D01* +X61427360Y-128158240D02* +X61427360Y-124317760D01* +X61132720Y-128452880D02* +X61427360Y-128158240D01* +X60192920Y-147523200D02* +X60192920Y-147203160D01* +X57876440Y-149839680D02* +X60192920Y-147523200D01* +M02* diff --git a/PCB/WOT/Tinylab_proto1-B_Mask.gbr b/PCB/WOT/Tinylab_proto1-B_Mask.gbr new file mode 100644 index 00000000..d4760890 --- /dev/null +++ b/PCB/WOT/Tinylab_proto1-B_Mask.gbr @@ -0,0 +1,78 @@ +G04 #@! TF.FileFunction,Soldermask,Bot* +%FSLAX46Y46*% +G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* +G04 Created by KiCad (PCBNEW (2015-08-05 BZR 6055, Git fa29c62)-product) date 28/09/2015 12:51:56 PM* +%MOMM*% +G01* +G04 APERTURE LIST* +%ADD10C,0.100000*% +%ADD11C,1.501140*% +%ADD12C,1.998980*% +%ADD13R,1.998980X1.998980*% +%ADD14R,2.032000X1.727200*% +%ADD15O,2.032000X1.727200*% +%ADD16O,0.950000X1.250000*% +%ADD17O,1.550000X1.000000*% +%ADD18R,1.727200X2.032000*% +%ADD19O,1.727200X2.032000*% +%ADD20R,1.727200X1.727200*% +%ADD21O,1.727200X1.727200*% +%ADD22R,2.032000X2.032000*% +%ADD23O,2.032000X2.032000*% +G04 APERTURE END LIST* +D10* +D11* +X70855840Y-128137920D03* +X70855840Y-125597920D03* +X69230240Y-141175740D03* +X69230240Y-138635740D03* +D12* +X63820040Y-134800340D03* +D13* +X73980040Y-134800340D03* +D12* +X74117200Y-131899660D03* +D13* +X63957200Y-131899660D03* +D14* +X36258500Y-146100800D03* +D15* +X36258500Y-148640800D03* +X36258500Y-151180800D03* +X36258500Y-153720800D03* +D16* +X40127360Y-133399260D03* +X40127360Y-138399260D03* +D17* +X37427360Y-132399260D03* +X37427360Y-139399260D03* +D18* +X64861440Y-154310080D03* +D19* +X67401440Y-154310080D03* +X69941440Y-154310080D03* +X72481440Y-154310080D03* +D20* +X57718960Y-123718320D03* +D21* +X57718960Y-126258320D03* +X55178960Y-123718320D03* +X55178960Y-126258320D03* +D18* +X49342040Y-125089920D03* +D19* +X46802040Y-125089920D03* +X44262040Y-125089920D03* +D22* +X61328300Y-154012900D03* +D23* +X58788300Y-154012900D03* +D22* +X73741280Y-144505680D03* +D23* +X71201280Y-144505680D03* +D22* +X65714880Y-122570240D03* +D23* +X63174880Y-122570240D03* +M02* diff --git a/PCB/WOT/Tinylab_proto1-B_Paste.gbr b/PCB/WOT/Tinylab_proto1-B_Paste.gbr new file mode 100644 index 00000000..850ea99e --- /dev/null +++ b/PCB/WOT/Tinylab_proto1-B_Paste.gbr @@ -0,0 +1,11 @@ +G04 #@! TF.FileFunction,Paste,Bot* +%FSLAX46Y46*% +G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* +G04 Created by KiCad (PCBNEW (2015-08-05 BZR 6055, Git fa29c62)-product) date 26/09/2015 2:23:25 PM* +%MOMM*% +G01* +G04 APERTURE LIST* +%ADD10C,0.100000*% +G04 APERTURE END LIST* +D10* +M02* diff --git a/PCB/WOT/Tinylab_proto1-B_SilkS.gbr b/PCB/WOT/Tinylab_proto1-B_SilkS.gbr new file mode 100644 index 00000000..5cb45898 --- /dev/null +++ b/PCB/WOT/Tinylab_proto1-B_SilkS.gbr @@ -0,0 +1,11 @@ +G04 #@! TF.FileFunction,Legend,Bot* +%FSLAX46Y46*% +G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* +G04 Created by KiCad (PCBNEW (2015-08-05 BZR 6055, Git fa29c62)-product) date 28/09/2015 12:51:56 PM* +%MOMM*% +G01* +G04 APERTURE LIST* +%ADD10C,0.100000*% +G04 APERTURE END LIST* +D10* +M02* diff --git a/PCB/WOT/Tinylab_proto1-Edge_Cuts.gbr b/PCB/WOT/Tinylab_proto1-Edge_Cuts.gbr new file mode 100644 index 00000000..7b87d719 --- /dev/null +++ b/PCB/WOT/Tinylab_proto1-Edge_Cuts.gbr @@ -0,0 +1,21 @@ +G04 #@! TF.FileFunction,Profile,NP* +%FSLAX46Y46*% +G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* +G04 Created by KiCad (PCBNEW (2015-08-05 BZR 6055, Git fa29c62)-product) date 28/09/2015 12:51:56 PM* +%MOMM*% +G01* +G04 APERTURE LIST* +%ADD10C,0.100000*% +G04 APERTURE END LIST* +D10* +X33639760Y-117850920D02* +X33639760Y-118521480D01* +X76611480Y-117850920D02* +X33639760Y-117850920D01* +X76611480Y-156631640D02* +X76611480Y-117850920D01* +X33639760Y-156631640D02* +X76611480Y-156631640D01* +X33639760Y-117962680D02* +X33639760Y-156631640D01* +M02* diff --git a/PCB/WOT/Tinylab_proto1-F_Cu.gbr b/PCB/WOT/Tinylab_proto1-F_Cu.gbr new file mode 100644 index 00000000..bd5bebef --- /dev/null +++ b/PCB/WOT/Tinylab_proto1-F_Cu.gbr @@ -0,0 +1,1265 @@ +G04 #@! TF.FileFunction,Copper,L1,Top,Signal* +%FSLAX46Y46*% +G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* +G04 Created by KiCad (PCBNEW (2015-08-05 BZR 6055, Git fa29c62)-product) date 28/09/2015 12:51:56 PM* +%MOMM*% +G01* +G04 APERTURE LIST* +%ADD10C,0.100000*% +%ADD11C,0.250000*% +%ADD12R,0.750000X0.800000*% +%ADD13R,0.800000X0.750000*% +%ADD14C,1.501140*% +%ADD15C,1.998980*% +%ADD16R,1.998980X1.998980*% +%ADD17R,2.000000X2.000000*% +%ADD18R,1.600000X0.560000*% +%ADD19R,0.560000X1.600000*% +%ADD20R,2.032000X1.727200*% +%ADD21O,2.032000X1.727200*% +%ADD22R,1.350000X0.400000*% +%ADD23O,0.950000X1.250000*% +%ADD24O,1.550000X1.000000*% +%ADD25R,1.727200X2.032000*% +%ADD26O,1.727200X2.032000*% +%ADD27R,1.727200X1.727200*% +%ADD28O,1.727200X1.727200*% +%ADD29R,2.032000X2.032000*% +%ADD30O,2.032000X2.032000*% +%ADD31R,0.900000X0.600000*% +%ADD32R,0.500000X0.900000*% +%ADD33R,0.900000X0.500000*% +%ADD34R,0.600000X0.900000*% +%ADD35R,1.500000X0.600000*% +%ADD36R,0.508000X0.304800*% +%ADD37C,0.600000*% +%ADD38C,0.254000*% +%ADD39C,0.580000*% +%ADD40C,1.160000*% +G04 APERTURE END LIST* +D10* +D11* +X33988644Y-118352821D02* +X34560073Y-118352821D01* +X34274358Y-119352821D02* +X34274358Y-118352821D01* +X34893406Y-119352821D02* +X34893406Y-118352821D01* +X35369596Y-119352821D02* +X35369596Y-118352821D01* +X35941025Y-119352821D01* +X35941025Y-118352821D01* +X36607691Y-118876630D02* +X36607691Y-119352821D01* +X36274358Y-118352821D02* +X36607691Y-118876630D01* +X36941025Y-118352821D01* +X37750549Y-119352821D02* +X37274358Y-119352821D01* +X37274358Y-118352821D01* +X38036263Y-119067107D02* +X38512454Y-119067107D01* +X37941025Y-119352821D02* +X38274358Y-118352821D01* +X38607692Y-119352821D01* +X39274359Y-118829011D02* +X39417216Y-118876630D01* +X39464835Y-118924250D01* +X39512454Y-119019488D01* +X39512454Y-119162345D01* +X39464835Y-119257583D01* +X39417216Y-119305202D01* +X39321978Y-119352821D01* +X38941025Y-119352821D01* +X38941025Y-118352821D01* +X39274359Y-118352821D01* +X39369597Y-118400440D01* +X39417216Y-118448059D01* +X39464835Y-118543297D01* +X39464835Y-118638535D01* +X39417216Y-118733773D01* +X39369597Y-118781392D01* +X39274359Y-118829011D01* +X38941025Y-118829011D01* +X40702930Y-119352821D02* +X40702930Y-118352821D01* +X41083883Y-118352821D01* +X41179121Y-118400440D01* +X41226740Y-118448059D01* +X41274359Y-118543297D01* +X41274359Y-118686154D01* +X41226740Y-118781392D01* +X41179121Y-118829011D01* +X41083883Y-118876630D01* +X40702930Y-118876630D01* +X42274359Y-119257583D02* +X42226740Y-119305202D01* +X42083883Y-119352821D01* +X41988645Y-119352821D01* +X41845787Y-119305202D01* +X41750549Y-119209964D01* +X41702930Y-119114726D01* +X41655311Y-118924250D01* +X41655311Y-118781392D01* +X41702930Y-118590916D01* +X41750549Y-118495678D01* +X41845787Y-118400440D01* +X41988645Y-118352821D01* +X42083883Y-118352821D01* +X42226740Y-118400440D01* +X42274359Y-118448059D01* +X43036264Y-118829011D02* +X43179121Y-118876630D01* +X43226740Y-118924250D01* +X43274359Y-119019488D01* +X43274359Y-119162345D01* +X43226740Y-119257583D01* +X43179121Y-119305202D01* +X43083883Y-119352821D01* +X42702930Y-119352821D01* +X42702930Y-118352821D01* +X43036264Y-118352821D01* +X43131502Y-118400440D01* +X43179121Y-118448059D01* +X43226740Y-118543297D01* +X43226740Y-118638535D01* +X43179121Y-118733773D01* +X43131502Y-118781392D01* +X43036264Y-118829011D01* +X42702930Y-118829011D01* +X35631501Y-121002821D02* +X35631501Y-120002821D01* +X36012454Y-120002821D01* +X36107692Y-120050440D01* +X36155311Y-120098059D01* +X36202930Y-120193297D01* +X36202930Y-120336154D01* +X36155311Y-120431392D01* +X36107692Y-120479011D01* +X36012454Y-120526630D01* +X35631501Y-120526630D01* +X37202930Y-121002821D02* +X36869596Y-120526630D01* +X36631501Y-121002821D02* +X36631501Y-120002821D01* +X37012454Y-120002821D01* +X37107692Y-120050440D01* +X37155311Y-120098059D01* +X37202930Y-120193297D01* +X37202930Y-120336154D01* +X37155311Y-120431392D01* +X37107692Y-120479011D01* +X37012454Y-120526630D01* +X36631501Y-120526630D01* +X37821977Y-120002821D02* +X38012454Y-120002821D01* +X38107692Y-120050440D01* +X38202930Y-120145678D01* +X38250549Y-120336154D01* +X38250549Y-120669488D01* +X38202930Y-120859964D01* +X38107692Y-120955202D01* +X38012454Y-121002821D01* +X37821977Y-121002821D01* +X37726739Y-120955202D01* +X37631501Y-120859964D01* +X37583882Y-120669488D01* +X37583882Y-120336154D01* +X37631501Y-120145678D01* +X37726739Y-120050440D01* +X37821977Y-120002821D01* +X38536263Y-120002821D02* +X39107692Y-120002821D01* +X38821977Y-121002821D02* +X38821977Y-120002821D01* +X39631501Y-120002821D02* +X39821978Y-120002821D01* +X39917216Y-120050440D01* +X40012454Y-120145678D01* +X40060073Y-120336154D01* +X40060073Y-120669488D01* +X40012454Y-120859964D01* +X39917216Y-120955202D01* +X39821978Y-121002821D01* +X39631501Y-121002821D01* +X39536263Y-120955202D01* +X39441025Y-120859964D01* +X39393406Y-120669488D01* +X39393406Y-120336154D01* +X39441025Y-120145678D01* +X39536263Y-120050440D01* +X39631501Y-120002821D01* +X41774359Y-121002821D02* +X41202930Y-121002821D01* +X41488644Y-121002821D02* +X41488644Y-120002821D01* +X41393406Y-120145678D01* +X41298168Y-120240916D01* +X41202930Y-120288535D01* +D12* +X39319200Y-152682640D03* +X39319200Y-151182640D03* +X39278560Y-147088160D03* +X39278560Y-148588160D03* +X43682920Y-135526080D03* +X43682920Y-137026080D03* +D13* +X42864340Y-129816860D03* +X44364340Y-129816860D03* +D12* +X44226480Y-150805580D03* +X44226480Y-149305580D03* +D14* +X70855840Y-128137920D03* +X70855840Y-125597920D03* +D13* +X58795220Y-150964900D03* +X60295220Y-150964900D03* +D12* +X75072240Y-126224600D03* +X75072240Y-127724600D03* +X56596280Y-147961920D03* +X56596280Y-149461920D03* +D14* +X69230240Y-141175740D03* +X69230240Y-138635740D03* +D12* +X73941940Y-139143040D03* +X73941940Y-140643040D03* +D15* +X63820040Y-134800340D03* +D16* +X73980040Y-134800340D03* +D17* +X43665140Y-139105840D03* +X43665140Y-142305840D03* +D18* +X59977400Y-140626600D03* +X59977400Y-139826600D03* +X59977400Y-139026600D03* +X59977400Y-138226600D03* +X59977400Y-137426600D03* +X59977400Y-136626600D03* +X59977400Y-135826600D03* +X59977400Y-135026600D03* +X59977400Y-134226600D03* +X59977400Y-133426600D03* +X59977400Y-132626600D03* +D19* +X58127400Y-130776600D03* +X57327400Y-130776600D03* +X56527400Y-130776600D03* +X55727400Y-130776600D03* +X54927400Y-130776600D03* +X54127400Y-130776600D03* +X53327400Y-130776600D03* +X52527400Y-130776600D03* +X51727400Y-130776600D03* +X50927400Y-130776600D03* +X50127400Y-130776600D03* +D18* +X48277400Y-132626600D03* +X48277400Y-133426600D03* +X48277400Y-134226600D03* +X48277400Y-135026600D03* +X48277400Y-135826600D03* +X48277400Y-136626600D03* +X48277400Y-137426600D03* +X48277400Y-138226600D03* +X48277400Y-139026600D03* +X48277400Y-139826600D03* +X48277400Y-140626600D03* +D19* +X50127400Y-142476600D03* +X50927400Y-142476600D03* +X51727400Y-142476600D03* +X52527400Y-142476600D03* +X53327400Y-142476600D03* +X54127400Y-142476600D03* +X54927400Y-142476600D03* +X55727400Y-142476600D03* +X56527400Y-142476600D03* +X57327400Y-142476600D03* +X58127400Y-142476600D03* +D15* +X74117200Y-131899660D03* +D16* +X63957200Y-131899660D03* +D20* +X36258500Y-146100800D03* +D21* +X36258500Y-148640800D03* +X36258500Y-151180800D03* +X36258500Y-153720800D03* +D22* +X40127360Y-134599260D03* +X40127360Y-135249260D03* +X40127360Y-135899260D03* +X40127360Y-136549260D03* +X40127360Y-137199260D03* +D23* +X40127360Y-133399260D03* +X40127360Y-138399260D03* +D24* +X37427360Y-132399260D03* +X37427360Y-139399260D03* +D25* +X64861440Y-154310080D03* +D26* +X67401440Y-154310080D03* +X69941440Y-154310080D03* +X72481440Y-154310080D03* +D27* +X57718960Y-123718320D03* +D28* +X57718960Y-126258320D03* +X55178960Y-123718320D03* +X55178960Y-126258320D03* +D25* +X49342040Y-125089920D03* +D26* +X46802040Y-125089920D03* +X44262040Y-125089920D03* +D29* +X61328300Y-154012900D03* +D30* +X58788300Y-154012900D03* +D29* +X73741280Y-144505680D03* +D30* +X71201280Y-144505680D03* +D29* +X65714880Y-122570240D03* +D30* +X63174880Y-122570240D03* +D31* +X68435680Y-126309120D03* +X65635680Y-127259120D03* +X65635680Y-125359120D03* +D32* +X40983600Y-154289760D03* +X39483600Y-154289760D03* +X40968360Y-145481040D03* +X39468360Y-145481040D03* +D33* +X42484040Y-154338720D03* +X42484040Y-152838720D03* +X42400220Y-147272440D03* +X42400220Y-145772440D03* +D32* +X42827640Y-151102060D03* +X41327640Y-151102060D03* +X42771760Y-149009100D03* +X41271760Y-149009100D03* +D33* +X72517000Y-150209820D03* +X72517000Y-151709820D03* +X70081140Y-150059960D03* +X70081140Y-151559960D03* +X67487800Y-150133620D03* +X67487800Y-151633620D03* +X64823340Y-150019320D03* +X64823340Y-151519320D03* +X72478900Y-147352320D03* +X72478900Y-148852320D03* +X70004940Y-147088160D03* +X70004940Y-148588160D03* +X67449700Y-147047520D03* +X67449700Y-148547520D03* +X64785240Y-147009420D03* +X64785240Y-148509420D03* +D32* +X58673300Y-146011900D03* +X60173300Y-146011900D03* +X60198700Y-148577300D03* +X58698700Y-148577300D03* +X64608140Y-137822940D03* +X63108140Y-137822940D03* +X63146240Y-139816840D03* +X64646240Y-139816840D03* +X64608140Y-141988540D03* +X63108140Y-141988540D03* +D34* +X43642280Y-134191200D03* +X42692280Y-131391200D03* +X44592280Y-131391200D03* +D35* +X48417500Y-145770600D03* +X48417500Y-147040600D03* +X48417500Y-148310600D03* +X48417500Y-149580600D03* +X48417500Y-150850600D03* +X48417500Y-152120600D03* +X48417500Y-153390600D03* +X53817500Y-153390600D03* +X53817500Y-152120600D03* +X53817500Y-150850600D03* +X53817500Y-149580600D03* +X53817500Y-148310600D03* +X53817500Y-147040600D03* +X53817500Y-145770600D03* +D36* +X60243720Y-127838200D03* +X60243720Y-129108200D03* +X62275720Y-128473200D03* +X60243720Y-128473200D03* +X62275720Y-129108200D03* +X62275720Y-127838200D03* +D13* +X52036280Y-128427480D03* +X53536280Y-128427480D03* +X54445600Y-144200880D03* +X52945600Y-144200880D03* +D37* +X49890680Y-149565360D03* +X55636160Y-147949920D03* +X46583600Y-149489160D03* +X46431200Y-134172960D03* +X53213000Y-126862840D03* +X49946560Y-128727200D03* +X63261240Y-126908560D03* +X63362840Y-128930400D03* +X51450240Y-144231360D03* +X45496480Y-149270720D03* +X54218840Y-133852920D03* +X52466240Y-133868160D03* +X55544720Y-144200880D03* +X45577760Y-151079200D03* +X48381920Y-142179040D03* +X51628040Y-149618700D03* +X43665140Y-144449800D03* +X65603120Y-128579880D03* +X57708800Y-146177000D03* +X61305440Y-144912080D03* +X56306720Y-141046200D03* +X48823880Y-144795240D03* +X55707280Y-150850600D03* +X56687720Y-146212560D03* +X55859680Y-128635760D03* +X57246520Y-128625600D03* +X58968640Y-128595120D03* +X60071000Y-126959360D03* +X60858400Y-130210560D03* +X58440320Y-132730240D03* +X54193440Y-133014720D03* +X50942240Y-133278880D03* +X45326300Y-135536940D03* +X42057320Y-135559800D03* +X45453300Y-136692640D03* +X42092880Y-136486900D03* +X71241920Y-147243800D03* +X51099720Y-137353040D03* +X68813680Y-147106640D03* +X50678080Y-138054080D03* +X66212720Y-147050760D03* +X49982120Y-139420600D03* +X63113920Y-146324320D03* +X50881280Y-139476480D03* +X51551840Y-132344160D03* +X55011320Y-127955040D03* +X57383680Y-133664960D03* +X55265320Y-136585960D03* +X52491640Y-136652000D03* +X56509920Y-144028160D03* +X52202080Y-147177760D03* +X57952640Y-141041120D03* +X48828960Y-143804640D03* +X45557440Y-145796000D03* +X44500800Y-147096480D03* +X64119760Y-127284480D03* +X61132720Y-128452880D03* +X60192920Y-147203160D03* +X57876440Y-149839680D03* +D11* +X39483600Y-154289760D02* +X36827460Y-154289760D01* +X36827460Y-154289760D02* +X36258500Y-153720800D01* +X39483600Y-154289760D02* +X39483600Y-152847040D01* +X39483600Y-152847040D02* +X39319200Y-152682640D01* +X39319200Y-151182640D02* +X36260340Y-151182640D01* +X36260340Y-151182640D02* +X36258500Y-151180800D01* +X39468360Y-145481040D02* +X39468360Y-146898360D01* +X39468360Y-146898360D02* +X39278560Y-147088160D01* +X39468360Y-145481040D02* +X36878260Y-145481040D01* +X36878260Y-145481040D02* +X36258500Y-146100800D01* +X39278560Y-148588160D02* +X36311140Y-148588160D01* +X36311140Y-148588160D02* +X36258500Y-148640800D01* +D38* +X56596280Y-147961920D02* +X55648160Y-147961920D01* +X49875440Y-149580600D02* +X48417500Y-149580600D01* +X49890680Y-149565360D02* +X49875440Y-149580600D01* +X55648160Y-147961920D02* +X55636160Y-147949920D01* +D39* +X43642280Y-134191200D02* +X46412960Y-134191200D01* +X46675040Y-149580600D02* +X48417500Y-149580600D01* +X46583600Y-149489160D02* +X46675040Y-149580600D01* +X46412960Y-134191200D02* +X46431200Y-134172960D01* +D38* +X43682920Y-135526080D02* +X43682920Y-134231840D01* +X43682920Y-134231840D02* +X43642280Y-134191200D01* +X40127360Y-134599260D02* +X43234220Y-134599260D01* +X43234220Y-134599260D02* +X43642280Y-134191200D01* +X56527400Y-130776600D02* +X56527400Y-128277920D01* +X56967120Y-127838200D02* +X58643520Y-127838200D01* +X56527400Y-128277920D02* +X56967120Y-127838200D01* +D40* +X46370240Y-129804160D02* +X48869600Y-129804160D01* +X53536280Y-127186120D02* +X53536280Y-128427480D01* +X53213000Y-126862840D02* +X53536280Y-127186120D01* +X48869600Y-129804160D02* +X49946560Y-128727200D01* +D39* +X53327400Y-142476600D02* +X53327400Y-132359400D01* +X53327400Y-132359400D02* +X53327400Y-132267960D01* +X53327400Y-132267960D02* +X53327400Y-130796598D01* +X53327400Y-130796598D02* +X53307402Y-130776600D01* +X53307402Y-130776600D02* +X53327400Y-130776600D01* +X53327400Y-130776600D02* +X53327400Y-128636360D01* +X53327400Y-128636360D02* +X53536280Y-128427480D01* +D40* +X44592280Y-131391200D02* +X44592280Y-130044800D01* +X44592280Y-130044800D02* +X44364340Y-129816860D01* +X46410880Y-129804160D02* +X46370240Y-129804160D01* +X46370240Y-129804160D02* +X44377040Y-129804160D01* +X44377040Y-129804160D02* +X44364340Y-129816860D01* +X43665140Y-139105840D02* +X43665140Y-137043860D01* +X43665140Y-137043860D02* +X43682920Y-137026080D01* +D38* +X62585600Y-126232920D02* +X63261240Y-126908560D01* +X59877960Y-126232920D02* +X62585600Y-126232920D01* +X63185040Y-129108200D02* +X62275720Y-129108200D01* +X63362840Y-128930400D02* +X63185040Y-129108200D01* +X59888120Y-126232920D02* +X59877960Y-126232920D01* +X58643520Y-127467360D02* +X59877960Y-126232920D01* +X59877960Y-126232920D02* +X59888120Y-126232920D01* +X58643520Y-127838200D02* +X58643520Y-127467360D01* +X60243720Y-127838200D02* +X58643520Y-127838200D01* +X55178960Y-123718320D02* +X55158640Y-123718320D01* +X46398180Y-129816860D02* +X44364340Y-129816860D01* +X46410880Y-129804160D02* +X46398180Y-129816860D01* +D39* +X43665140Y-137043860D02* +X43682920Y-137026080D01* +D38* +X44592280Y-130044800D02* +X44364340Y-129816860D01* +X40127360Y-137199260D02* +X43509740Y-137199260D01* +X43509740Y-137199260D02* +X43682920Y-137026080D01* +X40127360Y-138399260D02* +X40127360Y-137199260D01* +X37427360Y-139399260D02* +X37427360Y-132399260D01* +D39* +X40127360Y-133399260D02* +X41190180Y-133399260D01* +X44592280Y-132313640D02* +X44592280Y-131391200D01* +X44094400Y-132811520D02* +X44592280Y-132313640D01* +X41777920Y-132811520D02* +X44094400Y-132811520D01* +X41190180Y-133399260D02* +X41777920Y-132811520D01* +X40127360Y-133399260D02* +X39942500Y-133399260D01* +X39942500Y-133399260D02* +X38942500Y-132399260D01* +X38942500Y-132399260D02* +X37427360Y-132399260D01* +X40127360Y-138399260D02* +X40127360Y-138505760D01* +X40127360Y-138505760D02* +X39233860Y-139399260D01* +X39233860Y-139399260D02* +X37427360Y-139399260D01* +X53327400Y-142476600D02* +X53327400Y-143819080D01* +X53327400Y-143819080D02* +X52945600Y-144200880D01* +X52945600Y-144200880D02* +X51480720Y-144200880D01* +X51480720Y-144200880D02* +X51450240Y-144231360D01* +D38* +X44226480Y-149305580D02* +X45461620Y-149305580D01* +X51450240Y-144231360D02* +X51480720Y-144200880D01* +X45461620Y-149305580D02* +X45496480Y-149270720D01* +X52945600Y-144200880D02* +X52945600Y-144000920D01* +X52945600Y-144000920D02* +X53327400Y-143619120D01* +X53327400Y-143619120D02* +X53327400Y-142476600D01* +D11* +X42771760Y-149009100D02* +X43930000Y-149009100D01* +X43930000Y-149009100D02* +X44226480Y-149305580D01* +D39* +X52527400Y-130776600D02* +X52527400Y-133807000D01* +X54107402Y-133964358D02* +X54107402Y-142476600D01* +X54218840Y-133852920D02* +X54107402Y-133964358D01* +X52527400Y-133807000D02* +X52466240Y-133868160D01* +X54107402Y-142476600D02* +X54127400Y-142476600D01* +X54107402Y-142476600D02* +X54127400Y-142476600D01* +D40* +X42692280Y-131391200D02* +X42692280Y-129988920D01* +X42692280Y-129988920D02* +X42864340Y-129816860D01* +X52036280Y-128427480D02* +X52036280Y-128419160D01* +X52036280Y-128419160D02* +X51257200Y-127640080D01* +D39* +X52036280Y-128427480D02* +X52036280Y-128652840D01* +X52036280Y-128652840D02* +X52527400Y-129143960D01* +X52527400Y-129143960D02* +X52527400Y-130776600D01* +X57718960Y-123718320D02* +X57718960Y-122763280D01* +X57718960Y-122763280D02* +X57058560Y-122102880D01* +X57058560Y-122102880D02* +X54538880Y-122102880D01* +X54538880Y-122102880D02* +X51734720Y-124907040D01* +X51734720Y-124907040D02* +X51734720Y-127162560D01* +X51734720Y-127162560D02* +X51257200Y-127640080D01* +D40* +X44145200Y-127071120D02* +X50688240Y-127071120D01* +X50688240Y-127071120D02* +X51257200Y-127640080D01* +X42864340Y-129816860D02* +X42864340Y-128351980D01* +X42864340Y-128351980D02* +X44145200Y-127071120D01* +X44145200Y-127071120D02* +X44145200Y-125206760D01* +X44145200Y-125206760D02* +X44262040Y-125089920D01* +D38* +X51734720Y-124907040D02* +X51734720Y-128117600D01* +X54538880Y-122102880D02* +X51734720Y-124907040D01* +X57058560Y-122102880D02* +X54538880Y-122102880D01* +X57718960Y-122763280D02* +X57058560Y-122102880D01* +D39* +X50688240Y-127071120D02* +X51734720Y-128117600D01* +X42864340Y-128351980D02* +X44145200Y-127071120D01* +X44145200Y-127071120D02* +X44262040Y-126954280D01* +X44262040Y-126954280D02* +X44262040Y-125089920D01* +D38* +X42692280Y-129988920D02* +X42864340Y-129816860D01* +D39* +X54127400Y-142476600D02* +X54127400Y-143882680D01* +X54127400Y-143882680D02* +X54445600Y-144200880D01* +X54445600Y-144200880D02* +X55544720Y-144200880D01* +D38* +X44226480Y-150805580D02* +X45304140Y-150805580D01* +X45304140Y-150805580D02* +X45577760Y-151079200D01* +X54445600Y-144200880D02* +X54234080Y-144200880D01* +X54234080Y-144200880D02* +X54127400Y-144094200D01* +X54127400Y-144094200D02* +X54127400Y-142476600D01* +D11* +X42827640Y-151102060D02* +X43930000Y-151102060D01* +X43930000Y-151102060D02* +X44226480Y-150805580D01* +D40* +X70855840Y-125597920D02* +X74445560Y-125597920D01* +X74445560Y-125597920D02* +X75072240Y-126224600D01* +X46802040Y-125089920D02* +X46802040Y-123987560D01* +X70855840Y-122646440D02* +X70855840Y-125597920D01* +X68112640Y-119903240D02* +X70855840Y-122646440D01* +X50886360Y-119903240D02* +X68112640Y-119903240D01* +X46802040Y-123987560D02* +X50886360Y-119903240D01* +D38* +X74445560Y-125597920D02* +X75072240Y-126224600D01* +D39* +X58795220Y-150964900D02* +X58795220Y-154005980D01* +X58795220Y-154005980D02* +X58788300Y-154012900D01* +D38* +X58788300Y-154012900D02* +X58788300Y-150971820D01* +X58788300Y-150971820D02* +X58795220Y-150964900D01* +D39* +X60295220Y-150964900D02* +X60439300Y-150964900D01* +X60439300Y-150964900D02* +X61328300Y-151853900D01* +X61328300Y-151853900D02* +X61328300Y-154012900D01* +X60198700Y-148577300D02* +X60198700Y-150868380D01* +X60198700Y-150868380D02* +X60295220Y-150964900D01* +D38* +X60198700Y-150868380D02* +X60295220Y-150964900D01* +X60286900Y-150956580D02* +X60295220Y-150964900D01* +X60439300Y-150964900D02* +X61328300Y-151853900D01* +X61328300Y-151853900D02* +X61328300Y-154012900D01* +D39* +X56596280Y-149461920D02* +X57106120Y-149461920D01* +X57106120Y-149461920D02* +X57708800Y-148859240D01* +X51628040Y-149618700D02* +X53779400Y-149618700D01* +X53779400Y-149618700D02* +X53936180Y-149461920D01* +X53936180Y-149461920D02* +X56596280Y-149461920D01* +X56596280Y-149461920D02* +X53936180Y-149461920D01* +X53936180Y-149461920D02* +X53817500Y-149580600D01* +D40* +X43665140Y-142305840D02* +X48255120Y-142305840D01* +X48255120Y-142305840D02* +X48381920Y-142179040D01* +D39* +X48255120Y-142305840D02* +X48381920Y-142179040D01* +D38* +X53817500Y-149580600D02* +X56477600Y-149580600D01* +X56477600Y-149580600D02* +X56596280Y-149461920D01* +D40* +X43665140Y-142305840D02* +X43665140Y-144449800D01* +D39* +X51666140Y-149580600D02* +X53817500Y-149580600D01* +X51628040Y-149618700D02* +X51666140Y-149580600D01* +X57708800Y-148859240D02* +X57708800Y-146177000D01* +X65603120Y-128579880D02* +X65635680Y-128547320D01* +D40* +X63108140Y-143109380D02* +X63108140Y-143080040D01* +X61305440Y-144912080D02* +X63108140Y-143109380D01* +X63108140Y-141988540D02* +X63108140Y-143080040D01* +X63108140Y-143080040D02* +X63553340Y-143525240D01* +X63553340Y-143525240D02* +X66880740Y-143525240D01* +X66880740Y-143525240D02* +X69230240Y-141175740D01* +X69230240Y-141175740D02* +X73409240Y-141175740D01* +X73409240Y-141175740D02* +X73941940Y-140643040D01* +X71201280Y-144505680D02* +X69829680Y-144505680D01* +X69829680Y-144505680D02* +X69230240Y-143906240D01* +X69230240Y-143906240D02* +X69230240Y-141175740D01* +D39* +X69230240Y-141175740D02* +X66880740Y-143525240D01* +X66880740Y-143525240D02* +X63553340Y-143525240D01* +X63553340Y-143525240D02* +X63108140Y-143080040D01* +X73409240Y-141175740D02* +X73941940Y-140643040D01* +X69230240Y-143906240D02* +X69230240Y-141175740D01* +X69829680Y-144505680D02* +X69230240Y-143906240D01* +D38* +X63108140Y-141988540D02* +X62923420Y-141988540D01* +D40* +X70855840Y-128137920D02* +X74658920Y-128137920D01* +X74658920Y-128137920D02* +X75072240Y-127724600D01* +D39* +X65635680Y-128547320D02* +X65635680Y-127259120D01* +D38* +X74658920Y-128137920D02* +X75072240Y-127724600D01* +X73409240Y-141175740D02* +X73941940Y-140643040D01* +X63553340Y-143525240D02* +X66880740Y-143525240D01* +X63108140Y-143080040D02* +X63553340Y-143525240D01* +X63108140Y-141988540D02* +X63108140Y-143080040D01* +D40* +X73941940Y-139143040D02* +X73727880Y-139143040D01* +X73727880Y-139143040D02* +X73220580Y-138635740D01* +X73220580Y-138635740D02* +X69230240Y-138635740D01* +X73941940Y-139143040D02* +X73941940Y-134838440D01* +X73941940Y-134838440D02* +X73980040Y-134800340D01* +D39* +X73941940Y-134838440D02* +X73980040Y-134800340D01* +X64608140Y-137822940D02* +X67579240Y-137822940D01* +X67579240Y-137822940D02* +X68392040Y-138635740D01* +X68392040Y-138635740D02* +X69230240Y-138635740D01* +X73727880Y-139143040D02* +X73220580Y-138635740D01* +X73220580Y-138635740D02* +X69230240Y-138635740D01* +D38* +X73941940Y-134838440D02* +X73980040Y-134800340D01* +X69230240Y-138635740D02* +X73434640Y-138635740D01* +X73434640Y-138635740D02* +X73941940Y-139143040D01* +X69230240Y-138635740D02* +X68392040Y-138635740D01* +X68392040Y-138635740D02* +X67579240Y-137822940D01* +X68435680Y-126309120D02* +X68435680Y-127421180D01* +X68435680Y-127421180D02* +X63957200Y-131899660D01* +X48417500Y-145770600D02* +X48417500Y-145201620D01* +X56047640Y-140787120D02* +X55849520Y-140787120D01* +X56306720Y-141046200D02* +X56047640Y-140787120D01* +X48417500Y-145201620D02* +X48823880Y-144795240D01* +X54927400Y-142476600D02* +X54927400Y-141709240D01* +X54927400Y-141709240D02* +X55849520Y-140787120D01* +X55849520Y-140787120D02* +X55902860Y-140733780D01* +X55902860Y-140733780D02* +X55902860Y-139423140D01* +X55902860Y-139423140D02* +X56512460Y-138813540D01* +X56512460Y-138813540D02* +X57419240Y-138813540D01* +X57419240Y-138813540D02* +X58432300Y-139826600D01* +X58432300Y-139826600D02* +X59977400Y-139826600D01* +X48417500Y-145770600D02* +X48854360Y-145770600D01* +X48417500Y-147040600D02* +X48417500Y-145770600D01* +X59977400Y-136626600D02* +X61300360Y-136626600D01* +X55707280Y-150850600D02* +X53817500Y-150850600D01* +X61610240Y-141290040D02* +X56687720Y-146212560D01* +X61610240Y-136936480D02* +X61610240Y-141290040D01* +X61300360Y-136626600D02* +X61610240Y-136936480D01* +X55727400Y-130776600D02* +X55727400Y-131846120D01* +X59339360Y-131988560D02* +X59977400Y-132626600D01* +X55869840Y-131988560D02* +X59339360Y-131988560D01* +X55727400Y-131846120D02* +X55869840Y-131988560D01* +X58127400Y-130776600D02* +X58127400Y-130487920D01* +X58127400Y-130487920D02* +X59507120Y-129108200D01* +X59507120Y-129108200D02* +X60243720Y-129108200D01* +X62275720Y-127838200D02* +X62275720Y-127213360D01* +X54127400Y-129479040D02* +X54127400Y-130776600D01* +X54935120Y-128671320D02* +X54127400Y-129479040D01* +X55824120Y-128671320D02* +X54935120Y-128671320D01* +X55859680Y-128635760D02* +X55824120Y-128671320D01* +X58938160Y-128625600D02* +X57246520Y-128625600D01* +X58968640Y-128595120D02* +X58938160Y-128625600D01* +X62021720Y-126959360D02* +X60071000Y-126959360D01* +X62275720Y-127213360D02* +X62021720Y-126959360D01* +X48277400Y-133426600D02* +X50794520Y-133426600D01* +X64597320Y-125359120D02* +X65635680Y-125359120D01* +X64490600Y-125465840D02* +X64597320Y-125359120D01* +X64490600Y-126171960D02* +X64490600Y-125465840D01* +X64759840Y-126441200D02* +X64490600Y-126171960D01* +X64759840Y-128117600D02* +X64759840Y-126441200D01* +X64698880Y-128178560D02* +X64759840Y-128117600D01* +X64698880Y-129092960D02* +X64698880Y-128178560D01* +X63799720Y-129992120D02* +X64698880Y-129092960D01* +X61076840Y-129992120D02* +X63799720Y-129992120D01* +X60858400Y-130210560D02* +X61076840Y-129992120D01* +X54477920Y-132730240D02* +X58440320Y-132730240D01* +X54193440Y-133014720D02* +X54477920Y-132730240D01* +X50794520Y-133426600D02* +X50942240Y-133278880D01* +X40127360Y-135249260D02* +X41746780Y-135249260D01* +X45836640Y-135026600D02* +X48277400Y-135026600D01* +X45326300Y-135536940D02* +X45836640Y-135026600D01* +X41746780Y-135249260D02* +X42057320Y-135559800D01* +X40127360Y-135899260D02* +X41505240Y-135899260D01* +X46319340Y-135826600D02* +X48277400Y-135826600D01* +X45453300Y-136692640D02* +X46319340Y-135826600D01* +X41505240Y-135899260D02* +X42092880Y-136486900D01* +X48277400Y-136626600D02* +X50373280Y-136626600D01* +X71350440Y-147352320D02* +X72478900Y-147352320D01* +X71241920Y-147243800D02* +X71350440Y-147352320D01* +X50373280Y-136626600D02* +X51099720Y-137353040D01* +X48277400Y-137426600D02* +X50050600Y-137426600D01* +X68832160Y-147088160D02* +X70004940Y-147088160D01* +X68813680Y-147106640D02* +X68832160Y-147088160D01* +X50050600Y-137426600D02* +X50678080Y-138054080D01* +X48277400Y-139826600D02* +X49576120Y-139826600D01* +X66215960Y-147047520D02* +X67449700Y-147047520D01* +X66212720Y-147050760D02* +X66215960Y-147047520D01* +X49576120Y-139826600D02* +X49982120Y-139420600D01* +X48277400Y-140626600D02* +X49731160Y-140626600D01* +X63799020Y-147009420D02* +X64785240Y-147009420D01* +X63113920Y-146324320D02* +X63799020Y-147009420D01* +X49731160Y-140626600D02* +X50881280Y-139476480D01* +X57718960Y-126258320D02* +X57546240Y-126258320D01* +X57546240Y-126258320D02* +X55849520Y-127955040D01* +X50127400Y-141007600D02* +X50127400Y-142476600D01* +X50149760Y-140985240D02* +X50127400Y-141007600D01* +X50764440Y-140985240D02* +X50149760Y-140985240D01* +X51739800Y-140009880D02* +X50764440Y-140985240D01* +X51739800Y-132532120D02* +X51739800Y-140009880D01* +X51551840Y-132344160D02* +X51739800Y-132532120D01* +X55849520Y-127955040D02* +X55011320Y-127955040D01* +X50927400Y-142476600D02* +X50927400Y-141731600D01* +X50927400Y-141731600D02* +X52496720Y-140162280D01* +X57383680Y-134467600D02* +X57383680Y-133664960D01* +X55265320Y-136585960D02* +X57383680Y-134467600D01* +X52496720Y-136657080D02* +X52491640Y-136652000D01* +X52496720Y-140162280D02* +X52496720Y-136657080D01* +X50927400Y-142476600D02* +X50927400Y-141696040D01* +X50927400Y-142476600D02* +X50927400Y-141716360D01* +X48417500Y-152120600D02* +X48686720Y-152120600D01* +X48686720Y-152120600D02* +X50820320Y-149987000D01* +X56527400Y-144010680D02* +X56527400Y-142476600D01* +X56509920Y-144028160D02* +X56527400Y-144010680D01* +X50820320Y-148559520D02* +X52202080Y-147177760D01* +X50820320Y-149987000D02* +X50820320Y-148559520D01* +X48417500Y-153390600D02* +X48417500Y-152120600D01* +X42400220Y-147272440D02* +X44324840Y-147272440D01* +X58127400Y-141215880D02* +X58127400Y-142476600D01* +X57952640Y-141041120D02* +X58127400Y-141215880D01* +X47548800Y-143804640D02* +X48828960Y-143804640D01* +X45557440Y-145796000D02* +X47548800Y-143804640D01* +X44324840Y-147272440D02* +X44500800Y-147096480D01* +X58196480Y-142407520D02* +X58127400Y-142476600D01* +D11* +X41271760Y-149009100D02* +X41271760Y-148400900D01* +X41271760Y-148400900D02* +X42400220Y-147272440D01* +X41327640Y-151102060D02* +X41327640Y-149064980D01* +X41327640Y-149064980D02* +X41271760Y-149009100D01* +X42484040Y-152838720D02* +X41728960Y-152838720D01* +X41327640Y-152437400D02* +X41327640Y-151102060D01* +X41728960Y-152838720D02* +X41327640Y-152437400D01* +D38* +X64897000Y-153995120D02* +X64897000Y-151592980D01* +X64897000Y-151592980D02* +X64823340Y-151519320D01* +X67437000Y-151684420D02* +X67487800Y-151633620D01* +X67437000Y-153995120D02* +X67437000Y-151684420D01* +X69977000Y-153995120D02* +X69977000Y-151664100D01* +X69977000Y-151664100D02* +X70081140Y-151559960D01* +X72517000Y-153995120D02* +X72517000Y-151709820D01* +X62931040Y-128473200D02* +X64119760Y-127284480D01* +X62275720Y-128473200D02* +X62931040Y-128473200D01* +X60243720Y-128473200D02* +X61112400Y-128473200D01* +X61112400Y-128473200D02* +X61132720Y-128452880D01* +D11* +X42484040Y-154338720D02* +X43387580Y-154338720D01* +X46875700Y-150850600D02* +X48417500Y-150850600D01* +X43387580Y-154338720D02* +X46875700Y-150850600D01* +X40983600Y-154289760D02* +X42435080Y-154289760D01* +X42435080Y-154289760D02* +X42484040Y-154338720D01* +X42400220Y-145772440D02* +X44345160Y-145772440D01* +X46883320Y-148310600D02* +X48417500Y-148310600D01* +X44345160Y-145772440D02* +X46883320Y-148310600D01* +X40968360Y-145481040D02* +X42108820Y-145481040D01* +X42108820Y-145481040D02* +X42400220Y-145772440D01* +D38* +X72478900Y-148852320D02* +X72478900Y-150171720D01* +X72478900Y-150171720D02* +X72517000Y-150209820D01* +X70004940Y-148588160D02* +X70004940Y-149983760D01* +X70004940Y-149983760D02* +X70081140Y-150059960D01* +X67449700Y-148547520D02* +X67449700Y-150095520D01* +X67449700Y-150095520D02* +X67487800Y-150133620D01* +X64785240Y-148509420D02* +X64785240Y-149981220D01* +X64785240Y-149981220D02* +X64823340Y-150019320D01* +D39* +X58673300Y-146011900D02* +X58673300Y-148551900D01* +X58673300Y-148551900D02* +X58698700Y-148577300D01* +D38* +X58673300Y-148551900D02* +X58698700Y-148577300D01* +X53817500Y-152120600D02* +X55874920Y-152120600D01* +X60223400Y-147203160D02* +X60223400Y-147218400D01* +X60192920Y-147203160D02* +X60223400Y-147203160D01* +X57876440Y-150119080D02* +X57876440Y-149839680D01* +X55874920Y-152120600D02* +X57876440Y-150119080D01* +D39* +X60223400Y-147218400D02* +X60223400Y-146062000D01* +X60223400Y-146062000D02* +X60173300Y-146011900D01* +D38* +X53817500Y-153390600D02* +X53817500Y-152120600D01* +X53817500Y-152120600D02* +X53893700Y-152044400D01* +X60223400Y-147218400D02* +X60173300Y-147168300D01* +X60173300Y-147168300D02* +X60173300Y-146011900D01* +X63146240Y-139816840D02* +X63146240Y-137861040D01* +X63146240Y-137861040D02* +X63108140Y-137822940D01* +X64608140Y-141988540D02* +X64608140Y-139854940D01* +X64608140Y-139854940D02* +X64646240Y-139816840D01* +M02* diff --git a/PCB/WOT/Tinylab_proto1-F_Mask.gbr b/PCB/WOT/Tinylab_proto1-F_Mask.gbr new file mode 100644 index 00000000..0aa4682c --- /dev/null +++ b/PCB/WOT/Tinylab_proto1-F_Mask.gbr @@ -0,0 +1,250 @@ +G04 #@! TF.FileFunction,Soldermask,Top* +%FSLAX46Y46*% +G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* +G04 Created by KiCad (PCBNEW (2015-08-05 BZR 6055, Git fa29c62)-product) date 28/09/2015 12:51:56 PM* +%MOMM*% +G01* +G04 APERTURE LIST* +%ADD10C,0.100000*% +%ADD11R,0.750000X0.800000*% +%ADD12R,0.800000X0.750000*% +%ADD13C,1.501140*% +%ADD14C,1.998980*% +%ADD15R,1.998980X1.998980*% +%ADD16R,2.000000X2.000000*% +%ADD17R,1.600000X0.560000*% +%ADD18R,0.560000X1.600000*% +%ADD19R,2.032000X1.727200*% +%ADD20O,2.032000X1.727200*% +%ADD21R,1.350000X0.400000*% +%ADD22O,0.950000X1.250000*% +%ADD23O,1.550000X1.000000*% +%ADD24R,1.727200X2.032000*% +%ADD25O,1.727200X2.032000*% +%ADD26R,1.727200X1.727200*% +%ADD27O,1.727200X1.727200*% +%ADD28R,2.032000X2.032000*% +%ADD29O,2.032000X2.032000*% +%ADD30R,0.900000X0.600000*% +%ADD31R,0.500000X0.900000*% +%ADD32R,0.900000X0.500000*% +%ADD33R,0.600000X0.900000*% +%ADD34R,1.500000X0.600000*% +%ADD35R,0.508000X0.304800*% +G04 APERTURE END LIST* +D10* +D11* +X39319200Y-152682640D03* +X39319200Y-151182640D03* +X39278560Y-147088160D03* +X39278560Y-148588160D03* +X43682920Y-135526080D03* +X43682920Y-137026080D03* +D12* +X42864340Y-129816860D03* +X44364340Y-129816860D03* +D11* +X44226480Y-150805580D03* +X44226480Y-149305580D03* +D13* +X70855840Y-128137920D03* +X70855840Y-125597920D03* +D12* +X58795220Y-150964900D03* +X60295220Y-150964900D03* +D11* +X75072240Y-126224600D03* +X75072240Y-127724600D03* +X56596280Y-147961920D03* +X56596280Y-149461920D03* +D13* +X69230240Y-141175740D03* +X69230240Y-138635740D03* +D11* +X73941940Y-139143040D03* +X73941940Y-140643040D03* +D14* +X63820040Y-134800340D03* +D15* +X73980040Y-134800340D03* +D16* +X43665140Y-139105840D03* +X43665140Y-142305840D03* +D17* +X59977400Y-140626600D03* +X59977400Y-139826600D03* +X59977400Y-139026600D03* +X59977400Y-138226600D03* +X59977400Y-137426600D03* +X59977400Y-136626600D03* +X59977400Y-135826600D03* +X59977400Y-135026600D03* +X59977400Y-134226600D03* +X59977400Y-133426600D03* +X59977400Y-132626600D03* +D18* +X58127400Y-130776600D03* +X57327400Y-130776600D03* +X56527400Y-130776600D03* +X55727400Y-130776600D03* +X54927400Y-130776600D03* +X54127400Y-130776600D03* +X53327400Y-130776600D03* +X52527400Y-130776600D03* +X51727400Y-130776600D03* +X50927400Y-130776600D03* +X50127400Y-130776600D03* +D17* +X48277400Y-132626600D03* +X48277400Y-133426600D03* +X48277400Y-134226600D03* +X48277400Y-135026600D03* +X48277400Y-135826600D03* +X48277400Y-136626600D03* +X48277400Y-137426600D03* +X48277400Y-138226600D03* +X48277400Y-139026600D03* +X48277400Y-139826600D03* +X48277400Y-140626600D03* +D18* +X50127400Y-142476600D03* +X50927400Y-142476600D03* +X51727400Y-142476600D03* +X52527400Y-142476600D03* +X53327400Y-142476600D03* +X54127400Y-142476600D03* +X54927400Y-142476600D03* +X55727400Y-142476600D03* +X56527400Y-142476600D03* +X57327400Y-142476600D03* +X58127400Y-142476600D03* +D14* +X74117200Y-131899660D03* +D15* +X63957200Y-131899660D03* +D19* +X36258500Y-146100800D03* +D20* +X36258500Y-148640800D03* +X36258500Y-151180800D03* +X36258500Y-153720800D03* +D21* +X40127360Y-134599260D03* +X40127360Y-135249260D03* +X40127360Y-135899260D03* +X40127360Y-136549260D03* +X40127360Y-137199260D03* +D22* +X40127360Y-133399260D03* +X40127360Y-138399260D03* +D23* +X37427360Y-132399260D03* +X37427360Y-139399260D03* +D24* +X64861440Y-154310080D03* +D25* +X67401440Y-154310080D03* +X69941440Y-154310080D03* +X72481440Y-154310080D03* +D26* +X57718960Y-123718320D03* +D27* +X57718960Y-126258320D03* +X55178960Y-123718320D03* +X55178960Y-126258320D03* +D24* +X49342040Y-125089920D03* +D25* +X46802040Y-125089920D03* +X44262040Y-125089920D03* +D28* +X61328300Y-154012900D03* +D29* +X58788300Y-154012900D03* +D28* +X73741280Y-144505680D03* +D29* +X71201280Y-144505680D03* +D28* +X65714880Y-122570240D03* +D29* +X63174880Y-122570240D03* +D30* +X68435680Y-126309120D03* +X65635680Y-127259120D03* +X65635680Y-125359120D03* +D31* +X40983600Y-154289760D03* +X39483600Y-154289760D03* +X40968360Y-145481040D03* +X39468360Y-145481040D03* +D32* +X42484040Y-154338720D03* +X42484040Y-152838720D03* +X42400220Y-147272440D03* +X42400220Y-145772440D03* +D31* +X42827640Y-151102060D03* +X41327640Y-151102060D03* +X42771760Y-149009100D03* +X41271760Y-149009100D03* +D32* +X72517000Y-150209820D03* +X72517000Y-151709820D03* +X70081140Y-150059960D03* +X70081140Y-151559960D03* +X67487800Y-150133620D03* +X67487800Y-151633620D03* +X64823340Y-150019320D03* +X64823340Y-151519320D03* +X72478900Y-147352320D03* +X72478900Y-148852320D03* +X70004940Y-147088160D03* +X70004940Y-148588160D03* +X67449700Y-147047520D03* +X67449700Y-148547520D03* +X64785240Y-147009420D03* +X64785240Y-148509420D03* +D31* +X58673300Y-146011900D03* +X60173300Y-146011900D03* +X60198700Y-148577300D03* +X58698700Y-148577300D03* +X64608140Y-137822940D03* +X63108140Y-137822940D03* +X63146240Y-139816840D03* +X64646240Y-139816840D03* +X64608140Y-141988540D03* +X63108140Y-141988540D03* +D33* +X43642280Y-134191200D03* +X42692280Y-131391200D03* +X44592280Y-131391200D03* +D34* +X48417500Y-145770600D03* +X48417500Y-147040600D03* +X48417500Y-148310600D03* +X48417500Y-149580600D03* +X48417500Y-150850600D03* +X48417500Y-152120600D03* +X48417500Y-153390600D03* +X53817500Y-153390600D03* +X53817500Y-152120600D03* +X53817500Y-150850600D03* +X53817500Y-149580600D03* +X53817500Y-148310600D03* +X53817500Y-147040600D03* +X53817500Y-145770600D03* +D35* +X60243720Y-127838200D03* +X60243720Y-129108200D03* +X62275720Y-128473200D03* +X60243720Y-128473200D03* +X62275720Y-129108200D03* +X62275720Y-127838200D03* +D12* +X52036280Y-128427480D03* +X53536280Y-128427480D03* +X54445600Y-144200880D03* +X52945600Y-144200880D03* +M02* diff --git a/PCB/WOT/Tinylab_proto1-F_Paste.gbr b/PCB/WOT/Tinylab_proto1-F_Paste.gbr new file mode 100644 index 00000000..1b6fefc9 --- /dev/null +++ b/PCB/WOT/Tinylab_proto1-F_Paste.gbr @@ -0,0 +1,176 @@ +G04 #@! TF.FileFunction,Paste,Top* +%FSLAX46Y46*% +G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* +G04 Created by KiCad (PCBNEW (2015-08-05 BZR 6055, Git fa29c62)-product) date 26/09/2015 2:23:25 PM* +%MOMM*% +G01* +G04 APERTURE LIST* +%ADD10C,0.100000*% +%ADD11R,0.750000X0.800000*% +%ADD12R,0.800000X0.750000*% +%ADD13R,2.000000X2.000000*% +%ADD14R,1.600000X0.560000*% +%ADD15R,0.560000X1.600000*% +%ADD16R,1.350000X0.400000*% +%ADD17R,0.900000X0.600000*% +%ADD18R,0.500000X0.900000*% +%ADD19R,0.900000X0.500000*% +%ADD20R,0.600000X0.900000*% +%ADD21R,1.500000X0.600000*% +%ADD22R,0.508000X0.304800*% +G04 APERTURE END LIST* +D10* +D11* +X39827200Y-152682640D03* +X39827200Y-151182640D03* +X39786560Y-147088160D03* +X39786560Y-148588160D03* +X44190920Y-135526080D03* +X44190920Y-137026080D03* +D12* +X43372340Y-129816860D03* +X44872340Y-129816860D03* +D11* +X44734480Y-150805580D03* +X44734480Y-149305580D03* +D12* +X59303220Y-150964900D03* +X60803220Y-150964900D03* +D11* +X75580240Y-126224600D03* +X75580240Y-127724600D03* +X57104280Y-147961920D03* +X57104280Y-149461920D03* +X74449940Y-139143040D03* +X74449940Y-140643040D03* +D13* +X44173140Y-139105840D03* +X44173140Y-142305840D03* +D14* +X60485400Y-140626600D03* +X60485400Y-139826600D03* +X60485400Y-139026600D03* +X60485400Y-138226600D03* +X60485400Y-137426600D03* +X60485400Y-136626600D03* +X60485400Y-135826600D03* +X60485400Y-135026600D03* +X60485400Y-134226600D03* +X60485400Y-133426600D03* +X60485400Y-132626600D03* +D15* +X58635400Y-130776600D03* +X57835400Y-130776600D03* +X57035400Y-130776600D03* +X56235400Y-130776600D03* +X55435400Y-130776600D03* +X54635400Y-130776600D03* +X53835400Y-130776600D03* +X53035400Y-130776600D03* +X52235400Y-130776600D03* +X51435400Y-130776600D03* +X50635400Y-130776600D03* +D14* +X48785400Y-132626600D03* +X48785400Y-133426600D03* +X48785400Y-134226600D03* +X48785400Y-135026600D03* +X48785400Y-135826600D03* +X48785400Y-136626600D03* +X48785400Y-137426600D03* +X48785400Y-138226600D03* +X48785400Y-139026600D03* +X48785400Y-139826600D03* +X48785400Y-140626600D03* +D15* +X50635400Y-142476600D03* +X51435400Y-142476600D03* +X52235400Y-142476600D03* +X53035400Y-142476600D03* +X53835400Y-142476600D03* +X54635400Y-142476600D03* +X55435400Y-142476600D03* +X56235400Y-142476600D03* +X57035400Y-142476600D03* +X57835400Y-142476600D03* +X58635400Y-142476600D03* +D16* +X40635360Y-134599260D03* +X40635360Y-135249260D03* +X40635360Y-135899260D03* +X40635360Y-136549260D03* +X40635360Y-137199260D03* +D17* +X68943680Y-126309120D03* +X66143680Y-127259120D03* +X66143680Y-125359120D03* +D18* +X41491600Y-154289760D03* +X39991600Y-154289760D03* +X41476360Y-145481040D03* +X39976360Y-145481040D03* +D19* +X42992040Y-154338720D03* +X42992040Y-152838720D03* +X42908220Y-147272440D03* +X42908220Y-145772440D03* +D18* +X43335640Y-151102060D03* +X41835640Y-151102060D03* +X43279760Y-149009100D03* +X41779760Y-149009100D03* +D19* +X73025000Y-150209820D03* +X73025000Y-151709820D03* +X70589140Y-150059960D03* +X70589140Y-151559960D03* +X67995800Y-150133620D03* +X67995800Y-151633620D03* +X65331340Y-150019320D03* +X65331340Y-151519320D03* +X72986900Y-147352320D03* +X72986900Y-148852320D03* +X70512940Y-147088160D03* +X70512940Y-148588160D03* +X67957700Y-147047520D03* +X67957700Y-148547520D03* +X65293240Y-147009420D03* +X65293240Y-148509420D03* +D18* +X59181300Y-146011900D03* +X60681300Y-146011900D03* +X60706700Y-148577300D03* +X59206700Y-148577300D03* +X65116140Y-137822940D03* +X63616140Y-137822940D03* +X63654240Y-139816840D03* +X65154240Y-139816840D03* +X65116140Y-141988540D03* +X63616140Y-141988540D03* +D20* +X44150280Y-134191200D03* +X43200280Y-131391200D03* +X45100280Y-131391200D03* +D21* +X48925500Y-145770600D03* +X48925500Y-147040600D03* +X48925500Y-148310600D03* +X48925500Y-149580600D03* +X48925500Y-150850600D03* +X48925500Y-152120600D03* +X48925500Y-153390600D03* +X54325500Y-153390600D03* +X54325500Y-152120600D03* +X54325500Y-150850600D03* +X54325500Y-149580600D03* +X54325500Y-148310600D03* +X54325500Y-147040600D03* +X54325500Y-145770600D03* +D22* +X60751720Y-127838200D03* +X60751720Y-129108200D03* +X62783720Y-128473200D03* +X60751720Y-128473200D03* +X62783720Y-129108200D03* +X62783720Y-127838200D03* +M02* diff --git a/PCB/WOT/Tinylab_proto1-F_SilkS.gbr b/PCB/WOT/Tinylab_proto1-F_SilkS.gbr new file mode 100644 index 00000000..0e441147 --- /dev/null +++ b/PCB/WOT/Tinylab_proto1-F_SilkS.gbr @@ -0,0 +1,1885 @@ +G04 #@! TF.FileFunction,Legend,Top* +%FSLAX46Y46*% +G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* +G04 Created by KiCad (PCBNEW (2015-08-05 BZR 6055, Git fa29c62)-product) date 28/09/2015 12:51:56 PM* +%MOMM*% +G01* +G04 APERTURE LIST* +%ADD10C,0.100000*% +%ADD11C,0.150000*% +%ADD12C,0.152400*% +%ADD13C,0.127000*% +G04 APERTURE END LIST* +D10* +D11* +X38719200Y-152282640D02* +X38719200Y-151582640D01* +X39919200Y-151582640D02* +X39919200Y-152282640D01* +X39878560Y-147488160D02* +X39878560Y-148188160D01* +X38678560Y-148188160D02* +X38678560Y-147488160D01* +X44282920Y-135926080D02* +X44282920Y-136626080D01* +X43082920Y-136626080D02* +X43082920Y-135926080D01* +X43264340Y-129216860D02* +X43964340Y-129216860D01* +X43964340Y-130416860D02* +X43264340Y-130416860D01* +X43626480Y-150405580D02* +X43626480Y-149705580D01* +X44826480Y-149705580D02* +X44826480Y-150405580D01* +X72555100Y-125867160D02* +X72555100Y-126367540D01* +X72555100Y-125867160D02* +X73055480Y-125867160D01* +X72555100Y-125366780D02* +X72555100Y-125867160D01* +X72555100Y-125867160D02* +X72156320Y-125867160D01* +X72156320Y-125867160D02* +X72054720Y-125867160D01* +X74005440Y-126867920D02* +G75* +G03X74005440Y-126867920I-3149600J0D01* +G01* +X59195220Y-150364900D02* +X59895220Y-150364900D01* +X59895220Y-151564900D02* +X59195220Y-151564900D01* +X75672240Y-126624600D02* +X75672240Y-127324600D01* +X74472240Y-127324600D02* +X74472240Y-126624600D01* +X57196280Y-148361920D02* +X57196280Y-149061920D01* +X55996280Y-149061920D02* +X55996280Y-148361920D01* +X70929500Y-138904980D02* +X70929500Y-139405360D01* +X70929500Y-138904980D02* +X71429880Y-138904980D01* +X70929500Y-138404600D02* +X70929500Y-138904980D01* +X70929500Y-138904980D02* +X70530720Y-138904980D01* +X70530720Y-138904980D02* +X70429120Y-138904980D01* +X72379840Y-139905740D02* +G75* +G03X72379840Y-139905740I-3149600J0D01* +G01* +X74541940Y-139543040D02* +X74541940Y-140243040D01* +X73341940Y-140243040D02* +X73341940Y-139543040D01* +X66360040Y-134800340D02* +X65344040Y-134800340D01* +X71186040Y-134800340D02* +X72456040Y-134800340D01* +X70932040Y-136070340D02* +X70932040Y-133530340D01* +X70678040Y-136070340D02* +X70678040Y-133530340D01* +X70424040Y-136070340D02* +X70424040Y-133530340D01* +X71186040Y-136070340D02* +X71186040Y-133530340D01* +X70170040Y-136070340D02* +X71440040Y-133530340D01* +X71440040Y-136070340D02* +X70170040Y-133530340D01* +X70170040Y-136070340D02* +X70170040Y-133530340D01* +X70805040Y-136070340D02* +X70805040Y-133530340D01* +X71440040Y-133530340D02* +X71440040Y-136070340D01* +X71440040Y-136070340D02* +X66360040Y-136070340D01* +X66360040Y-136070340D02* +X66360040Y-133530340D01* +X66360040Y-133530340D02* +X71440040Y-133530340D01* +X42865140Y-139105840D02* +X44465140Y-139105840D01* +X44465140Y-139105840D02* +X44465140Y-142305840D01* +X44465140Y-142305840D02* +X42865140Y-142305840D01* +X42865140Y-142305840D02* +X42865140Y-139105840D01* +X59302400Y-141801600D02* +X59302400Y-141131600D01* +X48952400Y-141801600D02* +X48952400Y-141131600D01* +X48952400Y-131451600D02* +X48952400Y-132121600D01* +X59302400Y-131451600D02* +X59302400Y-132121600D01* +X59302400Y-141801600D02* +X58632400Y-141801600D01* +X59302400Y-131451600D02* +X58632400Y-131451600D01* +X48952400Y-131451600D02* +X49622400Y-131451600D01* +X48952400Y-141801600D02* +X49622400Y-141801600D01* +X59302400Y-141131600D02* +X60777400Y-141131600D01* +X71577200Y-131899660D02* +X72593200Y-131899660D01* +X66751200Y-131899660D02* +X65481200Y-131899660D01* +X67005200Y-130629660D02* +X67005200Y-133169660D01* +X67259200Y-130629660D02* +X67259200Y-133169660D01* +X67513200Y-130629660D02* +X67513200Y-133169660D01* +X66751200Y-130629660D02* +X66751200Y-133169660D01* +X67767200Y-130629660D02* +X66497200Y-133169660D01* +X66497200Y-130629660D02* +X67767200Y-133169660D01* +X67767200Y-130629660D02* +X67767200Y-133169660D01* +X67132200Y-130629660D02* +X67132200Y-133169660D01* +X66497200Y-133169660D02* +X66497200Y-130629660D01* +X66497200Y-130629660D02* +X71577200Y-130629660D01* +X71577200Y-130629660D02* +X71577200Y-133169660D01* +X71577200Y-133169660D02* +X66497200Y-133169660D01* +X34988500Y-147370800D02* +X34988500Y-154990800D01* +X37528500Y-147370800D02* +X37528500Y-154990800D01* +X37808500Y-144550800D02* +X37808500Y-146100800D01* +X34988500Y-154990800D02* +X37528500Y-154990800D01* +X37528500Y-147370800D02* +X34988500Y-147370800D01* +X34708500Y-146100800D02* +X34708500Y-144550800D01* +X34708500Y-144550800D02* +X37808500Y-144550800D01* +X34747360Y-131549260D02* +X34747360Y-140249260D01* +X41152360Y-131549260D02* +X41152360Y-140249260D01* +X41152360Y-140249260D02* +X34747360Y-140249260D01* +X35977360Y-140249260D02* +X35977360Y-131549260D01* +X34747360Y-131549260D02* +X41152360Y-131549260D01* +X66131440Y-155580080D02* +X73751440Y-155580080D01* +X66131440Y-153040080D02* +X73751440Y-153040080D01* +X63311440Y-152760080D02* +X64861440Y-152760080D01* +X73751440Y-155580080D02* +X73751440Y-153040080D01* +X66131440Y-153040080D02* +X66131440Y-155580080D01* +X64861440Y-155860080D02* +X63311440Y-155860080D01* +X63311440Y-155860080D02* +X63311440Y-152760080D01* +X57718960Y-122168320D02* +X59268960Y-122168320D01* +X59268960Y-123718320D02* +X59268960Y-122168320D01* +X56448960Y-122448320D02* +X56448960Y-124988320D01* +X56448960Y-124988320D02* +X58988960Y-124988320D01* +X58988960Y-124988320D02* +X58988960Y-127528320D01* +X58988960Y-127528320D02* +X53908960Y-127528320D01* +X53908960Y-127528320D02* +X53908960Y-122448320D01* +X53908960Y-122448320D02* +X56448960Y-122448320D01* +X48072040Y-123819920D02* +X42992040Y-123819920D01* +X42992040Y-123819920D02* +X42992040Y-126359920D01* +X42992040Y-126359920D02* +X48072040Y-126359920D01* +X50892040Y-126639920D02* +X49342040Y-126639920D01* +X48072040Y-126359920D02* +X48072040Y-123819920D01* +X49342040Y-123539920D02* +X50892040Y-123539920D01* +X50892040Y-123539920D02* +X50892040Y-126639920D01* +X60058300Y-155282900D02* +X57518300Y-155282900D01* +X62878300Y-155562900D02* +X61328300Y-155562900D01* +X60058300Y-155282900D02* +X60058300Y-152742900D01* +X61328300Y-152462900D02* +X62878300Y-152462900D01* +X62878300Y-152462900D02* +X62878300Y-155562900D01* +X60058300Y-152742900D02* +X57518300Y-152742900D01* +X57518300Y-152742900D02* +X57518300Y-155282900D01* +X72471280Y-145775680D02* +X69931280Y-145775680D01* +X75291280Y-146055680D02* +X73741280Y-146055680D01* +X72471280Y-145775680D02* +X72471280Y-143235680D01* +X73741280Y-142955680D02* +X75291280Y-142955680D01* +X75291280Y-142955680D02* +X75291280Y-146055680D01* +X72471280Y-143235680D02* +X69931280Y-143235680D01* +X69931280Y-143235680D02* +X69931280Y-145775680D01* +X64444880Y-123840240D02* +X61904880Y-123840240D01* +X67264880Y-124120240D02* +X65714880Y-124120240D01* +X64444880Y-123840240D02* +X64444880Y-121300240D01* +X65714880Y-121020240D02* +X67264880Y-121020240D01* +X67264880Y-121020240D02* +X67264880Y-124120240D01* +X64444880Y-121300240D02* +X61904880Y-121300240D01* +X61904880Y-121300240D02* +X61904880Y-123840240D01* +X66777101Y-125309120D02* +G75* +G03X66777101Y-125309120I-141421J0D01* +G01* +X66235680Y-127809120D02* +X67835680Y-127809120D01* +X67835680Y-127809120D02* +X67835680Y-124809120D01* +X67835680Y-124809120D02* +X66235680Y-124809120D01* +X66235680Y-124809120D02* +X66235680Y-127809120D01* +X39733600Y-153614760D02* +X40733600Y-153614760D01* +X40733600Y-154964760D02* +X39733600Y-154964760D01* +X39718360Y-144806040D02* +X40718360Y-144806040D01* +X40718360Y-146156040D02* +X39718360Y-146156040D01* +X43159040Y-153088720D02* +X43159040Y-154088720D01* +X41809040Y-154088720D02* +X41809040Y-153088720D01* +X43075220Y-146022440D02* +X43075220Y-147022440D01* +X41725220Y-147022440D02* +X41725220Y-146022440D01* +X41577640Y-150427060D02* +X42577640Y-150427060D01* +X42577640Y-151777060D02* +X41577640Y-151777060D01* +X41521760Y-148334100D02* +X42521760Y-148334100D01* +X42521760Y-149684100D02* +X41521760Y-149684100D01* +X71842000Y-151459820D02* +X71842000Y-150459820D01* +X73192000Y-150459820D02* +X73192000Y-151459820D01* +X69406140Y-151309960D02* +X69406140Y-150309960D01* +X70756140Y-150309960D02* +X70756140Y-151309960D01* +X66812800Y-151383620D02* +X66812800Y-150383620D01* +X68162800Y-150383620D02* +X68162800Y-151383620D01* +X64148340Y-151269320D02* +X64148340Y-150269320D01* +X65498340Y-150269320D02* +X65498340Y-151269320D01* +X71803900Y-148602320D02* +X71803900Y-147602320D01* +X73153900Y-147602320D02* +X73153900Y-148602320D01* +X69329940Y-148338160D02* +X69329940Y-147338160D01* +X70679940Y-147338160D02* +X70679940Y-148338160D01* +X66774700Y-148297520D02* +X66774700Y-147297520D01* +X68124700Y-147297520D02* +X68124700Y-148297520D01* +X64110240Y-148259420D02* +X64110240Y-147259420D01* +X65460240Y-147259420D02* +X65460240Y-148259420D01* +X59923300Y-146686900D02* +X58923300Y-146686900D01* +X58923300Y-145336900D02* +X59923300Y-145336900D01* +X58948700Y-147902300D02* +X59948700Y-147902300D01* +X59948700Y-149252300D02* +X58948700Y-149252300D01* +X63358140Y-137147940D02* +X64358140Y-137147940D01* +X64358140Y-138497940D02* +X63358140Y-138497940D01* +X64396240Y-140491840D02* +X63396240Y-140491840D01* +X63396240Y-139141840D02* +X64396240Y-139141840D01* +X63358140Y-141313540D02* +X64358140Y-141313540D01* +X64358140Y-142663540D02* +X63358140Y-142663540D01* +X44783701Y-132391200D02* +G75* +G03X44783701Y-132391200I-141421J0D01* +G01* +X42142280Y-131991200D02* +X42142280Y-133591200D01* +X42142280Y-133591200D02* +X45142280Y-133591200D01* +X45142280Y-133591200D02* +X45142280Y-131991200D01* +X45142280Y-131991200D02* +X42142280Y-131991200D01* +X49042500Y-145130600D02* +X49042500Y-145245600D01* +X53192500Y-145130600D02* +X53192500Y-145245600D01* +X53192500Y-154030600D02* +X53192500Y-153915600D01* +X49042500Y-154030600D02* +X49042500Y-153915600D01* +X49042500Y-145130600D02* +X53192500Y-145130600D01* +X49042500Y-154030600D02* +X53192500Y-154030600D01* +X49042500Y-145245600D02* +X47667500Y-145245600D01* +D12* +X61894720Y-129489200D02* +X61894720Y-127457200D01* +X61894720Y-127457200D02* +X60624720Y-127457200D01* +X60624720Y-127457200D02* +X60624720Y-129489200D01* +X60624720Y-129489200D02* +X61894720Y-129489200D01* +D11* +X52436280Y-127827480D02* +X53136280Y-127827480D01* +X53136280Y-129027480D02* +X52436280Y-129027480D01* +X54045600Y-144800880D02* +X53345600Y-144800880D01* +X53345600Y-143600880D02* +X54045600Y-143600880D01* +X37776343Y-152099306D02* +X37823962Y-152146925D01* +X37871581Y-152289782D01* +X37871581Y-152385020D01* +X37823962Y-152527878D01* +X37728724Y-152623116D01* +X37633486Y-152670735D01* +X37443010Y-152718354D01* +X37300152Y-152718354D01* +X37109676Y-152670735D01* +X37014438Y-152623116D01* +X36919200Y-152527878D01* +X36871581Y-152385020D01* +X36871581Y-152289782D01* +X36919200Y-152146925D01* +X36966819Y-152099306D01* +X37871581Y-151146925D02* +X37871581Y-151718354D01* +X37871581Y-151432640D02* +X36871581Y-151432640D01* +X37014438Y-151527878D01* +X37109676Y-151623116D01* +X37157295Y-151718354D01* +X41535703Y-148004826D02* +X41583322Y-148052445D01* +X41630941Y-148195302D01* +X41630941Y-148290540D01* +X41583322Y-148433398D01* +X41488084Y-148528636D01* +X41392846Y-148576255D01* +X41202370Y-148623874D01* +X41059512Y-148623874D01* +X40869036Y-148576255D01* +X40773798Y-148528636D01* +X40678560Y-148433398D01* +X40630941Y-148290540D01* +X40630941Y-148195302D01* +X40678560Y-148052445D01* +X40726179Y-148004826D01* +X40726179Y-147623874D02* +X40678560Y-147576255D01* +X40630941Y-147481017D01* +X40630941Y-147242921D01* +X40678560Y-147147683D01* +X40726179Y-147100064D01* +X40821417Y-147052445D01* +X40916655Y-147052445D01* +X41059512Y-147100064D01* +X41630941Y-147671493D01* +X41630941Y-147052445D01* +X45940063Y-136442746D02* +X45987682Y-136490365D01* +X46035301Y-136633222D01* +X46035301Y-136728460D01* +X45987682Y-136871318D01* +X45892444Y-136966556D01* +X45797206Y-137014175D01* +X45606730Y-137061794D01* +X45463872Y-137061794D01* +X45273396Y-137014175D01* +X45178158Y-136966556D01* +X45082920Y-136871318D01* +X45035301Y-136728460D01* +X45035301Y-136633222D01* +X45082920Y-136490365D01* +X45130539Y-136442746D01* +X45035301Y-136109413D02* +X45035301Y-135490365D01* +X45416253Y-135823699D01* +X45416253Y-135680841D01* +X45463872Y-135585603D01* +X45511491Y-135537984D01* +X45606730Y-135490365D01* +X45844825Y-135490365D01* +X45940063Y-135537984D01* +X45987682Y-135585603D01* +X46035301Y-135680841D01* +X46035301Y-135966556D01* +X45987682Y-136061794D01* +X45940063Y-136109413D01* +X43447674Y-128274003D02* +X43400055Y-128321622D01* +X43257198Y-128369241D01* +X43161960Y-128369241D01* +X43019102Y-128321622D01* +X42923864Y-128226384D01* +X42876245Y-128131146D01* +X42828626Y-127940670D01* +X42828626Y-127797812D01* +X42876245Y-127607336D01* +X42923864Y-127512098D01* +X43019102Y-127416860D01* +X43161960Y-127369241D01* +X43257198Y-127369241D01* +X43400055Y-127416860D01* +X43447674Y-127464479D01* +X44304817Y-127702574D02* +X44304817Y-128369241D01* +X44066721Y-127321622D02* +X43828626Y-128035908D01* +X44447674Y-128035908D01* +X42683623Y-150222246D02* +X42731242Y-150269865D01* +X42778861Y-150412722D01* +X42778861Y-150507960D01* +X42731242Y-150650818D01* +X42636004Y-150746056D01* +X42540766Y-150793675D01* +X42350290Y-150841294D01* +X42207432Y-150841294D01* +X42016956Y-150793675D01* +X41921718Y-150746056D01* +X41826480Y-150650818D01* +X41778861Y-150507960D01* +X41778861Y-150412722D01* +X41826480Y-150269865D01* +X41874099Y-150222246D01* +X41778861Y-149317484D02* +X41778861Y-149793675D01* +X42255051Y-149841294D01* +X42207432Y-149793675D01* +X42159813Y-149698437D01* +X42159813Y-149460341D01* +X42207432Y-149365103D01* +X42255051Y-149317484D01* +X42350290Y-149269865D01* +X42588385Y-149269865D01* +X42683623Y-149317484D01* +X42731242Y-149365103D01* +X42778861Y-149460341D01* +X42778861Y-149698437D01* +X42731242Y-149793675D01* +X42683623Y-149841294D01* +X76292983Y-127034586D02* +X76340602Y-127082205D01* +X76388221Y-127225062D01* +X76388221Y-127320300D01* +X76340602Y-127463158D01* +X76245364Y-127558396D01* +X76150126Y-127606015D01* +X75959650Y-127653634D01* +X75816792Y-127653634D01* +X75626316Y-127606015D01* +X75531078Y-127558396D01* +X75435840Y-127463158D01* +X75388221Y-127320300D01* +X75388221Y-127225062D01* +X75435840Y-127082205D01* +X75483459Y-127034586D01* +X75388221Y-126177443D02* +X75388221Y-126367920D01* +X75435840Y-126463158D01* +X75483459Y-126510777D01* +X75626316Y-126606015D01* +X75816792Y-126653634D01* +X76197745Y-126653634D01* +X76292983Y-126606015D01* +X76340602Y-126558396D01* +X76388221Y-126463158D01* +X76388221Y-126272681D01* +X76340602Y-126177443D01* +X76292983Y-126129824D01* +X76197745Y-126082205D01* +X75959650Y-126082205D01* +X75864411Y-126129824D01* +X75816792Y-126177443D01* +X75769173Y-126272681D01* +X75769173Y-126463158D01* +X75816792Y-126558396D01* +X75864411Y-126606015D01* +X75959650Y-126653634D01* +X59378554Y-149422043D02* +X59330935Y-149469662D01* +X59188078Y-149517281D01* +X59092840Y-149517281D01* +X58949982Y-149469662D01* +X58854744Y-149374424D01* +X58807125Y-149279186D01* +X58759506Y-149088710D01* +X58759506Y-148945852D01* +X58807125Y-148755376D01* +X58854744Y-148660138D01* +X58949982Y-148564900D01* +X59092840Y-148517281D01* +X59188078Y-148517281D01* +X59330935Y-148564900D01* +X59378554Y-148612519D01* +X59711887Y-148517281D02* +X60378554Y-148517281D01* +X59949982Y-149517281D01* +X77329383Y-127141266D02* +X77377002Y-127188885D01* +X77424621Y-127331742D01* +X77424621Y-127426980D01* +X77377002Y-127569838D01* +X77281764Y-127665076D01* +X77186526Y-127712695D01* +X76996050Y-127760314D01* +X76853192Y-127760314D01* +X76662716Y-127712695D01* +X76567478Y-127665076D01* +X76472240Y-127569838D01* +X76424621Y-127426980D01* +X76424621Y-127331742D01* +X76472240Y-127188885D01* +X76519859Y-127141266D01* +X76853192Y-126569838D02* +X76805573Y-126665076D01* +X76757954Y-126712695D01* +X76662716Y-126760314D01* +X76615097Y-126760314D01* +X76519859Y-126712695D01* +X76472240Y-126665076D01* +X76424621Y-126569838D01* +X76424621Y-126379361D01* +X76472240Y-126284123D01* +X76519859Y-126236504D01* +X76615097Y-126188885D01* +X76662716Y-126188885D01* +X76757954Y-126236504D01* +X76805573Y-126284123D01* +X76853192Y-126379361D01* +X76853192Y-126569838D01* +X76900811Y-126665076D01* +X76948430Y-126712695D01* +X77043669Y-126760314D01* +X77234145Y-126760314D01* +X77329383Y-126712695D01* +X77377002Y-126665076D01* +X77424621Y-126569838D01* +X77424621Y-126379361D01* +X77377002Y-126284123D01* +X77329383Y-126236504D01* +X77234145Y-126188885D01* +X77043669Y-126188885D01* +X76948430Y-126236504D01* +X76900811Y-126284123D01* +X76853192Y-126379361D01* +X58853423Y-148878586D02* +X58901042Y-148926205D01* +X58948661Y-149069062D01* +X58948661Y-149164300D01* +X58901042Y-149307158D01* +X58805804Y-149402396D01* +X58710566Y-149450015D01* +X58520090Y-149497634D01* +X58377232Y-149497634D01* +X58186756Y-149450015D01* +X58091518Y-149402396D01* +X57996280Y-149307158D01* +X57948661Y-149164300D01* +X57948661Y-149069062D01* +X57996280Y-148926205D01* +X58043899Y-148878586D01* +X58948661Y-148402396D02* +X58948661Y-148211920D01* +X58901042Y-148116681D01* +X58853423Y-148069062D01* +X58710566Y-147973824D01* +X58520090Y-147926205D01* +X58139137Y-147926205D01* +X58043899Y-147973824D01* +X57996280Y-148021443D01* +X57948661Y-148116681D01* +X57948661Y-148307158D01* +X57996280Y-148402396D01* +X58043899Y-148450015D01* +X58139137Y-148497634D01* +X58377232Y-148497634D01* +X58472470Y-148450015D01* +X58520090Y-148402396D01* +X58567709Y-148307158D01* +X58567709Y-148116681D01* +X58520090Y-148021443D01* +X58472470Y-147973824D01* +X58377232Y-147926205D01* +X74667383Y-140548597D02* +X74715002Y-140596216D01* +X74762621Y-140739073D01* +X74762621Y-140834311D01* +X74715002Y-140977169D01* +X74619764Y-141072407D01* +X74524526Y-141120026D01* +X74334050Y-141167645D01* +X74191192Y-141167645D01* +X74000716Y-141120026D01* +X73905478Y-141072407D01* +X73810240Y-140977169D01* +X73762621Y-140834311D01* +X73762621Y-140739073D01* +X73810240Y-140596216D01* +X73857859Y-140548597D01* +X74762621Y-139596216D02* +X74762621Y-140167645D01* +X74762621Y-139881931D02* +X73762621Y-139881931D01* +X73905478Y-139977169D01* +X74000716Y-140072407D01* +X74048335Y-140167645D01* +X74762621Y-138643835D02* +X74762621Y-139215264D01* +X74762621Y-138929550D02* +X73762621Y-138929550D01* +X73905478Y-139024788D01* +X74000716Y-139120026D01* +X74048335Y-139215264D01* +X76199083Y-140535897D02* +X76246702Y-140583516D01* +X76294321Y-140726373D01* +X76294321Y-140821611D01* +X76246702Y-140964469D01* +X76151464Y-141059707D01* +X76056226Y-141107326D01* +X75865750Y-141154945D01* +X75722892Y-141154945D01* +X75532416Y-141107326D01* +X75437178Y-141059707D01* +X75341940Y-140964469D01* +X75294321Y-140821611D01* +X75294321Y-140726373D01* +X75341940Y-140583516D01* +X75389559Y-140535897D01* +X76294321Y-139583516D02* +X76294321Y-140154945D01* +X76294321Y-139869231D02* +X75294321Y-139869231D01* +X75437178Y-139964469D01* +X75532416Y-140059707D01* +X75580035Y-140154945D01* +X75389559Y-139202564D02* +X75341940Y-139154945D01* +X75294321Y-139059707D01* +X75294321Y-138821611D01* +X75341940Y-138726373D01* +X75389559Y-138678754D01* +X75484797Y-138631135D01* +X75580035Y-138631135D01* +X75722892Y-138678754D01* +X76294321Y-139250183D01* +X76294321Y-138631135D01* +X67854605Y-132712721D02* +X67854605Y-131712721D01* +X68092700Y-131712721D01* +X68235558Y-131760340D01* +X68330796Y-131855578D01* +X68378415Y-131950816D01* +X68426034Y-132141292D01* +X68426034Y-132284150D01* +X68378415Y-132474626D01* +X68330796Y-132569864D01* +X68235558Y-132665102D01* +X68092700Y-132712721D01* +X67854605Y-132712721D01* +X69378415Y-132712721D02* +X68806986Y-132712721D01* +X69092700Y-132712721D02* +X69092700Y-131712721D01* +X68997462Y-131855578D01* +X68902224Y-131950816D01* +X68806986Y-131998435D01* +X41893711Y-141039173D02* +X41893711Y-141372507D01* +X42417521Y-141372507D02* +X41417521Y-141372507D01* +X41417521Y-140896316D01* +X42417521Y-139991554D02* +X42417521Y-140562983D01* +X42417521Y-140277269D02* +X41417521Y-140277269D01* +X41560378Y-140372507D01* +X41655616Y-140467745D01* +X41703235Y-140562983D01* +X53151210Y-144728981D02* +X53151210Y-143728981D01* +X54198829Y-144633743D02* +X54151210Y-144681362D01* +X54008353Y-144728981D01* +X53913115Y-144728981D01* +X53770257Y-144681362D01* +X53675019Y-144586124D01* +X53627400Y-144490886D01* +X53579781Y-144300410D01* +X53579781Y-144157552D01* +X53627400Y-143967076D01* +X53675019Y-143871838D01* +X53770257Y-143776600D01* +X53913115Y-143728981D01* +X54008353Y-143728981D01* +X54151210Y-143776600D01* +X54198829Y-143824219D01* +X55151210Y-144728981D02* +X54579781Y-144728981D01* +X54865495Y-144728981D02* +X54865495Y-143728981D01* +X54770257Y-143871838D01* +X54675019Y-143967076D01* +X54579781Y-144014695D01* +X69177874Y-134892041D02* +X68701683Y-134892041D01* +X68701683Y-133892041D01* +X70035017Y-134892041D02* +X69463588Y-134892041D01* +X69749302Y-134892041D02* +X69749302Y-133892041D01* +X69654064Y-134034898D01* +X69558826Y-134130136D01* +X69463588Y-134177755D01* +X35520405Y-141453181D02* +X35520405Y-140453181D01* +X35901358Y-140453181D01* +X35996596Y-140500800D01* +X36044215Y-140548419D01* +X36091834Y-140643657D01* +X36091834Y-140786514D01* +X36044215Y-140881752D01* +X35996596Y-140929371D01* +X35901358Y-140976990D01* +X35520405Y-140976990D01* +X37044215Y-141453181D02* +X36472786Y-141453181D01* +X36758500Y-141453181D02* +X36758500Y-140453181D01* +X36663262Y-140596038D01* +X36568024Y-140691276D01* +X36472786Y-140738895D01* +X42467201Y-136638255D02* +X41467201Y-136638255D01* +X41467201Y-136257302D01* +X41514820Y-136162064D01* +X41562439Y-136114445D01* +X41657677Y-136066826D01* +X41800534Y-136066826D01* +X41895772Y-136114445D01* +X41943391Y-136162064D01* +X41991010Y-136257302D01* +X41991010Y-136638255D01* +X41562439Y-135685874D02* +X41514820Y-135638255D01* +X41467201Y-135543017D01* +X41467201Y-135304921D01* +X41514820Y-135209683D01* +X41562439Y-135162064D01* +X41657677Y-135114445D01* +X41752915Y-135114445D01* +X41895772Y-135162064D01* +X42467201Y-135733493D01* +X42467201Y-135114445D01* +X60213821Y-155048175D02* +X59213821Y-155048175D01* +X59213821Y-154667222D01* +X59261440Y-154571984D01* +X59309059Y-154524365D01* +X59404297Y-154476746D01* +X59547154Y-154476746D01* +X59642392Y-154524365D01* +X59690011Y-154571984D01* +X59737630Y-154667222D01* +X59737630Y-155048175D01* +X59213821Y-154143413D02* +X59213821Y-153524365D01* +X59594773Y-153857699D01* +X59594773Y-153714841D01* +X59642392Y-153619603D01* +X59690011Y-153571984D01* +X59785250Y-153524365D01* +X60023345Y-153524365D01* +X60118583Y-153571984D01* +X60166202Y-153619603D01* +X60213821Y-153714841D01* +X60213821Y-154000556D01* +X60166202Y-154095794D01* +X60118583Y-154143413D01* +X63271341Y-124456415D02* +X62271341Y-124456415D01* +X62271341Y-124075462D01* +X62318960Y-123980224D01* +X62366579Y-123932605D01* +X62461817Y-123884986D01* +X62604674Y-123884986D01* +X62699912Y-123932605D01* +X62747531Y-123980224D01* +X62795150Y-124075462D01* +X62795150Y-124456415D01* +X62604674Y-123027843D02* +X63271341Y-123027843D01* +X62223722Y-123265939D02* +X62938008Y-123504034D01* +X62938008Y-122884986D01* +X54894421Y-125828015D02* +X53894421Y-125828015D01* +X53894421Y-125447062D01* +X53942040Y-125351824D01* +X53989659Y-125304205D01* +X54084897Y-125256586D01* +X54227754Y-125256586D01* +X54322992Y-125304205D01* +X54370611Y-125351824D01* +X54418230Y-125447062D01* +X54418230Y-125828015D01* +X53894421Y-124351824D02* +X53894421Y-124828015D01* +X54370611Y-124875634D01* +X54322992Y-124828015D01* +X54275373Y-124732777D01* +X54275373Y-124494681D01* +X54322992Y-124399443D01* +X54370611Y-124351824D01* +X54465850Y-124304205D01* +X54703945Y-124304205D01* +X54799183Y-124351824D01* +X54846802Y-124399443D01* +X54894421Y-124494681D01* +X54894421Y-124732777D01* +X54846802Y-124828015D01* +X54799183Y-124875634D01* +X66880681Y-154750995D02* +X65880681Y-154750995D01* +X65880681Y-154370042D01* +X65928300Y-154274804D01* +X65975919Y-154227185D01* +X66071157Y-154179566D01* +X66214014Y-154179566D01* +X66309252Y-154227185D01* +X66356871Y-154274804D01* +X66404490Y-154370042D01* +X66404490Y-154750995D01* +X65880681Y-153322423D02* +X65880681Y-153512900D01* +X65928300Y-153608138D01* +X65975919Y-153655757D01* +X66118776Y-153750995D01* +X66309252Y-153798614D01* +X66690205Y-153798614D01* +X66785443Y-153750995D01* +X66833062Y-153703376D01* +X66880681Y-153608138D01* +X66880681Y-153417661D01* +X66833062Y-153322423D01* +X66785443Y-153274804D01* +X66690205Y-153227185D01* +X66452110Y-153227185D01* +X66356871Y-153274804D01* +X66309252Y-153322423D01* +X66261633Y-153417661D01* +X66261633Y-153608138D01* +X66309252Y-153703376D01* +X66356871Y-153750995D01* +X66452110Y-153798614D01* +X79293661Y-145243775D02* +X78293661Y-145243775D01* +X78293661Y-144862822D01* +X78341280Y-144767584D01* +X78388899Y-144719965D01* +X78484137Y-144672346D01* +X78626994Y-144672346D01* +X78722232Y-144719965D01* +X78769851Y-144767584D01* +X78817470Y-144862822D01* +X78817470Y-145243775D01* +X78293661Y-144339013D02* +X78293661Y-143672346D01* +X79293661Y-144100918D01* +X71267261Y-123308335D02* +X70267261Y-123308335D01* +X70267261Y-122927382D01* +X70314880Y-122832144D01* +X70362499Y-122784525D01* +X70457737Y-122736906D01* +X70600594Y-122736906D01* +X70695832Y-122784525D01* +X70743451Y-122832144D01* +X70791070Y-122927382D01* +X70791070Y-123308335D01* +X70695832Y-122165478D02* +X70648213Y-122260716D01* +X70600594Y-122308335D01* +X70505356Y-122355954D01* +X70457737Y-122355954D01* +X70362499Y-122308335D01* +X70314880Y-122260716D01* +X70267261Y-122165478D01* +X70267261Y-121975001D01* +X70314880Y-121879763D01* +X70362499Y-121832144D01* +X70457737Y-121784525D01* +X70505356Y-121784525D01* +X70600594Y-121832144D01* +X70648213Y-121879763D01* +X70695832Y-121975001D01* +X70695832Y-122165478D01* +X70743451Y-122260716D01* +X70791070Y-122308335D01* +X70886309Y-122355954D01* +X71076785Y-122355954D01* +X71172023Y-122308335D01* +X71219642Y-122260716D01* +X71267261Y-122165478D01* +X71267261Y-121975001D01* +X71219642Y-121879763D01* +X71172023Y-121832144D01* +X71076785Y-121784525D01* +X70886309Y-121784525D01* +X70791070Y-121832144D01* +X70743451Y-121879763D01* +X70695832Y-121975001D01* +X66940442Y-124356739D02* +X66845204Y-124309120D01* +X66749966Y-124213882D01* +X66607109Y-124071025D01* +X66511870Y-124023406D01* +X66416632Y-124023406D01* +X66464251Y-124261501D02* +X66369013Y-124213882D01* +X66273775Y-124118644D01* +X66226156Y-123928168D01* +X66226156Y-123594834D01* +X66273775Y-123404358D01* +X66369013Y-123309120D01* +X66464251Y-123261501D01* +X66654728Y-123261501D01* +X66749966Y-123309120D01* +X66845204Y-123404358D01* +X66892823Y-123594834D01* +X66892823Y-123928168D01* +X66845204Y-124118644D01* +X66749966Y-124213882D01* +X66654728Y-124261501D01* +X66464251Y-124261501D01* +X67845204Y-124261501D02* +X67273775Y-124261501D01* +X67559489Y-124261501D02* +X67559489Y-123261501D01* +X67464251Y-123404358D01* +X67369013Y-123499596D01* +X67273775Y-123547215D01* +X40066934Y-156642141D02* +X39733600Y-156165950D01* +X39495505Y-156642141D02* +X39495505Y-155642141D01* +X39876458Y-155642141D01* +X39971696Y-155689760D01* +X40019315Y-155737379D01* +X40066934Y-155832617D01* +X40066934Y-155975474D01* +X40019315Y-156070712D01* +X39971696Y-156118331D01* +X39876458Y-156165950D01* +X39495505Y-156165950D01* +X41019315Y-156642141D02* +X40447886Y-156642141D01* +X40733600Y-156642141D02* +X40733600Y-155642141D01* +X40638362Y-155784998D01* +X40543124Y-155880236D01* +X40447886Y-155927855D01* +X40051694Y-147833421D02* +X39718360Y-147357230D01* +X39480265Y-147833421D02* +X39480265Y-146833421D01* +X39861218Y-146833421D01* +X39956456Y-146881040D01* +X40004075Y-146928659D01* +X40051694Y-147023897D01* +X40051694Y-147166754D01* +X40004075Y-147261992D01* +X39956456Y-147309611D01* +X39861218Y-147357230D01* +X39480265Y-147357230D01* +X40432646Y-146928659D02* +X40480265Y-146881040D01* +X40575503Y-146833421D01* +X40813599Y-146833421D01* +X40908837Y-146881040D01* +X40956456Y-146928659D01* +X41004075Y-147023897D01* +X41004075Y-147119135D01* +X40956456Y-147261992D01* +X40385027Y-147833421D01* +X41004075Y-147833421D01* +X41036421Y-153755386D02* +X40560230Y-154088720D01* +X41036421Y-154326815D02* +X40036421Y-154326815D01* +X40036421Y-153945862D01* +X40084040Y-153850624D01* +X40131659Y-153803005D01* +X40226897Y-153755386D01* +X40369754Y-153755386D01* +X40464992Y-153803005D01* +X40512611Y-153850624D01* +X40560230Y-153945862D01* +X40560230Y-154326815D01* +X40036421Y-153422053D02* +X40036421Y-152803005D01* +X40417373Y-153136339D01* +X40417373Y-152993481D01* +X40464992Y-152898243D01* +X40512611Y-152850624D01* +X40607850Y-152803005D01* +X40845945Y-152803005D01* +X40941183Y-152850624D01* +X40988802Y-152898243D01* +X41036421Y-152993481D01* +X41036421Y-153279196D01* +X40988802Y-153374434D01* +X40941183Y-153422053D01* +X40952601Y-146689106D02* +X40476410Y-147022440D01* +X40952601Y-147260535D02* +X39952601Y-147260535D01* +X39952601Y-146879582D01* +X40000220Y-146784344D01* +X40047839Y-146736725D01* +X40143077Y-146689106D01* +X40285934Y-146689106D01* +X40381172Y-146736725D01* +X40428791Y-146784344D01* +X40476410Y-146879582D01* +X40476410Y-147260535D01* +X40285934Y-145831963D02* +X40952601Y-145831963D01* +X39904982Y-146070059D02* +X40619268Y-146308154D01* +X40619268Y-145689106D01* +X41910974Y-153454441D02* +X41577640Y-152978250D01* +X41339545Y-153454441D02* +X41339545Y-152454441D01* +X41720498Y-152454441D01* +X41815736Y-152502060D01* +X41863355Y-152549679D01* +X41910974Y-152644917D01* +X41910974Y-152787774D01* +X41863355Y-152883012D01* +X41815736Y-152930631D01* +X41720498Y-152978250D01* +X41339545Y-152978250D01* +X42815736Y-152454441D02* +X42339545Y-152454441D01* +X42291926Y-152930631D01* +X42339545Y-152883012D01* +X42434783Y-152835393D01* +X42672879Y-152835393D01* +X42768117Y-152883012D01* +X42815736Y-152930631D01* +X42863355Y-153025870D01* +X42863355Y-153263965D01* +X42815736Y-153359203D01* +X42768117Y-153406822D01* +X42672879Y-153454441D01* +X42434783Y-153454441D01* +X42339545Y-153406822D01* +X42291926Y-153359203D01* +X41855094Y-151361481D02* +X41521760Y-150885290D01* +X41283665Y-151361481D02* +X41283665Y-150361481D01* +X41664618Y-150361481D01* +X41759856Y-150409100D01* +X41807475Y-150456719D01* +X41855094Y-150551957D01* +X41855094Y-150694814D01* +X41807475Y-150790052D01* +X41759856Y-150837671D01* +X41664618Y-150885290D01* +X41283665Y-150885290D01* +X42712237Y-150361481D02* +X42521760Y-150361481D01* +X42426522Y-150409100D01* +X42378903Y-150456719D01* +X42283665Y-150599576D01* +X42236046Y-150790052D01* +X42236046Y-151171005D01* +X42283665Y-151266243D01* +X42331284Y-151313862D01* +X42426522Y-151361481D01* +X42616999Y-151361481D01* +X42712237Y-151313862D01* +X42759856Y-151266243D01* +X42807475Y-151171005D01* +X42807475Y-150932910D01* +X42759856Y-150837671D01* +X42712237Y-150790052D01* +X42616999Y-150742433D01* +X42426522Y-150742433D01* +X42331284Y-150790052D01* +X42283665Y-150837671D01* +X42236046Y-150932910D01* +X74869381Y-151126486D02* +X74393190Y-151459820D01* +X74869381Y-151697915D02* +X73869381Y-151697915D01* +X73869381Y-151316962D01* +X73917000Y-151221724D01* +X73964619Y-151174105D01* +X74059857Y-151126486D01* +X74202714Y-151126486D01* +X74297952Y-151174105D01* +X74345571Y-151221724D01* +X74393190Y-151316962D01* +X74393190Y-151697915D01* +X73869381Y-150793153D02* +X73869381Y-150126486D01* +X74869381Y-150555058D01* +X72433521Y-150976626D02* +X71957330Y-151309960D01* +X72433521Y-151548055D02* +X71433521Y-151548055D01* +X71433521Y-151167102D01* +X71481140Y-151071864D01* +X71528759Y-151024245D01* +X71623997Y-150976626D01* +X71766854Y-150976626D01* +X71862092Y-151024245D01* +X71909711Y-151071864D01* +X71957330Y-151167102D01* +X71957330Y-151548055D01* +X71862092Y-150405198D02* +X71814473Y-150500436D01* +X71766854Y-150548055D01* +X71671616Y-150595674D01* +X71623997Y-150595674D01* +X71528759Y-150548055D01* +X71481140Y-150500436D01* +X71433521Y-150405198D01* +X71433521Y-150214721D01* +X71481140Y-150119483D01* +X71528759Y-150071864D01* +X71623997Y-150024245D01* +X71671616Y-150024245D01* +X71766854Y-150071864D01* +X71814473Y-150119483D01* +X71862092Y-150214721D01* +X71862092Y-150405198D01* +X71909711Y-150500436D01* +X71957330Y-150548055D01* +X72052569Y-150595674D01* +X72243045Y-150595674D01* +X72338283Y-150548055D01* +X72385902Y-150500436D01* +X72433521Y-150405198D01* +X72433521Y-150214721D01* +X72385902Y-150119483D01* +X72338283Y-150071864D01* +X72243045Y-150024245D01* +X72052569Y-150024245D01* +X71957330Y-150071864D01* +X71909711Y-150119483D01* +X71862092Y-150214721D01* +X69840181Y-151050286D02* +X69363990Y-151383620D01* +X69840181Y-151621715D02* +X68840181Y-151621715D01* +X68840181Y-151240762D01* +X68887800Y-151145524D01* +X68935419Y-151097905D01* +X69030657Y-151050286D01* +X69173514Y-151050286D01* +X69268752Y-151097905D01* +X69316371Y-151145524D01* +X69363990Y-151240762D01* +X69363990Y-151621715D01* +X69840181Y-150574096D02* +X69840181Y-150383620D01* +X69792562Y-150288381D01* +X69744943Y-150240762D01* +X69602086Y-150145524D01* +X69411610Y-150097905D01* +X69030657Y-150097905D01* +X68935419Y-150145524D01* +X68887800Y-150193143D01* +X68840181Y-150288381D01* +X68840181Y-150478858D01* +X68887800Y-150574096D01* +X68935419Y-150621715D01* +X69030657Y-150669334D01* +X69268752Y-150669334D01* +X69363990Y-150621715D01* +X69411610Y-150574096D01* +X69459229Y-150478858D01* +X69459229Y-150288381D01* +X69411610Y-150193143D01* +X69363990Y-150145524D01* +X69268752Y-150097905D01* +X67175721Y-151412177D02* +X66699530Y-151745511D01* +X67175721Y-151983606D02* +X66175721Y-151983606D01* +X66175721Y-151602653D01* +X66223340Y-151507415D01* +X66270959Y-151459796D01* +X66366197Y-151412177D01* +X66509054Y-151412177D01* +X66604292Y-151459796D01* +X66651911Y-151507415D01* +X66699530Y-151602653D01* +X66699530Y-151983606D01* +X67175721Y-150459796D02* +X67175721Y-151031225D01* +X67175721Y-150745511D02* +X66175721Y-150745511D01* +X66318578Y-150840749D01* +X66413816Y-150935987D01* +X66461435Y-151031225D01* +X66175721Y-149840749D02* +X66175721Y-149745510D01* +X66223340Y-149650272D01* +X66270959Y-149602653D01* +X66366197Y-149555034D01* +X66556673Y-149507415D01* +X66794769Y-149507415D01* +X66985245Y-149555034D01* +X67080483Y-149602653D01* +X67128102Y-149650272D01* +X67175721Y-149745510D01* +X67175721Y-149840749D01* +X67128102Y-149935987D01* +X67080483Y-149983606D01* +X66985245Y-150031225D01* +X66794769Y-150078844D01* +X66556673Y-150078844D01* +X66366197Y-150031225D01* +X66270959Y-149983606D01* +X66223340Y-149935987D01* +X66175721Y-149840749D01* +X74831281Y-148745177D02* +X74355090Y-149078511D01* +X74831281Y-149316606D02* +X73831281Y-149316606D01* +X73831281Y-148935653D01* +X73878900Y-148840415D01* +X73926519Y-148792796D01* +X74021757Y-148745177D01* +X74164614Y-148745177D01* +X74259852Y-148792796D01* +X74307471Y-148840415D01* +X74355090Y-148935653D01* +X74355090Y-149316606D01* +X74831281Y-147792796D02* +X74831281Y-148364225D01* +X74831281Y-148078511D02* +X73831281Y-148078511D01* +X73974138Y-148173749D01* +X74069376Y-148268987D01* +X74116995Y-148364225D01* +X74831281Y-146840415D02* +X74831281Y-147411844D01* +X74831281Y-147126130D02* +X73831281Y-147126130D01* +X73974138Y-147221368D01* +X74069376Y-147316606D01* +X74116995Y-147411844D01* +X72357321Y-148481017D02* +X71881130Y-148814351D01* +X72357321Y-149052446D02* +X71357321Y-149052446D01* +X71357321Y-148671493D01* +X71404940Y-148576255D01* +X71452559Y-148528636D01* +X71547797Y-148481017D01* +X71690654Y-148481017D01* +X71785892Y-148528636D01* +X71833511Y-148576255D01* +X71881130Y-148671493D01* +X71881130Y-149052446D01* +X72357321Y-147528636D02* +X72357321Y-148100065D01* +X72357321Y-147814351D02* +X71357321Y-147814351D01* +X71500178Y-147909589D01* +X71595416Y-148004827D01* +X71643035Y-148100065D01* +X71452559Y-147147684D02* +X71404940Y-147100065D01* +X71357321Y-147004827D01* +X71357321Y-146766731D01* +X71404940Y-146671493D01* +X71452559Y-146623874D01* +X71547797Y-146576255D01* +X71643035Y-146576255D01* +X71785892Y-146623874D01* +X72357321Y-147195303D01* +X72357321Y-146576255D01* +X69802081Y-148440377D02* +X69325890Y-148773711D01* +X69802081Y-149011806D02* +X68802081Y-149011806D01* +X68802081Y-148630853D01* +X68849700Y-148535615D01* +X68897319Y-148487996D01* +X68992557Y-148440377D01* +X69135414Y-148440377D01* +X69230652Y-148487996D01* +X69278271Y-148535615D01* +X69325890Y-148630853D01* +X69325890Y-149011806D01* +X69802081Y-147487996D02* +X69802081Y-148059425D01* +X69802081Y-147773711D02* +X68802081Y-147773711D01* +X68944938Y-147868949D01* +X69040176Y-147964187D01* +X69087795Y-148059425D01* +X68802081Y-147154663D02* +X68802081Y-146535615D01* +X69183033Y-146868949D01* +X69183033Y-146726091D01* +X69230652Y-146630853D01* +X69278271Y-146583234D01* +X69373510Y-146535615D01* +X69611605Y-146535615D01* +X69706843Y-146583234D01* +X69754462Y-146630853D01* +X69802081Y-146726091D01* +X69802081Y-147011806D01* +X69754462Y-147107044D01* +X69706843Y-147154663D01* +X67137621Y-148402277D02* +X66661430Y-148735611D01* +X67137621Y-148973706D02* +X66137621Y-148973706D01* +X66137621Y-148592753D01* +X66185240Y-148497515D01* +X66232859Y-148449896D01* +X66328097Y-148402277D01* +X66470954Y-148402277D01* +X66566192Y-148449896D01* +X66613811Y-148497515D01* +X66661430Y-148592753D01* +X66661430Y-148973706D01* +X67137621Y-147449896D02* +X67137621Y-148021325D01* +X67137621Y-147735611D02* +X66137621Y-147735611D01* +X66280478Y-147830849D01* +X66375716Y-147926087D01* +X66423335Y-148021325D01* +X66470954Y-146592753D02* +X67137621Y-146592753D01* +X66090002Y-146830849D02* +X66804288Y-147068944D01* +X66804288Y-146449896D01* +X58780443Y-144564281D02* +X58447109Y-144088090D01* +X58209014Y-144564281D02* +X58209014Y-143564281D01* +X58589967Y-143564281D01* +X58685205Y-143611900D01* +X58732824Y-143659519D01* +X58780443Y-143754757D01* +X58780443Y-143897614D01* +X58732824Y-143992852D01* +X58685205Y-144040471D01* +X58589967Y-144088090D01* +X58209014Y-144088090D01* +X59732824Y-144564281D02* +X59161395Y-144564281D01* +X59447109Y-144564281D02* +X59447109Y-143564281D01* +X59351871Y-143707138D01* +X59256633Y-143802376D01* +X59161395Y-143849995D01* +X60637586Y-143564281D02* +X60161395Y-143564281D01* +X60113776Y-144040471D01* +X60161395Y-143992852D01* +X60256633Y-143945233D01* +X60494729Y-143945233D01* +X60589967Y-143992852D01* +X60637586Y-144040471D01* +X60685205Y-144135710D01* +X60685205Y-144373805D01* +X60637586Y-144469043D01* +X60589967Y-144516662D01* +X60494729Y-144564281D01* +X60256633Y-144564281D01* +X60161395Y-144516662D01* +X60113776Y-144469043D01* +X58805843Y-150929681D02* +X58472509Y-150453490D01* +X58234414Y-150929681D02* +X58234414Y-149929681D01* +X58615367Y-149929681D01* +X58710605Y-149977300D01* +X58758224Y-150024919D01* +X58805843Y-150120157D01* +X58805843Y-150263014D01* +X58758224Y-150358252D01* +X58710605Y-150405871D01* +X58615367Y-150453490D01* +X58234414Y-150453490D01* +X59758224Y-150929681D02* +X59186795Y-150929681D01* +X59472509Y-150929681D02* +X59472509Y-149929681D01* +X59377271Y-150072538D01* +X59282033Y-150167776D01* +X59186795Y-150215395D01* +X60615367Y-149929681D02* +X60424890Y-149929681D01* +X60329652Y-149977300D01* +X60282033Y-150024919D01* +X60186795Y-150167776D01* +X60139176Y-150358252D01* +X60139176Y-150739205D01* +X60186795Y-150834443D01* +X60234414Y-150882062D01* +X60329652Y-150929681D01* +X60520129Y-150929681D01* +X60615367Y-150882062D01* +X60662986Y-150834443D01* +X60710605Y-150739205D01* +X60710605Y-150501110D01* +X60662986Y-150405871D01* +X60615367Y-150358252D01* +X60520129Y-150310633D01* +X60329652Y-150310633D01* +X60234414Y-150358252D01* +X60186795Y-150405871D01* +X60139176Y-150501110D01* +X63215283Y-140175321D02* +X62881949Y-139699130D01* +X62643854Y-140175321D02* +X62643854Y-139175321D01* +X63024807Y-139175321D01* +X63120045Y-139222940D01* +X63167664Y-139270559D01* +X63215283Y-139365797D01* +X63215283Y-139508654D01* +X63167664Y-139603892D01* +X63120045Y-139651511D01* +X63024807Y-139699130D01* +X62643854Y-139699130D01* +X64167664Y-140175321D02* +X63596235Y-140175321D01* +X63881949Y-140175321D02* +X63881949Y-139175321D01* +X63786711Y-139318178D01* +X63691473Y-139413416D01* +X63596235Y-139461035D01* +X64500997Y-139175321D02* +X65167664Y-139175321D01* +X64739092Y-140175321D01* +X63253383Y-138369221D02* +X62920049Y-137893030D01* +X62681954Y-138369221D02* +X62681954Y-137369221D01* +X63062907Y-137369221D01* +X63158145Y-137416840D01* +X63205764Y-137464459D01* +X63253383Y-137559697D01* +X63253383Y-137702554D01* +X63205764Y-137797792D01* +X63158145Y-137845411D01* +X63062907Y-137893030D01* +X62681954Y-137893030D01* +X64205764Y-138369221D02* +X63634335Y-138369221D01* +X63920049Y-138369221D02* +X63920049Y-137369221D01* +X63824811Y-137512078D01* +X63729573Y-137607316D01* +X63634335Y-137654935D01* +X64777192Y-137797792D02* +X64681954Y-137750173D01* +X64634335Y-137702554D01* +X64586716Y-137607316D01* +X64586716Y-137559697D01* +X64634335Y-137464459D01* +X64681954Y-137416840D01* +X64777192Y-137369221D01* +X64967669Y-137369221D01* +X65062907Y-137416840D01* +X65110526Y-137464459D01* +X65158145Y-137559697D01* +X65158145Y-137607316D01* +X65110526Y-137702554D01* +X65062907Y-137750173D01* +X64967669Y-137797792D01* +X64777192Y-137797792D01* +X64681954Y-137845411D01* +X64634335Y-137893030D01* +X64586716Y-137988269D01* +X64586716Y-138178745D01* +X64634335Y-138273983D01* +X64681954Y-138321602D01* +X64777192Y-138369221D01* +X64967669Y-138369221D01* +X65062907Y-138321602D01* +X65110526Y-138273983D01* +X65158145Y-138178745D01* +X65158145Y-137988269D01* +X65110526Y-137893030D01* +X65062907Y-137845411D01* +X64967669Y-137797792D01* +X63215283Y-144340921D02* +X62881949Y-143864730D01* +X62643854Y-144340921D02* +X62643854Y-143340921D01* +X63024807Y-143340921D01* +X63120045Y-143388540D01* +X63167664Y-143436159D01* +X63215283Y-143531397D01* +X63215283Y-143674254D01* +X63167664Y-143769492D01* +X63120045Y-143817111D01* +X63024807Y-143864730D01* +X62643854Y-143864730D01* +X64167664Y-144340921D02* +X63596235Y-144340921D01* +X63881949Y-144340921D02* +X63881949Y-143340921D01* +X63786711Y-143483778D01* +X63691473Y-143579016D01* +X63596235Y-143626635D01* +X64643854Y-144340921D02* +X64834330Y-144340921D01* +X64929569Y-144293302D01* +X64977188Y-144245683D01* +X65072426Y-144102826D01* +X65120045Y-143912350D01* +X65120045Y-143531397D01* +X65072426Y-143436159D01* +X65024807Y-143388540D01* +X64929569Y-143340921D01* +X64739092Y-143340921D01* +X64643854Y-143388540D01* +X64596235Y-143436159D01* +X64548616Y-143531397D01* +X64548616Y-143769492D01* +X64596235Y-143864730D01* +X64643854Y-143912350D01* +X64739092Y-143959969D01* +X64929569Y-143959969D01* +X65024807Y-143912350D01* +X65072426Y-143864730D01* +X65120045Y-143769492D01* +X45594661Y-133553105D02* +X46404185Y-133553105D01* +X46499423Y-133505486D01* +X46547042Y-133457867D01* +X46594661Y-133362629D01* +X46594661Y-133172152D01* +X46547042Y-133076914D01* +X46499423Y-133029295D01* +X46404185Y-132981676D01* +X45594661Y-132981676D01* +X46594661Y-131981676D02* +X46594661Y-132553105D01* +X46594661Y-132267391D02* +X45594661Y-132267391D01* +X45737518Y-132362629D01* +X45832756Y-132457867D01* +X45880375Y-132553105D01* +X50355595Y-143657981D02* +X50355595Y-144467505D01* +X50403214Y-144562743D01* +X50450833Y-144610362D01* +X50546071Y-144657981D01* +X50736548Y-144657981D01* +X50831786Y-144610362D01* +X50879405Y-144562743D01* +X50927024Y-144467505D01* +X50927024Y-143657981D01* +X51355595Y-143753219D02* +X51403214Y-143705600D01* +X51498452Y-143657981D01* +X51736548Y-143657981D01* +X51831786Y-143705600D01* +X51879405Y-143753219D01* +X51927024Y-143848457D01* +X51927024Y-143943695D01* +X51879405Y-144086552D01* +X51307976Y-144657981D01* +X51927024Y-144657981D01* +D13* +X58235910Y-127316774D02* +X58235910Y-126554774D01* +X58387101Y-126554774D01* +X58477815Y-126591060D01* +X58538291Y-126663631D01* +X58568530Y-126736203D01* +X58598768Y-126881346D01* +X58598768Y-126990203D01* +X58568530Y-127135346D01* +X58538291Y-127207917D01* +X58477815Y-127280489D01* +X58387101Y-127316774D01* +X58235910Y-127316774D01* +X58870910Y-127316774D02* +X58870910Y-126554774D01* +X59082577Y-127099060D01* +X59294244Y-126554774D01* +X59294244Y-127316774D01* +X59596624Y-127316774D02* +X59596624Y-126554774D01* +X59959482Y-127316774D01* +X59959482Y-126554774D01* +X60534005Y-126554774D02* +X60413053Y-126554774D01* +X60352577Y-126591060D01* +X60322339Y-126627346D01* +X60261862Y-126736203D01* +X60231624Y-126881346D01* +X60231624Y-127171631D01* +X60261862Y-127244203D01* +X60292101Y-127280489D01* +X60352577Y-127316774D01* +X60473529Y-127316774D01* +X60534005Y-127280489D01* +X60564243Y-127244203D01* +X60594482Y-127171631D01* +X60594482Y-126990203D01* +X60564243Y-126917631D01* +X60534005Y-126881346D01* +X60473529Y-126845060D01* +X60352577Y-126845060D01* +X60292101Y-126881346D01* +X60261862Y-126917631D01* +X60231624Y-126990203D01* +X60806148Y-126554774D02* +X61199244Y-126554774D01* +X60987577Y-126845060D01* +X61078291Y-126845060D01* +X61138767Y-126881346D01* +X61169005Y-126917631D01* +X61199244Y-126990203D01* +X61199244Y-127171631D01* +X61169005Y-127244203D01* +X61138767Y-127280489D01* +X61078291Y-127316774D01* +X60896863Y-127316774D01* +X60836386Y-127280489D01* +X60806148Y-127244203D01* +X61471386Y-127316774D02* +X61471386Y-126554774D01* +X61622577Y-126554774D01* +X61713291Y-126591060D01* +X61773767Y-126663631D01* +X61804006Y-126736203D01* +X61834244Y-126881346D01* +X61834244Y-126990203D01* +X61804006Y-127135346D01* +X61773767Y-127207917D01* +X61713291Y-127280489D01* +X61622577Y-127316774D01* +X61471386Y-127316774D01* +X62197101Y-126881346D02* +X62136625Y-126845060D01* +X62106386Y-126808774D01* +X62076148Y-126736203D01* +X62076148Y-126699917D01* +X62106386Y-126627346D01* +X62136625Y-126591060D01* +X62197101Y-126554774D01* +X62318053Y-126554774D01* +X62378529Y-126591060D01* +X62408767Y-126627346D01* +X62439006Y-126699917D01* +X62439006Y-126736203D01* +X62408767Y-126808774D01* +X62378529Y-126845060D01* +X62318053Y-126881346D01* +X62197101Y-126881346D01* +X62136625Y-126917631D01* +X62106386Y-126953917D01* +X62076148Y-127026489D01* +X62076148Y-127171631D01* +X62106386Y-127244203D01* +X62136625Y-127280489D01* +X62197101Y-127316774D01* +X62318053Y-127316774D01* +X62378529Y-127280489D01* +X62408767Y-127244203D01* +X62439006Y-127171631D01* +X62439006Y-127026489D01* +X62408767Y-126953917D01* +X62378529Y-126917631D01* +X62318053Y-126881346D01* +X63013529Y-127316774D02* +X62711148Y-127316774D01* +X62711148Y-126554774D01* +X63225196Y-127316774D02* +X63225196Y-126554774D01* +X63376387Y-126554774D01* +X63467101Y-126591060D01* +X63527577Y-126663631D01* +X63557816Y-126736203D01* +X63588054Y-126881346D01* +X63588054Y-126990203D01* +X63557816Y-127135346D01* +X63527577Y-127207917D01* +X63467101Y-127280489D01* +X63376387Y-127316774D01* +X63225196Y-127316774D01* +X63799720Y-126554774D02* +X63950911Y-127316774D01* +X64071863Y-126772489D01* +X64192816Y-127316774D01* +X64344006Y-126554774D01* +D11* +X52143423Y-126884623D02* +X52095804Y-126932242D01* +X51952947Y-126979861D01* +X51857709Y-126979861D01* +X51714851Y-126932242D01* +X51619613Y-126837004D01* +X51571994Y-126741766D01* +X51524375Y-126551290D01* +X51524375Y-126408432D01* +X51571994Y-126217956D01* +X51619613Y-126122718D01* +X51714851Y-126027480D01* +X51857709Y-125979861D01* +X51952947Y-125979861D01* +X52095804Y-126027480D01* +X52143423Y-126075099D01* +X53095804Y-126979861D02* +X52524375Y-126979861D01* +X52810089Y-126979861D02* +X52810089Y-125979861D01* +X52714851Y-126122718D01* +X52619613Y-126217956D01* +X52524375Y-126265575D01* +X53429137Y-125979861D02* +X54048185Y-125979861D01* +X53714851Y-126360813D01* +X53857709Y-126360813D01* +X53952947Y-126408432D01* +X54000566Y-126456051D01* +X54048185Y-126551290D01* +X54048185Y-126789385D01* +X54000566Y-126884623D01* +X53952947Y-126932242D01* +X53857709Y-126979861D01* +X53571994Y-126979861D01* +X53476756Y-126932242D01* +X53429137Y-126884623D01* +X53052743Y-146458023D02* +X53005124Y-146505642D01* +X52862267Y-146553261D01* +X52767029Y-146553261D01* +X52624171Y-146505642D01* +X52528933Y-146410404D01* +X52481314Y-146315166D01* +X52433695Y-146124690D01* +X52433695Y-145981832D01* +X52481314Y-145791356D01* +X52528933Y-145696118D01* +X52624171Y-145600880D01* +X52767029Y-145553261D01* +X52862267Y-145553261D01* +X53005124Y-145600880D01* +X53052743Y-145648499D01* +X54005124Y-146553261D02* +X53433695Y-146553261D01* +X53719409Y-146553261D02* +X53719409Y-145553261D01* +X53624171Y-145696118D01* +X53528933Y-145791356D01* +X53433695Y-145838975D01* +X54624171Y-145553261D02* +X54719410Y-145553261D01* +X54814648Y-145600880D01* +X54862267Y-145648499D01* +X54909886Y-145743737D01* +X54957505Y-145934213D01* +X54957505Y-146172309D01* +X54909886Y-146362785D01* +X54862267Y-146458023D01* +X54814648Y-146505642D01* +X54719410Y-146553261D01* +X54624171Y-146553261D01* +X54528933Y-146505642D01* +X54481314Y-146458023D01* +X54433695Y-146362785D01* +X54386076Y-146172309D01* +X54386076Y-145934213D01* +X54433695Y-145743737D01* +X54481314Y-145648499D01* +X54528933Y-145600880D01* +X54624171Y-145553261D01* +M02* diff --git a/PCB/WOT/Tinylab_proto1-cache.lib b/PCB/WOT/Tinylab_proto1-cache.lib new file mode 100644 index 00000000..2cb7db29 --- /dev/null +++ b/PCB/WOT/Tinylab_proto1-cache.lib @@ -0,0 +1,432 @@ +EESchema-LIBRARY Version 2.3 +#encoding utf-8 +# +# +5V +# +DEF +5V #PWR 0 0 Y Y 1 F P +F0 "#PWR" 0 -150 50 H I C CNN +F1 "+5V" 0 140 50 H V C CNN +F2 "" 0 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +DRAW +P 2 0 1 0 -30 50 0 100 N +P 2 0 1 0 0 0 0 100 N +P 2 0 1 0 0 100 30 50 N +X +5V 1 0 0 0 U 50 50 1 1 W N +ENDDRAW +ENDDEF +# +# 7805 +# +DEF 7805 U 0 30 N Y 1 F N +F0 "U" 150 -196 60 H V C CNN +F1 "7805" 0 200 60 H V C CNN +F2 "" 0 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +ALIAS LM7805 LM7812 78L05 +DRAW +S -200 -150 200 150 0 1 0 N +X GND 1 0 -250 100 U 40 40 1 1 I +X VO 2 400 50 200 L 40 40 1 1 w +X VI 3 -400 50 200 R 40 40 1 1 I +ENDDRAW +ENDDEF +# +# ATXMEGA16A4U-A +# +DEF ATXMEGA16A4U-A IC 0 40 Y Y 1 F N +F0 "IC" -750 1200 40 H V L BNN +F1 "ATXMEGA16A4U-A" 350 -1250 40 H V L BNN +F2 "TQFP44" 0 0 35 H V C CIN +F3 "" 0 0 60 H V C CNN +ALIAS ATXMEGA32A4U-A ATXMEGA64A4U-A ATXMEGA128A4U-A +DRAW +S -750 1150 750 -1150 0 1 10 f +X AC5/ADC5/PA5 1 900 500 150 L 40 35 1 1 B +X AC1OUT/AC6/ADC6/PA6 2 900 400 150 L 40 35 1 1 B +X AC0OUT/AC7/ADC7/PA7 3 900 300 150 L 40 35 1 1 B +X AREFB/ADC8/PB0 4 900 150 150 L 40 35 1 1 B +X ADC9/PB1 5 900 50 150 L 40 35 1 1 B +X DAC0/ADC10/PB2 6 900 -50 150 L 40 35 1 1 B +X DAC1/ACD11/PB3 7 900 -150 150 L 40 35 1 1 B +X GND 8 -150 -1300 150 U 40 35 1 1 W +X VCC 9 -100 1300 150 D 40 35 1 1 W +X SDAIN/SDA/~OC0ALS~/OC0A/PC0 10 900 -300 150 L 40 35 1 1 B +X PD0/OC0A 20 -900 -300 150 R 40 35 1 1 B +X GND 30 50 -1300 150 U 40 35 1 1 W +X AREFA/AC0/ADC0/PA0 40 900 1000 150 L 40 35 1 1 B +X SCLIN/SCL/XCK0/OC0AHS/OC0B/PC1 11 900 -400 150 L 40 35 1 1 B +X PD1/OC0B/XCK0 21 -900 -400 150 R 40 35 1 1 B +X VCC 31 100 1300 150 D 40 35 1 1 W +X AC1/ADC1/PA1 41 900 900 150 L 40 35 1 1 B +X SDAOUT/RXD0/~OC0BLS~/OC0C/PC2 12 900 -500 150 L 40 35 1 1 B +X PD2/OC0C/RXD0 22 -900 -500 150 R 40 35 1 1 B +X PE2/OC0C/RXD0 32 -900 -50 150 R 40 35 1 1 B +X AC2/ADC2/PA2 42 900 800 150 L 40 35 1 1 B +X SCLOUT/TXD0/OC0BHS/OC0D/PC3 13 900 -600 150 L 40 35 1 1 B +X PD3/OC0D/TXD0 23 -900 -600 150 R 40 35 1 1 B +X PE3/OC0D/TXD0 33 -900 -150 150 R 40 35 1 1 B +X AC3/ADC3/PA3 43 900 700 150 L 40 35 1 1 B +X ~SS~/~OC0CLS~/OC1A/PC4 14 900 -700 150 L 40 35 1 1 B +X PD4/OC1A/~SS~ 24 -900 -700 150 R 40 35 1 1 B +X PDI_DATA 34 -900 900 150 R 40 35 1 1 I +X AC4/ADC4/PA4 44 900 600 150 L 40 35 1 1 B +X MOSI/XCK1/OC0CHS/OC1B/PC5 15 900 -800 150 L 40 35 1 1 B +X PD5/OC1B/XCK1/MOSI 25 -900 -800 150 R 40 35 1 1 B +X ~RESET~/PDI_CLK 35 -900 1000 150 R 40 35 1 1 I +X CLKRTC/MISO/RXD1/~OC0DLS~/PC6 16 900 -900 150 L 40 35 1 1 B +X PD6/D-/RXD1/MISO 26 -900 -900 150 R 40 35 1 1 B +X PR0/XTAL2/TOSC2 36 -900 400 150 R 40 35 1 1 B +X EVOUT/CLKOUT/SCK/TXD1/OC0DHS/PC7 17 900 -1000 150 L 40 35 1 1 B +X PD7/D+/TXD1/SCK/CLKOUT/EVOUT 27 -900 -1000 150 R 40 35 1 1 B +X PR1/XTAL1/TOSC1 37 -900 300 150 R 40 35 1 1 B +X GND 18 -50 -1300 150 U 40 35 1 1 W +X PE0/OC0A/SDA 28 -900 150 150 R 40 35 1 1 B +X GND 38 150 -1300 150 U 40 35 1 1 W +X VCC 19 0 1300 150 D 40 35 1 1 W +X PE1/OC0B/XCK0/SCL 29 -900 50 150 R 40 35 1 1 B +X AVCC 39 300 1300 150 D 40 35 1 1 W +ENDDRAW +ENDDEF +# +# C +# +DEF C C 0 10 N Y 1 F N +F0 "C" 25 100 50 H V L CNN +F1 "C" 25 -100 50 H V L CNN +F2 "" 38 -150 30 H V C CNN +F3 "" 0 0 60 H V C CNN +$FPLIST + C? + C_????_* + C_???? + SMD*_c + Capacitor* +$ENDFPLIST +DRAW +P 2 0 1 20 -80 -30 80 -30 N +P 2 0 1 20 -80 30 80 30 N +X ~ 1 0 150 110 D 40 40 1 1 P +X ~ 2 0 -150 110 U 40 40 1 1 P +ENDDRAW +ENDDEF +# +# CONN_01X02 +# +DEF CONN_01X02 P 0 40 Y N 1 F N +F0 "P" 0 150 50 H V C CNN +F1 "CONN_01X02" 100 0 50 V V C CNN +F2 "" 0 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +$FPLIST + Pin_Header_Straight_1X02 + Pin_Header_Angled_1X02 + Socket_Strip_Straight_1X02 + Socket_Strip_Angled_1X02 +$ENDFPLIST +DRAW +S -50 -45 10 -55 0 1 0 N +S -50 55 10 45 0 1 0 N +S -50 100 50 -100 0 1 0 N +X P1 1 -200 50 150 R 50 50 1 1 P +X P2 2 -200 -50 150 R 50 50 1 1 P +ENDDRAW +ENDDEF +# +# CONN_01X03 +# +DEF CONN_01X03 P 0 40 Y N 1 F N +F0 "P" 0 200 50 H V C CNN +F1 "CONN_01X03" 100 0 50 V V C CNN +F2 "" 0 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +$FPLIST + Pin_Header_Straight_1X03 + Pin_Header_Angled_1X03 + Socket_Strip_Straight_1X03 + Socket_Strip_Angled_1X03 +$ENDFPLIST +DRAW +S -50 -95 10 -105 0 1 0 N +S -50 5 10 -5 0 1 0 N +S -50 105 10 95 0 1 0 N +S -50 150 50 -150 0 1 0 N +X P1 1 -200 100 150 R 50 50 1 1 P +X P2 2 -200 0 150 R 50 50 1 1 P +X P3 3 -200 -100 150 R 50 50 1 1 P +ENDDRAW +ENDDEF +# +# CONN_01X04 +# +DEF CONN_01X04 P 0 40 Y N 1 F N +F0 "P" 0 250 50 H V C CNN +F1 "CONN_01X04" 100 0 50 V V C CNN +F2 "" 0 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +$FPLIST + Pin_Header_Straight_1X04 + Pin_Header_Angled_1X04 + Socket_Strip_Straight_1X04 + Socket_Strip_Angled_1X04 +$ENDFPLIST +DRAW +S -50 -145 10 -155 0 1 0 N +S -50 -45 10 -55 0 1 0 N +S -50 55 10 45 0 1 0 N +S -50 155 10 145 0 1 0 N +S -50 200 50 -200 0 1 0 N +X P1 1 -200 150 150 R 50 50 1 1 P +X P2 2 -200 50 150 R 50 50 1 1 P +X P3 3 -200 -50 150 R 50 50 1 1 P +X P4 4 -200 -150 150 R 50 50 1 1 P +ENDDRAW +ENDDEF +# +# CONN_02X02 +# +DEF CONN_02X02 P 0 1 Y N 1 F N +F0 "P" 0 150 50 H V C CNN +F1 "CONN_02X02" 0 -150 50 H V C CNN +F2 "" 0 -1200 60 H V C CNN +F3 "" 0 -1200 60 H V C CNN +$FPLIST + Pin_Header_Straight_2X02 + Pin_Header_Angled_2X02 + Socket_Strip_Straight_2X02 + Socket_Strip_Angled_2X02 +$ENDFPLIST +DRAW +S -100 -45 -50 -55 0 1 0 N +S -100 55 -50 45 0 1 0 N +S -100 100 100 -100 0 1 0 N +S 50 -45 100 -55 0 1 0 N +S 50 55 100 45 0 1 0 N +X P1 1 -250 50 150 R 50 50 1 1 P +X P2 2 250 50 150 L 50 50 1 1 P +X P3 3 -250 -50 150 R 50 50 1 1 P +X P4 4 250 -50 150 L 50 50 1 1 P +ENDDRAW +ENDDEF +# +# CP1 +# +DEF CP1 C 0 10 N N 1 F N +F0 "C" 25 100 50 H V L CNN +F1 "CP1" 25 -100 50 H V L CNN +F2 "" 0 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +$FPLIST + SMD*_Pol + c_elec* + C*elec + TantalC* + Elko* + CP* +$ENDFPLIST +DRAW +A 0 -150 128 1287 513 0 1 20 N -80 -50 80 -50 +P 2 0 1 20 -80 30 80 30 N +P 2 0 1 0 -70 90 -30 90 N +P 2 0 1 0 -50 70 -50 110 N +X ~ 1 0 150 110 D 40 40 1 1 P +X ~ 2 0 -150 130 U 40 40 1 1 P +ENDDRAW +ENDDEF +# +# C_Small +# +DEF C_Small C 0 10 N N 1 F N +F0 "C" 10 70 50 H V L CNN +F1 "C_Small" 10 -80 50 H V L CNN +F2 "" 0 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +$FPLIST + C? + C_????_* + C_???? + SMD*_c + Capacitor* +$ENDFPLIST +DRAW +P 2 0 1 13 -60 -20 60 -20 N +P 2 0 1 12 -60 20 60 20 N +X ~ 1 0 100 75 D 40 40 1 1 P +X ~ 2 0 -100 80 U 40 40 1 1 P +ENDDRAW +ENDDEF +# +# DMN63D8LDW +# +DEF DMN63D8LDW U 0 40 Y Y 1 F N +F0 "U" 0 -300 60 H V C CNN +F1 "DMN63D8LDW" 0 350 60 H V C CNN +F2 "" 0 -300 60 H V C CNN +F3 "" 0 -300 60 H V C CNN +DRAW +S -250 300 250 -350 0 1 0 f +X S1 1 450 -150 200 L 50 50 1 1 I +X G1 2 450 0 200 L 50 50 1 1 I +X D2 3 450 150 200 L 50 50 1 1 I +X S2 4 -450 150 200 R 50 50 1 1 I +X G2 5 -450 0 200 R 50 50 1 1 I +X D1 6 -450 -150 200 R 50 50 1 1 I +ENDDRAW +ENDDEF +# +# D_Schottky +# +DEF D_Schottky D 0 40 N N 1 F N +F0 "D" 0 100 50 H V C CNN +F1 "D_Schottky" 0 -100 50 H V C CNN +F2 "" 0 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +$FPLIST + D-Pak_TO252AA + Diode_* + *SingleDiode + *SingleDiode* + *_Diode_* +$ENDFPLIST +DRAW +P 3 0 1 0 50 50 -50 0 50 -50 F +P 6 0 1 8 -75 25 -75 50 -50 50 -50 -50 -25 -50 -25 -25 N +X K 1 -150 0 100 R 50 50 1 1 P +X A 2 150 0 100 L 50 50 1 1 P +ENDDRAW +ENDDEF +# +# F_Small +# +DEF F_Small F 0 10 N N 1 F N +F0 "F" -40 60 50 H V L CNN +F1 "F_Small" -120 -60 50 H V L CNN +F2 "" 0 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +$FPLIST + CP* + SM* +$ENDFPLIST +DRAW +S -50 20 50 -20 0 1 0 N +P 2 0 1 0 -50 0 50 0 N +X ~ 1 -100 0 50 R 40 40 1 1 P +X ~ 2 100 0 50 L 40 40 1 1 P +ENDDRAW +ENDDEF +# +# INDUCTOR +# +DEF INDUCTOR L 0 40 N N 1 F N +F0 "L" -50 0 50 V V C CNN +F1 "INDUCTOR" 100 0 50 V V C CNN +F2 "" 0 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +DRAW +A 0 -150 50 -889 889 0 1 0 N 1 -199 1 -100 +A 0 -49 51 -889 889 0 1 0 N 1 -99 1 2 +A 0 51 51 -889 889 0 1 0 N 1 1 1 102 +A 0 148 48 -889 889 0 1 0 N 1 101 1 196 +X 1 1 0 300 100 D 70 70 1 1 P +X 2 2 0 -300 100 U 70 70 1 1 P +ENDDRAW +ENDDEF +# +# LM2902N +# +DEF LM2902N U 0 20 Y Y 4 F N +F0 "U" 50 200 60 H V C CNN +F1 "LM2902N" 150 -200 50 H V C CNN +F2 "" 0 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +ALIAS LM324 TLC274 TL074 LM324N LM324AN +DRAW +P 4 0 1 6 -200 200 200 0 -200 -200 -200 200 f +X V+ 4 -100 400 250 D 40 40 0 1 W +X V- 11 -100 -400 250 U 40 40 0 1 W +X ~ 1 500 0 300 L 40 40 1 1 O +X - 2 -500 -100 300 R 40 40 1 1 I +X + 3 -500 100 300 R 40 40 1 1 I +X + 5 -500 100 300 R 40 40 2 1 I +X - 6 -500 -100 300 R 40 40 2 1 I +X ~ 7 500 0 300 L 40 40 2 1 O +X ~ 8 500 0 300 L 40 40 3 1 O +X - 9 -500 -100 300 R 40 40 3 1 I +X + 10 -500 100 300 R 40 40 3 1 I +X + 12 -500 100 300 R 40 40 4 1 I +X - 13 -500 -100 300 R 40 40 4 1 I +X ~ 14 500 0 300 L 40 40 4 1 O +ENDDRAW +ENDDEF +# +# Q_NMOS_GSD +# +DEF Q_NMOS_GSD Q 0 0 Y N 1 F N +F0 "Q" 300 50 50 H V R CNN +F1 "Q_NMOS_GSD" 650 -50 50 H V R CNN +F2 "" 200 100 29 H V C CNN +F3 "" 0 0 60 H V C CNN +DRAW +C 50 0 111 0 1 10 N +P 2 0 1 0 30 -70 100 -70 N +P 2 0 1 10 30 -50 30 -90 N +P 2 0 1 0 30 0 100 0 N +P 2 0 1 10 30 20 30 -20 N +P 2 0 1 0 30 70 100 70 N +P 2 0 1 10 30 90 30 50 N +P 2 0 1 0 100 -70 100 -100 N +P 2 0 1 0 100 -70 100 0 N +P 2 0 1 0 100 100 100 70 N +P 3 0 1 10 10 75 10 -75 10 -75 N +P 4 0 1 0 40 0 80 15 80 -15 40 0 F +X G 1 -200 0 210 R 50 50 1 1 I +X S 2 100 -200 100 U 50 50 1 1 P +X D 3 100 200 100 D 50 50 1 1 P +ENDDRAW +ENDDEF +# +# R +# +DEF R R 0 0 N Y 1 F N +F0 "R" 80 0 50 V V C CNN +F1 "R" 0 0 50 V V C CNN +F2 "" -70 0 30 V V C CNN +F3 "" 0 0 30 H V C CNN +$FPLIST + R_* + Resistor_* +$ENDFPLIST +DRAW +S -40 -100 40 100 0 1 10 N +X ~ 1 0 150 50 D 60 60 1 1 P +X ~ 2 0 -150 50 U 60 60 1 1 P +ENDDRAW +ENDDEF +# +# USB_OTG +# +DEF USB_OTG P 0 40 Y Y 1 F N +F0 "P" 325 -125 50 H V C CNN +F1 "USB_OTG" 0 200 50 H V C CNN +F2 "" -50 -100 60 V V C CNN +F3 "" -50 -100 60 V V C CNN +$FPLIST + USB* +$ENDFPLIST +DRAW +S -250 -150 250 150 0 1 0 N +S -205 -150 -195 -120 0 1 0 N +S -105 -150 -95 -120 0 1 0 N +S -5 -150 5 -120 0 1 0 N +S 95 -150 105 -120 0 1 0 N +S 195 -150 205 -120 0 1 0 N +X VCC 1 -200 -300 150 U 50 50 1 1 w +X D- 2 -100 -300 150 U 50 50 1 1 P +X D+ 3 0 -300 150 U 50 50 1 1 P +X ID 4 100 -300 150 U 50 50 1 1 W +X GND 5 200 -300 150 U 50 50 1 1 W +X shield 6 400 100 150 L 50 50 1 1 P +ENDDRAW +ENDDEF +# +#End Library diff --git a/PCB/WOT/Tinylab_proto1.drl b/PCB/WOT/Tinylab_proto1.drl new file mode 100644 index 00000000..b339f505 --- /dev/null +++ b/PCB/WOT/Tinylab_proto1.drl @@ -0,0 +1,121 @@ +M48 +;DRILL file {KiCad (2015-08-05 BZR 6055, Git fa29c62)-product} date 28/09/2015 12:53:00 PM +;FORMAT={2:4/ absolute / inch / keep zeros} +FMAT,2 +INCH,TZ +T1C0.016 +T2C0.020 +T3C0.022 +T4C0.032 +T5C0.039 +T6C0.040 +T7C0.050 +% +G90 +G05 +M72 +T1 +X016558Y-053370 +X016572Y-053735 +X017191Y-056870 +X017520Y-057912 +X017845Y-053361 +X017895Y-053816 +X017912Y-058768 +X017936Y-057400 +X017944Y-059480 +X018280Y-052824 +X018340Y-058854 +X019048Y-055976 +X019222Y-057006 +X019224Y-056616 +X019642Y-058884 +X019664Y-050680 +X019678Y-054890 +X019952Y-054352 +X020032Y-054912 +X020056Y-052472 +X020118Y-054076 +X020256Y-056784 +X020296Y-052104 +X020326Y-058905 +X020552Y-057944 +X020656Y-052704 +X020666Y-053800 +X020950Y-049946 +X021336Y-052368 +X021346Y-052698 +X021658Y-050376 +X021758Y-053774 +X021868Y-056772 +X021904Y-058248 +X021932Y-059390 +X021992Y-050644 +X022168Y-055530 +X022248Y-056704 +X022318Y-057564 +X022538Y-050640 +X022592Y-052624 +X022720Y-057550 +X022786Y-058992 +X022816Y-055528 +X023008Y-052256 +X023216Y-050628 +X023650Y-049984 +X023698Y-057954 +X023960Y-051264 +X024068Y-050572 +X024136Y-057052 +X024848Y-057608 +X024906Y-049964 +X024946Y-050760 +X025244Y-050112 +X025828Y-050622 +X026068Y-057894 +X027092Y-057916 +X028048Y-057970 +T4 +X027256Y-054581 +X027256Y-055581 +X027896Y-049448 +X027896Y-050448 +T5 +X025180Y-051929 +X029126Y-053071 +T6 +X014275Y-057520 +X014275Y-058520 +X014275Y-059520 +X014275Y-060520 +X017426Y-049248 +X018426Y-049248 +X019426Y-049248 +X021724Y-048708 +X021724Y-049708 +X022724Y-048708 +X022724Y-049708 +X023145Y-060635 +X024145Y-060635 +X024872Y-048256 +X025536Y-060752 +X025872Y-048256 +X026536Y-060752 +X027536Y-060752 +X028032Y-056892 +X028536Y-060752 +X029032Y-056892 +T7 +X025126Y-053071 +X029180Y-051929 +T2 +X014607Y-052126G85X014863Y-052126 +G05 +X014607Y-054882G85X014863Y-054882 +G05 +T3 +X015798Y-052460G85X015798Y-052578 +G05 +X015798Y-054429G85X015798Y-054547 +G05 +T0 +M30 diff --git a/PCB/WOT/Tinylab_proto1.kicad_pcb b/PCB/WOT/Tinylab_proto1.kicad_pcb new file mode 100644 index 00000000..f9131c40 --- /dev/null +++ b/PCB/WOT/Tinylab_proto1.kicad_pcb @@ -0,0 +1,2556 @@ +(kicad_pcb (version 4) (host pcbnew "(2015-08-05 BZR 6055, Git fa29c62)-product") + + (general + (links 113) + (no_connects 3) + (area 72.535 130.44446 120.001667 163.587) + (thickness 1.6) + (drawings 5) + (tracks 544) + (zones 0) + (modules 51) + (nets 68) + ) + + (page A4) + (layers + (0 F.Cu signal) + (31 B.Cu signal) + (32 B.Adhes user hide) + (33 F.Adhes user hide) + (34 B.Paste user hide) + (35 F.Paste user hide) + (36 B.SilkS user hide) + (37 F.SilkS user) + (38 B.Mask user hide) + (39 F.Mask user hide) + (40 Dwgs.User user hide) + (41 Cmts.User user hide) + (42 Eco1.User user hide) + (43 Eco2.User user hide) + (44 Edge.Cuts user hide) + (45 Margin user hide) + (46 B.CrtYd user hide) + (47 F.CrtYd user) + (48 B.Fab user hide) + (49 F.Fab user hide) + ) + + (setup + (last_trace_width 0.508) + (user_trace_width 0.254) + (user_trace_width 0.508) + (user_trace_width 1.016) + (trace_clearance 0.2) + (zone_clearance 0.508) + (zone_45_only no) + (trace_min 0.2) + (segment_width 0.2) + (edge_width 0.1) + (via_size 0.6) + (via_drill 0.4) + (via_min_size 0.4) + (via_min_drill 0.3) + (uvia_size 0.3) + (uvia_drill 0.1) + (uvias_allowed no) + (uvia_min_size 0.2) + (uvia_min_drill 0.1) + (pcb_text_width 0.3) + (pcb_text_size 1.5 1.5) + (mod_edge_width 0.15) + (mod_text_size 1 1) + (mod_text_width 0.15) + (pad_size 1.5 1.5) + (pad_drill 0.6) + (pad_to_mask_clearance 0) + (aux_axis_origin 0 0) + (visible_elements 7FFFFB61) + (pcbplotparams + (layerselection 0x010f0_80000001) + (usegerberextensions false) + (excludeedgelayer true) + (linewidth 0.100000) + (plotframeref false) + (viasonmask false) + (mode 1) + (useauxorigin false) + (hpglpennumber 1) + (hpglpenspeed 20) + (hpglpendiameter 15) + (hpglpenoverlay 2) + (psnegative false) + (psa4output false) + (plotreference true) + (plotvalue true) + (plotinvisibletext false) + (padsonsilk false) + (subtractmaskfromsilk false) + (outputformat 1) + (mirror false) + (drillshape 0) + (scaleselection 1) + (outputdirectory OUTPUT_V2/)) + ) + + (net 0 "") + (net 1 "Net-(C1-Pad1)") + (net 2 "Net-(C1-Pad2)") + (net 3 "Net-(C2-Pad1)") + (net 4 "Net-(C2-Pad2)") + (net 5 +5V) + (net 6 /AGND) + (net 7 /AVCC) + (net 8 /VGND) + (net 9 /VCC_PSU) + (net 10 "Net-(C7-Pad1)") + (net 11 "Net-(C7-Pad2)") + (net 12 "Net-(C11-Pad1)") + (net 13 "Net-(C14-Pad1)") + (net 14 "Net-(C14-Pad2)") + (net 15 "Net-(D1-Pad2)") + (net 16 /PSU_FEEDBACK) + (net 17 /CH2) + (net 18 "Net-(IC1-Pad3)") + (net 19 "Net-(IC1-Pad4)") + (net 20 "Net-(IC1-Pad5)") + (net 21 /DAC_OUT) + (net 22 /DAC_OUT2) + (net 23 "Net-(IC1-Pad8)") + (net 24 "Net-(IC1-Pad9)") + (net 25 "Net-(IC1-Pad10)") + (net 26 /XCK) + (net 27 /DIG_CH2) + (net 28 "Net-(IC1-Pad13)") + (net 29 "Net-(IC1-Pad16)") + (net 30 /DIG_CH1) + (net 31 "Net-(IC1-Pad20)") + (net 32 "Net-(IC1-Pad21)") + (net 33 "Net-(IC1-Pad22)") + (net 34 "Net-(IC1-Pad23)") + (net 35 /PSU_PWM) + (net 36 "Net-(IC1-Pad25)") + (net 37 /D-) + (net 38 /D+) + (net 39 "Net-(IC1-Pad28)") + (net 40 "Net-(IC1-Pad29)") + (net 41 "Net-(IC1-Pad32)") + (net 42 "Net-(IC1-Pad33)") + (net 43 "Net-(IC1-Pad34)") + (net 44 "Net-(IC1-Pad35)") + (net 45 "Net-(IC1-Pad36)") + (net 46 "Net-(IC1-Pad37)") + (net 47 "Net-(IC1-Pad41)") + (net 48 /CH1) + (net 49 "Net-(IC1-Pad43)") + (net 50 /AVCC_ON_2) + (net 51 "Net-(P2-Pad4)") + (net 52 "Net-(P3-Pad1)") + (net 53 "Net-(P3-Pad2)") + (net 54 "Net-(P3-Pad3)") + (net 55 "Net-(P3-Pad4)") + (net 56 "Net-(P8-Pad1)") + (net 57 "Net-(P8-Pad2)") + (net 58 "Net-(R1-Pad1)") + (net 59 "Net-(R2-Pad1)") + (net 60 "Net-(R11-Pad2)") + (net 61 "Net-(R12-Pad2)") + (net 62 "Net-(R13-Pad2)") + (net 63 "Net-(R10-Pad1)") + (net 64 "Net-(R15-Pad1)") + (net 65 "Net-(R15-Pad2)") + (net 66 "Net-(R17-Pad1)") + (net 67 "Net-(R17-Pad2)") + + (net_class Default "This is the default net class." + (clearance 0.2) + (trace_width 0.25) + (via_dia 0.6) + (via_drill 0.4) + (uvia_dia 0.3) + (uvia_drill 0.1) + (add_net +5V) + (add_net /AGND) + (add_net /AVCC) + (add_net /AVCC_ON_2) + (add_net /CH1) + (add_net /CH2) + (add_net /D+) + (add_net /D-) + (add_net /DAC_OUT) + (add_net /DAC_OUT2) + (add_net /DIG_CH1) + (add_net /DIG_CH2) + (add_net /PSU_FEEDBACK) + (add_net /PSU_PWM) + (add_net /VCC_PSU) + (add_net /VGND) + (add_net /XCK) + (add_net "Net-(C1-Pad1)") + (add_net "Net-(C1-Pad2)") + (add_net "Net-(C11-Pad1)") + (add_net "Net-(C14-Pad1)") + (add_net "Net-(C14-Pad2)") + (add_net "Net-(C2-Pad1)") + (add_net "Net-(C2-Pad2)") + (add_net "Net-(C7-Pad1)") + (add_net "Net-(C7-Pad2)") + (add_net "Net-(D1-Pad2)") + (add_net "Net-(IC1-Pad10)") + (add_net "Net-(IC1-Pad13)") + (add_net "Net-(IC1-Pad16)") + (add_net "Net-(IC1-Pad20)") + (add_net "Net-(IC1-Pad21)") + (add_net "Net-(IC1-Pad22)") + (add_net "Net-(IC1-Pad23)") + (add_net "Net-(IC1-Pad25)") + (add_net "Net-(IC1-Pad28)") + (add_net "Net-(IC1-Pad29)") + (add_net "Net-(IC1-Pad3)") + (add_net "Net-(IC1-Pad32)") + (add_net "Net-(IC1-Pad33)") + (add_net "Net-(IC1-Pad34)") + (add_net "Net-(IC1-Pad35)") + (add_net "Net-(IC1-Pad36)") + (add_net "Net-(IC1-Pad37)") + (add_net "Net-(IC1-Pad4)") + (add_net "Net-(IC1-Pad41)") + (add_net "Net-(IC1-Pad43)") + (add_net "Net-(IC1-Pad5)") + (add_net "Net-(IC1-Pad8)") + (add_net "Net-(IC1-Pad9)") + (add_net "Net-(P2-Pad4)") + (add_net "Net-(P3-Pad1)") + (add_net "Net-(P3-Pad2)") + (add_net "Net-(P3-Pad3)") + (add_net "Net-(P3-Pad4)") + (add_net "Net-(P8-Pad1)") + (add_net "Net-(P8-Pad2)") + (add_net "Net-(R1-Pad1)") + (add_net "Net-(R10-Pad1)") + (add_net "Net-(R11-Pad2)") + (add_net "Net-(R12-Pad2)") + (add_net "Net-(R13-Pad2)") + (add_net "Net-(R15-Pad1)") + (add_net "Net-(R15-Pad2)") + (add_net "Net-(R17-Pad1)") + (add_net "Net-(R17-Pad2)") + (add_net "Net-(R2-Pad1)") + ) + + (module Capacitors_SMD:C_0603 (layer F.Cu) (tedit 567B5D27) (tstamp 5673A8B8) + (at 91.186 156.591) + (descr "Capacitor SMD 0603, reflow soldering, AVX (see smccp.pdf)") + (tags "capacitor 0603") + (path /55CAB611) + (attr smd) + (fp_text reference C1 (at 1.016 -1.2954) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value C (at 0 1.9) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.45 -0.75) (end 1.45 -0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 -0.75) (end -1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.45 -0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.35 -0.6) (end 0.35 -0.6) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.35 0.6) (end -0.35 0.6) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 1 "Net-(C1-Pad1)")) + (pad 2 smd rect (at 0.75 0) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 2 "Net-(C1-Pad2)")) + (model Capacitors_SMD.3dshapes/C_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_SMD:C_0603 (layer F.Cu) (tedit 567B5EFE) (tstamp 5673A8BE) + (at 91.948 159.766 90) + (descr "Capacitor SMD 0603, reflow soldering, AVX (see smccp.pdf)") + (tags "capacitor 0603") + (path /55CAB4DE) + (attr smd) + (fp_text reference C2 (at -2.21996 0.28448 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value C (at 0 1.9 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.45 -0.75) (end 1.45 -0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 -0.75) (end -1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.45 -0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.35 -0.6) (end 0.35 -0.6) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.35 0.6) (end -0.35 0.6) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 90) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 3 "Net-(C2-Pad1)")) + (pad 2 smd rect (at 0.75 0 90) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 4 "Net-(C2-Pad2)")) + (model Capacitors_SMD.3dshapes/C_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_SMD:C_0603 (layer F.Cu) (tedit 567B5D0A) (tstamp 5673A8C4) + (at 111.887 142.621) + (descr "Capacitor SMD 0603, reflow soldering, AVX (see smccp.pdf)") + (tags "capacitor 0603") + (path /55CB13E1) + (attr smd) + (fp_text reference C3 (at 0.0254 -1.2954) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value C_Small (at 0 1.9) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.45 -0.75) (end 1.45 -0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 -0.75) (end -1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.45 -0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.35 -0.6) (end 0.35 -0.6) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.35 0.6) (end -0.35 0.6) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 5 +5V)) + (pad 2 smd rect (at 0.75 0) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 6 /AGND)) + (model Capacitors_SMD.3dshapes/C_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_SMD:C_0603 (layer F.Cu) (tedit 567B5D1B) (tstamp 5673A8CA) + (at 111.506 147.193 180) + (descr "Capacitor SMD 0603, reflow soldering, AVX (see smccp.pdf)") + (tags "capacitor 0603") + (path /55CB147C) + (attr smd) + (fp_text reference C4 (at -0.1524 -1.2954 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value C_Small (at 0 1.9 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.45 -0.75) (end 1.45 -0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 -0.75) (end -1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.45 -0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.35 -0.6) (end 0.35 -0.6) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.35 0.6) (end -0.35 0.6) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 180) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 7 /AVCC)) + (pad 2 smd rect (at 0.75 0 180) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 6 /AGND)) + (model Capacitors_SMD.3dshapes/C_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_SMD:C_0603 (layer F.Cu) (tedit 567B5DA3) (tstamp 5673A8D0) + (at 91.821 151.003 90) + (descr "Capacitor SMD 0603, reflow soldering, AVX (see smccp.pdf)") + (tags "capacitor 0603") + (path /55D60181) + (attr smd) + (fp_text reference C5 (at 1.905 0.8382 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value C_Small (at 0 1.9 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.45 -0.75) (end 1.45 -0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 -0.75) (end -1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.45 -0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.35 -0.6) (end 0.35 -0.6) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.35 0.6) (end -0.35 0.6) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 90) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 7 /AVCC)) + (pad 2 smd rect (at 0.75 0 90) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 6 /AGND)) + (model Capacitors_SMD.3dshapes/C_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_ThroughHole:C_Radial_D6.3_L11.2_P2.5 (layer F.Cu) (tedit 567B5BB7) (tstamp 5673A8D6) + (at 78.994 136.906 180) + (descr "Radial Electrolytic Capacitor, Diameter 6.3mm x Length 11.2mm, Pitch 2.5mm") + (tags "Electrolytic Capacitor") + (path /560719D9) + (fp_text reference C6 (at 0.127 -1.651 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value CP1 (at 1.25 4.4 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.325 -3.149) (end 1.325 3.149) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.465 -3.143) (end 1.465 3.143) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.605 -3.13) (end 1.605 -0.446) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.605 0.446) (end 1.605 3.13) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.745 -3.111) (end 1.745 -0.656) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.745 0.656) (end 1.745 3.111) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.885 -3.085) (end 1.885 -0.789) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.885 0.789) (end 1.885 3.085) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.025 -3.053) (end 2.025 -0.88) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.025 0.88) (end 2.025 3.053) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.165 -3.014) (end 2.165 -0.942) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.165 0.942) (end 2.165 3.014) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.305 -2.968) (end 2.305 -0.981) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.305 0.981) (end 2.305 2.968) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.445 -2.915) (end 2.445 -0.998) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.445 0.998) (end 2.445 2.915) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.585 -2.853) (end 2.585 -0.996) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.585 0.996) (end 2.585 2.853) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.725 -2.783) (end 2.725 -0.974) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.725 0.974) (end 2.725 2.783) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.865 -2.704) (end 2.865 -0.931) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.865 0.931) (end 2.865 2.704) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.005 -2.616) (end 3.005 -0.863) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.005 0.863) (end 3.005 2.616) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.145 -2.516) (end 3.145 -0.764) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.145 0.764) (end 3.145 2.516) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.285 -2.404) (end 3.285 -0.619) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.285 0.619) (end 3.285 2.404) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.425 -2.279) (end 3.425 -0.38) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.425 0.38) (end 3.425 2.279) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.565 -2.136) (end 3.565 2.136) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.705 -1.974) (end 3.705 1.974) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.845 -1.786) (end 3.845 1.786) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.985 -1.563) (end 3.985 1.563) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.125 -1.287) (end 4.125 1.287) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.265 -0.912) (end 4.265 0.912) (layer F.SilkS) (width 0.15)) + (fp_circle (center 2.5 0) (end 2.5 -1) (layer F.SilkS) (width 0.15)) + (fp_circle (center 1.25 0) (end 1.25 -3.1875) (layer F.SilkS) (width 0.15)) + (fp_circle (center 1.25 0) (end 1.25 -3.4) (layer F.CrtYd) (width 0.05)) + (pad 2 thru_hole circle (at 2.5 0 180) (size 1.3 1.3) (drill 0.8) (layers *.Cu *.Mask F.SilkS) + (net 8 /VGND)) + (pad 1 thru_hole rect (at 0 0 180) (size 1.3 1.3) (drill 0.8) (layers *.Cu *.Mask F.SilkS) + (net 9 /VCC_PSU)) + (model Capacitors_ThroughHole.3dshapes/C_Radial_D6.3_L11.2_P2.5.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_SMD:C_0603 (layer F.Cu) (tedit 5415D631) (tstamp 5673A8DC) + (at 78.74 154.432 90) + (descr "Capacitor SMD 0603, reflow soldering, AVX (see smccp.pdf)") + (tags "capacitor 0603") + (path /55CB630B) + (attr smd) + (fp_text reference C7 (at 0 -1.9 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value C (at 0 1.9 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.45 -0.75) (end 1.45 -0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 -0.75) (end -1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.45 -0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.35 -0.6) (end 0.35 -0.6) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.35 0.6) (end -0.35 0.6) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 90) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 10 "Net-(C7-Pad1)")) + (pad 2 smd rect (at 0.75 0 90) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 11 "Net-(C7-Pad2)")) + (model Capacitors_SMD.3dshapes/C_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_SMD:C_0603 (layer F.Cu) (tedit 567B5E33) (tstamp 5673A8E2) + (at 81.28 143.51 270) + (descr "Capacitor SMD 0603, reflow soldering, AVX (see smccp.pdf)") + (tags "capacitor 0603") + (path /56071A50) + (attr smd) + (fp_text reference C8 (at -0.0508 1.397 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value C (at 0 1.9 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.45 -0.75) (end 1.45 -0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 -0.75) (end -1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.45 -0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.35 -0.6) (end 0.35 -0.6) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.35 0.6) (end -0.35 0.6) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 270) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 9 /VCC_PSU)) + (pad 2 smd rect (at 0.75 0 270) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 8 /VGND)) + (model Capacitors_SMD.3dshapes/C_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_SMD:C_0603 (layer F.Cu) (tedit 567B5CDA) (tstamp 5673A8E8) + (at 97.536 141.351 270) + (descr "Capacitor SMD 0603, reflow soldering, AVX (see smccp.pdf)") + (tags "capacitor 0603") + (path /55D75F49) + (attr smd) + (fp_text reference C9 (at -2.413 -0.254 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value C_Small (at 0 1.9 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.45 -0.75) (end 1.45 -0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 -0.75) (end -1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.45 -0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.35 -0.6) (end 0.35 -0.6) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.35 0.6) (end -0.35 0.6) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 270) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 5 +5V)) + (pad 2 smd rect (at 0.75 0 270) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 8 /VGND)) + (model Capacitors_SMD.3dshapes/C_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_SMD:C_0603 (layer F.Cu) (tedit 567B5D24) (tstamp 5673A8EE) + (at 97.79 153.035 90) + (descr "Capacitor SMD 0603, reflow soldering, AVX (see smccp.pdf)") + (tags "capacitor 0603") + (path /5609699F) + (attr smd) + (fp_text reference C10 (at -0.0762 -1.27 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value C (at 0 1.9 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.45 -0.75) (end 1.45 -0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 -0.75) (end -1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.45 -0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.35 -0.6) (end 0.35 -0.6) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.35 0.6) (end -0.35 0.6) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 90) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 7 /AVCC)) + (pad 2 smd rect (at 0.75 0 90) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 6 /AGND)) + (model Capacitors_SMD.3dshapes/C_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_ThroughHole:C_Radial_D6.3_L11.2_P2.5 (layer F.Cu) (tedit 567B5E4A) (tstamp 5673A8F4) + (at 93.345 143.891 90) + (descr "Radial Electrolytic Capacitor, Diameter 6.3mm x Length 11.2mm, Pitch 2.5mm") + (tags "Electrolytic Capacitor") + (path /560735FE) + (fp_text reference C11 (at -1.4732 0.127 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value CP1 (at 1.25 4.4 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.325 -3.149) (end 1.325 3.149) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.465 -3.143) (end 1.465 3.143) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.605 -3.13) (end 1.605 -0.446) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.605 0.446) (end 1.605 3.13) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.745 -3.111) (end 1.745 -0.656) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.745 0.656) (end 1.745 3.111) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.885 -3.085) (end 1.885 -0.789) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.885 0.789) (end 1.885 3.085) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.025 -3.053) (end 2.025 -0.88) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.025 0.88) (end 2.025 3.053) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.165 -3.014) (end 2.165 -0.942) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.165 0.942) (end 2.165 3.014) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.305 -2.968) (end 2.305 -0.981) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.305 0.981) (end 2.305 2.968) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.445 -2.915) (end 2.445 -0.998) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.445 0.998) (end 2.445 2.915) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.585 -2.853) (end 2.585 -0.996) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.585 0.996) (end 2.585 2.853) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.725 -2.783) (end 2.725 -0.974) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.725 0.974) (end 2.725 2.783) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.865 -2.704) (end 2.865 -0.931) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.865 0.931) (end 2.865 2.704) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.005 -2.616) (end 3.005 -0.863) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.005 0.863) (end 3.005 2.616) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.145 -2.516) (end 3.145 -0.764) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.145 0.764) (end 3.145 2.516) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.285 -2.404) (end 3.285 -0.619) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.285 0.619) (end 3.285 2.404) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.425 -2.279) (end 3.425 -0.38) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.425 0.38) (end 3.425 2.279) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.565 -2.136) (end 3.565 2.136) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.705 -1.974) (end 3.705 1.974) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.845 -1.786) (end 3.845 1.786) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.985 -1.563) (end 3.985 1.563) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.125 -1.287) (end 4.125 1.287) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.265 -0.912) (end 4.265 0.912) (layer F.SilkS) (width 0.15)) + (fp_circle (center 2.5 0) (end 2.5 -1) (layer F.SilkS) (width 0.15)) + (fp_circle (center 1.25 0) (end 1.25 -3.1875) (layer F.SilkS) (width 0.15)) + (fp_circle (center 1.25 0) (end 1.25 -3.4) (layer F.CrtYd) (width 0.05)) + (pad 2 thru_hole circle (at 2.5 0 90) (size 1.3 1.3) (drill 0.8) (layers *.Cu *.Mask F.SilkS) + (net 8 /VGND)) + (pad 1 thru_hole rect (at 0 0 90) (size 1.3 1.3) (drill 0.8) (layers *.Cu *.Mask F.SilkS) + (net 12 "Net-(C11-Pad1)")) + (model Capacitors_ThroughHole.3dshapes/C_Radial_D6.3_L11.2_P2.5.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_SMD:C_0603 (layer F.Cu) (tedit 567B5E45) (tstamp 5673A8FA) + (at 88.9 143.129 90) + (descr "Capacitor SMD 0603, reflow soldering, AVX (see smccp.pdf)") + (tags "capacitor 0603") + (path /5607355F) + (attr smd) + (fp_text reference C12 (at -2.1082 0.4064 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value C (at 0 1.9 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.45 -0.75) (end 1.45 -0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 -0.75) (end -1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.45 -0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.35 -0.6) (end 0.35 -0.6) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.35 0.6) (end -0.35 0.6) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 90) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 12 "Net-(C11-Pad1)")) + (pad 2 smd rect (at 0.75 0 90) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 8 /VGND)) + (model Capacitors_SMD.3dshapes/C_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_SMD:C_0603 (layer F.Cu) (tedit 5415D631) (tstamp 5673A900) + (at 114.427 152.527 270) + (descr "Capacitor SMD 0603, reflow soldering, AVX (see smccp.pdf)") + (tags "capacitor 0603") + (path /5608B4BE) + (attr smd) + (fp_text reference C13 (at 0 -1.9 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value C (at 0 1.9 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.45 -0.75) (end 1.45 -0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 -0.75) (end -1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.45 -0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.35 -0.6) (end 0.35 -0.6) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.35 0.6) (end -0.35 0.6) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 270) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 7 /AVCC)) + (pad 2 smd rect (at 0.75 0 270) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 6 /AGND)) + (model Capacitors_SMD.3dshapes/C_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_SMD:C_0603 (layer F.Cu) (tedit 567B5E84) (tstamp 5673A906) + (at 78.74 159.766 90) + (descr "Capacitor SMD 0603, reflow soldering, AVX (see smccp.pdf)") + (tags "capacitor 0603") + (path /566DF655) + (attr smd) + (fp_text reference C14 (at 13.6144 6.731 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value C (at 0 1.9 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.45 -0.75) (end 1.45 -0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 -0.75) (end -1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.45 -0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.35 -0.6) (end 0.35 -0.6) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.35 0.6) (end -0.35 0.6) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 90) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 13 "Net-(C14-Pad1)")) + (pad 2 smd rect (at 0.75 0 90) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 14 "Net-(C14-Pad2)")) + (model Capacitors_SMD.3dshapes/C_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_ThroughHole:C_Radial_D6.3_L11.2_P2.5 (layer F.Cu) (tedit 567B5BBA) (tstamp 5673A90C) + (at 116.078 144.018 270) + (descr "Radial Electrolytic Capacitor, Diameter 6.3mm x Length 11.2mm, Pitch 2.5mm") + (tags "Electrolytic Capacitor") + (path /566F5A75) + (fp_text reference C15 (at -0.254 -1.397 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value CP1 (at 1.25 4.4 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.325 -3.149) (end 1.325 3.149) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.465 -3.143) (end 1.465 3.143) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.605 -3.13) (end 1.605 -0.446) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.605 0.446) (end 1.605 3.13) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.745 -3.111) (end 1.745 -0.656) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.745 0.656) (end 1.745 3.111) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.885 -3.085) (end 1.885 -0.789) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.885 0.789) (end 1.885 3.085) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.025 -3.053) (end 2.025 -0.88) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.025 0.88) (end 2.025 3.053) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.165 -3.014) (end 2.165 -0.942) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.165 0.942) (end 2.165 3.014) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.305 -2.968) (end 2.305 -0.981) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.305 0.981) (end 2.305 2.968) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.445 -2.915) (end 2.445 -0.998) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.445 0.998) (end 2.445 2.915) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.585 -2.853) (end 2.585 -0.996) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.585 0.996) (end 2.585 2.853) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.725 -2.783) (end 2.725 -0.974) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.725 0.974) (end 2.725 2.783) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.865 -2.704) (end 2.865 -0.931) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.865 0.931) (end 2.865 2.704) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.005 -2.616) (end 3.005 -0.863) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.005 0.863) (end 3.005 2.616) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.145 -2.516) (end 3.145 -0.764) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.145 0.764) (end 3.145 2.516) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.285 -2.404) (end 3.285 -0.619) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.285 0.619) (end 3.285 2.404) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.425 -2.279) (end 3.425 -0.38) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.425 0.38) (end 3.425 2.279) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.565 -2.136) (end 3.565 2.136) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.705 -1.974) (end 3.705 1.974) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.845 -1.786) (end 3.845 1.786) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.985 -1.563) (end 3.985 1.563) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.125 -1.287) (end 4.125 1.287) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.265 -0.912) (end 4.265 0.912) (layer F.SilkS) (width 0.15)) + (fp_circle (center 2.5 0) (end 2.5 -1) (layer F.SilkS) (width 0.15)) + (fp_circle (center 1.25 0) (end 1.25 -3.1875) (layer F.SilkS) (width 0.15)) + (fp_circle (center 1.25 0) (end 1.25 -3.4) (layer F.CrtYd) (width 0.05)) + (pad 2 thru_hole circle (at 2.5 0 270) (size 1.3 1.3) (drill 0.8) (layers *.Cu *.Mask F.SilkS) + (net 6 /AGND)) + (pad 1 thru_hole rect (at 0 0 270) (size 1.3 1.3) (drill 0.8) (layers *.Cu *.Mask F.SilkS) + (net 7 /AVCC)) + (model Capacitors_ThroughHole.3dshapes/C_Radial_D6.3_L11.2_P2.5.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Diodes_ThroughHole:Diode_DO-41_SOD81_Horizontal_RM10 (layer F.Cu) (tedit 567B5BAF) (tstamp 5673A912) + (at 82.55 135.128) + (descr "Diode, DO-41, SOD81, Horizontal, RM 10mm,") + (tags "Diode, DO-41, SOD81, Horizontal, RM 10mm, 1N4007, SB140,") + (path /5606FDB4) + (fp_text reference D1 (at 4.445 2.921) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value D_Schottky (at 4.37134 -3.55854) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 7.62 -0.00254) (end 8.636 -0.00254) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.794 -0.00254) (end 1.524 -0.00254) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.048 -1.27254) (end 3.048 1.26746) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.302 -1.27254) (end 3.302 1.26746) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.556 -1.27254) (end 3.556 1.26746) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.794 -1.27254) (end 2.794 1.26746) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.81 -1.27254) (end 2.54 1.26746) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.54 -1.27254) (end 3.81 1.26746) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.81 -1.27254) (end 3.81 1.26746) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.175 -1.27254) (end 3.175 1.26746) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.54 1.26746) (end 2.54 -1.27254) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.54 -1.27254) (end 7.62 -1.27254) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.62 -1.27254) (end 7.62 1.26746) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.62 1.26746) (end 2.54 1.26746) (layer F.SilkS) (width 0.15)) + (pad 2 thru_hole circle (at 10.16 -0.00254 180) (size 1.99898 1.99898) (drill 1.27) (layers *.Cu *.Mask F.SilkS) + (net 15 "Net-(D1-Pad2)")) + (pad 1 thru_hole rect (at 0 -0.00254 180) (size 1.99898 1.99898) (drill 1.00076) (layers *.Cu *.Mask F.SilkS) + (net 12 "Net-(C11-Pad1)")) + ) + + (module Capacitors_SMD:C_1206 (layer F.Cu) (tedit 5415D7BD) (tstamp 5673A918) + (at 105.791 142.113 180) + (descr "Capacitor SMD 1206, reflow soldering, AVX (see smccp.pdf)") + (tags "capacitor 1206") + (path /55D739F3) + (attr smd) + (fp_text reference F1 (at 0 -2.3 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value F_Small (at 0 2.3 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -2.3 -1.15) (end 2.3 -1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.3 1.15) (end 2.3 1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.3 -1.15) (end -2.3 1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.3 -1.15) (end 2.3 1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1 -1.025) (end -1 -1.025) (layer F.SilkS) (width 0.15)) + (fp_line (start -1 1.025) (end 1 1.025) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -1.5 0 180) (size 1 1.6) (layers F.Cu F.Paste F.Mask) + (net 6 /AGND)) + (pad 2 smd rect (at 1.5 0 180) (size 1 1.6) (layers F.Cu F.Paste F.Mask) + (net 8 /VGND)) + (model Capacitors_SMD.3dshapes/C_1206.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Housings_QFP:LQFP-44_10x10mm_Pitch0.8mm (layer F.Cu) (tedit 567B5D1F) (tstamp 5673A948) + (at 105.41 154.051 90) + (descr "LQFP44 (see Appnote_PCB_Guidelines_TRINAMIC_packages.pdf)") + (tags "QFP 0.8") + (path /55CA8F25) + (attr smd) + (fp_text reference IC1 (at -0.0762 0.3048 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value ATXMEGA16A4U-A (at 0 7.65 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -6.9 -6.9) (end -6.9 6.9) (layer F.CrtYd) (width 0.05)) + (fp_line (start 6.9 -6.9) (end 6.9 6.9) (layer F.CrtYd) (width 0.05)) + (fp_line (start -6.9 -6.9) (end 6.9 -6.9) (layer F.CrtYd) (width 0.05)) + (fp_line (start -6.9 6.9) (end 6.9 6.9) (layer F.CrtYd) (width 0.05)) + (fp_line (start -5.175 -5.175) (end -5.175 -4.505) (layer F.SilkS) (width 0.15)) + (fp_line (start 5.175 -5.175) (end 5.175 -4.505) (layer F.SilkS) (width 0.15)) + (fp_line (start 5.175 5.175) (end 5.175 4.505) (layer F.SilkS) (width 0.15)) + (fp_line (start -5.175 5.175) (end -5.175 4.505) (layer F.SilkS) (width 0.15)) + (fp_line (start -5.175 -5.175) (end -4.505 -5.175) (layer F.SilkS) (width 0.15)) + (fp_line (start -5.175 5.175) (end -4.505 5.175) (layer F.SilkS) (width 0.15)) + (fp_line (start 5.175 5.175) (end 4.505 5.175) (layer F.SilkS) (width 0.15)) + (fp_line (start 5.175 -5.175) (end 4.505 -5.175) (layer F.SilkS) (width 0.15)) + (fp_line (start -5.175 -4.505) (end -6.65 -4.505) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -5.85 -4 90) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 16 /PSU_FEEDBACK)) + (pad 2 smd rect (at -5.85 -3.2 90) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 17 /CH2)) + (pad 3 smd rect (at -5.85 -2.4 90) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 18 "Net-(IC1-Pad3)")) + (pad 4 smd rect (at -5.85 -1.6 90) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 19 "Net-(IC1-Pad4)")) + (pad 5 smd rect (at -5.85 -0.8 90) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 20 "Net-(IC1-Pad5)")) + (pad 6 smd rect (at -5.85 0 90) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 21 /DAC_OUT)) + (pad 7 smd rect (at -5.85 0.8 90) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 22 /DAC_OUT2)) + (pad 8 smd rect (at -5.85 1.6 90) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 23 "Net-(IC1-Pad8)")) + (pad 9 smd rect (at -5.85 2.4 90) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 24 "Net-(IC1-Pad9)")) + (pad 10 smd rect (at -5.85 3.2 90) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 25 "Net-(IC1-Pad10)")) + (pad 11 smd rect (at -5.85 4 90) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 26 /XCK)) + (pad 12 smd rect (at -4 5.85 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 27 /DIG_CH2)) + (pad 13 smd rect (at -3.2 5.85 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 28 "Net-(IC1-Pad13)")) + (pad 14 smd rect (at -2.4 5.85 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 6 /AGND)) + (pad 15 smd rect (at -1.6 5.85 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 26 /XCK)) + (pad 16 smd rect (at -0.8 5.85 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 29 "Net-(IC1-Pad16)")) + (pad 17 smd rect (at 0 5.85 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 30 /DIG_CH1)) + (pad 18 smd rect (at 0.8 5.85 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 6 /AGND)) + (pad 19 smd rect (at 1.6 5.85 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 7 /AVCC)) + (pad 20 smd rect (at 2.4 5.85 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 31 "Net-(IC1-Pad20)")) + (pad 21 smd rect (at 3.2 5.85 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 32 "Net-(IC1-Pad21)")) + (pad 22 smd rect (at 4 5.85 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 33 "Net-(IC1-Pad22)")) + (pad 23 smd rect (at 5.85 4 90) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 34 "Net-(IC1-Pad23)")) + (pad 24 smd rect (at 5.85 3.2 90) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 35 /PSU_PWM)) + (pad 25 smd rect (at 5.85 2.4 90) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 36 "Net-(IC1-Pad25)")) + (pad 26 smd rect (at 5.85 1.6 90) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 37 /D-)) + (pad 27 smd rect (at 5.85 0.8 90) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 38 /D+)) + (pad 28 smd rect (at 5.85 0 90) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 39 "Net-(IC1-Pad28)")) + (pad 29 smd rect (at 5.85 -0.8 90) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 40 "Net-(IC1-Pad29)")) + (pad 30 smd rect (at 5.85 -1.6 90) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 6 /AGND)) + (pad 31 smd rect (at 5.85 -2.4 90) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 7 /AVCC)) + (pad 32 smd rect (at 5.85 -3.2 90) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 41 "Net-(IC1-Pad32)")) + (pad 33 smd rect (at 5.85 -4 90) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 42 "Net-(IC1-Pad33)")) + (pad 34 smd rect (at 4 -5.85 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 43 "Net-(IC1-Pad34)")) + (pad 35 smd rect (at 3.2 -5.85 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 44 "Net-(IC1-Pad35)")) + (pad 36 smd rect (at 2.4 -5.85 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 45 "Net-(IC1-Pad36)")) + (pad 37 smd rect (at 1.6 -5.85 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 46 "Net-(IC1-Pad37)")) + (pad 38 smd rect (at 0.8 -5.85 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 6 /AGND)) + (pad 39 smd rect (at 0 -5.85 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 7 /AVCC)) + (pad 40 smd rect (at -0.8 -5.85 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 17 /CH2)) + (pad 41 smd rect (at -1.6 -5.85 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 47 "Net-(IC1-Pad41)")) + (pad 42 smd rect (at -2.4 -5.85 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 48 /CH1)) + (pad 43 smd rect (at -3.2 -5.85 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 49 "Net-(IC1-Pad43)")) + (pad 44 smd rect (at -4 -5.85 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 50 /AVCC_ON_2)) + (model Housings_QFP.3dshapes/LQFP-44_10x10mm_Pitch0.8mm.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Diodes_ThroughHole:Diode_DO-41_SOD81_Horizontal_RM10 (layer F.Cu) (tedit 567B5BAC) (tstamp 5673A94E) + (at 92.456 137.922 180) + (descr "Diode, DO-41, SOD81, Horizontal, RM 10mm,") + (tags "Diode, DO-41, SOD81, Horizontal, RM 10mm, 1N4007, SB140,") + (path /5606EE9E) + (fp_text reference L1 (at 4.572 2.667 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value INDUCTOR (at 4.37134 -3.55854 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 7.62 -0.00254) (end 8.636 -0.00254) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.794 -0.00254) (end 1.524 -0.00254) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.048 -1.27254) (end 3.048 1.26746) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.302 -1.27254) (end 3.302 1.26746) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.556 -1.27254) (end 3.556 1.26746) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.794 -1.27254) (end 2.794 1.26746) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.81 -1.27254) (end 2.54 1.26746) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.54 -1.27254) (end 3.81 1.26746) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.81 -1.27254) (end 3.81 1.26746) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.175 -1.27254) (end 3.175 1.26746) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.54 1.26746) (end 2.54 -1.27254) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.54 -1.27254) (end 7.62 -1.27254) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.62 -1.27254) (end 7.62 1.26746) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.62 1.26746) (end 2.54 1.26746) (layer F.SilkS) (width 0.15)) + (pad 2 thru_hole circle (at 10.16 -0.00254) (size 1.99898 1.99898) (drill 1.27) (layers *.Cu *.Mask F.SilkS) + (net 9 /VCC_PSU)) + (pad 1 thru_hole rect (at 0 -0.00254) (size 1.99898 1.99898) (drill 1.00076) (layers *.Cu *.Mask F.SilkS) + (net 15 "Net-(D1-Pad2)")) + ) + + (module Pin_Headers:Pin_Header_Straight_1x04 (layer F.Cu) (tedit 567B5BDC) (tstamp 5673A956) + (at 94.488 159.512 180) + (descr "Through hole pin header") + (tags "pin header") + (path /55CAB35C) + (fp_text reference P1 (at -2.54 -0.254 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value SCOPE_IN (at 0 -3.1 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.75 -1.75) (end -1.75 9.4) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.75 -1.75) (end 1.75 9.4) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 -1.75) (end 1.75 -1.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 9.4) (end 1.75 9.4) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.27 1.27) (end -1.27 8.89) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.27 1.27) (end 1.27 8.89) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.55 -1.55) (end 1.55 0) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.27 8.89) (end 1.27 8.89) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.27 1.27) (end -1.27 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.55 0) (end -1.55 -1.55) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.55 -1.55) (end 1.55 -1.55) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole rect (at 0 0 180) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 3 "Net-(C2-Pad1)")) + (pad 2 thru_hole oval (at 0 2.54 180) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 4 "Net-(C2-Pad2)")) + (pad 3 thru_hole oval (at 0 5.08 180) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 2 "Net-(C1-Pad2)")) + (pad 4 thru_hole oval (at 0 7.62 180) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 1 "Net-(C1-Pad1)")) + (model Pin_Headers.3dshapes/Pin_Header_Straight_1x04.wrl + (at (xyz 0 -0.15 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 90)) + ) + ) + + (module Connect:USB_Micro-B (layer F.Cu) (tedit 567B5CC4) (tstamp 5673A963) + (at 114.554 137.668 180) + (descr "Micro USB Type B Receptacle") + (tags "USB USB_B USB_micro USB_OTG") + (path /55CA90D2) + (attr smd) + (fp_text reference P2 (at 0 0.762 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value USB_OTG (at 0 4.8 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -4.6 -2.8) (end 4.6 -2.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 4.6 -2.8) (end 4.6 4.05) (layer F.CrtYd) (width 0.05)) + (fp_line (start 4.6 4.05) (end -4.6 4.05) (layer F.CrtYd) (width 0.05)) + (fp_line (start -4.6 4.05) (end -4.6 -2.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -4.3509 3.81746) (end 4.3491 3.81746) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.3509 -2.58754) (end 4.3491 -2.58754) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.3491 -2.58754) (end 4.3491 3.81746) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.3491 2.58746) (end -4.3509 2.58746) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.3509 3.81746) (end -4.3509 -2.58754) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -1.3009 -1.56254 270) (size 1.35 0.4) (layers F.Cu F.Paste F.Mask) + (net 5 +5V)) + (pad 2 smd rect (at -0.6509 -1.56254 270) (size 1.35 0.4) (layers F.Cu F.Paste F.Mask) + (net 37 /D-)) + (pad 3 smd rect (at -0.0009 -1.56254 270) (size 1.35 0.4) (layers F.Cu F.Paste F.Mask) + (net 38 /D+)) + (pad 4 smd rect (at 0.6491 -1.56254 270) (size 1.35 0.4) (layers F.Cu F.Paste F.Mask) + (net 51 "Net-(P2-Pad4)")) + (pad 5 smd rect (at 1.2991 -1.56254 270) (size 1.35 0.4) (layers F.Cu F.Paste F.Mask) + (net 6 /AGND)) + (pad 6 thru_hole oval (at -2.5009 -1.56254 270) (size 0.95 1.25) (drill oval 0.55 0.85) (layers *.Cu *.Mask F.SilkS) + (net 6 /AGND)) + (pad 6 thru_hole oval (at 2.4991 -1.56254 270) (size 0.95 1.25) (drill oval 0.55 0.85) (layers *.Cu *.Mask F.SilkS) + (net 6 /AGND)) + (pad 6 thru_hole oval (at -3.5009 1.13746 270) (size 1.55 1) (drill oval 1.15 0.5) (layers *.Cu *.Mask F.SilkS) + (net 6 /AGND)) + (pad 6 thru_hole oval (at 3.4991 1.13746 270) (size 1.55 1) (drill oval 1.15 0.5) (layers *.Cu *.Mask F.SilkS) + (net 6 /AGND)) + ) + + (module Pin_Headers:Pin_Header_Straight_1x04 locked (layer F.Cu) (tedit 567B5DDC) (tstamp 5673A96B) + (at 76.2 149.86 180) + (descr "Through hole pin header") + (tags "pin header") + (path /55CBF4D5) + (fp_text reference P3 (at -1.8796 0.4826 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value DIG_OUT (at 2.54 3.81 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.75 -1.75) (end -1.75 9.4) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.75 -1.75) (end 1.75 9.4) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 -1.75) (end 1.75 -1.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 9.4) (end 1.75 9.4) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.27 1.27) (end -1.27 8.89) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.27 1.27) (end 1.27 8.89) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.55 -1.55) (end 1.55 0) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.27 8.89) (end 1.27 8.89) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.27 1.27) (end -1.27 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.55 0) (end -1.55 -1.55) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.55 -1.55) (end 1.55 -1.55) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole rect (at 0 0 180) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 52 "Net-(P3-Pad1)")) + (pad 2 thru_hole oval (at 0 2.54 180) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 53 "Net-(P3-Pad2)")) + (pad 3 thru_hole oval (at 0 5.08 180) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 54 "Net-(P3-Pad3)")) + (pad 4 thru_hole oval (at 0 7.62 180) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 55 "Net-(P3-Pad4)")) + (model Pin_Headers.3dshapes/Pin_Header_Straight_1x04.wrl + (at (xyz 0 -0.15 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 90)) + ) + ) + + (module Pin_Headers:Pin_Header_Straight_2x02 (layer F.Cu) (tedit 567B5CD3) (tstamp 5673A973) + (at 105.156 135.382) + (descr "Through hole pin header") + (tags "pin header") + (path /56069A87) + (fp_text reference P4 (at -2.159 -0.127 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value PDI (at 0 -3.1) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.75 -1.75) (end -1.75 4.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start 4.3 -1.75) (end 4.3 4.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 -1.75) (end 4.3 -1.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 4.3) (end 4.3 4.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.55 0) (end -1.55 -1.55) (layer F.SilkS) (width 0.15)) + (fp_line (start 0 -1.55) (end -1.55 -1.55) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.27 1.27) (end 1.27 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.27 1.27) (end 1.27 -1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.27 -1.27) (end 3.81 -1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.81 -1.27) (end 3.81 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.81 3.81) (end -1.27 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.27 3.81) (end -1.27 1.27) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole rect (at 0 0) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 7 /AVCC)) + (pad 2 thru_hole oval (at 2.54 0) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 43 "Net-(IC1-Pad34)")) + (pad 3 thru_hole oval (at 0 2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 6 /AGND)) + (pad 4 thru_hole oval (at 2.54 2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 44 "Net-(IC1-Pad35)")) + (model Pin_Headers.3dshapes/Pin_Header_Straight_2x02.wrl + (at (xyz 0.05 -0.05 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 90)) + ) + ) + + (module Pin_Headers:Pin_Header_Straight_1x03 (layer F.Cu) (tedit 567B5CD0) (tstamp 5673A97A) + (at 100.33 140.462 180) + (descr "Through hole pin header") + (tags "pin header") + (path /56065DA8) + (fp_text reference P5 (at -1.905 1.143 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value CONN_01X03 (at 0 -3.1 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.75 -1.75) (end -1.75 6.85) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.75 -1.75) (end 1.75 6.85) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 -1.75) (end 1.75 -1.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 6.85) (end 1.75 6.85) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.27 1.27) (end -1.27 6.35) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.27 6.35) (end 1.27 6.35) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.27 6.35) (end 1.27 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.55 -1.55) (end 1.55 0) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.27 1.27) (end -1.27 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.55 0) (end -1.55 -1.55) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.55 -1.55) (end 1.55 -1.55) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole rect (at 0 0 180) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 5 +5V)) + (pad 2 thru_hole oval (at 0 2.54 180) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 9 /VCC_PSU)) + (pad 3 thru_hole oval (at 0 5.08 180) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 7 /AVCC)) + (model Pin_Headers.3dshapes/Pin_Header_Straight_1x03.wrl + (at (xyz 0 -0.1 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 90)) + ) + ) + + (module Pin_Headers:Pin_Header_Straight_1x04 locked (layer F.Cu) (tedit 567B5E7D) (tstamp 5673A982) + (at 76.2 152.4) + (descr "Through hole pin header") + (tags "pin header") + (path /566DF832) + (fp_text reference P6 (at 9.0678 -6.1722 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value DAC_OUT (at 2.54 5.08 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.75 -1.75) (end -1.75 9.4) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.75 -1.75) (end 1.75 9.4) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 -1.75) (end 1.75 -1.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 9.4) (end 1.75 9.4) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.27 1.27) (end -1.27 8.89) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.27 1.27) (end 1.27 8.89) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.55 -1.55) (end 1.55 0) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.27 8.89) (end 1.27 8.89) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.27 1.27) (end -1.27 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.55 0) (end -1.55 -1.55) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.55 -1.55) (end 1.55 -1.55) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole rect (at 0 0) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 11 "Net-(C7-Pad2)")) + (pad 2 thru_hole oval (at 0 2.54) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 10 "Net-(C7-Pad1)")) + (pad 3 thru_hole oval (at 0 5.08) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 14 "Net-(C14-Pad2)")) + (pad 4 thru_hole oval (at 0 7.62) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 13 "Net-(C14-Pad1)")) + (model Pin_Headers.3dshapes/Pin_Header_Straight_1x04.wrl + (at (xyz 0 -0.15 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 90)) + ) + ) + + (module Pin_Headers:Pin_Header_Straight_2x02 locked (layer F.Cu) (tedit 567B5E3B) (tstamp 5673A98A) + (at 86.36 143.51 180) + (descr "Through hole pin header") + (tags "pin header") + (path /55CC540F) + (fp_text reference P7 (at -2.2606 3.1242 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value HVO (at -3.429 1.016 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.75 -1.75) (end -1.75 4.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start 4.3 -1.75) (end 4.3 4.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 -1.75) (end 4.3 -1.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 4.3) (end 4.3 4.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.55 0) (end -1.55 -1.55) (layer F.SilkS) (width 0.15)) + (fp_line (start 0 -1.55) (end -1.55 -1.55) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.27 1.27) (end 1.27 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.27 1.27) (end 1.27 -1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.27 -1.27) (end 3.81 -1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.81 -1.27) (end 3.81 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.81 3.81) (end -1.27 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.27 3.81) (end -1.27 1.27) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole rect (at 0 0 180) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 12 "Net-(C11-Pad1)")) + (pad 2 thru_hole oval (at 2.54 0 180) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 8 /VGND)) + (pad 3 thru_hole oval (at 0 2.54 180) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 8 /VGND)) + (pad 4 thru_hole oval (at 2.54 2.54 180) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 8 /VGND)) + (model Pin_Headers.3dshapes/Pin_Header_Straight_2x02.wrl + (at (xyz 0.05 -0.05 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 90)) + ) + ) + + (module Pin_Headers:Pin_Header_Straight_1x02 (layer F.Cu) (tedit 567B5D10) (tstamp 5673A990) + (at 116.84 157.48) + (descr "Through hole pin header") + (tags "pin header") + (path /55D6DB77) + (fp_text reference P8 (at 0.254 -2.3368) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value DIG_IN (at 0 -3.1) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.27 1.27) (end 1.27 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.55 -1.55) (end 1.55 0) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.75 -1.75) (end -1.75 4.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.75 -1.75) (end 1.75 4.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 -1.75) (end 1.75 -1.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 4.3) (end 1.75 4.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.27 1.27) (end -1.27 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.55 0) (end -1.55 -1.55) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.55 -1.55) (end 1.55 -1.55) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.27 1.27) (end -1.27 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.27 3.81) (end 1.27 3.81) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole rect (at 0 0) (size 2.032 2.032) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 56 "Net-(P8-Pad1)")) + (pad 2 thru_hole oval (at 0 2.54) (size 2.032 2.032) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 57 "Net-(P8-Pad2)")) + (model Pin_Headers.3dshapes/Pin_Header_Straight_1x02.wrl + (at (xyz 0 -0.05 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 90)) + ) + ) + + (module SMD:SOT-23-3 (layer F.Cu) (tedit 5508E933) (tstamp 5673A997) + (at 95.885 137.922 270) + (path /5606F6D4) + (fp_text reference Q1 (at 2.5 0 360) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value Q_NMOS_GSD (at -2.2 0 360) (layer F.Fab) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 1 -0.4) (end 1.1 -0.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -0.8) (end -1.5 0.8) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 0.8) (end 1.5 0.8) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 0.8) (end 1.5 -0.8) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 -0.8) (end -1.5 -0.8) (layer F.SilkS) (width 0.15)) + (pad 3 smd rect (at 0 1.4 270) (size 0.6 0.9) (layers F.Cu F.Paste F.Mask) + (net 15 "Net-(D1-Pad2)")) + (pad 2 smd rect (at -0.95 -1.4 270) (size 0.6 0.9) (layers F.Cu F.Paste F.Mask) + (net 8 /VGND)) + (pad 1 smd rect (at 0.95 -1.4 270) (size 0.6 0.9) (layers F.Cu F.Paste F.Mask) + (net 35 /PSU_PWM)) + (model 3D/SMD/SOT-23-3.wrl + (at (xyz 0 0 0)) + (scale (xyz 0.3937 0.3937 0.3937)) + (rotate (xyz 0 0 90)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 567B5F80) (tstamp 5673A99D) + (at 89.916 155.067) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /55CAAB95) + (attr smd) + (fp_text reference R1 (at -4.3942 -8.9408 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 58 "Net-(R1-Pad1)")) + (pad 2 smd rect (at 0.75 0) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 1 "Net-(C1-Pad1)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 567B5F66) (tstamp 5673A9A3) + (at 89.916 160.528) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /55CAAD4C) + (attr smd) + (fp_text reference R2 (at -4.19608 -14.56944 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 59 "Net-(R2-Pad1)")) + (pad 2 smd rect (at 0.75 0) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 3 "Net-(C2-Pad1)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 567B5F86) (tstamp 5673A9A9) + (at 89.916 153.416) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /55CAABF4) + (attr smd) + (fp_text reference R3 (at -4.5085 -6.9215 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.8796) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 58 "Net-(R1-Pad1)")) + (pad 2 smd rect (at 0.75 0) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 50 /AVCC_ON_2)) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 567B5F7C) (tstamp 5673A9AF) + (at 89.916 158.877 180) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /55CAAD11) + (attr smd) + (fp_text reference R4 (at 4.0132 12.573 360) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 180) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 50 /AVCC_ON_2)) + (pad 2 smd rect (at 0.75 0 180) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 59 "Net-(R2-Pad1)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 567B5F8A) (tstamp 5673A9B5) + (at 89.789 151.765 180) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /55CAAC5F) + (attr smd) + (fp_text reference R5 (at 4.26466 5.24764 360) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 180) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 7 /AVCC)) + (pad 2 smd rect (at 0.75 0 180) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 50 /AVCC_ON_2)) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 567B5F8C) (tstamp 5673A9BB) + (at 89.789 150.114 180) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /55CAACD2) + (attr smd) + (fp_text reference R6 (at 4.37642 3.8481 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 180) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 6 /AGND)) + (pad 2 smd rect (at 0.75 0 180) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 50 /AVCC_ON_2)) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 567B5E09) (tstamp 5673A9C1) + (at 79.756 146.05 180) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /55CBCDA5) + (attr smd) + (fp_text reference R7 (at -5.5372 -0.3556 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 180) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 60 "Net-(R11-Pad2)")) + (pad 2 smd rect (at 0.75 0 180) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 55 "Net-(P3-Pad4)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 567B5E1F) (tstamp 5673A9C7) + (at 79.756 147.701 180) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /55CBE401) + (attr smd) + (fp_text reference R8 (at -5.4356 1.4732 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 180) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 61 "Net-(R12-Pad2)")) + (pad 2 smd rect (at 0.75 0 180) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 54 "Net-(P3-Pad3)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 567B5E1A) (tstamp 5673A9CD) + (at 79.756 149.352 180) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /55CBE16B) + (attr smd) + (fp_text reference R9 (at -5.3594 3.302 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 180) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 62 "Net-(R13-Pad2)")) + (pad 2 smd rect (at 0.75 0 180) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 53 "Net-(P3-Pad2)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 567B5E17) (tstamp 5673A9D3) + (at 82.296 151.003 180) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /55CBE2C7) + (attr smd) + (fp_text reference R10 (at -2.794 4.8514 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 180) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 63 "Net-(R10-Pad1)")) + (pad 2 smd rect (at 0.75 0 180) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 52 "Net-(P3-Pad1)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 567B5DB5) (tstamp 5673A9D9) + (at 82.423 146.05 180) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /55CBCD2A) + (attr smd) + (fp_text reference R11 (at -2.8702 -0.0762 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 180) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 39 "Net-(IC1-Pad28)")) + (pad 2 smd rect (at 0.75 0 180) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 60 "Net-(R11-Pad2)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 567B5E0C) (tstamp 5673A9DF) + (at 82.423 147.701 180) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /55CBE362) + (attr smd) + (fp_text reference R12 (at -2.9464 1.6256 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 180) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 40 "Net-(IC1-Pad29)")) + (pad 2 smd rect (at 0.75 0 180) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 61 "Net-(R12-Pad2)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 567B5E0E) (tstamp 5673A9E5) + (at 82.423 149.352 180) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /55CBE0F4) + (attr smd) + (fp_text reference R13 (at -3.0988 3.1242 360) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 180) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 41 "Net-(IC1-Pad32)")) + (pad 2 smd rect (at 0.75 0 180) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 62 "Net-(R13-Pad2)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 567B5E14) (tstamp 5673A9EB) + (at 84.455 150.241 270) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /55CBE21C) + (attr smd) + (fp_text reference R14 (at -4.064 -0.889 360) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 270) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 42 "Net-(IC1-Pad33)")) + (pad 2 smd rect (at 0.75 0 270) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 63 "Net-(R10-Pad1)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 5415CC62) (tstamp 5673A9F1) + (at 80.391 154.305 270) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /55CB4680) + (attr smd) + (fp_text reference R15 (at 0 -1.9 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 270) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 64 "Net-(R15-Pad1)")) + (pad 2 smd rect (at 0.75 0 270) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 65 "Net-(R15-Pad2)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 567B5E1C) (tstamp 5673A9F7) + (at 79.248 152.146) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /55CB9020) + (attr smd) + (fp_text reference R16 (at 0.2286 -1.3208) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 11 "Net-(C7-Pad2)")) + (pad 2 smd rect (at 0.75 0) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 64 "Net-(R15-Pad1)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 567B5E90) (tstamp 5673A9FD) + (at 80.391 159.639 270) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /566DE721) + (attr smd) + (fp_text reference R17 (at -13.2842 -4.8514 360) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 270) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 66 "Net-(R17-Pad1)")) + (pad 2 smd rect (at 0.75 0 270) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 67 "Net-(R17-Pad2)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 567B5E95) (tstamp 5673AA03) + (at 79.248 157.48) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /566DE7E8) + (attr smd) + (fp_text reference R18 (at 6.096 -11.28776) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 14 "Net-(C14-Pad2)")) + (pad 2 smd rect (at 0.75 0) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 66 "Net-(R17-Pad1)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 567B5CE2) (tstamp 5673AA09) + (at 98.171 143.891) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /566E5C29) + (attr smd) + (fp_text reference R19 (at 0.1778 1.6002) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 12 "Net-(C11-Pad1)")) + (pad 2 smd rect (at 0.75 0) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 16 /PSU_FEEDBACK)) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 567B5CE5) (tstamp 5673AA0F) + (at 101.6 143.891) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /566E5CBE) + (attr smd) + (fp_text reference R20 (at 0.4064 1.651) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 16 /PSU_FEEDBACK)) + (pad 2 smd rect (at 0.75 0) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 6 /AGND)) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module SMD:SOT-23-3 (layer F.Cu) (tedit 567B5D08) (tstamp 5673AA16) + (at 109.982 144.399 180) + (path /55CA99FA) + (fp_text reference U1 (at -0.1016 -0.0254 360) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 78L05 (at -2.2 0 270) (layer F.Fab) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 1 -0.4) (end 1.1 -0.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -0.8) (end -1.5 0.8) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 0.8) (end 1.5 0.8) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 0.8) (end 1.5 -0.8) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 -0.8) (end -1.5 -0.8) (layer F.SilkS) (width 0.15)) + (pad 3 smd rect (at 0 1.4 180) (size 0.6 0.9) (layers F.Cu F.Paste F.Mask) + (net 5 +5V)) + (pad 2 smd rect (at -0.95 -1.4 180) (size 0.6 0.9) (layers F.Cu F.Paste F.Mask) + (net 7 /AVCC)) + (pad 1 smd rect (at 0.95 -1.4 180) (size 0.6 0.9) (layers F.Cu F.Paste F.Mask) + (net 6 /AGND)) + (model 3D/SMD/SOT-23-3.wrl + (at (xyz 0 0 0)) + (scale (xyz 0.3937 0.3937 0.3937)) + (rotate (xyz 0 0 90)) + ) + ) + + (module Housings_SOIC:SOIC-14_3.9x8.7mm_Pitch1.27mm (layer F.Cu) (tedit 567B5F95) (tstamp 5673AA28) + (at 84.963 156.972 180) + (descr "14-Lead Plastic Small Outline (SL) - Narrow, 3.90 mm Body [SOIC] (see Microchip Packaging Specification 00000049BS.pdf)") + (tags "SOIC 1.27") + (path /55CA87E2) + (attr smd) + (fp_text reference U2 (at 0.19304 -1.22428 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value LM324 (at 0 5.375 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -3.7 -4.65) (end -3.7 4.65) (layer F.CrtYd) (width 0.05)) + (fp_line (start 3.7 -4.65) (end 3.7 4.65) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.7 -4.65) (end 3.7 -4.65) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.7 4.65) (end 3.7 4.65) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.075 -4.45) (end -2.075 -4.335) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.075 -4.45) (end 2.075 -4.335) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.075 4.45) (end 2.075 4.335) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.075 4.45) (end -2.075 4.335) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.075 -4.45) (end 2.075 -4.45) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.075 4.45) (end 2.075 4.45) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.075 -4.335) (end -3.45 -4.335) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -2.7 -3.81 180) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 17 /CH2)) + (pad 2 smd rect (at -2.7 -2.54 180) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 17 /CH2)) + (pad 3 smd rect (at -2.7 -1.27 180) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 59 "Net-(R2-Pad1)")) + (pad 4 smd rect (at -2.7 0 180) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 5 +5V)) + (pad 5 smd rect (at -2.7 1.27 180) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 58 "Net-(R1-Pad1)")) + (pad 6 smd rect (at -2.7 2.54 180) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 48 /CH1)) + (pad 7 smd rect (at -2.7 3.81 180) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 48 /CH1)) + (pad 8 smd rect (at 2.7 3.81 180) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 65 "Net-(R15-Pad2)")) + (pad 9 smd rect (at 2.7 2.54 180) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 65 "Net-(R15-Pad2)")) + (pad 10 smd rect (at 2.7 1.27 180) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 21 /DAC_OUT)) + (pad 11 smd rect (at 2.7 0 180) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 8 /VGND)) + (pad 12 smd rect (at 2.7 -1.27 180) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 22 /DAC_OUT2)) + (pad 13 smd rect (at 2.7 -2.54 180) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 67 "Net-(R17-Pad2)")) + (pad 14 smd rect (at 2.7 -3.81 180) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 67 "Net-(R17-Pad2)")) + (model Housings_SOIC.3dshapes/SOIC-14_3.9x8.7mm_Pitch1.27mm.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module TO_SOT_Packages_SMD:SOT-363 (layer F.Cu) (tedit 567B5D15) (tstamp 5673AA32) + (at 113.665 159.131 90) + (descr SOT353) + (path /55D6ACFD) + (attr smd) + (fp_text reference U3 (at -0.0762 0.0254 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value DMN63D8LDW (at 0.09906 0 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 0.635 1.016) (end 0.635 -1.016) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.635 -1.016) (end -0.635 -1.016) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.635 -1.016) (end -0.635 1.016) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.635 1.016) (end 0.635 1.016) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -1.016 -0.635 90) (size 0.508 0.3048) (layers F.Cu F.Paste F.Mask) + (net 6 /AGND)) + (pad 3 smd rect (at -1.016 0.635 90) (size 0.508 0.3048) (layers F.Cu F.Paste F.Mask) + (net 27 /DIG_CH2)) + (pad 6 smd rect (at 1.016 -0.635 90) (size 0.508 0.3048) (layers F.Cu F.Paste F.Mask) + (net 30 /DIG_CH1)) + (pad 2 smd rect (at -1.016 0 90) (size 0.508 0.3048) (layers F.Cu F.Paste F.Mask) + (net 57 "Net-(P8-Pad2)")) + (pad 4 smd rect (at 1.016 0.635 90) (size 0.508 0.3048) (layers F.Cu F.Paste F.Mask) + (net 6 /AGND)) + (pad 5 smd rect (at 1.016 0 90) (size 0.508 0.3048) (layers F.Cu F.Paste F.Mask) + (net 56 "Net-(P8-Pad1)")) + (model TO_SOT_Packages_SMD.3dshapes/SOT-353.wrl + (at (xyz 0 0 0)) + (scale (xyz 0.07000000000000001 0.09 0.08)) + (rotate (xyz 0 0 90)) + ) + ) + + (gr_line (start 119.126 133.604) (end 119.126 162.56) (angle 90) (layer Edge.Cuts) (width 0.1)) + (gr_line (start 74.295 162.56) (end 74.295 161.417) (angle 90) (layer Edge.Cuts) (width 0.1)) + (gr_line (start 119.126 162.56) (end 74.295 162.56) (angle 90) (layer Edge.Cuts) (width 0.1)) + (gr_line (start 74.295 133.604) (end 74.295 162.306) (angle 90) (layer Edge.Cuts) (width 0.1)) + (gr_line (start 119.126 133.604) (end 74.295 133.604) (angle 90) (layer Edge.Cuts) (width 0.1)) + + (segment (start 90.666 155.067) (end 92.583 155.067) (width 0.254) (layer F.Cu) (net 1)) + (segment (start 93.091 153.543) (end 94.488 152.146) (width 0.254) (layer F.Cu) (net 1) (tstamp 5673BA83)) + (segment (start 93.091 154.559) (end 93.091 153.543) (width 0.254) (layer F.Cu) (net 1) (tstamp 5673BA82)) + (segment (start 92.583 155.067) (end 93.091 154.559) (width 0.254) (layer F.Cu) (net 1) (tstamp 5673BA81)) + (segment (start 94.488 152.146) (end 94.488 151.892) (width 0.254) (layer F.Cu) (net 1) (tstamp 5673BA84)) + (segment (start 90.666 155.067) (end 90.805 155.067) (width 0.254) (layer F.Cu) (net 1)) + (segment (start 94.488 151.892) (end 94.488 152.019) (width 0.254) (layer F.Cu) (net 1)) + (segment (start 90.436 156.591) (end 90.436 155.297) (width 0.254) (layer F.Cu) (net 1)) + (segment (start 90.436 155.297) (end 90.666 155.067) (width 0.254) (layer F.Cu) (net 1) (tstamp 5673B338)) + (segment (start 91.936 156.591) (end 92.329 156.591) (width 0.254) (layer F.Cu) (net 2)) + (segment (start 92.329 156.591) (end 94.488 154.432) (width 0.254) (layer F.Cu) (net 2) (tstamp 5673B33B)) + (segment (start 90.666 160.528) (end 91.936 160.528) (width 0.254) (layer F.Cu) (net 3)) + (segment (start 91.936 160.528) (end 91.948 160.516) (width 0.254) (layer F.Cu) (net 3) (tstamp 5673B335)) + (segment (start 91.948 160.516) (end 93.484 160.516) (width 0.254) (layer F.Cu) (net 3)) + (segment (start 93.484 160.516) (end 94.488 159.512) (width 0.254) (layer F.Cu) (net 3) (tstamp 5673B332)) + (segment (start 93.726 156.972) (end 94.488 156.972) (width 0.254) (layer F.Cu) (net 4) (tstamp 5673B347)) + (segment (start 92.964 157.734) (end 93.726 156.972) (width 0.254) (layer F.Cu) (net 4) (tstamp 5673B346)) + (segment (start 92.964 158.369) (end 92.964 157.734) (width 0.254) (layer F.Cu) (net 4) (tstamp 5673B345)) + (segment (start 92.317 159.016) (end 92.964 158.369) (width 0.254) (layer F.Cu) (net 4) (tstamp 5673B344)) + (segment (start 91.948 159.016) (end 92.317 159.016) (width 0.254) (layer F.Cu) (net 4)) + (segment (start 109.982 142.999) (end 110.759 142.999) (width 1.016) (layer F.Cu) (net 5)) + (segment (start 110.759 142.999) (end 111.137 142.621) (width 1.016) (layer F.Cu) (net 5) (tstamp 567A6AD4)) + (segment (start 111.137 142.621) (end 111.137 141.815002) (width 1.016) (layer F.Cu) (net 5)) + (segment (start 111.125 141.803002) (end 111.137 141.803002) (width 1.016) (layer F.Cu) (net 5) (tstamp 567A6AD0)) + (segment (start 111.137 141.815002) (end 111.125 141.803002) (width 1.016) (layer F.Cu) (net 5) (tstamp 567A6ACD)) + (segment (start 100.33 140.462) (end 103.505 140.462) (width 1.016) (layer B.Cu) (net 5)) + (segment (start 103.505 140.462) (end 104.648 141.605) (width 1.016) (layer B.Cu) (net 5) (tstamp 567A6ABC)) + (segment (start 104.648 141.605) (end 111.125 141.605) (width 1.016) (layer B.Cu) (net 5) (tstamp 567A6ABE)) + (segment (start 111.125 141.605) (end 114.808 141.605) (width 1.016) (layer B.Cu) (net 5) (tstamp 567A6ABF)) + (segment (start 114.808 141.605) (end 115.443 140.97) (width 1.016) (layer B.Cu) (net 5) (tstamp 567A6AC1)) + (segment (start 97.536 140.601) (end 100.191 140.601) (width 1.016) (layer F.Cu) (net 5)) + (segment (start 100.191 140.601) (end 100.33 140.462) (width 1.016) (layer F.Cu) (net 5) (tstamp 567A6AB9)) + (segment (start 97.536 140.601) (end 96.254 140.601) (width 1.016) (layer F.Cu) (net 5)) + (segment (start 86.106 156.972) (end 87.663 156.972) (width 1.016) (layer F.Cu) (net 5) (tstamp 567A6A1F)) + (segment (start 86.106 156.337) (end 86.106 156.972) (width 1.016) (layer F.Cu) (net 5) (tstamp 567A6A1E)) + (segment (start 85.598 155.829) (end 86.106 156.337) (width 1.016) (layer F.Cu) (net 5) (tstamp 567A6A1D)) + (via (at 85.598 155.829) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 5)) + (segment (start 85.598 152.273) (end 85.598 155.829) (width 1.016) (layer B.Cu) (net 5) (tstamp 567A6A1A)) + (segment (start 87.249 150.622) (end 85.598 152.273) (width 1.016) (layer B.Cu) (net 5) (tstamp 567A6A19)) + (segment (start 90.551 150.622) (end 87.249 150.622) (width 1.016) (layer B.Cu) (net 5) (tstamp 567A6A18)) + (segment (start 95.123 146.05) (end 90.551 150.622) (width 1.016) (layer B.Cu) (net 5) (tstamp 567A6A16)) + (segment (start 95.123 141.732) (end 95.123 146.05) (width 1.016) (layer B.Cu) (net 5) (tstamp 567A6A15)) + (segment (start 96.012 140.843) (end 95.123 141.732) (width 1.016) (layer B.Cu) (net 5) (tstamp 567A6A14)) + (via (at 96.012 140.843) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 5)) + (segment (start 96.254 140.601) (end 96.012 140.843) (width 1.016) (layer F.Cu) (net 5) (tstamp 567A6A12)) + (segment (start 111.137 141.803002) (end 111.137 141.617) (width 0.25) (layer F.Cu) (net 5) (tstamp 567A6AD1)) + (via (at 111.125 141.605) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 5)) + (segment (start 111.137 141.617) (end 111.125 141.605) (width 0.25) (layer F.Cu) (net 5) (tstamp 5675DE82)) + (segment (start 110.759 142.999) (end 111.137 142.621) (width 0.25) (layer F.Cu) (net 5) (tstamp 5675DE7F)) + (segment (start 115.8549 139.23054) (end 115.8549 140.5581) (width 0.25) (layer F.Cu) (net 5)) + (segment (start 112.649 141.605) (end 111.125 141.605) (width 0.25) (layer B.Cu) (net 5) (tstamp 5675DD89)) + (segment (start 115.8549 140.5581) (end 115.443 140.97) (width 0.25) (layer F.Cu) (net 5) (tstamp 5675DBFF)) + (via (at 115.443 140.97) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 5)) + (segment (start 115.443 140.97) (end 114.808 141.605) (width 0.25) (layer B.Cu) (net 5) (tstamp 5675DC02)) + (segment (start 114.808 141.605) (end 112.649 141.605) (width 0.25) (layer B.Cu) (net 5) (tstamp 5675DC03)) + (segment (start 111.125 141.605) (end 104.648 141.605) (width 0.25) (layer B.Cu) (net 5) (tstamp 5675DE86)) + (segment (start 104.648 141.605) (end 103.505 140.462) (width 0.25) (layer B.Cu) (net 5) (tstamp 5675DC04)) + (segment (start 100.191 140.601) (end 100.33 140.462) (width 0.25) (layer F.Cu) (net 5) (tstamp 5675DA23)) + (segment (start 103.81 148.201) (end 103.81 146.81728) (width 0.508) (layer F.Cu) (net 6) (status 400000)) + (segment (start 103.01732 143.891) (end 102.35 143.891) (width 0.508) (layer F.Cu) (net 6) (tstamp 568C52DC) (status 800000)) + (segment (start 103.34244 144.21612) (end 103.01732 143.891) (width 0.508) (layer F.Cu) (net 6) (tstamp 568C52DB)) + (segment (start 103.34244 144.74952) (end 103.34244 144.21612) (width 0.508) (layer F.Cu) (net 6) (tstamp 568C52DA)) + (segment (start 103.3272 144.76476) (end 103.34244 144.74952) (width 0.508) (layer F.Cu) (net 6) (tstamp 568C52D9)) + (via (at 103.3272 144.76476) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 6)) + (segment (start 103.3272 146.33448) (end 103.3272 144.76476) (width 0.508) (layer B.Cu) (net 6) (tstamp 568C52D2)) + (segment (start 103.72344 146.73072) (end 103.3272 146.33448) (width 0.508) (layer B.Cu) (net 6) (tstamp 568C52D1)) + (via (at 103.72344 146.73072) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 6)) + (segment (start 103.81 146.81728) (end 103.72344 146.73072) (width 0.508) (layer F.Cu) (net 6) (tstamp 568C52CF)) + (segment (start 107.291 142.113) (end 107.569 142.113) (width 0.508) (layer F.Cu) (net 6)) + (segment (start 107.569 142.113) (end 109.22 140.462) (width 0.508) (layer F.Cu) (net 6) (tstamp 567A6BC4)) + (segment (start 109.22 140.462) (end 109.22 139.23054) (width 0.508) (layer F.Cu) (net 6) (tstamp 567A6BC5)) + (segment (start 102.35 143.891) (end 102.35 143.498) (width 0.508) (layer F.Cu) (net 6)) + (segment (start 102.35 143.498) (end 101.981 143.129) (width 0.508) (layer F.Cu) (net 6) (tstamp 567A6BA1)) + (segment (start 102.108 139.827) (end 102.108 139.954) (width 0.508) (layer F.Cu) (net 6) (tstamp 567A6BA7)) + (segment (start 101.981 139.954) (end 102.108 139.827) (width 0.508) (layer F.Cu) (net 6) (tstamp 567A6BA5)) + (segment (start 101.981 143.129) (end 101.981 139.954) (width 0.508) (layer F.Cu) (net 6) (tstamp 567A6BA2)) + (segment (start 105.156 137.922) (end 104.14 137.922) (width 1.016) (layer F.Cu) (net 6)) + (segment (start 104.14 137.922) (end 102.108 139.954) (width 1.016) (layer F.Cu) (net 6) (tstamp 567A6B92)) + (segment (start 102.108 139.954) (end 102.35 139.712) (width 1.016) (layer F.Cu) (net 6) (tstamp 567A6BA8)) + (segment (start 111.26 156.451) (end 112.382 156.451) (width 0.508) (layer F.Cu) (net 6)) + (segment (start 112.382 156.451) (end 112.649 156.184) (width 0.508) (layer F.Cu) (net 6) (tstamp 567A6B19)) + (segment (start 112.649 156.184) (end 112.649 155.321) (width 0.508) (layer F.Cu) (net 6) (tstamp 567A6B1A)) + (segment (start 112.649 153.416) (end 112.649 155.321) (width 0.508) (layer B.Cu) (net 6)) + (segment (start 111.26 153.251) (end 112.484 153.251) (width 0.508) (layer F.Cu) (net 6)) + (segment (start 112.484 153.251) (end 112.649 153.416) (width 0.508) (layer F.Cu) (net 6) (tstamp 567A6B14)) + (segment (start 111.26 153.251) (end 114.401 153.251) (width 0.508) (layer F.Cu) (net 6)) + (segment (start 114.401 153.251) (end 114.427 153.277) (width 0.508) (layer F.Cu) (net 6) (tstamp 567A6B11)) + (segment (start 114.427 153.277) (end 114.566 153.277) (width 0.508) (layer F.Cu) (net 6)) + (segment (start 114.566 153.277) (end 116.078 151.765) (width 0.508) (layer F.Cu) (net 6) (tstamp 567A6B0D)) + (segment (start 116.078 151.765) (end 116.078 146.518) (width 0.508) (layer F.Cu) (net 6) (tstamp 567A6B0E)) + (segment (start 116.078 146.518) (end 116.499 146.518) (width 0.508) (layer F.Cu) (net 6)) + (segment (start 116.499 146.518) (end 117.221 145.796) (width 0.508) (layer F.Cu) (net 6) (tstamp 567A6B09)) + (segment (start 117.221 145.796) (end 117.221 140.6672) (width 0.508) (layer F.Cu) (net 6) (tstamp 567A6B0A)) + (segment (start 112.637 142.621) (end 114.935 142.621) (width 0.508) (layer F.Cu) (net 6)) + (segment (start 114.935 142.621) (end 117.0549 140.5011) (width 0.508) (layer F.Cu) (net 6) (tstamp 567A6B00)) + (segment (start 117.0549 140.5011) (end 117.0549 139.23054) (width 0.508) (layer F.Cu) (net 6) (tstamp 567A6B01)) + (segment (start 109.032 145.799) (end 109.032 145.476) (width 0.508) (layer F.Cu) (net 6)) + (segment (start 109.032 145.476) (end 110.236 144.272) (width 0.508) (layer F.Cu) (net 6) (tstamp 567A6AFA)) + (segment (start 110.236 144.272) (end 111.887 144.272) (width 0.508) (layer F.Cu) (net 6) (tstamp 567A6AFB)) + (segment (start 111.887 144.272) (end 112.637 143.522) (width 0.508) (layer F.Cu) (net 6) (tstamp 567A6AFC)) + (segment (start 112.637 143.522) (end 112.637 142.621) (width 0.508) (layer F.Cu) (net 6) (tstamp 567A6AFD)) + (segment (start 110.756 147.193) (end 110.426 147.193) (width 0.508) (layer F.Cu) (net 6)) + (segment (start 110.426 147.193) (end 109.032 145.799) (width 0.508) (layer F.Cu) (net 6) (tstamp 567A6AF7)) + (segment (start 109.032 145.476) (end 110.236 144.272) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675DF8E)) + (segment (start 112.637 143.522) (end 112.637 142.621) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675DF93)) + (segment (start 111.887 144.272) (end 112.637 143.522) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675DF92)) + (segment (start 110.236 144.272) (end 111.887 144.272) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675DF90)) + (segment (start 116.078 146.518) (end 116.078 151.765) (width 0.25) (layer F.Cu) (net 6)) + (segment (start 116.078 151.765) (end 114.566 153.277) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675DEB4)) + (segment (start 116.499 146.518) (end 117.221 145.796) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675DEA8)) + (segment (start 117.221 145.796) (end 117.221 140.6672) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675DEA9)) + (segment (start 117.221 140.6672) (end 117.0549 140.5011) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675DEAA)) + (segment (start 110.426 147.193) (end 109.032 145.799) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675DE9C)) + (segment (start 117.0549 140.5011) (end 117.0549 139.23054) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675DE8B)) + (segment (start 114.935 142.621) (end 117.0549 140.5011) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675DE89)) + (segment (start 91.821 150.253) (end 92.952 150.253) (width 0.25) (layer F.Cu) (net 6)) + (segment (start 97.167 152.285) (end 97.79 152.285) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675DD4D)) + (segment (start 96.901 152.019) (end 97.167 152.285) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675DD4C)) + (segment (start 96.901 150.749) (end 96.901 152.019) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675DD4A)) + (segment (start 95.885 149.733) (end 96.901 150.749) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675DD48)) + (segment (start 93.472 149.733) (end 95.885 149.733) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675DD47)) + (segment (start 92.952 150.253) (end 93.472 149.733) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675DD46)) + (segment (start 99.56 153.251) (end 98.756 153.251) (width 0.25) (layer F.Cu) (net 6)) + (segment (start 98.756 153.251) (end 97.79 152.285) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675DD39)) + (segment (start 114.427 153.277) (end 112.788 153.277) (width 0.25) (layer F.Cu) (net 6)) + (segment (start 112.788 153.277) (end 112.649 153.416) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675DC6A)) + (segment (start 107.569 142.113) (end 109.22 140.462) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675DBB4)) + (segment (start 109.22 140.462) (end 109.22 139.23054) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675DBB7)) + (segment (start 111.0549 136.53054) (end 118.0549 136.53054) (width 0.25) (layer F.Cu) (net 6)) + (segment (start 113.2549 139.23054) (end 112.0549 139.23054) (width 0.25) (layer F.Cu) (net 6)) + (segment (start 112.0549 139.23054) (end 109.22 139.23054) (width 0.25) (layer F.Cu) (net 6)) + (segment (start 109.22 139.23054) (end 105.44854 139.23054) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675DBBB)) + (segment (start 105.156 138.938) (end 105.156 137.922) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675DB59)) + (segment (start 105.44854 139.23054) (end 105.156 138.938) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675DB58)) + (segment (start 112.0549 139.23054) (end 111.67154 139.23054) (width 0.25) (layer F.Cu) (net 6)) + (segment (start 111.67154 139.23054) (end 111.0549 138.6139) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675DB52)) + (segment (start 111.0549 138.6139) (end 111.0549 136.53054) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675DB53)) + (segment (start 117.0549 139.23054) (end 117.18246 139.23054) (width 0.25) (layer F.Cu) (net 6)) + (segment (start 117.18246 139.23054) (end 118.0549 138.3581) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675DB4E)) + (segment (start 118.0549 138.3581) (end 118.0549 136.53054) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675DB4F)) + (segment (start 104.14 137.922) (end 102.35 139.712) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675D8E5)) + (segment (start 102.35 139.712) (end 102.35 143.891) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675D8E7)) + (segment (start 112.522 156.464) (end 112.522 156.591) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675D897)) + (via (at 112.649 155.321) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 6)) + (segment (start 112.649 155.321) (end 112.649 156.337) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675D895)) + (segment (start 112.649 156.337) (end 112.522 156.464) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675D896)) + (via (at 112.649 153.416) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 6)) + (segment (start 112.484 153.251) (end 112.649 153.416) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675D890)) + (segment (start 113.03 159.004) (end 112.903 159.004) (width 0.25) (layer F.Cu) (net 6)) + (segment (start 112.522 156.591) (end 112.382 156.451) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675D869)) + (segment (start 112.522 158.623) (end 112.522 156.591) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675D868)) + (segment (start 112.903 159.004) (end 112.522 158.623) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675D867)) + (segment (start 113.03 160.147) (end 113.03 159.004) (width 0.25) (layer F.Cu) (net 6)) + (segment (start 114.3 158.623) (end 114.3 158.115) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675D771)) + (segment (start 114.173 158.75) (end 114.3 158.623) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675D770)) + (segment (start 113.284 158.75) (end 114.173 158.75) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675D76C)) + (segment (start 113.03 159.004) (end 113.284 158.75) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675D76B)) + (segment (start 91.821 150.253) (end 90.678 150.253) (width 0.254) (layer F.Cu) (net 6)) + (segment (start 90.678 150.253) (end 90.539 150.114) (width 0.254) (layer F.Cu) (net 6) (tstamp 5673B35C)) + (segment (start 115.443 139.065) (end 115.443 139.319) (width 0.508) (layer B.Cu) (net 7)) + (segment (start 116.459 143.002) (end 116.078 143.383) (width 0.508) (layer B.Cu) (net 7) (tstamp 567A6C3D)) + (segment (start 116.459 140.335) (end 116.459 143.002) (width 0.508) (layer B.Cu) (net 7) (tstamp 567A6C3C)) + (segment (start 115.443 139.319) (end 116.459 140.335) (width 0.508) (layer B.Cu) (net 7) (tstamp 567A6C3B)) + (segment (start 116.078 143.383) (end 116.078 144.018) (width 0.508) (layer B.Cu) (net 7) (tstamp 567A6C3F)) + (segment (start 115.443 139.065) (end 115.443 136.398) (width 0.508) (layer B.Cu) (net 7)) + (segment (start 115.443 136.398) (end 114.681 135.636) (width 0.508) (layer B.Cu) (net 7) (tstamp 567A6C38)) + (segment (start 113.03 133.985) (end 114.681 135.636) (width 0.508) (layer F.Cu) (net 7)) + (segment (start 105.156 135.382) (end 105.156 135.255) (width 0.508) (layer F.Cu) (net 7)) + (segment (start 105.156 135.255) (end 106.426 133.985) (width 0.508) (layer F.Cu) (net 7) (tstamp 567A6C25)) + (segment (start 106.426 133.985) (end 113.03 133.985) (width 0.508) (layer F.Cu) (net 7) (tstamp 567A6C26)) + (segment (start 100.33 135.382) (end 105.156 135.382) (width 1.016) (layer F.Cu) (net 7)) + (segment (start 110.932 145.799) (end 110.932 145.869) (width 0.508) (layer F.Cu) (net 7)) + (segment (start 110.932 145.869) (end 112.256 147.193) (width 0.508) (layer F.Cu) (net 7) (tstamp 567A6AF4)) + (segment (start 116.078 144.018) (end 114.808 144.018) (width 0.508) (layer F.Cu) (net 7)) + (segment (start 114.808 144.018) (end 113.027 145.799) (width 0.508) (layer F.Cu) (net 7) (tstamp 567A6AF0)) + (segment (start 113.027 145.799) (end 110.932 145.799) (width 0.508) (layer F.Cu) (net 7) (tstamp 567A6AF1)) + (segment (start 114.427 151.777) (end 114.427 146.177) (width 0.508) (layer F.Cu) (net 7)) + (segment (start 114.427 146.177) (end 116.078 144.526) (width 0.508) (layer F.Cu) (net 7) (tstamp 567A6AEC)) + (segment (start 116.078 144.526) (end 116.078 144.018) (width 0.508) (layer F.Cu) (net 7) (tstamp 567A6AED)) + (segment (start 111.26 152.451) (end 112.598 152.451) (width 0.508) (layer F.Cu) (net 7)) + (segment (start 112.598 152.451) (end 113.272 151.777) (width 0.508) (layer F.Cu) (net 7) (tstamp 567A6AE8)) + (segment (start 113.272 151.777) (end 114.427 151.777) (width 0.508) (layer F.Cu) (net 7) (tstamp 567A6AE9)) + (segment (start 105.156 135.255) (end 106.426 133.985) (width 0.25) (layer F.Cu) (net 7) (tstamp 5675DFBD)) + (segment (start 116.459 140.081) (end 116.459 143.637) (width 0.25) (layer B.Cu) (net 7) (tstamp 5675DFC9)) + (via (at 114.681 135.636) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 7)) + (segment (start 114.681 135.636) (end 115.443 136.398) (width 0.25) (layer B.Cu) (net 7) (tstamp 5675DFC5)) + (segment (start 115.443 139.065) (end 116.459 140.081) (width 0.25) (layer B.Cu) (net 7) (tstamp 5675DFC7)) + (segment (start 106.426 133.985) (end 113.03 133.985) (width 0.25) (layer F.Cu) (net 7) (tstamp 5675DFBE)) + (segment (start 116.459 143.637) (end 116.078 144.018) (width 0.25) (layer B.Cu) (net 7) (tstamp 5675DFCB)) + (segment (start 116.078 144.018) (end 116.078 144.526) (width 0.25) (layer F.Cu) (net 7)) + (segment (start 116.078 144.526) (end 114.427 146.177) (width 0.25) (layer F.Cu) (net 7) (tstamp 5675DEAF)) + (segment (start 110.932 145.799) (end 113.027 145.799) (width 0.25) (layer F.Cu) (net 7)) + (segment (start 113.027 145.799) (end 114.808 144.018) (width 0.25) (layer F.Cu) (net 7) (tstamp 5675DEA2)) + (segment (start 110.932 145.869) (end 112.256 147.193) (width 0.25) (layer F.Cu) (net 7) (tstamp 5675DE9F)) + (segment (start 97.79 153.785) (end 97.397 153.785) (width 0.25) (layer F.Cu) (net 7)) + (segment (start 92.341 151.753) (end 91.821 151.753) (width 0.25) (layer F.Cu) (net 7) (tstamp 5675DD43)) + (segment (start 93.726 150.368) (end 92.341 151.753) (width 0.25) (layer F.Cu) (net 7) (tstamp 5675DD42)) + (segment (start 95.377 150.368) (end 93.726 150.368) (width 0.25) (layer F.Cu) (net 7) (tstamp 5675DD41)) + (segment (start 96.266 151.257) (end 95.377 150.368) (width 0.25) (layer F.Cu) (net 7) (tstamp 5675DD3F)) + (segment (start 96.266 152.654) (end 96.266 151.257) (width 0.25) (layer F.Cu) (net 7) (tstamp 5675DD3D)) + (segment (start 97.397 153.785) (end 96.266 152.654) (width 0.25) (layer F.Cu) (net 7) (tstamp 5675DD3C)) + (segment (start 97.79 153.785) (end 98.159 153.785) (width 0.25) (layer F.Cu) (net 7)) + (segment (start 98.159 153.785) (end 98.425 154.051) (width 0.25) (layer F.Cu) (net 7) (tstamp 5675DD35)) + (segment (start 98.425 154.051) (end 99.56 154.051) (width 0.25) (layer F.Cu) (net 7) (tstamp 5675DD36)) + (segment (start 114.427 151.777) (end 113.272 151.777) (width 0.25) (layer F.Cu) (net 7)) + (segment (start 113.272 151.777) (end 112.598 152.451) (width 0.25) (layer F.Cu) (net 7) (tstamp 5675DC66)) + (segment (start 91.821 151.753) (end 90.551 151.753) (width 0.254) (layer F.Cu) (net 7)) + (segment (start 90.551 151.753) (end 90.539 151.765) (width 0.254) (layer F.Cu) (net 7) (tstamp 5673B359)) + (segment (start 81.28 144.26) (end 83.07 144.26) (width 1.016) (layer F.Cu) (net 8)) + (segment (start 83.07 144.26) (end 83.82 143.51) (width 1.016) (layer F.Cu) (net 8) (tstamp 567A6A8F)) + (segment (start 76.494 136.906) (end 76.494 137.581) (width 1.016) (layer F.Cu) (net 8)) + (segment (start 76.494 137.581) (end 78.994 140.081) (width 1.016) (layer F.Cu) (net 8) (tstamp 567A6A87)) + (segment (start 80.506 144.26) (end 81.28 144.26) (width 1.016) (layer F.Cu) (net 8) (tstamp 567A6A8C)) + (segment (start 78.994 142.748) (end 80.506 144.26) (width 1.016) (layer F.Cu) (net 8) (tstamp 567A6A8B)) + (segment (start 78.994 140.081) (end 78.994 142.748) (width 1.016) (layer F.Cu) (net 8) (tstamp 567A6A88)) + (segment (start 83.82 146.558) (end 86.614 146.558) (width 1.016) (layer B.Cu) (net 8)) + (via (at 90.805 142.367) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 8)) + (segment (start 86.614 146.558) (end 90.805 142.367) (width 1.016) (layer B.Cu) (net 8) (tstamp 567A6A51)) + (segment (start 90.805 142.367) (end 90.805 142.379) (width 1.016) (layer F.Cu) (net 8) (tstamp 567A6A5C)) + (segment (start 90.805 142.379) (end 90.805 142.367) (width 1.016) (layer F.Cu) (net 8) (tstamp 567A6A5D)) + (segment (start 90.805 142.367) (end 90.805 142.379) (width 1.016) (layer F.Cu) (net 8) (tstamp 567A6A5F)) + (segment (start 83.82 156.845) (end 83.82 146.558) (width 1.016) (layer B.Cu) (net 8)) + (segment (start 83.82 146.558) (end 83.82 143.51) (width 1.016) (layer B.Cu) (net 8) (tstamp 567A6A4F)) + (segment (start 82.263 156.972) (end 83.693 156.972) (width 1.016) (layer F.Cu) (net 8)) + (segment (start 83.693 156.972) (end 83.82 156.845) (width 1.016) (layer F.Cu) (net 8) (tstamp 567A6A3F)) + (segment (start 93.345 141.391) (end 94.02 141.391) (width 1.016) (layer F.Cu) (net 8)) + (segment (start 94.02 141.391) (end 94.73 142.101) (width 1.016) (layer F.Cu) (net 8) (tstamp 567A69DA)) + (segment (start 94.73 142.101) (end 97.536 142.101) (width 1.016) (layer F.Cu) (net 8) (tstamp 567A69DC)) + (segment (start 93.345 141.391) (end 95.758 138.978) (width 1.016) (layer F.Cu) (net 8)) + (segment (start 95.758 138.978) (end 95.758 137.922) (width 1.016) (layer F.Cu) (net 8) (tstamp 567A69BE)) + (segment (start 95.758 137.922) (end 96.708 136.972) (width 1.016) (layer F.Cu) (net 8) (tstamp 567A69BF)) + (segment (start 96.708 136.972) (end 97.285 136.972) (width 1.016) (layer F.Cu) (net 8) (tstamp 567A69C0)) + (segment (start 88.9 142.379) (end 90.805 142.379) (width 1.016) (layer F.Cu) (net 8)) + (segment (start 90.805 142.379) (end 92.357 142.379) (width 1.016) (layer F.Cu) (net 8) (tstamp 567A6A60)) + (segment (start 92.357 142.379) (end 93.345 141.391) (width 1.016) (layer F.Cu) (net 8) (tstamp 567A69BB)) + (segment (start 86.36 140.97) (end 87.884 140.97) (width 1.016) (layer F.Cu) (net 8)) + (segment (start 87.884 140.97) (end 88.9 141.986) (width 1.016) (layer F.Cu) (net 8) (tstamp 567A69B6)) + (segment (start 88.9 141.986) (end 88.9 142.379) (width 1.016) (layer F.Cu) (net 8) (tstamp 567A69B7)) + (segment (start 83.82 140.97) (end 83.82 143.51) (width 1.016) (layer F.Cu) (net 8)) + (segment (start 86.36 140.97) (end 83.82 140.97) (width 1.016) (layer F.Cu) (net 8)) + (segment (start 97.536 142.101) (end 100.953 142.101) (width 0.25) (layer F.Cu) (net 8)) + (segment (start 102.997 142.113) (end 104.291 142.113) (width 0.25) (layer F.Cu) (net 8) (tstamp 5675DBA6)) + (via (at 102.997 142.113) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 8)) + (segment (start 100.965 142.113) (end 102.997 142.113) (width 0.25) (layer B.Cu) (net 8) (tstamp 5675DBA3)) + (via (at 100.965 142.113) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 8)) + (segment (start 100.953 142.101) (end 100.965 142.113) (width 0.25) (layer F.Cu) (net 8) (tstamp 5675DBA1)) + (segment (start 97.536 142.101) (end 94.73 142.101) (width 0.25) (layer F.Cu) (net 8)) + (segment (start 94.73 142.101) (end 94.02 141.391) (width 0.25) (layer F.Cu) (net 8) (tstamp 5675DA1F)) + (segment (start 83.693 156.972) (end 83.82 156.845) (width 0.254) (layer F.Cu) (net 8) (tstamp 5673B98D)) + (via (at 83.82 156.845) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 8)) + (segment (start 97.285 136.972) (end 96.708 136.972) (width 0.254) (layer F.Cu) (net 8)) + (segment (start 95.758 137.922) (end 95.758 138.978) (width 0.254) (layer F.Cu) (net 8) (tstamp 5673B794)) + (segment (start 96.708 136.972) (end 95.758 137.922) (width 0.254) (layer F.Cu) (net 8) (tstamp 5673B793)) + (segment (start 92.357 142.379) (end 93.345 141.391) (width 0.254) (layer F.Cu) (net 8) (tstamp 5673B766)) + (segment (start 81.28 144.26) (end 79.998 144.26) (width 0.254) (layer F.Cu) (net 8)) + (segment (start 78.486 139.573) (end 76.494 137.581) (width 0.254) (layer F.Cu) (net 8) (tstamp 5673B6C1)) + (segment (start 78.486 142.748) (end 78.486 139.573) (width 0.254) (layer F.Cu) (net 8) (tstamp 5673B6BF)) + (segment (start 79.998 144.26) (end 78.486 142.748) (width 0.254) (layer F.Cu) (net 8) (tstamp 5673B6BE)) + (segment (start 88.9 142.379) (end 88.9 141.986) (width 0.254) (layer F.Cu) (net 8)) + (segment (start 88.9 141.986) (end 87.884 140.97) (width 0.254) (layer F.Cu) (net 8) (tstamp 5673B6AA)) + (segment (start 83.07 144.26) (end 83.82 143.51) (width 0.254) (layer F.Cu) (net 8) (tstamp 5673B69F)) + (segment (start 82.296 137.92454) (end 81.28 138.94054) (width 1.016) (layer F.Cu) (net 9)) + (segment (start 81.28 138.94054) (end 81.28 142.76) (width 1.016) (layer F.Cu) (net 9) (tstamp 567A6A84)) + (segment (start 82.296 137.92454) (end 80.77454 137.92454) (width 1.016) (layer F.Cu) (net 9)) + (segment (start 80.77454 137.92454) (end 79.756 136.906) (width 1.016) (layer F.Cu) (net 9) (tstamp 567A6A80)) + (segment (start 79.756 136.906) (end 78.994 136.906) (width 1.016) (layer F.Cu) (net 9) (tstamp 567A6A81)) + (segment (start 89.408 137.922) (end 82.29854 137.922) (width 1.016) (layer F.Cu) (net 9)) + (segment (start 82.29854 137.922) (end 82.296 137.92454) (width 1.016) (layer F.Cu) (net 9) (tstamp 567A6A7C)) + (segment (start 100.33 137.922) (end 96.647 137.922) (width 1.016) (layer B.Cu) (net 9)) + (segment (start 96.647 137.922) (end 94.869 139.7) (width 1.016) (layer B.Cu) (net 9) (tstamp 567A6A71)) + (segment (start 94.869 139.7) (end 90.678 139.7) (width 1.016) (layer B.Cu) (net 9) (tstamp 567A6A72)) + (segment (start 90.678 139.7) (end 90.17 139.192) (width 1.016) (layer B.Cu) (net 9) (tstamp 567A6A73)) + (segment (start 90.17 139.192) (end 90.17 138.684) (width 1.016) (layer B.Cu) (net 9) (tstamp 567A6A75)) + (segment (start 90.17 138.684) (end 89.452564 137.966564) (width 1.016) (layer B.Cu) (net 9) (tstamp 567A6A76)) + (segment (start 89.452564 137.966564) (end 89.363436 137.966564) (width 1.016) (layer B.Cu) (net 9) (tstamp 567A6A77)) + (segment (start 89.363436 137.966564) (end 89.408 137.922) (width 1.016) (layer B.Cu) (net 9) (tstamp 567A6A79)) + (segment (start 89.40546 137.92454) (end 82.296 137.92454) (width 0.254) (layer F.Cu) (net 9) (tstamp 5673B7D6)) + (segment (start 89.408 137.922) (end 89.40546 137.92454) (width 0.254) (layer F.Cu) (net 9) (tstamp 5673B7D5)) + (via (at 89.408 137.922) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 9)) + (segment (start 90.17 138.684) (end 89.408 137.922) (width 0.254) (layer B.Cu) (net 9) (tstamp 5673B7D3)) + (segment (start 90.17 139.192) (end 90.17 138.684) (width 0.254) (layer B.Cu) (net 9) (tstamp 5673B7D2)) + (segment (start 90.678 139.7) (end 90.17 139.192) (width 0.254) (layer B.Cu) (net 9) (tstamp 5673B7D1)) + (segment (start 94.869 139.7) (end 90.678 139.7) (width 0.254) (layer B.Cu) (net 9) (tstamp 5673B7D0)) + (segment (start 96.647 137.922) (end 94.869 139.7) (width 0.254) (layer B.Cu) (net 9) (tstamp 5673B7CE)) + (segment (start 78.994 136.906) (end 79.756 136.906) (width 0.254) (layer F.Cu) (net 9)) + (segment (start 79.756 136.906) (end 80.77454 137.92454) (width 0.254) (layer F.Cu) (net 9) (tstamp 5673B6C5)) + (segment (start 81.28 142.76) (end 81.28 138.94054) (width 0.254) (layer F.Cu) (net 9)) + (segment (start 78.74 155.182) (end 76.442 155.182) (width 0.254) (layer F.Cu) (net 10)) + (segment (start 76.442 155.182) (end 76.2 154.94) (width 0.254) (layer F.Cu) (net 10) (tstamp 5673B113)) + (segment (start 78.498 152.146) (end 76.454 152.146) (width 0.254) (layer F.Cu) (net 11)) + (segment (start 76.454 152.146) (end 76.2 152.4) (width 0.254) (layer F.Cu) (net 11) (tstamp 5673B110)) + (segment (start 78.74 153.682) (end 78.74 153.289) (width 0.254) (layer F.Cu) (net 11)) + (segment (start 78.74 153.289) (end 78.498 153.047) (width 0.254) (layer F.Cu) (net 11) (tstamp 5673B10C)) + (segment (start 78.498 153.047) (end 78.498 152.146) (width 0.254) (layer F.Cu) (net 11) (tstamp 5673B10D)) + (segment (start 93.345 143.891) (end 97.421 143.891) (width 1.016) (layer F.Cu) (net 12)) + (segment (start 88.9 143.879) (end 93.333 143.879) (width 1.016) (layer F.Cu) (net 12)) + (segment (start 93.333 143.879) (end 93.345 143.891) (width 1.016) (layer F.Cu) (net 12) (tstamp 567A6B7E)) + (segment (start 88.9 143.879) (end 86.729 143.879) (width 1.016) (layer F.Cu) (net 12)) + (segment (start 86.729 143.879) (end 86.36 143.51) (width 1.016) (layer F.Cu) (net 12) (tstamp 567A6B7B)) + (segment (start 86.36 143.51) (end 87.757 143.51) (width 1.016) (layer B.Cu) (net 12)) + (segment (start 87.757 143.51) (end 88.9 142.367) (width 1.016) (layer B.Cu) (net 12) (tstamp 567A6A9F)) + (segment (start 88.9 142.367) (end 88.9 139.446) (width 1.016) (layer B.Cu) (net 12) (tstamp 567A6AA1)) + (segment (start 88.9 139.446) (end 85.344 135.89) (width 1.016) (layer B.Cu) (net 12) (tstamp 567A6AA7)) + (segment (start 85.344 135.89) (end 85.344 135.128) (width 1.016) (layer B.Cu) (net 12) (tstamp 567A6AAB)) + (segment (start 82.55 135.12546) (end 85.34146 135.12546) (width 1.016) (layer F.Cu) (net 12)) + (segment (start 85.34146 135.12546) (end 85.344 135.128) (width 1.016) (layer F.Cu) (net 12) (tstamp 567A6A9C)) + (segment (start 93.333 143.879) (end 93.345 143.891) (width 0.254) (layer F.Cu) (net 12) (tstamp 5673B763)) + (segment (start 88.9 142.367) (end 87.757 143.51) (width 0.254) (layer B.Cu) (net 12) (tstamp 5673B703)) + (segment (start 88.9 138.684) (end 88.9 142.367) (width 0.254) (layer B.Cu) (net 12) (tstamp 5673B701)) + (segment (start 85.344 135.128) (end 88.9 138.684) (width 0.254) (layer B.Cu) (net 12) (tstamp 5673B700)) + (via (at 85.344 135.128) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 12)) + (segment (start 85.34146 135.12546) (end 85.344 135.128) (width 0.254) (layer F.Cu) (net 12) (tstamp 5673B6FE)) + (segment (start 86.36 143.51) (end 86.741 143.51) (width 0.254) (layer F.Cu) (net 12)) + (segment (start 86.741 143.51) (end 87.11 143.879) (width 0.254) (layer F.Cu) (net 12) (tstamp 5673B6A6)) + (segment (start 87.11 143.879) (end 88.9 143.879) (width 0.254) (layer F.Cu) (net 12) (tstamp 5673B6A7)) + (segment (start 78.74 160.516) (end 76.696 160.516) (width 0.254) (layer F.Cu) (net 13)) + (segment (start 76.696 160.516) (end 76.2 160.02) (width 0.254) (layer F.Cu) (net 13) (tstamp 5673B12D)) + (segment (start 78.498 157.48) (end 78.498 158.774) (width 0.254) (layer F.Cu) (net 14)) + (segment (start 78.498 158.774) (end 78.74 159.016) (width 0.254) (layer F.Cu) (net 14) (tstamp 5673B12A)) + (segment (start 78.498 157.48) (end 76.2 157.48) (width 0.254) (layer F.Cu) (net 14)) + (segment (start 94.485 137.922) (end 92.45854 137.922) (width 1.016) (layer F.Cu) (net 15)) + (segment (start 92.45854 137.922) (end 92.456 137.92454) (width 1.016) (layer F.Cu) (net 15) (tstamp 567A6B3A)) + (segment (start 92.45854 137.922) (end 92.456 137.92454) (width 0.508) (layer F.Cu) (net 15) (tstamp 567A6B32)) + (segment (start 92.456 137.92454) (end 92.456 135.37946) (width 1.016) (layer F.Cu) (net 15)) + (segment (start 92.456 135.37946) (end 92.71 135.12546) (width 1.016) (layer F.Cu) (net 15) (tstamp 567A6A99)) + (segment (start 92.45854 137.922) (end 92.456 137.92454) (width 0.254) (layer F.Cu) (net 15) (tstamp 5673B790)) + (segment (start 92.456 135.37946) (end 92.71 135.12546) (width 0.254) (layer F.Cu) (net 15) (tstamp 5673B769)) + (segment (start 98.921 143.891) (end 100.85 143.891) (width 1.016) (layer F.Cu) (net 16)) + (segment (start 101.41 158.052) (end 101.41 159.901) (width 0.254) (layer F.Cu) (net 16) (tstamp 5673BB02)) + (via (at 99.949 143.891) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 16)) + (segment (start 99.949 143.891) (end 101.346 145.288) (width 0.254) (layer B.Cu) (net 16) (tstamp 5673BAFA)) + (segment (start 101.346 145.288) (end 101.346 157.988) (width 0.254) (layer B.Cu) (net 16) (tstamp 5673BAFB)) + (via (at 101.346 157.988) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 16)) + (segment (start 101.346 157.988) (end 101.41 158.052) (width 0.254) (layer F.Cu) (net 16) (tstamp 5673BB01)) + (segment (start 100.85 143.891) (end 99.949 143.891) (width 0.254) (layer F.Cu) (net 16)) + (segment (start 98.921 143.891) (end 99.949 143.891) (width 0.254) (layer F.Cu) (net 16)) + (segment (start 102.21 159.901) (end 102.21 155.473) (width 0.254) (layer F.Cu) (net 17)) + (segment (start 101.6 154.863) (end 99.572 154.863) (width 0.254) (layer F.Cu) (net 17) (tstamp 5673BAD7)) + (segment (start 102.21 155.473) (end 101.6 154.863) (width 0.254) (layer F.Cu) (net 17) (tstamp 5673BAD1)) + (segment (start 99.572 154.863) (end 99.56 154.851) (width 0.254) (layer F.Cu) (net 17) (tstamp 5673BAD8)) + (segment (start 87.663 159.512) (end 86.487 159.512) (width 0.254) (layer F.Cu) (net 17)) + (segment (start 102.21 160.934) (end 102.21 159.901) (width 0.254) (layer F.Cu) (net 17) (tstamp 5673BA75)) + (segment (start 101.927002 161.216998) (end 102.21 160.934) (width 0.254) (layer F.Cu) (net 17) (tstamp 5673BA74)) + (segment (start 100.383998 161.216998) (end 101.927002 161.216998) (width 0.254) (layer F.Cu) (net 17) (tstamp 5673BA73)) + (segment (start 100.203 161.036) (end 100.383998 161.216998) (width 0.254) (layer F.Cu) (net 17) (tstamp 5673BA72)) + (segment (start 99.314 161.036) (end 100.203 161.036) (width 0.254) (layer F.Cu) (net 17) (tstamp 5673BA71)) + (via (at 99.314 161.036) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 17)) + (segment (start 98.933 161.417) (end 99.314 161.036) (width 0.254) (layer B.Cu) (net 17) (tstamp 5673BA6D)) + (segment (start 86.233 161.417) (end 98.933 161.417) (width 0.254) (layer B.Cu) (net 17) (tstamp 5673BA6C)) + (segment (start 85.852 161.036) (end 86.233 161.417) (width 0.254) (layer B.Cu) (net 17) (tstamp 5673BA6B)) + (segment (start 85.852 160.147) (end 85.852 161.036) (width 0.254) (layer B.Cu) (net 17) (tstamp 5673BA6A)) + (segment (start 86.233 159.766) (end 85.852 160.147) (width 0.254) (layer B.Cu) (net 17) (tstamp 5673BA69)) + (via (at 86.233 159.766) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 17)) + (segment (start 86.487 159.512) (end 86.233 159.766) (width 0.254) (layer F.Cu) (net 17) (tstamp 5673BA67)) + (segment (start 87.663 159.512) (end 87.663 160.782) (width 0.254) (layer F.Cu) (net 17)) + (segment (start 82.263 155.702) (end 84.201 155.702) (width 0.254) (layer F.Cu) (net 21)) + (segment (start 105.41 161.036) (end 105.41 159.901) (width 0.254) (layer F.Cu) (net 21) (tstamp 567A6C0E)) + (segment (start 104.721002 161.724998) (end 105.41 161.036) (width 0.254) (layer F.Cu) (net 21) (tstamp 567A6C0D)) + (segment (start 86.032998 161.724998) (end 104.721002 161.724998) (width 0.254) (layer F.Cu) (net 21) (tstamp 567A6C0A)) + (segment (start 85.09 160.782) (end 86.032998 161.724998) (width 0.254) (layer F.Cu) (net 21) (tstamp 567A6C09)) + (segment (start 85.09 156.591) (end 85.09 160.782) (width 0.254) (layer F.Cu) (net 21) (tstamp 567A6C08)) + (segment (start 84.201 155.702) (end 85.09 156.591) (width 0.254) (layer F.Cu) (net 21) (tstamp 567A6C06)) + (segment (start 82.263 158.242) (end 83.185 158.242) (width 0.254) (layer F.Cu) (net 22)) + (segment (start 106.21 161.125) (end 106.21 159.901) (width 0.254) (layer F.Cu) (net 22) (tstamp 5673B974)) + (segment (start 105.156 162.179) (end 106.21 161.125) (width 0.254) (layer F.Cu) (net 22) (tstamp 5673B973)) + (segment (start 84.709 162.179) (end 105.156 162.179) (width 0.254) (layer F.Cu) (net 22) (tstamp 5673B972)) + (segment (start 83.693 161.163) (end 84.709 162.179) (width 0.254) (layer F.Cu) (net 22) (tstamp 5673B971)) + (segment (start 83.693 158.75) (end 83.693 161.163) (width 0.254) (layer F.Cu) (net 22) (tstamp 5673B970)) + (segment (start 83.185 158.242) (end 83.693 158.75) (width 0.254) (layer F.Cu) (net 22) (tstamp 5673B96F)) + (segment (start 109.41 159.901) (end 109.41 156.02) (width 0.25) (layer F.Cu) (net 26)) + (segment (start 109.779 155.651) (end 111.26 155.651) (width 0.25) (layer F.Cu) (net 26) (tstamp 5675D872)) + (segment (start 109.41 156.02) (end 109.779 155.651) (width 0.25) (layer F.Cu) (net 26) (tstamp 5675D871)) + (segment (start 114.3 160.147) (end 114.3 160.401) (width 0.25) (layer F.Cu) (net 27)) + (segment (start 114.3 160.401) (end 113.919 160.782) (width 0.25) (layer F.Cu) (net 27) (tstamp 5675D854)) + (segment (start 113.919 160.782) (end 112.649 160.782) (width 0.25) (layer F.Cu) (net 27) (tstamp 5675D855)) + (segment (start 112.649 160.782) (end 111.26 159.393) (width 0.25) (layer F.Cu) (net 27) (tstamp 5675D856)) + (segment (start 111.26 159.393) (end 111.26 158.051) (width 0.25) (layer F.Cu) (net 27) (tstamp 5675D857)) + (segment (start 113.03 158.115) (end 113.03 157.353) (width 0.25) (layer F.Cu) (net 30)) + (segment (start 112.776 154.051) (end 111.26 154.051) (width 0.25) (layer F.Cu) (net 30) (tstamp 5675D883)) + (segment (start 113.284 154.559) (end 112.776 154.051) (width 0.25) (layer F.Cu) (net 30) (tstamp 5675D882)) + (segment (start 113.284 157.099) (end 113.284 154.559) (width 0.25) (layer F.Cu) (net 30) (tstamp 5675D881)) + (segment (start 113.03 157.353) (end 113.284 157.099) (width 0.25) (layer F.Cu) (net 30) (tstamp 5675D880)) + (segment (start 108.61 148.201) (end 108.61 149.327) (width 0.25) (layer F.Cu) (net 35)) + (segment (start 97.978 138.872) (end 97.285 138.872) (width 0.25) (layer F.Cu) (net 35) (tstamp 5675DEC8)) + (segment (start 98.425 139.319) (end 97.978 138.872) (width 0.25) (layer F.Cu) (net 35) (tstamp 5675DEC7)) + (via (at 98.425 139.319) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 35)) + (segment (start 98.425 146.558) (end 98.425 139.319) (width 0.25) (layer B.Cu) (net 35) (tstamp 5675DEC4)) + (segment (start 99.822 147.955) (end 98.425 146.558) (width 0.25) (layer B.Cu) (net 35) (tstamp 5675DEC3)) + (via (at 99.822 147.955) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 35)) + (segment (start 99.822 148.463) (end 99.822 147.955) (width 0.25) (layer F.Cu) (net 35) (tstamp 5675DEC0)) + (segment (start 99.822 148.59) (end 99.822 148.463) (width 0.25) (layer F.Cu) (net 35) (tstamp 5675DEBF)) + (segment (start 100.584 149.352) (end 99.822 148.59) (width 0.25) (layer F.Cu) (net 35) (tstamp 5675DEBE)) + (segment (start 108.585 149.352) (end 100.584 149.352) (width 0.25) (layer F.Cu) (net 35) (tstamp 5675DEBD)) + (segment (start 108.61 149.327) (end 108.585 149.352) (width 0.25) (layer F.Cu) (net 35) (tstamp 5675DEBC)) + (segment (start 97.285 138.872) (end 97.285 139.062) (width 0.25) (layer F.Cu) (net 35)) + (segment (start 108.585 148.226) (end 108.61 148.201) (width 0.25) (layer F.Cu) (net 35) (tstamp 5675DA3C)) + (segment (start 107.01 148.201) (end 107.01 144.958) (width 0.25) (layer F.Cu) (net 37)) + (segment (start 115.189 140.335) (end 115.189 139.24644) (width 0.25) (layer F.Cu) (net 37) (tstamp 5675DBDB)) + (segment (start 114.554 140.97) (end 115.189 140.335) (width 0.25) (layer F.Cu) (net 37) (tstamp 5675DBDA)) + (segment (start 110.49 140.97) (end 114.554 140.97) (width 0.25) (layer F.Cu) (net 37) (tstamp 5675DBD8)) + (segment (start 108.966 142.494) (end 110.49 140.97) (width 0.25) (layer F.Cu) (net 37) (tstamp 5675DBD7)) + (segment (start 108.966 143.383) (end 108.966 142.494) (width 0.25) (layer F.Cu) (net 37) (tstamp 5675DBD6)) + (segment (start 107.823 144.526) (end 108.966 143.383) (width 0.25) (layer F.Cu) (net 37) (tstamp 5675DBD5)) + (segment (start 107.442 144.526) (end 107.823 144.526) (width 0.25) (layer F.Cu) (net 37) (tstamp 5675DBD4)) + (segment (start 107.01 144.958) (end 107.442 144.526) (width 0.25) (layer F.Cu) (net 37) (tstamp 5675DBD3)) + (segment (start 115.189 139.24644) (end 115.2049 139.23054) (width 0.25) (layer F.Cu) (net 37) (tstamp 5675DBDC)) + (segment (start 114.5549 139.23054) (end 114.5549 139.9531) (width 0.25) (layer F.Cu) (net 38)) + (segment (start 106.21 144.488) (end 106.21 148.201) (width 0.25) (layer F.Cu) (net 38) (tstamp 5675DBD0)) + (segment (start 106.934 143.764) (end 106.21 144.488) (width 0.25) (layer F.Cu) (net 38) (tstamp 5675DBCF)) + (segment (start 107.696 143.764) (end 106.934 143.764) (width 0.25) (layer F.Cu) (net 38) (tstamp 5675DBCE)) + (segment (start 108.331 143.129) (end 107.696 143.764) (width 0.25) (layer F.Cu) (net 38) (tstamp 5675DBCD)) + (segment (start 108.331 142.24) (end 108.331 143.129) (width 0.25) (layer F.Cu) (net 38) (tstamp 5675DBCB)) + (segment (start 110.109 140.462) (end 108.331 142.24) (width 0.25) (layer F.Cu) (net 38) (tstamp 5675DBC8)) + (segment (start 114.046 140.462) (end 110.109 140.462) (width 0.25) (layer F.Cu) (net 38) (tstamp 5675DBC7)) + (segment (start 114.5549 139.9531) (end 114.046 140.462) (width 0.25) (layer F.Cu) (net 38) (tstamp 5675DBC6)) + (segment (start 83.173 146.05) (end 83.566 146.05) (width 0.254) (layer F.Cu) (net 39)) + (segment (start 105.41 146.431) (end 105.41 148.201) (width 0.254) (layer F.Cu) (net 39) (tstamp 5673BA1A)) + (segment (start 104.394 145.415) (end 105.41 146.431) (width 0.254) (layer F.Cu) (net 39) (tstamp 5673BA19)) + (segment (start 84.201 145.415) (end 104.394 145.415) (width 0.254) (layer F.Cu) (net 39) (tstamp 5673BA18)) + (segment (start 83.566 146.05) (end 84.201 145.415) (width 0.254) (layer F.Cu) (net 39) (tstamp 5673BA17)) + (segment (start 83.173 147.701) (end 83.173 147.459) (width 0.254) (layer F.Cu) (net 40)) + (segment (start 83.173 147.459) (end 84.582 146.05) (width 0.254) (layer F.Cu) (net 40) (tstamp 5673BA23)) + (segment (start 84.582 146.05) (end 104.14 146.05) (width 0.254) (layer F.Cu) (net 40) (tstamp 5673BA24)) + (segment (start 104.14 146.05) (end 104.61 146.52) (width 0.254) (layer F.Cu) (net 40) (tstamp 5673BA26)) + (segment (start 104.61 146.52) (end 104.61 148.201) (width 0.254) (layer F.Cu) (net 40) (tstamp 5673BA27)) + (segment (start 102.21 148.201) (end 102.21 147.041) (width 0.254) (layer F.Cu) (net 41)) + (segment (start 83.947 148.578) (end 83.173 149.352) (width 0.254) (layer F.Cu) (net 41) (tstamp 5673BA32)) + (segment (start 83.947 147.701) (end 83.947 148.578) (width 0.254) (layer F.Cu) (net 41) (tstamp 5673BA30)) + (segment (start 84.963 146.685) (end 83.947 147.701) (width 0.254) (layer F.Cu) (net 41) (tstamp 5673BA2F)) + (segment (start 101.854 146.685) (end 84.963 146.685) (width 0.254) (layer F.Cu) (net 41) (tstamp 5673BA2E)) + (segment (start 102.21 147.041) (end 101.854 146.685) (width 0.254) (layer F.Cu) (net 41) (tstamp 5673BA2D)) + (segment (start 100.529 147.32) (end 101.41 148.201) (width 0.254) (layer F.Cu) (net 42) (tstamp 5673BA46)) + (segment (start 85.217 147.32) (end 100.529 147.32) (width 0.254) (layer F.Cu) (net 42) (tstamp 5673BA45)) + (segment (start 84.455 148.082) (end 85.217 147.32) (width 0.254) (layer F.Cu) (net 42) (tstamp 5673BA44)) + (segment (start 84.455 149.491) (end 84.455 148.082) (width 0.254) (layer F.Cu) (net 42)) + (segment (start 99.56 150.051) (end 103.441 150.051) (width 0.25) (layer F.Cu) (net 43)) + (segment (start 106.426 136.652) (end 107.696 135.382) (width 0.25) (layer B.Cu) (net 43) (tstamp 5675DED7)) + (segment (start 106.426 139.7) (end 106.426 136.652) (width 0.25) (layer B.Cu) (net 43) (tstamp 5675DED6)) + (segment (start 106.045 140.081) (end 106.426 139.7) (width 0.25) (layer B.Cu) (net 43) (tstamp 5675DED5)) + (via (at 106.045 140.081) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 43)) + (segment (start 105.664 140.462) (end 106.045 140.081) (width 0.25) (layer F.Cu) (net 43) (tstamp 5675DED3)) + (segment (start 105.664 143.129) (end 105.664 140.462) (width 0.25) (layer F.Cu) (net 43) (tstamp 5675DED2)) + (segment (start 105.029 143.764) (end 105.664 143.129) (width 0.25) (layer F.Cu) (net 43) (tstamp 5675DED1)) + (via (at 105.029 143.764) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 43)) + (segment (start 105.029 148.463) (end 105.029 143.764) (width 0.25) (layer B.Cu) (net 43) (tstamp 5675DECE)) + (segment (start 103.505 149.987) (end 105.029 148.463) (width 0.25) (layer B.Cu) (net 43) (tstamp 5675DECD)) + (via (at 103.505 149.987) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 43)) + (segment (start 103.441 150.051) (end 103.505 149.987) (width 0.25) (layer F.Cu) (net 43) (tstamp 5675DECB)) + (segment (start 99.56 150.851) (end 104.038 150.851) (width 0.25) (layer F.Cu) (net 44)) + (segment (start 107.696 139.827) (end 107.696 137.922) (width 0.25) (layer B.Cu) (net 44) (tstamp 5675DEFC)) + (segment (start 107.569 139.954) (end 107.696 139.827) (width 0.25) (layer B.Cu) (net 44) (tstamp 5675DEFB)) + (via (at 107.569 139.954) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 44)) + (segment (start 106.299 141.224) (end 107.569 139.954) (width 0.25) (layer F.Cu) (net 44) (tstamp 5675DEF7)) + (segment (start 106.299 143.51) (end 106.299 141.224) (width 0.25) (layer F.Cu) (net 44) (tstamp 5675DEF6)) + (segment (start 106.045 143.764) (end 106.299 143.51) (width 0.25) (layer F.Cu) (net 44) (tstamp 5675DEF5)) + (via (at 106.045 143.764) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 44)) + (segment (start 106.045 149.225) (end 106.045 143.764) (width 0.25) (layer B.Cu) (net 44) (tstamp 5675DEF3)) + (segment (start 105.283 149.987) (end 106.045 149.225) (width 0.25) (layer B.Cu) (net 44) (tstamp 5675DEF2)) + (via (at 105.283 149.987) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 44)) + (segment (start 104.902 149.987) (end 105.283 149.987) (width 0.25) (layer F.Cu) (net 44) (tstamp 5675DEF0)) + (segment (start 104.038 150.851) (end 104.902 149.987) (width 0.25) (layer F.Cu) (net 44) (tstamp 5675DEEF)) + (segment (start 87.663 153.162) (end 87.663 152.24) (width 0.254) (layer F.Cu) (net 48)) + (segment (start 97.65 156.451) (end 99.56 156.451) (width 0.254) (layer F.Cu) (net 48) (tstamp 5673BACB)) + (segment (start 97.282 156.083) (end 97.65 156.451) (width 0.254) (layer F.Cu) (net 48) (tstamp 5673BACA)) + (via (at 97.282 156.083) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 48)) + (segment (start 97.282 155.067) (end 97.282 156.083) (width 0.254) (layer B.Cu) (net 48) (tstamp 5673BAC7)) + (segment (start 95.377 153.162) (end 97.282 155.067) (width 0.254) (layer B.Cu) (net 48) (tstamp 5673BAC5)) + (segment (start 92.837 153.162) (end 95.377 153.162) (width 0.254) (layer B.Cu) (net 48) (tstamp 5673BAC3)) + (segment (start 91.44 151.765) (end 92.837 153.162) (width 0.254) (layer B.Cu) (net 48) (tstamp 5673BAC1)) + (segment (start 88.138 151.765) (end 91.44 151.765) (width 0.254) (layer B.Cu) (net 48) (tstamp 5673BAC0)) + (segment (start 87.757 152.146) (end 88.138 151.765) (width 0.254) (layer B.Cu) (net 48) (tstamp 5673BABF)) + (via (at 87.757 152.146) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 48)) + (segment (start 87.663 152.24) (end 87.757 152.146) (width 0.254) (layer F.Cu) (net 48) (tstamp 5673BABD)) + (segment (start 87.663 154.432) (end 87.663 153.162) (width 0.254) (layer F.Cu) (net 48)) + (segment (start 91.567 157.734) (end 91.567 153.162) (width 0.254) (layer B.Cu) (net 50)) + (segment (start 90.932 152.781) (end 90.666 153.047) (width 0.254) (layer F.Cu) (net 50) (tstamp 5673BA97)) + (segment (start 91.186 152.781) (end 90.932 152.781) (width 0.254) (layer F.Cu) (net 50) (tstamp 5673BA96)) + (segment (start 91.567 153.162) (end 91.186 152.781) (width 0.254) (layer F.Cu) (net 50) (tstamp 5673BA95)) + (via (at 91.567 153.162) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 50)) + (segment (start 90.666 153.047) (end 90.666 153.416) (width 0.254) (layer F.Cu) (net 50) (tstamp 5673BA98)) + (segment (start 91.567 157.734) (end 92.202 157.734) (width 0.254) (layer B.Cu) (net 50)) + (segment (start 97.854 158.051) (end 99.56 158.051) (width 0.254) (layer F.Cu) (net 50) (tstamp 5673BA7C)) + (segment (start 97.663 158.242) (end 97.854 158.051) (width 0.254) (layer F.Cu) (net 50) (tstamp 5673BA7B)) + (via (at 97.663 158.242) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 50)) + (segment (start 92.71 158.242) (end 97.663 158.242) (width 0.254) (layer B.Cu) (net 50) (tstamp 5673BA79)) + (segment (start 92.202 157.734) (end 92.71 158.242) (width 0.254) (layer B.Cu) (net 50) (tstamp 5673BA78)) + (segment (start 90.666 158.508) (end 91.44 157.734) (width 0.254) (layer F.Cu) (net 50) (tstamp 5673B34D)) + (via (at 91.567 157.734) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 50)) + (segment (start 91.44 157.734) (end 91.567 157.734) (width 0.254) (layer F.Cu) (net 50) (tstamp 5673B34E)) + (segment (start 89.039 150.114) (end 89.039 151.765) (width 0.254) (layer F.Cu) (net 50)) + (segment (start 90.666 153.416) (end 90.666 153.404) (width 0.254) (layer F.Cu) (net 50)) + (segment (start 90.666 153.404) (end 89.039 151.777) (width 0.254) (layer F.Cu) (net 50) (tstamp 5673B35F)) + (segment (start 89.039 151.777) (end 89.039 151.765) (width 0.254) (layer F.Cu) (net 50) (tstamp 5673B360)) + (segment (start 90.666 158.877) (end 90.666 158.508) (width 0.254) (layer F.Cu) (net 50)) + (segment (start 76.2 149.86) (end 77.597 149.86) (width 0.254) (layer F.Cu) (net 52)) + (segment (start 78.74 151.003) (end 81.546 151.003) (width 0.254) (layer F.Cu) (net 52) (tstamp 5673BA09)) + (segment (start 77.597 149.86) (end 78.74 151.003) (width 0.254) (layer F.Cu) (net 52) (tstamp 5673BA08)) + (segment (start 79.006 149.352) (end 78.486 149.352) (width 0.254) (layer F.Cu) (net 53)) + (segment (start 77.47 148.59) (end 76.2 147.32) (width 0.254) (layer F.Cu) (net 53) (tstamp 5673BA05)) + (segment (start 77.724 148.59) (end 77.47 148.59) (width 0.254) (layer F.Cu) (net 53) (tstamp 5673BA04)) + (segment (start 78.486 149.352) (end 77.724 148.59) (width 0.254) (layer F.Cu) (net 53) (tstamp 5673BA03)) + (segment (start 79.006 147.701) (end 78.867 147.701) (width 0.254) (layer F.Cu) (net 54)) + (segment (start 78.867 147.701) (end 77.851 146.685) (width 0.254) (layer F.Cu) (net 54) (tstamp 5673B9FC)) + (segment (start 77.851 146.685) (end 77.851 145.034) (width 0.254) (layer F.Cu) (net 54) (tstamp 5673B9FD)) + (segment (start 77.851 145.034) (end 77.597 144.78) (width 0.254) (layer F.Cu) (net 54) (tstamp 5673B9FF)) + (segment (start 77.597 144.78) (end 76.2 144.78) (width 0.254) (layer F.Cu) (net 54) (tstamp 5673BA00)) + (segment (start 76.454 144.78) (end 76.2 144.78) (width 0.254) (layer F.Cu) (net 54) (tstamp 5673B435)) + (segment (start 79.006 146.05) (end 79.006 144.03) (width 0.254) (layer F.Cu) (net 55)) + (segment (start 79.006 144.03) (end 77.216 142.24) (width 0.254) (layer F.Cu) (net 55) (tstamp 5673B9F1)) + (segment (start 77.216 142.24) (end 76.2 142.24) (width 0.254) (layer F.Cu) (net 55) (tstamp 5673B9F2)) + (segment (start 113.665 158.115) (end 113.665 157.861) (width 0.25) (layer F.Cu) (net 56)) + (segment (start 113.665 157.861) (end 114.046 157.48) (width 0.25) (layer F.Cu) (net 56) (tstamp 5675D863)) + (segment (start 114.046 157.48) (end 116.84 157.48) (width 0.25) (layer F.Cu) (net 56) (tstamp 5675D864)) + (segment (start 113.665 160.147) (end 113.665 159.639) (width 0.25) (layer F.Cu) (net 57)) + (segment (start 113.792 159.512) (end 116.332 159.512) (width 0.25) (layer F.Cu) (net 57) (tstamp 5675D85C)) + (segment (start 113.665 159.639) (end 113.792 159.512) (width 0.25) (layer F.Cu) (net 57) (tstamp 5675D85B)) + (segment (start 116.332 159.512) (end 116.84 160.02) (width 0.25) (layer F.Cu) (net 57) (tstamp 5675D85D)) + (segment (start 89.166 155.067) (end 89.166 153.416) (width 0.254) (layer F.Cu) (net 58)) + (segment (start 87.663 155.702) (end 88.531 155.702) (width 0.254) (layer F.Cu) (net 58)) + (segment (start 88.531 155.702) (end 89.166 155.067) (width 0.254) (layer F.Cu) (net 58) (tstamp 5673B2E6)) + (segment (start 89.166 160.528) (end 89.166 158.877) (width 0.254) (layer F.Cu) (net 59)) + (segment (start 89.166 158.877) (end 89.166 158.635) (width 0.254) (layer F.Cu) (net 59)) + (segment (start 89.166 158.635) (end 88.773 158.242) (width 0.254) (layer F.Cu) (net 59) (tstamp 5673B2DC)) + (segment (start 88.773 158.242) (end 87.663 158.242) (width 0.254) (layer F.Cu) (net 59) (tstamp 5673B2DD)) + (segment (start 87.79 158.115) (end 87.663 158.242) (width 0.254) (layer F.Cu) (net 59) (tstamp 5673B248)) + (segment (start 80.506 146.05) (end 81.673 146.05) (width 0.25) (layer F.Cu) (net 60)) + (segment (start 80.506 147.701) (end 81.673 147.701) (width 0.25) (layer F.Cu) (net 61)) + (segment (start 80.506 149.352) (end 81.673 149.352) (width 0.25) (layer F.Cu) (net 62)) + (segment (start 84.455 150.991) (end 83.058 150.991) (width 0.254) (layer F.Cu) (net 63)) + (segment (start 83.058 150.991) (end 83.046 151.003) (width 0.254) (layer F.Cu) (net 63) (tstamp 5673BA41)) + (segment (start 80.391 153.555) (end 80.391 153.543) (width 0.254) (layer F.Cu) (net 64)) + (segment (start 80.391 153.543) (end 79.998 153.15) (width 0.254) (layer F.Cu) (net 64) (tstamp 5673B124)) + (segment (start 79.998 153.15) (end 79.998 152.146) (width 0.254) (layer F.Cu) (net 64) (tstamp 5673B125)) + (segment (start 82.263 154.432) (end 82.263 153.162) (width 0.254) (layer F.Cu) (net 65)) + (segment (start 80.911 155.055) (end 81.534 154.432) (width 0.254) (layer F.Cu) (net 65) (tstamp 5673B36A)) + (segment (start 81.534 154.432) (end 82.263 154.432) (width 0.254) (layer F.Cu) (net 65) (tstamp 5673B36B)) + (segment (start 80.391 155.055) (end 80.911 155.055) (width 0.254) (layer F.Cu) (net 65)) + (segment (start 80.391 158.889) (end 80.391 158.75) (width 0.254) (layer F.Cu) (net 66)) + (segment (start 80.391 158.75) (end 79.998 158.357) (width 0.254) (layer F.Cu) (net 66) (tstamp 5673B145)) + (segment (start 79.998 158.357) (end 79.998 157.48) (width 0.254) (layer F.Cu) (net 66) (tstamp 5673B146)) + (segment (start 82.263 159.512) (end 82.263 160.782) (width 0.254) (layer F.Cu) (net 67)) + (segment (start 80.391 160.389) (end 80.887 160.389) (width 0.254) (layer F.Cu) (net 67)) + (segment (start 81.28 160.782) (end 82.263 160.782) (width 0.254) (layer F.Cu) (net 67) (tstamp 5673B36F)) + (segment (start 80.887 160.389) (end 81.28 160.782) (width 0.254) (layer F.Cu) (net 67) (tstamp 5673B36E)) + +) diff --git a/PCB/WOT/Tinylab_proto1.kicad_pcb-bak b/PCB/WOT/Tinylab_proto1.kicad_pcb-bak new file mode 100644 index 00000000..b595887b --- /dev/null +++ b/PCB/WOT/Tinylab_proto1.kicad_pcb-bak @@ -0,0 +1,2551 @@ +(kicad_pcb (version 4) (host pcbnew "(2015-08-05 BZR 6055, Git fa29c62)-product") + + (general + (links 113) + (no_connects 6) + (area 72.535 130.44446 120.001667 163.587) + (thickness 1.6) + (drawings 5) + (tracks 539) + (zones 0) + (modules 51) + (nets 68) + ) + + (page A4) + (layers + (0 F.Cu signal) + (31 B.Cu signal) + (32 B.Adhes user hide) + (33 F.Adhes user hide) + (34 B.Paste user hide) + (35 F.Paste user hide) + (36 B.SilkS user hide) + (37 F.SilkS user) + (38 B.Mask user hide) + (39 F.Mask user hide) + (40 Dwgs.User user hide) + (41 Cmts.User user hide) + (42 Eco1.User user hide) + (43 Eco2.User user hide) + (44 Edge.Cuts user hide) + (45 Margin user hide) + (46 B.CrtYd user hide) + (47 F.CrtYd user) + (48 B.Fab user hide) + (49 F.Fab user hide) + ) + + (setup + (last_trace_width 0.25) + (user_trace_width 0.254) + (user_trace_width 0.508) + (user_trace_width 1.016) + (trace_clearance 0.2) + (zone_clearance 0.508) + (zone_45_only no) + (trace_min 0.2) + (segment_width 0.2) + (edge_width 0.1) + (via_size 0.6) + (via_drill 0.4) + (via_min_size 0.4) + (via_min_drill 0.3) + (uvia_size 0.3) + (uvia_drill 0.1) + (uvias_allowed no) + (uvia_min_size 0.2) + (uvia_min_drill 0.1) + (pcb_text_width 0.3) + (pcb_text_size 1.5 1.5) + (mod_edge_width 0.15) + (mod_text_size 1 1) + (mod_text_width 0.15) + (pad_size 1.5 1.5) + (pad_drill 0.6) + (pad_to_mask_clearance 0) + (aux_axis_origin 0 0) + (visible_elements 7FFFF361) + (pcbplotparams + (layerselection 0x010f0_80000001) + (usegerberextensions false) + (excludeedgelayer true) + (linewidth 0.100000) + (plotframeref false) + (viasonmask false) + (mode 1) + (useauxorigin false) + (hpglpennumber 1) + (hpglpenspeed 20) + (hpglpendiameter 15) + (hpglpenoverlay 2) + (psnegative false) + (psa4output false) + (plotreference true) + (plotvalue true) + (plotinvisibletext false) + (padsonsilk false) + (subtractmaskfromsilk false) + (outputformat 1) + (mirror false) + (drillshape 0) + (scaleselection 1) + (outputdirectory OUTPUT_V2/)) + ) + + (net 0 "") + (net 1 "Net-(C1-Pad1)") + (net 2 "Net-(C1-Pad2)") + (net 3 "Net-(C2-Pad1)") + (net 4 "Net-(C2-Pad2)") + (net 5 +5V) + (net 6 /AGND) + (net 7 /AVCC) + (net 8 /VGND) + (net 9 /VCC_PSU) + (net 10 "Net-(C7-Pad1)") + (net 11 "Net-(C7-Pad2)") + (net 12 "Net-(C11-Pad1)") + (net 13 "Net-(C14-Pad1)") + (net 14 "Net-(C14-Pad2)") + (net 15 "Net-(D1-Pad2)") + (net 16 /PSU_FEEDBACK) + (net 17 /CH2) + (net 18 "Net-(IC1-Pad3)") + (net 19 "Net-(IC1-Pad4)") + (net 20 "Net-(IC1-Pad5)") + (net 21 /DAC_OUT) + (net 22 /DAC_OUT2) + (net 23 "Net-(IC1-Pad8)") + (net 24 "Net-(IC1-Pad9)") + (net 25 "Net-(IC1-Pad10)") + (net 26 /XCK) + (net 27 /DIG_CH2) + (net 28 "Net-(IC1-Pad13)") + (net 29 "Net-(IC1-Pad16)") + (net 30 /DIG_CH1) + (net 31 "Net-(IC1-Pad20)") + (net 32 "Net-(IC1-Pad21)") + (net 33 "Net-(IC1-Pad22)") + (net 34 "Net-(IC1-Pad23)") + (net 35 /PSU_PWM) + (net 36 "Net-(IC1-Pad25)") + (net 37 /D-) + (net 38 /D+) + (net 39 "Net-(IC1-Pad28)") + (net 40 "Net-(IC1-Pad29)") + (net 41 "Net-(IC1-Pad32)") + (net 42 "Net-(IC1-Pad33)") + (net 43 "Net-(IC1-Pad34)") + (net 44 "Net-(IC1-Pad35)") + (net 45 "Net-(IC1-Pad36)") + (net 46 "Net-(IC1-Pad37)") + (net 47 "Net-(IC1-Pad41)") + (net 48 /CH1) + (net 49 "Net-(IC1-Pad43)") + (net 50 /AVCC_ON_2) + (net 51 "Net-(P2-Pad4)") + (net 52 "Net-(P3-Pad1)") + (net 53 "Net-(P3-Pad2)") + (net 54 "Net-(P3-Pad3)") + (net 55 "Net-(P3-Pad4)") + (net 56 "Net-(P8-Pad1)") + (net 57 "Net-(P8-Pad2)") + (net 58 "Net-(R1-Pad1)") + (net 59 "Net-(R2-Pad1)") + (net 60 "Net-(R11-Pad2)") + (net 61 "Net-(R12-Pad2)") + (net 62 "Net-(R13-Pad2)") + (net 63 "Net-(R10-Pad1)") + (net 64 "Net-(R15-Pad1)") + (net 65 "Net-(R15-Pad2)") + (net 66 "Net-(R17-Pad1)") + (net 67 "Net-(R17-Pad2)") + + (net_class Default "This is the default net class." + (clearance 0.2) + (trace_width 0.25) + (via_dia 0.6) + (via_drill 0.4) + (uvia_dia 0.3) + (uvia_drill 0.1) + (add_net +5V) + (add_net /AGND) + (add_net /AVCC) + (add_net /AVCC_ON_2) + (add_net /CH1) + (add_net /CH2) + (add_net /D+) + (add_net /D-) + (add_net /DAC_OUT) + (add_net /DAC_OUT2) + (add_net /DIG_CH1) + (add_net /DIG_CH2) + (add_net /PSU_FEEDBACK) + (add_net /PSU_PWM) + (add_net /VCC_PSU) + (add_net /VGND) + (add_net /XCK) + (add_net "Net-(C1-Pad1)") + (add_net "Net-(C1-Pad2)") + (add_net "Net-(C11-Pad1)") + (add_net "Net-(C14-Pad1)") + (add_net "Net-(C14-Pad2)") + (add_net "Net-(C2-Pad1)") + (add_net "Net-(C2-Pad2)") + (add_net "Net-(C7-Pad1)") + (add_net "Net-(C7-Pad2)") + (add_net "Net-(D1-Pad2)") + (add_net "Net-(IC1-Pad10)") + (add_net "Net-(IC1-Pad13)") + (add_net "Net-(IC1-Pad16)") + (add_net "Net-(IC1-Pad20)") + (add_net "Net-(IC1-Pad21)") + (add_net "Net-(IC1-Pad22)") + (add_net "Net-(IC1-Pad23)") + (add_net "Net-(IC1-Pad25)") + (add_net "Net-(IC1-Pad28)") + (add_net "Net-(IC1-Pad29)") + (add_net "Net-(IC1-Pad3)") + (add_net "Net-(IC1-Pad32)") + (add_net "Net-(IC1-Pad33)") + (add_net "Net-(IC1-Pad34)") + (add_net "Net-(IC1-Pad35)") + (add_net "Net-(IC1-Pad36)") + (add_net "Net-(IC1-Pad37)") + (add_net "Net-(IC1-Pad4)") + (add_net "Net-(IC1-Pad41)") + (add_net "Net-(IC1-Pad43)") + (add_net "Net-(IC1-Pad5)") + (add_net "Net-(IC1-Pad8)") + (add_net "Net-(IC1-Pad9)") + (add_net "Net-(P2-Pad4)") + (add_net "Net-(P3-Pad1)") + (add_net "Net-(P3-Pad2)") + (add_net "Net-(P3-Pad3)") + (add_net "Net-(P3-Pad4)") + (add_net "Net-(P8-Pad1)") + (add_net "Net-(P8-Pad2)") + (add_net "Net-(R1-Pad1)") + (add_net "Net-(R10-Pad1)") + (add_net "Net-(R11-Pad2)") + (add_net "Net-(R12-Pad2)") + (add_net "Net-(R13-Pad2)") + (add_net "Net-(R15-Pad1)") + (add_net "Net-(R15-Pad2)") + (add_net "Net-(R17-Pad1)") + (add_net "Net-(R17-Pad2)") + (add_net "Net-(R2-Pad1)") + ) + + (module Capacitors_SMD:C_0603 (layer F.Cu) (tedit 567B5D27) (tstamp 5673A8B8) + (at 91.186 156.591) + (descr "Capacitor SMD 0603, reflow soldering, AVX (see smccp.pdf)") + (tags "capacitor 0603") + (path /55CAB611) + (attr smd) + (fp_text reference C1 (at 1.016 -1.2954) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value C (at 0 1.9) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.45 -0.75) (end 1.45 -0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 -0.75) (end -1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.45 -0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.35 -0.6) (end 0.35 -0.6) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.35 0.6) (end -0.35 0.6) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 1 "Net-(C1-Pad1)")) + (pad 2 smd rect (at 0.75 0) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 2 "Net-(C1-Pad2)")) + (model Capacitors_SMD.3dshapes/C_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_SMD:C_0603 (layer F.Cu) (tedit 567B5EFE) (tstamp 5673A8BE) + (at 91.948 159.766 90) + (descr "Capacitor SMD 0603, reflow soldering, AVX (see smccp.pdf)") + (tags "capacitor 0603") + (path /55CAB4DE) + (attr smd) + (fp_text reference C2 (at -2.21996 0.28448 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value C (at 0 1.9 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.45 -0.75) (end 1.45 -0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 -0.75) (end -1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.45 -0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.35 -0.6) (end 0.35 -0.6) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.35 0.6) (end -0.35 0.6) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 90) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 3 "Net-(C2-Pad1)")) + (pad 2 smd rect (at 0.75 0 90) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 4 "Net-(C2-Pad2)")) + (model Capacitors_SMD.3dshapes/C_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_SMD:C_0603 (layer F.Cu) (tedit 567B5D0A) (tstamp 5673A8C4) + (at 111.887 142.621) + (descr "Capacitor SMD 0603, reflow soldering, AVX (see smccp.pdf)") + (tags "capacitor 0603") + (path /55CB13E1) + (attr smd) + (fp_text reference C3 (at 0.0254 -1.2954) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value C_Small (at 0 1.9) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.45 -0.75) (end 1.45 -0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 -0.75) (end -1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.45 -0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.35 -0.6) (end 0.35 -0.6) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.35 0.6) (end -0.35 0.6) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 5 +5V)) + (pad 2 smd rect (at 0.75 0) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 6 /AGND)) + (model Capacitors_SMD.3dshapes/C_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_SMD:C_0603 (layer F.Cu) (tedit 567B5D1B) (tstamp 5673A8CA) + (at 111.506 147.193 180) + (descr "Capacitor SMD 0603, reflow soldering, AVX (see smccp.pdf)") + (tags "capacitor 0603") + (path /55CB147C) + (attr smd) + (fp_text reference C4 (at -0.1524 -1.2954 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value C_Small (at 0 1.9 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.45 -0.75) (end 1.45 -0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 -0.75) (end -1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.45 -0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.35 -0.6) (end 0.35 -0.6) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.35 0.6) (end -0.35 0.6) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 180) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 7 /AVCC)) + (pad 2 smd rect (at 0.75 0 180) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 6 /AGND)) + (model Capacitors_SMD.3dshapes/C_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_SMD:C_0603 (layer F.Cu) (tedit 567B5DA3) (tstamp 5673A8D0) + (at 91.821 151.003 90) + (descr "Capacitor SMD 0603, reflow soldering, AVX (see smccp.pdf)") + (tags "capacitor 0603") + (path /55D60181) + (attr smd) + (fp_text reference C5 (at 1.905 0.8382 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value C_Small (at 0 1.9 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.45 -0.75) (end 1.45 -0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 -0.75) (end -1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.45 -0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.35 -0.6) (end 0.35 -0.6) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.35 0.6) (end -0.35 0.6) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 90) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 7 /AVCC)) + (pad 2 smd rect (at 0.75 0 90) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 6 /AGND)) + (model Capacitors_SMD.3dshapes/C_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_ThroughHole:C_Radial_D6.3_L11.2_P2.5 (layer F.Cu) (tedit 567B5BB7) (tstamp 5673A8D6) + (at 78.994 136.906 180) + (descr "Radial Electrolytic Capacitor, Diameter 6.3mm x Length 11.2mm, Pitch 2.5mm") + (tags "Electrolytic Capacitor") + (path /560719D9) + (fp_text reference C6 (at 0.127 -1.651 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value CP1 (at 1.25 4.4 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.325 -3.149) (end 1.325 3.149) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.465 -3.143) (end 1.465 3.143) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.605 -3.13) (end 1.605 -0.446) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.605 0.446) (end 1.605 3.13) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.745 -3.111) (end 1.745 -0.656) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.745 0.656) (end 1.745 3.111) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.885 -3.085) (end 1.885 -0.789) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.885 0.789) (end 1.885 3.085) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.025 -3.053) (end 2.025 -0.88) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.025 0.88) (end 2.025 3.053) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.165 -3.014) (end 2.165 -0.942) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.165 0.942) (end 2.165 3.014) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.305 -2.968) (end 2.305 -0.981) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.305 0.981) (end 2.305 2.968) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.445 -2.915) (end 2.445 -0.998) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.445 0.998) (end 2.445 2.915) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.585 -2.853) (end 2.585 -0.996) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.585 0.996) (end 2.585 2.853) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.725 -2.783) (end 2.725 -0.974) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.725 0.974) (end 2.725 2.783) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.865 -2.704) (end 2.865 -0.931) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.865 0.931) (end 2.865 2.704) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.005 -2.616) (end 3.005 -0.863) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.005 0.863) (end 3.005 2.616) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.145 -2.516) (end 3.145 -0.764) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.145 0.764) (end 3.145 2.516) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.285 -2.404) (end 3.285 -0.619) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.285 0.619) (end 3.285 2.404) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.425 -2.279) (end 3.425 -0.38) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.425 0.38) (end 3.425 2.279) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.565 -2.136) (end 3.565 2.136) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.705 -1.974) (end 3.705 1.974) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.845 -1.786) (end 3.845 1.786) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.985 -1.563) (end 3.985 1.563) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.125 -1.287) (end 4.125 1.287) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.265 -0.912) (end 4.265 0.912) (layer F.SilkS) (width 0.15)) + (fp_circle (center 2.5 0) (end 2.5 -1) (layer F.SilkS) (width 0.15)) + (fp_circle (center 1.25 0) (end 1.25 -3.1875) (layer F.SilkS) (width 0.15)) + (fp_circle (center 1.25 0) (end 1.25 -3.4) (layer F.CrtYd) (width 0.05)) + (pad 2 thru_hole circle (at 2.5 0 180) (size 1.3 1.3) (drill 0.8) (layers *.Cu *.Mask F.SilkS) + (net 8 /VGND)) + (pad 1 thru_hole rect (at 0 0 180) (size 1.3 1.3) (drill 0.8) (layers *.Cu *.Mask F.SilkS) + (net 9 /VCC_PSU)) + (model Capacitors_ThroughHole.3dshapes/C_Radial_D6.3_L11.2_P2.5.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_SMD:C_0603 (layer F.Cu) (tedit 5415D631) (tstamp 5673A8DC) + (at 78.74 154.432 90) + (descr "Capacitor SMD 0603, reflow soldering, AVX (see smccp.pdf)") + (tags "capacitor 0603") + (path /55CB630B) + (attr smd) + (fp_text reference C7 (at 0 -1.9 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value C (at 0 1.9 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.45 -0.75) (end 1.45 -0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 -0.75) (end -1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.45 -0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.35 -0.6) (end 0.35 -0.6) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.35 0.6) (end -0.35 0.6) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 90) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 10 "Net-(C7-Pad1)")) + (pad 2 smd rect (at 0.75 0 90) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 11 "Net-(C7-Pad2)")) + (model Capacitors_SMD.3dshapes/C_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_SMD:C_0603 (layer F.Cu) (tedit 567B5E33) (tstamp 5673A8E2) + (at 81.28 143.51 270) + (descr "Capacitor SMD 0603, reflow soldering, AVX (see smccp.pdf)") + (tags "capacitor 0603") + (path /56071A50) + (attr smd) + (fp_text reference C8 (at -0.0508 1.397 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value C (at 0 1.9 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.45 -0.75) (end 1.45 -0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 -0.75) (end -1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.45 -0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.35 -0.6) (end 0.35 -0.6) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.35 0.6) (end -0.35 0.6) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 270) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 9 /VCC_PSU)) + (pad 2 smd rect (at 0.75 0 270) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 8 /VGND)) + (model Capacitors_SMD.3dshapes/C_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_SMD:C_0603 (layer F.Cu) (tedit 567B5CDA) (tstamp 5673A8E8) + (at 97.536 141.351 270) + (descr "Capacitor SMD 0603, reflow soldering, AVX (see smccp.pdf)") + (tags "capacitor 0603") + (path /55D75F49) + (attr smd) + (fp_text reference C9 (at -2.413 -0.254 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value C_Small (at 0 1.9 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.45 -0.75) (end 1.45 -0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 -0.75) (end -1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.45 -0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.35 -0.6) (end 0.35 -0.6) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.35 0.6) (end -0.35 0.6) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 270) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 5 +5V)) + (pad 2 smd rect (at 0.75 0 270) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 8 /VGND)) + (model Capacitors_SMD.3dshapes/C_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_SMD:C_0603 (layer F.Cu) (tedit 567B5D24) (tstamp 5673A8EE) + (at 97.79 153.035 90) + (descr "Capacitor SMD 0603, reflow soldering, AVX (see smccp.pdf)") + (tags "capacitor 0603") + (path /5609699F) + (attr smd) + (fp_text reference C10 (at -0.0762 -1.27 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value C (at 0 1.9 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.45 -0.75) (end 1.45 -0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 -0.75) (end -1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.45 -0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.35 -0.6) (end 0.35 -0.6) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.35 0.6) (end -0.35 0.6) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 90) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 7 /AVCC)) + (pad 2 smd rect (at 0.75 0 90) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 6 /AGND)) + (model Capacitors_SMD.3dshapes/C_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_ThroughHole:C_Radial_D6.3_L11.2_P2.5 (layer F.Cu) (tedit 567B5E4A) (tstamp 5673A8F4) + (at 93.345 143.891 90) + (descr "Radial Electrolytic Capacitor, Diameter 6.3mm x Length 11.2mm, Pitch 2.5mm") + (tags "Electrolytic Capacitor") + (path /560735FE) + (fp_text reference C11 (at -1.4732 0.127 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value CP1 (at 1.25 4.4 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.325 -3.149) (end 1.325 3.149) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.465 -3.143) (end 1.465 3.143) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.605 -3.13) (end 1.605 -0.446) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.605 0.446) (end 1.605 3.13) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.745 -3.111) (end 1.745 -0.656) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.745 0.656) (end 1.745 3.111) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.885 -3.085) (end 1.885 -0.789) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.885 0.789) (end 1.885 3.085) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.025 -3.053) (end 2.025 -0.88) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.025 0.88) (end 2.025 3.053) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.165 -3.014) (end 2.165 -0.942) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.165 0.942) (end 2.165 3.014) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.305 -2.968) (end 2.305 -0.981) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.305 0.981) (end 2.305 2.968) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.445 -2.915) (end 2.445 -0.998) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.445 0.998) (end 2.445 2.915) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.585 -2.853) (end 2.585 -0.996) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.585 0.996) (end 2.585 2.853) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.725 -2.783) (end 2.725 -0.974) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.725 0.974) (end 2.725 2.783) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.865 -2.704) (end 2.865 -0.931) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.865 0.931) (end 2.865 2.704) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.005 -2.616) (end 3.005 -0.863) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.005 0.863) (end 3.005 2.616) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.145 -2.516) (end 3.145 -0.764) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.145 0.764) (end 3.145 2.516) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.285 -2.404) (end 3.285 -0.619) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.285 0.619) (end 3.285 2.404) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.425 -2.279) (end 3.425 -0.38) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.425 0.38) (end 3.425 2.279) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.565 -2.136) (end 3.565 2.136) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.705 -1.974) (end 3.705 1.974) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.845 -1.786) (end 3.845 1.786) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.985 -1.563) (end 3.985 1.563) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.125 -1.287) (end 4.125 1.287) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.265 -0.912) (end 4.265 0.912) (layer F.SilkS) (width 0.15)) + (fp_circle (center 2.5 0) (end 2.5 -1) (layer F.SilkS) (width 0.15)) + (fp_circle (center 1.25 0) (end 1.25 -3.1875) (layer F.SilkS) (width 0.15)) + (fp_circle (center 1.25 0) (end 1.25 -3.4) (layer F.CrtYd) (width 0.05)) + (pad 2 thru_hole circle (at 2.5 0 90) (size 1.3 1.3) (drill 0.8) (layers *.Cu *.Mask F.SilkS) + (net 8 /VGND)) + (pad 1 thru_hole rect (at 0 0 90) (size 1.3 1.3) (drill 0.8) (layers *.Cu *.Mask F.SilkS) + (net 12 "Net-(C11-Pad1)")) + (model Capacitors_ThroughHole.3dshapes/C_Radial_D6.3_L11.2_P2.5.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_SMD:C_0603 (layer F.Cu) (tedit 567B5E45) (tstamp 5673A8FA) + (at 88.9 143.129 90) + (descr "Capacitor SMD 0603, reflow soldering, AVX (see smccp.pdf)") + (tags "capacitor 0603") + (path /5607355F) + (attr smd) + (fp_text reference C12 (at -2.1082 0.4064 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value C (at 0 1.9 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.45 -0.75) (end 1.45 -0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 -0.75) (end -1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.45 -0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.35 -0.6) (end 0.35 -0.6) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.35 0.6) (end -0.35 0.6) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 90) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 12 "Net-(C11-Pad1)")) + (pad 2 smd rect (at 0.75 0 90) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 8 /VGND)) + (model Capacitors_SMD.3dshapes/C_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_SMD:C_0603 (layer F.Cu) (tedit 5415D631) (tstamp 5673A900) + (at 114.427 152.527 270) + (descr "Capacitor SMD 0603, reflow soldering, AVX (see smccp.pdf)") + (tags "capacitor 0603") + (path /5608B4BE) + (attr smd) + (fp_text reference C13 (at 0 -1.9 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value C (at 0 1.9 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.45 -0.75) (end 1.45 -0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 -0.75) (end -1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.45 -0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.35 -0.6) (end 0.35 -0.6) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.35 0.6) (end -0.35 0.6) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 270) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 7 /AVCC)) + (pad 2 smd rect (at 0.75 0 270) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 6 /AGND)) + (model Capacitors_SMD.3dshapes/C_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_SMD:C_0603 (layer F.Cu) (tedit 567B5E84) (tstamp 5673A906) + (at 78.74 159.766 90) + (descr "Capacitor SMD 0603, reflow soldering, AVX (see smccp.pdf)") + (tags "capacitor 0603") + (path /566DF655) + (attr smd) + (fp_text reference C14 (at 13.6144 6.731 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value C (at 0 1.9 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.45 -0.75) (end 1.45 -0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 -0.75) (end -1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.45 -0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.35 -0.6) (end 0.35 -0.6) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.35 0.6) (end -0.35 0.6) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 90) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 13 "Net-(C14-Pad1)")) + (pad 2 smd rect (at 0.75 0 90) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 14 "Net-(C14-Pad2)")) + (model Capacitors_SMD.3dshapes/C_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_ThroughHole:C_Radial_D6.3_L11.2_P2.5 (layer F.Cu) (tedit 567B5BBA) (tstamp 5673A90C) + (at 116.078 144.018 270) + (descr "Radial Electrolytic Capacitor, Diameter 6.3mm x Length 11.2mm, Pitch 2.5mm") + (tags "Electrolytic Capacitor") + (path /566F5A75) + (fp_text reference C15 (at -0.254 -1.397 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value CP1 (at 1.25 4.4 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.325 -3.149) (end 1.325 3.149) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.465 -3.143) (end 1.465 3.143) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.605 -3.13) (end 1.605 -0.446) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.605 0.446) (end 1.605 3.13) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.745 -3.111) (end 1.745 -0.656) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.745 0.656) (end 1.745 3.111) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.885 -3.085) (end 1.885 -0.789) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.885 0.789) (end 1.885 3.085) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.025 -3.053) (end 2.025 -0.88) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.025 0.88) (end 2.025 3.053) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.165 -3.014) (end 2.165 -0.942) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.165 0.942) (end 2.165 3.014) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.305 -2.968) (end 2.305 -0.981) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.305 0.981) (end 2.305 2.968) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.445 -2.915) (end 2.445 -0.998) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.445 0.998) (end 2.445 2.915) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.585 -2.853) (end 2.585 -0.996) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.585 0.996) (end 2.585 2.853) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.725 -2.783) (end 2.725 -0.974) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.725 0.974) (end 2.725 2.783) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.865 -2.704) (end 2.865 -0.931) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.865 0.931) (end 2.865 2.704) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.005 -2.616) (end 3.005 -0.863) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.005 0.863) (end 3.005 2.616) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.145 -2.516) (end 3.145 -0.764) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.145 0.764) (end 3.145 2.516) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.285 -2.404) (end 3.285 -0.619) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.285 0.619) (end 3.285 2.404) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.425 -2.279) (end 3.425 -0.38) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.425 0.38) (end 3.425 2.279) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.565 -2.136) (end 3.565 2.136) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.705 -1.974) (end 3.705 1.974) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.845 -1.786) (end 3.845 1.786) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.985 -1.563) (end 3.985 1.563) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.125 -1.287) (end 4.125 1.287) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.265 -0.912) (end 4.265 0.912) (layer F.SilkS) (width 0.15)) + (fp_circle (center 2.5 0) (end 2.5 -1) (layer F.SilkS) (width 0.15)) + (fp_circle (center 1.25 0) (end 1.25 -3.1875) (layer F.SilkS) (width 0.15)) + (fp_circle (center 1.25 0) (end 1.25 -3.4) (layer F.CrtYd) (width 0.05)) + (pad 2 thru_hole circle (at 2.5 0 270) (size 1.3 1.3) (drill 0.8) (layers *.Cu *.Mask F.SilkS) + (net 6 /AGND)) + (pad 1 thru_hole rect (at 0 0 270) (size 1.3 1.3) (drill 0.8) (layers *.Cu *.Mask F.SilkS) + (net 7 /AVCC)) + (model Capacitors_ThroughHole.3dshapes/C_Radial_D6.3_L11.2_P2.5.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Diodes_ThroughHole:Diode_DO-41_SOD81_Horizontal_RM10 (layer F.Cu) (tedit 567B5BAF) (tstamp 5673A912) + (at 82.55 135.128) + (descr "Diode, DO-41, SOD81, Horizontal, RM 10mm,") + (tags "Diode, DO-41, SOD81, Horizontal, RM 10mm, 1N4007, SB140,") + (path /5606FDB4) + (fp_text reference D1 (at 4.445 2.921) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value D_Schottky (at 4.37134 -3.55854) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 7.62 -0.00254) (end 8.636 -0.00254) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.794 -0.00254) (end 1.524 -0.00254) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.048 -1.27254) (end 3.048 1.26746) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.302 -1.27254) (end 3.302 1.26746) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.556 -1.27254) (end 3.556 1.26746) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.794 -1.27254) (end 2.794 1.26746) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.81 -1.27254) (end 2.54 1.26746) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.54 -1.27254) (end 3.81 1.26746) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.81 -1.27254) (end 3.81 1.26746) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.175 -1.27254) (end 3.175 1.26746) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.54 1.26746) (end 2.54 -1.27254) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.54 -1.27254) (end 7.62 -1.27254) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.62 -1.27254) (end 7.62 1.26746) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.62 1.26746) (end 2.54 1.26746) (layer F.SilkS) (width 0.15)) + (pad 2 thru_hole circle (at 10.16 -0.00254 180) (size 1.99898 1.99898) (drill 1.27) (layers *.Cu *.Mask F.SilkS) + (net 15 "Net-(D1-Pad2)")) + (pad 1 thru_hole rect (at 0 -0.00254 180) (size 1.99898 1.99898) (drill 1.00076) (layers *.Cu *.Mask F.SilkS) + (net 12 "Net-(C11-Pad1)")) + ) + + (module Capacitors_SMD:C_1206 (layer F.Cu) (tedit 5415D7BD) (tstamp 5673A918) + (at 105.791 142.113 180) + (descr "Capacitor SMD 1206, reflow soldering, AVX (see smccp.pdf)") + (tags "capacitor 1206") + (path /55D739F3) + (attr smd) + (fp_text reference F1 (at 0 -2.3 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value F_Small (at 0 2.3 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -2.3 -1.15) (end 2.3 -1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.3 1.15) (end 2.3 1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.3 -1.15) (end -2.3 1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.3 -1.15) (end 2.3 1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1 -1.025) (end -1 -1.025) (layer F.SilkS) (width 0.15)) + (fp_line (start -1 1.025) (end 1 1.025) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -1.5 0 180) (size 1 1.6) (layers F.Cu F.Paste F.Mask) + (net 6 /AGND)) + (pad 2 smd rect (at 1.5 0 180) (size 1 1.6) (layers F.Cu F.Paste F.Mask) + (net 8 /VGND)) + (model Capacitors_SMD.3dshapes/C_1206.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Housings_QFP:LQFP-44_10x10mm_Pitch0.8mm (layer F.Cu) (tedit 567B5D1F) (tstamp 5673A948) + (at 105.41 154.051 90) + (descr "LQFP44 (see Appnote_PCB_Guidelines_TRINAMIC_packages.pdf)") + (tags "QFP 0.8") + (path /55CA8F25) + (attr smd) + (fp_text reference IC1 (at -0.0762 0.3048 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value ATXMEGA16A4U-A (at 0 7.65 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -6.9 -6.9) (end -6.9 6.9) (layer F.CrtYd) (width 0.05)) + (fp_line (start 6.9 -6.9) (end 6.9 6.9) (layer F.CrtYd) (width 0.05)) + (fp_line (start -6.9 -6.9) (end 6.9 -6.9) (layer F.CrtYd) (width 0.05)) + (fp_line (start -6.9 6.9) (end 6.9 6.9) (layer F.CrtYd) (width 0.05)) + (fp_line (start -5.175 -5.175) (end -5.175 -4.505) (layer F.SilkS) (width 0.15)) + (fp_line (start 5.175 -5.175) (end 5.175 -4.505) (layer F.SilkS) (width 0.15)) + (fp_line (start 5.175 5.175) (end 5.175 4.505) (layer F.SilkS) (width 0.15)) + (fp_line (start -5.175 5.175) (end -5.175 4.505) (layer F.SilkS) (width 0.15)) + (fp_line (start -5.175 -5.175) (end -4.505 -5.175) (layer F.SilkS) (width 0.15)) + (fp_line (start -5.175 5.175) (end -4.505 5.175) (layer F.SilkS) (width 0.15)) + (fp_line (start 5.175 5.175) (end 4.505 5.175) (layer F.SilkS) (width 0.15)) + (fp_line (start 5.175 -5.175) (end 4.505 -5.175) (layer F.SilkS) (width 0.15)) + (fp_line (start -5.175 -4.505) (end -6.65 -4.505) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -5.85 -4 90) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 16 /PSU_FEEDBACK)) + (pad 2 smd rect (at -5.85 -3.2 90) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 17 /CH2)) + (pad 3 smd rect (at -5.85 -2.4 90) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 18 "Net-(IC1-Pad3)")) + (pad 4 smd rect (at -5.85 -1.6 90) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 19 "Net-(IC1-Pad4)")) + (pad 5 smd rect (at -5.85 -0.8 90) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 20 "Net-(IC1-Pad5)")) + (pad 6 smd rect (at -5.85 0 90) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 21 /DAC_OUT)) + (pad 7 smd rect (at -5.85 0.8 90) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 22 /DAC_OUT2)) + (pad 8 smd rect (at -5.85 1.6 90) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 23 "Net-(IC1-Pad8)")) + (pad 9 smd rect (at -5.85 2.4 90) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 24 "Net-(IC1-Pad9)")) + (pad 10 smd rect (at -5.85 3.2 90) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 25 "Net-(IC1-Pad10)")) + (pad 11 smd rect (at -5.85 4 90) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 26 /XCK)) + (pad 12 smd rect (at -4 5.85 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 27 /DIG_CH2)) + (pad 13 smd rect (at -3.2 5.85 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 28 "Net-(IC1-Pad13)")) + (pad 14 smd rect (at -2.4 5.85 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 6 /AGND)) + (pad 15 smd rect (at -1.6 5.85 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 26 /XCK)) + (pad 16 smd rect (at -0.8 5.85 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 29 "Net-(IC1-Pad16)")) + (pad 17 smd rect (at 0 5.85 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 30 /DIG_CH1)) + (pad 18 smd rect (at 0.8 5.85 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 6 /AGND)) + (pad 19 smd rect (at 1.6 5.85 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 7 /AVCC)) + (pad 20 smd rect (at 2.4 5.85 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 31 "Net-(IC1-Pad20)")) + (pad 21 smd rect (at 3.2 5.85 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 32 "Net-(IC1-Pad21)")) + (pad 22 smd rect (at 4 5.85 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 33 "Net-(IC1-Pad22)")) + (pad 23 smd rect (at 5.85 4 90) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 34 "Net-(IC1-Pad23)")) + (pad 24 smd rect (at 5.85 3.2 90) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 35 /PSU_PWM)) + (pad 25 smd rect (at 5.85 2.4 90) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 36 "Net-(IC1-Pad25)")) + (pad 26 smd rect (at 5.85 1.6 90) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 37 /D-)) + (pad 27 smd rect (at 5.85 0.8 90) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 38 /D+)) + (pad 28 smd rect (at 5.85 0 90) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 39 "Net-(IC1-Pad28)")) + (pad 29 smd rect (at 5.85 -0.8 90) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 40 "Net-(IC1-Pad29)")) + (pad 30 smd rect (at 5.85 -1.6 90) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 6 /AGND)) + (pad 31 smd rect (at 5.85 -2.4 90) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 7 /AVCC)) + (pad 32 smd rect (at 5.85 -3.2 90) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 41 "Net-(IC1-Pad32)")) + (pad 33 smd rect (at 5.85 -4 90) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 42 "Net-(IC1-Pad33)")) + (pad 34 smd rect (at 4 -5.85 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 43 "Net-(IC1-Pad34)")) + (pad 35 smd rect (at 3.2 -5.85 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 44 "Net-(IC1-Pad35)")) + (pad 36 smd rect (at 2.4 -5.85 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 45 "Net-(IC1-Pad36)")) + (pad 37 smd rect (at 1.6 -5.85 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 46 "Net-(IC1-Pad37)")) + (pad 38 smd rect (at 0.8 -5.85 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 6 /AGND)) + (pad 39 smd rect (at 0 -5.85 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 7 /AVCC)) + (pad 40 smd rect (at -0.8 -5.85 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 17 /CH2)) + (pad 41 smd rect (at -1.6 -5.85 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 47 "Net-(IC1-Pad41)")) + (pad 42 smd rect (at -2.4 -5.85 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 48 /CH1)) + (pad 43 smd rect (at -3.2 -5.85 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 49 "Net-(IC1-Pad43)")) + (pad 44 smd rect (at -4 -5.85 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 50 /AVCC_ON_2)) + (model Housings_QFP.3dshapes/LQFP-44_10x10mm_Pitch0.8mm.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Diodes_ThroughHole:Diode_DO-41_SOD81_Horizontal_RM10 (layer F.Cu) (tedit 567B5BAC) (tstamp 5673A94E) + (at 92.456 137.922 180) + (descr "Diode, DO-41, SOD81, Horizontal, RM 10mm,") + (tags "Diode, DO-41, SOD81, Horizontal, RM 10mm, 1N4007, SB140,") + (path /5606EE9E) + (fp_text reference L1 (at 4.572 2.667 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value INDUCTOR (at 4.37134 -3.55854 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 7.62 -0.00254) (end 8.636 -0.00254) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.794 -0.00254) (end 1.524 -0.00254) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.048 -1.27254) (end 3.048 1.26746) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.302 -1.27254) (end 3.302 1.26746) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.556 -1.27254) (end 3.556 1.26746) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.794 -1.27254) (end 2.794 1.26746) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.81 -1.27254) (end 2.54 1.26746) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.54 -1.27254) (end 3.81 1.26746) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.81 -1.27254) (end 3.81 1.26746) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.175 -1.27254) (end 3.175 1.26746) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.54 1.26746) (end 2.54 -1.27254) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.54 -1.27254) (end 7.62 -1.27254) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.62 -1.27254) (end 7.62 1.26746) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.62 1.26746) (end 2.54 1.26746) (layer F.SilkS) (width 0.15)) + (pad 2 thru_hole circle (at 10.16 -0.00254) (size 1.99898 1.99898) (drill 1.27) (layers *.Cu *.Mask F.SilkS) + (net 9 /VCC_PSU)) + (pad 1 thru_hole rect (at 0 -0.00254) (size 1.99898 1.99898) (drill 1.00076) (layers *.Cu *.Mask F.SilkS) + (net 15 "Net-(D1-Pad2)")) + ) + + (module Pin_Headers:Pin_Header_Straight_1x04 (layer F.Cu) (tedit 567B5BDC) (tstamp 5673A956) + (at 94.488 159.512 180) + (descr "Through hole pin header") + (tags "pin header") + (path /55CAB35C) + (fp_text reference P1 (at -2.54 -0.254 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value SCOPE_IN (at 0 -3.1 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.75 -1.75) (end -1.75 9.4) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.75 -1.75) (end 1.75 9.4) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 -1.75) (end 1.75 -1.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 9.4) (end 1.75 9.4) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.27 1.27) (end -1.27 8.89) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.27 1.27) (end 1.27 8.89) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.55 -1.55) (end 1.55 0) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.27 8.89) (end 1.27 8.89) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.27 1.27) (end -1.27 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.55 0) (end -1.55 -1.55) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.55 -1.55) (end 1.55 -1.55) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole rect (at 0 0 180) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 3 "Net-(C2-Pad1)")) + (pad 2 thru_hole oval (at 0 2.54 180) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 4 "Net-(C2-Pad2)")) + (pad 3 thru_hole oval (at 0 5.08 180) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 2 "Net-(C1-Pad2)")) + (pad 4 thru_hole oval (at 0 7.62 180) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 1 "Net-(C1-Pad1)")) + (model Pin_Headers.3dshapes/Pin_Header_Straight_1x04.wrl + (at (xyz 0 -0.15 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 90)) + ) + ) + + (module Connect:USB_Micro-B (layer F.Cu) (tedit 567B5CC4) (tstamp 5673A963) + (at 114.554 137.668 180) + (descr "Micro USB Type B Receptacle") + (tags "USB USB_B USB_micro USB_OTG") + (path /55CA90D2) + (attr smd) + (fp_text reference P2 (at 0 0.762 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value USB_OTG (at 0 4.8 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -4.6 -2.8) (end 4.6 -2.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 4.6 -2.8) (end 4.6 4.05) (layer F.CrtYd) (width 0.05)) + (fp_line (start 4.6 4.05) (end -4.6 4.05) (layer F.CrtYd) (width 0.05)) + (fp_line (start -4.6 4.05) (end -4.6 -2.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -4.3509 3.81746) (end 4.3491 3.81746) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.3509 -2.58754) (end 4.3491 -2.58754) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.3491 -2.58754) (end 4.3491 3.81746) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.3491 2.58746) (end -4.3509 2.58746) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.3509 3.81746) (end -4.3509 -2.58754) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -1.3009 -1.56254 270) (size 1.35 0.4) (layers F.Cu F.Paste F.Mask) + (net 5 +5V)) + (pad 2 smd rect (at -0.6509 -1.56254 270) (size 1.35 0.4) (layers F.Cu F.Paste F.Mask) + (net 37 /D-)) + (pad 3 smd rect (at -0.0009 -1.56254 270) (size 1.35 0.4) (layers F.Cu F.Paste F.Mask) + (net 38 /D+)) + (pad 4 smd rect (at 0.6491 -1.56254 270) (size 1.35 0.4) (layers F.Cu F.Paste F.Mask) + (net 51 "Net-(P2-Pad4)")) + (pad 5 smd rect (at 1.2991 -1.56254 270) (size 1.35 0.4) (layers F.Cu F.Paste F.Mask) + (net 6 /AGND)) + (pad 6 thru_hole oval (at -2.5009 -1.56254 270) (size 0.95 1.25) (drill oval 0.55 0.85) (layers *.Cu *.Mask F.SilkS) + (net 6 /AGND)) + (pad 6 thru_hole oval (at 2.4991 -1.56254 270) (size 0.95 1.25) (drill oval 0.55 0.85) (layers *.Cu *.Mask F.SilkS) + (net 6 /AGND)) + (pad 6 thru_hole oval (at -3.5009 1.13746 270) (size 1.55 1) (drill oval 1.15 0.5) (layers *.Cu *.Mask F.SilkS) + (net 6 /AGND)) + (pad 6 thru_hole oval (at 3.4991 1.13746 270) (size 1.55 1) (drill oval 1.15 0.5) (layers *.Cu *.Mask F.SilkS) + (net 6 /AGND)) + ) + + (module Pin_Headers:Pin_Header_Straight_1x04 locked (layer F.Cu) (tedit 567B5DDC) (tstamp 5673A96B) + (at 76.2 149.86 180) + (descr "Through hole pin header") + (tags "pin header") + (path /55CBF4D5) + (fp_text reference P3 (at -1.8796 0.4826 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value DIG_OUT (at 2.54 3.81 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.75 -1.75) (end -1.75 9.4) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.75 -1.75) (end 1.75 9.4) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 -1.75) (end 1.75 -1.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 9.4) (end 1.75 9.4) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.27 1.27) (end -1.27 8.89) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.27 1.27) (end 1.27 8.89) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.55 -1.55) (end 1.55 0) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.27 8.89) (end 1.27 8.89) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.27 1.27) (end -1.27 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.55 0) (end -1.55 -1.55) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.55 -1.55) (end 1.55 -1.55) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole rect (at 0 0 180) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 52 "Net-(P3-Pad1)")) + (pad 2 thru_hole oval (at 0 2.54 180) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 53 "Net-(P3-Pad2)")) + (pad 3 thru_hole oval (at 0 5.08 180) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 54 "Net-(P3-Pad3)")) + (pad 4 thru_hole oval (at 0 7.62 180) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 55 "Net-(P3-Pad4)")) + (model Pin_Headers.3dshapes/Pin_Header_Straight_1x04.wrl + (at (xyz 0 -0.15 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 90)) + ) + ) + + (module Pin_Headers:Pin_Header_Straight_2x02 (layer F.Cu) (tedit 567B5CD3) (tstamp 5673A973) + (at 105.156 135.382) + (descr "Through hole pin header") + (tags "pin header") + (path /56069A87) + (fp_text reference P4 (at -2.159 -0.127 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value PDI (at 0 -3.1) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.75 -1.75) (end -1.75 4.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start 4.3 -1.75) (end 4.3 4.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 -1.75) (end 4.3 -1.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 4.3) (end 4.3 4.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.55 0) (end -1.55 -1.55) (layer F.SilkS) (width 0.15)) + (fp_line (start 0 -1.55) (end -1.55 -1.55) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.27 1.27) (end 1.27 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.27 1.27) (end 1.27 -1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.27 -1.27) (end 3.81 -1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.81 -1.27) (end 3.81 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.81 3.81) (end -1.27 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.27 3.81) (end -1.27 1.27) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole rect (at 0 0) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 7 /AVCC)) + (pad 2 thru_hole oval (at 2.54 0) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 43 "Net-(IC1-Pad34)")) + (pad 3 thru_hole oval (at 0 2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 6 /AGND)) + (pad 4 thru_hole oval (at 2.54 2.54) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 44 "Net-(IC1-Pad35)")) + (model Pin_Headers.3dshapes/Pin_Header_Straight_2x02.wrl + (at (xyz 0.05 -0.05 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 90)) + ) + ) + + (module Pin_Headers:Pin_Header_Straight_1x03 (layer F.Cu) (tedit 567B5CD0) (tstamp 5673A97A) + (at 100.33 140.462 180) + (descr "Through hole pin header") + (tags "pin header") + (path /56065DA8) + (fp_text reference P5 (at -1.905 1.143 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value CONN_01X03 (at 0 -3.1 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.75 -1.75) (end -1.75 6.85) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.75 -1.75) (end 1.75 6.85) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 -1.75) (end 1.75 -1.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 6.85) (end 1.75 6.85) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.27 1.27) (end -1.27 6.35) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.27 6.35) (end 1.27 6.35) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.27 6.35) (end 1.27 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.55 -1.55) (end 1.55 0) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.27 1.27) (end -1.27 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.55 0) (end -1.55 -1.55) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.55 -1.55) (end 1.55 -1.55) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole rect (at 0 0 180) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 5 +5V)) + (pad 2 thru_hole oval (at 0 2.54 180) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 9 /VCC_PSU)) + (pad 3 thru_hole oval (at 0 5.08 180) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 7 /AVCC)) + (model Pin_Headers.3dshapes/Pin_Header_Straight_1x03.wrl + (at (xyz 0 -0.1 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 90)) + ) + ) + + (module Pin_Headers:Pin_Header_Straight_1x04 locked (layer F.Cu) (tedit 567B5E7D) (tstamp 5673A982) + (at 76.2 152.4) + (descr "Through hole pin header") + (tags "pin header") + (path /566DF832) + (fp_text reference P6 (at 9.0678 -6.1722 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value DAC_OUT (at 2.54 5.08 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.75 -1.75) (end -1.75 9.4) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.75 -1.75) (end 1.75 9.4) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 -1.75) (end 1.75 -1.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 9.4) (end 1.75 9.4) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.27 1.27) (end -1.27 8.89) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.27 1.27) (end 1.27 8.89) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.55 -1.55) (end 1.55 0) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.27 8.89) (end 1.27 8.89) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.27 1.27) (end -1.27 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.55 0) (end -1.55 -1.55) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.55 -1.55) (end 1.55 -1.55) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole rect (at 0 0) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 11 "Net-(C7-Pad2)")) + (pad 2 thru_hole oval (at 0 2.54) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 10 "Net-(C7-Pad1)")) + (pad 3 thru_hole oval (at 0 5.08) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 14 "Net-(C14-Pad2)")) + (pad 4 thru_hole oval (at 0 7.62) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 13 "Net-(C14-Pad1)")) + (model Pin_Headers.3dshapes/Pin_Header_Straight_1x04.wrl + (at (xyz 0 -0.15 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 90)) + ) + ) + + (module Pin_Headers:Pin_Header_Straight_2x02 locked (layer F.Cu) (tedit 567B5E3B) (tstamp 5673A98A) + (at 86.36 143.51 180) + (descr "Through hole pin header") + (tags "pin header") + (path /55CC540F) + (fp_text reference P7 (at -2.2606 3.1242 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value HVO (at -3.429 1.016 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.75 -1.75) (end -1.75 4.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start 4.3 -1.75) (end 4.3 4.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 -1.75) (end 4.3 -1.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 4.3) (end 4.3 4.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.55 0) (end -1.55 -1.55) (layer F.SilkS) (width 0.15)) + (fp_line (start 0 -1.55) (end -1.55 -1.55) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.27 1.27) (end 1.27 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.27 1.27) (end 1.27 -1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.27 -1.27) (end 3.81 -1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.81 -1.27) (end 3.81 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.81 3.81) (end -1.27 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.27 3.81) (end -1.27 1.27) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole rect (at 0 0 180) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 12 "Net-(C11-Pad1)")) + (pad 2 thru_hole oval (at 2.54 0 180) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 8 /VGND)) + (pad 3 thru_hole oval (at 0 2.54 180) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 8 /VGND)) + (pad 4 thru_hole oval (at 2.54 2.54 180) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 8 /VGND)) + (model Pin_Headers.3dshapes/Pin_Header_Straight_2x02.wrl + (at (xyz 0.05 -0.05 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 90)) + ) + ) + + (module Pin_Headers:Pin_Header_Straight_1x02 (layer F.Cu) (tedit 567B5D10) (tstamp 5673A990) + (at 116.84 157.48) + (descr "Through hole pin header") + (tags "pin header") + (path /55D6DB77) + (fp_text reference P8 (at 0.254 -2.3368) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value DIG_IN (at 0 -3.1) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.27 1.27) (end 1.27 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.55 -1.55) (end 1.55 0) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.75 -1.75) (end -1.75 4.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.75 -1.75) (end 1.75 4.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 -1.75) (end 1.75 -1.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 4.3) (end 1.75 4.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.27 1.27) (end -1.27 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.55 0) (end -1.55 -1.55) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.55 -1.55) (end 1.55 -1.55) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.27 1.27) (end -1.27 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.27 3.81) (end 1.27 3.81) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole rect (at 0 0) (size 2.032 2.032) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 56 "Net-(P8-Pad1)")) + (pad 2 thru_hole oval (at 0 2.54) (size 2.032 2.032) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 57 "Net-(P8-Pad2)")) + (model Pin_Headers.3dshapes/Pin_Header_Straight_1x02.wrl + (at (xyz 0 -0.05 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 90)) + ) + ) + + (module SMD:SOT-23-3 (layer F.Cu) (tedit 5508E933) (tstamp 5673A997) + (at 95.885 137.922 270) + (path /5606F6D4) + (fp_text reference Q1 (at 2.5 0 360) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value Q_NMOS_GSD (at -2.2 0 360) (layer F.Fab) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 1 -0.4) (end 1.1 -0.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -0.8) (end -1.5 0.8) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 0.8) (end 1.5 0.8) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 0.8) (end 1.5 -0.8) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 -0.8) (end -1.5 -0.8) (layer F.SilkS) (width 0.15)) + (pad 3 smd rect (at 0 1.4 270) (size 0.6 0.9) (layers F.Cu F.Paste F.Mask) + (net 15 "Net-(D1-Pad2)")) + (pad 2 smd rect (at -0.95 -1.4 270) (size 0.6 0.9) (layers F.Cu F.Paste F.Mask) + (net 8 /VGND)) + (pad 1 smd rect (at 0.95 -1.4 270) (size 0.6 0.9) (layers F.Cu F.Paste F.Mask) + (net 35 /PSU_PWM)) + (model 3D/SMD/SOT-23-3.wrl + (at (xyz 0 0 0)) + (scale (xyz 0.3937 0.3937 0.3937)) + (rotate (xyz 0 0 90)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 567B5F80) (tstamp 5673A99D) + (at 89.916 155.067) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /55CAAB95) + (attr smd) + (fp_text reference R1 (at -4.3942 -8.9408 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 58 "Net-(R1-Pad1)")) + (pad 2 smd rect (at 0.75 0) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 1 "Net-(C1-Pad1)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 567B5F66) (tstamp 5673A9A3) + (at 89.916 160.528) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /55CAAD4C) + (attr smd) + (fp_text reference R2 (at -4.19608 -14.56944 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 59 "Net-(R2-Pad1)")) + (pad 2 smd rect (at 0.75 0) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 3 "Net-(C2-Pad1)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 567B5F86) (tstamp 5673A9A9) + (at 89.916 153.416) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /55CAABF4) + (attr smd) + (fp_text reference R3 (at -4.5085 -6.9215 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.8796) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 58 "Net-(R1-Pad1)")) + (pad 2 smd rect (at 0.75 0) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 50 /AVCC_ON_2)) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 567B5F7C) (tstamp 5673A9AF) + (at 89.916 158.877 180) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /55CAAD11) + (attr smd) + (fp_text reference R4 (at 4.0132 12.573 360) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 180) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 50 /AVCC_ON_2)) + (pad 2 smd rect (at 0.75 0 180) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 59 "Net-(R2-Pad1)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 567B5F8A) (tstamp 5673A9B5) + (at 89.789 151.765 180) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /55CAAC5F) + (attr smd) + (fp_text reference R5 (at 4.26466 5.24764 360) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 180) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 7 /AVCC)) + (pad 2 smd rect (at 0.75 0 180) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 50 /AVCC_ON_2)) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 567B5F8C) (tstamp 5673A9BB) + (at 89.789 150.114 180) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /55CAACD2) + (attr smd) + (fp_text reference R6 (at 4.37642 3.8481 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 180) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 6 /AGND)) + (pad 2 smd rect (at 0.75 0 180) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 50 /AVCC_ON_2)) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 567B5E09) (tstamp 5673A9C1) + (at 79.756 146.05 180) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /55CBCDA5) + (attr smd) + (fp_text reference R7 (at -5.5372 -0.3556 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 180) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 60 "Net-(R11-Pad2)")) + (pad 2 smd rect (at 0.75 0 180) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 55 "Net-(P3-Pad4)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 567B5E1F) (tstamp 5673A9C7) + (at 79.756 147.701 180) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /55CBE401) + (attr smd) + (fp_text reference R8 (at -5.4356 1.4732 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 180) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 61 "Net-(R12-Pad2)")) + (pad 2 smd rect (at 0.75 0 180) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 54 "Net-(P3-Pad3)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 567B5E1A) (tstamp 5673A9CD) + (at 79.756 149.352 180) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /55CBE16B) + (attr smd) + (fp_text reference R9 (at -5.3594 3.302 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 180) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 62 "Net-(R13-Pad2)")) + (pad 2 smd rect (at 0.75 0 180) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 53 "Net-(P3-Pad2)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 567B5E17) (tstamp 5673A9D3) + (at 82.296 151.003 180) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /55CBE2C7) + (attr smd) + (fp_text reference R10 (at -2.794 4.8514 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 180) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 63 "Net-(R10-Pad1)")) + (pad 2 smd rect (at 0.75 0 180) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 52 "Net-(P3-Pad1)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 567B5DB5) (tstamp 5673A9D9) + (at 82.423 146.05 180) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /55CBCD2A) + (attr smd) + (fp_text reference R11 (at -2.8702 -0.0762 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 180) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 39 "Net-(IC1-Pad28)")) + (pad 2 smd rect (at 0.75 0 180) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 60 "Net-(R11-Pad2)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 567B5E0C) (tstamp 5673A9DF) + (at 82.423 147.701 180) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /55CBE362) + (attr smd) + (fp_text reference R12 (at -2.9464 1.6256 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 180) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 40 "Net-(IC1-Pad29)")) + (pad 2 smd rect (at 0.75 0 180) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 61 "Net-(R12-Pad2)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 567B5E0E) (tstamp 5673A9E5) + (at 82.423 149.352 180) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /55CBE0F4) + (attr smd) + (fp_text reference R13 (at -3.0988 3.1242 360) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 180) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 41 "Net-(IC1-Pad32)")) + (pad 2 smd rect (at 0.75 0 180) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 62 "Net-(R13-Pad2)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 567B5E14) (tstamp 5673A9EB) + (at 84.455 150.241 270) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /55CBE21C) + (attr smd) + (fp_text reference R14 (at -4.064 -0.889 360) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 270) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 42 "Net-(IC1-Pad33)")) + (pad 2 smd rect (at 0.75 0 270) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 63 "Net-(R10-Pad1)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 5415CC62) (tstamp 5673A9F1) + (at 80.391 154.305 270) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /55CB4680) + (attr smd) + (fp_text reference R15 (at 0 -1.9 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 270) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 64 "Net-(R15-Pad1)")) + (pad 2 smd rect (at 0.75 0 270) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 65 "Net-(R15-Pad2)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 567B5E1C) (tstamp 5673A9F7) + (at 79.248 152.146) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /55CB9020) + (attr smd) + (fp_text reference R16 (at 0.2286 -1.3208) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 11 "Net-(C7-Pad2)")) + (pad 2 smd rect (at 0.75 0) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 64 "Net-(R15-Pad1)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 567B5E90) (tstamp 5673A9FD) + (at 80.391 159.639 270) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /566DE721) + (attr smd) + (fp_text reference R17 (at -13.2842 -4.8514 360) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 270) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 66 "Net-(R17-Pad1)")) + (pad 2 smd rect (at 0.75 0 270) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 67 "Net-(R17-Pad2)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 567B5E95) (tstamp 5673AA03) + (at 79.248 157.48) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /566DE7E8) + (attr smd) + (fp_text reference R18 (at 6.096 -11.28776) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 14 "Net-(C14-Pad2)")) + (pad 2 smd rect (at 0.75 0) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 66 "Net-(R17-Pad1)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 567B5CE2) (tstamp 5673AA09) + (at 98.171 143.891) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /566E5C29) + (attr smd) + (fp_text reference R19 (at 0.1778 1.6002) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 12 "Net-(C11-Pad1)")) + (pad 2 smd rect (at 0.75 0) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 16 /PSU_FEEDBACK)) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 567B5CE5) (tstamp 5673AA0F) + (at 101.6 143.891) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /566E5CBE) + (attr smd) + (fp_text reference R20 (at 0.4064 1.651) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 16 /PSU_FEEDBACK)) + (pad 2 smd rect (at 0.75 0) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 6 /AGND)) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module SMD:SOT-23-3 (layer F.Cu) (tedit 567B5D08) (tstamp 5673AA16) + (at 109.982 144.399 180) + (path /55CA99FA) + (fp_text reference U1 (at -0.1016 -0.0254 360) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 78L05 (at -2.2 0 270) (layer F.Fab) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 1 -0.4) (end 1.1 -0.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -0.8) (end -1.5 0.8) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 0.8) (end 1.5 0.8) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 0.8) (end 1.5 -0.8) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 -0.8) (end -1.5 -0.8) (layer F.SilkS) (width 0.15)) + (pad 3 smd rect (at 0 1.4 180) (size 0.6 0.9) (layers F.Cu F.Paste F.Mask) + (net 5 +5V)) + (pad 2 smd rect (at -0.95 -1.4 180) (size 0.6 0.9) (layers F.Cu F.Paste F.Mask) + (net 7 /AVCC)) + (pad 1 smd rect (at 0.95 -1.4 180) (size 0.6 0.9) (layers F.Cu F.Paste F.Mask) + (net 6 /AGND)) + (model 3D/SMD/SOT-23-3.wrl + (at (xyz 0 0 0)) + (scale (xyz 0.3937 0.3937 0.3937)) + (rotate (xyz 0 0 90)) + ) + ) + + (module Housings_SOIC:SOIC-14_3.9x8.7mm_Pitch1.27mm (layer F.Cu) (tedit 567B5F95) (tstamp 5673AA28) + (at 84.963 156.972 180) + (descr "14-Lead Plastic Small Outline (SL) - Narrow, 3.90 mm Body [SOIC] (see Microchip Packaging Specification 00000049BS.pdf)") + (tags "SOIC 1.27") + (path /55CA87E2) + (attr smd) + (fp_text reference U2 (at 0.19304 -1.22428 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value LM324 (at 0 5.375 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -3.7 -4.65) (end -3.7 4.65) (layer F.CrtYd) (width 0.05)) + (fp_line (start 3.7 -4.65) (end 3.7 4.65) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.7 -4.65) (end 3.7 -4.65) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.7 4.65) (end 3.7 4.65) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.075 -4.45) (end -2.075 -4.335) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.075 -4.45) (end 2.075 -4.335) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.075 4.45) (end 2.075 4.335) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.075 4.45) (end -2.075 4.335) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.075 -4.45) (end 2.075 -4.45) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.075 4.45) (end 2.075 4.45) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.075 -4.335) (end -3.45 -4.335) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -2.7 -3.81 180) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 17 /CH2)) + (pad 2 smd rect (at -2.7 -2.54 180) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 17 /CH2)) + (pad 3 smd rect (at -2.7 -1.27 180) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 59 "Net-(R2-Pad1)")) + (pad 4 smd rect (at -2.7 0 180) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 5 +5V)) + (pad 5 smd rect (at -2.7 1.27 180) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 58 "Net-(R1-Pad1)")) + (pad 6 smd rect (at -2.7 2.54 180) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 48 /CH1)) + (pad 7 smd rect (at -2.7 3.81 180) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 48 /CH1)) + (pad 8 smd rect (at 2.7 3.81 180) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 65 "Net-(R15-Pad2)")) + (pad 9 smd rect (at 2.7 2.54 180) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 65 "Net-(R15-Pad2)")) + (pad 10 smd rect (at 2.7 1.27 180) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 21 /DAC_OUT)) + (pad 11 smd rect (at 2.7 0 180) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 8 /VGND)) + (pad 12 smd rect (at 2.7 -1.27 180) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 22 /DAC_OUT2)) + (pad 13 smd rect (at 2.7 -2.54 180) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 67 "Net-(R17-Pad2)")) + (pad 14 smd rect (at 2.7 -3.81 180) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 67 "Net-(R17-Pad2)")) + (model Housings_SOIC.3dshapes/SOIC-14_3.9x8.7mm_Pitch1.27mm.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module TO_SOT_Packages_SMD:SOT-363 (layer F.Cu) (tedit 567B5D15) (tstamp 5673AA32) + (at 113.665 159.131 90) + (descr SOT353) + (path /55D6ACFD) + (attr smd) + (fp_text reference U3 (at -0.0762 0.0254 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value DMN63D8LDW (at 0.09906 0 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 0.635 1.016) (end 0.635 -1.016) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.635 -1.016) (end -0.635 -1.016) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.635 -1.016) (end -0.635 1.016) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.635 1.016) (end 0.635 1.016) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -1.016 -0.635 90) (size 0.508 0.3048) (layers F.Cu F.Paste F.Mask) + (net 6 /AGND)) + (pad 3 smd rect (at -1.016 0.635 90) (size 0.508 0.3048) (layers F.Cu F.Paste F.Mask) + (net 27 /DIG_CH2)) + (pad 6 smd rect (at 1.016 -0.635 90) (size 0.508 0.3048) (layers F.Cu F.Paste F.Mask) + (net 30 /DIG_CH1)) + (pad 2 smd rect (at -1.016 0 90) (size 0.508 0.3048) (layers F.Cu F.Paste F.Mask) + (net 57 "Net-(P8-Pad2)")) + (pad 4 smd rect (at 1.016 0.635 90) (size 0.508 0.3048) (layers F.Cu F.Paste F.Mask) + (net 6 /AGND)) + (pad 5 smd rect (at 1.016 0 90) (size 0.508 0.3048) (layers F.Cu F.Paste F.Mask) + (net 56 "Net-(P8-Pad1)")) + (model TO_SOT_Packages_SMD.3dshapes/SOT-353.wrl + (at (xyz 0 0 0)) + (scale (xyz 0.07000000000000001 0.09 0.08)) + (rotate (xyz 0 0 90)) + ) + ) + + (gr_line (start 119.126 133.604) (end 119.126 162.56) (angle 90) (layer Edge.Cuts) (width 0.1)) + (gr_line (start 74.295 162.56) (end 74.295 161.417) (angle 90) (layer Edge.Cuts) (width 0.1)) + (gr_line (start 119.126 162.56) (end 74.295 162.56) (angle 90) (layer Edge.Cuts) (width 0.1)) + (gr_line (start 74.295 133.604) (end 74.295 162.306) (angle 90) (layer Edge.Cuts) (width 0.1)) + (gr_line (start 119.126 133.604) (end 74.295 133.604) (angle 90) (layer Edge.Cuts) (width 0.1)) + + (segment (start 90.666 155.067) (end 92.583 155.067) (width 0.254) (layer F.Cu) (net 1)) + (segment (start 93.091 153.543) (end 94.488 152.146) (width 0.254) (layer F.Cu) (net 1) (tstamp 5673BA83)) + (segment (start 93.091 154.559) (end 93.091 153.543) (width 0.254) (layer F.Cu) (net 1) (tstamp 5673BA82)) + (segment (start 92.583 155.067) (end 93.091 154.559) (width 0.254) (layer F.Cu) (net 1) (tstamp 5673BA81)) + (segment (start 94.488 152.146) (end 94.488 151.892) (width 0.254) (layer F.Cu) (net 1) (tstamp 5673BA84)) + (segment (start 90.666 155.067) (end 90.805 155.067) (width 0.254) (layer F.Cu) (net 1)) + (segment (start 94.488 151.892) (end 94.488 152.019) (width 0.254) (layer F.Cu) (net 1)) + (segment (start 90.436 156.591) (end 90.436 155.297) (width 0.254) (layer F.Cu) (net 1)) + (segment (start 90.436 155.297) (end 90.666 155.067) (width 0.254) (layer F.Cu) (net 1) (tstamp 5673B338)) + (segment (start 91.936 156.591) (end 92.329 156.591) (width 0.254) (layer F.Cu) (net 2)) + (segment (start 92.329 156.591) (end 94.488 154.432) (width 0.254) (layer F.Cu) (net 2) (tstamp 5673B33B)) + (segment (start 90.666 160.528) (end 91.936 160.528) (width 0.254) (layer F.Cu) (net 3)) + (segment (start 91.936 160.528) (end 91.948 160.516) (width 0.254) (layer F.Cu) (net 3) (tstamp 5673B335)) + (segment (start 91.948 160.516) (end 93.484 160.516) (width 0.254) (layer F.Cu) (net 3)) + (segment (start 93.484 160.516) (end 94.488 159.512) (width 0.254) (layer F.Cu) (net 3) (tstamp 5673B332)) + (segment (start 93.726 156.972) (end 94.488 156.972) (width 0.254) (layer F.Cu) (net 4) (tstamp 5673B347)) + (segment (start 92.964 157.734) (end 93.726 156.972) (width 0.254) (layer F.Cu) (net 4) (tstamp 5673B346)) + (segment (start 92.964 158.369) (end 92.964 157.734) (width 0.254) (layer F.Cu) (net 4) (tstamp 5673B345)) + (segment (start 92.317 159.016) (end 92.964 158.369) (width 0.254) (layer F.Cu) (net 4) (tstamp 5673B344)) + (segment (start 91.948 159.016) (end 92.317 159.016) (width 0.254) (layer F.Cu) (net 4)) + (segment (start 109.982 142.999) (end 110.759 142.999) (width 1.016) (layer F.Cu) (net 5)) + (segment (start 110.759 142.999) (end 111.137 142.621) (width 1.016) (layer F.Cu) (net 5) (tstamp 567A6AD4)) + (segment (start 111.137 142.621) (end 111.137 141.815002) (width 1.016) (layer F.Cu) (net 5)) + (segment (start 111.125 141.803002) (end 111.137 141.803002) (width 1.016) (layer F.Cu) (net 5) (tstamp 567A6AD0)) + (segment (start 111.137 141.815002) (end 111.125 141.803002) (width 1.016) (layer F.Cu) (net 5) (tstamp 567A6ACD)) + (segment (start 100.33 140.462) (end 103.505 140.462) (width 1.016) (layer B.Cu) (net 5)) + (segment (start 103.505 140.462) (end 104.648 141.605) (width 1.016) (layer B.Cu) (net 5) (tstamp 567A6ABC)) + (segment (start 104.648 141.605) (end 111.125 141.605) (width 1.016) (layer B.Cu) (net 5) (tstamp 567A6ABE)) + (segment (start 111.125 141.605) (end 114.808 141.605) (width 1.016) (layer B.Cu) (net 5) (tstamp 567A6ABF)) + (segment (start 114.808 141.605) (end 115.443 140.97) (width 1.016) (layer B.Cu) (net 5) (tstamp 567A6AC1)) + (segment (start 97.536 140.601) (end 100.191 140.601) (width 1.016) (layer F.Cu) (net 5)) + (segment (start 100.191 140.601) (end 100.33 140.462) (width 1.016) (layer F.Cu) (net 5) (tstamp 567A6AB9)) + (segment (start 97.536 140.601) (end 96.254 140.601) (width 1.016) (layer F.Cu) (net 5)) + (segment (start 86.106 156.972) (end 87.663 156.972) (width 1.016) (layer F.Cu) (net 5) (tstamp 567A6A1F)) + (segment (start 86.106 156.337) (end 86.106 156.972) (width 1.016) (layer F.Cu) (net 5) (tstamp 567A6A1E)) + (segment (start 85.598 155.829) (end 86.106 156.337) (width 1.016) (layer F.Cu) (net 5) (tstamp 567A6A1D)) + (via (at 85.598 155.829) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 5)) + (segment (start 85.598 152.273) (end 85.598 155.829) (width 1.016) (layer B.Cu) (net 5) (tstamp 567A6A1A)) + (segment (start 87.249 150.622) (end 85.598 152.273) (width 1.016) (layer B.Cu) (net 5) (tstamp 567A6A19)) + (segment (start 90.551 150.622) (end 87.249 150.622) (width 1.016) (layer B.Cu) (net 5) (tstamp 567A6A18)) + (segment (start 95.123 146.05) (end 90.551 150.622) (width 1.016) (layer B.Cu) (net 5) (tstamp 567A6A16)) + (segment (start 95.123 141.732) (end 95.123 146.05) (width 1.016) (layer B.Cu) (net 5) (tstamp 567A6A15)) + (segment (start 96.012 140.843) (end 95.123 141.732) (width 1.016) (layer B.Cu) (net 5) (tstamp 567A6A14)) + (via (at 96.012 140.843) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 5)) + (segment (start 96.254 140.601) (end 96.012 140.843) (width 1.016) (layer F.Cu) (net 5) (tstamp 567A6A12)) + (segment (start 111.137 141.803002) (end 111.137 141.617) (width 0.25) (layer F.Cu) (net 5) (tstamp 567A6AD1)) + (via (at 111.125 141.605) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 5)) + (segment (start 111.137 141.617) (end 111.125 141.605) (width 0.25) (layer F.Cu) (net 5) (tstamp 5675DE82)) + (segment (start 110.759 142.999) (end 111.137 142.621) (width 0.25) (layer F.Cu) (net 5) (tstamp 5675DE7F)) + (segment (start 115.8549 139.23054) (end 115.8549 140.5581) (width 0.25) (layer F.Cu) (net 5)) + (segment (start 112.649 141.605) (end 111.125 141.605) (width 0.25) (layer B.Cu) (net 5) (tstamp 5675DD89)) + (segment (start 115.8549 140.5581) (end 115.443 140.97) (width 0.25) (layer F.Cu) (net 5) (tstamp 5675DBFF)) + (via (at 115.443 140.97) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 5)) + (segment (start 115.443 140.97) (end 114.808 141.605) (width 0.25) (layer B.Cu) (net 5) (tstamp 5675DC02)) + (segment (start 114.808 141.605) (end 112.649 141.605) (width 0.25) (layer B.Cu) (net 5) (tstamp 5675DC03)) + (segment (start 111.125 141.605) (end 104.648 141.605) (width 0.25) (layer B.Cu) (net 5) (tstamp 5675DE86)) + (segment (start 104.648 141.605) (end 103.505 140.462) (width 0.25) (layer B.Cu) (net 5) (tstamp 5675DC04)) + (segment (start 100.191 140.601) (end 100.33 140.462) (width 0.25) (layer F.Cu) (net 5) (tstamp 5675DA23)) + (segment (start 107.291 142.113) (end 107.569 142.113) (width 0.508) (layer F.Cu) (net 6)) + (segment (start 107.569 142.113) (end 109.22 140.462) (width 0.508) (layer F.Cu) (net 6) (tstamp 567A6BC4)) + (segment (start 109.22 140.462) (end 109.22 139.23054) (width 0.508) (layer F.Cu) (net 6) (tstamp 567A6BC5)) + (segment (start 102.35 143.891) (end 102.35 143.498) (width 0.508) (layer F.Cu) (net 6)) + (segment (start 102.35 143.498) (end 101.981 143.129) (width 0.508) (layer F.Cu) (net 6) (tstamp 567A6BA1)) + (segment (start 102.108 139.827) (end 102.108 139.954) (width 0.508) (layer F.Cu) (net 6) (tstamp 567A6BA7)) + (segment (start 101.981 139.954) (end 102.108 139.827) (width 0.508) (layer F.Cu) (net 6) (tstamp 567A6BA5)) + (segment (start 101.981 143.129) (end 101.981 139.954) (width 0.508) (layer F.Cu) (net 6) (tstamp 567A6BA2)) + (segment (start 105.156 137.922) (end 104.14 137.922) (width 1.016) (layer F.Cu) (net 6)) + (segment (start 104.14 137.922) (end 102.108 139.954) (width 1.016) (layer F.Cu) (net 6) (tstamp 567A6B92)) + (segment (start 102.108 139.954) (end 102.35 139.712) (width 1.016) (layer F.Cu) (net 6) (tstamp 567A6BA8)) + (segment (start 103.759 144.653) (end 103.759 146.685) (width 1.016) (layer B.Cu) (net 6)) + (segment (start 102.35 143.891) (end 103.070002 143.891) (width 1.016) (layer F.Cu) (net 6)) + (segment (start 103.759 144.579998) (end 103.759 144.653) (width 1.016) (layer F.Cu) (net 6) (tstamp 567A6B87)) + (segment (start 103.070002 143.891) (end 103.759 144.579998) (width 1.016) (layer F.Cu) (net 6) (tstamp 567A6B85)) + (segment (start 111.26 156.451) (end 112.382 156.451) (width 0.508) (layer F.Cu) (net 6)) + (segment (start 112.382 156.451) (end 112.649 156.184) (width 0.508) (layer F.Cu) (net 6) (tstamp 567A6B19)) + (segment (start 112.649 156.184) (end 112.649 155.321) (width 0.508) (layer F.Cu) (net 6) (tstamp 567A6B1A)) + (segment (start 112.649 153.416) (end 112.649 155.321) (width 0.508) (layer B.Cu) (net 6)) + (segment (start 111.26 153.251) (end 112.484 153.251) (width 0.508) (layer F.Cu) (net 6)) + (segment (start 112.484 153.251) (end 112.649 153.416) (width 0.508) (layer F.Cu) (net 6) (tstamp 567A6B14)) + (segment (start 111.26 153.251) (end 114.401 153.251) (width 0.508) (layer F.Cu) (net 6)) + (segment (start 114.401 153.251) (end 114.427 153.277) (width 0.508) (layer F.Cu) (net 6) (tstamp 567A6B11)) + (segment (start 114.427 153.277) (end 114.566 153.277) (width 0.508) (layer F.Cu) (net 6)) + (segment (start 114.566 153.277) (end 116.078 151.765) (width 0.508) (layer F.Cu) (net 6) (tstamp 567A6B0D)) + (segment (start 116.078 151.765) (end 116.078 146.518) (width 0.508) (layer F.Cu) (net 6) (tstamp 567A6B0E)) + (segment (start 116.078 146.518) (end 116.499 146.518) (width 0.508) (layer F.Cu) (net 6)) + (segment (start 116.499 146.518) (end 117.221 145.796) (width 0.508) (layer F.Cu) (net 6) (tstamp 567A6B09)) + (segment (start 117.221 145.796) (end 117.221 140.6672) (width 0.508) (layer F.Cu) (net 6) (tstamp 567A6B0A)) + (segment (start 112.637 142.621) (end 114.935 142.621) (width 0.508) (layer F.Cu) (net 6)) + (segment (start 114.935 142.621) (end 117.0549 140.5011) (width 0.508) (layer F.Cu) (net 6) (tstamp 567A6B00)) + (segment (start 117.0549 140.5011) (end 117.0549 139.23054) (width 0.508) (layer F.Cu) (net 6) (tstamp 567A6B01)) + (segment (start 109.032 145.799) (end 109.032 145.476) (width 0.508) (layer F.Cu) (net 6)) + (segment (start 109.032 145.476) (end 110.236 144.272) (width 0.508) (layer F.Cu) (net 6) (tstamp 567A6AFA)) + (segment (start 110.236 144.272) (end 111.887 144.272) (width 0.508) (layer F.Cu) (net 6) (tstamp 567A6AFB)) + (segment (start 111.887 144.272) (end 112.637 143.522) (width 0.508) (layer F.Cu) (net 6) (tstamp 567A6AFC)) + (segment (start 112.637 143.522) (end 112.637 142.621) (width 0.508) (layer F.Cu) (net 6) (tstamp 567A6AFD)) + (segment (start 110.756 147.193) (end 110.426 147.193) (width 0.508) (layer F.Cu) (net 6)) + (segment (start 110.426 147.193) (end 109.032 145.799) (width 0.508) (layer F.Cu) (net 6) (tstamp 567A6AF7)) + (segment (start 109.032 145.476) (end 110.236 144.272) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675DF8E)) + (segment (start 112.637 143.522) (end 112.637 142.621) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675DF93)) + (segment (start 111.887 144.272) (end 112.637 143.522) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675DF92)) + (segment (start 110.236 144.272) (end 111.887 144.272) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675DF90)) + (segment (start 116.078 146.518) (end 116.078 151.765) (width 0.25) (layer F.Cu) (net 6)) + (segment (start 116.078 151.765) (end 114.566 153.277) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675DEB4)) + (segment (start 116.499 146.518) (end 117.221 145.796) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675DEA8)) + (segment (start 117.221 145.796) (end 117.221 140.6672) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675DEA9)) + (segment (start 117.221 140.6672) (end 117.0549 140.5011) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675DEAA)) + (segment (start 110.426 147.193) (end 109.032 145.799) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675DE9C)) + (segment (start 117.0549 140.5011) (end 117.0549 139.23054) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675DE8B)) + (segment (start 114.935 142.621) (end 117.0549 140.5011) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675DE89)) + (segment (start 91.821 150.253) (end 92.952 150.253) (width 0.25) (layer F.Cu) (net 6)) + (segment (start 97.167 152.285) (end 97.79 152.285) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675DD4D)) + (segment (start 96.901 152.019) (end 97.167 152.285) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675DD4C)) + (segment (start 96.901 150.749) (end 96.901 152.019) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675DD4A)) + (segment (start 95.885 149.733) (end 96.901 150.749) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675DD48)) + (segment (start 93.472 149.733) (end 95.885 149.733) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675DD47)) + (segment (start 92.952 150.253) (end 93.472 149.733) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675DD46)) + (segment (start 99.56 153.251) (end 98.756 153.251) (width 0.25) (layer F.Cu) (net 6)) + (segment (start 98.756 153.251) (end 97.79 152.285) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675DD39)) + (segment (start 114.427 153.277) (end 112.788 153.277) (width 0.25) (layer F.Cu) (net 6)) + (segment (start 112.788 153.277) (end 112.649 153.416) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675DC6A)) + (segment (start 107.569 142.113) (end 109.22 140.462) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675DBB4)) + (segment (start 109.22 140.462) (end 109.22 139.23054) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675DBB7)) + (segment (start 111.0549 136.53054) (end 118.0549 136.53054) (width 0.25) (layer F.Cu) (net 6)) + (segment (start 113.2549 139.23054) (end 112.0549 139.23054) (width 0.25) (layer F.Cu) (net 6)) + (segment (start 112.0549 139.23054) (end 109.22 139.23054) (width 0.25) (layer F.Cu) (net 6)) + (segment (start 109.22 139.23054) (end 105.44854 139.23054) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675DBBB)) + (segment (start 105.156 138.938) (end 105.156 137.922) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675DB59)) + (segment (start 105.44854 139.23054) (end 105.156 138.938) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675DB58)) + (segment (start 112.0549 139.23054) (end 111.67154 139.23054) (width 0.25) (layer F.Cu) (net 6)) + (segment (start 111.67154 139.23054) (end 111.0549 138.6139) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675DB52)) + (segment (start 111.0549 138.6139) (end 111.0549 136.53054) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675DB53)) + (segment (start 117.0549 139.23054) (end 117.18246 139.23054) (width 0.25) (layer F.Cu) (net 6)) + (segment (start 117.18246 139.23054) (end 118.0549 138.3581) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675DB4E)) + (segment (start 118.0549 138.3581) (end 118.0549 136.53054) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675DB4F)) + (segment (start 103.81 146.736) (end 103.81 148.201) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675D904)) + (via (at 103.759 144.653) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 6)) + (via (at 103.759 146.685) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 6)) + (segment (start 103.759 146.685) (end 103.81 146.736) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675D903)) + (segment (start 104.14 137.922) (end 102.35 139.712) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675D8E5)) + (segment (start 102.35 139.712) (end 102.35 143.891) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675D8E7)) + (segment (start 112.522 156.464) (end 112.522 156.591) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675D897)) + (via (at 112.649 155.321) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 6)) + (segment (start 112.649 155.321) (end 112.649 156.337) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675D895)) + (segment (start 112.649 156.337) (end 112.522 156.464) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675D896)) + (via (at 112.649 153.416) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 6)) + (segment (start 112.484 153.251) (end 112.649 153.416) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675D890)) + (segment (start 113.03 159.004) (end 112.903 159.004) (width 0.25) (layer F.Cu) (net 6)) + (segment (start 112.522 156.591) (end 112.382 156.451) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675D869)) + (segment (start 112.522 158.623) (end 112.522 156.591) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675D868)) + (segment (start 112.903 159.004) (end 112.522 158.623) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675D867)) + (segment (start 113.03 160.147) (end 113.03 159.004) (width 0.25) (layer F.Cu) (net 6)) + (segment (start 114.3 158.623) (end 114.3 158.115) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675D771)) + (segment (start 114.173 158.75) (end 114.3 158.623) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675D770)) + (segment (start 113.284 158.75) (end 114.173 158.75) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675D76C)) + (segment (start 113.03 159.004) (end 113.284 158.75) (width 0.25) (layer F.Cu) (net 6) (tstamp 5675D76B)) + (segment (start 91.821 150.253) (end 90.678 150.253) (width 0.254) (layer F.Cu) (net 6)) + (segment (start 90.678 150.253) (end 90.539 150.114) (width 0.254) (layer F.Cu) (net 6) (tstamp 5673B35C)) + (segment (start 115.443 139.065) (end 115.443 139.319) (width 0.508) (layer B.Cu) (net 7)) + (segment (start 116.459 143.002) (end 116.078 143.383) (width 0.508) (layer B.Cu) (net 7) (tstamp 567A6C3D)) + (segment (start 116.459 140.335) (end 116.459 143.002) (width 0.508) (layer B.Cu) (net 7) (tstamp 567A6C3C)) + (segment (start 115.443 139.319) (end 116.459 140.335) (width 0.508) (layer B.Cu) (net 7) (tstamp 567A6C3B)) + (segment (start 116.078 143.383) (end 116.078 144.018) (width 0.508) (layer B.Cu) (net 7) (tstamp 567A6C3F)) + (segment (start 115.443 139.065) (end 115.443 136.398) (width 0.508) (layer B.Cu) (net 7)) + (segment (start 115.443 136.398) (end 114.681 135.636) (width 0.508) (layer B.Cu) (net 7) (tstamp 567A6C38)) + (segment (start 113.03 133.985) (end 114.681 135.636) (width 0.508) (layer F.Cu) (net 7)) + (segment (start 105.156 135.382) (end 105.156 135.255) (width 0.508) (layer F.Cu) (net 7)) + (segment (start 105.156 135.255) (end 106.426 133.985) (width 0.508) (layer F.Cu) (net 7) (tstamp 567A6C25)) + (segment (start 106.426 133.985) (end 113.03 133.985) (width 0.508) (layer F.Cu) (net 7) (tstamp 567A6C26)) + (segment (start 100.33 135.382) (end 105.156 135.382) (width 1.016) (layer F.Cu) (net 7)) + (segment (start 110.932 145.799) (end 110.932 145.869) (width 0.508) (layer F.Cu) (net 7)) + (segment (start 110.932 145.869) (end 112.256 147.193) (width 0.508) (layer F.Cu) (net 7) (tstamp 567A6AF4)) + (segment (start 116.078 144.018) (end 114.808 144.018) (width 0.508) (layer F.Cu) (net 7)) + (segment (start 114.808 144.018) (end 113.027 145.799) (width 0.508) (layer F.Cu) (net 7) (tstamp 567A6AF0)) + (segment (start 113.027 145.799) (end 110.932 145.799) (width 0.508) (layer F.Cu) (net 7) (tstamp 567A6AF1)) + (segment (start 114.427 151.777) (end 114.427 146.177) (width 0.508) (layer F.Cu) (net 7)) + (segment (start 114.427 146.177) (end 116.078 144.526) (width 0.508) (layer F.Cu) (net 7) (tstamp 567A6AEC)) + (segment (start 116.078 144.526) (end 116.078 144.018) (width 0.508) (layer F.Cu) (net 7) (tstamp 567A6AED)) + (segment (start 111.26 152.451) (end 112.598 152.451) (width 0.508) (layer F.Cu) (net 7)) + (segment (start 112.598 152.451) (end 113.272 151.777) (width 0.508) (layer F.Cu) (net 7) (tstamp 567A6AE8)) + (segment (start 113.272 151.777) (end 114.427 151.777) (width 0.508) (layer F.Cu) (net 7) (tstamp 567A6AE9)) + (segment (start 105.156 135.255) (end 106.426 133.985) (width 0.25) (layer F.Cu) (net 7) (tstamp 5675DFBD)) + (segment (start 116.459 140.081) (end 116.459 143.637) (width 0.25) (layer B.Cu) (net 7) (tstamp 5675DFC9)) + (via (at 114.681 135.636) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 7)) + (segment (start 114.681 135.636) (end 115.443 136.398) (width 0.25) (layer B.Cu) (net 7) (tstamp 5675DFC5)) + (segment (start 115.443 139.065) (end 116.459 140.081) (width 0.25) (layer B.Cu) (net 7) (tstamp 5675DFC7)) + (segment (start 106.426 133.985) (end 113.03 133.985) (width 0.25) (layer F.Cu) (net 7) (tstamp 5675DFBE)) + (segment (start 116.459 143.637) (end 116.078 144.018) (width 0.25) (layer B.Cu) (net 7) (tstamp 5675DFCB)) + (segment (start 116.078 144.018) (end 116.078 144.526) (width 0.25) (layer F.Cu) (net 7)) + (segment (start 116.078 144.526) (end 114.427 146.177) (width 0.25) (layer F.Cu) (net 7) (tstamp 5675DEAF)) + (segment (start 110.932 145.799) (end 113.027 145.799) (width 0.25) (layer F.Cu) (net 7)) + (segment (start 113.027 145.799) (end 114.808 144.018) (width 0.25) (layer F.Cu) (net 7) (tstamp 5675DEA2)) + (segment (start 110.932 145.869) (end 112.256 147.193) (width 0.25) (layer F.Cu) (net 7) (tstamp 5675DE9F)) + (segment (start 97.79 153.785) (end 97.397 153.785) (width 0.25) (layer F.Cu) (net 7)) + (segment (start 92.341 151.753) (end 91.821 151.753) (width 0.25) (layer F.Cu) (net 7) (tstamp 5675DD43)) + (segment (start 93.726 150.368) (end 92.341 151.753) (width 0.25) (layer F.Cu) (net 7) (tstamp 5675DD42)) + (segment (start 95.377 150.368) (end 93.726 150.368) (width 0.25) (layer F.Cu) (net 7) (tstamp 5675DD41)) + (segment (start 96.266 151.257) (end 95.377 150.368) (width 0.25) (layer F.Cu) (net 7) (tstamp 5675DD3F)) + (segment (start 96.266 152.654) (end 96.266 151.257) (width 0.25) (layer F.Cu) (net 7) (tstamp 5675DD3D)) + (segment (start 97.397 153.785) (end 96.266 152.654) (width 0.25) (layer F.Cu) (net 7) (tstamp 5675DD3C)) + (segment (start 97.79 153.785) (end 98.159 153.785) (width 0.25) (layer F.Cu) (net 7)) + (segment (start 98.159 153.785) (end 98.425 154.051) (width 0.25) (layer F.Cu) (net 7) (tstamp 5675DD35)) + (segment (start 98.425 154.051) (end 99.56 154.051) (width 0.25) (layer F.Cu) (net 7) (tstamp 5675DD36)) + (segment (start 114.427 151.777) (end 113.272 151.777) (width 0.25) (layer F.Cu) (net 7)) + (segment (start 113.272 151.777) (end 112.598 152.451) (width 0.25) (layer F.Cu) (net 7) (tstamp 5675DC66)) + (segment (start 91.821 151.753) (end 90.551 151.753) (width 0.254) (layer F.Cu) (net 7)) + (segment (start 90.551 151.753) (end 90.539 151.765) (width 0.254) (layer F.Cu) (net 7) (tstamp 5673B359)) + (segment (start 81.28 144.26) (end 83.07 144.26) (width 1.016) (layer F.Cu) (net 8)) + (segment (start 83.07 144.26) (end 83.82 143.51) (width 1.016) (layer F.Cu) (net 8) (tstamp 567A6A8F)) + (segment (start 76.494 136.906) (end 76.494 137.581) (width 1.016) (layer F.Cu) (net 8)) + (segment (start 76.494 137.581) (end 78.994 140.081) (width 1.016) (layer F.Cu) (net 8) (tstamp 567A6A87)) + (segment (start 80.506 144.26) (end 81.28 144.26) (width 1.016) (layer F.Cu) (net 8) (tstamp 567A6A8C)) + (segment (start 78.994 142.748) (end 80.506 144.26) (width 1.016) (layer F.Cu) (net 8) (tstamp 567A6A8B)) + (segment (start 78.994 140.081) (end 78.994 142.748) (width 1.016) (layer F.Cu) (net 8) (tstamp 567A6A88)) + (segment (start 83.82 146.558) (end 86.614 146.558) (width 1.016) (layer B.Cu) (net 8)) + (via (at 90.805 142.367) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 8)) + (segment (start 86.614 146.558) (end 90.805 142.367) (width 1.016) (layer B.Cu) (net 8) (tstamp 567A6A51)) + (segment (start 90.805 142.367) (end 90.805 142.379) (width 1.016) (layer F.Cu) (net 8) (tstamp 567A6A5C)) + (segment (start 90.805 142.379) (end 90.805 142.367) (width 1.016) (layer F.Cu) (net 8) (tstamp 567A6A5D)) + (segment (start 90.805 142.367) (end 90.805 142.379) (width 1.016) (layer F.Cu) (net 8) (tstamp 567A6A5F)) + (segment (start 83.82 156.845) (end 83.82 146.558) (width 1.016) (layer B.Cu) (net 8)) + (segment (start 83.82 146.558) (end 83.82 143.51) (width 1.016) (layer B.Cu) (net 8) (tstamp 567A6A4F)) + (segment (start 82.263 156.972) (end 83.693 156.972) (width 1.016) (layer F.Cu) (net 8)) + (segment (start 83.693 156.972) (end 83.82 156.845) (width 1.016) (layer F.Cu) (net 8) (tstamp 567A6A3F)) + (segment (start 93.345 141.391) (end 94.02 141.391) (width 1.016) (layer F.Cu) (net 8)) + (segment (start 94.02 141.391) (end 94.73 142.101) (width 1.016) (layer F.Cu) (net 8) (tstamp 567A69DA)) + (segment (start 94.73 142.101) (end 97.536 142.101) (width 1.016) (layer F.Cu) (net 8) (tstamp 567A69DC)) + (segment (start 93.345 141.391) (end 95.758 138.978) (width 1.016) (layer F.Cu) (net 8)) + (segment (start 95.758 138.978) (end 95.758 137.922) (width 1.016) (layer F.Cu) (net 8) (tstamp 567A69BE)) + (segment (start 95.758 137.922) (end 96.708 136.972) (width 1.016) (layer F.Cu) (net 8) (tstamp 567A69BF)) + (segment (start 96.708 136.972) (end 97.285 136.972) (width 1.016) (layer F.Cu) (net 8) (tstamp 567A69C0)) + (segment (start 88.9 142.379) (end 90.805 142.379) (width 1.016) (layer F.Cu) (net 8)) + (segment (start 90.805 142.379) (end 92.357 142.379) (width 1.016) (layer F.Cu) (net 8) (tstamp 567A6A60)) + (segment (start 92.357 142.379) (end 93.345 141.391) (width 1.016) (layer F.Cu) (net 8) (tstamp 567A69BB)) + (segment (start 86.36 140.97) (end 87.884 140.97) (width 1.016) (layer F.Cu) (net 8)) + (segment (start 87.884 140.97) (end 88.9 141.986) (width 1.016) (layer F.Cu) (net 8) (tstamp 567A69B6)) + (segment (start 88.9 141.986) (end 88.9 142.379) (width 1.016) (layer F.Cu) (net 8) (tstamp 567A69B7)) + (segment (start 83.82 140.97) (end 83.82 143.51) (width 1.016) (layer F.Cu) (net 8)) + (segment (start 86.36 140.97) (end 83.82 140.97) (width 1.016) (layer F.Cu) (net 8)) + (segment (start 97.536 142.101) (end 100.953 142.101) (width 0.25) (layer F.Cu) (net 8)) + (segment (start 102.997 142.113) (end 104.291 142.113) (width 0.25) (layer F.Cu) (net 8) (tstamp 5675DBA6)) + (via (at 102.997 142.113) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 8)) + (segment (start 100.965 142.113) (end 102.997 142.113) (width 0.25) (layer B.Cu) (net 8) (tstamp 5675DBA3)) + (via (at 100.965 142.113) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 8)) + (segment (start 100.953 142.101) (end 100.965 142.113) (width 0.25) (layer F.Cu) (net 8) (tstamp 5675DBA1)) + (segment (start 97.536 142.101) (end 94.73 142.101) (width 0.25) (layer F.Cu) (net 8)) + (segment (start 94.73 142.101) (end 94.02 141.391) (width 0.25) (layer F.Cu) (net 8) (tstamp 5675DA1F)) + (segment (start 83.693 156.972) (end 83.82 156.845) (width 0.254) (layer F.Cu) (net 8) (tstamp 5673B98D)) + (via (at 83.82 156.845) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 8)) + (segment (start 97.285 136.972) (end 96.708 136.972) (width 0.254) (layer F.Cu) (net 8)) + (segment (start 95.758 137.922) (end 95.758 138.978) (width 0.254) (layer F.Cu) (net 8) (tstamp 5673B794)) + (segment (start 96.708 136.972) (end 95.758 137.922) (width 0.254) (layer F.Cu) (net 8) (tstamp 5673B793)) + (segment (start 92.357 142.379) (end 93.345 141.391) (width 0.254) (layer F.Cu) (net 8) (tstamp 5673B766)) + (segment (start 81.28 144.26) (end 79.998 144.26) (width 0.254) (layer F.Cu) (net 8)) + (segment (start 78.486 139.573) (end 76.494 137.581) (width 0.254) (layer F.Cu) (net 8) (tstamp 5673B6C1)) + (segment (start 78.486 142.748) (end 78.486 139.573) (width 0.254) (layer F.Cu) (net 8) (tstamp 5673B6BF)) + (segment (start 79.998 144.26) (end 78.486 142.748) (width 0.254) (layer F.Cu) (net 8) (tstamp 5673B6BE)) + (segment (start 88.9 142.379) (end 88.9 141.986) (width 0.254) (layer F.Cu) (net 8)) + (segment (start 88.9 141.986) (end 87.884 140.97) (width 0.254) (layer F.Cu) (net 8) (tstamp 5673B6AA)) + (segment (start 83.07 144.26) (end 83.82 143.51) (width 0.254) (layer F.Cu) (net 8) (tstamp 5673B69F)) + (segment (start 82.296 137.92454) (end 81.28 138.94054) (width 1.016) (layer F.Cu) (net 9)) + (segment (start 81.28 138.94054) (end 81.28 142.76) (width 1.016) (layer F.Cu) (net 9) (tstamp 567A6A84)) + (segment (start 82.296 137.92454) (end 80.77454 137.92454) (width 1.016) (layer F.Cu) (net 9)) + (segment (start 80.77454 137.92454) (end 79.756 136.906) (width 1.016) (layer F.Cu) (net 9) (tstamp 567A6A80)) + (segment (start 79.756 136.906) (end 78.994 136.906) (width 1.016) (layer F.Cu) (net 9) (tstamp 567A6A81)) + (segment (start 89.408 137.922) (end 82.29854 137.922) (width 1.016) (layer F.Cu) (net 9)) + (segment (start 82.29854 137.922) (end 82.296 137.92454) (width 1.016) (layer F.Cu) (net 9) (tstamp 567A6A7C)) + (segment (start 100.33 137.922) (end 96.647 137.922) (width 1.016) (layer B.Cu) (net 9)) + (segment (start 96.647 137.922) (end 94.869 139.7) (width 1.016) (layer B.Cu) (net 9) (tstamp 567A6A71)) + (segment (start 94.869 139.7) (end 90.678 139.7) (width 1.016) (layer B.Cu) (net 9) (tstamp 567A6A72)) + (segment (start 90.678 139.7) (end 90.17 139.192) (width 1.016) (layer B.Cu) (net 9) (tstamp 567A6A73)) + (segment (start 90.17 139.192) (end 90.17 138.684) (width 1.016) (layer B.Cu) (net 9) (tstamp 567A6A75)) + (segment (start 90.17 138.684) (end 89.452564 137.966564) (width 1.016) (layer B.Cu) (net 9) (tstamp 567A6A76)) + (segment (start 89.452564 137.966564) (end 89.363436 137.966564) (width 1.016) (layer B.Cu) (net 9) (tstamp 567A6A77)) + (segment (start 89.363436 137.966564) (end 89.408 137.922) (width 1.016) (layer B.Cu) (net 9) (tstamp 567A6A79)) + (segment (start 89.40546 137.92454) (end 82.296 137.92454) (width 0.254) (layer F.Cu) (net 9) (tstamp 5673B7D6)) + (segment (start 89.408 137.922) (end 89.40546 137.92454) (width 0.254) (layer F.Cu) (net 9) (tstamp 5673B7D5)) + (via (at 89.408 137.922) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 9)) + (segment (start 90.17 138.684) (end 89.408 137.922) (width 0.254) (layer B.Cu) (net 9) (tstamp 5673B7D3)) + (segment (start 90.17 139.192) (end 90.17 138.684) (width 0.254) (layer B.Cu) (net 9) (tstamp 5673B7D2)) + (segment (start 90.678 139.7) (end 90.17 139.192) (width 0.254) (layer B.Cu) (net 9) (tstamp 5673B7D1)) + (segment (start 94.869 139.7) (end 90.678 139.7) (width 0.254) (layer B.Cu) (net 9) (tstamp 5673B7D0)) + (segment (start 96.647 137.922) (end 94.869 139.7) (width 0.254) (layer B.Cu) (net 9) (tstamp 5673B7CE)) + (segment (start 78.994 136.906) (end 79.756 136.906) (width 0.254) (layer F.Cu) (net 9)) + (segment (start 79.756 136.906) (end 80.77454 137.92454) (width 0.254) (layer F.Cu) (net 9) (tstamp 5673B6C5)) + (segment (start 81.28 142.76) (end 81.28 138.94054) (width 0.254) (layer F.Cu) (net 9)) + (segment (start 78.74 155.182) (end 76.442 155.182) (width 0.254) (layer F.Cu) (net 10)) + (segment (start 76.442 155.182) (end 76.2 154.94) (width 0.254) (layer F.Cu) (net 10) (tstamp 5673B113)) + (segment (start 78.498 152.146) (end 76.454 152.146) (width 0.254) (layer F.Cu) (net 11)) + (segment (start 76.454 152.146) (end 76.2 152.4) (width 0.254) (layer F.Cu) (net 11) (tstamp 5673B110)) + (segment (start 78.74 153.682) (end 78.74 153.289) (width 0.254) (layer F.Cu) (net 11)) + (segment (start 78.74 153.289) (end 78.498 153.047) (width 0.254) (layer F.Cu) (net 11) (tstamp 5673B10C)) + (segment (start 78.498 153.047) (end 78.498 152.146) (width 0.254) (layer F.Cu) (net 11) (tstamp 5673B10D)) + (segment (start 93.345 143.891) (end 97.421 143.891) (width 1.016) (layer F.Cu) (net 12)) + (segment (start 88.9 143.879) (end 93.333 143.879) (width 1.016) (layer F.Cu) (net 12)) + (segment (start 93.333 143.879) (end 93.345 143.891) (width 1.016) (layer F.Cu) (net 12) (tstamp 567A6B7E)) + (segment (start 88.9 143.879) (end 86.729 143.879) (width 1.016) (layer F.Cu) (net 12)) + (segment (start 86.729 143.879) (end 86.36 143.51) (width 1.016) (layer F.Cu) (net 12) (tstamp 567A6B7B)) + (segment (start 86.36 143.51) (end 87.757 143.51) (width 1.016) (layer B.Cu) (net 12)) + (segment (start 87.757 143.51) (end 88.9 142.367) (width 1.016) (layer B.Cu) (net 12) (tstamp 567A6A9F)) + (segment (start 88.9 142.367) (end 88.9 139.446) (width 1.016) (layer B.Cu) (net 12) (tstamp 567A6AA1)) + (segment (start 88.9 139.446) (end 85.344 135.89) (width 1.016) (layer B.Cu) (net 12) (tstamp 567A6AA7)) + (segment (start 85.344 135.89) (end 85.344 135.128) (width 1.016) (layer B.Cu) (net 12) (tstamp 567A6AAB)) + (segment (start 82.55 135.12546) (end 85.34146 135.12546) (width 1.016) (layer F.Cu) (net 12)) + (segment (start 85.34146 135.12546) (end 85.344 135.128) (width 1.016) (layer F.Cu) (net 12) (tstamp 567A6A9C)) + (segment (start 93.333 143.879) (end 93.345 143.891) (width 0.254) (layer F.Cu) (net 12) (tstamp 5673B763)) + (segment (start 88.9 142.367) (end 87.757 143.51) (width 0.254) (layer B.Cu) (net 12) (tstamp 5673B703)) + (segment (start 88.9 138.684) (end 88.9 142.367) (width 0.254) (layer B.Cu) (net 12) (tstamp 5673B701)) + (segment (start 85.344 135.128) (end 88.9 138.684) (width 0.254) (layer B.Cu) (net 12) (tstamp 5673B700)) + (via (at 85.344 135.128) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 12)) + (segment (start 85.34146 135.12546) (end 85.344 135.128) (width 0.254) (layer F.Cu) (net 12) (tstamp 5673B6FE)) + (segment (start 86.36 143.51) (end 86.741 143.51) (width 0.254) (layer F.Cu) (net 12)) + (segment (start 86.741 143.51) (end 87.11 143.879) (width 0.254) (layer F.Cu) (net 12) (tstamp 5673B6A6)) + (segment (start 87.11 143.879) (end 88.9 143.879) (width 0.254) (layer F.Cu) (net 12) (tstamp 5673B6A7)) + (segment (start 78.74 160.516) (end 76.696 160.516) (width 0.254) (layer F.Cu) (net 13)) + (segment (start 76.696 160.516) (end 76.2 160.02) (width 0.254) (layer F.Cu) (net 13) (tstamp 5673B12D)) + (segment (start 78.498 157.48) (end 78.498 158.774) (width 0.254) (layer F.Cu) (net 14)) + (segment (start 78.498 158.774) (end 78.74 159.016) (width 0.254) (layer F.Cu) (net 14) (tstamp 5673B12A)) + (segment (start 78.498 157.48) (end 76.2 157.48) (width 0.254) (layer F.Cu) (net 14)) + (segment (start 94.485 137.922) (end 92.45854 137.922) (width 1.016) (layer F.Cu) (net 15)) + (segment (start 92.45854 137.922) (end 92.456 137.92454) (width 1.016) (layer F.Cu) (net 15) (tstamp 567A6B3A)) + (segment (start 92.45854 137.922) (end 92.456 137.92454) (width 0.508) (layer F.Cu) (net 15) (tstamp 567A6B32)) + (segment (start 92.456 137.92454) (end 92.456 135.37946) (width 1.016) (layer F.Cu) (net 15)) + (segment (start 92.456 135.37946) (end 92.71 135.12546) (width 1.016) (layer F.Cu) (net 15) (tstamp 567A6A99)) + (segment (start 92.45854 137.922) (end 92.456 137.92454) (width 0.254) (layer F.Cu) (net 15) (tstamp 5673B790)) + (segment (start 92.456 135.37946) (end 92.71 135.12546) (width 0.254) (layer F.Cu) (net 15) (tstamp 5673B769)) + (segment (start 98.921 143.891) (end 100.85 143.891) (width 1.016) (layer F.Cu) (net 16)) + (segment (start 101.41 158.052) (end 101.41 159.901) (width 0.254) (layer F.Cu) (net 16) (tstamp 5673BB02)) + (via (at 99.949 143.891) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 16)) + (segment (start 99.949 143.891) (end 101.346 145.288) (width 0.254) (layer B.Cu) (net 16) (tstamp 5673BAFA)) + (segment (start 101.346 145.288) (end 101.346 157.988) (width 0.254) (layer B.Cu) (net 16) (tstamp 5673BAFB)) + (via (at 101.346 157.988) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 16)) + (segment (start 101.346 157.988) (end 101.41 158.052) (width 0.254) (layer F.Cu) (net 16) (tstamp 5673BB01)) + (segment (start 100.85 143.891) (end 99.949 143.891) (width 0.254) (layer F.Cu) (net 16)) + (segment (start 98.921 143.891) (end 99.949 143.891) (width 0.254) (layer F.Cu) (net 16)) + (segment (start 102.21 159.901) (end 102.21 155.473) (width 0.254) (layer F.Cu) (net 17)) + (segment (start 101.6 154.863) (end 99.572 154.863) (width 0.254) (layer F.Cu) (net 17) (tstamp 5673BAD7)) + (segment (start 102.21 155.473) (end 101.6 154.863) (width 0.254) (layer F.Cu) (net 17) (tstamp 5673BAD1)) + (segment (start 99.572 154.863) (end 99.56 154.851) (width 0.254) (layer F.Cu) (net 17) (tstamp 5673BAD8)) + (segment (start 87.663 159.512) (end 86.487 159.512) (width 0.254) (layer F.Cu) (net 17)) + (segment (start 102.21 160.934) (end 102.21 159.901) (width 0.254) (layer F.Cu) (net 17) (tstamp 5673BA75)) + (segment (start 101.927002 161.216998) (end 102.21 160.934) (width 0.254) (layer F.Cu) (net 17) (tstamp 5673BA74)) + (segment (start 100.383998 161.216998) (end 101.927002 161.216998) (width 0.254) (layer F.Cu) (net 17) (tstamp 5673BA73)) + (segment (start 100.203 161.036) (end 100.383998 161.216998) (width 0.254) (layer F.Cu) (net 17) (tstamp 5673BA72)) + (segment (start 99.314 161.036) (end 100.203 161.036) (width 0.254) (layer F.Cu) (net 17) (tstamp 5673BA71)) + (via (at 99.314 161.036) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 17)) + (segment (start 98.933 161.417) (end 99.314 161.036) (width 0.254) (layer B.Cu) (net 17) (tstamp 5673BA6D)) + (segment (start 86.233 161.417) (end 98.933 161.417) (width 0.254) (layer B.Cu) (net 17) (tstamp 5673BA6C)) + (segment (start 85.852 161.036) (end 86.233 161.417) (width 0.254) (layer B.Cu) (net 17) (tstamp 5673BA6B)) + (segment (start 85.852 160.147) (end 85.852 161.036) (width 0.254) (layer B.Cu) (net 17) (tstamp 5673BA6A)) + (segment (start 86.233 159.766) (end 85.852 160.147) (width 0.254) (layer B.Cu) (net 17) (tstamp 5673BA69)) + (via (at 86.233 159.766) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 17)) + (segment (start 86.487 159.512) (end 86.233 159.766) (width 0.254) (layer F.Cu) (net 17) (tstamp 5673BA67)) + (segment (start 87.663 159.512) (end 87.663 160.782) (width 0.254) (layer F.Cu) (net 17)) + (segment (start 82.263 155.702) (end 84.201 155.702) (width 0.254) (layer F.Cu) (net 21)) + (segment (start 105.41 161.036) (end 105.41 159.901) (width 0.254) (layer F.Cu) (net 21) (tstamp 567A6C0E)) + (segment (start 104.721002 161.724998) (end 105.41 161.036) (width 0.254) (layer F.Cu) (net 21) (tstamp 567A6C0D)) + (segment (start 86.032998 161.724998) (end 104.721002 161.724998) (width 0.254) (layer F.Cu) (net 21) (tstamp 567A6C0A)) + (segment (start 85.09 160.782) (end 86.032998 161.724998) (width 0.254) (layer F.Cu) (net 21) (tstamp 567A6C09)) + (segment (start 85.09 156.591) (end 85.09 160.782) (width 0.254) (layer F.Cu) (net 21) (tstamp 567A6C08)) + (segment (start 84.201 155.702) (end 85.09 156.591) (width 0.254) (layer F.Cu) (net 21) (tstamp 567A6C06)) + (segment (start 82.263 158.242) (end 83.185 158.242) (width 0.254) (layer F.Cu) (net 22)) + (segment (start 106.21 161.125) (end 106.21 159.901) (width 0.254) (layer F.Cu) (net 22) (tstamp 5673B974)) + (segment (start 105.156 162.179) (end 106.21 161.125) (width 0.254) (layer F.Cu) (net 22) (tstamp 5673B973)) + (segment (start 84.709 162.179) (end 105.156 162.179) (width 0.254) (layer F.Cu) (net 22) (tstamp 5673B972)) + (segment (start 83.693 161.163) (end 84.709 162.179) (width 0.254) (layer F.Cu) (net 22) (tstamp 5673B971)) + (segment (start 83.693 158.75) (end 83.693 161.163) (width 0.254) (layer F.Cu) (net 22) (tstamp 5673B970)) + (segment (start 83.185 158.242) (end 83.693 158.75) (width 0.254) (layer F.Cu) (net 22) (tstamp 5673B96F)) + (segment (start 109.41 159.901) (end 109.41 156.02) (width 0.25) (layer F.Cu) (net 26)) + (segment (start 109.779 155.651) (end 111.26 155.651) (width 0.25) (layer F.Cu) (net 26) (tstamp 5675D872)) + (segment (start 109.41 156.02) (end 109.779 155.651) (width 0.25) (layer F.Cu) (net 26) (tstamp 5675D871)) + (segment (start 114.3 160.147) (end 114.3 160.401) (width 0.25) (layer F.Cu) (net 27)) + (segment (start 114.3 160.401) (end 113.919 160.782) (width 0.25) (layer F.Cu) (net 27) (tstamp 5675D854)) + (segment (start 113.919 160.782) (end 112.649 160.782) (width 0.25) (layer F.Cu) (net 27) (tstamp 5675D855)) + (segment (start 112.649 160.782) (end 111.26 159.393) (width 0.25) (layer F.Cu) (net 27) (tstamp 5675D856)) + (segment (start 111.26 159.393) (end 111.26 158.051) (width 0.25) (layer F.Cu) (net 27) (tstamp 5675D857)) + (segment (start 113.03 158.115) (end 113.03 157.353) (width 0.25) (layer F.Cu) (net 30)) + (segment (start 112.776 154.051) (end 111.26 154.051) (width 0.25) (layer F.Cu) (net 30) (tstamp 5675D883)) + (segment (start 113.284 154.559) (end 112.776 154.051) (width 0.25) (layer F.Cu) (net 30) (tstamp 5675D882)) + (segment (start 113.284 157.099) (end 113.284 154.559) (width 0.25) (layer F.Cu) (net 30) (tstamp 5675D881)) + (segment (start 113.03 157.353) (end 113.284 157.099) (width 0.25) (layer F.Cu) (net 30) (tstamp 5675D880)) + (segment (start 108.61 148.201) (end 108.61 149.327) (width 0.25) (layer F.Cu) (net 35)) + (segment (start 97.978 138.872) (end 97.285 138.872) (width 0.25) (layer F.Cu) (net 35) (tstamp 5675DEC8)) + (segment (start 98.425 139.319) (end 97.978 138.872) (width 0.25) (layer F.Cu) (net 35) (tstamp 5675DEC7)) + (via (at 98.425 139.319) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 35)) + (segment (start 98.425 146.558) (end 98.425 139.319) (width 0.25) (layer B.Cu) (net 35) (tstamp 5675DEC4)) + (segment (start 99.822 147.955) (end 98.425 146.558) (width 0.25) (layer B.Cu) (net 35) (tstamp 5675DEC3)) + (via (at 99.822 147.955) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 35)) + (segment (start 99.822 148.463) (end 99.822 147.955) (width 0.25) (layer F.Cu) (net 35) (tstamp 5675DEC0)) + (segment (start 99.822 148.59) (end 99.822 148.463) (width 0.25) (layer F.Cu) (net 35) (tstamp 5675DEBF)) + (segment (start 100.584 149.352) (end 99.822 148.59) (width 0.25) (layer F.Cu) (net 35) (tstamp 5675DEBE)) + (segment (start 108.585 149.352) (end 100.584 149.352) (width 0.25) (layer F.Cu) (net 35) (tstamp 5675DEBD)) + (segment (start 108.61 149.327) (end 108.585 149.352) (width 0.25) (layer F.Cu) (net 35) (tstamp 5675DEBC)) + (segment (start 97.285 138.872) (end 97.285 139.062) (width 0.25) (layer F.Cu) (net 35)) + (segment (start 108.585 148.226) (end 108.61 148.201) (width 0.25) (layer F.Cu) (net 35) (tstamp 5675DA3C)) + (segment (start 107.01 148.201) (end 107.01 144.958) (width 0.25) (layer F.Cu) (net 37)) + (segment (start 115.189 140.335) (end 115.189 139.24644) (width 0.25) (layer F.Cu) (net 37) (tstamp 5675DBDB)) + (segment (start 114.554 140.97) (end 115.189 140.335) (width 0.25) (layer F.Cu) (net 37) (tstamp 5675DBDA)) + (segment (start 110.49 140.97) (end 114.554 140.97) (width 0.25) (layer F.Cu) (net 37) (tstamp 5675DBD8)) + (segment (start 108.966 142.494) (end 110.49 140.97) (width 0.25) (layer F.Cu) (net 37) (tstamp 5675DBD7)) + (segment (start 108.966 143.383) (end 108.966 142.494) (width 0.25) (layer F.Cu) (net 37) (tstamp 5675DBD6)) + (segment (start 107.823 144.526) (end 108.966 143.383) (width 0.25) (layer F.Cu) (net 37) (tstamp 5675DBD5)) + (segment (start 107.442 144.526) (end 107.823 144.526) (width 0.25) (layer F.Cu) (net 37) (tstamp 5675DBD4)) + (segment (start 107.01 144.958) (end 107.442 144.526) (width 0.25) (layer F.Cu) (net 37) (tstamp 5675DBD3)) + (segment (start 115.189 139.24644) (end 115.2049 139.23054) (width 0.25) (layer F.Cu) (net 37) (tstamp 5675DBDC)) + (segment (start 114.5549 139.23054) (end 114.5549 139.9531) (width 0.25) (layer F.Cu) (net 38)) + (segment (start 106.21 144.488) (end 106.21 148.201) (width 0.25) (layer F.Cu) (net 38) (tstamp 5675DBD0)) + (segment (start 106.934 143.764) (end 106.21 144.488) (width 0.25) (layer F.Cu) (net 38) (tstamp 5675DBCF)) + (segment (start 107.696 143.764) (end 106.934 143.764) (width 0.25) (layer F.Cu) (net 38) (tstamp 5675DBCE)) + (segment (start 108.331 143.129) (end 107.696 143.764) (width 0.25) (layer F.Cu) (net 38) (tstamp 5675DBCD)) + (segment (start 108.331 142.24) (end 108.331 143.129) (width 0.25) (layer F.Cu) (net 38) (tstamp 5675DBCB)) + (segment (start 110.109 140.462) (end 108.331 142.24) (width 0.25) (layer F.Cu) (net 38) (tstamp 5675DBC8)) + (segment (start 114.046 140.462) (end 110.109 140.462) (width 0.25) (layer F.Cu) (net 38) (tstamp 5675DBC7)) + (segment (start 114.5549 139.9531) (end 114.046 140.462) (width 0.25) (layer F.Cu) (net 38) (tstamp 5675DBC6)) + (segment (start 83.173 146.05) (end 83.566 146.05) (width 0.254) (layer F.Cu) (net 39)) + (segment (start 105.41 146.431) (end 105.41 148.201) (width 0.254) (layer F.Cu) (net 39) (tstamp 5673BA1A)) + (segment (start 104.394 145.415) (end 105.41 146.431) (width 0.254) (layer F.Cu) (net 39) (tstamp 5673BA19)) + (segment (start 84.201 145.415) (end 104.394 145.415) (width 0.254) (layer F.Cu) (net 39) (tstamp 5673BA18)) + (segment (start 83.566 146.05) (end 84.201 145.415) (width 0.254) (layer F.Cu) (net 39) (tstamp 5673BA17)) + (segment (start 83.173 147.701) (end 83.173 147.459) (width 0.254) (layer F.Cu) (net 40)) + (segment (start 83.173 147.459) (end 84.582 146.05) (width 0.254) (layer F.Cu) (net 40) (tstamp 5673BA23)) + (segment (start 84.582 146.05) (end 104.14 146.05) (width 0.254) (layer F.Cu) (net 40) (tstamp 5673BA24)) + (segment (start 104.14 146.05) (end 104.61 146.52) (width 0.254) (layer F.Cu) (net 40) (tstamp 5673BA26)) + (segment (start 104.61 146.52) (end 104.61 148.201) (width 0.254) (layer F.Cu) (net 40) (tstamp 5673BA27)) + (segment (start 102.21 148.201) (end 102.21 147.041) (width 0.254) (layer F.Cu) (net 41)) + (segment (start 83.947 148.578) (end 83.173 149.352) (width 0.254) (layer F.Cu) (net 41) (tstamp 5673BA32)) + (segment (start 83.947 147.701) (end 83.947 148.578) (width 0.254) (layer F.Cu) (net 41) (tstamp 5673BA30)) + (segment (start 84.963 146.685) (end 83.947 147.701) (width 0.254) (layer F.Cu) (net 41) (tstamp 5673BA2F)) + (segment (start 101.854 146.685) (end 84.963 146.685) (width 0.254) (layer F.Cu) (net 41) (tstamp 5673BA2E)) + (segment (start 102.21 147.041) (end 101.854 146.685) (width 0.254) (layer F.Cu) (net 41) (tstamp 5673BA2D)) + (segment (start 100.529 147.32) (end 101.41 148.201) (width 0.254) (layer F.Cu) (net 42) (tstamp 5673BA46)) + (segment (start 85.217 147.32) (end 100.529 147.32) (width 0.254) (layer F.Cu) (net 42) (tstamp 5673BA45)) + (segment (start 84.455 148.082) (end 85.217 147.32) (width 0.254) (layer F.Cu) (net 42) (tstamp 5673BA44)) + (segment (start 84.455 149.491) (end 84.455 148.082) (width 0.254) (layer F.Cu) (net 42)) + (segment (start 99.56 150.051) (end 103.441 150.051) (width 0.25) (layer F.Cu) (net 43)) + (segment (start 106.426 136.652) (end 107.696 135.382) (width 0.25) (layer B.Cu) (net 43) (tstamp 5675DED7)) + (segment (start 106.426 139.7) (end 106.426 136.652) (width 0.25) (layer B.Cu) (net 43) (tstamp 5675DED6)) + (segment (start 106.045 140.081) (end 106.426 139.7) (width 0.25) (layer B.Cu) (net 43) (tstamp 5675DED5)) + (via (at 106.045 140.081) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 43)) + (segment (start 105.664 140.462) (end 106.045 140.081) (width 0.25) (layer F.Cu) (net 43) (tstamp 5675DED3)) + (segment (start 105.664 143.129) (end 105.664 140.462) (width 0.25) (layer F.Cu) (net 43) (tstamp 5675DED2)) + (segment (start 105.029 143.764) (end 105.664 143.129) (width 0.25) (layer F.Cu) (net 43) (tstamp 5675DED1)) + (via (at 105.029 143.764) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 43)) + (segment (start 105.029 148.463) (end 105.029 143.764) (width 0.25) (layer B.Cu) (net 43) (tstamp 5675DECE)) + (segment (start 103.505 149.987) (end 105.029 148.463) (width 0.25) (layer B.Cu) (net 43) (tstamp 5675DECD)) + (via (at 103.505 149.987) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 43)) + (segment (start 103.441 150.051) (end 103.505 149.987) (width 0.25) (layer F.Cu) (net 43) (tstamp 5675DECB)) + (segment (start 99.56 150.851) (end 104.038 150.851) (width 0.25) (layer F.Cu) (net 44)) + (segment (start 107.696 139.827) (end 107.696 137.922) (width 0.25) (layer B.Cu) (net 44) (tstamp 5675DEFC)) + (segment (start 107.569 139.954) (end 107.696 139.827) (width 0.25) (layer B.Cu) (net 44) (tstamp 5675DEFB)) + (via (at 107.569 139.954) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 44)) + (segment (start 106.299 141.224) (end 107.569 139.954) (width 0.25) (layer F.Cu) (net 44) (tstamp 5675DEF7)) + (segment (start 106.299 143.51) (end 106.299 141.224) (width 0.25) (layer F.Cu) (net 44) (tstamp 5675DEF6)) + (segment (start 106.045 143.764) (end 106.299 143.51) (width 0.25) (layer F.Cu) (net 44) (tstamp 5675DEF5)) + (via (at 106.045 143.764) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 44)) + (segment (start 106.045 149.225) (end 106.045 143.764) (width 0.25) (layer B.Cu) (net 44) (tstamp 5675DEF3)) + (segment (start 105.283 149.987) (end 106.045 149.225) (width 0.25) (layer B.Cu) (net 44) (tstamp 5675DEF2)) + (via (at 105.283 149.987) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 44)) + (segment (start 104.902 149.987) (end 105.283 149.987) (width 0.25) (layer F.Cu) (net 44) (tstamp 5675DEF0)) + (segment (start 104.038 150.851) (end 104.902 149.987) (width 0.25) (layer F.Cu) (net 44) (tstamp 5675DEEF)) + (segment (start 87.663 153.162) (end 87.663 152.24) (width 0.254) (layer F.Cu) (net 48)) + (segment (start 97.65 156.451) (end 99.56 156.451) (width 0.254) (layer F.Cu) (net 48) (tstamp 5673BACB)) + (segment (start 97.282 156.083) (end 97.65 156.451) (width 0.254) (layer F.Cu) (net 48) (tstamp 5673BACA)) + (via (at 97.282 156.083) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 48)) + (segment (start 97.282 155.067) (end 97.282 156.083) (width 0.254) (layer B.Cu) (net 48) (tstamp 5673BAC7)) + (segment (start 95.377 153.162) (end 97.282 155.067) (width 0.254) (layer B.Cu) (net 48) (tstamp 5673BAC5)) + (segment (start 92.837 153.162) (end 95.377 153.162) (width 0.254) (layer B.Cu) (net 48) (tstamp 5673BAC3)) + (segment (start 91.44 151.765) (end 92.837 153.162) (width 0.254) (layer B.Cu) (net 48) (tstamp 5673BAC1)) + (segment (start 88.138 151.765) (end 91.44 151.765) (width 0.254) (layer B.Cu) (net 48) (tstamp 5673BAC0)) + (segment (start 87.757 152.146) (end 88.138 151.765) (width 0.254) (layer B.Cu) (net 48) (tstamp 5673BABF)) + (via (at 87.757 152.146) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 48)) + (segment (start 87.663 152.24) (end 87.757 152.146) (width 0.254) (layer F.Cu) (net 48) (tstamp 5673BABD)) + (segment (start 87.663 154.432) (end 87.663 153.162) (width 0.254) (layer F.Cu) (net 48)) + (segment (start 91.567 157.734) (end 91.567 153.162) (width 0.254) (layer B.Cu) (net 50)) + (segment (start 90.932 152.781) (end 90.666 153.047) (width 0.254) (layer F.Cu) (net 50) (tstamp 5673BA97)) + (segment (start 91.186 152.781) (end 90.932 152.781) (width 0.254) (layer F.Cu) (net 50) (tstamp 5673BA96)) + (segment (start 91.567 153.162) (end 91.186 152.781) (width 0.254) (layer F.Cu) (net 50) (tstamp 5673BA95)) + (via (at 91.567 153.162) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 50)) + (segment (start 90.666 153.047) (end 90.666 153.416) (width 0.254) (layer F.Cu) (net 50) (tstamp 5673BA98)) + (segment (start 91.567 157.734) (end 92.202 157.734) (width 0.254) (layer B.Cu) (net 50)) + (segment (start 97.854 158.051) (end 99.56 158.051) (width 0.254) (layer F.Cu) (net 50) (tstamp 5673BA7C)) + (segment (start 97.663 158.242) (end 97.854 158.051) (width 0.254) (layer F.Cu) (net 50) (tstamp 5673BA7B)) + (via (at 97.663 158.242) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 50)) + (segment (start 92.71 158.242) (end 97.663 158.242) (width 0.254) (layer B.Cu) (net 50) (tstamp 5673BA79)) + (segment (start 92.202 157.734) (end 92.71 158.242) (width 0.254) (layer B.Cu) (net 50) (tstamp 5673BA78)) + (segment (start 90.666 158.508) (end 91.44 157.734) (width 0.254) (layer F.Cu) (net 50) (tstamp 5673B34D)) + (via (at 91.567 157.734) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 50)) + (segment (start 91.44 157.734) (end 91.567 157.734) (width 0.254) (layer F.Cu) (net 50) (tstamp 5673B34E)) + (segment (start 89.039 150.114) (end 89.039 151.765) (width 0.254) (layer F.Cu) (net 50)) + (segment (start 90.666 153.416) (end 90.666 153.404) (width 0.254) (layer F.Cu) (net 50)) + (segment (start 90.666 153.404) (end 89.039 151.777) (width 0.254) (layer F.Cu) (net 50) (tstamp 5673B35F)) + (segment (start 89.039 151.777) (end 89.039 151.765) (width 0.254) (layer F.Cu) (net 50) (tstamp 5673B360)) + (segment (start 90.666 158.877) (end 90.666 158.508) (width 0.254) (layer F.Cu) (net 50)) + (segment (start 76.2 149.86) (end 77.597 149.86) (width 0.254) (layer F.Cu) (net 52)) + (segment (start 78.74 151.003) (end 81.546 151.003) (width 0.254) (layer F.Cu) (net 52) (tstamp 5673BA09)) + (segment (start 77.597 149.86) (end 78.74 151.003) (width 0.254) (layer F.Cu) (net 52) (tstamp 5673BA08)) + (segment (start 79.006 149.352) (end 78.486 149.352) (width 0.254) (layer F.Cu) (net 53)) + (segment (start 77.47 148.59) (end 76.2 147.32) (width 0.254) (layer F.Cu) (net 53) (tstamp 5673BA05)) + (segment (start 77.724 148.59) (end 77.47 148.59) (width 0.254) (layer F.Cu) (net 53) (tstamp 5673BA04)) + (segment (start 78.486 149.352) (end 77.724 148.59) (width 0.254) (layer F.Cu) (net 53) (tstamp 5673BA03)) + (segment (start 79.006 147.701) (end 78.867 147.701) (width 0.254) (layer F.Cu) (net 54)) + (segment (start 78.867 147.701) (end 77.851 146.685) (width 0.254) (layer F.Cu) (net 54) (tstamp 5673B9FC)) + (segment (start 77.851 146.685) (end 77.851 145.034) (width 0.254) (layer F.Cu) (net 54) (tstamp 5673B9FD)) + (segment (start 77.851 145.034) (end 77.597 144.78) (width 0.254) (layer F.Cu) (net 54) (tstamp 5673B9FF)) + (segment (start 77.597 144.78) (end 76.2 144.78) (width 0.254) (layer F.Cu) (net 54) (tstamp 5673BA00)) + (segment (start 76.454 144.78) (end 76.2 144.78) (width 0.254) (layer F.Cu) (net 54) (tstamp 5673B435)) + (segment (start 79.006 146.05) (end 79.006 144.03) (width 0.254) (layer F.Cu) (net 55)) + (segment (start 79.006 144.03) (end 77.216 142.24) (width 0.254) (layer F.Cu) (net 55) (tstamp 5673B9F1)) + (segment (start 77.216 142.24) (end 76.2 142.24) (width 0.254) (layer F.Cu) (net 55) (tstamp 5673B9F2)) + (segment (start 113.665 158.115) (end 113.665 157.861) (width 0.25) (layer F.Cu) (net 56)) + (segment (start 113.665 157.861) (end 114.046 157.48) (width 0.25) (layer F.Cu) (net 56) (tstamp 5675D863)) + (segment (start 114.046 157.48) (end 116.84 157.48) (width 0.25) (layer F.Cu) (net 56) (tstamp 5675D864)) + (segment (start 113.665 160.147) (end 113.665 159.639) (width 0.25) (layer F.Cu) (net 57)) + (segment (start 113.792 159.512) (end 116.332 159.512) (width 0.25) (layer F.Cu) (net 57) (tstamp 5675D85C)) + (segment (start 113.665 159.639) (end 113.792 159.512) (width 0.25) (layer F.Cu) (net 57) (tstamp 5675D85B)) + (segment (start 116.332 159.512) (end 116.84 160.02) (width 0.25) (layer F.Cu) (net 57) (tstamp 5675D85D)) + (segment (start 89.166 155.067) (end 89.166 153.416) (width 0.254) (layer F.Cu) (net 58)) + (segment (start 87.663 155.702) (end 88.531 155.702) (width 0.254) (layer F.Cu) (net 58)) + (segment (start 88.531 155.702) (end 89.166 155.067) (width 0.254) (layer F.Cu) (net 58) (tstamp 5673B2E6)) + (segment (start 89.166 160.528) (end 89.166 158.877) (width 0.254) (layer F.Cu) (net 59)) + (segment (start 89.166 158.877) (end 89.166 158.635) (width 0.254) (layer F.Cu) (net 59)) + (segment (start 89.166 158.635) (end 88.773 158.242) (width 0.254) (layer F.Cu) (net 59) (tstamp 5673B2DC)) + (segment (start 88.773 158.242) (end 87.663 158.242) (width 0.254) (layer F.Cu) (net 59) (tstamp 5673B2DD)) + (segment (start 87.79 158.115) (end 87.663 158.242) (width 0.254) (layer F.Cu) (net 59) (tstamp 5673B248)) + (segment (start 84.455 150.991) (end 83.058 150.991) (width 0.254) (layer F.Cu) (net 63)) + (segment (start 83.058 150.991) (end 83.046 151.003) (width 0.254) (layer F.Cu) (net 63) (tstamp 5673BA41)) + (segment (start 80.391 153.555) (end 80.391 153.543) (width 0.254) (layer F.Cu) (net 64)) + (segment (start 80.391 153.543) (end 79.998 153.15) (width 0.254) (layer F.Cu) (net 64) (tstamp 5673B124)) + (segment (start 79.998 153.15) (end 79.998 152.146) (width 0.254) (layer F.Cu) (net 64) (tstamp 5673B125)) + (segment (start 82.263 154.432) (end 82.263 153.162) (width 0.254) (layer F.Cu) (net 65)) + (segment (start 80.911 155.055) (end 81.534 154.432) (width 0.254) (layer F.Cu) (net 65) (tstamp 5673B36A)) + (segment (start 81.534 154.432) (end 82.263 154.432) (width 0.254) (layer F.Cu) (net 65) (tstamp 5673B36B)) + (segment (start 80.391 155.055) (end 80.911 155.055) (width 0.254) (layer F.Cu) (net 65)) + (segment (start 80.391 158.889) (end 80.391 158.75) (width 0.254) (layer F.Cu) (net 66)) + (segment (start 80.391 158.75) (end 79.998 158.357) (width 0.254) (layer F.Cu) (net 66) (tstamp 5673B145)) + (segment (start 79.998 158.357) (end 79.998 157.48) (width 0.254) (layer F.Cu) (net 66) (tstamp 5673B146)) + (segment (start 82.263 159.512) (end 82.263 160.782) (width 0.254) (layer F.Cu) (net 67)) + (segment (start 80.391 160.389) (end 80.887 160.389) (width 0.254) (layer F.Cu) (net 67)) + (segment (start 81.28 160.782) (end 82.263 160.782) (width 0.254) (layer F.Cu) (net 67) (tstamp 5673B36F)) + (segment (start 80.887 160.389) (end 81.28 160.782) (width 0.254) (layer F.Cu) (net 67) (tstamp 5673B36E)) + +) diff --git a/PCB/WOT/Tinylab_proto1.kicad_pcb.bak b/PCB/WOT/Tinylab_proto1.kicad_pcb.bak new file mode 100644 index 00000000..6c7db377 --- /dev/null +++ b/PCB/WOT/Tinylab_proto1.kicad_pcb.bak @@ -0,0 +1,1945 @@ +(kicad_pcb (version 4) (host pcbnew "(2015-08-05 BZR 6055, Git fa29c62)-product") + + (general + (links 98) + (no_connects 42) + (area 88.849999 71.069999 230.555001 151.180001) + (thickness 1.6) + (drawings 5) + (tracks 132) + (zones 0) + (modules 47) + (nets 69) + ) + + (page A4) + (layers + (0 F.Cu signal) + (31 B.Cu signal) + (32 B.Adhes user) + (33 F.Adhes user) + (34 B.Paste user) + (35 F.Paste user) + (36 B.SilkS user) + (37 F.SilkS user) + (38 B.Mask user) + (39 F.Mask user) + (40 Dwgs.User user) + (41 Cmts.User user) + (42 Eco1.User user) + (43 Eco2.User user) + (44 Edge.Cuts user) + (45 Margin user) + (46 B.CrtYd user) + (47 F.CrtYd user) + (48 B.Fab user) + (49 F.Fab user) + ) + + (setup + (last_trace_width 0.25) + (trace_clearance 0.2) + (zone_clearance 0.508) + (zone_45_only no) + (trace_min 0.2) + (segment_width 0.2) + (edge_width 0.1) + (via_size 0.6) + (via_drill 0.4) + (via_min_size 0.4) + (via_min_drill 0.3) + (uvia_size 0.3) + (uvia_drill 0.1) + (uvias_allowed no) + (uvia_min_size 0.2) + (uvia_min_drill 0.1) + (pcb_text_width 0.3) + (pcb_text_size 1.5 1.5) + (mod_edge_width 0.15) + (mod_text_size 1 1) + (mod_text_width 0.15) + (pad_size 1.5 1.5) + (pad_drill 0.6) + (pad_to_mask_clearance 0) + (aux_axis_origin 0 0) + (visible_elements FFFFF77F) + (pcbplotparams + (layerselection 0x00030_80000001) + (usegerberextensions false) + (excludeedgelayer true) + (linewidth 0.100000) + (plotframeref false) + (viasonmask false) + (mode 1) + (useauxorigin false) + (hpglpennumber 1) + (hpglpenspeed 20) + (hpglpendiameter 15) + (hpglpenoverlay 2) + (psnegative false) + (psa4output false) + (plotreference true) + (plotvalue true) + (plotinvisibletext false) + (padsonsilk false) + (subtractmaskfromsilk false) + (outputformat 1) + (mirror false) + (drillshape 1) + (scaleselection 1) + (outputdirectory "")) + ) + + (net 0 "") + (net 1 "Net-(C1-Pad1)") + (net 2 "Net-(C1-Pad2)") + (net 3 "Net-(C2-Pad1)") + (net 4 "Net-(C2-Pad2)") + (net 5 +5V) + (net 6 GND) + (net 7 /VCC_3V3) + (net 8 /AVCC) + (net 9 /AGND) + (net 10 "Net-(C6-Pad1)") + (net 11 "Net-(C7-Pad1)") + (net 12 "Net-(C7-Pad2)") + (net 13 /LM324_VCC) + (net 14 /VGND) + (net 15 /VSENSE_OCP) + (net 16 "Net-(C9-Pad1)") + (net 17 "Net-(IC1-Pad1)") + (net 18 "Net-(IC1-Pad2)") + (net 19 "Net-(IC1-Pad3)") + (net 20 "Net-(IC1-Pad4)") + (net 21 "Net-(IC1-Pad5)") + (net 22 /DAC_OUT) + (net 23 "Net-(IC1-Pad7)") + (net 24 "Net-(IC1-Pad10)") + (net 25 /XCK) + (net 26 /DIG_CH2) + (net 27 "Net-(IC1-Pad13)") + (net 28 "Net-(IC1-Pad16)") + (net 29 /DIG_CH1) + (net 30 "Net-(IC1-Pad20)") + (net 31 "Net-(IC1-Pad21)") + (net 32 "Net-(IC1-Pad22)") + (net 33 "Net-(IC1-Pad23)") + (net 34 /PSU_PWM) + (net 35 "Net-(IC1-Pad25)") + (net 36 /D-) + (net 37 /D+) + (net 38 "Net-(IC1-Pad28)") + (net 39 "Net-(IC1-Pad29)") + (net 40 "Net-(IC1-Pad32)") + (net 41 "Net-(IC1-Pad33)") + (net 42 "Net-(IC1-Pad34)") + (net 43 "Net-(IC1-Pad35)") + (net 44 "Net-(IC1-Pad36)") + (net 45 "Net-(IC1-Pad37)") + (net 46 /CH1) + (net 47 /CH2) + (net 48 /AVCC_ON_2) + (net 49 "Net-(P2-Pad4)") + (net 50 "Net-(P3-Pad1)") + (net 51 "Net-(P3-Pad2)") + (net 52 "Net-(P3-Pad3)") + (net 53 "Net-(P3-Pad4)") + (net 54 +12V) + (net 55 "Net-(P4-Pad3)") + (net 56 "Net-(P8-Pad1)") + (net 57 "Net-(P8-Pad2)") + (net 58 "Net-(R1-Pad1)") + (net 59 "Net-(R2-Pad1)") + (net 60 "Net-(R11-Pad2)") + (net 61 "Net-(R12-Pad2)") + (net 62 "Net-(R13-Pad2)") + (net 63 "Net-(R10-Pad1)") + (net 64 "Net-(R16-Pad1)") + (net 65 "Net-(R18-Pad1)") + (net 66 "Net-(R18-Pad2)") + (net 67 "Net-(R21-Pad1)") + (net 68 "Net-(R22-Pad1)") + + (net_class Default "This is the default net class." + (clearance 0.2) + (trace_width 0.25) + (via_dia 0.6) + (via_drill 0.4) + (uvia_dia 0.3) + (uvia_drill 0.1) + (add_net +12V) + (add_net +5V) + (add_net /AGND) + (add_net /AVCC) + (add_net /AVCC_ON_2) + (add_net /CH1) + (add_net /CH2) + (add_net /D+) + (add_net /D-) + (add_net /DAC_OUT) + (add_net /DIG_CH1) + (add_net /DIG_CH2) + (add_net /LM324_VCC) + (add_net /PSU_PWM) + (add_net /VCC_3V3) + (add_net /VGND) + (add_net /VSENSE_OCP) + (add_net /XCK) + (add_net GND) + (add_net "Net-(C1-Pad1)") + (add_net "Net-(C1-Pad2)") + (add_net "Net-(C2-Pad1)") + (add_net "Net-(C2-Pad2)") + (add_net "Net-(C6-Pad1)") + (add_net "Net-(C7-Pad1)") + (add_net "Net-(C7-Pad2)") + (add_net "Net-(C9-Pad1)") + (add_net "Net-(IC1-Pad1)") + (add_net "Net-(IC1-Pad10)") + (add_net "Net-(IC1-Pad13)") + (add_net "Net-(IC1-Pad16)") + (add_net "Net-(IC1-Pad2)") + (add_net "Net-(IC1-Pad20)") + (add_net "Net-(IC1-Pad21)") + (add_net "Net-(IC1-Pad22)") + (add_net "Net-(IC1-Pad23)") + (add_net "Net-(IC1-Pad25)") + (add_net "Net-(IC1-Pad28)") + (add_net "Net-(IC1-Pad29)") + (add_net "Net-(IC1-Pad3)") + (add_net "Net-(IC1-Pad32)") + (add_net "Net-(IC1-Pad33)") + (add_net "Net-(IC1-Pad34)") + (add_net "Net-(IC1-Pad35)") + (add_net "Net-(IC1-Pad36)") + (add_net "Net-(IC1-Pad37)") + (add_net "Net-(IC1-Pad4)") + (add_net "Net-(IC1-Pad5)") + (add_net "Net-(IC1-Pad7)") + (add_net "Net-(P2-Pad4)") + (add_net "Net-(P3-Pad1)") + (add_net "Net-(P3-Pad2)") + (add_net "Net-(P3-Pad3)") + (add_net "Net-(P3-Pad4)") + (add_net "Net-(P4-Pad3)") + (add_net "Net-(P8-Pad1)") + (add_net "Net-(P8-Pad2)") + (add_net "Net-(R1-Pad1)") + (add_net "Net-(R10-Pad1)") + (add_net "Net-(R11-Pad2)") + (add_net "Net-(R12-Pad2)") + (add_net "Net-(R13-Pad2)") + (add_net "Net-(R16-Pad1)") + (add_net "Net-(R18-Pad1)") + (add_net "Net-(R18-Pad2)") + (add_net "Net-(R2-Pad1)") + (add_net "Net-(R21-Pad1)") + (add_net "Net-(R22-Pad1)") + ) + + (module Capacitors_SMD:C_1206_HandSoldering placed (layer F.Cu) (tedit 541A9C03) (tstamp 55DD05E1) + (at 124.1044 142.494 270) + (descr "Capacitor SMD 1206, hand soldering") + (tags "capacitor 1206") + (path /55CAB611) + (attr smd) + (fp_text reference C1 (at 0 -2.3 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value C (at 0 2.3 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -3.3 -1.15) (end 3.3 -1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.3 1.15) (end 3.3 1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.3 -1.15) (end -3.3 1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start 3.3 -1.15) (end 3.3 1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1 -1.025) (end -1 -1.025) (layer F.SilkS) (width 0.15)) + (fp_line (start -1 1.025) (end 1 1.025) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -2 0 270) (size 2 1.6) (layers F.Cu F.Paste F.Mask) + (net 1 "Net-(C1-Pad1)")) + (pad 2 smd rect (at 2 0 270) (size 2 1.6) (layers F.Cu F.Paste F.Mask) + (net 2 "Net-(C1-Pad2)")) + (model Capacitors_SMD.3dshapes/C_1206_HandSoldering.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_SMD:C_1206_HandSoldering placed (layer F.Cu) (tedit 541A9C03) (tstamp 55DD05E7) + (at 119.2784 142.5448 270) + (descr "Capacitor SMD 1206, hand soldering") + (tags "capacitor 1206") + (path /55CAB4DE) + (attr smd) + (fp_text reference C2 (at 0 -2.3 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value C (at 0 2.3 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -3.3 -1.15) (end 3.3 -1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.3 1.15) (end 3.3 1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.3 -1.15) (end -3.3 1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start 3.3 -1.15) (end 3.3 1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1 -1.025) (end -1 -1.025) (layer F.SilkS) (width 0.15)) + (fp_line (start -1 1.025) (end 1 1.025) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -2 0 270) (size 2 1.6) (layers F.Cu F.Paste F.Mask) + (net 3 "Net-(C2-Pad1)")) + (pad 2 smd rect (at 2 0 270) (size 2 1.6) (layers F.Cu F.Paste F.Mask) + (net 4 "Net-(C2-Pad2)")) + (model Capacitors_SMD.3dshapes/C_1206_HandSoldering.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_SMD:C_1206_HandSoldering placed (layer F.Cu) (tedit 541A9C03) (tstamp 55DD05ED) + (at 100.5586 100.838 270) + (descr "Capacitor SMD 1206, hand soldering") + (tags "capacitor 1206") + (path /55CB13E1) + (attr smd) + (fp_text reference C3 (at 0 -2.3 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value C_Small (at 0 2.3 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -3.3 -1.15) (end 3.3 -1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.3 1.15) (end 3.3 1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.3 -1.15) (end -3.3 1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start 3.3 -1.15) (end 3.3 1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1 -1.025) (end -1 -1.025) (layer F.SilkS) (width 0.15)) + (fp_line (start -1 1.025) (end 1 1.025) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -2 0 270) (size 2 1.6) (layers F.Cu F.Paste F.Mask) + (net 5 +5V)) + (pad 2 smd rect (at 2 0 270) (size 2 1.6) (layers F.Cu F.Paste F.Mask) + (net 6 GND)) + (model Capacitors_SMD.3dshapes/C_1206_HandSoldering.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_SMD:C_1206_HandSoldering placed (layer F.Cu) (tedit 541A9C03) (tstamp 55DD05F3) + (at 105.41 105.7402 180) + (descr "Capacitor SMD 1206, hand soldering") + (tags "capacitor 1206") + (path /55CB147C) + (attr smd) + (fp_text reference C4 (at 0 -2.3 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value C_Small (at 0 2.3 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -3.3 -1.15) (end 3.3 -1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.3 1.15) (end 3.3 1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.3 -1.15) (end -3.3 1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start 3.3 -1.15) (end 3.3 1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1 -1.025) (end -1 -1.025) (layer F.SilkS) (width 0.15)) + (fp_line (start -1 1.025) (end 1 1.025) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -2 0 180) (size 2 1.6) (layers F.Cu F.Paste F.Mask) + (net 7 /VCC_3V3)) + (pad 2 smd rect (at 2 0 180) (size 2 1.6) (layers F.Cu F.Paste F.Mask) + (net 6 GND)) + (model Capacitors_SMD.3dshapes/C_1206_HandSoldering.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_SMD:C_1206_HandSoldering placed (layer F.Cu) (tedit 541A9C03) (tstamp 55DD05F9) + (at 121.4628 117.9068) + (descr "Capacitor SMD 1206, hand soldering") + (tags "capacitor 1206") + (path /55D60181) + (attr smd) + (fp_text reference C5 (at 0 -2.3) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value C_Small (at 0 2.3) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -3.3 -1.15) (end 3.3 -1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.3 1.15) (end 3.3 1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.3 -1.15) (end -3.3 1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start 3.3 -1.15) (end 3.3 1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1 -1.025) (end -1 -1.025) (layer F.SilkS) (width 0.15)) + (fp_line (start -1 1.025) (end 1 1.025) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -2 0) (size 2 1.6) (layers F.Cu F.Paste F.Mask) + (net 8 /AVCC)) + (pad 2 smd rect (at 2 0) (size 2 1.6) (layers F.Cu F.Paste F.Mask) + (net 9 /AGND)) + (model Capacitors_SMD.3dshapes/C_1206_HandSoldering.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_SMD:C_1206_HandSoldering placed (layer F.Cu) (tedit 55DD0752) (tstamp 55DD05FF) + (at 188.6966 94.234 180) + (descr "Capacitor SMD 1206, hand soldering") + (tags "capacitor 1206") + (path /55CC1A1C) + (attr smd) + (fp_text reference C6 (at 0 -2.3 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value C_Small (at 0.254 2.3495 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -3.3 -1.15) (end 3.3 -1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.3 1.15) (end 3.3 1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.3 -1.15) (end -3.3 1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start 3.3 -1.15) (end 3.3 1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1 -1.025) (end -1 -1.025) (layer F.SilkS) (width 0.15)) + (fp_line (start -1 1.025) (end 1 1.025) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -2 0 180) (size 2 1.6) (layers F.Cu F.Paste F.Mask) + (net 10 "Net-(C6-Pad1)")) + (pad 2 smd rect (at 2 0 180) (size 2 1.6) (layers F.Cu F.Paste F.Mask) + (net 6 GND)) + (model Capacitors_SMD.3dshapes/C_1206_HandSoldering.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_SMD:C_1206_HandSoldering placed (layer F.Cu) (tedit 541A9C03) (tstamp 55DD0605) + (at 190.9572 143.9164 90) + (descr "Capacitor SMD 1206, hand soldering") + (tags "capacitor 1206") + (path /55CB630B) + (attr smd) + (fp_text reference C7 (at 0 -2.3 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value C (at 0 2.3 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -3.3 -1.15) (end 3.3 -1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.3 1.15) (end 3.3 1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.3 -1.15) (end -3.3 1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start 3.3 -1.15) (end 3.3 1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1 -1.025) (end -1 -1.025) (layer F.SilkS) (width 0.15)) + (fp_line (start -1 1.025) (end 1 1.025) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -2 0 90) (size 2 1.6) (layers F.Cu F.Paste F.Mask) + (net 11 "Net-(C7-Pad1)")) + (pad 2 smd rect (at 2 0 90) (size 2 1.6) (layers F.Cu F.Paste F.Mask) + (net 12 "Net-(C7-Pad2)")) + (model Capacitors_SMD.3dshapes/C_1206_HandSoldering.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_SMD:C_1206_HandSoldering placed (layer F.Cu) (tedit 541A9C03) (tstamp 55DD060B) + (at 190.3222 111.9886 270) + (descr "Capacitor SMD 1206, hand soldering") + (tags "capacitor 1206") + (path /55D75F49) + (attr smd) + (fp_text reference C8 (at 0 -2.3 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value C_Small (at 0 2.3 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -3.3 -1.15) (end 3.3 -1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.3 1.15) (end 3.3 1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.3 -1.15) (end -3.3 1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start 3.3 -1.15) (end 3.3 1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1 -1.025) (end -1 -1.025) (layer F.SilkS) (width 0.15)) + (fp_line (start -1 1.025) (end 1 1.025) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -2 0 270) (size 2 1.6) (layers F.Cu F.Paste F.Mask) + (net 13 /LM324_VCC)) + (pad 2 smd rect (at 2 0 270) (size 2 1.6) (layers F.Cu F.Paste F.Mask) + (net 14 /VGND)) + (model Capacitors_SMD.3dshapes/C_1206_HandSoldering.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_Elko_ThroughHole:Elko_vert_11.2x6.3mm_RM2.5_CopperClear placed (layer F.Cu) (tedit 5454A12B) (tstamp 55DD0611) + (at 206.0194 117.2464 270) + (descr "Electrolytic Capacitor, vertical, diameter 6,3mm, RM 2,5mm, CopperClear, radial,") + (tags "Electrolytic Capacitor, vertical, diameter 6,3mm, RM 2,5mm, Elko, Electrolytkondensator, Kondensator gepolt, Durchmesser 6,3mm, CopperClear, radial,") + (path /55CC64C3) + (fp_text reference C9 (at 1.27 -5.08 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value CP1 (at 1.27 5.08 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 0.26924 -1.69926) (end 0.76962 -1.69926) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.26924 -1.69926) (end 0.26924 -2.19964) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.23114 -1.69926) (end 0.26924 -1.69926) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.26924 -1.69926) (end 0.26924 -1.30048) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.26924 -1.30048) (end 0.26924 -1.19888) (layer F.SilkS) (width 0.15)) + (fp_circle (center 1.27 0) (end 4.4196 0) (layer F.SilkS) (width 0.15)) + (pad 2 thru_hole circle (at 2.54 0 270) (size 1.50114 1.50114) (drill 0.8001) (layers *.Cu *.Mask F.SilkS) + (net 15 /VSENSE_OCP)) + (pad 1 thru_hole circle (at 0 0 270) (size 1.50114 1.50114) (drill 0.8001) (layers *.Cu *.Mask F.SilkS) + (net 16 "Net-(C9-Pad1)")) + (model Capacitors_Elko_ThroughHole.3dshapes/Elko_vert_11.2x6.3mm_RM2.5_CopperClear.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module SMD:SMD_1206 placed (layer F.Cu) (tedit 5510702E) (tstamp 55DD0617) + (at 100.584 107.3658) + (tags Handsolderable) + (path /55D739F3) + (fp_text reference F1 (at -1.7 0 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value F_Small (at 2.6 0 90) (layer F.SilkS) hide + (effects (font (thickness 0.3048))) + ) + (fp_line (start -0.8 -1.6) (end 0.8 -1.6) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.8 -1.6) (end 0.8 1.6) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.8 1.6) (end -0.8 1.6) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.8 1.6) (end -0.8 -1.6) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at 0 -1.6) (size 2 2) (layers F.Cu F.Paste F.Mask) + (net 6 GND)) + (pad 2 smd rect (at 0 1.6) (size 2 2) (layers F.Cu F.Paste F.Mask) + (net 14 /VGND)) + (model 3D/SMD/SMD-1206.wrl + (at (xyz 0 0 0)) + (scale (xyz 0.3937 0.3937 0.3937)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Housings_QFP:LQFP-44_10x10mm_Pitch0.8mm placed (layer F.Cu) (tedit 54130A77) (tstamp 55DD0647) + (at 158.115 107.95) + (descr "LQFP44 (see Appnote_PCB_Guidelines_TRINAMIC_packages.pdf)") + (tags "QFP 0.8") + (path /55CA8F25) + (attr smd) + (fp_text reference IC1 (at 0 -7.65) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value ATXMEGA16A4U-A (at 0 7.65) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -6.9 -6.9) (end -6.9 6.9) (layer F.CrtYd) (width 0.05)) + (fp_line (start 6.9 -6.9) (end 6.9 6.9) (layer F.CrtYd) (width 0.05)) + (fp_line (start -6.9 -6.9) (end 6.9 -6.9) (layer F.CrtYd) (width 0.05)) + (fp_line (start -6.9 6.9) (end 6.9 6.9) (layer F.CrtYd) (width 0.05)) + (fp_line (start -5.175 -5.175) (end -5.175 -4.505) (layer F.SilkS) (width 0.15)) + (fp_line (start 5.175 -5.175) (end 5.175 -4.505) (layer F.SilkS) (width 0.15)) + (fp_line (start 5.175 5.175) (end 5.175 4.505) (layer F.SilkS) (width 0.15)) + (fp_line (start -5.175 5.175) (end -5.175 4.505) (layer F.SilkS) (width 0.15)) + (fp_line (start -5.175 -5.175) (end -4.505 -5.175) (layer F.SilkS) (width 0.15)) + (fp_line (start -5.175 5.175) (end -4.505 5.175) (layer F.SilkS) (width 0.15)) + (fp_line (start 5.175 5.175) (end 4.505 5.175) (layer F.SilkS) (width 0.15)) + (fp_line (start 5.175 -5.175) (end 4.505 -5.175) (layer F.SilkS) (width 0.15)) + (fp_line (start -5.175 -4.505) (end -6.65 -4.505) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -5.85 -4) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 17 "Net-(IC1-Pad1)")) + (pad 2 smd rect (at -5.85 -3.2) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 18 "Net-(IC1-Pad2)")) + (pad 3 smd rect (at -5.85 -2.4) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 19 "Net-(IC1-Pad3)")) + (pad 4 smd rect (at -5.85 -1.6) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 20 "Net-(IC1-Pad4)")) + (pad 5 smd rect (at -5.85 -0.8) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 21 "Net-(IC1-Pad5)")) + (pad 6 smd rect (at -5.85 0) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 22 /DAC_OUT)) + (pad 7 smd rect (at -5.85 0.8) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 23 "Net-(IC1-Pad7)")) + (pad 8 smd rect (at -5.85 1.6) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 6 GND)) + (pad 9 smd rect (at -5.85 2.4) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 7 /VCC_3V3)) + (pad 10 smd rect (at -5.85 3.2) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 24 "Net-(IC1-Pad10)")) + (pad 11 smd rect (at -5.85 4) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 25 /XCK)) + (pad 12 smd rect (at -4 5.85 90) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 26 /DIG_CH2)) + (pad 13 smd rect (at -3.2 5.85 90) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 27 "Net-(IC1-Pad13)")) + (pad 14 smd rect (at -2.4 5.85 90) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 6 GND)) + (pad 15 smd rect (at -1.6 5.85 90) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 25 /XCK)) + (pad 16 smd rect (at -0.8 5.85 90) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 28 "Net-(IC1-Pad16)")) + (pad 17 smd rect (at 0 5.85 90) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 29 /DIG_CH1)) + (pad 18 smd rect (at 0.8 5.85 90) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 6 GND)) + (pad 19 smd rect (at 1.6 5.85 90) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 7 /VCC_3V3)) + (pad 20 smd rect (at 2.4 5.85 90) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 30 "Net-(IC1-Pad20)")) + (pad 21 smd rect (at 3.2 5.85 90) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 31 "Net-(IC1-Pad21)")) + (pad 22 smd rect (at 4 5.85 90) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 32 "Net-(IC1-Pad22)")) + (pad 23 smd rect (at 5.85 4) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 33 "Net-(IC1-Pad23)")) + (pad 24 smd rect (at 5.85 3.2) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 34 /PSU_PWM)) + (pad 25 smd rect (at 5.85 2.4) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 35 "Net-(IC1-Pad25)")) + (pad 26 smd rect (at 5.85 1.6) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 36 /D-)) + (pad 27 smd rect (at 5.85 0.8) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 37 /D+)) + (pad 28 smd rect (at 5.85 0) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 38 "Net-(IC1-Pad28)")) + (pad 29 smd rect (at 5.85 -0.8) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 39 "Net-(IC1-Pad29)")) + (pad 30 smd rect (at 5.85 -1.6) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 6 GND)) + (pad 31 smd rect (at 5.85 -2.4) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 7 /VCC_3V3)) + (pad 32 smd rect (at 5.85 -3.2) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 40 "Net-(IC1-Pad32)")) + (pad 33 smd rect (at 5.85 -4) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 41 "Net-(IC1-Pad33)")) + (pad 34 smd rect (at 4 -5.85 90) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 42 "Net-(IC1-Pad34)")) + (pad 35 smd rect (at 3.2 -5.85 90) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 43 "Net-(IC1-Pad35)")) + (pad 36 smd rect (at 2.4 -5.85 90) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 44 "Net-(IC1-Pad36)")) + (pad 37 smd rect (at 1.6 -5.85 90) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 45 "Net-(IC1-Pad37)")) + (pad 38 smd rect (at 0.8 -5.85 90) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 9 /AGND)) + (pad 39 smd rect (at 0 -5.85 90) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 8 /AVCC)) + (pad 40 smd rect (at -0.8 -5.85 90) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 46 /CH1)) + (pad 41 smd rect (at -1.6 -5.85 90) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 15 /VSENSE_OCP)) + (pad 42 smd rect (at -2.4 -5.85 90) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 47 /CH2)) + (pad 43 smd rect (at -3.2 -5.85 90) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 14 /VGND)) + (pad 44 smd rect (at -4 -5.85 90) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 48 /AVCC_ON_2)) + (model Housings_QFP.3dshapes/LQFP-44_10x10mm_Pitch0.8mm.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Pin_Headers:Pin_Header_Straight_1x04 placed (layer F.Cu) (tedit 0) (tstamp 55DD064F) + (at 117.7544 148.0312 90) + (descr "Through hole pin header") + (tags "pin header") + (path /55CAB35C) + (fp_text reference P1 (at 0 -5.1 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value SCOPE_IN (at 0 -3.1 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.75 -1.75) (end -1.75 9.4) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.75 -1.75) (end 1.75 9.4) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 -1.75) (end 1.75 -1.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 9.4) (end 1.75 9.4) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.27 1.27) (end -1.27 8.89) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.27 1.27) (end 1.27 8.89) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.55 -1.55) (end 1.55 0) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.27 8.89) (end 1.27 8.89) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.27 1.27) (end -1.27 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.55 0) (end -1.55 -1.55) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.55 -1.55) (end 1.55 -1.55) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole rect (at 0 0 90) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 3 "Net-(C2-Pad1)")) + (pad 2 thru_hole oval (at 0 2.54 90) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 4 "Net-(C2-Pad2)")) + (pad 3 thru_hole oval (at 0 5.08 90) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 2 "Net-(C1-Pad2)")) + (pad 4 thru_hole oval (at 0 7.62 90) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 1 "Net-(C1-Pad1)")) + (model Pin_Headers.3dshapes/Pin_Header_Straight_1x04.wrl + (at (xyz 0 -0.15 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 90)) + ) + ) + + (module Connect:USB_Micro-B placed (layer F.Cu) (tedit 5543E447) (tstamp 55DD065C) + (at 93.345 100.965 270) + (descr "Micro USB Type B Receptacle") + (tags "USB USB_B USB_micro USB_OTG") + (path /55CA90D2) + (attr smd) + (fp_text reference P2 (at 0 -3.45 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value USB_OTG (at 0 4.8 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -4.6 -2.8) (end 4.6 -2.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 4.6 -2.8) (end 4.6 4.05) (layer F.CrtYd) (width 0.05)) + (fp_line (start 4.6 4.05) (end -4.6 4.05) (layer F.CrtYd) (width 0.05)) + (fp_line (start -4.6 4.05) (end -4.6 -2.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -4.3509 3.81746) (end 4.3491 3.81746) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.3509 -2.58754) (end 4.3491 -2.58754) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.3491 -2.58754) (end 4.3491 3.81746) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.3491 2.58746) (end -4.3509 2.58746) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.3509 3.81746) (end -4.3509 -2.58754) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -1.3009 -1.56254) (size 1.35 0.4) (layers F.Cu F.Paste F.Mask) + (net 5 +5V)) + (pad 2 smd rect (at -0.6509 -1.56254) (size 1.35 0.4) (layers F.Cu F.Paste F.Mask) + (net 36 /D-)) + (pad 3 smd rect (at -0.0009 -1.56254) (size 1.35 0.4) (layers F.Cu F.Paste F.Mask) + (net 37 /D+)) + (pad 4 smd rect (at 0.6491 -1.56254) (size 1.35 0.4) (layers F.Cu F.Paste F.Mask) + (net 49 "Net-(P2-Pad4)")) + (pad 5 smd rect (at 1.2991 -1.56254) (size 1.35 0.4) (layers F.Cu F.Paste F.Mask) + (net 6 GND)) + (pad 6 thru_hole oval (at -2.5009 -1.56254) (size 0.95 1.25) (drill oval 0.55 0.85) (layers *.Cu *.Mask F.SilkS) + (net 6 GND)) + (pad 6 thru_hole oval (at 2.4991 -1.56254) (size 0.95 1.25) (drill oval 0.55 0.85) (layers *.Cu *.Mask F.SilkS) + (net 6 GND)) + (pad 6 thru_hole oval (at -3.5009 1.13746) (size 1.55 1) (drill oval 1.15 0.5) (layers *.Cu *.Mask F.SilkS) + (net 6 GND)) + (pad 6 thru_hole oval (at 3.4991 1.13746) (size 1.55 1) (drill oval 1.15 0.5) (layers *.Cu *.Mask F.SilkS) + (net 6 GND)) + ) + + (module Pin_Headers:Pin_Header_Straight_1x04 placed (layer F.Cu) (tedit 0) (tstamp 55DD0664) + (at 146.8628 148.7932 270) + (descr "Through hole pin header") + (tags "pin header") + (path /55CBF4D5) + (fp_text reference P3 (at 0 -5.1 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value DIG_OUT (at 0 -3.1 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.75 -1.75) (end -1.75 9.4) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.75 -1.75) (end 1.75 9.4) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 -1.75) (end 1.75 -1.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 9.4) (end 1.75 9.4) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.27 1.27) (end -1.27 8.89) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.27 1.27) (end 1.27 8.89) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.55 -1.55) (end 1.55 0) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.27 8.89) (end 1.27 8.89) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.27 1.27) (end -1.27 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.55 0) (end -1.55 -1.55) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.55 -1.55) (end 1.55 -1.55) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole rect (at 0 0 270) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 50 "Net-(P3-Pad1)")) + (pad 2 thru_hole oval (at 0 2.54 270) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 51 "Net-(P3-Pad2)")) + (pad 3 thru_hole oval (at 0 5.08 270) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 52 "Net-(P3-Pad3)")) + (pad 4 thru_hole oval (at 0 7.62 270) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 53 "Net-(P3-Pad4)")) + (model Pin_Headers.3dshapes/Pin_Header_Straight_1x04.wrl + (at (xyz 0 -0.15 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 90)) + ) + ) + + (module Pin_Headers:Pin_Header_Straight_1x03 placed (layer F.Cu) (tedit 0) (tstamp 55DD066B) + (at 125.1204 90.17) + (descr "Through hole pin header") + (tags "pin header") + (path /55CD757A) + (fp_text reference P4 (at 0 -5.1) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value OPAMP_JUMPER (at 0 -3.1) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.75 -1.75) (end -1.75 6.85) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.75 -1.75) (end 1.75 6.85) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 -1.75) (end 1.75 -1.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 6.85) (end 1.75 6.85) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.27 1.27) (end -1.27 6.35) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.27 6.35) (end 1.27 6.35) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.27 6.35) (end 1.27 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.55 -1.55) (end 1.55 0) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.27 1.27) (end -1.27 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.55 0) (end -1.55 -1.55) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.55 -1.55) (end 1.55 -1.55) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole rect (at 0 0) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 54 +12V)) + (pad 2 thru_hole oval (at 0 2.54) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 13 /LM324_VCC)) + (pad 3 thru_hole oval (at 0 5.08) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 55 "Net-(P4-Pad3)")) + (model Pin_Headers.3dshapes/Pin_Header_Straight_1x03.wrl + (at (xyz 0 -0.1 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 90)) + ) + ) + + (module Pin_Headers:Pin_Header_Straight_1x02 placed (layer F.Cu) (tedit 54EA090C) (tstamp 55DD0671) + (at 219.9894 89.3064 180) + (descr "Through hole pin header") + (tags "pin header") + (path /55CDECCE) + (fp_text reference P5 (at 0 -5.1 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value HVI (at 0 -3.1 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.27 1.27) (end 1.27 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.55 -1.55) (end 1.55 0) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.75 -1.75) (end -1.75 4.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.75 -1.75) (end 1.75 4.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 -1.75) (end 1.75 -1.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 4.3) (end 1.75 4.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.27 1.27) (end -1.27 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.55 0) (end -1.55 -1.55) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.55 -1.55) (end 1.55 -1.55) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.27 1.27) (end -1.27 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.27 3.81) (end 1.27 3.81) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole rect (at 0 0 180) (size 2.032 2.032) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 54 +12V)) + (pad 2 thru_hole oval (at 0 2.54 180) (size 2.032 2.032) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 14 /VGND)) + (model Pin_Headers.3dshapes/Pin_Header_Straight_1x02.wrl + (at (xyz 0 -0.05 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 90)) + ) + ) + + (module Pin_Headers:Pin_Header_Straight_1x02 placed (layer F.Cu) (tedit 54EA090C) (tstamp 55DD0677) + (at 193.5734 149.3012 270) + (descr "Through hole pin header") + (tags "pin header") + (path /55CB63F0) + (fp_text reference P6 (at 0 -5.1 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value AWG_OUT (at 0 -3.1 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.27 1.27) (end 1.27 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.55 -1.55) (end 1.55 0) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.75 -1.75) (end -1.75 4.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.75 -1.75) (end 1.75 4.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 -1.75) (end 1.75 -1.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 4.3) (end 1.75 4.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.27 1.27) (end -1.27 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.55 0) (end -1.55 -1.55) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.55 -1.55) (end 1.55 -1.55) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.27 1.27) (end -1.27 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.27 3.81) (end 1.27 3.81) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole rect (at 0 0 270) (size 2.032 2.032) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 12 "Net-(C7-Pad2)")) + (pad 2 thru_hole oval (at 0 2.54 270) (size 2.032 2.032) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 11 "Net-(C7-Pad1)")) + (model Pin_Headers.3dshapes/Pin_Header_Straight_1x02.wrl + (at (xyz 0 -0.05 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 90)) + ) + ) + + (module Pin_Headers:Pin_Header_Straight_1x02 placed (layer F.Cu) (tedit 54EA090C) (tstamp 55DD067D) + (at 219.9894 117.2464) + (descr "Through hole pin header") + (tags "pin header") + (path /55CC540F) + (fp_text reference P7 (at 0 -5.1) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value HVO (at 0 -3.1) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.27 1.27) (end 1.27 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.55 -1.55) (end 1.55 0) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.75 -1.75) (end -1.75 4.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.75 -1.75) (end 1.75 4.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 -1.75) (end 1.75 -1.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 4.3) (end 1.75 4.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.27 1.27) (end -1.27 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.55 0) (end -1.55 -1.55) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.55 -1.55) (end 1.55 -1.55) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.27 1.27) (end -1.27 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.27 3.81) (end 1.27 3.81) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole rect (at 0 0) (size 2.032 2.032) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 16 "Net-(C9-Pad1)")) + (pad 2 thru_hole oval (at 0 2.54) (size 2.032 2.032) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 15 /VSENSE_OCP)) + (model Pin_Headers.3dshapes/Pin_Header_Straight_1x02.wrl + (at (xyz 0 -0.05 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 90)) + ) + ) + + (module Pin_Headers:Pin_Header_Straight_1x02 placed (layer F.Cu) (tedit 54EA090C) (tstamp 55DD0683) + (at 164.211 149.3266 270) + (descr "Through hole pin header") + (tags "pin header") + (path /55D6DB77) + (fp_text reference P8 (at 0 -5.1 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value DIG_IN (at 0 -3.1 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.27 1.27) (end 1.27 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.55 -1.55) (end 1.55 0) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.75 -1.75) (end -1.75 4.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.75 -1.75) (end 1.75 4.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 -1.75) (end 1.75 -1.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 4.3) (end 1.75 4.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.27 1.27) (end -1.27 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.55 0) (end -1.55 -1.55) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.55 -1.55) (end 1.55 -1.55) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.27 1.27) (end -1.27 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.27 3.81) (end 1.27 3.81) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole rect (at 0 0 270) (size 2.032 2.032) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 56 "Net-(P8-Pad1)")) + (pad 2 thru_hole oval (at 0 2.54 270) (size 2.032 2.032) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 57 "Net-(P8-Pad2)")) + (model Pin_Headers.3dshapes/Pin_Header_Straight_1x02.wrl + (at (xyz 0 -0.05 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 90)) + ) + ) + + (module Resistors_SMD:R_1206_HandSoldering placed (layer F.Cu) (tedit 5418A20D) (tstamp 55DD0689) + (at 124.1552 135.89 270) + (descr "Resistor SMD 1206, hand soldering") + (tags "resistor 1206") + (path /55CAAB95) + (attr smd) + (fp_text reference R1 (at 0 -2.3 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 2.3 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -3.3 -1.2) (end 3.3 -1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.3 1.2) (end 3.3 1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.3 -1.2) (end -3.3 1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start 3.3 -1.2) (end 3.3 1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1 1.075) (end -1 1.075) (layer F.SilkS) (width 0.15)) + (fp_line (start -1 -1.075) (end 1 -1.075) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -2 0 270) (size 2 1.7) (layers F.Cu F.Paste F.Mask) + (net 58 "Net-(R1-Pad1)")) + (pad 2 smd rect (at 2 0 270) (size 2 1.7) (layers F.Cu F.Paste F.Mask) + (net 1 "Net-(C1-Pad1)")) + (model Resistors_SMD.3dshapes/R_1206_HandSoldering.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_1206_HandSoldering placed (layer F.Cu) (tedit 5418A20D) (tstamp 55DD068F) + (at 119.3292 135.89 270) + (descr "Resistor SMD 1206, hand soldering") + (tags "resistor 1206") + (path /55CAAD4C) + (attr smd) + (fp_text reference R2 (at 0 -2.3 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 2.3 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -3.3 -1.2) (end 3.3 -1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.3 1.2) (end 3.3 1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.3 -1.2) (end -3.3 1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start 3.3 -1.2) (end 3.3 1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1 1.075) (end -1 1.075) (layer F.SilkS) (width 0.15)) + (fp_line (start -1 -1.075) (end 1 -1.075) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -2 0 270) (size 2 1.7) (layers F.Cu F.Paste F.Mask) + (net 59 "Net-(R2-Pad1)")) + (pad 2 smd rect (at 2 0 270) (size 2 1.7) (layers F.Cu F.Paste F.Mask) + (net 3 "Net-(C2-Pad1)")) + (model Resistors_SMD.3dshapes/R_1206_HandSoldering.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_1206_HandSoldering placed (layer F.Cu) (tedit 5418A20D) (tstamp 55DD0695) + (at 123.6218 129.1336 90) + (descr "Resistor SMD 1206, hand soldering") + (tags "resistor 1206") + (path /55CAABF4) + (attr smd) + (fp_text reference R3 (at 0 -2.3 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 2.3 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -3.3 -1.2) (end 3.3 -1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.3 1.2) (end 3.3 1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.3 -1.2) (end -3.3 1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start 3.3 -1.2) (end 3.3 1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1 1.075) (end -1 1.075) (layer F.SilkS) (width 0.15)) + (fp_line (start -1 -1.075) (end 1 -1.075) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -2 0 90) (size 2 1.7) (layers F.Cu F.Paste F.Mask) + (net 58 "Net-(R1-Pad1)")) + (pad 2 smd rect (at 2 0 90) (size 2 1.7) (layers F.Cu F.Paste F.Mask) + (net 48 /AVCC_ON_2)) + (model Resistors_SMD.3dshapes/R_1206_HandSoldering.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_1206_HandSoldering placed (layer F.Cu) (tedit 5418A20D) (tstamp 55DD069B) + (at 119.4308 129.0828 270) + (descr "Resistor SMD 1206, hand soldering") + (tags "resistor 1206") + (path /55CAAD11) + (attr smd) + (fp_text reference R4 (at 0 -2.3 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 2.3 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -3.3 -1.2) (end 3.3 -1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.3 1.2) (end 3.3 1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.3 -1.2) (end -3.3 1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start 3.3 -1.2) (end 3.3 1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1 1.075) (end -1 1.075) (layer F.SilkS) (width 0.15)) + (fp_line (start -1 -1.075) (end 1 -1.075) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -2 0 270) (size 2 1.7) (layers F.Cu F.Paste F.Mask) + (net 48 /AVCC_ON_2)) + (pad 2 smd rect (at 2 0 270) (size 2 1.7) (layers F.Cu F.Paste F.Mask) + (net 59 "Net-(R2-Pad1)")) + (model Resistors_SMD.3dshapes/R_1206_HandSoldering.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_1206_HandSoldering placed (layer F.Cu) (tedit 5418A20D) (tstamp 55DD06A1) + (at 119.3292 122.3518 270) + (descr "Resistor SMD 1206, hand soldering") + (tags "resistor 1206") + (path /55CAAC5F) + (attr smd) + (fp_text reference R5 (at 0 -2.3 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 2.3 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -3.3 -1.2) (end 3.3 -1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.3 1.2) (end 3.3 1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.3 -1.2) (end -3.3 1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start 3.3 -1.2) (end 3.3 1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1 1.075) (end -1 1.075) (layer F.SilkS) (width 0.15)) + (fp_line (start -1 -1.075) (end 1 -1.075) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -2 0 270) (size 2 1.7) (layers F.Cu F.Paste F.Mask) + (net 8 /AVCC)) + (pad 2 smd rect (at 2 0 270) (size 2 1.7) (layers F.Cu F.Paste F.Mask) + (net 48 /AVCC_ON_2)) + (model Resistors_SMD.3dshapes/R_1206_HandSoldering.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_1206_HandSoldering placed (layer F.Cu) (tedit 5418A20D) (tstamp 55DD06A7) + (at 123.5964 122.428 270) + (descr "Resistor SMD 1206, hand soldering") + (tags "resistor 1206") + (path /55CAACD2) + (attr smd) + (fp_text reference R6 (at 0 -2.3 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 2.3 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -3.3 -1.2) (end 3.3 -1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.3 1.2) (end 3.3 1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.3 -1.2) (end -3.3 1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start 3.3 -1.2) (end 3.3 1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1 1.075) (end -1 1.075) (layer F.SilkS) (width 0.15)) + (fp_line (start -1 -1.075) (end 1 -1.075) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -2 0 270) (size 2 1.7) (layers F.Cu F.Paste F.Mask) + (net 9 /AGND)) + (pad 2 smd rect (at 2 0 270) (size 2 1.7) (layers F.Cu F.Paste F.Mask) + (net 48 /AVCC_ON_2)) + (model Resistors_SMD.3dshapes/R_1206_HandSoldering.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_1206_HandSoldering placed (layer F.Cu) (tedit 5418A20D) (tstamp 55DD06AD) + (at 136.652 136.017 270) + (descr "Resistor SMD 1206, hand soldering") + (tags "resistor 1206") + (path /55CBCDA5) + (attr smd) + (fp_text reference R7 (at 0 -2.3 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 2.3 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -3.3 -1.2) (end 3.3 -1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.3 1.2) (end 3.3 1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.3 -1.2) (end -3.3 1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start 3.3 -1.2) (end 3.3 1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1 1.075) (end -1 1.075) (layer F.SilkS) (width 0.15)) + (fp_line (start -1 -1.075) (end 1 -1.075) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -2 0 270) (size 2 1.7) (layers F.Cu F.Paste F.Mask) + (net 60 "Net-(R11-Pad2)")) + (pad 2 smd rect (at 2 0 270) (size 2 1.7) (layers F.Cu F.Paste F.Mask) + (net 53 "Net-(P3-Pad4)")) + (model Resistors_SMD.3dshapes/R_1206_HandSoldering.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_1206_HandSoldering placed (layer F.Cu) (tedit 5418A20D) (tstamp 55DD06B3) + (at 140.8684 136.017 270) + (descr "Resistor SMD 1206, hand soldering") + (tags "resistor 1206") + (path /55CBE401) + (attr smd) + (fp_text reference R8 (at 0 -2.3 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 2.3 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -3.3 -1.2) (end 3.3 -1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.3 1.2) (end 3.3 1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.3 -1.2) (end -3.3 1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start 3.3 -1.2) (end 3.3 1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1 1.075) (end -1 1.075) (layer F.SilkS) (width 0.15)) + (fp_line (start -1 -1.075) (end 1 -1.075) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -2 0 270) (size 2 1.7) (layers F.Cu F.Paste F.Mask) + (net 61 "Net-(R12-Pad2)")) + (pad 2 smd rect (at 2 0 270) (size 2 1.7) (layers F.Cu F.Paste F.Mask) + (net 52 "Net-(P3-Pad3)")) + (model Resistors_SMD.3dshapes/R_1206_HandSoldering.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_1206_HandSoldering placed (layer F.Cu) (tedit 5418A20D) (tstamp 55DD06B9) + (at 145.1102 135.9408 270) + (descr "Resistor SMD 1206, hand soldering") + (tags "resistor 1206") + (path /55CBE16B) + (attr smd) + (fp_text reference R9 (at 0 -2.3 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 2.3 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -3.3 -1.2) (end 3.3 -1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.3 1.2) (end 3.3 1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.3 -1.2) (end -3.3 1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start 3.3 -1.2) (end 3.3 1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1 1.075) (end -1 1.075) (layer F.SilkS) (width 0.15)) + (fp_line (start -1 -1.075) (end 1 -1.075) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -2 0 270) (size 2 1.7) (layers F.Cu F.Paste F.Mask) + (net 62 "Net-(R13-Pad2)")) + (pad 2 smd rect (at 2 0 270) (size 2 1.7) (layers F.Cu F.Paste F.Mask) + (net 51 "Net-(P3-Pad2)")) + (model Resistors_SMD.3dshapes/R_1206_HandSoldering.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_1206_HandSoldering placed (layer F.Cu) (tedit 5418A20D) (tstamp 55DD06BF) + (at 149.3012 135.9408 270) + (descr "Resistor SMD 1206, hand soldering") + (tags "resistor 1206") + (path /55CBE2C7) + (attr smd) + (fp_text reference R10 (at 0 -2.3 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 2.3 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -3.3 -1.2) (end 3.3 -1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.3 1.2) (end 3.3 1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.3 -1.2) (end -3.3 1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start 3.3 -1.2) (end 3.3 1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1 1.075) (end -1 1.075) (layer F.SilkS) (width 0.15)) + (fp_line (start -1 -1.075) (end 1 -1.075) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -2 0 270) (size 2 1.7) (layers F.Cu F.Paste F.Mask) + (net 63 "Net-(R10-Pad1)")) + (pad 2 smd rect (at 2 0 270) (size 2 1.7) (layers F.Cu F.Paste F.Mask) + (net 50 "Net-(P3-Pad1)")) + (model Resistors_SMD.3dshapes/R_1206_HandSoldering.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_1206_HandSoldering placed (layer F.Cu) (tedit 5418A20D) (tstamp 55DD06C5) + (at 136.6012 128.8542 270) + (descr "Resistor SMD 1206, hand soldering") + (tags "resistor 1206") + (path /55CBCD2A) + (attr smd) + (fp_text reference R11 (at 0 -2.3 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 2.3 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -3.3 -1.2) (end 3.3 -1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.3 1.2) (end 3.3 1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.3 -1.2) (end -3.3 1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start 3.3 -1.2) (end 3.3 1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1 1.075) (end -1 1.075) (layer F.SilkS) (width 0.15)) + (fp_line (start -1 -1.075) (end 1 -1.075) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -2 0 270) (size 2 1.7) (layers F.Cu F.Paste F.Mask) + (net 38 "Net-(IC1-Pad28)")) + (pad 2 smd rect (at 2 0 270) (size 2 1.7) (layers F.Cu F.Paste F.Mask) + (net 60 "Net-(R11-Pad2)")) + (model Resistors_SMD.3dshapes/R_1206_HandSoldering.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_1206_HandSoldering placed (layer F.Cu) (tedit 5418A20D) (tstamp 55DD06CB) + (at 140.843 128.6256 270) + (descr "Resistor SMD 1206, hand soldering") + (tags "resistor 1206") + (path /55CBE362) + (attr smd) + (fp_text reference R12 (at 0 -2.3 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 2.3 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -3.3 -1.2) (end 3.3 -1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.3 1.2) (end 3.3 1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.3 -1.2) (end -3.3 1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start 3.3 -1.2) (end 3.3 1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1 1.075) (end -1 1.075) (layer F.SilkS) (width 0.15)) + (fp_line (start -1 -1.075) (end 1 -1.075) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -2 0 270) (size 2 1.7) (layers F.Cu F.Paste F.Mask) + (net 39 "Net-(IC1-Pad29)")) + (pad 2 smd rect (at 2 0 270) (size 2 1.7) (layers F.Cu F.Paste F.Mask) + (net 61 "Net-(R12-Pad2)")) + (model Resistors_SMD.3dshapes/R_1206_HandSoldering.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_1206_HandSoldering placed (layer F.Cu) (tedit 5418A20D) (tstamp 55DD06D1) + (at 145.0594 128.4732 270) + (descr "Resistor SMD 1206, hand soldering") + (tags "resistor 1206") + (path /55CBE0F4) + (attr smd) + (fp_text reference R13 (at 0 -2.3 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 2.3 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -3.3 -1.2) (end 3.3 -1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.3 1.2) (end 3.3 1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.3 -1.2) (end -3.3 1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start 3.3 -1.2) (end 3.3 1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1 1.075) (end -1 1.075) (layer F.SilkS) (width 0.15)) + (fp_line (start -1 -1.075) (end 1 -1.075) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -2 0 270) (size 2 1.7) (layers F.Cu F.Paste F.Mask) + (net 40 "Net-(IC1-Pad32)")) + (pad 2 smd rect (at 2 0 270) (size 2 1.7) (layers F.Cu F.Paste F.Mask) + (net 62 "Net-(R13-Pad2)")) + (model Resistors_SMD.3dshapes/R_1206_HandSoldering.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_1206_HandSoldering placed (layer F.Cu) (tedit 5418A20D) (tstamp 55DD06D7) + (at 149.2504 128.27 270) + (descr "Resistor SMD 1206, hand soldering") + (tags "resistor 1206") + (path /55CBE21C) + (attr smd) + (fp_text reference R14 (at 0 -2.3 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 2.3 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -3.3 -1.2) (end 3.3 -1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.3 1.2) (end 3.3 1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.3 -1.2) (end -3.3 1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start 3.3 -1.2) (end 3.3 1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1 1.075) (end -1 1.075) (layer F.SilkS) (width 0.15)) + (fp_line (start -1 -1.075) (end 1 -1.075) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -2 0 270) (size 2 1.7) (layers F.Cu F.Paste F.Mask) + (net 41 "Net-(IC1-Pad33)")) + (pad 2 smd rect (at 2 0 270) (size 2 1.7) (layers F.Cu F.Paste F.Mask) + (net 63 "Net-(R10-Pad1)")) + (model Resistors_SMD.3dshapes/R_1206_HandSoldering.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_1206_HandSoldering placed (layer F.Cu) (tedit 5418A20D) (tstamp 55DD06DD) + (at 121.539 110.871 180) + (descr "Resistor SMD 1206, hand soldering") + (tags "resistor 1206") + (path /55D84EF6) + (attr smd) + (fp_text reference R15 (at 0 -2.3 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 2.3 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -3.3 -1.2) (end 3.3 -1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.3 1.2) (end 3.3 1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.3 -1.2) (end -3.3 1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start 3.3 -1.2) (end 3.3 1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1 1.075) (end -1 1.075) (layer F.SilkS) (width 0.15)) + (fp_line (start -1 -1.075) (end 1 -1.075) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -2 0 180) (size 2 1.7) (layers F.Cu F.Paste F.Mask) + (net 43 "Net-(IC1-Pad35)")) + (pad 2 smd rect (at 2 0 180) (size 2 1.7) (layers F.Cu F.Paste F.Mask) + (net 6 GND)) + (model Resistors_SMD.3dshapes/R_1206_HandSoldering.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_1206_HandSoldering placed (layer F.Cu) (tedit 5418A20D) (tstamp 55DD06E3) + (at 102.6414 95.3008 180) + (descr "Resistor SMD 1206, hand soldering") + (tags "resistor 1206") + (path /55D592A5) + (attr smd) + (fp_text reference R16 (at 0 -2.3 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 2.3 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -3.3 -1.2) (end 3.3 -1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.3 1.2) (end 3.3 1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.3 -1.2) (end -3.3 1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start 3.3 -1.2) (end 3.3 1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1 1.075) (end -1 1.075) (layer F.SilkS) (width 0.15)) + (fp_line (start -1 -1.075) (end 1 -1.075) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -2 0 180) (size 2 1.7) (layers F.Cu F.Paste F.Mask) + (net 64 "Net-(R16-Pad1)")) + (pad 2 smd rect (at 2 0 180) (size 2 1.7) (layers F.Cu F.Paste F.Mask) + (net 5 +5V)) + (model Resistors_SMD.3dshapes/R_1206_HandSoldering.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_1206_HandSoldering placed (layer F.Cu) (tedit 5418A20D) (tstamp 55DD06E9) + (at 111.1758 95.25 180) + (descr "Resistor SMD 1206, hand soldering") + (tags "resistor 1206") + (path /55D4D96A) + (attr smd) + (fp_text reference R17 (at 0 -2.3 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 2.3 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -3.3 -1.2) (end 3.3 -1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.3 1.2) (end 3.3 1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.3 -1.2) (end -3.3 1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start 3.3 -1.2) (end 3.3 1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1 1.075) (end -1 1.075) (layer F.SilkS) (width 0.15)) + (fp_line (start -1 -1.075) (end 1 -1.075) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -2 0 180) (size 2 1.7) (layers F.Cu F.Paste F.Mask) + (net 55 "Net-(P4-Pad3)")) + (pad 2 smd rect (at 2 0 180) (size 2 1.7) (layers F.Cu F.Paste F.Mask) + (net 64 "Net-(R16-Pad1)")) + (model Resistors_SMD.3dshapes/R_1206_HandSoldering.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_1206_HandSoldering placed (layer F.Cu) (tedit 5418A20D) (tstamp 55DD06EF) + (at 195.6816 137.7442 180) + (descr "Resistor SMD 1206, hand soldering") + (tags "resistor 1206") + (path /55CB4680) + (attr smd) + (fp_text reference R18 (at 0 -2.3 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 2.3 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -3.3 -1.2) (end 3.3 -1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.3 1.2) (end 3.3 1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.3 -1.2) (end -3.3 1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start 3.3 -1.2) (end 3.3 1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1 1.075) (end -1 1.075) (layer F.SilkS) (width 0.15)) + (fp_line (start -1 -1.075) (end 1 -1.075) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -2 0 180) (size 2 1.7) (layers F.Cu F.Paste F.Mask) + (net 65 "Net-(R18-Pad1)")) + (pad 2 smd rect (at 2 0 180) (size 2 1.7) (layers F.Cu F.Paste F.Mask) + (net 66 "Net-(R18-Pad2)")) + (model Resistors_SMD.3dshapes/R_1206_HandSoldering.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_1206_HandSoldering placed (layer F.Cu) (tedit 5418A20D) (tstamp 55DD06F5) + (at 188.7474 97.6376 180) + (descr "Resistor SMD 1206, hand soldering") + (tags "resistor 1206") + (path /55CC18B5) + (attr smd) + (fp_text reference R19 (at 0 -2.3 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 2.3 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -3.3 -1.2) (end 3.3 -1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.3 1.2) (end 3.3 1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.3 -1.2) (end -3.3 1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start 3.3 -1.2) (end 3.3 1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1 1.075) (end -1 1.075) (layer F.SilkS) (width 0.15)) + (fp_line (start -1 -1.075) (end 1 -1.075) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -2 0 180) (size 2 1.7) (layers F.Cu F.Paste F.Mask) + (net 10 "Net-(C6-Pad1)")) + (pad 2 smd rect (at 2 0 180) (size 2 1.7) (layers F.Cu F.Paste F.Mask) + (net 34 /PSU_PWM)) + (model Resistors_SMD.3dshapes/R_1206_HandSoldering.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_1206_HandSoldering placed (layer F.Cu) (tedit 5418A20D) (tstamp 55DD06FB) + (at 195.6816 141.9352) + (descr "Resistor SMD 1206, hand soldering") + (tags "resistor 1206") + (path /55CB9020) + (attr smd) + (fp_text reference R20 (at 0 -2.3) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 2.3) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -3.3 -1.2) (end 3.3 -1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.3 1.2) (end 3.3 1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.3 -1.2) (end -3.3 1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start 3.3 -1.2) (end 3.3 1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1 1.075) (end -1 1.075) (layer F.SilkS) (width 0.15)) + (fp_line (start -1 -1.075) (end 1 -1.075) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -2 0) (size 2 1.7) (layers F.Cu F.Paste F.Mask) + (net 12 "Net-(C7-Pad2)")) + (pad 2 smd rect (at 2 0) (size 2 1.7) (layers F.Cu F.Paste F.Mask) + (net 65 "Net-(R18-Pad1)")) + (model Resistors_SMD.3dshapes/R_1206_HandSoldering.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_1206_HandSoldering placed (layer F.Cu) (tedit 5418A20D) (tstamp 55DD0701) + (at 188.7474 90.7796 180) + (descr "Resistor SMD 1206, hand soldering") + (tags "resistor 1206") + (path /55CC31EA) + (attr smd) + (fp_text reference R21 (at 0 -2.3 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 2.3 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -3.3 -1.2) (end 3.3 -1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.3 1.2) (end 3.3 1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.3 -1.2) (end -3.3 1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start 3.3 -1.2) (end 3.3 1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1 1.075) (end -1 1.075) (layer F.SilkS) (width 0.15)) + (fp_line (start -1 -1.075) (end 1 -1.075) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -2 0 180) (size 2 1.7) (layers F.Cu F.Paste F.Mask) + (net 67 "Net-(R21-Pad1)")) + (pad 2 smd rect (at 2 0 180) (size 2 1.7) (layers F.Cu F.Paste F.Mask) + (net 6 GND)) + (model Resistors_SMD.3dshapes/R_1206_HandSoldering.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_1206_HandSoldering placed (layer F.Cu) (tedit 5418A20D) (tstamp 55DD0707) + (at 195.1482 92.7608 90) + (descr "Resistor SMD 1206, hand soldering") + (tags "resistor 1206") + (path /55CC344F) + (attr smd) + (fp_text reference R22 (at 0 -2.3 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 2.3 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -3.3 -1.2) (end 3.3 -1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.3 1.2) (end 3.3 1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.3 -1.2) (end -3.3 1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start 3.3 -1.2) (end 3.3 1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1 1.075) (end -1 1.075) (layer F.SilkS) (width 0.15)) + (fp_line (start -1 -1.075) (end 1 -1.075) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -2 0 90) (size 2 1.7) (layers F.Cu F.Paste F.Mask) + (net 68 "Net-(R22-Pad1)")) + (pad 2 smd rect (at 2 0 90) (size 2 1.7) (layers F.Cu F.Paste F.Mask) + (net 67 "Net-(R21-Pad1)")) + (model Resistors_SMD.3dshapes/R_1206_HandSoldering.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_1206_HandSoldering placed (layer F.Cu) (tedit 5418A20D) (tstamp 55DD070D) + (at 214.2744 118.5164 270) + (descr "Resistor SMD 1206, hand soldering") + (tags "resistor 1206") + (path /55CC774D) + (attr smd) + (fp_text reference R23 (at 0 -2.3 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 2.3 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -3.3 -1.2) (end 3.3 -1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.3 1.2) (end 3.3 1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.3 -1.2) (end -3.3 1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start 3.3 -1.2) (end 3.3 1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1 1.075) (end -1 1.075) (layer F.SilkS) (width 0.15)) + (fp_line (start -1 -1.075) (end 1 -1.075) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -2 0 270) (size 2 1.7) (layers F.Cu F.Paste F.Mask) + (net 16 "Net-(C9-Pad1)")) + (pad 2 smd rect (at 2 0 270) (size 2 1.7) (layers F.Cu F.Paste F.Mask) + (net 15 /VSENSE_OCP)) + (model Resistors_SMD.3dshapes/R_1206_HandSoldering.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_1206_HandSoldering placed (layer F.Cu) (tedit 5418A20D) (tstamp 55DD0713) + (at 214.2744 126.7714 270) + (descr "Resistor SMD 1206, hand soldering") + (tags "resistor 1206") + (path /55D44B0B) + (attr smd) + (fp_text reference R24 (at 0 -2.3 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 2.3 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -3.3 -1.2) (end 3.3 -1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.3 1.2) (end 3.3 1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.3 -1.2) (end -3.3 1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start 3.3 -1.2) (end 3.3 1.2) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1 1.075) (end -1 1.075) (layer F.SilkS) (width 0.15)) + (fp_line (start -1 -1.075) (end 1 -1.075) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -2 0 270) (size 2 1.7) (layers F.Cu F.Paste F.Mask) + (net 15 /VSENSE_OCP)) + (pad 2 smd rect (at 2 0 270) (size 2 1.7) (layers F.Cu F.Paste F.Mask) + (net 14 /VGND)) + (model Resistors_SMD.3dshapes/R_1206_HandSoldering.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Pin_Headers:Pin_Header_Angled_1x03 placed (layer F.Cu) (tedit 0) (tstamp 55DD071A) + (at 206.375 101.2444) + (descr "Through hole pin header") + (tags "pin header") + (path /55CC4BD0) + (fp_text reference T1 (at 0 -5.1) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value TIP29A (at 0 -3.1) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.5 -1.75) (end -1.5 6.85) (layer F.CrtYd) (width 0.05)) + (fp_line (start 10.65 -1.75) (end 10.65 6.85) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.5 -1.75) (end 10.65 -1.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.5 6.85) (end 10.65 6.85) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -1.55) (end -1.3 0) (layer F.SilkS) (width 0.15)) + (fp_line (start 0 -1.55) (end -1.3 -1.55) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.191 -0.127) (end 10.033 -0.127) (layer F.SilkS) (width 0.15)) + (fp_line (start 10.033 -0.127) (end 10.033 0.127) (layer F.SilkS) (width 0.15)) + (fp_line (start 10.033 0.127) (end 4.191 0.127) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.191 0.127) (end 4.191 0) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.191 0) (end 10.033 0) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.524 -0.254) (end 1.143 -0.254) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.524 0.254) (end 1.143 0.254) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.524 2.286) (end 1.143 2.286) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.524 2.794) (end 1.143 2.794) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.524 4.826) (end 1.143 4.826) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.524 5.334) (end 1.143 5.334) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.064 1.27) (end 4.064 -1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start 10.16 0.254) (end 4.064 0.254) (layer F.SilkS) (width 0.15)) + (fp_line (start 10.16 -0.254) (end 10.16 0.254) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.064 -0.254) (end 10.16 -0.254) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.524 1.27) (end 4.064 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.524 -1.27) (end 1.524 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.524 -1.27) (end 4.064 -1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.524 3.81) (end 4.064 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.524 3.81) (end 1.524 6.35) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.064 4.826) (end 10.16 4.826) (layer F.SilkS) (width 0.15)) + (fp_line (start 10.16 4.826) (end 10.16 5.334) (layer F.SilkS) (width 0.15)) + (fp_line (start 10.16 5.334) (end 4.064 5.334) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.064 6.35) (end 4.064 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.064 3.81) (end 4.064 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start 10.16 2.794) (end 4.064 2.794) (layer F.SilkS) (width 0.15)) + (fp_line (start 10.16 2.286) (end 10.16 2.794) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.064 2.286) (end 10.16 2.286) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.524 3.81) (end 4.064 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.524 1.27) (end 1.524 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.524 1.27) (end 4.064 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.524 6.35) (end 4.064 6.35) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole rect (at 0 0) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 68 "Net-(R22-Pad1)")) + (pad 2 thru_hole oval (at 0 2.54) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 54 +12V)) + (pad 3 thru_hole oval (at 0 5.08) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 16 "Net-(C9-Pad1)")) + (model Pin_Headers.3dshapes/Pin_Header_Angled_1x03.wrl + (at (xyz 0 -0.1 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 90)) + ) + ) + + (module SMD:SOT-23-3 placed (layer F.Cu) (tedit 55DD0F6E) (tstamp 55DD0721) + (at 105.2068 100.7872 180) + (path /55CA99FA) + (fp_text reference U1 (at 2.4384 0 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 78L05 (at -2.2 0 270) (layer F.Fab) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 1 -0.4) (end 1.1 -0.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -0.8) (end -1.5 0.8) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 0.8) (end 1.5 0.8) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 0.8) (end 1.5 -0.8) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 -0.8) (end -1.5 -0.8) (layer F.SilkS) (width 0.15)) + (pad 3 smd rect (at 0 1.4 180) (size 0.6 0.9) (layers F.Cu F.Paste F.Mask) + (net 5 +5V)) + (pad 2 smd rect (at -0.95 -1.4 180) (size 0.6 0.9) (layers F.Cu F.Paste F.Mask) + (net 7 /VCC_3V3)) + (pad 1 smd rect (at 0.95 -1.4 180) (size 0.6 0.9) (layers F.Cu F.Paste F.Mask) + (net 6 GND)) + (model 3D/SMD/SOT-23-3.wrl + (at (xyz 0 0 0)) + (scale (xyz 0.3937 0.3937 0.3937)) + (rotate (xyz 0 0 90)) + ) + ) + + (module Housings_SOIC:SOIC-14_3.9x8.7mm_Pitch1.27mm placed (layer F.Cu) (tedit 54130A77) (tstamp 55DD0733) + (at 190.2714 103.9876 90) + (descr "14-Lead Plastic Small Outline (SL) - Narrow, 3.90 mm Body [SOIC] (see Microchip Packaging Specification 00000049BS.pdf)") + (tags "SOIC 1.27") + (path /55CA87E2) + (attr smd) + (fp_text reference U2 (at 0 -5.375 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value LM324 (at 0 5.375 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -3.7 -4.65) (end -3.7 4.65) (layer F.CrtYd) (width 0.05)) + (fp_line (start 3.7 -4.65) (end 3.7 4.65) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.7 -4.65) (end 3.7 -4.65) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.7 4.65) (end 3.7 4.65) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.075 -4.45) (end -2.075 -4.335) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.075 -4.45) (end 2.075 -4.335) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.075 4.45) (end 2.075 4.335) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.075 4.45) (end -2.075 4.335) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.075 -4.45) (end 2.075 -4.45) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.075 4.45) (end 2.075 4.45) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.075 -4.335) (end -3.45 -4.335) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -2.7 -3.81 90) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 46 /CH1)) + (pad 2 smd rect (at -2.7 -2.54 90) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 46 /CH1)) + (pad 3 smd rect (at -2.7 -1.27 90) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 58 "Net-(R1-Pad1)")) + (pad 4 smd rect (at -2.7 0 90) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 13 /LM324_VCC)) + (pad 5 smd rect (at -2.7 1.27 90) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 59 "Net-(R2-Pad1)")) + (pad 6 smd rect (at -2.7 2.54 90) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 47 /CH2)) + (pad 7 smd rect (at -2.7 3.81 90) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 47 /CH2)) + (pad 8 smd rect (at 2.7 3.81 90) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 68 "Net-(R22-Pad1)")) + (pad 9 smd rect (at 2.7 2.54 90) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 67 "Net-(R21-Pad1)")) + (pad 10 smd rect (at 2.7 1.27 90) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 10 "Net-(C6-Pad1)")) + (pad 11 smd rect (at 2.7 0 90) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 14 /VGND)) + (pad 12 smd rect (at 2.7 -1.27 90) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 22 /DAC_OUT)) + (pad 13 smd rect (at 2.7 -2.54 90) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 66 "Net-(R18-Pad2)")) + (pad 14 smd rect (at 2.7 -3.81 90) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 66 "Net-(R18-Pad2)")) + (model Housings_SOIC.3dshapes/SOIC-14_3.9x8.7mm_Pitch1.27mm.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Footprints:SOT363 placed (layer F.Cu) (tedit 5070B96C) (tstamp 55DD073D) + (at 162.5346 143.2306) + (descr SOT363) + (path /55D6ACFD) + (attr smd) + (fp_text reference U3 (at 0.09906 1.69926) (layer F.SilkS) hide + (effects (font (size 0.762 0.635) (thickness 0.127))) + ) + (fp_text value DMN63D8LDW (at 0 -1.50114) (layer F.SilkS) + (effects (font (size 0.762 0.635) (thickness 0.127))) + ) + (fp_line (start 0.635 1.016) (end 0.635 -1.016) (layer F.SilkS) (width 0.1524)) + (fp_line (start 0.635 -1.016) (end -0.635 -1.016) (layer F.SilkS) (width 0.1524)) + (fp_line (start -0.635 -1.016) (end -0.635 1.016) (layer F.SilkS) (width 0.1524)) + (fp_line (start -0.635 1.016) (end 0.635 1.016) (layer F.SilkS) (width 0.1524)) + (pad 1 smd rect (at -1.016 -0.635) (size 0.508 0.3048) (layers F.Cu F.Paste F.Mask) + (net 6 GND)) + (pad 3 smd rect (at -1.016 0.635) (size 0.508 0.3048) (layers F.Cu F.Paste F.Mask) + (net 26 /DIG_CH2)) + (pad 5 smd rect (at 1.016 0) (size 0.508 0.3048) (layers F.Cu F.Paste F.Mask) + (net 56 "Net-(P8-Pad1)")) + (pad 2 smd rect (at -1.016 0) (size 0.508 0.3048) (layers F.Cu F.Paste F.Mask) + (net 57 "Net-(P8-Pad2)")) + (pad 4 smd rect (at 1.016 0.635) (size 0.508 0.3048) (layers F.Cu F.Paste F.Mask) + (net 6 GND)) + (pad 6 smd rect (at 1.016 -0.635) (size 0.508 0.3048) (layers F.Cu F.Paste F.Mask) + (net 29 /DIG_CH1)) + (model 3D/SOT-363.wrl + (at (xyz 0 0 0)) + (scale (xyz 0.3937 0.3937 0.3937)) + (rotate (xyz 0 0 0)) + ) + ) + + (gr_text "DONT FORGET BODGE SECTION" (at 108.6104 73.533) (layer F.Cu) + (effects (font (size 1.5 1.5) (thickness 0.3))) + ) + (gr_line (start 88.9 71.12) (end 230.505 71.12) (angle 90) (layer Edge.Cuts) (width 0.1)) + (gr_line (start 230.505 151.13) (end 230.505 71.12) (angle 90) (layer Edge.Cuts) (width 0.1)) + (gr_line (start 88.9 151.13) (end 230.505 151.13) (angle 90) (layer Edge.Cuts) (width 0.1)) + (gr_line (start 88.9 71.12) (end 88.9 151.13) (angle 90) (layer Edge.Cuts) (width 0.1)) + + (segment (start 183.7502 83.7692) (end 183.9534 83.9724) (width 0.25) (layer F.Cu) (net 0) (tstamp 55DD0BE4)) + (segment (start 124.1044 140.494) (end 124.1044 137.9408) (width 0.25) (layer F.Cu) (net 1)) + (segment (start 124.1044 137.9408) (end 124.1552 137.89) (width 0.25) (layer F.Cu) (net 1) (tstamp 55DD11D0)) + (segment (start 125.3744 148.0312) (end 126.2888 148.0312) (width 0.25) (layer F.Cu) (net 1)) + (segment (start 126.016 140.494) (end 124.1044 140.494) (width 0.25) (layer F.Cu) (net 1) (tstamp 55DD11A9)) + (segment (start 127.508 141.986) (end 126.016 140.494) (width 0.25) (layer F.Cu) (net 1) (tstamp 55DD11A7)) + (segment (start 127.508 146.812) (end 127.508 141.986) (width 0.25) (layer F.Cu) (net 1) (tstamp 55DD11A5)) + (segment (start 126.2888 148.0312) (end 127.508 146.812) (width 0.25) (layer F.Cu) (net 1) (tstamp 55DD11A4)) + (segment (start 122.8344 148.0312) (end 122.8344 145.764) (width 0.25) (layer F.Cu) (net 2)) + (segment (start 122.8344 145.764) (end 124.1044 144.494) (width 0.25) (layer F.Cu) (net 2) (tstamp 55DD119F)) + (segment (start 119.2784 140.5448) (end 119.2784 137.9408) (width 0.25) (layer F.Cu) (net 3)) + (segment (start 119.2784 137.9408) (end 119.3292 137.89) (width 0.25) (layer F.Cu) (net 3) (tstamp 55DD11C4)) + (segment (start 117.7544 148.0312) (end 116.1796 148.0312) (width 0.25) (layer F.Cu) (net 3)) + (segment (start 117.2652 140.5448) (end 119.2784 140.5448) (width 0.25) (layer F.Cu) (net 3) (tstamp 55DD11B2)) + (segment (start 115.3668 142.4432) (end 117.2652 140.5448) (width 0.25) (layer F.Cu) (net 3) (tstamp 55DD11B0)) + (segment (start 115.3668 147.2184) (end 115.3668 142.4432) (width 0.25) (layer F.Cu) (net 3) (tstamp 55DD11AF)) + (segment (start 116.1796 148.0312) (end 115.3668 147.2184) (width 0.25) (layer F.Cu) (net 3) (tstamp 55DD11AD)) + (segment (start 120.2944 148.0312) (end 120.2944 145.5608) (width 0.25) (layer F.Cu) (net 4)) + (segment (start 120.2944 145.5608) (end 119.2784 144.5448) (width 0.25) (layer F.Cu) (net 4) (tstamp 55DD119B)) + (segment (start 100.5586 98.838) (end 100.5586 95.3836) (width 0.25) (layer F.Cu) (net 5)) + (segment (start 100.5586 95.3836) (end 100.6414 95.3008) (width 0.25) (layer F.Cu) (net 5) (tstamp 55DD1558)) + (segment (start 100.5586 98.838) (end 98.3422 98.838) (width 0.25) (layer F.Cu) (net 5)) + (segment (start 97.5161 99.6641) (end 94.90754 99.6641) (width 0.25) (layer F.Cu) (net 5) (tstamp 55DD142F)) + (segment (start 98.3422 98.838) (end 97.5161 99.6641) (width 0.25) (layer F.Cu) (net 5) (tstamp 55DD142E)) + (segment (start 105.2068 99.3872) (end 104.9752 99.3872) (width 0.25) (layer F.Cu) (net 5)) + (segment (start 104.9752 99.3872) (end 104.426 98.838) (width 0.25) (layer F.Cu) (net 5) (tstamp 55DD1404)) + (segment (start 104.426 98.838) (end 100.5586 98.838) (width 0.25) (layer F.Cu) (net 5) (tstamp 55DD1405)) + (segment (start 100.5586 98.838) (end 99.8662 98.838) (width 0.25) (layer F.Cu) (net 5)) + (segment (start 163.5506 143.8656) (end 162.9664 143.8656) (width 0.25) (layer F.Cu) (net 6)) + (segment (start 162.2044 142.5956) (end 161.5186 142.5956) (width 0.25) (layer F.Cu) (net 6) (tstamp 55DD15D7)) + (segment (start 162.4584 142.8496) (end 162.2044 142.5956) (width 0.25) (layer F.Cu) (net 6) (tstamp 55DD15D6)) + (segment (start 162.4584 143.3576) (end 162.4584 142.8496) (width 0.25) (layer F.Cu) (net 6) (tstamp 55DD15D5)) + (segment (start 162.9664 143.8656) (end 162.4584 143.3576) (width 0.25) (layer F.Cu) (net 6) (tstamp 55DD15D4)) + (segment (start 100.5586 102.838) (end 95.48144 102.838) (width 0.25) (layer F.Cu) (net 6)) + (segment (start 95.48144 102.838) (end 94.90754 102.2641) (width 0.25) (layer F.Cu) (net 6) (tstamp 55DD142B)) + (segment (start 103.41 105.7402) (end 103.41 103.034) (width 0.25) (layer F.Cu) (net 6)) + (segment (start 103.41 103.034) (end 104.2568 102.1872) (width 0.25) (layer F.Cu) (net 6) (tstamp 55DD1424)) + (segment (start 103.41 105.7402) (end 100.6096 105.7402) (width 0.25) (layer F.Cu) (net 6)) + (segment (start 100.6096 105.7402) (end 100.584 105.7658) (width 0.25) (layer F.Cu) (net 6) (tstamp 55DD1421)) + (segment (start 100.584 105.7658) (end 100.584 102.8634) (width 0.25) (layer F.Cu) (net 6)) + (segment (start 100.584 102.8634) (end 100.5586 102.838) (width 0.25) (layer F.Cu) (net 6) (tstamp 55DD1414)) + (segment (start 100.5586 102.838) (end 103.606 102.838) (width 0.25) (layer F.Cu) (net 6)) + (segment (start 103.606 102.838) (end 104.2568 102.1872) (width 0.25) (layer F.Cu) (net 6) (tstamp 55DD1401)) + (segment (start 92.20754 97.4641) (end 93.90754 97.4641) (width 0.25) (layer F.Cu) (net 6)) + (segment (start 93.90754 97.4641) (end 94.90754 98.4641) (width 0.25) (layer F.Cu) (net 6) (tstamp 55DD1313)) + (segment (start 92.20754 104.4641) (end 92.20754 97.4641) (width 0.25) (layer F.Cu) (net 6)) + (segment (start 92.20754 104.4641) (end 93.90754 104.4641) (width 0.25) (layer F.Cu) (net 6)) + (segment (start 93.90754 104.4641) (end 94.90754 103.4641) (width 0.25) (layer F.Cu) (net 6) (tstamp 55DD130D)) + (segment (start 94.90754 102.2641) (end 94.90754 103.4641) (width 0.25) (layer F.Cu) (net 6)) + (segment (start 186.6966 94.234) (end 186.6966 90.8304) (width 0.25) (layer F.Cu) (net 6)) + (segment (start 186.6966 90.8304) (end 186.7474 90.7796) (width 0.25) (layer F.Cu) (net 6) (tstamp 55DD0C2F)) + (segment (start 107.41 105.7402) (end 107.41 103.4404) (width 0.25) (layer F.Cu) (net 7)) + (segment (start 107.41 103.4404) (end 106.1568 102.1872) (width 0.25) (layer F.Cu) (net 7) (tstamp 55DD141D)) + (segment (start 119.3292 120.3518) (end 119.3292 118.0404) (width 0.25) (layer F.Cu) (net 8)) + (segment (start 119.3292 118.0404) (end 119.4628 117.9068) (width 0.25) (layer F.Cu) (net 8) (tstamp 55DD1248)) + (segment (start 123.5964 120.428) (end 123.5964 118.0404) (width 0.25) (layer F.Cu) (net 9)) + (segment (start 123.5964 118.0404) (end 123.4628 117.9068) (width 0.25) (layer F.Cu) (net 9) (tstamp 55DD124B)) + (segment (start 191.5414 101.2876) (end 191.5414 98.4316) (width 0.25) (layer F.Cu) (net 10)) + (segment (start 190.7474 97.6376) (end 190.7474 94.2848) (width 0.25) (layer F.Cu) (net 10)) + (segment (start 190.7474 94.2848) (end 190.6966 94.234) (width 0.25) (layer F.Cu) (net 10) (tstamp 55DD0C2C)) + (segment (start 191.5414 98.4316) (end 190.7474 97.6376) (width 0.25) (layer F.Cu) (net 10) (tstamp 55DD0C17)) + (segment (start 190.9572 145.9164) (end 190.9572 149.225) (width 0.25) (layer F.Cu) (net 11)) + (segment (start 190.9572 149.225) (end 191.0334 149.3012) (width 0.25) (layer F.Cu) (net 11) (tstamp 55DD128A)) + (segment (start 193.6816 141.9352) (end 190.976 141.9352) (width 0.25) (layer F.Cu) (net 12)) + (segment (start 190.976 141.9352) (end 190.9572 141.9164) (width 0.25) (layer F.Cu) (net 12) (tstamp 55DD1520)) + (segment (start 190.9064 141.8656) (end 190.9572 141.9164) (width 0.25) (layer F.Cu) (net 12) (tstamp 55DD12A0)) + (segment (start 190.3222 109.9886) (end 190.3222 106.7384) (width 0.25) (layer F.Cu) (net 13)) + (segment (start 190.3222 106.7384) (end 190.2714 106.6876) (width 0.25) (layer F.Cu) (net 13) (tstamp 55DD16A4)) + (segment (start 219.9894 119.7864) (end 215.0044 119.7864) (width 0.25) (layer F.Cu) (net 15)) + (segment (start 215.0044 119.7864) (end 214.2744 120.5164) (width 0.25) (layer F.Cu) (net 15) (tstamp 55DD0C4D)) + (segment (start 214.2744 124.7714) (end 214.2744 120.5164) (width 0.25) (layer F.Cu) (net 15)) + (segment (start 214.2744 120.5164) (end 206.7494 120.5164) (width 0.25) (layer F.Cu) (net 15)) + (segment (start 206.7494 120.5164) (end 206.0194 119.7864) (width 0.25) (layer F.Cu) (net 15) (tstamp 55DD0C48)) + (segment (start 206.375 106.3244) (end 206.375 108.617) (width 0.25) (layer F.Cu) (net 16)) + (segment (start 206.375 108.617) (end 214.2744 116.5164) (width 0.25) (layer F.Cu) (net 16) (tstamp 55DD111A)) + (segment (start 219.9894 117.2464) (end 215.0044 117.2464) (width 0.25) (layer F.Cu) (net 16)) + (segment (start 215.0044 117.2464) (end 214.2744 116.5164) (width 0.25) (layer F.Cu) (net 16) (tstamp 55DD0C50)) + (segment (start 214.2744 116.5164) (end 206.7494 116.5164) (width 0.25) (layer F.Cu) (net 16)) + (segment (start 206.7494 116.5164) (end 206.0194 117.2464) (width 0.25) (layer F.Cu) (net 16) (tstamp 55DD0C45)) + (segment (start 123.6218 127.1336) (end 123.6218 124.4534) (width 0.25) (layer F.Cu) (net 48)) + (segment (start 123.6218 124.4534) (end 123.5964 124.428) (width 0.25) (layer F.Cu) (net 48) (tstamp 55DD1263)) + (segment (start 119.4308 127.0828) (end 119.4308 124.4534) (width 0.25) (layer F.Cu) (net 48)) + (segment (start 119.4308 124.4534) (end 119.3292 124.3518) (width 0.25) (layer F.Cu) (net 48) (tstamp 55DD1260)) + (segment (start 149.3012 137.9408) (end 149.3012 146.3548) (width 0.25) (layer F.Cu) (net 50)) + (segment (start 149.3012 146.3548) (end 146.8628 148.7932) (width 0.25) (layer F.Cu) (net 50) (tstamp 55DD1679)) + (segment (start 145.1102 137.9408) (end 145.1102 141.478) (width 0.25) (layer F.Cu) (net 51)) + (segment (start 144.3228 142.2654) (end 144.3228 148.7932) (width 0.25) (layer F.Cu) (net 51) (tstamp 55DD167E)) + (segment (start 145.1102 141.478) (end 144.3228 142.2654) (width 0.25) (layer F.Cu) (net 51) (tstamp 55DD167D)) + (segment (start 140.8684 138.017) (end 140.8684 140.081) (width 0.25) (layer F.Cu) (net 52)) + (segment (start 141.7828 140.9954) (end 141.7828 148.7932) (width 0.25) (layer F.Cu) (net 52) (tstamp 55DD1683)) + (segment (start 140.8684 140.081) (end 141.7828 140.9954) (width 0.25) (layer F.Cu) (net 52) (tstamp 55DD1681)) + (segment (start 136.652 138.017) (end 136.652 146.2024) (width 0.25) (layer F.Cu) (net 53)) + (segment (start 136.652 146.2024) (end 139.2428 148.7932) (width 0.25) (layer F.Cu) (net 53) (tstamp 55DD1686)) + (segment (start 206.375 103.7844) (end 208.7118 103.7844) (width 0.25) (layer F.Cu) (net 54)) + (segment (start 209.2198 100.076) (end 219.9894 89.3064) (width 0.25) (layer F.Cu) (net 54) (tstamp 55DD1116)) + (segment (start 209.2198 103.2764) (end 209.2198 100.076) (width 0.25) (layer F.Cu) (net 54) (tstamp 55DD1115)) + (segment (start 208.7118 103.7844) (end 209.2198 103.2764) (width 0.25) (layer F.Cu) (net 54) (tstamp 55DD1114)) + (segment (start 113.1758 95.25) (end 125.1204 95.25) (width 0.25) (layer F.Cu) (net 55)) + (segment (start 163.5506 143.2306) (end 164.9222 143.2306) (width 0.25) (layer F.Cu) (net 56)) + (segment (start 165.354 148.1836) (end 164.211 149.3266) (width 0.25) (layer F.Cu) (net 56) (tstamp 55DD15DE)) + (segment (start 165.354 143.6624) (end 165.354 148.1836) (width 0.25) (layer F.Cu) (net 56) (tstamp 55DD15DD)) + (segment (start 164.9222 143.2306) (end 165.354 143.6624) (width 0.25) (layer F.Cu) (net 56) (tstamp 55DD15DC)) + (segment (start 161.5186 143.2306) (end 160.274 143.2306) (width 0.25) (layer F.Cu) (net 57)) + (segment (start 159.2326 146.8882) (end 161.671 149.3266) (width 0.25) (layer F.Cu) (net 57) (tstamp 55DD15E5)) + (segment (start 159.2326 144.272) (end 159.2326 146.8882) (width 0.25) (layer F.Cu) (net 57) (tstamp 55DD15E3)) + (segment (start 160.274 143.2306) (end 159.2326 144.272) (width 0.25) (layer F.Cu) (net 57) (tstamp 55DD15E2)) + (segment (start 124.1552 133.89) (end 124.1552 131.667) (width 0.25) (layer F.Cu) (net 58)) + (segment (start 124.1552 131.667) (end 123.6218 131.1336) (width 0.25) (layer F.Cu) (net 58) (tstamp 55DD1266)) + (segment (start 119.3292 133.89) (end 119.3292 131.1844) (width 0.25) (layer F.Cu) (net 59)) + (segment (start 119.3292 131.1844) (end 119.4308 131.0828) (width 0.25) (layer F.Cu) (net 59) (tstamp 55DD1269)) + (segment (start 136.652 134.017) (end 136.652 130.905) (width 0.25) (layer F.Cu) (net 60)) + (segment (start 136.652 130.905) (end 136.6012 130.8542) (width 0.25) (layer F.Cu) (net 60) (tstamp 55DD1665)) + (segment (start 140.843 130.6256) (end 140.843 133.9916) (width 0.25) (layer F.Cu) (net 61)) + (segment (start 140.843 133.9916) (end 140.8684 134.017) (width 0.25) (layer F.Cu) (net 61) (tstamp 55DD1668)) + (segment (start 145.1102 133.9408) (end 145.1102 130.524) (width 0.25) (layer F.Cu) (net 62)) + (segment (start 145.1102 130.524) (end 145.0594 130.4732) (width 0.25) (layer F.Cu) (net 62) (tstamp 55DD166B)) + (segment (start 149.2504 130.27) (end 149.2504 133.89) (width 0.25) (layer F.Cu) (net 63)) + (segment (start 149.2504 133.89) (end 149.3012 133.9408) (width 0.25) (layer F.Cu) (net 63) (tstamp 55DD166E)) + (segment (start 104.6414 95.3008) (end 109.125 95.3008) (width 0.25) (layer F.Cu) (net 64)) + (segment (start 109.125 95.3008) (end 109.1758 95.25) (width 0.25) (layer F.Cu) (net 64) (tstamp 55DD155B)) + (segment (start 197.6816 141.9352) (end 197.6816 137.7442) (width 0.25) (layer F.Cu) (net 65)) + (segment (start 187.7314 101.2876) (end 186.4614 101.2876) (width 0.25) (layer F.Cu) (net 66)) + (segment (start 195.1482 90.7608) (end 190.7662 90.7608) (width 0.25) (layer F.Cu) (net 67)) + (segment (start 190.7662 90.7608) (end 190.7474 90.7796) (width 0.25) (layer F.Cu) (net 67) (tstamp 55DD0C42)) + (segment (start 192.8114 101.2876) (end 192.8114 91.5924) (width 0.25) (layer F.Cu) (net 67)) + (segment (start 191.9986 90.7796) (end 192.8114 91.5924) (width 0.25) (layer F.Cu) (net 67) (tstamp 55DD0C32)) + (segment (start 191.9986 90.7796) (end 190.7474 90.7796) (width 0.25) (layer F.Cu) (net 67)) + (segment (start 195.1482 94.7608) (end 195.1482 99.7204) (width 0.25) (layer F.Cu) (net 68) (tstamp 55DD0C3E)) + (segment (start 195.1482 99.7204) (end 194.0814 100.7872) (width 0.25) (layer F.Cu) (net 68) (tstamp 55DD0C3D)) + (segment (start 206.375 101.2444) (end 194.1246 101.2444) (width 0.25) (layer F.Cu) (net 68)) + (segment (start 194.1246 101.2444) (end 194.0814 101.2876) (width 0.25) (layer F.Cu) (net 68) (tstamp 55DD10E7)) + (segment (start 194.0814 101.2876) (end 194.0814 100.7872) (width 0.25) (layer F.Cu) (net 68)) + +) diff --git a/PCB/WOT/Tinylab_proto1.kicad_pcb_bak b/PCB/WOT/Tinylab_proto1.kicad_pcb_bak new file mode 100644 index 00000000..ba9a943c --- /dev/null +++ b/PCB/WOT/Tinylab_proto1.kicad_pcb_bak @@ -0,0 +1,2411 @@ +(kicad_pcb (version 4) (host pcbnew "(2015-08-05 BZR 6055, Git fa29c62)-product") + + (general + (links 100) + (no_connects 1) + (area 30.204106 117.562159 78.592471 157.286161) + (thickness 1.6) + (drawings 6) + (tracks 588) + (zones 0) + (modules 48) + (nets 71) + ) + + (page A4) + (layers + (0 F.Cu signal hide) + (31 B.Cu signal hide) + (32 B.Adhes user hide) + (33 F.Adhes user hide) + (34 B.Paste user hide) + (35 F.Paste user hide) + (36 B.SilkS user hide) + (37 F.SilkS user) + (38 B.Mask user hide) + (39 F.Mask user hide) + (40 Dwgs.User user hide) + (41 Cmts.User user hide) + (42 Eco1.User user hide) + (43 Eco2.User user hide) + (44 Edge.Cuts user hide) + (45 Margin user hide) + (46 B.CrtYd user hide) + (47 F.CrtYd user hide) + (48 B.Fab user hide) + (49 F.Fab user hide) + ) + + (setup + (last_trace_width 0.25) + (user_trace_width 0.254) + (user_trace_width 0.58) + (user_trace_width 1.16) + (trace_clearance 0.2) + (zone_clearance 0.508) + (zone_45_only no) + (trace_min 0.2) + (segment_width 0.2) + (edge_width 0.1) + (via_size 0.6) + (via_drill 0.4) + (via_min_size 0.4) + (via_min_drill 0.3) + (uvia_size 0.5) + (uvia_drill 0.3) + (uvias_allowed no) + (uvia_min_size 0.2) + (uvia_min_drill 0.1) + (pcb_text_width 0.3) + (pcb_text_size 1.5 1.5) + (mod_edge_width 0.15) + (mod_text_size 1 1) + (mod_text_width 0.15) + (pad_size 1.5 1.5) + (pad_drill 0.6) + (pad_to_mask_clearance 0) + (aux_axis_origin 53.68544 136.97204) + (visible_elements 7FFE4661) + (pcbplotparams + (layerselection 0x010f0_80000001) + (usegerberextensions true) + (excludeedgelayer true) + (linewidth 0.150000) + (plotframeref false) + (viasonmask false) + (mode 1) + (useauxorigin false) + (hpglpennumber 1) + (hpglpenspeed 20) + (hpglpendiameter 15) + (hpglpenoverlay 2) + (psnegative false) + (psa4output false) + (plotreference true) + (plotvalue true) + (plotinvisibletext false) + (padsonsilk false) + (subtractmaskfromsilk false) + (outputformat 1) + (mirror false) + (drillshape 0) + (scaleselection 1) + (outputdirectory OUTPUT/)) + ) + + (net 0 "") + (net 1 "Net-(C1-Pad1)") + (net 2 "Net-(C1-Pad2)") + (net 3 "Net-(C2-Pad1)") + (net 4 "Net-(C2-Pad2)") + (net 5 +5V) + (net 6 GND) + (net 7 /AVCC) + (net 8 /VCC_PSU) + (net 9 "Net-(C7-Pad1)") + (net 10 "Net-(C7-Pad2)") + (net 11 /VGND) + (net 12 "Net-(C11-Pad1)") + (net 13 "Net-(D1-Pad2)") + (net 14 "Net-(IC1-Pad1)") + (net 15 /CH2) + (net 16 "Net-(IC1-Pad3)") + (net 17 "Net-(IC1-Pad4)") + (net 18 "Net-(IC1-Pad5)") + (net 19 /DAC_OUT) + (net 20 "Net-(IC1-Pad7)") + (net 21 "Net-(IC1-Pad10)") + (net 22 /XCK) + (net 23 /DIG_CH2) + (net 24 "Net-(IC1-Pad13)") + (net 25 "Net-(IC1-Pad16)") + (net 26 /DIG_CH1) + (net 27 "Net-(IC1-Pad20)") + (net 28 "Net-(IC1-Pad21)") + (net 29 "Net-(IC1-Pad22)") + (net 30 "Net-(IC1-Pad23)") + (net 31 /PSU_PWM) + (net 32 "Net-(IC1-Pad25)") + (net 33 /D-) + (net 34 /D+) + (net 35 "Net-(IC1-Pad28)") + (net 36 "Net-(IC1-Pad29)") + (net 37 "Net-(IC1-Pad32)") + (net 38 "Net-(IC1-Pad33)") + (net 39 "Net-(IC1-Pad34)") + (net 40 "Net-(IC1-Pad35)") + (net 41 "Net-(IC1-Pad36)") + (net 42 "Net-(IC1-Pad37)") + (net 43 "Net-(IC1-Pad41)") + (net 44 /CH1) + (net 45 "Net-(IC1-Pad43)") + (net 46 /AVCC_ON_2) + (net 47 "Net-(P2-Pad4)") + (net 48 "Net-(P3-Pad1)") + (net 49 "Net-(P3-Pad2)") + (net 50 "Net-(P3-Pad3)") + (net 51 "Net-(P3-Pad4)") + (net 52 "Net-(P8-Pad1)") + (net 53 "Net-(P8-Pad2)") + (net 54 "Net-(R1-Pad1)") + (net 55 "Net-(R2-Pad1)") + (net 56 "Net-(R11-Pad2)") + (net 57 "Net-(R12-Pad2)") + (net 58 "Net-(R13-Pad2)") + (net 59 "Net-(R10-Pad1)") + (net 60 "Net-(R15-Pad1)") + (net 61 "Net-(R15-Pad2)") + (net 62 "Net-(R17-Pad2)") + (net 63 "Net-(R18-Pad2)") + (net 64 "Net-(U2-Pad12)") + (net 65 "Net-(U2-Pad13)") + (net 66 "Net-(U2-Pad14)") + (net 67 "Net-(IC1-Pad8)") + (net 68 "Net-(IC1-Pad9)") + (net 69 "Net-(IC1-Pad30)") + (net 70 "Net-(IC1-Pad31)") + + (net_class Default "This is the default net class." + (clearance 0.2) + (trace_width 0.25) + (via_dia 0.6) + (via_drill 0.4) + (uvia_dia 0.5) + (uvia_drill 0.3) + (add_net +5V) + (add_net /AVCC) + (add_net /AVCC_ON_2) + (add_net /CH1) + (add_net /CH2) + (add_net /D+) + (add_net /D-) + (add_net /DAC_OUT) + (add_net /DIG_CH1) + (add_net /DIG_CH2) + (add_net /PSU_PWM) + (add_net /VCC_PSU) + (add_net /VGND) + (add_net /XCK) + (add_net GND) + (add_net "Net-(C1-Pad1)") + (add_net "Net-(C1-Pad2)") + (add_net "Net-(C11-Pad1)") + (add_net "Net-(C2-Pad1)") + (add_net "Net-(C2-Pad2)") + (add_net "Net-(C7-Pad1)") + (add_net "Net-(C7-Pad2)") + (add_net "Net-(D1-Pad2)") + (add_net "Net-(IC1-Pad1)") + (add_net "Net-(IC1-Pad10)") + (add_net "Net-(IC1-Pad13)") + (add_net "Net-(IC1-Pad16)") + (add_net "Net-(IC1-Pad20)") + (add_net "Net-(IC1-Pad21)") + (add_net "Net-(IC1-Pad22)") + (add_net "Net-(IC1-Pad23)") + (add_net "Net-(IC1-Pad25)") + (add_net "Net-(IC1-Pad28)") + (add_net "Net-(IC1-Pad29)") + (add_net "Net-(IC1-Pad3)") + (add_net "Net-(IC1-Pad30)") + (add_net "Net-(IC1-Pad31)") + (add_net "Net-(IC1-Pad32)") + (add_net "Net-(IC1-Pad33)") + (add_net "Net-(IC1-Pad34)") + (add_net "Net-(IC1-Pad35)") + (add_net "Net-(IC1-Pad36)") + (add_net "Net-(IC1-Pad37)") + (add_net "Net-(IC1-Pad4)") + (add_net "Net-(IC1-Pad41)") + (add_net "Net-(IC1-Pad43)") + (add_net "Net-(IC1-Pad5)") + (add_net "Net-(IC1-Pad7)") + (add_net "Net-(IC1-Pad8)") + (add_net "Net-(IC1-Pad9)") + (add_net "Net-(P2-Pad4)") + (add_net "Net-(P3-Pad1)") + (add_net "Net-(P3-Pad2)") + (add_net "Net-(P3-Pad3)") + (add_net "Net-(P3-Pad4)") + (add_net "Net-(P8-Pad1)") + (add_net "Net-(P8-Pad2)") + (add_net "Net-(R1-Pad1)") + (add_net "Net-(R10-Pad1)") + (add_net "Net-(R11-Pad2)") + (add_net "Net-(R12-Pad2)") + (add_net "Net-(R13-Pad2)") + (add_net "Net-(R15-Pad1)") + (add_net "Net-(R15-Pad2)") + (add_net "Net-(R17-Pad2)") + (add_net "Net-(R18-Pad2)") + (add_net "Net-(R2-Pad1)") + (add_net "Net-(U2-Pad12)") + (add_net "Net-(U2-Pad13)") + (add_net "Net-(U2-Pad14)") + ) + + (module Capacitors_SMD:C_0603 (layer F.Cu) (tedit 5608B04E) (tstamp 5605FD1E) + (at 39.3192 151.93264 90) + (descr "Capacitor SMD 0603, reflow soldering, AVX (see smccp.pdf)") + (tags "capacitor 0603") + (path /55CAB611) + (attr smd) + (fp_text reference C1 (at -0.69088 1.38176 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value C (at 0 1.9 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.45 -0.75) (end 1.45 -0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 -0.75) (end -1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.45 -0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.35 -0.6) (end 0.35 -0.6) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.35 0.6) (end -0.35 0.6) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 90) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 1 "Net-(C1-Pad1)")) + (pad 2 smd rect (at 0.75 0 90) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 2 "Net-(C1-Pad2)")) + (model Capacitors_SMD.3dshapes/C_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_SMD:C_0603 (layer F.Cu) (tedit 5608B036) (tstamp 5605FD24) + (at 39.27856 147.83816 270) + (descr "Capacitor SMD 0603, reflow soldering, AVX (see smccp.pdf)") + (tags "capacitor 0603") + (path /55CAB4DE) + (attr smd) + (fp_text reference C2 (at -0.43688 -1.42748 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value C (at 0 1.9 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.45 -0.75) (end 1.45 -0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 -0.75) (end -1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.45 -0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.35 -0.6) (end 0.35 -0.6) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.35 0.6) (end -0.35 0.6) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 270) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 3 "Net-(C2-Pad1)")) + (pad 2 smd rect (at 0.75 0 270) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 4 "Net-(C2-Pad2)")) + (model Capacitors_SMD.3dshapes/C_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_SMD:C_0603 (layer F.Cu) (tedit 5608B056) (tstamp 5605FD2A) + (at 43.68292 136.27608 270) + (descr "Capacitor SMD 0603, reflow soldering, AVX (see smccp.pdf)") + (tags "capacitor 0603") + (path /55CB13E1) + (attr smd) + (fp_text reference C3 (at -0.0508 -1.69672 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value C_Small (at 0 1.9 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.45 -0.75) (end 1.45 -0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 -0.75) (end -1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.45 -0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.35 -0.6) (end 0.35 -0.6) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.35 0.6) (end -0.35 0.6) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 270) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 5 +5V)) + (pad 2 smd rect (at 0.75 0 270) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 6 GND)) + (model Capacitors_SMD.3dshapes/C_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_SMD:C_0603 (layer F.Cu) (tedit 5608B0B7) (tstamp 5605FD30) + (at 43.61434 129.81686) + (descr "Capacitor SMD 0603, reflow soldering, AVX (see smccp.pdf)") + (tags "capacitor 0603") + (path /55CB147C) + (attr smd) + (fp_text reference C4 (at 0.0127 -1.37922) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value C_Small (at 0 1.9) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.45 -0.75) (end 1.45 -0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 -0.75) (end -1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.45 -0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.35 -0.6) (end 0.35 -0.6) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.35 0.6) (end -0.35 0.6) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 7 /AVCC)) + (pad 2 smd rect (at 0.75 0) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 6 GND)) + (model Capacitors_SMD.3dshapes/C_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_SMD:C_0603 (layer F.Cu) (tedit 5608B03A) (tstamp 5605FD36) + (at 44.22648 150.05558 90) + (descr "Capacitor SMD 0603, reflow soldering, AVX (see smccp.pdf)") + (tags "capacitor 0603") + (path /55D60181) + (attr smd) + (fp_text reference C5 (at 0.03302 1.38684 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value C_Small (at 0 1.9 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.45 -0.75) (end 1.45 -0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 -0.75) (end -1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.45 -0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.35 -0.6) (end 0.35 -0.6) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.35 0.6) (end -0.35 0.6) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 90) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 7 /AVCC)) + (pad 2 smd rect (at 0.75 0 90) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 6 GND)) + (model Capacitors_SMD.3dshapes/C_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_Elko_ThroughHole:Elko_vert_11.2x6.3mm_RM2.5_CopperClear (layer F.Cu) (tedit 5608B085) (tstamp 5605FD3C) + (at 70.85584 125.59792 270) + (descr "Electrolytic Capacitor, vertical, diameter 6,3mm, RM 2,5mm, CopperClear, radial,") + (tags "Electrolytic Capacitor, vertical, diameter 6,3mm, RM 2,5mm, Elko, Electrolytkondensator, Kondensator gepolt, Durchmesser 6,3mm, CopperClear, radial,") + (path /560719D9) + (fp_text reference C6 (at -1.36144 -2.14376 360) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value CP1 (at 1.27 5.08 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 0.26924 -1.69926) (end 0.76962 -1.69926) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.26924 -1.69926) (end 0.26924 -2.19964) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.23114 -1.69926) (end 0.26924 -1.69926) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.26924 -1.69926) (end 0.26924 -1.30048) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.26924 -1.30048) (end 0.26924 -1.19888) (layer F.SilkS) (width 0.15)) + (fp_circle (center 1.27 0) (end 4.4196 0) (layer F.SilkS) (width 0.15)) + (pad 2 thru_hole circle (at 2.54 0 270) (size 1.50114 1.50114) (drill 0.8001) (layers *.Cu *.Mask F.SilkS) + (net 11 /VGND)) + (pad 1 thru_hole circle (at 0 0 270) (size 1.50114 1.50114) (drill 0.8001) (layers *.Cu *.Mask F.SilkS) + (net 8 /VCC_PSU)) + (model Capacitors_Elko_ThroughHole.3dshapes/Elko_vert_11.2x6.3mm_RM2.5_CopperClear.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_SMD:C_0603 (layer F.Cu) (tedit 5608B01E) (tstamp 5605FD42) + (at 59.54522 150.9649) + (descr "Capacitor SMD 0603, reflow soldering, AVX (see smccp.pdf)") + (tags "capacitor 0603") + (path /55CB630B) + (attr smd) + (fp_text reference C7 (at 2.31394 0.12446) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value C (at 0 1.9) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.45 -0.75) (end 1.45 -0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 -0.75) (end -1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.45 -0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.35 -0.6) (end 0.35 -0.6) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.35 0.6) (end -0.35 0.6) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 9 "Net-(C7-Pad1)")) + (pad 2 smd rect (at 0.75 0) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 10 "Net-(C7-Pad2)")) + (model Capacitors_SMD.3dshapes/C_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_SMD:C_0603 (layer F.Cu) (tedit 5608B08E) (tstamp 5605FD48) + (at 75.07224 126.9746 270) + (descr "Capacitor SMD 0603, reflow soldering, AVX (see smccp.pdf)") + (tags "capacitor 0603") + (path /56071A50) + (attr smd) + (fp_text reference C8 (at 2.72288 0.19304 360) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value C (at 0 1.9 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.45 -0.75) (end 1.45 -0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 -0.75) (end -1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.45 -0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.35 -0.6) (end 0.35 -0.6) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.35 0.6) (end -0.35 0.6) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 270) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 8 /VCC_PSU)) + (pad 2 smd rect (at 0.75 0 270) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 11 /VGND)) + (model Capacitors_SMD.3dshapes/C_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_SMD:C_0603 (layer F.Cu) (tedit 5608B010) (tstamp 5605FD4E) + (at 56.59628 148.71192 270) + (descr "Capacitor SMD 0603, reflow soldering, AVX (see smccp.pdf)") + (tags "capacitor 0603") + (path /55D75F49) + (attr smd) + (fp_text reference C9 (at -0.13208 1.1938 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value C_Small (at 0 1.9 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.45 -0.75) (end 1.45 -0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 -0.75) (end -1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.45 -0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.35 -0.6) (end 0.35 -0.6) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.35 0.6) (end -0.35 0.6) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 270) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 5 +5V)) + (pad 2 smd rect (at 0.75 0 270) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 11 /VGND)) + (model Capacitors_SMD.3dshapes/C_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_Elko_ThroughHole:Elko_vert_11.2x6.3mm_RM2.5_CopperClear (layer F.Cu) (tedit 5608AFE5) (tstamp 5605FD5A) + (at 69.23024 138.63574 270) + (descr "Electrolytic Capacitor, vertical, diameter 6,3mm, RM 2,5mm, CopperClear, radial,") + (tags "Electrolytic Capacitor, vertical, diameter 6,3mm, RM 2,5mm, Elko, Electrolytkondensator, Kondensator gepolt, Durchmesser 6,3mm, CopperClear, radial,") + (path /560735FE) + (fp_text reference C11 (at -0.91186 -2.21488 360) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value CP1 (at 1.27 5.08 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 0.26924 -1.69926) (end 0.76962 -1.69926) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.26924 -1.69926) (end 0.26924 -2.19964) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.23114 -1.69926) (end 0.26924 -1.69926) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.26924 -1.69926) (end 0.26924 -1.30048) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.26924 -1.30048) (end 0.26924 -1.19888) (layer F.SilkS) (width 0.15)) + (fp_circle (center 1.27 0) (end 4.4196 0) (layer F.SilkS) (width 0.15)) + (pad 2 thru_hole circle (at 2.54 0 270) (size 1.50114 1.50114) (drill 0.8001) (layers *.Cu *.Mask F.SilkS) + (net 11 /VGND)) + (pad 1 thru_hole circle (at 0 0 270) (size 1.50114 1.50114) (drill 0.8001) (layers *.Cu *.Mask F.SilkS) + (net 12 "Net-(C11-Pad1)")) + (model Capacitors_Elko_ThroughHole.3dshapes/Elko_vert_11.2x6.3mm_RM2.5_CopperClear.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_SMD:C_0603 (layer F.Cu) (tedit 5608AFE7) (tstamp 5605FD60) + (at 73.94194 139.89304 270) + (descr "Capacitor SMD 0603, reflow soldering, AVX (see smccp.pdf)") + (tags "capacitor 0603") + (path /5607355F) + (attr smd) + (fp_text reference C12 (at -0.02032 -1.46558 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value C (at 0 1.9 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.45 -0.75) (end 1.45 -0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 -0.75) (end -1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.45 -0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.35 -0.6) (end 0.35 -0.6) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.35 0.6) (end -0.35 0.6) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 270) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 12 "Net-(C11-Pad1)")) + (pad 2 smd rect (at 0.75 0 270) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 11 /VGND)) + (model Capacitors_SMD.3dshapes/C_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Diodes_ThroughHole:Diode_DO-41_SOD81_Horizontal_RM10 (layer F.Cu) (tedit 5608B09B) (tstamp 5605FD66) + (at 73.98004 134.7978 180) + (descr "Diode, DO-41, SOD81, Horizontal, RM 10mm,") + (tags "Diode, DO-41, SOD81, Horizontal, RM 10mm, 1N4007, SB140,") + (path /5606FDB4) + (fp_text reference D1 (at 4.3942 2.91084 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value D_Schottky (at 4.37134 -3.55854 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 7.62 -0.00254) (end 8.636 -0.00254) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.794 -0.00254) (end 1.524 -0.00254) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.048 -1.27254) (end 3.048 1.26746) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.302 -1.27254) (end 3.302 1.26746) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.556 -1.27254) (end 3.556 1.26746) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.794 -1.27254) (end 2.794 1.26746) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.81 -1.27254) (end 2.54 1.26746) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.54 -1.27254) (end 3.81 1.26746) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.81 -1.27254) (end 3.81 1.26746) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.175 -1.27254) (end 3.175 1.26746) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.54 1.26746) (end 2.54 -1.27254) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.54 -1.27254) (end 7.62 -1.27254) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.62 -1.27254) (end 7.62 1.26746) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.62 1.26746) (end 2.54 1.26746) (layer F.SilkS) (width 0.15)) + (pad 2 thru_hole circle (at 10.16 -0.00254) (size 1.99898 1.99898) (drill 1.27) (layers *.Cu *.Mask F.SilkS) + (net 13 "Net-(D1-Pad2)")) + (pad 1 thru_hole rect (at 0 -0.00254) (size 1.99898 1.99898) (drill 1.00076) (layers *.Cu *.Mask F.SilkS) + (net 12 "Net-(C11-Pad1)")) + ) + + (module SMD:SMD_1206 (layer F.Cu) (tedit 5608B053) (tstamp 5605FD6C) + (at 43.66514 140.70584) + (tags Handsolderable) + (path /55D739F3) + (fp_text reference F1 (at 2.00914 -0.07112 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value F_Small (at 2.6 0 90) (layer F.SilkS) hide + (effects (font (thickness 0.3048))) + ) + (fp_line (start -0.8 -1.6) (end 0.8 -1.6) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.8 -1.6) (end 0.8 1.6) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.8 1.6) (end -0.8 1.6) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.8 1.6) (end -0.8 -1.6) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at 0 -1.6) (size 2 2) (layers F.Cu F.Paste F.Mask) + (net 6 GND)) + (pad 2 smd rect (at 0 1.6) (size 2 2) (layers F.Cu F.Paste F.Mask) + (net 11 /VGND)) + (model 3D/SMD/SMD-1206.wrl + (at (xyz 0 0 0)) + (scale (xyz 0.3937 0.3937 0.3937)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Housings_QFP:LQFP-44_10x10mm_Pitch0.8mm (layer F.Cu) (tedit 5608B0A9) (tstamp 5605FD9C) + (at 54.1274 136.6266 180) + (descr "LQFP44 (see Appnote_PCB_Guidelines_TRINAMIC_packages.pdf)") + (tags "QFP 0.8") + (path /55CA8F25) + (attr smd) + (fp_text reference IC1 (at 0.21336 -0.19304 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value ATXMEGA16A4U-A (at 0 7.65 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -6.9 -6.9) (end -6.9 6.9) (layer F.CrtYd) (width 0.05)) + (fp_line (start 6.9 -6.9) (end 6.9 6.9) (layer F.CrtYd) (width 0.05)) + (fp_line (start -6.9 -6.9) (end 6.9 -6.9) (layer F.CrtYd) (width 0.05)) + (fp_line (start -6.9 6.9) (end 6.9 6.9) (layer F.CrtYd) (width 0.05)) + (fp_line (start -5.175 -5.175) (end -5.175 -4.505) (layer F.SilkS) (width 0.15)) + (fp_line (start 5.175 -5.175) (end 5.175 -4.505) (layer F.SilkS) (width 0.15)) + (fp_line (start 5.175 5.175) (end 5.175 4.505) (layer F.SilkS) (width 0.15)) + (fp_line (start -5.175 5.175) (end -5.175 4.505) (layer F.SilkS) (width 0.15)) + (fp_line (start -5.175 -5.175) (end -4.505 -5.175) (layer F.SilkS) (width 0.15)) + (fp_line (start -5.175 5.175) (end -4.505 5.175) (layer F.SilkS) (width 0.15)) + (fp_line (start 5.175 5.175) (end 4.505 5.175) (layer F.SilkS) (width 0.15)) + (fp_line (start 5.175 -5.175) (end 4.505 -5.175) (layer F.SilkS) (width 0.15)) + (fp_line (start -5.175 -4.505) (end -6.65 -4.505) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -5.85 -4 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 14 "Net-(IC1-Pad1)")) + (pad 2 smd rect (at -5.85 -3.2 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 15 /CH2)) + (pad 3 smd rect (at -5.85 -2.4 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 16 "Net-(IC1-Pad3)")) + (pad 4 smd rect (at -5.85 -1.6 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 17 "Net-(IC1-Pad4)")) + (pad 5 smd rect (at -5.85 -0.8 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 18 "Net-(IC1-Pad5)")) + (pad 6 smd rect (at -5.85 0 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 19 /DAC_OUT)) + (pad 7 smd rect (at -5.85 0.8 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 20 "Net-(IC1-Pad7)")) + (pad 8 smd rect (at -5.85 1.6 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 67 "Net-(IC1-Pad8)")) + (pad 9 smd rect (at -5.85 2.4 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 68 "Net-(IC1-Pad9)")) + (pad 10 smd rect (at -5.85 3.2 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 21 "Net-(IC1-Pad10)")) + (pad 11 smd rect (at -5.85 4 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 22 /XCK)) + (pad 12 smd rect (at -4 5.85 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 23 /DIG_CH2)) + (pad 13 smd rect (at -3.2 5.85 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 24 "Net-(IC1-Pad13)")) + (pad 14 smd rect (at -2.4 5.85 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 6 GND)) + (pad 15 smd rect (at -1.6 5.85 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 22 /XCK)) + (pad 16 smd rect (at -0.8 5.85 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 25 "Net-(IC1-Pad16)")) + (pad 17 smd rect (at 0 5.85 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 26 /DIG_CH1)) + (pad 18 smd rect (at 0.8 5.85 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 6 GND)) + (pad 19 smd rect (at 1.6 5.85 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 7 /AVCC)) + (pad 20 smd rect (at 2.4 5.85 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 27 "Net-(IC1-Pad20)")) + (pad 21 smd rect (at 3.2 5.85 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 28 "Net-(IC1-Pad21)")) + (pad 22 smd rect (at 4 5.85 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 29 "Net-(IC1-Pad22)")) + (pad 23 smd rect (at 5.85 4 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 30 "Net-(IC1-Pad23)")) + (pad 24 smd rect (at 5.85 3.2 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 31 /PSU_PWM)) + (pad 25 smd rect (at 5.85 2.4 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 32 "Net-(IC1-Pad25)")) + (pad 26 smd rect (at 5.85 1.6 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 33 /D-)) + (pad 27 smd rect (at 5.85 0.8 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 34 /D+)) + (pad 28 smd rect (at 5.85 0 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 35 "Net-(IC1-Pad28)")) + (pad 29 smd rect (at 5.85 -0.8 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 36 "Net-(IC1-Pad29)")) + (pad 30 smd rect (at 5.85 -1.6 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 69 "Net-(IC1-Pad30)")) + (pad 31 smd rect (at 5.85 -2.4 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 70 "Net-(IC1-Pad31)")) + (pad 32 smd rect (at 5.85 -3.2 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 37 "Net-(IC1-Pad32)")) + (pad 33 smd rect (at 5.85 -4 180) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 38 "Net-(IC1-Pad33)")) + (pad 34 smd rect (at 4 -5.85 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 39 "Net-(IC1-Pad34)")) + (pad 35 smd rect (at 3.2 -5.85 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 40 "Net-(IC1-Pad35)")) + (pad 36 smd rect (at 2.4 -5.85 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 41 "Net-(IC1-Pad36)")) + (pad 37 smd rect (at 1.6 -5.85 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 42 "Net-(IC1-Pad37)")) + (pad 38 smd rect (at 0.8 -5.85 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 6 GND)) + (pad 39 smd rect (at 0 -5.85 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 7 /AVCC)) + (pad 40 smd rect (at -0.8 -5.85 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 15 /CH2)) + (pad 41 smd rect (at -1.6 -5.85 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 43 "Net-(IC1-Pad41)")) + (pad 42 smd rect (at -2.4 -5.85 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 44 /CH1)) + (pad 43 smd rect (at -3.2 -5.85 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 45 "Net-(IC1-Pad43)")) + (pad 44 smd rect (at -4 -5.85 270) (size 1.6 0.56) (layers F.Cu F.Paste F.Mask) + (net 46 /AVCC_ON_2)) + (model Housings_QFP.3dshapes/LQFP-44_10x10mm_Pitch0.8mm.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Diodes_ThroughHole:Diode_DO-41_SOD81_Horizontal_RM10 (layer F.Cu) (tedit 5608B09D) (tstamp 5605FDA2) + (at 63.9572 131.9022) + (descr "Diode, DO-41, SOD81, Horizontal, RM 10mm,") + (tags "Diode, DO-41, SOD81, Horizontal, RM 10mm, 1N4007, SB140,") + (path /5606EE9E) + (fp_text reference L1 (at 4.57708 3.00228) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value INDUCTOR (at 4.37134 -3.55854) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 7.62 -0.00254) (end 8.636 -0.00254) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.794 -0.00254) (end 1.524 -0.00254) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.048 -1.27254) (end 3.048 1.26746) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.302 -1.27254) (end 3.302 1.26746) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.556 -1.27254) (end 3.556 1.26746) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.794 -1.27254) (end 2.794 1.26746) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.81 -1.27254) (end 2.54 1.26746) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.54 -1.27254) (end 3.81 1.26746) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.81 -1.27254) (end 3.81 1.26746) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.175 -1.27254) (end 3.175 1.26746) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.54 1.26746) (end 2.54 -1.27254) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.54 -1.27254) (end 7.62 -1.27254) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.62 -1.27254) (end 7.62 1.26746) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.62 1.26746) (end 2.54 1.26746) (layer F.SilkS) (width 0.15)) + (pad 2 thru_hole circle (at 10.16 -0.00254 180) (size 1.99898 1.99898) (drill 1.27) (layers *.Cu *.Mask F.SilkS) + (net 8 /VCC_PSU)) + (pad 1 thru_hole rect (at 0 -0.00254 180) (size 1.99898 1.99898) (drill 1.00076) (layers *.Cu *.Mask F.SilkS) + (net 13 "Net-(D1-Pad2)")) + ) + + (module Pin_Headers:Pin_Header_Straight_1x04 (layer F.Cu) (tedit 5608B05D) (tstamp 5605FDAA) + (at 36.2585 146.1008) + (descr "Through hole pin header") + (tags "pin header") + (path /55CAB35C) + (fp_text reference P1 (at 0.09398 -2.26568) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value SCOPE_IN (at 0 -3.1) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.75 -1.75) (end -1.75 9.4) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.75 -1.75) (end 1.75 9.4) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 -1.75) (end 1.75 -1.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 9.4) (end 1.75 9.4) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.27 1.27) (end -1.27 8.89) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.27 1.27) (end 1.27 8.89) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.55 -1.55) (end 1.55 0) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.27 8.89) (end 1.27 8.89) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.27 1.27) (end -1.27 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.55 0) (end -1.55 -1.55) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.55 -1.55) (end 1.55 -1.55) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole rect (at 0 0) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 3 "Net-(C2-Pad1)")) + (pad 2 thru_hole oval (at 0 2.54) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 4 "Net-(C2-Pad2)")) + (pad 3 thru_hole oval (at 0 5.08) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 2 "Net-(C1-Pad2)")) + (pad 4 thru_hole oval (at 0 7.62) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 1 "Net-(C1-Pad1)")) + (model Pin_Headers.3dshapes/Pin_Header_Straight_1x04.wrl + (at (xyz 0 -0.15 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 90)) + ) + ) + + (module Connect:USB_Micro-B (layer F.Cu) (tedit 5543E447) (tstamp 5605FDB7) + (at 38.56482 135.90016 270) + (descr "Micro USB Type B Receptacle") + (tags "USB USB_B USB_micro USB_OTG") + (path /55CA90D2) + (attr smd) + (fp_text reference P2 (at 0 -3.45 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value USB_OTG (at 0 4.8 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -4.6 -2.8) (end 4.6 -2.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 4.6 -2.8) (end 4.6 4.05) (layer F.CrtYd) (width 0.05)) + (fp_line (start 4.6 4.05) (end -4.6 4.05) (layer F.CrtYd) (width 0.05)) + (fp_line (start -4.6 4.05) (end -4.6 -2.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -4.3509 3.81746) (end 4.3491 3.81746) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.3509 -2.58754) (end 4.3491 -2.58754) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.3491 -2.58754) (end 4.3491 3.81746) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.3491 2.58746) (end -4.3509 2.58746) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.3509 3.81746) (end -4.3509 -2.58754) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -1.3009 -1.56254) (size 1.35 0.4) (layers F.Cu F.Paste F.Mask) + (net 5 +5V)) + (pad 2 smd rect (at -0.6509 -1.56254) (size 1.35 0.4) (layers F.Cu F.Paste F.Mask) + (net 33 /D-)) + (pad 3 smd rect (at -0.0009 -1.56254) (size 1.35 0.4) (layers F.Cu F.Paste F.Mask) + (net 34 /D+)) + (pad 4 smd rect (at 0.6491 -1.56254) (size 1.35 0.4) (layers F.Cu F.Paste F.Mask) + (net 47 "Net-(P2-Pad4)")) + (pad 5 smd rect (at 1.2991 -1.56254) (size 1.35 0.4) (layers F.Cu F.Paste F.Mask) + (net 6 GND)) + (pad 6 thru_hole oval (at -2.5009 -1.56254) (size 0.95 1.25) (drill oval 0.55 0.85) (layers *.Cu *.Mask F.SilkS) + (net 6 GND)) + (pad 6 thru_hole oval (at 2.4991 -1.56254) (size 0.95 1.25) (drill oval 0.55 0.85) (layers *.Cu *.Mask F.SilkS) + (net 6 GND)) + (pad 6 thru_hole oval (at -3.5009 1.13746) (size 1.55 1) (drill oval 1.15 0.5) (layers *.Cu *.Mask F.SilkS) + (net 6 GND)) + (pad 6 thru_hole oval (at 3.4991 1.13746) (size 1.55 1) (drill oval 1.15 0.5) (layers *.Cu *.Mask F.SilkS) + (net 6 GND)) + ) + + (module Pin_Headers:Pin_Header_Straight_1x04 (layer F.Cu) (tedit 0) (tstamp 5605FDBF) + (at 64.86144 154.31008 90) + (descr "Through hole pin header") + (tags "pin header") + (path /55CBF4D5) + (fp_text reference P3 (at 0 -5.1 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value DIG_OUT (at 0 -3.1 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.75 -1.75) (end -1.75 9.4) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.75 -1.75) (end 1.75 9.4) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 -1.75) (end 1.75 -1.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 9.4) (end 1.75 9.4) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.27 1.27) (end -1.27 8.89) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.27 1.27) (end 1.27 8.89) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.55 -1.55) (end 1.55 0) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.27 8.89) (end 1.27 8.89) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.27 1.27) (end -1.27 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.55 0) (end -1.55 -1.55) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.55 -1.55) (end 1.55 -1.55) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole rect (at 0 0 90) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 48 "Net-(P3-Pad1)")) + (pad 2 thru_hole oval (at 0 2.54 90) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 49 "Net-(P3-Pad2)")) + (pad 3 thru_hole oval (at 0 5.08 90) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 50 "Net-(P3-Pad3)")) + (pad 4 thru_hole oval (at 0 7.62 90) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 51 "Net-(P3-Pad4)")) + (model Pin_Headers.3dshapes/Pin_Header_Straight_1x04.wrl + (at (xyz 0 -0.15 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 90)) + ) + ) + + (module Pin_Headers:Pin_Header_Straight_2x02 (layer F.Cu) (tedit 5608B070) (tstamp 5605FDC7) + (at 57.71896 123.71832 270) + (descr "Through hole pin header") + (tags "pin header") + (path /56069A87) + (fp_text reference P4 (at 1.65608 -2.6924 360) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value CONN_02X02 (at 0 -3.1 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.75 -1.75) (end -1.75 4.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start 4.3 -1.75) (end 4.3 4.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 -1.75) (end 4.3 -1.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 4.3) (end 4.3 4.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.55 0) (end -1.55 -1.55) (layer F.SilkS) (width 0.15)) + (fp_line (start 0 -1.55) (end -1.55 -1.55) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.27 1.27) (end 1.27 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.27 1.27) (end 1.27 -1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.27 -1.27) (end 3.81 -1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.81 -1.27) (end 3.81 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start 3.81 3.81) (end -1.27 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.27 3.81) (end -1.27 1.27) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole rect (at 0 0 270) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 7 /AVCC)) + (pad 2 thru_hole oval (at 2.54 0 270) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 39 "Net-(IC1-Pad34)")) + (pad 3 thru_hole oval (at 0 2.54 270) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 6 GND)) + (pad 4 thru_hole oval (at 2.54 2.54 270) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 40 "Net-(IC1-Pad35)")) + (model Pin_Headers.3dshapes/Pin_Header_Straight_2x02.wrl + (at (xyz 0.05 -0.05 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 90)) + ) + ) + + (module Pin_Headers:Pin_Header_Straight_1x03 (layer F.Cu) (tedit 5608B06B) (tstamp 5605FDCE) + (at 49.34204 125.08992 270) + (descr "Through hole pin header") + (tags "pin header") + (path /56065DA8) + (fp_text reference P5 (at -0.08128 7.52348 360) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value CONN_01X03 (at 0 -3.1 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.75 -1.75) (end -1.75 6.85) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.75 -1.75) (end 1.75 6.85) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 -1.75) (end 1.75 -1.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 6.85) (end 1.75 6.85) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.27 1.27) (end -1.27 6.35) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.27 6.35) (end 1.27 6.35) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.27 6.35) (end 1.27 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.55 -1.55) (end 1.55 0) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.27 1.27) (end -1.27 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.55 0) (end -1.55 -1.55) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.55 -1.55) (end 1.55 -1.55) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole rect (at 0 0 270) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 5 +5V)) + (pad 2 thru_hole oval (at 0 2.54 270) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 8 /VCC_PSU)) + (pad 3 thru_hole oval (at 0 5.08 270) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 7 /AVCC)) + (model Pin_Headers.3dshapes/Pin_Header_Straight_1x03.wrl + (at (xyz 0 -0.1 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 90)) + ) + ) + + (module Pin_Headers:Pin_Header_Straight_1x02 (layer F.Cu) (tedit 54EA090C) (tstamp 5605FDD4) + (at 61.3283 154.0129 270) + (descr "Through hole pin header") + (tags "pin header") + (path /55CB63F0) + (fp_text reference P6 (at 0 -5.1 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value AWG_OUT (at 0 -3.1 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.27 1.27) (end 1.27 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.55 -1.55) (end 1.55 0) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.75 -1.75) (end -1.75 4.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.75 -1.75) (end 1.75 4.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 -1.75) (end 1.75 -1.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 4.3) (end 1.75 4.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.27 1.27) (end -1.27 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.55 0) (end -1.55 -1.55) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.55 -1.55) (end 1.55 -1.55) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.27 1.27) (end -1.27 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.27 3.81) (end 1.27 3.81) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole rect (at 0 0 270) (size 2.032 2.032) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 10 "Net-(C7-Pad2)")) + (pad 2 thru_hole oval (at 0 2.54 270) (size 2.032 2.032) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 9 "Net-(C7-Pad1)")) + (model Pin_Headers.3dshapes/Pin_Header_Straight_1x02.wrl + (at (xyz 0 -0.05 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 90)) + ) + ) + + (module Pin_Headers:Pin_Header_Straight_1x02 (layer F.Cu) (tedit 5608B093) (tstamp 5605FDDA) + (at 73.74128 144.50568 270) + (descr "Through hole pin header") + (tags "pin header") + (path /55CC540F) + (fp_text reference P7 (at 0.16764 5.06476 360) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value HVO (at 0 -3.1 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.27 1.27) (end 1.27 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.55 -1.55) (end 1.55 0) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.75 -1.75) (end -1.75 4.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.75 -1.75) (end 1.75 4.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 -1.75) (end 1.75 -1.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 4.3) (end 1.75 4.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.27 1.27) (end -1.27 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.55 0) (end -1.55 -1.55) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.55 -1.55) (end 1.55 -1.55) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.27 1.27) (end -1.27 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.27 3.81) (end 1.27 3.81) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole rect (at 0 0 270) (size 2.032 2.032) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 12 "Net-(C11-Pad1)")) + (pad 2 thru_hole oval (at 0 2.54 270) (size 2.032 2.032) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 11 /VGND)) + (model Pin_Headers.3dshapes/Pin_Header_Straight_1x02.wrl + (at (xyz 0 -0.05 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 90)) + ) + ) + + (module Pin_Headers:Pin_Header_Straight_1x02 (layer F.Cu) (tedit 5608B081) (tstamp 5605FDE0) + (at 65.71488 122.57024 270) + (descr "Through hole pin header") + (tags "pin header") + (path /55D6DB77) + (fp_text reference P8 (at -0.92456 -2.54508 360) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value DIG_IN (at 0 -3.1 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.27 1.27) (end 1.27 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.55 -1.55) (end 1.55 0) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.75 -1.75) (end -1.75 4.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.75 -1.75) (end 1.75 4.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 -1.75) (end 1.75 -1.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.75 4.3) (end 1.75 4.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.27 1.27) (end -1.27 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.55 0) (end -1.55 -1.55) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.55 -1.55) (end 1.55 -1.55) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.27 1.27) (end -1.27 3.81) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.27 3.81) (end 1.27 3.81) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole rect (at 0 0 270) (size 2.032 2.032) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 52 "Net-(P8-Pad1)")) + (pad 2 thru_hole oval (at 0 2.54 270) (size 2.032 2.032) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 53 "Net-(P8-Pad2)")) + (model Pin_Headers.3dshapes/Pin_Header_Straight_1x02.wrl + (at (xyz 0 -0.05 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 90)) + ) + ) + + (module SMD:SOT-23-3 (layer F.Cu) (tedit 5608B07C) (tstamp 5605FDE7) + (at 67.03568 126.30912 90) + (path /5606F6D4) + (fp_text reference Q1 (at -2.33172 -0.19304 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value Q_NMOS_GSD (at -2.2 0 180) (layer F.Fab) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 1 -0.4) (end 1.1 -0.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -0.8) (end -1.5 0.8) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 0.8) (end 1.5 0.8) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 0.8) (end 1.5 -0.8) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 -0.8) (end -1.5 -0.8) (layer F.SilkS) (width 0.15)) + (pad 3 smd rect (at 0 1.4 90) (size 0.6 0.9) (layers F.Cu F.Paste F.Mask) + (net 13 "Net-(D1-Pad2)")) + (pad 2 smd rect (at -0.95 -1.4 90) (size 0.6 0.9) (layers F.Cu F.Paste F.Mask) + (net 11 /VGND)) + (pad 1 smd rect (at 0.95 -1.4 90) (size 0.6 0.9) (layers F.Cu F.Paste F.Mask) + (net 31 /PSU_PWM)) + (model 3D/SMD/SOT-23-3.wrl + (at (xyz 0 0 0)) + (scale (xyz 0.3937 0.3937 0.3937)) + (rotate (xyz 0 0 90)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 5608B048) (tstamp 5605FDED) + (at 40.2336 154.28976 180) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /55CAAB95) + (attr smd) + (fp_text reference R1 (at -0.32512 -1.46304 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 180) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 54 "Net-(R1-Pad1)")) + (pad 2 smd rect (at 0.75 0 180) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 1 "Net-(C1-Pad1)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 5608B033) (tstamp 5605FDF3) + (at 40.21836 145.48104 180) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /55CAAD4C) + (attr smd) + (fp_text reference R2 (at 0.10668 1.3716 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 180) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 55 "Net-(R2-Pad1)")) + (pad 2 smd rect (at 0.75 0 180) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 3 "Net-(C2-Pad1)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 5608B047) (tstamp 5605FDF9) + (at 42.48404 153.58872 90) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /55CAABF4) + (attr smd) + (fp_text reference R3 (at 0.0508 1.50876 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 90) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 54 "Net-(R1-Pad1)")) + (pad 2 smd rect (at 0.75 0 90) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 46 /AVCC_ON_2)) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 5608B030) (tstamp 5605FDFF) + (at 42.40022 146.52244 90) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /55CAAD11) + (attr smd) + (fp_text reference R4 (at -0.05588 1.50622 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 90) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 46 /AVCC_ON_2)) + (pad 2 smd rect (at 0.75 0 90) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 55 "Net-(R2-Pad1)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 5608B045) (tstamp 5605FE05) + (at 42.07764 151.10206 180) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /55CAAC5F) + (attr smd) + (fp_text reference R5 (at -2.3622 -0.93218 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 180) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 7 /AVCC)) + (pad 2 smd rect (at 0.75 0 180) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 46 /AVCC_ON_2)) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 5608B042) (tstamp 5605FE0B) + (at 42.02176 149.0091 180) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /55CAACD2) + (attr smd) + (fp_text reference R6 (at -2.2352 0.83566 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 180) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 6 GND)) + (pad 2 smd rect (at 0.75 0 180) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 46 /AVCC_ON_2)) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 5608AFFF) (tstamp 5605FE11) + (at 72.517 150.95982 270) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /55CBCDA5) + (attr smd) + (fp_text reference R7 (at 0.05334 -1.41224 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 270) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 56 "Net-(R11-Pad2)")) + (pad 2 smd rect (at 0.75 0 270) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 51 "Net-(P3-Pad4)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 5608AFFE) (tstamp 5605FE17) + (at 70.08114 150.80996 270) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /55CBE401) + (attr smd) + (fp_text reference R8 (at 0.00508 -1.27254 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 270) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 57 "Net-(R12-Pad2)")) + (pad 2 smd rect (at 0.75 0 270) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 50 "Net-(P3-Pad3)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 5608AFFA) (tstamp 5605FE1D) + (at 67.4878 150.88362 270) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /55CBE16B) + (attr smd) + (fp_text reference R9 (at 0.09906 -1.3208 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 270) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 58 "Net-(R13-Pad2)")) + (pad 2 smd rect (at 0.75 0 270) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 49 "Net-(P3-Pad2)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 5608AFF4) (tstamp 5605FE23) + (at 64.82334 150.76932 270) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /55CBE2C7) + (attr smd) + (fp_text reference R10 (at -0.03556 -1.33858 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 270) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 59 "Net-(R10-Pad1)")) + (pad 2 smd rect (at 0.75 0 270) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 48 "Net-(P3-Pad1)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 5608B001) (tstamp 5605FE29) + (at 72.4789 148.10232 270) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /55CBCD2A) + (attr smd) + (fp_text reference R11 (at -0.10668 -1.37414 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 270) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 35 "Net-(IC1-Pad28)")) + (pad 2 smd rect (at 0.75 0 270) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 56 "Net-(R11-Pad2)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 5608AFFC) (tstamp 5605FE2F) + (at 70.00494 147.83816 270) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /55CBE362) + (attr smd) + (fp_text reference R12 (at -0.05588 -1.2573 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 270) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 36 "Net-(IC1-Pad29)")) + (pad 2 smd rect (at 0.75 0 270) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 57 "Net-(R12-Pad2)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 5608AFF8) (tstamp 5605FE35) + (at 67.4497 147.79752 270) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /55CBE0F4) + (attr smd) + (fp_text reference R13 (at -0.10668 -1.31318 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 270) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 37 "Net-(IC1-Pad32)")) + (pad 2 smd rect (at 0.75 0 270) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 58 "Net-(R13-Pad2)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 5608AFF1) (tstamp 5605FE3B) + (at 64.78524 147.75942 270) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /55CBE21C) + (attr smd) + (fp_text reference R14 (at -0.15494 -1.33604 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 270) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 38 "Net-(IC1-Pad33)")) + (pad 2 smd rect (at 0.75 0 270) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 59 "Net-(R10-Pad1)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 5608B020) (tstamp 5605FE41) + (at 59.4233 146.0119) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /55CB4680) + (attr smd) + (fp_text reference R15 (at 2.74066 0.03302) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 60 "Net-(R15-Pad1)")) + (pad 2 smd rect (at 0.75 0) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 61 "Net-(R15-Pad2)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 5608B01A) (tstamp 5605FE47) + (at 59.4487 148.5773 180) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /55CB9020) + (attr smd) + (fp_text reference R16 (at -2.57302 -0.06858 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 180) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 10 "Net-(C7-Pad2)")) + (pad 2 smd rect (at 0.75 0 180) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 60 "Net-(R15-Pad1)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 5608AFBA) (tstamp 5605FE4D) + (at 63.85814 137.82294 180) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /56074BFF) + (attr smd) + (fp_text reference R17 (at -2.63906 -1.96342 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R_Small (at 0 1.9 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 180) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 12 "Net-(C11-Pad1)")) + (pad 2 smd rect (at 0.75 0 180) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 62 "Net-(R17-Pad2)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 5608AFB7) (tstamp 5605FE53) + (at 63.89624 139.81684) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /56074C88) + (attr smd) + (fp_text reference R18 (at 2.60096 -1.96088) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R_Small (at 0 1.9) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 62 "Net-(R17-Pad2)")) + (pad 2 smd rect (at 0.75 0) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 63 "Net-(R18-Pad2)")) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 5608AFDD) (tstamp 5605FE59) + (at 63.85814 141.98854 180) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /56074D19) + (attr smd) + (fp_text reference R19 (at -2.74066 -0.04826 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R_Small (at 0 1.9 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 180) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 63 "Net-(R18-Pad2)")) + (pad 2 smd rect (at 0.75 0 180) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 11 /VGND)) + (model Resistors_SMD.3dshapes/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module SMD:SOT-23-3 (layer F.Cu) (tedit 5508E933) (tstamp 5605FE60) + (at 43.64228 132.7912) + (path /55CA99FA) + (fp_text reference U1 (at 2.5 0 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 78L05 (at -2.2 0 90) (layer F.Fab) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 1 -0.4) (end 1.1 -0.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -0.8) (end -1.5 0.8) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 0.8) (end 1.5 0.8) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 0.8) (end 1.5 -0.8) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 -0.8) (end -1.5 -0.8) (layer F.SilkS) (width 0.15)) + (pad 3 smd rect (at 0 1.4) (size 0.6 0.9) (layers F.Cu F.Paste F.Mask) + (net 5 +5V)) + (pad 2 smd rect (at -0.95 -1.4) (size 0.6 0.9) (layers F.Cu F.Paste F.Mask) + (net 7 /AVCC)) + (pad 1 smd rect (at 0.95 -1.4) (size 0.6 0.9) (layers F.Cu F.Paste F.Mask) + (net 6 GND)) + (model 3D/SMD/SOT-23-3.wrl + (at (xyz 0 0 0)) + (scale (xyz 0.3937 0.3937 0.3937)) + (rotate (xyz 0 0 90)) + ) + ) + + (module Housings_SOIC:SOIC-14_3.9x8.7mm_Pitch1.27mm (layer F.Cu) (tedit 5608B0A2) (tstamp 5605FE72) + (at 51.1175 149.5806) + (descr "14-Lead Plastic Small Outline (SL) - Narrow, 3.90 mm Body [SOIC] (see Microchip Packaging Specification 00000049BS.pdf)") + (tags "SOIC 1.27") + (path /55CA87E2) + (attr smd) + (fp_text reference U2 (at -0.48006 -0.18796) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value LM324 (at 0 5.375) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -3.7 -4.65) (end -3.7 4.65) (layer F.CrtYd) (width 0.05)) + (fp_line (start 3.7 -4.65) (end 3.7 4.65) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.7 -4.65) (end 3.7 -4.65) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.7 4.65) (end 3.7 4.65) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.075 -4.45) (end -2.075 -4.335) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.075 -4.45) (end 2.075 -4.335) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.075 4.45) (end 2.075 4.335) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.075 4.45) (end -2.075 4.335) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.075 -4.45) (end 2.075 -4.45) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.075 4.45) (end 2.075 4.45) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.075 -4.335) (end -3.45 -4.335) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -2.7 -3.81) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 15 /CH2)) + (pad 2 smd rect (at -2.7 -2.54) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 15 /CH2)) + (pad 3 smd rect (at -2.7 -1.27) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 55 "Net-(R2-Pad1)")) + (pad 4 smd rect (at -2.7 0) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 5 +5V)) + (pad 5 smd rect (at -2.7 1.27) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 54 "Net-(R1-Pad1)")) + (pad 6 smd rect (at -2.7 2.54) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 44 /CH1)) + (pad 7 smd rect (at -2.7 3.81) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 44 /CH1)) + (pad 8 smd rect (at 2.7 3.81) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 61 "Net-(R15-Pad2)")) + (pad 9 smd rect (at 2.7 2.54) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 61 "Net-(R15-Pad2)")) + (pad 10 smd rect (at 2.7 1.27) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 19 /DAC_OUT)) + (pad 11 smd rect (at 2.7 0) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 11 /VGND)) + (pad 12 smd rect (at 2.7 -1.27) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 64 "Net-(U2-Pad12)")) + (pad 13 smd rect (at 2.7 -2.54) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 65 "Net-(U2-Pad13)")) + (pad 14 smd rect (at 2.7 -3.81) (size 1.5 0.6) (layers F.Cu F.Paste F.Mask) + (net 66 "Net-(U2-Pad14)")) + (model Housings_SOIC.3dshapes/SOIC-14_3.9x8.7mm_Pitch1.27mm.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Footprints:SOT363 (layer F.Cu) (tedit 5070B96C) (tstamp 5605FE7C) + (at 61.25972 128.4732) + (descr SOT363) + (path /55D6ACFD) + (attr smd) + (fp_text reference U3 (at 0.09906 1.69926) (layer F.SilkS) hide + (effects (font (size 0.762 0.635) (thickness 0.127))) + ) + (fp_text value DMN63D8LDW (at 0 -1.50114) (layer F.SilkS) + (effects (font (size 0.762 0.635) (thickness 0.127))) + ) + (fp_line (start 0.635 1.016) (end 0.635 -1.016) (layer F.SilkS) (width 0.1524)) + (fp_line (start 0.635 -1.016) (end -0.635 -1.016) (layer F.SilkS) (width 0.1524)) + (fp_line (start -0.635 -1.016) (end -0.635 1.016) (layer F.SilkS) (width 0.1524)) + (fp_line (start -0.635 1.016) (end 0.635 1.016) (layer F.SilkS) (width 0.1524)) + (pad 1 smd rect (at -1.016 -0.635) (size 0.508 0.3048) (layers F.Cu F.Paste F.Mask) + (net 6 GND)) + (pad 3 smd rect (at -1.016 0.635) (size 0.508 0.3048) (layers F.Cu F.Paste F.Mask) + (net 23 /DIG_CH2)) + (pad 5 smd rect (at 1.016 0) (size 0.508 0.3048) (layers F.Cu F.Paste F.Mask) + (net 52 "Net-(P8-Pad1)")) + (pad 2 smd rect (at -1.016 0) (size 0.508 0.3048) (layers F.Cu F.Paste F.Mask) + (net 53 "Net-(P8-Pad2)")) + (pad 4 smd rect (at 1.016 0.635) (size 0.508 0.3048) (layers F.Cu F.Paste F.Mask) + (net 6 GND)) + (pad 6 smd rect (at 1.016 -0.635) (size 0.508 0.3048) (layers F.Cu F.Paste F.Mask) + (net 26 /DIG_CH1)) + (model 3D/SOT-363.wrl + (at (xyz 0 0 0)) + (scale (xyz 0.3937 0.3937 0.3937)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_SMD:C_0603 (layer F.Cu) (tedit 5608B064) (tstamp 56089D59) + (at 52.78628 128.42748) + (descr "Capacitor SMD 0603, reflow soldering, AVX (see smccp.pdf)") + (tags "capacitor 0603") + (path /5608B4BE) + (attr smd) + (fp_text reference C13 (at -3.18516 -0.04572) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value C (at 0 1.9) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.45 -0.75) (end 1.45 -0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 -0.75) (end -1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.45 -0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.35 -0.6) (end 0.35 -0.6) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.35 0.6) (end -0.35 0.6) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 7 /AVCC)) + (pad 2 smd rect (at 0.75 0) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 6 GND)) + (model Capacitors_SMD.3dshapes/C_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_SMD:C_0603 (layer F.Cu) (tedit 5608B0A4) (tstamp 5608A068) + (at 53.6956 144.20088 180) + (descr "Capacitor SMD 0603, reflow soldering, AVX (see smccp.pdf)") + (tags "capacitor 0603") + (path /5609699F) + (attr smd) + (fp_text reference C10 (at -3.19024 -0.12192 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value C (at 0 1.9 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.45 -0.75) (end 1.45 -0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 -0.75) (end -1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.45 -0.75) (end 1.45 0.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.35 -0.6) (end 0.35 -0.6) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.35 0.6) (end -0.35 0.6) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 180) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 7 /AVCC)) + (pad 2 smd rect (at 0.75 0 180) (size 0.8 0.75) (layers F.Cu F.Paste F.Mask) + (net 6 GND)) + (model Capacitors_SMD.3dshapes/C_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (gr_line (start 33.1978 117.61216) (end 33.1978 157.23616) (angle 90) (layer Edge.Cuts) (width 0.1)) + (gr_line (start 76.8858 117.61216) (end 33.1978 117.61216) (angle 90) (layer Edge.Cuts) (width 0.1)) + (gr_line (start 76.8858 157.10916) (end 76.8858 117.61216) (angle 90) (layer Edge.Cuts) (width 0.1)) + (gr_line (start 33.1978 157.10916) (end 76.8858 157.10916) (angle 90) (layer Edge.Cuts) (width 0.1)) + (gr_text "TINYLAB PCB\nPROTO 1" (at 38.67912 119.72544) (layer F.Cu) + (effects (font (size 1 1) (thickness 0.25))) + ) + (gr_line (start 33.63976 117.85092) (end 33.63976 118.52148) (angle 90) (layer Edge.Cuts) (width 0.1)) + + (segment (start 39.4836 154.28976) (end 36.82746 154.28976) (width 0.25) (layer F.Cu) (net 1)) + (segment (start 36.82746 154.28976) (end 36.2585 153.7208) (width 0.25) (layer F.Cu) (net 1) (tstamp 560600EE)) + (segment (start 39.4836 154.28976) (end 39.4836 152.84704) (width 0.25) (layer F.Cu) (net 1)) + (segment (start 39.4836 152.84704) (end 39.3192 152.68264) (width 0.25) (layer F.Cu) (net 1) (tstamp 560600EA)) + (segment (start 39.3192 151.18264) (end 36.26034 151.18264) (width 0.25) (layer F.Cu) (net 2)) + (segment (start 36.26034 151.18264) (end 36.2585 151.1808) (width 0.25) (layer F.Cu) (net 2) (tstamp 560600E7)) + (segment (start 39.46836 145.48104) (end 39.46836 146.89836) (width 0.25) (layer F.Cu) (net 3)) + (segment (start 39.46836 146.89836) (end 39.27856 147.08816) (width 0.25) (layer F.Cu) (net 3) (tstamp 560600E1)) + (segment (start 39.46836 145.48104) (end 36.87826 145.48104) (width 0.25) (layer F.Cu) (net 3)) + (segment (start 36.87826 145.48104) (end 36.2585 146.1008) (width 0.25) (layer F.Cu) (net 3) (tstamp 560600DA)) + (segment (start 39.27856 148.58816) (end 36.31114 148.58816) (width 0.25) (layer F.Cu) (net 4)) + (segment (start 36.31114 148.58816) (end 36.2585 148.6408) (width 0.25) (layer F.Cu) (net 4) (tstamp 560600E4)) + (segment (start 46.5836 144.4244) (end 46.5836 134.32536) (width 1.16) (layer B.Cu) (net 5)) + (segment (start 46.5836 134.32536) (end 46.4312 134.17296) (width 1.16) (layer B.Cu) (net 5) (tstamp 5608989E)) + (segment (start 49.34204 125.08992) (end 49.34204 127.08636) (width 1.16) (layer B.Cu) (net 5)) + (segment (start 49.34204 127.08636) (end 48.06188 128.36652) (width 1.16) (layer B.Cu) (net 5) (tstamp 56089889)) + (segment (start 48.06188 128.36652) (end 46.1264 128.36652) (width 1.16) (layer B.Cu) (net 5) (tstamp 5608988A)) + (segment (start 46.1264 128.36652) (end 45.02912 129.4638) (width 1.16) (layer B.Cu) (net 5) (tstamp 5608988B)) + (segment (start 45.02912 129.4638) (end 45.02912 132.55752) (width 1.16) (layer B.Cu) (net 5) (tstamp 5608988C)) + (segment (start 45.02912 132.55752) (end 46.4312 133.9596) (width 1.16) (layer B.Cu) (net 5) (tstamp 5608988D)) + (segment (start 46.4312 133.9596) (end 46.4312 134.17296) (width 1.16) (layer B.Cu) (net 5) (tstamp 5608988E)) + (segment (start 49.89068 149.56536) (end 51.3842 148.07184) (width 0.58) (layer B.Cu) (net 5)) + (segment (start 51.3842 148.07184) (end 55.51424 148.07184) (width 0.58) (layer B.Cu) (net 5) (tstamp 56089876)) + (segment (start 55.51424 148.07184) (end 55.63616 147.94992) (width 0.58) (layer B.Cu) (net 5) (tstamp 56089877)) + (segment (start 56.59628 147.96192) (end 55.64816 147.96192) (width 0.254) (layer F.Cu) (net 5)) + (segment (start 49.87544 149.5806) (end 48.4175 149.5806) (width 0.254) (layer F.Cu) (net 5) (tstamp 56060496)) + (segment (start 49.89068 149.56536) (end 49.87544 149.5806) (width 0.254) (layer F.Cu) (net 5) (tstamp 56060495)) + (via (at 49.89068 149.56536) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 5)) + (segment (start 55.51424 148.07184) (end 51.3842 148.07184) (width 0.254) (layer B.Cu) (net 5) (tstamp 56060491)) + (segment (start 55.63616 147.94992) (end 55.51424 148.07184) (width 0.254) (layer B.Cu) (net 5) (tstamp 56060490)) + (via (at 55.63616 147.94992) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 5)) + (segment (start 55.64816 147.96192) (end 55.63616 147.94992) (width 0.254) (layer F.Cu) (net 5) (tstamp 5606048E)) + (segment (start 46.4312 134.17296) (end 46.4312 133.9596) (width 0.58) (layer B.Cu) (net 5)) + (segment (start 48.06188 128.36652) (end 49.34204 127.08636) (width 0.58) (layer B.Cu) (net 5) (tstamp 5606035E)) + (segment (start 46.1264 128.36652) (end 48.06188 128.36652) (width 0.58) (layer B.Cu) (net 5) (tstamp 5606035D)) + (segment (start 45.02912 129.4638) (end 46.1264 128.36652) (width 0.58) (layer B.Cu) (net 5) (tstamp 5606035C)) + (segment (start 45.02912 132.55752) (end 45.02912 129.4638) (width 0.58) (layer B.Cu) (net 5) (tstamp 5606035B)) + (segment (start 46.4312 133.9596) (end 45.02912 132.55752) (width 0.58) (layer B.Cu) (net 5) (tstamp 5606035A)) + (segment (start 43.64228 134.1912) (end 46.41296 134.1912) (width 0.58) (layer F.Cu) (net 5)) + (segment (start 46.67504 149.5806) (end 48.4175 149.5806) (width 0.58) (layer F.Cu) (net 5) (tstamp 56060304)) + (segment (start 46.5836 149.48916) (end 46.67504 149.5806) (width 0.58) (layer F.Cu) (net 5) (tstamp 56060303)) + (via (at 46.5836 149.48916) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 5)) + (segment (start 46.5836 144.4244) (end 46.5836 149.48916) (width 0.58) (layer B.Cu) (net 5) (tstamp 5608989C)) + (segment (start 46.4312 134.17296) (end 46.5836 134.32536) (width 0.58) (layer B.Cu) (net 5) (tstamp 56060300)) + (via (at 46.4312 134.17296) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 5)) + (segment (start 46.41296 134.1912) (end 46.4312 134.17296) (width 0.58) (layer F.Cu) (net 5) (tstamp 560602FE)) + (segment (start 43.68292 135.52608) (end 43.68292 134.23184) (width 0.254) (layer F.Cu) (net 5)) + (segment (start 43.68292 134.23184) (end 43.64228 134.1912) (width 0.254) (layer F.Cu) (net 5) (tstamp 56060243)) + (segment (start 40.12736 134.59926) (end 43.23422 134.59926) (width 0.254) (layer F.Cu) (net 5)) + (segment (start 43.23422 134.59926) (end 43.64228 134.1912) (width 0.254) (layer F.Cu) (net 5) (tstamp 56060226)) + (segment (start 53.213 126.86284) (end 53.213 125.54712) (width 0.254) (layer B.Cu) (net 6)) + (segment (start 53.213 125.54712) (end 55.0418 123.71832) (width 0.254) (layer B.Cu) (net 6) (tstamp 5608A89C)) + (segment (start 55.0418 123.71832) (end 55.17896 123.71832) (width 0.254) (layer B.Cu) (net 6) (tstamp 5608A89D)) + (segment (start 56.5274 130.7766) (end 56.5274 128.27792) (width 0.254) (layer F.Cu) (net 6)) + (segment (start 56.96712 127.8382) (end 58.64352 127.8382) (width 0.254) (layer F.Cu) (net 6) (tstamp 5608A7D2)) + (segment (start 56.5274 128.27792) (end 56.96712 127.8382) (width 0.254) (layer F.Cu) (net 6) (tstamp 5608A7CF)) + (segment (start 46.37024 129.80416) (end 48.8696 129.80416) (width 1.16) (layer F.Cu) (net 6)) + (segment (start 53.53628 127.18612) (end 53.53628 128.42748) (width 1.16) (layer F.Cu) (net 6) (tstamp 5608A646)) + (segment (start 53.213 126.86284) (end 53.53628 127.18612) (width 1.16) (layer F.Cu) (net 6) (tstamp 5608A645)) + (via (at 53.213 126.86284) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 6)) + (segment (start 51.81092 126.86284) (end 53.213 126.86284) (width 1.16) (layer B.Cu) (net 6) (tstamp 5608A641)) + (segment (start 49.94656 128.7272) (end 51.81092 126.86284) (width 1.16) (layer B.Cu) (net 6) (tstamp 5608A640)) + (via (at 49.94656 128.7272) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 6)) + (segment (start 48.8696 129.80416) (end 49.94656 128.7272) (width 1.16) (layer F.Cu) (net 6) (tstamp 5608A63C)) + (segment (start 53.3274 142.4766) (end 53.3274 132.3594) (width 0.58) (layer F.Cu) (net 6)) + (segment (start 53.3274 132.3594) (end 53.3274 132.26796) (width 0.58) (layer F.Cu) (net 6) (tstamp 5608A58E)) + (segment (start 53.3274 132.26796) (end 53.3274 130.796598) (width 0.58) (layer F.Cu) (net 6) (tstamp 5608A512)) + (segment (start 53.3274 130.796598) (end 53.307402 130.7766) (width 0.58) (layer F.Cu) (net 6) (tstamp 5608A4E7)) + (segment (start 53.307402 130.7766) (end 53.3274 130.7766) (width 0.58) (layer F.Cu) (net 6) (tstamp 5608A4EA)) + (segment (start 53.3274 130.7766) (end 53.3274 128.63636) (width 0.58) (layer F.Cu) (net 6)) + (segment (start 53.3274 128.63636) (end 53.53628 128.42748) (width 0.58) (layer F.Cu) (net 6) (tstamp 56089F20)) + (segment (start 44.59228 131.3912) (end 44.59228 130.0448) (width 1.16) (layer F.Cu) (net 6)) + (segment (start 44.59228 130.0448) (end 44.36434 129.81686) (width 1.16) (layer F.Cu) (net 6) (tstamp 56089B68)) + (segment (start 46.41088 129.80416) (end 46.37024 129.80416) (width 1.16) (layer F.Cu) (net 6)) + (segment (start 46.37024 129.80416) (end 44.37704 129.80416) (width 1.16) (layer F.Cu) (net 6) (tstamp 5608A570)) + (segment (start 44.37704 129.80416) (end 44.36434 129.81686) (width 1.16) (layer F.Cu) (net 6) (tstamp 56089B64)) + (segment (start 43.66514 139.10584) (end 43.66514 137.04386) (width 1.16) (layer F.Cu) (net 6)) + (segment (start 43.66514 137.04386) (end 43.68292 137.02608) (width 1.16) (layer F.Cu) (net 6) (tstamp 56089AD9)) + (via (at 63.26124 126.90856) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 6)) + (segment (start 62.5856 126.23292) (end 63.26124 126.90856) (width 0.254) (layer F.Cu) (net 6) (tstamp 56060BE4)) + (segment (start 59.87796 126.23292) (end 62.5856 126.23292) (width 0.254) (layer F.Cu) (net 6)) + (segment (start 63.18504 129.1082) (end 62.27572 129.1082) (width 0.254) (layer F.Cu) (net 6) (tstamp 56060BEC)) + (segment (start 63.36284 128.9304) (end 63.18504 129.1082) (width 0.254) (layer F.Cu) (net 6) (tstamp 56060BEB)) + (via (at 63.36284 128.9304) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 6)) + (segment (start 63.36284 127.01016) (end 63.36284 128.9304) (width 0.254) (layer B.Cu) (net 6) (tstamp 56060BE9)) + (segment (start 63.26124 126.90856) (end 63.36284 127.01016) (width 0.254) (layer B.Cu) (net 6) (tstamp 56060BE8)) + (segment (start 59.88812 126.23292) (end 59.87796 126.23292) (width 0.254) (layer F.Cu) (net 6)) + (segment (start 58.64352 127.46736) (end 59.87796 126.23292) (width 0.254) (layer F.Cu) (net 6) (tstamp 56060BDF)) + (segment (start 59.87796 126.23292) (end 59.88812 126.23292) (width 0.254) (layer F.Cu) (net 6) (tstamp 56060BE0)) + (segment (start 58.64352 127.8382) (end 58.64352 127.46736) (width 0.254) (layer F.Cu) (net 6)) + (segment (start 60.24372 127.8382) (end 58.64352 127.8382) (width 0.254) (layer F.Cu) (net 6)) + (segment (start 55.17896 123.71832) (end 55.15864 123.71832) (width 0.254) (layer F.Cu) (net 6)) + (segment (start 46.39818 129.81686) (end 44.36434 129.81686) (width 0.254) (layer F.Cu) (net 6) (tstamp 560602D7)) + (segment (start 46.41088 129.80416) (end 46.39818 129.81686) (width 0.254) (layer F.Cu) (net 6) (tstamp 560602D6)) + (segment (start 43.66514 137.04386) (end 43.68292 137.02608) (width 0.58) (layer F.Cu) (net 6) (tstamp 56060299)) + (segment (start 44.59228 130.0448) (end 44.36434 129.81686) (width 0.254) (layer F.Cu) (net 6) (tstamp 56060251)) + (segment (start 40.12736 137.19926) (end 43.50974 137.19926) (width 0.254) (layer F.Cu) (net 6)) + (segment (start 43.50974 137.19926) (end 43.68292 137.02608) (width 0.254) (layer F.Cu) (net 6) (tstamp 56060240)) + (segment (start 40.12736 138.39926) (end 40.12736 137.19926) (width 0.254) (layer F.Cu) (net 6)) + (segment (start 37.42736 139.39926) (end 37.42736 132.39926) (width 0.254) (layer F.Cu) (net 6)) + (segment (start 40.12736 133.39926) (end 41.19018 133.39926) (width 0.58) (layer F.Cu) (net 6)) + (segment (start 44.59228 132.31364) (end 44.59228 131.3912) (width 0.58) (layer F.Cu) (net 6) (tstamp 5606021F)) + (segment (start 44.0944 132.81152) (end 44.59228 132.31364) (width 0.58) (layer F.Cu) (net 6) (tstamp 5606021E)) + (segment (start 41.77792 132.81152) (end 44.0944 132.81152) (width 0.58) (layer F.Cu) (net 6) (tstamp 5606021D)) + (segment (start 41.19018 133.39926) (end 41.77792 132.81152) (width 0.58) (layer F.Cu) (net 6) (tstamp 5606021C)) + (segment (start 40.12736 133.39926) (end 39.9425 133.39926) (width 0.58) (layer F.Cu) (net 6)) + (segment (start 39.9425 133.39926) (end 38.9425 132.39926) (width 0.58) (layer F.Cu) (net 6) (tstamp 5606020E)) + (segment (start 38.9425 132.39926) (end 37.42736 132.39926) (width 0.58) (layer F.Cu) (net 6) (tstamp 5606020F)) + (segment (start 40.12736 138.39926) (end 40.12736 138.50576) (width 0.58) (layer F.Cu) (net 6)) + (segment (start 40.12736 138.50576) (end 39.23386 139.39926) (width 0.58) (layer F.Cu) (net 6) (tstamp 5606020A)) + (segment (start 39.23386 139.39926) (end 37.42736 139.39926) (width 0.58) (layer F.Cu) (net 6) (tstamp 5606020B)) + (segment (start 53.3274 142.4766) (end 53.3274 143.81908) (width 0.58) (layer F.Cu) (net 6)) + (segment (start 53.3274 143.81908) (end 52.9456 144.20088) (width 0.58) (layer F.Cu) (net 6) (tstamp 5608A2A1)) + (segment (start 52.9456 144.20088) (end 51.48072 144.20088) (width 0.58) (layer F.Cu) (net 6)) + (segment (start 51.48072 144.20088) (end 51.45024 144.23136) (width 0.58) (layer F.Cu) (net 6) (tstamp 5608A28D)) + (segment (start 44.22648 149.30558) (end 45.46162 149.30558) (width 0.254) (layer F.Cu) (net 6)) + (segment (start 51.45024 144.23136) (end 51.48072 144.20088) (width 0.254) (layer F.Cu) (net 6) (tstamp 5608A0AC)) + (via (at 51.45024 144.23136) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 6)) + (segment (start 50.5968 145.0848) (end 51.45024 144.23136) (width 0.254) (layer B.Cu) (net 6) (tstamp 5608A0AA)) + (segment (start 50.5968 146.69008) (end 50.5968 145.0848) (width 0.254) (layer B.Cu) (net 6) (tstamp 5608A0A8)) + (segment (start 46.95952 150.32736) (end 50.5968 146.69008) (width 0.254) (layer B.Cu) (net 6) (tstamp 5608A0A7)) + (segment (start 46.24832 150.32736) (end 46.95952 150.32736) (width 0.254) (layer B.Cu) (net 6) (tstamp 5608A0A6)) + (segment (start 45.94352 150.02256) (end 46.24832 150.32736) (width 0.254) (layer B.Cu) (net 6) (tstamp 5608A0A5)) + (segment (start 45.94352 149.71776) (end 45.94352 150.02256) (width 0.254) (layer B.Cu) (net 6) (tstamp 5608A0A4)) + (segment (start 45.49648 149.27072) (end 45.94352 149.71776) (width 0.254) (layer B.Cu) (net 6) (tstamp 5608A0A3)) + (via (at 45.49648 149.27072) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 6)) + (segment (start 45.46162 149.30558) (end 45.49648 149.27072) (width 0.254) (layer F.Cu) (net 6) (tstamp 5608A0A1)) + (segment (start 52.9456 144.20088) (end 52.9456 144.00092) (width 0.254) (layer F.Cu) (net 6)) + (segment (start 52.9456 144.00092) (end 53.3274 143.61912) (width 0.254) (layer F.Cu) (net 6) (tstamp 5608A07B)) + (segment (start 53.3274 143.61912) (end 53.3274 142.4766) (width 0.254) (layer F.Cu) (net 6) (tstamp 5608A07C)) + (segment (start 42.77176 149.0091) (end 43.93 149.0091) (width 0.25) (layer F.Cu) (net 6)) + (segment (start 43.93 149.0091) (end 44.22648 149.30558) (width 0.25) (layer F.Cu) (net 6) (tstamp 56060102)) + (segment (start 52.5274 130.7766) (end 52.5274 133.807) (width 0.58) (layer F.Cu) (net 7)) + (segment (start 54.107402 133.964358) (end 54.107402 142.4766) (width 0.58) (layer F.Cu) (net 7) (tstamp 5608A5C5)) + (segment (start 54.21884 133.85292) (end 54.107402 133.964358) (width 0.58) (layer F.Cu) (net 7) (tstamp 5608A5C4)) + (via (at 54.21884 133.85292) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 7)) + (segment (start 52.48148 133.85292) (end 54.21884 133.85292) (width 0.58) (layer B.Cu) (net 7) (tstamp 5608A5C1)) + (segment (start 52.46624 133.86816) (end 52.48148 133.85292) (width 0.58) (layer B.Cu) (net 7) (tstamp 5608A5C0)) + (via (at 52.46624 133.86816) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 7)) + (segment (start 52.5274 133.807) (end 52.46624 133.86816) (width 0.58) (layer F.Cu) (net 7) (tstamp 5608A5BC)) + (segment (start 54.107402 142.4766) (end 54.1274 142.4766) (width 0.58) (layer F.Cu) (net 7) (tstamp 5608A5C7)) + (segment (start 54.107402 142.4766) (end 54.1274 142.4766) (width 0.58) (layer F.Cu) (net 7) (tstamp 5608A520)) + (segment (start 42.69228 131.3912) (end 42.69228 129.98892) (width 1.16) (layer F.Cu) (net 7)) + (segment (start 42.69228 129.98892) (end 42.86434 129.81686) (width 1.16) (layer F.Cu) (net 7) (tstamp 56089F4B)) + (segment (start 52.03628 128.42748) (end 52.03628 128.41916) (width 1.16) (layer F.Cu) (net 7)) + (segment (start 52.03628 128.41916) (end 51.2572 127.64008) (width 1.16) (layer F.Cu) (net 7) (tstamp 56089F35)) + (segment (start 52.03628 128.42748) (end 52.03628 128.65284) (width 0.58) (layer F.Cu) (net 7)) + (segment (start 52.03628 128.65284) (end 52.5274 129.14396) (width 0.58) (layer F.Cu) (net 7) (tstamp 56089F1B)) + (segment (start 52.5274 129.14396) (end 52.5274 130.7766) (width 0.58) (layer F.Cu) (net 7) (tstamp 56089F1D)) + (segment (start 57.71896 123.71832) (end 57.71896 122.76328) (width 0.58) (layer F.Cu) (net 7)) + (segment (start 57.71896 122.76328) (end 57.05856 122.10288) (width 0.58) (layer F.Cu) (net 7) (tstamp 56089B07)) + (segment (start 57.05856 122.10288) (end 54.53888 122.10288) (width 0.58) (layer F.Cu) (net 7) (tstamp 56089B08)) + (segment (start 54.53888 122.10288) (end 51.73472 124.90704) (width 0.58) (layer F.Cu) (net 7) (tstamp 56089B09)) + (segment (start 51.73472 124.90704) (end 51.73472 127.16256) (width 0.58) (layer F.Cu) (net 7) (tstamp 56089B0A)) + (segment (start 51.73472 127.16256) (end 51.2572 127.64008) (width 0.58) (layer F.Cu) (net 7) (tstamp 56089B0B)) + (segment (start 44.1452 127.07112) (end 50.68824 127.07112) (width 1.16) (layer F.Cu) (net 7)) + (segment (start 50.68824 127.07112) (end 51.2572 127.64008) (width 1.16) (layer F.Cu) (net 7) (tstamp 56089AF3)) + (segment (start 42.86434 129.81686) (end 42.86434 128.35198) (width 1.16) (layer F.Cu) (net 7)) + (segment (start 42.86434 128.35198) (end 44.1452 127.07112) (width 1.16) (layer F.Cu) (net 7) (tstamp 56089AED)) + (segment (start 44.1452 127.07112) (end 44.1452 125.20676) (width 1.16) (layer F.Cu) (net 7) (tstamp 56089AEF)) + (segment (start 44.1452 125.20676) (end 44.26204 125.08992) (width 1.16) (layer F.Cu) (net 7) (tstamp 56089AF0)) + (segment (start 51.73472 124.90704) (end 51.73472 128.1176) (width 0.254) (layer F.Cu) (net 7) (tstamp 56060589)) + (segment (start 54.53888 122.10288) (end 51.73472 124.90704) (width 0.254) (layer F.Cu) (net 7) (tstamp 56060584)) + (segment (start 57.05856 122.10288) (end 54.53888 122.10288) (width 0.254) (layer F.Cu) (net 7) (tstamp 56060581)) + (segment (start 57.71896 122.76328) (end 57.05856 122.10288) (width 0.254) (layer F.Cu) (net 7) (tstamp 56060580)) + (segment (start 50.68824 127.07112) (end 51.73472 128.1176) (width 0.58) (layer F.Cu) (net 7) (tstamp 56060357)) + (segment (start 42.86434 128.35198) (end 44.1452 127.07112) (width 0.58) (layer F.Cu) (net 7) (tstamp 56060351)) + (segment (start 44.1452 127.07112) (end 44.26204 126.95428) (width 0.58) (layer F.Cu) (net 7) (tstamp 56060355)) + (segment (start 44.26204 126.95428) (end 44.26204 125.08992) (width 0.58) (layer F.Cu) (net 7) (tstamp 56060352)) + (segment (start 42.69228 129.98892) (end 42.86434 129.81686) (width 0.254) (layer F.Cu) (net 7) (tstamp 5606024E)) + (segment (start 54.1274 142.4766) (end 54.1274 143.88268) (width 0.58) (layer F.Cu) (net 7)) + (segment (start 54.1274 143.88268) (end 54.4456 144.20088) (width 0.58) (layer F.Cu) (net 7) (tstamp 5608A29B)) + (segment (start 54.4456 144.20088) (end 55.54472 144.20088) (width 0.58) (layer F.Cu) (net 7)) + (segment (start 44.22648 150.80558) (end 45.30414 150.80558) (width 0.254) (layer F.Cu) (net 7)) + (via (at 55.54472 144.20088) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 7)) + (segment (start 53.4924 144.20088) (end 55.54472 144.20088) (width 0.254) (layer B.Cu) (net 7) (tstamp 5608A0B9)) + (segment (start 51.67376 146.01952) (end 53.4924 144.20088) (width 0.254) (layer B.Cu) (net 7) (tstamp 5608A0B8)) + (segment (start 51.67376 146.58848) (end 51.67376 146.01952) (width 0.254) (layer B.Cu) (net 7) (tstamp 5608A0B7)) + (segment (start 48.58512 149.67712) (end 51.67376 146.58848) (width 0.254) (layer B.Cu) (net 7) (tstamp 5608A0B6)) + (segment (start 48.58512 150.59152) (end 48.58512 149.67712) (width 0.254) (layer B.Cu) (net 7) (tstamp 5608A0B5)) + (segment (start 47.58944 151.5872) (end 48.58512 150.59152) (width 0.254) (layer B.Cu) (net 7) (tstamp 5608A0B4)) + (segment (start 46.08576 151.5872) (end 47.58944 151.5872) (width 0.254) (layer B.Cu) (net 7) (tstamp 5608A0B3)) + (segment (start 45.57776 151.0792) (end 46.08576 151.5872) (width 0.254) (layer B.Cu) (net 7) (tstamp 5608A0B2)) + (via (at 45.57776 151.0792) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 7)) + (segment (start 45.30414 150.80558) (end 45.57776 151.0792) (width 0.254) (layer F.Cu) (net 7) (tstamp 5608A0B0)) + (segment (start 54.4456 144.20088) (end 54.23408 144.20088) (width 0.254) (layer F.Cu) (net 7)) + (segment (start 54.23408 144.20088) (end 54.1274 144.0942) (width 0.254) (layer F.Cu) (net 7) (tstamp 5608A077)) + (segment (start 54.1274 144.0942) (end 54.1274 142.4766) (width 0.254) (layer F.Cu) (net 7) (tstamp 5608A078)) + (segment (start 42.82764 151.10206) (end 43.93 151.10206) (width 0.25) (layer F.Cu) (net 7)) + (segment (start 43.93 151.10206) (end 44.22648 150.80558) (width 0.25) (layer F.Cu) (net 7) (tstamp 56060105)) + (segment (start 74.1172 131.89966) (end 74.1172 128.85928) (width 1.16) (layer B.Cu) (net 8)) + (segment (start 74.1172 128.85928) (end 70.85584 125.59792) (width 1.16) (layer B.Cu) (net 8) (tstamp 56060E3B)) + (segment (start 70.85584 125.59792) (end 74.44556 125.59792) (width 1.16) (layer F.Cu) (net 8)) + (segment (start 74.44556 125.59792) (end 75.07224 126.2246) (width 1.16) (layer F.Cu) (net 8) (tstamp 56060E27)) + (segment (start 46.80204 125.08992) (end 46.80204 123.98756) (width 1.16) (layer F.Cu) (net 8)) + (segment (start 70.85584 122.64644) (end 70.85584 125.59792) (width 1.16) (layer F.Cu) (net 8) (tstamp 56060E22)) + (segment (start 68.11264 119.90324) (end 70.85584 122.64644) (width 1.16) (layer F.Cu) (net 8) (tstamp 56060E21)) + (segment (start 50.88636 119.90324) (end 68.11264 119.90324) (width 1.16) (layer F.Cu) (net 8) (tstamp 56060E1F)) + (segment (start 46.80204 123.98756) (end 50.88636 119.90324) (width 1.16) (layer F.Cu) (net 8) (tstamp 56060E1A)) + (segment (start 74.44556 125.59792) (end 75.07224 126.2246) (width 0.254) (layer F.Cu) (net 8) (tstamp 56060A32)) + (segment (start 58.79522 150.9649) (end 58.79522 154.00598) (width 0.58) (layer F.Cu) (net 9)) + (segment (start 58.79522 154.00598) (end 58.7883 154.0129) (width 0.58) (layer F.Cu) (net 9) (tstamp 560899BA)) + (segment (start 58.7883 154.0129) (end 58.7883 150.97182) (width 0.254) (layer F.Cu) (net 9)) + (segment (start 58.7883 150.97182) (end 58.79522 150.9649) (width 0.254) (layer F.Cu) (net 9) (tstamp 5606086F)) + (segment (start 60.29522 150.9649) (end 60.4393 150.9649) (width 0.58) (layer F.Cu) (net 10)) + (segment (start 60.4393 150.9649) (end 61.3283 151.8539) (width 0.58) (layer F.Cu) (net 10) (tstamp 560899B6)) + (segment (start 61.3283 151.8539) (end 61.3283 154.0129) (width 0.58) (layer F.Cu) (net 10) (tstamp 560899B7)) + (segment (start 60.1987 148.5773) (end 60.1987 150.86838) (width 0.58) (layer F.Cu) (net 10)) + (segment (start 60.1987 150.86838) (end 60.29522 150.9649) (width 0.58) (layer F.Cu) (net 10) (tstamp 560899B3)) + (segment (start 60.1987 150.86838) (end 60.29522 150.9649) (width 0.254) (layer F.Cu) (net 10) (tstamp 560608A8)) + (segment (start 60.2869 150.95658) (end 60.29522 150.9649) (width 0.254) (layer F.Cu) (net 10) (tstamp 56060884)) + (segment (start 60.4393 150.9649) (end 61.3283 151.8539) (width 0.254) (layer F.Cu) (net 10) (tstamp 56060872)) + (segment (start 61.3283 151.8539) (end 61.3283 154.0129) (width 0.254) (layer F.Cu) (net 10) (tstamp 56060873)) + (segment (start 56.59628 149.46192) (end 57.10612 149.46192) (width 0.58) (layer F.Cu) (net 11)) + (segment (start 57.10612 149.46192) (end 57.7088 148.85924) (width 0.58) (layer F.Cu) (net 11) (tstamp 56089A70)) + (segment (start 51.62804 149.6187) (end 53.7794 149.6187) (width 0.58) (layer F.Cu) (net 11)) + (segment (start 53.7794 149.6187) (end 53.93618 149.46192) (width 0.58) (layer F.Cu) (net 11) (tstamp 56089A12)) + (segment (start 53.93618 149.46192) (end 56.59628 149.46192) (width 0.58) (layer F.Cu) (net 11) (tstamp 56089A14)) + (segment (start 56.59628 149.46192) (end 53.93618 149.46192) (width 0.58) (layer F.Cu) (net 11)) + (segment (start 53.93618 149.46192) (end 53.8175 149.5806) (width 0.58) (layer F.Cu) (net 11) (tstamp 56089992)) + (segment (start 50.06848 134.70128) (end 50.06848 135.39724) (width 1.16) (layer B.Cu) (net 11)) + (segment (start 50.07864 135.4074) (end 51.12004 135.4074) (width 1.16) (layer B.Cu) (net 11) (tstamp 560897CA)) + (segment (start 50.06848 135.39724) (end 50.07864 135.4074) (width 1.16) (layer B.Cu) (net 11) (tstamp 560897C8)) + (segment (start 48.38192 142.17904) (end 48.38192 136.38784) (width 1.16) (layer B.Cu) (net 11)) + (segment (start 57.29732 135.4074) (end 62.5856 130.11912) (width 1.16) (layer B.Cu) (net 11) (tstamp 560897B6)) + (segment (start 51.12004 135.4074) (end 57.29732 135.4074) (width 1.16) (layer B.Cu) (net 11) (tstamp 560897B2)) + (segment (start 48.38192 136.38784) (end 50.06848 134.70128) (width 1.16) (layer B.Cu) (net 11) (tstamp 560897AB)) + (segment (start 62.5856 130.11912) (end 64.06388 130.11912) (width 1.16) (layer B.Cu) (net 11) (tstamp 560897C1)) + (segment (start 43.66514 142.30584) (end 48.25512 142.30584) (width 1.16) (layer F.Cu) (net 11)) + (segment (start 48.25512 142.30584) (end 48.38192 142.17904) (width 1.16) (layer F.Cu) (net 11) (tstamp 560897A0)) + (segment (start 48.38192 142.17904) (end 48.768 141.79296) (width 0.58) (layer B.Cu) (net 11) (tstamp 56060D55)) + (segment (start 48.768 141.79296) (end 48.768 136.38784) (width 0.58) (layer B.Cu) (net 11) (tstamp 56060D56)) + (segment (start 48.768 136.38784) (end 50.43424 134.7216) (width 0.58) (layer B.Cu) (net 11) (tstamp 56060D57)) + (segment (start 48.25512 142.30584) (end 48.38192 142.17904) (width 0.58) (layer F.Cu) (net 11) (tstamp 56060D53)) + (via (at 48.38192 142.17904) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 11)) + (segment (start 50.43424 134.7216) (end 57.97296 134.7216) (width 0.58) (layer B.Cu) (net 11) (tstamp 56060D58)) + (segment (start 57.97296 134.7216) (end 57.98312 134.7216) (width 0.58) (layer B.Cu) (net 11) (tstamp 56061CA4)) + (segment (start 57.98312 134.7216) (end 61.50102 131.2037) (width 0.58) (layer B.Cu) (net 11) (tstamp 56060D59)) + (segment (start 61.50102 131.2037) (end 62.5856 130.11912) (width 0.58) (layer B.Cu) (net 11) (tstamp 56060E7F)) + (segment (start 62.5856 130.11912) (end 63.80988 130.11912) (width 0.58) (layer B.Cu) (net 11) (tstamp 56060D5B)) + (segment (start 63.80988 130.11912) (end 64.06388 130.11912) (width 0.58) (layer B.Cu) (net 11) (tstamp 56061CBB)) + (segment (start 53.8175 149.5806) (end 56.4776 149.5806) (width 0.254) (layer F.Cu) (net 11)) + (segment (start 56.4776 149.5806) (end 56.59628 149.46192) (width 0.254) (layer F.Cu) (net 11) (tstamp 56060499)) + (segment (start 43.66514 142.30584) (end 43.66514 144.4498) (width 1.16) (layer F.Cu) (net 11)) + (segment (start 51.66614 149.5806) (end 53.8175 149.5806) (width 0.58) (layer F.Cu) (net 11) (tstamp 56060343)) + (segment (start 51.62804 149.6187) (end 51.66614 149.5806) (width 0.58) (layer F.Cu) (net 11) (tstamp 56060342)) + (via (at 51.62804 149.6187) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 11)) + (segment (start 51.62804 151.77008) (end 51.62804 149.6187) (width 1.16) (layer B.Cu) (net 11) (tstamp 5606033F)) + (segment (start 49.00168 154.39644) (end 51.62804 151.77008) (width 1.16) (layer B.Cu) (net 11) (tstamp 5606033E)) + (segment (start 43.19016 154.39644) (end 49.00168 154.39644) (width 1.16) (layer B.Cu) (net 11) (tstamp 5606033D)) + (segment (start 42.04462 153.2509) (end 43.19016 154.39644) (width 1.16) (layer B.Cu) (net 11) (tstamp 5606033C)) + (segment (start 42.04462 146.07032) (end 42.04462 153.2509) (width 1.16) (layer B.Cu) (net 11) (tstamp 5606033B)) + (segment (start 43.66514 144.4498) (end 42.04462 146.07032) (width 1.16) (layer B.Cu) (net 11) (tstamp 5606033A)) + (via (at 43.66514 144.4498) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 11)) + (segment (start 57.7088 148.85924) (end 57.7088 146.177) (width 0.58) (layer F.Cu) (net 11) (tstamp 56089A72)) + (segment (start 64.06388 130.11912) (end 65.60312 128.57988) (width 1.16) (layer B.Cu) (net 11) (tstamp 560897C3)) + (segment (start 66.04508 128.13792) (end 65.60312 128.57988) (width 1.16) (layer B.Cu) (net 11) (tstamp 56060E2D)) + (segment (start 66.04508 128.13792) (end 65.60312 128.57988) (width 0.254) (layer B.Cu) (net 11) (tstamp 56060E0A)) + (segment (start 64.06388 130.11912) (end 65.60312 128.57988) (width 0.58) (layer B.Cu) (net 11) (tstamp 56060D5D)) + (via (at 65.60312 128.57988) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 11)) + (via (at 57.7088 146.177) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 11)) + (segment (start 65.60312 128.57988) (end 65.63568 128.54732) (width 0.58) (layer F.Cu) (net 11) (tstamp 56060D5F)) + (segment (start 63.10814 143.10938) (end 63.10814 143.08004) (width 1.16) (layer F.Cu) (net 11) (tstamp 56089AAB)) + (segment (start 61.30544 144.91208) (end 63.10814 143.10938) (width 1.16) (layer F.Cu) (net 11) (tstamp 56089AAA)) + (via (at 61.30544 144.91208) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 11)) + (segment (start 61.30544 144.98828) (end 61.30544 144.91208) (width 1.16) (layer B.Cu) (net 11) (tstamp 56089AA6)) + (segment (start 60.43168 145.86204) (end 61.30544 144.98828) (width 1.16) (layer B.Cu) (net 11) (tstamp 56089A9F)) + (segment (start 58.02376 145.86204) (end 60.43168 145.86204) (width 1.16) (layer B.Cu) (net 11) (tstamp 56089A90)) + (segment (start 57.7088 146.177) (end 58.02376 145.86204) (width 0.58) (layer B.Cu) (net 11) (tstamp 56089A8F)) + (segment (start 63.10814 141.98854) (end 63.10814 143.08004) (width 1.16) (layer F.Cu) (net 11)) + (segment (start 63.10814 143.08004) (end 63.55334 143.52524) (width 1.16) (layer F.Cu) (net 11) (tstamp 560899C7)) + (segment (start 63.55334 143.52524) (end 66.88074 143.52524) (width 1.16) (layer F.Cu) (net 11) (tstamp 560899C8)) + (segment (start 66.88074 143.52524) (end 69.23024 141.17574) (width 1.16) (layer F.Cu) (net 11) (tstamp 560899C9)) + (segment (start 69.23024 141.17574) (end 73.40924 141.17574) (width 1.16) (layer F.Cu) (net 11)) + (segment (start 73.40924 141.17574) (end 73.94194 140.64304) (width 1.16) (layer F.Cu) (net 11) (tstamp 560899C4)) + (segment (start 71.20128 144.50568) (end 69.82968 144.50568) (width 1.16) (layer F.Cu) (net 11)) + (segment (start 69.82968 144.50568) (end 69.23024 143.90624) (width 1.16) (layer F.Cu) (net 11) (tstamp 560899C0)) + (segment (start 69.23024 143.90624) (end 69.23024 141.17574) (width 1.16) (layer F.Cu) (net 11) (tstamp 560899C1)) + (segment (start 69.23024 141.17574) (end 66.88074 143.52524) (width 0.58) (layer F.Cu) (net 11)) + (segment (start 66.88074 143.52524) (end 63.55334 143.52524) (width 0.58) (layer F.Cu) (net 11) (tstamp 56060ECD)) + (segment (start 63.55334 143.52524) (end 63.10814 143.08004) (width 0.58) (layer F.Cu) (net 11) (tstamp 56060ECE)) + (segment (start 73.40924 141.17574) (end 73.94194 140.64304) (width 0.58) (layer F.Cu) (net 11) (tstamp 56060ECA)) + (segment (start 69.23024 143.90624) (end 69.23024 141.17574) (width 0.58) (layer F.Cu) (net 11) (tstamp 56060EC7)) + (segment (start 69.82968 144.50568) (end 69.23024 143.90624) (width 0.58) (layer F.Cu) (net 11) (tstamp 56060EC5)) + (segment (start 63.10814 141.98854) (end 62.92342 141.98854) (width 0.254) (layer F.Cu) (net 11)) + (segment (start 70.85584 128.13792) (end 66.04508 128.13792) (width 1.16) (layer B.Cu) (net 11)) + (segment (start 70.85584 128.13792) (end 74.65892 128.13792) (width 1.16) (layer F.Cu) (net 11)) + (segment (start 74.65892 128.13792) (end 75.07224 127.7246) (width 1.16) (layer F.Cu) (net 11) (tstamp 56060E2A)) + (segment (start 65.63568 128.54732) (end 65.63568 127.25912) (width 0.58) (layer F.Cu) (net 11) (tstamp 56060D60)) + (segment (start 74.65892 128.13792) (end 75.07224 127.7246) (width 0.254) (layer F.Cu) (net 11) (tstamp 56060A35)) + (segment (start 73.40924 141.17574) (end 73.94194 140.64304) (width 0.254) (layer F.Cu) (net 11) (tstamp 560609E2)) + (segment (start 63.55334 143.52524) (end 66.88074 143.52524) (width 0.254) (layer F.Cu) (net 11) (tstamp 560609D1)) + (segment (start 63.10814 143.08004) (end 63.55334 143.52524) (width 0.254) (layer F.Cu) (net 11) (tstamp 560609D0)) + (segment (start 63.10814 141.98854) (end 63.10814 143.08004) (width 0.254) (layer F.Cu) (net 11)) + (segment (start 73.94194 139.14304) (end 73.72788 139.14304) (width 1.16) (layer F.Cu) (net 12)) + (segment (start 73.72788 139.14304) (end 73.22058 138.63574) (width 1.16) (layer F.Cu) (net 12) (tstamp 5608A95F)) + (segment (start 73.22058 138.63574) (end 69.23024 138.63574) (width 1.16) (layer F.Cu) (net 12) (tstamp 5608A960)) + (segment (start 73.94194 139.14304) (end 73.94194 134.83844) (width 1.16) (layer F.Cu) (net 12)) + (segment (start 73.94194 134.83844) (end 73.98004 134.80034) (width 1.16) (layer F.Cu) (net 12) (tstamp 5608A95C)) + (segment (start 73.74128 144.50568) (end 73.74128 143.14678) (width 1.16) (layer B.Cu) (net 12)) + (segment (start 73.74128 143.14678) (end 69.23024 138.63574) (width 1.16) (layer B.Cu) (net 12) (tstamp 560898D4)) + (segment (start 73.94194 134.83844) (end 73.98004 134.80034) (width 0.58) (layer F.Cu) (net 12) (tstamp 56060EDA)) + (segment (start 64.60814 137.82294) (end 67.57924 137.82294) (width 0.58) (layer F.Cu) (net 12)) + (segment (start 67.57924 137.82294) (end 68.39204 138.63574) (width 0.58) (layer F.Cu) (net 12) (tstamp 56060ED6)) + (segment (start 68.39204 138.63574) (end 69.23024 138.63574) (width 0.58) (layer F.Cu) (net 12) (tstamp 56060ED7)) + (segment (start 73.72788 139.14304) (end 73.22058 138.63574) (width 0.58) (layer F.Cu) (net 12) (tstamp 56060ED2)) + (segment (start 73.22058 138.63574) (end 69.23024 138.63574) (width 0.58) (layer F.Cu) (net 12) (tstamp 56060ED3)) + (segment (start 73.74128 143.14678) (end 69.23024 138.63574) (width 0.58) (layer B.Cu) (net 12) (tstamp 56060EBF)) + (segment (start 73.94194 134.83844) (end 73.98004 134.80034) (width 0.254) (layer F.Cu) (net 12) (tstamp 56060E89)) + (segment (start 69.23024 138.63574) (end 73.43464 138.63574) (width 0.254) (layer F.Cu) (net 12)) + (segment (start 73.43464 138.63574) (end 73.94194 139.14304) (width 0.254) (layer F.Cu) (net 12) (tstamp 560609DF)) + (segment (start 69.23024 138.63574) (end 68.39204 138.63574) (width 0.254) (layer F.Cu) (net 12)) + (segment (start 68.39204 138.63574) (end 67.57924 137.82294) (width 0.254) (layer F.Cu) (net 12) (tstamp 560609CC)) + (segment (start 63.82004 134.80034) (end 63.82004 132.03682) (width 1.16) (layer B.Cu) (net 13)) + (segment (start 63.82004 132.03682) (end 63.9572 131.89966) (width 1.16) (layer B.Cu) (net 13) (tstamp 56060E4B)) + (segment (start 68.43568 126.30912) (end 68.43568 127.42118) (width 0.254) (layer F.Cu) (net 13)) + (segment (start 68.43568 127.42118) (end 63.9572 131.89966) (width 0.254) (layer F.Cu) (net 13) (tstamp 56060E10)) + (segment (start 48.4175 145.7706) (end 48.4175 145.20162) (width 0.254) (layer F.Cu) (net 15)) + (segment (start 56.04764 140.78712) (end 55.84952 140.78712) (width 0.254) (layer F.Cu) (net 15) (tstamp 5608A47C)) + (segment (start 56.30672 141.0462) (end 56.04764 140.78712) (width 0.254) (layer F.Cu) (net 15) (tstamp 5608A47B)) + (via (at 56.30672 141.0462) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 15)) + (segment (start 53.86832 143.4846) (end 56.30672 141.0462) (width 0.254) (layer B.Cu) (net 15) (tstamp 5608A474)) + (segment (start 50.13452 143.4846) (end 53.86832 143.4846) (width 0.254) (layer B.Cu) (net 15) (tstamp 5608A472)) + (segment (start 48.82388 144.79524) (end 50.13452 143.4846) (width 0.254) (layer B.Cu) (net 15) (tstamp 5608A471)) + (via (at 48.82388 144.79524) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 15)) + (segment (start 48.4175 145.20162) (end 48.82388 144.79524) (width 0.254) (layer F.Cu) (net 15) (tstamp 5608A469)) + (segment (start 54.9274 142.4766) (end 54.9274 141.70924) (width 0.254) (layer F.Cu) (net 15)) + (segment (start 54.9274 141.70924) (end 55.84952 140.78712) (width 0.254) (layer F.Cu) (net 15) (tstamp 56060386)) + (segment (start 55.84952 140.78712) (end 55.90286 140.73378) (width 0.254) (layer F.Cu) (net 15) (tstamp 5608A47F)) + (segment (start 55.90286 140.73378) (end 55.90286 139.42314) (width 0.254) (layer F.Cu) (net 15) (tstamp 56060387)) + (segment (start 55.90286 139.42314) (end 56.51246 138.81354) (width 0.254) (layer F.Cu) (net 15) (tstamp 56060388)) + (segment (start 56.51246 138.81354) (end 57.41924 138.81354) (width 0.254) (layer F.Cu) (net 15) (tstamp 56060389)) + (segment (start 57.41924 138.81354) (end 58.4323 139.8266) (width 0.254) (layer F.Cu) (net 15) (tstamp 5606038A)) + (segment (start 58.4323 139.8266) (end 59.9774 139.8266) (width 0.254) (layer F.Cu) (net 15) (tstamp 5606038B)) + (segment (start 48.4175 145.7706) (end 48.85436 145.7706) (width 0.254) (layer F.Cu) (net 15)) + (segment (start 48.4175 147.0406) (end 48.4175 145.7706) (width 0.254) (layer F.Cu) (net 15)) + (segment (start 59.9774 136.6266) (end 61.30036 136.6266) (width 0.254) (layer F.Cu) (net 19)) + (segment (start 55.70728 150.8506) (end 53.8175 150.8506) (width 0.254) (layer F.Cu) (net 19) (tstamp 56060C01)) + (via (at 55.70728 150.8506) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 19)) + (segment (start 56.769 149.78888) (end 55.70728 150.8506) (width 0.254) (layer B.Cu) (net 19) (tstamp 56060BFE)) + (segment (start 56.769 146.29384) (end 56.769 149.78888) (width 0.254) (layer B.Cu) (net 19) (tstamp 56060BFD)) + (segment (start 56.68772 146.21256) (end 56.769 146.29384) (width 0.254) (layer B.Cu) (net 19) (tstamp 56060BFC)) + (via (at 56.68772 146.21256) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 19)) + (segment (start 61.61024 141.29004) (end 56.68772 146.21256) (width 0.254) (layer F.Cu) (net 19) (tstamp 56060BF9)) + (segment (start 61.61024 136.93648) (end 61.61024 141.29004) (width 0.254) (layer F.Cu) (net 19) (tstamp 56060BF8)) + (segment (start 61.30036 136.6266) (end 61.61024 136.93648) (width 0.254) (layer F.Cu) (net 19) (tstamp 56060BF7)) + (segment (start 55.7274 130.7766) (end 55.7274 131.84612) (width 0.254) (layer F.Cu) (net 22)) + (segment (start 59.33936 131.98856) (end 59.9774 132.6266) (width 0.254) (layer F.Cu) (net 22) (tstamp 5608A70D)) + (segment (start 55.86984 131.98856) (end 59.33936 131.98856) (width 0.254) (layer F.Cu) (net 22) (tstamp 5608A70A)) + (segment (start 55.7274 131.84612) (end 55.86984 131.98856) (width 0.254) (layer F.Cu) (net 22) (tstamp 5608A709)) + (segment (start 58.1274 130.7766) (end 58.1274 130.48792) (width 0.254) (layer F.Cu) (net 23)) + (segment (start 58.1274 130.48792) (end 59.50712 129.1082) (width 0.254) (layer F.Cu) (net 23) (tstamp 5606073B)) + (segment (start 59.50712 129.1082) (end 60.24372 129.1082) (width 0.254) (layer F.Cu) (net 23) (tstamp 56060740)) + (segment (start 62.27572 127.8382) (end 62.27572 127.21336) (width 0.254) (layer F.Cu) (net 26)) + (segment (start 54.1274 129.47904) (end 54.1274 130.7766) (width 0.254) (layer F.Cu) (net 26) (tstamp 56060B98)) + (segment (start 54.93512 128.67132) (end 54.1274 129.47904) (width 0.254) (layer F.Cu) (net 26) (tstamp 56060B97)) + (segment (start 55.82412 128.67132) (end 54.93512 128.67132) (width 0.254) (layer F.Cu) (net 26) (tstamp 56060B96)) + (segment (start 55.85968 128.63576) (end 55.82412 128.67132) (width 0.254) (layer F.Cu) (net 26) (tstamp 56060B95)) + (via (at 55.85968 128.63576) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 26)) + (segment (start 57.23636 128.63576) (end 55.85968 128.63576) (width 0.254) (layer B.Cu) (net 26) (tstamp 56060B93)) + (segment (start 57.24652 128.6256) (end 57.23636 128.63576) (width 0.254) (layer B.Cu) (net 26) (tstamp 56060B92)) + (via (at 57.24652 128.6256) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 26)) + (segment (start 58.93816 128.6256) (end 57.24652 128.6256) (width 0.254) (layer F.Cu) (net 26) (tstamp 56060B90)) + (segment (start 58.96864 128.59512) (end 58.93816 128.6256) (width 0.254) (layer F.Cu) (net 26) (tstamp 56060B8F)) + (via (at 58.96864 128.59512) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 26)) + (segment (start 58.96864 128.06172) (end 58.96864 128.59512) (width 0.254) (layer B.Cu) (net 26) (tstamp 56060B8D)) + (segment (start 60.071 126.95936) (end 58.96864 128.06172) (width 0.254) (layer B.Cu) (net 26) (tstamp 56060B8C)) + (via (at 60.071 126.95936) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 26)) + (segment (start 62.02172 126.95936) (end 60.071 126.95936) (width 0.254) (layer F.Cu) (net 26) (tstamp 56060B8A)) + (segment (start 62.27572 127.21336) (end 62.02172 126.95936) (width 0.254) (layer F.Cu) (net 26) (tstamp 56060B89)) + (segment (start 48.2774 133.4266) (end 50.79452 133.4266) (width 0.254) (layer F.Cu) (net 31)) + (segment (start 64.59732 125.35912) (end 65.63568 125.35912) (width 0.254) (layer F.Cu) (net 31) (tstamp 5608A86D)) + (segment (start 64.4906 125.46584) (end 64.59732 125.35912) (width 0.254) (layer F.Cu) (net 31) (tstamp 5608A86C)) + (segment (start 64.4906 126.17196) (end 64.4906 125.46584) (width 0.254) (layer F.Cu) (net 31) (tstamp 5608A86B)) + (segment (start 64.75984 126.4412) (end 64.4906 126.17196) (width 0.254) (layer F.Cu) (net 31) (tstamp 5608A869)) + (segment (start 64.75984 128.1176) (end 64.75984 126.4412) (width 0.254) (layer F.Cu) (net 31) (tstamp 5608A863)) + (segment (start 64.69888 128.17856) (end 64.75984 128.1176) (width 0.254) (layer F.Cu) (net 31) (tstamp 5608A861)) + (segment (start 64.69888 129.09296) (end 64.69888 128.17856) (width 0.254) (layer F.Cu) (net 31) (tstamp 5608A859)) + (segment (start 63.79972 129.99212) (end 64.69888 129.09296) (width 0.254) (layer F.Cu) (net 31) (tstamp 5608A858)) + (segment (start 61.07684 129.99212) (end 63.79972 129.99212) (width 0.254) (layer F.Cu) (net 31) (tstamp 5608A857)) + (segment (start 60.8584 130.21056) (end 61.07684 129.99212) (width 0.254) (layer F.Cu) (net 31) (tstamp 5608A856)) + (via (at 60.8584 130.21056) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 31)) + (segment (start 60.8584 130.31216) (end 60.8584 130.21056) (width 0.254) (layer B.Cu) (net 31) (tstamp 5608A854)) + (segment (start 58.44032 132.73024) (end 60.8584 130.31216) (width 0.254) (layer B.Cu) (net 31) (tstamp 5608A853)) + (via (at 58.44032 132.73024) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 31)) + (segment (start 54.47792 132.73024) (end 58.44032 132.73024) (width 0.254) (layer F.Cu) (net 31) (tstamp 5608A849)) + (segment (start 54.19344 133.01472) (end 54.47792 132.73024) (width 0.254) (layer F.Cu) (net 31) (tstamp 5608A848)) + (via (at 54.19344 133.01472) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 31)) + (segment (start 51.2064 133.01472) (end 54.19344 133.01472) (width 0.254) (layer B.Cu) (net 31) (tstamp 5608A845)) + (segment (start 50.94224 133.27888) (end 51.2064 133.01472) (width 0.254) (layer B.Cu) (net 31) (tstamp 5608A844)) + (via (at 50.94224 133.27888) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 31)) + (segment (start 50.79452 133.4266) (end 50.94224 133.27888) (width 0.254) (layer F.Cu) (net 31) (tstamp 5608A841)) + (segment (start 40.12736 135.24926) (end 41.74678 135.24926) (width 0.254) (layer F.Cu) (net 33)) + (segment (start 45.83664 135.0266) (end 48.2774 135.0266) (width 0.254) (layer F.Cu) (net 33) (tstamp 560602B1)) + (segment (start 45.3263 135.53694) (end 45.83664 135.0266) (width 0.254) (layer F.Cu) (net 33) (tstamp 560602B0)) + (via (at 45.3263 135.53694) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 33)) + (segment (start 42.08018 135.53694) (end 45.3263 135.53694) (width 0.254) (layer B.Cu) (net 33) (tstamp 560602AE)) + (segment (start 42.05732 135.5598) (end 42.08018 135.53694) (width 0.254) (layer B.Cu) (net 33) (tstamp 560602AD)) + (via (at 42.05732 135.5598) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 33)) + (segment (start 41.74678 135.24926) (end 42.05732 135.5598) (width 0.254) (layer F.Cu) (net 33) (tstamp 560602AB)) + (segment (start 40.12736 135.89926) (end 41.50524 135.89926) (width 0.254) (layer F.Cu) (net 34)) + (segment (start 46.31934 135.8266) (end 48.2774 135.8266) (width 0.254) (layer F.Cu) (net 34) (tstamp 560602BA)) + (segment (start 45.4533 136.69264) (end 46.31934 135.8266) (width 0.254) (layer F.Cu) (net 34) (tstamp 560602B9)) + (via (at 45.4533 136.69264) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 34)) + (segment (start 42.29862 136.69264) (end 45.4533 136.69264) (width 0.254) (layer B.Cu) (net 34) (tstamp 560602B7)) + (segment (start 42.09288 136.4869) (end 42.29862 136.69264) (width 0.254) (layer B.Cu) (net 34) (tstamp 560602B6)) + (via (at 42.09288 136.4869) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 34)) + (segment (start 41.50524 135.89926) (end 42.09288 136.4869) (width 0.254) (layer F.Cu) (net 34) (tstamp 560602B4)) + (segment (start 48.2774 136.6266) (end 50.37328 136.6266) (width 0.254) (layer F.Cu) (net 35)) + (segment (start 71.35044 147.35232) (end 72.4789 147.35232) (width 0.254) (layer F.Cu) (net 35) (tstamp 56060DD2)) + (segment (start 71.24192 147.2438) (end 71.35044 147.35232) (width 0.254) (layer F.Cu) (net 35) (tstamp 56060DD1)) + (via (at 71.24192 147.2438) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 35)) + (segment (start 70.4342 147.2438) (end 71.24192 147.2438) (width 0.254) (layer B.Cu) (net 35) (tstamp 56060DCF)) + (segment (start 69.09308 145.90268) (end 70.4342 147.2438) (width 0.254) (layer B.Cu) (net 35) (tstamp 56060DCC)) + (segment (start 66.77152 145.90268) (end 69.09308 145.90268) (width 0.254) (layer B.Cu) (net 35) (tstamp 56060DCB)) + (segment (start 66.49212 145.62328) (end 66.77152 145.90268) (width 0.254) (layer B.Cu) (net 35) (tstamp 56060DCA)) + (segment (start 66.49212 145.15084) (end 66.49212 145.62328) (width 0.254) (layer B.Cu) (net 35) (tstamp 56060DC9)) + (segment (start 58.80608 137.4648) (end 66.49212 145.15084) (width 0.254) (layer B.Cu) (net 35) (tstamp 56060DC7)) + (segment (start 51.21148 137.4648) (end 58.80608 137.4648) (width 0.254) (layer B.Cu) (net 35) (tstamp 56060DC6)) + (segment (start 51.09972 137.35304) (end 51.21148 137.4648) (width 0.254) (layer B.Cu) (net 35) (tstamp 56060DC5)) + (via (at 51.09972 137.35304) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 35)) + (segment (start 50.37328 136.6266) (end 51.09972 137.35304) (width 0.254) (layer F.Cu) (net 35) (tstamp 56060DC3)) + (segment (start 48.2774 137.4266) (end 50.0506 137.4266) (width 0.254) (layer F.Cu) (net 36)) + (segment (start 68.83216 147.08816) (end 70.00494 147.08816) (width 0.254) (layer F.Cu) (net 36) (tstamp 56060DC0)) + (segment (start 68.81368 147.10664) (end 68.83216 147.08816) (width 0.254) (layer F.Cu) (net 36) (tstamp 56060DBF)) + (via (at 68.81368 147.10664) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 36)) + (segment (start 67.9196 147.10664) (end 68.81368 147.10664) (width 0.254) (layer B.Cu) (net 36) (tstamp 56060DBD)) + (segment (start 67.21856 146.4056) (end 67.9196 147.10664) (width 0.254) (layer B.Cu) (net 36) (tstamp 56060DBC)) + (segment (start 65.7352 146.4056) (end 67.21856 146.4056) (width 0.254) (layer B.Cu) (net 36) (tstamp 56060DBB)) + (segment (start 65.405 146.0754) (end 65.7352 146.4056) (width 0.254) (layer B.Cu) (net 36) (tstamp 56060DBA)) + (segment (start 65.405 145.12544) (end 65.405 146.0754) (width 0.254) (layer B.Cu) (net 36) (tstamp 56060DB9)) + (segment (start 58.30316 138.0236) (end 65.405 145.12544) (width 0.254) (layer B.Cu) (net 36) (tstamp 56060DB7)) + (segment (start 50.70856 138.0236) (end 58.30316 138.0236) (width 0.254) (layer B.Cu) (net 36) (tstamp 56060DB6)) + (segment (start 50.67808 138.05408) (end 50.70856 138.0236) (width 0.254) (layer B.Cu) (net 36) (tstamp 56060DB5)) + (via (at 50.67808 138.05408) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 36)) + (segment (start 50.0506 137.4266) (end 50.67808 138.05408) (width 0.254) (layer F.Cu) (net 36) (tstamp 56060DB3)) + (segment (start 48.2774 139.8266) (end 49.57612 139.8266) (width 0.254) (layer F.Cu) (net 37)) + (segment (start 66.21596 147.04752) (end 67.4497 147.04752) (width 0.254) (layer F.Cu) (net 37) (tstamp 56060DB0)) + (segment (start 66.21272 147.05076) (end 66.21596 147.04752) (width 0.254) (layer F.Cu) (net 37) (tstamp 56060DAF)) + (via (at 66.21272 147.05076) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 37)) + (segment (start 65.03924 147.05076) (end 66.21272 147.05076) (width 0.254) (layer B.Cu) (net 37) (tstamp 56060DAB)) + (segment (start 64.20104 146.21256) (end 65.03924 147.05076) (width 0.254) (layer B.Cu) (net 37) (tstamp 56060DA8)) + (segment (start 64.20104 144.89684) (end 64.20104 146.21256) (width 0.254) (layer B.Cu) (net 37) (tstamp 56060DA7)) + (segment (start 58.08472 138.78052) (end 64.20104 144.89684) (width 0.254) (layer B.Cu) (net 37) (tstamp 56060DA3)) + (segment (start 50.6222 138.78052) (end 58.08472 138.78052) (width 0.254) (layer B.Cu) (net 37) (tstamp 56060DA2)) + (segment (start 49.98212 139.4206) (end 50.6222 138.78052) (width 0.254) (layer B.Cu) (net 37) (tstamp 56060DA1)) + (via (at 49.98212 139.4206) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 37)) + (segment (start 49.57612 139.8266) (end 49.98212 139.4206) (width 0.254) (layer F.Cu) (net 37) (tstamp 56060D9F)) + (segment (start 48.2774 140.6266) (end 49.73116 140.6266) (width 0.254) (layer F.Cu) (net 38)) + (segment (start 63.79902 147.00942) (end 64.78524 147.00942) (width 0.254) (layer F.Cu) (net 38) (tstamp 56060D9C)) + (segment (start 63.11392 146.32432) (end 63.79902 147.00942) (width 0.254) (layer F.Cu) (net 38) (tstamp 56060D9B)) + (via (at 63.11392 146.32432) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 38)) + (segment (start 63.11392 144.79016) (end 63.11392 146.32432) (width 0.254) (layer B.Cu) (net 38) (tstamp 56060D96)) + (segment (start 57.912 139.58824) (end 63.11392 144.79016) (width 0.254) (layer B.Cu) (net 38) (tstamp 56060D92)) + (segment (start 50.99304 139.58824) (end 57.912 139.58824) (width 0.254) (layer B.Cu) (net 38) (tstamp 56060D91)) + (segment (start 50.88128 139.47648) (end 50.99304 139.58824) (width 0.254) (layer B.Cu) (net 38) (tstamp 56060D90)) + (via (at 50.88128 139.47648) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 38)) + (segment (start 49.73116 140.6266) (end 50.88128 139.47648) (width 0.254) (layer F.Cu) (net 38) (tstamp 56060D87)) + (segment (start 57.71896 126.25832) (end 57.54624 126.25832) (width 0.254) (layer F.Cu) (net 39)) + (segment (start 57.54624 126.25832) (end 55.84952 127.95504) (width 0.254) (layer F.Cu) (net 39) (tstamp 5608A805)) + (segment (start 50.1274 141.0076) (end 50.1274 142.4766) (width 0.254) (layer F.Cu) (net 39) (tstamp 5608A81E)) + (segment (start 50.14976 140.98524) (end 50.1274 141.0076) (width 0.254) (layer F.Cu) (net 39) (tstamp 5608A81C)) + (segment (start 50.76444 140.98524) (end 50.14976 140.98524) (width 0.254) (layer F.Cu) (net 39) (tstamp 5608A818)) + (segment (start 51.7398 140.00988) (end 50.76444 140.98524) (width 0.254) (layer F.Cu) (net 39) (tstamp 5608A815)) + (segment (start 51.7398 132.53212) (end 51.7398 140.00988) (width 0.254) (layer F.Cu) (net 39) (tstamp 5608A813)) + (segment (start 51.55184 132.34416) (end 51.7398 132.53212) (width 0.254) (layer F.Cu) (net 39) (tstamp 5608A812)) + (via (at 51.55184 132.34416) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 39)) + (segment (start 51.55184 129.68224) (end 51.55184 132.34416) (width 0.254) (layer B.Cu) (net 39) (tstamp 5608A80F)) + (segment (start 51.87696 129.35712) (end 51.55184 129.68224) (width 0.254) (layer B.Cu) (net 39) (tstamp 5608A80E)) + (segment (start 53.60924 129.35712) (end 51.87696 129.35712) (width 0.254) (layer B.Cu) (net 39) (tstamp 5608A80B)) + (segment (start 55.01132 127.95504) (end 53.60924 129.35712) (width 0.254) (layer B.Cu) (net 39) (tstamp 5608A80A)) + (via (at 55.01132 127.95504) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 39)) + (segment (start 55.84952 127.95504) (end 55.01132 127.95504) (width 0.254) (layer F.Cu) (net 39) (tstamp 5608A807)) + (segment (start 58.2168 126.75616) (end 57.71896 126.25832) (width 0.254) (layer B.Cu) (net 39) (tstamp 560606AE)) + (segment (start 50.9274 142.4766) (end 50.9274 141.7316) (width 0.254) (layer F.Cu) (net 40)) + (segment (start 50.9274 141.7316) (end 52.49672 140.16228) (width 0.254) (layer F.Cu) (net 40) (tstamp 5608A874)) + (segment (start 56.77408 127.85344) (end 55.17896 126.25832) (width 0.254) (layer B.Cu) (net 40) (tstamp 5608A895)) + (segment (start 57.66308 127.85344) (end 56.77408 127.85344) (width 0.254) (layer B.Cu) (net 40) (tstamp 5608A894)) + (segment (start 58.05424 128.2446) (end 57.66308 127.85344) (width 0.254) (layer B.Cu) (net 40) (tstamp 5608A892)) + (segment (start 58.05424 129.5908) (end 58.05424 128.2446) (width 0.254) (layer B.Cu) (net 40) (tstamp 5608A891)) + (segment (start 57.21604 130.429) (end 58.05424 129.5908) (width 0.254) (layer B.Cu) (net 40) (tstamp 5608A890)) + (segment (start 57.21604 133.49732) (end 57.21604 130.429) (width 0.254) (layer B.Cu) (net 40) (tstamp 5608A88E)) + (segment (start 57.38368 133.66496) (end 57.21604 133.49732) (width 0.254) (layer B.Cu) (net 40) (tstamp 5608A88D)) + (via (at 57.38368 133.66496) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 40)) + (segment (start 57.38368 134.4676) (end 57.38368 133.66496) (width 0.254) (layer F.Cu) (net 40) (tstamp 5608A885)) + (segment (start 55.26532 136.58596) (end 57.38368 134.4676) (width 0.254) (layer F.Cu) (net 40) (tstamp 5608A884)) + (via (at 55.26532 136.58596) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 40)) + (segment (start 52.55768 136.58596) (end 55.26532 136.58596) (width 0.254) (layer B.Cu) (net 40) (tstamp 5608A882)) + (segment (start 52.49164 136.652) (end 52.55768 136.58596) (width 0.254) (layer B.Cu) (net 40) (tstamp 5608A881)) + (via (at 52.49164 136.652) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 40)) + (segment (start 52.49672 136.65708) (end 52.49164 136.652) (width 0.254) (layer F.Cu) (net 40) (tstamp 5608A87F)) + (segment (start 52.49672 140.16228) (end 52.49672 136.65708) (width 0.254) (layer F.Cu) (net 40) (tstamp 5608A876)) + (segment (start 50.9274 142.4766) (end 50.9274 141.69604) (width 0.254) (layer F.Cu) (net 40)) + (segment (start 50.9274 142.4766) (end 50.9274 141.71636) (width 0.254) (layer F.Cu) (net 40)) + (segment (start 48.4175 152.1206) (end 48.68672 152.1206) (width 0.254) (layer F.Cu) (net 44)) + (segment (start 48.68672 152.1206) (end 50.82032 149.987) (width 0.254) (layer F.Cu) (net 44) (tstamp 5608A090)) + (segment (start 56.5274 144.01068) (end 56.5274 142.4766) (width 0.254) (layer F.Cu) (net 44) (tstamp 5608A09D)) + (segment (start 56.50992 144.02816) (end 56.5274 144.01068) (width 0.254) (layer F.Cu) (net 44) (tstamp 5608A09C)) + (via (at 56.50992 144.02816) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 44)) + (segment (start 56.50992 144.96288) (end 56.50992 144.02816) (width 0.254) (layer B.Cu) (net 44) (tstamp 5608A09A)) + (segment (start 54.4576 147.0152) (end 56.50992 144.96288) (width 0.254) (layer B.Cu) (net 44) (tstamp 5608A098)) + (segment (start 52.36464 147.0152) (end 54.4576 147.0152) (width 0.254) (layer B.Cu) (net 44) (tstamp 5608A097)) + (segment (start 52.20208 147.17776) (end 52.36464 147.0152) (width 0.254) (layer B.Cu) (net 44) (tstamp 5608A096)) + (via (at 52.20208 147.17776) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 44)) + (segment (start 50.82032 148.55952) (end 52.20208 147.17776) (width 0.254) (layer F.Cu) (net 44) (tstamp 5608A093)) + (segment (start 50.82032 149.987) (end 50.82032 148.55952) (width 0.254) (layer F.Cu) (net 44) (tstamp 5608A091)) + (segment (start 48.4175 153.3906) (end 48.4175 152.1206) (width 0.254) (layer F.Cu) (net 44)) + (segment (start 42.40022 147.27244) (end 44.32484 147.27244) (width 0.254) (layer F.Cu) (net 46)) + (segment (start 58.1274 141.21588) (end 58.1274 142.4766) (width 0.254) (layer F.Cu) (net 46) (tstamp 56060B4F)) + (segment (start 57.95264 141.04112) (end 58.1274 141.21588) (width 0.254) (layer F.Cu) (net 46) (tstamp 56060B4E)) + (via (at 57.95264 141.04112) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 46)) + (segment (start 57.03824 140.12672) (end 57.95264 141.04112) (width 0.254) (layer B.Cu) (net 46) (tstamp 56060B4C)) + (segment (start 52.50688 140.12672) (end 57.03824 140.12672) (width 0.254) (layer B.Cu) (net 46) (tstamp 56060B4A)) + (segment (start 48.82896 143.80464) (end 52.50688 140.12672) (width 0.254) (layer B.Cu) (net 46) (tstamp 56060B49)) + (via (at 48.82896 143.80464) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 46)) + (segment (start 47.5488 143.80464) (end 48.82896 143.80464) (width 0.254) (layer F.Cu) (net 46) (tstamp 56060B46)) + (segment (start 45.55744 145.796) (end 47.5488 143.80464) (width 0.254) (layer F.Cu) (net 46) (tstamp 56060B45)) + (via (at 45.55744 145.796) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 46)) + (segment (start 45.55744 146.03984) (end 45.55744 145.796) (width 0.254) (layer B.Cu) (net 46) (tstamp 56060B43)) + (segment (start 44.5008 147.09648) (end 45.55744 146.03984) (width 0.254) (layer B.Cu) (net 46) (tstamp 56060B42)) + (via (at 44.5008 147.09648) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 46)) + (segment (start 44.32484 147.27244) (end 44.5008 147.09648) (width 0.254) (layer F.Cu) (net 46) (tstamp 56060B40)) + (segment (start 58.19648 142.40752) (end 58.1274 142.4766) (width 0.254) (layer F.Cu) (net 46) (tstamp 5606037F)) + (segment (start 41.27176 149.0091) (end 41.27176 148.4009) (width 0.25) (layer F.Cu) (net 46)) + (segment (start 41.27176 148.4009) (end 42.40022 147.27244) (width 0.25) (layer F.Cu) (net 46) (tstamp 560600FB)) + (segment (start 41.32764 151.10206) (end 41.32764 149.06498) (width 0.25) (layer F.Cu) (net 46)) + (segment (start 41.32764 149.06498) (end 41.27176 149.0091) (width 0.25) (layer F.Cu) (net 46) (tstamp 560600F8)) + (segment (start 42.48404 152.83872) (end 41.72896 152.83872) (width 0.25) (layer F.Cu) (net 46)) + (segment (start 41.32764 152.4374) (end 41.32764 151.10206) (width 0.25) (layer F.Cu) (net 46) (tstamp 560600F5)) + (segment (start 41.72896 152.83872) (end 41.32764 152.4374) (width 0.25) (layer F.Cu) (net 46) (tstamp 560600F4)) + (segment (start 64.897 153.99512) (end 64.897 151.59298) (width 0.254) (layer F.Cu) (net 48)) + (segment (start 64.897 151.59298) (end 64.82334 151.51932) (width 0.254) (layer F.Cu) (net 48) (tstamp 56060B3B)) + (segment (start 67.437 151.68442) (end 67.4878 151.63362) (width 0.254) (layer F.Cu) (net 49) (tstamp 56060B38)) + (segment (start 67.437 153.99512) (end 67.437 151.68442) (width 0.254) (layer F.Cu) (net 49)) + (segment (start 69.977 153.99512) (end 69.977 151.6641) (width 0.254) (layer F.Cu) (net 50)) + (segment (start 69.977 151.6641) (end 70.08114 151.55996) (width 0.254) (layer F.Cu) (net 50) (tstamp 56060B35)) + (segment (start 72.517 153.99512) (end 72.517 151.70982) (width 0.254) (layer F.Cu) (net 51)) + (via (at 64.11976 127.28448) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 52)) + (segment (start 62.93104 128.4732) (end 64.11976 127.28448) (width 0.254) (layer F.Cu) (net 52) (tstamp 56060D37)) + (segment (start 62.27572 128.4732) (end 62.93104 128.4732) (width 0.254) (layer F.Cu) (net 52)) + (segment (start 65.71488 125.68936) (end 65.71488 122.57024) (width 0.254) (layer B.Cu) (net 52) (tstamp 56060D3C)) + (segment (start 64.11976 127.28448) (end 65.71488 125.68936) (width 0.254) (layer B.Cu) (net 52) (tstamp 56060D3B)) + (segment (start 60.24372 128.4732) (end 61.1124 128.4732) (width 0.254) (layer F.Cu) (net 53)) + (segment (start 61.42736 124.31776) (end 63.17488 122.57024) (width 0.254) (layer B.Cu) (net 53) (tstamp 56060B9F)) + (segment (start 61.42736 128.15824) (end 61.42736 124.31776) (width 0.254) (layer B.Cu) (net 53) (tstamp 56060B9E)) + (segment (start 61.13272 128.45288) (end 61.42736 128.15824) (width 0.254) (layer B.Cu) (net 53) (tstamp 56060B9D)) + (via (at 61.13272 128.45288) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 53)) + (segment (start 61.1124 128.4732) (end 61.13272 128.45288) (width 0.254) (layer F.Cu) (net 53) (tstamp 56060B9B)) + (segment (start 42.48404 154.33872) (end 43.38758 154.33872) (width 0.25) (layer F.Cu) (net 54)) + (segment (start 46.8757 150.8506) (end 48.4175 150.8506) (width 0.25) (layer F.Cu) (net 54) (tstamp 5606011B)) + (segment (start 43.38758 154.33872) (end 46.8757 150.8506) (width 0.25) (layer F.Cu) (net 54) (tstamp 5606011A)) + (segment (start 40.9836 154.28976) (end 42.43508 154.28976) (width 0.25) (layer F.Cu) (net 54)) + (segment (start 42.43508 154.28976) (end 42.48404 154.33872) (width 0.25) (layer F.Cu) (net 54) (tstamp 560600F1)) + (segment (start 42.40022 145.77244) (end 44.34516 145.77244) (width 0.25) (layer F.Cu) (net 55)) + (segment (start 46.88332 148.3106) (end 48.4175 148.3106) (width 0.25) (layer F.Cu) (net 55) (tstamp 56060121)) + (segment (start 44.34516 145.77244) (end 46.88332 148.3106) (width 0.25) (layer F.Cu) (net 55) (tstamp 5606011F)) + (segment (start 40.96836 145.48104) (end 42.10882 145.48104) (width 0.25) (layer F.Cu) (net 55)) + (segment (start 42.10882 145.48104) (end 42.40022 145.77244) (width 0.25) (layer F.Cu) (net 55) (tstamp 560600FF)) + (segment (start 72.4789 148.85232) (end 72.4789 150.17172) (width 0.254) (layer F.Cu) (net 56)) + (segment (start 72.4789 150.17172) (end 72.517 150.20982) (width 0.254) (layer F.Cu) (net 56) (tstamp 5606084E)) + (segment (start 70.00494 148.58816) (end 70.00494 149.98376) (width 0.254) (layer F.Cu) (net 57)) + (segment (start 70.00494 149.98376) (end 70.08114 150.05996) (width 0.254) (layer F.Cu) (net 57) (tstamp 56060848)) + (segment (start 67.4497 148.54752) (end 67.4497 150.09552) (width 0.254) (layer F.Cu) (net 58)) + (segment (start 67.4497 150.09552) (end 67.4878 150.13362) (width 0.254) (layer F.Cu) (net 58) (tstamp 56060842)) + (segment (start 64.78524 148.50942) (end 64.78524 149.98122) (width 0.254) (layer F.Cu) (net 59)) + (segment (start 64.78524 149.98122) (end 64.82334 150.01932) (width 0.254) (layer F.Cu) (net 59) (tstamp 5606083F)) + (segment (start 58.6733 146.0119) (end 58.6733 148.5519) (width 0.58) (layer F.Cu) (net 60)) + (segment (start 58.6733 148.5519) (end 58.6987 148.5773) (width 0.58) (layer F.Cu) (net 60) (tstamp 560899B0)) + (segment (start 58.6733 148.5519) (end 58.6987 148.5773) (width 0.254) (layer F.Cu) (net 60) (tstamp 560608A5)) + (segment (start 53.8175 152.1206) (end 55.87492 152.1206) (width 0.254) (layer F.Cu) (net 61)) + (segment (start 60.2234 147.20316) (end 60.2234 147.2184) (width 0.254) (layer F.Cu) (net 61) (tstamp 56089A5C)) + (segment (start 60.19292 147.20316) (end 60.2234 147.20316) (width 0.254) (layer F.Cu) (net 61) (tstamp 56089A5B)) + (via (at 60.19292 147.20316) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 61)) + (segment (start 60.19292 147.5232) (end 60.19292 147.20316) (width 0.254) (layer B.Cu) (net 61) (tstamp 56089A57)) + (segment (start 57.87644 149.83968) (end 60.19292 147.5232) (width 0.254) (layer B.Cu) (net 61) (tstamp 56089A56)) + (via (at 57.87644 149.83968) (size 0.6) (drill 0.4) (layers F.Cu B.Cu) (net 61)) + (segment (start 57.87644 150.11908) (end 57.87644 149.83968) (width 0.254) (layer F.Cu) (net 61) (tstamp 56089A43)) + (segment (start 55.87492 152.1206) (end 57.87644 150.11908) (width 0.254) (layer F.Cu) (net 61) (tstamp 56089A2F)) + (segment (start 60.2234 147.2184) (end 60.2234 146.062) (width 0.58) (layer F.Cu) (net 61)) + (segment (start 60.2234 146.062) (end 60.1733 146.0119) (width 0.58) (layer F.Cu) (net 61) (tstamp 560899AD)) + (segment (start 53.8175 153.3906) (end 53.8175 152.1206) (width 0.254) (layer F.Cu) (net 61)) + (segment (start 53.8175 152.1206) (end 53.8937 152.0444) (width 0.254) (layer F.Cu) (net 61) (tstamp 56060911)) + (segment (start 60.2234 147.2184) (end 60.1733 147.1683) (width 0.254) (layer F.Cu) (net 61) (tstamp 56060917)) + (segment (start 60.1733 147.1683) (end 60.1733 146.0119) (width 0.254) (layer F.Cu) (net 61) (tstamp 56060918)) + (segment (start 63.14624 139.81684) (end 63.14624 137.86104) (width 0.254) (layer F.Cu) (net 62)) + (segment (start 63.14624 137.86104) (end 63.10814 137.82294) (width 0.254) (layer F.Cu) (net 62) (tstamp 5606099E)) + (segment (start 64.60814 141.98854) (end 64.60814 139.85494) (width 0.254) (layer F.Cu) (net 63)) + (segment (start 64.60814 139.85494) (end 64.64624 139.81684) (width 0.254) (layer F.Cu) (net 63) (tstamp 5606099B)) + +) diff --git a/PCB/WOT/Tinylab_proto1.xml b/PCB/WOT/Tinylab_proto1.xml new file mode 100644 index 00000000..e7f4ba84 --- /dev/null +++ b/PCB/WOT/Tinylab_proto1.xml @@ -0,0 +1,1045 @@ +<?xml version="1.0" encoding="UTF-8"?> +<export version="D"> + <design> + <source>C:/Users/Esposch/Documents/KiCAD/Tinylab_proto1/Tinylab_proto1.sch</source> + <date>18/12/2015 11:21:37 AM</date> + <tool>Eeschema (2015-08-05 BZR 6055, Git fa29c62)-product</tool> + <sheet number="1" name="/" tstamps="/"> + <title_block> + <title/> + <company/> + <rev/> + <date/> + <source>Tinylab_proto1.sch</source> + <comment number="1" value=""/> + <comment number="2" value=""/> + <comment number="3" value=""/> + <comment number="4" value=""/> + </title_block> + </sheet> + </design> + <components> + <comp ref="U2"> + <value>LM324</value> + <footprint>Housings_SOIC:SOIC-14_3.9x8.7mm_Pitch1.27mm</footprint> + <libsource lib="linear" part="LM324"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>55CA87E2</tstamp> + </comp> + <comp ref="IC1"> + <value>ATXMEGA16A4U-A</value> + <footprint>Housings_QFP:LQFP-44_10x10mm_Pitch0.8mm</footprint> + <libsource lib="atmel" part="ATXMEGA16A4U-A"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>55CA8F25</tstamp> + </comp> + <comp ref="P2"> + <value>USB_OTG</value> + <footprint>Connect:USB_Micro-B</footprint> + <libsource lib="conn" part="USB_OTG"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>55CA90D2</tstamp> + </comp> + <comp ref="U1"> + <value>78L05</value> + <footprint>SMD:SOT-23-3</footprint> + <libsource lib="regul" part="78L05"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>55CA99FA</tstamp> + </comp> + <comp ref="R1"> + <value>R</value> + <footprint>Resistors_SMD:R_0603</footprint> + <libsource lib="device" part="R"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>55CAAB95</tstamp> + </comp> + <comp ref="R3"> + <value>R</value> + <footprint>Resistors_SMD:R_0603</footprint> + <libsource lib="device" part="R"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>55CAABF4</tstamp> + </comp> + <comp ref="R5"> + <value>R</value> + <footprint>Resistors_SMD:R_0603</footprint> + <libsource lib="device" part="R"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>55CAAC5F</tstamp> + </comp> + <comp ref="R6"> + <value>R</value> + <footprint>Resistors_SMD:R_0603</footprint> + <libsource lib="device" part="R"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>55CAACD2</tstamp> + </comp> + <comp ref="R4"> + <value>R</value> + <footprint>Resistors_SMD:R_0603</footprint> + <libsource lib="device" part="R"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>55CAAD11</tstamp> + </comp> + <comp ref="R2"> + <value>R</value> + <footprint>Resistors_SMD:R_0603</footprint> + <libsource lib="device" part="R"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>55CAAD4C</tstamp> + </comp> + <comp ref="P1"> + <value>SCOPE_IN</value> + <footprint>Pin_Headers:Pin_Header_Straight_1x04</footprint> + <libsource lib="conn" part="CONN_01X04"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>55CAB35C</tstamp> + </comp> + <comp ref="C2"> + <value>C</value> + <footprint>Capacitors_SMD:C_0603</footprint> + <libsource lib="device" part="C_Small"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>55CAB4DE</tstamp> + </comp> + <comp ref="C1"> + <value>C</value> + <footprint>Capacitors_SMD:C_0603</footprint> + <libsource lib="device" part="C_Small"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>55CAB611</tstamp> + </comp> + <comp ref="C3"> + <value>C_Small</value> + <footprint>Capacitors_SMD:C_0603</footprint> + <libsource lib="device" part="C_Small"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>55CB13E1</tstamp> + </comp> + <comp ref="C4"> + <value>C_Small</value> + <footprint>Capacitors_SMD:C_0603</footprint> + <libsource lib="device" part="C_Small"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>55CB147C</tstamp> + </comp> + <comp ref="R15"> + <value>R</value> + <footprint>Resistors_SMD:R_0603</footprint> + <libsource lib="device" part="R"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>55CB4680</tstamp> + </comp> + <comp ref="C7"> + <value>C</value> + <footprint>Capacitors_SMD:C_0603</footprint> + <libsource lib="device" part="C_Small"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>55CB630B</tstamp> + </comp> + <comp ref="R16"> + <value>R</value> + <footprint>Resistors_SMD:R_0603</footprint> + <libsource lib="device" part="R"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>55CB9020</tstamp> + </comp> + <comp ref="R11"> + <value>R</value> + <footprint>Resistors_SMD:R_0603</footprint> + <libsource lib="device" part="R"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>55CBCD2A</tstamp> + </comp> + <comp ref="R7"> + <value>R</value> + <footprint>Resistors_SMD:R_0603</footprint> + <libsource lib="device" part="R"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>55CBCDA5</tstamp> + </comp> + <comp ref="R13"> + <value>R</value> + <footprint>Resistors_SMD:R_0603</footprint> + <libsource lib="device" part="R"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>55CBE0F4</tstamp> + </comp> + <comp ref="R9"> + <value>R</value> + <footprint>Resistors_SMD:R_0603</footprint> + <libsource lib="device" part="R"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>55CBE16B</tstamp> + </comp> + <comp ref="R14"> + <value>R</value> + <footprint>Resistors_SMD:R_0603</footprint> + <libsource lib="device" part="R"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>55CBE21C</tstamp> + </comp> + <comp ref="R10"> + <value>R</value> + <footprint>Resistors_SMD:R_0603</footprint> + <libsource lib="device" part="R"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>55CBE2C7</tstamp> + </comp> + <comp ref="R12"> + <value>R</value> + <footprint>Resistors_SMD:R_0603</footprint> + <libsource lib="device" part="R"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>55CBE362</tstamp> + </comp> + <comp ref="R8"> + <value>R</value> + <footprint>Resistors_SMD:R_0603</footprint> + <libsource lib="device" part="R"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>55CBE401</tstamp> + </comp> + <comp ref="P3"> + <value>DIG_OUT</value> + <footprint>Pin_Headers:Pin_Header_Straight_1x04</footprint> + <libsource lib="conn" part="CONN_01X04"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>55CBF4D5</tstamp> + </comp> + <comp ref="P7"> + <value>HVO</value> + <footprint>Pin_Headers:Pin_Header_Straight_1x02</footprint> + <libsource lib="conn" part="CONN_01X02"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>55CC540F</tstamp> + </comp> + <comp ref="C5"> + <value>C_Small</value> + <footprint>Capacitors_SMD:C_0603</footprint> + <libsource lib="device" part="C_Small"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>55D60181</tstamp> + </comp> + <comp ref="U3"> + <value>DMN63D8LDW</value> + <footprint>Footprints:SOT363</footprint> + <libsource lib="ESPO_PART" part="DMN63D8LDW"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>55D6ACFD</tstamp> + </comp> + <comp ref="P8"> + <value>DIG_IN</value> + <footprint>Pin_Headers:Pin_Header_Straight_1x02</footprint> + <libsource lib="conn" part="CONN_01X02"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>55D6DB77</tstamp> + </comp> + <comp ref="F1"> + <value>F_Small</value> + <footprint>SMD:SMD_1206</footprint> + <libsource lib="device" part="F_Small"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>55D739F3</tstamp> + </comp> + <comp ref="C9"> + <value>C_Small</value> + <footprint>Capacitors_SMD:C_0603</footprint> + <libsource lib="device" part="C_Small"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>55D75F49</tstamp> + </comp> + <comp ref="P5"> + <value>CONN_01X03</value> + <footprint>Pin_Headers:Pin_Header_Straight_1x03</footprint> + <libsource lib="conn" part="CONN_01X03"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>56065DA8</tstamp> + </comp> + <comp ref="L1"> + <value>INDUCTOR</value> + <footprint>Diodes_ThroughHole:Diode_DO-41_SOD81_Horizontal_RM10</footprint> + <libsource lib="device" part="INDUCTOR"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>5606EE9E</tstamp> + </comp> + <comp ref="D1"> + <value>D_Schottky</value> + <footprint>Diodes_ThroughHole:Diode_DO-41_SOD81_Horizontal_RM10</footprint> + <libsource lib="device" part="D_Schottky"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>5606FDB4</tstamp> + </comp> + <comp ref="C6"> + <value>CP1</value> + <footprint>Capacitors_Elko_ThroughHole:Elko_vert_11.2x6.3mm_RM2.5_CopperClear</footprint> + <libsource lib="device" part="CP1"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>560719D9</tstamp> + </comp> + <comp ref="C8"> + <value>C</value> + <footprint>Capacitors_SMD:C_0603</footprint> + <libsource lib="device" part="C"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>56071A50</tstamp> + </comp> + <comp ref="C12"> + <value>C</value> + <footprint>Capacitors_SMD:C_0603</footprint> + <libsource lib="device" part="C"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>5607355F</tstamp> + </comp> + <comp ref="C11"> + <value>CP1</value> + <footprint>Capacitors_Elko_ThroughHole:Elko_vert_11.2x6.3mm_RM2.5_CopperClear</footprint> + <libsource lib="device" part="CP1"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>560735FE</tstamp> + </comp> + <comp ref="P4"> + <value>CONN_02X02</value> + <footprint>Pin_Headers:Pin_Header_Straight_2x02</footprint> + <libsource lib="conn" part="CONN_02X02"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>56069A87</tstamp> + </comp> + <comp ref="Q1"> + <value>Q_NMOS_GSD</value> + <footprint>SMD:SOT-23-3</footprint> + <libsource lib="device" part="Q_NMOS_GSD"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>5606F6D4</tstamp> + </comp> + <comp ref="C13"> + <value>C</value> + <footprint>Capacitors_SMD:C_0603</footprint> + <libsource lib="device" part="C"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>5608B4BE</tstamp> + </comp> + <comp ref="C10"> + <value>C</value> + <footprint>Capacitors_SMD:C_0603</footprint> + <libsource lib="device" part="C"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>5609699F</tstamp> + </comp> + <comp ref="R17"> + <value>R</value> + <libsource lib="device" part="R"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>566DE721</tstamp> + </comp> + <comp ref="R18"> + <value>R</value> + <libsource lib="device" part="R"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>566DE7E8</tstamp> + </comp> + <comp ref="C14"> + <value>C</value> + <libsource lib="device" part="C_Small"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>566DF655</tstamp> + </comp> + <comp ref="P6"> + <value>CONN_01X04</value> + <libsource lib="conn" part="CONN_01X04"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>566DF832</tstamp> + </comp> + <comp ref="R19"> + <value>R</value> + <libsource lib="device" part="R"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>566E5C29</tstamp> + </comp> + <comp ref="R20"> + <value>R</value> + <libsource lib="device" part="R"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>566E5CBE</tstamp> + </comp> + <comp ref="C15"> + <value>CP1</value> + <libsource lib="device" part="CP1"/> + <sheetpath names="/" tstamps="/"/> + <tstamp>566F5A75</tstamp> + </comp> + </components> + <libparts> + <libpart lib="device" part="C"> + <description>Unpolarized capacitor</description> + <footprints> + <fp>C?</fp> + <fp>C_????_*</fp> + <fp>C_????</fp> + <fp>SMD*_c</fp> + <fp>Capacitor*</fp> + </footprints> + <fields> + <field name="Reference">C</field> + <field name="Value">C</field> + </fields> + <pins> + <pin num="1" name="~" type="passive"/> + <pin num="2" name="~" type="passive"/> + </pins> + </libpart> + <libpart lib="device" part="CP1"> + <description>Polarised capacitor</description> + <footprints> + <fp>SMD*_Pol</fp> + <fp>c_elec*</fp> + <fp>C*elec</fp> + <fp>TantalC*</fp> + <fp>Elko*</fp> + <fp>CP*</fp> + </footprints> + <fields> + <field name="Reference">C</field> + <field name="Value">CP1</field> + </fields> + <pins> + <pin num="1" name="~" type="passive"/> + <pin num="2" name="~" type="passive"/> + </pins> + </libpart> + <libpart lib="device" part="C_Small"> + <description>Unpolarized capacitor</description> + <footprints> + <fp>C?</fp> + <fp>C_????_*</fp> + <fp>C_????</fp> + <fp>SMD*_c</fp> + <fp>Capacitor*</fp> + </footprints> + <fields> + <field name="Reference">C</field> + <field name="Value">C_Small</field> + </fields> + <pins> + <pin num="1" name="~" type="passive"/> + <pin num="2" name="~" type="passive"/> + </pins> + </libpart> + <libpart lib="device" part="D_Schottky"> + <description>Diode schottky</description> + <footprints> + <fp>D-Pak_TO252AA</fp> + <fp>Diode_*</fp> + <fp>*SingleDiode</fp> + <fp>*SingleDiode*</fp> + <fp>*_Diode_*</fp> + </footprints> + <fields> + <field name="Reference">D</field> + <field name="Value">D_Schottky</field> + </fields> + <pins> + <pin num="1" name="K" type="passive"/> + <pin num="2" name="A" type="passive"/> + </pins> + </libpart> + <libpart lib="device" part="F_Small"> + <description>Fuse</description> + <footprints> + <fp>CP*</fp> + <fp>SM*</fp> + </footprints> + <fields> + <field name="Reference">F</field> + <field name="Value">F_Small</field> + </fields> + <pins> + <pin num="1" name="~" type="passive"/> + <pin num="2" name="~" type="passive"/> + </pins> + </libpart> + <libpart lib="device" part="INDUCTOR"> + <fields> + <field name="Reference">L</field> + <field name="Value">INDUCTOR</field> + </fields> + <pins> + <pin num="1" name="1" type="passive"/> + <pin num="2" name="2" type="passive"/> + </pins> + </libpart> + <libpart lib="device" part="Q_NMOS_GSD"> + <description>Transistor N-MOSFET (general)</description> + <fields> + <field name="Reference">Q</field> + <field name="Value">Q_NMOS_GSD</field> + </fields> + <pins> + <pin num="1" name="G" type="input"/> + <pin num="2" name="S" type="passive"/> + <pin num="3" name="D" type="passive"/> + </pins> + </libpart> + <libpart lib="device" part="R"> + <description>Resistor</description> + <footprints> + <fp>R_*</fp> + <fp>Resistor_*</fp> + </footprints> + <fields> + <field name="Reference">R</field> + <field name="Value">R</field> + </fields> + <pins> + <pin num="1" name="~" type="passive"/> + <pin num="2" name="~" type="passive"/> + </pins> + </libpart> + <libpart lib="conn" part="CONN_01X02"> + <footprints> + <fp>Pin_Header_Straight_1X02</fp> + <fp>Pin_Header_Angled_1X02</fp> + <fp>Socket_Strip_Straight_1X02</fp> + <fp>Socket_Strip_Angled_1X02</fp> + </footprints> + <fields> + <field name="Reference">P</field> + <field name="Value">CONN_01X02</field> + </fields> + <pins> + <pin num="1" name="P1" type="passive"/> + <pin num="2" name="P2" type="passive"/> + </pins> + </libpart> + <libpart lib="conn" part="CONN_01X03"> + <footprints> + <fp>Pin_Header_Straight_1X03</fp> + <fp>Pin_Header_Angled_1X03</fp> + <fp>Socket_Strip_Straight_1X03</fp> + <fp>Socket_Strip_Angled_1X03</fp> + </footprints> + <fields> + <field name="Reference">P</field> + <field name="Value">CONN_01X03</field> + </fields> + <pins> + <pin num="1" name="P1" type="passive"/> + <pin num="2" name="P2" type="passive"/> + <pin num="3" name="P3" type="passive"/> + </pins> + </libpart> + <libpart lib="conn" part="CONN_01X04"> + <footprints> + <fp>Pin_Header_Straight_1X04</fp> + <fp>Pin_Header_Angled_1X04</fp> + <fp>Socket_Strip_Straight_1X04</fp> + <fp>Socket_Strip_Angled_1X04</fp> + </footprints> + <fields> + <field name="Reference">P</field> + <field name="Value">CONN_01X04</field> + </fields> + <pins> + <pin num="1" name="P1" type="passive"/> + <pin num="2" name="P2" type="passive"/> + <pin num="3" name="P3" type="passive"/> + <pin num="4" name="P4" type="passive"/> + </pins> + </libpart> + <libpart lib="conn" part="CONN_02X02"> + <footprints> + <fp>Pin_Header_Straight_2X02</fp> + <fp>Pin_Header_Angled_2X02</fp> + <fp>Socket_Strip_Straight_2X02</fp> + <fp>Socket_Strip_Angled_2X02</fp> + </footprints> + <fields> + <field name="Reference">P</field> + <field name="Value">CONN_02X02</field> + </fields> + <pins> + <pin num="1" name="P1" type="passive"/> + <pin num="2" name="P2" type="passive"/> + <pin num="3" name="P3" type="passive"/> + <pin num="4" name="P4" type="passive"/> + </pins> + </libpart> + <libpart lib="conn" part="USB_OTG"> + <description>micro/mini connector</description> + <footprints> + <fp>USB*</fp> + </footprints> + <fields> + <field name="Reference">P</field> + <field name="Value">USB_OTG</field> + </fields> + <pins> + <pin num="1" name="VCC" type="power_out"/> + <pin num="2" name="D-" type="passive"/> + <pin num="3" name="D+" type="passive"/> + <pin num="4" name="ID" type="power_in"/> + <pin num="5" name="GND" type="power_in"/> + <pin num="6" name="shield" type="passive"/> + </pins> + </libpart> + <libpart lib="linear" part="LM2902N"> + <aliases> + <alias>LM324</alias> + <alias>TLC274</alias> + <alias>TL074</alias> + <alias>LM324N</alias> + <alias>LM324AN</alias> + </aliases> + <description>Quad Op amp.</description> + <docs>op_amps/lm324.pdf</docs> + <fields> + <field name="Reference">U</field> + <field name="Value">LM2902N</field> + </fields> + <pins> + <pin num="1" name="~" type="output"/> + <pin num="2" name="-" type="input"/> + <pin num="3" name="+" type="input"/> + <pin num="4" name="V+" type="power_in"/> + <pin num="5" name="+" type="input"/> + <pin num="6" name="-" type="input"/> + <pin num="7" name="~" type="output"/> + <pin num="8" name="~" type="output"/> + <pin num="9" name="-" type="input"/> + <pin num="10" name="+" type="input"/> + <pin num="11" name="V-" type="power_in"/> + <pin num="12" name="+" type="input"/> + <pin num="13" name="-" type="input"/> + <pin num="14" name="~" type="output"/> + </pins> + </libpart> + <libpart lib="regul" part="7805"> + <aliases> + <alias>LM7805</alias> + <alias>LM7812</alias> + <alias>78L05</alias> + </aliases> + <description>Linear Regulator +5V</description> + <docs>regulator\lm78xx.pdf</docs> + <fields> + <field name="Reference">U</field> + <field name="Value">7805</field> + </fields> + <pins> + <pin num="1" name="GND" type="input"/> + <pin num="2" name="VO" type="power_out"/> + <pin num="3" name="VI" type="input"/> + </pins> + </libpart> + <libpart lib="atmel" part="ATXMEGA16A4U-A"> + <aliases> + <alias>ATXMEGA32A4U-A</alias> + <alias>ATXMEGA64A4U-A</alias> + <alias>ATXMEGA128A4U-A</alias> + </aliases> + <description>TQFP44, 16k Flash, 4k Boot, 2k SRAM, 1k EEPROM, JTAG, USB</description> + <docs>http://www.atmel.com/Images/Atmel-8387-8-and16-bit-AVR-Microcontroller-XMEGA-A4U_Datasheet.pdf</docs> + <fields> + <field name="Reference">IC</field> + <field name="Value">ATXMEGA16A4U-A</field> + <field name="Footprint">TQFP44</field> + </fields> + <pins> + <pin num="1" name="AC5/ADC5/PA5" type="BiDi"/> + <pin num="2" name="AC1OUT/AC6/ADC6/PA6" type="BiDi"/> + <pin num="3" name="AC0OUT/AC7/ADC7/PA7" type="BiDi"/> + <pin num="4" name="AREFB/ADC8/PB0" type="BiDi"/> + <pin num="5" name="ADC9/PB1" type="BiDi"/> + <pin num="6" name="DAC0/ADC10/PB2" type="BiDi"/> + <pin num="7" name="DAC1/ACD11/PB3" type="BiDi"/> + <pin num="8" name="GND" type="power_in"/> + <pin num="9" name="VCC" type="power_in"/> + <pin num="10" name="SDAIN/SDA/~OC0ALS~/OC0A/PC0" type="BiDi"/> + <pin num="11" name="SCLIN/SCL/XCK0/OC0AHS/OC0B/PC1" type="BiDi"/> + <pin num="12" name="SDAOUT/RXD0/~OC0BLS~/OC0C/PC2" type="BiDi"/> + <pin num="13" name="SCLOUT/TXD0/OC0BHS/OC0D/PC3" type="BiDi"/> + <pin num="14" name="~SS~/~OC0CLS~/OC1A/PC4" type="BiDi"/> + <pin num="15" name="MOSI/XCK1/OC0CHS/OC1B/PC5" type="BiDi"/> + <pin num="16" name="CLKRTC/MISO/RXD1/~OC0DLS~/PC6" type="BiDi"/> + <pin num="17" name="EVOUT/CLKOUT/SCK/TXD1/OC0DHS/PC7" type="BiDi"/> + <pin num="18" name="GND" type="power_in"/> + <pin num="19" name="VCC" type="power_in"/> + <pin num="20" name="PD0/OC0A" type="BiDi"/> + <pin num="21" name="PD1/OC0B/XCK0" type="BiDi"/> + <pin num="22" name="PD2/OC0C/RXD0" type="BiDi"/> + <pin num="23" name="PD3/OC0D/TXD0" type="BiDi"/> + <pin num="24" name="PD4/OC1A/~SS~" type="BiDi"/> + <pin num="25" name="PD5/OC1B/XCK1/MOSI" type="BiDi"/> + <pin num="26" name="PD6/D-/RXD1/MISO" type="BiDi"/> + <pin num="27" name="PD7/D+/TXD1/SCK/CLKOUT/EVOUT" type="BiDi"/> + <pin num="28" name="PE0/OC0A/SDA" type="BiDi"/> + <pin num="29" name="PE1/OC0B/XCK0/SCL" type="BiDi"/> + <pin num="30" name="GND" type="power_in"/> + <pin num="31" name="VCC" type="power_in"/> + <pin num="32" name="PE2/OC0C/RXD0" type="BiDi"/> + <pin num="33" name="PE3/OC0D/TXD0" type="BiDi"/> + <pin num="34" name="PDI_DATA" type="input"/> + <pin num="35" name="~RESET~/PDI_CLK" type="input"/> + <pin num="36" name="PR0/XTAL2/TOSC2" type="BiDi"/> + <pin num="37" name="PR1/XTAL1/TOSC1" type="BiDi"/> + <pin num="38" name="GND" type="power_in"/> + <pin num="39" name="AVCC" type="power_in"/> + <pin num="40" name="AREFA/AC0/ADC0/PA0" type="BiDi"/> + <pin num="41" name="AC1/ADC1/PA1" type="BiDi"/> + <pin num="42" name="AC2/ADC2/PA2" type="BiDi"/> + <pin num="43" name="AC3/ADC3/PA3" type="BiDi"/> + <pin num="44" name="AC4/ADC4/PA4" type="BiDi"/> + </pins> + </libpart> + <libpart lib="ESPO_PART" part="DMN63D8LDW"> + <fields> + <field name="Reference">U</field> + <field name="Value">DMN63D8LDW</field> + </fields> + <pins> + <pin num="1" name="S1" type="input"/> + <pin num="2" name="G1" type="input"/> + <pin num="3" name="D2" type="input"/> + <pin num="4" name="S2" type="input"/> + <pin num="5" name="G2" type="input"/> + <pin num="6" name="D1" type="input"/> + </pins> + </libpart> + </libparts> + <libraries> + <library logical="device"> + <uri>C:\KiCad\share\kicad\library\device.lib</uri> + </library> + <library logical="conn"> + <uri>C:\KiCad\share\kicad\library\conn.lib</uri> + </library> + <library logical="linear"> + <uri>C:\KiCad\share\kicad\library\linear.lib</uri> + </library> + <library logical="regul"> + <uri>C:\KiCad\share\kicad\library\regul.lib</uri> + </library> + <library logical="atmel"> + <uri>C:\KiCad\share\kicad\library\atmel.lib</uri> + </library> + <library logical="ESPO_PART"> + <uri>C:\Users\Esposch\Documents\KiCAD\ESPO_PART.lib</uri> + </library> + </libraries> + <nets> + <net code="1" name="Net-(R15-Pad1)"> + <node ref="R16" pin="2"/> + <node ref="R15" pin="1"/> + </net> + <net code="2" name="Net-(IC1-Pad32)"> + <node ref="R13" pin="1"/> + <node ref="IC1" pin="32"/> + </net> + <net code="3" name="Net-(IC1-Pad29)"> + <node ref="R12" pin="1"/> + <node ref="IC1" pin="29"/> + </net> + <net code="4" name="Net-(IC1-Pad28)"> + <node ref="R11" pin="1"/> + <node ref="IC1" pin="28"/> + </net> + <net code="5" name="Net-(R10-Pad1)"> + <node ref="R10" pin="1"/> + <node ref="R14" pin="2"/> + </net> + <net code="6" name="Net-(R13-Pad2)"> + <node ref="R13" pin="2"/> + <node ref="R9" pin="1"/> + </net> + <net code="7" name="Net-(R12-Pad2)"> + <node ref="R12" pin="2"/> + <node ref="R8" pin="1"/> + </net> + <net code="8" name="Net-(R11-Pad2)"> + <node ref="R11" pin="2"/> + <node ref="R7" pin="1"/> + </net> + <net code="9" name="Net-(R1-Pad1)"> + <node ref="R3" pin="1"/> + <node ref="R1" pin="1"/> + <node ref="U2" pin="5"/> + </net> + <net code="10" name="Net-(P3-Pad1)"> + <node ref="P3" pin="1"/> + <node ref="R10" pin="2"/> + </net> + <net code="11" name="Net-(P8-Pad2)"> + <node ref="P8" pin="2"/> + <node ref="U3" pin="2"/> + </net> + <net code="12" name="Net-(P8-Pad1)"> + <node ref="P8" pin="1"/> + <node ref="U3" pin="5"/> + </net> + <net code="13" name="/AVCC"> + <node ref="P5" pin="3"/> + <node ref="C13" pin="1"/> + <node ref="C15" pin="1"/> + <node ref="P4" pin="1"/> + <node ref="C4" pin="1"/> + <node ref="C5" pin="1"/> + <node ref="IC1" pin="19"/> + <node ref="IC1" pin="39"/> + <node ref="C10" pin="1"/> + <node ref="R5" pin="1"/> + <node ref="U1" pin="2"/> + </net> + <net code="14" name="/D-"> + <node ref="IC1" pin="26"/> + <node ref="P2" pin="2"/> + </net> + <net code="15" name="/D+"> + <node ref="P2" pin="3"/> + <node ref="IC1" pin="27"/> + </net> + <net code="16" name="Net-(C2-Pad2)"> + <node ref="P1" pin="2"/> + <node ref="C2" pin="2"/> + </net> + <net code="17" name="Net-(P3-Pad2)"> + <node ref="P3" pin="2"/> + <node ref="R9" pin="2"/> + </net> + <net code="18" name="Net-(P3-Pad3)"> + <node ref="P3" pin="3"/> + <node ref="R8" pin="2"/> + </net> + <net code="19" name="Net-(P3-Pad4)"> + <node ref="R7" pin="2"/> + <node ref="P3" pin="4"/> + </net> + <net code="20" name="Net-(IC1-Pad33)"> + <node ref="R14" pin="1"/> + <node ref="IC1" pin="33"/> + </net> + <net code="21" name="Net-(IC1-Pad30)"> + <node ref="IC1" pin="30"/> + </net> + <net code="22" name="Net-(C7-Pad2)"> + <node ref="R16" pin="1"/> + <node ref="C7" pin="2"/> + <node ref="P6" pin="1"/> + </net> + <net code="23" name="Net-(IC1-Pad9)"> + <node ref="IC1" pin="9"/> + </net> + <net code="24" name="Net-(IC1-Pad31)"> + <node ref="IC1" pin="31"/> + </net> + <net code="25" name="Net-(IC1-Pad8)"> + <node ref="IC1" pin="8"/> + </net> + <net code="26" name="/VGND"> + <node ref="C9" pin="2"/> + <node ref="F1" pin="2"/> + <node ref="Q1" pin="2"/> + <node ref="C11" pin="2"/> + <node ref="C12" pin="2"/> + <node ref="C8" pin="2"/> + <node ref="C6" pin="2"/> + <node ref="U2" pin="11"/> + <node ref="P7" pin="2"/> + </net> + <net code="27" name="Net-(IC1-Pad35)"> + <node ref="IC1" pin="35"/> + <node ref="P4" pin="4"/> + </net> + <net code="28" name="Net-(IC1-Pad34)"> + <node ref="IC1" pin="34"/> + <node ref="P4" pin="2"/> + </net> + <net code="29" name="+5V"> + <node ref="C9" pin="1"/> + <node ref="P5" pin="1"/> + <node ref="U1" pin="3"/> + <node ref="P2" pin="1"/> + <node ref="U2" pin="4"/> + <node ref="C3" pin="1"/> + </net> + <net code="30" name="Net-(IC1-Pad43)"> + <node ref="IC1" pin="43"/> + </net> + <net code="31" name="Net-(C1-Pad2)"> + <node ref="P1" pin="3"/> + <node ref="C1" pin="2"/> + </net> + <net code="32" name="Net-(C1-Pad1)"> + <node ref="R1" pin="2"/> + <node ref="C1" pin="1"/> + <node ref="P1" pin="4"/> + </net> + <net code="33" name="Net-(C2-Pad1)"> + <node ref="R2" pin="2"/> + <node ref="P1" pin="1"/> + <node ref="C2" pin="1"/> + </net> + <net code="34" name="Net-(R2-Pad1)"> + <node ref="R2" pin="1"/> + <node ref="R4" pin="2"/> + <node ref="U2" pin="3"/> + </net> + <net code="35" name="Net-(R15-Pad2)"> + <node ref="R15" pin="2"/> + <node ref="U2" pin="9"/> + <node ref="U2" pin="8"/> + </net> + <net code="36" name="Net-(C7-Pad1)"> + <node ref="C7" pin="1"/> + <node ref="P6" pin="2"/> + </net> + <net code="37" name="Net-(C14-Pad1)"> + <node ref="C14" pin="1"/> + <node ref="P6" pin="4"/> + </net> + <net code="38" name="Net-(C14-Pad2)"> + <node ref="C14" pin="2"/> + <node ref="P6" pin="3"/> + <node ref="R18" pin="1"/> + </net> + <net code="39" name="Net-(R17-Pad1)"> + <node ref="R17" pin="1"/> + <node ref="R18" pin="2"/> + </net> + <net code="40" name="Net-(R17-Pad2)"> + <node ref="U2" pin="13"/> + <node ref="R17" pin="2"/> + <node ref="U2" pin="14"/> + </net> + <net code="41" name="/PSU_FEEDBACK"> + <node ref="IC1" pin="1"/> + <node ref="R20" pin="1"/> + <node ref="R19" pin="2"/> + </net> + <net code="42" name="Net-(C11-Pad1)"> + <node ref="P7" pin="1"/> + <node ref="D1" pin="1"/> + <node ref="C12" pin="1"/> + <node ref="C11" pin="1"/> + <node ref="R19" pin="1"/> + </net> + <net code="43" name="/VCC_PSU"> + <node ref="L1" pin="2"/> + <node ref="C8" pin="1"/> + <node ref="C6" pin="1"/> + <node ref="P5" pin="2"/> + </net> + <net code="44" name="Net-(D1-Pad2)"> + <node ref="D1" pin="2"/> + <node ref="Q1" pin="3"/> + <node ref="L1" pin="1"/> + </net> + <net code="45" name="/PSU_PWM"> + <node ref="IC1" pin="24"/> + <node ref="Q1" pin="1"/> + </net> + <net code="46" name="Net-(IC1-Pad41)"> + <node ref="IC1" pin="41"/> + </net> + <net code="47" name="Net-(P2-Pad4)"> + <node ref="P2" pin="4"/> + </net> + <net code="48" name="Net-(IC1-Pad37)"> + <node ref="IC1" pin="37"/> + </net> + <net code="49" name="/DIG_CH1"> + <node ref="U3" pin="6"/> + <node ref="IC1" pin="17"/> + </net> + <net code="50" name="Net-(IC1-Pad36)"> + <node ref="IC1" pin="36"/> + </net> + <net code="51" name="/DAC_OUT2"> + <node ref="IC1" pin="7"/> + <node ref="U2" pin="12"/> + </net> + <net code="52" name="/DAC_OUT"> + <node ref="IC1" pin="6"/> + <node ref="U2" pin="10"/> + </net> + <net code="53" name="Net-(IC1-Pad5)"> + <node ref="IC1" pin="5"/> + </net> + <net code="54" name="Net-(IC1-Pad4)"> + <node ref="IC1" pin="4"/> + </net> + <net code="55" name="Net-(IC1-Pad3)"> + <node ref="IC1" pin="3"/> + </net> + <net code="56" name="/CH2"> + <node ref="U2" pin="2"/> + <node ref="IC1" pin="2"/> + <node ref="IC1" pin="40"/> + <node ref="U2" pin="1"/> + </net> + <net code="57" name="/CH1"> + <node ref="U2" pin="7"/> + <node ref="U2" pin="6"/> + <node ref="IC1" pin="42"/> + </net> + <net code="58" name="Net-(IC1-Pad16)"> + <node ref="IC1" pin="16"/> + </net> + <net code="59" name="Net-(IC1-Pad25)"> + <node ref="IC1" pin="25"/> + </net> + <net code="60" name="/XCK"> + <node ref="IC1" pin="11"/> + <node ref="IC1" pin="15"/> + </net> + <net code="61" name="/AVCC_ON_2"> + <node ref="R4" pin="1"/> + <node ref="IC1" pin="44"/> + <node ref="R5" pin="2"/> + <node ref="R6" pin="2"/> + <node ref="R3" pin="2"/> + </net> + <net code="62" name="Net-(IC1-Pad23)"> + <node ref="IC1" pin="23"/> + </net> + <net code="63" name="Net-(IC1-Pad13)"> + <node ref="IC1" pin="13"/> + </net> + <net code="64" name="Net-(IC1-Pad22)"> + <node ref="IC1" pin="22"/> + </net> + <net code="65" name="/DIG_CH2"> + <node ref="IC1" pin="12"/> + <node ref="U3" pin="3"/> + </net> + <net code="66" name="Net-(IC1-Pad21)"> + <node ref="IC1" pin="21"/> + </net> + <net code="67" name="Net-(IC1-Pad20)"> + <node ref="IC1" pin="20"/> + </net> + <net code="68" name="Net-(IC1-Pad10)"> + <node ref="IC1" pin="10"/> + </net> + <net code="69" name="/AGND"> + <node ref="P4" pin="3"/> + <node ref="IC1" pin="38"/> + <node ref="IC1" pin="18"/> + <node ref="C13" pin="2"/> + <node ref="F1" pin="1"/> + <node ref="C10" pin="2"/> + <node ref="C4" pin="2"/> + <node ref="C3" pin="2"/> + <node ref="U3" pin="4"/> + <node ref="U3" pin="1"/> + <node ref="C5" pin="2"/> + <node ref="IC1" pin="14"/> + <node ref="R20" pin="2"/> + <node ref="P2" pin="5"/> + <node ref="C15" pin="2"/> + <node ref="R6" pin="1"/> + <node ref="U1" pin="1"/> + <node ref="P2" pin="6"/> + </net> + </nets> +</export> diff --git a/PCB/WOT/Tinylab_proto1.zip b/PCB/WOT/Tinylab_proto1.zip new file mode 100644 index 0000000000000000000000000000000000000000..78824db3d2e0c0b39b64c5b3f9211982b668f959 GIT binary patch literal 24015 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 Gum1zbi>7J- literal 0 HcmV?d00001

    XvJk=}sBcM6!8EabbBc1bo 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⪙cZuOE0SsRwhVKc6 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

    XvJk=}sBcM6!8EabbBc1bo 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⪙cZuOE0SsRwhVKc6 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

    4OsM^N=qNSB8$;N$h1RaPxh#w%({C$%iflx;F; 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 U*o{xdBX#CE));2OF|e!ie+_yBJ^%m! literal 0 HcmV?d00001 diff --git a/AVR Code/USB_BULK_TEST/Debug/src/tiny_adc.d b/AVR Code/USB_BULK_TEST/Debug/src/tiny_adc.d new file mode 100644 index 00000000..16dc2e58 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/Debug/src/tiny_adc.d @@ -0,0 +1,215 @@ +src/tiny_adc.d src/tiny_adc.o: ../src/tiny_adc.c ../src/tiny_adc.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdio.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\inttypes.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdarg.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h \ + ../src/asf.h ../src/ASF/xmega/drivers/cpu/ccp.h \ + ../src/ASF/xmega/utils/compiler.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\io.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\iox32a4u.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\portpins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\common.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\version.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\xmega.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\fuse.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\lock.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\builtins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdlib.h \ + ../src/ASF/common/utils/parts.h \ + ../src/ASF/xmega/utils/bit_handling/clz_ctz.h \ + ../src/ASF/xmega/utils/preprocessor/preprocessor.h \ + ../src/ASF/xmega/utils/preprocessor/tpaste.h \ + ../src/ASF/xmega/utils/preprocessor/stringz.h \ + ../src/ASF/xmega/utils/preprocessor/mrepeat.h \ + ../src/ASF/xmega/utils/preprocessor/preprocessor.h \ + ../src/ASF/xmega/utils/progmem.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\pgmspace.h \ + ../src/ASF/common/utils/interrupt.h \ + ../src/ASF/common/utils/interrupt/interrupt_avr8.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\interrupt.h \ + ../src/ASF/xmega/drivers/cpu/xmega_reset_cause.h \ + ../src/ASF/xmega/drivers/cpu/ccp.h \ + ../src/ASF/common/boards/user_board/user_board.h \ + ../src/config/conf_board.h ../src/ASF/common/boards/board.h \ + ../src/ASF/common/services/ioport/ioport.h \ + ../src/ASF/common/services/ioport/xmega/ioport.h \ + ../src/ASF/xmega/drivers/nvm/nvm.h \ + ../src/ASF/xmega/drivers/sleep/sleep.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sleep.h \ + ../src/ASF/common/services/sleepmgr/sleepmgr.h \ + ../src/ASF/common/services/sleepmgr/xmega/sleepmgr.h \ + ../src/config/conf_sleepmgr.h \ + ../src/ASF/common/services/sleepmgr/xmega/sleepmgr.h \ + ../src/ASF/common/services/clock/sysclk.h ../src/config/conf_clock.h \ + ../src/ASF/common/services/clock/xmega/sysclk.h \ + ../src/ASF/common/services/clock/osc.h \ + ../src/ASF/common/services/clock/xmega/osc.h \ + ../src/ASF/common/services/clock/pll.h \ + ../src/ASF/common/services/clock/xmega/pll.h \ + ../src/ASF/common/services/usb/udc/udc.h ../src/config/conf_usb.h \ + ../src/ASF/common/services/usb/class/vendor/device/udi_vendor_conf.h \ + ../src/ASF/common/services/usb/class/vendor/device/udi_vendor.h \ + ../src/ASF/common/services/usb/usb_protocol.h \ + ../src/ASF/common/services/usb/usb_atmel.h \ + ../src/ASF/common/services/usb/class/vendor/usb_protocol_vendor.h \ + ../src/ASF/common/services/usb/udc/udd.h \ + ../src/ASF/common/services/usb/udc/udc_desc.h \ + ../src/ASF/common/services/usb/udc/udi.h \ + ../src/ASF/common/services/usb/udc/udc_desc.h \ + ../src/ASF/common/services/usb/udc/udi.h ../src/ui.h ../src/main.h \ + ../src/ASF/common/services/usb/udc/udd.h \ + ../src/ASF/common/services/usb/class/vendor/device/udi_vendor.h \ + ../src/ASF/xmega/utils/status_codes.h ../src/globals.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\string.h + +../src/tiny_adc.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdio.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\inttypes.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdarg.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h: + +../src/asf.h: + +../src/ASF/xmega/drivers/cpu/ccp.h: + +../src/ASF/xmega/utils/compiler.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\io.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\iox32a4u.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\portpins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\common.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\version.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\xmega.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\fuse.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\lock.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\builtins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdlib.h: + +../src/ASF/common/utils/parts.h: + +../src/ASF/xmega/utils/bit_handling/clz_ctz.h: + +../src/ASF/xmega/utils/preprocessor/preprocessor.h: + +../src/ASF/xmega/utils/preprocessor/tpaste.h: + +../src/ASF/xmega/utils/preprocessor/stringz.h: + +../src/ASF/xmega/utils/preprocessor/mrepeat.h: + +../src/ASF/xmega/utils/preprocessor/preprocessor.h: + +../src/ASF/xmega/utils/progmem.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\pgmspace.h: + +../src/ASF/common/utils/interrupt.h: + +../src/ASF/common/utils/interrupt/interrupt_avr8.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\interrupt.h: + +../src/ASF/xmega/drivers/cpu/xmega_reset_cause.h: + +../src/ASF/xmega/drivers/cpu/ccp.h: + +../src/ASF/common/boards/user_board/user_board.h: + +../src/config/conf_board.h: + +../src/ASF/common/boards/board.h: + +../src/ASF/common/services/ioport/ioport.h: + +../src/ASF/common/services/ioport/xmega/ioport.h: + +../src/ASF/xmega/drivers/nvm/nvm.h: + +../src/ASF/xmega/drivers/sleep/sleep.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sleep.h: + +../src/ASF/common/services/sleepmgr/sleepmgr.h: + +../src/ASF/common/services/sleepmgr/xmega/sleepmgr.h: + +../src/config/conf_sleepmgr.h: + +../src/ASF/common/services/sleepmgr/xmega/sleepmgr.h: + +../src/ASF/common/services/clock/sysclk.h: + +../src/config/conf_clock.h: + +../src/ASF/common/services/clock/xmega/sysclk.h: + +../src/ASF/common/services/clock/osc.h: + +../src/ASF/common/services/clock/xmega/osc.h: + +../src/ASF/common/services/clock/pll.h: + +../src/ASF/common/services/clock/xmega/pll.h: + +../src/ASF/common/services/usb/udc/udc.h: + +../src/config/conf_usb.h: + +../src/ASF/common/services/usb/class/vendor/device/udi_vendor_conf.h: + +../src/ASF/common/services/usb/class/vendor/device/udi_vendor.h: + +../src/ASF/common/services/usb/usb_protocol.h: + +../src/ASF/common/services/usb/usb_atmel.h: + +../src/ASF/common/services/usb/class/vendor/usb_protocol_vendor.h: + +../src/ASF/common/services/usb/udc/udd.h: + +../src/ASF/common/services/usb/udc/udc_desc.h: + +../src/ASF/common/services/usb/udc/udi.h: + +../src/ASF/common/services/usb/udc/udc_desc.h: + +../src/ASF/common/services/usb/udc/udi.h: + +../src/ui.h: + +../src/main.h: + +../src/ASF/common/services/usb/udc/udd.h: + +../src/ASF/common/services/usb/class/vendor/device/udi_vendor.h: + +../src/ASF/xmega/utils/status_codes.h: + +../src/globals.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\string.h: diff --git a/AVR Code/USB_BULK_TEST/Debug/src/tiny_adc.o b/AVR Code/USB_BULK_TEST/Debug/src/tiny_adc.o new file mode 100644 index 0000000000000000000000000000000000000000..c994b4d3962ecfe793965bd3f2664c4ab3646651 GIT binary patch literal 287776 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

  • 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 literal 0 HcmV?d00001 diff --git a/AVR Code/USB_BULK_TEST/Debug/src/ASF/common/components/display/st7565r/st7565r.d b/AVR Code/USB_BULK_TEST/Debug/src/ASF/common/components/display/st7565r/st7565r.d new file mode 100644 index 00000000..6c08986e --- /dev/null +++ b/AVR Code/USB_BULK_TEST/Debug/src/ASF/common/components/display/st7565r/st7565r.d @@ -0,0 +1,159 @@ +src/ASF/common/components/display/st7565r/st7565r.d \ + src/ASF/common/components/display/st7565r/st7565r.o: \ + ../src/ASF/common/components/display/st7565r/st7565r.c \ + ../src/ASF/common/components/display/st7565r/st7565r.h \ + ../src/ASF/xmega/utils/compiler.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\io.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\inttypes.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\iox256a3bu.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\portpins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\common.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\version.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\xmega.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\fuse.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\lock.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\builtins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdlib.h \ + ../src/ASF/common/utils/parts.h \ + ../src/ASF/xmega/utils/bit_handling/clz_ctz.h \ + ../src/ASF/xmega/utils/preprocessor/preprocessor.h \ + ../src/ASF/xmega/utils/preprocessor/tpaste.h \ + ../src/ASF/xmega/utils/preprocessor/stringz.h \ + ../src/ASF/xmega/utils/preprocessor/mrepeat.h \ + ../src/ASF/xmega/utils/preprocessor/preprocessor.h \ + ../src/ASF/xmega/utils/progmem.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\pgmspace.h \ + ../src/ASF/common/utils/interrupt.h \ + ../src/ASF/common/utils/interrupt/interrupt_avr8.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\interrupt.h \ + ../src/ASF/common/services/clock/sysclk.h ../src/config/conf_clock.h \ + ../src/ASF/common/services/clock/xmega/sysclk.h \ + ../src/ASF/common/boards/board.h \ + ../src/ASF/xmega/boards/xmega_a3bu_xplained/xmega_a3bu_xplained.h \ + ../src/ASF/xmega/drivers/cpu/ccp.h \ + ../src/ASF/common/services/clock/osc.h \ + ../src/ASF/common/services/clock/xmega/osc.h \ + ../src/ASF/common/services/clock/pll.h \ + ../src/ASF/common/services/clock/xmega/pll.h \ + ../src/ASF/common/services/ioport/ioport.h \ + ../src/ASF/common/services/ioport/xmega/ioport.h \ + ../src/ASF/common/services/ioport/xmega/ioport_compat.h \ + ../src/ASF/common/services/ioport/xmega/../ioport.h \ + ../src/ASF/xmega/utils/status_codes.h \ + ../src/ASF/common/services/delay/delay.h \ + ../src/ASF/common/services/delay/xmega/cycle_counter.h \ + ../src/config/conf_st7565r.h ../src/ASF/common/services/spi/usart_spi.h \ + ../src/ASF/common/services/spi/xmega_usart_spi/usart_spi.h \ + ../src/ASF/xmega/drivers/usart/usart.h \ + ../src/ASF/xmega/drivers/pmic/pmic.h ../src/config/conf_usart_spi.h + +../src/ASF/common/components/display/st7565r/st7565r.h: + +../src/ASF/xmega/utils/compiler.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\io.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\inttypes.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\iox256a3bu.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\portpins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\common.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\version.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\xmega.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\fuse.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\lock.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\builtins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdlib.h: + +../src/ASF/common/utils/parts.h: + +../src/ASF/xmega/utils/bit_handling/clz_ctz.h: + +../src/ASF/xmega/utils/preprocessor/preprocessor.h: + +../src/ASF/xmega/utils/preprocessor/tpaste.h: + +../src/ASF/xmega/utils/preprocessor/stringz.h: + +../src/ASF/xmega/utils/preprocessor/mrepeat.h: + +../src/ASF/xmega/utils/preprocessor/preprocessor.h: + +../src/ASF/xmega/utils/progmem.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\pgmspace.h: + +../src/ASF/common/utils/interrupt.h: + +../src/ASF/common/utils/interrupt/interrupt_avr8.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\interrupt.h: + +../src/ASF/common/services/clock/sysclk.h: + +../src/config/conf_clock.h: + +../src/ASF/common/services/clock/xmega/sysclk.h: + +../src/ASF/common/boards/board.h: + +../src/ASF/xmega/boards/xmega_a3bu_xplained/xmega_a3bu_xplained.h: + +../src/ASF/xmega/drivers/cpu/ccp.h: + +../src/ASF/common/services/clock/osc.h: + +../src/ASF/common/services/clock/xmega/osc.h: + +../src/ASF/common/services/clock/pll.h: + +../src/ASF/common/services/clock/xmega/pll.h: + +../src/ASF/common/services/ioport/ioport.h: + +../src/ASF/common/services/ioport/xmega/ioport.h: + +../src/ASF/common/services/ioport/xmega/ioport_compat.h: + +../src/ASF/common/services/ioport/xmega/../ioport.h: + +../src/ASF/xmega/utils/status_codes.h: + +../src/ASF/common/services/delay/delay.h: + +../src/ASF/common/services/delay/xmega/cycle_counter.h: + +../src/config/conf_st7565r.h: + +../src/ASF/common/services/spi/usart_spi.h: + +../src/ASF/common/services/spi/xmega_usart_spi/usart_spi.h: + +../src/ASF/xmega/drivers/usart/usart.h: + +../src/ASF/xmega/drivers/pmic/pmic.h: + +../src/config/conf_usart_spi.h: diff --git a/AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/clock/xmega/sysclk.d b/AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/clock/xmega/sysclk.d new file mode 100644 index 00000000..411bc0ab --- /dev/null +++ b/AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/clock/xmega/sysclk.d @@ -0,0 +1,124 @@ +src/ASF/common/services/clock/xmega/sysclk.d \ + src/ASF/common/services/clock/xmega/sysclk.o: \ + ../src/ASF/common/services/clock/xmega/sysclk.c \ + ../src/ASF/xmega/utils/compiler.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\io.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\inttypes.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\iox32a4u.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\portpins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\common.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\version.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\xmega.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\fuse.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\lock.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\builtins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdlib.h \ + ../src/ASF/common/utils/parts.h \ + ../src/ASF/xmega/utils/bit_handling/clz_ctz.h \ + ../src/ASF/xmega/utils/preprocessor/preprocessor.h \ + ../src/ASF/xmega/utils/preprocessor/tpaste.h \ + ../src/ASF/xmega/utils/preprocessor/stringz.h \ + ../src/ASF/xmega/utils/preprocessor/mrepeat.h \ + ../src/ASF/xmega/utils/preprocessor/preprocessor.h \ + ../src/ASF/xmega/utils/progmem.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\pgmspace.h \ + ../src/ASF/common/utils/interrupt.h \ + ../src/ASF/common/utils/interrupt/interrupt_avr8.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\interrupt.h \ + ../src/ASF/common/services/clock/sysclk.h ../src/config/conf_clock.h \ + ../src/ASF/common/services/clock/xmega/sysclk.h \ + ../src/ASF/common/boards/board.h \ + ../src/ASF/common/boards/user_board/user_board.h \ + ../src/config/conf_board.h ../src/ASF/xmega/drivers/cpu/ccp.h \ + ../src/ASF/common/services/clock/osc.h \ + ../src/ASF/common/services/clock/xmega/osc.h \ + ../src/ASF/common/services/clock/pll.h \ + ../src/ASF/common/services/clock/xmega/pll.h \ + ../src/ASF/xmega/drivers/nvm/nvm.h + +../src/ASF/xmega/utils/compiler.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\io.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\inttypes.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\iox32a4u.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\portpins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\common.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\version.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\xmega.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\fuse.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\lock.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\builtins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdlib.h: + +../src/ASF/common/utils/parts.h: + +../src/ASF/xmega/utils/bit_handling/clz_ctz.h: + +../src/ASF/xmega/utils/preprocessor/preprocessor.h: + +../src/ASF/xmega/utils/preprocessor/tpaste.h: + +../src/ASF/xmega/utils/preprocessor/stringz.h: + +../src/ASF/xmega/utils/preprocessor/mrepeat.h: + +../src/ASF/xmega/utils/preprocessor/preprocessor.h: + +../src/ASF/xmega/utils/progmem.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\pgmspace.h: + +../src/ASF/common/utils/interrupt.h: + +../src/ASF/common/utils/interrupt/interrupt_avr8.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\interrupt.h: + +../src/ASF/common/services/clock/sysclk.h: + +../src/config/conf_clock.h: + +../src/ASF/common/services/clock/xmega/sysclk.h: + +../src/ASF/common/boards/board.h: + +../src/ASF/common/boards/user_board/user_board.h: + +../src/config/conf_board.h: + +../src/ASF/xmega/drivers/cpu/ccp.h: + +../src/ASF/common/services/clock/osc.h: + +../src/ASF/common/services/clock/xmega/osc.h: + +../src/ASF/common/services/clock/pll.h: + +../src/ASF/common/services/clock/xmega/pll.h: + +../src/ASF/xmega/drivers/nvm/nvm.h: diff --git a/AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/clock/xmega/sysclk.o b/AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/clock/xmega/sysclk.o new file mode 100644 index 0000000000000000000000000000000000000000..547385086a2258df675ded3cf75eefd34c5d95c7 GIT binary patch literal 266636 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 literal 0 HcmV?d00001 diff --git a/AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/gfx_mono/gfx_mono_c12832_a1z.d b/AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/gfx_mono/gfx_mono_c12832_a1z.d new file mode 100644 index 00000000..a4919514 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/gfx_mono/gfx_mono_c12832_a1z.d @@ -0,0 +1,174 @@ +src/ASF/common/services/gfx_mono/gfx_mono_c12832_a1z.d \ + src/ASF/common/services/gfx_mono/gfx_mono_c12832_a1z.o: \ + ../src/ASF/common/services/gfx_mono/gfx_mono_c12832_a1z.c \ + ../src/ASF/common/services/gfx_mono/gfx_mono_c12832_a1z.h \ + ../src/ASF/xmega/utils/compiler.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\io.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\inttypes.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\iox256a3bu.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\portpins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\common.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\version.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\xmega.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\fuse.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\lock.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\builtins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdlib.h \ + ../src/ASF/common/utils/parts.h \ + ../src/ASF/xmega/utils/bit_handling/clz_ctz.h \ + ../src/ASF/xmega/utils/preprocessor/preprocessor.h \ + ../src/ASF/xmega/utils/preprocessor/tpaste.h \ + ../src/ASF/xmega/utils/preprocessor/stringz.h \ + ../src/ASF/xmega/utils/preprocessor/mrepeat.h \ + ../src/ASF/xmega/utils/preprocessor/preprocessor.h \ + ../src/ASF/xmega/utils/progmem.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\pgmspace.h \ + ../src/ASF/common/utils/interrupt.h \ + ../src/ASF/common/utils/interrupt/interrupt_avr8.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\interrupt.h \ + ../src/ASF/common/components/display/st7565r/st7565r.h \ + ../src/ASF/common/services/clock/sysclk.h ../src/config/conf_clock.h \ + ../src/ASF/common/services/clock/xmega/sysclk.h \ + ../src/ASF/common/boards/board.h \ + ../src/ASF/xmega/boards/xmega_a3bu_xplained/xmega_a3bu_xplained.h \ + ../src/ASF/xmega/drivers/cpu/ccp.h \ + ../src/ASF/common/services/clock/osc.h \ + ../src/ASF/common/services/clock/xmega/osc.h \ + ../src/ASF/common/services/clock/pll.h \ + ../src/ASF/common/services/clock/xmega/pll.h \ + ../src/ASF/common/services/ioport/ioport.h \ + ../src/ASF/common/services/ioport/xmega/ioport.h \ + ../src/ASF/common/services/ioport/xmega/ioport_compat.h \ + ../src/ASF/common/services/ioport/xmega/../ioport.h \ + ../src/ASF/xmega/utils/status_codes.h \ + ../src/ASF/common/services/delay/delay.h \ + ../src/ASF/common/services/delay/xmega/cycle_counter.h \ + ../src/config/conf_st7565r.h ../src/ASF/common/services/spi/usart_spi.h \ + ../src/ASF/common/services/spi/xmega_usart_spi/usart_spi.h \ + ../src/ASF/xmega/drivers/usart/usart.h \ + ../src/ASF/xmega/drivers/pmic/pmic.h ../src/config/conf_usart_spi.h \ + ../src/ASF/common/services/gfx_mono/gfx_mono.h \ + ../src/ASF/xmega/utils/progmem.h \ + ../src/ASF/common/services/gfx_mono/gfx_mono_generic.h \ + ../src/ASF/common/services/gfx_mono/gfx_mono_framebuffer.h + +../src/ASF/common/services/gfx_mono/gfx_mono_c12832_a1z.h: + +../src/ASF/xmega/utils/compiler.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\io.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\inttypes.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\iox256a3bu.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\portpins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\common.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\version.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\xmega.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\fuse.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\lock.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\builtins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdlib.h: + +../src/ASF/common/utils/parts.h: + +../src/ASF/xmega/utils/bit_handling/clz_ctz.h: + +../src/ASF/xmega/utils/preprocessor/preprocessor.h: + +../src/ASF/xmega/utils/preprocessor/tpaste.h: + +../src/ASF/xmega/utils/preprocessor/stringz.h: + +../src/ASF/xmega/utils/preprocessor/mrepeat.h: + +../src/ASF/xmega/utils/preprocessor/preprocessor.h: + +../src/ASF/xmega/utils/progmem.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\pgmspace.h: + +../src/ASF/common/utils/interrupt.h: + +../src/ASF/common/utils/interrupt/interrupt_avr8.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\interrupt.h: + +../src/ASF/common/components/display/st7565r/st7565r.h: + +../src/ASF/common/services/clock/sysclk.h: + +../src/config/conf_clock.h: + +../src/ASF/common/services/clock/xmega/sysclk.h: + +../src/ASF/common/boards/board.h: + +../src/ASF/xmega/boards/xmega_a3bu_xplained/xmega_a3bu_xplained.h: + +../src/ASF/xmega/drivers/cpu/ccp.h: + +../src/ASF/common/services/clock/osc.h: + +../src/ASF/common/services/clock/xmega/osc.h: + +../src/ASF/common/services/clock/pll.h: + +../src/ASF/common/services/clock/xmega/pll.h: + +../src/ASF/common/services/ioport/ioport.h: + +../src/ASF/common/services/ioport/xmega/ioport.h: + +../src/ASF/common/services/ioport/xmega/ioport_compat.h: + +../src/ASF/common/services/ioport/xmega/../ioport.h: + +../src/ASF/xmega/utils/status_codes.h: + +../src/ASF/common/services/delay/delay.h: + +../src/ASF/common/services/delay/xmega/cycle_counter.h: + +../src/config/conf_st7565r.h: + +../src/ASF/common/services/spi/usart_spi.h: + +../src/ASF/common/services/spi/xmega_usart_spi/usart_spi.h: + +../src/ASF/xmega/drivers/usart/usart.h: + +../src/ASF/xmega/drivers/pmic/pmic.h: + +../src/config/conf_usart_spi.h: + +../src/ASF/common/services/gfx_mono/gfx_mono.h: + +../src/ASF/xmega/utils/progmem.h: + +../src/ASF/common/services/gfx_mono/gfx_mono_generic.h: + +../src/ASF/common/services/gfx_mono/gfx_mono_framebuffer.h: diff --git a/AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/gfx_mono/gfx_mono_framebuffer.d b/AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/gfx_mono/gfx_mono_framebuffer.d new file mode 100644 index 00000000..718dde38 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/gfx_mono/gfx_mono_framebuffer.d @@ -0,0 +1,174 @@ +src/ASF/common/services/gfx_mono/gfx_mono_framebuffer.d \ + src/ASF/common/services/gfx_mono/gfx_mono_framebuffer.o: \ + ../src/ASF/common/services/gfx_mono/gfx_mono_framebuffer.c \ + ../src/ASF/common/services/gfx_mono/gfx_mono_framebuffer.h \ + ../src/ASF/common/services/gfx_mono/gfx_mono.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdint.h \ + ../src/ASF/xmega/utils/compiler.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\io.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\inttypes.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\iox256a3bu.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\portpins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\common.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\version.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\xmega.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\fuse.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\lock.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\builtins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdlib.h \ + ../src/ASF/common/utils/parts.h \ + ../src/ASF/xmega/utils/bit_handling/clz_ctz.h \ + ../src/ASF/xmega/utils/preprocessor/preprocessor.h \ + ../src/ASF/xmega/utils/preprocessor/tpaste.h \ + ../src/ASF/xmega/utils/preprocessor/stringz.h \ + ../src/ASF/xmega/utils/preprocessor/mrepeat.h \ + ../src/ASF/xmega/utils/preprocessor/preprocessor.h \ + ../src/ASF/xmega/utils/progmem.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\pgmspace.h \ + ../src/ASF/common/utils/interrupt.h \ + ../src/ASF/common/utils/interrupt/interrupt_avr8.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\interrupt.h \ + ../src/ASF/xmega/utils/progmem.h \ + ../src/ASF/common/services/gfx_mono/gfx_mono_c12832_a1z.h \ + ../src/ASF/common/components/display/st7565r/st7565r.h \ + ../src/ASF/common/services/clock/sysclk.h ../src/config/conf_clock.h \ + ../src/ASF/common/services/clock/xmega/sysclk.h \ + ../src/ASF/common/boards/board.h \ + ../src/ASF/xmega/boards/xmega_a3bu_xplained/xmega_a3bu_xplained.h \ + ../src/ASF/xmega/drivers/cpu/ccp.h \ + ../src/ASF/common/services/clock/osc.h \ + ../src/ASF/common/services/clock/xmega/osc.h \ + ../src/ASF/common/services/clock/pll.h \ + ../src/ASF/common/services/clock/xmega/pll.h \ + ../src/ASF/common/services/ioport/ioport.h \ + ../src/ASF/common/services/ioport/xmega/ioport.h \ + ../src/ASF/common/services/ioport/xmega/ioport_compat.h \ + ../src/ASF/common/services/ioport/xmega/../ioport.h \ + ../src/ASF/xmega/utils/status_codes.h \ + ../src/ASF/common/services/delay/delay.h \ + ../src/ASF/common/services/delay/xmega/cycle_counter.h \ + ../src/config/conf_st7565r.h ../src/ASF/common/services/spi/usart_spi.h \ + ../src/ASF/common/services/spi/xmega_usart_spi/usart_spi.h \ + ../src/ASF/xmega/drivers/usart/usart.h \ + ../src/ASF/xmega/drivers/pmic/pmic.h ../src/config/conf_usart_spi.h \ + ../src/ASF/common/services/gfx_mono/gfx_mono_generic.h + +../src/ASF/common/services/gfx_mono/gfx_mono_framebuffer.h: + +../src/ASF/common/services/gfx_mono/gfx_mono.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdint.h: + +../src/ASF/xmega/utils/compiler.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\io.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\inttypes.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\iox256a3bu.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\portpins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\common.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\version.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\xmega.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\fuse.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\lock.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\builtins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdlib.h: + +../src/ASF/common/utils/parts.h: + +../src/ASF/xmega/utils/bit_handling/clz_ctz.h: + +../src/ASF/xmega/utils/preprocessor/preprocessor.h: + +../src/ASF/xmega/utils/preprocessor/tpaste.h: + +../src/ASF/xmega/utils/preprocessor/stringz.h: + +../src/ASF/xmega/utils/preprocessor/mrepeat.h: + +../src/ASF/xmega/utils/preprocessor/preprocessor.h: + +../src/ASF/xmega/utils/progmem.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\pgmspace.h: + +../src/ASF/common/utils/interrupt.h: + +../src/ASF/common/utils/interrupt/interrupt_avr8.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\interrupt.h: + +../src/ASF/xmega/utils/progmem.h: + +../src/ASF/common/services/gfx_mono/gfx_mono_c12832_a1z.h: + +../src/ASF/common/components/display/st7565r/st7565r.h: + +../src/ASF/common/services/clock/sysclk.h: + +../src/config/conf_clock.h: + +../src/ASF/common/services/clock/xmega/sysclk.h: + +../src/ASF/common/boards/board.h: + +../src/ASF/xmega/boards/xmega_a3bu_xplained/xmega_a3bu_xplained.h: + +../src/ASF/xmega/drivers/cpu/ccp.h: + +../src/ASF/common/services/clock/osc.h: + +../src/ASF/common/services/clock/xmega/osc.h: + +../src/ASF/common/services/clock/pll.h: + +../src/ASF/common/services/clock/xmega/pll.h: + +../src/ASF/common/services/ioport/ioport.h: + +../src/ASF/common/services/ioport/xmega/ioport.h: + +../src/ASF/common/services/ioport/xmega/ioport_compat.h: + +../src/ASF/common/services/ioport/xmega/../ioport.h: + +../src/ASF/xmega/utils/status_codes.h: + +../src/ASF/common/services/delay/delay.h: + +../src/ASF/common/services/delay/xmega/cycle_counter.h: + +../src/config/conf_st7565r.h: + +../src/ASF/common/services/spi/usart_spi.h: + +../src/ASF/common/services/spi/xmega_usart_spi/usart_spi.h: + +../src/ASF/xmega/drivers/usart/usart.h: + +../src/ASF/xmega/drivers/pmic/pmic.h: + +../src/config/conf_usart_spi.h: + +../src/ASF/common/services/gfx_mono/gfx_mono_generic.h: diff --git a/AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/gfx_mono/gfx_mono_generic.d b/AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/gfx_mono/gfx_mono_generic.d new file mode 100644 index 00000000..f3072e4b --- /dev/null +++ b/AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/gfx_mono/gfx_mono_generic.d @@ -0,0 +1,174 @@ +src/ASF/common/services/gfx_mono/gfx_mono_generic.d \ + src/ASF/common/services/gfx_mono/gfx_mono_generic.o: \ + ../src/ASF/common/services/gfx_mono/gfx_mono_generic.c \ + ../src/ASF/common/services/gfx_mono/gfx_mono_generic.h \ + ../src/ASF/common/services/gfx_mono/gfx_mono.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdint.h \ + ../src/ASF/xmega/utils/compiler.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\io.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\inttypes.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\iox256a3bu.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\portpins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\common.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\version.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\xmega.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\fuse.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\lock.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\builtins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdlib.h \ + ../src/ASF/common/utils/parts.h \ + ../src/ASF/xmega/utils/bit_handling/clz_ctz.h \ + ../src/ASF/xmega/utils/preprocessor/preprocessor.h \ + ../src/ASF/xmega/utils/preprocessor/tpaste.h \ + ../src/ASF/xmega/utils/preprocessor/stringz.h \ + ../src/ASF/xmega/utils/preprocessor/mrepeat.h \ + ../src/ASF/xmega/utils/preprocessor/preprocessor.h \ + ../src/ASF/xmega/utils/progmem.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\pgmspace.h \ + ../src/ASF/common/utils/interrupt.h \ + ../src/ASF/common/utils/interrupt/interrupt_avr8.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\interrupt.h \ + ../src/ASF/xmega/utils/progmem.h \ + ../src/ASF/common/services/gfx_mono/gfx_mono_c12832_a1z.h \ + ../src/ASF/common/components/display/st7565r/st7565r.h \ + ../src/ASF/common/services/clock/sysclk.h ../src/config/conf_clock.h \ + ../src/ASF/common/services/clock/xmega/sysclk.h \ + ../src/ASF/common/boards/board.h \ + ../src/ASF/xmega/boards/xmega_a3bu_xplained/xmega_a3bu_xplained.h \ + ../src/ASF/xmega/drivers/cpu/ccp.h \ + ../src/ASF/common/services/clock/osc.h \ + ../src/ASF/common/services/clock/xmega/osc.h \ + ../src/ASF/common/services/clock/pll.h \ + ../src/ASF/common/services/clock/xmega/pll.h \ + ../src/ASF/common/services/ioport/ioport.h \ + ../src/ASF/common/services/ioport/xmega/ioport.h \ + ../src/ASF/common/services/ioport/xmega/ioport_compat.h \ + ../src/ASF/common/services/ioport/xmega/../ioport.h \ + ../src/ASF/xmega/utils/status_codes.h \ + ../src/ASF/common/services/delay/delay.h \ + ../src/ASF/common/services/delay/xmega/cycle_counter.h \ + ../src/config/conf_st7565r.h ../src/ASF/common/services/spi/usart_spi.h \ + ../src/ASF/common/services/spi/xmega_usart_spi/usart_spi.h \ + ../src/ASF/xmega/drivers/usart/usart.h \ + ../src/ASF/xmega/drivers/pmic/pmic.h ../src/config/conf_usart_spi.h \ + ../src/ASF/common/services/gfx_mono/gfx_mono_framebuffer.h + +../src/ASF/common/services/gfx_mono/gfx_mono_generic.h: + +../src/ASF/common/services/gfx_mono/gfx_mono.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdint.h: + +../src/ASF/xmega/utils/compiler.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\io.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\inttypes.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\iox256a3bu.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\portpins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\common.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\version.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\xmega.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\fuse.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\lock.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\builtins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdlib.h: + +../src/ASF/common/utils/parts.h: + +../src/ASF/xmega/utils/bit_handling/clz_ctz.h: + +../src/ASF/xmega/utils/preprocessor/preprocessor.h: + +../src/ASF/xmega/utils/preprocessor/tpaste.h: + +../src/ASF/xmega/utils/preprocessor/stringz.h: + +../src/ASF/xmega/utils/preprocessor/mrepeat.h: + +../src/ASF/xmega/utils/preprocessor/preprocessor.h: + +../src/ASF/xmega/utils/progmem.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\pgmspace.h: + +../src/ASF/common/utils/interrupt.h: + +../src/ASF/common/utils/interrupt/interrupt_avr8.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\interrupt.h: + +../src/ASF/xmega/utils/progmem.h: + +../src/ASF/common/services/gfx_mono/gfx_mono_c12832_a1z.h: + +../src/ASF/common/components/display/st7565r/st7565r.h: + +../src/ASF/common/services/clock/sysclk.h: + +../src/config/conf_clock.h: + +../src/ASF/common/services/clock/xmega/sysclk.h: + +../src/ASF/common/boards/board.h: + +../src/ASF/xmega/boards/xmega_a3bu_xplained/xmega_a3bu_xplained.h: + +../src/ASF/xmega/drivers/cpu/ccp.h: + +../src/ASF/common/services/clock/osc.h: + +../src/ASF/common/services/clock/xmega/osc.h: + +../src/ASF/common/services/clock/pll.h: + +../src/ASF/common/services/clock/xmega/pll.h: + +../src/ASF/common/services/ioport/ioport.h: + +../src/ASF/common/services/ioport/xmega/ioport.h: + +../src/ASF/common/services/ioport/xmega/ioport_compat.h: + +../src/ASF/common/services/ioport/xmega/../ioport.h: + +../src/ASF/xmega/utils/status_codes.h: + +../src/ASF/common/services/delay/delay.h: + +../src/ASF/common/services/delay/xmega/cycle_counter.h: + +../src/config/conf_st7565r.h: + +../src/ASF/common/services/spi/usart_spi.h: + +../src/ASF/common/services/spi/xmega_usart_spi/usart_spi.h: + +../src/ASF/xmega/drivers/usart/usart.h: + +../src/ASF/xmega/drivers/pmic/pmic.h: + +../src/config/conf_usart_spi.h: + +../src/ASF/common/services/gfx_mono/gfx_mono_framebuffer.h: diff --git a/AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/gfx_mono/gfx_mono_menu.d b/AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/gfx_mono/gfx_mono_menu.d new file mode 100644 index 00000000..1cf9de41 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/gfx_mono/gfx_mono_menu.d @@ -0,0 +1,189 @@ +src/ASF/common/services/gfx_mono/gfx_mono_menu.d \ + src/ASF/common/services/gfx_mono/gfx_mono_menu.o: \ + ../src/ASF/common/services/gfx_mono/gfx_mono_menu.c \ + ../src/ASF/common/services/gfx_mono/sysfont.h \ + ../src/config/conf_sysfont.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdint.h \ + ../src/ASF/common/services/gfx_mono/gfx_mono.h \ + ../src/ASF/xmega/utils/compiler.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\io.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\inttypes.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\iox256a3bu.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\portpins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\common.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\version.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\xmega.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\fuse.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\lock.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\builtins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdlib.h \ + ../src/ASF/common/utils/parts.h \ + ../src/ASF/xmega/utils/bit_handling/clz_ctz.h \ + ../src/ASF/xmega/utils/preprocessor/preprocessor.h \ + ../src/ASF/xmega/utils/preprocessor/tpaste.h \ + ../src/ASF/xmega/utils/preprocessor/stringz.h \ + ../src/ASF/xmega/utils/preprocessor/mrepeat.h \ + ../src/ASF/xmega/utils/preprocessor/preprocessor.h \ + ../src/ASF/xmega/utils/progmem.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\pgmspace.h \ + ../src/ASF/common/utils/interrupt.h \ + ../src/ASF/common/utils/interrupt/interrupt_avr8.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\interrupt.h \ + ../src/ASF/xmega/utils/progmem.h \ + ../src/ASF/common/services/gfx_mono/gfx_mono_c12832_a1z.h \ + ../src/ASF/common/components/display/st7565r/st7565r.h \ + ../src/ASF/common/services/clock/sysclk.h ../src/config/conf_clock.h \ + ../src/ASF/common/services/clock/xmega/sysclk.h \ + ../src/ASF/common/boards/board.h \ + ../src/ASF/xmega/boards/xmega_a3bu_xplained/xmega_a3bu_xplained.h \ + ../src/ASF/xmega/drivers/cpu/ccp.h \ + ../src/ASF/common/services/clock/osc.h \ + ../src/ASF/common/services/clock/xmega/osc.h \ + ../src/ASF/common/services/clock/pll.h \ + ../src/ASF/common/services/clock/xmega/pll.h \ + ../src/ASF/common/services/ioport/ioport.h \ + ../src/ASF/common/services/ioport/xmega/ioport.h \ + ../src/ASF/common/services/ioport/xmega/ioport_compat.h \ + ../src/ASF/common/services/ioport/xmega/../ioport.h \ + ../src/ASF/xmega/utils/status_codes.h \ + ../src/ASF/common/services/delay/delay.h \ + ../src/ASF/common/services/delay/xmega/cycle_counter.h \ + ../src/config/conf_st7565r.h ../src/ASF/common/services/spi/usart_spi.h \ + ../src/ASF/common/services/spi/xmega_usart_spi/usart_spi.h \ + ../src/ASF/xmega/drivers/usart/usart.h \ + ../src/ASF/xmega/drivers/pmic/pmic.h ../src/config/conf_usart_spi.h \ + ../src/ASF/common/services/gfx_mono/gfx_mono_framebuffer.h \ + ../src/ASF/common/services/gfx_mono/gfx_mono_generic.h \ + ../src/ASF/common/services/gfx_mono/gfx_mono_text.h \ + ../src/config/conf_menu.h \ + ../src/ASF/common/services/gfx_mono/gfx_mono_menu.h + +../src/ASF/common/services/gfx_mono/sysfont.h: + +../src/config/conf_sysfont.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdint.h: + +../src/ASF/common/services/gfx_mono/gfx_mono.h: + +../src/ASF/xmega/utils/compiler.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\io.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\inttypes.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\iox256a3bu.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\portpins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\common.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\version.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\xmega.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\fuse.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\lock.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\builtins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdlib.h: + +../src/ASF/common/utils/parts.h: + +../src/ASF/xmega/utils/bit_handling/clz_ctz.h: + +../src/ASF/xmega/utils/preprocessor/preprocessor.h: + +../src/ASF/xmega/utils/preprocessor/tpaste.h: + +../src/ASF/xmega/utils/preprocessor/stringz.h: + +../src/ASF/xmega/utils/preprocessor/mrepeat.h: + +../src/ASF/xmega/utils/preprocessor/preprocessor.h: + +../src/ASF/xmega/utils/progmem.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\pgmspace.h: + +../src/ASF/common/utils/interrupt.h: + +../src/ASF/common/utils/interrupt/interrupt_avr8.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\interrupt.h: + +../src/ASF/xmega/utils/progmem.h: + +../src/ASF/common/services/gfx_mono/gfx_mono_c12832_a1z.h: + +../src/ASF/common/components/display/st7565r/st7565r.h: + +../src/ASF/common/services/clock/sysclk.h: + +../src/config/conf_clock.h: + +../src/ASF/common/services/clock/xmega/sysclk.h: + +../src/ASF/common/boards/board.h: + +../src/ASF/xmega/boards/xmega_a3bu_xplained/xmega_a3bu_xplained.h: + +../src/ASF/xmega/drivers/cpu/ccp.h: + +../src/ASF/common/services/clock/osc.h: + +../src/ASF/common/services/clock/xmega/osc.h: + +../src/ASF/common/services/clock/pll.h: + +../src/ASF/common/services/clock/xmega/pll.h: + +../src/ASF/common/services/ioport/ioport.h: + +../src/ASF/common/services/ioport/xmega/ioport.h: + +../src/ASF/common/services/ioport/xmega/ioport_compat.h: + +../src/ASF/common/services/ioport/xmega/../ioport.h: + +../src/ASF/xmega/utils/status_codes.h: + +../src/ASF/common/services/delay/delay.h: + +../src/ASF/common/services/delay/xmega/cycle_counter.h: + +../src/config/conf_st7565r.h: + +../src/ASF/common/services/spi/usart_spi.h: + +../src/ASF/common/services/spi/xmega_usart_spi/usart_spi.h: + +../src/ASF/xmega/drivers/usart/usart.h: + +../src/ASF/xmega/drivers/pmic/pmic.h: + +../src/config/conf_usart_spi.h: + +../src/ASF/common/services/gfx_mono/gfx_mono_framebuffer.h: + +../src/ASF/common/services/gfx_mono/gfx_mono_generic.h: + +../src/ASF/common/services/gfx_mono/gfx_mono_text.h: + +../src/config/conf_menu.h: + +../src/ASF/common/services/gfx_mono/gfx_mono_menu.h: diff --git a/AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/gfx_mono/gfx_mono_spinctrl.d b/AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/gfx_mono/gfx_mono_spinctrl.d new file mode 100644 index 00000000..bb841d0e --- /dev/null +++ b/AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/gfx_mono/gfx_mono_spinctrl.d @@ -0,0 +1,195 @@ +src/ASF/common/services/gfx_mono/gfx_mono_spinctrl.d \ + src/ASF/common/services/gfx_mono/gfx_mono_spinctrl.o: \ + ../src/ASF/common/services/gfx_mono/gfx_mono_spinctrl.c \ + ../src/ASF/common/services/gfx_mono/sysfont.h \ + ../src/config/conf_sysfont.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdint.h \ + ../src/ASF/common/services/gfx_mono/gfx_mono.h \ + ../src/ASF/xmega/utils/compiler.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\io.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\inttypes.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\iox256a3bu.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\portpins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\common.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\version.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\xmega.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\fuse.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\lock.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\builtins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdlib.h \ + ../src/ASF/common/utils/parts.h \ + ../src/ASF/xmega/utils/bit_handling/clz_ctz.h \ + ../src/ASF/xmega/utils/preprocessor/preprocessor.h \ + ../src/ASF/xmega/utils/preprocessor/tpaste.h \ + ../src/ASF/xmega/utils/preprocessor/stringz.h \ + ../src/ASF/xmega/utils/preprocessor/mrepeat.h \ + ../src/ASF/xmega/utils/preprocessor/preprocessor.h \ + ../src/ASF/xmega/utils/progmem.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\pgmspace.h \ + ../src/ASF/common/utils/interrupt.h \ + ../src/ASF/common/utils/interrupt/interrupt_avr8.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\interrupt.h \ + ../src/ASF/xmega/utils/progmem.h \ + ../src/ASF/common/services/gfx_mono/gfx_mono_c12832_a1z.h \ + ../src/ASF/common/components/display/st7565r/st7565r.h \ + ../src/ASF/common/services/clock/sysclk.h ../src/config/conf_clock.h \ + ../src/ASF/common/services/clock/xmega/sysclk.h \ + ../src/ASF/common/boards/board.h \ + ../src/ASF/xmega/boards/xmega_a3bu_xplained/xmega_a3bu_xplained.h \ + ../src/ASF/xmega/drivers/cpu/ccp.h \ + ../src/ASF/common/services/clock/osc.h \ + ../src/ASF/common/services/clock/xmega/osc.h \ + ../src/ASF/common/services/clock/pll.h \ + ../src/ASF/common/services/clock/xmega/pll.h \ + ../src/ASF/common/services/ioport/ioport.h \ + ../src/ASF/common/services/ioport/xmega/ioport.h \ + ../src/ASF/common/services/ioport/xmega/ioport_compat.h \ + ../src/ASF/common/services/ioport/xmega/../ioport.h \ + ../src/ASF/xmega/utils/status_codes.h \ + ../src/ASF/common/services/delay/delay.h \ + ../src/ASF/common/services/delay/xmega/cycle_counter.h \ + ../src/config/conf_st7565r.h ../src/ASF/common/services/spi/usart_spi.h \ + ../src/ASF/common/services/spi/xmega_usart_spi/usart_spi.h \ + ../src/ASF/xmega/drivers/usart/usart.h \ + ../src/ASF/xmega/drivers/pmic/pmic.h ../src/config/conf_usart_spi.h \ + ../src/ASF/common/services/gfx_mono/gfx_mono_framebuffer.h \ + ../src/ASF/common/services/gfx_mono/gfx_mono_generic.h \ + ../src/ASF/common/services/gfx_mono/gfx_mono_text.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdio.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdarg.h \ + ../src/ASF/common/services/gfx_mono/gfx_mono_spinctrl.h \ + ../src/config/conf_spinctrl.h + +../src/ASF/common/services/gfx_mono/sysfont.h: + +../src/config/conf_sysfont.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdint.h: + +../src/ASF/common/services/gfx_mono/gfx_mono.h: + +../src/ASF/xmega/utils/compiler.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\io.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\inttypes.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\iox256a3bu.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\portpins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\common.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\version.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\xmega.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\fuse.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\lock.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\builtins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdlib.h: + +../src/ASF/common/utils/parts.h: + +../src/ASF/xmega/utils/bit_handling/clz_ctz.h: + +../src/ASF/xmega/utils/preprocessor/preprocessor.h: + +../src/ASF/xmega/utils/preprocessor/tpaste.h: + +../src/ASF/xmega/utils/preprocessor/stringz.h: + +../src/ASF/xmega/utils/preprocessor/mrepeat.h: + +../src/ASF/xmega/utils/preprocessor/preprocessor.h: + +../src/ASF/xmega/utils/progmem.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\pgmspace.h: + +../src/ASF/common/utils/interrupt.h: + +../src/ASF/common/utils/interrupt/interrupt_avr8.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\interrupt.h: + +../src/ASF/xmega/utils/progmem.h: + +../src/ASF/common/services/gfx_mono/gfx_mono_c12832_a1z.h: + +../src/ASF/common/components/display/st7565r/st7565r.h: + +../src/ASF/common/services/clock/sysclk.h: + +../src/config/conf_clock.h: + +../src/ASF/common/services/clock/xmega/sysclk.h: + +../src/ASF/common/boards/board.h: + +../src/ASF/xmega/boards/xmega_a3bu_xplained/xmega_a3bu_xplained.h: + +../src/ASF/xmega/drivers/cpu/ccp.h: + +../src/ASF/common/services/clock/osc.h: + +../src/ASF/common/services/clock/xmega/osc.h: + +../src/ASF/common/services/clock/pll.h: + +../src/ASF/common/services/clock/xmega/pll.h: + +../src/ASF/common/services/ioport/ioport.h: + +../src/ASF/common/services/ioport/xmega/ioport.h: + +../src/ASF/common/services/ioport/xmega/ioport_compat.h: + +../src/ASF/common/services/ioport/xmega/../ioport.h: + +../src/ASF/xmega/utils/status_codes.h: + +../src/ASF/common/services/delay/delay.h: + +../src/ASF/common/services/delay/xmega/cycle_counter.h: + +../src/config/conf_st7565r.h: + +../src/ASF/common/services/spi/usart_spi.h: + +../src/ASF/common/services/spi/xmega_usart_spi/usart_spi.h: + +../src/ASF/xmega/drivers/usart/usart.h: + +../src/ASF/xmega/drivers/pmic/pmic.h: + +../src/config/conf_usart_spi.h: + +../src/ASF/common/services/gfx_mono/gfx_mono_framebuffer.h: + +../src/ASF/common/services/gfx_mono/gfx_mono_generic.h: + +../src/ASF/common/services/gfx_mono/gfx_mono_text.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdio.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdarg.h: + +../src/ASF/common/services/gfx_mono/gfx_mono_spinctrl.h: + +../src/config/conf_spinctrl.h: diff --git a/AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/gfx_mono/gfx_mono_text.d b/AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/gfx_mono/gfx_mono_text.d new file mode 100644 index 00000000..19766e9a --- /dev/null +++ b/AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/gfx_mono/gfx_mono_text.d @@ -0,0 +1,179 @@ +src/ASF/common/services/gfx_mono/gfx_mono_text.d \ + src/ASF/common/services/gfx_mono/gfx_mono_text.o: \ + ../src/ASF/common/services/gfx_mono/gfx_mono_text.c \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\assert.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdlib.h \ + ../src/ASF/xmega/utils/progmem.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\pgmspace.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\inttypes.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\io.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\iox256a3bu.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\portpins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\common.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\version.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\xmega.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\fuse.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\lock.h \ + ../src/ASF/common/services/gfx_mono/gfx_mono.h \ + ../src/ASF/xmega/utils/compiler.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\builtins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h \ + ../src/ASF/common/utils/parts.h \ + ../src/ASF/xmega/utils/bit_handling/clz_ctz.h \ + ../src/ASF/xmega/utils/preprocessor/preprocessor.h \ + ../src/ASF/xmega/utils/preprocessor/tpaste.h \ + ../src/ASF/xmega/utils/preprocessor/stringz.h \ + ../src/ASF/xmega/utils/preprocessor/mrepeat.h \ + ../src/ASF/xmega/utils/preprocessor/preprocessor.h \ + ../src/ASF/xmega/utils/progmem.h ../src/ASF/common/utils/interrupt.h \ + ../src/ASF/common/utils/interrupt/interrupt_avr8.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\interrupt.h \ + ../src/ASF/common/services/gfx_mono/gfx_mono_c12832_a1z.h \ + ../src/ASF/common/components/display/st7565r/st7565r.h \ + ../src/ASF/common/services/clock/sysclk.h ../src/config/conf_clock.h \ + ../src/ASF/common/services/clock/xmega/sysclk.h \ + ../src/ASF/common/boards/board.h \ + ../src/ASF/xmega/boards/xmega_a3bu_xplained/xmega_a3bu_xplained.h \ + ../src/ASF/xmega/drivers/cpu/ccp.h \ + ../src/ASF/common/services/clock/osc.h \ + ../src/ASF/common/services/clock/xmega/osc.h \ + ../src/ASF/common/services/clock/pll.h \ + ../src/ASF/common/services/clock/xmega/pll.h \ + ../src/ASF/common/services/ioport/ioport.h \ + ../src/ASF/common/services/ioport/xmega/ioport.h \ + ../src/ASF/common/services/ioport/xmega/ioport_compat.h \ + ../src/ASF/common/services/ioport/xmega/../ioport.h \ + ../src/ASF/xmega/utils/status_codes.h \ + ../src/ASF/common/services/delay/delay.h \ + ../src/ASF/common/services/delay/xmega/cycle_counter.h \ + ../src/config/conf_st7565r.h ../src/ASF/common/services/spi/usart_spi.h \ + ../src/ASF/common/services/spi/xmega_usart_spi/usart_spi.h \ + ../src/ASF/xmega/drivers/usart/usart.h \ + ../src/ASF/xmega/drivers/pmic/pmic.h ../src/config/conf_usart_spi.h \ + ../src/ASF/common/services/gfx_mono/gfx_mono_framebuffer.h \ + ../src/ASF/common/services/gfx_mono/gfx_mono_generic.h \ + ../src/ASF/common/services/gfx_mono/gfx_mono_text.h + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\assert.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdlib.h: + +../src/ASF/xmega/utils/progmem.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\pgmspace.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\inttypes.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\io.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\iox256a3bu.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\portpins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\common.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\version.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\xmega.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\fuse.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\lock.h: + +../src/ASF/common/services/gfx_mono/gfx_mono.h: + +../src/ASF/xmega/utils/compiler.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\builtins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h: + +../src/ASF/common/utils/parts.h: + +../src/ASF/xmega/utils/bit_handling/clz_ctz.h: + +../src/ASF/xmega/utils/preprocessor/preprocessor.h: + +../src/ASF/xmega/utils/preprocessor/tpaste.h: + +../src/ASF/xmega/utils/preprocessor/stringz.h: + +../src/ASF/xmega/utils/preprocessor/mrepeat.h: + +../src/ASF/xmega/utils/preprocessor/preprocessor.h: + +../src/ASF/xmega/utils/progmem.h: + +../src/ASF/common/utils/interrupt.h: + +../src/ASF/common/utils/interrupt/interrupt_avr8.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\interrupt.h: + +../src/ASF/common/services/gfx_mono/gfx_mono_c12832_a1z.h: + +../src/ASF/common/components/display/st7565r/st7565r.h: + +../src/ASF/common/services/clock/sysclk.h: + +../src/config/conf_clock.h: + +../src/ASF/common/services/clock/xmega/sysclk.h: + +../src/ASF/common/boards/board.h: + +../src/ASF/xmega/boards/xmega_a3bu_xplained/xmega_a3bu_xplained.h: + +../src/ASF/xmega/drivers/cpu/ccp.h: + +../src/ASF/common/services/clock/osc.h: + +../src/ASF/common/services/clock/xmega/osc.h: + +../src/ASF/common/services/clock/pll.h: + +../src/ASF/common/services/clock/xmega/pll.h: + +../src/ASF/common/services/ioport/ioport.h: + +../src/ASF/common/services/ioport/xmega/ioport.h: + +../src/ASF/common/services/ioport/xmega/ioport_compat.h: + +../src/ASF/common/services/ioport/xmega/../ioport.h: + +../src/ASF/xmega/utils/status_codes.h: + +../src/ASF/common/services/delay/delay.h: + +../src/ASF/common/services/delay/xmega/cycle_counter.h: + +../src/config/conf_st7565r.h: + +../src/ASF/common/services/spi/usart_spi.h: + +../src/ASF/common/services/spi/xmega_usart_spi/usart_spi.h: + +../src/ASF/xmega/drivers/usart/usart.h: + +../src/ASF/xmega/drivers/pmic/pmic.h: + +../src/config/conf_usart_spi.h: + +../src/ASF/common/services/gfx_mono/gfx_mono_framebuffer.h: + +../src/ASF/common/services/gfx_mono/gfx_mono_generic.h: + +../src/ASF/common/services/gfx_mono/gfx_mono_text.h: diff --git a/AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/gfx_mono/sysfont.d b/AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/gfx_mono/sysfont.d new file mode 100644 index 00000000..98d3eff6 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/gfx_mono/sysfont.d @@ -0,0 +1,186 @@ +src/ASF/common/services/gfx_mono/sysfont.d \ + src/ASF/common/services/gfx_mono/sysfont.o: \ + ../src/ASF/common/services/gfx_mono/sysfont.c \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\assert.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdlib.h \ + ../src/config/conf_sysfont.h \ + ../src/ASF/common/services/gfx_mono/gfx_mono.h \ + ../src/ASF/xmega/utils/compiler.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\io.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\inttypes.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\iox256a3bu.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\portpins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\common.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\version.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\xmega.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\fuse.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\lock.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\builtins.h \ + ../src/ASF/common/utils/parts.h \ + ../src/ASF/xmega/utils/bit_handling/clz_ctz.h \ + ../src/ASF/xmega/utils/preprocessor/preprocessor.h \ + ../src/ASF/xmega/utils/preprocessor/tpaste.h \ + ../src/ASF/xmega/utils/preprocessor/stringz.h \ + ../src/ASF/xmega/utils/preprocessor/mrepeat.h \ + ../src/ASF/xmega/utils/preprocessor/preprocessor.h \ + ../src/ASF/xmega/utils/progmem.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\pgmspace.h \ + ../src/ASF/common/utils/interrupt.h \ + ../src/ASF/common/utils/interrupt/interrupt_avr8.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\interrupt.h \ + ../src/ASF/xmega/utils/progmem.h \ + ../src/ASF/common/services/gfx_mono/gfx_mono_c12832_a1z.h \ + ../src/ASF/common/components/display/st7565r/st7565r.h \ + ../src/ASF/common/services/clock/sysclk.h ../src/config/conf_clock.h \ + ../src/ASF/common/services/clock/xmega/sysclk.h \ + ../src/ASF/common/boards/board.h \ + ../src/ASF/xmega/boards/xmega_a3bu_xplained/xmega_a3bu_xplained.h \ + ../src/ASF/xmega/drivers/cpu/ccp.h \ + ../src/ASF/common/services/clock/osc.h \ + ../src/ASF/common/services/clock/xmega/osc.h \ + ../src/ASF/common/services/clock/pll.h \ + ../src/ASF/common/services/clock/xmega/pll.h \ + ../src/ASF/common/services/ioport/ioport.h \ + ../src/ASF/common/services/ioport/xmega/ioport.h \ + ../src/ASF/common/services/ioport/xmega/ioport_compat.h \ + ../src/ASF/common/services/ioport/xmega/../ioport.h \ + ../src/ASF/xmega/utils/status_codes.h \ + ../src/ASF/common/services/delay/delay.h \ + ../src/ASF/common/services/delay/xmega/cycle_counter.h \ + ../src/config/conf_st7565r.h ../src/ASF/common/services/spi/usart_spi.h \ + ../src/ASF/common/services/spi/xmega_usart_spi/usart_spi.h \ + ../src/ASF/xmega/drivers/usart/usart.h \ + ../src/ASF/xmega/drivers/pmic/pmic.h ../src/config/conf_usart_spi.h \ + ../src/ASF/common/services/gfx_mono/gfx_mono_framebuffer.h \ + ../src/ASF/common/services/gfx_mono/gfx_mono_generic.h \ + ../src/ASF/common/services/gfx_mono/sysfont.h \ + ../src/ASF/common/services/gfx_mono/gfx_mono_text.h + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\assert.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdlib.h: + +../src/config/conf_sysfont.h: + +../src/ASF/common/services/gfx_mono/gfx_mono.h: + +../src/ASF/xmega/utils/compiler.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\io.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\inttypes.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\iox256a3bu.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\portpins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\common.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\version.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\xmega.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\fuse.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\lock.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\builtins.h: + +../src/ASF/common/utils/parts.h: + +../src/ASF/xmega/utils/bit_handling/clz_ctz.h: + +../src/ASF/xmega/utils/preprocessor/preprocessor.h: + +../src/ASF/xmega/utils/preprocessor/tpaste.h: + +../src/ASF/xmega/utils/preprocessor/stringz.h: + +../src/ASF/xmega/utils/preprocessor/mrepeat.h: + +../src/ASF/xmega/utils/preprocessor/preprocessor.h: + +../src/ASF/xmega/utils/progmem.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\pgmspace.h: + +../src/ASF/common/utils/interrupt.h: + +../src/ASF/common/utils/interrupt/interrupt_avr8.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\interrupt.h: + +../src/ASF/xmega/utils/progmem.h: + +../src/ASF/common/services/gfx_mono/gfx_mono_c12832_a1z.h: + +../src/ASF/common/components/display/st7565r/st7565r.h: + +../src/ASF/common/services/clock/sysclk.h: + +../src/config/conf_clock.h: + +../src/ASF/common/services/clock/xmega/sysclk.h: + +../src/ASF/common/boards/board.h: + +../src/ASF/xmega/boards/xmega_a3bu_xplained/xmega_a3bu_xplained.h: + +../src/ASF/xmega/drivers/cpu/ccp.h: + +../src/ASF/common/services/clock/osc.h: + +../src/ASF/common/services/clock/xmega/osc.h: + +../src/ASF/common/services/clock/pll.h: + +../src/ASF/common/services/clock/xmega/pll.h: + +../src/ASF/common/services/ioport/ioport.h: + +../src/ASF/common/services/ioport/xmega/ioport.h: + +../src/ASF/common/services/ioport/xmega/ioport_compat.h: + +../src/ASF/common/services/ioport/xmega/../ioport.h: + +../src/ASF/xmega/utils/status_codes.h: + +../src/ASF/common/services/delay/delay.h: + +../src/ASF/common/services/delay/xmega/cycle_counter.h: + +../src/config/conf_st7565r.h: + +../src/ASF/common/services/spi/usart_spi.h: + +../src/ASF/common/services/spi/xmega_usart_spi/usart_spi.h: + +../src/ASF/xmega/drivers/usart/usart.h: + +../src/ASF/xmega/drivers/pmic/pmic.h: + +../src/config/conf_usart_spi.h: + +../src/ASF/common/services/gfx_mono/gfx_mono_framebuffer.h: + +../src/ASF/common/services/gfx_mono/gfx_mono_generic.h: + +../src/ASF/common/services/gfx_mono/sysfont.h: + +../src/ASF/common/services/gfx_mono/gfx_mono_text.h: diff --git a/AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/ioport/xmega/ioport_compat.d b/AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/ioport/xmega/ioport_compat.d new file mode 100644 index 00000000..1e965942 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/ioport/xmega/ioport_compat.d @@ -0,0 +1,98 @@ +src/ASF/common/services/ioport/xmega/ioport_compat.d \ + src/ASF/common/services/ioport/xmega/ioport_compat.o: \ + ../src/ASF/common/services/ioport/xmega/ioport_compat.c \ + ../src/ASF/common/services/ioport/xmega/ioport_compat.h \ + ../src/ASF/common/services/ioport/xmega/../ioport.h \ + ../src/ASF/common/utils/parts.h ../src/ASF/xmega/utils/compiler.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\io.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\inttypes.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\iox32a4u.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\portpins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\common.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\version.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\xmega.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\fuse.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\lock.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\builtins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdlib.h \ + ../src/ASF/xmega/utils/bit_handling/clz_ctz.h \ + ../src/ASF/xmega/utils/preprocessor/preprocessor.h \ + ../src/ASF/xmega/utils/preprocessor/tpaste.h \ + ../src/ASF/xmega/utils/preprocessor/stringz.h \ + ../src/ASF/xmega/utils/preprocessor/mrepeat.h \ + ../src/ASF/xmega/utils/preprocessor/preprocessor.h \ + ../src/ASF/xmega/utils/progmem.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\pgmspace.h \ + ../src/ASF/common/utils/interrupt.h \ + ../src/ASF/common/utils/interrupt/interrupt_avr8.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\interrupt.h \ + ../src/ASF/common/services/ioport/xmega/../xmega/ioport.h + +../src/ASF/common/services/ioport/xmega/ioport_compat.h: + +../src/ASF/common/services/ioport/xmega/../ioport.h: + +../src/ASF/common/utils/parts.h: + +../src/ASF/xmega/utils/compiler.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\io.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\inttypes.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\iox32a4u.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\portpins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\common.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\version.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\xmega.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\fuse.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\lock.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\builtins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdlib.h: + +../src/ASF/xmega/utils/bit_handling/clz_ctz.h: + +../src/ASF/xmega/utils/preprocessor/preprocessor.h: + +../src/ASF/xmega/utils/preprocessor/tpaste.h: + +../src/ASF/xmega/utils/preprocessor/stringz.h: + +../src/ASF/xmega/utils/preprocessor/mrepeat.h: + +../src/ASF/xmega/utils/preprocessor/preprocessor.h: + +../src/ASF/xmega/utils/progmem.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\pgmspace.h: + +../src/ASF/common/utils/interrupt.h: + +../src/ASF/common/utils/interrupt/interrupt_avr8.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\interrupt.h: + +../src/ASF/common/services/ioport/xmega/../xmega/ioport.h: diff --git a/AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/ioport/xmega/ioport_compat.o b/AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/ioport/xmega/ioport_compat.o new file mode 100644 index 0000000000000000000000000000000000000000..43e17fa8b9339c20c48cd6da5164332cd43dd551 GIT binary patch literal 244868 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 literal 0 HcmV?d00001 diff --git a/AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/sleepmgr/xmega/sleepmgr.d b/AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/sleepmgr/xmega/sleepmgr.d new file mode 100644 index 00000000..b57fa33b --- /dev/null +++ b/AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/sleepmgr/xmega/sleepmgr.d @@ -0,0 +1,104 @@ +src/ASF/common/services/sleepmgr/xmega/sleepmgr.d \ + src/ASF/common/services/sleepmgr/xmega/sleepmgr.o: \ + ../src/ASF/common/services/sleepmgr/xmega/sleepmgr.c \ + ../src/ASF/xmega/utils/compiler.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\io.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\inttypes.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\iox32a4u.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\portpins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\common.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\version.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\xmega.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\fuse.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\lock.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\builtins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdlib.h \ + ../src/ASF/common/utils/parts.h \ + ../src/ASF/xmega/utils/bit_handling/clz_ctz.h \ + ../src/ASF/xmega/utils/preprocessor/preprocessor.h \ + ../src/ASF/xmega/utils/preprocessor/tpaste.h \ + ../src/ASF/xmega/utils/preprocessor/stringz.h \ + ../src/ASF/xmega/utils/preprocessor/mrepeat.h \ + ../src/ASF/xmega/utils/preprocessor/preprocessor.h \ + ../src/ASF/xmega/utils/progmem.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\pgmspace.h \ + ../src/ASF/common/utils/interrupt.h \ + ../src/ASF/common/utils/interrupt/interrupt_avr8.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\interrupt.h \ + ../src/ASF/common/services/sleepmgr/sleepmgr.h \ + ../src/ASF/common/services/sleepmgr/xmega/sleepmgr.h \ + ../src/config/conf_sleepmgr.h ../src/ASF/xmega/drivers/sleep/sleep.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sleep.h + +../src/ASF/xmega/utils/compiler.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\io.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\inttypes.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\iox32a4u.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\portpins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\common.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\version.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\xmega.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\fuse.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\lock.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\builtins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdlib.h: + +../src/ASF/common/utils/parts.h: + +../src/ASF/xmega/utils/bit_handling/clz_ctz.h: + +../src/ASF/xmega/utils/preprocessor/preprocessor.h: + +../src/ASF/xmega/utils/preprocessor/tpaste.h: + +../src/ASF/xmega/utils/preprocessor/stringz.h: + +../src/ASF/xmega/utils/preprocessor/mrepeat.h: + +../src/ASF/xmega/utils/preprocessor/preprocessor.h: + +../src/ASF/xmega/utils/progmem.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\pgmspace.h: + +../src/ASF/common/utils/interrupt.h: + +../src/ASF/common/utils/interrupt/interrupt_avr8.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\interrupt.h: + +../src/ASF/common/services/sleepmgr/sleepmgr.h: + +../src/ASF/common/services/sleepmgr/xmega/sleepmgr.h: + +../src/config/conf_sleepmgr.h: + +../src/ASF/xmega/drivers/sleep/sleep.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sleep.h: diff --git a/AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/sleepmgr/xmega/sleepmgr.o b/AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/sleepmgr/xmega/sleepmgr.o new file mode 100644 index 0000000000000000000000000000000000000000..319182cf8937b7c1acd26af742585edeeb62dc97 GIT binary patch literal 244500 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%0Ah%D%0oD8o5oSRx*`YsqM3B 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 QMtU`aPjkKbcudUy0oAS3t^fc4 literal 0 HcmV?d00001 diff --git a/AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/spi/xmega_spi/spi_master.d b/AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/spi/xmega_spi/spi_master.d new file mode 100644 index 00000000..4bfc2ab4 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/spi/xmega_spi/spi_master.d @@ -0,0 +1,142 @@ +src/ASF/common/services/spi/xmega_spi/spi_master.d \ + src/ASF/common/services/spi/xmega_spi/spi_master.o: \ + ../src/ASF/common/services/spi/xmega_spi/spi_master.c \ + ../src/ASF/common/services/spi/xmega_spi/spi_master.h \ + ../src/ASF/xmega/utils/compiler.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\io.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\inttypes.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\iox256a3bu.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\portpins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\common.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\version.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\xmega.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\fuse.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\lock.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\builtins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdlib.h \ + ../src/ASF/common/utils/parts.h \ + ../src/ASF/xmega/utils/bit_handling/clz_ctz.h \ + ../src/ASF/xmega/utils/preprocessor/preprocessor.h \ + ../src/ASF/xmega/utils/preprocessor/tpaste.h \ + ../src/ASF/xmega/utils/preprocessor/stringz.h \ + ../src/ASF/xmega/utils/preprocessor/mrepeat.h \ + ../src/ASF/xmega/utils/preprocessor/preprocessor.h \ + ../src/ASF/xmega/utils/progmem.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\pgmspace.h \ + ../src/ASF/common/utils/interrupt.h \ + ../src/ASF/common/utils/interrupt/interrupt_avr8.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\interrupt.h \ + ../src/ASF/xmega/utils/status_codes.h \ + ../src/ASF/common/services/ioport/ioport.h \ + ../src/ASF/common/services/ioport/xmega/ioport.h \ + ../src/ASF/common/services/ioport/xmega/ioport_compat.h \ + ../src/ASF/common/services/ioport/xmega/../ioport.h \ + ../src/ASF/xmega/drivers/spi/spi.h ../src/config/conf_spi_master.h \ + ../src/ASF/common/services/clock/sysclk.h ../src/config/conf_clock.h \ + ../src/ASF/common/services/clock/xmega/sysclk.h \ + ../src/ASF/common/boards/board.h \ + ../src/ASF/xmega/boards/xmega_a3bu_xplained/xmega_a3bu_xplained.h \ + ../src/ASF/xmega/drivers/cpu/ccp.h \ + ../src/ASF/common/services/clock/osc.h \ + ../src/ASF/common/services/clock/xmega/osc.h \ + ../src/ASF/common/services/clock/pll.h \ + ../src/ASF/common/services/clock/xmega/pll.h + +../src/ASF/common/services/spi/xmega_spi/spi_master.h: + +../src/ASF/xmega/utils/compiler.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\io.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\inttypes.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\iox256a3bu.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\portpins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\common.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\version.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\xmega.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\fuse.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\lock.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\builtins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdlib.h: + +../src/ASF/common/utils/parts.h: + +../src/ASF/xmega/utils/bit_handling/clz_ctz.h: + +../src/ASF/xmega/utils/preprocessor/preprocessor.h: + +../src/ASF/xmega/utils/preprocessor/tpaste.h: + +../src/ASF/xmega/utils/preprocessor/stringz.h: + +../src/ASF/xmega/utils/preprocessor/mrepeat.h: + +../src/ASF/xmega/utils/preprocessor/preprocessor.h: + +../src/ASF/xmega/utils/progmem.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\pgmspace.h: + +../src/ASF/common/utils/interrupt.h: + +../src/ASF/common/utils/interrupt/interrupt_avr8.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\interrupt.h: + +../src/ASF/xmega/utils/status_codes.h: + +../src/ASF/common/services/ioport/ioport.h: + +../src/ASF/common/services/ioport/xmega/ioport.h: + +../src/ASF/common/services/ioport/xmega/ioport_compat.h: + +../src/ASF/common/services/ioport/xmega/../ioport.h: + +../src/ASF/xmega/drivers/spi/spi.h: + +../src/config/conf_spi_master.h: + +../src/ASF/common/services/clock/sysclk.h: + +../src/config/conf_clock.h: + +../src/ASF/common/services/clock/xmega/sysclk.h: + +../src/ASF/common/boards/board.h: + +../src/ASF/xmega/boards/xmega_a3bu_xplained/xmega_a3bu_xplained.h: + +../src/ASF/xmega/drivers/cpu/ccp.h: + +../src/ASF/common/services/clock/osc.h: + +../src/ASF/common/services/clock/xmega/osc.h: + +../src/ASF/common/services/clock/pll.h: + +../src/ASF/common/services/clock/xmega/pll.h: diff --git a/AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/spi/xmega_usart_spi/usart_spi.d b/AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/spi/xmega_usart_spi/usart_spi.d new file mode 100644 index 00000000..d9f6c9a5 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/spi/xmega_usart_spi/usart_spi.d @@ -0,0 +1,145 @@ +src/ASF/common/services/spi/xmega_usart_spi/usart_spi.d \ + src/ASF/common/services/spi/xmega_usart_spi/usart_spi.o: \ + ../src/ASF/common/services/spi/xmega_usart_spi/usart_spi.c \ + ../src/ASF/common/services/spi/xmega_usart_spi/usart_spi.h \ + ../src/ASF/xmega/utils/compiler.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\io.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\inttypes.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\iox256a3bu.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\portpins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\common.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\version.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\xmega.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\fuse.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\lock.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\builtins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdlib.h \ + ../src/ASF/common/utils/parts.h \ + ../src/ASF/xmega/utils/bit_handling/clz_ctz.h \ + ../src/ASF/xmega/utils/preprocessor/preprocessor.h \ + ../src/ASF/xmega/utils/preprocessor/tpaste.h \ + ../src/ASF/xmega/utils/preprocessor/stringz.h \ + ../src/ASF/xmega/utils/preprocessor/mrepeat.h \ + ../src/ASF/xmega/utils/preprocessor/preprocessor.h \ + ../src/ASF/xmega/utils/progmem.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\pgmspace.h \ + ../src/ASF/common/utils/interrupt.h \ + ../src/ASF/common/utils/interrupt/interrupt_avr8.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\interrupt.h \ + ../src/ASF/xmega/utils/status_codes.h \ + ../src/ASF/common/services/ioport/ioport.h \ + ../src/ASF/common/services/ioport/xmega/ioport.h \ + ../src/ASF/common/services/ioport/xmega/ioport_compat.h \ + ../src/ASF/common/services/ioport/xmega/../ioport.h \ + ../src/ASF/xmega/drivers/usart/usart.h \ + ../src/ASF/xmega/drivers/pmic/pmic.h ../src/ASF/xmega/drivers/cpu/ccp.h \ + ../src/config/conf_usart_spi.h ../src/ASF/common/services/clock/sysclk.h \ + ../src/config/conf_clock.h \ + ../src/ASF/common/services/clock/xmega/sysclk.h \ + ../src/ASF/common/boards/board.h \ + ../src/ASF/xmega/boards/xmega_a3bu_xplained/xmega_a3bu_xplained.h \ + ../src/ASF/common/services/clock/osc.h \ + ../src/ASF/common/services/clock/xmega/osc.h \ + ../src/ASF/common/services/clock/pll.h \ + ../src/ASF/common/services/clock/xmega/pll.h + +../src/ASF/common/services/spi/xmega_usart_spi/usart_spi.h: + +../src/ASF/xmega/utils/compiler.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\io.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\inttypes.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\iox256a3bu.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\portpins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\common.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\version.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\xmega.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\fuse.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\lock.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\builtins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdlib.h: + +../src/ASF/common/utils/parts.h: + +../src/ASF/xmega/utils/bit_handling/clz_ctz.h: + +../src/ASF/xmega/utils/preprocessor/preprocessor.h: + +../src/ASF/xmega/utils/preprocessor/tpaste.h: + +../src/ASF/xmega/utils/preprocessor/stringz.h: + +../src/ASF/xmega/utils/preprocessor/mrepeat.h: + +../src/ASF/xmega/utils/preprocessor/preprocessor.h: + +../src/ASF/xmega/utils/progmem.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\pgmspace.h: + +../src/ASF/common/utils/interrupt.h: + +../src/ASF/common/utils/interrupt/interrupt_avr8.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\interrupt.h: + +../src/ASF/xmega/utils/status_codes.h: + +../src/ASF/common/services/ioport/ioport.h: + +../src/ASF/common/services/ioport/xmega/ioport.h: + +../src/ASF/common/services/ioport/xmega/ioport_compat.h: + +../src/ASF/common/services/ioport/xmega/../ioport.h: + +../src/ASF/xmega/drivers/usart/usart.h: + +../src/ASF/xmega/drivers/pmic/pmic.h: + +../src/ASF/xmega/drivers/cpu/ccp.h: + +../src/config/conf_usart_spi.h: + +../src/ASF/common/services/clock/sysclk.h: + +../src/config/conf_clock.h: + +../src/ASF/common/services/clock/xmega/sysclk.h: + +../src/ASF/common/boards/board.h: + +../src/ASF/xmega/boards/xmega_a3bu_xplained/xmega_a3bu_xplained.h: + +../src/ASF/common/services/clock/osc.h: + +../src/ASF/common/services/clock/xmega/osc.h: + +../src/ASF/common/services/clock/pll.h: + +../src/ASF/common/services/clock/xmega/pll.h: diff --git a/AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.d b/AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.d new file mode 100644 index 00000000..c9897ad0 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.d @@ -0,0 +1,204 @@ +src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.d \ + src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o: \ + ../src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.c \ + ../src/asf.h ../src/ASF/xmega/drivers/cpu/ccp.h \ + ../src/ASF/xmega/utils/compiler.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\io.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\inttypes.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\iox32a4u.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\portpins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\common.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\version.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\xmega.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\fuse.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\lock.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\builtins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdlib.h \ + ../src/ASF/common/utils/parts.h \ + ../src/ASF/xmega/utils/bit_handling/clz_ctz.h \ + ../src/ASF/xmega/utils/preprocessor/preprocessor.h \ + ../src/ASF/xmega/utils/preprocessor/tpaste.h \ + ../src/ASF/xmega/utils/preprocessor/stringz.h \ + ../src/ASF/xmega/utils/preprocessor/mrepeat.h \ + ../src/ASF/xmega/utils/preprocessor/preprocessor.h \ + ../src/ASF/xmega/utils/progmem.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\pgmspace.h \ + ../src/ASF/common/utils/interrupt.h \ + ../src/ASF/common/utils/interrupt/interrupt_avr8.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\interrupt.h \ + ../src/ASF/xmega/drivers/cpu/xmega_reset_cause.h \ + ../src/ASF/xmega/drivers/cpu/ccp.h \ + ../src/ASF/common/boards/user_board/user_board.h \ + ../src/config/conf_board.h ../src/ASF/common/boards/board.h \ + ../src/ASF/common/services/ioport/ioport.h \ + ../src/ASF/common/services/ioport/xmega/ioport.h \ + ../src/ASF/xmega/drivers/nvm/nvm.h \ + ../src/ASF/xmega/drivers/sleep/sleep.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sleep.h \ + ../src/ASF/common/services/sleepmgr/sleepmgr.h \ + ../src/ASF/common/services/sleepmgr/xmega/sleepmgr.h \ + ../src/config/conf_sleepmgr.h \ + ../src/ASF/common/services/sleepmgr/xmega/sleepmgr.h \ + ../src/ASF/common/services/clock/sysclk.h ../src/config/conf_clock.h \ + ../src/ASF/common/services/clock/xmega/sysclk.h \ + ../src/ASF/common/services/clock/osc.h \ + ../src/ASF/common/services/clock/xmega/osc.h \ + ../src/ASF/common/services/clock/pll.h \ + ../src/ASF/common/services/clock/xmega/pll.h \ + ../src/ASF/common/services/usb/udc/udc.h ../src/config/conf_usb.h \ + ../src/ASF/common/services/usb/class/vendor/device/udi_vendor_conf.h \ + ../src/ASF/common/services/usb/class/vendor/device/udi_vendor.h \ + ../src/ASF/common/services/usb/usb_protocol.h \ + ../src/ASF/common/services/usb/usb_atmel.h \ + ../src/ASF/common/services/usb/class/vendor/usb_protocol_vendor.h \ + ../src/ASF/common/services/usb/udc/udd.h \ + ../src/ASF/common/services/usb/udc/udc_desc.h \ + ../src/ASF/common/services/usb/udc/udi.h \ + ../src/ASF/common/services/usb/udc/udc_desc.h \ + ../src/ASF/common/services/usb/udc/udi.h ../src/ui.h ../src/main.h \ + ../src/ASF/common/services/usb/udc/udd.h \ + ../src/ASF/common/services/usb/class/vendor/device/udi_vendor.h \ + ../src/ASF/xmega/utils/status_codes.h + +../src/asf.h: + +../src/ASF/xmega/drivers/cpu/ccp.h: + +../src/ASF/xmega/utils/compiler.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\io.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\inttypes.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\iox32a4u.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\portpins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\common.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\version.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\xmega.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\fuse.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\lock.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\builtins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdlib.h: + +../src/ASF/common/utils/parts.h: + +../src/ASF/xmega/utils/bit_handling/clz_ctz.h: + +../src/ASF/xmega/utils/preprocessor/preprocessor.h: + +../src/ASF/xmega/utils/preprocessor/tpaste.h: + +../src/ASF/xmega/utils/preprocessor/stringz.h: + +../src/ASF/xmega/utils/preprocessor/mrepeat.h: + +../src/ASF/xmega/utils/preprocessor/preprocessor.h: + +../src/ASF/xmega/utils/progmem.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\pgmspace.h: + +../src/ASF/common/utils/interrupt.h: + +../src/ASF/common/utils/interrupt/interrupt_avr8.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\interrupt.h: + +../src/ASF/xmega/drivers/cpu/xmega_reset_cause.h: + +../src/ASF/xmega/drivers/cpu/ccp.h: + +../src/ASF/common/boards/user_board/user_board.h: + +../src/config/conf_board.h: + +../src/ASF/common/boards/board.h: + +../src/ASF/common/services/ioport/ioport.h: + +../src/ASF/common/services/ioport/xmega/ioport.h: + +../src/ASF/xmega/drivers/nvm/nvm.h: + +../src/ASF/xmega/drivers/sleep/sleep.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sleep.h: + +../src/ASF/common/services/sleepmgr/sleepmgr.h: + +../src/ASF/common/services/sleepmgr/xmega/sleepmgr.h: + +../src/config/conf_sleepmgr.h: + +../src/ASF/common/services/sleepmgr/xmega/sleepmgr.h: + +../src/ASF/common/services/clock/sysclk.h: + +../src/config/conf_clock.h: + +../src/ASF/common/services/clock/xmega/sysclk.h: + +../src/ASF/common/services/clock/osc.h: + +../src/ASF/common/services/clock/xmega/osc.h: + +../src/ASF/common/services/clock/pll.h: + +../src/ASF/common/services/clock/xmega/pll.h: + +../src/ASF/common/services/usb/udc/udc.h: + +../src/config/conf_usb.h: + +../src/ASF/common/services/usb/class/vendor/device/udi_vendor_conf.h: + +../src/ASF/common/services/usb/class/vendor/device/udi_vendor.h: + +../src/ASF/common/services/usb/usb_protocol.h: + +../src/ASF/common/services/usb/usb_atmel.h: + +../src/ASF/common/services/usb/class/vendor/usb_protocol_vendor.h: + +../src/ASF/common/services/usb/udc/udd.h: + +../src/ASF/common/services/usb/udc/udc_desc.h: + +../src/ASF/common/services/usb/udc/udi.h: + +../src/ASF/common/services/usb/udc/udc_desc.h: + +../src/ASF/common/services/usb/udc/udi.h: + +../src/ui.h: + +../src/main.h: + +../src/ASF/common/services/usb/udc/udd.h: + +../src/ASF/common/services/usb/class/vendor/device/udi_vendor.h: + +../src/ASF/xmega/utils/status_codes.h: diff --git a/AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o b/AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/usb/class/vendor/device/example/atxmega256a3bu_xmega_a3bu_xplained/ui.o new file mode 100644 index 0000000000000000000000000000000000000000..4a1003a3a47a8aa2c54aaf386341d9c1c1eab12e GIT binary patch literal 273744 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 RzxT8V+uyNG_&t8-{{us^$r1nn literal 0 HcmV?d00001 diff --git a/AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/usb/class/vendor/device/udi_vendor.d b/AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/usb/class/vendor/device/udi_vendor.d new file mode 100644 index 00000000..4f8552c4 --- /dev/null +++ b/AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/usb/class/vendor/device/udi_vendor.d @@ -0,0 +1,135 @@ +src/ASF/common/services/usb/class/vendor/device/udi_vendor.d \ + src/ASF/common/services/usb/class/vendor/device/udi_vendor.o: \ + ../src/ASF/common/services/usb/class/vendor/device/udi_vendor.c \ + ../src/config/conf_usb.h ../src/ASF/xmega/utils/compiler.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\io.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\inttypes.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdint.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\iox32a4u.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\portpins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\common.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\version.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\xmega.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\fuse.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\lock.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\builtins.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdlib.h \ + ../src/ASF/common/utils/parts.h \ + ../src/ASF/xmega/utils/bit_handling/clz_ctz.h \ + ../src/ASF/xmega/utils/preprocessor/preprocessor.h \ + ../src/ASF/xmega/utils/preprocessor/tpaste.h \ + ../src/ASF/xmega/utils/preprocessor/stringz.h \ + ../src/ASF/xmega/utils/preprocessor/mrepeat.h \ + ../src/ASF/xmega/utils/preprocessor/preprocessor.h \ + ../src/ASF/xmega/utils/progmem.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\pgmspace.h \ + ../src/ASF/common/utils/interrupt.h \ + ../src/ASF/common/utils/interrupt/interrupt_avr8.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\interrupt.h \ + ../src/ASF/common/services/usb/class/vendor/device/udi_vendor_conf.h \ + ../src/ASF/common/services/usb/class/vendor/device/udi_vendor.h \ + ../src/ASF/common/services/usb/usb_protocol.h \ + ../src/ASF/common/services/usb/usb_atmel.h \ + ../src/ASF/common/services/usb/class/vendor/usb_protocol_vendor.h \ + ../src/ASF/common/services/usb/udc/udd.h \ + ../src/ASF/common/services/usb/udc/udc_desc.h \ + ../src/ASF/common/services/usb/udc/udi.h \ + ../src/ASF/common/services/usb/udc/udc_desc.h \ + ../src/ASF/common/services/usb/udc/udi.h ../src/ui.h ../src/main.h \ + ../src/ASF/common/services/usb/udc/udc.h \ + ../src/ASF/common/services/usb/udc/udd.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\string.h + +../src/config/conf_usb.h: + +../src/ASF/xmega/utils/compiler.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\io.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\inttypes.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdint.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\iox32a4u.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\portpins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\common.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\version.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\xmega.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\fuse.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\lock.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\builtins.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stdbool.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\lib\gcc\avr\4.8.1\include\stddef.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\stdlib.h: + +../src/ASF/common/utils/parts.h: + +../src/ASF/xmega/utils/bit_handling/clz_ctz.h: + +../src/ASF/xmega/utils/preprocessor/preprocessor.h: + +../src/ASF/xmega/utils/preprocessor/tpaste.h: + +../src/ASF/xmega/utils/preprocessor/stringz.h: + +../src/ASF/xmega/utils/preprocessor/mrepeat.h: + +../src/ASF/xmega/utils/preprocessor/preprocessor.h: + +../src/ASF/xmega/utils/progmem.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\pgmspace.h: + +../src/ASF/common/utils/interrupt.h: + +../src/ASF/common/utils/interrupt/interrupt_avr8.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\avr\interrupt.h: + +../src/ASF/common/services/usb/class/vendor/device/udi_vendor_conf.h: + +../src/ASF/common/services/usb/class/vendor/device/udi_vendor.h: + +../src/ASF/common/services/usb/usb_protocol.h: + +../src/ASF/common/services/usb/usb_atmel.h: + +../src/ASF/common/services/usb/class/vendor/usb_protocol_vendor.h: + +../src/ASF/common/services/usb/udc/udd.h: + +../src/ASF/common/services/usb/udc/udc_desc.h: + +../src/ASF/common/services/usb/udc/udi.h: + +../src/ASF/common/services/usb/udc/udc_desc.h: + +../src/ASF/common/services/usb/udc/udi.h: + +../src/ui.h: + +../src/main.h: + +../src/ASF/common/services/usb/udc/udc.h: + +../src/ASF/common/services/usb/udc/udd.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.1061\avr8-gnu-toolchain\avr\include\string.h: diff --git a/AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/usb/class/vendor/device/udi_vendor.o b/AVR Code/USB_BULK_TEST/Debug/src/ASF/common/services/usb/class/vendor/device/udi_vendor.o new file mode 100644 index 0000000000000000000000000000000000000000..7770498089efe1cfdc48db8253eb281ca89a9753 GIT binary patch literal 268576 zcmeF)cYGYzdGPxMNzk(7C{dhh$H|6@9nhwvT>u0?TaL2;79=c?fKf!s(VI0$f)Zo4 zu*kCGIPAUm-h1!8i@o;+Q-sF#a#m|TH-I<-8ot-&z&U4BP z{wtW16&DxhasI`53OwOCkEit)-*L^ z)}LEHwEnC07uLGg`ql>4kFEb^ZDeg?ZDwt5ZE5|)`lq%U@Hm&=4JZ;|atk(Hg2DCZ($^d=8jW6yl zOLVUDn-%W1{-kws++FjYyLR+4eXqCt@A8AVoA$H1wNn58xZmIP8y43!ZhG7=PPVzI z>-}AyKkoC&fXL--PsU!}?m6qXk62%Rp#ArQiXKln^SXjbQjzJ(S;w_poUHBfl-EhQ z-~2?Uaj)o1g>vx?o3ylV{8rOXxpH6AH_BCr2j*U3?iJ=(#cZwooSJ6s3aoA5jb-{q z{3{iH68BhMnD4Lf&vD7R_M3J#U}xF83h8m0Fv`7Ij+Ha)Yz1aB?QBJl*@+6lxQY4& zU$3w;Zm|4#R@xQ)1-qlaV2_=(U$EECmglqk?5zF1{dP8G_i1&RpGB%v?Ff{*yId@w^)M zP&QUBPTur*UMr_t{zlwu%3Lvf_YLMs z_#Lmy?&+8E{SETu5>(aO3jPinq2>!541Gs+h#La&dQ(bI(DPKExXZQ zIqO|=Hu^w6@E2@!Z`22L<8hDW1Ake!RRd4lUOim;@2_+cw^x6i{$qCEZ2RtC>oQGU z--`RV+}GQDE3QGD?^_k?_lqm(7gzpH+{fRlShrtXJ@dN3w<`XkUtDp&xN@!KGj<=Y zl--Bl$@RxRT#4R?E7ALKHP$}FCI0@q@NEu5d|cUms3?c&Z_IIsk8^h7JNi@O;^UmX zV7_8ptlcR0^>+X5{rFCd{pjKD$9GEY$9GEY$KS@>kGSODe>eWt{Jvjkl8={UAi2Iy zDtctejomlel2?v1$bzW&YE%D?{Y*NZB?5tkqLCl!aJOWG^< z51!Xv`zKj0m&adt%D?`@*M9U`_BW+qu*;>Ci2r8XYp==j_&8Z!@sC(3KKq+#uX;RR zv!9V!$wKUkujz_kw=2rlbj4Ty-1Cp$(3M{MWBEdT@eN%f`BDY8Za(ySf^7Y7{z!5m z`SdI7i+=h~{ygppVCR#*9^ za;~=Z-zJB*FB|&1@a#{%@vi( z9~NDwQsg3C@MiSx=py%Dd5>hY&YaGew5$ts#+2>OyJ|(x$Nl0O_A_aac``3&oeCbw z#YQ=Ejukx(`o(<|`6;qF=Y9QDgBYKR-gZR~8Diw8>X-S{S3l^hGbAbGeX zgs&61q|Lu?S&6+o9<9geKNAqVK(o^SOOp!hor#^xd*aH!^YwV2Zn}J8`S^Ftiyyrj zUu<5~dyTbz_l@{B&4Ta#QTeYE^H+$M%vnkYLU5+#&z67PzPec9kL|0=75>D&x?154 z`|3u8Keey!RQRTSb-%)&@v1`kcmLcj%lr%bBI_^hi|T)6UX*{wF0hNU|C$%Pd9M7o zB4@k4@@@OW{C{KDPyCL3k@UCrt!m%4KczzXZm;~EJt6@w8>}7mZT6$xU-^6c+2l&j z_RCi&pZg~7GmShx<%h@pL%iP{$E2_GM)_ZV*M3z}h4>`%R@LuCe!hJ2KiaRWTG3fE z!M;e2=SAdqR4AX4P@#Nky!&HD#8tLyl^+@RihWt3eA3tKMyghMH;2z+$}zB&S59f7Zoz*k4$t0VB$5%}r|#5e*PHhQ#mRQ_q~ z_z(Ib{?|G+^9lMQzM7eiFqNeEkuV+Rz(Uvv+h8{wfTM5{F2Gf|1&^V%X}pN<09~OM z^oJoZ62`$~m;rNP1+0aQunl&@0XPaL;T&9s8*mrCg!ZPs7~ci@!w?t=(_l6%ft9ch zPQiJ&2an)OXm8F?d^hL~17N7ZoUC7%(^St)8<^?8nQ3D))h<9!d@D2k)J*@wO#jPF zrPWLR#dmCTHG-#$-W?J1$YnW-anf}yF-!s!3Gu3W8Pkb#i%{5cg4i*11^IFFgc;dAcOM5DH zs-p@#@wLsgj+uU7raHR7Lt8<-jxg}V|I$oNejh*TFU-tn7z1Nr9E^tvFcBufWS9a| zVH!+_888!O!EBfVb73CLhXt?@7Qtdz0!v{TEQb}a5>~-#SOaU}Ggt@fVFPT0O|TiZ zz*g7>+hGUngk7*3_P|~^2FKw9d=4k!6r6@La2C$NdAI-<;SyYiD{vidz)iRXx8V-l zg?n%x9>5py5FWu}cmhwM^h*yxCOW24%~$Y@C7`CNAMV)z*A^#TJ_`GKzrx_9iaKLtdO%O;1-+pU^oId3 z5Qe}|7zV>(1dN0+Fc!wac$ff_VG2xzX)qmTz)Y9}b73CLhXt?@7Qtdz0!v{TEQb}a z5>~-#SOaU}Ggt@fVFPT0O|TiZz*g7>+hGUngk7*3_P}1)2m9dw9E3w~7>>YEI0nbz z1bhxB;S`*PGjJ9zz(u$Om*EOrg==sfZoo~r1-Ic2+=Y8^A0EIL@ED%JQ+NhnLhHXK zzlOHZ4%$Np=m=e)D|CbI&;xoxFX#<@pfB`;{xARr!XOw7LtrQjgW)g&M#3l<4P#&| zjDzto0VcvEm<&^3DolgvFau`89GDC9U_LB>g|G+~!xC5uD_|w8g4M7F*1~774mQFj z*bG}>D{O=9umg6(9@q=}U_TsygK!8A!x19@q=} zU_TsygK!8A!x1lKKN9Y8dp$l|{ZqOZiKu_oeeW4%phXF7U2Ekw$ z0z+XK42Kag5=Oyj7z1Nr9E^tvFcBufWS9ceVFt{ESuh*sz+9LI^I-ujghj9zmcUY2 z2Fqautb|pt7CwV@upTzRM%V~-#SOaU}Ggt@fVFPT0O|TiZ!A{r( zyI~LPg?+Fe4#8nK0!QH(9ETHd3QofrI13lxB3y#Ya0RZyHMkBp;3nLH+i(Z&!acYT z58w-U2#??~Jb|b14BD766ZwSLh4$ALO19EJ)sZug?`W<2EafV1cPBH41?h?0!G3p z7z1Nr0!)O-Fa@T;beIXVU=GZM`LF;M!xC5q%V8y~f^D!JcET>$1AAdV9DqY`7>>d* zI02u-gugRo<3yMQlVJ)>g=sJyX2L9(2lHVeEP^Gl6qdsZSOu%$Ggt>3U?XgXEwBx? z!%o-*dto2!hXZgB4#5#P3di9DoP<+w8qUC3I0xt90$hYka22k>4Y&!n;SSt``|uDR z!DDy=PvIG~_7dbnJ7^Cbpd)mG&d>$ALO19RJ)kG_fxgfW`ojPi2!mk=jDV3a2FAiT z7!MO*B20qGFa@T+J_z8$oO&d>$ALl5W)y`VSrfqu{*2EafV1cPB142O|03dX`X zm;e)DGE9MKFdb&Y9GD05VIeGnC9o7$z)DyJt6>eSh0kCetcMM-5jMeQ*aBN&8*GOi zup9QkKG+Wj;Sd~wqi`Hfz-c%GXW<;2hYN5KF2QBE0@vU=+<=>K3vR<5xC{5-K0Jg+ z@ED%JQ+NhnLhDK<4Yq-{&>lKKN9Y8dp$l|{ZqOZiKyT;+eW4%phXF7M2Ez~-3d3MH zjD%4z8pgm_7zYzzB20!UFdb&VOqd0;VGhiL`LF;M!Xj7<%V0UIfR(TcR>K-t3mae~ zY=$kc4YtEh*adrFFC2h_a2SrjaX0~=!$~*=r{O$YfQxVmF2fbL2G`*x+=AP12kyc> zxDOBD3wQ`m;3<3wt=}~1vpsZxPS6>;LO19EJ)t-Bfqu{*2EafV1cPB142O|03dX=# z7!MO*5=@3EFcqf3beIXVU^dKwxiAkF!Xj75jm18ZR&tcMM-5jMeQ z*b3WVJM4g+unYFWKG+Wj;2<1=!*B$S!ZA1wC*X5938&yRoPo1&0WQL2xB}PUI^2Mp za0_n3UAPDL;Q@RB58(+sg)gD?KbX|o7TQ4v=m?#m3v`3-&=Yz=ALt7MU?2>JAutSv z!$=qfV_+`5A20~a1ai`5jYCR;RKw7Q*ai} z!Fjj<7vU0Ifva#0uEPzu3Af=6+=Y8^A0EI%cm$8(2|R^o(Dr-gOt*s$&=ER8XXpZ5 zp&N9Ep3n<=Lm%i1{a_#rg26BZhQcry4kKVBjDj&R7RJGNm;e)D5=@3EFcqf5444VC zU^dKwxiAkF!Xj75jm18ZSDY=F(M1-8OA*bX~jC+vdVum|?RemDRJ z;Sd~#BXAUs!ErbVr{FZ4fwOQ9F2F^&3|HV9T!))*3+}*OxDOBD5j=*c@C?3$*8gad za2sd~?V$s7g3iztxVaFcL<=SQrQ6VFFBqNiYSb z!Zer;Ghimng4r+^=D~be01IIeEQTep99F#e zhl6kkj=)hk4kzFwoPx7(4$i{`xCocv3S5Qja070`9k>hk;66NnhwuoV!ZT>iZ8>eA zEwqF7&;dF^C+G^@pa=AXKF}BXL4Ozk17Q#hh9NK%hQV+c0V81)jD~SA9wxv5jm18db+`dH;WpfX zj+ITu*$FyB7w8JzpgZ({UeFu*Kwszw{b2wMgwZet#=&@)1e0M3OoeGM9cI8xm<6+8 z4$OslFdr7dVps~xU^%RSm9Prdz*_hW*1>w%0GnY8Y=v#G9d^Jj*bRGO9~^*#a2Srj zF*pvV;53|pvv3a1!v(kqSKun#fSYg&Zo?h83-{pxd;t&P5j=)x@FleQzDZ|op(AvH z&d>$ALO19EJ)t-Bfqu{*2Ekw$0z+XK42O|03dX=#m;e)DGE9M~Fb$@|444gbU>?ke zg|G;gz*1NaD_|9@hPCh+tb_Hi0XD)G*b3WVJM4g+up9QkKG+Wj;Sd~wqi`Hfz)3g- zXW<-NfQxVmF2fbL3OC>;+=e@F5AMSk@DLuu6LhbxNEij9VGN9g@h}0Vz*LwHGhi0XhPf~g7QjMS3`<}c zEQgh_3f90{SO@E2BW!}Luno4u4%i91U=Qqt{cr#d!C^QG$KV8f4kzIhoQ5-S7S6#% zxCB?>8r*=Ja2xKxJ-82Fz(aThkKqYCg=g?3w5~#B1lmIf=mediD|CY%&=dMVU+515 zU=R$3p)d?a!YCLGV_+!$#NyTVN|}haIpR_P{>a4+r589EKxs6pq1hH~}Z&6r6@L za2C$NdAI-@xJh{xCi&)0ek@u;SoHBC-4lugf{O`PD49r4;`Q*bb`*%1-e2H=n1`` zH}rwNFaQR^AQ%ioU?>cS5ik-)!Dtu*<6#0!gh?tH=>fK9L&w!$_z3`gJ?9EZ>0B%Fpba1PGHLwE#F;3<3w zt$id7Xa^mjBXou?&>ea}Pv`}`p%3(he$XEVz+e~x!(cd!gi$aW#=uw@2jgJ^Ook~i z4W`2^m<@AaF3f}ZumBdqVpsypU^%RSm9Pp{!x~r%pTRoV2%BIlY=iBv19rkL*aLfE zAMA$%a1f5bQ8)(2;RJjRr{FZ4fwOQ9&ch|R3|HVPT!ZUy6K=sBxC?D~xI|lM4;`Qr zbcO*i5C+2#7zV>(B#eS_FdinrM3@AVVG2xzX)qmT!EBfd^I!oigvGD~mcepZ39DcY ztc7*39yY;d*b3WV2keC1um|?RemDq+;0PRr<8T5_!D%=HXW<;2hf8o7uE15e2G`*x z+=AP12kyc>_yQinBX|r?;3<3wtrH3Ip)It7_RtYJL1*X!U7;KFfS%9`dP5)R3j<&v z41&Qh1ct(J7y%<;6pV&3FdinrB$y0SVH(VUnJ^pXz&w}_i(v^YgXORiR>2xr3+rG# zY=lj)6}G_+*a^E~5A20~upbVl{02l~^U@#1UVK5v>YEI0nbz1bhys;S8LGb8sFmz(u$Om*EQBhC6T%?!y=G5FW!5cm`iW z>twPuXbbJ219XH=&>6ZwSLgvfp%?UqKF}8iz(5!bLtq4qgi$aW#=uw@2jgJ^OoXX0 z4W`2km!(cd!fRQi?M#C7G z1e0MJOotgT6Xw8Nm&tM&FgiWv+w!n7S0lQ%j?1uwz z7>>YkI02{NG@OI;a0xEMHMkD9;5OWY`|uDR!Bcn!Uqb5?k`1(lcF-O=L1*X&-Ju8c zgkI1a`aypf00UtV42EGa97e%t7z1Nr0!)NSFd3%7beI7%VGhiNc`zRq!D3hfOJNx- zhZV3AR>5jm18ZSDY=Dih2{ywP*bX~jC+vc~un+db0XPgt;3yn}<8T5_!D%=HXW<;2 zhYN5KuE15e0XN|e+=U151w4i)@FlcPHR-G!w1-a68M;At=mou@AM}SoFc^lxa2Nq2 zVHAvpF)$V;z(kk=Q(+oRhZ!&v=D=K-2lHV8EQBSn6qdnqSP83O9ju29un9K97T5~g zVF&DlU9boC!amp!2jLJLhNEx{j>8E!38&yRoPl$29xlK|xC~d|DqMpba1(C9ZMX~f z;66Nnhwum2-57zV>(1dN1H zFdD|ec$feaVG>M-888!O!EBfZ^I-ujghj9zmcVjY0V`n@tcA~DoxwbXlp8Q;=cnbG zMoQX_XbPZaNBm4&!ueoh)yzrxp_%^3Oy4!rADihvnQ6dG)6F!)Of$_iXr@_aTHQ=* z=+x{PgY9dYrA^HA-_5k8nf}U5e`BWqX{PpRukGT@+(9@5hv5hugX3@-&VqfY?{((x z!vnAn^=(tmd_z0v20dT^3*1@%7NtYn1d0YW4f|D&iCDJp&s$v(+xp6}mxp=m9;Um!aZF=IrBnmoT>!mcepZ0rnuQ zV$MFgcMWs)$b81!I#>_(+0h%B+hM49nYm7!%+A1ZkMGKyO(5Nwv+2Y>^|==ddqW@S z3;m!!kgzK94Csmn&BBU3%A14R*HCdVb0ZAqD06)2Fpapx^*wvs><{>TH%LxUWWMzS zGyOkiT5P5b%=Fi0+Li-zioIVT-zYc1o&fvM@w3bgj5qHMH<;Zf?+KX2^~?`+dZ^fj@GRXDrx2biZ@ z{{01WUxLjc>?yaWbqGgf1lT-bCUc8n4Qz#da1yS;O}GR1;UPSMHYA6BFa*ZKB$yBO zN!>e`I}GRGD%^r6(3UgT-JU=g0~g^swB_VZg+-u$Z&gymXRsM|z#%ver{OBx0`mt| z<=N`YwX0}0))V@{NEi##U=A#T<*)`ez*g7~r{Fd`g7#lC-`5w0!9-XLD`7M2g#B<5 z&ca2w1z*53=<*6b3EuoRZV8rTRsVJ{qn!*CobT==IiD+bbv0<2L`|p7!BiL3e1A#unN|~de{V8VF&DneQ*$tz;QSUXW%?sg3E9P zuER~Z4fo*zd;yQ)8MJ#FX7LSHd0np zF5H6$@C7^sn=3qK?g>1FXV9AKxec_1c3^Xpj?8s}&d>$ALU-r^J)sx$2Ae1KW3E38 zfPpXvmcvHa1IOSz+yt97-Dd6%+y$FoJ!I|?JciCD1BggwnI^>t%{0qQtD9*JGtD;B zpPK1=W=hmcknwY~gsbR7^O~^ZU(M@~nf}5|i**|Dtr=!%EqAGjl;imxzJUscStCBz ztWBi-GxIv%Obg7E*qb2aeY2#tnVM)k{tw#I__}5b^~|)snU77l=cFbD>NjRA);Hw=cu2(a1h zDCS1P7#IuVU_97>aw2n+U@}Yr8*ENvZaU0>nJ^1x!yK3k^T5Wc3z%C7i{O8|%41{W z&3yY7h^{?uXQ2(BcQUsNcEcXn3;SR{*m(Ozb@!vJ8C``x!9p9EpJeV7*f>49CVP(e zZ18@8xr<<{x3*??g@v|RfI4sdbr#-$n{W$m!yUK__uxL*<^)?=c*w#>@ED%JQ+Nip zTG5&!-!?P@}?KFNM-)CDt1~X?XJVTiq2E)PDf<`iDn@dJBXIo9| zUp*Sf!tpQxCc-3`47N%&l{wqmGM%{@V5?iRn41lAU@q9^nfc7oN)x}3xkX@WYfG40 z3d>+QtbmoU3RZ)y<*jAzGgt@fVFPT0O|TiZfUP8MGjpckqp&i?l$ob^q?oW3#YcR$ zKM~#_muo8BFjs8wDXDj@tnR^BuiT8TKAQ%nPU?uDXTN!-J zTn~b)F<|R&N0_rQoeh1a5Ruq=*e>RFgAIKyFlS>P8_={hAxwNX7zm@lR>0;kXX{#2 zoy=dPRwII{|{!3@0%%+NImn~7P_{T!{Lfs~DzVunYAG7P-|bxFkk{_*JlcLGt9hSJSh%rMg$W}0oLKQ&V- zab>GgWh+ah-(Q$dMW&dK%#!D&m>0!t|J%XZe>*(0L6D7UY}{fajz#6o?_LZ`U@0s& zL|nmT@+R{hM?E5^FiW}Ks3=k`G?hT}Ud$?;EeLD^w{4yoCrWe>y@;4r&Wu(@6>Bl+@i%hpOiGI-?aHV^-J^(PrV<0*sOWekD3=Z_BLqP zsHBBA;nTE~${!ZDY+TZaskdd*rj6=-T->n9hsB>XPxF3Muil4Eid#1Pq~yb-x0B!Y z`%?Vojki8(((0|Kbw6y_q+X*|^-DYv`}Jw#l8=htY1Oh}qZW~iW9;rr-hQW5{d#s4 zXU%#|n>1+n(f`U%(qH^P_eG5w*8NZqvwX>i$#18XN?IA03C?k&WJ9Qhj41HYO zq<*7@O+IptlBSNxb(%FVkrW_lq(#%_k?TZm|DA?ST9!0#-l|#47;8K?jd?t+>NgCL z-rla~ktEupWqsMw+aF8n^~m;{Ns4POb8^v2`V7f#v}{_hX(L%8Nn1WEFC?Y6s$buE zQI8jmB{9k?31#(^hvc&|Cjn~1rlN!~EgCcr)h}t#f;sudmcMRRqI2@K?k-3y)3E8M zNr}bDtyr&F)8;LkHEd!(#n0!RPfD7%XxLQ0QZ{am9WNWSYEi(GHEh(< z-HLo$UAcVZE%`c`k-c(X%UPD!vP;d1o43?&eN}!>qu+$;wfv3Dye7*d&WtSihR4&g zS#gV&`jzs!Ma$-LR&`aGX)LRj6zh?d8NHwzmo%0cIk3$>YTTk(aXq`A?s=3qWXmyqrCgWyq|ax`>nMod1tKuj}XP$%$!UPh%@R z!EzG$CGuL1h4gxvY5AUUaplX&L5usktRdN(U3}gXS3XV`%k&#EE&ufjGOZvh>5_7? zx_msm`dzb_)n6&SttZiM%IDdNtmtkryu|rFmi%eyZ`vpO%Ld|g$D;T8>Wkj&SndU% z92x7)%s@scqlUkFAiGvZASWqQx0yG|lUXwm$|%gw@rDYr@q-mJ6IU16{sa^`#m-DgL%O~p+BKXh&vpv5g&3Y}p zq4$Fsg}M0&sfm?6)$_7*LpsUNaKFeLMxQUEvTRp>Xl5`c@Iff!gNz*6oA579N{sbe z{YlOti2AXz*!i`E@+)&PYUX9gQO|ilC-hNcukX_&pC>O@jzL!S(EEA*nt?ny$Bn%S z{&(L^t?bFjD+*;~=psGsg|)Lo1v!EDgQ5I7fsFTbVX~*z`!z$sU`}ozQ$MH2$&;R& zTNo;kpPDU)Bv>ocn-I06pfHeM=>35=dSUj@gWk8i{>q-Bg7i?49R8x3LB3WOq!$(B z7ZmEe>~4N`eMu7aE19z)Yv$$@=~wymZNIb6DbCMGk)v4{s-00Ikni0?Kes49BWS+N=PAtag@XC{&H>dFUsNDJ zFO*&&7eUaZsuWLVVQxWTeyAufFPNVZCwB5;Cg@CMZ%8sn$*t?Q zYFQ$mO-N|b@S`ThjjA*${$)x1D&~624+RPf^9w3h{!y&Y|A%g&MPvDFDD+9wMiP8A zG8?MYyrgBrO5Pv-P(JpbWB_uNXeJPdPQLym$p!SVWMrgsSmaV6K_$rnlnYMIXI?>O z_WL&dr8!q{QngsgIw>voHJp?dPS%<7ZL%j>1;N7TovG%lR@w7G4R7>(R{c$2!z$$#SS` z7Nq+US|ugw#u8ddCYu&&`Tfe@(rND&fyJZPoG**?>o`+uD+xYUXAJBh!=S4f(;JQFgHN-h{+=->oVK zhH@b>*%vEWCAz6CDz}uyPO>VCl-C%pBN~3QGzk+ zB>f)iBzJ=WLK{hDAepSByXqtaoWPKGaB1XnF}zTRbmv)@j`{UA&rkD$IK4Ya=y}({uw@R!uJyh1X_B( zU)h|dfMnMC%L191`F590LX`w6r!OavAI$WUzG`SuA5N*h409MWYDz{f2hiu_Z2q*= z*jH|fU0mwQO>wSV69%LtoAeU$R!dAwN=i-iC8eZQO-@a%n&wN*$uWECW~_1O@DHO<0&yl#x z?p2xz3=8xKCVTQ~W=kBHD_;<-!!gw}BSEIQD5HaQf1fRxm^p#rHhy(b4r4n%&g*>%64{3SC`BR3~A9K%S= zl${kmNcpwpb47W&Akm{Sc|mPAGPl(QVk>i%W#vnu70QwvTrRVeWXY;Dr_T(&pPdnu z8k~gqA#ZU@)6QX<8c*9A0>3CCx#VYS7SYUG)nqL>MYSY5XQi4MMI_9kyv&>r0&*3StmT51AVDH6 zZ>2`9Drp0egmx`Ma%E{mCwWobUrQ8T+`M`5uM<8gZq%y8R!*hCq+YXMCnT6UX%%n6 z_jtFm#7QkAqH5Z}#Bs8jmJi{D8MgC zHYJ`f`nXD7?Z!$;F_Uak)#pUuZj#Lm6w0ZzSFcwq%Vw(~DP~N*=$G1_M5mG~e@|+7 z-XH(i>#H2GNJ@^B(e;*IZn{Zh}Z8LS=%)u|IIs+CA-o>rzX4-{&vxId*@o>QQ| zXq~{zR!T~I`G#~I*^uT%TEohyq2XENMWlI@)T~LQNuHeCjQ8|vwT9baZ1aeuSCfBB z2_a1Zasg=NMT-mx2NF$op6V%SQe3xDNn~jt<&m2=NC|EmdXh~39eqV4CP~$Zea+KS z*p#|bW;jt;WNT)7&wNh87UlRBI!z|(Wm1BIG5CVE2E zGo(I~AIOt@B~yM!sD=i^L~#*qNx`>LGP6ufkS7tomUbFBM3kukjWeVqbb^eeGz~JM z>v7oyxw2)c#?_!2*RVy?|6VOlH&8<=aa!T9g|swyRM*QnPntDEtsEt1)GUzTQ6it` zRhC&JBP7?poWbl`ChIZ*tR{e9o~8k^H>YY+Eq2wUTI{MxHMeS_8Frv{uuhgHp>X*x z^;s6!s()sp|EJI2U47SIl`G&m)qk@}%F94NHaIgjP+o*{P(y zSNigrSN>fn{rv>VolIF|BKD|@Ut3g*Bpj)gS*l9Zszo#DKMYrkY^q3c&VJM`rubtQ zQYmihr#83M(e}2?h^m0w3R^mM@?}yFOV>bDnnfi5j%w^qNlcHdU+Cf1l?ai)`Y5~c8s+Y736*rP&q$PiqCQ@7R=GWJ#p+$mMmv|FonY4y_^>k{~7i&wt z4A~Olfj=a%fvH$Tf0;B#gq!4ZOhzWrbW{+PA+_$poPw-6UTLzDOi90qEHA~Q*U?W4 z1Jz9fkyg2E19EyqlclzSM+Rl47Oz!xlV3jX=p}RXf*}dOYDUM~$(mHMYkeT4ScdFM z_1t{PN2Lu}Yp1cwD(M0HwO{fSX{CG78g2#lx!XwM5`57{Qlt;yWnYvcrS*&VCGn+u zo0#N(>Hg|EFWqA)dtSCP$uHkX)t7E0<>hNg;P;ZllHz~quDtZ;NR#MGz9#wiIJU`2 zMK9gV%Xj7FM>hGTM>aX-rN>QHdHHdZ#^x6v{g>`ZnzR_dWE*KOJtk={KPG7}-;}joO6e)gp*EaNZP;zc374)> zC7LwL#4dD`oI=<13lvJ{P;{oBmYgLqfD~J4+QQ>a2!%3oH7iYU7FF>|>i)hru}JD* z{vryPI@0Pdk)`RFGQG6Y?4g~sKBq~lW>Fn237wEaVp_NC%#T&2)Y3lv1KB%T1A^}t zd{Cf0tFoQw-IXR~6OPN9w$aA~)}~)BGnstP$NkOhXCPGekSF@2+0yA=P1lNy9?C?Ysi@1A zg5kDeDc!;cE-U&__63iQ%FG;#V zr{mcjR3I%Y)P5xSNqy;OA@^FMzLs8;rA^)>WNjGN%fPgyr8!M$QL(AVNtTi-ZK?}} zf;o9LL-l{vw0ZqdNfQ~;RIj9dD3nlKzrOUi%EeUjY0DCcZ<{ueh5zBz9yd8Y(zhSd zHKZ-*#}fbAg_Zf#k0RGnfJR=llg9jzmm7ohfO|gDKu{S z$*;W4lVse&cO#aTG-}q^``v&n{rL~V>#{UG=F*IqOEYz;yMZ5iEB&~6CHk2yfLz)sb?lfoa=hA1X>n8as$tum0WLKrP*x8Qs8=JmNzl8bPC@2-- zs!l33weV8oAgZNHwZ*9krp2t6_|sz6OJuQ=McS-cqGNJqx9`VvFO|p`m8~?1NZeL2 zX)JkO4S_bX7e-OKN|IEkUJwH5Dk(1xaLgAaYGq#{0~yC+#y4rsD5F^zYNcJcbk0Rq z-=!B{x>Pc#c)8<{nU=Ql4k2qE15JV z4OY_CrlS_j5tjO2e(5w)RT{-KAI{H6N|Y-kkdyA7aoXil^x}~&G3nHiutA!DqZ^_^ zwWKOtkgG!;qT8p;NC9nQl7Rw0N&KOnPbq$N_w$2JRxWM!(s)xqf1gR?CN5#9R`k#+ z*$XGra9b^+;wpdaxJni~nMSx*Py6`H=mu%)(snMpJ6opJ zvFxCkL}%!nJ-WFy^AbxRUO9Jq5b_EFGIqus18GMzW8$yKN`6iX(gY+w zv2@s&B6*GGT;?FSjWpVwC~Yb7lcc|}dg;~_9V{oUb2*9r>T-EMr=3pU^}o2C&aCp{ zb~>{Pmu^)4+RU3`GC03nKH63z&A9m=w#&#Yqbs$yn$eZolc-q+V-+Nx(w)?j zjaXe~wSmZ{pU4rJ?ifz}bU2u}@Xm+Y*RoMYch4%!!H z0FkcZd@9+Dz0@TcHJz0+^6abXa!!NkMb*7pYm*Q(P(XGPD3rA8^ikx=cuU(m?)|=` zARVQvS)z`KtlzYibPiRPTS|P1X)>%gwd4m$X%e2*&XjSYlCPOAB}qLXw=!(Ag|mmhfToc0Ep0j{=}+@{2cI!gE|bt@@)xtb9d+O6w^M^u5N zpmUp8ec^hF+G*i7B3pAAVRQ_foX@FxaA5(-!qU{xGwo z#V=bnZT6uV^d|%7azE6qn7Kk}){yt>w))8IiCYG<7gAhHA9zza++Ni$7q>e~*l84Z zhvLfBXi`;fo@5KQCKnOp`<(`lsPyaiI}QF(rK&7;O4W$oz{r@1YuqP=P}zJX$uv4h z+!)F%%$CuSZfPTFDpVM7Ml2-jI4X&Tw6H4^;s%nWNOoh5v{(^=KhYVY6TR<=sm{JT zRRY;d_b|z3O_3M#TdV1}+B{A7TDu_ipyq2$-yB`1GcYwMCr8q>zM)CmS?<$L!f?iH zW2`i}c5Dx)oMIi#V@Ak2U1{2JRw^Q?CM^+ixkZja%*id3L0d_sR`f|@zjK^YV-E85 zr#go(`Z%S!gM3ZzsHs^=nUHoD|Z>l2p@?!8FZ!r3e~{EI_YVe{u#z? zhCE1#QD(%0EK90oD{jw!|Al?4@_88st{08u1(I9D$_uo5q_@TBP@P((vTBK8oa2$? zWC&4tT%tSjCMx~QV&`}`!???Sbu}|wLB7!q^_;L@$`g6%F(tWQ6KRY9T1VAzJSE01 z(=bp?a*D`}=b2ZcUkRc<8qZ&6-v_2ee2$BP2 zF5x680*Y)~y&btGJ>)uOF1j(o3}2Lrmy9(u!#}lQuz3?klBr50GK#Vai!g<*7WYL1SC(R+X7*hvvlD_GqvIHfh(wismQ%a~YuP@?Woaf|5a zkbnm8YCc)21GeRA&dN%cFV+F}?!ani*2GLEZqei|F){;F^|CXija->BYQucH)^>DY zOQ0~9@s+izGvFdCKN!^Cpo6DPo16R&a~}0JBS~U%^l;mo#}Z>!=%q3p zs|!XJJC~(XWSXJcT4F|x6UvZ#g%~E}kF4#<;4C-53y+YH^U0+qO)qjHXbIyCYQ>qn zMQR$E+4-hAqFqY1ZfVYuuTH8AV$OTZUp2qX1#RvwswNqy+})(NyTmRw%)45yyr^tS zm%!^KRToKBFRQww`)$=l?mUx3Wd}Ez-=z_lxv7qDy;PKLFK4}0V+_jh>2L>gq+;GM ze!vVq#U`I+H`vbRNc zFnM_7mhV%4-dobcBm>Ch!i^ZGtkGIHl+o%)wYRH9{|hFiC1+-uX1N0Ch=^+4N|K=8 z6oqCO4STA2UqL`~!RIx9n73b8z?n5n5vK_{C}l;doKkv1%@@1(y17}n>=D`rv~5lAnn!F@B*DkT@LsRPqinBq^?EF|39WxKc{7nSJ%bMhhE7hv0u z7-*f7oi2q`;HT1)tfQ!gal`KLQ-YvchgiVgY1H4C|8OnHzPA7|MN4Y(y8s2woM}Xs`u#~ z&-#wEf~N<$t)}2t#m&qs6W{2KAnDXXtC|Kg>2#7CGHgxAjP=*+PSSCKcC3eQVRqyH zs4&>?k9`ZX-yOskzOzJ!(dsa|7QdE@OT!0ymC3xkj=H`Yv}m4S7t3Co5I$lATUDvZ z6q@^U^Ky!0q@CPRXTnYAmbtPQpf6c6Ju^rm+1}|Scb8H=XVj3JNIuYGsx1fFVVIvE z(Ke$M8Gk58?jx`vQ=-Y|osrI=oOH4!C%579c0(l-B1q}w-UcOi0?6qpU}JJMX*FM3 z4NN)8m}n|Hsn$v)|fmG)$5Hl*5Gs#r5A*Yr4qyW7mwm?n{XhTI}$a!Bj4dU(P?1np$m!Mpv=BkoF+V^RejM$M2{W(p9Y1&w)S#OM;OV+Lp z^HHZ?muCQ^QdOv(nJ2eo#;7L{aG9=8iJRRVn=W4IbdlJAhU@51B}u-mc5}uUH!@L1 zmBz&_epy8a9c!x@%jCY9h}Ylq{!Z#YEq-Ym%5+s3k^DWcUFf!I_)}uG^7!4M+EGE7 zEOx3-66xnkC6P#9_B}OOj##ohH^aop8n1-&0)OzWq@>IokDO{+IwY8pcuQu@3pei9 zVR#x>mTH^uC(4L!Dp={^F&w6JBl}GDnG#Hgi05aTEL=l%^Eigm{i}hxEfR|Lpy^by z6*(wB@xG-qKlI9!G$;4Xxh-RnmG*G_Zt9@&SPf@XHMzabyh(wHW?Z}!Cy6GFy19bf zW>}D(SUbjz|7KC;fAPz$|9YhCeT4Q%X^T*HEhp8*Xva#^#w434!$UzxTWJ!hxH}sj zM4zS|XACKjr*g=E0dVQJ`P(;TWY0fhNq7!DC41_W(nuF~QK`@!HZ76W-8POYz z-Sh7c_xw8nSE*F#OVqKN<_@BQbd#&ll#=EiXnF9C?KySpBDTI|nxiz-h`h~O#tG#` z-RPvnzV-lUw~W&RkgPobw&^2eZe{mMja_cD)#|Nw1c$4)`cdaOAZ8ewJYGWXXb!Ky zh$(pjjP2c(kUo41F1KBqp|r02t_sWZK+yRzkaAiNy}EvLJeEU4N!9Dz1*Q4Rdth_5EJAH zV4;uXxme8`H81)1xAlMB#qUU1nNGwFkoOb9Of;WnH5Z zxx!m|bQop$>ScHiH?^6j4>_#bvTlwSx8sMO{$mza)vQBWH3KD%s9oLm zR!4cs>5`{NnWj)FVI#{tr0rVBjzI+GzYY!rL{l`KMBWN7|GhSC3%MAdLe1plUw5T(MP<>$u2CE=S|43lP5fc zLV8u$0iV84QyWD8lV>J4eLTLHg^pZ1u^N+Qu~X=1IyXHPWu9Y{qE95zkz87Ummbs4 zGIzYG8EwkwBDp79eoIuVKu8{8sNF;Zq6vp1pA+xmdPO4?Eob*v*#VmM!> zNQ%sObm(e&ZoV^Kk5=%IggWWuis8>Xg96+>R0&uMawHvv3N#mSH!7EN#CQxcOw&D5 zR1h)jo4j9+i!*RkI>WW^LH1Arg2=sh`xwl??j|J>oeV8Lmd7z_i-8XO*05oe+)5hwPyLhD3 zm%`g=GjQ8`bQG%@36^16*0c~c;|6@;+gY_#l4B@+kJ?Jf@L1{CDK$*e)G$(Mdu0Te zy_gt=@G}$D(MBylhA>-yp6OtSjL*#|Pv>b-(yk<(ToPtzbx7~THpf4r*+WK{h3{B! z5`bHC;W7+JcwRP@nC2<-FdKjLh*tBVYI>(jjclm~g=*vn!$pCV5K<|Zdj@stRL$j9 zkTN~iZfcXFn8B6l(!U~4Cex5bA1z71AYp)%s#419UFJ@Jrb#cTt-fXZ6(jCwp$ecI zOb*`+;(o0Z*))JAY6GZk`qa{mk*(5kP^uwbdW2~lmLFHTU`&yp9Uc5g>#up7l5-)M zfI?d5BM0Cz$VaNeTAhhKHdm_=c5LnsbX|2CG;a+?pVTy;9`lAR zielQbX$jd(7RRS=5WKYB9{~oH(D)Q(f+oKs-ania^#2#~>PAEH5&XB37 zNJ5Q~t*2?!0GHOe^mkGM`bY_~i))@UtGIrDs-j|^#S@Os# zQi#p)V?T!{EhToOljfFcrscwUM3Z~5CrhHxYdBl(_Lr`)K=qn|gyQDfqM6sc_@ltj<&)&UY`v#l{!RHJFii#TjJ|}R9ju3qA zII74}t9H~gEX_~XM&Gh!e;}ZZDe`254@}vkCsi8VtJe&@pDWM$$+KPg<|&KcmqWzh z4>yTZD-P&`^!Q1M+FT?>pf;#GeY4q8`;biA$ITs?T0-jEd>|>DM^-Z@RFa-~a#6;6 zdWVdxDG$@sN2W?Uv)+tnI@oI!>Aen8-N>$$BhM)`C4wpQ@+Au-car{0%}VXo)RTf7^uc^}Qq1lhtCuJ&y1Ib-~pWDfy z&q1+O#^dc9fJTp}bDtR(wjKa${ zugl{G?8u1cwS9+2Mm&EFX_02|#Pe2><`y&X}OnRXj8&C`!85f5DNXs`@Dvm1i25cKKIf7CgMI?U8Z-@mR_d!(3W1NchLUk z`FGID-LOBFx23^}y*IbX%H6RM3(DLmtLZX4^p+tsCP7I{tvs+=2km7BY{{w5caqzL zYt$wAz(<`b=877V(lpYt9%sV#h2ikO)2;LfA&O>{@w6=B64`3YwssII?uG zuNS71`M;l+#G}N`)9Umo;nUPKnMy@-|psmyC)q?niR(yk-{ zr`F2cF=Xx=lE7jVJ6aEmsEle5RI1Z3IiT5D#LYisz0x{B|3f$rAcHpJJ2lgg4kRbj zFm1spkweDq!8296;QM7`FL?@+grfG|czMpGbYQu;EPdFfQ8!|&WV4pdV+@rvj{*OF zW!v%@Zp@HqC89CI46D@oQTWN~HV$`o;REeW_v&|k;GWc=^W-xE*gziEqg>#s!ClUoSqUTJ-LO6Bx1>sB?;3+K`^M1 z@N@DZ0!-&2iYB_!jspF$Ix0m6Wtf}N-NYkbZG)`XO_tJP8S`$*=q5|Kk38yz6zcjZ z;lWN-8dUZ=3%$ivymhO1>q%r&#amLv+dzJOezx=21U(Rma?qt1$~Moa&=6jBUBgU0 zOQjyF;nT-N*ufk!^xqlRA*mo@=!TBukRusj5B$E!{i^a&m5-}5tnzQp{+V~9_pgfg zqblByt9Tn$@&22=*6i>VX8>pEep9MYG3sI3tKihHqHF5O@;kKoB0T0LJcuYYW;<&* zfQ^b7Ww8@8njEO6v~}5pKvd=2AsChYFs@u8evV~9^kA1XJ$w=t#b~lily~&dHPCa?>k<(WSoG$n$r*-6$SgN#U6%SEj$c4Kf9Ilr!urx z#(l1*)i3-C+jLAC6p@onvl+vmvxxZ}ydWT%iuh*7D40IW7IL3}+mI zR3IssBI=}t*)@X_k-OKM90NHEjFTwUW{{L9ZwB)63eB^hoj)t#c1fk0E-719F+|?I zKT)qA_YQk`hP%wy;g5;f1D=>1bKrv9BNwZ(Ba0)GkQw~u#*5@fdY;SNHR}%I(7XAx zOp^cMx~}fJ$$TPnHzz^3PYaGt5LKOuUvv_$>OS`(NB$~+9UUM81(JA48gQQ9YchOi zq>GPn2DT80&MqU1Y3&}BKLyaRzO;ur8Kjdqqjpj5`iPxDy1S@3S|H}2PM?l5a65sW z_F^}!Xy(tON2EgCuxZ(`+2Ms{$9ic-U#fE|T*k`^rMchzgp}BP|ZEM z(X}7@kUt%;s=vUtQ<-0oNP~UMU@=2W^U@7TZZg%zYg;3<{RXM@ZJ1V6&1LK%G6l66 zo1yujc_M)sh-~(S=d#l0P*fPv9%GYNTFi!lw6xgCE6r^f;F!j2_LJv!hqK(OF}Lrp z>a;_ay29M;yQBCc3ORFEsa$XV7Yxivlz};=VwV?Z7%!>_1f-&=HGyD8#08TVe%8Ij z3;f9;9oK4}Mw^%_PyVtC&9cZCOVhtC6YI)js~gIob?K96(OCXa41WnGp_2Xy7#4Sz9;cLQPI{JXA;yC2L311v;Hd8A1aZ1hTi=$f9=`xQ!+?EH*GFb_Xs&%ddNH_FZ<}>E z9WG9*<@qiI(t zdqpMdU;fb1E6LJMlNFGLMrYu#dmn9nYUz5k6t3oE5GU$xNb`a=bVTG#ZcRv@&>tgL zmB)d^%vF=zAi?cs)LYs@fgHK@L7uc*X2ghjQn7gmp4>98S!6`2aRZy`wTiqMUh^kJ zy>IgAG@ z-R*PE{Pz2-%-p+b7m6=4*Vi9zT+i4d3&ld!uDx?-u3WkD!-uzD{?zR2z@h8QtBYTH z&wm>Bo*!4e=X9w26K!0l)86wRfBf>%m?+PKk#fT^y{P8zG?x4`e{}tYK6=l8G&aWb zOPZ$X+>f91$@{mr&$-o$8+9Oc=I(m8z?~h5amsH|C%g=16B0;}#jOQP{9qJ^ z_?hKn1e3cIllm(7zgo-1Y;}8m@$rW6rt|UHW939Ah5xc3Tvrdx0=sakBU#57rz1?a6O|N=xM5?+ zoAwtTZ&>B_n5e#5+<-Os^_smPg7g*W|C2^{#&Z_WxNn!Zkl_*Lm0h zLB}&E52W?!$%yNIeemMl`w#$a=zp&Nner8lKU?!m9+8NUfG1zPmXFY$+!Z9!^R59( z8{jNZNX7ZVt9y`n_r!o$P2 zRr6&hsfiFMu%ODJYfB%DQUF@G-h)vm5r)GFnJShH=v{RGu)JWj{&;h6`SGXQpUI)6 zc0(}TKy}nEnJj_l5YxFRL%qFz|CxTH#()1)Pa|)DtS9rzvlk!Veg1@FHS;OJR}}YS zx3hm#{>_J3DqFqL`EH^uCg$end#A@o$LGuPPxeJ3!)@dIioPVc$f9nQTgrG$DqA*D z>s=duTJL5LWyBU@a@=L%7L$AHcKKtg+m&Cp`flgD6UYM@=c`2>@CpOm$*M5Eg_})J ziWTNKqh@4}_2b3c%adqN{^UqmR8gCghKgLqT5C0uF0ddA*U+6Z)@9K1ArtWx`KWRR zKWP3ti8^RP-v3GqiR`z&=5$mJXy4d;tQ@bDi%4{0xiXc|e-mX>?UI5#<8e(A*5(pZ zvE%5KLl|n6#*B7x33RJ_zP!0B6&{4r7zGHz0Ftyq^YOHaDzb?q<%(Y;>8Z# zclN1sDGKt}1(`Qoj``o-zWw~~XfNyE)%#EU(ZAQG`G%snul~)C>KvvepZED{j^($hy6stM`nS0Fd1FG-hMDVzPJod@kRp9kuC z_lc;7uHK}Y7J3CTa#?FBGv$x-s zfL@;L<=52RG?t#R-L8Mmo3Pd8l0=|je#J$?OUs7Ai355XI;Hwn5M@*0=WbbAlg_iU z;0Lv)q%}?dPF=oJ0)}lU0ylh!muoETiNswFI`7>C61V)0 zz%*}#c*)M?3eI}78b%Xh+c=SFV{rzs&^KHOBf_swm8nYB^`~AhD2k8WcwO_CfZ<|n zw(c+sTiGm__Yw&sBGc7Mo!}(juQ!VG;LuX6CN-8G3CJO z+yDs$w}LRHjQO%;8&-sD=!3aL3H0bB9Z*o*xg_g~;xbHbGU75t{`z+)Zyo8*1~QnFEMKYsa(Nw8mydbs~FgJrT0SV8pYp&?G*!ZBp|OVseZ+ z6X(DdorZ9feUruDWcG4l6Fgv4{cgEv=XH-mREdVvZ;rlvNRYyf?eN7GR8{G2%PCvs@`WhSAg)w|bk092htofH2*F?x_tQsq3~Atr5+W8Xw^&Pk zH6|$EvK1Q8bd$WN|1YcHo6W(dMcjkolc<8rU1El~2IYfRk`2=SD|oZ-vneNF8h)qy z)GVCgU~9Zp_nVrOm+SXINMhW&yOl#f>U^7Zw{ktAppAsVHH7*ShpKoHwPRMi2o5LP zpvom=kw%030;yW>kgf;7swYL%AbKcVWO?tu zmWTqmjx=?roseHOO-8sFF%IVulQXAnz@|pp2gVY+tn0E3?eqq|Jqbc9tc-rXE1Odk zyrHJB?(~hfxQ^^Wvw%l+9kQo*<+N2lpU>gg_OX;8N#|O1qi=(#t$%pjwp}s{H$|;tSn{*1bgDfIa%a7-a z)P*~eOg73Yz;$OkZt5Y!$micIzIVe&*`d+na2mRM+^TL~H<$KYdCRe+03J@l@gOs7=`fXLwdaJ zW}|~=qn89AQ3?a_#0_N|bE?Wi$)#!?%??#LcN>K{h7X$ewpcIBG21reH6=kYmdlH3 zYjZRm4L2{J4=1|~(pus~dS!wH=P63n@?>qPu9AhIiK&la3G5|PnTZKo?CaP{)5EeT z07WeQ>B(~4SoW2Q&Y`3aw6wEp+GlXJ^^NVK+5pE~z0rEwI{??SoL4Gsw;k3byj1V? zF6Rgnaomoq>GPP|GHe;TejS_)hMn8xAS>**W>(%VMe^8@5p4smQ$~XLBP$3EGr^|X z?Di_N4_tg#HOgM4Mx6;`fUH3!!&Es4b8|yF-1lJ8usbczyzeX~-J?#M4jywFwPkji zO`l(E>LBQ5vn(t{Ypa|}W+7D!Rviv2L#p(rF^!sVi!TJ$<}sb;oT^ySkEa?;C!_J@ z^U>yR%-HC5mLbJ@8{&>^JCQXudQL+;w@O9jm_>Fn%Gzx7^Tx2*2~=&~0aR_)K$S{Z z`#Xnsn{9ne+x5eH5dxhve8f2;ofDvr#iyN!PNc(^$02pU^+duNV#Of`ro`b*EPU1&IX_(GiX@P)<{K;Dx>(syyngZINZ4}TZSesuECw{g9VvS0|+P?YoYKKhQ^UvMaaME@@Wa+W%8B>+T#@bDE2WIAQy0WEpi~f3dfG_qXQk? zpQPZA?@cZ6d3O&16QofnZYj5B&5W93qcp8H=*=KgcsHbi(C9JOOibok11y<3BH0QP z8+DTX#$fid-YBg#6W`gR_RvXo*Xu4M>|8s3N)y9nZQg4cl%hr^N`^&c(Z9r^qO6aq zIOdJ&4bFFVT+D8EwA_V{Fhg4K%&-YMqA+E0kcW-Zco4-&pwXK3)>NrxmDL^X-&ZT? zk%gGw>Sr`gq*E6Oe$fxh@M9$TsuOYp+sMGlaZ&}5>+R=3D#OEs`3@Y*n64MHS_FDW zdF$_b>mTGelvnRM4C~Z}DPBec->JN;Q6tNa-l?&_wRh@VNMC^9HwyN$ok$2|;mK9G zTDh>N98UJM91GI))ct56hP3ih6efBag-+h&jWQ}BQbN_%OI=0`yp84g(H!69^9&bMA?N{T?$6V(T5y5!!hzm_0aYOgdW`FqehsT*#PY;bVa03C# zgO^hD_0Xk;gUv^r(tpf34-OIE)ql(l^&fs~Tc%$H3cettyRA6P-d!L${~56{}s!wXF@{6h~vW>0%yq&elmx1n<$93GwYm>YV` zg&uL82d5cP$Ri%?5z|Z;ddv+y;=!hmxX#0qY&?35MZ4E8k%gUX65Ky9J0_dMhtGL< zu0~*Uhu2{@qje(?LWN>=7bjtfioIIpIn|tW6shqLRSnR@z14XQAA?MiikhlOLvEsC zH1I|fIdnCQz4usciEB@*3(yu(`zjBZTF=o}+iK(T zbP0x7ufHM*yS3m^t}bW|Lr@{iAocgl$DZ6=z9%w<+IjN;?fBz>@jIwBJB(X>h zL~tu~A_XvLF?ZyFD@s+nl9-K3RRmy`uGw1`4F{lRXo9gYsb1Mj>QQCDsCHRT;su&y zI`hpX(!GULinkT{NG*Tn0EapqlfFxePGs*?`C`9XP6ml5(MPiAZqI4V3AdmvH-rC>6`QuJ<({!Pd=gAI z)-=zurkG)#9^cZI>#Y3di9jr?a;8PrZ#V3xJR$pHgO$jGvHW{g1BLEd>v|M*Dn30A zk_2S;G=aM3&mESh?)pQ>tNJrVsi1@%a>4V#Sj{CpI=br=La_(Wkt*av*P-y%Kq#XG zE_)ls`%m=JAf;0cp1>bUvg&pWiod-D(zFv?MW(0Is!TGtT5!=L8<*ktZJ_`g?{03N z-CVzYc6Isj>mCv_Z$JM^Lq8p+*lB}L^p8GtbVGe=qcx_bm`6hcqSS+O$3@O)lNEiN zhTT|a&LNi&#xP@@F~1!ww7qOI5J`QxV^K0|W`sri5))1b8jx5}O|^eUPb({KI8;5i z%zDtVNQH8NQ_*D$_WuSO%14UMZogcAq%aF>TPF{od7CU6Y*lua4;Sx0f&+eh_vyN! zslN+mvJ#0X3z;ihs+ySfg{3|3>eHvsXzAR(zcO_Vx+T56Qo9VAD5_iB*S&Y2K)?S_ z@2@|_phJXsDUTlbrnu|@G>mbhrWqZxJ-ka+cd0o4p%AR*oHLS zI)HHEhg9&8)E(qv)tAURFLE7FASgxO4WC5_y)Lx$-NgAKb$`3?+{|*IT5w0<_Ed%2 zR0L*L_*0V$afZ57)zX4;FjXWx+vq(ZIL?SBpg$mCo)odfb5FOzJ4BeH(=KggyL5HQ z%OqJ&&O8;_#_ouI!1?R-K^+VsHJl?Ek-LeZr^D(i+KGu9_+RcPmfR@>XKGk~Fkv|A zTrHXSpp)jZV->vR{H2p>?(TErG#t|gS5kky(T%UbwnB;l$k98M8PkUsSj+Rc7FIYe ziFjm1I*AIDDM})z%C=g`lD|s$v!by#svt0`=6bXpj|$Sgrm(1+tt>}1XIIPF=B^6n zj#PN;Mi!%_EUWD(6JsDVFHse6KCx1Gs>zneW*OdA?cP{bS5yU*4oiQCPm)|VSD@V4 zX^Q2)I_Zd{`s&Q#Dk0X+C~`jGSVhYicct*@T}rIZdO;$~OC<9dL!Kj+%(!zar|7VA z$!z8&A)t0OeTJ||w%u8tCx+LJMpcv&)_ov6+UPEn^s9?R8Z}~M0FyV; zxxY+@-H%W!l-1*uvV&B5S%yS~*2V^~rorA5(SEmRPiI?;VHu~~FRCenDtg;GnT?Y} zKe|=NL$}j|Z=RS-w%6Oh&GKX*?1}ZR!DCCpsdVCaH}R8K5IZAY&o6nbTSI+XOHMFj;FMjyHS#;{nyTXh1 zj^3jbUR>0rp&R!U{T7#)Uppv``L%-*ng1c{4*XZNUDiZh^uCxUYclcGobsuLq5QTk z02T$5aE7*_+fssfwI3B;P4Oa{^o8l69hivDj1thnUDbyA+{A?LF3r;^3tEZe6P>=3 zTbfkftUWROde=Yr4YNS)iktUNMwfU_9(M;0#8Yq-8#d_E2c9RU5Giv8N*g|!;TvZK z>vi9GCf~U+W;Go>g;be~gF$o`hy1n7q%p}Gp+A)w?M6&=R`7kTtA=S}0Pp_q9VkVWmJ7QG( zN!bK2)^=8thNIoMt59*q^|1fc{^6Z>ny*}yL|gV$7gSb@`e9(VOiWBJNXv0iY?Dk5} z0j|Q_9LlJuN8-r2!DM>%ER?Yu+j~b`Z z{2-y7rupdsNOs%RA#8SbsJ=jez|=DK8Z`--eQ0iq*%fn!Og-g(Ikm?bmDrLI7yEK` z`$x9jE+8F^uaA6m`{A=M;d14tW!yG6p|18-%e1U-+FJ9mYp)xJ#@9*$=;@z)!ut*T ztp3lefcxftBQ8h?Z?ghOtsku{Lrs|aE>VhaWvrVcV3qwAq}rbnxQJ#dKvk|u#cUPmq@;t5u+F@6VS6zx>dPWzkdiDr zc=d!;u-ucEn|QzcoFaj&*j>c`n_JzHz-CdEZU-%+kGV&jAW@8 z*I3z&Lg7q{yLtc9$IEv;t4u8*&%CC2;ptKxtplqGh`ipv%G!^H>!8V40tY-RIHYyU zSZv??~mrSqOa0Cv1DGIMDGF7?&1aT#*hTh$e&!dx|6l+e)+aX zFi;r{1{m;rcZF8Y$tkr*m}y&K7N*NR4gWS;Oa{WIKwxnKVc!D!J`$sHh54TrD_lH0 z83Q1=7S}UlE?tH2&=^~xo+{Iszj+z>`nKUvTDHinjz>CEx9&Xr*iPYzS|;-Bb=uEK z*x1d@w^NT3UmsPiYs;fCye<;kjqZuRpWXackE@v^@X|e7Oyo6jJBxYrAWF3cn~eVc zI~91Nz@Zmvw$AUIN`w^7CK$Z1S%W(=w1XVY`h!c4x)#k@hwT$2e>Z4f1N#Bn8(7EM z>_DR?YD{aNlf)iuH^5>Gr(#B9~86ZFRyL`XRc zO)i#1zrqnqn?e+#w2{yus|HJ`LPPtfQkv0zq77#J#B@$q>E1$Qwyhgv1C}+IseLfP zO>4(9?4%dF)7>x|zGZ4hB!9lM%8duk;I{V+yc^uM&+qHvu6dX1h{K+sW}q1yFk1Ya z9xMHtpT;*st8&UygFP|~4sZTsPN&1-rB!M>ZA&+p+pR40beq?qQL@Bl#~!LpHpB-_ z7&P3YXeAri?*7eMt8L)O3tDi$BT123Zj-Ug2kkqR&Xn|pEjS>>-Gc*(a_$BGMnj?D z#uu@r>2K1vpYj6nd`$M^@b;`fr#dsS0re#J91NdwJOFikEse_KCNyg9Q_{wD50~}P zs8sT*Vu@jUbAo&gXBN#QgQUSUk7TQ3G>6!;u)~;+PJ+lF<^2oikM~%^is#O!kMudz ziq{9d>w$VEBzpc@mUTK}r^dFOpe~f=RZx)9nik4Qj$D8Op@f99#(U&Inp+T zTFt%>TN+;1L2p7P9JAD^Gjy@ssvsXOqQE37k%9cBR;d1et{g6#q_l7WF&E{3p>AqC>FCAb! zhtsOje;D>ubCZxjY-6uw?ak@iI=x zkr^wEJIWboKjc1EknNgeGP*i+k;%4_2`O#GRt^+BnXOv)T$8%-Tt>)dbKNPKd8GcdA-vagS>WnW1cf_tolOq7Ll*hjLr2W&6UDY>u7F+KWJQoJpl+uQEG#b7RCUy zjS)&dpCjK$NF1LQO%T@+W}3JKQ}3||Gr_S)VHlOs{BX%ue6Q}2&Isuv>6dkw^(`D> zE_OQLI{xp=2x&N^J}+x)cX@o*+C|7q8eEmuZg38-FFp+TZ%`0f84Q!qDkDU@b!xz` z*-PWBf+qq^#QcY%Z!{hv^R&rwIXFIpI=f~K@LImSdyfTc()oDXxL~Ohk#kfO2b2AO zZA;Y>fuWckubF#THo3nx`824z9h%t0jA?hz_4&nGK;NKychBq)rWM`)@Mt`QH8X7^ zX!=vhIdi>X%bBLWHLY-H(#OcxyovCzM_cB%1Q|McE&>d}5`Al#H4Lx0zPy;wR}kjl zvrtpee>#y2mj}em&J&xR^{-sH@hJ^}o4=LkE_E)qy!}d~NbHK)Gy7Q&;+lIjOY9Fwx^M^B)?*X9C^R__4d-b{&qEZ(T8Z`!xdF_xIV+|KAUJgFWsHv?*F<^)5c#I zvrnI{Y_)WjCsVqG*sXRC3_|1WYFrj~AVPXuh=aWdYNM{Fv_ux&hCDGQtpp3T^OpeyWZ%8-Ta z8QUVNjERQ`!jOzsx9&R~UptLft^4j!N)l)GA>Z0HKVpP)q={B@l4`@M7m-ZSo#Ee4 zm$yK%w`xllWl-C!ggh5LOr4TQu&?2%&d=5?^O$Pv{E*`mV3n46oOD*o2xOeSlo+Ht zByy+SPEIY6oBq5r{JGbkNgi%?cC0|nMone^Dz{*TXz;;J>lTj+yqnp~@J3B6 zBkm&iL@&mGhNYd{#kw(aScH^_G=1^OOOy||*kGIdR-~aS8`-6TKpVWR;?$gy|ZPIVaZ-3{& zLhtDnNrcW30iE!kua<3h*fWt4>qF~wMCM`SAL|eaj3$9@b>Jf7)fTEYy-z4xAyqx) z)&wwFVV%Y=d8AQ2(ymPj<k=}=# zF$;SzmwCTe6heUxFjU?)*iKBfs|PRj=GJo1z27sj9N(`YLo-P-%5-^!qOnh@5>skot~AK% z-FVW7Pwxekbb=vDL?u~{w&jRT`kEq<%(hzzObisMOhi_Ug6{fcDcMLnwJrhcZrp+Z zN2hDhXxy^Bl;-{qY9=YqSo6#VTk|nF zEdcK1iu`zSb#sX^Hn^{m?@G`+?}JdNSs&(+kqwZ1PamM)^it4N;~6uzfL>bH@suOA z?F{o2I+gcb_Eq6XQnzpIo0$tG%UOQh#@oH^yBSHwP&Q_IKC~Hj; zKzm2i1UDYx#NF<3nl0Y5-KH2jkz0G|9QqWp^|a;G5NDC7wxArj(F{^z_*mUZP!xUqOe3ktXGFU|2YJKwQ?qqc?lCe5{ffau$aHZq%#8`gmQ z!{tYO<~r}u>ZR^XiLP>Rma<+ampVUeRuC1gh!Q-h6G|HsQ6@RBIlyIHOZTH%r99R6 z{F`tnz3EJLTbO>Qv!fm3xAlLKifVFWG?QB^NWPaQa%!`wVi_fbGG8G^vN0DgKmL62 z@vXIJckdsT_2npzl@Xr(0sgi!j)LUTwa*_Ug_ zVBf_i_@02B#5;Src~4S}4_{WUiNmQ~X*bUJ*9Xry(it*Uu+6A5W-PT7EYL^?cyPJ`@;n9r+kxLx~ z2tK8@0=KP?s)u@2D0q{>XLIL zT5t>Ey0jgs8+z%fLE@OG!q)UIf9!MsBVa3)!i>H@(Z?B)=ySsiDJmHSWR6hf_I460 zYoMmQc#DtQp9`k|=9n8&aI|=dd2n-p|7(V4zT?d^Y89z|Cx2tm@8oZAIL8VBU1F}9 zer27Z^88@`wf6Vse@>ozk*`^9#>CH?zMv-_|5;4OJ1&7M&o6eFJzCB!Y0&uF4f`o) zd}rvUK~dr&Zl@EO$y9HX!!CHnpoGXAU}0y`o=NROWQ$9eV~X;q1u)AUm;xKUJ9ep& zKE7Y(SZA2VjIF2um)hSp3!0+?>SFmikQz z1e^ZXJgMv(1w`W$xype+6T;I<5Dxe%!GLVx67v17E^_roNJ@I>&b;rE#eqg0@#a<4 z6MHq*f3bW?v^vx_?f7G41u`GZN-VfNiAME{_{n4Dp=i4&gop%hzO4#S4K878`cLUN zz!&kdC#l_;hh9S`ylZm>v`8fZJ)0n$-Qjyz!p?$9*^!-?4arU<|9B^hPbVxiX05}C z^Nzot>hCRg1GUarp}5;XfvLB!?$o9Xk?I}lAv0GGi4<6)yAtcM0LteFKY(fOsWy#| z;H=`TqL_tmBK@6uGWvK=sPV{R#B;H#+|LWEGT%#?Df2qpC4Gi7M~?)EU8|m&A%7Dl zX^=9NXl$1OllNy5avuQ3AZOJJ0HZESDgX=)C!-V|SB>AsQ?Uv)1tGWxZ_(64Jh>_g zn&0WE&Iv{6$gc|&P6%kzm@*!sR1Is_Zfj)ArU_pMecw`8>)_}FAWLkdTF4A#vj&kO zT)TA`^Wd0Z=w)wt0--|M;L74__NbIHp+vC^+_qXNKrLDm42=X9bz=1-4m+{>x-nrZ z|bo&ppwN){OJU%W!jTwAJr5JNAy5YmcEPo-8?J`dfJ)lxgL)M9$F zm<8|H$gzU-DWqqz z-mTu=USHu`|6gA&Z*Et&vId^{=unsIllNyNtyHaOQeQ}EY(Qw8nD6N7mCb-5`IFm| zY{L^KmYTS=_&$|rONOEf|FGRVuRaD|uY3P6QlxTFzkK|11EK#fp~kf#ZLhESm1Ynw z%#{-Sbro_mQc4?8-XP1lh{UgU1H$ZV@bcXV-Y(D|5d>t)AV@Ub60zz$1eKS#j&qEW z!Aj<@%Fb8$p8MVW`+nx%2Zpl?;YiD+E~s0)BJj0i?#619>?c!hwjw*1>=Vf{|082D(=m|qLr=5n9?)KBi+PlrOLK&2)_Og;oo=-HefVye0Ab( zk>cuIkl0j>kr5?fM6Q#n3FY{#nFc5E>$RBy(d2)>y7>H_IWHfZ|JDVFmht5+uXm7B zYne1Co9XGxLCH!i<)Cb43AYx_O;b(|8L(_Q+4{qT&YHAorqf|Td7+SzyvEBmt&QjT zcO&CHr;N&WZ_CnEY5Vq_iOvk>4np663SaL!@1IICZX3Za{?{OS{h)xME_FEDKU^?_ zVo0$T0XdboJ`pr%nII)+w#(NqQf_H5XUpBy>yrcN{vn=na{S%m^!Vt&`dp4sOHKK< zw57@P@9!M@uOm+o^_j@!JzXk84tFsY{NLd@A7Lc)5{^{W?I~*RnQxBpX zT6-(Js8fN?S~IYF8SX;6r%-K-IM` zQw=uj`Q8~HR#cLARW;OwE#kH)BbuHJ@#3!LqP9 z0Jl5dlqXoXY4iIk2bkvhuM?W5A~ct-N^=)--%pxQes^Kf#L!6dHM<_ZW399Fh662J zZRRu~Hb4gHs%vh`@bKk(LiMJz9FxBNnlc46Ws)Dlrms)lxQhC4>5v zV-iDzYDIroCf@CEnafv~nf|cMl!)aHONi(Ft`U66)(~xHXQ%0^rB_GWs}2TF-Tt=R z<*Mvy#@}b|UGe4-*y{``#(7%V<{?vB^8qabJ(Uw$FLq>QZEjmdnyiZB z>-*?)e6RW!eU44p%eR2gd~JSZ@J>!40SG9wkFH)kH_S%@w;pH3bio7GX_LiRGWDtcK!Hbng9s#m8=q`X|pu#z^Y`&{$ zHvXd-NE6l%bGl{Rzt9e-J=}6c(j;I%X%bJZ_)sP(iat+4Mj0#u^O&fK?NZFsJ6Mz1 zKJ710H@vmmvllO3eC*^O7dxguH96*FZ_c%6ijS`?tFDP*V^-Wu~}iZLw7M;oS|u3Bo&O< zL-9F%qrvTMcszOYF#++_QsFSytq+^dh%G9FKK?bx9{iZ9Q6&FiZ++v7uz7mLOB;<` zz;AnB|3-)Yt^e<4t)f{%elGSjp}Zx$i?^2b3Mv$I=$^Hz`FW9o%hM15x#d6%2Ec`3 z3+tM3e;NZ4lXnmkO4FzjWWdMH_s24dFQTVcw@5DbD|UW;S6-d00>9>SAV_u z^@i4RSMNVw_Trynfk@N4ILm53H1!ySRJB$Il57P~M0y)W6e(Ju)nQtuxECwC>TY_; z;pEtu6PBAZ%IA0VB6DK1lP8mt$nLxad9%18{A6#mi38&L+GXnwkBZH$aQdvbVd0+V z-A`TM!%1GJi*HrO!WF?2#J43&&Hk|yRbKp?mKZ;#CB}~|vDo^oK2B+GLg?gb^tX9g zj;qx@;teXO^Epk2z-MRwuJ*1Z;q7YjE)h2@J#8AE&Ry zb4gyRHrF~(WqWO~PqUF?t+qQP9)Dv%-nex?qV$zuP3qKZRC>9c#<214hYr0%%^_28 zcJSTod$rkpsSYXbkFw0kuQe@zSzd2{Xklf_+jpcF#=@i5{F6XM8W1p-*9`Psdk+$H zwi}GBznP)J1H(49QoY{WPwy_91$%De>g-Rp*%m3QcZeI2AsxpDlfiJbb@{vDL`gW< zcOW^5B4!MRO)P3$AoGKgcyU#p~yAx?I-FI_+AtakHa@e-;-X zZFWZ$qs?^jqS|I@@*W0_MZFDsspqU})e@iLP9W8`Co3jL>hz=>;*q4B)6}H}bXUxj zL+s+&t5Kf1&aU`-lGYwgujqZn8@Pv^CjLZ8s8}OInu7=&(lkwkap1fPr9#^0T*^$R%zj!;AjzaP0!JyvM6=k=<(Yc zppef9eumrLDr~P-HoFCu1j?sLNT0H=vr}08C|}KBtg*o-B2^2?7_JUR2EHB)D12YQ)u9MQi?dO=Ww;e1L{v5CBx_)_m=H<~pNf#o+7+$CYAhzWMqdL`q zsp0T`3jW}9;)Wg*5(>v$_Fi0mhQ9s@XYR#c4=;W>xp@2M%iATru8}^bKhAig^|yw@ z>H-v%KMUiQmKAPpcCkreO6>Oga(VR?Gs_78pJn&gDs1W{aG_ntjn(|t%8SF9lJ8`0 zJATR0&g_(r`~ReZr8HX|Gt~vjw{a3pa%9L;E^){L;MjN!f{T+%67pMDkTX@y5MwYF@O|H28V8aM^x>JL5 zYnR~5leVc}PFF)-lZmRvuypjM2+Qs~Nm^1u95XSbm1v)I?+=r-WtIao$@_z*WRRg6 z;ggU~cAT$EO=d!bBVc zS*aHE$hA96ic@(Hx4Wr+J%buMnb!fHp`~LHZHF55Sed-INEB6vkF9vydSBR6;H{#z|?aEmrsUq4Me7%8yjRIy|AgUiNxB=#f z&@iVKn(=Wf(3&4(p}ud8Z@*GBkG-ockY$O@>?670>0)+!9Ig>Gf35W$+4n9+#TL#0 z3t9S{y!OTE(d+;i1MjXOlRfCCWK^+R4f;vTtuV?QPBBFa?GAZ}i0zzfP~N$BR%K&H z^z_v4dRWVioOUe^IcQ96Pgp4Uu&i#cUZ$c>{|Miurw?#ATLb18i}jJO#shul?(Qt1 z1+yCYZy(KdfGeW3wV#6{2PuGp6~B^^?@u9YFrO8 z(>V7zS19tQb3K@!*`dgblh>yuo{%(oXEhkI*TmWaSK{1U^9Mw#*y^(2lzH$z=EHmD zgEl>|Sg#uN>B~yeY6o--9nb)mt0ti^m*Z2wMOsA37JvW4-4fU zYH&ke`}6H}myVa`dVl-1<98Nc-P1r)Ga>JbniBabc+&#JEcIaXM9UxNi2e6q|Lp8w zA)C7I=`@yvXFBCOn%AW?MFGg?>+8bZABcFVyVP06 z4_3`ZNQ!K1cv_dt_{G(i%W`i|a4L2$D_HHI`@Hey^5#k&r~X9{KJ9VZ7~AItja+uC zyN%$mqKjY%gx0jS@ubsLvJugvpbal?Y2n^~upp=_J%>$A(Z zKW8v4b%hz;}{N-VO;2B01rIK*3_6ClJ^@hfYFK$hNOn z@SieB`vnlqOv>Sb8}sswjg)GW%E|TRUoNk2F4-4??Qssn!}?>#C*0YF9nO?R(`9DEp#m*UljOvG^012E+eei z(%^p%8*eiUE_LDz!|pH7C_{F8yIjOAOsQT4f{LpjFRo2l1(i{D;cNC$7rD>}dK0%j zI>2@Jh%@b!_y5h*E3Q6GHomI9&T=VFuio*AO5=Zi-}Q;A-+%tO^~u|->;LxEPCs8n znk(<9%H|HNAp0{v|HkeT*Wr(TWB(@;jUs;`V`cdT+aXNh%B^oJ@}4+H9NYo_KQR?D zRY)*d*Zj9FUoKAU_}z|yP$#rj$L1C6I=n-==!b(7v)SBK9ehisCMEd+G{Fg&gU01{ zHPKx!E$ix6$~Gh<&8!e>Iq7-Sz0edaI6OjB6`;3fhQ$W1>Ykq%!-j`s2q81>|8`&;on*%zETTc#LIJ5hKugG!$v_yLjS+FL`&Y# zT%kDB$kp6w-D=;+ zxylc_r_L){r@4~=e)?e z=4~R5eDUkmr;B%(^|BX?^#Cg}8XldT=7wcVeh0iwUeI3-+CXVrX7lObS5U^%MGfL` z!VdD%i5o1#rNF_U8U|Q9wJCQ;;Oz6?4v+wEOCqNdz1%7v#Y9beTl&RK_-1v0K4lRoR6ds73*7Pyf+gCzGS z#wtL9j#c@XsKw@iH`HS_?*gM_k}0@QeCT)0Feg8*)05h|!+ zu0QhiQO%GxZt--ZUt}3$3qV}*KMwFJT=Q8Va6gFAHS-np%Um(m?BOBkw_m-UG~+*`l>U0Mp;rLZ#(DK7n^`Uy95{JhJs zoXw`Znje*tQq5p{nmQW)1A7l+F93iJ7A&%iTjGYLt!&U?c9biTUz*5AvGD3j|BSH| z!AjN5qvUYf>tr*UC}VU1$HmcJ22G+>E<5hy5V^N{N^*7mRwv4Mv&KO%_}h)={v#H^ z@;MQU%J><7N|g&N4U<)FfeDlIy>Du2Ol+`PSQr{DK)F*T>>{i=^t?|_XD>lLuvE55 z2stz?PAH4Y4x9rsej*LFWl~@R8C5t-`xHDVep>UN;?oB-d`z-8zpfOpn@zV&TY1yQ z=`cFE2}>kH#6Md$vpcXNCF1#y7-V{umFQ!#%I{+R!;^~oNh4*Y*&=Xf$I?-T5VUvA#4-v4;< z_Hy;^^5(77Ewb-|eyJ7LsuDcH$u#cn&d0&DBf$0NbM8F5H->0Gxp*Vz>%AWN&6oFA zh@Y;~A@I)6vdwaEX7_jqK#x_;A|lP|XUvyx1AK z)g-Iy$*df(!i*`M8cQIThYU!ESI|0|$pw}_7G+Z*Vtr*UEdzt0Jy}|Lwo3r`J8myH zM@OTpm)^nX$;VHh=@I(w6SEZe`{sk8KY#gjb#eRt%F6nla>mnIWCU#4UUASja&!ra zj_OPOZ<1G-n@6N0ye@MI!+`dmh<)=0TCMF5ZQRaqi{T_|)NQAfY+a0zX91yyywDVh zG)E$DQ+Sk#$nwp)62&HqNj8$3w|{b>>>QKo9-R^iIhCIC!hung$ctdilf8svddvIl zBIotX2#P|UijP*V%O2&r>`|`EwoNHUa5<|-bGg&}Swq`ElJcnH zo0EJ6a4P4!`r(F;+`WLi!N%N&a{YCkeFvF5-WcA0Z8KxDk8kVVcGz_~tG(-OC(x5@ zECM7ETz%Bh*Ke%uaX-*c7QTb+Sb6r8uLe$+iwEV5yqi>aRtDm-pNUV~$|6)lVnID3 z))f1nn*dQ}YW@uV4+dc4dH;2FvbFb3`d5D=>cJYpe=34M(RW#J3lXHAbZsLnt>YL| zI^T8~;pwz{P^URxuO|>Y)db_^IS?Ehj-gD*THbv;!a`?Ca45#aUulz~UOJMSwxGPE zxVB1K(_}G42tGV!p;(Rrze|yw>!xH=!=ri7G*4}kw0qU=VisJJ3%f-AyN3Ia^5Ry= zkE2*kXpU3~X8FSfo33J&50|Tpx3~Bj8yfCZ&gPxxLBF0TP~9~Na}!EKju(RV=}wdI zv$Hb*Vl}N8=e@CAMO6e3WqoRK#F~#H)6yC`AW;4bN^m{p_^}=iBjpsN|Tg1@5 zI=*QP+ER3Tr?MrAp(B>AYd!mQt*5xOHmI0`I|@UlDh!eBKUtbaNxa5ZT1{Fd%LR31 ztu@hCWq&grXIVBi0Z3XRylm$`cqIDws$zOJCo*DF${H-5CY@$qYgSI>I(X*LOi z?zY^6?zY?VJ|BvDEl-9iU7KHfY{%`D*M7cdrftU`xDM0c)2MS3G=iovf{&+ zG$83|e&ZAZPR}>q(sA9K`-I`m_v$nz=!=%VCGPS%k~?5qI16sH9-WT2SZLw7*0x-a=S(baOn;aq_i-z5$+<3`!5^bfBXLPd%7H8 z>o+7>m=i}YNFKd-^WoIh3(tQ2dos-fxz2 z@NzOo-5DbSdaNEM0E!6fg2*a_OQ8pGS%b{QFE-QYOntU{O8Zoq3L$jXFw@EJ-o6)W z$t2gy^SRqJzvWhTZnS?+UOF2DJz<_~gx&z*)OtLAvq|zosIqFo(w*jvrqvj4hkP@%iwk@LYq=gpal)B(i@>+r^Y&aHL zWC>I=T)8A~`yA}`V4?P1Ibl;KTAO709kSiNX&v3SX&pVVX&pVVX(4JO2Sjg+I++C9nxE|- zA7PmQGwNFT?c-wr{P?WF`!WGOi}~k!xzAg<<_4;No?kT_=`WYhK3v@VS@ucZHbms! zZ~oN#55j5=CeSMNxQ)1oH=aYT7?C=CsRrvEiOe{Lx>a`7w-P6zNZ)MryMy&Ul>xVeRKc>;<=i{&nPHh{NxQNQxe>Y27z&{Qx$hu9rS!Y#H9I{4SK*~`RKrf&{( z7|uGLpDpxa<^DJ8y1(1eR@0P2dae7&eM}iX9p@5mf{}GD zjh(Tyb-;dj*C}EU>4o2a%7d5Dgnr;MoWf=DlVj_F5lKPh#wVWR+nHIPuzX+hT`IE4B=Lystwz>k`HwBf!ssx5~S45KF2WjWa z0YPAIb9HO5oHuibE>FA?VQ`M@Y&@Uh61;fv`ti@gg&I<3zPD0?c`_Ta10*p6 z`q$k52bMobv+qtd11<|YC+6s#XVFUPF=q|LfP3g#YQ6K|Nz`L;l7@60m8~`%mE~XN zSx)-p#>Xwv^OEDMhVvdM=1R?0R$wanpfNpmOkd&VN0_$G^6&%pnXqMR za`L5i1gYSCt^QY@u zJc0&nM8yZ7ZPJXcQUjTk4#o~S7lI3kDr97ctWead@16AxLSqol83szZY7k8xb=_3J zHfYOjtd`$V5~a!5E(Y+hN0VW4?#11Ug(U$)8a=RkrgNhhR8#?3PqYcmT=T2qpw{f3 zs8KGFhfP)XcPBjaM~gyaBAII^Fl7rUAgZwMC2vo}A~ zEexSxE53`cF3Xg-4YT}+Lur;Md3*W(FPE@#g^bS5Jdv!p8Qq8dqxr%4j#z-YRL#1# zZ7|rQSrT9V1ODWYGcJa3e&CLc7wb%%d8}in(R^br@d5lP%(vK>>|gNABtTeCW%qN z*Fl3y6+|*@e78v_ZLbv>jpmfXCM3CIxlOm3HatYGrjn)3_h`KF(L^h4l zC2DM8=4V~4VWMPwd`S~0kU3b~l@1m`K9mDm(Tn?BR^;GmsYkUg#6n71LoH*ej{Fm- zGs|5EL-XX1y~k#y00Vnpkyrm}Ugav7ryoB3h14}!ov*gnjuHTVHESFdwXyt5E6-{4 zK70xd^ICs4sL$){J$do&t(~}9{q6Gl6R`SEt5y9c=}wzh?)dU{bIgC}mn&)4yuW|w zmp{~~(>hFAy3ps1(uMo_T|Mt%|C%#sa#EBydN)eWfWq+9{^6akB@bg|XUWrIWfKN= zn$yjUArQ8|&dPzW#hNix#dtFIlMA=JhP;P)l>;IzE4QJBf(Vm3&8jcYf zB}!)-@I0K|(++_T4SbVoF51A@UzY}H{GMoC%|n^fWm}{`>PFfy)UB7N;V(#3jD42d z&%1)0gw$^(`zErYi3qe#ff&Q&@qXE&NR$@1uT4U=w5D^4b3viLr!2L()a;HXIi%V= zI7opAKgmcrCBuN&u#~a!IAw}`N1onE)M+QLk6S&Dp7d;FAhPszTHlI>66EoS1#Gs2 zakj*+^9rmgm#-G{sX{)rOIf#8PfdT{t&~Kk#LmC3m68M_nTFXrbsfy~8jYW4!Av&S zecjjsP;zHLKn9FD7$c^)FrS}L=jD+bjz`_ik!FrGg*pWzaC&3AmxrpJv2SxAcuH94H?dN zsfX5I*rGg$J_rAq9tS;JxpFeC$-y5x+9TMjFcIW6uW4(+VvQ*`?L<+hcUZt_wt%%~ zSj(*$DM?OwBsMHs7)^aZkB@9L&9j6qg(I&N89rr1WUcfsexK<;wM~Wjdq(P)U*EJo z8Bl2P3AA*xTx8SxwC12g?+q%*R%VWHqNNu$5z|dxXqovIo?hivLj$Mg`#f1VXV9J= zt;Cp4fCt_zSU{}%a5Z~4qj3#aJeB9zexY!us^xETRAlL{ki@mhmEm}zb(jpwq?6%R zZB083%2q}+Ep}N!$lSOW7n>|LA4HR?@gq(e4s;ScC^DP$F8U%InfxaIDCNmN`oP2t zbjUs?$Msx%yh*{*fF3p|9w2@femBzv!9i%|2t~-8h9JQeOxZQAN}U(UTG++I&~2*Ir>Wab zCAx&lY{Ew|9JyJNh4C8J-DLXFO{U?x93H>&UK;WRys?CUv2qn}El4A!8QK}pGKQUZ zTjhW@M=f29CBfFQ?->!Yx$12gt(KM~RIcKzW%Afzl#hM1{yimycCzOxTXKGZP`i##c|U z_w6bP(o@#Xo|LnA?*D)uqHlQ&%h2Nx?B{8tGI|Rr;-npy2B$p|aZDS$BCS6CNJj4FqOxS48NN zn?b0=kl%~z>x*Bb_}HzCL`+jC-$TdLj(%MR_?{o;qE~+tSBGTMXKFmIVOD+k@{7st z(!$9oSHBS9an>{Oc`)9B(~@MK_{HEVLlS0pqAGlNZ?>M#Eo{PT{u0So0q;<18(ZJG=%$C!?4 z5O_?7c9(8I8!9k+_TdI%trz;za_F|FgRWp}^)|01TAQ3_g~kes%blQ7JA(94o2a0v zE3A}qVsq8DXC##4E2`N7YZnOhai}1@RXvc>hzta|Bvr4ujqd) zmO~;v_y;!|F2crqO>5w5XGP$nyuJM!7Q)yN+Oq__lZ2f!r)pBBW)wvXO@cZ#5HE;v zPvf6}D09;!d*jYF;&vOFnAmEwnlao~bRYbzKFQwPo6Li0^^TW{8^fFnJ;`=M z#CY<#ujI1eR2K{E+7L&oyNw;RWpH@cbuEHm2U?WB-sL|h&#iK`;6hrNo6|E1+K+dv zHBf*Y4r=7?4~(4;T`P}l+6z{3;3{bT2!P5Q<9Z#t`Bb%HUQ_@?kDA%yY>%(zK9kEH zed1zb5Ih@R-2Vk;b=oO9H{a@x&9};%FJ+FOK3%P-*}Ozi=<0@&i))ov{zyl!ckF+* z2CB_IS#y44AW65R&5II@SkDf2WPF$R)yUN}O<1xytiG9OLL0Y`e4p96hMV z2VvF1?AYe^X0xDV1?~aNs9MWb0KgqnR&6}Y29ilGEnc70dhEJ8XWPeTd*#OjCccRa z^H1S%p0}cC!#=*by|^WNbNj?7i3bd2YBqPFYS~6tL~r^=Uqo^6HZJtGk_es;#85Wj zsa^dZRcgZjSt05p?1?(EBVOTj>@N@@-7WShm`O1U1N zAMF5_vRt@(2Y!RKm$gQGf9o9_ByU9?XEq#~yp~?heg~}I#*UDf5ap~MO`z>-bXaN0 z8MS2#3~q`g_wYZ_GnrTSGeGSW+SmkZYK?am-$9~H5JTLD0lyAu14oswu2FK=q=JkF zgC_^uE5orM0HH<%8YLeqiIR=X*a#|Grz=ZNVj#f|q$H)J1`&0>;ve@ep4X?~9bPUH-b^PokG;0w< z()uY_Q0+~Da)Thvgg9i-uA%;v(?1-6=k=}kHZ$=wCy*Kj=Z-hrEF zwT9@A*(H)^VIS1}JV zlatb&f*W+F;5eMHTpxnU6OUR;gxS&_u(TSo1Kjc=-}AaNGn(NdrhC}z3;_n4ooPG{ zr+aWTX6Njn6(&z60VOi>&V*UZu#Tj%=8-ExJ-hn{a<$!Y#AIrjcEvmWEiUX9BV9Th zNpm#DASJwV=YghZ!xSJbX~(olzBa}5T#9xKNmha}(+jlFpo1ASR6*ZkZSj*nJ=H|!ChUliBlHn}&-!|wxnOJDYV;X61l6Yaw%4^^DoZPe`;jJ9J zZ8ormV#}_n&8Y}*b^YaI3Jw$<`lA?hKA(ABNCjc3{5&fJo;=^80=@QdTfs8UTbfR} zty^KL>$W;&dZM4{ntHL80bH9cTVz|(8X_I3RAn>N$zR;<@#pSytuM|VzjPIkj=h4b z6_4OLTwY&)`7AD|hV~ABIb@Ti+>}^;YY#C~fo|F;P3L$$OQu=nS!*S&XYCNAKZcQ8 z?A^f9R)R@ViNsS!M%O0L^6P&Y{GtE#?}!amtu(*7xVZ`2OrdmVcr95%y=Q{iuC7$7F=<+^E+a6arJh@R zvA~9MyIMwIldBkeW3XN}*jJds^ezOrdHRj#sP zG_f~Z0t3;6`BWm7&L~D_cu~uJXKX$AEnZ)9 z-!*7{q}SRc>{?$E#g1Vf(8P?~M`4#}W7wGz=|ju26M09G!dh=LJ0V6>gc*$*0_My- zB?k?=yGfb9f4X~0(}lZo)*mi^x)_gij*Sp`g|4Ctoka=KV@?CHddz8*);{JmzVuP& z@vU*5UQyc7at_YxjeXjGi&Z$Z-8JXf=6gA+Fc=_LL3_)Kkh}Zx?yZTQo4w9LZ=ELF zxB}dJR{GwlF#`K)REY%u3YjyM#&{w^X_^&Ep6ko5;L5cgEW(p`*X*253-;I4Mv%Ch zCG3;>-I~0c^kVjxvu%hRcyJvH>GK7Z2)&I!Rtb?Mm!X6D*F@&=`>ZNY|B@J@39lq4 z#7F=`>-}?Y;|;unf9dI$KiDsw<3h>w$rj3U@+Eh7V-R>-s(}fIC$^5*g5zM6^h$dQ z(?UcS*&!2cOTSaNb_)jlIC;fM6EPcDtwry$K#-NK3W@VbJ4oK#rs7^R zl^8h>Ol~5i)HD>4Qk*~d* zUk#?z>0Le_ZIT4haBtJ#{^jh%=c(hrWwfp$ZJAPuKLfmE0?By%#A?L67#bsV!FL2$ z&`&Xn>Z}}~=8xSs@S){-V+#`0Z!?=NX55cYT$}mcx|TLnR&v|PXd~3OA+;KWyo5 zmk2G$C*~X&%!=B%$SZ@_w;n)&E@1041lnObdn&7jODCwS#dbC{e1TJlV~t_7=O^Ds z+rl1u1|n?JjF$lpumOFV0T4H`HZMACwiml zM9Ht1ieHi5doEHb-+KlL%J<%HxVSMtn+qphG>h?<7tMt2@}gDduloYyaa*mMG<)li znSH|%g+Vpi8ck3yffNqFzTD%5Th|UJDt^4V?fuegA(^Yy=j%^D$thj2X=U|{83XQ8 z`CBe-4A&S#aVOchrgfS=JP$92B31+swCvx`e{6jn!*vJ{Ug?f|v!5O%_6AP@RUby>bAp#X9_X~)Yuv9;)Fy>$pWeKnRRCErUcFE@gM`@3ft5}?x6Ot zoq+)n9zDs${;S1KQXF2Zs7G~}?T=wo2x2!*t8eTrMi;~ zLdeD={es2AE#Vxs2{PGZ=rwUFhjx~YpAUUwVmu(2YEx1qW9+I9G+~nRc|!G4ej|@* zm~)hDIuYYsgjSgIsz!&j32&}#!aTBxx!=8k>EnB;;C6u^gX7?)8drIZ_M|oJlPsR_ zX-M;{owNP<4a$qblJ3=YG3G0od@G4{7H z&hOs;Wre`RRTGN*ozTagvMRmbI}mBf9{y)p2O**#&s=^m|eZr15#BkG; zz_Rbwmf%1!TPqjTKz>`#M$2pq*CCwYWxqT*J|ZtG8zrun>~Evp$a)MaugQG_{$lG# z|IdL%1JNb@WZ%Vj*By$*cr0>t=;Lckn+~J-xvgUqK zl=FnGjSb2!Hn-qG@|ouOBw#iPhk?yvO4G8Zaac!J!D=g6gL2t#W!JDl*v})#Wi1ss zWIt%V^oj}Xp7}cH(;vZfU|l5YdWUw7s1AqA?P?Z+#mpYUYhS;Qam54Zl`}Jiw(}51+tMNTqMC-IS=sz|($^3+!t56V@FCJv z60Z3Fs>DVoGtqVF|87DPq>#L|w^=f%Ruoslucqh6$+?0H{>ut-Y>I+rmTrb=c~N;^ zcy%&>LKO>8J#FOT;9z2<+;ffu>K;00vy!@MUhLiBKhb|D zzFmj^MbTyKk+UnP>#KL4{`yg6H_wpl-{|QlL`KmV4GDjOuY`8ixZ9K0dl1N_T>;8Z z;L?%)P!IYrP#bSQeffAxQP11!PtQEk^z`FkBhH{6O{Y-IW#_oT;_7&#sqWLO-BG!U zKe5zhX=<%;*}3d&;CdPVZR2VqOj$;JA}P96%N3sc+rKk3;=Q3)NY`5P^>7T`*`tc9 z)UHmgBGqC@?a0acs1G*;77UYWt(cE%Ved~LzYtDbQI-;suV(KtjfW(7PBDTSarpD$ z*`F-PkJ!#j);FQItboUr6PlsQAa2Q3HpEyj--47qp;bf_Yk<`dabTW{cpjYUj&0KR z%GfW5li|*eyVG)(8ECxawMAxLHc_eq3HPnu@GRTi^tZG{;f^NqP7 zlUA6Cydye2u)QyWSb3~NPT4&@^F5*!uuvW1=kIHsjY{H9X;Bfo3Hj}p7p>?!@gz~K z@1BjprSMV0&~(jMox_CXoWKVX^fA-WdfYWTuYcaIf3(mgBD4Ca+yF{Mj})uj@$&f4 zA;P;qzc+5+@6G514JdQ6aW8!+gM=A|tTY2;ajX=wGQWJY99V05l^YX>HpsKvpKc%4 z2ic&0mezk)q_^W{5fZu7S9RSBW(8co-b5AlX;D0BbM51)Ha`OCWNv3>U+{-7Rg z=D8$sNT?C!PDNXhTRvly~#r+1~EIcIqC)|A4rBX(TJ0uo~hQ2wu=}gjVbc}oxHrQ zU7{=s^n1A!A58+7&cMc*66AeB;=*G zWGlh~(K7fpQ$c?326^S%jmuv?tA5AJse3$m%m(;GU6Z7uX<5@Xac66T!zsPeh?T>Q z)TRh3LHQ@Lu^s#TyUWish`G2`?I8QC?I3tlDWzXSBL*i-Rc@x&lS{};yEc}zlGU(M z#N$P*o~E}*siRTPSPk1-9k(5zI63uVQd@yW)R%CVVy)Ia4JSc!ZgV-baaH3a?z(FL zO-u#zRWReRq?MqjRPT7klVhLg@QLx6@Ab3&u)~$}4~}yoOdvWUQ>~{m#VvBkqlIUz zeWyRKm=RhjnlEXcSS3^)GzRTSvtQmWq|~rqH=ll7ef)I${>NY4TkRO7nd&eD3q9YJ z%(y)$j0%0Jh!yEetz1Ajmq8HDK0rw8pqUx)$)LnQa(TKFLp6J}bb0E;5Y8F~eMZe0 zO^k?=VOwC0Q+}eA09F!M|2cWCMDRBTJfAFGEki@GHIGL;eZ4)=1KL{U-V4G>)nJZv z1@D_pP$LPBv^=?Pt+%aQXd;Bp-X`WF4eUrQ?lrJUeI-~mYjx6PD+gb0zzA!`W~?F^ z#g#8py{Q8_6_)oU4bt9SzWMT#geu?PKsMia_vR;lZnoO}@Z-CDIFPKNaSkQ?oVzmdz8TF`y+Rmk$Z@qTJ#Bv}6?? zAtG{{L`35H54rTx+mCMu*AAy9aSH3y1sfJSrofv=l?iZGBk#dpK?CrnY<6}J{WkbgY=Taxg&uG)SQLuh+AZXW;ZupSuBPJkW z`TY?&iskpd(8V7n{yY8tBtp?_-iHm34XQ*KL1tz6vFk+dc(%F4dSXrH?u50zNN%d~zbVrV6%n}|u~(h#A1=JgQah86 z7(uWlYet5R$nZGI$$ExX-@LQ*boj$l< z!*1=2hK8M-(H2*=-zQ0{!B{BJtC$rnrL{3aNX%+#){7RUofV!UwGlP4TiadRSPXT1LPIUa@Hi> zxho~2)@<$%*J0X5O~@o`+(($TfBAe1J|=I`nJzB#=^Y6sjZm#?jU;fnCg7S0QC{|q zriO;j=ZZY;hN1Ld-;}Ko&6*UVBerq`&NbhqF6t>Aw>i~rGAd5w^J_a?G~eTxZGhgP zHT!|tu~%H#)Kw)nSf}NDLuVLSHCza8ip547)j$1HObli#g?07w$9qmuW8uS2x&eo* zfs#hEO!Mn4caR7}FDDyH&pi(b%-AH+zrR=dqnd|khr^$EZ$7}I!E`hoZw;oKR3q>i zI(`{UDVKrzqoJ**xj!UHACFze&>`p6sxpv|o^i1zqd3&2dN?^T83Qa9!v1W;bpb2RTEUgvKrJDqVK|Yf9Li zo$`8jQTtNLj?EBc3lFQjrfI0HR%~u|ZgYcU1V(CydvB6VEvhWFqupwG(z<$ohzDEG zwj>{wS$*=$OrjJ+c>HS7VthO2FBI2ew8G@gDn|87oW;h--G4P334 z$4rIzXi_WWJNfQZYf9`SOXxxjVh!+`*OIv(F0QBpGk}+GCq+7Uh0FEQ94Uh30Me)8 za91R)Uqo(~hzw7FA1uv$zS|`VbD8dFA~hA0oQczO*~yaB>C1&dBH%^=8ezcJLHUVb zG7Dc?Q9$3)92t)Xo@|=W@a%`Bz1zYwayZ@xO6o+paL}ZR)_MtOcpHr`#E5M1ehqbn zCTtb#9wFF!kQGXzQ5u^%Hx-L|*HT^cy~X?+`k}Xyt$jG2HoQ2CCkOkW7_ygkjrq0{ z(V~@|s#XAO?K@c*C#NTECx45n)>Oo3k0jQOD>KEI4jo|ev=7XmGz2Y?pz0-g89NDe z23_$Zc550DEBMxym%!Fq<4zCeTSWPG!jOp|)#Y7nEm-*;uNsrE8L&1y>TE}N=o;Md zAxBO-PiNbKG-HkY&-;mh!2G(|8iGHXGf2e6>ZEIN0PS`U_FYGF)olIJa){^0?BlQ7 zFIS8(pC3?sa!Cn9l5-$1=^cm3sYreJ6JbV5iWF+O8o zZp!buxyCrz!q4P>?K%$4G}ySRBgF++ljK2UUdnQS|cWU2^HC!xC&#jR=jbGKIqSSc(q@ieskMN))miFhU5<5s$n3Ef z%hr>8YXc{yT3oD_!;@J!DVUe}Fuh`8+71Tatl||X(EYAcz;zxv1#+Gyi3T8O8*<qZvNu3 zN9YS!*NNg{o8I6FeaG5vOA~&Rged;%4jSl|!_+P~BH~YLKN%AdT+*&TY)z>hX1q_S zzN|&LK}r&?gl3&x=sa%A&jGEtNowLvZ)R6y{63P_C+C1z=uaZMYf|uE)d%7N@>6rh z$b)3QFomeq-nEP(NEhi97=KWJ7V_XDo=q*v*}O2g?2l0P^Zqp$Bv`mWn+91Cp~Msi z4ep!ZRabrc2g#eVH|^clg`yvcl=pt9LXU>^P>bdhPSn?Cu_MR65rEiH}jG z5d~SLuAmxpuxlJxYi5_1f~}Q#7O)?#M{|`D0y2?CqUo=nu(j(`CaH>QJp=`>dWdyO zoL<2>y*pFrWqYO+B&!q-g9+V)<6QDRX0f-+*Chi$X;EGwzCTQ*1FiHPshEYiy{1jb zibDBd|0UGLKqcypgKh`StwA2n%0h}RKgaK|CVTk(Pmj9Qy!S;?$5 z?cm3E;(WM|W@ppP^*?KOzH3Zfr(B^EV=Alu_SlYwcQ?k%^GKF z!5g6b$~hOFd0_Y0fB6!q!{y`Qun7ptbxWQ{uszz=pCgtnjdFR3T3h(UOh``7z(vAR zgrlsRnM#ToVOJiO5t=8n|1tpb$5MmOFHQWkOnn^$rv8-k71$!^6 zyY^lCy6WoMU3*{4+I#P1b(imXXP!Cb=H|lh|9$`aGxD6dbLX5hZidrBbFrXIH#N? z=4~^4;RbkDo2D4?My4L@SyIVW4$bel)@T;@$K<=4g^{UTwhFh@O~+vbm~bFy4KVm{ z(@~3rrD)O%a%A;y*O(!($HEq6$E9%;n9K{Hq9!$gE5B*hjnje5`2wQFnH{-Z^$pmy zH?5&XD{|0M4Vf1)j0z!+s6oW4RratgLKc8_#FWd#FXjS!(n1}T z(m%90BGxK9-DUP`l^8OzJ-0@f3wf}KgkvQUBD7)JrN}U~LcG?ei+X0N6r3bMZ~lzB z=GJLbf(uz6-E6EI=1@Im$e7mNK6&C47^*QT;*f9~c&tpB9gcG7QB7Ap{;x-9PG?HHyHXTQrMI{Q3C2{2@7_oHTVeVQB!*>_DOdjAqRa9u}~U)!1+wQ!EZT+ zY^@W9LG{H6hngIRN=kp@JoFE@wZ^(h@dFAuV)x2&l9-!V z+{!%&G?ZDT_n}ja;SLWxfSI`nH7v^lB4XL|LvL&g3M(m<8Rx$R! z2%-86Dh`0mZOqw4_6PtRYi}4r$X&e=lN3p~i)8+fm8@QKnksbb>5WKiWL=(iDrnLO zit8?D&_JO+=EO_VVe9@Wlld{6!cIu5j`vqeLK5EZ9=u7Z#7IrXDkkbtDi%v5W3f;& znhd4m@o*xH7$hBpWR|`!C8^F$YeGfwU6~l6i0n<}bTyOMeKU|MnVZwGEf=#dgl#_{ zqrSN3POZ1K;ut&FJv!T`$#HeyfM`V?RRYt;5JT5Qf)MS!)s8mLy|PFPcL;G4BalGuV6csL2t;%;V`MYIFm<^JPezW3qJP~^vf4YSSCHzPxEO45X^7Sf zt#58l(2!;w6Yd*fV1mDuU^rwbh8-QePxdrn11Fk@>YX*3$4#ko)0ahJe)`PRm9o*Q zt|1KDK>y`~ozql_t?^Jx1FO#5kDpCe(DawRrs4>{g-j>y{-D4#4kyd=+@#BMWhzRHGYg zH#slCi=hqI`a)-$?K%pl%Afp{vaZ>H89tm!+J$7LhDiB0a1Wgh{yyTqfpnTl8BF#e z{_XmX4so>hJIU}+V?%J`VEwBq==Okzio2;@QtcPNv<&8IFk)VHO}-^TS2_mXEw&VA$e`^3*5pIlV`?07I$w_L zN|pjV3KH`NGDyin*2adC@co2P^@$T&^}(?SR0|!Nj=K^7BnjFW5Sgu0jVxN|CK|!k zTS+v63|nrVk&>(CF{}|kE_kUhE<^nvp&BlrAqZUAqCw53) z4~%{DL^-rq&x9GsNUD$ClB{q%#>u^(E3omTWA}@GX;QIKhH(}?A)w7w(wk;Ni4@1l zG^8&Bn`H`1sQP#l2Hg8i>0Sqj>B3Gkyq?kSOvZQ5i=>AmY!4KJEgods97g7n%S72N zE{RC_g`aS@xIj8U^i|0qg=9MkDGD}CP|XUElt}r_Gbpxn*v4zP<8OUoi1q*pv>A=@ zHW({&z_QsJYyRIh#wItOJ-6bXvje<6XVhQaDM_OZ|kROW4uKo}yS`xxys} zu@O6KJnN1arDcw2^GLakwmPA9(Egw^;6_Rf5TeA@^-FMI3u-c>YqH4QgRaw>8zOHj z9ML1+t~|Q8DO}mwr&}@6y+ZKdg2Y3EY-{Rgsdh+m^IGY!pKm_`D&Wg~=BKqT6Smgg zz~n*DNLkfA;_lrr#svx4wPptKDSFFhM&k@gGiAn7Ob|$CbvEYqGs?f=rgj9pvm|(zuTdiXaP~z;G4qGuUFf0+A{$0j4k79RC zd!h9Z8?}AT|ENOp#WL1!|4ukjHYhM0x6>mijKzJ<0I|tQup)>=O4+?;pyf6Wke+ix zZD4>b*;kbgLE4wj1q~>7@|b)r(+aV;$d;)!`4ChA?>(^%p6BL5taqc-Fmz%?kn~X9 zy!qAv1c?2V365vr1qbSa$511s1kuTj06<(~2*0xeO8r{v;$zWMm8uyNc z431ZM3s}UnfCb|e>M>R}E>Xg-wP0ZkR1&t(ZzBdav>7`@dxP13;P#JyAsSI%>rlp& z3sX21Z)sZ+$ywfML_%npMv`+GpAbj8BTV;D#m%pT&j&#J*#Df;iM< z3AG^Hk7fj&f?uWq)=)_>c3R9`{&-xwP$ITxBIT_fP}$286wm5mwgC0_8>F<~0Lxb5 z0gPMO?J5k2Re!io!aaSlBs+ASY!{|?K}^hLH%p*%z3FURdR*O_w+T-)OwKaJR5LW6 z5)}#d!+NL;rB;67km4EA&P?qXvg3$1gZ0WRD9Epn7~`1Z_S@-g*d-lcaPp1z=K6^% zl6g<+teY?m8wY~{J82A9z**wDn8f%Y%(AW$v#c{&!^9}+YEl$9C0C)DH(KctU#2;s z*BbxjL3KEMe*r$(B>q&rPp1EuDKD9uoMQmqQf6n1oK9}<&%HG0JgdXBbd=Fy!1bVp zEszngS$c&7Mnq;WTmdc!42XrY9QAVM2%`r@ZKAgviet87Mz%82h6& zA%ri>o`ql{aLwK_bUKb3>e4xg8YSnH5of{u=&A^p+0d`kwc_#or{sz5!7xde@0YcS z;8=mO%QWoTL}Y=uF|m_{j~K~|GMU-bPVPdzkiFu1jxg`6P#7<3A`QpO5(^Yt=|h4w zanzT@VTAqKF{zvxy{KL2C2KJp!{qbn`uax_lB@U79I~J%-|z4(iDoPu+E>7VR149UKdgXAw3;0xrgI-( zOs6T8khFc=s{i*JOe-D9t%+^G5)zXj5HA+lr4+`gq7&(f*kSdEz@(SV4cfknQ`K;K z3C^XH!No?t2~#@S>KdAOEmdHAn=-XkB6Wqq(e=EM z^LT?u0PYe5hY<;M!TjF7%zT}Y&7U91mUk_bRBZwC3COERwnE}cO*xdQ7iN~sU69Fl z$%fz(+6WHm>d`*;=v zGZKS2f{T?&2nJ)i9A9CGx0`0$MBkSQO$#xyP|Q}^g(4{ZVRTgwzt?=>8kZ!A$cOVjATOk)F&veNfZ9g?>G#L}VA8 z8*EiuH)W?JlHZGf?rFZkjnPrFF}ewHTt;k9m5S}7YU~$2Ysl!D!swdf=$hH1Yv!00 zphb%^DP)pOx|3&Ub+NNXC!K(MCb&LBveQV2hignW79tb*Q4$alFvd&AX_t*(3gs@W zYyq|~SO)vN~ z1O;S%e68Y$$X{YvOo@M2$cxsI`)wmkn4~+VYmK?iWP!1gn12Ihkoy~2jKB+-8*+Yw zwG8l-!l})2h_>_r)DN(CM5<3P6yM-|q+ho`)OHW@g;P)okn6B({0vfyglo6(pKh1$ z?#;;Yc9w#a6^T-@@@p*RibSp}2wV!eWSTlhX2do>uYmO1HCXOA`j=bRQl8nsA2Fuw z^47Kh*Jgh&qj51>gON_&E9{O^D)bqD{sr&>%7-Dzt#s(IUA@R-IP4ZYKL9)bS zAtvj?-z?uB|>sWr;M}-=<~A_L@6|uNz|YZW5ca=y5f#WlP5vj zX=rMb?0FqpSo3Ftu36M838F;^$6m0xbC+~2?(XfD)hqh99+0*Fbcz zNL-4I>95TV7zbG$r9@D6j0>6al0@nOgPj((c(}a8?BE^DQKp4h3K|BIS(=l{JpVQV z0@}tTaU`lp&ZPkcb>bP&s=7^^b z?N6>la%kbAJhak<`bad$qM=~YHFM^RmQ+XW8?{yi+40_g80+dVjIKLc1U3XI`vmvw zqPYik>D--*=4-zx=00LJNC1s&0DDzXoJxqg(=fS71Sfq`2)C?Sb1z5^Qb{6JDZMxX zecQzJrCyX;AT!E{Wp5#*7|_-|Og3{o0|>2QI6?9|fNYd-Wg~B^TkE2E*+P%fyBrK@ zD%HSuxyCp=fNHT(@^u!`>JTaYBh`PO03o@$%glPS}8vAV=}K zPj5O*2M0bB5?cyJx1)j;5noo^CxGuOZUDgdW*-blpk&cB#0Lj%@r}wyC?PmrR6%? zu^u#E59%KvA)b_jTZfP$M*Jp1AUGQ%?g6p^@`OOUa$+)yJuz9w6&ZR9`AJ70Nt~2; zS4(%oMa7{2M$*)U|4s2?kzyhc>wHV_=LFYkI)Y$gqw{(v9*VRqnwmMGTi;c}66yY# z(9e0C4uRrO@31>*{IVXMXW~q9&068K7N-W-jE~rMaic?0vmH2qDGs){GI~bDGsRKs zfd~q=7kqd4pJd&ZhMFY(aV9z$dm@Sm2%jGz*i6a@b~sI_uj>%W{)+5)bBq-dXDgbK zbEQmB3im7uZB-udC<^)3q)+v%$A#YBE^+9Io46s`0C7=-9(-RW`9?!%<;Q2?koc7z zpA~|@3`%R{tATE1kI%BcminokEoHndkfB90(;Jw?vY4A&VaqVSlpVt`SHt|Ypl8W2 zBkwkrkLymLZSXZ5Gg~ukF7kLmCxlU0@3VrTN2?C-Md_e^?7>1zKPIJ^T1-5l32DYj zuad|@f?bUGh2ZI+5GTT>HaB?mWlbd=1o^=zlV(jp=MKa) zO5mMXXz&!Ur-+*Ys|0zOM!IDnSEFins=*ln2<;0`LrybS*U^#o;U>L)Z3MISQ{iph zz5edvgy9&9n9kW2e1?c&Y4#xH5_Kh(LV%WNELt>k_oz_EmJGRNk}@RXSZ*Q~AP{C` z4M4wHYraG_1TxlvDpVE>CU?kDZUgT?#Qj$ydZ5C}Zc#a22)CdvG4N|5hehRwl$EL1 zd40uoUXOKNd3n~$GGAGhm8RjT57{(4p6I{{28X0Q^>}e%ettm@d}U%pgTN}Yo~Mm^ zn<9+6hxxqyEB0+oc@M02&64T#&S|_JO^d(_! z;^1X~i~r_bUEYD)a9R1@QUn?V!o%*h3P&IaN0E(oVhS|}iK6%W@wzF~u!&R{>Bz7! zIub7t%0auPwPIsYkVKlaL=F`1xaQm9Ec0!+(aCId zNDj{#uzk@?>#%gMFDVGkat)vovRsj8K}=PcEBb}tX`VKP7FxZlvn#j*7r&G-BiULN#mQqzE7liWCK=<4>X`_C(yY zt-~aIlRDjSv1qSaSDzJs+(TvquY>dU%4;*O_$aUAIbCGu3_=aDdq(f_i0ah4Iw*ag z$!*rqE=Qq(b7DACw@T7jLSdw!7b~mB#|F^jW3C?Gh7;lt^C5RItl2x`sYH!W$x#YIDD3&g zZkVW;TI!IZRhls~-0buS%6qW}@J5Qv!uo`yAP}Q{s#zi2jw^<H)W6`ut(sAmne2k`pJQMJ+u?NGhQW2OeVfW0fz}!c%)ir|78UIMK<+xov zfrgPpw(Km7yJlzq9Cw?A=rIlUD>#G~E$ot$G{8beibZR7SFW#TZcpLhTKUV)YcCwU zsLrIFOiIcL%yl%h8oKp()P1vZgc;C>=C|v;NG%T_%SgR=S9zV!e{> zwA!SqMax&p@M|T3-?%7#6#k=0d_fy5LvxjA*8DaCu`y#8C9pE))J> zKOFzvKVeBob`NQJ9#puDCnp7IP59uy+#KOLmg^da;jS=ltp{*Kr78O&kX zj3l(6ggYVooY9gXCD`m~Kz_qGu29FPPugI6E3flyzx@!{{TK`!>nN#8zLD3j{UkpL(&RB{N@+1J`zPn*{(7ES@f7 z6>H6i8JgeR=tVDxA`90BqWna48=&J&4IZRr9oDvuat{B=Q?*?0cD}wE35U6sz-9zA z19I$WS!oLSi_3ECs4GoL$7$Du4ZuJMye9uG6CudCTOknNi@`%E1I}&o#PCE?)gvuP zM?1$_{{y8Esg^Q}=Jx5|=%4rnW=tXf$`B&zzNikhkJUkJ(`L-cT7V9iOp=&KK}$`? zjJmcOS05tEb zeGWh^rI~@#P3dZSD|=~hAifb9JfL;zs4KtL>24`2rvb{QG9Ph+@YphSGPfasIcpWa z1wGg{O`kJBYN3yzku_j<>cWI=cj}@igmQS~#KiIY-<7SJU}~3K8*@4oLQSppaUnA1 zlBKA(&ulx?Syo2tQ|)R-w&(qY7^&WaM%8RLPM>@$T(iBoW~64HIyp8>RJ>@%?6*NI zCWI<9)0&~-oX0u8hFrPP%O#t><$NJuOoRLUXx46P4#5K%Tu}OabmKP{9X+d+jSzW zRYFa5epgW{kU!YO=E76s(kzgyq>ygeRV1zkaLke|Tqy}Y_2{~+ZI?I+@isXlWP7(e zC??ppPGWt#py75R!yA-R*$3ddru10IwRk*nBuKwsr%j}=WtvnGT_#(4C{-E{X#}MK zJR@PSJV|!$KBSg-LQ(i;!FnX@RfoEI&< z5M@6@M^kGDg4BY$$z<0R=Qnc8xa^qc`k8ASQ-TAUw47v5(}F3ozxIQ)poaMyp8@ZwXB8i&R#K`DYEEZ)kH@fHdAmgDNiXn$%AUfLyB9R)UMs_dI z`O2|F!c*zJ!kudny$8BwWCTxdarYkzi!pLU$c$k?WLWzN%+2%6WGz_AwsBnu1F5OfYroba=4ePW2tI%ug-vE&UAUFxd~tK&vJgA2ATPOL z(D_657UV#Zp#c1I&!)YNH52wR95JJV5@8U6My<)S9Bcyu2jx}U-#yovKek9#hu+4G z+3yc>Z3KXE=ZrRPQ7$p=mhK z)7X%;^c>Qvi;l;{t82@@&QIzZoMFl~C%(;+xY+AsBjFwq6#CQhpp>#eSd zybtJ_x`vPh0-8RQ9djUlft+ipv_9IWyXRon!CKQ>KnMkHuY(O1_Vwhui$(a2%&hc0 z{$dL29B$i38M(mMj6>ll2*D z=C*LyQdR=(o7hU0slx~3B@87*waf4TYiqGiW7;w`UocJ@DQRyN8Y?*!MVb(1YqkP; zRtcNH#cs%@QmDzGc3SG$>*ZC_8!Gggz@cv0<3wRRQaQHv$I+Z#i&e}VFcJIpxvrCn#-z~3jA}+F@e87UiX~IrrVOII(;yU}WcABj(2n@v{Kj#>vS9tgUsvDJJX3eL?Do@1 zLyb`EucYTli);!E7*}lWXuo~Mq-twi*_i~rwMsjd4ao{&&UaB!f)h+Gz9k{E}=sxqU15h zi}+Ft$dBJbNRFSwxOc!1ieJe48wTq@H zqbSQ9+h1_Zk6E*Iom0h8iiFioI8FpR+r4Q(Vj&wI{Tt$~;(*kEjT3~(Qxwx=78y=( z&_i7#mVY1@oY8H4qB9j+aoKq+qs`4v1S6b?(BQ-VSyXDiHBZPbnL@mRR%Gvhc@kym zczRewUz`R7P@hwtfgM736__(pUv*Aw+fz$6ZYs(Fj?oI2XARylTBhg3zAgQ2?%|%x z>>m3f#|TPNO3T_f+jW-IGKuVy%^=CbPQ+wfj-P-vnx3-h-_Ww$-Hq`v)6i$-Y!?+! zOc!9*lA)`)f3pY*FJ%PN+GVC22rw8!wMQ5gvG;ZKHRD9ned;~v7w)IH^-$=e)X)g9jE6v3|X{EW? zC#^IW`y@%UZa7Dsg!xAMk6R)Pbx4#XH=ntYE-}}Q+=`{^ikx6GmT|cHMqs9Ud42;k z9mRI0TL%Y>g~;F`B-pnKVclyIoyw%c^bVCP6P}DFjj$k8k3#z7sWY(1HAh9p5oz5d zVG7x$FPqj~#m-uPXd%)hLL&ZP>ntxSr$Rna+0E7#eE*nbsKNJ-xtrI0!avmkBOdC| z_r@7@?ahceYM$6t*D(cjMN6qLOLzg@Fbap`IFg>hm7-=%z;SYjTnd``LO7Db-bL}oe~D~F0lQ9;vDj0D+|PxI4pUeNefJ(diWeZLRJ zlJ)=2jU~fZHkQmgi-+q-R9ZLbpLgmE0*;!@(ro6Y;c2ZMZP22S_o0!VQp9XcGrR8? zcZ5s51<$+G`|$MTG}$K6G+}Bx`WMsHs6k@(89C7AU~`zGn1*bCe7Viax>hu@Dzy;w zv#{yftwxn*xV(QxFqmSXXZ1K zb=1pd2#c;vy4FyI*cAD;;@Xi4VD4^=t2J22@|GL4wUm$#&3$qFwf6GVcsVaHV_oBk zWd-4~LQgnc-uoJMS%C$9#)vg5?S z(9SRLg)GuS37|)+6m~*6FI`u{@Wg&!<<1&ce|LurKNHz$^tQx9J7Fy|U4$ zC~4vMnnGBq(miD@z-uCIv`~Q8pxE+SljlLSNsT z6i%2&SW$yybCAv8H6#56Ag=A5*v}Lw!$Pis!fgy|?#Tg~iHLp59LC|LeiwaA#!w6T zWzI`THXFqjwjZR5gS-!NVH3-A)eOVNOB`7pNxN1|8|y>qQ*=)+V>^tUGPHIVgl0>V zB_$u+WWoYOJrD;Bw}qk!{6?&GlzqxsNnWt`|bkF4>l zi&shJwTVt0Qxo)B!9Rd_fW?KLUdc@%`(smE1c`@@F*B!w-ywO2r